From a14452907b6d9ecb70d237beeee1a75b5aabddb1 Mon Sep 17 00:00:00 2001 From: jdalton Date: Tue, 14 Apr 2026 22:54:02 -0400 Subject: [PATCH 01/10] chore: sync hooks, skills, and check-new-deps from socket-repo-template - Sync commit-msg hooks (socket-lib version with trap cleanup) - Sync security-scan skill from canonical template - Add check-new-deps hook for real-time dependency protection - Update .gitignore to allow .claude/hooks/ and .claude/settings.json --- .claude/hooks/check-new-deps/README.md | 102 + .claude/hooks/check-new-deps/index.mts | 753 + .../node_modules/.package-lock.json | 62 + .../packageurl-js/CHANGELOG.md | 226 + .../@socketregistry/packageurl-js/LICENSE | 21 + .../packageurl-js/LICENSE.original | 18 + .../@socketregistry/packageurl-js/README.md | 223 + .../packageurl-js/data/npm/builtin-names.json | 70 + .../packageurl-js/data/npm/legacy-names.json | 2839 + .../packageurl-js/dist/compare.d.ts | 98 + .../packageurl-js/dist/constants.d.ts | 5 + .../packageurl-js/dist/decode.d.ts | 6 + .../packageurl-js/dist/encode.d.ts | 26 + .../packageurl-js/dist/error.d.ts | 32 + .../packageurl-js/dist/exists.d.ts | 31 + .../packageurl-js/dist/exists.js | 12502 +++ .../packageurl-js/dist/helpers.d.ts | 5 + .../packageurl-js/dist/index.d.ts | 55 + .../packageurl-js/dist/index.js | 7326 ++ .../packageurl-js/dist/lang.d.ts | 9 + .../packageurl-js/dist/normalize.d.ts | 31 + .../packageurl-js/dist/objects.d.ts | 15 + .../dist/package-url-builder.d.ts | 303 + .../packageurl-js/dist/package-url.d.ts | 292 + .../packageurl-js/dist/primordials.d.ts | 87 + .../packageurl-js/dist/purl-component.d.ts | 30 + .../packageurl-js/dist/purl-exists.d.ts | 62 + .../dist/purl-qualifier-names.d.ts | 14 + .../packageurl-js/dist/purl-type.d.ts | 2 + .../packageurl-js/dist/purl-types/alpm.d.ts | 14 + .../packageurl-js/dist/purl-types/apk.d.ts | 14 + .../packageurl-js/dist/purl-types/bazel.d.ts | 20 + .../dist/purl-types/bitbucket.d.ts | 19 + .../dist/purl-types/bitnami.d.ts | 14 + .../packageurl-js/dist/purl-types/cargo.d.ts | 53 + .../dist/purl-types/cocoapods.d.ts | 43 + .../dist/purl-types/composer.d.ts | 43 + .../packageurl-js/dist/purl-types/conan.d.ts | 15 + .../packageurl-js/dist/purl-types/conda.d.ts | 64 + .../packageurl-js/dist/purl-types/cpan.d.ts | 42 + .../packageurl-js/dist/purl-types/cran.d.ts | 43 + .../packageurl-js/dist/purl-types/deb.d.ts | 14 + .../packageurl-js/dist/purl-types/docker.d.ts | 63 + .../packageurl-js/dist/purl-types/gem.d.ts | 51 + .../dist/purl-types/generic.d.ts | 21 + .../packageurl-js/dist/purl-types/github.d.ts | 19 + .../packageurl-js/dist/purl-types/gitlab.d.ts | 19 + .../packageurl-js/dist/purl-types/golang.d.ts | 49 + .../dist/purl-types/hackage.d.ts | 28 + .../packageurl-js/dist/purl-types/hex.d.ts | 47 + .../dist/purl-types/huggingface.d.ts | 14 + .../packageurl-js/dist/purl-types/julia.d.ts | 19 + .../dist/purl-types/luarocks.d.ts | 14 + .../packageurl-js/dist/purl-types/maven.d.ts | 45 + .../packageurl-js/dist/purl-types/mlflow.d.ts | 19 + .../packageurl-js/dist/purl-types/npm.d.ts | 145 + .../packageurl-js/dist/purl-types/nuget.d.ts | 42 + .../packageurl-js/dist/purl-types/oci.d.ts | 19 + .../packageurl-js/dist/purl-types/opam.d.ts | 14 + .../packageurl-js/dist/purl-types/otp.d.ts | 19 + .../packageurl-js/dist/purl-types/pub.d.ts | 47 + .../packageurl-js/dist/purl-types/pypi.d.ts | 57 + .../packageurl-js/dist/purl-types/qpkg.d.ts | 14 + .../packageurl-js/dist/purl-types/rpm.d.ts | 14 + .../packageurl-js/dist/purl-types/socket.d.ts | 21 + .../packageurl-js/dist/purl-types/swid.d.ts | 15 + .../packageurl-js/dist/purl-types/swift.d.ts | 15 + .../dist/purl-types/unknown.d.ts | 20 + .../dist/purl-types/vscode-extension.d.ts | 60 + .../packageurl-js/dist/purl-types/yocto.d.ts | 19 + .../packageurl-js/dist/result.d.ts | 129 + .../packageurl-js/dist/stringify.d.ts | 36 + .../packageurl-js/dist/strings.d.ts | 79 + .../packageurl-js/dist/url-converter.d.ts | 93 + .../packageurl-js/dist/validate.d.ts | 100 + .../packageurl-js/dist/vers.d.ts | 70 + .../packageurl-js/package.json | 112 + .../@socketsecurity/lib/CHANGELOG.md | 1817 + .../node_modules/@socketsecurity/lib/LICENSE | 21 + .../@socketsecurity/lib/README.md | 225 + .../@socketsecurity/lib/data/extensions.json | 28 + .../@socketsecurity/lib/dist/abort.d.ts | 24 + .../@socketsecurity/lib/dist/abort.js | 60 + .../@socketsecurity/lib/dist/agent.d.ts | 179 + .../@socketsecurity/lib/dist/agent.js | 285 + .../@socketsecurity/lib/dist/ansi.d.ts | 42 + .../@socketsecurity/lib/dist/ansi.js | 62 + .../@socketsecurity/lib/dist/archives.d.ts | 91 + .../@socketsecurity/lib/dist/archives.js | 393 + .../@socketsecurity/lib/dist/argv/flags.d.ts | 283 + .../@socketsecurity/lib/dist/argv/flags.js | 295 + .../@socketsecurity/lib/dist/argv/parse.d.ts | 107 + .../@socketsecurity/lib/dist/argv/parse.js | 169 + .../@socketsecurity/lib/dist/arrays.d.ts | 172 + .../@socketsecurity/lib/dist/arrays.js | 86 + .../@socketsecurity/lib/dist/bin.d.ts | 179 + .../@socketsecurity/lib/dist/bin.js | 520 + .../@socketsecurity/lib/dist/cacache.d.ts | 129 + .../@socketsecurity/lib/dist/cacache.js | 152 + .../lib/dist/cache-with-ttl.d.ts | 140 + .../lib/dist/cache-with-ttl.js | 260 + .../@socketsecurity/lib/dist/colors.d.ts | 49 + .../@socketsecurity/lib/dist/colors.js | 58 + .../lib/dist/constants/agents.d.ts | 32 + .../lib/dist/constants/agents.js | 137 + .../lib/dist/constants/core.d.ts | 22 + .../lib/dist/constants/core.js | 59 + .../lib/dist/constants/encoding.d.ts | 13 + .../lib/dist/constants/encoding.js | 50 + .../lib/dist/constants/github.d.ts | 7 + .../lib/dist/constants/github.js | 32 + .../lib/dist/constants/licenses.d.ts | 8 + .../lib/dist/constants/licenses.js | 68 + .../constants/lifecycle-script-names.d.ts | 8 + .../dist/constants/lifecycle-script-names.js | 44 + .../constants/maintained-node-versions.d.ts | 7 + .../constants/maintained-node-versions.js | 41 + .../lib/dist/constants/node.d.ts | 30 + .../lib/dist/constants/node.js | 192 + .../constants/package-default-node-range.d.ts | 3 + .../constants/package-default-node-range.js | 41 + .../package-default-socket-categories.d.ts | 6 + .../package-default-socket-categories.js | 29 + .../lib/dist/constants/packages.d.ts | 26 + .../lib/dist/constants/packages.js | 134 + .../lib/dist/constants/platform.d.ts | 27 + .../lib/dist/constants/platform.js | 67 + .../lib/dist/constants/process.d.ts | 2 + .../lib/dist/constants/process.js | 40 + .../lib/dist/constants/socket.d.ts | 43 + .../lib/dist/constants/socket.js | 119 + .../lib/dist/constants/testing.d.ts | 9 + .../lib/dist/constants/testing.js | 38 + .../lib/dist/constants/time.d.ts | 11 + .../lib/dist/constants/time.js | 41 + .../lib/dist/constants/typescript.d.ts | 6 + .../lib/dist/constants/typescript.js | 56 + .../@socketsecurity/lib/dist/cover/code.d.ts | 8 + .../@socketsecurity/lib/dist/cover/code.js | 156 + .../lib/dist/cover/formatters.d.ts | 27 + .../lib/dist/cover/formatters.js | 105 + .../@socketsecurity/lib/dist/cover/type.d.ts | 7 + .../@socketsecurity/lib/dist/cover/type.js | 76 + .../@socketsecurity/lib/dist/cover/types.d.ts | 70 + .../@socketsecurity/lib/dist/cover/types.js | 17 + .../@socketsecurity/lib/dist/debug.d.ts | 98 + .../@socketsecurity/lib/dist/debug.js | 339 + .../@socketsecurity/lib/dist/dlx/binary.d.ts | 269 + .../@socketsecurity/lib/dist/dlx/binary.js | 450 + .../@socketsecurity/lib/dist/dlx/cache.d.ts | 31 + .../@socketsecurity/lib/dist/dlx/cache.js | 40 + .../@socketsecurity/lib/dist/dlx/detect.d.ts | 99 + .../@socketsecurity/lib/dist/dlx/detect.js | 165 + .../@socketsecurity/lib/dist/dlx/dir.d.ts | 58 + .../@socketsecurity/lib/dist/dlx/dir.js | 79 + .../lib/dist/dlx/manifest.d.ts | 140 + .../@socketsecurity/lib/dist/dlx/manifest.js | 291 + .../@socketsecurity/lib/dist/dlx/package.d.ts | 226 + .../@socketsecurity/lib/dist/dlx/package.js | 429 + .../lib/dist/dlx/packages.d.ts | 60 + .../@socketsecurity/lib/dist/dlx/packages.js | 125 + .../@socketsecurity/lib/dist/dlx/paths.d.ts | 51 + .../@socketsecurity/lib/dist/dlx/paths.js | 75 + .../lib/dist/effects/pulse-frames.d.ts | 36 + .../lib/dist/effects/pulse-frames.js | 66 + .../lib/dist/effects/text-shimmer.d.ts | 47 + .../lib/dist/effects/text-shimmer.js | 188 + .../lib/dist/effects/types.d.ts | 47 + .../@socketsecurity/lib/dist/effects/types.js | 17 + .../lib/dist/effects/ultra.d.ts | 22 + .../@socketsecurity/lib/dist/effects/ultra.js | 63 + .../@socketsecurity/lib/dist/env.d.ts | 122 + .../@socketsecurity/lib/dist/env.js | 172 + .../@socketsecurity/lib/dist/env/ci.d.ts | 16 + .../@socketsecurity/lib/dist/env/ci.js | 33 + .../@socketsecurity/lib/dist/env/debug.d.ts | 15 + .../@socketsecurity/lib/dist/env/debug.js | 33 + .../@socketsecurity/lib/dist/env/github.d.ts | 128 + .../@socketsecurity/lib/dist/env/github.js | 75 + .../@socketsecurity/lib/dist/env/helpers.d.ts | 54 + .../@socketsecurity/lib/dist/env/helpers.js | 52 + .../@socketsecurity/lib/dist/env/home.d.ts | 15 + .../@socketsecurity/lib/dist/env/home.js | 33 + .../@socketsecurity/lib/dist/env/locale.d.ts | 48 + .../@socketsecurity/lib/dist/env/locale.js | 45 + .../lib/dist/env/node-auth-token.d.ts | 15 + .../lib/dist/env/node-auth-token.js | 33 + .../lib/dist/env/node-env.d.ts | 15 + .../@socketsecurity/lib/dist/env/node-env.js | 33 + .../@socketsecurity/lib/dist/env/npm.d.ts | 80 + .../@socketsecurity/lib/dist/env/npm.js | 57 + .../lib/dist/env/package-manager.d.ts | 61 + .../lib/dist/env/package-manager.js | 89 + .../@socketsecurity/lib/dist/env/path.d.ts | 15 + .../@socketsecurity/lib/dist/env/path.js | 33 + .../lib/dist/env/pre-commit.d.ts | 16 + .../lib/dist/env/pre-commit.js | 34 + .../@socketsecurity/lib/dist/env/rewire.d.ts | 155 + .../@socketsecurity/lib/dist/env/rewire.js | 114 + .../@socketsecurity/lib/dist/env/shell.d.ts | 15 + .../@socketsecurity/lib/dist/env/shell.js | 33 + .../lib/dist/env/socket-cli-shadow.d.ts | 78 + .../lib/dist/env/socket-cli-shadow.js | 58 + .../lib/dist/env/socket-cli.d.ts | 223 + .../lib/dist/env/socket-cli.js | 112 + .../@socketsecurity/lib/dist/env/socket.d.ts | 243 + .../@socketsecurity/lib/dist/env/socket.js | 118 + .../lib/dist/env/temp-dir.d.ts | 48 + .../@socketsecurity/lib/dist/env/temp-dir.js | 45 + .../@socketsecurity/lib/dist/env/term.d.ts | 15 + .../@socketsecurity/lib/dist/env/term.js | 33 + .../@socketsecurity/lib/dist/env/test.d.ts | 50 + .../@socketsecurity/lib/dist/env/test.js | 48 + .../@socketsecurity/lib/dist/env/windows.d.ts | 64 + .../@socketsecurity/lib/dist/env/windows.js | 51 + .../@socketsecurity/lib/dist/env/xdg.d.ts | 48 + .../@socketsecurity/lib/dist/env/xdg.js | 45 + .../@socketsecurity/lib/dist/errors.d.ts | 6 + .../@socketsecurity/lib/dist/errors.js | 31 + .../lib/dist/external/@inquirer/checkbox.js | 5 + .../lib/dist/external/@inquirer/confirm.js | 5 + .../lib/dist/external/@inquirer/input.js | 5 + .../lib/dist/external/@inquirer/password.js | 5 + .../lib/dist/external/@inquirer/search.js | 5 + .../lib/dist/external/@inquirer/select.js | 5 + .../lib/dist/external/@npmcli/arborist.js | 5 + .../lib/dist/external/@npmcli/package-json.js | 14927 ++++ .../@npmcli/package-json/lib/read-package.js | 154 + .../external/@npmcli/package-json/lib/sort.js | 101 + .../dist/external/@npmcli/promise-spawn.js | 485 + .../@socketregistry/is-unicode-supported.js | 47 + .../external/@socketregistry/packageurl-js.js | 7378 ++ .../external/@socketregistry/yocto-spinner.js | 465 + .../lib/dist/external/@yarnpkg/extensions.js | 1030 + .../lib/dist/external/adm-zip.js | 2696 + .../lib/dist/external/cacache.js | 5 + .../lib/dist/external/debug.js | 871 + .../@socketsecurity/lib/dist/external/del.js | 6 + .../lib/dist/external/external-pack.js | 3411 + .../lib/dist/external/fast-glob.js | 6 + .../lib/dist/external/fast-sort.js | 145 + .../lib/dist/external/get-east-asian-width.js | 95 + .../lib/dist/external/has-flag.js | 6 + .../lib/dist/external/libnpmexec.js | 38 + .../lib/dist/external/libnpmpack.js | 5 + .../lib/dist/external/make-fetch-happen.js | 5 + .../dist/external/normalize-package-data.js | 5 + .../lib/dist/external/npm-pack.js | 66443 ++++++++++++++++ .../lib/dist/external/npm-package-arg.js | 5 + .../lib/dist/external/p-map.js | 240 + .../lib/dist/external/pacote.js | 5 + .../lib/dist/external/pico-pack.js | 7419 ++ .../lib/dist/external/picomatch.js | 6 + .../lib/dist/external/pony-cause.js | 148 + .../lib/dist/external/semver.js | 5 + .../lib/dist/external/signal-exit.js | 5 + .../lib/dist/external/spdx-correct.js | 5 + .../dist/external/spdx-expression-parse.js | 5 + .../lib/dist/external/spdx-pack.js | 1418 + .../lib/dist/external/streaming-iterables.js | 1061 + .../lib/dist/external/supports-color.js | 8 + .../lib/dist/external/tar-fs.js | 3073 + .../external/validate-npm-package-name.js | 5 + .../lib/dist/external/which.js | 263 + .../lib/dist/external/yargs-parser.js | 1101 + .../lib/dist/external/yoctocolors-cjs.js | 6 + .../@socketsecurity/lib/dist/external/zod.js | 15223 ++++ .../@socketsecurity/lib/dist/fs.d.ts | 937 + .../@socketsecurity/lib/dist/fs.js | 819 + .../@socketsecurity/lib/dist/functions.d.ts | 57 + .../@socketsecurity/lib/dist/functions.js | 70 + .../@socketsecurity/lib/dist/git.d.ts | 540 + .../@socketsecurity/lib/dist/git.js | 382 + .../@socketsecurity/lib/dist/github.d.ts | 470 + .../@socketsecurity/lib/dist/github.js | 221 + .../@socketsecurity/lib/dist/globs.d.ts | 85 + .../@socketsecurity/lib/dist/globs.js | 176 + .../lib/dist/http-request.d.ts | 975 + .../@socketsecurity/lib/dist/http-request.js | 727 + .../@socketsecurity/lib/dist/ipc.d.ts | 366 + .../@socketsecurity/lib/dist/ipc.js | 282 + .../@socketsecurity/lib/dist/json/edit.d.ts | 16 + .../@socketsecurity/lib/dist/json/edit.js | 259 + .../@socketsecurity/lib/dist/json/format.d.ts | 158 + .../@socketsecurity/lib/dist/json/format.js | 121 + .../@socketsecurity/lib/dist/json/parse.d.ts | 76 + .../@socketsecurity/lib/dist/json/parse.js | 75 + .../@socketsecurity/lib/dist/json/types.d.ts | 229 + .../@socketsecurity/lib/dist/json/types.js | 17 + .../@socketsecurity/lib/dist/links/index.d.ts | 65 + .../@socketsecurity/lib/dist/links/index.js | 63 + .../@socketsecurity/lib/dist/logger.d.ts | 995 + .../@socketsecurity/lib/dist/logger.js | 1484 + .../@socketsecurity/lib/dist/memoization.d.ts | 147 + .../@socketsecurity/lib/dist/memoization.js | 254 + .../@socketsecurity/lib/dist/objects.d.ts | 519 + .../@socketsecurity/lib/dist/objects.js | 313 + .../lib/dist/package-extensions.d.ts | 3 + .../lib/dist/package-extensions.js | 83 + .../@socketsecurity/lib/dist/packages.d.ts | 154 + .../@socketsecurity/lib/dist/packages.js | 131 + .../lib/dist/packages/edit.d.ts | 132 + .../@socketsecurity/lib/dist/packages/edit.js | 354 + .../lib/dist/packages/exports.d.ts | 70 + .../lib/dist/packages/exports.js | 164 + .../lib/dist/packages/isolation.d.ts | 22 + .../lib/dist/packages/isolation.js | 217 + .../lib/dist/packages/licenses.d.ts | 127 + .../lib/dist/packages/licenses.js | 210 + .../lib/dist/packages/manifest.d.ts | 34 + .../lib/dist/packages/manifest.js | 177 + .../lib/dist/packages/normalize.d.ts | 43 + .../lib/dist/packages/normalize.js | 105 + .../lib/dist/packages/operations.d.ts | 105 + .../lib/dist/packages/operations.js | 258 + .../lib/dist/packages/provenance.d.ts | 21 + .../lib/dist/packages/provenance.js | 190 + .../lib/dist/packages/specs.d.ts | 58 + .../lib/dist/packages/specs.js | 86 + .../lib/dist/packages/validation.d.ts | 33 + .../lib/dist/packages/validation.js | 55 + .../lib/dist/paths/dirnames.d.ts | 13 + .../lib/dist/paths/dirnames.js | 50 + .../@socketsecurity/lib/dist/paths/exts.d.ts | 18 + .../@socketsecurity/lib/dist/paths/exts.js | 68 + .../lib/dist/paths/filenames.d.ts | 16 + .../lib/dist/paths/filenames.js | 62 + .../@socketsecurity/lib/dist/paths/globs.d.ts | 10 + .../@socketsecurity/lib/dist/paths/globs.js | 44 + .../lib/dist/paths/normalize.d.ts | 466 + .../lib/dist/paths/normalize.js | 488 + .../lib/dist/paths/packages.d.ts | 10 + .../lib/dist/paths/packages.js | 55 + .../lib/dist/paths/rewire.d.ts | 71 + .../@socketsecurity/lib/dist/paths/rewire.js | 90 + .../lib/dist/paths/socket.d.ts | 87 + .../@socketsecurity/lib/dist/paths/socket.js | 162 + .../@socketsecurity/lib/dist/performance.d.ts | 178 + .../@socketsecurity/lib/dist/performance.js | 230 + .../lib/dist/process-lock.d.ts | 140 + .../@socketsecurity/lib/dist/process-lock.js | 317 + .../lib/dist/promise-queue.d.ts | 37 + .../@socketsecurity/lib/dist/promise-queue.js | 122 + .../@socketsecurity/lib/dist/promises.d.ts | 457 + .../@socketsecurity/lib/dist/promises.js | 270 + .../@socketsecurity/lib/dist/regexps.d.ts | 20 + .../@socketsecurity/lib/dist/regexps.js | 32 + .../lib/dist/releases/github.d.ts | 238 + .../lib/dist/releases/github.js | 421 + .../lib/dist/releases/socket-btm.d.ts | 136 + .../lib/dist/releases/socket-btm.js | 208 + .../@socketsecurity/lib/dist/sea.d.ts | 25 + .../@socketsecurity/lib/dist/sea.js | 57 + .../@socketsecurity/lib/dist/shadow.d.ts | 24 + .../@socketsecurity/lib/dist/shadow.js | 71 + .../@socketsecurity/lib/dist/signal-exit.d.ts | 50 + .../@socketsecurity/lib/dist/signal-exit.js | 246 + .../@socketsecurity/lib/dist/sorts.d.ts | 61 + .../@socketsecurity/lib/dist/sorts.js | 110 + .../@socketsecurity/lib/dist/spawn.d.ts | 435 + .../@socketsecurity/lib/dist/spawn.js | 338 + .../@socketsecurity/lib/dist/spinner.d.ts | 438 + .../@socketsecurity/lib/dist/spinner.js | 966 + .../@socketsecurity/lib/dist/ssri.d.ts | 95 + .../@socketsecurity/lib/dist/ssri.js | 73 + .../@socketsecurity/lib/dist/stdio/clear.d.ts | 140 + .../@socketsecurity/lib/dist/stdio/clear.js | 95 + .../lib/dist/stdio/divider.d.ts | 144 + .../@socketsecurity/lib/dist/stdio/divider.js | 91 + .../lib/dist/stdio/footer.d.ts | 92 + .../@socketsecurity/lib/dist/stdio/footer.js | 96 + .../lib/dist/stdio/header.d.ts | 106 + .../@socketsecurity/lib/dist/stdio/header.js | 102 + .../@socketsecurity/lib/dist/stdio/mask.d.ts | 151 + .../@socketsecurity/lib/dist/stdio/mask.js | 224 + .../lib/dist/stdio/progress.d.ts | 148 + .../lib/dist/stdio/progress.js | 212 + .../lib/dist/stdio/prompts.d.ts | 195 + .../@socketsecurity/lib/dist/stdio/prompts.js | 176 + .../lib/dist/stdio/stderr.d.ts | 138 + .../@socketsecurity/lib/dist/stdio/stderr.js | 102 + .../lib/dist/stdio/stdout.d.ts | 144 + .../@socketsecurity/lib/dist/stdio/stdout.js | 116 + .../@socketsecurity/lib/dist/streams.d.ts | 44 + .../@socketsecurity/lib/dist/streams.js | 71 + .../@socketsecurity/lib/dist/strings.d.ts | 468 + .../@socketsecurity/lib/dist/strings.js | 261 + .../lib/dist/suppress-warnings.d.ts | 64 + .../lib/dist/suppress-warnings.js | 115 + .../@socketsecurity/lib/dist/tables.d.ts | 69 + .../@socketsecurity/lib/dist/tables.js | 130 + .../lib/dist/temporary-executor.d.ts | 16 + .../lib/dist/temporary-executor.js | 66 + .../lib/dist/themes/context.d.ts | 80 + .../lib/dist/themes/context.js | 81 + .../lib/dist/themes/index.d.ts | 53 + .../@socketsecurity/lib/dist/themes/index.js | 59 + .../lib/dist/themes/themes.d.ts | 49 + .../@socketsecurity/lib/dist/themes/themes.js | 206 + .../lib/dist/themes/types.d.ts | 93 + .../@socketsecurity/lib/dist/themes/types.js | 17 + .../lib/dist/themes/utils.d.ts | 78 + .../@socketsecurity/lib/dist/themes/utils.js | 118 + .../@socketsecurity/lib/dist/types.d.ts | 67 + .../@socketsecurity/lib/dist/types.js | 63 + .../@socketsecurity/lib/dist/url.d.ts | 119 + .../@socketsecurity/lib/dist/url.js | 144 + .../lib/dist/utils/get-ipc.d.ts | 15 + .../@socketsecurity/lib/dist/utils/get-ipc.js | 58 + .../lib/dist/validation/json-parser.d.ts | 229 + .../lib/dist/validation/json-parser.js | 127 + .../lib/dist/validation/types.d.ts | 142 + .../lib/dist/validation/types.js | 17 + .../@socketsecurity/lib/dist/versions.d.ts | 206 + .../@socketsecurity/lib/dist/versions.js | 175 + .../@socketsecurity/lib/dist/words.d.ts | 42 + .../@socketsecurity/lib/dist/words.js | 52 + .../@socketsecurity/lib/dist/zod.d.ts | 5 + .../@socketsecurity/lib/dist/zod.js | 29 + .../@socketsecurity/lib/package.json | 798 + .../@socketsecurity/sdk/CHANGELOG.md | 899 + .../node_modules/@socketsecurity/sdk/LICENSE | 21 + .../@socketsecurity/sdk/README.md | 59 + .../api-method-quota-and-permissions.json | 252 + .../@socketsecurity/sdk/dist/constants.d.ts | 18 + .../@socketsecurity/sdk/dist/file-upload.d.ts | 5 + .../@socketsecurity/sdk/dist/http-client.d.ts | 14 + .../@socketsecurity/sdk/dist/index.d.ts | 10 + .../@socketsecurity/sdk/dist/index.js | 19685 +++++ .../@socketsecurity/sdk/dist/quota-utils.d.ts | 58 + .../sdk/dist/socket-sdk-class.d.ts | 1271 + .../@socketsecurity/sdk/dist/testing.d.ts | 453 + .../@socketsecurity/sdk/dist/testing.js | 286 + .../sdk/dist/types-strict.d.ts | 342 + .../@socketsecurity/sdk/dist/types.d.ts | 358 + .../@socketsecurity/sdk/dist/user-agent.d.ts | 13 + .../@socketsecurity/sdk/dist/utils.d.ts | 88 + .../@socketsecurity/sdk/package.json | 115 + .../sdk/types/api-helpers.d.ts | 69 + .../@socketsecurity/sdk/types/api.d.ts | 19055 +++++ .../node_modules/@types/node/LICENSE | 21 + .../node_modules/@types/node/README.md | 15 + .../node_modules/@types/node/assert.d.ts | 1115 + .../@types/node/assert/strict.d.ts | 111 + .../node_modules/@types/node/async_hooks.d.ts | 623 + .../@types/node/buffer.buffer.d.ts | 472 + .../node_modules/@types/node/buffer.d.ts | 1934 + .../@types/node/child_process.d.ts | 1476 + .../node_modules/@types/node/cluster.d.ts | 578 + .../@types/node/compatibility/iterators.d.ts | 21 + .../node_modules/@types/node/console.d.ts | 452 + .../node_modules/@types/node/constants.d.ts | 21 + .../node_modules/@types/node/crypto.d.ts | 5417 ++ .../node_modules/@types/node/dgram.d.ts | 600 + .../@types/node/diagnostics_channel.d.ts | 576 + .../node_modules/@types/node/dns.d.ts | 923 + .../@types/node/dns/promises.d.ts | 503 + .../node_modules/@types/node/domain.d.ts | 170 + .../node_modules/@types/node/events.d.ts | 976 + .../node_modules/@types/node/fs.d.ts | 4714 ++ .../node_modules/@types/node/fs/promises.d.ts | 1317 + .../node_modules/@types/node/globals.d.ts | 170 + .../@types/node/globals.typedarray.d.ts | 41 + .../node_modules/@types/node/http.d.ts | 2134 + .../node_modules/@types/node/http2.d.ts | 2756 + .../node_modules/@types/node/https.d.ts | 579 + .../node_modules/@types/node/index.d.ts | 101 + .../node_modules/@types/node/inspector.d.ts | 277 + .../@types/node/inspector.generated.d.ts | 4233 + .../node_modules/@types/node/module.d.ts | 894 + .../node_modules/@types/node/net.d.ts | 1054 + .../node_modules/@types/node/os.d.ts | 507 + .../node_modules/@types/node/package.json | 155 + .../node_modules/@types/node/path.d.ts | 200 + .../node_modules/@types/node/perf_hooks.d.ts | 982 + .../node_modules/@types/node/process.d.ts | 2062 + .../node_modules/@types/node/punycode.d.ts | 117 + .../node_modules/@types/node/querystring.d.ts | 152 + .../node_modules/@types/node/readline.d.ts | 594 + .../@types/node/readline/promises.d.ts | 161 + .../node_modules/@types/node/repl.d.ts | 438 + .../node_modules/@types/node/sea.d.ts | 162 + .../node_modules/@types/node/sqlite.d.ts | 830 + .../node_modules/@types/node/stream.d.ts | 1683 + .../@types/node/stream/consumers.d.ts | 38 + .../@types/node/stream/promises.d.ts | 90 + .../node_modules/@types/node/stream/web.d.ts | 573 + .../@types/node/string_decoder.d.ts | 67 + .../node_modules/@types/node/test.d.ts | 2339 + .../node_modules/@types/node/timers.d.ts | 285 + .../@types/node/timers/promises.d.ts | 108 + .../node_modules/@types/node/tls.d.ts | 1269 + .../@types/node/trace_events.d.ts | 197 + .../@types/node/ts5.6/buffer.buffer.d.ts | 468 + .../ts5.6/compatibility/float16array.d.ts | 71 + .../@types/node/ts5.6/globals.typedarray.d.ts | 36 + .../node_modules/@types/node/ts5.6/index.d.ts | 103 + .../ts5.7/compatibility/float16array.d.ts | 72 + .../node_modules/@types/node/ts5.7/index.d.ts | 103 + .../node_modules/@types/node/tty.d.ts | 208 + .../node_modules/@types/node/url.d.ts | 1033 + .../node_modules/@types/node/util.d.ts | 2325 + .../node_modules/@types/node/v8.d.ts | 952 + .../node_modules/@types/node/vm.d.ts | 1180 + .../node_modules/@types/node/wasi.d.ts | 202 + .../node/web-globals/abortcontroller.d.ts | 34 + .../@types/node/web-globals/crypto.d.ts | 32 + .../@types/node/web-globals/domexception.d.ts | 68 + .../@types/node/web-globals/events.d.ts | 97 + .../@types/node/web-globals/fetch.d.ts | 50 + .../@types/node/web-globals/navigator.d.ts | 25 + .../@types/node/web-globals/storage.d.ts | 24 + .../@types/node/web-globals/streams.d.ts | 22 + .../@types/node/worker_threads.d.ts | 896 + .../node_modules/@types/node/zlib.d.ts | 681 + .../node_modules/undici-types/LICENSE | 21 + .../node_modules/undici-types/README.md | 6 + .../node_modules/undici-types/agent.d.ts | 32 + .../node_modules/undici-types/api.d.ts | 43 + .../undici-types/balanced-pool.d.ts | 29 + .../undici-types/cache-interceptor.d.ts | 172 + .../node_modules/undici-types/cache.d.ts | 36 + .../undici-types/client-stats.d.ts | 15 + .../node_modules/undici-types/client.d.ts | 108 + .../node_modules/undici-types/connector.d.ts | 34 + .../undici-types/content-type.d.ts | 21 + .../node_modules/undici-types/cookies.d.ts | 30 + .../undici-types/diagnostics-channel.d.ts | 74 + .../node_modules/undici-types/dispatcher.d.ts | 276 + .../undici-types/env-http-proxy-agent.d.ts | 22 + .../node_modules/undici-types/errors.d.ts | 161 + .../undici-types/eventsource.d.ts | 66 + .../node_modules/undici-types/fetch.d.ts | 211 + .../node_modules/undici-types/formdata.d.ts | 108 + .../undici-types/global-dispatcher.d.ts | 9 + .../undici-types/global-origin.d.ts | 7 + .../node_modules/undici-types/h2c-client.d.ts | 73 + .../node_modules/undici-types/handlers.d.ts | 15 + .../node_modules/undici-types/header.d.ts | 160 + .../node_modules/undici-types/index.d.ts | 80 + .../undici-types/interceptors.d.ts | 39 + .../node_modules/undici-types/mock-agent.d.ts | 68 + .../undici-types/mock-call-history.d.ts | 111 + .../undici-types/mock-client.d.ts | 27 + .../undici-types/mock-errors.d.ts | 12 + .../undici-types/mock-interceptor.d.ts | 94 + .../node_modules/undici-types/mock-pool.d.ts | 27 + .../node_modules/undici-types/package.json | 55 + .../node_modules/undici-types/patch.d.ts | 29 + .../node_modules/undici-types/pool-stats.d.ts | 19 + .../node_modules/undici-types/pool.d.ts | 41 + .../undici-types/proxy-agent.d.ts | 29 + .../node_modules/undici-types/readable.d.ts | 68 + .../undici-types/retry-agent.d.ts | 8 + .../undici-types/retry-handler.d.ts | 125 + .../undici-types/snapshot-agent.d.ts | 109 + .../node_modules/undici-types/util.d.ts | 18 + .../node_modules/undici-types/utility.d.ts | 7 + .../node_modules/undici-types/webidl.d.ts | 341 + .../node_modules/undici-types/websocket.d.ts | 186 + .../hooks/check-new-deps/package-lock.json | 73 + .claude/hooks/check-new-deps/package.json | 20 + .../check-new-deps/test/extract-deps.test.mts | 750 + .claude/hooks/check-new-deps/tsconfig.json | 13 + .claude/settings.json | 15 + .claude/skills/security-scan/SKILL.md | 1 + .git-hooks/commit-msg | 19 +- .gitignore | 2 + .husky/commit-msg | 7 +- 569 files changed, 301040 insertions(+), 8 deletions(-) create mode 100644 .claude/hooks/check-new-deps/README.md create mode 100644 .claude/hooks/check-new-deps/index.mts create mode 100644 .claude/hooks/check-new-deps/node_modules/.package-lock.json create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/CHANGELOG.md create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/LICENSE create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/LICENSE.original create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/README.md create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/data/npm/builtin-names.json create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/data/npm/legacy-names.json create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/compare.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/constants.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/decode.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/encode.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/error.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/exists.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/exists.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/helpers.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/index.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/index.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/lang.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/normalize.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/objects.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/package-url-builder.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/package-url.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/primordials.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-component.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-exists.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-qualifier-names.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-type.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/alpm.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/apk.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/bazel.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/bitbucket.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/bitnami.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/cargo.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/cocoapods.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/composer.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/conan.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/conda.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/cpan.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/cran.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/deb.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/docker.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/gem.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/generic.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/github.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/gitlab.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/golang.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/hackage.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/hex.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/huggingface.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/julia.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/luarocks.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/maven.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/mlflow.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/npm.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/nuget.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/oci.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/opam.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/otp.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/pub.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/pypi.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/qpkg.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/rpm.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/socket.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/swid.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/swift.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/unknown.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/vscode-extension.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/yocto.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/result.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/stringify.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/strings.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/url-converter.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/validate.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/vers.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/package.json create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/CHANGELOG.md create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/LICENSE create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/README.md create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/data/extensions.json create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/abort.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/abort.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/agent.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/agent.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ansi.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ansi.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/archives.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/archives.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/argv/flags.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/argv/flags.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/argv/parse.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/argv/parse.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/arrays.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/arrays.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/bin.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/bin.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cacache.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cacache.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cache-with-ttl.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cache-with-ttl.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/colors.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/colors.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/agents.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/agents.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/core.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/core.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/encoding.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/encoding.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/github.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/github.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/licenses.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/licenses.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/lifecycle-script-names.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/lifecycle-script-names.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/maintained-node-versions.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/maintained-node-versions.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/node.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/node.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/package-default-node-range.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/package-default-node-range.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/package-default-socket-categories.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/package-default-socket-categories.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/packages.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/packages.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/platform.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/platform.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/process.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/process.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/socket.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/socket.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/testing.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/testing.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/time.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/time.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/typescript.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/typescript.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/code.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/code.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/formatters.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/formatters.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/type.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/type.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/types.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/types.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/debug.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/debug.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/binary.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/binary.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/cache.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/cache.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/detect.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/detect.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/dir.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/dir.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/manifest.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/manifest.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/package.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/package.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/packages.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/packages.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/paths.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/paths.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/pulse-frames.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/pulse-frames.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/text-shimmer.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/text-shimmer.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/types.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/types.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/ultra.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/ultra.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/ci.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/ci.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/debug.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/debug.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/github.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/github.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/helpers.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/helpers.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/home.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/home.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/locale.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/locale.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/node-auth-token.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/node-auth-token.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/node-env.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/node-env.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/npm.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/npm.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/package-manager.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/package-manager.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/path.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/path.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/pre-commit.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/pre-commit.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/rewire.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/rewire.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/shell.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/shell.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket-cli-shadow.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket-cli-shadow.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket-cli.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket-cli.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/temp-dir.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/temp-dir.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/term.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/term.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/test.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/test.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/windows.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/windows.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/xdg.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/xdg.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/errors.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/errors.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/checkbox.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/confirm.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/input.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/password.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/search.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/select.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@npmcli/arborist.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@npmcli/package-json.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@npmcli/package-json/lib/read-package.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@npmcli/package-json/lib/sort.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@npmcli/promise-spawn.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@socketregistry/is-unicode-supported.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@socketregistry/packageurl-js.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@socketregistry/yocto-spinner.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@yarnpkg/extensions.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/adm-zip.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/cacache.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/debug.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/del.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/external-pack.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/fast-glob.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/fast-sort.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/get-east-asian-width.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/has-flag.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/libnpmexec.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/libnpmpack.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/make-fetch-happen.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/normalize-package-data.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/npm-pack.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/npm-package-arg.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/p-map.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/pacote.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/pico-pack.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/picomatch.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/pony-cause.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/semver.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/signal-exit.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/spdx-correct.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/spdx-expression-parse.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/spdx-pack.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/streaming-iterables.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/supports-color.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/tar-fs.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/validate-npm-package-name.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/which.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/yargs-parser.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/yoctocolors-cjs.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/zod.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/fs.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/fs.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/functions.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/functions.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/git.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/git.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/github.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/github.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/globs.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/globs.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/http-request.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/http-request.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ipc.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ipc.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/edit.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/edit.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/format.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/format.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/parse.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/parse.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/types.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/types.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/links/index.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/links/index.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/logger.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/logger.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/memoization.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/memoization.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/objects.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/objects.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/package-extensions.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/package-extensions.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/edit.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/edit.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/exports.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/exports.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/isolation.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/isolation.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/licenses.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/licenses.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/manifest.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/manifest.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/normalize.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/normalize.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/operations.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/operations.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/provenance.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/provenance.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/specs.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/specs.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/validation.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/validation.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/dirnames.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/dirnames.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/exts.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/exts.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/filenames.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/filenames.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/globs.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/globs.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/normalize.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/normalize.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/packages.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/packages.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/rewire.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/rewire.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/socket.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/socket.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/performance.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/performance.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/process-lock.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/process-lock.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/promise-queue.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/promise-queue.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/promises.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/promises.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/regexps.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/regexps.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/releases/github.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/releases/github.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/releases/socket-btm.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/releases/socket-btm.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/sea.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/sea.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/shadow.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/shadow.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/signal-exit.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/signal-exit.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/sorts.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/sorts.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/spawn.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/spawn.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/spinner.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/spinner.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ssri.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ssri.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/clear.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/clear.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/divider.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/divider.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/footer.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/footer.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/header.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/header.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/mask.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/mask.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/progress.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/progress.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/prompts.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/prompts.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/stderr.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/stderr.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/stdout.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/stdout.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/streams.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/streams.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/strings.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/strings.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/suppress-warnings.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/suppress-warnings.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/tables.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/tables.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/temporary-executor.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/temporary-executor.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/context.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/context.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/index.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/index.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/themes.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/themes.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/types.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/types.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/utils.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/utils.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/types.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/types.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/url.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/url.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/utils/get-ipc.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/utils/get-ipc.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/validation/json-parser.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/validation/json-parser.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/validation/types.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/validation/types.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/versions.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/versions.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/words.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/words.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/zod.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/zod.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/package.json create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/CHANGELOG.md create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/LICENSE create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/README.md create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/data/api-method-quota-and-permissions.json create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/constants.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/file-upload.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/http-client.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/index.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/index.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/quota-utils.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/socket-sdk-class.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/testing.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/testing.js create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/types-strict.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/types.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/user-agent.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/utils.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/package.json create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/types/api-helpers.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/types/api.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/LICENSE create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/README.md create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/assert.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/assert/strict.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/async_hooks.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/buffer.buffer.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/buffer.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/child_process.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/cluster.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/compatibility/iterators.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/console.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/constants.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/crypto.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/dgram.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/diagnostics_channel.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/dns.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/dns/promises.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/domain.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/events.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/fs.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/fs/promises.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/globals.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/globals.typedarray.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/http.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/http2.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/https.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/index.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/inspector.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/inspector.generated.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/module.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/net.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/os.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/package.json create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/path.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/perf_hooks.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/process.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/punycode.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/querystring.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/readline.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/readline/promises.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/repl.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/sea.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/sqlite.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/stream.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/stream/consumers.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/stream/promises.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/stream/web.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/string_decoder.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/test.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/timers.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/timers/promises.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/tls.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/trace_events.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/ts5.6/buffer.buffer.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/ts5.6/globals.typedarray.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/ts5.6/index.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/ts5.7/index.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/tty.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/url.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/util.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/v8.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/vm.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/wasi.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/web-globals/abortcontroller.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/web-globals/crypto.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/web-globals/domexception.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/web-globals/events.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/web-globals/fetch.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/web-globals/navigator.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/web-globals/storage.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/web-globals/streams.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/worker_threads.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/@types/node/zlib.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/LICENSE create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/README.md create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/agent.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/api.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/balanced-pool.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/cache-interceptor.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/cache.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/client-stats.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/client.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/connector.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/content-type.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/cookies.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/diagnostics-channel.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/dispatcher.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/env-http-proxy-agent.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/errors.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/eventsource.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/fetch.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/formdata.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/global-dispatcher.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/global-origin.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/h2c-client.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/handlers.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/header.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/index.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/interceptors.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/mock-agent.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/mock-call-history.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/mock-client.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/mock-errors.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/mock-interceptor.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/mock-pool.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/package.json create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/patch.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/pool-stats.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/pool.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/proxy-agent.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/readable.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/retry-agent.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/retry-handler.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/snapshot-agent.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/util.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/utility.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/webidl.d.ts create mode 100644 .claude/hooks/check-new-deps/node_modules/undici-types/websocket.d.ts create mode 100644 .claude/hooks/check-new-deps/package-lock.json create mode 100644 .claude/hooks/check-new-deps/package.json create mode 100644 .claude/hooks/check-new-deps/test/extract-deps.test.mts create mode 100644 .claude/hooks/check-new-deps/tsconfig.json create mode 100644 .claude/settings.json diff --git a/.claude/hooks/check-new-deps/README.md b/.claude/hooks/check-new-deps/README.md new file mode 100644 index 00000000..5be7f3a6 --- /dev/null +++ b/.claude/hooks/check-new-deps/README.md @@ -0,0 +1,102 @@ +# check-new-deps Hook + +A Claude Code pre-tool hook that checks new dependencies against [Socket.dev](https://socket.dev) before they're added to the project. It runs automatically every time Claude tries to edit or create a dependency manifest file. + +## What it does + +When Claude edits a file like `package.json`, `requirements.txt`, `Cargo.toml`, or any of 17+ supported ecosystems, this hook: + +1. **Detects the file type** and extracts dependency names from the content +2. **Diffs against the old content** (for edits) so only *newly added* deps are checked +3. **Queries the Socket.dev API** to check for malware and critical security alerts +4. **Blocks the edit** (exit code 2) if malware or critical alerts are found +5. **Warns** (but allows) if a package has a low quality score +6. **Allows** (exit code 0) if everything is clean or the file isn't a manifest + +## How it works + +``` +Claude wants to edit package.json + │ + ▼ +Hook receives the edit via stdin (JSON) + │ + ▼ +Extract new deps from new_string +Diff against old_string (if Edit) + │ + ▼ +Build Package URLs (PURLs) for each dep + │ + ▼ +Call sdk.checkMalware(components) + - ≤5 deps: parallel firewall API (fast, full data) + - >5 deps: batch PURL API (efficient) + │ + ├── Malware/critical alert → EXIT 2 (blocked) + ├── Low score → warn, EXIT 0 (allowed) + └── Clean → EXIT 0 (allowed) +``` + +## Supported ecosystems + +| File | Ecosystem | Example dep format | +|------|-----------|-------------------| +| `package.json` | npm | `"express": "^4.19"` | +| `package-lock.json`, `pnpm-lock.yaml`, `yarn.lock` | npm | lockfile entries | +| `requirements.txt`, `pyproject.toml`, `setup.py` | PyPI | `flask>=3.0` | +| `Cargo.toml`, `Cargo.lock` | Cargo (Rust) | `serde = "1.0"` | +| `go.mod`, `go.sum` | Go | `github.com/gin-gonic/gin v1.9` | +| `Gemfile`, `Gemfile.lock` | RubyGems | `gem 'rails'` | +| `composer.json`, `composer.lock` | Composer (PHP) | `"vendor/package": "^3.0"` | +| `pom.xml`, `build.gradle` | Maven (Java) | `commons` | +| `pubspec.yaml`, `pubspec.lock` | Pub (Dart) | `flutter_bloc: ^8.1` | +| `.csproj` | NuGet (.NET) | `` | +| `mix.exs` | Hex (Elixir) | `{:phoenix, "~> 1.7"}` | +| `Package.swift` | Swift PM | `.package(url: "...", from: "4.0")` | +| `*.tf` | Terraform | `source = "hashicorp/aws"` | +| `Brewfile` | Homebrew | `brew "git"` | +| `conanfile.*` | Conan (C/C++) | `boost/1.83.0` | +| `flake.nix` | Nix | `github:owner/repo` | +| `.github/workflows/*.yml` | GitHub Actions | `uses: owner/repo@ref` | + +## Configuration + +The hook is registered in `.claude/settings.json`: + +```json +{ + "hooks": { + "PreToolUse": [ + { + "matcher": "Edit|Write", + "hooks": [ + { + "type": "command", + "command": "node .claude/hooks/check-new-deps/index.mts" + } + ] + } + ] + } +} +``` + +## Dependencies + +All dependencies use `catalog:` references from the workspace root (`pnpm-workspace.yaml`): + +- `@socketsecurity/sdk` — Socket.dev SDK v4 with `checkMalware()` API +- `@socketsecurity/lib` — shared constants and path utilities +- `@socketregistry/packageurl-js` — Package URL (PURL) parsing and stringification + +## Caching + +API responses are cached in-memory for 5 minutes (max 500 entries) to avoid redundant network calls when Claude checks the same dependency multiple times in a session. + +## Exit codes + +| Code | Meaning | Claude behavior | +|------|---------|----------------| +| 0 | Allow | Edit/Write proceeds normally | +| 2 | Block | Edit/Write is rejected, Claude sees the error message | diff --git a/.claude/hooks/check-new-deps/index.mts b/.claude/hooks/check-new-deps/index.mts new file mode 100644 index 00000000..335868cd --- /dev/null +++ b/.claude/hooks/check-new-deps/index.mts @@ -0,0 +1,753 @@ +#!/usr/bin/env node +// Claude Code PreToolUse hook — Socket.dev dependency firewall. +// +// Intercepts Edit/Write tool calls to dependency manifest files across +// 17+ package ecosystems. Extracts newly-added dependencies, builds +// Package URLs (PURLs), and checks them against the Socket.dev API +// using the SDK v4 checkMalware() method. +// +// Diff-aware: when old_string is present (Edit), only deps that +// appear in new_string but NOT in old_string are checked. +// +// Caching: API responses are cached in-process with a TTL to avoid +// redundant network calls when the same dep is checked repeatedly. +// The cache auto-evicts expired entries and caps at MAX_CACHE_SIZE. +// +// Exit codes: +// 0 = allow (no new deps, all clean, or non-dep file) +// 2 = block (malware or critical alert from Socket.dev) + +import { + parseNpmSpecifier, + stringify, +} from '@socketregistry/packageurl-js' +import type { PackageURL } from '@socketregistry/packageurl-js' +import { + SOCKET_PUBLIC_API_TOKEN, +} from '@socketsecurity/lib/constants/socket' +import { getDefaultLogger } from '@socketsecurity/lib/logger' +import { + normalizePath, +} from '@socketsecurity/lib/paths/normalize' +import { SocketSdk } from '@socketsecurity/sdk' +import type { MalwareCheckPackage } from '@socketsecurity/sdk' + +const logger = getDefaultLogger() + +// Per-request timeout (ms) to avoid blocking the hook on slow responses. +const API_TIMEOUT = 5_000 +// Deps scoring below this threshold trigger a warning (not a block). +const LOW_SCORE_THRESHOLD = 0.5 +// Max PURLs per batch request (API limit is 1024). +const MAX_BATCH_SIZE = 1024 +// How long (ms) to cache a successful API response (5 minutes). +const CACHE_TTL = 5 * 60 * 1_000 +// Maximum cache entries before forced eviction of oldest. +const MAX_CACHE_SIZE = 500 + +// SDK instance using the public API token (no user config needed). +const sdk = new SocketSdk(SOCKET_PUBLIC_API_TOKEN, { + timeout: API_TIMEOUT, +}) + +// --- types --- + +// Extracted dependency with ecosystem type, name, and optional scope. +interface Dep { + type: string + name: string + namespace?: string + version?: string +} + +// Shape of the JSON blob Claude Code pipes to the hook via stdin. +interface HookInput { + tool_name: string + tool_input?: { + file_path?: string + new_string?: string + old_string?: string + content?: string + } +} + +// Result of checking a single dep against the Socket.dev API. +interface CheckResult { + purl: string + blocked?: boolean + warned?: boolean + reason?: string + score?: number +} + + +// A cached API lookup result with expiration timestamp. +interface CacheEntry { + result: CheckResult | undefined + expiresAt: number +} + +// Function that extracts deps from file content. +type Extractor = (content: string) => Dep[] + +// --- cache --- + +// Simple TTL + max-size cache for API responses. +// Prevents redundant network calls when the same dep is checked +// multiple times in a session. Evicts expired entries on every +// get/set, and drops oldest entries if the cache exceeds MAX_CACHE_SIZE. +const cache = new Map() + +function cacheGet(key: string): CacheEntry | undefined { + const entry = cache.get(key) + if (!entry) return + if (Date.now() > entry.expiresAt) { + cache.delete(key) + return + } + return entry +} + +function cacheSet( + key: string, + result: CheckResult | undefined, +): void { + // Evict expired entries before inserting. + if (cache.size >= MAX_CACHE_SIZE) { + const now = Date.now() + for (const [k, v] of cache) { + if (now > v.expiresAt) cache.delete(k) + } + } + // If still over capacity, drop the oldest entries (FIFO). + if (cache.size >= MAX_CACHE_SIZE) { + const excess = cache.size - MAX_CACHE_SIZE + 1 + let dropped = 0 + for (const k of cache.keys()) { + if (dropped >= excess) break + cache.delete(k) + dropped++ + } + } + cache.set(key, { + result, + expiresAt: Date.now() + CACHE_TTL, + }) +} + +// Manifest file suffix → extractor function. +// __proto__: null prevents prototype-pollution on lookups. +const extractors: Record = { + __proto__: null as unknown as Extractor, + '.csproj': extract( + // .NET: + /PackageReference\s+Include="([^"]+)"/g, + (m): Dep => ({ type: 'nuget', name: m[1] }) + ), + '.tf': extractTerraform, + 'Brewfile': extractBrewfile, + 'build.gradle': extractMaven, + 'build.gradle.kts': extractMaven, + 'Cargo.lock': extract( + // Rust lockfile: [[package]]\nname = "serde"\nversion = "1.0.0" + /name\s*=\s*"([\w][\w-]*)"/gm, + (m): Dep => ({ type: 'cargo', name: m[1] }) + ), + 'Cargo.toml': (content: string): Dep[] => { + // Rust: only extract from [dependencies], [dev-dependencies], [build-dependencies] sections. + // Skip [package], [lib], [bin], [workspace], [profile] metadata sections. + const deps: Dep[] = [] + const depSectionRe = /^\[(?:(?:dev-|build-)?dependencies(?:\.[^\]]+)?)\]\s*$/gm + const anySectionRe = /^\[/gm + let sectionMatch + while ((sectionMatch = depSectionRe.exec(content)) !== null) { + const sectionStart = sectionMatch.index + sectionMatch[0].length + anySectionRe.lastIndex = sectionStart + const nextSection = anySectionRe.exec(content) + const sectionEnd = nextSection ? nextSection.index : content.length + const sectionText = content.slice(sectionStart, sectionEnd) + const lineRe = /^(\w[\w-]*)\s*=\s*(?:\{[^}]*version\s*=\s*"[^"]*"|\s*"[^"]*")/gm + let m + while ((m = lineRe.exec(sectionText)) !== null) { + deps.push({ type: 'cargo', name: m[1] }) + } + } + return deps + }, + 'conanfile.py': extractConan, + 'conanfile.txt': extractConan, + 'composer.lock': extract( + // PHP lockfile: "name": "vendor/package" + /"name":\s*"([a-z][\w-]*)\/([a-z][\w-]*)"/g, + (m): Dep => ({ + type: 'composer', + namespace: m[1], + name: m[2], + }) + ), + 'composer.json': extract( + // PHP: "vendor/package": "^3.0" + /"([a-z][\w-]*)\/([a-z][\w-]*)":\s*"/g, + (m): Dep => ({ + type: 'composer', + namespace: m[1], + name: m[2], + }) + ), + 'flake.nix': extractNixFlake, + 'Gemfile.lock': extract( + // Ruby lockfile: indented gem names under GEM > specs + /^\s{4}(\w[\w-]*)\s+\(/gm, + (m): Dep => ({ type: 'gem', name: m[1] }) + ), + 'Gemfile': extract( + // Ruby: gem 'rails', '~> 7.0' + /gem\s+['"]([^'"]+)['"]/g, + (m): Dep => ({ type: 'gem', name: m[1] }) + ), + 'go.sum': extract( + // Go checksum file: module/path v1.2.3 h1:hash= + /([\w./-]+)\s+v[\d.]+/gm, + (m): Dep => { + const parts = m[1].split('/') + return { + type: 'golang', + name: parts.pop()!, + namespace: parts.join('/') || undefined, + } + } + ), + 'go.mod': extract( + // Go: github.com/gin-gonic/gin v1.9.1 + /([\w./-]+)\s+v[\d.]+/gm, + (m): Dep => { + const parts = m[1].split('/') + return { + type: 'golang', + name: parts.pop()!, + namespace: parts.join('/') || undefined, + } + } + ), + 'mix.exs': extract( + // Elixir: {:phoenix, "~> 1.7"} + /\{:(\w+),/g, + (m): Dep => ({ type: 'hex', name: m[1] }) + ), + 'package-lock.json': extractNpmLockfile, + 'package.json': extractNpm, + 'Package.swift': extract( + // Swift: .package(url: "https://github.com/vapor/vapor.git", from: "4.0.0") + /\.package\s*\(\s*url:\s*"https:\/\/github\.com\/([^/]+)\/([^"]+)".*?from:\s*"([^"]+)"/gs, + (m): Dep => ({ + type: 'swift', + namespace: `github.com/${m[1]}`, + name: m[2].replace(/\.git$/, ''), + version: m[3], + }) + ), + 'Pipfile.lock': extractPipfileLock, + 'pnpm-lock.yaml': extractNpmLockfile, + 'poetry.lock': extract( + // Python poetry lockfile: [[package]]\nname = "flask" + /name\s*=\s*"([a-zA-Z][\w.-]*)"/gm, + (m): Dep => ({ type: 'pypi', name: m[1] }) + ), + 'pom.xml': extractMaven, + 'Project.toml': extract( + // Julia: JSON3 = "uuid-string" + /^(\w[\w.-]*)\s*=\s*"/gm, + (m): Dep => ({ type: 'julia', name: m[1] }) + ), + 'pubspec.lock': extract( + // Dart lockfile: top-level package names at column 2 + /^ (\w[\w_-]*):/gm, + (m): Dep => ({ type: 'pub', name: m[1] }) + ), + 'pubspec.yaml': extract( + // Dart: flutter_bloc: ^8.1.3 (2-space indented under dependencies:) + /^\s{2}(\w[\w_-]*):\s/gm, + (m): Dep => ({ type: 'pub', name: m[1] }) + ), + 'pyproject.toml': extractPypi, + 'requirements.txt': extractPypi, + 'setup.py': extractPypi, + 'yarn.lock': extractNpmLockfile, +} + +// --- main (only when executed directly, not imported) --- + +if (import.meta.filename === process.argv[1]) { + // Read the full JSON blob from stdin (piped by Claude Code). + let input = '' + for await (const chunk of process.stdin) input += chunk + const hook: HookInput = JSON.parse(input) + + if (hook.tool_name !== 'Edit' && hook.tool_name !== 'Write') { + process.exitCode = 0 + } else { + process.exitCode = await check(hook) + } +} + +// --- core --- + +// Orchestrates the full check: extract deps, diff against old, query API. +async function check(hook: HookInput): Promise { + // Normalize backslashes and collapse segments for cross-platform paths. + const filePath = normalizePath( + hook.tool_input?.file_path || '' + ) + + // GitHub Actions workflows live under .github/workflows/*.yml + const isWorkflow = + /\.github\/workflows\/.*\.ya?ml$/.test(filePath) + const extractor = isWorkflow + ? extractGitHubActions + : findExtractor(filePath) + if (!extractor) return 0 + + // Edit provides new_string; Write provides content. + const newContent = + hook.tool_input?.new_string + ?? hook.tool_input?.content + ?? '' + const oldContent = hook.tool_input?.old_string ?? '' + + const newDeps = extractor(newContent) + if (newDeps.length === 0) return 0 + + // Diff-aware: only check deps added in this edit, not pre-existing. + const deps = oldContent + ? diffDeps(newDeps, extractor(oldContent)) + : newDeps + if (deps.length === 0) return 0 + + // Check all deps via SDK checkMalware(). + const { blocked, warned } = await checkDepsBatch(deps) + + if (warned.length > 0) { + logger.warn('Socket: low-scoring dependencies (not blocked):') + for (const w of warned) { + logger.warn(` ${w.purl}: overall score ${w.score}`) + } + } + if (blocked.length > 0) { + logger.error(`Socket: blocked ${blocked.length} dep(s):`) + for (const b of blocked) { + logger.error(` ${b.purl}: ${b.reason}`) + } + return 2 + } + return 0 +} + +// Check deps against Socket.dev using SDK v4 checkMalware(). +// The SDK automatically routes small sets (<=5) to parallel firewall +// requests and larger sets to the batch PURL API. +// Deps already in cache are skipped; results are cached after lookup. +async function checkDepsBatch( + deps: Dep[], +): Promise<{ blocked: CheckResult[]; warned: CheckResult[] }> { + const blocked: CheckResult[] = [] + const warned: CheckResult[] = [] + + // Partition deps into cached vs uncached. + const uncached: Array<{ dep: Dep; purl: string }> = [] + for (const dep of deps) { + const purl = stringify(dep as unknown as PackageURL) + const cached = cacheGet(purl) + if (cached) { + if (cached.result?.blocked) blocked.push(cached.result) + else if (cached.result?.warned) warned.push(cached.result) + continue + } + uncached.push({ dep, purl }) + } + + if (!uncached.length) return { blocked, warned } + + try { + // Process in chunks to respect API batch size limit. + for (let i = 0; i < uncached.length; i += MAX_BATCH_SIZE) { + const batch = uncached.slice(i, i + MAX_BATCH_SIZE) + const components = batch.map(({ purl }) => ({ purl })) + + const result = await sdk.checkMalware(components) + + if (!result.success) { + logger.warn( + `Socket: API returned ${result.status}, allowing all` + ) + return { blocked, warned } + } + + // Build lookup keyed by full PURL (includes namespace + version). + const purlByKey = new Map() + for (const { dep, purl } of batch) { + const ns = dep.namespace ? `${dep.namespace}/` : '' + purlByKey.set(`${dep.type}:${ns}${dep.name}`, purl) + } + + for (const pkg of result.data as MalwareCheckPackage[]) { + const ns = pkg.namespace ? `${pkg.namespace}/` : '' + const key = `${pkg.type}:${ns}${pkg.name}` + const purl = purlByKey.get(key) + if (!purl) continue + + // Check for malware or critical-severity alerts. + const critical = pkg.alerts.find( + a => a.severity === 'critical' || a.type === 'malware' + ) + if (critical) { + const cr: CheckResult = { + purl, + blocked: true, + reason: `${critical.type} — ${critical.severity ?? 'critical'}`, + } + cacheSet(purl, cr) + blocked.push(cr) + continue + } + + // Warn on low quality score. + if ( + pkg.score?.overall !== undefined + && pkg.score.overall < LOW_SCORE_THRESHOLD + ) { + const wr: CheckResult = { + purl, + warned: true, + score: pkg.score.overall, + } + cacheSet(purl, wr) + warned.push(wr) + continue + } + + // No blocking alerts — clean dep. + cacheSet(purl, undefined) + } + } + } catch (e) { + // Network failure — log and allow all deps through. + logger.warn( + `Socket: network error` + + ` (${(e as Error).message}), allowing all` + ) + } + + return { blocked, warned } +} + +// Return deps in `newDeps` that don't appear in `oldDeps` (by PURL). +function diffDeps(newDeps: Dep[], oldDeps: Dep[]): Dep[] { + const old = new Set( + oldDeps.map(d => stringify(d as unknown as PackageURL)) + ) + return newDeps.filter( + d => !old.has(stringify(d as unknown as PackageURL)) + ) +} + +// Match file path suffix against the extractors map. +function findExtractor( + filePath: string, +): Extractor | undefined { + for (const [suffix, fn] of Object.entries(extractors)) { + if (filePath.endsWith(suffix)) return fn + } +} + +// --- extractor factory --- + +// Higher-order function: takes a regex and a match→Dep transform, +// returns an Extractor that applies matchAll and collects results. +function extract( + re: RegExp, + transform: (m: RegExpExecArray) => Dep | undefined, +): Extractor { + return (content: string): Dep[] => { + const deps: Dep[] = [] + for (const m of content.matchAll(re)) { + const dep = transform(m as RegExpExecArray) + if (dep) deps.push(dep) + } + return deps + } +} + +// --- ecosystem extractors (alphabetic) --- + +// Homebrew (Brewfile): brew "package" or tap "owner/repo". +function extractBrewfile(content: string): Dep[] { + const deps: Dep[] = [] + // brew "git", cask "firefox", tap "homebrew/cask" + for (const m of content.matchAll( + /(?:brew|cask)\s+['"]([^'"]+)['"]/g + )) { + deps.push({ type: 'brew', name: m[1] }) + } + return deps +} + +// Conan (C/C++): "boost/1.83.0" in conanfile.txt, +// or requires = "zlib/1.3.0" in conanfile.py. +function extractConan(content: string): Dep[] { + const deps: Dep[] = [] + for (const m of content.matchAll( + /([a-z][\w.-]+)\/[\d.]+/gm + )) { + deps.push({ type: 'conan', name: m[1] }) + } + return deps +} + +// GitHub Actions: "uses: owner/repo@ref" in workflow YAML. +// Handles subpaths like "org/repo/subpath@v1". +function extractGitHubActions(content: string): Dep[] { + const deps: Dep[] = [] + for (const m of content.matchAll( + /uses:\s*['"]?([^@\s'"]+)@([^\s'"]+)/g + )) { + const parts = m[1].split('/') + if (parts.length >= 2) { + deps.push({ + type: 'github', + namespace: parts[0], + name: parts.slice(1).join('/'), + }) + } + } + return deps +} + +// Maven/Gradle (Java/Kotlin): +// pom.xml: org.apachecommons +// build.gradle(.kts): implementation 'group:artifact:version' +function extractMaven(content: string): Dep[] { + const deps: Dep[] = [] + // XML-style Maven POM declarations. + for (const m of content.matchAll( + /([^<]+)<\/groupId>\s*([^<]+)<\/artifactId>/g + )) { + deps.push({ + type: 'maven', + namespace: m[1], + name: m[2], + }) + } + // Gradle shorthand: implementation/api/compile 'group:artifact:ver' + for (const m of content.matchAll( + /(?:implementation|api|compile)\s+['"]([^:'"]+):([^:'"]+)(?::[^'"]*)?['"]/g + )) { + deps.push({ + type: 'maven', + namespace: m[1], + name: m[2], + }) + } + return deps +} + +// Convenience entry point for testing: route any file path +// through the correct extractor and return all deps found. +function extractNewDeps( + rawFilePath: string, + content: string, +): Dep[] { + // Normalize backslashes and collapse segments for cross-platform. + const filePath = normalizePath(rawFilePath) + const isWorkflow = + /\.github\/workflows\/.*\.ya?ml$/.test(filePath) + const extractor = isWorkflow + ? extractGitHubActions + : findExtractor(filePath) + return extractor ? extractor(content) : [] +} + +// Nix flakes (flake.nix): inputs.name.url = "github:owner/repo" +// or inputs.name = { url = "github:owner/repo"; }; +function extractNixFlake(content: string): Dep[] { + const deps: Dep[] = [] + // Match github:owner/repo patterns in flake inputs. + for (const m of content.matchAll( + /github:([^/\s"]+)\/([^/\s"]+)/g + )) { + deps.push({ + type: 'github', + namespace: m[1], + name: m[2].replace(/\/.*$/, ''), + }) + } + return deps +} + +// npm lockfiles (package-lock.json, pnpm-lock.yaml, yarn.lock): +// Each format references packages differently: +// package-lock.json: "node_modules/@scope/name" or "node_modules/name" +// pnpm-lock.yaml: /@scope/name@version or /name@version +// yarn.lock: "@scope/name@version" or name@version +function extractNpmLockfile(content: string): Dep[] { + const deps: Dep[] = [] + const seen = new Set() + + // package-lock.json: "node_modules/name" or "node_modules/@scope/name" + for (const m of content.matchAll( + /node_modules\/((?:@[\w.-]+\/)?[\w][\w.-]*)/g + )) { + addNpmDep(m[1], deps, seen) + } + // pnpm-lock.yaml: '/name@ver' or '/@scope/name@ver' + // yarn.lock: "name@ver" or "@scope/name@ver" + for (const m of content.matchAll( + /['"/]((?:@[\w.-]+\/)?[\w][\w.-]*)@/gm + )) { + addNpmDep(m[1], deps, seen) + } + return deps +} + +// Deduplicated npm dep insertion using parseNpmSpecifier. +function addNpmDep( + raw: string, + deps: Dep[], + seen: Set, +): void { + if (seen.has(raw)) return + seen.add(raw) + if (raw.startsWith('.') || raw.startsWith('/')) return + if (raw.startsWith('@') || /^[a-z]/.test(raw)) { + const { namespace, name } = parseNpmSpecifier(raw) + if (name) deps.push({ type: 'npm', namespace, name }) + } +} + +// npm (package.json): "name": "version" or "@scope/name": "ver". +// Only matches entries where the value looks like a version/range/specifier, +// not arbitrary string values like scripts or config. +function extractNpm(content: string): Dep[] { + const deps: Dep[] = [] + for (const m of content.matchAll( + /"(@?[^"]+)":\s*"([^"]*)"/g + )) { + const raw = m[1] + const val = m[2] + // Skip builtins, relative, and absolute paths. + if ( + raw.startsWith('node:') + || raw.startsWith('.') + || raw.startsWith('/') + ) continue + // Value must look like a version specifier: semver, range, workspace:, + // catalog:, npm:, *, latest, or starts with ^~><=. + if (!/^[\^~><=*]|^\d|^workspace:|^catalog:|^npm:|^latest$/.test(val)) continue + // Only lowercase or scoped names are real deps. + // Exclude known package.json metadata fields that look like deps. + if (PACKAGE_JSON_METADATA_KEYS.has(raw)) continue + if (raw.startsWith('@') || /^[a-z]/.test(raw)) { + const { namespace, name } = parseNpmSpecifier(raw) + if (name) deps.push({ type: 'npm', namespace, name }) + } + } + return deps +} + +// package.json metadata fields that match the "key": "value" dep pattern but aren't deps. +const PACKAGE_JSON_METADATA_KEYS = new Set([ + 'name', 'version', 'description', 'main', 'module', 'browser', 'types', + 'typings', 'license', 'homepage', 'repository', 'bugs', 'author', + 'type', 'engines', 'os', 'cpu', 'publishConfig', 'access', + 'sideEffects', 'unpkg', 'jsdelivr', 'exports', +]) + +// Pipfile.lock: JSON with "default" and "develop" sections keyed by package name. +function extractPipfileLock(content: string): Dep[] { + const deps: Dep[] = [] + try { + const lock = JSON.parse(content) as Record> + for (const section of ['default', 'develop']) { + const packages = lock[section] + if (packages && typeof packages === 'object') { + for (const name of Object.keys(packages)) { + deps.push({ type: 'pypi', name }) + } + } + } + } catch { + // JSON.parse fails on partial content (e.g. Edit new_string fragments). + // Fall back to regex matching package name keys in Pipfile.lock JSON. + for (const m of content.matchAll(/"([a-zA-Z][\w.-]*)"\s*:\s*\{/g)) { + deps.push({ type: 'pypi', name: m[1] }) + } + } + return deps +} + +// PyPI (requirements.txt, pyproject.toml, setup.py): +// requirements.txt: package>=1.0 or package==1.0 at line start +// pyproject.toml: "package>=1.0" in dependencies arrays +// setup.py: "package>=1.0" in install_requires lists +function extractPypi(content: string): Dep[] { + const deps: Dep[] = [] + const seen = new Set() + // requirements.txt style: package name at line start, followed by + // version specifier, extras bracket, or end of line. + for (const m of content.matchAll( + /^([a-zA-Z][\w.-]+)\s*(?:[>===18.20.8", + "pnpm": ">=11.0.0-rc.0" + } + }, + "node_modules/@socketsecurity/lib": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/@socketsecurity/lib/-/lib-5.18.2.tgz", + "integrity": "sha512-h6aGfphQ9jdVjUMGIKJcsIvT6BmzBo0OD20HzeK+6KQJi2HupfCUzIH26vDPxf+aYVmrX0/hKJDYI5sXfTGx9A==", + "license": "MIT", + "engines": { + "node": ">=22", + "pnpm": ">=11.0.0-rc.0" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@socketsecurity/sdk": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@socketsecurity/sdk/-/sdk-4.0.1.tgz", + "integrity": "sha512-fe3DQp2dFwhc0G6Za36GIMSV+QaPAP5L96K3ZOtywt9nhbwxc9IQwqzdOVztdn5Rbez3t9EHU9Esj24/hWdP0g==", + "license": "MIT", + "engines": { + "node": ">=18.20.8", + "pnpm": ">=11.0.0-rc.0" + } + }, + "node_modules/@types/node": { + "version": "24.9.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", + "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + } + } +} diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/CHANGELOG.md b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/CHANGELOG.md new file mode 100644 index 00000000..5609a971 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/CHANGELOG.md @@ -0,0 +1,226 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). + +## [1.4.2](https://github.com/SocketDev/socket-packageurl-js/releases/tag/v1.4.2) - 2026-04-14 + +### Changed + +- Reduce `exists.js` bundle from 3,300KB to 470KB by stubbing unused `@socketsecurity/lib` internals (sorts.js, globs.js) that were dragged in via lazy require chains but never called at runtime +- Remove unused `picomatch` runtime dependency and `@types/picomatch` — already bundled by esbuild via `@socketsecurity/lib`'s internal pico-pack + +## [1.4.1](https://github.com/SocketDev/socket-packageurl-js/releases/tag/v1.4.1) - 2026-03-30 + +### Changed + +- Bounded internal caches and string processing +- Freeze cached instances for immutability +- Improved primordial coverage for consistency +- Tidied up validation helpers and consolidated shared patterns + +### Fixed + +- Component comparator uses numeric comparison +- Stringify edge case with `"0"` as a valid component value +- VERS containment for compound range expressions + +## [1.4.0](https://github.com/SocketDev/socket-packageurl-js/releases/tag/v1.4.0) - 2026-03-28 + +### Added + +- **VERS parser**: First JavaScript implementation of the VERS (VErsion Range Specifier) companion spec to PURL +- **URL-to-PURL conversion**: `UrlConverter.fromUrl()` converts registry URLs to PackageURLs +- **`toSpec()` method**: Returns the package identity without the `pkg:type/` prefix +- **`isValid()` static method**: Quick validation without throwing +- **`fromUrl()` static method**: Convenience wrapper for `UrlConverter.fromUrl()` +- **Immutable copy methods**: `withVersion()`, `withNamespace()`, `withQualifier()`, `withQualifiers()`, `withSubpath()` return new instances +- **PurlBuilder factories**: Added type factories for common ecosystems +- **Input validation utilities**: Character detection for dangerous input +- **`vers` qualifier**: Added 6th standard qualifier per purl spec +- **`./exists` entry point**: Registry existence checks available via `@socketregistry/packageurl-js/exists` + +### Changed + +- **Bundle size reduced 95%**: Exists functions moved to separate entry point to avoid bundling HTTP dependencies +- **Hardened against prototype pollution**: Built-in references captured at module load time +- **Frozen constants**: Module-level data structures are immutable +- **Null prototype objects**: All user-facing object literals use null prototypes +- **Performance**: Instance caching for `fromString()`; `toString()` memoized +- **Version lowercasing**: Added for oci, pypi, and vscode-extension per upstream spec + +### Fixed + +- **ReDoS prevention**: Fixed potential denial-of-service in pattern matching +- **Input validation**: Reject dangerous characters in string components +- **VERS resource limits**: Constraint and value bounds enforced +- **vscode-extension validation**: Improved input validation + +## [1.3.5](https://github.com/SocketDev/socket-packageurl-js/releases/tag/v1.3.5) - 2025-11-02 + +### Changed + +- Updated @socketsecurity/lib to 3.1.2 + +## [1.3.4](https://github.com/SocketDev/socket-packageurl-js/releases/tag/v1.3.4) - 2025-11-02 + +### Changed + +- Bundled @socketsecurity/lib internally to reduce consumer dependencies +- Improved build output with shortened module identifiers for better readability + +### Added + +- Internal validation for bundle dependency configuration +- Pre-commit and pre-push git hooks + +## [1.3.3](https://github.com/SocketDev/socket-packageurl-js/releases/tag/v1.3.3) - 2025-11-01 + +### Fixed + +- Fixed reference to external file in build + +## [1.3.2](https://github.com/SocketDev/socket-packageurl-js/releases/tag/v1.3.2) - 2025-11-01 + +### Changed + +- Disabled minification in build output for improved readability and debugging + +## [1.3.1](https://github.com/SocketDev/socket-packageurl-js/releases/tag/v1.3.1) - 2025-10-21 + +### Changed + +- Use @socketsecurity/lib under the hood + +## [1.3.0](https://github.com/SocketDev/socket-packageurl-js/releases/tag/v1.3.0) - 2025-10-06 + +### Added + +- Re-exported `PURL_Type` enum from `@socketsecurity/registry` for type-safe package ecosystem identifiers +- Re-exported `EcosystemString` type for type annotations requiring valid PURL type strings +- Documentation and usage examples for `PURL_Type` enum in README + +## [1.2.0](https://github.com/SocketDev/socket-packageurl-js/releases/tag/v1.2.0) - 2025-10-04 + +### Added + +- Type coverage configuration with 100% coverage requirement +- Comprehensive backward compatibility tests for validation functions + +### Changed + +- Converted validation functions to options pattern with backward compatibility +- Renamed normalizePath to normalizePurlPath with options pattern +- Refactored PackageURL types with explicit exports + +### Fixed + +- Fixed error handling and concurrency issues in test suite +- Improved type safety with typed arrays replacing any[] + +## [1.1.6](https://github.com/SocketDev/socket-packageurl-js/releases/tag/v1.1.6) - 2025-10-03 + +### Changed + +- Enhanced TypeScript strictness with explicit `| undefined` for optional properties and parameters +- Added comprehensive JSDoc documentation for core classes +- Optimized build output by disabling source map generation + +## [1.1.5](https://github.com/SocketDev/socket-packageurl-js/releases/tag/v1.1.5) - 2025-09-30 + +### Added + +- Type-specific validation for cocoapods package names + - Name cannot contain whitespace + - Name cannot contain plus (+) character + - Name cannot begin with a period +- Type-specific validation for cpan package namespaces + - Namespace must be UPPERCASE when present +- Type-specific validation for swid package qualifiers + - Requires tag_id qualifier + - tag_id must not be empty + - GUID format tag_id must be lowercase + +### Fixed + +- Error message formatting in validateStrings function + +## [1.1.4](https://github.com/SocketDev/socket-packageurl-js/releases/tag/v1.1.4) - 2025-09-29 + +### Fixed + +- Fixed publishing workflow to ensure dist folder is built before npm publish +- Changed prepublishOnly script to prevent accidental local publishing + +## [1.1.3](https://github.com/SocketDev/socket-packageurl-js/releases/tag/v1.1.3) - 2025-09-29 + +### Fixed + +- Fixed tsgo transpilation bug that produced incorrect `exports.encodeComponent = void 0;` output + +## [1.1.2](https://github.com/SocketDev/socket-packageurl-js/releases/tag/v1.1.2) - 2025-09-27 + +### Changed + +- Enhanced build performance and reliability +- Improved package stability + +## [1.1.1](https://github.com/SocketDev/socket-packageurl-js/releases/tag/v1.1.1) - 2025-09-26 + +### Changed + +- Removed pnpm engine requirement from package.json + +## [1.1.0](https://github.com/SocketDev/socket-packageurl-js/releases/tag/v1.1.0) - 2025-09-26 + +### Added + +- **PackageURLBuilder**: Fluent API for constructing PackageURL instances with method chaining + - Static factory methods for common package types (npm, pypi, maven, gem, golang, cargo, nuget, composer) + - Support for all PackageURL components: type, namespace, name, version, qualifiers, and subpath + - `build()` method creates validated PackageURL instances + - `from()` static method creates builders from existing PackageURL instances +- **UrlConverter**: URL conversion utilities for Package URLs + - `toRepositoryUrl()` converts PackageURLs to repository URLs (supports 14+ package ecosystems) + - `toDownloadUrl()` converts PackageURLs to download URLs for package artifacts + - Support for multiple URL types: git, web, tarball, zip, jar, gem, wheel formats + - `getAllUrls()` convenience method for getting both repository and download URLs + - Type support checking with `supportsRepositoryUrl()` and `supportsDownloadUrl()` +- Support for parsing Package URLs that don't start with `pkg:` scheme +- Comprehensive documentation with usage examples + +### Changed + +- Enhanced documentation with improved structure and readability +- Added features section highlighting key benefits + +### Fixed + +- Various improvements and fixes + +## [1.0.8](https://github.com/SocketDev/socket-packageurl-js/releases/tag/v1.0.8) - 2025-09-01 + +### Changed + +- Updated implementation for PackageURL specification changes + +## [1.0.7](https://github.com/SocketDev/socket-packageurl-js/releases/tag/v1.0.7) - 2025-08-15 + +### Fixed + +- Bug fixes and stability improvements + +## [1.0.1](https://github.com/SocketDev/socket-packageurl-js/releases/tag/v1.0.1) - 2025-05-15 + +### Added + +- Initial Socket.dev optimized package override implementation + +## [1.0.0](https://github.com/SocketDev/socket-packageurl-js/releases/tag/v1.0.0) - 2025-05-01 + +### Added + +- Initial release of @socketregistry/packageurl-js +- Socket.dev optimized package override for packageurl-js +- Full compatibility with original packageurl-js API diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/LICENSE b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/LICENSE new file mode 100644 index 00000000..602b3ece --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Socket Inc + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/LICENSE.original b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/LICENSE.original new file mode 100644 index 00000000..0b5633b5 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/LICENSE.original @@ -0,0 +1,18 @@ +Copyright (c) the purl authors + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/README.md b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/README.md new file mode 100644 index 00000000..4e44448c --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/README.md @@ -0,0 +1,223 @@ +# @socketregistry/packageurl-js + +[![Socket Badge](https://socket.dev/api/badge/npm/package/@socketregistry/packageurl-js)](https://socket.dev/npm/package/@socketregistry/packageurl-js) +[![CI - @socketregistry/packageurl-js](https://github.com/SocketDev/socket-packageurl-js/actions/workflows/ci.yml/badge.svg)](https://github.com/SocketDev/socket-packageurl-js/actions/workflows/ci.yml) +![Coverage](https://img.shields.io/badge/coverage-99.72%25-brightgreen) + +[![Follow @SocketSecurity](https://img.shields.io/twitter/follow/SocketSecurity?style=social)](https://twitter.com/SocketSecurity) +[![Follow @socket.dev on Bluesky](https://img.shields.io/badge/Follow-@socket.dev-1DA1F2?style=social&logo=bluesky)](https://bsky.app/profile/socket.dev) + +TypeScript Package URL (purl) parser and builder. +Drop-in replacement for [`packageurl-js`](https://socket.dev/npm/package/packageurl-js) with full type safety, zero dependencies, and spec compliance with the [Package URL specification](https://github.com/package-url/purl-spec). + +## What is a PURL? + +A Package URL (purl) standardizes how to identify software packages: + +``` +pkg:npm/lodash@4.17.21 +pkg:pypi/requests@2.28.1 +pkg:maven/org.springframework/spring-core@5.3.21 +``` + +**Format breakdown**: + +``` + pkg:type/namespace/name@version?qualifiers#subpath + │ │ │ │ │ │ │ + │ │ │ │ │ │ └─ Optional subpath + │ │ │ │ │ └──────────── Optional key=value pairs + │ │ │ │ └──────────────────── Optional version + │ │ │ └───────────────────────── Required package name + │ │ └─────────────────────────────────── Optional namespace/scope + │ └──────────────────────────────────────── Required package type + └──────────────────────────────────────────── Scheme (always "pkg:") +``` + +**Supports 35+ ecosystems**: npm, pypi, maven, gem, cargo, nuget, composer, golang, docker, and more. + +## Features + +- ✅ **Modular & tree-shakeable** - Import only what you need +- ✅ **Full TypeScript support** - Comprehensive type exports +- ✅ **Zero dependencies** - Lightweight and secure +- ✅ **Spec compliant** - Follows [purl-spec](https://github.com/package-url/purl-spec) +- ✅ **100% test coverage** - Over 1,000 passing tests +- ✅ **Multiple APIs** - Functional, class-based, and builder patterns +- ✅ **URL conversion** - Convert to repository and download URLs +- ✅ **Registry checks** - Verify package existence across 14 registries + +## Install + +```sh +pnpm install @socketregistry/packageurl-js +``` + +**Drop-in replacement** via package override: + +```json +{ + "pnpm": { + "overrides": { + "packageurl-js": "npm:@socketregistry/packageurl-js@^1" + } + } +} +``` + +**Requirements**: Node >= 18.20.4 + +## Usage + +### Modular Functions (Tree-shakeable) + +**Parse npm specifiers:** + +```javascript +import { parseNpmSpecifier } from '@socketregistry/packageurl-js' + +parseNpmSpecifier('lodash@4.17.21') +// -> { namespace: undefined, name: 'lodash', version: '4.17.21' } + +parseNpmSpecifier('@babel/core@^7.0.0') +// -> { namespace: '@babel', name: 'core', version: '7.0.0' } +``` + +**Stringify PURLs:** + +```javascript +import { stringify } from '@socketregistry/packageurl-js' + +stringify(purl) +// -> 'pkg:npm/lodash@4.17.21' +``` + +**Compare PURLs:** + +```javascript +import { equals, compare } from '@socketregistry/packageurl-js' + +equals(purl1, purl2) // -> boolean +compare(purl1, purl2) // -> -1 | 0 | 1 +``` + +### Class API + +**Parse and build:** + +```javascript +import { PackageURL } from '@socketregistry/packageurl-js' + +// Parse strings +const purl = PackageURL.fromString('pkg:npm/lodash@4.17.21') +console.log(purl.name) // 'lodash' +console.log(purl.version) // '4.17.21' + +// Parse npm specifiers +PackageURL.fromNpm('lodash@4.17.21') +PackageURL.fromNpm('@babel/core@^7.0.0') + +// Constructor +new PackageURL('npm', null, 'express', '4.18.2') +// -> 'pkg:npm/express@4.18.2' +``` + +**Builder pattern:** + +```javascript +import { PurlBuilder } from '@socketregistry/packageurl-js' + +PurlBuilder.npm().name('lodash').version('4.17.21').build() +// -> 'pkg:npm/lodash@4.17.21' +``` + +**URL conversion:** + +```javascript +import { UrlConverter } from '@socketregistry/packageurl-js' + +UrlConverter.toRepositoryUrl(purl) +// -> 'https://github.com/lodash/lodash' + +UrlConverter.toDownloadUrl(purl) +// -> 'https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz' +``` + +**Registry existence checks:** + +```javascript +import { purlExists, npmExists } from '@socketregistry/packageurl-js' + +// Check if package exists in its registry +await purlExists(purl) +// -> { exists: true, latestVersion: '4.17.21' } + +// Type-specific checks (modular) +await npmExists('lodash') +await npmExists('core', '@babel') // scoped package +await npmExists('lodash', undefined, '4.17.21') // validate version + +// Supported registries: +// npmExists, pypiExists, cargoExists, gemExists, +// mavenExists, nugetExists, golangExists, packagistExists, +// cocoapodsExists, pubExists, hexExists, cpanExists, +// cranExists, hackageExists +``` + +### TypeScript Types + +All types are exported for maximum flexibility: + +```typescript +import type { + PackageURLObject, + NpmPackageComponents, + ParsedPurlComponents, + QualifiersObject, + ComponentEncoder, + DownloadUrl, + RepositoryUrl, +} from '@socketregistry/packageurl-js' + +// Type-safe npm package parsing +const components: NpmPackageComponents = parseNpmSpecifier('lodash@4.17.21') + +// Type-safe PURL objects +const obj: PackageURLObject = purl.toObject() +``` + +**Constants:** + +```typescript +import { PurlQualifierNames, PURL_Type } from '@socketregistry/packageurl-js' + +// Standard qualifier keys +PurlQualifierNames.Checksum // 'checksum' +PurlQualifierNames.RepositoryUrl // 'repository_url' + +// Package types +PURL_Type.NPM // 'npm' +PURL_Type.PYPI // 'pypi' +``` + +See [docs/types.md](docs/types.md) for complete type reference. + +## API Reference + +- **[docs/api.md](docs/api.md)** - Complete API documentation +- **[docs/types.md](docs/types.md)** - TypeScript type reference + +## Development + +**Quick commands:** + +```bash +pnpm install # Install dependencies +pnpm build # Build +pnpm test # Test +pnpm check # Lint + typecheck +``` + +## License + +MIT diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/data/npm/builtin-names.json b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/data/npm/builtin-names.json new file mode 100644 index 00000000..68ba16bd --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/data/npm/builtin-names.json @@ -0,0 +1,70 @@ +[ + "_http_agent", + "_http_client", + "_http_common", + "_http_incoming", + "_http_outgoing", + "_http_server", + "_stream_duplex", + "_stream_passthrough", + "_stream_readable", + "_stream_transform", + "_stream_wrap", + "_stream_writable", + "_tls_common", + "_tls_wrap", + "assert", + "assert/strict", + "async_hooks", + "buffer", + "child_process", + "cluster", + "console", + "constants", + "crypto", + "dgram", + "diagnostics_channel", + "dns", + "dns/promises", + "domain", + "events", + "fs", + "fs/promises", + "http", + "http2", + "https", + "inspector", + "inspector/promises", + "module", + "net", + "os", + "path", + "path/posix", + "path/win32", + "perf_hooks", + "process", + "punycode", + "querystring", + "readline", + "readline/promises", + "repl", + "stream", + "stream/consumers", + "stream/promises", + "stream/web", + "string_decoder", + "sys", + "timers", + "timers/promises", + "tls", + "trace_events", + "tty", + "url", + "util", + "util/types", + "v8", + "vm", + "wasi", + "worker_threads", + "zlib" +] diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/data/npm/legacy-names.json b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/data/npm/legacy-names.json new file mode 100644 index 00000000..b36ad925 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/data/npm/legacy-names.json @@ -0,0 +1,2839 @@ +[ + "@antoinerey/comp-Fetch", + "@antoinerey/comp-VideoPlayer", + "@beisen/Accordion", + "@beisen/Approve", + "@beisen/AreaSelector", + "@beisen/AutoComplete", + "@beisen/AutoTree", + "@beisen/BaseButton", + "@beisen/Beaute", + "@beisen/BeisenCloudMobile", + "@beisen/BeisenCloudUI", + "@beisen/ButtonGroup", + "@beisen/ChaosUI", + "@beisen/ChaosUI-V1", + "@beisen/CheckboxList", + "@beisen/CommonMount", + "@beisen/CommonPop", + "@beisen/DataGrid", + "@beisen/DateTime", + "@beisen/DropDownButton", + "@beisen/DropDownList", + "@beisen/ExtendComponent", + "@beisen/FormUploader", + "@beisen/IconButton", + "@beisen/Loading", + "@beisen/MultiSelect", + "@beisen/NaDeStyle", + "@beisen/Paging", + "@beisen/PopLayer", + "@beisen/RadioList", + "@beisen/ReactTransformTenchmark", + "@beisen/Search", + "@beisen/selectedComponent", + "@beisen/Sidebar", + "@beisen/StaticFormLabel", + "@beisen/TabComponent", + "@beisen/Textarea", + "@beisen/Textbox", + "@beisen/TimePicker", + "@beisen/TitaFeed", + "@beisen/ToolTip", + "@beisen/Transfer", + "@beisen/Tree", + "@beisen/UserSelector", + "@chasidic/tsSchema", + "@chymz/DaStrap", + "@chymz/DaUsers", + "@claviska/jquery-ajaxSubmit", + "@cryptolize/FileSaver", + "@djforth/I18n_helper", + "@dostolu/baseController", + "@dostolu/exctractIntl", + "@dostolu/mongooseSlug", + "@dostolu/validationTransformer", + "@opam-alpha/ANSITerminal", + "@opam-alpha/BetterErrors", + "@opam-alpha/reactiveData", + "@pioug/MidiConvert", + "@smuuf/idleCat", + "@sycoraxya/validateJS", + "@tempest/endWhen", + "@tempest/fromPromise", + "@tempest/replaceError", + "@tempest/startWith", + "@tempest/throwError", + "@yuanhao/draft-js-mentionHashtag-plugin", + "3dBinPack", + "3DViewerComponent", + "4meFirst-github-example", + "9Wares-js", + "37FIS", + "A", + "ABAValidator", + "ABCEnd", + "AbokyBot", + "Accessor", + "Accessor_MongoDB", + "Accessor_MySQL", + "Accessor_Singleton", + "Account", + "accumulateArray", + "ACCUPLACERClient", + "AccuplacerClient", + "Acid", + "activaDocs", + "ActiveResource.js", + "ADBCordovaAnalytics", + "addTimeout", + "AdultJS", + "AesUtil", + "AgentX", + "AirBridgePlugin", + "airLogger", + "ajiThird", + "alaGDK", + "AlarmClock", + "alarmClock", + "Alchemyst", + "AlertLogic", + "alertsXYZ", + "ali-topSdk", + "AliceBot", + "alinkRNTest", + "aliOcrIdCard", + "AllCal.WebApp", + "alpacaDash", + "AmateurJS", + "AMD", + "AMGCryptLib", + "AmILate", + "AmILateAnand", + "amitTest", + "AmpCoreApi", + "amProductsearch", + "amqpWrapper", + "amrToMp3", + "angular-autoFields-bootstrap", + "angular-dateParser", + "angular-GAPI", + "angular-PubSub", + "Angular-test-child", + "Angular1", + "Angular2", + "angular2-Library", + "angular2-localStorage", + "angular2-Menu", + "angular2-quickstart-ngSemantic", + "angularApp", + "angularCubicColorPicker", + "angularjs-ES6-brunch-seed", + "angularjsSlider", + "AngularStompDK", + "Animated_GIF", + "animateJs", + "animateSCSS", + "AnimationFrame", + "AnimIt", + "Anirudhnodeapp", + "Anjali", + "annoteJS", + "ANSIdom", + "antFB", + "antFB-init", + "antFB-mobile", + "antFB-router-redux-ie8", + "AntMobileUI", + "AnToast", + "Antony", + "aoIoHw90B5sE1wG9", + "API-Documentation", + "APIConnect", + "APICreatorSDK", + "APlan", + "APM-mouse", + "APM.P2H", + "apMigStats", + "AporaPushNotification", + "App2App", + "applqpakTest", + "AppTracker", + "AQ", + "ArcusNode", + "AriesNode", + "array_handler_liz_Li", + "Array.prototype.forEachAsync", + "ArrayBuffer-shim", + "arrayFuncs", + "ArrowAulaExpress", + "Article-collider-packages", + "Arunkumar-Angular-Trial", + "asEvented", + "asJam", + "ASP.NET", + "assert", + "AssetPipeline", + "assignment2-BW", + "Assignment6", + "async_hooks", + "asyncBuilder", + "asyncEJS", + "AsyncHttpRequest-CordovaPlugin", + "AsyncProxy", + "AsyncStorage", + "asyncStorage", + "atom-C", + "atom-Fe", + "atom-Ge", + "atom-K", + "atom-Li", + "atom-Na", + "atom-Pb", + "atom-Rb", + "atom-Si", + "atom-Sn", + "AulaExpress", + "austin-vertebraeTest", + "authorStats", + "AutoFixture", + "autoLoader", + "AutoReact", + "AutoTasks", + "Autowebpcss", + "Avifors", + "AVNjs", + "AwesomeProject", + "AWSS3Drive", + "ax-rmdirRecursive", + "b_Tap", + "Babel", + "babel-preset-reactTeam", + "Bablic_Seo_SDK", + "BablicLogger", + "Backbone-Collection-Predefined-Filters", + "Backbone.Aggregator", + "backbone.browserStorage", + "Backbone.Chosen", + "Backbone.Marionette.Handlebars", + "Backbone.Mutators", + "Backbone.Overview", + "Backbone.Rpc", + "Backbone.Subset", + "baDataModel", + "Bag", + "BaiduMapManager", + "BandGravity", + "bangDM", + "banking-Josh-demo", + "BankWebservice", + "bannerFlip", + "BaremetricsCalendar", + "Barfer", + "BarneyRubble", + "Base", + "Base64", + "baseProject", + "Basic-Material-framework", + "BasicCredentials", + "basicFFmpeg", + "bbArray", + "Beegee", + "begineer_Practice", + "beijingDate", + "bem-countMaster", + "bem-countSlave", + "bem-getHistory", + "Bestpack", + "betterMatch", + "BetterRegExp", + "Bhellyer", + "BHP_MSD", + "BiDirectionalScrollingTable", + "BigAssFansAPI", + "BigInt", + "BIMserverWrapper", + "Binary-search-tree", + "binarySearch", + "bindAll", + "BinHeap", + "biojs-vis-RDFSchema", + "Biolac", + "Birbal", + "BitSetModule", + "BizzStream", + "Blackfeather", + "BlackMirror", + "Blacksmith", + "blacktea.jsonTemplates", + "Blaggie-System", + "BlankUp", + "Blink1Control2", + "blitzLib", + "Blob", + "BlobBuilder", + "BlobBuilder-browser", + "Blog", + "BlueOcean", + "BlueOps", + "Blueprint-Sugar", + "bluthLBC", + "blya!", + "BMFE_scaffold", + "Bmodule", + "Bo-colors-project", + "Boilerpipe-Scraper", + "Bondlib", + "bonTemplate", + "BootSideMenu", + "bornCordova", + "Botcord", + "Bottr-cli", + "Brackets", + "brain***_games***", + "Brave", + "BrewCore", + "BrianPingPong", + "BrianSuperComponents", + "BrickPlus", + "Brocket", + "Brosec", + "browserProxy", + "browserType", + "brush-Makefile", + "bTap", + "BtMacAddress", + "BubbleJS", + "Buffer", + "buffer", + "BufferList", + "Bugay", + "Build", + "BuildBox", + "Builder", + "Builders", + "BuildWithJavascript", + "BusinessObjects", + "Button", + "Buttons", + "Bynd", + "ByteBuffer", + "C9js", + "Cache-Service-Collector", + "Cacher", + "callbackQueue", + "CallbackRouter", + "callBlock-plugin", + "callBlock.plugin", + "camcardPlugin", + "CameraPreview", + "Canteen", + "canvas-toBlob", + "canvasColorPicker", + "Caoutchouc", + "Cap", + "Carbon", + "cardsJS", + "Cartogram-Utils", + "cascadeDrop", + "Cashew", + "Cat4D", + "catchTender", + "CategoryJS", + "catl-deploySSH", + "cbNetwork", + "CbolaInfra", + "CBQueue", + "CBuffer", + "ccNetViz", + "ccPagination", + "ccTpl", + "censoreMio", + "Censorify", + "censorify_Publish20160706", + "censorify_Vincent_Choe", + "censorifyAD", + "censorifyAshes", + "censorifyGuangyi", + "censorifyKatKat", + "censorifyRayL", + "censorifyTM", + "CETEIcean", + "cfUtilityService", + "CFViews", + "chadschwComponentTest0001", + "changelogFDV", + "Changling-dom", + "CharLS.js", + "Chart.Annotation.js", + "Chart.CallBack.js", + "Chart.Crosshairs.js", + "Chart.HorizontalBar.js", + "Chart.Smith.js", + "Chart.Zoom.drag.js", + "Chart.Zoom.js", + "ChartTime", + "chatSocketIo", + "ChattingRoom", + "checkForModuleDuplicates", + "cheferizeIt", + "chenouTestNode", + "child_process", + "chowYen", + "chrome-localIp", + "ChuckCSS", + "ChuckNorrisException", + "chunkArray", + "cjdsComponents", + "Class", + "Classy", + "clearInterval", + "ClearSilver", + "clearTimeout", + "CLI-todo", + "CLI-UI", + "cliappRafa", + "clientFrontEnd", + "ClientStorage", + "clipDouban", + "ClipJS", + "CloudMusicCover", + "CloudStore", + "Cls", + "cluster", + "CM-react-native-document-picker", + "CM1", + "coberturaJS", + "codeStr", + "Coeus", + "COFFEENODE", + "Coflux", + "colegislate-DynamoDbEventRepository", + "ColeTownsend", + "collabProvidesModules", + "CollectionMap", + "colWidth.js", + "com.emsaeng.cordova.plugin.AdMob", + "com.nickreed.cordova.plugin.brotherPrinter", + "com.none.alarmClock", + "com.zwchen.firstPlugin", + "com.zwchen.qqAdvice", + "combineJS", + "CometJS", + "Comfy", + "Comments", + "CommentsJS", + "comp-Fetch", + "Company", + "compareStrings", + "CompassSM", + "Complex", + "componentDoc", + "componentDoc-cli", + "CompoundSignal", + "Compress-CSS", + "Compression", + "concatAll", + "Concur", + "ConfluencePageAttacher", + "ConnectTheDotsDesktop", + "Console", + "console", + "constants", + "constelation-Animate_", + "constelation-BackgroundImage", + "constelation-Block", + "constelation-Button", + "constelation-Col", + "constelation-Event_", + "constelation-Flex", + "constelation-Inline", + "constelation-InlineBlock", + "constelation-InlineCol", + "constelation-InlineFlex", + "constelation-InlineRow", + "constelation-Painter", + "constelation-Row", + "constelation-Style_", + "constelation-Text", + "constelation-Video", + "constelation-View", + "ConstraintNetwork", + "ContactMe", + "ContentEdit", + "ContentSelect", + "ContentTools", + "convertPinyin", + "CoolBeans", + "Coolhelper", + "copyMe", + "cordova-plugin-adPlayCafebazaar", + "cordova-plugin-adPlayPushe", + "cordova-plugin-bluetoothClassic-serial", + "cordova-plugin-coolFunction", + "cordova-plugin-euroart93-smartConfig", + "cordova-plugin-ios-android-IAP", + "cordova-plugin-LineLogin", + "Cordova-Plugin-OpenTok-JBS", + "cordova-plugin-permissionScope", + "cordova-plugin-SchaffrathWebviewer", + "cordova-plugin-SDKAW", + "Cordova-Plugin-SystemBarDimmer", + "cordova-plugin-YtopPlugin", + "Cordova-react-redux-boilerplate", + "cordova-StarIO-plugin", + "CordovaSMS", + "CordovaWebSocketClientCert", + "coreApi", + "CornerCut", + "CornerJob", + "CorrespondenceAnalysis", + "cosBuffer", + "cosTask", + "Couch-cleaner", + "Couchbase-sync-gateway-REST", + "CouchCover", + "CouchDBChanges", + "CouchDBExternal", + "CountAdd_000001", + "cPlayer", + "cqjPack", + "Crawler", + "Create-React-App-SCSS-HMR", + "createClass", + "createDOC", + "createNpm", + "createServer", + "CRMWebAPI", + "crockpot-fromBinary", + "crockpot-fromEnglish", + "crockpot-fromRoman", + "crockpot-toEnglish", + "crockpot-toRoman", + "Cron", + "CropSr", + "crypto", + "CSDebug", + "CSDLParser", + "CSLogger", + "CSSMatrix", + "CSSselect", + "Csster", + "CSSwhat", + "CSV-JS", + "CTP_MARKET_DATA", + "cttv.bubblesView", + "cttv.diseaseGraph", + "cttv.expansionView", + "cttv.flowerView", + "cttv.speciesIcons", + "cttv.targetAssociationsBubbles", + "cttv.targetAssociationsTree", + "cttv.targetGeneTree", + "Cuber", + "cubicColorPicker", + "Cui-Dialog", + "CustomCamera", + "customComponent", + "customLibrary", + "CustomPlugin", + "CustomWebView", + "cuteLogger", + "cwebp-binLocal", + "CyberJS", + "D", + "d-fordeYoutube", + "D-Stats", + "D.Va", + "d3-bboxCollide", + "d3-pathLayout", + "d3.geoTile", + "D3.TimeSlider", + "Daja", + "Daniel_NPM_Library_Test", + "Dante2", + "DanTroy-utils", + "Dashboard", + "Dasher", + "dashr-widget-Weather", + "dashr-widget-World-Pool-Championships", + "Data-CSS", + "Data-Same-Height", + "dataAccess", + "Database-Jones", + "DataManager", + "dataStream", + "dateFormat-kwen", + "dateFormatW", + "DateHuatingzi", + "DateMaskr", + "dateModule", + "DatePicker", + "Datepicker.js", + "Dateselect", + "DateValidator", + "DateZ", + "Datum", + "Davis", + "dd-rc-mStock", + "DDEvents", + "deBijenkorf-protractor-tests", + "Debug-Tracker", + "Deci-mal", + "DeCurtis-Logger", + "deepEqualsWith", + "deepPick", + "defaultStr", + "Deferred", + "deferredEventEmitter", + "defineClass", + "defineJS", + "DelegateListener", + "deleteMoudles", + "Demo", + "Demo1", + "demoNeeeew", + "demoWei", + "demoYTC", + "Deneme", + "derivco-SoundJS", + "derpModule", + "DeskSet", + "Desktop-command", + "Devbridge-FrontEnd", + "Developer", + "deviousknightFirstNpm", + "devisPattern", + "devProxy", + "DFP", + "dgram", + "dgURI", + "diagnostics_channel", + "Dial", + "DiggernautAPI", + "Diogenes", + "DirScanner", + "dirStat", + "DirWatcher", + "Discord-Webhook", + "DiscordForge", + "diveSync", + "dkastner-JSONPath", + "DM.NodeJS", + "dns", + "Dock-command", + "docxtemplaterCopy", + "doLink", + "DOM", + "Domai.nr", + "domain", + "DOMArray", + "DOMBuilder", + "DOMino", + "DOMtastic", + "DOMtastic-npm", + "dotFormat", + "dotJS", + "DoubleCheck", + "Dove.js", + "downloadAPI", + "downLoadFile", + "DownloadManager", + "DownloadProxy", + "DPS", + "DQ", + "draftjsToHTML", + "dragOnZone", + "drakovNew", + "Draper", + "DrawPDF", + "Dribble", + "Drupal-Node.js", + "DT", + "Duckface", + "Dui", + "DVA", + "DvA", + "dVa", + "DXIV2Inst", + "DynamicBuffer", + "dynamoDB", + "DynamoDBStream", + "DynWorker", + "Easy-Peasy-Slide", + "easyCache", + "easyFe", + "easyRestWithABL", + "EasyUI", + "eavesTool", + "EBI-Icon-fonts", + "echartsEx", + "EclipseScroll", + "ECMASquasher", + "edfToHtmlConverter", + "edGoogleApi", + "edGraham", + "EfemerideList", + "efemerideList", + "efficientLoad", + "eFishCrawler", + "EhanAreesha", + "Elastic-Beanstalk-Sample-App", + "ElasticSlider-core", + "electron-isDev", + "ElectronAppUpdater", + "ElectronRouter", + "elementsJS", + "Elixirx", + "Elm-0.17-Gulp-Coffeescript-Stylus-Lodash-Browserify-Boilerplate", + "EmailClient", + "ember-cli-fullPagejs", + "ember-leaflet-geoJSON", + "emoJiS-interpreter", + "Empite", + "EmpiteApp", + "emptyObject", + "emptyString-loader", + "Encloud", + "encodeBase64", + "encodeID", + "energyCalculator-browser", + "EnglishTranslator", + "ensureDir", + "Enumjs", + "Environment.js", + "ep_disableChat", + "EPO_OPS_WRAPPER", + "equalViews-comparative-selection", + "eRx-build", + "ES-poc", + "es6-DOM-closest", + "eSlider", + "eslint-plugin-elemMods", + "EsmalteMx.ProductApi.Lambdas", + "Estro", + "ETag", + "eValue-bs", + "EVE", + "EventDispatcher", + "eventDrops", + "EventEmitter", + "EventField", + "EventFire", + "EventFire.js", + "EventHub", + "EventRelayEmitter", + "events", + "EventServer", + "eventstore.mongoDb", + "EventtownProject", + "EventUtil", + "EVEoj", + "EverCookie", + "ewdDOM", + "ewdGateway", + "ExBuffer", + "execSync", + "exFrame-configuration", + "exFrame-core", + "exFrame-generator", + "exFrame-logger", + "exFrame-mq", + "exFrame-rest", + "exFrame-rpc", + "exFrame-security", + "ExifEditor", + "Exitent", + "expectThat.jasmine-node", + "expectThat.mocha", + "Express", + "Express-web-app", + "expressApi", + "ExpressCart", + "ExpressCheckout", + "expressingFounder", + "ExpressMVC", + "ExpressNode", + "expressOne", + "expressSite", + "expressWeb", + "ExtraInfo", + "extraRedis", + "Eyas", + "EzetechT", + "EZVersion", + "F", + "F-chronus", + "f*", + "FabioPluginiUno", + "Facebook_Graph_API", + "facebookPhotos", + "FacebookYarn", + "factor-bundle-WA64", + "FAEN", + "Faker", + "Falcon", + "fast-artDialog", + "fastA_node", + "FastLegS", + "Fayer", + "fbRecursiveRequest", + "FeedbackModuleTest", + "feedBum", + "fenix-ui-DataEditor", + "fenix-ui-DSDEditor", + "Fermi-UI", + "FetchCallLog", + "fieldsValidator", + "fig-Componts", + "File", + "File_Reader_solly", + "FileBrowser", + "FileError", + "fileGlue", + "FileList", + "fileLog", + "FilePicker-Phonegap-iOS-Plugin", + "FileReader", + "FileSaver", + "FileSync", + "FileWriter", + "FileWriterSync", + "Finder-command", + "FirstApp", + "FirstCustomPlugin", + "firstModule", + "firstNodejsModule", + "firstYarn", + "fis-parse-requireAsyncRes", + "fis-postpackager-inCSSToWebP", + "fis3SmartyTool", + "FitText-UMD", + "Flamingo", + "flatToTrees", + "fleschDe", + "Flex-With-Benefits", + "FlickrJS", + "flipPage", + "Florence", + "FlowerPassword", + "flowMap", + "FLTEST", + "fnProxy", + "FontAwesome-webpack", + "fontEnd", + "FontLoader", + "foo!", + "foo~", + "forAsync", + "ForceCode", + "forceLock", + "forChangeFilesName", + "forEachAsync", + "formAnimation", + "formatDate", + "formBuilder", + "FormData", + "Formless", + "formValidate", + "FrameGenerator", + "freightCrane", + "French-stemmer", + "Frenchpress", + "FreshDocs", + "friendsOfTrowel-buttons-component", + "friendsOfTrowel-dropdowns-component", + "friendsOfTrowel-Forms-component", + "friendsOfTrowel-Layouts-component", + "Friggeri.net", + "Frog", + "frontBuild", + "Frontend-starter", + "FrontEndCentral-documentation", + "FrontJSON", + "FrontPress", + "Frozor-Logger", + "Fruma", + "fs", + "fs-uTool", + "FSM", + "FT232H", + "fuck!", + "Fuell", + "FuellDocTest", + "FuellSys", + "FuellTest", + "FullStack", + "FunDemo2", + "FURI", + "Fury", + "futSearch", + "futureDocBuilder", + "FyreWorks-Node", + "fzmFE", + "Gaiam", + "Ganescha-Bot-Jokes", + "gaoboHello", + "Garrett-pokemon", + "gatesJs", + "Gauge", + "gaugeJS", + "gaussianMixture", + "gbL-jsMop", + "GC-Sequence-Viewer", + "gdBuildLogs", + "gdBuilds", + "Gems.PairedDeviceClient", + "genData", + "generateIndex", + "generator-entityV2-widgets", + "generator-kittJS", + "generator-qccr-startKit", + "generator-reactpackSample", + "generator-zillionAngular", + "Gengar", + "GeoMatrix", + "GeosysDroid", + "GeosysTest", + "Gerardo", + "getDateformat", + "getExtPath", + "getSignature", + "GettyEmbeddy", + "ghostTools", + "GhostTube", + "GiftEditor", + "GirlJS", + "GitAzure", + "gitbook-plugin-prism-ASH", + "gitbook-plugin-specialText", + "gitbook-start-heroku-P8-josue-nayra", + "gitbook-start-heroku-P9-josue-nayra", + "gitForge", + "gitHub", + "GitHub-Network-Graph", + "GitHubTrending", + "gitProvider", + "gl-flyCamera", + "gl-simpleTextureGenerator", + "glMath", + "GLORB", + "glslCanvas", + "glslEditor", + "glslGallery", + "GLSlideshow", + "Glue", + "GMP", + "golbalModule", + "Goldfish", + "Gon", + "Google_Plus_API", + "Google_Plus_Server_Library", + "Google-Chrome-command", + "GoogleDrive", + "googleOAuthServer", + "googlePlaceAutocomplete", + "GoogleService-NodeJs", + "Gord", + "gPagesJS", + "Gps2zip", + "GRAD_leaveNotes", + "GRAD_makeFire", + "grad-customGear", + "grad-factions-VR", + "grad-leaveNotes", + "grad-makeFire", + "Grafar", + "Graph", + "graphLock.custom.plugin", + "graphQl-Mysql-Server", + "GridFS", + "GridManager", + "gridminCss", + "Gridtacular", + "GroupePSAConnectedCar", + "Grow.js", + "Grunt-build", + "grunt-checkFileSize", + "grunt-cmd-handlebarsWrap", + "grunt-ftp-getComponent", + "grunt-httpTohttps", + "grunt-latexTOpdf-conversion", + "grunt-Npm-grunts", + "grunt-po2mo-multiFiles", + "grunt-Replacebyrefs", + "grunt-syncFolder", + "grunt-urlCacheBuster", + "guideJs", + "gulp-addSuffix", + "gulp-combineHtml", + "gulp-imgToBase64", + "gulp-lowerCase", + "gulp-phpWebserver", + "gulp-spacingWord", + "Gulp-Tasks", + "GumbaJS", + "Gusto", + "gz2qiCalcModule", + "h2oUIKit", + "H5UI", + "H666", + "habibtestPublish", + "HackBuffer", + "handleStr", + "HansontableComponent", + "Haraka", + "HariVignesh", + "harmonyHubCLI", + "HarryPotterParty", + "harsh-Test-Module", + "Harshil", + "hash!", + "hashPage", + "hashTranslate", + "HASWallpaperManager", + "hasWord", + "HeartBeatWoT_pi", + "Hello", + "hello_test_spade69XXX", + "Hello_World", + "HelloBot", + "helloBySoo", + "helloDevelopersnodejs", + "HelloExpress", + "helloModule", + "HelloWorld", + "helloWorld", + "HelloWorld_hlhl_040", + "HelloWorldComponent", + "HelloWorldNodeJS", + "helloYJ", + "helpBy", + "helpCenter", + "herokuRun", + "Hesiir-components", + "HHello", + "Hidash", + "HiddenMarkovModel", + "hideShowPassword", + "highcharts-*", + "HighlightP", + "Highway", + "Hinclude", + "Hipmob", + "Hiraku", + "hm_firstPackage", + "HMTraining", + "homebridge-anelPowerControl", + "homebridge-bigAssFans", + "homebridge-CurrentAmbientLightLevel", + "homebridge-Homeseer", + "homebridge-LEDStrip", + "homebridge-MotionSensor", + "homebridge-RFbulb", + "Homematic-Hue-Interface", + "hoshiCustomContent", + "hoshiImageLoader", + "HotJS", + "Hotshot", + "hoverifyBootnav", + "howToNPM", + "Hppy", + "Hpy", + "htmlCutter", + "htmlKompressor", + "HTMLString", + "htmlToTree", + "http", + "http2", + "HTTPRequest", + "https", + "httpShell", + "httpTohttps", + "Hubik", + "Hubik-Demo", + "Hubik-Platform", + "Hubik-Platform-Chrome", + "Hubik-Plugin", + "Hubik-Plugin-Memory", + "Hubik-Plugin-Network", + "Hubik-Plugin-Rendering", + "Hubik-Util", + "hubot-yigeAi", + "HuK", + "hybridCrypto", + "i18next.mongoDb", + "Ian_Chu", + "IArray", + "Ibis.js", + "iCompute", + "iEnhance", + "IENotification", + "iFrameAPI", + "IFY-gulp-kit", + "II", + "IIF", + "iIndexed", + "iKeyed", + "iM880-serial-comm", + "imageCDN-webpack-loader", + "imageMagick", + "Imager", + "Imageresizer", + "imageTool", + "ImageViewer", + "iMagPay", + "iMemoized", + "iMessageModule", + "Imovie", + "Imp", + "Incheon", + "Index", + "indexedStore", + "inferModule-jsdoc-plugin", + "infieldLabel", + "Influxer", + "inputcheckMemo", + "inspector", + "INSPINIA", + "Insplash", + "inStyle", + "interactiveConsole", + "Interval", + "IO", + "IObject", + "ionic-gulp-browserify-typescript-postTransform", + "IonicSocket", + "iOS-HelloWorld", + "IOTSDK", + "iotsol-app-FAN", + "iotsol-app-test-Node-RED", + "iotsol-service-string-upperCase", + "IQVIS", + "Iris", + "iRobo-react-modal", + "iSecured", + "isElementInViewport", + "isEqual", + "iSeries", + "isFirefoxOrIE", + "isHolidayInChina", + "iSocketService", + "isPureFunction", + "iStorable", + "iTransactable", + "iTunes-command", + "iValidated", + "iWeYou", + "iZettle", + "iziModal", + "JabroniJS", + "jaCodeMap", + "Jade-Sass-Gulp-Starter", + "jadeBundler", + "jadiTest", + "jAlert", + "JamSwitch", + "JASON", + "JavaScript-101", + "JazzScript", + "jcarouselSwipe", + "jDataView", + "jDate", + "jetsExt", + "Jimmy-Johns", + "jingwenTest", + "JMSList", + "JMSlist.js", + "Jody", + "jordenAngular", + "jordenAngular2", + "JorupeCore", + "JorupeInstance", + "JOSS", + "JotihuntReact", + "Journaling-Hash", + "jpaCreate", + "jParser", + "JPath", + "jPlotter", + "jPlugins", + "JQ", + "jQ-validation-laravel-extras", + "JQDeferred", + "jQGA", + "jqGrid", + "jqNode", + "jqPaginator", + "jqplot.donutRenderer", + "jqPromise4node", + "jqTreeGridWithPagination", + "jQuery", + "jquery-adaptText", + "jquery-asAccordion", + "jquery-asBgPicker", + "jquery-asBreadcrumbs", + "jquery-asCheck", + "jquery-asChoice", + "jquery-asColor", + "jquery-asColorPicker", + "jquery-asDropdown", + "jquery-asFontEditor", + "jquery-asGalleryPicker", + "jquery-asGmap", + "jquery-asGradient", + "jquery-asHoverScroll", + "jquery-asIconPicker", + "jquery-asImagePicker", + "jquery-asItemList", + "jquery-asModal", + "jquery-asOffset", + "jquery-asPaginator", + "jquery-asPieProgress", + "jquery-asProgress", + "jquery-asRange", + "jquery-asScroll", + "jquery-asScrollable", + "jquery-asScrollbar", + "jquery-asSelect", + "jquery-asSpinner", + "jquery-asSwitch", + "jquery-asTooltip", + "jquery-asTree", + "jQuery-by-selector", + "jquery-dynamicNumber", + "jquery-idleTimeout-plus", + "jquery-loadingModal", + "jquery-navToSelect", + "jQuery-QueryBuilder", + "jquery-rsLiteGrid", + "jquery-rsRefPointer", + "jquery-rsSlideIt", + "jQuery-Scanner-Detection", + "jquery-scrollTo", + "jquery-scrollToTop", + "jquery-slidePanel", + "jQuery.component", + "jquery.customSelect", + "jquery.dataTables.min.js", + "jquery.Jcrop.js", + "jQuery.keyboard", + "jQuery.mmenu-less", + "jQuery.print", + "jquery.rsLiteGrid", + "jquery.rsOverview", + "jquery.rsRefPointer", + "jquery.rsSlideIt", + "jquery.rsSliderLens", + "jQuery.toggleModifier", + "jquery.waitforChild", + "jqueryPro", + "js-build-RomainTrouillard", + "JS-Entities", + "JS-string-minimization", + "JS.Responsive", + "jSaBOT", + "jsCicada", + "jsConcat", + "JSCPP", + "jsDAV", + "JSDev", + "jsdoc-TENSOR", + "jsDocGenFromJson", + "jsDump", + "jSelect", + "JSErrorMonitor", + "JSErrorMonitor-server", + "jsFeed", + "jsFiddleDownloader", + "JSFramework", + "JSLint-commonJS", + "JSLintCli", + "JSLogger", + "JSON", + "JSON-Splora", + "JSON.sh", + "JSON2", + "json8-isArray", + "json8-isBoolean", + "json8-isJSON", + "json8-isNull", + "json8-isNumber", + "json8-isObject", + "json8-isPrimitive", + "json8-isString", + "json8-isStructure", + "JSON2016", + "JSONloops", + "JSONPath", + "JSONPathCLI", + "JSONRpc", + "JSONSelect", + "JSONStream", + "JsonUri", + "JSONUtil", + "jsonX", + "JSplay", + "jspolyfill-array.prototype.findIndex", + "JSPP", + "JSpring", + "jsQueue", + "jsSourceCodeParser", + "jStat", + "JSUS", + "JSV", + "JSX", + "jsz-isType", + "JTemplate", + "JTmpl", + "jTool", + "JuliaStyles", + "JumanjiJS", + "Jupyter-Git-Extension", + "justifiedGallery", + "justJenker", + "JustMy.scss", + "JWBootstrapSwitchDirective", + "jWorkflow", + "jxLoader", + "JYF_restrict", + "K_Tasks", + "K--Ajax", + "K-Report", + "KAB.Client", + "Kahana", + "Kapsel-project", + "Katy", + "Kayzen-GS", + "KB", + "KB_Model", + "kelTool", + "kelTool2", + "KenjutsuUI", + "KevinLobo3377-node", + "KFui", + "kickoff-fluidVideo.css", + "Kid", + "kingBuilder", + "kiranApp", + "Kirk", + "Kissui", + "kittJS", + "Kiwoom-Helper", + "KLC3377-node", + "knockout.ajaxTemplateEngine", + "koa-artTemplate", + "koa-Router", + "koaPlus", + "koaVue", + "KonggeIm", + "kpPublicPerson", + "kpPublicVideo", + "krawlerWash", + "ktPlayer", + "kylpo-BackgroundImage", + "kylpo-Block", + "kylpo-Button", + "kylpo-Col", + "kylpo-Flex", + "kylpo-Inline", + "kylpo-InlineBlock", + "kylpo-InlineCol", + "kylpo-InlineFlex", + "kylpo-InlineRow", + "kylpo-Paint", + "kylpo-Painter", + "kylpo-Row", + "kylpo-Text", + "kylpo-View", + "kzFormDaimyo", + "L.TileLayer.Kartverket", + "L7", + "labBuilder", + "Lactate", + "Lade", + "laravel-jQvalidation", + "Large", + "lark-PM", + "LasStreamReader", + "latte_web_ladeView", + "latte_webServer4", + "lavaK", + "layaIdecode", + "Layar", + "Layout", + "LazyBoy", + "lazyBum", + "lazyConnections", + "lazyLoadingGrid", + "lcAudioPlayer", + "LCM", + "LDAP", + "Leaf.js", + "Leaflet-MovingMaker", + "Leaflet.AutoLayers", + "Leaflet.Deflate", + "Leaflet.GeoJSON.Encoded", + "Leaflet.GreatCircle", + "Leaflet.MultiOptionsPolyline", + "Leaflet.TileLayer.MBTiles", + "Leaflet.vector-markers", + "leapShell", + "LearningNPM", + "learnnode_by_HHM", + "leFunc", + "Legos", + "Libby-Client", + "LightCinematic", + "lihuanxiangNpm1", + "limitedQueue", + "linearJs", + "lineReader", + "Lingo", + "LinkedList", + "linkIt", + "LISP.js", + "liteParse", + "liuchengjunOrder0414", + "LiveController", + "LiveDocument", + "LiveScript", + "LiveScript-brunch", + "LiveView", + "liweiUitl", + "lizaorenqingTool", + "lmONE", + "LMUI", + "LMX-Data", + "LNS_weixin_h5", + "localeMaker_v1", + "localforage-memoryStorageDriver", + "LocalRecord", + "localStorage", + "localStorage-info", + "localStorage-mock", + "LoDashfromScratch", + "lofterG", + "Loganalyzer", + "LogbookMessageCreator", + "Logger", + "Logging", + "Loggy", + "logic2UI", + "LogosDistort", + "LogStorage.js", + "logStream", + "LOL", + "lolAJ", + "LongestCommonSubstring", + "loop-setTimeout", + "loopback-connector-rest-addCookie", + "lopataJs", + "Lorem", + "Losas", + "LP_test_task", + "Lucy", + "LUIS", + "LUIS_FB", + "Lumenize", + "Lush.js", + "LykkeFramework", + "M66_math_example", + "mac-cropSr", + "MacGyver", + "Mad.js", + "magentoExt", + "Maggi.js", + "Maggi.js-0.1", + "MagpieUI", + "MALjs", + "Mambo-UI", + "mangoSlugfy", + "mapleTree", + "mappumBot", + "Marionette-Require-Boilerplate", + "markupDiff", + "marryB", + "MasterDetailApplication", + "MaterialAngularWithNodeJS", + "Math", + "math_example_20160505163300BR", + "math_example_Hala", + "math_example_myown_ve-01119310520_V2", + "math_exampleCJG", + "math_exampleII", + "math_exampleX", + "math_ThisIsMe", + "math-Murasame", + "Math1105", + "mathAdd", + "mathExample", + "MathJax-node", + "MathJS", + "mathMagic", + "MathTest1", + "MatPack", + "Mavigator", + "MAX-AVT-homebridge-led", + "MAXAVTDemo", + "MAXIMjs", + "MaxUPS", + "MCom", + "MD5", + "MDLCOMPONENT", + "mdlReact", + "mdPickers", + "mdRangeSlider", + "mdToPdf", + "MEAN", + "MeanApp1", + "MeCab", + "mediaCheck", + "Mediany", + "medicalHistory", + "Mercury", + "Meridix-WebAPI-JS", + "Mers", + "MessageBus", + "MetaEditor", + "Meteor-Test-Installer", + "MetroTenerife", + "MFL-ng", + "MFRC522-node", + "mglib-GAMS.WEBCLIENT2", + "MIA", + "MicroServices", + "Midgard", + "midhunthomas_Test", + "mihoo_fileUpload", + "mini-fileSystem-WebServer", + "Mini-test", + "MiniAppOne", + "MiniAppTwo", + "minibuyCommonality", + "miniJsonp", + "MiniManager", + "MiniMVC", + "MinionCI", + "Minju003", + "Mirador", + "Misho_math_example", + "MJackpots", + "mjb44-playground-module-exporting-interface-and-type-method-B", + "mjb44-playground-module-exporting-interface-and-type-method-C", + "Mkoa", + "Mkoa-pg-session", + "MKOUpload", + "mlm603Test", + "mmAnimate", + "mmDux", + "MMM-alexa", + "mmRequest", + "mmRouter", + "mNotes", + "Mockery", + "modalDemo", + "modalDemo1", + "modalWin.js", + "module", + "ModuleBinder", + "modulebyAKB", + "ModuleC", + "moduleLoader", + "moduleTest", + "MoEventEmitter", + "Mokr", + "Mole", + "mon-appNon0", + "MonApp", + "MongoDAL", + "mongoose-schema-to-graphQL", + "mongooseSchema-to-graphQL", + "Monik", + "MonikCommon", + "MoniqueWeb", + "Monorail.js", + "Mopidy-Spotmop", + "mosesCheckIn", + "MovieJS", + "mOxie", + "MoxtraPlugin_1.1", + "MoxtraPlugin_1.2.1", + "mPortalUI", + "MQTTClient", + "Mr.Array", + "Mr.Async", + "Mr.Coverage", + "mraaStub", + "MrsYu", + "MrsYu1", + "msGetStarted", + "mSite", + "msJackson", + "mSnackbar", + "Mu", + "Muffin", + "MultiSlider", + "musuAppsas", + "MWS_Automation", + "my-awesome-nodejs-moduleHL", + "my-componentAnimesh", + "My-First-Module", + "My-first-Package", + "My-Fist-Project", + "my-HLabib", + "My1ink", + "MyAngularGruntt", + "MyAnimalModule", + "myappSriniAppala", + "myappUSBankExample", + "myAries", + "MyBlog", + "myCalclator", + "myDate", + "myDialog", + "myDu2", + "myDVA", + "myFirst-Nodejs-Module", + "MyFirstContribution", + "myfirstDemo", + "myFirstModule", + "myFirstNodeModule", + "myFirstNpm", + "myFirstPluginAji", + "myFirstProject", + "myFirstPub", + "myLib", + "myMath", + "MYMODAL", + "MyModule", + "myModule", + "myNodeJs", + "myNodeJsApp", + "myNodejsApp", + "myNpm", + "MYnpm1", + "myNpm0001", + "myNpm2", + "myNpm5", + "myNpm10", + "myNpm11", + "myNpm111", + "myNpm999", + "myNpmfei", + "myNpmfei1", + "myNpml", + "myNpmModule", + "myNpmrz1", + "MyPlugin", + "MyProject", + "MyProjNode", + "myPromise", + "myrikGoodModule", + "Mysql-Assistant", + "mysupermoduleXXX", + "myTest", + "Mytest_module", + "mytPieChart", + "N", + "N3-components", + "NA1", + "NageshTestapplication", + "NAME", + "Nameless13", + "NaNNaNBatman.js", + "nanoTest", + "NasimBotPlatform", + "NativeAds", + "NativeCall", + "NativeProject", + "nativescript-CallLog", + "nativescript-GMImagePicker", + "nativescript-logEntries", + "NavExercise", + "nCinoRabbit", + "ncURL", + "NDDB", + "neouiReact-button", + "Neptune", + "NERDERY.JS.NAT", + "nestedSortable", + "net", + "NeteaseCloudMusicApi", + "neteaseMusicApi", + "Netflow", + "Netlifer", + "NetMatch", + "NetOS", + "netOS", + "Netpath-Test", + "Neuro", + "Neuro-Company", + "NewModule1", + "newmsPong", + "newPackage", + "newPioneer", + "newStart", + "newtouchCloud", + "NewWebview", + "NexManager", + "NexmoJS", + "NFO-Generator", + "ng2-clockTST", + "ng2-dodo-materialTypeTransfer", + "ng2-QppWs", + "ng2GifPreview", + "NG2TableView", + "ngBrowserNotification", + "ngCart", + "ngChatScroller", + "ngComponentRouter-patched", + "ngCurrentGeolocation", + "ngDfp", + "ngDrag", + "ngFileReader", + "ngGen", + "ngGeolocation", + "ngHyperVideo", + "ngIceberg", + "ngImgHandler", + "ngIntercom", + "ngKit", + "ngPicker", + "ngPluralizeFilter", + "ngPluralizeFilter2", + "ngProgress-browserify", + "ngScroll", + "ngSinaEmoji", + "ngSmoothScroll", + "ngSqlite", + "ngTile", + "ngTimeInput", + "ngTreeView", + "ngUpload", + "ngUpload-forked", + "Nguyen_test", + "ngVue", + "ngYamlConfig", + "nHttpInterceptor", + "Nick_calc", + "NickSam_CGD", + "NightPro-Web", + "nightwatchGui", + "Nikmo", + "nImage", + "Nitish", + "nitish.kumar.IDS-LOGIC", + "NlpTextArea", + "nltco-lgpt-clean-A", + "nltco-lgpt-clean-B", + "nltco-lgpt-dedupe-simple-A", + "nltco-lgpt-dedupe-simple-B", + "nMingle", + "nmPhone", + "nMysql", + "NoCR", + "NODE", + "Node_POC", + "node-CORSproxy", + "Node-FacebookMessenger", + "Node-HelloWorld-Demo", + "node-iDR", + "node-iOS", + "Node-JavaScript-Preprocessor", + "node-localStorage", + "Node-Log", + "Node-Module-Test", + "node-myPow", + "node-red-contrib-samsungTV", + "node-red-contrib-wwsNodes", + "node-red-StefanoTest", + "node-TBD", + "NodeApp", + "nodeApp", + "nodeAuth", + "nodeBase", + "NodeBonocarmiol", + "nodeCalcPax", + "nodeCombo", + "nodeDemo9.26", + "nodeDocs", + "nodeEventedCommand", + "NodeFileBrowser", + "NodeFQL", + "nodeHCC", + "nodeInterface", + "NodeInterval", + "nodeIRCbot", + "nodeJS", + "NodeJS_Tutorial", + "nodeJs-zip", + "NodejsAgent", + "NodeJsApplication", + "nodejsFramework", + "nodejsLessons", + "NodeJsNote", + "NodeJsPractice", + "nodeJsPrograms", + "Nodejsricardo", + "NodeJSTraining-demo-9823742", + "nodejsTutorial", + "NodejsWebApp1", + "nodejsWorkSpace", + "NodeKeynote", + "nodeLearning", + "nodeMarvin", + "nodeMarvin2", + "NodeMini", + "nodeMysqlWrapper", + "nodeNES", + "nodeos-boot-multiUser", + "nodeos-boot-singleUser", + "nodeos-boot-singleUserMount", + "nodepackageBoopathi", + "nodePhpSessions", + "NodePlugwise", + "NodePlugwiseAPI", + "nodeQuery", + "nodes_Samples", + "NodeSDK-Base", + "NodeServerExtJS", + "NodeSSH", + "nodeSSO", + "NodeSTEP", + "nodeTest", + "NodeTestDee", + "nodeTTT", + "nodeTut", + "NoDevent", + "NodeView", + "nodeWebsite", + "NodObjC", + "Nonsense", + "NoobConfig", + "NoobHTTP", + "normalizeName", + "NORRIS", + "nOSCSender", + "Note.js", + "NotificationPushsafer", + "Notifly", + "Npm", + "npm-Demo", + "Npm-Doc-Study", + "npm-mydemo-pkgTest", + "npm-setArray", + "npm-wwmTest", + "npmCalc", + "npmFile", + "npmModel", + "npmModel1", + "npmModel2", + "npmTest", + "npmToying", + "npmTutorial", + "NPR_Test", + "nrRenamer", + "nStoreSession", + "nTPL", + "nTunes", + "NudeJS", + "nunjucks-includeData", + "O", + "O_o", + "o_O", + "O2-countdown", + "O2-tap", + "objectFitPolyfill", + "ObjectSnapshot", + "ObjJ-Node", + "ObservableQueue", + "OCA-api", + "ocamlAlpha", + "ocamlBetterErrors", + "OcamlBytes", + "ocamlBytes", + "ocamlRe", + "OhMyCache", + "OK-GOOGLE", + "Olive", + "onBoarding", + "OnCollect", + "OneDollar.js", + "oneTest", + "OpenBazaar-cli", + "OpenDolphin", + "OpenJPEG.js", + "openWeather", + "OperatorUI", + "OPFCORS", + "OPFSalesforce", + "OptionParser", + "OrangeTree", + "Orchestrator", + "Order", + "ORIENTALASIAN", + "os", + "Osifo-package", + "osu-ModPropertiesCalculator", + "OTPAutoVerification", + "overloadedFunction", + "OwnMicroService", + "OwnNormalizer", + "OwnPubSub", + "OwnPubSubClient", + "OwnPubSubServer", + "p2Pixi", + "PaasyMcPaasFace", + "pacemakerJS", + "packAdmin", + "Package", + "packageNodeCR-Jeff.json", + "packagePublished", + "packageTesting", + "Packery-rows", + "packing-template-artTemplate", + "Paddinator", + "Paginate", + "palindromeCalcPax", + "palindromePax", + "PanPG", + "Panzer", + "parameterBag", + "paramsValidator", + "Parse-Server-phone-number-auth", + "parseArgs", + "Parser", + "parseUri", + "Particle", + "Particleground.js", + "PassiveRedis", + "path", + "PatternLabStarter", + "patternReplacer", + "paytmGratify", + "PayzenJS", + "pDebug", + "pdf-to-dataURL", + "pdfTOthumbnail_convert", + "PeA_nut", + "Peek", + "PeepJS", + "Pega.IO", + "Peggy.js", + "Percolator", + "perf_hooks", + "performJs", + "pgnToJSON", + "PHibernate", + "phoeNix-cli", + "phoenixCLI", + "PhonegapAnalytics", + "PhonegapBeacon", + "PhonegapFeeds", + "PhonegapGeofence", + "PhonegapGrowth", + "PhonegapLocations", + "PhonegapPush", + "picardForTynt", + "PicoMachine", + "Pictionary", + "Pintu", + "pjEmojiTest", + "PJsonCouch", + "PK", + "PL8", + "placeHolder.js", + "PLATO", + "PlayStream", + "pluginCreater", + "pluginHelloWorld", + "pluginHelloworld", + "pluginTest", + "PlugMan", + "pluuuuHeader", + "PoistueJS", + "Pokeball-Scanner", + "PokeChat", + "PokedexJS", + "PokemonGoBot", + "PokemonGoNodeDashboard", + "polar-cookieParser", + "pollUntil", + "Polymer", + "POM", + "pomeloGlobalChannel", + "pomeloScale", + "portal-fe-devServer", + "PostgresClient", + "Postlog", + "PowerPlanDisplay", + "powerPlug", + "PP", + "ppublishDemo", + "Pre", + "Preprocessor", + "PrettyCSS", + "prettyJson", + "PrimaryJS", + "primerNodo", + "primo-explore-LinkedData", + "primo-explore-prmFacetsToLeft", + "primo-explore-prmFullViewAfter", + "primo-explore-prmLogoAfter", + "primo-explore-prmSearchBarAfter", + "PrimoEsempio", + "Printer", + "Prism", + "prjTemplate", + "Probes.js", + "process", + "proInterface", + "Project-A-VK", + "Prometheus", + "Promise", + "Promise.js", + "PromiseContext", + "promisify-syncStore", + "PropagAPISpecification", + "propCheckers", + "Propeller", + "properJSONify", + "Proto", + "proton-quark-rabbitMQ", + "ProtVista", + "ProUI-Utils", + "ProvaSimone", + "provinceCity.js", + "PSNjs", + "PTC-Creator", + "ptyzhuTest_20160813", + "PublishDemo", + "publishDigitalCrafts2016", + "PubSub", + "pubsubJS", + "pulsarDivya", + "punycode", + "PupaFM", + "Puppet.svg", + "PureBox", + "PureBox-Gallery-PlayEngine", + "purePlayer", + "PushMessage", + "PushPanel", + "PushPlugin_V2", + "pybee!batavia", + "Q", + "q-mod-cliElements", + "q-mod-cliPrinter", + "QAP-cli", + "QAP-SDK", + "Qarticles", + "QnA_Fore", + "QNtest", + "qqMap", + "qTip2", + "QuadMap", + "QuantumExperimentService", + "querystring", + "R", + "R.js", + "R2", + "RAD.js", + "Radical", + "raehoweNode", + "Rajas", + "random-fullName", + "randomCaddress", + "randomCname", + "randomCname.js", + "randomLib", + "randomNickname", + "RandomSelection", + "randomTestOne", + "randString", + "randString.js", + "Range.js", + "Rannalhi", + "rAppid.js", + "rAppid.js-server", + "rAppid.js-sprd", + "Rapydscriptify", + "RaspiKids", + "raZerdummy", + "RCTMessageUI", + "React_Components", + "React-Carousel", + "react-countTo", + "react-creditCard", + "React-ES5-To-ES6-Checklist", + "react-input-dateTime", + "react-InputText-component", + "react-komposer-watchQuery", + "react-materialUI-components", + "react-native-accountKit", + "react-native-cascadeGrid", + "react-native-checkBox", + "react-native-DebugServerHost", + "React-Native-Form-Field", + "react-native-isDeviceRooted", + "react-native-LoopAnimation", + "react-native-MultiSlider", + "react-native-portableView", + "react-native-swRefresh", + "react-PPT", + "React-Redux-Docker-Ngnix-Seed", + "react-refresh-infinite-tableView", + "React-Select-Country", + "React-Tabs", + "React-UI-Notification", + "react-uploadFile", + "reactClass", + "reactcordovaApp", + "ReactEslint", + "reactFormComponentTest1", + "reactGallery", + "reactHeaderComponentTest1", + "ReactHero", + "reactIntlJson-loader", + "ReactNaitveImagePreviewer", + "ReactNative-checkbox", + "reactNative-checkbox", + "reactNativeDatepicker", + "reactNativeLoading", + "ReactNativeNavbar", + "ReactNativeSlideyTabs", + "ReactNativeSocialLogin", + "ReactNativeStarterKit", + "ReactNativeToastAndroid", + "reactTwo", + "ReactUploader", + "readabilitySAX", + "ReadableFeeds", + "readline", + "ReadSettings", + "Reality3D", + "reallySimpleWeather", + "ReApp", + "ReasonDB", + "RecastAI-Library-JavaScript", + "recordType", + "recordWebsite", + "RedisCacheEngine", + "redisHelper", + "reDIx", + "RefreshMedia", + "registerSendMsg", + "reloadOnUpdate", + "remoteFileToS3", + "RemoteTestService", + "removeNPMAbsolutePaths", + "RentalAdvantage", + "repl", + "Replace", + "Replace2.0", + "Replen-FrontEnd", + "replNetServer", + "Require", + "requireAsync", + "Resin", + "resolveDependencies", + "responseHostInfo", + "ReST-API", + "RESTful-API", + "Restifytest", + "Restlastic", + "RESTLoader", + "Reston", + "RestTest", + "RetreveNumbers", + "rgbToHexa", + "RhinoStyle", + "Richard", + "richardUtils", + "rinuts-nodeunitDriver", + "Risks-Tables", + "RNBaiduMap", + "RNCommon", + "RNSVG", + "RNSwiftHealthkit", + "rNums", + "RobinGitHub", + "Robusta", + "RockSelect", + "Router", + "RP_Limpezas_Industriais", + "Rpm", + "RSK-Router", + "RT-react-toolbox", + "Rubytool", + "runQuery", + "runStormTest", + "runTestScenario", + "RunwayLogger", + "RWD-Table-Patterns", + "RWPromise", + "Safari-command", + "SafeObject.js", + "Safood-Parse", + "SaFood-Parse", + "sahibindenServer", + "salgueirimTeste", + "samepleMicroservice", + "samjs-mongo-isOwner", + "Sample", + "SamplePlugIn", + "SandboxTools", + "sandcastle_multiApp", + "Sanitizer.js", + "sanitizer.unescapeEntities", + "Sardines", + "Sass-Boost", + "Sass-JSON", + "Sass-layout", + "Saturday", + "SauceBreak", + "sayHelloByone", + "sbg-queueManager", + "sbUtils", + "SC-Expense-Plugin", + "Scaffolding", + "scalejs.metadataFactory", + "ScgiClient", + "Scheduler.js", + "schema-inspector-anyOf", + "scp-cleanRedis", + "Scrap", + "scriptTools", + "scrollAnimation", + "scrollPointerEvents", + "ScrollShow", + "Sdp-App", + "seaModel", + "searchBox.js", + "SecChat", + "SecureKeyStore", + "segnoJS", + "Seguranca", + "SegurancaBrasilcard", + "Select2", + "selfAsync", + "selfAutocomplete", + "SelfieJS", + "SenseJs", + "SenseOrm", + "Sentimental", + "SeptemTool", + "seqFlow", + "SerialDownloader", + "serveItQuick", + "Server", + "Service-Discovery-DLNA-SSDP", + "serviceDiscovery", + "SessionWebSocket", + "Set", + "setInterval", + "setRafTimeout", + "setTimeout", + "SexyJS", + "sfaClient", + "sgBase", + "sgCore", + "sgFramework", + "sgLayers", + "sgSay", + "Sharder", + "ShareSDK", + "SharingCMS", + "Shave", + "Sheet", + "SHI-Shire", + "sHistory", + "ShowNativeContact", + "SHPS4Node-auth", + "SHPS4Node-cache", + "SHPS4Node-commandline", + "SHPS4Node-Config", + "SHPS4Node-config", + "SHPS4Node-cookie", + "SHPS4Node-CSS", + "SHPS4Node-dependency", + "SHPS4Node-error", + "SHPS4Node-file", + "SHPS4Node-frontend", + "SHPS4Node-init", + "SHPS4Node-language", + "SHPS4Node-log", + "SHPS4Node-make", + "SHPS4Node-optimize", + "SHPS4Node-parallel", + "SHPS4Node-plugin", + "SHPS4Node-sandbox", + "SHPS4Node-schedule", + "SHPS4Node-session", + "SHPS4Node-SQL", + "shwang1aPackage1", + "shy-Do", + "shy-static-imgJoin", + "SignaturePrinter", + "Silvera", + "simoneDays", + "Simple", + "Simple-Cache", + "simple-hello-world-apiClientsideTest", + "simple-jQuery-slider", + "simpleArgsParser", + "simpleCsvToJson", + "SimpleHtdigest", + "SimpleQueue", + "SimpleRPC", + "Simplog", + "SingularityUI", + "sip.js-mnQf2Q2R", + "Sisense-node-schedule", + "SITA-JS-Wrapper", + "siteBuild", + "Skadi", + "SkelEktron", + "SKRCensorText", + "SkyLabels.js", + "Skype-command", + "slgComponents", + "Slidebars", + "Slidebars-legacy", + "slidePage", + "Slither-Server", + "sLog", + "slush-initPro", + "Smaller4You", + "Smart-Web-Proxy", + "SmartConfig", + "SmartyGrid", + "SMValidator", + "smyNpm1", + "Snake.js", + "SnipIt", + "SnsShare", + "SocialDig.js", + "Socialight", + "socketGW", + "SocketIPC", + "sortBy.js", + "Soumen", + "SoundCloud_Node_API", + "SpaceMagic", + "SpeechJS", + "Speedco", + "Speedonetzer", + "Sphero-Node-SDK", + "Spores", + "Spot", + "spotifyCurrentlyPlaying.js", + "SpotlightJS", + "Spring", + "SPUtility.js", + "SQLClient", + "SQProject", + "SquareOfNumber", + "Squirrel", + "squishMenu", + "Sslac", + "SSO", + "SSSDemoNPM7oct", + "SSuperSchool", + "StaceFlow", + "StanLee-WPTheme-Generator", + "star-initReact", + "Starr", + "startInt", + "starW-names", + "StaticServer", + "staticServer", + "staticSync", + "StatusBar", + "StdJSBuilder", + "steamAPI", + "STEPNode", + "Stewed", + "stickUp", + "stickyNavbar.js", + "stickyStack", + "StimShopPlugin", + "storeJSON", + "storkSQL", + "stormClient", + "Str.js", + "Stratagem", + "stream", + "string_decoder", + "String_module", + "string-DLL", + "string.prototype.htmlDecode", + "string.prototype.htmlEntityDecode", + "StringDistanceTS", + "StringMultiplier", + "StringScanner", + "STRUCT", + "Suckle", + "sudokuMaker", + "sudoTracker", + "SUI-Angular2-Modal", + "superClipBoard", + "SuperDank", + "superJoy", + "Supermodule", + "supermoduleBugay", + "supermoduleLyu", + "supermoduleNik", + "supermoduleShulumba", + "Supersonic", + "superUsingMod", + "svgSprite", + "swimCoachStopwatch", + "SwitchBoard", + "synchro_ByJoker", + "SyncRun", + "Syndication", + "Synergy", + "sys", + "Sysdate", + "sytemMonitor-client", + "szxPack", + "T_T", + "T-Box", + "table-Q", + "tableComponent", + "Tachyon", + "TagCloud", + "tagOf", + "TagSelect.js", + "TalkerNode", + "TALQS", + "talquingApp", + "TangramDocs", + "tap-linux-2BA", + "tap-win-2BA", + "tap-win-C94", + "Targis", + "Tattletale", + "Tayr", + "tbCLI", + "TDTwitterStream", + "Tea", + "TeamBuilder", + "TechNode", + "TechnoLib", + "TeeChart", + "Templ8", + "Template", + "Tempus", + "Ter", + "Tereshkovmodule", + "Terminal-command", + "test_helloWorld", + "Test-7", + "test-A", + "test-naamat-Al-Aswad", + "Test-Project", + "TestAmILate", + "testApi", + "testApp", + "Testchai2", + "Testchai21", + "testContrast", + "TESTdelete123", + "testDEMOABCD", + "testDirJackAtherton", + "Teste2", + "testeRealTime", + "testForThis", + "testMe", + "testModule", + "testModule-hui", + "testNode", + "TestNodeJsApplication", + "testPackage", + "testPackage2", + "TestPlugin", + "testPlugin", + "TestProject", + "testProject", + "testPublish", + "testPublisha", + "testPublishNpmModule", + "TFWhatIs", + "Thairon-node", + "Thanatos_pack", + "ThanhNV", + "Theater", + "TheGiver", + "Thimble", + "Thing.js", + "thingHolder", + "think-paymentService", + "think-qiniuService", + "think-quotationService", + "think-wechatService", + "ThinkHub", + "ThinkInsteon", + "ThirtyDaysOfReactNative", + "threadHandler", + "threejs-htmlRenderer", + "ThrustFS", + "ThumborJS", + "TigraphBot", + "tilejsonHttpShim", + "Time-Tracker-Cli", + "Timelined", + "Timeliner.Core", + "Timeliner.Index", + "Timepass", + "timers", + "timeTraveller", + "timeUtils", + "tiNanta", + "TinyAnimate", + "tinyChat", + "tinyEmiter", + "tinyFrame", + "tinyImages", + "tinyLoger", + "Titan", + "TJAngular", + "tls", + "tm-apps-poolApi", + "tmSensor", + "toBin", + "toDataURL", + "toDoList", + "toDots", + "Toji", + "tokenAndAuthorizationManager", + "tokenAndAuthorizationManger", + "Tom", + "tomloprodModal", + "Tool-bluej-gulp", + "Toolshed-Client", + "topSdk", + "TopuNet-AMD-modules", + "TopuNet-BaiduMap", + "TopuNet-CalendarScroller", + "TopuNet-dropDownLoad", + "TopuNet-GrayScale", + "TopuNet-ImageCropCompressorH5", + "TopuNet-JRoll", + "TopuNet-js-functions", + "TopuNet-JsHint4Sublime", + "TopuNet-JsHintify", + "TopuNet-Landscape_mask", + "TopuNet-Landscape-Mask", + "TopuNet-LayerShow", + "TopuNet-mobile-stop-moved", + "TopuNet-node-functions", + "TopuNet-Pic-code", + "TopuNet-PromptLayer-JS", + "TopuNet-QueueLazyLoad", + "TopuNet-RequireJS", + "TopuNet-RotatingBanner", + "TopuNet-WaterFall", + "TopuNet-weixin-node", + "TorrentBeam", + "TorrentCollection", + "toSrc", + "toString", + "touchController", + "toYaml", + "TPA", + "tr-O64", + "trace_events", + "TradeJS", + "Trains", + "TrainsController", + "TrainsModel", + "TramiteDocumentarioFront", + "TransactionRelay", + "transformConfigJson", + "transitionEnd", + "translateFzn", + "Travis", + "TrixCSS", + "truncateFilename", + "tslint-jasmine-noSkipOrFocus", + "TSN", + "ttm-Testing", + "tty", + "Tuio.js", + "Turntable", + "tuTrabajo-client", + "TweenTime", + "TwigJS", + "twitterApiWrapper", + "txtObj", + "Tyche", + "TypeCast", + "typedCj.js", + "TypedFunc", + "typescript-demo-MATC-Andrew", + "typography-theme-Wikipedia", + "typopro-web-TypoPRO-AmaticSC", + "typopro-web-TypoPRO-AnonymousPro", + "typopro-web-TypoPRO-Asap", + "typopro-web-TypoPRO-Astloch", + "typopro-web-TypoPRO-BebasNeue", + "typopro-web-TypoPRO-Bitter", + "typopro-web-TypoPRO-Chawp", + "typopro-web-TypoPRO-ComingSoon", + "typopro-web-TypoPRO-Cousine", + "typopro-web-TypoPRO-Coustard", + "typopro-web-TypoPRO-CraftyGirls", + "typopro-web-TypoPRO-Cuprum", + "typopro-web-TypoPRO-Damion", + "typopro-web-TypoPRO-DancingScript", + "typopro-web-TypoPRO-Delius", + "typopro-web-TypoPRO-Gidole", + "typopro-web-TypoPRO-GiveYouGlory", + "typopro-web-TypoPRO-GrandHotel", + "typopro-web-TypoPRO-GreatVibes", + "typopro-web-TypoPRO-Handlee", + "typopro-web-TypoPRO-HHSamuel", + "typopro-web-TypoPRO-Inconsolata", + "typopro-web-TypoPRO-IndieFlower", + "typopro-web-TypoPRO-Junction", + "typopro-web-TypoPRO-Kalam", + "typopro-web-TypoPRO-KingthingsPetrock", + "typopro-web-TypoPRO-Kreon", + "typopro-web-TypoPRO-LeagueGothic", + "typopro-web-TypoPRO-Lekton", + "typopro-web-TypoPRO-LibreBaskerville", + "typopro-web-TypoPRO-Milonga", + "typopro-web-TypoPRO-Montserrat", + "typopro-web-TypoPRO-Nickainley", + "typopro-web-TypoPRO-Oxygen", + "typopro-web-TypoPRO-Pacifico", + "typopro-web-TypoPRO-PatuaOne", + "typopro-web-TypoPRO-Poetsen", + "typopro-web-TypoPRO-Pompiere", + "typopro-web-TypoPRO-PTMono", + "typopro-web-TypoPRO-Rosario", + "typopro-web-TypoPRO-SansitaOne", + "typopro-web-TypoPRO-Satisfy", + "typopro-web-TypoPRO-Signika", + "typopro-web-TypoPRO-Slabo", + "typopro-web-TypoPRO-TopSecret", + "typopro-web-TypoPRO-Unifraktur", + "typopro-web-TypoPRO-Vegur", + "typopro-web-TypoPRO-VeteranTypewriter", + "typopro-web-TypoPRO-WeblySleek", + "typopro-web-TypoPRO-Yellowtail", + "Ubertesters", + "Ubi", + "UbibotSensor", + "UbidotsMoscaServer", + "UbiName", + "uDom", + "ueberDB", + "ueberDB-couch", + "ueberRemoteStorage", + "ugcFore", + "UIjson", + "UkGeoTool", + "UltraServerIO", + "UM007", + "uMech", + "uMicro", + "uMicro-invoke", + "UMiracleButton", + "uncaughtException", + "Underscore-1", + "UnderscoreKit", + "UnderscoreMatchersForJasmine", + "underscorePlus", + "underscoreWithTypings", + "Uniform", + "Unit-Bezier", + "unity-kjXmol-1", + "UniversalRoute", + "Up2Bucket", + "UParams", + "UploadCore", + "Uploader", + "URIjs", + "url", + "URLON", + "urlParser", + "urlWatch", + "USAJOBS", + "USAJOBS_Help_Center", + "UserID", + "userModule1123455", + "util", + "utilityFileSystem", + "utilityTool", + "Utils", + "uTool", + "uTool2", + "uvCharts", + "v8", + "Validate", + "Validator", + "VardeminChat", + "vc-buttonGroup", + "vcPagination", + "vdGlslCanvas", + "VDU-web", + "Vector", + "Velvet", + "vericredClient", + "VerifyInput.js", + "Videobox-MODX", + "videoBoxer", + "VideoStream", + "Vidzy", + "ViewAbility", + "ViewPort", + "ViewTest", + "vintageJS", + "Virsical", + "VK-Promise", + "VLC-command", + "vm", + "VmosoApiClient", + "vmSFTP", + "VoiceIt", + "voiceLive", + "Votesy", + "VoxFeed", + "Voyager-search", + "vPromise", + "vQ", + "vQMgArq1o4U1", + "vsGoogleAutocomplete", + "vue-dS", + "vue-scrollTo", + "vueLoadingBar", + "VueProject", + "VueProjectES5", + "VueTree", + "Vuk", + "W2G2", + "w5cValidator", + "w11k-dropdownToggle", + "Wamble", + "wamTool", + "Wanderer", + "wangeditorForReact", + "wantu-nodejsSDK", + "wasabiD", + "wasabiH", + "wasi", + "WasteOfTime", + "WatchWorker", + "watsonWebSocketSTTwrapper", + "wb-Wisteria", + "wBitmask", + "wColor", + "wColor256", + "wConsequence", + "wCopyable", + "WCordova", + "wDeployer", + "Web_GUI_Core", + "web3.onChange", + "Web4.0", + "webarrancoStarter", + "WebConsoleUI", + "Webcord", + "webdriverNode", + "webext-getBytesInUse-polyfill", + "WebHook", + "WebODF", + "webpack-dev-server-getApp", + "webpack-dynamicHash", + "webpack-Minimount-starter", + "WebParrot", + "webpay-webserviceAPI", + "webStart", + "WebStencil", + "webStorage", + "wechat-enterprise-for-kfService", + "wEventHandler", + "wFiles", + "wGluCal", + "WhereThingsHappened", + "WhiteRabbit", + "WigGLe", + "Wilson_U", + "Wilson_Util", + "WiredPanels", + "wkhtmltopdfWrapper", + "wLogger", + "Wmhao", + "WNdb", + "WoD-Dice", + "WolfyEventEmitter", + "woodwoodnine_FirstTest", + "wordCounting", + "WordDuelConstants", + "wPath", + "wProto", + "wqProj-cli", + "wRegexpObject", + "WSBroker", + "wscn-tilesetQuote-component", + "wsxRest", + "wTemplate", + "wTesting", + "WTGeo", + "wTools", + "wy-checkBrowser", + "X-date", + "X-editable", + "xBEM", + "xlsTjson", + "xlsxParser", + "xmlToJsonTs", + "Xnpmtools", + "xSpinner", + "xStore", + "xui-vue-WorkflowArrow", + "Xunfei", + "xuNpm", + "XWindow", + "xwjApp", + "xxxDemo", + "yaDeferred", + "YAEventEmitter", + "yaMap", + "yamQuery-excel", + "yamQuery-excelAnalizer", + "YamYam", + "yang-testingNPM", + "YaoXiaoMi", + "Yeezy-Case", + "Yggdrasil", + "YJS", + "YmpleCommerce", + "YouAreDaChef", + "YouSlackBot", + "yrdLmz", + "yuanMath", + "YuicompressorValidator", + "Yummy", + "Yummy-Yummy", + "YunUI", + "Yworkcli", + "Yworkshell", + "z-lib-structure-dqIndex", + "zhb_helloTest", + "Zhengzx", + "zigZag", + "Ziz", + "ZJJPackage", + "zkModules", + "zlib", + "zmqConnector", + "ZooKeeper", + "zzcBridge", + "zzcCopy", + "zzcDownloadApp" +] diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/compare.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/compare.d.ts new file mode 100644 index 00000000..13361a63 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/compare.d.ts @@ -0,0 +1,98 @@ +import type { PackageURL } from './package-url.js'; +export type PurlInput = PackageURL | string; +/** @internal Register the PackageURL class for string parsing in compare functions. */ +export declare function _registerPackageURL(ctor: typeof PackageURL): void; +/** + * Compare two PackageURLs for equality. + * + * Two PURLs are considered equal if their canonical string representations match. + * This comparison is case-sensitive after normalization. + * + * Accepts both PackageURL instances and PURL strings. Strings are parsed and + * normalized before comparison. + * + * @param a - First PackageURL or PURL string to compare + * @param b - Second PackageURL or PURL string to compare + * @returns true if the PURLs are equal, false otherwise + * + * @example + * ```typescript + * const purl1 = PackageURL.fromString('pkg:npm/lodash@4.17.21') + * const purl2 = PackageURL.fromString('pkg:npm/lodash@4.17.21') + * + * equals(purl1, purl2) // -> true + * equals('pkg:npm/lodash@4.17.21', 'pkg:NPM/lodash@4.17.21') // -> true + * equals(purl1, 'pkg:npm/lodash@4.17.20') // -> false + * ``` + */ +export declare function equals(a: PurlInput, b: PurlInput): boolean; +/** + * Compare two PackageURLs for sorting. + * + * Returns a number indicating sort order: + * - Negative if `a` comes before `b` + * - Zero if they are equal + * - Positive if `a` comes after `b` + * + * Comparison is based on canonical string representation (lexicographic). + * + * Accepts both PackageURL instances and PURL strings. Strings are parsed and + * normalized before comparison. + * + * @param a - First PackageURL or PURL string to compare + * @param b - Second PackageURL or PURL string to compare + * @returns -1, 0, or 1 for sort ordering + * + * @example + * ```typescript + * compare('pkg:npm/aaa', 'pkg:npm/bbb') // -> -1 + * compare('pkg:npm/bbb', 'pkg:npm/aaa') // -> 1 + * + * // Use with Array.sort + * ['pkg:npm/bbb', 'pkg:npm/aaa'].sort(compare) + * // -> ['pkg:npm/aaa', 'pkg:npm/bbb'] + * ``` + */ +export declare function compare(a: PurlInput, b: PurlInput): -1 | 0 | 1; +/** + * Check if a PackageURL matches a pattern with wildcards. + * + * Supports glob-style wildcards: + * - asterisk matches any sequence of characters within a component + * - double asterisk matches any value including empty (for optional components) + * - question mark matches single character + * + * Pattern matching is performed on normalized PURLs (after type-specific + * normalization). Each component is matched independently. + * + * @param pattern - PURL string with wildcards + * @param purl - PackageURL instance to test + * @returns true if purl matches the pattern + * + * @example + * Wildcard in name: matches('pkg:npm/lodash-star', purl) + * Wildcard in namespace: matches('pkg:npm/@babel/star', purl) + * Wildcard in version: matches('pkg:npm/react@18.star', purl) + * Match any type: matches('pkg:star/lodash', purl) + * Optional version: matches('pkg:npm/lodash@star-star', purl) + * + * See test/pattern-matching.test.mts for comprehensive examples. + */ +export declare function matches(pattern: string, purl: PackageURL): boolean; +/** + * Create a reusable matcher function from a pattern. + * More efficient for testing multiple PURLs against the same pattern. + * + * The returned function can be used with Array methods like filter(), + * some(), and every() for efficient batch matching operations. + * + * @param pattern - PURL pattern string with wildcards + * @returns Function that tests PURLs against the pattern + * + * @example + * const isBabel = createMatcher('pkg:npm/@babel/star') + * packages.filter(isBabel) + * + * See test/pattern-matching.test.mts for comprehensive examples. + */ +export declare function createMatcher(pattern: string): (_purl: PackageURL) => boolean; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/constants.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/constants.d.ts new file mode 100644 index 00000000..f4a0af37 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/constants.d.ts @@ -0,0 +1,5 @@ +declare const LOOP_SENTINEL = 1000000; +declare const REUSED_SEARCH_PARAMS: import("url").URLSearchParams; +declare const REUSED_SEARCH_PARAMS_KEY = "_"; +declare const REUSED_SEARCH_PARAMS_OFFSET = 2; +export { LOOP_SENTINEL, REUSED_SEARCH_PARAMS, REUSED_SEARCH_PARAMS_KEY, REUSED_SEARCH_PARAMS_OFFSET, }; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/decode.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/decode.d.ts new file mode 100644 index 00000000..7a95e4f5 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/decode.d.ts @@ -0,0 +1,6 @@ +/** + * Decode PURL component value from URL encoding. + * @throws {PurlError} When component cannot be decoded. + */ +declare function decodePurlComponent(comp: string, encodedComponent: string): string; +export { decodePurlComponent }; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/encode.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/encode.d.ts new file mode 100644 index 00000000..e09c0fd0 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/encode.d.ts @@ -0,0 +1,26 @@ +import { encodeComponent } from './primordials.js'; +/** + * Encode package name component for URL. + */ +declare function encodeName(name: unknown): string; +/** + * Encode package namespace component for URL. + */ +declare function encodeNamespace(namespace: unknown): string; +/** + * Encode qualifier parameter key or value. + */ +declare function encodeQualifierParam(param: unknown): string; +/** + * Encode qualifiers object as URL query string. + */ +declare function encodeQualifiers(qualifiers: unknown): string; +/** + * Encode subpath component for URL. + */ +declare function encodeSubpath(subpath: unknown): string; +/** + * Encode package version component for URL. + */ +declare function encodeVersion(version: unknown): string; +export { encodeComponent, encodeName, encodeNamespace, encodeVersion, encodeQualifiers, encodeQualifierParam, encodeSubpath, }; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/error.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/error.d.ts new file mode 100644 index 00000000..72720820 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/error.d.ts @@ -0,0 +1,32 @@ +/** + * @fileoverview Custom PurlError class for Package URL parsing and validation errors. + * Provides consistent error message formatting for PURL-related exceptions. + */ +/** + * Format error message for PURL exceptions. + */ +declare function formatPurlErrorMessage(message?: string): string; +/** + * Custom error class for Package URL parsing and validation failures. + */ +declare class PurlError extends Error { + constructor(message?: string | undefined, options?: ErrorOptions | undefined); +} +/** + * Specialized error for injection character detection. + * Developers can catch this specifically to distinguish injection rejections + * from other PURL validation errors and handle them at an elevated level + * (e.g., logging, alerting, blocking). + * + * Properties: + * - `component` — which PURL component was rejected ("name", "namespace") + * - `charCode` — the character code of the injection character found + * - `purlType` — the package type (e.g., "npm", "maven") + */ +declare class PurlInjectionError extends PurlError { + readonly charCode: number; + readonly component: string; + readonly purlType: string; + constructor(purlType: string, component: string, charCode: number, charLabel: string); +} +export { formatPurlErrorMessage, PurlError, PurlInjectionError }; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/exists.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/exists.d.ts new file mode 100644 index 00000000..0e730ef9 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/exists.d.ts @@ -0,0 +1,31 @@ +/** + * @fileoverview Registry existence check functions. + * + * This module provides functions to check if packages exist in their + * respective registries. Separated from the core module to allow + * consumers to import the parser without pulling in HTTP dependencies. + * + * @example + * ```typescript + * import { npmExists, purlExists } from '@socketregistry/packageurl-js/exists' + * ``` + */ +export { cargoExists } from './purl-types/cargo.js'; +export { cocoapodsExists } from './purl-types/cocoapods.js'; +export { condaExists } from './purl-types/conda.js'; +export { dockerExists } from './purl-types/docker.js'; +export { packagistExists } from './purl-types/composer.js'; +export { cpanExists } from './purl-types/cpan.js'; +export { cranExists } from './purl-types/cran.js'; +export { gemExists } from './purl-types/gem.js'; +export { golangExists } from './purl-types/golang.js'; +export { hackageExists } from './purl-types/hackage.js'; +export { hexExists } from './purl-types/hex.js'; +export { mavenExists } from './purl-types/maven.js'; +export { npmExists } from './purl-types/npm.js'; +export { nugetExists } from './purl-types/nuget.js'; +export { pubExists } from './purl-types/pub.js'; +export { purlExists } from './purl-exists.js'; +export { pypiExists } from './purl-types/pypi.js'; +export { vscodeExtensionExists } from './purl-types/vscode-extension.js'; +export type { ExistsOptions, ExistsResult } from './purl-types/npm.js'; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/exists.js b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/exists.js new file mode 100644 index 00000000..89fed30c --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/exists.js @@ -0,0 +1,12502 @@ +/* Socket PackageURL - Built with esbuild */ +"use strict"; +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// @socketsecurity/lib/dist/constants/socket.js +var require_socket = __commonJS({ + "@socketsecurity/lib/dist/constants/socket.js"(exports2, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var socket_exports = {}; + __export2(socket_exports, { + CACHE_SOCKET_API_DIR: () => CACHE_SOCKET_API_DIR, + REGISTRY: () => REGISTRY, + REGISTRY_SCOPE_DELIMITER: () => REGISTRY_SCOPE_DELIMITER, + SOCKET_API_BASE_URL: () => SOCKET_API_BASE_URL, + SOCKET_API_TOKENS_URL: () => SOCKET_API_TOKENS_URL, + SOCKET_APP_PREFIX: () => SOCKET_APP_PREFIX, + SOCKET_CLI_APP_NAME: () => SOCKET_CLI_APP_NAME, + SOCKET_CONTACT_URL: () => SOCKET_CONTACT_URL, + SOCKET_DASHBOARD_URL: () => SOCKET_DASHBOARD_URL, + SOCKET_DLX_APP_NAME: () => SOCKET_DLX_APP_NAME, + SOCKET_DOCS_CONTACT_URL: () => SOCKET_DOCS_CONTACT_URL, + SOCKET_DOCS_URL: () => SOCKET_DOCS_URL, + SOCKET_FIREWALL_APP_NAME: () => SOCKET_FIREWALL_APP_NAME, + SOCKET_GITHUB_ORG: () => SOCKET_GITHUB_ORG, + SOCKET_IPC_HANDSHAKE: () => SOCKET_IPC_HANDSHAKE, + SOCKET_LIB_NAME: () => SOCKET_LIB_NAME, + SOCKET_LIB_URL: () => SOCKET_LIB_URL, + SOCKET_LIB_USER_AGENT: () => SOCKET_LIB_USER_AGENT, + SOCKET_LIB_VERSION: () => SOCKET_LIB_VERSION, + SOCKET_OVERRIDE_SCOPE: () => SOCKET_OVERRIDE_SCOPE, + SOCKET_PRICING_URL: () => SOCKET_PRICING_URL, + SOCKET_PUBLIC_API_KEY: () => SOCKET_PUBLIC_API_KEY, + SOCKET_PUBLIC_API_TOKEN: () => SOCKET_PUBLIC_API_TOKEN, + SOCKET_REGISTRY_APP_NAME: () => SOCKET_REGISTRY_APP_NAME, + SOCKET_REGISTRY_NPM_ORG: () => SOCKET_REGISTRY_NPM_ORG, + SOCKET_REGISTRY_PACKAGE_NAME: () => SOCKET_REGISTRY_PACKAGE_NAME, + SOCKET_REGISTRY_REPO_NAME: () => SOCKET_REGISTRY_REPO_NAME, + SOCKET_REGISTRY_SCOPE: () => SOCKET_REGISTRY_SCOPE, + SOCKET_SECURITY_SCOPE: () => SOCKET_SECURITY_SCOPE, + SOCKET_STATUS_URL: () => SOCKET_STATUS_URL, + SOCKET_WEBSITE_URL: () => SOCKET_WEBSITE_URL + }); + module2.exports = __toCommonJS2(socket_exports); + var SOCKET_API_BASE_URL = "https://api.socket.dev/v0"; + var SOCKET_PUBLIC_API_KEY = "sktsec_t_--RAN5U4ivauy4w37-6aoKyYPDt5ZbaT5JBVMqiwKo_api"; + var SOCKET_PUBLIC_API_TOKEN = SOCKET_PUBLIC_API_KEY; + var SOCKET_WEBSITE_URL = "https://socket.dev"; + var SOCKET_CONTACT_URL = "https://socket.dev/contact"; + var SOCKET_DASHBOARD_URL = "https://socket.dev/dashboard"; + var SOCKET_API_TOKENS_URL = "https://socket.dev/dashboard/settings/api-tokens"; + var SOCKET_PRICING_URL = "https://socket.dev/pricing"; + var SOCKET_STATUS_URL = "https://status.socket.dev"; + var SOCKET_DOCS_URL = "https://docs.socket.dev"; + var SOCKET_DOCS_CONTACT_URL = "https://docs.socket.dev/docs/contact-support"; + var SOCKET_REGISTRY_SCOPE = "@socketregistry"; + var SOCKET_SECURITY_SCOPE = "@socketsecurity"; + var SOCKET_OVERRIDE_SCOPE = "@socketoverride"; + var SOCKET_GITHUB_ORG = "SocketDev"; + var SOCKET_REGISTRY_REPO_NAME = "socket-registry"; + var SOCKET_REGISTRY_PACKAGE_NAME = "@socketsecurity/registry"; + var SOCKET_REGISTRY_NPM_ORG = "socketregistry"; + var SOCKET_CLI_APP_NAME = "socket"; + var SOCKET_DLX_APP_NAME = "dlx"; + var SOCKET_FIREWALL_APP_NAME = "sfw"; + var SOCKET_REGISTRY_APP_NAME = "registry"; + var SOCKET_APP_PREFIX = "_"; + var SOCKET_LIB_NAME = "@socketsecurity/lib"; + var SOCKET_LIB_VERSION = "5.18.2"; + var SOCKET_LIB_URL = "https://github.com/SocketDev/socket-lib"; + var SOCKET_LIB_USER_AGENT = `socketsecurity-lib/${SOCKET_LIB_VERSION} (${SOCKET_LIB_URL})`; + var SOCKET_IPC_HANDSHAKE = "SOCKET_IPC_HANDSHAKE"; + var CACHE_SOCKET_API_DIR = "socket-api"; + var REGISTRY = "registry"; + var REGISTRY_SCOPE_DELIMITER = "__"; + } +}); + +// @socketsecurity/lib/dist/constants/process.js +var require_process = __commonJS({ + "@socketsecurity/lib/dist/constants/process.js"(exports2, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var process_exports = {}; + __export2(process_exports, { + getAbortController: () => getAbortController, + getAbortSignal: () => getAbortSignal + }); + module2.exports = __toCommonJS2(process_exports); + var _abortController; + function getAbortController() { + if (_abortController === void 0) { + _abortController = new AbortController(); + } + return _abortController; + } + function getAbortSignal() { + return getAbortController().signal; + } + } +}); + +// @socketsecurity/lib/dist/arrays.js +var require_arrays = __commonJS({ + "@socketsecurity/lib/dist/arrays.js"(exports2, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var arrays_exports = {}; + __export2(arrays_exports, { + arrayChunk: () => arrayChunk, + arrayUnique: () => arrayUnique, + isArray: () => isArray, + joinAnd: () => joinAnd, + joinOr: () => joinOr + }); + module2.exports = __toCommonJS2(arrays_exports); + var _conjunctionFormatter; + // @__NO_SIDE_EFFECTS__ + function getConjunctionFormatter() { + if (_conjunctionFormatter === void 0) { + _conjunctionFormatter = new Intl.ListFormat("en", { + style: "long", + // "and" lists. + type: "conjunction" + }); + } + return _conjunctionFormatter; + } + var _disjunctionFormatter; + // @__NO_SIDE_EFFECTS__ + function getDisjunctionFormatter() { + if (_disjunctionFormatter === void 0) { + _disjunctionFormatter = new Intl.ListFormat("en", { + style: "long", + // "or" lists. + type: "disjunction" + }); + } + return _disjunctionFormatter; + } + // @__NO_SIDE_EFFECTS__ + function arrayChunk(arr, size) { + const chunkSize = size ?? 2; + if (chunkSize <= 0) { + throw new Error("Chunk size must be greater than 0"); + } + const { length } = arr; + const chunks = []; + for (let i = 0; i < length; i += chunkSize) { + chunks.push(arr.slice(i, i + chunkSize)); + } + return chunks; + } + // @__NO_SIDE_EFFECTS__ + function arrayUnique(arr) { + return [...new Set(arr)]; + } + var isArray = Array.isArray; + // @__NO_SIDE_EFFECTS__ + function joinAnd(arr) { + return (/* @__PURE__ */ getConjunctionFormatter()).format(arr); + } + // @__NO_SIDE_EFFECTS__ + function joinOr(arr) { + return (/* @__PURE__ */ getDisjunctionFormatter()).format(arr); + } + } +}); + +// @socketsecurity/lib/dist/constants/core.js +var require_core = __commonJS({ + "@socketsecurity/lib/dist/constants/core.js"(exports2, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var core_exports = {}; + __export2(core_exports, { + COLUMN_LIMIT: () => COLUMN_LIMIT, + EMPTY_FILE: () => EMPTY_FILE, + EMPTY_VALUE: () => EMPTY_VALUE, + LOOP_SENTINEL: () => LOOP_SENTINEL, + NODE_AUTH_TOKEN: () => NODE_AUTH_TOKEN, + NODE_ENV: () => NODE_ENV, + UNDEFINED_TOKEN: () => UNDEFINED_TOKEN, + UNKNOWN_ERROR: () => UNKNOWN_ERROR, + UNKNOWN_VALUE: () => UNKNOWN_VALUE, + V: () => V, + kInternalsSymbol: () => kInternalsSymbol + }); + module2.exports = __toCommonJS2(core_exports); + var kInternalsSymbol = Symbol("@socketregistry.constants.internals"); + var LOOP_SENTINEL = 1e6; + var UNKNOWN_ERROR = "Unknown error"; + var UNKNOWN_VALUE = ""; + var EMPTY_FILE = "/* empty */\n"; + var EMPTY_VALUE = ""; + var UNDEFINED_TOKEN = void 0; + var V = "v"; + var COLUMN_LIMIT = 80; + var NODE_AUTH_TOKEN = "NODE_AUTH_TOKEN"; + var NODE_ENV = "NODE_ENV"; + } +}); + +// @socketsecurity/lib/dist/promises.js +var require_promises = __commonJS({ + "@socketsecurity/lib/dist/promises.js"(exports2, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var promises_exports = {}; + __export2(promises_exports, { + normalizeIterationOptions: () => normalizeIterationOptions, + normalizeRetryOptions: () => normalizeRetryOptions, + pEach: () => pEach, + pEachChunk: () => pEachChunk, + pFilter: () => pFilter, + pFilterChunk: () => pFilterChunk, + pRetry: () => pRetry, + resolveRetryOptions: () => resolveRetryOptions + }); + module2.exports = __toCommonJS2(promises_exports); + var import_core = require_core(); + var import_process = require_process(); + var import_arrays = require_arrays(); + var abortSignal = (0, import_process.getAbortSignal)(); + var _timers; + // @__NO_SIDE_EFFECTS__ + function getTimers() { + if (_timers === void 0) { + _timers = require("timers/promises"); + } + return _timers; + } + // @__NO_SIDE_EFFECTS__ + function normalizeIterationOptions(options) { + const opts = typeof options === "number" ? { concurrency: options } : options; + const { + // The number of concurrent executions performed at one time. + concurrency = 1, + // Retries as a number or options object. + retries, + // AbortSignal used to support cancellation. + signal = abortSignal + } = { __proto__: null, ...opts }; + const normalizedConcurrency = Math.max(1, concurrency); + const retryOpts = /* @__PURE__ */ resolveRetryOptions(retries); + return { + __proto__: null, + concurrency: normalizedConcurrency, + retries: /* @__PURE__ */ normalizeRetryOptions({ signal, ...retryOpts }), + signal + }; + } + // @__NO_SIDE_EFFECTS__ + function normalizeRetryOptions(options) { + const resolved = /* @__PURE__ */ resolveRetryOptions(options); + const { + // Arguments to pass to the callback function. + args = [], + // Multiplier for exponential backoff (e.g., 2 doubles delay each retry). + backoffFactor = 2, + // Initial delay before the first retry (in milliseconds). + baseDelayMs = 200, + // Whether to apply randomness to spread out retries. + jitter = true, + // Upper limit for any backoff delay (in milliseconds). + maxDelayMs = 1e4, + // Optional callback invoked on each retry attempt: + // (attempt: number, error: unknown, delay: number) => void + onRetry, + // Whether onRetry can cancel retries by returning `false`. + onRetryCancelOnFalse = false, + // Whether onRetry will rethrow errors. + onRetryRethrow = false, + // Number of retry attempts (0 = no retries, only initial attempt). + retries = 0, + // AbortSignal used to support cancellation. + signal = abortSignal + } = resolved; + return { + args, + backoffFactor, + baseDelayMs, + jitter, + maxDelayMs, + onRetry, + onRetryCancelOnFalse, + onRetryRethrow, + retries, + signal + }; + } + // @__NO_SIDE_EFFECTS__ + async function pEach(array, callbackFn, options) { + const iterOpts = /* @__PURE__ */ normalizeIterationOptions(options); + const { concurrency, retries, signal } = iterOpts; + const chunks = (0, import_arrays.arrayChunk)(array, concurrency); + for (const chunk of chunks) { + if (signal?.aborted) { + return; + } + await Promise.allSettled( + chunk.map( + (item) => /* @__PURE__ */ pRetry((...args) => callbackFn(args[0]), { + ...retries, + args: [item], + signal + }) + ) + ); + } + } + // @__NO_SIDE_EFFECTS__ + async function pFilter(array, callbackFn, options) { + const iterOpts = /* @__PURE__ */ normalizeIterationOptions(options); + return (await /* @__PURE__ */ pFilterChunk( + (0, import_arrays.arrayChunk)(array, iterOpts.concurrency), + callbackFn, + iterOpts.retries + )).flat(); + } + // @__NO_SIDE_EFFECTS__ + async function pEachChunk(array, callbackFn, options) { + const { chunkSize = 100, ...retryOpts } = options || {}; + const chunks = (0, import_arrays.arrayChunk)(array, chunkSize); + const normalizedRetryOpts = /* @__PURE__ */ normalizeRetryOptions(retryOpts); + const { signal } = normalizedRetryOpts; + for (const chunk of chunks) { + if (signal?.aborted) { + return; + } + await /* @__PURE__ */ pRetry((...args) => callbackFn(args[0]), { + ...normalizedRetryOpts, + args: [chunk] + }); + } + } + // @__NO_SIDE_EFFECTS__ + async function pFilterChunk(chunks, callbackFn, options) { + const retryOpts = /* @__PURE__ */ normalizeRetryOptions(options); + const { signal } = retryOpts; + const { length } = chunks; + const filteredChunks = Array(length); + for (let i = 0; i < length; i += 1) { + if (signal?.aborted) { + filteredChunks[i] = []; + } else { + const chunk = chunks[i]; + const settled = await Promise.allSettled( + chunk.map( + (value) => /* @__PURE__ */ pRetry((...args) => callbackFn(args[0]), { + ...retryOpts, + args: [value] + }) + ) + ); + const predicateResults = settled.map( + (r) => r.status === "fulfilled" ? r.value : false + ); + filteredChunks[i] = chunk.filter((_v, i2) => predicateResults[i2]); + } + } + return filteredChunks; + } + // @__NO_SIDE_EFFECTS__ + async function pRetry(callbackFn, options) { + const { + args, + backoffFactor, + baseDelayMs, + jitter, + maxDelayMs, + onRetry, + onRetryCancelOnFalse, + onRetryRethrow, + retries, + signal + } = /* @__PURE__ */ normalizeRetryOptions(options); + if (signal?.aborted) { + return void 0; + } + if (retries === 0) { + return await callbackFn(...args || [], { signal }); + } + const timers = /* @__PURE__ */ getTimers(); + let attempts = retries; + let delay = baseDelayMs; + let error = import_core.UNDEFINED_TOKEN; + while (attempts-- >= 0) { + if (signal?.aborted) { + return void 0; + } + try { + return await callbackFn(...args || [], { signal }); + } catch (e) { + error = e; + if (attempts < 0) { + break; + } + let waitTime = delay; + if (jitter) { + waitTime += Math.floor(Math.random() * delay); + } + waitTime = Math.min(waitTime, maxDelayMs); + if (typeof onRetry === "function") { + try { + const result = onRetry(retries - attempts, e, waitTime); + if (result === false && onRetryCancelOnFalse) { + break; + } + if (typeof result === "number" && result >= 0) { + waitTime = Math.min(result, maxDelayMs); + } + } catch (e2) { + if (onRetryRethrow) { + throw e2; + } + } + } + try { + await timers.setTimeout(waitTime, void 0, { signal }); + } catch { + return void 0; + } + if (signal?.aborted) { + return void 0; + } + delay = Math.min(delay * backoffFactor, maxDelayMs); + } + } + if (error !== import_core.UNDEFINED_TOKEN) { + throw error; + } + return void 0; + } + // @__NO_SIDE_EFFECTS__ + function resolveRetryOptions(options) { + const defaults = { + __proto__: null, + retries: 0, + baseDelayMs: 200, + maxDelayMs: 1e4, + backoffFactor: 2 + }; + if (typeof options === "number") { + return { ...defaults, retries: options }; + } + return options ? { ...defaults, ...options } : defaults; + } + } +}); + +// @socketsecurity/lib/dist/globs.js +var require_globs = __commonJS({ + "@socketsecurity/lib/dist/globs.js"(exports2, module2) { + "use strict"; + module2.exports = {}; + } +}); + +// @socketsecurity/lib/dist/ansi.js +var require_ansi = __commonJS({ + "@socketsecurity/lib/dist/ansi.js"(exports2, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var ansi_exports = {}; + __export2(ansi_exports, { + ANSI_BOLD: () => ANSI_BOLD, + ANSI_DIM: () => ANSI_DIM, + ANSI_ITALIC: () => ANSI_ITALIC, + ANSI_RESET: () => ANSI_RESET, + ANSI_STRIKETHROUGH: () => ANSI_STRIKETHROUGH, + ANSI_UNDERLINE: () => ANSI_UNDERLINE, + ansiRegex: () => ansiRegex2, + stripAnsi: () => stripAnsi2 + }); + module2.exports = __toCommonJS2(ansi_exports); + var ANSI_RESET = "\x1B[0m"; + var ANSI_BOLD = "\x1B[1m"; + var ANSI_DIM = "\x1B[2m"; + var ANSI_ITALIC = "\x1B[3m"; + var ANSI_UNDERLINE = "\x1B[4m"; + var ANSI_STRIKETHROUGH = "\x1B[9m"; + var ANSI_REGEX = /\x1b\[[0-9;]*m/g; + // @__NO_SIDE_EFFECTS__ + function ansiRegex2(options) { + const { onlyFirst } = options ?? {}; + const ST = "(?:\\u0007|\\u001B\\u005C|\\u009C)"; + const osc = `(?:\\u001B\\][\\s\\S]*?${ST})`; + const csi = "[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]"; + const pattern = `${osc}|${csi}`; + return new RegExp(pattern, onlyFirst ? void 0 : "g"); + } + // @__NO_SIDE_EFFECTS__ + function stripAnsi2(text) { + return text.replace(ANSI_REGEX, ""); + } + } +}); + +// @socketsecurity/lib/dist/external/get-east-asian-width.js +var require_get_east_asian_width = __commonJS({ + "@socketsecurity/lib/dist/external/get-east-asian-width.js"(exports2, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __name = (target, value) => __defProp2(target, "name", { value, configurable: true }); + var __esm = (fn, res) => function __init() { + return fn && (res = (0, fn[__getOwnPropNames2(fn)[0]])(fn = 0)), res; + }; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + function isAmbiguous(x) { + return x === 161 || x === 164 || x === 167 || x === 168 || x === 170 || x === 173 || x === 174 || x >= 176 && x <= 180 || x >= 182 && x <= 186 || x >= 188 && x <= 191 || x === 198 || x === 208 || x === 215 || x === 216 || x >= 222 && x <= 225 || x === 230 || x >= 232 && x <= 234 || x === 236 || x === 237 || x === 240 || x === 242 || x === 243 || x >= 247 && x <= 250 || x === 252 || x === 254 || x === 257 || x === 273 || x === 275 || x === 283 || x === 294 || x === 295 || x === 299 || x >= 305 && x <= 307 || x === 312 || x >= 319 && x <= 322 || x === 324 || x >= 328 && x <= 331 || x === 333 || x === 338 || x === 339 || x === 358 || x === 359 || x === 363 || x === 462 || x === 464 || x === 466 || x === 468 || x === 470 || x === 472 || x === 474 || x === 476 || x === 593 || x === 609 || x === 708 || x === 711 || x >= 713 && x <= 715 || x === 717 || x === 720 || x >= 728 && x <= 731 || x === 733 || x === 735 || x >= 768 && x <= 879 || x >= 913 && x <= 929 || x >= 931 && x <= 937 || x >= 945 && x <= 961 || x >= 963 && x <= 969 || x === 1025 || x >= 1040 && x <= 1103 || x === 1105 || x === 8208 || x >= 8211 && x <= 8214 || x === 8216 || x === 8217 || x === 8220 || x === 8221 || x >= 8224 && x <= 8226 || x >= 8228 && x <= 8231 || x === 8240 || x === 8242 || x === 8243 || x === 8245 || x === 8251 || x === 8254 || x === 8308 || x === 8319 || x >= 8321 && x <= 8324 || x === 8364 || x === 8451 || x === 8453 || x === 8457 || x === 8467 || x === 8470 || x === 8481 || x === 8482 || x === 8486 || x === 8491 || x === 8531 || x === 8532 || x >= 8539 && x <= 8542 || x >= 8544 && x <= 8555 || x >= 8560 && x <= 8569 || x === 8585 || x >= 8592 && x <= 8601 || x === 8632 || x === 8633 || x === 8658 || x === 8660 || x === 8679 || x === 8704 || x === 8706 || x === 8707 || x === 8711 || x === 8712 || x === 8715 || x === 8719 || x === 8721 || x === 8725 || x === 8730 || x >= 8733 && x <= 8736 || x === 8739 || x === 8741 || x >= 8743 && x <= 8748 || x === 8750 || x >= 8756 && x <= 8759 || x === 8764 || x === 8765 || x === 8776 || x === 8780 || x === 8786 || x === 8800 || x === 8801 || x >= 8804 && x <= 8807 || x === 8810 || x === 8811 || x === 8814 || x === 8815 || x === 8834 || x === 8835 || x === 8838 || x === 8839 || x === 8853 || x === 8857 || x === 8869 || x === 8895 || x === 8978 || x >= 9312 && x <= 9449 || x >= 9451 && x <= 9547 || x >= 9552 && x <= 9587 || x >= 9600 && x <= 9615 || x >= 9618 && x <= 9621 || x === 9632 || x === 9633 || x >= 9635 && x <= 9641 || x === 9650 || x === 9651 || x === 9654 || x === 9655 || x === 9660 || x === 9661 || x === 9664 || x === 9665 || x >= 9670 && x <= 9672 || x === 9675 || x >= 9678 && x <= 9681 || x >= 9698 && x <= 9701 || x === 9711 || x === 9733 || x === 9734 || x === 9737 || x === 9742 || x === 9743 || x === 9756 || x === 9758 || x === 9792 || x === 9794 || x === 9824 || x === 9825 || x >= 9827 && x <= 9829 || x >= 9831 && x <= 9834 || x === 9836 || x === 9837 || x === 9839 || x === 9886 || x === 9887 || x === 9919 || x >= 9926 && x <= 9933 || x >= 9935 && x <= 9939 || x >= 9941 && x <= 9953 || x === 9955 || x === 9960 || x === 9961 || x >= 9963 && x <= 9969 || x === 9972 || x >= 9974 && x <= 9977 || x === 9979 || x === 9980 || x === 9982 || x === 9983 || x === 10045 || x >= 10102 && x <= 10111 || x >= 11094 && x <= 11097 || x >= 12872 && x <= 12879 || x >= 57344 && x <= 63743 || x >= 65024 && x <= 65039 || x === 65533 || x >= 127232 && x <= 127242 || x >= 127248 && x <= 127277 || x >= 127280 && x <= 127337 || x >= 127344 && x <= 127373 || x === 127375 || x === 127376 || x >= 127387 && x <= 127404 || x >= 917760 && x <= 917999 || x >= 983040 && x <= 1048573 || x >= 1048576 && x <= 1114109; + } + function isFullWidth(x) { + return x === 12288 || x >= 65281 && x <= 65376 || x >= 65504 && x <= 65510; + } + function isWide(x) { + return x >= 4352 && x <= 4447 || x === 8986 || x === 8987 || x === 9001 || x === 9002 || x >= 9193 && x <= 9196 || x === 9200 || x === 9203 || x === 9725 || x === 9726 || x === 9748 || x === 9749 || x >= 9776 && x <= 9783 || x >= 9800 && x <= 9811 || x === 9855 || x >= 9866 && x <= 9871 || x === 9875 || x === 9889 || x === 9898 || x === 9899 || x === 9917 || x === 9918 || x === 9924 || x === 9925 || x === 9934 || x === 9940 || x === 9962 || x === 9970 || x === 9971 || x === 9973 || x === 9978 || x === 9981 || x === 9989 || x === 9994 || x === 9995 || x === 10024 || x === 10060 || x === 10062 || x >= 10067 && x <= 10069 || x === 10071 || x >= 10133 && x <= 10135 || x === 10160 || x === 10175 || x === 11035 || x === 11036 || x === 11088 || x === 11093 || x >= 11904 && x <= 11929 || x >= 11931 && x <= 12019 || x >= 12032 && x <= 12245 || x >= 12272 && x <= 12287 || x >= 12289 && x <= 12350 || x >= 12353 && x <= 12438 || x >= 12441 && x <= 12543 || x >= 12549 && x <= 12591 || x >= 12593 && x <= 12686 || x >= 12688 && x <= 12773 || x >= 12783 && x <= 12830 || x >= 12832 && x <= 12871 || x >= 12880 && x <= 42124 || x >= 42128 && x <= 42182 || x >= 43360 && x <= 43388 || x >= 44032 && x <= 55203 || x >= 63744 && x <= 64255 || x >= 65040 && x <= 65049 || x >= 65072 && x <= 65106 || x >= 65108 && x <= 65126 || x >= 65128 && x <= 65131 || x >= 94176 && x <= 94180 || x === 94192 || x === 94193 || x >= 94208 && x <= 100343 || x >= 100352 && x <= 101589 || x >= 101631 && x <= 101640 || x >= 110576 && x <= 110579 || x >= 110581 && x <= 110587 || x === 110589 || x === 110590 || x >= 110592 && x <= 110882 || x === 110898 || x >= 110928 && x <= 110930 || x === 110933 || x >= 110948 && x <= 110951 || x >= 110960 && x <= 111355 || x >= 119552 && x <= 119638 || x >= 119648 && x <= 119670 || x === 126980 || x === 127183 || x === 127374 || x >= 127377 && x <= 127386 || x >= 127488 && x <= 127490 || x >= 127504 && x <= 127547 || x >= 127552 && x <= 127560 || x === 127568 || x === 127569 || x >= 127584 && x <= 127589 || x >= 127744 && x <= 127776 || x >= 127789 && x <= 127797 || x >= 127799 && x <= 127868 || x >= 127870 && x <= 127891 || x >= 127904 && x <= 127946 || x >= 127951 && x <= 127955 || x >= 127968 && x <= 127984 || x === 127988 || x >= 127992 && x <= 128062 || x === 128064 || x >= 128066 && x <= 128252 || x >= 128255 && x <= 128317 || x >= 128331 && x <= 128334 || x >= 128336 && x <= 128359 || x === 128378 || x === 128405 || x === 128406 || x === 128420 || x >= 128507 && x <= 128591 || x >= 128640 && x <= 128709 || x === 128716 || x >= 128720 && x <= 128722 || x >= 128725 && x <= 128727 || x >= 128732 && x <= 128735 || x === 128747 || x === 128748 || x >= 128756 && x <= 128764 || x >= 128992 && x <= 129003 || x === 129008 || x >= 129292 && x <= 129338 || x >= 129340 && x <= 129349 || x >= 129351 && x <= 129535 || x >= 129648 && x <= 129660 || x >= 129664 && x <= 129673 || x >= 129679 && x <= 129734 || x >= 129742 && x <= 129756 || x >= 129759 && x <= 129769 || x >= 129776 && x <= 129784 || x >= 131072 && x <= 196605 || x >= 196608 && x <= 262141; + } + function getCategory(x) { + if (isAmbiguous(x)) return "ambiguous"; + if (isFullWidth(x)) return "fullwidth"; + if (x === 8361 || x >= 65377 && x <= 65470 || x >= 65474 && x <= 65479 || x >= 65482 && x <= 65487 || x >= 65490 && x <= 65495 || x >= 65498 && x <= 65500 || x >= 65512 && x <= 65518) { + return "halfwidth"; + } + if (x >= 32 && x <= 126 || x === 162 || x === 163 || x === 165 || x === 166 || x === 172 || x === 175 || x >= 10214 && x <= 10221 || x === 10629 || x === 10630) { + return "narrow"; + } + if (isWide(x)) return "wide"; + return "neutral"; + } + var init_lookup = __esm({ + "get-east-asian-width/lookup.js"() { + __name(isAmbiguous, "isAmbiguous"); + __name(isFullWidth, "isFullWidth"); + __name(isWide, "isWide"); + __name(getCategory, "getCategory"); + } + }); + var get_east_asian_width_exports = {}; + __export2(get_east_asian_width_exports, { + _isNarrowWidth: () => _isNarrowWidth, + eastAsianWidth: () => eastAsianWidth, + eastAsianWidthType: () => eastAsianWidthType + }); + function validate(codePoint) { + if (!Number.isSafeInteger(codePoint)) { + throw new TypeError(`Expected a code point, got \`${typeof codePoint}\`.`); + } + } + function eastAsianWidthType(codePoint) { + validate(codePoint); + return getCategory(codePoint); + } + function eastAsianWidth(codePoint, { ambiguousAsWide = false } = {}) { + validate(codePoint); + if (isFullWidth(codePoint) || isWide(codePoint) || ambiguousAsWide && isAmbiguous(codePoint)) { + return 2; + } + return 1; + } + var _isNarrowWidth; + var init_get_east_asian_width = __esm({ + "get-east-asian-width/index.js"() { + init_lookup(); + __name(validate, "validate"); + __name(eastAsianWidthType, "eastAsianWidthType"); + __name(eastAsianWidth, "eastAsianWidth"); + _isNarrowWidth = /* @__PURE__ */ __name((codePoint) => !(isFullWidth(codePoint) || isWide(codePoint)), "_isNarrowWidth"); + } + }); + module2.exports = (init_get_east_asian_width(), __toCommonJS2(get_east_asian_width_exports)); + } +}); + +// @socketsecurity/lib/dist/strings.js +var require_strings = __commonJS({ + "@socketsecurity/lib/dist/strings.js"(exports2, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var strings_exports = {}; + __export2(strings_exports, { + ansiRegex: () => import_ansi.ansiRegex, + applyLinePrefix: () => applyLinePrefix, + camelToKebab: () => camelToKebab, + centerText: () => centerText, + fromCharCode: () => fromCharCode, + indentString: () => indentString, + isBlankString: () => isBlankString, + isNonEmptyString: () => isNonEmptyString, + repeatString: () => repeatString, + search: () => search, + stringWidth: () => stringWidth, + stripAnsi: () => import_ansi.stripAnsi, + stripBom: () => stripBom, + toKebabCase: () => toKebabCase, + trimNewlines: () => trimNewlines + }); + module2.exports = __toCommonJS2(strings_exports); + var import_ansi = require_ansi(); + var _eastAsianWidth; + // @__NO_SIDE_EFFECTS__ + function getEastAsianWidth() { + if (_eastAsianWidth === void 0) { + _eastAsianWidth = require_get_east_asian_width().eastAsianWidth; + } + return _eastAsianWidth; + } + var fromCharCode = String.fromCharCode; + // @__NO_SIDE_EFFECTS__ + function applyLinePrefix(str, options) { + const { prefix = "" } = { + __proto__: null, + ...options + }; + return prefix.length ? `${prefix}${str.includes("\n") ? str.replace(/\n/g, ` +${prefix}`) : str}` : str; + } + // @__NO_SIDE_EFFECTS__ + function camelToKebab(str) { + const { length } = str; + if (!length) { + return ""; + } + let result = ""; + let i = 0; + while (i < length) { + const char = str[i]; + if (!char) { + break; + } + const charCode = char.charCodeAt(0); + const isUpperCase = charCode >= 65 && charCode <= 90; + if (isUpperCase) { + if (result.length > 0) { + result += "-"; + } + while (i < length) { + const currChar = str[i]; + if (!currChar) { + break; + } + const currCharCode = currChar.charCodeAt(0); + const isCurrUpper = currCharCode >= 65 && currCharCode <= 90; + if (isCurrUpper) { + result += fromCharCode( + currCharCode + 32 + /*'a'-'A'*/ + ); + i += 1; + } else { + break; + } + } + } else { + result += char; + i += 1; + } + } + return result; + } + // @__NO_SIDE_EFFECTS__ + function centerText(text, width) { + const textLength = (0, import_ansi.stripAnsi)(text).length; + if (textLength >= width) { + return text; + } + const padding = width - textLength; + const leftPad = Math.floor(padding / 2); + const rightPad = padding - leftPad; + return " ".repeat(leftPad) + text + " ".repeat(rightPad); + } + // @__NO_SIDE_EFFECTS__ + function indentString(str, options) { + const { count = 1 } = { __proto__: null, ...options }; + return str.replace(/^(?!\s*$)/gm, " ".repeat(count)); + } + // @__NO_SIDE_EFFECTS__ + function isBlankString(value) { + return typeof value === "string" && (!value.length || /^\s+$/.test(value)); + } + // @__NO_SIDE_EFFECTS__ + function isNonEmptyString(value) { + return typeof value === "string" && value.length > 0; + } + // @__NO_SIDE_EFFECTS__ + function repeatString(str, count) { + if (count <= 0) { + return ""; + } + return str.repeat(count); + } + // @__NO_SIDE_EFFECTS__ + function search(str, regexp, options) { + const { fromIndex = 0 } = { __proto__: null, ...options }; + const { length } = str; + if (fromIndex >= length) { + return -1; + } + if (fromIndex === 0) { + return str.search(regexp); + } + const offset = fromIndex < 0 ? Math.max(length + fromIndex, 0) : fromIndex; + const result = str.slice(offset).search(regexp); + return result === -1 ? -1 : result + offset; + } + // @__NO_SIDE_EFFECTS__ + function stripBom(str) { + return str.length > 0 && str.charCodeAt(0) === 65279 ? str.slice(1) : str; + } + var segmenter = new Intl.Segmenter(); + var zeroWidthClusterRegex; + var leadingNonPrintingRegex; + var emojiRegex; + try { + zeroWidthClusterRegex = new RegExp("^(?:\\p{Default_Ignorable_Code_Point}|\\p{Control}|\\p{Mark}|\\p{Surrogate})+$", "v"); + leadingNonPrintingRegex = new RegExp("^[\\p{Default_Ignorable_Code_Point}\\p{Control}\\p{Format}\\p{Mark}\\p{Surrogate}]+", "v"); + emojiRegex = new RegExp("^\\p{RGI_Emoji}$", "v"); + } catch { + zeroWidthClusterRegex = new RegExp("^(?:\\p{Default_Ignorable_Code_Point}|\\p{Control}|\\p{Mark})+$", "u"); + leadingNonPrintingRegex = /^[\p{Default_Ignorable_Code_Point}\p{Control}\p{Format}\p{Mark}]+/u; + emojiRegex = new RegExp("^\\p{Extended_Pictographic}$", "u"); + } + // @__NO_SIDE_EFFECTS__ + function stringWidth(text) { + if (typeof text !== "string" || !text.length) { + return 0; + } + const plainText = (0, import_ansi.stripAnsi)(text); + if (!plainText.length) { + return 0; + } + let width = 0; + const eastAsianWidthOptions = { ambiguousAsWide: false }; + const eastAsianWidth = /* @__PURE__ */ getEastAsianWidth(); + for (const { segment } of segmenter.segment(plainText)) { + if (zeroWidthClusterRegex.test(segment)) { + continue; + } + if (emojiRegex.test(segment)) { + width += 2; + continue; + } + const baseSegment = segment.replace(leadingNonPrintingRegex, ""); + const codePoint = baseSegment.codePointAt(0); + if (codePoint === void 0) { + continue; + } + width += eastAsianWidth(codePoint, eastAsianWidthOptions); + if (segment.length > 1) { + for (const char of segment.slice(1)) { + const charCode = char.charCodeAt(0); + if (charCode >= 65280 && charCode <= 65519) { + const trailingCodePoint = char.codePointAt(0); + if (trailingCodePoint !== void 0) { + width += eastAsianWidth(trailingCodePoint, eastAsianWidthOptions); + } + } + } + } + } + return width; + } + // @__NO_SIDE_EFFECTS__ + function toKebabCase(str) { + if (!str.length) { + return str; + } + return str.replace(/([a-z]+[0-9]*)([A-Z])/g, "$1-$2").replace(/_/g, "-").toLowerCase(); + } + // @__NO_SIDE_EFFECTS__ + function trimNewlines(str) { + const { length } = str; + if (length === 0) { + return str; + } + const first = str.charCodeAt(0); + const noFirstNewline = first !== 13 && first !== 10; + if (length === 1) { + return noFirstNewline ? str : ""; + } + const last = str.charCodeAt(length - 1); + const noLastNewline = last !== 13 && last !== 10; + if (noFirstNewline && noLastNewline) { + return str; + } + let start = 0; + let end = length; + while (start < end) { + const code = str.charCodeAt(start); + if (code !== 13 && code !== 10) { + break; + } + start += 1; + } + while (end > start) { + const code = str.charCodeAt(end - 1); + if (code !== 13 && code !== 10) { + break; + } + end -= 1; + } + return start === 0 && end === length ? str : str.slice(start, end); + } + } +}); + +// @socketsecurity/lib/dist/json/parse.js +var require_parse = __commonJS({ + "@socketsecurity/lib/dist/json/parse.js"(exports2, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var parse_exports = {}; + __export2(parse_exports, { + isJsonPrimitive: () => isJsonPrimitive, + jsonParse: () => jsonParse + }); + module2.exports = __toCommonJS2(parse_exports); + var import_strings = require_strings(); + var JSONParse = JSON.parse; + // @__NO_SIDE_EFFECTS__ + function isBuffer(x) { + if (!x || typeof x !== "object") { + return false; + } + const obj = x; + if (typeof obj["length"] !== "number") { + return false; + } + if (typeof obj["copy"] !== "function" || typeof obj["slice"] !== "function") { + return false; + } + if (typeof obj["length"] === "number" && obj["length"] > 0 && typeof obj[0] !== "number") { + return false; + } + const Ctor = x.constructor; + return !!(typeof Ctor?.isBuffer === "function" && Ctor.isBuffer(x)); + } + // @__NO_SIDE_EFFECTS__ + function isJsonPrimitive(value) { + return value === null || typeof value === "boolean" || typeof value === "number" || typeof value === "string"; + } + // @__NO_SIDE_EFFECTS__ + function jsonParse(content, options) { + const { filepath, reviver, throws } = { + __proto__: null, + ...options + }; + const shouldThrow = throws === void 0 || !!throws; + const jsonStr = /* @__PURE__ */ isBuffer(content) ? content.toString("utf8") : content; + try { + return JSONParse((0, import_strings.stripBom)(jsonStr), reviver); + } catch (e) { + if (shouldThrow) { + const error = e; + if (error && typeof filepath === "string") { + error.message = `${filepath}: ${error.message}`; + } + throw error; + } + } + return void 0; + } + } +}); + +// @socketsecurity/lib/dist/sorts.js +var require_sorts = __commonJS({ + "@socketsecurity/lib/dist/sorts.js"(exports2, module2) { + "use strict"; + module2.exports = {}; + } +}); + +// @socketsecurity/lib/dist/objects.js +var require_objects = __commonJS({ + "@socketsecurity/lib/dist/objects.js"(exports2, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var objects_exports = {}; + __export2(objects_exports, { + createConstantsObject: () => createConstantsObject, + createLazyGetter: () => createLazyGetter, + defineGetter: () => defineGetter, + defineLazyGetter: () => defineLazyGetter, + defineLazyGetters: () => defineLazyGetters, + entryKeyComparator: () => entryKeyComparator, + getKeys: () => getKeys, + getOwn: () => getOwn, + getOwnPropertyValues: () => getOwnPropertyValues, + hasKeys: () => hasKeys, + hasOwn: () => hasOwn, + isObject: () => isObject, + isObjectObject: () => isObjectObject, + merge: () => merge, + objectAssign: () => objectAssign, + objectEntries: () => objectEntries, + objectFreeze: () => objectFreeze, + toSortedObject: () => toSortedObject, + toSortedObjectFromEntries: () => toSortedObjectFromEntries + }); + module2.exports = __toCommonJS2(objects_exports); + var import_core = require_core(); + var import_arrays = require_arrays(); + var import_sorts = require_sorts(); + var ObjectDefineProperties = Object.defineProperties; + var ObjectDefineProperty = Object.defineProperty; + var ObjectFreeze = Object.freeze; + var ObjectFromEntries = Object.fromEntries; + var ObjectGetOwnPropertyDescriptors = Object.getOwnPropertyDescriptors; + var ObjectGetOwnPropertyNames = Object.getOwnPropertyNames; + var ObjectGetPrototypeOf = Object.getPrototypeOf; + var ObjectHasOwn = Object.hasOwn; + var ObjectKeys2 = Object.keys; + var ObjectPrototype = Object.prototype; + var ObjectSetPrototypeOf = Object.setPrototypeOf; + var ReflectOwnKeys = Reflect.ownKeys; + // @__NO_SIDE_EFFECTS__ + function createConstantsObject(props, options_) { + const options = { __proto__: null, ...options_ }; + const attributes = ObjectFreeze({ + __proto__: null, + getters: options.getters ? ObjectFreeze( + ObjectSetPrototypeOf(/* @__PURE__ */ toSortedObject(options.getters), null) + ) : void 0, + internals: options.internals ? ObjectFreeze( + ObjectSetPrototypeOf(/* @__PURE__ */ toSortedObject(options.internals), null) + ) : void 0, + mixin: options.mixin ? ObjectFreeze( + ObjectDefineProperties( + { __proto__: null }, + ObjectGetOwnPropertyDescriptors(options.mixin) + ) + ) : void 0, + props: props ? ObjectFreeze(ObjectSetPrototypeOf(/* @__PURE__ */ toSortedObject(props), null)) : void 0 + }); + const lazyGetterStats = ObjectFreeze({ + __proto__: null, + initialized: /* @__PURE__ */ new Set() + }); + const object = defineLazyGetters( + { + __proto__: null, + [import_core.kInternalsSymbol]: ObjectFreeze({ + __proto__: null, + get attributes() { + return attributes; + }, + get lazyGetterStats() { + return lazyGetterStats; + }, + ...attributes.internals + }), + kInternalsSymbol: import_core.kInternalsSymbol, + ...attributes.props + }, + attributes.getters, + lazyGetterStats + ); + if (attributes.mixin) { + ObjectDefineProperties( + object, + /* @__PURE__ */ toSortedObjectFromEntries( + (/* @__PURE__ */ objectEntries(ObjectGetOwnPropertyDescriptors(attributes.mixin))).filter( + (p) => !ObjectHasOwn(object, p[0]) + ) + ) + ); + } + return ObjectFreeze(object); + } + // @__NO_SIDE_EFFECTS__ + function createLazyGetter(name, getter, stats) { + let lazyValue = import_core.UNDEFINED_TOKEN; + const { [name]: lazyGetter } = { + [name]() { + if (lazyValue === import_core.UNDEFINED_TOKEN) { + stats?.initialized?.add(name); + lazyValue = getter(); + } + return lazyValue; + } + }; + return lazyGetter; + } + function defineGetter(object, propKey, getter) { + ObjectDefineProperty(object, propKey, { + get: getter, + enumerable: false, + configurable: true + }); + return object; + } + function defineLazyGetter(object, propKey, getter, stats) { + return defineGetter(object, propKey, /* @__PURE__ */ createLazyGetter(propKey, getter, stats)); + } + function defineLazyGetters(object, getterDefObj, stats) { + if (getterDefObj !== null && typeof getterDefObj === "object") { + const keys = ReflectOwnKeys(getterDefObj); + for (let i = 0, { length } = keys; i < length; i += 1) { + const key = keys[i]; + defineLazyGetter(object, key, getterDefObj[key], stats); + } + } + return object; + } + // @__NO_SIDE_EFFECTS__ + function entryKeyComparator(a, b) { + const keyA = a[0]; + const keyB = b[0]; + const strKeyA = typeof keyA === "string" ? keyA : String(keyA); + const strKeyB = typeof keyB === "string" ? keyB : String(keyB); + return (0, import_sorts.localeCompare)(strKeyA, strKeyB); + } + // @__NO_SIDE_EFFECTS__ + function getKeys(obj) { + return /* @__PURE__ */ isObject(obj) ? ObjectKeys2(obj) : []; + } + // @__NO_SIDE_EFFECTS__ + function getOwn(obj, propKey) { + if (obj === null || obj === void 0) { + return void 0; + } + return ObjectHasOwn(obj, propKey) ? obj[propKey] : void 0; + } + // @__NO_SIDE_EFFECTS__ + function getOwnPropertyValues(obj) { + if (obj === null || obj === void 0) { + return []; + } + const keys = ObjectGetOwnPropertyNames(obj); + const { length } = keys; + const values = Array(length); + for (let i = 0; i < length; i += 1) { + values[i] = obj[keys[i]]; + } + return values; + } + // @__NO_SIDE_EFFECTS__ + function hasKeys(obj) { + if (obj === null || obj === void 0) { + return false; + } + for (const key in obj) { + if (ObjectHasOwn(obj, key)) { + return true; + } + } + return false; + } + // @__NO_SIDE_EFFECTS__ + function hasOwn(obj, propKey) { + if (obj === null || obj === void 0) { + return false; + } + return ObjectHasOwn(obj, propKey); + } + // @__NO_SIDE_EFFECTS__ + function isObject(value) { + return value !== null && typeof value === "object"; + } + // @__NO_SIDE_EFFECTS__ + function isObjectObject(value) { + if (value === null || typeof value !== "object" || (0, import_arrays.isArray)(value)) { + return false; + } + const proto = ObjectGetPrototypeOf(value); + return proto === null || proto === ObjectPrototype; + } + var objectAssign = Object.assign; + // @__NO_SIDE_EFFECTS__ + function merge(target, source) { + if (!/* @__PURE__ */ isObject(target) || !/* @__PURE__ */ isObject(source)) { + return target; + } + const queue = [[target, source]]; + let pos = 0; + let { length: queueLength } = queue; + while (pos < queueLength) { + if (pos === import_core.LOOP_SENTINEL) { + throw new Error("Detected infinite loop in object crawl of merge"); + } + const { 0: currentTarget, 1: currentSource } = queue[pos++]; + if (!currentSource || !currentTarget) { + continue; + } + const isSourceArray = (0, import_arrays.isArray)(currentSource); + const isTargetArray = (0, import_arrays.isArray)(currentTarget); + if (isSourceArray || isTargetArray) { + continue; + } + const keys = ReflectOwnKeys(currentSource); + for (let i = 0, { length } = keys; i < length; i += 1) { + const key = keys[i]; + const srcVal = currentSource[key]; + const targetVal = currentTarget[key]; + if ((0, import_arrays.isArray)(srcVal)) { + currentTarget[key] = srcVal; + } else if (/* @__PURE__ */ isObject(srcVal)) { + if (/* @__PURE__ */ isObject(targetVal) && !(0, import_arrays.isArray)(targetVal)) { + queue[queueLength++] = [targetVal, srcVal]; + } else { + currentTarget[key] = srcVal; + } + } else { + currentTarget[key] = srcVal; + } + } + } + return target; + } + // @__NO_SIDE_EFFECTS__ + function objectEntries(obj) { + if (obj === null || obj === void 0) { + return []; + } + const keys = ReflectOwnKeys(obj); + const { length } = keys; + const entries = Array(length); + const record = obj; + for (let i = 0; i < length; i += 1) { + const key = keys[i]; + entries[i] = [key, record[key]]; + } + return entries; + } + var objectFreeze = Object.freeze; + // @__NO_SIDE_EFFECTS__ + function toSortedObject(obj) { + return /* @__PURE__ */ toSortedObjectFromEntries(/* @__PURE__ */ objectEntries(obj)); + } + // @__NO_SIDE_EFFECTS__ + function toSortedObjectFromEntries(entries) { + const otherEntries = []; + const symbolEntries = []; + for (const entry of entries) { + if (typeof entry[0] === "symbol") { + symbolEntries.push(entry); + } else { + otherEntries.push(entry); + } + } + if (!otherEntries.length && !symbolEntries.length) { + return {}; + } + return ObjectFromEntries([ + // The String constructor is safe to use with symbols. + ...symbolEntries.sort(entryKeyComparator), + ...otherEntries.sort(entryKeyComparator) + ]); + } + } +}); + +// @socketsecurity/lib/dist/constants/platform.js +var require_platform = __commonJS({ + "@socketsecurity/lib/dist/constants/platform.js"(exports2, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var platform_exports = {}; + __export2(platform_exports, { + DARWIN: () => DARWIN, + S_IXGRP: () => S_IXGRP, + S_IXOTH: () => S_IXOTH, + S_IXUSR: () => S_IXUSR, + WIN32: () => WIN32, + getArch: () => getArch, + getPlatform: () => getPlatform + }); + module2.exports = __toCommonJS2(platform_exports); + var _os; + // @__NO_SIDE_EFFECTS__ + function getOs() { + if (_os === void 0) { + _os = require("os"); + } + return _os; + } + var _arch; + function getArch() { + if (_arch === void 0) { + _arch = (/* @__PURE__ */ getOs()).arch(); + } + return _arch; + } + var _platform; + function getPlatform() { + if (_platform === void 0) { + _platform = (/* @__PURE__ */ getOs()).platform(); + } + return _platform; + } + var DARWIN = getPlatform() === "darwin"; + var WIN32 = getPlatform() === "win32"; + var S_IXUSR = 64; + var S_IXGRP = 8; + var S_IXOTH = 1; + } +}); + +// @socketsecurity/lib/dist/paths/normalize.js +var require_normalize = __commonJS({ + "@socketsecurity/lib/dist/paths/normalize.js"(exports2, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var normalize_exports = {}; + __export2(normalize_exports, { + fromUnixPath: () => fromUnixPath, + isAbsolute: () => isAbsolute, + isNodeModules: () => isNodeModules, + isPath: () => isPath, + isRelative: () => isRelative, + isUnixPath: () => isUnixPath, + normalizePath: () => normalizePath, + pathLikeToString: () => pathLikeToString, + relativeResolve: () => relativeResolve, + splitPath: () => splitPath, + toUnixPath: () => toUnixPath, + trimLeadingDotSlash: () => trimLeadingDotSlash + }); + module2.exports = __toCommonJS2(normalize_exports); + var import_platform = require_platform(); + var import_strings = require_strings(); + var CHAR_BACKWARD_SLASH = 92; + var CHAR_COLON = 58; + var CHAR_FORWARD_SLASH = 47; + var CHAR_LOWERCASE_A = 97; + var CHAR_LOWERCASE_Z = 122; + var CHAR_UPPERCASE_A = 65; + var CHAR_UPPERCASE_Z = 90; + var msysDriveRegExp = /^\/([a-zA-Z])(\/|$)/; + var slashRegExp = /[/\\]/; + var nodeModulesPathRegExp = /(?:^|[/\\])node_modules(?:[/\\]|$)/; + // @__NO_SIDE_EFFECTS__ + function isPathSeparator(code) { + return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH; + } + // @__NO_SIDE_EFFECTS__ + function isWindowsDeviceRoot(code) { + return code >= CHAR_UPPERCASE_A && code <= CHAR_UPPERCASE_Z || code >= CHAR_LOWERCASE_A && code <= CHAR_LOWERCASE_Z; + } + var _buffer; + // @__NO_SIDE_EFFECTS__ + function getBuffer() { + if (_buffer === void 0) { + _buffer = require("buffer"); + } + return _buffer; + } + var _url; + // @__NO_SIDE_EFFECTS__ + function getUrl() { + if (_url === void 0) { + _url = require("url"); + } + return _url; + } + function msysDriveToNative(normalized) { + if (import_platform.WIN32) { + return normalized.replace( + msysDriveRegExp, + (_, letter, sep) => `${letter.toUpperCase()}:${sep || "/"}` + ); + } + return normalized; + } + // @__NO_SIDE_EFFECTS__ + function isNodeModules(pathLike) { + const filepath = /* @__PURE__ */ pathLikeToString(pathLike); + return nodeModulesPathRegExp.test(filepath); + } + // @__NO_SIDE_EFFECTS__ + function isAbsolute(pathLike) { + const filepath = /* @__PURE__ */ pathLikeToString(pathLike); + const { length } = filepath; + if (length === 0) { + return false; + } + const code = filepath.charCodeAt(0); + if (code === CHAR_FORWARD_SLASH) { + return true; + } + if (code === CHAR_BACKWARD_SLASH) { + return true; + } + if (import_platform.WIN32 && length > 2) { + if (/* @__PURE__ */ isWindowsDeviceRoot(code) && filepath.charCodeAt(1) === CHAR_COLON && /* @__PURE__ */ isPathSeparator(filepath.charCodeAt(2))) { + return true; + } + } + return false; + } + // @__NO_SIDE_EFFECTS__ + function isPath(pathLike) { + const filepath = /* @__PURE__ */ pathLikeToString(pathLike); + if (typeof filepath !== "string" || filepath.length === 0) { + return false; + } + if (/^[a-z][a-z0-9+.-]+:/i.test(filepath)) { + return false; + } + if (filepath === "." || filepath === "..") { + return true; + } + if (/* @__PURE__ */ isAbsolute(filepath)) { + return true; + } + if (filepath.includes("/") || filepath.includes("\\")) { + if (filepath.startsWith("@") && !filepath.startsWith("@/")) { + const parts = filepath.split("/"); + if (parts.length <= 2 && !parts[1]?.includes("\\")) { + return false; + } + } + return true; + } + return false; + } + // @__NO_SIDE_EFFECTS__ + function isRelative(pathLike) { + const filepath = /* @__PURE__ */ pathLikeToString(pathLike); + if (typeof filepath !== "string") { + return false; + } + if (filepath.length === 0) { + return true; + } + return !/* @__PURE__ */ isAbsolute(filepath); + } + // @__NO_SIDE_EFFECTS__ + function isUnixPath(pathLike) { + const filepath = /* @__PURE__ */ pathLikeToString(pathLike); + return typeof filepath === "string" && msysDriveRegExp.test(filepath); + } + // @__NO_SIDE_EFFECTS__ + function fromUnixPath(pathLike) { + const normalized = /* @__PURE__ */ normalizePath(pathLike); + if (import_platform.WIN32) { + return normalized.replace(/\//g, "\\"); + } + return normalized; + } + // @__NO_SIDE_EFFECTS__ + function normalizePath(pathLike) { + const filepath = /* @__PURE__ */ pathLikeToString(pathLike); + const { length } = filepath; + if (length === 0) { + return "."; + } + if (length < 2) { + return length === 1 && filepath.charCodeAt(0) === 92 ? "/" : filepath; + } + let code = 0; + let start = 0; + let prefix = ""; + if (length > 4 && filepath.charCodeAt(3) === 92) { + const code2 = filepath.charCodeAt(2); + if ((code2 === 63 || code2 === 46) && filepath.charCodeAt(0) === 92 && filepath.charCodeAt(1) === 92) { + start = 2; + prefix = "//"; + } + } + if (start === 0) { + if (length > 2 && (filepath.charCodeAt(0) === 92 && filepath.charCodeAt(1) === 92 && filepath.charCodeAt(2) !== 92 || filepath.charCodeAt(0) === 47 && filepath.charCodeAt(1) === 47 && filepath.charCodeAt(2) !== 47)) { + let firstSegmentEnd = -1; + let hasSecondSegment = false; + let i = 2; + while (i < length && (filepath.charCodeAt(i) === 47 || filepath.charCodeAt(i) === 92)) { + i++; + } + while (i < length) { + const char = filepath.charCodeAt(i); + if (char === 47 || char === 92) { + firstSegmentEnd = i; + break; + } + i++; + } + if (firstSegmentEnd > 2) { + i = firstSegmentEnd; + while (i < length && (filepath.charCodeAt(i) === 47 || filepath.charCodeAt(i) === 92)) { + i++; + } + if (i < length) { + hasSecondSegment = true; + } + } + if (firstSegmentEnd > 2 && hasSecondSegment) { + start = 2; + prefix = "//"; + } else { + code = filepath.charCodeAt(start); + while (code === 47 || code === 92) { + start += 1; + code = filepath.charCodeAt(start); + } + if (start) { + prefix = "/"; + } + } + } else { + code = filepath.charCodeAt(start); + while (code === 47 || code === 92) { + start += 1; + code = filepath.charCodeAt(start); + } + if (start) { + prefix = "/"; + } + } + } + let nextIndex = (0, import_strings.search)(filepath, slashRegExp, { fromIndex: start }); + if (nextIndex === -1) { + const segment = filepath.slice(start); + if (segment === "." || segment.length === 0) { + return prefix || "."; + } + if (segment === "..") { + return prefix ? prefix.slice(0, -1) || "/" : ".."; + } + return msysDriveToNative(prefix + segment); + } + let collapsed = ""; + let segmentCount = 0; + let leadingDotDots = 0; + while (nextIndex !== -1) { + const segment = filepath.slice(start, nextIndex); + if (segment.length > 0 && segment !== ".") { + if (segment === "..") { + if (segmentCount > 0) { + const lastSeparatorIndex = collapsed.lastIndexOf("/"); + if (lastSeparatorIndex === -1) { + collapsed = ""; + segmentCount = 0; + if (leadingDotDots > 0 && !prefix) { + collapsed = ".."; + leadingDotDots = 1; + } + } else { + const lastSegmentStart = lastSeparatorIndex + 1; + const lastSegmentValue = collapsed.slice(lastSegmentStart); + if (lastSegmentValue === "..") { + collapsed = `${collapsed}/${segment}`; + leadingDotDots += 1; + } else { + collapsed = collapsed.slice(0, lastSeparatorIndex); + segmentCount -= 1; + } + } + } else if (!prefix) { + collapsed = collapsed + (collapsed.length === 0 ? "" : "/") + segment; + leadingDotDots += 1; + } + } else { + collapsed = collapsed + (collapsed.length === 0 ? "" : "/") + segment; + segmentCount += 1; + } + } + start = nextIndex + 1; + code = filepath.charCodeAt(start); + while (code === 47 || code === 92) { + start += 1; + code = filepath.charCodeAt(start); + } + nextIndex = (0, import_strings.search)(filepath, slashRegExp, { fromIndex: start }); + } + const lastSegment = filepath.slice(start); + if (lastSegment.length > 0 && lastSegment !== ".") { + if (lastSegment === "..") { + if (segmentCount > 0) { + const lastSeparatorIndex = collapsed.lastIndexOf("/"); + if (lastSeparatorIndex === -1) { + collapsed = ""; + segmentCount = 0; + if (leadingDotDots > 0 && !prefix) { + collapsed = ".."; + leadingDotDots = 1; + } + } else { + const lastSegmentStart = lastSeparatorIndex + 1; + const lastSegmentValue = collapsed.slice(lastSegmentStart); + if (lastSegmentValue === "..") { + collapsed = `${collapsed}/${lastSegment}`; + leadingDotDots += 1; + } else { + collapsed = collapsed.slice(0, lastSeparatorIndex); + segmentCount -= 1; + } + } + } else if (!prefix) { + collapsed = collapsed + (collapsed.length === 0 ? "" : "/") + lastSegment; + leadingDotDots += 1; + } + } else { + collapsed = collapsed + (collapsed.length === 0 ? "" : "/") + lastSegment; + segmentCount += 1; + } + } + if (collapsed.length === 0) { + return prefix || "."; + } + return msysDriveToNative(prefix + collapsed); + } + // @__NO_SIDE_EFFECTS__ + function pathLikeToString(pathLike) { + if (pathLike === null || pathLike === void 0) { + return ""; + } + if (typeof pathLike === "string") { + return pathLike; + } + const { Buffer: Buffer2 } = /* @__PURE__ */ getBuffer(); + if (Buffer2.isBuffer(pathLike)) { + return pathLike.toString("utf8"); + } + const url = /* @__PURE__ */ getUrl(); + if (pathLike instanceof URL) { + try { + return url.fileURLToPath(pathLike); + } catch { + const pathname = pathLike.pathname; + const decodedPathname = decodeURIComponent(pathname); + if (import_platform.WIN32 && decodedPathname.startsWith("/")) { + const letter = decodedPathname.charCodeAt(1) | 32; + const hasValidDriveLetter = decodedPathname.length >= 3 && letter >= 97 && // 'a' to 'z' + letter <= 122 && decodedPathname.charAt(2) === ":"; + if (!hasValidDriveLetter) { + return decodedPathname; + } + } + return decodedPathname; + } + } + return String(pathLike); + } + // @__NO_SIDE_EFFECTS__ + function splitPath(pathLike) { + const filepath = /* @__PURE__ */ pathLikeToString(pathLike); + if (filepath === "") { + return []; + } + return filepath.split(slashRegExp); + } + // @__NO_SIDE_EFFECTS__ + function trimLeadingDotSlash(pathLike) { + const filepath = /* @__PURE__ */ pathLikeToString(pathLike); + if (filepath.startsWith("./") || filepath.startsWith(".\\")) { + return filepath.slice(2); + } + return filepath; + } + // @__NO_SIDE_EFFECTS__ + function resolve(...segments) { + let resolvedPath = ""; + let resolvedAbsolute = false; + for (let i = segments.length - 1; i >= 0 && !resolvedAbsolute; i -= 1) { + const segment = segments[i]; + if (typeof segment !== "string" || segment.length === 0) { + continue; + } + resolvedPath = segment + (resolvedPath.length === 0 ? "" : `/${resolvedPath}`); + resolvedAbsolute = /* @__PURE__ */ isAbsolute(segment); + } + if (!resolvedAbsolute) { + const cwd = /* @__PURE__ */ require("process").cwd(); + resolvedPath = cwd + (resolvedPath.length === 0 ? "" : `/${resolvedPath}`); + } + return /* @__PURE__ */ normalizePath(resolvedPath); + } + // @__NO_SIDE_EFFECTS__ + function relative(from, to) { + if (from === to) { + return ""; + } + const actualFrom = /* @__PURE__ */ resolve(from); + const actualTo = /* @__PURE__ */ resolve(to); + if (actualFrom === actualTo) { + return ""; + } + if (import_platform.WIN32) { + const fromLower = actualFrom.toLowerCase(); + const toLower = actualTo.toLowerCase(); + if (fromLower === toLower) { + return ""; + } + } + const fromStart = 1; + const fromEnd = actualFrom.length; + const fromLen = fromEnd - fromStart; + const toStart = 1; + const toEnd = actualTo.length; + const toLen = toEnd - toStart; + const length = fromLen < toLen ? fromLen : toLen; + let lastCommonSep = -1; + let i = 0; + for (; i < length; i += 1) { + let fromCode = actualFrom.charCodeAt(fromStart + i); + let toCode = actualTo.charCodeAt(toStart + i); + if (import_platform.WIN32) { + if (fromCode >= CHAR_UPPERCASE_A && fromCode <= CHAR_UPPERCASE_Z) { + fromCode += 32; + } + if (toCode >= CHAR_UPPERCASE_A && toCode <= CHAR_UPPERCASE_Z) { + toCode += 32; + } + } + if (fromCode !== toCode) { + break; + } + if (/* @__PURE__ */ isPathSeparator(actualFrom.charCodeAt(fromStart + i))) { + lastCommonSep = i; + } + } + if (i === length) { + if (toLen > length) { + const toCode = actualTo.charCodeAt(toStart + i); + if (/* @__PURE__ */ isPathSeparator(toCode)) { + return actualTo.slice(toStart + i + 1); + } + if (i === 0) { + return actualTo.slice(toStart + i); + } + } else if (fromLen > length) { + const fromCode = actualFrom.charCodeAt(fromStart + i); + if (/* @__PURE__ */ isPathSeparator(fromCode)) { + lastCommonSep = i; + } else if (i === 0) { + lastCommonSep = 0; + } + } + } + let out = ""; + for (i = fromStart + lastCommonSep + 1; i <= fromEnd; i += 1) { + const code = actualFrom.charCodeAt(i); + if (i === fromEnd || /* @__PURE__ */ isPathSeparator(code)) { + out += out.length === 0 ? ".." : "/.."; + } + } + return out + actualTo.slice(toStart + lastCommonSep); + } + // @__NO_SIDE_EFFECTS__ + function relativeResolve(from, to) { + const rel = /* @__PURE__ */ relative(from, to); + if (rel === "") { + return ""; + } + return /* @__PURE__ */ normalizePath(rel); + } + // @__NO_SIDE_EFFECTS__ + function toUnixPath(pathLike) { + const normalized = /* @__PURE__ */ normalizePath(pathLike); + if (import_platform.WIN32) { + return normalized.replace( + /^([A-Z]):/i, + (_, letter) => `/${letter.toLowerCase()}` + ); + } + return normalized; + } + } +}); + +// @socketsecurity/lib/dist/paths/rewire.js +var require_rewire = __commonJS({ + "@socketsecurity/lib/dist/paths/rewire.js"(exports2, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var rewire_exports = {}; + __export2(rewire_exports, { + clearPath: () => clearPath, + getPathValue: () => getPathValue, + hasOverride: () => hasOverride, + invalidateCaches: () => invalidateCaches, + registerCacheInvalidation: () => registerCacheInvalidation, + resetPaths: () => resetPaths, + setPath: () => setPath + }); + module2.exports = __toCommonJS2(rewire_exports); + var stateSymbol = Symbol.for("@socketsecurity/lib/paths/rewire/state"); + if (!globalThis[stateSymbol]) { + globalThis[stateSymbol] = { + testOverrides: /* @__PURE__ */ new Map(), + valueCache: /* @__PURE__ */ new Map(), + cacheInvalidationCallbacks: [] + }; + } + var sharedState = globalThis[stateSymbol]; + var testOverrides = sharedState.testOverrides; + var valueCache = sharedState.valueCache; + var cacheInvalidationCallbacks = sharedState.cacheInvalidationCallbacks; + function clearPath(key) { + testOverrides.delete(key); + invalidateCaches(); + } + function getPathValue(key, originalFn) { + if (testOverrides.has(key)) { + return testOverrides.get(key); + } + if (valueCache.has(key)) { + return valueCache.get(key); + } + const value = originalFn(); + valueCache.set(key, value); + return value; + } + function hasOverride(key) { + return testOverrides.has(key); + } + function invalidateCaches() { + valueCache.clear(); + for (const callback of cacheInvalidationCallbacks) { + try { + callback(); + } catch { + } + } + } + function registerCacheInvalidation(callback) { + cacheInvalidationCallbacks.push(callback); + } + function resetPaths() { + testOverrides.clear(); + invalidateCaches(); + } + function setPath(key, value) { + testOverrides.set(key, value); + invalidateCaches(); + } + } +}); + +// @socketsecurity/lib/dist/constants/github.js +var require_github = __commonJS({ + "@socketsecurity/lib/dist/constants/github.js"(exports2, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var github_exports = {}; + __export2(github_exports, { + CACHE_GITHUB_DIR: () => CACHE_GITHUB_DIR, + GITHUB_API_BASE_URL: () => GITHUB_API_BASE_URL + }); + module2.exports = __toCommonJS2(github_exports); + var GITHUB_API_BASE_URL = "https://api.github.com"; + var CACHE_GITHUB_DIR = "github"; + } +}); + +// @socketsecurity/lib/dist/env/helpers.js +var require_helpers = __commonJS({ + "@socketsecurity/lib/dist/env/helpers.js"(exports2, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var helpers_exports = {}; + __export2(helpers_exports, { + envAsBoolean: () => envAsBoolean, + envAsNumber: () => envAsNumber, + envAsString: () => envAsString + }); + module2.exports = __toCommonJS2(helpers_exports); + // @__NO_SIDE_EFFECTS__ + function envAsBoolean(value) { + if (!value) { + return false; + } + const lower = value.toLowerCase(); + return lower === "true" || lower === "1" || lower === "yes"; + } + // @__NO_SIDE_EFFECTS__ + function envAsNumber(value) { + if (!value) { + return 0; + } + const num = Number(value); + return Number.isNaN(num) ? 0 : num; + } + // @__NO_SIDE_EFFECTS__ + function envAsString(value) { + return value || ""; + } + } +}); + +// @socketsecurity/lib/dist/env/rewire.js +var require_rewire2 = __commonJS({ + "@socketsecurity/lib/dist/env/rewire.js"(exports2, module2) { + "use strict"; + var __create2 = Object.create; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __getProtoOf2 = Object.getPrototypeOf; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target, + mod + )); + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var rewire_exports = {}; + __export2(rewire_exports, { + clearEnv: () => clearEnv, + getEnvValue: () => getEnvValue, + hasOverride: () => hasOverride, + isInEnv: () => isInEnv, + resetEnv: () => resetEnv, + setEnv: () => setEnv, + withEnv: () => withEnv, + withEnvSync: () => withEnvSync + }); + module2.exports = __toCommonJS2(rewire_exports); + var import_node_process = __toESM2(require("node:process")); + var import_objects = require_objects(); + var import_helpers = require_helpers(); + var _async_hooks; + // @__NO_SIDE_EFFECTS__ + function getAsyncHooks() { + if (_async_hooks === void 0) { + _async_hooks = require("async_hooks"); + } + return _async_hooks; + } + var { AsyncLocalStorage } = /* @__PURE__ */ getAsyncHooks(); + var isolatedOverridesStorage = new AsyncLocalStorage(); + var sharedOverridesSymbol = Symbol.for( + "@socketsecurity/lib/env/rewire/test-overrides" + ); + var isVitestEnv = (0, import_helpers.envAsBoolean)(import_node_process.default.env.VITEST); + if (isVitestEnv && !globalThis[sharedOverridesSymbol]) { + globalThis[sharedOverridesSymbol] = /* @__PURE__ */ new Map(); + } + var sharedOverrides = globalThis[sharedOverridesSymbol]; + function clearEnv(key) { + sharedOverrides?.delete(key); + } + function getEnvValue(key) { + const isolatedOverrides = isolatedOverridesStorage.getStore(); + if (isolatedOverrides?.has(key)) { + return isolatedOverrides.get(key); + } + if (sharedOverrides?.has(key)) { + return sharedOverrides.get(key); + } + return import_node_process.default.env[key]; + } + function hasOverride(key) { + const isolatedOverrides = isolatedOverridesStorage.getStore(); + return !!(isolatedOverrides?.has(key) || sharedOverrides?.has(key)); + } + function isInEnv(key) { + const isolatedOverrides = isolatedOverridesStorage.getStore(); + if (isolatedOverrides?.has(key)) { + return true; + } + if (sharedOverrides?.has(key)) { + return true; + } + return (0, import_objects.hasOwn)(import_node_process.default.env, key); + } + function resetEnv() { + sharedOverrides?.clear(); + } + function setEnv(key, value) { + sharedOverrides?.set(key, value); + } + async function withEnv(overrides, fn) { + const map = new Map(Object.entries(overrides)); + return await isolatedOverridesStorage.run(map, fn); + } + function withEnvSync(overrides, fn) { + const map = new Map(Object.entries(overrides)); + return isolatedOverridesStorage.run(map, fn); + } + } +}); + +// @socketsecurity/lib/dist/env/home.js +var require_home = __commonJS({ + "@socketsecurity/lib/dist/env/home.js"(exports2, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var home_exports = {}; + __export2(home_exports, { + getHome: () => getHome + }); + module2.exports = __toCommonJS2(home_exports); + var import_rewire = require_rewire2(); + // @__NO_SIDE_EFFECTS__ + function getHome() { + return (0, import_rewire.getEnvValue)("HOME"); + } + } +}); + +// @socketsecurity/lib/dist/env/socket.js +var require_socket2 = __commonJS({ + "@socketsecurity/lib/dist/env/socket.js"(exports2, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var socket_exports = {}; + __export2(socket_exports, { + getSocketAcceptRisks: () => getSocketAcceptRisks, + getSocketApiBaseUrl: () => getSocketApiBaseUrl, + getSocketApiProxy: () => getSocketApiProxy, + getSocketApiTimeout: () => getSocketApiTimeout, + getSocketApiToken: () => getSocketApiToken, + getSocketCacacheDir: () => getSocketCacacheDir, + getSocketConfig: () => getSocketConfig, + getSocketDebug: () => getSocketDebug, + getSocketDlxDirEnv: () => getSocketDlxDirEnv, + getSocketHome: () => getSocketHome, + getSocketNoApiToken: () => getSocketNoApiToken, + getSocketNpmRegistry: () => getSocketNpmRegistry, + getSocketOrgSlug: () => getSocketOrgSlug, + getSocketRegistryUrl: () => getSocketRegistryUrl, + getSocketViewAllRisks: () => getSocketViewAllRisks + }); + module2.exports = __toCommonJS2(socket_exports); + var import_helpers = require_helpers(); + var import_rewire = require_rewire2(); + // @__NO_SIDE_EFFECTS__ + function getSocketAcceptRisks() { + return (0, import_helpers.envAsBoolean)((0, import_rewire.getEnvValue)("SOCKET_ACCEPT_RISKS")); + } + // @__NO_SIDE_EFFECTS__ + function getSocketApiBaseUrl() { + return (0, import_rewire.getEnvValue)("SOCKET_API_BASE_URL"); + } + // @__NO_SIDE_EFFECTS__ + function getSocketApiProxy() { + return (0, import_rewire.getEnvValue)("SOCKET_API_PROXY"); + } + // @__NO_SIDE_EFFECTS__ + function getSocketApiTimeout() { + return (0, import_helpers.envAsNumber)((0, import_rewire.getEnvValue)("SOCKET_API_TIMEOUT")); + } + // @__NO_SIDE_EFFECTS__ + function getSocketApiToken() { + return (0, import_rewire.getEnvValue)("SOCKET_API_TOKEN"); + } + // @__NO_SIDE_EFFECTS__ + function getSocketCacacheDir() { + return (0, import_rewire.getEnvValue)("SOCKET_CACACHE_DIR"); + } + // @__NO_SIDE_EFFECTS__ + function getSocketConfig() { + return (0, import_rewire.getEnvValue)("SOCKET_CONFIG"); + } + // @__NO_SIDE_EFFECTS__ + function getSocketDebug() { + return (0, import_rewire.getEnvValue)("SOCKET_DEBUG"); + } + // @__NO_SIDE_EFFECTS__ + function getSocketDlxDirEnv() { + return (0, import_rewire.getEnvValue)("SOCKET_DLX_DIR"); + } + // @__NO_SIDE_EFFECTS__ + function getSocketHome() { + return (0, import_rewire.getEnvValue)("SOCKET_HOME"); + } + // @__NO_SIDE_EFFECTS__ + function getSocketNoApiToken() { + return (0, import_helpers.envAsBoolean)((0, import_rewire.getEnvValue)("SOCKET_NO_API_TOKEN")); + } + // @__NO_SIDE_EFFECTS__ + function getSocketNpmRegistry() { + return (0, import_rewire.getEnvValue)("SOCKET_NPM_REGISTRY"); + } + // @__NO_SIDE_EFFECTS__ + function getSocketOrgSlug() { + return (0, import_rewire.getEnvValue)("SOCKET_ORG_SLUG"); + } + // @__NO_SIDE_EFFECTS__ + function getSocketRegistryUrl() { + return (0, import_rewire.getEnvValue)("SOCKET_REGISTRY_URL"); + } + // @__NO_SIDE_EFFECTS__ + function getSocketViewAllRisks() { + return (0, import_helpers.envAsBoolean)((0, import_rewire.getEnvValue)("SOCKET_VIEW_ALL_RISKS")); + } + } +}); + +// @socketsecurity/lib/dist/env/windows.js +var require_windows = __commonJS({ + "@socketsecurity/lib/dist/env/windows.js"(exports2, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var windows_exports = {}; + __export2(windows_exports, { + getAppdata: () => getAppdata, + getComspec: () => getComspec, + getLocalappdata: () => getLocalappdata, + getUserprofile: () => getUserprofile + }); + module2.exports = __toCommonJS2(windows_exports); + var import_rewire = require_rewire2(); + // @__NO_SIDE_EFFECTS__ + function getAppdata() { + return (0, import_rewire.getEnvValue)("APPDATA"); + } + // @__NO_SIDE_EFFECTS__ + function getComspec() { + return (0, import_rewire.getEnvValue)("COMSPEC"); + } + // @__NO_SIDE_EFFECTS__ + function getLocalappdata() { + return (0, import_rewire.getEnvValue)("LOCALAPPDATA"); + } + // @__NO_SIDE_EFFECTS__ + function getUserprofile() { + return (0, import_rewire.getEnvValue)("USERPROFILE"); + } + } +}); + +// @socketsecurity/lib/dist/paths/dirnames.js +var require_dirnames = __commonJS({ + "@socketsecurity/lib/dist/paths/dirnames.js"(exports2, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var dirnames_exports = {}; + __export2(dirnames_exports, { + CACHE_DIR: () => CACHE_DIR, + CACHE_TTL_DIR: () => CACHE_TTL_DIR, + DOT_GITHUB: () => DOT_GITHUB, + DOT_GIT_DIR: () => DOT_GIT_DIR, + DOT_SOCKET_DIR: () => DOT_SOCKET_DIR, + NODE_MODULES: () => NODE_MODULES, + NODE_MODULES_GLOB_RECURSIVE: () => NODE_MODULES_GLOB_RECURSIVE, + SLASH_NODE_MODULES_SLASH: () => SLASH_NODE_MODULES_SLASH + }); + module2.exports = __toCommonJS2(dirnames_exports); + var NODE_MODULES = "node_modules"; + var DOT_GIT_DIR = ".git"; + var DOT_GITHUB = ".github"; + var DOT_SOCKET_DIR = ".socket"; + var CACHE_DIR = "cache"; + var CACHE_TTL_DIR = "ttl"; + var NODE_MODULES_GLOB_RECURSIVE = "**/node_modules"; + var SLASH_NODE_MODULES_SLASH = "/node_modules/"; + } +}); + +// @socketsecurity/lib/dist/paths/socket.js +var require_socket3 = __commonJS({ + "@socketsecurity/lib/dist/paths/socket.js"(exports2, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var socket_exports = {}; + __export2(socket_exports, { + getOsHomeDir: () => getOsHomeDir, + getOsTmpDir: () => getOsTmpDir, + getSocketAppCacheDir: () => getSocketAppCacheDir, + getSocketAppCacheTtlDir: () => getSocketAppCacheTtlDir, + getSocketAppDir: () => getSocketAppDir, + getSocketCacacheDir: () => getSocketCacacheDir, + getSocketCliDir: () => getSocketCliDir, + getSocketDlxDir: () => getSocketDlxDir, + getSocketHomePath: () => getSocketHomePath, + getSocketRegistryDir: () => getSocketRegistryDir, + getSocketRegistryGithubCacheDir: () => getSocketRegistryGithubCacheDir, + getSocketUserDir: () => getSocketUserDir, + getUserHomeDir: () => getUserHomeDir + }); + module2.exports = __toCommonJS2(socket_exports); + var import_github = require_github(); + var import_socket = require_socket(); + var import_home = require_home(); + var import_socket2 = require_socket2(); + var import_windows = require_windows(); + var import_dirnames = require_dirnames(); + var import_normalize = require_normalize(); + var import_rewire = require_rewire(); + var _os; + // @__NO_SIDE_EFFECTS__ + function getOs() { + if (_os === void 0) { + _os = require("os"); + } + return _os; + } + var _path; + // @__NO_SIDE_EFFECTS__ + function getPath() { + if (_path === void 0) { + _path = require("path"); + } + return _path; + } + function getOsHomeDir() { + return (0, import_rewire.getPathValue)("homedir", () => (/* @__PURE__ */ getOs()).homedir()); + } + function getOsTmpDir() { + return (0, import_rewire.getPathValue)("tmpdir", () => (/* @__PURE__ */ getOs()).tmpdir()); + } + function getSocketHomePath() { + return getSocketUserDir(); + } + function getSocketUserDir() { + return (0, import_rewire.getPathValue)("socket-user-dir", () => { + const socketHome = (0, import_socket2.getSocketHome)(); + if (socketHome) { + return (0, import_normalize.normalizePath)(socketHome); + } + return (0, import_normalize.normalizePath)((/* @__PURE__ */ getPath()).join(getUserHomeDir(), import_dirnames.DOT_SOCKET_DIR)); + }); + } + function getSocketAppDir(appName) { + return (0, import_normalize.normalizePath)( + (/* @__PURE__ */ getPath()).join(getSocketUserDir(), `${import_socket.SOCKET_APP_PREFIX}${appName}`) + ); + } + function getSocketCacacheDir() { + return (0, import_rewire.getPathValue)("socket-cacache-dir", () => { + if ((0, import_socket2.getSocketCacacheDir)()) { + return (0, import_normalize.normalizePath)((0, import_socket2.getSocketCacacheDir)()); + } + return (0, import_normalize.normalizePath)( + (/* @__PURE__ */ getPath()).join(getSocketUserDir(), `${import_socket.SOCKET_APP_PREFIX}cacache`) + ); + }); + } + function getSocketDlxDir() { + return (0, import_rewire.getPathValue)("socket-dlx-dir", () => { + if ((0, import_socket2.getSocketDlxDirEnv)()) { + return (0, import_normalize.normalizePath)((0, import_socket2.getSocketDlxDirEnv)()); + } + return (0, import_normalize.normalizePath)( + (/* @__PURE__ */ getPath()).join( + getSocketUserDir(), + `${import_socket.SOCKET_APP_PREFIX}${import_socket.SOCKET_DLX_APP_NAME}` + ) + ); + }); + } + function getSocketAppCacheDir(appName) { + return (0, import_normalize.normalizePath)((/* @__PURE__ */ getPath()).join(getSocketAppDir(appName), import_dirnames.CACHE_DIR)); + } + function getSocketAppCacheTtlDir(appName) { + return (0, import_normalize.normalizePath)( + (/* @__PURE__ */ getPath()).join(getSocketAppCacheDir(appName), import_dirnames.CACHE_TTL_DIR) + ); + } + function getSocketCliDir() { + return getSocketAppDir(import_socket.SOCKET_CLI_APP_NAME); + } + function getSocketRegistryDir() { + return getSocketAppDir(import_socket.SOCKET_REGISTRY_APP_NAME); + } + function getSocketRegistryGithubCacheDir() { + return (0, import_normalize.normalizePath)( + (/* @__PURE__ */ getPath()).join( + getSocketAppCacheTtlDir(import_socket.SOCKET_REGISTRY_APP_NAME), + import_github.CACHE_GITHUB_DIR + ) + ); + } + function getUserHomeDir() { + const home = (0, import_home.getHome)(); + if (home) { + return home; + } + const userProfile = (0, import_windows.getUserprofile)(); + if (userProfile) { + return userProfile; + } + try { + const osHome = getOsHomeDir(); + if (osHome) { + return osHome; + } + } catch { + } + return getOsTmpDir(); + } + } +}); + +// @socketsecurity/lib/dist/external/pico-pack.js +var require_pico_pack = __commonJS({ + "@socketsecurity/lib/dist/external/pico-pack.js"(exports2, module2) { + "use strict"; + var __create2 = Object.create; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __getProtoOf2 = Object.getPrototypeOf; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __name = (target, value) => __defProp2(target, "name", { value, configurable: true }); + var __esm = (fn, res) => function __init() { + return fn && (res = (0, fn[__getOwnPropNames2(fn)[0]])(fn = 0)), res; + }; + var __commonJS2 = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; + }; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target, + mod + )); + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var require_constants = __commonJS2({ + "picomatch/lib/constants.js"(exports22, module22) { + "use strict"; + var WIN_SLASH = "\\\\/"; + var WIN_NO_SLASH = `[^${WIN_SLASH}]`; + var DEFAULT_MAX_EXTGLOB_RECURSION = 0; + var DOT_LITERAL = "\\."; + var PLUS_LITERAL = "\\+"; + var QMARK_LITERAL = "\\?"; + var SLASH_LITERAL = "\\/"; + var ONE_CHAR = "(?=.)"; + var QMARK = "[^/]"; + var END_ANCHOR = `(?:${SLASH_LITERAL}|$)`; + var START_ANCHOR = `(?:^|${SLASH_LITERAL})`; + var DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`; + var NO_DOT = `(?!${DOT_LITERAL})`; + var NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`; + var NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`; + var NO_DOTS_SLASH = `(?!${DOTS_SLASH})`; + var QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`; + var STAR = `${QMARK}*?`; + var SEP = "/"; + var POSIX_CHARS = { + DOT_LITERAL, + PLUS_LITERAL, + QMARK_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + QMARK, + END_ANCHOR, + DOTS_SLASH, + NO_DOT, + NO_DOTS, + NO_DOT_SLASH, + NO_DOTS_SLASH, + QMARK_NO_DOT, + STAR, + START_ANCHOR, + SEP + }; + var WINDOWS_CHARS = { + ...POSIX_CHARS, + SLASH_LITERAL: `[${WIN_SLASH}]`, + QMARK: WIN_NO_SLASH, + STAR: `${WIN_NO_SLASH}*?`, + DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`, + NO_DOT: `(?!${DOT_LITERAL})`, + NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`, + NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`, + NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`, + QMARK_NO_DOT: `[^.${WIN_SLASH}]`, + START_ANCHOR: `(?:^|[${WIN_SLASH}])`, + END_ANCHOR: `(?:[${WIN_SLASH}]|$)`, + SEP: "\\" + }; + var POSIX_REGEX_SOURCE = { + __proto__: null, + alnum: "a-zA-Z0-9", + alpha: "a-zA-Z", + ascii: "\\x00-\\x7F", + blank: " \\t", + cntrl: "\\x00-\\x1F\\x7F", + digit: "0-9", + graph: "\\x21-\\x7E", + lower: "a-z", + print: "\\x20-\\x7E ", + punct: "\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~", + space: " \\t\\r\\n\\v\\f", + upper: "A-Z", + word: "A-Za-z0-9_", + xdigit: "A-Fa-f0-9" + }; + module22.exports = { + DEFAULT_MAX_EXTGLOB_RECURSION, + MAX_LENGTH: 1024 * 64, + POSIX_REGEX_SOURCE, + // regular expressions + REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g, + REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/, + REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/, + REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g, + REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g, + REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g, + // Replace globs with equivalent patterns to reduce parsing time. + REPLACEMENTS: { + __proto__: null, + "***": "*", + "**/**": "**", + "**/**/**": "**" + }, + // Digits + CHAR_0: 48, + /* 0 */ + CHAR_9: 57, + /* 9 */ + // Alphabet chars. + CHAR_UPPERCASE_A: 65, + /* A */ + CHAR_LOWERCASE_A: 97, + /* a */ + CHAR_UPPERCASE_Z: 90, + /* Z */ + CHAR_LOWERCASE_Z: 122, + /* z */ + CHAR_LEFT_PARENTHESES: 40, + /* ( */ + CHAR_RIGHT_PARENTHESES: 41, + /* ) */ + CHAR_ASTERISK: 42, + /* * */ + // Non-alphabetic chars. + CHAR_AMPERSAND: 38, + /* & */ + CHAR_AT: 64, + /* @ */ + CHAR_BACKWARD_SLASH: 92, + /* \ */ + CHAR_CARRIAGE_RETURN: 13, + /* \r */ + CHAR_CIRCUMFLEX_ACCENT: 94, + /* ^ */ + CHAR_COLON: 58, + /* : */ + CHAR_COMMA: 44, + /* , */ + CHAR_DOT: 46, + /* . */ + CHAR_DOUBLE_QUOTE: 34, + /* " */ + CHAR_EQUAL: 61, + /* = */ + CHAR_EXCLAMATION_MARK: 33, + /* ! */ + CHAR_FORM_FEED: 12, + /* \f */ + CHAR_FORWARD_SLASH: 47, + /* / */ + CHAR_GRAVE_ACCENT: 96, + /* ` */ + CHAR_HASH: 35, + /* # */ + CHAR_HYPHEN_MINUS: 45, + /* - */ + CHAR_LEFT_ANGLE_BRACKET: 60, + /* < */ + CHAR_LEFT_CURLY_BRACE: 123, + /* { */ + CHAR_LEFT_SQUARE_BRACKET: 91, + /* [ */ + CHAR_LINE_FEED: 10, + /* \n */ + CHAR_NO_BREAK_SPACE: 160, + /* \u00A0 */ + CHAR_PERCENT: 37, + /* % */ + CHAR_PLUS: 43, + /* + */ + CHAR_QUESTION_MARK: 63, + /* ? */ + CHAR_RIGHT_ANGLE_BRACKET: 62, + /* > */ + CHAR_RIGHT_CURLY_BRACE: 125, + /* } */ + CHAR_RIGHT_SQUARE_BRACKET: 93, + /* ] */ + CHAR_SEMICOLON: 59, + /* ; */ + CHAR_SINGLE_QUOTE: 39, + /* ' */ + CHAR_SPACE: 32, + /* */ + CHAR_TAB: 9, + /* \t */ + CHAR_UNDERSCORE: 95, + /* _ */ + CHAR_VERTICAL_LINE: 124, + /* | */ + CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, + /* \uFEFF */ + /** + * Create EXTGLOB_CHARS + */ + extglobChars(chars) { + return { + "!": { type: "negate", open: "(?:(?!(?:", close: `))${chars.STAR})` }, + "?": { type: "qmark", open: "(?:", close: ")?" }, + "+": { type: "plus", open: "(?:", close: ")+" }, + "*": { type: "star", open: "(?:", close: ")*" }, + "@": { type: "at", open: "(?:", close: ")" } + }; + }, + /** + * Create GLOB_CHARS + */ + globChars(win32) { + return win32 === true ? WINDOWS_CHARS : POSIX_CHARS; + } + }; + } + }); + var require_utils = __commonJS2({ + "picomatch/lib/utils.js"(exports22) { + "use strict"; + var { + REGEX_BACKSLASH, + REGEX_REMOVE_BACKSLASH, + REGEX_SPECIAL_CHARS, + REGEX_SPECIAL_CHARS_GLOBAL + } = require_constants(); + exports22.isObject = (val) => val !== null && typeof val === "object" && !Array.isArray(val); + exports22.hasRegexChars = (str) => REGEX_SPECIAL_CHARS.test(str); + exports22.isRegexChar = (str) => str.length === 1 && exports22.hasRegexChars(str); + exports22.escapeRegex = (str) => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, "\\$1"); + exports22.toPosixSlashes = (str) => str.replace(REGEX_BACKSLASH, "/"); + exports22.isWindows = () => { + if (false) { + const platform = (void 0).platform.toLowerCase(); + return platform === "win32" || platform === "windows"; + } + if (typeof process !== "undefined" && process.platform) { + return process.platform === "win32"; + } + return false; + }; + exports22.removeBackslashes = (str) => { + return str.replace(REGEX_REMOVE_BACKSLASH, (match) => { + return match === "\\" ? "" : match; + }); + }; + exports22.escapeLast = (input, char, lastIdx) => { + const idx = input.lastIndexOf(char, lastIdx); + if (idx === -1) return input; + if (input[idx - 1] === "\\") return exports22.escapeLast(input, char, idx - 1); + return `${input.slice(0, idx)}\\${input.slice(idx)}`; + }; + exports22.removePrefix = (input, state = {}) => { + let output = input; + if (output.startsWith("./")) { + output = output.slice(2); + state.prefix = "./"; + } + return output; + }; + exports22.wrapOutput = (input, state = {}, options = {}) => { + const prepend = options.contains ? "" : "^"; + const append = options.contains ? "" : "$"; + let output = `${prepend}(?:${input})${append}`; + if (state.negated === true) { + output = `(?:^(?!${output}).*$)`; + } + return output; + }; + exports22.basename = (path6, { windows } = {}) => { + const segs = path6.split(windows ? /[\\/]/ : "/"); + const last = segs[segs.length - 1]; + if (last === "") { + return segs[segs.length - 2]; + } + return last; + }; + } + }); + var require_scan = __commonJS2({ + "picomatch/lib/scan.js"(exports22, module22) { + "use strict"; + var utils = require_utils(); + var { + CHAR_ASTERISK, + /* * */ + CHAR_AT, + /* @ */ + CHAR_BACKWARD_SLASH, + /* \ */ + CHAR_COMMA, + /* , */ + CHAR_DOT, + /* . */ + CHAR_EXCLAMATION_MARK, + /* ! */ + CHAR_FORWARD_SLASH, + /* / */ + CHAR_LEFT_CURLY_BRACE, + /* { */ + CHAR_LEFT_PARENTHESES, + /* ( */ + CHAR_LEFT_SQUARE_BRACKET, + /* [ */ + CHAR_PLUS, + /* + */ + CHAR_QUESTION_MARK, + /* ? */ + CHAR_RIGHT_CURLY_BRACE, + /* } */ + CHAR_RIGHT_PARENTHESES, + /* ) */ + CHAR_RIGHT_SQUARE_BRACKET + /* ] */ + } = require_constants(); + var isPathSeparator = /* @__PURE__ */ __name((code) => { + return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH; + }, "isPathSeparator"); + var depth = /* @__PURE__ */ __name((token) => { + if (token.isPrefix !== true) { + token.depth = token.isGlobstar ? Infinity : 1; + } + }, "depth"); + var scan = /* @__PURE__ */ __name((input, options) => { + const opts = options || {}; + const length = input.length - 1; + const scanToEnd = opts.parts === true || opts.scanToEnd === true; + const slashes = []; + const tokens = []; + const parts = []; + let str = input; + let index = -1; + let start = 0; + let lastIndex = 0; + let isBrace = false; + let isBracket = false; + let isGlob2 = false; + let isExtglob = false; + let isGlobstar = false; + let braceEscaped = false; + let backslashes = false; + let negated = false; + let negatedExtglob = false; + let finished2 = false; + let braces = 0; + let prev; + let code; + let token = { value: "", depth: 0, isGlob: false }; + const eos = /* @__PURE__ */ __name(() => index >= length, "eos"); + const peek = /* @__PURE__ */ __name(() => str.charCodeAt(index + 1), "peek"); + const advance = /* @__PURE__ */ __name(() => { + prev = code; + return str.charCodeAt(++index); + }, "advance"); + while (index < length) { + code = advance(); + let next; + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + code = advance(); + if (code === CHAR_LEFT_CURLY_BRACE) { + braceEscaped = true; + } + continue; + } + if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) { + braces++; + while (eos() !== true && (code = advance())) { + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + advance(); + continue; + } + if (code === CHAR_LEFT_CURLY_BRACE) { + braces++; + continue; + } + if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) { + isBrace = token.isBrace = true; + isGlob2 = token.isGlob = true; + finished2 = true; + if (scanToEnd === true) { + continue; + } + break; + } + if (braceEscaped !== true && code === CHAR_COMMA) { + isBrace = token.isBrace = true; + isGlob2 = token.isGlob = true; + finished2 = true; + if (scanToEnd === true) { + continue; + } + break; + } + if (code === CHAR_RIGHT_CURLY_BRACE) { + braces--; + if (braces === 0) { + braceEscaped = false; + isBrace = token.isBrace = true; + finished2 = true; + break; + } + } + } + if (scanToEnd === true) { + continue; + } + break; + } + if (code === CHAR_FORWARD_SLASH) { + slashes.push(index); + tokens.push(token); + token = { value: "", depth: 0, isGlob: false }; + if (finished2 === true) continue; + if (prev === CHAR_DOT && index === start + 1) { + start += 2; + continue; + } + lastIndex = index + 1; + continue; + } + if (opts.noext !== true) { + const isExtglobChar = code === CHAR_PLUS || code === CHAR_AT || code === CHAR_ASTERISK || code === CHAR_QUESTION_MARK || code === CHAR_EXCLAMATION_MARK; + if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) { + isGlob2 = token.isGlob = true; + isExtglob = token.isExtglob = true; + finished2 = true; + if (code === CHAR_EXCLAMATION_MARK && index === start) { + negatedExtglob = true; + } + if (scanToEnd === true) { + while (eos() !== true && (code = advance())) { + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + code = advance(); + continue; + } + if (code === CHAR_RIGHT_PARENTHESES) { + isGlob2 = token.isGlob = true; + finished2 = true; + break; + } + } + continue; + } + break; + } + } + if (code === CHAR_ASTERISK) { + if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true; + isGlob2 = token.isGlob = true; + finished2 = true; + if (scanToEnd === true) { + continue; + } + break; + } + if (code === CHAR_QUESTION_MARK) { + isGlob2 = token.isGlob = true; + finished2 = true; + if (scanToEnd === true) { + continue; + } + break; + } + if (code === CHAR_LEFT_SQUARE_BRACKET) { + while (eos() !== true && (next = advance())) { + if (next === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + advance(); + continue; + } + if (next === CHAR_RIGHT_SQUARE_BRACKET) { + isBracket = token.isBracket = true; + isGlob2 = token.isGlob = true; + finished2 = true; + break; + } + } + if (scanToEnd === true) { + continue; + } + break; + } + if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) { + negated = token.negated = true; + start++; + continue; + } + if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) { + isGlob2 = token.isGlob = true; + if (scanToEnd === true) { + while (eos() !== true && (code = advance())) { + if (code === CHAR_LEFT_PARENTHESES) { + backslashes = token.backslashes = true; + code = advance(); + continue; + } + if (code === CHAR_RIGHT_PARENTHESES) { + finished2 = true; + break; + } + } + continue; + } + break; + } + if (isGlob2 === true) { + finished2 = true; + if (scanToEnd === true) { + continue; + } + break; + } + } + if (opts.noext === true) { + isExtglob = false; + isGlob2 = false; + } + let base = str; + let prefix = ""; + let glob2 = ""; + if (start > 0) { + prefix = str.slice(0, start); + str = str.slice(start); + lastIndex -= start; + } + if (base && isGlob2 === true && lastIndex > 0) { + base = str.slice(0, lastIndex); + glob2 = str.slice(lastIndex); + } else if (isGlob2 === true) { + base = ""; + glob2 = str; + } else { + base = str; + } + if (base && base !== "" && base !== "/" && base !== str) { + if (isPathSeparator(base.charCodeAt(base.length - 1))) { + base = base.slice(0, -1); + } + } + if (opts.unescape === true) { + if (glob2) glob2 = utils.removeBackslashes(glob2); + if (base && backslashes === true) { + base = utils.removeBackslashes(base); + } + } + const state = { + prefix, + input, + start, + base, + glob: glob2, + isBrace, + isBracket, + isGlob: isGlob2, + isExtglob, + isGlobstar, + negated, + negatedExtglob + }; + if (opts.tokens === true) { + state.maxDepth = 0; + if (!isPathSeparator(code)) { + tokens.push(token); + } + state.tokens = tokens; + } + if (opts.parts === true || opts.tokens === true) { + let prevIndex; + for (let idx = 0; idx < slashes.length; idx++) { + const n = prevIndex ? prevIndex + 1 : start; + const i = slashes[idx]; + const value = input.slice(n, i); + if (opts.tokens) { + if (idx === 0 && start !== 0) { + tokens[idx].isPrefix = true; + tokens[idx].value = prefix; + } else { + tokens[idx].value = value; + } + depth(tokens[idx]); + state.maxDepth += tokens[idx].depth; + } + if (idx !== 0 || value !== "") { + parts.push(value); + } + prevIndex = i; + } + if (prevIndex && prevIndex + 1 < input.length) { + const value = input.slice(prevIndex + 1); + parts.push(value); + if (opts.tokens) { + tokens[tokens.length - 1].value = value; + depth(tokens[tokens.length - 1]); + state.maxDepth += tokens[tokens.length - 1].depth; + } + } + state.slashes = slashes; + state.parts = parts; + } + return state; + }, "scan"); + module22.exports = scan; + } + }); + var require_parse2 = __commonJS2({ + "picomatch/lib/parse.js"(exports22, module22) { + "use strict"; + var constants = require_constants(); + var utils = require_utils(); + var { + MAX_LENGTH, + POSIX_REGEX_SOURCE, + REGEX_NON_SPECIAL_CHARS, + REGEX_SPECIAL_CHARS_BACKREF, + REPLACEMENTS + } = constants; + var expandRange = /* @__PURE__ */ __name((args, options) => { + if (typeof options.expandRange === "function") { + return options.expandRange(...args, options); + } + args.sort(); + const value = `[${args.join("-")}]`; + try { + new RegExp(value); + } catch (ex) { + return args.map((v) => utils.escapeRegex(v)).join(".."); + } + return value; + }, "expandRange"); + var syntaxError = /* @__PURE__ */ __name((type, char) => { + return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`; + }, "syntaxError"); + var splitTopLevel = /* @__PURE__ */ __name((input) => { + const parts = []; + let bracket = 0; + let paren = 0; + let quote = 0; + let value = ""; + let escaped = false; + for (const ch of input) { + if (escaped === true) { + value += ch; + escaped = false; + continue; + } + if (ch === "\\") { + value += ch; + escaped = true; + continue; + } + if (ch === '"') { + quote = quote === 1 ? 0 : 1; + value += ch; + continue; + } + if (quote === 0) { + if (ch === "[") { + bracket++; + } else if (ch === "]" && bracket > 0) { + bracket--; + } else if (bracket === 0) { + if (ch === "(") { + paren++; + } else if (ch === ")" && paren > 0) { + paren--; + } else if (ch === "|" && paren === 0) { + parts.push(value); + value = ""; + continue; + } + } + } + value += ch; + } + parts.push(value); + return parts; + }, "splitTopLevel"); + var isPlainBranch = /* @__PURE__ */ __name((branch) => { + let escaped = false; + for (const ch of branch) { + if (escaped === true) { + escaped = false; + continue; + } + if (ch === "\\") { + escaped = true; + continue; + } + if (/[?*+@!()[\]{}]/.test(ch)) { + return false; + } + } + return true; + }, "isPlainBranch"); + var normalizeSimpleBranch = /* @__PURE__ */ __name((branch) => { + let value = branch.trim(); + let changed = true; + while (changed === true) { + changed = false; + if (/^@\([^\\()[\]{}|]+\)$/.test(value)) { + value = value.slice(2, -1); + changed = true; + } + } + if (!isPlainBranch(value)) { + return; + } + return value.replace(/\\(.)/g, "$1"); + }, "normalizeSimpleBranch"); + var hasRepeatedCharPrefixOverlap = /* @__PURE__ */ __name((branches) => { + const values = branches.map(normalizeSimpleBranch).filter(Boolean); + for (let i = 0; i < values.length; i++) { + for (let j = i + 1; j < values.length; j++) { + const a = values[i]; + const b = values[j]; + const char = a[0]; + if (!char || a !== char.repeat(a.length) || b !== char.repeat(b.length)) { + continue; + } + if (a === b || a.startsWith(b) || b.startsWith(a)) { + return true; + } + } + } + return false; + }, "hasRepeatedCharPrefixOverlap"); + var parseRepeatedExtglob = /* @__PURE__ */ __name((pattern, requireEnd = true) => { + if (pattern[0] !== "+" && pattern[0] !== "*" || pattern[1] !== "(") { + return; + } + let bracket = 0; + let paren = 0; + let quote = 0; + let escaped = false; + for (let i = 1; i < pattern.length; i++) { + const ch = pattern[i]; + if (escaped === true) { + escaped = false; + continue; + } + if (ch === "\\") { + escaped = true; + continue; + } + if (ch === '"') { + quote = quote === 1 ? 0 : 1; + continue; + } + if (quote === 1) { + continue; + } + if (ch === "[") { + bracket++; + continue; + } + if (ch === "]" && bracket > 0) { + bracket--; + continue; + } + if (bracket > 0) { + continue; + } + if (ch === "(") { + paren++; + continue; + } + if (ch === ")") { + paren--; + if (paren === 0) { + if (requireEnd === true && i !== pattern.length - 1) { + return; + } + return { + type: pattern[0], + body: pattern.slice(2, i), + end: i + }; + } + } + } + }, "parseRepeatedExtglob"); + var getStarExtglobSequenceOutput = /* @__PURE__ */ __name((pattern) => { + let index = 0; + const chars = []; + while (index < pattern.length) { + const match = parseRepeatedExtglob(pattern.slice(index), false); + if (!match || match.type !== "*") { + return; + } + const branches = splitTopLevel(match.body).map((branch2) => branch2.trim()); + if (branches.length !== 1) { + return; + } + const branch = normalizeSimpleBranch(branches[0]); + if (!branch || branch.length !== 1) { + return; + } + chars.push(branch); + index += match.end + 1; + } + if (chars.length < 1) { + return; + } + const source = chars.length === 1 ? utils.escapeRegex(chars[0]) : `[${chars.map((ch) => utils.escapeRegex(ch)).join("")}]`; + return `${source}*`; + }, "getStarExtglobSequenceOutput"); + var repeatedExtglobRecursion = /* @__PURE__ */ __name((pattern) => { + let depth = 0; + let value = pattern.trim(); + let match = parseRepeatedExtglob(value); + while (match) { + depth++; + value = match.body.trim(); + match = parseRepeatedExtglob(value); + } + return depth; + }, "repeatedExtglobRecursion"); + var analyzeRepeatedExtglob = /* @__PURE__ */ __name((body, options) => { + if (options.maxExtglobRecursion === false) { + return { risky: false }; + } + const max = typeof options.maxExtglobRecursion === "number" ? options.maxExtglobRecursion : constants.DEFAULT_MAX_EXTGLOB_RECURSION; + const branches = splitTopLevel(body).map((branch) => branch.trim()); + if (branches.length > 1) { + if (branches.some((branch) => branch === "") || branches.some((branch) => /^[*?]+$/.test(branch)) || hasRepeatedCharPrefixOverlap(branches)) { + return { risky: true }; + } + } + for (const branch of branches) { + const safeOutput = getStarExtglobSequenceOutput(branch); + if (safeOutput) { + return { risky: true, safeOutput }; + } + if (repeatedExtglobRecursion(branch) > max) { + return { risky: true }; + } + } + return { risky: false }; + }, "analyzeRepeatedExtglob"); + var parse = /* @__PURE__ */ __name((input, options) => { + if (typeof input !== "string") { + throw new TypeError("Expected a string"); + } + input = REPLACEMENTS[input] || input; + const opts = { ...options }; + const max = typeof opts.maxLength === "number" ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; + let len = input.length; + if (len > max) { + throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`); + } + const bos = { type: "bos", value: "", output: opts.prepend || "" }; + const tokens = [bos]; + const capture = opts.capture ? "" : "?:"; + const PLATFORM_CHARS = constants.globChars(opts.windows); + const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS); + const { + DOT_LITERAL, + PLUS_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + DOTS_SLASH, + NO_DOT, + NO_DOT_SLASH, + NO_DOTS_SLASH, + QMARK, + QMARK_NO_DOT, + STAR, + START_ANCHOR + } = PLATFORM_CHARS; + const globstar = /* @__PURE__ */ __name((opts2) => { + return `(${capture}(?:(?!${START_ANCHOR}${opts2.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`; + }, "globstar"); + const nodot = opts.dot ? "" : NO_DOT; + const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT; + let star = opts.bash === true ? globstar(opts) : STAR; + if (opts.capture) { + star = `(${star})`; + } + if (typeof opts.noext === "boolean") { + opts.noextglob = opts.noext; + } + const state = { + input, + index: -1, + start: 0, + dot: opts.dot === true, + consumed: "", + output: "", + prefix: "", + backtrack: false, + negated: false, + brackets: 0, + braces: 0, + parens: 0, + quotes: 0, + globstar: false, + tokens + }; + input = utils.removePrefix(input, state); + len = input.length; + const extglobs = []; + const braces = []; + const stack = []; + let prev = bos; + let value; + const eos = /* @__PURE__ */ __name(() => state.index === len - 1, "eos"); + const peek = state.peek = (n = 1) => input[state.index + n]; + const advance = state.advance = () => input[++state.index] || ""; + const remaining = /* @__PURE__ */ __name(() => input.slice(state.index + 1), "remaining"); + const consume = /* @__PURE__ */ __name((value2 = "", num = 0) => { + state.consumed += value2; + state.index += num; + }, "consume"); + const append = /* @__PURE__ */ __name((token) => { + state.output += token.output != null ? token.output : token.value; + consume(token.value); + }, "append"); + const negate = /* @__PURE__ */ __name(() => { + let count = 1; + while (peek() === "!" && (peek(2) !== "(" || peek(3) === "?")) { + advance(); + state.start++; + count++; + } + if (count % 2 === 0) { + return false; + } + state.negated = true; + state.start++; + return true; + }, "negate"); + const increment = /* @__PURE__ */ __name((type) => { + state[type]++; + stack.push(type); + }, "increment"); + const decrement = /* @__PURE__ */ __name((type) => { + state[type]--; + stack.pop(); + }, "decrement"); + const push = /* @__PURE__ */ __name((tok) => { + if (prev.type === "globstar") { + const isBrace = state.braces > 0 && (tok.type === "comma" || tok.type === "brace"); + const isExtglob = tok.extglob === true || extglobs.length && (tok.type === "pipe" || tok.type === "paren"); + if (tok.type !== "slash" && tok.type !== "paren" && !isBrace && !isExtglob) { + state.output = state.output.slice(0, -prev.output.length); + prev.type = "star"; + prev.value = "*"; + prev.output = star; + state.output += prev.output; + } + } + if (extglobs.length && tok.type !== "paren") { + extglobs[extglobs.length - 1].inner += tok.value; + } + if (tok.value || tok.output) append(tok); + if (prev && prev.type === "text" && tok.type === "text") { + prev.output = (prev.output || prev.value) + tok.value; + prev.value += tok.value; + return; + } + tok.prev = prev; + tokens.push(tok); + prev = tok; + }, "push"); + const extglobOpen = /* @__PURE__ */ __name((type, value2) => { + const token = { ...EXTGLOB_CHARS[value2], conditions: 1, inner: "" }; + token.prev = prev; + token.parens = state.parens; + token.output = state.output; + token.startIndex = state.index; + token.tokensIndex = tokens.length; + const output = (opts.capture ? "(" : "") + token.open; + increment("parens"); + push({ type, value: value2, output: state.output ? "" : ONE_CHAR }); + push({ type: "paren", extglob: true, value: advance(), output }); + extglobs.push(token); + }, "extglobOpen"); + const extglobClose = /* @__PURE__ */ __name((token) => { + const literal = input.slice(token.startIndex, state.index + 1); + const body = input.slice(token.startIndex + 2, state.index); + const analysis = analyzeRepeatedExtglob(body, opts); + if ((token.type === "plus" || token.type === "star") && analysis.risky) { + const safeOutput = analysis.safeOutput ? (token.output ? "" : ONE_CHAR) + (opts.capture ? `(${analysis.safeOutput})` : analysis.safeOutput) : void 0; + const open = tokens[token.tokensIndex]; + open.type = "text"; + open.value = literal; + open.output = safeOutput || utils.escapeRegex(literal); + for (let i = token.tokensIndex + 1; i < tokens.length; i++) { + tokens[i].value = ""; + tokens[i].output = ""; + delete tokens[i].suffix; + } + state.output = token.output + open.output; + state.backtrack = true; + push({ type: "paren", extglob: true, value, output: "" }); + decrement("parens"); + return; + } + let output = token.close + (opts.capture ? ")" : ""); + let rest; + if (token.type === "negate") { + let extglobStar = star; + if (token.inner && token.inner.length > 1 && token.inner.includes("/")) { + extglobStar = globstar(opts); + } + if (extglobStar !== star || eos() || /^\)+$/.test(remaining())) { + output = token.close = `)$))${extglobStar}`; + } + if (token.inner.includes("*") && (rest = remaining()) && /^\.[^\\/.]+$/.test(rest)) { + const expression = parse(rest, { ...options, fastpaths: false }).output; + output = token.close = `)${expression})${extglobStar})`; + } + if (token.prev.type === "bos") { + state.negatedExtglob = true; + } + } + push({ type: "paren", extglob: true, value, output }); + decrement("parens"); + }, "extglobClose"); + if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) { + let backslashes = false; + let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => { + if (first === "\\") { + backslashes = true; + return m; + } + if (first === "?") { + if (esc) { + return esc + first + (rest ? QMARK.repeat(rest.length) : ""); + } + if (index === 0) { + return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : ""); + } + return QMARK.repeat(chars.length); + } + if (first === ".") { + return DOT_LITERAL.repeat(chars.length); + } + if (first === "*") { + if (esc) { + return esc + first + (rest ? star : ""); + } + return star; + } + return esc ? m : `\\${m}`; + }); + if (backslashes === true) { + if (opts.unescape === true) { + output = output.replace(/\\/g, ""); + } else { + output = output.replace(/\\+/g, (m) => { + return m.length % 2 === 0 ? "\\\\" : m ? "\\" : ""; + }); + } + } + if (output === input && opts.contains === true) { + state.output = input; + return state; + } + state.output = utils.wrapOutput(output, state, options); + return state; + } + while (!eos()) { + value = advance(); + if (value === "\0") { + continue; + } + if (value === "\\") { + const next = peek(); + if (next === "/" && opts.bash !== true) { + continue; + } + if (next === "." || next === ";") { + continue; + } + if (!next) { + value += "\\"; + push({ type: "text", value }); + continue; + } + const match = /^\\+/.exec(remaining()); + let slashes = 0; + if (match && match[0].length > 2) { + slashes = match[0].length; + state.index += slashes; + if (slashes % 2 !== 0) { + value += "\\"; + } + } + if (opts.unescape === true) { + value = advance(); + } else { + value += advance(); + } + if (state.brackets === 0) { + push({ type: "text", value }); + continue; + } + } + if (state.brackets > 0 && (value !== "]" || prev.value === "[" || prev.value === "[^")) { + if (opts.posix !== false && value === ":") { + const inner = prev.value.slice(1); + if (inner.includes("[")) { + prev.posix = true; + if (inner.includes(":")) { + const idx = prev.value.lastIndexOf("["); + const pre = prev.value.slice(0, idx); + const rest2 = prev.value.slice(idx + 2); + const posix = POSIX_REGEX_SOURCE[rest2]; + if (posix) { + prev.value = pre + posix; + state.backtrack = true; + advance(); + if (!bos.output && tokens.indexOf(prev) === 1) { + bos.output = ONE_CHAR; + } + continue; + } + } + } + } + if (value === "[" && peek() !== ":" || value === "-" && peek() === "]") { + value = `\\${value}`; + } + if (value === "]" && (prev.value === "[" || prev.value === "[^")) { + value = `\\${value}`; + } + if (opts.posix === true && value === "!" && prev.value === "[") { + value = "^"; + } + prev.value += value; + append({ value }); + continue; + } + if (state.quotes === 1 && value !== '"') { + value = utils.escapeRegex(value); + prev.value += value; + append({ value }); + continue; + } + if (value === '"') { + state.quotes = state.quotes === 1 ? 0 : 1; + if (opts.keepQuotes === true) { + push({ type: "text", value }); + } + continue; + } + if (value === "(") { + increment("parens"); + push({ type: "paren", value }); + continue; + } + if (value === ")") { + if (state.parens === 0 && opts.strictBrackets === true) { + throw new SyntaxError(syntaxError("opening", "(")); + } + const extglob = extglobs[extglobs.length - 1]; + if (extglob && state.parens === extglob.parens + 1) { + extglobClose(extglobs.pop()); + continue; + } + push({ type: "paren", value, output: state.parens ? ")" : "\\)" }); + decrement("parens"); + continue; + } + if (value === "[") { + if (opts.nobracket === true || !remaining().includes("]")) { + if (opts.nobracket !== true && opts.strictBrackets === true) { + throw new SyntaxError(syntaxError("closing", "]")); + } + value = `\\${value}`; + } else { + increment("brackets"); + } + push({ type: "bracket", value }); + continue; + } + if (value === "]") { + if (opts.nobracket === true || prev && prev.type === "bracket" && prev.value.length === 1) { + push({ type: "text", value, output: `\\${value}` }); + continue; + } + if (state.brackets === 0) { + if (opts.strictBrackets === true) { + throw new SyntaxError(syntaxError("opening", "[")); + } + push({ type: "text", value, output: `\\${value}` }); + continue; + } + decrement("brackets"); + const prevValue = prev.value.slice(1); + if (prev.posix !== true && prevValue[0] === "^" && !prevValue.includes("/")) { + value = `/${value}`; + } + prev.value += value; + append({ value }); + if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) { + continue; + } + const escaped = utils.escapeRegex(prev.value); + state.output = state.output.slice(0, -prev.value.length); + if (opts.literalBrackets === true) { + state.output += escaped; + prev.value = escaped; + continue; + } + prev.value = `(${capture}${escaped}|${prev.value})`; + state.output += prev.value; + continue; + } + if (value === "{" && opts.nobrace !== true) { + increment("braces"); + const open = { + type: "brace", + value, + output: "(", + outputIndex: state.output.length, + tokensIndex: state.tokens.length + }; + braces.push(open); + push(open); + continue; + } + if (value === "}") { + const brace = braces[braces.length - 1]; + if (opts.nobrace === true || !brace) { + push({ type: "text", value, output: value }); + continue; + } + let output = ")"; + if (brace.dots === true) { + const arr = tokens.slice(); + const range = []; + for (let i = arr.length - 1; i >= 0; i--) { + tokens.pop(); + if (arr[i].type === "brace") { + break; + } + if (arr[i].type !== "dots") { + range.unshift(arr[i].value); + } + } + output = expandRange(range, opts); + state.backtrack = true; + } + if (brace.comma !== true && brace.dots !== true) { + const out = state.output.slice(0, brace.outputIndex); + const toks = state.tokens.slice(brace.tokensIndex); + brace.value = brace.output = "\\{"; + value = output = "\\}"; + state.output = out; + for (const t of toks) { + state.output += t.output || t.value; + } + } + push({ type: "brace", value, output }); + decrement("braces"); + braces.pop(); + continue; + } + if (value === "|") { + if (extglobs.length > 0) { + extglobs[extglobs.length - 1].conditions++; + } + push({ type: "text", value }); + continue; + } + if (value === ",") { + let output = value; + const brace = braces[braces.length - 1]; + if (brace && stack[stack.length - 1] === "braces") { + brace.comma = true; + output = "|"; + } + push({ type: "comma", value, output }); + continue; + } + if (value === "/") { + if (prev.type === "dot" && state.index === state.start + 1) { + state.start = state.index + 1; + state.consumed = ""; + state.output = ""; + tokens.pop(); + prev = bos; + continue; + } + push({ type: "slash", value, output: SLASH_LITERAL }); + continue; + } + if (value === ".") { + if (state.braces > 0 && prev.type === "dot") { + if (prev.value === ".") prev.output = DOT_LITERAL; + const brace = braces[braces.length - 1]; + prev.type = "dots"; + prev.output += value; + prev.value += value; + brace.dots = true; + continue; + } + if (state.braces + state.parens === 0 && prev.type !== "bos" && prev.type !== "slash") { + push({ type: "text", value, output: DOT_LITERAL }); + continue; + } + push({ type: "dot", value, output: DOT_LITERAL }); + continue; + } + if (value === "?") { + const isGroup = prev && prev.value === "("; + if (!isGroup && opts.noextglob !== true && peek() === "(" && peek(2) !== "?") { + extglobOpen("qmark", value); + continue; + } + if (prev && prev.type === "paren") { + const next = peek(); + let output = value; + if (prev.value === "(" && !/[!=<:]/.test(next) || next === "<" && !/<([!=]|\w+>)/.test(remaining())) { + output = `\\${value}`; + } + push({ type: "text", value, output }); + continue; + } + if (opts.dot !== true && (prev.type === "slash" || prev.type === "bos")) { + push({ type: "qmark", value, output: QMARK_NO_DOT }); + continue; + } + push({ type: "qmark", value, output: QMARK }); + continue; + } + if (value === "!") { + if (opts.noextglob !== true && peek() === "(") { + if (peek(2) !== "?" || !/[!=<:]/.test(peek(3))) { + extglobOpen("negate", value); + continue; + } + } + if (opts.nonegate !== true && state.index === 0) { + negate(); + continue; + } + } + if (value === "+") { + if (opts.noextglob !== true && peek() === "(" && peek(2) !== "?") { + extglobOpen("plus", value); + continue; + } + if (prev && prev.value === "(" || opts.regex === false) { + push({ type: "plus", value, output: PLUS_LITERAL }); + continue; + } + if (prev && (prev.type === "bracket" || prev.type === "paren" || prev.type === "brace") || state.parens > 0) { + push({ type: "plus", value }); + continue; + } + push({ type: "plus", value: PLUS_LITERAL }); + continue; + } + if (value === "@") { + if (opts.noextglob !== true && peek() === "(" && peek(2) !== "?") { + push({ type: "at", extglob: true, value, output: "" }); + continue; + } + push({ type: "text", value }); + continue; + } + if (value !== "*") { + if (value === "$" || value === "^") { + value = `\\${value}`; + } + const match = REGEX_NON_SPECIAL_CHARS.exec(remaining()); + if (match) { + value += match[0]; + state.index += match[0].length; + } + push({ type: "text", value }); + continue; + } + if (prev && (prev.type === "globstar" || prev.star === true)) { + prev.type = "star"; + prev.star = true; + prev.value += value; + prev.output = star; + state.backtrack = true; + state.globstar = true; + consume(value); + continue; + } + let rest = remaining(); + if (opts.noextglob !== true && /^\([^?]/.test(rest)) { + extglobOpen("star", value); + continue; + } + if (prev.type === "star") { + if (opts.noglobstar === true) { + consume(value); + continue; + } + const prior = prev.prev; + const before = prior.prev; + const isStart = prior.type === "slash" || prior.type === "bos"; + const afterStar = before && (before.type === "star" || before.type === "globstar"); + if (opts.bash === true && (!isStart || rest[0] && rest[0] !== "/")) { + push({ type: "star", value, output: "" }); + continue; + } + const isBrace = state.braces > 0 && (prior.type === "comma" || prior.type === "brace"); + const isExtglob = extglobs.length && (prior.type === "pipe" || prior.type === "paren"); + if (!isStart && prior.type !== "paren" && !isBrace && !isExtglob) { + push({ type: "star", value, output: "" }); + continue; + } + while (rest.slice(0, 3) === "/**") { + const after = input[state.index + 4]; + if (after && after !== "/") { + break; + } + rest = rest.slice(3); + consume("/**", 3); + } + if (prior.type === "bos" && eos()) { + prev.type = "globstar"; + prev.value += value; + prev.output = globstar(opts); + state.output = prev.output; + state.globstar = true; + consume(value); + continue; + } + if (prior.type === "slash" && prior.prev.type !== "bos" && !afterStar && eos()) { + state.output = state.output.slice(0, -(prior.output + prev.output).length); + prior.output = `(?:${prior.output}`; + prev.type = "globstar"; + prev.output = globstar(opts) + (opts.strictSlashes ? ")" : "|$)"); + prev.value += value; + state.globstar = true; + state.output += prior.output + prev.output; + consume(value); + continue; + } + if (prior.type === "slash" && prior.prev.type !== "bos" && rest[0] === "/") { + const end = rest[1] !== void 0 ? "|$" : ""; + state.output = state.output.slice(0, -(prior.output + prev.output).length); + prior.output = `(?:${prior.output}`; + prev.type = "globstar"; + prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`; + prev.value += value; + state.output += prior.output + prev.output; + state.globstar = true; + consume(value + advance()); + push({ type: "slash", value: "/", output: "" }); + continue; + } + if (prior.type === "bos" && rest[0] === "/") { + prev.type = "globstar"; + prev.value += value; + prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`; + state.output = prev.output; + state.globstar = true; + consume(value + advance()); + push({ type: "slash", value: "/", output: "" }); + continue; + } + state.output = state.output.slice(0, -prev.output.length); + prev.type = "globstar"; + prev.output = globstar(opts); + prev.value += value; + state.output += prev.output; + state.globstar = true; + consume(value); + continue; + } + const token = { type: "star", value, output: star }; + if (opts.bash === true) { + token.output = ".*?"; + if (prev.type === "bos" || prev.type === "slash") { + token.output = nodot + token.output; + } + push(token); + continue; + } + if (prev && (prev.type === "bracket" || prev.type === "paren") && opts.regex === true) { + token.output = value; + push(token); + continue; + } + if (state.index === state.start || prev.type === "slash" || prev.type === "dot") { + if (prev.type === "dot") { + state.output += NO_DOT_SLASH; + prev.output += NO_DOT_SLASH; + } else if (opts.dot === true) { + state.output += NO_DOTS_SLASH; + prev.output += NO_DOTS_SLASH; + } else { + state.output += nodot; + prev.output += nodot; + } + if (peek() !== "*") { + state.output += ONE_CHAR; + prev.output += ONE_CHAR; + } + } + push(token); + } + while (state.brackets > 0) { + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError("closing", "]")); + state.output = utils.escapeLast(state.output, "["); + decrement("brackets"); + } + while (state.parens > 0) { + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError("closing", ")")); + state.output = utils.escapeLast(state.output, "("); + decrement("parens"); + } + while (state.braces > 0) { + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError("closing", "}")); + state.output = utils.escapeLast(state.output, "{"); + decrement("braces"); + } + if (opts.strictSlashes !== true && (prev.type === "star" || prev.type === "bracket")) { + push({ type: "maybe_slash", value: "", output: `${SLASH_LITERAL}?` }); + } + if (state.backtrack === true) { + state.output = ""; + for (const token of state.tokens) { + state.output += token.output != null ? token.output : token.value; + if (token.suffix) { + state.output += token.suffix; + } + } + } + return state; + }, "parse"); + parse.fastpaths = (input, options) => { + const opts = { ...options }; + const max = typeof opts.maxLength === "number" ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; + const len = input.length; + if (len > max) { + throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`); + } + input = REPLACEMENTS[input] || input; + const { + DOT_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + DOTS_SLASH, + NO_DOT, + NO_DOTS, + NO_DOTS_SLASH, + STAR, + START_ANCHOR + } = constants.globChars(opts.windows); + const nodot = opts.dot ? NO_DOTS : NO_DOT; + const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT; + const capture = opts.capture ? "" : "?:"; + const state = { negated: false, prefix: "" }; + let star = opts.bash === true ? ".*?" : STAR; + if (opts.capture) { + star = `(${star})`; + } + const globstar = /* @__PURE__ */ __name((opts2) => { + if (opts2.noglobstar === true) return star; + return `(${capture}(?:(?!${START_ANCHOR}${opts2.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`; + }, "globstar"); + const create = /* @__PURE__ */ __name((str) => { + switch (str) { + case "*": + return `${nodot}${ONE_CHAR}${star}`; + case ".*": + return `${DOT_LITERAL}${ONE_CHAR}${star}`; + case "*.*": + return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`; + case "*/*": + return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`; + case "**": + return nodot + globstar(opts); + case "**/*": + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`; + case "**/*.*": + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`; + case "**/.*": + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`; + default: { + const match = /^(.*?)\.(\w+)$/.exec(str); + if (!match) return; + const source2 = create(match[1]); + if (!source2) return; + return source2 + DOT_LITERAL + match[2]; + } + } + }, "create"); + const output = utils.removePrefix(input, state); + let source = create(output); + if (source && opts.strictSlashes !== true) { + source += `${SLASH_LITERAL}?`; + } + return source; + }; + module22.exports = parse; + } + }); + var require_picomatch = __commonJS2({ + "picomatch/lib/picomatch.js"(exports22, module22) { + "use strict"; + var scan = require_scan(); + var parse = require_parse2(); + var utils = require_utils(); + var constants = require_constants(); + var isObject = /* @__PURE__ */ __name((val) => val && typeof val === "object" && !Array.isArray(val), "isObject"); + var picomatch2 = /* @__PURE__ */ __name((glob2, options, returnState = false) => { + if (Array.isArray(glob2)) { + const fns = glob2.map((input) => picomatch2(input, options, returnState)); + const arrayMatcher = /* @__PURE__ */ __name((str) => { + for (const isMatch of fns) { + const state2 = isMatch(str); + if (state2) return state2; + } + return false; + }, "arrayMatcher"); + return arrayMatcher; + } + const isState = isObject(glob2) && glob2.tokens && glob2.input; + if (glob2 === "" || typeof glob2 !== "string" && !isState) { + throw new TypeError("Expected pattern to be a non-empty string"); + } + const opts = options || {}; + const posix = opts.windows; + const regex = isState ? picomatch2.compileRe(glob2, options) : picomatch2.makeRe(glob2, options, false, true); + const state = regex.state; + delete regex.state; + let isIgnored = /* @__PURE__ */ __name(() => false, "isIgnored"); + if (opts.ignore) { + const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null }; + isIgnored = picomatch2(opts.ignore, ignoreOpts, returnState); + } + const matcher = /* @__PURE__ */ __name((input, returnObject = false) => { + const { isMatch, match, output } = picomatch2.test(input, regex, options, { glob: glob2, posix }); + const result = { glob: glob2, state, regex, posix, input, output, match, isMatch }; + if (typeof opts.onResult === "function") { + opts.onResult(result); + } + if (isMatch === false) { + result.isMatch = false; + return returnObject ? result : false; + } + if (isIgnored(input)) { + if (typeof opts.onIgnore === "function") { + opts.onIgnore(result); + } + result.isMatch = false; + return returnObject ? result : false; + } + if (typeof opts.onMatch === "function") { + opts.onMatch(result); + } + return returnObject ? result : true; + }, "matcher"); + if (returnState) { + matcher.state = state; + } + return matcher; + }, "picomatch"); + picomatch2.test = (input, regex, options, { glob: glob2, posix } = {}) => { + if (typeof input !== "string") { + throw new TypeError("Expected input to be a string"); + } + if (input === "") { + return { isMatch: false, output: "" }; + } + const opts = options || {}; + const format = opts.format || (posix ? utils.toPosixSlashes : null); + let match = input === glob2; + let output = match && format ? format(input) : input; + if (match === false) { + output = format ? format(input) : input; + match = output === glob2; + } + if (match === false || opts.capture === true) { + if (opts.matchBase === true || opts.basename === true) { + match = picomatch2.matchBase(input, regex, options, posix); + } else { + match = regex.exec(output); + } + } + return { isMatch: Boolean(match), match, output }; + }; + picomatch2.matchBase = (input, glob2, options) => { + const regex = glob2 instanceof RegExp ? glob2 : picomatch2.makeRe(glob2, options); + return regex.test(utils.basename(input)); + }; + picomatch2.isMatch = (str, patterns, options) => picomatch2(patterns, options)(str); + picomatch2.parse = (pattern, options) => { + if (Array.isArray(pattern)) return pattern.map((p) => picomatch2.parse(p, options)); + return parse(pattern, { ...options, fastpaths: false }); + }; + picomatch2.scan = (input, options) => scan(input, options); + picomatch2.compileRe = (state, options, returnOutput = false, returnState = false) => { + if (returnOutput === true) { + return state.output; + } + const opts = options || {}; + const prepend = opts.contains ? "" : "^"; + const append = opts.contains ? "" : "$"; + let source = `${prepend}(?:${state.output})${append}`; + if (state && state.negated === true) { + source = `^(?!${source}).*$`; + } + const regex = picomatch2.toRegex(source, options); + if (returnState === true) { + regex.state = state; + } + return regex; + }; + picomatch2.makeRe = (input, options = {}, returnOutput = false, returnState = false) => { + if (!input || typeof input !== "string") { + throw new TypeError("Expected a non-empty string"); + } + let parsed = { negated: false, fastpaths: true }; + if (options.fastpaths !== false && (input[0] === "." || input[0] === "*")) { + parsed.output = parse.fastpaths(input, options); + } + if (!parsed.output) { + parsed = parse(input, options); + } + return picomatch2.compileRe(parsed, options, returnOutput, returnState); + }; + picomatch2.toRegex = (source, options) => { + try { + const opts = options || {}; + return new RegExp(source, opts.flags || (opts.nocase ? "i" : "")); + } catch (err) { + if (options && options.debug === true) throw err; + return /$^/; + } + }; + picomatch2.constants = constants; + module22.exports = picomatch2; + } + }); + var require_picomatch2 = __commonJS2({ + "picomatch/index.js"(exports22, module22) { + "use strict"; + var pico = require_picomatch(); + var utils = require_utils(); + function picomatch2(glob2, options, returnState = false) { + if (options && (options.windows === null || options.windows === void 0)) { + options = { ...options, windows: utils.isWindows() }; + } + return pico(glob2, options, returnState); + } + __name(picomatch2, "picomatch"); + Object.assign(picomatch2, pico); + module22.exports = picomatch2; + } + }); + function mergeStreams(streams) { + if (!Array.isArray(streams)) { + throw new TypeError(`Expected an array, got \`${typeof streams}\`.`); + } + for (const stream of streams) { + validateStream(stream); + } + const objectMode = streams.some(({ readableObjectMode }) => readableObjectMode); + const highWaterMark = getHighWaterMark(streams, objectMode); + const passThroughStream = new MergedStream({ + objectMode, + writableHighWaterMark: highWaterMark, + readableHighWaterMark: highWaterMark + }); + for (const stream of streams) { + passThroughStream.add(stream); + } + if (streams.length === 0) { + endStream(passThroughStream); + } + return passThroughStream; + } + var import_node_events; + var import_node_stream; + var import_promises; + var getHighWaterMark; + var MergedStream; + var onMergedStreamFinished; + var onMergedStreamEnd; + var onInputStreamsUnpipe; + var validateStream; + var endWhenStreamsDone; + var isAbortError; + var afterMergedStreamFinished; + var onInputStreamEnd; + var onInputStreamUnpipe; + var unpipeEvent; + var endStream; + var abortStream; + var errorStream; + var noop; + var updateMaxListeners; + var PASSTHROUGH_LISTENERS_COUNT; + var PASSTHROUGH_LISTENERS_PER_STREAM; + var init_merge_streams = __esm({ + "@sindresorhus/merge-streams/index.js"() { + import_node_events = require("node:events"); + import_node_stream = require("node:stream"); + import_promises = require("node:stream/promises"); + __name(mergeStreams, "mergeStreams"); + getHighWaterMark = /* @__PURE__ */ __name((streams, objectMode) => { + if (streams.length === 0) { + return 16384; + } + const highWaterMarks = streams.filter(({ readableObjectMode }) => readableObjectMode === objectMode).map(({ readableHighWaterMark }) => readableHighWaterMark); + return Math.max(...highWaterMarks); + }, "getHighWaterMark"); + MergedStream = class extends import_node_stream.PassThrough { + static { + __name(this, "MergedStream"); + } + #streams = /* @__PURE__ */ new Set([]); + #ended = /* @__PURE__ */ new Set([]); + #aborted = /* @__PURE__ */ new Set([]); + #onFinished; + add(stream) { + validateStream(stream); + if (this.#streams.has(stream)) { + return; + } + this.#streams.add(stream); + this.#onFinished ??= onMergedStreamFinished(this, this.#streams); + endWhenStreamsDone({ + passThroughStream: this, + stream, + streams: this.#streams, + ended: this.#ended, + aborted: this.#aborted, + onFinished: this.#onFinished + }); + stream.pipe(this, { end: false }); + } + remove(stream) { + validateStream(stream); + if (!this.#streams.has(stream)) { + return false; + } + stream.unpipe(this); + return true; + } + }; + onMergedStreamFinished = /* @__PURE__ */ __name(async (passThroughStream, streams) => { + updateMaxListeners(passThroughStream, PASSTHROUGH_LISTENERS_COUNT); + const controller = new AbortController(); + try { + await Promise.race([ + onMergedStreamEnd(passThroughStream, controller), + onInputStreamsUnpipe(passThroughStream, streams, controller) + ]); + } finally { + controller.abort(); + updateMaxListeners(passThroughStream, -PASSTHROUGH_LISTENERS_COUNT); + } + }, "onMergedStreamFinished"); + onMergedStreamEnd = /* @__PURE__ */ __name(async (passThroughStream, { signal }) => { + await (0, import_promises.finished)(passThroughStream, { signal, cleanup: true }); + }, "onMergedStreamEnd"); + onInputStreamsUnpipe = /* @__PURE__ */ __name(async (passThroughStream, streams, { signal }) => { + for await (const [unpipedStream] of (0, import_node_events.on)(passThroughStream, "unpipe", { signal })) { + if (streams.has(unpipedStream)) { + unpipedStream.emit(unpipeEvent); + } + } + }, "onInputStreamsUnpipe"); + validateStream = /* @__PURE__ */ __name((stream) => { + if (typeof stream?.pipe !== "function") { + throw new TypeError(`Expected a readable stream, got: \`${typeof stream}\`.`); + } + }, "validateStream"); + endWhenStreamsDone = /* @__PURE__ */ __name(async ({ passThroughStream, stream, streams, ended, aborted, onFinished }) => { + updateMaxListeners(passThroughStream, PASSTHROUGH_LISTENERS_PER_STREAM); + const controller = new AbortController(); + try { + await Promise.race([ + afterMergedStreamFinished(onFinished, stream), + onInputStreamEnd({ passThroughStream, stream, streams, ended, aborted, controller }), + onInputStreamUnpipe({ stream, streams, ended, aborted, controller }) + ]); + } finally { + controller.abort(); + updateMaxListeners(passThroughStream, -PASSTHROUGH_LISTENERS_PER_STREAM); + } + if (streams.size === ended.size + aborted.size) { + if (ended.size === 0 && aborted.size > 0) { + abortStream(passThroughStream); + } else { + endStream(passThroughStream); + } + } + }, "endWhenStreamsDone"); + isAbortError = /* @__PURE__ */ __name((error) => error?.code === "ERR_STREAM_PREMATURE_CLOSE", "isAbortError"); + afterMergedStreamFinished = /* @__PURE__ */ __name(async (onFinished, stream) => { + try { + await onFinished; + abortStream(stream); + } catch (error) { + if (isAbortError(error)) { + abortStream(stream); + } else { + errorStream(stream, error); + } + } + }, "afterMergedStreamFinished"); + onInputStreamEnd = /* @__PURE__ */ __name(async ({ passThroughStream, stream, streams, ended, aborted, controller: { signal } }) => { + try { + await (0, import_promises.finished)(stream, { signal, cleanup: true, readable: true, writable: false }); + if (streams.has(stream)) { + ended.add(stream); + } + } catch (error) { + if (signal.aborted || !streams.has(stream)) { + return; + } + if (isAbortError(error)) { + aborted.add(stream); + } else { + errorStream(passThroughStream, error); + } + } + }, "onInputStreamEnd"); + onInputStreamUnpipe = /* @__PURE__ */ __name(async ({ stream, streams, ended, aborted, controller: { signal } }) => { + await (0, import_node_events.once)(stream, unpipeEvent, { signal }); + streams.delete(stream); + ended.delete(stream); + aborted.delete(stream); + }, "onInputStreamUnpipe"); + unpipeEvent = Symbol("unpipe"); + endStream = /* @__PURE__ */ __name((stream) => { + if (stream.writable) { + stream.end(); + } + }, "endStream"); + abortStream = /* @__PURE__ */ __name((stream) => { + if (stream.readable || stream.writable) { + stream.destroy(); + } + }, "abortStream"); + errorStream = /* @__PURE__ */ __name((stream, error) => { + if (!stream.destroyed) { + stream.once("error", noop); + stream.destroy(error); + } + }, "errorStream"); + noop = /* @__PURE__ */ __name(() => { + }, "noop"); + updateMaxListeners = /* @__PURE__ */ __name((passThroughStream, increment) => { + const maxListeners = passThroughStream.getMaxListeners(); + if (maxListeners !== 0 && maxListeners !== Number.POSITIVE_INFINITY) { + passThroughStream.setMaxListeners(maxListeners + increment); + } + }, "updateMaxListeners"); + PASSTHROUGH_LISTENERS_COUNT = 2; + PASSTHROUGH_LISTENERS_PER_STREAM = 1; + } + }); + var require_array = __commonJS2({ + "fast-glob/out/utils/array.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.splitWhen = exports22.flatten = void 0; + function flatten(items) { + return items.reduce((collection, item) => [].concat(collection, item), []); + } + __name(flatten, "flatten"); + exports22.flatten = flatten; + function splitWhen(items, predicate) { + const result = [[]]; + let groupIndex = 0; + for (const item of items) { + if (predicate(item)) { + groupIndex++; + result[groupIndex] = []; + } else { + result[groupIndex].push(item); + } + } + return result; + } + __name(splitWhen, "splitWhen"); + exports22.splitWhen = splitWhen; + } + }); + var require_errno = __commonJS2({ + "fast-glob/out/utils/errno.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.isEnoentCodeError = void 0; + function isEnoentCodeError(error) { + return error.code === "ENOENT"; + } + __name(isEnoentCodeError, "isEnoentCodeError"); + exports22.isEnoentCodeError = isEnoentCodeError; + } + }); + var require_fs2 = __commonJS2({ + "fast-glob/out/utils/fs.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.createDirentFromStats = void 0; + var DirentFromStats = class { + static { + __name(this, "DirentFromStats"); + } + constructor(name, stats) { + this.name = name; + this.isBlockDevice = stats.isBlockDevice.bind(stats); + this.isCharacterDevice = stats.isCharacterDevice.bind(stats); + this.isDirectory = stats.isDirectory.bind(stats); + this.isFIFO = stats.isFIFO.bind(stats); + this.isFile = stats.isFile.bind(stats); + this.isSocket = stats.isSocket.bind(stats); + this.isSymbolicLink = stats.isSymbolicLink.bind(stats); + } + }; + function createDirentFromStats(name, stats) { + return new DirentFromStats(name, stats); + } + __name(createDirentFromStats, "createDirentFromStats"); + exports22.createDirentFromStats = createDirentFromStats; + } + }); + var require_path = __commonJS2({ + "fast-glob/out/utils/path.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.convertPosixPathToPattern = exports22.convertWindowsPathToPattern = exports22.convertPathToPattern = exports22.escapePosixPath = exports22.escapeWindowsPath = exports22.escape = exports22.removeLeadingDotSegment = exports22.makeAbsolute = exports22.unixify = void 0; + var os = require("os"); + var path6 = require("path"); + var IS_WINDOWS_PLATFORM = os.platform() === "win32"; + var LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; + var POSIX_UNESCAPED_GLOB_SYMBOLS_RE = /(\\?)([()*?[\]{|}]|^!|[!+@](?=\()|\\(?![!()*+?@[\]{|}]))/g; + var WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE = /(\\?)([()[\]{}]|^!|[!+@](?=\())/g; + var DOS_DEVICE_PATH_RE = /^\\\\([.?])/; + var WINDOWS_BACKSLASHES_RE = /\\(?![!()+@[\]{}])/g; + function unixify(filepath) { + return filepath.replace(/\\/g, "/"); + } + __name(unixify, "unixify"); + exports22.unixify = unixify; + function makeAbsolute(cwd, filepath) { + return path6.resolve(cwd, filepath); + } + __name(makeAbsolute, "makeAbsolute"); + exports22.makeAbsolute = makeAbsolute; + function removeLeadingDotSegment(entry) { + if (entry.charAt(0) === ".") { + const secondCharactery = entry.charAt(1); + if (secondCharactery === "/" || secondCharactery === "\\") { + return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT); + } + } + return entry; + } + __name(removeLeadingDotSegment, "removeLeadingDotSegment"); + exports22.removeLeadingDotSegment = removeLeadingDotSegment; + exports22.escape = IS_WINDOWS_PLATFORM ? escapeWindowsPath : escapePosixPath; + function escapeWindowsPath(pattern) { + return pattern.replace(WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE, "\\$2"); + } + __name(escapeWindowsPath, "escapeWindowsPath"); + exports22.escapeWindowsPath = escapeWindowsPath; + function escapePosixPath(pattern) { + return pattern.replace(POSIX_UNESCAPED_GLOB_SYMBOLS_RE, "\\$2"); + } + __name(escapePosixPath, "escapePosixPath"); + exports22.escapePosixPath = escapePosixPath; + exports22.convertPathToPattern = IS_WINDOWS_PLATFORM ? convertWindowsPathToPattern : convertPosixPathToPattern; + function convertWindowsPathToPattern(filepath) { + return escapeWindowsPath(filepath).replace(DOS_DEVICE_PATH_RE, "//$1").replace(WINDOWS_BACKSLASHES_RE, "/"); + } + __name(convertWindowsPathToPattern, "convertWindowsPathToPattern"); + exports22.convertWindowsPathToPattern = convertWindowsPathToPattern; + function convertPosixPathToPattern(filepath) { + return escapePosixPath(filepath); + } + __name(convertPosixPathToPattern, "convertPosixPathToPattern"); + exports22.convertPosixPathToPattern = convertPosixPathToPattern; + } + }); + var require_is_extglob = __commonJS2({ + "is-extglob/index.js"(exports22, module22) { + module22.exports = /* @__PURE__ */ __name(function isExtglob(str) { + if (typeof str !== "string" || str === "") { + return false; + } + var match; + while (match = /(\\).|([@?!+*]\(.*\))/g.exec(str)) { + if (match[2]) return true; + str = str.slice(match.index + match[0].length); + } + return false; + }, "isExtglob"); + } + }); + var require_is_glob = __commonJS2({ + "is-glob/index.js"(exports22, module22) { + var isExtglob = require_is_extglob(); + var chars = { "{": "}", "(": ")", "[": "]" }; + var strictCheck = /* @__PURE__ */ __name(function(str) { + if (str[0] === "!") { + return true; + } + var index = 0; + var pipeIndex = -2; + var closeSquareIndex = -2; + var closeCurlyIndex = -2; + var closeParenIndex = -2; + var backSlashIndex = -2; + while (index < str.length) { + if (str[index] === "*") { + return true; + } + if (str[index + 1] === "?" && /[\].+)]/.test(str[index])) { + return true; + } + if (closeSquareIndex !== -1 && str[index] === "[" && str[index + 1] !== "]") { + if (closeSquareIndex < index) { + closeSquareIndex = str.indexOf("]", index); + } + if (closeSquareIndex > index) { + if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) { + return true; + } + backSlashIndex = str.indexOf("\\", index); + if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) { + return true; + } + } + } + if (closeCurlyIndex !== -1 && str[index] === "{" && str[index + 1] !== "}") { + closeCurlyIndex = str.indexOf("}", index); + if (closeCurlyIndex > index) { + backSlashIndex = str.indexOf("\\", index); + if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) { + return true; + } + } + } + if (closeParenIndex !== -1 && str[index] === "(" && str[index + 1] === "?" && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ")") { + closeParenIndex = str.indexOf(")", index); + if (closeParenIndex > index) { + backSlashIndex = str.indexOf("\\", index); + if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) { + return true; + } + } + } + if (pipeIndex !== -1 && str[index] === "(" && str[index + 1] !== "|") { + if (pipeIndex < index) { + pipeIndex = str.indexOf("|", index); + } + if (pipeIndex !== -1 && str[pipeIndex + 1] !== ")") { + closeParenIndex = str.indexOf(")", pipeIndex); + if (closeParenIndex > pipeIndex) { + backSlashIndex = str.indexOf("\\", pipeIndex); + if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) { + return true; + } + } + } + } + if (str[index] === "\\") { + var open = str[index + 1]; + index += 2; + var close = chars[open]; + if (close) { + var n = str.indexOf(close, index); + if (n !== -1) { + index = n + 1; + } + } + if (str[index] === "!") { + return true; + } + } else { + index++; + } + } + return false; + }, "strictCheck"); + var relaxedCheck = /* @__PURE__ */ __name(function(str) { + if (str[0] === "!") { + return true; + } + var index = 0; + while (index < str.length) { + if (/[*?{}()[\]]/.test(str[index])) { + return true; + } + if (str[index] === "\\") { + var open = str[index + 1]; + index += 2; + var close = chars[open]; + if (close) { + var n = str.indexOf(close, index); + if (n !== -1) { + index = n + 1; + } + } + if (str[index] === "!") { + return true; + } + } else { + index++; + } + } + return false; + }, "relaxedCheck"); + module22.exports = /* @__PURE__ */ __name(function isGlob2(str, options) { + if (typeof str !== "string" || str === "") { + return false; + } + if (isExtglob(str)) { + return true; + } + var check = strictCheck; + if (options && options.strict === false) { + check = relaxedCheck; + } + return check(str); + }, "isGlob"); + } + }); + var require_glob_parent = __commonJS2({ + "glob-parent/index.js"(exports22, module22) { + "use strict"; + var isGlob2 = require_is_glob(); + var pathPosixDirname = require("path").posix.dirname; + var isWin32 = require("os").platform() === "win32"; + var slash2 = "/"; + var backslash = /\\/g; + var enclosure = /[\{\[].*[\}\]]$/; + var globby2 = /(^|[^\\])([\{\[]|\([^\)]+$)/; + var escaped = /\\([\!\*\?\|\[\]\(\)\{\}])/g; + module22.exports = /* @__PURE__ */ __name(function globParent(str, opts) { + var options = Object.assign({ flipBackslashes: true }, opts); + if (options.flipBackslashes && isWin32 && str.indexOf(slash2) < 0) { + str = str.replace(backslash, slash2); + } + if (enclosure.test(str)) { + str += slash2; + } + str += "a"; + do { + str = pathPosixDirname(str); + } while (isGlob2(str) || globby2.test(str)); + return str.replace(escaped, "$1"); + }, "globParent"); + } + }); + var require_utils2 = __commonJS2({ + "braces/lib/utils.js"(exports22) { + "use strict"; + exports22.isInteger = (num) => { + if (typeof num === "number") { + return Number.isInteger(num); + } + if (typeof num === "string" && num.trim() !== "") { + return Number.isInteger(Number(num)); + } + return false; + }; + exports22.find = (node, type) => node.nodes.find((node2) => node2.type === type); + exports22.exceedsLimit = (min, max, step = 1, limit) => { + if (limit === false) return false; + if (!exports22.isInteger(min) || !exports22.isInteger(max)) return false; + return (Number(max) - Number(min)) / Number(step) >= limit; + }; + exports22.escapeNode = (block, n = 0, type) => { + const node = block.nodes[n]; + if (!node) return; + if (type && node.type === type || node.type === "open" || node.type === "close") { + if (node.escaped !== true) { + node.value = "\\" + node.value; + node.escaped = true; + } + } + }; + exports22.encloseBrace = (node) => { + if (node.type !== "brace") return false; + if (node.commas >> 0 + node.ranges >> 0 === 0) { + node.invalid = true; + return true; + } + return false; + }; + exports22.isInvalidBrace = (block) => { + if (block.type !== "brace") return false; + if (block.invalid === true || block.dollar) return true; + if (block.commas >> 0 + block.ranges >> 0 === 0) { + block.invalid = true; + return true; + } + if (block.open !== true || block.close !== true) { + block.invalid = true; + return true; + } + return false; + }; + exports22.isOpenOrClose = (node) => { + if (node.type === "open" || node.type === "close") { + return true; + } + return node.open === true || node.close === true; + }; + exports22.reduce = (nodes) => nodes.reduce((acc, node) => { + if (node.type === "text") acc.push(node.value); + if (node.type === "range") node.type = "text"; + return acc; + }, []); + exports22.flatten = (...args) => { + const result = []; + const flat = /* @__PURE__ */ __name((arr) => { + for (let i = 0; i < arr.length; i++) { + const ele = arr[i]; + if (Array.isArray(ele)) { + flat(ele); + continue; + } + if (ele !== void 0) { + result.push(ele); + } + } + return result; + }, "flat"); + flat(args); + return result; + }; + } + }); + var require_stringify = __commonJS2({ + "braces/lib/stringify.js"(exports22, module22) { + "use strict"; + var utils = require_utils2(); + module22.exports = (ast, options = {}) => { + const stringify = /* @__PURE__ */ __name((node, parent = {}) => { + const invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent); + const invalidNode = node.invalid === true && options.escapeInvalid === true; + let output = ""; + if (node.value) { + if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) { + return "\\" + node.value; + } + return node.value; + } + if (node.value) { + return node.value; + } + if (node.nodes) { + for (const child of node.nodes) { + output += stringify(child); + } + } + return output; + }, "stringify"); + return stringify(ast); + }; + } + }); + var require_is_number = __commonJS2({ + "is-number/index.js"(exports22, module22) { + "use strict"; + module22.exports = function(num) { + if (typeof num === "number") { + return num - num === 0; + } + if (typeof num === "string" && num.trim() !== "") { + return Number.isFinite ? Number.isFinite(+num) : isFinite(+num); + } + return false; + }; + } + }); + var require_to_regex_range = __commonJS2({ + "to-regex-range/index.js"(exports22, module22) { + "use strict"; + var isNumber = require_is_number(); + var toRegexRange = /* @__PURE__ */ __name((min, max, options) => { + if (isNumber(min) === false) { + throw new TypeError("toRegexRange: expected the first argument to be a number"); + } + if (max === void 0 || min === max) { + return String(min); + } + if (isNumber(max) === false) { + throw new TypeError("toRegexRange: expected the second argument to be a number."); + } + let opts = { relaxZeros: true, ...options }; + if (typeof opts.strictZeros === "boolean") { + opts.relaxZeros = opts.strictZeros === false; + } + let relax = String(opts.relaxZeros); + let shorthand = String(opts.shorthand); + let capture = String(opts.capture); + let wrap = String(opts.wrap); + let cacheKey = min + ":" + max + "=" + relax + shorthand + capture + wrap; + if (toRegexRange.cache.hasOwnProperty(cacheKey)) { + return toRegexRange.cache[cacheKey].result; + } + let a = Math.min(min, max); + let b = Math.max(min, max); + if (Math.abs(a - b) === 1) { + let result = min + "|" + max; + if (opts.capture) { + return `(${result})`; + } + if (opts.wrap === false) { + return result; + } + return `(?:${result})`; + } + let isPadded = hasPadding(min) || hasPadding(max); + let state = { min, max, a, b }; + let positives = []; + let negatives = []; + if (isPadded) { + state.isPadded = isPadded; + state.maxLen = String(state.max).length; + } + if (a < 0) { + let newMin = b < 0 ? Math.abs(b) : 1; + negatives = splitToPatterns(newMin, Math.abs(a), state, opts); + a = state.a = 0; + } + if (b >= 0) { + positives = splitToPatterns(a, b, state, opts); + } + state.negatives = negatives; + state.positives = positives; + state.result = collatePatterns(negatives, positives, opts); + if (opts.capture === true) { + state.result = `(${state.result})`; + } else if (opts.wrap !== false && positives.length + negatives.length > 1) { + state.result = `(?:${state.result})`; + } + toRegexRange.cache[cacheKey] = state; + return state.result; + }, "toRegexRange"); + function collatePatterns(neg, pos, options) { + let onlyNegative = filterPatterns(neg, pos, "-", false, options) || []; + let onlyPositive = filterPatterns(pos, neg, "", false, options) || []; + let intersected = filterPatterns(neg, pos, "-?", true, options) || []; + let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive); + return subpatterns.join("|"); + } + __name(collatePatterns, "collatePatterns"); + function splitToRanges(min, max) { + let nines = 1; + let zeros = 1; + let stop = countNines(min, nines); + let stops = /* @__PURE__ */ new Set([max]); + while (min <= stop && stop <= max) { + stops.add(stop); + nines += 1; + stop = countNines(min, nines); + } + stop = countZeros(max + 1, zeros) - 1; + while (min < stop && stop <= max) { + stops.add(stop); + zeros += 1; + stop = countZeros(max + 1, zeros) - 1; + } + stops = [...stops]; + stops.sort(compare); + return stops; + } + __name(splitToRanges, "splitToRanges"); + function rangeToPattern(start, stop, options) { + if (start === stop) { + return { pattern: start, count: [], digits: 0 }; + } + let zipped = zip(start, stop); + let digits = zipped.length; + let pattern = ""; + let count = 0; + for (let i = 0; i < digits; i++) { + let [startDigit, stopDigit] = zipped[i]; + if (startDigit === stopDigit) { + pattern += startDigit; + } else if (startDigit !== "0" || stopDigit !== "9") { + pattern += toCharacterClass(startDigit, stopDigit, options); + } else { + count++; + } + } + if (count) { + pattern += options.shorthand === true ? "\\d" : "[0-9]"; + } + return { pattern, count: [count], digits }; + } + __name(rangeToPattern, "rangeToPattern"); + function splitToPatterns(min, max, tok, options) { + let ranges = splitToRanges(min, max); + let tokens = []; + let start = min; + let prev; + for (let i = 0; i < ranges.length; i++) { + let max2 = ranges[i]; + let obj = rangeToPattern(String(start), String(max2), options); + let zeros = ""; + if (!tok.isPadded && prev && prev.pattern === obj.pattern) { + if (prev.count.length > 1) { + prev.count.pop(); + } + prev.count.push(obj.count[0]); + prev.string = prev.pattern + toQuantifier(prev.count); + start = max2 + 1; + continue; + } + if (tok.isPadded) { + zeros = padZeros(max2, tok, options); + } + obj.string = zeros + obj.pattern + toQuantifier(obj.count); + tokens.push(obj); + start = max2 + 1; + prev = obj; + } + return tokens; + } + __name(splitToPatterns, "splitToPatterns"); + function filterPatterns(arr, comparison, prefix, intersection, options) { + let result = []; + for (let ele of arr) { + let { string } = ele; + if (!intersection && !contains(comparison, "string", string)) { + result.push(prefix + string); + } + if (intersection && contains(comparison, "string", string)) { + result.push(prefix + string); + } + } + return result; + } + __name(filterPatterns, "filterPatterns"); + function zip(a, b) { + let arr = []; + for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]); + return arr; + } + __name(zip, "zip"); + function compare(a, b) { + return a > b ? 1 : b > a ? -1 : 0; + } + __name(compare, "compare"); + function contains(arr, key, val) { + return arr.some((ele) => ele[key] === val); + } + __name(contains, "contains"); + function countNines(min, len) { + return Number(String(min).slice(0, -len) + "9".repeat(len)); + } + __name(countNines, "countNines"); + function countZeros(integer, zeros) { + return integer - integer % Math.pow(10, zeros); + } + __name(countZeros, "countZeros"); + function toQuantifier(digits) { + let [start = 0, stop = ""] = digits; + if (stop || start > 1) { + return `{${start + (stop ? "," + stop : "")}}`; + } + return ""; + } + __name(toQuantifier, "toQuantifier"); + function toCharacterClass(a, b, options) { + return `[${a}${b - a === 1 ? "" : "-"}${b}]`; + } + __name(toCharacterClass, "toCharacterClass"); + function hasPadding(str) { + return /^-?(0+)\d/.test(str); + } + __name(hasPadding, "hasPadding"); + function padZeros(value, tok, options) { + if (!tok.isPadded) { + return value; + } + let diff = Math.abs(tok.maxLen - String(value).length); + let relax = options.relaxZeros !== false; + switch (diff) { + case 0: + return ""; + case 1: + return relax ? "0?" : "0"; + case 2: + return relax ? "0{0,2}" : "00"; + default: { + return relax ? `0{0,${diff}}` : `0{${diff}}`; + } + } + } + __name(padZeros, "padZeros"); + toRegexRange.cache = {}; + toRegexRange.clearCache = () => toRegexRange.cache = {}; + module22.exports = toRegexRange; + } + }); + var require_fill_range = __commonJS2({ + "fill-range/index.js"(exports22, module22) { + "use strict"; + var util = require("util"); + var toRegexRange = require_to_regex_range(); + var isObject = /* @__PURE__ */ __name((val) => val !== null && typeof val === "object" && !Array.isArray(val), "isObject"); + var transform = /* @__PURE__ */ __name((toNumber) => { + return (value) => toNumber === true ? Number(value) : String(value); + }, "transform"); + var isValidValue = /* @__PURE__ */ __name((value) => { + return typeof value === "number" || typeof value === "string" && value !== ""; + }, "isValidValue"); + var isNumber = /* @__PURE__ */ __name((num) => Number.isInteger(+num), "isNumber"); + var zeros = /* @__PURE__ */ __name((input) => { + let value = `${input}`; + let index = -1; + if (value[0] === "-") value = value.slice(1); + if (value === "0") return false; + while (value[++index] === "0") ; + return index > 0; + }, "zeros"); + var stringify = /* @__PURE__ */ __name((start, end, options) => { + if (typeof start === "string" || typeof end === "string") { + return true; + } + return options.stringify === true; + }, "stringify"); + var pad = /* @__PURE__ */ __name((input, maxLength, toNumber) => { + if (maxLength > 0) { + let dash = input[0] === "-" ? "-" : ""; + if (dash) input = input.slice(1); + input = dash + input.padStart(dash ? maxLength - 1 : maxLength, "0"); + } + if (toNumber === false) { + return String(input); + } + return input; + }, "pad"); + var toMaxLen = /* @__PURE__ */ __name((input, maxLength) => { + let negative = input[0] === "-" ? "-" : ""; + if (negative) { + input = input.slice(1); + maxLength--; + } + while (input.length < maxLength) input = "0" + input; + return negative ? "-" + input : input; + }, "toMaxLen"); + var toSequence = /* @__PURE__ */ __name((parts, options, maxLen) => { + parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0); + parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0); + let prefix = options.capture ? "" : "?:"; + let positives = ""; + let negatives = ""; + let result; + if (parts.positives.length) { + positives = parts.positives.map((v) => toMaxLen(String(v), maxLen)).join("|"); + } + if (parts.negatives.length) { + negatives = `-(${prefix}${parts.negatives.map((v) => toMaxLen(String(v), maxLen)).join("|")})`; + } + if (positives && negatives) { + result = `${positives}|${negatives}`; + } else { + result = positives || negatives; + } + if (options.wrap) { + return `(${prefix}${result})`; + } + return result; + }, "toSequence"); + var toRange = /* @__PURE__ */ __name((a, b, isNumbers, options) => { + if (isNumbers) { + return toRegexRange(a, b, { wrap: false, ...options }); + } + let start = String.fromCharCode(a); + if (a === b) return start; + let stop = String.fromCharCode(b); + return `[${start}-${stop}]`; + }, "toRange"); + var toRegex = /* @__PURE__ */ __name((start, end, options) => { + if (Array.isArray(start)) { + let wrap = options.wrap === true; + let prefix = options.capture ? "" : "?:"; + return wrap ? `(${prefix}${start.join("|")})` : start.join("|"); + } + return toRegexRange(start, end, options); + }, "toRegex"); + var rangeError = /* @__PURE__ */ __name((...args) => { + return new RangeError("Invalid range arguments: " + util.inspect(...args)); + }, "rangeError"); + var invalidRange = /* @__PURE__ */ __name((start, end, options) => { + if (options.strictRanges === true) throw rangeError([start, end]); + return []; + }, "invalidRange"); + var invalidStep = /* @__PURE__ */ __name((step, options) => { + if (options.strictRanges === true) { + throw new TypeError(`Expected step "${step}" to be a number`); + } + return []; + }, "invalidStep"); + var fillNumbers = /* @__PURE__ */ __name((start, end, step = 1, options = {}) => { + let a = Number(start); + let b = Number(end); + if (!Number.isInteger(a) || !Number.isInteger(b)) { + if (options.strictRanges === true) throw rangeError([start, end]); + return []; + } + if (a === 0) a = 0; + if (b === 0) b = 0; + let descending = a > b; + let startString = String(start); + let endString = String(end); + let stepString = String(step); + step = Math.max(Math.abs(step), 1); + let padded = zeros(startString) || zeros(endString) || zeros(stepString); + let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0; + let toNumber = padded === false && stringify(start, end, options) === false; + let format = options.transform || transform(toNumber); + if (options.toRegex && step === 1) { + return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options); + } + let parts = { negatives: [], positives: [] }; + let push = /* @__PURE__ */ __name((num) => parts[num < 0 ? "negatives" : "positives"].push(Math.abs(num)), "push"); + let range = []; + let index = 0; + while (descending ? a >= b : a <= b) { + if (options.toRegex === true && step > 1) { + push(a); + } else { + range.push(pad(format(a, index), maxLen, toNumber)); + } + a = descending ? a - step : a + step; + index++; + } + if (options.toRegex === true) { + return step > 1 ? toSequence(parts, options, maxLen) : toRegex(range, null, { wrap: false, ...options }); + } + return range; + }, "fillNumbers"); + var fillLetters = /* @__PURE__ */ __name((start, end, step = 1, options = {}) => { + if (!isNumber(start) && start.length > 1 || !isNumber(end) && end.length > 1) { + return invalidRange(start, end, options); + } + let format = options.transform || ((val) => String.fromCharCode(val)); + let a = `${start}`.charCodeAt(0); + let b = `${end}`.charCodeAt(0); + let descending = a > b; + let min = Math.min(a, b); + let max = Math.max(a, b); + if (options.toRegex && step === 1) { + return toRange(min, max, false, options); + } + let range = []; + let index = 0; + while (descending ? a >= b : a <= b) { + range.push(format(a, index)); + a = descending ? a - step : a + step; + index++; + } + if (options.toRegex === true) { + return toRegex(range, null, { wrap: false, options }); + } + return range; + }, "fillLetters"); + var fill = /* @__PURE__ */ __name((start, end, step, options = {}) => { + if (end == null && isValidValue(start)) { + return [start]; + } + if (!isValidValue(start) || !isValidValue(end)) { + return invalidRange(start, end, options); + } + if (typeof step === "function") { + return fill(start, end, 1, { transform: step }); + } + if (isObject(step)) { + return fill(start, end, 0, step); + } + let opts = { ...options }; + if (opts.capture === true) opts.wrap = true; + step = step || opts.step || 1; + if (!isNumber(step)) { + if (step != null && !isObject(step)) return invalidStep(step, opts); + return fill(start, end, 1, step); + } + if (isNumber(start) && isNumber(end)) { + return fillNumbers(start, end, step, opts); + } + return fillLetters(start, end, Math.max(Math.abs(step), 1), opts); + }, "fill"); + module22.exports = fill; + } + }); + var require_compile = __commonJS2({ + "braces/lib/compile.js"(exports22, module22) { + "use strict"; + var fill = require_fill_range(); + var utils = require_utils2(); + var compile = /* @__PURE__ */ __name((ast, options = {}) => { + const walk = /* @__PURE__ */ __name((node, parent = {}) => { + const invalidBlock = utils.isInvalidBrace(parent); + const invalidNode = node.invalid === true && options.escapeInvalid === true; + const invalid = invalidBlock === true || invalidNode === true; + const prefix = options.escapeInvalid === true ? "\\" : ""; + let output = ""; + if (node.isOpen === true) { + return prefix + node.value; + } + if (node.isClose === true) { + /* @__PURE__ */ console.log("node.isClose", prefix, node.value); + return prefix + node.value; + } + if (node.type === "open") { + return invalid ? prefix + node.value : "("; + } + if (node.type === "close") { + return invalid ? prefix + node.value : ")"; + } + if (node.type === "comma") { + return node.prev.type === "comma" ? "" : invalid ? node.value : "|"; + } + if (node.value) { + return node.value; + } + if (node.nodes && node.ranges > 0) { + const args = utils.reduce(node.nodes); + const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true }); + if (range.length !== 0) { + return args.length > 1 && range.length > 1 ? `(${range})` : range; + } + } + if (node.nodes) { + for (const child of node.nodes) { + output += walk(child, node); + } + } + return output; + }, "walk"); + return walk(ast); + }, "compile"); + module22.exports = compile; + } + }); + var require_expand = __commonJS2({ + "braces/lib/expand.js"(exports22, module22) { + "use strict"; + var fill = require_fill_range(); + var stringify = require_stringify(); + var utils = require_utils2(); + var append = /* @__PURE__ */ __name((queue = "", stash = "", enclose = false) => { + const result = []; + queue = [].concat(queue); + stash = [].concat(stash); + if (!stash.length) return queue; + if (!queue.length) { + return enclose ? utils.flatten(stash).map((ele) => `{${ele}}`) : stash; + } + for (const item of queue) { + if (Array.isArray(item)) { + for (const value of item) { + result.push(append(value, stash, enclose)); + } + } else { + for (let ele of stash) { + if (enclose === true && typeof ele === "string") ele = `{${ele}}`; + result.push(Array.isArray(ele) ? append(item, ele, enclose) : item + ele); + } + } + } + return utils.flatten(result); + }, "append"); + var expand = /* @__PURE__ */ __name((ast, options = {}) => { + const rangeLimit = options.rangeLimit === void 0 ? 1e3 : options.rangeLimit; + const walk = /* @__PURE__ */ __name((node, parent = {}) => { + node.queue = []; + let p = parent; + let q = parent.queue; + while (p.type !== "brace" && p.type !== "root" && p.parent) { + p = p.parent; + q = p.queue; + } + if (node.invalid || node.dollar) { + q.push(append(q.pop(), stringify(node, options))); + return; + } + if (node.type === "brace" && node.invalid !== true && node.nodes.length === 2) { + q.push(append(q.pop(), ["{}"])); + return; + } + if (node.nodes && node.ranges > 0) { + const args = utils.reduce(node.nodes); + if (utils.exceedsLimit(...args, options.step, rangeLimit)) { + throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit."); + } + let range = fill(...args, options); + if (range.length === 0) { + range = stringify(node, options); + } + q.push(append(q.pop(), range)); + node.nodes = []; + return; + } + const enclose = utils.encloseBrace(node); + let queue = node.queue; + let block = node; + while (block.type !== "brace" && block.type !== "root" && block.parent) { + block = block.parent; + queue = block.queue; + } + for (let i = 0; i < node.nodes.length; i++) { + const child = node.nodes[i]; + if (child.type === "comma" && node.type === "brace") { + if (i === 1) queue.push(""); + queue.push(""); + continue; + } + if (child.type === "close") { + q.push(append(q.pop(), queue, enclose)); + continue; + } + if (child.value && child.type !== "open") { + queue.push(append(queue.pop(), child.value)); + continue; + } + if (child.nodes) { + walk(child, node); + } + } + return queue; + }, "walk"); + return utils.flatten(walk(ast)); + }, "expand"); + module22.exports = expand; + } + }); + var require_constants2 = __commonJS2({ + "braces/lib/constants.js"(exports22, module22) { + "use strict"; + module22.exports = { + MAX_LENGTH: 1e4, + // Digits + CHAR_0: "0", + /* 0 */ + CHAR_9: "9", + /* 9 */ + // Alphabet chars. + CHAR_UPPERCASE_A: "A", + /* A */ + CHAR_LOWERCASE_A: "a", + /* a */ + CHAR_UPPERCASE_Z: "Z", + /* Z */ + CHAR_LOWERCASE_Z: "z", + /* z */ + CHAR_LEFT_PARENTHESES: "(", + /* ( */ + CHAR_RIGHT_PARENTHESES: ")", + /* ) */ + CHAR_ASTERISK: "*", + /* * */ + // Non-alphabetic chars. + CHAR_AMPERSAND: "&", + /* & */ + CHAR_AT: "@", + /* @ */ + CHAR_BACKSLASH: "\\", + /* \ */ + CHAR_BACKTICK: "`", + /* ` */ + CHAR_CARRIAGE_RETURN: "\r", + /* \r */ + CHAR_CIRCUMFLEX_ACCENT: "^", + /* ^ */ + CHAR_COLON: ":", + /* : */ + CHAR_COMMA: ",", + /* , */ + CHAR_DOLLAR: "$", + /* . */ + CHAR_DOT: ".", + /* . */ + CHAR_DOUBLE_QUOTE: '"', + /* " */ + CHAR_EQUAL: "=", + /* = */ + CHAR_EXCLAMATION_MARK: "!", + /* ! */ + CHAR_FORM_FEED: "\f", + /* \f */ + CHAR_FORWARD_SLASH: "/", + /* / */ + CHAR_HASH: "#", + /* # */ + CHAR_HYPHEN_MINUS: "-", + /* - */ + CHAR_LEFT_ANGLE_BRACKET: "<", + /* < */ + CHAR_LEFT_CURLY_BRACE: "{", + /* { */ + CHAR_LEFT_SQUARE_BRACKET: "[", + /* [ */ + CHAR_LINE_FEED: "\n", + /* \n */ + CHAR_NO_BREAK_SPACE: "\xA0", + /* \u00A0 */ + CHAR_PERCENT: "%", + /* % */ + CHAR_PLUS: "+", + /* + */ + CHAR_QUESTION_MARK: "?", + /* ? */ + CHAR_RIGHT_ANGLE_BRACKET: ">", + /* > */ + CHAR_RIGHT_CURLY_BRACE: "}", + /* } */ + CHAR_RIGHT_SQUARE_BRACKET: "]", + /* ] */ + CHAR_SEMICOLON: ";", + /* ; */ + CHAR_SINGLE_QUOTE: "'", + /* ' */ + CHAR_SPACE: " ", + /* */ + CHAR_TAB: " ", + /* \t */ + CHAR_UNDERSCORE: "_", + /* _ */ + CHAR_VERTICAL_LINE: "|", + /* | */ + CHAR_ZERO_WIDTH_NOBREAK_SPACE: "\uFEFF" + /* \uFEFF */ + }; + } + }); + var require_parse22 = __commonJS2({ + "braces/lib/parse.js"(exports22, module22) { + "use strict"; + var stringify = require_stringify(); + var { + MAX_LENGTH, + CHAR_BACKSLASH, + /* \ */ + CHAR_BACKTICK, + /* ` */ + CHAR_COMMA, + /* , */ + CHAR_DOT, + /* . */ + CHAR_LEFT_PARENTHESES, + /* ( */ + CHAR_RIGHT_PARENTHESES, + /* ) */ + CHAR_LEFT_CURLY_BRACE, + /* { */ + CHAR_RIGHT_CURLY_BRACE, + /* } */ + CHAR_LEFT_SQUARE_BRACKET, + /* [ */ + CHAR_RIGHT_SQUARE_BRACKET, + /* ] */ + CHAR_DOUBLE_QUOTE, + /* " */ + CHAR_SINGLE_QUOTE, + /* ' */ + CHAR_NO_BREAK_SPACE, + CHAR_ZERO_WIDTH_NOBREAK_SPACE + } = require_constants2(); + var parse = /* @__PURE__ */ __name((input, options = {}) => { + if (typeof input !== "string") { + throw new TypeError("Expected a string"); + } + const opts = options || {}; + const max = typeof opts.maxLength === "number" ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; + if (input.length > max) { + throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`); + } + const ast = { type: "root", input, nodes: [] }; + const stack = [ast]; + let block = ast; + let prev = ast; + let brackets = 0; + const length = input.length; + let index = 0; + let depth = 0; + let value; + const advance = /* @__PURE__ */ __name(() => input[index++], "advance"); + const push = /* @__PURE__ */ __name((node) => { + if (node.type === "text" && prev.type === "dot") { + prev.type = "text"; + } + if (prev && prev.type === "text" && node.type === "text") { + prev.value += node.value; + return; + } + block.nodes.push(node); + node.parent = block; + node.prev = prev; + prev = node; + return node; + }, "push"); + push({ type: "bos" }); + while (index < length) { + block = stack[stack.length - 1]; + value = advance(); + if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) { + continue; + } + if (value === CHAR_BACKSLASH) { + push({ type: "text", value: (options.keepEscaping ? value : "") + advance() }); + continue; + } + if (value === CHAR_RIGHT_SQUARE_BRACKET) { + push({ type: "text", value: "\\" + value }); + continue; + } + if (value === CHAR_LEFT_SQUARE_BRACKET) { + brackets++; + let next; + while (index < length && (next = advance())) { + value += next; + if (next === CHAR_LEFT_SQUARE_BRACKET) { + brackets++; + continue; + } + if (next === CHAR_BACKSLASH) { + value += advance(); + continue; + } + if (next === CHAR_RIGHT_SQUARE_BRACKET) { + brackets--; + if (brackets === 0) { + break; + } + } + } + push({ type: "text", value }); + continue; + } + if (value === CHAR_LEFT_PARENTHESES) { + block = push({ type: "paren", nodes: [] }); + stack.push(block); + push({ type: "text", value }); + continue; + } + if (value === CHAR_RIGHT_PARENTHESES) { + if (block.type !== "paren") { + push({ type: "text", value }); + continue; + } + block = stack.pop(); + push({ type: "text", value }); + block = stack[stack.length - 1]; + continue; + } + if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) { + const open = value; + let next; + if (options.keepQuotes !== true) { + value = ""; + } + while (index < length && (next = advance())) { + if (next === CHAR_BACKSLASH) { + value += next + advance(); + continue; + } + if (next === open) { + if (options.keepQuotes === true) value += next; + break; + } + value += next; + } + push({ type: "text", value }); + continue; + } + if (value === CHAR_LEFT_CURLY_BRACE) { + depth++; + const dollar = prev.value && prev.value.slice(-1) === "$" || block.dollar === true; + const brace = { + type: "brace", + open: true, + close: false, + dollar, + depth, + commas: 0, + ranges: 0, + nodes: [] + }; + block = push(brace); + stack.push(block); + push({ type: "open", value }); + continue; + } + if (value === CHAR_RIGHT_CURLY_BRACE) { + if (block.type !== "brace") { + push({ type: "text", value }); + continue; + } + const type = "close"; + block = stack.pop(); + block.close = true; + push({ type, value }); + depth--; + block = stack[stack.length - 1]; + continue; + } + if (value === CHAR_COMMA && depth > 0) { + if (block.ranges > 0) { + block.ranges = 0; + const open = block.nodes.shift(); + block.nodes = [open, { type: "text", value: stringify(block) }]; + } + push({ type: "comma", value }); + block.commas++; + continue; + } + if (value === CHAR_DOT && depth > 0 && block.commas === 0) { + const siblings = block.nodes; + if (depth === 0 || siblings.length === 0) { + push({ type: "text", value }); + continue; + } + if (prev.type === "dot") { + block.range = []; + prev.value += value; + prev.type = "range"; + if (block.nodes.length !== 3 && block.nodes.length !== 5) { + block.invalid = true; + block.ranges = 0; + prev.type = "text"; + continue; + } + block.ranges++; + block.args = []; + continue; + } + if (prev.type === "range") { + siblings.pop(); + const before = siblings[siblings.length - 1]; + before.value += prev.value + value; + prev = before; + block.ranges--; + continue; + } + push({ type: "dot", value }); + continue; + } + push({ type: "text", value }); + } + do { + block = stack.pop(); + if (block.type !== "root") { + block.nodes.forEach((node) => { + if (!node.nodes) { + if (node.type === "open") node.isOpen = true; + if (node.type === "close") node.isClose = true; + if (!node.nodes) node.type = "text"; + node.invalid = true; + } + }); + const parent = stack[stack.length - 1]; + const index2 = parent.nodes.indexOf(block); + parent.nodes.splice(index2, 1, ...block.nodes); + } + } while (stack.length > 0); + push({ type: "eos" }); + return ast; + }, "parse"); + module22.exports = parse; + } + }); + var require_braces = __commonJS2({ + "braces/index.js"(exports22, module22) { + "use strict"; + var stringify = require_stringify(); + var compile = require_compile(); + var expand = require_expand(); + var parse = require_parse22(); + var braces = /* @__PURE__ */ __name((input, options = {}) => { + let output = []; + if (Array.isArray(input)) { + for (const pattern of input) { + const result = braces.create(pattern, options); + if (Array.isArray(result)) { + output.push(...result); + } else { + output.push(result); + } + } + } else { + output = [].concat(braces.create(input, options)); + } + if (options && options.expand === true && options.nodupes === true) { + output = [...new Set(output)]; + } + return output; + }, "braces"); + braces.parse = (input, options = {}) => parse(input, options); + braces.stringify = (input, options = {}) => { + if (typeof input === "string") { + return stringify(braces.parse(input, options), options); + } + return stringify(input, options); + }; + braces.compile = (input, options = {}) => { + if (typeof input === "string") { + input = braces.parse(input, options); + } + return compile(input, options); + }; + braces.expand = (input, options = {}) => { + if (typeof input === "string") { + input = braces.parse(input, options); + } + let result = expand(input, options); + if (options.noempty === true) { + result = result.filter(Boolean); + } + if (options.nodupes === true) { + result = [...new Set(result)]; + } + return result; + }; + braces.create = (input, options = {}) => { + if (input === "" || input.length < 3) { + return [input]; + } + return options.expand !== true ? braces.compile(input, options) : braces.expand(input, options); + }; + module22.exports = braces; + } + }); + var require_micromatch = __commonJS2({ + "micromatch/index.js"(exports22, module22) { + "use strict"; + var util = require("util"); + var braces = require_braces(); + var picomatch2 = require_picomatch2(); + var utils = require_utils(); + var isEmptyString = /* @__PURE__ */ __name((v) => v === "" || v === "./", "isEmptyString"); + var hasBraces = /* @__PURE__ */ __name((v) => { + const index = v.indexOf("{"); + return index > -1 && v.indexOf("}", index) > -1; + }, "hasBraces"); + var micromatch = /* @__PURE__ */ __name((list, patterns, options) => { + patterns = [].concat(patterns); + list = [].concat(list); + let omit = /* @__PURE__ */ new Set(); + let keep = /* @__PURE__ */ new Set(); + let items = /* @__PURE__ */ new Set(); + let negatives = 0; + let onResult = /* @__PURE__ */ __name((state) => { + items.add(state.output); + if (options && options.onResult) { + options.onResult(state); + } + }, "onResult"); + for (let i = 0; i < patterns.length; i++) { + let isMatch = picomatch2(String(patterns[i]), { ...options, onResult }, true); + let negated = isMatch.state.negated || isMatch.state.negatedExtglob; + if (negated) negatives++; + for (let item of list) { + let matched = isMatch(item, true); + let match = negated ? !matched.isMatch : matched.isMatch; + if (!match) continue; + if (negated) { + omit.add(matched.output); + } else { + omit.delete(matched.output); + keep.add(matched.output); + } + } + } + let result = negatives === patterns.length ? [...items] : [...keep]; + let matches = result.filter((item) => !omit.has(item)); + if (options && matches.length === 0) { + if (options.failglob === true) { + throw new Error(`No matches found for "${patterns.join(", ")}"`); + } + if (options.nonull === true || options.nullglob === true) { + return options.unescape ? patterns.map((p) => p.replace(/\\/g, "")) : patterns; + } + } + return matches; + }, "micromatch"); + micromatch.match = micromatch; + micromatch.matcher = (pattern, options) => picomatch2(pattern, options); + micromatch.isMatch = (str, patterns, options) => picomatch2(patterns, options)(str); + micromatch.any = micromatch.isMatch; + micromatch.not = (list, patterns, options = {}) => { + patterns = [].concat(patterns).map(String); + let result = /* @__PURE__ */ new Set(); + let items = []; + let onResult = /* @__PURE__ */ __name((state) => { + if (options.onResult) options.onResult(state); + items.push(state.output); + }, "onResult"); + let matches = new Set(micromatch(list, patterns, { ...options, onResult })); + for (let item of items) { + if (!matches.has(item)) { + result.add(item); + } + } + return [...result]; + }; + micromatch.contains = (str, pattern, options) => { + if (typeof str !== "string") { + throw new TypeError(`Expected a string: "${util.inspect(str)}"`); + } + if (Array.isArray(pattern)) { + return pattern.some((p) => micromatch.contains(str, p, options)); + } + if (typeof pattern === "string") { + if (isEmptyString(str) || isEmptyString(pattern)) { + return false; + } + if (str.includes(pattern) || str.startsWith("./") && str.slice(2).includes(pattern)) { + return true; + } + } + return micromatch.isMatch(str, pattern, { ...options, contains: true }); + }; + micromatch.matchKeys = (obj, patterns, options) => { + if (!utils.isObject(obj)) { + throw new TypeError("Expected the first argument to be an object"); + } + let keys = micromatch(Object.keys(obj), patterns, options); + let res = {}; + for (let key of keys) res[key] = obj[key]; + return res; + }; + micromatch.some = (list, patterns, options) => { + let items = [].concat(list); + for (let pattern of [].concat(patterns)) { + let isMatch = picomatch2(String(pattern), options); + if (items.some((item) => isMatch(item))) { + return true; + } + } + return false; + }; + micromatch.every = (list, patterns, options) => { + let items = [].concat(list); + for (let pattern of [].concat(patterns)) { + let isMatch = picomatch2(String(pattern), options); + if (!items.every((item) => isMatch(item))) { + return false; + } + } + return true; + }; + micromatch.all = (str, patterns, options) => { + if (typeof str !== "string") { + throw new TypeError(`Expected a string: "${util.inspect(str)}"`); + } + return [].concat(patterns).every((p) => picomatch2(p, options)(str)); + }; + micromatch.capture = (glob2, input, options) => { + let posix = utils.isWindows(options); + let regex = picomatch2.makeRe(String(glob2), { ...options, capture: true }); + let match = regex.exec(posix ? utils.toPosixSlashes(input) : input); + if (match) { + return match.slice(1).map((v) => v === void 0 ? "" : v); + } + }; + micromatch.makeRe = (...args) => picomatch2.makeRe(...args); + micromatch.scan = (...args) => picomatch2.scan(...args); + micromatch.parse = (patterns, options) => { + let res = []; + for (let pattern of [].concat(patterns || [])) { + for (let str of braces(String(pattern), options)) { + res.push(picomatch2.parse(str, options)); + } + } + return res; + }; + micromatch.braces = (pattern, options) => { + if (typeof pattern !== "string") throw new TypeError("Expected a string"); + if (options && options.nobrace === true || !hasBraces(pattern)) { + return [pattern]; + } + return braces(pattern, options); + }; + micromatch.braceExpand = (pattern, options) => { + if (typeof pattern !== "string") throw new TypeError("Expected a string"); + return micromatch.braces(pattern, { ...options, expand: true }); + }; + micromatch.hasBraces = hasBraces; + module22.exports = micromatch; + } + }); + var require_pattern = __commonJS2({ + "fast-glob/out/utils/pattern.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.isAbsolute = exports22.partitionAbsoluteAndRelative = exports22.removeDuplicateSlashes = exports22.matchAny = exports22.convertPatternsToRe = exports22.makeRe = exports22.getPatternParts = exports22.expandBraceExpansion = exports22.expandPatternsWithBraceExpansion = exports22.isAffectDepthOfReadingPattern = exports22.endsWithSlashGlobStar = exports22.hasGlobStar = exports22.getBaseDirectory = exports22.isPatternRelatedToParentDirectory = exports22.getPatternsOutsideCurrentDirectory = exports22.getPatternsInsideCurrentDirectory = exports22.getPositivePatterns = exports22.getNegativePatterns = exports22.isPositivePattern = exports22.isNegativePattern = exports22.convertToNegativePattern = exports22.convertToPositivePattern = exports22.isDynamicPattern = exports22.isStaticPattern = void 0; + var path6 = require("path"); + var globParent = require_glob_parent(); + var micromatch = require_micromatch(); + var GLOBSTAR = "**"; + var ESCAPE_SYMBOL = "\\"; + var COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/; + var REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\[[^[]*]/; + var REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\([^(]*\|[^|]*\)/; + var GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\([^(]*\)/; + var BRACE_EXPANSION_SEPARATORS_RE = /,|\.\./; + var DOUBLE_SLASH_RE = /(?!^)\/{2,}/g; + function isStaticPattern(pattern, options = {}) { + return !isDynamicPattern2(pattern, options); + } + __name(isStaticPattern, "isStaticPattern"); + exports22.isStaticPattern = isStaticPattern; + function isDynamicPattern2(pattern, options = {}) { + if (pattern === "") { + return false; + } + if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) { + return true; + } + if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) { + return true; + } + if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) { + return true; + } + if (options.braceExpansion !== false && hasBraceExpansion(pattern)) { + return true; + } + return false; + } + __name(isDynamicPattern2, "isDynamicPattern"); + exports22.isDynamicPattern = isDynamicPattern2; + function hasBraceExpansion(pattern) { + const openingBraceIndex = pattern.indexOf("{"); + if (openingBraceIndex === -1) { + return false; + } + const closingBraceIndex = pattern.indexOf("}", openingBraceIndex + 1); + if (closingBraceIndex === -1) { + return false; + } + const braceContent = pattern.slice(openingBraceIndex, closingBraceIndex); + return BRACE_EXPANSION_SEPARATORS_RE.test(braceContent); + } + __name(hasBraceExpansion, "hasBraceExpansion"); + function convertToPositivePattern(pattern) { + return isNegativePattern2(pattern) ? pattern.slice(1) : pattern; + } + __name(convertToPositivePattern, "convertToPositivePattern"); + exports22.convertToPositivePattern = convertToPositivePattern; + function convertToNegativePattern(pattern) { + return "!" + pattern; + } + __name(convertToNegativePattern, "convertToNegativePattern"); + exports22.convertToNegativePattern = convertToNegativePattern; + function isNegativePattern2(pattern) { + return pattern.startsWith("!") && pattern[1] !== "("; + } + __name(isNegativePattern2, "isNegativePattern"); + exports22.isNegativePattern = isNegativePattern2; + function isPositivePattern(pattern) { + return !isNegativePattern2(pattern); + } + __name(isPositivePattern, "isPositivePattern"); + exports22.isPositivePattern = isPositivePattern; + function getNegativePatterns(patterns) { + return patterns.filter(isNegativePattern2); + } + __name(getNegativePatterns, "getNegativePatterns"); + exports22.getNegativePatterns = getNegativePatterns; + function getPositivePatterns(patterns) { + return patterns.filter(isPositivePattern); + } + __name(getPositivePatterns, "getPositivePatterns"); + exports22.getPositivePatterns = getPositivePatterns; + function getPatternsInsideCurrentDirectory(patterns) { + return patterns.filter((pattern) => !isPatternRelatedToParentDirectory(pattern)); + } + __name(getPatternsInsideCurrentDirectory, "getPatternsInsideCurrentDirectory"); + exports22.getPatternsInsideCurrentDirectory = getPatternsInsideCurrentDirectory; + function getPatternsOutsideCurrentDirectory(patterns) { + return patterns.filter(isPatternRelatedToParentDirectory); + } + __name(getPatternsOutsideCurrentDirectory, "getPatternsOutsideCurrentDirectory"); + exports22.getPatternsOutsideCurrentDirectory = getPatternsOutsideCurrentDirectory; + function isPatternRelatedToParentDirectory(pattern) { + return pattern.startsWith("..") || pattern.startsWith("./.."); + } + __name(isPatternRelatedToParentDirectory, "isPatternRelatedToParentDirectory"); + exports22.isPatternRelatedToParentDirectory = isPatternRelatedToParentDirectory; + function getBaseDirectory(pattern) { + return globParent(pattern, { flipBackslashes: false }); + } + __name(getBaseDirectory, "getBaseDirectory"); + exports22.getBaseDirectory = getBaseDirectory; + function hasGlobStar(pattern) { + return pattern.includes(GLOBSTAR); + } + __name(hasGlobStar, "hasGlobStar"); + exports22.hasGlobStar = hasGlobStar; + function endsWithSlashGlobStar(pattern) { + return pattern.endsWith("/" + GLOBSTAR); + } + __name(endsWithSlashGlobStar, "endsWithSlashGlobStar"); + exports22.endsWithSlashGlobStar = endsWithSlashGlobStar; + function isAffectDepthOfReadingPattern(pattern) { + const basename = path6.basename(pattern); + return endsWithSlashGlobStar(pattern) || isStaticPattern(basename); + } + __name(isAffectDepthOfReadingPattern, "isAffectDepthOfReadingPattern"); + exports22.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern; + function expandPatternsWithBraceExpansion(patterns) { + return patterns.reduce((collection, pattern) => { + return collection.concat(expandBraceExpansion(pattern)); + }, []); + } + __name(expandPatternsWithBraceExpansion, "expandPatternsWithBraceExpansion"); + exports22.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion; + function expandBraceExpansion(pattern) { + const patterns = micromatch.braces(pattern, { expand: true, nodupes: true, keepEscaping: true }); + patterns.sort((a, b) => a.length - b.length); + return patterns.filter((pattern2) => pattern2 !== ""); + } + __name(expandBraceExpansion, "expandBraceExpansion"); + exports22.expandBraceExpansion = expandBraceExpansion; + function getPatternParts(pattern, options) { + let { parts } = micromatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true })); + if (parts.length === 0) { + parts = [pattern]; + } + if (parts[0].startsWith("/")) { + parts[0] = parts[0].slice(1); + parts.unshift(""); + } + return parts; + } + __name(getPatternParts, "getPatternParts"); + exports22.getPatternParts = getPatternParts; + function makeRe(pattern, options) { + return micromatch.makeRe(pattern, options); + } + __name(makeRe, "makeRe"); + exports22.makeRe = makeRe; + function convertPatternsToRe(patterns, options) { + return patterns.map((pattern) => makeRe(pattern, options)); + } + __name(convertPatternsToRe, "convertPatternsToRe"); + exports22.convertPatternsToRe = convertPatternsToRe; + function matchAny(entry, patternsRe) { + return patternsRe.some((patternRe) => patternRe.test(entry)); + } + __name(matchAny, "matchAny"); + exports22.matchAny = matchAny; + function removeDuplicateSlashes(pattern) { + return pattern.replace(DOUBLE_SLASH_RE, "/"); + } + __name(removeDuplicateSlashes, "removeDuplicateSlashes"); + exports22.removeDuplicateSlashes = removeDuplicateSlashes; + function partitionAbsoluteAndRelative(patterns) { + const absolute = []; + const relative = []; + for (const pattern of patterns) { + if (isAbsolute(pattern)) { + absolute.push(pattern); + } else { + relative.push(pattern); + } + } + return [absolute, relative]; + } + __name(partitionAbsoluteAndRelative, "partitionAbsoluteAndRelative"); + exports22.partitionAbsoluteAndRelative = partitionAbsoluteAndRelative; + function isAbsolute(pattern) { + return path6.isAbsolute(pattern); + } + __name(isAbsolute, "isAbsolute"); + exports22.isAbsolute = isAbsolute; + } + }); + var require_merge2 = __commonJS2({ + "merge2/index.js"(exports22, module22) { + "use strict"; + var Stream = require("stream"); + var PassThrough = Stream.PassThrough; + var slice = Array.prototype.slice; + module22.exports = merge2; + function merge2() { + const streamsQueue = []; + const args = slice.call(arguments); + let merging = false; + let options = args[args.length - 1]; + if (options && !Array.isArray(options) && options.pipe == null) { + args.pop(); + } else { + options = {}; + } + const doEnd = options.end !== false; + const doPipeError = options.pipeError === true; + if (options.objectMode == null) { + options.objectMode = true; + } + if (options.highWaterMark == null) { + options.highWaterMark = 64 * 1024; + } + const mergedStream = PassThrough(options); + function addStream() { + for (let i = 0, len = arguments.length; i < len; i++) { + streamsQueue.push(pauseStreams(arguments[i], options)); + } + mergeStream(); + return this; + } + __name(addStream, "addStream"); + function mergeStream() { + if (merging) { + return; + } + merging = true; + let streams = streamsQueue.shift(); + if (!streams) { + process.nextTick(endStream2); + return; + } + if (!Array.isArray(streams)) { + streams = [streams]; + } + let pipesCount = streams.length + 1; + function next() { + if (--pipesCount > 0) { + return; + } + merging = false; + mergeStream(); + } + __name(next, "next"); + function pipe(stream) { + function onend() { + stream.removeListener("merge2UnpipeEnd", onend); + stream.removeListener("end", onend); + if (doPipeError) { + stream.removeListener("error", onerror); + } + next(); + } + __name(onend, "onend"); + function onerror(err) { + mergedStream.emit("error", err); + } + __name(onerror, "onerror"); + if (stream._readableState.endEmitted) { + return next(); + } + stream.on("merge2UnpipeEnd", onend); + stream.on("end", onend); + if (doPipeError) { + stream.on("error", onerror); + } + stream.pipe(mergedStream, { end: false }); + stream.resume(); + } + __name(pipe, "pipe"); + for (let i = 0; i < streams.length; i++) { + pipe(streams[i]); + } + next(); + } + __name(mergeStream, "mergeStream"); + function endStream2() { + merging = false; + mergedStream.emit("queueDrain"); + if (doEnd) { + mergedStream.end(); + } + } + __name(endStream2, "endStream"); + mergedStream.setMaxListeners(0); + mergedStream.add = addStream; + mergedStream.on("unpipe", function(stream) { + stream.emit("merge2UnpipeEnd"); + }); + if (args.length) { + addStream.apply(null, args); + } + return mergedStream; + } + __name(merge2, "merge2"); + function pauseStreams(streams, options) { + if (!Array.isArray(streams)) { + if (!streams._readableState && streams.pipe) { + streams = streams.pipe(PassThrough(options)); + } + if (!streams._readableState || !streams.pause || !streams.pipe) { + throw new Error("Only readable stream can be merged."); + } + streams.pause(); + } else { + for (let i = 0, len = streams.length; i < len; i++) { + streams[i] = pauseStreams(streams[i], options); + } + } + return streams; + } + __name(pauseStreams, "pauseStreams"); + } + }); + var require_stream = __commonJS2({ + "fast-glob/out/utils/stream.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.merge = void 0; + var merge2 = require_merge2(); + function merge(streams) { + const mergedStream = merge2(streams); + streams.forEach((stream) => { + stream.once("error", (error) => mergedStream.emit("error", error)); + }); + mergedStream.once("close", () => propagateCloseEventToSources(streams)); + mergedStream.once("end", () => propagateCloseEventToSources(streams)); + return mergedStream; + } + __name(merge, "merge"); + exports22.merge = merge; + function propagateCloseEventToSources(streams) { + streams.forEach((stream) => stream.emit("close")); + } + __name(propagateCloseEventToSources, "propagateCloseEventToSources"); + } + }); + var require_string = __commonJS2({ + "fast-glob/out/utils/string.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.isEmpty = exports22.isString = void 0; + function isString(input) { + return typeof input === "string"; + } + __name(isString, "isString"); + exports22.isString = isString; + function isEmpty(input) { + return input === ""; + } + __name(isEmpty, "isEmpty"); + exports22.isEmpty = isEmpty; + } + }); + var require_utils3 = __commonJS2({ + "fast-glob/out/utils/index.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.string = exports22.stream = exports22.pattern = exports22.path = exports22.fs = exports22.errno = exports22.array = void 0; + var array = require_array(); + exports22.array = array; + var errno = require_errno(); + exports22.errno = errno; + var fs5 = require_fs2(); + exports22.fs = fs5; + var path6 = require_path(); + exports22.path = path6; + var pattern = require_pattern(); + exports22.pattern = pattern; + var stream = require_stream(); + exports22.stream = stream; + var string = require_string(); + exports22.string = string; + } + }); + var require_tasks = __commonJS2({ + "fast-glob/out/managers/tasks.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.convertPatternGroupToTask = exports22.convertPatternGroupsToTasks = exports22.groupPatternsByBaseDirectory = exports22.getNegativePatternsAsPositive = exports22.getPositivePatterns = exports22.convertPatternsToTasks = exports22.generate = void 0; + var utils = require_utils3(); + function generate(input, settings) { + const patterns = processPatterns(input, settings); + const ignore = processPatterns(settings.ignore, settings); + const positivePatterns = getPositivePatterns(patterns); + const negativePatterns = getNegativePatternsAsPositive(patterns, ignore); + const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings)); + const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings)); + const staticTasks = convertPatternsToTasks( + staticPatterns, + negativePatterns, + /* dynamic */ + false + ); + const dynamicTasks = convertPatternsToTasks( + dynamicPatterns, + negativePatterns, + /* dynamic */ + true + ); + return staticTasks.concat(dynamicTasks); + } + __name(generate, "generate"); + exports22.generate = generate; + function processPatterns(input, settings) { + let patterns = input; + if (settings.braceExpansion) { + patterns = utils.pattern.expandPatternsWithBraceExpansion(patterns); + } + if (settings.baseNameMatch) { + patterns = patterns.map((pattern) => pattern.includes("/") ? pattern : `**/${pattern}`); + } + return patterns.map((pattern) => utils.pattern.removeDuplicateSlashes(pattern)); + } + __name(processPatterns, "processPatterns"); + function convertPatternsToTasks(positive, negative, dynamic) { + const tasks = []; + const patternsOutsideCurrentDirectory = utils.pattern.getPatternsOutsideCurrentDirectory(positive); + const patternsInsideCurrentDirectory = utils.pattern.getPatternsInsideCurrentDirectory(positive); + const outsideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsOutsideCurrentDirectory); + const insideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsInsideCurrentDirectory); + tasks.push(...convertPatternGroupsToTasks(outsideCurrentDirectoryGroup, negative, dynamic)); + if ("." in insideCurrentDirectoryGroup) { + tasks.push(convertPatternGroupToTask(".", patternsInsideCurrentDirectory, negative, dynamic)); + } else { + tasks.push(...convertPatternGroupsToTasks(insideCurrentDirectoryGroup, negative, dynamic)); + } + return tasks; + } + __name(convertPatternsToTasks, "convertPatternsToTasks"); + exports22.convertPatternsToTasks = convertPatternsToTasks; + function getPositivePatterns(patterns) { + return utils.pattern.getPositivePatterns(patterns); + } + __name(getPositivePatterns, "getPositivePatterns"); + exports22.getPositivePatterns = getPositivePatterns; + function getNegativePatternsAsPositive(patterns, ignore) { + const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore); + const positive = negative.map(utils.pattern.convertToPositivePattern); + return positive; + } + __name(getNegativePatternsAsPositive, "getNegativePatternsAsPositive"); + exports22.getNegativePatternsAsPositive = getNegativePatternsAsPositive; + function groupPatternsByBaseDirectory(patterns) { + const group = {}; + return patterns.reduce((collection, pattern) => { + const base = utils.pattern.getBaseDirectory(pattern); + if (base in collection) { + collection[base].push(pattern); + } else { + collection[base] = [pattern]; + } + return collection; + }, group); + } + __name(groupPatternsByBaseDirectory, "groupPatternsByBaseDirectory"); + exports22.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory; + function convertPatternGroupsToTasks(positive, negative, dynamic) { + return Object.keys(positive).map((base) => { + return convertPatternGroupToTask(base, positive[base], negative, dynamic); + }); + } + __name(convertPatternGroupsToTasks, "convertPatternGroupsToTasks"); + exports22.convertPatternGroupsToTasks = convertPatternGroupsToTasks; + function convertPatternGroupToTask(base, positive, negative, dynamic) { + return { + dynamic, + positive, + negative, + base, + patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern)) + }; + } + __name(convertPatternGroupToTask, "convertPatternGroupToTask"); + exports22.convertPatternGroupToTask = convertPatternGroupToTask; + } + }); + var require_async = __commonJS2({ + "@nodelib/fs.stat/out/providers/async.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.read = void 0; + function read(path6, settings, callback) { + settings.fs.lstat(path6, (lstatError, lstat) => { + if (lstatError !== null) { + callFailureCallback(callback, lstatError); + return; + } + if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) { + callSuccessCallback(callback, lstat); + return; + } + settings.fs.stat(path6, (statError, stat) => { + if (statError !== null) { + if (settings.throwErrorOnBrokenSymbolicLink) { + callFailureCallback(callback, statError); + return; + } + callSuccessCallback(callback, lstat); + return; + } + if (settings.markSymbolicLink) { + stat.isSymbolicLink = () => true; + } + callSuccessCallback(callback, stat); + }); + }); + } + __name(read, "read"); + exports22.read = read; + function callFailureCallback(callback, error) { + callback(error); + } + __name(callFailureCallback, "callFailureCallback"); + function callSuccessCallback(callback, result) { + callback(null, result); + } + __name(callSuccessCallback, "callSuccessCallback"); + } + }); + var require_sync = __commonJS2({ + "@nodelib/fs.stat/out/providers/sync.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.read = void 0; + function read(path6, settings) { + const lstat = settings.fs.lstatSync(path6); + if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) { + return lstat; + } + try { + const stat = settings.fs.statSync(path6); + if (settings.markSymbolicLink) { + stat.isSymbolicLink = () => true; + } + return stat; + } catch (error) { + if (!settings.throwErrorOnBrokenSymbolicLink) { + return lstat; + } + throw error; + } + } + __name(read, "read"); + exports22.read = read; + } + }); + var require_fs22 = __commonJS2({ + "@nodelib/fs.stat/out/adapters/fs.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.createFileSystemAdapter = exports22.FILE_SYSTEM_ADAPTER = void 0; + var fs5 = require("fs"); + exports22.FILE_SYSTEM_ADAPTER = { + lstat: fs5.lstat, + stat: fs5.stat, + lstatSync: fs5.lstatSync, + statSync: fs5.statSync + }; + function createFileSystemAdapter(fsMethods) { + if (fsMethods === void 0) { + return exports22.FILE_SYSTEM_ADAPTER; + } + return Object.assign(Object.assign({}, exports22.FILE_SYSTEM_ADAPTER), fsMethods); + } + __name(createFileSystemAdapter, "createFileSystemAdapter"); + exports22.createFileSystemAdapter = createFileSystemAdapter; + } + }); + var require_settings = __commonJS2({ + "@nodelib/fs.stat/out/settings.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var fs5 = require_fs22(); + var Settings = class { + static { + __name(this, "Settings"); + } + constructor(_options = {}) { + this._options = _options; + this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true); + this.fs = fs5.createFileSystemAdapter(this._options.fs); + this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false); + this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true); + } + _getValue(option, value) { + return option !== null && option !== void 0 ? option : value; + } + }; + exports22.default = Settings; + } + }); + var require_out = __commonJS2({ + "@nodelib/fs.stat/out/index.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.statSync = exports22.stat = exports22.Settings = void 0; + var async = require_async(); + var sync = require_sync(); + var settings_1 = require_settings(); + exports22.Settings = settings_1.default; + function stat(path6, optionsOrSettingsOrCallback, callback) { + if (typeof optionsOrSettingsOrCallback === "function") { + async.read(path6, getSettings(), optionsOrSettingsOrCallback); + return; + } + async.read(path6, getSettings(optionsOrSettingsOrCallback), callback); + } + __name(stat, "stat"); + exports22.stat = stat; + function statSync(path6, optionsOrSettings) { + const settings = getSettings(optionsOrSettings); + return sync.read(path6, settings); + } + __name(statSync, "statSync"); + exports22.statSync = statSync; + function getSettings(settingsOrOptions = {}) { + if (settingsOrOptions instanceof settings_1.default) { + return settingsOrOptions; + } + return new settings_1.default(settingsOrOptions); + } + __name(getSettings, "getSettings"); + } + }); + var require_queue_microtask = __commonJS2({ + "queue-microtask/index.js"(exports22, module22) { + var promise; + module22.exports = typeof queueMicrotask === "function" ? queueMicrotask.bind(false ? void 0 : global) : (cb) => (promise || (promise = Promise.resolve())).then(cb).catch((err) => setTimeout(() => { + throw err; + }, 0)); + } + }); + var require_run_parallel = __commonJS2({ + "run-parallel/index.js"(exports22, module22) { + module22.exports = runParallel; + var queueMicrotask2 = require_queue_microtask(); + function runParallel(tasks, cb) { + let results, pending, keys; + let isSync = true; + if (Array.isArray(tasks)) { + results = []; + pending = tasks.length; + } else { + keys = Object.keys(tasks); + results = {}; + pending = keys.length; + } + function done(err) { + function end() { + if (cb) cb(err, results); + cb = null; + } + __name(end, "end"); + if (isSync) queueMicrotask2(end); + else end(); + } + __name(done, "done"); + function each(i, err, result) { + results[i] = result; + if (--pending === 0 || err) { + done(err); + } + } + __name(each, "each"); + if (!pending) { + done(null); + } else if (keys) { + keys.forEach(function(key) { + tasks[key](function(err, result) { + each(key, err, result); + }); + }); + } else { + tasks.forEach(function(task, i) { + task(function(err, result) { + each(i, err, result); + }); + }); + } + isSync = false; + } + __name(runParallel, "runParallel"); + } + }); + var require_constants3 = __commonJS2({ + "@nodelib/fs.scandir/out/constants.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.IS_SUPPORT_READDIR_WITH_FILE_TYPES = void 0; + var NODE_PROCESS_VERSION_PARTS = process.versions.node.split("."); + if (NODE_PROCESS_VERSION_PARTS[0] === void 0 || NODE_PROCESS_VERSION_PARTS[1] === void 0) { + throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`); + } + var MAJOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[0], 10); + var MINOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[1], 10); + var SUPPORTED_MAJOR_VERSION = 10; + var SUPPORTED_MINOR_VERSION = 10; + var IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION; + var IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION; + exports22.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR; + } + }); + var require_fs3 = __commonJS2({ + "@nodelib/fs.scandir/out/utils/fs.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.createDirentFromStats = void 0; + var DirentFromStats = class { + static { + __name(this, "DirentFromStats"); + } + constructor(name, stats) { + this.name = name; + this.isBlockDevice = stats.isBlockDevice.bind(stats); + this.isCharacterDevice = stats.isCharacterDevice.bind(stats); + this.isDirectory = stats.isDirectory.bind(stats); + this.isFIFO = stats.isFIFO.bind(stats); + this.isFile = stats.isFile.bind(stats); + this.isSocket = stats.isSocket.bind(stats); + this.isSymbolicLink = stats.isSymbolicLink.bind(stats); + } + }; + function createDirentFromStats(name, stats) { + return new DirentFromStats(name, stats); + } + __name(createDirentFromStats, "createDirentFromStats"); + exports22.createDirentFromStats = createDirentFromStats; + } + }); + var require_utils4 = __commonJS2({ + "@nodelib/fs.scandir/out/utils/index.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.fs = void 0; + var fs5 = require_fs3(); + exports22.fs = fs5; + } + }); + var require_common = __commonJS2({ + "@nodelib/fs.scandir/out/providers/common.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.joinPathSegments = void 0; + function joinPathSegments(a, b, separator) { + if (a.endsWith(separator)) { + return a + b; + } + return a + separator + b; + } + __name(joinPathSegments, "joinPathSegments"); + exports22.joinPathSegments = joinPathSegments; + } + }); + var require_async2 = __commonJS2({ + "@nodelib/fs.scandir/out/providers/async.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.readdir = exports22.readdirWithFileTypes = exports22.read = void 0; + var fsStat = require_out(); + var rpl = require_run_parallel(); + var constants_1 = require_constants3(); + var utils = require_utils4(); + var common = require_common(); + function read(directory, settings, callback) { + if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) { + readdirWithFileTypes(directory, settings, callback); + return; + } + readdir(directory, settings, callback); + } + __name(read, "read"); + exports22.read = read; + function readdirWithFileTypes(directory, settings, callback) { + settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => { + if (readdirError !== null) { + callFailureCallback(callback, readdirError); + return; + } + const entries = dirents.map((dirent) => ({ + dirent, + name: dirent.name, + path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator) + })); + if (!settings.followSymbolicLinks) { + callSuccessCallback(callback, entries); + return; + } + const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings)); + rpl(tasks, (rplError, rplEntries) => { + if (rplError !== null) { + callFailureCallback(callback, rplError); + return; + } + callSuccessCallback(callback, rplEntries); + }); + }); + } + __name(readdirWithFileTypes, "readdirWithFileTypes"); + exports22.readdirWithFileTypes = readdirWithFileTypes; + function makeRplTaskEntry(entry, settings) { + return (done) => { + if (!entry.dirent.isSymbolicLink()) { + done(null, entry); + return; + } + settings.fs.stat(entry.path, (statError, stats) => { + if (statError !== null) { + if (settings.throwErrorOnBrokenSymbolicLink) { + done(statError); + return; + } + done(null, entry); + return; + } + entry.dirent = utils.fs.createDirentFromStats(entry.name, stats); + done(null, entry); + }); + }; + } + __name(makeRplTaskEntry, "makeRplTaskEntry"); + function readdir(directory, settings, callback) { + settings.fs.readdir(directory, (readdirError, names) => { + if (readdirError !== null) { + callFailureCallback(callback, readdirError); + return; + } + const tasks = names.map((name) => { + const path6 = common.joinPathSegments(directory, name, settings.pathSegmentSeparator); + return (done) => { + fsStat.stat(path6, settings.fsStatSettings, (error, stats) => { + if (error !== null) { + done(error); + return; + } + const entry = { + name, + path: path6, + dirent: utils.fs.createDirentFromStats(name, stats) + }; + if (settings.stats) { + entry.stats = stats; + } + done(null, entry); + }); + }; + }); + rpl(tasks, (rplError, entries) => { + if (rplError !== null) { + callFailureCallback(callback, rplError); + return; + } + callSuccessCallback(callback, entries); + }); + }); + } + __name(readdir, "readdir"); + exports22.readdir = readdir; + function callFailureCallback(callback, error) { + callback(error); + } + __name(callFailureCallback, "callFailureCallback"); + function callSuccessCallback(callback, result) { + callback(null, result); + } + __name(callSuccessCallback, "callSuccessCallback"); + } + }); + var require_sync2 = __commonJS2({ + "@nodelib/fs.scandir/out/providers/sync.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.readdir = exports22.readdirWithFileTypes = exports22.read = void 0; + var fsStat = require_out(); + var constants_1 = require_constants3(); + var utils = require_utils4(); + var common = require_common(); + function read(directory, settings) { + if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) { + return readdirWithFileTypes(directory, settings); + } + return readdir(directory, settings); + } + __name(read, "read"); + exports22.read = read; + function readdirWithFileTypes(directory, settings) { + const dirents = settings.fs.readdirSync(directory, { withFileTypes: true }); + return dirents.map((dirent) => { + const entry = { + dirent, + name: dirent.name, + path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator) + }; + if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) { + try { + const stats = settings.fs.statSync(entry.path); + entry.dirent = utils.fs.createDirentFromStats(entry.name, stats); + } catch (error) { + if (settings.throwErrorOnBrokenSymbolicLink) { + throw error; + } + } + } + return entry; + }); + } + __name(readdirWithFileTypes, "readdirWithFileTypes"); + exports22.readdirWithFileTypes = readdirWithFileTypes; + function readdir(directory, settings) { + const names = settings.fs.readdirSync(directory); + return names.map((name) => { + const entryPath = common.joinPathSegments(directory, name, settings.pathSegmentSeparator); + const stats = fsStat.statSync(entryPath, settings.fsStatSettings); + const entry = { + name, + path: entryPath, + dirent: utils.fs.createDirentFromStats(name, stats) + }; + if (settings.stats) { + entry.stats = stats; + } + return entry; + }); + } + __name(readdir, "readdir"); + exports22.readdir = readdir; + } + }); + var require_fs4 = __commonJS2({ + "@nodelib/fs.scandir/out/adapters/fs.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.createFileSystemAdapter = exports22.FILE_SYSTEM_ADAPTER = void 0; + var fs5 = require("fs"); + exports22.FILE_SYSTEM_ADAPTER = { + lstat: fs5.lstat, + stat: fs5.stat, + lstatSync: fs5.lstatSync, + statSync: fs5.statSync, + readdir: fs5.readdir, + readdirSync: fs5.readdirSync + }; + function createFileSystemAdapter(fsMethods) { + if (fsMethods === void 0) { + return exports22.FILE_SYSTEM_ADAPTER; + } + return Object.assign(Object.assign({}, exports22.FILE_SYSTEM_ADAPTER), fsMethods); + } + __name(createFileSystemAdapter, "createFileSystemAdapter"); + exports22.createFileSystemAdapter = createFileSystemAdapter; + } + }); + var require_settings2 = __commonJS2({ + "@nodelib/fs.scandir/out/settings.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var path6 = require("path"); + var fsStat = require_out(); + var fs5 = require_fs4(); + var Settings = class { + static { + __name(this, "Settings"); + } + constructor(_options = {}) { + this._options = _options; + this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false); + this.fs = fs5.createFileSystemAdapter(this._options.fs); + this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path6.sep); + this.stats = this._getValue(this._options.stats, false); + this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true); + this.fsStatSettings = new fsStat.Settings({ + followSymbolicLink: this.followSymbolicLinks, + fs: this.fs, + throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink + }); + } + _getValue(option, value) { + return option !== null && option !== void 0 ? option : value; + } + }; + exports22.default = Settings; + } + }); + var require_out2 = __commonJS2({ + "@nodelib/fs.scandir/out/index.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.Settings = exports22.scandirSync = exports22.scandir = void 0; + var async = require_async2(); + var sync = require_sync2(); + var settings_1 = require_settings2(); + exports22.Settings = settings_1.default; + function scandir(path6, optionsOrSettingsOrCallback, callback) { + if (typeof optionsOrSettingsOrCallback === "function") { + async.read(path6, getSettings(), optionsOrSettingsOrCallback); + return; + } + async.read(path6, getSettings(optionsOrSettingsOrCallback), callback); + } + __name(scandir, "scandir"); + exports22.scandir = scandir; + function scandirSync(path6, optionsOrSettings) { + const settings = getSettings(optionsOrSettings); + return sync.read(path6, settings); + } + __name(scandirSync, "scandirSync"); + exports22.scandirSync = scandirSync; + function getSettings(settingsOrOptions = {}) { + if (settingsOrOptions instanceof settings_1.default) { + return settingsOrOptions; + } + return new settings_1.default(settingsOrOptions); + } + __name(getSettings, "getSettings"); + } + }); + var require_reusify = __commonJS2({ + "reusify/reusify.js"(exports22, module22) { + "use strict"; + function reusify(Constructor) { + var head = new Constructor(); + var tail = head; + function get() { + var current = head; + if (current.next) { + head = current.next; + } else { + head = new Constructor(); + tail = head; + } + current.next = null; + return current; + } + __name(get, "get"); + function release(obj) { + tail.next = obj; + tail = obj; + } + __name(release, "release"); + return { + get, + release + }; + } + __name(reusify, "reusify"); + module22.exports = reusify; + } + }); + var require_queue = __commonJS2({ + "fastq/queue.js"(exports22, module22) { + "use strict"; + var reusify = require_reusify(); + function fastqueue(context, worker, _concurrency) { + if (typeof context === "function") { + _concurrency = worker; + worker = context; + context = null; + } + if (!(_concurrency >= 1)) { + throw new Error("fastqueue concurrency must be equal to or greater than 1"); + } + var cache = reusify(Task); + var queueHead = null; + var queueTail = null; + var _running = 0; + var errorHandler = null; + var self = { + push, + drain: noop2, + saturated: noop2, + pause, + paused: false, + get concurrency() { + return _concurrency; + }, + set concurrency(value) { + if (!(value >= 1)) { + throw new Error("fastqueue concurrency must be equal to or greater than 1"); + } + _concurrency = value; + if (self.paused) return; + for (; queueHead && _running < _concurrency; ) { + _running++; + release(); + } + }, + running, + resume, + idle, + length, + getQueue, + unshift, + empty: noop2, + kill, + killAndDrain, + error, + abort + }; + return self; + function running() { + return _running; + } + __name(running, "running"); + function pause() { + self.paused = true; + } + __name(pause, "pause"); + function length() { + var current = queueHead; + var counter = 0; + while (current) { + current = current.next; + counter++; + } + return counter; + } + __name(length, "length"); + function getQueue() { + var current = queueHead; + var tasks = []; + while (current) { + tasks.push(current.value); + current = current.next; + } + return tasks; + } + __name(getQueue, "getQueue"); + function resume() { + if (!self.paused) return; + self.paused = false; + if (queueHead === null) { + _running++; + release(); + return; + } + for (; queueHead && _running < _concurrency; ) { + _running++; + release(); + } + } + __name(resume, "resume"); + function idle() { + return _running === 0 && self.length() === 0; + } + __name(idle, "idle"); + function push(value, done) { + var current = cache.get(); + current.context = context; + current.release = release; + current.value = value; + current.callback = done || noop2; + current.errorHandler = errorHandler; + if (_running >= _concurrency || self.paused) { + if (queueTail) { + queueTail.next = current; + queueTail = current; + } else { + queueHead = current; + queueTail = current; + self.saturated(); + } + } else { + _running++; + worker.call(context, current.value, current.worked); + } + } + __name(push, "push"); + function unshift(value, done) { + var current = cache.get(); + current.context = context; + current.release = release; + current.value = value; + current.callback = done || noop2; + current.errorHandler = errorHandler; + if (_running >= _concurrency || self.paused) { + if (queueHead) { + current.next = queueHead; + queueHead = current; + } else { + queueHead = current; + queueTail = current; + self.saturated(); + } + } else { + _running++; + worker.call(context, current.value, current.worked); + } + } + __name(unshift, "unshift"); + function release(holder) { + if (holder) { + cache.release(holder); + } + var next = queueHead; + if (next && _running <= _concurrency) { + if (!self.paused) { + if (queueTail === queueHead) { + queueTail = null; + } + queueHead = next.next; + next.next = null; + worker.call(context, next.value, next.worked); + if (queueTail === null) { + self.empty(); + } + } else { + _running--; + } + } else if (--_running === 0) { + self.drain(); + } + } + __name(release, "release"); + function kill() { + queueHead = null; + queueTail = null; + self.drain = noop2; + } + __name(kill, "kill"); + function killAndDrain() { + queueHead = null; + queueTail = null; + self.drain(); + self.drain = noop2; + } + __name(killAndDrain, "killAndDrain"); + function abort() { + var current = queueHead; + queueHead = null; + queueTail = null; + while (current) { + var next = current.next; + var callback = current.callback; + var errorHandler2 = current.errorHandler; + var val = current.value; + var context2 = current.context; + current.value = null; + current.callback = noop2; + current.errorHandler = null; + if (errorHandler2) { + errorHandler2(new Error("abort"), val); + } + callback.call(context2, new Error("abort")); + current.release(current); + current = next; + } + self.drain = noop2; + } + __name(abort, "abort"); + function error(handler) { + errorHandler = handler; + } + __name(error, "error"); + } + __name(fastqueue, "fastqueue"); + function noop2() { + } + __name(noop2, "noop"); + function Task() { + this.value = null; + this.callback = noop2; + this.next = null; + this.release = noop2; + this.context = null; + this.errorHandler = null; + var self = this; + this.worked = /* @__PURE__ */ __name(function worked(err, result) { + var callback = self.callback; + var errorHandler = self.errorHandler; + var val = self.value; + self.value = null; + self.callback = noop2; + if (self.errorHandler) { + errorHandler(err, val); + } + callback.call(self.context, err, result); + self.release(self); + }, "worked"); + } + __name(Task, "Task"); + function queueAsPromised(context, worker, _concurrency) { + if (typeof context === "function") { + _concurrency = worker; + worker = context; + context = null; + } + function asyncWrapper(arg, cb) { + worker.call(this, arg).then(function(res) { + cb(null, res); + }, cb); + } + __name(asyncWrapper, "asyncWrapper"); + var queue = fastqueue(context, asyncWrapper, _concurrency); + var pushCb = queue.push; + var unshiftCb = queue.unshift; + queue.push = push; + queue.unshift = unshift; + queue.drained = drained; + return queue; + function push(value) { + var p = new Promise(function(resolve, reject) { + pushCb(value, function(err, result) { + if (err) { + reject(err); + return; + } + resolve(result); + }); + }); + p.catch(noop2); + return p; + } + __name(push, "push"); + function unshift(value) { + var p = new Promise(function(resolve, reject) { + unshiftCb(value, function(err, result) { + if (err) { + reject(err); + return; + } + resolve(result); + }); + }); + p.catch(noop2); + return p; + } + __name(unshift, "unshift"); + function drained() { + var p = new Promise(function(resolve) { + process.nextTick(function() { + if (queue.idle()) { + resolve(); + } else { + var previousDrain = queue.drain; + queue.drain = function() { + if (typeof previousDrain === "function") previousDrain(); + resolve(); + queue.drain = previousDrain; + }; + } + }); + }); + return p; + } + __name(drained, "drained"); + } + __name(queueAsPromised, "queueAsPromised"); + module22.exports = fastqueue; + module22.exports.promise = queueAsPromised; + } + }); + var require_common2 = __commonJS2({ + "@nodelib/fs.walk/out/readers/common.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.joinPathSegments = exports22.replacePathSegmentSeparator = exports22.isAppliedFilter = exports22.isFatalError = void 0; + function isFatalError(settings, error) { + if (settings.errorFilter === null) { + return true; + } + return !settings.errorFilter(error); + } + __name(isFatalError, "isFatalError"); + exports22.isFatalError = isFatalError; + function isAppliedFilter(filter, value) { + return filter === null || filter(value); + } + __name(isAppliedFilter, "isAppliedFilter"); + exports22.isAppliedFilter = isAppliedFilter; + function replacePathSegmentSeparator(filepath, separator) { + return filepath.split(/[/\\]/).join(separator); + } + __name(replacePathSegmentSeparator, "replacePathSegmentSeparator"); + exports22.replacePathSegmentSeparator = replacePathSegmentSeparator; + function joinPathSegments(a, b, separator) { + if (a === "") { + return b; + } + if (a.endsWith(separator)) { + return a + b; + } + return a + separator + b; + } + __name(joinPathSegments, "joinPathSegments"); + exports22.joinPathSegments = joinPathSegments; + } + }); + var require_reader = __commonJS2({ + "@nodelib/fs.walk/out/readers/reader.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var common = require_common2(); + var Reader = class { + static { + __name(this, "Reader"); + } + constructor(_root, _settings) { + this._root = _root; + this._settings = _settings; + this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator); + } + }; + exports22.default = Reader; + } + }); + var require_async3 = __commonJS2({ + "@nodelib/fs.walk/out/readers/async.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var events_1 = require("events"); + var fsScandir = require_out2(); + var fastq = require_queue(); + var common = require_common2(); + var reader_1 = require_reader(); + var AsyncReader = class extends reader_1.default { + static { + __name(this, "AsyncReader"); + } + constructor(_root, _settings) { + super(_root, _settings); + this._settings = _settings; + this._scandir = fsScandir.scandir; + this._emitter = new events_1.EventEmitter(); + this._queue = fastq(this._worker.bind(this), this._settings.concurrency); + this._isFatalError = false; + this._isDestroyed = false; + this._queue.drain = () => { + if (!this._isFatalError) { + this._emitter.emit("end"); + } + }; + } + read() { + this._isFatalError = false; + this._isDestroyed = false; + setImmediate(() => { + this._pushToQueue(this._root, this._settings.basePath); + }); + return this._emitter; + } + get isDestroyed() { + return this._isDestroyed; + } + destroy() { + if (this._isDestroyed) { + throw new Error("The reader is already destroyed"); + } + this._isDestroyed = true; + this._queue.killAndDrain(); + } + onEntry(callback) { + this._emitter.on("entry", callback); + } + onError(callback) { + this._emitter.once("error", callback); + } + onEnd(callback) { + this._emitter.once("end", callback); + } + _pushToQueue(directory, base) { + const queueItem = { directory, base }; + this._queue.push(queueItem, (error) => { + if (error !== null) { + this._handleError(error); + } + }); + } + _worker(item, done) { + this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => { + if (error !== null) { + done(error, void 0); + return; + } + for (const entry of entries) { + this._handleEntry(entry, item.base); + } + done(null, void 0); + }); + } + _handleError(error) { + if (this._isDestroyed || !common.isFatalError(this._settings, error)) { + return; + } + this._isFatalError = true; + this._isDestroyed = true; + this._emitter.emit("error", error); + } + _handleEntry(entry, base) { + if (this._isDestroyed || this._isFatalError) { + return; + } + const fullpath = entry.path; + if (base !== void 0) { + entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator); + } + if (common.isAppliedFilter(this._settings.entryFilter, entry)) { + this._emitEntry(entry); + } + if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) { + this._pushToQueue(fullpath, base === void 0 ? void 0 : entry.path); + } + } + _emitEntry(entry) { + this._emitter.emit("entry", entry); + } + }; + exports22.default = AsyncReader; + } + }); + var require_async4 = __commonJS2({ + "@nodelib/fs.walk/out/providers/async.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var async_1 = require_async3(); + var AsyncProvider = class { + static { + __name(this, "AsyncProvider"); + } + constructor(_root, _settings) { + this._root = _root; + this._settings = _settings; + this._reader = new async_1.default(this._root, this._settings); + this._storage = []; + } + read(callback) { + this._reader.onError((error) => { + callFailureCallback(callback, error); + }); + this._reader.onEntry((entry) => { + this._storage.push(entry); + }); + this._reader.onEnd(() => { + callSuccessCallback(callback, this._storage); + }); + this._reader.read(); + } + }; + exports22.default = AsyncProvider; + function callFailureCallback(callback, error) { + callback(error); + } + __name(callFailureCallback, "callFailureCallback"); + function callSuccessCallback(callback, entries) { + callback(null, entries); + } + __name(callSuccessCallback, "callSuccessCallback"); + } + }); + var require_stream2 = __commonJS2({ + "@nodelib/fs.walk/out/providers/stream.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var stream_1 = require("stream"); + var async_1 = require_async3(); + var StreamProvider = class { + static { + __name(this, "StreamProvider"); + } + constructor(_root, _settings) { + this._root = _root; + this._settings = _settings; + this._reader = new async_1.default(this._root, this._settings); + this._stream = new stream_1.Readable({ + objectMode: true, + read: /* @__PURE__ */ __name(() => { + }, "read"), + destroy: /* @__PURE__ */ __name(() => { + if (!this._reader.isDestroyed) { + this._reader.destroy(); + } + }, "destroy") + }); + } + read() { + this._reader.onError((error) => { + this._stream.emit("error", error); + }); + this._reader.onEntry((entry) => { + this._stream.push(entry); + }); + this._reader.onEnd(() => { + this._stream.push(null); + }); + this._reader.read(); + return this._stream; + } + }; + exports22.default = StreamProvider; + } + }); + var require_sync3 = __commonJS2({ + "@nodelib/fs.walk/out/readers/sync.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var fsScandir = require_out2(); + var common = require_common2(); + var reader_1 = require_reader(); + var SyncReader = class extends reader_1.default { + static { + __name(this, "SyncReader"); + } + constructor() { + super(...arguments); + this._scandir = fsScandir.scandirSync; + this._storage = []; + this._queue = /* @__PURE__ */ new Set(); + } + read() { + this._pushToQueue(this._root, this._settings.basePath); + this._handleQueue(); + return this._storage; + } + _pushToQueue(directory, base) { + this._queue.add({ directory, base }); + } + _handleQueue() { + for (const item of this._queue.values()) { + this._handleDirectory(item.directory, item.base); + } + } + _handleDirectory(directory, base) { + try { + const entries = this._scandir(directory, this._settings.fsScandirSettings); + for (const entry of entries) { + this._handleEntry(entry, base); + } + } catch (error) { + this._handleError(error); + } + } + _handleError(error) { + if (!common.isFatalError(this._settings, error)) { + return; + } + throw error; + } + _handleEntry(entry, base) { + const fullpath = entry.path; + if (base !== void 0) { + entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator); + } + if (common.isAppliedFilter(this._settings.entryFilter, entry)) { + this._pushToStorage(entry); + } + if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) { + this._pushToQueue(fullpath, base === void 0 ? void 0 : entry.path); + } + } + _pushToStorage(entry) { + this._storage.push(entry); + } + }; + exports22.default = SyncReader; + } + }); + var require_sync4 = __commonJS2({ + "@nodelib/fs.walk/out/providers/sync.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var sync_1 = require_sync3(); + var SyncProvider = class { + static { + __name(this, "SyncProvider"); + } + constructor(_root, _settings) { + this._root = _root; + this._settings = _settings; + this._reader = new sync_1.default(this._root, this._settings); + } + read() { + return this._reader.read(); + } + }; + exports22.default = SyncProvider; + } + }); + var require_settings3 = __commonJS2({ + "@nodelib/fs.walk/out/settings.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var path6 = require("path"); + var fsScandir = require_out2(); + var Settings = class { + static { + __name(this, "Settings"); + } + constructor(_options = {}) { + this._options = _options; + this.basePath = this._getValue(this._options.basePath, void 0); + this.concurrency = this._getValue(this._options.concurrency, Number.POSITIVE_INFINITY); + this.deepFilter = this._getValue(this._options.deepFilter, null); + this.entryFilter = this._getValue(this._options.entryFilter, null); + this.errorFilter = this._getValue(this._options.errorFilter, null); + this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path6.sep); + this.fsScandirSettings = new fsScandir.Settings({ + followSymbolicLinks: this._options.followSymbolicLinks, + fs: this._options.fs, + pathSegmentSeparator: this._options.pathSegmentSeparator, + stats: this._options.stats, + throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink + }); + } + _getValue(option, value) { + return option !== null && option !== void 0 ? option : value; + } + }; + exports22.default = Settings; + } + }); + var require_out3 = __commonJS2({ + "@nodelib/fs.walk/out/index.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.Settings = exports22.walkStream = exports22.walkSync = exports22.walk = void 0; + var async_1 = require_async4(); + var stream_1 = require_stream2(); + var sync_1 = require_sync4(); + var settings_1 = require_settings3(); + exports22.Settings = settings_1.default; + function walk(directory, optionsOrSettingsOrCallback, callback) { + if (typeof optionsOrSettingsOrCallback === "function") { + new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback); + return; + } + new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback); + } + __name(walk, "walk"); + exports22.walk = walk; + function walkSync(directory, optionsOrSettings) { + const settings = getSettings(optionsOrSettings); + const provider = new sync_1.default(directory, settings); + return provider.read(); + } + __name(walkSync, "walkSync"); + exports22.walkSync = walkSync; + function walkStream(directory, optionsOrSettings) { + const settings = getSettings(optionsOrSettings); + const provider = new stream_1.default(directory, settings); + return provider.read(); + } + __name(walkStream, "walkStream"); + exports22.walkStream = walkStream; + function getSettings(settingsOrOptions = {}) { + if (settingsOrOptions instanceof settings_1.default) { + return settingsOrOptions; + } + return new settings_1.default(settingsOrOptions); + } + __name(getSettings, "getSettings"); + } + }); + var require_reader2 = __commonJS2({ + "fast-glob/out/readers/reader.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var path6 = require("path"); + var fsStat = require_out(); + var utils = require_utils3(); + var Reader = class { + static { + __name(this, "Reader"); + } + constructor(_settings) { + this._settings = _settings; + this._fsStatSettings = new fsStat.Settings({ + followSymbolicLink: this._settings.followSymbolicLinks, + fs: this._settings.fs, + throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks + }); + } + _getFullEntryPath(filepath) { + return path6.resolve(this._settings.cwd, filepath); + } + _makeEntry(stats, pattern) { + const entry = { + name: pattern, + path: pattern, + dirent: utils.fs.createDirentFromStats(pattern, stats) + }; + if (this._settings.stats) { + entry.stats = stats; + } + return entry; + } + _isFatalError(error) { + return !utils.errno.isEnoentCodeError(error) && !this._settings.suppressErrors; + } + }; + exports22.default = Reader; + } + }); + var require_stream3 = __commonJS2({ + "fast-glob/out/readers/stream.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var stream_1 = require("stream"); + var fsStat = require_out(); + var fsWalk = require_out3(); + var reader_1 = require_reader2(); + var ReaderStream = class extends reader_1.default { + static { + __name(this, "ReaderStream"); + } + constructor() { + super(...arguments); + this._walkStream = fsWalk.walkStream; + this._stat = fsStat.stat; + } + dynamic(root, options) { + return this._walkStream(root, options); + } + static(patterns, options) { + const filepaths = patterns.map(this._getFullEntryPath, this); + const stream = new stream_1.PassThrough({ objectMode: true }); + stream._write = (index, _enc, done) => { + return this._getEntry(filepaths[index], patterns[index], options).then((entry) => { + if (entry !== null && options.entryFilter(entry)) { + stream.push(entry); + } + if (index === filepaths.length - 1) { + stream.end(); + } + done(); + }).catch(done); + }; + for (let i = 0; i < filepaths.length; i++) { + stream.write(i); + } + return stream; + } + _getEntry(filepath, pattern, options) { + return this._getStat(filepath).then((stats) => this._makeEntry(stats, pattern)).catch((error) => { + if (options.errorFilter(error)) { + return null; + } + throw error; + }); + } + _getStat(filepath) { + return new Promise((resolve, reject) => { + this._stat(filepath, this._fsStatSettings, (error, stats) => { + return error === null ? resolve(stats) : reject(error); + }); + }); + } + }; + exports22.default = ReaderStream; + } + }); + var require_async5 = __commonJS2({ + "fast-glob/out/readers/async.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var fsWalk = require_out3(); + var reader_1 = require_reader2(); + var stream_1 = require_stream3(); + var ReaderAsync = class extends reader_1.default { + static { + __name(this, "ReaderAsync"); + } + constructor() { + super(...arguments); + this._walkAsync = fsWalk.walk; + this._readerStream = new stream_1.default(this._settings); + } + dynamic(root, options) { + return new Promise((resolve, reject) => { + this._walkAsync(root, options, (error, entries) => { + if (error === null) { + resolve(entries); + } else { + reject(error); + } + }); + }); + } + async static(patterns, options) { + const entries = []; + const stream = this._readerStream.static(patterns, options); + return new Promise((resolve, reject) => { + stream.once("error", reject); + stream.on("data", (entry) => entries.push(entry)); + stream.once("end", () => resolve(entries)); + }); + } + }; + exports22.default = ReaderAsync; + } + }); + var require_matcher = __commonJS2({ + "fast-glob/out/providers/matchers/matcher.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var utils = require_utils3(); + var Matcher = class { + static { + __name(this, "Matcher"); + } + constructor(_patterns, _settings, _micromatchOptions) { + this._patterns = _patterns; + this._settings = _settings; + this._micromatchOptions = _micromatchOptions; + this._storage = []; + this._fillStorage(); + } + _fillStorage() { + for (const pattern of this._patterns) { + const segments = this._getPatternSegments(pattern); + const sections = this._splitSegmentsIntoSections(segments); + this._storage.push({ + complete: sections.length <= 1, + pattern, + segments, + sections + }); + } + } + _getPatternSegments(pattern) { + const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions); + return parts.map((part) => { + const dynamic = utils.pattern.isDynamicPattern(part, this._settings); + if (!dynamic) { + return { + dynamic: false, + pattern: part + }; + } + return { + dynamic: true, + pattern: part, + patternRe: utils.pattern.makeRe(part, this._micromatchOptions) + }; + }); + } + _splitSegmentsIntoSections(segments) { + return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern)); + } + }; + exports22.default = Matcher; + } + }); + var require_partial = __commonJS2({ + "fast-glob/out/providers/matchers/partial.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var matcher_1 = require_matcher(); + var PartialMatcher = class extends matcher_1.default { + static { + __name(this, "PartialMatcher"); + } + match(filepath) { + const parts = filepath.split("/"); + const levels = parts.length; + const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels); + for (const pattern of patterns) { + const section = pattern.sections[0]; + if (!pattern.complete && levels > section.length) { + return true; + } + const match = parts.every((part, index) => { + const segment = pattern.segments[index]; + if (segment.dynamic && segment.patternRe.test(part)) { + return true; + } + if (!segment.dynamic && segment.pattern === part) { + return true; + } + return false; + }); + if (match) { + return true; + } + } + return false; + } + }; + exports22.default = PartialMatcher; + } + }); + var require_deep = __commonJS2({ + "fast-glob/out/providers/filters/deep.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var utils = require_utils3(); + var partial_1 = require_partial(); + var DeepFilter = class { + static { + __name(this, "DeepFilter"); + } + constructor(_settings, _micromatchOptions) { + this._settings = _settings; + this._micromatchOptions = _micromatchOptions; + } + getFilter(basePath, positive, negative) { + const matcher = this._getMatcher(positive); + const negativeRe = this._getNegativePatternsRe(negative); + return (entry) => this._filter(basePath, entry, matcher, negativeRe); + } + _getMatcher(patterns) { + return new partial_1.default(patterns, this._settings, this._micromatchOptions); + } + _getNegativePatternsRe(patterns) { + const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern); + return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions); + } + _filter(basePath, entry, matcher, negativeRe) { + if (this._isSkippedByDeep(basePath, entry.path)) { + return false; + } + if (this._isSkippedSymbolicLink(entry)) { + return false; + } + const filepath = utils.path.removeLeadingDotSegment(entry.path); + if (this._isSkippedByPositivePatterns(filepath, matcher)) { + return false; + } + return this._isSkippedByNegativePatterns(filepath, negativeRe); + } + _isSkippedByDeep(basePath, entryPath) { + if (this._settings.deep === Infinity) { + return false; + } + return this._getEntryLevel(basePath, entryPath) >= this._settings.deep; + } + _getEntryLevel(basePath, entryPath) { + const entryPathDepth = entryPath.split("/").length; + if (basePath === "") { + return entryPathDepth; + } + const basePathDepth = basePath.split("/").length; + return entryPathDepth - basePathDepth; + } + _isSkippedSymbolicLink(entry) { + return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink(); + } + _isSkippedByPositivePatterns(entryPath, matcher) { + return !this._settings.baseNameMatch && !matcher.match(entryPath); + } + _isSkippedByNegativePatterns(entryPath, patternsRe) { + return !utils.pattern.matchAny(entryPath, patternsRe); + } + }; + exports22.default = DeepFilter; + } + }); + var require_entry = __commonJS2({ + "fast-glob/out/providers/filters/entry.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var utils = require_utils3(); + var EntryFilter = class { + static { + __name(this, "EntryFilter"); + } + constructor(_settings, _micromatchOptions) { + this._settings = _settings; + this._micromatchOptions = _micromatchOptions; + this.index = /* @__PURE__ */ new Map(); + } + getFilter(positive, negative) { + const [absoluteNegative, relativeNegative] = utils.pattern.partitionAbsoluteAndRelative(negative); + const patterns = { + positive: { + all: utils.pattern.convertPatternsToRe(positive, this._micromatchOptions) + }, + negative: { + absolute: utils.pattern.convertPatternsToRe(absoluteNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true })), + relative: utils.pattern.convertPatternsToRe(relativeNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true })) + } + }; + return (entry) => this._filter(entry, patterns); + } + _filter(entry, patterns) { + const filepath = utils.path.removeLeadingDotSegment(entry.path); + if (this._settings.unique && this._isDuplicateEntry(filepath)) { + return false; + } + if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) { + return false; + } + const isMatched = this._isMatchToPatternsSet(filepath, patterns, entry.dirent.isDirectory()); + if (this._settings.unique && isMatched) { + this._createIndexRecord(filepath); + } + return isMatched; + } + _isDuplicateEntry(filepath) { + return this.index.has(filepath); + } + _createIndexRecord(filepath) { + this.index.set(filepath, void 0); + } + _onlyFileFilter(entry) { + return this._settings.onlyFiles && !entry.dirent.isFile(); + } + _onlyDirectoryFilter(entry) { + return this._settings.onlyDirectories && !entry.dirent.isDirectory(); + } + _isMatchToPatternsSet(filepath, patterns, isDirectory2) { + const isMatched = this._isMatchToPatterns(filepath, patterns.positive.all, isDirectory2); + if (!isMatched) { + return false; + } + const isMatchedByRelativeNegative = this._isMatchToPatterns(filepath, patterns.negative.relative, isDirectory2); + if (isMatchedByRelativeNegative) { + return false; + } + const isMatchedByAbsoluteNegative = this._isMatchToAbsoluteNegative(filepath, patterns.negative.absolute, isDirectory2); + if (isMatchedByAbsoluteNegative) { + return false; + } + return true; + } + _isMatchToAbsoluteNegative(filepath, patternsRe, isDirectory2) { + if (patternsRe.length === 0) { + return false; + } + const fullpath = utils.path.makeAbsolute(this._settings.cwd, filepath); + return this._isMatchToPatterns(fullpath, patternsRe, isDirectory2); + } + _isMatchToPatterns(filepath, patternsRe, isDirectory2) { + if (patternsRe.length === 0) { + return false; + } + const isMatched = utils.pattern.matchAny(filepath, patternsRe); + if (!isMatched && isDirectory2) { + return utils.pattern.matchAny(filepath + "/", patternsRe); + } + return isMatched; + } + }; + exports22.default = EntryFilter; + } + }); + var require_error = __commonJS2({ + "fast-glob/out/providers/filters/error.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var utils = require_utils3(); + var ErrorFilter = class { + static { + __name(this, "ErrorFilter"); + } + constructor(_settings) { + this._settings = _settings; + } + getFilter() { + return (error) => this._isNonFatalError(error); + } + _isNonFatalError(error) { + return utils.errno.isEnoentCodeError(error) || this._settings.suppressErrors; + } + }; + exports22.default = ErrorFilter; + } + }); + var require_entry2 = __commonJS2({ + "fast-glob/out/providers/transformers/entry.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var utils = require_utils3(); + var EntryTransformer = class { + static { + __name(this, "EntryTransformer"); + } + constructor(_settings) { + this._settings = _settings; + } + getTransformer() { + return (entry) => this._transform(entry); + } + _transform(entry) { + let filepath = entry.path; + if (this._settings.absolute) { + filepath = utils.path.makeAbsolute(this._settings.cwd, filepath); + filepath = utils.path.unixify(filepath); + } + if (this._settings.markDirectories && entry.dirent.isDirectory()) { + filepath += "/"; + } + if (!this._settings.objectMode) { + return filepath; + } + return Object.assign(Object.assign({}, entry), { path: filepath }); + } + }; + exports22.default = EntryTransformer; + } + }); + var require_provider = __commonJS2({ + "fast-glob/out/providers/provider.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var path6 = require("path"); + var deep_1 = require_deep(); + var entry_1 = require_entry(); + var error_1 = require_error(); + var entry_2 = require_entry2(); + var Provider = class { + static { + __name(this, "Provider"); + } + constructor(_settings) { + this._settings = _settings; + this.errorFilter = new error_1.default(this._settings); + this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions()); + this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions()); + this.entryTransformer = new entry_2.default(this._settings); + } + _getRootDirectory(task) { + return path6.resolve(this._settings.cwd, task.base); + } + _getReaderOptions(task) { + const basePath = task.base === "." ? "" : task.base; + return { + basePath, + pathSegmentSeparator: "/", + concurrency: this._settings.concurrency, + deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative), + entryFilter: this.entryFilter.getFilter(task.positive, task.negative), + errorFilter: this.errorFilter.getFilter(), + followSymbolicLinks: this._settings.followSymbolicLinks, + fs: this._settings.fs, + stats: this._settings.stats, + throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink, + transform: this.entryTransformer.getTransformer() + }; + } + _getMicromatchOptions() { + return { + dot: this._settings.dot, + matchBase: this._settings.baseNameMatch, + nobrace: !this._settings.braceExpansion, + nocase: !this._settings.caseSensitiveMatch, + noext: !this._settings.extglob, + noglobstar: !this._settings.globstar, + posix: true, + strictSlashes: false + }; + } + }; + exports22.default = Provider; + } + }); + var require_async6 = __commonJS2({ + "fast-glob/out/providers/async.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var async_1 = require_async5(); + var provider_1 = require_provider(); + var ProviderAsync = class extends provider_1.default { + static { + __name(this, "ProviderAsync"); + } + constructor() { + super(...arguments); + this._reader = new async_1.default(this._settings); + } + async read(task) { + const root = this._getRootDirectory(task); + const options = this._getReaderOptions(task); + const entries = await this.api(root, task, options); + return entries.map((entry) => options.transform(entry)); + } + api(root, task, options) { + if (task.dynamic) { + return this._reader.dynamic(root, options); + } + return this._reader.static(task.patterns, options); + } + }; + exports22.default = ProviderAsync; + } + }); + var require_stream4 = __commonJS2({ + "fast-glob/out/providers/stream.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var stream_1 = require("stream"); + var stream_2 = require_stream3(); + var provider_1 = require_provider(); + var ProviderStream = class extends provider_1.default { + static { + __name(this, "ProviderStream"); + } + constructor() { + super(...arguments); + this._reader = new stream_2.default(this._settings); + } + read(task) { + const root = this._getRootDirectory(task); + const options = this._getReaderOptions(task); + const source = this.api(root, task, options); + const destination = new stream_1.Readable({ objectMode: true, read: /* @__PURE__ */ __name(() => { + }, "read") }); + source.once("error", (error) => destination.emit("error", error)).on("data", (entry) => destination.emit("data", options.transform(entry))).once("end", () => destination.emit("end")); + destination.once("close", () => source.destroy()); + return destination; + } + api(root, task, options) { + if (task.dynamic) { + return this._reader.dynamic(root, options); + } + return this._reader.static(task.patterns, options); + } + }; + exports22.default = ProviderStream; + } + }); + var require_sync5 = __commonJS2({ + "fast-glob/out/readers/sync.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var fsStat = require_out(); + var fsWalk = require_out3(); + var reader_1 = require_reader2(); + var ReaderSync = class extends reader_1.default { + static { + __name(this, "ReaderSync"); + } + constructor() { + super(...arguments); + this._walkSync = fsWalk.walkSync; + this._statSync = fsStat.statSync; + } + dynamic(root, options) { + return this._walkSync(root, options); + } + static(patterns, options) { + const entries = []; + for (const pattern of patterns) { + const filepath = this._getFullEntryPath(pattern); + const entry = this._getEntry(filepath, pattern, options); + if (entry === null || !options.entryFilter(entry)) { + continue; + } + entries.push(entry); + } + return entries; + } + _getEntry(filepath, pattern, options) { + try { + const stats = this._getStat(filepath); + return this._makeEntry(stats, pattern); + } catch (error) { + if (options.errorFilter(error)) { + return null; + } + throw error; + } + } + _getStat(filepath) { + return this._statSync(filepath, this._fsStatSettings); + } + }; + exports22.default = ReaderSync; + } + }); + var require_sync6 = __commonJS2({ + "fast-glob/out/providers/sync.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + var sync_1 = require_sync5(); + var provider_1 = require_provider(); + var ProviderSync = class extends provider_1.default { + static { + __name(this, "ProviderSync"); + } + constructor() { + super(...arguments); + this._reader = new sync_1.default(this._settings); + } + read(task) { + const root = this._getRootDirectory(task); + const options = this._getReaderOptions(task); + const entries = this.api(root, task, options); + return entries.map(options.transform); + } + api(root, task, options) { + if (task.dynamic) { + return this._reader.dynamic(root, options); + } + return this._reader.static(task.patterns, options); + } + }; + exports22.default = ProviderSync; + } + }); + var require_settings4 = __commonJS2({ + "fast-glob/out/settings.js"(exports22) { + "use strict"; + Object.defineProperty(exports22, "__esModule", { value: true }); + exports22.DEFAULT_FILE_SYSTEM_ADAPTER = void 0; + var fs5 = require("fs"); + var os = require("os"); + var CPU_COUNT = Math.max(os.cpus().length, 1); + exports22.DEFAULT_FILE_SYSTEM_ADAPTER = { + lstat: fs5.lstat, + lstatSync: fs5.lstatSync, + stat: fs5.stat, + statSync: fs5.statSync, + readdir: fs5.readdir, + readdirSync: fs5.readdirSync + }; + var Settings = class { + static { + __name(this, "Settings"); + } + constructor(_options = {}) { + this._options = _options; + this.absolute = this._getValue(this._options.absolute, false); + this.baseNameMatch = this._getValue(this._options.baseNameMatch, false); + this.braceExpansion = this._getValue(this._options.braceExpansion, true); + this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true); + this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT); + this.cwd = this._getValue(this._options.cwd, process.cwd()); + this.deep = this._getValue(this._options.deep, Infinity); + this.dot = this._getValue(this._options.dot, false); + this.extglob = this._getValue(this._options.extglob, true); + this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true); + this.fs = this._getFileSystemMethods(this._options.fs); + this.globstar = this._getValue(this._options.globstar, true); + this.ignore = this._getValue(this._options.ignore, []); + this.markDirectories = this._getValue(this._options.markDirectories, false); + this.objectMode = this._getValue(this._options.objectMode, false); + this.onlyDirectories = this._getValue(this._options.onlyDirectories, false); + this.onlyFiles = this._getValue(this._options.onlyFiles, true); + this.stats = this._getValue(this._options.stats, false); + this.suppressErrors = this._getValue(this._options.suppressErrors, false); + this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false); + this.unique = this._getValue(this._options.unique, true); + if (this.onlyDirectories) { + this.onlyFiles = false; + } + if (this.stats) { + this.objectMode = true; + } + this.ignore = [].concat(this.ignore); + } + _getValue(option, value) { + return option === void 0 ? value : option; + } + _getFileSystemMethods(methods = {}) { + return Object.assign(Object.assign({}, exports22.DEFAULT_FILE_SYSTEM_ADAPTER), methods); + } + }; + exports22.default = Settings; + } + }); + var require_out4 = __commonJS2({ + "fast-glob/out/index.js"(exports22, module22) { + "use strict"; + var taskManager = require_tasks(); + var async_1 = require_async6(); + var stream_1 = require_stream4(); + var sync_1 = require_sync6(); + var settings_1 = require_settings4(); + var utils = require_utils3(); + async function FastGlob(source, options) { + assertPatternsInput2(source); + const works = getWorks(source, async_1.default, options); + const result = await Promise.all(works); + return utils.array.flatten(result); + } + __name(FastGlob, "FastGlob"); + (function(FastGlob2) { + FastGlob2.glob = FastGlob2; + FastGlob2.globSync = sync; + FastGlob2.globStream = stream; + FastGlob2.async = FastGlob2; + function sync(source, options) { + assertPatternsInput2(source); + const works = getWorks(source, sync_1.default, options); + return utils.array.flatten(works); + } + __name(sync, "sync"); + FastGlob2.sync = sync; + function stream(source, options) { + assertPatternsInput2(source); + const works = getWorks(source, stream_1.default, options); + return utils.stream.merge(works); + } + __name(stream, "stream"); + FastGlob2.stream = stream; + function generateTasks2(source, options) { + assertPatternsInput2(source); + const patterns = [].concat(source); + const settings = new settings_1.default(options); + return taskManager.generate(patterns, settings); + } + __name(generateTasks2, "generateTasks"); + FastGlob2.generateTasks = generateTasks2; + function isDynamicPattern2(source, options) { + assertPatternsInput2(source); + const settings = new settings_1.default(options); + return utils.pattern.isDynamicPattern(source, settings); + } + __name(isDynamicPattern2, "isDynamicPattern"); + FastGlob2.isDynamicPattern = isDynamicPattern2; + function escapePath(source) { + assertPatternsInput2(source); + return utils.path.escape(source); + } + __name(escapePath, "escapePath"); + FastGlob2.escapePath = escapePath; + function convertPathToPattern2(source) { + assertPatternsInput2(source); + return utils.path.convertPathToPattern(source); + } + __name(convertPathToPattern2, "convertPathToPattern"); + FastGlob2.convertPathToPattern = convertPathToPattern2; + let posix; + (function(posix2) { + function escapePath2(source) { + assertPatternsInput2(source); + return utils.path.escapePosixPath(source); + } + __name(escapePath2, "escapePath"); + posix2.escapePath = escapePath2; + function convertPathToPattern3(source) { + assertPatternsInput2(source); + return utils.path.convertPosixPathToPattern(source); + } + __name(convertPathToPattern3, "convertPathToPattern"); + posix2.convertPathToPattern = convertPathToPattern3; + })(posix = FastGlob2.posix || (FastGlob2.posix = {})); + let win32; + (function(win322) { + function escapePath2(source) { + assertPatternsInput2(source); + return utils.path.escapeWindowsPath(source); + } + __name(escapePath2, "escapePath"); + win322.escapePath = escapePath2; + function convertPathToPattern3(source) { + assertPatternsInput2(source); + return utils.path.convertWindowsPathToPattern(source); + } + __name(convertPathToPattern3, "convertPathToPattern"); + win322.convertPathToPattern = convertPathToPattern3; + })(win32 = FastGlob2.win32 || (FastGlob2.win32 = {})); + })(FastGlob || (FastGlob = {})); + function getWorks(source, _Provider, options) { + const patterns = [].concat(source); + const settings = new settings_1.default(options); + const tasks = taskManager.generate(patterns, settings); + const provider = new _Provider(settings); + return tasks.map(provider.read, provider); + } + __name(getWorks, "getWorks"); + function assertPatternsInput2(input) { + const source = [].concat(input); + const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item)); + if (!isValidSource) { + throw new TypeError("Patterns must be a string (non empty) or an array of strings"); + } + } + __name(assertPatternsInput2, "assertPatternsInput"); + module22.exports = FastGlob; + } + }); + async function isType(fsStatType, statsMethodName, filePath) { + if (typeof filePath !== "string") { + throw new TypeError(`Expected a string, got ${typeof filePath}`); + } + try { + const stats = await import_promises2.default[fsStatType](filePath); + return stats[statsMethodName](); + } catch (error) { + if (error.code === "ENOENT") { + return false; + } + throw error; + } + } + function isTypeSync(fsStatType, statsMethodName, filePath) { + if (typeof filePath !== "string") { + throw new TypeError(`Expected a string, got ${typeof filePath}`); + } + try { + return import_node_fs.default[fsStatType](filePath)[statsMethodName](); + } catch (error) { + if (error.code === "ENOENT") { + return false; + } + throw error; + } + } + var import_node_fs; + var import_promises2; + var isFile; + var isDirectory; + var isSymlink; + var isFileSync; + var isDirectorySync; + var isSymlinkSync; + var init_path_type = __esm({ + "path-type/index.js"() { + import_node_fs = __toESM2(require("node:fs"), 1); + import_promises2 = __toESM2(require("node:fs/promises"), 1); + __name(isType, "isType"); + __name(isTypeSync, "isTypeSync"); + isFile = isType.bind(void 0, "stat", "isFile"); + isDirectory = isType.bind(void 0, "stat", "isDirectory"); + isSymlink = isType.bind(void 0, "lstat", "isSymbolicLink"); + isFileSync = isTypeSync.bind(void 0, "statSync", "isFile"); + isDirectorySync = isTypeSync.bind(void 0, "statSync", "isDirectory"); + isSymlinkSync = isTypeSync.bind(void 0, "lstatSync", "isSymbolicLink"); + } + }); + var init_default = __esm({ + "unicorn-magic/default.js"() { + } + }); + function toPath(urlOrPath) { + return urlOrPath instanceof URL ? (0, import_node_url.fileURLToPath)(urlOrPath) : urlOrPath; + } + var import_node_util; + var import_node_child_process; + var import_node_path; + var import_node_url; + var execFileOriginal; + var TEN_MEGABYTES_IN_BYTES; + var init_node = __esm({ + "unicorn-magic/node.js"() { + import_node_util = require("node:util"); + import_node_child_process = require("node:child_process"); + import_node_path = __toESM2(require("node:path"), 1); + import_node_url = require("node:url"); + init_default(); + execFileOriginal = (0, import_node_util.promisify)(import_node_child_process.execFile); + __name(toPath, "toPath"); + TEN_MEGABYTES_IN_BYTES = 10 * 1024 * 1024; + } + }); + var require_ignore = __commonJS2({ + "ignore/index.js"(exports22, module22) { + function makeArray(subject) { + return Array.isArray(subject) ? subject : [subject]; + } + __name(makeArray, "makeArray"); + var UNDEFINED = void 0; + var EMPTY = ""; + var SPACE = " "; + var ESCAPE = "\\"; + var REGEX_TEST_BLANK_LINE = /^\s+$/; + var REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\]|^)\\$/; + var REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/; + var REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/; + var REGEX_SPLITALL_CRLF = /\r?\n/g; + var REGEX_TEST_INVALID_PATH = /^\.{0,2}\/|^\.{1,2}$/; + var REGEX_TEST_TRAILING_SLASH = /\/$/; + var SLASH = "/"; + var TMP_KEY_IGNORE = "node-ignore"; + if (typeof Symbol !== "undefined") { + TMP_KEY_IGNORE = Symbol.for("node-ignore"); + } + var KEY_IGNORE = TMP_KEY_IGNORE; + var define = /* @__PURE__ */ __name((object, key, value) => { + Object.defineProperty(object, key, { value }); + return value; + }, "define"); + var REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g; + var RETURN_FALSE = /* @__PURE__ */ __name(() => false, "RETURN_FALSE"); + var sanitizeRange = /* @__PURE__ */ __name((range) => range.replace( + REGEX_REGEXP_RANGE, + (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0) ? match : EMPTY + ), "sanitizeRange"); + var cleanRangeBackSlash = /* @__PURE__ */ __name((slashes) => { + const { length } = slashes; + return slashes.slice(0, length - length % 2); + }, "cleanRangeBackSlash"); + var REPLACERS = [ + [ + // Remove BOM + // TODO: + // Other similar zero-width characters? + /^\uFEFF/, + () => EMPTY + ], + // > Trailing spaces are ignored unless they are quoted with backslash ("\") + [ + // (a\ ) -> (a ) + // (a ) -> (a) + // (a ) -> (a) + // (a \ ) -> (a ) + /((?:\\\\)*?)(\\?\s+)$/, + (_, m1, m2) => m1 + (m2.indexOf("\\") === 0 ? SPACE : EMPTY) + ], + // Replace (\ ) with ' ' + // (\ ) -> ' ' + // (\\ ) -> '\\ ' + // (\\\ ) -> '\\ ' + [ + /(\\+?)\s/g, + (_, m1) => { + const { length } = m1; + return m1.slice(0, length - length % 2) + SPACE; + } + ], + // Escape metacharacters + // which is written down by users but means special for regular expressions. + // > There are 12 characters with special meanings: + // > - the backslash \, + // > - the caret ^, + // > - the dollar sign $, + // > - the period or dot ., + // > - the vertical bar or pipe symbol |, + // > - the question mark ?, + // > - the asterisk or star *, + // > - the plus sign +, + // > - the opening parenthesis (, + // > - the closing parenthesis ), + // > - and the opening square bracket [, + // > - the opening curly brace {, + // > These special characters are often called "metacharacters". + [ + /[\\$.|*+(){^]/g, + (match) => `\\${match}` + ], + [ + // > a question mark (?) matches a single character + /(?!\\)\?/g, + () => "[^/]" + ], + // leading slash + [ + // > A leading slash matches the beginning of the pathname. + // > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c". + // A leading slash matches the beginning of the pathname + /^\//, + () => "^" + ], + // replace special metacharacter slash after the leading slash + [ + /\//g, + () => "\\/" + ], + [ + // > A leading "**" followed by a slash means match in all directories. + // > For example, "**/foo" matches file or directory "foo" anywhere, + // > the same as pattern "foo". + // > "**/foo/bar" matches file or directory "bar" anywhere that is directly + // > under directory "foo". + // Notice that the '*'s have been replaced as '\\*' + /^\^*\\\*\\\*\\\//, + // '**/foo' <-> 'foo' + () => "^(?:.*\\/)?" + ], + // starting + [ + // there will be no leading '/' + // (which has been replaced by section "leading slash") + // If starts with '**', adding a '^' to the regular expression also works + /^(?=[^^])/, + /* @__PURE__ */ __name(function startingReplacer() { + return !/\/(?!$)/.test(this) ? "(?:^|\\/)" : "^"; + }, "startingReplacer") + ], + // two globstars + [ + // Use lookahead assertions so that we could match more than one `'/**'` + /\\\/\\\*\\\*(?=\\\/|$)/g, + // Zero, one or several directories + // should not use '*', or it will be replaced by the next replacer + // Check if it is not the last `'/**'` + (_, index, str) => index + 6 < str.length ? "(?:\\/[^\\/]+)*" : "\\/.+" + ], + // normal intermediate wildcards + [ + // Never replace escaped '*' + // ignore rule '\*' will match the path '*' + // 'abc.*/' -> go + // 'abc.*' -> skip this rule, + // coz trailing single wildcard will be handed by [trailing wildcard] + /(^|[^\\]+)(\\\*)+(?=.+)/g, + // '*.js' matches '.js' + // '*.js' doesn't match 'abc' + (_, p1, p2) => { + const unescaped = p2.replace(/\\\*/g, "[^\\/]*"); + return p1 + unescaped; + } + ], + [ + // unescape, revert step 3 except for back slash + // For example, if a user escape a '\\*', + // after step 3, the result will be '\\\\\\*' + /\\\\\\(?=[$.|*+(){^])/g, + () => ESCAPE + ], + [ + // '\\\\' -> '\\' + /\\\\/g, + () => ESCAPE + ], + [ + // > The range notation, e.g. [a-zA-Z], + // > can be used to match one of the characters in a range. + // `\` is escaped by step 3 + /(\\)?\[([^\]/]*?)(\\*)($|\])/g, + (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE ? `\\[${range}${cleanRangeBackSlash(endEscape)}${close}` : close === "]" ? endEscape.length % 2 === 0 ? `[${sanitizeRange(range)}${endEscape}]` : "[]" : "[]" + ], + // ending + [ + // 'js' will not match 'js.' + // 'ab' will not match 'abc' + /(?:[^*])$/, + // WTF! + // https://git-scm.com/docs/gitignore + // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1) + // which re-fixes #24, #38 + // > If there is a separator at the end of the pattern then the pattern + // > will only match directories, otherwise the pattern can match both + // > files and directories. + // 'js*' will not match 'a.js' + // 'js/' will not match 'a.js' + // 'js' will match 'a.js' and 'a.js/' + (match) => /\/$/.test(match) ? `${match}$` : `${match}(?=$|\\/$)` + ] + ]; + var REGEX_REPLACE_TRAILING_WILDCARD = /(^|\\\/)?\\\*$/; + var MODE_IGNORE = "regex"; + var MODE_CHECK_IGNORE = "checkRegex"; + var UNDERSCORE = "_"; + var TRAILING_WILD_CARD_REPLACERS = { + [MODE_IGNORE](_, p1) { + const prefix = p1 ? `${p1}[^/]+` : "[^/]*"; + return `${prefix}(?=$|\\/$)`; + }, + [MODE_CHECK_IGNORE](_, p1) { + const prefix = p1 ? `${p1}[^/]*` : "[^/]*"; + return `${prefix}(?=$|\\/$)`; + } + }; + var makeRegexPrefix = /* @__PURE__ */ __name((pattern) => REPLACERS.reduce( + (prev, [matcher, replacer]) => prev.replace(matcher, replacer.bind(pattern)), + pattern + ), "makeRegexPrefix"); + var isString = /* @__PURE__ */ __name((subject) => typeof subject === "string", "isString"); + var checkPattern = /* @__PURE__ */ __name((pattern) => pattern && isString(pattern) && !REGEX_TEST_BLANK_LINE.test(pattern) && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern) && pattern.indexOf("#") !== 0, "checkPattern"); + var splitPattern = /* @__PURE__ */ __name((pattern) => pattern.split(REGEX_SPLITALL_CRLF).filter(Boolean), "splitPattern"); + var IgnoreRule = class { + static { + __name(this, "IgnoreRule"); + } + constructor(pattern, mark, body, ignoreCase, negative, prefix) { + this.pattern = pattern; + this.mark = mark; + this.negative = negative; + define(this, "body", body); + define(this, "ignoreCase", ignoreCase); + define(this, "regexPrefix", prefix); + } + get regex() { + const key = UNDERSCORE + MODE_IGNORE; + if (this[key]) { + return this[key]; + } + return this._make(MODE_IGNORE, key); + } + get checkRegex() { + const key = UNDERSCORE + MODE_CHECK_IGNORE; + if (this[key]) { + return this[key]; + } + return this._make(MODE_CHECK_IGNORE, key); + } + _make(mode, key) { + const str = this.regexPrefix.replace( + REGEX_REPLACE_TRAILING_WILDCARD, + // It does not need to bind pattern + TRAILING_WILD_CARD_REPLACERS[mode] + ); + const regex = this.ignoreCase ? new RegExp(str, "i") : new RegExp(str); + return define(this, key, regex); + } + }; + var createRule = /* @__PURE__ */ __name(({ + pattern, + mark + }, ignoreCase) => { + let negative = false; + let body = pattern; + if (body.indexOf("!") === 0) { + negative = true; + body = body.substr(1); + } + body = body.replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, "!").replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, "#"); + const regexPrefix = makeRegexPrefix(body); + return new IgnoreRule( + pattern, + mark, + body, + ignoreCase, + negative, + regexPrefix + ); + }, "createRule"); + var RuleManager = class { + static { + __name(this, "RuleManager"); + } + constructor(ignoreCase) { + this._ignoreCase = ignoreCase; + this._rules = []; + } + _add(pattern) { + if (pattern && pattern[KEY_IGNORE]) { + this._rules = this._rules.concat(pattern._rules._rules); + this._added = true; + return; + } + if (isString(pattern)) { + pattern = { + pattern + }; + } + if (checkPattern(pattern.pattern)) { + const rule = createRule(pattern, this._ignoreCase); + this._added = true; + this._rules.push(rule); + } + } + // @param {Array | string | Ignore} pattern + add(pattern) { + this._added = false; + makeArray( + isString(pattern) ? splitPattern(pattern) : pattern + ).forEach(this._add, this); + return this._added; + } + // Test one single path without recursively checking parent directories + // + // - checkUnignored `boolean` whether should check if the path is unignored, + // setting `checkUnignored` to `false` could reduce additional + // path matching. + // - check `string` either `MODE_IGNORE` or `MODE_CHECK_IGNORE` + // @returns {TestResult} true if a file is ignored + test(path6, checkUnignored, mode) { + let ignored = false; + let unignored = false; + let matchedRule; + this._rules.forEach((rule) => { + const { negative } = rule; + if (unignored === negative && ignored !== unignored || negative && !ignored && !unignored && !checkUnignored) { + return; + } + const matched = rule[mode].test(path6); + if (!matched) { + return; + } + ignored = !negative; + unignored = negative; + matchedRule = negative ? UNDEFINED : rule; + }); + const ret = { + ignored, + unignored + }; + if (matchedRule) { + ret.rule = matchedRule; + } + return ret; + } + }; + var throwError = /* @__PURE__ */ __name((message, Ctor) => { + throw new Ctor(message); + }, "throwError"); + var checkPath = /* @__PURE__ */ __name((path6, originalPath, doThrow) => { + if (!isString(path6)) { + return doThrow( + `path must be a string, but got \`${originalPath}\``, + TypeError + ); + } + if (!path6) { + return doThrow(`path must not be empty`, TypeError); + } + if (checkPath.isNotRelative(path6)) { + const r = "`path.relative()`d"; + return doThrow( + `path should be a ${r} string, but got "${originalPath}"`, + RangeError + ); + } + return true; + }, "checkPath"); + var isNotRelative = /* @__PURE__ */ __name((path6) => REGEX_TEST_INVALID_PATH.test(path6), "isNotRelative"); + checkPath.isNotRelative = isNotRelative; + checkPath.convert = (p) => p; + var Ignore = class { + static { + __name(this, "Ignore"); + } + constructor({ + ignorecase = true, + ignoreCase = ignorecase, + allowRelativePaths = false + } = {}) { + define(this, KEY_IGNORE, true); + this._rules = new RuleManager(ignoreCase); + this._strictPathCheck = !allowRelativePaths; + this._initCache(); + } + _initCache() { + this._ignoreCache = /* @__PURE__ */ Object.create(null); + this._testCache = /* @__PURE__ */ Object.create(null); + } + add(pattern) { + if (this._rules.add(pattern)) { + this._initCache(); + } + return this; + } + // legacy + addPattern(pattern) { + return this.add(pattern); + } + // @returns {TestResult} + _test(originalPath, cache, checkUnignored, slices) { + const path6 = originalPath && checkPath.convert(originalPath); + checkPath( + path6, + originalPath, + this._strictPathCheck ? throwError : RETURN_FALSE + ); + return this._t(path6, cache, checkUnignored, slices); + } + checkIgnore(path6) { + if (!REGEX_TEST_TRAILING_SLASH.test(path6)) { + return this.test(path6); + } + const slices = path6.split(SLASH).filter(Boolean); + slices.pop(); + if (slices.length) { + const parent = this._t( + slices.join(SLASH) + SLASH, + this._testCache, + true, + slices + ); + if (parent.ignored) { + return parent; + } + } + return this._rules.test(path6, false, MODE_CHECK_IGNORE); + } + _t(path6, cache, checkUnignored, slices) { + if (path6 in cache) { + return cache[path6]; + } + if (!slices) { + slices = path6.split(SLASH).filter(Boolean); + } + slices.pop(); + if (!slices.length) { + return cache[path6] = this._rules.test(path6, checkUnignored, MODE_IGNORE); + } + const parent = this._t( + slices.join(SLASH) + SLASH, + cache, + checkUnignored, + slices + ); + return cache[path6] = parent.ignored ? parent : this._rules.test(path6, checkUnignored, MODE_IGNORE); + } + ignores(path6) { + return this._test(path6, this._ignoreCache, false).ignored; + } + createFilter() { + return (path6) => !this.ignores(path6); + } + filter(paths) { + return makeArray(paths).filter(this.createFilter()); + } + // @returns {TestResult} + test(path6) { + return this._test(path6, this._testCache, true); + } + }; + var factory = /* @__PURE__ */ __name((options) => new Ignore(options), "factory"); + var isPathValid = /* @__PURE__ */ __name((path6) => checkPath(path6 && checkPath.convert(path6), path6, RETURN_FALSE), "isPathValid"); + var setupWindows = /* @__PURE__ */ __name(() => { + const makePosix = /* @__PURE__ */ __name((str) => /^\\\\\?\\/.test(str) || /["<>|\u0000-\u001F]+/u.test(str) ? str : str.replace(/\\/g, "/"), "makePosix"); + checkPath.convert = makePosix; + const REGEX_TEST_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i; + checkPath.isNotRelative = (path6) => REGEX_TEST_WINDOWS_PATH_ABSOLUTE.test(path6) || isNotRelative(path6); + }, "setupWindows"); + if ( + // Detect `process` so that it can run in browsers. + typeof process !== "undefined" && process.platform === "win32" + ) { + setupWindows(); + } + module22.exports = factory; + factory.default = factory; + module22.exports.isPathValid = isPathValid; + define(module22.exports, Symbol.for("setupWindows"), setupWindows); + } + }); + function slash(path6) { + const isExtendedLengthPath = path6.startsWith("\\\\?\\"); + if (isExtendedLengthPath) { + return path6; + } + return path6.replace(/\\/g, "/"); + } + var init_slash = __esm({ + "slash/index.js"() { + __name(slash, "slash"); + } + }); + var isNegativePattern; + var init_utilities = __esm({ + "globby/utilities.js"() { + isNegativePattern = /* @__PURE__ */ __name((pattern) => pattern[0] === "!", "isNegativePattern"); + } + }); + var import_node_process; + var import_node_fs2; + var import_promises3; + var import_node_path2; + var import_fast_glob; + var import_ignore; + var defaultIgnoredDirectories; + var ignoreFilesGlobOptions; + var GITIGNORE_FILES_PATTERN; + var applyBaseToPattern; + var parseIgnoreFile; + var toRelativePath; + var getIsIgnoredPredicate; + var normalizeOptions; + var isIgnoredByIgnoreFiles; + var isIgnoredByIgnoreFilesSync; + var init_ignore = __esm({ + "globby/ignore.js"() { + import_node_process = __toESM2(require("node:process"), 1); + import_node_fs2 = __toESM2(require("node:fs"), 1); + import_promises3 = __toESM2(require("node:fs/promises"), 1); + import_node_path2 = __toESM2(require("node:path"), 1); + import_fast_glob = __toESM2(require_out4(), 1); + import_ignore = __toESM2(require_ignore(), 1); + init_slash(); + init_node(); + init_utilities(); + defaultIgnoredDirectories = [ + "**/node_modules", + "**/flow-typed", + "**/coverage", + "**/.git" + ]; + ignoreFilesGlobOptions = { + absolute: true, + dot: true + }; + GITIGNORE_FILES_PATTERN = "**/.gitignore"; + applyBaseToPattern = /* @__PURE__ */ __name((pattern, base) => isNegativePattern(pattern) ? "!" + import_node_path2.default.posix.join(base, pattern.slice(1)) : import_node_path2.default.posix.join(base, pattern), "applyBaseToPattern"); + parseIgnoreFile = /* @__PURE__ */ __name((file, cwd) => { + const base = slash(import_node_path2.default.relative(cwd, import_node_path2.default.dirname(file.filePath))); + return file.content.split(/\r?\n/).filter((line) => line && !line.startsWith("#")).map((pattern) => applyBaseToPattern(pattern, base)); + }, "parseIgnoreFile"); + toRelativePath = /* @__PURE__ */ __name((fileOrDirectory, cwd) => { + cwd = slash(cwd); + if (import_node_path2.default.isAbsolute(fileOrDirectory)) { + if (slash(fileOrDirectory).startsWith(cwd)) { + return import_node_path2.default.relative(cwd, fileOrDirectory); + } + throw new Error(`Path ${fileOrDirectory} is not in cwd ${cwd}`); + } + return fileOrDirectory; + }, "toRelativePath"); + getIsIgnoredPredicate = /* @__PURE__ */ __name((files, cwd) => { + const patterns = files.flatMap((file) => parseIgnoreFile(file, cwd)); + const ignores = (0, import_ignore.default)().add(patterns); + return (fileOrDirectory) => { + fileOrDirectory = toPath(fileOrDirectory); + fileOrDirectory = toRelativePath(fileOrDirectory, cwd); + return fileOrDirectory ? ignores.ignores(slash(fileOrDirectory)) : false; + }; + }, "getIsIgnoredPredicate"); + normalizeOptions = /* @__PURE__ */ __name((options = {}) => ({ + cwd: toPath(options.cwd) ?? import_node_process.default.cwd(), + suppressErrors: Boolean(options.suppressErrors), + deep: typeof options.deep === "number" ? options.deep : Number.POSITIVE_INFINITY, + ignore: [...options.ignore ?? [], ...defaultIgnoredDirectories] + }), "normalizeOptions"); + isIgnoredByIgnoreFiles = /* @__PURE__ */ __name(async (patterns, options) => { + const { cwd, suppressErrors, deep, ignore } = normalizeOptions(options); + const paths = await (0, import_fast_glob.default)(patterns, { + cwd, + suppressErrors, + deep, + ignore, + ...ignoreFilesGlobOptions + }); + const files = await Promise.all( + paths.map(async (filePath) => ({ + filePath, + content: await import_promises3.default.readFile(filePath, "utf8") + })) + ); + return getIsIgnoredPredicate(files, cwd); + }, "isIgnoredByIgnoreFiles"); + isIgnoredByIgnoreFilesSync = /* @__PURE__ */ __name((patterns, options) => { + const { cwd, suppressErrors, deep, ignore } = normalizeOptions(options); + const paths = import_fast_glob.default.sync(patterns, { + cwd, + suppressErrors, + deep, + ignore, + ...ignoreFilesGlobOptions + }); + const files = paths.map((filePath) => ({ + filePath, + content: import_node_fs2.default.readFileSync(filePath, "utf8") + })); + return getIsIgnoredPredicate(files, cwd); + }, "isIgnoredByIgnoreFilesSync"); + } + }); + var import_node_process2; + var import_node_fs3; + var import_node_path3; + var import_fast_glob2; + var assertPatternsInput; + var normalizePathForDirectoryGlob; + var getDirectoryGlob; + var directoryToGlob; + var directoryToGlobSync; + var toPatternsArray; + var checkCwdOption; + var normalizeOptions2; + var normalizeArguments; + var normalizeArgumentsSync; + var getIgnoreFilesPatterns; + var getFilter; + var getFilterSync; + var createFilterFunction; + var unionFastGlobResults; + var convertNegativePatterns; + var normalizeExpandDirectoriesOption; + var generateTasks; + var generateTasksSync; + var globby; + var globbySync; + var globbyStream; + var isDynamicPattern; + var generateGlobTasks; + var generateGlobTasksSync; + var convertPathToPattern; + var init_globby = __esm({ + "globby/index.js"() { + import_node_process2 = __toESM2(require("node:process"), 1); + import_node_fs3 = __toESM2(require("node:fs"), 1); + import_node_path3 = __toESM2(require("node:path"), 1); + init_merge_streams(); + import_fast_glob2 = __toESM2(require_out4(), 1); + init_path_type(); + init_node(); + init_ignore(); + init_utilities(); + assertPatternsInput = /* @__PURE__ */ __name((patterns) => { + if (patterns.some((pattern) => typeof pattern !== "string")) { + throw new TypeError("Patterns must be a string or an array of strings"); + } + }, "assertPatternsInput"); + normalizePathForDirectoryGlob = /* @__PURE__ */ __name((filePath, cwd) => { + const path6 = isNegativePattern(filePath) ? filePath.slice(1) : filePath; + return import_node_path3.default.isAbsolute(path6) ? path6 : import_node_path3.default.join(cwd, path6); + }, "normalizePathForDirectoryGlob"); + getDirectoryGlob = /* @__PURE__ */ __name(({ directoryPath, files, extensions }) => { + const extensionGlob = extensions?.length > 0 ? `.${extensions.length > 1 ? `{${extensions.join(",")}}` : extensions[0]}` : ""; + return files ? files.map((file) => import_node_path3.default.posix.join(directoryPath, `**/${import_node_path3.default.extname(file) ? file : `${file}${extensionGlob}`}`)) : [import_node_path3.default.posix.join(directoryPath, `**${extensionGlob ? `/*${extensionGlob}` : ""}`)]; + }, "getDirectoryGlob"); + directoryToGlob = /* @__PURE__ */ __name(async (directoryPaths, { + cwd = import_node_process2.default.cwd(), + files, + extensions + } = {}) => { + const globs = await Promise.all( + directoryPaths.map(async (directoryPath) => await isDirectory(normalizePathForDirectoryGlob(directoryPath, cwd)) ? getDirectoryGlob({ directoryPath, files, extensions }) : directoryPath) + ); + return globs.flat(); + }, "directoryToGlob"); + directoryToGlobSync = /* @__PURE__ */ __name((directoryPaths, { + cwd = import_node_process2.default.cwd(), + files, + extensions + } = {}) => directoryPaths.flatMap((directoryPath) => isDirectorySync(normalizePathForDirectoryGlob(directoryPath, cwd)) ? getDirectoryGlob({ directoryPath, files, extensions }) : directoryPath), "directoryToGlobSync"); + toPatternsArray = /* @__PURE__ */ __name((patterns) => { + patterns = [...new Set([patterns].flat())]; + assertPatternsInput(patterns); + return patterns; + }, "toPatternsArray"); + checkCwdOption = /* @__PURE__ */ __name((cwd) => { + if (!cwd) { + return; + } + let stat; + try { + stat = import_node_fs3.default.statSync(cwd); + } catch { + return; + } + if (!stat.isDirectory()) { + throw new Error("The `cwd` option must be a path to a directory"); + } + }, "checkCwdOption"); + normalizeOptions2 = /* @__PURE__ */ __name((options = {}) => { + options = { + ...options, + ignore: options.ignore ?? [], + expandDirectories: options.expandDirectories ?? true, + cwd: toPath(options.cwd) + }; + checkCwdOption(options.cwd); + return options; + }, "normalizeOptions"); + normalizeArguments = /* @__PURE__ */ __name((function_) => async (patterns, options) => function_(toPatternsArray(patterns), normalizeOptions2(options)), "normalizeArguments"); + normalizeArgumentsSync = /* @__PURE__ */ __name((function_) => (patterns, options) => function_(toPatternsArray(patterns), normalizeOptions2(options)), "normalizeArgumentsSync"); + getIgnoreFilesPatterns = /* @__PURE__ */ __name((options) => { + const { ignoreFiles, gitignore } = options; + const patterns = ignoreFiles ? toPatternsArray(ignoreFiles) : []; + if (gitignore) { + patterns.push(GITIGNORE_FILES_PATTERN); + } + return patterns; + }, "getIgnoreFilesPatterns"); + getFilter = /* @__PURE__ */ __name(async (options) => { + const ignoreFilesPatterns = getIgnoreFilesPatterns(options); + return createFilterFunction( + ignoreFilesPatterns.length > 0 && await isIgnoredByIgnoreFiles(ignoreFilesPatterns, options) + ); + }, "getFilter"); + getFilterSync = /* @__PURE__ */ __name((options) => { + const ignoreFilesPatterns = getIgnoreFilesPatterns(options); + return createFilterFunction( + ignoreFilesPatterns.length > 0 && isIgnoredByIgnoreFilesSync(ignoreFilesPatterns, options) + ); + }, "getFilterSync"); + createFilterFunction = /* @__PURE__ */ __name((isIgnored) => { + const seen = /* @__PURE__ */ new Set(); + return (fastGlobResult) => { + const pathKey = import_node_path3.default.normalize(fastGlobResult.path ?? fastGlobResult); + if (seen.has(pathKey) || isIgnored && isIgnored(pathKey)) { + return false; + } + seen.add(pathKey); + return true; + }; + }, "createFilterFunction"); + unionFastGlobResults = /* @__PURE__ */ __name((results, filter) => results.flat().filter((fastGlobResult) => filter(fastGlobResult)), "unionFastGlobResults"); + convertNegativePatterns = /* @__PURE__ */ __name((patterns, options) => { + const tasks = []; + while (patterns.length > 0) { + const index = patterns.findIndex((pattern) => isNegativePattern(pattern)); + if (index === -1) { + tasks.push({ patterns, options }); + break; + } + const ignorePattern = patterns[index].slice(1); + for (const task of tasks) { + task.options.ignore.push(ignorePattern); + } + if (index !== 0) { + tasks.push({ + patterns: patterns.slice(0, index), + options: { + ...options, + ignore: [ + ...options.ignore, + ignorePattern + ] + } + }); + } + patterns = patterns.slice(index + 1); + } + return tasks; + }, "convertNegativePatterns"); + normalizeExpandDirectoriesOption = /* @__PURE__ */ __name((options, cwd) => ({ + ...cwd ? { cwd } : {}, + ...Array.isArray(options) ? { files: options } : options + }), "normalizeExpandDirectoriesOption"); + generateTasks = /* @__PURE__ */ __name(async (patterns, options) => { + const globTasks = convertNegativePatterns(patterns, options); + const { cwd, expandDirectories } = options; + if (!expandDirectories) { + return globTasks; + } + const directoryToGlobOptions = normalizeExpandDirectoriesOption(expandDirectories, cwd); + return Promise.all( + globTasks.map(async (task) => { + let { patterns: patterns2, options: options2 } = task; + [ + patterns2, + options2.ignore + ] = await Promise.all([ + directoryToGlob(patterns2, directoryToGlobOptions), + directoryToGlob(options2.ignore, { cwd }) + ]); + return { patterns: patterns2, options: options2 }; + }) + ); + }, "generateTasks"); + generateTasksSync = /* @__PURE__ */ __name((patterns, options) => { + const globTasks = convertNegativePatterns(patterns, options); + const { cwd, expandDirectories } = options; + if (!expandDirectories) { + return globTasks; + } + const directoryToGlobSyncOptions = normalizeExpandDirectoriesOption(expandDirectories, cwd); + return globTasks.map((task) => { + let { patterns: patterns2, options: options2 } = task; + patterns2 = directoryToGlobSync(patterns2, directoryToGlobSyncOptions); + options2.ignore = directoryToGlobSync(options2.ignore, { cwd }); + return { patterns: patterns2, options: options2 }; + }); + }, "generateTasksSync"); + globby = normalizeArguments(async (patterns, options) => { + const [ + tasks, + filter + ] = await Promise.all([ + generateTasks(patterns, options), + getFilter(options) + ]); + const results = await Promise.all(tasks.map((task) => (0, import_fast_glob2.default)(task.patterns, task.options))); + return unionFastGlobResults(results, filter); + }); + globbySync = normalizeArgumentsSync((patterns, options) => { + const tasks = generateTasksSync(patterns, options); + const filter = getFilterSync(options); + const results = tasks.map((task) => import_fast_glob2.default.sync(task.patterns, task.options)); + return unionFastGlobResults(results, filter); + }); + globbyStream = normalizeArgumentsSync((patterns, options) => { + const tasks = generateTasksSync(patterns, options); + const filter = getFilterSync(options); + const streams = tasks.map((task) => import_fast_glob2.default.stream(task.patterns, task.options)); + const stream = mergeStreams(streams).filter((fastGlobResult) => filter(fastGlobResult)); + return stream; + }); + isDynamicPattern = normalizeArgumentsSync( + (patterns, options) => patterns.some((pattern) => import_fast_glob2.default.isDynamicPattern(pattern, options)) + ); + generateGlobTasks = normalizeArguments(generateTasks); + generateGlobTasksSync = normalizeArgumentsSync(generateTasksSync); + ({ convertPathToPattern } = import_fast_glob2.default); + } + }); + function isPathCwd(path_) { + let cwd = import_node_process3.default.cwd(); + path_ = import_node_path4.default.resolve(path_); + if (import_node_process3.default.platform === "win32") { + cwd = cwd.toLowerCase(); + path_ = path_.toLowerCase(); + } + return path_ === cwd; + } + var import_node_process3; + var import_node_path4; + var init_is_path_cwd = __esm({ + "is-path-cwd/index.js"() { + import_node_process3 = __toESM2(require("node:process"), 1); + import_node_path4 = __toESM2(require("node:path"), 1); + __name(isPathCwd, "isPathCwd"); + } + }); + function isPathInside(childPath, parentPath) { + const relation = import_node_path5.default.relative(parentPath, childPath); + return Boolean( + relation && relation !== ".." && !relation.startsWith(`..${import_node_path5.default.sep}`) && relation !== import_node_path5.default.resolve(childPath) + ); + } + var import_node_path5; + var init_is_path_inside = __esm({ + "is-path-inside/index.js"() { + import_node_path5 = __toESM2(require("node:path"), 1); + __name(isPathInside, "isPathInside"); + } + }); + async function pMap(iterable, mapper, { + concurrency = Number.POSITIVE_INFINITY, + stopOnError = true, + signal + } = {}) { + return new Promise((resolve_, reject_) => { + if (iterable[Symbol.iterator] === void 0 && iterable[Symbol.asyncIterator] === void 0) { + throw new TypeError(`Expected \`input\` to be either an \`Iterable\` or \`AsyncIterable\`, got (${typeof iterable})`); + } + if (typeof mapper !== "function") { + throw new TypeError("Mapper function is required"); + } + if (!(Number.isSafeInteger(concurrency) && concurrency >= 1 || concurrency === Number.POSITIVE_INFINITY)) { + throw new TypeError(`Expected \`concurrency\` to be an integer from 1 and up or \`Infinity\`, got \`${concurrency}\` (${typeof concurrency})`); + } + const result = []; + const errors = []; + const skippedIndexesMap = /* @__PURE__ */ new Map(); + let isRejected = false; + let isResolved = false; + let isIterableDone = false; + let resolvingCount = 0; + let currentIndex = 0; + const iterator = iterable[Symbol.iterator] === void 0 ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator](); + const signalListener = /* @__PURE__ */ __name(() => { + reject(signal.reason); + }, "signalListener"); + const cleanup = /* @__PURE__ */ __name(() => { + signal?.removeEventListener("abort", signalListener); + }, "cleanup"); + const resolve = /* @__PURE__ */ __name((value) => { + resolve_(value); + cleanup(); + }, "resolve"); + const reject = /* @__PURE__ */ __name((reason) => { + isRejected = true; + isResolved = true; + reject_(reason); + cleanup(); + }, "reject"); + if (signal) { + if (signal.aborted) { + reject(signal.reason); + } + signal.addEventListener("abort", signalListener, { once: true }); + } + const next = /* @__PURE__ */ __name(async () => { + if (isResolved) { + return; + } + const nextItem = await iterator.next(); + const index = currentIndex; + currentIndex++; + if (nextItem.done) { + isIterableDone = true; + if (resolvingCount === 0 && !isResolved) { + if (!stopOnError && errors.length > 0) { + reject(new AggregateError(errors)); + return; + } + isResolved = true; + if (skippedIndexesMap.size === 0) { + resolve(result); + return; + } + const pureResult = []; + for (const [index2, value] of result.entries()) { + if (skippedIndexesMap.get(index2) === pMapSkip) { + continue; + } + pureResult.push(value); + } + resolve(pureResult); + } + return; + } + resolvingCount++; + (async () => { + try { + const element = await nextItem.value; + if (isResolved) { + return; + } + const value = await mapper(element, index); + if (value === pMapSkip) { + skippedIndexesMap.set(index, value); + } + result[index] = value; + resolvingCount--; + await next(); + } catch (error) { + if (stopOnError) { + reject(error); + } else { + errors.push(error); + resolvingCount--; + try { + await next(); + } catch (error2) { + reject(error2); + } + } + } + })(); + }, "next"); + (async () => { + for (let index = 0; index < concurrency; index++) { + try { + await next(); + } catch (error) { + reject(error); + break; + } + if (isIterableDone || isRejected) { + break; + } + } + })(); + }); + } + var pMapSkip; + var init_p_map = __esm({ + "p-map/index.js"() { + __name(pMap, "pMap"); + pMapSkip = Symbol("skip"); + } + }); + var toString; + var PresentableError; + var init_presentable_error = __esm({ + "presentable-error/index.js"() { + ({ toString } = Object.prototype); + PresentableError = class _PresentableError extends Error { + static { + __name(this, "PresentableError"); + } + constructor(message, { cause } = {}) { + super(); + if (message instanceof _PresentableError) { + return message; + } + if (typeof message !== "string") { + throw new TypeError("Message required."); + } + this.name = "PresentableError"; + this.message = message; + this.cause = cause; + } + get isPresentable() { + return true; + } + }; + } + }); + var del_exports = {}; + __export2(del_exports, { + deleteAsync: () => deleteAsync, + deleteSync: () => deleteSync + }); + function safeCheck(file, cwd) { + if (isPathCwd(file)) { + throw new PresentableError("Cannot delete the current working directory. Can be overridden with the `force` option."); + } + if (!isPathInside(file, cwd)) { + throw new PresentableError("Cannot delete files/directories outside the current working directory. Can be overridden with the `force` option."); + } + } + function normalizePatterns(patterns) { + patterns = Array.isArray(patterns) ? patterns : [patterns]; + patterns = patterns.map((pattern) => { + if (import_node_process4.default.platform === "win32" && (0, import_is_glob.default)(pattern) === false) { + return slash(pattern); + } + return pattern; + }); + return patterns; + } + async function deleteAsync(patterns, { force, dryRun, cwd = import_node_process4.default.cwd(), onProgress = /* @__PURE__ */ __name(() => { + }, "onProgress"), ...options } = {}) { + options = { + expandDirectories: false, + onlyFiles: false, + followSymbolicLinks: false, + cwd, + ...options + }; + patterns = normalizePatterns(patterns); + const paths = await globby(patterns, options); + const files = paths.sort((a, b) => b.localeCompare(a)); + if (files.length === 0) { + onProgress({ + totalCount: 0, + deletedCount: 0, + percent: 1 + }); + } + let deletedCount = 0; + const mapper = /* @__PURE__ */ __name(async (file) => { + file = import_node_path6.default.resolve(cwd, file); + if (!force) { + safeCheck(file, cwd); + } + if (!dryRun) { + await import_promises4.default.rm(file, { recursive: true, force: true }); + } + deletedCount += 1; + onProgress({ + totalCount: files.length, + deletedCount, + percent: deletedCount / files.length, + path: file + }); + return file; + }, "mapper"); + const removedFiles = await pMap(files, mapper, options); + removedFiles.sort((a, b) => a.localeCompare(b)); + return removedFiles; + } + function deleteSync(patterns, { force, dryRun, cwd = import_node_process4.default.cwd(), ...options } = {}) { + options = { + expandDirectories: false, + onlyFiles: false, + followSymbolicLinks: false, + cwd, + ...options + }; + patterns = normalizePatterns(patterns); + const files = globbySync(patterns, options).sort((a, b) => b.localeCompare(a)); + const removedFiles = files.map((file) => { + file = import_node_path6.default.resolve(cwd, file); + if (!force) { + safeCheck(file, cwd); + } + if (!dryRun) { + import_node_fs4.default.rmSync(file, { recursive: true, force: true }); + } + return file; + }); + removedFiles.sort((a, b) => a.localeCompare(b)); + return removedFiles; + } + var import_node_fs4; + var import_promises4; + var import_node_path6; + var import_node_process4; + var import_is_glob; + var init_del = __esm({ + "del/index.js"() { + import_node_fs4 = __toESM2(require("node:fs"), 1); + import_promises4 = __toESM2(require("node:fs/promises"), 1); + import_node_path6 = __toESM2(require("node:path"), 1); + import_node_process4 = __toESM2(require("node:process"), 1); + init_globby(); + import_is_glob = __toESM2(require_is_glob(), 1); + init_is_path_cwd(); + init_is_path_inside(); + init_p_map(); + init_slash(); + init_presentable_error(); + __name(safeCheck, "safeCheck"); + __name(normalizePatterns, "normalizePatterns"); + __name(deleteAsync, "deleteAsync"); + __name(deleteSync, "deleteSync"); + } + }); + var picomatch = require_picomatch2(); + var { deleteAsync: deleteAsync2, deleteSync: deleteSync2 } = (init_del(), __toCommonJS2(del_exports)); + var fastGlob3 = require_out4(); + var del = { + deleteAsync: deleteAsync2, + deleteSync: deleteSync2 + }; + var glob = fastGlob3.globStream ? { + glob: fastGlob3, + globStream: fastGlob3.globStream, + globSync: fastGlob3.sync + } : fastGlob3; + module2.exports = { + del, + glob, + picomatch + }; + } +}); + +// @socketsecurity/lib/dist/external/del.js +var require_del = __commonJS({ + "@socketsecurity/lib/dist/external/del.js"(exports2, module2) { + "use strict"; + var { del } = require_pico_pack(); + module2.exports = del; + } +}); + +// @socketsecurity/lib/dist/fs.js +var require_fs = __commonJS({ + "@socketsecurity/lib/dist/fs.js"(exports2, module2) { + "use strict"; + var __create2 = Object.create; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __getProtoOf2 = Object.getPrototypeOf; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target, + mod + )); + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var fs_exports = {}; + __export2(fs_exports, { + findUp: () => findUp, + findUpSync: () => findUpSync, + invalidatePathCache: () => invalidatePathCache, + isDir: () => isDir, + isDirEmptySync: () => isDirEmptySync, + isDirSync: () => isDirSync, + isSymLinkSync: () => isSymLinkSync, + normalizeEncoding: () => normalizeEncoding, + normalizeEncodingSlow: () => normalizeEncodingSlow, + readDirNames: () => readDirNames, + readDirNamesSync: () => readDirNamesSync, + readFileBinary: () => readFileBinary, + readFileBinarySync: () => readFileBinarySync, + readFileUtf8: () => readFileUtf8, + readFileUtf8Sync: () => readFileUtf8Sync, + readJson: () => readJson, + readJsonSync: () => readJsonSync, + safeDelete: () => safeDelete, + safeDeleteSync: () => safeDeleteSync, + safeMkdir: () => safeMkdir, + safeMkdirSync: () => safeMkdirSync, + safeReadFile: () => safeReadFile, + safeReadFileSync: () => safeReadFileSync, + safeStats: () => safeStats, + safeStatsSync: () => safeStatsSync, + uniqueSync: () => uniqueSync, + validateFiles: () => validateFiles, + writeJson: () => writeJson, + writeJsonSync: () => writeJsonSync + }); + module2.exports = __toCommonJS2(fs_exports); + var import_node_process = __toESM2(require("node:process")); + var import_process = require_process(); + var import_arrays = require_arrays(); + var import_promises = require_promises(); + var import_globs = require_globs(); + var import_parse = require_parse(); + var import_objects = require_objects(); + var import_normalize = require_normalize(); + var import_rewire = require_rewire(); + var import_socket = require_socket3(); + var import_sorts = require_sorts(); + var _del; + // @__NO_SIDE_EFFECTS__ + function getDel() { + if (_del === void 0) { + _del = require_del(); + } + return _del; + } + var abortSignal = (0, import_process.getAbortSignal)(); + var defaultRemoveOptions = (0, import_objects.objectFreeze)({ + __proto__: null, + force: true, + maxRetries: 3, + recursive: true, + retryDelay: 200 + }); + var _cachedAllowedDirs; + function getAllowedDirectories() { + if (_cachedAllowedDirs === void 0) { + const path = /* @__PURE__ */ getPath(); + _cachedAllowedDirs = [ + path.resolve((0, import_socket.getOsTmpDir)()), + path.resolve((0, import_socket.getSocketCacacheDir)()), + path.resolve((0, import_socket.getSocketUserDir)()) + ]; + } + return _cachedAllowedDirs; + } + var _buffer; + // @__NO_SIDE_EFFECTS__ + function getBuffer() { + if (_buffer === void 0) { + _buffer = require("buffer"); + } + return _buffer; + } + var _fs; + // @__NO_SIDE_EFFECTS__ + function getFs() { + if (_fs === void 0) { + _fs = require("fs"); + } + return _fs; + } + var _path; + // @__NO_SIDE_EFFECTS__ + function getPath() { + if (_path === void 0) { + _path = require("path"); + } + return _path; + } + // @__NO_SIDE_EFFECTS__ + function innerReadDirNames(dirents, dirname, options) { + const { + ignore, + includeEmpty = true, + sort = true + } = { __proto__: null, ...options }; + const path = /* @__PURE__ */ getPath(); + const names = dirents.filter( + (d) => d.isDirectory() && (includeEmpty || !/* @__PURE__ */ isDirEmptySync(path.join(dirname || d.parentPath, d.name), { + ignore + })) + ).map((d) => d.name); + return sort ? names.sort(import_sorts.naturalCompare) : names; + } + // @__NO_SIDE_EFFECTS__ + function stringify(json, EOL, finalEOL, replacer, spaces = 2) { + const EOF = finalEOL ? EOL : ""; + const str = JSON.stringify(json, replacer, spaces); + return `${str.replace(/\n/g, EOL)}${EOF}`; + } + // @__NO_SIDE_EFFECTS__ + async function findUp(name, options) { + const { cwd = import_node_process.default.cwd(), signal = abortSignal } = { + __proto__: null, + ...options + }; + let { onlyDirectories = false, onlyFiles = true } = { + __proto__: null, + ...options + }; + if (onlyDirectories) { + onlyFiles = false; + } + if (onlyFiles) { + onlyDirectories = false; + } + const fs = /* @__PURE__ */ getFs(); + const path = /* @__PURE__ */ getPath(); + let dir = path.resolve(cwd); + const { root } = path.parse(dir); + const names = (0, import_arrays.isArray)(name) ? name : [name]; + while (dir && dir !== root) { + for (const n of names) { + if (signal?.aborted) { + return void 0; + } + const thePath = path.join(dir, n); + try { + const stats = await fs.promises.stat(thePath); + if (!onlyDirectories && stats.isFile()) { + return (0, import_normalize.normalizePath)(thePath); + } + if (!onlyFiles && stats.isDirectory()) { + return (0, import_normalize.normalizePath)(thePath); + } + } catch { + } + } + dir = path.dirname(dir); + } + return void 0; + } + // @__NO_SIDE_EFFECTS__ + function findUpSync(name, options) { + const { cwd = import_node_process.default.cwd(), stopAt } = { + __proto__: null, + ...options + }; + let { onlyDirectories = false, onlyFiles = true } = { + __proto__: null, + ...options + }; + if (onlyDirectories) { + onlyFiles = false; + } + if (onlyFiles) { + onlyDirectories = false; + } + const fs = /* @__PURE__ */ getFs(); + const path = /* @__PURE__ */ getPath(); + let dir = path.resolve(cwd); + const { root } = path.parse(dir); + const stopDir = stopAt ? path.resolve(stopAt) : void 0; + const names = (0, import_arrays.isArray)(name) ? name : [name]; + while (dir && dir !== root) { + if (stopDir && dir === stopDir) { + for (const n of names) { + const thePath = path.join(dir, n); + try { + const stats = fs.statSync(thePath); + if (!onlyDirectories && stats.isFile()) { + return (0, import_normalize.normalizePath)(thePath); + } + if (!onlyFiles && stats.isDirectory()) { + return (0, import_normalize.normalizePath)(thePath); + } + } catch { + } + } + return void 0; + } + for (const n of names) { + const thePath = path.join(dir, n); + try { + const stats = fs.statSync(thePath); + if (!onlyDirectories && stats.isFile()) { + return (0, import_normalize.normalizePath)(thePath); + } + if (!onlyFiles && stats.isDirectory()) { + return (0, import_normalize.normalizePath)(thePath); + } + } catch { + } + } + dir = path.dirname(dir); + } + return void 0; + } + function invalidatePathCache() { + _cachedAllowedDirs = void 0; + } + (0, import_rewire.registerCacheInvalidation)(invalidatePathCache); + // @__NO_SIDE_EFFECTS__ + async function isDir(filepath) { + return !!(await /* @__PURE__ */ safeStats(filepath))?.isDirectory(); + } + // @__NO_SIDE_EFFECTS__ + function isDirSync(filepath) { + return !!(/* @__PURE__ */ safeStatsSync(filepath))?.isDirectory(); + } + // @__NO_SIDE_EFFECTS__ + function isDirEmptySync(dirname, options) { + const { ignore = import_globs.defaultIgnore } = { + __proto__: null, + ...options + }; + const fs = /* @__PURE__ */ getFs(); + try { + const files = fs.readdirSync(dirname); + const { length } = files; + if (length === 0) { + return true; + } + const matcher = (0, import_globs.getGlobMatcher)( + ignore, + { + cwd: (0, import_normalize.pathLikeToString)(dirname) + } + ); + let ignoredCount = 0; + for (let i = 0; i < length; i += 1) { + const file = files[i]; + if (file && matcher(file)) { + ignoredCount += 1; + } + } + return ignoredCount === length; + } catch { + return false; + } + } + // @__NO_SIDE_EFFECTS__ + function isSymLinkSync(filepath) { + const fs = /* @__PURE__ */ getFs(); + try { + return fs.lstatSync(filepath).isSymbolicLink(); + } catch { + } + return false; + } + // @__NO_SIDE_EFFECTS__ + function normalizeEncoding(enc) { + return enc == null || enc === "utf8" || enc === "utf-8" ? "utf8" : /* @__PURE__ */ normalizeEncodingSlow(enc); + } + // @__NO_SIDE_EFFECTS__ + function normalizeEncodingSlow(enc) { + const { length } = enc; + if (length === 4) { + if (enc === "ucs2" || enc === "UCS2") { + return "utf16le"; + } + if (enc.toLowerCase() === "ucs2") { + return "utf16le"; + } + } else if (length === 3 && enc === "hex" || enc === "HEX" || enc.toLowerCase() === "hex") { + return "hex"; + } else if (length === 5) { + if (enc === "ascii") { + return "ascii"; + } + if (enc === "ucs-2") { + return "utf16le"; + } + if (enc === "ASCII") { + return "ascii"; + } + if (enc === "UCS-2") { + return "utf16le"; + } + enc = enc.toLowerCase(); + if (enc === "ascii") { + return "ascii"; + } + if (enc === "ucs-2") { + return "utf16le"; + } + } else if (length === 6) { + if (enc === "base64") { + return "base64"; + } + if (enc === "latin1" || enc === "binary") { + return "latin1"; + } + if (enc === "BASE64") { + return "base64"; + } + if (enc === "LATIN1" || enc === "BINARY") { + return "latin1"; + } + enc = enc.toLowerCase(); + if (enc === "base64") { + return "base64"; + } + if (enc === "latin1" || enc === "binary") { + return "latin1"; + } + } else if (length === 7) { + if (enc === "utf16le" || enc === "UTF16LE" || enc.toLowerCase() === "utf16le") { + return "utf16le"; + } + } else if (length === 8) { + if (enc === "utf-16le" || enc === "UTF-16LE" || enc.toLowerCase() === "utf-16le") { + return "utf16le"; + } + } else if (length === 9) { + if (enc === "base64url" || enc === "BASE64URL" || enc.toLowerCase() === "base64url") { + return "base64url"; + } + } + return "utf8"; + } + // @__NO_SIDE_EFFECTS__ + async function readDirNames(dirname, options) { + const fs = /* @__PURE__ */ getFs(); + try { + return /* @__PURE__ */ innerReadDirNames( + await fs.promises.readdir(dirname, { + __proto__: null, + encoding: "utf8", + withFileTypes: true + }), + String(dirname), + options + ); + } catch { + } + return []; + } + // @__NO_SIDE_EFFECTS__ + function readDirNamesSync(dirname, options) { + const fs = /* @__PURE__ */ getFs(); + try { + return /* @__PURE__ */ innerReadDirNames( + fs.readdirSync(dirname, { + __proto__: null, + encoding: "utf8", + withFileTypes: true + }), + String(dirname), + options + ); + } catch { + } + return []; + } + // @__NO_SIDE_EFFECTS__ + async function readFileBinary(filepath, options) { + const opts = typeof options === "string" ? { encoding: options } : options; + const fs = /* @__PURE__ */ getFs(); + return await fs.promises.readFile(filepath, { + signal: abortSignal, + ...opts, + encoding: null + }); + } + // @__NO_SIDE_EFFECTS__ + async function readFileUtf8(filepath, options) { + const opts = typeof options === "string" ? { encoding: options } : options; + const fs = /* @__PURE__ */ getFs(); + return await fs.promises.readFile(filepath, { + signal: abortSignal, + ...opts, + encoding: "utf8" + }); + } + // @__NO_SIDE_EFFECTS__ + function readFileBinarySync(filepath, options) { + const opts = typeof options === "string" ? { encoding: options } : options; + const fs = /* @__PURE__ */ getFs(); + return fs.readFileSync(filepath, { + ...opts, + encoding: null + }); + } + // @__NO_SIDE_EFFECTS__ + function readFileUtf8Sync(filepath, options) { + const opts = typeof options === "string" ? { encoding: options } : options; + const fs = /* @__PURE__ */ getFs(); + return fs.readFileSync(filepath, { + ...opts, + encoding: "utf8" + }); + } + // @__NO_SIDE_EFFECTS__ + async function readJson(filepath, options) { + const opts = typeof options === "string" ? { encoding: options } : options; + const { reviver, throws, ...fsOptions } = { + __proto__: null, + ...opts + }; + const shouldThrow = throws === void 0 || !!throws; + const fs = /* @__PURE__ */ getFs(); + let content = ""; + try { + content = await fs.promises.readFile(filepath, { + __proto__: null, + ...fsOptions, + encoding: "utf8" + }); + } catch (e) { + if (shouldThrow) { + const code = e.code; + if (code === "ENOENT") { + throw new Error( + `JSON file not found: ${filepath} +Ensure the file exists or create it with the expected structure.`, + { cause: e } + ); + } + if (code === "EACCES" || code === "EPERM") { + throw new Error( + `Permission denied reading JSON file: ${filepath} +Check file permissions or run with appropriate access.`, + { cause: e } + ); + } + throw e; + } + return void 0; + } + return (0, import_parse.jsonParse)(content, { + filepath: String(filepath), + reviver, + throws: shouldThrow + }); + } + // @__NO_SIDE_EFFECTS__ + function readJsonSync(filepath, options) { + const opts = typeof options === "string" ? { encoding: options } : options; + const { reviver, throws, ...fsOptions } = { + __proto__: null, + ...opts + }; + const shouldThrow = throws === void 0 || !!throws; + const fs = /* @__PURE__ */ getFs(); + let content = ""; + try { + content = fs.readFileSync(filepath, { + __proto__: null, + ...fsOptions, + encoding: "utf8" + }); + } catch (e) { + if (shouldThrow) { + const code = e.code; + if (code === "ENOENT") { + throw new Error( + `JSON file not found: ${filepath} +Ensure the file exists or create it with the expected structure.`, + { cause: e } + ); + } + if (code === "EACCES" || code === "EPERM") { + throw new Error( + `Permission denied reading JSON file: ${filepath} +Check file permissions or run with appropriate access.`, + { cause: e } + ); + } + throw e; + } + return void 0; + } + return (0, import_parse.jsonParse)(content, { + filepath: String(filepath), + reviver, + throws: shouldThrow + }); + } + async function safeDelete(filepath, options) { + const opts = { __proto__: null, ...options }; + const patterns = (0, import_arrays.isArray)(filepath) ? filepath.map(import_normalize.pathLikeToString) : [(0, import_normalize.pathLikeToString)(filepath)]; + let shouldForce = opts.force !== false; + if (!shouldForce && patterns.length > 0) { + const path = /* @__PURE__ */ getPath(); + const allowedDirs = getAllowedDirectories(); + const allInAllowedDirs = patterns.every((pattern) => { + const resolvedPath = path.resolve(pattern); + for (const allowedDir of allowedDirs) { + const isInAllowedDir = resolvedPath.startsWith(allowedDir + path.sep) || resolvedPath === allowedDir; + const relativePath = path.relative(allowedDir, resolvedPath); + const isGoingBackward = relativePath.startsWith(".."); + if (isInAllowedDir && !isGoingBackward) { + return true; + } + } + return false; + }); + if (allInAllowedDirs) { + shouldForce = true; + } + } + const maxRetries = opts.maxRetries ?? defaultRemoveOptions.maxRetries; + const retryDelay = opts.retryDelay ?? defaultRemoveOptions.retryDelay; + const del = /* @__PURE__ */ getDel(); + await (0, import_promises.pRetry)( + async () => { + await del.deleteAsync(patterns, { + dryRun: false, + force: shouldForce, + onlyFiles: false + }); + }, + { + retries: maxRetries, + baseDelayMs: retryDelay, + backoffFactor: 2, + signal: opts.signal + } + ); + } + function safeDeleteSync(filepath, options) { + const opts = { __proto__: null, ...options }; + const patterns = (0, import_arrays.isArray)(filepath) ? filepath.map(import_normalize.pathLikeToString) : [(0, import_normalize.pathLikeToString)(filepath)]; + let shouldForce = opts.force !== false; + if (!shouldForce && patterns.length > 0) { + const path = /* @__PURE__ */ getPath(); + const allowedDirs = getAllowedDirectories(); + const allInAllowedDirs = patterns.every((pattern) => { + const resolvedPath = path.resolve(pattern); + for (const allowedDir of allowedDirs) { + const isInAllowedDir = resolvedPath.startsWith(allowedDir + path.sep) || resolvedPath === allowedDir; + const relativePath = path.relative(allowedDir, resolvedPath); + const isGoingBackward = relativePath.startsWith(".."); + if (isInAllowedDir && !isGoingBackward) { + return true; + } + } + return false; + }); + if (allInAllowedDirs) { + shouldForce = true; + } + } + const maxRetries = opts.maxRetries ?? defaultRemoveOptions.maxRetries; + const retryDelay = opts.retryDelay ?? defaultRemoveOptions.retryDelay; + const del = /* @__PURE__ */ getDel(); + let lastError; + let delay = retryDelay; + for (let attempt = 0; attempt <= maxRetries; attempt++) { + try { + del.deleteSync(patterns, { + dryRun: false, + force: shouldForce, + onlyFiles: false + }); + return; + } catch (error) { + lastError = error; + if (attempt < maxRetries) { + const waitMs = delay; + Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, waitMs); + delay *= 2; + } + } + } + if (lastError) { + throw lastError; + } + } + async function safeMkdir(path, options) { + const fs = /* @__PURE__ */ getFs(); + const opts = { __proto__: null, recursive: true, ...options }; + try { + await fs.promises.mkdir(path, opts); + } catch (e) { + if (typeof e === "object" && e !== null && "code" in e && e.code !== "EEXIST") { + throw e; + } + } + } + function safeMkdirSync(path, options) { + const fs = /* @__PURE__ */ getFs(); + const opts = { __proto__: null, recursive: true, ...options }; + try { + fs.mkdirSync(path, opts); + } catch (e) { + if (typeof e === "object" && e !== null && "code" in e && e.code !== "EEXIST") { + throw e; + } + } + } + // @__NO_SIDE_EFFECTS__ + async function safeReadFile(filepath, options) { + const opts = typeof options === "string" ? { __proto__: null, encoding: options } : { __proto__: null, ...options }; + const { defaultValue, ...rawReadOpts } = opts; + const readOpts = { __proto__: null, ...rawReadOpts }; + const shouldReturnBuffer = readOpts.encoding === null; + const encoding = shouldReturnBuffer ? null : /* @__PURE__ */ normalizeEncoding(readOpts.encoding); + const fs = /* @__PURE__ */ getFs(); + try { + return await fs.promises.readFile(filepath, { + __proto__: null, + signal: abortSignal, + ...readOpts, + encoding + }); + } catch { + } + if (defaultValue === void 0) { + return void 0; + } + if (shouldReturnBuffer) { + const { Buffer: Buffer2 } = /* @__PURE__ */ getBuffer(); + return Buffer2.isBuffer(defaultValue) ? defaultValue : void 0; + } + return typeof defaultValue === "string" ? defaultValue : String(defaultValue); + } + // @__NO_SIDE_EFFECTS__ + function safeReadFileSync(filepath, options) { + const opts = typeof options === "string" ? { __proto__: null, encoding: options } : { __proto__: null, ...options }; + const { defaultValue, ...rawReadOpts } = opts; + const readOpts = { __proto__: null, ...rawReadOpts }; + const shouldReturnBuffer = readOpts.encoding === null; + const encoding = shouldReturnBuffer ? null : /* @__PURE__ */ normalizeEncoding(readOpts.encoding); + const fs = /* @__PURE__ */ getFs(); + try { + return fs.readFileSync(filepath, { + __proto__: null, + ...readOpts, + encoding + }); + } catch { + } + if (defaultValue === void 0) { + return void 0; + } + if (shouldReturnBuffer) { + const { Buffer: Buffer2 } = /* @__PURE__ */ getBuffer(); + return Buffer2.isBuffer(defaultValue) ? defaultValue : void 0; + } + return typeof defaultValue === "string" ? defaultValue : String(defaultValue); + } + // @__NO_SIDE_EFFECTS__ + async function safeStats(filepath) { + const fs = /* @__PURE__ */ getFs(); + try { + return await fs.promises.stat(filepath); + } catch { + } + return void 0; + } + // @__NO_SIDE_EFFECTS__ + function safeStatsSync(filepath, options) { + const opts = typeof options === "string" ? { encoding: options } : options; + const fs = /* @__PURE__ */ getFs(); + try { + return fs.statSync(filepath, { + __proto__: null, + throwIfNoEntry: false, + ...opts + }); + } catch { + } + return void 0; + } + // @__NO_SIDE_EFFECTS__ + function uniqueSync(filepath) { + const fs = /* @__PURE__ */ getFs(); + const path = /* @__PURE__ */ getPath(); + const filepathStr = String(filepath); + if (!fs.existsSync(filepathStr)) { + return (0, import_normalize.normalizePath)(filepathStr); + } + const dirname = path.dirname(filepathStr); + const ext = path.extname(filepathStr); + const basename = path.basename(filepathStr, ext); + let counter = 1; + let uniquePath; + do { + uniquePath = path.join(dirname, `${basename}-${counter}${ext}`); + counter++; + } while (fs.existsSync(uniquePath)); + return (0, import_normalize.normalizePath)(uniquePath); + } + // @__NO_SIDE_EFFECTS__ + function validateFiles(filepaths) { + const fs = /* @__PURE__ */ getFs(); + const validPaths = []; + const invalidPaths = []; + const { R_OK } = fs.constants; + for (const filepath of filepaths) { + try { + fs.accessSync(filepath, R_OK); + validPaths.push(filepath); + } catch { + invalidPaths.push(filepath); + } + } + return { __proto__: null, validPaths, invalidPaths }; + } + async function writeJson(filepath, jsonContent, options) { + const opts = typeof options === "string" ? { encoding: options } : options; + const { EOL, finalEOL, replacer, spaces, ...fsOptions } = { + __proto__: null, + ...opts + }; + const fs = /* @__PURE__ */ getFs(); + const jsonString = /* @__PURE__ */ stringify( + jsonContent, + EOL || "\n", + finalEOL !== void 0 ? finalEOL : true, + replacer, + spaces + ); + await fs.promises.writeFile(filepath, jsonString, { + encoding: "utf8", + ...fsOptions, + __proto__: null + }); + } + function writeJsonSync(filepath, jsonContent, options) { + const opts = typeof options === "string" ? { encoding: options } : options; + const { EOL, finalEOL, replacer, spaces, ...fsOptions } = { + __proto__: null, + ...opts + }; + const fs = /* @__PURE__ */ getFs(); + const jsonString = /* @__PURE__ */ stringify( + jsonContent, + EOL || "\n", + finalEOL !== void 0 ? finalEOL : true, + replacer, + spaces + ); + fs.writeFileSync(filepath, jsonString, { + encoding: "utf8", + ...fsOptions, + __proto__: null + }); + } + } +}); + +// @socketsecurity/lib/dist/http-request.js +var require_http_request = __commonJS({ + "@socketsecurity/lib/dist/http-request.js"(exports2, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var http_request_exports = {}; + __export2(http_request_exports, { + HttpResponseError: () => HttpResponseError, + enrichErrorMessage: () => enrichErrorMessage, + fetchChecksums: () => fetchChecksums, + httpDownload: () => httpDownload, + httpJson: () => httpJson18, + httpRequest: () => httpRequest, + httpText: () => httpText, + parseChecksums: () => parseChecksums, + parseRetryAfterHeader: () => parseRetryAfterHeader, + readIncomingResponse: () => readIncomingResponse, + sanitizeHeaders: () => sanitizeHeaders + }); + module2.exports = __toCommonJS2(http_request_exports); + var import_socket = require_socket(); + var import_fs = require_fs(); + var _fs; + // @__NO_SIDE_EFFECTS__ + function getFs() { + if (_fs === void 0) { + _fs = require("fs"); + } + return _fs; + } + var _crypto; + var _http; + var _https; + // @__NO_SIDE_EFFECTS__ + function getCrypto() { + if (_crypto === void 0) { + _crypto = require("crypto"); + } + return _crypto; + } + // @__NO_SIDE_EFFECTS__ + function getHttp() { + if (_http === void 0) { + _http = require("http"); + } + return _http; + } + // @__NO_SIDE_EFFECTS__ + function getHttps() { + if (_https === void 0) { + _https = require("https"); + } + return _https; + } + async function readIncomingResponse(msg) { + const chunks = []; + for await (const chunk of msg) { + chunks.push(chunk); + } + const body = Buffer.concat(chunks); + const status = msg.statusCode ?? 0; + const statusText = msg.statusMessage ?? ""; + return { + arrayBuffer: () => body.buffer.slice( + body.byteOffset, + body.byteOffset + body.byteLength + ), + body, + headers: msg.headers, + json: () => JSON.parse(body.toString("utf8")), + ok: status >= 200 && status < 300, + rawResponse: msg, + status, + statusText, + text: () => body.toString("utf8") + }; + } + var HttpResponseError = class _HttpResponseError extends Error { + response; + constructor(response, message) { + const statusCode = response.status ?? "unknown"; + const statusMessage = response.statusText || "No status message"; + super(message ?? `HTTP ${statusCode}: ${statusMessage}`); + this.name = "HttpResponseError"; + this.response = response; + Error.captureStackTrace(this, _HttpResponseError); + } + }; + function parseRetryAfterHeader(value) { + if (!value) { + return void 0; + } + const raw = Array.isArray(value) ? value[0] : value; + if (!raw) { + return void 0; + } + const trimmed = raw.trim(); + if (/^\d+$/.test(trimmed)) { + const seconds = Number(trimmed); + return seconds * 1e3; + } + const date = new Date(raw); + if (!Number.isNaN(date.getTime())) { + const delayMs = date.getTime() - Date.now(); + if (delayMs > 0) { + return delayMs; + } + } + return void 0; + } + function sanitizeHeaders(headers) { + if (!headers) { + return {}; + } + const sensitiveHeaders = /* @__PURE__ */ new Set([ + "authorization", + "cookie", + "proxy-authorization", + "proxy-authenticate", + "set-cookie", + "www-authenticate" + ]); + const result = { __proto__: null }; + for (const key of Object.keys(headers)) { + const value = headers[key]; + if (sensitiveHeaders.has(key.toLowerCase())) { + result[key] = "[REDACTED]"; + } else if (Array.isArray(value)) { + result[key] = value.join(", "); + } else if (value !== void 0 && value !== null) { + result[key] = String(value); + } + } + return result; + } + function parseChecksums(text) { + const checksums = { __proto__: null }; + for (const line of text.split("\n")) { + const trimmed = line.trim(); + if (!trimmed || trimmed.startsWith("#")) { + continue; + } + const bsdMatch = trimmed.match( + /^SHA256\s+\((.+)\)\s+=\s+([a-fA-F0-9]{64})$/ + ); + if (bsdMatch) { + checksums[bsdMatch[1]] = bsdMatch[2].toLowerCase(); + continue; + } + const gnuMatch = trimmed.match(/^([a-fA-F0-9]{64})\s+(.+)$/); + if (gnuMatch) { + checksums[gnuMatch[2]] = gnuMatch[1].toLowerCase(); + } + } + return checksums; + } + async function fetchChecksums(url, options) { + const { + ca, + headers = {}, + timeout = 3e4 + } = { + __proto__: null, + ...options + }; + const response = await httpRequest(url, { ca, headers, timeout }); + if (!response.ok) { + throw new Error( + `Failed to fetch checksums from ${url}: ${response.status} ${response.statusText}` + ); + } + return parseChecksums(response.body.toString("utf8")); + } + async function httpDownloadAttempt(url, destPath, options) { + const { + ca, + followRedirects = true, + headers = {}, + maxRedirects = 5, + onProgress, + timeout = 12e4 + } = { __proto__: null, ...options }; + const response = await httpRequestAttempt(url, { + ca, + followRedirects, + headers, + maxRedirects, + method: "GET", + stream: true, + timeout + }); + if (!response.ok) { + throw new Error( + `Download failed: HTTP ${response.status} ${response.statusText}` + ); + } + const res = response.rawResponse; + if (!res) { + throw new Error("Stream response missing rawResponse"); + } + const { createWriteStream } = /* @__PURE__ */ getFs(); + const totalSize = Number.parseInt( + response.headers["content-length"] || "0", + 10 + ); + return await new Promise((resolve, reject) => { + let downloadedSize = 0; + const fileStream = createWriteStream(destPath); + fileStream.on("error", (error) => { + fileStream.close(); + reject( + new Error(`Failed to write file: ${error.message}`, { cause: error }) + ); + }); + res.on("data", (chunk) => { + downloadedSize += chunk.length; + if (onProgress && totalSize > 0) { + onProgress(downloadedSize, totalSize); + } + }); + res.on("end", () => { + fileStream.close(() => { + resolve({ + headers: response.headers, + ok: true, + path: destPath, + size: downloadedSize, + status: response.status, + statusText: response.statusText + }); + }); + }); + res.on("error", (error) => { + fileStream.close(); + reject(error); + }); + res.pipe(fileStream); + }); + } + function enrichErrorMessage(url, method, error) { + const code = error.code; + let message = `${method} request failed: ${url}`; + if (code === "ECONNREFUSED") { + message += "\n\u2192 Connection refused. Server is unreachable.\n\u2192 Check: Network connectivity and firewall settings."; + } else if (code === "ENOTFOUND") { + message += "\n\u2192 DNS lookup failed. Cannot resolve hostname.\n\u2192 Check: Internet connection and DNS settings."; + } else if (code === "ETIMEDOUT") { + message += "\n\u2192 Connection timed out. Network or server issue.\n\u2192 Try: Check network connectivity and retry."; + } else if (code === "ECONNRESET") { + message += "\n\u2192 Connection reset by server. Possible network interruption.\n\u2192 Try: Retry the request."; + } else if (code === "EPIPE") { + message += "\n\u2192 Broken pipe. Server closed connection unexpectedly.\n\u2192 Check: Authentication credentials and permissions."; + } else if (code === "CERT_HAS_EXPIRED" || code === "UNABLE_TO_VERIFY_LEAF_SIGNATURE") { + message += "\n\u2192 SSL/TLS certificate error.\n\u2192 Check: System time and date are correct.\n\u2192 Try: Update CA certificates on your system."; + } else if (code) { + message += ` +\u2192 Error code: ${code}`; + } + return message; + } + async function httpRequestAttempt(url, options) { + const { + body, + ca, + followRedirects = true, + headers = {}, + hooks, + maxRedirects = 5, + maxResponseSize, + method = "GET", + stream = false, + timeout = 3e4 + } = { __proto__: null, ...options }; + const startTime = Date.now(); + const streamHeaders = body && typeof body === "object" && "getHeaders" in body && typeof body.getHeaders === "function" ? body.getHeaders() : void 0; + const mergedHeaders = { + "User-Agent": import_socket.SOCKET_LIB_USER_AGENT, + ...streamHeaders, + ...headers + }; + hooks?.onRequest?.({ method, url, headers: mergedHeaders, timeout }); + return await new Promise((resolve, reject) => { + let settled = false; + const resolveOnce = (response) => { + if (settled) { + return; + } + settled = true; + resolve(response); + }; + const rejectOnce = (err) => { + if (settled) { + return; + } + settled = true; + if (body && typeof body === "object" && typeof body.destroy === "function") { + ; + body.destroy(); + } + emitResponse({ error: err }); + reject(err); + }; + const parsedUrl = new URL(url); + const isHttps = parsedUrl.protocol === "https:"; + const httpModule = isHttps ? /* @__PURE__ */ getHttps() : /* @__PURE__ */ getHttp(); + const requestOptions = { + headers: mergedHeaders, + hostname: parsedUrl.hostname, + method, + path: parsedUrl.pathname + parsedUrl.search, + port: parsedUrl.port, + timeout + }; + if (ca && isHttps) { + requestOptions["ca"] = ca; + } + const emitResponse = (info) => { + try { + hooks?.onResponse?.({ + duration: Date.now() - startTime, + method, + url, + ...info + }); + } catch { + } + }; + const request = httpModule.request( + requestOptions, + (res) => { + if (followRedirects && res.statusCode && res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) { + res.resume(); + emitResponse({ + headers: res.headers, + status: res.statusCode, + statusText: res.statusMessage + }); + if (maxRedirects <= 0) { + settled = true; + reject( + new Error( + `Too many redirects (exceeded maximum: ${maxRedirects})` + ) + ); + return; + } + const redirectUrl = res.headers.location.startsWith("http") ? res.headers.location : new URL(res.headers.location, url).toString(); + const redirectParsed = new URL(redirectUrl); + if (isHttps && redirectParsed.protocol !== "https:") { + settled = true; + reject( + new Error( + `Redirect from HTTPS to HTTP is not allowed: ${redirectUrl}` + ) + ); + return; + } + settled = true; + resolve( + httpRequestAttempt(redirectUrl, { + body, + ca, + followRedirects, + headers, + hooks, + maxRedirects: maxRedirects - 1, + maxResponseSize, + method, + stream, + timeout + }) + ); + return; + } + if (stream) { + const status = res.statusCode || 0; + const statusText = res.statusMessage || ""; + const ok = status >= 200 && status < 300; + emitResponse({ + headers: res.headers, + status, + statusText + }); + const emptyBody = Buffer.alloc(0); + resolveOnce({ + arrayBuffer: () => emptyBody.buffer, + body: emptyBody, + headers: res.headers, + json: () => { + throw new Error("Cannot parse JSON from a streaming response"); + }, + ok, + rawResponse: res, + status, + statusText, + text: () => "" + }); + return; + } + const chunks = []; + let totalBytes = 0; + res.on("data", (chunk) => { + totalBytes += chunk.length; + if (maxResponseSize && totalBytes > maxResponseSize) { + res.destroy(); + request.destroy(); + const sizeMB = (totalBytes / (1024 * 1024)).toFixed(2); + const maxMB = (maxResponseSize / (1024 * 1024)).toFixed(2); + rejectOnce( + new Error( + `Response exceeds maximum size limit (${sizeMB}MB > ${maxMB}MB)` + ) + ); + return; + } + chunks.push(chunk); + }); + res.on("end", () => { + if (settled) { + return; + } + const responseBody = Buffer.concat(chunks); + const ok = res.statusCode !== void 0 && res.statusCode >= 200 && res.statusCode < 300; + const response = { + arrayBuffer() { + return responseBody.buffer.slice( + responseBody.byteOffset, + responseBody.byteOffset + responseBody.byteLength + ); + }, + body: responseBody, + headers: res.headers, + json() { + return JSON.parse(responseBody.toString("utf8")); + }, + ok, + rawResponse: res, + status: res.statusCode || 0, + statusText: res.statusMessage || "", + text() { + return responseBody.toString("utf8"); + } + }; + emitResponse({ + headers: res.headers, + status: res.statusCode, + statusText: res.statusMessage + }); + resolveOnce(response); + }); + res.on("error", (error) => { + rejectOnce(error); + }); + } + ); + request.on("error", (error) => { + const message = enrichErrorMessage( + url, + method, + error + ); + rejectOnce(new Error(message, { cause: error })); + }); + request.on("timeout", () => { + request.destroy(); + rejectOnce( + new Error( + `${method} request timed out after ${timeout}ms: ${url} +\u2192 Server did not respond in time. +\u2192 Try: Increase timeout or check network connectivity.` + ) + ); + }); + if (body) { + if (typeof body === "object" && typeof body.pipe === "function") { + const stream2 = body; + stream2.on("error", (err) => { + request.destroy(); + rejectOnce(err); + }); + stream2.pipe(request); + return; + } + request.write(body); + request.end(); + } else { + request.end(); + } + }); + } + async function httpDownload(url, destPath, options) { + const { + ca, + followRedirects = true, + headers = {}, + logger, + maxRedirects = 5, + onProgress, + progressInterval = 10, + retries = 0, + retryDelay = 1e3, + sha256, + timeout = 12e4 + } = { __proto__: null, ...options }; + let progressCallback; + if (onProgress) { + progressCallback = onProgress; + } else if (logger) { + let lastPercent = 0; + progressCallback = (downloaded, total) => { + const percent = total === 0 ? 0 : Math.floor(downloaded / total * 100); + if (percent >= lastPercent + progressInterval) { + logger.log( + ` Progress: ${percent}% (${(downloaded / 1024 / 1024).toFixed(1)} MB / ${(total / 1024 / 1024).toFixed(1)} MB)` + ); + lastPercent = percent; + } + }; + } + const crypto = /* @__PURE__ */ getCrypto(); + const fs = /* @__PURE__ */ getFs(); + const tempSuffix = crypto.randomBytes(6).toString("hex"); + const tempPath = `${destPath}.${tempSuffix}.download`; + if (fs.existsSync(tempPath)) { + await (0, import_fs.safeDelete)(tempPath); + } + let lastError; + for (let attempt = 0; attempt <= retries; attempt++) { + try { + const result = await httpDownloadAttempt(url, tempPath, { + ca, + followRedirects, + headers, + maxRedirects, + onProgress: progressCallback, + timeout + }); + if (sha256) { + const fileContent = await fs.promises.readFile(tempPath); + const computedHash = crypto.createHash("sha256").update(fileContent).digest("hex"); + const expectedHash = sha256.toLowerCase(); + if (computedHash.length !== expectedHash.length || !crypto.timingSafeEqual( + Buffer.from(computedHash), + Buffer.from(expectedHash) + )) { + await (0, import_fs.safeDelete)(tempPath); + throw new Error( + `Checksum verification failed for ${url} +Expected: ${expectedHash} +Computed: ${computedHash}` + ); + } + } + await fs.promises.rename(tempPath, destPath); + return { + ...result, + path: destPath + }; + } catch (e) { + lastError = e; + if (fs.existsSync(tempPath)) { + await (0, import_fs.safeDelete)(tempPath); + } + if (attempt === retries) { + break; + } + const delayMs = retryDelay * 2 ** attempt; + await new Promise((resolve) => setTimeout(resolve, delayMs)); + } + } + throw lastError || new Error("Download failed after retries"); + } + async function httpJson18(url, options) { + const { + body, + headers = {}, + ...restOptions + } = { + __proto__: null, + ...options + }; + const defaultHeaders = { + Accept: "application/json" + }; + if (body) { + defaultHeaders["Content-Type"] = "application/json"; + } + const mergedHeaders = { + ...defaultHeaders, + ...headers + }; + const response = await httpRequest(url, { + body, + headers: mergedHeaders, + ...restOptions + }); + if (!response.ok) { + throw new Error(`HTTP ${response.status}: ${response.statusText}`); + } + try { + return response.json(); + } catch (e) { + throw new Error("Failed to parse JSON response", { cause: e }); + } + } + async function httpRequest(url, options) { + const { + body, + ca, + followRedirects = true, + headers = {}, + hooks, + maxRedirects = 5, + maxResponseSize, + method = "GET", + onRetry, + retries = 0, + retryDelay = 1e3, + stream = false, + throwOnError = false, + timeout = 3e4 + } = { __proto__: null, ...options }; + const isStreamBody = body !== void 0 && typeof body === "object" && typeof body.pipe === "function"; + if (isStreamBody && retries > 0) { + throw new Error( + "Streaming body (Readable/FormData) cannot be used with retries. Streams are consumed on first attempt and cannot be replayed. Set retries: 0 or buffer the body as a string/Buffer." + ); + } + const attemptOpts = { + body, + ca, + // Disable redirect following for stream bodies — the stream is consumed + // on the first request and cannot be re-piped to the redirect target. + followRedirects: isStreamBody ? false : followRedirects, + headers, + hooks, + maxRedirects, + maxResponseSize, + method, + stream, + timeout + }; + let lastError; + for (let attempt = 0; attempt <= retries; attempt++) { + try { + const response = await httpRequestAttempt(url, attemptOpts); + if (throwOnError && !response.ok) { + throw new HttpResponseError(response); + } + return response; + } catch (e) { + lastError = e; + if (attempt === retries) { + break; + } + const delayMs = retryDelay * 2 ** attempt; + if (onRetry) { + const retryResult = onRetry(attempt + 1, e, delayMs); + if (retryResult === false) { + break; + } + const actualDelay = typeof retryResult === "number" && !Number.isNaN(retryResult) ? Math.max(0, retryResult) : delayMs; + await new Promise((resolve) => setTimeout(resolve, actualDelay)); + } else { + await new Promise((resolve) => setTimeout(resolve, delayMs)); + } + } + } + throw lastError || new Error("Request failed after retries"); + } + async function httpText(url, options) { + const { + body, + headers = {}, + ...restOptions + } = { + __proto__: null, + ...options + }; + const defaultHeaders = { + Accept: "text/plain" + }; + if (body) { + defaultHeaders["Content-Type"] = "text/plain"; + } + const mergedHeaders = { + ...defaultHeaders, + ...headers + }; + const response = await httpRequest(url, { + body, + headers: mergedHeaders, + ...restOptions + }); + if (!response.ok) { + throw new Error(`HTTP ${response.status}: ${response.statusText}`); + } + return response.text(); + } + } +}); + +// src/exists.ts +var exists_exports = {}; +__export(exists_exports, { + cargoExists: () => cargoExists, + cocoapodsExists: () => cocoapodsExists, + condaExists: () => condaExists, + cpanExists: () => cpanExists, + cranExists: () => cranExists, + dockerExists: () => dockerExists, + gemExists: () => gemExists, + golangExists: () => golangExists, + hackageExists: () => hackageExists, + hexExists: () => hexExists, + mavenExists: () => mavenExists, + npmExists: () => npmExists, + nugetExists: () => nugetExists, + packagistExists: () => packagistExists, + pubExists: () => pubExists, + purlExists: () => purlExists, + pypiExists: () => pypiExists, + vscodeExtensionExists: () => vscodeExtensionExists +}); +module.exports = __toCommonJS(exists_exports); + +// src/purl-types/cargo.ts +var import_http_request = __toESM(require_http_request()); + +// src/primordials.ts +var { apply, bind, call } = Function.prototype; +var uncurryThis = bind.bind(call); +var applyBind = bind.bind(apply); +var encodeComponent = globalThis.encodeURIComponent; +var decodeComponent = globalThis.decodeURIComponent; +var JSONStringify = JSON.stringify; +var ArrayIsArray = Array.isArray; +var ArrayPrototypeAt = uncurryThis(Array.prototype.at); +var ArrayPrototypeFilter = uncurryThis(Array.prototype.filter); +var ArrayPrototypeFlatMap = uncurryThis(Array.prototype.flatMap); +var ArrayPrototypeIncludes = uncurryThis(Array.prototype.includes); +var ArrayPrototypeJoin = uncurryThis(Array.prototype.join); +var ArrayPrototypeMap = uncurryThis(Array.prototype.map); +var ArrayPrototypePush = uncurryThis(Array.prototype.push); +var ArrayPrototypeSlice = uncurryThis(Array.prototype.slice); +var ArrayPrototypeSome = uncurryThis(Array.prototype.some); +var ArrayPrototypeToSorted = uncurryThis(Array.prototype.toSorted); +var NumberPrototypeToString = uncurryThis(Number.prototype.toString); +var RegExpPrototypeExec = uncurryThis(RegExp.prototype.exec); +var RegExpPrototypeTest = uncurryThis(RegExp.prototype.test); +var StringFromCharCode = String.fromCharCode; +var StringPrototypeCharCodeAt = uncurryThis(String.prototype.charCodeAt); +var StringPrototypeEndsWith = uncurryThis(String.prototype.endsWith); +var StringPrototypeIncludes = uncurryThis(String.prototype.includes); +var StringPrototypeIndexOf = uncurryThis(String.prototype.indexOf); +var StringPrototypeLastIndexOf = uncurryThis(String.prototype.lastIndexOf); +var StringPrototypeReplace = uncurryThis(String.prototype.replace); +var StringPrototypeReplaceAll = uncurryThis( + String.prototype.replaceAll +); +var StringPrototypePadStart = uncurryThis(String.prototype.padStart); +var StringPrototypeSlice = uncurryThis(String.prototype.slice); +var StringPrototypeSplit = uncurryThis(String.prototype.split); +var StringPrototypeStartsWith = uncurryThis(String.prototype.startsWith); +var StringPrototypeToLowerCase = uncurryThis(String.prototype.toLowerCase); +var StringPrototypeToUpperCase = uncurryThis(String.prototype.toUpperCase); +var StringPrototypeTrim = uncurryThis(String.prototype.trim); + +// src/purl-types/cargo.ts +async function cargoExists(name, version, options) { + const cacheKey = version ? `${name}@${version}` : name; + if (options?.cache) { + const cached = await options.cache.get(cacheKey); + if (cached !== void 0) { + return cached; + } + } + const fetchResult = async () => { + try { + const url = `https://crates.io/api/v1/crates/${encodeComponent(name)}`; + const data = await (0, import_http_request.httpJson)(url, { + headers: { + "User-Agent": "@socketregistry/packageurl-js" + } + }); + const latestVersion = data.crate?.["max_version"] || data.versions?.[0]?.["num"]; + if (version && data.versions) { + const versionExists = ArrayPrototypeSome( + data.versions, + (v) => v.num === version + ); + if (!versionExists) { + const result3 = { + exists: false, + error: `Version ${version} not found` + }; + if (latestVersion !== void 0) { + result3.latestVersion = latestVersion; + } + return result3; + } + } + const result2 = { + exists: true + }; + if (latestVersion !== void 0) { + result2.latestVersion = latestVersion; + } + return result2; + } catch (e) { + const error = e instanceof Error ? e.message : String(e); + return { + exists: false, + error: StringPrototypeIncludes(error, "404") ? "Crate not found" : error + }; + } + }; + const result = await fetchResult(); + if (options?.cache && result.exists) { + await options.cache.set(cacheKey, result); + } + return result; +} + +// src/purl-types/cocoapods.ts +var import_http_request2 = __toESM(require_http_request()); +async function cocoapodsExists(name, version, options) { + const cacheKey = version ? `${name}@${version}` : name; + if (options?.cache) { + const cached = await options.cache.get(cacheKey); + if (cached !== void 0) { + return cached; + } + } + const fetchResult = async () => { + try { + const url = `https://trunk.cocoapods.org/api/v1/pods/${encodeComponent(name)}`; + const data = await (0, import_http_request2.httpJson)(url); + const versions = data.versions; + if (!versions || versions.length === 0) { + return { exists: false, error: "No versions found" }; + } + const latestVersion = versions[0]?.["name"]; + if (version) { + const versionExists = ArrayPrototypeSome( + versions, + (v) => v.name === version + ); + if (!versionExists) { + const result3 = { + exists: false, + error: `Version ${version} not found` + }; + if (latestVersion !== void 0) { + result3.latestVersion = latestVersion; + } + return result3; + } + } + const result2 = { exists: true }; + if (latestVersion !== void 0) { + result2.latestVersion = latestVersion; + } + return result2; + } catch (e) { + const error = e instanceof Error ? e.message : String(e); + return { + exists: false, + error: StringPrototypeIncludes(error, "404") ? "Pod not found" : error + }; + } + }; + const result = await fetchResult(); + if (options?.cache && result.exists) { + await options.cache.set(cacheKey, result); + } + return result; +} + +// src/purl-types/conda.ts +var import_http_request3 = __toESM(require_http_request()); +async function condaExists(name, version, channel, options) { + const channelName = channel || "conda-forge"; + const cacheKey = version ? `${channelName}/${name}@${version}` : `${channelName}/${name}`; + if (options?.cache) { + const cached = await options.cache.get(cacheKey); + if (cached !== void 0) { + return cached; + } + } + const fetchResult = async () => { + try { + const encodedChannel = encodeComponent(channelName); + const encodedName = encodeComponent(name); + const url = `https://api.anaconda.org/package/${encodedChannel}/${encodedName}`; + const data = await (0, import_http_request3.httpJson)(url); + const latestVersion = data.latest_version; + if (version) { + if (!data.versions || !ArrayPrototypeIncludes(data.versions, version)) { + const result3 = { + exists: false, + error: `Version ${version} not found` + }; + if (latestVersion !== void 0) { + result3.latestVersion = latestVersion; + } + return result3; + } + } + const result2 = { + exists: true + }; + if (latestVersion !== void 0) { + result2.latestVersion = latestVersion; + } + return result2; + } catch (e) { + const error = e instanceof Error ? e.message : String(e); + return { + exists: false, + error: StringPrototypeIncludes(error, "404") ? "Package not found" : error + }; + } + }; + const result = await fetchResult(); + if (options?.cache && result.exists) { + await options.cache.set(cacheKey, result); + } + return result; +} + +// src/purl-types/docker.ts +var import_http_request4 = __toESM(require_http_request()); +async function dockerExists(name, namespace, version, options) { + const repo = namespace ? `${namespace}/${name}` : name; + const cacheKey = version ? `${repo}:${version}` : repo; + if (options?.cache) { + const cached = await options.cache.get(cacheKey); + if (cached !== void 0) { + return cached; + } + } + const fetchResult = async () => { + try { + const encodedRepo = namespace ? `${encodeComponent(namespace)}/${encodeComponent(name)}` : encodeComponent(name); + const url = `https://hub.docker.com/v2/repositories/${encodedRepo}`; + const data = await (0, import_http_request4.httpJson)(url); + if (!data.name) { + return { + exists: false, + error: "Image not found" + }; + } + if (version) { + try { + const tagUrl = `https://hub.docker.com/v2/repositories/${encodedRepo}/tags/${encodeComponent(version)}`; + await (0, import_http_request4.httpJson)(tagUrl); + } catch (e) { + const error = e instanceof Error ? e.message : String(e); + return { + exists: false, + error: StringPrototypeIncludes(error, "404") ? `Tag ${version} not found` : error + }; + } + } + return { + exists: true, + latestVersion: version || "latest" + }; + } catch (e) { + const error = e instanceof Error ? e.message : String(e); + return { + exists: false, + error: StringPrototypeIncludes(error, "404") ? "Image not found" : error + }; + } + }; + const result = await fetchResult(); + if (options?.cache && result.exists) { + await options.cache.set(cacheKey, result); + } + return result; +} + +// src/purl-types/composer.ts +var import_http_request5 = __toESM(require_http_request()); +async function packagistExists(name, namespace, version, options) { + if (!namespace) { + return { exists: false, error: "Composer requires namespace (vendor)" }; + } + const packageName = `${namespace}/${name}`; + const cacheKey = version ? `${packageName}@${version}` : packageName; + if (options?.cache) { + const cached = await options.cache.get(cacheKey); + if (cached !== void 0) { + return cached; + } + } + const fetchResult = async () => { + try { + const url = `https://repo.packagist.org/p2/${encodeComponent(packageName)}.json`; + const data = await (0, import_http_request5.httpJson)(url); + const packageVersions = data.packages?.[packageName]; + if (!packageVersions || packageVersions.length === 0) { + return { exists: false, error: "Package not found" }; + } + let latestVersion; + for (const pkg of packageVersions) { + const ver = pkg.version; + if (ver && !StringPrototypeIncludes(ver, "dev-")) { + latestVersion = ver; + break; + } + } + if (version) { + const versionExists = ArrayPrototypeSome( + packageVersions, + (pkg) => pkg.version === version + ); + if (!versionExists) { + const result3 = { + exists: false, + error: `Version ${version} not found` + }; + if (latestVersion !== void 0) { + result3.latestVersion = latestVersion; + } + return result3; + } + } + const result2 = { exists: true }; + if (latestVersion !== void 0) { + result2.latestVersion = latestVersion; + } + return result2; + } catch (e) { + const error = e instanceof Error ? e.message : String(e); + return { + exists: false, + error: StringPrototypeIncludes(error, "404") ? "Package not found" : error + }; + } + }; + const result = await fetchResult(); + if (options?.cache && result.exists) { + await options.cache.set(cacheKey, result); + } + return result; +} + +// src/purl-types/cpan.ts +var import_http_request6 = __toESM(require_http_request()); +async function cpanExists(name, version, options) { + const cacheKey = version ? `${name}@${version}` : name; + if (options?.cache) { + const cached = await options.cache.get(cacheKey); + if (cached !== void 0) { + return cached; + } + } + const fetchResult = async () => { + try { + const url = `https://fastapi.metacpan.org/v1/module/${encodeComponent(name)}`; + const data = await (0, import_http_request6.httpJson)(url); + const latestVersion = data.version; + if (version) { + const versionUrl = `https://fastapi.metacpan.org/v1/module/${encodeComponent(name)}/${encodeComponent(version)}`; + try { + await (0, import_http_request6.httpJson)(versionUrl); + } catch { + const result3 = { + exists: false, + error: `Version ${version} not found` + }; + if (latestVersion !== void 0) { + result3.latestVersion = latestVersion; + } + return result3; + } + } + const result2 = { exists: true }; + if (latestVersion !== void 0) { + result2.latestVersion = latestVersion; + } + return result2; + } catch (e) { + const error = e instanceof Error ? e.message : String(e); + return { + exists: false, + error: StringPrototypeIncludes(error, "404") ? "Module not found" : error + }; + } + }; + const result = await fetchResult(); + if (options?.cache && result.exists) { + await options.cache.set(cacheKey, result); + } + return result; +} + +// src/purl-types/cran.ts +var import_http_request7 = __toESM(require_http_request()); +async function cranExists(name, version, options) { + const cacheKey = version ? `${name}@${version}` : name; + if (options?.cache) { + const cached = await options.cache.get(cacheKey); + if (cached !== void 0) { + return cached; + } + } + const fetchResult = async () => { + try { + const url = `https://cran.r-universe.dev/api/packages/${encodeComponent(name)}`; + const data = await (0, import_http_request7.httpJson)(url); + const latestVersion = data.Version; + if (version) { + const versions = data.versions || []; + if (!ArrayPrototypeIncludes(versions, version)) { + const result3 = { + exists: false, + error: `Version ${version} not found` + }; + if (latestVersion !== void 0) { + result3.latestVersion = latestVersion; + } + return result3; + } + } + const result2 = { exists: true }; + if (latestVersion !== void 0) { + result2.latestVersion = latestVersion; + } + return result2; + } catch (e) { + const error = e instanceof Error ? e.message : String(e); + return { + exists: false, + error: StringPrototypeIncludes(error, "404") ? "Package not found" : error + }; + } + }; + const result = await fetchResult(); + if (options?.cache && result.exists) { + await options.cache.set(cacheKey, result); + } + return result; +} + +// src/purl-types/gem.ts +var import_http_request8 = __toESM(require_http_request()); +async function gemExists(name, version, options) { + const cacheKey = version ? `${name}@${version}` : name; + if (options?.cache) { + const cached = await options.cache.get(cacheKey); + if (cached !== void 0) { + return cached; + } + } + const fetchResult = async () => { + try { + const url = `https://rubygems.org/api/v1/versions/${encodeComponent(name)}.json`; + const data = await (0, import_http_request8.httpJson)(url); + if (!ArrayIsArray(data) || data.length === 0) { + return { + exists: false, + error: "No versions found" + }; + } + const latestVersion = data[0]?.["number"]; + if (version) { + const versionExists = ArrayPrototypeSome( + data, + (v) => v.number === version + ); + if (!versionExists) { + const result3 = { + exists: false, + error: `Version ${version} not found` + }; + if (latestVersion !== void 0) { + result3.latestVersion = latestVersion; + } + return result3; + } + } + const result2 = { + exists: true + }; + if (latestVersion !== void 0) { + result2.latestVersion = latestVersion; + } + return result2; + } catch (e) { + const error = e instanceof Error ? e.message : String(e); + return { + exists: false, + error: StringPrototypeIncludes(error, "404") ? "Gem not found" : error + }; + } + }; + const result = await fetchResult(); + if (options?.cache && result.exists) { + await options.cache.set(cacheKey, result); + } + return result; +} + +// src/purl-types/golang.ts +var import_http_request9 = __toESM(require_http_request()); +async function golangExists(name, namespace, version, options) { + const modulePath = namespace ? `${namespace}/${name}` : name; + const cacheKey = version ? `${modulePath}@${version}` : modulePath; + if (options?.cache) { + const cached = await options.cache.get(cacheKey); + if (cached !== void 0) { + return cached; + } + } + const fetchResult = async () => { + try { + const parts = StringPrototypeSplit(modulePath, "/"); + for (let i = 0; i < parts.length; i++) { + parts[i] = encodeComponent( + StringPrototypeReplace( + parts[i], + /[A-Z]/g, + (letter) => `!${StringPrototypeToLowerCase(letter)}` + ) + ); + } + const encodedPath = ArrayPrototypeJoin(parts, "/"); + const url = `https://proxy.golang.org/${encodedPath}/@latest`; + const data = await (0, import_http_request9.httpJson)(url); + const latestVersion = data.Version; + if (version) { + const versionUrl = `https://proxy.golang.org/${encodedPath}/@v/${encodeComponent(version)}.info`; + try { + await (0, import_http_request9.httpJson)(versionUrl); + } catch { + const result3 = { + exists: false, + error: `Version ${version} not found` + }; + if (latestVersion !== void 0) { + result3.latestVersion = latestVersion; + } + return result3; + } + } + const result2 = { exists: true }; + if (latestVersion !== void 0) { + result2.latestVersion = latestVersion; + } + return result2; + } catch (e) { + const error = e instanceof Error ? e.message : String(e); + return { + exists: false, + error: StringPrototypeIncludes(error, "404") || StringPrototypeIncludes(error, "410") ? "Module not found" : error + }; + } + }; + const result = await fetchResult(); + if (options?.cache && result.exists) { + await options.cache.set(cacheKey, result); + } + return result; +} + +// src/purl-types/hackage.ts +var import_http_request10 = __toESM(require_http_request()); +async function hackageExists(name, version, options) { + const cacheKey = version ? `${name}@${version}` : name; + if (options?.cache) { + const cached = await options.cache.get(cacheKey); + if (cached !== void 0) { + return cached; + } + } + const fetchResult = async () => { + try { + const url = `https://hackage.haskell.org/package/${encodeComponent(name)}/preferred`; + const data = await (0, import_http_request10.httpJson)(url); + const versions = data["normal-version"] || []; + if (versions.length === 0) { + return { exists: false, error: "No versions found" }; + } + const latestVersion = versions[versions.length - 1]; + if (version) { + if (!ArrayPrototypeIncludes(versions, version)) { + const result3 = { + exists: false, + error: `Version ${version} not found` + }; + if (latestVersion !== void 0) { + result3.latestVersion = latestVersion; + } + return result3; + } + } + const result2 = { exists: true }; + if (latestVersion !== void 0) { + result2.latestVersion = latestVersion; + } + return result2; + } catch (e) { + const error = e instanceof Error ? e.message : String(e); + return { + exists: false, + error: StringPrototypeIncludes(error, "404") ? "Package not found" : error + }; + } + }; + const result = await fetchResult(); + if (options?.cache && result.exists) { + await options.cache.set(cacheKey, result); + } + return result; +} + +// src/purl-types/hex.ts +var import_http_request11 = __toESM(require_http_request()); +async function hexExists(name, version, options) { + const cacheKey = version ? `${name}@${version}` : name; + if (options?.cache) { + const cached = await options.cache.get(cacheKey); + if (cached !== void 0) { + return cached; + } + } + const fetchResult = async () => { + try { + const url = `https://hex.pm/api/packages/${encodeComponent(name)}`; + const data = await (0, import_http_request11.httpJson)(url); + const latestVersion = data.latest_version; + if (version) { + const releases = data.releases || []; + const versionExists = ArrayPrototypeSome( + releases, + (r) => r.version === version + ); + if (!versionExists) { + const result3 = { + exists: false, + error: `Version ${version} not found` + }; + if (latestVersion !== void 0) { + result3.latestVersion = latestVersion; + } + return result3; + } + } + const result2 = { exists: true }; + if (latestVersion !== void 0) { + result2.latestVersion = latestVersion; + } + return result2; + } catch (e) { + const error = e instanceof Error ? e.message : String(e); + return { + exists: false, + error: StringPrototypeIncludes(error, "404") ? "Package not found" : error + }; + } + }; + const result = await fetchResult(); + if (options?.cache && result.exists) { + await options.cache.set(cacheKey, result); + } + return result; +} + +// src/purl-types/maven.ts +var import_http_request12 = __toESM(require_http_request()); +async function mavenExists(name, namespace, version, options) { + if (!namespace) { + return { exists: false, error: "Maven requires namespace (group ID)" }; + } + const packageId = `${namespace}:${name}`; + const cacheKey = version ? `${packageId}@${version}` : packageId; + if (options?.cache) { + const cached = await options.cache.get(cacheKey); + if (cached !== void 0) { + return cached; + } + } + const fetchResult = async () => { + try { + const g = encodeComponent(namespace); + const a = encodeComponent(name); + const url = `https://search.maven.org/solrsearch/select?q=g:${g}+AND+a:${a}&rows=1&wt=json`; + const data = await (0, import_http_request12.httpJson)(url); + const numFound = data.response?.["numFound"] || 0; + if (numFound === 0) { + return { exists: false, error: "Package not found" }; + } + const doc = data.response?.["docs"]?.[0]; + const latestVersion = doc?.["latestVersion"] || doc?.["v"]; + if (version) { + const versionUrl = `https://search.maven.org/solrsearch/select?q=g:${g}+AND+a:${a}+AND+v:${encodeComponent(version)}&rows=1&wt=json`; + const versionData = await (0, import_http_request12.httpJson)(versionUrl); + const versionFound = versionData.response?.["numFound"] || 0; + if (versionFound === 0) { + const result3 = { + exists: false, + error: `Version ${version} not found` + }; + if (latestVersion !== void 0) { + result3.latestVersion = latestVersion; + } + return result3; + } + } + const result2 = { exists: true }; + if (latestVersion !== void 0) { + result2.latestVersion = latestVersion; + } + return result2; + } catch (e) { + const error = e instanceof Error ? e.message : String(e); + return { + exists: false, + error: StringPrototypeIncludes(error, "404") ? "Package not found" : error + }; + } + }; + const result = await fetchResult(); + if (options?.cache && result.exists) { + await options.cache.set(cacheKey, result); + } + return result; +} + +// src/purl-types/npm.ts +var import_http_request13 = __toESM(require_http_request()); +async function npmExists(name, namespace, version, options) { + const packageName = namespace ? `${namespace}/${name}` : name; + const cacheKey = version ? `${packageName}@${version}` : packageName; + if (options?.cache) { + const cached = await options.cache.get(cacheKey); + if (cached !== void 0) { + return cached; + } + } + const fetchResult = async () => { + try { + const encodedName = encodeComponent(packageName); + const url = `https://registry.npmjs.org/${encodedName}`; + const data = await (0, import_http_request13.httpJson)(url); + const latestVersion = data["dist-tags"]?.["latest"]; + if (version && data.versions) { + if (!(version in data.versions)) { + const result3 = { + exists: false, + error: `Version ${version} not found` + }; + if (latestVersion !== void 0) { + result3.latestVersion = latestVersion; + } + return result3; + } + } + const result2 = { + exists: true + }; + if (latestVersion !== void 0) { + result2.latestVersion = latestVersion; + } + return result2; + } catch (e) { + const error = e instanceof Error ? e.message : String(e); + return { + exists: false, + error: StringPrototypeIncludes(error, "404") ? "Package not found" : error + }; + } + }; + const result = await fetchResult(); + if (options?.cache && result.exists) { + await options.cache.set(cacheKey, result); + } + return result; +} + +// src/purl-types/nuget.ts +var import_http_request14 = __toESM(require_http_request()); +async function nugetExists(name, version, options) { + const cacheKey = version ? `${name}@${version}` : name; + if (options?.cache) { + const cached = await options.cache.get(cacheKey); + if (cached !== void 0) { + return cached; + } + } + const fetchResult = async () => { + try { + const lowerName = StringPrototypeToLowerCase(name); + const url = `https://api.nuget.org/v3/registration5-semver1/${encodeComponent(lowerName)}/index.json`; + const data = await (0, import_http_request14.httpJson)(url); + if (!data.items || data.items.length === 0) { + return { exists: false, error: "Package not found" }; + } + const versions = []; + for (const page of data.items) { + if (page.items) { + for (const item of page.items) { + const ver = item.catalogEntry?.["version"]; + if (ver) { + ArrayPrototypePush(versions, ver); + } + } + } + } + if (versions.length === 0) { + return { exists: false, error: "No versions found" }; + } + const latestVersion = versions[versions.length - 1]; + if (version) { + if (!ArrayPrototypeIncludes(versions, version)) { + const result3 = { + exists: false, + error: `Version ${version} not found` + }; + if (latestVersion !== void 0) { + result3.latestVersion = latestVersion; + } + return result3; + } + } + const result2 = { exists: true }; + if (latestVersion !== void 0) { + result2.latestVersion = latestVersion; + } + return result2; + } catch (e) { + const error = e instanceof Error ? e.message : String(e); + return { + exists: false, + error: StringPrototypeIncludes(error, "404") ? "Package not found" : error + }; + } + }; + const result = await fetchResult(); + if (options?.cache && result.exists) { + await options.cache.set(cacheKey, result); + } + return result; +} + +// src/purl-types/pub.ts +var import_http_request15 = __toESM(require_http_request()); +async function pubExists(name, version, options) { + const cacheKey = version ? `${name}@${version}` : name; + if (options?.cache) { + const cached = await options.cache.get(cacheKey); + if (cached !== void 0) { + return cached; + } + } + const fetchResult = async () => { + try { + const url = `https://pub.dev/api/packages/${encodeComponent(name)}`; + const data = await (0, import_http_request15.httpJson)(url); + const latestVersion = data.latest?.["version"]; + if (version) { + const versions = data.versions || []; + const versionExists = ArrayPrototypeSome( + versions, + (v) => v.version === version + ); + if (!versionExists) { + const result3 = { + exists: false, + error: `Version ${version} not found` + }; + if (latestVersion !== void 0) { + result3.latestVersion = latestVersion; + } + return result3; + } + } + const result2 = { exists: true }; + if (latestVersion !== void 0) { + result2.latestVersion = latestVersion; + } + return result2; + } catch (e) { + const error = e instanceof Error ? e.message : String(e); + return { + exists: false, + error: StringPrototypeIncludes(error, "404") ? "Package not found" : error + }; + } + }; + const result = await fetchResult(); + if (options?.cache && result.exists) { + await options.cache.set(cacheKey, result); + } + return result; +} + +// src/purl-types/pypi.ts +var import_http_request16 = __toESM(require_http_request()); +async function pypiExists(name, version, options) { + const cacheKey = version ? `${name}@${version}` : name; + if (options?.cache) { + const cached = await options.cache.get(cacheKey); + if (cached !== void 0) { + return cached; + } + } + const fetchResult = async () => { + try { + const url = `https://pypi.org/pypi/${encodeComponent(name)}/json`; + const data = await (0, import_http_request16.httpJson)(url); + const latestVersion = data.info?.["version"]; + if (version && data.releases) { + if (!(version in data.releases)) { + const result3 = { + exists: false, + error: `Version ${version} not found` + }; + if (latestVersion !== void 0) { + result3.latestVersion = latestVersion; + } + return result3; + } + } + const result2 = { + exists: true + }; + if (latestVersion !== void 0) { + result2.latestVersion = latestVersion; + } + return result2; + } catch (e) { + const error = e instanceof Error ? e.message : String(e); + return { + exists: false, + error: StringPrototypeIncludes(error, "404") ? "Package not found" : error + }; + } + }; + const result = await fetchResult(); + if (options?.cache && result.exists) { + await options.cache.set(cacheKey, result); + } + return result; +} + +// src/purl-exists.ts +async function purlExists(purl, options) { + const { name, namespace, type, version } = purl; + if (!type) { + return { + exists: false, + error: "Package type is required" + }; + } + if (!name) { + return { + exists: false, + error: "Package name is required" + }; + } + switch (type) { + case "npm": + return npmExists(name, namespace, version, options); + case "pypi": + return pypiExists(name, version, options); + case "cargo": + return cargoExists(name, version, options); + case "gem": + return gemExists(name, version, options); + case "maven": + return mavenExists(name, namespace, version, options); + case "nuget": + return nugetExists(name, version, options); + case "golang": + return golangExists(name, namespace, version, options); + case "composer": + return packagistExists(name, namespace, version, options); + case "cocoapods": + return cocoapodsExists(name, version, options); + case "conda": + return condaExists(name, version, namespace, options); + case "docker": + return dockerExists(name, namespace, version, options); + case "pub": + return pubExists(name, version, options); + case "hex": + return hexExists(name, version, options); + case "cpan": + return cpanExists(name, version, options); + case "cran": + return cranExists(name, version, options); + case "hackage": + return hackageExists(name, version, options); + default: + return { + exists: false, + error: `Unsupported type: ${type}` + }; + } +} + +// src/purl-types/vscode-extension.ts +var import_http_request17 = __toESM(require_http_request()); +async function vscodeExtensionExists(name, namespace, version, options) { + if (!namespace) { + return { + exists: false, + error: "Namespace (publisher) is required for VSCode extensions" + }; + } + const extensionId = `${namespace}.${name}`; + const cacheKey = version ? `${extensionId}@${version}` : extensionId; + if (options?.cache) { + const cached = await options.cache.get(cacheKey); + if (cached !== void 0) { + return cached; + } + } + const fetchResult = async () => { + try { + const url = "https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery"; + const requestBody = { + filters: [ + { + criteria: [ + { + filterType: 7, + value: extensionId + } + ] + } + ], + flags: 914 + }; + const data = await (0, import_http_request17.httpJson)(url, { + method: "POST", + headers: { + "Content-Type": "application/json", + Accept: "application/json;api-version=7.1-preview.1" + }, + body: JSONStringify(requestBody) + }); + const extensions = data.results?.[0]?.["extensions"]; + if (!extensions || extensions.length === 0) { + return { + exists: false, + error: "Extension not found" + }; + } + const versions = extensions[0]?.["versions"]; + const latestVersion = versions?.[0]?.["version"]; + if (version && versions) { + const versionExists = ArrayPrototypeSome( + versions, + (v) => v.version === version + ); + if (!versionExists) { + const result3 = { + exists: false, + error: `Version ${version} not found` + }; + if (latestVersion !== void 0) { + result3.latestVersion = latestVersion; + } + return result3; + } + } + const result2 = { + exists: true + }; + if (latestVersion !== void 0) { + result2.latestVersion = latestVersion; + } + return result2; + } catch (e) { + const error = e instanceof Error ? e.message : String(e); + return { + exists: false, + error: StringPrototypeIncludes(error, "404") ? "Extension not found" : error + }; + } + }; + const result = await fetchResult(); + if (options?.cache && result.exists) { + await options.cache.set(cacheKey, result); + } + return result; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + cargoExists, + cocoapodsExists, + condaExists, + cpanExists, + cranExists, + dockerExists, + gemExists, + golangExists, + hackageExists, + hexExists, + mavenExists, + npmExists, + nugetExists, + packagistExists, + pubExists, + purlExists, + pypiExists, + vscodeExtensionExists +}); +/*! Bundled license information: + +@socketsecurity/lib/dist/external/pico-pack.js: + (*! Bundled license information: + + is-extglob/index.js: + (*! + * is-extglob + * + * Copyright (c) 2014-2016, Jon Schlinkert. + * Licensed under the MIT License. + *) + + is-glob/index.js: + (*! + * is-glob + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + *) + + is-number/index.js: + (*! + * is-number + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Released under the MIT License. + *) + + to-regex-range/index.js: + (*! + * to-regex-range + * + * Copyright (c) 2015-present, Jon Schlinkert. + * Released under the MIT License. + *) + + fill-range/index.js: + (*! + * fill-range + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Licensed under the MIT License. + *) + + queue-microtask/index.js: + (*! queue-microtask. MIT License. Feross Aboukhadijeh *) + + run-parallel/index.js: + (*! run-parallel. MIT License. Feross Aboukhadijeh *) + *) +*/ diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/helpers.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/helpers.d.ts new file mode 100644 index 00000000..a86a58c0 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/helpers.d.ts @@ -0,0 +1,5 @@ +/** + * Create namespace object organizing helpers by property names. + */ +declare function createHelpersNamespaceObject(helpers: Record>, options_?: Record): Record>; +export { createHelpersNamespaceObject }; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/index.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/index.d.ts new file mode 100644 index 00000000..900c9edd --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/index.d.ts @@ -0,0 +1,55 @@ +/*! +Copyright (c) the purl authors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ +/** + * @fileoverview Main entry point for the socket-packageurl-js library. + * + * This library provides a complete implementation of the Package URL (purl) specification. + * Package URLs are used to identify and locate software packages in a standardized way + * across different package management systems and ecosystems. + * + * Core exports: + * - PackageURL: Main class for parsing and constructing package URLs + * - PurlBuilder: Builder pattern for constructing package URLs + * - PurlType: Type-specific normalization and validation rules + * - PurlComponent: Component encoding/decoding utilities + * - PurlQualifierNames: Known qualifier names from the specification + * + * Utility exports: + * - UrlConverter: Convert between purls and repository/download URLs + * - Result utilities: Functional error handling with Ok/Err pattern + * - Parsers: Modular parsers for ecosystem-specific package specifiers + */ +export type { PURLString } from '@socketsecurity/lib/types'; +export { PURL_Type } from '@socketsecurity/lib/types'; +export type { DownloadUrl, PackageURLComponentValue, PackageURLObject, ParsedPurlComponents, RepositoryUrl, Result, } from './package-url.js'; +export type { ComponentEncoder, ComponentNormalizer, ComponentValidator, QualifiersObject, QualifiersValue, } from './purl-component.js'; +export type { NpmPackageComponents } from './purl-types/npm.js'; +export { Err, err, Ok, ok, PackageURL, PurlComponent, PurlQualifierNames, PurlType, ResultUtils, UrlConverter, } from './package-url.js'; +export { PurlBuilder } from './package-url-builder.js'; +export { PurlError, PurlInjectionError } from './error.js'; +export { compare, createMatcher, equals, matches } from './compare.js'; +export { parseNpmSpecifier } from './purl-types/npm.js'; +export type { ExistsOptions, ExistsResult } from './purl-types/npm.js'; +export { containsInjectionCharacters, findInjectionCharCode, formatInjectionChar, } from './strings.js'; +export { stringify, stringifySpec } from './stringify.js'; +export { Vers } from './vers.js'; +export type { VersComparator, VersConstraint, VersWildcard } from './vers.js'; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/index.js b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/index.js new file mode 100644 index 00000000..3fae2329 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/index.js @@ -0,0 +1,7326 @@ +/* Socket PackageURL - Built with esbuild */ +"use strict"; +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// @socketsecurity/lib/dist/types.js +var require_types = __commonJS({ + "@socketsecurity/lib/dist/types.js"(exports2, module2) { + "use strict"; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var types_exports = {}; + __export2(types_exports, { + PURL_Type: () => PURL_Type2 + }); + module2.exports = __toCommonJS2(types_exports); + var PURL_Type2 = /* @__PURE__ */ ((PURL_Type22) => { + PURL_Type22["ALPM"] = "alpm"; + PURL_Type22["APK"] = "apk"; + PURL_Type22["BITBUCKET"] = "bitbucket"; + PURL_Type22["COCOAPODS"] = "cocoapods"; + PURL_Type22["CARGO"] = "cargo"; + PURL_Type22["CHROME"] = "chrome"; + PURL_Type22["COMPOSER"] = "composer"; + PURL_Type22["CONAN"] = "conan"; + PURL_Type22["CONDA"] = "conda"; + PURL_Type22["CRAN"] = "cran"; + PURL_Type22["DEB"] = "deb"; + PURL_Type22["DOCKER"] = "docker"; + PURL_Type22["GEM"] = "gem"; + PURL_Type22["GENERIC"] = "generic"; + PURL_Type22["GITHUB"] = "github"; + PURL_Type22["GOLANG"] = "golang"; + PURL_Type22["HACKAGE"] = "hackage"; + PURL_Type22["HEX"] = "hex"; + PURL_Type22["HUGGINGFACE"] = "huggingface"; + PURL_Type22["MAVEN"] = "maven"; + PURL_Type22["MLFLOW"] = "mlflow"; + PURL_Type22["NPM"] = "npm"; + PURL_Type22["NUGET"] = "nuget"; + PURL_Type22["OCI"] = "oci"; + PURL_Type22["PUB"] = "pub"; + PURL_Type22["PYPI"] = "pypi"; + PURL_Type22["QPKG"] = "qpkg"; + PURL_Type22["RPM"] = "rpm"; + PURL_Type22["SWID"] = "swid"; + PURL_Type22["SWIFT"] = "swift"; + PURL_Type22["VCS"] = "vcs"; + PURL_Type22["VSCODE"] = "vscode"; + return PURL_Type22; + })(PURL_Type2 || {}); + } +}); + +// data/npm/legacy-names.json +var require_legacy_names = __commonJS({ + "data/npm/legacy-names.json"(exports2, module2) { + module2.exports = [ + "@antoinerey/comp-Fetch", + "@antoinerey/comp-VideoPlayer", + "@beisen/Accordion", + "@beisen/Approve", + "@beisen/AreaSelector", + "@beisen/AutoComplete", + "@beisen/AutoTree", + "@beisen/BaseButton", + "@beisen/Beaute", + "@beisen/BeisenCloudMobile", + "@beisen/BeisenCloudUI", + "@beisen/ButtonGroup", + "@beisen/ChaosUI", + "@beisen/ChaosUI-V1", + "@beisen/CheckboxList", + "@beisen/CommonMount", + "@beisen/CommonPop", + "@beisen/DataGrid", + "@beisen/DateTime", + "@beisen/DropDownButton", + "@beisen/DropDownList", + "@beisen/ExtendComponent", + "@beisen/FormUploader", + "@beisen/IconButton", + "@beisen/Loading", + "@beisen/MultiSelect", + "@beisen/NaDeStyle", + "@beisen/Paging", + "@beisen/PopLayer", + "@beisen/RadioList", + "@beisen/ReactTransformTenchmark", + "@beisen/Search", + "@beisen/selectedComponent", + "@beisen/Sidebar", + "@beisen/StaticFormLabel", + "@beisen/TabComponent", + "@beisen/Textarea", + "@beisen/Textbox", + "@beisen/TimePicker", + "@beisen/TitaFeed", + "@beisen/ToolTip", + "@beisen/Transfer", + "@beisen/Tree", + "@beisen/UserSelector", + "@chasidic/tsSchema", + "@chymz/DaStrap", + "@chymz/DaUsers", + "@claviska/jquery-ajaxSubmit", + "@cryptolize/FileSaver", + "@djforth/I18n_helper", + "@dostolu/baseController", + "@dostolu/exctractIntl", + "@dostolu/mongooseSlug", + "@dostolu/validationTransformer", + "@opam-alpha/ANSITerminal", + "@opam-alpha/BetterErrors", + "@opam-alpha/reactiveData", + "@pioug/MidiConvert", + "@smuuf/idleCat", + "@sycoraxya/validateJS", + "@tempest/endWhen", + "@tempest/fromPromise", + "@tempest/replaceError", + "@tempest/startWith", + "@tempest/throwError", + "@yuanhao/draft-js-mentionHashtag-plugin", + "3dBinPack", + "3DViewerComponent", + "4meFirst-github-example", + "9Wares-js", + "37FIS", + "A", + "ABAValidator", + "ABCEnd", + "AbokyBot", + "Accessor", + "Accessor_MongoDB", + "Accessor_MySQL", + "Accessor_Singleton", + "Account", + "accumulateArray", + "ACCUPLACERClient", + "AccuplacerClient", + "Acid", + "activaDocs", + "ActiveResource.js", + "ADBCordovaAnalytics", + "addTimeout", + "AdultJS", + "AesUtil", + "AgentX", + "AirBridgePlugin", + "airLogger", + "ajiThird", + "alaGDK", + "AlarmClock", + "alarmClock", + "Alchemyst", + "AlertLogic", + "alertsXYZ", + "ali-topSdk", + "AliceBot", + "alinkRNTest", + "aliOcrIdCard", + "AllCal.WebApp", + "alpacaDash", + "AmateurJS", + "AMD", + "AMGCryptLib", + "AmILate", + "AmILateAnand", + "amitTest", + "AmpCoreApi", + "amProductsearch", + "amqpWrapper", + "amrToMp3", + "angular-autoFields-bootstrap", + "angular-dateParser", + "angular-GAPI", + "angular-PubSub", + "Angular-test-child", + "Angular1", + "Angular2", + "angular2-Library", + "angular2-localStorage", + "angular2-Menu", + "angular2-quickstart-ngSemantic", + "angularApp", + "angularCubicColorPicker", + "angularjs-ES6-brunch-seed", + "angularjsSlider", + "AngularStompDK", + "Animated_GIF", + "animateJs", + "animateSCSS", + "AnimationFrame", + "AnimIt", + "Anirudhnodeapp", + "Anjali", + "annoteJS", + "ANSIdom", + "antFB", + "antFB-init", + "antFB-mobile", + "antFB-router-redux-ie8", + "AntMobileUI", + "AnToast", + "Antony", + "aoIoHw90B5sE1wG9", + "API-Documentation", + "APIConnect", + "APICreatorSDK", + "APlan", + "APM-mouse", + "APM.P2H", + "apMigStats", + "AporaPushNotification", + "App2App", + "applqpakTest", + "AppTracker", + "AQ", + "ArcusNode", + "AriesNode", + "array_handler_liz_Li", + "Array.prototype.forEachAsync", + "ArrayBuffer-shim", + "arrayFuncs", + "ArrowAulaExpress", + "Article-collider-packages", + "Arunkumar-Angular-Trial", + "asEvented", + "asJam", + "ASP.NET", + "assert", + "AssetPipeline", + "assignment2-BW", + "Assignment6", + "async_hooks", + "asyncBuilder", + "asyncEJS", + "AsyncHttpRequest-CordovaPlugin", + "AsyncProxy", + "AsyncStorage", + "asyncStorage", + "atom-C", + "atom-Fe", + "atom-Ge", + "atom-K", + "atom-Li", + "atom-Na", + "atom-Pb", + "atom-Rb", + "atom-Si", + "atom-Sn", + "AulaExpress", + "austin-vertebraeTest", + "authorStats", + "AutoFixture", + "autoLoader", + "AutoReact", + "AutoTasks", + "Autowebpcss", + "Avifors", + "AVNjs", + "AwesomeProject", + "AWSS3Drive", + "ax-rmdirRecursive", + "b_Tap", + "Babel", + "babel-preset-reactTeam", + "Bablic_Seo_SDK", + "BablicLogger", + "Backbone-Collection-Predefined-Filters", + "Backbone.Aggregator", + "backbone.browserStorage", + "Backbone.Chosen", + "Backbone.Marionette.Handlebars", + "Backbone.Mutators", + "Backbone.Overview", + "Backbone.Rpc", + "Backbone.Subset", + "baDataModel", + "Bag", + "BaiduMapManager", + "BandGravity", + "bangDM", + "banking-Josh-demo", + "BankWebservice", + "bannerFlip", + "BaremetricsCalendar", + "Barfer", + "BarneyRubble", + "Base", + "Base64", + "baseProject", + "Basic-Material-framework", + "BasicCredentials", + "basicFFmpeg", + "bbArray", + "Beegee", + "begineer_Practice", + "beijingDate", + "bem-countMaster", + "bem-countSlave", + "bem-getHistory", + "Bestpack", + "betterMatch", + "BetterRegExp", + "Bhellyer", + "BHP_MSD", + "BiDirectionalScrollingTable", + "BigAssFansAPI", + "BigInt", + "BIMserverWrapper", + "Binary-search-tree", + "binarySearch", + "bindAll", + "BinHeap", + "biojs-vis-RDFSchema", + "Biolac", + "Birbal", + "BitSetModule", + "BizzStream", + "Blackfeather", + "BlackMirror", + "Blacksmith", + "blacktea.jsonTemplates", + "Blaggie-System", + "BlankUp", + "Blink1Control2", + "blitzLib", + "Blob", + "BlobBuilder", + "BlobBuilder-browser", + "Blog", + "BlueOcean", + "BlueOps", + "Blueprint-Sugar", + "bluthLBC", + "blya!", + "BMFE_scaffold", + "Bmodule", + "Bo-colors-project", + "Boilerpipe-Scraper", + "Bondlib", + "bonTemplate", + "BootSideMenu", + "bornCordova", + "Botcord", + "Bottr-cli", + "Brackets", + "brain***_games***", + "Brave", + "BrewCore", + "BrianPingPong", + "BrianSuperComponents", + "BrickPlus", + "Brocket", + "Brosec", + "browserProxy", + "browserType", + "brush-Makefile", + "bTap", + "BtMacAddress", + "BubbleJS", + "Buffer", + "buffer", + "BufferList", + "Bugay", + "Build", + "BuildBox", + "Builder", + "Builders", + "BuildWithJavascript", + "BusinessObjects", + "Button", + "Buttons", + "Bynd", + "ByteBuffer", + "C9js", + "Cache-Service-Collector", + "Cacher", + "callbackQueue", + "CallbackRouter", + "callBlock-plugin", + "callBlock.plugin", + "camcardPlugin", + "CameraPreview", + "Canteen", + "canvas-toBlob", + "canvasColorPicker", + "Caoutchouc", + "Cap", + "Carbon", + "cardsJS", + "Cartogram-Utils", + "cascadeDrop", + "Cashew", + "Cat4D", + "catchTender", + "CategoryJS", + "catl-deploySSH", + "cbNetwork", + "CbolaInfra", + "CBQueue", + "CBuffer", + "ccNetViz", + "ccPagination", + "ccTpl", + "censoreMio", + "Censorify", + "censorify_Publish20160706", + "censorify_Vincent_Choe", + "censorifyAD", + "censorifyAshes", + "censorifyGuangyi", + "censorifyKatKat", + "censorifyRayL", + "censorifyTM", + "CETEIcean", + "cfUtilityService", + "CFViews", + "chadschwComponentTest0001", + "changelogFDV", + "Changling-dom", + "CharLS.js", + "Chart.Annotation.js", + "Chart.CallBack.js", + "Chart.Crosshairs.js", + "Chart.HorizontalBar.js", + "Chart.Smith.js", + "Chart.Zoom.drag.js", + "Chart.Zoom.js", + "ChartTime", + "chatSocketIo", + "ChattingRoom", + "checkForModuleDuplicates", + "cheferizeIt", + "chenouTestNode", + "child_process", + "chowYen", + "chrome-localIp", + "ChuckCSS", + "ChuckNorrisException", + "chunkArray", + "cjdsComponents", + "Class", + "Classy", + "clearInterval", + "ClearSilver", + "clearTimeout", + "CLI-todo", + "CLI-UI", + "cliappRafa", + "clientFrontEnd", + "ClientStorage", + "clipDouban", + "ClipJS", + "CloudMusicCover", + "CloudStore", + "Cls", + "cluster", + "CM-react-native-document-picker", + "CM1", + "coberturaJS", + "codeStr", + "Coeus", + "COFFEENODE", + "Coflux", + "colegislate-DynamoDbEventRepository", + "ColeTownsend", + "collabProvidesModules", + "CollectionMap", + "colWidth.js", + "com.emsaeng.cordova.plugin.AdMob", + "com.nickreed.cordova.plugin.brotherPrinter", + "com.none.alarmClock", + "com.zwchen.firstPlugin", + "com.zwchen.qqAdvice", + "combineJS", + "CometJS", + "Comfy", + "Comments", + "CommentsJS", + "comp-Fetch", + "Company", + "compareStrings", + "CompassSM", + "Complex", + "componentDoc", + "componentDoc-cli", + "CompoundSignal", + "Compress-CSS", + "Compression", + "concatAll", + "Concur", + "ConfluencePageAttacher", + "ConnectTheDotsDesktop", + "Console", + "console", + "constants", + "constelation-Animate_", + "constelation-BackgroundImage", + "constelation-Block", + "constelation-Button", + "constelation-Col", + "constelation-Event_", + "constelation-Flex", + "constelation-Inline", + "constelation-InlineBlock", + "constelation-InlineCol", + "constelation-InlineFlex", + "constelation-InlineRow", + "constelation-Painter", + "constelation-Row", + "constelation-Style_", + "constelation-Text", + "constelation-Video", + "constelation-View", + "ConstraintNetwork", + "ContactMe", + "ContentEdit", + "ContentSelect", + "ContentTools", + "convertPinyin", + "CoolBeans", + "Coolhelper", + "copyMe", + "cordova-plugin-adPlayCafebazaar", + "cordova-plugin-adPlayPushe", + "cordova-plugin-bluetoothClassic-serial", + "cordova-plugin-coolFunction", + "cordova-plugin-euroart93-smartConfig", + "cordova-plugin-ios-android-IAP", + "cordova-plugin-LineLogin", + "Cordova-Plugin-OpenTok-JBS", + "cordova-plugin-permissionScope", + "cordova-plugin-SchaffrathWebviewer", + "cordova-plugin-SDKAW", + "Cordova-Plugin-SystemBarDimmer", + "cordova-plugin-YtopPlugin", + "Cordova-react-redux-boilerplate", + "cordova-StarIO-plugin", + "CordovaSMS", + "CordovaWebSocketClientCert", + "coreApi", + "CornerCut", + "CornerJob", + "CorrespondenceAnalysis", + "cosBuffer", + "cosTask", + "Couch-cleaner", + "Couchbase-sync-gateway-REST", + "CouchCover", + "CouchDBChanges", + "CouchDBExternal", + "CountAdd_000001", + "cPlayer", + "cqjPack", + "Crawler", + "Create-React-App-SCSS-HMR", + "createClass", + "createDOC", + "createNpm", + "createServer", + "CRMWebAPI", + "crockpot-fromBinary", + "crockpot-fromEnglish", + "crockpot-fromRoman", + "crockpot-toEnglish", + "crockpot-toRoman", + "Cron", + "CropSr", + "crypto", + "CSDebug", + "CSDLParser", + "CSLogger", + "CSSMatrix", + "CSSselect", + "Csster", + "CSSwhat", + "CSV-JS", + "CTP_MARKET_DATA", + "cttv.bubblesView", + "cttv.diseaseGraph", + "cttv.expansionView", + "cttv.flowerView", + "cttv.speciesIcons", + "cttv.targetAssociationsBubbles", + "cttv.targetAssociationsTree", + "cttv.targetGeneTree", + "Cuber", + "cubicColorPicker", + "Cui-Dialog", + "CustomCamera", + "customComponent", + "customLibrary", + "CustomPlugin", + "CustomWebView", + "cuteLogger", + "cwebp-binLocal", + "CyberJS", + "D", + "d-fordeYoutube", + "D-Stats", + "D.Va", + "d3-bboxCollide", + "d3-pathLayout", + "d3.geoTile", + "D3.TimeSlider", + "Daja", + "Daniel_NPM_Library_Test", + "Dante2", + "DanTroy-utils", + "Dashboard", + "Dasher", + "dashr-widget-Weather", + "dashr-widget-World-Pool-Championships", + "Data-CSS", + "Data-Same-Height", + "dataAccess", + "Database-Jones", + "DataManager", + "dataStream", + "dateFormat-kwen", + "dateFormatW", + "DateHuatingzi", + "DateMaskr", + "dateModule", + "DatePicker", + "Datepicker.js", + "Dateselect", + "DateValidator", + "DateZ", + "Datum", + "Davis", + "dd-rc-mStock", + "DDEvents", + "deBijenkorf-protractor-tests", + "Debug-Tracker", + "Deci-mal", + "DeCurtis-Logger", + "deepEqualsWith", + "deepPick", + "defaultStr", + "Deferred", + "deferredEventEmitter", + "defineClass", + "defineJS", + "DelegateListener", + "deleteMoudles", + "Demo", + "Demo1", + "demoNeeeew", + "demoWei", + "demoYTC", + "Deneme", + "derivco-SoundJS", + "derpModule", + "DeskSet", + "Desktop-command", + "Devbridge-FrontEnd", + "Developer", + "deviousknightFirstNpm", + "devisPattern", + "devProxy", + "DFP", + "dgram", + "dgURI", + "diagnostics_channel", + "Dial", + "DiggernautAPI", + "Diogenes", + "DirScanner", + "dirStat", + "DirWatcher", + "Discord-Webhook", + "DiscordForge", + "diveSync", + "dkastner-JSONPath", + "DM.NodeJS", + "dns", + "Dock-command", + "docxtemplaterCopy", + "doLink", + "DOM", + "Domai.nr", + "domain", + "DOMArray", + "DOMBuilder", + "DOMino", + "DOMtastic", + "DOMtastic-npm", + "dotFormat", + "dotJS", + "DoubleCheck", + "Dove.js", + "downloadAPI", + "downLoadFile", + "DownloadManager", + "DownloadProxy", + "DPS", + "DQ", + "draftjsToHTML", + "dragOnZone", + "drakovNew", + "Draper", + "DrawPDF", + "Dribble", + "Drupal-Node.js", + "DT", + "Duckface", + "Dui", + "DVA", + "DvA", + "dVa", + "DXIV2Inst", + "DynamicBuffer", + "dynamoDB", + "DynamoDBStream", + "DynWorker", + "Easy-Peasy-Slide", + "easyCache", + "easyFe", + "easyRestWithABL", + "EasyUI", + "eavesTool", + "EBI-Icon-fonts", + "echartsEx", + "EclipseScroll", + "ECMASquasher", + "edfToHtmlConverter", + "edGoogleApi", + "edGraham", + "EfemerideList", + "efemerideList", + "efficientLoad", + "eFishCrawler", + "EhanAreesha", + "Elastic-Beanstalk-Sample-App", + "ElasticSlider-core", + "electron-isDev", + "ElectronAppUpdater", + "ElectronRouter", + "elementsJS", + "Elixirx", + "Elm-0.17-Gulp-Coffeescript-Stylus-Lodash-Browserify-Boilerplate", + "EmailClient", + "ember-cli-fullPagejs", + "ember-leaflet-geoJSON", + "emoJiS-interpreter", + "Empite", + "EmpiteApp", + "emptyObject", + "emptyString-loader", + "Encloud", + "encodeBase64", + "encodeID", + "energyCalculator-browser", + "EnglishTranslator", + "ensureDir", + "Enumjs", + "Environment.js", + "ep_disableChat", + "EPO_OPS_WRAPPER", + "equalViews-comparative-selection", + "eRx-build", + "ES-poc", + "es6-DOM-closest", + "eSlider", + "eslint-plugin-elemMods", + "EsmalteMx.ProductApi.Lambdas", + "Estro", + "ETag", + "eValue-bs", + "EVE", + "EventDispatcher", + "eventDrops", + "EventEmitter", + "EventField", + "EventFire", + "EventFire.js", + "EventHub", + "EventRelayEmitter", + "events", + "EventServer", + "eventstore.mongoDb", + "EventtownProject", + "EventUtil", + "EVEoj", + "EverCookie", + "ewdDOM", + "ewdGateway", + "ExBuffer", + "execSync", + "exFrame-configuration", + "exFrame-core", + "exFrame-generator", + "exFrame-logger", + "exFrame-mq", + "exFrame-rest", + "exFrame-rpc", + "exFrame-security", + "ExifEditor", + "Exitent", + "expectThat.jasmine-node", + "expectThat.mocha", + "Express", + "Express-web-app", + "expressApi", + "ExpressCart", + "ExpressCheckout", + "expressingFounder", + "ExpressMVC", + "ExpressNode", + "expressOne", + "expressSite", + "expressWeb", + "ExtraInfo", + "extraRedis", + "Eyas", + "EzetechT", + "EZVersion", + "F", + "F-chronus", + "f*", + "FabioPluginiUno", + "Facebook_Graph_API", + "facebookPhotos", + "FacebookYarn", + "factor-bundle-WA64", + "FAEN", + "Faker", + "Falcon", + "fast-artDialog", + "fastA_node", + "FastLegS", + "Fayer", + "fbRecursiveRequest", + "FeedbackModuleTest", + "feedBum", + "fenix-ui-DataEditor", + "fenix-ui-DSDEditor", + "Fermi-UI", + "FetchCallLog", + "fieldsValidator", + "fig-Componts", + "File", + "File_Reader_solly", + "FileBrowser", + "FileError", + "fileGlue", + "FileList", + "fileLog", + "FilePicker-Phonegap-iOS-Plugin", + "FileReader", + "FileSaver", + "FileSync", + "FileWriter", + "FileWriterSync", + "Finder-command", + "FirstApp", + "FirstCustomPlugin", + "firstModule", + "firstNodejsModule", + "firstYarn", + "fis-parse-requireAsyncRes", + "fis-postpackager-inCSSToWebP", + "fis3SmartyTool", + "FitText-UMD", + "Flamingo", + "flatToTrees", + "fleschDe", + "Flex-With-Benefits", + "FlickrJS", + "flipPage", + "Florence", + "FlowerPassword", + "flowMap", + "FLTEST", + "fnProxy", + "FontAwesome-webpack", + "fontEnd", + "FontLoader", + "foo!", + "foo~", + "forAsync", + "ForceCode", + "forceLock", + "forChangeFilesName", + "forEachAsync", + "formAnimation", + "formatDate", + "formBuilder", + "FormData", + "Formless", + "formValidate", + "FrameGenerator", + "freightCrane", + "French-stemmer", + "Frenchpress", + "FreshDocs", + "friendsOfTrowel-buttons-component", + "friendsOfTrowel-dropdowns-component", + "friendsOfTrowel-Forms-component", + "friendsOfTrowel-Layouts-component", + "Friggeri.net", + "Frog", + "frontBuild", + "Frontend-starter", + "FrontEndCentral-documentation", + "FrontJSON", + "FrontPress", + "Frozor-Logger", + "Fruma", + "fs", + "fs-uTool", + "FSM", + "FT232H", + "fuck!", + "Fuell", + "FuellDocTest", + "FuellSys", + "FuellTest", + "FullStack", + "FunDemo2", + "FURI", + "Fury", + "futSearch", + "futureDocBuilder", + "FyreWorks-Node", + "fzmFE", + "Gaiam", + "Ganescha-Bot-Jokes", + "gaoboHello", + "Garrett-pokemon", + "gatesJs", + "Gauge", + "gaugeJS", + "gaussianMixture", + "gbL-jsMop", + "GC-Sequence-Viewer", + "gdBuildLogs", + "gdBuilds", + "Gems.PairedDeviceClient", + "genData", + "generateIndex", + "generator-entityV2-widgets", + "generator-kittJS", + "generator-qccr-startKit", + "generator-reactpackSample", + "generator-zillionAngular", + "Gengar", + "GeoMatrix", + "GeosysDroid", + "GeosysTest", + "Gerardo", + "getDateformat", + "getExtPath", + "getSignature", + "GettyEmbeddy", + "ghostTools", + "GhostTube", + "GiftEditor", + "GirlJS", + "GitAzure", + "gitbook-plugin-prism-ASH", + "gitbook-plugin-specialText", + "gitbook-start-heroku-P8-josue-nayra", + "gitbook-start-heroku-P9-josue-nayra", + "gitForge", + "gitHub", + "GitHub-Network-Graph", + "GitHubTrending", + "gitProvider", + "gl-flyCamera", + "gl-simpleTextureGenerator", + "glMath", + "GLORB", + "glslCanvas", + "glslEditor", + "glslGallery", + "GLSlideshow", + "Glue", + "GMP", + "golbalModule", + "Goldfish", + "Gon", + "Google_Plus_API", + "Google_Plus_Server_Library", + "Google-Chrome-command", + "GoogleDrive", + "googleOAuthServer", + "googlePlaceAutocomplete", + "GoogleService-NodeJs", + "Gord", + "gPagesJS", + "Gps2zip", + "GRAD_leaveNotes", + "GRAD_makeFire", + "grad-customGear", + "grad-factions-VR", + "grad-leaveNotes", + "grad-makeFire", + "Grafar", + "Graph", + "graphLock.custom.plugin", + "graphQl-Mysql-Server", + "GridFS", + "GridManager", + "gridminCss", + "Gridtacular", + "GroupePSAConnectedCar", + "Grow.js", + "Grunt-build", + "grunt-checkFileSize", + "grunt-cmd-handlebarsWrap", + "grunt-ftp-getComponent", + "grunt-httpTohttps", + "grunt-latexTOpdf-conversion", + "grunt-Npm-grunts", + "grunt-po2mo-multiFiles", + "grunt-Replacebyrefs", + "grunt-syncFolder", + "grunt-urlCacheBuster", + "guideJs", + "gulp-addSuffix", + "gulp-combineHtml", + "gulp-imgToBase64", + "gulp-lowerCase", + "gulp-phpWebserver", + "gulp-spacingWord", + "Gulp-Tasks", + "GumbaJS", + "Gusto", + "gz2qiCalcModule", + "h2oUIKit", + "H5UI", + "H666", + "habibtestPublish", + "HackBuffer", + "handleStr", + "HansontableComponent", + "Haraka", + "HariVignesh", + "harmonyHubCLI", + "HarryPotterParty", + "harsh-Test-Module", + "Harshil", + "hash!", + "hashPage", + "hashTranslate", + "HASWallpaperManager", + "hasWord", + "HeartBeatWoT_pi", + "Hello", + "hello_test_spade69XXX", + "Hello_World", + "HelloBot", + "helloBySoo", + "helloDevelopersnodejs", + "HelloExpress", + "helloModule", + "HelloWorld", + "helloWorld", + "HelloWorld_hlhl_040", + "HelloWorldComponent", + "HelloWorldNodeJS", + "helloYJ", + "helpBy", + "helpCenter", + "herokuRun", + "Hesiir-components", + "HHello", + "Hidash", + "HiddenMarkovModel", + "hideShowPassword", + "highcharts-*", + "HighlightP", + "Highway", + "Hinclude", + "Hipmob", + "Hiraku", + "hm_firstPackage", + "HMTraining", + "homebridge-anelPowerControl", + "homebridge-bigAssFans", + "homebridge-CurrentAmbientLightLevel", + "homebridge-Homeseer", + "homebridge-LEDStrip", + "homebridge-MotionSensor", + "homebridge-RFbulb", + "Homematic-Hue-Interface", + "hoshiCustomContent", + "hoshiImageLoader", + "HotJS", + "Hotshot", + "hoverifyBootnav", + "howToNPM", + "Hppy", + "Hpy", + "htmlCutter", + "htmlKompressor", + "HTMLString", + "htmlToTree", + "http", + "http2", + "HTTPRequest", + "https", + "httpShell", + "httpTohttps", + "Hubik", + "Hubik-Demo", + "Hubik-Platform", + "Hubik-Platform-Chrome", + "Hubik-Plugin", + "Hubik-Plugin-Memory", + "Hubik-Plugin-Network", + "Hubik-Plugin-Rendering", + "Hubik-Util", + "hubot-yigeAi", + "HuK", + "hybridCrypto", + "i18next.mongoDb", + "Ian_Chu", + "IArray", + "Ibis.js", + "iCompute", + "iEnhance", + "IENotification", + "iFrameAPI", + "IFY-gulp-kit", + "II", + "IIF", + "iIndexed", + "iKeyed", + "iM880-serial-comm", + "imageCDN-webpack-loader", + "imageMagick", + "Imager", + "Imageresizer", + "imageTool", + "ImageViewer", + "iMagPay", + "iMemoized", + "iMessageModule", + "Imovie", + "Imp", + "Incheon", + "Index", + "indexedStore", + "inferModule-jsdoc-plugin", + "infieldLabel", + "Influxer", + "inputcheckMemo", + "inspector", + "INSPINIA", + "Insplash", + "inStyle", + "interactiveConsole", + "Interval", + "IO", + "IObject", + "ionic-gulp-browserify-typescript-postTransform", + "IonicSocket", + "iOS-HelloWorld", + "IOTSDK", + "iotsol-app-FAN", + "iotsol-app-test-Node-RED", + "iotsol-service-string-upperCase", + "IQVIS", + "Iris", + "iRobo-react-modal", + "iSecured", + "isElementInViewport", + "isEqual", + "iSeries", + "isFirefoxOrIE", + "isHolidayInChina", + "iSocketService", + "isPureFunction", + "iStorable", + "iTransactable", + "iTunes-command", + "iValidated", + "iWeYou", + "iZettle", + "iziModal", + "JabroniJS", + "jaCodeMap", + "Jade-Sass-Gulp-Starter", + "jadeBundler", + "jadiTest", + "jAlert", + "JamSwitch", + "JASON", + "JavaScript-101", + "JazzScript", + "jcarouselSwipe", + "jDataView", + "jDate", + "jetsExt", + "Jimmy-Johns", + "jingwenTest", + "JMSList", + "JMSlist.js", + "Jody", + "jordenAngular", + "jordenAngular2", + "JorupeCore", + "JorupeInstance", + "JOSS", + "JotihuntReact", + "Journaling-Hash", + "jpaCreate", + "jParser", + "JPath", + "jPlotter", + "jPlugins", + "JQ", + "jQ-validation-laravel-extras", + "JQDeferred", + "jQGA", + "jqGrid", + "jqNode", + "jqPaginator", + "jqplot.donutRenderer", + "jqPromise4node", + "jqTreeGridWithPagination", + "jQuery", + "jquery-adaptText", + "jquery-asAccordion", + "jquery-asBgPicker", + "jquery-asBreadcrumbs", + "jquery-asCheck", + "jquery-asChoice", + "jquery-asColor", + "jquery-asColorPicker", + "jquery-asDropdown", + "jquery-asFontEditor", + "jquery-asGalleryPicker", + "jquery-asGmap", + "jquery-asGradient", + "jquery-asHoverScroll", + "jquery-asIconPicker", + "jquery-asImagePicker", + "jquery-asItemList", + "jquery-asModal", + "jquery-asOffset", + "jquery-asPaginator", + "jquery-asPieProgress", + "jquery-asProgress", + "jquery-asRange", + "jquery-asScroll", + "jquery-asScrollable", + "jquery-asScrollbar", + "jquery-asSelect", + "jquery-asSpinner", + "jquery-asSwitch", + "jquery-asTooltip", + "jquery-asTree", + "jQuery-by-selector", + "jquery-dynamicNumber", + "jquery-idleTimeout-plus", + "jquery-loadingModal", + "jquery-navToSelect", + "jQuery-QueryBuilder", + "jquery-rsLiteGrid", + "jquery-rsRefPointer", + "jquery-rsSlideIt", + "jQuery-Scanner-Detection", + "jquery-scrollTo", + "jquery-scrollToTop", + "jquery-slidePanel", + "jQuery.component", + "jquery.customSelect", + "jquery.dataTables.min.js", + "jquery.Jcrop.js", + "jQuery.keyboard", + "jQuery.mmenu-less", + "jQuery.print", + "jquery.rsLiteGrid", + "jquery.rsOverview", + "jquery.rsRefPointer", + "jquery.rsSlideIt", + "jquery.rsSliderLens", + "jQuery.toggleModifier", + "jquery.waitforChild", + "jqueryPro", + "js-build-RomainTrouillard", + "JS-Entities", + "JS-string-minimization", + "JS.Responsive", + "jSaBOT", + "jsCicada", + "jsConcat", + "JSCPP", + "jsDAV", + "JSDev", + "jsdoc-TENSOR", + "jsDocGenFromJson", + "jsDump", + "jSelect", + "JSErrorMonitor", + "JSErrorMonitor-server", + "jsFeed", + "jsFiddleDownloader", + "JSFramework", + "JSLint-commonJS", + "JSLintCli", + "JSLogger", + "JSON", + "JSON-Splora", + "JSON.sh", + "JSON2", + "json8-isArray", + "json8-isBoolean", + "json8-isJSON", + "json8-isNull", + "json8-isNumber", + "json8-isObject", + "json8-isPrimitive", + "json8-isString", + "json8-isStructure", + "JSON2016", + "JSONloops", + "JSONPath", + "JSONPathCLI", + "JSONRpc", + "JSONSelect", + "JSONStream", + "JsonUri", + "JSONUtil", + "jsonX", + "JSplay", + "jspolyfill-array.prototype.findIndex", + "JSPP", + "JSpring", + "jsQueue", + "jsSourceCodeParser", + "jStat", + "JSUS", + "JSV", + "JSX", + "jsz-isType", + "JTemplate", + "JTmpl", + "jTool", + "JuliaStyles", + "JumanjiJS", + "Jupyter-Git-Extension", + "justifiedGallery", + "justJenker", + "JustMy.scss", + "JWBootstrapSwitchDirective", + "jWorkflow", + "jxLoader", + "JYF_restrict", + "K_Tasks", + "K--Ajax", + "K-Report", + "KAB.Client", + "Kahana", + "Kapsel-project", + "Katy", + "Kayzen-GS", + "KB", + "KB_Model", + "kelTool", + "kelTool2", + "KenjutsuUI", + "KevinLobo3377-node", + "KFui", + "kickoff-fluidVideo.css", + "Kid", + "kingBuilder", + "kiranApp", + "Kirk", + "Kissui", + "kittJS", + "Kiwoom-Helper", + "KLC3377-node", + "knockout.ajaxTemplateEngine", + "koa-artTemplate", + "koa-Router", + "koaPlus", + "koaVue", + "KonggeIm", + "kpPublicPerson", + "kpPublicVideo", + "krawlerWash", + "ktPlayer", + "kylpo-BackgroundImage", + "kylpo-Block", + "kylpo-Button", + "kylpo-Col", + "kylpo-Flex", + "kylpo-Inline", + "kylpo-InlineBlock", + "kylpo-InlineCol", + "kylpo-InlineFlex", + "kylpo-InlineRow", + "kylpo-Paint", + "kylpo-Painter", + "kylpo-Row", + "kylpo-Text", + "kylpo-View", + "kzFormDaimyo", + "L.TileLayer.Kartverket", + "L7", + "labBuilder", + "Lactate", + "Lade", + "laravel-jQvalidation", + "Large", + "lark-PM", + "LasStreamReader", + "latte_web_ladeView", + "latte_webServer4", + "lavaK", + "layaIdecode", + "Layar", + "Layout", + "LazyBoy", + "lazyBum", + "lazyConnections", + "lazyLoadingGrid", + "lcAudioPlayer", + "LCM", + "LDAP", + "Leaf.js", + "Leaflet-MovingMaker", + "Leaflet.AutoLayers", + "Leaflet.Deflate", + "Leaflet.GeoJSON.Encoded", + "Leaflet.GreatCircle", + "Leaflet.MultiOptionsPolyline", + "Leaflet.TileLayer.MBTiles", + "Leaflet.vector-markers", + "leapShell", + "LearningNPM", + "learnnode_by_HHM", + "leFunc", + "Legos", + "Libby-Client", + "LightCinematic", + "lihuanxiangNpm1", + "limitedQueue", + "linearJs", + "lineReader", + "Lingo", + "LinkedList", + "linkIt", + "LISP.js", + "liteParse", + "liuchengjunOrder0414", + "LiveController", + "LiveDocument", + "LiveScript", + "LiveScript-brunch", + "LiveView", + "liweiUitl", + "lizaorenqingTool", + "lmONE", + "LMUI", + "LMX-Data", + "LNS_weixin_h5", + "localeMaker_v1", + "localforage-memoryStorageDriver", + "LocalRecord", + "localStorage", + "localStorage-info", + "localStorage-mock", + "LoDashfromScratch", + "lofterG", + "Loganalyzer", + "LogbookMessageCreator", + "Logger", + "Logging", + "Loggy", + "logic2UI", + "LogosDistort", + "LogStorage.js", + "logStream", + "LOL", + "lolAJ", + "LongestCommonSubstring", + "loop-setTimeout", + "loopback-connector-rest-addCookie", + "lopataJs", + "Lorem", + "Losas", + "LP_test_task", + "Lucy", + "LUIS", + "LUIS_FB", + "Lumenize", + "Lush.js", + "LykkeFramework", + "M66_math_example", + "mac-cropSr", + "MacGyver", + "Mad.js", + "magentoExt", + "Maggi.js", + "Maggi.js-0.1", + "MagpieUI", + "MALjs", + "Mambo-UI", + "mangoSlugfy", + "mapleTree", + "mappumBot", + "Marionette-Require-Boilerplate", + "markupDiff", + "marryB", + "MasterDetailApplication", + "MaterialAngularWithNodeJS", + "Math", + "math_example_20160505163300BR", + "math_example_Hala", + "math_example_myown_ve-01119310520_V2", + "math_exampleCJG", + "math_exampleII", + "math_exampleX", + "math_ThisIsMe", + "math-Murasame", + "Math1105", + "mathAdd", + "mathExample", + "MathJax-node", + "MathJS", + "mathMagic", + "MathTest1", + "MatPack", + "Mavigator", + "MAX-AVT-homebridge-led", + "MAXAVTDemo", + "MAXIMjs", + "MaxUPS", + "MCom", + "MD5", + "MDLCOMPONENT", + "mdlReact", + "mdPickers", + "mdRangeSlider", + "mdToPdf", + "MEAN", + "MeanApp1", + "MeCab", + "mediaCheck", + "Mediany", + "medicalHistory", + "Mercury", + "Meridix-WebAPI-JS", + "Mers", + "MessageBus", + "MetaEditor", + "Meteor-Test-Installer", + "MetroTenerife", + "MFL-ng", + "MFRC522-node", + "mglib-GAMS.WEBCLIENT2", + "MIA", + "MicroServices", + "Midgard", + "midhunthomas_Test", + "mihoo_fileUpload", + "mini-fileSystem-WebServer", + "Mini-test", + "MiniAppOne", + "MiniAppTwo", + "minibuyCommonality", + "miniJsonp", + "MiniManager", + "MiniMVC", + "MinionCI", + "Minju003", + "Mirador", + "Misho_math_example", + "MJackpots", + "mjb44-playground-module-exporting-interface-and-type-method-B", + "mjb44-playground-module-exporting-interface-and-type-method-C", + "Mkoa", + "Mkoa-pg-session", + "MKOUpload", + "mlm603Test", + "mmAnimate", + "mmDux", + "MMM-alexa", + "mmRequest", + "mmRouter", + "mNotes", + "Mockery", + "modalDemo", + "modalDemo1", + "modalWin.js", + "module", + "ModuleBinder", + "modulebyAKB", + "ModuleC", + "moduleLoader", + "moduleTest", + "MoEventEmitter", + "Mokr", + "Mole", + "mon-appNon0", + "MonApp", + "MongoDAL", + "mongoose-schema-to-graphQL", + "mongooseSchema-to-graphQL", + "Monik", + "MonikCommon", + "MoniqueWeb", + "Monorail.js", + "Mopidy-Spotmop", + "mosesCheckIn", + "MovieJS", + "mOxie", + "MoxtraPlugin_1.1", + "MoxtraPlugin_1.2.1", + "mPortalUI", + "MQTTClient", + "Mr.Array", + "Mr.Async", + "Mr.Coverage", + "mraaStub", + "MrsYu", + "MrsYu1", + "msGetStarted", + "mSite", + "msJackson", + "mSnackbar", + "Mu", + "Muffin", + "MultiSlider", + "musuAppsas", + "MWS_Automation", + "my-awesome-nodejs-moduleHL", + "my-componentAnimesh", + "My-First-Module", + "My-first-Package", + "My-Fist-Project", + "my-HLabib", + "My1ink", + "MyAngularGruntt", + "MyAnimalModule", + "myappSriniAppala", + "myappUSBankExample", + "myAries", + "MyBlog", + "myCalclator", + "myDate", + "myDialog", + "myDu2", + "myDVA", + "myFirst-Nodejs-Module", + "MyFirstContribution", + "myfirstDemo", + "myFirstModule", + "myFirstNodeModule", + "myFirstNpm", + "myFirstPluginAji", + "myFirstProject", + "myFirstPub", + "myLib", + "myMath", + "MYMODAL", + "MyModule", + "myModule", + "myNodeJs", + "myNodeJsApp", + "myNodejsApp", + "myNpm", + "MYnpm1", + "myNpm0001", + "myNpm2", + "myNpm5", + "myNpm10", + "myNpm11", + "myNpm111", + "myNpm999", + "myNpmfei", + "myNpmfei1", + "myNpml", + "myNpmModule", + "myNpmrz1", + "MyPlugin", + "MyProject", + "MyProjNode", + "myPromise", + "myrikGoodModule", + "Mysql-Assistant", + "mysupermoduleXXX", + "myTest", + "Mytest_module", + "mytPieChart", + "N", + "N3-components", + "NA1", + "NageshTestapplication", + "NAME", + "Nameless13", + "NaNNaNBatman.js", + "nanoTest", + "NasimBotPlatform", + "NativeAds", + "NativeCall", + "NativeProject", + "nativescript-CallLog", + "nativescript-GMImagePicker", + "nativescript-logEntries", + "NavExercise", + "nCinoRabbit", + "ncURL", + "NDDB", + "neouiReact-button", + "Neptune", + "NERDERY.JS.NAT", + "nestedSortable", + "net", + "NeteaseCloudMusicApi", + "neteaseMusicApi", + "Netflow", + "Netlifer", + "NetMatch", + "NetOS", + "netOS", + "Netpath-Test", + "Neuro", + "Neuro-Company", + "NewModule1", + "newmsPong", + "newPackage", + "newPioneer", + "newStart", + "newtouchCloud", + "NewWebview", + "NexManager", + "NexmoJS", + "NFO-Generator", + "ng2-clockTST", + "ng2-dodo-materialTypeTransfer", + "ng2-QppWs", + "ng2GifPreview", + "NG2TableView", + "ngBrowserNotification", + "ngCart", + "ngChatScroller", + "ngComponentRouter-patched", + "ngCurrentGeolocation", + "ngDfp", + "ngDrag", + "ngFileReader", + "ngGen", + "ngGeolocation", + "ngHyperVideo", + "ngIceberg", + "ngImgHandler", + "ngIntercom", + "ngKit", + "ngPicker", + "ngPluralizeFilter", + "ngPluralizeFilter2", + "ngProgress-browserify", + "ngScroll", + "ngSinaEmoji", + "ngSmoothScroll", + "ngSqlite", + "ngTile", + "ngTimeInput", + "ngTreeView", + "ngUpload", + "ngUpload-forked", + "Nguyen_test", + "ngVue", + "ngYamlConfig", + "nHttpInterceptor", + "Nick_calc", + "NickSam_CGD", + "NightPro-Web", + "nightwatchGui", + "Nikmo", + "nImage", + "Nitish", + "nitish.kumar.IDS-LOGIC", + "NlpTextArea", + "nltco-lgpt-clean-A", + "nltco-lgpt-clean-B", + "nltco-lgpt-dedupe-simple-A", + "nltco-lgpt-dedupe-simple-B", + "nMingle", + "nmPhone", + "nMysql", + "NoCR", + "NODE", + "Node_POC", + "node-CORSproxy", + "Node-FacebookMessenger", + "Node-HelloWorld-Demo", + "node-iDR", + "node-iOS", + "Node-JavaScript-Preprocessor", + "node-localStorage", + "Node-Log", + "Node-Module-Test", + "node-myPow", + "node-red-contrib-samsungTV", + "node-red-contrib-wwsNodes", + "node-red-StefanoTest", + "node-TBD", + "NodeApp", + "nodeApp", + "nodeAuth", + "nodeBase", + "NodeBonocarmiol", + "nodeCalcPax", + "nodeCombo", + "nodeDemo9.26", + "nodeDocs", + "nodeEventedCommand", + "NodeFileBrowser", + "NodeFQL", + "nodeHCC", + "nodeInterface", + "NodeInterval", + "nodeIRCbot", + "nodeJS", + "NodeJS_Tutorial", + "nodeJs-zip", + "NodejsAgent", + "NodeJsApplication", + "nodejsFramework", + "nodejsLessons", + "NodeJsNote", + "NodeJsPractice", + "nodeJsPrograms", + "Nodejsricardo", + "NodeJSTraining-demo-9823742", + "nodejsTutorial", + "NodejsWebApp1", + "nodejsWorkSpace", + "NodeKeynote", + "nodeLearning", + "nodeMarvin", + "nodeMarvin2", + "NodeMini", + "nodeMysqlWrapper", + "nodeNES", + "nodeos-boot-multiUser", + "nodeos-boot-singleUser", + "nodeos-boot-singleUserMount", + "nodepackageBoopathi", + "nodePhpSessions", + "NodePlugwise", + "NodePlugwiseAPI", + "nodeQuery", + "nodes_Samples", + "NodeSDK-Base", + "NodeServerExtJS", + "NodeSSH", + "nodeSSO", + "NodeSTEP", + "nodeTest", + "NodeTestDee", + "nodeTTT", + "nodeTut", + "NoDevent", + "NodeView", + "nodeWebsite", + "NodObjC", + "Nonsense", + "NoobConfig", + "NoobHTTP", + "normalizeName", + "NORRIS", + "nOSCSender", + "Note.js", + "NotificationPushsafer", + "Notifly", + "Npm", + "npm-Demo", + "Npm-Doc-Study", + "npm-mydemo-pkgTest", + "npm-setArray", + "npm-wwmTest", + "npmCalc", + "npmFile", + "npmModel", + "npmModel1", + "npmModel2", + "npmTest", + "npmToying", + "npmTutorial", + "NPR_Test", + "nrRenamer", + "nStoreSession", + "nTPL", + "nTunes", + "NudeJS", + "nunjucks-includeData", + "O", + "O_o", + "o_O", + "O2-countdown", + "O2-tap", + "objectFitPolyfill", + "ObjectSnapshot", + "ObjJ-Node", + "ObservableQueue", + "OCA-api", + "ocamlAlpha", + "ocamlBetterErrors", + "OcamlBytes", + "ocamlBytes", + "ocamlRe", + "OhMyCache", + "OK-GOOGLE", + "Olive", + "onBoarding", + "OnCollect", + "OneDollar.js", + "oneTest", + "OpenBazaar-cli", + "OpenDolphin", + "OpenJPEG.js", + "openWeather", + "OperatorUI", + "OPFCORS", + "OPFSalesforce", + "OptionParser", + "OrangeTree", + "Orchestrator", + "Order", + "ORIENTALASIAN", + "os", + "Osifo-package", + "osu-ModPropertiesCalculator", + "OTPAutoVerification", + "overloadedFunction", + "OwnMicroService", + "OwnNormalizer", + "OwnPubSub", + "OwnPubSubClient", + "OwnPubSubServer", + "p2Pixi", + "PaasyMcPaasFace", + "pacemakerJS", + "packAdmin", + "Package", + "packageNodeCR-Jeff.json", + "packagePublished", + "packageTesting", + "Packery-rows", + "packing-template-artTemplate", + "Paddinator", + "Paginate", + "palindromeCalcPax", + "palindromePax", + "PanPG", + "Panzer", + "parameterBag", + "paramsValidator", + "Parse-Server-phone-number-auth", + "parseArgs", + "Parser", + "parseUri", + "Particle", + "Particleground.js", + "PassiveRedis", + "path", + "PatternLabStarter", + "patternReplacer", + "paytmGratify", + "PayzenJS", + "pDebug", + "pdf-to-dataURL", + "pdfTOthumbnail_convert", + "PeA_nut", + "Peek", + "PeepJS", + "Pega.IO", + "Peggy.js", + "Percolator", + "perf_hooks", + "performJs", + "pgnToJSON", + "PHibernate", + "phoeNix-cli", + "phoenixCLI", + "PhonegapAnalytics", + "PhonegapBeacon", + "PhonegapFeeds", + "PhonegapGeofence", + "PhonegapGrowth", + "PhonegapLocations", + "PhonegapPush", + "picardForTynt", + "PicoMachine", + "Pictionary", + "Pintu", + "pjEmojiTest", + "PJsonCouch", + "PK", + "PL8", + "placeHolder.js", + "PLATO", + "PlayStream", + "pluginCreater", + "pluginHelloWorld", + "pluginHelloworld", + "pluginTest", + "PlugMan", + "pluuuuHeader", + "PoistueJS", + "Pokeball-Scanner", + "PokeChat", + "PokedexJS", + "PokemonGoBot", + "PokemonGoNodeDashboard", + "polar-cookieParser", + "pollUntil", + "Polymer", + "POM", + "pomeloGlobalChannel", + "pomeloScale", + "portal-fe-devServer", + "PostgresClient", + "Postlog", + "PowerPlanDisplay", + "powerPlug", + "PP", + "ppublishDemo", + "Pre", + "Preprocessor", + "PrettyCSS", + "prettyJson", + "PrimaryJS", + "primerNodo", + "primo-explore-LinkedData", + "primo-explore-prmFacetsToLeft", + "primo-explore-prmFullViewAfter", + "primo-explore-prmLogoAfter", + "primo-explore-prmSearchBarAfter", + "PrimoEsempio", + "Printer", + "Prism", + "prjTemplate", + "Probes.js", + "process", + "proInterface", + "Project-A-VK", + "Prometheus", + "Promise", + "Promise.js", + "PromiseContext", + "promisify-syncStore", + "PropagAPISpecification", + "propCheckers", + "Propeller", + "properJSONify", + "Proto", + "proton-quark-rabbitMQ", + "ProtVista", + "ProUI-Utils", + "ProvaSimone", + "provinceCity.js", + "PSNjs", + "PTC-Creator", + "ptyzhuTest_20160813", + "PublishDemo", + "publishDigitalCrafts2016", + "PubSub", + "pubsubJS", + "pulsarDivya", + "punycode", + "PupaFM", + "Puppet.svg", + "PureBox", + "PureBox-Gallery-PlayEngine", + "purePlayer", + "PushMessage", + "PushPanel", + "PushPlugin_V2", + "pybee!batavia", + "Q", + "q-mod-cliElements", + "q-mod-cliPrinter", + "QAP-cli", + "QAP-SDK", + "Qarticles", + "QnA_Fore", + "QNtest", + "qqMap", + "qTip2", + "QuadMap", + "QuantumExperimentService", + "querystring", + "R", + "R.js", + "R2", + "RAD.js", + "Radical", + "raehoweNode", + "Rajas", + "random-fullName", + "randomCaddress", + "randomCname", + "randomCname.js", + "randomLib", + "randomNickname", + "RandomSelection", + "randomTestOne", + "randString", + "randString.js", + "Range.js", + "Rannalhi", + "rAppid.js", + "rAppid.js-server", + "rAppid.js-sprd", + "Rapydscriptify", + "RaspiKids", + "raZerdummy", + "RCTMessageUI", + "React_Components", + "React-Carousel", + "react-countTo", + "react-creditCard", + "React-ES5-To-ES6-Checklist", + "react-input-dateTime", + "react-InputText-component", + "react-komposer-watchQuery", + "react-materialUI-components", + "react-native-accountKit", + "react-native-cascadeGrid", + "react-native-checkBox", + "react-native-DebugServerHost", + "React-Native-Form-Field", + "react-native-isDeviceRooted", + "react-native-LoopAnimation", + "react-native-MultiSlider", + "react-native-portableView", + "react-native-swRefresh", + "react-PPT", + "React-Redux-Docker-Ngnix-Seed", + "react-refresh-infinite-tableView", + "React-Select-Country", + "React-Tabs", + "React-UI-Notification", + "react-uploadFile", + "reactClass", + "reactcordovaApp", + "ReactEslint", + "reactFormComponentTest1", + "reactGallery", + "reactHeaderComponentTest1", + "ReactHero", + "reactIntlJson-loader", + "ReactNaitveImagePreviewer", + "ReactNative-checkbox", + "reactNative-checkbox", + "reactNativeDatepicker", + "reactNativeLoading", + "ReactNativeNavbar", + "ReactNativeSlideyTabs", + "ReactNativeSocialLogin", + "ReactNativeStarterKit", + "ReactNativeToastAndroid", + "reactTwo", + "ReactUploader", + "readabilitySAX", + "ReadableFeeds", + "readline", + "ReadSettings", + "Reality3D", + "reallySimpleWeather", + "ReApp", + "ReasonDB", + "RecastAI-Library-JavaScript", + "recordType", + "recordWebsite", + "RedisCacheEngine", + "redisHelper", + "reDIx", + "RefreshMedia", + "registerSendMsg", + "reloadOnUpdate", + "remoteFileToS3", + "RemoteTestService", + "removeNPMAbsolutePaths", + "RentalAdvantage", + "repl", + "Replace", + "Replace2.0", + "Replen-FrontEnd", + "replNetServer", + "Require", + "requireAsync", + "Resin", + "resolveDependencies", + "responseHostInfo", + "ReST-API", + "RESTful-API", + "Restifytest", + "Restlastic", + "RESTLoader", + "Reston", + "RestTest", + "RetreveNumbers", + "rgbToHexa", + "RhinoStyle", + "Richard", + "richardUtils", + "rinuts-nodeunitDriver", + "Risks-Tables", + "RNBaiduMap", + "RNCommon", + "RNSVG", + "RNSwiftHealthkit", + "rNums", + "RobinGitHub", + "Robusta", + "RockSelect", + "Router", + "RP_Limpezas_Industriais", + "Rpm", + "RSK-Router", + "RT-react-toolbox", + "Rubytool", + "runQuery", + "runStormTest", + "runTestScenario", + "RunwayLogger", + "RWD-Table-Patterns", + "RWPromise", + "Safari-command", + "SafeObject.js", + "Safood-Parse", + "SaFood-Parse", + "sahibindenServer", + "salgueirimTeste", + "samepleMicroservice", + "samjs-mongo-isOwner", + "Sample", + "SamplePlugIn", + "SandboxTools", + "sandcastle_multiApp", + "Sanitizer.js", + "sanitizer.unescapeEntities", + "Sardines", + "Sass-Boost", + "Sass-JSON", + "Sass-layout", + "Saturday", + "SauceBreak", + "sayHelloByone", + "sbg-queueManager", + "sbUtils", + "SC-Expense-Plugin", + "Scaffolding", + "scalejs.metadataFactory", + "ScgiClient", + "Scheduler.js", + "schema-inspector-anyOf", + "scp-cleanRedis", + "Scrap", + "scriptTools", + "scrollAnimation", + "scrollPointerEvents", + "ScrollShow", + "Sdp-App", + "seaModel", + "searchBox.js", + "SecChat", + "SecureKeyStore", + "segnoJS", + "Seguranca", + "SegurancaBrasilcard", + "Select2", + "selfAsync", + "selfAutocomplete", + "SelfieJS", + "SenseJs", + "SenseOrm", + "Sentimental", + "SeptemTool", + "seqFlow", + "SerialDownloader", + "serveItQuick", + "Server", + "Service-Discovery-DLNA-SSDP", + "serviceDiscovery", + "SessionWebSocket", + "Set", + "setInterval", + "setRafTimeout", + "setTimeout", + "SexyJS", + "sfaClient", + "sgBase", + "sgCore", + "sgFramework", + "sgLayers", + "sgSay", + "Sharder", + "ShareSDK", + "SharingCMS", + "Shave", + "Sheet", + "SHI-Shire", + "sHistory", + "ShowNativeContact", + "SHPS4Node-auth", + "SHPS4Node-cache", + "SHPS4Node-commandline", + "SHPS4Node-Config", + "SHPS4Node-config", + "SHPS4Node-cookie", + "SHPS4Node-CSS", + "SHPS4Node-dependency", + "SHPS4Node-error", + "SHPS4Node-file", + "SHPS4Node-frontend", + "SHPS4Node-init", + "SHPS4Node-language", + "SHPS4Node-log", + "SHPS4Node-make", + "SHPS4Node-optimize", + "SHPS4Node-parallel", + "SHPS4Node-plugin", + "SHPS4Node-sandbox", + "SHPS4Node-schedule", + "SHPS4Node-session", + "SHPS4Node-SQL", + "shwang1aPackage1", + "shy-Do", + "shy-static-imgJoin", + "SignaturePrinter", + "Silvera", + "simoneDays", + "Simple", + "Simple-Cache", + "simple-hello-world-apiClientsideTest", + "simple-jQuery-slider", + "simpleArgsParser", + "simpleCsvToJson", + "SimpleHtdigest", + "SimpleQueue", + "SimpleRPC", + "Simplog", + "SingularityUI", + "sip.js-mnQf2Q2R", + "Sisense-node-schedule", + "SITA-JS-Wrapper", + "siteBuild", + "Skadi", + "SkelEktron", + "SKRCensorText", + "SkyLabels.js", + "Skype-command", + "slgComponents", + "Slidebars", + "Slidebars-legacy", + "slidePage", + "Slither-Server", + "sLog", + "slush-initPro", + "Smaller4You", + "Smart-Web-Proxy", + "SmartConfig", + "SmartyGrid", + "SMValidator", + "smyNpm1", + "Snake.js", + "SnipIt", + "SnsShare", + "SocialDig.js", + "Socialight", + "socketGW", + "SocketIPC", + "sortBy.js", + "Soumen", + "SoundCloud_Node_API", + "SpaceMagic", + "SpeechJS", + "Speedco", + "Speedonetzer", + "Sphero-Node-SDK", + "Spores", + "Spot", + "spotifyCurrentlyPlaying.js", + "SpotlightJS", + "Spring", + "SPUtility.js", + "SQLClient", + "SQProject", + "SquareOfNumber", + "Squirrel", + "squishMenu", + "Sslac", + "SSO", + "SSSDemoNPM7oct", + "SSuperSchool", + "StaceFlow", + "StanLee-WPTheme-Generator", + "star-initReact", + "Starr", + "startInt", + "starW-names", + "StaticServer", + "staticServer", + "staticSync", + "StatusBar", + "StdJSBuilder", + "steamAPI", + "STEPNode", + "Stewed", + "stickUp", + "stickyNavbar.js", + "stickyStack", + "StimShopPlugin", + "storeJSON", + "storkSQL", + "stormClient", + "Str.js", + "Stratagem", + "stream", + "string_decoder", + "String_module", + "string-DLL", + "string.prototype.htmlDecode", + "string.prototype.htmlEntityDecode", + "StringDistanceTS", + "StringMultiplier", + "StringScanner", + "STRUCT", + "Suckle", + "sudokuMaker", + "sudoTracker", + "SUI-Angular2-Modal", + "superClipBoard", + "SuperDank", + "superJoy", + "Supermodule", + "supermoduleBugay", + "supermoduleLyu", + "supermoduleNik", + "supermoduleShulumba", + "Supersonic", + "superUsingMod", + "svgSprite", + "swimCoachStopwatch", + "SwitchBoard", + "synchro_ByJoker", + "SyncRun", + "Syndication", + "Synergy", + "sys", + "Sysdate", + "sytemMonitor-client", + "szxPack", + "T_T", + "T-Box", + "table-Q", + "tableComponent", + "Tachyon", + "TagCloud", + "tagOf", + "TagSelect.js", + "TalkerNode", + "TALQS", + "talquingApp", + "TangramDocs", + "tap-linux-2BA", + "tap-win-2BA", + "tap-win-C94", + "Targis", + "Tattletale", + "Tayr", + "tbCLI", + "TDTwitterStream", + "Tea", + "TeamBuilder", + "TechNode", + "TechnoLib", + "TeeChart", + "Templ8", + "Template", + "Tempus", + "Ter", + "Tereshkovmodule", + "Terminal-command", + "test_helloWorld", + "Test-7", + "test-A", + "test-naamat-Al-Aswad", + "Test-Project", + "TestAmILate", + "testApi", + "testApp", + "Testchai2", + "Testchai21", + "testContrast", + "TESTdelete123", + "testDEMOABCD", + "testDirJackAtherton", + "Teste2", + "testeRealTime", + "testForThis", + "testMe", + "testModule", + "testModule-hui", + "testNode", + "TestNodeJsApplication", + "testPackage", + "testPackage2", + "TestPlugin", + "testPlugin", + "TestProject", + "testProject", + "testPublish", + "testPublisha", + "testPublishNpmModule", + "TFWhatIs", + "Thairon-node", + "Thanatos_pack", + "ThanhNV", + "Theater", + "TheGiver", + "Thimble", + "Thing.js", + "thingHolder", + "think-paymentService", + "think-qiniuService", + "think-quotationService", + "think-wechatService", + "ThinkHub", + "ThinkInsteon", + "ThirtyDaysOfReactNative", + "threadHandler", + "threejs-htmlRenderer", + "ThrustFS", + "ThumborJS", + "TigraphBot", + "tilejsonHttpShim", + "Time-Tracker-Cli", + "Timelined", + "Timeliner.Core", + "Timeliner.Index", + "Timepass", + "timers", + "timeTraveller", + "timeUtils", + "tiNanta", + "TinyAnimate", + "tinyChat", + "tinyEmiter", + "tinyFrame", + "tinyImages", + "tinyLoger", + "Titan", + "TJAngular", + "tls", + "tm-apps-poolApi", + "tmSensor", + "toBin", + "toDataURL", + "toDoList", + "toDots", + "Toji", + "tokenAndAuthorizationManager", + "tokenAndAuthorizationManger", + "Tom", + "tomloprodModal", + "Tool-bluej-gulp", + "Toolshed-Client", + "topSdk", + "TopuNet-AMD-modules", + "TopuNet-BaiduMap", + "TopuNet-CalendarScroller", + "TopuNet-dropDownLoad", + "TopuNet-GrayScale", + "TopuNet-ImageCropCompressorH5", + "TopuNet-JRoll", + "TopuNet-js-functions", + "TopuNet-JsHint4Sublime", + "TopuNet-JsHintify", + "TopuNet-Landscape_mask", + "TopuNet-Landscape-Mask", + "TopuNet-LayerShow", + "TopuNet-mobile-stop-moved", + "TopuNet-node-functions", + "TopuNet-Pic-code", + "TopuNet-PromptLayer-JS", + "TopuNet-QueueLazyLoad", + "TopuNet-RequireJS", + "TopuNet-RotatingBanner", + "TopuNet-WaterFall", + "TopuNet-weixin-node", + "TorrentBeam", + "TorrentCollection", + "toSrc", + "toString", + "touchController", + "toYaml", + "TPA", + "tr-O64", + "trace_events", + "TradeJS", + "Trains", + "TrainsController", + "TrainsModel", + "TramiteDocumentarioFront", + "TransactionRelay", + "transformConfigJson", + "transitionEnd", + "translateFzn", + "Travis", + "TrixCSS", + "truncateFilename", + "tslint-jasmine-noSkipOrFocus", + "TSN", + "ttm-Testing", + "tty", + "Tuio.js", + "Turntable", + "tuTrabajo-client", + "TweenTime", + "TwigJS", + "twitterApiWrapper", + "txtObj", + "Tyche", + "TypeCast", + "typedCj.js", + "TypedFunc", + "typescript-demo-MATC-Andrew", + "typography-theme-Wikipedia", + "typopro-web-TypoPRO-AmaticSC", + "typopro-web-TypoPRO-AnonymousPro", + "typopro-web-TypoPRO-Asap", + "typopro-web-TypoPRO-Astloch", + "typopro-web-TypoPRO-BebasNeue", + "typopro-web-TypoPRO-Bitter", + "typopro-web-TypoPRO-Chawp", + "typopro-web-TypoPRO-ComingSoon", + "typopro-web-TypoPRO-Cousine", + "typopro-web-TypoPRO-Coustard", + "typopro-web-TypoPRO-CraftyGirls", + "typopro-web-TypoPRO-Cuprum", + "typopro-web-TypoPRO-Damion", + "typopro-web-TypoPRO-DancingScript", + "typopro-web-TypoPRO-Delius", + "typopro-web-TypoPRO-Gidole", + "typopro-web-TypoPRO-GiveYouGlory", + "typopro-web-TypoPRO-GrandHotel", + "typopro-web-TypoPRO-GreatVibes", + "typopro-web-TypoPRO-Handlee", + "typopro-web-TypoPRO-HHSamuel", + "typopro-web-TypoPRO-Inconsolata", + "typopro-web-TypoPRO-IndieFlower", + "typopro-web-TypoPRO-Junction", + "typopro-web-TypoPRO-Kalam", + "typopro-web-TypoPRO-KingthingsPetrock", + "typopro-web-TypoPRO-Kreon", + "typopro-web-TypoPRO-LeagueGothic", + "typopro-web-TypoPRO-Lekton", + "typopro-web-TypoPRO-LibreBaskerville", + "typopro-web-TypoPRO-Milonga", + "typopro-web-TypoPRO-Montserrat", + "typopro-web-TypoPRO-Nickainley", + "typopro-web-TypoPRO-Oxygen", + "typopro-web-TypoPRO-Pacifico", + "typopro-web-TypoPRO-PatuaOne", + "typopro-web-TypoPRO-Poetsen", + "typopro-web-TypoPRO-Pompiere", + "typopro-web-TypoPRO-PTMono", + "typopro-web-TypoPRO-Rosario", + "typopro-web-TypoPRO-SansitaOne", + "typopro-web-TypoPRO-Satisfy", + "typopro-web-TypoPRO-Signika", + "typopro-web-TypoPRO-Slabo", + "typopro-web-TypoPRO-TopSecret", + "typopro-web-TypoPRO-Unifraktur", + "typopro-web-TypoPRO-Vegur", + "typopro-web-TypoPRO-VeteranTypewriter", + "typopro-web-TypoPRO-WeblySleek", + "typopro-web-TypoPRO-Yellowtail", + "Ubertesters", + "Ubi", + "UbibotSensor", + "UbidotsMoscaServer", + "UbiName", + "uDom", + "ueberDB", + "ueberDB-couch", + "ueberRemoteStorage", + "ugcFore", + "UIjson", + "UkGeoTool", + "UltraServerIO", + "UM007", + "uMech", + "uMicro", + "uMicro-invoke", + "UMiracleButton", + "uncaughtException", + "Underscore-1", + "UnderscoreKit", + "UnderscoreMatchersForJasmine", + "underscorePlus", + "underscoreWithTypings", + "Uniform", + "Unit-Bezier", + "unity-kjXmol-1", + "UniversalRoute", + "Up2Bucket", + "UParams", + "UploadCore", + "Uploader", + "URIjs", + "url", + "URLON", + "urlParser", + "urlWatch", + "USAJOBS", + "USAJOBS_Help_Center", + "UserID", + "userModule1123455", + "util", + "utilityFileSystem", + "utilityTool", + "Utils", + "uTool", + "uTool2", + "uvCharts", + "v8", + "Validate", + "Validator", + "VardeminChat", + "vc-buttonGroup", + "vcPagination", + "vdGlslCanvas", + "VDU-web", + "Vector", + "Velvet", + "vericredClient", + "VerifyInput.js", + "Videobox-MODX", + "videoBoxer", + "VideoStream", + "Vidzy", + "ViewAbility", + "ViewPort", + "ViewTest", + "vintageJS", + "Virsical", + "VK-Promise", + "VLC-command", + "vm", + "VmosoApiClient", + "vmSFTP", + "VoiceIt", + "voiceLive", + "Votesy", + "VoxFeed", + "Voyager-search", + "vPromise", + "vQ", + "vQMgArq1o4U1", + "vsGoogleAutocomplete", + "vue-dS", + "vue-scrollTo", + "vueLoadingBar", + "VueProject", + "VueProjectES5", + "VueTree", + "Vuk", + "W2G2", + "w5cValidator", + "w11k-dropdownToggle", + "Wamble", + "wamTool", + "Wanderer", + "wangeditorForReact", + "wantu-nodejsSDK", + "wasabiD", + "wasabiH", + "wasi", + "WasteOfTime", + "WatchWorker", + "watsonWebSocketSTTwrapper", + "wb-Wisteria", + "wBitmask", + "wColor", + "wColor256", + "wConsequence", + "wCopyable", + "WCordova", + "wDeployer", + "Web_GUI_Core", + "web3.onChange", + "Web4.0", + "webarrancoStarter", + "WebConsoleUI", + "Webcord", + "webdriverNode", + "webext-getBytesInUse-polyfill", + "WebHook", + "WebODF", + "webpack-dev-server-getApp", + "webpack-dynamicHash", + "webpack-Minimount-starter", + "WebParrot", + "webpay-webserviceAPI", + "webStart", + "WebStencil", + "webStorage", + "wechat-enterprise-for-kfService", + "wEventHandler", + "wFiles", + "wGluCal", + "WhereThingsHappened", + "WhiteRabbit", + "WigGLe", + "Wilson_U", + "Wilson_Util", + "WiredPanels", + "wkhtmltopdfWrapper", + "wLogger", + "Wmhao", + "WNdb", + "WoD-Dice", + "WolfyEventEmitter", + "woodwoodnine_FirstTest", + "wordCounting", + "WordDuelConstants", + "wPath", + "wProto", + "wqProj-cli", + "wRegexpObject", + "WSBroker", + "wscn-tilesetQuote-component", + "wsxRest", + "wTemplate", + "wTesting", + "WTGeo", + "wTools", + "wy-checkBrowser", + "X-date", + "X-editable", + "xBEM", + "xlsTjson", + "xlsxParser", + "xmlToJsonTs", + "Xnpmtools", + "xSpinner", + "xStore", + "xui-vue-WorkflowArrow", + "Xunfei", + "xuNpm", + "XWindow", + "xwjApp", + "xxxDemo", + "yaDeferred", + "YAEventEmitter", + "yaMap", + "yamQuery-excel", + "yamQuery-excelAnalizer", + "YamYam", + "yang-testingNPM", + "YaoXiaoMi", + "Yeezy-Case", + "Yggdrasil", + "YJS", + "YmpleCommerce", + "YouAreDaChef", + "YouSlackBot", + "yrdLmz", + "yuanMath", + "YuicompressorValidator", + "Yummy", + "Yummy-Yummy", + "YunUI", + "Yworkcli", + "Yworkshell", + "z-lib-structure-dqIndex", + "zhb_helloTest", + "Zhengzx", + "zigZag", + "Ziz", + "ZJJPackage", + "zkModules", + "zlib", + "zmqConnector", + "ZooKeeper", + "zzcBridge", + "zzcCopy", + "zzcDownloadApp" + ]; + } +}); + +// src/index.ts +var index_exports = {}; +__export(index_exports, { + Err: () => Err, + Ok: () => Ok, + PURL_Type: () => import_types.PURL_Type, + PackageURL: () => PackageURL, + PurlBuilder: () => PurlBuilder, + PurlComponent: () => PurlComponent, + PurlError: () => PurlError, + PurlInjectionError: () => PurlInjectionError, + PurlQualifierNames: () => PurlQualifierNames, + PurlType: () => PurlType, + ResultUtils: () => ResultUtils, + UrlConverter: () => UrlConverter, + Vers: () => Vers, + compare: () => compare, + containsInjectionCharacters: () => containsInjectionCharacters, + createMatcher: () => createMatcher, + equals: () => equals, + err: () => err, + findInjectionCharCode: () => findInjectionCharCode, + formatInjectionChar: () => formatInjectionChar, + matches: () => matches, + ok: () => ok, + parseNpmSpecifier: () => parseNpmSpecifier, + stringify: () => stringify, + stringifySpec: () => stringifySpec +}); +module.exports = __toCommonJS(index_exports); +var import_types = __toESM(require_types()); + +// src/primordials.ts +var { apply, bind, call } = Function.prototype; +var uncurryThis = bind.bind(call); +var applyBind = bind.bind(apply); +var MapCtor = Map; +var SetCtor = Set; +var URLCtor = URL; +var URLSearchParamsCtor = URLSearchParams; +var WeakSetCtor = WeakSet; +var encodeComponent = globalThis.encodeURIComponent; +var decodeComponent = globalThis.decodeURIComponent; +var JSONParse = JSON.parse; +var JSONStringify = JSON.stringify; +var ObjectCreate = Object.create; +var ObjectEntries = Object.entries; +var ObjectFromEntries = Object.fromEntries; +var ObjectFreeze = Object.freeze; +var ObjectIsFrozen = Object.isFrozen; +var ObjectKeys = Object.keys; +var ObjectValues = Object.values; +var ArrayIsArray = Array.isArray; +var ArrayPrototypeAt = uncurryThis(Array.prototype.at); +var ArrayPrototypeFilter = uncurryThis(Array.prototype.filter); +var ArrayPrototypeFlatMap = uncurryThis(Array.prototype.flatMap); +var ArrayPrototypeIncludes = uncurryThis(Array.prototype.includes); +var ArrayPrototypeJoin = uncurryThis(Array.prototype.join); +var ArrayPrototypeMap = uncurryThis(Array.prototype.map); +var ArrayPrototypePush = uncurryThis(Array.prototype.push); +var ArrayPrototypeSlice = uncurryThis(Array.prototype.slice); +var ArrayPrototypeSome = uncurryThis(Array.prototype.some); +var ArrayPrototypeToSorted = uncurryThis(Array.prototype.toSorted); +var ReflectApply = Reflect.apply; +var ReflectDefineProperty = Reflect.defineProperty; +var ReflectGetOwnPropertyDescriptor = Reflect.getOwnPropertyDescriptor; +var ReflectOwnKeys = Reflect.ownKeys; +var ReflectSetPrototypeOf = Reflect.setPrototypeOf; +var NumberPrototypeToString = uncurryThis(Number.prototype.toString); +var RegExpPrototypeExec = uncurryThis(RegExp.prototype.exec); +var RegExpPrototypeTest = uncurryThis(RegExp.prototype.test); +var StringFromCharCode = String.fromCharCode; +var StringPrototypeCharCodeAt = uncurryThis(String.prototype.charCodeAt); +var StringPrototypeEndsWith = uncurryThis(String.prototype.endsWith); +var StringPrototypeIncludes = uncurryThis(String.prototype.includes); +var StringPrototypeIndexOf = uncurryThis(String.prototype.indexOf); +var StringPrototypeLastIndexOf = uncurryThis(String.prototype.lastIndexOf); +var StringPrototypeReplace = uncurryThis(String.prototype.replace); +var StringPrototypeReplaceAll = uncurryThis( + String.prototype.replaceAll +); +var StringPrototypePadStart = uncurryThis(String.prototype.padStart); +var StringPrototypeSlice = uncurryThis(String.prototype.slice); +var StringPrototypeSplit = uncurryThis(String.prototype.split); +var StringPrototypeStartsWith = uncurryThis(String.prototype.startsWith); +var StringPrototypeToLowerCase = uncurryThis(String.prototype.toLowerCase); +var StringPrototypeToUpperCase = uncurryThis(String.prototype.toUpperCase); +var StringPrototypeTrim = uncurryThis(String.prototype.trim); + +// src/compare.ts +var _PackageURL; +function _registerPackageURL(ctor) { + _PackageURL = ctor; +} +function toCanonicalString(input) { + if (typeof input === "string") { + if (!_PackageURL) { + throw new Error( + "PackageURL not registered. Import PackageURL before using string comparison." + ); + } + return _PackageURL.fromString(input).toString(); + } + return input.toString(); +} +var wildcardRegexCache = new MapCtor(); +var WILDCARD_CACHE_MAX = 1024; +var MAX_PATTERN_LENGTH = 4096; +function matchWildcard(pattern, value) { + if (pattern.length > MAX_PATTERN_LENGTH) { + return false; + } + let regex = wildcardRegexCache.get(pattern); + if (regex === void 0) { + const regexPattern = StringPrototypeReplace( + StringPrototypeReplace( + StringPrototypeReplace(pattern, /[.+^${}()|[\]\\]/g, "\\$&"), + /\*/g, + ".*" + ), + /\?/g, + "." + ); + regex = new RegExp( + `^${StringPrototypeReplace(regexPattern, /(\.\*)+/g, ".*")}$` + ); + if (wildcardRegexCache.size >= WILDCARD_CACHE_MAX) { + const oldest = wildcardRegexCache.keys().next().value; + if (oldest !== void 0) { + wildcardRegexCache.delete(oldest); + } + } + wildcardRegexCache.set(pattern, regex); + } + return RegExpPrototypeTest(regex, value); +} +function matchComponent(patternValue, actualValue, matcher) { + if (patternValue === "**") { + return true; + } + if (patternValue === null || patternValue === void 0 || patternValue === "") { + return actualValue === null || actualValue === void 0 || actualValue === ""; + } + if (actualValue === null || actualValue === void 0 || actualValue === "") { + return false; + } + if (matcher) { + return matcher(actualValue); + } + if (StringPrototypeIncludes(patternValue, "*") || StringPrototypeIncludes(patternValue, "?")) { + return matchWildcard(patternValue, actualValue); + } + return patternValue === actualValue; +} +function equals(a, b) { + return toCanonicalString(a) === toCanonicalString(b); +} +function compare(a, b) { + const aStr = toCanonicalString(a); + const bStr = toCanonicalString(b); + if (aStr < bStr) { + return -1; + } + if (aStr > bStr) { + return 1; + } + return 0; +} +function parsePattern(pattern) { + if (!StringPrototypeStartsWith(pattern, "pkg:")) { + return void 0; + } + const patternWithoutScheme = StringPrototypeSlice(pattern, 4); + const typeEndIndex = StringPrototypeIndexOf(patternWithoutScheme, "/"); + if (typeEndIndex === -1) { + return void 0; + } + let typePattern = StringPrototypeSlice(patternWithoutScheme, 0, typeEndIndex); + const remaining = StringPrototypeSlice(patternWithoutScheme, typeEndIndex + 1); + let namespacePattern; + let namePattern; + let versionPattern; + const firstSlashIndex = StringPrototypeIndexOf(remaining, "/"); + let nameAndVersion; + if (firstSlashIndex !== -1) { + namespacePattern = StringPrototypeSlice(remaining, 0, firstSlashIndex); + nameAndVersion = StringPrototypeSlice(remaining, firstSlashIndex + 1); + } else { + nameAndVersion = remaining; + } + const versionSeparatorIndex = StringPrototypeStartsWith(nameAndVersion, "@") ? StringPrototypeIndexOf(nameAndVersion, "@", 1) : StringPrototypeIndexOf(nameAndVersion, "@"); + if (versionSeparatorIndex !== -1) { + namePattern = StringPrototypeSlice(nameAndVersion, 0, versionSeparatorIndex); + versionPattern = StringPrototypeSlice( + nameAndVersion, + versionSeparatorIndex + 1 + ); + } else { + namePattern = nameAndVersion; + } + typePattern = StringPrototypeToLowerCase(typePattern); + if (typePattern === "npm") { + if (namespacePattern) { + namespacePattern = StringPrototypeToLowerCase(namespacePattern); + } + namePattern = StringPrototypeToLowerCase(namePattern); + } + if (typePattern === "pypi") { + namePattern = StringPrototypeReplace( + StringPrototypeToLowerCase(namePattern), + /_/g, + "-" + ); + } + return { typePattern, namespacePattern, namePattern, versionPattern }; +} +function matches(pattern, purl) { + const parsed = parsePattern(pattern); + if (!parsed) { + return false; + } + const { typePattern, namespacePattern, namePattern, versionPattern } = parsed; + return matchComponent(typePattern, purl.type) && matchComponent(namespacePattern, purl.namespace) && matchComponent(namePattern, purl.name) && matchComponent(versionPattern, purl.version); +} +function createMatcher(pattern) { + const parsed = parsePattern(pattern); + if (!parsed) { + return () => false; + } + const { typePattern, namespacePattern, namePattern, versionPattern } = parsed; + const typeHasWildcard = typePattern && (StringPrototypeIncludes(typePattern, "*") || StringPrototypeIncludes(typePattern, "?")); + const typeMatcher = typeHasWildcard ? (value) => matchWildcard(typePattern, value) : void 0; + const namespaceHasWildcard = namespacePattern && (StringPrototypeIncludes(namespacePattern, "*") || StringPrototypeIncludes(namespacePattern, "?")); + const namespaceMatcher = namespaceHasWildcard && namespacePattern ? (value) => matchWildcard(namespacePattern, value) : void 0; + const nameHasWildcard = namePattern && (StringPrototypeIncludes(namePattern, "*") || StringPrototypeIncludes(namePattern, "?")); + const nameMatcher = nameHasWildcard ? (value) => matchWildcard(namePattern, value) : void 0; + const versionHasWildcard = versionPattern && (StringPrototypeIncludes(versionPattern, "*") || StringPrototypeIncludes(versionPattern, "?")); + const versionMatcher = versionHasWildcard && versionPattern ? (value) => matchWildcard(versionPattern, value) : void 0; + return (_purl) => { + return matchComponent(typePattern, _purl.type, typeMatcher) && matchComponent(namespacePattern, _purl.namespace, namespaceMatcher) && matchComponent(namePattern, _purl.name, nameMatcher) && matchComponent(versionPattern, _purl.version, versionMatcher); + }; +} + +// src/error.ts +function formatPurlErrorMessage(message = "") { + const { length } = message; + let formatted = ""; + if (length) { + const code0 = StringPrototypeCharCodeAt(message, 0); + formatted = code0 >= 65 && code0 <= 90 ? `${StringPrototypeToLowerCase(message[0])}${StringPrototypeSlice(message, 1)}` : message; + if (length > 1 && StringPrototypeCharCodeAt(message, length - 1) === 46 && StringPrototypeCharCodeAt(message, length - 2) !== 46) { + formatted = StringPrototypeSlice(formatted, 0, -1); + } + } + return `Invalid purl: ${formatted}`; +} +var PurlError = class extends Error { + constructor(message, options) { + super(formatPurlErrorMessage(message), options); + } +}; +var PurlInjectionError = class extends PurlError { + charCode; + component; + purlType; + constructor(purlType, component, charCode, charLabel) { + super( + `${purlType} "${component}" component contains injection character ${charLabel}` + ); + this.charCode = charCode; + this.component = component; + this.purlType = purlType; + ObjectFreeze(this); + } +}; +ObjectFreeze(PurlInjectionError.prototype); + +// src/decode.ts +function decodePurlComponent(comp, encodedComponent) { + try { + return decodeComponent(encodedComponent); + } catch (e) { + throw new PurlError(`unable to decode "${comp}" component`, { cause: e }); + } +} + +// src/constants.ts +var LOOP_SENTINEL = 1e6; +var REUSED_SEARCH_PARAMS = new URLSearchParamsCtor(); +var REUSED_SEARCH_PARAMS_KEY = "_"; +var REUSED_SEARCH_PARAMS_OFFSET = 2; + +// src/objects.ts +function recursiveFreeze(value_) { + if (value_ === null || !(typeof value_ === "object" || typeof value_ === "function") || ObjectIsFrozen(value_)) { + return value_; + } + const queue = [value_]; + const visited = new WeakSetCtor(); + visited.add(value_); + let { length: queueLength } = queue; + let pos = 0; + while (pos < queueLength) { + if (pos === LOOP_SENTINEL) { + throw new Error("Object graph too large (exceeds 1,000,000 items)."); + } + const obj = queue[pos++]; + ObjectFreeze(obj); + if (ArrayIsArray(obj)) { + for (let i = 0, { length } = obj; i < length; i += 1) { + const item = obj[i]; + if (item !== null && (typeof item === "object" || typeof item === "function") && !ObjectIsFrozen(item) && !visited.has(item)) { + visited.add(item); + queue[queueLength++] = item; + } + } + } else { + const keys = ReflectOwnKeys(obj); + for (let i = 0, { length } = keys; i < length; i += 1) { + const propValue = obj[keys[i]]; + if (propValue !== null && (typeof propValue === "object" || typeof propValue === "function") && !ObjectIsFrozen(propValue) && !visited.has(propValue)) { + visited.add(propValue); + queue[queueLength++] = propValue; + } + } + } + } + return value_; +} +function isObject(value) { + return value !== null && typeof value === "object"; +} + +// src/strings.ts +function isBlank(str) { + for (let i = 0, { length } = str; i < length; i += 1) { + const code = StringPrototypeCharCodeAt(str, i); + if (!// Whitespace characters according to ECMAScript spec: + // https://tc39.es/ecma262/#sec-white-space + // Space + (code === 32 || // Tab + code === 9 || // Line Feed + code === 10 || // Vertical Tab + code === 11 || // Form Feed + code === 12 || // Carriage Return + code === 13 || // No-Break Space + code === 160 || // Ogham Space Mark + code === 5760 || // En Quad + code === 8192 || // Em Quad + code === 8193 || // En Space + code === 8194 || // Em Space + code === 8195 || // Three-Per-Em Space + code === 8196 || // Four-Per-Em Space + code === 8197 || // Six-Per-Em Space + code === 8198 || // Figure Space + code === 8199 || // Punctuation Space + code === 8200 || // Thin Space + code === 8201 || // Hair Space + code === 8202 || // Line Separator + code === 8232 || // Paragraph Separator + code === 8233 || // Narrow No-Break Space + code === 8239 || // Medium Mathematical Space + code === 8287 || // Ideographic Space + code === 12288 || code === 65279)) { + return false; + } + } + return true; +} +function isNonEmptyString(value) { + return typeof value === "string" && value.length > 0; +} +var regexSemverNumberedGroups = ObjectFreeze( + /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/ +); +function isSemverString(value) { + return typeof value === "string" && RegExpPrototypeTest(regexSemverNumberedGroups, value); +} +function lowerName(purl) { + purl.name = StringPrototypeToLowerCase(purl.name); +} +function lowerNamespace(purl) { + const { namespace } = purl; + if (typeof namespace === "string") { + purl.namespace = StringPrototypeToLowerCase(namespace); + } +} +function lowerVersion(purl) { + const { version } = purl; + if (typeof version === "string") { + purl.version = StringPrototypeToLowerCase(version); + } +} +function replaceDashesWithUnderscores(str) { + let result = ""; + let fromIndex = 0; + let index = 0; + while ((index = StringPrototypeIndexOf(str, "-", fromIndex)) !== -1) { + result = `${result + StringPrototypeSlice(str, fromIndex, index)}_`; + fromIndex = index + 1; + } + return fromIndex ? result + StringPrototypeSlice(str, fromIndex) : str; +} +function replaceUnderscoresWithDashes(str) { + let result = ""; + let fromIndex = 0; + let index = 0; + while ((index = StringPrototypeIndexOf(str, "_", fromIndex)) !== -1) { + result = `${result + StringPrototypeSlice(str, fromIndex, index)}-`; + fromIndex = index + 1; + } + return fromIndex ? result + StringPrototypeSlice(str, fromIndex) : str; +} +function isInjectionCharCode(code) { + if (code <= 31) { + return true; + } + if ( + // space + code === 32 || // ! + code === 33 || // " + code === 34 || // # + code === 35 || // $ + code === 36 || // % + code === 37 || // & + code === 38 || // ' + code === 39 || // ( + code === 40 || // ) + code === 41 || // * + code === 42 || // ; + code === 59 || // < + code === 60 || // = + code === 61 || // > + code === 62 || // ? + code === 63 || // [ + code === 91 || // \ + code === 92 || // ] + code === 93 || // ` + code === 96 || // { + code === 123 || // | + code === 124 || // } + code === 125 || // ~ + code === 126 || // DEL + code === 127 + ) { + return true; + } + if (code >= 128 && code <= 159) { + return true; + } + if ( + // Zero-width space + code === 8203 || // Zero-width non-joiner + code === 8204 || // Zero-width joiner + code === 8205 || // Left-to-right mark + code === 8206 || // Right-to-left mark + code === 8207 || // Left-to-right embedding + code === 8234 || // Right-to-left embedding + code === 8235 || // Pop directional formatting + code === 8236 || // Left-to-right override + code === 8237 || // Right-to-left override + code === 8238 || // Word joiner + code === 8288 || // BOM / zero-width no-break space + code === 65279 || // Object replacement character + code === 65532 || // Replacement character + code === 65533 + ) { + return true; + } + return false; +} +function isCommandInjectionCharCode(code) { + if (code <= 31 && code !== 9) { + return true; + } + if ( + // $ — command substitution $() + code === 36 || // ; — command separator + code === 59 || // < — input redirection + code === 60 || // > — output redirection + code === 62 || // \ — escape character + code === 92 || // ` — command substitution (backtick form) + code === 96 || // | — pipe + code === 124 || // DEL + code === 127 + ) { + return true; + } + if (code >= 128 && code <= 159) { + return true; + } + if (code === 8203 || code === 8204 || code === 8205 || code === 8206 || code === 8207 || code === 8234 || code === 8235 || code === 8236 || code === 8237 || code === 8238 || code === 8288 || code === 65279 || code === 65532 || code === 65533) { + return true; + } + return false; +} +function findCommandInjectionCharCode(str) { + for (let i = 0, { length } = str; i < length; i += 1) { + const code = StringPrototypeCharCodeAt(str, i); + if (isCommandInjectionCharCode(code)) { + return code; + } + } + return -1; +} +function findInjectionCharCode(str) { + for (let i = 0, { length } = str; i < length; i += 1) { + const code = StringPrototypeCharCodeAt(str, i); + if (isInjectionCharCode(code)) { + return code; + } + } + return -1; +} +function containsInjectionCharacters(str) { + return findInjectionCharCode(str) !== -1; +} +function formatInjectionChar(code) { + const hex = NumberPrototypeToString(code, 16); + if (code >= 32 && code <= 126) { + return `"${StringFromCharCode(code)}" (0x${hex})`; + } + return `0x${StringPrototypePadStart(hex, 2, "0")}`; +} +function trimLeadingSlashes(str) { + let start = 0; + while (StringPrototypeCharCodeAt(str, start) === 47) { + start += 1; + } + return start === 0 ? str : StringPrototypeSlice(str, start); +} + +// src/normalize.ts +var EMPTY_ENTRIES = ObjectFreeze( + [] +); +function normalizeName(rawName) { + return typeof rawName === "string" ? StringPrototypeTrim(rawName) : void 0; +} +function normalizeNamespace(rawNamespace) { + return typeof rawNamespace === "string" ? normalizePurlPath(rawNamespace) : void 0; +} +function normalizePurlPath(pathname, options) { + const { filter: callback } = options ?? {}; + let collapsed = ""; + let start = 0; + while (StringPrototypeCharCodeAt(pathname, start) === 47) { + start += 1; + } + let nextIndex = StringPrototypeIndexOf(pathname, "/", start); + if (nextIndex === -1) { + return StringPrototypeSlice(pathname, start); + } + while (nextIndex !== -1) { + const segment = StringPrototypeSlice(pathname, start, nextIndex); + if (callback === void 0 || callback(segment)) { + collapsed = collapsed + (collapsed.length === 0 ? "" : "/") + segment; + } + start = nextIndex + 1; + while (StringPrototypeCharCodeAt(pathname, start) === 47) { + start += 1; + } + nextIndex = StringPrototypeIndexOf(pathname, "/", start); + } + const lastSegment = StringPrototypeSlice(pathname, start); + if (lastSegment.length !== 0 && (callback === void 0 || callback(lastSegment))) { + collapsed = collapsed + (collapsed.length === 0 ? "" : "/") + lastSegment; + } + return collapsed; +} +function normalizeQualifiers(rawQualifiers) { + let qualifiers; + for (const { 0: key, 1: value } of qualifiersToEntries(rawQualifiers)) { + const strValue = typeof value === "string" ? value : typeof value === "number" || typeof value === "boolean" ? `${value}` : ""; + const trimmed = StringPrototypeTrim(strValue); + if (trimmed.length === 0) { + continue; + } + if (qualifiers === void 0) { + qualifiers = ObjectCreate(null); + } + qualifiers[StringPrototypeToLowerCase(key)] = trimmed; + } + return qualifiers; +} +function normalizeSubpath(rawSubpath) { + return typeof rawSubpath === "string" ? normalizePurlPath(rawSubpath, { filter: subpathFilter }) : void 0; +} +function normalizeType(rawType) { + return typeof rawType === "string" ? StringPrototypeToLowerCase(StringPrototypeTrim(rawType)) : void 0; +} +function normalizeVersion(rawVersion) { + return typeof rawVersion === "string" ? StringPrototypeTrim(rawVersion) : void 0; +} +function qualifiersToEntries(rawQualifiers) { + if (isObject(rawQualifiers)) { + const rawQualifiersObj = rawQualifiers; + const entriesProperty = rawQualifiersObj["entries"]; + return typeof entriesProperty === "function" ? ReflectApply(entriesProperty, rawQualifiersObj, []) : ObjectEntries(rawQualifiers); + } + return typeof rawQualifiers === "string" ? new URLSearchParamsCtor(rawQualifiers).entries() : EMPTY_ENTRIES; +} +function subpathFilter(segment) { + const { length } = segment; + if (length === 1 && StringPrototypeCharCodeAt(segment, 0) === 46) { + return false; + } + if (length === 2 && StringPrototypeCharCodeAt(segment, 0) === 46 && StringPrototypeCharCodeAt(segment, 1) === 46) { + return false; + } + return !isBlank(segment); +} + +// src/encode.ts +function encodeName(name) { + return isNonEmptyString(name) ? StringPrototypeReplaceAll(encodeComponent(name), "%3A", ":") : ""; +} +function encodeNamespace(namespace) { + return isNonEmptyString(namespace) ? StringPrototypeReplaceAll( + StringPrototypeReplaceAll(encodeComponent(namespace), "%3A", ":"), + "%2F", + "/" + ) : ""; +} +function encodeQualifierParam(param) { + if (isNonEmptyString(param)) { + const value = prepareValueForSearchParams(param); + REUSED_SEARCH_PARAMS.set(REUSED_SEARCH_PARAMS_KEY, value); + const search = REUSED_SEARCH_PARAMS.toString(); + return normalizeSearchParamsEncoding( + StringPrototypeSlice(search, REUSED_SEARCH_PARAMS_OFFSET) + ); + } + return ""; +} +function encodeQualifiers(qualifiers) { + if (isObject(qualifiers)) { + const qualifiersKeys = ArrayPrototypeToSorted(ObjectKeys(qualifiers)); + const searchParams = new URLSearchParamsCtor(); + for (let i = 0, { length } = qualifiersKeys; i < length; i += 1) { + const key = qualifiersKeys[i]; + const value = prepareValueForSearchParams( + qualifiers[key] + ); + searchParams.set(key, value); + } + return normalizeSearchParamsEncoding(searchParams.toString()); + } + return ""; +} +function encodeSubpath(subpath) { + return isNonEmptyString(subpath) ? StringPrototypeReplaceAll(encodeComponent(subpath), "%2F", "/") : ""; +} +function encodeVersion(version) { + return isNonEmptyString(version) ? StringPrototypeReplaceAll(encodeComponent(version), "%3A", ":") : ""; +} +function normalizeSearchParamsEncoding(encoded) { + return StringPrototypeReplaceAll( + StringPrototypeReplaceAll(encoded, "%2520", "%20"), + "+", + "%2B" + ); +} +function prepareValueForSearchParams(value) { + return StringPrototypeReplaceAll(String(value), " ", "%20"); +} + +// src/helpers.ts +function createHelpersNamespaceObject(helpers, options_ = {}) { + const { comparator, ...defaults } = { + __proto__: null, + ...options_ + }; + const helperNames = ArrayPrototypeToSorted(ObjectKeys(helpers)); + const propNames = ArrayPrototypeToSorted( + [ + ...new SetCtor( + ArrayPrototypeFlatMap( + ObjectValues(helpers), + (helper) => ObjectKeys(helper) + ) + ) + ], + comparator + ); + const nsObject = ObjectCreate(null); + for (let i = 0, { length } = propNames; i < length; i += 1) { + const propName = propNames[i]; + const helpersForProp = ObjectCreate(null); + for (let j = 0, { length: helperNamesLength } = helperNames; j < helperNamesLength; j += 1) { + const helperName = helperNames[j]; + const helperValue = helpers[helperName]?.[propName] ?? defaults[helperName]; + if (helperValue !== void 0) { + helpersForProp[helperName] = helperValue; + } + } + nsObject[propName] = helpersForProp; + } + return nsObject; +} + +// src/lang.ts +function isNullishOrEmptyString(value) { + return value === null || value === void 0 || typeof value === "string" && value.length === 0; +} + +// src/validate.ts +function validateEmptyByType(type, name, value, options) { + const { throws = false } = typeof options === "boolean" ? { throws: options } : options ?? {}; + if (!isNullishOrEmptyString(value)) { + if (throws) { + throw new PurlError(`${type} "${name}" component must be empty`); + } + return false; + } + return true; +} +function validateNoInjectionByType(type, component, value, throws) { + if (typeof value === "string") { + const code = findInjectionCharCode(value); + if (code !== -1) { + if (throws) { + throw new PurlInjectionError( + type, + component, + code, + formatInjectionChar(code) + ); + } + return false; + } + } + return true; +} +function validateName(name, options) { + const opts = typeof options === "boolean" ? { throws: options } : options; + const { throws = false } = opts ?? {}; + if (!validateRequired("name", name, opts) || !validateStrings("name", name, opts)) { + return false; + } + const MAX_NAME_LENGTH = 214; + if (typeof name === "string" && name.length > MAX_NAME_LENGTH) { + if (throws) { + throw new PurlError( + `"name" exceeds maximum length of ${MAX_NAME_LENGTH} characters` + ); + } + return false; + } + return true; +} +function validateNamespace(namespace, options) { + const opts = typeof options === "boolean" ? { throws: options } : options; + const { throws = false } = opts ?? {}; + if (!validateStrings("namespace", namespace, opts)) { + return false; + } + const MAX_NAMESPACE_LENGTH = 512; + if (typeof namespace === "string" && namespace.length > MAX_NAMESPACE_LENGTH) { + if (throws) { + throw new PurlError( + `"namespace" exceeds maximum length of ${MAX_NAMESPACE_LENGTH} characters` + ); + } + return false; + } + return true; +} +function validateQualifierKey(key, options) { + const opts = typeof options === "boolean" ? { throws: options } : options; + const { throws = false } = opts ?? {}; + if (key.length === 0) { + if (throws) { + throw new PurlError("qualifier key must not be empty"); + } + return false; + } + const MAX_QUALIFIER_KEY_LENGTH = 256; + if (key.length > MAX_QUALIFIER_KEY_LENGTH) { + if (throws) { + throw new PurlError( + `qualifier key exceeds maximum length of ${MAX_QUALIFIER_KEY_LENGTH} characters` + ); + } + return false; + } + if (!validateStartsWithoutNumber("qualifier", key, opts)) { + return false; + } + for (let i = 0, { length } = key; i < length; i += 1) { + const code = StringPrototypeCharCodeAt(key, i); + if (!// 0-9 + (code >= 48 && code <= 57 || // A-Z + code >= 65 && code <= 90 || // a-z + code >= 97 && code <= 122 || // . + code === 46 || // - + code === 45 || code === 95)) { + if (throws) { + throw new PurlError(`qualifier "${key}" contains an illegal character`); + } + return false; + } + } + return true; +} +function validateQualifiers(qualifiers, options) { + const opts = typeof options === "boolean" ? { throws: options } : options; + const { throws = false } = opts ?? {}; + if (qualifiers === null || qualifiers === void 0) { + return true; + } + if (typeof qualifiers !== "object" || ArrayIsArray(qualifiers)) { + if (throws) { + throw new PurlError('"qualifiers" must be a plain object'); + } + return false; + } + const qualifiersObj = qualifiers; + const keysProperty = qualifiersObj["keys"]; + const keysIterable = ( + // URLSearchParams instances have a "keys" method that returns an iterator + typeof keysProperty === "function" ? ReflectApply(keysProperty, qualifiersObj, []) : ObjectKeys(qualifiers) + ); + for (const key of keysIterable) { + if (!validateQualifierKey(key, opts)) { + return false; + } + const value = typeof qualifiersObj[key] === "string" ? qualifiersObj[key] : void 0; + if (value !== void 0) { + const MAX_QUALIFIER_VALUE_LENGTH = 65536; + if (value.length > MAX_QUALIFIER_VALUE_LENGTH) { + if (throws) { + throw new PurlError( + `qualifier "${key}" value exceeds maximum length of ${MAX_QUALIFIER_VALUE_LENGTH} characters` + ); + } + return false; + } + const code = findCommandInjectionCharCode(value); + if (code !== -1) { + if (throws) { + throw new PurlInjectionError( + "purl", + `qualifier "${key}"`, + code, + formatInjectionChar(code) + ); + } + return false; + } + } + } + return true; +} +function validateRequired(name, value, options) { + const { throws = false } = typeof options === "boolean" ? { throws: options } : options ?? {}; + if (isNullishOrEmptyString(value)) { + if (throws) { + throw new PurlError(`"${name}" is a required component`); + } + return false; + } + return true; +} +function validateRequiredByType(type, name, value, options) { + const { throws = false } = typeof options === "boolean" ? { throws: options } : options ?? {}; + if (isNullishOrEmptyString(value)) { + if (throws) { + throw new PurlError(`${type} requires a "${name}" component`); + } + return false; + } + return true; +} +function validateStartsWithoutNumber(name, value, options) { + const { throws = false } = typeof options === "boolean" ? { throws: options } : options ?? {}; + if (isNonEmptyString(value)) { + const code = StringPrototypeCharCodeAt(value, 0); + if (code >= 48 && code <= 57) { + if (throws) { + throw new PurlError(`${name} "${value}" cannot start with a number`); + } + return false; + } + } + return true; +} +function validateStrings(name, value, options) { + const { throws = false } = typeof options === "boolean" ? { throws: options } : options ?? {}; + if (value === null || value === void 0) { + return true; + } + if (typeof value !== "string") { + if (throws) { + throw new PurlError(`"${name}" must be a string`); + } + return false; + } + if (StringPrototypeIncludes(value, "\0")) { + if (throws) { + throw new PurlError(`"${name}" must not contain null bytes`); + } + return false; + } + return true; +} +function validateSubpath(subpath, options) { + const opts = typeof options === "boolean" ? { throws: options } : options; + const { throws = false } = opts ?? {}; + if (!validateStrings("subpath", subpath, opts)) { + return false; + } + if (typeof subpath === "string") { + const code = findCommandInjectionCharCode(subpath); + if (code !== -1) { + if (throws) { + throw new PurlInjectionError( + "purl", + "subpath", + code, + formatInjectionChar(code) + ); + } + return false; + } + } + return true; +} +function validateType(type, options) { + const opts = typeof options === "boolean" ? { throws: options } : options; + const { throws = false } = opts ?? {}; + if (!validateRequired("type", type, opts) || !validateStrings("type", type, opts) || !validateStartsWithoutNumber("type", type, opts)) { + return false; + } + for (let i = 0, { length } = type; i < length; i += 1) { + const code = StringPrototypeCharCodeAt(type, i); + if (!// 0-9 + (code >= 48 && code <= 57 || // A-Z + code >= 65 && code <= 90 || // a-z + code >= 97 && code <= 122 || // . + code === 46 || code === 45)) { + if (throws) { + throw new PurlError(`type "${type}" contains an illegal character`); + } + return false; + } + } + return true; +} +function validateVersion(version, options) { + const opts = typeof options === "boolean" ? { throws: options } : options; + const { throws = false } = opts ?? {}; + if (!validateStrings("version", version, opts)) { + return false; + } + const MAX_VERSION_LENGTH = 256; + if (typeof version === "string" && version.length > MAX_VERSION_LENGTH) { + if (throws) { + throw new PurlError( + `"version" exceeds maximum length of ${MAX_VERSION_LENGTH} characters` + ); + } + return false; + } + if (typeof version === "string") { + const code = findCommandInjectionCharCode(version); + if (code !== -1) { + if (throws) { + throw new PurlInjectionError( + "purl", + "version", + code, + formatInjectionChar(code) + ); + } + return false; + } + } + return true; +} + +// src/purl-component.ts +var componentSortOrderLookup = { + __proto__: null, + type: 0, + namespace: 1, + name: 2, + version: 3, + qualifiers: 4, + qualifierKey: 5, + qualifierValue: 6, + subpath: 7 +}; +function componentComparator(compA, compB) { + return componentSortOrder(compA) - componentSortOrder(compB); +} +function componentSortOrder(comp) { + return componentSortOrderLookup[comp] ?? // Unknown components sort after all known ones + 8; +} +function PurlComponentEncoder(comp) { + return isNonEmptyString(comp) ? encodeComponent(comp) : ""; +} +function PurlComponentStringNormalizer(comp) { + return typeof comp === "string" ? comp : void 0; +} +function PurlComponentValidator(_comp, _throws) { + return true; +} +var PurlComponent = createHelpersNamespaceObject( + { + encode: { + name: encodeName, + namespace: encodeNamespace, + version: encodeVersion, + qualifiers: encodeQualifiers, + qualifierKey: encodeQualifierParam, + qualifierValue: encodeQualifierParam, + subpath: encodeSubpath + }, + normalize: { + type: normalizeType, + namespace: normalizeNamespace, + name: normalizeName, + version: normalizeVersion, + qualifiers: normalizeQualifiers, + subpath: normalizeSubpath + }, + validate: { + type: validateType, + namespace: validateNamespace, + name: validateName, + version: validateVersion, + qualifierKey: validateQualifierKey, + qualifiers: validateQualifiers, + subpath: validateSubpath + } + }, + { + comparator: componentComparator, + encode: PurlComponentEncoder, + normalize: PurlComponentStringNormalizer, + validate: PurlComponentValidator + } +); + +// src/purl-qualifier-names.ts +var PurlQualifierNames = { + __proto__: null, + Checksum: "checksum", + DownloadUrl: "download_url", + FileName: "file_name", + RepositoryUrl: "repository_url", + VcsUrl: "vcs_url", + Vers: "vers" +}; + +// src/purl-types/alpm.ts +function normalize(purl) { + lowerNamespace(purl); + lowerName(purl); + return purl; +} + +// src/purl-types/apk.ts +function normalize2(purl) { + lowerNamespace(purl); + lowerName(purl); + return purl; +} + +// src/purl-types/bazel.ts +function normalize3(purl) { + lowerName(purl); + return purl; +} +function validate(purl, throws) { + if (!purl.version || purl.version.length === 0) { + if (throws) { + throw new PurlError('bazel requires a "version" component'); + } + return false; + } + if (!validateNoInjectionByType("bazel", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-types/bitbucket.ts +function normalize4(purl) { + lowerNamespace(purl); + lowerName(purl); + return purl; +} +function validate2(purl, throws) { + if (!validateNoInjectionByType("bitbucket", "namespace", purl.namespace, throws)) { + return false; + } + if (!validateNoInjectionByType("bitbucket", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-types/bitnami.ts +function normalize5(purl) { + lowerName(purl); + return purl; +} + +// src/purl-types/cargo.ts +function validate3(purl, throws) { + if (!validateEmptyByType("cargo", "namespace", purl.namespace, { + throws + })) { + return false; + } + if (!validateNoInjectionByType("cargo", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-types/cocoapods.ts +function validate4(purl, throws) { + const { name } = purl; + if (!validateNoInjectionByType("cocoapods", "name", name, throws)) { + return false; + } + if (StringPrototypeIncludes(name, "+")) { + if (throws) { + throw new PurlError( + 'cocoapods "name" component cannot contain a plus (+) character' + ); + } + return false; + } + if (StringPrototypeCharCodeAt(name, 0) === 46) { + if (throws) { + throw new PurlError( + 'cocoapods "name" component cannot begin with a period' + ); + } + return false; + } + return true; +} + +// src/purl-types/composer.ts +function normalize6(purl) { + lowerNamespace(purl); + lowerName(purl); + return purl; +} + +// src/purl-types/conan.ts +function validate5(purl, throws) { + if (isNullishOrEmptyString(purl.namespace)) { + if (purl.qualifiers?.["channel"]) { + if (throws) { + throw new PurlError( + 'conan requires a "namespace" component when a "channel" qualifier is present' + ); + } + return false; + } + } else if (isNullishOrEmptyString(purl.qualifiers)) { + if (throws) { + throw new PurlError( + 'conan requires a "qualifiers" component when a namespace is present' + ); + } + return false; + } + if (!validateNoInjectionByType("conan", "namespace", purl.namespace, throws)) { + return false; + } + if (!validateNoInjectionByType("conan", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-types/conda.ts +function normalize7(purl) { + lowerName(purl); + return purl; +} +function validate6(purl, throws) { + if (!validateEmptyByType("conda", "namespace", purl.namespace, { + throws + })) { + return false; + } + if (!validateNoInjectionByType("conda", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-types/cpan.ts +function validate7(purl, throws) { + const { namespace } = purl; + if (namespace && namespace !== StringPrototypeToUpperCase(namespace)) { + if (throws) { + throw new PurlError('cpan "namespace" component must be UPPERCASE'); + } + return false; + } + if (!validateNoInjectionByType("cpan", "namespace", namespace, throws)) { + return false; + } + if (!validateNoInjectionByType("cpan", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-types/cran.ts +function validate8(purl, throws) { + if (!validateRequiredByType("cran", "version", purl.version, { + throws + })) { + return false; + } + if (!validateNoInjectionByType("cran", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-types/deb.ts +function normalize8(purl) { + lowerNamespace(purl); + lowerName(purl); + return purl; +} + +// src/purl-types/docker.ts +function normalize9(purl) { + lowerName(purl); + return purl; +} +function validate9(purl, throws) { + if (!validateNoInjectionByType("docker", "namespace", purl.namespace, throws)) { + return false; + } + if (!validateNoInjectionByType("docker", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-types/gem.ts +function validate10(purl, throws) { + if (!validateEmptyByType("gem", "namespace", purl.namespace, { + throws + })) { + return false; + } + if (!validateNoInjectionByType("gem", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-types/generic.ts +function normalize10(purl) { + return purl; +} + +// src/purl-types/github.ts +function normalize11(purl) { + lowerNamespace(purl); + lowerName(purl); + return purl; +} +function validate11(purl, throws) { + if (!validateNoInjectionByType("github", "namespace", purl.namespace, throws)) { + return false; + } + if (!validateNoInjectionByType("github", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-types/gitlab.ts +function normalize12(purl) { + lowerNamespace(purl); + lowerName(purl); + return purl; +} +function validate12(purl, throws) { + if (!validateNoInjectionByType("gitlab", "namespace", purl.namespace, throws)) { + return false; + } + if (!validateNoInjectionByType("gitlab", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-types/golang.ts +function validate13(purl, throws) { + if (!validateNoInjectionByType("golang", "namespace", purl.namespace, throws)) { + return false; + } + if (!validateNoInjectionByType("golang", "name", purl.name, throws)) { + return false; + } + const { version } = purl; + const length = typeof version === "string" ? version.length : 0; + if (length && StringPrototypeCharCodeAt(version, 0) === 118 && !isSemverString(StringPrototypeSlice(version, 1))) { + if (throws) { + throw new PurlError( + 'golang "version" component starting with a "v" must be followed by a valid semver version' + ); + } + return false; + } + return true; +} + +// src/purl-types/hex.ts +function normalize13(purl) { + lowerNamespace(purl); + lowerName(purl); + return purl; +} +function validate14(purl, throws) { + if (!validateNoInjectionByType("hex", "namespace", purl.namespace, throws)) { + return false; + } + if (!validateNoInjectionByType("hex", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-types/huggingface.ts +function normalize14(purl) { + lowerVersion(purl); + return purl; +} + +// src/purl-types/julia.ts +function normalize15(purl) { + return purl; +} +function validate15(purl, throws) { + if (!validateEmptyByType("julia", "namespace", purl.namespace, { + throws + })) { + return false; + } + if (!validateNoInjectionByType("julia", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-types/luarocks.ts +function normalize16(purl) { + lowerVersion(purl); + return purl; +} + +// src/purl-types/maven.ts +function validate16(purl, throws) { + if (!validateRequiredByType("maven", "namespace", purl.namespace, { + throws + })) { + return false; + } + if (!validateNoInjectionByType("maven", "namespace", purl.namespace, throws)) { + return false; + } + if (!validateNoInjectionByType("maven", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-types/mlflow.ts +function normalize17(purl) { + const repoUrl = purl.qualifiers?.["repository_url"]; + if (repoUrl !== void 0 && StringPrototypeIncludes(repoUrl, "databricks")) { + lowerName(purl); + } + return purl; +} +function validate17(purl, throws) { + if (!validateEmptyByType("mlflow", "namespace", purl.namespace, { + throws + })) { + return false; + } + if (!validateNoInjectionByType("mlflow", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-types/npm.ts +var getNpmBuiltinSet = /* @__PURE__ */ (() => { + let builtinSet; + return () => { + if (builtinSet === void 0) { + let builtinNames; + try { + builtinNames = module.constructor?.builtinModules; + } catch { + } + if (!builtinNames) { + builtinNames = [ + "assert", + "async_hooks", + "buffer", + "child_process", + "cluster", + "console", + "constants", + "crypto", + "dgram", + "diagnostics_channel", + "dns", + "domain", + "events", + "fs", + "http", + "http2", + "https", + "inspector", + "module", + "net", + "os", + "path", + "perf_hooks", + "process", + "punycode", + "querystring", + "readline", + "repl", + "stream", + "string_decoder", + "sys", + "timers", + "tls", + "trace_events", + "tty", + "url", + "util", + "v8", + "vm", + "wasi", + "worker_threads", + "zlib" + ]; + } + builtinSet = new SetCtor(builtinNames); + } + return builtinSet; + }; +})(); +function getNpmId(purl) { + const { name, namespace } = purl; + return `${namespace && namespace.length > 0 ? `${namespace}/` : ""}${name}`; +} +var getNpmLegacySet = /* @__PURE__ */ (() => { + let legacySet; + return () => { + if (legacySet === void 0) { + let fullLegacyNames; + try { + fullLegacyNames = require_legacy_names(); + } catch { + fullLegacyNames = [ + "assert", + "buffer", + "crypto", + "events", + "fs", + "http", + "os", + "path", + "url", + "util" + ]; + } + legacySet = new SetCtor(fullLegacyNames); + } + return legacySet; + }; +})(); +var isNpmBuiltinName = (id) => getNpmBuiltinSet().has(StringPrototypeToLowerCase(id)); +var isNpmLegacyName = (id) => getNpmLegacySet().has(id); +function normalize18(purl) { + lowerNamespace(purl); + if (!isNpmLegacyName(getNpmId(purl))) { + lowerName(purl); + } + return purl; +} +function parseNpmSpecifier(specifier) { + if (typeof specifier !== "string") { + throw new Error("npm package specifier string is required."); + } + if (isBlank(specifier)) { + throw new Error("npm package specifier cannot be empty."); + } + let namespace; + let name; + let version; + if (StringPrototypeStartsWith(specifier, "@")) { + const slashIndex = StringPrototypeIndexOf(specifier, "/"); + if (slashIndex === -1) { + throw new Error("Invalid scoped package specifier."); + } + const atIndex = StringPrototypeIndexOf(specifier, "@", slashIndex); + if (atIndex === -1) { + namespace = StringPrototypeSlice(specifier, 0, slashIndex); + name = StringPrototypeSlice(specifier, slashIndex + 1); + } else { + namespace = StringPrototypeSlice(specifier, 0, slashIndex); + name = StringPrototypeSlice(specifier, slashIndex + 1, atIndex); + version = StringPrototypeSlice(specifier, atIndex + 1); + } + } else { + const atIndex = StringPrototypeIndexOf(specifier, "@"); + if (atIndex === -1) { + name = specifier; + } else { + name = StringPrototypeSlice(specifier, 0, atIndex); + version = StringPrototypeSlice(specifier, atIndex + 1); + } + } + if (version) { + version = StringPrototypeReplace(version, /^[\^~>=<]+/, ""); + const spaceIndex = StringPrototypeIndexOf(version, " "); + if (spaceIndex !== -1) { + version = StringPrototypeSlice(version, 0, spaceIndex); + } + } + return { namespace, name, version }; +} +function validate18(purl, throws) { + const { name, namespace } = purl; + if (!validateNoInjectionByType("npm", "name", name, throws)) { + return false; + } + if (!validateNoInjectionByType("npm", "namespace", namespace, throws)) { + return false; + } + const hasNs = namespace && namespace.length > 0; + const id = getNpmId(purl); + const code0 = StringPrototypeCharCodeAt(id, 0); + const compName = hasNs ? "namespace" : "name"; + if (code0 === 46) { + if (throws) { + throw new PurlError( + `npm "${compName}" component cannot start with a period` + ); + } + return false; + } + if (code0 === 95) { + if (throws) { + throw new PurlError( + `npm "${compName}" component cannot start with an underscore` + ); + } + return false; + } + if (StringPrototypeTrim(name) !== name) { + if (throws) { + throw new PurlError( + 'npm "name" component cannot contain leading or trailing spaces' + ); + } + return false; + } + if (encodeComponent(name) !== name) { + if (throws) { + throw new PurlError( + `npm "name" component can only contain URL-friendly characters` + ); + } + return false; + } + if (hasNs) { + if ((namespace !== void 0 ? StringPrototypeTrim(namespace) : namespace) !== namespace) { + if (throws) { + throw new PurlError( + 'npm "namespace" component cannot contain leading or trailing spaces' + ); + } + return false; + } + if (code0 !== 64) { + if (throws) { + throw new PurlError( + `npm "namespace" component must start with an "@" character` + ); + } + return false; + } + const namespaceWithoutAtSign = namespace !== void 0 ? StringPrototypeSlice(namespace, 1) : namespace; + if (encodeComponent(namespaceWithoutAtSign) !== namespaceWithoutAtSign) { + if (throws) { + throw new PurlError( + `npm "namespace" component can only contain URL-friendly characters` + ); + } + return false; + } + } + const loweredId = StringPrototypeToLowerCase(id); + if (loweredId === "node_modules" || loweredId === "favicon.ico") { + if (throws) { + throw new PurlError( + `npm "${compName}" component of "${loweredId}" is not allowed` + ); + } + return false; + } + if (!isNpmLegacyName(id)) { + if (id.length > 214) { + if (throws) { + throw new PurlError( + `npm "namespace" and "name" components can not collectively be more than 214 characters` + ); + } + return false; + } + if (loweredId !== id) { + if (throws) { + throw new PurlError( + `npm "name" component can not contain capital letters` + ); + } + return false; + } + if (RegExpPrototypeTest(/[~'!()*]/, name)) { + if (throws) { + throw new PurlError( + `npm "name" component can not contain special characters ("~'!()*")` + ); + } + return false; + } + if (isNpmBuiltinName(id)) { + if (throws) { + throw new PurlError( + 'npm "name" component can not be a core module name' + ); + } + return false; + } + } + return true; +} + +// src/purl-types/nuget.ts +function validate19(purl, throws) { + if (!validateEmptyByType("nuget", "namespace", purl.namespace, { + throws + })) { + return false; + } + if (!validateNoInjectionByType("nuget", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-types/oci.ts +function normalize19(purl) { + lowerName(purl); + lowerVersion(purl); + return purl; +} +function validate20(purl, throws) { + if (!validateEmptyByType("oci", "namespace", purl.namespace, { + throws + })) { + return false; + } + if (!validateNoInjectionByType("oci", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-types/opam.ts +function validate21(purl, throws) { + if (!validateEmptyByType("opam", "namespace", purl.namespace, { + throws + })) { + return false; + } + if (!validateNoInjectionByType("opam", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-types/otp.ts +function normalize20(purl) { + lowerName(purl); + return purl; +} +function validate22(purl, throws) { + if (!validateEmptyByType("otp", "namespace", purl.namespace, { + throws + })) { + return false; + } + if (!validateNoInjectionByType("otp", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-types/pub.ts +function normalize21(purl) { + lowerName(purl); + purl.name = replaceDashesWithUnderscores(purl.name); + return purl; +} +function validate23(purl, throws) { + const { name } = purl; + for (let i = 0, { length } = name; i < length; i += 1) { + const code = StringPrototypeCharCodeAt(name, i); + if (!// 0-9 + (code >= 48 && code <= 57 || // a-z + code >= 97 && code <= 122 || code === 95)) { + if (throws) { + throw new PurlError( + 'pub "name" component may only contain [a-z0-9_] characters' + ); + } + return false; + } + } + return true; +} + +// src/purl-types/pypi.ts +function normalize22(purl) { + lowerNamespace(purl); + lowerName(purl); + lowerVersion(purl); + purl.name = replaceUnderscoresWithDashes(purl.name); + return purl; +} +function validate24(purl, throws) { + if (!validateNoInjectionByType("pypi", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-types/qpkg.ts +function normalize23(purl) { + lowerNamespace(purl); + return purl; +} + +// src/purl-types/rpm.ts +function normalize24(purl) { + lowerNamespace(purl); + return purl; +} + +// src/purl-types/socket.ts +function normalize25(purl) { + return purl; +} + +// src/purl-types/swid.ts +var GUID_PATTERN = ObjectFreeze( + /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i +); +function validate25(purl, throws) { + const { qualifiers } = purl; + const tagId = qualifiers?.["tag_id"]; + if (!tagId) { + if (throws) { + throw new PurlError('swid requires a "tag_id" qualifier'); + } + return false; + } + const tagIdStr = StringPrototypeTrim(String(tagId)); + if (tagIdStr.length === 0) { + if (throws) { + throw new PurlError('swid "tag_id" qualifier must not be empty'); + } + return false; + } + if (RegExpPrototypeTest(GUID_PATTERN, tagIdStr)) { + if (tagIdStr !== StringPrototypeToLowerCase(tagIdStr)) { + if (throws) { + throw new PurlError( + 'swid "tag_id" qualifier must be lowercase when it is a GUID' + ); + } + return false; + } + } + if (!validateNoInjectionByType("swid", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-types/swift.ts +function validate26(purl, throws) { + if (!validateRequiredByType("swift", "namespace", purl.namespace, { + throws + })) { + return false; + } + if (!validateRequiredByType("swift", "version", purl.version, { throws })) { + return false; + } + if (!validateNoInjectionByType("swift", "namespace", purl.namespace, throws)) { + return false; + } + if (!validateNoInjectionByType("swift", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-types/unknown.ts +function normalize26(purl) { + return purl; +} + +// src/purl-types/vscode-extension.ts +function normalize27(purl) { + lowerNamespace(purl); + lowerName(purl); + lowerVersion(purl); + return purl; +} +function validate27(purl, throws) { + const { name, namespace, version, qualifiers } = purl; + if (!validateRequiredByType("vscode-extension", "namespace", namespace, { + throws + })) { + return false; + } + if (!validateNoInjectionByType( + "vscode-extension", + "namespace", + namespace, + throws + )) { + return false; + } + if (!validateNoInjectionByType("vscode-extension", "name", name, throws)) { + return false; + } + if (typeof version === "string" && version.length > 0 && !isSemverString(version)) { + if (throws) { + throw new PurlError( + 'vscode-extension "version" component must be a valid semver version' + ); + } + return false; + } + if (!validateNoInjectionByType( + "vscode-extension", + "platform", + qualifiers?.["platform"], + throws + )) { + return false; + } + return true; +} + +// src/purl-types/yocto.ts +function normalize28(purl) { + lowerName(purl); + return purl; +} +function validate28(purl, throws) { + if (!validateEmptyByType("yocto", "namespace", purl.namespace, { + throws + })) { + return false; + } + if (!validateNoInjectionByType("yocto", "name", purl.name, throws)) { + return false; + } + return true; +} + +// src/purl-type.ts +var PurlTypNormalizer = (purl) => purl; +function PurlTypeValidator(purl, throws) { + const type = purl.type ?? "unknown"; + if (typeof purl.namespace === "string") { + const nsCode = findInjectionCharCode(purl.namespace); + if (nsCode !== -1) { + if (throws) { + throw new PurlInjectionError( + type, + "namespace", + nsCode, + formatInjectionChar(nsCode) + ); + } + return false; + } + } + const nameCode = findInjectionCharCode(purl.name); + if (nameCode !== -1) { + if (throws) { + throw new PurlInjectionError( + type, + "name", + nameCode, + formatInjectionChar(nameCode) + ); + } + return false; + } + return true; +} +var PurlType = createHelpersNamespaceObject( + { + normalize: { + alpm: normalize, + apk: normalize2, + bazel: normalize3, + bitbucket: normalize4, + bitnami: normalize5, + composer: normalize6, + conda: normalize7, + deb: normalize8, + docker: normalize9, + generic: normalize10, + github: normalize11, + gitlab: normalize12, + hex: normalize13, + huggingface: normalize14, + julia: normalize15, + luarocks: normalize16, + mlflow: normalize17, + npm: normalize18, + oci: normalize19, + otp: normalize20, + pub: normalize21, + pypi: normalize22, + qpkg: normalize23, + rpm: normalize24, + socket: normalize25, + unknown: normalize26, + "vscode-extension": normalize27, + yocto: normalize28 + }, + validate: { + bazel: validate, + bitbucket: validate2, + cargo: validate3, + cocoapods: validate4, + conda: validate6, + conan: validate5, + cpan: validate7, + cran: validate8, + docker: validate9, + gem: validate10, + github: validate11, + gitlab: validate12, + golang: validate13, + hex: validate14, + julia: validate15, + maven: validate16, + mlflow: validate17, + npm: validate18, + nuget: validate19, + oci: validate20, + opam: validate21, + otp: validate22, + pub: validate23, + pypi: validate24, + swift: validate26, + swid: validate25, + "vscode-extension": validate27, + yocto: validate28 + } + }, + { + normalize: PurlTypNormalizer, + validate: PurlTypeValidator + } +); + +// src/result.ts +var Ok = class _Ok { + kind = "ok"; + value; + constructor(value) { + this.value = value; + } + /** + * Chain another result-returning operation. + */ + andThen(fn) { + return fn(this.value); + } + /** + * Check if this result is an error. + */ + isErr() { + return false; + } + /** + * Check if this result is successful. + */ + isOk() { + return true; + } + /** + * Transform the success value. + */ + map(fn) { + return new _Ok(fn(this.value)); + } + /** + * Transform the error (no-op for Ok). + */ + mapErr(_fn) { + return this; + } + /** + * Return this result or the other if error (no-op for Ok). + */ + orElse(_fn) { + return this; + } + /** + * Get the success value or throw if error. + */ + unwrap() { + return this.value; + } + /** + * Get the success value or return default if error. + */ + unwrapOr(_defaultValue) { + return this.value; + } + /** + * Get the success value or compute from error if error. + */ + unwrapOrElse(_fn) { + return this.value; + } +}; +var Err = class _Err { + kind = "err"; + error; + constructor(error) { + this.error = error; + } + /** + * Chain another result-returning operation (no-op for Err). + */ + andThen(_fn) { + return this; + } + /** + * Check if this result is an error. + */ + isErr() { + return true; + } + /** + * Check if this result is successful. + */ + isOk() { + return false; + } + /** + * Transform the success value (no-op for Err). + */ + map(_fn) { + return this; + } + /** + * Transform the error. + */ + mapErr(fn) { + return new _Err(fn(this.error)); + } + /** + * Return this result or the other if error. + */ + orElse(fn) { + return fn(this.error); + } + /** + * Get the success value or throw if error. + */ + unwrap() { + if (this.error instanceof Error) { + throw this.error; + } + throw new Error(String(this.error)); + } + /** + * Get the success value or return default if error. + */ + unwrapOr(defaultValue) { + return defaultValue; + } + /** + * Get the success value or compute from error if error. + */ + unwrapOrElse(fn) { + return fn(this.error); + } +}; +function ok(value) { + return new Ok(value); +} +function err(error) { + return new Err(error); +} +var ResultUtils = { + /** + * Convert all Results to Ok values or return first error. + */ + all(results) { + const values = []; + for (let i = 0; i < results.length; i++) { + const result = results[i]; + if (result.isErr()) { + return result; + } + ArrayPrototypePush(values, result.value); + } + return ok(values); + }, + /** + * Return the first Ok result or the last error. + * Returns an error result if the input array is empty. + */ + any(results) { + let lastError = err( + new Error("No results provided") + ); + for (const result of results) { + if (result.isOk()) { + return result; + } + lastError = result; + } + return lastError; + }, + /** + * Create an error result. + */ + err, + /** + * Wrap a function that might throw into a Result. + */ + from(fn) { + try { + return ok(fn()); + } catch (e) { + return err(e instanceof Error ? e : new Error(String(e))); + } + }, + /** + * Create a successful result. + */ + ok +}; + +// src/stringify.ts +function stringifySpec(purl) { + const { + name, + namespace, + qualifiers, + subpath, + version + } = purl; + let specStr = ""; + if (isNonEmptyString(namespace)) { + specStr = `${encodeNamespace(namespace)}/`; + } + specStr = `${specStr}${encodeName(name)}`; + if (isNonEmptyString(version)) { + specStr = `${specStr}@${encodeVersion(version)}`; + } + if (qualifiers) { + specStr = `${specStr}?${encodeQualifiers(qualifiers)}`; + } + if (isNonEmptyString(subpath)) { + specStr = `${specStr}#${encodeSubpath(subpath)}`; + } + return specStr; +} +function stringify(purl) { + const type = isNonEmptyString(purl.type) ? encodeComponent(purl.type) : ""; + return `pkg:${type}/${stringifySpec(purl)}`; +} + +// src/url-converter.ts +var _PackageURL2; +function _registerPackageURLForUrlConverter(ctor) { + _PackageURL2 = ctor; +} +function filterSegments(pathname) { + return ArrayPrototypeFilter( + StringPrototypeSplit(pathname, "/"), + (s) => s.length > 0 + ); +} +function tryCreatePurl(type, namespace, name, version) { + if (!_PackageURL2) { + return void 0; + } + try { + return new _PackageURL2(type, namespace, name, version, void 0, void 0); + } catch { + return void 0; + } +} +function parseNpmRegistry(url) { + const segments = filterSegments(url.pathname); + if (segments.length === 0) { + return void 0; + } + let namespace; + let name; + let version; + if (segments[0] && StringPrototypeStartsWith(segments[0], "@")) { + namespace = segments[0]; + name = segments[1]; + if (!name) { + return void 0; + } + if (segments[2] === "-" && segments[3]) { + const tgz = segments[3]; + if (StringPrototypeEndsWith(tgz, ".tgz")) { + const withoutExt = StringPrototypeSlice(tgz, 0, -4); + const prefix = `${name}-`; + if (StringPrototypeStartsWith(withoutExt, prefix)) { + version = StringPrototypeSlice(withoutExt, prefix.length); + } + } + } else if (segments[2]) { + version = segments[2]; + } + } else { + name = segments[0]; + if (!name) { + return void 0; + } + if (segments[1] === "-" && segments[2]) { + const tgz = segments[2]; + if (StringPrototypeEndsWith(tgz, ".tgz")) { + const withoutExt = StringPrototypeSlice(tgz, 0, -4); + const prefix = `${name}-`; + if (StringPrototypeStartsWith(withoutExt, prefix)) { + version = StringPrototypeSlice(withoutExt, prefix.length); + } + } + } else if (segments[1]) { + version = segments[1]; + } + } + return tryCreatePurl("npm", namespace, name, version); +} +function parseNpmWebsite(url) { + const segments = filterSegments(url.pathname); + if (segments.length === 0 || segments[0] !== "package") { + return void 0; + } + let namespace; + let name; + let version; + if (segments[1] && StringPrototypeStartsWith(segments[1], "@")) { + namespace = segments[1]; + name = segments[2]; + if (!name) { + return void 0; + } + if (segments[3] === "v" && segments[4]) { + version = segments[4]; + } + } else { + name = segments[1]; + if (!name) { + return void 0; + } + if (segments[2] === "v" && segments[3]) { + version = segments[3]; + } + } + return tryCreatePurl("npm", namespace, name, version); +} +function parsePypi(url) { + const segments = filterSegments(url.pathname); + if (segments.length < 2 || segments[0] !== "project") { + return void 0; + } + const name = segments[1]; + if (!name) { + return void 0; + } + const version = segments[2]; + return tryCreatePurl("pypi", void 0, name, version); +} +function parseMaven(url) { + const segments = filterSegments(url.pathname); + if (segments.length < 4 || segments[0] !== "maven2") { + return void 0; + } + const parts = ArrayPrototypeSlice(segments, 1); + if (parts.length < 3) { + return void 0; + } + const version = parts[parts.length - 1]; + const name = parts[parts.length - 2]; + const groupParts = ArrayPrototypeSlice(parts, 0, -2); + const namespace = ArrayPrototypeJoin(groupParts, "."); + if (!namespace || !name) { + return void 0; + } + return tryCreatePurl("maven", namespace, name, version); +} +function parseGem(url) { + const segments = filterSegments(url.pathname); + if (segments.length < 2 || segments[0] !== "gems") { + return void 0; + } + const name = segments[1]; + if (!name) { + return void 0; + } + let version; + if (segments[2] === "versions" && segments[3]) { + version = segments[3]; + } + return tryCreatePurl("gem", void 0, name, version); +} +function parseCargo(url) { + const segments = filterSegments(url.pathname); + if (segments.length < 2) { + return void 0; + } + if (segments[0] === "api" && segments[1] === "v1" && segments[2] === "crates" && segments[3]) { + const name2 = segments[3]; + const version2 = segments[4]; + return tryCreatePurl("cargo", void 0, name2, version2); + } + if (segments[0] !== "crates") { + return void 0; + } + const name = segments[1]; + if (!name) { + return void 0; + } + const version = segments[2]; + return tryCreatePurl("cargo", void 0, name, version); +} +function parseNuget(url) { + const segments = filterSegments(url.pathname); + if (segments.length < 2) { + return void 0; + } + if (url.hostname === "api.nuget.org") { + if (segments[0] !== "v3-flatcontainer" || !segments[1]) { + return void 0; + } + const name2 = segments[1]; + const version2 = segments[2]; + return tryCreatePurl("nuget", void 0, name2, version2); + } + if (segments[0] !== "packages") { + return void 0; + } + const name = segments[1]; + if (!name) { + return void 0; + } + const version = segments[2]; + return tryCreatePurl("nuget", void 0, name, version); +} +function parseGitHub(url) { + const segments = filterSegments(url.pathname); + if (segments.length < 2) { + return void 0; + } + const namespace = segments[0]; + const name = segments[1]; + let version; + if (segments[2] === "tree" && segments[3]) { + version = segments[3]; + } else if (segments[2] === "commit" && segments[3]) { + version = segments[3]; + } else if (segments[2] === "releases" && segments[3] === "tag" && segments[4]) { + version = segments[4]; + } + return tryCreatePurl("github", namespace, name, version); +} +function parseGolang(url) { + let path = StringPrototypeSlice(url.pathname, 1); + if (!path) { + return void 0; + } + let version; + const atIndex = StringPrototypeLastIndexOf(path, "@"); + if (atIndex !== -1) { + version = StringPrototypeSlice(path, atIndex + 1); + path = StringPrototypeSlice(path, 0, atIndex); + } + const lastSlash = StringPrototypeLastIndexOf(path, "/"); + if (lastSlash === -1) { + return void 0; + } + const namespace = StringPrototypeSlice(path, 0, lastSlash); + const name = StringPrototypeSlice(path, lastSlash + 1); + if (!namespace || !name) { + return void 0; + } + return tryCreatePurl("golang", namespace, name, version); +} +function parseGitlab(url) { + const segments = filterSegments(url.pathname); + if (segments.length < 2) { + return void 0; + } + const namespace = segments[0]; + const name = segments[1]; + let version; + if (segments[2] === "-") { + if (segments[3] === "tree" && segments[4]) { + version = segments[4]; + } else if (segments[3] === "commit" && segments[4]) { + version = segments[4]; + } else if (segments[3] === "tags" && segments[4]) { + version = segments[4]; + } + } + return tryCreatePurl("gitlab", namespace, name, version); +} +function parseBitbucket(url) { + const segments = filterSegments(url.pathname); + if (segments.length < 2) { + return void 0; + } + const namespace = segments[0]; + const name = segments[1]; + let version; + if (segments[2] === "commits" && segments[3]) { + version = segments[3]; + } else if (segments[2] === "src" && segments[3]) { + version = segments[3]; + } + return tryCreatePurl("bitbucket", namespace, name, version); +} +function parseComposer(url) { + const segments = filterSegments(url.pathname); + if (segments.length < 3 || segments[0] !== "packages") { + return void 0; + } + const namespace = segments[1]; + const name = segments[2]; + return tryCreatePurl("composer", namespace, name, void 0); +} +function parseHex(url) { + const segments = filterSegments(url.pathname); + if (segments.length < 2 || segments[0] !== "packages") { + return void 0; + } + const name = segments[1]; + const version = segments[2]; + return tryCreatePurl("hex", void 0, name, version); +} +function parsePub(url) { + const segments = filterSegments(url.pathname); + if (segments.length < 2 || segments[0] !== "packages") { + return void 0; + } + const name = segments[1]; + let version; + if (segments[2] === "versions" && segments[3]) { + version = segments[3]; + } + return tryCreatePurl("pub", void 0, name, version); +} +function parseDocker(url) { + const segments = filterSegments(url.pathname); + if (segments.length < 2) { + return void 0; + } + if (segments[0] === "_" && segments[1]) { + return tryCreatePurl("docker", "library", segments[1], void 0); + } + if (segments[0] === "r" && segments[1] && segments[2]) { + return tryCreatePurl("docker", segments[1], segments[2], void 0); + } + return void 0; +} +function parseCocoapods(url) { + const segments = filterSegments(url.pathname); + if (segments.length < 2 || segments[0] !== "pods") { + return void 0; + } + return tryCreatePurl("cocoapods", void 0, segments[1], void 0); +} +function parseHackage(url) { + const segments = filterSegments(url.pathname); + if (segments.length < 2 || segments[0] !== "package") { + return void 0; + } + const raw = segments[1]; + let splitIndex = -1; + for (let i = raw.length - 1; i >= 0; i -= 1) { + if (StringPrototypeCharCodeAt(raw, i) === 45) { + const next = StringPrototypeCharCodeAt(raw, i + 1); + if (next >= 48 && next <= 57) { + splitIndex = i; + break; + } + } + } + if (splitIndex === -1) { + return tryCreatePurl("hackage", void 0, raw, void 0); + } + const name = StringPrototypeSlice(raw, 0, splitIndex); + const version = StringPrototypeSlice(raw, splitIndex + 1); + return tryCreatePurl("hackage", void 0, name, version); +} +function parseCran(url) { + const segments = filterSegments(url.pathname); + if (segments.length >= 3 && segments[0] === "web" && segments[1] === "packages") { + return tryCreatePurl("cran", void 0, segments[2], void 0); + } + return void 0; +} +function parseConda(url) { + const segments = filterSegments(url.pathname); + if (segments.length < 2) { + return void 0; + } + const name = segments[1]; + const version = segments[2]; + return tryCreatePurl("conda", void 0, name, version); +} +function parseCpan(url) { + const segments = filterSegments(url.pathname); + if (segments.length < 2) { + return void 0; + } + if (segments[0] === "pod" || segments[0] === "dist") { + const name = ArrayPrototypeJoin(ArrayPrototypeSlice(segments, 1), "::"); + return tryCreatePurl("cpan", void 0, name, void 0); + } + return void 0; +} +var HUGGINGFACE_RESERVED = ObjectFreeze( + new SetCtor([ + "docs", + "spaces", + "datasets", + "tasks", + "blog", + "pricing", + "join", + "login", + "settings", + "api" + ]) +); +function parseHuggingface(url) { + const segments = filterSegments(url.pathname); + if (segments.length < 2) { + return void 0; + } + if (HUGGINGFACE_RESERVED.has(segments[0])) { + return void 0; + } + const namespace = segments[0]; + const name = segments[1]; + let version; + if (segments[2] === "tree" && segments[3]) { + version = segments[3]; + } else if (segments[2] === "commit" && segments[3]) { + version = segments[3]; + } + return tryCreatePurl("huggingface", namespace, name, version); +} +function parseLuarocks(url) { + const segments = filterSegments(url.pathname); + if (segments.length < 3 || segments[0] !== "modules") { + return void 0; + } + const namespace = segments[1]; + const name = segments[2]; + const version = segments[3]; + return tryCreatePurl("luarocks", namespace, name, version); +} +function parseSwift(url) { + const segments = filterSegments(url.pathname); + if (segments.length < 2) { + return void 0; + } + return tryCreatePurl("swift", segments[0], segments[1], void 0); +} +function parseVscodeMarketplace(url) { + const segments = filterSegments(url.pathname); + if (segments.length < 1 || segments[0] !== "items") { + return void 0; + } + const itemName = url.searchParams.get("itemName"); + if (!itemName) { + return void 0; + } + const dotIndex = StringPrototypeIndexOf(itemName, "."); + if (dotIndex === -1 || dotIndex === 0 || dotIndex === itemName.length - 1) { + return void 0; + } + const namespace = StringPrototypeSlice(itemName, 0, dotIndex); + const name = StringPrototypeSlice(itemName, dotIndex + 1); + return tryCreatePurl("vscode-extension", namespace, name, void 0); +} +function parseOpenVsx(url) { + const segments = filterSegments(url.pathname); + if (segments.length < 3 || segments[0] !== "extension") { + return void 0; + } + const namespace = segments[1]; + const name = segments[2]; + const version = segments[3]; + return tryCreatePurl("vscode-extension", namespace, name, version); +} +var FROM_URL_PARSERS = ObjectFreeze( + new MapCtor([ + // Package registries + ["registry.npmjs.org", parseNpmRegistry], + ["www.npmjs.com", parseNpmWebsite], + ["pypi.org", parsePypi], + ["repo1.maven.org", parseMaven], + ["central.maven.org", parseMaven], + ["rubygems.org", parseGem], + ["crates.io", parseCargo], + ["www.nuget.org", parseNuget], + ["api.nuget.org", parseNuget], + ["pkg.go.dev", parseGolang], + ["hex.pm", parseHex], + ["pub.dev", parsePub], + ["packagist.org", parseComposer], + ["hub.docker.com", parseDocker], + ["cocoapods.org", parseCocoapods], + ["hackage.haskell.org", parseHackage], + ["cran.r-project.org", parseCran], + ["anaconda.org", parseConda], + ["metacpan.org", parseCpan], + ["luarocks.org", parseLuarocks], + ["swiftpackageindex.com", parseSwift], + ["huggingface.co", parseHuggingface], + // VS Code extension marketplaces + ["marketplace.visualstudio.com", parseVscodeMarketplace], + ["open-vsx.org", parseOpenVsx], + // VCS hosts + ["github.com", parseGitHub], + ["gitlab.com", parseGitlab], + ["bitbucket.org", parseBitbucket] + ]) +); +var DOWNLOAD_URL_TYPES = ObjectFreeze( + new SetCtor([ + "cargo", + "composer", + "conda", + "gem", + "golang", + "hex", + "maven", + "npm", + "nuget", + "pub", + "pypi" + ]) +); +var REPOSITORY_URL_TYPES = ObjectFreeze( + new SetCtor([ + "bioconductor", + "bitbucket", + "cargo", + "chrome", + "clojars", + "cocoapods", + "composer", + "conan", + "conda", + "cpan", + "deno", + "docker", + "elm", + "gem", + "github", + "gitlab", + "golang", + "hackage", + "hex", + "homebrew", + "huggingface", + "luarocks", + "maven", + "npm", + "nuget", + "pub", + "pypi", + "swift", + "vscode" + ]) +); +var UrlConverter = class _UrlConverter { + /** + * Convert a URL string to a PackageURL if the URL is recognized. + * + * Dispatches to type-specific parsers based on the URL hostname. + * Returns undefined for unrecognized hosts, invalid URLs, or URLs + * without enough path information to construct a valid PackageURL. + * + * @example + * ```typescript + * UrlConverter.fromUrl('https://www.npmjs.com/package/lodash') + * // -> PackageURL for pkg:npm/lodash + * + * UrlConverter.fromUrl('https://github.com/lodash/lodash') + * // -> PackageURL for pkg:github/lodash/lodash + * ``` + */ + static fromUrl(urlStr) { + let url; + try { + url = new URLCtor(urlStr); + } catch { + return void 0; + } + const parser = FROM_URL_PARSERS.get(url.hostname); + if (!parser) { + return void 0; + } + return parser(url); + } + /** + * Check if a URL string is recognized for conversion to a PackageURL. + * + * Returns true if the URL's hostname has a registered parser, + * false for invalid URLs or unrecognized hosts. + */ + static supportsFromUrl(urlStr) { + let url; + try { + url = new URLCtor(urlStr); + } catch { + return false; + } + return FROM_URL_PARSERS.has(url.hostname); + } + /** + * Get all available URLs for a PackageURL. + * + * This convenience method returns both repository and download URLs + * in a single call, useful when you need to check all URL options. + */ + static getAllUrls(purl) { + return { + download: _UrlConverter.toDownloadUrl(purl), + repository: _UrlConverter.toRepositoryUrl(purl) + }; + } + /** + * Check if a PackageURL type supports download URL conversion. + * + * This method checks if the given package type has download URL + * conversion logic implemented. + */ + static supportsDownloadUrl(type) { + return DOWNLOAD_URL_TYPES.has(type); + } + /** + * Check if a PackageURL type supports repository URL conversion. + * + * This method checks if the given package type has repository URL + * conversion logic implemented. + */ + static supportsRepositoryUrl(type) { + return REPOSITORY_URL_TYPES.has(type); + } + /** + * Convert a PackageURL to a download URL if possible. + * + * This method attempts to generate a download URL where the package's + * artifact (binary, archive, etc.) can be obtained. Requires a version + * to be present in the PackageURL. + */ + static toDownloadUrl(purl) { + const { name, namespace, type, version } = purl; + if (!version) { + return void 0; + } + switch (type) { + case "npm": { + const npmName = namespace ? `${namespace}/${name}` : name; + return { + type: "tarball", + url: `https://registry.npmjs.org/${npmName}/-/${name}-${version}.tgz` + }; + } + case "pypi": + return { + type: "wheel", + url: `https://pypi.org/simple/${name}/` + }; + case "maven": { + if (!namespace) { + return void 0; + } + const groupPath = StringPrototypeReplace(namespace, /\./g, "/"); + return { + type: "jar", + url: `https://repo1.maven.org/maven2/${groupPath}/${name}/${version}/${name}-${version}.jar` + }; + } + case "gem": + return { + type: "gem", + url: `https://rubygems.org/downloads/${name}-${version}.gem` + }; + case "cargo": + return { + type: "tarball", + url: `https://crates.io/api/v1/crates/${name}/${version}/download` + }; + case "nuget": + return { + type: "zip", + url: `https://nuget.org/packages/${name}/${version}/download` + }; + case "composer": + if (!namespace) { + return void 0; + } + return { + type: "other", + url: `https://repo.packagist.org/p2/${namespace}/${name}.json` + }; + case "hex": + return { + type: "tarball", + url: `https://repo.hex.pm/tarballs/${name}-${version}.tar` + }; + case "pub": + return { + type: "tarball", + url: `https://pub.dev/packages/${name}/versions/${version}.tar.gz` + }; + case "conda": { + const channel = purl["qualifiers"]?.["channel"] ?? "conda-forge"; + return { + type: "tarball", + url: `https://anaconda.org/${channel}/${name}/${version}/download` + }; + } + case "golang": + if (!namespace) { + return void 0; + } + return { + type: "zip", + url: `https://proxy.golang.org/${namespace}/${name}/@v/${version}.zip` + }; + default: + return void 0; + } + } + /** + * Convert a PackageURL to a repository URL if possible. + * + * This method attempts to generate a repository URL where the package's + * source code can be found. Different package types use different URL + * patterns and repository hosting services. + */ + static toRepositoryUrl(purl) { + const { name, namespace, type } = purl; + const { version } = purl; + switch (type) { + case "bioconductor": + return { + type: "web", + url: `https://bioconductor.org/packages/${name}` + }; + case "bitbucket": + if (!namespace) { + return void 0; + } + return { + type: "git", + url: version ? `https://bitbucket.org/${namespace}/${name}/src/${version}` : `https://bitbucket.org/${namespace}/${name}` + }; + case "cargo": + return { + type: "web", + url: `https://crates.io/crates/${name}` + }; + case "chrome": + return { + type: "web", + url: `https://chromewebstore.google.com/detail/${name}` + }; + case "clojars": + return { + type: "web", + url: `https://clojars.org/${namespace ? `${namespace}/` : ""}${name}` + }; + case "cocoapods": + return { + type: "web", + url: `https://cocoapods.org/pods/${name}` + }; + case "composer": + return { + type: "web", + url: `https://packagist.org/packages/${namespace ? `${namespace}/` : ""}${name}` + }; + case "conan": + return { + type: "web", + url: `https://conan.io/center/recipes/${name}` + }; + case "conda": { + const channel = purl["qualifiers"]?.["channel"] ?? "conda-forge"; + return { + type: "web", + url: `https://anaconda.org/${channel}/${name}` + }; + } + case "cpan": + return { + type: "web", + url: `https://metacpan.org/${namespace ? `pod/${namespace}::` : "pod/"}${name}` + }; + case "deno": + return { + type: "web", + url: version ? `https://deno.land/x/${name}@${version}` : `https://deno.land/x/${name}` + }; + case "docker": { + const versionSuffix = version ? `?tab=tags&name=${version}` : ""; + if (!namespace || namespace === "library") { + return { + type: "web", + url: `https://hub.docker.com/_/${name}${versionSuffix}` + }; + } + return { + type: "web", + url: `https://hub.docker.com/r/${namespace}/${name}${versionSuffix}` + }; + } + case "elm": + if (!namespace) { + return void 0; + } + return { + type: "web", + url: version ? `https://package.elm-lang.org/packages/${namespace}/${name}/${version}` : `https://package.elm-lang.org/packages/${namespace}/${name}/latest` + }; + case "gem": + return { + type: "web", + url: `https://rubygems.org/gems/${name}` + }; + case "github": + if (!namespace) { + return void 0; + } + return { + type: "git", + url: version ? `https://github.com/${namespace}/${name}/tree/${version}` : `https://github.com/${namespace}/${name}` + }; + case "gitlab": + if (!namespace) { + return void 0; + } + return { + type: "git", + url: `https://gitlab.com/${namespace}/${name}` + }; + case "golang": + if (!namespace) { + return void 0; + } + return { + type: "web", + url: version ? `https://pkg.go.dev/${namespace}/${name}@${version}` : `https://pkg.go.dev/${namespace}/${name}` + }; + case "hackage": + return { + type: "web", + url: version ? `https://hackage.haskell.org/package/${name}-${version}` : `https://hackage.haskell.org/package/${name}` + }; + case "hex": + return { + type: "web", + url: `https://hex.pm/packages/${name}` + }; + case "homebrew": + return { + type: "web", + url: `https://formulae.brew.sh/formula/${name}` + }; + case "huggingface": + return { + type: "web", + url: `https://huggingface.co/${namespace ? `${namespace}/` : ""}${name}` + }; + case "luarocks": + return { + type: "web", + url: `https://luarocks.org/modules/${namespace ? `${namespace}/` : ""}${name}` + }; + case "maven": { + if (!namespace) { + return void 0; + } + return { + type: "web", + url: version ? `https://search.maven.org/artifact/${namespace}/${name}/${version}/jar` : `https://search.maven.org/artifact/${namespace}/${name}` + }; + } + case "npm": + return { + type: "web", + url: version ? `https://www.npmjs.com/package/${namespace ? `${namespace}/` : ""}${name}/v/${version}` : `https://www.npmjs.com/package/${namespace ? `${namespace}/` : ""}${name}` + }; + case "nuget": + return { + type: "web", + url: `https://nuget.org/packages/${name}/` + }; + case "pub": + return { + type: "web", + url: `https://pub.dev/packages/${name}` + }; + case "pypi": + return { + type: "web", + url: `https://pypi.org/project/${name}/` + }; + case "swift": + if (!namespace) { + return void 0; + } + return { + type: "git", + url: `https://github.com/${namespace}/${name}` + }; + case "vscode": + return { + type: "web", + url: `https://marketplace.visualstudio.com/items?itemName=${namespace ? `${namespace}.` : ""}${name}` + }; + default: + return void 0; + } + } +}; + +// src/package-url.ts +var FLYWEIGHT_CACHE_MAX = 1024; +var flyweightCache = new MapCtor(); +var OTHER_SCHEME_PATTERN = ObjectFreeze(/^[a-zA-Z][a-zA-Z0-9+.-]{0,255}:\/\//); +var PURL_LIKE_PATTERN = ObjectFreeze(/^[a-zA-Z0-9+.-]{1,256}\//); +var PackageURL = class _PackageURL3 { + static Component = recursiveFreeze(PurlComponent); + static KnownQualifierNames = recursiveFreeze(PurlQualifierNames); + static Type = recursiveFreeze(PurlType); + /** @internal Cached canonical string representation. */ + _cachedString; + name; + namespace; + qualifiers; + subpath; + type; + version; + constructor(rawType, rawNamespace, rawName, rawVersion, rawQualifiers, rawSubpath) { + const type = isNonEmptyString(rawType) ? normalizeType(rawType) : rawType; + validateType(type, true); + const namespace = isNonEmptyString(rawNamespace) ? normalizeNamespace(rawNamespace) : rawNamespace; + validateNamespace(namespace, true); + const name = isNonEmptyString(rawName) ? normalizeName(rawName) : rawName; + validateName(name, true); + const version = isNonEmptyString(rawVersion) ? normalizeVersion(rawVersion) : rawVersion; + validateVersion(version, true); + const qualifiers = typeof rawQualifiers === "string" || isObject(rawQualifiers) ? normalizeQualifiers(rawQualifiers) : rawQualifiers; + validateQualifiers(qualifiers, true); + const subpath = isNonEmptyString(rawSubpath) ? normalizeSubpath(rawSubpath) : rawSubpath; + validateSubpath(subpath, true); + this.type = type; + this.name = name; + if (namespace !== void 0) { + this.namespace = namespace; + } + if (version !== void 0) { + this.version = version; + } + this.qualifiers = qualifiers ?? void 0; + if (subpath !== void 0) { + this.subpath = subpath; + } + const typeHelpers = PurlType[type]; + if (typeHelpers) { + ; + typeHelpers?.["normalize"]?.(this); + typeHelpers?.["validate"]?.(this, true); + } + } + /** + * Convert PackageURL to object for JSONStringify compatibility. + */ + toJSON() { + return this.toObject(); + } + /** + * Convert PackageURL to JSON string representation. + */ + toJSONString() { + return JSONStringify(this.toObject()); + } + /** + * Convert PackageURL to a plain object representation. + */ + toObject() { + const result = { __proto__: null }; + if (this.type !== void 0) { + result.type = this.type; + } + if (this.namespace !== void 0) { + result.namespace = this.namespace; + } + if (this.name !== void 0) { + result.name = this.name; + } + if (this.version !== void 0) { + result.version = this.version; + } + if (this.qualifiers !== void 0) { + result.qualifiers = this.qualifiers; + } + if (this.subpath !== void 0) { + result.subpath = this.subpath; + } + return result; + } + /** + * Get the package specifier string without the scheme and type prefix. + * + * Returns `namespace/name@version?qualifiers#subpath` — the package identity + * without the `pkg:type/` prefix. + * + * @returns Spec string (e.g., '@babel/core@7.0.0' for pkg:npm/%40babel/core@7.0.0) + */ + toSpec() { + return stringifySpec(this); + } + toString() { + let cached = this._cachedString; + if (cached === void 0) { + cached = stringify(this); + this._cachedString = cached; + } + return cached; + } + /** + * Create a new PackageURL with a different version. + * Returns a new instance — the original is unchanged. + * + * @param version - New version string + * @returns New PackageURL with the updated version + */ + withVersion(version) { + return new _PackageURL3( + this.type, + this.namespace, + this.name, + version, + this.qualifiers, + this.subpath + ); + } + /** + * Create a new PackageURL with a different namespace. + * Returns a new instance — the original is unchanged. + * + * @param namespace - New namespace string + * @returns New PackageURL with the updated namespace + */ + withNamespace(namespace) { + return new _PackageURL3( + this.type, + namespace, + this.name, + this.version, + this.qualifiers, + this.subpath + ); + } + /** + * Create a new PackageURL with a single qualifier added or updated. + * Returns a new instance — the original is unchanged. + * + * @param key - Qualifier key + * @param value - Qualifier value + * @returns New PackageURL with the qualifier set + */ + withQualifier(key, value) { + return new _PackageURL3( + this.type, + this.namespace, + this.name, + this.version, + { + __proto__: null, + ...this.qualifiers, + [key]: value + }, + this.subpath + ); + } + /** + * Create a new PackageURL with all qualifiers replaced. + * Returns a new instance — the original is unchanged. + * + * @param qualifiers - New qualifiers object (or undefined to remove all) + * @returns New PackageURL with the updated qualifiers + */ + withQualifiers(qualifiers) { + return new _PackageURL3( + this.type, + this.namespace, + this.name, + this.version, + qualifiers, + this.subpath + ); + } + /** + * Create a new PackageURL with a different subpath. + * Returns a new instance — the original is unchanged. + * + * @param subpath - New subpath string + * @returns New PackageURL with the updated subpath + */ + withSubpath(subpath) { + return new _PackageURL3( + this.type, + this.namespace, + this.name, + this.version, + this.qualifiers, + subpath + ); + } + /** + * Compare this PackageURL with another for equality. + * + * Two PURLs are considered equal if their canonical string representations match. + * This comparison is case-sensitive after normalization. + * + * @param other - The PackageURL to compare with + * @returns true if the PURLs are equal, false otherwise + */ + equals(other) { + return equals(this, other); + } + /** + * Compare two PackageURLs for equality. + * + * Two PURLs are considered equal if their canonical string representations match. + * + * @param a - First PackageURL to compare + * @param b - Second PackageURL to compare + * @returns true if the PURLs are equal, false otherwise + */ + static equals(a, b) { + return equals(a, b); + } + /** + * Compare this PackageURL with another for sorting. + * + * Returns a number indicating sort order: + * - Negative if this comes before other + * - Zero if they are equal + * - Positive if this comes after other + * + * @param other - The PackageURL to compare with + * @returns -1, 0, or 1 for sort ordering + */ + compare(other) { + return compare(this, other); + } + /** + * Compare two PackageURLs for sorting. + * + * Compares PURLs using their canonical string representations. + * Returns a number indicating sort order: + * - Negative if a comes before b + * - Zero if they are equal + * - Positive if a comes after b + * + * @param a - First PackageURL to compare + * @param b - Second PackageURL to compare + * @returns -1, 0, or 1 for sort ordering + */ + static compare(a, b) { + return compare(a, b); + } + /** + * Create PackageURL from JSON string. + */ + static fromJSON(json) { + if (typeof json !== "string") { + throw new Error("JSON string argument is required."); + } + const MAX_JSON_SIZE = 1024 * 1024; + const byteSize = Buffer.byteLength(json, "utf8"); + if (byteSize > MAX_JSON_SIZE) { + throw new Error( + `JSON string exceeds maximum size limit of ${MAX_JSON_SIZE} bytes` + ); + } + let parsed; + try { + parsed = JSONParse(json); + } catch (e) { + throw new SyntaxError("Failed to parse PackageURL from JSON", { + cause: e + }); + } + if (!parsed || typeof parsed !== "object" || ArrayIsArray(parsed)) { + throw new Error("JSON must parse to an object."); + } + const parsedRecord = parsed; + const safeObject = { + __proto__: null, + type: parsedRecord["type"], + namespace: parsedRecord["namespace"], + name: parsedRecord["name"], + version: parsedRecord["version"], + qualifiers: parsedRecord["qualifiers"], + subpath: parsedRecord["subpath"] + }; + return _PackageURL3.fromObject(safeObject); + } + /** + * Create PackageURL from a plain object. + */ + static fromObject(obj) { + if (!isObject(obj)) { + throw new Error("Object argument is required."); + } + const typedObj = obj; + return new _PackageURL3( + typedObj["type"], + typedObj["namespace"], + typedObj["name"], + typedObj["version"], + typedObj["qualifiers"], + typedObj["subpath"] + ); + } + static fromString(purlStr) { + if (typeof purlStr === "string") { + const cached = flyweightCache.get(purlStr); + if (cached !== void 0) { + return cached; + } + } + const purl = new _PackageURL3(..._PackageURL3.parseString(purlStr)); + purl.toString(); + recursiveFreeze(purl); + if (typeof purlStr === "string") { + if (flyweightCache.size >= FLYWEIGHT_CACHE_MAX) { + const oldest = flyweightCache.keys().next().value; + if (oldest !== void 0) { + flyweightCache.delete(oldest); + } + } + flyweightCache.set(purlStr, purl); + } + return purl; + } + /** + * Create PackageURL from npm package specifier. + * + * Parses npm package specifiers and converts them to PackageURL format. + * Handles scoped packages, version ranges, and normalizes version strings. + * + * **Supported formats:** + * - Basic packages: `lodash`, `lodash@4.17.21` + * - Scoped packages: `@babel/core`, `@babel/core@7.0.0` + * - Version ranges: `^4.17.21`, `~1.2.3`, `>=1.0.0` (prefixes stripped) + * - Dist-tags: `latest`, `next`, `beta` (passed through as version) + * + * **Not supported:** + * - Git URLs: `git+https://...` (use PackageURL constructor directly) + * - File paths: `file:../package.tgz` + * - GitHub shortcuts: `user/repo#branch` + * - Aliases: `npm:package@version` + * + * **Note:** Dist-tags like `latest` are mutable and should be resolved to + * concrete versions for reproducible builds. This method passes them through + * as-is for convenience. + * + * @param specifier - npm package specifier (e.g., 'lodash@4.17.21', '@babel/core@^7.0.0') + * @returns PackageURL instance for the npm package + * @throws {Error} If specifier is not a string or is empty + * + * @example + * ```typescript + * // Basic packages + * PackageURL.fromNpm('lodash@4.17.21') + * // -> pkg:npm/lodash@4.17.21 + * + * // Scoped packages + * PackageURL.fromNpm('@babel/core@^7.0.0') + * // -> pkg:npm/%40babel/core@7.0.0 + * + * // Dist-tags (passed through) + * PackageURL.fromNpm('react@latest') + * // -> pkg:npm/react@latest + * + * // No version + * PackageURL.fromNpm('express') + * // -> pkg:npm/express + * ``` + */ + static fromNpm(specifier) { + const { name, namespace, version } = parseNpmSpecifier(specifier); + return new _PackageURL3("npm", namespace, name, version, void 0, void 0); + } + /** + * Create PackageURL from ecosystem-specific package specifier. + * + * This is a convenience wrapper that delegates to type-specific parsers. + * Each ecosystem has its own specifier format and parsing rules. + * + * **Supported types:** + * - `npm`: npm package specifiers (e.g., 'lodash@4.17.21', '@babel/core@^7.0.0') + * + * @param type - Package ecosystem type (e.g., 'npm', 'pypi', 'maven') + * @param specifier - Ecosystem-specific package specifier string + * @returns PackageURL instance for the package + * @throws {Error} If type is not supported or specifier is invalid + * + * @example + * ```typescript + * // npm packages + * PackageURL.fromSpec('npm', 'lodash@4.17.21') + * // -> pkg:npm/lodash@4.17.21 + * + * PackageURL.fromSpec('npm', '@babel/core@^7.0.0') + * // -> pkg:npm/%40babel/core@7.0.0 + * ``` + */ + static fromSpec(type, specifier) { + switch (type) { + case "npm": { + const { name, namespace, version } = parseNpmSpecifier(specifier); + return new _PackageURL3( + "npm", + namespace, + name, + version, + void 0, + void 0 + ); + } + default: + throw new Error( + `Unsupported package type: ${type}. Currently supported: npm` + ); + } + } + static parseString(purlStr) { + if (typeof purlStr !== "string") { + throw new Error("A purl string argument is required."); + } + if (isBlank(purlStr)) { + return [void 0, void 0, void 0, void 0, void 0, void 0]; + } + const MAX_PURL_LENGTH = 4096; + if (purlStr.length > MAX_PURL_LENGTH) { + throw new Error( + `Package URL exceeds maximum length of ${MAX_PURL_LENGTH} characters.` + ); + } + if (!StringPrototypeStartsWith(purlStr, "pkg:")) { + const hasOtherScheme = RegExpPrototypeTest(OTHER_SCHEME_PATTERN, purlStr); + const looksLikePurl = RegExpPrototypeTest(PURL_LIKE_PATTERN, purlStr); + if (!hasOtherScheme && looksLikePurl) { + return _PackageURL3.parseString(`pkg:${purlStr}`); + } + } + const colonIndex = StringPrototypeIndexOf(purlStr, ":"); + let url; + let hasAuth = false; + if (colonIndex !== -1) { + try { + const beforeColon = StringPrototypeSlice(purlStr, 0, colonIndex); + const afterColon = StringPrototypeSlice(purlStr, colonIndex + 1); + const trimmedAfterColon = trimLeadingSlashes(afterColon); + url = new URLCtor(`${beforeColon}:${trimmedAfterColon}`); + if (afterColon.length !== trimmedAfterColon.length) { + const authorityStart = StringPrototypeIndexOf(afterColon, "//") + 2; + const authorityEnd = StringPrototypeIndexOf( + afterColon, + "/", + authorityStart + ); + const authority = authorityEnd === -1 ? StringPrototypeSlice(afterColon, authorityStart) : StringPrototypeSlice(afterColon, authorityStart, authorityEnd); + hasAuth = StringPrototypeIncludes(authority, "@"); + } + } catch (e) { + throw new PurlError("failed to parse as URL", { + cause: e + }); + } + } + if (url?.protocol !== "pkg:") { + throw new PurlError('missing required "pkg" scheme component'); + } + if (hasAuth) { + throw new PurlError('cannot contain a "user:pass@host:port"'); + } + const { pathname } = url; + const firstSlashIndex = StringPrototypeIndexOf(pathname, "/"); + const rawType = decodePurlComponent( + "type", + firstSlashIndex === -1 ? pathname : StringPrototypeSlice(pathname, 0, firstSlashIndex) + ); + if (firstSlashIndex < 1) { + return [rawType, void 0, void 0, void 0, void 0, void 0]; + } + let rawVersion; + let atSignIndex = rawType === "npm" ? StringPrototypeIndexOf(pathname, "@", firstSlashIndex + 2) : StringPrototypeLastIndexOf(pathname, "@"); + if (atSignIndex > 0 && StringPrototypeCharCodeAt(pathname, atSignIndex - 1) === 47) { + atSignIndex = -1; + } + const beforeVersion = StringPrototypeSlice( + pathname, + rawType.length + 1, + atSignIndex === -1 ? pathname.length : atSignIndex + ); + if (atSignIndex !== -1) { + rawVersion = decodePurlComponent( + "version", + StringPrototypeSlice(pathname, atSignIndex + 1) + ); + } + let rawNamespace; + let rawName; + const lastSlashIndex = StringPrototypeLastIndexOf(beforeVersion, "/"); + if (lastSlashIndex === -1) { + rawName = decodePurlComponent("name", beforeVersion); + } else { + rawName = decodePurlComponent( + "name", + StringPrototypeSlice(beforeVersion, lastSlashIndex + 1) + ); + rawNamespace = decodePurlComponent( + "namespace", + StringPrototypeSlice(beforeVersion, 0, lastSlashIndex) + ); + } + let rawQualifiers; + if (url.searchParams.size !== 0) { + const search = StringPrototypeSlice(url.search, 1); + const searchParams = new URLSearchParamsCtor(); + const entries = StringPrototypeSplit(search, "&"); + for (let i = 0, { length } = entries; i < length; i += 1) { + const pairs = StringPrototypeSplit(entries[i], "="); + if (pairs) { + const key = pairs[0]; + if (key.length === 0) { + throw new PurlError("qualifier key must not be empty"); + } + const value = decodePurlComponent( + "qualifiers", + ArrayPrototypeAt(pairs, 1) ?? "" + ); + searchParams.append( + key, + value + ); + } + } + rawQualifiers = searchParams; + } + let rawSubpath; + const { hash } = url; + if (hash.length !== 0) { + rawSubpath = decodePurlComponent("subpath", StringPrototypeSlice(hash, 1)); + } + return [ + rawType, + rawNamespace, + rawName, + rawVersion, + rawQualifiers, + rawSubpath + ]; + } + /** + * Check if a string is a valid PURL without throwing. + * + * @param purlStr - String to validate + * @returns true if the string is a valid PURL + * + * @example + * ```typescript + * PackageURL.isValid('pkg:npm/lodash@4.17.21') // true + * PackageURL.isValid('not a purl') // false + * ``` + */ + static isValid(purlStr) { + return _PackageURL3.tryFromString(purlStr).isOk(); + } + /** + * Create PackageURL from a registry or repository URL. + * + * Convenience wrapper for UrlConverter.fromUrl(). Supports 27 hostnames + * across 17 package types including npm, pypi, maven, github, and more. + * + * @param urlStr - Registry or repository URL + * @returns PackageURL instance or undefined if URL is not recognized + * + * @example + * ```typescript + * PackageURL.fromUrl('https://www.npmjs.com/package/lodash') + * // -> pkg:npm/lodash + * + * PackageURL.fromUrl('https://github.com/lodash/lodash') + * // -> pkg:github/lodash/lodash + * ``` + */ + static fromUrl(urlStr) { + return UrlConverter.fromUrl(urlStr); + } + static tryFromJSON(json) { + return ResultUtils.from(() => _PackageURL3.fromJSON(json)); + } + static tryFromObject(obj) { + return ResultUtils.from(() => _PackageURL3.fromObject(obj)); + } + static tryFromString(purlStr) { + return ResultUtils.from(() => _PackageURL3.fromString(purlStr)); + } + static tryParseString(purlStr) { + return ResultUtils.from(() => _PackageURL3.parseString(purlStr)); + } +}; +for (const staticProp of ["Component", "KnownQualifierNames", "Type"]) { + ReflectDefineProperty(PackageURL, staticProp, { + ...ReflectGetOwnPropertyDescriptor(PackageURL, staticProp), + writable: false + }); +} +ReflectSetPrototypeOf(PackageURL.prototype, null); +_registerPackageURL(PackageURL); +_registerPackageURLForUrlConverter(PackageURL); + +// src/package-url-builder.ts +var PurlBuilder = class _PurlBuilder { + /** The package type (e.g., 'npm', 'pypi', 'maven'). */ + _type; + /** The package namespace (organization, group, or scope). */ + _namespace; + /** The package name (required for valid PackageURLs). */ + _name; + /** The package version string. */ + _version; + /** Key-value pairs of additional package qualifiers. */ + _qualifiers; + /** Optional subpath within the package. */ + _subpath; + /** + * Build and return the final PackageURL instance. + * + * This method creates a new PackageURL instance using all the properties + * set on this builder. The PackageURL constructor will handle validation + * and normalization of the provided values. + * + * @throws {Error} If the configuration results in an invalid PackageURL + */ + build() { + return new PackageURL( + this._type, + this._namespace, + this._name, + this._version, + this._qualifiers, + this._subpath + ); + } + /** + * Set the package name for the PackageURL. + * + * This is the core identifier for the package and is required for all valid + * PackageURLs. The name should be the canonical package name as it appears + * in the package repository. + */ + name(name) { + this._name = name; + return this; + } + /** + * Set the package namespace for the PackageURL. + * + * The namespace represents different concepts depending on the package type: + * - npm: organization or scope (e.g., '@angular' for '@angular/core') + * - maven: groupId (e.g., 'org.apache.commons') + * - pypi: typically unused + */ + namespace(namespace) { + this._namespace = namespace; + return this; + } + /** + * Add a single qualifier key-value pair. + * + * This method allows adding qualifiers incrementally. If the qualifier key + * already exists, its value will be overwritten. + */ + qualifier(key, value) { + if (!this._qualifiers) { + this._qualifiers = { __proto__: null }; + } + this._qualifiers[key] = value; + return this; + } + /** + * Set all qualifiers at once, replacing any existing qualifiers. + * + * Qualifiers provide additional metadata about the package such as: + * - arch: target architecture + * - os: target operating system + * - classifier: additional classifier for the package + */ + qualifiers(qualifiers) { + this._qualifiers = { __proto__: null, ...qualifiers }; + return this; + } + /** + * Set the subpath for the PackageURL. + * + * The subpath represents a path within the package, useful for referencing + * specific files or directories within a package. It should not start with + * a forward slash. + */ + subpath(subpath) { + this._subpath = subpath; + return this; + } + /** + * Set the package type for the PackageURL. + */ + type(type) { + this._type = type; + return this; + } + /** + * Set the package version for the PackageURL. + * + * The version string should match the format used by the package repository. + * Some package types may normalize version formats (e.g., removing leading 'v'). + */ + version(version) { + this._version = version; + return this; + } + /** + * Create a builder with the bitbucket package type preset. + * + * @example `PurlBuilder.bitbucket().namespace('owner').name('repo').build()` + */ + static bitbucket() { + return new _PurlBuilder().type("bitbucket"); + } + /** + * Create a builder with the cargo package type preset. + * + * @example `PurlBuilder.cargo().name('serde').version('1.0.0').build()` + */ + static cargo() { + return new _PurlBuilder().type("cargo"); + } + /** + * Create a builder with the cocoapods package type preset. + * + * @example `PurlBuilder.cocoapods().name('Alamofire').version('5.9.1').build()` + */ + static cocoapods() { + return new _PurlBuilder().type("cocoapods"); + } + /** + * Create a builder with the composer package type preset. + * + * @example `PurlBuilder.composer().namespace('laravel').name('framework').build()` + */ + static composer() { + return new _PurlBuilder().type("composer"); + } + /** + * Create a builder with the conan package type preset. + * + * @example `PurlBuilder.conan().name('zlib').version('1.3.1').build()` + */ + static conan() { + return new _PurlBuilder().type("conan"); + } + /** + * Create a builder with the conda package type preset. + * + * @example `PurlBuilder.conda().name('numpy').version('1.26.4').build()` + */ + static conda() { + return new _PurlBuilder().type("conda"); + } + /** + * Create a builder with the cran package type preset. + * + * @example `PurlBuilder.cran().name('ggplot2').version('3.5.0').build()` + */ + static cran() { + return new _PurlBuilder().type("cran"); + } + /** + * Create a new empty builder instance. + * + * This is a convenience factory method that returns a new PurlBuilder + * instance ready for configuration. + */ + static create() { + return new _PurlBuilder(); + } + /** + * Create a builder with the deb package type preset. + * + * @example `PurlBuilder.deb().namespace('debian').name('curl').version('8.5.0').build()` + */ + static deb() { + return new _PurlBuilder().type("deb"); + } + /** + * Create a builder with the docker package type preset. + * + * @example `PurlBuilder.docker().namespace('library').name('nginx').version('latest').build()` + */ + static docker() { + return new _PurlBuilder().type("docker"); + } + /** + * Create a builder from an existing PackageURL instance. + * + * This factory method copies all properties from an existing PackageURL + * into a new builder, allowing for modification of existing URLs. + */ + static from(purl) { + const builder = new _PurlBuilder(); + if (purl.type !== void 0) { + builder._type = purl.type; + } + if (purl.namespace !== void 0) { + builder._namespace = purl.namespace; + } + if (purl.name !== void 0) { + builder._name = purl.name; + } + if (purl.version !== void 0) { + builder._version = purl.version; + } + if (purl.qualifiers !== void 0) { + const qualifiersObj = purl.qualifiers; + builder._qualifiers = ObjectFromEntries( + ArrayPrototypeMap(ObjectEntries(qualifiersObj), ([key, value]) => [ + key, + String(value) + ]) + ); + } + if (purl.subpath !== void 0) { + builder._subpath = purl.subpath; + } + return builder; + } + /** + * Create a builder with the gem package type preset. + * + * @example `PurlBuilder.gem().name('rails').version('7.0.0').build()` + */ + static gem() { + return new _PurlBuilder().type("gem"); + } + /** + * Create a builder with the github package type preset. + * + * @example `PurlBuilder.github().namespace('socketdev').name('socket-cli').build()` + */ + static github() { + return new _PurlBuilder().type("github"); + } + /** + * Create a builder with the gitlab package type preset. + * + * @example `PurlBuilder.gitlab().namespace('owner').name('project').build()` + */ + static gitlab() { + return new _PurlBuilder().type("gitlab"); + } + /** + * Create a builder with the golang package type preset. + * + * @example `PurlBuilder.golang().namespace('github.com/go').name('text').build()` + */ + static golang() { + return new _PurlBuilder().type("golang"); + } + /** + * Create a builder with the hackage package type preset. + * + * @example `PurlBuilder.hackage().name('aeson').version('2.2.1.0').build()` + */ + static hackage() { + return new _PurlBuilder().type("hackage"); + } + /** + * Create a builder with the hex package type preset. + * + * @example `PurlBuilder.hex().name('phoenix').version('1.7.12').build()` + */ + static hex() { + return new _PurlBuilder().type("hex"); + } + /** + * Create a builder with the huggingface package type preset. + * + * @example `PurlBuilder.huggingface().name('bert-base-uncased').build()` + */ + static huggingface() { + return new _PurlBuilder().type("huggingface"); + } + /** + * Create a builder with the luarocks package type preset. + * + * @example `PurlBuilder.luarocks().name('luasocket').version('3.1.0').build()` + */ + static luarocks() { + return new _PurlBuilder().type("luarocks"); + } + /** + * Create a builder with the maven package type preset. + * + * @example `PurlBuilder.maven().namespace('org.apache').name('commons-lang3').build()` + */ + static maven() { + return new _PurlBuilder().type("maven"); + } + /** + * Create a builder with the npm package type preset. + * + * @example `PurlBuilder.npm().name('lodash').version('4.17.21').build()` + */ + static npm() { + return new _PurlBuilder().type("npm"); + } + /** + * Create a builder with the nuget package type preset. + * + * @example `PurlBuilder.nuget().name('Newtonsoft.Json').version('13.0.3').build()` + */ + static nuget() { + return new _PurlBuilder().type("nuget"); + } + /** + * Create a builder with the oci package type preset. + * + * @example `PurlBuilder.oci().name('nginx').version('sha256:abc123').build()` + */ + static oci() { + return new _PurlBuilder().type("oci"); + } + /** + * Create a builder with the pub package type preset. + * + * @example `PurlBuilder.pub().name('flutter').version('3.19.0').build()` + */ + static pub() { + return new _PurlBuilder().type("pub"); + } + /** + * Create a builder with the pypi package type preset. + * + * @example `PurlBuilder.pypi().name('requests').version('2.31.0').build()` + */ + static pypi() { + return new _PurlBuilder().type("pypi"); + } + /** + * Create a builder with the rpm package type preset. + * + * @example `PurlBuilder.rpm().namespace('fedora').name('curl').version('8.5.0').build()` + */ + static rpm() { + return new _PurlBuilder().type("rpm"); + } + /** + * Create a builder with the swift package type preset. + * + * @example `PurlBuilder.swift().namespace('apple').name('swift-nio').version('2.64.0').build()` + */ + static swift() { + return new _PurlBuilder().type("swift"); + } +}; + +// src/vers.ts +var SEMVER_SCHEMES = ObjectFreeze( + new SetCtor([ + "semver", + "npm", + "cargo", + "golang", + "hex", + "pub", + "cran", + "gem", + "swift" + ]) +); +var COMPARATORS = ObjectFreeze([ + "!=", + "<=", + ">=", + "<", + ">", + "=" +]); +var DIGITS_ONLY = ObjectFreeze(/^\d+$/); +var regexSemverNumberedGroups2 = ObjectFreeze( + /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/ +); +function parseSemver(version) { + const match = RegExpPrototypeExec(regexSemverNumberedGroups2, version); + if (!match) { + throw new PurlError(`invalid semver version "${version}"`); + } + const major = Number(match[1]); + const minor = Number(match[2]); + const patch = Number(match[3]); + if (major > Number.MAX_SAFE_INTEGER || minor > Number.MAX_SAFE_INTEGER || patch > Number.MAX_SAFE_INTEGER) { + throw new PurlError( + `version component exceeds maximum safe integer in "${version}"` + ); + } + return { + major, + minor, + patch, + prerelease: match[4] ? StringPrototypeSplit(match[4], ".") : [] + }; +} +function comparePrereleases(a, b) { + if (a.length === 0 && b.length === 0) return 0; + if (a.length === 0) return 1; + if (b.length === 0) return -1; + const len = Math.min(a.length, b.length); + for (let i = 0; i < len; i += 1) { + const ai = a[i]; + const bi = b[i]; + if (ai === bi) continue; + const aNum = RegExpPrototypeTest(DIGITS_ONLY, ai); + const bNum = RegExpPrototypeTest(DIGITS_ONLY, bi); + if (aNum && bNum) { + const diff = Number(ai) - Number(bi); + if (diff !== 0) return diff < 0 ? -1 : 1; + } else if (aNum) { + return -1; + } else if (bNum) { + return 1; + } else { + if (ai < bi) return -1; + if (ai > bi) return 1; + } + } + if (a.length !== b.length) { + return a.length < b.length ? -1 : 1; + } + return 0; +} +function compareSemver(a, b) { + const pa = parseSemver(a); + const pb = parseSemver(b); + if (pa.major !== pb.major) return pa.major < pb.major ? -1 : 1; + if (pa.minor !== pb.minor) return pa.minor < pb.minor ? -1 : 1; + if (pa.patch !== pb.patch) return pa.patch < pb.patch ? -1 : 1; + const pre = comparePrereleases(pa.prerelease, pb.prerelease); + if (pre !== 0) return pre < 0 ? -1 : 1; + return 0; +} +function parseConstraint(raw) { + const trimmed = StringPrototypeTrim(raw); + if (trimmed === "*") { + return ObjectFreeze({ + __proto__: null, + comparator: "*", + version: "*" + }); + } + for (let i = 0, { length } = COMPARATORS; i < length; i += 1) { + const op = COMPARATORS[i]; + if (StringPrototypeStartsWith(trimmed, op)) { + const version = StringPrototypeTrim( + StringPrototypeSlice(trimmed, op.length) + ); + if (version.length === 0) { + throw new PurlError(`empty version after comparator "${op}"`); + } + return ObjectFreeze({ + __proto__: null, + comparator: op, + version + }); + } + } + if (trimmed.length === 0) { + throw new PurlError("empty constraint"); + } + return ObjectFreeze({ + __proto__: null, + comparator: "=", + version: trimmed + }); +} +var Vers = class _Vers { + scheme; + constraints; + constructor(scheme, constraints) { + this.scheme = scheme; + this.constraints = ObjectFreeze(constraints); + ObjectFreeze(this); + } + /** + * Parse a VERS string. + * + * @param versStr - VERS string (e.g., 'vers:npm/>=1.0.0|<2.0.0') + * @returns Vers instance + * @throws {PurlError} If the string is not a valid VERS + */ + static parse(versStr) { + return _Vers.fromString(versStr); + } + /** + * Parse a VERS string. + * + * @param versStr - VERS string (e.g., 'vers:npm/>=1.0.0|<2.0.0') + * @returns Vers instance + * @throws {PurlError} If the string is not a valid VERS + */ + static fromString(versStr) { + if (typeof versStr !== "string" || versStr.length === 0) { + throw new PurlError("VERS string is required"); + } + if (!StringPrototypeStartsWith(versStr, "vers:")) { + throw new PurlError('VERS must start with "vers:" scheme'); + } + const remainder = StringPrototypeSlice(versStr, 5); + const slashIndex = StringPrototypeIndexOf(remainder, "/"); + if (slashIndex === -1 || slashIndex === 0) { + throw new PurlError('VERS must contain a version scheme before "/"'); + } + const scheme = StringPrototypeToLowerCase( + StringPrototypeSlice(remainder, 0, slashIndex) + ); + const constraintsStr = StringPrototypeSlice(remainder, slashIndex + 1); + if (constraintsStr.length === 0) { + throw new PurlError("VERS must contain at least one constraint"); + } + const rawConstraints = StringPrototypeSplit(constraintsStr, "|"); + const MAX_CONSTRAINTS = 1e3; + if (rawConstraints.length > MAX_CONSTRAINTS) { + throw new PurlError( + `VERS exceeds maximum of ${MAX_CONSTRAINTS} constraints` + ); + } + const constraints = []; + for (let i = 0, { length } = rawConstraints; i < length; i += 1) { + const constraint = parseConstraint(rawConstraints[i]); + ArrayPrototypePush(constraints, constraint); + } + if (constraints.length > 1) { + for (let i = 0, { length } = constraints; i < length; i += 1) { + if (constraints[i].comparator === "*") { + throw new PurlError('wildcard "*" must be the only constraint'); + } + } + } + if (SEMVER_SCHEMES.has(scheme)) { + for (let i = 0, { length } = constraints; i < length; i += 1) { + const c = constraints[i]; + if (c.comparator !== "*" && !isSemverString(c.version)) { + throw new PurlError( + `invalid semver version "${c.version}" in VERS constraint` + ); + } + } + } + return new _Vers(scheme, constraints); + } + /** + * Check if a version is contained within this VERS range. + * + * Implements the VERS containment algorithm for semver-based schemes. + * + * @param version - Version string to check + * @returns true if the version matches the range + * @throws {PurlError} If the scheme is not supported + */ + contains(version) { + if (!SEMVER_SCHEMES.has(this.scheme)) { + throw new PurlError( + `unsupported VERS scheme "${this.scheme}" for containment check` + ); + } + const { constraints } = this; + if (constraints.length === 1 && constraints[0].comparator === "*") { + return true; + } + for (let i = 0, { length } = constraints; i < length; i += 1) { + const c = constraints[i]; + if (c.comparator === "!=" && compareSemver(version, c.version) === 0) { + return false; + } + } + for (let i = 0, { length } = constraints; i < length; i += 1) { + const c = constraints[i]; + if (c.comparator === "=" && compareSemver(version, c.version) === 0) { + return true; + } + } + const ranges = []; + for (let i = 0, { length } = constraints; i < length; i += 1) { + const c = constraints[i]; + if (c.comparator !== "=" && c.comparator !== "!=") { + ArrayPrototypePush(ranges, c); + } + } + if (ranges.length === 0) { + return false; + } + for (let i = 0, { length } = ranges; i < length; i += 1) { + const c = ranges[i]; + const cmp = compareSemver(version, c.version); + if (c.comparator === ">=") { + if (cmp < 0) { + const next2 = ranges[i + 1]; + if (next2 && (next2.comparator === "<" || next2.comparator === "<=")) { + i += 1; + } + continue; + } + const next = ranges[i + 1]; + if (!next) return true; + const cmpNext = compareSemver(version, next.version); + if (next.comparator === "<" && cmpNext < 0) return true; + if (next.comparator === "<=" && cmpNext <= 0) return true; + i += 1; + } else if (c.comparator === ">") { + if (cmp <= 0) { + const next2 = ranges[i + 1]; + if (next2 && (next2.comparator === "<" || next2.comparator === "<=")) { + i += 1; + } + continue; + } + const next = ranges[i + 1]; + if (!next) return true; + const cmpNext = compareSemver(version, next.version); + if (next.comparator === "<" && cmpNext < 0) return true; + if (next.comparator === "<=" && cmpNext <= 0) return true; + i += 1; + } else if (c.comparator === "<" || c.comparator === "<=") { + const cmpVal = compareSemver(version, c.version); + if (c.comparator === "<" && cmpVal < 0) return true; + if (c.comparator === "<=" && cmpVal <= 0) return true; + } + } + return false; + } + /** + * Serialize to canonical VERS string. + */ + toString() { + const parts = []; + for (let i = 0, { length } = this.constraints; i < length; i += 1) { + const c = this.constraints[i]; + if (c.comparator === "*") { + ArrayPrototypePush(parts, "*"); + } else if (c.comparator === "=") { + ArrayPrototypePush(parts, c.version); + } else { + ArrayPrototypePush(parts, `${c.comparator}${c.version}`); + } + } + return `vers:${this.scheme}/${ArrayPrototypeJoin(parts, "|")}`; + } +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + Err, + Ok, + PURL_Type, + PackageURL, + PurlBuilder, + PurlComponent, + PurlError, + PurlInjectionError, + PurlQualifierNames, + PurlType, + ResultUtils, + UrlConverter, + Vers, + compare, + containsInjectionCharacters, + createMatcher, + equals, + err, + findInjectionCharCode, + formatInjectionChar, + matches, + ok, + parseNpmSpecifier, + stringify, + stringifySpec +}); +/*! +Copyright (c) the purl authors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/lang.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/lang.d.ts new file mode 100644 index 00000000..7a6a7d4f --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/lang.d.ts @@ -0,0 +1,9 @@ +/** + * @fileoverview Language utility functions for checking null, undefined, and empty string values. + * Provides type checking predicates for common value validation scenarios. + */ +/** + * Check if a value is null, undefined, or an empty string. + */ +declare function isNullishOrEmptyString(value: unknown): boolean; +export { isNullishOrEmptyString }; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/normalize.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/normalize.d.ts new file mode 100644 index 00000000..cfaebd1d --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/normalize.d.ts @@ -0,0 +1,31 @@ +/** + * Normalize package name by trimming whitespace. + */ +declare function normalizeName(rawName: unknown): string | undefined; +/** + * Normalize package namespace by trimming and collapsing path separators. + */ +declare function normalizeNamespace(rawNamespace: unknown): string | undefined; +/** + * Normalize purl path component by collapsing separators and filtering segments. + */ +declare function normalizePurlPath(pathname: string, options?: { + filter?: ((_segment: string) => boolean) | undefined; +}): string; +/** + * Normalize qualifiers by trimming values and lowercasing keys. + */ +declare function normalizeQualifiers(rawQualifiers: unknown): Record | undefined; +/** + * Normalize subpath by filtering invalid segments. + */ +declare function normalizeSubpath(rawSubpath: unknown): string | undefined; +/** + * Normalize package type to lowercase. + */ +declare function normalizeType(rawType: unknown): string | undefined; +/** + * Normalize package version by trimming whitespace. + */ +declare function normalizeVersion(rawVersion: unknown): string | undefined; +export { normalizeName, normalizeNamespace, normalizePurlPath, normalizeQualifiers, normalizeSubpath, normalizeType, normalizeVersion, }; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/objects.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/objects.d.ts new file mode 100644 index 00000000..90d7f0c2 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/objects.d.ts @@ -0,0 +1,15 @@ +/** + * Recursively freeze an object and all nested objects. + * Uses breadth-first traversal with a queue for memory efficiency. + * @throws {Error} When object graph too large or circular reference detected. + */ +declare function recursiveFreeze(value_: T): T; +/** + * Check if value is a non-null object. + * Inlined to avoid importing @socketsecurity/lib/objects which transitively + * pulls in sorts → semver → npm-pack (2.5 MB). + */ +declare function isObject(value: unknown): value is { + [key: PropertyKey]: unknown; +}; +export { isObject, recursiveFreeze }; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/package-url-builder.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/package-url-builder.d.ts new file mode 100644 index 00000000..058c653f --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/package-url-builder.d.ts @@ -0,0 +1,303 @@ +/*! +Copyright (c) the purl authors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ +/** + * @fileoverview Builder pattern implementation for PackageURL construction with fluent API. + */ +import { PackageURL } from './package-url.js'; +/** + * Known Limitation: instanceof checks with ESM/CommonJS interop + * ============================================================== + * + * When using PurlBuilder in environments that mix ESM and CommonJS modules + * (such as Vitest tests importing CommonJS-compiled code as ESM), the instanceof + * operator may not work reliably for checking if the built objects are instances + * of PackageURL. + * + * This occurs because: + * - PurlBuilder internally imports PackageURL using CommonJS require() + * - External code may import PackageURL using ESM import + * - Node.js creates different wrapper objects for the same class + * - The instanceof check fails due to different object identities + * + * Workaround: + * Instead of: `purl instanceof PackageURL` + * Use: `purl.constructor.name === 'PackageURL'` or check for expected properties/methods + * + * This limitation only affects instanceof checks, not the actual functionality + * of the created PackageURL objects. + */ +/** + * Builder class for constructing PackageURL instances using a fluent API. + * + * This class provides a convenient way to build PackageURL objects step by step + * with method chaining. Each method returns the builder instance, allowing for + * fluent construction patterns. + * + * @example + * ```typescript + * const purl = PurlBuilder + * .npm() + * .name('lodash') + * .version('4.17.21') + * .build() + * ``` + */ +export declare class PurlBuilder { + /** The package type (e.g., 'npm', 'pypi', 'maven'). */ + private _type?; + /** The package namespace (organization, group, or scope). */ + private _namespace?; + /** The package name (required for valid PackageURLs). */ + private _name?; + /** The package version string. */ + private _version?; + /** Key-value pairs of additional package qualifiers. */ + private _qualifiers?; + /** Optional subpath within the package. */ + private _subpath?; + /** + * Build and return the final PackageURL instance. + * + * This method creates a new PackageURL instance using all the properties + * set on this builder. The PackageURL constructor will handle validation + * and normalization of the provided values. + * + * @throws {Error} If the configuration results in an invalid PackageURL + */ + build(): PackageURL; + /** + * Set the package name for the PackageURL. + * + * This is the core identifier for the package and is required for all valid + * PackageURLs. The name should be the canonical package name as it appears + * in the package repository. + */ + name(name: string): this; + /** + * Set the package namespace for the PackageURL. + * + * The namespace represents different concepts depending on the package type: + * - npm: organization or scope (e.g., '@angular' for '@angular/core') + * - maven: groupId (e.g., 'org.apache.commons') + * - pypi: typically unused + */ + namespace(namespace: string): this; + /** + * Add a single qualifier key-value pair. + * + * This method allows adding qualifiers incrementally. If the qualifier key + * already exists, its value will be overwritten. + */ + qualifier(key: string, value: string): this; + /** + * Set all qualifiers at once, replacing any existing qualifiers. + * + * Qualifiers provide additional metadata about the package such as: + * - arch: target architecture + * - os: target operating system + * - classifier: additional classifier for the package + */ + qualifiers(qualifiers: Record): this; + /** + * Set the subpath for the PackageURL. + * + * The subpath represents a path within the package, useful for referencing + * specific files or directories within a package. It should not start with + * a forward slash. + */ + subpath(subpath: string): this; + /** + * Set the package type for the PackageURL. + */ + type(type: string): this; + /** + * Set the package version for the PackageURL. + * + * The version string should match the format used by the package repository. + * Some package types may normalize version formats (e.g., removing leading 'v'). + */ + version(version: string): this; + /** + * Create a builder with the bitbucket package type preset. + * + * @example `PurlBuilder.bitbucket().namespace('owner').name('repo').build()` + */ + static bitbucket(): PurlBuilder; + /** + * Create a builder with the cargo package type preset. + * + * @example `PurlBuilder.cargo().name('serde').version('1.0.0').build()` + */ + static cargo(): PurlBuilder; + /** + * Create a builder with the cocoapods package type preset. + * + * @example `PurlBuilder.cocoapods().name('Alamofire').version('5.9.1').build()` + */ + static cocoapods(): PurlBuilder; + /** + * Create a builder with the composer package type preset. + * + * @example `PurlBuilder.composer().namespace('laravel').name('framework').build()` + */ + static composer(): PurlBuilder; + /** + * Create a builder with the conan package type preset. + * + * @example `PurlBuilder.conan().name('zlib').version('1.3.1').build()` + */ + static conan(): PurlBuilder; + /** + * Create a builder with the conda package type preset. + * + * @example `PurlBuilder.conda().name('numpy').version('1.26.4').build()` + */ + static conda(): PurlBuilder; + /** + * Create a builder with the cran package type preset. + * + * @example `PurlBuilder.cran().name('ggplot2').version('3.5.0').build()` + */ + static cran(): PurlBuilder; + /** + * Create a new empty builder instance. + * + * This is a convenience factory method that returns a new PurlBuilder + * instance ready for configuration. + */ + static create(): PurlBuilder; + /** + * Create a builder with the deb package type preset. + * + * @example `PurlBuilder.deb().namespace('debian').name('curl').version('8.5.0').build()` + */ + static deb(): PurlBuilder; + /** + * Create a builder with the docker package type preset. + * + * @example `PurlBuilder.docker().namespace('library').name('nginx').version('latest').build()` + */ + static docker(): PurlBuilder; + /** + * Create a builder from an existing PackageURL instance. + * + * This factory method copies all properties from an existing PackageURL + * into a new builder, allowing for modification of existing URLs. + */ + static from(purl: PackageURL): PurlBuilder; + /** + * Create a builder with the gem package type preset. + * + * @example `PurlBuilder.gem().name('rails').version('7.0.0').build()` + */ + static gem(): PurlBuilder; + /** + * Create a builder with the github package type preset. + * + * @example `PurlBuilder.github().namespace('socketdev').name('socket-cli').build()` + */ + static github(): PurlBuilder; + /** + * Create a builder with the gitlab package type preset. + * + * @example `PurlBuilder.gitlab().namespace('owner').name('project').build()` + */ + static gitlab(): PurlBuilder; + /** + * Create a builder with the golang package type preset. + * + * @example `PurlBuilder.golang().namespace('github.com/go').name('text').build()` + */ + static golang(): PurlBuilder; + /** + * Create a builder with the hackage package type preset. + * + * @example `PurlBuilder.hackage().name('aeson').version('2.2.1.0').build()` + */ + static hackage(): PurlBuilder; + /** + * Create a builder with the hex package type preset. + * + * @example `PurlBuilder.hex().name('phoenix').version('1.7.12').build()` + */ + static hex(): PurlBuilder; + /** + * Create a builder with the huggingface package type preset. + * + * @example `PurlBuilder.huggingface().name('bert-base-uncased').build()` + */ + static huggingface(): PurlBuilder; + /** + * Create a builder with the luarocks package type preset. + * + * @example `PurlBuilder.luarocks().name('luasocket').version('3.1.0').build()` + */ + static luarocks(): PurlBuilder; + /** + * Create a builder with the maven package type preset. + * + * @example `PurlBuilder.maven().namespace('org.apache').name('commons-lang3').build()` + */ + static maven(): PurlBuilder; + /** + * Create a builder with the npm package type preset. + * + * @example `PurlBuilder.npm().name('lodash').version('4.17.21').build()` + */ + static npm(): PurlBuilder; + /** + * Create a builder with the nuget package type preset. + * + * @example `PurlBuilder.nuget().name('Newtonsoft.Json').version('13.0.3').build()` + */ + static nuget(): PurlBuilder; + /** + * Create a builder with the oci package type preset. + * + * @example `PurlBuilder.oci().name('nginx').version('sha256:abc123').build()` + */ + static oci(): PurlBuilder; + /** + * Create a builder with the pub package type preset. + * + * @example `PurlBuilder.pub().name('flutter').version('3.19.0').build()` + */ + static pub(): PurlBuilder; + /** + * Create a builder with the pypi package type preset. + * + * @example `PurlBuilder.pypi().name('requests').version('2.31.0').build()` + */ + static pypi(): PurlBuilder; + /** + * Create a builder with the rpm package type preset. + * + * @example `PurlBuilder.rpm().namespace('fedora').name('curl').version('8.5.0').build()` + */ + static rpm(): PurlBuilder; + /** + * Create a builder with the swift package type preset. + * + * @example `PurlBuilder.swift().namespace('apple').name('swift-nio').version('2.64.0').build()` + */ + static swift(): PurlBuilder; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/package-url.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/package-url.d.ts new file mode 100644 index 00000000..5f21f23c --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/package-url.d.ts @@ -0,0 +1,292 @@ +import { PurlComponent } from './purl-component.js'; +import { PurlQualifierNames } from './purl-qualifier-names.js'; +import { PurlType } from './purl-type.js'; +import { Err, Ok, ResultUtils, err, ok } from './result.js'; +import { UrlConverter } from './url-converter.js'; +import type { QualifiersObject } from './purl-component.js'; +import type { Result } from './result.js'; +import type { DownloadUrl, RepositoryUrl } from './url-converter.js'; +/** + * Type representing the possible values for PackageURL component properties. + * Used for index signature to allow dynamic property access. + */ +export type PackageURLComponentValue = string | QualifiersObject | undefined; +/** + * Type representing a plain object representation of a PackageURL. + * Contains all package URL components as properties. + */ +export type PackageURLObject = { + type?: string | undefined; + namespace?: string | undefined; + name?: string | undefined; + version?: string | undefined; + qualifiers?: QualifiersObject | undefined; + subpath?: string | undefined; +}; +/** + * Type representing parsed PURL components as a tuple. + * Returned by PackageURL.parseString() in the order: + * [type, namespace, name, version, qualifiers, subpath] + */ +export type ParsedPurlComponents = [ + type: string | undefined, + namespace: string | undefined, + name: string | undefined, + version: string | undefined, + qualifiers: URLSearchParams | undefined, + subpath: string | undefined +]; +/** + * Package URL parser and constructor implementing the PURL specification. + * Provides methods to parse, construct, and manipulate Package URLs with validation and normalization. + */ +declare class PackageURL { + static Component: Record>; + static KnownQualifierNames: { + __proto__: null; + Checksum: string; + DownloadUrl: string; + FileName: string; + RepositoryUrl: string; + VcsUrl: string; + Vers: string; + }; + static Type: Record>; + /** @internal Cached canonical string representation. */ + _cachedString?: string | undefined; + name?: string | undefined; + namespace?: string | undefined; + qualifiers?: QualifiersObject | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; + constructor(rawType: unknown, rawNamespace: unknown, rawName: unknown, rawVersion: unknown, rawQualifiers: unknown, rawSubpath: unknown); + /** + * Convert PackageURL to object for JSONStringify compatibility. + */ + toJSON(): PackageURLObject; + /** + * Convert PackageURL to JSON string representation. + */ + toJSONString(): string; + /** + * Convert PackageURL to a plain object representation. + */ + toObject(): PackageURLObject; + /** + * Get the package specifier string without the scheme and type prefix. + * + * Returns `namespace/name@version?qualifiers#subpath` — the package identity + * without the `pkg:type/` prefix. + * + * @returns Spec string (e.g., '@babel/core@7.0.0' for pkg:npm/%40babel/core@7.0.0) + */ + toSpec(): string; + toString(): string; + /** + * Create a new PackageURL with a different version. + * Returns a new instance — the original is unchanged. + * + * @param version - New version string + * @returns New PackageURL with the updated version + */ + withVersion(version: string | undefined): PackageURL; + /** + * Create a new PackageURL with a different namespace. + * Returns a new instance — the original is unchanged. + * + * @param namespace - New namespace string + * @returns New PackageURL with the updated namespace + */ + withNamespace(namespace: string | undefined): PackageURL; + /** + * Create a new PackageURL with a single qualifier added or updated. + * Returns a new instance — the original is unchanged. + * + * @param key - Qualifier key + * @param value - Qualifier value + * @returns New PackageURL with the qualifier set + */ + withQualifier(key: string, value: string): PackageURL; + /** + * Create a new PackageURL with all qualifiers replaced. + * Returns a new instance — the original is unchanged. + * + * @param qualifiers - New qualifiers object (or undefined to remove all) + * @returns New PackageURL with the updated qualifiers + */ + withQualifiers(qualifiers: Record | undefined): PackageURL; + /** + * Create a new PackageURL with a different subpath. + * Returns a new instance — the original is unchanged. + * + * @param subpath - New subpath string + * @returns New PackageURL with the updated subpath + */ + withSubpath(subpath: string | undefined): PackageURL; + /** + * Compare this PackageURL with another for equality. + * + * Two PURLs are considered equal if their canonical string representations match. + * This comparison is case-sensitive after normalization. + * + * @param other - The PackageURL to compare with + * @returns true if the PURLs are equal, false otherwise + */ + equals(other: PackageURL): boolean; + /** + * Compare two PackageURLs for equality. + * + * Two PURLs are considered equal if their canonical string representations match. + * + * @param a - First PackageURL to compare + * @param b - Second PackageURL to compare + * @returns true if the PURLs are equal, false otherwise + */ + static equals(a: PackageURL, b: PackageURL): boolean; + /** + * Compare this PackageURL with another for sorting. + * + * Returns a number indicating sort order: + * - Negative if this comes before other + * - Zero if they are equal + * - Positive if this comes after other + * + * @param other - The PackageURL to compare with + * @returns -1, 0, or 1 for sort ordering + */ + compare(other: PackageURL): -1 | 0 | 1; + /** + * Compare two PackageURLs for sorting. + * + * Compares PURLs using their canonical string representations. + * Returns a number indicating sort order: + * - Negative if a comes before b + * - Zero if they are equal + * - Positive if a comes after b + * + * @param a - First PackageURL to compare + * @param b - Second PackageURL to compare + * @returns -1, 0, or 1 for sort ordering + */ + static compare(a: PackageURL, b: PackageURL): -1 | 0 | 1; + /** + * Create PackageURL from JSON string. + */ + static fromJSON(json: unknown): PackageURL; + /** + * Create PackageURL from a plain object. + */ + static fromObject(obj: unknown): PackageURL; + static fromString(purlStr: unknown): PackageURL; + /** + * Create PackageURL from npm package specifier. + * + * Parses npm package specifiers and converts them to PackageURL format. + * Handles scoped packages, version ranges, and normalizes version strings. + * + * **Supported formats:** + * - Basic packages: `lodash`, `lodash@4.17.21` + * - Scoped packages: `@babel/core`, `@babel/core@7.0.0` + * - Version ranges: `^4.17.21`, `~1.2.3`, `>=1.0.0` (prefixes stripped) + * - Dist-tags: `latest`, `next`, `beta` (passed through as version) + * + * **Not supported:** + * - Git URLs: `git+https://...` (use PackageURL constructor directly) + * - File paths: `file:../package.tgz` + * - GitHub shortcuts: `user/repo#branch` + * - Aliases: `npm:package@version` + * + * **Note:** Dist-tags like `latest` are mutable and should be resolved to + * concrete versions for reproducible builds. This method passes them through + * as-is for convenience. + * + * @param specifier - npm package specifier (e.g., 'lodash@4.17.21', '@babel/core@^7.0.0') + * @returns PackageURL instance for the npm package + * @throws {Error} If specifier is not a string or is empty + * + * @example + * ```typescript + * // Basic packages + * PackageURL.fromNpm('lodash@4.17.21') + * // -> pkg:npm/lodash@4.17.21 + * + * // Scoped packages + * PackageURL.fromNpm('@babel/core@^7.0.0') + * // -> pkg:npm/%40babel/core@7.0.0 + * + * // Dist-tags (passed through) + * PackageURL.fromNpm('react@latest') + * // -> pkg:npm/react@latest + * + * // No version + * PackageURL.fromNpm('express') + * // -> pkg:npm/express + * ``` + */ + static fromNpm(specifier: unknown): PackageURL; + /** + * Create PackageURL from ecosystem-specific package specifier. + * + * This is a convenience wrapper that delegates to type-specific parsers. + * Each ecosystem has its own specifier format and parsing rules. + * + * **Supported types:** + * - `npm`: npm package specifiers (e.g., 'lodash@4.17.21', '@babel/core@^7.0.0') + * + * @param type - Package ecosystem type (e.g., 'npm', 'pypi', 'maven') + * @param specifier - Ecosystem-specific package specifier string + * @returns PackageURL instance for the package + * @throws {Error} If type is not supported or specifier is invalid + * + * @example + * ```typescript + * // npm packages + * PackageURL.fromSpec('npm', 'lodash@4.17.21') + * // -> pkg:npm/lodash@4.17.21 + * + * PackageURL.fromSpec('npm', '@babel/core@^7.0.0') + * // -> pkg:npm/%40babel/core@7.0.0 + * ``` + */ + static fromSpec(type: string, specifier: unknown): PackageURL; + static parseString(purlStr: unknown): ParsedPurlComponents; + /** + * Check if a string is a valid PURL without throwing. + * + * @param purlStr - String to validate + * @returns true if the string is a valid PURL + * + * @example + * ```typescript + * PackageURL.isValid('pkg:npm/lodash@4.17.21') // true + * PackageURL.isValid('not a purl') // false + * ``` + */ + static isValid(purlStr: unknown): boolean; + /** + * Create PackageURL from a registry or repository URL. + * + * Convenience wrapper for UrlConverter.fromUrl(). Supports 27 hostnames + * across 17 package types including npm, pypi, maven, github, and more. + * + * @param urlStr - Registry or repository URL + * @returns PackageURL instance or undefined if URL is not recognized + * + * @example + * ```typescript + * PackageURL.fromUrl('https://www.npmjs.com/package/lodash') + * // -> pkg:npm/lodash + * + * PackageURL.fromUrl('https://github.com/lodash/lodash') + * // -> pkg:github/lodash/lodash + * ``` + */ + static fromUrl(urlStr: string): PackageURL | undefined; + static tryFromJSON(json: unknown): Result; + static tryFromObject(obj: unknown): Result; + static tryFromString(purlStr: unknown): Result; + static tryParseString(purlStr: unknown): Result; +} +export { Err, Ok, PackageURL, PurlComponent, PurlQualifierNames, PurlType, ResultUtils, UrlConverter, err, ok, }; +export type { DownloadUrl, RepositoryUrl, Result }; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/primordials.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/primordials.d.ts new file mode 100644 index 00000000..f661498d --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/primordials.d.ts @@ -0,0 +1,87 @@ +declare const uncurryThis: (fn: (this: T, ...args: A) => R) => (self: T, ...args: A) => R; +declare const applyBind: (fn: (this: T, ...args: A) => R) => (self: T, args: A) => R; +declare const MapCtor: MapConstructor; +declare const SetCtor: SetConstructor; +declare const URLCtor: typeof URL; +declare const URLSearchParamsCtor: typeof URLSearchParams; +declare const WeakSetCtor: WeakSetConstructor; +declare const encodeComponent: typeof encodeURIComponent; +declare const decodeComponent: typeof decodeURIComponent; +declare const JSONParse: (text: string, reviver?: ((this: any, key: string, value: any) => any) | undefined) => any; +declare const JSONStringify: { + (value: any, replacer?: ((this: any, key: string, value: any) => any) | undefined, space?: string | number | undefined): string; + (value: any, replacer?: (string | number)[] | null | undefined, space?: string | number | undefined): string; +}; +declare const ObjectCreate: { + (o: object | null): any; + (o: object | null, properties: PropertyDescriptorMap & ThisType): any; +}; +declare const ObjectEntries: { + (o: ArrayLike | { + [s: string]: T; + }): [string, T][]; + (o: {}): [string, any][]; +}; +declare const ObjectFromEntries: { + (entries: Iterable): { + [k: string]: T; + }; + (entries: Iterable): any; +}; +declare const ObjectFreeze: { + (f: T): T; + (o: T): Readonly; + (o: T): Readonly; +}; +declare const ObjectIsFrozen: (o: any) => boolean; +declare const ObjectKeys: { + (o: object): string[]; + (o: {}): string[]; +}; +declare const ObjectValues: { + (o: ArrayLike | { + [s: string]: T; + }): T[]; + (o: {}): any[]; +}; +declare const ArrayIsArray: (arg: any) => arg is any[]; +declare const ArrayPrototypeAt: (self: unknown, index: number) => any; +declare const ArrayPrototypeFilter: (self: unknown, predicate: (value: any, index: number, array: any[]) => unknown, thisArg?: any) => any[]; +declare const ArrayPrototypeFlatMap: (self: unknown, callback: (this: This, value: any, index: number, array: any[]) => U | readonly U[], thisArg?: This | undefined) => U[]; +declare const ArrayPrototypeIncludes: (self: unknown, searchElement: any, fromIndex?: number | undefined) => boolean; +declare const ArrayPrototypeJoin: (self: unknown, separator?: string | undefined) => string; +declare const ArrayPrototypeMap: (self: unknown, callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any) => U[]; +declare const ArrayPrototypePush: (self: T[], ...items: T[]) => number; +declare const ArrayPrototypeSlice: (self: unknown, start?: number | undefined, end?: number | undefined) => any[]; +declare const ArrayPrototypeSome: (self: unknown, predicate: (value: any, index: number, array: any[]) => unknown, thisArg?: any) => boolean; +declare const ArrayPrototypeToSorted: (self: unknown, compareFn?: ((a: any, b: any) => number) | undefined) => any[]; +declare const ReflectApply: typeof Reflect.apply; +declare const ReflectDefineProperty: typeof Reflect.defineProperty; +declare const ReflectGetOwnPropertyDescriptor: typeof Reflect.getOwnPropertyDescriptor; +declare const ReflectOwnKeys: typeof Reflect.ownKeys; +declare const ReflectSetPrototypeOf: typeof Reflect.setPrototypeOf; +declare const NumberPrototypeToString: (self: unknown, radix?: number | undefined) => string; +declare const RegExpPrototypeExec: (self: unknown, string: string) => RegExpExecArray | null; +declare const RegExpPrototypeTest: (self: unknown, string: string) => boolean; +declare const StringFromCharCode: (...codes: number[]) => string; +declare const StringPrototypeCharCodeAt: (self: unknown, index: number) => number; +declare const StringPrototypeEndsWith: (self: unknown, searchString: string, endPosition?: number | undefined) => boolean; +declare const StringPrototypeIncludes: (self: unknown, searchString: string, position?: number | undefined) => boolean; +declare const StringPrototypeIndexOf: (self: unknown, searchString: string, position?: number | undefined) => number; +declare const StringPrototypeLastIndexOf: (self: unknown, searchString: string, position?: number | undefined) => number; +declare const StringPrototypeReplace: (self: unknown, searchValue: { + [Symbol.replace](string: string, replacer: (substring: string, ...args: any[]) => string): string; +}, replacer: (substring: string, ...args: any[]) => string) => string; +declare const StringPrototypeReplaceAll: (self: string, searchValue: string, replaceValue: string) => string; +declare const StringPrototypePadStart: (self: unknown, maxLength: number, fillString?: string | undefined) => string; +declare const StringPrototypeSlice: (self: unknown, start?: number | undefined, end?: number | undefined) => string; +declare const StringPrototypeSplit: (self: unknown, splitter: { + [Symbol.split](string: string, limit?: number | undefined): string[]; +}, limit?: number | undefined) => string[]; +declare const StringPrototypeStartsWith: (self: unknown, searchString: string, position?: number | undefined) => boolean; +declare const StringPrototypeToLowerCase: (self: unknown) => string; +declare const StringPrototypeToUpperCase: (self: unknown) => string; +declare const StringPrototypeTrim: (self: unknown) => string; +export { applyBind, ArrayIsArray, ArrayPrototypeAt, ArrayPrototypeFilter, ArrayPrototypeFlatMap, ArrayPrototypeIncludes, ArrayPrototypeJoin, ArrayPrototypeMap, ArrayPrototypePush, ArrayPrototypeSlice, ArrayPrototypeSome, ArrayPrototypeToSorted, decodeComponent, encodeComponent, JSONParse, JSONStringify, MapCtor, ObjectCreate, ObjectEntries, NumberPrototypeToString, ObjectFromEntries, ObjectFreeze, ObjectIsFrozen, ObjectKeys, ObjectValues, ReflectApply, ReflectDefineProperty, ReflectGetOwnPropertyDescriptor, ReflectOwnKeys, ReflectSetPrototypeOf, RegExpPrototypeExec, RegExpPrototypeTest, SetCtor, StringFromCharCode, StringPrototypeCharCodeAt, StringPrototypeEndsWith, StringPrototypeIncludes, StringPrototypeIndexOf, StringPrototypeLastIndexOf, StringPrototypeReplace, StringPrototypeReplaceAll, StringPrototypePadStart, StringPrototypeSlice, StringPrototypeSplit, StringPrototypeStartsWith, StringPrototypeToLowerCase, StringPrototypeToUpperCase, StringPrototypeTrim, uncurryThis, URLCtor, URLSearchParamsCtor, WeakSetCtor, }; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-component.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-component.d.ts new file mode 100644 index 00000000..cfac1b70 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-component.d.ts @@ -0,0 +1,30 @@ +/** + * Type definitions for component handlers. + */ +export type ComponentEncoder = (_value: unknown) => string; +export type ComponentNormalizer = (_value: string) => string | undefined; +export type ComponentValidator = (_value: unknown, _throws: boolean) => boolean; +export type QualifiersValue = string | number | boolean | null | undefined; +export type QualifiersObject = Record; +/** + * Compare two component names for sorting. + */ +declare function componentComparator(compA: string, compB: string): number; +/** + * Get numeric sort order for component name. + */ +declare function componentSortOrder(comp: string): number; +/** + * Encode PURL component value to string. + */ +declare function PurlComponentEncoder(comp: unknown): string; +/** + * Normalize PURL component to string or undefined. + */ +declare function PurlComponentStringNormalizer(comp: unknown): string | undefined; +/** + * Validate PURL component value. + */ +declare function PurlComponentValidator(_comp: unknown, _throws: boolean): boolean; +declare const PurlComponent: Record>; +export { PurlComponent, PurlComponentEncoder, PurlComponentStringNormalizer, PurlComponentValidator, componentComparator, componentSortOrder, }; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-exists.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-exists.d.ts new file mode 100644 index 00000000..bd0c26ff --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-exists.d.ts @@ -0,0 +1,62 @@ +import type { PackageURL } from './package-url.js'; +import type { ExistsResult, ExistsOptions } from './purl-types/npm.js'; +/** + * Check if a package exists in its registry. + * + * Generic wrapper that dispatches to type-specific existence checks based on + * the package URL type. Queries the appropriate registry (npm, PyPI, crates.io, + * rubygems.org, etc.) to verify package existence and retrieve latest version. + * + * **Supported types:** + * - `npm` - Node.js packages from npmjs.org + * - `pypi` - Python packages from pypi.org + * - `cargo` - Rust crates from crates.io + * - `gem` - Ruby gems from rubygems.org + * - `maven` - Java packages from Maven Central + * - `nuget` - .NET packages from nuget.org + * - `golang` - Go modules from proxy.golang.org + * - `composer` - PHP packages from packagist.org + * - `cocoapods` - iOS/macOS pods from trunk.cocoapods.org + * - `conda` - Conda packages from anaconda.org + * - `docker` - Docker images from Docker Hub + * - `pub` - Dart/Flutter packages from pub.dev + * - `hex` - Elixir/Erlang packages from hex.pm + * - `cpan` - Perl modules from metacpan.org + * - `cran` - R packages from cran.r-universe.dev + * - `hackage` - Haskell packages from hackage.haskell.org + * + * **Unsupported types:** Returns `{ exists: false, error: 'Unsupported type' }` + * + * **Caching:** Responses can be cached using a TTL cache to reduce registry + * requests. Pass `{ cache }` option with a cache instance from `createTtlCache()`. + * + * @param purl - PackageURL instance or PURL string to check + * @param options - Optional configuration including cache + * @returns Promise resolving to existence result with latest version + * + * @example + * ```typescript + * import { purlExists, PackageURL } from '@socketregistry/packageurl-js' + * + * // Check npm package + * const npmPurl = PackageURL.fromString('pkg:npm/lodash@4.17.21') + * const result = await purlExists(npmPurl) + * // -> { exists: true, latestVersion: '4.17.21' } + * + * // Check PyPI package + * const pypiPurl = PackageURL.fromString('pkg:pypi/requests@2.28.1') + * const result = await purlExists(pypiPurl) + * // -> { exists: true, latestVersion: '2.31.0' } + * + * // With caching + * import { createTtlCache } from '@socketsecurity/lib/cache-with-ttl' + * const cache = createTtlCache({ ttl: 5 * 60 * 1000, prefix: 'purl-registry' }) + * const result = await purlExists(npmPurl, { cache }) + * + * // Unsupported type + * const mavenPurl = PackageURL.fromString('pkg:maven/org.apache/commons@1.0') + * const result = await purlExists(mavenPurl) + * // -> { exists: false, error: 'Unsupported type: maven' } + * ``` + */ +export declare function purlExists(purl: PackageURL, options?: ExistsOptions): Promise; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-qualifier-names.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-qualifier-names.d.ts new file mode 100644 index 00000000..17641b3c --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-qualifier-names.d.ts @@ -0,0 +1,14 @@ +/** + * @fileoverview Constants defining standard PURL qualifier names. + * Provides repository_url, download_url, vcs_url, file_name, and checksum qualifier constants. + */ +declare const PurlQualifierNames: { + __proto__: null; + Checksum: string; + DownloadUrl: string; + FileName: string; + RepositoryUrl: string; + VcsUrl: string; + Vers: string; +}; +export { PurlQualifierNames }; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-type.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-type.d.ts new file mode 100644 index 00000000..7ed7e7f5 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-type.d.ts @@ -0,0 +1,2 @@ +declare const PurlType: Record>; +export { PurlType }; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/alpm.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/alpm.d.ts new file mode 100644 index 00000000..dd6d53fb --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/alpm.d.ts @@ -0,0 +1,14 @@ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize ALPM package URL. + * Lowercases both namespace and name. + */ +export declare function normalize(purl: PurlObject): PurlObject; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/apk.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/apk.d.ts new file mode 100644 index 00000000..32ef16ab --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/apk.d.ts @@ -0,0 +1,14 @@ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize APK package URL. + * Lowercases both namespace and name. + */ +export declare function normalize(purl: PurlObject): PurlObject; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/bazel.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/bazel.d.ts new file mode 100644 index 00000000..138a598a --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/bazel.d.ts @@ -0,0 +1,20 @@ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize Bazel package URL. + * Lowercases name only. + */ +export declare function normalize(purl: PurlObject): PurlObject; +/** + * Validate Bazel package URL. + * Bazel packages must have a version (for reproducible builds). Name must not + * contain injection characters. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/bitbucket.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/bitbucket.d.ts new file mode 100644 index 00000000..1d7c3ea7 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/bitbucket.d.ts @@ -0,0 +1,19 @@ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize Bitbucket package URL. + * Lowercases both namespace and name. + */ +export declare function normalize(purl: PurlObject): PurlObject; +/** + * Validate Bitbucket package URL. + * Name and namespace must not contain injection characters. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/bitnami.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/bitnami.d.ts new file mode 100644 index 00000000..21660be7 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/bitnami.d.ts @@ -0,0 +1,14 @@ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize Bitnami package URL. + * Lowercases name only. + */ +export declare function normalize(purl: PurlObject): PurlObject; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/cargo.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/cargo.d.ts new file mode 100644 index 00000000..9288f4f1 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/cargo.d.ts @@ -0,0 +1,53 @@ +import type { ExistsResult, ExistsOptions } from './npm.js'; +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Check if a Cargo crate exists in crates.io. + * + * Queries crates.io at https://crates.io/api/v1/crates to verify crate + * existence and optionally validate a specific version. Returns the max_version + * from crate metadata. + * + * **Note:** crates.io requires a User-Agent header for API requests. + * + * **Caching:** Responses can be cached using a TTL cache to reduce registry + * requests. Pass `{ cache }` option with a cache instance from `createTtlCache()`. + * + * @param name - Crate name (e.g., 'serde', 'tokio') + * @param version - Optional version to validate (e.g., '1.0.152') + * @param options - Optional configuration including cache + * @returns Promise resolving to existence result with latest version + * + * @example + * ```typescript + * // Check if crate exists + * const result = await cargoExists('serde') + * // -> { exists: true, latestVersion: '1.0.197' } + * + * // Validate specific version + * const result = await cargoExists('tokio', '1.35.0') + * // -> { exists: true, latestVersion: '1.36.0' } + * + * // With caching + * import { createTtlCache } from '@socketsecurity/lib/cache-with-ttl' + * const cache = createTtlCache({ ttl: 5 * 60 * 1000, prefix: 'cargo' }) + * const result = await cargoExists('serde', undefined, { cache }) + * + * // Non-existent crate + * const result = await cargoExists('this-crate-does-not-exist') + * // -> { exists: false, error: 'Crate not found' } + * ``` + */ +export declare function cargoExists(name: string, version?: string, options?: ExistsOptions): Promise; +/** + * Validate Cargo package URL. + * Cargo packages must not have a namespace. Name must not contain injection characters. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/cocoapods.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/cocoapods.d.ts new file mode 100644 index 00000000..8a627aa6 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/cocoapods.d.ts @@ -0,0 +1,43 @@ +import type { ExistsResult, ExistsOptions } from './npm.js'; +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Check if a CocoaPod exists in the CocoaPods trunk. + * + * Queries trunk.cocoapods.org API to verify pod existence and retrieve + * the latest version. + * + * @param name - Pod name (e.g., 'Alamofire') + * @param version - Optional version to validate (e.g., '5.8.1') + * @param options - Optional configuration including cache + * @returns Promise resolving to existence result with latest version + * + * @example + * ```typescript + * // Check if pod exists + * const result = await cocoapodsExists('Alamofire') + * // -> { exists: true, latestVersion: '5.8.1' } + * + * // Validate specific version + * const result = await cocoapodsExists('Alamofire', '5.8.1') + * // -> { exists: true, latestVersion: '5.8.1' } + * + * // Non-existent pod + * const result = await cocoapodsExists('FakePod') + * // -> { exists: false, error: 'Pod not found' } + * ``` + */ +export declare function cocoapodsExists(name: string, version?: string, options?: ExistsOptions): Promise; +/** + * Validate CocoaPods package URL. + * Name cannot contain injection or whitespace characters, plus (+) character, + * or begin with a period (.). + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/composer.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/composer.d.ts new file mode 100644 index 00000000..9cf375df --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/composer.d.ts @@ -0,0 +1,43 @@ +import type { ExistsResult, ExistsOptions } from './npm.js'; +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize Composer package URL. + * Lowercases both namespace and name. + */ +export declare function normalize(purl: PurlObject): PurlObject; +/** + * Check if a Composer package exists on Packagist. + * + * Queries Packagist.org API to verify package existence and retrieve + * the latest version. Composer packages have vendor/package format. + * + * @param name - Package name (e.g., 'http-foundation') + * @param namespace - Vendor name (e.g., 'symfony') + * @param version - Optional version to validate (e.g., 'v6.3.0') + * @param options - Optional configuration including cache + * @returns Promise resolving to existence result with latest version + * + * @example + * ```typescript + * // Check if package exists + * const result = await packagistExists('http-foundation', 'symfony') + * // -> { exists: true, latestVersion: 'v6.3.0' } + * + * // Validate specific version + * const result = await packagistExists('http-foundation', 'symfony', 'v6.3.0') + * // -> { exists: true, latestVersion: 'v6.3.0' } + * + * // Non-existent package + * const result = await packagistExists('fake-package', 'vendor') + * // -> { exists: false, error: 'Package not found' } + * ``` + */ +export declare function packagistExists(name: string, namespace?: string, version?: string, options?: ExistsOptions): Promise; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/conan.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/conan.d.ts new file mode 100644 index 00000000..2a97d890 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/conan.d.ts @@ -0,0 +1,15 @@ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Validate Conan package URL. + * If namespace is present, qualifiers are required. + * If channel qualifier is present, namespace is required. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/conda.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/conda.d.ts new file mode 100644 index 00000000..7009a98a --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/conda.d.ts @@ -0,0 +1,64 @@ +import type { ExistsOptions, ExistsResult } from './npm.js'; +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize Conda package URL. + * Lowercases name only. + */ +export declare function normalize(purl: PurlObject): PurlObject; +/** + * Validate Conda package URL. + * Conda packages must not have a namespace. Name must not contain injection characters. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +/** + * Check if a Conda package exists in Anaconda.org. + * + * Queries Anaconda.org at https://api.anaconda.org/package to verify package + * existence and optionally validate a specific version. Returns the latest + * version from package metadata. + * + * **Note:** Defaults to conda-forge channel. Specify channel parameter for + * other channels like 'defaults', 'anaconda', etc. + * + * **Caching:** Responses can be cached using a TTL cache to reduce registry + * requests. Pass `{ cache }` option with a cache instance from `createTtlCache()`. + * + * @param name - Package name (e.g., 'numpy', 'pandas') + * @param version - Optional version to validate (e.g., '1.24.3') + * @param channel - Optional channel name (defaults to 'conda-forge') + * @param options - Optional configuration including cache + * @returns Promise resolving to existence result with latest version + * + * @example + * ```typescript + * // Check if package exists (defaults to conda-forge) + * const result = await condaExists('numpy') + * // -> { exists: true, latestVersion: '1.26.3' } + * + * // Check with custom channel + * const result = await condaExists('numpy', undefined, 'defaults') + * // -> { exists: true, latestVersion: '1.26.3' } + * + * // Validate specific version + * const result = await condaExists('pandas', '2.1.4') + * // -> { exists: true, latestVersion: '2.2.0' } + * + * // With caching + * import { createTtlCache } from '@socketsecurity/lib/cache-with-ttl' + * const cache = createTtlCache({ ttl: 5 * 60 * 1000, prefix: 'conda' }) + * const result = await condaExists('numpy', undefined, undefined, { cache }) + * + * // Non-existent package + * const result = await condaExists('this-package-does-not-exist') + * // -> { exists: false, error: 'Package not found' } + * ``` + */ +export declare function condaExists(name: string, version?: string, channel?: string, options?: ExistsOptions): Promise; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/cpan.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/cpan.d.ts new file mode 100644 index 00000000..c8f9185b --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/cpan.d.ts @@ -0,0 +1,42 @@ +import type { ExistsResult, ExistsOptions } from './npm.js'; +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Check if a Perl module exists on CPAN. + * + * Queries MetaCPAN API to verify module existence and retrieve + * the latest version. + * + * @param name - Module name (e.g., 'Moose') + * @param version - Optional version to validate (e.g., '2.2206') + * @param options - Optional configuration including cache + * @returns Promise resolving to existence result with latest version + * + * @example + * ```typescript + * // Check if module exists + * const result = await cpanExists('Moose') + * // -> { exists: true, latestVersion: '2.2206' } + * + * // Validate specific version + * const result = await cpanExists('Moose', '2.2206') + * // -> { exists: true, latestVersion: '2.2206' } + * + * // Non-existent module + * const result = await cpanExists('FakeModule') + * // -> { exists: false, error: 'Module not found' } + * ``` + */ +export declare function cpanExists(name: string, version?: string, options?: ExistsOptions): Promise; +/** + * Validate CPAN package URL. + * CPAN namespace (author/publisher ID) must be uppercase when present. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/cran.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/cran.d.ts new file mode 100644 index 00000000..d1f0556c --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/cran.d.ts @@ -0,0 +1,43 @@ +import type { ExistsResult, ExistsOptions } from './npm.js'; +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Check if an R package exists on CRAN. + * + * Queries CRAN database to verify package existence and retrieve + * the latest version. Note: CRAN provides a list of all packages + * via their packages.rds file. + * + * @param name - Package name (e.g., 'ggplot2') + * @param version - Optional version to validate (e.g., '3.4.4') + * @param options - Optional configuration including cache + * @returns Promise resolving to existence result with latest version + * + * @example + * ```typescript + * // Check if package exists + * const result = await cranExists('ggplot2') + * // -> { exists: true, latestVersion: '3.4.4' } + * + * // Validate specific version + * const result = await cranExists('ggplot2', '3.4.4') + * // -> { exists: true, latestVersion: '3.4.4' } + * + * // Non-existent package + * const result = await cranExists('FakePackage') + * // -> { exists: false, error: 'Package not found' } + * ``` + */ +export declare function cranExists(name: string, version?: string, options?: ExistsOptions): Promise; +/** + * Validate CRAN package URL. + * CRAN packages require a version. Name must not contain injection characters. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/deb.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/deb.d.ts new file mode 100644 index 00000000..00fea5a0 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/deb.d.ts @@ -0,0 +1,14 @@ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize Debian package URL. + * Lowercases both namespace and name. + */ +export declare function normalize(purl: PurlObject): PurlObject; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/docker.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/docker.d.ts new file mode 100644 index 00000000..f48096cc --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/docker.d.ts @@ -0,0 +1,63 @@ +import type { ExistsOptions, ExistsResult } from './npm.js'; +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize Docker package URL. + * Lowercases name only (namespace is case-sensitive for registry hosts). + */ +export declare function normalize(purl: PurlObject): PurlObject; +/** + * Validate Docker package URL. + * Name and namespace must not contain injection characters. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +/** + * Check if a Docker image exists in Docker Hub. + * + * Queries Docker Hub API at https://hub.docker.com/v2/repositories to verify + * image existence and optionally validate a specific tag. Returns the latest + * tag if no specific tag is requested. + * + * **Note:** Docker Hub has rate limits for unauthenticated requests. + * + * **Caching:** Responses can be cached using a TTL cache to reduce registry + * requests. Pass `{ cache }` option with a cache instance from `createTtlCache()`. + * + * @param name - Image name (e.g., 'nginx', 'redis') + * @param namespace - Optional namespace/repository (e.g., 'library' for official images) + * @param version - Optional tag to validate (e.g., 'latest', '1.25.3') + * @param options - Optional configuration including cache + * @returns Promise resolving to existence result with latest tag + * + * @example + * ```typescript + * // Check if official image exists + * const result = await dockerExists('nginx', 'library') + * // -> { exists: true, latestVersion: 'latest' } + * + * // Check user image + * const result = await dockerExists('myapp', 'myuser') + * // -> { exists: true, latestVersion: 'v1.0.0' } + * + * // Validate specific tag + * const result = await dockerExists('nginx', 'library', '1.25.3') + * // -> { exists: true, latestVersion: 'latest' } + * + * // With caching + * import { createTtlCache } from '@socketsecurity/lib/cache-with-ttl' + * const cache = createTtlCache({ ttl: 5 * 60 * 1000, prefix: 'docker' }) + * const result = await dockerExists('nginx', 'library', undefined, { cache }) + * + * // Non-existent image + * const result = await dockerExists('this-image-does-not-exist', 'library') + * // -> { exists: false, error: 'Image not found' } + * ``` + */ +export declare function dockerExists(name: string, namespace?: string, version?: string, options?: ExistsOptions): Promise; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/gem.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/gem.d.ts new file mode 100644 index 00000000..39fef089 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/gem.d.ts @@ -0,0 +1,51 @@ +import type { ExistsResult, ExistsOptions } from './npm.js'; +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Check if a Ruby gem exists in rubygems.org. + * + * Queries rubygems.org at https://rubygems.org/api/v1/versions to verify gem + * existence and optionally validate a specific version. Returns the latest + * version from the versions array. + * + * **Caching:** Responses can be cached using a TTL cache to reduce registry + * requests. Pass `{ cache }` option with a cache instance from `createTtlCache()`. + * + * @param name - Gem name (e.g., 'rails', 'rake') + * @param version - Optional version to validate (e.g., '7.0.0') + * @param options - Optional configuration including cache + * @returns Promise resolving to existence result with latest version + * + * @example + * ```typescript + * // Check if gem exists + * const result = await gemExists('rails') + * // -> { exists: true, latestVersion: '7.1.3' } + * + * // Validate specific version + * const result = await gemExists('rake', '13.0.0') + * // -> { exists: true, latestVersion: '13.1.0' } + * + * // With caching + * import { createTtlCache } from '@socketsecurity/lib/cache-with-ttl' + * const cache = createTtlCache({ ttl: 5 * 60 * 1000, prefix: 'gem' }) + * const result = await gemExists('rails', undefined, { cache }) + * + * // Non-existent gem + * const result = await gemExists('this-gem-does-not-exist') + * // -> { exists: false, error: 'Gem not found' } + * ``` + */ +export declare function gemExists(name: string, version?: string, options?: ExistsOptions): Promise; +/** + * Validate RubyGem package URL. + * Gem packages must not have a namespace. Name must not contain injection characters. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/generic.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/generic.d.ts new file mode 100644 index 00000000..c115d997 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/generic.d.ts @@ -0,0 +1,21 @@ +/** + * @fileoverview Generic PURL type (minimal implementation). + * https://github.com/package-url/purl-spec/blob/master/PURL-TYPES.rst#generic + * + * The generic type is used when no specific package type applies. + * It has no specific normalization or validation rules beyond the base PURL spec. + */ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize generic package URL. + * No type-specific normalization for generic packages. + */ +export declare function normalize(purl: PurlObject): PurlObject; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/github.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/github.d.ts new file mode 100644 index 00000000..4a3d5c1d --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/github.d.ts @@ -0,0 +1,19 @@ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize GitHub package URL. + * Lowercases both namespace and name. + */ +export declare function normalize(purl: PurlObject): PurlObject; +/** + * Validate GitHub package URL. + * Name and namespace must not contain injection characters. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/gitlab.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/gitlab.d.ts new file mode 100644 index 00000000..45c59812 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/gitlab.d.ts @@ -0,0 +1,19 @@ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize GitLab package URL. + * Lowercases both namespace and name. + */ +export declare function normalize(purl: PurlObject): PurlObject; +/** + * Validate GitLab package URL. + * Name and namespace must not contain injection characters. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/golang.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/golang.d.ts new file mode 100644 index 00000000..91eec2b5 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/golang.d.ts @@ -0,0 +1,49 @@ +import type { ExistsResult, ExistsOptions } from './npm.js'; +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Check if a Go module exists in the Go module proxy. + * + * Queries proxy.golang.org to verify module existence and retrieve + * the latest version. Go module names are typically full import paths + * like 'github.com/user/repo'. + * + * @param name - Full module path (e.g., 'github.com/gorilla/mux') + * @param namespace - Optional namespace (combined with name if provided) + * @param version - Optional version to validate (e.g., 'v1.8.0') + * @param options - Optional configuration including cache + * @returns Promise resolving to existence result with latest version + * + * @example + * ```typescript + * // Check if module exists + * const result = await golangExists('github.com/gorilla/mux') + * // -> { exists: true, latestVersion: 'v1.8.0' } + * + * // With namespace (constructs full path) + * const result = await golangExists('mux', 'github.com/gorilla') + * // -> { exists: true, latestVersion: 'v1.8.0' } + * + * // Validate specific version + * const result = await golangExists('github.com/gorilla/mux', undefined, 'v1.8.0') + * // -> { exists: true, latestVersion: 'v1.8.0' } + * + * // Non-existent module + * const result = await golangExists('github.com/fake/module') + * // -> { exists: false, error: 'Module not found' } + * ``` + */ +export declare function golangExists(name: string, namespace?: string, version?: string, options?: ExistsOptions): Promise; +/** + * Validate Golang package URL. + * Name and namespace must not contain injection characters. + * If version starts with "v", it must be followed by a valid semver version. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/hackage.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/hackage.d.ts new file mode 100644 index 00000000..9798d42a --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/hackage.d.ts @@ -0,0 +1,28 @@ +import type { ExistsResult, ExistsOptions } from './npm.js'; +/** + * Check if a Haskell package exists on Hackage. + * + * Queries Hackage API to verify package existence and retrieve + * the latest version. + * + * @param name - Package name (e.g., 'aeson') + * @param version - Optional version to validate (e.g., '2.2.0.0') + * @param options - Optional configuration including cache + * @returns Promise resolving to existence result with latest version + * + * @example + * ```typescript + * // Check if package exists + * const result = await hackageExists('aeson') + * // -> { exists: true, latestVersion: '2.2.0.0' } + * + * // Validate specific version + * const result = await hackageExists('aeson', '2.2.0.0') + * // -> { exists: true, latestVersion: '2.2.0.0' } + * + * // Non-existent package + * const result = await hackageExists('fake-package') + * // -> { exists: false, error: 'Package not found' } + * ``` + */ +export declare function hackageExists(name: string, version?: string, options?: ExistsOptions): Promise; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/hex.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/hex.d.ts new file mode 100644 index 00000000..37bd65e2 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/hex.d.ts @@ -0,0 +1,47 @@ +import type { ExistsResult, ExistsOptions } from './npm.js'; +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Check if an Elixir/Erlang package exists on hex.pm. + * + * Queries hex.pm API to verify package existence and retrieve + * the latest version. + * + * @param name - Package name (e.g., 'phoenix') + * @param version - Optional version to validate (e.g., '1.7.10') + * @param options - Optional configuration including cache + * @returns Promise resolving to existence result with latest version + * + * @example + * ```typescript + * // Check if package exists + * const result = await hexExists('phoenix') + * // -> { exists: true, latestVersion: '1.7.10' } + * + * // Validate specific version + * const result = await hexExists('phoenix', '1.7.10') + * // -> { exists: true, latestVersion: '1.7.10' } + * + * // Non-existent package + * const result = await hexExists('fake_package') + * // -> { exists: false, error: 'Package not found' } + * ``` + */ +export declare function hexExists(name: string, version?: string, options?: ExistsOptions): Promise; +/** + * Normalize Hex package URL. + * Lowercases both namespace and name. + */ +export declare function normalize(purl: PurlObject): PurlObject; +/** + * Validate Hex package URL. + * Name and namespace must not contain injection characters. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/huggingface.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/huggingface.d.ts new file mode 100644 index 00000000..c2c3e7c3 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/huggingface.d.ts @@ -0,0 +1,14 @@ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize Hugging Face package URL. + * Lowercases version only. + */ +export declare function normalize(purl: PurlObject): PurlObject; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/julia.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/julia.d.ts new file mode 100644 index 00000000..1b3aa478 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/julia.d.ts @@ -0,0 +1,19 @@ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize Julia package URL. + * No normalization - Julia package names are case-sensitive. + */ +export declare function normalize(purl: PurlObject): PurlObject; +/** + * Validate Julia package URL. + * Julia packages must not have a namespace. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/luarocks.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/luarocks.d.ts new file mode 100644 index 00000000..ca78c3b0 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/luarocks.d.ts @@ -0,0 +1,14 @@ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize LuaRocks package URL. + * Lowercases version only. + */ +export declare function normalize(purl: PurlObject): PurlObject; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/maven.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/maven.d.ts new file mode 100644 index 00000000..d9a32f1b --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/maven.d.ts @@ -0,0 +1,45 @@ +import type { ExistsResult, ExistsOptions } from './npm.js'; +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Check if a Maven package exists in Maven Central. + * + * Queries search.maven.org API to verify package existence and retrieve + * the latest version. Maven packages are identified by group ID (namespace) + * and artifact ID (name). + * + * @param name - Artifact ID (e.g., 'commons-lang3') + * @param namespace - Group ID (e.g., 'org.apache.commons') + * @param version - Optional version to validate (e.g., '3.12.0') + * @param options - Optional configuration including cache + * @returns Promise resolving to existence result with latest version + * + * @example + * ```typescript + * // Check if package exists + * const result = await mavenExists('commons-lang3', 'org.apache.commons') + * // -> { exists: true, latestVersion: '3.12.0' } + * + * // Validate specific version + * const result = await mavenExists('commons-lang3', 'org.apache.commons', '3.12.0') + * // -> { exists: true, latestVersion: '3.12.0' } + * + * // Non-existent package + * const result = await mavenExists('fake-artifact', 'com.example') + * // -> { exists: false, error: 'Package not found' } + * ``` + */ +export declare function mavenExists(name: string, namespace?: string, version?: string, options?: ExistsOptions): Promise; +/** + * Validate Maven package URL. + * Maven packages require a namespace (groupId). Name and namespace must not + * contain injection characters. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/mlflow.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/mlflow.d.ts new file mode 100644 index 00000000..74147085 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/mlflow.d.ts @@ -0,0 +1,19 @@ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize MLflow package URL. + * Lowercases name only if repository_url qualifier contains 'databricks'. + */ +export declare function normalize(purl: PurlObject): PurlObject; +/** + * Validate MLflow package URL. + * MLflow packages must not have a namespace. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/npm.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/npm.d.ts new file mode 100644 index 00000000..47987a9d --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/npm.d.ts @@ -0,0 +1,145 @@ +import type { TtlCache } from '@socketsecurity/lib/cache-with-ttl'; +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Result of package existence check. + */ +export type ExistsResult = { + exists: boolean; + latestVersion?: string; + error?: string; +}; +/** + * Options for registry existence checks. + */ +export type ExistsOptions = { + /** + * Optional TTL cache instance for caching registry responses. + * If provided, responses will be cached with configured TTL. + * + * @example + * ```typescript + * import { createTtlCache } from '@socketsecurity/lib/cache-with-ttl' + * import { npmExists } from '@socketregistry/packageurl-js' + * + * const cache = createTtlCache({ ttl: 5 * 60 * 1000, prefix: 'npm-registry' }) + * const result = await npmExists('lodash', undefined, undefined, { cache }) + * ``` + */ + cache?: TtlCache; +}; +/** + * Components parsed from npm package specifier. + * Includes namespace (for scoped packages), name, and version. + */ +export type NpmPackageComponents = { + namespace: string | undefined; + name: string; + version: string | undefined; +}; +/** + * Normalize npm package URL. + * https://github.com/package-url/purl-spec/blob/master/PURL-TYPES.rst#npm + */ +export declare function normalize(purl: PurlObject): PurlObject; +/** + * Check if an npm package exists in the registry. + * + * Queries the npm registry at https://registry.npmjs.org to verify package + * existence and optionally validate a specific version. Returns the latest + * version from dist-tags. + * + * **Caching:** Responses can be cached using a TTL cache to reduce registry + * requests. Pass `{ cache }` option with a cache instance from `createTtlCache()`. + * + * @param name - Package name (e.g., 'lodash', 'core' for scoped packages) + * @param namespace - Optional namespace/scope (e.g., '@babel') + * @param version - Optional version to validate (e.g., '4.17.21') + * @param options - Optional configuration including cache + * @returns Promise resolving to existence result with latest version + * + * @example + * ```typescript + * // Check if package exists + * const result = await npmExists('lodash') + * // -> { exists: true, latestVersion: '4.17.21' } + * + * // Check scoped package + * const result = await npmExists('core', '@babel') + * // -> { exists: true, latestVersion: '7.23.0' } + * + * // Validate specific version + * const result = await npmExists('lodash', undefined, '4.17.21') + * // -> { exists: true, latestVersion: '4.17.21' } + * + * // With caching + * import { createTtlCache } from '@socketsecurity/lib/cache-with-ttl' + * const cache = createTtlCache({ ttl: 5 * 60 * 1000, prefix: 'npm' }) + * const result = await npmExists('lodash', undefined, undefined, { cache }) + * + * // Non-existent package + * const result = await npmExists('this-package-does-not-exist') + * // -> { exists: false, error: 'Package not found' } + * ``` + */ +export declare function npmExists(name: string, namespace?: string, version?: string, options?: ExistsOptions): Promise; +/** + * Parse npm package specifier into component data. + * + * Parses npm package specifiers into namespace, name, and version components. + * Handles scoped packages, version ranges, and normalizes version strings. + * + * **Supported formats:** + * - Basic packages: `lodash`, `lodash@4.17.21` + * - Scoped packages: `@babel/core`, `@babel/core@7.0.0` + * - Version ranges: `^4.17.21`, `~1.2.3`, `>=1.0.0` (prefixes stripped) + * - Dist-tags: `latest`, `next`, `beta` (passed through as version) + * + * **Not supported:** + * - Git URLs: `git+https://...` + * - File paths: `file:../package.tgz` + * - GitHub shortcuts: `user/repo#branch` + * - Aliases: `npm:package@version` + * + * **Note:** Dist-tags like `latest` are mutable and should be resolved to + * concrete versions for reproducible builds. This method passes them through + * as-is for convenience. + * + * @param specifier - npm package specifier (e.g., 'lodash@4.17.21', '@babel/core@^7.0.0') + * @returns Object with namespace, name, and version components + * @throws {Error} If specifier is not a string or is empty + * + * @example + * ```typescript + * // Basic packages + * parseNpmSpecifier('lodash@4.17.21') + * // -> { namespace: undefined, name: 'lodash', version: '4.17.21' } + * + * // Scoped packages + * parseNpmSpecifier('@babel/core@^7.0.0') + * // -> { namespace: '@babel', name: 'core', version: '7.0.0' } + * + * // Dist-tags (passed through) + * parseNpmSpecifier('react@latest') + * // -> { namespace: undefined, name: 'react', version: 'latest' } + * + * // No version + * parseNpmSpecifier('express') + * // -> { namespace: undefined, name: 'express', version: undefined } + * ``` + */ +export declare function parseNpmSpecifier(specifier: unknown): NpmPackageComponents; +/** + * Validate npm package URL. + * Validation based on https://github.com/npm/validate-npm-package-name/tree/v6.0.0 + * ISC License + * Copyright (c) 2015, npm, Inc + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/nuget.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/nuget.d.ts new file mode 100644 index 00000000..4adae9cb --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/nuget.d.ts @@ -0,0 +1,42 @@ +import type { ExistsResult, ExistsOptions } from './npm.js'; +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Check if a NuGet package exists in NuGet.org. + * + * Queries the NuGet V3 API to verify package existence and retrieve + * the latest version. + * + * @param name - Package name (e.g., 'Newtonsoft.Json') + * @param version - Optional version to validate (e.g., '13.0.3') + * @param options - Optional configuration including cache + * @returns Promise resolving to existence result with latest version + * + * @example + * ```typescript + * // Check if package exists + * const result = await nugetExists('Newtonsoft.Json') + * // -> { exists: true, latestVersion: '13.0.3' } + * + * // Validate specific version + * const result = await nugetExists('Newtonsoft.Json', '13.0.3') + * // -> { exists: true, latestVersion: '13.0.3' } + * + * // Non-existent package + * const result = await nugetExists('fake-package-xyz') + * // -> { exists: false, error: 'Package not found' } + * ``` + */ +export declare function nugetExists(name: string, version?: string, options?: ExistsOptions): Promise; +/** + * Validate NuGet package URL. + * NuGet packages must not have a namespace. Name must not contain injection characters. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/oci.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/oci.d.ts new file mode 100644 index 00000000..e2845dfc --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/oci.d.ts @@ -0,0 +1,19 @@ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize OCI package URL. + * Lowercases name and version per spec. + */ +export declare function normalize(purl: PurlObject): PurlObject; +/** + * Validate OCI package URL. + * OCI packages must not have a namespace. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/opam.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/opam.d.ts new file mode 100644 index 00000000..502c2d4a --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/opam.d.ts @@ -0,0 +1,14 @@ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Validate OPAM package URL. + * OPAM packages must not have a namespace. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/otp.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/otp.d.ts new file mode 100644 index 00000000..29bb6cba --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/otp.d.ts @@ -0,0 +1,19 @@ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize OTP package URL. + * Lowercases name. + */ +export declare function normalize(purl: PurlObject): PurlObject; +/** + * Validate OTP package URL. + * OTP packages must not have a namespace. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/pub.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/pub.d.ts new file mode 100644 index 00000000..c344927e --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/pub.d.ts @@ -0,0 +1,47 @@ +import type { ExistsResult, ExistsOptions } from './npm.js'; +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize Pub package URL. + * Lowercases name and replaces dashes with underscores. + */ +export declare function normalize(purl: PurlObject): PurlObject; +/** + * Check if a Dart/Flutter package exists on pub.dev. + * + * Queries pub.dev API to verify package existence and retrieve + * the latest version. + * + * @param name - Package name (e.g., 'flutter_bloc') + * @param version - Optional version to validate (e.g., '8.1.3') + * @param options - Optional configuration including cache + * @returns Promise resolving to existence result with latest version + * + * @example + * ```typescript + * // Check if package exists + * const result = await pubExists('flutter_bloc') + * // -> { exists: true, latestVersion: '8.1.3' } + * + * // Validate specific version + * const result = await pubExists('flutter_bloc', '8.1.3') + * // -> { exists: true, latestVersion: '8.1.3' } + * + * // Non-existent package + * const result = await pubExists('fake_package') + * // -> { exists: false, error: 'Package not found' } + * ``` + */ +export declare function pubExists(name: string, version?: string, options?: ExistsOptions): Promise; +/** + * Validate Pub package URL. + * Name may only contain [a-z0-9_] characters. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/pypi.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/pypi.d.ts new file mode 100644 index 00000000..e2e0fd49 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/pypi.d.ts @@ -0,0 +1,57 @@ +import type { ExistsResult, ExistsOptions } from './npm.js'; +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize PyPI package URL. + * Lowercases namespace, name, and version, replaces underscores with dashes in name. + * Spec: namespace, name, and version are all case-insensitive. + */ +export declare function normalize(purl: PurlObject): PurlObject; +/** + * Validate PyPI package URL. + * Name must not contain injection characters. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +/** + * Check if a PyPI package exists in the registry. + * + * Queries PyPI at https://pypi.org/pypi to verify package existence and + * optionally validate a specific version. Returns the latest version from + * package metadata. + * + * **Caching:** Responses can be cached using a TTL cache to reduce registry + * requests. Pass `{ cache }` option with a cache instance from `createTtlCache()`. + * + * @param name - Package name (e.g., 'requests', 'django') + * @param version - Optional version to validate (e.g., '2.28.1') + * @param options - Optional configuration including cache + * @returns Promise resolving to existence result with latest version + * + * @example + * ```typescript + * // Check if package exists + * const result = await pypiExists('requests') + * // -> { exists: true, latestVersion: '2.31.0' } + * + * // Validate specific version + * const result = await pypiExists('django', '4.2.0') + * // -> { exists: true, latestVersion: '5.0.0' } + * + * // With caching + * import { createTtlCache } from '@socketsecurity/lib/cache-with-ttl' + * const cache = createTtlCache({ ttl: 5 * 60 * 1000, prefix: 'pypi' }) + * const result = await pypiExists('requests', undefined, { cache }) + * + * // Non-existent package + * const result = await pypiExists('this-package-does-not-exist') + * // -> { exists: false, error: 'Package not found' } + * ``` + */ +export declare function pypiExists(name: string, version?: string, options?: ExistsOptions): Promise; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/qpkg.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/qpkg.d.ts new file mode 100644 index 00000000..e921d06d --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/qpkg.d.ts @@ -0,0 +1,14 @@ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize QPKG package URL. + * Lowercases namespace only. + */ +export declare function normalize(purl: PurlObject): PurlObject; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/rpm.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/rpm.d.ts new file mode 100644 index 00000000..5b19014d --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/rpm.d.ts @@ -0,0 +1,14 @@ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize RPM package URL. + * Lowercases namespace only. + */ +export declare function normalize(purl: PurlObject): PurlObject; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/socket.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/socket.d.ts new file mode 100644 index 00000000..41d50bd2 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/socket.d.ts @@ -0,0 +1,21 @@ +/** + * @fileoverview Socket-specific PURL type (minimal implementation). + * + * The socket type is a non-standard type used internally by Socket.dev + * for package identification. It has no specific normalization or validation + * rules beyond the base PURL spec. + */ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize socket package URL. + * No type-specific normalization for socket packages. + */ +export declare function normalize(purl: PurlObject): PurlObject; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/swid.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/swid.d.ts new file mode 100644 index 00000000..5dbc6d00 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/swid.d.ts @@ -0,0 +1,15 @@ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Validate SWID package URL. + * SWID requires a tag_id qualifier that must not be empty. + * If tag_id is a GUID, it must be lowercase. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/swift.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/swift.d.ts new file mode 100644 index 00000000..4a10d2b1 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/swift.d.ts @@ -0,0 +1,15 @@ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Validate Swift package URL. + * Swift packages require both namespace and version. Name and namespace must + * not contain injection characters. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/unknown.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/unknown.d.ts new file mode 100644 index 00000000..1ead7736 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/unknown.d.ts @@ -0,0 +1,20 @@ +/** + * @fileoverview Unknown PURL type (minimal implementation). + * + * The unknown type is used when the package type cannot be determined. + * It has no specific normalization or validation rules beyond the base PURL spec. + */ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize unknown package URL. + * No type-specific normalization for unknown packages. + */ +export declare function normalize(purl: PurlObject): PurlObject; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/vscode-extension.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/vscode-extension.d.ts new file mode 100644 index 00000000..1357e3e0 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/vscode-extension.d.ts @@ -0,0 +1,60 @@ +import type { ExistsOptions, ExistsResult } from './npm.js'; +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize VSCode extension package URL. + * Lowercases namespace (publisher), name (extension), and version per spec. + * Spec: namespace, name, and version are all case-insensitive. + */ +export declare function normalize(purl: PurlObject): PurlObject; +/** + * Validate VSCode extension package URL. + * Checks namespace (publisher) and name (extension) for injection characters, + * and validates version as semver when present. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +/** + * Check if a VSCode extension exists in the Visual Studio Marketplace. + * + * Queries the VS Marketplace API to verify extension existence and optionally + * validate a specific version. Returns the latest version from extension metadata. + * + * **Note:** VS Marketplace requires specific headers for API access. + * + * **Caching:** Responses can be cached using a TTL cache to reduce registry + * requests. Pass `{ cache }` option with a cache instance from `createTtlCache()`. + * + * @param name - Extension name (e.g., 'vscode-eslint') + * @param namespace - Publisher name (e.g., 'dbaeumer') + * @param version - Optional version to validate (e.g., '2.4.2') + * @param options - Optional configuration including cache + * @returns Promise resolving to existence result with latest version + * + * @example + * ```typescript + * // Check if extension exists + * const result = await vscodeExtensionExists('vscode-eslint', 'dbaeumer') + * // -> { exists: true, latestVersion: '2.4.2' } + * + * // Validate specific version + * const result = await vscodeExtensionExists('vscode-eslint', 'dbaeumer', '2.4.0') + * // -> { exists: true, latestVersion: '2.4.2' } + * + * // With caching + * import { createTtlCache } from '@socketsecurity/lib/cache-with-ttl' + * const cache = createTtlCache({ ttl: 5 * 60 * 1000, prefix: 'vscode' }) + * const result = await vscodeExtensionExists('vscode-eslint', 'dbaeumer', undefined, { cache }) + * + * // Non-existent extension + * const result = await vscodeExtensionExists('non-existent', 'publisher') + * // -> { exists: false, error: 'Extension not found' } + * ``` + */ +export declare function vscodeExtensionExists(name: string, namespace?: string, version?: string, options?: ExistsOptions): Promise; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/yocto.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/yocto.d.ts new file mode 100644 index 00000000..6105549a --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/purl-types/yocto.d.ts @@ -0,0 +1,19 @@ +interface PurlObject { + name: string; + namespace?: string | undefined; + qualifiers?: Record | undefined; + subpath?: string | undefined; + type?: string | undefined; + version?: string | undefined; +} +/** + * Normalize Yocto package URL. + * Lowercases name. + */ +export declare function normalize(purl: PurlObject): PurlObject; +/** + * Validate Yocto package URL. + * Yocto packages must not have a namespace. + */ +export declare function validate(purl: PurlObject, throws: boolean): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/result.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/result.d.ts new file mode 100644 index 00000000..298f4cfc --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/result.d.ts @@ -0,0 +1,129 @@ +/** + * @fileoverview Result type for functional error handling without exceptions. + */ +/** + * Result type representing either success (Ok) or failure (Err). + */ +export type Result = Ok | Err; +/** + * Successful result containing a value. + */ +export declare class Ok { + readonly kind: "ok"; + readonly value: T; + constructor(value: T); + /** + * Chain another result-returning operation. + */ + andThen(fn: (_value: T) => Result): Result; + /** + * Check if this result is an error. + */ + isErr(): boolean; + /** + * Check if this result is successful. + */ + isOk(): this is Ok; + /** + * Transform the success value. + */ + map(fn: (_value: T) => U): Result; + /** + * Transform the error (no-op for Ok). + */ + mapErr(_fn: (_error: never) => F): Result; + /** + * Return this result or the other if error (no-op for Ok). + */ + orElse(_fn: (_error: never) => Result): Result; + /** + * Get the success value or throw if error. + */ + unwrap(): T; + /** + * Get the success value or return default if error. + */ + unwrapOr(_defaultValue: T): T; + /** + * Get the success value or compute from error if error. + */ + unwrapOrElse(_fn: (_error: never) => T): T; +} +/** + * Error result containing an error. + */ +export declare class Err { + readonly kind: "err"; + readonly error: E; + constructor(error: E); + /** + * Chain another result-returning operation (no-op for Err). + */ + andThen(_fn: (_value: never) => Result): Result; + /** + * Check if this result is an error. + */ + isErr(): this is Err; + /** + * Check if this result is successful. + */ + isOk(): boolean; + /** + * Transform the success value (no-op for Err). + */ + map(_fn: (_value: never) => U): Result; + /** + * Transform the error. + */ + mapErr(fn: (_error: E) => F): Result; + /** + * Return this result or the other if error. + */ + orElse(fn: (_error: E) => Result): Result; + /** + * Get the success value or throw if error. + */ + unwrap(): never; + /** + * Get the success value or return default if error. + */ + unwrapOr(defaultValue: T): T; + /** + * Get the success value or compute from error if error. + */ + unwrapOrElse(fn: (_error: E) => T): T; +} +/** + * Create a successful result. + */ +export declare function ok(value: T): Ok; +/** + * Create an error result. + */ +export declare function err(error: E): Err; +/** + * Utility functions for working with Results. + */ +export declare const ResultUtils: { + /** + * Convert all Results to Ok values or return first error. + */ + all[]>(results: T): Result<{ [K in keyof T]: T[K] extends Result ? U : never; }, T[number] extends Result ? E : never>; + /** + * Return the first Ok result or the last error. + * Returns an error result if the input array is empty. + */ + any[]>(results: T): T[number]; + /** + * Create an error result. + */ + err: typeof err; + /** + * Wrap a function that might throw into a Result. + */ + from(fn: () => T): Result; + /** + * Create a successful result. + */ + ok: typeof ok; +}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/stringify.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/stringify.d.ts new file mode 100644 index 00000000..5de1518a --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/stringify.d.ts @@ -0,0 +1,36 @@ +import type { PackageURL } from './package-url.js'; +/** + * Convert PackageURL instance to spec string (without scheme and type). + * + * Returns the package identity portion: namespace/name@version?qualifiers#subpath + * This is the purl equivalent of an npm "spec" — the package identity without + * the ecosystem prefix. + * + * @param purl - PackageURL instance to stringify + * @returns Spec string (e.g., '%40babel/core@7.0.0' for pkg:npm/%40babel/core@7.0.0) + * + * @example + * ```typescript + * const purl = new PackageURL('npm', '@babel', 'core', '7.0.0') + * stringifySpec(purl) + * // -> '%40babel/core@7.0.0' + * ``` + */ +export declare function stringifySpec(purl: PackageURL): string; +/** + * Convert PackageURL instance to canonical PURL string. + * + * Serializes a PackageURL object into its canonical string representation + * according to the PURL specification. + * + * @param purl - PackageURL instance to stringify + * @returns Canonical PURL string (e.g., 'pkg:npm/lodash@4.17.21') + * + * @example + * ```typescript + * const purl = new PackageURL('npm', undefined, 'lodash', '4.17.21') + * stringify(purl) + * // -> 'pkg:npm/lodash@4.17.21' + * ``` + */ +export declare function stringify(purl: PackageURL): string; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/strings.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/strings.d.ts new file mode 100644 index 00000000..ae53b96f --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/strings.d.ts @@ -0,0 +1,79 @@ +/** + * Check if string contains only whitespace characters. + */ +declare function isBlank(str: string): boolean; +/** + * Check if value is a non-empty string. + */ +declare function isNonEmptyString(value: unknown): value is string; +/** + * Check if value is a valid semantic version string. + */ +declare function isSemverString(value: unknown): value is string; +/** + * Perform locale-aware string comparison. + */ +declare function localeCompare(x: string, y: string): number; +/** + * Convert package name to lowercase. + */ +declare function lowerName(purl: { + name: string; +}): void; +/** + * Convert package namespace to lowercase. + */ +declare function lowerNamespace(purl: { + namespace?: string | undefined; +}): void; +/** + * Convert package version to lowercase. + */ +declare function lowerVersion(purl: { + version?: string | undefined; +}): void; +/** + * Replace all dashes with underscores in string. + */ +declare function replaceDashesWithUnderscores(str: string): string; +/** + * Replace all underscores with dashes in string. + */ +declare function replaceUnderscoresWithDashes(str: string): string; +/** + * Find the first command injection character in a string. + * Like findInjectionCharCode but uses the narrower command injection set. + * Returns the character code found, or -1. + */ +declare function findCommandInjectionCharCode(str: string): number; +/** + * Find the first injection character in a string. + * Returns the character code of the first dangerous character found, or -1. + * + * Uses charCode scanning for performance in hot paths. The check is a + * single pass with no allocation, no regex, and no prototype method calls + * beyond the captured StringPrototypeCharCodeAt primordial. + * + * Null bytes (0x00) are also caught by validateStrings() in validate.ts, + * but we include them here for defense-in-depth so callers who skip the + * base validators still get protection. + */ +declare function findInjectionCharCode(str: string): number; +/** + * Check if string contains characters commonly used in injection attacks. + * Returns true if any dangerous character is found. + * + * For detailed information about which character was found, use + * {@link findInjectionCharCode} instead. + */ +declare function containsInjectionCharacters(str: string): boolean; +/** + * Format an injection character code as a human-readable label for error messages. + * Returns a string like `"|" (0x7c)` for printable chars or `0x1b` for control chars. + */ +declare function formatInjectionChar(code: number): string; +/** + * Remove leading slashes from string. + */ +declare function trimLeadingSlashes(str: string): string; +export { containsInjectionCharacters, findCommandInjectionCharCode, findInjectionCharCode, formatInjectionChar, isBlank, isNonEmptyString, isSemverString, localeCompare, lowerName, lowerNamespace, lowerVersion, replaceDashesWithUnderscores, replaceUnderscoresWithDashes, trimLeadingSlashes, }; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/url-converter.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/url-converter.d.ts new file mode 100644 index 00000000..7e0543b5 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/url-converter.d.ts @@ -0,0 +1,93 @@ +import type { PackageURL } from './package-url.js'; +/** @internal Register the PackageURL class for fromUrl construction. */ +export declare function _registerPackageURLForUrlConverter(ctor: typeof PackageURL): void; +/** + * Repository URL conversion results. + * + * This interface represents the result of converting a PackageURL to a + * repository URL where the source code can be found. + */ +export interface RepositoryUrl { + /** The type of repository (version control system or web interface). */ + type: 'git' | 'hg' | 'svn' | 'web'; + /** The repository URL string. */ + url: string; +} +/** + * Download URL conversion results. + * + * This interface represents the result of converting a PackageURL to a + * download URL where the package artifact can be obtained. + */ +export interface DownloadUrl { + /** The type/format of the downloadable artifact. */ + type: 'tarball' | 'zip' | 'exe' | 'wheel' | 'jar' | 'gem' | 'other'; + /** The download URL string. */ + url: string; +} +export declare class UrlConverter { + /** + * Convert a URL string to a PackageURL if the URL is recognized. + * + * Dispatches to type-specific parsers based on the URL hostname. + * Returns undefined for unrecognized hosts, invalid URLs, or URLs + * without enough path information to construct a valid PackageURL. + * + * @example + * ```typescript + * UrlConverter.fromUrl('https://www.npmjs.com/package/lodash') + * // -> PackageURL for pkg:npm/lodash + * + * UrlConverter.fromUrl('https://github.com/lodash/lodash') + * // -> PackageURL for pkg:github/lodash/lodash + * ``` + */ + static fromUrl(urlStr: string): PackageURL | undefined; + /** + * Check if a URL string is recognized for conversion to a PackageURL. + * + * Returns true if the URL's hostname has a registered parser, + * false for invalid URLs or unrecognized hosts. + */ + static supportsFromUrl(urlStr: string): boolean; + /** + * Get all available URLs for a PackageURL. + * + * This convenience method returns both repository and download URLs + * in a single call, useful when you need to check all URL options. + */ + static getAllUrls(purl: PackageURL): { + download: DownloadUrl | undefined; + repository: RepositoryUrl | undefined; + }; + /** + * Check if a PackageURL type supports download URL conversion. + * + * This method checks if the given package type has download URL + * conversion logic implemented. + */ + static supportsDownloadUrl(type: string): boolean; + /** + * Check if a PackageURL type supports repository URL conversion. + * + * This method checks if the given package type has repository URL + * conversion logic implemented. + */ + static supportsRepositoryUrl(type: string): boolean; + /** + * Convert a PackageURL to a download URL if possible. + * + * This method attempts to generate a download URL where the package's + * artifact (binary, archive, etc.) can be obtained. Requires a version + * to be present in the PackageURL. + */ + static toDownloadUrl(purl: PackageURL): DownloadUrl | undefined; + /** + * Convert a PackageURL to a repository URL if possible. + * + * This method attempts to generate a repository URL where the package's + * source code can be found. Different package types use different URL + * patterns and repository hosting services. + */ + static toRepositoryUrl(purl: PackageURL): RepositoryUrl | undefined; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/validate.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/validate.d.ts new file mode 100644 index 00000000..3414c01c --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/validate.d.ts @@ -0,0 +1,100 @@ +/** + * Validate that component is empty for specific package type. + */ +declare function validateEmptyByType(type: string, name: string, value: unknown, options?: { + throws?: boolean | undefined; +} | boolean | undefined): boolean; +/** + * Validate that a component does not contain injection characters. + * Shared helper to eliminate boilerplate across per-type validators. + * @throws {PurlInjectionError} When validation fails and throws is true. + * The error includes the specific character code, component name, and + * package type so callers can log, alert, or handle injection attempts + * at an elevated level. + */ +declare function validateNoInjectionByType(type: string, component: string, value: string | undefined, throws: boolean): boolean; +/** + * Validate package name component. + * @throws {PurlError} When validation fails and options.throws is true. + */ +declare function validateName(name: unknown, options?: { + throws?: boolean | undefined; +} | boolean | undefined): boolean; +/** + * Validate package namespace component. + * @throws {PurlError} When validation fails and options.throws is true. + */ +declare function validateNamespace(namespace: unknown, options?: { + throws?: boolean | undefined; +} | boolean | undefined): boolean; +/** + * Validate qualifier key format and characters. + * @throws {PurlError} When validation fails and options.throws is true. + */ +declare function validateQualifierKey(key: string, options?: { + throws?: boolean | undefined; +} | boolean | undefined): boolean; +/** + * Validate qualifiers object structure and keys. + * @throws {PurlError} When validation fails and options.throws is true. + */ +declare function validateQualifiers(qualifiers: unknown, options?: { + throws?: boolean | undefined; +} | boolean | undefined): boolean; +/** + * Validate that component is present and not empty. + * @throws {PurlError} When validation fails and options.throws is true. + */ +declare function validateRequired(name: string, value: unknown, options?: { + throws?: boolean | undefined; +} | boolean | undefined): boolean; +/** + * Validate that component is required for specific package type. + * @throws {PurlError} When validation fails and options.throws is true. + */ +declare function validateRequiredByType(type: string, name: string, value: unknown, options?: { + throws?: boolean | undefined; +} | boolean | undefined): boolean; +/** + * Validate that value does not start with a number. + * @throws {PurlError} When validation fails and options.throws is true. + */ +declare function validateStartsWithoutNumber(name: string, value: string, options?: { + throws?: boolean | undefined; +} | boolean | undefined): boolean; +/** + * Validate that value is a string type. + * @throws {PurlError} When validation fails and options.throws is true. + */ +declare function validateStrings(name: string, value: unknown, options?: { + throws?: boolean | undefined; +} | boolean | undefined): boolean; +/** + * Validate subpath component. + * Rejects command injection characters (|, ;, `, $, <, >, \) while allowing + * characters that are legitimate in decoded subpaths (?, #, space, etc. which + * get percent-encoded in the PURL string representation). + * @throws {PurlInjectionError} When command injection characters found and options.throws is true. + * @throws {PurlError} When validation fails and options.throws is true. + */ +declare function validateSubpath(subpath: unknown, options?: { + throws?: boolean | undefined; +} | boolean | undefined): boolean; +/** + * Validate package type component format and characters. + * @throws {PurlError} When validation fails and options.throws is true. + */ +declare function validateType(type: unknown, options?: { + throws?: boolean | undefined; +} | boolean | undefined): boolean; +/** + * Validate package version component. + * Rejects command injection characters (|, ;, `, $, <, >, \) while allowing + * characters legitimate in version strings (!, +, -, ., _, ~, space, %, ?, #). + * @throws {PurlInjectionError} When command injection characters found and options.throws is true. + * @throws {PurlError} When validation fails and options.throws is true. + */ +declare function validateVersion(version: unknown, options?: { + throws?: boolean | undefined; +} | boolean | undefined): boolean; +export { validateEmptyByType, validateName, validateNamespace, validateNoInjectionByType, validateQualifiers, validateQualifierKey, validateRequired, validateRequiredByType, validateStartsWithoutNumber, validateStrings, validateSubpath, validateType, validateVersion, }; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/vers.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/vers.d.ts new file mode 100644 index 00000000..125565b9 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/dist/vers.d.ts @@ -0,0 +1,70 @@ +/** + * Valid VERS comparator operators. + */ +type VersComparator = '=' | '!=' | '<' | '<=' | '>' | '>='; +/** + * Special wildcard comparator matching all versions. + */ +type VersWildcard = '*'; +/** + * A single version constraint within a VERS range. + */ +type VersConstraint = { + comparator: VersComparator | VersWildcard; + version: string; +}; +/** + * VERS (VErsion Range Specifier) parser and evaluator. + * + * **Early adoption:** The VERS spec is pre-standard draft. This implementation + * supports semver-based schemes (npm, cargo, golang, gem, etc.). Additional + * version schemes may be added as the spec matures. + * + * @example + * ```typescript + * const range = Vers.parse('vers:npm/>=1.0.0|<2.0.0') + * range.contains('1.5.0') // true + * range.contains('2.0.0') // false + * range.toString() // 'vers:npm/>=1.0.0|<2.0.0' + * + * // Wildcard matches all versions + * Vers.parse('vers:semver/*').contains('999.0.0') // true + * ``` + */ +declare class Vers { + readonly scheme: string; + readonly constraints: readonly VersConstraint[]; + private constructor(); + /** + * Parse a VERS string. + * + * @param versStr - VERS string (e.g., 'vers:npm/>=1.0.0|<2.0.0') + * @returns Vers instance + * @throws {PurlError} If the string is not a valid VERS + */ + static parse(versStr: string): Vers; + /** + * Parse a VERS string. + * + * @param versStr - VERS string (e.g., 'vers:npm/>=1.0.0|<2.0.0') + * @returns Vers instance + * @throws {PurlError} If the string is not a valid VERS + */ + static fromString(versStr: string): Vers; + /** + * Check if a version is contained within this VERS range. + * + * Implements the VERS containment algorithm for semver-based schemes. + * + * @param version - Version string to check + * @returns true if the version matches the range + * @throws {PurlError} If the scheme is not supported + */ + contains(version: string): boolean; + /** + * Serialize to canonical VERS string. + */ + toString(): string; +} +export { Vers }; +export type { VersComparator, VersConstraint, VersWildcard }; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/package.json b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/package.json new file mode 100644 index 00000000..e91ce9a6 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketregistry/packageurl-js/package.json @@ -0,0 +1,112 @@ +{ + "name": "@socketregistry/packageurl-js", + "version": "1.4.2", + "packageManager": "pnpm@11.0.0-rc.0", + "license": "MIT", + "description": "Socket.dev optimized package override for packageurl-js", + "keywords": [ + "Socket.dev", + "package-overrides" + ], + "homepage": "https://github.com/SocketDev/socket-packageurl-js", + "repository": { + "type": "git", + "url": "git+https://github.com/SocketDev/socket-packageurl-js.git" + }, + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "./exists": { + "types": "./dist/exists.d.ts", + "default": "./dist/exists.js" + }, + "./data/npm/builtin-names.json": "./data/npm/builtin-names.json", + "./data/npm/legacy-names.json": "./data/npm/legacy-names.json", + "./package.json": "./package.json" + }, + "files": [ + "dist/**/*", + "data/**/*.json", + "CHANGELOG.md" + ], + "engines": { + "node": ">=18.20.8", + "pnpm": ">=11.0.0-rc.0" + }, + "sideEffects": false, + "scripts": { + "build": "node scripts/build.mjs", + "bump": "node scripts/bump.mjs", + "check": "node scripts/check.mjs", + "ci:validate": "node scripts/ci-validate.mjs", + "clean": "node scripts/clean.mjs", + "cover": "node scripts/cover.mjs", + "fix": "node scripts/fix.mjs", + "format": "oxfmt --write .", + "format:check": "oxfmt --check .", + "lint": "node scripts/lint.mjs", + "security": "agentshield scan && { command -v zizmor >/dev/null && zizmor .github/ || echo 'zizmor not installed — run pnpm run setup to install'; }", + "precommit": "pnpm run check --lint --staged", + "prepare": "husky", + "prepublishOnly": "echo 'ERROR: Use GitHub Actions workflow for publishing' && exit 1", + "publish": "node scripts/publish.mjs", + "publish:ci": "node scripts/publish.mjs --tag ${DIST_TAG:-latest}", + "claude": "node scripts/claude.mjs", + "test": "node scripts/test.mjs", + "type": "tsgo --noEmit -p .config/tsconfig.check.json", + "update": "node scripts/update.mjs", + "update:data:npm": "node scripts/update-data-npm.mjs" + }, + "devDependencies": { + "@anthropic-ai/claude-code": "2.1.92", + "@babel/parser": "7.29.0", + "@dotenvx/dotenvx": "1.52.0", + "@oxlint/migrate": "1.51.0", + "@socketsecurity/lib": "5.18.2", + "@socketsecurity/registry": "2.0.2", + "@types/node": "24.9.2", + "@typescript/native-preview": "7.0.0-dev.20250926.1", + "@vitest/coverage-v8": "4.0.3", + "all-the-package-names": "2.0.0", + "all-the-package-names-v1.3905.0": "npm:all-the-package-names@1.3905.0", + "del": "8.0.1", + "dev-null-cli": "2.0.0", + "ecc-agentshield": "1.4.0", + "esbuild": "0.25.11", + "fast-glob": "3.3.3", + "globals": "16.4.0", + "husky": "9.1.7", + "magic-string": "0.30.21", + "nock": "14.0.10", + "oxfmt": "0.37.0", + "oxlint": "1.52.0", + "pacote": "21.0.1", + "semver": "7.7.2", + "taze": "19.9.2", + "type-coverage": "2.29.7", + "typescript": "5.9.2", + "validate-npm-package-name": "6.0.2", + "vitest": "4.0.3", + "yoctocolors-cjs": "2.1.3" + }, + "socket": { + "categories": [ + "levelup" + ] + }, + "typeCoverage": { + "cache": true, + "atLeast": 100, + "ignoreAsAssertion": true, + "ignoreCatch": true, + "ignoreEmptyType": true, + "ignore-non-null-assertion": true, + "ignore-type-assertion": true, + "ignore-files": "test/*", + "strict": true + } +} diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/CHANGELOG.md b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/CHANGELOG.md new file mode 100644 index 00000000..5f965fac --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/CHANGELOG.md @@ -0,0 +1,1817 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [5.18.2](https://github.com/SocketDev/socket-lib/releases/tag/v5.18.2) - 2026-04-14 + +### Removed + +- Remove unused `plugins/` directory and `./plugins/babel-plugin-inline-require-calls` export — no downstream consumers; socket-cli maintains its own local copies + +## [5.18.1](https://github.com/SocketDev/socket-lib/releases/tag/v5.18.1) - 2026-04-14 + +### Changed — build + +- Dedup npm-pack.js bundle via pnpm overrides: pacote 21.5.0, make-fetch-happen 15.0.5, and 7 transitive npm packages (npm-bundled, npm-normalize-package-bin, json-parse-even-better-errors, @npmcli/installed-package-contents, @npmcli/name-from-folder, @npmcli/promise-spawn, @npmcli/redact) +- npm-pack.js: 69,738 → 66,443 lines (2.59MB → 2.46MB), 22 duplicate packages removed + +## [5.18.0](https://github.com/SocketDev/socket-lib/releases/tag/v5.18.0) - 2026-04-14 + +### Added — dlx + +- Socket Firewall API check before package downloads — resolves dependency tree via `buildIdealTree`, checks all packages against `firewall-api.socket.dev/purl` in parallel, blocks on critical/high severity alerts + +### Changed — http-request + +- Default `User-Agent` header updated from `socket-registry/1.0` to `socketsecurity-lib/{version}` + +## [5.17.0](https://github.com/SocketDev/socket-lib/releases/tag/v5.17.0) - 2026-04-14 + +### Added — paths + +- `isUnixPath()` — detect MSYS/Git Bash drive letter notation (`/c/...`) + +### Changed — paths + +- `normalizePath()` now converts MSYS drive letters on Windows (`/c/path` → `C:/path`) +- `fromUnixPath()` now produces native Windows paths with backslashes (`/c/path` → `C:\path`), making it the true inverse of `toUnixPath()` + +## [5.16.0](https://github.com/SocketDev/socket-lib/releases/tag/v5.16.0) - 2026-04-14 + +### Added — paths + +- `fromUnixPath()` — convert MSYS/Git Bash Unix-style paths (`/c/path`) back to native Windows format (`C:/path`), inverse of `toUnixPath` (#168) + +### Fixed — dlx + +- Normalize dlx directory path in `isInSocketDlx` for Windows compatibility + +## [5.15.0](https://github.com/SocketDev/socket-lib/releases/tag/v5.15.0) - 2026-04-06 + +### Added — http-request + +- `stream` option on `HttpRequestOptions` — resolves with `HttpResponse` immediately after headers arrive, leaving `rawResponse` unconsumed for piping to files +- `headers`, `ok`, `status`, `statusText` fields on `HttpDownloadResult` + +### Changed — http-request + +- `httpDownload` now uses `httpRequest` with `stream: true` internally, eliminating ~120 lines of duplicated HTTP plumbing + +## [5.14.0](https://github.com/SocketDev/socket-lib/releases/tag/v5.14.0) - 2026-04-06 + +### Added — http-request + +- `HttpResponseError` class — thrown on non-2xx when `throwOnError` is enabled, carries the full `HttpResponse` +- `throwOnError` option on `HttpRequestOptions` — non-2xx responses throw instead of resolving with `ok: false`, enabling retry of HTTP errors +- `onRetry` callback on `HttpRequestOptions` — customize retry behavior per-attempt (return `false` to stop, a `number` to override delay, `undefined` for default backoff) +- Streaming body support — `body` accepts `Readable` streams (incl. `form-data` npm package), auto-merges `getHeaders()` when present +- `parseRetryAfterHeader()` — standalone RFC 7231 §7.1.3 `Retry-After` header parser (strict integer seconds + HTTP-date formats) +- `sanitizeHeaders()` — redact sensitive headers (`authorization`, `cookie`, `set-cookie`, `proxy-authorization`, `proxy-authenticate`, `www-authenticate`) for safe logging + +### Changed — http-request + +- `HttpRequestOptions.body` type widened from `Buffer | string` to `Buffer | Readable | string` +- Redirect responses now drained via `res.resume()` to free sockets +- `maxResponseSize` exceeded now cleans up both response and request +- `onResponse` hooks wrapped in try/catch — user hook errors can no longer leave promises pending + +## [5.13.0](https://github.com/SocketDev/socket-lib/releases/tag/v5.13.0) - 2026-04-05 + +### Added — http-request + +- `readIncomingResponse()` — reads and buffers a Node.js `IncomingResponse` into an `HttpResponse` (#143) + - Useful for converting raw responses from code that bypasses `httpRequest()` (e.g. multipart form-data uploads) into the standard `HttpResponse` interface +- `IncomingResponse` type alias — disambiguates `IncomingMessage` as a client-side response +- `IncomingRequest` type alias — disambiguates `IncomingMessage` as a server-side request + +### Changed — http-request + +- Internal `httpRequestAttempt` callbacks now use `IncomingResponse` type +- `HttpResponse.rawResponse` type narrowed from `IncomingMessage` to `IncomingResponse` + +## [5.12.0](https://github.com/SocketDev/socket-lib/releases/tag/v5.12.0) - 2026-04-04 + +### Added — http-request + +- Lifecycle hooks (`onRequest`/`onResponse`) on `HttpRequestOptions` (#133) + - Fire per-attempt — retries and redirects each trigger separate hook calls + - `HttpHooks`, `HttpHookRequestInfo`, `HttpHookResponseInfo` types exported +- `maxResponseSize` option to reject responses exceeding a byte limit + - Works through redirects, `httpJson`, and `httpText` +- `rawResponse` property on `HttpResponse` exposing the underlying `IncomingMessage` +- `enrichErrorMessage()` exported for reusable error enrichment + +### Changed — http-request + +- Error messages now include HTTP method and URL for easier debugging +- `HttpResponse.headers` type changed from `Record` to `IncomingHttpHeaders` + +## [5.11.4](https://github.com/SocketDev/socket-lib/releases/tag/v5.11.4) - 2026-03-28 + +### Changed + +- **perf**: Lazy-load heavy external sub-bundles across 7 modules (#119) + - `sorts.ts`: Defer semver (2.5 MB via npm-pack) and fastSort until first use + - `versions.ts`: Defer semver until first use + - `archives.ts`: Defer adm-zip (102 KB) and tar-fs (105 KB) until extraction + - `globs.ts`: Defer fast-glob and picomatch (260 KB via pico-pack) until glob execution + - `fs.ts`: Defer del (260 KB via pico-pack) until safeDelete call + - `spawn.ts`: Defer @npmcli/promise-spawn (17 KB) until async spawn + - `strings.ts`: Defer get-east-asian-width (10 KB) until stringWidth call +- Importing lightweight exports (isObject, httpJson, localeCompare, readJsonSync, stripAnsi) no longer loads heavy externals at module init time + +## [5.11.3](https://github.com/SocketDev/socket-lib/releases/tag/v5.11.3) - 2026-03-26 + +### Fixed + +- **build**: Deduplicate shared deps across external bundles (#110) +- **quality**: Comprehensive quality scan fixes across codebase (#111) +- **releases**: Add in-memory TTL cache for GitHub API responses +- **releases**: Guard against missing assets in GitHub release response (#112) +- **process-lock**: Fix Windows path separator handling for lock directory creation (#112) + +## [5.11.2](https://github.com/SocketDev/socket-lib/releases/tag/v5.11.2) - 2026-03-24 + +### Added + +- **http-request**: Custom CA certificate support for TLS connections + - `httpRequest`, `httpJson`, `httpText` accept `ca` option for custom certificate authorities + - `httpDownload` accepts `ca` option, threaded through redirects and retries + - `fetchChecksums` accepts `ca` option, passed through to underlying request + - Enables SSL_CERT_FILE support when NODE_EXTRA_CA_CERTS is unavailable at process startup + +## [5.11.1](https://github.com/SocketDev/socket-lib/releases/tag/v5.11.1) - 2026-03-24 + +### Added + +- **dlx/binary**: Added `sha256` option to `dlxBinary()`, `downloadBinary()`, and `downloadBinaryFile()` + - Enables SHA-256 checksum verification for binary downloads via httpDownload + - Verification happens during download (fails early if checksum mismatches) + - Complements existing `integrity` option (SRI sha512 format, verified post-download) + +## [5.11.0](https://github.com/SocketDev/socket-lib/releases/tag/v5.11.0) - 2026-03-23 + +### Added + +- **http-request**: Checksum verification for secure downloads + - `parseChecksums(text)`: Parse checksums file text into filename→hash map + - Supports GNU style (`hash filename`), BSD style (`SHA256 (file) = hash`), and single-space format + - Handles Windows CRLF and Unix LF line endings + - Returns null-prototype object to prevent prototype pollution + - `fetchChecksums(url, options?)`: Fetch and parse checksums from URL + - Supports `headers` and `timeout` options + - `httpDownload` now accepts `sha256` option to verify downloaded files + - Verification happens before atomic rename (file not saved if hash mismatches) + - Accepts uppercase hashes (normalized to lowercase internally) + +## [5.10.0](https://github.com/SocketDev/socket-lib/releases/tag/v5.10.0) - 2026-03-14 + +### Changed + +- **releases/socket-btm**: Refactored `downloadSocketBtmRelease()` API for caller-controlled download paths + - Tool name moved from config object to required first parameter + - Config object is now optional second parameter (was required) + - Removed automatic `/${toolName}/${platformArch}` directory nesting - callers now have full control over download directory structure + - All optional parameters in config types now explicitly typed as `| undefined` + - Migration example: + - Before: `downloadSocketBtmRelease({ tool: 'lief', downloadDir: 'build' })` + - After: `downloadSocketBtmRelease('lief', { downloadDir: 'build' })` + - Rationale: Previous automatic path nesting created unexpected directory structures (e.g., `build/downloaded/lief/darwin-arm64/lief/assets/`) making it impossible for callers to predict exact file locations + +## [5.9.1](https://github.com/SocketDev/socket-lib/releases/tag/v5.9.1) - 2026-03-14 + +### Fixed + +- **fs**: `safeDelete()` and `safeDeleteSync()` now properly implement retry logic + - Previously `maxRetries` was incorrectly passed as `concurrency` to del (parallelism, not retries) + - `safeDelete()` now wraps `deleteAsync()` with `pRetry()` for exponential backoff + - `safeDeleteSync()` implements sync retry loop with `Atomics.wait()` for non-blocking sleep + - Both use `backoffFactor: 2` (delay doubles each retry: 200ms → 400ms → 800ms by default) + - `maxRetries` and `retryDelay` options in `RemoveOptions` now work as documented + +## [5.9.0](https://github.com/SocketDev/socket-lib/releases/tag/v5.9.0) - 2026-03-14 + +### Changed + +- **releases/socket-btm**: `getPlatformArch()` now normalizes Windows platform to `win` instead of `win32` + - Returns `win-x64`, `win-arm64` instead of `win32-x64`, `win32-arm64` + - Consistent with `getBinaryAssetName()` which already uses `win` for Windows assets + - Aligns with socket-btm and Node.js convention: use `win` for file/folder names, `win32` for platform checks (`process.platform`) + - Added `PLATFORM_MAP` for explicit platform name mapping (darwin, linux, win32 → win) + - Now throws `Error: Unsupported platform` for unknown platform values + +## [5.8.2](https://github.com/SocketDev/socket-lib/releases/tag/v5.8.2) - 2026-03-13 + +### Fixed + +- **http-request**: Download to temp file then atomically rename to prevent corruption + - Downloads now write to `{destPath}.download` temp file first + - On success, atomically renames to the destination path + - On failure, cleans up temp file and preserves any existing file at destination + - Prevents partial/corrupted files from CI caching causing extraction failures + +## [5.8.1](https://github.com/SocketDev/socket-lib/releases/tag/v5.8.1) - 2026-03-11 + +### Performance + +- **windows**: Add comprehensive caching for expensive PATH resolution operations + - `getBinPath()`, `getBinPathSync()`: Cache binary path lookups + - `findRealBin()`: Cache `all:true` lookups and use single `whichSync({ all: true })` call + - `getVoltaBinPath()`: Cache Volta binary resolution + - `spawn()`: Cache binary path resolution before spawning + - `getGitPath()`: Cache git binary path + - `getCachedRealpath()`: New helper caching `realpathSync()` calls for git operations + - `findGitRoot()`: Cache git root directory lookups + - `findPackageJson()`: Cache package.json path lookups + - `readPackageJson()`: Cache parsed package.json content + - `resolveBinaryPath()`: Cache binary path resolution with Windows extension handling + - `NPM_BIN_PATH`, `NPM_REAL_EXEC_PATH`: Share npm path resolution to avoid duplicate `which.sync()` calls + - `ProcessLockManager.isStale()`: Use single `statSync({ throwIfNoEntry: false })` instead of `existsSync()` + `statSync()` + - All caches validate entries with `existsSync()` and remove stale entries automatically + +## [5.8.0](https://github.com/SocketDev/socket-lib/releases/tag/v5.8.0) - 2026-03-10 + +### Added + +- **archives**: Added secure archive extraction utilities with support for ZIP, TAR, TAR.GZ, and TGZ formats + - Configurable limits: `maxFileSize` (default 100MB), `maxTotalSize` (default 1GB) + - Cross-platform path normalization + - External dependencies: adm-zip@0.5.16, tar-fs@3.1.2 (bundled, +212KB) + - Security features: path traversal protection, file size limits, total size limits, symlink blocking + - Strip option to remove leading path components (like tar `--strip-components`) + - `detectArchiveFormat()` - Detect archive type from file extension + - `extractArchive()` - Generic extraction with auto-format detection + - `extractTar()`, `extractTarGz()`, `extractZip()` - Format-specific extractors + +- **releases/github**: Added archive extraction support for GitHub releases + - Auto-detects format from asset filename + - Enhanced `downloadAndExtractZip()` to use generic archive helpers + - Supports ZIP, TAR, TAR.GZ, and TGZ assets + - `downloadAndExtractArchive()` - Generic archive download and extraction + +### Changed + +- **dependencies**: Deduplicated 14 external bundle packages to single versions using pnpm overrides and patches + +## [5.7.0](https://github.com/SocketDev/socket-lib/releases/tag/v5.7.0) - 2026-02-12 + +### Added + +- **env**: Added `isInEnv()` helper function to check if an environment variable key exists, regardless of its value + - Returns `true` even for empty strings, `"false"`, `"0"`, etc. + - Follows same override resolution order as `getEnvValue()` (isolated overrides → shared overrides → process.env) + - Useful for detecting presence of environment variables independent of their value + +- **dlx**: Added new exported helper functions + - `downloadBinaryFile()` - Downloads a binary file from a URL to the dlx cache directory + - `ensurePackageInstalled()` - Ensures an npm package is installed and cached via Arborist + - `getBinaryCacheMetadataPath()` - Gets the file path to dlx binary cache metadata (`.dlx-metadata.json`) + - `isBinaryCacheValid()` - Checks if a cached dlx binary is still valid based on TTL and timestamp + - `makePackageBinsExecutable()` - Makes npm package binaries executable on Unix systems + - `parsePackageSpec()` - Parses npm package spec strings (e.g., `pkg@1.0.0`) into name and version + - `resolveBinaryPath()` - Resolves the absolute path to a binary within an installed package + - `writeBinaryCacheMetadata()` - Writes dlx binary cache metadata with integrity, size, and source info + +- **releases**: Added `createAssetMatcher()` utility function for GitHub release asset pattern matching + - Creates matcher functions that test strings against glob patterns, prefix/suffix, or RegExp + - Used for dynamic asset discovery in GitHub releases (e.g., matching platform-specific binaries) + +### Changed + +- **env**: Updated `getCI()` to use `isInEnv()` for more accurate CI detection + - Now returns `true` whenever the `CI` key exists in the environment, not just when truthy + - Matches standard CI detection behavior where the presence of the key (not its value) indicates a CI environment + +### Fixed + +- **github**: Fixed JSON parsing crash vulnerability by adding try-catch around `JSON.parse()` in GitHub API responses + - Prevents crashes on malformed, incomplete, or binary responses + - Error messages now include the response URL for better debugging + +- **dlx/binary**: Fixed clock skew vulnerabilities in cache validation + - Cache entries with future timestamps (clock skew) are now treated as expired + - Metadata writes now use atomic write-then-rename pattern to prevent corruption + - Added TOCTOU race protection by re-checking binary existence after metadata read + +- **dlx/cache cleanup**: Fixed handling of future timestamps during cache cleanup + - Entries with future timestamps (due to clock skew) are now properly treated as expired + +- **dlx/package**: Fixed scoped package parsing bug where `@scope/package` was incorrectly parsed + - Changed condition from `startsWith('@')` to `atIndex === 0` for more precise detection + - Fixes installation failures for scoped packages like `@socketregistry/lib` + +- **cache-with-ttl**: Added clock skew detection to TTL cache + - Far-future `expiresAt` values (>2x TTL) are now treated as expired + - Protects against cache poisoning from clock skew + +- **packages/specs**: Fixed unconditional `.git` truncation in Git URL parsing + - Now only removes `.git` suffix when URL actually ends with `.git` + - Prevents incorrect truncation of URLs containing `.git` in the middle + +- **releases/github**: Fixed TOCTOU race condition in binary download verification + - Re-checks binary existence after reading version file + - Ensures binary is re-downloaded if missing despite version file presence + +- **provenance**: Fixed incorrect package name in provenance workflow + - Changed from `@socketregistry/lib` to `@socketsecurity/lib` + +## [5.6.0](https://github.com/SocketDev/socket-lib/releases/tag/v5.6.0) - 2026-02-08 + +### Added + +- **http-request**: Added automatic default headers for JSON and text requests + - `httpJson()` now automatically sets `Accept: application/json` header + - `httpJson()` automatically sets `Content-Type: application/json` when body is present + - `httpText()` now automatically sets `Accept: text/plain` header + - `httpText()` automatically sets `Content-Type: text/plain` when body is present + - User-provided headers always override defaults + - Simplifies API usage - no need to manually set common headers + +### Changed + +- **http-request**: Renamed HTTP helper functions to support all HTTP methods (BREAKING CHANGE) + - `httpGetJson()` → `httpJson()` - Now supports GET, POST, PUT, DELETE, PATCH, etc. + - `httpGetText()` → `httpText()` - Now supports all HTTP methods via `method` option + - Functions now accept `method` parameter in options (defaults to 'GET') + - More flexible API that matches modern fetch-style conventions + - **Migration**: Replace `httpGetJson()` calls with `httpJson()` and `httpGetText()` with `httpText()` + +### Fixed + +- **http-request**: Fixed Content-Type header incorrectly sent with empty string body + - Empty string body (`""`) no longer triggers Content-Type header + - Changed condition from `if (body !== undefined)` to `if (body)` for semantic correctness + - Empty string represents "no content" and should not declare a Content-Type + - Affects `httpJson()` and `httpText()` functions + - Fixes potential API compatibility issues with servers expecting no Content-Type for empty bodies + - Added comprehensive test coverage for empty string edge case + +## [5.5.3](https://github.com/SocketDev/socket-lib/releases/tag/v5.5.3) - 2026-01-20 + +### Fixed + +- **deps**: Added patch for execa@2.1.0 to fix signal-exit v4 compatibility. The package was using default import syntax with signal-exit v4, which now exports onExit as a named export. + +## [5.5.2](https://github.com/SocketDev/socket-lib/releases/tag/v5.5.2) - 2026-01-20 + +### Changed + +- **dlx/package**: Use `getSocketCacacheDir()` instead of `getPacoteCachePath()` for Arborist cache configuration + - Ensures consistent use of Socket's shared cacache directory (`~/.socket/_cacache`) + - Removes dependency on pacote cache path extraction which could fail + - Simplifies cache configuration by using reliable Socket path utility + +## [5.5.1](https://github.com/SocketDev/socket-lib/releases/tag/v5.5.1) - 2026-01-12 + +### Fixed + +- Fixed dotenvx compatibility with pre-commit hooks +- Fixed empty releases being returned when finding latest release + +## [5.5.0](https://github.com/SocketDev/socket-lib/releases/tag/v5.5.0) - 2026-01-12 + +### Added + +- **dlx/detect**: Executable type detection utilities for DLX cache and local file paths + - `detectDlxExecutableType()`: Detects Node.js packages vs native binaries in DLX cache by checking for node_modules/ directory + - `detectExecutableType()`: Generic entry point that routes to appropriate detection strategy + - `detectLocalExecutableType()`: Detects executables on local filesystem by checking package.json bin field or file extension + - `isJsFilePath()`: Validates if a file path has .js, .mjs, or .cjs extension + - `isNativeBinary()`: Simplified helper that returns true for native binary executables + - `isNodePackage()`: Simplified helper that returns true for Node.js packages + +### Fixed + +- **releases/github**: Sort releases by published_at to reliably find latest release instead of relying on creation order + +## [5.4.1](https://github.com/SocketDev/socket-lib/releases/tag/v5.4.1) - 2026-01-10 + +### Fixed + +- **build**: Removed debug module stub to bundle real debug package. The stub was missing `enable()` and `disable()` methods, causing errors when downstream projects re-bundled the lib. + +## [5.4.0](https://github.com/SocketDev/socket-lib/releases/tag/v5.4.0) - 2026-01-07 + +### Added + +- **releases/github**: Extended release functions to accept glob patterns for asset discovery + - `getReleaseAssetUrl()` now accepts glob patterns: `'yoga-sync-*.mjs'`, `'models-*.tar.gz'` + - `downloadReleaseAsset()` now accepts glob patterns for automatic asset discovery + - `getLatestRelease()` now accepts asset patterns to find releases with matching assets + - Supports wildcards, brace expansion, RegExp patterns, and prefix/suffix objects + - Uses picomatch for robust glob pattern matching + +- **releases/socket-btm**: Extended `downloadSocketBtmRelease()` to accept glob patterns + - `asset` parameter now accepts wildcards: `'yoga-sync-*.mjs'`, `'models-*.tar.gz'` + - Automatically discovers and downloads latest matching asset + - Eliminates need for hardcoded asset names in build scripts + +## [5.3.0](https://github.com/SocketDev/socket-lib/releases/tag/v5.3.0) - 2026-01-07 + +### Added + +- **releases/socket-btm**: Exported helper functions for external use + - `detectLibc()`: Detect musl vs glibc on Linux systems + - `getBinaryAssetName()`: Get GitHub asset name for platform/arch + - `getBinaryName()`: Get binary filename with platform-appropriate extension + - `getPlatformArch()`: Get platform-arch identifier for directory structure + +- **releases/github**: Exported `getAuthHeaders()` for GitHub API authentication + - Returns headers with `Accept`, `X-GitHub-Api-Version`, and optional `Authorization` + - Checks `GH_TOKEN` and `GITHUB_TOKEN` environment variables + +## [5.2.1](https://github.com/SocketDev/socket-lib/releases/tag/v5.2.1) - 2026-01-06 + +### Fixed + +- **releases**: Fixed "Text file busy" errors when executing downloaded binaries + - Changed `downloadGitHubRelease()` to use synchronous `chmodSync()` instead of async `chmod()` + - Ensures file system operations complete before binary execution + - Prevents race conditions in CI/CD environments where async operations may not fully flush to disk + +## [5.2.0](https://github.com/SocketDev/socket-lib/releases/tag/v5.2.0) - 2026-01-06 + +### Added + +- **releases**: Added GitHub release download utilities for cross-project use + - Added `downloadGitHubRelease()` for downloading releases from any GitHub repository + - Added `downloadSocketBtmRelease()` specialized wrapper for socket-btm releases + - Features version caching with `.version` files to avoid redundant downloads + - Supports cross-platform binary downloads (darwin, linux, win32) with automatic platform/arch detection + - Includes Linux musl/glibc support with musl as default for broader compatibility + - Automatically removes macOS quarantine attributes from downloaded binaries + - Supports generic asset downloads (WASM files, models, etc.) + - API inspired by industry tools: `brew`, `cargo`, `gh` for intuitive usage + - Package exports: `@socketsecurity/lib/releases/github` and `@socketsecurity/lib/releases/socket-btm` + +## [5.1.4](https://github.com/SocketDev/socket-lib/releases/tag/v5.1.4) - 2025-12-30 + +### Fixed + +- **dependencies**: Removed unnecessary `http2` module dependency from `@sigstore/sign@4.1.0` + - Added pnpm override to force `@sigstore/sign@4.1.0` across all dependencies + - Created patch to inline HTTP header and status constants instead of importing `http2` module + - Eliminates loading of Node.js `http2` module for HTTP/1.1-only operations + +## [5.1.3](https://github.com/SocketDev/socket-lib/releases/tag/v5.1.3) - 2025-12-29 + +### Fixed + +- **http-request**: Fixed `httpDownload()` to properly handle HTTP redirects (3xx status codes) + - Added `followRedirects` option (default: `true`) to enable automatic redirect following + - Added `maxRedirects` option (default: `5`) to limit redirect chain length + - Now supports downloading from services that use CDN redirects, such as GitHub release assets + - Prevents GitHub API quota exhaustion by following `browser_download_url` redirects instead of using API endpoints + - Resolves "Request quota exhausted" errors when downloading GitHub release assets + +## [5.1.2](https://github.com/SocketDev/socket-lib/releases/tag/v5.1.2) - 2025-12-28 + +### Fixed + +- **paths**: Fixed missing `getPathValue()` caching in `getSocketDlxDir()` + - Now uses `getPathValue()` for performance, consistent with `getSocketUserDir()` and `getSocketCacacheDir()` + - Adds test override support via `setPath('socket-dlx-dir', ...)` + - Test helper `mockHomeDir()` now properly invalidates path cache with `resetPaths()` calls + - Resolves cache persistence issues in test environments + +## [5.1.1](https://github.com/SocketDev/socket-lib/releases/tag/v5.1.1) - 2025-12-28 + +### Added + +- **paths**: Added `SOCKET_HOME` environment variable support to customize Socket base directory + - `getSocketUserDir()` now checks `SOCKET_HOME` before defaulting to `~/.socket` + - `getSocketDlxDir()` inherits `SOCKET_HOME` support (priority: `SOCKET_DLX_DIR` > `SOCKET_HOME/_dlx` > `~/.socket/_dlx`) + - Enables flexible directory configuration for restricted or custom environments + +### Changed + +- **paths**: Enhanced directory resolution with temporary directory fallback + - `getUserHomeDir()` now falls back to `os.tmpdir()` when home directory is unavailable + - Improves resilience in containerized and restricted environments + - Priority order: `HOME` > `USERPROFILE` > `os.homedir()` > `os.tmpdir()` + +## [5.1.0](https://github.com/SocketDev/socket-lib/releases/tag/v5.1.0) - 2025-12-17 + +### Added + +- **types**: Added `ALPM` and `VSCODE` to `PURL_Type` enum + - `ALPM`: Arch Linux Package Manager ecosystem + - `VSCODE`: Visual Studio Code extensions ecosystem + +## [5.0.2](https://github.com/SocketDev/socket-lib/releases/tag/v5.0.2) - 2025-12-15 + +### Changed + +- **signal-exit**: `signals()` now auto-initializes its internal state + - Commit: [`8cb0576`](https://github.com/SocketDev/socket-lib/commit/8cb0576) + +## [5.0.1](https://github.com/SocketDev/socket-lib/releases/tag/v5.0.1) - 2025-12-11 + +### Added + +- **http-request**: Enhanced `httpDownload()` with automatic progress logging via Logger integration + - New `logger` option: Pass a Logger instance for automatic progress tracking + - New `progressInterval` option: Configure progress reporting frequency (default: 10%) + - Progress format: `Progress: XX% (Y.Y MB / Z.Z MB)` + - `onProgress` callback takes precedence over `logger` when both are provided + - Commit: [`91e5db5`](https://github.com/SocketDev/socket-lib/commit/91e5db5) + +## [5.0.0](https://github.com/SocketDev/socket-lib/releases/tag/v5.0.0) - 2025-12-04 + +### Added + +- **json/edit**: New `EditableJson` base class for generic JSON file manipulation with formatting preservation + - Extracted from `EditablePackageJson` to enable code reuse via composition pattern + - Supports reading, modifying, and writing JSON files while preserving formatting + - Export: `@socketsecurity/lib/json/edit` + +- **json/format**: New JSON formatting utilities for consistent JSON manipulation + - Functions for analyzing and preserving JSON formatting patterns + - Export: `@socketsecurity/lib/json/format` + +- **json/parse**: New JSON parsing utilities + - `isJsonPrimitive()`: Check if value is a JSON primitive type + - `jsonParse()`: Parse JSON with error handling + - Export: `@socketsecurity/lib/json/parse` + +- **json/types**: New JSON type definitions and interfaces + - Export: `@socketsecurity/lib/json/types` + +- **dlx/cache**: New DLX cache utilities + - `generateCacheKey()`: Generate cache keys for DLX packages + - Export: `@socketsecurity/lib/dlx/cache` + +- **dlx/dir**: New DLX directory management utilities + - `clearDlx()`, `clearDlxSync()`: Clear DLX directory + - `dlxDirExists()`, `dlxDirExistsAsync()`: Check if DLX directory exists + - `ensureDlxDir()`, `ensureDlxDirSync()`: Ensure DLX directory exists + - Export: `@socketsecurity/lib/dlx/dir` + +- **dlx/packages**: New DLX package management utilities + - `isDlxPackageInstalled()`, `isDlxPackageInstalledAsync()`: Check if package is installed + - `listDlxPackages()`, `listDlxPackagesAsync()`: List installed packages + - `removeDlxPackage()`, `removeDlxPackageSync()`: Remove installed packages + - Export: `@socketsecurity/lib/dlx/packages` + +- **dlx/paths**: New DLX path utilities + - `getDlxPackageDir()`: Get package directory path + - `getDlxInstalledPackageDir()`: Get installed package directory path + - `getDlxPackageJsonPath()`: Get package.json path + - `getDlxPackageNodeModulesDir()`: Get node_modules directory path + - `isInSocketDlx()`: Check if path is in DLX directory + - Export: `@socketsecurity/lib/dlx/paths` + +### Changed + +- **BREAKING**: Reorganized module paths for better structure and discoverability + - `@socketsecurity/lib/json/editable` → `@socketsecurity/lib/json/edit` + - `@socketsecurity/lib/packages/editable` → `@socketsecurity/lib/packages/edit` + - `@socketsecurity/lib/maintained-node-versions` → `@socketsecurity/lib/constants/maintained-node-versions` + - `@socketsecurity/lib/package-default-node-range` → `@socketsecurity/lib/constants/package-default-node-range` + - `@socketsecurity/lib/package-default-socket-categories` → `@socketsecurity/lib/constants/package-default-socket-categories` + - `@socketsecurity/lib/lifecycle-script-names` → `@socketsecurity/lib/constants/lifecycle-script-names` + - `@socketsecurity/lib/dlx` → Split into `@socketsecurity/lib/dlx/cache`, `@socketsecurity/lib/dlx/dir`, `@socketsecurity/lib/dlx/packages`, `@socketsecurity/lib/dlx/paths` + - `@socketsecurity/lib/dlx-binary` → `@socketsecurity/lib/dlx/binary` + - `@socketsecurity/lib/dlx-manifest` → `@socketsecurity/lib/dlx/manifest` + - `@socketsecurity/lib/dlx-package` → `@socketsecurity/lib/dlx/package` + +- **json**: Reorganized JSON utilities into modular submodules (json/edit, json/format, json/parse, json/types) + - Removed barrel index file in favor of direct submodule imports + - Better separation of concerns and tree-shaking + +- **dlx**: Split monolithic DLX module into focused submodules (cache, dir, packages, paths) + - Improved modularity and maintainability + - Better code organization and discoverability + +## [4.4.0](https://github.com/SocketDev/socket-lib/releases/tag/v4.4.0) - 2025-11-25 + +### Added + +- **fs**: Exported `normalizeEncoding()` function for robust encoding string normalization + - Handles case-insensitive encoding names (e.g., 'UTF-8', 'utf8', 'UTF8') + - Supports encoding aliases (e.g., 'binary' → 'latin1', 'ucs-2' → 'utf16le') + - Fast-path optimization for common encodings + - Defaults to 'utf8' for invalid or null encodings + - Export: `@socketsecurity/lib/fs` + +### Fixed + +- **fs**: `safeReadFile()` and `safeReadFileSync()` type signatures and encoding handling + - Corrected type overloads: `encoding: null` → `Buffer | undefined`, no encoding → `string | undefined` (UTF-8 default) + - Fixed implementation to properly handle `encoding: null` for Buffer returns + +- **suppress-warnings**: `withSuppressedWarnings()` now properly restores warning state + - Fixed state restoration to only remove warning types that were added by the function + - Prevents accidental removal of warnings that were already suppressed + - Ensures correct cleanup behavior when warning types are nested or reused + +## [4.3.0](https://github.com/SocketDev/socket-lib/releases/tag/v4.3.0) - 2025-11-20 + +### Added + +- **globs**: New `glob()` and `globSync()` wrapper functions for fast-glob + - Provides convenient wrappers around fast-glob with normalized options + - Maintains consistent API with existing glob functionality + - Export: `@socketsecurity/lib/globs` + +## [4.1.0](https://github.com/SocketDev/socket-lib/releases/tag/v4.1.0) - 2025-11-17 + +### Added + +- **constants/node**: New version helper functions for cleaner version detection + - `getNodeMinorVersion()`: Extract minor version number + - `getNodePatchVersion()`: Extract patch version number + +### Fixed + +- **constants/node**: Improve Node.js flag management in `getNodeHardenFlags()` + - Properly guard `--experimental-permission` for Node 20-23 only + - Properly guard `--permission` for Node 24+ only + - Properly guard `--force-node-api-uncaught-exceptions-policy` for Node 22+ (was incorrectly applied to all versions) + - Automatically include permission grants from `getNodePermissionFlags()` for Node 24+ + - Remove `--experimental-policy` flag (no policy file provided) + +## [4.0.1](https://github.com/SocketDev/socket-lib/releases/tag/v4.0.1) - 2025-11-17 + +### Changed + +- Removed # path imports and replaced with relative paths + +## [4.0.0](https://github.com/SocketDev/socket-lib/releases/tag/v4.0.0) - 2025-11-15 + +### Changed + +- **paths**: Reorganized path utilities into dedicated `paths/*` submodules for improved modularity +- **imports**: Converted lazy require() calls to ES6 static imports for better tree-shaking and bundler compatibility + +## [3.5.0](https://github.com/SocketDev/socket-lib/releases/tag/v3.5.0) - 2025-11-14 + +### Added + +- **argv/quote**: New utilities for quoting command-line arguments when using `spawn()` with `shell: true` + - `posixQuote(arg)`: Quote arguments for POSIX shells (bash, sh, zsh) using single quotes + - `win32Quote(arg)`: Quote arguments for Windows cmd.exe using double quotes + +## [3.4.0](https://github.com/SocketDev/socket-lib/releases/tag/v3.4.0) - 2025-11-14 + +### Added + +- **Spinner**: New `skip()` and `skipAndStop()` methods for displaying skipped operations + - `skip(text)`: Display skip message alongside spinner (e.g., "Skipping optional step...") + - `skipAndStop(text)`: Display skip message and stop spinner in one call + - Uses cyan ↻ (refresh/reload) symbol with @ ASCII fallback + - Normalizes text formatting consistently with other spinner methods + - Useful for communicating skipped steps during long-running operations + +- **Logger**: New `skip()` method and symbol for skipped operations + - `LOG_SYMBOLS.skip`: New cyan ↻ symbol for skip output (@ ASCII fallback) + - `skip(message)`: Display skip messages with dedicated symbol + - Complements existing info/step/success/error/warning/reason methods + +## [3.3.11](https://github.com/SocketDev/socket-lib/releases/tag/v3.3.11) - 2025-11-14 + +### Fixed + +- **prompts**: Fix "inquirerPrompt is not a function" error in interactive prompts + - Properly handle inquirer modules with multiple exports (select, search) + +## [3.3.10](https://github.com/SocketDev/socket-lib/releases/tag/v3.3.10) - 2025-11-14 + +### Fixed + +- **deps**: Add string-width and wrap-ansi overrides for bundling compatibility + - Forces string-width@8.1.0 and wrap-ansi@9.0.2 for compatibility with strip-ansi@7.1.2 + +## [3.3.9](https://github.com/SocketDev/socket-lib/releases/tag/v3.3.9) - 2025-11-14 + +### Fixed + +- **deps**: Add strip-ansi override to fix bundling compatibility + - Forces strip-ansi@7.1.2 for compatibility with ansi-regex@6.2.2 + +## [3.3.8](https://github.com/SocketDev/socket-lib/releases/tag/v3.3.8) - 2025-11-14 + +### Fixed + +- **spinner**: Clear remaining artifacts after withSpinner stops + - Fixed rogue spinner characters persisting after spinner completes + +## [3.3.7](https://github.com/SocketDev/socket-lib/releases/tag/v3.3.7) - 2025-11-13 + +### Changed + +- **refactor**: Add explicit `.js` extensions to external require calls + - Improves module resolution clarity and compatibility with modern bundlers + - Updated 18 require calls across 10 source files + +## [3.3.6](https://github.com/SocketDev/socket-lib/releases/tag/v3.3.6) - 2025-11-13 + +### Changed + +- **deps**: Add pnpm overrides to consolidate package versions + - Force single versions: `@npmcli/arborist@9.1.6`, `@npmcli/run-script@10.0.0`, `semver@7.7.2`, `ansi-regex@6.2.2`, `lru-cache@11.2.2` + - Update patch from `@npmcli/run-script@9.1.0` to `@npmcli/run-script@10.0.0` + - Reduces duplicate dependencies and potential version conflicts + +## [3.3.5](https://github.com/SocketDev/socket-lib/releases/tag/v3.3.5) - 2025-11-13 + +### Fixed + +- **build**: Add patches to prevent node-gyp bundling issues + +## [3.3.4](https://github.com/SocketDev/socket-lib/releases/tag/v3.3.4) - 2025-11-13 + +### Fixed + +- **build**: Mark node-gyp as external in npm-pack bundle + +## [3.3.3](https://github.com/SocketDev/socket-lib/releases/tag/v3.3.3) - 2025-11-13 + +### Fixed + +- **build**: Break node-gyp string to prevent bundler issues with ESM/CJS interop + +## [3.3.2](https://github.com/SocketDev/socket-lib/releases/tag/v3.3.2) - 2025-11-13 + +### Changed + +- **dlx**: Install package dependencies after download +- **external**: Optimize npm package bundle sizes (~3MB reduction) + +## [3.3.1](https://github.com/SocketDev/socket-lib/releases/tag/v3.3.1) - 2025-11-11 + +### Added + +- Added `SOCKET_DOCS_CONTACT_URL` constant for documentation contact support page +- Added `checkbox` prompt support + +## [3.3.0](https://github.com/SocketDev/socket-lib/releases/tag/v3.3.0) - 2025-11-07 + +### Added + +- **Spinner**: New `reason()` and `reasonAndStop()` methods for displaying working/thinking output + - `reason(text)`: Display reason text alongside spinner (e.g., "Analyzing dependencies...") + - `reasonAndStop(text)`: Display reason text and stop spinner in one call + - Normalizes text formatting consistently with other spinner methods + - Useful for communicating progress steps during long-running operations + +- **Logger**: New `reason()` method and symbol for working/thinking output + - `LOG_SYMBOLS.reason`: New symbol for reason output (distinct from info/step symbols) + - `reason(message)`: Display reason messages with dedicated symbol + - Complements existing info/step/success/error/warning methods + +## [3.2.8](https://github.com/SocketDev/socket-lib/releases/tag/v3.2.8) - 2025-11-05 + +### Fixed + +- **build**: Fix CommonJS export script edge cases + - Fixed stray semicolons after comment placeholders in transformed modules + - Fixed incorrect transformation of `module.exports.default` to `module.module.exports` + - Ensures external dependencies and default exports work correctly + +## [3.2.7](https://github.com/SocketDev/socket-lib/releases/tag/v3.2.7) - 2025-11-05 + +### Fixed + +- **build-externals**: Disable minification to preserve exports + - External dependencies are no longer minified during bundling + - Prevents export name mangling that breaks CommonJS interop + - Fixes `semver.parse()` and `semver.major()` being undefined + +- **build**: Fix CommonJS export interop for TypeScript default exports + - Modules with `export default` now work without requiring `.default` accessor + +### Changed + +- **docs**: Moved packages README to correct location (`src/packages/README.md`) + +## [3.2.6](https://github.com/SocketDev/socket-lib/releases/tag/v3.2.6) - 2025-11-05 + +### Fixed + +- **logger**: Replace yoctocolors-cjs rgb() with manual ANSI codes + - The yoctocolors-cjs package doesn't have an rgb() method + - Manually construct ANSI escape sequences for RGB colors (ESC[38;2;r;g;bm...ESC[39m) + - Affects `src/logger.ts` and `src/stdio/prompts.ts` applyColor() functions + +## [3.2.5](https://github.com/SocketDev/socket-lib/releases/tag/v3.2.5) - 2025-11-05 + +### Added + +- **scripts**: Add path alias resolution script (`fix-path-aliases.mjs`) + - Resolves internal path aliases (`#lib/*`, `#constants/*`, etc.) to relative paths in built CommonJS files + +- **build**: Integrate path alias resolution into build pipeline + - Add path alias plugin to esbuild config + - Integrate `fix-path-aliases.mjs` into build process + - Ensures path aliases work correctly in compiled CommonJS output + +## [3.2.4](https://github.com/SocketDev/socket-lib/releases/tag/v3.2.4) - 2025-11-04 + +### Added + +- **Logger**: New `time()` method for timing operations with automatic duration reporting + - Starts a named timer and returns a `stop()` function + - Automatically logs completion with formatted duration (e.g., "Operation completed in 1.23s") + - Useful for performance monitoring and debugging + +### Fixed + +- **Spinner effects**: Fixed star spinner frames by adding trailing space for consistent spacing +- **Build system**: Fixed external dependency bundling issues + - Bundle `@npmcli/package-json` with subpath exports support + - Use `src/external` files as bundle entry points for proper module resolution + - Bundle libnpmexec from npm instead of using vendored version + - Prevent circular dependencies with `createForceNodeModulesPlugin()` to force resolution from node_modules + +## [3.2.3](https://github.com/SocketDev/socket-lib/releases/tag/v3.2.3) - 2025-11-03 + +### Internal + +- **Build system**: Added stub infrastructure for external dependency bundling + - Created organized `scripts/build-externals/stubs/` directory with utility and active stubs + - Added conservative stubs for unused dependencies: `encoding`/`iconv-lite` and `debug` + - Reduces external bundle size by ~18KB (9KB from encoding stubs, 9KB from debug stubs) + +## [3.2.2](https://github.com/SocketDev/socket-lib/releases/tag/v3.2.2) - 2025-11-03 + +### Added + +- **DLX**: Binary permission management with chmod 0o755 for all package binaries + - New `makePackageBinsExecutable()` function ensures all binaries in installed packages are executable + - Aligns with npm's cmd-shim approach for binary permissions + - Handles both single and multiple binary packages + - No-op on Windows (permissions not needed) + +- **DLX**: npm-compatible bin resolution via vendored `getBinFromManifest` + - Cherry-picked `getBinFromManifest` from libnpmexec@10.1.8 (~1.5 KB) + - Avoids 1.1 MB bundle by vendoring single function instead of full package + - Provides battle-tested npm bin resolution strategy + - Maintains user-friendly fallbacks for edge cases + +### Changed + +- **DLX**: Enhanced `findBinaryPath()` with npm's resolution strategy + - Primary: npm's `getBinFromManifest` (handles standard cases and aliases) + - Fallback: user-provided `binaryName` parameter + - Fallback: last segment of package name + - Last resort: first binary in list + +### Performance + +- **Optimized package size**: Reduced bundle size through strategic export minimization and vendoring + - Vendored `getBinFromManifest` function instead of bundling full libnpmexec (~1.1 MB savings) + - Minimized external module exports for better tree-shaking: + - `fast-sort`: Now exports only `{ createNewSortInstance }` (2.1 KB, 96% reduction from ~56 KB) + - `fast-glob`: Now exports only `{ globStream }` (82 KB bundle) + - `del`: Now exports only `{ deleteAsync, deleteSync }` (100 KB bundle) + - `streaming-iterables`: Now exports only `{ parallelMap, transform }` (11 KB, 93% reduction from ~168 KB) + - Total savings: ~1.3 MB (1.1 MB from vendoring + 211 KB from minimized exports) + - Establishes pattern for future external module additions + +## [3.2.1](https://github.com/SocketDev/socket-lib/releases/tag/v3.2.1) - 2025-11-02 + +### Changed + +- **Logger/Spinner**: Use module-level constants to prevent duplicate and rogue spinner indicators + - Call `getDefaultLogger()` and `getDefaultSpinner()` once at module scope instead of repeated calls + - Prevents multiple spinner instances that can cause duplicate or lingering indicators in terminal output + - Applied in `src/dlx-manifest.ts`, `src/stdio/mask.ts`, and `src/spinner.ts` + - Follows DRY principle and aligns with socket-registry/socket-sdk-js patterns + +### Fixed + +- **Scripts**: Fixed undefined logger variable in update script + - Replaced undefined `log` references with `_logger` throughout `scripts/update.mjs` + - Resolves ESLint errors that blocked test execution +- **Tests**: Improved stdout test stability by checking call delta instead of absolute counts + - Fixed flaky CI failures where spy call count was 101 instead of expected 100 + - More robust approach handles potential state leakage between tests +- **Tests**: Removed unnecessary 10ms delay in cache-with-ttl test + - Cache with memoization enabled updates in-memory storage synchronously + - Delay was insufficient in CI and unnecessary given synchronous behavior + - Resolves flaky CI failures where cached values returned undefined + +## [3.2.0](https://github.com/SocketDev/socket-lib/releases/tag/v3.2.0) - 2025-11-02 + +### Added + +- **DLX**: Unified manifest for packages and binaries + - Centralized manifest system for tracking DLX-compatible packages + - Simplifies package and binary lookups for dependency-free execution + +## [3.1.3](https://github.com/SocketDev/socket-lib/releases/tag/v3.1.3) - 2025-11-02 + +### Changed + +- **Dependencies**: Updated `@socketregistry/packageurl-js` to 1.3.5 + +## [3.1.2](https://github.com/SocketDev/socket-lib/releases/tag/v3.1.2) - 2025-11-02 + +### Fixed + +- **External dependencies**: Fixed incorrectly marked external dependencies to use wrapper pattern + - Updated `src/constants/agents.ts` to use `require('../external/which')` instead of direct imports + - Updated `src/zod.ts` to export from `./external/zod'` instead of direct imports + - Maintains zero dependencies policy by ensuring all runtime dependencies go through the external wrapper pattern +- **Spinner**: Fixed undefined properties in setShimmer by handling defaults correctly + +## [3.1.1](https://github.com/SocketDev/socket-lib/releases/tag/v3.1.1) - 2025-11-02 + +### Fixed + +- **Cache TTL**: Fixed flaky test by handling persistent cache write failures gracefully + - Wrapped `cacache.put` in try/catch to prevent failures when persistent cache writes fail or are slow + - In-memory cache is updated synchronously before the persistent write, so immediate reads succeed regardless of persistent cache state + - Improves reliability in test environments and when cache directory has issues + +## [3.1.0](https://github.com/SocketDev/socket-lib/releases/tag/v3.1.0) - 2025-11-01 + +### Changed + +- **File system utilities**: `safeMkdir` and `safeMkdirSync` now default to `recursive: true` + - Nested directories are created by default, simplifying common usage patterns + +## [3.0.6](https://github.com/SocketDev/socket-lib/releases/tag/v3.0.6) - 2025-11-01 + +### Added + +- **Build validation**: Added guard against `link:` protocol dependencies in package.json + - New `validate-no-link-deps.mjs` script automatically runs during `pnpm run check` + - Prevents accidental publication with `link:` dependencies which can cause issues + - Recommends using `workspace:` for monorepos or `catalog:` for centralized version management + - Validates all dependency fields: dependencies, devDependencies, peerDependencies, optionalDependencies + +### Changed + +- **Dependencies**: Updated `@socketregistry/packageurl-js` to 1.3.3 +- **Git hooks**: Committed pre-commit and pre-push hook configurations for version control +- **Scripts**: Removed shebang from `validate-no-link-deps` script (Node.js script, not shell) + +## [3.0.5](https://github.com/SocketDev/socket-lib/releases/tag/v3.0.5) - 2025-11-01 + +### Fixed + +- **Critical: Prompts API breaking changes**: Restored working prompts implementation that was accidentally replaced with non-functional stub in v3.0.0 + - Consolidated all prompts functionality into `src/stdio/prompts.ts` + - Removed unimplemented stub from `src/prompts/` that was throwing "not yet implemented" errors + - Removed `./prompts` package export (use `@socketsecurity/lib/stdio/prompts` instead) + - Restored missing exports: `password`, `search`, `Separator`, and added `createSeparator()` helper + - Fixed `Choice` type to use correct `name` property (matching `@inquirer` API, not erroneous `label`) + +### Added + +- **Theme integration for prompts**: Prompts now automatically use the active theme colors + - Prompt messages styled with `colors.prompt` + - Descriptions and disabled items styled with `colors.textDim` + - Answers and highlights styled with `colors.primary` + - Error messages styled with `colors.error` + - Success indicators styled with `colors.success` + - Exported `createInquirerTheme()` function for converting Socket themes to @inquirer format + - Consistent visual experience with Logger and Spinner theme integration + +- **Theme parameter support**: Logger, Prompts, and text effects now accept optional `theme` parameter + - Pass theme names (`'socket'`, `'sunset'`, `'terracotta'`, `'lush'`, `'ultra'`) or Theme objects + - **Logger**: `new Logger({ theme: 'sunset' })` - uses theme-specific symbol colors + - **Prompts**: `await input({ message: 'Name:', theme: 'ultra' })` - uses theme for prompt styling + - **Text effects**: `applyShimmer(text, state, { theme: 'terracotta' })` - uses theme for shimmer colors + - Instance-specific themes override global theme context when provided + - Falls back to global theme context when no instance theme specified + - **Note**: Spinner already had theme parameter support in v3.0.0 + +### Removed + +- **Unused index entrypoint**: Removed `src/index.ts` and package exports for `"."` and `"./index"` + - This was a leftover from socket-registry and not needed for this library + - Users should import specific modules directly (e.g., `@socketsecurity/lib/logger`) + - Breaking: `import { getDefaultLogger } from '@socketsecurity/lib'` no longer works + - Use: `import { getDefaultLogger } from '@socketsecurity/lib/logger'` instead + +## [3.0.4](https://github.com/SocketDev/socket-lib/releases/tag/v3.0.4) - 2025-11-01 + +### Changed + +- **Sunset theme**: Updated colors from azure blue to warm orange/purple gradient matching Coana branding +- **Terracotta theme**: Renamed from `brick` to `terracotta` for better clarity + +## [3.0.3](https://github.com/SocketDev/socket-lib/releases/tag/v3.0.3) - 2025-11-01 + +### Fixed + +- **Critical: Node.js ESM/CJS interop completely fixed**: Disabled minification to ensure proper ESM named import detection + - Root cause: esbuild minification was breaking Node.js ESM's CJS named export detection + - Solution: Disabled minification entirely (`minify: false` in esbuild config) + - Libraries should not be minified - consumers minify during their own build process + - Unminified esbuild output uses clear `__export` patterns that Node.js ESM natively understands + - Removed `fix-commonjs-exports.mjs` build script - no longer needed with unminified code + - ESM imports now work reliably: `import { getDefaultLogger } from '@socketsecurity/lib/logger'` + - Verified with real-world ESM module testing (`.mjs` files importing from CJS `.js` dist) + +## [3.0.2](https://github.com/SocketDev/socket-lib/releases/tag/v3.0.2) - 2025-11-01 + +### Fixed + +- **Critical: Node.js ESM named imports from CommonJS**: Fixed build output to ensure Node.js ESM can properly detect named exports from CommonJS modules + - Previously, esbuild's minified export pattern placed `module.exports` before variable definitions, causing "Cannot access before initialization" errors + - Build script now uses `@babel/parser` + `magic-string` for safe AST parsing and transformation + - Exports are now correctly placed at end of files after all variable definitions + - Enables proper ESM named imports: `import { getDefaultLogger, Logger } from '@socketsecurity/lib/logger'` + - Fixes socket-cli issue where named imports were failing with obscure initialization errors + +## [3.0.1](https://github.com/SocketDev/socket-lib/releases/tag/v3.0.1) - 2025-11-01 + +### Added + +- **Convenience exports from main index**: Added logger and spinner exports to ease v2→v3 migration + - Logger: `getDefaultLogger()`, `Logger`, `LOG_SYMBOLS` now available from `@socketsecurity/lib` + - Spinner: `getDefaultSpinner()`, `Spinner` now available from `@socketsecurity/lib` + - Both main index (`@socketsecurity/lib`) and subpath (`@socketsecurity/lib/logger`, `@socketsecurity/lib/spinner`) imports now work + - Both import paths return the same singleton instances + +### Fixed + +- **Critical: Spinner crashes when calling logger**: Fixed spinner internal calls to use `getDefaultLogger()` instead of removed `logger` export + - Spinner methods (`start()`, `stop()`, `success()`, `fail()`, etc.) no longer crash with "logger is not defined" errors + - All 5 internal logger access points updated to use the correct v3 API + - Resolves runtime errors when using spinners with hoisted variables + +### Changed + +- **Migration path improvement**: Users can now import logger/spinner from either main index or subpaths, reducing breaking change impact from v3.0.0 + +## [3.0.0](https://github.com/SocketDev/socket-lib/releases/tag/v3.0.0) - 2025-11-01 + +### Added + +- Theme system with 5 built-in themes: `socket`, `sunset`, `terracotta`, `lush`, `ultra` +- `setTheme()`, `getTheme()`, `withTheme()`, `withThemeSync()` for theme management +- `createTheme()`, `extendTheme()`, `resolveColor()` helper functions +- `onThemeChange()` event listener for theme reactivity +- `link()` function for themed terminal hyperlinks in `@socketsecurity/lib/links` +- Logger and spinner now inherit theme colors automatically +- Spinner methods: `enableShimmer()`, `disableShimmer()`, `setShimmer()`, `updateShimmer()` +- DLX cross-platform binary resolution (`.cmd`, `.bat`, `.ps1` on Windows) +- DLX programmatic options aligned with CLI conventions (`force`, `quiet`, `package`) + +### Changed + +- Theme context uses AsyncLocalStorage instead of manual stack management +- Promise retry options renamed: `factor` → `backoffFactor`, `minTimeout` → `baseDelayMs`, `maxTimeout` → `maxDelayMs` + +### Removed + +**BREAKING CHANGES:** + +- `pushTheme()` and `popTheme()` - use `withTheme()` or `withThemeSync()` instead +- `logger` export - use `getDefaultLogger()` instead +- `spinner` export - use `getDefaultSpinner()` instead +- `download-lock.ts` - use `process-lock.ts` instead +- Promise option aliases: `factor`, `minTimeout`, `maxTimeout` + +--- + +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [2.10.3](https://github.com/SocketDev/socket-lib/releases/tag/v2.10.3) - 2025-10-31 + +### Fixed + +- Updated `@socketregistry/packageurl-js` to 1.3.1 to resolve an unintended external dependency +- **Documentation**: Corrected JSDoc `@example` import paths from `@socketsecurity/registry` to `@socketsecurity/lib` across utility modules + - Updated examples in `memoization.ts`, `performance.ts`, `spinner.ts`, `suppress-warnings.ts`, and `tables.ts` + - Ensures documentation reflects correct package name after v1.0.0 rename + +## [2.10.2](https://github.com/SocketDev/socket-lib/releases/tag/v2.10.2) - 2025-10-31 + +### Changed + +- **Package spec parsing**: Refactored to use official `npm-package-arg` library for robust handling of all npm package specification formats (versions, ranges, tags, git URLs) + - Improves reliability when parsing complex package specs + - Better handles edge cases in version ranges and scoped packages + - Falls back to simple parsing if npm-package-arg fails + +### Fixed + +- **Scoped package version parsing**: Fixed critical bug where parsePackageSpec was stripping the `@` prefix from scoped packages with versions + - Example: `@coana-tech/cli@~14.12.51` was incorrectly parsed as `coana-tech/cli@~14.12.51` + - Caused package installation failures for scoped packages in DLX system + +## [2.10.1](https://github.com/SocketDev/socket-lib/releases/tag/v2.10.1) - 2025-10-31 + +### Fixed + +- **Process lock directory creation**: Use recursive mkdir to ensure parent directories exist when creating lock directory +- **Node.js debug flags**: Remove buggy `getNodeDebugFlags()` function that returned debug flags without required argument values + +## [2.10.0](https://github.com/SocketDev/socket-lib/releases/tag/v2.10.0) - 2025-10-30 + +### Added + +- **Unified DLX metadata schema**: Standardized `.dlx-metadata.json` format across TypeScript and C++ implementations + - Exported `DlxMetadata` interface as canonical schema reference + - Core fields: `version`, `cache_key`, `timestamp`, `checksum`, `checksum_algorithm`, `platform`, `arch`, `size`, `source` + - Support for `source` tracking (download vs decompression origin) + - Reserved `extra` field for implementation-specific data + - Comprehensive documentation with examples for both download and decompression use cases + +### Changed + +- **DLX binary metadata structure**: Updated `writeBinaryCacheMetadata()` to use unified schema with additional fields + - Now includes `cache_key` (first 16 chars of SHA-512 hash) + - Added `size` field for cached binary size + - Added `checksum_algorithm` field (currently "sha256") + - Restructured to use `source.type` and `source.url` for origin tracking + - Maintains backward compatibility in `listDlxCache()` reader + +## [2.9.1](https://github.com/SocketDev/socket-lib/releases/tag/v2.9.1) - 2025-10-30 + +### Added + +- **Smart binary detection in dlxPackage**: Automatically finds the correct binary even when package name doesn't match binary name + - If package has single binary, uses it automatically regardless of name + - Resolves packages like `@socketsecurity/cli` (binary: `socket`) without manual configuration + - Falls back to intelligent name matching for multi-binary packages +- **Optional binaryName parameter**: Added `binaryName` option to `DlxPackageOptions` for explicit binary selection when auto-detection isn't sufficient + +### Fixed + +- **Binary resolution for scoped packages**: Fixed issue where `dlxPackage` couldn't find binaries when package name didn't match binary name (e.g., `@socketsecurity/cli` with `bin: { socket: '...' }`) + +## [2.9.0](https://github.com/SocketDev/socket-lib/releases/tag/v2.9.0) - 2025-10-30 + +### Added + +- **Socket.dev URL constants**: Added centralized URL constants for Socket.dev services + - `SOCKET_WEBSITE_URL`: Main Socket.dev website + - `SOCKET_CONTACT_URL`: Contact page + - `SOCKET_DASHBOARD_URL`: Dashboard homepage + - `SOCKET_API_TOKENS_URL`: API tokens settings page + - `SOCKET_PRICING_URL`: Pricing information + - `SOCKET_STATUS_URL`: Service status page + - `SOCKET_DOCS_URL`: Documentation site + - Available via `@socketsecurity/lib/constants/socket` + +### Changed + +- **Enhanced error messages across library**: Comprehensive audit and improvement of error handling + - Added actionable error messages with resolution steps throughout modules + - Improved file system operation errors (permissions, read-only filesystems, path issues) + - Enhanced DLX error messages with clear troubleshooting guidance + - Better error context in process locking, binary downloads, and package operations + - Consistent error formatting with helpful user guidance +- **Consolidated process locking**: Standardized on directory-based lock format across all modules + - All locking operations now use `process-lock` module exclusively + - Lock directories provide atomic guarantees across all filesystems including NFS + - Consistent mtime-based stale detection with 5-second timeout (aligned with npm npx) + - Automatic cleanup on process exit with proper signal handling + +## [2.8.4](https://github.com/SocketDev/socket-lib/releases/tag/v2.8.4) - 2025-10-30 + +### Added + +- **DLX binary helper functions mirror dlx-package pattern** + - `downloadBinary`: Download binary with caching (without execution) + - `executeBinary`: Execute cached binary without re-downloading + - Renamed internal `downloadBinary` to `downloadBinaryFile` to avoid naming conflicts + - Maintains feature parity with `downloadPackage`/`executePackage` from dlx-package + +## [2.8.3](https://github.com/SocketDev/socket-lib/releases/tag/v2.8.3) - 2025-10-30 + +### Fixed + +- **Logger now fully defers all console access for Node.js internal bootstrap compatibility**: Completed lazy initialization to prevent ERR_CONSOLE_WRITABLE_STREAM errors + - Deferred `Object.getOwnPropertySymbols(console)` call until first logger use + - Deferred `kGroupIndentationWidth` symbol lookup + - Deferred `Object.entries(console)` and prototype method initialization + - Ensures logger can be safely imported in Node.js internal bootstrap contexts (e.g., `lib/internal/bootstrap/*.js`) before stdout is initialized + - Builds on v2.8.2 console deferring to complete early bootstrap compatibility + +## [2.8.2](https://github.com/SocketDev/socket-lib/releases/tag/v2.8.2) - 2025-10-29 + +### Changed + +- Enhanced Logger class to defer Console creation until first use + - Eliminates early bootstrap errors when importing logger before stdout is ready + - Enables safe logger imports during Node.js early initialization phase + - Simplified internal storage with WeakMap-only pattern for constructor args + +## [2.8.1](https://github.com/SocketDev/socket-lib/releases/tag/v2.8.1) - 2025-10-29 + +### Changed + +- **Consolidated DLX cache key generation**: Extracted `generateCacheKey` function to shared `dlx.ts` module + - Eliminates code duplication between `dlx-binary.ts` and `dlx-package.ts` + - Enables consistent cache key generation across the Socket ecosystem + - Exports function for use in dependent packages (e.g., socket-cli) + - Maintains SHA-512 truncated to 16 chars strategy from v2.8.0 + +## [2.8.0](https://github.com/SocketDev/socket-lib/releases/tag/v2.8.0) - 2025-10-29 + +### Changed + +- **Enhanced DLX cache key generation with npm/npx compatibility**: Updated cache key strategy to align with npm/npx ecosystem patterns + - Changed from SHA-256 (64 chars) to SHA-512 truncated to 16 chars (matching npm/npx) + - Optimized for Windows MAX_PATH compatibility (260 character limit) + - Accepts collision risk for shorter paths (~1 in 18 quintillion with 1000 entries) + - Added support for PURL-style package specifications (e.g., `npm:prettier@3.0.0`, `pypi:requests@2.31.0`) + - Documented Socket's shorthand format (without `pkg:` prefix) handled by `@socketregistry/packageurl-js` + - References npm/cli v11.6.2 implementation for consistency + +## [2.7.0](https://github.com/SocketDev/socket-lib/releases/tag/v2.7.0) - 2025-10-28 + +### Added + +- **DLX cache locking for concurrent installation protection**: Added process-lock protection to dlx-package installation operations + - Lock file created at `~/.socket/_dlx//.lock` (similar to npm npx's `concurrency.lock`) + - Prevents concurrent installations from corrupting the same package cache + - Uses 5-second stale timeout and 2-second periodic touching (aligned with npm npx) + - Double-check pattern verifies installation after acquiring lock to avoid redundant work + - Completes 100% alignment with npm's npx locking strategy + +## [2.6.0](https://github.com/SocketDev/socket-lib/releases/tag/v2.6.0) - 2025-10-28 + +### Changed + +- **Process locking aligned with npm npx**: Enhanced process-lock module to match npm's npx locking strategy + - Reduced stale timeout from 10 seconds to 5 seconds (matches npm npx) + - Added periodic lock touching (2-second interval) to prevent false stale detection during long operations + - Implemented second-level granularity for mtime comparison to avoid APFS floating-point precision issues + - Added automatic touch timer cleanup on process exit + - Timers use `unref()` to prevent keeping process alive + - Aligns with npm's npx implementation per https://github.com/npm/cli/pull/8512 + +## [2.5.0](https://github.com/SocketDev/socket-lib/releases/tag/v2.5.0) - 2025-10-28 + +### Added + +- **Process locking utilities**: Added `ProcessLockManager` class providing cross-platform inter-process synchronization using file-system based locks + - Atomic lock acquisition via `mkdir()` for thread-safe operations + - Stale lock detection with automatic cleanup (default 10 seconds, aligned with npm's npx strategy) + - Exponential backoff with jitter for retry attempts + - Process exit handlers for guaranteed cleanup even on abnormal termination + - Three main APIs: `acquire()`, `release()`, and `withLock()` (recommended) + - Comprehensive test suite with `describe.sequential` for proper isolation + - Export: `@socketsecurity/lib/process-lock` + +### Changed + +- **Script refactoring**: Renamed `spinner.succeed()` to `spinner.success()` for consistency +- **Script cleanup**: Removed redundant spinner cleanup in interactive-runner + +## [2.4.0](https://github.com/SocketDev/socket-lib/releases/tag/v2.4.0) - 2025-10-28 + +### Changed + +- **Download locking aligned with npm**: Reduced default `staleTimeout` in `downloadWithLock()` from 300 seconds to 10 seconds to align with npm's npx locking strategy + - Prevents stale locks from blocking downloads for extended periods + - Matches npm's battle-tested timeout range (5-10 seconds) + - Binary downloads now protected against concurrent corruption +- **Binary download protection**: `dlxBinary.downloadBinary()` now uses `downloadWithLock()` to prevent corruption when multiple processes download the same binary concurrently + - Eliminates race conditions during parallel binary downloads + - Maintains checksum verification and executable permissions + +## [2.3.0](https://github.com/SocketDev/socket-lib/releases/tag/v2.3.0) - 2025-10-28 + +### Added + +- **Binary utility wrapper functions**: Added `which()` and `whichSync()` wrapper functions to `bin` module + - Cross-platform binary lookup that respects PATH environment variable + - Synchronous and asynchronous variants for different use cases + - Integrates with existing binary resolution utilities + +## [2.2.1](https://github.com/SocketDev/socket-lib/releases/tag/v2.2.1) - 2025-10-28 + +### Fixed + +- **Logger write() method**: Fixed `write()` to bypass Console formatting when outputting raw text + - Previously, `write()` used Console's internal `_stdout` stream which applied unintended formatting like group indentation + - Now stores a reference to the original stdout stream in a dedicated private field (`#originalStdout`) during construction + - The `write()` method uses this stored reference to write directly to the raw stream, bypassing all Console formatting layers + - Ensures raw text output without any formatting applied, fixing test failures in CI environments where writes after `indent()` were unexpectedly formatted + +## [2.2.0](https://github.com/SocketDev/socket-lib/releases/tag/v2.2.0) - 2025-10-28 + +### Added + +- **Logger step symbol**: `logger.step()` now displays a cyan arrow symbol (→ or > in ASCII) before step messages for improved visual separation + - New `LOG_SYMBOLS.step` symbol added to the symbol palette + - Automatic stripping of existing symbols from step messages + - Maintains existing blank line behavior for clear step separation + +## [2.1.0](https://github.com/SocketDev/socket-lib/releases/tag/v2.1.0) - 2025-10-28 + +### Added + +- Package manager detection utilities (`detectPackageManager()`, `getPackageManagerInfo()`, `getPackageManagerUserAgent()`) +- `isInSocketDlx()` utility to check if file path is within `~/.socket/_dlx/` +- `downloadPackage()` and `executePackage()` functions for separate download and execution of packages + +## [2.0.0](https://github.com/SocketDev/socket-lib/releases/tag/v2.0.0) - 2025-10-27 + +### Breaking Changes + +**Environment Variable System Refactor** + +This release completely refactors the environment variable system, consolidating 60+ individual env constant files into grouped getter modules with AsyncLocalStorage-based test rewiring. + +**Consolidated env files** - Individual files replaced with grouped modules: + +- `env/github.ts` - All GitHub-related env vars (GITHUB_TOKEN, GH_TOKEN, GITHUB_API_URL, etc.) +- `env/socket.ts` - Socket-specific env vars (SOCKET_API_TOKEN, SOCKET_CACACHE_DIR, etc.) +- `env/socket-cli.ts` - Socket CLI env vars (SOCKET_CLI_API_TOKEN, SOCKET_CLI_CONFIG, etc.) +- `env/npm.ts` - NPM-related env vars +- `env/locale.ts` - Locale env vars (LANG, LC_ALL, LC_MESSAGES) +- `env/windows.ts` - Windows-specific env vars (USERPROFILE, LOCALAPPDATA, APPDATA, COMSPEC) +- `env/xdg.ts` - XDG base directory env vars +- `env/temp-dir.ts` - Temp directory env vars (TEMP, TMP, TMPDIR) +- `env/test.ts` - Test framework env vars (VITEST, JEST_WORKER_ID) + +**Constants → Getter functions** - All env constants converted to functions: + +```typescript +// Before (v1.x): +import { GITHUB_TOKEN } from '#env/github-token' + +// After (v2.x): +import { getGithubToken } from '#env/github' +``` + +**Deleted files** - Removed 60+ individual env constant files: + +- `env/github-token.ts`, `env/socket-api-token.ts`, etc. → Consolidated into grouped files +- `env/getters.ts` → Functions moved to their respective grouped files + +### Added + +**AsyncLocalStorage-Based Test Rewiring** + +New `env/rewire.ts` and `path/rewire.ts` modules provides context-isolated environment variable overrides for testing: + +```typescript +import { withEnv, setEnv, resetEnv, getEnvValue } from '#env/rewire' + +// Option 1: Isolated context with AsyncLocalStorage +await withEnv({ CI: '1', NODE_ENV: 'test' }, async () => { + // CI env var is '1' only within this block + // Concurrent tests don't interfere +}) + +// Option 2: Traditional beforeEach/afterEach pattern +beforeEach(() => { + setEnv('CI', '1') +}) + +afterEach(() => { + resetEnv() +}) +``` + +**Features:** + +- Allows toggling between snapshot and live behavior +- Compatible with `vi.stubEnv()` as fallback + +### Changed + +- Updated all dynamic `require()` statements to use path aliases (`#constants/*`, `#packages/*`) +- Improved logger blank line tracking per stream (separate stderr/stdout tracking) +- Exported `getCacache()` function for external use + +## [1.3.6](https://github.com/SocketDev/socket-lib/releases/tag/v1.3.6) - 2025-10-26 + +### Fixed + +- Fixed `debug` module functions being incorrectly tree-shaken as no-ops in bundled output + - Removed incorrect `/*@__NO_SIDE_EFFECTS__*/` annotations from `debug()`, `debugDir()`, `debugLog()`, and their `*Ns` variants + - These functions have side effects (logging output, spinner manipulation) and should not be removed by bundlers + - Fixes issue where `debugLog()` and `debugDir()` were compiled to empty no-op functions + +## [1.3.5](https://github.com/SocketDev/socket-lib/releases/tag/v1.3.5) - 2025-10-26 + +### Added + +- Added `createEnvProxy()` utility function to `env` module for Windows-compatible environment variable access + - Provides case-insensitive environment variable access (e.g., PATH, Path, path all work) + - Smart priority system: overrides > exact match > case-insensitive fallback + - Full Proxy implementation with proper handlers for get, set, has, ownKeys, getOwnPropertyDescriptor + - Opt-in helper for users who need Windows env var compatibility + - Well-documented with usage examples and performance notes +- Added `findCaseInsensitiveEnvKey()` utility function to `env` module + - Searches for environment variable keys using case-insensitive matching + - Optimized with length fast path to minimize expensive `toUpperCase()` calls + - Useful for cross-platform env var access where case may vary (e.g., PATH vs Path vs path) +- Added comprehensive test suite for `env` module with 71 tests + - Covers `envAsBoolean()`, `envAsNumber()`, `envAsString()` conversion utilities + - Tests `createEnvProxy()` with Windows environment variables and edge cases + - Validates `findCaseInsensitiveEnvKey()` optimization and behavior + +### Fixed + +- Fixed `spawn` module to preserve Windows `process.env` Proxy behavior + - When no custom environment variables are provided, use `process.env` directly instead of spreading it + - Preserves Windows case-insensitive environment variable access (PATH vs Path) + - Fixes empty CLI output issue on Windows CI runners + - Only spreads `process.env` when merging custom environment variables + +## [1.3.4](https://github.com/SocketDev/socket-lib/releases/tag/v1.3.4) - 2025-10-26 + +### Added + +- Added Node.js SIGUSR1 signal handler prevention utilities in `constants/node` module + - `supportsNodeDisableSigusr1Flag()`: Detects if Node supports `--disable-sigusr1` flag (v22.14+, v23.7+, v24.8+) + - `getNodeDisableSigusr1Flags()`: Returns appropriate flags to prevent debugger attachment + - Returns `['--disable-sigusr1']` on supported versions (prevents Signal I/O Thread creation) + - Falls back to `['--no-inspect']` on Node 18+ (blocks debugger but still creates thread) + - Enables production CLI environments to prevent SIGUSR1 debugger signal handling for security + +## [1.3.3](https://github.com/SocketDev/socket-lib/releases/tag/v1.3.3) - 2025-10-24 + +### Fixed + +- Fixed lazy getter bug in `objects` module where `defineGetter`, `defineLazyGetter`, and `defineLazyGetters` had incorrect `/*@__NO_SIDE_EFFECTS__*/` annotations + - These functions mutate objects by defining properties, so marking them as side-effect-free caused esbuild to incorrectly tree-shake the calls during bundling + - Lazy getters were returning `undefined` instead of their computed values + - Removed double wrapping in `defineLazyGetters` where `createLazyGetter` was being called unnecessarily + +## [1.3.2](https://github.com/SocketDev/socket-lib/releases/tag/v1.3.2) - 2025-10-24 + +### Fixed + +- Continued fixing of broken external dependency bundling + +## [1.3.1](https://github.com/SocketDev/socket-lib/releases/tag/v1.3.1) - 2025-10-24 + +### Fixed + +- Fixed @inquirer modules (`input`, `password`, `search`) not being properly bundled into `dist/external/` + - Resolves build failures in downstream packages (socket-cli) that depend on socket-lib + - Added missing packages to bundling configuration in `scripts/build-externals.mjs` + - All @inquirer packages now ship as zero-dependency bundles + +### Added + +- Added tests to prevent rogue external stubs in `dist/external/` + - Detects stub re-export patterns that indicate incomplete bundling + - Verifies all @inquirer modules are properly bundled (> 1KB) + - Catches bundling regressions early in CI pipeline + +## [1.3.0](https://github.com/SocketDev/socket-lib/releases/tag/v1.3.0) - 2025-10-23 + +### Added + +- Added `validateFiles()` utility function to `fs` module for defensive file access validation + - Returns `ValidateFilesResult` with `validPaths` and `invalidPaths` arrays + - Filters out unreadable files before processing (common with Yarn Berry PnP virtual filesystem, pnpm symlinks) + - Prevents ENOENT errors when files exist in glob results but are not accessible + - Comprehensive test coverage for all validation scenarios + +## [1.2.0](https://github.com/SocketDev/socket-lib/releases/tag/v1.2.0) - 2025-10-23 + +### Added + +- Added `dlx-package` module for installing and executing npm packages directly + - Content-addressed caching using SHA256 hash (like npm's \_npx) + - Auto-force for version ranges (^, ~, >, <) to get latest within range + - Cross-platform support with comprehensive tests (30 tests) + - Parses scoped and unscoped package specs correctly + - Resolves binaries from package.json bin field + +### Changed + +- Unified DLX storage under `~/.socket/_dlx/` directory + - Binary downloads now use `~/.socket/_dlx/` instead of non-existent cache path + - Both npm packages and binaries share parent directory with content-addressed hashing +- Updated paths.ts documentation to clarify unified directory structure + +## [1.1.2] - 2025-10-23 + +### Fixed + +- Fixed broken relative import paths in `packages/isolation.ts` and `packages/provenance.ts` that prevented bundling by external tools + +## [1.1.1] - 2025-10-23 + +### Fixed + +- Fixed shimmer text effects not respecting CI environment detection (now disabled in CI to prevent ANSI escape codes in logs) + +## [1.1.0] - 2025-10-23 + +### Added + +- Added `filterOutput` option to `stdio/mask` for filtering output chunks before display/buffering +- Added `overrideExitCode` option to `stdio/mask` for customizing exit codes based on captured output +- Added comprehensive JSDoc documentation across entire library for enhanced VSCode IntelliSense + - Detailed @param, @returns, @template, @throws tags + - Practical @example blocks with real-world usage patterns + - @default tags showing default values + - Enhanced interface property documentation + +### Changed + +- Improved TypeScript type hints and tooltips throughout library +- Enhanced documentation for all core utilities (arrays, fs, git, github, http-request, json, logger, objects, path, promises, spawn, spinner, strings) +- Enhanced documentation for stdio utilities (clear, divider, footer, header, mask, progress, prompts, stderr, stdout) +- Enhanced documentation for validation utilities (json-parser, types) + +## [1.0.5] - 2025-10-22 + +### Added + +- Added support for custom retry delays from onRetry callback + +## [1.0.4] - 2025-10-21 + +### Fixed + +- Fixed external dependency paths in root-level source files (corrected require paths from `../external/` to `./external/` in bin, cacache, fs, globs, spawn, spinner, and streams modules) + +## [1.0.3] - 2025-10-21 + +### Fixed + +- Fixed external dependency import paths in packages and stdio modules (corrected require paths from `../../external/` to `../external/`) + +## [1.0.2] - 2025-10-21 + +### Fixed + +- Fixed module resolution error in packages/normalize module (corrected require path from `../../constants/socket` to `../constants/socket`) + +## [1.0.1] - 2025-10-21 + +### Fixed + +- Fixed relative import paths in compiled CommonJS output (changed `require("../external/...")` to `require("./external/...")` for root-level dist files) + +## [1.0.0] - 2025-10-20 + +### Changed + +- Consolidated parseArgs into argv/parse module + +--- + +**Historical Entries**: The entries below are from when this package was named `@socketsecurity/registry`. This package was renamed to `@socketsecurity/lib` starting with version 1.0.0. + +--- + +## [1.5.3] - 2025-10-07 + +### Added + +- Fix bad build and add validation to prevent in future + +## [1.5.2] - 2025-10-07 + +### Added + +- Added coverage utilities to parse v8 and type coverage reports + +### Fixed + +- Fixed `isPath` function to exclude URLs with protocols +- Fixed `isolatePackage` to handle file: URLs and npm-package-arg paths correctly + +## [1.5.1] - 2025-10-05 + +### Added + +- Added `isolatePackage` to `lib/packages/isolation` for creating isolated package test environments + +### Changed + +- Removed `dependencies/index` barrel file to prevent eager loading of all dependency modules + +## [1.5.0] - 2025-10-05 + +### Added + +- Added support for testing local development packages in addition to socket-registry packages +- Exposed isolation module as part of public API via `lib/packages` + +### Changed + +- Renamed `setupPackageTest` to `isolatePackage` for clearer intent +- Refactored `installPackageForTesting` to accept explicit `sourcePath` and `packageName` parameters +- Simplified package installation logic by removing path detection from low-level function +- Consolidated `setupPackageTest` and `setupMultiEntryTest` into single `isolatePackage` function with options + +## [1.4.6] - 2025-10-05 + +### Added + +- Added comprehensive package.json exports validation tests + +## [1.4.5] - 2025-10-05 + +### Added + +- Added performance monitoring utilities with timer, measurement, and reporting functions +- Added memoization utilities with LRU, TTL, weak references, and promise deduplication support +- Added table formatting utilities (`formatTable`, `formatSimpleTable`) for CLI output +- Added progress tracking to spinner with `updateProgress()` and `incrementProgress()` methods +- Added `isDir` and `safeStats` async helpers to fs module + +### Changed + +- Removed `platform` and `arch` options from `dlxBinary` function as cross-platform binary execution is not supported + +### Fixed + +- Fixed Windows shell execution in `dlxBinary` by adding cache directory to PATH + +## [1.4.4] - 2025-10-05 + +### Fixed + +- Fixed subpath exports + +## [1.4.3] - 2025-10-04 + +### Added + +- Spinner lifecycle utilities (`withSpinner`, `withSpinnerRestore`, `withSpinnerSync`) for automatic spinner cleanup with try/finally blocks + +## [1.4.2] - 2025-10-04 + +### Added + +- Added `GITHUB_API_BASE_URL` constant for GitHub API endpoint configuration +- Added `SOCKET_API_BASE_URL` constant for Socket API endpoint configuration +- Added generic TTL cache utility (`createTtlCache`) with in-memory memoization and persistent storage support + +### Changed + +- Refactored GitHub caching to use the new `cache-with-ttl` utility for better performance and consistency + +## [1.4.1] - 2025-10-04 + +### Changed + +- Update maintained Node.js versions of `constants.maintainedNodeVersions` + +## [1.4.0] - 2025-10-04 + +### Added + +- Added `PromiseQueue` utility for controlled concurrency operations +- Added lazy dependency loaders and test utilities +- Added HTTP utilities with retry logic and download locking +- Added `.claude` directory for scratch documents +- Added `noUnusedLocals` and `noUnusedParameters` to TypeScript config + +### Changed + +- Refactored all library functions to use options objects for better API consistency + - `lib/strings.ts` - String manipulation functions + - `lib/url.ts` - URL handling functions + - `lib/words.ts` - Word manipulation functions +- Refactored `lib/packages` module into specialized submodules for improved code organization + - `lib/packages/editable.ts` - Package editing functionality + - `lib/packages/exports.ts` - Export resolution utilities + - `lib/packages/licenses.ts` - License handling and validation + - `lib/packages/manifest.ts` - Manifest data operations + - `lib/packages/normalize.ts` - Path normalization utilities + - `lib/packages/operations.ts` - Package installation and modification operations + - `lib/packages/paths.ts` - Package path utilities + - `lib/packages/provenance.ts` - Package provenance verification + - `lib/packages/specs.ts` - Package spec parsing + - `lib/packages/validation.ts` - Package validation utilities +- Moved configuration files (vitest, eslint, knip, oxlint, taze) to `.config` directory +- Replaced `fetch()` with Node.js native `http`/`https` modules for better reliability +- Replaced `any` types with meaningful types across library utilities +- Improved pnpm security with build script allowlist +- Updated vitest coverage thresholds to 80% +- Consolidated test files to reduce duplication +- Note: Public API remains unchanged; these are internal organizational improvements + +### Fixed + +- Fixed resource leaks and race conditions in socket-registry +- Fixed `yarn-cache-path` constant to return string type consistently +- Fixed Yarn Windows temp path detection in `shouldSkipShadow` +- Fixed path normalization for Windows compatibility across all path utilities +- Fixed cache path tests for Windows case sensitivity +- Fixed type errors in promises, parse-args, logger, and specs tests +- Fixed GitHub tests to mock `httpRequest` correctly +- Fixed SEA build tests to mock `httpRequest` +- Decoded URL percent-encoding in `pathLikeToString` fallback + +## [1.3.10] - 2025-10-03 + +### Added + +- New utility modules for DLX, shadow, SEA, cacache, and versions functionality +- getSocketHomePath alias to paths module +- del dependency and external wrapper for safer file deletion +- @fileoverview tags to lib modules +- camelCase expansion for kebab-case arguments in parseArgs +- Coerce and configuration options to parseArgs + +### Changed + +- Updated file removal to use del package for safer deletion +- Normalized path returns in fs and Socket directory utilities +- Removed default exports from git and parse-args modules +- Enhanced test coverage across multiple modules (parse-args, prompts, strings, env, spawn, json) + +## [1.3.9] - 2025-10-03 + +### Changed + +- Internal build and distribution updates + +## [1.3.8] - 2025-10-03 + +### Added + +- Added unified directory structure for Socket ecosystem tools +- New path utilities module for cross-platform directory resolution +- Directory structure constants for Socket CLI, Registry, Firewall, and DLX + +## [1.3.7] - 2025-10-02 + +### Changed + +- Updated manifest.json entries + +## [1.3.6] - 2025-10-01 + +### Fixed + +- Fixed indent-string interoperability with older v1 and v2 versions + +## [1.3.5] - 2025-10-01 + +### Added + +- Added lib/git utilities module + +### Fixed + +- Fixed invalid manifest entries +- Fixed parseArgs strip-aliased bug + +## [1.3.4] - 2025-10-01 + +### Changed + +- Updated various package override versions + +## [1.3.3] - 2025-10-01 + +### Fixed + +- Fixed normalizePath collapsing multiple leading `..` segments incorrectly + +## [1.3.2] - 2025-10-01 + +### Added + +- Added 'sfw' to isBlessedPackageName method check +- Added ENV.DEBUG normalization for debug package compatibility + - `DEBUG='1'` or `DEBUG='true'` automatically expands to `DEBUG='*'` (enables all namespaces) + - `DEBUG='0'` or `DEBUG='false'` automatically converts to empty string (disables all output) + - Namespace patterns like `DEBUG='app:*'` are preserved unchanged + +## [1.3.1] - 2025-09-30 + +### Changed + +- Renamed debug functions from *Complex to *Ns + +### Fixed + +- Fixed regression with lib/prompts module imports + +## [1.3.0] - 2025-09-29 + +### Changed + +- Updated registry subpath exports + +### Fixed + +- Fixed Node.js built-in module imports in CommonJS output + +## [1.2.2] - 2025-09-29 + +### Changed + +- Internal improvements to module structure + +## [1.2.1] - 2025-09-29 + +### Changed + +- Restructured constants module with new architecture +- Updated build configuration and package exports diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/LICENSE b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/LICENSE new file mode 100644 index 00000000..602b3ece --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Socket Inc + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/README.md b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/README.md new file mode 100644 index 00000000..4807c3cd --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/README.md @@ -0,0 +1,225 @@ +# @socketsecurity/lib + +[![Socket Badge](https://socket.dev/api/badge/npm/package/@socketsecurity/lib)](https://socket.dev/npm/package/@socketsecurity/lib) +[![CI](https://github.com/SocketDev/socket-lib/actions/workflows/ci.yml/badge.svg)](https://github.com/SocketDev/socket-lib/actions/workflows/ci.yml) +![Coverage](https://img.shields.io/badge/coverage-81%25-brightgreen) + +[![Follow @SocketSecurity](https://img.shields.io/twitter/follow/SocketSecurity?style=social)](https://twitter.com/SocketSecurity) +[![Follow @socket.dev on Bluesky](https://img.shields.io/badge/Follow-@socket.dev-1DA1F2?style=social&logo=bluesky)](https://bsky.app/profile/socket.dev) + +Core infrastructure library for [Socket.dev](https://socket.dev/) security tools. Provides utilities for file system operations, process spawning, HTTP requests, environment detection, logging, spinners, and more. + +## Prerequisites + +**Node.js 22 or higher** is required. + +## Install + +```bash +# Using pnpm (recommended) +pnpm add @socketsecurity/lib + +# Using npm +npm install @socketsecurity/lib + +# Using yarn +yarn add @socketsecurity/lib +``` + +## Quick Start + +```typescript +import { Spinner } from '@socketsecurity/lib/spinner' +import { getDefaultLogger } from '@socketsecurity/lib/logger' +import { readJson } from '@socketsecurity/lib/fs' + +const logger = getDefaultLogger() +const spinner = Spinner({ text: 'Loading package.json...' }) + +spinner.start() +const pkg = await readJson('./package.json') +spinner.successAndStop('Loaded successfully') + +logger.success(`Package: ${pkg.name}@${pkg.version}`) +``` + +## Documentation + +- [Getting Started](./docs/getting-started.md) - Prerequisites, installation, and first examples +- [Visual Effects](./docs/visual-effects.md) - Spinners, loggers, themes, and progress indicators +- [File System](./docs/file-system.md) - File operations, globs, paths, and safe deletion +- [HTTP Utilities](./docs/http-utilities.md) - Making requests, downloading files, and retry logic +- [Process Utilities](./docs/process-utilities.md) - Spawning processes, IPC, and locks +- [Package Management](./docs/package-management.md) - npm/pnpm/yarn detection and operations +- [Environment](./docs/environment.md) - CI detection, env getters, and platform checks +- [Constants](./docs/constants.md) - Node versions, npm URLs, and platform values +- [Examples](./docs/examples.md) - Real-world usage patterns +- [Troubleshooting](./docs/troubleshooting.md) - Common issues and solutions + +## What's Inside + +### Visual Effects + +Spinners, colored loggers, themes, progress bars, and terminal output formatting. + +- `Spinner` - Animated CLI spinners with progress tracking +- `getDefaultLogger()` - Colored console logger with symbols +- `LOG_SYMBOLS` - Colored terminal symbols (✓, ✗, ⚠, ℹ, →) +- `setTheme()` - Customize colors across the library + +### File System + +Cross-platform file operations with safe deletion and convenient wrappers. + +- `readFileUtf8()`, `readFileBinary()` - Read files as text or binary +- `readJson()`, `writeJson()` - Parse and format JSON files +- `safeDelete()` - Protected deletion with safety checks +- `findUp()`, `findUpSync()` - Traverse up to find files +- `safeMkdir()` - Create directories without EEXIST errors +- `validateFiles()` - Check file readability (useful for Yarn PnP, pnpm) + +### HTTP Utilities + +Native Node.js HTTP/HTTPS requests with retry logic and redirects. + +- `httpJson()` - Fetch and parse JSON from APIs +- `httpText()` - Fetch text/HTML content +- `httpDownload()` - Download files with progress callbacks +- `httpRequest()` - Full control over requests and responses +- Automatic redirects, exponential backoff retries, timeout support + +### Process Management + +Spawn child processes safely with cross-platform support. + +- `spawn()` - Promise-based process spawning with output capture +- `spawnSync()` - Synchronous version for blocking operations +- Array-based arguments prevent command injection +- Automatic Windows `.cmd`/`.bat` handling +- `ProcessLock` - Ensure only one instance runs at a time +- `setupIPC()` - Inter-process communication + +### Environment Detection + +Type-safe environment variable access and platform detection. + +- `getCI()` - Detect CI environment +- `getNodeEnv()` - Get NODE_ENV value +- `isTest()` - Check if running tests +- `getHome()` - Home directory (Unix/Linux/macOS) +- Test rewiring with `setEnv()`, `resetEnv()` + +### Package Management + +Detect and work with npm, pnpm, and yarn. + +- `detectPackageManager()` - Identify package manager from lock files +- Package manifest operations +- Lock file management + +### Constants + +Pre-defined values for Node.js, npm, and platform detection. + +- `getNodeMajorVersion()` - Get current Node.js major version +- `WIN32`, `DARWIN` - Platform booleans (use `!WIN32 && !DARWIN` for Linux) +- `getAbortSignal()` - Global abort signal + +### Utilities + +Helpers for arrays, objects, strings, promises, sorting, and more. + +- Arrays, objects, strings manipulation +- Promise utilities and queues +- Natural sorting +- Version comparison +- Error handling with causes + +## Features + +- **Tree-shakeable exports** - Import only what you need +- **Cross-platform** - Works on Windows, macOS, and Linux +- **TypeScript-first** - Full type safety with .d.ts files +- **Zero dependencies** (for core HTTP - uses Node.js native modules) +- **Well-tested** - 6600+ tests across 145 test files +- **Security-focused** - Safe defaults, command injection protection +- **CommonJS output** - Compatible with Node.js tooling + +## Common Use Cases + +### Running Shell Commands + +```typescript +import { spawn } from '@socketsecurity/lib/spawn' + +const result = await spawn('git', ['status']) +console.log(result.stdout) +``` + +### Making API Requests + +```typescript +import { httpJson } from '@socketsecurity/lib/http-request' + +const data = await httpJson('https://api.example.com/data') +``` + +### Visual Feedback + +```typescript +import { Spinner } from '@socketsecurity/lib/spinner' + +const spinner = Spinner({ text: 'Processing...' }) +spinner.start() +// ... do work ... +spinner.successAndStop('Complete!') +``` + +### Safe File Deletion + +```typescript +import { safeDelete } from '@socketsecurity/lib/fs' + +// Protected against deleting parent directories +await safeDelete('./build') +``` + +## Troubleshooting + +**Module not found**: Verify you're importing from the correct path: + +```typescript +// Correct +import { Spinner } from '@socketsecurity/lib/spinner' + +// Wrong +import { Spinner } from '@socketsecurity/lib' +``` + +**Node version error**: This library requires Node.js 22+. Check your version: + +```bash +node --version +``` + +For more issues, see the [Troubleshooting Guide](./docs/troubleshooting.md). + +## Development + +```bash +pnpm install # Install dependencies +pnpm build # Build the library +pnpm test # Run tests +pnpm run cover # Run tests with coverage +pnpm dev # Watch mode +pnpm run lint # Check code style +pnpm run fix # Fix formatting issues +``` + +## Contributing + +Contributions are welcome! Please read the [CLAUDE.md](./CLAUDE.md) file for development guidelines and coding standards. + +## License + +MIT diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/data/extensions.json b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/data/extensions.json new file mode 100644 index 00000000..f9a007df --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/data/extensions.json @@ -0,0 +1,28 @@ +{ + "npm": [ + [ + "pkg:npm/%40socketregistry/packageurl-js@latest", + { + "categories": ["levelup"], + "engines": { "node": ">=18" }, + "interop": ["cjs"], + "license": "MIT", + "name": "@socketregistry/packageurl-js", + "package": "packageurl-js", + "version": "latest" + } + ], + [ + "pkg:npm/shell-quote@latest", + { + "categories": ["tuneup"], + "engines": { "node": ">=18" }, + "interop": ["cjs"], + "license": "MIT", + "name": "shell-quote", + "package": "shell-quote", + "version": "latest" + } + ] + ] +} diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/abort.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/abort.d.ts new file mode 100644 index 00000000..b224ef22 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/abort.d.ts @@ -0,0 +1,24 @@ +/** + * @fileoverview Abort signal utilities. + */ +/** + * Create a composite AbortSignal from multiple signals. + * + * @example + * ```typescript + * const ac1 = new AbortController() + * const ac2 = new AbortController() + * const signal = createCompositeAbortSignal(ac1.signal, ac2.signal) + * ``` + */ +export declare function createCompositeAbortSignal(...signals: Array): AbortSignal; +/** + * Create an AbortSignal that triggers after a timeout. + * + * @example + * ```typescript + * const signal = createTimeoutSignal(5000) // aborts after 5 seconds + * fetch('https://example.com', { signal }) + * ``` + */ +export declare function createTimeoutSignal(ms: number): AbortSignal; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/abort.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/abort.js new file mode 100644 index 00000000..056c63dd --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/abort.js @@ -0,0 +1,60 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var abort_exports = {}; +__export(abort_exports, { + createCompositeAbortSignal: () => createCompositeAbortSignal, + createTimeoutSignal: () => createTimeoutSignal +}); +module.exports = __toCommonJS(abort_exports); +function createCompositeAbortSignal(...signals) { + const validSignals = signals.filter((s) => s != null); + if (validSignals.length === 0) { + return new AbortController().signal; + } + if (validSignals.length === 1) { + return validSignals[0]; + } + const controller = new AbortController(); + for (const signal of validSignals) { + if (signal.aborted) { + controller.abort(); + return controller.signal; + } + signal.addEventListener("abort", () => controller.abort(), { once: true }); + } + return controller.signal; +} +function createTimeoutSignal(ms) { + if (typeof ms !== "number" || Number.isNaN(ms)) { + throw new TypeError("timeout must be a number"); + } + if (!Number.isFinite(ms)) { + throw new TypeError("timeout must be a finite number"); + } + if (ms <= 0) { + throw new TypeError("timeout must be a positive number"); + } + return AbortSignal.timeout(Math.ceil(ms)); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + createCompositeAbortSignal, + createTimeoutSignal +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/agent.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/agent.d.ts new file mode 100644 index 00000000..91386ffd --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/agent.d.ts @@ -0,0 +1,179 @@ +import type { SpawnOptions } from './spawn'; +/** + * Execute npm commands with optimized flags and settings. + * + * SECURITY: Uses array-based arguments to prevent command injection. All elements + * in the args array are properly escaped by Node.js when passed to spawn(). + * + * @example + * ```typescript + * await execNpm(['install', '--save', 'lodash']) + * await execNpm(['run', 'build'], { cwd: '/tmp/project' }) + * ``` + */ +export declare function execNpm(args: string[], options?: SpawnOptions | undefined): import("./spawn").PromiseSpawnResult; +export interface PnpmOptions extends SpawnOptions { + allowLockfileUpdate?: boolean; +} +/** + * Execute pnpm commands with optimized flags and settings. + * + * SECURITY: Uses array-based arguments to prevent command injection. All elements + * in the args array are properly escaped by Node.js when passed to execBin(). + * + * @example + * ```typescript + * await execPnpm(['install']) + * await execPnpm(['add', 'lodash'], { allowLockfileUpdate: true }) + * ``` + */ +export declare function execPnpm(args: string[], options?: PnpmOptions | undefined): Promise<{ + cmd: string; + args: string[] | readonly string[]; + code: number; + signal: NodeJS.Signals; + stdout: string | Buffer; + stderr: string | Buffer; +}>; +/** + * Execute yarn commands with optimized flags and settings. + * + * SECURITY: Uses array-based arguments to prevent command injection. All elements + * in the args array are properly escaped by Node.js when passed to execBin(). + * + * @example + * ```typescript + * await execYarn(['install']) + * await execYarn(['add', 'lodash'], { cwd: '/tmp/project' }) + * ``` + */ +export declare function execYarn(args: string[], options?: import('./spawn').SpawnOptions): Promise<{ + cmd: string; + args: string[] | readonly string[]; + code: number; + signal: NodeJS.Signals; + stdout: string | Buffer; + stderr: string | Buffer; +}>; +/** + * Check if a command argument is an npm audit flag. + * + * @example + * ```typescript + * isNpmAuditFlag('--no-audit') // true + * isNpmAuditFlag('--audit') // true + * isNpmAuditFlag('--save') // false + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function isNpmAuditFlag(cmdArg: string): boolean; +/** + * Check if a command argument is an npm fund flag. + * + * @example + * ```typescript + * isNpmFundFlag('--no-fund') // true + * isNpmFundFlag('--fund') // true + * isNpmFundFlag('--save') // false + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function isNpmFundFlag(cmdArg: string): boolean; +/** + * Check if a command argument is an npm loglevel flag. + * + * @example + * ```typescript + * isNpmLoglevelFlag('--loglevel') // true + * isNpmLoglevelFlag('--silent') // true + * isNpmLoglevelFlag('-s') // true + * isNpmLoglevelFlag('--save') // false + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function isNpmLoglevelFlag(cmdArg: string): boolean; +/** + * Check if a command argument is an npm node-options flag. + * + * @example + * ```typescript + * isNpmNodeOptionsFlag('--node-options') // true + * isNpmNodeOptionsFlag('--node-options=--max-old-space-size=4096') // true + * isNpmNodeOptionsFlag('--save') // false + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function isNpmNodeOptionsFlag(cmdArg: string): boolean; +/** + * Check if a command argument is an npm progress flag. + * + * @example + * ```typescript + * isNpmProgressFlag('--no-progress') // true + * isNpmProgressFlag('--progress') // true + * isNpmProgressFlag('--save') // false + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function isNpmProgressFlag(cmdArg: string): boolean; +/** + * Check if a command argument is a pnpm ignore-scripts flag. + * + * @example + * ```typescript + * isPnpmIgnoreScriptsFlag('--ignore-scripts') // true + * isPnpmIgnoreScriptsFlag('--no-ignore-scripts') // true + * isPnpmIgnoreScriptsFlag('--save') // false + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function isPnpmIgnoreScriptsFlag(cmdArg: string): boolean; +/** + * Check if a command argument is a pnpm frozen-lockfile flag. + * + * @example + * ```typescript + * isPnpmFrozenLockfileFlag('--frozen-lockfile') // true + * isPnpmFrozenLockfileFlag('--no-frozen-lockfile') // true + * isPnpmFrozenLockfileFlag('--save') // false + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function isPnpmFrozenLockfileFlag(cmdArg: string): boolean; +/** + * Check if a command argument is a pnpm install command. + * + * @example + * ```typescript + * isPnpmInstallCommand('install') // true + * isPnpmInstallCommand('i') // true + * isPnpmInstallCommand('run') // false + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function isPnpmInstallCommand(cmdArg: string): boolean; +/** + * Alias for isNpmLoglevelFlag for pnpm usage. + */ +export declare const isPnpmLoglevelFlag: typeof isNpmLoglevelFlag; +/** + * Execute a package.json script using the appropriate package manager. + * Automatically detects pnpm, yarn, or npm based on lockfiles. + * + * @example + * ```typescript + * await execScript('build') + * await execScript('test', ['--coverage'], { cwd: '/tmp/project' }) + * ``` + */ +export interface ExecScriptOptions extends SpawnOptions { + prepost?: boolean | undefined; +} +export declare function execScript(scriptName: string, args?: string[] | readonly string[] | ExecScriptOptions | undefined, options?: ExecScriptOptions | undefined): Promise<{ + cmd: string; + args: string[] | readonly string[]; + code: number; + signal: NodeJS.Signals; + stdout: string | Buffer; + stderr: string | Buffer; +}>; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/agent.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/agent.js new file mode 100644 index 00000000..aa0e766f --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/agent.js @@ -0,0 +1,285 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var agent_exports = {}; +__export(agent_exports, { + execNpm: () => execNpm, + execPnpm: () => execPnpm, + execScript: () => execScript, + execYarn: () => execYarn, + isNpmAuditFlag: () => isNpmAuditFlag, + isNpmFundFlag: () => isNpmFundFlag, + isNpmLoglevelFlag: () => isNpmLoglevelFlag, + isNpmNodeOptionsFlag: () => isNpmNodeOptionsFlag, + isNpmProgressFlag: () => isNpmProgressFlag, + isPnpmFrozenLockfileFlag: () => isPnpmFrozenLockfileFlag, + isPnpmIgnoreScriptsFlag: () => isPnpmIgnoreScriptsFlag, + isPnpmInstallCommand: () => isPnpmInstallCommand, + isPnpmLoglevelFlag: () => isPnpmLoglevelFlag +}); +module.exports = __toCommonJS(agent_exports); +var import_node_process = __toESM(require("node:process")); +var import_agents = require("./constants/agents"); +var import_node = require("./constants/node"); +var import_platform = require("./constants/platform"); +var import_ci = require("./env/ci"); +var import_bin = require("./bin"); +var import_debug = require("./debug"); +var import_fs = require("./fs"); +var import_objects = require("./objects"); +var import_spawn = require("./spawn"); +const pnpmIgnoreScriptsFlags = /* @__PURE__ */ new Set([ + "--ignore-scripts", + "--no-ignore-scripts" +]); +const pnpmFrozenLockfileFlags = /* @__PURE__ */ new Set([ + "--frozen-lockfile", + "--no-frozen-lockfile" +]); +const pnpmInstallCommands = /* @__PURE__ */ new Set(["install", "i"]); +const pnpmInstallLikeCommands = /* @__PURE__ */ new Set([ + "install", + "i", + "add", + "update", + "up", + "remove", + "rm", + "link", + "ln", + "unlink", + "import", + "rebuild", + "rb" +]); +const yarnInstallLikeCommands = /* @__PURE__ */ new Set([ + "install", + "add", + "upgrade", + "remove", + "link", + "unlink", + "import" +]); +function execNpm(args, options) { + const useDebug = (0, import_debug.isDebug)(); + const terminatorPos = args.indexOf("--"); + const npmArgs = (terminatorPos === -1 ? args : args.slice(0, terminatorPos)).filter( + (a) => !/* @__PURE__ */ isNpmAuditFlag(a) && !/* @__PURE__ */ isNpmFundFlag(a) && !/* @__PURE__ */ isNpmProgressFlag(a) + ); + const otherArgs = terminatorPos === -1 ? [] : args.slice(terminatorPos); + const logLevelArgs = ( + // The default value of loglevel is "notice". We default to "warn" which is + // one level quieter. + useDebug || npmArgs.some(isNpmLoglevelFlag) ? [] : ["--loglevel", "warn"] + ); + const npmBin = import_agents.NPM_BIN_PATH; + return (0, import_spawn.spawn)( + npmBin, + [ + // Even though '--loglevel=error' is passed npm will still run through + // code paths for 'audit' and 'fund' unless '--no-audit' and '--no-fund' + // flags are passed. + "--no-audit", + "--no-fund", + // Add `--no-progress` and `--silent` flags to fix input being swallowed + // by the spinner when running the command with recent versions of npm. + "--no-progress", + // Add '--loglevel=error' if a loglevel flag is not provided and the + // SOCKET_DEBUG environment variable is not truthy. + ...logLevelArgs, + ...npmArgs, + ...otherArgs + ], + { + __proto__: null, + // On Windows, npm is a .cmd file that requires shell to execute. + shell: import_platform.WIN32, + ...options + } + ); +} +function execPnpm(args, options) { + const { allowLockfileUpdate, ...extBinOpts } = { + __proto__: null, + ...options + }; + const useDebug = (0, import_debug.isDebug)(); + const terminatorPos = args.indexOf("--"); + const pnpmArgs = (terminatorPos === -1 ? args : args.slice(0, terminatorPos)).filter((a) => !/* @__PURE__ */ isNpmProgressFlag(a)); + const otherArgs = terminatorPos === -1 ? [] : args.slice(terminatorPos); + const firstArg = pnpmArgs[0]; + const supportsIgnoreScripts = firstArg ? pnpmInstallLikeCommands.has(firstArg) : false; + const logLevelArgs = useDebug || pnpmArgs.some(isPnpmLoglevelFlag) ? [] : ["--loglevel", "warn"]; + const hasIgnoreScriptsFlag = pnpmArgs.some(isPnpmIgnoreScriptsFlag); + const ignoreScriptsArgs = !supportsIgnoreScripts || hasIgnoreScriptsFlag ? [] : ["--ignore-scripts"]; + const frozenLockfileArgs = []; + if ((0, import_ci.getCI)() && allowLockfileUpdate && firstArg && /* @__PURE__ */ isPnpmInstallCommand(firstArg) && !pnpmArgs.some(isPnpmFrozenLockfileFlag)) { + frozenLockfileArgs.push("--no-frozen-lockfile"); + } + return (0, import_bin.execBin)( + "pnpm", + [ + // Add '--loglevel=warn' if a loglevel flag is not provided and debug is off. + ...logLevelArgs, + // Add '--ignore-scripts' by default for security (only for installation commands). + ...ignoreScriptsArgs, + // Add '--no-frozen-lockfile' in CI when lockfile updates are needed. + ...frozenLockfileArgs, + ...pnpmArgs, + ...otherArgs + ], + extBinOpts + ); +} +function execYarn(args, options) { + const useDebug = (0, import_debug.isDebug)(); + const terminatorPos = args.indexOf("--"); + const yarnArgs = (terminatorPos === -1 ? args : args.slice(0, terminatorPos)).filter((a) => !/* @__PURE__ */ isNpmProgressFlag(a)); + const otherArgs = terminatorPos === -1 ? [] : args.slice(terminatorPos); + const firstArg = yarnArgs[0]; + const supportsIgnoreScripts = firstArg ? yarnInstallLikeCommands.has(firstArg) : false; + const logLevelArgs = useDebug || yarnArgs.some(isNpmLoglevelFlag) ? [] : ["--silent"]; + const hasIgnoreScriptsFlag = yarnArgs.some(isPnpmIgnoreScriptsFlag); + const ignoreScriptsArgs = !supportsIgnoreScripts || hasIgnoreScriptsFlag ? [] : ["--ignore-scripts"]; + return (0, import_bin.execBin)( + "yarn", + [ + // Add '--silent' if a loglevel flag is not provided and debug is off. + ...logLevelArgs, + // Add '--ignore-scripts' by default for security (only for installation commands). + ...ignoreScriptsArgs, + ...yarnArgs, + ...otherArgs + ], + { + __proto__: null, + ...options + } + ); +} +// @__NO_SIDE_EFFECTS__ +function isNpmAuditFlag(cmdArg) { + return /^--(no-)?audit(=.*)?$/.test(cmdArg); +} +// @__NO_SIDE_EFFECTS__ +function isNpmFundFlag(cmdArg) { + return /^--(no-)?fund(=.*)?$/.test(cmdArg); +} +// @__NO_SIDE_EFFECTS__ +function isNpmLoglevelFlag(cmdArg) { + if (/^--loglevel(=.*)?$/.test(cmdArg)) { + return true; + } + if (/^--(silent|verbose|info|warn|error|quiet)$/.test(cmdArg)) { + return true; + } + return /^-(s|q|d|dd|ddd|v)$/.test(cmdArg); +} +// @__NO_SIDE_EFFECTS__ +function isNpmNodeOptionsFlag(cmdArg) { + return /^--node-options(=.*)?$/.test(cmdArg); +} +// @__NO_SIDE_EFFECTS__ +function isNpmProgressFlag(cmdArg) { + return /^--(no-)?progress(=.*)?$/.test(cmdArg); +} +// @__NO_SIDE_EFFECTS__ +function isPnpmIgnoreScriptsFlag(cmdArg) { + return pnpmIgnoreScriptsFlags.has(cmdArg); +} +// @__NO_SIDE_EFFECTS__ +function isPnpmFrozenLockfileFlag(cmdArg) { + return pnpmFrozenLockfileFlags.has(cmdArg); +} +// @__NO_SIDE_EFFECTS__ +function isPnpmInstallCommand(cmdArg) { + return pnpmInstallCommands.has(cmdArg); +} +const isPnpmLoglevelFlag = isNpmLoglevelFlag; +function execScript(scriptName, args, options) { + let resolvedOptions; + let resolvedArgs; + if (!Array.isArray(args) && args !== null && typeof args === "object") { + resolvedOptions = args; + resolvedArgs = []; + } else { + resolvedOptions = options; + resolvedArgs = args || []; + } + const { prepost, ...spawnOptions } = { + __proto__: null, + ...resolvedOptions + }; + if (spawnOptions.shell === true) { + return (0, import_spawn.spawn)(scriptName, resolvedArgs, spawnOptions); + } + const useNodeRun = !prepost && (0, import_node.supportsNodeRun)(); + const cwd = (0, import_objects.getOwn)(spawnOptions, "cwd") ?? import_node_process.default.cwd(); + const pnpmLockPath = (0, import_fs.findUpSync)(import_agents.PNPM_LOCK_YAML, { cwd }); + if (pnpmLockPath) { + return execPnpm(["run", scriptName, ...resolvedArgs], spawnOptions); + } + const packageLockPath = (0, import_fs.findUpSync)(import_agents.PACKAGE_LOCK_JSON, { cwd }); + if (packageLockPath) { + return execNpm(["run", scriptName, ...resolvedArgs], spawnOptions); + } + const yarnLockPath = (0, import_fs.findUpSync)(import_agents.YARN_LOCK, { cwd }); + if (yarnLockPath) { + return execYarn(["run", scriptName, ...resolvedArgs], spawnOptions); + } + return (0, import_spawn.spawn)( + (0, import_node.getExecPath)(), + [ + ...(0, import_node.getNodeNoWarningsFlags)(), + ...useNodeRun ? ["--run"] : [import_agents.NPM_REAL_EXEC_PATH, "run"], + scriptName, + ...resolvedArgs + ], + { + ...spawnOptions + } + ); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + execNpm, + execPnpm, + execScript, + execYarn, + isNpmAuditFlag, + isNpmFundFlag, + isNpmLoglevelFlag, + isNpmNodeOptionsFlag, + isNpmProgressFlag, + isPnpmFrozenLockfileFlag, + isPnpmIgnoreScriptsFlag, + isPnpmInstallCommand, + isPnpmLoglevelFlag +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ansi.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ansi.d.ts new file mode 100644 index 00000000..abffe5ac --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ansi.d.ts @@ -0,0 +1,42 @@ +/** + * @fileoverview ANSI escape code utilities. + * Provides constants and helpers for terminal formatting. + */ +// ANSI escape codes - commonly used sequences. +export declare const ANSI_RESET = "\u001B[0m"; +export declare const ANSI_BOLD = "\u001B[1m"; +export declare const ANSI_DIM = "\u001B[2m"; +export declare const ANSI_ITALIC = "\u001B[3m"; +export declare const ANSI_UNDERLINE = "\u001B[4m"; +export declare const ANSI_STRIKETHROUGH = "\u001B[9m"; +/** + * Create a regular expression for matching ANSI escape codes. + * + * Inlined ansi-regex: + * https://socket.dev/npm/package/ansi-regexp/overview/6.2.2 + * MIT License + * Copyright (c) Sindre Sorhus (https://sindresorhus.com) + * + * @example + * ```typescript + * const regex = ansiRegex() + * '\u001b[31mHello\u001b[0m'.match(regex) // ['\u001b[31m', '\u001b[0m'] + * ansiRegex({ onlyFirst: true }) // matches only the first code + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function ansiRegex(options?: { + onlyFirst?: boolean; +}): RegExp; +/** + * Strip ANSI escape codes from text. + * Uses the inlined ansi-regex for matching. + * + * @example + * ```typescript + * stripAnsi('\u001b[31mError\u001b[0m') // 'Error' + * stripAnsi('\u001b[1mBold\u001b[0m') // 'Bold' + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function stripAnsi(text: string): string; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ansi.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ansi.js new file mode 100644 index 00000000..384bdf1d --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ansi.js @@ -0,0 +1,62 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var ansi_exports = {}; +__export(ansi_exports, { + ANSI_BOLD: () => ANSI_BOLD, + ANSI_DIM: () => ANSI_DIM, + ANSI_ITALIC: () => ANSI_ITALIC, + ANSI_RESET: () => ANSI_RESET, + ANSI_STRIKETHROUGH: () => ANSI_STRIKETHROUGH, + ANSI_UNDERLINE: () => ANSI_UNDERLINE, + ansiRegex: () => ansiRegex, + stripAnsi: () => stripAnsi +}); +module.exports = __toCommonJS(ansi_exports); +const ANSI_RESET = "\x1B[0m"; +const ANSI_BOLD = "\x1B[1m"; +const ANSI_DIM = "\x1B[2m"; +const ANSI_ITALIC = "\x1B[3m"; +const ANSI_UNDERLINE = "\x1B[4m"; +const ANSI_STRIKETHROUGH = "\x1B[9m"; +const ANSI_REGEX = /\x1b\[[0-9;]*m/g; +// @__NO_SIDE_EFFECTS__ +function ansiRegex(options) { + const { onlyFirst } = options ?? {}; + const ST = "(?:\\u0007|\\u001B\\u005C|\\u009C)"; + const osc = `(?:\\u001B\\][\\s\\S]*?${ST})`; + const csi = "[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]"; + const pattern = `${osc}|${csi}`; + return new RegExp(pattern, onlyFirst ? void 0 : "g"); +} +// @__NO_SIDE_EFFECTS__ +function stripAnsi(text) { + return text.replace(ANSI_REGEX, ""); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + ANSI_BOLD, + ANSI_DIM, + ANSI_ITALIC, + ANSI_RESET, + ANSI_STRIKETHROUGH, + ANSI_UNDERLINE, + ansiRegex, + stripAnsi +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/archives.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/archives.d.ts new file mode 100644 index 00000000..d1fb86f7 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/archives.d.ts @@ -0,0 +1,91 @@ +/** + * Archive format type. + */ +export type ArchiveFormat = 'tar' | 'tar.gz' | 'tgz' | 'zip'; +/** + * Options for archive extraction. + */ +export interface ExtractOptions { + /** Suppress log messages */ + quiet?: boolean; + /** Strip leading path components (like tar --strip-components) */ + strip?: number; + /** Maximum number of entries to extract (default: 100,000) */ + maxEntries?: number; + /** Maximum size of a single extracted file in bytes (default: 100MB) */ + maxFileSize?: number; + /** Maximum total extracted size in bytes (default: 1GB) */ + maxTotalSize?: number; +} +/** + * Detect archive format from file path. + * + * @param filePath - Path to archive file + * @returns Archive format or null if unknown + * + * @example + * ```typescript + * detectArchiveFormat('package.tar.gz') // 'tar.gz' + * detectArchiveFormat('archive.zip') // 'zip' + * detectArchiveFormat('data.csv') // null + * ``` + */ +export declare function detectArchiveFormat(filePath: string): ArchiveFormat | null; +/** + * Extract a tar archive to a directory. + * + * @param archivePath - Path to tar file + * @param outputDir - Directory to extract to + * @param options - Extraction options + * + * @example + * ```typescript + * await extractTar('/tmp/archive.tar', '/tmp/output') + * await extractTar('/tmp/archive.tar', '/tmp/output', { strip: 1 }) + * ``` + */ +export declare function extractTar(archivePath: string, outputDir: string, options?: ExtractOptions): Promise; +/** + * Extract a gzipped tar archive to a directory. + * + * @param archivePath - Path to tar.gz or tgz file + * @param outputDir - Directory to extract to + * @param options - Extraction options + * + * @example + * ```typescript + * await extractTarGz('/tmp/archive.tar.gz', '/tmp/output') + * await extractTarGz('/tmp/archive.tgz', '/tmp/output', { strip: 1 }) + * ``` + */ +export declare function extractTarGz(archivePath: string, outputDir: string, options?: ExtractOptions): Promise; +/** + * Extract a zip archive to a directory. + * + * @param archivePath - Path to zip file + * @param outputDir - Directory to extract to + * @param options - Extraction options + * + * @example + * ```typescript + * await extractZip('/tmp/archive.zip', '/tmp/output') + * await extractZip('/tmp/archive.zip', '/tmp/output', { strip: 1 }) + * ``` + */ +export declare function extractZip(archivePath: string, outputDir: string, options?: ExtractOptions): Promise; +/** + * Extract an archive to a directory. + * Automatically detects format from file extension. + * + * @param archivePath - Path to archive file + * @param outputDir - Directory to extract to + * @param options - Extraction options + * @throws Error if archive format is not supported + * + * @example + * ```typescript + * await extractArchive('/tmp/package.tar.gz', '/tmp/output') + * await extractArchive('/tmp/release.zip', '/tmp/output', { strip: 1 }) + * ``` + */ +export declare function extractArchive(archivePath: string, outputDir: string, options?: ExtractOptions): Promise; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/archives.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/archives.js new file mode 100644 index 00000000..39cf836f --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/archives.js @@ -0,0 +1,393 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var archives_exports = {}; +__export(archives_exports, { + detectArchiveFormat: () => detectArchiveFormat, + extractArchive: () => extractArchive, + extractTar: () => extractTar, + extractTarGz: () => extractTarGz, + extractZip: () => extractZip +}); +module.exports = __toCommonJS(archives_exports); +var import_node_fs = require("node:fs"); +var import_promises = require("node:stream/promises"); +var import_node_zlib = require("node:zlib"); +var import_node_process = __toESM(require("node:process")); +var import_fs = require("./fs.js"); +var import_normalize = require("./paths/normalize.js"); +let _AdmZip; +// @__NO_SIDE_EFFECTS__ +function getAdmZip() { + if (_AdmZip === void 0) { + _AdmZip = require("./external/adm-zip.js"); + } + return _AdmZip; +} +let _tarFs; +// @__NO_SIDE_EFFECTS__ +function getTarFs() { + if (_tarFs === void 0) { + _tarFs = require("./external/tar-fs.js"); + } + return _tarFs; +} +let _path; +// @__NO_SIDE_EFFECTS__ +function getPath() { + if (_path === void 0) { + _path = require("path"); + } + return _path; +} +const DEFAULT_MAX_FILE_SIZE = 100 * 1024 * 1024; +const DEFAULT_MAX_TOTAL_SIZE = 1024 * 1024 * 1024; +const DEFAULT_MAX_ENTRIES = 1e5; +function validatePathWithinBase(targetPath, baseDir, entryName) { + const path = /* @__PURE__ */ getPath(); + const resolvedTarget = path.resolve(targetPath); + const resolvedBase = path.resolve(baseDir); + if (!resolvedTarget.startsWith(resolvedBase + path.sep) && resolvedTarget !== resolvedBase) { + throw new Error( + `Path traversal attempt detected: entry "${entryName}" would extract to "${resolvedTarget}" outside target directory "${resolvedBase}"` + ); + } +} +function detectArchiveFormat(filePath) { + const lower = filePath.toLowerCase(); + if (lower.endsWith(".tar.gz")) { + return "tar.gz"; + } + if (lower.endsWith(".tgz")) { + return "tgz"; + } + if (lower.endsWith(".tar")) { + return "tar"; + } + if (lower.endsWith(".zip")) { + return "zip"; + } + return null; +} +async function extractTar(archivePath, outputDir, options = {}) { + const { + maxEntries = DEFAULT_MAX_ENTRIES, + maxFileSize = DEFAULT_MAX_FILE_SIZE, + maxTotalSize = DEFAULT_MAX_TOTAL_SIZE, + strip = 0 + } = options; + const normalizedOutputDir = (0, import_normalize.normalizePath)(outputDir); + await (0, import_fs.safeMkdir)(normalizedOutputDir); + let totalExtractedSize = 0; + let entryCount = 0; + let destroyScheduled = false; + const tarFs = /* @__PURE__ */ getTarFs(); + const extractStream = tarFs.extract(normalizedOutputDir, { + map: (header) => { + if (destroyScheduled) { + return header; + } + entryCount += 1; + if (entryCount > maxEntries) { + destroyScheduled = true; + import_node_process.default.nextTick(() => { + extractStream.destroy( + new Error( + `Archive has too many entries: exceeded limit of ${maxEntries}` + ) + ); + }); + return header; + } + if (header.name.includes("\0")) { + destroyScheduled = true; + import_node_process.default.nextTick(() => { + extractStream.destroy( + new Error( + `Invalid null byte in archive entry name: ${header.name}` + ) + ); + }); + return header; + } + if (header.type === "symlink" || header.type === "link") { + destroyScheduled = true; + import_node_process.default.nextTick(() => { + extractStream.destroy( + new Error( + `Symlink detected in archive: ${header.name}. Symlinks are not supported for security reasons.` + ) + ); + }); + return header; + } + if (header.size && header.size > maxFileSize) { + destroyScheduled = true; + import_node_process.default.nextTick(() => { + extractStream.destroy( + new Error( + `File size exceeds limit: ${header.name} (${header.size} bytes > ${maxFileSize} bytes)` + ) + ); + }); + return header; + } + if (header.size) { + totalExtractedSize += header.size; + if (totalExtractedSize > maxTotalSize) { + destroyScheduled = true; + import_node_process.default.nextTick(() => { + extractStream.destroy( + new Error( + `Total extracted size exceeds limit: ${totalExtractedSize} bytes > ${maxTotalSize} bytes` + ) + ); + }); + return header; + } + } + return header; + }, + strip + }); + extractStream.on("error", () => { + }); + const readStream = (0, import_node_fs.createReadStream)(archivePath); + try { + await (0, import_promises.pipeline)(readStream, extractStream); + } catch (error) { + readStream.destroy(); + throw error; + } +} +async function extractTarGz(archivePath, outputDir, options = {}) { + const { + maxEntries = DEFAULT_MAX_ENTRIES, + maxFileSize = DEFAULT_MAX_FILE_SIZE, + maxTotalSize = DEFAULT_MAX_TOTAL_SIZE, + strip = 0 + } = options; + const normalizedOutputDir = (0, import_normalize.normalizePath)(outputDir); + await (0, import_fs.safeMkdir)(normalizedOutputDir); + let totalExtractedSize = 0; + let entryCount = 0; + let destroyScheduled = false; + const tarFs = /* @__PURE__ */ getTarFs(); + const extractStream = tarFs.extract(normalizedOutputDir, { + map: (header) => { + if (destroyScheduled) { + return header; + } + entryCount += 1; + if (entryCount > maxEntries) { + destroyScheduled = true; + import_node_process.default.nextTick(() => { + extractStream.destroy( + new Error( + `Archive has too many entries: exceeded limit of ${maxEntries}` + ) + ); + }); + return header; + } + if (header.name.includes("\0")) { + destroyScheduled = true; + import_node_process.default.nextTick(() => { + extractStream.destroy( + new Error( + `Invalid null byte in archive entry name: ${header.name}` + ) + ); + }); + return header; + } + if (header.type === "symlink" || header.type === "link") { + destroyScheduled = true; + import_node_process.default.nextTick(() => { + extractStream.destroy( + new Error( + `Symlink detected in archive: ${header.name}. Symlinks are not supported for security reasons.` + ) + ); + }); + return header; + } + if (header.size && header.size > maxFileSize) { + destroyScheduled = true; + import_node_process.default.nextTick(() => { + extractStream.destroy( + new Error( + `File size exceeds limit: ${header.name} (${header.size} bytes > ${maxFileSize} bytes)` + ) + ); + }); + return header; + } + if (header.size) { + totalExtractedSize += header.size; + if (totalExtractedSize > maxTotalSize) { + destroyScheduled = true; + import_node_process.default.nextTick(() => { + extractStream.destroy( + new Error( + `Total extracted size exceeds limit: ${totalExtractedSize} bytes > ${maxTotalSize} bytes` + ) + ); + }); + return header; + } + } + return header; + }, + strip + }); + extractStream.on("error", () => { + }); + const readStream = (0, import_node_fs.createReadStream)(archivePath); + try { + await (0, import_promises.pipeline)(readStream, (0, import_node_zlib.createGunzip)(), extractStream); + } catch (error) { + readStream.destroy(); + throw error; + } +} +async function extractZip(archivePath, outputDir, options = {}) { + const { + maxEntries = DEFAULT_MAX_ENTRIES, + maxFileSize = DEFAULT_MAX_FILE_SIZE, + maxTotalSize = DEFAULT_MAX_TOTAL_SIZE, + strip = 0 + } = options; + const normalizedOutputDir = (0, import_normalize.normalizePath)(outputDir); + await (0, import_fs.safeMkdir)(normalizedOutputDir); + const AdmZip = /* @__PURE__ */ getAdmZip(); + const zip = new AdmZip(archivePath); + const path = /* @__PURE__ */ getPath(); + const entries = zip.getEntries(); + if (entries.length > maxEntries) { + throw new Error( + `Archive has too many entries: ${entries.length} (limit: ${maxEntries})` + ); + } + let totalExtractedSize = 0; + for (const entry of entries) { + if (entry.isDirectory) { + continue; + } + if (entry.entryName.includes("\0")) { + throw new Error( + `Invalid null byte in archive entry name: ${entry.entryName}` + ); + } + const uncompressedSize = entry.header.size; + if (uncompressedSize > maxFileSize) { + throw new Error( + `File size exceeds limit: ${entry.entryName} (${uncompressedSize} bytes > ${maxFileSize} bytes)` + ); + } + totalExtractedSize += uncompressedSize; + if (totalExtractedSize > maxTotalSize) { + throw new Error( + `Total extracted size exceeds limit: ${totalExtractedSize} bytes > ${maxTotalSize} bytes` + ); + } + const parts = entry.entryName.split("/"); + if (parts.length <= strip) { + continue; + } + const strippedPath = parts.slice(strip).join("/"); + const targetPath = path.join(normalizedOutputDir, strippedPath); + validatePathWithinBase(targetPath, normalizedOutputDir, entry.entryName); + } + if (strip === 0) { + for (const entry of entries) { + if (!entry.isDirectory) { + const targetPath = path.join(normalizedOutputDir, entry.entryName); + validatePathWithinBase(targetPath, normalizedOutputDir, entry.entryName); + } + } + zip.extractAllTo(normalizedOutputDir, true); + } else { + const path2 = /* @__PURE__ */ getPath(); + const entries2 = zip.getEntries(); + const dirsToCreate = /* @__PURE__ */ new Set(); + for (const entry of entries2) { + if (entry.isDirectory) { + continue; + } + const parts = entry.entryName.split("/"); + if (parts.length <= strip) { + continue; + } + const strippedPath = parts.slice(strip).join("/"); + const targetPath = path2.join(normalizedOutputDir, strippedPath); + dirsToCreate.add(path2.dirname(targetPath)); + } + await Promise.all(Array.from(dirsToCreate).map((dir) => (0, import_fs.safeMkdir)(dir))); + for (const entry of entries2) { + if (entry.isDirectory) { + continue; + } + const parts = entry.entryName.split("/"); + if (parts.length <= strip) { + continue; + } + const strippedPath = parts.slice(strip).join("/"); + const targetPath = path2.join(normalizedOutputDir, strippedPath); + zip.extractEntryTo(entry, path2.dirname(targetPath), false, true); + } + } +} +async function extractArchive(archivePath, outputDir, options = {}) { + const format = detectArchiveFormat(archivePath); + if (!format) { + const path = /* @__PURE__ */ getPath(); + const ext = path.extname(archivePath).toLowerCase(); + throw new Error( + `Unsupported archive format${ext ? ` (extension: ${ext})` : ""}: ${archivePath}. Supported formats: .zip, .tar, .tar.gz, .tgz` + ); + } + switch (format) { + case "zip": + return await extractZip(archivePath, outputDir, options); + case "tar": + return await extractTar(archivePath, outputDir, options); + case "tar.gz": + case "tgz": + return await extractTarGz(archivePath, outputDir, options); + } +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + detectArchiveFormat, + extractArchive, + extractTar, + extractTarGz, + extractZip +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/argv/flags.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/argv/flags.d.ts new file mode 100644 index 00000000..4d8d45c7 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/argv/flags.d.ts @@ -0,0 +1,283 @@ +export interface FlagValues { + [key: string]: unknown; + quiet?: boolean; + silent?: boolean; + verbose?: boolean; + help?: boolean; + all?: boolean; + fix?: boolean; + force?: boolean; + 'dry-run'?: boolean; + json?: boolean; + debug?: boolean; + watch?: boolean; + coverage?: boolean; + cover?: boolean; + update?: boolean; + staged?: boolean; + changed?: boolean; +} +/** + * Accepted input types for flag checking functions. + * Can be parsed flag values, process.argv array, or undefined (uses process.argv). + */ +export type FlagInput = FlagValues | string[] | readonly string[] | undefined; +/** + * Get the appropriate log level based on flags. + * Returns 'silent', 'error', 'warn', 'info', 'verbose', or 'debug'. + * Accepts FlagValues object, process.argv array, or undefined (uses process.argv). + * + * @example + * ```typescript + * getLogLevel() // 'info' (default) + * getLogLevel({ quiet: true }) // 'silent' + * getLogLevel(['--debug']) // 'debug' + * ``` + */ +export declare function getLogLevel(input?: FlagInput): string; +/** + * Check if all flag is set. + * Accepts FlagValues object, process.argv array, or undefined (uses process.argv). + * + * @example + * ```typescript + * isAll({ all: true }) // true + * isAll(['--all']) // true + * ``` + */ +export declare function isAll(input?: FlagInput): boolean; +/** + * Check if changed files mode is enabled. + * Accepts FlagValues object, process.argv array, or undefined (uses process.argv). + * + * @example + * ```typescript + * isChanged({ changed: true }) // true + * isChanged(['--changed']) // true + * ``` + */ +export declare function isChanged(input?: FlagInput): boolean; +/** + * Check if coverage mode is enabled. + * Checks both 'coverage' and 'cover' flags. + * Accepts FlagValues object, process.argv array, or undefined (uses process.argv). + * + * @example + * ```typescript + * isCoverage({ coverage: true }) // true + * isCoverage(['--cover']) // true + * ``` + */ +export declare function isCoverage(input?: FlagInput): boolean; +/** + * Check if debug mode is enabled. + * Accepts FlagValues object, process.argv array, or undefined (uses process.argv). + * + * @example + * ```typescript + * isDebug({ debug: true }) // true + * isDebug(['--debug']) // true + * ``` + */ +export declare function isDebug(input?: FlagInput): boolean; +/** + * Check if dry-run mode is enabled. + * Accepts FlagValues object, process.argv array, or undefined (uses process.argv). + * + * @example + * ```typescript + * isDryRun({ 'dry-run': true }) // true + * isDryRun(['--dry-run']) // true + * ``` + */ +export declare function isDryRun(input?: FlagInput): boolean; +/** + * Check if fix/autofix mode is enabled. + * Accepts FlagValues object, process.argv array, or undefined (uses process.argv). + * + * @example + * ```typescript + * isFix({ fix: true }) // true + * isFix(['--fix']) // true + * ``` + */ +export declare function isFix(input?: FlagInput): boolean; +/** + * Check if force mode is enabled. + * Accepts FlagValues object, process.argv array, or undefined (uses process.argv). + * + * @example + * ```typescript + * isForce({ force: true }) // true + * isForce(['--force']) // true + * ``` + */ +export declare function isForce(input?: FlagInput): boolean; +/** + * Check if help flag is set. + * Accepts FlagValues object, process.argv array, or undefined (uses process.argv). + * + * @example + * ```typescript + * isHelp({ help: true }) // true + * isHelp(['-h']) // true + * ``` + */ +export declare function isHelp(input?: FlagInput): boolean; +/** + * Check if JSON output is requested. + * Accepts FlagValues object, process.argv array, or undefined (uses process.argv). + * + * @example + * ```typescript + * isJson({ json: true }) // true + * isJson(['--json']) // true + * ``` + */ +export declare function isJson(input?: FlagInput): boolean; +/** + * Check if quiet/silent mode is enabled. + * Accepts FlagValues object, process.argv array, or undefined (uses process.argv). + * + * @example + * ```typescript + * isQuiet({ quiet: true }) // true + * isQuiet(['--silent']) // true + * ``` + */ +export declare function isQuiet(input?: FlagInput): boolean; +/** + * Check if staged files mode is enabled. + * Accepts FlagValues object, process.argv array, or undefined (uses process.argv). + * + * @example + * ```typescript + * isStaged({ staged: true }) // true + * isStaged(['--staged']) // true + * ``` + */ +export declare function isStaged(input?: FlagInput): boolean; +/** + * Check if update mode is enabled (for snapshots, dependencies, etc). + * Accepts FlagValues object, process.argv array, or undefined (uses process.argv). + * + * @example + * ```typescript + * isUpdate({ update: true }) // true + * isUpdate(['-u']) // true + * ``` + */ +export declare function isUpdate(input?: FlagInput): boolean; +/** + * Check if verbose mode is enabled. + * Accepts FlagValues object, process.argv array, or undefined (uses process.argv). + * + * @example + * ```typescript + * isVerbose({ verbose: true }) // true + * isVerbose(['--verbose']) // true + * ``` + */ +export declare function isVerbose(input?: FlagInput): boolean; +/** + * Check if watch mode is enabled. + * Accepts FlagValues object, process.argv array, or undefined (uses process.argv). + * + * @example + * ```typescript + * isWatch({ watch: true }) // true + * isWatch(['-w']) // true + * ``` + */ +export declare function isWatch(input?: FlagInput): boolean; +/** + * Common flag definitions for parseArgs configuration. + * Can be spread into parseArgs options for consistency. + */ +export declare const COMMON_FLAGS: { + all: { + type: "boolean"; + default: boolean; + description: string; + }; + changed: { + type: "boolean"; + default: boolean; + description: string; + }; + coverage: { + type: "boolean"; + default: boolean; + description: string; + }; + cover: { + type: "boolean"; + default: boolean; + description: string; + }; + debug: { + type: "boolean"; + default: boolean; + description: string; + }; + "dry-run": { + type: "boolean"; + default: boolean; + description: string; + }; + fix: { + type: "boolean"; + default: boolean; + description: string; + }; + force: { + type: "boolean"; + default: boolean; + description: string; + }; + help: { + type: "boolean"; + default: boolean; + short: string; + description: string; + }; + json: { + type: "boolean"; + default: boolean; + description: string; + }; + quiet: { + type: "boolean"; + default: boolean; + short: string; + description: string; + }; + silent: { + type: "boolean"; + default: boolean; + description: string; + }; + staged: { + type: "boolean"; + default: boolean; + description: string; + }; + update: { + type: "boolean"; + default: boolean; + short: string; + description: string; + }; + verbose: { + type: "boolean"; + default: boolean; + short: string; + description: string; + }; + watch: { + type: "boolean"; + default: boolean; + short: string; + description: string; + }; +}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/argv/flags.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/argv/flags.js new file mode 100644 index 00000000..65a05fa3 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/argv/flags.js @@ -0,0 +1,295 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var flags_exports = {}; +__export(flags_exports, { + COMMON_FLAGS: () => COMMON_FLAGS, + getLogLevel: () => getLogLevel, + isAll: () => isAll, + isChanged: () => isChanged, + isCoverage: () => isCoverage, + isDebug: () => isDebug, + isDryRun: () => isDryRun, + isFix: () => isFix, + isForce: () => isForce, + isHelp: () => isHelp, + isJson: () => isJson, + isQuiet: () => isQuiet, + isStaged: () => isStaged, + isUpdate: () => isUpdate, + isVerbose: () => isVerbose, + isWatch: () => isWatch +}); +module.exports = __toCommonJS(flags_exports); +var import_node_process = __toESM(require("node:process")); +const processArg = [...import_node_process.default.argv]; +function getLogLevel(input) { + if (isQuiet(input)) { + return "silent"; + } + if (isDebug(input)) { + return "debug"; + } + if (isVerbose(input)) { + return "verbose"; + } + return "info"; +} +function isAll(input) { + if (!input) { + return processArg.includes("--all"); + } + if (Array.isArray(input)) { + return input.includes("--all"); + } + return !!input.all; +} +function isChanged(input) { + if (!input) { + return processArg.includes("--changed"); + } + if (Array.isArray(input)) { + return input.includes("--changed"); + } + return !!input.changed; +} +function isCoverage(input) { + if (!input) { + return processArg.includes("--coverage") || processArg.includes("--cover"); + } + if (Array.isArray(input)) { + return input.includes("--coverage") || input.includes("--cover"); + } + return !!(input.coverage || input.cover); +} +function isDebug(input) { + if (!input) { + return processArg.includes("--debug"); + } + if (Array.isArray(input)) { + return input.includes("--debug"); + } + return !!input.debug; +} +function isDryRun(input) { + if (!input) { + return processArg.includes("--dry-run"); + } + if (Array.isArray(input)) { + return input.includes("--dry-run"); + } + return !!input["dry-run"]; +} +function isFix(input) { + if (!input) { + return processArg.includes("--fix"); + } + if (Array.isArray(input)) { + return input.includes("--fix"); + } + return !!input.fix; +} +function isForce(input) { + if (!input) { + return processArg.includes("--force"); + } + if (Array.isArray(input)) { + return input.includes("--force"); + } + return !!input.force; +} +function isHelp(input) { + if (!input) { + return processArg.includes("--help") || processArg.includes("-h"); + } + if (Array.isArray(input)) { + return input.includes("--help") || input.includes("-h"); + } + return !!input.help; +} +function isJson(input) { + if (!input) { + return processArg.includes("--json"); + } + if (Array.isArray(input)) { + return input.includes("--json"); + } + return !!input.json; +} +function isQuiet(input) { + if (!input) { + return processArg.includes("--quiet") || processArg.includes("--silent"); + } + if (Array.isArray(input)) { + return input.includes("--quiet") || input.includes("--silent"); + } + return !!(input.quiet || input.silent); +} +function isStaged(input) { + if (!input) { + return processArg.includes("--staged"); + } + if (Array.isArray(input)) { + return input.includes("--staged"); + } + return !!input.staged; +} +function isUpdate(input) { + if (!input) { + return processArg.includes("--update") || processArg.includes("-u"); + } + if (Array.isArray(input)) { + return input.includes("--update") || input.includes("-u"); + } + return !!input.update; +} +function isVerbose(input) { + if (!input) { + return processArg.includes("--verbose"); + } + if (Array.isArray(input)) { + return input.includes("--verbose"); + } + return !!input.verbose; +} +function isWatch(input) { + if (!input) { + return processArg.includes("--watch") || processArg.includes("-w"); + } + if (Array.isArray(input)) { + return input.includes("--watch") || input.includes("-w"); + } + return !!input.watch; +} +const COMMON_FLAGS = { + all: { + type: "boolean", + default: false, + description: "Target all files" + }, + changed: { + type: "boolean", + default: false, + description: "Target changed files" + }, + coverage: { + type: "boolean", + default: false, + description: "Run with coverage" + }, + cover: { + type: "boolean", + default: false, + description: "Run with coverage (alias)" + }, + debug: { + type: "boolean", + default: false, + description: "Enable debug output" + }, + "dry-run": { + type: "boolean", + default: false, + description: "Perform a dry run" + }, + fix: { + type: "boolean", + default: false, + description: "Automatically fix issues" + }, + force: { + type: "boolean", + default: false, + description: "Force the operation" + }, + help: { + type: "boolean", + default: false, + short: "h", + description: "Show help" + }, + json: { + type: "boolean", + default: false, + description: "Output as JSON" + }, + quiet: { + type: "boolean", + default: false, + short: "q", + description: "Suppress output" + }, + silent: { + type: "boolean", + default: false, + description: "Suppress all output" + }, + staged: { + type: "boolean", + default: false, + description: "Target staged files" + }, + update: { + type: "boolean", + default: false, + short: "u", + description: "Update snapshots/deps" + }, + verbose: { + type: "boolean", + default: false, + short: "v", + description: "Verbose output" + }, + watch: { + type: "boolean", + default: false, + short: "w", + description: "Watch mode" + } +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + COMMON_FLAGS, + getLogLevel, + isAll, + isChanged, + isCoverage, + isDebug, + isDryRun, + isFix, + isForce, + isHelp, + isJson, + isQuiet, + isStaged, + isUpdate, + isVerbose, + isWatch +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/argv/parse.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/argv/parse.d.ts new file mode 100644 index 00000000..e929011c --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/argv/parse.d.ts @@ -0,0 +1,107 @@ +/** + * Yargs parser result interface. + */ +interface YargsArguments extends Record { + _: string[]; + $0?: string; +} +/** + * Options for configuring argument parsing, similar to Node.js util.parseArgs. + */ +export interface ParseArgsOptionsConfig { + // Whether the option accepts multiple values (array). + multiple?: boolean | undefined; + // Short alias for the option (single character). + short?: string | undefined; + // Type of the option value. + type?: 'boolean' | 'string' | undefined; + // Default value for the option. + default?: unknown | undefined; + // Transform function to coerce parsed values. + coerce?: (value: unknown) => unknown | undefined; +} +/** + * Configuration object for parseArgs function, similar to Node.js util.parseArgs. + */ +export interface ParseArgsConfig { + // Command-line arguments to parse (defaults to process.argv.slice(2)). + args?: readonly string[] | undefined; + // Options configuration object. + options?: Record | undefined; + // Whether to throw on unknown options (default: true). + strict?: boolean | undefined; + // Whether to populate tokens array (not implemented, for API compatibility). + tokens?: boolean | undefined; + // Whether to allow positional arguments after options. + allowPositionals?: boolean | undefined; + // Whether to allow negative numbers as option values. + allowNegative?: boolean | undefined; + // Advanced yargs-parser configuration passthrough. + configuration?: Record | undefined; +} +/** + * Result of parsing command-line arguments. + */ +export interface ParsedArgs> { + // Parsed option values. + values: T; + // Positional arguments (non-option arguments). + positionals: string[]; + // Raw parsed arguments object from yargs-parser. + raw: YargsArguments; +} +/** + * Parse command-line arguments with a Node.js parseArgs-compatible API. + * Uses yargs-parser internally for robust argument parsing. + * + * @example + * ```typescript + * const { values, positionals } = parseArgs({ + * args: ['--force', '--quiet', 'file.ts'], + * options: { + * force: { type: 'boolean' }, + * quiet: { type: 'boolean', short: 'q' }, + * }, + * }) + * ``` + */ +export declare function parseArgs>(config?: ParseArgsConfig): ParsedArgs; +/** + * Parse command-line arguments with Socket defaults. + * Provides sensible defaults for Socket CLI applications. + * + * @example + * ```typescript + * const { values, positionals } = parseArgsWithDefaults({ + * args: ['--force', 'file.ts'], + * options: { force: { type: 'boolean' } }, + * }) + * ``` + */ +export declare function parseArgsWithDefaults>(config?: ParseArgsConfig): ParsedArgs; +/** + * Common parseArgs configuration for Socket registry scripts. + */ +export declare const commonParseArgsConfig: ParseArgsConfig; +/** + * Extract positional arguments from process.argv. + * Useful for commands that accept file paths or other positional parameters. + * + * @example + * ```typescript + * // process.argv = ["node", "script.js", "src", "lib", "--verbose"] + * getPositionalArgs() // ["src", "lib"] + * ``` + */ +export declare function getPositionalArgs(startIndex?: number): string[]; +/** + * Check if a specific flag is present in argv. + * + * @example + * ```typescript + * hasFlag('verbose') // true if --verbose is in process.argv + * hasFlag('force', ['--force', '--quiet']) // true + * ``` + */ +export declare function hasFlag(flag: string, argv?: string[]): boolean; +export {}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/argv/parse.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/argv/parse.js new file mode 100644 index 00000000..69f24f14 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/argv/parse.js @@ -0,0 +1,169 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var parse_exports = {}; +__export(parse_exports, { + commonParseArgsConfig: () => commonParseArgsConfig, + getPositionalArgs: () => getPositionalArgs, + hasFlag: () => hasFlag, + parseArgs: () => parseArgs, + parseArgsWithDefaults: () => parseArgsWithDefaults +}); +module.exports = __toCommonJS(parse_exports); +var import_node_process = __toESM(require("node:process")); +var import_yargs_parser = __toESM(require("../external/yargs-parser")); +function parseArgs(config = {}) { + const { + allowNegative = false, + allowPositionals = true, + args = import_node_process.default.argv.slice(2), + configuration, + options = {}, + strict = true + } = config; + const yargsOptions = { + // Arrays of option names to treat as specific types. + boolean: [], + string: [], + array: [], + // Maps for aliases, defaults, and transformations. + alias: {}, + default: {}, + coerce: {}, + "unknown-options-as-args": !strict, + "parse-numbers": false, + "parse-positional-numbers": false, + "boolean-negation": !allowNegative, + "halt-at-non-option": !allowPositionals, + configuration: { + // Enable kebab-case to camelCase conversion (e.g., --temp-dir → tempDir). + "camel-case-expansion": true, + // Disable dot notation to avoid confusing nested property parsing. + "dot-notation": false, + // Convert duplicate arguments into arrays automatically. + "duplicate-arguments-array": true, + // Flatten nested arrays from duplicate arguments for cleaner output. + "flatten-duplicate-arrays": true, + // Populate the '--' key with arguments after the -- separator. + "populate--": true, + // Allow short option grouping like -abc for -a -b -c. + "short-option-groups": true, + // Keep aliased keys in the result for flexibility. + "strip-aliased": false, + // Keep both kebab-case and camelCase keys for flexibility. + "strip-dashed": false, + ...configuration + } + }; + for (const { 0: key, 1: optionConfig } of Object.entries(options)) { + const { + coerce, + default: defaultValue, + multiple, + short, + type + } = optionConfig; + if (type === "boolean") { + yargsOptions.boolean?.push(key); + } else if (type === "string") { + yargsOptions.string?.push(key); + } + if (multiple) { + yargsOptions.array?.push(key); + } + if (short) { + ; + yargsOptions.alias[short] = key; + } + if (defaultValue !== void 0) { + ; + yargsOptions.default[key] = defaultValue; + } + if (coerce) { + ; + yargsOptions.coerce[key] = coerce; + } + } + const parsed = (0, import_yargs_parser.default)(args, yargsOptions); + const positionals = parsed._ || []; + const { _, ...values } = parsed; + const stringPositionals = positionals.map(String); + return { + values, + positionals: stringPositionals, + raw: parsed + }; +} +function parseArgsWithDefaults(config = {}) { + return parseArgs({ + strict: false, + allowPositionals: true, + ...config + }); +} +const commonParseArgsConfig = { + options: { + force: { + type: "boolean", + short: "f", + default: false + }, + quiet: { + type: "boolean", + short: "q", + default: false + } + }, + strict: false +}; +function getPositionalArgs(startIndex = 2) { + const args = import_node_process.default.argv.slice(startIndex); + const positionals = []; + let i = 0; + while (i < args.length) { + const arg = args[i]; + if (arg.startsWith("-")) { + break; + } + positionals.push(arg); + i++; + } + return positionals; +} +function hasFlag(flag, argv = import_node_process.default.argv) { + return argv.includes(`--${flag}`); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + commonParseArgsConfig, + getPositionalArgs, + hasFlag, + parseArgs, + parseArgsWithDefaults +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/arrays.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/arrays.d.ts new file mode 100644 index 00000000..b3537fad --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/arrays.d.ts @@ -0,0 +1,172 @@ +/** + * Split an array into chunks of a specified size. + * + * Divides an array into smaller arrays of the specified chunk size. + * The last chunk may contain fewer elements if the array length is not + * evenly divisible by the chunk size. + * + * @param arr - The array to split into chunks (can be readonly) + * @param size - Size of each chunk. Must be greater than 0. + * @default 2 + * @returns Array of chunks, where each chunk is an array of elements + * @throws {Error} If chunk size is less than or equal to 0 + * + * @example + * ```ts + * // Split into pairs (default) + * arrayChunk([1, 2, 3, 4, 5]) + * // Returns: [[1, 2], [3, 4], [5]] + * + * // Split into groups of 3 + * arrayChunk(['a', 'b', 'c', 'd', 'e', 'f', 'g'], 3) + * // Returns: [['a', 'b', 'c'], ['d', 'e', 'f'], ['g']] + * + * // Works with readonly arrays + * const readonlyArr = [1, 2, 3] as const + * arrayChunk(readonlyArr) + * // Returns: [[1, 2], [3]] + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function arrayChunk(arr: T[] | readonly T[], size?: number | undefined): T[][]; +/** + * Get unique values from an array. + * + * Returns a new array containing only the unique values from the input array. + * Uses `Set` internally for efficient deduplication. Order of first occurrence + * is preserved. + * + * @param arr - The array to deduplicate (can be readonly) + * @returns New array with duplicate values removed + * + * @example + * ```ts + * // Remove duplicate numbers + * arrayUnique([1, 2, 2, 3, 1, 4]) + * // Returns: [1, 2, 3, 4] + * + * // Remove duplicate strings + * arrayUnique(['apple', 'banana', 'apple', 'cherry']) + * // Returns: ['apple', 'banana', 'cherry'] + * + * // Works with readonly arrays + * const readonlyArr = [1, 1, 2] as const + * arrayUnique(readonlyArr) + * // Returns: [1, 2] + * + * // Empty arrays return empty + * arrayUnique([]) + * // Returns: [] + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function arrayUnique(arr: T[] | readonly T[]): T[]; +// IMPORTANT: Do not use destructuring here - use direct assignment instead. +// tsgo has a bug that incorrectly transpiles destructured exports, resulting in +// `exports.SomeName = void 0;` which causes runtime errors. +// See: https://github.com/SocketDev/socket-packageurl-js/issues/3 +/** + * Alias for native Array.isArray. + * Determines whether the passed value is an array. + * + * This is a direct reference to the native `Array.isArray` method, + * providing a type guard that narrows the type to an array type. + * Exported for consistency with other array utilities in this module. + * + * @param value - The value to check + * @returns `true` if the value is an array, `false` otherwise + * + * @example + * ```ts + * // Check if value is an array + * isArray([1, 2, 3]) + * // Returns: true + * + * isArray('not an array') + * // Returns: false + * + * isArray(null) + * // Returns: false + * + * // Type guard usage + * function processValue(value: unknown) { + * if (isArray(value)) { + * // TypeScript knows value is an array here + * console.log(value.length) + * } + * } + * ``` + */ +export declare const isArray: (arg: any) => arg is any[]; +/** + * Join array elements with proper "and" conjunction formatting. + * + * Formats an array of strings into a grammatically correct list using + * "and" as the conjunction. Uses `Intl.ListFormat` for proper English + * formatting with Oxford comma support. + * + * @param arr - Array of strings to join (can be readonly) + * @returns Formatted string with proper "and" conjunction + * + * @example + * ```ts + * // Two items + * joinAnd(['apples', 'oranges']) + * // Returns: "apples and oranges" + * + * // Three or more items (Oxford comma) + * joinAnd(['apples', 'oranges', 'bananas']) + * // Returns: "apples, oranges, and bananas" + * + * // Single item + * joinAnd(['apples']) + * // Returns: "apples" + * + * // Empty array + * joinAnd([]) + * // Returns: "" + * + * // Usage in messages + * const items = ['React', 'Vue', 'Angular'] + * console.log(`You can choose ${joinAnd(items)}`) + * // Outputs: "You can choose React, Vue, and Angular" + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function joinAnd(arr: string[] | readonly string[]): string; +/** + * Join array elements with proper "or" disjunction formatting. + * + * Formats an array of strings into a grammatically correct list using + * "or" as the disjunction. Uses `Intl.ListFormat` for proper English + * formatting with Oxford comma support. + * + * @param arr - Array of strings to join (can be readonly) + * @returns Formatted string with proper "or" disjunction + * + * @example + * ```ts + * // Two items + * joinOr(['yes', 'no']) + * // Returns: "yes or no" + * + * // Three or more items (Oxford comma) + * joinOr(['red', 'green', 'blue']) + * // Returns: "red, green, or blue" + * + * // Single item + * joinOr(['maybe']) + * // Returns: "maybe" + * + * // Empty array + * joinOr([]) + * // Returns: "" + * + * // Usage in prompts + * const options = ['npm', 'yarn', 'pnpm'] + * console.log(`Choose a package manager: ${joinOr(options)}`) + * // Outputs: "Choose a package manager: npm, yarn, or pnpm" + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function joinOr(arr: string[] | readonly string[]): string; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/arrays.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/arrays.js new file mode 100644 index 00000000..55be4c25 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/arrays.js @@ -0,0 +1,86 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var arrays_exports = {}; +__export(arrays_exports, { + arrayChunk: () => arrayChunk, + arrayUnique: () => arrayUnique, + isArray: () => isArray, + joinAnd: () => joinAnd, + joinOr: () => joinOr +}); +module.exports = __toCommonJS(arrays_exports); +let _conjunctionFormatter; +// @__NO_SIDE_EFFECTS__ +function getConjunctionFormatter() { + if (_conjunctionFormatter === void 0) { + _conjunctionFormatter = new Intl.ListFormat("en", { + style: "long", + // "and" lists. + type: "conjunction" + }); + } + return _conjunctionFormatter; +} +let _disjunctionFormatter; +// @__NO_SIDE_EFFECTS__ +function getDisjunctionFormatter() { + if (_disjunctionFormatter === void 0) { + _disjunctionFormatter = new Intl.ListFormat("en", { + style: "long", + // "or" lists. + type: "disjunction" + }); + } + return _disjunctionFormatter; +} +// @__NO_SIDE_EFFECTS__ +function arrayChunk(arr, size) { + const chunkSize = size ?? 2; + if (chunkSize <= 0) { + throw new Error("Chunk size must be greater than 0"); + } + const { length } = arr; + const chunks = []; + for (let i = 0; i < length; i += chunkSize) { + chunks.push(arr.slice(i, i + chunkSize)); + } + return chunks; +} +// @__NO_SIDE_EFFECTS__ +function arrayUnique(arr) { + return [...new Set(arr)]; +} +const isArray = Array.isArray; +// @__NO_SIDE_EFFECTS__ +function joinAnd(arr) { + return (/* @__PURE__ */ getConjunctionFormatter()).format(arr); +} +// @__NO_SIDE_EFFECTS__ +function joinOr(arr) { + return (/* @__PURE__ */ getDisjunctionFormatter()).format(arr); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + arrayChunk, + arrayUnique, + isArray, + joinAnd, + joinOr +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/bin.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/bin.d.ts new file mode 100644 index 00000000..6058d363 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/bin.d.ts @@ -0,0 +1,179 @@ +/** + * Options for the which function. + */ +export interface WhichOptions { + /** If true, return all matches instead of just the first one. */ + all?: boolean | undefined; + /** If true, return null instead of throwing when no match is found. */ + nothrow?: boolean | undefined; + /** Path to search in. */ + path?: string | undefined; + /** Path separator character. */ + pathExt?: string | undefined; + /** Environment variables to use. */ + env?: Record | undefined; + /** Current working directory for resolving relative paths. */ + cwd?: string | undefined; +} +/** + * Execute a binary with the given arguments. + * + * @example + * ```typescript + * await execBin('pnpm', ['install']) + * await execBin('/usr/local/bin/node', ['script.js'], { cwd: '/tmp' }) + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function execBin(binPath: string, args?: string[], options?: import('./spawn').SpawnOptions): Promise<{ + cmd: string; + args: string[] | readonly string[]; + code: number; + signal: NodeJS.Signals; + stdout: string | Buffer; + stderr: string | Buffer; +}>; +/** + * Find the real executable for a binary, bypassing shadow bins. + * + * @example + * ```typescript + * const npmPath = findRealBin('npm', ['/usr/local/bin/npm']) + * const gitPath = findRealBin('git') + * ``` + */ +export declare function findRealBin(binName: string, commonPaths?: string[]): string | undefined; +/** + * Find the real npm executable, bypassing any aliases and shadow bins. + * + * @example + * ```typescript + * const npmPath = findRealNpm() + * // e.g. '/usr/local/bin/npm' + * ``` + */ +export declare function findRealNpm(): string; +/** + * Find the real pnpm executable, bypassing any aliases and shadow bins. + * + * @example + * ```typescript + * const pnpmPath = findRealPnpm() + * // e.g. '/usr/local/bin/pnpm' + * ``` + */ +export declare function findRealPnpm(): string; +/** + * Find the real yarn executable, bypassing any aliases and shadow bins. + * + * @example + * ```typescript + * const yarnPath = findRealYarn() + * // e.g. '/usr/local/bin/yarn' + * ``` + */ +export declare function findRealYarn(): string; +/** + * Check if a directory path contains any shadow bin patterns. + * + * @example + * ```typescript + * isShadowBinPath('/tmp/project/node_modules/.bin') // true + * isShadowBinPath('/usr/local/bin') // false + * ``` + */ +export declare function isShadowBinPath(dirPath: string | undefined): boolean; +/*@__NO_SIDE_EFFECTS__*/ +/** + * Resolve a binary path to the real underlying script file. + * Handles Windows .cmd wrappers and Unix shell scripts, resolving them to the actual .js files they execute. + * + * @example + * ```typescript + * const realPath = resolveRealBinSync('/usr/local/bin/npm') + * // e.g. '/usr/local/lib/node_modules/npm/bin/npm-cli.js' + * ``` + */ +export declare function resolveRealBinSync(binPath: string): string; +/** + * Find an executable in the system PATH asynchronously. + * + * This function resolves binary names to their full paths by searching the system PATH. + * It should only be used for binary names (not paths). If the input is already a path + * (absolute or relative), it will be returned as-is without PATH resolution. + * + * Binary name vs. path detection: + * - Binary names: 'npm', 'git', 'node' - will be resolved via PATH + * - Absolute paths: '/usr/bin/node', 'C:\\Program Files\\nodejs\\node.exe' - returned as-is + * - Relative paths: './node', '../bin/npm' - returned as-is + * + * @param {string} binName - The binary name to resolve (e.g., 'npm', 'git') + * @param {WhichOptions | undefined} options - Options for resolution + * @returns {Promise} Promise resolving to the full path, the original path, or null if not found + * + * @example + * ```typescript + * // Resolve binary names + * await which('node') // '/usr/local/bin/node' + * await which('npm') // '/usr/local/bin/npm' + * await which('nonexistent') // null + * + * // Paths are returned as-is + * await which('/usr/bin/node') // '/usr/bin/node' + * await which('./local-script') // './local-script' + * ``` + */ +export declare function which(binName: string, options?: WhichOptions): Promise; +/** + * Find a binary in the system PATH and resolve to the real underlying script asynchronously. + * Resolves wrapper scripts (.cmd, .ps1, shell scripts) to the actual .js files they execute. + * @throws {Error} If the binary is not found and nothrow is false. + * + * @example + * ```typescript + * const npmPath = await whichReal('npm') + * // e.g. '/usr/local/lib/node_modules/npm/bin/npm-cli.js' + * ``` + */ +export declare function whichReal(binName: string, options?: WhichOptions): Promise; +/** + * Find a binary in the system PATH and resolve to the real underlying script synchronously. + * Resolves wrapper scripts (.cmd, .ps1, shell scripts) to the actual .js files they execute. + * @throws {Error} If the binary is not found and nothrow is false. + * + * @example + * ```typescript + * const npmPath = whichRealSync('npm') + * // e.g. '/usr/local/lib/node_modules/npm/bin/npm-cli.js' + * ``` + */ +export declare function whichRealSync(binName: string, options?: WhichOptions): string | string[] | undefined; +/** + * Find an executable in the system PATH synchronously. + * + * This function resolves binary names to their full paths by searching the system PATH. + * It should only be used for binary names (not paths). If the input is already a path + * (absolute or relative), it will be returned as-is without PATH resolution. + * + * Binary name vs. path detection: + * - Binary names: 'npm', 'git', 'node' - will be resolved via PATH + * - Absolute paths: '/usr/bin/node', 'C:\\Program Files\\nodejs\\node.exe' - returned as-is + * - Relative paths: './node', '../bin/npm' - returned as-is + * + * @param {string} binName - The binary name to resolve (e.g., 'npm', 'git') + * @param {WhichOptions | undefined} options - Options for resolution + * @returns {string | string[] | null} The full path to the binary, the original path if input is a path, or null if not found + * + * @example + * ```typescript + * // Resolve binary names + * whichSync('node') // '/usr/local/bin/node' + * whichSync('npm') // '/usr/local/bin/npm' + * whichSync('nonexistent') // null + * + * // Paths are returned as-is + * whichSync('/usr/bin/node') // '/usr/bin/node' + * whichSync('./local-script') // './local-script' + * ``` + */ +export declare function whichSync(binName: string, options?: WhichOptions): string | string[] | null; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/bin.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/bin.js new file mode 100644 index 00000000..0961c102 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/bin.js @@ -0,0 +1,520 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var bin_exports = {}; +__export(bin_exports, { + execBin: () => execBin, + findRealBin: () => findRealBin, + findRealNpm: () => findRealNpm, + findRealPnpm: () => findRealPnpm, + findRealYarn: () => findRealYarn, + isShadowBinPath: () => isShadowBinPath, + resolveRealBinSync: () => resolveRealBinSync, + which: () => which, + whichReal: () => whichReal, + whichRealSync: () => whichRealSync, + whichSync: () => whichSync +}); +module.exports = __toCommonJS(bin_exports); +var import_node_process = __toESM(require("node:process")); +var import_home = require("./env/home"); +var import_windows = require("./env/windows"); +var import_xdg = require("./env/xdg"); +var import_platform = require("./constants/platform"); +var import_which = __toESM(require("./external/which")); +var import_fs = require("./fs"); +var import_normalize = require("./paths/normalize"); +var import_spawn = require("./spawn"); +const binPathCache = /* @__PURE__ */ new Map(); +const binPathAllCache = /* @__PURE__ */ new Map(); +const voltaBinCache = /* @__PURE__ */ new Map(); +let _fs; +// @__NO_SIDE_EFFECTS__ +function getFs() { + if (_fs === void 0) { + _fs = require("fs"); + } + return _fs; +} +let _path; +// @__NO_SIDE_EFFECTS__ +function getPath() { + if (_path === void 0) { + _path = require("path"); + } + return _path; +} +// @__NO_SIDE_EFFECTS__ +async function execBin(binPath, args, options) { + let resolvedPath; + if ((0, import_normalize.isPath)(binPath)) { + resolvedPath = /* @__PURE__ */ resolveRealBinSync(binPath); + } else { + const cached = binPathCache.get(binPath); + if (cached) { + if ((/* @__PURE__ */ getFs()).existsSync(cached)) { + resolvedPath = cached; + } else { + binPathCache.delete(binPath); + } + } + if (!resolvedPath) { + resolvedPath = await whichReal(binPath); + if (typeof resolvedPath === "string") { + binPathCache.set(binPath, resolvedPath); + } + } + } + if (!resolvedPath) { + const error = new Error( + `Binary not found: ${binPath} +Possible causes: + - Binary "${binPath}" is not installed or not in PATH + - Binary name is incorrect or misspelled + - Installation directory is not in system PATH +To resolve: + 1. Verify "${binPath}" is installed: which ${binPath} (Unix) or where ${binPath} (Windows) + 2. Install the binary if missing, ex: npm install -g ${binPath} + 3. Check PATH environment variable includes the binary location` + ); + error.code = "ENOENT"; + throw error; + } + const binCommand = Array.isArray(resolvedPath) ? resolvedPath[0] : resolvedPath; + return await (0, import_spawn.spawn)(binCommand, args ?? [], { + shell: import_platform.WIN32, + ...options + }); +} +function findRealBin(binName, commonPaths = []) { + const fs = /* @__PURE__ */ getFs(); + const path = /* @__PURE__ */ getPath(); + for (const binPath of commonPaths) { + if (fs.existsSync(binPath)) { + return binPath; + } + } + const allPaths = import_which.default.sync(binName, { all: true, nothrow: true }) || []; + const pathsArray = Array.isArray(allPaths) ? allPaths : typeof allPaths === "string" ? [allPaths] : []; + if (pathsArray.length === 0) { + return void 0; + } + for (const binPath of pathsArray) { + const binDir = path.dirname(binPath); + if (!isShadowBinPath(binDir)) { + return binPath; + } + } + return pathsArray[0]; +} +function findRealNpm() { + const fs = /* @__PURE__ */ getFs(); + const path = /* @__PURE__ */ getPath(); + const nodeDir = path.dirname(import_node_process.default.execPath); + const npmInNodeDir = path.join(nodeDir, "npm"); + if (fs.existsSync(npmInNodeDir)) { + return npmInNodeDir; + } + const commonPaths = ["/usr/local/bin/npm", "/usr/bin/npm"]; + const result = findRealBin("npm", commonPaths); + if (result && fs.existsSync(result)) { + return result; + } + const npmPath = whichRealSync("npm", { nothrow: true }); + if (npmPath && typeof npmPath === "string" && fs.existsSync(npmPath)) { + return npmPath; + } + return "npm"; +} +function findRealPnpm() { + const path = /* @__PURE__ */ getPath(); + const commonPaths = import_platform.WIN32 ? [ + // Windows common paths. + path.join((0, import_windows.getAppdata)(), "npm", "pnpm.cmd"), + path.join((0, import_windows.getAppdata)(), "npm", "pnpm"), + path.join((0, import_windows.getLocalappdata)(), "pnpm", "pnpm.cmd"), + path.join((0, import_windows.getLocalappdata)(), "pnpm", "pnpm"), + "C:\\Program Files\\nodejs\\pnpm.cmd", + "C:\\Program Files\\nodejs\\pnpm" + ].filter(Boolean) : [ + // Unix common paths. + "/usr/local/bin/pnpm", + "/usr/bin/pnpm", + path.join( + (0, import_xdg.getXdgDataHome)() || `${(0, import_home.getHome)()}/.local/share`, + "pnpm/pnpm" + ), + path.join((0, import_home.getHome)(), ".pnpm/pnpm") + ].filter(Boolean); + return findRealBin("pnpm", commonPaths) ?? ""; +} +function findRealYarn() { + const path = /* @__PURE__ */ getPath(); + const commonPaths = [ + "/usr/local/bin/yarn", + "/usr/bin/yarn", + path.join((0, import_home.getHome)(), ".yarn/bin/yarn"), + path.join( + (0, import_home.getHome)(), + ".config/yarn/global/node_modules/.bin/yarn" + ) + ].filter(Boolean); + return findRealBin("yarn", commonPaths) ?? ""; +} +function isShadowBinPath(dirPath) { + if (!dirPath) { + return false; + } + const normalized = dirPath.replace(/\\/g, "/"); + return normalized.includes("node_modules/.bin"); +} +// @__NO_SIDE_EFFECTS__ +function resolveRealBinSync(binPath) { + const fs = /* @__PURE__ */ getFs(); + const path = /* @__PURE__ */ getPath(); + if (!path.isAbsolute(binPath)) { + try { + const resolved = whichRealSync(binPath); + if (resolved) { + binPath = resolved; + } + } catch { + } + } + binPath = (0, import_normalize.normalizePath)(binPath); + if (binPath === ".") { + return binPath; + } + const ext = path.extname(binPath); + const extLowered = ext.toLowerCase(); + const basename = path.basename(binPath, ext); + const voltaIndex = basename === "node" ? -1 : /(?<=\/)\.volta\//i.exec(binPath)?.index ?? -1; + if (voltaIndex !== -1) { + const voltaPath = binPath.slice(0, voltaIndex); + const voltaCacheKey = `${voltaPath}:${basename}`; + const cachedVolta = voltaBinCache.get(voltaCacheKey); + if (cachedVolta) { + if (fs.existsSync(cachedVolta)) { + return cachedVolta; + } + voltaBinCache.delete(voltaCacheKey); + } + const voltaToolsPath = path.join(voltaPath, "tools"); + const voltaImagePath = path.join(voltaToolsPath, "image"); + const voltaUserPath = path.join(voltaToolsPath, "user"); + const voltaPlatform = (0, import_fs.readJsonSync)( + path.join(voltaUserPath, "platform.json"), + { throws: false } + ); + const voltaNodeVersion = voltaPlatform?.node?.runtime; + const voltaNpmVersion = voltaPlatform?.node?.npm; + let voltaBinPath = ""; + if (basename === "npm" || basename === "npx") { + if (voltaNpmVersion) { + const relCliPath = `bin/${basename}-cli.js`; + voltaBinPath = path.join( + voltaImagePath, + `npm/${voltaNpmVersion}/${relCliPath}` + ); + if (voltaNodeVersion && !fs.existsSync(voltaBinPath)) { + voltaBinPath = path.join( + voltaImagePath, + `node/${voltaNodeVersion}/lib/node_modules/npm/${relCliPath}` + ); + if (!fs.existsSync(voltaBinPath)) { + voltaBinPath = ""; + } + } + } + } else { + const voltaUserBinPath = path.join(voltaUserPath, "bin"); + const binInfo = (0, import_fs.readJsonSync)( + path.join(voltaUserBinPath, `${basename}.json`), + { throws: false } + ); + const binPackage = binInfo?.package; + if (binPackage) { + voltaBinPath = path.join( + voltaImagePath, + `packages/${binPackage}/bin/${basename}` + ); + if (!fs.existsSync(voltaBinPath)) { + voltaBinPath = `${voltaBinPath}.cmd`; + if (!fs.existsSync(voltaBinPath)) { + voltaBinPath = ""; + } + } + } + } + if (voltaBinPath) { + let resolvedVoltaPath = voltaBinPath; + try { + resolvedVoltaPath = (0, import_normalize.normalizePath)(fs.realpathSync.native(voltaBinPath)); + } catch { + } + voltaBinCache.set(voltaCacheKey, resolvedVoltaPath); + return resolvedVoltaPath; + } + } + if (import_platform.WIN32) { + const hasKnownExt = extLowered === "" || extLowered === ".cmd" || extLowered === ".exe" || extLowered === ".ps1"; + const isNpmOrNpx = basename === "npm" || basename === "npx"; + const isPnpmOrYarn = basename === "pnpm" || basename === "yarn"; + if (hasKnownExt && isNpmOrNpx) { + const quickPath = path.join( + path.dirname(binPath), + `node_modules/npm/bin/${basename}-cli.js` + ); + if (fs.existsSync(quickPath)) { + try { + return fs.realpathSync.native(quickPath); + } catch { + } + return quickPath; + } + } + let relPath = ""; + if (hasKnownExt && // Only parse shell scripts and batch files, not actual executables. + // .exe files are already executables and don't need path resolution from wrapper scripts. + extLowered !== ".exe" && // Check if file exists before attempting to read it to avoid ENOENT errors. + fs.existsSync(binPath)) { + const source = fs.readFileSync(binPath, "utf8"); + if (isNpmOrNpx) { + if (extLowered === ".cmd") { + relPath = basename === "npm" ? /(?<="NPM_CLI_JS=%~dp0\\).*(?=")/.exec(source)?.[0] || "" : /(?<="NPX_CLI_JS=%~dp0\\).*(?=")/.exec(source)?.[0] || ""; + } else if (extLowered === "") { + relPath = basename === "npm" ? /(?<=NPM_CLI_JS="\$CLI_BASEDIR\/).*(?=")/.exec(source)?.[0] || "" : /(?<=NPX_CLI_JS="\$CLI_BASEDIR\/).*(?=")/.exec(source)?.[0] || ""; + } else if (extLowered === ".ps1") { + relPath = basename === "npm" ? /(?<=\$NPM_CLI_JS="\$PSScriptRoot\/).*(?=")/.exec( + source + )?.[0] || "" : /(?<=\$NPX_CLI_JS="\$PSScriptRoot\/).*(?=")/.exec( + source + )?.[0] || ""; + } + } else if (isPnpmOrYarn) { + if (extLowered === ".cmd") { + relPath = /(?<=node\s+")%~dp0\\([^"]+)(?="\s+%\*)/.exec(source)?.[1] || ""; + if (!relPath) { + relPath = /(?<="%~dp0\\[^"]*node[^"]*"\s+")%~dp0\\([^"]+)(?="\s+%\*)/.exec( + source + )?.[1] || ""; + } + if (!relPath) { + relPath = /(?<="%dp0%\\).*(?=" %\*\r\n)/.exec(source)?.[0] || ""; + } + } else if (extLowered === "") { + relPath = /(?<="\$basedir\/)\.tools\/pnpm\/[^"]+(?="\s+"\$@")/.exec( + source + )?.[0] || ""; + if (!relPath) { + relPath = /(?<=exec\s+node\s+"\$basedir\/)\.tools\/pnpm\/[^"]+(?="\s+"\$@")/.exec( + source + )?.[0] || ""; + } + if (!relPath) { + relPath = /(?<="\$basedir\/).*(?=" "\$@"\n)/.exec(source)?.[0] || ""; + } + } else if (extLowered === ".ps1") { + relPath = /(?<="\$basedir\/).*(?=" $args\n)/.exec(source)?.[0] || ""; + } + } else if (extLowered === ".cmd") { + relPath = /(?<="%dp0%\\).*(?=" %\*\r\n)/.exec(source)?.[0] || ""; + } else if (extLowered === "") { + relPath = /(?<="$basedir\/).*(?=" "\$@"\n)/.exec(source)?.[0] || ""; + } else if (extLowered === ".ps1") { + relPath = /(?<="\$basedir\/).*(?=" $args\n)/.exec(source)?.[0] || ""; + } + if (relPath) { + binPath = (0, import_normalize.normalizePath)(path.resolve(path.dirname(binPath), relPath)); + } + } + } else { + let hasNoExt = extLowered === ""; + const isPnpmOrYarn = basename === "pnpm" || basename === "yarn"; + const isNpmOrNpx = basename === "npm" || basename === "npx"; + if (isPnpmOrYarn && binPath.includes("/.bin/pnpm/bin/")) { + const binIndex = binPath.indexOf("/.bin/pnpm"); + if (binIndex !== -1) { + const baseBinPath = binPath.slice(0, binIndex + "/.bin/pnpm".length); + try { + const stats = fs.statSync(baseBinPath); + if (stats.isFile()) { + binPath = (0, import_normalize.normalizePath)(baseBinPath); + hasNoExt = !path.extname(binPath); + } + } catch { + } + } + } + if (hasNoExt && (isPnpmOrYarn || isNpmOrNpx) && // For extensionless files (Unix shell scripts), verify existence before reading. + // This prevents ENOENT errors when the bin path doesn't exist. + fs.existsSync(binPath)) { + const source = fs.readFileSync(binPath, "utf8"); + let relPath = ""; + if (isPnpmOrYarn) { + relPath = /(?<="\$basedir\/)\.tools\/[^"]+(?="\s+"\$@")/.exec(source)?.[0] || ""; + if (!relPath) { + relPath = /(?<="\$basedir\/)[^"]+(?="\s+"\$@")/.exec(source)?.[0] || ""; + } + if (!relPath) { + const match = /exec\s+node\s+"?\$basedir\/([^"]+)"?\s+"\$@"/.exec( + source + ); + if (match) { + relPath = match[1] || ""; + } + } + if (relPath && basename === "pnpm" && relPath.startsWith("pnpm/")) { + relPath = `../${relPath}`; + } + } else if (isNpmOrNpx) { + relPath = basename === "npm" ? /(?<=NPM_CLI_JS="\$CLI_BASEDIR\/).*(?=")/.exec(source)?.[0] || "" : /(?<=NPX_CLI_JS="\$CLI_BASEDIR\/).*(?=")/.exec(source)?.[0] || ""; + } + if (relPath) { + binPath = (0, import_normalize.normalizePath)(path.resolve(path.dirname(binPath), relPath)); + } + } + } + try { + const realPath = fs.realpathSync.native(binPath); + return (0, import_normalize.normalizePath)(realPath); + } catch { + } + return (0, import_normalize.normalizePath)(binPath); +} +async function which(binName, options) { + if ((0, import_normalize.isPath)(binName)) { + return binName; + } + try { + const result = await (0, import_which.default)(binName, options); + return result; + } catch { + return null; + } +} +async function whichReal(binName, options) { + const fs = /* @__PURE__ */ getFs(); + const opts = { nothrow: true, ...options }; + if (opts.all) { + const cachedAll = binPathAllCache.get(binName); + if (cachedAll && cachedAll.length > 0) { + if (fs.existsSync(cachedAll[0])) { + return cachedAll; + } + binPathAllCache.delete(binName); + } + } else { + const cached = binPathCache.get(binName); + if (cached) { + if (fs.existsSync(cached)) { + return cached; + } + binPathCache.delete(binName); + } + } + const result = await (0, import_which.default)(binName, opts); + if (opts?.all) { + const paths = Array.isArray(result) ? result : typeof result === "string" ? [result] : void 0; + if (paths?.length) { + const resolved2 = paths.map((p) => /* @__PURE__ */ resolveRealBinSync(p)); + binPathAllCache.set(binName, resolved2); + return resolved2; + } + return paths; + } + if (!result) { + return void 0; + } + const resolved = /* @__PURE__ */ resolveRealBinSync(result); + binPathCache.set(binName, resolved); + return resolved; +} +function whichRealSync(binName, options) { + const fs = /* @__PURE__ */ getFs(); + const opts = { nothrow: true, ...options }; + if (opts.all) { + const cachedAll = binPathAllCache.get(binName); + if (cachedAll && cachedAll.length > 0) { + if (fs.existsSync(cachedAll[0])) { + return cachedAll; + } + binPathAllCache.delete(binName); + } + } else { + const cached = binPathCache.get(binName); + if (cached) { + if (fs.existsSync(cached)) { + return cached; + } + binPathCache.delete(binName); + } + } + const result = whichSync(binName, opts); + if (opts.all) { + const paths = Array.isArray(result) ? result : typeof result === "string" ? [result] : void 0; + if (paths?.length) { + const resolved2 = paths.map((p) => /* @__PURE__ */ resolveRealBinSync(p)); + binPathAllCache.set(binName, resolved2); + return resolved2; + } + return paths; + } + if (!result) { + return void 0; + } + const resolved = /* @__PURE__ */ resolveRealBinSync(result); + binPathCache.set(binName, resolved); + return resolved; +} +function whichSync(binName, options) { + if ((0, import_normalize.isPath)(binName)) { + return binName; + } + try { + const result = import_which.default.sync(binName, options); + return result; + } catch { + return null; + } +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + execBin, + findRealBin, + findRealNpm, + findRealPnpm, + findRealYarn, + isShadowBinPath, + resolveRealBinSync, + which, + whichReal, + whichRealSync, + whichSync +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cacache.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cacache.d.ts new file mode 100644 index 00000000..f966a73c --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cacache.d.ts @@ -0,0 +1,129 @@ +export interface GetOptions { + integrity?: string | undefined; + size?: number | undefined; + memoize?: boolean | undefined; +} +export interface PutOptions { + integrity?: string | undefined; + size?: number | undefined; + metadata?: any | undefined; + memoize?: boolean | undefined; +} +export interface CacheEntry { + data: Buffer; + integrity: string; + key: string; + metadata?: any | undefined; + path: string; + size: number; + time: number; +} +export interface RemoveOptions { + /** + * Optional key prefix to filter removals. + * If provided, only keys starting with this prefix will be removed. + * Can include wildcards (*) for pattern matching. + * + * @example + * { prefix: 'socket-sdk' } // Simple prefix + * { prefix: 'socket-sdk:scans:abc*' } // With wildcard + */ + prefix?: string | undefined; +} +/** + * Get the cacache module for cache operations. + * + * @example + * ```typescript + * const cacache = getCacache() + * const entries = await cacache.ls(cacheDir) + * ``` + */ +export declare function getCacache(): import("./external/cacache").CacacheInstance; +/** + * Clear entries from the Socket shared cache. + * + * Supports wildcard patterns (*) in prefix for flexible matching. + * For simple prefixes without wildcards, uses efficient streaming. + * For wildcard patterns, iterates and matches each entry. + * + * @param options - Optional configuration for selective clearing + * @param options.prefix - Prefix or pattern to match (supports * wildcards) + * @returns Number of entries removed (only when prefix is specified) + * + * @example + * // Clear all entries + * await clear() + * + * @example + * // Clear entries with simple prefix + * const removed = await clear({ prefix: 'socket-sdk:scans' }) + * console.log(`Removed ${removed} scan cache entries`) + * + * @example + * // Clear entries with wildcard pattern + * await clear({ prefix: 'socket-sdk:scans:abc*' }) + * await clear({ prefix: 'socket-sdk:npm/lodash/*' }) + */ +export declare function clear(options?: RemoveOptions | undefined): Promise; +/** + * Get data from the Socket shared cache by key. + * @throws {Error} When cache entry is not found. + * @throws {TypeError} If key contains wildcards (*) + * + * @example + * ```typescript + * const entry = await get('socket-sdk:scans:abc123') + * console.log(entry.data.toString('utf8')) + * ``` + */ +export declare function get(key: string, options?: GetOptions | undefined): Promise; +/** + * Put data into the Socket shared cache with a key. + * + * @throws {TypeError} If key contains wildcards (*) + * + * @example + * ```typescript + * await put('socket-sdk:scans:abc123', Buffer.from('result data')) + * ``` + */ +export declare function put(key: string, data: string | Buffer, options?: PutOptions | undefined): Promise<{ + integrity: string; + size: number; +}>; +/** + * Remove an entry from the Socket shared cache by key. + * + * @throws {TypeError} If key contains wildcards (*) + * + * @example + * ```typescript + * await remove('socket-sdk:scans:abc123') + * ``` + */ +export declare function remove(key: string): Promise; +/** + * Get data from the Socket shared cache by key without throwing. + * + * @example + * ```typescript + * const entry = await safeGet('socket-sdk:scans:abc123') + * if (entry) { + * console.log(entry.data.toString('utf8')) + * } + * ``` + */ +export declare function safeGet(key: string, options?: GetOptions | undefined): Promise; +/** + * Execute a callback with a temporary directory for cache operations. + * + * @example + * ```typescript + * const result = await withTmp(async (tmpDir) => { + * // Use tmpDir for temporary cache work + * return 'done' + * }) + * ``` + */ +export declare function withTmp(callback: (tmpDirPath: string) => Promise): Promise; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cacache.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cacache.js new file mode 100644 index 00000000..1e85c7ea --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cacache.js @@ -0,0 +1,152 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var cacache_exports = {}; +__export(cacache_exports, { + clear: () => clear, + get: () => get, + getCacache: () => getCacache, + put: () => put, + remove: () => remove, + safeGet: () => safeGet, + withTmp: () => withTmp +}); +module.exports = __toCommonJS(cacache_exports); +var import_cacache = __toESM(require("./external/cacache")); +var import_socket = require("./paths/socket"); +function getCacache() { + return import_cacache.default; +} +function patternToRegex(pattern) { + const escaped = pattern.replaceAll(/[.+?^${}()|[\]\\]/g, "\\$&"); + const regexPattern = escaped.replaceAll("*", ".*"); + return new RegExp(`^${regexPattern}`); +} +function matchesPattern(key, pattern) { + if (!pattern.includes("*")) { + return key.startsWith(pattern); + } + const regex = patternToRegex(pattern); + return regex.test(key); +} +async function clear(options) { + const opts = { __proto__: null, ...options }; + const cacache2 = getCacache(); + const cacheDir = (0, import_socket.getSocketCacacheDir)(); + if (!opts.prefix) { + try { + await cacache2.rm.all(cacheDir); + return; + } catch (e) { + if (e?.code !== "ENOTEMPTY") { + throw e; + } + return; + } + } + const hasWildcard = opts.prefix.includes("*"); + if (!hasWildcard) { + let removed2 = 0; + const stream2 = cacache2.ls.stream(cacheDir); + for await (const entry of stream2) { + if (entry.key.startsWith(opts.prefix)) { + try { + await cacache2.rm.entry(cacheDir, entry.key); + removed2++; + } catch { + } + } + } + return removed2; + } + let removed = 0; + const stream = cacache2.ls.stream(cacheDir); + for await (const entry of stream) { + if (matchesPattern(entry.key, opts.prefix)) { + try { + await cacache2.rm.entry(cacheDir, entry.key); + removed++; + } catch { + } + } + } + return removed; +} +async function get(key, options) { + if (key.includes("*")) { + throw new TypeError( + 'Cache key cannot contain wildcards (*). Wildcards are only supported in clear({ prefix: "pattern*" }).' + ); + } + const cacache2 = getCacache(); + return await cacache2.get((0, import_socket.getSocketCacacheDir)(), key, options); +} +async function put(key, data, options) { + if (key.includes("*")) { + throw new TypeError( + 'Cache key cannot contain wildcards (*). Wildcards are only supported in clear({ prefix: "pattern*" }).' + ); + } + const cacache2 = getCacache(); + return await cacache2.put((0, import_socket.getSocketCacacheDir)(), key, data, options); +} +async function remove(key) { + if (key.includes("*")) { + throw new TypeError( + 'Cache key cannot contain wildcards (*). Use clear({ prefix: "pattern*" }) to remove multiple entries.' + ); + } + const cacache2 = getCacache(); + return await cacache2.rm.entry((0, import_socket.getSocketCacacheDir)(), key); +} +async function safeGet(key, options) { + try { + return await get(key, options); + } catch { + return void 0; + } +} +async function withTmp(callback) { + const cacache2 = getCacache(); + return await cacache2.tmp.withTmp( + (0, import_socket.getSocketCacacheDir)(), + {}, + callback + ); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + clear, + get, + getCacache, + put, + remove, + safeGet, + withTmp +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cache-with-ttl.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cache-with-ttl.d.ts new file mode 100644 index 00000000..10587c70 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cache-with-ttl.d.ts @@ -0,0 +1,140 @@ +export interface TtlCacheOptions { + /** + * Time-to-live in milliseconds. + * @default 5 * 60 * 1000 (5 minutes) + */ + ttl?: number | undefined; + /** + * Enable in-memory memoization for hot data. + * @default true + */ + memoize?: boolean | undefined; + /** + * Custom cache key prefix. + * Must not contain wildcards (*). + * Use clear({ prefix: "pattern*" }) for wildcard matching instead. + * + * @default 'ttl-cache' + * @throws {TypeError} If prefix contains wildcards + * + * @example + * // Valid + * createTtlCache({ prefix: 'socket-sdk' }) + * createTtlCache({ prefix: 'my-app:cache' }) + * + * @example + * // Invalid - throws TypeError + * createTtlCache({ prefix: 'socket-*' }) + */ + prefix?: string | undefined; +} +export interface TtlCacheEntry { + data: T; + expiresAt: number; +} +export interface ClearOptions { + /** + * Only clear in-memory memoization cache, not persistent cache. + * Useful for forcing a refresh of cached data without removing it from disk. + * + * @default false + */ + memoOnly?: boolean | undefined; +} +export interface TtlCache { + /** + * Get cached data without fetching. + * Returns undefined if not found or expired. + * + * @param key - Cache key (must not contain wildcards) + * @throws {TypeError} If key contains wildcards (*) + */ + get(key: string): Promise; + /** + * Get all cached entries matching a pattern. + * Supports wildcards (*) for flexible matching. + * + * @param pattern - Key pattern (supports * wildcards, or use '*' for all entries) + * @returns Map of matching entries (key -> value) + * + * @example + * // Get all organization entries + * const orgs = await cache.getAll('organizations:*') + * for (const [key, org] of orgs) { + * console.log(`${key}: ${org.name}`) + * } + * + * @example + * // Get all entries with this cache's prefix + * const all = await cache.getAll('*') + */ + getAll(pattern: string): Promise>; + /** + * Get cached data or fetch and cache if missing/expired. + * + * @param key - Cache key (must not contain wildcards) + */ + getOrFetch(key: string, fetcher: () => Promise): Promise; + /** + * Set cached data with TTL. + * + * @param key - Cache key (must not contain wildcards) + * @throws {TypeError} If key contains wildcards (*) + */ + set(key: string, data: T): Promise; + /** + * Delete a specific cache entry. + * + * @param key - Cache key (must not contain wildcards) + * @throws {TypeError} If key contains wildcards (*) + */ + delete(key: string): Promise; + /** + * Delete all cache entries matching a pattern. + * Supports wildcards (*) for flexible matching. + * + * @param pattern - Key pattern (supports * wildcards, or omit to delete all) + * @returns Number of entries deleted + * + * @example + * // Delete all entries with this cache's prefix + * await cache.deleteAll() + * + * @example + * // Delete entries matching prefix + * await cache.deleteAll('organizations') + * + * @example + * // Delete entries with wildcard pattern + * await cache.deleteAll('scans:abc*') + * await cache.deleteAll('npm/lodash/*') + */ + deleteAll(pattern?: string | undefined): Promise; + /** + * Clear all cache entries (like Map.clear()). + * Optionally clear only in-memory cache. + * + * @param options - Optional configuration + * @param options.memoOnly - If true, only clears in-memory cache + * + * @example + * // Clear everything (memory + disk) + * await cache.clear() + * + * @example + * // Clear only in-memory cache (force refresh) + * await cache.clear({ memoOnly: true }) + */ + clear(options?: ClearOptions | undefined): Promise; +} +/** + * Create a TTL-based cache instance. + * + * @example + * ```typescript + * const cache = createTtlCache({ ttl: 60_000, prefix: 'my-app' }) + * await cache.set('key', { value: 42 }) + * const data = await cache.get('key') // { value: 42 } + * ``` + */ +export declare function createTtlCache(options?: TtlCacheOptions): TtlCache; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cache-with-ttl.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cache-with-ttl.js new file mode 100644 index 00000000..5ec0fbb5 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cache-with-ttl.js @@ -0,0 +1,260 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var cache_with_ttl_exports = {}; +__export(cache_with_ttl_exports, { + createTtlCache: () => createTtlCache +}); +module.exports = __toCommonJS(cache_with_ttl_exports); +var cacache = __toESM(require("./cacache")); +const DEFAULT_TTL_MS = 5 * 60 * 1e3; +const DEFAULT_PREFIX = "ttl-cache"; +function createTtlCache(options) { + const opts = { + __proto__: null, + memoize: true, + prefix: DEFAULT_PREFIX, + ttl: DEFAULT_TTL_MS, + ...options + }; + if (opts.prefix?.includes("*")) { + throw new TypeError( + 'Cache prefix cannot contain wildcards (*). Use clear({ prefix: "pattern*" }) for wildcard matching.' + ); + } + const memoCache = /* @__PURE__ */ new Map(); + const ttl = opts.ttl ?? DEFAULT_TTL_MS; + function buildKey(key) { + return `${opts.prefix}:${key}`; + } + function isExpired(entry) { + const now = Date.now(); + const maxFutureMs = 1e4; + if (entry.expiresAt > now + ttl + maxFutureMs) { + return true; + } + return now > entry.expiresAt; + } + function createMatcher(pattern) { + const fullPattern = buildKey(pattern); + const hasWildcard = pattern.includes("*"); + if (!hasWildcard) { + return (key) => key.startsWith(fullPattern); + } + const escaped = fullPattern.replaceAll(/[.+?^${}()|[\]\\]/g, "\\$&"); + const regexPattern = escaped.replaceAll("*", ".*"); + const regex = new RegExp(`^${regexPattern}`); + return (key) => regex.test(key); + } + async function get(key) { + if (key.includes("*")) { + throw new TypeError( + "Cache key cannot contain wildcards (*). Use getAll(pattern) to retrieve multiple entries." + ); + } + const fullKey = buildKey(key); + if (opts.memoize) { + const memoEntry = memoCache.get(fullKey); + if (memoEntry && !isExpired(memoEntry)) { + return memoEntry.data; + } + if (memoEntry) { + memoCache.delete(fullKey); + } + } + const cacheEntry = await cacache.safeGet(fullKey); + if (cacheEntry) { + let entry; + try { + entry = JSON.parse(cacheEntry.data.toString("utf8")); + } catch { + try { + await cacache.remove(fullKey); + } catch { + } + return void 0; + } + if (!isExpired(entry)) { + if (opts.memoize) { + memoCache.set(fullKey, entry); + } + return entry.data; + } + try { + await cacache.remove(fullKey); + } catch { + } + } + return void 0; + } + async function getAll(pattern) { + const results = /* @__PURE__ */ new Map(); + const matches = createMatcher(pattern); + if (opts.memoize) { + for (const [key, entry] of memoCache.entries()) { + if (!matches(key)) { + continue; + } + if (isExpired(entry)) { + memoCache.delete(key); + continue; + } + const originalKey = opts.prefix ? key.slice(opts.prefix.length + 1) : key; + results.set(originalKey, entry.data); + } + } + const cacheDir = (await import("./paths/socket")).getSocketCacacheDir(); + const cacacheModule = await import("./cacache"); + const stream = cacacheModule.getCacache().ls.stream(cacheDir); + for await (const cacheEntry of stream) { + if (!cacheEntry.key.startsWith(`${opts.prefix}:`)) { + continue; + } + if (!matches(cacheEntry.key)) { + continue; + } + const originalKey = opts.prefix ? cacheEntry.key.slice(opts.prefix.length + 1) : cacheEntry.key; + if (results.has(originalKey)) { + continue; + } + try { + const entry = await cacache.safeGet(cacheEntry.key); + if (!entry) { + continue; + } + const parsed = JSON.parse( + entry.data.toString("utf8") + ); + if (isExpired(parsed)) { + await cacache.remove(cacheEntry.key); + continue; + } + results.set(originalKey, parsed.data); + if (opts.memoize) { + memoCache.set(cacheEntry.key, parsed); + } + } catch { + } + } + return results; + } + async function set(key, data) { + if (key.includes("*")) { + throw new TypeError( + 'Cache key cannot contain wildcards (*). Wildcards are only supported in clear({ prefix: "pattern*" }).' + ); + } + const fullKey = buildKey(key); + const entry = { + data, + expiresAt: Date.now() + ttl + }; + if (opts.memoize) { + memoCache.set(fullKey, entry); + } + try { + await cacache.put(fullKey, JSON.stringify(entry), { + metadata: { expiresAt: entry.expiresAt } + }); + } catch { + } + } + const inflightRequests = /* @__PURE__ */ new Map(); + async function getOrFetch(key, fetcher) { + const cached = await get(key); + if (cached !== void 0) { + return cached; + } + const fullKey = buildKey(key); + const existing = inflightRequests.get(fullKey); + if (existing) { + return await existing; + } + const promise = (async () => { + try { + const data = await fetcher(); + await set(key, data); + return data; + } finally { + inflightRequests.delete(fullKey); + } + })(); + inflightRequests.set(fullKey, promise); + return await promise; + } + async function deleteEntry(key) { + if (key.includes("*")) { + throw new TypeError( + "Cache key cannot contain wildcards (*). Use deleteAll(pattern) to remove multiple entries." + ); + } + const fullKey = buildKey(key); + memoCache.delete(fullKey); + try { + await cacache.remove(fullKey); + } catch { + } + } + async function deleteAll(pattern) { + const fullPrefix = pattern ? `${opts.prefix}:${pattern}` : opts.prefix; + if (!pattern) { + memoCache.clear(); + } else { + const matches = createMatcher(pattern); + for (const key of memoCache.keys()) { + if (matches(key)) { + memoCache.delete(key); + } + } + } + const removed = await cacache.clear({ prefix: fullPrefix }); + return removed ?? 0; + } + async function clear(options2) { + const opts2 = { __proto__: null, ...options2 }; + memoCache.clear(); + if (opts2.memoOnly) { + return; + } + await deleteAll(); + } + return { + clear, + delete: deleteEntry, + deleteAll, + get, + getAll, + getOrFetch, + set + }; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + createTtlCache +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/colors.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/colors.d.ts new file mode 100644 index 00000000..86924972 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/colors.d.ts @@ -0,0 +1,49 @@ +/** + * @fileoverview Color utilities for RGB color conversion and manipulation. + * Provides type-safe color handling with named colors and RGB tuples. + */ +/** + * Named color values supported by the library. + * Maps to standard terminal colors with bright variants. + */ +export type ColorName = 'black' | 'blue' | 'blueBright' | 'cyan' | 'cyanBright' | 'gray' | 'green' | 'greenBright' | 'magenta' | 'magentaBright' | 'red' | 'redBright' | 'white' | 'whiteBright' | 'yellow' | 'yellowBright'; +/** + * Special 'inherit' color value that uses the current color context. + * Used with effects like shimmer to dynamically inherit color. + */ +export type ColorInherit = 'inherit'; +/** + * RGB color tuple with values 0-255 for red, green, and blue channels. + * @example [140, 82, 255] // Socket purple + * @example [255, 0, 0] // Red + */ +export type ColorRgb = readonly [number, number, number]; +/** + * Union of all supported color types: named colors or RGB tuples. + */ +export type ColorValue = ColorName | ColorRgb; +/** + * Type guard to check if a color value is an RGB tuple. + * @param value - Color value to check + * @returns `true` if value is an RGB tuple, `false` if it's a color name + * + * @example + * ```typescript + * isRgbTuple([255, 0, 0]) // true + * isRgbTuple('red') // false + * ``` + */ +export declare function isRgbTuple(value: ColorValue): value is ColorRgb; +/** + * Convert a color value to RGB tuple format. + * Named colors are looked up in the `colorToRgb` map, RGB tuples are returned as-is. + * @param color - Color name or RGB tuple + * @returns RGB tuple with values 0-255 + * + * @example + * ```typescript + * toRgb('red') // [255, 0, 0] + * toRgb([0, 128, 0]) // [0, 128, 0] + * ``` + */ +export declare function toRgb(color: ColorValue): ColorRgb; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/colors.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/colors.js new file mode 100644 index 00000000..36722a18 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/colors.js @@ -0,0 +1,58 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var colors_exports = {}; +__export(colors_exports, { + isRgbTuple: () => isRgbTuple, + toRgb: () => toRgb +}); +module.exports = __toCommonJS(colors_exports); +const colorToRgb = { + __proto__: null, + black: [0, 0, 0], + blue: [0, 0, 255], + blueBright: [100, 149, 237], + cyan: [0, 255, 255], + cyanBright: [0, 255, 255], + gray: [128, 128, 128], + green: [0, 128, 0], + greenBright: [0, 255, 0], + magenta: [255, 0, 255], + magentaBright: [255, 105, 180], + red: [255, 0, 0], + redBright: [255, 69, 0], + white: [255, 255, 255], + whiteBright: [255, 255, 255], + yellow: [255, 255, 0], + yellowBright: [255, 255, 153] +}; +function isRgbTuple(value) { + return Array.isArray(value); +} +function toRgb(color) { + if (isRgbTuple(color)) { + return color; + } + return colorToRgb[color]; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + isRgbTuple, + toRgb +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/agents.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/agents.d.ts new file mode 100644 index 00000000..5e28976e --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/agents.d.ts @@ -0,0 +1,32 @@ +// Agent names. +export declare const NPM = "npm"; +export declare const PNPM = "pnpm"; +export declare const YARN = "yarn"; +export declare const BUN = "bun"; +export declare const VLT = "vlt"; +export declare const NPX = "npx"; +export declare const NPM_BIN_PATH: string; +// NPM CLI entry point - resolved at runtime from npm bin location. +// NOTE: This is kept for backward compatibility but NPM_BIN_PATH should be used instead +// because cli.js exports a function that must be invoked, not executed directly. +export declare const NPM_REAL_EXEC_PATH: any; +// NPM registry URL. +export declare const NPM_REGISTRY_URL = "https://registry.npmjs.org"; +// Agent variants. +export declare const YARN_BERRY = "yarn/berry"; +export declare const YARN_CLASSIC = "yarn/classic"; +// Lock files. +export declare const PACKAGE_LOCK = "package-lock"; +export declare const PACKAGE_LOCK_JSON = "package-lock.json"; +export declare const NPM_SHRINKWRAP_JSON = "npm-shrinkwrap.json"; +export declare const PNPM_LOCK = "pnpm-lock"; +export declare const PNPM_LOCK_YAML = "pnpm-lock.yaml"; +export declare const YARN_LOCK = "yarn.lock"; +export declare const BUN_LOCK = "bun.lock"; +export declare const BUN_LOCKB = "bun.lockb"; +export declare const VLT_LOCK_JSON = "vlt-lock.json"; +// Workspace configuration. +export declare const PNPM_WORKSPACE_YAML = "pnpm-workspace.yaml"; +// Package.json fields for dependency overrides. +export declare const OVERRIDES = "overrides"; +export declare const RESOLUTIONS = "resolutions"; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/agents.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/agents.js new file mode 100644 index 00000000..ae1844c5 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/agents.js @@ -0,0 +1,137 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var agents_exports = {}; +__export(agents_exports, { + BUN: () => BUN, + BUN_LOCK: () => BUN_LOCK, + BUN_LOCKB: () => BUN_LOCKB, + NPM: () => NPM, + NPM_BIN_PATH: () => NPM_BIN_PATH, + NPM_REAL_EXEC_PATH: () => NPM_REAL_EXEC_PATH, + NPM_REGISTRY_URL: () => NPM_REGISTRY_URL, + NPM_SHRINKWRAP_JSON: () => NPM_SHRINKWRAP_JSON, + NPX: () => NPX, + OVERRIDES: () => OVERRIDES, + PACKAGE_LOCK: () => PACKAGE_LOCK, + PACKAGE_LOCK_JSON: () => PACKAGE_LOCK_JSON, + PNPM: () => PNPM, + PNPM_LOCK: () => PNPM_LOCK, + PNPM_LOCK_YAML: () => PNPM_LOCK_YAML, + PNPM_WORKSPACE_YAML: () => PNPM_WORKSPACE_YAML, + RESOLUTIONS: () => RESOLUTIONS, + VLT: () => VLT, + VLT_LOCK_JSON: () => VLT_LOCK_JSON, + YARN: () => YARN, + YARN_BERRY: () => YARN_BERRY, + YARN_CLASSIC: () => YARN_CLASSIC, + YARN_LOCK: () => YARN_LOCK +}); +module.exports = __toCommonJS(agents_exports); +var import_which = __toESM(require("../external/which")); +const NPM = "npm"; +const PNPM = "pnpm"; +const YARN = "yarn"; +const BUN = "bun"; +const VLT = "vlt"; +const NPX = "npx"; +const _npmBinPath = /* @__PURE__ */ (() => { + try { + return import_which.default.sync("npm", { nothrow: true }) || null; + } catch { + return null; + } +})(); +const NPM_BIN_PATH = _npmBinPath || "npm"; +const NPM_REAL_EXEC_PATH = /* @__PURE__ */ (() => { + try { + if (!_npmBinPath) { + return void 0; + } + const { existsSync } = require("fs"); + const path = require("path"); + const npmDir = path.dirname(_npmBinPath); + const nodeModulesPath = path.join( + npmDir, + "..", + "lib", + "node_modules", + "npm", + "lib", + "cli.js" + ); + if (existsSync(nodeModulesPath)) { + return nodeModulesPath; + } + return void 0; + } catch { + return void 0; + } +})(); +const NPM_REGISTRY_URL = "https://registry.npmjs.org"; +const YARN_BERRY = "yarn/berry"; +const YARN_CLASSIC = "yarn/classic"; +const PACKAGE_LOCK = "package-lock"; +const PACKAGE_LOCK_JSON = "package-lock.json"; +const NPM_SHRINKWRAP_JSON = "npm-shrinkwrap.json"; +const PNPM_LOCK = "pnpm-lock"; +const PNPM_LOCK_YAML = "pnpm-lock.yaml"; +const YARN_LOCK = "yarn.lock"; +const BUN_LOCK = "bun.lock"; +const BUN_LOCKB = "bun.lockb"; +const VLT_LOCK_JSON = "vlt-lock.json"; +const PNPM_WORKSPACE_YAML = "pnpm-workspace.yaml"; +const OVERRIDES = "overrides"; +const RESOLUTIONS = "resolutions"; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + BUN, + BUN_LOCK, + BUN_LOCKB, + NPM, + NPM_BIN_PATH, + NPM_REAL_EXEC_PATH, + NPM_REGISTRY_URL, + NPM_SHRINKWRAP_JSON, + NPX, + OVERRIDES, + PACKAGE_LOCK, + PACKAGE_LOCK_JSON, + PNPM, + PNPM_LOCK, + PNPM_LOCK_YAML, + PNPM_WORKSPACE_YAML, + RESOLUTIONS, + VLT, + VLT_LOCK_JSON, + YARN, + YARN_BERRY, + YARN_CLASSIC, + YARN_LOCK +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/core.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/core.d.ts new file mode 100644 index 00000000..b9824c49 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/core.d.ts @@ -0,0 +1,22 @@ +/** + * Core primitives and fundamental constants. + * Goal: Minimize this module by finding proper semantic homes for all constants. + */ +// Internal implementation symbol. +export declare const kInternalsSymbol: unique symbol; +// Sentinel values. +export declare const LOOP_SENTINEL = 1000000; +// Error and unknown values. +export declare const UNKNOWN_ERROR = "Unknown error"; +export declare const UNKNOWN_VALUE = ""; +// Empty values. +export declare const EMPTY_FILE = "/* empty */\n"; +export declare const EMPTY_VALUE = ""; +// Undefined token. +export declare const UNDEFINED_TOKEN: undefined; +// Miscellaneous. +export declare const V = "v"; +export declare const COLUMN_LIMIT = 80; +// Environment variable name constants. +export declare const NODE_AUTH_TOKEN = "NODE_AUTH_TOKEN"; +export declare const NODE_ENV = "NODE_ENV"; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/core.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/core.js new file mode 100644 index 00000000..4fd332ec --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/core.js @@ -0,0 +1,59 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var core_exports = {}; +__export(core_exports, { + COLUMN_LIMIT: () => COLUMN_LIMIT, + EMPTY_FILE: () => EMPTY_FILE, + EMPTY_VALUE: () => EMPTY_VALUE, + LOOP_SENTINEL: () => LOOP_SENTINEL, + NODE_AUTH_TOKEN: () => NODE_AUTH_TOKEN, + NODE_ENV: () => NODE_ENV, + UNDEFINED_TOKEN: () => UNDEFINED_TOKEN, + UNKNOWN_ERROR: () => UNKNOWN_ERROR, + UNKNOWN_VALUE: () => UNKNOWN_VALUE, + V: () => V, + kInternalsSymbol: () => kInternalsSymbol +}); +module.exports = __toCommonJS(core_exports); +const kInternalsSymbol = Symbol("@socketregistry.constants.internals"); +const LOOP_SENTINEL = 1e6; +const UNKNOWN_ERROR = "Unknown error"; +const UNKNOWN_VALUE = ""; +const EMPTY_FILE = "/* empty */\n"; +const EMPTY_VALUE = ""; +const UNDEFINED_TOKEN = void 0; +const V = "v"; +const COLUMN_LIMIT = 80; +const NODE_AUTH_TOKEN = "NODE_AUTH_TOKEN"; +const NODE_ENV = "NODE_ENV"; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + COLUMN_LIMIT, + EMPTY_FILE, + EMPTY_VALUE, + LOOP_SENTINEL, + NODE_AUTH_TOKEN, + NODE_ENV, + UNDEFINED_TOKEN, + UNKNOWN_ERROR, + UNKNOWN_VALUE, + V, + kInternalsSymbol +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/encoding.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/encoding.d.ts new file mode 100644 index 00000000..62371224 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/encoding.d.ts @@ -0,0 +1,13 @@ +/** + * Character encodings and character codes. + */ +// Encoding. +export declare const UTF8 = "utf8"; +// Character codes. +export declare const CHAR_BACKWARD_SLASH = 92; +export declare const CHAR_COLON = 58; +export declare const CHAR_FORWARD_SLASH = 47; +export declare const CHAR_LOWERCASE_A = 97; +export declare const CHAR_LOWERCASE_Z = 122; +export declare const CHAR_UPPERCASE_A = 65; +export declare const CHAR_UPPERCASE_Z = 90; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/encoding.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/encoding.js new file mode 100644 index 00000000..c8f84852 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/encoding.js @@ -0,0 +1,50 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var encoding_exports = {}; +__export(encoding_exports, { + CHAR_BACKWARD_SLASH: () => CHAR_BACKWARD_SLASH, + CHAR_COLON: () => CHAR_COLON, + CHAR_FORWARD_SLASH: () => CHAR_FORWARD_SLASH, + CHAR_LOWERCASE_A: () => CHAR_LOWERCASE_A, + CHAR_LOWERCASE_Z: () => CHAR_LOWERCASE_Z, + CHAR_UPPERCASE_A: () => CHAR_UPPERCASE_A, + CHAR_UPPERCASE_Z: () => CHAR_UPPERCASE_Z, + UTF8: () => UTF8 +}); +module.exports = __toCommonJS(encoding_exports); +const UTF8 = "utf8"; +const CHAR_BACKWARD_SLASH = 92; +const CHAR_COLON = 58; +const CHAR_FORWARD_SLASH = 47; +const CHAR_LOWERCASE_A = 97; +const CHAR_LOWERCASE_Z = 122; +const CHAR_UPPERCASE_A = 65; +const CHAR_UPPERCASE_Z = 90; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + CHAR_BACKWARD_SLASH, + CHAR_COLON, + CHAR_FORWARD_SLASH, + CHAR_LOWERCASE_A, + CHAR_LOWERCASE_Z, + CHAR_UPPERCASE_A, + CHAR_UPPERCASE_Z, + UTF8 +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/github.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/github.d.ts new file mode 100644 index 00000000..4f26e32f --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/github.d.ts @@ -0,0 +1,7 @@ +/** + * GitHub APIs and cache configuration. + */ +// GitHub API. +export declare const GITHUB_API_BASE_URL = "https://api.github.com"; +// GitHub cache. +export declare const CACHE_GITHUB_DIR = "github"; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/github.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/github.js new file mode 100644 index 00000000..7651c735 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/github.js @@ -0,0 +1,32 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var github_exports = {}; +__export(github_exports, { + CACHE_GITHUB_DIR: () => CACHE_GITHUB_DIR, + GITHUB_API_BASE_URL: () => GITHUB_API_BASE_URL +}); +module.exports = __toCommonJS(github_exports); +const GITHUB_API_BASE_URL = "https://api.github.com"; +const CACHE_GITHUB_DIR = "github"; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + CACHE_GITHUB_DIR, + GITHUB_API_BASE_URL +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/licenses.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/licenses.d.ts new file mode 100644 index 00000000..ae25f6b8 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/licenses.d.ts @@ -0,0 +1,8 @@ +/** + * License identifiers and copy-left license sets. + */ +// License identifiers. +export declare const MIT = "MIT"; +export declare const UNLICENCED = "UNLICENCED"; +export declare const UNLICENSED = "UNLICENSED"; +export declare function getCopyLeftLicenses(): Set; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/licenses.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/licenses.js new file mode 100644 index 00000000..9ceda3ba --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/licenses.js @@ -0,0 +1,68 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var licenses_exports = {}; +__export(licenses_exports, { + MIT: () => MIT, + UNLICENCED: () => UNLICENCED, + UNLICENSED: () => UNLICENSED, + getCopyLeftLicenses: () => getCopyLeftLicenses +}); +module.exports = __toCommonJS(licenses_exports); +const MIT = "MIT"; +const UNLICENCED = "UNLICENCED"; +const UNLICENSED = "UNLICENSED"; +let _copyLeftLicenses; +function getCopyLeftLicenses() { + if (_copyLeftLicenses === void 0) { + _copyLeftLicenses = /* @__PURE__ */ new Set([ + "AGPL-1.0", + "AGPL-1.0-only", + "AGPL-1.0-or-later", + "AGPL-3.0", + "AGPL-3.0-only", + "AGPL-3.0-or-later", + "CC-BY-SA-1.0", + "CC-BY-SA-2.0", + "CC-BY-SA-3.0", + "CC-BY-SA-4.0", + "EPL-1.0", + "EPL-2.0", + "EUPL-1.1", + "EUPL-1.2", + "GPL-1.0", + "GPL-1.0-only", + "GPL-1.0-or-later", + "GPL-2.0", + "GPL-2.0-only", + "GPL-2.0-or-later", + "GPL-3.0", + "GPL-3.0-only", + "GPL-3.0-or-later" + ]); + } + return _copyLeftLicenses; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + MIT, + UNLICENCED, + UNLICENSED, + getCopyLeftLicenses +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/lifecycle-script-names.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/lifecycle-script-names.d.ts new file mode 100644 index 00000000..6e69a603 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/lifecycle-script-names.d.ts @@ -0,0 +1,8 @@ +/** + * @fileoverview NPM lifecycle script names. + * + * Standard npm lifecycle hooks that can be defined in package.json scripts. + * https://docs.npmjs.com/cli/v10/using-npm/scripts#life-cycle-scripts + */ +declare const lifecycleScriptNames: Set; +export { lifecycleScriptNames }; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/lifecycle-script-names.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/lifecycle-script-names.js new file mode 100644 index 00000000..ae8e18be --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/lifecycle-script-names.js @@ -0,0 +1,44 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var lifecycle_script_names_exports = {}; +__export(lifecycle_script_names_exports, { + lifecycleScriptNames: () => lifecycleScriptNames +}); +module.exports = __toCommonJS(lifecycle_script_names_exports); +const lifecycleScriptNames = new Set( + [ + "dependencies", + "prepublishOnly", + ...[ + "install", + "pack", + "prepare", + "publish", + "restart", + "start", + "stop", + "version" + ].map((n) => [`pre${n}`, n, `post${n}`]) + ].flat() +); +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + lifecycleScriptNames +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/maintained-node-versions.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/maintained-node-versions.d.ts new file mode 100644 index 00000000..13444dfa --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/maintained-node-versions.d.ts @@ -0,0 +1,7 @@ +declare const maintainedNodeVersions: readonly string[] & { + current: string; + last: string; + next: string; + previous: string; +}; +export { maintainedNodeVersions }; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/maintained-node-versions.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/maintained-node-versions.js new file mode 100644 index 00000000..a7362b98 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/maintained-node-versions.js @@ -0,0 +1,41 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var maintained_node_versions_exports = {}; +__export(maintained_node_versions_exports, { + maintainedNodeVersions: () => maintainedNodeVersions +}); +module.exports = __toCommonJS(maintained_node_versions_exports); +const ObjectFreeze = Object.freeze; +const next = "25.0.0"; +const current = "22.20.0"; +const previous = "20.19.5"; +const last = "18.20.8"; +const maintainedNodeVersions = ObjectFreeze( + Object.assign([last, previous, current, next], { + current, + last, + next, + previous + }) +); +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + maintainedNodeVersions +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/node.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/node.d.ts new file mode 100644 index 00000000..e6ba4325 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/node.d.ts @@ -0,0 +1,30 @@ +// Version detection. +export declare function getNodeVersion(): string; +export declare function getNodeMajorVersion(): number; +export declare function getNodeMinorVersion(): number; +export declare function getNodePatchVersion(): number; +// Maintained Node.js versions. +export declare function getMaintainedNodeVersions(): readonly string[] & { + current: string; + last: string; + next: string; + previous: string; +}; +// Feature detection. +export declare function supportsNodeCompileCacheApi(): boolean; +export declare function supportsNodeCompileCacheEnvVar(): boolean; +export declare function supportsNodeDisableWarningFlag(): boolean; +export declare function supportsNodePermissionFlag(): boolean; +export declare function supportsNodeRequireModule(): boolean; +export declare function supportsNodeRun(): boolean; +export declare function supportsNodeDisableSigusr1Flag(): boolean; +export declare function getNodeDisableSigusr1Flags(): string[]; +export declare function supportsProcessSend(): boolean; +export declare function getNodePermissionFlags(): string[]; +export declare function getNodeHardenFlags(): string[]; +export declare function getNodeNoWarningsFlags(): string[]; +// Execution path. +export declare function getExecPath(): string; +// Node.js constants. +export declare const NODE_SEA_FUSE = "NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2"; +export declare const ESNEXT = "esnext"; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/node.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/node.js new file mode 100644 index 00000000..bb7be7d8 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/node.js @@ -0,0 +1,192 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var node_exports = {}; +__export(node_exports, { + ESNEXT: () => ESNEXT, + NODE_SEA_FUSE: () => NODE_SEA_FUSE, + getExecPath: () => getExecPath, + getMaintainedNodeVersions: () => getMaintainedNodeVersions, + getNodeDisableSigusr1Flags: () => getNodeDisableSigusr1Flags, + getNodeHardenFlags: () => getNodeHardenFlags, + getNodeMajorVersion: () => getNodeMajorVersion, + getNodeMinorVersion: () => getNodeMinorVersion, + getNodeNoWarningsFlags: () => getNodeNoWarningsFlags, + getNodePatchVersion: () => getNodePatchVersion, + getNodePermissionFlags: () => getNodePermissionFlags, + getNodeVersion: () => getNodeVersion, + supportsNodeCompileCacheApi: () => supportsNodeCompileCacheApi, + supportsNodeCompileCacheEnvVar: () => supportsNodeCompileCacheEnvVar, + supportsNodeDisableSigusr1Flag: () => supportsNodeDisableSigusr1Flag, + supportsNodeDisableWarningFlag: () => supportsNodeDisableWarningFlag, + supportsNodePermissionFlag: () => supportsNodePermissionFlag, + supportsNodeRequireModule: () => supportsNodeRequireModule, + supportsNodeRun: () => supportsNodeRun, + supportsProcessSend: () => supportsProcessSend +}); +module.exports = __toCommonJS(node_exports); +var import_node_process = __toESM(require("node:process")); +var import_maintained_node_versions = require("./maintained-node-versions"); +const NODE_VERSION = import_node_process.default.version; +function getNodeVersion() { + return NODE_VERSION; +} +function getNodeMajorVersion() { + const major = NODE_VERSION.slice(1).split(".")[0] ?? "0"; + return Number.parseInt(major, 10) || 0; +} +function getNodeMinorVersion() { + return Number.parseInt(NODE_VERSION.split(".")[1] ?? "0", 10); +} +function getNodePatchVersion() { + return Number.parseInt(NODE_VERSION.split(".")[2] ?? "0", 10); +} +function getMaintainedNodeVersions() { + return import_maintained_node_versions.maintainedNodeVersions; +} +function supportsNodeCompileCacheApi() { + const major = getNodeMajorVersion(); + return major >= 24; +} +function supportsNodeCompileCacheEnvVar() { + const major = getNodeMajorVersion(); + return major >= 22; +} +function supportsNodeDisableWarningFlag() { + const major = getNodeMajorVersion(); + return major >= 21; +} +function supportsNodePermissionFlag() { + const major = getNodeMajorVersion(); + return major >= 20; +} +function supportsNodeRequireModule() { + const major = getNodeMajorVersion(); + return major >= 23 || major === 22 && getNodeMinorVersion() >= 12; +} +function supportsNodeRun() { + const major = getNodeMajorVersion(); + return major >= 23 || major === 22 && getNodeMinorVersion() >= 11; +} +function supportsNodeDisableSigusr1Flag() { + const major = getNodeMajorVersion(); + const minor = getNodeMinorVersion(); + if (major >= 24) { + return minor >= 8; + } + if (major === 23) { + return minor >= 7; + } + if (major === 22) { + return minor >= 14; + } + return false; +} +let _nodeDisableSigusr1Flags; +function getNodeDisableSigusr1Flags() { + if (_nodeDisableSigusr1Flags === void 0) { + _nodeDisableSigusr1Flags = supportsNodeDisableSigusr1Flag() ? ["--disable-sigusr1"] : ["--no-inspect"]; + } + return _nodeDisableSigusr1Flags; +} +function supportsProcessSend() { + return typeof import_node_process.default.send === "function"; +} +let _nodeHardenFlags; +let _nodePermissionFlags; +function getNodePermissionFlags() { + if (_nodePermissionFlags === void 0) { + const major = getNodeMajorVersion(); + if (major >= 24) { + _nodePermissionFlags = [ + // Allow reading from the entire filesystem (npm needs to read package.json, node_modules, etc.). + "--allow-fs-read=*", + // Allow writing to the entire filesystem (npm needs to write to node_modules, cache, etc.). + "--allow-fs-write=*", + // Allow spawning child processes (npm needs to run lifecycle scripts, git, etc.). + "--allow-child-process" + ]; + } else { + _nodePermissionFlags = []; + } + } + return _nodePermissionFlags; +} +function getNodeHardenFlags() { + if (_nodeHardenFlags === void 0) { + const major = getNodeMajorVersion(); + const flags = ["--disable-proto=delete"]; + if (major >= 24) { + flags.push("--permission"); + flags.push(...getNodePermissionFlags()); + } else if (major >= 20) { + flags.push("--experimental-permission"); + } + if (major >= 22) { + flags.push("--force-node-api-uncaught-exceptions-policy"); + } + _nodeHardenFlags = flags; + } + return _nodeHardenFlags; +} +let _nodeNoWarningsFlags; +function getNodeNoWarningsFlags() { + if (_nodeNoWarningsFlags === void 0) { + _nodeNoWarningsFlags = ["--no-warnings", "--no-deprecation"]; + } + return _nodeNoWarningsFlags; +} +function getExecPath() { + return import_node_process.default.execPath; +} +const NODE_SEA_FUSE = "NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2"; +const ESNEXT = "esnext"; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + ESNEXT, + NODE_SEA_FUSE, + getExecPath, + getMaintainedNodeVersions, + getNodeDisableSigusr1Flags, + getNodeHardenFlags, + getNodeMajorVersion, + getNodeMinorVersion, + getNodeNoWarningsFlags, + getNodePatchVersion, + getNodePermissionFlags, + getNodeVersion, + supportsNodeCompileCacheApi, + supportsNodeCompileCacheEnvVar, + supportsNodeDisableSigusr1Flag, + supportsNodeDisableWarningFlag, + supportsNodePermissionFlag, + supportsNodeRequireModule, + supportsNodeRun, + supportsProcessSend +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/package-default-node-range.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/package-default-node-range.d.ts new file mode 100644 index 00000000..8e44f59d --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/package-default-node-range.d.ts @@ -0,0 +1,3 @@ +/* c8 ignore next - External semver call */ +declare const packageDefaultNodeRange: string; +export { packageDefaultNodeRange }; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/package-default-node-range.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/package-default-node-range.js new file mode 100644 index 00000000..a00c5917 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/package-default-node-range.js @@ -0,0 +1,41 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var package_default_node_range_exports = {}; +__export(package_default_node_range_exports, { + packageDefaultNodeRange: () => packageDefaultNodeRange +}); +module.exports = __toCommonJS(package_default_node_range_exports); +var import_maintained_node_versions = require("./maintained-node-versions"); +var semver = __toESM(require("../external/semver.js")); +const packageDefaultNodeRange = `>=${semver.parse(import_maintained_node_versions.maintainedNodeVersions.last).major}`; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + packageDefaultNodeRange +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/package-default-socket-categories.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/package-default-socket-categories.d.ts new file mode 100644 index 00000000..10e2026d --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/package-default-socket-categories.d.ts @@ -0,0 +1,6 @@ +/** + * @fileoverview Default Socket security categories for packages. + */ +// Default category for new packages +declare const packageDefaultSocketCategories: readonly string[]; +export { packageDefaultSocketCategories }; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/package-default-socket-categories.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/package-default-socket-categories.js new file mode 100644 index 00000000..8b2c5c63 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/package-default-socket-categories.js @@ -0,0 +1,29 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var package_default_socket_categories_exports = {}; +__export(package_default_socket_categories_exports, { + packageDefaultSocketCategories: () => packageDefaultSocketCategories +}); +module.exports = __toCommonJS(package_default_socket_categories_exports); +const packageDefaultSocketCategories = Object.freeze(["cleanup"]); +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + packageDefaultSocketCategories +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/packages.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/packages.d.ts new file mode 100644 index 00000000..83656cd2 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/packages.d.ts @@ -0,0 +1,26 @@ +// Package constants. +export declare const PACKAGE = "package"; +export declare const AT_LATEST = "@latest"; +export declare const LATEST = "latest"; +export declare const PACKAGE_DEFAULT_VERSION = "1.0.0"; +// Package default Node range. +/*@__NO_SIDE_EFFECTS__*/ +export declare function getPackageDefaultNodeRange(): string | undefined; +// Package default Socket categories. +/*@__NO_SIDE_EFFECTS__*/ +export declare function getPackageDefaultSocketCategories(): readonly string[]; +// Package extensions. +/*@__NO_SIDE_EFFECTS__*/ +export declare function getPackageExtensions(): Iterable<[string, unknown]>; +// NPM lifecycle event. +/*@__NO_SIDE_EFFECTS__*/ +export declare function getNpmLifecycleEvent(): string | undefined; +// Lifecycle script names. +/*@__NO_SIDE_EFFECTS__*/ +export declare function getLifecycleScriptNames(): string[]; +// Packument cache. +/*@__NO_SIDE_EFFECTS__*/ +export declare function getPackumentCache(): Map; +// Pacote cache path. +/*@__NO_SIDE_EFFECTS__*/ +export declare function getPacoteCachePath(): string; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/packages.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/packages.js new file mode 100644 index 00000000..37d15b16 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/packages.js @@ -0,0 +1,134 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var packages_exports = {}; +__export(packages_exports, { + AT_LATEST: () => AT_LATEST, + LATEST: () => LATEST, + PACKAGE: () => PACKAGE, + PACKAGE_DEFAULT_VERSION: () => PACKAGE_DEFAULT_VERSION, + getLifecycleScriptNames: () => getLifecycleScriptNames, + getNpmLifecycleEvent: () => getNpmLifecycleEvent, + getPackageDefaultNodeRange: () => getPackageDefaultNodeRange, + getPackageDefaultSocketCategories: () => getPackageDefaultSocketCategories, + getPackageExtensions: () => getPackageExtensions, + getPackumentCache: () => getPackumentCache, + getPacoteCachePath: () => getPacoteCachePath +}); +module.exports = __toCommonJS(packages_exports); +var import_npm = require("../env/npm"); +var import_lifecycle_script_names = require("./lifecycle-script-names"); +var import_package_default_node_range = require("./package-default-node-range"); +var import_package_default_socket_categories = require("./package-default-socket-categories"); +var import_package_extensions = require("../package-extensions"); +var import_pacote = __toESM(require("../external/pacote")); +var import_normalize = require("../paths/normalize"); +let _lifecycleScriptNames; +let _packageDefaultNodeRange; +let _packageDefaultSocketCategories; +let _packageExtensions; +let _pacoteCachePath; +let _packumentCache; +const PACKAGE = "package"; +const AT_LATEST = "@latest"; +const LATEST = "latest"; +const PACKAGE_DEFAULT_VERSION = "1.0.0"; +// @__NO_SIDE_EFFECTS__ +function getPackageDefaultNodeRange() { + if (_packageDefaultNodeRange === void 0) { + _packageDefaultNodeRange = import_package_default_node_range.packageDefaultNodeRange; + } + return _packageDefaultNodeRange; +} +// @__NO_SIDE_EFFECTS__ +function getPackageDefaultSocketCategories() { + if (_packageDefaultSocketCategories === void 0) { + _packageDefaultSocketCategories = import_package_default_socket_categories.packageDefaultSocketCategories; + } + return _packageDefaultSocketCategories; +} +// @__NO_SIDE_EFFECTS__ +function getPackageExtensions() { + if (_packageExtensions === void 0) { + _packageExtensions = Object.entries(import_package_extensions.packageExtensions); + } + return _packageExtensions; +} +// @__NO_SIDE_EFFECTS__ +function getNpmLifecycleEvent() { + return (0, import_npm.getNpmLifecycleEvent)(); +} +// @__NO_SIDE_EFFECTS__ +function getLifecycleScriptNames() { + if (_lifecycleScriptNames === void 0) { + _lifecycleScriptNames = Array.from(import_lifecycle_script_names.lifecycleScriptNames); + } + return _lifecycleScriptNames; +} +// @__NO_SIDE_EFFECTS__ +function getPackumentCache() { + if (_packumentCache === void 0) { + _packumentCache = /* @__PURE__ */ new Map(); + } + return _packumentCache; +} +// @__NO_SIDE_EFFECTS__ +function getPacoteCachePath() { + if (_pacoteCachePath === void 0) { + try { + const proto = Reflect.getPrototypeOf( + import_pacote.default.RegistryFetcher.prototype + ); + const PacoteFetcherBase = proto?.constructor; + const cachePath = PacoteFetcherBase ? new PacoteFetcherBase( + /*dummy package spec*/ + "x", + {} + ).cache : ""; + _pacoteCachePath = cachePath ? (0, import_normalize.normalizePath)(cachePath) : ""; + } catch { + _pacoteCachePath = ""; + } + } + return _pacoteCachePath; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + AT_LATEST, + LATEST, + PACKAGE, + PACKAGE_DEFAULT_VERSION, + getLifecycleScriptNames, + getNpmLifecycleEvent, + getPackageDefaultNodeRange, + getPackageDefaultSocketCategories, + getPackageExtensions, + getPackumentCache, + getPacoteCachePath +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/platform.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/platform.d.ts new file mode 100644 index 00000000..fe3e29b6 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/platform.d.ts @@ -0,0 +1,27 @@ +/** + * CPU architecture type. + */ +export type Arch = NodeJS.Architecture; +/** + * Linux libc variant. + */ +export type Libc = 'glibc' | 'musl'; +/** + * Operating system platform type. + */ +export type Platform = NodeJS.Platform; +/** + * Get the current CPU architecture (memoized). + */ +export declare function getArch(): Arch; +/** + * Get the current platform (memoized). + */ +export declare function getPlatform(): Platform; +// Platform detection (memoized at module load). +export declare const DARWIN: boolean; +export declare const WIN32: boolean; +// File permission modes. +export declare const S_IXUSR = 64; +export declare const S_IXGRP = 8; +export declare const S_IXOTH = 1; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/platform.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/platform.js new file mode 100644 index 00000000..ebb54086 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/platform.js @@ -0,0 +1,67 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var platform_exports = {}; +__export(platform_exports, { + DARWIN: () => DARWIN, + S_IXGRP: () => S_IXGRP, + S_IXOTH: () => S_IXOTH, + S_IXUSR: () => S_IXUSR, + WIN32: () => WIN32, + getArch: () => getArch, + getPlatform: () => getPlatform +}); +module.exports = __toCommonJS(platform_exports); +let _os; +// @__NO_SIDE_EFFECTS__ +function getOs() { + if (_os === void 0) { + _os = require("os"); + } + return _os; +} +let _arch; +function getArch() { + if (_arch === void 0) { + _arch = (/* @__PURE__ */ getOs()).arch(); + } + return _arch; +} +let _platform; +function getPlatform() { + if (_platform === void 0) { + _platform = (/* @__PURE__ */ getOs()).platform(); + } + return _platform; +} +const DARWIN = getPlatform() === "darwin"; +const WIN32 = getPlatform() === "win32"; +const S_IXUSR = 64; +const S_IXGRP = 8; +const S_IXOTH = 1; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + DARWIN, + S_IXGRP, + S_IXOTH, + S_IXUSR, + WIN32, + getArch, + getPlatform +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/process.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/process.d.ts new file mode 100644 index 00000000..d4b4dbee --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/process.d.ts @@ -0,0 +1,2 @@ +export declare function getAbortController(): AbortController; +export declare function getAbortSignal(): AbortSignal; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/process.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/process.js new file mode 100644 index 00000000..32c4a7c2 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/process.js @@ -0,0 +1,40 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var process_exports = {}; +__export(process_exports, { + getAbortController: () => getAbortController, + getAbortSignal: () => getAbortSignal +}); +module.exports = __toCommonJS(process_exports); +let _abortController; +function getAbortController() { + if (_abortController === void 0) { + _abortController = new AbortController(); + } + return _abortController; +} +function getAbortSignal() { + return getAbortController().signal; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getAbortController, + getAbortSignal +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/socket.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/socket.d.ts new file mode 100644 index 00000000..d569e8e7 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/socket.d.ts @@ -0,0 +1,43 @@ +/** + * Socket.dev APIs, scopes, organizations, and application names. + */ +// Socket.dev API. +export declare const SOCKET_API_BASE_URL = "https://api.socket.dev/v0"; +export declare const SOCKET_PUBLIC_API_KEY = "sktsec_t_--RAN5U4ivauy4w37-6aoKyYPDt5ZbaT5JBVMqiwKo_api"; +// Alias for backward compatibility. +export declare const SOCKET_PUBLIC_API_TOKEN = "sktsec_t_--RAN5U4ivauy4w37-6aoKyYPDt5ZbaT5JBVMqiwKo_api"; +// Socket.dev URLs. +export declare const SOCKET_WEBSITE_URL = "https://socket.dev"; +export declare const SOCKET_CONTACT_URL = "https://socket.dev/contact"; +export declare const SOCKET_DASHBOARD_URL = "https://socket.dev/dashboard"; +export declare const SOCKET_API_TOKENS_URL = "https://socket.dev/dashboard/settings/api-tokens"; +export declare const SOCKET_PRICING_URL = "https://socket.dev/pricing"; +export declare const SOCKET_STATUS_URL = "https://status.socket.dev"; +export declare const SOCKET_DOCS_URL = "https://docs.socket.dev"; +export declare const SOCKET_DOCS_CONTACT_URL = "https://docs.socket.dev/docs/contact-support"; +// Socket.dev scopes. +export declare const SOCKET_REGISTRY_SCOPE = "@socketregistry"; +export declare const SOCKET_SECURITY_SCOPE = "@socketsecurity"; +export declare const SOCKET_OVERRIDE_SCOPE = "@socketoverride"; +// Socket.dev organization and repositories. +export declare const SOCKET_GITHUB_ORG = "SocketDev"; +export declare const SOCKET_REGISTRY_REPO_NAME = "socket-registry"; +export declare const SOCKET_REGISTRY_PACKAGE_NAME = "@socketsecurity/registry"; +export declare const SOCKET_REGISTRY_NPM_ORG = "socketregistry"; +// Socket.dev application names. +export declare const SOCKET_CLI_APP_NAME = "socket"; +export declare const SOCKET_DLX_APP_NAME = "dlx"; +export declare const SOCKET_FIREWALL_APP_NAME = "sfw"; +export declare const SOCKET_REGISTRY_APP_NAME = "registry"; +export declare const SOCKET_APP_PREFIX = "_"; +// Socket.dev lib. +export declare const SOCKET_LIB_NAME = "@socketsecurity/lib"; +export declare const SOCKET_LIB_VERSION: string; +export declare const SOCKET_LIB_URL = "https://github.com/SocketDev/socket-lib"; +export declare const SOCKET_LIB_USER_AGENT: string; +// Socket.dev IPC. +export declare const SOCKET_IPC_HANDSHAKE = "SOCKET_IPC_HANDSHAKE"; +// Socket.dev cache and registry. +export declare const CACHE_SOCKET_API_DIR = "socket-api"; +export declare const REGISTRY = "registry"; +export declare const REGISTRY_SCOPE_DELIMITER = "__"; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/socket.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/socket.js new file mode 100644 index 00000000..40313634 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/socket.js @@ -0,0 +1,119 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var socket_exports = {}; +__export(socket_exports, { + CACHE_SOCKET_API_DIR: () => CACHE_SOCKET_API_DIR, + REGISTRY: () => REGISTRY, + REGISTRY_SCOPE_DELIMITER: () => REGISTRY_SCOPE_DELIMITER, + SOCKET_API_BASE_URL: () => SOCKET_API_BASE_URL, + SOCKET_API_TOKENS_URL: () => SOCKET_API_TOKENS_URL, + SOCKET_APP_PREFIX: () => SOCKET_APP_PREFIX, + SOCKET_CLI_APP_NAME: () => SOCKET_CLI_APP_NAME, + SOCKET_CONTACT_URL: () => SOCKET_CONTACT_URL, + SOCKET_DASHBOARD_URL: () => SOCKET_DASHBOARD_URL, + SOCKET_DLX_APP_NAME: () => SOCKET_DLX_APP_NAME, + SOCKET_DOCS_CONTACT_URL: () => SOCKET_DOCS_CONTACT_URL, + SOCKET_DOCS_URL: () => SOCKET_DOCS_URL, + SOCKET_FIREWALL_APP_NAME: () => SOCKET_FIREWALL_APP_NAME, + SOCKET_GITHUB_ORG: () => SOCKET_GITHUB_ORG, + SOCKET_IPC_HANDSHAKE: () => SOCKET_IPC_HANDSHAKE, + SOCKET_LIB_NAME: () => SOCKET_LIB_NAME, + SOCKET_LIB_URL: () => SOCKET_LIB_URL, + SOCKET_LIB_USER_AGENT: () => SOCKET_LIB_USER_AGENT, + SOCKET_LIB_VERSION: () => SOCKET_LIB_VERSION, + SOCKET_OVERRIDE_SCOPE: () => SOCKET_OVERRIDE_SCOPE, + SOCKET_PRICING_URL: () => SOCKET_PRICING_URL, + SOCKET_PUBLIC_API_KEY: () => SOCKET_PUBLIC_API_KEY, + SOCKET_PUBLIC_API_TOKEN: () => SOCKET_PUBLIC_API_TOKEN, + SOCKET_REGISTRY_APP_NAME: () => SOCKET_REGISTRY_APP_NAME, + SOCKET_REGISTRY_NPM_ORG: () => SOCKET_REGISTRY_NPM_ORG, + SOCKET_REGISTRY_PACKAGE_NAME: () => SOCKET_REGISTRY_PACKAGE_NAME, + SOCKET_REGISTRY_REPO_NAME: () => SOCKET_REGISTRY_REPO_NAME, + SOCKET_REGISTRY_SCOPE: () => SOCKET_REGISTRY_SCOPE, + SOCKET_SECURITY_SCOPE: () => SOCKET_SECURITY_SCOPE, + SOCKET_STATUS_URL: () => SOCKET_STATUS_URL, + SOCKET_WEBSITE_URL: () => SOCKET_WEBSITE_URL +}); +module.exports = __toCommonJS(socket_exports); +const SOCKET_API_BASE_URL = "https://api.socket.dev/v0"; +const SOCKET_PUBLIC_API_KEY = "sktsec_t_--RAN5U4ivauy4w37-6aoKyYPDt5ZbaT5JBVMqiwKo_api"; +const SOCKET_PUBLIC_API_TOKEN = SOCKET_PUBLIC_API_KEY; +const SOCKET_WEBSITE_URL = "https://socket.dev"; +const SOCKET_CONTACT_URL = "https://socket.dev/contact"; +const SOCKET_DASHBOARD_URL = "https://socket.dev/dashboard"; +const SOCKET_API_TOKENS_URL = "https://socket.dev/dashboard/settings/api-tokens"; +const SOCKET_PRICING_URL = "https://socket.dev/pricing"; +const SOCKET_STATUS_URL = "https://status.socket.dev"; +const SOCKET_DOCS_URL = "https://docs.socket.dev"; +const SOCKET_DOCS_CONTACT_URL = "https://docs.socket.dev/docs/contact-support"; +const SOCKET_REGISTRY_SCOPE = "@socketregistry"; +const SOCKET_SECURITY_SCOPE = "@socketsecurity"; +const SOCKET_OVERRIDE_SCOPE = "@socketoverride"; +const SOCKET_GITHUB_ORG = "SocketDev"; +const SOCKET_REGISTRY_REPO_NAME = "socket-registry"; +const SOCKET_REGISTRY_PACKAGE_NAME = "@socketsecurity/registry"; +const SOCKET_REGISTRY_NPM_ORG = "socketregistry"; +const SOCKET_CLI_APP_NAME = "socket"; +const SOCKET_DLX_APP_NAME = "dlx"; +const SOCKET_FIREWALL_APP_NAME = "sfw"; +const SOCKET_REGISTRY_APP_NAME = "registry"; +const SOCKET_APP_PREFIX = "_"; +const SOCKET_LIB_NAME = "@socketsecurity/lib"; +const SOCKET_LIB_VERSION = "5.18.2"; +const SOCKET_LIB_URL = "https://github.com/SocketDev/socket-lib"; +const SOCKET_LIB_USER_AGENT = `socketsecurity-lib/${SOCKET_LIB_VERSION} (${SOCKET_LIB_URL})`; +const SOCKET_IPC_HANDSHAKE = "SOCKET_IPC_HANDSHAKE"; +const CACHE_SOCKET_API_DIR = "socket-api"; +const REGISTRY = "registry"; +const REGISTRY_SCOPE_DELIMITER = "__"; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + CACHE_SOCKET_API_DIR, + REGISTRY, + REGISTRY_SCOPE_DELIMITER, + SOCKET_API_BASE_URL, + SOCKET_API_TOKENS_URL, + SOCKET_APP_PREFIX, + SOCKET_CLI_APP_NAME, + SOCKET_CONTACT_URL, + SOCKET_DASHBOARD_URL, + SOCKET_DLX_APP_NAME, + SOCKET_DOCS_CONTACT_URL, + SOCKET_DOCS_URL, + SOCKET_FIREWALL_APP_NAME, + SOCKET_GITHUB_ORG, + SOCKET_IPC_HANDSHAKE, + SOCKET_LIB_NAME, + SOCKET_LIB_URL, + SOCKET_LIB_USER_AGENT, + SOCKET_LIB_VERSION, + SOCKET_OVERRIDE_SCOPE, + SOCKET_PRICING_URL, + SOCKET_PUBLIC_API_KEY, + SOCKET_PUBLIC_API_TOKEN, + SOCKET_REGISTRY_APP_NAME, + SOCKET_REGISTRY_NPM_ORG, + SOCKET_REGISTRY_PACKAGE_NAME, + SOCKET_REGISTRY_REPO_NAME, + SOCKET_REGISTRY_SCOPE, + SOCKET_SECURITY_SCOPE, + SOCKET_STATUS_URL, + SOCKET_WEBSITE_URL +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/testing.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/testing.d.ts new file mode 100644 index 00000000..05978dab --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/testing.d.ts @@ -0,0 +1,9 @@ +/** + * Testing framework constants and CI environment detection. + */ +// Testing frameworks. +export declare const TEST = "test"; +export declare const VITEST = "VITEST"; +// CI environment. +export declare const CI = "CI"; +export declare const PRE_COMMIT = "PRE_COMMIT"; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/testing.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/testing.js new file mode 100644 index 00000000..87e49042 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/testing.js @@ -0,0 +1,38 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var testing_exports = {}; +__export(testing_exports, { + CI: () => CI, + PRE_COMMIT: () => PRE_COMMIT, + TEST: () => TEST, + VITEST: () => VITEST +}); +module.exports = __toCommonJS(testing_exports); +const TEST = "test"; +const VITEST = "VITEST"; +const CI = "CI"; +const PRE_COMMIT = "PRE_COMMIT"; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + CI, + PRE_COMMIT, + TEST, + VITEST +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/time.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/time.d.ts new file mode 100644 index 00000000..a9435486 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/time.d.ts @@ -0,0 +1,11 @@ +/** + * Time-related constants including cache TTLs and timeouts. + */ +// Time unit multipliers (milliseconds). +export declare const MILLISECONDS_PER_SECOND = 1000; +export declare const MILLISECONDS_PER_MINUTE: number; +export declare const MILLISECONDS_PER_HOUR: number; +export declare const MILLISECONDS_PER_DAY: number; +// Cache TTL values. +// DLX binary cache expires after 7 days. +export declare const DLX_BINARY_CACHE_TTL: number; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/time.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/time.js new file mode 100644 index 00000000..17e90627 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/time.js @@ -0,0 +1,41 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var time_exports = {}; +__export(time_exports, { + DLX_BINARY_CACHE_TTL: () => DLX_BINARY_CACHE_TTL, + MILLISECONDS_PER_DAY: () => MILLISECONDS_PER_DAY, + MILLISECONDS_PER_HOUR: () => MILLISECONDS_PER_HOUR, + MILLISECONDS_PER_MINUTE: () => MILLISECONDS_PER_MINUTE, + MILLISECONDS_PER_SECOND: () => MILLISECONDS_PER_SECOND +}); +module.exports = __toCommonJS(time_exports); +const MILLISECONDS_PER_SECOND = 1e3; +const MILLISECONDS_PER_MINUTE = 60 * MILLISECONDS_PER_SECOND; +const MILLISECONDS_PER_HOUR = 60 * MILLISECONDS_PER_MINUTE; +const MILLISECONDS_PER_DAY = 24 * MILLISECONDS_PER_HOUR; +const DLX_BINARY_CACHE_TTL = 7 * MILLISECONDS_PER_DAY; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + DLX_BINARY_CACHE_TTL, + MILLISECONDS_PER_DAY, + MILLISECONDS_PER_HOUR, + MILLISECONDS_PER_MINUTE, + MILLISECONDS_PER_SECOND +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/typescript.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/typescript.d.ts new file mode 100644 index 00000000..5019fee0 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/typescript.d.ts @@ -0,0 +1,6 @@ +/** + * TypeScript availability and type system checks. + */ +// TypeScript types/libs availability. +export declare function getTsTypesAvailable(): boolean; +export declare function getTsLibsAvailable(): boolean; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/typescript.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/typescript.js new file mode 100644 index 00000000..cc3144c7 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/constants/typescript.js @@ -0,0 +1,56 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var typescript_exports = {}; +__export(typescript_exports, { + getTsLibsAvailable: () => getTsLibsAvailable, + getTsTypesAvailable: () => getTsTypesAvailable +}); +module.exports = __toCommonJS(typescript_exports); +function getTsTypesAvailable() { + try { + require.resolve("typescript/lib/lib.d.ts"); + return true; + } catch { + return false; + } +} +function getTsLibsAvailable() { + try { + require.resolve("typescript/lib"); + return true; + } catch { + return false; + } +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getTsLibsAvailable, + getTsTypesAvailable +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/code.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/code.d.ts new file mode 100644 index 00000000..ac3b82e8 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/code.d.ts @@ -0,0 +1,8 @@ +import type { CodeCoverageResult, GetCodeCoverageOptions } from './types'; +/** + * Get code coverage metrics from v8 coverage-final.json. + * + * @throws {Error} When coverage file doesn't exist and generateIfMissing is false. + * @throws {Error} When coverage data format is invalid. + */ +export declare function getCodeCoverage(options?: GetCodeCoverageOptions | undefined): Promise; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/code.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/code.js new file mode 100644 index 00000000..7bedb891 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/code.js @@ -0,0 +1,156 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var code_exports = {}; +__export(code_exports, { + getCodeCoverage: () => getCodeCoverage +}); +module.exports = __toCommonJS(code_exports); +var import_node_process = __toESM(require("node:process")); +var import_fs = require("../fs"); +var import_objects = require("../objects"); +var import_spawn = require("../spawn"); +let _fs; +let _path; +// @__NO_SIDE_EFFECTS__ +function getFs() { + if (_fs === void 0) { + _fs = require("fs"); + } + return _fs; +} +// @__NO_SIDE_EFFECTS__ +function getPath() { + if (_path === void 0) { + _path = require("path"); + } + return _path; +} +async function getCodeCoverage(options) { + const path = /* @__PURE__ */ getPath(); + const opts = { + __proto__: null, + coveragePath: path.join(import_node_process.default.cwd(), "coverage/coverage-final.json"), + generateIfMissing: false, + ...options + }; + const { coveragePath, generateIfMissing } = opts; + if (!coveragePath) { + throw new Error("Coverage path is required"); + } + const fs = /* @__PURE__ */ getFs(); + const coverageExists = await fs.promises.access(coveragePath).then(() => true).catch(() => false); + if (!coverageExists) { + if (generateIfMissing) { + await (0, import_spawn.spawn)("vitest", ["run", "--coverage"], { + cwd: import_node_process.default.cwd(), + stdio: "inherit" + }); + } else { + throw new Error( + `Coverage file not found at "${coveragePath}". Run tests with coverage first.` + ); + } + } + const coverageData = await (0, import_fs.readJson)(coveragePath); + if (!(0, import_objects.isObjectObject)(coverageData)) { + throw new Error(`Invalid coverage data format in "${coveragePath}"`); + } + const totals = { + __proto__: null, + branches: { __proto__: null, covered: 0, total: 0 }, + functions: { __proto__: null, covered: 0, total: 0 }, + lines: { __proto__: null, covered: 0, total: 0 }, + statements: { __proto__: null, covered: 0, total: 0 } + }; + const v8Data = coverageData; + for (const fileCoverage of Object.values(v8Data)) { + if (!(0, import_objects.isObjectObject)(fileCoverage)) { + continue; + } + const fc = fileCoverage; + if (fc.s && (0, import_objects.isObjectObject)(fc.s)) { + const statementCounts = Object.values(fc.s); + for (const count of statementCounts) { + if (typeof count === "number") { + totals.statements.total += 1; + if (count > 0) { + totals.statements.covered += 1; + } + } + } + } + if (fc.b && (0, import_objects.isObjectObject)(fc.b)) { + const branchCounts = Object.values(fc.b); + for (const branches of branchCounts) { + if (Array.isArray(branches)) { + for (const count of branches) { + if (typeof count === "number") { + totals.branches.total += 1; + if (count > 0) { + totals.branches.covered += 1; + } + } + } + } + } + } + if (fc.f && (0, import_objects.isObjectObject)(fc.f)) { + const functionCounts = Object.values(fc.f); + for (const count of functionCounts) { + if (typeof count === "number") { + totals.functions.total += 1; + if (count > 0) { + totals.functions.covered += 1; + } + } + } + } + totals.lines.covered = totals.statements.covered; + totals.lines.total = totals.statements.total; + } + return { + branches: calculateMetric(totals.branches), + functions: calculateMetric(totals.functions), + lines: calculateMetric(totals.lines), + statements: calculateMetric(totals.statements) + }; +} +function calculateMetric(data) { + const percent = data.total === 0 ? "0.00" : (data.covered / data.total * 100).toFixed(2); + return { + covered: data.covered, + percent, + total: data.total + }; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getCodeCoverage +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/formatters.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/formatters.d.ts new file mode 100644 index 00000000..571bce28 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/formatters.d.ts @@ -0,0 +1,27 @@ +import type { FormatCoverageOptions } from './types'; +/** + * Get emoji for coverage percentage. + * + * @example + * ```typescript + * getCoverageEmoji(95) // ' \u{1F3AF}' + * getCoverageEmoji(50) // ' \u{1F528}' + * ``` + */ +export declare function getCoverageEmoji(percent: number): string; +/** + * Format coverage data for console output. + * + * @example + * ```typescript + * const output = formatCoverage({ + * code: { + * statements: { percent: '85.00' }, + * branches: { percent: '80.00' }, + * functions: { percent: '90.00' }, + * lines: { percent: '88.00' }, + * }, + * }) + * ``` + */ +export declare function formatCoverage(options: FormatCoverageOptions): string; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/formatters.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/formatters.js new file mode 100644 index 00000000..f289a876 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/formatters.js @@ -0,0 +1,105 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var formatters_exports = {}; +__export(formatters_exports, { + formatCoverage: () => formatCoverage, + getCoverageEmoji: () => getCoverageEmoji +}); +module.exports = __toCommonJS(formatters_exports); +var import_strings = require("../strings"); +const COVERAGE_EMOJI_THRESHOLDS = [ + { emoji: " \u{1F680}", threshold: 99 }, + { emoji: " \u{1F3AF}", threshold: 95 }, + { emoji: " \u2728", threshold: 90 }, + { emoji: " \u{1F49A}", threshold: 85 }, + { emoji: " \u2705", threshold: 80 }, + { emoji: " \u{1F7E2}", threshold: 70 }, + { emoji: " \u{1F7E1}", threshold: 60 }, + { emoji: " \u{1F528}", threshold: 50 }, + { emoji: " \u26A0\uFE0F", threshold: 0 } +]; +function getCoverageEmoji(percent) { + const entry = COVERAGE_EMOJI_THRESHOLDS.find( + ({ threshold }) => percent >= threshold + ); + return entry?.emoji || ""; +} +function formatCoverage(options) { + const opts = { + __proto__: null, + format: "default", + ...options + }; + const { code, format, type } = opts; + if (format === "json") { + return JSON.stringify({ code, type }, null, 2); + } + const overall = calculateOverall(code, type); + if (format === "simple") { + return overall; + } + let output = ""; + output += "Code Coverage:\n"; + output += (0, import_strings.indentString)(`Statements: ${code.statements.percent}% +`, { + count: 2 + }); + output += (0, import_strings.indentString)(`Branches: ${code.branches.percent}% +`, { count: 2 }); + output += (0, import_strings.indentString)(`Functions: ${code.functions.percent}% +`, { + count: 2 + }); + output += (0, import_strings.indentString)(`Lines: ${code.lines.percent}% +`, { count: 2 }); + if (type) { + output += "\nType Coverage:\n"; + output += (0, import_strings.indentString)( + `${type.percent}% (${type.covered}/${type.total}) +`, + { count: 2 } + ); + } + const overallValue = Number.parseFloat(overall); + const emoji = getCoverageEmoji(Number.isNaN(overallValue) ? 0 : overallValue); + output += ` +Overall: ${overall}%${emoji} +`; + return output; +} +function calculateOverall(code, type) { + const metrics = [ + Number.parseFloat(code.statements.percent), + Number.parseFloat(code.branches.percent), + Number.parseFloat(code.functions.percent), + Number.parseFloat(code.lines.percent) + ].map((val) => Number.isNaN(val) ? 0 : val); + if (type) { + const typePercent = Number.parseFloat(type.percent); + metrics.push(Number.isNaN(typePercent) ? 0 : typePercent); + } + const average = metrics.reduce((sum, val) => sum + val, 0) / metrics.length; + return average.toFixed(2); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + formatCoverage, + getCoverageEmoji +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/type.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/type.d.ts new file mode 100644 index 00000000..d2fcafdd --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/type.d.ts @@ -0,0 +1,7 @@ +import type { GetTypeCoverageOptions, TypeCoverageResult } from './types'; +/** + * Get TypeScript type coverage metrics. + * + * @throws {Error} When type-coverage command fails (if generateIfMissing is false). + */ +export declare function getTypeCoverage(options?: GetTypeCoverageOptions | undefined): Promise; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/type.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/type.js new file mode 100644 index 00000000..50cdab91 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/type.js @@ -0,0 +1,76 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var type_exports = {}; +__export(type_exports, { + getTypeCoverage: () => getTypeCoverage +}); +module.exports = __toCommonJS(type_exports); +var import_node_process = __toESM(require("node:process")); +var import_spawn = require("../spawn"); +async function getTypeCoverage(options) { + const opts = { + __proto__: null, + cwd: import_node_process.default.cwd(), + generateIfMissing: false, + ...options + }; + const { cwd, generateIfMissing } = opts; + if (!cwd) { + throw new Error("Working directory is required."); + } + try { + const result = await (0, import_spawn.spawn)("type-coverage", ["--detail"], { + cwd, + stdio: ["ignore", "pipe", "pipe"] + }); + const outputText = result.stdout ? result.stdout.toString() : ""; + const match = /(\d+) \/ (\d+) ([\d.]+)%/.exec(outputText); + if (!match || !match[1] || !match[2] || !match[3]) { + return null; + } + return { + covered: Number.parseInt(match[1], 10), + percent: match[3], + total: Number.parseInt(match[2], 10) + }; + } catch (e) { + if (generateIfMissing) { + throw new Error( + "Unable to generate type coverage. Ensure type-coverage is installed.", + { cause: e } + ); + } + return null; + } +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getTypeCoverage +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/types.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/types.d.ts new file mode 100644 index 00000000..77635700 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/types.d.ts @@ -0,0 +1,70 @@ +/** + * @fileoverview Type definitions for coverage utilities. + */ +/** + * Code coverage metrics for a single category. + */ +export type CoverageMetric = { + covered: number; + percent: string; + total: number; +}; +/** + * Complete code coverage results from v8. + */ +export type CodeCoverageResult = { + branches: CoverageMetric; + functions: CoverageMetric; + lines: CoverageMetric; + statements: CoverageMetric; +}; +/** + * TypeScript type coverage results. + */ +export type TypeCoverageResult = { + covered: number; + percent: string; + total: number; +}; +/** + * Options for getting code coverage. + */ +export type GetCodeCoverageOptions = { + coveragePath?: string | undefined; + generateIfMissing?: boolean | undefined; +}; +/** + * Options for getting type coverage. + */ +export type GetTypeCoverageOptions = { + cwd?: string | undefined; + generateIfMissing?: boolean | undefined; +}; +/** + * Output format for coverage display. + */ +export type CoverageFormat = 'default' | 'json' | 'simple'; +/** + * Options for formatting coverage output. + */ +export type FormatCoverageOptions = { + code: CodeCoverageResult; + format?: CoverageFormat | undefined; + type?: TypeCoverageResult | undefined; +}; +/** + * V8 coverage data structure for a single file. + */ +export type V8FileCoverage = { + b?: Record | undefined; + branchMap?: Record | undefined; + f?: Record | undefined; + fnMap?: Record | undefined; + path: string; + s?: Record | undefined; + statementMap?: Record | undefined; +}; +/** + * V8 coverage-final.json structure. + */ +export type V8CoverageData = Record; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/types.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/types.js new file mode 100644 index 00000000..4af3a3ea --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/cover/types.js @@ -0,0 +1,17 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var types_exports = {}; +module.exports = __toCommonJS(types_exports); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/debug.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/debug.d.ts new file mode 100644 index 00000000..f85dc46b --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/debug.d.ts @@ -0,0 +1,98 @@ +// Type definitions +interface DebugOptions { + namespaces?: string; + spinner?: { + isSpinning: boolean; + stop(): void; + start(): void; + }; + [key: string]: unknown; +} +type NamespacesOrOptions = string | DebugOptions; +interface InspectOptions { + depth?: number | null; + colors?: boolean; + [key: string]: unknown; +} +export type { DebugOptions, NamespacesOrOptions, InspectOptions }; +/** + * Debug output for object inspection with caller info. + */ +declare function debugDirNs(namespacesOrOpts: NamespacesOrOptions, obj: unknown, inspectOpts?: InspectOptions | undefined): void; +/** + * Debug output with caller info. + */ +declare function debugNs(namespacesOrOpts: NamespacesOrOptions, ...args: unknown[]): void; +/** + * Debug logging function with caller info. + */ +declare function debugLogNs(namespacesOrOpts: NamespacesOrOptions, ...args: unknown[]): void; +/** + * Debug output for cache operations with caller info. + * First argument is the operation type (hit/miss/set/clear). + * Second argument is the cache key or message. + * Optional third argument is metadata object. + */ +declare function debugCacheNs(namespacesOrOpts: NamespacesOrOptions, operation: string, key: string, meta?: unknown | undefined): void; +/** + * Cache debug function with caller info. + * + * @example + * ```typescript + * debugCache('hit', 'socket-sdk:scans:abc123') + * debugCache('miss', 'socket-sdk:scans:xyz', { ttl: 60000 }) + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function debugCache(operation: string, key: string, meta?: unknown | undefined): void; +/** + * Check if debug mode is enabled. + */ +/*@__NO_SIDE_EFFECTS__*/ +declare function isDebugNs(namespaces: string | undefined): boolean; +/** + * Debug output with caller info (wrapper for debugNs with default namespace). + */ +declare function debug(...args: unknown[]): void; +/** + * Debug output for object inspection (wrapper for debugDirNs with default namespace). + */ +declare function debugDir(obj: unknown, inspectOpts?: InspectOptions | undefined): void; +/** + * Debug logging function (wrapper for debugLogNs with default namespace). + */ +declare function debugLog(...args: unknown[]): void; +/** + * Check if debug mode is enabled. + */ +/*@__NO_SIDE_EFFECTS__*/ +declare function isDebug(): boolean; +/** + * Create a Node.js util.debuglog compatible function. + * Returns a function that conditionally writes debug messages to stderr. + */ +/*@__NO_SIDE_EFFECTS__*/ +declare function debuglog(section: string): import("util").DebugLogger; +/** + * Create timing functions for measuring code execution time. + * Returns an object with start() and end() methods, plus a callable function. + */ +/*@__NO_SIDE_EFFECTS__*/ +declare function debugtime(label: string): { + (): void; + start: () => void; + end: () => void; +}; +// Export main debug functions with caller info. +export { debug }; +// debugCache is already exported directly above +export { debugCacheNs }; +export { debugDir }; +export { debugDirNs }; +export { debugLog }; +export { debuglog }; +export { debugLogNs }; +export { debugNs }; +export { debugtime }; +export { isDebug }; +export { isDebugNs }; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/debug.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/debug.js new file mode 100644 index 00000000..9372d566 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/debug.js @@ -0,0 +1,339 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var debug_exports = {}; +__export(debug_exports, { + debug: () => debug, + debugCache: () => debugCache, + debugCacheNs: () => debugCacheNs, + debugDir: () => debugDir, + debugDirNs: () => debugDirNs, + debugLog: () => debugLog, + debugLogNs: () => debugLogNs, + debugNs: () => debugNs, + debuglog: () => debuglog, + debugtime: () => debugtime, + isDebug: () => isDebug, + isDebugNs: () => isDebugNs +}); +module.exports = __toCommonJS(debug_exports); +var import_debug = require("./env/debug"); +var import_socket = require("./env/socket"); +var import_is_unicode_supported = __toESM(require("./external/@socketregistry/is-unicode-supported")); +var import_debug2 = __toESM(require("./external/debug")); +var import_logger = require("./logger"); +var import_objects = require("./objects"); +var import_spinner = require("./spinner"); +var import_strings = require("./strings"); +const ReflectApply = Reflect.apply; +const logger = (0, import_logger.getDefaultLogger)(); +const debugByNamespace = /* @__PURE__ */ new Map(); +// @__NO_SIDE_EFFECTS__ +function getDebugJsInstance(namespace) { + let inst = debugByNamespace.get(namespace); + if (inst) { + return inst; + } + if (!(0, import_debug.getDebug)() && (0, import_socket.getSocketDebug)() && (namespace === "error" || namespace === "notice")) { + import_debug2.default.enable(namespace); + } + inst = (0, import_debug2.default)(namespace); + inst.log = customLog; + debugByNamespace.set(namespace, inst); + return inst; +} +let _util; +// @__NO_SIDE_EFFECTS__ +function getUtil() { + if (_util === void 0) { + _util = require("util"); + } + return _util; +} +// @__NO_SIDE_EFFECTS__ +function getCallerInfo(stackOffset = 3) { + let name = ""; + const captureStackTrace = Error.captureStackTrace; + if (typeof captureStackTrace === "function") { + const obj = {}; + captureStackTrace(obj, getCallerInfo); + const stack = obj.stack; + if (typeof stack === "string") { + let lineCount = 0; + let lineStart = 0; + for (let i = 0, { length } = stack; i < length; i += 1) { + if (stack[i] === "\n") { + lineCount += 1; + if (lineCount < stackOffset) { + lineStart = i + 1; + } else { + const line = stack.slice(lineStart, i).trimStart(); + const match = /(?<=^at\s+).*?(?=\s+\(|$)/.exec(line)?.[0]; + if (match) { + name = match.replace(/^(?:async|bound|get|new|set)\s+/, ""); + if (name.startsWith("Object.")) { + const afterDot = name.slice( + 7 + /*'Object.'.length*/ + ); + if (!(0, import_objects.hasOwn)(Object, afterDot)) { + name = afterDot; + } + } + } + break; + } + } + } + } + } + return name; +} +// @__NO_SIDE_EFFECTS__ +function customLog(...args) { + const util = /* @__PURE__ */ getUtil(); + const inspectOpts = import_debug2.default.inspectOpts ? { + ...import_debug2.default.inspectOpts, + showHidden: import_debug2.default.inspectOpts.showHidden === null ? void 0 : import_debug2.default.inspectOpts.showHidden, + depth: import_debug2.default.inspectOpts.depth === null || typeof import_debug2.default.inspectOpts.depth === "boolean" ? void 0 : import_debug2.default.inspectOpts.depth + } : {}; + ReflectApply(logger.info, logger, [ + util.formatWithOptions(inspectOpts, ...args) + ]); +} +// @__NO_SIDE_EFFECTS__ +function extractOptions(namespaces) { + return namespaces !== null && typeof namespaces === "object" ? { __proto__: null, ...namespaces } : { __proto__: null, namespaces }; +} +// @__NO_SIDE_EFFECTS__ +function isEnabled(namespaces) { + if (!(0, import_socket.getSocketDebug)()) { + return false; + } + if (typeof namespaces !== "string" || !namespaces || namespaces === "*") { + return true; + } + const split = namespaces.trim().replace(/\s+/g, ",").split(",").filter(Boolean); + const names = []; + const skips = []; + for (const ns of split) { + if (ns.startsWith("-")) { + skips.push(ns.slice(1)); + } else { + names.push(ns); + } + } + if (names.length && !names.some((ns) => (/* @__PURE__ */ getDebugJsInstance(ns)).enabled)) { + return false; + } + return skips.every((ns) => !(/* @__PURE__ */ getDebugJsInstance(ns)).enabled); +} +function debugDirNs(namespacesOrOpts, obj, inspectOpts) { + const options = /* @__PURE__ */ extractOptions(namespacesOrOpts); + const { namespaces } = options; + if (!/* @__PURE__ */ isEnabled(namespaces)) { + return; + } + const callerName = /* @__PURE__ */ getCallerInfo(4) || "anonymous"; + if (pointingTriangle === void 0) { + const supported = (0, import_is_unicode_supported.default)(); + pointingTriangle = supported ? "\u25B8" : ">"; + } + let opts = inspectOpts; + if (opts === void 0) { + const debugOpts = import_debug2.default.inspectOpts; + if (debugOpts) { + opts = { + ...debugOpts, + showHidden: debugOpts.showHidden === null ? void 0 : debugOpts.showHidden, + depth: debugOpts.depth === null || typeof debugOpts.depth === "boolean" ? null : debugOpts.depth + }; + } + } + const spinnerInstance = options.spinner || (0, import_spinner.getDefaultSpinner)(); + const wasSpinning = spinnerInstance?.isSpinning; + spinnerInstance?.stop(); + logger.info(`[DEBUG] ${callerName} ${pointingTriangle} object inspection:`); + logger.dir(obj, inspectOpts); + if (wasSpinning) { + spinnerInstance?.start(); + } +} +let pointingTriangle; +function debugNs(namespacesOrOpts, ...args) { + const options = /* @__PURE__ */ extractOptions(namespacesOrOpts); + const { namespaces } = options; + if (!/* @__PURE__ */ isEnabled(namespaces)) { + return; + } + const name = /* @__PURE__ */ getCallerInfo(4) || "anonymous"; + if (pointingTriangle === void 0) { + const supported = (0, import_is_unicode_supported.default)(); + pointingTriangle = supported ? "\u25B8" : ">"; + } + const text = args.at(0); + const logArgs = typeof text === "string" ? [ + (0, import_strings.applyLinePrefix)( + `${name ? `${name} ${pointingTriangle} ` : ""}${text}`, + { prefix: "[DEBUG] " } + ), + ...args.slice(1) + ] : args; + const spinnerInstance = options.spinner || (0, import_spinner.getDefaultSpinner)(); + const wasSpinning = spinnerInstance?.isSpinning; + spinnerInstance?.stop(); + ReflectApply(logger.info, logger, logArgs); + if (wasSpinning) { + spinnerInstance?.start(); + } +} +function debugLogNs(namespacesOrOpts, ...args) { + const options = /* @__PURE__ */ extractOptions(namespacesOrOpts); + const { namespaces } = options; + if (!/* @__PURE__ */ isEnabled(namespaces)) { + return; + } + const callerName = /* @__PURE__ */ getCallerInfo(4) || "anonymous"; + if (pointingTriangle === void 0) { + const supported = (0, import_is_unicode_supported.default)(); + pointingTriangle = supported ? "\u25B8" : ">"; + } + const text = args.at(0); + const logArgs = typeof text === "string" ? [ + (0, import_strings.applyLinePrefix)( + `${callerName ? `${callerName} ${pointingTriangle} ` : ""}${text}`, + { prefix: "[DEBUG] " } + ), + ...args.slice(1) + ] : [`[DEBUG] ${callerName} ${pointingTriangle}`, ...args]; + const spinnerInstance = options.spinner || (0, import_spinner.getDefaultSpinner)(); + const wasSpinning = spinnerInstance?.isSpinning; + spinnerInstance?.stop(); + ReflectApply(logger.info, logger, logArgs); + if (wasSpinning) { + spinnerInstance?.start(); + } +} +function debugCacheNs(namespacesOrOpts, operation, key, meta) { + const options = /* @__PURE__ */ extractOptions(namespacesOrOpts); + const { namespaces } = options; + if (!/* @__PURE__ */ isEnabled(namespaces)) { + return; + } + const callerName = /* @__PURE__ */ getCallerInfo(4) || "cache"; + if (pointingTriangle === void 0) { + const supported = (0, import_is_unicode_supported.default)(); + pointingTriangle = supported ? "\u25B8" : ">"; + } + const prefix = `[CACHE] ${callerName} ${pointingTriangle} ${operation}: ${key}`; + const logArgs = meta !== void 0 ? [prefix, meta] : [prefix]; + const spinnerInstance = options.spinner || (0, import_spinner.getDefaultSpinner)(); + const wasSpinning = spinnerInstance?.isSpinning; + spinnerInstance?.stop(); + ReflectApply(logger.info, logger, logArgs); + if (wasSpinning) { + spinnerInstance?.start(); + } +} +// @__NO_SIDE_EFFECTS__ +function debugCache(operation, key, meta) { + if (!(0, import_socket.getSocketDebug)()) { + return; + } + const callerName = /* @__PURE__ */ getCallerInfo(3) || "cache"; + if (pointingTriangle === void 0) { + const supported = (0, import_is_unicode_supported.default)(); + pointingTriangle = supported ? "\u25B8" : ">"; + } + const prefix = `[CACHE] ${callerName} ${pointingTriangle} ${operation}: ${key}`; + const args = meta !== void 0 ? [prefix, meta] : [prefix]; + console.log(...args); +} +// @__NO_SIDE_EFFECTS__ +function isDebugNs(namespaces) { + return !!(0, import_socket.getSocketDebug)() && /* @__PURE__ */ isEnabled(namespaces); +} +function debug(...args) { + debugNs("*", ...args); +} +function debugDir(obj, inspectOpts) { + debugDirNs("*", obj, inspectOpts); +} +function debugLog(...args) { + debugLogNs("*", ...args); +} +// @__NO_SIDE_EFFECTS__ +function isDebug() { + return !!(0, import_socket.getSocketDebug)(); +} +// @__NO_SIDE_EFFECTS__ +function debuglog(section) { + const util = /* @__PURE__ */ getUtil(); + return util.debuglog(section); +} +// @__NO_SIDE_EFFECTS__ +function debugtime(label) { + const util = /* @__PURE__ */ getUtil(); + let startTime; + const impl = () => { + if (startTime === void 0) { + startTime = Date.now(); + } else { + const duration = Date.now() - startTime; + util.debuglog("time")(`${label}: ${duration}ms`); + startTime = void 0; + } + }; + impl.start = () => { + startTime = Date.now(); + }; + impl.end = () => { + if (startTime !== void 0) { + const duration = Date.now() - startTime; + util.debuglog("time")(`${label}: ${duration}ms`); + startTime = void 0; + } + }; + return impl; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + debug, + debugCache, + debugCacheNs, + debugDir, + debugDirNs, + debugLog, + debugLogNs, + debugNs, + debuglog, + debugtime, + isDebug, + isDebugNs +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/binary.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/binary.d.ts new file mode 100644 index 00000000..e642fcb2 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/binary.d.ts @@ -0,0 +1,269 @@ +import { spawn } from '../spawn'; +import type { SpawnExtra, SpawnOptions } from '../spawn'; +export interface DlxBinaryOptions { + /** + * URL to download the binary from. + */ + url: string; + /** + * Optional name for the cached binary (defaults to URL hash). + */ + name?: string | undefined; + /** + * Expected SRI integrity hash (sha512-) for verification. + */ + integrity?: string | undefined; + /** + * Expected SHA-256 hex checksum for verification. + * Passed to httpDownload for inline verification during download. + * This is more secure than post-download verification as it fails early. + */ + sha256?: string | undefined; + /** + * Cache TTL in milliseconds (default: 7 days). + */ + cacheTtl?: number | undefined; + /** + * Force re-download even if cached. + * Aligns with npm/npx --force flag. + */ + force?: boolean | undefined; + /** + * Skip confirmation prompts (auto-approve). + * Aligns with npx --yes/-y flag. + */ + yes?: boolean | undefined; + /** + * Suppress output (quiet mode). + * Aligns with npx --quiet/-q and pnpm --silent/-s flags. + */ + quiet?: boolean | undefined; + /** + * Additional spawn options. + */ + spawnOptions?: SpawnOptions | undefined; +} +export interface DlxBinaryResult { + /** Path to the cached binary. */ + binaryPath: string; + /** Whether the binary was newly downloaded. */ + downloaded: boolean; + /** The spawn promise for the running process. */ + spawnPromise: ReturnType; +} +/** + * Metadata structure for cached binaries (.dlx-metadata.json). + * Unified schema shared across TypeScript (dlxBinary) and C++ stub extractor. + * + * Fields: + * - version: Schema version (currently "1.0.0") + * - cache_key: First 16 chars of SHA-512 hash (matches directory name) + * - timestamp: Unix timestamp in milliseconds + * - integrity: SRI hash (sha512-, aligned with npm) + * - size: Size of cached binary in bytes + * - source: Origin information + * - type: "download" | "extract" | "package" + * - url: Download URL (if type is "download") + * - path: Source binary path (if type is "extract") + * - spec: Package spec (if type is "package") + * - update_check: Update checking metadata (optional) + * - last_check: Timestamp of last update check + * - last_notification: Timestamp of last user notification + * - latest_known: Latest known version string + * + * Example: + * ```json + * { + * "version": "1.0.0", + * "cache_key": "a1b2c3d4e5f67890", + * "timestamp": 1730332800000, + * "integrity": "sha512-abc123base64...", + * "size": 15000000, + * "source": { + * "type": "download", + * "url": "https://example.com/binary" + * }, + * "update_check": { + * "last_check": 1730332800000, + * "last_notification": 1730246400000, + * "latest_known": "2.1.0" + * } + * } + * ``` + * + * @internal This interface documents the metadata file format. + */ +export interface DlxMetadata { + version: string; + cache_key: string; + timestamp: number; + integrity: string; + size: number; + source?: { + type: 'download' | 'extract' | 'package'; + url?: string; + path?: string; + spec?: string; + }; + update_check?: { + last_check: number; + last_notification: number; + latest_known: string; + }; +} +/** + * Clean expired entries from the DLX cache. + * + * @example + * ```typescript + * // Remove cache entries older than the default TTL + * const removed = await cleanDlxCache() + * + * // Remove entries older than 1 hour + * const removed2 = await cleanDlxCache(60 * 60 * 1000) + * ``` + */ +export declare function cleanDlxCache(maxAge?: number): Promise; +/** + * Download and execute a binary from a URL with caching. + * + * @example + * ```typescript + * const result = await dlxBinary(['--version'], { + * url: 'https://example.com/tool-linux-x64', + * name: 'tool', + * }) + * await result.spawnPromise + * ``` + */ +export declare function dlxBinary(args: readonly string[] | string[], options?: DlxBinaryOptions | undefined, spawnExtra?: SpawnExtra | undefined): Promise; +/** + * Download a binary from a URL with caching (without execution). + * Similar to downloadPackage from dlx-package. + * + * @returns Object containing the path to the cached binary and whether it was downloaded + * + * @example + * ```typescript + * const { binaryPath, downloaded } = await downloadBinary({ + * url: 'https://example.com/tool-linux-x64', + * name: 'tool', + * }) + * console.log(`Binary at: ${binaryPath}, fresh: ${downloaded}`) + * ``` + */ +export declare function downloadBinary(options: Omit): Promise<{ + binaryPath: string; + downloaded: boolean; +}>; +/** + * Download a file from a URL with integrity checking and concurrent download protection. + * Uses processLock to prevent multiple processes from downloading the same binary simultaneously. + * Internal helper function for downloading binary files. + * + * Supports two integrity verification methods: + * - sha256: Hex SHA-256 checksum (verified inline during download via httpDownload) + * - integrity: SRI format sha512- (verified post-download) + * + * The sha256 option is preferred as it fails early during download if the checksum doesn't match. + * + * @example + * ```typescript + * const integrity = await downloadBinaryFile( + * 'https://example.com/tool-linux-x64', + * '/tmp/dlx-cache/tool' + * ) + * console.log(`Integrity: ${integrity}`) + * ``` + */ +export declare function downloadBinaryFile(url: string, destPath: string, integrity?: string | undefined, sha256?: string | undefined): Promise; +/** + * Execute a cached binary without re-downloading. + * Similar to executePackage from dlx-package. + * Binary must have been previously downloaded via downloadBinary or dlxBinary. + * + * @param binaryPath Path to the cached binary (from downloadBinary result) + * @param args Arguments to pass to the binary + * @param spawnOptions Spawn options for execution + * @param spawnExtra Extra spawn configuration + * @returns The spawn promise for the running process + * + * @example + * ```typescript + * const { binaryPath } = await downloadBinary({ + * url: 'https://example.com/tool-linux-x64', + * name: 'tool', + * }) + * const result = executeBinary(binaryPath, ['--help']) + * ``` + */ +export declare function executeBinary(binaryPath: string, args: readonly string[] | string[], spawnOptions?: SpawnOptions | undefined, spawnExtra?: SpawnExtra | undefined): ReturnType; +/** + * Get the DLX binary cache directory path. + * Returns normalized path for cross-platform compatibility. + * Uses same directory as dlx-package for unified DLX storage. + * + * @example + * ```typescript + * const cachePath = getDlxCachePath() + * ``` + */ +export declare function getDlxCachePath(): string; +/** + * Get metadata file path for a cached binary. + * + * @example + * ```typescript + * const metaPath = getBinaryCacheMetadataPath('/tmp/dlx-cache/a1b2c3d4') + * // '/tmp/dlx-cache/a1b2c3d4/.dlx-metadata.json' + * ``` + */ +export declare function getBinaryCacheMetadataPath(cacheEntryPath: string): string; +/** + * Check if a cached binary is still valid. + * + * @example + * ```typescript + * const ttl = 7 * 24 * 60 * 60 * 1000 + * const valid = await isBinaryCacheValid('/tmp/dlx-cache/a1b2c3d4', ttl) + * if (!valid) { + * // Re-download the binary + * } + * ``` + */ +export declare function isBinaryCacheValid(cacheEntryPath: string, cacheTtl: number): Promise; +/** + * Get information about cached binaries. + * + * @example + * ```typescript + * const entries = await listDlxCache() + * for (const entry of entries) { + * console.log(`${entry.name}: ${entry.size} bytes`) + * } + * ``` + */ +export declare function listDlxCache(): Promise>; +/** + * Write metadata for a cached binary. + * Uses unified schema shared with C++ decompressor and CLI dlxBinary. + * Schema documentation: See DlxMetadata interface in this file (exported). + * + * @example + * ```typescript + * await writeBinaryCacheMetadata( + * '/tmp/dlx-cache/a1b2c3d4', + * 'a1b2c3d4', + * 'https://example.com/tool', + * 'sha512-abc123...', + * 15000000 + * ) + * ``` + */ +export declare function writeBinaryCacheMetadata(cacheEntryPath: string, cacheKey: string, url: string, integrity: string, size: number): Promise; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/binary.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/binary.js new file mode 100644 index 00000000..44ce00a1 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/binary.js @@ -0,0 +1,450 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var binary_exports = {}; +__export(binary_exports, { + cleanDlxCache: () => cleanDlxCache, + dlxBinary: () => dlxBinary, + downloadBinary: () => downloadBinary, + downloadBinaryFile: () => downloadBinaryFile, + executeBinary: () => executeBinary, + getBinaryCacheMetadataPath: () => getBinaryCacheMetadataPath, + getDlxCachePath: () => getDlxCachePath, + isBinaryCacheValid: () => isBinaryCacheValid, + listDlxCache: () => listDlxCache, + writeBinaryCacheMetadata: () => writeBinaryCacheMetadata +}); +module.exports = __toCommonJS(binary_exports); +var import_node_process = __toESM(require("node:process")); +var import_platform = require("../constants/platform"); +var import_time = require("../constants/time"); +var import_cache = require("./cache"); +var import_http_request = require("../http-request"); +var import_fs = require("../fs"); +var import_objects = require("../objects"); +var import_normalize = require("../paths/normalize"); +var import_socket = require("../paths/socket"); +var import_process_lock = require("../process-lock"); +var import_spawn = require("../spawn"); +let _crypto; +// @__NO_SIDE_EFFECTS__ +function getCrypto() { + if (_crypto === void 0) { + _crypto = require("crypto"); + } + return _crypto; +} +let _fs; +// @__NO_SIDE_EFFECTS__ +function getFs() { + if (_fs === void 0) { + _fs = require("fs"); + } + return _fs; +} +let _path; +// @__NO_SIDE_EFFECTS__ +function getPath() { + if (_path === void 0) { + _path = require("path"); + } + return _path; +} +async function cleanDlxCache(maxAge = import_time.DLX_BINARY_CACHE_TTL) { + const cacheDir = getDlxCachePath(); + const fs = /* @__PURE__ */ getFs(); + if (!fs.existsSync(cacheDir)) { + return 0; + } + let cleaned = 0; + const now = Date.now(); + const path = /* @__PURE__ */ getPath(); + const entries = await fs.promises.readdir(cacheDir); + for (const entry of entries) { + const entryPath = path.join(cacheDir, entry); + const metaPath = getBinaryCacheMetadataPath(entryPath); + try { + if (!await (0, import_fs.isDir)(entryPath)) { + continue; + } + const metadata = await (0, import_fs.readJson)(metaPath, { throws: false }); + if (!metadata || typeof metadata !== "object" || Array.isArray(metadata)) { + continue; + } + const timestamp = metadata["timestamp"]; + const age = typeof timestamp === "number" && timestamp > 0 ? now - timestamp : Number.POSITIVE_INFINITY; + if (age < 0 || age > maxAge) { + await (0, import_fs.safeDelete)(entryPath, { force: true, recursive: true }); + cleaned += 1; + } + } catch { + try { + const contents = await fs.promises.readdir(entryPath); + if (!contents.length) { + await (0, import_fs.safeDelete)(entryPath); + cleaned += 1; + } + } catch { + } + } + } + return cleaned; +} +async function dlxBinary(args, options, spawnExtra) { + const { + cacheTtl = import_time.DLX_BINARY_CACHE_TTL, + force: userForce = false, + integrity, + name, + sha256, + spawnOptions, + url, + yes + } = { __proto__: null, ...options }; + const fs = /* @__PURE__ */ getFs(); + const path = /* @__PURE__ */ getPath(); + const force = yes === true ? true : userForce; + const cacheDir = getDlxCachePath(); + const binaryName = name || `binary-${import_node_process.default.platform}-${(0, import_platform.getArch)()}`; + const spec = `${url}:${binaryName}`; + const cacheKey = (0, import_cache.generateCacheKey)(spec); + const cacheEntryDir = path.join(cacheDir, cacheKey); + const binaryPath = (0, import_normalize.normalizePath)(path.join(cacheEntryDir, binaryName)); + let downloaded = false; + let computedIntegrity = integrity; + if (!force && fs.existsSync(cacheEntryDir) && await isBinaryCacheValid(cacheEntryDir, cacheTtl)) { + try { + const metaPath = getBinaryCacheMetadataPath(cacheEntryDir); + const metadata = await (0, import_fs.readJson)(metaPath, { throws: false }); + if (metadata && typeof metadata === "object" && !Array.isArray(metadata) && typeof metadata["integrity"] === "string") { + computedIntegrity = metadata["integrity"]; + if (!fs.existsSync(binaryPath)) { + downloaded = true; + } + } else { + downloaded = true; + } + } catch { + downloaded = true; + } + } else { + downloaded = true; + } + if (downloaded) { + try { + await (0, import_fs.safeMkdir)(cacheEntryDir); + } catch (e) { + const code = e.code; + if (code === "EACCES" || code === "EPERM") { + throw new Error( + `Permission denied creating binary cache directory: ${cacheEntryDir} +Please check directory permissions or run with appropriate access.`, + { cause: e } + ); + } + if (code === "EROFS") { + throw new Error( + `Cannot create binary cache directory on read-only filesystem: ${cacheEntryDir} +Ensure the filesystem is writable or set SOCKET_DLX_DIR to a writable location.`, + { cause: e } + ); + } + throw new Error( + `Failed to create binary cache directory: ${cacheEntryDir}`, + { cause: e } + ); + } + computedIntegrity = await downloadBinaryFile( + url, + binaryPath, + integrity, + sha256 + ); + const stats = await fs.promises.stat(binaryPath); + await writeBinaryCacheMetadata( + cacheEntryDir, + cacheKey, + url, + computedIntegrity || "", + stats.size + ); + } + const needsShell = import_platform.WIN32 && /\.(?:bat|cmd|ps1)$/i.test(binaryPath); + const finalSpawnOptions = needsShell ? { + ...spawnOptions, + env: { + ...spawnOptions?.env, + PATH: `${cacheEntryDir}${(/* @__PURE__ */ getPath()).delimiter}${import_node_process.default.env["PATH"] || ""}` + }, + shell: true + } : spawnOptions; + const spawnPromise = (0, import_spawn.spawn)(binaryPath, args, finalSpawnOptions, spawnExtra); + return { + binaryPath, + downloaded, + spawnPromise + }; +} +async function downloadBinary(options) { + const { + cacheTtl = import_time.DLX_BINARY_CACHE_TTL, + force = false, + integrity, + name, + sha256, + url + } = { __proto__: null, ...options }; + const fs = /* @__PURE__ */ getFs(); + const path = /* @__PURE__ */ getPath(); + const cacheDir = getDlxCachePath(); + const binaryName = name || `binary-${import_node_process.default.platform}-${(0, import_platform.getArch)()}`; + const spec = `${url}:${binaryName}`; + const cacheKey = (0, import_cache.generateCacheKey)(spec); + const cacheEntryDir = path.join(cacheDir, cacheKey); + const binaryPath = (0, import_normalize.normalizePath)(path.join(cacheEntryDir, binaryName)); + let downloaded = false; + if (!force && fs.existsSync(cacheEntryDir) && await isBinaryCacheValid(cacheEntryDir, cacheTtl)) { + downloaded = false; + } else { + try { + await (0, import_fs.safeMkdir)(cacheEntryDir); + } catch (e) { + const code = e.code; + if (code === "EACCES" || code === "EPERM") { + throw new Error( + `Permission denied creating binary cache directory: ${cacheEntryDir} +Please check directory permissions or run with appropriate access.`, + { cause: e } + ); + } + if (code === "EROFS") { + throw new Error( + `Cannot create binary cache directory on read-only filesystem: ${cacheEntryDir} +Ensure the filesystem is writable or set SOCKET_DLX_DIR to a writable location.`, + { cause: e } + ); + } + throw new Error( + `Failed to create binary cache directory: ${cacheEntryDir}`, + { cause: e } + ); + } + const computedIntegrity = await downloadBinaryFile( + url, + binaryPath, + integrity, + sha256 + ); + const stats = await fs.promises.stat(binaryPath); + await writeBinaryCacheMetadata( + cacheEntryDir, + cacheKey, + url, + computedIntegrity || "", + stats.size + ); + downloaded = true; + } + return { + binaryPath, + downloaded + }; +} +async function downloadBinaryFile(url, destPath, integrity, sha256) { + const crypto = /* @__PURE__ */ getCrypto(); + const fs = /* @__PURE__ */ getFs(); + const path = /* @__PURE__ */ getPath(); + const cacheEntryDir = path.dirname(destPath); + const lockPath = path.join(cacheEntryDir, "concurrency.lock"); + return await import_process_lock.processLock.withLock( + lockPath, + async () => { + if (fs.existsSync(destPath)) { + const stats = await fs.promises.stat(destPath); + if (stats.size > 0) { + const fileBuffer2 = await fs.promises.readFile(destPath); + const hash2 = crypto.createHash("sha512").update(fileBuffer2).digest("base64"); + return `sha512-${hash2}`; + } + } + try { + await (0, import_http_request.httpDownload)(url, destPath, sha256 ? { sha256 } : void 0); + } catch (e) { + throw new Error( + `Failed to download binary from ${url} +Destination: ${destPath} +Check your internet connection or verify the URL is accessible.`, + { cause: e } + ); + } + const fileBuffer = await fs.promises.readFile(destPath); + const hash = crypto.createHash("sha512").update(fileBuffer).digest("base64"); + const actualIntegrity = `sha512-${hash}`; + if (integrity) { + const integrityMatch = actualIntegrity.length === integrity.length && crypto.timingSafeEqual( + Buffer.from(actualIntegrity), + Buffer.from(integrity) + ); + if (!integrityMatch) { + await (0, import_fs.safeDelete)(destPath); + throw new Error( + `Integrity mismatch: expected ${integrity}, got ${actualIntegrity}` + ); + } + } + if (!import_platform.WIN32) { + await fs.promises.chmod(destPath, 493); + } + return actualIntegrity; + }, + { + // Align with npm npx locking strategy. + staleMs: 5e3, + touchIntervalMs: 2e3 + } + ); +} +function executeBinary(binaryPath, args, spawnOptions, spawnExtra) { + const needsShell = import_platform.WIN32 && /\.(?:bat|cmd|ps1)$/i.test(binaryPath); + const path = /* @__PURE__ */ getPath(); + const cacheEntryDir = path.dirname(binaryPath); + const finalSpawnOptions = needsShell ? { + ...spawnOptions, + env: { + ...spawnOptions?.env, + PATH: `${cacheEntryDir}${path.delimiter}${import_node_process.default.env["PATH"] || ""}` + }, + shell: true + } : spawnOptions; + return (0, import_spawn.spawn)(binaryPath, args, finalSpawnOptions, spawnExtra); +} +function getDlxCachePath() { + return (0, import_socket.getSocketDlxDir)(); +} +function getBinaryCacheMetadataPath(cacheEntryPath) { + return (/* @__PURE__ */ getPath()).join(cacheEntryPath, ".dlx-metadata.json"); +} +async function isBinaryCacheValid(cacheEntryPath, cacheTtl) { + const fs = /* @__PURE__ */ getFs(); + try { + const metaPath = getBinaryCacheMetadataPath(cacheEntryPath); + if (!fs.existsSync(metaPath)) { + return false; + } + const metadata = await (0, import_fs.readJson)(metaPath, { throws: false }); + if (!(0, import_objects.isObjectObject)(metadata)) { + return false; + } + const now = Date.now(); + const timestamp = metadata["timestamp"]; + if (typeof timestamp !== "number" || timestamp <= 0) { + return false; + } + const age = now - timestamp; + if (age < 0) { + return false; + } + return age < cacheTtl; + } catch { + return false; + } +} +async function listDlxCache() { + const cacheDir = getDlxCachePath(); + const fs = /* @__PURE__ */ getFs(); + if (!fs.existsSync(cacheDir)) { + return []; + } + const results = []; + const now = Date.now(); + const path = /* @__PURE__ */ getPath(); + const entries = await fs.promises.readdir(cacheDir); + for (const entry of entries) { + const entryPath = path.join(cacheDir, entry); + try { + if (!await (0, import_fs.isDir)(entryPath)) { + continue; + } + const metaPath = getBinaryCacheMetadataPath(entryPath); + const metadata = await (0, import_fs.readJson)(metaPath, { throws: false }); + if (!metadata || typeof metadata !== "object" || Array.isArray(metadata)) { + continue; + } + const metaObj = metadata; + const source = metaObj["source"]; + const url = source?.["url"] || metaObj["url"] || ""; + const files = await fs.promises.readdir(entryPath); + const binaryFile = files.find((f) => !f.startsWith(".")); + if (binaryFile) { + const binaryPath = path.join(entryPath, binaryFile); + const binaryStats = await fs.promises.stat(binaryPath); + results.push({ + age: now - (metaObj["timestamp"] || 0), + integrity: metaObj["integrity"] || "", + name: binaryFile, + size: binaryStats.size, + url + }); + } + } catch { + } + } + return results; +} +async function writeBinaryCacheMetadata(cacheEntryPath, cacheKey, url, integrity, size) { + const metaPath = getBinaryCacheMetadataPath(cacheEntryPath); + const metadata = { + version: "1.0.0", + cache_key: cacheKey, + timestamp: Date.now(), + integrity, + size, + source: { + type: "download", + url + } + }; + const fs = /* @__PURE__ */ getFs(); + const tmpPath = `${metaPath}.tmp.${import_node_process.default.pid}`; + await fs.promises.writeFile(tmpPath, JSON.stringify(metadata, null, 2)); + await fs.promises.rename(tmpPath, metaPath); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + cleanDlxCache, + dlxBinary, + downloadBinary, + downloadBinaryFile, + executeBinary, + getBinaryCacheMetadataPath, + getDlxCachePath, + isBinaryCacheValid, + listDlxCache, + writeBinaryCacheMetadata +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/cache.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/cache.d.ts new file mode 100644 index 00000000..3602cac0 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/cache.d.ts @@ -0,0 +1,31 @@ +/** + * Generate a cache directory name using npm/npx approach. + * Uses first 16 characters of SHA-512 hash (like npm/npx). + * + * Rationale for SHA-512 truncated (vs full SHA-256): + * - Matches npm/npx ecosystem behavior + * - Shorter paths for Windows MAX_PATH compatibility (260 chars) + * - 16 hex chars = 64 bits = acceptable collision risk for local cache + * - Collision probability ~1 in 18 quintillion with 1000 entries + * + * Input strategy (aligned with npx): + * - npx uses package spec strings (e.g., '@scope/pkg@1.0.0', 'prettier@3.0.0') + * - Caller provides complete spec string with version for accurate cache keying + * - For package installs: Use PURL-style spec with version + * Examples: 'npm:prettier@3.0.0', 'pypi:requests@2.31.0', 'gem:rails@7.0.0' + * Note: Socket uses shorthand format without 'pkg:' prefix + * (handled by @socketregistry/packageurl-js) + * - For binary downloads: Use URL:name for uniqueness + * + * Reference: npm/cli v11.6.2 libnpmexec/lib/index.js#L233-L244 + * https://github.com/npm/cli/blob/v11.6.2/workspaces/libnpmexec/lib/index.js#L233-L244 + * Implementation: packages.map().sort().join('\n') → SHA-512 → slice(0,16) + * npx hashes the package spec (name@version), not just name + * + * @example + * ```typescript + * const key = generateCacheKey('prettier@3.0.0') + * // e.g. 'a1b2c3d4e5f67890' + * ``` + */ +export declare function generateCacheKey(spec: string): string; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/cache.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/cache.js new file mode 100644 index 00000000..5c04323f --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/cache.js @@ -0,0 +1,40 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var cache_exports = {}; +__export(cache_exports, { + generateCacheKey: () => generateCacheKey +}); +module.exports = __toCommonJS(cache_exports); +let _crypto; +// @__NO_SIDE_EFFECTS__ +function getCrypto() { + if (_crypto === void 0) { + _crypto = require("crypto"); + } + return _crypto; +} +function generateCacheKey(spec) { + const crypto = /* @__PURE__ */ getCrypto(); + return crypto.createHash("sha512").update(spec).digest("hex").substring(0, 16); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + generateCacheKey +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/detect.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/detect.d.ts new file mode 100644 index 00000000..73afa438 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/detect.d.ts @@ -0,0 +1,99 @@ +export type ExecutableType = 'package' | 'binary' | 'unknown'; +export interface ExecutableDetectionResult { + type: ExecutableType; + method: 'dlx-cache' | 'package-json' | 'file-extension'; + packageJsonPath?: string; + inDlxCache?: boolean; +} +/** + * Detect executable type for paths in DLX cache. + * Uses filesystem structure (node_modules/ presence). + * + * @param filePath - Path within DLX cache (~/.socket/_dlx/) + * @returns Detection result + * + * @example + * ```typescript + * const result = detectDlxExecutableType('/tmp/.socket/_dlx/a1b2c3d4/tool') + * console.log(result.type) // 'package' or 'binary' + * ``` + */ +export declare function detectDlxExecutableType(filePath: string): ExecutableDetectionResult; +/** + * Detect if a path is a Node.js package or native binary executable. + * Works for both DLX cache paths and local filesystem paths. + * + * Detection strategy: + * 1. If in DLX cache: Use detectDlxExecutableType() + * 2. Otherwise: Use detectLocalExecutableType() + * + * @param filePath - Path to executable (DLX cache or local filesystem) + * @returns Detection result with type, method, and metadata + * + * @example + * ```typescript + * const result = detectExecutableType('/path/to/tool') + * if (result.type === 'package') { + * spawnNode([filePath, ...args]) + * } else { + * spawn(filePath, args) + * } + * ``` + */ +export declare function detectExecutableType(filePath: string): ExecutableDetectionResult; +/** + * Detect executable type for local filesystem paths. + * Uses package.json and file extension checks. + * + * @param filePath - Local filesystem path (not in DLX cache) + * @returns Detection result + * + * @example + * ```typescript + * const result = detectLocalExecutableType('/usr/local/bin/tool') + * if (result.type === 'package') { + * console.log('Node.js package at:', result.packageJsonPath) + * } + * ``` + */ +export declare function detectLocalExecutableType(filePath: string): ExecutableDetectionResult; +/** + * Check if a file path indicates a Node.js script. + * + * @param filePath - Path to check + * @returns True if file has .js, .mjs, or .cjs extension + * + * @example + * ```typescript + * isJsFilePath('index.js') // true + * isJsFilePath('lib.mjs') // true + * isJsFilePath('tool.exe') // false + * ``` + */ +export declare function isJsFilePath(filePath: string): boolean; +/** + * Simplified helper: Is this a native binary executable? + * + * @param filePath - Path to check + * @returns True if detected as native binary (not Node.js package) + * + * @example + * ```typescript + * isNativeBinary('/usr/local/bin/tool') // true + * isNativeBinary('/tmp/project/index.js') // false + * ``` + */ +export declare function isNativeBinary(filePath: string): boolean; +/** + * Simplified helper: Is this a Node.js package? + * + * @param filePath - Path to check + * @returns True if detected as Node.js package + * + * @example + * ```typescript + * isNodePackage('/tmp/project/index.js') // true + * isNodePackage('/usr/local/bin/tool') // false + * ``` + */ +export declare function isNodePackage(filePath: string): boolean; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/detect.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/detect.js new file mode 100644 index 00000000..e20bee78 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/detect.js @@ -0,0 +1,165 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var detect_exports = {}; +__export(detect_exports, { + detectDlxExecutableType: () => detectDlxExecutableType, + detectExecutableType: () => detectExecutableType, + detectLocalExecutableType: () => detectLocalExecutableType, + isJsFilePath: () => isJsFilePath, + isNativeBinary: () => isNativeBinary, + isNodePackage: () => isNodePackage +}); +module.exports = __toCommonJS(detect_exports); +var import_paths = require("./paths"); +var import_socket = require("../paths/socket"); +let _fs; +let _path; +// @__NO_SIDE_EFFECTS__ +function getFs() { + if (_fs === void 0) { + _fs = require("fs"); + } + return _fs; +} +// @__NO_SIDE_EFFECTS__ +function getPath() { + if (_path === void 0) { + _path = require("path"); + } + return _path; +} +const NODE_JS_EXTENSIONS = /* @__PURE__ */ new Set([".js", ".mjs", ".cjs"]); +const packageJsonPathCache = /* @__PURE__ */ new Map(); +const packageJsonContentCache = /* @__PURE__ */ new Map(); +function findPackageJson(filePath) { + const fs = /* @__PURE__ */ getFs(); + const path = /* @__PURE__ */ getPath(); + const startDir = path.dirname(path.resolve(filePath)); + const cached = packageJsonPathCache.get(startDir); + if (cached !== void 0) { + if (cached === null) { + return void 0; + } + if (fs.existsSync(cached)) { + return cached; + } + packageJsonPathCache.delete(startDir); + } + let currentDir = startDir; + const root = path.parse(currentDir).root; + while (currentDir !== root) { + const packageJsonPath = path.join(currentDir, "package.json"); + if (fs.existsSync(packageJsonPath)) { + packageJsonPathCache.set(startDir, packageJsonPath); + return packageJsonPath; + } + currentDir = path.dirname(currentDir); + } + packageJsonPathCache.set(startDir, null); + return void 0; +} +function readPackageJson(packageJsonPath) { + const fs = /* @__PURE__ */ getFs(); + const cached = packageJsonContentCache.get(packageJsonPath); + if (cached !== void 0) { + return cached; + } + try { + const content = JSON.parse(fs.readFileSync(packageJsonPath, "utf8")); + packageJsonContentCache.set(packageJsonPath, content); + return content; + } catch { + packageJsonContentCache.set(packageJsonPath, null); + return null; + } +} +function detectDlxExecutableType(filePath) { + const fs = /* @__PURE__ */ getFs(); + const path = /* @__PURE__ */ getPath(); + const dlxDir = (0, import_socket.getSocketDlxDir)(); + const absolutePath = path.resolve(filePath); + const relativePath = path.relative(dlxDir, absolutePath); + const cacheKey = relativePath.split(path.sep)[0]; + const cacheDir = path.join(dlxDir, cacheKey); + if (fs.existsSync(path.join(cacheDir, "node_modules"))) { + return { + type: "package", + method: "dlx-cache", + inDlxCache: true + }; + } + return { + type: "binary", + method: "dlx-cache", + inDlxCache: true + }; +} +function detectExecutableType(filePath) { + if ((0, import_paths.isInSocketDlx)(filePath)) { + return detectDlxExecutableType(filePath); + } + return detectLocalExecutableType(filePath); +} +function detectLocalExecutableType(filePath) { + const packageJsonPath = findPackageJson(filePath); + if (packageJsonPath !== void 0) { + const packageJson = readPackageJson(packageJsonPath); + if (packageJson?.bin) { + return { + type: "package", + method: "package-json", + packageJsonPath, + inDlxCache: false + }; + } + } + if (isJsFilePath(filePath)) { + return { + inDlxCache: false, + method: "file-extension", + type: "package" + }; + } + return { + type: "binary", + method: "file-extension", + inDlxCache: false + }; +} +function isJsFilePath(filePath) { + const path = /* @__PURE__ */ getPath(); + const ext = path.extname(filePath).toLowerCase(); + return NODE_JS_EXTENSIONS.has(ext); +} +function isNativeBinary(filePath) { + return detectExecutableType(filePath).type === "binary"; +} +function isNodePackage(filePath) { + return detectExecutableType(filePath).type === "package"; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + detectDlxExecutableType, + detectExecutableType, + detectLocalExecutableType, + isJsFilePath, + isNativeBinary, + isNodePackage +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/dir.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/dir.d.ts new file mode 100644 index 00000000..3932ea26 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/dir.d.ts @@ -0,0 +1,58 @@ +/** + * Clear all DLX package installations. + * + * @example + * ```typescript + * await clearDlx() + * ``` + */ +export declare function clearDlx(): Promise; +/** + * Clear all DLX package installations synchronously. + * + * @example + * ```typescript + * clearDlxSync() + * ``` + */ +export declare function clearDlxSync(): void; +/** + * Check if the DLX directory exists. + * + * @example + * ```typescript + * if (dlxDirExists()) { + * console.log('DLX directory is present') + * } + * ``` + */ +export declare function dlxDirExists(): boolean; +/** + * Check if the DLX directory exists asynchronously. + * + * @example + * ```typescript + * if (await dlxDirExistsAsync()) { + * console.log('DLX directory is present') + * } + * ``` + */ +export declare function dlxDirExistsAsync(): Promise; +/** + * Ensure the DLX directory exists, creating it if necessary. + * + * @example + * ```typescript + * await ensureDlxDir() + * ``` + */ +export declare function ensureDlxDir(): Promise; +/** + * Ensure the DLX directory exists synchronously, creating it if necessary. + * + * @example + * ```typescript + * ensureDlxDirSync() + * ``` + */ +export declare function ensureDlxDirSync(): void; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/dir.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/dir.js new file mode 100644 index 00000000..984cfd61 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/dir.js @@ -0,0 +1,79 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var dir_exports = {}; +__export(dir_exports, { + clearDlx: () => clearDlx, + clearDlxSync: () => clearDlxSync, + dlxDirExists: () => dlxDirExists, + dlxDirExistsAsync: () => dlxDirExistsAsync, + ensureDlxDir: () => ensureDlxDir, + ensureDlxDirSync: () => ensureDlxDirSync +}); +module.exports = __toCommonJS(dir_exports); +var import_fs = require("../fs"); +var import_socket = require("../paths/socket"); +var import_promises = require("../promises"); +var import_packages = require("./packages"); +let _fs; +// @__NO_SIDE_EFFECTS__ +function getFs() { + if (_fs === void 0) { + _fs = require("fs"); + } + return _fs; +} +async function clearDlx() { + const packages = await (0, import_packages.listDlxPackagesAsync)(); + await (0, import_promises.pEach)(packages, (pkg) => (0, import_packages.removeDlxPackage)(pkg)); +} +function clearDlxSync() { + const packages = (0, import_packages.listDlxPackages)(); + for (const pkg of packages) { + (0, import_packages.removeDlxPackageSync)(pkg); + } +} +function dlxDirExists() { + const fs = /* @__PURE__ */ getFs(); + return fs.existsSync((0, import_socket.getSocketDlxDir)()); +} +async function dlxDirExistsAsync() { + const fs = /* @__PURE__ */ getFs(); + try { + await fs.promises.access((0, import_socket.getSocketDlxDir)()); + return true; + } catch { + return false; + } +} +async function ensureDlxDir() { + await (0, import_fs.safeMkdir)((0, import_socket.getSocketDlxDir)()); +} +function ensureDlxDirSync() { + (0, import_fs.safeMkdirSync)((0, import_socket.getSocketDlxDir)()); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + clearDlx, + clearDlxSync, + dlxDirExists, + dlxDirExistsAsync, + ensureDlxDir, + ensureDlxDirSync +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/manifest.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/manifest.d.ts new file mode 100644 index 00000000..9b82dd86 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/manifest.d.ts @@ -0,0 +1,140 @@ +/** + * Details for npm package entries. + */ +export interface PackageDetails { + installed_version: string; + size?: number; + update_check?: { + last_check: number; + last_notification: number; + latest_known: string; + }; +} +/** + * Details for binary download entries. + */ +export interface BinaryDetails { + /** SRI integrity hash (sha512-, aligned with npm). */ + integrity: string; + platform: string; + arch: string; + size: number; + source: { + type: 'download' | 'extract'; + url?: string; + path?: string; + }; + /** Update check metadata (same structure as packages). */ + update_check?: { + last_check: number; + last_notification: number; + latest_known: string; + }; +} +/** + * Unified manifest entry for all cached items (packages and binaries). + * Shared fields at root, type-specific fields in details. + */ +export interface ManifestEntry { + type: 'package' | 'binary'; + cache_key: string; + timestamp: number; + details: PackageDetails | BinaryDetails; +} +/** + * Legacy store record format (deprecated, for migration). + */ +export interface StoreRecord { + timestampFetch: number; + timestampNotification: number; + version: string; +} +export interface DlxManifestOptions { + /** + * Custom manifest file path (defaults to ~/.socket/_dlx/.dlx-manifest.json). + */ + manifestPath?: string; +} +/** + * Type guard for binary entries. + * + * @example + * ```typescript + * const entry = manifest.getManifestEntry('https://example.com/tool') + * if (entry && isBinaryEntry(entry)) { + * console.log(entry.details.integrity) + * } + * ``` + */ +export declare function isBinaryEntry(entry: ManifestEntry): entry is ManifestEntry & { + details: BinaryDetails; +}; +/** + * Type guard for package entries. + * + * @example + * ```typescript + * const entry = manifest.getManifestEntry('@socketsecurity/cli@^2.0.0') + * if (entry && isPackageEntry(entry)) { + * console.log(entry.details.installed_version) + * } + * ``` + */ +export declare function isPackageEntry(entry: ManifestEntry): entry is ManifestEntry & { + details: PackageDetails; +}; +/** + * DLX manifest storage manager with atomic operations. + * Supports both legacy format (package name keys) and new unified manifest format (spec keys). + */ +export declare class DlxManifest { + private readonly manifestPath; + private readonly lockPath; + constructor(options?: DlxManifestOptions); + /** + * Read the entire manifest file. + * @private + */ + private readManifest; + private writeManifest; + /** + * Clear cached data for a specific entry. + */ + clear(name: string): Promise; + /** + * Clear all cached data. + */ + clearAll(): Promise; + /** + * Get cached update information for a package (legacy format). + * @deprecated Use getManifestEntry() for new code. + */ + get(name: string): StoreRecord | undefined; + /** + * Get all cached package names. + */ + getAllPackages(): string[]; + /** + * Get a manifest entry by spec (e.g., "@socketsecurity/cli@^2.0.11"). + */ + getManifestEntry(spec: string): ManifestEntry | undefined; + /** + * Check if cached data is fresh based on TTL. + */ + isFresh(record: StoreRecord | undefined, ttlMs: number): boolean; + /** + * Store update information for a package (legacy format). + * @deprecated Use setPackageEntry() for new code. + */ + set(name: string, record: StoreRecord): Promise; + /** + * Set a binary manifest entry. + */ + setBinaryEntry(spec: string, cacheKey: string, details: BinaryDetails): Promise; + /** + * Set a package manifest entry. + */ + setPackageEntry(spec: string, cacheKey: string, details: PackageDetails): Promise; +} +// Export singleton instance using default manifest location. +export declare const dlxManifest: DlxManifest; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/manifest.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/manifest.js new file mode 100644 index 00000000..00a995a2 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/manifest.js @@ -0,0 +1,291 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var manifest_exports = {}; +__export(manifest_exports, { + DlxManifest: () => DlxManifest, + dlxManifest: () => dlxManifest, + isBinaryEntry: () => isBinaryEntry, + isPackageEntry: () => isPackageEntry +}); +module.exports = __toCommonJS(manifest_exports); +var import_fs = require("../fs"); +var import_logger = require("../logger"); +var import_socket = require("../paths/socket"); +var import_process_lock = require("../process-lock"); +let _fs; +let _path; +// @__NO_SIDE_EFFECTS__ +function getFs() { + if (_fs === void 0) { + _fs = require("fs"); + } + return _fs; +} +// @__NO_SIDE_EFFECTS__ +function getPath() { + if (_path === void 0) { + _path = require("path"); + } + return _path; +} +const fs = /* @__PURE__ */ getFs(); +const path = /* @__PURE__ */ getPath(); +const logger = (0, import_logger.getDefaultLogger)(); +const MANIFEST_FILE_NAME = ".dlx-manifest.json"; +function isBinaryEntry(entry) { + return entry.type === "binary"; +} +function isPackageEntry(entry) { + return entry.type === "package"; +} +class DlxManifest { + manifestPath; + lockPath; + constructor(options = {}) { + this.manifestPath = options.manifestPath ?? path.join((0, import_socket.getSocketDlxDir)(), MANIFEST_FILE_NAME); + this.lockPath = `${this.manifestPath}.lock`; + } + /** + * Read the entire manifest file. + * @private + */ + readManifest() { + try { + if (!fs.existsSync(this.manifestPath)) { + return /* @__PURE__ */ Object.create(null); + } + const rawContent = (0, import_fs.readFileUtf8Sync)(this.manifestPath); + const content = (typeof rawContent === "string" ? rawContent : rawContent.toString("utf8")).trim(); + if (!content) { + return /* @__PURE__ */ Object.create(null); + } + return JSON.parse(content); + } catch (error) { + logger.warn( + `Failed to read manifest: ${error instanceof Error ? error.message : String(error)}` + ); + return /* @__PURE__ */ Object.create(null); + } + } + /** + * Write the manifest file atomically. + * @private + */ + async writeManifest(data) { + const manifestDir = path.dirname(this.manifestPath); + try { + (0, import_fs.safeMkdirSync)(manifestDir, { recursive: true }); + } catch (error) { + logger.warn( + `Failed to create manifest directory: ${error instanceof Error ? error.message : String(error)}` + ); + } + const content = JSON.stringify(data, null, 2); + const tempPath = `${this.manifestPath}.tmp`; + try { + fs.writeFileSync(tempPath, content, "utf8"); + fs.renameSync(tempPath, this.manifestPath); + } catch (error) { + try { + if (fs.existsSync(tempPath)) { + fs.unlinkSync(tempPath); + } + } catch { + } + throw error; + } + } + /** + * Clear cached data for a specific entry. + */ + async clear(name) { + await import_process_lock.processLock.withLock(this.lockPath, async () => { + try { + if (!fs.existsSync(this.manifestPath)) { + return; + } + const content = fs.readFileSync(this.manifestPath, "utf8"); + if (!content.trim()) { + return; + } + const data = JSON.parse(content); + delete data[name]; + await this.writeManifest(data); + } catch (error) { + logger.warn( + `Failed to clear cache for ${name}: ${error instanceof Error ? error.message : String(error)}` + ); + } + }); + } + /** + * Clear all cached data. + */ + async clearAll() { + await import_process_lock.processLock.withLock(this.lockPath, async () => { + try { + if (fs.existsSync(this.manifestPath)) { + fs.unlinkSync(this.manifestPath); + } + } catch (error) { + logger.warn( + `Failed to clear all cache: ${error instanceof Error ? error.message : String(error)}` + ); + } + }); + } + /** + * Get cached update information for a package (legacy format). + * @deprecated Use getManifestEntry() for new code. + */ + get(name) { + const data = this.readManifest(); + const entry = data[name]; + if (entry && !("type" in entry)) { + return entry; + } + return void 0; + } + /** + * Get all cached package names. + */ + getAllPackages() { + try { + if (!fs.existsSync(this.manifestPath)) { + return []; + } + const rawContent = (0, import_fs.readFileUtf8Sync)(this.manifestPath); + const content = (typeof rawContent === "string" ? rawContent : rawContent.toString("utf8")).trim(); + if (!content) { + return []; + } + const data = JSON.parse(content); + return Object.keys(data); + } catch (error) { + logger.warn( + `Failed to get package list: ${error instanceof Error ? error.message : String(error)}` + ); + return []; + } + } + /** + * Get a manifest entry by spec (e.g., "@socketsecurity/cli@^2.0.11"). + */ + getManifestEntry(spec) { + const data = this.readManifest(); + const entry = data[spec]; + if (entry && "type" in entry) { + return entry; + } + return void 0; + } + /** + * Check if cached data is fresh based on TTL. + */ + isFresh(record, ttlMs) { + if (!record) { + return false; + } + const age = Date.now() - record.timestampFetch; + return age < ttlMs; + } + /** + * Store update information for a package (legacy format). + * @deprecated Use setPackageEntry() for new code. + */ + async set(name, record) { + await import_process_lock.processLock.withLock(this.lockPath, async () => { + let data = /* @__PURE__ */ Object.create(null); + try { + if (fs.existsSync(this.manifestPath)) { + const content2 = fs.readFileSync(this.manifestPath, "utf8"); + if (content2.trim()) { + data = JSON.parse(content2); + } + } + } catch (error) { + logger.warn( + `Failed to read existing manifest: ${error instanceof Error ? error.message : String(error)}` + ); + } + data[name] = record; + const manifestDir = path.dirname(this.manifestPath); + try { + (0, import_fs.safeMkdirSync)(manifestDir, { recursive: true }); + } catch (error) { + logger.warn( + `Failed to create manifest directory: ${error instanceof Error ? error.message : String(error)}` + ); + } + const content = JSON.stringify(data, null, 2); + const tempPath = `${this.manifestPath}.tmp`; + try { + fs.writeFileSync(tempPath, content, "utf8"); + fs.renameSync(tempPath, this.manifestPath); + } catch (error) { + try { + if (fs.existsSync(tempPath)) { + fs.unlinkSync(tempPath); + } + } catch { + } + throw error; + } + }); + } + /** + * Set a binary manifest entry. + */ + async setBinaryEntry(spec, cacheKey, details) { + await import_process_lock.processLock.withLock(this.lockPath, async () => { + const data = this.readManifest(); + data[spec] = { + type: "binary", + cache_key: cacheKey, + timestamp: Date.now(), + details + }; + await this.writeManifest(data); + }); + } + /** + * Set a package manifest entry. + */ + async setPackageEntry(spec, cacheKey, details) { + await import_process_lock.processLock.withLock(this.lockPath, async () => { + const data = this.readManifest(); + data[spec] = { + type: "package", + cache_key: cacheKey, + timestamp: Date.now(), + details + }; + await this.writeManifest(data); + }); + } +} +const dlxManifest = new DlxManifest(); +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + DlxManifest, + dlxManifest, + isBinaryEntry, + isPackageEntry +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/package.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/package.d.ts new file mode 100644 index 00000000..0bd5892b --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/package.d.ts @@ -0,0 +1,226 @@ +import type { SpawnExtra, SpawnOptions } from '../spawn'; +import { spawn } from '../spawn'; +export interface DownloadPackageResult { + /** Path to the installed package directory. */ + packageDir: string; + /** Path to the binary. */ + binaryPath: string; + /** Whether the package was newly installed. */ + installed: boolean; +} +export interface DlxPackageOptions { + /** + * Package to install (e.g., '@cyclonedx/cdxgen@10.0.0'). + * Aligns with npx --package flag. + */ + package: string; + /** + * Binary name to execute (optional - auto-detected in most cases). + * + * Auto-detection logic: + * 1. If package has only one binary, uses it automatically + * 2. Tries user-provided binaryName + * 3. Tries last segment of package name (e.g., 'cli' from '@socketsecurity/cli') + * 4. Falls back to first binary + * + * Only needed when package has multiple binaries and auto-detection fails. + * + * @example + * // Auto-detected (single binary) + * { package: '@socketsecurity/cli' } // Finds 'socket' binary automatically + * + * // Explicit (multiple binaries) + * { package: 'some-tool', binaryName: 'specific-tool' } + */ + binaryName?: string | undefined; + /** + * Force reinstallation even if package exists. + * Aligns with npx --yes/-y flag behavior. + */ + force?: boolean | undefined; + /** + * Skip confirmation prompts (auto-approve). + * Aligns with npx --yes/-y flag. + */ + yes?: boolean | undefined; + /** + * Suppress output (quiet mode). + * Aligns with npx --quiet/-q and pnpm --silent/-s flags. + */ + quiet?: boolean | undefined; + /** + * Additional spawn options for the execution. + */ + spawnOptions?: SpawnOptions | undefined; +} +export interface DlxPackageResult { + /** Path to the installed package directory. */ + packageDir: string; + /** Path to the binary that was executed. */ + binaryPath: string; + /** Whether the package was newly installed. */ + installed: boolean; + /** The spawn promise for the running process. */ + spawnPromise: ReturnType; +} +/** + * Execute a package via DLX - install if needed and run its binary. + * + * This is the Socket equivalent of npx/pnpm dlx/yarn dlx, but using + * our own cache directory (~/.socket/_dlx) and installation logic. + * + * Auto-forces reinstall for version ranges to get latest within range. + * + * @example + * ```typescript + * // Download and execute cdxgen + * const result = await dlxPackage( + * ['--version'], + * { package: '@cyclonedx/cdxgen@10.0.0' } + * ) + * await result.spawnPromise + * ``` + */ +export declare function dlxPackage(args: readonly string[] | string[], options?: DlxPackageOptions | undefined, spawnExtra?: SpawnExtra | undefined): Promise; +/** + * Download and install a package without executing it. + * This is useful for self-update or when you need the package files + * but don't want to run the binary immediately. + * + * @example + * ```typescript + * // Install @socketsecurity/cli without running it + * const result = await downloadPackage({ + * package: '@socketsecurity/cli@1.2.0', + * force: true + * }) + * console.log('Installed to:', result.packageDir) + * console.log('Binary at:', result.binaryPath) + * ``` + */ +export declare function downloadPackage(options: DlxPackageOptions): Promise; +/** + * Install package to ~/.socket/_dlx// if not already installed. + * Uses pacote for installation (no npm CLI required). + * Protected by process lock to prevent concurrent installation corruption. + * + * @example + * ```typescript + * const { installed, packageDir } = await ensurePackageInstalled( + * 'prettier', + * 'prettier@3.0.0', + * false + * ) + * console.log(`Installed: ${installed}, dir: ${packageDir}`) + * ``` + */ +export declare function ensurePackageInstalled(packageName: string, packageSpec: string, force: boolean): Promise<{ + installed: boolean; + packageDir: string; +}>; +/** + * Execute a package's binary with cross-platform shell handling. + * The package must already be installed (use downloadPackage first). + * + * On Windows, script files (.bat, .cmd, .ps1) require shell: true. + * Matches npm/npx execution behavior. + * + * @example + * ```typescript + * // Execute an already-installed package + * const downloaded = await downloadPackage({ package: 'cowsay@1.5.0' }) + * const result = await executePackage( + * downloaded.binaryPath, + * ['Hello World'], + * { stdio: 'inherit' } + * ) + * ``` + */ +export declare function executePackage(binaryPath: string, args: readonly string[] | string[], spawnOptions?: SpawnOptions | undefined, spawnExtra?: SpawnExtra | undefined): ReturnType; +/** + * Find the binary path for an installed package. + * Uses npm's bin resolution strategy with user-friendly fallbacks. + * Resolves platform-specific wrappers (.cmd, .ps1, etc.) on Windows. + * + * Resolution strategy (cherry-picked from libnpmexec): + * 1. Use npm's getBinFromManifest (handles aliases and standard cases) + * 2. Fall back to user-provided binaryName if npm's strategy fails + * 3. Try last segment of package name as final fallback + * 4. Use first binary as last resort + * + * @example + * ```typescript + * const binPath = findBinaryPath( + * '/tmp/.socket/_dlx/a1b2c3d4', + * 'prettier' + * ) + * console.log(`Binary: ${binPath}`) + * ``` + */ +export declare function findBinaryPath(packageDir: string, packageName: string, binaryName?: string): string; +/** + * Make all binaries in an installed package executable. + * Reads the package.json bin field and makes all binaries executable (chmod 0o755). + * Handles both single binary (string) and multiple binaries (object) formats. + * + * Aligns with npm's approach: + * - Uses 0o755 permission (matches npm's cmd-shim) + * - Reads bin field from package.json (matches npm's bin-links and libnpmexec) + * - Handles both string and object bin formats + * + * References: + * - npm cmd-shim: https://github.com/npm/cmd-shim/blob/main/lib/index.js + * - npm getBinFromManifest: https://github.com/npm/libnpmexec/blob/main/lib/get-bin-from-manifest.js + * + * @example + * ```typescript + * makePackageBinsExecutable( + * '/tmp/.socket/_dlx/a1b2c3d4', + * 'prettier' + * ) + * ``` + */ +export declare function makePackageBinsExecutable(packageDir: string, packageName: string): void; +/** + * Build a PURL string for an npm package. + * Follows the PURL spec for the npm type: + * - Scoped: `@scope/pkg` → `pkg:npm/%40scope/pkg@version` + * - Unscoped: `pkg` → `pkg:npm/pkg@version` + * + */ +export declare function npmPurl(name: string, version: string): string; +/** + * Parse package spec into name and version using npm-package-arg. + * Examples: + * - 'lodash@4.17.21' → { name: 'lodash', version: '4.17.21' } + * - '@scope/pkg@1.0.0' → { name: '@scope/pkg', version: '1.0.0' } + * - 'lodash' → { name: 'lodash', version: undefined } + * + * @example + * ```typescript + * parsePackageSpec('lodash@4.17.21') + * // { name: 'lodash', version: '4.17.21' } + * + * parsePackageSpec('@scope/pkg') + * // { name: '@scope/pkg', version: undefined } + * ``` + */ +export declare function parsePackageSpec(spec: string): { + name: string; + version: string | undefined; +}; +/** + * Resolve binary path with cross-platform wrapper support. + * On Windows, checks for .cmd, .bat, .ps1, .exe wrappers in order. + * On Unix, uses path directly. + * + * Aligns with npm/npx binary resolution strategy. + * + * @example + * ```typescript + * const resolved = resolveBinaryPath('/tmp/.socket/_dlx/a1b2c3d4/prettier') + * // On Windows: may resolve to '.cmd' or '.ps1' wrapper + * // On Unix: returns the path unchanged + * ``` + */ +export declare function resolveBinaryPath(basePath: string): string; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/package.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/package.js new file mode 100644 index 00000000..aaf4f3d8 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/package.js @@ -0,0 +1,429 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var package_exports = {}; +__export(package_exports, { + dlxPackage: () => dlxPackage, + downloadPackage: () => downloadPackage, + ensurePackageInstalled: () => ensurePackageInstalled, + executePackage: () => executePackage, + findBinaryPath: () => findBinaryPath, + makePackageBinsExecutable: () => makePackageBinsExecutable, + npmPurl: () => npmPurl, + parsePackageSpec: () => parsePackageSpec, + resolveBinaryPath: () => resolveBinaryPath +}); +module.exports = __toCommonJS(package_exports); +var import_platform = require("../constants/platform"); +var import_socket = require("../constants/socket"); +var import_cache = require("./cache"); +var import_arborist = __toESM(require("../external/@npmcli/arborist")); +var import_libnpmexec = __toESM(require("../external/libnpmexec")); +var import_npm_package_arg = __toESM(require("../external/npm-package-arg")); +var import_fs = require("../fs"); +var import_http_request = require("../http-request"); +var import_normalize = require("../paths/normalize"); +var import_socket2 = require("../paths/socket"); +var import_process_lock = require("../process-lock"); +var import_spawn = require("../spawn"); +let _fs; +// @__NO_SIDE_EFFECTS__ +function getFs() { + if (_fs === void 0) { + _fs = require("fs"); + } + return _fs; +} +let _path; +// @__NO_SIDE_EFFECTS__ +function getPath() { + if (_path === void 0) { + _path = require("path"); + } + return _path; +} +const rangeOperatorsRegExp = /[~^><=xX* ]|\|\|/; +async function dlxPackage(args, options, spawnExtra) { + const downloadResult = await downloadPackage(options); + const spawnPromise = executePackage( + downloadResult.binaryPath, + args, + options?.spawnOptions, + spawnExtra + ); + return { + ...downloadResult, + spawnPromise + }; +} +async function downloadPackage(options) { + const { + binaryName, + force: userForce, + package: packageSpec, + yes + } = { + __proto__: null, + ...options + }; + const { name: packageName, version: packageVersion } = parsePackageSpec(packageSpec); + const isVersionRange = packageVersion !== void 0 && rangeOperatorsRegExp.test(packageVersion); + const force = userForce !== void 0 ? userForce : yes === true ? true : isVersionRange; + const fullPackageSpec = packageVersion ? `${packageName}@${packageVersion}` : packageName; + const { installed, packageDir } = await ensurePackageInstalled( + packageName, + fullPackageSpec, + force + ); + const binaryPath = findBinaryPath(packageDir, packageName, binaryName); + makePackageBinsExecutable(packageDir, packageName); + return { + binaryPath, + installed, + packageDir + }; +} +async function ensurePackageInstalled(packageName, packageSpec, force) { + const fs = /* @__PURE__ */ getFs(); + const path = /* @__PURE__ */ getPath(); + const cacheKey = (0, import_cache.generateCacheKey)(packageSpec); + const packageDir = (0, import_normalize.normalizePath)(path.join((0, import_socket2.getSocketDlxDir)(), cacheKey)); + const installedDir = (0, import_normalize.normalizePath)( + path.join(packageDir, "node_modules", packageName) + ); + try { + await (0, import_fs.safeMkdir)(packageDir); + } catch (e) { + const code = e.code; + if (code === "EACCES" || code === "EPERM") { + throw new Error( + `Permission denied creating package directory: ${packageDir} +Please check directory permissions or run with appropriate access.`, + { cause: e } + ); + } + if (code === "EROFS") { + throw new Error( + `Cannot create package directory on read-only filesystem: ${packageDir} +Ensure the filesystem is writable or set SOCKET_DLX_DIR to a writable location.`, + { cause: e } + ); + } + throw new Error(`Failed to create package directory: ${packageDir}`, { + cause: e + }); + } + const lockPath = path.join(packageDir, "concurrency.lock"); + return await import_process_lock.processLock.withLock( + lockPath, + async () => { + if (!force && fs.existsSync(installedDir)) { + const pkgJsonPath = path.join(installedDir, "package.json"); + if (fs.existsSync(pkgJsonPath)) { + return { installed: false, packageDir }; + } + } + try { + const arb = new import_arborist.default({ + path: packageDir, + // Use Socket's shared cacache directory (~/.socket/_cacache). + cache: (0, import_socket2.getSocketCacacheDir)(), + // Skip devDependencies (production-only like npx). + omit: ["dev"], + // Security: Skip install/preinstall/postinstall scripts to prevent arbitrary code execution. + ignoreScripts: true, + // Security: Enable binary links (needed for dlx to execute the package binary). + binLinks: true, + // Suppress funding messages (unneeded for ephemeral dlx installs). + fund: false, + // Skip audit (unneeded for ephemeral dlx installs). + audit: false, + // Suppress output (unneeded for ephemeral dlx installs). + silent: true + }); + await arb.buildIdealTree({ add: [packageSpec] }); + await checkFirewallPurls(arb, packageName); + await arb.reify({ save: true }); + } catch (e) { + if (e instanceof Error && e.message.startsWith("Socket Firewall blocked")) { + throw e; + } + const code = e.code; + if (code === "E404" || code === "ETARGET") { + throw new Error( + `Package not found: ${packageSpec} +Verify the package exists on npm registry and check the version. +Visit https://www.npmjs.com/package/${packageName} to see available versions.`, + { cause: e } + ); + } + if (code === "ENOTFOUND" || code === "ETIMEDOUT" || code === "EAI_AGAIN") { + throw new Error( + `Network error installing ${packageSpec} +Check your internet connection and try again.`, + { cause: e } + ); + } + throw new Error( + `Failed to install package: ${packageSpec} +Destination: ${installedDir} +Check npm registry connectivity or package name.`, + { cause: e } + ); + } + return { installed: true, packageDir }; + }, + { + // Align with npm npx locking strategy. + staleMs: 5e3, + touchIntervalMs: 2e3 + } + ); +} +function executePackage(binaryPath, args, spawnOptions, spawnExtra) { + const needsShell = import_platform.WIN32 && /\.(?:bat|cmd|ps1)$/i.test(binaryPath); + const finalOptions = needsShell ? { + ...spawnOptions, + shell: true + } : spawnOptions; + return (0, import_spawn.spawn)(binaryPath, args, finalOptions, spawnExtra); +} +function findBinaryPath(packageDir, packageName, binaryName) { + const path = /* @__PURE__ */ getPath(); + const installedDir = (0, import_normalize.normalizePath)( + path.join(packageDir, "node_modules", packageName) + ); + const pkgJsonPath = path.join(installedDir, "package.json"); + const pkgJson = (0, import_fs.readJsonSync)(pkgJsonPath); + const bin = pkgJson["bin"]; + let binName; + let binPath; + if (typeof bin === "string") { + binPath = bin; + } else if (typeof bin === "object" && bin !== null) { + const binObj = bin; + const binKeys = Object.keys(binObj); + if (binKeys.length === 1) { + binName = binKeys[0]; + binPath = binObj[binName]; + } else { + try { + const { getBinFromManifest } = import_libnpmexec.default; + binName = getBinFromManifest({ + name: packageName, + bin: binObj, + _id: `${packageName}@${pkgJson.version || "unknown"}` + }); + binPath = binObj[binName]; + } catch { + const lastSegment = packageName.split("/").pop() ?? packageName; + const candidates = [ + binaryName, + lastSegment, + packageName.replace(/^@[^/]+\//, "") + ].filter(Boolean); + for (const candidate of candidates) { + if (candidate && binObj[candidate]) { + binName = candidate; + binPath = binObj[candidate]; + break; + } + } + if (!binPath && binKeys.length > 0) { + binName = binKeys[0]; + binPath = binObj[binName]; + } + } + } + } + if (!binPath) { + throw new Error(`No binary found for package "${packageName}"`); + } + const rawPath = (0, import_normalize.normalizePath)(path.join(installedDir, binPath)); + return resolveBinaryPath(rawPath); +} +function makePackageBinsExecutable(packageDir, packageName) { + if (import_platform.WIN32) { + return; + } + const fs = /* @__PURE__ */ getFs(); + const path = /* @__PURE__ */ getPath(); + const installedDir = (0, import_normalize.normalizePath)( + path.join(packageDir, "node_modules", packageName) + ); + const pkgJsonPath = path.join(installedDir, "package.json"); + try { + const pkgJson = (0, import_fs.readJsonSync)(pkgJsonPath); + const bin = pkgJson["bin"]; + if (!bin) { + return; + } + const binPaths = []; + if (typeof bin === "string") { + binPaths.push(bin); + } else if (typeof bin === "object" && bin !== null) { + const binObj = bin; + binPaths.push(...Object.values(binObj)); + } + for (const binPath of binPaths) { + const fullPath = (0, import_normalize.normalizePath)(path.join(installedDir, binPath)); + if (fs.existsSync(fullPath)) { + try { + fs.chmodSync(fullPath, 493); + } catch { + } + } + } + } catch { + } +} +const FIREWALL_API_URL = "https://firewall-api.socket.dev/purl"; +const FIREWALL_TIMEOUT = 1e4; +const FIREWALL_BLOCK_SEVERITIES = /* @__PURE__ */ new Set([ + "critical", + "high" +]); +function npmPurl(name, version) { + const encoded = name.startsWith("@") ? `%40${name.slice(1)}` : name; + const encodedVersion = version.replace(/\+/g, "%2B"); + return `pkg:npm/${encoded}@${encodedVersion}`; +} +async function checkFirewallPurls(arb, requestedPackage) { + const idealTree = arb.idealTree; + if (!idealTree) { + return; + } + const purls = []; + for (const node of idealTree.inventory.values()) { + if (node.isProjectRoot) { + continue; + } + const { name, version } = node.package; + if (!name || !version) { + continue; + } + purls.push({ purl: npmPurl(name, version), name, version }); + } + if (purls.length === 0) { + return; + } + const blocked = []; + await Promise.allSettled( + purls.map(async ({ name, purl, version }) => { + try { + const data = await (0, import_http_request.httpJson)( + `${FIREWALL_API_URL}/${encodeURIComponent(purl)}`, + { + headers: { "User-Agent": import_socket.SOCKET_LIB_USER_AGENT }, + timeout: FIREWALL_TIMEOUT, + retries: 1, + retryDelay: 500 + } + ); + const blocking = (data.alerts ?? []).filter( + (a) => a.severity && FIREWALL_BLOCK_SEVERITIES.has(a.severity) + ); + if (blocking.length > 0) { + blocked.push({ + name, + version, + alerts: blocking.map( + (a) => `${a.severity}: ${a.type ?? a.key ?? "unknown"}` + ) + }); + } + } catch { + } + }) + ); + if (blocked.length > 0) { + const details = blocked.map((b) => ` ${b.name}@${b.version}: ${b.alerts.join(", ")}`).join("\n"); + throw new Error( + `Socket Firewall blocked installation of "${requestedPackage}". +The following dependencies have security alerts: +${details} + +Visit https://socket.dev for more information.` + ); + } +} +function parsePackageSpec(spec) { + try { + const parsed = (0, import_npm_package_arg.default)(spec); + const version = parsed.type === "tag" ? parsed.fetchSpec : parsed.type === "version" || parsed.type === "range" ? parsed.fetchSpec : void 0; + return { + name: parsed.name || spec, + version + }; + } catch { + const atIndex = spec.lastIndexOf("@"); + if (atIndex === -1 || atIndex === 0) { + return { name: spec, version: void 0 }; + } + return { + name: spec.slice(0, atIndex), + version: spec.slice(atIndex + 1) + }; + } +} +const binaryPathCache = /* @__PURE__ */ new Map(); +function resolveBinaryPath(basePath) { + if (!import_platform.WIN32) { + return basePath; + } + const fs = /* @__PURE__ */ getFs(); + const cached = binaryPathCache.get(basePath); + if (cached) { + if (fs.existsSync(cached)) { + return cached; + } + binaryPathCache.delete(basePath); + } + const extensions = [".cmd", ".bat", ".ps1", ".exe", ""]; + for (const ext of extensions) { + const testPath = basePath + ext; + if (fs.existsSync(testPath)) { + binaryPathCache.set(basePath, testPath); + return testPath; + } + } + return basePath; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + dlxPackage, + downloadPackage, + ensurePackageInstalled, + executePackage, + findBinaryPath, + makePackageBinsExecutable, + npmPurl, + parsePackageSpec, + resolveBinaryPath +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/packages.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/packages.d.ts new file mode 100644 index 00000000..626e9b0d --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/packages.d.ts @@ -0,0 +1,60 @@ +/** + * Check if a package is installed in DLX. + * + * @example + * ```typescript + * if (isDlxPackageInstalled('prettier')) { + * console.log('prettier is installed') + * } + * ``` + */ +export declare function isDlxPackageInstalled(packageName: string): boolean; +/** + * Check if a package is installed in DLX asynchronously. + * + * @example + * ```typescript + * if (await isDlxPackageInstalledAsync('prettier')) { + * console.log('prettier is installed') + * } + * ``` + */ +export declare function isDlxPackageInstalledAsync(packageName: string): Promise; +/** + * List all packages installed in DLX. + * + * @example + * ```typescript + * const packages = listDlxPackages() + * console.log('Installed:', packages.join(', ')) + * ``` + */ +export declare function listDlxPackages(): string[]; +/** + * List all packages installed in DLX asynchronously. + * + * @example + * ```typescript + * const packages = await listDlxPackagesAsync() + * console.log('Installed:', packages.join(', ')) + * ``` + */ +export declare function listDlxPackagesAsync(): Promise; +/** + * Remove a DLX package installation. + * + * @example + * ```typescript + * await removeDlxPackage('prettier') + * ``` + */ +export declare function removeDlxPackage(packageName: string): Promise; +/** + * Remove a DLX package installation synchronously. + * + * @example + * ```typescript + * removeDlxPackageSync('prettier') + * ``` + */ +export declare function removeDlxPackageSync(packageName: string): void; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/packages.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/packages.js new file mode 100644 index 00000000..6f053d14 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/packages.js @@ -0,0 +1,125 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var packages_exports = {}; +__export(packages_exports, { + isDlxPackageInstalled: () => isDlxPackageInstalled, + isDlxPackageInstalledAsync: () => isDlxPackageInstalledAsync, + listDlxPackages: () => listDlxPackages, + listDlxPackagesAsync: () => listDlxPackagesAsync, + removeDlxPackage: () => removeDlxPackage, + removeDlxPackageSync: () => removeDlxPackageSync +}); +module.exports = __toCommonJS(packages_exports); +var import_fs = require("../fs"); +var import_socket = require("../paths/socket"); +var import_paths = require("./paths"); +let _fs; +// @__NO_SIDE_EFFECTS__ +function getFs() { + if (_fs === void 0) { + _fs = require("fs"); + } + return _fs; +} +function isDlxPackageInstalled(packageName) { + const fs = /* @__PURE__ */ getFs(); + return fs.existsSync((0, import_paths.getDlxInstalledPackageDir)(packageName)); +} +async function isDlxPackageInstalledAsync(packageName) { + const fs = /* @__PURE__ */ getFs(); + try { + await fs.promises.access((0, import_paths.getDlxInstalledPackageDir)(packageName)); + return true; + } catch { + return false; + } +} +function listDlxPackages() { + try { + return (0, import_fs.readDirNamesSync)((0, import_socket.getSocketDlxDir)(), { sort: true }); + } catch { + return []; + } +} +async function listDlxPackagesAsync() { + const fs = /* @__PURE__ */ getFs(); + try { + const entries = await fs.promises.readdir((0, import_socket.getSocketDlxDir)(), { + withFileTypes: true + }); + return entries.filter((e) => e.isDirectory()).map((e) => e.name).sort(); + } catch { + return []; + } +} +async function removeDlxPackage(packageName) { + const packageDir = (0, import_paths.getDlxPackageDir)(packageName); + try { + await (0, import_fs.safeDelete)(packageDir, { recursive: true, force: true }); + } catch (e) { + throw new Error(`Failed to remove DLX package "${packageName}"`, { + cause: e + }); + } +} +function removeDlxPackageSync(packageName) { + const fs = /* @__PURE__ */ getFs(); + const packageDir = (0, import_paths.getDlxPackageDir)(packageName); + try { + fs.rmSync(packageDir, { recursive: true, force: true }); + } catch (e) { + const code = e.code; + if (code === "EACCES" || code === "EPERM") { + throw new Error( + `Permission denied removing DLX package "${packageName}" +Directory: ${packageDir} +To resolve: + 1. Check file/directory permissions + 2. Close any programs using files in this directory + 3. Try running with elevated privileges if necessary + 4. Manually remove: rm -rf "${packageDir}"`, + { cause: e } + ); + } + if (code === "EROFS") { + throw new Error( + `Cannot remove DLX package "${packageName}" from read-only filesystem +Directory: ${packageDir} +The filesystem is mounted read-only.`, + { cause: e } + ); + } + throw new Error( + `Failed to remove DLX package "${packageName}" +Directory: ${packageDir} +Check permissions and ensure no programs are using this directory.`, + { cause: e } + ); + } +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + isDlxPackageInstalled, + isDlxPackageInstalledAsync, + listDlxPackages, + listDlxPackagesAsync, + removeDlxPackage, + removeDlxPackageSync +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/paths.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/paths.d.ts new file mode 100644 index 00000000..3bc8263a --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/paths.d.ts @@ -0,0 +1,51 @@ +/** + * Get the installed package directory within DLX node_modules. + * + * @example + * ```typescript + * const dir = getDlxInstalledPackageDir('prettier') + * ``` + */ +export declare function getDlxInstalledPackageDir(packageName: string): string; +/** + * Get the DLX installation directory for a specific package. + * + * @example + * ```typescript + * const dir = getDlxPackageDir('a1b2c3d4') + * ``` + */ +export declare function getDlxPackageDir(packageName: string): string; +/** + * Get the package.json path for a DLX installed package. + * + * @example + * ```typescript + * const jsonPath = getDlxPackageJsonPath('prettier') + * ``` + */ +export declare function getDlxPackageJsonPath(packageName: string): string; +/** + * Get the node_modules directory for a DLX package installation. + * + * @example + * ```typescript + * const nmDir = getDlxPackageNodeModulesDir('a1b2c3d4') + * ``` + */ +export declare function getDlxPackageNodeModulesDir(packageName: string): string; +/** + * Check if a file path is within the Socket DLX directory. + * This is useful for determining if a binary or file is managed by Socket's DLX system. + * + * @param filePath - Absolute or relative path to check + * @returns true if the path is within ~/.socket/_dlx/, false otherwise + * + * @example + * ```typescript + * isInSocketDlx('/home/user/.socket/_dlx/abc123/bin/socket') // true + * isInSocketDlx('/usr/local/bin/socket') // false + * isInSocketDlx(process.argv[0]) // Check if current binary is in DLX + * ``` + */ +export declare function isInSocketDlx(filePath: string): boolean; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/paths.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/paths.js new file mode 100644 index 00000000..4f702063 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/dlx/paths.js @@ -0,0 +1,75 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var paths_exports = {}; +__export(paths_exports, { + getDlxInstalledPackageDir: () => getDlxInstalledPackageDir, + getDlxPackageDir: () => getDlxPackageDir, + getDlxPackageJsonPath: () => getDlxPackageJsonPath, + getDlxPackageNodeModulesDir: () => getDlxPackageNodeModulesDir, + isInSocketDlx: () => isInSocketDlx +}); +module.exports = __toCommonJS(paths_exports); +var import_normalize = require("../paths/normalize"); +var import_socket = require("../paths/socket"); +let _path; +// @__NO_SIDE_EFFECTS__ +function getPath() { + if (_path === void 0) { + _path = require("path"); + } + return _path; +} +function getDlxInstalledPackageDir(packageName) { + const path = /* @__PURE__ */ getPath(); + return (0, import_normalize.normalizePath)( + path.join(getDlxPackageNodeModulesDir(packageName), packageName) + ); +} +function getDlxPackageDir(packageName) { + const path = /* @__PURE__ */ getPath(); + return (0, import_normalize.normalizePath)(path.join((0, import_socket.getSocketDlxDir)(), packageName)); +} +function getDlxPackageJsonPath(packageName) { + const path = /* @__PURE__ */ getPath(); + return (0, import_normalize.normalizePath)( + path.join(getDlxInstalledPackageDir(packageName), "package.json") + ); +} +function getDlxPackageNodeModulesDir(packageName) { + const path = /* @__PURE__ */ getPath(); + return (0, import_normalize.normalizePath)(path.join(getDlxPackageDir(packageName), "node_modules")); +} +function isInSocketDlx(filePath) { + if (!filePath) { + return false; + } + const path = /* @__PURE__ */ getPath(); + const dlxDir = (0, import_normalize.normalizePath)((0, import_socket.getSocketDlxDir)()); + const absolutePath = (0, import_normalize.normalizePath)(path.resolve(filePath)); + return absolutePath.startsWith(`${dlxDir}/`); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getDlxInstalledPackageDir, + getDlxPackageDir, + getDlxPackageJsonPath, + getDlxPackageNodeModulesDir, + isInSocketDlx +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/pulse-frames.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/pulse-frames.d.ts new file mode 100644 index 00000000..a71e4d58 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/pulse-frames.d.ts @@ -0,0 +1,36 @@ +/** + * @fileoverview Socket pulse animation frames generator. + * Generates themeable pulsing animation frames using sparkles (✧ ✦) and lightning (⚡). + * Follows the cli-spinners format: https://github.com/sindresorhus/cli-spinners + */ +export type SocketFramesOptions = { + readonly baseColor?: readonly [number, number, number] | undefined; + readonly interval?: number | undefined; + /** + * Theme to use for pulse colors. + * Can be a theme name ('socket', 'sunset', etc.) or a Theme object. + * Note: Currently frames only contain brightness modifiers. + * Colors are applied by yocto-spinner based on spinner.color. + */ + readonly theme?: import('../themes/types').Theme | import('../themes/themes').ThemeName | undefined; +}; +/** + * Generate Socket pulse animation frames. + * Creates a pulsing throbber using Unicode sparkles and lightning symbols. + * Frames use brightness modifiers (bold/dim) but no embedded colors. + * Yocto-spinner applies the current spinner color to each frame. + * + * Returns a spinner definition compatible with cli-spinners format. + * + * @see https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json + * + * @example + * ```typescript + * const { frames, interval } = generateSocketSpinnerFrames() + * console.log(frames.length, interval) // 18 50 + * ``` + */ +export declare function generateSocketSpinnerFrames(options?: SocketFramesOptions | undefined): { + frames: string[]; + interval: number; +}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/pulse-frames.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/pulse-frames.js new file mode 100644 index 00000000..bc92866f --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/pulse-frames.js @@ -0,0 +1,66 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var pulse_frames_exports = {}; +__export(pulse_frames_exports, { + generateSocketSpinnerFrames: () => generateSocketSpinnerFrames +}); +module.exports = __toCommonJS(pulse_frames_exports); +function generateSocketSpinnerFrames(options) { + const opts = { __proto__: null, ...options }; + const interval = opts.interval ?? 50; + const bold = "\x1B[1m"; + const dim = "\x1B[2m"; + const reset = "\x1B[0m"; + const lightning = "\u26A1\uFE0E"; + const starFilled = "\u2726\uFE0E "; + const starOutline = "\u2727\uFE0E "; + const starTiny = "\u22C6\uFE0E "; + const frames = [ + // Build up from dim to bright + `${dim}${starOutline}${reset}`, + `${dim}${starOutline}${reset}`, + `${dim}${starTiny}${reset}`, + `${starFilled}${reset}`, + `${starFilled}${reset}`, + `${bold}${starFilled}${reset}`, + `${bold}${starFilled}${reset}`, + `${bold}${lightning}${reset}`, + `${bold}${lightning}${reset}`, + `${bold}${lightning}${reset}`, + // Fade down + `${bold}${lightning}${reset}`, + `${bold}${lightning}${reset}`, + `${bold}${starFilled}${reset}`, + `${bold}${starFilled}${reset}`, + `${starFilled}${reset}`, + `${starFilled}${reset}`, + `${dim}${starTiny}${reset}`, + `${dim}${starOutline}${reset}` + ]; + return { + __proto__: null, + frames, + interval + }; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + generateSocketSpinnerFrames +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/text-shimmer.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/text-shimmer.d.ts new file mode 100644 index 00000000..cede2239 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/text-shimmer.d.ts @@ -0,0 +1,47 @@ +import type { ShimmerColorGradient, ShimmerColorRgb, ShimmerDirection, ShimmerState } from './types'; +// Re-export types for backward compatibility. +export type { ShimmerColor, ShimmerColorGradient, ShimmerColorInherit, ShimmerColorRgb, ShimmerConfig, ShimmerDirection, ShimmerState, } from './types'; +/** + * Detected text formatting styles from ANSI codes. + */ +type TextStyles = { + bold: boolean; + dim: boolean; + italic: boolean; + strikethrough: boolean; + underline: boolean; +}; +// Internal options for applyShimmer function. +type ShimmerOptions = { + readonly color?: ShimmerColorRgb | ShimmerColorGradient | undefined; + readonly direction?: ShimmerDirection | undefined; + readonly shimmerWidth?: number | undefined; + readonly styles?: TextStyles | undefined; + readonly theme?: import('../themes/types').Theme | import('../themes/themes').ThemeName | undefined; +}; +export declare const COLOR_INHERIT = "inherit"; +export declare const DIR_LTR = "ltr"; +export declare const DIR_NONE = "none"; +export declare const DIR_RANDOM = "random"; +export declare const DIR_RTL = "rtl"; +export declare const MODE_BI = "bi"; +/** + * Apply shimmer animation effect to text. + * This is the main entry point for shimmer animations. It: + * 1. Strips ANSI codes to get plain text for character positioning + * 2. Detects any styling (bold, italic, underline, etc.) to preserve + * 3. Calculates the current shimmer wave position based on animation step + * 4. Renders each character with appropriate brightness based on distance from wave + * 5. Updates the animation state for the next frame + * 6. Handles direction changes for bidirectional and random modes + * + * @example + * ```typescript + * const state = { step: 0, speed: 0.33, currentDir: 'ltr', mode: 'ltr' } + * const result = applyShimmer('Loading...', state, { + * color: [140, 82, 255], + * direction: 'ltr', + * }) + * ``` + */ +export declare function applyShimmer(text: string, state: ShimmerState, options?: ShimmerOptions | undefined): string; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/text-shimmer.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/text-shimmer.js new file mode 100644 index 00000000..105cd818 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/text-shimmer.js @@ -0,0 +1,188 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var text_shimmer_exports = {}; +__export(text_shimmer_exports, { + COLOR_INHERIT: () => COLOR_INHERIT, + DIR_LTR: () => DIR_LTR, + DIR_NONE: () => DIR_NONE, + DIR_RANDOM: () => DIR_RANDOM, + DIR_RTL: () => DIR_RTL, + MODE_BI: () => MODE_BI, + applyShimmer: () => applyShimmer +}); +module.exports = __toCommonJS(text_shimmer_exports); +var import_ansi = require("../ansi"); +var import_arrays = require("../arrays"); +var import_ci = require("../env/ci"); +var import_utils = require("../themes/utils"); +var import_themes = require("../themes/themes"); +function detectStyles(text) { + return { + __proto__: null, + // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape sequence detection. + bold: /\x1b\[1m/.test(text), + // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape sequence detection. + dim: /\x1b\[2m/.test(text), + // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape sequence detection. + italic: /\x1b\[3m/.test(text), + // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape sequence detection. + strikethrough: /\x1b\[9m/.test(text), + // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape sequence detection. + underline: /\x1b\[4m/.test(text) + }; +} +function stylesToAnsi(styles) { + let codes = ""; + if (styles.bold) { + codes += "\x1B[1m"; + } + if (styles.dim) { + codes += "\x1B[2m"; + } + if (styles.italic) { + codes += "\x1B[3m"; + } + if (styles.underline) { + codes += "\x1B[4m"; + } + if (styles.strikethrough) { + codes += "\x1B[9m"; + } + return codes; +} +const COLOR_INHERIT = "inherit"; +const DIR_LTR = "ltr"; +const DIR_NONE = "none"; +const DIR_RANDOM = "random"; +const DIR_RTL = "rtl"; +const MODE_BI = "bi"; +function shimmerIntensity(distance, shimmerWidth = 2.5) { + if (distance > shimmerWidth) { + return 0; + } + const normalized = distance / shimmerWidth; + return (1 - normalized) ** 2.5; +} +function blendColors(color1, color2, factor) { + const r = Math.round(color1[0] + (color2[0] - color1[0]) * factor); + const g = Math.round(color1[1] + (color2[1] - color1[1]) * factor); + const b = Math.round(color1[2] + (color2[2] - color1[2]) * factor); + return [r, g, b]; +} +function renderChar(char, index, shimmerPos, baseColor, styles) { + const distance = Math.abs(index - shimmerPos); + const intensity = shimmerIntensity(distance); + const styleCode = stylesToAnsi(styles); + const charColor = (0, import_arrays.isArray)(baseColor[0]) ? baseColor[index % baseColor.length] ?? [ + 140, + 82, + 255 + ] : baseColor; + if (intensity === 0) { + const base = `\x1B[38;2;${charColor[0]};${charColor[1]};${charColor[2]}m`; + return `${styleCode}${base}${char}${import_ansi.ANSI_RESET}`; + } + const white = [255, 255, 255]; + const blended = blendColors(charColor, white, intensity); + const color = `\x1B[38;2;${blended[0]};${blended[1]};${blended[2]}m`; + return `${styleCode}${color}${char}${import_ansi.ANSI_RESET}`; +} +function getShimmerPos(textLength, step, currentDir, shimmerWidth = 2.5) { + const totalSteps = textLength + shimmerWidth + 2; + if (currentDir === DIR_RTL) { + return textLength - step % totalSteps; + } + return step % totalSteps; +} +function pickDirection(direction) { + if (direction === DIR_RANDOM) { + return Math.random() < 0.5 ? DIR_LTR : DIR_RTL; + } + if (direction === DIR_RTL) { + return DIR_RTL; + } + return DIR_LTR; +} +function applyShimmer(text, state, options) { + const opts = { __proto__: null, ...options }; + const direction = opts.direction ?? DIR_NONE; + const shimmerWidth = opts.shimmerWidth ?? 2.5; + let color; + if (opts.theme) { + const theme = typeof opts.theme === "string" ? import_themes.THEMES[opts.theme] : opts.theme; + const themeColor = (0, import_utils.resolveColor)( + theme.colors.primary, + theme.colors + ); + color = typeof themeColor === "string" ? [140, 82, 255] : themeColor; + } else { + color = opts.color ?? [140, 82, 255]; + } + const styles = opts.styles ?? detectStyles(text); + const plainText = (0, import_ansi.stripAnsi)(text); + if ((0, import_ci.getCI)() || !plainText || direction === DIR_NONE) { + const styleCode = stylesToAnsi(styles); + const isGradient = (0, import_arrays.isArray)(color[0]); + return plainText.split("").map((char, i) => { + const charColor = isGradient ? color[i % color.length] ?? [ + 140, + 82, + 255 + ] : color; + const base = `\x1B[38;2;${charColor[0]};${charColor[1]};${charColor[2]}m`; + return `${styleCode}${base}${char}${import_ansi.ANSI_RESET}`; + }).join(""); + } + const shimmerPos = getShimmerPos( + plainText.length, + state.step, + state.currentDir, + shimmerWidth + ); + const result = plainText.split("").map((char, i) => renderChar(char, i, shimmerPos, color, styles)).join(""); + state.step += state.speed; + const totalSteps = plainText.length + shimmerWidth + 2; + if (state.mode === MODE_BI) { + if (state.step >= totalSteps) { + state.step = 0; + state.currentDir = state.currentDir === DIR_LTR ? DIR_RTL : DIR_LTR; + } + } else if (state.mode === DIR_RANDOM) { + if (state.step >= totalSteps) { + state.step = 0; + state.currentDir = pickDirection(DIR_RANDOM); + } + } else { + if (state.step >= totalSteps) { + state.step = 0; + } + } + return result; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + COLOR_INHERIT, + DIR_LTR, + DIR_NONE, + DIR_RANDOM, + DIR_RTL, + MODE_BI, + applyShimmer +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/types.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/types.d.ts new file mode 100644 index 00000000..8f54375f --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/types.d.ts @@ -0,0 +1,47 @@ +/** + * @fileoverview Shared types for effects (shimmer, pulse, ultra, etc.). + * Common type definitions used across multiple effect modules. + */ +export type ShimmerColorInherit = 'inherit'; +export type ShimmerColorRgb = readonly [number, number, number]; +export type ShimmerColor = ShimmerColorInherit | ShimmerColorRgb; +export type ShimmerColorGradient = readonly ShimmerColorRgb[]; +export type ShimmerDirection = 'ltr' | 'rtl' | 'bi' | 'random' | 'none'; +/** + * Shimmer animation configuration. + */ +export type ShimmerConfig = { + readonly color?: ShimmerColor | ShimmerColorGradient | undefined; + readonly dir?: ShimmerDirection | undefined; + /** + * Animation speed in steps per frame. + * Lower values = slower shimmer (e.g., 0.33 = ~150ms per step). + * Higher values = faster shimmer (e.g., 1.0 = 50ms per step). + * Default: 1/3 (~0.33). + */ + readonly speed?: number | undefined; + /** + * Theme to use for shimmer colors. + * Can be a theme name ('socket', 'sunset', etc.) or a Theme object. + * If provided, overrides the color option. + */ + readonly theme?: import('../themes/types').Theme | import('../themes/themes').ThemeName | undefined; +}; +/** + * Internal shimmer animation state. + * Tracks current animation position and direction. + */ +export type ShimmerState = { + currentDir: 'ltr' | 'rtl'; + mode: ShimmerDirection; + /** + * Animation speed in steps per frame. + * The shimmer position advances by this amount every frame. + */ + speed: number; + /** + * Current shimmer position. + * Can be fractional for smooth sub-character movement. + */ + step: number; +}; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/types.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/types.js new file mode 100644 index 00000000..4af3a3ea --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/types.js @@ -0,0 +1,17 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var types_exports = {}; +module.exports = __toCommonJS(types_exports); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/ultra.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/ultra.d.ts new file mode 100644 index 00000000..65203aca --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/ultra.d.ts @@ -0,0 +1,22 @@ +/** + * @fileoverview Ultrathink rainbow gradient effect. + * Provides rainbow gradient color generation for shimmer animations. + * "Ultrathink" is Claude's intensive thinking mode for deep analysis. + */ +import type { ShimmerColorGradient } from './types'; +/** + * Rainbow gradient colors used for ultrathink effect. + * This gradient cycles through the full color spectrum with smooth transitions. + */ +export declare const RAINBOW_GRADIENT: ShimmerColorGradient; +/** + * Generate rainbow gradient colors for any text length. + * Colors are distributed evenly across the text by cycling through the gradient. + * + * @example + * ```typescript + * const colors = generateRainbowGradient('Hello'.length) + * console.log(colors.length) // 5 + * ``` + */ +export declare function generateRainbowGradient(textLength: number): ShimmerColorGradient; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/ultra.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/ultra.js new file mode 100644 index 00000000..949b6450 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/effects/ultra.js @@ -0,0 +1,63 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var ultra_exports = {}; +__export(ultra_exports, { + RAINBOW_GRADIENT: () => RAINBOW_GRADIENT, + generateRainbowGradient: () => generateRainbowGradient +}); +module.exports = __toCommonJS(ultra_exports); +const RAINBOW_GRADIENT = [ + // Red/pink. + [255, 100, 120], + // Orange. + [255, 140, 80], + // Yellow/gold. + [255, 180, 60], + // Yellow/green. + [220, 200, 80], + // Green. + [120, 200, 100], + // Cyan/turquoise. + [80, 200, 180], + // Blue. + [80, 160, 220], + // Purple/violet. + [140, 120, 220], + // Pink/magenta. + [200, 100, 200], + // Red/pink. + [255, 100, 140] +]; +function generateRainbowGradient(textLength) { + const colors = []; + for (let i = 0; i < textLength; i += 1) { + const colorIndex = i % RAINBOW_GRADIENT.length; + const color = RAINBOW_GRADIENT[colorIndex]; + if (color) { + colors.push(color); + } + } + return colors; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + RAINBOW_GRADIENT, + generateRainbowGradient +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env.d.ts new file mode 100644 index 00000000..e95c1fd6 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env.d.ts @@ -0,0 +1,122 @@ +/** + * Create a case-insensitive environment variable Proxy for Windows compatibility. + * On Windows, environment variables are case-insensitive (PATH vs Path vs path). + * This Proxy provides consistent access regardless of case, with priority given + * to exact matches, then case-insensitive matches for known vars. + * + * **Use Cases:** + * - Cross-platform test environments needing consistent env var access + * - Windows compatibility when passing env to child processes + * - Merging environment overrides while preserving case-insensitive lookups + * + * **Performance Note:** + * Proxy operations have runtime overhead. Only use when Windows case-insensitive + * access is required. For most use cases, process.env directly is sufficient. + * + * @param base - Base environment object (usually process.env) + * @param overrides - Optional overrides to merge + * @returns Proxy that handles case-insensitive env var access + * + * @example + * // Create a Proxy with overrides + * const env = createEnvProxy(process.env, { NODE_ENV: 'test' }) + * console.log(env.PATH) // Works with any case: PATH, Path, path + * console.log(env.NODE_ENV) // 'test' + * + * @example + * // Pass to child process spawn + * import { createEnvProxy } from '@socketsecurity/lib/env' + * import { spawn } from '@socketsecurity/lib/spawn' + * + * spawn('node', ['script.js'], { + * env: createEnvProxy(process.env, { NODE_ENV: 'test' }) + * }) + */ +export declare function createEnvProxy(base: NodeJS.ProcessEnv, overrides?: Record): NodeJS.ProcessEnv; +/** + * Convert an environment variable value to a boolean. + * + * @param value - The value to convert + * @param defaultValue - Default when value is null/undefined (default: `false`) + * @returns `true` if value is '1' or 'true' (case-insensitive), `false` otherwise + * + * @example + * ```typescript + * import { envAsBoolean } from '@socketsecurity/lib/env' + * + * envAsBoolean('true') // true + * envAsBoolean('1') // true + * envAsBoolean('false') // false + * envAsBoolean(undefined) // false + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function envAsBoolean(value: unknown, defaultValue?: boolean): boolean; +/** + * Convert an environment variable value to a number. + * + * @param value - The value to convert + * @param defaultValue - Default when value is not a finite number (default: `0`) + * @returns The parsed integer, or the default value if parsing fails + * + * @example + * ```typescript + * import { envAsNumber } from '@socketsecurity/lib/env' + * + * envAsNumber('3000') // 3000 + * envAsNumber('abc') // 0 + * envAsNumber(undefined) // 0 + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function envAsNumber(value: unknown, defaultValue?: number): number; +/** + * Convert an environment variable value to a trimmed string. + * + * @param value - The value to convert + * @param defaultValue - Default when value is null/undefined (default: `''`) + * @returns The trimmed string value, or the default value + * + * @example + * ```typescript + * import { envAsString } from '@socketsecurity/lib/env' + * + * envAsString(' hello ') // 'hello' + * envAsString(undefined) // '' + * envAsString(null, 'n/a') // 'n/a' + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function envAsString(value: unknown, defaultValue?: string): string; +/** + * Find a case-insensitive environment variable key match. + * Searches for an environment variable key that matches the given uppercase name, + * using optimized fast-path checks to minimize expensive toUpperCase() calls. + * + * **Use Cases:** + * - Finding PATH when env object has "Path" or "path" + * - Cross-platform env var access where case may vary + * - Custom case-insensitive env lookups + * + * **Performance:** + * - Fast path: Checks length first (O(1)) before toUpperCase (expensive) + * - Only converts to uppercase when length matches + * - Early exit on first match + * + * @param env - Environment object or env-like record to search + * @param upperEnvVarName - Uppercase environment variable name to find (e.g., 'PATH') + * @returns The actual key from env that matches (e.g., 'Path'), or undefined + * + * @example + * // Find PATH regardless of case + * const envObj = { Path: 'C:\\Windows', NODE_ENV: 'test' } + * const key = findCaseInsensitiveEnvKey(envObj, 'PATH') + * console.log(key) // 'Path' + * console.log(envObj[key]) // 'C:\\Windows' + * + * @example + * // Not found returns undefined + * const key = findCaseInsensitiveEnvKey({}, 'MISSING') + * console.log(key) // undefined + */ +export declare function findCaseInsensitiveEnvKey(env: Record, upperEnvVarName: string): string | undefined; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env.js new file mode 100644 index 00000000..3d34356d --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env.js @@ -0,0 +1,172 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var env_exports = {}; +__export(env_exports, { + createEnvProxy: () => createEnvProxy, + envAsBoolean: () => envAsBoolean, + envAsNumber: () => envAsNumber, + envAsString: () => envAsString, + findCaseInsensitiveEnvKey: () => findCaseInsensitiveEnvKey +}); +module.exports = __toCommonJS(env_exports); +const NumberCtor = Number; +const NumberIsFinite = Number.isFinite; +const NumberParseInt = Number.parseInt; +const StringCtor = String; +const caseInsensitiveKeys = /* @__PURE__ */ new Set([ + "APPDATA", + "COMSPEC", + "HOME", + "LOCALAPPDATA", + "PATH", + "PATHEXT", + "PROGRAMFILES", + "SYSTEMROOT", + "TEMP", + "TMP", + "USERPROFILE", + "WINDIR" +]); +function createEnvProxy(base, overrides) { + return new Proxy( + {}, + { + get(_target, prop) { + if (typeof prop !== "string") { + return void 0; + } + if (overrides && prop in overrides) { + return overrides[prop]; + } + if (prop in base) { + return base[prop]; + } + const upperProp = prop.toUpperCase(); + if (caseInsensitiveKeys.has(upperProp)) { + if (overrides) { + const key2 = findCaseInsensitiveEnvKey(overrides, upperProp); + if (key2 !== void 0) { + return overrides[key2]; + } + } + const key = findCaseInsensitiveEnvKey(base, upperProp); + if (key !== void 0) { + return base[key]; + } + } + return void 0; + }, + ownKeys(_target) { + const keys = /* @__PURE__ */ new Set([ + ...Object.keys(base), + ...overrides ? Object.keys(overrides) : [] + ]); + return [...keys]; + }, + getOwnPropertyDescriptor(_target, prop) { + if (typeof prop !== "string") { + return void 0; + } + const value = this.get?.(_target, prop, _target); + return value !== void 0 ? { + enumerable: true, + configurable: true, + writable: true, + value + } : void 0; + }, + has(_target, prop) { + if (typeof prop !== "string") { + return false; + } + if (overrides && prop in overrides) { + return true; + } + if (prop in base) { + return true; + } + const upperProp = prop.toUpperCase(); + if (caseInsensitiveKeys.has(upperProp)) { + if (overrides && findCaseInsensitiveEnvKey(overrides, upperProp) !== void 0) { + return true; + } + if (findCaseInsensitiveEnvKey(base, upperProp) !== void 0) { + return true; + } + } + return false; + }, + set(_target, prop, value) { + if (typeof prop === "string" && overrides) { + overrides[prop] = value; + return true; + } + return false; + } + } + ); +} +// @__NO_SIDE_EFFECTS__ +function envAsBoolean(value, defaultValue = false) { + if (typeof value === "string") { + const trimmed = value.trim(); + return trimmed === "1" || trimmed.toLowerCase() === "true"; + } + if (value === null || value === void 0) { + return !!defaultValue; + } + return !!value; +} +// @__NO_SIDE_EFFECTS__ +function envAsNumber(value, defaultValue = 0) { + const numOrNaN = NumberParseInt(String(value), 10); + const numMayBeNegZero = NumberIsFinite(numOrNaN) ? numOrNaN : NumberCtor(defaultValue); + return numMayBeNegZero || 0; +} +// @__NO_SIDE_EFFECTS__ +function envAsString(value, defaultValue = "") { + if (typeof value === "string") { + return value.trim(); + } + if (value === null || value === void 0) { + return defaultValue === "" ? defaultValue : StringCtor(defaultValue).trim(); + } + return StringCtor(value).trim(); +} +function findCaseInsensitiveEnvKey(env, upperEnvVarName) { + const targetLength = upperEnvVarName.length; + for (const key of Object.keys(env)) { + if (key.length !== targetLength) { + continue; + } + if (key.toUpperCase() === upperEnvVarName) { + return key; + } + } + return void 0; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + createEnvProxy, + envAsBoolean, + envAsNumber, + envAsString, + findCaseInsensitiveEnvKey +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/ci.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/ci.d.ts new file mode 100644 index 00000000..420a7041 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/ci.d.ts @@ -0,0 +1,16 @@ +/** + * Returns whether the CI environment variable is set. + * + * @returns `true` if running in a CI environment, `false` otherwise + * + * @example + * ```typescript + * import { getCI } from '@socketsecurity/lib/env/ci' + * + * if (getCI()) { + * console.log('Running in CI') + * } + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getCI(): boolean; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/ci.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/ci.js new file mode 100644 index 00000000..fb9b1b87 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/ci.js @@ -0,0 +1,33 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var ci_exports = {}; +__export(ci_exports, { + getCI: () => getCI +}); +module.exports = __toCommonJS(ci_exports); +var import_rewire = require("./rewire"); +// @__NO_SIDE_EFFECTS__ +function getCI() { + return (0, import_rewire.isInEnv)("CI"); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getCI +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/debug.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/debug.d.ts new file mode 100644 index 00000000..4c25f58f --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/debug.d.ts @@ -0,0 +1,15 @@ +/** + * Returns the value of the DEBUG environment variable. + * + * @returns The debug filter string, or `undefined` if not set + * + * @example + * ```typescript + * import { getDebug } from '@socketsecurity/lib/env/debug' + * + * const debug = getDebug() + * // e.g. 'socket:*' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getDebug(): string | undefined; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/debug.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/debug.js new file mode 100644 index 00000000..3908c943 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/debug.js @@ -0,0 +1,33 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var debug_exports = {}; +__export(debug_exports, { + getDebug: () => getDebug +}); +module.exports = __toCommonJS(debug_exports); +var import_rewire = require("./rewire"); +// @__NO_SIDE_EFFECTS__ +function getDebug() { + return (0, import_rewire.getEnvValue)("DEBUG"); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getDebug +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/github.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/github.d.ts new file mode 100644 index 00000000..29ce1577 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/github.d.ts @@ -0,0 +1,128 @@ +/** + * GITHUB_API_URL environment variable. + * GitHub API URL (e.g., https://api.github.com). + * + * @returns The GitHub API URL, or `undefined` if not set + * + * @example + * ```typescript + * import { getGithubApiUrl } from '@socketsecurity/lib/env/github' + * + * const apiUrl = getGithubApiUrl() + * // e.g. 'https://api.github.com' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getGithubApiUrl(): string | undefined; +/** + * GITHUB_BASE_REF environment variable. + * GitHub pull request base branch. + * + * @returns The pull request base branch name, or `undefined` if not set + * + * @example + * ```typescript + * import { getGithubBaseRef } from '@socketsecurity/lib/env/github' + * + * const baseRef = getGithubBaseRef() + * // e.g. 'main' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getGithubBaseRef(): string | undefined; +/** + * GITHUB_REF_NAME environment variable. + * GitHub branch or tag name. + * + * @returns The branch or tag name, or `undefined` if not set + * + * @example + * ```typescript + * import { getGithubRefName } from '@socketsecurity/lib/env/github' + * + * const refName = getGithubRefName() + * // e.g. 'feature/my-branch' or 'v1.0.0' + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getGithubRefName(): string | undefined; +/** + * GITHUB_REF_TYPE environment variable. + * GitHub ref type (branch or tag). + * + * @returns The ref type ('branch' or 'tag'), or `undefined` if not set + * + * @example + * ```typescript + * import { getGithubRefType } from '@socketsecurity/lib/env/github' + * + * const refType = getGithubRefType() + * // e.g. 'branch' or 'tag' + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getGithubRefType(): string | undefined; +/** + * GITHUB_REPOSITORY environment variable. + * GitHub repository name in owner/repo format. + * + * @returns The repository name, or `undefined` if not set + * + * @example + * ```typescript + * import { getGithubRepository } from '@socketsecurity/lib/env/github' + * + * const repo = getGithubRepository() + * // e.g. 'SocketDev/socket-cli' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getGithubRepository(): string | undefined; +/** + * GITHUB_SERVER_URL environment variable. + * GitHub server URL (e.g., https://github.com). + * + * @returns The GitHub server URL, or `undefined` if not set + * + * @example + * ```typescript + * import { getGithubServerUrl } from '@socketsecurity/lib/env/github' + * + * const serverUrl = getGithubServerUrl() + * // e.g. 'https://github.com' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getGithubServerUrl(): string | undefined; +/** + * GITHUB_TOKEN environment variable. + * GitHub authentication token for API access. + * + * @returns The GitHub token, or `undefined` if not set + * + * @example + * ```typescript + * import { getGithubToken } from '@socketsecurity/lib/env/github' + * + * const token = getGithubToken() + * // e.g. 'ghp_abc123...' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getGithubToken(): string | undefined; +/** + * GH_TOKEN environment variable. + * Alternative GitHub authentication token for API access (used by GitHub CLI). + * + * @returns The GH CLI token, or `undefined` if not set + * + * @example + * ```typescript + * import { getGhToken } from '@socketsecurity/lib/env/github' + * + * const token = getGhToken() + * // e.g. 'gho_abc123...' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getGhToken(): string | undefined; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/github.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/github.js new file mode 100644 index 00000000..b4843284 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/github.js @@ -0,0 +1,75 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var github_exports = {}; +__export(github_exports, { + getGhToken: () => getGhToken, + getGithubApiUrl: () => getGithubApiUrl, + getGithubBaseRef: () => getGithubBaseRef, + getGithubRefName: () => getGithubRefName, + getGithubRefType: () => getGithubRefType, + getGithubRepository: () => getGithubRepository, + getGithubServerUrl: () => getGithubServerUrl, + getGithubToken: () => getGithubToken +}); +module.exports = __toCommonJS(github_exports); +var import_rewire = require("./rewire"); +// @__NO_SIDE_EFFECTS__ +function getGithubApiUrl() { + return (0, import_rewire.getEnvValue)("GITHUB_API_URL"); +} +// @__NO_SIDE_EFFECTS__ +function getGithubBaseRef() { + return (0, import_rewire.getEnvValue)("GITHUB_BASE_REF"); +} +// @__NO_SIDE_EFFECTS__ +function getGithubRefName() { + return (0, import_rewire.getEnvValue)("GITHUB_REF_NAME"); +} +// @__NO_SIDE_EFFECTS__ +function getGithubRefType() { + return (0, import_rewire.getEnvValue)("GITHUB_REF_TYPE"); +} +// @__NO_SIDE_EFFECTS__ +function getGithubRepository() { + return (0, import_rewire.getEnvValue)("GITHUB_REPOSITORY"); +} +// @__NO_SIDE_EFFECTS__ +function getGithubServerUrl() { + return (0, import_rewire.getEnvValue)("GITHUB_SERVER_URL"); +} +// @__NO_SIDE_EFFECTS__ +function getGithubToken() { + return (0, import_rewire.getEnvValue)("GITHUB_TOKEN"); +} +// @__NO_SIDE_EFFECTS__ +function getGhToken() { + return (0, import_rewire.getEnvValue)("GH_TOKEN"); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getGhToken, + getGithubApiUrl, + getGithubBaseRef, + getGithubRefName, + getGithubRefType, + getGithubRepository, + getGithubServerUrl, + getGithubToken +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/helpers.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/helpers.d.ts new file mode 100644 index 00000000..c80e0aed --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/helpers.d.ts @@ -0,0 +1,54 @@ +/** + * @fileoverview Environment variable type conversion helpers. + */ +/** + * Convert an environment variable string to a boolean. + * + * @param value - The environment variable value to convert + * @returns `true` if value is 'true', '1', or 'yes' (case-insensitive), `false` otherwise + * + * @example + * ```typescript + * import { envAsBoolean } from '@socketsecurity/lib/env/helpers' + * + * envAsBoolean('true') // true + * envAsBoolean('1') // true + * envAsBoolean('yes') // true + * envAsBoolean(undefined) // false + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function envAsBoolean(value: string | undefined): boolean; +/** + * Convert an environment variable string to a number. + * + * @param value - The environment variable value to convert + * @returns The parsed number, or `0` if the value is undefined or not a valid number + * + * @example + * ```typescript + * import { envAsNumber } from '@socketsecurity/lib/env/helpers' + * + * envAsNumber('3000') // 3000 + * envAsNumber(undefined) // 0 + * envAsNumber('abc') // 0 + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function envAsNumber(value: string | undefined): number; +/** + * Convert an environment variable value to a string. + * + * @param value - The environment variable value to convert + * @returns The string value, or an empty string if undefined + * + * @example + * ```typescript + * import { envAsString } from '@socketsecurity/lib/env/helpers' + * + * envAsString('hello') // 'hello' + * envAsString(undefined) // '' + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function envAsString(value: string | undefined): string; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/helpers.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/helpers.js new file mode 100644 index 00000000..58c7058e --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/helpers.js @@ -0,0 +1,52 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var helpers_exports = {}; +__export(helpers_exports, { + envAsBoolean: () => envAsBoolean, + envAsNumber: () => envAsNumber, + envAsString: () => envAsString +}); +module.exports = __toCommonJS(helpers_exports); +// @__NO_SIDE_EFFECTS__ +function envAsBoolean(value) { + if (!value) { + return false; + } + const lower = value.toLowerCase(); + return lower === "true" || lower === "1" || lower === "yes"; +} +// @__NO_SIDE_EFFECTS__ +function envAsNumber(value) { + if (!value) { + return 0; + } + const num = Number(value); + return Number.isNaN(num) ? 0 : num; +} +// @__NO_SIDE_EFFECTS__ +function envAsString(value) { + return value || ""; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + envAsBoolean, + envAsNumber, + envAsString +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/home.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/home.d.ts new file mode 100644 index 00000000..1015db33 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/home.d.ts @@ -0,0 +1,15 @@ +/** + * Returns the value of the HOME environment variable. + * + * @returns The user's home directory path, or `undefined` if not set + * + * @example + * ```typescript + * import { getHome } from '@socketsecurity/lib/env/home' + * + * const home = getHome() + * // e.g. '/tmp/user' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getHome(): string | undefined; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/home.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/home.js new file mode 100644 index 00000000..50bdbdab --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/home.js @@ -0,0 +1,33 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var home_exports = {}; +__export(home_exports, { + getHome: () => getHome +}); +module.exports = __toCommonJS(home_exports); +var import_rewire = require("./rewire"); +// @__NO_SIDE_EFFECTS__ +function getHome() { + return (0, import_rewire.getEnvValue)("HOME"); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getHome +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/locale.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/locale.d.ts new file mode 100644 index 00000000..af249c69 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/locale.d.ts @@ -0,0 +1,48 @@ +/** + * LANG environment variable. + * System locale and language settings. + * + * @returns The system locale string, or `undefined` if not set + * + * @example + * ```typescript + * import { getLang } from '@socketsecurity/lib/env/locale' + * + * const lang = getLang() + * // e.g. 'en_US.UTF-8' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getLang(): string | undefined; +/** + * LC_ALL environment variable. + * Override for all locale settings. + * + * @returns The locale override string, or `undefined` if not set + * + * @example + * ```typescript + * import { getLcAll } from '@socketsecurity/lib/env/locale' + * + * const lcAll = getLcAll() + * // e.g. 'C' or 'en_US.UTF-8' + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getLcAll(): string | undefined; +/** + * LC_MESSAGES environment variable. + * Locale setting for message translations. + * + * @returns The messages locale string, or `undefined` if not set + * + * @example + * ```typescript + * import { getLcMessages } from '@socketsecurity/lib/env/locale' + * + * const lcMessages = getLcMessages() + * // e.g. 'en_US.UTF-8' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getLcMessages(): string | undefined; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/locale.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/locale.js new file mode 100644 index 00000000..de4e1728 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/locale.js @@ -0,0 +1,45 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var locale_exports = {}; +__export(locale_exports, { + getLang: () => getLang, + getLcAll: () => getLcAll, + getLcMessages: () => getLcMessages +}); +module.exports = __toCommonJS(locale_exports); +var import_rewire = require("./rewire"); +// @__NO_SIDE_EFFECTS__ +function getLang() { + return (0, import_rewire.getEnvValue)("LANG"); +} +// @__NO_SIDE_EFFECTS__ +function getLcAll() { + return (0, import_rewire.getEnvValue)("LC_ALL"); +} +// @__NO_SIDE_EFFECTS__ +function getLcMessages() { + return (0, import_rewire.getEnvValue)("LC_MESSAGES"); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getLang, + getLcAll, + getLcMessages +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/node-auth-token.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/node-auth-token.d.ts new file mode 100644 index 00000000..ba8e62e6 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/node-auth-token.d.ts @@ -0,0 +1,15 @@ +/** + * Returns the value of the NODE_AUTH_TOKEN environment variable. + * + * @returns The Node.js registry auth token, or `undefined` if not set + * + * @example + * ```typescript + * import { getNodeAuthToken } from '@socketsecurity/lib/env/node-auth-token' + * + * const token = getNodeAuthToken() + * // e.g. 'npm_abc123...' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getNodeAuthToken(): string | undefined; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/node-auth-token.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/node-auth-token.js new file mode 100644 index 00000000..3f830c11 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/node-auth-token.js @@ -0,0 +1,33 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var node_auth_token_exports = {}; +__export(node_auth_token_exports, { + getNodeAuthToken: () => getNodeAuthToken +}); +module.exports = __toCommonJS(node_auth_token_exports); +var import_rewire = require("./rewire"); +// @__NO_SIDE_EFFECTS__ +function getNodeAuthToken() { + return (0, import_rewire.getEnvValue)("NODE_AUTH_TOKEN"); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getNodeAuthToken +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/node-env.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/node-env.d.ts new file mode 100644 index 00000000..6ce1f894 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/node-env.d.ts @@ -0,0 +1,15 @@ +/** + * Returns the value of the NODE_ENV environment variable. + * + * @returns The Node.js environment mode, or `undefined` if not set + * + * @example + * ```typescript + * import { getNodeEnv } from '@socketsecurity/lib/env/node-env' + * + * const env = getNodeEnv() + * // e.g. 'production', 'development', 'test', or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getNodeEnv(): string | undefined; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/node-env.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/node-env.js new file mode 100644 index 00000000..cf02dde1 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/node-env.js @@ -0,0 +1,33 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var node_env_exports = {}; +__export(node_env_exports, { + getNodeEnv: () => getNodeEnv +}); +module.exports = __toCommonJS(node_env_exports); +var import_rewire = require("./rewire"); +// @__NO_SIDE_EFFECTS__ +function getNodeEnv() { + return (0, import_rewire.getEnvValue)("NODE_ENV"); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getNodeEnv +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/npm.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/npm.d.ts new file mode 100644 index 00000000..45498489 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/npm.d.ts @@ -0,0 +1,80 @@ +/** + * npm_config_registry environment variable. + * NPM registry URL configured by package managers. + * + * @returns The configured NPM registry URL, or `undefined` if not set + * + * @example + * ```typescript + * import { getNpmConfigRegistry } from '@socketsecurity/lib/env/npm' + * + * const registry = getNpmConfigRegistry() + * // e.g. 'https://registry.npmjs.org/' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getNpmConfigRegistry(): string | undefined; +/** + * npm_config_user_agent environment variable. + * User agent string set by npm/pnpm/yarn package managers. + * + * @returns The package manager user agent string, or `undefined` if not set + * + * @example + * ```typescript + * import { getNpmConfigUserAgent } from '@socketsecurity/lib/env/npm' + * + * const ua = getNpmConfigUserAgent() + * // e.g. 'pnpm/9.0.0 npm/? node/v20.0.0 darwin arm64' + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getNpmConfigUserAgent(): string | undefined; +/** + * npm_lifecycle_event environment variable. + * The name of the npm lifecycle event that's currently running. + * + * @returns The current lifecycle event name, or `undefined` if not set + * + * @example + * ```typescript + * import { getNpmLifecycleEvent } from '@socketsecurity/lib/env/npm' + * + * const event = getNpmLifecycleEvent() + * // e.g. 'install', 'postinstall', or 'test' + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getNpmLifecycleEvent(): string | undefined; +/** + * NPM_REGISTRY environment variable. + * NPM registry URL override. + * + * @returns The NPM registry URL override, or `undefined` if not set + * + * @example + * ```typescript + * import { getNpmRegistry } from '@socketsecurity/lib/env/npm' + * + * const registry = getNpmRegistry() + * // e.g. 'https://registry.npmjs.org/' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getNpmRegistry(): string | undefined; +/** + * NPM_TOKEN environment variable. + * Authentication token for NPM registry access. + * + * @returns The NPM auth token, or `undefined` if not set + * + * @example + * ```typescript + * import { getNpmToken } from '@socketsecurity/lib/env/npm' + * + * const token = getNpmToken() + * // e.g. 'npm_abc123...' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getNpmToken(): string | undefined; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/npm.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/npm.js new file mode 100644 index 00000000..2d654b47 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/npm.js @@ -0,0 +1,57 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var npm_exports = {}; +__export(npm_exports, { + getNpmConfigRegistry: () => getNpmConfigRegistry, + getNpmConfigUserAgent: () => getNpmConfigUserAgent, + getNpmLifecycleEvent: () => getNpmLifecycleEvent, + getNpmRegistry: () => getNpmRegistry, + getNpmToken: () => getNpmToken +}); +module.exports = __toCommonJS(npm_exports); +var import_rewire = require("./rewire"); +// @__NO_SIDE_EFFECTS__ +function getNpmConfigRegistry() { + return (0, import_rewire.getEnvValue)("npm_config_registry"); +} +// @__NO_SIDE_EFFECTS__ +function getNpmConfigUserAgent() { + return (0, import_rewire.getEnvValue)("npm_config_user_agent"); +} +// @__NO_SIDE_EFFECTS__ +function getNpmLifecycleEvent() { + return (0, import_rewire.getEnvValue)("npm_lifecycle_event"); +} +// @__NO_SIDE_EFFECTS__ +function getNpmRegistry() { + return (0, import_rewire.getEnvValue)("NPM_REGISTRY"); +} +// @__NO_SIDE_EFFECTS__ +function getNpmToken() { + return (0, import_rewire.getEnvValue)("NPM_TOKEN"); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getNpmConfigRegistry, + getNpmConfigUserAgent, + getNpmLifecycleEvent, + getNpmRegistry, + getNpmToken +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/package-manager.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/package-manager.d.ts new file mode 100644 index 00000000..9ff84b83 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/package-manager.d.ts @@ -0,0 +1,61 @@ +/** + * Package manager type detected from environment. + */ +export type PackageManagerType = 'npm' | 'pnpm' | 'yarn' | 'bun' | null; +/** + * Detect which package manager is currently running based on environment variables. + * Checks npm_config_user_agent which all package managers set. + * + * Detection priority: + * 1. npm_config_user_agent (most reliable, set by all package managers) + * 2. Binary path analysis (fallback for non-standard environments) + * + * @returns The detected package manager or null if unable to determine + * + * @example + * ```typescript + * // During: npm install + * detectPackageManager() // 'npm' + * + * // During: pnpm install + * detectPackageManager() // 'pnpm' + * + * // During: yarn install + * detectPackageManager() // 'yarn' + * + * // Outside package manager context + * detectPackageManager() // null + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function detectPackageManager(): PackageManagerType; +/** + * Get the package manager name and version from user agent. + * + * @returns Object with name and version, or null if not available + * @example + * ```typescript + * getPackageManagerInfo() + * // { name: 'pnpm', version: '8.15.1' } + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getPackageManagerInfo(): { + name: string; + version: string; +} | null; +/** + * Get the package manager user agent from environment. + * Package managers set npm_config_user_agent with format: "npm/8.19.2 node/v18.12.0 darwin arm64" + * + * @returns The user agent string or undefined + * @example + * ```typescript + * getPackageManagerUserAgent() + * // npm: "npm/10.2.4 node/v20.11.0 darwin arm64 workspaces/false" + * // pnpm: "pnpm/8.15.1 npm/? node/v20.11.0 darwin arm64" + * // yarn: "yarn/1.22.19 npm/? node/v20.11.0 darwin arm64" + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getPackageManagerUserAgent(): string | undefined; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/package-manager.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/package-manager.js new file mode 100644 index 00000000..ed660317 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/package-manager.js @@ -0,0 +1,89 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var package_manager_exports = {}; +__export(package_manager_exports, { + detectPackageManager: () => detectPackageManager, + getPackageManagerInfo: () => getPackageManagerInfo, + getPackageManagerUserAgent: () => getPackageManagerUserAgent +}); +module.exports = __toCommonJS(package_manager_exports); +var import_node_process = __toESM(require("node:process")); +var import_rewire = require("./rewire"); +// @__NO_SIDE_EFFECTS__ +function detectPackageManager() { + const userAgent = /* @__PURE__ */ getPackageManagerUserAgent(); + if (userAgent) { + const match = userAgent.match(/^(npm|pnpm|yarn|bun)\//); + if (match) { + return match[1]; + } + } + const argv0 = import_node_process.default.argv[0]; + if (argv0) { + if (argv0.includes("/pnpm/") || argv0.includes("\\pnpm\\")) { + return "pnpm"; + } + if (argv0.includes("/yarn/") || argv0.includes("\\yarn\\") || argv0.includes("/.yarn/") || argv0.includes("\\.yarn\\")) { + return "yarn"; + } + if (argv0.includes("/bun/") || argv0.includes("\\bun\\")) { + return "bun"; + } + if (argv0.includes("/node_modules/") || argv0.includes("\\node_modules\\")) { + return "npm"; + } + } + return null; +} +// @__NO_SIDE_EFFECTS__ +function getPackageManagerInfo() { + const userAgent = /* @__PURE__ */ getPackageManagerUserAgent(); + if (!userAgent) { + return null; + } + const match = userAgent.match(/^([^/]+)\/([^\s]+)/); + if (match) { + return { + name: match[1], + version: match[2] + }; + } + return null; +} +// @__NO_SIDE_EFFECTS__ +function getPackageManagerUserAgent() { + return (0, import_rewire.getEnvValue)("npm_config_user_agent"); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + detectPackageManager, + getPackageManagerInfo, + getPackageManagerUserAgent +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/path.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/path.d.ts new file mode 100644 index 00000000..8a480366 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/path.d.ts @@ -0,0 +1,15 @@ +/** + * Returns the value of the PATH environment variable. + * + * @returns The system executable search paths, or `undefined` if not set + * + * @example + * ```typescript + * import { getPath } from '@socketsecurity/lib/env/path' + * + * const path = getPath() + * // e.g. '/usr/local/bin:/usr/bin:/bin' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getPath(): string | undefined; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/path.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/path.js new file mode 100644 index 00000000..46900349 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/path.js @@ -0,0 +1,33 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var path_exports = {}; +__export(path_exports, { + getPath: () => getPath +}); +module.exports = __toCommonJS(path_exports); +var import_rewire = require("./rewire"); +// @__NO_SIDE_EFFECTS__ +function getPath() { + return (0, import_rewire.getEnvValue)("PATH"); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getPath +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/pre-commit.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/pre-commit.d.ts new file mode 100644 index 00000000..83b01d71 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/pre-commit.d.ts @@ -0,0 +1,16 @@ +/** + * Returns whether the PRE_COMMIT environment variable is set to a truthy value. + * + * @returns `true` if running in a pre-commit hook, `false` otherwise + * + * @example + * ```typescript + * import { getPreCommit } from '@socketsecurity/lib/env/pre-commit' + * + * if (getPreCommit()) { + * console.log('Running in pre-commit hook') + * } + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getPreCommit(): boolean; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/pre-commit.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/pre-commit.js new file mode 100644 index 00000000..2cbbc877 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/pre-commit.js @@ -0,0 +1,34 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var pre_commit_exports = {}; +__export(pre_commit_exports, { + getPreCommit: () => getPreCommit +}); +module.exports = __toCommonJS(pre_commit_exports); +var import_helpers = require("./helpers"); +var import_rewire = require("./rewire"); +// @__NO_SIDE_EFFECTS__ +function getPreCommit() { + return (0, import_helpers.envAsBoolean)((0, import_rewire.getEnvValue)("PRE_COMMIT")); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getPreCommit +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/rewire.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/rewire.d.ts new file mode 100644 index 00000000..80ec4c4e --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/rewire.d.ts @@ -0,0 +1,155 @@ +/** + * Clear a specific environment variable override. + * + * @param key - The environment variable name to clear + * + * @example + * ```typescript + * import { setEnv, clearEnv } from '@socketsecurity/lib/env/rewire' + * + * setEnv('CI', '1') + * clearEnv('CI') + * ``` + */ +export declare function clearEnv(key: string): void; +/** + * Get an environment variable value, checking overrides first. + * + * Resolution order: + * 1. Isolated overrides (temporary - set via withEnv/withEnvSync) + * 2. Shared overrides (persistent - set via setEnv in beforeEach) + * 3. process.env (including vi.stubEnv modifications) + * + * @internal Used by env getters to support test rewiring + * + * @example + * ```typescript + * import { getEnvValue } from '@socketsecurity/lib/env/rewire' + * + * const value = getEnvValue('NODE_ENV') + * // e.g. 'production' or undefined + * ``` + */ +export declare function getEnvValue(key: string): string | undefined; +/** + * Check if an environment variable has been overridden. + * + * @param key - The environment variable name to check + * @returns `true` if the variable has been overridden, `false` otherwise + * + * @example + * ```typescript + * import { setEnv, hasOverride } from '@socketsecurity/lib/env/rewire' + * + * hasOverride('CI') // false + * setEnv('CI', '1') + * hasOverride('CI') // true + * ``` + */ +export declare function hasOverride(key: string): boolean; +/** + * Check if an environment variable exists (has a key), checking overrides first. + * + * Resolution order: + * 1. Isolated overrides (temporary - set via withEnv/withEnvSync) + * 2. Shared overrides (persistent - set via setEnv in beforeEach) + * 3. process.env (including vi.stubEnv modifications) + * + * @internal Used by env getters to check for key presence (not value truthiness) + * + * @example + * ```typescript + * import { isInEnv } from '@socketsecurity/lib/env/rewire' + * + * isInEnv('PATH') // true (usually set) + * isInEnv('MISSING') // false + * ``` + */ +export declare function isInEnv(key: string): boolean; +/** + * Clear all environment variable overrides. + * Useful in afterEach hooks to ensure clean test state. + * + * @example + * ```typescript + * import { resetEnv } from './rewire' + * + * afterEach(() => { + * resetEnv() + * }) + * ``` + */ +export declare function resetEnv(): void; +/** + * Set an environment variable override for testing. + * This does not modify process.env, only affects env getters. + * + * Works in test hooks (beforeEach) without needing AsyncLocalStorage context. + * Vitest's module isolation ensures each test file has independent overrides. + * + * @example + * ```typescript + * import { setEnv, resetEnv } from './rewire' + * import { getCI } from './ci' + * + * beforeEach(() => { + * setEnv('CI', '1') + * }) + * + * afterEach(() => { + * resetEnv() + * }) + * + * it('should detect CI environment', () => { + * expect(getCI()).toBe(true) + * }) + * ``` + */ +export declare function setEnv(key: string, value: string | undefined): void; +/** + * Run code with environment overrides in an isolated AsyncLocalStorage context. + * Creates true context isolation - overrides don't leak to concurrent code. + * + * Useful for tests that need temporary overrides without affecting other tests + * or for nested override scenarios. + * + * @example + * ```typescript + * import { withEnv } from './rewire' + * import { getCI } from './ci' + * + * // Temporary override in isolated context + * await withEnv({ CI: '1' }, async () => { + * expect(getCI()).toBe(true) + * }) + * expect(getCI()).toBe(false) // Override is gone + * ``` + * + * @example + * ```typescript + * // Nested overrides work correctly + * setEnv('CI', '1') // Shared override (persistent) + * + * await withEnv({ CI: '0' }, async () => { + * expect(getCI()).toBe(false) // Isolated override takes precedence + * }) + * + * expect(getCI()).toBe(true) // Back to shared override + * ``` + */ +export declare function withEnv(overrides: Record, fn: () => T | Promise): Promise; +/** + * Synchronous version of withEnv for non-async code. + * + * @example + * ```typescript + * import { withEnvSync } from './rewire' + * import { getCI } from './ci' + * + * const result = withEnvSync({ CI: '1' }, () => { + * return getCI() + * }) + * expect(result).toBe(true) + * ``` + */ +export declare function withEnvSync(overrides: Record, fn: () => T): T; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/rewire.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/rewire.js new file mode 100644 index 00000000..349ff7db --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/rewire.js @@ -0,0 +1,114 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var rewire_exports = {}; +__export(rewire_exports, { + clearEnv: () => clearEnv, + getEnvValue: () => getEnvValue, + hasOverride: () => hasOverride, + isInEnv: () => isInEnv, + resetEnv: () => resetEnv, + setEnv: () => setEnv, + withEnv: () => withEnv, + withEnvSync: () => withEnvSync +}); +module.exports = __toCommonJS(rewire_exports); +var import_node_process = __toESM(require("node:process")); +var import_objects = require("../objects"); +var import_helpers = require("./helpers"); +let _async_hooks; +// @__NO_SIDE_EFFECTS__ +function getAsyncHooks() { + if (_async_hooks === void 0) { + _async_hooks = require("async_hooks"); + } + return _async_hooks; +} +const { AsyncLocalStorage } = /* @__PURE__ */ getAsyncHooks(); +const isolatedOverridesStorage = new AsyncLocalStorage(); +const sharedOverridesSymbol = Symbol.for( + "@socketsecurity/lib/env/rewire/test-overrides" +); +const isVitestEnv = (0, import_helpers.envAsBoolean)(import_node_process.default.env.VITEST); +if (isVitestEnv && !globalThis[sharedOverridesSymbol]) { + globalThis[sharedOverridesSymbol] = /* @__PURE__ */ new Map(); +} +const sharedOverrides = globalThis[sharedOverridesSymbol]; +function clearEnv(key) { + sharedOverrides?.delete(key); +} +function getEnvValue(key) { + const isolatedOverrides = isolatedOverridesStorage.getStore(); + if (isolatedOverrides?.has(key)) { + return isolatedOverrides.get(key); + } + if (sharedOverrides?.has(key)) { + return sharedOverrides.get(key); + } + return import_node_process.default.env[key]; +} +function hasOverride(key) { + const isolatedOverrides = isolatedOverridesStorage.getStore(); + return !!(isolatedOverrides?.has(key) || sharedOverrides?.has(key)); +} +function isInEnv(key) { + const isolatedOverrides = isolatedOverridesStorage.getStore(); + if (isolatedOverrides?.has(key)) { + return true; + } + if (sharedOverrides?.has(key)) { + return true; + } + return (0, import_objects.hasOwn)(import_node_process.default.env, key); +} +function resetEnv() { + sharedOverrides?.clear(); +} +function setEnv(key, value) { + sharedOverrides?.set(key, value); +} +async function withEnv(overrides, fn) { + const map = new Map(Object.entries(overrides)); + return await isolatedOverridesStorage.run(map, fn); +} +function withEnvSync(overrides, fn) { + const map = new Map(Object.entries(overrides)); + return isolatedOverridesStorage.run(map, fn); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + clearEnv, + getEnvValue, + hasOverride, + isInEnv, + resetEnv, + setEnv, + withEnv, + withEnvSync +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/shell.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/shell.d.ts new file mode 100644 index 00000000..4e09e4d7 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/shell.d.ts @@ -0,0 +1,15 @@ +/** + * Returns the value of the SHELL environment variable. + * + * @returns The user's default shell path, or `undefined` if not set + * + * @example + * ```typescript + * import { getShell } from '@socketsecurity/lib/env/shell' + * + * const shell = getShell() + * // e.g. '/bin/zsh' or '/bin/bash' + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getShell(): string | undefined; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/shell.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/shell.js new file mode 100644 index 00000000..04453f6d --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/shell.js @@ -0,0 +1,33 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var shell_exports = {}; +__export(shell_exports, { + getShell: () => getShell +}); +module.exports = __toCommonJS(shell_exports); +var import_rewire = require("./rewire"); +// @__NO_SIDE_EFFECTS__ +function getShell() { + return (0, import_rewire.getEnvValue)("SHELL"); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getShell +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket-cli-shadow.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket-cli-shadow.d.ts new file mode 100644 index 00000000..1bd1dcdf --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket-cli-shadow.d.ts @@ -0,0 +1,78 @@ +/** + * Controls Socket CLI shadow mode risk acceptance. + * + * @returns Whether to accept all risks in shadow mode + * + * @example + * ```typescript + * import { getSocketCliShadowAcceptRisks } from '@socketsecurity/lib/env/socket-cli-shadow' + * + * if (getSocketCliShadowAcceptRisks()) { + * console.log('Shadow mode risks accepted') + * } + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketCliShadowAcceptRisks(): boolean; +/** + * API token for Socket CLI shadow mode. + * + * @returns Shadow mode API token or undefined + * + * @example + * ```typescript + * import { getSocketCliShadowApiToken } from '@socketsecurity/lib/env/socket-cli-shadow' + * + * const token = getSocketCliShadowApiToken() + * // e.g. 'sk_shadow_abc123...' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketCliShadowApiToken(): string | undefined; +/** + * Binary path for Socket CLI shadow mode. + * + * @returns Shadow mode binary path or undefined + * + * @example + * ```typescript + * import { getSocketCliShadowBin } from '@socketsecurity/lib/env/socket-cli-shadow' + * + * const bin = getSocketCliShadowBin() + * // e.g. '/usr/local/bin/socket-shadow' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketCliShadowBin(): string | undefined; +/** + * Controls Socket CLI shadow mode progress display. + * + * @returns Whether to show progress in shadow mode + * + * @example + * ```typescript + * import { getSocketCliShadowProgress } from '@socketsecurity/lib/env/socket-cli-shadow' + * + * if (getSocketCliShadowProgress()) { + * console.log('Shadow mode progress enabled') + * } + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketCliShadowProgress(): boolean; +/** + * Controls Socket CLI shadow mode silent operation. + * + * @returns Whether shadow mode should operate silently + * + * @example + * ```typescript + * import { getSocketCliShadowSilent } from '@socketsecurity/lib/env/socket-cli-shadow' + * + * if (getSocketCliShadowSilent()) { + * console.log('Shadow mode is silent') + * } + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketCliShadowSilent(): boolean; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket-cli-shadow.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket-cli-shadow.js new file mode 100644 index 00000000..a2eac784 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket-cli-shadow.js @@ -0,0 +1,58 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var socket_cli_shadow_exports = {}; +__export(socket_cli_shadow_exports, { + getSocketCliShadowAcceptRisks: () => getSocketCliShadowAcceptRisks, + getSocketCliShadowApiToken: () => getSocketCliShadowApiToken, + getSocketCliShadowBin: () => getSocketCliShadowBin, + getSocketCliShadowProgress: () => getSocketCliShadowProgress, + getSocketCliShadowSilent: () => getSocketCliShadowSilent +}); +module.exports = __toCommonJS(socket_cli_shadow_exports); +var import_helpers = require("./helpers"); +var import_rewire = require("./rewire"); +// @__NO_SIDE_EFFECTS__ +function getSocketCliShadowAcceptRisks() { + return (0, import_helpers.envAsBoolean)((0, import_rewire.getEnvValue)("SOCKET_CLI_SHADOW_ACCEPT_RISKS")); +} +// @__NO_SIDE_EFFECTS__ +function getSocketCliShadowApiToken() { + return (0, import_rewire.getEnvValue)("SOCKET_CLI_SHADOW_API_TOKEN"); +} +// @__NO_SIDE_EFFECTS__ +function getSocketCliShadowBin() { + return (0, import_rewire.getEnvValue)("SOCKET_CLI_SHADOW_BIN"); +} +// @__NO_SIDE_EFFECTS__ +function getSocketCliShadowProgress() { + return (0, import_helpers.envAsBoolean)((0, import_rewire.getEnvValue)("SOCKET_CLI_SHADOW_PROGRESS")); +} +// @__NO_SIDE_EFFECTS__ +function getSocketCliShadowSilent() { + return (0, import_helpers.envAsBoolean)((0, import_rewire.getEnvValue)("SOCKET_CLI_SHADOW_SILENT")); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getSocketCliShadowAcceptRisks, + getSocketCliShadowApiToken, + getSocketCliShadowBin, + getSocketCliShadowProgress, + getSocketCliShadowSilent +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket-cli.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket-cli.d.ts new file mode 100644 index 00000000..1d1cff3b --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket-cli.d.ts @@ -0,0 +1,223 @@ +/** + * Whether to accept all Socket CLI risks (alternative name). + * + * @returns Whether to accept all risks + * + * @example + * ```typescript + * import { getSocketCliAcceptRisks } from '@socketsecurity/lib/env/socket-cli' + * + * if (getSocketCliAcceptRisks()) { + * console.log('All risks accepted') + * } + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketCliAcceptRisks(): boolean; +/** + * Socket CLI API base URL (alternative name). + * Checks SOCKET_CLI_API_BASE_URL first, then falls back to legacy SOCKET_SECURITY_API_BASE_URL. + * + * @returns API base URL or undefined + * + * @example + * ```typescript + * import { getSocketCliApiBaseUrl } from '@socketsecurity/lib/env/socket-cli' + * + * const baseUrl = getSocketCliApiBaseUrl() + * // e.g. 'https://api.socket.dev' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketCliApiBaseUrl(): string | undefined; +/** + * Proxy URL for Socket CLI API requests (alternative name). + * Checks SOCKET_CLI_API_PROXY, SOCKET_SECURITY_API_PROXY, then standard proxy env vars. + * Follows the same precedence as v1.x: HTTPS_PROXY → https_proxy → HTTP_PROXY → http_proxy. + * + * @returns API proxy URL or undefined + * + * @example + * ```typescript + * import { getSocketCliApiProxy } from '@socketsecurity/lib/env/socket-cli' + * + * const proxy = getSocketCliApiProxy() + * // e.g. 'http://proxy.example.com:8080' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketCliApiProxy(): string | undefined; +/** + * Timeout in milliseconds for Socket CLI API requests (alternative name). + * + * @returns API timeout in milliseconds + * + * @example + * ```typescript + * import { getSocketCliApiTimeout } from '@socketsecurity/lib/env/socket-cli' + * + * const timeout = getSocketCliApiTimeout() + * // e.g. 30000 or 0 if not set + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketCliApiTimeout(): number; +/** + * Socket CLI API authentication token (alternative name). + * Checks SOCKET_CLI_API_TOKEN, SOCKET_CLI_API_KEY, SOCKET_SECURITY_API_TOKEN, SOCKET_SECURITY_API_KEY. + * Maintains full v1.x backward compatibility. + * + * @returns API token or undefined + * + * @example + * ```typescript + * import { getSocketCliApiToken } from '@socketsecurity/lib/env/socket-cli' + * + * const token = getSocketCliApiToken() + * // e.g. a Socket API token string or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketCliApiToken(): string | undefined; +/** + * Bootstrap cache directory path. + * Set by bootstrap wrappers to pass dlx cache location to CLI. + * + * @returns Bootstrap cache directory or undefined + * + * @example + * ```typescript + * import { getSocketCliBootstrapCacheDir } from '@socketsecurity/lib/env/socket-cli' + * + * const cacheDir = getSocketCliBootstrapCacheDir() + * // e.g. '/tmp/.socket-cli-cache' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketCliBootstrapCacheDir(): string | undefined; +/** + * Bootstrap package spec (e.g., @socketsecurity/cli@^2.0.11). + * Set by bootstrap wrappers (SEA/smol/npm) to pass package spec to CLI. + * + * @returns Bootstrap package spec or undefined + * + * @example + * ```typescript + * import { getSocketCliBootstrapSpec } from '@socketsecurity/lib/env/socket-cli' + * + * const spec = getSocketCliBootstrapSpec() + * // e.g. '@socketsecurity/cli@^2.0.11' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketCliBootstrapSpec(): string | undefined; +/** + * Socket CLI configuration file path (alternative name). + * + * @returns Config file path or undefined + * + * @example + * ```typescript + * import { getSocketCliConfig } from '@socketsecurity/lib/env/socket-cli' + * + * const config = getSocketCliConfig() + * // e.g. '/tmp/project/socket.yml' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketCliConfig(): string | undefined; +/** + * Controls Socket CLI fix mode. + * + * @returns Fix mode value or undefined + * + * @example + * ```typescript + * import { getSocketCliFix } from '@socketsecurity/lib/env/socket-cli' + * + * const fix = getSocketCliFix() + * // e.g. 'true' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketCliFix(): string | undefined; +/** + * Socket CLI GitHub authentication token. + * Checks SOCKET_CLI_GITHUB_TOKEN, SOCKET_SECURITY_GITHUB_PAT, then falls back to GITHUB_TOKEN. + * + * @returns GitHub token or undefined + * + * @example + * ```typescript + * import { getSocketCliGithubToken } from '@socketsecurity/lib/env/socket-cli' + * + * const token = getSocketCliGithubToken() + * // e.g. 'ghp_abc123...' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketCliGithubToken(): string | undefined; +/** + * Whether to skip Socket CLI API token requirement (alternative name). + * + * @returns Whether to skip API token requirement + * + * @example + * ```typescript + * import { getSocketCliNoApiToken } from '@socketsecurity/lib/env/socket-cli' + * + * if (getSocketCliNoApiToken()) { + * console.log('API token requirement skipped') + * } + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketCliNoApiToken(): boolean; +/** + * Controls Socket CLI optimization mode. + * + * @returns Whether optimization mode is enabled + * + * @example + * ```typescript + * import { getSocketCliOptimize } from '@socketsecurity/lib/env/socket-cli' + * + * if (getSocketCliOptimize()) { + * console.log('Optimization mode enabled') + * } + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketCliOptimize(): boolean; +/** + * Socket CLI organization slug identifier (alternative name). + * Checks SOCKET_CLI_ORG_SLUG first, then falls back to SOCKET_ORG_SLUG. + * + * @returns Organization slug or undefined + * + * @example + * ```typescript + * import { getSocketCliOrgSlug } from '@socketsecurity/lib/env/socket-cli' + * + * const slug = getSocketCliOrgSlug() + * // e.g. 'my-org' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketCliOrgSlug(): string | undefined; +/** + * Whether to view all Socket CLI risks (alternative name). + * + * @returns Whether to view all risks + * + * @example + * ```typescript + * import { getSocketCliViewAllRisks } from '@socketsecurity/lib/env/socket-cli' + * + * if (getSocketCliViewAllRisks()) { + * console.log('Viewing all risks') + * } + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketCliViewAllRisks(): boolean; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket-cli.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket-cli.js new file mode 100644 index 00000000..862cdd58 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket-cli.js @@ -0,0 +1,112 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var socket_cli_exports = {}; +__export(socket_cli_exports, { + getSocketCliAcceptRisks: () => getSocketCliAcceptRisks, + getSocketCliApiBaseUrl: () => getSocketCliApiBaseUrl, + getSocketCliApiProxy: () => getSocketCliApiProxy, + getSocketCliApiTimeout: () => getSocketCliApiTimeout, + getSocketCliApiToken: () => getSocketCliApiToken, + getSocketCliBootstrapCacheDir: () => getSocketCliBootstrapCacheDir, + getSocketCliBootstrapSpec: () => getSocketCliBootstrapSpec, + getSocketCliConfig: () => getSocketCliConfig, + getSocketCliFix: () => getSocketCliFix, + getSocketCliGithubToken: () => getSocketCliGithubToken, + getSocketCliNoApiToken: () => getSocketCliNoApiToken, + getSocketCliOptimize: () => getSocketCliOptimize, + getSocketCliOrgSlug: () => getSocketCliOrgSlug, + getSocketCliViewAllRisks: () => getSocketCliViewAllRisks +}); +module.exports = __toCommonJS(socket_cli_exports); +var import_helpers = require("./helpers"); +var import_rewire = require("./rewire"); +// @__NO_SIDE_EFFECTS__ +function getSocketCliAcceptRisks() { + return (0, import_helpers.envAsBoolean)((0, import_rewire.getEnvValue)("SOCKET_CLI_ACCEPT_RISKS")); +} +// @__NO_SIDE_EFFECTS__ +function getSocketCliApiBaseUrl() { + return (0, import_rewire.getEnvValue)("SOCKET_CLI_API_BASE_URL") || (0, import_rewire.getEnvValue)("SOCKET_SECURITY_API_BASE_URL"); +} +// @__NO_SIDE_EFFECTS__ +function getSocketCliApiProxy() { + return (0, import_rewire.getEnvValue)("SOCKET_CLI_API_PROXY") || (0, import_rewire.getEnvValue)("SOCKET_SECURITY_API_PROXY") || (0, import_rewire.getEnvValue)("HTTPS_PROXY") || (0, import_rewire.getEnvValue)("https_proxy") || (0, import_rewire.getEnvValue)("HTTP_PROXY") || (0, import_rewire.getEnvValue)("http_proxy"); +} +// @__NO_SIDE_EFFECTS__ +function getSocketCliApiTimeout() { + return (0, import_helpers.envAsNumber)((0, import_rewire.getEnvValue)("SOCKET_CLI_API_TIMEOUT")); +} +// @__NO_SIDE_EFFECTS__ +function getSocketCliApiToken() { + return (0, import_rewire.getEnvValue)("SOCKET_CLI_API_TOKEN") || (0, import_rewire.getEnvValue)("SOCKET_CLI_API_KEY") || (0, import_rewire.getEnvValue)("SOCKET_SECURITY_API_TOKEN") || (0, import_rewire.getEnvValue)("SOCKET_SECURITY_API_KEY"); +} +// @__NO_SIDE_EFFECTS__ +function getSocketCliBootstrapCacheDir() { + return (0, import_rewire.getEnvValue)("SOCKET_CLI_BOOTSTRAP_CACHE_DIR"); +} +// @__NO_SIDE_EFFECTS__ +function getSocketCliBootstrapSpec() { + return (0, import_rewire.getEnvValue)("SOCKET_CLI_BOOTSTRAP_SPEC"); +} +// @__NO_SIDE_EFFECTS__ +function getSocketCliConfig() { + return (0, import_rewire.getEnvValue)("SOCKET_CLI_CONFIG"); +} +// @__NO_SIDE_EFFECTS__ +function getSocketCliFix() { + return (0, import_rewire.getEnvValue)("SOCKET_CLI_FIX"); +} +// @__NO_SIDE_EFFECTS__ +function getSocketCliGithubToken() { + return (0, import_rewire.getEnvValue)("SOCKET_CLI_GITHUB_TOKEN") || (0, import_rewire.getEnvValue)("SOCKET_SECURITY_GITHUB_PAT") || (0, import_rewire.getEnvValue)("GITHUB_TOKEN"); +} +// @__NO_SIDE_EFFECTS__ +function getSocketCliNoApiToken() { + return (0, import_helpers.envAsBoolean)((0, import_rewire.getEnvValue)("SOCKET_CLI_NO_API_TOKEN")); +} +// @__NO_SIDE_EFFECTS__ +function getSocketCliOptimize() { + return (0, import_helpers.envAsBoolean)((0, import_rewire.getEnvValue)("SOCKET_CLI_OPTIMIZE")); +} +// @__NO_SIDE_EFFECTS__ +function getSocketCliOrgSlug() { + return (0, import_rewire.getEnvValue)("SOCKET_CLI_ORG_SLUG") || (0, import_rewire.getEnvValue)("SOCKET_ORG_SLUG"); +} +// @__NO_SIDE_EFFECTS__ +function getSocketCliViewAllRisks() { + return (0, import_helpers.envAsBoolean)((0, import_rewire.getEnvValue)("SOCKET_CLI_VIEW_ALL_RISKS")); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getSocketCliAcceptRisks, + getSocketCliApiBaseUrl, + getSocketCliApiProxy, + getSocketCliApiTimeout, + getSocketCliApiToken, + getSocketCliBootstrapCacheDir, + getSocketCliBootstrapSpec, + getSocketCliConfig, + getSocketCliFix, + getSocketCliGithubToken, + getSocketCliNoApiToken, + getSocketCliOptimize, + getSocketCliOrgSlug, + getSocketCliViewAllRisks +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket.d.ts new file mode 100644 index 00000000..f4f814aa --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket.d.ts @@ -0,0 +1,243 @@ +/** + * SOCKET_ACCEPT_RISKS environment variable getter. + * Whether to accept all Socket Security risks. + * + * @returns `true` if risks are accepted, `false` otherwise + * + * @example + * ```typescript + * import { getSocketAcceptRisks } from '@socketsecurity/lib/env/socket' + * + * if (getSocketAcceptRisks()) { + * console.log('All risks accepted') + * } + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketAcceptRisks(): boolean; +/** + * SOCKET_API_BASE_URL environment variable getter. + * Socket Security API base URL. + * + * @returns The API base URL, or `undefined` if not set + * + * @example + * ```typescript + * import { getSocketApiBaseUrl } from '@socketsecurity/lib/env/socket' + * + * const baseUrl = getSocketApiBaseUrl() + * // e.g. 'https://api.socket.dev' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketApiBaseUrl(): string | undefined; +/** + * SOCKET_API_PROXY environment variable getter. + * Proxy URL for Socket Security API requests. + * + * @returns The API proxy URL, or `undefined` if not set + * + * @example + * ```typescript + * import { getSocketApiProxy } from '@socketsecurity/lib/env/socket' + * + * const proxy = getSocketApiProxy() + * // e.g. 'http://proxy.example.com:8080' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketApiProxy(): string | undefined; +/** + * SOCKET_API_TIMEOUT environment variable getter. + * Timeout in milliseconds for Socket Security API requests. + * + * @returns The timeout in milliseconds, or `0` if not set + * + * @example + * ```typescript + * import { getSocketApiTimeout } from '@socketsecurity/lib/env/socket' + * + * const timeout = getSocketApiTimeout() + * // e.g. 30000 or 0 if not set + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketApiTimeout(): number; +/** + * SOCKET_API_TOKEN environment variable getter. + * Socket Security API authentication token. + * + * @returns The API token, or `undefined` if not set + * + * @example + * ```typescript + * import { getSocketApiToken } from '@socketsecurity/lib/env/socket' + * + * const token = getSocketApiToken() + * // e.g. a Socket API token string or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketApiToken(): string | undefined; +/** + * SOCKET_CACACHE_DIR environment variable getter. + * Overrides the default Socket cacache directory location. + * + * @returns The cacache directory path, or `undefined` if not set + * + * @example + * ```typescript + * import { getSocketCacacheDir } from '@socketsecurity/lib/env/socket' + * + * const dir = getSocketCacacheDir() + * // e.g. '/tmp/.socket-cache' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketCacacheDir(): string | undefined; +/** + * SOCKET_CONFIG environment variable getter. + * Socket Security configuration file path. + * + * @returns The config file path, or `undefined` if not set + * + * @example + * ```typescript + * import { getSocketConfig } from '@socketsecurity/lib/env/socket' + * + * const config = getSocketConfig() + * // e.g. '/tmp/project/socket.yml' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketConfig(): string | undefined; +/** + * SOCKET_DEBUG environment variable getter. + * Controls Socket-specific debug output. + * + * @returns The Socket debug filter, or `undefined` if not set + * + * @example + * ```typescript + * import { getSocketDebug } from '@socketsecurity/lib/env/socket' + * + * const debug = getSocketDebug() + * // e.g. '*' or 'api' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketDebug(): string | undefined; +/** + * SOCKET_DLX_DIR environment variable getter. + * Overrides the default Socket DLX directory location. + * + * @returns The DLX directory path, or `undefined` if not set + * + * @example + * ```typescript + * import { getSocketDlxDirEnv } from '@socketsecurity/lib/env/socket' + * + * const dlxDir = getSocketDlxDirEnv() + * // e.g. '/tmp/.socket-dlx' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketDlxDirEnv(): string | undefined; +/** + * SOCKET_HOME environment variable getter. + * Socket Security home directory path. + * + * @returns The Socket home directory, or `undefined` if not set + * + * @example + * ```typescript + * import { getSocketHome } from '@socketsecurity/lib/env/socket' + * + * const home = getSocketHome() + * // e.g. '/tmp/.socket' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketHome(): string | undefined; +/** + * SOCKET_NO_API_TOKEN environment variable getter. + * Whether to skip Socket Security API token requirement. + * + * @returns `true` if the API token requirement is skipped, `false` otherwise + * + * @example + * ```typescript + * import { getSocketNoApiToken } from '@socketsecurity/lib/env/socket' + * + * if (getSocketNoApiToken()) { + * console.log('API token requirement skipped') + * } + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketNoApiToken(): boolean; +/** + * SOCKET_NPM_REGISTRY environment variable getter. + * Socket NPM registry URL (alternative name). + * + * @returns The Socket NPM registry URL, or `undefined` if not set + * + * @example + * ```typescript + * import { getSocketNpmRegistry } from '@socketsecurity/lib/env/socket' + * + * const registry = getSocketNpmRegistry() + * // e.g. 'https://npm.socket.dev/' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketNpmRegistry(): string | undefined; +/** + * SOCKET_ORG_SLUG environment variable getter. + * Socket Security organization slug identifier. + * + * @returns The organization slug, or `undefined` if not set + * + * @example + * ```typescript + * import { getSocketOrgSlug } from '@socketsecurity/lib/env/socket' + * + * const slug = getSocketOrgSlug() + * // e.g. 'my-org' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketOrgSlug(): string | undefined; +/** + * SOCKET_REGISTRY_URL environment variable getter. + * Socket Registry URL for package installation. + * + * @returns The Socket registry URL, or `undefined` if not set + * + * @example + * ```typescript + * import { getSocketRegistryUrl } from '@socketsecurity/lib/env/socket' + * + * const registryUrl = getSocketRegistryUrl() + * // e.g. 'https://registry.socket.dev/' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketRegistryUrl(): string | undefined; +/** + * SOCKET_VIEW_ALL_RISKS environment variable getter. + * Whether to view all Socket Security risks. + * + * @returns `true` if viewing all risks, `false` otherwise + * + * @example + * ```typescript + * import { getSocketViewAllRisks } from '@socketsecurity/lib/env/socket' + * + * if (getSocketViewAllRisks()) { + * console.log('Viewing all risks') + * } + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getSocketViewAllRisks(): boolean; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket.js new file mode 100644 index 00000000..71567a5b --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/socket.js @@ -0,0 +1,118 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var socket_exports = {}; +__export(socket_exports, { + getSocketAcceptRisks: () => getSocketAcceptRisks, + getSocketApiBaseUrl: () => getSocketApiBaseUrl, + getSocketApiProxy: () => getSocketApiProxy, + getSocketApiTimeout: () => getSocketApiTimeout, + getSocketApiToken: () => getSocketApiToken, + getSocketCacacheDir: () => getSocketCacacheDir, + getSocketConfig: () => getSocketConfig, + getSocketDebug: () => getSocketDebug, + getSocketDlxDirEnv: () => getSocketDlxDirEnv, + getSocketHome: () => getSocketHome, + getSocketNoApiToken: () => getSocketNoApiToken, + getSocketNpmRegistry: () => getSocketNpmRegistry, + getSocketOrgSlug: () => getSocketOrgSlug, + getSocketRegistryUrl: () => getSocketRegistryUrl, + getSocketViewAllRisks: () => getSocketViewAllRisks +}); +module.exports = __toCommonJS(socket_exports); +var import_helpers = require("./helpers"); +var import_rewire = require("./rewire"); +// @__NO_SIDE_EFFECTS__ +function getSocketAcceptRisks() { + return (0, import_helpers.envAsBoolean)((0, import_rewire.getEnvValue)("SOCKET_ACCEPT_RISKS")); +} +// @__NO_SIDE_EFFECTS__ +function getSocketApiBaseUrl() { + return (0, import_rewire.getEnvValue)("SOCKET_API_BASE_URL"); +} +// @__NO_SIDE_EFFECTS__ +function getSocketApiProxy() { + return (0, import_rewire.getEnvValue)("SOCKET_API_PROXY"); +} +// @__NO_SIDE_EFFECTS__ +function getSocketApiTimeout() { + return (0, import_helpers.envAsNumber)((0, import_rewire.getEnvValue)("SOCKET_API_TIMEOUT")); +} +// @__NO_SIDE_EFFECTS__ +function getSocketApiToken() { + return (0, import_rewire.getEnvValue)("SOCKET_API_TOKEN"); +} +// @__NO_SIDE_EFFECTS__ +function getSocketCacacheDir() { + return (0, import_rewire.getEnvValue)("SOCKET_CACACHE_DIR"); +} +// @__NO_SIDE_EFFECTS__ +function getSocketConfig() { + return (0, import_rewire.getEnvValue)("SOCKET_CONFIG"); +} +// @__NO_SIDE_EFFECTS__ +function getSocketDebug() { + return (0, import_rewire.getEnvValue)("SOCKET_DEBUG"); +} +// @__NO_SIDE_EFFECTS__ +function getSocketDlxDirEnv() { + return (0, import_rewire.getEnvValue)("SOCKET_DLX_DIR"); +} +// @__NO_SIDE_EFFECTS__ +function getSocketHome() { + return (0, import_rewire.getEnvValue)("SOCKET_HOME"); +} +// @__NO_SIDE_EFFECTS__ +function getSocketNoApiToken() { + return (0, import_helpers.envAsBoolean)((0, import_rewire.getEnvValue)("SOCKET_NO_API_TOKEN")); +} +// @__NO_SIDE_EFFECTS__ +function getSocketNpmRegistry() { + return (0, import_rewire.getEnvValue)("SOCKET_NPM_REGISTRY"); +} +// @__NO_SIDE_EFFECTS__ +function getSocketOrgSlug() { + return (0, import_rewire.getEnvValue)("SOCKET_ORG_SLUG"); +} +// @__NO_SIDE_EFFECTS__ +function getSocketRegistryUrl() { + return (0, import_rewire.getEnvValue)("SOCKET_REGISTRY_URL"); +} +// @__NO_SIDE_EFFECTS__ +function getSocketViewAllRisks() { + return (0, import_helpers.envAsBoolean)((0, import_rewire.getEnvValue)("SOCKET_VIEW_ALL_RISKS")); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getSocketAcceptRisks, + getSocketApiBaseUrl, + getSocketApiProxy, + getSocketApiTimeout, + getSocketApiToken, + getSocketCacacheDir, + getSocketConfig, + getSocketDebug, + getSocketDlxDirEnv, + getSocketHome, + getSocketNoApiToken, + getSocketNpmRegistry, + getSocketOrgSlug, + getSocketRegistryUrl, + getSocketViewAllRisks +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/temp-dir.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/temp-dir.d.ts new file mode 100644 index 00000000..0836e490 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/temp-dir.d.ts @@ -0,0 +1,48 @@ +/** + * TEMP environment variable. + * Windows temporary directory path. + * + * @returns The Windows temp directory path, or `undefined` if not set + * + * @example + * ```typescript + * import { getTemp } from '@socketsecurity/lib/env/temp-dir' + * + * const temp = getTemp() + * // e.g. 'C:\\Windows\\Temp' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getTemp(): string | undefined; +/** + * TMP environment variable. + * Alternative temporary directory path. + * + * @returns The alternative temp directory path, or `undefined` if not set + * + * @example + * ```typescript + * import { getTmp } from '@socketsecurity/lib/env/temp-dir' + * + * const tmp = getTmp() + * // e.g. '/tmp' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getTmp(): string | undefined; +/** + * TMPDIR environment variable. + * Unix/macOS temporary directory path. + * + * @returns The Unix/macOS temp directory path, or `undefined` if not set + * + * @example + * ```typescript + * import { getTmpdir } from '@socketsecurity/lib/env/temp-dir' + * + * const tmpdir = getTmpdir() + * // e.g. '/tmp' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getTmpdir(): string | undefined; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/temp-dir.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/temp-dir.js new file mode 100644 index 00000000..04c9eaf7 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/temp-dir.js @@ -0,0 +1,45 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var temp_dir_exports = {}; +__export(temp_dir_exports, { + getTemp: () => getTemp, + getTmp: () => getTmp, + getTmpdir: () => getTmpdir +}); +module.exports = __toCommonJS(temp_dir_exports); +var import_rewire = require("./rewire"); +// @__NO_SIDE_EFFECTS__ +function getTemp() { + return (0, import_rewire.getEnvValue)("TEMP"); +} +// @__NO_SIDE_EFFECTS__ +function getTmp() { + return (0, import_rewire.getEnvValue)("TMP"); +} +// @__NO_SIDE_EFFECTS__ +function getTmpdir() { + return (0, import_rewire.getEnvValue)("TMPDIR"); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getTemp, + getTmp, + getTmpdir +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/term.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/term.d.ts new file mode 100644 index 00000000..45159b7a --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/term.d.ts @@ -0,0 +1,15 @@ +/** + * Returns the value of the TERM environment variable. + * + * @returns The terminal type identifier, or `undefined` if not set + * + * @example + * ```typescript + * import { getTerm } from '@socketsecurity/lib/env/term' + * + * const term = getTerm() + * // e.g. 'xterm-256color' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getTerm(): string | undefined; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/term.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/term.js new file mode 100644 index 00000000..0924cfa6 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/term.js @@ -0,0 +1,33 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var term_exports = {}; +__export(term_exports, { + getTerm: () => getTerm +}); +module.exports = __toCommonJS(term_exports); +var import_rewire = require("./rewire"); +// @__NO_SIDE_EFFECTS__ +function getTerm() { + return (0, import_rewire.getEnvValue)("TERM"); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getTerm +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/test.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/test.d.ts new file mode 100644 index 00000000..3fbda9d5 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/test.d.ts @@ -0,0 +1,50 @@ +/** + * JEST_WORKER_ID environment variable. + * Set when running tests with Jest. + * + * @returns The Jest worker ID string, or empty string if not set + * + * @example + * ```typescript + * import { getJestWorkerId } from '@socketsecurity/lib/env/test' + * + * const workerId = getJestWorkerId() + * // e.g. '1' when running in Jest, or '' + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getJestWorkerId(): string; +/** + * VITEST environment variable. + * Set when running tests with Vitest. + * + * @returns `true` if running in Vitest, `false` otherwise + * + * @example + * ```typescript + * import { getVitest } from '@socketsecurity/lib/env/test' + * + * if (getVitest()) { + * console.log('Running in Vitest') + * } + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getVitest(): boolean; +/** + * Check if code is running in a test environment. + * Checks NODE_ENV, VITEST, and JEST_WORKER_ID. + * + * @returns `true` if running in a test environment, `false` otherwise + * + * @example + * ```typescript + * import { isTest } from '@socketsecurity/lib/env/test' + * + * if (isTest()) { + * console.log('Running in test environment') + * } + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function isTest(): boolean; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/test.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/test.js new file mode 100644 index 00000000..288a78b7 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/test.js @@ -0,0 +1,48 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var test_exports = {}; +__export(test_exports, { + getJestWorkerId: () => getJestWorkerId, + getVitest: () => getVitest, + isTest: () => isTest +}); +module.exports = __toCommonJS(test_exports); +var import_helpers = require("./helpers"); +var import_node_env = require("./node-env"); +var import_rewire = require("./rewire"); +// @__NO_SIDE_EFFECTS__ +function getJestWorkerId() { + return (0, import_helpers.envAsString)((0, import_rewire.getEnvValue)("JEST_WORKER_ID")); +} +// @__NO_SIDE_EFFECTS__ +function getVitest() { + return (0, import_helpers.envAsBoolean)((0, import_rewire.getEnvValue)("VITEST")); +} +// @__NO_SIDE_EFFECTS__ +function isTest() { + const nodeEnv = (0, import_helpers.envAsString)((0, import_node_env.getNodeEnv)()); + return nodeEnv === "test" || /* @__PURE__ */ getVitest() || !!/* @__PURE__ */ getJestWorkerId(); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getJestWorkerId, + getVitest, + isTest +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/windows.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/windows.d.ts new file mode 100644 index 00000000..9d5c869e --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/windows.d.ts @@ -0,0 +1,64 @@ +/** + * APPDATA environment variable. + * Points to the Application Data directory on Windows. + * + * @returns The Windows AppData roaming directory, or `undefined` if not set + * + * @example + * ```typescript + * import { getAppdata } from '@socketsecurity/lib/env/windows' + * + * const appdata = getAppdata() + * // e.g. 'C:\\Users\\Public\\AppData\\Roaming' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getAppdata(): string | undefined; +/** + * COMSPEC environment variable. + * Points to the Windows command processor (typically cmd.exe). + * + * @returns The path to the command processor, or `undefined` if not set + * + * @example + * ```typescript + * import { getComspec } from '@socketsecurity/lib/env/windows' + * + * const comspec = getComspec() + * // e.g. 'C:\\Windows\\system32\\cmd.exe' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getComspec(): string | undefined; +/** + * LOCALAPPDATA environment variable. + * Points to the Local Application Data directory on Windows. + * + * @returns The Windows local AppData directory, or `undefined` if not set + * + * @example + * ```typescript + * import { getLocalappdata } from '@socketsecurity/lib/env/windows' + * + * const localAppdata = getLocalappdata() + * // e.g. 'C:\\Users\\Public\\AppData\\Local' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getLocalappdata(): string | undefined; +/** + * USERPROFILE environment variable. + * Windows user home directory path. + * + * @returns The Windows user profile directory, or `undefined` if not set + * + * @example + * ```typescript + * import { getUserprofile } from '@socketsecurity/lib/env/windows' + * + * const userprofile = getUserprofile() + * // e.g. 'C:\\Users\\Public' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getUserprofile(): string | undefined; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/windows.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/windows.js new file mode 100644 index 00000000..c9791bc8 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/windows.js @@ -0,0 +1,51 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var windows_exports = {}; +__export(windows_exports, { + getAppdata: () => getAppdata, + getComspec: () => getComspec, + getLocalappdata: () => getLocalappdata, + getUserprofile: () => getUserprofile +}); +module.exports = __toCommonJS(windows_exports); +var import_rewire = require("./rewire"); +// @__NO_SIDE_EFFECTS__ +function getAppdata() { + return (0, import_rewire.getEnvValue)("APPDATA"); +} +// @__NO_SIDE_EFFECTS__ +function getComspec() { + return (0, import_rewire.getEnvValue)("COMSPEC"); +} +// @__NO_SIDE_EFFECTS__ +function getLocalappdata() { + return (0, import_rewire.getEnvValue)("LOCALAPPDATA"); +} +// @__NO_SIDE_EFFECTS__ +function getUserprofile() { + return (0, import_rewire.getEnvValue)("USERPROFILE"); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getAppdata, + getComspec, + getLocalappdata, + getUserprofile +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/xdg.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/xdg.d.ts new file mode 100644 index 00000000..962332d4 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/xdg.d.ts @@ -0,0 +1,48 @@ +/** + * XDG_CACHE_HOME environment variable. + * XDG Base Directory specification cache directory. + * + * @returns The XDG cache directory path, or `undefined` if not set + * + * @example + * ```typescript + * import { getXdgCacheHome } from '@socketsecurity/lib/env/xdg' + * + * const cacheDir = getXdgCacheHome() + * // e.g. '/tmp/.cache' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getXdgCacheHome(): string | undefined; +/** + * XDG_CONFIG_HOME environment variable. + * XDG Base Directory specification config directory. + * + * @returns The XDG config directory path, or `undefined` if not set + * + * @example + * ```typescript + * import { getXdgConfigHome } from '@socketsecurity/lib/env/xdg' + * + * const configDir = getXdgConfigHome() + * // e.g. '/tmp/.config' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getXdgConfigHome(): string | undefined; +/** + * XDG_DATA_HOME environment variable. + * Points to the user's data directory on Unix systems. + * + * @returns The XDG data directory path, or `undefined` if not set + * + * @example + * ```typescript + * import { getXdgDataHome } from '@socketsecurity/lib/env/xdg' + * + * const dataDir = getXdgDataHome() + * // e.g. '/tmp/.local/share' or undefined + * ``` + */ +/*@__NO_SIDE_EFFECTS__*/ +export declare function getXdgDataHome(): string | undefined; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/xdg.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/xdg.js new file mode 100644 index 00000000..c494d8a3 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/env/xdg.js @@ -0,0 +1,45 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var xdg_exports = {}; +__export(xdg_exports, { + getXdgCacheHome: () => getXdgCacheHome, + getXdgConfigHome: () => getXdgConfigHome, + getXdgDataHome: () => getXdgDataHome +}); +module.exports = __toCommonJS(xdg_exports); +var import_rewire = require("./rewire"); +// @__NO_SIDE_EFFECTS__ +function getXdgCacheHome() { + return (0, import_rewire.getEnvValue)("XDG_CACHE_HOME"); +} +// @__NO_SIDE_EFFECTS__ +function getXdgConfigHome() { + return (0, import_rewire.getEnvValue)("XDG_CONFIG_HOME"); +} +// @__NO_SIDE_EFFECTS__ +function getXdgDataHome() { + return (0, import_rewire.getEnvValue)("XDG_DATA_HOME"); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + getXdgCacheHome, + getXdgConfigHome, + getXdgDataHome +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/errors.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/errors.d.ts new file mode 100644 index 00000000..c4da1c07 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/errors.d.ts @@ -0,0 +1,6 @@ +/** + * @fileoverview Error utilities with cause chain support. + * Provides helpers for working with error causes and stack traces. + */ +import { messageWithCauses, stackWithCauses } from './external/pony-cause'; +export { messageWithCauses, stackWithCauses }; diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/errors.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/errors.js new file mode 100644 index 00000000..85612b68 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/errors.js @@ -0,0 +1,31 @@ +"use strict"; +/* Socket Lib - Built with esbuild */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var errors_exports = {}; +__export(errors_exports, { + messageWithCauses: () => import_pony_cause.messageWithCauses, + stackWithCauses: () => import_pony_cause.stackWithCauses +}); +module.exports = __toCommonJS(errors_exports); +var import_pony_cause = require("./external/pony-cause"); +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + messageWithCauses, + stackWithCauses +}); diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/checkbox.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/checkbox.js new file mode 100644 index 00000000..2bf1f2c0 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/checkbox.js @@ -0,0 +1,5 @@ +'use strict' + +// Re-export from external-pack bundle for better deduplication. +const { checkbox } = require('../external-pack') +module.exports = checkbox diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/confirm.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/confirm.js new file mode 100644 index 00000000..cbfc59a9 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/confirm.js @@ -0,0 +1,5 @@ +'use strict' + +// Re-export from external-pack bundle for better deduplication. +const { confirm } = require('../external-pack') +module.exports = confirm diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/input.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/input.js new file mode 100644 index 00000000..f5b4060f --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/input.js @@ -0,0 +1,5 @@ +'use strict' + +// Re-export from external-pack bundle for better deduplication. +const { input } = require('../external-pack') +module.exports = input diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/password.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/password.js new file mode 100644 index 00000000..3c90529e --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/password.js @@ -0,0 +1,5 @@ +'use strict' + +// Re-export from external-pack bundle for better deduplication. +const { password } = require('../external-pack') +module.exports = password diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/search.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/search.js new file mode 100644 index 00000000..dc8b8a4a --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/search.js @@ -0,0 +1,5 @@ +'use strict' + +// Re-export from external-pack bundle for better deduplication. +const { search } = require('../external-pack') +module.exports = search diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/select.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/select.js new file mode 100644 index 00000000..0ce5a4b2 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@inquirer/select.js @@ -0,0 +1,5 @@ +'use strict' + +// Re-export from external-pack bundle for better deduplication. +const { select } = require('../external-pack') +module.exports = select diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@npmcli/arborist.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@npmcli/arborist.js new file mode 100644 index 00000000..e84a5675 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@npmcli/arborist.js @@ -0,0 +1,5 @@ +'use strict' + +// Re-export from npm-pack bundle for better deduplication +const { Arborist } = require('../npm-pack') +module.exports = Arborist diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@npmcli/package-json.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@npmcli/package-json.js new file mode 100644 index 00000000..d321b2cb --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@npmcli/package-json.js @@ -0,0 +1,14927 @@ +"use strict"; +/** + * Bundled from @npmcli/package-json + * This is a zero-dependency bundle created by esbuild. + */ +"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; + +// node_modules/.pnpm/json-parse-even-better-errors@5.0.0/node_modules/json-parse-even-better-errors/lib/index.js +var require_lib = __commonJS({ + "node_modules/.pnpm/json-parse-even-better-errors@5.0.0/node_modules/json-parse-even-better-errors/lib/index.js"(exports2, module2) { + "use strict"; + var INDENT = Symbol.for("indent"); + var NEWLINE = Symbol.for("newline"); + var DEFAULT_NEWLINE = "\n"; + var DEFAULT_INDENT = " "; + var BOM = /^\uFEFF/; + var FORMAT = /^\s*[{[]((?:\r?\n)+)([\s\t]*)/; + var EMPTY = /^(?:\{\}|\[\])((?:\r?\n)+)?$/; + var UNEXPECTED_TOKEN = /^Unexpected token '?(.)'?(,)? /i; + var hexify = /* @__PURE__ */ __name((char) => { + const h = char.charCodeAt(0).toString(16).toUpperCase(); + return `0x${h.length % 2 ? "0" : ""}${h}`; + }, "hexify"); + var stripBOM = /* @__PURE__ */ __name((txt) => String(txt).replace(BOM, ""), "stripBOM"); + var makeParsedError = /* @__PURE__ */ __name((msg, parsing, position = 0) => ({ + message: `${msg} while parsing ${parsing}`, + position + }), "makeParsedError"); + var parseError = /* @__PURE__ */ __name((e, txt, context = 20) => { + let msg = e.message; + if (!txt) { + return makeParsedError(msg, "empty string"); + } + const badTokenMatch = msg.match(UNEXPECTED_TOKEN); + const badIndexMatch = msg.match(/ position\s+(\d+)/i); + if (badTokenMatch) { + msg = msg.replace( + UNEXPECTED_TOKEN, + `Unexpected token ${JSON.stringify(badTokenMatch[1])} (${hexify(badTokenMatch[1])})$2 ` + ); + } + let errIdx; + if (badIndexMatch) { + errIdx = +badIndexMatch[1]; + } else if (msg.match(/^Unexpected end of JSON.*/i)) { + errIdx = txt.length - 1; + } + if (errIdx == null) { + return makeParsedError(msg, `'${txt.slice(0, context * 2)}'`); + } + const start = errIdx <= context ? 0 : errIdx - context; + const end = errIdx + context >= txt.length ? txt.length : errIdx + context; + const slice = `${start ? "..." : ""}${txt.slice(start, end)}${end === txt.length ? "" : "..."}`; + return makeParsedError( + msg, + `${txt === slice ? "" : "near "}${JSON.stringify(slice)}`, + errIdx + ); + }, "parseError"); + var JSONParseError = class extends SyntaxError { + static { + __name(this, "JSONParseError"); + } + constructor(er, txt, context, caller) { + const metadata = parseError(er, txt, context); + super(metadata.message); + Object.assign(this, metadata); + this.code = "EJSONPARSE"; + this.systemError = er; + Error.captureStackTrace(this, caller || this.constructor); + } + get name() { + return this.constructor.name; + } + set name(n) { + } + get [Symbol.toStringTag]() { + return this.constructor.name; + } + }; + var parseJson = /* @__PURE__ */ __name((txt, reviver) => { + const result = JSON.parse(txt, reviver); + if (result && typeof result === "object") { + const match = txt.match(EMPTY) || txt.match(FORMAT) || [null, "", ""]; + result[NEWLINE] = match[1] ?? DEFAULT_NEWLINE; + result[INDENT] = match[2] ?? DEFAULT_INDENT; + } + return result; + }, "parseJson"); + var parseJsonError = /* @__PURE__ */ __name((raw, reviver, context) => { + const txt = stripBOM(raw); + try { + return parseJson(txt, reviver); + } catch (e) { + if (typeof raw !== "string" && !Buffer.isBuffer(raw)) { + const msg = Array.isArray(raw) && raw.length === 0 ? "an empty array" : String(raw); + throw Object.assign( + new TypeError(`Cannot parse ${msg}`), + { code: "EJSONPARSE", systemError: e } + ); + } + throw new JSONParseError(e, txt, context, parseJsonError); + } + }, "parseJsonError"); + module2.exports = parseJsonError; + parseJsonError.JSONParseError = JSONParseError; + parseJsonError.noExceptions = (raw, reviver) => { + try { + return parseJson(stripBOM(raw), reviver); + } catch { + } + }; + } +}); + +// node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/update-dependencies.js +var require_update_dependencies = __commonJS({ + "node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/update-dependencies.js"(exports2, module2) { + var depTypes = /* @__PURE__ */ new Set([ + "dependencies", + "optionalDependencies", + "devDependencies", + "peerDependencies" + ]); + var orderDeps = /* @__PURE__ */ __name((content) => { + for (const type of depTypes) { + if (content && content[type]) { + content[type] = Object.keys(content[type]).sort((a, b) => a.localeCompare(b, "en")).reduce((res, key) => { + res[key] = content[type][key]; + return res; + }, {}); + } + } + return content; + }, "orderDeps"); + var updateDependencies = /* @__PURE__ */ __name(({ content, originalContent }) => { + const pkg = orderDeps({ + ...content + }); + if (pkg.dependencies) { + if (pkg.optionalDependencies) { + for (const name of Object.keys(pkg.optionalDependencies)) { + delete pkg.dependencies[name]; + } + } + } + const result = { ...originalContent }; + for (const type of depTypes) { + if (pkg[type]) { + result[type] = pkg[type]; + } + const emptyDepType = pkg[type] && typeof pkg === "object" && Object.keys(pkg[type]).length === 0; + if (emptyDepType) { + delete result[type]; + } + } + const { dependencies: origProd, peerDependencies: origPeer } = originalContent || {}; + const { peerDependencies: newPeer } = result; + if (origProd && origPeer && newPeer) { + for (const name of Object.keys(origPeer)) { + if (origProd[name] !== void 0 && newPeer[name] !== void 0) { + result.dependencies = result.dependencies || {}; + result.dependencies[name] = newPeer[name]; + } + } + } + return result; + }, "updateDependencies"); + updateDependencies.knownKeys = depTypes; + module2.exports = updateDependencies; + } +}); + +// node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/update-scripts.js +var require_update_scripts = __commonJS({ + "node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/update-scripts.js"(exports2, module2) { + var updateScripts = /* @__PURE__ */ __name(({ content, originalContent = {} }) => { + const newScripts = content.scripts; + if (!newScripts) { + return originalContent; + } + const hasInvalidScripts = /* @__PURE__ */ __name(() => Object.entries(newScripts).some(([key, value]) => typeof key !== "string" || typeof value !== "string"), "hasInvalidScripts"); + if (hasInvalidScripts()) { + throw Object.assign( + new TypeError( + "package.json scripts should be a key-value pair of strings." + ), + { code: "ESCRIPTSINVALID" } + ); + } + return { + ...originalContent, + scripts: { + ...newScripts + } + }; + }, "updateScripts"); + module2.exports = updateScripts; + } +}); + +// node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/update-workspaces.js +var require_update_workspaces = __commonJS({ + "node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/update-workspaces.js"(exports2, module2) { + var updateWorkspaces = /* @__PURE__ */ __name(({ content, originalContent = {} }) => { + const newWorkspaces = content.workspaces; + if (!newWorkspaces) { + return originalContent; + } + const hasInvalidWorkspaces = /* @__PURE__ */ __name(() => newWorkspaces.some((w) => !(typeof w === "string")), "hasInvalidWorkspaces"); + if (!newWorkspaces.length || hasInvalidWorkspaces()) { + throw Object.assign( + new TypeError("workspaces should be an array of strings."), + { code: "EWORKSPACESINVALID" } + ); + } + return { + ...originalContent, + workspaces: [ + ...newWorkspaces + ] + }; + }, "updateWorkspaces"); + module2.exports = updateWorkspaces; + } +}); + +// node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/debug.js +var require_debug = __commonJS({ + "node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/debug.js"(exports2, module2) { + "use strict"; + var debug = typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error("SEMVER", ...args) : () => { + }; + module2.exports = debug; + } +}); + +// node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/constants.js +var require_constants = __commonJS({ + "node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/constants.js"(exports2, module2) { + "use strict"; + var SEMVER_SPEC_VERSION = "2.0.0"; + var MAX_LENGTH = 256; + var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || /* istanbul ignore next */ + 9007199254740991; + var MAX_SAFE_COMPONENT_LENGTH = 16; + var MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6; + var RELEASE_TYPES = [ + "major", + "premajor", + "minor", + "preminor", + "patch", + "prepatch", + "prerelease" + ]; + module2.exports = { + MAX_LENGTH, + MAX_SAFE_COMPONENT_LENGTH, + MAX_SAFE_BUILD_LENGTH, + MAX_SAFE_INTEGER, + RELEASE_TYPES, + SEMVER_SPEC_VERSION, + FLAG_INCLUDE_PRERELEASE: 1, + FLAG_LOOSE: 2 + }; + } +}); + +// node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/re.js +var require_re = __commonJS({ + "node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/re.js"(exports2, module2) { + "use strict"; + var { + MAX_SAFE_COMPONENT_LENGTH, + MAX_SAFE_BUILD_LENGTH, + MAX_LENGTH + } = require_constants(); + var debug = require_debug(); + exports2 = module2.exports = {}; + var re = exports2.re = []; + var safeRe = exports2.safeRe = []; + var src = exports2.src = []; + var safeSrc = exports2.safeSrc = []; + var t = exports2.t = {}; + var R = 0; + var LETTERDASHNUMBER = "[a-zA-Z0-9-]"; + var safeRegexReplacements = [ + ["\\s", 1], + ["\\d", MAX_LENGTH], + [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH] + ]; + var makeSafeRegex = /* @__PURE__ */ __name((value) => { + for (const [token, max] of safeRegexReplacements) { + value = value.split(`${token}*`).join(`${token}{0,${max}}`).split(`${token}+`).join(`${token}{1,${max}}`); + } + return value; + }, "makeSafeRegex"); + var createToken = /* @__PURE__ */ __name((name, value, isGlobal) => { + const safe = makeSafeRegex(value); + const index = R++; + debug(name, index, value); + t[name] = index; + src[index] = value; + safeSrc[index] = safe; + re[index] = new RegExp(value, isGlobal ? "g" : void 0); + safeRe[index] = new RegExp(safe, isGlobal ? "g" : void 0); + }, "createToken"); + createToken("NUMERICIDENTIFIER", "0|[1-9]\\d*"); + createToken("NUMERICIDENTIFIERLOOSE", "\\d+"); + createToken("NONNUMERICIDENTIFIER", `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`); + createToken("MAINVERSION", `(${src[t.NUMERICIDENTIFIER]})\\.(${src[t.NUMERICIDENTIFIER]})\\.(${src[t.NUMERICIDENTIFIER]})`); + createToken("MAINVERSIONLOOSE", `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.(${src[t.NUMERICIDENTIFIERLOOSE]})\\.(${src[t.NUMERICIDENTIFIERLOOSE]})`); + createToken("PRERELEASEIDENTIFIER", `(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIER]})`); + createToken("PRERELEASEIDENTIFIERLOOSE", `(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIERLOOSE]})`); + createToken("PRERELEASE", `(?:-(${src[t.PRERELEASEIDENTIFIER]}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`); + createToken("PRERELEASELOOSE", `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`); + createToken("BUILDIDENTIFIER", `${LETTERDASHNUMBER}+`); + createToken("BUILD", `(?:\\+(${src[t.BUILDIDENTIFIER]}(?:\\.${src[t.BUILDIDENTIFIER]})*))`); + createToken("FULLPLAIN", `v?${src[t.MAINVERSION]}${src[t.PRERELEASE]}?${src[t.BUILD]}?`); + createToken("FULL", `^${src[t.FULLPLAIN]}$`); + createToken("LOOSEPLAIN", `[v=\\s]*${src[t.MAINVERSIONLOOSE]}${src[t.PRERELEASELOOSE]}?${src[t.BUILD]}?`); + createToken("LOOSE", `^${src[t.LOOSEPLAIN]}$`); + createToken("GTLT", "((?:<|>)?=?)"); + createToken("XRANGEIDENTIFIERLOOSE", `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`); + createToken("XRANGEIDENTIFIER", `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`); + createToken("XRANGEPLAIN", `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})(?:\\.(${src[t.XRANGEIDENTIFIER]})(?:\\.(${src[t.XRANGEIDENTIFIER]})(?:${src[t.PRERELEASE]})?${src[t.BUILD]}?)?)?`); + createToken("XRANGEPLAINLOOSE", `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:${src[t.PRERELEASELOOSE]})?${src[t.BUILD]}?)?)?`); + createToken("XRANGE", `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`); + createToken("XRANGELOOSE", `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`); + createToken("COERCEPLAIN", `${"(^|[^\\d])(\\d{1,"}${MAX_SAFE_COMPONENT_LENGTH}})(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`); + createToken("COERCE", `${src[t.COERCEPLAIN]}(?:$|[^\\d])`); + createToken("COERCEFULL", src[t.COERCEPLAIN] + `(?:${src[t.PRERELEASE]})?(?:${src[t.BUILD]})?(?:$|[^\\d])`); + createToken("COERCERTL", src[t.COERCE], true); + createToken("COERCERTLFULL", src[t.COERCEFULL], true); + createToken("LONETILDE", "(?:~>?)"); + createToken("TILDETRIM", `(\\s*)${src[t.LONETILDE]}\\s+`, true); + exports2.tildeTrimReplace = "$1~"; + createToken("TILDE", `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`); + createToken("TILDELOOSE", `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`); + createToken("LONECARET", "(?:\\^)"); + createToken("CARETTRIM", `(\\s*)${src[t.LONECARET]}\\s+`, true); + exports2.caretTrimReplace = "$1^"; + createToken("CARET", `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`); + createToken("CARETLOOSE", `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`); + createToken("COMPARATORLOOSE", `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`); + createToken("COMPARATOR", `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`); + createToken("COMPARATORTRIM", `(\\s*)${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true); + exports2.comparatorTrimReplace = "$1$2$3"; + createToken("HYPHENRANGE", `^\\s*(${src[t.XRANGEPLAIN]})\\s+-\\s+(${src[t.XRANGEPLAIN]})\\s*$`); + createToken("HYPHENRANGELOOSE", `^\\s*(${src[t.XRANGEPLAINLOOSE]})\\s+-\\s+(${src[t.XRANGEPLAINLOOSE]})\\s*$`); + createToken("STAR", "(<|>)?=?\\s*\\*"); + createToken("GTE0", "^\\s*>=\\s*0\\.0\\.0\\s*$"); + createToken("GTE0PRE", "^\\s*>=\\s*0\\.0\\.0-0\\s*$"); + } +}); + +// node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/parse-options.js +var require_parse_options = __commonJS({ + "node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/parse-options.js"(exports2, module2) { + "use strict"; + var looseOption = Object.freeze({ loose: true }); + var emptyOpts = Object.freeze({}); + var parseOptions = /* @__PURE__ */ __name((options) => { + if (!options) { + return emptyOpts; + } + if (typeof options !== "object") { + return looseOption; + } + return options; + }, "parseOptions"); + module2.exports = parseOptions; + } +}); + +// node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/identifiers.js +var require_identifiers = __commonJS({ + "node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/identifiers.js"(exports2, module2) { + "use strict"; + var numeric = /^[0-9]+$/; + var compareIdentifiers = /* @__PURE__ */ __name((a, b) => { + const anum = numeric.test(a); + const bnum = numeric.test(b); + if (anum && bnum) { + a = +a; + b = +b; + } + return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1; + }, "compareIdentifiers"); + var rcompareIdentifiers = /* @__PURE__ */ __name((a, b) => compareIdentifiers(b, a), "rcompareIdentifiers"); + module2.exports = { + compareIdentifiers, + rcompareIdentifiers + }; + } +}); + +// node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/semver.js +var require_semver = __commonJS({ + "node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/semver.js"(exports2, module2) { + "use strict"; + var debug = require_debug(); + var { MAX_LENGTH, MAX_SAFE_INTEGER } = require_constants(); + var { safeRe: re, t } = require_re(); + var parseOptions = require_parse_options(); + var { compareIdentifiers } = require_identifiers(); + var SemVer = class _SemVer { + static { + __name(this, "SemVer"); + } + constructor(version, options) { + options = parseOptions(options); + if (version instanceof _SemVer) { + if (version.loose === !!options.loose && version.includePrerelease === !!options.includePrerelease) { + return version; + } else { + version = version.version; + } + } else if (typeof version !== "string") { + throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version}".`); + } + if (version.length > MAX_LENGTH) { + throw new TypeError( + `version is longer than ${MAX_LENGTH} characters` + ); + } + debug("SemVer", version, options); + this.options = options; + this.loose = !!options.loose; + this.includePrerelease = !!options.includePrerelease; + const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]); + if (!m) { + throw new TypeError(`Invalid Version: ${version}`); + } + this.raw = version; + this.major = +m[1]; + this.minor = +m[2]; + this.patch = +m[3]; + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError("Invalid major version"); + } + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError("Invalid minor version"); + } + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError("Invalid patch version"); + } + if (!m[4]) { + this.prerelease = []; + } else { + this.prerelease = m[4].split(".").map((id) => { + if (/^[0-9]+$/.test(id)) { + const num = +id; + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num; + } + } + return id; + }); + } + this.build = m[5] ? m[5].split(".") : []; + this.format(); + } + format() { + this.version = `${this.major}.${this.minor}.${this.patch}`; + if (this.prerelease.length) { + this.version += `-${this.prerelease.join(".")}`; + } + return this.version; + } + toString() { + return this.version; + } + compare(other) { + debug("SemVer.compare", this.version, this.options, other); + if (!(other instanceof _SemVer)) { + if (typeof other === "string" && other === this.version) { + return 0; + } + other = new _SemVer(other, this.options); + } + if (other.version === this.version) { + return 0; + } + return this.compareMain(other) || this.comparePre(other); + } + compareMain(other) { + if (!(other instanceof _SemVer)) { + other = new _SemVer(other, this.options); + } + return compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch); + } + comparePre(other) { + if (!(other instanceof _SemVer)) { + other = new _SemVer(other, this.options); + } + if (this.prerelease.length && !other.prerelease.length) { + return -1; + } else if (!this.prerelease.length && other.prerelease.length) { + return 1; + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0; + } + let i = 0; + do { + const a = this.prerelease[i]; + const b = other.prerelease[i]; + debug("prerelease compare", i, a, b); + if (a === void 0 && b === void 0) { + return 0; + } else if (b === void 0) { + return 1; + } else if (a === void 0) { + return -1; + } else if (a === b) { + continue; + } else { + return compareIdentifiers(a, b); + } + } while (++i); + } + compareBuild(other) { + if (!(other instanceof _SemVer)) { + other = new _SemVer(other, this.options); + } + let i = 0; + do { + const a = this.build[i]; + const b = other.build[i]; + debug("build compare", i, a, b); + if (a === void 0 && b === void 0) { + return 0; + } else if (b === void 0) { + return 1; + } else if (a === void 0) { + return -1; + } else if (a === b) { + continue; + } else { + return compareIdentifiers(a, b); + } + } while (++i); + } + // preminor will bump the version up to the next minor release, and immediately + // down to pre-release. premajor and prepatch work the same way. + inc(release, identifier, identifierBase) { + if (release.startsWith("pre")) { + if (!identifier && identifierBase === false) { + throw new Error("invalid increment argument: identifier is empty"); + } + if (identifier) { + const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE]); + if (!match || match[1] !== identifier) { + throw new Error(`invalid identifier: ${identifier}`); + } + } + } + switch (release) { + case "premajor": + this.prerelease.length = 0; + this.patch = 0; + this.minor = 0; + this.major++; + this.inc("pre", identifier, identifierBase); + break; + case "preminor": + this.prerelease.length = 0; + this.patch = 0; + this.minor++; + this.inc("pre", identifier, identifierBase); + break; + case "prepatch": + this.prerelease.length = 0; + this.inc("patch", identifier, identifierBase); + this.inc("pre", identifier, identifierBase); + break; + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case "prerelease": + if (this.prerelease.length === 0) { + this.inc("patch", identifier, identifierBase); + } + this.inc("pre", identifier, identifierBase); + break; + case "release": + if (this.prerelease.length === 0) { + throw new Error(`version ${this.raw} is not a prerelease`); + } + this.prerelease.length = 0; + break; + case "major": + if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) { + this.major++; + } + this.minor = 0; + this.patch = 0; + this.prerelease = []; + break; + case "minor": + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++; + } + this.patch = 0; + this.prerelease = []; + break; + case "patch": + if (this.prerelease.length === 0) { + this.patch++; + } + this.prerelease = []; + break; + // This probably shouldn't be used publicly. + // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. + case "pre": { + const base = Number(identifierBase) ? 1 : 0; + if (this.prerelease.length === 0) { + this.prerelease = [base]; + } else { + let i = this.prerelease.length; + while (--i >= 0) { + if (typeof this.prerelease[i] === "number") { + this.prerelease[i]++; + i = -2; + } + } + if (i === -1) { + if (identifier === this.prerelease.join(".") && identifierBase === false) { + throw new Error("invalid increment argument: identifier already exists"); + } + this.prerelease.push(base); + } + } + if (identifier) { + let prerelease = [identifier, base]; + if (identifierBase === false) { + prerelease = [identifier]; + } + if (compareIdentifiers(this.prerelease[0], identifier) === 0) { + if (isNaN(this.prerelease[1])) { + this.prerelease = prerelease; + } + } else { + this.prerelease = prerelease; + } + } + break; + } + default: + throw new Error(`invalid increment argument: ${release}`); + } + this.raw = this.format(); + if (this.build.length) { + this.raw += `+${this.build.join(".")}`; + } + return this; + } + }; + module2.exports = SemVer; + } +}); + +// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/parse.js +var require_parse = __commonJS({ + "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/parse.js"(exports2, module2) { + "use strict"; + var SemVer = require_semver(); + var parse = /* @__PURE__ */ __name((version, options, throwErrors = false) => { + if (version instanceof SemVer) { + return version; + } + try { + return new SemVer(version, options); + } catch (er) { + if (!throwErrors) { + return null; + } + throw er; + } + }, "parse"); + module2.exports = parse; + } +}); + +// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/valid.js +var require_valid = __commonJS({ + "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/valid.js"(exports2, module2) { + "use strict"; + var parse = require_parse(); + var valid = /* @__PURE__ */ __name((version, options) => { + const v = parse(version, options); + return v ? v.version : null; + }, "valid"); + module2.exports = valid; + } +}); + +// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/clean.js +var require_clean = __commonJS({ + "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/clean.js"(exports2, module2) { + "use strict"; + var parse = require_parse(); + var clean = /* @__PURE__ */ __name((version, options) => { + const s = parse(version.trim().replace(/^[=v]+/, ""), options); + return s ? s.version : null; + }, "clean"); + module2.exports = clean; + } +}); + +// node_modules/.pnpm/proc-log@6.1.0/node_modules/proc-log/lib/index.js +var require_lib2 = __commonJS({ + "node_modules/.pnpm/proc-log@6.1.0/node_modules/proc-log/lib/index.js"(exports2, module2) { + var META = Symbol("proc-log.meta"); + module2.exports = { + META, + output: { + LEVELS: [ + "standard", + "error", + "buffer", + "flush" + ], + KEYS: { + standard: "standard", + error: "error", + buffer: "buffer", + flush: "flush" + }, + standard: /* @__PURE__ */ __name(function(...args) { + return process.emit("output", "standard", ...args); + }, "standard"), + error: /* @__PURE__ */ __name(function(...args) { + return process.emit("output", "error", ...args); + }, "error"), + buffer: /* @__PURE__ */ __name(function(...args) { + return process.emit("output", "buffer", ...args); + }, "buffer"), + flush: /* @__PURE__ */ __name(function(...args) { + return process.emit("output", "flush", ...args); + }, "flush") + }, + log: { + LEVELS: [ + "notice", + "error", + "warn", + "info", + "verbose", + "http", + "silly", + "timing", + "pause", + "resume" + ], + KEYS: { + notice: "notice", + error: "error", + warn: "warn", + info: "info", + verbose: "verbose", + http: "http", + silly: "silly", + timing: "timing", + pause: "pause", + resume: "resume" + }, + error: /* @__PURE__ */ __name(function(...args) { + return process.emit("log", "error", ...args); + }, "error"), + notice: /* @__PURE__ */ __name(function(...args) { + return process.emit("log", "notice", ...args); + }, "notice"), + warn: /* @__PURE__ */ __name(function(...args) { + return process.emit("log", "warn", ...args); + }, "warn"), + info: /* @__PURE__ */ __name(function(...args) { + return process.emit("log", "info", ...args); + }, "info"), + verbose: /* @__PURE__ */ __name(function(...args) { + return process.emit("log", "verbose", ...args); + }, "verbose"), + http: /* @__PURE__ */ __name(function(...args) { + return process.emit("log", "http", ...args); + }, "http"), + silly: /* @__PURE__ */ __name(function(...args) { + return process.emit("log", "silly", ...args); + }, "silly"), + timing: /* @__PURE__ */ __name(function(...args) { + return process.emit("log", "timing", ...args); + }, "timing"), + pause: /* @__PURE__ */ __name(function() { + return process.emit("log", "pause"); + }, "pause"), + resume: /* @__PURE__ */ __name(function() { + return process.emit("log", "resume"); + }, "resume") + }, + time: { + LEVELS: [ + "start", + "end" + ], + KEYS: { + start: "start", + end: "end" + }, + start: /* @__PURE__ */ __name(function(name, fn) { + process.emit("time", "start", name); + function end() { + return process.emit("time", "end", name); + } + __name(end, "end"); + if (typeof fn === "function") { + const res = fn(); + if (res && res.finally) { + return res.finally(end); + } + end(); + return res; + } + return end; + }, "start"), + end: /* @__PURE__ */ __name(function(name) { + return process.emit("time", "end", name); + }, "end") + }, + input: { + LEVELS: [ + "start", + "end", + "read" + ], + KEYS: { + start: "start", + end: "end", + read: "read" + }, + start: /* @__PURE__ */ __name(function(...args) { + let fn; + if (typeof args[0] === "function") { + fn = args.shift(); + } + process.emit("input", "start", ...args); + function end() { + return process.emit("input", "end", ...args); + } + __name(end, "end"); + if (typeof fn === "function") { + const res = fn(); + if (res && res.finally) { + return res.finally(end); + } + end(); + return res; + } + return end; + }, "start"), + end: /* @__PURE__ */ __name(function(...args) { + return process.emit("input", "end", ...args); + }, "end"), + read: /* @__PURE__ */ __name(function(...args) { + let resolve, reject; + const promise = new Promise((_resolve, _reject) => { + resolve = _resolve; + reject = _reject; + }); + process.emit("input", "read", resolve, reject, ...args); + return promise; + }, "read") + } + }; + } +}); + +// node_modules/.pnpm/lru-cache@11.2.2/node_modules/lru-cache/dist/commonjs/index.js +var require_commonjs = __commonJS({ + "node_modules/.pnpm/lru-cache@11.2.2/node_modules/lru-cache/dist/commonjs/index.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.LRUCache = void 0; + var defaultPerf = typeof performance === "object" && performance && typeof performance.now === "function" ? performance : Date; + var warned = /* @__PURE__ */ new Set(); + var PROCESS = typeof process === "object" && !!process ? process : {}; + var emitWarning = /* @__PURE__ */ __name((msg, type, code, fn) => { + typeof PROCESS.emitWarning === "function" ? PROCESS.emitWarning(msg, type, code, fn) : console.error(`[${code}] ${type}: ${msg}`); + }, "emitWarning"); + var AC = globalThis.AbortController; + var AS = globalThis.AbortSignal; + if (typeof AC === "undefined") { + AS = class AbortSignal { + static { + __name(this, "AbortSignal"); + } + onabort; + _onabort = []; + reason; + aborted = false; + addEventListener(_, fn) { + this._onabort.push(fn); + } + }; + AC = class AbortController { + static { + __name(this, "AbortController"); + } + constructor() { + warnACPolyfill(); + } + signal = new AS(); + abort(reason) { + if (this.signal.aborted) + return; + this.signal.reason = reason; + this.signal.aborted = true; + for (const fn of this.signal._onabort) { + fn(reason); + } + this.signal.onabort?.(reason); + } + }; + let printACPolyfillWarning = PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== "1"; + const warnACPolyfill = /* @__PURE__ */ __name(() => { + if (!printACPolyfillWarning) + return; + printACPolyfillWarning = false; + emitWarning("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.", "NO_ABORT_CONTROLLER", "ENOTSUP", warnACPolyfill); + }, "warnACPolyfill"); + } + var shouldWarn = /* @__PURE__ */ __name((code) => !warned.has(code), "shouldWarn"); + var TYPE = Symbol("type"); + var isPosInt = /* @__PURE__ */ __name((n) => n && n === Math.floor(n) && n > 0 && isFinite(n), "isPosInt"); + var getUintArray = /* @__PURE__ */ __name((max) => !isPosInt(max) ? null : max <= Math.pow(2, 8) ? Uint8Array : max <= Math.pow(2, 16) ? Uint16Array : max <= Math.pow(2, 32) ? Uint32Array : max <= Number.MAX_SAFE_INTEGER ? ZeroArray : null, "getUintArray"); + var ZeroArray = class extends Array { + static { + __name(this, "ZeroArray"); + } + constructor(size) { + super(size); + this.fill(0); + } + }; + var Stack = class _Stack { + static { + __name(this, "Stack"); + } + heap; + length; + // private constructor + static #constructing = false; + static create(max) { + const HeapCls = getUintArray(max); + if (!HeapCls) + return []; + _Stack.#constructing = true; + const s = new _Stack(max, HeapCls); + _Stack.#constructing = false; + return s; + } + constructor(max, HeapCls) { + if (!_Stack.#constructing) { + throw new TypeError("instantiate Stack using Stack.create(n)"); + } + this.heap = new HeapCls(max); + this.length = 0; + } + push(n) { + this.heap[this.length++] = n; + } + pop() { + return this.heap[--this.length]; + } + }; + var LRUCache = class _LRUCache { + static { + __name(this, "LRUCache"); + } + // options that cannot be changed without disaster + #max; + #maxSize; + #dispose; + #onInsert; + #disposeAfter; + #fetchMethod; + #memoMethod; + #perf; + /** + * {@link LRUCache.OptionsBase.perf} + */ + get perf() { + return this.#perf; + } + /** + * {@link LRUCache.OptionsBase.ttl} + */ + ttl; + /** + * {@link LRUCache.OptionsBase.ttlResolution} + */ + ttlResolution; + /** + * {@link LRUCache.OptionsBase.ttlAutopurge} + */ + ttlAutopurge; + /** + * {@link LRUCache.OptionsBase.updateAgeOnGet} + */ + updateAgeOnGet; + /** + * {@link LRUCache.OptionsBase.updateAgeOnHas} + */ + updateAgeOnHas; + /** + * {@link LRUCache.OptionsBase.allowStale} + */ + allowStale; + /** + * {@link LRUCache.OptionsBase.noDisposeOnSet} + */ + noDisposeOnSet; + /** + * {@link LRUCache.OptionsBase.noUpdateTTL} + */ + noUpdateTTL; + /** + * {@link LRUCache.OptionsBase.maxEntrySize} + */ + maxEntrySize; + /** + * {@link LRUCache.OptionsBase.sizeCalculation} + */ + sizeCalculation; + /** + * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection} + */ + noDeleteOnFetchRejection; + /** + * {@link LRUCache.OptionsBase.noDeleteOnStaleGet} + */ + noDeleteOnStaleGet; + /** + * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort} + */ + allowStaleOnFetchAbort; + /** + * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection} + */ + allowStaleOnFetchRejection; + /** + * {@link LRUCache.OptionsBase.ignoreFetchAbort} + */ + ignoreFetchAbort; + // computed properties + #size; + #calculatedSize; + #keyMap; + #keyList; + #valList; + #next; + #prev; + #head; + #tail; + #free; + #disposed; + #sizes; + #starts; + #ttls; + #hasDispose; + #hasFetchMethod; + #hasDisposeAfter; + #hasOnInsert; + /** + * Do not call this method unless you need to inspect the + * inner workings of the cache. If anything returned by this + * object is modified in any way, strange breakage may occur. + * + * These fields are private for a reason! + * + * @internal + */ + static unsafeExposeInternals(c) { + return { + // properties + starts: c.#starts, + ttls: c.#ttls, + sizes: c.#sizes, + keyMap: c.#keyMap, + keyList: c.#keyList, + valList: c.#valList, + next: c.#next, + prev: c.#prev, + get head() { + return c.#head; + }, + get tail() { + return c.#tail; + }, + free: c.#free, + // methods + isBackgroundFetch: /* @__PURE__ */ __name((p) => c.#isBackgroundFetch(p), "isBackgroundFetch"), + backgroundFetch: /* @__PURE__ */ __name((k, index, options, context) => c.#backgroundFetch(k, index, options, context), "backgroundFetch"), + moveToTail: /* @__PURE__ */ __name((index) => c.#moveToTail(index), "moveToTail"), + indexes: /* @__PURE__ */ __name((options) => c.#indexes(options), "indexes"), + rindexes: /* @__PURE__ */ __name((options) => c.#rindexes(options), "rindexes"), + isStale: /* @__PURE__ */ __name((index) => c.#isStale(index), "isStale") + }; + } + // Protected read-only members + /** + * {@link LRUCache.OptionsBase.max} (read-only) + */ + get max() { + return this.#max; + } + /** + * {@link LRUCache.OptionsBase.maxSize} (read-only) + */ + get maxSize() { + return this.#maxSize; + } + /** + * The total computed size of items in the cache (read-only) + */ + get calculatedSize() { + return this.#calculatedSize; + } + /** + * The number of items stored in the cache (read-only) + */ + get size() { + return this.#size; + } + /** + * {@link LRUCache.OptionsBase.fetchMethod} (read-only) + */ + get fetchMethod() { + return this.#fetchMethod; + } + get memoMethod() { + return this.#memoMethod; + } + /** + * {@link LRUCache.OptionsBase.dispose} (read-only) + */ + get dispose() { + return this.#dispose; + } + /** + * {@link LRUCache.OptionsBase.onInsert} (read-only) + */ + get onInsert() { + return this.#onInsert; + } + /** + * {@link LRUCache.OptionsBase.disposeAfter} (read-only) + */ + get disposeAfter() { + return this.#disposeAfter; + } + constructor(options) { + const { max = 0, ttl, ttlResolution = 1, ttlAutopurge, updateAgeOnGet, updateAgeOnHas, allowStale, dispose, onInsert, disposeAfter, noDisposeOnSet, noUpdateTTL, maxSize = 0, maxEntrySize = 0, sizeCalculation, fetchMethod, memoMethod, noDeleteOnFetchRejection, noDeleteOnStaleGet, allowStaleOnFetchRejection, allowStaleOnFetchAbort, ignoreFetchAbort, perf } = options; + if (perf !== void 0) { + if (typeof perf?.now !== "function") { + throw new TypeError("perf option must have a now() method if specified"); + } + } + this.#perf = perf ?? defaultPerf; + if (max !== 0 && !isPosInt(max)) { + throw new TypeError("max option must be a nonnegative integer"); + } + const UintArray = max ? getUintArray(max) : Array; + if (!UintArray) { + throw new Error("invalid max value: " + max); + } + this.#max = max; + this.#maxSize = maxSize; + this.maxEntrySize = maxEntrySize || this.#maxSize; + this.sizeCalculation = sizeCalculation; + if (this.sizeCalculation) { + if (!this.#maxSize && !this.maxEntrySize) { + throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize"); + } + if (typeof this.sizeCalculation !== "function") { + throw new TypeError("sizeCalculation set to non-function"); + } + } + if (memoMethod !== void 0 && typeof memoMethod !== "function") { + throw new TypeError("memoMethod must be a function if defined"); + } + this.#memoMethod = memoMethod; + if (fetchMethod !== void 0 && typeof fetchMethod !== "function") { + throw new TypeError("fetchMethod must be a function if specified"); + } + this.#fetchMethod = fetchMethod; + this.#hasFetchMethod = !!fetchMethod; + this.#keyMap = /* @__PURE__ */ new Map(); + this.#keyList = new Array(max).fill(void 0); + this.#valList = new Array(max).fill(void 0); + this.#next = new UintArray(max); + this.#prev = new UintArray(max); + this.#head = 0; + this.#tail = 0; + this.#free = Stack.create(max); + this.#size = 0; + this.#calculatedSize = 0; + if (typeof dispose === "function") { + this.#dispose = dispose; + } + if (typeof onInsert === "function") { + this.#onInsert = onInsert; + } + if (typeof disposeAfter === "function") { + this.#disposeAfter = disposeAfter; + this.#disposed = []; + } else { + this.#disposeAfter = void 0; + this.#disposed = void 0; + } + this.#hasDispose = !!this.#dispose; + this.#hasOnInsert = !!this.#onInsert; + this.#hasDisposeAfter = !!this.#disposeAfter; + this.noDisposeOnSet = !!noDisposeOnSet; + this.noUpdateTTL = !!noUpdateTTL; + this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection; + this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection; + this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort; + this.ignoreFetchAbort = !!ignoreFetchAbort; + if (this.maxEntrySize !== 0) { + if (this.#maxSize !== 0) { + if (!isPosInt(this.#maxSize)) { + throw new TypeError("maxSize must be a positive integer if specified"); + } + } + if (!isPosInt(this.maxEntrySize)) { + throw new TypeError("maxEntrySize must be a positive integer if specified"); + } + this.#initializeSizeTracking(); + } + this.allowStale = !!allowStale; + this.noDeleteOnStaleGet = !!noDeleteOnStaleGet; + this.updateAgeOnGet = !!updateAgeOnGet; + this.updateAgeOnHas = !!updateAgeOnHas; + this.ttlResolution = isPosInt(ttlResolution) || ttlResolution === 0 ? ttlResolution : 1; + this.ttlAutopurge = !!ttlAutopurge; + this.ttl = ttl || 0; + if (this.ttl) { + if (!isPosInt(this.ttl)) { + throw new TypeError("ttl must be a positive integer if specified"); + } + this.#initializeTTLTracking(); + } + if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) { + throw new TypeError("At least one of max, maxSize, or ttl is required"); + } + if (!this.ttlAutopurge && !this.#max && !this.#maxSize) { + const code = "LRU_CACHE_UNBOUNDED"; + if (shouldWarn(code)) { + warned.add(code); + const msg = "TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption."; + emitWarning(msg, "UnboundedCacheWarning", code, _LRUCache); + } + } + } + /** + * Return the number of ms left in the item's TTL. If item is not in cache, + * returns `0`. Returns `Infinity` if item is in cache without a defined TTL. + */ + getRemainingTTL(key) { + return this.#keyMap.has(key) ? Infinity : 0; + } + #initializeTTLTracking() { + const ttls = new ZeroArray(this.#max); + const starts = new ZeroArray(this.#max); + this.#ttls = ttls; + this.#starts = starts; + this.#setItemTTL = (index, ttl, start = this.#perf.now()) => { + starts[index] = ttl !== 0 ? start : 0; + ttls[index] = ttl; + if (ttl !== 0 && this.ttlAutopurge) { + const t = setTimeout(() => { + if (this.#isStale(index)) { + this.#delete(this.#keyList[index], "expire"); + } + }, ttl + 1); + if (t.unref) { + t.unref(); + } + } + }; + this.#updateItemAge = (index) => { + starts[index] = ttls[index] !== 0 ? this.#perf.now() : 0; + }; + this.#statusTTL = (status, index) => { + if (ttls[index]) { + const ttl = ttls[index]; + const start = starts[index]; + if (!ttl || !start) + return; + status.ttl = ttl; + status.start = start; + status.now = cachedNow || getNow(); + const age = status.now - start; + status.remainingTTL = ttl - age; + } + }; + let cachedNow = 0; + const getNow = /* @__PURE__ */ __name(() => { + const n = this.#perf.now(); + if (this.ttlResolution > 0) { + cachedNow = n; + const t = setTimeout(() => cachedNow = 0, this.ttlResolution); + if (t.unref) { + t.unref(); + } + } + return n; + }, "getNow"); + this.getRemainingTTL = (key) => { + const index = this.#keyMap.get(key); + if (index === void 0) { + return 0; + } + const ttl = ttls[index]; + const start = starts[index]; + if (!ttl || !start) { + return Infinity; + } + const age = (cachedNow || getNow()) - start; + return ttl - age; + }; + this.#isStale = (index) => { + const s = starts[index]; + const t = ttls[index]; + return !!t && !!s && (cachedNow || getNow()) - s > t; + }; + } + // conditionally set private methods related to TTL + #updateItemAge = /* @__PURE__ */ __name(() => { + }, "#updateItemAge"); + #statusTTL = /* @__PURE__ */ __name(() => { + }, "#statusTTL"); + #setItemTTL = /* @__PURE__ */ __name(() => { + }, "#setItemTTL"); + /* c8 ignore stop */ + #isStale = /* @__PURE__ */ __name(() => false, "#isStale"); + #initializeSizeTracking() { + const sizes = new ZeroArray(this.#max); + this.#calculatedSize = 0; + this.#sizes = sizes; + this.#removeItemSize = (index) => { + this.#calculatedSize -= sizes[index]; + sizes[index] = 0; + }; + this.#requireSize = (k, v, size, sizeCalculation) => { + if (this.#isBackgroundFetch(v)) { + return 0; + } + if (!isPosInt(size)) { + if (sizeCalculation) { + if (typeof sizeCalculation !== "function") { + throw new TypeError("sizeCalculation must be a function"); + } + size = sizeCalculation(v, k); + if (!isPosInt(size)) { + throw new TypeError("sizeCalculation return invalid (expect positive integer)"); + } + } else { + throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set."); + } + } + return size; + }; + this.#addItemSize = (index, size, status) => { + sizes[index] = size; + if (this.#maxSize) { + const maxSize = this.#maxSize - sizes[index]; + while (this.#calculatedSize > maxSize) { + this.#evict(true); + } + } + this.#calculatedSize += sizes[index]; + if (status) { + status.entrySize = size; + status.totalCalculatedSize = this.#calculatedSize; + } + }; + } + #removeItemSize = /* @__PURE__ */ __name((_i) => { + }, "#removeItemSize"); + #addItemSize = /* @__PURE__ */ __name((_i, _s, _st) => { + }, "#addItemSize"); + #requireSize = /* @__PURE__ */ __name((_k, _v, size, sizeCalculation) => { + if (size || sizeCalculation) { + throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache"); + } + return 0; + }, "#requireSize"); + *#indexes({ allowStale = this.allowStale } = {}) { + if (this.#size) { + for (let i = this.#tail; true; ) { + if (!this.#isValidIndex(i)) { + break; + } + if (allowStale || !this.#isStale(i)) { + yield i; + } + if (i === this.#head) { + break; + } else { + i = this.#prev[i]; + } + } + } + } + *#rindexes({ allowStale = this.allowStale } = {}) { + if (this.#size) { + for (let i = this.#head; true; ) { + if (!this.#isValidIndex(i)) { + break; + } + if (allowStale || !this.#isStale(i)) { + yield i; + } + if (i === this.#tail) { + break; + } else { + i = this.#next[i]; + } + } + } + } + #isValidIndex(index) { + return index !== void 0 && this.#keyMap.get(this.#keyList[index]) === index; + } + /** + * Return a generator yielding `[key, value]` pairs, + * in order from most recently used to least recently used. + */ + *entries() { + for (const i of this.#indexes()) { + if (this.#valList[i] !== void 0 && this.#keyList[i] !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) { + yield [this.#keyList[i], this.#valList[i]]; + } + } + } + /** + * Inverse order version of {@link LRUCache.entries} + * + * Return a generator yielding `[key, value]` pairs, + * in order from least recently used to most recently used. + */ + *rentries() { + for (const i of this.#rindexes()) { + if (this.#valList[i] !== void 0 && this.#keyList[i] !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) { + yield [this.#keyList[i], this.#valList[i]]; + } + } + } + /** + * Return a generator yielding the keys in the cache, + * in order from most recently used to least recently used. + */ + *keys() { + for (const i of this.#indexes()) { + const k = this.#keyList[i]; + if (k !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) { + yield k; + } + } + } + /** + * Inverse order version of {@link LRUCache.keys} + * + * Return a generator yielding the keys in the cache, + * in order from least recently used to most recently used. + */ + *rkeys() { + for (const i of this.#rindexes()) { + const k = this.#keyList[i]; + if (k !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) { + yield k; + } + } + } + /** + * Return a generator yielding the values in the cache, + * in order from most recently used to least recently used. + */ + *values() { + for (const i of this.#indexes()) { + const v = this.#valList[i]; + if (v !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) { + yield this.#valList[i]; + } + } + } + /** + * Inverse order version of {@link LRUCache.values} + * + * Return a generator yielding the values in the cache, + * in order from least recently used to most recently used. + */ + *rvalues() { + for (const i of this.#rindexes()) { + const v = this.#valList[i]; + if (v !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) { + yield this.#valList[i]; + } + } + } + /** + * Iterating over the cache itself yields the same results as + * {@link LRUCache.entries} + */ + [Symbol.iterator]() { + return this.entries(); + } + /** + * A String value that is used in the creation of the default string + * description of an object. Called by the built-in method + * `Object.prototype.toString`. + */ + [Symbol.toStringTag] = "LRUCache"; + /** + * Find a value for which the supplied fn method returns a truthy value, + * similar to `Array.find()`. fn is called as `fn(value, key, cache)`. + */ + find(fn, getOptions = {}) { + for (const i of this.#indexes()) { + const v = this.#valList[i]; + const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v; + if (value === void 0) + continue; + if (fn(value, this.#keyList[i], this)) { + return this.get(this.#keyList[i], getOptions); + } + } + } + /** + * Call the supplied function on each item in the cache, in order from most + * recently used to least recently used. + * + * `fn` is called as `fn(value, key, cache)`. + * + * If `thisp` is provided, function will be called in the `this`-context of + * the provided object, or the cache if no `thisp` object is provided. + * + * Does not update age or recenty of use, or iterate over stale values. + */ + forEach(fn, thisp = this) { + for (const i of this.#indexes()) { + const v = this.#valList[i]; + const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v; + if (value === void 0) + continue; + fn.call(thisp, value, this.#keyList[i], this); + } + } + /** + * The same as {@link LRUCache.forEach} but items are iterated over in + * reverse order. (ie, less recently used items are iterated over first.) + */ + rforEach(fn, thisp = this) { + for (const i of this.#rindexes()) { + const v = this.#valList[i]; + const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v; + if (value === void 0) + continue; + fn.call(thisp, value, this.#keyList[i], this); + } + } + /** + * Delete any stale entries. Returns true if anything was removed, + * false otherwise. + */ + purgeStale() { + let deleted = false; + for (const i of this.#rindexes({ allowStale: true })) { + if (this.#isStale(i)) { + this.#delete(this.#keyList[i], "expire"); + deleted = true; + } + } + return deleted; + } + /** + * Get the extended info about a given entry, to get its value, size, and + * TTL info simultaneously. Returns `undefined` if the key is not present. + * + * Unlike {@link LRUCache#dump}, which is designed to be portable and survive + * serialization, the `start` value is always the current timestamp, and the + * `ttl` is a calculated remaining time to live (negative if expired). + * + * Always returns stale values, if their info is found in the cache, so be + * sure to check for expirations (ie, a negative {@link LRUCache.Entry#ttl}) + * if relevant. + */ + info(key) { + const i = this.#keyMap.get(key); + if (i === void 0) + return void 0; + const v = this.#valList[i]; + const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v; + if (value === void 0) + return void 0; + const entry = { value }; + if (this.#ttls && this.#starts) { + const ttl = this.#ttls[i]; + const start = this.#starts[i]; + if (ttl && start) { + const remain = ttl - (this.#perf.now() - start); + entry.ttl = remain; + entry.start = Date.now(); + } + } + if (this.#sizes) { + entry.size = this.#sizes[i]; + } + return entry; + } + /** + * Return an array of [key, {@link LRUCache.Entry}] tuples which can be + * passed to {@link LRUCache#load}. + * + * The `start` fields are calculated relative to a portable `Date.now()` + * timestamp, even if `performance.now()` is available. + * + * Stale entries are always included in the `dump`, even if + * {@link LRUCache.OptionsBase.allowStale} is false. + * + * Note: this returns an actual array, not a generator, so it can be more + * easily passed around. + */ + dump() { + const arr = []; + for (const i of this.#indexes({ allowStale: true })) { + const key = this.#keyList[i]; + const v = this.#valList[i]; + const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v; + if (value === void 0 || key === void 0) + continue; + const entry = { value }; + if (this.#ttls && this.#starts) { + entry.ttl = this.#ttls[i]; + const age = this.#perf.now() - this.#starts[i]; + entry.start = Math.floor(Date.now() - age); + } + if (this.#sizes) { + entry.size = this.#sizes[i]; + } + arr.unshift([key, entry]); + } + return arr; + } + /** + * Reset the cache and load in the items in entries in the order listed. + * + * The shape of the resulting cache may be different if the same options are + * not used in both caches. + * + * The `start` fields are assumed to be calculated relative to a portable + * `Date.now()` timestamp, even if `performance.now()` is available. + */ + load(arr) { + this.clear(); + for (const [key, entry] of arr) { + if (entry.start) { + const age = Date.now() - entry.start; + entry.start = this.#perf.now() - age; + } + this.set(key, entry.value, entry); + } + } + /** + * Add a value to the cache. + * + * Note: if `undefined` is specified as a value, this is an alias for + * {@link LRUCache#delete} + * + * Fields on the {@link LRUCache.SetOptions} options param will override + * their corresponding values in the constructor options for the scope + * of this single `set()` operation. + * + * If `start` is provided, then that will set the effective start + * time for the TTL calculation. Note that this must be a previous + * value of `performance.now()` if supported, or a previous value of + * `Date.now()` if not. + * + * Options object may also include `size`, which will prevent + * calling the `sizeCalculation` function and just use the specified + * number if it is a positive integer, and `noDisposeOnSet` which + * will prevent calling a `dispose` function in the case of + * overwrites. + * + * If the `size` (or return value of `sizeCalculation`) for a given + * entry is greater than `maxEntrySize`, then the item will not be + * added to the cache. + * + * Will update the recency of the entry. + * + * If the value is `undefined`, then this is an alias for + * `cache.delete(key)`. `undefined` is never stored in the cache. + */ + set(k, v, setOptions = {}) { + if (v === void 0) { + this.delete(k); + return this; + } + const { ttl = this.ttl, start, noDisposeOnSet = this.noDisposeOnSet, sizeCalculation = this.sizeCalculation, status } = setOptions; + let { noUpdateTTL = this.noUpdateTTL } = setOptions; + const size = this.#requireSize(k, v, setOptions.size || 0, sizeCalculation); + if (this.maxEntrySize && size > this.maxEntrySize) { + if (status) { + status.set = "miss"; + status.maxEntrySizeExceeded = true; + } + this.#delete(k, "set"); + return this; + } + let index = this.#size === 0 ? void 0 : this.#keyMap.get(k); + if (index === void 0) { + index = this.#size === 0 ? this.#tail : this.#free.length !== 0 ? this.#free.pop() : this.#size === this.#max ? this.#evict(false) : this.#size; + this.#keyList[index] = k; + this.#valList[index] = v; + this.#keyMap.set(k, index); + this.#next[this.#tail] = index; + this.#prev[index] = this.#tail; + this.#tail = index; + this.#size++; + this.#addItemSize(index, size, status); + if (status) + status.set = "add"; + noUpdateTTL = false; + if (this.#hasOnInsert) { + this.#onInsert?.(v, k, "add"); + } + } else { + this.#moveToTail(index); + const oldVal = this.#valList[index]; + if (v !== oldVal) { + if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) { + oldVal.__abortController.abort(new Error("replaced")); + const { __staleWhileFetching: s } = oldVal; + if (s !== void 0 && !noDisposeOnSet) { + if (this.#hasDispose) { + this.#dispose?.(s, k, "set"); + } + if (this.#hasDisposeAfter) { + this.#disposed?.push([s, k, "set"]); + } + } + } else if (!noDisposeOnSet) { + if (this.#hasDispose) { + this.#dispose?.(oldVal, k, "set"); + } + if (this.#hasDisposeAfter) { + this.#disposed?.push([oldVal, k, "set"]); + } + } + this.#removeItemSize(index); + this.#addItemSize(index, size, status); + this.#valList[index] = v; + if (status) { + status.set = "replace"; + const oldValue = oldVal && this.#isBackgroundFetch(oldVal) ? oldVal.__staleWhileFetching : oldVal; + if (oldValue !== void 0) + status.oldValue = oldValue; + } + } else if (status) { + status.set = "update"; + } + if (this.#hasOnInsert) { + this.onInsert?.(v, k, v === oldVal ? "update" : "replace"); + } + } + if (ttl !== 0 && !this.#ttls) { + this.#initializeTTLTracking(); + } + if (this.#ttls) { + if (!noUpdateTTL) { + this.#setItemTTL(index, ttl, start); + } + if (status) + this.#statusTTL(status, index); + } + if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) { + const dt = this.#disposed; + let task; + while (task = dt?.shift()) { + this.#disposeAfter?.(...task); + } + } + return this; + } + /** + * Evict the least recently used item, returning its value or + * `undefined` if cache is empty. + */ + pop() { + try { + while (this.#size) { + const val = this.#valList[this.#head]; + this.#evict(true); + if (this.#isBackgroundFetch(val)) { + if (val.__staleWhileFetching) { + return val.__staleWhileFetching; + } + } else if (val !== void 0) { + return val; + } + } + } finally { + if (this.#hasDisposeAfter && this.#disposed) { + const dt = this.#disposed; + let task; + while (task = dt?.shift()) { + this.#disposeAfter?.(...task); + } + } + } + } + #evict(free) { + const head = this.#head; + const k = this.#keyList[head]; + const v = this.#valList[head]; + if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) { + v.__abortController.abort(new Error("evicted")); + } else if (this.#hasDispose || this.#hasDisposeAfter) { + if (this.#hasDispose) { + this.#dispose?.(v, k, "evict"); + } + if (this.#hasDisposeAfter) { + this.#disposed?.push([v, k, "evict"]); + } + } + this.#removeItemSize(head); + if (free) { + this.#keyList[head] = void 0; + this.#valList[head] = void 0; + this.#free.push(head); + } + if (this.#size === 1) { + this.#head = this.#tail = 0; + this.#free.length = 0; + } else { + this.#head = this.#next[head]; + } + this.#keyMap.delete(k); + this.#size--; + return head; + } + /** + * Check if a key is in the cache, without updating the recency of use. + * Will return false if the item is stale, even though it is technically + * in the cache. + * + * Check if a key is in the cache, without updating the recency of + * use. Age is updated if {@link LRUCache.OptionsBase.updateAgeOnHas} is set + * to `true` in either the options or the constructor. + * + * Will return `false` if the item is stale, even though it is technically in + * the cache. The difference can be determined (if it matters) by using a + * `status` argument, and inspecting the `has` field. + * + * Will not update item age unless + * {@link LRUCache.OptionsBase.updateAgeOnHas} is set. + */ + has(k, hasOptions = {}) { + const { updateAgeOnHas = this.updateAgeOnHas, status } = hasOptions; + const index = this.#keyMap.get(k); + if (index !== void 0) { + const v = this.#valList[index]; + if (this.#isBackgroundFetch(v) && v.__staleWhileFetching === void 0) { + return false; + } + if (!this.#isStale(index)) { + if (updateAgeOnHas) { + this.#updateItemAge(index); + } + if (status) { + status.has = "hit"; + this.#statusTTL(status, index); + } + return true; + } else if (status) { + status.has = "stale"; + this.#statusTTL(status, index); + } + } else if (status) { + status.has = "miss"; + } + return false; + } + /** + * Like {@link LRUCache#get} but doesn't update recency or delete stale + * items. + * + * Returns `undefined` if the item is stale, unless + * {@link LRUCache.OptionsBase.allowStale} is set. + */ + peek(k, peekOptions = {}) { + const { allowStale = this.allowStale } = peekOptions; + const index = this.#keyMap.get(k); + if (index === void 0 || !allowStale && this.#isStale(index)) { + return; + } + const v = this.#valList[index]; + return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v; + } + #backgroundFetch(k, index, options, context) { + const v = index === void 0 ? void 0 : this.#valList[index]; + if (this.#isBackgroundFetch(v)) { + return v; + } + const ac = new AC(); + const { signal } = options; + signal?.addEventListener("abort", () => ac.abort(signal.reason), { + signal: ac.signal + }); + const fetchOpts = { + signal: ac.signal, + options, + context + }; + const cb = /* @__PURE__ */ __name((v2, updateCache = false) => { + const { aborted } = ac.signal; + const ignoreAbort = options.ignoreFetchAbort && v2 !== void 0; + if (options.status) { + if (aborted && !updateCache) { + options.status.fetchAborted = true; + options.status.fetchError = ac.signal.reason; + if (ignoreAbort) + options.status.fetchAbortIgnored = true; + } else { + options.status.fetchResolved = true; + } + } + if (aborted && !ignoreAbort && !updateCache) { + return fetchFail(ac.signal.reason); + } + const bf2 = p; + const vl = this.#valList[index]; + if (vl === p || ignoreAbort && updateCache && vl === void 0) { + if (v2 === void 0) { + if (bf2.__staleWhileFetching !== void 0) { + this.#valList[index] = bf2.__staleWhileFetching; + } else { + this.#delete(k, "fetch"); + } + } else { + if (options.status) + options.status.fetchUpdated = true; + this.set(k, v2, fetchOpts.options); + } + } + return v2; + }, "cb"); + const eb = /* @__PURE__ */ __name((er) => { + if (options.status) { + options.status.fetchRejected = true; + options.status.fetchError = er; + } + return fetchFail(er); + }, "eb"); + const fetchFail = /* @__PURE__ */ __name((er) => { + const { aborted } = ac.signal; + const allowStaleAborted = aborted && options.allowStaleOnFetchAbort; + const allowStale = allowStaleAborted || options.allowStaleOnFetchRejection; + const noDelete = allowStale || options.noDeleteOnFetchRejection; + const bf2 = p; + if (this.#valList[index] === p) { + const del = !noDelete || bf2.__staleWhileFetching === void 0; + if (del) { + this.#delete(k, "fetch"); + } else if (!allowStaleAborted) { + this.#valList[index] = bf2.__staleWhileFetching; + } + } + if (allowStale) { + if (options.status && bf2.__staleWhileFetching !== void 0) { + options.status.returnedStale = true; + } + return bf2.__staleWhileFetching; + } else if (bf2.__returned === bf2) { + throw er; + } + }, "fetchFail"); + const pcall = /* @__PURE__ */ __name((res, rej) => { + const fmp = this.#fetchMethod?.(k, v, fetchOpts); + if (fmp && fmp instanceof Promise) { + fmp.then((v2) => res(v2 === void 0 ? void 0 : v2), rej); + } + ac.signal.addEventListener("abort", () => { + if (!options.ignoreFetchAbort || options.allowStaleOnFetchAbort) { + res(void 0); + if (options.allowStaleOnFetchAbort) { + res = /* @__PURE__ */ __name((v2) => cb(v2, true), "res"); + } + } + }); + }, "pcall"); + if (options.status) + options.status.fetchDispatched = true; + const p = new Promise(pcall).then(cb, eb); + const bf = Object.assign(p, { + __abortController: ac, + __staleWhileFetching: v, + __returned: void 0 + }); + if (index === void 0) { + this.set(k, bf, { ...fetchOpts.options, status: void 0 }); + index = this.#keyMap.get(k); + } else { + this.#valList[index] = bf; + } + return bf; + } + #isBackgroundFetch(p) { + if (!this.#hasFetchMethod) + return false; + const b = p; + return !!b && b instanceof Promise && b.hasOwnProperty("__staleWhileFetching") && b.__abortController instanceof AC; + } + async fetch(k, fetchOptions = {}) { + const { + // get options + allowStale = this.allowStale, + updateAgeOnGet = this.updateAgeOnGet, + noDeleteOnStaleGet = this.noDeleteOnStaleGet, + // set options + ttl = this.ttl, + noDisposeOnSet = this.noDisposeOnSet, + size = 0, + sizeCalculation = this.sizeCalculation, + noUpdateTTL = this.noUpdateTTL, + // fetch exclusive options + noDeleteOnFetchRejection = this.noDeleteOnFetchRejection, + allowStaleOnFetchRejection = this.allowStaleOnFetchRejection, + ignoreFetchAbort = this.ignoreFetchAbort, + allowStaleOnFetchAbort = this.allowStaleOnFetchAbort, + context, + forceRefresh = false, + status, + signal + } = fetchOptions; + if (!this.#hasFetchMethod) { + if (status) + status.fetch = "get"; + return this.get(k, { + allowStale, + updateAgeOnGet, + noDeleteOnStaleGet, + status + }); + } + const options = { + allowStale, + updateAgeOnGet, + noDeleteOnStaleGet, + ttl, + noDisposeOnSet, + size, + sizeCalculation, + noUpdateTTL, + noDeleteOnFetchRejection, + allowStaleOnFetchRejection, + allowStaleOnFetchAbort, + ignoreFetchAbort, + status, + signal + }; + let index = this.#keyMap.get(k); + if (index === void 0) { + if (status) + status.fetch = "miss"; + const p = this.#backgroundFetch(k, index, options, context); + return p.__returned = p; + } else { + const v = this.#valList[index]; + if (this.#isBackgroundFetch(v)) { + const stale = allowStale && v.__staleWhileFetching !== void 0; + if (status) { + status.fetch = "inflight"; + if (stale) + status.returnedStale = true; + } + return stale ? v.__staleWhileFetching : v.__returned = v; + } + const isStale = this.#isStale(index); + if (!forceRefresh && !isStale) { + if (status) + status.fetch = "hit"; + this.#moveToTail(index); + if (updateAgeOnGet) { + this.#updateItemAge(index); + } + if (status) + this.#statusTTL(status, index); + return v; + } + const p = this.#backgroundFetch(k, index, options, context); + const hasStale = p.__staleWhileFetching !== void 0; + const staleVal = hasStale && allowStale; + if (status) { + status.fetch = isStale ? "stale" : "refresh"; + if (staleVal && isStale) + status.returnedStale = true; + } + return staleVal ? p.__staleWhileFetching : p.__returned = p; + } + } + async forceFetch(k, fetchOptions = {}) { + const v = await this.fetch(k, fetchOptions); + if (v === void 0) + throw new Error("fetch() returned undefined"); + return v; + } + memo(k, memoOptions = {}) { + const memoMethod = this.#memoMethod; + if (!memoMethod) { + throw new Error("no memoMethod provided to constructor"); + } + const { context, forceRefresh, ...options } = memoOptions; + const v = this.get(k, options); + if (!forceRefresh && v !== void 0) + return v; + const vv = memoMethod(k, v, { + options, + context + }); + this.set(k, vv, options); + return vv; + } + /** + * Return a value from the cache. Will update the recency of the cache + * entry found. + * + * If the key is not found, get() will return `undefined`. + */ + get(k, getOptions = {}) { + const { allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, status } = getOptions; + const index = this.#keyMap.get(k); + if (index !== void 0) { + const value = this.#valList[index]; + const fetching = this.#isBackgroundFetch(value); + if (status) + this.#statusTTL(status, index); + if (this.#isStale(index)) { + if (status) + status.get = "stale"; + if (!fetching) { + if (!noDeleteOnStaleGet) { + this.#delete(k, "expire"); + } + if (status && allowStale) + status.returnedStale = true; + return allowStale ? value : void 0; + } else { + if (status && allowStale && value.__staleWhileFetching !== void 0) { + status.returnedStale = true; + } + return allowStale ? value.__staleWhileFetching : void 0; + } + } else { + if (status) + status.get = "hit"; + if (fetching) { + return value.__staleWhileFetching; + } + this.#moveToTail(index); + if (updateAgeOnGet) { + this.#updateItemAge(index); + } + return value; + } + } else if (status) { + status.get = "miss"; + } + } + #connect(p, n) { + this.#prev[n] = p; + this.#next[p] = n; + } + #moveToTail(index) { + if (index !== this.#tail) { + if (index === this.#head) { + this.#head = this.#next[index]; + } else { + this.#connect(this.#prev[index], this.#next[index]); + } + this.#connect(this.#tail, index); + this.#tail = index; + } + } + /** + * Deletes a key out of the cache. + * + * Returns true if the key was deleted, false otherwise. + */ + delete(k) { + return this.#delete(k, "delete"); + } + #delete(k, reason) { + let deleted = false; + if (this.#size !== 0) { + const index = this.#keyMap.get(k); + if (index !== void 0) { + deleted = true; + if (this.#size === 1) { + this.#clear(reason); + } else { + this.#removeItemSize(index); + const v = this.#valList[index]; + if (this.#isBackgroundFetch(v)) { + v.__abortController.abort(new Error("deleted")); + } else if (this.#hasDispose || this.#hasDisposeAfter) { + if (this.#hasDispose) { + this.#dispose?.(v, k, reason); + } + if (this.#hasDisposeAfter) { + this.#disposed?.push([v, k, reason]); + } + } + this.#keyMap.delete(k); + this.#keyList[index] = void 0; + this.#valList[index] = void 0; + if (index === this.#tail) { + this.#tail = this.#prev[index]; + } else if (index === this.#head) { + this.#head = this.#next[index]; + } else { + const pi = this.#prev[index]; + this.#next[pi] = this.#next[index]; + const ni = this.#next[index]; + this.#prev[ni] = this.#prev[index]; + } + this.#size--; + this.#free.push(index); + } + } + } + if (this.#hasDisposeAfter && this.#disposed?.length) { + const dt = this.#disposed; + let task; + while (task = dt?.shift()) { + this.#disposeAfter?.(...task); + } + } + return deleted; + } + /** + * Clear the cache entirely, throwing away all values. + */ + clear() { + return this.#clear("delete"); + } + #clear(reason) { + for (const index of this.#rindexes({ allowStale: true })) { + const v = this.#valList[index]; + if (this.#isBackgroundFetch(v)) { + v.__abortController.abort(new Error("deleted")); + } else { + const k = this.#keyList[index]; + if (this.#hasDispose) { + this.#dispose?.(v, k, reason); + } + if (this.#hasDisposeAfter) { + this.#disposed?.push([v, k, reason]); + } + } + } + this.#keyMap.clear(); + this.#valList.fill(void 0); + this.#keyList.fill(void 0); + if (this.#ttls && this.#starts) { + this.#ttls.fill(0); + this.#starts.fill(0); + } + if (this.#sizes) { + this.#sizes.fill(0); + } + this.#head = 0; + this.#tail = 0; + this.#free.length = 0; + this.#calculatedSize = 0; + this.#size = 0; + if (this.#hasDisposeAfter && this.#disposed) { + const dt = this.#disposed; + let task; + while (task = dt?.shift()) { + this.#disposeAfter?.(...task); + } + } + } + }; + exports2.LRUCache = LRUCache; + } +}); + +// node_modules/.pnpm/hosted-git-info@8.1.0/node_modules/hosted-git-info/lib/hosts.js +var require_hosts = __commonJS({ + "node_modules/.pnpm/hosted-git-info@8.1.0/node_modules/hosted-git-info/lib/hosts.js"(exports2, module2) { + "use strict"; + var maybeJoin = /* @__PURE__ */ __name((...args) => args.every((arg) => arg) ? args.join("") : "", "maybeJoin"); + var maybeEncode = /* @__PURE__ */ __name((arg) => arg ? encodeURIComponent(arg) : "", "maybeEncode"); + var formatHashFragment = /* @__PURE__ */ __name((f) => f.toLowerCase().replace(/^\W+/g, "").replace(/(? `git@${domain}:${user}/${project}.git${maybeJoin("#", committish)}`, "sshtemplate"), + sshurltemplate: /* @__PURE__ */ __name(({ domain, user, project, committish }) => `git+ssh://git@${domain}/${user}/${project}.git${maybeJoin("#", committish)}`, "sshurltemplate"), + edittemplate: /* @__PURE__ */ __name(({ domain, user, project, committish, editpath, path }) => `https://${domain}/${user}/${project}${maybeJoin("/", editpath, "/", maybeEncode(committish || "HEAD"), "/", path)}`, "edittemplate"), + browsetemplate: /* @__PURE__ */ __name(({ domain, user, project, committish, treepath }) => `https://${domain}/${user}/${project}${maybeJoin("/", treepath, "/", maybeEncode(committish))}`, "browsetemplate"), + browsetreetemplate: /* @__PURE__ */ __name(({ domain, user, project, committish, treepath, path, fragment, hashformat }) => `https://${domain}/${user}/${project}/${treepath}/${maybeEncode(committish || "HEAD")}/${path}${maybeJoin("#", hashformat(fragment || ""))}`, "browsetreetemplate"), + browseblobtemplate: /* @__PURE__ */ __name(({ domain, user, project, committish, blobpath, path, fragment, hashformat }) => `https://${domain}/${user}/${project}/${blobpath}/${maybeEncode(committish || "HEAD")}/${path}${maybeJoin("#", hashformat(fragment || ""))}`, "browseblobtemplate"), + docstemplate: /* @__PURE__ */ __name(({ domain, user, project, treepath, committish }) => `https://${domain}/${user}/${project}${maybeJoin("/", treepath, "/", maybeEncode(committish))}#readme`, "docstemplate"), + httpstemplate: /* @__PURE__ */ __name(({ auth, domain, user, project, committish }) => `git+https://${maybeJoin(auth, "@")}${domain}/${user}/${project}.git${maybeJoin("#", committish)}`, "httpstemplate"), + filetemplate: /* @__PURE__ */ __name(({ domain, user, project, committish, path }) => `https://${domain}/${user}/${project}/raw/${maybeEncode(committish || "HEAD")}/${path}`, "filetemplate"), + shortcuttemplate: /* @__PURE__ */ __name(({ type, user, project, committish }) => `${type}:${user}/${project}${maybeJoin("#", committish)}`, "shortcuttemplate"), + pathtemplate: /* @__PURE__ */ __name(({ user, project, committish }) => `${user}/${project}${maybeJoin("#", committish)}`, "pathtemplate"), + bugstemplate: /* @__PURE__ */ __name(({ domain, user, project }) => `https://${domain}/${user}/${project}/issues`, "bugstemplate"), + hashformat: formatHashFragment + }; + var hosts = {}; + hosts.github = { + // First two are insecure and generally shouldn't be used any more, but + // they are still supported. + protocols: ["git:", "http:", "git+ssh:", "git+https:", "ssh:", "https:"], + domain: "github.com", + treepath: "tree", + blobpath: "blob", + editpath: "edit", + filetemplate: /* @__PURE__ */ __name(({ auth, user, project, committish, path }) => `https://${maybeJoin(auth, "@")}raw.githubusercontent.com/${user}/${project}/${maybeEncode(committish || "HEAD")}/${path}`, "filetemplate"), + gittemplate: /* @__PURE__ */ __name(({ auth, domain, user, project, committish }) => `git://${maybeJoin(auth, "@")}${domain}/${user}/${project}.git${maybeJoin("#", committish)}`, "gittemplate"), + tarballtemplate: /* @__PURE__ */ __name(({ domain, user, project, committish }) => `https://codeload.${domain}/${user}/${project}/tar.gz/${maybeEncode(committish || "HEAD")}`, "tarballtemplate"), + extract: /* @__PURE__ */ __name((url) => { + let [, user, project, type, committish] = url.pathname.split("/", 5); + if (type && type !== "tree") { + return; + } + if (!type) { + committish = url.hash.slice(1); + } + if (project && project.endsWith(".git")) { + project = project.slice(0, -4); + } + if (!user || !project) { + return; + } + return { user, project, committish }; + }, "extract") + }; + hosts.bitbucket = { + protocols: ["git+ssh:", "git+https:", "ssh:", "https:"], + domain: "bitbucket.org", + treepath: "src", + blobpath: "src", + editpath: "?mode=edit", + edittemplate: /* @__PURE__ */ __name(({ domain, user, project, committish, treepath, path, editpath }) => `https://${domain}/${user}/${project}${maybeJoin("/", treepath, "/", maybeEncode(committish || "HEAD"), "/", path, editpath)}`, "edittemplate"), + tarballtemplate: /* @__PURE__ */ __name(({ domain, user, project, committish }) => `https://${domain}/${user}/${project}/get/${maybeEncode(committish || "HEAD")}.tar.gz`, "tarballtemplate"), + extract: /* @__PURE__ */ __name((url) => { + let [, user, project, aux] = url.pathname.split("/", 4); + if (["get"].includes(aux)) { + return; + } + if (project && project.endsWith(".git")) { + project = project.slice(0, -4); + } + if (!user || !project) { + return; + } + return { user, project, committish: url.hash.slice(1) }; + }, "extract") + }; + hosts.gitlab = { + protocols: ["git+ssh:", "git+https:", "ssh:", "https:"], + domain: "gitlab.com", + treepath: "tree", + blobpath: "tree", + editpath: "-/edit", + httpstemplate: /* @__PURE__ */ __name(({ auth, domain, user, project, committish }) => `git+https://${maybeJoin(auth, "@")}${domain}/${user}/${project}.git${maybeJoin("#", committish)}`, "httpstemplate"), + tarballtemplate: /* @__PURE__ */ __name(({ domain, user, project, committish }) => `https://${domain}/${user}/${project}/repository/archive.tar.gz?ref=${maybeEncode(committish || "HEAD")}`, "tarballtemplate"), + extract: /* @__PURE__ */ __name((url) => { + const path = url.pathname.slice(1); + if (path.includes("/-/") || path.includes("/archive.tar.gz")) { + return; + } + const segments = path.split("/"); + let project = segments.pop(); + if (project.endsWith(".git")) { + project = project.slice(0, -4); + } + const user = segments.join("/"); + if (!user || !project) { + return; + } + return { user, project, committish: url.hash.slice(1) }; + }, "extract") + }; + hosts.gist = { + protocols: ["git:", "git+ssh:", "git+https:", "ssh:", "https:"], + domain: "gist.github.com", + editpath: "edit", + sshtemplate: /* @__PURE__ */ __name(({ domain, project, committish }) => `git@${domain}:${project}.git${maybeJoin("#", committish)}`, "sshtemplate"), + sshurltemplate: /* @__PURE__ */ __name(({ domain, project, committish }) => `git+ssh://git@${domain}/${project}.git${maybeJoin("#", committish)}`, "sshurltemplate"), + edittemplate: /* @__PURE__ */ __name(({ domain, user, project, committish, editpath }) => `https://${domain}/${user}/${project}${maybeJoin("/", maybeEncode(committish))}/${editpath}`, "edittemplate"), + browsetemplate: /* @__PURE__ */ __name(({ domain, project, committish }) => `https://${domain}/${project}${maybeJoin("/", maybeEncode(committish))}`, "browsetemplate"), + browsetreetemplate: /* @__PURE__ */ __name(({ domain, project, committish, path, hashformat }) => `https://${domain}/${project}${maybeJoin("/", maybeEncode(committish))}${maybeJoin("#", hashformat(path))}`, "browsetreetemplate"), + browseblobtemplate: /* @__PURE__ */ __name(({ domain, project, committish, path, hashformat }) => `https://${domain}/${project}${maybeJoin("/", maybeEncode(committish))}${maybeJoin("#", hashformat(path))}`, "browseblobtemplate"), + docstemplate: /* @__PURE__ */ __name(({ domain, project, committish }) => `https://${domain}/${project}${maybeJoin("/", maybeEncode(committish))}`, "docstemplate"), + httpstemplate: /* @__PURE__ */ __name(({ domain, project, committish }) => `git+https://${domain}/${project}.git${maybeJoin("#", committish)}`, "httpstemplate"), + filetemplate: /* @__PURE__ */ __name(({ user, project, committish, path }) => `https://gist.githubusercontent.com/${user}/${project}/raw${maybeJoin("/", maybeEncode(committish))}/${path}`, "filetemplate"), + shortcuttemplate: /* @__PURE__ */ __name(({ type, project, committish }) => `${type}:${project}${maybeJoin("#", committish)}`, "shortcuttemplate"), + pathtemplate: /* @__PURE__ */ __name(({ project, committish }) => `${project}${maybeJoin("#", committish)}`, "pathtemplate"), + bugstemplate: /* @__PURE__ */ __name(({ domain, project }) => `https://${domain}/${project}`, "bugstemplate"), + gittemplate: /* @__PURE__ */ __name(({ domain, project, committish }) => `git://${domain}/${project}.git${maybeJoin("#", committish)}`, "gittemplate"), + tarballtemplate: /* @__PURE__ */ __name(({ project, committish }) => `https://codeload.github.com/gist/${project}/tar.gz/${maybeEncode(committish || "HEAD")}`, "tarballtemplate"), + extract: /* @__PURE__ */ __name((url) => { + let [, user, project, aux] = url.pathname.split("/", 4); + if (aux === "raw") { + return; + } + if (!project) { + if (!user) { + return; + } + project = user; + user = null; + } + if (project.endsWith(".git")) { + project = project.slice(0, -4); + } + return { user, project, committish: url.hash.slice(1) }; + }, "extract"), + hashformat: /* @__PURE__ */ __name(function(fragment) { + return fragment && "file-" + formatHashFragment(fragment); + }, "hashformat") + }; + hosts.sourcehut = { + protocols: ["git+ssh:", "https:"], + domain: "git.sr.ht", + treepath: "tree", + blobpath: "tree", + filetemplate: /* @__PURE__ */ __name(({ domain, user, project, committish, path }) => `https://${domain}/${user}/${project}/blob/${maybeEncode(committish) || "HEAD"}/${path}`, "filetemplate"), + httpstemplate: /* @__PURE__ */ __name(({ domain, user, project, committish }) => `https://${domain}/${user}/${project}.git${maybeJoin("#", committish)}`, "httpstemplate"), + tarballtemplate: /* @__PURE__ */ __name(({ domain, user, project, committish }) => `https://${domain}/${user}/${project}/archive/${maybeEncode(committish) || "HEAD"}.tar.gz`, "tarballtemplate"), + bugstemplate: /* @__PURE__ */ __name(() => null, "bugstemplate"), + extract: /* @__PURE__ */ __name((url) => { + let [, user, project, aux] = url.pathname.split("/", 4); + if (["archive"].includes(aux)) { + return; + } + if (project && project.endsWith(".git")) { + project = project.slice(0, -4); + } + if (!user || !project) { + return; + } + return { user, project, committish: url.hash.slice(1) }; + }, "extract") + }; + for (const [name, host] of Object.entries(hosts)) { + hosts[name] = Object.assign({}, defaults, host); + } + module2.exports = hosts; + } +}); + +// node_modules/.pnpm/hosted-git-info@8.1.0/node_modules/hosted-git-info/lib/parse-url.js +var require_parse_url = __commonJS({ + "node_modules/.pnpm/hosted-git-info@8.1.0/node_modules/hosted-git-info/lib/parse-url.js"(exports2, module2) { + var url = require("url"); + var lastIndexOfBefore = /* @__PURE__ */ __name((str, char, beforeChar) => { + const startPosition = str.indexOf(beforeChar); + return str.lastIndexOf(char, startPosition > -1 ? startPosition : Infinity); + }, "lastIndexOfBefore"); + var safeUrl = /* @__PURE__ */ __name((u) => { + try { + return new url.URL(u); + } catch { + } + }, "safeUrl"); + var correctProtocol = /* @__PURE__ */ __name((arg, protocols) => { + const firstColon = arg.indexOf(":"); + const proto = arg.slice(0, firstColon + 1); + if (Object.prototype.hasOwnProperty.call(protocols, proto)) { + return arg; + } + const firstAt = arg.indexOf("@"); + if (firstAt > -1) { + if (firstAt > firstColon) { + return `git+ssh://${arg}`; + } else { + return arg; + } + } + const doubleSlash = arg.indexOf("//"); + if (doubleSlash === firstColon + 1) { + return arg; + } + return `${arg.slice(0, firstColon + 1)}//${arg.slice(firstColon + 1)}`; + }, "correctProtocol"); + var correctUrl = /* @__PURE__ */ __name((giturl) => { + const firstAt = lastIndexOfBefore(giturl, "@", "#"); + const lastColonBeforeHash = lastIndexOfBefore(giturl, ":", "#"); + if (lastColonBeforeHash > firstAt) { + giturl = giturl.slice(0, lastColonBeforeHash) + "/" + giturl.slice(lastColonBeforeHash + 1); + } + if (lastIndexOfBefore(giturl, ":", "#") === -1 && giturl.indexOf("//") === -1) { + giturl = `git+ssh://${giturl}`; + } + return giturl; + }, "correctUrl"); + module2.exports = (giturl, protocols) => { + const withProtocol = protocols ? correctProtocol(giturl, protocols) : giturl; + return safeUrl(withProtocol) || safeUrl(correctUrl(withProtocol)); + }; + } +}); + +// node_modules/.pnpm/hosted-git-info@8.1.0/node_modules/hosted-git-info/lib/from-url.js +var require_from_url = __commonJS({ + "node_modules/.pnpm/hosted-git-info@8.1.0/node_modules/hosted-git-info/lib/from-url.js"(exports2, module2) { + "use strict"; + var parseUrl = require_parse_url(); + var isGitHubShorthand = /* @__PURE__ */ __name((arg) => { + const firstHash = arg.indexOf("#"); + const firstSlash = arg.indexOf("/"); + const secondSlash = arg.indexOf("/", firstSlash + 1); + const firstColon = arg.indexOf(":"); + const firstSpace = /\s/.exec(arg); + const firstAt = arg.indexOf("@"); + const spaceOnlyAfterHash = !firstSpace || firstHash > -1 && firstSpace.index > firstHash; + const atOnlyAfterHash = firstAt === -1 || firstHash > -1 && firstAt > firstHash; + const colonOnlyAfterHash = firstColon === -1 || firstHash > -1 && firstColon > firstHash; + const secondSlashOnlyAfterHash = secondSlash === -1 || firstHash > -1 && secondSlash > firstHash; + const hasSlash = firstSlash > 0; + const doesNotEndWithSlash = firstHash > -1 ? arg[firstHash - 1] !== "/" : !arg.endsWith("/"); + const doesNotStartWithDot = !arg.startsWith("."); + return spaceOnlyAfterHash && hasSlash && doesNotEndWithSlash && doesNotStartWithDot && atOnlyAfterHash && colonOnlyAfterHash && secondSlashOnlyAfterHash; + }, "isGitHubShorthand"); + module2.exports = (giturl, opts, { gitHosts, protocols }) => { + if (!giturl) { + return; + } + const correctedUrl = isGitHubShorthand(giturl) ? `github:${giturl}` : giturl; + const parsed = parseUrl(correctedUrl, protocols); + if (!parsed) { + return; + } + const gitHostShortcut = gitHosts.byShortcut[parsed.protocol]; + const gitHostDomain = gitHosts.byDomain[parsed.hostname.startsWith("www.") ? parsed.hostname.slice(4) : parsed.hostname]; + const gitHostName = gitHostShortcut || gitHostDomain; + if (!gitHostName) { + return; + } + const gitHostInfo = gitHosts[gitHostShortcut || gitHostDomain]; + let auth = null; + if (protocols[parsed.protocol]?.auth && (parsed.username || parsed.password)) { + auth = `${parsed.username}${parsed.password ? ":" + parsed.password : ""}`; + } + let committish = null; + let user = null; + let project = null; + let defaultRepresentation = null; + try { + if (gitHostShortcut) { + let pathname = parsed.pathname.startsWith("/") ? parsed.pathname.slice(1) : parsed.pathname; + const firstAt = pathname.indexOf("@"); + if (firstAt > -1) { + pathname = pathname.slice(firstAt + 1); + } + const lastSlash = pathname.lastIndexOf("/"); + if (lastSlash > -1) { + user = decodeURIComponent(pathname.slice(0, lastSlash)); + if (!user) { + user = null; + } + project = decodeURIComponent(pathname.slice(lastSlash + 1)); + } else { + project = decodeURIComponent(pathname); + } + if (project.endsWith(".git")) { + project = project.slice(0, -4); + } + if (parsed.hash) { + committish = decodeURIComponent(parsed.hash.slice(1)); + } + defaultRepresentation = "shortcut"; + } else { + if (!gitHostInfo.protocols.includes(parsed.protocol)) { + return; + } + const segments = gitHostInfo.extract(parsed); + if (!segments) { + return; + } + user = segments.user && decodeURIComponent(segments.user); + project = decodeURIComponent(segments.project); + committish = decodeURIComponent(segments.committish); + defaultRepresentation = protocols[parsed.protocol]?.name || parsed.protocol.slice(0, -1); + } + } catch (err) { + if (err instanceof URIError) { + return; + } else { + throw err; + } + } + return [gitHostName, user, auth, project, committish, defaultRepresentation, opts]; + }; + } +}); + +// node_modules/.pnpm/hosted-git-info@8.1.0/node_modules/hosted-git-info/lib/index.js +var require_lib3 = __commonJS({ + "node_modules/.pnpm/hosted-git-info@8.1.0/node_modules/hosted-git-info/lib/index.js"(exports2, module2) { + "use strict"; + var { LRUCache } = require_commonjs(); + var hosts = require_hosts(); + var fromUrl = require_from_url(); + var parseUrl = require_parse_url(); + var cache = new LRUCache({ max: 1e3 }); + function unknownHostedUrl(url) { + try { + const { + protocol, + hostname, + pathname + } = new URL(url); + if (!hostname) { + return null; + } + const proto = /(?:git\+)http:$/.test(protocol) ? "http:" : "https:"; + const path = pathname.replace(/\.git$/, ""); + return `${proto}//${hostname}${path}`; + } catch { + return null; + } + } + __name(unknownHostedUrl, "unknownHostedUrl"); + var GitHost = class _GitHost { + static { + __name(this, "GitHost"); + } + constructor(type, user, auth, project, committish, defaultRepresentation, opts = {}) { + Object.assign(this, _GitHost.#gitHosts[type], { + type, + user, + auth, + project, + committish, + default: defaultRepresentation, + opts + }); + } + static #gitHosts = { byShortcut: {}, byDomain: {} }; + static #protocols = { + "git+ssh:": { name: "sshurl" }, + "ssh:": { name: "sshurl" }, + "git+https:": { name: "https", auth: true }, + "git:": { auth: true }, + "http:": { auth: true }, + "https:": { auth: true }, + "git+http:": { auth: true } + }; + static addHost(name, host) { + _GitHost.#gitHosts[name] = host; + _GitHost.#gitHosts.byDomain[host.domain] = name; + _GitHost.#gitHosts.byShortcut[`${name}:`] = name; + _GitHost.#protocols[`${name}:`] = { name }; + } + static fromUrl(giturl, opts) { + if (typeof giturl !== "string") { + return; + } + const key = giturl + JSON.stringify(opts || {}); + if (!cache.has(key)) { + const hostArgs = fromUrl(giturl, opts, { + gitHosts: _GitHost.#gitHosts, + protocols: _GitHost.#protocols + }); + cache.set(key, hostArgs ? new _GitHost(...hostArgs) : void 0); + } + return cache.get(key); + } + static fromManifest(manifest, opts = {}) { + if (!manifest || typeof manifest !== "object") { + return; + } + const r = manifest.repository; + const rurl = r && (typeof r === "string" ? r : typeof r === "object" && typeof r.url === "string" ? r.url : null); + if (!rurl) { + throw new Error("no repository"); + } + const info = rurl && _GitHost.fromUrl(rurl.replace(/^git\+/, ""), opts) || null; + if (info) { + return info; + } + const unk = unknownHostedUrl(rurl); + return _GitHost.fromUrl(unk, opts) || unk; + } + static parseUrl(url) { + return parseUrl(url); + } + #fill(template, opts) { + if (typeof template !== "function") { + return null; + } + const options = { ...this, ...this.opts, ...opts }; + if (!options.path) { + options.path = ""; + } + if (options.path.startsWith("/")) { + options.path = options.path.slice(1); + } + if (options.noCommittish) { + options.committish = null; + } + const result = template(options); + return options.noGitPlus && result.startsWith("git+") ? result.slice(4) : result; + } + hash() { + return this.committish ? `#${this.committish}` : ""; + } + ssh(opts) { + return this.#fill(this.sshtemplate, opts); + } + sshurl(opts) { + return this.#fill(this.sshurltemplate, opts); + } + browse(path, ...args) { + if (typeof path !== "string") { + return this.#fill(this.browsetemplate, path); + } + if (typeof args[0] !== "string") { + return this.#fill(this.browsetreetemplate, { ...args[0], path }); + } + return this.#fill(this.browsetreetemplate, { ...args[1], fragment: args[0], path }); + } + // If the path is known to be a file, then browseFile should be used. For some hosts + // the url is the same as browse, but for others like GitHub a file can use both `/tree/` + // and `/blob/` in the path. When using a default committish of `HEAD` then the `/tree/` + // path will redirect to a specific commit. Using the `/blob/` path avoids this and + // does not redirect to a different commit. + browseFile(path, ...args) { + if (typeof args[0] !== "string") { + return this.#fill(this.browseblobtemplate, { ...args[0], path }); + } + return this.#fill(this.browseblobtemplate, { ...args[1], fragment: args[0], path }); + } + docs(opts) { + return this.#fill(this.docstemplate, opts); + } + bugs(opts) { + return this.#fill(this.bugstemplate, opts); + } + https(opts) { + return this.#fill(this.httpstemplate, opts); + } + git(opts) { + return this.#fill(this.gittemplate, opts); + } + shortcut(opts) { + return this.#fill(this.shortcuttemplate, opts); + } + path(opts) { + return this.#fill(this.pathtemplate, opts); + } + tarball(opts) { + return this.#fill(this.tarballtemplate, { ...opts, noCommittish: false }); + } + file(path, opts) { + return this.#fill(this.filetemplate, { ...opts, path }); + } + edit(path, opts) { + return this.#fill(this.edittemplate, { ...opts, path }); + } + getDefaultRepresentation() { + return this.default; + } + toString(opts) { + if (this.default && typeof this[this.default] === "function") { + return this[this.default](opts); + } + return this.sshurl(opts); + } + }; + for (const [name, host] of Object.entries(hosts)) { + GitHost.addHost(name, host); + } + module2.exports = GitHost; + } +}); + +// node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/commonjs/index.js +var require_commonjs2 = __commonJS({ + "node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/commonjs/index.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.range = exports2.balanced = void 0; + var balanced = /* @__PURE__ */ __name((a, b, str) => { + const ma = a instanceof RegExp ? maybeMatch(a, str) : a; + const mb = b instanceof RegExp ? maybeMatch(b, str) : b; + const r = ma !== null && mb != null && (0, exports2.range)(ma, mb, str); + return r && { + start: r[0], + end: r[1], + pre: str.slice(0, r[0]), + body: str.slice(r[0] + ma.length, r[1]), + post: str.slice(r[1] + mb.length) + }; + }, "balanced"); + exports2.balanced = balanced; + var maybeMatch = /* @__PURE__ */ __name((reg, str) => { + const m = str.match(reg); + return m ? m[0] : null; + }, "maybeMatch"); + var range = /* @__PURE__ */ __name((a, b, str) => { + let begs, beg, left, right = void 0, result; + let ai = str.indexOf(a); + let bi = str.indexOf(b, ai + 1); + let i = ai; + if (ai >= 0 && bi > 0) { + if (a === b) { + return [ai, bi]; + } + begs = []; + left = str.length; + while (i >= 0 && !result) { + if (i === ai) { + begs.push(i); + ai = str.indexOf(a, i + 1); + } else if (begs.length === 1) { + const r = begs.pop(); + if (r !== void 0) + result = [r, bi]; + } else { + beg = begs.pop(); + if (beg !== void 0 && beg < left) { + left = beg; + right = bi; + } + bi = str.indexOf(b, i + 1); + } + i = ai < bi && ai >= 0 ? ai : bi; + } + if (begs.length && right !== void 0) { + result = [left, right]; + } + } + return result; + }, "range"); + exports2.range = range; + } +}); + +// node_modules/.pnpm/brace-expansion@5.0.5/node_modules/brace-expansion/dist/commonjs/index.js +var require_commonjs3 = __commonJS({ + "node_modules/.pnpm/brace-expansion@5.0.5/node_modules/brace-expansion/dist/commonjs/index.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.EXPANSION_MAX = void 0; + exports2.expand = expand; + var balanced_match_1 = require_commonjs2(); + var escSlash = "\0SLASH" + Math.random() + "\0"; + var escOpen = "\0OPEN" + Math.random() + "\0"; + var escClose = "\0CLOSE" + Math.random() + "\0"; + var escComma = "\0COMMA" + Math.random() + "\0"; + var escPeriod = "\0PERIOD" + Math.random() + "\0"; + var escSlashPattern = new RegExp(escSlash, "g"); + var escOpenPattern = new RegExp(escOpen, "g"); + var escClosePattern = new RegExp(escClose, "g"); + var escCommaPattern = new RegExp(escComma, "g"); + var escPeriodPattern = new RegExp(escPeriod, "g"); + var slashPattern = /\\\\/g; + var openPattern = /\\{/g; + var closePattern = /\\}/g; + var commaPattern = /\\,/g; + var periodPattern = /\\\./g; + exports2.EXPANSION_MAX = 1e5; + function numeric(str) { + return !isNaN(str) ? parseInt(str, 10) : str.charCodeAt(0); + } + __name(numeric, "numeric"); + function escapeBraces(str) { + return str.replace(slashPattern, escSlash).replace(openPattern, escOpen).replace(closePattern, escClose).replace(commaPattern, escComma).replace(periodPattern, escPeriod); + } + __name(escapeBraces, "escapeBraces"); + function unescapeBraces(str) { + return str.replace(escSlashPattern, "\\").replace(escOpenPattern, "{").replace(escClosePattern, "}").replace(escCommaPattern, ",").replace(escPeriodPattern, "."); + } + __name(unescapeBraces, "unescapeBraces"); + function parseCommaParts(str) { + if (!str) { + return [""]; + } + const parts = []; + const m = (0, balanced_match_1.balanced)("{", "}", str); + if (!m) { + return str.split(","); + } + const { pre, body, post } = m; + const p = pre.split(","); + p[p.length - 1] += "{" + body + "}"; + const postParts = parseCommaParts(post); + if (post.length) { + ; + p[p.length - 1] += postParts.shift(); + p.push.apply(p, postParts); + } + parts.push.apply(parts, p); + return parts; + } + __name(parseCommaParts, "parseCommaParts"); + function expand(str, options = {}) { + if (!str) { + return []; + } + const { max = exports2.EXPANSION_MAX } = options; + if (str.slice(0, 2) === "{}") { + str = "\\{\\}" + str.slice(2); + } + return expand_(escapeBraces(str), max, true).map(unescapeBraces); + } + __name(expand, "expand"); + function embrace(str) { + return "{" + str + "}"; + } + __name(embrace, "embrace"); + function isPadded(el) { + return /^-?0\d/.test(el); + } + __name(isPadded, "isPadded"); + function lte(i, y) { + return i <= y; + } + __name(lte, "lte"); + function gte(i, y) { + return i >= y; + } + __name(gte, "gte"); + function expand_(str, max, isTop) { + const expansions = []; + const m = (0, balanced_match_1.balanced)("{", "}", str); + if (!m) + return [str]; + const pre = m.pre; + const post = m.post.length ? expand_(m.post, max, false) : [""]; + if (/\$$/.test(m.pre)) { + for (let k = 0; k < post.length && k < max; k++) { + const expansion = pre + "{" + m.body + "}" + post[k]; + expansions.push(expansion); + } + } else { + const isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + const isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + const isSequence = isNumericSequence || isAlphaSequence; + const isOptions = m.body.indexOf(",") >= 0; + if (!isSequence && !isOptions) { + if (m.post.match(/,(?!,).*\}/)) { + str = m.pre + "{" + m.body + escClose + m.post; + return expand_(str, max, true); + } + return [str]; + } + let n; + if (isSequence) { + n = m.body.split(/\.\./); + } else { + n = parseCommaParts(m.body); + if (n.length === 1 && n[0] !== void 0) { + n = expand_(n[0], max, false).map(embrace); + if (n.length === 1) { + return post.map((p) => m.pre + n[0] + p); + } + } + } + let N; + if (isSequence && n[0] !== void 0 && n[1] !== void 0) { + const x = numeric(n[0]); + const y = numeric(n[1]); + const width = Math.max(n[0].length, n[1].length); + let incr = n.length === 3 && n[2] !== void 0 ? Math.max(Math.abs(numeric(n[2])), 1) : 1; + let test = lte; + const reverse = y < x; + if (reverse) { + incr *= -1; + test = gte; + } + const pad = n.some(isPadded); + N = []; + for (let i = x; test(i, y); i += incr) { + let c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === "\\") { + c = ""; + } + } else { + c = String(i); + if (pad) { + const need = width - c.length; + if (need > 0) { + const z = new Array(need + 1).join("0"); + if (i < 0) { + c = "-" + z + c.slice(1); + } else { + c = z + c; + } + } + } + } + N.push(c); + } + } else { + N = []; + for (let j = 0; j < n.length; j++) { + N.push.apply(N, expand_(n[j], max, false)); + } + } + for (let j = 0; j < N.length; j++) { + for (let k = 0; k < post.length && expansions.length < max; k++) { + const expansion = pre + N[j] + post[k]; + if (!isTop || isSequence || expansion) { + expansions.push(expansion); + } + } + } + } + return expansions; + } + __name(expand_, "expand_"); + } +}); + +// node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js +var require_assert_valid_pattern = __commonJS({ + "node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.assertValidPattern = void 0; + var MAX_PATTERN_LENGTH = 1024 * 64; + var assertValidPattern = /* @__PURE__ */ __name((pattern) => { + if (typeof pattern !== "string") { + throw new TypeError("invalid pattern"); + } + if (pattern.length > MAX_PATTERN_LENGTH) { + throw new TypeError("pattern is too long"); + } + }, "assertValidPattern"); + exports2.assertValidPattern = assertValidPattern; + } +}); + +// node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/brace-expressions.js +var require_brace_expressions = __commonJS({ + "node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/brace-expressions.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.parseClass = void 0; + var posixClasses = { + "[:alnum:]": ["\\p{L}\\p{Nl}\\p{Nd}", true], + "[:alpha:]": ["\\p{L}\\p{Nl}", true], + "[:ascii:]": ["\\x00-\\x7f", false], + "[:blank:]": ["\\p{Zs}\\t", true], + "[:cntrl:]": ["\\p{Cc}", true], + "[:digit:]": ["\\p{Nd}", true], + "[:graph:]": ["\\p{Z}\\p{C}", true, true], + "[:lower:]": ["\\p{Ll}", true], + "[:print:]": ["\\p{C}", true], + "[:punct:]": ["\\p{P}", true], + "[:space:]": ["\\p{Z}\\t\\r\\n\\v\\f", true], + "[:upper:]": ["\\p{Lu}", true], + "[:word:]": ["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}", true], + "[:xdigit:]": ["A-Fa-f0-9", false] + }; + var braceEscape = /* @__PURE__ */ __name((s) => s.replace(/[[\]\\-]/g, "\\$&"), "braceEscape"); + var regexpEscape = /* @__PURE__ */ __name((s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), "regexpEscape"); + var rangesToString = /* @__PURE__ */ __name((ranges) => ranges.join(""), "rangesToString"); + var parseClass = /* @__PURE__ */ __name((glob, position) => { + const pos = position; + if (glob.charAt(pos) !== "[") { + throw new Error("not in a brace expression"); + } + const ranges = []; + const negs = []; + let i = pos + 1; + let sawStart = false; + let uflag = false; + let escaping = false; + let negate = false; + let endPos = pos; + let rangeStart = ""; + WHILE: while (i < glob.length) { + const c = glob.charAt(i); + if ((c === "!" || c === "^") && i === pos + 1) { + negate = true; + i++; + continue; + } + if (c === "]" && sawStart && !escaping) { + endPos = i + 1; + break; + } + sawStart = true; + if (c === "\\") { + if (!escaping) { + escaping = true; + i++; + continue; + } + } + if (c === "[" && !escaping) { + for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) { + if (glob.startsWith(cls, i)) { + if (rangeStart) { + return ["$.", false, glob.length - pos, true]; + } + i += cls.length; + if (neg) + negs.push(unip); + else + ranges.push(unip); + uflag = uflag || u; + continue WHILE; + } + } + } + escaping = false; + if (rangeStart) { + if (c > rangeStart) { + ranges.push(braceEscape(rangeStart) + "-" + braceEscape(c)); + } else if (c === rangeStart) { + ranges.push(braceEscape(c)); + } + rangeStart = ""; + i++; + continue; + } + if (glob.startsWith("-]", i + 1)) { + ranges.push(braceEscape(c + "-")); + i += 2; + continue; + } + if (glob.startsWith("-", i + 1)) { + rangeStart = c; + i += 2; + continue; + } + ranges.push(braceEscape(c)); + i++; + } + if (endPos < i) { + return ["", false, 0, false]; + } + if (!ranges.length && !negs.length) { + return ["$.", false, glob.length - pos, true]; + } + if (negs.length === 0 && ranges.length === 1 && /^\\?.$/.test(ranges[0]) && !negate) { + const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0]; + return [regexpEscape(r), false, endPos - pos, false]; + } + const sranges = "[" + (negate ? "^" : "") + rangesToString(ranges) + "]"; + const snegs = "[" + (negate ? "" : "^") + rangesToString(negs) + "]"; + const comb = ranges.length && negs.length ? "(" + sranges + "|" + snegs + ")" : ranges.length ? sranges : snegs; + return [comb, uflag, endPos - pos, true]; + }, "parseClass"); + exports2.parseClass = parseClass; + } +}); + +// node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/unescape.js +var require_unescape = __commonJS({ + "node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/unescape.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.unescape = void 0; + var unescape = /* @__PURE__ */ __name((s, { windowsPathsNoEscape = false } = {}) => { + return windowsPathsNoEscape ? s.replace(/\[([^\/\\])\]/g, "$1") : s.replace(/((?!\\).|^)\[([^\/\\])\]/g, "$1$2").replace(/\\([^\/])/g, "$1"); + }, "unescape"); + exports2.unescape = unescape; + } +}); + +// node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/ast.js +var require_ast = __commonJS({ + "node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/ast.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.AST = void 0; + var brace_expressions_js_1 = require_brace_expressions(); + var unescape_js_1 = require_unescape(); + var types = /* @__PURE__ */ new Set(["!", "?", "+", "*", "@"]); + var isExtglobType = /* @__PURE__ */ __name((c) => types.has(c), "isExtglobType"); + var startNoTraversal = "(?!(?:^|/)\\.\\.?(?:$|/))"; + var startNoDot = "(?!\\.)"; + var addPatternStart = /* @__PURE__ */ new Set(["[", "."]); + var justDots = /* @__PURE__ */ new Set(["..", "."]); + var reSpecials = new Set("().*{}+?[]^$\\!"); + var regExpEscape = /* @__PURE__ */ __name((s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), "regExpEscape"); + var qmark = "[^/]"; + var star = qmark + "*?"; + var starNoEmpty = qmark + "+?"; + var AST = class _AST { + static { + __name(this, "AST"); + } + type; + #root; + #hasMagic; + #uflag = false; + #parts = []; + #parent; + #parentIndex; + #negs; + #filledNegs = false; + #options; + #toString; + // set to true if it's an extglob with no children + // (which really means one child of '') + #emptyExt = false; + constructor(type, parent, options = {}) { + this.type = type; + if (type) + this.#hasMagic = true; + this.#parent = parent; + this.#root = this.#parent ? this.#parent.#root : this; + this.#options = this.#root === this ? options : this.#root.#options; + this.#negs = this.#root === this ? [] : this.#root.#negs; + if (type === "!" && !this.#root.#filledNegs) + this.#negs.push(this); + this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0; + } + get hasMagic() { + if (this.#hasMagic !== void 0) + return this.#hasMagic; + for (const p of this.#parts) { + if (typeof p === "string") + continue; + if (p.type || p.hasMagic) + return this.#hasMagic = true; + } + return this.#hasMagic; + } + // reconstructs the pattern + toString() { + if (this.#toString !== void 0) + return this.#toString; + if (!this.type) { + return this.#toString = this.#parts.map((p) => String(p)).join(""); + } else { + return this.#toString = this.type + "(" + this.#parts.map((p) => String(p)).join("|") + ")"; + } + } + #fillNegs() { + if (this !== this.#root) + throw new Error("should only call on root"); + if (this.#filledNegs) + return this; + this.toString(); + this.#filledNegs = true; + let n; + while (n = this.#negs.pop()) { + if (n.type !== "!") + continue; + let p = n; + let pp = p.#parent; + while (pp) { + for (let i = p.#parentIndex + 1; !pp.type && i < pp.#parts.length; i++) { + for (const part of n.#parts) { + if (typeof part === "string") { + throw new Error("string part in extglob AST??"); + } + part.copyIn(pp.#parts[i]); + } + } + p = pp; + pp = p.#parent; + } + } + return this; + } + push(...parts) { + for (const p of parts) { + if (p === "") + continue; + if (typeof p !== "string" && !(p instanceof _AST && p.#parent === this)) { + throw new Error("invalid part: " + p); + } + this.#parts.push(p); + } + } + toJSON() { + const ret = this.type === null ? this.#parts.slice().map((p) => typeof p === "string" ? p : p.toJSON()) : [this.type, ...this.#parts.map((p) => p.toJSON())]; + if (this.isStart() && !this.type) + ret.unshift([]); + if (this.isEnd() && (this === this.#root || this.#root.#filledNegs && this.#parent?.type === "!")) { + ret.push({}); + } + return ret; + } + isStart() { + if (this.#root === this) + return true; + if (!this.#parent?.isStart()) + return false; + if (this.#parentIndex === 0) + return true; + const p = this.#parent; + for (let i = 0; i < this.#parentIndex; i++) { + const pp = p.#parts[i]; + if (!(pp instanceof _AST && pp.type === "!")) { + return false; + } + } + return true; + } + isEnd() { + if (this.#root === this) + return true; + if (this.#parent?.type === "!") + return true; + if (!this.#parent?.isEnd()) + return false; + if (!this.type) + return this.#parent?.isEnd(); + const pl = this.#parent ? this.#parent.#parts.length : 0; + return this.#parentIndex === pl - 1; + } + copyIn(part) { + if (typeof part === "string") + this.push(part); + else + this.push(part.clone(this)); + } + clone(parent) { + const c = new _AST(this.type, parent); + for (const p of this.#parts) { + c.copyIn(p); + } + return c; + } + static #parseAST(str, ast, pos, opt) { + let escaping = false; + let inBrace = false; + let braceStart = -1; + let braceNeg = false; + if (ast.type === null) { + let i2 = pos; + let acc2 = ""; + while (i2 < str.length) { + const c = str.charAt(i2++); + if (escaping || c === "\\") { + escaping = !escaping; + acc2 += c; + continue; + } + if (inBrace) { + if (i2 === braceStart + 1) { + if (c === "^" || c === "!") { + braceNeg = true; + } + } else if (c === "]" && !(i2 === braceStart + 2 && braceNeg)) { + inBrace = false; + } + acc2 += c; + continue; + } else if (c === "[") { + inBrace = true; + braceStart = i2; + braceNeg = false; + acc2 += c; + continue; + } + if (!opt.noext && isExtglobType(c) && str.charAt(i2) === "(") { + ast.push(acc2); + acc2 = ""; + const ext = new _AST(c, ast); + i2 = _AST.#parseAST(str, ext, i2, opt); + ast.push(ext); + continue; + } + acc2 += c; + } + ast.push(acc2); + return i2; + } + let i = pos + 1; + let part = new _AST(null, ast); + const parts = []; + let acc = ""; + while (i < str.length) { + const c = str.charAt(i++); + if (escaping || c === "\\") { + escaping = !escaping; + acc += c; + continue; + } + if (inBrace) { + if (i === braceStart + 1) { + if (c === "^" || c === "!") { + braceNeg = true; + } + } else if (c === "]" && !(i === braceStart + 2 && braceNeg)) { + inBrace = false; + } + acc += c; + continue; + } else if (c === "[") { + inBrace = true; + braceStart = i; + braceNeg = false; + acc += c; + continue; + } + if (isExtglobType(c) && str.charAt(i) === "(") { + part.push(acc); + acc = ""; + const ext = new _AST(c, part); + part.push(ext); + i = _AST.#parseAST(str, ext, i, opt); + continue; + } + if (c === "|") { + part.push(acc); + acc = ""; + parts.push(part); + part = new _AST(null, ast); + continue; + } + if (c === ")") { + if (acc === "" && ast.#parts.length === 0) { + ast.#emptyExt = true; + } + part.push(acc); + acc = ""; + ast.push(...parts, part); + return i; + } + acc += c; + } + ast.type = null; + ast.#hasMagic = void 0; + ast.#parts = [str.substring(pos - 1)]; + return i; + } + static fromGlob(pattern, options = {}) { + const ast = new _AST(null, void 0, options); + _AST.#parseAST(pattern, ast, 0, options); + return ast; + } + // returns the regular expression if there's magic, or the unescaped + // string if not. + toMMPattern() { + if (this !== this.#root) + return this.#root.toMMPattern(); + const glob = this.toString(); + const [re, body, hasMagic, uflag] = this.toRegExpSource(); + const anyMagic = hasMagic || this.#hasMagic || this.#options.nocase && !this.#options.nocaseMagicOnly && glob.toUpperCase() !== glob.toLowerCase(); + if (!anyMagic) { + return body; + } + const flags = (this.#options.nocase ? "i" : "") + (uflag ? "u" : ""); + return Object.assign(new RegExp(`^${re}$`, flags), { + _src: re, + _glob: glob + }); + } + get options() { + return this.#options; + } + // returns the string match, the regexp source, whether there's magic + // in the regexp (so a regular expression is required) and whether or + // not the uflag is needed for the regular expression (for posix classes) + // TODO: instead of injecting the start/end at this point, just return + // the BODY of the regexp, along with the start/end portions suitable + // for binding the start/end in either a joined full-path makeRe context + // (where we bind to (^|/), or a standalone matchPart context (where + // we bind to ^, and not /). Otherwise slashes get duped! + // + // In part-matching mode, the start is: + // - if not isStart: nothing + // - if traversal possible, but not allowed: ^(?!\.\.?$) + // - if dots allowed or not possible: ^ + // - if dots possible and not allowed: ^(?!\.) + // end is: + // - if not isEnd(): nothing + // - else: $ + // + // In full-path matching mode, we put the slash at the START of the + // pattern, so start is: + // - if first pattern: same as part-matching mode + // - if not isStart(): nothing + // - if traversal possible, but not allowed: /(?!\.\.?(?:$|/)) + // - if dots allowed or not possible: / + // - if dots possible and not allowed: /(?!\.) + // end is: + // - if last pattern, same as part-matching mode + // - else nothing + // + // Always put the (?:$|/) on negated tails, though, because that has to be + // there to bind the end of the negated pattern portion, and it's easier to + // just stick it in now rather than try to inject it later in the middle of + // the pattern. + // + // We can just always return the same end, and leave it up to the caller + // to know whether it's going to be used joined or in parts. + // And, if the start is adjusted slightly, can do the same there: + // - if not isStart: nothing + // - if traversal possible, but not allowed: (?:/|^)(?!\.\.?$) + // - if dots allowed or not possible: (?:/|^) + // - if dots possible and not allowed: (?:/|^)(?!\.) + // + // But it's better to have a simpler binding without a conditional, for + // performance, so probably better to return both start options. + // + // Then the caller just ignores the end if it's not the first pattern, + // and the start always gets applied. + // + // But that's always going to be $ if it's the ending pattern, or nothing, + // so the caller can just attach $ at the end of the pattern when building. + // + // So the todo is: + // - better detect what kind of start is needed + // - return both flavors of starting pattern + // - attach $ at the end of the pattern when creating the actual RegExp + // + // Ah, but wait, no, that all only applies to the root when the first pattern + // is not an extglob. If the first pattern IS an extglob, then we need all + // that dot prevention biz to live in the extglob portions, because eg + // +(*|.x*) can match .xy but not .yx. + // + // So, return the two flavors if it's #root and the first child is not an + // AST, otherwise leave it to the child AST to handle it, and there, + // use the (?:^|/) style of start binding. + // + // Even simplified further: + // - Since the start for a join is eg /(?!\.) and the start for a part + // is ^(?!\.), we can just prepend (?!\.) to the pattern (either root + // or start or whatever) and prepend ^ or / at the Regexp construction. + toRegExpSource(allowDot) { + const dot = allowDot ?? !!this.#options.dot; + if (this.#root === this) + this.#fillNegs(); + if (!this.type) { + const noEmpty = this.isStart() && this.isEnd(); + const src = this.#parts.map((p) => { + const [re, _, hasMagic, uflag] = typeof p === "string" ? _AST.#parseGlob(p, this.#hasMagic, noEmpty) : p.toRegExpSource(allowDot); + this.#hasMagic = this.#hasMagic || hasMagic; + this.#uflag = this.#uflag || uflag; + return re; + }).join(""); + let start2 = ""; + if (this.isStart()) { + if (typeof this.#parts[0] === "string") { + const dotTravAllowed = this.#parts.length === 1 && justDots.has(this.#parts[0]); + if (!dotTravAllowed) { + const aps = addPatternStart; + const needNoTrav = ( + // dots are allowed, and the pattern starts with [ or . + dot && aps.has(src.charAt(0)) || // the pattern starts with \., and then [ or . + src.startsWith("\\.") && aps.has(src.charAt(2)) || // the pattern starts with \.\., and then [ or . + src.startsWith("\\.\\.") && aps.has(src.charAt(4)) + ); + const needNoDot = !dot && !allowDot && aps.has(src.charAt(0)); + start2 = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : ""; + } + } + } + let end = ""; + if (this.isEnd() && this.#root.#filledNegs && this.#parent?.type === "!") { + end = "(?:$|\\/)"; + } + const final2 = start2 + src + end; + return [ + final2, + (0, unescape_js_1.unescape)(src), + this.#hasMagic = !!this.#hasMagic, + this.#uflag + ]; + } + const repeated = this.type === "*" || this.type === "+"; + const start = this.type === "!" ? "(?:(?!(?:" : "(?:"; + let body = this.#partsToRegExp(dot); + if (this.isStart() && this.isEnd() && !body && this.type !== "!") { + const s = this.toString(); + this.#parts = [s]; + this.type = null; + this.#hasMagic = void 0; + return [s, (0, unescape_js_1.unescape)(this.toString()), false, false]; + } + let bodyDotAllowed = !repeated || allowDot || dot || !startNoDot ? "" : this.#partsToRegExp(true); + if (bodyDotAllowed === body) { + bodyDotAllowed = ""; + } + if (bodyDotAllowed) { + body = `(?:${body})(?:${bodyDotAllowed})*?`; + } + let final = ""; + if (this.type === "!" && this.#emptyExt) { + final = (this.isStart() && !dot ? startNoDot : "") + starNoEmpty; + } else { + const close = this.type === "!" ? ( + // !() must match something,but !(x) can match '' + "))" + (this.isStart() && !dot && !allowDot ? startNoDot : "") + star + ")" + ) : this.type === "@" ? ")" : this.type === "?" ? ")?" : this.type === "+" && bodyDotAllowed ? ")" : this.type === "*" && bodyDotAllowed ? `)?` : `)${this.type}`; + final = start + body + close; + } + return [ + final, + (0, unescape_js_1.unescape)(body), + this.#hasMagic = !!this.#hasMagic, + this.#uflag + ]; + } + #partsToRegExp(dot) { + return this.#parts.map((p) => { + if (typeof p === "string") { + throw new Error("string type in extglob ast??"); + } + const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot); + this.#uflag = this.#uflag || uflag; + return re; + }).filter((p) => !(this.isStart() && this.isEnd()) || !!p).join("|"); + } + static #parseGlob(glob, hasMagic, noEmpty = false) { + let escaping = false; + let re = ""; + let uflag = false; + let inStar = false; + for (let i = 0; i < glob.length; i++) { + const c = glob.charAt(i); + if (escaping) { + escaping = false; + re += (reSpecials.has(c) ? "\\" : "") + c; + inStar = false; + continue; + } + if (c === "\\") { + if (i === glob.length - 1) { + re += "\\\\"; + } else { + escaping = true; + } + continue; + } + if (c === "[") { + const [src, needUflag, consumed, magic] = (0, brace_expressions_js_1.parseClass)(glob, i); + if (consumed) { + re += src; + uflag = uflag || needUflag; + i += consumed - 1; + hasMagic = hasMagic || magic; + inStar = false; + continue; + } + } + if (c === "*") { + if (inStar) + continue; + inStar = true; + re += noEmpty && /^[*]+$/.test(glob) ? starNoEmpty : star; + hasMagic = true; + continue; + } else { + inStar = false; + } + if (c === "?") { + re += qmark; + hasMagic = true; + continue; + } + re += regExpEscape(c); + } + return [re, (0, unescape_js_1.unescape)(glob), !!hasMagic, uflag]; + } + }; + exports2.AST = AST; + } +}); + +// node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/escape.js +var require_escape = __commonJS({ + "node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/escape.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.escape = void 0; + var escape = /* @__PURE__ */ __name((s, { windowsPathsNoEscape = false } = {}) => { + return windowsPathsNoEscape ? s.replace(/[?*()[\]]/g, "[$&]") : s.replace(/[?*()[\]\\]/g, "\\$&"); + }, "escape"); + exports2.escape = escape; + } +}); + +// node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/index.js +var require_commonjs4 = __commonJS({ + "node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/index.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.unescape = exports2.escape = exports2.AST = exports2.Minimatch = exports2.match = exports2.makeRe = exports2.braceExpand = exports2.defaults = exports2.filter = exports2.GLOBSTAR = exports2.sep = exports2.minimatch = void 0; + var brace_expansion_1 = require_commonjs3(); + var assert_valid_pattern_js_1 = require_assert_valid_pattern(); + var ast_js_1 = require_ast(); + var escape_js_1 = require_escape(); + var unescape_js_1 = require_unescape(); + var minimatch = /* @__PURE__ */ __name((p, pattern, options = {}) => { + (0, assert_valid_pattern_js_1.assertValidPattern)(pattern); + if (!options.nocomment && pattern.charAt(0) === "#") { + return false; + } + return new Minimatch(pattern, options).match(p); + }, "minimatch"); + exports2.minimatch = minimatch; + var starDotExtRE = /^\*+([^+@!?\*\[\(]*)$/; + var starDotExtTest = /* @__PURE__ */ __name((ext2) => (f) => !f.startsWith(".") && f.endsWith(ext2), "starDotExtTest"); + var starDotExtTestDot = /* @__PURE__ */ __name((ext2) => (f) => f.endsWith(ext2), "starDotExtTestDot"); + var starDotExtTestNocase = /* @__PURE__ */ __name((ext2) => { + ext2 = ext2.toLowerCase(); + return (f) => !f.startsWith(".") && f.toLowerCase().endsWith(ext2); + }, "starDotExtTestNocase"); + var starDotExtTestNocaseDot = /* @__PURE__ */ __name((ext2) => { + ext2 = ext2.toLowerCase(); + return (f) => f.toLowerCase().endsWith(ext2); + }, "starDotExtTestNocaseDot"); + var starDotStarRE = /^\*+\.\*+$/; + var starDotStarTest = /* @__PURE__ */ __name((f) => !f.startsWith(".") && f.includes("."), "starDotStarTest"); + var starDotStarTestDot = /* @__PURE__ */ __name((f) => f !== "." && f !== ".." && f.includes("."), "starDotStarTestDot"); + var dotStarRE = /^\.\*+$/; + var dotStarTest = /* @__PURE__ */ __name((f) => f !== "." && f !== ".." && f.startsWith("."), "dotStarTest"); + var starRE = /^\*+$/; + var starTest = /* @__PURE__ */ __name((f) => f.length !== 0 && !f.startsWith("."), "starTest"); + var starTestDot = /* @__PURE__ */ __name((f) => f.length !== 0 && f !== "." && f !== "..", "starTestDot"); + var qmarksRE = /^\?+([^+@!?\*\[\(]*)?$/; + var qmarksTestNocase = /* @__PURE__ */ __name(([$0, ext2 = ""]) => { + const noext = qmarksTestNoExt([$0]); + if (!ext2) + return noext; + ext2 = ext2.toLowerCase(); + return (f) => noext(f) && f.toLowerCase().endsWith(ext2); + }, "qmarksTestNocase"); + var qmarksTestNocaseDot = /* @__PURE__ */ __name(([$0, ext2 = ""]) => { + const noext = qmarksTestNoExtDot([$0]); + if (!ext2) + return noext; + ext2 = ext2.toLowerCase(); + return (f) => noext(f) && f.toLowerCase().endsWith(ext2); + }, "qmarksTestNocaseDot"); + var qmarksTestDot = /* @__PURE__ */ __name(([$0, ext2 = ""]) => { + const noext = qmarksTestNoExtDot([$0]); + return !ext2 ? noext : (f) => noext(f) && f.endsWith(ext2); + }, "qmarksTestDot"); + var qmarksTest = /* @__PURE__ */ __name(([$0, ext2 = ""]) => { + const noext = qmarksTestNoExt([$0]); + return !ext2 ? noext : (f) => noext(f) && f.endsWith(ext2); + }, "qmarksTest"); + var qmarksTestNoExt = /* @__PURE__ */ __name(([$0]) => { + const len = $0.length; + return (f) => f.length === len && !f.startsWith("."); + }, "qmarksTestNoExt"); + var qmarksTestNoExtDot = /* @__PURE__ */ __name(([$0]) => { + const len = $0.length; + return (f) => f.length === len && f !== "." && f !== ".."; + }, "qmarksTestNoExtDot"); + var defaultPlatform = typeof process === "object" && process ? typeof process.env === "object" && process.env && process.env.__MINIMATCH_TESTING_PLATFORM__ || process.platform : "posix"; + var path = { + win32: { sep: "\\" }, + posix: { sep: "/" } + }; + exports2.sep = defaultPlatform === "win32" ? path.win32.sep : path.posix.sep; + exports2.minimatch.sep = exports2.sep; + exports2.GLOBSTAR = Symbol("globstar **"); + exports2.minimatch.GLOBSTAR = exports2.GLOBSTAR; + var qmark = "[^/]"; + var star = qmark + "*?"; + var twoStarDot = "(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?"; + var twoStarNoDot = "(?:(?!(?:\\/|^)\\.).)*?"; + var filter = /* @__PURE__ */ __name((pattern, options = {}) => (p) => (0, exports2.minimatch)(p, pattern, options), "filter"); + exports2.filter = filter; + exports2.minimatch.filter = exports2.filter; + var ext = /* @__PURE__ */ __name((a, b = {}) => Object.assign({}, a, b), "ext"); + var defaults = /* @__PURE__ */ __name((def) => { + if (!def || typeof def !== "object" || !Object.keys(def).length) { + return exports2.minimatch; + } + const orig = exports2.minimatch; + const m = /* @__PURE__ */ __name((p, pattern, options = {}) => orig(p, pattern, ext(def, options)), "m"); + return Object.assign(m, { + Minimatch: class Minimatch extends orig.Minimatch { + static { + __name(this, "Minimatch"); + } + constructor(pattern, options = {}) { + super(pattern, ext(def, options)); + } + static defaults(options) { + return orig.defaults(ext(def, options)).Minimatch; + } + }, + AST: class AST extends orig.AST { + static { + __name(this, "AST"); + } + /* c8 ignore start */ + constructor(type, parent, options = {}) { + super(type, parent, ext(def, options)); + } + /* c8 ignore stop */ + static fromGlob(pattern, options = {}) { + return orig.AST.fromGlob(pattern, ext(def, options)); + } + }, + unescape: /* @__PURE__ */ __name((s, options = {}) => orig.unescape(s, ext(def, options)), "unescape"), + escape: /* @__PURE__ */ __name((s, options = {}) => orig.escape(s, ext(def, options)), "escape"), + filter: /* @__PURE__ */ __name((pattern, options = {}) => orig.filter(pattern, ext(def, options)), "filter"), + defaults: /* @__PURE__ */ __name((options) => orig.defaults(ext(def, options)), "defaults"), + makeRe: /* @__PURE__ */ __name((pattern, options = {}) => orig.makeRe(pattern, ext(def, options)), "makeRe"), + braceExpand: /* @__PURE__ */ __name((pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)), "braceExpand"), + match: /* @__PURE__ */ __name((list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)), "match"), + sep: orig.sep, + GLOBSTAR: exports2.GLOBSTAR + }); + }, "defaults"); + exports2.defaults = defaults; + exports2.minimatch.defaults = exports2.defaults; + var braceExpand = /* @__PURE__ */ __name((pattern, options = {}) => { + (0, assert_valid_pattern_js_1.assertValidPattern)(pattern); + if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) { + return [pattern]; + } + return (0, brace_expansion_1.expand)(pattern); + }, "braceExpand"); + exports2.braceExpand = braceExpand; + exports2.minimatch.braceExpand = exports2.braceExpand; + var makeRe = /* @__PURE__ */ __name((pattern, options = {}) => new Minimatch(pattern, options).makeRe(), "makeRe"); + exports2.makeRe = makeRe; + exports2.minimatch.makeRe = exports2.makeRe; + var match = /* @__PURE__ */ __name((list, pattern, options = {}) => { + const mm = new Minimatch(pattern, options); + list = list.filter((f) => mm.match(f)); + if (mm.options.nonull && !list.length) { + list.push(pattern); + } + return list; + }, "match"); + exports2.match = match; + exports2.minimatch.match = exports2.match; + var globMagic = /[?*]|[+@!]\(.*?\)|\[|\]/; + var regExpEscape = /* @__PURE__ */ __name((s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), "regExpEscape"); + var Minimatch = class { + static { + __name(this, "Minimatch"); + } + options; + set; + pattern; + windowsPathsNoEscape; + nonegate; + negate; + comment; + empty; + preserveMultipleSlashes; + partial; + globSet; + globParts; + nocase; + isWindows; + platform; + windowsNoMagicRoot; + regexp; + constructor(pattern, options = {}) { + (0, assert_valid_pattern_js_1.assertValidPattern)(pattern); + options = options || {}; + this.options = options; + this.pattern = pattern; + this.platform = options.platform || defaultPlatform; + this.isWindows = this.platform === "win32"; + this.windowsPathsNoEscape = !!options.windowsPathsNoEscape || options.allowWindowsEscape === false; + if (this.windowsPathsNoEscape) { + this.pattern = this.pattern.replace(/\\/g, "/"); + } + this.preserveMultipleSlashes = !!options.preserveMultipleSlashes; + this.regexp = null; + this.negate = false; + this.nonegate = !!options.nonegate; + this.comment = false; + this.empty = false; + this.partial = !!options.partial; + this.nocase = !!this.options.nocase; + this.windowsNoMagicRoot = options.windowsNoMagicRoot !== void 0 ? options.windowsNoMagicRoot : !!(this.isWindows && this.nocase); + this.globSet = []; + this.globParts = []; + this.set = []; + this.make(); + } + hasMagic() { + if (this.options.magicalBraces && this.set.length > 1) { + return true; + } + for (const pattern of this.set) { + for (const part of pattern) { + if (typeof part !== "string") + return true; + } + } + return false; + } + debug(..._) { + } + make() { + const pattern = this.pattern; + const options = this.options; + if (!options.nocomment && pattern.charAt(0) === "#") { + this.comment = true; + return; + } + if (!pattern) { + this.empty = true; + return; + } + this.parseNegate(); + this.globSet = [...new Set(this.braceExpand())]; + if (options.debug) { + this.debug = (...args) => console.error(...args); + } + this.debug(this.pattern, this.globSet); + const rawGlobParts = this.globSet.map((s) => this.slashSplit(s)); + this.globParts = this.preprocess(rawGlobParts); + this.debug(this.pattern, this.globParts); + let set = this.globParts.map((s, _, __) => { + if (this.isWindows && this.windowsNoMagicRoot) { + const isUNC = s[0] === "" && s[1] === "" && (s[2] === "?" || !globMagic.test(s[2])) && !globMagic.test(s[3]); + const isDrive = /^[a-z]:/i.test(s[0]); + if (isUNC) { + return [...s.slice(0, 4), ...s.slice(4).map((ss) => this.parse(ss))]; + } else if (isDrive) { + return [s[0], ...s.slice(1).map((ss) => this.parse(ss))]; + } + } + return s.map((ss) => this.parse(ss)); + }); + this.debug(this.pattern, set); + this.set = set.filter((s) => s.indexOf(false) === -1); + if (this.isWindows) { + for (let i = 0; i < this.set.length; i++) { + const p = this.set[i]; + if (p[0] === "" && p[1] === "" && this.globParts[i][2] === "?" && typeof p[3] === "string" && /^[a-z]:$/i.test(p[3])) { + p[2] = "?"; + } + } + } + this.debug(this.pattern, this.set); + } + // various transforms to equivalent pattern sets that are + // faster to process in a filesystem walk. The goal is to + // eliminate what we can, and push all ** patterns as far + // to the right as possible, even if it increases the number + // of patterns that we have to process. + preprocess(globParts) { + if (this.options.noglobstar) { + for (let i = 0; i < globParts.length; i++) { + for (let j = 0; j < globParts[i].length; j++) { + if (globParts[i][j] === "**") { + globParts[i][j] = "*"; + } + } + } + } + const { optimizationLevel = 1 } = this.options; + if (optimizationLevel >= 2) { + globParts = this.firstPhasePreProcess(globParts); + globParts = this.secondPhasePreProcess(globParts); + } else if (optimizationLevel >= 1) { + globParts = this.levelOneOptimize(globParts); + } else { + globParts = this.adjascentGlobstarOptimize(globParts); + } + return globParts; + } + // just get rid of adjascent ** portions + adjascentGlobstarOptimize(globParts) { + return globParts.map((parts) => { + let gs = -1; + while (-1 !== (gs = parts.indexOf("**", gs + 1))) { + let i = gs; + while (parts[i + 1] === "**") { + i++; + } + if (i !== gs) { + parts.splice(gs, i - gs); + } + } + return parts; + }); + } + // get rid of adjascent ** and resolve .. portions + levelOneOptimize(globParts) { + return globParts.map((parts) => { + parts = parts.reduce((set, part) => { + const prev = set[set.length - 1]; + if (part === "**" && prev === "**") { + return set; + } + if (part === "..") { + if (prev && prev !== ".." && prev !== "." && prev !== "**") { + set.pop(); + return set; + } + } + set.push(part); + return set; + }, []); + return parts.length === 0 ? [""] : parts; + }); + } + levelTwoFileOptimize(parts) { + if (!Array.isArray(parts)) { + parts = this.slashSplit(parts); + } + let didSomething = false; + do { + didSomething = false; + if (!this.preserveMultipleSlashes) { + for (let i = 1; i < parts.length - 1; i++) { + const p = parts[i]; + if (i === 1 && p === "" && parts[0] === "") + continue; + if (p === "." || p === "") { + didSomething = true; + parts.splice(i, 1); + i--; + } + } + if (parts[0] === "." && parts.length === 2 && (parts[1] === "." || parts[1] === "")) { + didSomething = true; + parts.pop(); + } + } + let dd = 0; + while (-1 !== (dd = parts.indexOf("..", dd + 1))) { + const p = parts[dd - 1]; + if (p && p !== "." && p !== ".." && p !== "**") { + didSomething = true; + parts.splice(dd - 1, 2); + dd -= 2; + } + } + } while (didSomething); + return parts.length === 0 ? [""] : parts; + } + // First phase: single-pattern processing + //
 is 1 or more portions
+      //  is 1 or more portions
+      // 

is any portion other than ., .., '', or ** + // is . or '' + // + // **/.. is *brutal* for filesystem walking performance, because + // it effectively resets the recursive walk each time it occurs, + // and ** cannot be reduced out by a .. pattern part like a regexp + // or most strings (other than .., ., and '') can be. + // + //

/**/../

/

/ -> {

/../

/

/,

/**/

/

/} + //

// -> 
/
+      // 
/

/../ ->

/
+      // **/**/ -> **/
+      //
+      // **/*/ -> */**/ <== not valid because ** doesn't follow
+      // this WOULD be allowed if ** did follow symlinks, or * didn't
+      firstPhasePreProcess(globParts) {
+        let didSomething = false;
+        do {
+          didSomething = false;
+          for (let parts of globParts) {
+            let gs = -1;
+            while (-1 !== (gs = parts.indexOf("**", gs + 1))) {
+              let gss = gs;
+              while (parts[gss + 1] === "**") {
+                gss++;
+              }
+              if (gss > gs) {
+                parts.splice(gs + 1, gss - gs);
+              }
+              let next = parts[gs + 1];
+              const p = parts[gs + 2];
+              const p2 = parts[gs + 3];
+              if (next !== "..")
+                continue;
+              if (!p || p === "." || p === ".." || !p2 || p2 === "." || p2 === "..") {
+                continue;
+              }
+              didSomething = true;
+              parts.splice(gs, 1);
+              const other = parts.slice(0);
+              other[gs] = "**";
+              globParts.push(other);
+              gs--;
+            }
+            if (!this.preserveMultipleSlashes) {
+              for (let i = 1; i < parts.length - 1; i++) {
+                const p = parts[i];
+                if (i === 1 && p === "" && parts[0] === "")
+                  continue;
+                if (p === "." || p === "") {
+                  didSomething = true;
+                  parts.splice(i, 1);
+                  i--;
+                }
+              }
+              if (parts[0] === "." && parts.length === 2 && (parts[1] === "." || parts[1] === "")) {
+                didSomething = true;
+                parts.pop();
+              }
+            }
+            let dd = 0;
+            while (-1 !== (dd = parts.indexOf("..", dd + 1))) {
+              const p = parts[dd - 1];
+              if (p && p !== "." && p !== ".." && p !== "**") {
+                didSomething = true;
+                const needDot = dd === 1 && parts[dd + 1] === "**";
+                const splin = needDot ? ["."] : [];
+                parts.splice(dd - 1, 2, ...splin);
+                if (parts.length === 0)
+                  parts.push("");
+                dd -= 2;
+              }
+            }
+          }
+        } while (didSomething);
+        return globParts;
+      }
+      // second phase: multi-pattern dedupes
+      // {
/*/,
/

/} ->

/*/
+      // {
/,
/} -> 
/
+      // {
/**/,
/} -> 
/**/
+      //
+      // {
/**/,
/**/

/} ->

/**/
+      // ^-- not valid because ** doens't follow symlinks
+      secondPhasePreProcess(globParts) {
+        for (let i = 0; i < globParts.length - 1; i++) {
+          for (let j = i + 1; j < globParts.length; j++) {
+            const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);
+            if (matched) {
+              globParts[i] = [];
+              globParts[j] = matched;
+              break;
+            }
+          }
+        }
+        return globParts.filter((gs) => gs.length);
+      }
+      partsMatch(a, b, emptyGSMatch = false) {
+        let ai = 0;
+        let bi = 0;
+        let result = [];
+        let which = "";
+        while (ai < a.length && bi < b.length) {
+          if (a[ai] === b[bi]) {
+            result.push(which === "b" ? b[bi] : a[ai]);
+            ai++;
+            bi++;
+          } else if (emptyGSMatch && a[ai] === "**" && b[bi] === a[ai + 1]) {
+            result.push(a[ai]);
+            ai++;
+          } else if (emptyGSMatch && b[bi] === "**" && a[ai] === b[bi + 1]) {
+            result.push(b[bi]);
+            bi++;
+          } else if (a[ai] === "*" && b[bi] && (this.options.dot || !b[bi].startsWith(".")) && b[bi] !== "**") {
+            if (which === "b")
+              return false;
+            which = "a";
+            result.push(a[ai]);
+            ai++;
+            bi++;
+          } else if (b[bi] === "*" && a[ai] && (this.options.dot || !a[ai].startsWith(".")) && a[ai] !== "**") {
+            if (which === "a")
+              return false;
+            which = "b";
+            result.push(b[bi]);
+            ai++;
+            bi++;
+          } else {
+            return false;
+          }
+        }
+        return a.length === b.length && result;
+      }
+      parseNegate() {
+        if (this.nonegate)
+          return;
+        const pattern = this.pattern;
+        let negate = false;
+        let negateOffset = 0;
+        for (let i = 0; i < pattern.length && pattern.charAt(i) === "!"; i++) {
+          negate = !negate;
+          negateOffset++;
+        }
+        if (negateOffset)
+          this.pattern = pattern.slice(negateOffset);
+        this.negate = negate;
+      }
+      // set partial to true to test if, for example,
+      // "/a/b" matches the start of "/*/b/*/d"
+      // Partial means, if you run out of file before you run
+      // out of pattern, then that's fine, as long as all
+      // the parts match.
+      matchOne(file, pattern, partial = false) {
+        const options = this.options;
+        if (this.isWindows) {
+          const fileDrive = typeof file[0] === "string" && /^[a-z]:$/i.test(file[0]);
+          const fileUNC = !fileDrive && file[0] === "" && file[1] === "" && file[2] === "?" && /^[a-z]:$/i.test(file[3]);
+          const patternDrive = typeof pattern[0] === "string" && /^[a-z]:$/i.test(pattern[0]);
+          const patternUNC = !patternDrive && pattern[0] === "" && pattern[1] === "" && pattern[2] === "?" && typeof pattern[3] === "string" && /^[a-z]:$/i.test(pattern[3]);
+          const fdi = fileUNC ? 3 : fileDrive ? 0 : void 0;
+          const pdi = patternUNC ? 3 : patternDrive ? 0 : void 0;
+          if (typeof fdi === "number" && typeof pdi === "number") {
+            const [fd, pd] = [file[fdi], pattern[pdi]];
+            if (fd.toLowerCase() === pd.toLowerCase()) {
+              pattern[pdi] = fd;
+              if (pdi > fdi) {
+                pattern = pattern.slice(pdi);
+              } else if (fdi > pdi) {
+                file = file.slice(fdi);
+              }
+            }
+          }
+        }
+        const { optimizationLevel = 1 } = this.options;
+        if (optimizationLevel >= 2) {
+          file = this.levelTwoFileOptimize(file);
+        }
+        this.debug("matchOne", this, { file, pattern });
+        this.debug("matchOne", file.length, pattern.length);
+        for (var fi = 0, pi = 0, fl = file.length, pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {
+          this.debug("matchOne loop");
+          var p = pattern[pi];
+          var f = file[fi];
+          this.debug(pattern, p, f);
+          if (p === false) {
+            return false;
+          }
+          if (p === exports2.GLOBSTAR) {
+            this.debug("GLOBSTAR", [pattern, p, f]);
+            var fr = fi;
+            var pr = pi + 1;
+            if (pr === pl) {
+              this.debug("** at the end");
+              for (; fi < fl; fi++) {
+                if (file[fi] === "." || file[fi] === ".." || !options.dot && file[fi].charAt(0) === ".")
+                  return false;
+              }
+              return true;
+            }
+            while (fr < fl) {
+              var swallowee = file[fr];
+              this.debug("\nglobstar while", file, fr, pattern, pr, swallowee);
+              if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
+                this.debug("globstar found match!", fr, fl, swallowee);
+                return true;
+              } else {
+                if (swallowee === "." || swallowee === ".." || !options.dot && swallowee.charAt(0) === ".") {
+                  this.debug("dot detected!", file, fr, pattern, pr);
+                  break;
+                }
+                this.debug("globstar swallow a segment, and continue");
+                fr++;
+              }
+            }
+            if (partial) {
+              this.debug("\n>>> no match, partial?", file, fr, pattern, pr);
+              if (fr === fl) {
+                return true;
+              }
+            }
+            return false;
+          }
+          let hit;
+          if (typeof p === "string") {
+            hit = f === p;
+            this.debug("string match", p, f, hit);
+          } else {
+            hit = p.test(f);
+            this.debug("pattern match", p, f, hit);
+          }
+          if (!hit)
+            return false;
+        }
+        if (fi === fl && pi === pl) {
+          return true;
+        } else if (fi === fl) {
+          return partial;
+        } else if (pi === pl) {
+          return fi === fl - 1 && file[fi] === "";
+        } else {
+          throw new Error("wtf?");
+        }
+      }
+      braceExpand() {
+        return (0, exports2.braceExpand)(this.pattern, this.options);
+      }
+      parse(pattern) {
+        (0, assert_valid_pattern_js_1.assertValidPattern)(pattern);
+        const options = this.options;
+        if (pattern === "**")
+          return exports2.GLOBSTAR;
+        if (pattern === "")
+          return "";
+        let m;
+        let fastTest = null;
+        if (m = pattern.match(starRE)) {
+          fastTest = options.dot ? starTestDot : starTest;
+        } else if (m = pattern.match(starDotExtRE)) {
+          fastTest = (options.nocase ? options.dot ? starDotExtTestNocaseDot : starDotExtTestNocase : options.dot ? starDotExtTestDot : starDotExtTest)(m[1]);
+        } else if (m = pattern.match(qmarksRE)) {
+          fastTest = (options.nocase ? options.dot ? qmarksTestNocaseDot : qmarksTestNocase : options.dot ? qmarksTestDot : qmarksTest)(m);
+        } else if (m = pattern.match(starDotStarRE)) {
+          fastTest = options.dot ? starDotStarTestDot : starDotStarTest;
+        } else if (m = pattern.match(dotStarRE)) {
+          fastTest = dotStarTest;
+        }
+        const re = ast_js_1.AST.fromGlob(pattern, this.options).toMMPattern();
+        if (fastTest && typeof re === "object") {
+          Reflect.defineProperty(re, "test", { value: fastTest });
+        }
+        return re;
+      }
+      makeRe() {
+        if (this.regexp || this.regexp === false)
+          return this.regexp;
+        const set = this.set;
+        if (!set.length) {
+          this.regexp = false;
+          return this.regexp;
+        }
+        const options = this.options;
+        const twoStar = options.noglobstar ? star : options.dot ? twoStarDot : twoStarNoDot;
+        const flags = new Set(options.nocase ? ["i"] : []);
+        let re = set.map((pattern) => {
+          const pp = pattern.map((p) => {
+            if (p instanceof RegExp) {
+              for (const f of p.flags.split(""))
+                flags.add(f);
+            }
+            return typeof p === "string" ? regExpEscape(p) : p === exports2.GLOBSTAR ? exports2.GLOBSTAR : p._src;
+          });
+          pp.forEach((p, i) => {
+            const next = pp[i + 1];
+            const prev = pp[i - 1];
+            if (p !== exports2.GLOBSTAR || prev === exports2.GLOBSTAR) {
+              return;
+            }
+            if (prev === void 0) {
+              if (next !== void 0 && next !== exports2.GLOBSTAR) {
+                pp[i + 1] = "(?:\\/|" + twoStar + "\\/)?" + next;
+              } else {
+                pp[i] = twoStar;
+              }
+            } else if (next === void 0) {
+              pp[i - 1] = prev + "(?:\\/|" + twoStar + ")?";
+            } else if (next !== exports2.GLOBSTAR) {
+              pp[i - 1] = prev + "(?:\\/|\\/" + twoStar + "\\/)" + next;
+              pp[i + 1] = exports2.GLOBSTAR;
+            }
+          });
+          return pp.filter((p) => p !== exports2.GLOBSTAR).join("/");
+        }).join("|");
+        const [open, close] = set.length > 1 ? ["(?:", ")"] : ["", ""];
+        re = "^" + open + re + close + "$";
+        if (this.negate)
+          re = "^(?!" + re + ").+$";
+        try {
+          this.regexp = new RegExp(re, [...flags].join(""));
+        } catch (ex) {
+          this.regexp = false;
+        }
+        return this.regexp;
+      }
+      slashSplit(p) {
+        if (this.preserveMultipleSlashes) {
+          return p.split("/");
+        } else if (this.isWindows && /^\/\/[^\/]+/.test(p)) {
+          return ["", ...p.split(/\/+/)];
+        } else {
+          return p.split(/\/+/);
+        }
+      }
+      match(f, partial = this.partial) {
+        this.debug("match", f, this.pattern);
+        if (this.comment) {
+          return false;
+        }
+        if (this.empty) {
+          return f === "";
+        }
+        if (f === "/" && partial) {
+          return true;
+        }
+        const options = this.options;
+        if (this.isWindows) {
+          f = f.split("\\").join("/");
+        }
+        const ff = this.slashSplit(f);
+        this.debug(this.pattern, "split", ff);
+        const set = this.set;
+        this.debug(this.pattern, "set", set);
+        let filename = ff[ff.length - 1];
+        if (!filename) {
+          for (let i = ff.length - 2; !filename && i >= 0; i--) {
+            filename = ff[i];
+          }
+        }
+        for (let i = 0; i < set.length; i++) {
+          const pattern = set[i];
+          let file = ff;
+          if (options.matchBase && pattern.length === 1) {
+            file = [filename];
+          }
+          const hit = this.matchOne(file, pattern, partial);
+          if (hit) {
+            if (options.flipNegate) {
+              return true;
+            }
+            return !this.negate;
+          }
+        }
+        if (options.flipNegate) {
+          return false;
+        }
+        return this.negate;
+      }
+      static defaults(def) {
+        return exports2.minimatch.defaults(def).Minimatch;
+      }
+    };
+    exports2.Minimatch = Minimatch;
+    var ast_js_2 = require_ast();
+    Object.defineProperty(exports2, "AST", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return ast_js_2.AST;
+    }, "get") });
+    var escape_js_2 = require_escape();
+    Object.defineProperty(exports2, "escape", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return escape_js_2.escape;
+    }, "get") });
+    var unescape_js_2 = require_unescape();
+    Object.defineProperty(exports2, "unescape", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return unescape_js_2.unescape;
+    }, "get") });
+    exports2.minimatch.AST = ast_js_1.AST;
+    exports2.minimatch.Minimatch = Minimatch;
+    exports2.minimatch.escape = escape_js_1.escape;
+    exports2.minimatch.unescape = unescape_js_1.unescape;
+  }
+});
+
+// node_modules/.pnpm/minipass@7.1.3/node_modules/minipass/dist/commonjs/index.js
+var require_commonjs5 = __commonJS({
+  "node_modules/.pnpm/minipass@7.1.3/node_modules/minipass/dist/commonjs/index.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Minipass = exports2.isWritable = exports2.isReadable = exports2.isStream = void 0;
+    var proc = typeof process === "object" && process ? process : {
+      stdout: null,
+      stderr: null
+    };
+    var node_events_1 = require("node:events");
+    var node_stream_1 = __importDefault(require("node:stream"));
+    var node_string_decoder_1 = require("node:string_decoder");
+    var isStream = /* @__PURE__ */ __name((s) => !!s && typeof s === "object" && (s instanceof Minipass || s instanceof node_stream_1.default || (0, exports2.isReadable)(s) || (0, exports2.isWritable)(s)), "isStream");
+    exports2.isStream = isStream;
+    var isReadable = /* @__PURE__ */ __name((s) => !!s && typeof s === "object" && s instanceof node_events_1.EventEmitter && typeof s.pipe === "function" && // node core Writable streams have a pipe() method, but it throws
+    s.pipe !== node_stream_1.default.Writable.prototype.pipe, "isReadable");
+    exports2.isReadable = isReadable;
+    var isWritable = /* @__PURE__ */ __name((s) => !!s && typeof s === "object" && s instanceof node_events_1.EventEmitter && typeof s.write === "function" && typeof s.end === "function", "isWritable");
+    exports2.isWritable = isWritable;
+    var EOF = Symbol("EOF");
+    var MAYBE_EMIT_END = Symbol("maybeEmitEnd");
+    var EMITTED_END = Symbol("emittedEnd");
+    var EMITTING_END = Symbol("emittingEnd");
+    var EMITTED_ERROR = Symbol("emittedError");
+    var CLOSED = Symbol("closed");
+    var READ = Symbol("read");
+    var FLUSH = Symbol("flush");
+    var FLUSHCHUNK = Symbol("flushChunk");
+    var ENCODING = Symbol("encoding");
+    var DECODER = Symbol("decoder");
+    var FLOWING = Symbol("flowing");
+    var PAUSED = Symbol("paused");
+    var RESUME = Symbol("resume");
+    var BUFFER = Symbol("buffer");
+    var PIPES = Symbol("pipes");
+    var BUFFERLENGTH = Symbol("bufferLength");
+    var BUFFERPUSH = Symbol("bufferPush");
+    var BUFFERSHIFT = Symbol("bufferShift");
+    var OBJECTMODE = Symbol("objectMode");
+    var DESTROYED = Symbol("destroyed");
+    var ERROR = Symbol("error");
+    var EMITDATA = Symbol("emitData");
+    var EMITEND = Symbol("emitEnd");
+    var EMITEND2 = Symbol("emitEnd2");
+    var ASYNC = Symbol("async");
+    var ABORT = Symbol("abort");
+    var ABORTED = Symbol("aborted");
+    var SIGNAL = Symbol("signal");
+    var DATALISTENERS = Symbol("dataListeners");
+    var DISCARDED = Symbol("discarded");
+    var defer = /* @__PURE__ */ __name((fn) => Promise.resolve().then(fn), "defer");
+    var nodefer = /* @__PURE__ */ __name((fn) => fn(), "nodefer");
+    var isEndish = /* @__PURE__ */ __name((ev) => ev === "end" || ev === "finish" || ev === "prefinish", "isEndish");
+    var isArrayBufferLike = /* @__PURE__ */ __name((b) => b instanceof ArrayBuffer || !!b && typeof b === "object" && b.constructor && b.constructor.name === "ArrayBuffer" && b.byteLength >= 0, "isArrayBufferLike");
+    var isArrayBufferView = /* @__PURE__ */ __name((b) => !Buffer.isBuffer(b) && ArrayBuffer.isView(b), "isArrayBufferView");
+    var Pipe = class {
+      static {
+        __name(this, "Pipe");
+      }
+      src;
+      dest;
+      opts;
+      ondrain;
+      constructor(src, dest, opts) {
+        this.src = src;
+        this.dest = dest;
+        this.opts = opts;
+        this.ondrain = () => src[RESUME]();
+        this.dest.on("drain", this.ondrain);
+      }
+      unpipe() {
+        this.dest.removeListener("drain", this.ondrain);
+      }
+      // only here for the prototype
+      /* c8 ignore start */
+      proxyErrors(_er) {
+      }
+      /* c8 ignore stop */
+      end() {
+        this.unpipe();
+        if (this.opts.end)
+          this.dest.end();
+      }
+    };
+    var PipeProxyErrors = class extends Pipe {
+      static {
+        __name(this, "PipeProxyErrors");
+      }
+      unpipe() {
+        this.src.removeListener("error", this.proxyErrors);
+        super.unpipe();
+      }
+      constructor(src, dest, opts) {
+        super(src, dest, opts);
+        this.proxyErrors = (er) => this.dest.emit("error", er);
+        src.on("error", this.proxyErrors);
+      }
+    };
+    var isObjectModeOptions = /* @__PURE__ */ __name((o) => !!o.objectMode, "isObjectModeOptions");
+    var isEncodingOptions = /* @__PURE__ */ __name((o) => !o.objectMode && !!o.encoding && o.encoding !== "buffer", "isEncodingOptions");
+    var Minipass = class extends node_events_1.EventEmitter {
+      static {
+        __name(this, "Minipass");
+      }
+      [FLOWING] = false;
+      [PAUSED] = false;
+      [PIPES] = [];
+      [BUFFER] = [];
+      [OBJECTMODE];
+      [ENCODING];
+      [ASYNC];
+      [DECODER];
+      [EOF] = false;
+      [EMITTED_END] = false;
+      [EMITTING_END] = false;
+      [CLOSED] = false;
+      [EMITTED_ERROR] = null;
+      [BUFFERLENGTH] = 0;
+      [DESTROYED] = false;
+      [SIGNAL];
+      [ABORTED] = false;
+      [DATALISTENERS] = 0;
+      [DISCARDED] = false;
+      /**
+       * true if the stream can be written
+       */
+      writable = true;
+      /**
+       * true if the stream can be read
+       */
+      readable = true;
+      /**
+       * If `RType` is Buffer, then options do not need to be provided.
+       * Otherwise, an options object must be provided to specify either
+       * {@link Minipass.SharedOptions.objectMode} or
+       * {@link Minipass.SharedOptions.encoding}, as appropriate.
+       */
+      constructor(...args) {
+        const options = args[0] || {};
+        super();
+        if (options.objectMode && typeof options.encoding === "string") {
+          throw new TypeError("Encoding and objectMode may not be used together");
+        }
+        if (isObjectModeOptions(options)) {
+          this[OBJECTMODE] = true;
+          this[ENCODING] = null;
+        } else if (isEncodingOptions(options)) {
+          this[ENCODING] = options.encoding;
+          this[OBJECTMODE] = false;
+        } else {
+          this[OBJECTMODE] = false;
+          this[ENCODING] = null;
+        }
+        this[ASYNC] = !!options.async;
+        this[DECODER] = this[ENCODING] ? new node_string_decoder_1.StringDecoder(this[ENCODING]) : null;
+        if (options && options.debugExposeBuffer === true) {
+          Object.defineProperty(this, "buffer", { get: /* @__PURE__ */ __name(() => this[BUFFER], "get") });
+        }
+        if (options && options.debugExposePipes === true) {
+          Object.defineProperty(this, "pipes", { get: /* @__PURE__ */ __name(() => this[PIPES], "get") });
+        }
+        const { signal } = options;
+        if (signal) {
+          this[SIGNAL] = signal;
+          if (signal.aborted) {
+            this[ABORT]();
+          } else {
+            signal.addEventListener("abort", () => this[ABORT]());
+          }
+        }
+      }
+      /**
+       * The amount of data stored in the buffer waiting to be read.
+       *
+       * For Buffer strings, this will be the total byte length.
+       * For string encoding streams, this will be the string character length,
+       * according to JavaScript's `string.length` logic.
+       * For objectMode streams, this is a count of the items waiting to be
+       * emitted.
+       */
+      get bufferLength() {
+        return this[BUFFERLENGTH];
+      }
+      /**
+       * The `BufferEncoding` currently in use, or `null`
+       */
+      get encoding() {
+        return this[ENCODING];
+      }
+      /**
+       * @deprecated - This is a read only property
+       */
+      set encoding(_enc) {
+        throw new Error("Encoding must be set at instantiation time");
+      }
+      /**
+       * @deprecated - Encoding may only be set at instantiation time
+       */
+      setEncoding(_enc) {
+        throw new Error("Encoding must be set at instantiation time");
+      }
+      /**
+       * True if this is an objectMode stream
+       */
+      get objectMode() {
+        return this[OBJECTMODE];
+      }
+      /**
+       * @deprecated - This is a read-only property
+       */
+      set objectMode(_om) {
+        throw new Error("objectMode must be set at instantiation time");
+      }
+      /**
+       * true if this is an async stream
+       */
+      get ["async"]() {
+        return this[ASYNC];
+      }
+      /**
+       * Set to true to make this stream async.
+       *
+       * Once set, it cannot be unset, as this would potentially cause incorrect
+       * behavior.  Ie, a sync stream can be made async, but an async stream
+       * cannot be safely made sync.
+       */
+      set ["async"](a) {
+        this[ASYNC] = this[ASYNC] || !!a;
+      }
+      // drop everything and get out of the flow completely
+      [ABORT]() {
+        this[ABORTED] = true;
+        this.emit("abort", this[SIGNAL]?.reason);
+        this.destroy(this[SIGNAL]?.reason);
+      }
+      /**
+       * True if the stream has been aborted.
+       */
+      get aborted() {
+        return this[ABORTED];
+      }
+      /**
+       * No-op setter. Stream aborted status is set via the AbortSignal provided
+       * in the constructor options.
+       */
+      set aborted(_) {
+      }
+      write(chunk, encoding, cb) {
+        if (this[ABORTED])
+          return false;
+        if (this[EOF])
+          throw new Error("write after end");
+        if (this[DESTROYED]) {
+          this.emit("error", Object.assign(new Error("Cannot call write after a stream was destroyed"), { code: "ERR_STREAM_DESTROYED" }));
+          return true;
+        }
+        if (typeof encoding === "function") {
+          cb = encoding;
+          encoding = "utf8";
+        }
+        if (!encoding)
+          encoding = "utf8";
+        const fn = this[ASYNC] ? defer : nodefer;
+        if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {
+          if (isArrayBufferView(chunk)) {
+            chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength);
+          } else if (isArrayBufferLike(chunk)) {
+            chunk = Buffer.from(chunk);
+          } else if (typeof chunk !== "string") {
+            throw new Error("Non-contiguous data written to non-objectMode stream");
+          }
+        }
+        if (this[OBJECTMODE]) {
+          if (this[FLOWING] && this[BUFFERLENGTH] !== 0)
+            this[FLUSH](true);
+          if (this[FLOWING])
+            this.emit("data", chunk);
+          else
+            this[BUFFERPUSH](chunk);
+          if (this[BUFFERLENGTH] !== 0)
+            this.emit("readable");
+          if (cb)
+            fn(cb);
+          return this[FLOWING];
+        }
+        if (!chunk.length) {
+          if (this[BUFFERLENGTH] !== 0)
+            this.emit("readable");
+          if (cb)
+            fn(cb);
+          return this[FLOWING];
+        }
+        if (typeof chunk === "string" && // unless it is a string already ready for us to use
+        !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)) {
+          chunk = Buffer.from(chunk, encoding);
+        }
+        if (Buffer.isBuffer(chunk) && this[ENCODING]) {
+          chunk = this[DECODER].write(chunk);
+        }
+        if (this[FLOWING] && this[BUFFERLENGTH] !== 0)
+          this[FLUSH](true);
+        if (this[FLOWING])
+          this.emit("data", chunk);
+        else
+          this[BUFFERPUSH](chunk);
+        if (this[BUFFERLENGTH] !== 0)
+          this.emit("readable");
+        if (cb)
+          fn(cb);
+        return this[FLOWING];
+      }
+      /**
+       * Low-level explicit read method.
+       *
+       * In objectMode, the argument is ignored, and one item is returned if
+       * available.
+       *
+       * `n` is the number of bytes (or in the case of encoding streams,
+       * characters) to consume. If `n` is not provided, then the entire buffer
+       * is returned, or `null` is returned if no data is available.
+       *
+       * If `n` is greater that the amount of data in the internal buffer,
+       * then `null` is returned.
+       */
+      read(n) {
+        if (this[DESTROYED])
+          return null;
+        this[DISCARDED] = false;
+        if (this[BUFFERLENGTH] === 0 || n === 0 || n && n > this[BUFFERLENGTH]) {
+          this[MAYBE_EMIT_END]();
+          return null;
+        }
+        if (this[OBJECTMODE])
+          n = null;
+        if (this[BUFFER].length > 1 && !this[OBJECTMODE]) {
+          this[BUFFER] = [
+            this[ENCODING] ? this[BUFFER].join("") : Buffer.concat(this[BUFFER], this[BUFFERLENGTH])
+          ];
+        }
+        const ret = this[READ](n || null, this[BUFFER][0]);
+        this[MAYBE_EMIT_END]();
+        return ret;
+      }
+      [READ](n, chunk) {
+        if (this[OBJECTMODE])
+          this[BUFFERSHIFT]();
+        else {
+          const c = chunk;
+          if (n === c.length || n === null)
+            this[BUFFERSHIFT]();
+          else if (typeof c === "string") {
+            this[BUFFER][0] = c.slice(n);
+            chunk = c.slice(0, n);
+            this[BUFFERLENGTH] -= n;
+          } else {
+            this[BUFFER][0] = c.subarray(n);
+            chunk = c.subarray(0, n);
+            this[BUFFERLENGTH] -= n;
+          }
+        }
+        this.emit("data", chunk);
+        if (!this[BUFFER].length && !this[EOF])
+          this.emit("drain");
+        return chunk;
+      }
+      end(chunk, encoding, cb) {
+        if (typeof chunk === "function") {
+          cb = chunk;
+          chunk = void 0;
+        }
+        if (typeof encoding === "function") {
+          cb = encoding;
+          encoding = "utf8";
+        }
+        if (chunk !== void 0)
+          this.write(chunk, encoding);
+        if (cb)
+          this.once("end", cb);
+        this[EOF] = true;
+        this.writable = false;
+        if (this[FLOWING] || !this[PAUSED])
+          this[MAYBE_EMIT_END]();
+        return this;
+      }
+      // don't let the internal resume be overwritten
+      [RESUME]() {
+        if (this[DESTROYED])
+          return;
+        if (!this[DATALISTENERS] && !this[PIPES].length) {
+          this[DISCARDED] = true;
+        }
+        this[PAUSED] = false;
+        this[FLOWING] = true;
+        this.emit("resume");
+        if (this[BUFFER].length)
+          this[FLUSH]();
+        else if (this[EOF])
+          this[MAYBE_EMIT_END]();
+        else
+          this.emit("drain");
+      }
+      /**
+       * Resume the stream if it is currently in a paused state
+       *
+       * If called when there are no pipe destinations or `data` event listeners,
+       * this will place the stream in a "discarded" state, where all data will
+       * be thrown away. The discarded state is removed if a pipe destination or
+       * data handler is added, if pause() is called, or if any synchronous or
+       * asynchronous iteration is started.
+       */
+      resume() {
+        return this[RESUME]();
+      }
+      /**
+       * Pause the stream
+       */
+      pause() {
+        this[FLOWING] = false;
+        this[PAUSED] = true;
+        this[DISCARDED] = false;
+      }
+      /**
+       * true if the stream has been forcibly destroyed
+       */
+      get destroyed() {
+        return this[DESTROYED];
+      }
+      /**
+       * true if the stream is currently in a flowing state, meaning that
+       * any writes will be immediately emitted.
+       */
+      get flowing() {
+        return this[FLOWING];
+      }
+      /**
+       * true if the stream is currently in a paused state
+       */
+      get paused() {
+        return this[PAUSED];
+      }
+      [BUFFERPUSH](chunk) {
+        if (this[OBJECTMODE])
+          this[BUFFERLENGTH] += 1;
+        else
+          this[BUFFERLENGTH] += chunk.length;
+        this[BUFFER].push(chunk);
+      }
+      [BUFFERSHIFT]() {
+        if (this[OBJECTMODE])
+          this[BUFFERLENGTH] -= 1;
+        else
+          this[BUFFERLENGTH] -= this[BUFFER][0].length;
+        return this[BUFFER].shift();
+      }
+      [FLUSH](noDrain = false) {
+        do {
+        } while (this[FLUSHCHUNK](this[BUFFERSHIFT]()) && this[BUFFER].length);
+        if (!noDrain && !this[BUFFER].length && !this[EOF])
+          this.emit("drain");
+      }
+      [FLUSHCHUNK](chunk) {
+        this.emit("data", chunk);
+        return this[FLOWING];
+      }
+      /**
+       * Pipe all data emitted by this stream into the destination provided.
+       *
+       * Triggers the flow of data.
+       */
+      pipe(dest, opts) {
+        if (this[DESTROYED])
+          return dest;
+        this[DISCARDED] = false;
+        const ended = this[EMITTED_END];
+        opts = opts || {};
+        if (dest === proc.stdout || dest === proc.stderr)
+          opts.end = false;
+        else
+          opts.end = opts.end !== false;
+        opts.proxyErrors = !!opts.proxyErrors;
+        if (ended) {
+          if (opts.end)
+            dest.end();
+        } else {
+          this[PIPES].push(!opts.proxyErrors ? new Pipe(this, dest, opts) : new PipeProxyErrors(this, dest, opts));
+          if (this[ASYNC])
+            defer(() => this[RESUME]());
+          else
+            this[RESUME]();
+        }
+        return dest;
+      }
+      /**
+       * Fully unhook a piped destination stream.
+       *
+       * If the destination stream was the only consumer of this stream (ie,
+       * there are no other piped destinations or `'data'` event listeners)
+       * then the flow of data will stop until there is another consumer or
+       * {@link Minipass#resume} is explicitly called.
+       */
+      unpipe(dest) {
+        const p = this[PIPES].find((p2) => p2.dest === dest);
+        if (p) {
+          if (this[PIPES].length === 1) {
+            if (this[FLOWING] && this[DATALISTENERS] === 0) {
+              this[FLOWING] = false;
+            }
+            this[PIPES] = [];
+          } else
+            this[PIPES].splice(this[PIPES].indexOf(p), 1);
+          p.unpipe();
+        }
+      }
+      /**
+       * Alias for {@link Minipass#on}
+       */
+      addListener(ev, handler) {
+        return this.on(ev, handler);
+      }
+      /**
+       * Mostly identical to `EventEmitter.on`, with the following
+       * behavior differences to prevent data loss and unnecessary hangs:
+       *
+       * - Adding a 'data' event handler will trigger the flow of data
+       *
+       * - Adding a 'readable' event handler when there is data waiting to be read
+       *   will cause 'readable' to be emitted immediately.
+       *
+       * - Adding an 'endish' event handler ('end', 'finish', etc.) which has
+       *   already passed will cause the event to be emitted immediately and all
+       *   handlers removed.
+       *
+       * - Adding an 'error' event handler after an error has been emitted will
+       *   cause the event to be re-emitted immediately with the error previously
+       *   raised.
+       */
+      on(ev, handler) {
+        const ret = super.on(ev, handler);
+        if (ev === "data") {
+          this[DISCARDED] = false;
+          this[DATALISTENERS]++;
+          if (!this[PIPES].length && !this[FLOWING]) {
+            this[RESUME]();
+          }
+        } else if (ev === "readable" && this[BUFFERLENGTH] !== 0) {
+          super.emit("readable");
+        } else if (isEndish(ev) && this[EMITTED_END]) {
+          super.emit(ev);
+          this.removeAllListeners(ev);
+        } else if (ev === "error" && this[EMITTED_ERROR]) {
+          const h = handler;
+          if (this[ASYNC])
+            defer(() => h.call(this, this[EMITTED_ERROR]));
+          else
+            h.call(this, this[EMITTED_ERROR]);
+        }
+        return ret;
+      }
+      /**
+       * Alias for {@link Minipass#off}
+       */
+      removeListener(ev, handler) {
+        return this.off(ev, handler);
+      }
+      /**
+       * Mostly identical to `EventEmitter.off`
+       *
+       * If a 'data' event handler is removed, and it was the last consumer
+       * (ie, there are no pipe destinations or other 'data' event listeners),
+       * then the flow of data will stop until there is another consumer or
+       * {@link Minipass#resume} is explicitly called.
+       */
+      off(ev, handler) {
+        const ret = super.off(ev, handler);
+        if (ev === "data") {
+          this[DATALISTENERS] = this.listeners("data").length;
+          if (this[DATALISTENERS] === 0 && !this[DISCARDED] && !this[PIPES].length) {
+            this[FLOWING] = false;
+          }
+        }
+        return ret;
+      }
+      /**
+       * Mostly identical to `EventEmitter.removeAllListeners`
+       *
+       * If all 'data' event handlers are removed, and they were the last consumer
+       * (ie, there are no pipe destinations), then the flow of data will stop
+       * until there is another consumer or {@link Minipass#resume} is explicitly
+       * called.
+       */
+      removeAllListeners(ev) {
+        const ret = super.removeAllListeners(ev);
+        if (ev === "data" || ev === void 0) {
+          this[DATALISTENERS] = 0;
+          if (!this[DISCARDED] && !this[PIPES].length) {
+            this[FLOWING] = false;
+          }
+        }
+        return ret;
+      }
+      /**
+       * true if the 'end' event has been emitted
+       */
+      get emittedEnd() {
+        return this[EMITTED_END];
+      }
+      [MAYBE_EMIT_END]() {
+        if (!this[EMITTING_END] && !this[EMITTED_END] && !this[DESTROYED] && this[BUFFER].length === 0 && this[EOF]) {
+          this[EMITTING_END] = true;
+          this.emit("end");
+          this.emit("prefinish");
+          this.emit("finish");
+          if (this[CLOSED])
+            this.emit("close");
+          this[EMITTING_END] = false;
+        }
+      }
+      /**
+       * Mostly identical to `EventEmitter.emit`, with the following
+       * behavior differences to prevent data loss and unnecessary hangs:
+       *
+       * If the stream has been destroyed, and the event is something other
+       * than 'close' or 'error', then `false` is returned and no handlers
+       * are called.
+       *
+       * If the event is 'end', and has already been emitted, then the event
+       * is ignored. If the stream is in a paused or non-flowing state, then
+       * the event will be deferred until data flow resumes. If the stream is
+       * async, then handlers will be called on the next tick rather than
+       * immediately.
+       *
+       * If the event is 'close', and 'end' has not yet been emitted, then
+       * the event will be deferred until after 'end' is emitted.
+       *
+       * If the event is 'error', and an AbortSignal was provided for the stream,
+       * and there are no listeners, then the event is ignored, matching the
+       * behavior of node core streams in the presense of an AbortSignal.
+       *
+       * If the event is 'finish' or 'prefinish', then all listeners will be
+       * removed after emitting the event, to prevent double-firing.
+       */
+      emit(ev, ...args) {
+        const data = args[0];
+        if (ev !== "error" && ev !== "close" && ev !== DESTROYED && this[DESTROYED]) {
+          return false;
+        } else if (ev === "data") {
+          return !this[OBJECTMODE] && !data ? false : this[ASYNC] ? (defer(() => this[EMITDATA](data)), true) : this[EMITDATA](data);
+        } else if (ev === "end") {
+          return this[EMITEND]();
+        } else if (ev === "close") {
+          this[CLOSED] = true;
+          if (!this[EMITTED_END] && !this[DESTROYED])
+            return false;
+          const ret2 = super.emit("close");
+          this.removeAllListeners("close");
+          return ret2;
+        } else if (ev === "error") {
+          this[EMITTED_ERROR] = data;
+          super.emit(ERROR, data);
+          const ret2 = !this[SIGNAL] || this.listeners("error").length ? super.emit("error", data) : false;
+          this[MAYBE_EMIT_END]();
+          return ret2;
+        } else if (ev === "resume") {
+          const ret2 = super.emit("resume");
+          this[MAYBE_EMIT_END]();
+          return ret2;
+        } else if (ev === "finish" || ev === "prefinish") {
+          const ret2 = super.emit(ev);
+          this.removeAllListeners(ev);
+          return ret2;
+        }
+        const ret = super.emit(ev, ...args);
+        this[MAYBE_EMIT_END]();
+        return ret;
+      }
+      [EMITDATA](data) {
+        for (const p of this[PIPES]) {
+          if (p.dest.write(data) === false)
+            this.pause();
+        }
+        const ret = this[DISCARDED] ? false : super.emit("data", data);
+        this[MAYBE_EMIT_END]();
+        return ret;
+      }
+      [EMITEND]() {
+        if (this[EMITTED_END])
+          return false;
+        this[EMITTED_END] = true;
+        this.readable = false;
+        return this[ASYNC] ? (defer(() => this[EMITEND2]()), true) : this[EMITEND2]();
+      }
+      [EMITEND2]() {
+        if (this[DECODER]) {
+          const data = this[DECODER].end();
+          if (data) {
+            for (const p of this[PIPES]) {
+              p.dest.write(data);
+            }
+            if (!this[DISCARDED])
+              super.emit("data", data);
+          }
+        }
+        for (const p of this[PIPES]) {
+          p.end();
+        }
+        const ret = super.emit("end");
+        this.removeAllListeners("end");
+        return ret;
+      }
+      /**
+       * Return a Promise that resolves to an array of all emitted data once
+       * the stream ends.
+       */
+      async collect() {
+        const buf = Object.assign([], {
+          dataLength: 0
+        });
+        if (!this[OBJECTMODE])
+          buf.dataLength = 0;
+        const p = this.promise();
+        this.on("data", (c) => {
+          buf.push(c);
+          if (!this[OBJECTMODE])
+            buf.dataLength += c.length;
+        });
+        await p;
+        return buf;
+      }
+      /**
+       * Return a Promise that resolves to the concatenation of all emitted data
+       * once the stream ends.
+       *
+       * Not allowed on objectMode streams.
+       */
+      async concat() {
+        if (this[OBJECTMODE]) {
+          throw new Error("cannot concat in objectMode");
+        }
+        const buf = await this.collect();
+        return this[ENCODING] ? buf.join("") : Buffer.concat(buf, buf.dataLength);
+      }
+      /**
+       * Return a void Promise that resolves once the stream ends.
+       */
+      async promise() {
+        return new Promise((resolve, reject) => {
+          this.on(DESTROYED, () => reject(new Error("stream destroyed")));
+          this.on("error", (er) => reject(er));
+          this.on("end", () => resolve());
+        });
+      }
+      /**
+       * Asynchronous `for await of` iteration.
+       *
+       * This will continue emitting all chunks until the stream terminates.
+       */
+      [Symbol.asyncIterator]() {
+        this[DISCARDED] = false;
+        let stopped = false;
+        const stop = /* @__PURE__ */ __name(async () => {
+          this.pause();
+          stopped = true;
+          return { value: void 0, done: true };
+        }, "stop");
+        const next = /* @__PURE__ */ __name(() => {
+          if (stopped)
+            return stop();
+          const res = this.read();
+          if (res !== null)
+            return Promise.resolve({ done: false, value: res });
+          if (this[EOF])
+            return stop();
+          let resolve;
+          let reject;
+          const onerr = /* @__PURE__ */ __name((er) => {
+            this.off("data", ondata);
+            this.off("end", onend);
+            this.off(DESTROYED, ondestroy);
+            stop();
+            reject(er);
+          }, "onerr");
+          const ondata = /* @__PURE__ */ __name((value) => {
+            this.off("error", onerr);
+            this.off("end", onend);
+            this.off(DESTROYED, ondestroy);
+            this.pause();
+            resolve({ value, done: !!this[EOF] });
+          }, "ondata");
+          const onend = /* @__PURE__ */ __name(() => {
+            this.off("error", onerr);
+            this.off("data", ondata);
+            this.off(DESTROYED, ondestroy);
+            stop();
+            resolve({ done: true, value: void 0 });
+          }, "onend");
+          const ondestroy = /* @__PURE__ */ __name(() => onerr(new Error("stream destroyed")), "ondestroy");
+          return new Promise((res2, rej) => {
+            reject = rej;
+            resolve = res2;
+            this.once(DESTROYED, ondestroy);
+            this.once("error", onerr);
+            this.once("end", onend);
+            this.once("data", ondata);
+          });
+        }, "next");
+        return {
+          next,
+          throw: stop,
+          return: stop,
+          [Symbol.asyncIterator]() {
+            return this;
+          },
+          [Symbol.asyncDispose]: async () => {
+          }
+        };
+      }
+      /**
+       * Synchronous `for of` iteration.
+       *
+       * The iteration will terminate when the internal buffer runs out, even
+       * if the stream has not yet terminated.
+       */
+      [Symbol.iterator]() {
+        this[DISCARDED] = false;
+        let stopped = false;
+        const stop = /* @__PURE__ */ __name(() => {
+          this.pause();
+          this.off(ERROR, stop);
+          this.off(DESTROYED, stop);
+          this.off("end", stop);
+          stopped = true;
+          return { done: true, value: void 0 };
+        }, "stop");
+        const next = /* @__PURE__ */ __name(() => {
+          if (stopped)
+            return stop();
+          const value = this.read();
+          return value === null ? stop() : { done: false, value };
+        }, "next");
+        this.once("end", stop);
+        this.once(ERROR, stop);
+        this.once(DESTROYED, stop);
+        return {
+          next,
+          throw: stop,
+          return: stop,
+          [Symbol.iterator]() {
+            return this;
+          },
+          [Symbol.dispose]: () => {
+          }
+        };
+      }
+      /**
+       * Destroy a stream, preventing it from being used for any further purpose.
+       *
+       * If the stream has a `close()` method, then it will be called on
+       * destruction.
+       *
+       * After destruction, any attempt to write data, read data, or emit most
+       * events will be ignored.
+       *
+       * If an error argument is provided, then it will be emitted in an
+       * 'error' event.
+       */
+      destroy(er) {
+        if (this[DESTROYED]) {
+          if (er)
+            this.emit("error", er);
+          else
+            this.emit(DESTROYED);
+          return this;
+        }
+        this[DESTROYED] = true;
+        this[DISCARDED] = true;
+        this[BUFFER].length = 0;
+        this[BUFFERLENGTH] = 0;
+        const wc = this;
+        if (typeof wc.close === "function" && !this[CLOSED])
+          wc.close();
+        if (er)
+          this.emit("error", er);
+        else
+          this.emit(DESTROYED);
+        return this;
+      }
+      /**
+       * Alias for {@link isStream}
+       *
+       * Former export location, maintained for backwards compatibility.
+       *
+       * @deprecated
+       */
+      static get isStream() {
+        return exports2.isStream;
+      }
+    };
+    exports2.Minipass = Minipass;
+  }
+});
+
+// node_modules/.pnpm/path-scurry@2.0.2/node_modules/path-scurry/dist/commonjs/index.js
+var require_commonjs6 = __commonJS({
+  "node_modules/.pnpm/path-scurry@2.0.2/node_modules/path-scurry/dist/commonjs/index.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.PathScurry = exports2.Path = exports2.PathScurryDarwin = exports2.PathScurryPosix = exports2.PathScurryWin32 = exports2.PathScurryBase = exports2.PathPosix = exports2.PathWin32 = exports2.PathBase = exports2.ChildrenCache = exports2.ResolveCache = void 0;
+    var lru_cache_1 = require_commonjs();
+    var node_path_1 = require("node:path");
+    var node_url_1 = require("node:url");
+    var fs_1 = require("fs");
+    var actualFS = __importStar(require("node:fs"));
+    var realpathSync = fs_1.realpathSync.native;
+    var promises_1 = require("node:fs/promises");
+    var minipass_1 = require_commonjs5();
+    var defaultFS = {
+      lstatSync: fs_1.lstatSync,
+      readdir: fs_1.readdir,
+      readdirSync: fs_1.readdirSync,
+      readlinkSync: fs_1.readlinkSync,
+      realpathSync,
+      promises: {
+        lstat: promises_1.lstat,
+        readdir: promises_1.readdir,
+        readlink: promises_1.readlink,
+        realpath: promises_1.realpath
+      }
+    };
+    var fsFromOption = /* @__PURE__ */ __name((fsOption) => !fsOption || fsOption === defaultFS || fsOption === actualFS ? defaultFS : {
+      ...defaultFS,
+      ...fsOption,
+      promises: {
+        ...defaultFS.promises,
+        ...fsOption.promises || {}
+      }
+    }, "fsFromOption");
+    var uncDriveRegexp = /^\\\\\?\\([a-z]:)\\?$/i;
+    var uncToDrive = /* @__PURE__ */ __name((rootPath) => rootPath.replace(/\//g, "\\").replace(uncDriveRegexp, "$1\\"), "uncToDrive");
+    var eitherSep = /[\\\/]/;
+    var UNKNOWN = 0;
+    var IFIFO = 1;
+    var IFCHR = 2;
+    var IFDIR = 4;
+    var IFBLK = 6;
+    var IFREG = 8;
+    var IFLNK = 10;
+    var IFSOCK = 12;
+    var IFMT = 15;
+    var IFMT_UNKNOWN = ~IFMT;
+    var READDIR_CALLED = 16;
+    var LSTAT_CALLED = 32;
+    var ENOTDIR = 64;
+    var ENOENT = 128;
+    var ENOREADLINK = 256;
+    var ENOREALPATH = 512;
+    var ENOCHILD = ENOTDIR | ENOENT | ENOREALPATH;
+    var TYPEMASK = 1023;
+    var entToType = /* @__PURE__ */ __name((s) => s.isFile() ? IFREG : s.isDirectory() ? IFDIR : s.isSymbolicLink() ? IFLNK : s.isCharacterDevice() ? IFCHR : s.isBlockDevice() ? IFBLK : s.isSocket() ? IFSOCK : s.isFIFO() ? IFIFO : UNKNOWN, "entToType");
+    var normalizeCache = new lru_cache_1.LRUCache({ max: 2 ** 12 });
+    var normalize = /* @__PURE__ */ __name((s) => {
+      const c = normalizeCache.get(s);
+      if (c)
+        return c;
+      const n = s.normalize("NFKD");
+      normalizeCache.set(s, n);
+      return n;
+    }, "normalize");
+    var normalizeNocaseCache = new lru_cache_1.LRUCache({ max: 2 ** 12 });
+    var normalizeNocase = /* @__PURE__ */ __name((s) => {
+      const c = normalizeNocaseCache.get(s);
+      if (c)
+        return c;
+      const n = normalize(s.toLowerCase());
+      normalizeNocaseCache.set(s, n);
+      return n;
+    }, "normalizeNocase");
+    var ResolveCache = class extends lru_cache_1.LRUCache {
+      static {
+        __name(this, "ResolveCache");
+      }
+      constructor() {
+        super({ max: 256 });
+      }
+    };
+    exports2.ResolveCache = ResolveCache;
+    var ChildrenCache = class extends lru_cache_1.LRUCache {
+      static {
+        __name(this, "ChildrenCache");
+      }
+      constructor(maxSize = 16 * 1024) {
+        super({
+          maxSize,
+          // parent + children
+          sizeCalculation: /* @__PURE__ */ __name((a) => a.length + 1, "sizeCalculation")
+        });
+      }
+    };
+    exports2.ChildrenCache = ChildrenCache;
+    var setAsCwd = Symbol("PathScurry setAsCwd");
+    var PathBase = class {
+      static {
+        __name(this, "PathBase");
+      }
+      /**
+       * the basename of this path
+       *
+       * **Important**: *always* test the path name against any test string
+       * usingthe {@link isNamed} method, and not by directly comparing this
+       * string. Otherwise, unicode path strings that the system sees as identical
+       * will not be properly treated as the same path, leading to incorrect
+       * behavior and possible security issues.
+       */
+      name;
+      /**
+       * the Path entry corresponding to the path root.
+       *
+       * @internal
+       */
+      root;
+      /**
+       * All roots found within the current PathScurry family
+       *
+       * @internal
+       */
+      roots;
+      /**
+       * a reference to the parent path, or undefined in the case of root entries
+       *
+       * @internal
+       */
+      parent;
+      /**
+       * boolean indicating whether paths are compared case-insensitively
+       * @internal
+       */
+      nocase;
+      /**
+       * boolean indicating that this path is the current working directory
+       * of the PathScurry collection that contains it.
+       */
+      isCWD = false;
+      // potential default fs override
+      #fs;
+      // Stats fields
+      #dev;
+      get dev() {
+        return this.#dev;
+      }
+      #mode;
+      get mode() {
+        return this.#mode;
+      }
+      #nlink;
+      get nlink() {
+        return this.#nlink;
+      }
+      #uid;
+      get uid() {
+        return this.#uid;
+      }
+      #gid;
+      get gid() {
+        return this.#gid;
+      }
+      #rdev;
+      get rdev() {
+        return this.#rdev;
+      }
+      #blksize;
+      get blksize() {
+        return this.#blksize;
+      }
+      #ino;
+      get ino() {
+        return this.#ino;
+      }
+      #size;
+      get size() {
+        return this.#size;
+      }
+      #blocks;
+      get blocks() {
+        return this.#blocks;
+      }
+      #atimeMs;
+      get atimeMs() {
+        return this.#atimeMs;
+      }
+      #mtimeMs;
+      get mtimeMs() {
+        return this.#mtimeMs;
+      }
+      #ctimeMs;
+      get ctimeMs() {
+        return this.#ctimeMs;
+      }
+      #birthtimeMs;
+      get birthtimeMs() {
+        return this.#birthtimeMs;
+      }
+      #atime;
+      get atime() {
+        return this.#atime;
+      }
+      #mtime;
+      get mtime() {
+        return this.#mtime;
+      }
+      #ctime;
+      get ctime() {
+        return this.#ctime;
+      }
+      #birthtime;
+      get birthtime() {
+        return this.#birthtime;
+      }
+      #matchName;
+      #depth;
+      #fullpath;
+      #fullpathPosix;
+      #relative;
+      #relativePosix;
+      #type;
+      #children;
+      #linkTarget;
+      #realpath;
+      /**
+       * This property is for compatibility with the Dirent class as of
+       * Node v20, where Dirent['parentPath'] refers to the path of the
+       * directory that was passed to readdir. For root entries, it's the path
+       * to the entry itself.
+       */
+      get parentPath() {
+        return (this.parent || this).fullpath();
+      }
+      /* c8 ignore start */
+      /**
+       * Deprecated alias for Dirent['parentPath'] Somewhat counterintuitively,
+       * this property refers to the *parent* path, not the path object itself.
+       *
+       * @deprecated
+       */
+      get path() {
+        return this.parentPath;
+      }
+      /* c8 ignore stop */
+      /**
+       * Do not create new Path objects directly.  They should always be accessed
+       * via the PathScurry class or other methods on the Path class.
+       *
+       * @internal
+       */
+      constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) {
+        this.name = name;
+        this.#matchName = nocase ? normalizeNocase(name) : normalize(name);
+        this.#type = type & TYPEMASK;
+        this.nocase = nocase;
+        this.roots = roots;
+        this.root = root || this;
+        this.#children = children;
+        this.#fullpath = opts.fullpath;
+        this.#relative = opts.relative;
+        this.#relativePosix = opts.relativePosix;
+        this.parent = opts.parent;
+        if (this.parent) {
+          this.#fs = this.parent.#fs;
+        } else {
+          this.#fs = fsFromOption(opts.fs);
+        }
+      }
+      /**
+       * Returns the depth of the Path object from its root.
+       *
+       * For example, a path at `/foo/bar` would have a depth of 2.
+       */
+      depth() {
+        if (this.#depth !== void 0)
+          return this.#depth;
+        if (!this.parent)
+          return this.#depth = 0;
+        return this.#depth = this.parent.depth() + 1;
+      }
+      /**
+       * @internal
+       */
+      childrenCache() {
+        return this.#children;
+      }
+      /**
+       * Get the Path object referenced by the string path, resolved from this Path
+       */
+      resolve(path) {
+        if (!path) {
+          return this;
+        }
+        const rootPath = this.getRootString(path);
+        const dir = path.substring(rootPath.length);
+        const dirParts = dir.split(this.splitSep);
+        const result = rootPath ? this.getRoot(rootPath).#resolveParts(dirParts) : this.#resolveParts(dirParts);
+        return result;
+      }
+      #resolveParts(dirParts) {
+        let p = this;
+        for (const part of dirParts) {
+          p = p.child(part);
+        }
+        return p;
+      }
+      /**
+       * Returns the cached children Path objects, if still available.  If they
+       * have fallen out of the cache, then returns an empty array, and resets the
+       * READDIR_CALLED bit, so that future calls to readdir() will require an fs
+       * lookup.
+       *
+       * @internal
+       */
+      children() {
+        const cached = this.#children.get(this);
+        if (cached) {
+          return cached;
+        }
+        const children = Object.assign([], { provisional: 0 });
+        this.#children.set(this, children);
+        this.#type &= ~READDIR_CALLED;
+        return children;
+      }
+      /**
+       * Resolves a path portion and returns or creates the child Path.
+       *
+       * Returns `this` if pathPart is `''` or `'.'`, or `parent` if pathPart is
+       * `'..'`.
+       *
+       * This should not be called directly.  If `pathPart` contains any path
+       * separators, it will lead to unsafe undefined behavior.
+       *
+       * Use `Path.resolve()` instead.
+       *
+       * @internal
+       */
+      child(pathPart, opts) {
+        if (pathPart === "" || pathPart === ".") {
+          return this;
+        }
+        if (pathPart === "..") {
+          return this.parent || this;
+        }
+        const children = this.children();
+        const name = this.nocase ? normalizeNocase(pathPart) : normalize(pathPart);
+        for (const p of children) {
+          if (p.#matchName === name) {
+            return p;
+          }
+        }
+        const s = this.parent ? this.sep : "";
+        const fullpath = this.#fullpath ? this.#fullpath + s + pathPart : void 0;
+        const pchild = this.newChild(pathPart, UNKNOWN, {
+          ...opts,
+          parent: this,
+          fullpath
+        });
+        if (!this.canReaddir()) {
+          pchild.#type |= ENOENT;
+        }
+        children.push(pchild);
+        return pchild;
+      }
+      /**
+       * The relative path from the cwd. If it does not share an ancestor with
+       * the cwd, then this ends up being equivalent to the fullpath()
+       */
+      relative() {
+        if (this.isCWD)
+          return "";
+        if (this.#relative !== void 0) {
+          return this.#relative;
+        }
+        const name = this.name;
+        const p = this.parent;
+        if (!p) {
+          return this.#relative = this.name;
+        }
+        const pv = p.relative();
+        return pv + (!pv || !p.parent ? "" : this.sep) + name;
+      }
+      /**
+       * The relative path from the cwd, using / as the path separator.
+       * If it does not share an ancestor with
+       * the cwd, then this ends up being equivalent to the fullpathPosix()
+       * On posix systems, this is identical to relative().
+       */
+      relativePosix() {
+        if (this.sep === "/")
+          return this.relative();
+        if (this.isCWD)
+          return "";
+        if (this.#relativePosix !== void 0)
+          return this.#relativePosix;
+        const name = this.name;
+        const p = this.parent;
+        if (!p) {
+          return this.#relativePosix = this.fullpathPosix();
+        }
+        const pv = p.relativePosix();
+        return pv + (!pv || !p.parent ? "" : "/") + name;
+      }
+      /**
+       * The fully resolved path string for this Path entry
+       */
+      fullpath() {
+        if (this.#fullpath !== void 0) {
+          return this.#fullpath;
+        }
+        const name = this.name;
+        const p = this.parent;
+        if (!p) {
+          return this.#fullpath = this.name;
+        }
+        const pv = p.fullpath();
+        const fp = pv + (!p.parent ? "" : this.sep) + name;
+        return this.#fullpath = fp;
+      }
+      /**
+       * On platforms other than windows, this is identical to fullpath.
+       *
+       * On windows, this is overridden to return the forward-slash form of the
+       * full UNC path.
+       */
+      fullpathPosix() {
+        if (this.#fullpathPosix !== void 0)
+          return this.#fullpathPosix;
+        if (this.sep === "/")
+          return this.#fullpathPosix = this.fullpath();
+        if (!this.parent) {
+          const p2 = this.fullpath().replace(/\\/g, "/");
+          if (/^[a-z]:\//i.test(p2)) {
+            return this.#fullpathPosix = `//?/${p2}`;
+          } else {
+            return this.#fullpathPosix = p2;
+          }
+        }
+        const p = this.parent;
+        const pfpp = p.fullpathPosix();
+        const fpp = pfpp + (!pfpp || !p.parent ? "" : "/") + this.name;
+        return this.#fullpathPosix = fpp;
+      }
+      /**
+       * Is the Path of an unknown type?
+       *
+       * Note that we might know *something* about it if there has been a previous
+       * filesystem operation, for example that it does not exist, or is not a
+       * link, or whether it has child entries.
+       */
+      isUnknown() {
+        return (this.#type & IFMT) === UNKNOWN;
+      }
+      isType(type) {
+        return this[`is${type}`]();
+      }
+      getType() {
+        return this.isUnknown() ? "Unknown" : this.isDirectory() ? "Directory" : this.isFile() ? "File" : this.isSymbolicLink() ? "SymbolicLink" : this.isFIFO() ? "FIFO" : this.isCharacterDevice() ? "CharacterDevice" : this.isBlockDevice() ? "BlockDevice" : (
+          /* c8 ignore start */
+          this.isSocket() ? "Socket" : "Unknown"
+        );
+      }
+      /**
+       * Is the Path a regular file?
+       */
+      isFile() {
+        return (this.#type & IFMT) === IFREG;
+      }
+      /**
+       * Is the Path a directory?
+       */
+      isDirectory() {
+        return (this.#type & IFMT) === IFDIR;
+      }
+      /**
+       * Is the path a character device?
+       */
+      isCharacterDevice() {
+        return (this.#type & IFMT) === IFCHR;
+      }
+      /**
+       * Is the path a block device?
+       */
+      isBlockDevice() {
+        return (this.#type & IFMT) === IFBLK;
+      }
+      /**
+       * Is the path a FIFO pipe?
+       */
+      isFIFO() {
+        return (this.#type & IFMT) === IFIFO;
+      }
+      /**
+       * Is the path a socket?
+       */
+      isSocket() {
+        return (this.#type & IFMT) === IFSOCK;
+      }
+      /**
+       * Is the path a symbolic link?
+       */
+      isSymbolicLink() {
+        return (this.#type & IFLNK) === IFLNK;
+      }
+      /**
+       * Return the entry if it has been subject of a successful lstat, or
+       * undefined otherwise.
+       *
+       * Does not read the filesystem, so an undefined result *could* simply
+       * mean that we haven't called lstat on it.
+       */
+      lstatCached() {
+        return this.#type & LSTAT_CALLED ? this : void 0;
+      }
+      /**
+       * Return the cached link target if the entry has been the subject of a
+       * successful readlink, or undefined otherwise.
+       *
+       * Does not read the filesystem, so an undefined result *could* just mean we
+       * don't have any cached data. Only use it if you are very sure that a
+       * readlink() has been called at some point.
+       */
+      readlinkCached() {
+        return this.#linkTarget;
+      }
+      /**
+       * Returns the cached realpath target if the entry has been the subject
+       * of a successful realpath, or undefined otherwise.
+       *
+       * Does not read the filesystem, so an undefined result *could* just mean we
+       * don't have any cached data. Only use it if you are very sure that a
+       * realpath() has been called at some point.
+       */
+      realpathCached() {
+        return this.#realpath;
+      }
+      /**
+       * Returns the cached child Path entries array if the entry has been the
+       * subject of a successful readdir(), or [] otherwise.
+       *
+       * Does not read the filesystem, so an empty array *could* just mean we
+       * don't have any cached data. Only use it if you are very sure that a
+       * readdir() has been called recently enough to still be valid.
+       */
+      readdirCached() {
+        const children = this.children();
+        return children.slice(0, children.provisional);
+      }
+      /**
+       * Return true if it's worth trying to readlink.  Ie, we don't (yet) have
+       * any indication that readlink will definitely fail.
+       *
+       * Returns false if the path is known to not be a symlink, if a previous
+       * readlink failed, or if the entry does not exist.
+       */
+      canReadlink() {
+        if (this.#linkTarget)
+          return true;
+        if (!this.parent)
+          return false;
+        const ifmt = this.#type & IFMT;
+        return !(ifmt !== UNKNOWN && ifmt !== IFLNK || this.#type & ENOREADLINK || this.#type & ENOENT);
+      }
+      /**
+       * Return true if readdir has previously been successfully called on this
+       * path, indicating that cachedReaddir() is likely valid.
+       */
+      calledReaddir() {
+        return !!(this.#type & READDIR_CALLED);
+      }
+      /**
+       * Returns true if the path is known to not exist. That is, a previous lstat
+       * or readdir failed to verify its existence when that would have been
+       * expected, or a parent entry was marked either enoent or enotdir.
+       */
+      isENOENT() {
+        return !!(this.#type & ENOENT);
+      }
+      /**
+       * Return true if the path is a match for the given path name.  This handles
+       * case sensitivity and unicode normalization.
+       *
+       * Note: even on case-sensitive systems, it is **not** safe to test the
+       * equality of the `.name` property to determine whether a given pathname
+       * matches, due to unicode normalization mismatches.
+       *
+       * Always use this method instead of testing the `path.name` property
+       * directly.
+       */
+      isNamed(n) {
+        return !this.nocase ? this.#matchName === normalize(n) : this.#matchName === normalizeNocase(n);
+      }
+      /**
+       * Return the Path object corresponding to the target of a symbolic link.
+       *
+       * If the Path is not a symbolic link, or if the readlink call fails for any
+       * reason, `undefined` is returned.
+       *
+       * Result is cached, and thus may be outdated if the filesystem is mutated.
+       */
+      async readlink() {
+        const target = this.#linkTarget;
+        if (target) {
+          return target;
+        }
+        if (!this.canReadlink()) {
+          return void 0;
+        }
+        if (!this.parent) {
+          return void 0;
+        }
+        try {
+          const read = await this.#fs.promises.readlink(this.fullpath());
+          const linkTarget = (await this.parent.realpath())?.resolve(read);
+          if (linkTarget) {
+            return this.#linkTarget = linkTarget;
+          }
+        } catch (er) {
+          this.#readlinkFail(er.code);
+          return void 0;
+        }
+      }
+      /**
+       * Synchronous {@link PathBase.readlink}
+       */
+      readlinkSync() {
+        const target = this.#linkTarget;
+        if (target) {
+          return target;
+        }
+        if (!this.canReadlink()) {
+          return void 0;
+        }
+        if (!this.parent) {
+          return void 0;
+        }
+        try {
+          const read = this.#fs.readlinkSync(this.fullpath());
+          const linkTarget = this.parent.realpathSync()?.resolve(read);
+          if (linkTarget) {
+            return this.#linkTarget = linkTarget;
+          }
+        } catch (er) {
+          this.#readlinkFail(er.code);
+          return void 0;
+        }
+      }
+      #readdirSuccess(children) {
+        this.#type |= READDIR_CALLED;
+        for (let p = children.provisional; p < children.length; p++) {
+          const c = children[p];
+          if (c)
+            c.#markENOENT();
+        }
+      }
+      #markENOENT() {
+        if (this.#type & ENOENT)
+          return;
+        this.#type = (this.#type | ENOENT) & IFMT_UNKNOWN;
+        this.#markChildrenENOENT();
+      }
+      #markChildrenENOENT() {
+        const children = this.children();
+        children.provisional = 0;
+        for (const p of children) {
+          p.#markENOENT();
+        }
+      }
+      #markENOREALPATH() {
+        this.#type |= ENOREALPATH;
+        this.#markENOTDIR();
+      }
+      // save the information when we know the entry is not a dir
+      #markENOTDIR() {
+        if (this.#type & ENOTDIR)
+          return;
+        let t = this.#type;
+        if ((t & IFMT) === IFDIR)
+          t &= IFMT_UNKNOWN;
+        this.#type = t | ENOTDIR;
+        this.#markChildrenENOENT();
+      }
+      #readdirFail(code = "") {
+        if (code === "ENOTDIR" || code === "EPERM") {
+          this.#markENOTDIR();
+        } else if (code === "ENOENT") {
+          this.#markENOENT();
+        } else {
+          this.children().provisional = 0;
+        }
+      }
+      #lstatFail(code = "") {
+        if (code === "ENOTDIR") {
+          const p = this.parent;
+          p.#markENOTDIR();
+        } else if (code === "ENOENT") {
+          this.#markENOENT();
+        }
+      }
+      #readlinkFail(code = "") {
+        let ter = this.#type;
+        ter |= ENOREADLINK;
+        if (code === "ENOENT")
+          ter |= ENOENT;
+        if (code === "EINVAL" || code === "UNKNOWN") {
+          ter &= IFMT_UNKNOWN;
+        }
+        this.#type = ter;
+        if (code === "ENOTDIR" && this.parent) {
+          this.parent.#markENOTDIR();
+        }
+      }
+      #readdirAddChild(e, c) {
+        return this.#readdirMaybePromoteChild(e, c) || this.#readdirAddNewChild(e, c);
+      }
+      #readdirAddNewChild(e, c) {
+        const type = entToType(e);
+        const child = this.newChild(e.name, type, { parent: this });
+        const ifmt = child.#type & IFMT;
+        if (ifmt !== IFDIR && ifmt !== IFLNK && ifmt !== UNKNOWN) {
+          child.#type |= ENOTDIR;
+        }
+        c.unshift(child);
+        c.provisional++;
+        return child;
+      }
+      #readdirMaybePromoteChild(e, c) {
+        for (let p = c.provisional; p < c.length; p++) {
+          const pchild = c[p];
+          const name = this.nocase ? normalizeNocase(e.name) : normalize(e.name);
+          if (name !== pchild.#matchName) {
+            continue;
+          }
+          return this.#readdirPromoteChild(e, pchild, p, c);
+        }
+      }
+      #readdirPromoteChild(e, p, index, c) {
+        const v = p.name;
+        p.#type = p.#type & IFMT_UNKNOWN | entToType(e);
+        if (v !== e.name)
+          p.name = e.name;
+        if (index !== c.provisional) {
+          if (index === c.length - 1)
+            c.pop();
+          else
+            c.splice(index, 1);
+          c.unshift(p);
+        }
+        c.provisional++;
+        return p;
+      }
+      /**
+       * Call lstat() on this Path, and update all known information that can be
+       * determined.
+       *
+       * Note that unlike `fs.lstat()`, the returned value does not contain some
+       * information, such as `mode`, `dev`, `nlink`, and `ino`.  If that
+       * information is required, you will need to call `fs.lstat` yourself.
+       *
+       * If the Path refers to a nonexistent file, or if the lstat call fails for
+       * any reason, `undefined` is returned.  Otherwise the updated Path object is
+       * returned.
+       *
+       * Results are cached, and thus may be out of date if the filesystem is
+       * mutated.
+       */
+      async lstat() {
+        if ((this.#type & ENOENT) === 0) {
+          try {
+            this.#applyStat(await this.#fs.promises.lstat(this.fullpath()));
+            return this;
+          } catch (er) {
+            this.#lstatFail(er.code);
+          }
+        }
+      }
+      /**
+       * synchronous {@link PathBase.lstat}
+       */
+      lstatSync() {
+        if ((this.#type & ENOENT) === 0) {
+          try {
+            this.#applyStat(this.#fs.lstatSync(this.fullpath()));
+            return this;
+          } catch (er) {
+            this.#lstatFail(er.code);
+          }
+        }
+      }
+      #applyStat(st) {
+        const { atime, atimeMs, birthtime, birthtimeMs, blksize, blocks, ctime, ctimeMs, dev, gid, ino, mode, mtime, mtimeMs, nlink, rdev, size, uid } = st;
+        this.#atime = atime;
+        this.#atimeMs = atimeMs;
+        this.#birthtime = birthtime;
+        this.#birthtimeMs = birthtimeMs;
+        this.#blksize = blksize;
+        this.#blocks = blocks;
+        this.#ctime = ctime;
+        this.#ctimeMs = ctimeMs;
+        this.#dev = dev;
+        this.#gid = gid;
+        this.#ino = ino;
+        this.#mode = mode;
+        this.#mtime = mtime;
+        this.#mtimeMs = mtimeMs;
+        this.#nlink = nlink;
+        this.#rdev = rdev;
+        this.#size = size;
+        this.#uid = uid;
+        const ifmt = entToType(st);
+        this.#type = this.#type & IFMT_UNKNOWN | ifmt | LSTAT_CALLED;
+        if (ifmt !== UNKNOWN && ifmt !== IFDIR && ifmt !== IFLNK) {
+          this.#type |= ENOTDIR;
+        }
+      }
+      #onReaddirCB = [];
+      #readdirCBInFlight = false;
+      #callOnReaddirCB(children) {
+        this.#readdirCBInFlight = false;
+        const cbs = this.#onReaddirCB.slice();
+        this.#onReaddirCB.length = 0;
+        cbs.forEach((cb) => cb(null, children));
+      }
+      /**
+       * Standard node-style callback interface to get list of directory entries.
+       *
+       * If the Path cannot or does not contain any children, then an empty array
+       * is returned.
+       *
+       * Results are cached, and thus may be out of date if the filesystem is
+       * mutated.
+       *
+       * @param cb The callback called with (er, entries).  Note that the `er`
+       * param is somewhat extraneous, as all readdir() errors are handled and
+       * simply result in an empty set of entries being returned.
+       * @param allowZalgo Boolean indicating that immediately known results should
+       * *not* be deferred with `queueMicrotask`. Defaults to `false`. Release
+       * zalgo at your peril, the dark pony lord is devious and unforgiving.
+       */
+      readdirCB(cb, allowZalgo = false) {
+        if (!this.canReaddir()) {
+          if (allowZalgo)
+            cb(null, []);
+          else
+            queueMicrotask(() => cb(null, []));
+          return;
+        }
+        const children = this.children();
+        if (this.calledReaddir()) {
+          const c = children.slice(0, children.provisional);
+          if (allowZalgo)
+            cb(null, c);
+          else
+            queueMicrotask(() => cb(null, c));
+          return;
+        }
+        this.#onReaddirCB.push(cb);
+        if (this.#readdirCBInFlight) {
+          return;
+        }
+        this.#readdirCBInFlight = true;
+        const fullpath = this.fullpath();
+        this.#fs.readdir(fullpath, { withFileTypes: true }, (er, entries) => {
+          if (er) {
+            this.#readdirFail(er.code);
+            children.provisional = 0;
+          } else {
+            for (const e of entries) {
+              this.#readdirAddChild(e, children);
+            }
+            this.#readdirSuccess(children);
+          }
+          this.#callOnReaddirCB(children.slice(0, children.provisional));
+          return;
+        });
+      }
+      #asyncReaddirInFlight;
+      /**
+       * Return an array of known child entries.
+       *
+       * If the Path cannot or does not contain any children, then an empty array
+       * is returned.
+       *
+       * Results are cached, and thus may be out of date if the filesystem is
+       * mutated.
+       */
+      async readdir() {
+        if (!this.canReaddir()) {
+          return [];
+        }
+        const children = this.children();
+        if (this.calledReaddir()) {
+          return children.slice(0, children.provisional);
+        }
+        const fullpath = this.fullpath();
+        if (this.#asyncReaddirInFlight) {
+          await this.#asyncReaddirInFlight;
+        } else {
+          let resolve = /* @__PURE__ */ __name(() => {
+          }, "resolve");
+          this.#asyncReaddirInFlight = new Promise((res) => resolve = res);
+          try {
+            for (const e of await this.#fs.promises.readdir(fullpath, {
+              withFileTypes: true
+            })) {
+              this.#readdirAddChild(e, children);
+            }
+            this.#readdirSuccess(children);
+          } catch (er) {
+            this.#readdirFail(er.code);
+            children.provisional = 0;
+          }
+          this.#asyncReaddirInFlight = void 0;
+          resolve();
+        }
+        return children.slice(0, children.provisional);
+      }
+      /**
+       * synchronous {@link PathBase.readdir}
+       */
+      readdirSync() {
+        if (!this.canReaddir()) {
+          return [];
+        }
+        const children = this.children();
+        if (this.calledReaddir()) {
+          return children.slice(0, children.provisional);
+        }
+        const fullpath = this.fullpath();
+        try {
+          for (const e of this.#fs.readdirSync(fullpath, {
+            withFileTypes: true
+          })) {
+            this.#readdirAddChild(e, children);
+          }
+          this.#readdirSuccess(children);
+        } catch (er) {
+          this.#readdirFail(er.code);
+          children.provisional = 0;
+        }
+        return children.slice(0, children.provisional);
+      }
+      canReaddir() {
+        if (this.#type & ENOCHILD)
+          return false;
+        const ifmt = IFMT & this.#type;
+        if (!(ifmt === UNKNOWN || ifmt === IFDIR || ifmt === IFLNK)) {
+          return false;
+        }
+        return true;
+      }
+      shouldWalk(dirs, walkFilter) {
+        return (this.#type & IFDIR) === IFDIR && !(this.#type & ENOCHILD) && !dirs.has(this) && (!walkFilter || walkFilter(this));
+      }
+      /**
+       * Return the Path object corresponding to path as resolved
+       * by realpath(3).
+       *
+       * If the realpath call fails for any reason, `undefined` is returned.
+       *
+       * Result is cached, and thus may be outdated if the filesystem is mutated.
+       * On success, returns a Path object.
+       */
+      async realpath() {
+        if (this.#realpath)
+          return this.#realpath;
+        if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type)
+          return void 0;
+        try {
+          const rp = await this.#fs.promises.realpath(this.fullpath());
+          return this.#realpath = this.resolve(rp);
+        } catch (_) {
+          this.#markENOREALPATH();
+        }
+      }
+      /**
+       * Synchronous {@link realpath}
+       */
+      realpathSync() {
+        if (this.#realpath)
+          return this.#realpath;
+        if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type)
+          return void 0;
+        try {
+          const rp = this.#fs.realpathSync(this.fullpath());
+          return this.#realpath = this.resolve(rp);
+        } catch (_) {
+          this.#markENOREALPATH();
+        }
+      }
+      /**
+       * Internal method to mark this Path object as the scurry cwd,
+       * called by {@link PathScurry#chdir}
+       *
+       * @internal
+       */
+      [setAsCwd](oldCwd) {
+        if (oldCwd === this)
+          return;
+        oldCwd.isCWD = false;
+        this.isCWD = true;
+        const changed = /* @__PURE__ */ new Set([]);
+        let rp = [];
+        let p = this;
+        while (p && p.parent) {
+          changed.add(p);
+          p.#relative = rp.join(this.sep);
+          p.#relativePosix = rp.join("/");
+          p = p.parent;
+          rp.push("..");
+        }
+        p = oldCwd;
+        while (p && p.parent && !changed.has(p)) {
+          p.#relative = void 0;
+          p.#relativePosix = void 0;
+          p = p.parent;
+        }
+      }
+    };
+    exports2.PathBase = PathBase;
+    var PathWin32 = class _PathWin32 extends PathBase {
+      static {
+        __name(this, "PathWin32");
+      }
+      /**
+       * Separator for generating path strings.
+       */
+      sep = "\\";
+      /**
+       * Separator for parsing path strings.
+       */
+      splitSep = eitherSep;
+      /**
+       * Do not create new Path objects directly.  They should always be accessed
+       * via the PathScurry class or other methods on the Path class.
+       *
+       * @internal
+       */
+      constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) {
+        super(name, type, root, roots, nocase, children, opts);
+      }
+      /**
+       * @internal
+       */
+      newChild(name, type = UNKNOWN, opts = {}) {
+        return new _PathWin32(name, type, this.root, this.roots, this.nocase, this.childrenCache(), opts);
+      }
+      /**
+       * @internal
+       */
+      getRootString(path) {
+        return node_path_1.win32.parse(path).root;
+      }
+      /**
+       * @internal
+       */
+      getRoot(rootPath) {
+        rootPath = uncToDrive(rootPath.toUpperCase());
+        if (rootPath === this.root.name) {
+          return this.root;
+        }
+        for (const [compare, root] of Object.entries(this.roots)) {
+          if (this.sameRoot(rootPath, compare)) {
+            return this.roots[rootPath] = root;
+          }
+        }
+        return this.roots[rootPath] = new PathScurryWin32(rootPath, this).root;
+      }
+      /**
+       * @internal
+       */
+      sameRoot(rootPath, compare = this.root.name) {
+        rootPath = rootPath.toUpperCase().replace(/\//g, "\\").replace(uncDriveRegexp, "$1\\");
+        return rootPath === compare;
+      }
+    };
+    exports2.PathWin32 = PathWin32;
+    var PathPosix = class _PathPosix extends PathBase {
+      static {
+        __name(this, "PathPosix");
+      }
+      /**
+       * separator for parsing path strings
+       */
+      splitSep = "/";
+      /**
+       * separator for generating path strings
+       */
+      sep = "/";
+      /**
+       * Do not create new Path objects directly.  They should always be accessed
+       * via the PathScurry class or other methods on the Path class.
+       *
+       * @internal
+       */
+      constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) {
+        super(name, type, root, roots, nocase, children, opts);
+      }
+      /**
+       * @internal
+       */
+      getRootString(path) {
+        return path.startsWith("/") ? "/" : "";
+      }
+      /**
+       * @internal
+       */
+      getRoot(_rootPath) {
+        return this.root;
+      }
+      /**
+       * @internal
+       */
+      newChild(name, type = UNKNOWN, opts = {}) {
+        return new _PathPosix(name, type, this.root, this.roots, this.nocase, this.childrenCache(), opts);
+      }
+    };
+    exports2.PathPosix = PathPosix;
+    var PathScurryBase = class {
+      static {
+        __name(this, "PathScurryBase");
+      }
+      /**
+       * The root Path entry for the current working directory of this Scurry
+       */
+      root;
+      /**
+       * The string path for the root of this Scurry's current working directory
+       */
+      rootPath;
+      /**
+       * A collection of all roots encountered, referenced by rootPath
+       */
+      roots;
+      /**
+       * The Path entry corresponding to this PathScurry's current working directory.
+       */
+      cwd;
+      #resolveCache;
+      #resolvePosixCache;
+      #children;
+      /**
+       * Perform path comparisons case-insensitively.
+       *
+       * Defaults true on Darwin and Windows systems, false elsewhere.
+       */
+      nocase;
+      #fs;
+      /**
+       * This class should not be instantiated directly.
+       *
+       * Use PathScurryWin32, PathScurryDarwin, PathScurryPosix, or PathScurry
+       *
+       * @internal
+       */
+      constructor(cwd = process.cwd(), pathImpl, sep, { nocase, childrenCacheSize = 16 * 1024, fs = defaultFS } = {}) {
+        this.#fs = fsFromOption(fs);
+        if (cwd instanceof URL || cwd.startsWith("file://")) {
+          cwd = (0, node_url_1.fileURLToPath)(cwd);
+        }
+        const cwdPath = pathImpl.resolve(cwd);
+        this.roots = /* @__PURE__ */ Object.create(null);
+        this.rootPath = this.parseRootPath(cwdPath);
+        this.#resolveCache = new ResolveCache();
+        this.#resolvePosixCache = new ResolveCache();
+        this.#children = new ChildrenCache(childrenCacheSize);
+        const split = cwdPath.substring(this.rootPath.length).split(sep);
+        if (split.length === 1 && !split[0]) {
+          split.pop();
+        }
+        if (nocase === void 0) {
+          throw new TypeError("must provide nocase setting to PathScurryBase ctor");
+        }
+        this.nocase = nocase;
+        this.root = this.newRoot(this.#fs);
+        this.roots[this.rootPath] = this.root;
+        let prev = this.root;
+        let len = split.length - 1;
+        const joinSep = pathImpl.sep;
+        let abs = this.rootPath;
+        let sawFirst = false;
+        for (const part of split) {
+          const l = len--;
+          prev = prev.child(part, {
+            relative: new Array(l).fill("..").join(joinSep),
+            relativePosix: new Array(l).fill("..").join("/"),
+            fullpath: abs += (sawFirst ? "" : joinSep) + part
+          });
+          sawFirst = true;
+        }
+        this.cwd = prev;
+      }
+      /**
+       * Get the depth of a provided path, string, or the cwd
+       */
+      depth(path = this.cwd) {
+        if (typeof path === "string") {
+          path = this.cwd.resolve(path);
+        }
+        return path.depth();
+      }
+      /**
+       * Return the cache of child entries.  Exposed so subclasses can create
+       * child Path objects in a platform-specific way.
+       *
+       * @internal
+       */
+      childrenCache() {
+        return this.#children;
+      }
+      /**
+       * Resolve one or more path strings to a resolved string
+       *
+       * Same interface as require('path').resolve.
+       *
+       * Much faster than path.resolve() when called multiple times for the same
+       * path, because the resolved Path objects are cached.  Much slower
+       * otherwise.
+       */
+      resolve(...paths) {
+        let r = "";
+        for (let i = paths.length - 1; i >= 0; i--) {
+          const p = paths[i];
+          if (!p || p === ".")
+            continue;
+          r = r ? `${p}/${r}` : p;
+          if (this.isAbsolute(p)) {
+            break;
+          }
+        }
+        const cached = this.#resolveCache.get(r);
+        if (cached !== void 0) {
+          return cached;
+        }
+        const result = this.cwd.resolve(r).fullpath();
+        this.#resolveCache.set(r, result);
+        return result;
+      }
+      /**
+       * Resolve one or more path strings to a resolved string, returning
+       * the posix path.  Identical to .resolve() on posix systems, but on
+       * windows will return a forward-slash separated UNC path.
+       *
+       * Same interface as require('path').resolve.
+       *
+       * Much faster than path.resolve() when called multiple times for the same
+       * path, because the resolved Path objects are cached.  Much slower
+       * otherwise.
+       */
+      resolvePosix(...paths) {
+        let r = "";
+        for (let i = paths.length - 1; i >= 0; i--) {
+          const p = paths[i];
+          if (!p || p === ".")
+            continue;
+          r = r ? `${p}/${r}` : p;
+          if (this.isAbsolute(p)) {
+            break;
+          }
+        }
+        const cached = this.#resolvePosixCache.get(r);
+        if (cached !== void 0) {
+          return cached;
+        }
+        const result = this.cwd.resolve(r).fullpathPosix();
+        this.#resolvePosixCache.set(r, result);
+        return result;
+      }
+      /**
+       * find the relative path from the cwd to the supplied path string or entry
+       */
+      relative(entry = this.cwd) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        }
+        return entry.relative();
+      }
+      /**
+       * find the relative path from the cwd to the supplied path string or
+       * entry, using / as the path delimiter, even on Windows.
+       */
+      relativePosix(entry = this.cwd) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        }
+        return entry.relativePosix();
+      }
+      /**
+       * Return the basename for the provided string or Path object
+       */
+      basename(entry = this.cwd) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        }
+        return entry.name;
+      }
+      /**
+       * Return the dirname for the provided string or Path object
+       */
+      dirname(entry = this.cwd) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        }
+        return (entry.parent || entry).fullpath();
+      }
+      async readdir(entry = this.cwd, opts = {
+        withFileTypes: true
+      }) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          opts = entry;
+          entry = this.cwd;
+        }
+        const { withFileTypes } = opts;
+        if (!entry.canReaddir()) {
+          return [];
+        } else {
+          const p = await entry.readdir();
+          return withFileTypes ? p : p.map((e) => e.name);
+        }
+      }
+      readdirSync(entry = this.cwd, opts = {
+        withFileTypes: true
+      }) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          opts = entry;
+          entry = this.cwd;
+        }
+        const { withFileTypes = true } = opts;
+        if (!entry.canReaddir()) {
+          return [];
+        } else if (withFileTypes) {
+          return entry.readdirSync();
+        } else {
+          return entry.readdirSync().map((e) => e.name);
+        }
+      }
+      /**
+       * Call lstat() on the string or Path object, and update all known
+       * information that can be determined.
+       *
+       * Note that unlike `fs.lstat()`, the returned value does not contain some
+       * information, such as `mode`, `dev`, `nlink`, and `ino`.  If that
+       * information is required, you will need to call `fs.lstat` yourself.
+       *
+       * If the Path refers to a nonexistent file, or if the lstat call fails for
+       * any reason, `undefined` is returned.  Otherwise the updated Path object is
+       * returned.
+       *
+       * Results are cached, and thus may be out of date if the filesystem is
+       * mutated.
+       */
+      async lstat(entry = this.cwd) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        }
+        return entry.lstat();
+      }
+      /**
+       * synchronous {@link PathScurryBase.lstat}
+       */
+      lstatSync(entry = this.cwd) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        }
+        return entry.lstatSync();
+      }
+      async readlink(entry = this.cwd, { withFileTypes } = {
+        withFileTypes: false
+      }) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          withFileTypes = entry.withFileTypes;
+          entry = this.cwd;
+        }
+        const e = await entry.readlink();
+        return withFileTypes ? e : e?.fullpath();
+      }
+      readlinkSync(entry = this.cwd, { withFileTypes } = {
+        withFileTypes: false
+      }) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          withFileTypes = entry.withFileTypes;
+          entry = this.cwd;
+        }
+        const e = entry.readlinkSync();
+        return withFileTypes ? e : e?.fullpath();
+      }
+      async realpath(entry = this.cwd, { withFileTypes } = {
+        withFileTypes: false
+      }) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          withFileTypes = entry.withFileTypes;
+          entry = this.cwd;
+        }
+        const e = await entry.realpath();
+        return withFileTypes ? e : e?.fullpath();
+      }
+      realpathSync(entry = this.cwd, { withFileTypes } = {
+        withFileTypes: false
+      }) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          withFileTypes = entry.withFileTypes;
+          entry = this.cwd;
+        }
+        const e = entry.realpathSync();
+        return withFileTypes ? e : e?.fullpath();
+      }
+      async walk(entry = this.cwd, opts = {}) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          opts = entry;
+          entry = this.cwd;
+        }
+        const { withFileTypes = true, follow = false, filter, walkFilter } = opts;
+        const results = [];
+        if (!filter || filter(entry)) {
+          results.push(withFileTypes ? entry : entry.fullpath());
+        }
+        const dirs = /* @__PURE__ */ new Set();
+        const walk = /* @__PURE__ */ __name((dir, cb) => {
+          dirs.add(dir);
+          dir.readdirCB((er, entries) => {
+            if (er) {
+              return cb(er);
+            }
+            let len = entries.length;
+            if (!len)
+              return cb();
+            const next = /* @__PURE__ */ __name(() => {
+              if (--len === 0) {
+                cb();
+              }
+            }, "next");
+            for (const e of entries) {
+              if (!filter || filter(e)) {
+                results.push(withFileTypes ? e : e.fullpath());
+              }
+              if (follow && e.isSymbolicLink()) {
+                e.realpath().then((r) => r?.isUnknown() ? r.lstat() : r).then((r) => r?.shouldWalk(dirs, walkFilter) ? walk(r, next) : next());
+              } else {
+                if (e.shouldWalk(dirs, walkFilter)) {
+                  walk(e, next);
+                } else {
+                  next();
+                }
+              }
+            }
+          }, true);
+        }, "walk");
+        const start = entry;
+        return new Promise((res, rej) => {
+          walk(start, (er) => {
+            if (er)
+              return rej(er);
+            res(results);
+          });
+        });
+      }
+      walkSync(entry = this.cwd, opts = {}) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          opts = entry;
+          entry = this.cwd;
+        }
+        const { withFileTypes = true, follow = false, filter, walkFilter } = opts;
+        const results = [];
+        if (!filter || filter(entry)) {
+          results.push(withFileTypes ? entry : entry.fullpath());
+        }
+        const dirs = /* @__PURE__ */ new Set([entry]);
+        for (const dir of dirs) {
+          const entries = dir.readdirSync();
+          for (const e of entries) {
+            if (!filter || filter(e)) {
+              results.push(withFileTypes ? e : e.fullpath());
+            }
+            let r = e;
+            if (e.isSymbolicLink()) {
+              if (!(follow && (r = e.realpathSync())))
+                continue;
+              if (r.isUnknown())
+                r.lstatSync();
+            }
+            if (r.shouldWalk(dirs, walkFilter)) {
+              dirs.add(r);
+            }
+          }
+        }
+        return results;
+      }
+      /**
+       * Support for `for await`
+       *
+       * Alias for {@link PathScurryBase.iterate}
+       *
+       * Note: As of Node 19, this is very slow, compared to other methods of
+       * walking.  Consider using {@link PathScurryBase.stream} if memory overhead
+       * and backpressure are concerns, or {@link PathScurryBase.walk} if not.
+       */
+      [Symbol.asyncIterator]() {
+        return this.iterate();
+      }
+      iterate(entry = this.cwd, options = {}) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          options = entry;
+          entry = this.cwd;
+        }
+        return this.stream(entry, options)[Symbol.asyncIterator]();
+      }
+      /**
+       * Iterating over a PathScurry performs a synchronous walk.
+       *
+       * Alias for {@link PathScurryBase.iterateSync}
+       */
+      [Symbol.iterator]() {
+        return this.iterateSync();
+      }
+      *iterateSync(entry = this.cwd, opts = {}) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          opts = entry;
+          entry = this.cwd;
+        }
+        const { withFileTypes = true, follow = false, filter, walkFilter } = opts;
+        if (!filter || filter(entry)) {
+          yield withFileTypes ? entry : entry.fullpath();
+        }
+        const dirs = /* @__PURE__ */ new Set([entry]);
+        for (const dir of dirs) {
+          const entries = dir.readdirSync();
+          for (const e of entries) {
+            if (!filter || filter(e)) {
+              yield withFileTypes ? e : e.fullpath();
+            }
+            let r = e;
+            if (e.isSymbolicLink()) {
+              if (!(follow && (r = e.realpathSync())))
+                continue;
+              if (r.isUnknown())
+                r.lstatSync();
+            }
+            if (r.shouldWalk(dirs, walkFilter)) {
+              dirs.add(r);
+            }
+          }
+        }
+      }
+      stream(entry = this.cwd, opts = {}) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          opts = entry;
+          entry = this.cwd;
+        }
+        const { withFileTypes = true, follow = false, filter, walkFilter } = opts;
+        const results = new minipass_1.Minipass({ objectMode: true });
+        if (!filter || filter(entry)) {
+          results.write(withFileTypes ? entry : entry.fullpath());
+        }
+        const dirs = /* @__PURE__ */ new Set();
+        const queue = [entry];
+        let processing = 0;
+        const process2 = /* @__PURE__ */ __name(() => {
+          let paused = false;
+          while (!paused) {
+            const dir = queue.shift();
+            if (!dir) {
+              if (processing === 0)
+                results.end();
+              return;
+            }
+            processing++;
+            dirs.add(dir);
+            const onReaddir = /* @__PURE__ */ __name((er, entries, didRealpaths = false) => {
+              if (er)
+                return results.emit("error", er);
+              if (follow && !didRealpaths) {
+                const promises = [];
+                for (const e of entries) {
+                  if (e.isSymbolicLink()) {
+                    promises.push(e.realpath().then((r) => r?.isUnknown() ? r.lstat() : r));
+                  }
+                }
+                if (promises.length) {
+                  Promise.all(promises).then(() => onReaddir(null, entries, true));
+                  return;
+                }
+              }
+              for (const e of entries) {
+                if (e && (!filter || filter(e))) {
+                  if (!results.write(withFileTypes ? e : e.fullpath())) {
+                    paused = true;
+                  }
+                }
+              }
+              processing--;
+              for (const e of entries) {
+                const r = e.realpathCached() || e;
+                if (r.shouldWalk(dirs, walkFilter)) {
+                  queue.push(r);
+                }
+              }
+              if (paused && !results.flowing) {
+                results.once("drain", process2);
+              } else if (!sync) {
+                process2();
+              }
+            }, "onReaddir");
+            let sync = true;
+            dir.readdirCB(onReaddir, true);
+            sync = false;
+          }
+        }, "process");
+        process2();
+        return results;
+      }
+      streamSync(entry = this.cwd, opts = {}) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          opts = entry;
+          entry = this.cwd;
+        }
+        const { withFileTypes = true, follow = false, filter, walkFilter } = opts;
+        const results = new minipass_1.Minipass({ objectMode: true });
+        const dirs = /* @__PURE__ */ new Set();
+        if (!filter || filter(entry)) {
+          results.write(withFileTypes ? entry : entry.fullpath());
+        }
+        const queue = [entry];
+        let processing = 0;
+        const process2 = /* @__PURE__ */ __name(() => {
+          let paused = false;
+          while (!paused) {
+            const dir = queue.shift();
+            if (!dir) {
+              if (processing === 0)
+                results.end();
+              return;
+            }
+            processing++;
+            dirs.add(dir);
+            const entries = dir.readdirSync();
+            for (const e of entries) {
+              if (!filter || filter(e)) {
+                if (!results.write(withFileTypes ? e : e.fullpath())) {
+                  paused = true;
+                }
+              }
+            }
+            processing--;
+            for (const e of entries) {
+              let r = e;
+              if (e.isSymbolicLink()) {
+                if (!(follow && (r = e.realpathSync())))
+                  continue;
+                if (r.isUnknown())
+                  r.lstatSync();
+              }
+              if (r.shouldWalk(dirs, walkFilter)) {
+                queue.push(r);
+              }
+            }
+          }
+          if (paused && !results.flowing)
+            results.once("drain", process2);
+        }, "process");
+        process2();
+        return results;
+      }
+      chdir(path = this.cwd) {
+        const oldCwd = this.cwd;
+        this.cwd = typeof path === "string" ? this.cwd.resolve(path) : path;
+        this.cwd[setAsCwd](oldCwd);
+      }
+    };
+    exports2.PathScurryBase = PathScurryBase;
+    var PathScurryWin32 = class extends PathScurryBase {
+      static {
+        __name(this, "PathScurryWin32");
+      }
+      /**
+       * separator for generating path strings
+       */
+      sep = "\\";
+      constructor(cwd = process.cwd(), opts = {}) {
+        const { nocase = true } = opts;
+        super(cwd, node_path_1.win32, "\\", { ...opts, nocase });
+        this.nocase = nocase;
+        for (let p = this.cwd; p; p = p.parent) {
+          p.nocase = this.nocase;
+        }
+      }
+      /**
+       * @internal
+       */
+      parseRootPath(dir) {
+        return node_path_1.win32.parse(dir).root.toUpperCase();
+      }
+      /**
+       * @internal
+       */
+      newRoot(fs) {
+        return new PathWin32(this.rootPath, IFDIR, void 0, this.roots, this.nocase, this.childrenCache(), { fs });
+      }
+      /**
+       * Return true if the provided path string is an absolute path
+       */
+      isAbsolute(p) {
+        return p.startsWith("/") || p.startsWith("\\") || /^[a-z]:(\/|\\)/i.test(p);
+      }
+    };
+    exports2.PathScurryWin32 = PathScurryWin32;
+    var PathScurryPosix = class extends PathScurryBase {
+      static {
+        __name(this, "PathScurryPosix");
+      }
+      /**
+       * separator for generating path strings
+       */
+      sep = "/";
+      constructor(cwd = process.cwd(), opts = {}) {
+        const { nocase = false } = opts;
+        super(cwd, node_path_1.posix, "/", { ...opts, nocase });
+        this.nocase = nocase;
+      }
+      /**
+       * @internal
+       */
+      parseRootPath(_dir) {
+        return "/";
+      }
+      /**
+       * @internal
+       */
+      newRoot(fs) {
+        return new PathPosix(this.rootPath, IFDIR, void 0, this.roots, this.nocase, this.childrenCache(), { fs });
+      }
+      /**
+       * Return true if the provided path string is an absolute path
+       */
+      isAbsolute(p) {
+        return p.startsWith("/");
+      }
+    };
+    exports2.PathScurryPosix = PathScurryPosix;
+    var PathScurryDarwin = class extends PathScurryPosix {
+      static {
+        __name(this, "PathScurryDarwin");
+      }
+      constructor(cwd = process.cwd(), opts = {}) {
+        const { nocase = true } = opts;
+        super(cwd, { ...opts, nocase });
+      }
+    };
+    exports2.PathScurryDarwin = PathScurryDarwin;
+    exports2.Path = process.platform === "win32" ? PathWin32 : PathPosix;
+    exports2.PathScurry = process.platform === "win32" ? PathScurryWin32 : process.platform === "darwin" ? PathScurryDarwin : PathScurryPosix;
+  }
+});
+
+// node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/pattern.js
+var require_pattern = __commonJS({
+  "node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/pattern.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Pattern = void 0;
+    var minimatch_1 = require_commonjs4();
+    var isPatternList = /* @__PURE__ */ __name((pl) => pl.length >= 1, "isPatternList");
+    var isGlobList = /* @__PURE__ */ __name((gl) => gl.length >= 1, "isGlobList");
+    var Pattern = class _Pattern {
+      static {
+        __name(this, "Pattern");
+      }
+      #patternList;
+      #globList;
+      #index;
+      length;
+      #platform;
+      #rest;
+      #globString;
+      #isDrive;
+      #isUNC;
+      #isAbsolute;
+      #followGlobstar = true;
+      constructor(patternList, globList, index, platform) {
+        if (!isPatternList(patternList)) {
+          throw new TypeError("empty pattern list");
+        }
+        if (!isGlobList(globList)) {
+          throw new TypeError("empty glob list");
+        }
+        if (globList.length !== patternList.length) {
+          throw new TypeError("mismatched pattern list and glob list lengths");
+        }
+        this.length = patternList.length;
+        if (index < 0 || index >= this.length) {
+          throw new TypeError("index out of range");
+        }
+        this.#patternList = patternList;
+        this.#globList = globList;
+        this.#index = index;
+        this.#platform = platform;
+        if (this.#index === 0) {
+          if (this.isUNC()) {
+            const [p0, p1, p2, p3, ...prest] = this.#patternList;
+            const [g0, g1, g2, g3, ...grest] = this.#globList;
+            if (prest[0] === "") {
+              prest.shift();
+              grest.shift();
+            }
+            const p = [p0, p1, p2, p3, ""].join("/");
+            const g = [g0, g1, g2, g3, ""].join("/");
+            this.#patternList = [p, ...prest];
+            this.#globList = [g, ...grest];
+            this.length = this.#patternList.length;
+          } else if (this.isDrive() || this.isAbsolute()) {
+            const [p1, ...prest] = this.#patternList;
+            const [g1, ...grest] = this.#globList;
+            if (prest[0] === "") {
+              prest.shift();
+              grest.shift();
+            }
+            const p = p1 + "/";
+            const g = g1 + "/";
+            this.#patternList = [p, ...prest];
+            this.#globList = [g, ...grest];
+            this.length = this.#patternList.length;
+          }
+        }
+      }
+      /**
+       * The first entry in the parsed list of patterns
+       */
+      pattern() {
+        return this.#patternList[this.#index];
+      }
+      /**
+       * true of if pattern() returns a string
+       */
+      isString() {
+        return typeof this.#patternList[this.#index] === "string";
+      }
+      /**
+       * true of if pattern() returns GLOBSTAR
+       */
+      isGlobstar() {
+        return this.#patternList[this.#index] === minimatch_1.GLOBSTAR;
+      }
+      /**
+       * true if pattern() returns a regexp
+       */
+      isRegExp() {
+        return this.#patternList[this.#index] instanceof RegExp;
+      }
+      /**
+       * The /-joined set of glob parts that make up this pattern
+       */
+      globString() {
+        return this.#globString = this.#globString || (this.#index === 0 ? this.isAbsolute() ? this.#globList[0] + this.#globList.slice(1).join("/") : this.#globList.join("/") : this.#globList.slice(this.#index).join("/"));
+      }
+      /**
+       * true if there are more pattern parts after this one
+       */
+      hasMore() {
+        return this.length > this.#index + 1;
+      }
+      /**
+       * The rest of the pattern after this part, or null if this is the end
+       */
+      rest() {
+        if (this.#rest !== void 0)
+          return this.#rest;
+        if (!this.hasMore())
+          return this.#rest = null;
+        this.#rest = new _Pattern(this.#patternList, this.#globList, this.#index + 1, this.#platform);
+        this.#rest.#isAbsolute = this.#isAbsolute;
+        this.#rest.#isUNC = this.#isUNC;
+        this.#rest.#isDrive = this.#isDrive;
+        return this.#rest;
+      }
+      /**
+       * true if the pattern represents a //unc/path/ on windows
+       */
+      isUNC() {
+        const pl = this.#patternList;
+        return this.#isUNC !== void 0 ? this.#isUNC : this.#isUNC = this.#platform === "win32" && this.#index === 0 && pl[0] === "" && pl[1] === "" && typeof pl[2] === "string" && !!pl[2] && typeof pl[3] === "string" && !!pl[3];
+      }
+      // pattern like C:/...
+      // split = ['C:', ...]
+      // XXX: would be nice to handle patterns like `c:*` to test the cwd
+      // in c: for *, but I don't know of a way to even figure out what that
+      // cwd is without actually chdir'ing into it?
+      /**
+       * True if the pattern starts with a drive letter on Windows
+       */
+      isDrive() {
+        const pl = this.#patternList;
+        return this.#isDrive !== void 0 ? this.#isDrive : this.#isDrive = this.#platform === "win32" && this.#index === 0 && this.length > 1 && typeof pl[0] === "string" && /^[a-z]:$/i.test(pl[0]);
+      }
+      // pattern = '/' or '/...' or '/x/...'
+      // split = ['', ''] or ['', ...] or ['', 'x', ...]
+      // Drive and UNC both considered absolute on windows
+      /**
+       * True if the pattern is rooted on an absolute path
+       */
+      isAbsolute() {
+        const pl = this.#patternList;
+        return this.#isAbsolute !== void 0 ? this.#isAbsolute : this.#isAbsolute = pl[0] === "" && pl.length > 1 || this.isDrive() || this.isUNC();
+      }
+      /**
+       * consume the root of the pattern, and return it
+       */
+      root() {
+        const p = this.#patternList[0];
+        return typeof p === "string" && this.isAbsolute() && this.#index === 0 ? p : "";
+      }
+      /**
+       * Check to see if the current globstar pattern is allowed to follow
+       * a symbolic link.
+       */
+      checkFollowGlobstar() {
+        return !(this.#index === 0 || !this.isGlobstar() || !this.#followGlobstar);
+      }
+      /**
+       * Mark that the current globstar pattern is following a symbolic link
+       */
+      markFollowGlobstar() {
+        if (this.#index === 0 || !this.isGlobstar() || !this.#followGlobstar)
+          return false;
+        this.#followGlobstar = false;
+        return true;
+      }
+    };
+    exports2.Pattern = Pattern;
+  }
+});
+
+// node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/ignore.js
+var require_ignore = __commonJS({
+  "node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/ignore.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Ignore = void 0;
+    var minimatch_1 = require_commonjs4();
+    var pattern_js_1 = require_pattern();
+    var defaultPlatform = typeof process === "object" && process && typeof process.platform === "string" ? process.platform : "linux";
+    var Ignore = class {
+      static {
+        __name(this, "Ignore");
+      }
+      relative;
+      relativeChildren;
+      absolute;
+      absoluteChildren;
+      platform;
+      mmopts;
+      constructor(ignored, { nobrace, nocase, noext, noglobstar, platform = defaultPlatform }) {
+        this.relative = [];
+        this.absolute = [];
+        this.relativeChildren = [];
+        this.absoluteChildren = [];
+        this.platform = platform;
+        this.mmopts = {
+          dot: true,
+          nobrace,
+          nocase,
+          noext,
+          noglobstar,
+          optimizationLevel: 2,
+          platform,
+          nocomment: true,
+          nonegate: true
+        };
+        for (const ign of ignored)
+          this.add(ign);
+      }
+      add(ign) {
+        const mm = new minimatch_1.Minimatch(ign, this.mmopts);
+        for (let i = 0; i < mm.set.length; i++) {
+          const parsed = mm.set[i];
+          const globParts = mm.globParts[i];
+          if (!parsed || !globParts) {
+            throw new Error("invalid pattern object");
+          }
+          while (parsed[0] === "." && globParts[0] === ".") {
+            parsed.shift();
+            globParts.shift();
+          }
+          const p = new pattern_js_1.Pattern(parsed, globParts, 0, this.platform);
+          const m = new minimatch_1.Minimatch(p.globString(), this.mmopts);
+          const children = globParts[globParts.length - 1] === "**";
+          const absolute = p.isAbsolute();
+          if (absolute)
+            this.absolute.push(m);
+          else
+            this.relative.push(m);
+          if (children) {
+            if (absolute)
+              this.absoluteChildren.push(m);
+            else
+              this.relativeChildren.push(m);
+          }
+        }
+      }
+      ignored(p) {
+        const fullpath = p.fullpath();
+        const fullpaths = `${fullpath}/`;
+        const relative = p.relative() || ".";
+        const relatives = `${relative}/`;
+        for (const m of this.relative) {
+          if (m.match(relative) || m.match(relatives))
+            return true;
+        }
+        for (const m of this.absolute) {
+          if (m.match(fullpath) || m.match(fullpaths))
+            return true;
+        }
+        return false;
+      }
+      childrenIgnored(p) {
+        const fullpath = p.fullpath() + "/";
+        const relative = (p.relative() || ".") + "/";
+        for (const m of this.relativeChildren) {
+          if (m.match(relative))
+            return true;
+        }
+        for (const m of this.absoluteChildren) {
+          if (m.match(fullpath))
+            return true;
+        }
+        return false;
+      }
+    };
+    exports2.Ignore = Ignore;
+  }
+});
+
+// node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/processor.js
+var require_processor = __commonJS({
+  "node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/processor.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Processor = exports2.SubWalks = exports2.MatchRecord = exports2.HasWalkedCache = void 0;
+    var minimatch_1 = require_commonjs4();
+    var HasWalkedCache = class _HasWalkedCache {
+      static {
+        __name(this, "HasWalkedCache");
+      }
+      store;
+      constructor(store = /* @__PURE__ */ new Map()) {
+        this.store = store;
+      }
+      copy() {
+        return new _HasWalkedCache(new Map(this.store));
+      }
+      hasWalked(target, pattern) {
+        return this.store.get(target.fullpath())?.has(pattern.globString());
+      }
+      storeWalked(target, pattern) {
+        const fullpath = target.fullpath();
+        const cached = this.store.get(fullpath);
+        if (cached)
+          cached.add(pattern.globString());
+        else
+          this.store.set(fullpath, /* @__PURE__ */ new Set([pattern.globString()]));
+      }
+    };
+    exports2.HasWalkedCache = HasWalkedCache;
+    var MatchRecord = class {
+      static {
+        __name(this, "MatchRecord");
+      }
+      store = /* @__PURE__ */ new Map();
+      add(target, absolute, ifDir) {
+        const n = (absolute ? 2 : 0) | (ifDir ? 1 : 0);
+        const current = this.store.get(target);
+        this.store.set(target, current === void 0 ? n : n & current);
+      }
+      // match, absolute, ifdir
+      entries() {
+        return [...this.store.entries()].map(([path, n]) => [
+          path,
+          !!(n & 2),
+          !!(n & 1)
+        ]);
+      }
+    };
+    exports2.MatchRecord = MatchRecord;
+    var SubWalks = class {
+      static {
+        __name(this, "SubWalks");
+      }
+      store = /* @__PURE__ */ new Map();
+      add(target, pattern) {
+        if (!target.canReaddir()) {
+          return;
+        }
+        const subs = this.store.get(target);
+        if (subs) {
+          if (!subs.find((p) => p.globString() === pattern.globString())) {
+            subs.push(pattern);
+          }
+        } else
+          this.store.set(target, [pattern]);
+      }
+      get(target) {
+        const subs = this.store.get(target);
+        if (!subs) {
+          throw new Error("attempting to walk unknown path");
+        }
+        return subs;
+      }
+      entries() {
+        return this.keys().map((k) => [k, this.store.get(k)]);
+      }
+      keys() {
+        return [...this.store.keys()].filter((t) => t.canReaddir());
+      }
+    };
+    exports2.SubWalks = SubWalks;
+    var Processor = class _Processor {
+      static {
+        __name(this, "Processor");
+      }
+      hasWalkedCache;
+      matches = new MatchRecord();
+      subwalks = new SubWalks();
+      patterns;
+      follow;
+      dot;
+      opts;
+      constructor(opts, hasWalkedCache) {
+        this.opts = opts;
+        this.follow = !!opts.follow;
+        this.dot = !!opts.dot;
+        this.hasWalkedCache = hasWalkedCache ? hasWalkedCache.copy() : new HasWalkedCache();
+      }
+      processPatterns(target, patterns) {
+        this.patterns = patterns;
+        const processingSet = patterns.map((p) => [target, p]);
+        for (let [t, pattern] of processingSet) {
+          this.hasWalkedCache.storeWalked(t, pattern);
+          const root = pattern.root();
+          const absolute = pattern.isAbsolute() && this.opts.absolute !== false;
+          if (root) {
+            t = t.resolve(root === "/" && this.opts.root !== void 0 ? this.opts.root : root);
+            const rest2 = pattern.rest();
+            if (!rest2) {
+              this.matches.add(t, true, false);
+              continue;
+            } else {
+              pattern = rest2;
+            }
+          }
+          if (t.isENOENT())
+            continue;
+          let p;
+          let rest;
+          let changed = false;
+          while (typeof (p = pattern.pattern()) === "string" && (rest = pattern.rest())) {
+            const c = t.resolve(p);
+            t = c;
+            pattern = rest;
+            changed = true;
+          }
+          p = pattern.pattern();
+          rest = pattern.rest();
+          if (changed) {
+            if (this.hasWalkedCache.hasWalked(t, pattern))
+              continue;
+            this.hasWalkedCache.storeWalked(t, pattern);
+          }
+          if (typeof p === "string") {
+            const ifDir = p === ".." || p === "" || p === ".";
+            this.matches.add(t.resolve(p), absolute, ifDir);
+            continue;
+          } else if (p === minimatch_1.GLOBSTAR) {
+            if (!t.isSymbolicLink() || this.follow || pattern.checkFollowGlobstar()) {
+              this.subwalks.add(t, pattern);
+            }
+            const rp = rest?.pattern();
+            const rrest = rest?.rest();
+            if (!rest || (rp === "" || rp === ".") && !rrest) {
+              this.matches.add(t, absolute, rp === "" || rp === ".");
+            } else {
+              if (rp === "..") {
+                const tp = t.parent || t;
+                if (!rrest)
+                  this.matches.add(tp, absolute, true);
+                else if (!this.hasWalkedCache.hasWalked(tp, rrest)) {
+                  this.subwalks.add(tp, rrest);
+                }
+              }
+            }
+          } else if (p instanceof RegExp) {
+            this.subwalks.add(t, pattern);
+          }
+        }
+        return this;
+      }
+      subwalkTargets() {
+        return this.subwalks.keys();
+      }
+      child() {
+        return new _Processor(this.opts, this.hasWalkedCache);
+      }
+      // return a new Processor containing the subwalks for each
+      // child entry, and a set of matches, and
+      // a hasWalkedCache that's a copy of this one
+      // then we're going to call
+      filterEntries(parent, entries) {
+        const patterns = this.subwalks.get(parent);
+        const results = this.child();
+        for (const e of entries) {
+          for (const pattern of patterns) {
+            const absolute = pattern.isAbsolute();
+            const p = pattern.pattern();
+            const rest = pattern.rest();
+            if (p === minimatch_1.GLOBSTAR) {
+              results.testGlobstar(e, pattern, rest, absolute);
+            } else if (p instanceof RegExp) {
+              results.testRegExp(e, p, rest, absolute);
+            } else {
+              results.testString(e, p, rest, absolute);
+            }
+          }
+        }
+        return results;
+      }
+      testGlobstar(e, pattern, rest, absolute) {
+        if (this.dot || !e.name.startsWith(".")) {
+          if (!pattern.hasMore()) {
+            this.matches.add(e, absolute, false);
+          }
+          if (e.canReaddir()) {
+            if (this.follow || !e.isSymbolicLink()) {
+              this.subwalks.add(e, pattern);
+            } else if (e.isSymbolicLink()) {
+              if (rest && pattern.checkFollowGlobstar()) {
+                this.subwalks.add(e, rest);
+              } else if (pattern.markFollowGlobstar()) {
+                this.subwalks.add(e, pattern);
+              }
+            }
+          }
+        }
+        if (rest) {
+          const rp = rest.pattern();
+          if (typeof rp === "string" && // dots and empty were handled already
+          rp !== ".." && rp !== "" && rp !== ".") {
+            this.testString(e, rp, rest.rest(), absolute);
+          } else if (rp === "..") {
+            const ep = e.parent || e;
+            this.subwalks.add(ep, rest);
+          } else if (rp instanceof RegExp) {
+            this.testRegExp(e, rp, rest.rest(), absolute);
+          }
+        }
+      }
+      testRegExp(e, p, rest, absolute) {
+        if (!p.test(e.name))
+          return;
+        if (!rest) {
+          this.matches.add(e, absolute, false);
+        } else {
+          this.subwalks.add(e, rest);
+        }
+      }
+      testString(e, p, rest, absolute) {
+        if (!e.isNamed(p))
+          return;
+        if (!rest) {
+          this.matches.add(e, absolute, false);
+        } else {
+          this.subwalks.add(e, rest);
+        }
+      }
+    };
+    exports2.Processor = Processor;
+  }
+});
+
+// node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/walker.js
+var require_walker = __commonJS({
+  "node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/walker.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.GlobStream = exports2.GlobWalker = exports2.GlobUtil = void 0;
+    var minipass_1 = require_commonjs5();
+    var ignore_js_1 = require_ignore();
+    var processor_js_1 = require_processor();
+    var makeIgnore = /* @__PURE__ */ __name((ignore, opts) => typeof ignore === "string" ? new ignore_js_1.Ignore([ignore], opts) : Array.isArray(ignore) ? new ignore_js_1.Ignore(ignore, opts) : ignore, "makeIgnore");
+    var GlobUtil = class {
+      static {
+        __name(this, "GlobUtil");
+      }
+      path;
+      patterns;
+      opts;
+      seen = /* @__PURE__ */ new Set();
+      paused = false;
+      aborted = false;
+      #onResume = [];
+      #ignore;
+      #sep;
+      signal;
+      maxDepth;
+      includeChildMatches;
+      constructor(patterns, path, opts) {
+        this.patterns = patterns;
+        this.path = path;
+        this.opts = opts;
+        this.#sep = !opts.posix && opts.platform === "win32" ? "\\" : "/";
+        this.includeChildMatches = opts.includeChildMatches !== false;
+        if (opts.ignore || !this.includeChildMatches) {
+          this.#ignore = makeIgnore(opts.ignore ?? [], opts);
+          if (!this.includeChildMatches && typeof this.#ignore.add !== "function") {
+            const m = "cannot ignore child matches, ignore lacks add() method.";
+            throw new Error(m);
+          }
+        }
+        this.maxDepth = opts.maxDepth || Infinity;
+        if (opts.signal) {
+          this.signal = opts.signal;
+          this.signal.addEventListener("abort", () => {
+            this.#onResume.length = 0;
+          });
+        }
+      }
+      #ignored(path) {
+        return this.seen.has(path) || !!this.#ignore?.ignored?.(path);
+      }
+      #childrenIgnored(path) {
+        return !!this.#ignore?.childrenIgnored?.(path);
+      }
+      // backpressure mechanism
+      pause() {
+        this.paused = true;
+      }
+      resume() {
+        if (this.signal?.aborted)
+          return;
+        this.paused = false;
+        let fn = void 0;
+        while (!this.paused && (fn = this.#onResume.shift())) {
+          fn();
+        }
+      }
+      onResume(fn) {
+        if (this.signal?.aborted)
+          return;
+        if (!this.paused) {
+          fn();
+        } else {
+          this.#onResume.push(fn);
+        }
+      }
+      // do the requisite realpath/stat checking, and return the path
+      // to add or undefined to filter it out.
+      async matchCheck(e, ifDir) {
+        if (ifDir && this.opts.nodir)
+          return void 0;
+        let rpc;
+        if (this.opts.realpath) {
+          rpc = e.realpathCached() || await e.realpath();
+          if (!rpc)
+            return void 0;
+          e = rpc;
+        }
+        const needStat = e.isUnknown() || this.opts.stat;
+        const s = needStat ? await e.lstat() : e;
+        if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {
+          const target = await s.realpath();
+          if (target && (target.isUnknown() || this.opts.stat)) {
+            await target.lstat();
+          }
+        }
+        return this.matchCheckTest(s, ifDir);
+      }
+      matchCheckTest(e, ifDir) {
+        return e && (this.maxDepth === Infinity || e.depth() <= this.maxDepth) && (!ifDir || e.canReaddir()) && (!this.opts.nodir || !e.isDirectory()) && (!this.opts.nodir || !this.opts.follow || !e.isSymbolicLink() || !e.realpathCached()?.isDirectory()) && !this.#ignored(e) ? e : void 0;
+      }
+      matchCheckSync(e, ifDir) {
+        if (ifDir && this.opts.nodir)
+          return void 0;
+        let rpc;
+        if (this.opts.realpath) {
+          rpc = e.realpathCached() || e.realpathSync();
+          if (!rpc)
+            return void 0;
+          e = rpc;
+        }
+        const needStat = e.isUnknown() || this.opts.stat;
+        const s = needStat ? e.lstatSync() : e;
+        if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {
+          const target = s.realpathSync();
+          if (target && (target?.isUnknown() || this.opts.stat)) {
+            target.lstatSync();
+          }
+        }
+        return this.matchCheckTest(s, ifDir);
+      }
+      matchFinish(e, absolute) {
+        if (this.#ignored(e))
+          return;
+        if (!this.includeChildMatches && this.#ignore?.add) {
+          const ign = `${e.relativePosix()}/**`;
+          this.#ignore.add(ign);
+        }
+        const abs = this.opts.absolute === void 0 ? absolute : this.opts.absolute;
+        this.seen.add(e);
+        const mark = this.opts.mark && e.isDirectory() ? this.#sep : "";
+        if (this.opts.withFileTypes) {
+          this.matchEmit(e);
+        } else if (abs) {
+          const abs2 = this.opts.posix ? e.fullpathPosix() : e.fullpath();
+          this.matchEmit(abs2 + mark);
+        } else {
+          const rel = this.opts.posix ? e.relativePosix() : e.relative();
+          const pre = this.opts.dotRelative && !rel.startsWith(".." + this.#sep) ? "." + this.#sep : "";
+          this.matchEmit(!rel ? "." + mark : pre + rel + mark);
+        }
+      }
+      async match(e, absolute, ifDir) {
+        const p = await this.matchCheck(e, ifDir);
+        if (p)
+          this.matchFinish(p, absolute);
+      }
+      matchSync(e, absolute, ifDir) {
+        const p = this.matchCheckSync(e, ifDir);
+        if (p)
+          this.matchFinish(p, absolute);
+      }
+      walkCB(target, patterns, cb) {
+        if (this.signal?.aborted)
+          cb();
+        this.walkCB2(target, patterns, new processor_js_1.Processor(this.opts), cb);
+      }
+      walkCB2(target, patterns, processor, cb) {
+        if (this.#childrenIgnored(target))
+          return cb();
+        if (this.signal?.aborted)
+          cb();
+        if (this.paused) {
+          this.onResume(() => this.walkCB2(target, patterns, processor, cb));
+          return;
+        }
+        processor.processPatterns(target, patterns);
+        let tasks = 1;
+        const next = /* @__PURE__ */ __name(() => {
+          if (--tasks === 0)
+            cb();
+        }, "next");
+        for (const [m, absolute, ifDir] of processor.matches.entries()) {
+          if (this.#ignored(m))
+            continue;
+          tasks++;
+          this.match(m, absolute, ifDir).then(() => next());
+        }
+        for (const t of processor.subwalkTargets()) {
+          if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {
+            continue;
+          }
+          tasks++;
+          const childrenCached = t.readdirCached();
+          if (t.calledReaddir())
+            this.walkCB3(t, childrenCached, processor, next);
+          else {
+            t.readdirCB((_, entries) => this.walkCB3(t, entries, processor, next), true);
+          }
+        }
+        next();
+      }
+      walkCB3(target, entries, processor, cb) {
+        processor = processor.filterEntries(target, entries);
+        let tasks = 1;
+        const next = /* @__PURE__ */ __name(() => {
+          if (--tasks === 0)
+            cb();
+        }, "next");
+        for (const [m, absolute, ifDir] of processor.matches.entries()) {
+          if (this.#ignored(m))
+            continue;
+          tasks++;
+          this.match(m, absolute, ifDir).then(() => next());
+        }
+        for (const [target2, patterns] of processor.subwalks.entries()) {
+          tasks++;
+          this.walkCB2(target2, patterns, processor.child(), next);
+        }
+        next();
+      }
+      walkCBSync(target, patterns, cb) {
+        if (this.signal?.aborted)
+          cb();
+        this.walkCB2Sync(target, patterns, new processor_js_1.Processor(this.opts), cb);
+      }
+      walkCB2Sync(target, patterns, processor, cb) {
+        if (this.#childrenIgnored(target))
+          return cb();
+        if (this.signal?.aborted)
+          cb();
+        if (this.paused) {
+          this.onResume(() => this.walkCB2Sync(target, patterns, processor, cb));
+          return;
+        }
+        processor.processPatterns(target, patterns);
+        let tasks = 1;
+        const next = /* @__PURE__ */ __name(() => {
+          if (--tasks === 0)
+            cb();
+        }, "next");
+        for (const [m, absolute, ifDir] of processor.matches.entries()) {
+          if (this.#ignored(m))
+            continue;
+          this.matchSync(m, absolute, ifDir);
+        }
+        for (const t of processor.subwalkTargets()) {
+          if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {
+            continue;
+          }
+          tasks++;
+          const children = t.readdirSync();
+          this.walkCB3Sync(t, children, processor, next);
+        }
+        next();
+      }
+      walkCB3Sync(target, entries, processor, cb) {
+        processor = processor.filterEntries(target, entries);
+        let tasks = 1;
+        const next = /* @__PURE__ */ __name(() => {
+          if (--tasks === 0)
+            cb();
+        }, "next");
+        for (const [m, absolute, ifDir] of processor.matches.entries()) {
+          if (this.#ignored(m))
+            continue;
+          this.matchSync(m, absolute, ifDir);
+        }
+        for (const [target2, patterns] of processor.subwalks.entries()) {
+          tasks++;
+          this.walkCB2Sync(target2, patterns, processor.child(), next);
+        }
+        next();
+      }
+    };
+    exports2.GlobUtil = GlobUtil;
+    var GlobWalker = class extends GlobUtil {
+      static {
+        __name(this, "GlobWalker");
+      }
+      matches = /* @__PURE__ */ new Set();
+      constructor(patterns, path, opts) {
+        super(patterns, path, opts);
+      }
+      matchEmit(e) {
+        this.matches.add(e);
+      }
+      async walk() {
+        if (this.signal?.aborted)
+          throw this.signal.reason;
+        if (this.path.isUnknown()) {
+          await this.path.lstat();
+        }
+        await new Promise((res, rej) => {
+          this.walkCB(this.path, this.patterns, () => {
+            if (this.signal?.aborted) {
+              rej(this.signal.reason);
+            } else {
+              res(this.matches);
+            }
+          });
+        });
+        return this.matches;
+      }
+      walkSync() {
+        if (this.signal?.aborted)
+          throw this.signal.reason;
+        if (this.path.isUnknown()) {
+          this.path.lstatSync();
+        }
+        this.walkCBSync(this.path, this.patterns, () => {
+          if (this.signal?.aborted)
+            throw this.signal.reason;
+        });
+        return this.matches;
+      }
+    };
+    exports2.GlobWalker = GlobWalker;
+    var GlobStream = class extends GlobUtil {
+      static {
+        __name(this, "GlobStream");
+      }
+      results;
+      constructor(patterns, path, opts) {
+        super(patterns, path, opts);
+        this.results = new minipass_1.Minipass({
+          signal: this.signal,
+          objectMode: true
+        });
+        this.results.on("drain", () => this.resume());
+        this.results.on("resume", () => this.resume());
+      }
+      matchEmit(e) {
+        this.results.write(e);
+        if (!this.results.flowing)
+          this.pause();
+      }
+      stream() {
+        const target = this.path;
+        if (target.isUnknown()) {
+          target.lstat().then(() => {
+            this.walkCB(target, this.patterns, () => this.results.end());
+          });
+        } else {
+          this.walkCB(target, this.patterns, () => this.results.end());
+        }
+        return this.results;
+      }
+      streamSync() {
+        if (this.path.isUnknown()) {
+          this.path.lstatSync();
+        }
+        this.walkCBSync(this.path, this.patterns, () => this.results.end());
+        return this.results;
+      }
+    };
+    exports2.GlobStream = GlobStream;
+  }
+});
+
+// node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/glob.js
+var require_glob = __commonJS({
+  "node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/glob.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Glob = void 0;
+    var minimatch_1 = require_commonjs4();
+    var node_url_1 = require("node:url");
+    var path_scurry_1 = require_commonjs6();
+    var pattern_js_1 = require_pattern();
+    var walker_js_1 = require_walker();
+    var defaultPlatform = typeof process === "object" && process && typeof process.platform === "string" ? process.platform : "linux";
+    var Glob = class {
+      static {
+        __name(this, "Glob");
+      }
+      absolute;
+      cwd;
+      root;
+      dot;
+      dotRelative;
+      follow;
+      ignore;
+      magicalBraces;
+      mark;
+      matchBase;
+      maxDepth;
+      nobrace;
+      nocase;
+      nodir;
+      noext;
+      noglobstar;
+      pattern;
+      platform;
+      realpath;
+      scurry;
+      stat;
+      signal;
+      windowsPathsNoEscape;
+      withFileTypes;
+      includeChildMatches;
+      /**
+       * The options provided to the constructor.
+       */
+      opts;
+      /**
+       * An array of parsed immutable {@link Pattern} objects.
+       */
+      patterns;
+      /**
+       * All options are stored as properties on the `Glob` object.
+       *
+       * See {@link GlobOptions} for full options descriptions.
+       *
+       * Note that a previous `Glob` object can be passed as the
+       * `GlobOptions` to another `Glob` instantiation to re-use settings
+       * and caches with a new pattern.
+       *
+       * Traversal functions can be called multiple times to run the walk
+       * again.
+       */
+      constructor(pattern, opts) {
+        if (!opts)
+          throw new TypeError("glob options required");
+        this.withFileTypes = !!opts.withFileTypes;
+        this.signal = opts.signal;
+        this.follow = !!opts.follow;
+        this.dot = !!opts.dot;
+        this.dotRelative = !!opts.dotRelative;
+        this.nodir = !!opts.nodir;
+        this.mark = !!opts.mark;
+        if (!opts.cwd) {
+          this.cwd = "";
+        } else if (opts.cwd instanceof URL || opts.cwd.startsWith("file://")) {
+          opts.cwd = (0, node_url_1.fileURLToPath)(opts.cwd);
+        }
+        this.cwd = opts.cwd || "";
+        this.root = opts.root;
+        this.magicalBraces = !!opts.magicalBraces;
+        this.nobrace = !!opts.nobrace;
+        this.noext = !!opts.noext;
+        this.realpath = !!opts.realpath;
+        this.absolute = opts.absolute;
+        this.includeChildMatches = opts.includeChildMatches !== false;
+        this.noglobstar = !!opts.noglobstar;
+        this.matchBase = !!opts.matchBase;
+        this.maxDepth = typeof opts.maxDepth === "number" ? opts.maxDepth : Infinity;
+        this.stat = !!opts.stat;
+        this.ignore = opts.ignore;
+        if (this.withFileTypes && this.absolute !== void 0) {
+          throw new Error("cannot set absolute and withFileTypes:true");
+        }
+        if (typeof pattern === "string") {
+          pattern = [pattern];
+        }
+        this.windowsPathsNoEscape = !!opts.windowsPathsNoEscape || opts.allowWindowsEscape === false;
+        if (this.windowsPathsNoEscape) {
+          pattern = pattern.map((p) => p.replace(/\\/g, "/"));
+        }
+        if (this.matchBase) {
+          if (opts.noglobstar) {
+            throw new TypeError("base matching requires globstar");
+          }
+          pattern = pattern.map((p) => p.includes("/") ? p : `./**/${p}`);
+        }
+        this.pattern = pattern;
+        this.platform = opts.platform || defaultPlatform;
+        this.opts = { ...opts, platform: this.platform };
+        if (opts.scurry) {
+          this.scurry = opts.scurry;
+          if (opts.nocase !== void 0 && opts.nocase !== opts.scurry.nocase) {
+            throw new Error("nocase option contradicts provided scurry option");
+          }
+        } else {
+          const Scurry = opts.platform === "win32" ? path_scurry_1.PathScurryWin32 : opts.platform === "darwin" ? path_scurry_1.PathScurryDarwin : opts.platform ? path_scurry_1.PathScurryPosix : path_scurry_1.PathScurry;
+          this.scurry = new Scurry(this.cwd, {
+            nocase: opts.nocase,
+            fs: opts.fs
+          });
+        }
+        this.nocase = this.scurry.nocase;
+        const nocaseMagicOnly = this.platform === "darwin" || this.platform === "win32";
+        const mmo = {
+          // default nocase based on platform
+          ...opts,
+          dot: this.dot,
+          matchBase: this.matchBase,
+          nobrace: this.nobrace,
+          nocase: this.nocase,
+          nocaseMagicOnly,
+          nocomment: true,
+          noext: this.noext,
+          nonegate: true,
+          optimizationLevel: 2,
+          platform: this.platform,
+          windowsPathsNoEscape: this.windowsPathsNoEscape,
+          debug: !!this.opts.debug
+        };
+        const mms = this.pattern.map((p) => new minimatch_1.Minimatch(p, mmo));
+        const [matchSet, globParts] = mms.reduce((set, m) => {
+          set[0].push(...m.set);
+          set[1].push(...m.globParts);
+          return set;
+        }, [[], []]);
+        this.patterns = matchSet.map((set, i) => {
+          const g = globParts[i];
+          if (!g)
+            throw new Error("invalid pattern object");
+          return new pattern_js_1.Pattern(set, g, 0, this.platform);
+        });
+      }
+      async walk() {
+        return [
+          ...await new walker_js_1.GlobWalker(this.patterns, this.scurry.cwd, {
+            ...this.opts,
+            maxDepth: this.maxDepth !== Infinity ? this.maxDepth + this.scurry.cwd.depth() : Infinity,
+            platform: this.platform,
+            nocase: this.nocase,
+            includeChildMatches: this.includeChildMatches
+          }).walk()
+        ];
+      }
+      walkSync() {
+        return [
+          ...new walker_js_1.GlobWalker(this.patterns, this.scurry.cwd, {
+            ...this.opts,
+            maxDepth: this.maxDepth !== Infinity ? this.maxDepth + this.scurry.cwd.depth() : Infinity,
+            platform: this.platform,
+            nocase: this.nocase,
+            includeChildMatches: this.includeChildMatches
+          }).walkSync()
+        ];
+      }
+      stream() {
+        return new walker_js_1.GlobStream(this.patterns, this.scurry.cwd, {
+          ...this.opts,
+          maxDepth: this.maxDepth !== Infinity ? this.maxDepth + this.scurry.cwd.depth() : Infinity,
+          platform: this.platform,
+          nocase: this.nocase,
+          includeChildMatches: this.includeChildMatches
+        }).stream();
+      }
+      streamSync() {
+        return new walker_js_1.GlobStream(this.patterns, this.scurry.cwd, {
+          ...this.opts,
+          maxDepth: this.maxDepth !== Infinity ? this.maxDepth + this.scurry.cwd.depth() : Infinity,
+          platform: this.platform,
+          nocase: this.nocase,
+          includeChildMatches: this.includeChildMatches
+        }).streamSync();
+      }
+      /**
+       * Default sync iteration function. Returns a Generator that
+       * iterates over the results.
+       */
+      iterateSync() {
+        return this.streamSync()[Symbol.iterator]();
+      }
+      [Symbol.iterator]() {
+        return this.iterateSync();
+      }
+      /**
+       * Default async iteration function. Returns an AsyncGenerator that
+       * iterates over the results.
+       */
+      iterate() {
+        return this.stream()[Symbol.asyncIterator]();
+      }
+      [Symbol.asyncIterator]() {
+        return this.iterate();
+      }
+    };
+    exports2.Glob = Glob;
+  }
+});
+
+// node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/has-magic.js
+var require_has_magic = __commonJS({
+  "node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/has-magic.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.hasMagic = void 0;
+    var minimatch_1 = require_commonjs4();
+    var hasMagic = /* @__PURE__ */ __name((pattern, options = {}) => {
+      if (!Array.isArray(pattern)) {
+        pattern = [pattern];
+      }
+      for (const p of pattern) {
+        if (new minimatch_1.Minimatch(p, options).hasMagic())
+          return true;
+      }
+      return false;
+    }, "hasMagic");
+    exports2.hasMagic = hasMagic;
+  }
+});
+
+// node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/index.js
+var require_commonjs7 = __commonJS({
+  "node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.glob = exports2.sync = exports2.iterate = exports2.iterateSync = exports2.stream = exports2.streamSync = exports2.Ignore = exports2.hasMagic = exports2.Glob = exports2.unescape = exports2.escape = void 0;
+    exports2.globStreamSync = globStreamSync;
+    exports2.globStream = globStream;
+    exports2.globSync = globSync;
+    exports2.globIterateSync = globIterateSync;
+    exports2.globIterate = globIterate;
+    var minimatch_1 = require_commonjs4();
+    var glob_js_1 = require_glob();
+    var has_magic_js_1 = require_has_magic();
+    var minimatch_2 = require_commonjs4();
+    Object.defineProperty(exports2, "escape", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return minimatch_2.escape;
+    }, "get") });
+    Object.defineProperty(exports2, "unescape", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return minimatch_2.unescape;
+    }, "get") });
+    var glob_js_2 = require_glob();
+    Object.defineProperty(exports2, "Glob", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return glob_js_2.Glob;
+    }, "get") });
+    var has_magic_js_2 = require_has_magic();
+    Object.defineProperty(exports2, "hasMagic", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return has_magic_js_2.hasMagic;
+    }, "get") });
+    var ignore_js_1 = require_ignore();
+    Object.defineProperty(exports2, "Ignore", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return ignore_js_1.Ignore;
+    }, "get") });
+    function globStreamSync(pattern, options = {}) {
+      return new glob_js_1.Glob(pattern, options).streamSync();
+    }
+    __name(globStreamSync, "globStreamSync");
+    function globStream(pattern, options = {}) {
+      return new glob_js_1.Glob(pattern, options).stream();
+    }
+    __name(globStream, "globStream");
+    function globSync(pattern, options = {}) {
+      return new glob_js_1.Glob(pattern, options).walkSync();
+    }
+    __name(globSync, "globSync");
+    async function glob_(pattern, options = {}) {
+      return new glob_js_1.Glob(pattern, options).walk();
+    }
+    __name(glob_, "glob_");
+    function globIterateSync(pattern, options = {}) {
+      return new glob_js_1.Glob(pattern, options).iterateSync();
+    }
+    __name(globIterateSync, "globIterateSync");
+    function globIterate(pattern, options = {}) {
+      return new glob_js_1.Glob(pattern, options).iterate();
+    }
+    __name(globIterate, "globIterate");
+    exports2.streamSync = globStreamSync;
+    exports2.stream = Object.assign(globStream, { sync: globStreamSync });
+    exports2.iterateSync = globIterateSync;
+    exports2.iterate = Object.assign(globIterate, {
+      sync: globIterateSync
+    });
+    exports2.sync = Object.assign(globSync, {
+      stream: globStreamSync,
+      iterate: globIterateSync
+    });
+    exports2.glob = Object.assign(glob_, {
+      glob: glob_,
+      globSync,
+      sync: exports2.sync,
+      globStream,
+      stream: exports2.stream,
+      globStreamSync,
+      streamSync: exports2.streamSync,
+      globIterate,
+      iterate: exports2.iterate,
+      globIterateSync,
+      iterateSync: exports2.iterateSync,
+      Glob: glob_js_1.Glob,
+      hasMagic: has_magic_js_1.hasMagic,
+      escape: minimatch_1.escape,
+      unescape: minimatch_1.unescape
+    });
+    exports2.glob.glob = exports2.glob;
+  }
+});
+
+// node_modules/.pnpm/spdx-license-ids@3.0.23/node_modules/spdx-license-ids/index.json
+var require_spdx_license_ids = __commonJS({
+  "node_modules/.pnpm/spdx-license-ids@3.0.23/node_modules/spdx-license-ids/index.json"(exports2, module2) {
+    module2.exports = [
+      "0BSD",
+      "3D-Slicer-1.0",
+      "AAL",
+      "ADSL",
+      "AFL-1.1",
+      "AFL-1.2",
+      "AFL-2.0",
+      "AFL-2.1",
+      "AFL-3.0",
+      "AGPL-1.0-only",
+      "AGPL-1.0-or-later",
+      "AGPL-3.0-only",
+      "AGPL-3.0-or-later",
+      "ALGLIB-Documentation",
+      "AMD-newlib",
+      "AMDPLPA",
+      "AML",
+      "AML-glslang",
+      "AMPAS",
+      "ANTLR-PD",
+      "ANTLR-PD-fallback",
+      "APAFML",
+      "APL-1.0",
+      "APSL-1.0",
+      "APSL-1.1",
+      "APSL-1.2",
+      "APSL-2.0",
+      "ASWF-Digital-Assets-1.0",
+      "ASWF-Digital-Assets-1.1",
+      "Abstyles",
+      "AdaCore-doc",
+      "Adobe-2006",
+      "Adobe-Display-PostScript",
+      "Adobe-Glyph",
+      "Adobe-Utopia",
+      "Advanced-Cryptics-Dictionary",
+      "Afmparse",
+      "Aladdin",
+      "Apache-1.0",
+      "Apache-1.1",
+      "Apache-2.0",
+      "App-s2p",
+      "Arphic-1999",
+      "Artistic-1.0",
+      "Artistic-1.0-Perl",
+      "Artistic-1.0-cl8",
+      "Artistic-2.0",
+      "Artistic-dist",
+      "Aspell-RU",
+      "BOLA-1.1",
+      "BSD-1-Clause",
+      "BSD-2-Clause",
+      "BSD-2-Clause-Darwin",
+      "BSD-2-Clause-Patent",
+      "BSD-2-Clause-Views",
+      "BSD-2-Clause-first-lines",
+      "BSD-2-Clause-pkgconf-disclaimer",
+      "BSD-3-Clause",
+      "BSD-3-Clause-Attribution",
+      "BSD-3-Clause-Clear",
+      "BSD-3-Clause-HP",
+      "BSD-3-Clause-LBNL",
+      "BSD-3-Clause-Modification",
+      "BSD-3-Clause-No-Military-License",
+      "BSD-3-Clause-No-Nuclear-License",
+      "BSD-3-Clause-No-Nuclear-License-2014",
+      "BSD-3-Clause-No-Nuclear-Warranty",
+      "BSD-3-Clause-Open-MPI",
+      "BSD-3-Clause-Sun",
+      "BSD-3-Clause-Tso",
+      "BSD-3-Clause-acpica",
+      "BSD-3-Clause-flex",
+      "BSD-4-Clause",
+      "BSD-4-Clause-Shortened",
+      "BSD-4-Clause-UC",
+      "BSD-4.3RENO",
+      "BSD-4.3TAHOE",
+      "BSD-Advertising-Acknowledgement",
+      "BSD-Attribution-HPND-disclaimer",
+      "BSD-Inferno-Nettverk",
+      "BSD-Mark-Modifications",
+      "BSD-Protection",
+      "BSD-Source-Code",
+      "BSD-Source-beginning-file",
+      "BSD-Systemics",
+      "BSD-Systemics-W3Works",
+      "BSL-1.0",
+      "BUSL-1.1",
+      "Baekmuk",
+      "Bahyph",
+      "Barr",
+      "Beerware",
+      "BitTorrent-1.0",
+      "BitTorrent-1.1",
+      "Bitstream-Charter",
+      "Bitstream-Vera",
+      "BlueOak-1.0.0",
+      "Boehm-GC",
+      "Boehm-GC-without-fee",
+      "Borceux",
+      "Brian-Gladman-2-Clause",
+      "Brian-Gladman-3-Clause",
+      "Buddy",
+      "C-UDA-1.0",
+      "CAL-1.0",
+      "CAL-1.0-Combined-Work-Exception",
+      "CAPEC-tou",
+      "CATOSL-1.1",
+      "CC-BY-1.0",
+      "CC-BY-2.0",
+      "CC-BY-2.5",
+      "CC-BY-2.5-AU",
+      "CC-BY-3.0",
+      "CC-BY-3.0-AT",
+      "CC-BY-3.0-AU",
+      "CC-BY-3.0-DE",
+      "CC-BY-3.0-IGO",
+      "CC-BY-3.0-NL",
+      "CC-BY-3.0-US",
+      "CC-BY-4.0",
+      "CC-BY-NC-1.0",
+      "CC-BY-NC-2.0",
+      "CC-BY-NC-2.5",
+      "CC-BY-NC-3.0",
+      "CC-BY-NC-3.0-DE",
+      "CC-BY-NC-4.0",
+      "CC-BY-NC-ND-1.0",
+      "CC-BY-NC-ND-2.0",
+      "CC-BY-NC-ND-2.5",
+      "CC-BY-NC-ND-3.0",
+      "CC-BY-NC-ND-3.0-DE",
+      "CC-BY-NC-ND-3.0-IGO",
+      "CC-BY-NC-ND-4.0",
+      "CC-BY-NC-SA-1.0",
+      "CC-BY-NC-SA-2.0",
+      "CC-BY-NC-SA-2.0-DE",
+      "CC-BY-NC-SA-2.0-FR",
+      "CC-BY-NC-SA-2.0-UK",
+      "CC-BY-NC-SA-2.5",
+      "CC-BY-NC-SA-3.0",
+      "CC-BY-NC-SA-3.0-DE",
+      "CC-BY-NC-SA-3.0-IGO",
+      "CC-BY-NC-SA-4.0",
+      "CC-BY-ND-1.0",
+      "CC-BY-ND-2.0",
+      "CC-BY-ND-2.5",
+      "CC-BY-ND-3.0",
+      "CC-BY-ND-3.0-DE",
+      "CC-BY-ND-4.0",
+      "CC-BY-SA-1.0",
+      "CC-BY-SA-2.0",
+      "CC-BY-SA-2.0-UK",
+      "CC-BY-SA-2.1-JP",
+      "CC-BY-SA-2.5",
+      "CC-BY-SA-3.0",
+      "CC-BY-SA-3.0-AT",
+      "CC-BY-SA-3.0-DE",
+      "CC-BY-SA-3.0-IGO",
+      "CC-BY-SA-4.0",
+      "CC-PDDC",
+      "CC-PDM-1.0",
+      "CC-SA-1.0",
+      "CC0-1.0",
+      "CDDL-1.0",
+      "CDDL-1.1",
+      "CDL-1.0",
+      "CDLA-Permissive-1.0",
+      "CDLA-Permissive-2.0",
+      "CDLA-Sharing-1.0",
+      "CECILL-1.0",
+      "CECILL-1.1",
+      "CECILL-2.0",
+      "CECILL-2.1",
+      "CECILL-B",
+      "CECILL-C",
+      "CERN-OHL-1.1",
+      "CERN-OHL-1.2",
+      "CERN-OHL-P-2.0",
+      "CERN-OHL-S-2.0",
+      "CERN-OHL-W-2.0",
+      "CFITSIO",
+      "CMU-Mach",
+      "CMU-Mach-nodoc",
+      "CNRI-Jython",
+      "CNRI-Python",
+      "CNRI-Python-GPL-Compatible",
+      "COIL-1.0",
+      "CPAL-1.0",
+      "CPL-1.0",
+      "CPOL-1.02",
+      "CUA-OPL-1.0",
+      "Caldera",
+      "Caldera-no-preamble",
+      "Catharon",
+      "ClArtistic",
+      "Clips",
+      "Community-Spec-1.0",
+      "Condor-1.1",
+      "Cornell-Lossless-JPEG",
+      "Cronyx",
+      "Crossword",
+      "CryptoSwift",
+      "CrystalStacker",
+      "Cube",
+      "D-FSL-1.0",
+      "DEC-3-Clause",
+      "DL-DE-BY-2.0",
+      "DL-DE-ZERO-2.0",
+      "DOC",
+      "DRL-1.0",
+      "DRL-1.1",
+      "DSDP",
+      "DocBook-DTD",
+      "DocBook-Schema",
+      "DocBook-Stylesheet",
+      "DocBook-XML",
+      "Dotseqn",
+      "ECL-1.0",
+      "ECL-2.0",
+      "EFL-1.0",
+      "EFL-2.0",
+      "EPICS",
+      "EPL-1.0",
+      "EPL-2.0",
+      "ESA-PL-permissive-2.4",
+      "ESA-PL-strong-copyleft-2.4",
+      "ESA-PL-weak-copyleft-2.4",
+      "EUDatagrid",
+      "EUPL-1.0",
+      "EUPL-1.1",
+      "EUPL-1.2",
+      "Elastic-2.0",
+      "Entessa",
+      "ErlPL-1.1",
+      "Eurosym",
+      "FBM",
+      "FDK-AAC",
+      "FSFAP",
+      "FSFAP-no-warranty-disclaimer",
+      "FSFUL",
+      "FSFULLR",
+      "FSFULLRSD",
+      "FSFULLRWD",
+      "FSL-1.1-ALv2",
+      "FSL-1.1-MIT",
+      "FTL",
+      "Fair",
+      "Ferguson-Twofish",
+      "Frameworx-1.0",
+      "FreeBSD-DOC",
+      "FreeImage",
+      "Furuseth",
+      "GCR-docs",
+      "GD",
+      "GFDL-1.1-invariants-only",
+      "GFDL-1.1-invariants-or-later",
+      "GFDL-1.1-no-invariants-only",
+      "GFDL-1.1-no-invariants-or-later",
+      "GFDL-1.1-only",
+      "GFDL-1.1-or-later",
+      "GFDL-1.2-invariants-only",
+      "GFDL-1.2-invariants-or-later",
+      "GFDL-1.2-no-invariants-only",
+      "GFDL-1.2-no-invariants-or-later",
+      "GFDL-1.2-only",
+      "GFDL-1.2-or-later",
+      "GFDL-1.3-invariants-only",
+      "GFDL-1.3-invariants-or-later",
+      "GFDL-1.3-no-invariants-only",
+      "GFDL-1.3-no-invariants-or-later",
+      "GFDL-1.3-only",
+      "GFDL-1.3-or-later",
+      "GL2PS",
+      "GLWTPL",
+      "GPL-1.0-only",
+      "GPL-1.0-or-later",
+      "GPL-2.0-only",
+      "GPL-2.0-or-later",
+      "GPL-3.0-only",
+      "GPL-3.0-or-later",
+      "Game-Programming-Gems",
+      "Giftware",
+      "Glide",
+      "Glulxe",
+      "Graphics-Gems",
+      "Gutmann",
+      "HDF5",
+      "HIDAPI",
+      "HP-1986",
+      "HP-1989",
+      "HPND",
+      "HPND-DEC",
+      "HPND-Fenneberg-Livingston",
+      "HPND-INRIA-IMAG",
+      "HPND-Intel",
+      "HPND-Kevlin-Henney",
+      "HPND-MIT-disclaimer",
+      "HPND-Markus-Kuhn",
+      "HPND-Netrek",
+      "HPND-Pbmplus",
+      "HPND-SMC",
+      "HPND-UC",
+      "HPND-UC-export-US",
+      "HPND-doc",
+      "HPND-doc-sell",
+      "HPND-export-US",
+      "HPND-export-US-acknowledgement",
+      "HPND-export-US-modify",
+      "HPND-export2-US",
+      "HPND-merchantability-variant",
+      "HPND-sell-MIT-disclaimer-xserver",
+      "HPND-sell-regexpr",
+      "HPND-sell-variant",
+      "HPND-sell-variant-MIT-disclaimer",
+      "HPND-sell-variant-MIT-disclaimer-rev",
+      "HPND-sell-variant-critical-systems",
+      "HTMLTIDY",
+      "HaskellReport",
+      "Hippocratic-2.1",
+      "IBM-pibs",
+      "ICU",
+      "IEC-Code-Components-EULA",
+      "IJG",
+      "IJG-short",
+      "IPA",
+      "IPL-1.0",
+      "ISC",
+      "ISC-Veillard",
+      "ISO-permission",
+      "ImageMagick",
+      "Imlib2",
+      "Info-ZIP",
+      "Inner-Net-2.0",
+      "InnoSetup",
+      "Intel",
+      "Intel-ACPI",
+      "Interbase-1.0",
+      "JPL-image",
+      "JPNIC",
+      "JSON",
+      "Jam",
+      "JasPer-2.0",
+      "Kastrup",
+      "Kazlib",
+      "Knuth-CTAN",
+      "LAL-1.2",
+      "LAL-1.3",
+      "LGPL-2.0-only",
+      "LGPL-2.0-or-later",
+      "LGPL-2.1-only",
+      "LGPL-2.1-or-later",
+      "LGPL-3.0-only",
+      "LGPL-3.0-or-later",
+      "LGPLLR",
+      "LOOP",
+      "LPD-document",
+      "LPL-1.0",
+      "LPL-1.02",
+      "LPPL-1.0",
+      "LPPL-1.1",
+      "LPPL-1.2",
+      "LPPL-1.3a",
+      "LPPL-1.3c",
+      "LZMA-SDK-9.11-to-9.20",
+      "LZMA-SDK-9.22",
+      "Latex2e",
+      "Latex2e-translated-notice",
+      "Leptonica",
+      "LiLiQ-P-1.1",
+      "LiLiQ-R-1.1",
+      "LiLiQ-Rplus-1.1",
+      "Libpng",
+      "Linux-OpenIB",
+      "Linux-man-pages-1-para",
+      "Linux-man-pages-copyleft",
+      "Linux-man-pages-copyleft-2-para",
+      "Linux-man-pages-copyleft-var",
+      "Lucida-Bitmap-Fonts",
+      "MIPS",
+      "MIT",
+      "MIT-0",
+      "MIT-CMU",
+      "MIT-Click",
+      "MIT-Festival",
+      "MIT-Khronos-old",
+      "MIT-Modern-Variant",
+      "MIT-STK",
+      "MIT-Wu",
+      "MIT-advertising",
+      "MIT-enna",
+      "MIT-feh",
+      "MIT-open-group",
+      "MIT-testregex",
+      "MITNFA",
+      "MMIXware",
+      "MMPL-1.0.1",
+      "MPEG-SSG",
+      "MPL-1.0",
+      "MPL-1.1",
+      "MPL-2.0",
+      "MPL-2.0-no-copyleft-exception",
+      "MS-LPL",
+      "MS-PL",
+      "MS-RL",
+      "MTLL",
+      "Mackerras-3-Clause",
+      "Mackerras-3-Clause-acknowledgment",
+      "MakeIndex",
+      "Martin-Birgmeier",
+      "McPhee-slideshow",
+      "Minpack",
+      "MirOS",
+      "Motosoto",
+      "MulanPSL-1.0",
+      "MulanPSL-2.0",
+      "Multics",
+      "Mup",
+      "NAIST-2003",
+      "NASA-1.3",
+      "NBPL-1.0",
+      "NCBI-PD",
+      "NCGL-UK-2.0",
+      "NCL",
+      "NCSA",
+      "NGPL",
+      "NICTA-1.0",
+      "NIST-PD",
+      "NIST-PD-TNT",
+      "NIST-PD-fallback",
+      "NIST-Software",
+      "NLOD-1.0",
+      "NLOD-2.0",
+      "NLPL",
+      "NOSL",
+      "NPL-1.0",
+      "NPL-1.1",
+      "NPOSL-3.0",
+      "NRL",
+      "NTIA-PD",
+      "NTP",
+      "NTP-0",
+      "Naumen",
+      "NetCDF",
+      "Newsletr",
+      "Nokia",
+      "Noweb",
+      "O-UDA-1.0",
+      "OAR",
+      "OCCT-PL",
+      "OCLC-2.0",
+      "ODC-By-1.0",
+      "ODbL-1.0",
+      "OFFIS",
+      "OFL-1.0",
+      "OFL-1.0-RFN",
+      "OFL-1.0-no-RFN",
+      "OFL-1.1",
+      "OFL-1.1-RFN",
+      "OFL-1.1-no-RFN",
+      "OGC-1.0",
+      "OGDL-Taiwan-1.0",
+      "OGL-Canada-2.0",
+      "OGL-UK-1.0",
+      "OGL-UK-2.0",
+      "OGL-UK-3.0",
+      "OGTSL",
+      "OLDAP-1.1",
+      "OLDAP-1.2",
+      "OLDAP-1.3",
+      "OLDAP-1.4",
+      "OLDAP-2.0",
+      "OLDAP-2.0.1",
+      "OLDAP-2.1",
+      "OLDAP-2.2",
+      "OLDAP-2.2.1",
+      "OLDAP-2.2.2",
+      "OLDAP-2.3",
+      "OLDAP-2.4",
+      "OLDAP-2.5",
+      "OLDAP-2.6",
+      "OLDAP-2.7",
+      "OLDAP-2.8",
+      "OLFL-1.3",
+      "OML",
+      "OPL-1.0",
+      "OPL-UK-3.0",
+      "OPUBL-1.0",
+      "OSC-1.0",
+      "OSET-PL-2.1",
+      "OSL-1.0",
+      "OSL-1.1",
+      "OSL-2.0",
+      "OSL-2.1",
+      "OSL-3.0",
+      "OSSP",
+      "OpenMDW-1.0",
+      "OpenPBS-2.3",
+      "OpenSSL",
+      "OpenSSL-standalone",
+      "OpenVision",
+      "PADL",
+      "PDDL-1.0",
+      "PHP-3.0",
+      "PHP-3.01",
+      "PPL",
+      "PSF-2.0",
+      "ParaType-Free-Font-1.3",
+      "Parity-6.0.0",
+      "Parity-7.0.0",
+      "Pixar",
+      "Plexus",
+      "PolyForm-Noncommercial-1.0.0",
+      "PolyForm-Small-Business-1.0.0",
+      "PostgreSQL",
+      "Python-2.0",
+      "Python-2.0.1",
+      "QPL-1.0",
+      "QPL-1.0-INRIA-2004",
+      "Qhull",
+      "RHeCos-1.1",
+      "RPL-1.1",
+      "RPL-1.5",
+      "RPSL-1.0",
+      "RSA-MD",
+      "RSCPL",
+      "Rdisc",
+      "Ruby",
+      "Ruby-pty",
+      "SAX-PD",
+      "SAX-PD-2.0",
+      "SCEA",
+      "SGI-B-1.0",
+      "SGI-B-1.1",
+      "SGI-B-2.0",
+      "SGI-OpenGL",
+      "SGMLUG-PM",
+      "SGP4",
+      "SHL-0.5",
+      "SHL-0.51",
+      "SISSL",
+      "SISSL-1.2",
+      "SL",
+      "SMAIL-GPL",
+      "SMLNJ",
+      "SMPPL",
+      "SNIA",
+      "SOFA",
+      "SPL-1.0",
+      "SSH-OpenSSH",
+      "SSH-short",
+      "SSLeay-standalone",
+      "SSPL-1.0",
+      "SUL-1.0",
+      "SWL",
+      "Saxpath",
+      "SchemeReport",
+      "Sendmail",
+      "Sendmail-8.23",
+      "Sendmail-Open-Source-1.1",
+      "SimPL-2.0",
+      "Sleepycat",
+      "Soundex",
+      "Spencer-86",
+      "Spencer-94",
+      "Spencer-99",
+      "SugarCRM-1.1.3",
+      "Sun-PPP",
+      "Sun-PPP-2000",
+      "SunPro",
+      "Symlinks",
+      "TAPR-OHL-1.0",
+      "TCL",
+      "TCP-wrappers",
+      "TGPPL-1.0",
+      "TMate",
+      "TORQUE-1.1",
+      "TOSL",
+      "TPDL",
+      "TPL-1.0",
+      "TTWL",
+      "TTYP0",
+      "TU-Berlin-1.0",
+      "TU-Berlin-2.0",
+      "TekHVC",
+      "TermReadKey",
+      "ThirdEye",
+      "TrustedQSL",
+      "UCAR",
+      "UCL-1.0",
+      "UMich-Merit",
+      "UPL-1.0",
+      "URT-RLE",
+      "Ubuntu-font-1.0",
+      "UnRAR",
+      "Unicode-3.0",
+      "Unicode-DFS-2015",
+      "Unicode-DFS-2016",
+      "Unicode-TOU",
+      "UnixCrypt",
+      "Unlicense",
+      "Unlicense-libtelnet",
+      "Unlicense-libwhirlpool",
+      "VOSTROM",
+      "VSL-1.0",
+      "Vim",
+      "Vixie-Cron",
+      "W3C",
+      "W3C-19980720",
+      "W3C-20150513",
+      "WTFNMFPL",
+      "WTFPL",
+      "Watcom-1.0",
+      "Widget-Workshop",
+      "WordNet",
+      "Wsuipa",
+      "X11",
+      "X11-distribute-modifications-variant",
+      "X11-no-permit-persons",
+      "X11-swapped",
+      "XFree86-1.1",
+      "XSkat",
+      "Xdebug-1.03",
+      "Xerox",
+      "Xfig",
+      "Xnet",
+      "YPL-1.0",
+      "YPL-1.1",
+      "ZPL-1.1",
+      "ZPL-2.0",
+      "ZPL-2.1",
+      "Zed",
+      "Zeeff",
+      "Zend-2.0",
+      "Zimbra-1.3",
+      "Zimbra-1.4",
+      "Zlib",
+      "any-OSI",
+      "any-OSI-perl-modules",
+      "bcrypt-Solar-Designer",
+      "blessing",
+      "bzip2-1.0.6",
+      "check-cvs",
+      "checkmk",
+      "copyleft-next-0.3.0",
+      "copyleft-next-0.3.1",
+      "curl",
+      "cve-tou",
+      "diffmark",
+      "dtoa",
+      "dvipdfm",
+      "eGenix",
+      "etalab-2.0",
+      "fwlw",
+      "gSOAP-1.3b",
+      "generic-xts",
+      "gnuplot",
+      "gtkbook",
+      "hdparm",
+      "hyphen-bulgarian",
+      "iMatix",
+      "jove",
+      "libpng-1.6.35",
+      "libpng-2.0",
+      "libselinux-1.0",
+      "libtiff",
+      "libutil-David-Nugent",
+      "lsof",
+      "magaz",
+      "mailprio",
+      "man2html",
+      "metamail",
+      "mpi-permissive",
+      "mpich2",
+      "mplus",
+      "ngrep",
+      "pkgconf",
+      "pnmstitch",
+      "psfrag",
+      "psutils",
+      "python-ldap",
+      "radvd",
+      "snprintf",
+      "softSurfer",
+      "ssh-keyscan",
+      "swrule",
+      "threeparttable",
+      "ulem",
+      "w3m",
+      "wwl",
+      "xinetd",
+      "xkeyboard-config-Zinoviev",
+      "xlock",
+      "xpp",
+      "xzoom",
+      "zlib-acknowledgement"
+    ];
+  }
+});
+
+// node_modules/.pnpm/spdx-license-ids@3.0.23/node_modules/spdx-license-ids/deprecated.json
+var require_deprecated = __commonJS({
+  "node_modules/.pnpm/spdx-license-ids@3.0.23/node_modules/spdx-license-ids/deprecated.json"(exports2, module2) {
+    module2.exports = [
+      "AGPL-1.0",
+      "AGPL-3.0",
+      "BSD-2-Clause-FreeBSD",
+      "BSD-2-Clause-NetBSD",
+      "GFDL-1.1",
+      "GFDL-1.2",
+      "GFDL-1.3",
+      "GPL-1.0",
+      "GPL-2.0",
+      "GPL-2.0-with-GCC-exception",
+      "GPL-2.0-with-autoconf-exception",
+      "GPL-2.0-with-bison-exception",
+      "GPL-2.0-with-classpath-exception",
+      "GPL-2.0-with-font-exception",
+      "GPL-3.0",
+      "GPL-3.0-with-GCC-exception",
+      "GPL-3.0-with-autoconf-exception",
+      "LGPL-2.0",
+      "LGPL-2.1",
+      "LGPL-3.0",
+      "Net-SNMP",
+      "Nunit",
+      "StandardML-NJ",
+      "bzip2-1.0.5",
+      "eCos-2.0",
+      "wxWindows"
+    ];
+  }
+});
+
+// node_modules/.pnpm/spdx-exceptions@2.5.0/node_modules/spdx-exceptions/index.json
+var require_spdx_exceptions = __commonJS({
+  "node_modules/.pnpm/spdx-exceptions@2.5.0/node_modules/spdx-exceptions/index.json"(exports2, module2) {
+    module2.exports = [
+      "389-exception",
+      "Asterisk-exception",
+      "Autoconf-exception-2.0",
+      "Autoconf-exception-3.0",
+      "Autoconf-exception-generic",
+      "Autoconf-exception-generic-3.0",
+      "Autoconf-exception-macro",
+      "Bison-exception-1.24",
+      "Bison-exception-2.2",
+      "Bootloader-exception",
+      "Classpath-exception-2.0",
+      "CLISP-exception-2.0",
+      "cryptsetup-OpenSSL-exception",
+      "DigiRule-FOSS-exception",
+      "eCos-exception-2.0",
+      "Fawkes-Runtime-exception",
+      "FLTK-exception",
+      "fmt-exception",
+      "Font-exception-2.0",
+      "freertos-exception-2.0",
+      "GCC-exception-2.0",
+      "GCC-exception-2.0-note",
+      "GCC-exception-3.1",
+      "Gmsh-exception",
+      "GNAT-exception",
+      "GNOME-examples-exception",
+      "GNU-compiler-exception",
+      "gnu-javamail-exception",
+      "GPL-3.0-interface-exception",
+      "GPL-3.0-linking-exception",
+      "GPL-3.0-linking-source-exception",
+      "GPL-CC-1.0",
+      "GStreamer-exception-2005",
+      "GStreamer-exception-2008",
+      "i2p-gpl-java-exception",
+      "KiCad-libraries-exception",
+      "LGPL-3.0-linking-exception",
+      "libpri-OpenH323-exception",
+      "Libtool-exception",
+      "Linux-syscall-note",
+      "LLGPL",
+      "LLVM-exception",
+      "LZMA-exception",
+      "mif-exception",
+      "OCaml-LGPL-linking-exception",
+      "OCCT-exception-1.0",
+      "OpenJDK-assembly-exception-1.0",
+      "openvpn-openssl-exception",
+      "PS-or-PDF-font-exception-20170817",
+      "QPL-1.0-INRIA-2004-exception",
+      "Qt-GPL-exception-1.0",
+      "Qt-LGPL-exception-1.1",
+      "Qwt-exception-1.0",
+      "SANE-exception",
+      "SHL-2.0",
+      "SHL-2.1",
+      "stunnel-exception",
+      "SWI-exception",
+      "Swift-exception",
+      "Texinfo-exception",
+      "u-boot-exception-2.0",
+      "UBDL-exception",
+      "Universal-FOSS-exception-1.0",
+      "vsftpd-openssl-exception",
+      "WxWindows-exception-3.1",
+      "x11vnc-openssl-exception"
+    ];
+  }
+});
+
+// node_modules/.pnpm/spdx-expression-parse@4.0.0/node_modules/spdx-expression-parse/scan.js
+var require_scan = __commonJS({
+  "node_modules/.pnpm/spdx-expression-parse@4.0.0/node_modules/spdx-expression-parse/scan.js"(exports2, module2) {
+    "use strict";
+    var licenses = [].concat(require_spdx_license_ids()).concat(require_deprecated());
+    var exceptions = require_spdx_exceptions();
+    module2.exports = function(source) {
+      var index = 0;
+      function hasMore() {
+        return index < source.length;
+      }
+      __name(hasMore, "hasMore");
+      function read(value) {
+        if (value instanceof RegExp) {
+          var chars = source.slice(index);
+          var match = chars.match(value);
+          if (match) {
+            index += match[0].length;
+            return match[0];
+          }
+        } else {
+          if (source.indexOf(value, index) === index) {
+            index += value.length;
+            return value;
+          }
+        }
+      }
+      __name(read, "read");
+      function skipWhitespace() {
+        read(/[ ]*/);
+      }
+      __name(skipWhitespace, "skipWhitespace");
+      function operator() {
+        var string;
+        var possibilities = [/^WITH/i, /^AND/i, /^OR/i, "(", ")", ":", "+"];
+        for (var i = 0; i < possibilities.length; i++) {
+          string = read(possibilities[i]);
+          if (string) {
+            break;
+          }
+        }
+        if (string === "+" && index > 1 && source[index - 2] === " ") {
+          throw new Error("Space before `+`");
+        }
+        return string && {
+          type: "OPERATOR",
+          string: string.toUpperCase()
+        };
+      }
+      __name(operator, "operator");
+      function idstring() {
+        return read(/[A-Za-z0-9-.]+/);
+      }
+      __name(idstring, "idstring");
+      function expectIdstring() {
+        var string = idstring();
+        if (!string) {
+          throw new Error("Expected idstring at offset " + index);
+        }
+        return string;
+      }
+      __name(expectIdstring, "expectIdstring");
+      function documentRef() {
+        if (read("DocumentRef-")) {
+          var string = expectIdstring();
+          return { type: "DOCUMENTREF", string };
+        }
+      }
+      __name(documentRef, "documentRef");
+      function licenseRef() {
+        if (read("LicenseRef-")) {
+          var string = expectIdstring();
+          return { type: "LICENSEREF", string };
+        }
+      }
+      __name(licenseRef, "licenseRef");
+      function identifier() {
+        var begin = index;
+        var string = idstring();
+        if (licenses.indexOf(string) !== -1) {
+          return {
+            type: "LICENSE",
+            string
+          };
+        } else if (exceptions.indexOf(string) !== -1) {
+          return {
+            type: "EXCEPTION",
+            string
+          };
+        }
+        index = begin;
+      }
+      __name(identifier, "identifier");
+      function parseToken() {
+        return operator() || documentRef() || licenseRef() || identifier();
+      }
+      __name(parseToken, "parseToken");
+      var tokens = [];
+      while (hasMore()) {
+        skipWhitespace();
+        if (!hasMore()) {
+          break;
+        }
+        var token = parseToken();
+        if (!token) {
+          throw new Error("Unexpected `" + source[index] + "` at offset " + index);
+        }
+        tokens.push(token);
+      }
+      return tokens;
+    };
+  }
+});
+
+// node_modules/.pnpm/spdx-expression-parse@4.0.0/node_modules/spdx-expression-parse/parse.js
+var require_parse2 = __commonJS({
+  "node_modules/.pnpm/spdx-expression-parse@4.0.0/node_modules/spdx-expression-parse/parse.js"(exports2, module2) {
+    "use strict";
+    module2.exports = function(tokens) {
+      var index = 0;
+      function hasMore() {
+        return index < tokens.length;
+      }
+      __name(hasMore, "hasMore");
+      function token() {
+        return hasMore() ? tokens[index] : null;
+      }
+      __name(token, "token");
+      function next() {
+        if (!hasMore()) {
+          throw new Error();
+        }
+        index++;
+      }
+      __name(next, "next");
+      function parseOperator(operator) {
+        var t = token();
+        if (t && t.type === "OPERATOR" && operator === t.string) {
+          next();
+          return t.string;
+        }
+      }
+      __name(parseOperator, "parseOperator");
+      function parseWith() {
+        if (parseOperator("WITH")) {
+          var t = token();
+          if (t && t.type === "EXCEPTION") {
+            next();
+            return t.string;
+          }
+          throw new Error("Expected exception after `WITH`");
+        }
+      }
+      __name(parseWith, "parseWith");
+      function parseLicenseRef() {
+        var begin = index;
+        var string = "";
+        var t = token();
+        if (t.type === "DOCUMENTREF") {
+          next();
+          string += "DocumentRef-" + t.string + ":";
+          if (!parseOperator(":")) {
+            throw new Error("Expected `:` after `DocumentRef-...`");
+          }
+        }
+        t = token();
+        if (t.type === "LICENSEREF") {
+          next();
+          string += "LicenseRef-" + t.string;
+          return { license: string };
+        }
+        index = begin;
+      }
+      __name(parseLicenseRef, "parseLicenseRef");
+      function parseLicense() {
+        var t = token();
+        if (t && t.type === "LICENSE") {
+          next();
+          var node2 = { license: t.string };
+          if (parseOperator("+")) {
+            node2.plus = true;
+          }
+          var exception = parseWith();
+          if (exception) {
+            node2.exception = exception;
+          }
+          return node2;
+        }
+      }
+      __name(parseLicense, "parseLicense");
+      function parseParenthesizedExpression() {
+        var left = parseOperator("(");
+        if (!left) {
+          return;
+        }
+        var expr = parseExpression();
+        if (!parseOperator(")")) {
+          throw new Error("Expected `)`");
+        }
+        return expr;
+      }
+      __name(parseParenthesizedExpression, "parseParenthesizedExpression");
+      function parseAtom() {
+        return parseParenthesizedExpression() || parseLicenseRef() || parseLicense();
+      }
+      __name(parseAtom, "parseAtom");
+      function makeBinaryOpParser(operator, nextParser) {
+        return /* @__PURE__ */ __name(function parseBinaryOp() {
+          var left = nextParser();
+          if (!left) {
+            return;
+          }
+          if (!parseOperator(operator)) {
+            return left;
+          }
+          var right = parseBinaryOp();
+          if (!right) {
+            throw new Error("Expected expression");
+          }
+          return {
+            left,
+            conjunction: operator.toLowerCase(),
+            right
+          };
+        }, "parseBinaryOp");
+      }
+      __name(makeBinaryOpParser, "makeBinaryOpParser");
+      var parseAnd = makeBinaryOpParser("AND", parseAtom);
+      var parseExpression = makeBinaryOpParser("OR", parseAnd);
+      var node = parseExpression();
+      if (!node || hasMore()) {
+        throw new Error("Syntax error");
+      }
+      return node;
+    };
+  }
+});
+
+// node_modules/.pnpm/spdx-expression-parse@4.0.0/node_modules/spdx-expression-parse/index.js
+var require_spdx_expression_parse = __commonJS({
+  "node_modules/.pnpm/spdx-expression-parse@4.0.0/node_modules/spdx-expression-parse/index.js"(exports2, module2) {
+    "use strict";
+    var scan = require_scan();
+    var parse = require_parse2();
+    module2.exports = function(source) {
+      return parse(scan(source));
+    };
+  }
+});
+
+// node_modules/.pnpm/spdx-correct@3.2.0/node_modules/spdx-correct/index.js
+var require_spdx_correct = __commonJS({
+  "node_modules/.pnpm/spdx-correct@3.2.0/node_modules/spdx-correct/index.js"(exports2, module2) {
+    var parse = require_spdx_expression_parse();
+    var spdxLicenseIds = require_spdx_license_ids();
+    function valid(string) {
+      try {
+        parse(string);
+        return true;
+      } catch (error) {
+        return false;
+      }
+    }
+    __name(valid, "valid");
+    function sortTranspositions(a, b) {
+      var length = b[0].length - a[0].length;
+      if (length !== 0) return length;
+      return a[0].toUpperCase().localeCompare(b[0].toUpperCase());
+    }
+    __name(sortTranspositions, "sortTranspositions");
+    var transpositions = [
+      ["APGL", "AGPL"],
+      ["Gpl", "GPL"],
+      ["GLP", "GPL"],
+      ["APL", "Apache"],
+      ["ISD", "ISC"],
+      ["GLP", "GPL"],
+      ["IST", "ISC"],
+      ["Claude", "Clause"],
+      [" or later", "+"],
+      [" International", ""],
+      ["GNU", "GPL"],
+      ["GUN", "GPL"],
+      ["+", ""],
+      ["GNU GPL", "GPL"],
+      ["GNU LGPL", "LGPL"],
+      ["GNU/GPL", "GPL"],
+      ["GNU GLP", "GPL"],
+      ["GNU LESSER GENERAL PUBLIC LICENSE", "LGPL"],
+      ["GNU Lesser General Public License", "LGPL"],
+      ["GNU LESSER GENERAL PUBLIC LICENSE", "LGPL-2.1"],
+      ["GNU Lesser General Public License", "LGPL-2.1"],
+      ["LESSER GENERAL PUBLIC LICENSE", "LGPL"],
+      ["Lesser General Public License", "LGPL"],
+      ["LESSER GENERAL PUBLIC LICENSE", "LGPL-2.1"],
+      ["Lesser General Public License", "LGPL-2.1"],
+      ["GNU General Public License", "GPL"],
+      ["Gnu public license", "GPL"],
+      ["GNU Public License", "GPL"],
+      ["GNU GENERAL PUBLIC LICENSE", "GPL"],
+      ["MTI", "MIT"],
+      ["Mozilla Public License", "MPL"],
+      ["Universal Permissive License", "UPL"],
+      ["WTH", "WTF"],
+      ["WTFGPL", "WTFPL"],
+      ["-License", ""]
+    ].sort(sortTranspositions);
+    var TRANSPOSED = 0;
+    var CORRECT = 1;
+    var transforms = [
+      // e.g. 'mit'
+      function(argument) {
+        return argument.toUpperCase();
+      },
+      // e.g. 'MIT '
+      function(argument) {
+        return argument.trim();
+      },
+      // e.g. 'M.I.T.'
+      function(argument) {
+        return argument.replace(/\./g, "");
+      },
+      // e.g. 'Apache- 2.0'
+      function(argument) {
+        return argument.replace(/\s+/g, "");
+      },
+      // e.g. 'CC BY 4.0''
+      function(argument) {
+        return argument.replace(/\s+/g, "-");
+      },
+      // e.g. 'LGPLv2.1'
+      function(argument) {
+        return argument.replace("v", "-");
+      },
+      // e.g. 'Apache 2.0'
+      function(argument) {
+        return argument.replace(/,?\s*(\d)/, "-$1");
+      },
+      // e.g. 'GPL 2'
+      function(argument) {
+        return argument.replace(/,?\s*(\d)/, "-$1.0");
+      },
+      // e.g. 'Apache Version 2.0'
+      function(argument) {
+        return argument.replace(/,?\s*(V\.|v\.|V|v|Version|version)\s*(\d)/, "-$2");
+      },
+      // e.g. 'Apache Version 2'
+      function(argument) {
+        return argument.replace(/,?\s*(V\.|v\.|V|v|Version|version)\s*(\d)/, "-$2.0");
+      },
+      // e.g. 'ZLIB'
+      function(argument) {
+        return argument[0].toUpperCase() + argument.slice(1);
+      },
+      // e.g. 'MPL/2.0'
+      function(argument) {
+        return argument.replace("/", "-");
+      },
+      // e.g. 'Apache 2'
+      function(argument) {
+        return argument.replace(/\s*V\s*(\d)/, "-$1").replace(/(\d)$/, "$1.0");
+      },
+      // e.g. 'GPL-2.0', 'GPL-3.0'
+      function(argument) {
+        if (argument.indexOf("3.0") !== -1) {
+          return argument + "-or-later";
+        } else {
+          return argument + "-only";
+        }
+      },
+      // e.g. 'GPL-2.0-'
+      function(argument) {
+        return argument + "only";
+      },
+      // e.g. 'GPL2'
+      function(argument) {
+        return argument.replace(/(\d)$/, "-$1.0");
+      },
+      // e.g. 'BSD 3'
+      function(argument) {
+        return argument.replace(/(-| )?(\d)$/, "-$2-Clause");
+      },
+      // e.g. 'BSD clause 3'
+      function(argument) {
+        return argument.replace(/(-| )clause(-| )(\d)/, "-$3-Clause");
+      },
+      // e.g. 'New BSD license'
+      function(argument) {
+        return argument.replace(/\b(Modified|New|Revised)(-| )?BSD((-| )License)?/i, "BSD-3-Clause");
+      },
+      // e.g. 'Simplified BSD license'
+      function(argument) {
+        return argument.replace(/\bSimplified(-| )?BSD((-| )License)?/i, "BSD-2-Clause");
+      },
+      // e.g. 'Free BSD license'
+      function(argument) {
+        return argument.replace(/\b(Free|Net)(-| )?BSD((-| )License)?/i, "BSD-2-Clause-$1BSD");
+      },
+      // e.g. 'Clear BSD license'
+      function(argument) {
+        return argument.replace(/\bClear(-| )?BSD((-| )License)?/i, "BSD-3-Clause-Clear");
+      },
+      // e.g. 'Old BSD License'
+      function(argument) {
+        return argument.replace(/\b(Old|Original)(-| )?BSD((-| )License)?/i, "BSD-4-Clause");
+      },
+      // e.g. 'BY-NC-4.0'
+      function(argument) {
+        return "CC-" + argument;
+      },
+      // e.g. 'BY-NC'
+      function(argument) {
+        return "CC-" + argument + "-4.0";
+      },
+      // e.g. 'Attribution-NonCommercial'
+      function(argument) {
+        return argument.replace("Attribution", "BY").replace("NonCommercial", "NC").replace("NoDerivatives", "ND").replace(/ (\d)/, "-$1").replace(/ ?International/, "");
+      },
+      // e.g. 'Attribution-NonCommercial'
+      function(argument) {
+        return "CC-" + argument.replace("Attribution", "BY").replace("NonCommercial", "NC").replace("NoDerivatives", "ND").replace(/ (\d)/, "-$1").replace(/ ?International/, "") + "-4.0";
+      }
+    ];
+    var licensesWithVersions = spdxLicenseIds.map(function(id) {
+      var match = /^(.*)-\d+\.\d+$/.exec(id);
+      return match ? [match[0], match[1]] : [id, null];
+    }).reduce(function(objectMap, item) {
+      var key = item[1];
+      objectMap[key] = objectMap[key] || [];
+      objectMap[key].push(item[0]);
+      return objectMap;
+    }, {});
+    var licensesWithOneVersion = Object.keys(licensesWithVersions).map(/* @__PURE__ */ __name(function makeEntries(key) {
+      return [key, licensesWithVersions[key]];
+    }, "makeEntries")).filter(/* @__PURE__ */ __name(function identifySoleVersions(item) {
+      return (
+        // Licenses has just one valid version suffix.
+        item[1].length === 1 && item[0] !== null && // APL will be considered Apache, rather than APL-1.0
+        item[0] !== "APL"
+      );
+    }, "identifySoleVersions")).map(/* @__PURE__ */ __name(function createLastResorts(item) {
+      return [item[0], item[1][0]];
+    }, "createLastResorts"));
+    licensesWithVersions = void 0;
+    var lastResorts = [
+      ["UNLI", "Unlicense"],
+      ["WTF", "WTFPL"],
+      ["2 CLAUSE", "BSD-2-Clause"],
+      ["2-CLAUSE", "BSD-2-Clause"],
+      ["3 CLAUSE", "BSD-3-Clause"],
+      ["3-CLAUSE", "BSD-3-Clause"],
+      ["AFFERO", "AGPL-3.0-or-later"],
+      ["AGPL", "AGPL-3.0-or-later"],
+      ["APACHE", "Apache-2.0"],
+      ["ARTISTIC", "Artistic-2.0"],
+      ["Affero", "AGPL-3.0-or-later"],
+      ["BEER", "Beerware"],
+      ["BOOST", "BSL-1.0"],
+      ["BSD", "BSD-2-Clause"],
+      ["CDDL", "CDDL-1.1"],
+      ["ECLIPSE", "EPL-1.0"],
+      ["FUCK", "WTFPL"],
+      ["GNU", "GPL-3.0-or-later"],
+      ["LGPL", "LGPL-3.0-or-later"],
+      ["GPLV1", "GPL-1.0-only"],
+      ["GPL-1", "GPL-1.0-only"],
+      ["GPLV2", "GPL-2.0-only"],
+      ["GPL-2", "GPL-2.0-only"],
+      ["GPL", "GPL-3.0-or-later"],
+      ["MIT +NO-FALSE-ATTRIBS", "MITNFA"],
+      ["MIT", "MIT"],
+      ["MPL", "MPL-2.0"],
+      ["X11", "X11"],
+      ["ZLIB", "Zlib"]
+    ].concat(licensesWithOneVersion).sort(sortTranspositions);
+    var SUBSTRING = 0;
+    var IDENTIFIER = 1;
+    var validTransformation = /* @__PURE__ */ __name(function(identifier) {
+      for (var i = 0; i < transforms.length; i++) {
+        var transformed = transforms[i](identifier).trim();
+        if (transformed !== identifier && valid(transformed)) {
+          return transformed;
+        }
+      }
+      return null;
+    }, "validTransformation");
+    var validLastResort = /* @__PURE__ */ __name(function(identifier) {
+      var upperCased = identifier.toUpperCase();
+      for (var i = 0; i < lastResorts.length; i++) {
+        var lastResort = lastResorts[i];
+        if (upperCased.indexOf(lastResort[SUBSTRING]) > -1) {
+          return lastResort[IDENTIFIER];
+        }
+      }
+      return null;
+    }, "validLastResort");
+    var anyCorrection = /* @__PURE__ */ __name(function(identifier, check) {
+      for (var i = 0; i < transpositions.length; i++) {
+        var transposition = transpositions[i];
+        var transposed = transposition[TRANSPOSED];
+        if (identifier.indexOf(transposed) > -1) {
+          var corrected = identifier.replace(
+            transposed,
+            transposition[CORRECT]
+          );
+          var checked = check(corrected);
+          if (checked !== null) {
+            return checked;
+          }
+        }
+      }
+      return null;
+    }, "anyCorrection");
+    module2.exports = function(identifier, options) {
+      options = options || {};
+      var upgrade = options.upgrade === void 0 ? true : !!options.upgrade;
+      function postprocess(value) {
+        return upgrade ? upgradeGPLs(value) : value;
+      }
+      __name(postprocess, "postprocess");
+      var validArugment = typeof identifier === "string" && identifier.trim().length !== 0;
+      if (!validArugment) {
+        throw Error("Invalid argument. Expected non-empty string.");
+      }
+      identifier = identifier.trim();
+      if (valid(identifier)) {
+        return postprocess(identifier);
+      }
+      var noPlus = identifier.replace(/\+$/, "").trim();
+      if (valid(noPlus)) {
+        return postprocess(noPlus);
+      }
+      var transformed = validTransformation(identifier);
+      if (transformed !== null) {
+        return postprocess(transformed);
+      }
+      transformed = anyCorrection(identifier, function(argument) {
+        if (valid(argument)) {
+          return argument;
+        }
+        return validTransformation(argument);
+      });
+      if (transformed !== null) {
+        return postprocess(transformed);
+      }
+      transformed = validLastResort(identifier);
+      if (transformed !== null) {
+        return postprocess(transformed);
+      }
+      transformed = anyCorrection(identifier, validLastResort);
+      if (transformed !== null) {
+        return postprocess(transformed);
+      }
+      return null;
+    };
+    function upgradeGPLs(value) {
+      if ([
+        "GPL-1.0",
+        "LGPL-1.0",
+        "AGPL-1.0",
+        "GPL-2.0",
+        "LGPL-2.0",
+        "AGPL-2.0",
+        "LGPL-2.1"
+      ].indexOf(value) !== -1) {
+        return value + "-only";
+      } else if ([
+        "GPL-1.0+",
+        "GPL-2.0+",
+        "GPL-3.0+",
+        "LGPL-2.0+",
+        "LGPL-2.1+",
+        "LGPL-3.0+",
+        "AGPL-1.0+",
+        "AGPL-3.0+"
+      ].indexOf(value) !== -1) {
+        return value.replace(/\+$/, "-or-later");
+      } else if (["GPL-3.0", "LGPL-3.0", "AGPL-3.0"].indexOf(value) !== -1) {
+        return value + "-or-later";
+      } else {
+        return value;
+      }
+    }
+    __name(upgradeGPLs, "upgradeGPLs");
+  }
+});
+
+// node_modules/.pnpm/validate-npm-package-license@3.0.4/node_modules/validate-npm-package-license/index.js
+var require_validate_npm_package_license = __commonJS({
+  "node_modules/.pnpm/validate-npm-package-license@3.0.4/node_modules/validate-npm-package-license/index.js"(exports2, module2) {
+    var parse = require_spdx_expression_parse();
+    var correct = require_spdx_correct();
+    var genericWarning = 'license should be a valid SPDX license expression (without "LicenseRef"), "UNLICENSED", or "SEE LICENSE IN "';
+    var fileReferenceRE = /^SEE LICEN[CS]E IN (.+)$/;
+    function startsWith(prefix, string) {
+      return string.slice(0, prefix.length) === prefix;
+    }
+    __name(startsWith, "startsWith");
+    function usesLicenseRef(ast) {
+      if (ast.hasOwnProperty("license")) {
+        var license = ast.license;
+        return startsWith("LicenseRef", license) || startsWith("DocumentRef", license);
+      } else {
+        return usesLicenseRef(ast.left) || usesLicenseRef(ast.right);
+      }
+    }
+    __name(usesLicenseRef, "usesLicenseRef");
+    module2.exports = function(argument) {
+      var ast;
+      try {
+        ast = parse(argument);
+      } catch (e) {
+        var match;
+        if (argument === "UNLICENSED" || argument === "UNLICENCED") {
+          return {
+            validForOldPackages: true,
+            validForNewPackages: true,
+            unlicensed: true
+          };
+        } else if (match = fileReferenceRE.exec(argument)) {
+          return {
+            validForOldPackages: true,
+            validForNewPackages: true,
+            inFile: match[1]
+          };
+        } else {
+          var result = {
+            validForOldPackages: false,
+            validForNewPackages: false,
+            warnings: [genericWarning]
+          };
+          if (argument.trim().length !== 0) {
+            var corrected = correct(argument);
+            if (corrected) {
+              result.warnings.push(
+                'license is similar to the valid expression "' + corrected + '"'
+              );
+            }
+          }
+          return result;
+        }
+      }
+      if (usesLicenseRef(ast)) {
+        return {
+          validForNewPackages: false,
+          validForOldPackages: false,
+          spdx: true,
+          warnings: [genericWarning]
+        };
+      } else {
+        return {
+          validForNewPackages: true,
+          validForOldPackages: true,
+          spdx: true
+        };
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/normalize-data.js
+var require_normalize_data = __commonJS({
+  "node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/normalize-data.js"(exports2, module2) {
+    var { URL: URL2 } = require("node:url");
+    var hostedGitInfo = require_lib3();
+    var validateLicense = require_validate_npm_package_license();
+    var typos = {
+      dependancies: "dependencies",
+      dependecies: "dependencies",
+      depdenencies: "dependencies",
+      devEependencies: "devDependencies",
+      depends: "dependencies",
+      "dev-dependencies": "devDependencies",
+      devDependences: "devDependencies",
+      devDepenencies: "devDependencies",
+      devdependencies: "devDependencies",
+      repostitory: "repository",
+      repo: "repository",
+      prefereGlobal: "preferGlobal",
+      hompage: "homepage",
+      hampage: "homepage",
+      autohr: "author",
+      autor: "author",
+      contributers: "contributors",
+      publicationConfig: "publishConfig",
+      script: "scripts"
+    };
+    var isEmail = /* @__PURE__ */ __name((str) => str.includes("@") && str.indexOf("@") < str.lastIndexOf("."), "isEmail");
+    function extractDescription(description) {
+      const lines = description.trim().split("\n");
+      let start = 0;
+      while (lines[start]?.trim().match(/^(#|$)/)) {
+        start++;
+      }
+      let end = start + 1;
+      while (end < lines.length && lines[end].trim()) {
+        end++;
+      }
+      return lines.slice(start, end).join(" ").trim();
+    }
+    __name(extractDescription, "extractDescription");
+    function stringifyPerson(person) {
+      if (typeof person !== "string") {
+        const name = person.name || "";
+        const u = person.url || person.web;
+        const wrappedUrl = u ? " (" + u + ")" : "";
+        const e = person.email || person.mail;
+        const wrappedEmail = e ? " <" + e + ">" : "";
+        person = name + wrappedEmail + wrappedUrl;
+      }
+      const matchedName = person.match(/^([^(<]+)/);
+      const matchedUrl = person.match(/\(([^()]+)\)/);
+      const matchedEmail = person.match(/<([^<>]+)>/);
+      const parsed = {};
+      if (matchedName?.[0].trim()) {
+        parsed.name = matchedName[0].trim();
+      }
+      if (matchedEmail) {
+        parsed.email = matchedEmail[1];
+      }
+      if (matchedUrl) {
+        parsed.url = matchedUrl[1];
+      }
+      return parsed;
+    }
+    __name(stringifyPerson, "stringifyPerson");
+    function normalizeData(data, changes) {
+      if (data.description && typeof data.description !== "string") {
+        changes?.push(`'description' field should be a string`);
+        delete data.description;
+      }
+      if (data.readme && !data.description && data.readme !== "ERROR: No README data found!") {
+        data.description = extractDescription(data.readme);
+      }
+      if (data.description === void 0) {
+        delete data.description;
+      }
+      if (!data.description) {
+        changes?.push("No description");
+      }
+      if (data.modules) {
+        changes?.push(`modules field is deprecated`);
+        delete data.modules;
+      }
+      const files = data.files;
+      if (files && !Array.isArray(files)) {
+        changes?.push(`Invalid 'files' member`);
+        delete data.files;
+      } else if (data.files) {
+        data.files = data.files.filter(function(file) {
+          if (!file || typeof file !== "string") {
+            changes?.push(`Invalid filename in 'files' list: ${file}`);
+            return false;
+          } else {
+            return true;
+          }
+        });
+      }
+      if (data.man && typeof data.man === "string") {
+        data.man = [data.man];
+      }
+      if (!data.bugs && data.repository?.url) {
+        const hosted = hostedGitInfo.fromUrl(data.repository.url);
+        if (hosted && hosted.bugs()) {
+          data.bugs = { url: hosted.bugs() };
+        }
+      } else if (data.bugs) {
+        if (typeof data.bugs === "string") {
+          if (isEmail(data.bugs)) {
+            data.bugs = { email: data.bugs };
+          } else if (URL2.canParse(data.bugs)) {
+            data.bugs = { url: data.bugs };
+          } else {
+            changes?.push(`Bug string field must be url, email, or {email,url}`);
+          }
+        } else {
+          for (const k in data.bugs) {
+            if (["web", "name"].includes(k)) {
+              changes?.push(`bugs['${k}'] should probably be bugs['url'].`);
+              data.bugs.url = data.bugs[k];
+              delete data.bugs[k];
+            }
+          }
+          const oldBugs = data.bugs;
+          data.bugs = {};
+          if (oldBugs.url) {
+            if (URL2.canParse(oldBugs.url)) {
+              data.bugs.url = oldBugs.url;
+            } else {
+              changes?.push("bugs.url field must be a string url. Deleted.");
+            }
+          }
+          if (oldBugs.email) {
+            if (typeof oldBugs.email === "string" && isEmail(oldBugs.email)) {
+              data.bugs.email = oldBugs.email;
+            } else {
+              changes?.push("bugs.email field must be a string email. Deleted.");
+            }
+          }
+        }
+        if (!data.bugs.email && !data.bugs.url) {
+          delete data.bugs;
+          changes?.push("Normalized value of bugs field is an empty object. Deleted.");
+        }
+      }
+      if (typeof data.keywords === "string") {
+        data.keywords = data.keywords.split(/,\s+/);
+      }
+      if (data.keywords && !Array.isArray(data.keywords)) {
+        delete data.keywords;
+        changes?.push(`keywords should be an array of strings`);
+      } else if (data.keywords) {
+        data.keywords = data.keywords.filter(function(kw) {
+          if (typeof kw !== "string" || !kw) {
+            changes?.push(`keywords should be an array of strings`);
+            return false;
+          } else {
+            return true;
+          }
+        });
+      }
+      const bdd = "bundledDependencies";
+      const bd = "bundleDependencies";
+      if (data[bdd] && !data[bd]) {
+        data[bd] = data[bdd];
+        delete data[bdd];
+      }
+      if (data[bd] && !Array.isArray(data[bd])) {
+        changes?.push(`Invalid 'bundleDependencies' list. Must be array of package names`);
+        delete data[bd];
+      } else if (data[bd]) {
+        data[bd] = data[bd].filter(function(filtered) {
+          if (!filtered || typeof filtered !== "string") {
+            changes?.push(`Invalid bundleDependencies member: ${filtered}`);
+            return false;
+          } else {
+            if (!data.dependencies) {
+              data.dependencies = {};
+            }
+            if (!Object.prototype.hasOwnProperty.call(data.dependencies, filtered)) {
+              changes?.push(`Non-dependency in bundleDependencies: ${filtered}`);
+              data.dependencies[filtered] = "*";
+            }
+            return true;
+          }
+        });
+      }
+      if (!data.homepage && data.repository && data.repository.url) {
+        const hosted = hostedGitInfo.fromUrl(data.repository.url);
+        if (hosted) {
+          data.homepage = hosted.docs();
+        }
+      }
+      if (data.homepage) {
+        if (typeof data.homepage !== "string") {
+          changes?.push("homepage field must be a string url. Deleted.");
+          delete data.homepage;
+        } else {
+          if (!URL2.canParse(data.homepage)) {
+            data.homepage = "http://" + data.homepage;
+          }
+        }
+      }
+      if (!data.readme) {
+        changes?.push("No README data");
+        data.readme = "ERROR: No README data found!";
+      }
+      const license = data.license || data.licence;
+      if (!license) {
+        changes?.push("No license field.");
+      } else if (typeof license !== "string" || license.length < 1 || license.trim() === "") {
+        changes?.push("license should be a valid SPDX license expression");
+      } else if (!validateLicense(license).validForNewPackages) {
+        changes?.push("license should be a valid SPDX license expression");
+      }
+      if (data.author) {
+        data.author = stringifyPerson(data.author);
+      }
+      ["maintainers", "contributors"].forEach(function(set) {
+        if (!Array.isArray(data[set])) {
+          return;
+        }
+        data[set] = data[set].map(stringifyPerson);
+      });
+      for (const d in typos) {
+        if (Object.prototype.hasOwnProperty.call(data, d)) {
+          changes?.push(`${d} should probably be ${typos[d]}.`);
+        }
+      }
+    }
+    __name(normalizeData, "normalizeData");
+    module2.exports = { normalizeData };
+  }
+});
+
+// node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/posix.js
+var require_posix = __commonJS({
+  "node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/posix.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.sync = exports2.isexe = void 0;
+    var fs_1 = require("fs");
+    var promises_1 = require("fs/promises");
+    var isexe = /* @__PURE__ */ __name(async (path, options = {}) => {
+      const { ignoreErrors = false } = options;
+      try {
+        return checkStat(await (0, promises_1.stat)(path), options);
+      } catch (e) {
+        const er = e;
+        if (ignoreErrors || er.code === "EACCES")
+          return false;
+        throw er;
+      }
+    }, "isexe");
+    exports2.isexe = isexe;
+    var sync = /* @__PURE__ */ __name((path, options = {}) => {
+      const { ignoreErrors = false } = options;
+      try {
+        return checkStat((0, fs_1.statSync)(path), options);
+      } catch (e) {
+        const er = e;
+        if (ignoreErrors || er.code === "EACCES")
+          return false;
+        throw er;
+      }
+    }, "sync");
+    exports2.sync = sync;
+    var checkStat = /* @__PURE__ */ __name((stat, options) => stat.isFile() && checkMode(stat, options), "checkStat");
+    var checkMode = /* @__PURE__ */ __name((stat, options) => {
+      const myUid = options.uid ?? process.getuid?.();
+      const myGroups = options.groups ?? process.getgroups?.() ?? [];
+      const myGid = options.gid ?? process.getgid?.() ?? myGroups[0];
+      if (myUid === void 0 || myGid === void 0) {
+        throw new Error("cannot get uid or gid");
+      }
+      const groups = /* @__PURE__ */ new Set([myGid, ...myGroups]);
+      const mod = stat.mode;
+      const uid = stat.uid;
+      const gid = stat.gid;
+      const u = parseInt("100", 8);
+      const g = parseInt("010", 8);
+      const o = parseInt("001", 8);
+      const ug = u | g;
+      return !!(mod & o || mod & g && groups.has(gid) || mod & u && uid === myUid || mod & ug && myUid === 0);
+    }, "checkMode");
+  }
+});
+
+// node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/win32.js
+var require_win32 = __commonJS({
+  "node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/win32.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.sync = exports2.isexe = void 0;
+    var fs_1 = require("fs");
+    var promises_1 = require("fs/promises");
+    var isexe = /* @__PURE__ */ __name(async (path, options = {}) => {
+      const { ignoreErrors = false } = options;
+      try {
+        return checkStat(await (0, promises_1.stat)(path), path, options);
+      } catch (e) {
+        const er = e;
+        if (ignoreErrors || er.code === "EACCES")
+          return false;
+        throw er;
+      }
+    }, "isexe");
+    exports2.isexe = isexe;
+    var sync = /* @__PURE__ */ __name((path, options = {}) => {
+      const { ignoreErrors = false } = options;
+      try {
+        return checkStat((0, fs_1.statSync)(path), path, options);
+      } catch (e) {
+        const er = e;
+        if (ignoreErrors || er.code === "EACCES")
+          return false;
+        throw er;
+      }
+    }, "sync");
+    exports2.sync = sync;
+    var checkPathExt = /* @__PURE__ */ __name((path, options) => {
+      const { pathExt = process.env.PATHEXT || "" } = options;
+      const peSplit = pathExt.split(";");
+      if (peSplit.indexOf("") !== -1) {
+        return true;
+      }
+      for (let i = 0; i < peSplit.length; i++) {
+        const p = peSplit[i].toLowerCase();
+        const ext = path.substring(path.length - p.length).toLowerCase();
+        if (p && ext === p) {
+          return true;
+        }
+      }
+      return false;
+    }, "checkPathExt");
+    var checkStat = /* @__PURE__ */ __name((stat, path, options) => stat.isFile() && checkPathExt(path, options), "checkStat");
+  }
+});
+
+// node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/options.js
+var require_options = __commonJS({
+  "node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/options.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+  }
+});
+
+// node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/index.js
+var require_cjs = __commonJS({
+  "node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/index.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
+      for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.sync = exports2.isexe = exports2.posix = exports2.win32 = void 0;
+    var posix = __importStar(require_posix());
+    exports2.posix = posix;
+    var win32 = __importStar(require_win32());
+    exports2.win32 = win32;
+    __exportStar(require_options(), exports2);
+    var platform = process.env._ISEXE_TEST_PLATFORM_ || process.platform;
+    var impl = platform === "win32" ? win32 : posix;
+    exports2.isexe = impl.isexe;
+    exports2.sync = impl.sync;
+  }
+});
+
+// node_modules/.pnpm/which@5.0.0/node_modules/which/lib/index.js
+var require_lib4 = __commonJS({
+  "node_modules/.pnpm/which@5.0.0/node_modules/which/lib/index.js"(exports2, module2) {
+    var { isexe, sync: isexeSync } = require_cjs();
+    var { join, delimiter, sep, posix } = require("path");
+    var isWindows = process.platform === "win32";
+    var rSlash = new RegExp(`[${posix.sep}${sep === posix.sep ? "" : sep}]`.replace(/(\\)/g, "\\$1"));
+    var rRel = new RegExp(`^\\.${rSlash.source}`);
+    var getNotFoundError = /* @__PURE__ */ __name((cmd) => Object.assign(new Error(`not found: ${cmd}`), { code: "ENOENT" }), "getNotFoundError");
+    var getPathInfo = /* @__PURE__ */ __name((cmd, {
+      path: optPath = process.env.PATH,
+      pathExt: optPathExt = process.env.PATHEXT,
+      delimiter: optDelimiter = delimiter
+    }) => {
+      const pathEnv = cmd.match(rSlash) ? [""] : [
+        // windows always checks the cwd first
+        ...isWindows ? [process.cwd()] : [],
+        ...(optPath || /* istanbul ignore next: very unusual */
+        "").split(optDelimiter)
+      ];
+      if (isWindows) {
+        const pathExtExe = optPathExt || [".EXE", ".CMD", ".BAT", ".COM"].join(optDelimiter);
+        const pathExt = pathExtExe.split(optDelimiter).flatMap((item) => [item, item.toLowerCase()]);
+        if (cmd.includes(".") && pathExt[0] !== "") {
+          pathExt.unshift("");
+        }
+        return { pathEnv, pathExt, pathExtExe };
+      }
+      return { pathEnv, pathExt: [""] };
+    }, "getPathInfo");
+    var getPathPart = /* @__PURE__ */ __name((raw, cmd) => {
+      const pathPart = /^".*"$/.test(raw) ? raw.slice(1, -1) : raw;
+      const prefix = !pathPart && rRel.test(cmd) ? cmd.slice(0, 2) : "";
+      return prefix + join(pathPart, cmd);
+    }, "getPathPart");
+    var which = /* @__PURE__ */ __name(async (cmd, opt = {}) => {
+      const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt);
+      const found = [];
+      for (const envPart of pathEnv) {
+        const p = getPathPart(envPart, cmd);
+        for (const ext of pathExt) {
+          const withExt = p + ext;
+          const is = await isexe(withExt, { pathExt: pathExtExe, ignoreErrors: true });
+          if (is) {
+            if (!opt.all) {
+              return withExt;
+            }
+            found.push(withExt);
+          }
+        }
+      }
+      if (opt.all && found.length) {
+        return found;
+      }
+      if (opt.nothrow) {
+        return null;
+      }
+      throw getNotFoundError(cmd);
+    }, "which");
+    var whichSync = /* @__PURE__ */ __name((cmd, opt = {}) => {
+      const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt);
+      const found = [];
+      for (const pathEnvPart of pathEnv) {
+        const p = getPathPart(pathEnvPart, cmd);
+        for (const ext of pathExt) {
+          const withExt = p + ext;
+          const is = isexeSync(withExt, { pathExt: pathExtExe, ignoreErrors: true });
+          if (is) {
+            if (!opt.all) {
+              return withExt;
+            }
+            found.push(withExt);
+          }
+        }
+      }
+      if (opt.all && found.length) {
+        return found;
+      }
+      if (opt.nothrow) {
+        return null;
+      }
+      throw getNotFoundError(cmd);
+    }, "whichSync");
+    module2.exports = which;
+    which.sync = whichSync;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+promise-spawn@9.0.1/node_modules/@npmcli/promise-spawn/lib/escape.js
+var require_escape2 = __commonJS({
+  "node_modules/.pnpm/@npmcli+promise-spawn@9.0.1/node_modules/@npmcli/promise-spawn/lib/escape.js"(exports2, module2) {
+    "use strict";
+    var cmd = /* @__PURE__ */ __name((input, doubleEscape) => {
+      if (!input.length) {
+        return '""';
+      }
+      let result;
+      if (!/[ \t\n\v"]/.test(input)) {
+        result = input;
+      } else {
+        result = '"';
+        for (let i = 0; i <= input.length; ++i) {
+          let slashCount = 0;
+          while (input[i] === "\\") {
+            ++i;
+            ++slashCount;
+          }
+          if (i === input.length) {
+            result += "\\".repeat(slashCount * 2);
+            break;
+          }
+          if (input[i] === '"') {
+            result += "\\".repeat(slashCount * 2 + 1);
+            result += input[i];
+          } else {
+            result += "\\".repeat(slashCount);
+            result += input[i];
+          }
+        }
+        result += '"';
+      }
+      result = result.replace(/[ !%^&()<>|"]/g, "^$&");
+      if (doubleEscape) {
+        result = result.replace(/[ !%^&()<>|"]/g, "^$&");
+      }
+      return result;
+    }, "cmd");
+    var sh = /* @__PURE__ */ __name((input) => {
+      if (!input.length) {
+        return `''`;
+      }
+      if (!/[\t\n\r "#$&'()*;<>?\\`|~]/.test(input)) {
+        return input;
+      }
+      const result = `'${input.replace(/'/g, `'\\''`)}'`.replace(/^(?:'')+(?!$)/, "").replace(/\\'''/g, `\\'`);
+      return result;
+    }, "sh");
+    module2.exports = {
+      cmd,
+      sh
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+promise-spawn@9.0.1/node_modules/@npmcli/promise-spawn/lib/index.js
+var require_lib5 = __commonJS({
+  "node_modules/.pnpm/@npmcli+promise-spawn@9.0.1/node_modules/@npmcli/promise-spawn/lib/index.js"(exports2, module2) {
+    "use strict";
+    var { spawn } = require("child_process");
+    var os = require("os");
+    var which = require_lib4();
+    var escape = require_escape2();
+    var promiseSpawn = /* @__PURE__ */ __name((cmd, args, opts = {}, extra = {}) => {
+      if (opts.shell) {
+        return spawnWithShell(cmd, args, opts, extra);
+      }
+      let resolve, reject;
+      const promise = new Promise((_resolve, _reject) => {
+        resolve = _resolve;
+        reject = _reject;
+      });
+      const closeError = new Error("command failed");
+      const stdout = [];
+      const stderr = [];
+      const getResult = /* @__PURE__ */ __name((result) => ({
+        cmd,
+        args,
+        ...result,
+        ...stdioResult(stdout, stderr, opts),
+        ...extra
+      }), "getResult");
+      const rejectWithOpts = /* @__PURE__ */ __name((er, erOpts) => {
+        const resultError = getResult(erOpts);
+        reject(Object.assign(er, resultError));
+      }, "rejectWithOpts");
+      const proc = spawn(cmd, args, opts);
+      promise.stdin = proc.stdin;
+      promise.process = proc;
+      proc.on("error", rejectWithOpts);
+      if (proc.stdout) {
+        proc.stdout.on("data", (c) => stdout.push(c));
+        proc.stdout.on("error", rejectWithOpts);
+      }
+      if (proc.stderr) {
+        proc.stderr.on("data", (c) => stderr.push(c));
+        proc.stderr.on("error", rejectWithOpts);
+      }
+      proc.on("close", (code, signal) => {
+        if (code || signal) {
+          rejectWithOpts(closeError, { code, signal });
+        } else {
+          resolve(getResult({ code, signal }));
+        }
+      });
+      return promise;
+    }, "promiseSpawn");
+    var spawnWithShell = /* @__PURE__ */ __name((cmd, args, opts, extra) => {
+      let command = opts.shell;
+      if (command === true) {
+        command = process.platform === "win32" ? process.env.ComSpec || "cmd.exe" : "sh";
+      }
+      const options = { ...opts, shell: false };
+      const realArgs = [];
+      let script = cmd;
+      const isCmd = /(?:^|\\)cmd(?:\.exe)?$/i.test(command);
+      if (isCmd) {
+        let doubleEscape = false;
+        let initialCmd = "";
+        let insideQuotes = false;
+        for (let i = 0; i < cmd.length; ++i) {
+          const char = cmd.charAt(i);
+          if (char === " " && !insideQuotes) {
+            break;
+          }
+          initialCmd += char;
+          if (char === '"' || char === "'") {
+            insideQuotes = !insideQuotes;
+          }
+        }
+        let pathToInitial;
+        try {
+          pathToInitial = which.sync(initialCmd, {
+            path: options.env && findInObject(options.env, "PATH") || process.env.PATH,
+            pathext: options.env && findInObject(options.env, "PATHEXT") || process.env.PATHEXT
+          }).toLowerCase();
+        } catch (err) {
+          pathToInitial = initialCmd.toLowerCase();
+        }
+        doubleEscape = pathToInitial.endsWith(".cmd") || pathToInitial.endsWith(".bat");
+        for (const arg of args) {
+          script += ` ${escape.cmd(arg, doubleEscape)}`;
+        }
+        realArgs.push("/d", "/s", "/c", script);
+        options.windowsVerbatimArguments = true;
+      } else {
+        for (const arg of args) {
+          script += ` ${escape.sh(arg)}`;
+        }
+        realArgs.push("-c", script);
+      }
+      return promiseSpawn(command, realArgs, options, extra);
+    }, "spawnWithShell");
+    var open = /* @__PURE__ */ __name((_args, opts = {}, extra = {}) => {
+      const options = { ...opts, shell: true };
+      const args = [].concat(_args);
+      let platform = process.platform;
+      if (platform === "linux" && os.release().toLowerCase().includes("microsoft")) {
+        platform = "wsl";
+        if (!process.env.BROWSER) {
+          return Promise.reject(
+            new Error("Set the BROWSER environment variable to your desired browser.")
+          );
+        }
+      }
+      let command = options.command;
+      if (!command) {
+        if (platform === "win32") {
+          options.shell = process.env.ComSpec;
+          command = 'start ""';
+        } else if (platform === "wsl") {
+          command = "sensible-browser";
+        } else if (platform === "darwin") {
+          command = "open";
+        } else {
+          command = "xdg-open";
+        }
+      }
+      return spawnWithShell(command, args, options, extra);
+    }, "open");
+    promiseSpawn.open = open;
+    var isPipe = /* @__PURE__ */ __name((stdio = "pipe", fd) => {
+      if (stdio === "pipe" || stdio === null) {
+        return true;
+      }
+      if (Array.isArray(stdio)) {
+        return isPipe(stdio[fd], fd);
+      }
+      return false;
+    }, "isPipe");
+    var stdioResult = /* @__PURE__ */ __name((stdout, stderr, { stdioString = true, stdio }) => {
+      const result = {
+        stdout: null,
+        stderr: null
+      };
+      if (isPipe(stdio, 1)) {
+        result.stdout = Buffer.concat(stdout);
+        if (stdioString) {
+          result.stdout = result.stdout.toString().trim();
+        }
+      }
+      if (isPipe(stdio, 2)) {
+        result.stderr = Buffer.concat(stderr);
+        if (stdioString) {
+          result.stderr = result.stderr.toString().trim();
+        }
+      }
+      return result;
+    }, "stdioResult");
+    var findInObject = /* @__PURE__ */ __name((obj, key) => {
+      key = key.toLowerCase();
+      for (const objKey of Object.keys(obj).sort()) {
+        if (objKey.toLowerCase() === key) {
+          return obj[objKey];
+        }
+      }
+    }, "findInObject");
+    module2.exports = promiseSpawn;
+  }
+});
+
+// node_modules/.pnpm/err-code@2.0.3/node_modules/err-code/index.js
+var require_err_code = __commonJS({
+  "node_modules/.pnpm/err-code@2.0.3/node_modules/err-code/index.js"(exports2, module2) {
+    "use strict";
+    function assign(obj, props) {
+      for (const key in props) {
+        Object.defineProperty(obj, key, {
+          value: props[key],
+          enumerable: true,
+          configurable: true
+        });
+      }
+      return obj;
+    }
+    __name(assign, "assign");
+    function createError(err, code, props) {
+      if (!err || typeof err === "string") {
+        throw new TypeError("Please pass an Error to err-code");
+      }
+      if (!props) {
+        props = {};
+      }
+      if (typeof code === "object") {
+        props = code;
+        code = void 0;
+      }
+      if (code != null) {
+        props.code = code;
+      }
+      try {
+        return assign(err, props);
+      } catch (_) {
+        props.message = err.message;
+        props.stack = err.stack;
+        const ErrClass = /* @__PURE__ */ __name(function() {
+        }, "ErrClass");
+        ErrClass.prototype = Object.create(Object.getPrototypeOf(err));
+        return assign(new ErrClass(), props);
+      }
+    }
+    __name(createError, "createError");
+    module2.exports = createError;
+  }
+});
+
+// node_modules/.pnpm/retry@0.12.0/node_modules/retry/lib/retry_operation.js
+var require_retry_operation = __commonJS({
+  "node_modules/.pnpm/retry@0.12.0/node_modules/retry/lib/retry_operation.js"(exports2, module2) {
+    function RetryOperation(timeouts, options) {
+      if (typeof options === "boolean") {
+        options = { forever: options };
+      }
+      this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));
+      this._timeouts = timeouts;
+      this._options = options || {};
+      this._maxRetryTime = options && options.maxRetryTime || Infinity;
+      this._fn = null;
+      this._errors = [];
+      this._attempts = 1;
+      this._operationTimeout = null;
+      this._operationTimeoutCb = null;
+      this._timeout = null;
+      this._operationStart = null;
+      if (this._options.forever) {
+        this._cachedTimeouts = this._timeouts.slice(0);
+      }
+    }
+    __name(RetryOperation, "RetryOperation");
+    module2.exports = RetryOperation;
+    RetryOperation.prototype.reset = function() {
+      this._attempts = 1;
+      this._timeouts = this._originalTimeouts;
+    };
+    RetryOperation.prototype.stop = function() {
+      if (this._timeout) {
+        clearTimeout(this._timeout);
+      }
+      this._timeouts = [];
+      this._cachedTimeouts = null;
+    };
+    RetryOperation.prototype.retry = function(err) {
+      if (this._timeout) {
+        clearTimeout(this._timeout);
+      }
+      if (!err) {
+        return false;
+      }
+      var currentTime = (/* @__PURE__ */ new Date()).getTime();
+      if (err && currentTime - this._operationStart >= this._maxRetryTime) {
+        this._errors.unshift(new Error("RetryOperation timeout occurred"));
+        return false;
+      }
+      this._errors.push(err);
+      var timeout = this._timeouts.shift();
+      if (timeout === void 0) {
+        if (this._cachedTimeouts) {
+          this._errors.splice(this._errors.length - 1, this._errors.length);
+          this._timeouts = this._cachedTimeouts.slice(0);
+          timeout = this._timeouts.shift();
+        } else {
+          return false;
+        }
+      }
+      var self = this;
+      var timer = setTimeout(function() {
+        self._attempts++;
+        if (self._operationTimeoutCb) {
+          self._timeout = setTimeout(function() {
+            self._operationTimeoutCb(self._attempts);
+          }, self._operationTimeout);
+          if (self._options.unref) {
+            self._timeout.unref();
+          }
+        }
+        self._fn(self._attempts);
+      }, timeout);
+      if (this._options.unref) {
+        timer.unref();
+      }
+      return true;
+    };
+    RetryOperation.prototype.attempt = function(fn, timeoutOps) {
+      this._fn = fn;
+      if (timeoutOps) {
+        if (timeoutOps.timeout) {
+          this._operationTimeout = timeoutOps.timeout;
+        }
+        if (timeoutOps.cb) {
+          this._operationTimeoutCb = timeoutOps.cb;
+        }
+      }
+      var self = this;
+      if (this._operationTimeoutCb) {
+        this._timeout = setTimeout(function() {
+          self._operationTimeoutCb();
+        }, self._operationTimeout);
+      }
+      this._operationStart = (/* @__PURE__ */ new Date()).getTime();
+      this._fn(this._attempts);
+    };
+    RetryOperation.prototype.try = function(fn) {
+      /* @__PURE__ */ console.log("Using RetryOperation.try() is deprecated");
+      this.attempt(fn);
+    };
+    RetryOperation.prototype.start = function(fn) {
+      /* @__PURE__ */ console.log("Using RetryOperation.start() is deprecated");
+      this.attempt(fn);
+    };
+    RetryOperation.prototype.start = RetryOperation.prototype.try;
+    RetryOperation.prototype.errors = function() {
+      return this._errors;
+    };
+    RetryOperation.prototype.attempts = function() {
+      return this._attempts;
+    };
+    RetryOperation.prototype.mainError = function() {
+      if (this._errors.length === 0) {
+        return null;
+      }
+      var counts = {};
+      var mainError = null;
+      var mainErrorCount = 0;
+      for (var i = 0; i < this._errors.length; i++) {
+        var error = this._errors[i];
+        var message = error.message;
+        var count = (counts[message] || 0) + 1;
+        counts[message] = count;
+        if (count >= mainErrorCount) {
+          mainError = error;
+          mainErrorCount = count;
+        }
+      }
+      return mainError;
+    };
+  }
+});
+
+// node_modules/.pnpm/retry@0.12.0/node_modules/retry/lib/retry.js
+var require_retry = __commonJS({
+  "node_modules/.pnpm/retry@0.12.0/node_modules/retry/lib/retry.js"(exports2) {
+    var RetryOperation = require_retry_operation();
+    exports2.operation = function(options) {
+      var timeouts = exports2.timeouts(options);
+      return new RetryOperation(timeouts, {
+        forever: options && options.forever,
+        unref: options && options.unref,
+        maxRetryTime: options && options.maxRetryTime
+      });
+    };
+    exports2.timeouts = function(options) {
+      if (options instanceof Array) {
+        return [].concat(options);
+      }
+      var opts = {
+        retries: 10,
+        factor: 2,
+        minTimeout: 1 * 1e3,
+        maxTimeout: Infinity,
+        randomize: false
+      };
+      for (var key in options) {
+        opts[key] = options[key];
+      }
+      if (opts.minTimeout > opts.maxTimeout) {
+        throw new Error("minTimeout is greater than maxTimeout");
+      }
+      var timeouts = [];
+      for (var i = 0; i < opts.retries; i++) {
+        timeouts.push(this.createTimeout(i, opts));
+      }
+      if (options && options.forever && !timeouts.length) {
+        timeouts.push(this.createTimeout(i, opts));
+      }
+      timeouts.sort(function(a, b) {
+        return a - b;
+      });
+      return timeouts;
+    };
+    exports2.createTimeout = function(attempt, opts) {
+      var random = opts.randomize ? Math.random() + 1 : 1;
+      var timeout = Math.round(random * opts.minTimeout * Math.pow(opts.factor, attempt));
+      timeout = Math.min(timeout, opts.maxTimeout);
+      return timeout;
+    };
+    exports2.wrap = function(obj, options, methods) {
+      if (options instanceof Array) {
+        methods = options;
+        options = null;
+      }
+      if (!methods) {
+        methods = [];
+        for (var key in obj) {
+          if (typeof obj[key] === "function") {
+            methods.push(key);
+          }
+        }
+      }
+      for (var i = 0; i < methods.length; i++) {
+        var method = methods[i];
+        var original = obj[method];
+        obj[method] = (/* @__PURE__ */ __name(function retryWrapper(original2) {
+          var op = exports2.operation(options);
+          var args = Array.prototype.slice.call(arguments, 1);
+          var callback = args.pop();
+          args.push(function(err) {
+            if (op.retry(err)) {
+              return;
+            }
+            if (err) {
+              arguments[0] = op.mainError();
+            }
+            callback.apply(this, arguments);
+          });
+          op.attempt(function() {
+            original2.apply(obj, args);
+          });
+        }, "retryWrapper")).bind(obj, original);
+        obj[method].options = options;
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/retry@0.12.0/node_modules/retry/index.js
+var require_retry2 = __commonJS({
+  "node_modules/.pnpm/retry@0.12.0/node_modules/retry/index.js"(exports2, module2) {
+    module2.exports = require_retry();
+  }
+});
+
+// node_modules/.pnpm/promise-retry@2.0.1/node_modules/promise-retry/index.js
+var require_promise_retry = __commonJS({
+  "node_modules/.pnpm/promise-retry@2.0.1/node_modules/promise-retry/index.js"(exports2, module2) {
+    "use strict";
+    var errcode = require_err_code();
+    var retry = require_retry2();
+    var hasOwn = Object.prototype.hasOwnProperty;
+    function isRetryError(err) {
+      return err && err.code === "EPROMISERETRY" && hasOwn.call(err, "retried");
+    }
+    __name(isRetryError, "isRetryError");
+    function promiseRetry(fn, options) {
+      var temp;
+      var operation;
+      if (typeof fn === "object" && typeof options === "function") {
+        temp = options;
+        options = fn;
+        fn = temp;
+      }
+      operation = retry.operation(options);
+      return new Promise(function(resolve, reject) {
+        operation.attempt(function(number) {
+          Promise.resolve().then(function() {
+            return fn(function(err) {
+              if (isRetryError(err)) {
+                err = err.retried;
+              }
+              throw errcode(new Error("Retrying"), "EPROMISERETRY", { retried: err });
+            }, number);
+          }).then(resolve, function(err) {
+            if (isRetryError(err)) {
+              err = err.retried;
+              if (operation.retry(err || new Error())) {
+                return;
+              }
+            }
+            reject(err);
+          });
+        });
+      });
+    }
+    __name(promiseRetry, "promiseRetry");
+    module2.exports = promiseRetry;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/errors.js
+var require_errors = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/errors.js"(exports2, module2) {
+    var maxRetry = 3;
+    var GitError = class extends Error {
+      static {
+        __name(this, "GitError");
+      }
+      shouldRetry() {
+        return false;
+      }
+    };
+    var GitConnectionError = class extends GitError {
+      static {
+        __name(this, "GitConnectionError");
+      }
+      constructor() {
+        super("A git connection error occurred");
+      }
+      shouldRetry(number) {
+        return number < maxRetry;
+      }
+    };
+    var GitPathspecError = class extends GitError {
+      static {
+        __name(this, "GitPathspecError");
+      }
+      constructor() {
+        super("The git reference could not be found");
+      }
+    };
+    var GitUnknownError = class extends GitError {
+      static {
+        __name(this, "GitUnknownError");
+      }
+      constructor() {
+        super("An unknown git error occurred");
+      }
+    };
+    module2.exports = {
+      GitConnectionError,
+      GitPathspecError,
+      GitUnknownError
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/make-error.js
+var require_make_error = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/make-error.js"(exports2, module2) {
+    var {
+      GitConnectionError,
+      GitPathspecError,
+      GitUnknownError
+    } = require_errors();
+    var connectionErrorRe = new RegExp([
+      "remote error: Internal Server Error",
+      "The remote end hung up unexpectedly",
+      "Connection timed out",
+      "Operation timed out",
+      "Failed to connect to .* Timed out",
+      "Connection reset by peer",
+      "SSL_ERROR_SYSCALL",
+      "The requested URL returned error: 503"
+    ].join("|"));
+    var missingPathspecRe = /pathspec .* did not match any file\(s\) known to git/;
+    function makeError(er) {
+      const message = er.stderr;
+      let gitEr;
+      if (connectionErrorRe.test(message)) {
+        gitEr = new GitConnectionError(message);
+      } else if (missingPathspecRe.test(message)) {
+        gitEr = new GitPathspecError(message);
+      } else {
+        gitEr = new GitUnknownError(message);
+      }
+      return Object.assign(gitEr, er);
+    }
+    __name(makeError, "makeError");
+    module2.exports = makeError;
+  }
+});
+
+// node_modules/.pnpm/ini@5.0.0/node_modules/ini/lib/ini.js
+var require_ini = __commonJS({
+  "node_modules/.pnpm/ini@5.0.0/node_modules/ini/lib/ini.js"(exports2, module2) {
+    var { hasOwnProperty } = Object.prototype;
+    var encode = /* @__PURE__ */ __name((obj, opt = {}) => {
+      if (typeof opt === "string") {
+        opt = { section: opt };
+      }
+      opt.align = opt.align === true;
+      opt.newline = opt.newline === true;
+      opt.sort = opt.sort === true;
+      opt.whitespace = opt.whitespace === true || opt.align === true;
+      opt.platform = opt.platform || typeof process !== "undefined" && process.platform;
+      opt.bracketedArray = opt.bracketedArray !== false;
+      const eol = opt.platform === "win32" ? "\r\n" : "\n";
+      const separator = opt.whitespace ? " = " : "=";
+      const children = [];
+      const keys = opt.sort ? Object.keys(obj).sort() : Object.keys(obj);
+      let padToChars = 0;
+      if (opt.align) {
+        padToChars = safe(
+          keys.filter((k) => obj[k] === null || Array.isArray(obj[k]) || typeof obj[k] !== "object").map((k) => Array.isArray(obj[k]) ? `${k}[]` : k).concat([""]).reduce((a, b) => safe(a).length >= safe(b).length ? a : b)
+        ).length;
+      }
+      let out = "";
+      const arraySuffix = opt.bracketedArray ? "[]" : "";
+      for (const k of keys) {
+        const val = obj[k];
+        if (val && Array.isArray(val)) {
+          for (const item of val) {
+            out += safe(`${k}${arraySuffix}`).padEnd(padToChars, " ") + separator + safe(item) + eol;
+          }
+        } else if (val && typeof val === "object") {
+          children.push(k);
+        } else {
+          out += safe(k).padEnd(padToChars, " ") + separator + safe(val) + eol;
+        }
+      }
+      if (opt.section && out.length) {
+        out = "[" + safe(opt.section) + "]" + (opt.newline ? eol + eol : eol) + out;
+      }
+      for (const k of children) {
+        const nk = splitSections(k, ".").join("\\.");
+        const section = (opt.section ? opt.section + "." : "") + nk;
+        const child = encode(obj[k], {
+          ...opt,
+          section
+        });
+        if (out.length && child.length) {
+          out += eol;
+        }
+        out += child;
+      }
+      return out;
+    }, "encode");
+    function splitSections(str, separator) {
+      var lastMatchIndex = 0;
+      var lastSeparatorIndex = 0;
+      var nextIndex = 0;
+      var sections = [];
+      do {
+        nextIndex = str.indexOf(separator, lastMatchIndex);
+        if (nextIndex !== -1) {
+          lastMatchIndex = nextIndex + separator.length;
+          if (nextIndex > 0 && str[nextIndex - 1] === "\\") {
+            continue;
+          }
+          sections.push(str.slice(lastSeparatorIndex, nextIndex));
+          lastSeparatorIndex = nextIndex + separator.length;
+        }
+      } while (nextIndex !== -1);
+      sections.push(str.slice(lastSeparatorIndex));
+      return sections;
+    }
+    __name(splitSections, "splitSections");
+    var decode = /* @__PURE__ */ __name((str, opt = {}) => {
+      opt.bracketedArray = opt.bracketedArray !== false;
+      const out = /* @__PURE__ */ Object.create(null);
+      let p = out;
+      let section = null;
+      const re = /^\[([^\]]*)\]\s*$|^([^=]+)(=(.*))?$/i;
+      const lines = str.split(/[\r\n]+/g);
+      const duplicates = {};
+      for (const line of lines) {
+        if (!line || line.match(/^\s*[;#]/) || line.match(/^\s*$/)) {
+          continue;
+        }
+        const match = line.match(re);
+        if (!match) {
+          continue;
+        }
+        if (match[1] !== void 0) {
+          section = unsafe(match[1]);
+          if (section === "__proto__") {
+            p = /* @__PURE__ */ Object.create(null);
+            continue;
+          }
+          p = out[section] = out[section] || /* @__PURE__ */ Object.create(null);
+          continue;
+        }
+        const keyRaw = unsafe(match[2]);
+        let isArray;
+        if (opt.bracketedArray) {
+          isArray = keyRaw.length > 2 && keyRaw.slice(-2) === "[]";
+        } else {
+          duplicates[keyRaw] = (duplicates?.[keyRaw] || 0) + 1;
+          isArray = duplicates[keyRaw] > 1;
+        }
+        const key = isArray && keyRaw.endsWith("[]") ? keyRaw.slice(0, -2) : keyRaw;
+        if (key === "__proto__") {
+          continue;
+        }
+        const valueRaw = match[3] ? unsafe(match[4]) : true;
+        const value = valueRaw === "true" || valueRaw === "false" || valueRaw === "null" ? JSON.parse(valueRaw) : valueRaw;
+        if (isArray) {
+          if (!hasOwnProperty.call(p, key)) {
+            p[key] = [];
+          } else if (!Array.isArray(p[key])) {
+            p[key] = [p[key]];
+          }
+        }
+        if (Array.isArray(p[key])) {
+          p[key].push(value);
+        } else {
+          p[key] = value;
+        }
+      }
+      const remove = [];
+      for (const k of Object.keys(out)) {
+        if (!hasOwnProperty.call(out, k) || typeof out[k] !== "object" || Array.isArray(out[k])) {
+          continue;
+        }
+        const parts = splitSections(k, ".");
+        p = out;
+        const l = parts.pop();
+        const nl = l.replace(/\\\./g, ".");
+        for (const part of parts) {
+          if (part === "__proto__") {
+            continue;
+          }
+          if (!hasOwnProperty.call(p, part) || typeof p[part] !== "object") {
+            p[part] = /* @__PURE__ */ Object.create(null);
+          }
+          p = p[part];
+        }
+        if (p === out && nl === l) {
+          continue;
+        }
+        p[nl] = out[k];
+        remove.push(k);
+      }
+      for (const del of remove) {
+        delete out[del];
+      }
+      return out;
+    }, "decode");
+    var isQuoted = /* @__PURE__ */ __name((val) => {
+      return val.startsWith('"') && val.endsWith('"') || val.startsWith("'") && val.endsWith("'");
+    }, "isQuoted");
+    var safe = /* @__PURE__ */ __name((val) => {
+      if (typeof val !== "string" || val.match(/[=\r\n]/) || val.match(/^\[/) || val.length > 1 && isQuoted(val) || val !== val.trim()) {
+        return JSON.stringify(val);
+      }
+      return val.split(";").join("\\;").split("#").join("\\#");
+    }, "safe");
+    var unsafe = /* @__PURE__ */ __name((val) => {
+      val = (val || "").trim();
+      if (isQuoted(val)) {
+        if (val.charAt(0) === "'") {
+          val = val.slice(1, -1);
+        }
+        try {
+          val = JSON.parse(val);
+        } catch {
+        }
+      } else {
+        let esc = false;
+        let unesc = "";
+        for (let i = 0, l = val.length; i < l; i++) {
+          const c = val.charAt(i);
+          if (esc) {
+            if ("\\;#".indexOf(c) !== -1) {
+              unesc += c;
+            } else {
+              unesc += "\\" + c;
+            }
+            esc = false;
+          } else if (";#".indexOf(c) !== -1) {
+            break;
+          } else if (c === "\\") {
+            esc = true;
+          } else {
+            unesc += c;
+          }
+        }
+        if (esc) {
+          unesc += "\\";
+        }
+        return unesc.trim();
+      }
+      return val;
+    }, "unsafe");
+    module2.exports = {
+      parse: decode,
+      decode,
+      stringify: encode,
+      encode,
+      safe,
+      unsafe
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/opts.js
+var require_opts = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/opts.js"(exports2, module2) {
+    var fs = require("node:fs");
+    var os = require("node:os");
+    var path = require("node:path");
+    var ini = require_ini();
+    var gitConfigPath = path.join(os.homedir(), ".gitconfig");
+    var cachedConfig = null;
+    var loadGitConfig = /* @__PURE__ */ __name(() => {
+      if (cachedConfig === null) {
+        try {
+          cachedConfig = {};
+          if (fs.existsSync(gitConfigPath)) {
+            const configContent = fs.readFileSync(gitConfigPath, "utf-8");
+            cachedConfig = ini.parse(configContent);
+          }
+        } catch (error) {
+          cachedConfig = {};
+        }
+      }
+      return cachedConfig;
+    }, "loadGitConfig");
+    var checkGitConfigs = /* @__PURE__ */ __name(() => {
+      const config = loadGitConfig();
+      return {
+        sshCommandSetInConfig: config?.core?.sshCommand !== void 0,
+        askPassSetInConfig: config?.core?.askpass !== void 0
+      };
+    }, "checkGitConfigs");
+    var sshCommandSetInEnv = process.env.GIT_SSH_COMMAND !== void 0;
+    var askPassSetInEnv = process.env.GIT_ASKPASS !== void 0;
+    var { sshCommandSetInConfig, askPassSetInConfig } = checkGitConfigs();
+    var finalGitEnv = {
+      ...askPassSetInEnv || askPassSetInConfig ? {} : {
+        GIT_ASKPASS: "echo"
+      },
+      ...sshCommandSetInEnv || sshCommandSetInConfig ? {} : {
+        GIT_SSH_COMMAND: "ssh -oStrictHostKeyChecking=accept-new"
+      }
+    };
+    module2.exports = (opts = {}) => ({
+      stdioString: true,
+      ...opts,
+      shell: false,
+      env: opts.env || { ...finalGitEnv, ...process.env }
+    });
+    module2.exports.loadGitConfig = loadGitConfig;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/which.js
+var require_which = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/which.js"(exports2, module2) {
+    var which = require_lib4();
+    var gitPath;
+    try {
+      gitPath = which.sync("git");
+    } catch {
+    }
+    module2.exports = (opts = {}) => {
+      if (opts.git) {
+        return opts.git;
+      }
+      if (!gitPath || opts.git === false) {
+        return Object.assign(new Error("No git binary found in $PATH"), { code: "ENOGIT" });
+      }
+      return gitPath;
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/spawn.js
+var require_spawn = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/spawn.js"(exports2, module2) {
+    var spawn = require_lib5();
+    var promiseRetry = require_promise_retry();
+    var { log } = require_lib2();
+    var makeError = require_make_error();
+    var makeOpts = require_opts();
+    module2.exports = (gitArgs, opts = {}) => {
+      const whichGit = require_which();
+      const gitPath = whichGit(opts);
+      if (gitPath instanceof Error) {
+        return Promise.reject(gitPath);
+      }
+      const args = opts.allowReplace || gitArgs[0] === "--no-replace-objects" ? gitArgs : ["--no-replace-objects", ...gitArgs];
+      let retryOpts = opts.retry;
+      if (retryOpts === null || retryOpts === void 0) {
+        retryOpts = {
+          retries: opts.fetchRetries || 2,
+          factor: opts.fetchRetryFactor || 10,
+          maxTimeout: opts.fetchRetryMaxtimeout || 6e4,
+          minTimeout: opts.fetchRetryMintimeout || 1e3
+        };
+      }
+      return promiseRetry((retryFn, number) => {
+        if (number !== 1) {
+          log.silly("git", `Retrying git command: ${args.join(" ")} attempt # ${number}`);
+        }
+        return spawn(gitPath, args, makeOpts(opts)).catch((er) => {
+          const gitError = makeError(er);
+          if (!gitError.shouldRetry(number)) {
+            throw gitError;
+          }
+          retryFn(gitError);
+        });
+      }, retryOpts);
+    };
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/inc.js
+var require_inc = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/inc.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var inc = /* @__PURE__ */ __name((version, release, options, identifier, identifierBase) => {
+      if (typeof options === "string") {
+        identifierBase = identifier;
+        identifier = options;
+        options = void 0;
+      }
+      try {
+        return new SemVer(
+          version instanceof SemVer ? version.version : version,
+          options
+        ).inc(release, identifier, identifierBase).version;
+      } catch (er) {
+        return null;
+      }
+    }, "inc");
+    module2.exports = inc;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/diff.js
+var require_diff = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/diff.js"(exports2, module2) {
+    "use strict";
+    var parse = require_parse();
+    var diff = /* @__PURE__ */ __name((version1, version2) => {
+      const v1 = parse(version1, null, true);
+      const v2 = parse(version2, null, true);
+      const comparison = v1.compare(v2);
+      if (comparison === 0) {
+        return null;
+      }
+      const v1Higher = comparison > 0;
+      const highVersion = v1Higher ? v1 : v2;
+      const lowVersion = v1Higher ? v2 : v1;
+      const highHasPre = !!highVersion.prerelease.length;
+      const lowHasPre = !!lowVersion.prerelease.length;
+      if (lowHasPre && !highHasPre) {
+        if (!lowVersion.patch && !lowVersion.minor) {
+          return "major";
+        }
+        if (lowVersion.compareMain(highVersion) === 0) {
+          if (lowVersion.minor && !lowVersion.patch) {
+            return "minor";
+          }
+          return "patch";
+        }
+      }
+      const prefix = highHasPre ? "pre" : "";
+      if (v1.major !== v2.major) {
+        return prefix + "major";
+      }
+      if (v1.minor !== v2.minor) {
+        return prefix + "minor";
+      }
+      if (v1.patch !== v2.patch) {
+        return prefix + "patch";
+      }
+      return "prerelease";
+    }, "diff");
+    module2.exports = diff;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/major.js
+var require_major = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/major.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var major = /* @__PURE__ */ __name((a, loose) => new SemVer(a, loose).major, "major");
+    module2.exports = major;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/minor.js
+var require_minor = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/minor.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var minor = /* @__PURE__ */ __name((a, loose) => new SemVer(a, loose).minor, "minor");
+    module2.exports = minor;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/patch.js
+var require_patch = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/patch.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var patch = /* @__PURE__ */ __name((a, loose) => new SemVer(a, loose).patch, "patch");
+    module2.exports = patch;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/prerelease.js
+var require_prerelease = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/prerelease.js"(exports2, module2) {
+    "use strict";
+    var parse = require_parse();
+    var prerelease = /* @__PURE__ */ __name((version, options) => {
+      const parsed = parse(version, options);
+      return parsed && parsed.prerelease.length ? parsed.prerelease : null;
+    }, "prerelease");
+    module2.exports = prerelease;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare.js
+var require_compare = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var compare = /* @__PURE__ */ __name((a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose)), "compare");
+    module2.exports = compare;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rcompare.js
+var require_rcompare = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rcompare.js"(exports2, module2) {
+    "use strict";
+    var compare = require_compare();
+    var rcompare = /* @__PURE__ */ __name((a, b, loose) => compare(b, a, loose), "rcompare");
+    module2.exports = rcompare;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-loose.js
+var require_compare_loose = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-loose.js"(exports2, module2) {
+    "use strict";
+    var compare = require_compare();
+    var compareLoose = /* @__PURE__ */ __name((a, b) => compare(a, b, true), "compareLoose");
+    module2.exports = compareLoose;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-build.js
+var require_compare_build = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-build.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var compareBuild = /* @__PURE__ */ __name((a, b, loose) => {
+      const versionA = new SemVer(a, loose);
+      const versionB = new SemVer(b, loose);
+      return versionA.compare(versionB) || versionA.compareBuild(versionB);
+    }, "compareBuild");
+    module2.exports = compareBuild;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/sort.js
+var require_sort = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/sort.js"(exports2, module2) {
+    "use strict";
+    var compareBuild = require_compare_build();
+    var sort = /* @__PURE__ */ __name((list, loose) => list.sort((a, b) => compareBuild(a, b, loose)), "sort");
+    module2.exports = sort;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rsort.js
+var require_rsort = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rsort.js"(exports2, module2) {
+    "use strict";
+    var compareBuild = require_compare_build();
+    var rsort = /* @__PURE__ */ __name((list, loose) => list.sort((a, b) => compareBuild(b, a, loose)), "rsort");
+    module2.exports = rsort;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gt.js
+var require_gt = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gt.js"(exports2, module2) {
+    "use strict";
+    var compare = require_compare();
+    var gt = /* @__PURE__ */ __name((a, b, loose) => compare(a, b, loose) > 0, "gt");
+    module2.exports = gt;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lt.js
+var require_lt = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lt.js"(exports2, module2) {
+    "use strict";
+    var compare = require_compare();
+    var lt = /* @__PURE__ */ __name((a, b, loose) => compare(a, b, loose) < 0, "lt");
+    module2.exports = lt;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/eq.js
+var require_eq = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/eq.js"(exports2, module2) {
+    "use strict";
+    var compare = require_compare();
+    var eq = /* @__PURE__ */ __name((a, b, loose) => compare(a, b, loose) === 0, "eq");
+    module2.exports = eq;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/neq.js
+var require_neq = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/neq.js"(exports2, module2) {
+    "use strict";
+    var compare = require_compare();
+    var neq = /* @__PURE__ */ __name((a, b, loose) => compare(a, b, loose) !== 0, "neq");
+    module2.exports = neq;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gte.js
+var require_gte = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gte.js"(exports2, module2) {
+    "use strict";
+    var compare = require_compare();
+    var gte = /* @__PURE__ */ __name((a, b, loose) => compare(a, b, loose) >= 0, "gte");
+    module2.exports = gte;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lte.js
+var require_lte = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lte.js"(exports2, module2) {
+    "use strict";
+    var compare = require_compare();
+    var lte = /* @__PURE__ */ __name((a, b, loose) => compare(a, b, loose) <= 0, "lte");
+    module2.exports = lte;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/cmp.js
+var require_cmp = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/cmp.js"(exports2, module2) {
+    "use strict";
+    var eq = require_eq();
+    var neq = require_neq();
+    var gt = require_gt();
+    var gte = require_gte();
+    var lt = require_lt();
+    var lte = require_lte();
+    var cmp = /* @__PURE__ */ __name((a, op, b, loose) => {
+      switch (op) {
+        case "===":
+          if (typeof a === "object") {
+            a = a.version;
+          }
+          if (typeof b === "object") {
+            b = b.version;
+          }
+          return a === b;
+        case "!==":
+          if (typeof a === "object") {
+            a = a.version;
+          }
+          if (typeof b === "object") {
+            b = b.version;
+          }
+          return a !== b;
+        case "":
+        case "=":
+        case "==":
+          return eq(a, b, loose);
+        case "!=":
+          return neq(a, b, loose);
+        case ">":
+          return gt(a, b, loose);
+        case ">=":
+          return gte(a, b, loose);
+        case "<":
+          return lt(a, b, loose);
+        case "<=":
+          return lte(a, b, loose);
+        default:
+          throw new TypeError(`Invalid operator: ${op}`);
+      }
+    }, "cmp");
+    module2.exports = cmp;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/coerce.js
+var require_coerce = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/coerce.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var parse = require_parse();
+    var { safeRe: re, t } = require_re();
+    var coerce = /* @__PURE__ */ __name((version, options) => {
+      if (version instanceof SemVer) {
+        return version;
+      }
+      if (typeof version === "number") {
+        version = String(version);
+      }
+      if (typeof version !== "string") {
+        return null;
+      }
+      options = options || {};
+      let match = null;
+      if (!options.rtl) {
+        match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE]);
+      } else {
+        const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL];
+        let next;
+        while ((next = coerceRtlRegex.exec(version)) && (!match || match.index + match[0].length !== version.length)) {
+          if (!match || next.index + next[0].length !== match.index + match[0].length) {
+            match = next;
+          }
+          coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length;
+        }
+        coerceRtlRegex.lastIndex = -1;
+      }
+      if (match === null) {
+        return null;
+      }
+      const major = match[2];
+      const minor = match[3] || "0";
+      const patch = match[4] || "0";
+      const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : "";
+      const build = options.includePrerelease && match[6] ? `+${match[6]}` : "";
+      return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options);
+    }, "coerce");
+    module2.exports = coerce;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/lrucache.js
+var require_lrucache = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/lrucache.js"(exports2, module2) {
+    "use strict";
+    var LRUCache = class {
+      static {
+        __name(this, "LRUCache");
+      }
+      constructor() {
+        this.max = 1e3;
+        this.map = /* @__PURE__ */ new Map();
+      }
+      get(key) {
+        const value = this.map.get(key);
+        if (value === void 0) {
+          return void 0;
+        } else {
+          this.map.delete(key);
+          this.map.set(key, value);
+          return value;
+        }
+      }
+      delete(key) {
+        return this.map.delete(key);
+      }
+      set(key, value) {
+        const deleted = this.delete(key);
+        if (!deleted && value !== void 0) {
+          if (this.map.size >= this.max) {
+            const firstKey = this.map.keys().next().value;
+            this.delete(firstKey);
+          }
+          this.map.set(key, value);
+        }
+        return this;
+      }
+    };
+    module2.exports = LRUCache;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/range.js
+var require_range = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/range.js"(exports2, module2) {
+    "use strict";
+    var SPACE_CHARACTERS = /\s+/g;
+    var Range = class _Range {
+      static {
+        __name(this, "Range");
+      }
+      constructor(range, options) {
+        options = parseOptions(options);
+        if (range instanceof _Range) {
+          if (range.loose === !!options.loose && range.includePrerelease === !!options.includePrerelease) {
+            return range;
+          } else {
+            return new _Range(range.raw, options);
+          }
+        }
+        if (range instanceof Comparator) {
+          this.raw = range.value;
+          this.set = [[range]];
+          this.formatted = void 0;
+          return this;
+        }
+        this.options = options;
+        this.loose = !!options.loose;
+        this.includePrerelease = !!options.includePrerelease;
+        this.raw = range.trim().replace(SPACE_CHARACTERS, " ");
+        this.set = this.raw.split("||").map((r) => this.parseRange(r.trim())).filter((c) => c.length);
+        if (!this.set.length) {
+          throw new TypeError(`Invalid SemVer Range: ${this.raw}`);
+        }
+        if (this.set.length > 1) {
+          const first = this.set[0];
+          this.set = this.set.filter((c) => !isNullSet(c[0]));
+          if (this.set.length === 0) {
+            this.set = [first];
+          } else if (this.set.length > 1) {
+            for (const c of this.set) {
+              if (c.length === 1 && isAny(c[0])) {
+                this.set = [c];
+                break;
+              }
+            }
+          }
+        }
+        this.formatted = void 0;
+      }
+      get range() {
+        if (this.formatted === void 0) {
+          this.formatted = "";
+          for (let i = 0; i < this.set.length; i++) {
+            if (i > 0) {
+              this.formatted += "||";
+            }
+            const comps = this.set[i];
+            for (let k = 0; k < comps.length; k++) {
+              if (k > 0) {
+                this.formatted += " ";
+              }
+              this.formatted += comps[k].toString().trim();
+            }
+          }
+        }
+        return this.formatted;
+      }
+      format() {
+        return this.range;
+      }
+      toString() {
+        return this.range;
+      }
+      parseRange(range) {
+        const memoOpts = (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) | (this.options.loose && FLAG_LOOSE);
+        const memoKey = memoOpts + ":" + range;
+        const cached = cache.get(memoKey);
+        if (cached) {
+          return cached;
+        }
+        const loose = this.options.loose;
+        const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE];
+        range = range.replace(hr, hyphenReplace(this.options.includePrerelease));
+        debug("hyphen replace", range);
+        range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace);
+        debug("comparator trim", range);
+        range = range.replace(re[t.TILDETRIM], tildeTrimReplace);
+        debug("tilde trim", range);
+        range = range.replace(re[t.CARETTRIM], caretTrimReplace);
+        debug("caret trim", range);
+        let rangeList = range.split(" ").map((comp) => parseComparator(comp, this.options)).join(" ").split(/\s+/).map((comp) => replaceGTE0(comp, this.options));
+        if (loose) {
+          rangeList = rangeList.filter((comp) => {
+            debug("loose invalid filter", comp, this.options);
+            return !!comp.match(re[t.COMPARATORLOOSE]);
+          });
+        }
+        debug("range list", rangeList);
+        const rangeMap = /* @__PURE__ */ new Map();
+        const comparators = rangeList.map((comp) => new Comparator(comp, this.options));
+        for (const comp of comparators) {
+          if (isNullSet(comp)) {
+            return [comp];
+          }
+          rangeMap.set(comp.value, comp);
+        }
+        if (rangeMap.size > 1 && rangeMap.has("")) {
+          rangeMap.delete("");
+        }
+        const result = [...rangeMap.values()];
+        cache.set(memoKey, result);
+        return result;
+      }
+      intersects(range, options) {
+        if (!(range instanceof _Range)) {
+          throw new TypeError("a Range is required");
+        }
+        return this.set.some((thisComparators) => {
+          return isSatisfiable(thisComparators, options) && range.set.some((rangeComparators) => {
+            return isSatisfiable(rangeComparators, options) && thisComparators.every((thisComparator) => {
+              return rangeComparators.every((rangeComparator) => {
+                return thisComparator.intersects(rangeComparator, options);
+              });
+            });
+          });
+        });
+      }
+      // if ANY of the sets match ALL of its comparators, then pass
+      test(version) {
+        if (!version) {
+          return false;
+        }
+        if (typeof version === "string") {
+          try {
+            version = new SemVer(version, this.options);
+          } catch (er) {
+            return false;
+          }
+        }
+        for (let i = 0; i < this.set.length; i++) {
+          if (testSet(this.set[i], version, this.options)) {
+            return true;
+          }
+        }
+        return false;
+      }
+    };
+    module2.exports = Range;
+    var LRU = require_lrucache();
+    var cache = new LRU();
+    var parseOptions = require_parse_options();
+    var Comparator = require_comparator();
+    var debug = require_debug();
+    var SemVer = require_semver();
+    var {
+      safeRe: re,
+      t,
+      comparatorTrimReplace,
+      tildeTrimReplace,
+      caretTrimReplace
+    } = require_re();
+    var { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require_constants();
+    var isNullSet = /* @__PURE__ */ __name((c) => c.value === "<0.0.0-0", "isNullSet");
+    var isAny = /* @__PURE__ */ __name((c) => c.value === "", "isAny");
+    var isSatisfiable = /* @__PURE__ */ __name((comparators, options) => {
+      let result = true;
+      const remainingComparators = comparators.slice();
+      let testComparator = remainingComparators.pop();
+      while (result && remainingComparators.length) {
+        result = remainingComparators.every((otherComparator) => {
+          return testComparator.intersects(otherComparator, options);
+        });
+        testComparator = remainingComparators.pop();
+      }
+      return result;
+    }, "isSatisfiable");
+    var parseComparator = /* @__PURE__ */ __name((comp, options) => {
+      debug("comp", comp, options);
+      comp = replaceCarets(comp, options);
+      debug("caret", comp);
+      comp = replaceTildes(comp, options);
+      debug("tildes", comp);
+      comp = replaceXRanges(comp, options);
+      debug("xrange", comp);
+      comp = replaceStars(comp, options);
+      debug("stars", comp);
+      return comp;
+    }, "parseComparator");
+    var isX = /* @__PURE__ */ __name((id) => !id || id.toLowerCase() === "x" || id === "*", "isX");
+    var replaceTildes = /* @__PURE__ */ __name((comp, options) => {
+      return comp.trim().split(/\s+/).map((c) => replaceTilde(c, options)).join(" ");
+    }, "replaceTildes");
+    var replaceTilde = /* @__PURE__ */ __name((comp, options) => {
+      const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE];
+      return comp.replace(r, (_, M, m, p, pr) => {
+        debug("tilde", comp, _, M, m, p, pr);
+        let ret;
+        if (isX(M)) {
+          ret = "";
+        } else if (isX(m)) {
+          ret = `>=${M}.0.0 <${+M + 1}.0.0-0`;
+        } else if (isX(p)) {
+          ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`;
+        } else if (pr) {
+          debug("replaceTilde pr", pr);
+          ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;
+        } else {
+          ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`;
+        }
+        debug("tilde return", ret);
+        return ret;
+      });
+    }, "replaceTilde");
+    var replaceCarets = /* @__PURE__ */ __name((comp, options) => {
+      return comp.trim().split(/\s+/).map((c) => replaceCaret(c, options)).join(" ");
+    }, "replaceCarets");
+    var replaceCaret = /* @__PURE__ */ __name((comp, options) => {
+      debug("caret", comp, options);
+      const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET];
+      const z = options.includePrerelease ? "-0" : "";
+      return comp.replace(r, (_, M, m, p, pr) => {
+        debug("caret", comp, _, M, m, p, pr);
+        let ret;
+        if (isX(M)) {
+          ret = "";
+        } else if (isX(m)) {
+          ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`;
+        } else if (isX(p)) {
+          if (M === "0") {
+            ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`;
+          } else {
+            ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`;
+          }
+        } else if (pr) {
+          debug("replaceCaret pr", pr);
+          if (M === "0") {
+            if (m === "0") {
+              ret = `>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p + 1}-0`;
+            } else {
+              ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;
+            }
+          } else {
+            ret = `>=${M}.${m}.${p}-${pr} <${+M + 1}.0.0-0`;
+          }
+        } else {
+          debug("no pr");
+          if (M === "0") {
+            if (m === "0") {
+              ret = `>=${M}.${m}.${p}${z} <${M}.${m}.${+p + 1}-0`;
+            } else {
+              ret = `>=${M}.${m}.${p}${z} <${M}.${+m + 1}.0-0`;
+            }
+          } else {
+            ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`;
+          }
+        }
+        debug("caret return", ret);
+        return ret;
+      });
+    }, "replaceCaret");
+    var replaceXRanges = /* @__PURE__ */ __name((comp, options) => {
+      debug("replaceXRanges", comp, options);
+      return comp.split(/\s+/).map((c) => replaceXRange(c, options)).join(" ");
+    }, "replaceXRanges");
+    var replaceXRange = /* @__PURE__ */ __name((comp, options) => {
+      comp = comp.trim();
+      const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE];
+      return comp.replace(r, (ret, gtlt, M, m, p, pr) => {
+        debug("xRange", comp, ret, gtlt, M, m, p, pr);
+        const xM = isX(M);
+        const xm = xM || isX(m);
+        const xp = xm || isX(p);
+        const anyX = xp;
+        if (gtlt === "=" && anyX) {
+          gtlt = "";
+        }
+        pr = options.includePrerelease ? "-0" : "";
+        if (xM) {
+          if (gtlt === ">" || gtlt === "<") {
+            ret = "<0.0.0-0";
+          } else {
+            ret = "*";
+          }
+        } else if (gtlt && anyX) {
+          if (xm) {
+            m = 0;
+          }
+          p = 0;
+          if (gtlt === ">") {
+            gtlt = ">=";
+            if (xm) {
+              M = +M + 1;
+              m = 0;
+              p = 0;
+            } else {
+              m = +m + 1;
+              p = 0;
+            }
+          } else if (gtlt === "<=") {
+            gtlt = "<";
+            if (xm) {
+              M = +M + 1;
+            } else {
+              m = +m + 1;
+            }
+          }
+          if (gtlt === "<") {
+            pr = "-0";
+          }
+          ret = `${gtlt + M}.${m}.${p}${pr}`;
+        } else if (xm) {
+          ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`;
+        } else if (xp) {
+          ret = `>=${M}.${m}.0${pr} <${M}.${+m + 1}.0-0`;
+        }
+        debug("xRange return", ret);
+        return ret;
+      });
+    }, "replaceXRange");
+    var replaceStars = /* @__PURE__ */ __name((comp, options) => {
+      debug("replaceStars", comp, options);
+      return comp.trim().replace(re[t.STAR], "");
+    }, "replaceStars");
+    var replaceGTE0 = /* @__PURE__ */ __name((comp, options) => {
+      debug("replaceGTE0", comp, options);
+      return comp.trim().replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], "");
+    }, "replaceGTE0");
+    var hyphenReplace = /* @__PURE__ */ __name((incPr) => ($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr) => {
+      if (isX(fM)) {
+        from = "";
+      } else if (isX(fm)) {
+        from = `>=${fM}.0.0${incPr ? "-0" : ""}`;
+      } else if (isX(fp)) {
+        from = `>=${fM}.${fm}.0${incPr ? "-0" : ""}`;
+      } else if (fpr) {
+        from = `>=${from}`;
+      } else {
+        from = `>=${from}${incPr ? "-0" : ""}`;
+      }
+      if (isX(tM)) {
+        to = "";
+      } else if (isX(tm)) {
+        to = `<${+tM + 1}.0.0-0`;
+      } else if (isX(tp)) {
+        to = `<${tM}.${+tm + 1}.0-0`;
+      } else if (tpr) {
+        to = `<=${tM}.${tm}.${tp}-${tpr}`;
+      } else if (incPr) {
+        to = `<${tM}.${tm}.${+tp + 1}-0`;
+      } else {
+        to = `<=${to}`;
+      }
+      return `${from} ${to}`.trim();
+    }, "hyphenReplace");
+    var testSet = /* @__PURE__ */ __name((set, version, options) => {
+      for (let i = 0; i < set.length; i++) {
+        if (!set[i].test(version)) {
+          return false;
+        }
+      }
+      if (version.prerelease.length && !options.includePrerelease) {
+        for (let i = 0; i < set.length; i++) {
+          debug(set[i].semver);
+          if (set[i].semver === Comparator.ANY) {
+            continue;
+          }
+          if (set[i].semver.prerelease.length > 0) {
+            const allowed = set[i].semver;
+            if (allowed.major === version.major && allowed.minor === version.minor && allowed.patch === version.patch) {
+              return true;
+            }
+          }
+        }
+        return false;
+      }
+      return true;
+    }, "testSet");
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/comparator.js
+var require_comparator = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/comparator.js"(exports2, module2) {
+    "use strict";
+    var ANY = Symbol("SemVer ANY");
+    var Comparator = class _Comparator {
+      static {
+        __name(this, "Comparator");
+      }
+      static get ANY() {
+        return ANY;
+      }
+      constructor(comp, options) {
+        options = parseOptions(options);
+        if (comp instanceof _Comparator) {
+          if (comp.loose === !!options.loose) {
+            return comp;
+          } else {
+            comp = comp.value;
+          }
+        }
+        comp = comp.trim().split(/\s+/).join(" ");
+        debug("comparator", comp, options);
+        this.options = options;
+        this.loose = !!options.loose;
+        this.parse(comp);
+        if (this.semver === ANY) {
+          this.value = "";
+        } else {
+          this.value = this.operator + this.semver.version;
+        }
+        debug("comp", this);
+      }
+      parse(comp) {
+        const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR];
+        const m = comp.match(r);
+        if (!m) {
+          throw new TypeError(`Invalid comparator: ${comp}`);
+        }
+        this.operator = m[1] !== void 0 ? m[1] : "";
+        if (this.operator === "=") {
+          this.operator = "";
+        }
+        if (!m[2]) {
+          this.semver = ANY;
+        } else {
+          this.semver = new SemVer(m[2], this.options.loose);
+        }
+      }
+      toString() {
+        return this.value;
+      }
+      test(version) {
+        debug("Comparator.test", version, this.options.loose);
+        if (this.semver === ANY || version === ANY) {
+          return true;
+        }
+        if (typeof version === "string") {
+          try {
+            version = new SemVer(version, this.options);
+          } catch (er) {
+            return false;
+          }
+        }
+        return cmp(version, this.operator, this.semver, this.options);
+      }
+      intersects(comp, options) {
+        if (!(comp instanceof _Comparator)) {
+          throw new TypeError("a Comparator is required");
+        }
+        if (this.operator === "") {
+          if (this.value === "") {
+            return true;
+          }
+          return new Range(comp.value, options).test(this.value);
+        } else if (comp.operator === "") {
+          if (comp.value === "") {
+            return true;
+          }
+          return new Range(this.value, options).test(comp.semver);
+        }
+        options = parseOptions(options);
+        if (options.includePrerelease && (this.value === "<0.0.0-0" || comp.value === "<0.0.0-0")) {
+          return false;
+        }
+        if (!options.includePrerelease && (this.value.startsWith("<0.0.0") || comp.value.startsWith("<0.0.0"))) {
+          return false;
+        }
+        if (this.operator.startsWith(">") && comp.operator.startsWith(">")) {
+          return true;
+        }
+        if (this.operator.startsWith("<") && comp.operator.startsWith("<")) {
+          return true;
+        }
+        if (this.semver.version === comp.semver.version && this.operator.includes("=") && comp.operator.includes("=")) {
+          return true;
+        }
+        if (cmp(this.semver, "<", comp.semver, options) && this.operator.startsWith(">") && comp.operator.startsWith("<")) {
+          return true;
+        }
+        if (cmp(this.semver, ">", comp.semver, options) && this.operator.startsWith("<") && comp.operator.startsWith(">")) {
+          return true;
+        }
+        return false;
+      }
+    };
+    module2.exports = Comparator;
+    var parseOptions = require_parse_options();
+    var { safeRe: re, t } = require_re();
+    var cmp = require_cmp();
+    var debug = require_debug();
+    var SemVer = require_semver();
+    var Range = require_range();
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/satisfies.js
+var require_satisfies = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/satisfies.js"(exports2, module2) {
+    "use strict";
+    var Range = require_range();
+    var satisfies = /* @__PURE__ */ __name((version, range, options) => {
+      try {
+        range = new Range(range, options);
+      } catch (er) {
+        return false;
+      }
+      return range.test(version);
+    }, "satisfies");
+    module2.exports = satisfies;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/to-comparators.js
+var require_to_comparators = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/to-comparators.js"(exports2, module2) {
+    "use strict";
+    var Range = require_range();
+    var toComparators = /* @__PURE__ */ __name((range, options) => new Range(range, options).set.map((comp) => comp.map((c) => c.value).join(" ").trim().split(" ")), "toComparators");
+    module2.exports = toComparators;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/max-satisfying.js
+var require_max_satisfying = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/max-satisfying.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var Range = require_range();
+    var maxSatisfying = /* @__PURE__ */ __name((versions, range, options) => {
+      let max = null;
+      let maxSV = null;
+      let rangeObj = null;
+      try {
+        rangeObj = new Range(range, options);
+      } catch (er) {
+        return null;
+      }
+      versions.forEach((v) => {
+        if (rangeObj.test(v)) {
+          if (!max || maxSV.compare(v) === -1) {
+            max = v;
+            maxSV = new SemVer(max, options);
+          }
+        }
+      });
+      return max;
+    }, "maxSatisfying");
+    module2.exports = maxSatisfying;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-satisfying.js
+var require_min_satisfying = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-satisfying.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var Range = require_range();
+    var minSatisfying = /* @__PURE__ */ __name((versions, range, options) => {
+      let min = null;
+      let minSV = null;
+      let rangeObj = null;
+      try {
+        rangeObj = new Range(range, options);
+      } catch (er) {
+        return null;
+      }
+      versions.forEach((v) => {
+        if (rangeObj.test(v)) {
+          if (!min || minSV.compare(v) === 1) {
+            min = v;
+            minSV = new SemVer(min, options);
+          }
+        }
+      });
+      return min;
+    }, "minSatisfying");
+    module2.exports = minSatisfying;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-version.js
+var require_min_version = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-version.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var Range = require_range();
+    var gt = require_gt();
+    var minVersion = /* @__PURE__ */ __name((range, loose) => {
+      range = new Range(range, loose);
+      let minver = new SemVer("0.0.0");
+      if (range.test(minver)) {
+        return minver;
+      }
+      minver = new SemVer("0.0.0-0");
+      if (range.test(minver)) {
+        return minver;
+      }
+      minver = null;
+      for (let i = 0; i < range.set.length; ++i) {
+        const comparators = range.set[i];
+        let setMin = null;
+        comparators.forEach((comparator) => {
+          const compver = new SemVer(comparator.semver.version);
+          switch (comparator.operator) {
+            case ">":
+              if (compver.prerelease.length === 0) {
+                compver.patch++;
+              } else {
+                compver.prerelease.push(0);
+              }
+              compver.raw = compver.format();
+            /* fallthrough */
+            case "":
+            case ">=":
+              if (!setMin || gt(compver, setMin)) {
+                setMin = compver;
+              }
+              break;
+            case "<":
+            case "<=":
+              break;
+            /* istanbul ignore next */
+            default:
+              throw new Error(`Unexpected operation: ${comparator.operator}`);
+          }
+        });
+        if (setMin && (!minver || gt(minver, setMin))) {
+          minver = setMin;
+        }
+      }
+      if (minver && range.test(minver)) {
+        return minver;
+      }
+      return null;
+    }, "minVersion");
+    module2.exports = minVersion;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/valid.js
+var require_valid2 = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/valid.js"(exports2, module2) {
+    "use strict";
+    var Range = require_range();
+    var validRange = /* @__PURE__ */ __name((range, options) => {
+      try {
+        return new Range(range, options).range || "*";
+      } catch (er) {
+        return null;
+      }
+    }, "validRange");
+    module2.exports = validRange;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/outside.js
+var require_outside = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/outside.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var Comparator = require_comparator();
+    var { ANY } = Comparator;
+    var Range = require_range();
+    var satisfies = require_satisfies();
+    var gt = require_gt();
+    var lt = require_lt();
+    var lte = require_lte();
+    var gte = require_gte();
+    var outside = /* @__PURE__ */ __name((version, range, hilo, options) => {
+      version = new SemVer(version, options);
+      range = new Range(range, options);
+      let gtfn, ltefn, ltfn, comp, ecomp;
+      switch (hilo) {
+        case ">":
+          gtfn = gt;
+          ltefn = lte;
+          ltfn = lt;
+          comp = ">";
+          ecomp = ">=";
+          break;
+        case "<":
+          gtfn = lt;
+          ltefn = gte;
+          ltfn = gt;
+          comp = "<";
+          ecomp = "<=";
+          break;
+        default:
+          throw new TypeError('Must provide a hilo val of "<" or ">"');
+      }
+      if (satisfies(version, range, options)) {
+        return false;
+      }
+      for (let i = 0; i < range.set.length; ++i) {
+        const comparators = range.set[i];
+        let high = null;
+        let low = null;
+        comparators.forEach((comparator) => {
+          if (comparator.semver === ANY) {
+            comparator = new Comparator(">=0.0.0");
+          }
+          high = high || comparator;
+          low = low || comparator;
+          if (gtfn(comparator.semver, high.semver, options)) {
+            high = comparator;
+          } else if (ltfn(comparator.semver, low.semver, options)) {
+            low = comparator;
+          }
+        });
+        if (high.operator === comp || high.operator === ecomp) {
+          return false;
+        }
+        if ((!low.operator || low.operator === comp) && ltefn(version, low.semver)) {
+          return false;
+        } else if (low.operator === ecomp && ltfn(version, low.semver)) {
+          return false;
+        }
+      }
+      return true;
+    }, "outside");
+    module2.exports = outside;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/gtr.js
+var require_gtr = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/gtr.js"(exports2, module2) {
+    "use strict";
+    var outside = require_outside();
+    var gtr = /* @__PURE__ */ __name((version, range, options) => outside(version, range, ">", options), "gtr");
+    module2.exports = gtr;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/ltr.js
+var require_ltr = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/ltr.js"(exports2, module2) {
+    "use strict";
+    var outside = require_outside();
+    var ltr = /* @__PURE__ */ __name((version, range, options) => outside(version, range, "<", options), "ltr");
+    module2.exports = ltr;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/intersects.js
+var require_intersects = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/intersects.js"(exports2, module2) {
+    "use strict";
+    var Range = require_range();
+    var intersects = /* @__PURE__ */ __name((r1, r2, options) => {
+      r1 = new Range(r1, options);
+      r2 = new Range(r2, options);
+      return r1.intersects(r2, options);
+    }, "intersects");
+    module2.exports = intersects;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/simplify.js
+var require_simplify = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/simplify.js"(exports2, module2) {
+    "use strict";
+    var satisfies = require_satisfies();
+    var compare = require_compare();
+    module2.exports = (versions, range, options) => {
+      const set = [];
+      let first = null;
+      let prev = null;
+      const v = versions.sort((a, b) => compare(a, b, options));
+      for (const version of v) {
+        const included = satisfies(version, range, options);
+        if (included) {
+          prev = version;
+          if (!first) {
+            first = version;
+          }
+        } else {
+          if (prev) {
+            set.push([first, prev]);
+          }
+          prev = null;
+          first = null;
+        }
+      }
+      if (first) {
+        set.push([first, null]);
+      }
+      const ranges = [];
+      for (const [min, max] of set) {
+        if (min === max) {
+          ranges.push(min);
+        } else if (!max && min === v[0]) {
+          ranges.push("*");
+        } else if (!max) {
+          ranges.push(`>=${min}`);
+        } else if (min === v[0]) {
+          ranges.push(`<=${max}`);
+        } else {
+          ranges.push(`${min} - ${max}`);
+        }
+      }
+      const simplified = ranges.join(" || ");
+      const original = typeof range.raw === "string" ? range.raw : String(range);
+      return simplified.length < original.length ? simplified : range;
+    };
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/subset.js
+var require_subset = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/subset.js"(exports2, module2) {
+    "use strict";
+    var Range = require_range();
+    var Comparator = require_comparator();
+    var { ANY } = Comparator;
+    var satisfies = require_satisfies();
+    var compare = require_compare();
+    var subset = /* @__PURE__ */ __name((sub, dom, options = {}) => {
+      if (sub === dom) {
+        return true;
+      }
+      sub = new Range(sub, options);
+      dom = new Range(dom, options);
+      let sawNonNull = false;
+      OUTER: for (const simpleSub of sub.set) {
+        for (const simpleDom of dom.set) {
+          const isSub = simpleSubset(simpleSub, simpleDom, options);
+          sawNonNull = sawNonNull || isSub !== null;
+          if (isSub) {
+            continue OUTER;
+          }
+        }
+        if (sawNonNull) {
+          return false;
+        }
+      }
+      return true;
+    }, "subset");
+    var minimumVersionWithPreRelease = [new Comparator(">=0.0.0-0")];
+    var minimumVersion = [new Comparator(">=0.0.0")];
+    var simpleSubset = /* @__PURE__ */ __name((sub, dom, options) => {
+      if (sub === dom) {
+        return true;
+      }
+      if (sub.length === 1 && sub[0].semver === ANY) {
+        if (dom.length === 1 && dom[0].semver === ANY) {
+          return true;
+        } else if (options.includePrerelease) {
+          sub = minimumVersionWithPreRelease;
+        } else {
+          sub = minimumVersion;
+        }
+      }
+      if (dom.length === 1 && dom[0].semver === ANY) {
+        if (options.includePrerelease) {
+          return true;
+        } else {
+          dom = minimumVersion;
+        }
+      }
+      const eqSet = /* @__PURE__ */ new Set();
+      let gt, lt;
+      for (const c of sub) {
+        if (c.operator === ">" || c.operator === ">=") {
+          gt = higherGT(gt, c, options);
+        } else if (c.operator === "<" || c.operator === "<=") {
+          lt = lowerLT(lt, c, options);
+        } else {
+          eqSet.add(c.semver);
+        }
+      }
+      if (eqSet.size > 1) {
+        return null;
+      }
+      let gtltComp;
+      if (gt && lt) {
+        gtltComp = compare(gt.semver, lt.semver, options);
+        if (gtltComp > 0) {
+          return null;
+        } else if (gtltComp === 0 && (gt.operator !== ">=" || lt.operator !== "<=")) {
+          return null;
+        }
+      }
+      for (const eq of eqSet) {
+        if (gt && !satisfies(eq, String(gt), options)) {
+          return null;
+        }
+        if (lt && !satisfies(eq, String(lt), options)) {
+          return null;
+        }
+        for (const c of dom) {
+          if (!satisfies(eq, String(c), options)) {
+            return false;
+          }
+        }
+        return true;
+      }
+      let higher, lower;
+      let hasDomLT, hasDomGT;
+      let needDomLTPre = lt && !options.includePrerelease && lt.semver.prerelease.length ? lt.semver : false;
+      let needDomGTPre = gt && !options.includePrerelease && gt.semver.prerelease.length ? gt.semver : false;
+      if (needDomLTPre && needDomLTPre.prerelease.length === 1 && lt.operator === "<" && needDomLTPre.prerelease[0] === 0) {
+        needDomLTPre = false;
+      }
+      for (const c of dom) {
+        hasDomGT = hasDomGT || c.operator === ">" || c.operator === ">=";
+        hasDomLT = hasDomLT || c.operator === "<" || c.operator === "<=";
+        if (gt) {
+          if (needDomGTPre) {
+            if (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomGTPre.major && c.semver.minor === needDomGTPre.minor && c.semver.patch === needDomGTPre.patch) {
+              needDomGTPre = false;
+            }
+          }
+          if (c.operator === ">" || c.operator === ">=") {
+            higher = higherGT(gt, c, options);
+            if (higher === c && higher !== gt) {
+              return false;
+            }
+          } else if (gt.operator === ">=" && !satisfies(gt.semver, String(c), options)) {
+            return false;
+          }
+        }
+        if (lt) {
+          if (needDomLTPre) {
+            if (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomLTPre.major && c.semver.minor === needDomLTPre.minor && c.semver.patch === needDomLTPre.patch) {
+              needDomLTPre = false;
+            }
+          }
+          if (c.operator === "<" || c.operator === "<=") {
+            lower = lowerLT(lt, c, options);
+            if (lower === c && lower !== lt) {
+              return false;
+            }
+          } else if (lt.operator === "<=" && !satisfies(lt.semver, String(c), options)) {
+            return false;
+          }
+        }
+        if (!c.operator && (lt || gt) && gtltComp !== 0) {
+          return false;
+        }
+      }
+      if (gt && hasDomLT && !lt && gtltComp !== 0) {
+        return false;
+      }
+      if (lt && hasDomGT && !gt && gtltComp !== 0) {
+        return false;
+      }
+      if (needDomGTPre || needDomLTPre) {
+        return false;
+      }
+      return true;
+    }, "simpleSubset");
+    var higherGT = /* @__PURE__ */ __name((a, b, options) => {
+      if (!a) {
+        return b;
+      }
+      const comp = compare(a.semver, b.semver, options);
+      return comp > 0 ? a : comp < 0 ? b : b.operator === ">" && a.operator === ">=" ? b : a;
+    }, "higherGT");
+    var lowerLT = /* @__PURE__ */ __name((a, b, options) => {
+      if (!a) {
+        return b;
+      }
+      const comp = compare(a.semver, b.semver, options);
+      return comp < 0 ? a : comp > 0 ? b : b.operator === "<" && a.operator === "<=" ? b : a;
+    }, "lowerLT");
+    module2.exports = subset;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/index.js
+var require_semver2 = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/index.js"(exports2, module2) {
+    "use strict";
+    var internalRe = require_re();
+    var constants = require_constants();
+    var SemVer = require_semver();
+    var identifiers = require_identifiers();
+    var parse = require_parse();
+    var valid = require_valid();
+    var clean = require_clean();
+    var inc = require_inc();
+    var diff = require_diff();
+    var major = require_major();
+    var minor = require_minor();
+    var patch = require_patch();
+    var prerelease = require_prerelease();
+    var compare = require_compare();
+    var rcompare = require_rcompare();
+    var compareLoose = require_compare_loose();
+    var compareBuild = require_compare_build();
+    var sort = require_sort();
+    var rsort = require_rsort();
+    var gt = require_gt();
+    var lt = require_lt();
+    var eq = require_eq();
+    var neq = require_neq();
+    var gte = require_gte();
+    var lte = require_lte();
+    var cmp = require_cmp();
+    var coerce = require_coerce();
+    var Comparator = require_comparator();
+    var Range = require_range();
+    var satisfies = require_satisfies();
+    var toComparators = require_to_comparators();
+    var maxSatisfying = require_max_satisfying();
+    var minSatisfying = require_min_satisfying();
+    var minVersion = require_min_version();
+    var validRange = require_valid2();
+    var outside = require_outside();
+    var gtr = require_gtr();
+    var ltr = require_ltr();
+    var intersects = require_intersects();
+    var simplifyRange = require_simplify();
+    var subset = require_subset();
+    module2.exports = {
+      parse,
+      valid,
+      clean,
+      inc,
+      diff,
+      major,
+      minor,
+      patch,
+      prerelease,
+      compare,
+      rcompare,
+      compareLoose,
+      compareBuild,
+      sort,
+      rsort,
+      gt,
+      lt,
+      eq,
+      neq,
+      gte,
+      lte,
+      cmp,
+      coerce,
+      Comparator,
+      Range,
+      satisfies,
+      toComparators,
+      maxSatisfying,
+      minSatisfying,
+      minVersion,
+      validRange,
+      outside,
+      gtr,
+      ltr,
+      intersects,
+      simplifyRange,
+      subset,
+      SemVer,
+      re: internalRe.re,
+      src: internalRe.src,
+      tokens: internalRe.t,
+      SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,
+      RELEASE_TYPES: constants.RELEASE_TYPES,
+      compareIdentifiers: identifiers.compareIdentifiers,
+      rcompareIdentifiers: identifiers.rcompareIdentifiers
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/lines-to-revs.js
+var require_lines_to_revs = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/lines-to-revs.js"(exports2, module2) {
+    var semver = require_semver2();
+    module2.exports = (lines) => finish(lines.reduce(linesToRevsReducer, {
+      versions: {},
+      "dist-tags": {},
+      refs: {},
+      shas: {}
+    }));
+    var finish = /* @__PURE__ */ __name((revs) => distTags(shaList(peelTags(revs))), "finish");
+    var shaList = /* @__PURE__ */ __name((revs) => {
+      Object.keys(revs.refs).forEach((ref) => {
+        const doc = revs.refs[ref];
+        if (!revs.shas[doc.sha]) {
+          revs.shas[doc.sha] = [ref];
+        } else {
+          revs.shas[doc.sha].push(ref);
+        }
+      });
+      return revs;
+    }, "shaList");
+    var peelTags = /* @__PURE__ */ __name((revs) => {
+      Object.keys(revs.refs).filter((ref) => ref.endsWith("^{}")).forEach((ref) => {
+        const peeled = revs.refs[ref];
+        const unpeeled = revs.refs[ref.replace(/\^\{\}$/, "")];
+        if (unpeeled) {
+          unpeeled.sha = peeled.sha;
+          delete revs.refs[ref];
+        }
+      });
+      return revs;
+    }, "peelTags");
+    var distTags = /* @__PURE__ */ __name((revs) => {
+      const HEAD = revs.refs.HEAD || /* istanbul ignore next */
+      {};
+      const versions = Object.keys(revs.versions);
+      versions.forEach((v) => {
+        const ver = revs.versions[v];
+        if (revs.refs.latest && ver.sha === revs.refs.latest.sha) {
+          revs["dist-tags"].latest = v;
+        } else if (ver.sha === HEAD.sha) {
+          revs["dist-tags"].HEAD = v;
+          if (!revs.refs.latest) {
+            revs["dist-tags"].latest = v;
+          }
+        }
+      });
+      return revs;
+    }, "distTags");
+    var refType = /* @__PURE__ */ __name((ref) => {
+      if (ref.startsWith("refs/tags/")) {
+        return "tag";
+      }
+      if (ref.startsWith("refs/heads/")) {
+        return "branch";
+      }
+      if (ref.startsWith("refs/pull/")) {
+        return "pull";
+      }
+      if (ref === "HEAD") {
+        return "head";
+      }
+      return "other";
+    }, "refType");
+    var lineToRevDoc = /* @__PURE__ */ __name((line) => {
+      const split = line.trim().split(/\s+/, 2);
+      if (split.length < 2) {
+        return null;
+      }
+      const sha = split[0].trim();
+      const rawRef = split[1].trim();
+      const type = refType(rawRef);
+      if (type === "tag") {
+        const ref = rawRef.slice("refs/tags/".length);
+        return { sha, ref, rawRef, type };
+      }
+      if (type === "branch") {
+        const ref = rawRef.slice("refs/heads/".length);
+        return { sha, ref, rawRef, type };
+      }
+      if (type === "pull") {
+        const ref = rawRef.slice("refs/".length).replace(/\/head$/, "");
+        return { sha, ref, rawRef, type };
+      }
+      if (type === "head") {
+        const ref = "HEAD";
+        return { sha, ref, rawRef, type };
+      }
+      return { sha, ref: rawRef, rawRef, type };
+    }, "lineToRevDoc");
+    var linesToRevsReducer = /* @__PURE__ */ __name((revs, line) => {
+      const doc = lineToRevDoc(line);
+      if (!doc) {
+        return revs;
+      }
+      revs.refs[doc.ref] = doc;
+      revs.refs[doc.rawRef] = doc;
+      if (doc.type === "tag") {
+        const match = !doc.ref.endsWith("^{}") && doc.ref.match(/v?(\d+\.\d+\.\d+(?:[-+].+)?)$/);
+        if (match && semver.valid(match[1], true)) {
+          revs.versions[semver.clean(match[1], true)] = doc;
+        }
+      }
+      return revs;
+    }, "linesToRevsReducer");
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/revs.js
+var require_revs = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/revs.js"(exports2, module2) {
+    var spawn = require_spawn();
+    var { LRUCache } = require_commonjs();
+    var linesToRevs = require_lines_to_revs();
+    var revsCache = new LRUCache({
+      max: 100,
+      ttl: 5 * 60 * 1e3
+    });
+    module2.exports = async (repo, opts = {}) => {
+      if (!opts.noGitRevCache) {
+        const cached = revsCache.get(repo);
+        if (cached) {
+          return cached;
+        }
+      }
+      const { stdout } = await spawn(["ls-remote", repo], opts);
+      const revs = linesToRevs(stdout.trim().split("\n"));
+      revsCache.set(repo, revs);
+      return revs;
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/utils.js
+var require_utils = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/utils.js"(exports2) {
+    var isWindows = /* @__PURE__ */ __name((opts) => (opts.fakePlatform || process.platform) === "win32", "isWindows");
+    exports2.isWindows = isWindows;
+  }
+});
+
+// node_modules/.pnpm/validate-npm-package-name@6.0.2/node_modules/validate-npm-package-name/lib/index.js
+var require_lib6 = __commonJS({
+  "node_modules/.pnpm/validate-npm-package-name@6.0.2/node_modules/validate-npm-package-name/lib/index.js"(exports2, module2) {
+    "use strict";
+    var { builtinModules: builtins } = require("module");
+    var scopedPackagePattern = new RegExp("^(?:@([^/]+?)[/])?([^/]+?)$");
+    var exclusionList = [
+      "node_modules",
+      "favicon.ico"
+    ];
+    function validate(name) {
+      var warnings = [];
+      var errors = [];
+      if (name === null) {
+        errors.push("name cannot be null");
+        return done(warnings, errors);
+      }
+      if (name === void 0) {
+        errors.push("name cannot be undefined");
+        return done(warnings, errors);
+      }
+      if (typeof name !== "string") {
+        errors.push("name must be a string");
+        return done(warnings, errors);
+      }
+      if (!name.length) {
+        errors.push("name length must be greater than zero");
+      }
+      if (name.startsWith(".")) {
+        errors.push("name cannot start with a period");
+      }
+      if (name.match(/^_/)) {
+        errors.push("name cannot start with an underscore");
+      }
+      if (name.trim() !== name) {
+        errors.push("name cannot contain leading or trailing spaces");
+      }
+      exclusionList.forEach(function(excludedName) {
+        if (name.toLowerCase() === excludedName) {
+          errors.push(excludedName + " is not a valid package name");
+        }
+      });
+      if (builtins.includes(name.toLowerCase())) {
+        warnings.push(name + " is a core module name");
+      }
+      if (name.length > 214) {
+        warnings.push("name can no longer contain more than 214 characters");
+      }
+      if (name.toLowerCase() !== name) {
+        warnings.push("name can no longer contain capital letters");
+      }
+      if (/[~'!()*]/.test(name.split("/").slice(-1)[0])) {
+        warnings.push(`name can no longer contain special characters ("~'!()*")`);
+      }
+      if (encodeURIComponent(name) !== name) {
+        var nameMatch = name.match(scopedPackagePattern);
+        if (nameMatch) {
+          var user = nameMatch[1];
+          var pkg = nameMatch[2];
+          if (pkg.startsWith(".")) {
+            errors.push("name cannot start with a period");
+          }
+          if (encodeURIComponent(user) === user && encodeURIComponent(pkg) === pkg) {
+            return done(warnings, errors);
+          }
+        }
+        errors.push("name can only contain URL-friendly characters");
+      }
+      return done(warnings, errors);
+    }
+    __name(validate, "validate");
+    var done = /* @__PURE__ */ __name(function(warnings, errors) {
+      var result = {
+        validForNewPackages: errors.length === 0 && warnings.length === 0,
+        validForOldPackages: errors.length === 0,
+        warnings,
+        errors
+      };
+      if (!result.warnings.length) {
+        delete result.warnings;
+      }
+      if (!result.errors.length) {
+        delete result.errors;
+      }
+      return result;
+    }, "done");
+    module2.exports = validate;
+  }
+});
+
+// node_modules/.pnpm/npm-package-arg@12.0.2/node_modules/npm-package-arg/lib/npa.js
+var require_npa = __commonJS({
+  "node_modules/.pnpm/npm-package-arg@12.0.2/node_modules/npm-package-arg/lib/npa.js"(exports2, module2) {
+    "use strict";
+    var isWindows = process.platform === "win32";
+    var { URL: URL2 } = require("node:url");
+    var path = isWindows ? require("node:path/win32") : require("node:path");
+    var { homedir } = require("node:os");
+    var HostedGit = require_lib3();
+    var semver = require_semver2();
+    var validatePackageName = require_lib6();
+    var { log } = require_lib2();
+    var hasSlashes = isWindows ? /\\|[/]/ : /[/]/;
+    var isURL = /^(?:git[+])?[a-z]+:/i;
+    var isGit = /^[^@]+@[^:.]+\.[^:]+:.+$/i;
+    var isFileType = /[.](?:tgz|tar.gz|tar)$/i;
+    var isPortNumber = /:[0-9]+(\/|$)/i;
+    var isWindowsFile = /^(?:[.]|~[/]|[/\\]|[a-zA-Z]:)/;
+    var isPosixFile = /^(?:[.]|~[/]|[/]|[a-zA-Z]:)/;
+    var defaultRegistry = "https://registry.npmjs.org";
+    function npa(arg, where) {
+      let name;
+      let spec;
+      if (typeof arg === "object") {
+        if (arg instanceof Result && (!where || where === arg.where)) {
+          return arg;
+        } else if (arg.name && arg.rawSpec) {
+          return npa.resolve(arg.name, arg.rawSpec, where || arg.where);
+        } else {
+          return npa(arg.raw, where || arg.where);
+        }
+      }
+      const nameEndsAt = arg.indexOf("@", 1);
+      const namePart = nameEndsAt > 0 ? arg.slice(0, nameEndsAt) : arg;
+      if (isURL.test(arg)) {
+        spec = arg;
+      } else if (isGit.test(arg)) {
+        spec = `git+ssh://${arg}`;
+      } else if (!namePart.startsWith("@") && (hasSlashes.test(namePart) || isFileType.test(namePart))) {
+        spec = arg;
+      } else if (nameEndsAt > 0) {
+        name = namePart;
+        spec = arg.slice(nameEndsAt + 1) || "*";
+      } else {
+        const valid = validatePackageName(arg);
+        if (valid.validForOldPackages) {
+          name = arg;
+          spec = "*";
+        } else {
+          spec = arg;
+        }
+      }
+      return resolve(name, spec, where, arg);
+    }
+    __name(npa, "npa");
+    function isFileSpec(spec) {
+      if (!spec) {
+        return false;
+      }
+      if (spec.toLowerCase().startsWith("file:")) {
+        return true;
+      }
+      if (isWindows) {
+        return isWindowsFile.test(spec);
+      }
+      return isPosixFile.test(spec);
+    }
+    __name(isFileSpec, "isFileSpec");
+    function isAliasSpec(spec) {
+      if (!spec) {
+        return false;
+      }
+      return spec.toLowerCase().startsWith("npm:");
+    }
+    __name(isAliasSpec, "isAliasSpec");
+    function resolve(name, spec, where, arg) {
+      const res = new Result({
+        raw: arg,
+        name,
+        rawSpec: spec,
+        fromArgument: arg != null
+      });
+      if (name) {
+        res.name = name;
+      }
+      if (!where) {
+        where = process.cwd();
+      }
+      if (isFileSpec(spec)) {
+        return fromFile(res, where);
+      } else if (isAliasSpec(spec)) {
+        return fromAlias(res, where);
+      }
+      const hosted = HostedGit.fromUrl(spec, {
+        noGitPlus: true,
+        noCommittish: true
+      });
+      if (hosted) {
+        return fromHostedGit(res, hosted);
+      } else if (spec && isURL.test(spec)) {
+        return fromURL(res);
+      } else if (spec && (hasSlashes.test(spec) || isFileType.test(spec))) {
+        return fromFile(res, where);
+      } else {
+        return fromRegistry(res);
+      }
+    }
+    __name(resolve, "resolve");
+    function toPurl(arg, reg = defaultRegistry) {
+      const res = npa(arg);
+      if (res.type !== "version") {
+        throw invalidPurlType(res.type, res.raw);
+      }
+      let purl = "pkg:npm/" + res.name.replace(/^@/, "%40") + "@" + res.rawSpec;
+      if (reg !== defaultRegistry) {
+        purl += "?repository_url=" + reg;
+      }
+      return purl;
+    }
+    __name(toPurl, "toPurl");
+    function invalidPackageName(name, valid, raw) {
+      const err = new Error(`Invalid package name "${name}" of package "${raw}": ${valid.errors.join("; ")}.`);
+      err.code = "EINVALIDPACKAGENAME";
+      return err;
+    }
+    __name(invalidPackageName, "invalidPackageName");
+    function invalidTagName(name, raw) {
+      const err = new Error(`Invalid tag name "${name}" of package "${raw}": Tags may not have any characters that encodeURIComponent encodes.`);
+      err.code = "EINVALIDTAGNAME";
+      return err;
+    }
+    __name(invalidTagName, "invalidTagName");
+    function invalidPurlType(type, raw) {
+      const err = new Error(`Invalid type "${type}" of package "${raw}": Purl can only be generated for "version" types.`);
+      err.code = "EINVALIDPURLTYPE";
+      return err;
+    }
+    __name(invalidPurlType, "invalidPurlType");
+    var Result = class {
+      static {
+        __name(this, "Result");
+      }
+      constructor(opts) {
+        this.type = opts.type;
+        this.registry = opts.registry;
+        this.where = opts.where;
+        if (opts.raw == null) {
+          this.raw = opts.name ? `${opts.name}@${opts.rawSpec}` : opts.rawSpec;
+        } else {
+          this.raw = opts.raw;
+        }
+        this.name = void 0;
+        this.escapedName = void 0;
+        this.scope = void 0;
+        this.rawSpec = opts.rawSpec || "";
+        this.saveSpec = opts.saveSpec;
+        this.fetchSpec = opts.fetchSpec;
+        if (opts.name) {
+          this.setName(opts.name);
+        }
+        this.gitRange = opts.gitRange;
+        this.gitCommittish = opts.gitCommittish;
+        this.gitSubdir = opts.gitSubdir;
+        this.hosted = opts.hosted;
+      }
+      // TODO move this to a getter/setter in a semver major
+      setName(name) {
+        const valid = validatePackageName(name);
+        if (!valid.validForOldPackages) {
+          throw invalidPackageName(name, valid, this.raw);
+        }
+        this.name = name;
+        this.scope = name[0] === "@" ? name.slice(0, name.indexOf("/")) : void 0;
+        this.escapedName = name.replace("/", "%2f");
+        return this;
+      }
+      toString() {
+        const full = [];
+        if (this.name != null && this.name !== "") {
+          full.push(this.name);
+        }
+        const spec = this.saveSpec || this.fetchSpec || this.rawSpec;
+        if (spec != null && spec !== "") {
+          full.push(spec);
+        }
+        return full.length ? full.join("@") : this.raw;
+      }
+      toJSON() {
+        const result = Object.assign({}, this);
+        delete result.hosted;
+        return result;
+      }
+    };
+    function setGitAttrs(res, committish) {
+      if (!committish) {
+        res.gitCommittish = null;
+        return;
+      }
+      for (const part of committish.split("::")) {
+        if (!part.includes(":")) {
+          if (res.gitRange) {
+            throw new Error("cannot override existing semver range with a committish");
+          }
+          if (res.gitCommittish) {
+            throw new Error("cannot override existing committish with a second committish");
+          }
+          res.gitCommittish = part;
+          continue;
+        }
+        const [name, value] = part.split(":");
+        if (name === "semver") {
+          if (res.gitCommittish) {
+            throw new Error("cannot override existing committish with a semver range");
+          }
+          if (res.gitRange) {
+            throw new Error("cannot override existing semver range with a second semver range");
+          }
+          res.gitRange = decodeURIComponent(value);
+          continue;
+        }
+        if (name === "path") {
+          if (res.gitSubdir) {
+            throw new Error("cannot override existing path with a second path");
+          }
+          res.gitSubdir = `/${value}`;
+          continue;
+        }
+        log.warn("npm-package-arg", `ignoring unknown key "${name}"`);
+      }
+    }
+    __name(setGitAttrs, "setGitAttrs");
+    var encodedPathChars = /* @__PURE__ */ new Map([
+      ["\0", "%00"],
+      ["	", "%09"],
+      ["\n", "%0A"],
+      ["\r", "%0D"],
+      [" ", "%20"],
+      ['"', "%22"],
+      ["#", "%23"],
+      ["%", "%25"],
+      ["?", "%3F"],
+      ["[", "%5B"],
+      ["\\", isWindows ? "/" : "%5C"],
+      ["]", "%5D"],
+      ["^", "%5E"],
+      ["|", "%7C"],
+      ["~", "%7E"]
+    ]);
+    function pathToFileURL(str) {
+      let result = "";
+      for (let i = 0; i < str.length; i++) {
+        result = `${result}${encodedPathChars.get(str[i]) ?? str[i]}`;
+      }
+      if (result.startsWith("file:")) {
+        return result;
+      }
+      return `file:${result}`;
+    }
+    __name(pathToFileURL, "pathToFileURL");
+    function fromFile(res, where) {
+      res.type = isFileType.test(res.rawSpec) ? "file" : "directory";
+      res.where = where;
+      let rawSpec = pathToFileURL(res.rawSpec);
+      if (rawSpec.startsWith("file:/")) {
+        if (/^file:\/\/[^/]/.test(rawSpec)) {
+          rawSpec = `file:/${rawSpec.slice(5)}`;
+        }
+        if (/^\/{1,3}\.\.?(\/|$)/.test(rawSpec.slice(5))) {
+          rawSpec = rawSpec.replace(/^file:\/{1,3}/, "file:");
+        }
+      }
+      let resolvedUrl;
+      let specUrl;
+      try {
+        resolvedUrl = new URL2(rawSpec, `${pathToFileURL(path.resolve(where))}/`);
+        specUrl = new URL2(rawSpec);
+      } catch (originalError) {
+        const er = new Error("Invalid file: URL, must comply with RFC 8089");
+        throw Object.assign(er, {
+          raw: res.rawSpec,
+          spec: res,
+          where,
+          originalError
+        });
+      }
+      let specPath = decodeURIComponent(specUrl.pathname);
+      let resolvedPath = decodeURIComponent(resolvedUrl.pathname);
+      if (isWindows) {
+        specPath = specPath.replace(/^\/+([a-z]:\/)/i, "$1");
+        resolvedPath = resolvedPath.replace(/^\/+([a-z]:\/)/i, "$1");
+      }
+      if (/^\/~(\/|$)/.test(specPath)) {
+        res.saveSpec = `file:${specPath.substr(1)}`;
+        resolvedPath = path.resolve(homedir(), specPath.substr(3));
+      } else if (!path.isAbsolute(rawSpec.slice(5))) {
+        res.saveSpec = `file:${path.relative(where, resolvedPath)}`;
+      } else {
+        res.saveSpec = `file:${path.resolve(resolvedPath)}`;
+      }
+      res.fetchSpec = path.resolve(where, resolvedPath);
+      res.saveSpec = res.saveSpec.split("\\").join("/");
+      if (res.saveSpec.startsWith("file://")) {
+        res.saveSpec = `file:/${res.saveSpec.slice(7)}`;
+      }
+      return res;
+    }
+    __name(fromFile, "fromFile");
+    function fromHostedGit(res, hosted) {
+      res.type = "git";
+      res.hosted = hosted;
+      res.saveSpec = hosted.toString({ noGitPlus: false, noCommittish: false });
+      res.fetchSpec = hosted.getDefaultRepresentation() === "shortcut" ? null : hosted.toString();
+      setGitAttrs(res, hosted.committish);
+      return res;
+    }
+    __name(fromHostedGit, "fromHostedGit");
+    function unsupportedURLType(protocol, spec) {
+      const err = new Error(`Unsupported URL Type "${protocol}": ${spec}`);
+      err.code = "EUNSUPPORTEDPROTOCOL";
+      return err;
+    }
+    __name(unsupportedURLType, "unsupportedURLType");
+    function fromURL(res) {
+      let rawSpec = res.rawSpec;
+      res.saveSpec = rawSpec;
+      if (rawSpec.startsWith("git+ssh:")) {
+        const matched = rawSpec.match(/^git\+ssh:\/\/([^:#]+:[^#]+(?:\.git)?)(?:#(.*))?$/i);
+        if (matched && !matched[1].match(isPortNumber)) {
+          res.type = "git";
+          setGitAttrs(res, matched[2]);
+          res.fetchSpec = matched[1];
+          return res;
+        }
+      } else if (rawSpec.startsWith("git+file://")) {
+        rawSpec = rawSpec.replace(/\\/g, "/");
+      }
+      const parsedUrl = new URL2(rawSpec);
+      switch (parsedUrl.protocol) {
+        case "git:":
+        case "git+http:":
+        case "git+https:":
+        case "git+rsync:":
+        case "git+ftp:":
+        case "git+file:":
+        case "git+ssh:":
+          res.type = "git";
+          setGitAttrs(res, parsedUrl.hash.slice(1));
+          if (parsedUrl.protocol === "git+file:" && /^git\+file:\/\/[a-z]:/i.test(rawSpec)) {
+            res.fetchSpec = `git+file://${parsedUrl.host.toLowerCase()}:${parsedUrl.pathname}`;
+          } else {
+            parsedUrl.hash = "";
+            res.fetchSpec = parsedUrl.toString();
+          }
+          if (res.fetchSpec.startsWith("git+")) {
+            res.fetchSpec = res.fetchSpec.slice(4);
+          }
+          break;
+        case "http:":
+        case "https:":
+          res.type = "remote";
+          res.fetchSpec = res.saveSpec;
+          break;
+        default:
+          throw unsupportedURLType(parsedUrl.protocol, rawSpec);
+      }
+      return res;
+    }
+    __name(fromURL, "fromURL");
+    function fromAlias(res, where) {
+      const subSpec = npa(res.rawSpec.substr(4), where);
+      if (subSpec.type === "alias") {
+        throw new Error("nested aliases not supported");
+      }
+      if (!subSpec.registry) {
+        throw new Error("aliases only work for registry deps");
+      }
+      if (!subSpec.name) {
+        throw new Error("aliases must have a name");
+      }
+      res.subSpec = subSpec;
+      res.registry = true;
+      res.type = "alias";
+      res.saveSpec = null;
+      res.fetchSpec = null;
+      return res;
+    }
+    __name(fromAlias, "fromAlias");
+    function fromRegistry(res) {
+      res.registry = true;
+      const spec = res.rawSpec.trim();
+      res.saveSpec = null;
+      res.fetchSpec = spec;
+      const version = semver.valid(spec, true);
+      const range = semver.validRange(spec, true);
+      if (version) {
+        res.type = "version";
+      } else if (range) {
+        res.type = "range";
+      } else {
+        if (encodeURIComponent(spec) !== spec) {
+          throw invalidTagName(spec, res.raw);
+        }
+        res.type = "tag";
+      }
+      return res;
+    }
+    __name(fromRegistry, "fromRegistry");
+    module2.exports = npa;
+    module2.exports.resolve = resolve;
+    module2.exports.toPurl = toPurl;
+    module2.exports.Result = Result;
+  }
+});
+
+// node_modules/.pnpm/npm-install-checks@7.1.2/node_modules/npm-install-checks/lib/current-env.js
+var require_current_env = __commonJS({
+  "node_modules/.pnpm/npm-install-checks@7.1.2/node_modules/npm-install-checks/lib/current-env.js"(exports2, module2) {
+    var process2 = require("node:process");
+    var nodeOs = require("node:os");
+    var fs = require("node:fs");
+    function isMusl(file) {
+      return file.includes("libc.musl-") || file.includes("ld-musl-");
+    }
+    __name(isMusl, "isMusl");
+    function os() {
+      return process2.platform;
+    }
+    __name(os, "os");
+    function cpu() {
+      return process2.arch;
+    }
+    __name(cpu, "cpu");
+    var LDD_PATH = "/usr/bin/ldd";
+    function getFamilyFromFilesystem() {
+      try {
+        const content = fs.readFileSync(LDD_PATH, "utf-8");
+        if (content.includes("musl")) {
+          return "musl";
+        }
+        if (content.includes("GNU C Library")) {
+          return "glibc";
+        }
+        return null;
+      } catch {
+        return void 0;
+      }
+    }
+    __name(getFamilyFromFilesystem, "getFamilyFromFilesystem");
+    function getFamilyFromReport() {
+      const originalExclude = process2.report.excludeNetwork;
+      process2.report.excludeNetwork = true;
+      const report = process2.report.getReport();
+      process2.report.excludeNetwork = originalExclude;
+      if (report.header?.glibcVersionRuntime) {
+        family = "glibc";
+      } else if (Array.isArray(report.sharedObjects) && report.sharedObjects.some(isMusl)) {
+        family = "musl";
+      } else {
+        family = null;
+      }
+      return family;
+    }
+    __name(getFamilyFromReport, "getFamilyFromReport");
+    var family;
+    function libc(osName) {
+      if (osName !== "linux") {
+        return void 0;
+      }
+      if (family === void 0) {
+        family = getFamilyFromFilesystem();
+        if (family === void 0) {
+          family = getFamilyFromReport();
+        }
+      }
+      return family;
+    }
+    __name(libc, "libc");
+    function devEngines(env = {}) {
+      const osName = env.os || os();
+      return {
+        cpu: {
+          name: env.cpu || cpu()
+        },
+        libc: {
+          name: env.libc || libc(osName)
+        },
+        os: {
+          name: osName,
+          version: env.osVersion || nodeOs.release()
+        },
+        packageManager: {
+          name: "npm",
+          version: env.npmVersion
+        },
+        runtime: {
+          name: "node",
+          version: env.nodeVersion || process2.version
+        }
+      };
+    }
+    __name(devEngines, "devEngines");
+    module2.exports = {
+      cpu,
+      libc,
+      os,
+      devEngines
+    };
+  }
+});
+
+// node_modules/.pnpm/npm-install-checks@7.1.2/node_modules/npm-install-checks/lib/dev-engines.js
+var require_dev_engines = __commonJS({
+  "node_modules/.pnpm/npm-install-checks@7.1.2/node_modules/npm-install-checks/lib/dev-engines.js"(exports2, module2) {
+    var satisfies = require_satisfies();
+    var validRange = require_valid2();
+    var recognizedOnFail = [
+      "ignore",
+      "warn",
+      "error",
+      "download"
+    ];
+    var recognizedProperties = [
+      "name",
+      "version",
+      "onFail"
+    ];
+    var recognizedEngines = [
+      "packageManager",
+      "runtime",
+      "cpu",
+      "libc",
+      "os"
+    ];
+    function checkDependency(wanted, current, opts) {
+      const { engine } = opts;
+      if (typeof wanted !== "object" || wanted === null || Array.isArray(wanted)) {
+        throw new Error(`Invalid non-object value for "${engine}"`);
+      }
+      const properties = Object.keys(wanted);
+      for (const prop of properties) {
+        if (!recognizedProperties.includes(prop)) {
+          throw new Error(`Invalid property "${prop}" for "${engine}"`);
+        }
+      }
+      if (!properties.includes("name")) {
+        throw new Error(`Missing "name" property for "${engine}"`);
+      }
+      if (typeof wanted.name !== "string") {
+        throw new Error(`Invalid non-string value for "name" within "${engine}"`);
+      }
+      if (typeof current.name !== "string" || current.name === "") {
+        throw new Error(`Unable to determine "name" for "${engine}"`);
+      }
+      if (properties.includes("onFail")) {
+        if (typeof wanted.onFail !== "string") {
+          throw new Error(`Invalid non-string value for "onFail" within "${engine}"`);
+        }
+        if (!recognizedOnFail.includes(wanted.onFail)) {
+          throw new Error(`Invalid onFail value "${wanted.onFail}" for "${engine}"`);
+        }
+      }
+      if (wanted.name !== current.name) {
+        return new Error(
+          `Invalid name "${wanted.name}" does not match "${current.name}" for "${engine}"`
+        );
+      }
+      if (properties.includes("version")) {
+        if (typeof wanted.version !== "string") {
+          throw new Error(`Invalid non-string value for "version" within "${engine}"`);
+        }
+        if (typeof current.version !== "string" || current.version === "") {
+          throw new Error(`Unable to determine "version" for "${engine}" "${wanted.name}"`);
+        }
+        if (validRange(wanted.version)) {
+          if (!satisfies(current.version, wanted.version, opts.semver)) {
+            return new Error(
+              // eslint-disable-next-line max-len
+              `Invalid semver version "${wanted.version}" does not match "${current.version}" for "${engine}"`
+            );
+          }
+        } else if (wanted.version !== current.version) {
+          return new Error(
+            `Invalid version "${wanted.version}" does not match "${current.version}" for "${engine}"`
+          );
+        }
+      }
+    }
+    __name(checkDependency, "checkDependency");
+    function checkDevEngines(wanted, current = {}, opts = {}) {
+      if (typeof wanted !== "object" || wanted === null || Array.isArray(wanted)) {
+        throw new Error(`Invalid non-object value for "devEngines"`);
+      }
+      const errors = [];
+      for (const engine of Object.keys(wanted)) {
+        if (!recognizedEngines.includes(engine)) {
+          throw new Error(`Invalid property "devEngines.${engine}"`);
+        }
+        const dependencyAsAuthored = wanted[engine];
+        const dependencies = [dependencyAsAuthored].flat();
+        const currentEngine = current[engine] || {};
+        if (dependencies.length === 0) {
+          continue;
+        }
+        const depErrors = [];
+        for (const dep of dependencies) {
+          const result = checkDependency(dep, currentEngine, { ...opts, engine });
+          if (result) {
+            depErrors.push(result);
+          }
+        }
+        const invalid = depErrors.length === dependencies.length;
+        if (invalid) {
+          const lastDependency = dependencies[dependencies.length - 1];
+          let onFail = lastDependency.onFail || "error";
+          if (onFail === "download") {
+            onFail = "error";
+          }
+          const err = Object.assign(new Error(`Invalid devEngines.${engine}`), {
+            errors: depErrors,
+            engine,
+            isWarn: onFail === "warn",
+            isError: onFail === "error",
+            current: currentEngine,
+            required: dependencyAsAuthored
+          });
+          errors.push(err);
+        }
+      }
+      return errors;
+    }
+    __name(checkDevEngines, "checkDevEngines");
+    module2.exports = {
+      checkDevEngines
+    };
+  }
+});
+
+// node_modules/.pnpm/npm-install-checks@7.1.2/node_modules/npm-install-checks/lib/index.js
+var require_lib7 = __commonJS({
+  "node_modules/.pnpm/npm-install-checks@7.1.2/node_modules/npm-install-checks/lib/index.js"(exports2, module2) {
+    var semver = require_semver2();
+    var currentEnv = require_current_env();
+    var { checkDevEngines } = require_dev_engines();
+    var checkEngine = /* @__PURE__ */ __name((target, npmVer, nodeVer, force = false) => {
+      const nodev = force ? null : nodeVer;
+      const eng = target.engines;
+      const opt = { includePrerelease: true };
+      if (!eng) {
+        return;
+      }
+      const nodeFail = nodev && eng.node && !semver.satisfies(nodev, eng.node, opt);
+      const npmFail = npmVer && eng.npm && !semver.satisfies(npmVer, eng.npm, opt);
+      if (nodeFail || npmFail) {
+        throw Object.assign(new Error("Unsupported engine"), {
+          pkgid: target._id,
+          current: { node: nodeVer, npm: npmVer },
+          required: eng,
+          code: "EBADENGINE"
+        });
+      }
+    }, "checkEngine");
+    var checkPlatform = /* @__PURE__ */ __name((target, force = false, environment = {}) => {
+      if (force) {
+        return;
+      }
+      const os = environment.os || currentEnv.os();
+      const cpu = environment.cpu || currentEnv.cpu();
+      const libc = environment.libc || currentEnv.libc(os);
+      const osOk = target.os ? checkList(os, target.os) : true;
+      const cpuOk = target.cpu ? checkList(cpu, target.cpu) : true;
+      let libcOk = target.libc ? checkList(libc, target.libc) : true;
+      if (target.libc && !libc) {
+        libcOk = false;
+      }
+      if (!osOk || !cpuOk || !libcOk) {
+        throw Object.assign(new Error("Unsupported platform"), {
+          pkgid: target._id,
+          current: {
+            os,
+            cpu,
+            libc
+          },
+          required: {
+            os: target.os,
+            cpu: target.cpu,
+            libc: target.libc
+          },
+          code: "EBADPLATFORM"
+        });
+      }
+    }, "checkPlatform");
+    var checkList = /* @__PURE__ */ __name((value, list) => {
+      if (typeof list === "string") {
+        list = [list];
+      }
+      if (list.length === 1 && list[0] === "any") {
+        return true;
+      }
+      let negated = 0;
+      let match = false;
+      for (const entry of list) {
+        const negate = entry.charAt(0) === "!";
+        const test = negate ? entry.slice(1) : entry;
+        if (negate) {
+          negated++;
+          if (value === test) {
+            return false;
+          }
+        } else {
+          match = match || value === test;
+        }
+      }
+      return match || negated === list.length;
+    }, "checkList");
+    module2.exports = {
+      checkEngine,
+      checkPlatform,
+      checkDevEngines,
+      currentEnv
+    };
+  }
+});
+
+// node_modules/.pnpm/npm-normalize-package-bin@5.0.0/node_modules/npm-normalize-package-bin/lib/index.js
+var require_lib8 = __commonJS({
+  "node_modules/.pnpm/npm-normalize-package-bin@5.0.0/node_modules/npm-normalize-package-bin/lib/index.js"(exports2, module2) {
+    var { join, basename } = require("path");
+    var normalize = /* @__PURE__ */ __name((pkg) => !pkg.bin ? removeBin(pkg) : typeof pkg.bin === "string" ? normalizeString(pkg) : Array.isArray(pkg.bin) ? normalizeArray(pkg) : typeof pkg.bin === "object" ? normalizeObject(pkg) : removeBin(pkg), "normalize");
+    var normalizeString = /* @__PURE__ */ __name((pkg) => {
+      if (!pkg.name) {
+        return removeBin(pkg);
+      }
+      pkg.bin = { [pkg.name]: pkg.bin };
+      return normalizeObject(pkg);
+    }, "normalizeString");
+    var normalizeArray = /* @__PURE__ */ __name((pkg) => {
+      pkg.bin = pkg.bin.reduce((acc, k) => {
+        acc[basename(k)] = k;
+        return acc;
+      }, {});
+      return normalizeObject(pkg);
+    }, "normalizeArray");
+    var removeBin = /* @__PURE__ */ __name((pkg) => {
+      delete pkg.bin;
+      return pkg;
+    }, "removeBin");
+    var normalizeObject = /* @__PURE__ */ __name((pkg) => {
+      const orig = pkg.bin;
+      const clean = {};
+      let hasBins = false;
+      Object.keys(orig).forEach((binKey) => {
+        const base = join("/", basename(binKey.replace(/\\|:/g, "/"))).slice(1);
+        if (typeof orig[binKey] !== "string" || !base) {
+          return;
+        }
+        const binTarget = join("/", orig[binKey].replace(/\\/g, "/")).replace(/\\/g, "/").slice(1);
+        if (!binTarget) {
+          return;
+        }
+        clean[base] = binTarget;
+        hasBins = true;
+      });
+      if (hasBins) {
+        pkg.bin = clean;
+      } else {
+        delete pkg.bin;
+      }
+      return pkg;
+    }, "normalizeObject");
+    module2.exports = normalize;
+  }
+});
+
+// node_modules/.pnpm/npm-pick-manifest@10.0.0/node_modules/npm-pick-manifest/lib/index.js
+var require_lib9 = __commonJS({
+  "node_modules/.pnpm/npm-pick-manifest@10.0.0/node_modules/npm-pick-manifest/lib/index.js"(exports2, module2) {
+    "use strict";
+    var npa = require_npa();
+    var semver = require_semver2();
+    var { checkEngine } = require_lib7();
+    var normalizeBin = require_lib8();
+    var engineOk = /* @__PURE__ */ __name((manifest, npmVersion, nodeVersion) => {
+      try {
+        checkEngine(manifest, npmVersion, nodeVersion);
+        return true;
+      } catch (_) {
+        return false;
+      }
+    }, "engineOk");
+    var isBefore = /* @__PURE__ */ __name((verTimes, ver, time) => !verTimes || !verTimes[ver] || Date.parse(verTimes[ver]) <= time, "isBefore");
+    var avoidSemverOpt = { includePrerelease: true, loose: true };
+    var shouldAvoid = /* @__PURE__ */ __name((ver, avoid) => avoid && semver.satisfies(ver, avoid, avoidSemverOpt), "shouldAvoid");
+    var decorateAvoid = /* @__PURE__ */ __name((result, avoid) => result && shouldAvoid(result.version, avoid) ? { ...result, _shouldAvoid: true } : result, "decorateAvoid");
+    var pickManifest = /* @__PURE__ */ __name((packument, wanted, opts) => {
+      const {
+        defaultTag = "latest",
+        before = null,
+        nodeVersion = process.version,
+        npmVersion = null,
+        includeStaged = false,
+        avoid = null,
+        avoidStrict = false
+      } = opts;
+      const { name, time: verTimes } = packument;
+      const versions = packument.versions || {};
+      if (avoidStrict) {
+        const looseOpts = {
+          ...opts,
+          avoidStrict: false
+        };
+        const result = pickManifest(packument, wanted, looseOpts);
+        if (!result || !result._shouldAvoid) {
+          return result;
+        }
+        const caret = pickManifest(packument, `^${result.version}`, looseOpts);
+        if (!caret || !caret._shouldAvoid) {
+          return {
+            ...caret,
+            _outsideDependencyRange: true,
+            _isSemVerMajor: false
+          };
+        }
+        const star = pickManifest(packument, "*", looseOpts);
+        if (!star || !star._shouldAvoid) {
+          return {
+            ...star,
+            _outsideDependencyRange: true,
+            _isSemVerMajor: true
+          };
+        }
+        throw Object.assign(new Error(`No avoidable versions for ${name}`), {
+          code: "ETARGET",
+          name,
+          wanted,
+          avoid,
+          before,
+          versions: Object.keys(versions)
+        });
+      }
+      const staged = includeStaged && packument.stagedVersions && packument.stagedVersions.versions || {};
+      const restricted = packument.policyRestrictions && packument.policyRestrictions.versions || {};
+      const time = before && verTimes ? +new Date(before) : Infinity;
+      const spec = npa.resolve(name, wanted || defaultTag);
+      const type = spec.type;
+      const distTags = packument["dist-tags"] || {};
+      if (type !== "tag" && type !== "version" && type !== "range") {
+        throw new Error("Only tag, version, and range are supported");
+      }
+      if (wanted && type === "tag") {
+        const ver = distTags[wanted];
+        if (isBefore(verTimes, ver, time)) {
+          return decorateAvoid(versions[ver] || staged[ver] || restricted[ver], avoid);
+        } else {
+          return pickManifest(packument, `<=${ver}`, opts);
+        }
+      }
+      if (wanted && type === "version") {
+        const ver = semver.clean(wanted, { loose: true });
+        const mani = versions[ver] || staged[ver] || restricted[ver];
+        return isBefore(verTimes, ver, time) ? decorateAvoid(mani, avoid) : null;
+      }
+      const range = type === "range" ? wanted : "*";
+      const defaultVer = distTags[defaultTag];
+      if (defaultVer && (range === "*" || semver.satisfies(defaultVer, range, { loose: true })) && !restricted[defaultVer] && !shouldAvoid(defaultVer, avoid)) {
+        const mani = versions[defaultVer];
+        const ok = mani && isBefore(verTimes, defaultVer, time) && engineOk(mani, npmVersion, nodeVersion) && !mani.deprecated && !staged[defaultVer];
+        if (ok) {
+          return mani;
+        }
+      }
+      const allEntries = Object.entries(versions).concat(Object.entries(staged)).concat(Object.entries(restricted)).filter(([ver]) => isBefore(verTimes, ver, time));
+      if (!allEntries.length) {
+        throw Object.assign(new Error(`No versions available for ${name}`), {
+          code: "ENOVERSIONS",
+          name,
+          type,
+          wanted,
+          before,
+          versions: Object.keys(versions)
+        });
+      }
+      const sortSemverOpt = { loose: true };
+      const entries = allEntries.filter(([ver]) => semver.satisfies(ver, range, { loose: true })).sort((a, b) => {
+        const [vera, mania] = a;
+        const [verb, manib] = b;
+        const notavoida = !shouldAvoid(vera, avoid);
+        const notavoidb = !shouldAvoid(verb, avoid);
+        const notrestra = !restricted[vera];
+        const notrestrb = !restricted[verb];
+        const notstagea = !staged[vera];
+        const notstageb = !staged[verb];
+        const notdepra = !mania.deprecated;
+        const notdeprb = !manib.deprecated;
+        const enginea = engineOk(mania, npmVersion, nodeVersion);
+        const engineb = engineOk(manib, npmVersion, nodeVersion);
+        return notavoidb - notavoida || notrestrb - notrestra || notstageb - notstagea || (notdeprb && engineb) - (notdepra && enginea) || engineb - enginea || notdeprb - notdepra || semver.rcompare(vera, verb, sortSemverOpt);
+      });
+      return decorateAvoid(entries[0] && entries[0][1], avoid);
+    }, "pickManifest");
+    module2.exports = (packument, wanted, opts = {}) => {
+      const mani = pickManifest(packument, wanted, opts);
+      const picked = mani && normalizeBin(mani);
+      const policyRestrictions = packument.policyRestrictions;
+      const restricted = policyRestrictions && policyRestrictions.versions || {};
+      if (picked && !restricted[picked.version]) {
+        return picked;
+      }
+      const { before = null, defaultTag = "latest" } = opts;
+      const bstr = before ? new Date(before).toLocaleString() : "";
+      const { name } = packument;
+      const pckg = `${name}@${wanted}` + (before ? ` with a date before ${bstr}` : "");
+      const isForbidden = picked && !!restricted[picked.version];
+      const polMsg = isForbidden ? policyRestrictions.message : "";
+      const msg = !isForbidden ? `No matching version found for ${pckg}.` : `Could not download ${pckg} due to policy violations:
+${polMsg}`;
+      const code = isForbidden ? "E403" : "ETARGET";
+      throw Object.assign(new Error(msg), {
+        code,
+        type: npa.resolve(packument.name, wanted).type,
+        wanted,
+        versions: Object.keys(packument.versions ?? {}),
+        name,
+        distTags: packument["dist-tags"],
+        defaultTag
+      });
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/clone.js
+var require_clone = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/clone.js"(exports2, module2) {
+    var shallowHosts = /* @__PURE__ */ new Set([
+      "github.com",
+      "gist.github.com",
+      "gitlab.com",
+      "bitbucket.com",
+      "bitbucket.org"
+    ]);
+    var { parse } = require("url");
+    var path = require("path");
+    var getRevs = require_revs();
+    var spawn = require_spawn();
+    var { isWindows } = require_utils();
+    var pickManifest = require_lib9();
+    var fs = require("fs/promises");
+    module2.exports = (repo, ref = "HEAD", target = null, opts = {}) => getRevs(repo, opts).then((revs) => clone(
+      repo,
+      revs,
+      ref,
+      resolveRef(revs, ref, opts),
+      target || defaultTarget(repo, opts.cwd),
+      opts
+    ));
+    var maybeShallow = /* @__PURE__ */ __name((repo, opts) => {
+      if (opts.gitShallow === false || opts.gitShallow) {
+        return opts.gitShallow;
+      }
+      return shallowHosts.has(parse(repo).host);
+    }, "maybeShallow");
+    var defaultTarget = /* @__PURE__ */ __name((repo, cwd = process.cwd()) => path.resolve(cwd, path.basename(repo.replace(/[/\\]?\.git$/, ""))), "defaultTarget");
+    var clone = /* @__PURE__ */ __name((repo, revs, ref, revDoc, target, opts) => {
+      if (!revDoc) {
+        return unresolved(repo, ref, target, opts);
+      }
+      if (revDoc.sha === revs.refs.HEAD.sha) {
+        return plain(repo, revDoc, target, opts);
+      }
+      if (revDoc.type === "tag" || revDoc.type === "branch") {
+        return branch(repo, revDoc, target, opts);
+      }
+      return other(repo, revDoc, target, opts);
+    }, "clone");
+    var resolveRef = /* @__PURE__ */ __name((revs, ref, opts) => {
+      const { spec = {} } = opts;
+      ref = spec.gitCommittish || ref;
+      if (!revs) {
+        return null;
+      }
+      if (spec.gitRange) {
+        return pickManifest(revs, spec.gitRange, opts);
+      }
+      if (!ref) {
+        return revs.refs.HEAD;
+      }
+      if (revs.refs[ref]) {
+        return revs.refs[ref];
+      }
+      if (revs.shas[ref]) {
+        return revs.refs[revs.shas[ref][0]];
+      }
+      return null;
+    }, "resolveRef");
+    var other = /* @__PURE__ */ __name((repo, revDoc, target, opts) => {
+      const shallow = maybeShallow(repo, opts);
+      const fetchOrigin = ["fetch", "origin", revDoc.rawRef].concat(shallow ? ["--depth=1"] : []);
+      const git = /* @__PURE__ */ __name((args) => spawn(args, { ...opts, cwd: target }), "git");
+      return fs.mkdir(target, { recursive: true }).then(() => git(["init"])).then(() => isWindows(opts) ? git(["config", "--local", "--add", "core.longpaths", "true"]) : null).then(() => git(["remote", "add", "origin", repo])).then(() => git(fetchOrigin)).then(() => git(["checkout", revDoc.sha])).then(() => updateSubmodules(target, opts)).then(() => revDoc.sha);
+    }, "other");
+    var branch = /* @__PURE__ */ __name((repo, revDoc, target, opts) => {
+      const args = [
+        "clone",
+        "-b",
+        revDoc.ref,
+        repo,
+        target,
+        "--recurse-submodules"
+      ];
+      if (maybeShallow(repo, opts)) {
+        args.push("--depth=1");
+      }
+      if (isWindows(opts)) {
+        args.push("--config", "core.longpaths=true");
+      }
+      return spawn(args, opts).then(() => revDoc.sha);
+    }, "branch");
+    var plain = /* @__PURE__ */ __name((repo, revDoc, target, opts) => {
+      const args = [
+        "clone",
+        repo,
+        target,
+        "--recurse-submodules"
+      ];
+      if (maybeShallow(repo, opts)) {
+        args.push("--depth=1");
+      }
+      if (isWindows(opts)) {
+        args.push("--config", "core.longpaths=true");
+      }
+      return spawn(args, opts).then(() => revDoc.sha);
+    }, "plain");
+    var updateSubmodules = /* @__PURE__ */ __name(async (target, opts) => {
+      const hasSubmodules = await fs.stat(`${target}/.gitmodules`).then(() => true).catch(() => false);
+      if (!hasSubmodules) {
+        return null;
+      }
+      return spawn([
+        "submodule",
+        "update",
+        "-q",
+        "--init",
+        "--recursive"
+      ], { ...opts, cwd: target });
+    }, "updateSubmodules");
+    var unresolved = /* @__PURE__ */ __name((repo, ref, target, opts) => {
+      const lp = isWindows(opts) ? ["--config", "core.longpaths=true"] : [];
+      const cloneArgs = ["clone", "--mirror", "-q", repo, target + "/.git"];
+      const git = /* @__PURE__ */ __name((args) => spawn(args, { ...opts, cwd: target }), "git");
+      return fs.mkdir(target, { recursive: true }).then(() => git(cloneArgs.concat(lp))).then(() => git(["init"])).then(() => git(["checkout", ref])).then(() => updateSubmodules(target, opts)).then(() => git(["rev-parse", "--revs-only", "HEAD"])).then(({ stdout }) => stdout.trim());
+    }, "unresolved");
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/is.js
+var require_is = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/is.js"(exports2, module2) {
+    var { stat } = require("fs/promises");
+    module2.exports = ({ cwd = process.cwd() } = {}) => stat(cwd + "/.git").then(() => true, () => false);
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/find.js
+var require_find = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/find.js"(exports2, module2) {
+    var is = require_is();
+    var { dirname } = require("path");
+    module2.exports = async ({ cwd = process.cwd(), root } = {}) => {
+      while (true) {
+        if (await is({ cwd })) {
+          return cwd;
+        }
+        const next = dirname(cwd);
+        if (cwd === root || cwd === next) {
+          return null;
+        }
+        cwd = next;
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/is-clean.js
+var require_is_clean = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/is-clean.js"(exports2, module2) {
+    var spawn = require_spawn();
+    module2.exports = (opts = {}) => spawn(["status", "--porcelain=v1", "-uno"], opts).then((res) => !res.stdout.trim().split(/\r?\n+/).map((l) => l.trim()).filter((l) => l).length);
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/index.js
+var require_lib10 = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/index.js"(exports2, module2) {
+    module2.exports = {
+      clone: require_clone(),
+      revs: require_revs(),
+      spawn: require_spawn(),
+      is: require_is(),
+      find: require_find(),
+      isClean: require_is_clean(),
+      errors: require_errors()
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/normalize.js
+var require_normalize = __commonJS({
+  "node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/normalize.js"(exports2, module2) {
+    var valid = require_valid();
+    var clean = require_clean();
+    var fs = require("node:fs/promises");
+    var path = require("node:path");
+    var { log } = require_lib2();
+    var moduleBuiltin = require("node:module");
+    var _hostedGitInfo;
+    function lazyHostedGitInfo() {
+      if (!_hostedGitInfo) {
+        _hostedGitInfo = require_lib3();
+      }
+      return _hostedGitInfo;
+    }
+    __name(lazyHostedGitInfo, "lazyHostedGitInfo");
+    var _glob;
+    function lazyLoadGlob() {
+      if (!_glob) {
+        _glob = require_commonjs7().glob;
+      }
+      return _glob;
+    }
+    __name(lazyLoadGlob, "lazyLoadGlob");
+    function normalizePackageBin(pkg, changes) {
+      if (pkg.bin) {
+        if (typeof pkg.bin === "string" && pkg.name) {
+          changes?.push('"bin" was converted to an object');
+          pkg.bin = { [pkg.name]: pkg.bin };
+        } else if (Array.isArray(pkg.bin)) {
+          changes?.push('"bin" was converted to an object');
+          pkg.bin = pkg.bin.reduce((acc, k) => {
+            acc[path.basename(k)] = k;
+            return acc;
+          }, {});
+        }
+        if (typeof pkg.bin === "object") {
+          for (const binKey in pkg.bin) {
+            if (typeof pkg.bin[binKey] !== "string") {
+              delete pkg.bin[binKey];
+              changes?.push(`removed invalid "bin[${binKey}]"`);
+              continue;
+            }
+            const base = path.basename(secureAndUnixifyPath(binKey));
+            if (!base) {
+              delete pkg.bin[binKey];
+              changes?.push(`removed invalid "bin[${binKey}]"`);
+              continue;
+            }
+            const binTarget = secureAndUnixifyPath(pkg.bin[binKey]);
+            if (!binTarget) {
+              delete pkg.bin[binKey];
+              changes?.push(`removed invalid "bin[${binKey}]"`);
+              continue;
+            }
+            if (base !== binKey) {
+              delete pkg.bin[binKey];
+              changes?.push(`"bin[${binKey}]" was renamed to "bin[${base}]"`);
+            }
+            if (binTarget !== pkg.bin[binKey]) {
+              changes?.push(`"bin[${base}]" script name ${binTarget} was invalid and removed`);
+            }
+            pkg.bin[base] = binTarget;
+          }
+          if (Object.keys(pkg.bin).length === 0) {
+            changes?.push('empty "bin" was removed');
+            delete pkg.bin;
+          }
+          return pkg;
+        }
+      }
+      delete pkg.bin;
+    }
+    __name(normalizePackageBin, "normalizePackageBin");
+    function normalizePackageMan(pkg, changes) {
+      if (pkg.man) {
+        const mans = [];
+        for (const man of Array.isArray(pkg.man) ? pkg.man : [pkg.man]) {
+          if (typeof man !== "string") {
+            changes?.push(`removed invalid "man [${man}]"`);
+          } else {
+            mans.push(secureAndUnixifyPath(man));
+          }
+        }
+        if (!mans.length) {
+          changes?.push('empty "man" was removed');
+        } else {
+          pkg.man = mans;
+          return pkg;
+        }
+      }
+      delete pkg.man;
+    }
+    __name(normalizePackageMan, "normalizePackageMan");
+    function isCorrectlyEncodedName(spec) {
+      return !spec.match(/[/@\s+%:]/) && spec === encodeURIComponent(spec);
+    }
+    __name(isCorrectlyEncodedName, "isCorrectlyEncodedName");
+    function isValidScopedPackageName(spec) {
+      if (spec.charAt(0) !== "@") {
+        return false;
+      }
+      const rest = spec.slice(1).split("/");
+      if (rest.length !== 2) {
+        return false;
+      }
+      return rest[0] && rest[1] && rest[0] === encodeURIComponent(rest[0]) && rest[1] === encodeURIComponent(rest[1]);
+    }
+    __name(isValidScopedPackageName, "isValidScopedPackageName");
+    function unixifyPath(ref) {
+      return ref.replace(/\\|:/g, "/");
+    }
+    __name(unixifyPath, "unixifyPath");
+    function secureAndUnixifyPath(ref) {
+      const secured = unixifyPath(path.join(".", path.join("/", unixifyPath(ref))));
+      return secured.startsWith("./") ? "" : secured;
+    }
+    __name(secureAndUnixifyPath, "secureAndUnixifyPath");
+    function syncSteps(pkg, { strict, steps, changes, allowLegacyCase }) {
+      const data = pkg.content;
+      const pkgId = `${data.name ?? ""}@${data.version ?? ""}`;
+      if (steps.includes("fixName") || steps.includes("fixNameField") || steps.includes("normalizeData")) {
+        if (!data.name && !strict) {
+          changes?.push('Missing "name" field was set to an empty string');
+          data.name = "";
+        } else {
+          if (typeof data.name !== "string") {
+            throw new Error("name field must be a string.");
+          }
+          if (!strict) {
+            const name = data.name.trim();
+            if (data.name !== name) {
+              changes?.push(`Whitespace was trimmed from "name"`);
+              data.name = name;
+            }
+          }
+          if (data.name.startsWith(".") || !(isValidScopedPackageName(data.name) || isCorrectlyEncodedName(data.name)) || strict && !allowLegacyCase && data.name !== data.name.toLowerCase() || data.name.toLowerCase() === "node_modules" || data.name.toLowerCase() === "favicon.ico") {
+            throw new Error("Invalid name: " + JSON.stringify(data.name));
+          }
+        }
+      }
+      if (steps.includes("fixName")) {
+        if (moduleBuiltin.builtinModules.includes(data.name)) {
+          log.warn("package-json", pkgId, `Package name "${data.name}" conflicts with a Node.js built-in module name`);
+        }
+      }
+      if (steps.includes("fixVersionField") || steps.includes("normalizeData")) {
+        const loose = !strict;
+        if (!data.version) {
+          data.version = "";
+        } else {
+          if (!valid(data.version, loose)) {
+            throw new Error(`Invalid version: "${data.version}"`);
+          }
+          const version = clean(data.version, loose);
+          if (version !== data.version) {
+            changes?.push(`"version" was cleaned and set to "${version}"`);
+            data.version = version;
+          }
+        }
+      }
+      if (steps.includes("_attributes")) {
+        for (const key in data) {
+          if (key.startsWith("_")) {
+            changes?.push(`"${key}" was removed`);
+            delete pkg.content[key];
+          }
+        }
+      }
+      if (steps.includes("_id")) {
+        if (data.name && data.version) {
+          changes?.push(`"_id" was set to ${pkgId}`);
+          data._id = pkgId;
+        }
+      }
+      if (steps.includes("bundledDependencies")) {
+        if (data.bundleDependencies === void 0 && data.bundledDependencies !== void 0) {
+          data.bundleDependencies = data.bundledDependencies;
+          changes?.push(`Deleted incorrect "bundledDependencies"`);
+        }
+        delete data.bundledDependencies;
+      }
+      if (steps.includes("bundleDependencies")) {
+        const bd = data.bundleDependencies;
+        if (bd === false && !steps.includes("bundleDependenciesDeleteFalse")) {
+          changes?.push(`"bundleDependencies" was changed from "false" to "[]"`);
+          data.bundleDependencies = [];
+        } else if (bd === true) {
+          changes?.push(`"bundleDependencies" was auto-populated from "dependencies"`);
+          data.bundleDependencies = Object.keys(data.dependencies || {});
+        } else if (bd && typeof bd === "object") {
+          if (!Array.isArray(bd)) {
+            changes?.push(`"bundleDependencies" was changed from an object to an array`);
+            data.bundleDependencies = Object.keys(bd);
+          }
+        } else if ("bundleDependencies" in data) {
+          changes?.push(`"bundleDependencies" was removed`);
+          delete data.bundleDependencies;
+        }
+      }
+      if (steps.includes("optionalDedupe")) {
+        if (data.dependencies && data.optionalDependencies && typeof data.optionalDependencies === "object") {
+          for (const name in data.optionalDependencies) {
+            changes?.push(`optionalDependencies."${name}" was removed`);
+            delete data.dependencies[name];
+          }
+          if (!Object.keys(data.dependencies).length) {
+            changes?.push(`Empty "optionalDependencies" was removed`);
+            delete data.dependencies;
+          }
+        }
+      }
+      if ((steps.includes("scripts") || steps.includes("scriptpath")) && data.scripts !== void 0) {
+        const spre = /^(\.[/\\])?node_modules[/\\].bin[\\/]/;
+        if (typeof data.scripts === "object") {
+          for (const name in data.scripts) {
+            if (typeof data.scripts[name] !== "string") {
+              delete data.scripts[name];
+              changes?.push(`Invalid scripts."${name}" was removed`);
+            } else if (steps.includes("scriptpath") && spre.test(data.scripts[name])) {
+              data.scripts[name] = data.scripts[name].replace(spre, "");
+              changes?.push(`scripts entry "${name}" was fixed to remove node_modules/.bin reference`);
+            }
+          }
+        } else {
+          changes?.push(`Removed invalid "scripts"`);
+          delete data.scripts;
+        }
+      }
+      if (steps.includes("funding")) {
+        if (data.funding && typeof data.funding === "string") {
+          data.funding = { url: data.funding };
+          changes?.push(`"funding" was changed to an object with a url attribute`);
+        }
+      }
+      if (steps.includes("fixRepositoryField") || steps.includes("normalizeData")) {
+        if (data.repositories) {
+          changes?.push(`"repository" was set to the first entry in "repositories" (${data.repository})`);
+          data.repository = data.repositories[0];
+        }
+        if (data.repository) {
+          if (typeof data.repository === "string") {
+            changes?.push('"repository" was changed from a string to an object');
+            data.repository = {
+              type: "git",
+              url: data.repository
+            };
+          }
+          if (data.repository.url) {
+            const hosted = lazyHostedGitInfo().fromUrl(data.repository.url);
+            let r;
+            if (hosted) {
+              if (hosted.getDefaultRepresentation() === "shortcut") {
+                r = hosted.https();
+              } else {
+                r = hosted.toString();
+              }
+              if (r !== data.repository.url) {
+                changes?.push(`"repository.url" was normalized to "${r}"`);
+                data.repository.url = r;
+              }
+            }
+          }
+        }
+      }
+      if (steps.includes("fixDependencies") || steps.includes("normalizeData")) {
+        for (const type of ["dependencies", "devDependencies", "optionalDependencies"]) {
+          if (data[type]) {
+            let secondWarning = true;
+            if (typeof data[type] === "string") {
+              changes?.push(`"${type}" was converted from a string into an object`);
+              data[type] = data[type].trim().split(/[\n\r\s\t ,]+/);
+              secondWarning = false;
+            }
+            if (Array.isArray(data[type])) {
+              if (secondWarning) {
+                changes?.push(`"${type}" was converted from an array into an object`);
+              }
+              const o = {};
+              for (const d of data[type]) {
+                if (typeof d === "string") {
+                  const dep = d.trim().split(/(:?[@\s><=])/);
+                  const dn = dep.shift();
+                  const dv = dep.join("").replace(/^@/, "").trim();
+                  o[dn] = dv;
+                }
+              }
+              data[type] = o;
+            }
+          }
+        }
+        for (const deps of ["dependencies", "devDependencies"]) {
+          if (deps in data) {
+            if (!data[deps] || typeof data[deps] !== "object") {
+              changes?.push(`Removed invalid "${deps}"`);
+              delete data[deps];
+            } else {
+              for (const d in data[deps]) {
+                const r = data[deps][d];
+                if (typeof r !== "string") {
+                  changes?.push(`Removed invalid "${deps}.${d}"`);
+                  delete data[deps][d];
+                }
+                const hosted = lazyHostedGitInfo().fromUrl(data[deps][d])?.toString();
+                if (hosted && hosted !== data[deps][d]) {
+                  changes?.push(`Normalized git reference to "${deps}.${d}"`);
+                  data[deps][d] = hosted.toString();
+                }
+              }
+            }
+          }
+        }
+      }
+      if (steps.includes("normalizeData")) {
+        const { normalizeData } = require_normalize_data();
+        normalizeData(data, changes);
+      }
+    }
+    __name(syncSteps, "syncSteps");
+    async function asyncSteps(pkg, { steps, root, changes }) {
+      const data = pkg.content;
+      const scripts = data.scripts || {};
+      const pkgId = `${data.name ?? ""}@${data.version ?? ""}`;
+      if (steps.includes("gypfile")) {
+        if (!scripts.install && !scripts.preinstall && data.gypfile !== false) {
+          const files = await lazyLoadGlob()("*.gyp", { cwd: pkg.path });
+          if (files.length) {
+            scripts.install = "node-gyp rebuild";
+            data.scripts = scripts;
+            data.gypfile = true;
+            changes?.push(`"scripts.install" was set to "node-gyp rebuild"`);
+            changes?.push(`"gypfile" was set to "true"`);
+          }
+        }
+      }
+      if (steps.includes("serverjs") && !scripts.start) {
+        try {
+          await fs.access(path.join(pkg.path, "server.js"));
+          scripts.start = "node server.js";
+          data.scripts = scripts;
+          changes?.push('"scripts.start" was set to "node server.js"');
+        } catch {
+        }
+      }
+      if (steps.includes("authors") && !data.contributors) {
+        try {
+          const authorData = await fs.readFile(path.join(pkg.path, "AUTHORS"), "utf8");
+          const authors = authorData.split(/\r?\n/g).map((line) => line.replace(/^\s*#.*$/, "").trim()).filter((line) => line);
+          data.contributors = authors;
+          changes?.push('"contributors" was auto-populated with the contents of the "AUTHORS" file');
+        } catch {
+        }
+      }
+      if (steps.includes("readme") && !data.readme) {
+        const mdre = /\.m?a?r?k?d?o?w?n?$/i;
+        const files = await lazyLoadGlob()("{README,README.*}", {
+          cwd: pkg.path,
+          nocase: true,
+          mark: true
+        });
+        let readmeFile;
+        for (const file of files) {
+          if (!file.endsWith(path.sep)) {
+            if (file.match(mdre)) {
+              readmeFile = file;
+              break;
+            }
+            if (file.endsWith("README")) {
+              readmeFile = file;
+            }
+          }
+        }
+        if (readmeFile) {
+          const readmeData = await fs.readFile(path.join(pkg.path, readmeFile), "utf8");
+          data.readme = readmeData;
+          data.readmeFilename = readmeFile;
+          changes?.push(`"readme" was set to the contents of ${readmeFile}`);
+          changes?.push(`"readmeFilename" was set to ${readmeFile}`);
+        }
+        if (!data.readme) {
+          data.readme = "ERROR: No README data found!";
+        }
+      }
+      if (steps.includes("mans")) {
+        if (data.directories?.man && !data.man) {
+          const manDir = secureAndUnixifyPath(data.directories.man);
+          const cwd = path.resolve(pkg.path, manDir);
+          const files = await lazyLoadGlob()("**/*.[0-9]", { cwd });
+          data.man = files.map(
+            (man) => path.relative(pkg.path, path.join(cwd, man)).split(path.sep).join("/")
+          );
+        }
+        normalizePackageMan(data, changes);
+      }
+      if (steps.includes("binDir") && data.directories?.bin && !data.bin) {
+        const binPath = secureAndUnixifyPath(data.directories.bin);
+        const bins = await lazyLoadGlob()("**", { cwd: path.resolve(pkg.path, binPath) });
+        data.bin = bins.reduce((acc, binFile) => {
+          if (binFile && !binFile.startsWith(".")) {
+            const binName = path.basename(binFile);
+            acc[binName] = `${binPath}/${secureAndUnixifyPath(binFile)}`;
+          }
+          return acc;
+        }, {});
+      } else if (steps.includes("bin") || steps.includes("binDir") || steps.includes("binRefs")) {
+        normalizePackageBin(data, changes);
+      }
+      if (steps.includes("gitHead") && !data.gitHead) {
+        const git = require_lib10();
+        const gitRoot = await git.find({ cwd: pkg.path, root });
+        let head;
+        if (gitRoot) {
+          try {
+            head = await fs.readFile(path.resolve(gitRoot, ".git/HEAD"), "utf8");
+          } catch (err) {
+          }
+        }
+        let headData;
+        if (head) {
+          if (head.startsWith("ref: ")) {
+            const headRef = head.replace(/^ref: /, "").trim();
+            const headFile = path.resolve(gitRoot, ".git", headRef);
+            try {
+              headData = await fs.readFile(headFile, "utf8");
+              headData = headData.replace(/^ref: /, "").trim();
+            } catch (err) {
+            }
+            if (!headData) {
+              const packFile = path.resolve(gitRoot, ".git/packed-refs");
+              try {
+                let refs = await fs.readFile(packFile, "utf8");
+                if (refs) {
+                  refs = refs.split("\n");
+                  for (let i = 0; i < refs.length; i++) {
+                    const match = refs[i].match(/^([0-9a-f]{40}) (.+)$/);
+                    if (match && match[2].trim() === headRef) {
+                      headData = match[1];
+                      break;
+                    }
+                  }
+                }
+              } catch {
+              }
+            }
+          } else {
+            headData = head.trim();
+          }
+        }
+        if (headData) {
+          data.gitHead = headData;
+        }
+      }
+      if (steps.includes("fillTypes")) {
+        const index = data.main || "index.js";
+        if (typeof index !== "string") {
+          throw new TypeError('The "main" attribute must be of type string.');
+        }
+        const extless = path.join(path.dirname(index), path.basename(index, path.extname(index)));
+        const dts = `./${extless}.d.ts`;
+        const hasDTSFields = "types" in data || "typings" in data;
+        if (!hasDTSFields) {
+          try {
+            await fs.access(path.join(pkg.path, dts));
+            data.types = dts.split(path.sep).join("/");
+          } catch {
+          }
+        }
+      }
+      if (steps.includes("binRefs") && data.bin instanceof Object) {
+        for (const key in data.bin) {
+          try {
+            await fs.access(path.resolve(pkg.path, data.bin[key]));
+          } catch {
+            log.warn("package-json", pkgId, `No bin file found at ${data.bin[key]}`);
+          }
+        }
+      }
+    }
+    __name(asyncSteps, "asyncSteps");
+    async function normalize(pkg, opts) {
+      if (!pkg.content) {
+        throw new Error("Can not normalize without content");
+      }
+      await asyncSteps(pkg, opts);
+      syncSteps(pkg, opts);
+    }
+    __name(normalize, "normalize");
+    function syncNormalize(pkg, opts) {
+      syncSteps(pkg, opts);
+    }
+    __name(syncNormalize, "syncNormalize");
+    module2.exports = { normalize, syncNormalize };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/read-package.js
+var require_read_package = __commonJS({
+  "node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/read-package.js"(exports2, module2) {
+    var { readFile } = require("fs/promises");
+    var parseJSON = require_lib();
+    async function read(filename) {
+      try {
+        const data = await readFile(filename, "utf8");
+        return data;
+      } catch (err) {
+        err.message = `Could not read package.json: ${err}`;
+        throw err;
+      }
+    }
+    __name(read, "read");
+    function parse(data) {
+      try {
+        const content = parseJSON(data);
+        return content;
+      } catch (err) {
+        err.message = `Invalid package.json: ${err}`;
+        throw err;
+      }
+    }
+    __name(parse, "parse");
+    async function readPackage(filename) {
+      const data = await read(filename);
+      const content = parse(data);
+      return content;
+    }
+    __name(readPackage, "readPackage");
+    module2.exports = {
+      read,
+      parse,
+      readPackage
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/sort.js
+var require_sort2 = __commonJS({
+  "node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/sort.js"(exports2, module2) {
+    function packageSort(json) {
+      const {
+        name,
+        version,
+        private: isPrivate,
+        description,
+        keywords,
+        homepage,
+        bugs,
+        repository,
+        funding,
+        license,
+        author,
+        maintainers,
+        contributors,
+        type,
+        imports,
+        exports: exports3,
+        main,
+        browser,
+        types,
+        bin,
+        man,
+        directories,
+        files,
+        workspaces,
+        scripts,
+        config,
+        dependencies,
+        devDependencies,
+        peerDependencies,
+        peerDependenciesMeta,
+        optionalDependencies,
+        bundledDependencies,
+        bundleDependencies,
+        engines,
+        os,
+        cpu,
+        publishConfig,
+        devEngines,
+        licenses,
+        overrides,
+        ...rest
+      } = json;
+      return {
+        ...typeof name !== "undefined" ? { name } : {},
+        ...typeof version !== "undefined" ? { version } : {},
+        ...typeof isPrivate !== "undefined" ? { private: isPrivate } : {},
+        ...typeof description !== "undefined" ? { description } : {},
+        ...typeof keywords !== "undefined" ? { keywords } : {},
+        ...typeof homepage !== "undefined" ? { homepage } : {},
+        ...typeof bugs !== "undefined" ? { bugs } : {},
+        ...typeof repository !== "undefined" ? { repository } : {},
+        ...typeof funding !== "undefined" ? { funding } : {},
+        ...typeof license !== "undefined" ? { license } : {},
+        ...typeof author !== "undefined" ? { author } : {},
+        ...typeof maintainers !== "undefined" ? { maintainers } : {},
+        ...typeof contributors !== "undefined" ? { contributors } : {},
+        ...typeof type !== "undefined" ? { type } : {},
+        ...typeof imports !== "undefined" ? { imports } : {},
+        ...typeof exports3 !== "undefined" ? { exports: exports3 } : {},
+        ...typeof main !== "undefined" ? { main } : {},
+        ...typeof browser !== "undefined" ? { browser } : {},
+        ...typeof types !== "undefined" ? { types } : {},
+        ...typeof bin !== "undefined" ? { bin } : {},
+        ...typeof man !== "undefined" ? { man } : {},
+        ...typeof directories !== "undefined" ? { directories } : {},
+        ...typeof files !== "undefined" ? { files } : {},
+        ...typeof workspaces !== "undefined" ? { workspaces } : {},
+        ...typeof scripts !== "undefined" ? { scripts } : {},
+        ...typeof config !== "undefined" ? { config } : {},
+        ...typeof dependencies !== "undefined" ? { dependencies } : {},
+        ...typeof devDependencies !== "undefined" ? { devDependencies } : {},
+        ...typeof peerDependencies !== "undefined" ? { peerDependencies } : {},
+        ...typeof peerDependenciesMeta !== "undefined" ? { peerDependenciesMeta } : {},
+        ...typeof optionalDependencies !== "undefined" ? { optionalDependencies } : {},
+        ...typeof bundledDependencies !== "undefined" ? { bundledDependencies } : {},
+        ...typeof bundleDependencies !== "undefined" ? { bundleDependencies } : {},
+        ...typeof engines !== "undefined" ? { engines } : {},
+        ...typeof os !== "undefined" ? { os } : {},
+        ...typeof cpu !== "undefined" ? { cpu } : {},
+        ...typeof publishConfig !== "undefined" ? { publishConfig } : {},
+        ...typeof devEngines !== "undefined" ? { devEngines } : {},
+        ...typeof licenses !== "undefined" ? { licenses } : {},
+        ...typeof overrides !== "undefined" ? { overrides } : {},
+        ...rest
+      };
+    }
+    __name(packageSort, "packageSort");
+    module2.exports = {
+      packageSort
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/index.js
+var require_lib11 = __commonJS({
+  "node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/index.js"(exports2, module2) {
+    var { readFile, writeFile } = require("node:fs/promises");
+    var { resolve } = require("node:path");
+    var parseJSON = require_lib();
+    var updateDeps = require_update_dependencies();
+    var updateScripts = require_update_scripts();
+    var updateWorkspaces = require_update_workspaces();
+    var { normalize, syncNormalize } = require_normalize();
+    var { read, parse } = require_read_package();
+    var { packageSort } = require_sort2();
+    var knownSteps = /* @__PURE__ */ new Set([
+      updateDeps,
+      updateScripts,
+      updateWorkspaces
+    ]);
+    var knownKeys = /* @__PURE__ */ new Set([
+      ...updateDeps.knownKeys,
+      "scripts",
+      "workspaces"
+    ]);
+    var PackageJson = class _PackageJson {
+      static {
+        __name(this, "PackageJson");
+      }
+      // npm pkg fix
+      static fixSteps = Object.freeze([
+        "binRefs",
+        "bundleDependencies",
+        "fixName",
+        "fixVersionField",
+        "fixRepositoryField",
+        "fixDependencies",
+        "devDependencies",
+        "scriptpath"
+      ]);
+      static normalizeSteps = Object.freeze([
+        "_id",
+        "_attributes",
+        "bundledDependencies",
+        "bundleDependencies",
+        "optionalDedupe",
+        "scripts",
+        "funding",
+        "bin",
+        "binDir"
+      ]);
+      static prepareSteps = Object.freeze([
+        "_id",
+        "_attributes",
+        "bundledDependencies",
+        "bundleDependencies",
+        "bundleDependenciesDeleteFalse",
+        "gypfile",
+        "serverjs",
+        "scriptpath",
+        "authors",
+        "readme",
+        "mans",
+        "binDir",
+        "gitHead",
+        "fillTypes",
+        "normalizeData",
+        "binRefs"
+      ]);
+      // create a new empty package.json, so we can save at the given path even
+      // though we didn't start from a parsed file
+      static async create(path, opts = {}) {
+        const p = new _PackageJson();
+        await p.create(path);
+        if (opts.data) {
+          return p.update(opts.data);
+        }
+        return p;
+      }
+      // Loads a package.json at given path and JSON parses
+      static async load(path, opts = {}) {
+        const p = new _PackageJson();
+        if (!opts.create) {
+          return p.load(path);
+        }
+        try {
+          return await p.load(path);
+        } catch (err) {
+          if (!err.message.startsWith("Could not read package.json")) {
+            throw err;
+          }
+          return await p.create(path);
+        }
+      }
+      // npm pkg fix
+      static async fix(path, opts) {
+        const p = new _PackageJson();
+        await p.load(path, true);
+        return p.fix(opts);
+      }
+      // read-package-json compatible behavior
+      static async prepare(path, opts) {
+        const p = new _PackageJson();
+        await p.load(path, true);
+        return p.prepare(opts);
+      }
+      // read-package-json-fast compatible behavior
+      static async normalize(path, opts) {
+        const p = new _PackageJson();
+        await p.load(path);
+        return p.normalize(opts);
+      }
+      #path;
+      #manifest;
+      #readFileContent = "";
+      #canSave = true;
+      // Load content from given path
+      async load(path, parseIndex) {
+        this.#path = path;
+        let parseErr;
+        try {
+          this.#readFileContent = await read(this.filename);
+        } catch (err) {
+          if (!parseIndex) {
+            throw err;
+          }
+          parseErr = err;
+        }
+        if (parseErr) {
+          const indexFile = resolve(this.path, "index.js");
+          let indexFileContent;
+          try {
+            indexFileContent = await readFile(indexFile, "utf8");
+          } catch (err) {
+            throw parseErr;
+          }
+          try {
+            this.fromComment(indexFileContent);
+          } catch (err) {
+            throw parseErr;
+          }
+          this.#canSave = false;
+          return this;
+        }
+        return this.fromJSON(this.#readFileContent);
+      }
+      // Load data from a JSON string/buffer
+      fromJSON(data) {
+        this.#manifest = parse(data);
+        return this;
+      }
+      // Manually set data from an existing object
+      fromContent(data) {
+        if (!data || typeof data !== "object") {
+          throw new Error("Content data must be an object");
+        }
+        this.#manifest = data;
+        this.#canSave = false;
+        return this;
+      }
+      // Load data from a comment
+      // /**package { "name": "foo", "version": "1.2.3", ... } **/
+      fromComment(data) {
+        data = data.split(/^\/\*\*package(?:\s|$)/m);
+        if (data.length < 2) {
+          throw new Error("File has no package in comments");
+        }
+        data = data[1];
+        data = data.split(/\*\*\/$/m);
+        if (data.length < 2) {
+          throw new Error("File has no package in comments");
+        }
+        data = data[0];
+        data = data.replace(/^\s*\*/mg, "");
+        this.#manifest = parseJSON(data);
+        return this;
+      }
+      get content() {
+        return this.#manifest;
+      }
+      get path() {
+        return this.#path;
+      }
+      get filename() {
+        if (this.path) {
+          return resolve(this.path, "package.json");
+        }
+        return void 0;
+      }
+      create(path) {
+        this.#path = path;
+        this.#manifest = {};
+        return this;
+      }
+      // This should be the ONLY way to set content in the manifest
+      update(content) {
+        if (!this.content) {
+          throw new Error("Can not update without content.  Please `load` or `create`");
+        }
+        for (const step of knownSteps) {
+          this.#manifest = step({ content, originalContent: this.content });
+        }
+        for (const [key, value] of Object.entries(content)) {
+          if (!knownKeys.has(key)) {
+            this.content[key] = value;
+          }
+        }
+        return this;
+      }
+      async save({ sort } = {}) {
+        if (!this.#canSave) {
+          throw new Error("No package.json to save to");
+        }
+        const {
+          [Symbol.for("indent")]: indent,
+          [Symbol.for("newline")]: newline,
+          ...rest
+        } = this.content;
+        const format = indent === void 0 ? "  " : indent;
+        const eol = newline === void 0 ? "\n" : newline;
+        const content = sort ? packageSort(rest) : rest;
+        const fileContent = `${JSON.stringify(content, null, format)}
+`.replace(/\n/g, eol);
+        if (fileContent.trim() !== this.#readFileContent.trim()) {
+          const written = await writeFile(this.filename, fileContent);
+          this.#readFileContent = fileContent;
+          return written;
+        }
+      }
+      // steps is NOT overrideable here because this is a legacy function that's not being used in new places
+      syncNormalize(opts = {}) {
+        opts.steps = this.constructor.normalizeSteps.filter((s) => s !== "_attributes");
+        syncNormalize(this, opts);
+        return this;
+      }
+      async normalize(opts = {}) {
+        if (!opts.steps) {
+          opts.steps = this.constructor.normalizeSteps;
+        }
+        await normalize(this, opts);
+        return this;
+      }
+      async prepare(opts = {}) {
+        if (!opts.steps) {
+          opts.steps = this.constructor.prepareSteps;
+        }
+        await normalize(this, opts);
+        return this;
+      }
+      async fix(opts = {}) {
+        opts.steps = this.constructor.fixSteps;
+        await normalize(this, opts);
+        return this;
+      }
+    };
+    module2.exports = PackageJson;
+  }
+});
+
+// src/external/@npmcli/package-json.js
+module.exports = require_lib11();
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@npmcli/package-json/lib/read-package.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@npmcli/package-json/lib/read-package.js
new file mode 100644
index 00000000..8ad23fbe
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@npmcli/package-json/lib/read-package.js
@@ -0,0 +1,154 @@
+"use strict";
+/**
+ * Bundled from @npmcli/package-json/lib/read-package.js
+ * This is a zero-dependency bundle created by esbuild.
+ */
+var __defProp = Object.defineProperty;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+var __commonJS = (cb, mod) => function __require() {
+  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+
+// node_modules/.pnpm/json-parse-even-better-errors@5.0.0/node_modules/json-parse-even-better-errors/lib/index.js
+var require_lib = __commonJS({
+  "node_modules/.pnpm/json-parse-even-better-errors@5.0.0/node_modules/json-parse-even-better-errors/lib/index.js"(exports2, module2) {
+    "use strict";
+    var INDENT = Symbol.for("indent");
+    var NEWLINE = Symbol.for("newline");
+    var DEFAULT_NEWLINE = "\n";
+    var DEFAULT_INDENT = "  ";
+    var BOM = /^\uFEFF/;
+    var FORMAT = /^\s*[{[]((?:\r?\n)+)([\s\t]*)/;
+    var EMPTY = /^(?:\{\}|\[\])((?:\r?\n)+)?$/;
+    var UNEXPECTED_TOKEN = /^Unexpected token '?(.)'?(,)? /i;
+    var hexify = /* @__PURE__ */ __name((char) => {
+      const h = char.charCodeAt(0).toString(16).toUpperCase();
+      return `0x${h.length % 2 ? "0" : ""}${h}`;
+    }, "hexify");
+    var stripBOM = /* @__PURE__ */ __name((txt) => String(txt).replace(BOM, ""), "stripBOM");
+    var makeParsedError = /* @__PURE__ */ __name((msg, parsing, position = 0) => ({
+      message: `${msg} while parsing ${parsing}`,
+      position
+    }), "makeParsedError");
+    var parseError = /* @__PURE__ */ __name((e, txt, context = 20) => {
+      let msg = e.message;
+      if (!txt) {
+        return makeParsedError(msg, "empty string");
+      }
+      const badTokenMatch = msg.match(UNEXPECTED_TOKEN);
+      const badIndexMatch = msg.match(/ position\s+(\d+)/i);
+      if (badTokenMatch) {
+        msg = msg.replace(
+          UNEXPECTED_TOKEN,
+          `Unexpected token ${JSON.stringify(badTokenMatch[1])} (${hexify(badTokenMatch[1])})$2 `
+        );
+      }
+      let errIdx;
+      if (badIndexMatch) {
+        errIdx = +badIndexMatch[1];
+      } else if (msg.match(/^Unexpected end of JSON.*/i)) {
+        errIdx = txt.length - 1;
+      }
+      if (errIdx == null) {
+        return makeParsedError(msg, `'${txt.slice(0, context * 2)}'`);
+      }
+      const start = errIdx <= context ? 0 : errIdx - context;
+      const end = errIdx + context >= txt.length ? txt.length : errIdx + context;
+      const slice = `${start ? "..." : ""}${txt.slice(start, end)}${end === txt.length ? "" : "..."}`;
+      return makeParsedError(
+        msg,
+        `${txt === slice ? "" : "near "}${JSON.stringify(slice)}`,
+        errIdx
+      );
+    }, "parseError");
+    var JSONParseError = class extends SyntaxError {
+      static {
+        __name(this, "JSONParseError");
+      }
+      constructor(er, txt, context, caller) {
+        const metadata = parseError(er, txt, context);
+        super(metadata.message);
+        Object.assign(this, metadata);
+        this.code = "EJSONPARSE";
+        this.systemError = er;
+        Error.captureStackTrace(this, caller || this.constructor);
+      }
+      get name() {
+        return this.constructor.name;
+      }
+      set name(n) {
+      }
+      get [Symbol.toStringTag]() {
+        return this.constructor.name;
+      }
+    };
+    var parseJson = /* @__PURE__ */ __name((txt, reviver) => {
+      const result = JSON.parse(txt, reviver);
+      if (result && typeof result === "object") {
+        const match = txt.match(EMPTY) || txt.match(FORMAT) || [null, "", ""];
+        result[NEWLINE] = match[1] ?? DEFAULT_NEWLINE;
+        result[INDENT] = match[2] ?? DEFAULT_INDENT;
+      }
+      return result;
+    }, "parseJson");
+    var parseJsonError = /* @__PURE__ */ __name((raw, reviver, context) => {
+      const txt = stripBOM(raw);
+      try {
+        return parseJson(txt, reviver);
+      } catch (e) {
+        if (typeof raw !== "string" && !Buffer.isBuffer(raw)) {
+          const msg = Array.isArray(raw) && raw.length === 0 ? "an empty array" : String(raw);
+          throw Object.assign(
+            new TypeError(`Cannot parse ${msg}`),
+            { code: "EJSONPARSE", systemError: e }
+          );
+        }
+        throw new JSONParseError(e, txt, context, parseJsonError);
+      }
+    }, "parseJsonError");
+    module2.exports = parseJsonError;
+    parseJsonError.JSONParseError = JSONParseError;
+    parseJsonError.noExceptions = (raw, reviver) => {
+      try {
+        return parseJson(stripBOM(raw), reviver);
+      } catch {
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/read-package.js
+var { readFile } = require("fs/promises");
+var parseJSON = require_lib();
+async function read(filename) {
+  try {
+    const data = await readFile(filename, "utf8");
+    return data;
+  } catch (err) {
+    err.message = `Could not read package.json: ${err}`;
+    throw err;
+  }
+}
+__name(read, "read");
+function parse(data) {
+  try {
+    const content = parseJSON(data);
+    return content;
+  } catch (err) {
+    err.message = `Invalid package.json: ${err}`;
+    throw err;
+  }
+}
+__name(parse, "parse");
+async function readPackage(filename) {
+  const data = await read(filename);
+  const content = parse(data);
+  return content;
+}
+__name(readPackage, "readPackage");
+module.exports = {
+  read,
+  parse,
+  readPackage
+};
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@npmcli/package-json/lib/sort.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@npmcli/package-json/lib/sort.js
new file mode 100644
index 00000000..a0802a8e
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@npmcli/package-json/lib/sort.js
@@ -0,0 +1,101 @@
+"use strict";
+/**
+ * Bundled from @npmcli/package-json/lib/sort.js
+ * This is a zero-dependency bundle created by esbuild.
+ */
+var __defProp = Object.defineProperty;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+
+// node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/sort.js
+function packageSort(json) {
+  const {
+    name,
+    version,
+    private: isPrivate,
+    description,
+    keywords,
+    homepage,
+    bugs,
+    repository,
+    funding,
+    license,
+    author,
+    maintainers,
+    contributors,
+    type,
+    imports,
+    exports: exports2,
+    main,
+    browser,
+    types,
+    bin,
+    man,
+    directories,
+    files,
+    workspaces,
+    scripts,
+    config,
+    dependencies,
+    devDependencies,
+    peerDependencies,
+    peerDependenciesMeta,
+    optionalDependencies,
+    bundledDependencies,
+    bundleDependencies,
+    engines,
+    os,
+    cpu,
+    publishConfig,
+    devEngines,
+    licenses,
+    overrides,
+    ...rest
+  } = json;
+  return {
+    ...typeof name !== "undefined" ? { name } : {},
+    ...typeof version !== "undefined" ? { version } : {},
+    ...typeof isPrivate !== "undefined" ? { private: isPrivate } : {},
+    ...typeof description !== "undefined" ? { description } : {},
+    ...typeof keywords !== "undefined" ? { keywords } : {},
+    ...typeof homepage !== "undefined" ? { homepage } : {},
+    ...typeof bugs !== "undefined" ? { bugs } : {},
+    ...typeof repository !== "undefined" ? { repository } : {},
+    ...typeof funding !== "undefined" ? { funding } : {},
+    ...typeof license !== "undefined" ? { license } : {},
+    ...typeof author !== "undefined" ? { author } : {},
+    ...typeof maintainers !== "undefined" ? { maintainers } : {},
+    ...typeof contributors !== "undefined" ? { contributors } : {},
+    ...typeof type !== "undefined" ? { type } : {},
+    ...typeof imports !== "undefined" ? { imports } : {},
+    ...typeof exports2 !== "undefined" ? { exports: exports2 } : {},
+    ...typeof main !== "undefined" ? { main } : {},
+    ...typeof browser !== "undefined" ? { browser } : {},
+    ...typeof types !== "undefined" ? { types } : {},
+    ...typeof bin !== "undefined" ? { bin } : {},
+    ...typeof man !== "undefined" ? { man } : {},
+    ...typeof directories !== "undefined" ? { directories } : {},
+    ...typeof files !== "undefined" ? { files } : {},
+    ...typeof workspaces !== "undefined" ? { workspaces } : {},
+    ...typeof scripts !== "undefined" ? { scripts } : {},
+    ...typeof config !== "undefined" ? { config } : {},
+    ...typeof dependencies !== "undefined" ? { dependencies } : {},
+    ...typeof devDependencies !== "undefined" ? { devDependencies } : {},
+    ...typeof peerDependencies !== "undefined" ? { peerDependencies } : {},
+    ...typeof peerDependenciesMeta !== "undefined" ? { peerDependenciesMeta } : {},
+    ...typeof optionalDependencies !== "undefined" ? { optionalDependencies } : {},
+    ...typeof bundledDependencies !== "undefined" ? { bundledDependencies } : {},
+    ...typeof bundleDependencies !== "undefined" ? { bundleDependencies } : {},
+    ...typeof engines !== "undefined" ? { engines } : {},
+    ...typeof os !== "undefined" ? { os } : {},
+    ...typeof cpu !== "undefined" ? { cpu } : {},
+    ...typeof publishConfig !== "undefined" ? { publishConfig } : {},
+    ...typeof devEngines !== "undefined" ? { devEngines } : {},
+    ...typeof licenses !== "undefined" ? { licenses } : {},
+    ...typeof overrides !== "undefined" ? { overrides } : {},
+    ...rest
+  };
+}
+__name(packageSort, "packageSort");
+module.exports = {
+  packageSort
+};
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@npmcli/promise-spawn.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@npmcli/promise-spawn.js
new file mode 100644
index 00000000..6992ca87
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@npmcli/promise-spawn.js
@@ -0,0 +1,485 @@
+"use strict";
+/**
+ * Bundled from @npmcli/promise-spawn
+ * This is a zero-dependency bundle created by esbuild.
+ */
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+var __commonJS = (cb, mod) => function __require() {
+  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+
+// node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/posix.js
+var require_posix = __commonJS({
+  "node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/posix.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.sync = exports2.isexe = void 0;
+    var fs_1 = require("fs");
+    var promises_1 = require("fs/promises");
+    var isexe = /* @__PURE__ */ __name(async (path, options = {}) => {
+      const { ignoreErrors = false } = options;
+      try {
+        return checkStat(await (0, promises_1.stat)(path), options);
+      } catch (e) {
+        const er = e;
+        if (ignoreErrors || er.code === "EACCES")
+          return false;
+        throw er;
+      }
+    }, "isexe");
+    exports2.isexe = isexe;
+    var sync = /* @__PURE__ */ __name((path, options = {}) => {
+      const { ignoreErrors = false } = options;
+      try {
+        return checkStat((0, fs_1.statSync)(path), options);
+      } catch (e) {
+        const er = e;
+        if (ignoreErrors || er.code === "EACCES")
+          return false;
+        throw er;
+      }
+    }, "sync");
+    exports2.sync = sync;
+    var checkStat = /* @__PURE__ */ __name((stat, options) => stat.isFile() && checkMode(stat, options), "checkStat");
+    var checkMode = /* @__PURE__ */ __name((stat, options) => {
+      const myUid = options.uid ?? process.getuid?.();
+      const myGroups = options.groups ?? process.getgroups?.() ?? [];
+      const myGid = options.gid ?? process.getgid?.() ?? myGroups[0];
+      if (myUid === void 0 || myGid === void 0) {
+        throw new Error("cannot get uid or gid");
+      }
+      const groups = /* @__PURE__ */ new Set([myGid, ...myGroups]);
+      const mod = stat.mode;
+      const uid = stat.uid;
+      const gid = stat.gid;
+      const u = parseInt("100", 8);
+      const g = parseInt("010", 8);
+      const o = parseInt("001", 8);
+      const ug = u | g;
+      return !!(mod & o || mod & g && groups.has(gid) || mod & u && uid === myUid || mod & ug && myUid === 0);
+    }, "checkMode");
+  }
+});
+
+// node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/win32.js
+var require_win32 = __commonJS({
+  "node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/win32.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.sync = exports2.isexe = void 0;
+    var fs_1 = require("fs");
+    var promises_1 = require("fs/promises");
+    var isexe = /* @__PURE__ */ __name(async (path, options = {}) => {
+      const { ignoreErrors = false } = options;
+      try {
+        return checkStat(await (0, promises_1.stat)(path), path, options);
+      } catch (e) {
+        const er = e;
+        if (ignoreErrors || er.code === "EACCES")
+          return false;
+        throw er;
+      }
+    }, "isexe");
+    exports2.isexe = isexe;
+    var sync = /* @__PURE__ */ __name((path, options = {}) => {
+      const { ignoreErrors = false } = options;
+      try {
+        return checkStat((0, fs_1.statSync)(path), path, options);
+      } catch (e) {
+        const er = e;
+        if (ignoreErrors || er.code === "EACCES")
+          return false;
+        throw er;
+      }
+    }, "sync");
+    exports2.sync = sync;
+    var checkPathExt = /* @__PURE__ */ __name((path, options) => {
+      const { pathExt = process.env.PATHEXT || "" } = options;
+      const peSplit = pathExt.split(";");
+      if (peSplit.indexOf("") !== -1) {
+        return true;
+      }
+      for (let i = 0; i < peSplit.length; i++) {
+        const p = peSplit[i].toLowerCase();
+        const ext = path.substring(path.length - p.length).toLowerCase();
+        if (p && ext === p) {
+          return true;
+        }
+      }
+      return false;
+    }, "checkPathExt");
+    var checkStat = /* @__PURE__ */ __name((stat, path, options) => stat.isFile() && checkPathExt(path, options), "checkStat");
+  }
+});
+
+// node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/options.js
+var require_options = __commonJS({
+  "node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/options.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+  }
+});
+
+// node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/index.js
+var require_cjs = __commonJS({
+  "node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/index.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
+      for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.sync = exports2.isexe = exports2.posix = exports2.win32 = void 0;
+    var posix = __importStar(require_posix());
+    exports2.posix = posix;
+    var win32 = __importStar(require_win32());
+    exports2.win32 = win32;
+    __exportStar(require_options(), exports2);
+    var platform = process.env._ISEXE_TEST_PLATFORM_ || process.platform;
+    var impl = platform === "win32" ? win32 : posix;
+    exports2.isexe = impl.isexe;
+    exports2.sync = impl.sync;
+  }
+});
+
+// node_modules/.pnpm/which@5.0.0/node_modules/which/lib/index.js
+var require_lib = __commonJS({
+  "node_modules/.pnpm/which@5.0.0/node_modules/which/lib/index.js"(exports2, module2) {
+    var { isexe, sync: isexeSync } = require_cjs();
+    var { join, delimiter, sep, posix } = require("path");
+    var isWindows = process.platform === "win32";
+    var rSlash = new RegExp(`[${posix.sep}${sep === posix.sep ? "" : sep}]`.replace(/(\\)/g, "\\$1"));
+    var rRel = new RegExp(`^\\.${rSlash.source}`);
+    var getNotFoundError = /* @__PURE__ */ __name((cmd) => Object.assign(new Error(`not found: ${cmd}`), { code: "ENOENT" }), "getNotFoundError");
+    var getPathInfo = /* @__PURE__ */ __name((cmd, {
+      path: optPath = process.env.PATH,
+      pathExt: optPathExt = process.env.PATHEXT,
+      delimiter: optDelimiter = delimiter
+    }) => {
+      const pathEnv = cmd.match(rSlash) ? [""] : [
+        // windows always checks the cwd first
+        ...isWindows ? [process.cwd()] : [],
+        ...(optPath || /* istanbul ignore next: very unusual */
+        "").split(optDelimiter)
+      ];
+      if (isWindows) {
+        const pathExtExe = optPathExt || [".EXE", ".CMD", ".BAT", ".COM"].join(optDelimiter);
+        const pathExt = pathExtExe.split(optDelimiter).flatMap((item) => [item, item.toLowerCase()]);
+        if (cmd.includes(".") && pathExt[0] !== "") {
+          pathExt.unshift("");
+        }
+        return { pathEnv, pathExt, pathExtExe };
+      }
+      return { pathEnv, pathExt: [""] };
+    }, "getPathInfo");
+    var getPathPart = /* @__PURE__ */ __name((raw, cmd) => {
+      const pathPart = /^".*"$/.test(raw) ? raw.slice(1, -1) : raw;
+      const prefix = !pathPart && rRel.test(cmd) ? cmd.slice(0, 2) : "";
+      return prefix + join(pathPart, cmd);
+    }, "getPathPart");
+    var which = /* @__PURE__ */ __name(async (cmd, opt = {}) => {
+      const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt);
+      const found = [];
+      for (const envPart of pathEnv) {
+        const p = getPathPart(envPart, cmd);
+        for (const ext of pathExt) {
+          const withExt = p + ext;
+          const is = await isexe(withExt, { pathExt: pathExtExe, ignoreErrors: true });
+          if (is) {
+            if (!opt.all) {
+              return withExt;
+            }
+            found.push(withExt);
+          }
+        }
+      }
+      if (opt.all && found.length) {
+        return found;
+      }
+      if (opt.nothrow) {
+        return null;
+      }
+      throw getNotFoundError(cmd);
+    }, "which");
+    var whichSync = /* @__PURE__ */ __name((cmd, opt = {}) => {
+      const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt);
+      const found = [];
+      for (const pathEnvPart of pathEnv) {
+        const p = getPathPart(pathEnvPart, cmd);
+        for (const ext of pathExt) {
+          const withExt = p + ext;
+          const is = isexeSync(withExt, { pathExt: pathExtExe, ignoreErrors: true });
+          if (is) {
+            if (!opt.all) {
+              return withExt;
+            }
+            found.push(withExt);
+          }
+        }
+      }
+      if (opt.all && found.length) {
+        return found;
+      }
+      if (opt.nothrow) {
+        return null;
+      }
+      throw getNotFoundError(cmd);
+    }, "whichSync");
+    module2.exports = which;
+    which.sync = whichSync;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+promise-spawn@9.0.1/node_modules/@npmcli/promise-spawn/lib/escape.js
+var require_escape = __commonJS({
+  "node_modules/.pnpm/@npmcli+promise-spawn@9.0.1/node_modules/@npmcli/promise-spawn/lib/escape.js"(exports2, module2) {
+    "use strict";
+    var cmd = /* @__PURE__ */ __name((input, doubleEscape) => {
+      if (!input.length) {
+        return '""';
+      }
+      let result;
+      if (!/[ \t\n\v"]/.test(input)) {
+        result = input;
+      } else {
+        result = '"';
+        for (let i = 0; i <= input.length; ++i) {
+          let slashCount = 0;
+          while (input[i] === "\\") {
+            ++i;
+            ++slashCount;
+          }
+          if (i === input.length) {
+            result += "\\".repeat(slashCount * 2);
+            break;
+          }
+          if (input[i] === '"') {
+            result += "\\".repeat(slashCount * 2 + 1);
+            result += input[i];
+          } else {
+            result += "\\".repeat(slashCount);
+            result += input[i];
+          }
+        }
+        result += '"';
+      }
+      result = result.replace(/[ !%^&()<>|"]/g, "^$&");
+      if (doubleEscape) {
+        result = result.replace(/[ !%^&()<>|"]/g, "^$&");
+      }
+      return result;
+    }, "cmd");
+    var sh = /* @__PURE__ */ __name((input) => {
+      if (!input.length) {
+        return `''`;
+      }
+      if (!/[\t\n\r "#$&'()*;<>?\\`|~]/.test(input)) {
+        return input;
+      }
+      const result = `'${input.replace(/'/g, `'\\''`)}'`.replace(/^(?:'')+(?!$)/, "").replace(/\\'''/g, `\\'`);
+      return result;
+    }, "sh");
+    module2.exports = {
+      cmd,
+      sh
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+promise-spawn@9.0.1/node_modules/@npmcli/promise-spawn/lib/index.js
+var require_lib2 = __commonJS({
+  "node_modules/.pnpm/@npmcli+promise-spawn@9.0.1/node_modules/@npmcli/promise-spawn/lib/index.js"(exports2, module2) {
+    "use strict";
+    var { spawn } = require("child_process");
+    var os = require("os");
+    var which = require_lib();
+    var escape = require_escape();
+    var promiseSpawn = /* @__PURE__ */ __name((cmd, args, opts = {}, extra = {}) => {
+      if (opts.shell) {
+        return spawnWithShell(cmd, args, opts, extra);
+      }
+      let resolve, reject;
+      const promise = new Promise((_resolve, _reject) => {
+        resolve = _resolve;
+        reject = _reject;
+      });
+      const closeError = new Error("command failed");
+      const stdout = [];
+      const stderr = [];
+      const getResult = /* @__PURE__ */ __name((result) => ({
+        cmd,
+        args,
+        ...result,
+        ...stdioResult(stdout, stderr, opts),
+        ...extra
+      }), "getResult");
+      const rejectWithOpts = /* @__PURE__ */ __name((er, erOpts) => {
+        const resultError = getResult(erOpts);
+        reject(Object.assign(er, resultError));
+      }, "rejectWithOpts");
+      const proc = spawn(cmd, args, opts);
+      promise.stdin = proc.stdin;
+      promise.process = proc;
+      proc.on("error", rejectWithOpts);
+      if (proc.stdout) {
+        proc.stdout.on("data", (c) => stdout.push(c));
+        proc.stdout.on("error", rejectWithOpts);
+      }
+      if (proc.stderr) {
+        proc.stderr.on("data", (c) => stderr.push(c));
+        proc.stderr.on("error", rejectWithOpts);
+      }
+      proc.on("close", (code, signal) => {
+        if (code || signal) {
+          rejectWithOpts(closeError, { code, signal });
+        } else {
+          resolve(getResult({ code, signal }));
+        }
+      });
+      return promise;
+    }, "promiseSpawn");
+    var spawnWithShell = /* @__PURE__ */ __name((cmd, args, opts, extra) => {
+      let command = opts.shell;
+      if (command === true) {
+        command = process.platform === "win32" ? process.env.ComSpec || "cmd.exe" : "sh";
+      }
+      const options = { ...opts, shell: false };
+      const realArgs = [];
+      let script = cmd;
+      const isCmd = /(?:^|\\)cmd(?:\.exe)?$/i.test(command);
+      if (isCmd) {
+        let doubleEscape = false;
+        let initialCmd = "";
+        let insideQuotes = false;
+        for (let i = 0; i < cmd.length; ++i) {
+          const char = cmd.charAt(i);
+          if (char === " " && !insideQuotes) {
+            break;
+          }
+          initialCmd += char;
+          if (char === '"' || char === "'") {
+            insideQuotes = !insideQuotes;
+          }
+        }
+        let pathToInitial;
+        try {
+          pathToInitial = which.sync(initialCmd, {
+            path: options.env && findInObject(options.env, "PATH") || process.env.PATH,
+            pathext: options.env && findInObject(options.env, "PATHEXT") || process.env.PATHEXT
+          }).toLowerCase();
+        } catch (err) {
+          pathToInitial = initialCmd.toLowerCase();
+        }
+        doubleEscape = pathToInitial.endsWith(".cmd") || pathToInitial.endsWith(".bat");
+        for (const arg of args) {
+          script += ` ${escape.cmd(arg, doubleEscape)}`;
+        }
+        realArgs.push("/d", "/s", "/c", script);
+        options.windowsVerbatimArguments = true;
+      } else {
+        for (const arg of args) {
+          script += ` ${escape.sh(arg)}`;
+        }
+        realArgs.push("-c", script);
+      }
+      return promiseSpawn(command, realArgs, options, extra);
+    }, "spawnWithShell");
+    var open = /* @__PURE__ */ __name((_args, opts = {}, extra = {}) => {
+      const options = { ...opts, shell: true };
+      const args = [].concat(_args);
+      let platform = process.platform;
+      if (platform === "linux" && os.release().toLowerCase().includes("microsoft")) {
+        platform = "wsl";
+        if (!process.env.BROWSER) {
+          return Promise.reject(
+            new Error("Set the BROWSER environment variable to your desired browser.")
+          );
+        }
+      }
+      let command = options.command;
+      if (!command) {
+        if (platform === "win32") {
+          options.shell = process.env.ComSpec;
+          command = 'start ""';
+        } else if (platform === "wsl") {
+          command = "sensible-browser";
+        } else if (platform === "darwin") {
+          command = "open";
+        } else {
+          command = "xdg-open";
+        }
+      }
+      return spawnWithShell(command, args, options, extra);
+    }, "open");
+    promiseSpawn.open = open;
+    var isPipe = /* @__PURE__ */ __name((stdio = "pipe", fd) => {
+      if (stdio === "pipe" || stdio === null) {
+        return true;
+      }
+      if (Array.isArray(stdio)) {
+        return isPipe(stdio[fd], fd);
+      }
+      return false;
+    }, "isPipe");
+    var stdioResult = /* @__PURE__ */ __name((stdout, stderr, { stdioString = true, stdio }) => {
+      const result = {
+        stdout: null,
+        stderr: null
+      };
+      if (isPipe(stdio, 1)) {
+        result.stdout = Buffer.concat(stdout);
+        if (stdioString) {
+          result.stdout = result.stdout.toString().trim();
+        }
+      }
+      if (isPipe(stdio, 2)) {
+        result.stderr = Buffer.concat(stderr);
+        if (stdioString) {
+          result.stderr = result.stderr.toString().trim();
+        }
+      }
+      return result;
+    }, "stdioResult");
+    var findInObject = /* @__PURE__ */ __name((obj, key) => {
+      key = key.toLowerCase();
+      for (const objKey of Object.keys(obj).sort()) {
+        if (objKey.toLowerCase() === key) {
+          return obj[objKey];
+        }
+      }
+    }, "findInObject");
+    module2.exports = promiseSpawn;
+  }
+});
+
+// src/external/@npmcli/promise-spawn.js
+module.exports = require_lib2();
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@socketregistry/is-unicode-supported.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@socketregistry/is-unicode-supported.js
new file mode 100644
index 00000000..4fcc4590
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@socketregistry/is-unicode-supported.js
@@ -0,0 +1,47 @@
+"use strict";
+/**
+ * Bundled from @socketregistry/is-unicode-supported
+ * This is a zero-dependency bundle created by esbuild.
+ */
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+var __commonJS = (cb, mod) => function __require() {
+  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+
+// node_modules/.pnpm/@socketregistry+is-unicode-supported@1.0.5/node_modules/@socketregistry/is-unicode-supported/index.cjs
+var require_is_unicode_supported = __commonJS({
+  "node_modules/.pnpm/@socketregistry+is-unicode-supported@1.0.5/node_modules/@socketregistry/is-unicode-supported/index.cjs"(exports2, module2) {
+    "use strict";
+    var _process;
+    function getProcess() {
+      if (_process === void 0) {
+        _process = require("process");
+      }
+      return _process;
+    }
+    __name(getProcess, "getProcess");
+    module2.exports = /* @__PURE__ */ __name(function isUnicodeSupported() {
+      const process = getProcess();
+      if (process.platform !== "win32") {
+        return process.env.TERM !== "linux";
+      }
+      const { env } = process;
+      if (
+        // Windows Terminal.
+        env.WT_SESSION || // Terminus (<0.2.27).
+        env.TERMINUS_SUBLIME || // ConEmu and cmder.
+        env.ConEmuTask === "{cmd::Cmder}"
+      ) {
+        return true;
+      }
+      const { TERM, TERM_PROGRAM } = env;
+      return TERM_PROGRAM === "Terminus-Sublime" || TERM_PROGRAM === "vscode" || TERM === "xterm-256color" || TERM === "alacritty" || TERM === "rxvt-unicode" || TERM === "rxvt-unicode-256color" || env.TERMINAL_EMULATOR === "JetBrains-JediTerm";
+    }, "isUnicodeSupported");
+  }
+});
+
+// src/external/@socketregistry/is-unicode-supported.js
+module.exports = require_is_unicode_supported();
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@socketregistry/packageurl-js.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@socketregistry/packageurl-js.js
new file mode 100644
index 00000000..0087016f
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@socketregistry/packageurl-js.js
@@ -0,0 +1,7378 @@
+"use strict";
+/**
+ * Bundled from @socketregistry/packageurl-js
+ * This is a zero-dependency bundle created by esbuild.
+ */
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+var __commonJS = (cb, mod) => function __require() {
+  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+
+// node_modules/.pnpm/@socketregistry+packageurl-js@1.4.1/node_modules/@socketregistry/packageurl-js/dist/index.js
+var require_dist = __commonJS({
+  "node_modules/.pnpm/@socketregistry+packageurl-js@1.4.1/node_modules/@socketregistry/packageurl-js/dist/index.js"(exports2, module2) {
+    "use strict";
+    var __create = Object.create;
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __getProtoOf = Object.getPrototypeOf;
+    var __hasOwnProp = Object.prototype.hasOwnProperty;
+    var __commonJS2 = /* @__PURE__ */ __name((cb, mod) => /* @__PURE__ */ __name(function __require() {
+      return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+    }, "__require"), "__commonJS");
+    var __export = /* @__PURE__ */ __name((target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    }, "__export");
+    var __copyProps = /* @__PURE__ */ __name((to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp.call(to, key) && key !== except)
+            __defProp2(to, key, { get: /* @__PURE__ */ __name(() => from[key], "get"), enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+      }
+      return to;
+    }, "__copyProps");
+    var __toESM = /* @__PURE__ */ __name((mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+      // If the importer is in node compatibility mode or this is not an ESM
+      // file that has been converted to a CommonJS file using a Babel-
+      // compatible transform (i.e. "__esModule" has not been set), then set
+      // "default" to the CommonJS "module.exports" for node compatibility.
+      isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target,
+      mod
+    )), "__toESM");
+    var __toCommonJS = /* @__PURE__ */ __name((mod) => __copyProps(__defProp2({}, "__esModule", { value: true }), mod), "__toCommonJS");
+    var require_types = __commonJS2({
+      "@socketsecurity/lib/dist/types.js"(exports22, module22) {
+        "use strict";
+        var __defProp22 = Object.defineProperty;
+        var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+        var __getOwnPropNames22 = Object.getOwnPropertyNames;
+        var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+        var __export2 = /* @__PURE__ */ __name((target, all) => {
+          for (var name in all)
+            __defProp22(target, name, { get: all[name], enumerable: true });
+        }, "__export2");
+        var __copyProps2 = /* @__PURE__ */ __name((to, from, except, desc) => {
+          if (from && typeof from === "object" || typeof from === "function") {
+            for (let key of __getOwnPropNames22(from))
+              if (!__hasOwnProp2.call(to, key) && key !== except)
+                __defProp22(to, key, { get: /* @__PURE__ */ __name(() => from[key], "get"), enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+          }
+          return to;
+        }, "__copyProps2");
+        var __toCommonJS2 = /* @__PURE__ */ __name((mod) => __copyProps2(__defProp22({}, "__esModule", { value: true }), mod), "__toCommonJS2");
+        var types_exports = {};
+        __export2(types_exports, {
+          PURL_Type: /* @__PURE__ */ __name(() => PURL_Type2, "PURL_Type")
+        });
+        module22.exports = __toCommonJS2(types_exports);
+        var PURL_Type2 = /* @__PURE__ */ ((PURL_Type22) => {
+          PURL_Type22["ALPM"] = "alpm";
+          PURL_Type22["APK"] = "apk";
+          PURL_Type22["BITBUCKET"] = "bitbucket";
+          PURL_Type22["COCOAPODS"] = "cocoapods";
+          PURL_Type22["CARGO"] = "cargo";
+          PURL_Type22["CHROME"] = "chrome";
+          PURL_Type22["COMPOSER"] = "composer";
+          PURL_Type22["CONAN"] = "conan";
+          PURL_Type22["CONDA"] = "conda";
+          PURL_Type22["CRAN"] = "cran";
+          PURL_Type22["DEB"] = "deb";
+          PURL_Type22["DOCKER"] = "docker";
+          PURL_Type22["GEM"] = "gem";
+          PURL_Type22["GENERIC"] = "generic";
+          PURL_Type22["GITHUB"] = "github";
+          PURL_Type22["GOLANG"] = "golang";
+          PURL_Type22["HACKAGE"] = "hackage";
+          PURL_Type22["HEX"] = "hex";
+          PURL_Type22["HUGGINGFACE"] = "huggingface";
+          PURL_Type22["MAVEN"] = "maven";
+          PURL_Type22["MLFLOW"] = "mlflow";
+          PURL_Type22["NPM"] = "npm";
+          PURL_Type22["NUGET"] = "nuget";
+          PURL_Type22["OCI"] = "oci";
+          PURL_Type22["PUB"] = "pub";
+          PURL_Type22["PYPI"] = "pypi";
+          PURL_Type22["QPKG"] = "qpkg";
+          PURL_Type22["RPM"] = "rpm";
+          PURL_Type22["SWID"] = "swid";
+          PURL_Type22["SWIFT"] = "swift";
+          PURL_Type22["VCS"] = "vcs";
+          PURL_Type22["VSCODE"] = "vscode";
+          return PURL_Type22;
+        })(PURL_Type2 || {});
+      }
+    });
+    var require_legacy_names = __commonJS2({
+      "data/npm/legacy-names.json"(exports22, module22) {
+        module22.exports = [
+          "@antoinerey/comp-Fetch",
+          "@antoinerey/comp-VideoPlayer",
+          "@beisen/Accordion",
+          "@beisen/Approve",
+          "@beisen/AreaSelector",
+          "@beisen/AutoComplete",
+          "@beisen/AutoTree",
+          "@beisen/BaseButton",
+          "@beisen/Beaute",
+          "@beisen/BeisenCloudMobile",
+          "@beisen/BeisenCloudUI",
+          "@beisen/ButtonGroup",
+          "@beisen/ChaosUI",
+          "@beisen/ChaosUI-V1",
+          "@beisen/CheckboxList",
+          "@beisen/CommonMount",
+          "@beisen/CommonPop",
+          "@beisen/DataGrid",
+          "@beisen/DateTime",
+          "@beisen/DropDownButton",
+          "@beisen/DropDownList",
+          "@beisen/ExtendComponent",
+          "@beisen/FormUploader",
+          "@beisen/IconButton",
+          "@beisen/Loading",
+          "@beisen/MultiSelect",
+          "@beisen/NaDeStyle",
+          "@beisen/Paging",
+          "@beisen/PopLayer",
+          "@beisen/RadioList",
+          "@beisen/ReactTransformTenchmark",
+          "@beisen/Search",
+          "@beisen/selectedComponent",
+          "@beisen/Sidebar",
+          "@beisen/StaticFormLabel",
+          "@beisen/TabComponent",
+          "@beisen/Textarea",
+          "@beisen/Textbox",
+          "@beisen/TimePicker",
+          "@beisen/TitaFeed",
+          "@beisen/ToolTip",
+          "@beisen/Transfer",
+          "@beisen/Tree",
+          "@beisen/UserSelector",
+          "@chasidic/tsSchema",
+          "@chymz/DaStrap",
+          "@chymz/DaUsers",
+          "@claviska/jquery-ajaxSubmit",
+          "@cryptolize/FileSaver",
+          "@djforth/I18n_helper",
+          "@dostolu/baseController",
+          "@dostolu/exctractIntl",
+          "@dostolu/mongooseSlug",
+          "@dostolu/validationTransformer",
+          "@opam-alpha/ANSITerminal",
+          "@opam-alpha/BetterErrors",
+          "@opam-alpha/reactiveData",
+          "@pioug/MidiConvert",
+          "@smuuf/idleCat",
+          "@sycoraxya/validateJS",
+          "@tempest/endWhen",
+          "@tempest/fromPromise",
+          "@tempest/replaceError",
+          "@tempest/startWith",
+          "@tempest/throwError",
+          "@yuanhao/draft-js-mentionHashtag-plugin",
+          "3dBinPack",
+          "3DViewerComponent",
+          "4meFirst-github-example",
+          "9Wares-js",
+          "37FIS",
+          "A",
+          "ABAValidator",
+          "ABCEnd",
+          "AbokyBot",
+          "Accessor",
+          "Accessor_MongoDB",
+          "Accessor_MySQL",
+          "Accessor_Singleton",
+          "Account",
+          "accumulateArray",
+          "ACCUPLACERClient",
+          "AccuplacerClient",
+          "Acid",
+          "activaDocs",
+          "ActiveResource.js",
+          "ADBCordovaAnalytics",
+          "addTimeout",
+          "AdultJS",
+          "AesUtil",
+          "AgentX",
+          "AirBridgePlugin",
+          "airLogger",
+          "ajiThird",
+          "alaGDK",
+          "AlarmClock",
+          "alarmClock",
+          "Alchemyst",
+          "AlertLogic",
+          "alertsXYZ",
+          "ali-topSdk",
+          "AliceBot",
+          "alinkRNTest",
+          "aliOcrIdCard",
+          "AllCal.WebApp",
+          "alpacaDash",
+          "AmateurJS",
+          "AMD",
+          "AMGCryptLib",
+          "AmILate",
+          "AmILateAnand",
+          "amitTest",
+          "AmpCoreApi",
+          "amProductsearch",
+          "amqpWrapper",
+          "amrToMp3",
+          "angular-autoFields-bootstrap",
+          "angular-dateParser",
+          "angular-GAPI",
+          "angular-PubSub",
+          "Angular-test-child",
+          "Angular1",
+          "Angular2",
+          "angular2-Library",
+          "angular2-localStorage",
+          "angular2-Menu",
+          "angular2-quickstart-ngSemantic",
+          "angularApp",
+          "angularCubicColorPicker",
+          "angularjs-ES6-brunch-seed",
+          "angularjsSlider",
+          "AngularStompDK",
+          "Animated_GIF",
+          "animateJs",
+          "animateSCSS",
+          "AnimationFrame",
+          "AnimIt",
+          "Anirudhnodeapp",
+          "Anjali",
+          "annoteJS",
+          "ANSIdom",
+          "antFB",
+          "antFB-init",
+          "antFB-mobile",
+          "antFB-router-redux-ie8",
+          "AntMobileUI",
+          "AnToast",
+          "Antony",
+          "aoIoHw90B5sE1wG9",
+          "API-Documentation",
+          "APIConnect",
+          "APICreatorSDK",
+          "APlan",
+          "APM-mouse",
+          "APM.P2H",
+          "apMigStats",
+          "AporaPushNotification",
+          "App2App",
+          "applqpakTest",
+          "AppTracker",
+          "AQ",
+          "ArcusNode",
+          "AriesNode",
+          "array_handler_liz_Li",
+          "Array.prototype.forEachAsync",
+          "ArrayBuffer-shim",
+          "arrayFuncs",
+          "ArrowAulaExpress",
+          "Article-collider-packages",
+          "Arunkumar-Angular-Trial",
+          "asEvented",
+          "asJam",
+          "ASP.NET",
+          "assert",
+          "AssetPipeline",
+          "assignment2-BW",
+          "Assignment6",
+          "async_hooks",
+          "asyncBuilder",
+          "asyncEJS",
+          "AsyncHttpRequest-CordovaPlugin",
+          "AsyncProxy",
+          "AsyncStorage",
+          "asyncStorage",
+          "atom-C",
+          "atom-Fe",
+          "atom-Ge",
+          "atom-K",
+          "atom-Li",
+          "atom-Na",
+          "atom-Pb",
+          "atom-Rb",
+          "atom-Si",
+          "atom-Sn",
+          "AulaExpress",
+          "austin-vertebraeTest",
+          "authorStats",
+          "AutoFixture",
+          "autoLoader",
+          "AutoReact",
+          "AutoTasks",
+          "Autowebpcss",
+          "Avifors",
+          "AVNjs",
+          "AwesomeProject",
+          "AWSS3Drive",
+          "ax-rmdirRecursive",
+          "b_Tap",
+          "Babel",
+          "babel-preset-reactTeam",
+          "Bablic_Seo_SDK",
+          "BablicLogger",
+          "Backbone-Collection-Predefined-Filters",
+          "Backbone.Aggregator",
+          "backbone.browserStorage",
+          "Backbone.Chosen",
+          "Backbone.Marionette.Handlebars",
+          "Backbone.Mutators",
+          "Backbone.Overview",
+          "Backbone.Rpc",
+          "Backbone.Subset",
+          "baDataModel",
+          "Bag",
+          "BaiduMapManager",
+          "BandGravity",
+          "bangDM",
+          "banking-Josh-demo",
+          "BankWebservice",
+          "bannerFlip",
+          "BaremetricsCalendar",
+          "Barfer",
+          "BarneyRubble",
+          "Base",
+          "Base64",
+          "baseProject",
+          "Basic-Material-framework",
+          "BasicCredentials",
+          "basicFFmpeg",
+          "bbArray",
+          "Beegee",
+          "begineer_Practice",
+          "beijingDate",
+          "bem-countMaster",
+          "bem-countSlave",
+          "bem-getHistory",
+          "Bestpack",
+          "betterMatch",
+          "BetterRegExp",
+          "Bhellyer",
+          "BHP_MSD",
+          "BiDirectionalScrollingTable",
+          "BigAssFansAPI",
+          "BigInt",
+          "BIMserverWrapper",
+          "Binary-search-tree",
+          "binarySearch",
+          "bindAll",
+          "BinHeap",
+          "biojs-vis-RDFSchema",
+          "Biolac",
+          "Birbal",
+          "BitSetModule",
+          "BizzStream",
+          "Blackfeather",
+          "BlackMirror",
+          "Blacksmith",
+          "blacktea.jsonTemplates",
+          "Blaggie-System",
+          "BlankUp",
+          "Blink1Control2",
+          "blitzLib",
+          "Blob",
+          "BlobBuilder",
+          "BlobBuilder-browser",
+          "Blog",
+          "BlueOcean",
+          "BlueOps",
+          "Blueprint-Sugar",
+          "bluthLBC",
+          "blya!",
+          "BMFE_scaffold",
+          "Bmodule",
+          "Bo-colors-project",
+          "Boilerpipe-Scraper",
+          "Bondlib",
+          "bonTemplate",
+          "BootSideMenu",
+          "bornCordova",
+          "Botcord",
+          "Bottr-cli",
+          "Brackets",
+          "brain***_games***",
+          "Brave",
+          "BrewCore",
+          "BrianPingPong",
+          "BrianSuperComponents",
+          "BrickPlus",
+          "Brocket",
+          "Brosec",
+          "browserProxy",
+          "browserType",
+          "brush-Makefile",
+          "bTap",
+          "BtMacAddress",
+          "BubbleJS",
+          "Buffer",
+          "buffer",
+          "BufferList",
+          "Bugay",
+          "Build",
+          "BuildBox",
+          "Builder",
+          "Builders",
+          "BuildWithJavascript",
+          "BusinessObjects",
+          "Button",
+          "Buttons",
+          "Bynd",
+          "ByteBuffer",
+          "C9js",
+          "Cache-Service-Collector",
+          "Cacher",
+          "callbackQueue",
+          "CallbackRouter",
+          "callBlock-plugin",
+          "callBlock.plugin",
+          "camcardPlugin",
+          "CameraPreview",
+          "Canteen",
+          "canvas-toBlob",
+          "canvasColorPicker",
+          "Caoutchouc",
+          "Cap",
+          "Carbon",
+          "cardsJS",
+          "Cartogram-Utils",
+          "cascadeDrop",
+          "Cashew",
+          "Cat4D",
+          "catchTender",
+          "CategoryJS",
+          "catl-deploySSH",
+          "cbNetwork",
+          "CbolaInfra",
+          "CBQueue",
+          "CBuffer",
+          "ccNetViz",
+          "ccPagination",
+          "ccTpl",
+          "censoreMio",
+          "Censorify",
+          "censorify_Publish20160706",
+          "censorify_Vincent_Choe",
+          "censorifyAD",
+          "censorifyAshes",
+          "censorifyGuangyi",
+          "censorifyKatKat",
+          "censorifyRayL",
+          "censorifyTM",
+          "CETEIcean",
+          "cfUtilityService",
+          "CFViews",
+          "chadschwComponentTest0001",
+          "changelogFDV",
+          "Changling-dom",
+          "CharLS.js",
+          "Chart.Annotation.js",
+          "Chart.CallBack.js",
+          "Chart.Crosshairs.js",
+          "Chart.HorizontalBar.js",
+          "Chart.Smith.js",
+          "Chart.Zoom.drag.js",
+          "Chart.Zoom.js",
+          "ChartTime",
+          "chatSocketIo",
+          "ChattingRoom",
+          "checkForModuleDuplicates",
+          "cheferizeIt",
+          "chenouTestNode",
+          "child_process",
+          "chowYen",
+          "chrome-localIp",
+          "ChuckCSS",
+          "ChuckNorrisException",
+          "chunkArray",
+          "cjdsComponents",
+          "Class",
+          "Classy",
+          "clearInterval",
+          "ClearSilver",
+          "clearTimeout",
+          "CLI-todo",
+          "CLI-UI",
+          "cliappRafa",
+          "clientFrontEnd",
+          "ClientStorage",
+          "clipDouban",
+          "ClipJS",
+          "CloudMusicCover",
+          "CloudStore",
+          "Cls",
+          "cluster",
+          "CM-react-native-document-picker",
+          "CM1",
+          "coberturaJS",
+          "codeStr",
+          "Coeus",
+          "COFFEENODE",
+          "Coflux",
+          "colegislate-DynamoDbEventRepository",
+          "ColeTownsend",
+          "collabProvidesModules",
+          "CollectionMap",
+          "colWidth.js",
+          "com.emsaeng.cordova.plugin.AdMob",
+          "com.nickreed.cordova.plugin.brotherPrinter",
+          "com.none.alarmClock",
+          "com.zwchen.firstPlugin",
+          "com.zwchen.qqAdvice",
+          "combineJS",
+          "CometJS",
+          "Comfy",
+          "Comments",
+          "CommentsJS",
+          "comp-Fetch",
+          "Company",
+          "compareStrings",
+          "CompassSM",
+          "Complex",
+          "componentDoc",
+          "componentDoc-cli",
+          "CompoundSignal",
+          "Compress-CSS",
+          "Compression",
+          "concatAll",
+          "Concur",
+          "ConfluencePageAttacher",
+          "ConnectTheDotsDesktop",
+          "Console",
+          "console",
+          "constants",
+          "constelation-Animate_",
+          "constelation-BackgroundImage",
+          "constelation-Block",
+          "constelation-Button",
+          "constelation-Col",
+          "constelation-Event_",
+          "constelation-Flex",
+          "constelation-Inline",
+          "constelation-InlineBlock",
+          "constelation-InlineCol",
+          "constelation-InlineFlex",
+          "constelation-InlineRow",
+          "constelation-Painter",
+          "constelation-Row",
+          "constelation-Style_",
+          "constelation-Text",
+          "constelation-Video",
+          "constelation-View",
+          "ConstraintNetwork",
+          "ContactMe",
+          "ContentEdit",
+          "ContentSelect",
+          "ContentTools",
+          "convertPinyin",
+          "CoolBeans",
+          "Coolhelper",
+          "copyMe",
+          "cordova-plugin-adPlayCafebazaar",
+          "cordova-plugin-adPlayPushe",
+          "cordova-plugin-bluetoothClassic-serial",
+          "cordova-plugin-coolFunction",
+          "cordova-plugin-euroart93-smartConfig",
+          "cordova-plugin-ios-android-IAP",
+          "cordova-plugin-LineLogin",
+          "Cordova-Plugin-OpenTok-JBS",
+          "cordova-plugin-permissionScope",
+          "cordova-plugin-SchaffrathWebviewer",
+          "cordova-plugin-SDKAW",
+          "Cordova-Plugin-SystemBarDimmer",
+          "cordova-plugin-YtopPlugin",
+          "Cordova-react-redux-boilerplate",
+          "cordova-StarIO-plugin",
+          "CordovaSMS",
+          "CordovaWebSocketClientCert",
+          "coreApi",
+          "CornerCut",
+          "CornerJob",
+          "CorrespondenceAnalysis",
+          "cosBuffer",
+          "cosTask",
+          "Couch-cleaner",
+          "Couchbase-sync-gateway-REST",
+          "CouchCover",
+          "CouchDBChanges",
+          "CouchDBExternal",
+          "CountAdd_000001",
+          "cPlayer",
+          "cqjPack",
+          "Crawler",
+          "Create-React-App-SCSS-HMR",
+          "createClass",
+          "createDOC",
+          "createNpm",
+          "createServer",
+          "CRMWebAPI",
+          "crockpot-fromBinary",
+          "crockpot-fromEnglish",
+          "crockpot-fromRoman",
+          "crockpot-toEnglish",
+          "crockpot-toRoman",
+          "Cron",
+          "CropSr",
+          "crypto",
+          "CSDebug",
+          "CSDLParser",
+          "CSLogger",
+          "CSSMatrix",
+          "CSSselect",
+          "Csster",
+          "CSSwhat",
+          "CSV-JS",
+          "CTP_MARKET_DATA",
+          "cttv.bubblesView",
+          "cttv.diseaseGraph",
+          "cttv.expansionView",
+          "cttv.flowerView",
+          "cttv.speciesIcons",
+          "cttv.targetAssociationsBubbles",
+          "cttv.targetAssociationsTree",
+          "cttv.targetGeneTree",
+          "Cuber",
+          "cubicColorPicker",
+          "Cui-Dialog",
+          "CustomCamera",
+          "customComponent",
+          "customLibrary",
+          "CustomPlugin",
+          "CustomWebView",
+          "cuteLogger",
+          "cwebp-binLocal",
+          "CyberJS",
+          "D",
+          "d-fordeYoutube",
+          "D-Stats",
+          "D.Va",
+          "d3-bboxCollide",
+          "d3-pathLayout",
+          "d3.geoTile",
+          "D3.TimeSlider",
+          "Daja",
+          "Daniel_NPM_Library_Test",
+          "Dante2",
+          "DanTroy-utils",
+          "Dashboard",
+          "Dasher",
+          "dashr-widget-Weather",
+          "dashr-widget-World-Pool-Championships",
+          "Data-CSS",
+          "Data-Same-Height",
+          "dataAccess",
+          "Database-Jones",
+          "DataManager",
+          "dataStream",
+          "dateFormat-kwen",
+          "dateFormatW",
+          "DateHuatingzi",
+          "DateMaskr",
+          "dateModule",
+          "DatePicker",
+          "Datepicker.js",
+          "Dateselect",
+          "DateValidator",
+          "DateZ",
+          "Datum",
+          "Davis",
+          "dd-rc-mStock",
+          "DDEvents",
+          "deBijenkorf-protractor-tests",
+          "Debug-Tracker",
+          "Deci-mal",
+          "DeCurtis-Logger",
+          "deepEqualsWith",
+          "deepPick",
+          "defaultStr",
+          "Deferred",
+          "deferredEventEmitter",
+          "defineClass",
+          "defineJS",
+          "DelegateListener",
+          "deleteMoudles",
+          "Demo",
+          "Demo1",
+          "demoNeeeew",
+          "demoWei",
+          "demoYTC",
+          "Deneme",
+          "derivco-SoundJS",
+          "derpModule",
+          "DeskSet",
+          "Desktop-command",
+          "Devbridge-FrontEnd",
+          "Developer",
+          "deviousknightFirstNpm",
+          "devisPattern",
+          "devProxy",
+          "DFP",
+          "dgram",
+          "dgURI",
+          "diagnostics_channel",
+          "Dial",
+          "DiggernautAPI",
+          "Diogenes",
+          "DirScanner",
+          "dirStat",
+          "DirWatcher",
+          "Discord-Webhook",
+          "DiscordForge",
+          "diveSync",
+          "dkastner-JSONPath",
+          "DM.NodeJS",
+          "dns",
+          "Dock-command",
+          "docxtemplaterCopy",
+          "doLink",
+          "DOM",
+          "Domai.nr",
+          "domain",
+          "DOMArray",
+          "DOMBuilder",
+          "DOMino",
+          "DOMtastic",
+          "DOMtastic-npm",
+          "dotFormat",
+          "dotJS",
+          "DoubleCheck",
+          "Dove.js",
+          "downloadAPI",
+          "downLoadFile",
+          "DownloadManager",
+          "DownloadProxy",
+          "DPS",
+          "DQ",
+          "draftjsToHTML",
+          "dragOnZone",
+          "drakovNew",
+          "Draper",
+          "DrawPDF",
+          "Dribble",
+          "Drupal-Node.js",
+          "DT",
+          "Duckface",
+          "Dui",
+          "DVA",
+          "DvA",
+          "dVa",
+          "DXIV2Inst",
+          "DynamicBuffer",
+          "dynamoDB",
+          "DynamoDBStream",
+          "DynWorker",
+          "Easy-Peasy-Slide",
+          "easyCache",
+          "easyFe",
+          "easyRestWithABL",
+          "EasyUI",
+          "eavesTool",
+          "EBI-Icon-fonts",
+          "echartsEx",
+          "EclipseScroll",
+          "ECMASquasher",
+          "edfToHtmlConverter",
+          "edGoogleApi",
+          "edGraham",
+          "EfemerideList",
+          "efemerideList",
+          "efficientLoad",
+          "eFishCrawler",
+          "EhanAreesha",
+          "Elastic-Beanstalk-Sample-App",
+          "ElasticSlider-core",
+          "electron-isDev",
+          "ElectronAppUpdater",
+          "ElectronRouter",
+          "elementsJS",
+          "Elixirx",
+          "Elm-0.17-Gulp-Coffeescript-Stylus-Lodash-Browserify-Boilerplate",
+          "EmailClient",
+          "ember-cli-fullPagejs",
+          "ember-leaflet-geoJSON",
+          "emoJiS-interpreter",
+          "Empite",
+          "EmpiteApp",
+          "emptyObject",
+          "emptyString-loader",
+          "Encloud",
+          "encodeBase64",
+          "encodeID",
+          "energyCalculator-browser",
+          "EnglishTranslator",
+          "ensureDir",
+          "Enumjs",
+          "Environment.js",
+          "ep_disableChat",
+          "EPO_OPS_WRAPPER",
+          "equalViews-comparative-selection",
+          "eRx-build",
+          "ES-poc",
+          "es6-DOM-closest",
+          "eSlider",
+          "eslint-plugin-elemMods",
+          "EsmalteMx.ProductApi.Lambdas",
+          "Estro",
+          "ETag",
+          "eValue-bs",
+          "EVE",
+          "EventDispatcher",
+          "eventDrops",
+          "EventEmitter",
+          "EventField",
+          "EventFire",
+          "EventFire.js",
+          "EventHub",
+          "EventRelayEmitter",
+          "events",
+          "EventServer",
+          "eventstore.mongoDb",
+          "EventtownProject",
+          "EventUtil",
+          "EVEoj",
+          "EverCookie",
+          "ewdDOM",
+          "ewdGateway",
+          "ExBuffer",
+          "execSync",
+          "exFrame-configuration",
+          "exFrame-core",
+          "exFrame-generator",
+          "exFrame-logger",
+          "exFrame-mq",
+          "exFrame-rest",
+          "exFrame-rpc",
+          "exFrame-security",
+          "ExifEditor",
+          "Exitent",
+          "expectThat.jasmine-node",
+          "expectThat.mocha",
+          "Express",
+          "Express-web-app",
+          "expressApi",
+          "ExpressCart",
+          "ExpressCheckout",
+          "expressingFounder",
+          "ExpressMVC",
+          "ExpressNode",
+          "expressOne",
+          "expressSite",
+          "expressWeb",
+          "ExtraInfo",
+          "extraRedis",
+          "Eyas",
+          "EzetechT",
+          "EZVersion",
+          "F",
+          "F-chronus",
+          "f*",
+          "FabioPluginiUno",
+          "Facebook_Graph_API",
+          "facebookPhotos",
+          "FacebookYarn",
+          "factor-bundle-WA64",
+          "FAEN",
+          "Faker",
+          "Falcon",
+          "fast-artDialog",
+          "fastA_node",
+          "FastLegS",
+          "Fayer",
+          "fbRecursiveRequest",
+          "FeedbackModuleTest",
+          "feedBum",
+          "fenix-ui-DataEditor",
+          "fenix-ui-DSDEditor",
+          "Fermi-UI",
+          "FetchCallLog",
+          "fieldsValidator",
+          "fig-Componts",
+          "File",
+          "File_Reader_solly",
+          "FileBrowser",
+          "FileError",
+          "fileGlue",
+          "FileList",
+          "fileLog",
+          "FilePicker-Phonegap-iOS-Plugin",
+          "FileReader",
+          "FileSaver",
+          "FileSync",
+          "FileWriter",
+          "FileWriterSync",
+          "Finder-command",
+          "FirstApp",
+          "FirstCustomPlugin",
+          "firstModule",
+          "firstNodejsModule",
+          "firstYarn",
+          "fis-parse-requireAsyncRes",
+          "fis-postpackager-inCSSToWebP",
+          "fis3SmartyTool",
+          "FitText-UMD",
+          "Flamingo",
+          "flatToTrees",
+          "fleschDe",
+          "Flex-With-Benefits",
+          "FlickrJS",
+          "flipPage",
+          "Florence",
+          "FlowerPassword",
+          "flowMap",
+          "FLTEST",
+          "fnProxy",
+          "FontAwesome-webpack",
+          "fontEnd",
+          "FontLoader",
+          "foo!",
+          "foo~",
+          "forAsync",
+          "ForceCode",
+          "forceLock",
+          "forChangeFilesName",
+          "forEachAsync",
+          "formAnimation",
+          "formatDate",
+          "formBuilder",
+          "FormData",
+          "Formless",
+          "formValidate",
+          "FrameGenerator",
+          "freightCrane",
+          "French-stemmer",
+          "Frenchpress",
+          "FreshDocs",
+          "friendsOfTrowel-buttons-component",
+          "friendsOfTrowel-dropdowns-component",
+          "friendsOfTrowel-Forms-component",
+          "friendsOfTrowel-Layouts-component",
+          "Friggeri.net",
+          "Frog",
+          "frontBuild",
+          "Frontend-starter",
+          "FrontEndCentral-documentation",
+          "FrontJSON",
+          "FrontPress",
+          "Frozor-Logger",
+          "Fruma",
+          "fs",
+          "fs-uTool",
+          "FSM",
+          "FT232H",
+          "fuck!",
+          "Fuell",
+          "FuellDocTest",
+          "FuellSys",
+          "FuellTest",
+          "FullStack",
+          "FunDemo2",
+          "FURI",
+          "Fury",
+          "futSearch",
+          "futureDocBuilder",
+          "FyreWorks-Node",
+          "fzmFE",
+          "Gaiam",
+          "Ganescha-Bot-Jokes",
+          "gaoboHello",
+          "Garrett-pokemon",
+          "gatesJs",
+          "Gauge",
+          "gaugeJS",
+          "gaussianMixture",
+          "gbL-jsMop",
+          "GC-Sequence-Viewer",
+          "gdBuildLogs",
+          "gdBuilds",
+          "Gems.PairedDeviceClient",
+          "genData",
+          "generateIndex",
+          "generator-entityV2-widgets",
+          "generator-kittJS",
+          "generator-qccr-startKit",
+          "generator-reactpackSample",
+          "generator-zillionAngular",
+          "Gengar",
+          "GeoMatrix",
+          "GeosysDroid",
+          "GeosysTest",
+          "Gerardo",
+          "getDateformat",
+          "getExtPath",
+          "getSignature",
+          "GettyEmbeddy",
+          "ghostTools",
+          "GhostTube",
+          "GiftEditor",
+          "GirlJS",
+          "GitAzure",
+          "gitbook-plugin-prism-ASH",
+          "gitbook-plugin-specialText",
+          "gitbook-start-heroku-P8-josue-nayra",
+          "gitbook-start-heroku-P9-josue-nayra",
+          "gitForge",
+          "gitHub",
+          "GitHub-Network-Graph",
+          "GitHubTrending",
+          "gitProvider",
+          "gl-flyCamera",
+          "gl-simpleTextureGenerator",
+          "glMath",
+          "GLORB",
+          "glslCanvas",
+          "glslEditor",
+          "glslGallery",
+          "GLSlideshow",
+          "Glue",
+          "GMP",
+          "golbalModule",
+          "Goldfish",
+          "Gon",
+          "Google_Plus_API",
+          "Google_Plus_Server_Library",
+          "Google-Chrome-command",
+          "GoogleDrive",
+          "googleOAuthServer",
+          "googlePlaceAutocomplete",
+          "GoogleService-NodeJs",
+          "Gord",
+          "gPagesJS",
+          "Gps2zip",
+          "GRAD_leaveNotes",
+          "GRAD_makeFire",
+          "grad-customGear",
+          "grad-factions-VR",
+          "grad-leaveNotes",
+          "grad-makeFire",
+          "Grafar",
+          "Graph",
+          "graphLock.custom.plugin",
+          "graphQl-Mysql-Server",
+          "GridFS",
+          "GridManager",
+          "gridminCss",
+          "Gridtacular",
+          "GroupePSAConnectedCar",
+          "Grow.js",
+          "Grunt-build",
+          "grunt-checkFileSize",
+          "grunt-cmd-handlebarsWrap",
+          "grunt-ftp-getComponent",
+          "grunt-httpTohttps",
+          "grunt-latexTOpdf-conversion",
+          "grunt-Npm-grunts",
+          "grunt-po2mo-multiFiles",
+          "grunt-Replacebyrefs",
+          "grunt-syncFolder",
+          "grunt-urlCacheBuster",
+          "guideJs",
+          "gulp-addSuffix",
+          "gulp-combineHtml",
+          "gulp-imgToBase64",
+          "gulp-lowerCase",
+          "gulp-phpWebserver",
+          "gulp-spacingWord",
+          "Gulp-Tasks",
+          "GumbaJS",
+          "Gusto",
+          "gz2qiCalcModule",
+          "h2oUIKit",
+          "H5UI",
+          "H666",
+          "habibtestPublish",
+          "HackBuffer",
+          "handleStr",
+          "HansontableComponent",
+          "Haraka",
+          "HariVignesh",
+          "harmonyHubCLI",
+          "HarryPotterParty",
+          "harsh-Test-Module",
+          "Harshil",
+          "hash!",
+          "hashPage",
+          "hashTranslate",
+          "HASWallpaperManager",
+          "hasWord",
+          "HeartBeatWoT_pi",
+          "Hello",
+          "hello_test_spade69XXX",
+          "Hello_World",
+          "HelloBot",
+          "helloBySoo",
+          "helloDevelopersnodejs",
+          "HelloExpress",
+          "helloModule",
+          "HelloWorld",
+          "helloWorld",
+          "HelloWorld_hlhl_040",
+          "HelloWorldComponent",
+          "HelloWorldNodeJS",
+          "helloYJ",
+          "helpBy",
+          "helpCenter",
+          "herokuRun",
+          "Hesiir-components",
+          "HHello",
+          "Hidash",
+          "HiddenMarkovModel",
+          "hideShowPassword",
+          "highcharts-*",
+          "HighlightP",
+          "Highway",
+          "Hinclude",
+          "Hipmob",
+          "Hiraku",
+          "hm_firstPackage",
+          "HMTraining",
+          "homebridge-anelPowerControl",
+          "homebridge-bigAssFans",
+          "homebridge-CurrentAmbientLightLevel",
+          "homebridge-Homeseer",
+          "homebridge-LEDStrip",
+          "homebridge-MotionSensor",
+          "homebridge-RFbulb",
+          "Homematic-Hue-Interface",
+          "hoshiCustomContent",
+          "hoshiImageLoader",
+          "HotJS",
+          "Hotshot",
+          "hoverifyBootnav",
+          "howToNPM",
+          "Hppy",
+          "Hpy",
+          "htmlCutter",
+          "htmlKompressor",
+          "HTMLString",
+          "htmlToTree",
+          "http",
+          "http2",
+          "HTTPRequest",
+          "https",
+          "httpShell",
+          "httpTohttps",
+          "Hubik",
+          "Hubik-Demo",
+          "Hubik-Platform",
+          "Hubik-Platform-Chrome",
+          "Hubik-Plugin",
+          "Hubik-Plugin-Memory",
+          "Hubik-Plugin-Network",
+          "Hubik-Plugin-Rendering",
+          "Hubik-Util",
+          "hubot-yigeAi",
+          "HuK",
+          "hybridCrypto",
+          "i18next.mongoDb",
+          "Ian_Chu",
+          "IArray",
+          "Ibis.js",
+          "iCompute",
+          "iEnhance",
+          "IENotification",
+          "iFrameAPI",
+          "IFY-gulp-kit",
+          "II",
+          "IIF",
+          "iIndexed",
+          "iKeyed",
+          "iM880-serial-comm",
+          "imageCDN-webpack-loader",
+          "imageMagick",
+          "Imager",
+          "Imageresizer",
+          "imageTool",
+          "ImageViewer",
+          "iMagPay",
+          "iMemoized",
+          "iMessageModule",
+          "Imovie",
+          "Imp",
+          "Incheon",
+          "Index",
+          "indexedStore",
+          "inferModule-jsdoc-plugin",
+          "infieldLabel",
+          "Influxer",
+          "inputcheckMemo",
+          "inspector",
+          "INSPINIA",
+          "Insplash",
+          "inStyle",
+          "interactiveConsole",
+          "Interval",
+          "IO",
+          "IObject",
+          "ionic-gulp-browserify-typescript-postTransform",
+          "IonicSocket",
+          "iOS-HelloWorld",
+          "IOTSDK",
+          "iotsol-app-FAN",
+          "iotsol-app-test-Node-RED",
+          "iotsol-service-string-upperCase",
+          "IQVIS",
+          "Iris",
+          "iRobo-react-modal",
+          "iSecured",
+          "isElementInViewport",
+          "isEqual",
+          "iSeries",
+          "isFirefoxOrIE",
+          "isHolidayInChina",
+          "iSocketService",
+          "isPureFunction",
+          "iStorable",
+          "iTransactable",
+          "iTunes-command",
+          "iValidated",
+          "iWeYou",
+          "iZettle",
+          "iziModal",
+          "JabroniJS",
+          "jaCodeMap",
+          "Jade-Sass-Gulp-Starter",
+          "jadeBundler",
+          "jadiTest",
+          "jAlert",
+          "JamSwitch",
+          "JASON",
+          "JavaScript-101",
+          "JazzScript",
+          "jcarouselSwipe",
+          "jDataView",
+          "jDate",
+          "jetsExt",
+          "Jimmy-Johns",
+          "jingwenTest",
+          "JMSList",
+          "JMSlist.js",
+          "Jody",
+          "jordenAngular",
+          "jordenAngular2",
+          "JorupeCore",
+          "JorupeInstance",
+          "JOSS",
+          "JotihuntReact",
+          "Journaling-Hash",
+          "jpaCreate",
+          "jParser",
+          "JPath",
+          "jPlotter",
+          "jPlugins",
+          "JQ",
+          "jQ-validation-laravel-extras",
+          "JQDeferred",
+          "jQGA",
+          "jqGrid",
+          "jqNode",
+          "jqPaginator",
+          "jqplot.donutRenderer",
+          "jqPromise4node",
+          "jqTreeGridWithPagination",
+          "jQuery",
+          "jquery-adaptText",
+          "jquery-asAccordion",
+          "jquery-asBgPicker",
+          "jquery-asBreadcrumbs",
+          "jquery-asCheck",
+          "jquery-asChoice",
+          "jquery-asColor",
+          "jquery-asColorPicker",
+          "jquery-asDropdown",
+          "jquery-asFontEditor",
+          "jquery-asGalleryPicker",
+          "jquery-asGmap",
+          "jquery-asGradient",
+          "jquery-asHoverScroll",
+          "jquery-asIconPicker",
+          "jquery-asImagePicker",
+          "jquery-asItemList",
+          "jquery-asModal",
+          "jquery-asOffset",
+          "jquery-asPaginator",
+          "jquery-asPieProgress",
+          "jquery-asProgress",
+          "jquery-asRange",
+          "jquery-asScroll",
+          "jquery-asScrollable",
+          "jquery-asScrollbar",
+          "jquery-asSelect",
+          "jquery-asSpinner",
+          "jquery-asSwitch",
+          "jquery-asTooltip",
+          "jquery-asTree",
+          "jQuery-by-selector",
+          "jquery-dynamicNumber",
+          "jquery-idleTimeout-plus",
+          "jquery-loadingModal",
+          "jquery-navToSelect",
+          "jQuery-QueryBuilder",
+          "jquery-rsLiteGrid",
+          "jquery-rsRefPointer",
+          "jquery-rsSlideIt",
+          "jQuery-Scanner-Detection",
+          "jquery-scrollTo",
+          "jquery-scrollToTop",
+          "jquery-slidePanel",
+          "jQuery.component",
+          "jquery.customSelect",
+          "jquery.dataTables.min.js",
+          "jquery.Jcrop.js",
+          "jQuery.keyboard",
+          "jQuery.mmenu-less",
+          "jQuery.print",
+          "jquery.rsLiteGrid",
+          "jquery.rsOverview",
+          "jquery.rsRefPointer",
+          "jquery.rsSlideIt",
+          "jquery.rsSliderLens",
+          "jQuery.toggleModifier",
+          "jquery.waitforChild",
+          "jqueryPro",
+          "js-build-RomainTrouillard",
+          "JS-Entities",
+          "JS-string-minimization",
+          "JS.Responsive",
+          "jSaBOT",
+          "jsCicada",
+          "jsConcat",
+          "JSCPP",
+          "jsDAV",
+          "JSDev",
+          "jsdoc-TENSOR",
+          "jsDocGenFromJson",
+          "jsDump",
+          "jSelect",
+          "JSErrorMonitor",
+          "JSErrorMonitor-server",
+          "jsFeed",
+          "jsFiddleDownloader",
+          "JSFramework",
+          "JSLint-commonJS",
+          "JSLintCli",
+          "JSLogger",
+          "JSON",
+          "JSON-Splora",
+          "JSON.sh",
+          "JSON2",
+          "json8-isArray",
+          "json8-isBoolean",
+          "json8-isJSON",
+          "json8-isNull",
+          "json8-isNumber",
+          "json8-isObject",
+          "json8-isPrimitive",
+          "json8-isString",
+          "json8-isStructure",
+          "JSON2016",
+          "JSONloops",
+          "JSONPath",
+          "JSONPathCLI",
+          "JSONRpc",
+          "JSONSelect",
+          "JSONStream",
+          "JsonUri",
+          "JSONUtil",
+          "jsonX",
+          "JSplay",
+          "jspolyfill-array.prototype.findIndex",
+          "JSPP",
+          "JSpring",
+          "jsQueue",
+          "jsSourceCodeParser",
+          "jStat",
+          "JSUS",
+          "JSV",
+          "JSX",
+          "jsz-isType",
+          "JTemplate",
+          "JTmpl",
+          "jTool",
+          "JuliaStyles",
+          "JumanjiJS",
+          "Jupyter-Git-Extension",
+          "justifiedGallery",
+          "justJenker",
+          "JustMy.scss",
+          "JWBootstrapSwitchDirective",
+          "jWorkflow",
+          "jxLoader",
+          "JYF_restrict",
+          "K_Tasks",
+          "K--Ajax",
+          "K-Report",
+          "KAB.Client",
+          "Kahana",
+          "Kapsel-project",
+          "Katy",
+          "Kayzen-GS",
+          "KB",
+          "KB_Model",
+          "kelTool",
+          "kelTool2",
+          "KenjutsuUI",
+          "KevinLobo3377-node",
+          "KFui",
+          "kickoff-fluidVideo.css",
+          "Kid",
+          "kingBuilder",
+          "kiranApp",
+          "Kirk",
+          "Kissui",
+          "kittJS",
+          "Kiwoom-Helper",
+          "KLC3377-node",
+          "knockout.ajaxTemplateEngine",
+          "koa-artTemplate",
+          "koa-Router",
+          "koaPlus",
+          "koaVue",
+          "KonggeIm",
+          "kpPublicPerson",
+          "kpPublicVideo",
+          "krawlerWash",
+          "ktPlayer",
+          "kylpo-BackgroundImage",
+          "kylpo-Block",
+          "kylpo-Button",
+          "kylpo-Col",
+          "kylpo-Flex",
+          "kylpo-Inline",
+          "kylpo-InlineBlock",
+          "kylpo-InlineCol",
+          "kylpo-InlineFlex",
+          "kylpo-InlineRow",
+          "kylpo-Paint",
+          "kylpo-Painter",
+          "kylpo-Row",
+          "kylpo-Text",
+          "kylpo-View",
+          "kzFormDaimyo",
+          "L.TileLayer.Kartverket",
+          "L7",
+          "labBuilder",
+          "Lactate",
+          "Lade",
+          "laravel-jQvalidation",
+          "Large",
+          "lark-PM",
+          "LasStreamReader",
+          "latte_web_ladeView",
+          "latte_webServer4",
+          "lavaK",
+          "layaIdecode",
+          "Layar",
+          "Layout",
+          "LazyBoy",
+          "lazyBum",
+          "lazyConnections",
+          "lazyLoadingGrid",
+          "lcAudioPlayer",
+          "LCM",
+          "LDAP",
+          "Leaf.js",
+          "Leaflet-MovingMaker",
+          "Leaflet.AutoLayers",
+          "Leaflet.Deflate",
+          "Leaflet.GeoJSON.Encoded",
+          "Leaflet.GreatCircle",
+          "Leaflet.MultiOptionsPolyline",
+          "Leaflet.TileLayer.MBTiles",
+          "Leaflet.vector-markers",
+          "leapShell",
+          "LearningNPM",
+          "learnnode_by_HHM",
+          "leFunc",
+          "Legos",
+          "Libby-Client",
+          "LightCinematic",
+          "lihuanxiangNpm1",
+          "limitedQueue",
+          "linearJs",
+          "lineReader",
+          "Lingo",
+          "LinkedList",
+          "linkIt",
+          "LISP.js",
+          "liteParse",
+          "liuchengjunOrder0414",
+          "LiveController",
+          "LiveDocument",
+          "LiveScript",
+          "LiveScript-brunch",
+          "LiveView",
+          "liweiUitl",
+          "lizaorenqingTool",
+          "lmONE",
+          "LMUI",
+          "LMX-Data",
+          "LNS_weixin_h5",
+          "localeMaker_v1",
+          "localforage-memoryStorageDriver",
+          "LocalRecord",
+          "localStorage",
+          "localStorage-info",
+          "localStorage-mock",
+          "LoDashfromScratch",
+          "lofterG",
+          "Loganalyzer",
+          "LogbookMessageCreator",
+          "Logger",
+          "Logging",
+          "Loggy",
+          "logic2UI",
+          "LogosDistort",
+          "LogStorage.js",
+          "logStream",
+          "LOL",
+          "lolAJ",
+          "LongestCommonSubstring",
+          "loop-setTimeout",
+          "loopback-connector-rest-addCookie",
+          "lopataJs",
+          "Lorem",
+          "Losas",
+          "LP_test_task",
+          "Lucy",
+          "LUIS",
+          "LUIS_FB",
+          "Lumenize",
+          "Lush.js",
+          "LykkeFramework",
+          "M66_math_example",
+          "mac-cropSr",
+          "MacGyver",
+          "Mad.js",
+          "magentoExt",
+          "Maggi.js",
+          "Maggi.js-0.1",
+          "MagpieUI",
+          "MALjs",
+          "Mambo-UI",
+          "mangoSlugfy",
+          "mapleTree",
+          "mappumBot",
+          "Marionette-Require-Boilerplate",
+          "markupDiff",
+          "marryB",
+          "MasterDetailApplication",
+          "MaterialAngularWithNodeJS",
+          "Math",
+          "math_example_20160505163300BR",
+          "math_example_Hala",
+          "math_example_myown_ve-01119310520_V2",
+          "math_exampleCJG",
+          "math_exampleII",
+          "math_exampleX",
+          "math_ThisIsMe",
+          "math-Murasame",
+          "Math1105",
+          "mathAdd",
+          "mathExample",
+          "MathJax-node",
+          "MathJS",
+          "mathMagic",
+          "MathTest1",
+          "MatPack",
+          "Mavigator",
+          "MAX-AVT-homebridge-led",
+          "MAXAVTDemo",
+          "MAXIMjs",
+          "MaxUPS",
+          "MCom",
+          "MD5",
+          "MDLCOMPONENT",
+          "mdlReact",
+          "mdPickers",
+          "mdRangeSlider",
+          "mdToPdf",
+          "MEAN",
+          "MeanApp1",
+          "MeCab",
+          "mediaCheck",
+          "Mediany",
+          "medicalHistory",
+          "Mercury",
+          "Meridix-WebAPI-JS",
+          "Mers",
+          "MessageBus",
+          "MetaEditor",
+          "Meteor-Test-Installer",
+          "MetroTenerife",
+          "MFL-ng",
+          "MFRC522-node",
+          "mglib-GAMS.WEBCLIENT2",
+          "MIA",
+          "MicroServices",
+          "Midgard",
+          "midhunthomas_Test",
+          "mihoo_fileUpload",
+          "mini-fileSystem-WebServer",
+          "Mini-test",
+          "MiniAppOne",
+          "MiniAppTwo",
+          "minibuyCommonality",
+          "miniJsonp",
+          "MiniManager",
+          "MiniMVC",
+          "MinionCI",
+          "Minju003",
+          "Mirador",
+          "Misho_math_example",
+          "MJackpots",
+          "mjb44-playground-module-exporting-interface-and-type-method-B",
+          "mjb44-playground-module-exporting-interface-and-type-method-C",
+          "Mkoa",
+          "Mkoa-pg-session",
+          "MKOUpload",
+          "mlm603Test",
+          "mmAnimate",
+          "mmDux",
+          "MMM-alexa",
+          "mmRequest",
+          "mmRouter",
+          "mNotes",
+          "Mockery",
+          "modalDemo",
+          "modalDemo1",
+          "modalWin.js",
+          "module",
+          "ModuleBinder",
+          "modulebyAKB",
+          "ModuleC",
+          "moduleLoader",
+          "moduleTest",
+          "MoEventEmitter",
+          "Mokr",
+          "Mole",
+          "mon-appNon0",
+          "MonApp",
+          "MongoDAL",
+          "mongoose-schema-to-graphQL",
+          "mongooseSchema-to-graphQL",
+          "Monik",
+          "MonikCommon",
+          "MoniqueWeb",
+          "Monorail.js",
+          "Mopidy-Spotmop",
+          "mosesCheckIn",
+          "MovieJS",
+          "mOxie",
+          "MoxtraPlugin_1.1",
+          "MoxtraPlugin_1.2.1",
+          "mPortalUI",
+          "MQTTClient",
+          "Mr.Array",
+          "Mr.Async",
+          "Mr.Coverage",
+          "mraaStub",
+          "MrsYu",
+          "MrsYu1",
+          "msGetStarted",
+          "mSite",
+          "msJackson",
+          "mSnackbar",
+          "Mu",
+          "Muffin",
+          "MultiSlider",
+          "musuAppsas",
+          "MWS_Automation",
+          "my-awesome-nodejs-moduleHL",
+          "my-componentAnimesh",
+          "My-First-Module",
+          "My-first-Package",
+          "My-Fist-Project",
+          "my-HLabib",
+          "My1ink",
+          "MyAngularGruntt",
+          "MyAnimalModule",
+          "myappSriniAppala",
+          "myappUSBankExample",
+          "myAries",
+          "MyBlog",
+          "myCalclator",
+          "myDate",
+          "myDialog",
+          "myDu2",
+          "myDVA",
+          "myFirst-Nodejs-Module",
+          "MyFirstContribution",
+          "myfirstDemo",
+          "myFirstModule",
+          "myFirstNodeModule",
+          "myFirstNpm",
+          "myFirstPluginAji",
+          "myFirstProject",
+          "myFirstPub",
+          "myLib",
+          "myMath",
+          "MYMODAL",
+          "MyModule",
+          "myModule",
+          "myNodeJs",
+          "myNodeJsApp",
+          "myNodejsApp",
+          "myNpm",
+          "MYnpm1",
+          "myNpm0001",
+          "myNpm2",
+          "myNpm5",
+          "myNpm10",
+          "myNpm11",
+          "myNpm111",
+          "myNpm999",
+          "myNpmfei",
+          "myNpmfei1",
+          "myNpml",
+          "myNpmModule",
+          "myNpmrz1",
+          "MyPlugin",
+          "MyProject",
+          "MyProjNode",
+          "myPromise",
+          "myrikGoodModule",
+          "Mysql-Assistant",
+          "mysupermoduleXXX",
+          "myTest",
+          "Mytest_module",
+          "mytPieChart",
+          "N",
+          "N3-components",
+          "NA1",
+          "NageshTestapplication",
+          "NAME",
+          "Nameless13",
+          "NaNNaNBatman.js",
+          "nanoTest",
+          "NasimBotPlatform",
+          "NativeAds",
+          "NativeCall",
+          "NativeProject",
+          "nativescript-CallLog",
+          "nativescript-GMImagePicker",
+          "nativescript-logEntries",
+          "NavExercise",
+          "nCinoRabbit",
+          "ncURL",
+          "NDDB",
+          "neouiReact-button",
+          "Neptune",
+          "NERDERY.JS.NAT",
+          "nestedSortable",
+          "net",
+          "NeteaseCloudMusicApi",
+          "neteaseMusicApi",
+          "Netflow",
+          "Netlifer",
+          "NetMatch",
+          "NetOS",
+          "netOS",
+          "Netpath-Test",
+          "Neuro",
+          "Neuro-Company",
+          "NewModule1",
+          "newmsPong",
+          "newPackage",
+          "newPioneer",
+          "newStart",
+          "newtouchCloud",
+          "NewWebview",
+          "NexManager",
+          "NexmoJS",
+          "NFO-Generator",
+          "ng2-clockTST",
+          "ng2-dodo-materialTypeTransfer",
+          "ng2-QppWs",
+          "ng2GifPreview",
+          "NG2TableView",
+          "ngBrowserNotification",
+          "ngCart",
+          "ngChatScroller",
+          "ngComponentRouter-patched",
+          "ngCurrentGeolocation",
+          "ngDfp",
+          "ngDrag",
+          "ngFileReader",
+          "ngGen",
+          "ngGeolocation",
+          "ngHyperVideo",
+          "ngIceberg",
+          "ngImgHandler",
+          "ngIntercom",
+          "ngKit",
+          "ngPicker",
+          "ngPluralizeFilter",
+          "ngPluralizeFilter2",
+          "ngProgress-browserify",
+          "ngScroll",
+          "ngSinaEmoji",
+          "ngSmoothScroll",
+          "ngSqlite",
+          "ngTile",
+          "ngTimeInput",
+          "ngTreeView",
+          "ngUpload",
+          "ngUpload-forked",
+          "Nguyen_test",
+          "ngVue",
+          "ngYamlConfig",
+          "nHttpInterceptor",
+          "Nick_calc",
+          "NickSam_CGD",
+          "NightPro-Web",
+          "nightwatchGui",
+          "Nikmo",
+          "nImage",
+          "Nitish",
+          "nitish.kumar.IDS-LOGIC",
+          "NlpTextArea",
+          "nltco-lgpt-clean-A",
+          "nltco-lgpt-clean-B",
+          "nltco-lgpt-dedupe-simple-A",
+          "nltco-lgpt-dedupe-simple-B",
+          "nMingle",
+          "nmPhone",
+          "nMysql",
+          "NoCR",
+          "NODE",
+          "Node_POC",
+          "node-CORSproxy",
+          "Node-FacebookMessenger",
+          "Node-HelloWorld-Demo",
+          "node-iDR",
+          "node-iOS",
+          "Node-JavaScript-Preprocessor",
+          "node-localStorage",
+          "Node-Log",
+          "Node-Module-Test",
+          "node-myPow",
+          "node-red-contrib-samsungTV",
+          "node-red-contrib-wwsNodes",
+          "node-red-StefanoTest",
+          "node-TBD",
+          "NodeApp",
+          "nodeApp",
+          "nodeAuth",
+          "nodeBase",
+          "NodeBonocarmiol",
+          "nodeCalcPax",
+          "nodeCombo",
+          "nodeDemo9.26",
+          "nodeDocs",
+          "nodeEventedCommand",
+          "NodeFileBrowser",
+          "NodeFQL",
+          "nodeHCC",
+          "nodeInterface",
+          "NodeInterval",
+          "nodeIRCbot",
+          "nodeJS",
+          "NodeJS_Tutorial",
+          "nodeJs-zip",
+          "NodejsAgent",
+          "NodeJsApplication",
+          "nodejsFramework",
+          "nodejsLessons",
+          "NodeJsNote",
+          "NodeJsPractice",
+          "nodeJsPrograms",
+          "Nodejsricardo",
+          "NodeJSTraining-demo-9823742",
+          "nodejsTutorial",
+          "NodejsWebApp1",
+          "nodejsWorkSpace",
+          "NodeKeynote",
+          "nodeLearning",
+          "nodeMarvin",
+          "nodeMarvin2",
+          "NodeMini",
+          "nodeMysqlWrapper",
+          "nodeNES",
+          "nodeos-boot-multiUser",
+          "nodeos-boot-singleUser",
+          "nodeos-boot-singleUserMount",
+          "nodepackageBoopathi",
+          "nodePhpSessions",
+          "NodePlugwise",
+          "NodePlugwiseAPI",
+          "nodeQuery",
+          "nodes_Samples",
+          "NodeSDK-Base",
+          "NodeServerExtJS",
+          "NodeSSH",
+          "nodeSSO",
+          "NodeSTEP",
+          "nodeTest",
+          "NodeTestDee",
+          "nodeTTT",
+          "nodeTut",
+          "NoDevent",
+          "NodeView",
+          "nodeWebsite",
+          "NodObjC",
+          "Nonsense",
+          "NoobConfig",
+          "NoobHTTP",
+          "normalizeName",
+          "NORRIS",
+          "nOSCSender",
+          "Note.js",
+          "NotificationPushsafer",
+          "Notifly",
+          "Npm",
+          "npm-Demo",
+          "Npm-Doc-Study",
+          "npm-mydemo-pkgTest",
+          "npm-setArray",
+          "npm-wwmTest",
+          "npmCalc",
+          "npmFile",
+          "npmModel",
+          "npmModel1",
+          "npmModel2",
+          "npmTest",
+          "npmToying",
+          "npmTutorial",
+          "NPR_Test",
+          "nrRenamer",
+          "nStoreSession",
+          "nTPL",
+          "nTunes",
+          "NudeJS",
+          "nunjucks-includeData",
+          "O",
+          "O_o",
+          "o_O",
+          "O2-countdown",
+          "O2-tap",
+          "objectFitPolyfill",
+          "ObjectSnapshot",
+          "ObjJ-Node",
+          "ObservableQueue",
+          "OCA-api",
+          "ocamlAlpha",
+          "ocamlBetterErrors",
+          "OcamlBytes",
+          "ocamlBytes",
+          "ocamlRe",
+          "OhMyCache",
+          "OK-GOOGLE",
+          "Olive",
+          "onBoarding",
+          "OnCollect",
+          "OneDollar.js",
+          "oneTest",
+          "OpenBazaar-cli",
+          "OpenDolphin",
+          "OpenJPEG.js",
+          "openWeather",
+          "OperatorUI",
+          "OPFCORS",
+          "OPFSalesforce",
+          "OptionParser",
+          "OrangeTree",
+          "Orchestrator",
+          "Order",
+          "ORIENTALASIAN",
+          "os",
+          "Osifo-package",
+          "osu-ModPropertiesCalculator",
+          "OTPAutoVerification",
+          "overloadedFunction",
+          "OwnMicroService",
+          "OwnNormalizer",
+          "OwnPubSub",
+          "OwnPubSubClient",
+          "OwnPubSubServer",
+          "p2Pixi",
+          "PaasyMcPaasFace",
+          "pacemakerJS",
+          "packAdmin",
+          "Package",
+          "packageNodeCR-Jeff.json",
+          "packagePublished",
+          "packageTesting",
+          "Packery-rows",
+          "packing-template-artTemplate",
+          "Paddinator",
+          "Paginate",
+          "palindromeCalcPax",
+          "palindromePax",
+          "PanPG",
+          "Panzer",
+          "parameterBag",
+          "paramsValidator",
+          "Parse-Server-phone-number-auth",
+          "parseArgs",
+          "Parser",
+          "parseUri",
+          "Particle",
+          "Particleground.js",
+          "PassiveRedis",
+          "path",
+          "PatternLabStarter",
+          "patternReplacer",
+          "paytmGratify",
+          "PayzenJS",
+          "pDebug",
+          "pdf-to-dataURL",
+          "pdfTOthumbnail_convert",
+          "PeA_nut",
+          "Peek",
+          "PeepJS",
+          "Pega.IO",
+          "Peggy.js",
+          "Percolator",
+          "perf_hooks",
+          "performJs",
+          "pgnToJSON",
+          "PHibernate",
+          "phoeNix-cli",
+          "phoenixCLI",
+          "PhonegapAnalytics",
+          "PhonegapBeacon",
+          "PhonegapFeeds",
+          "PhonegapGeofence",
+          "PhonegapGrowth",
+          "PhonegapLocations",
+          "PhonegapPush",
+          "picardForTynt",
+          "PicoMachine",
+          "Pictionary",
+          "Pintu",
+          "pjEmojiTest",
+          "PJsonCouch",
+          "PK",
+          "PL8",
+          "placeHolder.js",
+          "PLATO",
+          "PlayStream",
+          "pluginCreater",
+          "pluginHelloWorld",
+          "pluginHelloworld",
+          "pluginTest",
+          "PlugMan",
+          "pluuuuHeader",
+          "PoistueJS",
+          "Pokeball-Scanner",
+          "PokeChat",
+          "PokedexJS",
+          "PokemonGoBot",
+          "PokemonGoNodeDashboard",
+          "polar-cookieParser",
+          "pollUntil",
+          "Polymer",
+          "POM",
+          "pomeloGlobalChannel",
+          "pomeloScale",
+          "portal-fe-devServer",
+          "PostgresClient",
+          "Postlog",
+          "PowerPlanDisplay",
+          "powerPlug",
+          "PP",
+          "ppublishDemo",
+          "Pre",
+          "Preprocessor",
+          "PrettyCSS",
+          "prettyJson",
+          "PrimaryJS",
+          "primerNodo",
+          "primo-explore-LinkedData",
+          "primo-explore-prmFacetsToLeft",
+          "primo-explore-prmFullViewAfter",
+          "primo-explore-prmLogoAfter",
+          "primo-explore-prmSearchBarAfter",
+          "PrimoEsempio",
+          "Printer",
+          "Prism",
+          "prjTemplate",
+          "Probes.js",
+          "process",
+          "proInterface",
+          "Project-A-VK",
+          "Prometheus",
+          "Promise",
+          "Promise.js",
+          "PromiseContext",
+          "promisify-syncStore",
+          "PropagAPISpecification",
+          "propCheckers",
+          "Propeller",
+          "properJSONify",
+          "Proto",
+          "proton-quark-rabbitMQ",
+          "ProtVista",
+          "ProUI-Utils",
+          "ProvaSimone",
+          "provinceCity.js",
+          "PSNjs",
+          "PTC-Creator",
+          "ptyzhuTest_20160813",
+          "PublishDemo",
+          "publishDigitalCrafts2016",
+          "PubSub",
+          "pubsubJS",
+          "pulsarDivya",
+          "punycode",
+          "PupaFM",
+          "Puppet.svg",
+          "PureBox",
+          "PureBox-Gallery-PlayEngine",
+          "purePlayer",
+          "PushMessage",
+          "PushPanel",
+          "PushPlugin_V2",
+          "pybee!batavia",
+          "Q",
+          "q-mod-cliElements",
+          "q-mod-cliPrinter",
+          "QAP-cli",
+          "QAP-SDK",
+          "Qarticles",
+          "QnA_Fore",
+          "QNtest",
+          "qqMap",
+          "qTip2",
+          "QuadMap",
+          "QuantumExperimentService",
+          "querystring",
+          "R",
+          "R.js",
+          "R2",
+          "RAD.js",
+          "Radical",
+          "raehoweNode",
+          "Rajas",
+          "random-fullName",
+          "randomCaddress",
+          "randomCname",
+          "randomCname.js",
+          "randomLib",
+          "randomNickname",
+          "RandomSelection",
+          "randomTestOne",
+          "randString",
+          "randString.js",
+          "Range.js",
+          "Rannalhi",
+          "rAppid.js",
+          "rAppid.js-server",
+          "rAppid.js-sprd",
+          "Rapydscriptify",
+          "RaspiKids",
+          "raZerdummy",
+          "RCTMessageUI",
+          "React_Components",
+          "React-Carousel",
+          "react-countTo",
+          "react-creditCard",
+          "React-ES5-To-ES6-Checklist",
+          "react-input-dateTime",
+          "react-InputText-component",
+          "react-komposer-watchQuery",
+          "react-materialUI-components",
+          "react-native-accountKit",
+          "react-native-cascadeGrid",
+          "react-native-checkBox",
+          "react-native-DebugServerHost",
+          "React-Native-Form-Field",
+          "react-native-isDeviceRooted",
+          "react-native-LoopAnimation",
+          "react-native-MultiSlider",
+          "react-native-portableView",
+          "react-native-swRefresh",
+          "react-PPT",
+          "React-Redux-Docker-Ngnix-Seed",
+          "react-refresh-infinite-tableView",
+          "React-Select-Country",
+          "React-Tabs",
+          "React-UI-Notification",
+          "react-uploadFile",
+          "reactClass",
+          "reactcordovaApp",
+          "ReactEslint",
+          "reactFormComponentTest1",
+          "reactGallery",
+          "reactHeaderComponentTest1",
+          "ReactHero",
+          "reactIntlJson-loader",
+          "ReactNaitveImagePreviewer",
+          "ReactNative-checkbox",
+          "reactNative-checkbox",
+          "reactNativeDatepicker",
+          "reactNativeLoading",
+          "ReactNativeNavbar",
+          "ReactNativeSlideyTabs",
+          "ReactNativeSocialLogin",
+          "ReactNativeStarterKit",
+          "ReactNativeToastAndroid",
+          "reactTwo",
+          "ReactUploader",
+          "readabilitySAX",
+          "ReadableFeeds",
+          "readline",
+          "ReadSettings",
+          "Reality3D",
+          "reallySimpleWeather",
+          "ReApp",
+          "ReasonDB",
+          "RecastAI-Library-JavaScript",
+          "recordType",
+          "recordWebsite",
+          "RedisCacheEngine",
+          "redisHelper",
+          "reDIx",
+          "RefreshMedia",
+          "registerSendMsg",
+          "reloadOnUpdate",
+          "remoteFileToS3",
+          "RemoteTestService",
+          "removeNPMAbsolutePaths",
+          "RentalAdvantage",
+          "repl",
+          "Replace",
+          "Replace2.0",
+          "Replen-FrontEnd",
+          "replNetServer",
+          "Require",
+          "requireAsync",
+          "Resin",
+          "resolveDependencies",
+          "responseHostInfo",
+          "ReST-API",
+          "RESTful-API",
+          "Restifytest",
+          "Restlastic",
+          "RESTLoader",
+          "Reston",
+          "RestTest",
+          "RetreveNumbers",
+          "rgbToHexa",
+          "RhinoStyle",
+          "Richard",
+          "richardUtils",
+          "rinuts-nodeunitDriver",
+          "Risks-Tables",
+          "RNBaiduMap",
+          "RNCommon",
+          "RNSVG",
+          "RNSwiftHealthkit",
+          "rNums",
+          "RobinGitHub",
+          "Robusta",
+          "RockSelect",
+          "Router",
+          "RP_Limpezas_Industriais",
+          "Rpm",
+          "RSK-Router",
+          "RT-react-toolbox",
+          "Rubytool",
+          "runQuery",
+          "runStormTest",
+          "runTestScenario",
+          "RunwayLogger",
+          "RWD-Table-Patterns",
+          "RWPromise",
+          "Safari-command",
+          "SafeObject.js",
+          "Safood-Parse",
+          "SaFood-Parse",
+          "sahibindenServer",
+          "salgueirimTeste",
+          "samepleMicroservice",
+          "samjs-mongo-isOwner",
+          "Sample",
+          "SamplePlugIn",
+          "SandboxTools",
+          "sandcastle_multiApp",
+          "Sanitizer.js",
+          "sanitizer.unescapeEntities",
+          "Sardines",
+          "Sass-Boost",
+          "Sass-JSON",
+          "Sass-layout",
+          "Saturday",
+          "SauceBreak",
+          "sayHelloByone",
+          "sbg-queueManager",
+          "sbUtils",
+          "SC-Expense-Plugin",
+          "Scaffolding",
+          "scalejs.metadataFactory",
+          "ScgiClient",
+          "Scheduler.js",
+          "schema-inspector-anyOf",
+          "scp-cleanRedis",
+          "Scrap",
+          "scriptTools",
+          "scrollAnimation",
+          "scrollPointerEvents",
+          "ScrollShow",
+          "Sdp-App",
+          "seaModel",
+          "searchBox.js",
+          "SecChat",
+          "SecureKeyStore",
+          "segnoJS",
+          "Seguranca",
+          "SegurancaBrasilcard",
+          "Select2",
+          "selfAsync",
+          "selfAutocomplete",
+          "SelfieJS",
+          "SenseJs",
+          "SenseOrm",
+          "Sentimental",
+          "SeptemTool",
+          "seqFlow",
+          "SerialDownloader",
+          "serveItQuick",
+          "Server",
+          "Service-Discovery-DLNA-SSDP",
+          "serviceDiscovery",
+          "SessionWebSocket",
+          "Set",
+          "setInterval",
+          "setRafTimeout",
+          "setTimeout",
+          "SexyJS",
+          "sfaClient",
+          "sgBase",
+          "sgCore",
+          "sgFramework",
+          "sgLayers",
+          "sgSay",
+          "Sharder",
+          "ShareSDK",
+          "SharingCMS",
+          "Shave",
+          "Sheet",
+          "SHI-Shire",
+          "sHistory",
+          "ShowNativeContact",
+          "SHPS4Node-auth",
+          "SHPS4Node-cache",
+          "SHPS4Node-commandline",
+          "SHPS4Node-Config",
+          "SHPS4Node-config",
+          "SHPS4Node-cookie",
+          "SHPS4Node-CSS",
+          "SHPS4Node-dependency",
+          "SHPS4Node-error",
+          "SHPS4Node-file",
+          "SHPS4Node-frontend",
+          "SHPS4Node-init",
+          "SHPS4Node-language",
+          "SHPS4Node-log",
+          "SHPS4Node-make",
+          "SHPS4Node-optimize",
+          "SHPS4Node-parallel",
+          "SHPS4Node-plugin",
+          "SHPS4Node-sandbox",
+          "SHPS4Node-schedule",
+          "SHPS4Node-session",
+          "SHPS4Node-SQL",
+          "shwang1aPackage1",
+          "shy-Do",
+          "shy-static-imgJoin",
+          "SignaturePrinter",
+          "Silvera",
+          "simoneDays",
+          "Simple",
+          "Simple-Cache",
+          "simple-hello-world-apiClientsideTest",
+          "simple-jQuery-slider",
+          "simpleArgsParser",
+          "simpleCsvToJson",
+          "SimpleHtdigest",
+          "SimpleQueue",
+          "SimpleRPC",
+          "Simplog",
+          "SingularityUI",
+          "sip.js-mnQf2Q2R",
+          "Sisense-node-schedule",
+          "SITA-JS-Wrapper",
+          "siteBuild",
+          "Skadi",
+          "SkelEktron",
+          "SKRCensorText",
+          "SkyLabels.js",
+          "Skype-command",
+          "slgComponents",
+          "Slidebars",
+          "Slidebars-legacy",
+          "slidePage",
+          "Slither-Server",
+          "sLog",
+          "slush-initPro",
+          "Smaller4You",
+          "Smart-Web-Proxy",
+          "SmartConfig",
+          "SmartyGrid",
+          "SMValidator",
+          "smyNpm1",
+          "Snake.js",
+          "SnipIt",
+          "SnsShare",
+          "SocialDig.js",
+          "Socialight",
+          "socketGW",
+          "SocketIPC",
+          "sortBy.js",
+          "Soumen",
+          "SoundCloud_Node_API",
+          "SpaceMagic",
+          "SpeechJS",
+          "Speedco",
+          "Speedonetzer",
+          "Sphero-Node-SDK",
+          "Spores",
+          "Spot",
+          "spotifyCurrentlyPlaying.js",
+          "SpotlightJS",
+          "Spring",
+          "SPUtility.js",
+          "SQLClient",
+          "SQProject",
+          "SquareOfNumber",
+          "Squirrel",
+          "squishMenu",
+          "Sslac",
+          "SSO",
+          "SSSDemoNPM7oct",
+          "SSuperSchool",
+          "StaceFlow",
+          "StanLee-WPTheme-Generator",
+          "star-initReact",
+          "Starr",
+          "startInt",
+          "starW-names",
+          "StaticServer",
+          "staticServer",
+          "staticSync",
+          "StatusBar",
+          "StdJSBuilder",
+          "steamAPI",
+          "STEPNode",
+          "Stewed",
+          "stickUp",
+          "stickyNavbar.js",
+          "stickyStack",
+          "StimShopPlugin",
+          "storeJSON",
+          "storkSQL",
+          "stormClient",
+          "Str.js",
+          "Stratagem",
+          "stream",
+          "string_decoder",
+          "String_module",
+          "string-DLL",
+          "string.prototype.htmlDecode",
+          "string.prototype.htmlEntityDecode",
+          "StringDistanceTS",
+          "StringMultiplier",
+          "StringScanner",
+          "STRUCT",
+          "Suckle",
+          "sudokuMaker",
+          "sudoTracker",
+          "SUI-Angular2-Modal",
+          "superClipBoard",
+          "SuperDank",
+          "superJoy",
+          "Supermodule",
+          "supermoduleBugay",
+          "supermoduleLyu",
+          "supermoduleNik",
+          "supermoduleShulumba",
+          "Supersonic",
+          "superUsingMod",
+          "svgSprite",
+          "swimCoachStopwatch",
+          "SwitchBoard",
+          "synchro_ByJoker",
+          "SyncRun",
+          "Syndication",
+          "Synergy",
+          "sys",
+          "Sysdate",
+          "sytemMonitor-client",
+          "szxPack",
+          "T_T",
+          "T-Box",
+          "table-Q",
+          "tableComponent",
+          "Tachyon",
+          "TagCloud",
+          "tagOf",
+          "TagSelect.js",
+          "TalkerNode",
+          "TALQS",
+          "talquingApp",
+          "TangramDocs",
+          "tap-linux-2BA",
+          "tap-win-2BA",
+          "tap-win-C94",
+          "Targis",
+          "Tattletale",
+          "Tayr",
+          "tbCLI",
+          "TDTwitterStream",
+          "Tea",
+          "TeamBuilder",
+          "TechNode",
+          "TechnoLib",
+          "TeeChart",
+          "Templ8",
+          "Template",
+          "Tempus",
+          "Ter",
+          "Tereshkovmodule",
+          "Terminal-command",
+          "test_helloWorld",
+          "Test-7",
+          "test-A",
+          "test-naamat-Al-Aswad",
+          "Test-Project",
+          "TestAmILate",
+          "testApi",
+          "testApp",
+          "Testchai2",
+          "Testchai21",
+          "testContrast",
+          "TESTdelete123",
+          "testDEMOABCD",
+          "testDirJackAtherton",
+          "Teste2",
+          "testeRealTime",
+          "testForThis",
+          "testMe",
+          "testModule",
+          "testModule-hui",
+          "testNode",
+          "TestNodeJsApplication",
+          "testPackage",
+          "testPackage2",
+          "TestPlugin",
+          "testPlugin",
+          "TestProject",
+          "testProject",
+          "testPublish",
+          "testPublisha",
+          "testPublishNpmModule",
+          "TFWhatIs",
+          "Thairon-node",
+          "Thanatos_pack",
+          "ThanhNV",
+          "Theater",
+          "TheGiver",
+          "Thimble",
+          "Thing.js",
+          "thingHolder",
+          "think-paymentService",
+          "think-qiniuService",
+          "think-quotationService",
+          "think-wechatService",
+          "ThinkHub",
+          "ThinkInsteon",
+          "ThirtyDaysOfReactNative",
+          "threadHandler",
+          "threejs-htmlRenderer",
+          "ThrustFS",
+          "ThumborJS",
+          "TigraphBot",
+          "tilejsonHttpShim",
+          "Time-Tracker-Cli",
+          "Timelined",
+          "Timeliner.Core",
+          "Timeliner.Index",
+          "Timepass",
+          "timers",
+          "timeTraveller",
+          "timeUtils",
+          "tiNanta",
+          "TinyAnimate",
+          "tinyChat",
+          "tinyEmiter",
+          "tinyFrame",
+          "tinyImages",
+          "tinyLoger",
+          "Titan",
+          "TJAngular",
+          "tls",
+          "tm-apps-poolApi",
+          "tmSensor",
+          "toBin",
+          "toDataURL",
+          "toDoList",
+          "toDots",
+          "Toji",
+          "tokenAndAuthorizationManager",
+          "tokenAndAuthorizationManger",
+          "Tom",
+          "tomloprodModal",
+          "Tool-bluej-gulp",
+          "Toolshed-Client",
+          "topSdk",
+          "TopuNet-AMD-modules",
+          "TopuNet-BaiduMap",
+          "TopuNet-CalendarScroller",
+          "TopuNet-dropDownLoad",
+          "TopuNet-GrayScale",
+          "TopuNet-ImageCropCompressorH5",
+          "TopuNet-JRoll",
+          "TopuNet-js-functions",
+          "TopuNet-JsHint4Sublime",
+          "TopuNet-JsHintify",
+          "TopuNet-Landscape_mask",
+          "TopuNet-Landscape-Mask",
+          "TopuNet-LayerShow",
+          "TopuNet-mobile-stop-moved",
+          "TopuNet-node-functions",
+          "TopuNet-Pic-code",
+          "TopuNet-PromptLayer-JS",
+          "TopuNet-QueueLazyLoad",
+          "TopuNet-RequireJS",
+          "TopuNet-RotatingBanner",
+          "TopuNet-WaterFall",
+          "TopuNet-weixin-node",
+          "TorrentBeam",
+          "TorrentCollection",
+          "toSrc",
+          "toString",
+          "touchController",
+          "toYaml",
+          "TPA",
+          "tr-O64",
+          "trace_events",
+          "TradeJS",
+          "Trains",
+          "TrainsController",
+          "TrainsModel",
+          "TramiteDocumentarioFront",
+          "TransactionRelay",
+          "transformConfigJson",
+          "transitionEnd",
+          "translateFzn",
+          "Travis",
+          "TrixCSS",
+          "truncateFilename",
+          "tslint-jasmine-noSkipOrFocus",
+          "TSN",
+          "ttm-Testing",
+          "tty",
+          "Tuio.js",
+          "Turntable",
+          "tuTrabajo-client",
+          "TweenTime",
+          "TwigJS",
+          "twitterApiWrapper",
+          "txtObj",
+          "Tyche",
+          "TypeCast",
+          "typedCj.js",
+          "TypedFunc",
+          "typescript-demo-MATC-Andrew",
+          "typography-theme-Wikipedia",
+          "typopro-web-TypoPRO-AmaticSC",
+          "typopro-web-TypoPRO-AnonymousPro",
+          "typopro-web-TypoPRO-Asap",
+          "typopro-web-TypoPRO-Astloch",
+          "typopro-web-TypoPRO-BebasNeue",
+          "typopro-web-TypoPRO-Bitter",
+          "typopro-web-TypoPRO-Chawp",
+          "typopro-web-TypoPRO-ComingSoon",
+          "typopro-web-TypoPRO-Cousine",
+          "typopro-web-TypoPRO-Coustard",
+          "typopro-web-TypoPRO-CraftyGirls",
+          "typopro-web-TypoPRO-Cuprum",
+          "typopro-web-TypoPRO-Damion",
+          "typopro-web-TypoPRO-DancingScript",
+          "typopro-web-TypoPRO-Delius",
+          "typopro-web-TypoPRO-Gidole",
+          "typopro-web-TypoPRO-GiveYouGlory",
+          "typopro-web-TypoPRO-GrandHotel",
+          "typopro-web-TypoPRO-GreatVibes",
+          "typopro-web-TypoPRO-Handlee",
+          "typopro-web-TypoPRO-HHSamuel",
+          "typopro-web-TypoPRO-Inconsolata",
+          "typopro-web-TypoPRO-IndieFlower",
+          "typopro-web-TypoPRO-Junction",
+          "typopro-web-TypoPRO-Kalam",
+          "typopro-web-TypoPRO-KingthingsPetrock",
+          "typopro-web-TypoPRO-Kreon",
+          "typopro-web-TypoPRO-LeagueGothic",
+          "typopro-web-TypoPRO-Lekton",
+          "typopro-web-TypoPRO-LibreBaskerville",
+          "typopro-web-TypoPRO-Milonga",
+          "typopro-web-TypoPRO-Montserrat",
+          "typopro-web-TypoPRO-Nickainley",
+          "typopro-web-TypoPRO-Oxygen",
+          "typopro-web-TypoPRO-Pacifico",
+          "typopro-web-TypoPRO-PatuaOne",
+          "typopro-web-TypoPRO-Poetsen",
+          "typopro-web-TypoPRO-Pompiere",
+          "typopro-web-TypoPRO-PTMono",
+          "typopro-web-TypoPRO-Rosario",
+          "typopro-web-TypoPRO-SansitaOne",
+          "typopro-web-TypoPRO-Satisfy",
+          "typopro-web-TypoPRO-Signika",
+          "typopro-web-TypoPRO-Slabo",
+          "typopro-web-TypoPRO-TopSecret",
+          "typopro-web-TypoPRO-Unifraktur",
+          "typopro-web-TypoPRO-Vegur",
+          "typopro-web-TypoPRO-VeteranTypewriter",
+          "typopro-web-TypoPRO-WeblySleek",
+          "typopro-web-TypoPRO-Yellowtail",
+          "Ubertesters",
+          "Ubi",
+          "UbibotSensor",
+          "UbidotsMoscaServer",
+          "UbiName",
+          "uDom",
+          "ueberDB",
+          "ueberDB-couch",
+          "ueberRemoteStorage",
+          "ugcFore",
+          "UIjson",
+          "UkGeoTool",
+          "UltraServerIO",
+          "UM007",
+          "uMech",
+          "uMicro",
+          "uMicro-invoke",
+          "UMiracleButton",
+          "uncaughtException",
+          "Underscore-1",
+          "UnderscoreKit",
+          "UnderscoreMatchersForJasmine",
+          "underscorePlus",
+          "underscoreWithTypings",
+          "Uniform",
+          "Unit-Bezier",
+          "unity-kjXmol-1",
+          "UniversalRoute",
+          "Up2Bucket",
+          "UParams",
+          "UploadCore",
+          "Uploader",
+          "URIjs",
+          "url",
+          "URLON",
+          "urlParser",
+          "urlWatch",
+          "USAJOBS",
+          "USAJOBS_Help_Center",
+          "UserID",
+          "userModule1123455",
+          "util",
+          "utilityFileSystem",
+          "utilityTool",
+          "Utils",
+          "uTool",
+          "uTool2",
+          "uvCharts",
+          "v8",
+          "Validate",
+          "Validator",
+          "VardeminChat",
+          "vc-buttonGroup",
+          "vcPagination",
+          "vdGlslCanvas",
+          "VDU-web",
+          "Vector",
+          "Velvet",
+          "vericredClient",
+          "VerifyInput.js",
+          "Videobox-MODX",
+          "videoBoxer",
+          "VideoStream",
+          "Vidzy",
+          "ViewAbility",
+          "ViewPort",
+          "ViewTest",
+          "vintageJS",
+          "Virsical",
+          "VK-Promise",
+          "VLC-command",
+          "vm",
+          "VmosoApiClient",
+          "vmSFTP",
+          "VoiceIt",
+          "voiceLive",
+          "Votesy",
+          "VoxFeed",
+          "Voyager-search",
+          "vPromise",
+          "vQ",
+          "vQMgArq1o4U1",
+          "vsGoogleAutocomplete",
+          "vue-dS",
+          "vue-scrollTo",
+          "vueLoadingBar",
+          "VueProject",
+          "VueProjectES5",
+          "VueTree",
+          "Vuk",
+          "W2G2",
+          "w5cValidator",
+          "w11k-dropdownToggle",
+          "Wamble",
+          "wamTool",
+          "Wanderer",
+          "wangeditorForReact",
+          "wantu-nodejsSDK",
+          "wasabiD",
+          "wasabiH",
+          "wasi",
+          "WasteOfTime",
+          "WatchWorker",
+          "watsonWebSocketSTTwrapper",
+          "wb-Wisteria",
+          "wBitmask",
+          "wColor",
+          "wColor256",
+          "wConsequence",
+          "wCopyable",
+          "WCordova",
+          "wDeployer",
+          "Web_GUI_Core",
+          "web3.onChange",
+          "Web4.0",
+          "webarrancoStarter",
+          "WebConsoleUI",
+          "Webcord",
+          "webdriverNode",
+          "webext-getBytesInUse-polyfill",
+          "WebHook",
+          "WebODF",
+          "webpack-dev-server-getApp",
+          "webpack-dynamicHash",
+          "webpack-Minimount-starter",
+          "WebParrot",
+          "webpay-webserviceAPI",
+          "webStart",
+          "WebStencil",
+          "webStorage",
+          "wechat-enterprise-for-kfService",
+          "wEventHandler",
+          "wFiles",
+          "wGluCal",
+          "WhereThingsHappened",
+          "WhiteRabbit",
+          "WigGLe",
+          "Wilson_U",
+          "Wilson_Util",
+          "WiredPanels",
+          "wkhtmltopdfWrapper",
+          "wLogger",
+          "Wmhao",
+          "WNdb",
+          "WoD-Dice",
+          "WolfyEventEmitter",
+          "woodwoodnine_FirstTest",
+          "wordCounting",
+          "WordDuelConstants",
+          "wPath",
+          "wProto",
+          "wqProj-cli",
+          "wRegexpObject",
+          "WSBroker",
+          "wscn-tilesetQuote-component",
+          "wsxRest",
+          "wTemplate",
+          "wTesting",
+          "WTGeo",
+          "wTools",
+          "wy-checkBrowser",
+          "X-date",
+          "X-editable",
+          "xBEM",
+          "xlsTjson",
+          "xlsxParser",
+          "xmlToJsonTs",
+          "Xnpmtools",
+          "xSpinner",
+          "xStore",
+          "xui-vue-WorkflowArrow",
+          "Xunfei",
+          "xuNpm",
+          "XWindow",
+          "xwjApp",
+          "xxxDemo",
+          "yaDeferred",
+          "YAEventEmitter",
+          "yaMap",
+          "yamQuery-excel",
+          "yamQuery-excelAnalizer",
+          "YamYam",
+          "yang-testingNPM",
+          "YaoXiaoMi",
+          "Yeezy-Case",
+          "Yggdrasil",
+          "YJS",
+          "YmpleCommerce",
+          "YouAreDaChef",
+          "YouSlackBot",
+          "yrdLmz",
+          "yuanMath",
+          "YuicompressorValidator",
+          "Yummy",
+          "Yummy-Yummy",
+          "YunUI",
+          "Yworkcli",
+          "Yworkshell",
+          "z-lib-structure-dqIndex",
+          "zhb_helloTest",
+          "Zhengzx",
+          "zigZag",
+          "Ziz",
+          "ZJJPackage",
+          "zkModules",
+          "zlib",
+          "zmqConnector",
+          "ZooKeeper",
+          "zzcBridge",
+          "zzcCopy",
+          "zzcDownloadApp"
+        ];
+      }
+    });
+    var index_exports = {};
+    __export(index_exports, {
+      Err: /* @__PURE__ */ __name(() => Err, "Err"),
+      Ok: /* @__PURE__ */ __name(() => Ok, "Ok"),
+      PURL_Type: /* @__PURE__ */ __name(() => import_types.PURL_Type, "PURL_Type"),
+      PackageURL: /* @__PURE__ */ __name(() => PackageURL, "PackageURL"),
+      PurlBuilder: /* @__PURE__ */ __name(() => PurlBuilder, "PurlBuilder"),
+      PurlComponent: /* @__PURE__ */ __name(() => PurlComponent, "PurlComponent"),
+      PurlError: /* @__PURE__ */ __name(() => PurlError, "PurlError"),
+      PurlInjectionError: /* @__PURE__ */ __name(() => PurlInjectionError, "PurlInjectionError"),
+      PurlQualifierNames: /* @__PURE__ */ __name(() => PurlQualifierNames, "PurlQualifierNames"),
+      PurlType: /* @__PURE__ */ __name(() => PurlType, "PurlType"),
+      ResultUtils: /* @__PURE__ */ __name(() => ResultUtils, "ResultUtils"),
+      UrlConverter: /* @__PURE__ */ __name(() => UrlConverter, "UrlConverter"),
+      Vers: /* @__PURE__ */ __name(() => Vers, "Vers"),
+      compare: /* @__PURE__ */ __name(() => compare, "compare"),
+      containsInjectionCharacters: /* @__PURE__ */ __name(() => containsInjectionCharacters, "containsInjectionCharacters"),
+      createMatcher: /* @__PURE__ */ __name(() => createMatcher, "createMatcher"),
+      equals: /* @__PURE__ */ __name(() => equals, "equals"),
+      err: /* @__PURE__ */ __name(() => err, "err"),
+      findInjectionCharCode: /* @__PURE__ */ __name(() => findInjectionCharCode, "findInjectionCharCode"),
+      formatInjectionChar: /* @__PURE__ */ __name(() => formatInjectionChar, "formatInjectionChar"),
+      matches: /* @__PURE__ */ __name(() => matches, "matches"),
+      ok: /* @__PURE__ */ __name(() => ok, "ok"),
+      parseNpmSpecifier: /* @__PURE__ */ __name(() => parseNpmSpecifier, "parseNpmSpecifier"),
+      stringify: /* @__PURE__ */ __name(() => stringify, "stringify"),
+      stringifySpec: /* @__PURE__ */ __name(() => stringifySpec, "stringifySpec")
+    });
+    module2.exports = __toCommonJS(index_exports);
+    var import_types = __toESM(require_types());
+    var { apply, bind, call } = Function.prototype;
+    var uncurryThis = bind.bind(call);
+    var applyBind = bind.bind(apply);
+    var MapCtor = Map;
+    var SetCtor = Set;
+    var URLCtor = URL;
+    var URLSearchParamsCtor = URLSearchParams;
+    var WeakSetCtor = WeakSet;
+    var encodeComponent = globalThis.encodeURIComponent;
+    var decodeComponent = globalThis.decodeURIComponent;
+    var JSONParse = JSON.parse;
+    var JSONStringify = JSON.stringify;
+    var ObjectCreate = Object.create;
+    var ObjectEntries = Object.entries;
+    var ObjectFromEntries = Object.fromEntries;
+    var ObjectFreeze = Object.freeze;
+    var ObjectIsFrozen = Object.isFrozen;
+    var ObjectKeys = Object.keys;
+    var ObjectValues = Object.values;
+    var ArrayIsArray = Array.isArray;
+    var ArrayPrototypeAt = uncurryThis(Array.prototype.at);
+    var ArrayPrototypeFilter = uncurryThis(Array.prototype.filter);
+    var ArrayPrototypeFlatMap = uncurryThis(Array.prototype.flatMap);
+    var ArrayPrototypeIncludes = uncurryThis(Array.prototype.includes);
+    var ArrayPrototypeJoin = uncurryThis(Array.prototype.join);
+    var ArrayPrototypeMap = uncurryThis(Array.prototype.map);
+    var ArrayPrototypePush = uncurryThis(Array.prototype.push);
+    var ArrayPrototypeSlice = uncurryThis(Array.prototype.slice);
+    var ArrayPrototypeSome = uncurryThis(Array.prototype.some);
+    var ArrayPrototypeToSorted = uncurryThis(Array.prototype.toSorted);
+    var ReflectApply = Reflect.apply;
+    var ReflectDefineProperty = Reflect.defineProperty;
+    var ReflectGetOwnPropertyDescriptor = Reflect.getOwnPropertyDescriptor;
+    var ReflectOwnKeys = Reflect.ownKeys;
+    var ReflectSetPrototypeOf = Reflect.setPrototypeOf;
+    var NumberPrototypeToString = uncurryThis(Number.prototype.toString);
+    var RegExpPrototypeExec = uncurryThis(RegExp.prototype.exec);
+    var RegExpPrototypeTest = uncurryThis(RegExp.prototype.test);
+    var StringFromCharCode = String.fromCharCode;
+    var StringPrototypeCharCodeAt = uncurryThis(String.prototype.charCodeAt);
+    var StringPrototypeEndsWith = uncurryThis(String.prototype.endsWith);
+    var StringPrototypeIncludes = uncurryThis(String.prototype.includes);
+    var StringPrototypeIndexOf = uncurryThis(String.prototype.indexOf);
+    var StringPrototypeLastIndexOf = uncurryThis(String.prototype.lastIndexOf);
+    var StringPrototypeReplace = uncurryThis(String.prototype.replace);
+    var StringPrototypeReplaceAll = uncurryThis(
+      String.prototype.replaceAll
+    );
+    var StringPrototypePadStart = uncurryThis(String.prototype.padStart);
+    var StringPrototypeSlice = uncurryThis(String.prototype.slice);
+    var StringPrototypeSplit = uncurryThis(String.prototype.split);
+    var StringPrototypeStartsWith = uncurryThis(String.prototype.startsWith);
+    var StringPrototypeToLowerCase = uncurryThis(String.prototype.toLowerCase);
+    var StringPrototypeToUpperCase = uncurryThis(String.prototype.toUpperCase);
+    var StringPrototypeTrim = uncurryThis(String.prototype.trim);
+    var _PackageURL;
+    function _registerPackageURL(ctor) {
+      _PackageURL = ctor;
+    }
+    __name(_registerPackageURL, "_registerPackageURL");
+    function toCanonicalString(input) {
+      if (typeof input === "string") {
+        if (!_PackageURL) {
+          throw new Error(
+            "PackageURL not registered. Import PackageURL before using string comparison."
+          );
+        }
+        return _PackageURL.fromString(input).toString();
+      }
+      return input.toString();
+    }
+    __name(toCanonicalString, "toCanonicalString");
+    var wildcardRegexCache = new MapCtor();
+    var WILDCARD_CACHE_MAX = 1024;
+    var MAX_PATTERN_LENGTH = 4096;
+    function matchWildcard(pattern, value) {
+      if (pattern.length > MAX_PATTERN_LENGTH) {
+        return false;
+      }
+      let regex = wildcardRegexCache.get(pattern);
+      if (regex === void 0) {
+        const regexPattern = StringPrototypeReplace(
+          StringPrototypeReplace(
+            StringPrototypeReplace(pattern, /[.+^${}()|[\]\\]/g, "\\$&"),
+            /\*/g,
+            ".*"
+          ),
+          /\?/g,
+          "."
+        );
+        regex = new RegExp(
+          `^${StringPrototypeReplace(regexPattern, /(\.\*)+/g, ".*")}$`
+        );
+        if (wildcardRegexCache.size >= WILDCARD_CACHE_MAX) {
+          const oldest = wildcardRegexCache.keys().next().value;
+          if (oldest !== void 0) {
+            wildcardRegexCache.delete(oldest);
+          }
+        }
+        wildcardRegexCache.set(pattern, regex);
+      }
+      return RegExpPrototypeTest(regex, value);
+    }
+    __name(matchWildcard, "matchWildcard");
+    function matchComponent(patternValue, actualValue, matcher) {
+      if (patternValue === "**") {
+        return true;
+      }
+      if (patternValue === null || patternValue === void 0 || patternValue === "") {
+        return actualValue === null || actualValue === void 0 || actualValue === "";
+      }
+      if (actualValue === null || actualValue === void 0 || actualValue === "") {
+        return false;
+      }
+      if (matcher) {
+        return matcher(actualValue);
+      }
+      if (StringPrototypeIncludes(patternValue, "*") || StringPrototypeIncludes(patternValue, "?")) {
+        return matchWildcard(patternValue, actualValue);
+      }
+      return patternValue === actualValue;
+    }
+    __name(matchComponent, "matchComponent");
+    function equals(a, b) {
+      return toCanonicalString(a) === toCanonicalString(b);
+    }
+    __name(equals, "equals");
+    function compare(a, b) {
+      const aStr = toCanonicalString(a);
+      const bStr = toCanonicalString(b);
+      if (aStr < bStr) {
+        return -1;
+      }
+      if (aStr > bStr) {
+        return 1;
+      }
+      return 0;
+    }
+    __name(compare, "compare");
+    function parsePattern(pattern) {
+      if (!StringPrototypeStartsWith(pattern, "pkg:")) {
+        return void 0;
+      }
+      const patternWithoutScheme = StringPrototypeSlice(pattern, 4);
+      const typeEndIndex = StringPrototypeIndexOf(patternWithoutScheme, "/");
+      if (typeEndIndex === -1) {
+        return void 0;
+      }
+      let typePattern = StringPrototypeSlice(patternWithoutScheme, 0, typeEndIndex);
+      const remaining = StringPrototypeSlice(patternWithoutScheme, typeEndIndex + 1);
+      let namespacePattern;
+      let namePattern;
+      let versionPattern;
+      const firstSlashIndex = StringPrototypeIndexOf(remaining, "/");
+      let nameAndVersion;
+      if (firstSlashIndex !== -1) {
+        namespacePattern = StringPrototypeSlice(remaining, 0, firstSlashIndex);
+        nameAndVersion = StringPrototypeSlice(remaining, firstSlashIndex + 1);
+      } else {
+        nameAndVersion = remaining;
+      }
+      const versionSeparatorIndex = StringPrototypeStartsWith(nameAndVersion, "@") ? StringPrototypeIndexOf(nameAndVersion, "@", 1) : StringPrototypeIndexOf(nameAndVersion, "@");
+      if (versionSeparatorIndex !== -1) {
+        namePattern = StringPrototypeSlice(nameAndVersion, 0, versionSeparatorIndex);
+        versionPattern = StringPrototypeSlice(
+          nameAndVersion,
+          versionSeparatorIndex + 1
+        );
+      } else {
+        namePattern = nameAndVersion;
+      }
+      typePattern = StringPrototypeToLowerCase(typePattern);
+      if (typePattern === "npm") {
+        if (namespacePattern) {
+          namespacePattern = StringPrototypeToLowerCase(namespacePattern);
+        }
+        namePattern = StringPrototypeToLowerCase(namePattern);
+      }
+      if (typePattern === "pypi") {
+        namePattern = StringPrototypeReplace(
+          StringPrototypeToLowerCase(namePattern),
+          /_/g,
+          "-"
+        );
+      }
+      return { typePattern, namespacePattern, namePattern, versionPattern };
+    }
+    __name(parsePattern, "parsePattern");
+    function matches(pattern, purl) {
+      const parsed = parsePattern(pattern);
+      if (!parsed) {
+        return false;
+      }
+      const { typePattern, namespacePattern, namePattern, versionPattern } = parsed;
+      return matchComponent(typePattern, purl.type) && matchComponent(namespacePattern, purl.namespace) && matchComponent(namePattern, purl.name) && matchComponent(versionPattern, purl.version);
+    }
+    __name(matches, "matches");
+    function createMatcher(pattern) {
+      const parsed = parsePattern(pattern);
+      if (!parsed) {
+        return () => false;
+      }
+      const { typePattern, namespacePattern, namePattern, versionPattern } = parsed;
+      const typeHasWildcard = typePattern && (StringPrototypeIncludes(typePattern, "*") || StringPrototypeIncludes(typePattern, "?"));
+      const typeMatcher = typeHasWildcard ? (value) => matchWildcard(typePattern, value) : void 0;
+      const namespaceHasWildcard = namespacePattern && (StringPrototypeIncludes(namespacePattern, "*") || StringPrototypeIncludes(namespacePattern, "?"));
+      const namespaceMatcher = namespaceHasWildcard && namespacePattern ? (value) => matchWildcard(namespacePattern, value) : void 0;
+      const nameHasWildcard = namePattern && (StringPrototypeIncludes(namePattern, "*") || StringPrototypeIncludes(namePattern, "?"));
+      const nameMatcher = nameHasWildcard ? (value) => matchWildcard(namePattern, value) : void 0;
+      const versionHasWildcard = versionPattern && (StringPrototypeIncludes(versionPattern, "*") || StringPrototypeIncludes(versionPattern, "?"));
+      const versionMatcher = versionHasWildcard && versionPattern ? (value) => matchWildcard(versionPattern, value) : void 0;
+      return (_purl) => {
+        return matchComponent(typePattern, _purl.type, typeMatcher) && matchComponent(namespacePattern, _purl.namespace, namespaceMatcher) && matchComponent(namePattern, _purl.name, nameMatcher) && matchComponent(versionPattern, _purl.version, versionMatcher);
+      };
+    }
+    __name(createMatcher, "createMatcher");
+    function formatPurlErrorMessage(message = "") {
+      const { length } = message;
+      let formatted = "";
+      if (length) {
+        const code0 = StringPrototypeCharCodeAt(message, 0);
+        formatted = code0 >= 65 && code0 <= 90 ? `${StringPrototypeToLowerCase(message[0])}${StringPrototypeSlice(message, 1)}` : message;
+        if (length > 1 && StringPrototypeCharCodeAt(message, length - 1) === 46 && StringPrototypeCharCodeAt(message, length - 2) !== 46) {
+          formatted = StringPrototypeSlice(formatted, 0, -1);
+        }
+      }
+      return `Invalid purl: ${formatted}`;
+    }
+    __name(formatPurlErrorMessage, "formatPurlErrorMessage");
+    var PurlError = class extends Error {
+      static {
+        __name(this, "PurlError");
+      }
+      constructor(message, options) {
+        super(formatPurlErrorMessage(message), options);
+      }
+    };
+    var PurlInjectionError = class extends PurlError {
+      static {
+        __name(this, "PurlInjectionError");
+      }
+      charCode;
+      component;
+      purlType;
+      constructor(purlType, component, charCode, charLabel) {
+        super(
+          `${purlType} "${component}" component contains injection character ${charLabel}`
+        );
+        this.charCode = charCode;
+        this.component = component;
+        this.purlType = purlType;
+        ObjectFreeze(this);
+      }
+    };
+    ObjectFreeze(PurlInjectionError.prototype);
+    function decodePurlComponent(comp, encodedComponent) {
+      try {
+        return decodeComponent(encodedComponent);
+      } catch (e) {
+        throw new PurlError(`unable to decode "${comp}" component`, { cause: e });
+      }
+    }
+    __name(decodePurlComponent, "decodePurlComponent");
+    var LOOP_SENTINEL = 1e6;
+    var REUSED_SEARCH_PARAMS = new URLSearchParamsCtor();
+    var REUSED_SEARCH_PARAMS_KEY = "_";
+    var REUSED_SEARCH_PARAMS_OFFSET = 2;
+    function recursiveFreeze(value_) {
+      if (value_ === null || !(typeof value_ === "object" || typeof value_ === "function") || ObjectIsFrozen(value_)) {
+        return value_;
+      }
+      const queue = [value_];
+      const visited = new WeakSetCtor();
+      visited.add(value_);
+      let { length: queueLength } = queue;
+      let pos = 0;
+      while (pos < queueLength) {
+        if (pos === LOOP_SENTINEL) {
+          throw new Error("Object graph too large (exceeds 1,000,000 items).");
+        }
+        const obj = queue[pos++];
+        ObjectFreeze(obj);
+        if (ArrayIsArray(obj)) {
+          for (let i = 0, { length } = obj; i < length; i += 1) {
+            const item = obj[i];
+            if (item !== null && (typeof item === "object" || typeof item === "function") && !ObjectIsFrozen(item) && !visited.has(item)) {
+              visited.add(item);
+              queue[queueLength++] = item;
+            }
+          }
+        } else {
+          const keys = ReflectOwnKeys(obj);
+          for (let i = 0, { length } = keys; i < length; i += 1) {
+            const propValue = obj[keys[i]];
+            if (propValue !== null && (typeof propValue === "object" || typeof propValue === "function") && !ObjectIsFrozen(propValue) && !visited.has(propValue)) {
+              visited.add(propValue);
+              queue[queueLength++] = propValue;
+            }
+          }
+        }
+      }
+      return value_;
+    }
+    __name(recursiveFreeze, "recursiveFreeze");
+    function isObject(value) {
+      return value !== null && typeof value === "object";
+    }
+    __name(isObject, "isObject");
+    function isBlank(str) {
+      for (let i = 0, { length } = str; i < length; i += 1) {
+        const code = StringPrototypeCharCodeAt(str, i);
+        if (!// Whitespace characters according to ECMAScript spec:
+        // https://tc39.es/ecma262/#sec-white-space
+        // Space
+        (code === 32 || // Tab
+        code === 9 || // Line Feed
+        code === 10 || // Vertical Tab
+        code === 11 || // Form Feed
+        code === 12 || // Carriage Return
+        code === 13 || // No-Break Space
+        code === 160 || // Ogham Space Mark
+        code === 5760 || // En Quad
+        code === 8192 || // Em Quad
+        code === 8193 || // En Space
+        code === 8194 || // Em Space
+        code === 8195 || // Three-Per-Em Space
+        code === 8196 || // Four-Per-Em Space
+        code === 8197 || // Six-Per-Em Space
+        code === 8198 || // Figure Space
+        code === 8199 || // Punctuation Space
+        code === 8200 || // Thin Space
+        code === 8201 || // Hair Space
+        code === 8202 || // Line Separator
+        code === 8232 || // Paragraph Separator
+        code === 8233 || // Narrow No-Break Space
+        code === 8239 || // Medium Mathematical Space
+        code === 8287 || // Ideographic Space
+        code === 12288 || code === 65279)) {
+          return false;
+        }
+      }
+      return true;
+    }
+    __name(isBlank, "isBlank");
+    function isNonEmptyString(value) {
+      return typeof value === "string" && value.length > 0;
+    }
+    __name(isNonEmptyString, "isNonEmptyString");
+    var regexSemverNumberedGroups = ObjectFreeze(
+      /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/
+    );
+    function isSemverString(value) {
+      return typeof value === "string" && RegExpPrototypeTest(regexSemverNumberedGroups, value);
+    }
+    __name(isSemverString, "isSemverString");
+    function lowerName(purl) {
+      purl.name = StringPrototypeToLowerCase(purl.name);
+    }
+    __name(lowerName, "lowerName");
+    function lowerNamespace(purl) {
+      const { namespace } = purl;
+      if (typeof namespace === "string") {
+        purl.namespace = StringPrototypeToLowerCase(namespace);
+      }
+    }
+    __name(lowerNamespace, "lowerNamespace");
+    function lowerVersion(purl) {
+      const { version } = purl;
+      if (typeof version === "string") {
+        purl.version = StringPrototypeToLowerCase(version);
+      }
+    }
+    __name(lowerVersion, "lowerVersion");
+    function replaceDashesWithUnderscores(str) {
+      let result = "";
+      let fromIndex = 0;
+      let index = 0;
+      while ((index = StringPrototypeIndexOf(str, "-", fromIndex)) !== -1) {
+        result = `${result + StringPrototypeSlice(str, fromIndex, index)}_`;
+        fromIndex = index + 1;
+      }
+      return fromIndex ? result + StringPrototypeSlice(str, fromIndex) : str;
+    }
+    __name(replaceDashesWithUnderscores, "replaceDashesWithUnderscores");
+    function replaceUnderscoresWithDashes(str) {
+      let result = "";
+      let fromIndex = 0;
+      let index = 0;
+      while ((index = StringPrototypeIndexOf(str, "_", fromIndex)) !== -1) {
+        result = `${result + StringPrototypeSlice(str, fromIndex, index)}-`;
+        fromIndex = index + 1;
+      }
+      return fromIndex ? result + StringPrototypeSlice(str, fromIndex) : str;
+    }
+    __name(replaceUnderscoresWithDashes, "replaceUnderscoresWithDashes");
+    function isInjectionCharCode(code) {
+      if (code <= 31) {
+        return true;
+      }
+      if (
+        // space
+        code === 32 || // !
+        code === 33 || // "
+        code === 34 || // #
+        code === 35 || // $
+        code === 36 || // %
+        code === 37 || // &
+        code === 38 || // '
+        code === 39 || // (
+        code === 40 || // )
+        code === 41 || // *
+        code === 42 || // ;
+        code === 59 || // <
+        code === 60 || // =
+        code === 61 || // >
+        code === 62 || // ?
+        code === 63 || // [
+        code === 91 || // \
+        code === 92 || // ]
+        code === 93 || // `
+        code === 96 || // {
+        code === 123 || // |
+        code === 124 || // }
+        code === 125 || // ~
+        code === 126 || // DEL
+        code === 127
+      ) {
+        return true;
+      }
+      if (code >= 128 && code <= 159) {
+        return true;
+      }
+      if (
+        // Zero-width space
+        code === 8203 || // Zero-width non-joiner
+        code === 8204 || // Zero-width joiner
+        code === 8205 || // Left-to-right mark
+        code === 8206 || // Right-to-left mark
+        code === 8207 || // Left-to-right embedding
+        code === 8234 || // Right-to-left embedding
+        code === 8235 || // Pop directional formatting
+        code === 8236 || // Left-to-right override
+        code === 8237 || // Right-to-left override
+        code === 8238 || // Word joiner
+        code === 8288 || // BOM / zero-width no-break space
+        code === 65279 || // Object replacement character
+        code === 65532 || // Replacement character
+        code === 65533
+      ) {
+        return true;
+      }
+      return false;
+    }
+    __name(isInjectionCharCode, "isInjectionCharCode");
+    function isCommandInjectionCharCode(code) {
+      if (code <= 31 && code !== 9) {
+        return true;
+      }
+      if (
+        // $ — command substitution $()
+        code === 36 || // ; — command separator
+        code === 59 || // < — input redirection
+        code === 60 || // > — output redirection
+        code === 62 || // \ — escape character
+        code === 92 || // ` — command substitution (backtick form)
+        code === 96 || // | — pipe
+        code === 124 || // DEL
+        code === 127
+      ) {
+        return true;
+      }
+      if (code >= 128 && code <= 159) {
+        return true;
+      }
+      if (code === 8203 || code === 8204 || code === 8205 || code === 8206 || code === 8207 || code === 8234 || code === 8235 || code === 8236 || code === 8237 || code === 8238 || code === 8288 || code === 65279 || code === 65532 || code === 65533) {
+        return true;
+      }
+      return false;
+    }
+    __name(isCommandInjectionCharCode, "isCommandInjectionCharCode");
+    function findCommandInjectionCharCode(str) {
+      for (let i = 0, { length } = str; i < length; i += 1) {
+        const code = StringPrototypeCharCodeAt(str, i);
+        if (isCommandInjectionCharCode(code)) {
+          return code;
+        }
+      }
+      return -1;
+    }
+    __name(findCommandInjectionCharCode, "findCommandInjectionCharCode");
+    function findInjectionCharCode(str) {
+      for (let i = 0, { length } = str; i < length; i += 1) {
+        const code = StringPrototypeCharCodeAt(str, i);
+        if (isInjectionCharCode(code)) {
+          return code;
+        }
+      }
+      return -1;
+    }
+    __name(findInjectionCharCode, "findInjectionCharCode");
+    function containsInjectionCharacters(str) {
+      return findInjectionCharCode(str) !== -1;
+    }
+    __name(containsInjectionCharacters, "containsInjectionCharacters");
+    function formatInjectionChar(code) {
+      const hex = NumberPrototypeToString(code, 16);
+      if (code >= 32 && code <= 126) {
+        return `"${StringFromCharCode(code)}" (0x${hex})`;
+      }
+      return `0x${StringPrototypePadStart(hex, 2, "0")}`;
+    }
+    __name(formatInjectionChar, "formatInjectionChar");
+    function trimLeadingSlashes(str) {
+      let start = 0;
+      while (StringPrototypeCharCodeAt(str, start) === 47) {
+        start += 1;
+      }
+      return start === 0 ? str : StringPrototypeSlice(str, start);
+    }
+    __name(trimLeadingSlashes, "trimLeadingSlashes");
+    var EMPTY_ENTRIES = ObjectFreeze(
+      []
+    );
+    function normalizeName(rawName) {
+      return typeof rawName === "string" ? StringPrototypeTrim(rawName) : void 0;
+    }
+    __name(normalizeName, "normalizeName");
+    function normalizeNamespace(rawNamespace) {
+      return typeof rawNamespace === "string" ? normalizePurlPath(rawNamespace) : void 0;
+    }
+    __name(normalizeNamespace, "normalizeNamespace");
+    function normalizePurlPath(pathname, options) {
+      const { filter: callback } = options ?? {};
+      let collapsed = "";
+      let start = 0;
+      while (StringPrototypeCharCodeAt(pathname, start) === 47) {
+        start += 1;
+      }
+      let nextIndex = StringPrototypeIndexOf(pathname, "/", start);
+      if (nextIndex === -1) {
+        return StringPrototypeSlice(pathname, start);
+      }
+      while (nextIndex !== -1) {
+        const segment = StringPrototypeSlice(pathname, start, nextIndex);
+        if (callback === void 0 || callback(segment)) {
+          collapsed = collapsed + (collapsed.length === 0 ? "" : "/") + segment;
+        }
+        start = nextIndex + 1;
+        while (StringPrototypeCharCodeAt(pathname, start) === 47) {
+          start += 1;
+        }
+        nextIndex = StringPrototypeIndexOf(pathname, "/", start);
+      }
+      const lastSegment = StringPrototypeSlice(pathname, start);
+      if (lastSegment.length !== 0 && (callback === void 0 || callback(lastSegment))) {
+        collapsed = collapsed + (collapsed.length === 0 ? "" : "/") + lastSegment;
+      }
+      return collapsed;
+    }
+    __name(normalizePurlPath, "normalizePurlPath");
+    function normalizeQualifiers(rawQualifiers) {
+      let qualifiers;
+      for (const { 0: key, 1: value } of qualifiersToEntries(rawQualifiers)) {
+        const strValue = typeof value === "string" ? value : typeof value === "number" || typeof value === "boolean" ? `${value}` : "";
+        const trimmed = StringPrototypeTrim(strValue);
+        if (trimmed.length === 0) {
+          continue;
+        }
+        if (qualifiers === void 0) {
+          qualifiers = ObjectCreate(null);
+        }
+        qualifiers[StringPrototypeToLowerCase(key)] = trimmed;
+      }
+      return qualifiers;
+    }
+    __name(normalizeQualifiers, "normalizeQualifiers");
+    function normalizeSubpath(rawSubpath) {
+      return typeof rawSubpath === "string" ? normalizePurlPath(rawSubpath, { filter: subpathFilter }) : void 0;
+    }
+    __name(normalizeSubpath, "normalizeSubpath");
+    function normalizeType(rawType) {
+      return typeof rawType === "string" ? StringPrototypeToLowerCase(StringPrototypeTrim(rawType)) : void 0;
+    }
+    __name(normalizeType, "normalizeType");
+    function normalizeVersion(rawVersion) {
+      return typeof rawVersion === "string" ? StringPrototypeTrim(rawVersion) : void 0;
+    }
+    __name(normalizeVersion, "normalizeVersion");
+    function qualifiersToEntries(rawQualifiers) {
+      if (isObject(rawQualifiers)) {
+        const rawQualifiersObj = rawQualifiers;
+        const entriesProperty = rawQualifiersObj["entries"];
+        return typeof entriesProperty === "function" ? ReflectApply(entriesProperty, rawQualifiersObj, []) : ObjectEntries(rawQualifiers);
+      }
+      return typeof rawQualifiers === "string" ? new URLSearchParamsCtor(rawQualifiers).entries() : EMPTY_ENTRIES;
+    }
+    __name(qualifiersToEntries, "qualifiersToEntries");
+    function subpathFilter(segment) {
+      const { length } = segment;
+      if (length === 1 && StringPrototypeCharCodeAt(segment, 0) === 46) {
+        return false;
+      }
+      if (length === 2 && StringPrototypeCharCodeAt(segment, 0) === 46 && StringPrototypeCharCodeAt(segment, 1) === 46) {
+        return false;
+      }
+      return !isBlank(segment);
+    }
+    __name(subpathFilter, "subpathFilter");
+    function encodeName(name) {
+      return isNonEmptyString(name) ? StringPrototypeReplaceAll(encodeComponent(name), "%3A", ":") : "";
+    }
+    __name(encodeName, "encodeName");
+    function encodeNamespace(namespace) {
+      return isNonEmptyString(namespace) ? StringPrototypeReplaceAll(
+        StringPrototypeReplaceAll(encodeComponent(namespace), "%3A", ":"),
+        "%2F",
+        "/"
+      ) : "";
+    }
+    __name(encodeNamespace, "encodeNamespace");
+    function encodeQualifierParam(param) {
+      if (isNonEmptyString(param)) {
+        const value = prepareValueForSearchParams(param);
+        REUSED_SEARCH_PARAMS.set(REUSED_SEARCH_PARAMS_KEY, value);
+        const search = REUSED_SEARCH_PARAMS.toString();
+        return normalizeSearchParamsEncoding(
+          StringPrototypeSlice(search, REUSED_SEARCH_PARAMS_OFFSET)
+        );
+      }
+      return "";
+    }
+    __name(encodeQualifierParam, "encodeQualifierParam");
+    function encodeQualifiers(qualifiers) {
+      if (isObject(qualifiers)) {
+        const qualifiersKeys = ArrayPrototypeToSorted(ObjectKeys(qualifiers));
+        const searchParams = new URLSearchParamsCtor();
+        for (let i = 0, { length } = qualifiersKeys; i < length; i += 1) {
+          const key = qualifiersKeys[i];
+          const value = prepareValueForSearchParams(
+            qualifiers[key]
+          );
+          searchParams.set(key, value);
+        }
+        return normalizeSearchParamsEncoding(searchParams.toString());
+      }
+      return "";
+    }
+    __name(encodeQualifiers, "encodeQualifiers");
+    function encodeSubpath(subpath) {
+      return isNonEmptyString(subpath) ? StringPrototypeReplaceAll(encodeComponent(subpath), "%2F", "/") : "";
+    }
+    __name(encodeSubpath, "encodeSubpath");
+    function encodeVersion(version) {
+      return isNonEmptyString(version) ? StringPrototypeReplaceAll(encodeComponent(version), "%3A", ":") : "";
+    }
+    __name(encodeVersion, "encodeVersion");
+    function normalizeSearchParamsEncoding(encoded) {
+      return StringPrototypeReplaceAll(
+        StringPrototypeReplaceAll(encoded, "%2520", "%20"),
+        "+",
+        "%2B"
+      );
+    }
+    __name(normalizeSearchParamsEncoding, "normalizeSearchParamsEncoding");
+    function prepareValueForSearchParams(value) {
+      return StringPrototypeReplaceAll(String(value), " ", "%20");
+    }
+    __name(prepareValueForSearchParams, "prepareValueForSearchParams");
+    function createHelpersNamespaceObject(helpers, options_ = {}) {
+      const { comparator, ...defaults } = {
+        __proto__: null,
+        ...options_
+      };
+      const helperNames = ArrayPrototypeToSorted(ObjectKeys(helpers));
+      const propNames = ArrayPrototypeToSorted(
+        [
+          ...new SetCtor(
+            ArrayPrototypeFlatMap(
+              ObjectValues(helpers),
+              (helper) => ObjectKeys(helper)
+            )
+          )
+        ],
+        comparator
+      );
+      const nsObject = ObjectCreate(null);
+      for (let i = 0, { length } = propNames; i < length; i += 1) {
+        const propName = propNames[i];
+        const helpersForProp = ObjectCreate(null);
+        for (let j = 0, { length: helperNamesLength } = helperNames; j < helperNamesLength; j += 1) {
+          const helperName = helperNames[j];
+          const helperValue = helpers[helperName]?.[propName] ?? defaults[helperName];
+          if (helperValue !== void 0) {
+            helpersForProp[helperName] = helperValue;
+          }
+        }
+        nsObject[propName] = helpersForProp;
+      }
+      return nsObject;
+    }
+    __name(createHelpersNamespaceObject, "createHelpersNamespaceObject");
+    function isNullishOrEmptyString(value) {
+      return value === null || value === void 0 || typeof value === "string" && value.length === 0;
+    }
+    __name(isNullishOrEmptyString, "isNullishOrEmptyString");
+    function validateEmptyByType(type, name, value, options) {
+      const { throws = false } = typeof options === "boolean" ? { throws: options } : options ?? {};
+      if (!isNullishOrEmptyString(value)) {
+        if (throws) {
+          throw new PurlError(`${type} "${name}" component must be empty`);
+        }
+        return false;
+      }
+      return true;
+    }
+    __name(validateEmptyByType, "validateEmptyByType");
+    function validateNoInjectionByType(type, component, value, throws) {
+      if (typeof value === "string") {
+        const code = findInjectionCharCode(value);
+        if (code !== -1) {
+          if (throws) {
+            throw new PurlInjectionError(
+              type,
+              component,
+              code,
+              formatInjectionChar(code)
+            );
+          }
+          return false;
+        }
+      }
+      return true;
+    }
+    __name(validateNoInjectionByType, "validateNoInjectionByType");
+    function validateName(name, options) {
+      const opts = typeof options === "boolean" ? { throws: options } : options;
+      const { throws = false } = opts ?? {};
+      if (!validateRequired("name", name, opts) || !validateStrings("name", name, opts)) {
+        return false;
+      }
+      const MAX_NAME_LENGTH = 214;
+      if (typeof name === "string" && name.length > MAX_NAME_LENGTH) {
+        if (throws) {
+          throw new PurlError(
+            `"name" exceeds maximum length of ${MAX_NAME_LENGTH} characters`
+          );
+        }
+        return false;
+      }
+      return true;
+    }
+    __name(validateName, "validateName");
+    function validateNamespace(namespace, options) {
+      const opts = typeof options === "boolean" ? { throws: options } : options;
+      const { throws = false } = opts ?? {};
+      if (!validateStrings("namespace", namespace, opts)) {
+        return false;
+      }
+      const MAX_NAMESPACE_LENGTH = 512;
+      if (typeof namespace === "string" && namespace.length > MAX_NAMESPACE_LENGTH) {
+        if (throws) {
+          throw new PurlError(
+            `"namespace" exceeds maximum length of ${MAX_NAMESPACE_LENGTH} characters`
+          );
+        }
+        return false;
+      }
+      return true;
+    }
+    __name(validateNamespace, "validateNamespace");
+    function validateQualifierKey(key, options) {
+      const opts = typeof options === "boolean" ? { throws: options } : options;
+      const { throws = false } = opts ?? {};
+      if (key.length === 0) {
+        if (throws) {
+          throw new PurlError("qualifier key must not be empty");
+        }
+        return false;
+      }
+      const MAX_QUALIFIER_KEY_LENGTH = 256;
+      if (key.length > MAX_QUALIFIER_KEY_LENGTH) {
+        if (throws) {
+          throw new PurlError(
+            `qualifier key exceeds maximum length of ${MAX_QUALIFIER_KEY_LENGTH} characters`
+          );
+        }
+        return false;
+      }
+      if (!validateStartsWithoutNumber("qualifier", key, opts)) {
+        return false;
+      }
+      for (let i = 0, { length } = key; i < length; i += 1) {
+        const code = StringPrototypeCharCodeAt(key, i);
+        if (!// 0-9
+        (code >= 48 && code <= 57 || // A-Z
+        code >= 65 && code <= 90 || // a-z
+        code >= 97 && code <= 122 || // .
+        code === 46 || // -
+        code === 45 || code === 95)) {
+          if (throws) {
+            throw new PurlError(`qualifier "${key}" contains an illegal character`);
+          }
+          return false;
+        }
+      }
+      return true;
+    }
+    __name(validateQualifierKey, "validateQualifierKey");
+    function validateQualifiers(qualifiers, options) {
+      const opts = typeof options === "boolean" ? { throws: options } : options;
+      const { throws = false } = opts ?? {};
+      if (qualifiers === null || qualifiers === void 0) {
+        return true;
+      }
+      if (typeof qualifiers !== "object" || ArrayIsArray(qualifiers)) {
+        if (throws) {
+          throw new PurlError('"qualifiers" must be a plain object');
+        }
+        return false;
+      }
+      const qualifiersObj = qualifiers;
+      const keysProperty = qualifiersObj["keys"];
+      const keysIterable = (
+        // URLSearchParams instances have a "keys" method that returns an iterator
+        typeof keysProperty === "function" ? ReflectApply(keysProperty, qualifiersObj, []) : ObjectKeys(qualifiers)
+      );
+      for (const key of keysIterable) {
+        if (!validateQualifierKey(key, opts)) {
+          return false;
+        }
+        const value = typeof qualifiersObj[key] === "string" ? qualifiersObj[key] : void 0;
+        if (value !== void 0) {
+          const MAX_QUALIFIER_VALUE_LENGTH = 65536;
+          if (value.length > MAX_QUALIFIER_VALUE_LENGTH) {
+            if (throws) {
+              throw new PurlError(
+                `qualifier "${key}" value exceeds maximum length of ${MAX_QUALIFIER_VALUE_LENGTH} characters`
+              );
+            }
+            return false;
+          }
+          const code = findCommandInjectionCharCode(value);
+          if (code !== -1) {
+            if (throws) {
+              throw new PurlInjectionError(
+                "purl",
+                `qualifier "${key}"`,
+                code,
+                formatInjectionChar(code)
+              );
+            }
+            return false;
+          }
+        }
+      }
+      return true;
+    }
+    __name(validateQualifiers, "validateQualifiers");
+    function validateRequired(name, value, options) {
+      const { throws = false } = typeof options === "boolean" ? { throws: options } : options ?? {};
+      if (isNullishOrEmptyString(value)) {
+        if (throws) {
+          throw new PurlError(`"${name}" is a required component`);
+        }
+        return false;
+      }
+      return true;
+    }
+    __name(validateRequired, "validateRequired");
+    function validateRequiredByType(type, name, value, options) {
+      const { throws = false } = typeof options === "boolean" ? { throws: options } : options ?? {};
+      if (isNullishOrEmptyString(value)) {
+        if (throws) {
+          throw new PurlError(`${type} requires a "${name}" component`);
+        }
+        return false;
+      }
+      return true;
+    }
+    __name(validateRequiredByType, "validateRequiredByType");
+    function validateStartsWithoutNumber(name, value, options) {
+      const { throws = false } = typeof options === "boolean" ? { throws: options } : options ?? {};
+      if (isNonEmptyString(value)) {
+        const code = StringPrototypeCharCodeAt(value, 0);
+        if (code >= 48 && code <= 57) {
+          if (throws) {
+            throw new PurlError(`${name} "${value}" cannot start with a number`);
+          }
+          return false;
+        }
+      }
+      return true;
+    }
+    __name(validateStartsWithoutNumber, "validateStartsWithoutNumber");
+    function validateStrings(name, value, options) {
+      const { throws = false } = typeof options === "boolean" ? { throws: options } : options ?? {};
+      if (value === null || value === void 0) {
+        return true;
+      }
+      if (typeof value !== "string") {
+        if (throws) {
+          throw new PurlError(`"${name}" must be a string`);
+        }
+        return false;
+      }
+      if (StringPrototypeIncludes(value, "\0")) {
+        if (throws) {
+          throw new PurlError(`"${name}" must not contain null bytes`);
+        }
+        return false;
+      }
+      return true;
+    }
+    __name(validateStrings, "validateStrings");
+    function validateSubpath(subpath, options) {
+      const opts = typeof options === "boolean" ? { throws: options } : options;
+      const { throws = false } = opts ?? {};
+      if (!validateStrings("subpath", subpath, opts)) {
+        return false;
+      }
+      if (typeof subpath === "string") {
+        const code = findCommandInjectionCharCode(subpath);
+        if (code !== -1) {
+          if (throws) {
+            throw new PurlInjectionError(
+              "purl",
+              "subpath",
+              code,
+              formatInjectionChar(code)
+            );
+          }
+          return false;
+        }
+      }
+      return true;
+    }
+    __name(validateSubpath, "validateSubpath");
+    function validateType(type, options) {
+      const opts = typeof options === "boolean" ? { throws: options } : options;
+      const { throws = false } = opts ?? {};
+      if (!validateRequired("type", type, opts) || !validateStrings("type", type, opts) || !validateStartsWithoutNumber("type", type, opts)) {
+        return false;
+      }
+      for (let i = 0, { length } = type; i < length; i += 1) {
+        const code = StringPrototypeCharCodeAt(type, i);
+        if (!// 0-9
+        (code >= 48 && code <= 57 || // A-Z
+        code >= 65 && code <= 90 || // a-z
+        code >= 97 && code <= 122 || // .
+        code === 46 || code === 45)) {
+          if (throws) {
+            throw new PurlError(`type "${type}" contains an illegal character`);
+          }
+          return false;
+        }
+      }
+      return true;
+    }
+    __name(validateType, "validateType");
+    function validateVersion(version, options) {
+      const opts = typeof options === "boolean" ? { throws: options } : options;
+      const { throws = false } = opts ?? {};
+      if (!validateStrings("version", version, opts)) {
+        return false;
+      }
+      const MAX_VERSION_LENGTH = 256;
+      if (typeof version === "string" && version.length > MAX_VERSION_LENGTH) {
+        if (throws) {
+          throw new PurlError(
+            `"version" exceeds maximum length of ${MAX_VERSION_LENGTH} characters`
+          );
+        }
+        return false;
+      }
+      if (typeof version === "string") {
+        const code = findCommandInjectionCharCode(version);
+        if (code !== -1) {
+          if (throws) {
+            throw new PurlInjectionError(
+              "purl",
+              "version",
+              code,
+              formatInjectionChar(code)
+            );
+          }
+          return false;
+        }
+      }
+      return true;
+    }
+    __name(validateVersion, "validateVersion");
+    var componentSortOrderLookup = {
+      __proto__: null,
+      type: 0,
+      namespace: 1,
+      name: 2,
+      version: 3,
+      qualifiers: 4,
+      qualifierKey: 5,
+      qualifierValue: 6,
+      subpath: 7
+    };
+    function componentComparator(compA, compB) {
+      return componentSortOrder(compA) - componentSortOrder(compB);
+    }
+    __name(componentComparator, "componentComparator");
+    function componentSortOrder(comp) {
+      return componentSortOrderLookup[comp] ?? // Unknown components sort after all known ones
+      8;
+    }
+    __name(componentSortOrder, "componentSortOrder");
+    function PurlComponentEncoder(comp) {
+      return isNonEmptyString(comp) ? encodeComponent(comp) : "";
+    }
+    __name(PurlComponentEncoder, "PurlComponentEncoder");
+    function PurlComponentStringNormalizer(comp) {
+      return typeof comp === "string" ? comp : void 0;
+    }
+    __name(PurlComponentStringNormalizer, "PurlComponentStringNormalizer");
+    function PurlComponentValidator(_comp, _throws) {
+      return true;
+    }
+    __name(PurlComponentValidator, "PurlComponentValidator");
+    var PurlComponent = createHelpersNamespaceObject(
+      {
+        encode: {
+          name: encodeName,
+          namespace: encodeNamespace,
+          version: encodeVersion,
+          qualifiers: encodeQualifiers,
+          qualifierKey: encodeQualifierParam,
+          qualifierValue: encodeQualifierParam,
+          subpath: encodeSubpath
+        },
+        normalize: {
+          type: normalizeType,
+          namespace: normalizeNamespace,
+          name: normalizeName,
+          version: normalizeVersion,
+          qualifiers: normalizeQualifiers,
+          subpath: normalizeSubpath
+        },
+        validate: {
+          type: validateType,
+          namespace: validateNamespace,
+          name: validateName,
+          version: validateVersion,
+          qualifierKey: validateQualifierKey,
+          qualifiers: validateQualifiers,
+          subpath: validateSubpath
+        }
+      },
+      {
+        comparator: componentComparator,
+        encode: PurlComponentEncoder,
+        normalize: PurlComponentStringNormalizer,
+        validate: PurlComponentValidator
+      }
+    );
+    var PurlQualifierNames = {
+      __proto__: null,
+      Checksum: "checksum",
+      DownloadUrl: "download_url",
+      FileName: "file_name",
+      RepositoryUrl: "repository_url",
+      VcsUrl: "vcs_url",
+      Vers: "vers"
+    };
+    function normalize(purl) {
+      lowerNamespace(purl);
+      lowerName(purl);
+      return purl;
+    }
+    __name(normalize, "normalize");
+    function normalize2(purl) {
+      lowerNamespace(purl);
+      lowerName(purl);
+      return purl;
+    }
+    __name(normalize2, "normalize2");
+    function normalize3(purl) {
+      lowerName(purl);
+      return purl;
+    }
+    __name(normalize3, "normalize3");
+    function validate(purl, throws) {
+      if (!purl.version || purl.version.length === 0) {
+        if (throws) {
+          throw new PurlError('bazel requires a "version" component');
+        }
+        return false;
+      }
+      if (!validateNoInjectionByType("bazel", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate, "validate");
+    function normalize4(purl) {
+      lowerNamespace(purl);
+      lowerName(purl);
+      return purl;
+    }
+    __name(normalize4, "normalize4");
+    function validate2(purl, throws) {
+      if (!validateNoInjectionByType("bitbucket", "namespace", purl.namespace, throws)) {
+        return false;
+      }
+      if (!validateNoInjectionByType("bitbucket", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate2, "validate2");
+    function normalize5(purl) {
+      lowerName(purl);
+      return purl;
+    }
+    __name(normalize5, "normalize5");
+    function validate3(purl, throws) {
+      if (!validateEmptyByType("cargo", "namespace", purl.namespace, {
+        throws
+      })) {
+        return false;
+      }
+      if (!validateNoInjectionByType("cargo", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate3, "validate3");
+    function validate4(purl, throws) {
+      const { name } = purl;
+      if (!validateNoInjectionByType("cocoapods", "name", name, throws)) {
+        return false;
+      }
+      if (StringPrototypeIncludes(name, "+")) {
+        if (throws) {
+          throw new PurlError(
+            'cocoapods "name" component cannot contain a plus (+) character'
+          );
+        }
+        return false;
+      }
+      if (StringPrototypeCharCodeAt(name, 0) === 46) {
+        if (throws) {
+          throw new PurlError(
+            'cocoapods "name" component cannot begin with a period'
+          );
+        }
+        return false;
+      }
+      return true;
+    }
+    __name(validate4, "validate4");
+    function normalize6(purl) {
+      lowerNamespace(purl);
+      lowerName(purl);
+      return purl;
+    }
+    __name(normalize6, "normalize6");
+    function validate5(purl, throws) {
+      if (isNullishOrEmptyString(purl.namespace)) {
+        if (purl.qualifiers?.["channel"]) {
+          if (throws) {
+            throw new PurlError(
+              'conan requires a "namespace" component when a "channel" qualifier is present'
+            );
+          }
+          return false;
+        }
+      } else if (isNullishOrEmptyString(purl.qualifiers)) {
+        if (throws) {
+          throw new PurlError(
+            'conan requires a "qualifiers" component when a namespace is present'
+          );
+        }
+        return false;
+      }
+      if (!validateNoInjectionByType("conan", "namespace", purl.namespace, throws)) {
+        return false;
+      }
+      if (!validateNoInjectionByType("conan", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate5, "validate5");
+    function normalize7(purl) {
+      lowerName(purl);
+      return purl;
+    }
+    __name(normalize7, "normalize7");
+    function validate6(purl, throws) {
+      if (!validateEmptyByType("conda", "namespace", purl.namespace, {
+        throws
+      })) {
+        return false;
+      }
+      if (!validateNoInjectionByType("conda", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate6, "validate6");
+    function validate7(purl, throws) {
+      const { namespace } = purl;
+      if (namespace && namespace !== StringPrototypeToUpperCase(namespace)) {
+        if (throws) {
+          throw new PurlError('cpan "namespace" component must be UPPERCASE');
+        }
+        return false;
+      }
+      if (!validateNoInjectionByType("cpan", "namespace", namespace, throws)) {
+        return false;
+      }
+      if (!validateNoInjectionByType("cpan", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate7, "validate7");
+    function validate8(purl, throws) {
+      if (!validateRequiredByType("cran", "version", purl.version, {
+        throws
+      })) {
+        return false;
+      }
+      if (!validateNoInjectionByType("cran", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate8, "validate8");
+    function normalize8(purl) {
+      lowerNamespace(purl);
+      lowerName(purl);
+      return purl;
+    }
+    __name(normalize8, "normalize8");
+    function normalize9(purl) {
+      lowerName(purl);
+      return purl;
+    }
+    __name(normalize9, "normalize9");
+    function validate9(purl, throws) {
+      if (!validateNoInjectionByType("docker", "namespace", purl.namespace, throws)) {
+        return false;
+      }
+      if (!validateNoInjectionByType("docker", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate9, "validate9");
+    function validate10(purl, throws) {
+      if (!validateEmptyByType("gem", "namespace", purl.namespace, {
+        throws
+      })) {
+        return false;
+      }
+      if (!validateNoInjectionByType("gem", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate10, "validate10");
+    function normalize10(purl) {
+      return purl;
+    }
+    __name(normalize10, "normalize10");
+    function normalize11(purl) {
+      lowerNamespace(purl);
+      lowerName(purl);
+      return purl;
+    }
+    __name(normalize11, "normalize11");
+    function validate11(purl, throws) {
+      if (!validateNoInjectionByType("github", "namespace", purl.namespace, throws)) {
+        return false;
+      }
+      if (!validateNoInjectionByType("github", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate11, "validate11");
+    function normalize12(purl) {
+      lowerNamespace(purl);
+      lowerName(purl);
+      return purl;
+    }
+    __name(normalize12, "normalize12");
+    function validate12(purl, throws) {
+      if (!validateNoInjectionByType("gitlab", "namespace", purl.namespace, throws)) {
+        return false;
+      }
+      if (!validateNoInjectionByType("gitlab", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate12, "validate12");
+    function validate13(purl, throws) {
+      if (!validateNoInjectionByType("golang", "namespace", purl.namespace, throws)) {
+        return false;
+      }
+      if (!validateNoInjectionByType("golang", "name", purl.name, throws)) {
+        return false;
+      }
+      const { version } = purl;
+      const length = typeof version === "string" ? version.length : 0;
+      if (length && StringPrototypeCharCodeAt(version, 0) === 118 && !isSemverString(StringPrototypeSlice(version, 1))) {
+        if (throws) {
+          throw new PurlError(
+            'golang "version" component starting with a "v" must be followed by a valid semver version'
+          );
+        }
+        return false;
+      }
+      return true;
+    }
+    __name(validate13, "validate13");
+    function normalize13(purl) {
+      lowerNamespace(purl);
+      lowerName(purl);
+      return purl;
+    }
+    __name(normalize13, "normalize13");
+    function validate14(purl, throws) {
+      if (!validateNoInjectionByType("hex", "namespace", purl.namespace, throws)) {
+        return false;
+      }
+      if (!validateNoInjectionByType("hex", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate14, "validate14");
+    function normalize14(purl) {
+      lowerVersion(purl);
+      return purl;
+    }
+    __name(normalize14, "normalize14");
+    function normalize15(purl) {
+      return purl;
+    }
+    __name(normalize15, "normalize15");
+    function validate15(purl, throws) {
+      if (!validateEmptyByType("julia", "namespace", purl.namespace, {
+        throws
+      })) {
+        return false;
+      }
+      if (!validateNoInjectionByType("julia", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate15, "validate15");
+    function normalize16(purl) {
+      lowerVersion(purl);
+      return purl;
+    }
+    __name(normalize16, "normalize16");
+    function validate16(purl, throws) {
+      if (!validateRequiredByType("maven", "namespace", purl.namespace, {
+        throws
+      })) {
+        return false;
+      }
+      if (!validateNoInjectionByType("maven", "namespace", purl.namespace, throws)) {
+        return false;
+      }
+      if (!validateNoInjectionByType("maven", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate16, "validate16");
+    function normalize17(purl) {
+      const repoUrl = purl.qualifiers?.["repository_url"];
+      if (repoUrl !== void 0 && StringPrototypeIncludes(repoUrl, "databricks")) {
+        lowerName(purl);
+      }
+      return purl;
+    }
+    __name(normalize17, "normalize17");
+    function validate17(purl, throws) {
+      if (!validateEmptyByType("mlflow", "namespace", purl.namespace, {
+        throws
+      })) {
+        return false;
+      }
+      if (!validateNoInjectionByType("mlflow", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate17, "validate17");
+    var getNpmBuiltinSet = /* @__PURE__ */ (() => {
+      let builtinSet;
+      return () => {
+        if (builtinSet === void 0) {
+          let builtinNames;
+          try {
+            builtinNames = module2.constructor?.builtinModules;
+          } catch {
+          }
+          if (!builtinNames) {
+            builtinNames = [
+              "assert",
+              "async_hooks",
+              "buffer",
+              "child_process",
+              "cluster",
+              "console",
+              "constants",
+              "crypto",
+              "dgram",
+              "diagnostics_channel",
+              "dns",
+              "domain",
+              "events",
+              "fs",
+              "http",
+              "http2",
+              "https",
+              "inspector",
+              "module",
+              "net",
+              "os",
+              "path",
+              "perf_hooks",
+              "process",
+              "punycode",
+              "querystring",
+              "readline",
+              "repl",
+              "stream",
+              "string_decoder",
+              "sys",
+              "timers",
+              "tls",
+              "trace_events",
+              "tty",
+              "url",
+              "util",
+              "v8",
+              "vm",
+              "wasi",
+              "worker_threads",
+              "zlib"
+            ];
+          }
+          builtinSet = new SetCtor(builtinNames);
+        }
+        return builtinSet;
+      };
+    })();
+    function getNpmId(purl) {
+      const { name, namespace } = purl;
+      return `${namespace && namespace.length > 0 ? `${namespace}/` : ""}${name}`;
+    }
+    __name(getNpmId, "getNpmId");
+    var getNpmLegacySet = /* @__PURE__ */ (() => {
+      let legacySet;
+      return () => {
+        if (legacySet === void 0) {
+          let fullLegacyNames;
+          try {
+            fullLegacyNames = require_legacy_names();
+          } catch {
+            fullLegacyNames = [
+              "assert",
+              "buffer",
+              "crypto",
+              "events",
+              "fs",
+              "http",
+              "os",
+              "path",
+              "url",
+              "util"
+            ];
+          }
+          legacySet = new SetCtor(fullLegacyNames);
+        }
+        return legacySet;
+      };
+    })();
+    var isNpmBuiltinName = /* @__PURE__ */ __name((id) => getNpmBuiltinSet().has(StringPrototypeToLowerCase(id)), "isNpmBuiltinName");
+    var isNpmLegacyName = /* @__PURE__ */ __name((id) => getNpmLegacySet().has(id), "isNpmLegacyName");
+    function normalize18(purl) {
+      lowerNamespace(purl);
+      if (!isNpmLegacyName(getNpmId(purl))) {
+        lowerName(purl);
+      }
+      return purl;
+    }
+    __name(normalize18, "normalize18");
+    function parseNpmSpecifier(specifier) {
+      if (typeof specifier !== "string") {
+        throw new Error("npm package specifier string is required.");
+      }
+      if (isBlank(specifier)) {
+        throw new Error("npm package specifier cannot be empty.");
+      }
+      let namespace;
+      let name;
+      let version;
+      if (StringPrototypeStartsWith(specifier, "@")) {
+        const slashIndex = StringPrototypeIndexOf(specifier, "/");
+        if (slashIndex === -1) {
+          throw new Error("Invalid scoped package specifier.");
+        }
+        const atIndex = StringPrototypeIndexOf(specifier, "@", slashIndex);
+        if (atIndex === -1) {
+          namespace = StringPrototypeSlice(specifier, 0, slashIndex);
+          name = StringPrototypeSlice(specifier, slashIndex + 1);
+        } else {
+          namespace = StringPrototypeSlice(specifier, 0, slashIndex);
+          name = StringPrototypeSlice(specifier, slashIndex + 1, atIndex);
+          version = StringPrototypeSlice(specifier, atIndex + 1);
+        }
+      } else {
+        const atIndex = StringPrototypeIndexOf(specifier, "@");
+        if (atIndex === -1) {
+          name = specifier;
+        } else {
+          name = StringPrototypeSlice(specifier, 0, atIndex);
+          version = StringPrototypeSlice(specifier, atIndex + 1);
+        }
+      }
+      if (version) {
+        version = StringPrototypeReplace(version, /^[\^~>=<]+/, "");
+        const spaceIndex = StringPrototypeIndexOf(version, " ");
+        if (spaceIndex !== -1) {
+          version = StringPrototypeSlice(version, 0, spaceIndex);
+        }
+      }
+      return { namespace, name, version };
+    }
+    __name(parseNpmSpecifier, "parseNpmSpecifier");
+    function validate18(purl, throws) {
+      const { name, namespace } = purl;
+      if (!validateNoInjectionByType("npm", "name", name, throws)) {
+        return false;
+      }
+      if (!validateNoInjectionByType("npm", "namespace", namespace, throws)) {
+        return false;
+      }
+      const hasNs = namespace && namespace.length > 0;
+      const id = getNpmId(purl);
+      const code0 = StringPrototypeCharCodeAt(id, 0);
+      const compName = hasNs ? "namespace" : "name";
+      if (code0 === 46) {
+        if (throws) {
+          throw new PurlError(
+            `npm "${compName}" component cannot start with a period`
+          );
+        }
+        return false;
+      }
+      if (code0 === 95) {
+        if (throws) {
+          throw new PurlError(
+            `npm "${compName}" component cannot start with an underscore`
+          );
+        }
+        return false;
+      }
+      if (StringPrototypeTrim(name) !== name) {
+        if (throws) {
+          throw new PurlError(
+            'npm "name" component cannot contain leading or trailing spaces'
+          );
+        }
+        return false;
+      }
+      if (encodeComponent(name) !== name) {
+        if (throws) {
+          throw new PurlError(
+            `npm "name" component can only contain URL-friendly characters`
+          );
+        }
+        return false;
+      }
+      if (hasNs) {
+        if ((namespace !== void 0 ? StringPrototypeTrim(namespace) : namespace) !== namespace) {
+          if (throws) {
+            throw new PurlError(
+              'npm "namespace" component cannot contain leading or trailing spaces'
+            );
+          }
+          return false;
+        }
+        if (code0 !== 64) {
+          if (throws) {
+            throw new PurlError(
+              `npm "namespace" component must start with an "@" character`
+            );
+          }
+          return false;
+        }
+        const namespaceWithoutAtSign = namespace !== void 0 ? StringPrototypeSlice(namespace, 1) : namespace;
+        if (encodeComponent(namespaceWithoutAtSign) !== namespaceWithoutAtSign) {
+          if (throws) {
+            throw new PurlError(
+              `npm "namespace" component can only contain URL-friendly characters`
+            );
+          }
+          return false;
+        }
+      }
+      const loweredId = StringPrototypeToLowerCase(id);
+      if (loweredId === "node_modules" || loweredId === "favicon.ico") {
+        if (throws) {
+          throw new PurlError(
+            `npm "${compName}" component of "${loweredId}" is not allowed`
+          );
+        }
+        return false;
+      }
+      if (!isNpmLegacyName(id)) {
+        if (id.length > 214) {
+          if (throws) {
+            throw new PurlError(
+              `npm "namespace" and "name" components can not collectively be more than 214 characters`
+            );
+          }
+          return false;
+        }
+        if (loweredId !== id) {
+          if (throws) {
+            throw new PurlError(
+              `npm "name" component can not contain capital letters`
+            );
+          }
+          return false;
+        }
+        if (RegExpPrototypeTest(/[~'!()*]/, name)) {
+          if (throws) {
+            throw new PurlError(
+              `npm "name" component can not contain special characters ("~'!()*")`
+            );
+          }
+          return false;
+        }
+        if (isNpmBuiltinName(id)) {
+          if (throws) {
+            throw new PurlError(
+              'npm "name" component can not be a core module name'
+            );
+          }
+          return false;
+        }
+      }
+      return true;
+    }
+    __name(validate18, "validate18");
+    function validate19(purl, throws) {
+      if (!validateEmptyByType("nuget", "namespace", purl.namespace, {
+        throws
+      })) {
+        return false;
+      }
+      if (!validateNoInjectionByType("nuget", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate19, "validate19");
+    function normalize19(purl) {
+      lowerName(purl);
+      lowerVersion(purl);
+      return purl;
+    }
+    __name(normalize19, "normalize19");
+    function validate20(purl, throws) {
+      if (!validateEmptyByType("oci", "namespace", purl.namespace, {
+        throws
+      })) {
+        return false;
+      }
+      if (!validateNoInjectionByType("oci", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate20, "validate20");
+    function validate21(purl, throws) {
+      if (!validateEmptyByType("opam", "namespace", purl.namespace, {
+        throws
+      })) {
+        return false;
+      }
+      if (!validateNoInjectionByType("opam", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate21, "validate21");
+    function normalize20(purl) {
+      lowerName(purl);
+      return purl;
+    }
+    __name(normalize20, "normalize20");
+    function validate22(purl, throws) {
+      if (!validateEmptyByType("otp", "namespace", purl.namespace, {
+        throws
+      })) {
+        return false;
+      }
+      if (!validateNoInjectionByType("otp", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate22, "validate22");
+    function normalize21(purl) {
+      lowerName(purl);
+      purl.name = replaceDashesWithUnderscores(purl.name);
+      return purl;
+    }
+    __name(normalize21, "normalize21");
+    function validate23(purl, throws) {
+      const { name } = purl;
+      for (let i = 0, { length } = name; i < length; i += 1) {
+        const code = StringPrototypeCharCodeAt(name, i);
+        if (!// 0-9
+        (code >= 48 && code <= 57 || // a-z
+        code >= 97 && code <= 122 || code === 95)) {
+          if (throws) {
+            throw new PurlError(
+              'pub "name" component may only contain [a-z0-9_] characters'
+            );
+          }
+          return false;
+        }
+      }
+      return true;
+    }
+    __name(validate23, "validate23");
+    function normalize22(purl) {
+      lowerNamespace(purl);
+      lowerName(purl);
+      lowerVersion(purl);
+      purl.name = replaceUnderscoresWithDashes(purl.name);
+      return purl;
+    }
+    __name(normalize22, "normalize22");
+    function validate24(purl, throws) {
+      if (!validateNoInjectionByType("pypi", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate24, "validate24");
+    function normalize23(purl) {
+      lowerNamespace(purl);
+      return purl;
+    }
+    __name(normalize23, "normalize23");
+    function normalize24(purl) {
+      lowerNamespace(purl);
+      return purl;
+    }
+    __name(normalize24, "normalize24");
+    function normalize25(purl) {
+      return purl;
+    }
+    __name(normalize25, "normalize25");
+    var GUID_PATTERN = ObjectFreeze(
+      /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i
+    );
+    function validate25(purl, throws) {
+      const { qualifiers } = purl;
+      const tagId = qualifiers?.["tag_id"];
+      if (!tagId) {
+        if (throws) {
+          throw new PurlError('swid requires a "tag_id" qualifier');
+        }
+        return false;
+      }
+      const tagIdStr = StringPrototypeTrim(String(tagId));
+      if (tagIdStr.length === 0) {
+        if (throws) {
+          throw new PurlError('swid "tag_id" qualifier must not be empty');
+        }
+        return false;
+      }
+      if (RegExpPrototypeTest(GUID_PATTERN, tagIdStr)) {
+        if (tagIdStr !== StringPrototypeToLowerCase(tagIdStr)) {
+          if (throws) {
+            throw new PurlError(
+              'swid "tag_id" qualifier must be lowercase when it is a GUID'
+            );
+          }
+          return false;
+        }
+      }
+      if (!validateNoInjectionByType("swid", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate25, "validate25");
+    function validate26(purl, throws) {
+      if (!validateRequiredByType("swift", "namespace", purl.namespace, {
+        throws
+      })) {
+        return false;
+      }
+      if (!validateRequiredByType("swift", "version", purl.version, { throws })) {
+        return false;
+      }
+      if (!validateNoInjectionByType("swift", "namespace", purl.namespace, throws)) {
+        return false;
+      }
+      if (!validateNoInjectionByType("swift", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate26, "validate26");
+    function normalize26(purl) {
+      return purl;
+    }
+    __name(normalize26, "normalize26");
+    function normalize27(purl) {
+      lowerNamespace(purl);
+      lowerName(purl);
+      lowerVersion(purl);
+      return purl;
+    }
+    __name(normalize27, "normalize27");
+    function validate27(purl, throws) {
+      const { name, namespace, version, qualifiers } = purl;
+      if (!validateRequiredByType("vscode-extension", "namespace", namespace, {
+        throws
+      })) {
+        return false;
+      }
+      if (!validateNoInjectionByType(
+        "vscode-extension",
+        "namespace",
+        namespace,
+        throws
+      )) {
+        return false;
+      }
+      if (!validateNoInjectionByType("vscode-extension", "name", name, throws)) {
+        return false;
+      }
+      if (typeof version === "string" && version.length > 0 && !isSemverString(version)) {
+        if (throws) {
+          throw new PurlError(
+            'vscode-extension "version" component must be a valid semver version'
+          );
+        }
+        return false;
+      }
+      if (!validateNoInjectionByType(
+        "vscode-extension",
+        "platform",
+        qualifiers?.["platform"],
+        throws
+      )) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate27, "validate27");
+    function normalize28(purl) {
+      lowerName(purl);
+      return purl;
+    }
+    __name(normalize28, "normalize28");
+    function validate28(purl, throws) {
+      if (!validateEmptyByType("yocto", "namespace", purl.namespace, {
+        throws
+      })) {
+        return false;
+      }
+      if (!validateNoInjectionByType("yocto", "name", purl.name, throws)) {
+        return false;
+      }
+      return true;
+    }
+    __name(validate28, "validate28");
+    var PurlTypNormalizer = /* @__PURE__ */ __name((purl) => purl, "PurlTypNormalizer");
+    function PurlTypeValidator(purl, throws) {
+      const type = purl.type ?? "unknown";
+      if (typeof purl.namespace === "string") {
+        const nsCode = findInjectionCharCode(purl.namespace);
+        if (nsCode !== -1) {
+          if (throws) {
+            throw new PurlInjectionError(
+              type,
+              "namespace",
+              nsCode,
+              formatInjectionChar(nsCode)
+            );
+          }
+          return false;
+        }
+      }
+      const nameCode = findInjectionCharCode(purl.name);
+      if (nameCode !== -1) {
+        if (throws) {
+          throw new PurlInjectionError(
+            type,
+            "name",
+            nameCode,
+            formatInjectionChar(nameCode)
+          );
+        }
+        return false;
+      }
+      return true;
+    }
+    __name(PurlTypeValidator, "PurlTypeValidator");
+    var PurlType = createHelpersNamespaceObject(
+      {
+        normalize: {
+          alpm: normalize,
+          apk: normalize2,
+          bazel: normalize3,
+          bitbucket: normalize4,
+          bitnami: normalize5,
+          composer: normalize6,
+          conda: normalize7,
+          deb: normalize8,
+          docker: normalize9,
+          generic: normalize10,
+          github: normalize11,
+          gitlab: normalize12,
+          hex: normalize13,
+          huggingface: normalize14,
+          julia: normalize15,
+          luarocks: normalize16,
+          mlflow: normalize17,
+          npm: normalize18,
+          oci: normalize19,
+          otp: normalize20,
+          pub: normalize21,
+          pypi: normalize22,
+          qpkg: normalize23,
+          rpm: normalize24,
+          socket: normalize25,
+          unknown: normalize26,
+          "vscode-extension": normalize27,
+          yocto: normalize28
+        },
+        validate: {
+          bazel: validate,
+          bitbucket: validate2,
+          cargo: validate3,
+          cocoapods: validate4,
+          conda: validate6,
+          conan: validate5,
+          cpan: validate7,
+          cran: validate8,
+          docker: validate9,
+          gem: validate10,
+          github: validate11,
+          gitlab: validate12,
+          golang: validate13,
+          hex: validate14,
+          julia: validate15,
+          maven: validate16,
+          mlflow: validate17,
+          npm: validate18,
+          nuget: validate19,
+          oci: validate20,
+          opam: validate21,
+          otp: validate22,
+          pub: validate23,
+          pypi: validate24,
+          swift: validate26,
+          swid: validate25,
+          "vscode-extension": validate27,
+          yocto: validate28
+        }
+      },
+      {
+        normalize: PurlTypNormalizer,
+        validate: PurlTypeValidator
+      }
+    );
+    var Ok = class _Ok {
+      static {
+        __name(this, "_Ok");
+      }
+      kind = "ok";
+      value;
+      constructor(value) {
+        this.value = value;
+      }
+      /**
+       * Chain another result-returning operation.
+       */
+      andThen(fn) {
+        return fn(this.value);
+      }
+      /**
+       * Check if this result is an error.
+       */
+      isErr() {
+        return false;
+      }
+      /**
+       * Check if this result is successful.
+       */
+      isOk() {
+        return true;
+      }
+      /**
+       * Transform the success value.
+       */
+      map(fn) {
+        return new _Ok(fn(this.value));
+      }
+      /**
+       * Transform the error (no-op for Ok).
+       */
+      mapErr(_fn) {
+        return this;
+      }
+      /**
+       * Return this result or the other if error (no-op for Ok).
+       */
+      orElse(_fn) {
+        return this;
+      }
+      /**
+       * Get the success value or throw if error.
+       */
+      unwrap() {
+        return this.value;
+      }
+      /**
+       * Get the success value or return default if error.
+       */
+      unwrapOr(_defaultValue) {
+        return this.value;
+      }
+      /**
+       * Get the success value or compute from error if error.
+       */
+      unwrapOrElse(_fn) {
+        return this.value;
+      }
+    };
+    var Err = class _Err {
+      static {
+        __name(this, "_Err");
+      }
+      kind = "err";
+      error;
+      constructor(error) {
+        this.error = error;
+      }
+      /**
+       * Chain another result-returning operation (no-op for Err).
+       */
+      andThen(_fn) {
+        return this;
+      }
+      /**
+       * Check if this result is an error.
+       */
+      isErr() {
+        return true;
+      }
+      /**
+       * Check if this result is successful.
+       */
+      isOk() {
+        return false;
+      }
+      /**
+       * Transform the success value (no-op for Err).
+       */
+      map(_fn) {
+        return this;
+      }
+      /**
+       * Transform the error.
+       */
+      mapErr(fn) {
+        return new _Err(fn(this.error));
+      }
+      /**
+       * Return this result or the other if error.
+       */
+      orElse(fn) {
+        return fn(this.error);
+      }
+      /**
+       * Get the success value or throw if error.
+       */
+      unwrap() {
+        if (this.error instanceof Error) {
+          throw this.error;
+        }
+        throw new Error(String(this.error));
+      }
+      /**
+       * Get the success value or return default if error.
+       */
+      unwrapOr(defaultValue) {
+        return defaultValue;
+      }
+      /**
+       * Get the success value or compute from error if error.
+       */
+      unwrapOrElse(fn) {
+        return fn(this.error);
+      }
+    };
+    function ok(value) {
+      return new Ok(value);
+    }
+    __name(ok, "ok");
+    function err(error) {
+      return new Err(error);
+    }
+    __name(err, "err");
+    var ResultUtils = {
+      /**
+       * Convert all Results to Ok values or return first error.
+       */
+      all(results) {
+        const values = [];
+        for (let i = 0; i < results.length; i++) {
+          const result = results[i];
+          if (result.isErr()) {
+            return result;
+          }
+          ArrayPrototypePush(values, result.value);
+        }
+        return ok(values);
+      },
+      /**
+       * Return the first Ok result or the last error.
+       * Returns an error result if the input array is empty.
+       */
+      any(results) {
+        let lastError = err(
+          new Error("No results provided")
+        );
+        for (const result of results) {
+          if (result.isOk()) {
+            return result;
+          }
+          lastError = result;
+        }
+        return lastError;
+      },
+      /**
+       * Create an error result.
+       */
+      err,
+      /**
+       * Wrap a function that might throw into a Result.
+       */
+      from(fn) {
+        try {
+          return ok(fn());
+        } catch (e) {
+          return err(e instanceof Error ? e : new Error(String(e)));
+        }
+      },
+      /**
+       * Create a successful result.
+       */
+      ok
+    };
+    function stringifySpec(purl) {
+      const {
+        name,
+        namespace,
+        qualifiers,
+        subpath,
+        version
+      } = purl;
+      let specStr = "";
+      if (isNonEmptyString(namespace)) {
+        specStr = `${encodeNamespace(namespace)}/`;
+      }
+      specStr = `${specStr}${encodeName(name)}`;
+      if (isNonEmptyString(version)) {
+        specStr = `${specStr}@${encodeVersion(version)}`;
+      }
+      if (qualifiers) {
+        specStr = `${specStr}?${encodeQualifiers(qualifiers)}`;
+      }
+      if (isNonEmptyString(subpath)) {
+        specStr = `${specStr}#${encodeSubpath(subpath)}`;
+      }
+      return specStr;
+    }
+    __name(stringifySpec, "stringifySpec");
+    function stringify(purl) {
+      const type = isNonEmptyString(purl.type) ? encodeComponent(purl.type) : "";
+      return `pkg:${type}/${stringifySpec(purl)}`;
+    }
+    __name(stringify, "stringify");
+    var _PackageURL2;
+    function _registerPackageURLForUrlConverter(ctor) {
+      _PackageURL2 = ctor;
+    }
+    __name(_registerPackageURLForUrlConverter, "_registerPackageURLForUrlConverter");
+    function filterSegments(pathname) {
+      return ArrayPrototypeFilter(
+        StringPrototypeSplit(pathname, "/"),
+        (s) => s.length > 0
+      );
+    }
+    __name(filterSegments, "filterSegments");
+    function tryCreatePurl(type, namespace, name, version) {
+      if (!_PackageURL2) {
+        return void 0;
+      }
+      try {
+        return new _PackageURL2(type, namespace, name, version, void 0, void 0);
+      } catch {
+        return void 0;
+      }
+    }
+    __name(tryCreatePurl, "tryCreatePurl");
+    function parseNpmRegistry(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length === 0) {
+        return void 0;
+      }
+      let namespace;
+      let name;
+      let version;
+      if (segments[0] && StringPrototypeStartsWith(segments[0], "@")) {
+        namespace = segments[0];
+        name = segments[1];
+        if (!name) {
+          return void 0;
+        }
+        if (segments[2] === "-" && segments[3]) {
+          const tgz = segments[3];
+          if (StringPrototypeEndsWith(tgz, ".tgz")) {
+            const withoutExt = StringPrototypeSlice(tgz, 0, -4);
+            const prefix = `${name}-`;
+            if (StringPrototypeStartsWith(withoutExt, prefix)) {
+              version = StringPrototypeSlice(withoutExt, prefix.length);
+            }
+          }
+        } else if (segments[2]) {
+          version = segments[2];
+        }
+      } else {
+        name = segments[0];
+        if (!name) {
+          return void 0;
+        }
+        if (segments[1] === "-" && segments[2]) {
+          const tgz = segments[2];
+          if (StringPrototypeEndsWith(tgz, ".tgz")) {
+            const withoutExt = StringPrototypeSlice(tgz, 0, -4);
+            const prefix = `${name}-`;
+            if (StringPrototypeStartsWith(withoutExt, prefix)) {
+              version = StringPrototypeSlice(withoutExt, prefix.length);
+            }
+          }
+        } else if (segments[1]) {
+          version = segments[1];
+        }
+      }
+      return tryCreatePurl("npm", namespace, name, version);
+    }
+    __name(parseNpmRegistry, "parseNpmRegistry");
+    function parseNpmWebsite(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length === 0 || segments[0] !== "package") {
+        return void 0;
+      }
+      let namespace;
+      let name;
+      let version;
+      if (segments[1] && StringPrototypeStartsWith(segments[1], "@")) {
+        namespace = segments[1];
+        name = segments[2];
+        if (!name) {
+          return void 0;
+        }
+        if (segments[3] === "v" && segments[4]) {
+          version = segments[4];
+        }
+      } else {
+        name = segments[1];
+        if (!name) {
+          return void 0;
+        }
+        if (segments[2] === "v" && segments[3]) {
+          version = segments[3];
+        }
+      }
+      return tryCreatePurl("npm", namespace, name, version);
+    }
+    __name(parseNpmWebsite, "parseNpmWebsite");
+    function parsePypi(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length < 2 || segments[0] !== "project") {
+        return void 0;
+      }
+      const name = segments[1];
+      if (!name) {
+        return void 0;
+      }
+      const version = segments[2];
+      return tryCreatePurl("pypi", void 0, name, version);
+    }
+    __name(parsePypi, "parsePypi");
+    function parseMaven(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length < 4 || segments[0] !== "maven2") {
+        return void 0;
+      }
+      const parts = ArrayPrototypeSlice(segments, 1);
+      if (parts.length < 3) {
+        return void 0;
+      }
+      const version = parts[parts.length - 1];
+      const name = parts[parts.length - 2];
+      const groupParts = ArrayPrototypeSlice(parts, 0, -2);
+      const namespace = ArrayPrototypeJoin(groupParts, ".");
+      if (!namespace || !name) {
+        return void 0;
+      }
+      return tryCreatePurl("maven", namespace, name, version);
+    }
+    __name(parseMaven, "parseMaven");
+    function parseGem(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length < 2 || segments[0] !== "gems") {
+        return void 0;
+      }
+      const name = segments[1];
+      if (!name) {
+        return void 0;
+      }
+      let version;
+      if (segments[2] === "versions" && segments[3]) {
+        version = segments[3];
+      }
+      return tryCreatePurl("gem", void 0, name, version);
+    }
+    __name(parseGem, "parseGem");
+    function parseCargo(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length < 2) {
+        return void 0;
+      }
+      if (segments[0] === "api" && segments[1] === "v1" && segments[2] === "crates" && segments[3]) {
+        const name2 = segments[3];
+        const version2 = segments[4];
+        return tryCreatePurl("cargo", void 0, name2, version2);
+      }
+      if (segments[0] !== "crates") {
+        return void 0;
+      }
+      const name = segments[1];
+      if (!name) {
+        return void 0;
+      }
+      const version = segments[2];
+      return tryCreatePurl("cargo", void 0, name, version);
+    }
+    __name(parseCargo, "parseCargo");
+    function parseNuget(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length < 2) {
+        return void 0;
+      }
+      if (url.hostname === "api.nuget.org") {
+        if (segments[0] !== "v3-flatcontainer" || !segments[1]) {
+          return void 0;
+        }
+        const name2 = segments[1];
+        const version2 = segments[2];
+        return tryCreatePurl("nuget", void 0, name2, version2);
+      }
+      if (segments[0] !== "packages") {
+        return void 0;
+      }
+      const name = segments[1];
+      if (!name) {
+        return void 0;
+      }
+      const version = segments[2];
+      return tryCreatePurl("nuget", void 0, name, version);
+    }
+    __name(parseNuget, "parseNuget");
+    function parseGitHub(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length < 2) {
+        return void 0;
+      }
+      const namespace = segments[0];
+      const name = segments[1];
+      let version;
+      if (segments[2] === "tree" && segments[3]) {
+        version = segments[3];
+      } else if (segments[2] === "commit" && segments[3]) {
+        version = segments[3];
+      } else if (segments[2] === "releases" && segments[3] === "tag" && segments[4]) {
+        version = segments[4];
+      }
+      return tryCreatePurl("github", namespace, name, version);
+    }
+    __name(parseGitHub, "parseGitHub");
+    function parseGolang(url) {
+      let path = StringPrototypeSlice(url.pathname, 1);
+      if (!path) {
+        return void 0;
+      }
+      let version;
+      const atIndex = StringPrototypeLastIndexOf(path, "@");
+      if (atIndex !== -1) {
+        version = StringPrototypeSlice(path, atIndex + 1);
+        path = StringPrototypeSlice(path, 0, atIndex);
+      }
+      const lastSlash = StringPrototypeLastIndexOf(path, "/");
+      if (lastSlash === -1) {
+        return void 0;
+      }
+      const namespace = StringPrototypeSlice(path, 0, lastSlash);
+      const name = StringPrototypeSlice(path, lastSlash + 1);
+      if (!namespace || !name) {
+        return void 0;
+      }
+      return tryCreatePurl("golang", namespace, name, version);
+    }
+    __name(parseGolang, "parseGolang");
+    function parseGitlab(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length < 2) {
+        return void 0;
+      }
+      const namespace = segments[0];
+      const name = segments[1];
+      let version;
+      if (segments[2] === "-") {
+        if (segments[3] === "tree" && segments[4]) {
+          version = segments[4];
+        } else if (segments[3] === "commit" && segments[4]) {
+          version = segments[4];
+        } else if (segments[3] === "tags" && segments[4]) {
+          version = segments[4];
+        }
+      }
+      return tryCreatePurl("gitlab", namespace, name, version);
+    }
+    __name(parseGitlab, "parseGitlab");
+    function parseBitbucket(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length < 2) {
+        return void 0;
+      }
+      const namespace = segments[0];
+      const name = segments[1];
+      let version;
+      if (segments[2] === "commits" && segments[3]) {
+        version = segments[3];
+      } else if (segments[2] === "src" && segments[3]) {
+        version = segments[3];
+      }
+      return tryCreatePurl("bitbucket", namespace, name, version);
+    }
+    __name(parseBitbucket, "parseBitbucket");
+    function parseComposer(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length < 3 || segments[0] !== "packages") {
+        return void 0;
+      }
+      const namespace = segments[1];
+      const name = segments[2];
+      return tryCreatePurl("composer", namespace, name, void 0);
+    }
+    __name(parseComposer, "parseComposer");
+    function parseHex(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length < 2 || segments[0] !== "packages") {
+        return void 0;
+      }
+      const name = segments[1];
+      const version = segments[2];
+      return tryCreatePurl("hex", void 0, name, version);
+    }
+    __name(parseHex, "parseHex");
+    function parsePub(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length < 2 || segments[0] !== "packages") {
+        return void 0;
+      }
+      const name = segments[1];
+      let version;
+      if (segments[2] === "versions" && segments[3]) {
+        version = segments[3];
+      }
+      return tryCreatePurl("pub", void 0, name, version);
+    }
+    __name(parsePub, "parsePub");
+    function parseDocker(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length < 2) {
+        return void 0;
+      }
+      if (segments[0] === "_" && segments[1]) {
+        return tryCreatePurl("docker", "library", segments[1], void 0);
+      }
+      if (segments[0] === "r" && segments[1] && segments[2]) {
+        return tryCreatePurl("docker", segments[1], segments[2], void 0);
+      }
+      return void 0;
+    }
+    __name(parseDocker, "parseDocker");
+    function parseCocoapods(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length < 2 || segments[0] !== "pods") {
+        return void 0;
+      }
+      return tryCreatePurl("cocoapods", void 0, segments[1], void 0);
+    }
+    __name(parseCocoapods, "parseCocoapods");
+    function parseHackage(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length < 2 || segments[0] !== "package") {
+        return void 0;
+      }
+      const raw = segments[1];
+      let splitIndex = -1;
+      for (let i = raw.length - 1; i >= 0; i -= 1) {
+        if (StringPrototypeCharCodeAt(raw, i) === 45) {
+          const next = StringPrototypeCharCodeAt(raw, i + 1);
+          if (next >= 48 && next <= 57) {
+            splitIndex = i;
+            break;
+          }
+        }
+      }
+      if (splitIndex === -1) {
+        return tryCreatePurl("hackage", void 0, raw, void 0);
+      }
+      const name = StringPrototypeSlice(raw, 0, splitIndex);
+      const version = StringPrototypeSlice(raw, splitIndex + 1);
+      return tryCreatePurl("hackage", void 0, name, version);
+    }
+    __name(parseHackage, "parseHackage");
+    function parseCran(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length >= 3 && segments[0] === "web" && segments[1] === "packages") {
+        return tryCreatePurl("cran", void 0, segments[2], void 0);
+      }
+      return void 0;
+    }
+    __name(parseCran, "parseCran");
+    function parseConda(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length < 2) {
+        return void 0;
+      }
+      const name = segments[1];
+      const version = segments[2];
+      return tryCreatePurl("conda", void 0, name, version);
+    }
+    __name(parseConda, "parseConda");
+    function parseCpan(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length < 2) {
+        return void 0;
+      }
+      if (segments[0] === "pod" || segments[0] === "dist") {
+        const name = ArrayPrototypeJoin(ArrayPrototypeSlice(segments, 1), "::");
+        return tryCreatePurl("cpan", void 0, name, void 0);
+      }
+      return void 0;
+    }
+    __name(parseCpan, "parseCpan");
+    var HUGGINGFACE_RESERVED = ObjectFreeze(
+      new SetCtor([
+        "docs",
+        "spaces",
+        "datasets",
+        "tasks",
+        "blog",
+        "pricing",
+        "join",
+        "login",
+        "settings",
+        "api"
+      ])
+    );
+    function parseHuggingface(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length < 2) {
+        return void 0;
+      }
+      if (HUGGINGFACE_RESERVED.has(segments[0])) {
+        return void 0;
+      }
+      const namespace = segments[0];
+      const name = segments[1];
+      let version;
+      if (segments[2] === "tree" && segments[3]) {
+        version = segments[3];
+      } else if (segments[2] === "commit" && segments[3]) {
+        version = segments[3];
+      }
+      return tryCreatePurl("huggingface", namespace, name, version);
+    }
+    __name(parseHuggingface, "parseHuggingface");
+    function parseLuarocks(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length < 3 || segments[0] !== "modules") {
+        return void 0;
+      }
+      const namespace = segments[1];
+      const name = segments[2];
+      const version = segments[3];
+      return tryCreatePurl("luarocks", namespace, name, version);
+    }
+    __name(parseLuarocks, "parseLuarocks");
+    function parseSwift(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length < 2) {
+        return void 0;
+      }
+      return tryCreatePurl("swift", segments[0], segments[1], void 0);
+    }
+    __name(parseSwift, "parseSwift");
+    function parseVscodeMarketplace(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length < 1 || segments[0] !== "items") {
+        return void 0;
+      }
+      const itemName = url.searchParams.get("itemName");
+      if (!itemName) {
+        return void 0;
+      }
+      const dotIndex = StringPrototypeIndexOf(itemName, ".");
+      if (dotIndex === -1 || dotIndex === 0 || dotIndex === itemName.length - 1) {
+        return void 0;
+      }
+      const namespace = StringPrototypeSlice(itemName, 0, dotIndex);
+      const name = StringPrototypeSlice(itemName, dotIndex + 1);
+      return tryCreatePurl("vscode-extension", namespace, name, void 0);
+    }
+    __name(parseVscodeMarketplace, "parseVscodeMarketplace");
+    function parseOpenVsx(url) {
+      const segments = filterSegments(url.pathname);
+      if (segments.length < 3 || segments[0] !== "extension") {
+        return void 0;
+      }
+      const namespace = segments[1];
+      const name = segments[2];
+      const version = segments[3];
+      return tryCreatePurl("vscode-extension", namespace, name, version);
+    }
+    __name(parseOpenVsx, "parseOpenVsx");
+    var FROM_URL_PARSERS = ObjectFreeze(
+      new MapCtor([
+        // Package registries
+        ["registry.npmjs.org", parseNpmRegistry],
+        ["www.npmjs.com", parseNpmWebsite],
+        ["pypi.org", parsePypi],
+        ["repo1.maven.org", parseMaven],
+        ["central.maven.org", parseMaven],
+        ["rubygems.org", parseGem],
+        ["crates.io", parseCargo],
+        ["www.nuget.org", parseNuget],
+        ["api.nuget.org", parseNuget],
+        ["pkg.go.dev", parseGolang],
+        ["hex.pm", parseHex],
+        ["pub.dev", parsePub],
+        ["packagist.org", parseComposer],
+        ["hub.docker.com", parseDocker],
+        ["cocoapods.org", parseCocoapods],
+        ["hackage.haskell.org", parseHackage],
+        ["cran.r-project.org", parseCran],
+        ["anaconda.org", parseConda],
+        ["metacpan.org", parseCpan],
+        ["luarocks.org", parseLuarocks],
+        ["swiftpackageindex.com", parseSwift],
+        ["huggingface.co", parseHuggingface],
+        // VS Code extension marketplaces
+        ["marketplace.visualstudio.com", parseVscodeMarketplace],
+        ["open-vsx.org", parseOpenVsx],
+        // VCS hosts
+        ["github.com", parseGitHub],
+        ["gitlab.com", parseGitlab],
+        ["bitbucket.org", parseBitbucket]
+      ])
+    );
+    var DOWNLOAD_URL_TYPES = ObjectFreeze(
+      new SetCtor([
+        "cargo",
+        "composer",
+        "conda",
+        "gem",
+        "golang",
+        "hex",
+        "maven",
+        "npm",
+        "nuget",
+        "pub",
+        "pypi"
+      ])
+    );
+    var REPOSITORY_URL_TYPES = ObjectFreeze(
+      new SetCtor([
+        "bioconductor",
+        "bitbucket",
+        "cargo",
+        "chrome",
+        "clojars",
+        "cocoapods",
+        "composer",
+        "conan",
+        "conda",
+        "cpan",
+        "deno",
+        "docker",
+        "elm",
+        "gem",
+        "github",
+        "gitlab",
+        "golang",
+        "hackage",
+        "hex",
+        "homebrew",
+        "huggingface",
+        "luarocks",
+        "maven",
+        "npm",
+        "nuget",
+        "pub",
+        "pypi",
+        "swift",
+        "vscode"
+      ])
+    );
+    var UrlConverter = class _UrlConverter {
+      static {
+        __name(this, "_UrlConverter");
+      }
+      /**
+       * Convert a URL string to a PackageURL if the URL is recognized.
+       *
+       * Dispatches to type-specific parsers based on the URL hostname.
+       * Returns undefined for unrecognized hosts, invalid URLs, or URLs
+       * without enough path information to construct a valid PackageURL.
+       *
+       * @example
+       * ```typescript
+       * UrlConverter.fromUrl('https://www.npmjs.com/package/lodash')
+       * // -> PackageURL for pkg:npm/lodash
+       *
+       * UrlConverter.fromUrl('https://github.com/lodash/lodash')
+       * // -> PackageURL for pkg:github/lodash/lodash
+       * ```
+       */
+      static fromUrl(urlStr) {
+        let url;
+        try {
+          url = new URLCtor(urlStr);
+        } catch {
+          return void 0;
+        }
+        const parser = FROM_URL_PARSERS.get(url.hostname);
+        if (!parser) {
+          return void 0;
+        }
+        return parser(url);
+      }
+      /**
+       * Check if a URL string is recognized for conversion to a PackageURL.
+       *
+       * Returns true if the URL's hostname has a registered parser,
+       * false for invalid URLs or unrecognized hosts.
+       */
+      static supportsFromUrl(urlStr) {
+        let url;
+        try {
+          url = new URLCtor(urlStr);
+        } catch {
+          return false;
+        }
+        return FROM_URL_PARSERS.has(url.hostname);
+      }
+      /**
+       * Get all available URLs for a PackageURL.
+       *
+       * This convenience method returns both repository and download URLs
+       * in a single call, useful when you need to check all URL options.
+       */
+      static getAllUrls(purl) {
+        return {
+          download: _UrlConverter.toDownloadUrl(purl),
+          repository: _UrlConverter.toRepositoryUrl(purl)
+        };
+      }
+      /**
+       * Check if a PackageURL type supports download URL conversion.
+       *
+       * This method checks if the given package type has download URL
+       * conversion logic implemented.
+       */
+      static supportsDownloadUrl(type) {
+        return DOWNLOAD_URL_TYPES.has(type);
+      }
+      /**
+       * Check if a PackageURL type supports repository URL conversion.
+       *
+       * This method checks if the given package type has repository URL
+       * conversion logic implemented.
+       */
+      static supportsRepositoryUrl(type) {
+        return REPOSITORY_URL_TYPES.has(type);
+      }
+      /**
+       * Convert a PackageURL to a download URL if possible.
+       *
+       * This method attempts to generate a download URL where the package's
+       * artifact (binary, archive, etc.) can be obtained. Requires a version
+       * to be present in the PackageURL.
+       */
+      static toDownloadUrl(purl) {
+        const { name, namespace, type, version } = purl;
+        if (!version) {
+          return void 0;
+        }
+        switch (type) {
+          case "npm": {
+            const npmName = namespace ? `${namespace}/${name}` : name;
+            return {
+              type: "tarball",
+              url: `https://registry.npmjs.org/${npmName}/-/${name}-${version}.tgz`
+            };
+          }
+          case "pypi":
+            return {
+              type: "wheel",
+              url: `https://pypi.org/simple/${name}/`
+            };
+          case "maven": {
+            if (!namespace) {
+              return void 0;
+            }
+            const groupPath = StringPrototypeReplace(namespace, /\./g, "/");
+            return {
+              type: "jar",
+              url: `https://repo1.maven.org/maven2/${groupPath}/${name}/${version}/${name}-${version}.jar`
+            };
+          }
+          case "gem":
+            return {
+              type: "gem",
+              url: `https://rubygems.org/downloads/${name}-${version}.gem`
+            };
+          case "cargo":
+            return {
+              type: "tarball",
+              url: `https://crates.io/api/v1/crates/${name}/${version}/download`
+            };
+          case "nuget":
+            return {
+              type: "zip",
+              url: `https://nuget.org/packages/${name}/${version}/download`
+            };
+          case "composer":
+            if (!namespace) {
+              return void 0;
+            }
+            return {
+              type: "other",
+              url: `https://repo.packagist.org/p2/${namespace}/${name}.json`
+            };
+          case "hex":
+            return {
+              type: "tarball",
+              url: `https://repo.hex.pm/tarballs/${name}-${version}.tar`
+            };
+          case "pub":
+            return {
+              type: "tarball",
+              url: `https://pub.dev/packages/${name}/versions/${version}.tar.gz`
+            };
+          case "conda": {
+            const channel = purl["qualifiers"]?.["channel"] ?? "conda-forge";
+            return {
+              type: "tarball",
+              url: `https://anaconda.org/${channel}/${name}/${version}/download`
+            };
+          }
+          case "golang":
+            if (!namespace) {
+              return void 0;
+            }
+            return {
+              type: "zip",
+              url: `https://proxy.golang.org/${namespace}/${name}/@v/${version}.zip`
+            };
+          default:
+            return void 0;
+        }
+      }
+      /**
+       * Convert a PackageURL to a repository URL if possible.
+       *
+       * This method attempts to generate a repository URL where the package's
+       * source code can be found. Different package types use different URL
+       * patterns and repository hosting services.
+       */
+      static toRepositoryUrl(purl) {
+        const { name, namespace, type } = purl;
+        const { version } = purl;
+        switch (type) {
+          case "bioconductor":
+            return {
+              type: "web",
+              url: `https://bioconductor.org/packages/${name}`
+            };
+          case "bitbucket":
+            if (!namespace) {
+              return void 0;
+            }
+            return {
+              type: "git",
+              url: version ? `https://bitbucket.org/${namespace}/${name}/src/${version}` : `https://bitbucket.org/${namespace}/${name}`
+            };
+          case "cargo":
+            return {
+              type: "web",
+              url: `https://crates.io/crates/${name}`
+            };
+          case "chrome":
+            return {
+              type: "web",
+              url: `https://chromewebstore.google.com/detail/${name}`
+            };
+          case "clojars":
+            return {
+              type: "web",
+              url: `https://clojars.org/${namespace ? `${namespace}/` : ""}${name}`
+            };
+          case "cocoapods":
+            return {
+              type: "web",
+              url: `https://cocoapods.org/pods/${name}`
+            };
+          case "composer":
+            return {
+              type: "web",
+              url: `https://packagist.org/packages/${namespace ? `${namespace}/` : ""}${name}`
+            };
+          case "conan":
+            return {
+              type: "web",
+              url: `https://conan.io/center/recipes/${name}`
+            };
+          case "conda": {
+            const channel = purl["qualifiers"]?.["channel"] ?? "conda-forge";
+            return {
+              type: "web",
+              url: `https://anaconda.org/${channel}/${name}`
+            };
+          }
+          case "cpan":
+            return {
+              type: "web",
+              url: `https://metacpan.org/${namespace ? `pod/${namespace}::` : "pod/"}${name}`
+            };
+          case "deno":
+            return {
+              type: "web",
+              url: version ? `https://deno.land/x/${name}@${version}` : `https://deno.land/x/${name}`
+            };
+          case "docker": {
+            const versionSuffix = version ? `?tab=tags&name=${version}` : "";
+            if (!namespace || namespace === "library") {
+              return {
+                type: "web",
+                url: `https://hub.docker.com/_/${name}${versionSuffix}`
+              };
+            }
+            return {
+              type: "web",
+              url: `https://hub.docker.com/r/${namespace}/${name}${versionSuffix}`
+            };
+          }
+          case "elm":
+            if (!namespace) {
+              return void 0;
+            }
+            return {
+              type: "web",
+              url: version ? `https://package.elm-lang.org/packages/${namespace}/${name}/${version}` : `https://package.elm-lang.org/packages/${namespace}/${name}/latest`
+            };
+          case "gem":
+            return {
+              type: "web",
+              url: `https://rubygems.org/gems/${name}`
+            };
+          case "github":
+            if (!namespace) {
+              return void 0;
+            }
+            return {
+              type: "git",
+              url: version ? `https://github.com/${namespace}/${name}/tree/${version}` : `https://github.com/${namespace}/${name}`
+            };
+          case "gitlab":
+            if (!namespace) {
+              return void 0;
+            }
+            return {
+              type: "git",
+              url: `https://gitlab.com/${namespace}/${name}`
+            };
+          case "golang":
+            if (!namespace) {
+              return void 0;
+            }
+            return {
+              type: "web",
+              url: version ? `https://pkg.go.dev/${namespace}/${name}@${version}` : `https://pkg.go.dev/${namespace}/${name}`
+            };
+          case "hackage":
+            return {
+              type: "web",
+              url: version ? `https://hackage.haskell.org/package/${name}-${version}` : `https://hackage.haskell.org/package/${name}`
+            };
+          case "hex":
+            return {
+              type: "web",
+              url: `https://hex.pm/packages/${name}`
+            };
+          case "homebrew":
+            return {
+              type: "web",
+              url: `https://formulae.brew.sh/formula/${name}`
+            };
+          case "huggingface":
+            return {
+              type: "web",
+              url: `https://huggingface.co/${namespace ? `${namespace}/` : ""}${name}`
+            };
+          case "luarocks":
+            return {
+              type: "web",
+              url: `https://luarocks.org/modules/${namespace ? `${namespace}/` : ""}${name}`
+            };
+          case "maven": {
+            if (!namespace) {
+              return void 0;
+            }
+            return {
+              type: "web",
+              url: version ? `https://search.maven.org/artifact/${namespace}/${name}/${version}/jar` : `https://search.maven.org/artifact/${namespace}/${name}`
+            };
+          }
+          case "npm":
+            return {
+              type: "web",
+              url: version ? `https://www.npmjs.com/package/${namespace ? `${namespace}/` : ""}${name}/v/${version}` : `https://www.npmjs.com/package/${namespace ? `${namespace}/` : ""}${name}`
+            };
+          case "nuget":
+            return {
+              type: "web",
+              url: `https://nuget.org/packages/${name}/`
+            };
+          case "pub":
+            return {
+              type: "web",
+              url: `https://pub.dev/packages/${name}`
+            };
+          case "pypi":
+            return {
+              type: "web",
+              url: `https://pypi.org/project/${name}/`
+            };
+          case "swift":
+            if (!namespace) {
+              return void 0;
+            }
+            return {
+              type: "git",
+              url: `https://github.com/${namespace}/${name}`
+            };
+          case "vscode":
+            return {
+              type: "web",
+              url: `https://marketplace.visualstudio.com/items?itemName=${namespace ? `${namespace}.` : ""}${name}`
+            };
+          default:
+            return void 0;
+        }
+      }
+    };
+    var FLYWEIGHT_CACHE_MAX = 1024;
+    var flyweightCache = new MapCtor();
+    var OTHER_SCHEME_PATTERN = ObjectFreeze(/^[a-zA-Z][a-zA-Z0-9+.-]{0,255}:\/\//);
+    var PURL_LIKE_PATTERN = ObjectFreeze(/^[a-zA-Z0-9+.-]{1,256}\//);
+    var PackageURL = class _PackageURL3 {
+      static {
+        __name(this, "_PackageURL3");
+      }
+      static Component = recursiveFreeze(PurlComponent);
+      static KnownQualifierNames = recursiveFreeze(PurlQualifierNames);
+      static Type = recursiveFreeze(PurlType);
+      /** @internal Cached canonical string representation. */
+      _cachedString;
+      name;
+      namespace;
+      qualifiers;
+      subpath;
+      type;
+      version;
+      constructor(rawType, rawNamespace, rawName, rawVersion, rawQualifiers, rawSubpath) {
+        const type = isNonEmptyString(rawType) ? normalizeType(rawType) : rawType;
+        validateType(type, true);
+        const namespace = isNonEmptyString(rawNamespace) ? normalizeNamespace(rawNamespace) : rawNamespace;
+        validateNamespace(namespace, true);
+        const name = isNonEmptyString(rawName) ? normalizeName(rawName) : rawName;
+        validateName(name, true);
+        const version = isNonEmptyString(rawVersion) ? normalizeVersion(rawVersion) : rawVersion;
+        validateVersion(version, true);
+        const qualifiers = typeof rawQualifiers === "string" || isObject(rawQualifiers) ? normalizeQualifiers(rawQualifiers) : rawQualifiers;
+        validateQualifiers(qualifiers, true);
+        const subpath = isNonEmptyString(rawSubpath) ? normalizeSubpath(rawSubpath) : rawSubpath;
+        validateSubpath(subpath, true);
+        this.type = type;
+        this.name = name;
+        if (namespace !== void 0) {
+          this.namespace = namespace;
+        }
+        if (version !== void 0) {
+          this.version = version;
+        }
+        this.qualifiers = qualifiers ?? void 0;
+        if (subpath !== void 0) {
+          this.subpath = subpath;
+        }
+        const typeHelpers = PurlType[type];
+        if (typeHelpers) {
+          ;
+          typeHelpers?.["normalize"]?.(this);
+          typeHelpers?.["validate"]?.(this, true);
+        }
+      }
+      /**
+       * Convert PackageURL to object for JSONStringify compatibility.
+       */
+      toJSON() {
+        return this.toObject();
+      }
+      /**
+       * Convert PackageURL to JSON string representation.
+       */
+      toJSONString() {
+        return JSONStringify(this.toObject());
+      }
+      /**
+       * Convert PackageURL to a plain object representation.
+       */
+      toObject() {
+        const result = { __proto__: null };
+        if (this.type !== void 0) {
+          result.type = this.type;
+        }
+        if (this.namespace !== void 0) {
+          result.namespace = this.namespace;
+        }
+        if (this.name !== void 0) {
+          result.name = this.name;
+        }
+        if (this.version !== void 0) {
+          result.version = this.version;
+        }
+        if (this.qualifiers !== void 0) {
+          result.qualifiers = this.qualifiers;
+        }
+        if (this.subpath !== void 0) {
+          result.subpath = this.subpath;
+        }
+        return result;
+      }
+      /**
+       * Get the package specifier string without the scheme and type prefix.
+       *
+       * Returns `namespace/name@version?qualifiers#subpath` — the package identity
+       * without the `pkg:type/` prefix.
+       *
+       * @returns Spec string (e.g., '@babel/core@7.0.0' for pkg:npm/%40babel/core@7.0.0)
+       */
+      toSpec() {
+        return stringifySpec(this);
+      }
+      toString() {
+        let cached = this._cachedString;
+        if (cached === void 0) {
+          cached = stringify(this);
+          this._cachedString = cached;
+        }
+        return cached;
+      }
+      /**
+       * Create a new PackageURL with a different version.
+       * Returns a new instance — the original is unchanged.
+       *
+       * @param version - New version string
+       * @returns New PackageURL with the updated version
+       */
+      withVersion(version) {
+        return new _PackageURL3(
+          this.type,
+          this.namespace,
+          this.name,
+          version,
+          this.qualifiers,
+          this.subpath
+        );
+      }
+      /**
+       * Create a new PackageURL with a different namespace.
+       * Returns a new instance — the original is unchanged.
+       *
+       * @param namespace - New namespace string
+       * @returns New PackageURL with the updated namespace
+       */
+      withNamespace(namespace) {
+        return new _PackageURL3(
+          this.type,
+          namespace,
+          this.name,
+          this.version,
+          this.qualifiers,
+          this.subpath
+        );
+      }
+      /**
+       * Create a new PackageURL with a single qualifier added or updated.
+       * Returns a new instance — the original is unchanged.
+       *
+       * @param key - Qualifier key
+       * @param value - Qualifier value
+       * @returns New PackageURL with the qualifier set
+       */
+      withQualifier(key, value) {
+        return new _PackageURL3(
+          this.type,
+          this.namespace,
+          this.name,
+          this.version,
+          {
+            __proto__: null,
+            ...this.qualifiers,
+            [key]: value
+          },
+          this.subpath
+        );
+      }
+      /**
+       * Create a new PackageURL with all qualifiers replaced.
+       * Returns a new instance — the original is unchanged.
+       *
+       * @param qualifiers - New qualifiers object (or undefined to remove all)
+       * @returns New PackageURL with the updated qualifiers
+       */
+      withQualifiers(qualifiers) {
+        return new _PackageURL3(
+          this.type,
+          this.namespace,
+          this.name,
+          this.version,
+          qualifiers,
+          this.subpath
+        );
+      }
+      /**
+       * Create a new PackageURL with a different subpath.
+       * Returns a new instance — the original is unchanged.
+       *
+       * @param subpath - New subpath string
+       * @returns New PackageURL with the updated subpath
+       */
+      withSubpath(subpath) {
+        return new _PackageURL3(
+          this.type,
+          this.namespace,
+          this.name,
+          this.version,
+          this.qualifiers,
+          subpath
+        );
+      }
+      /**
+       * Compare this PackageURL with another for equality.
+       *
+       * Two PURLs are considered equal if their canonical string representations match.
+       * This comparison is case-sensitive after normalization.
+       *
+       * @param other - The PackageURL to compare with
+       * @returns true if the PURLs are equal, false otherwise
+       */
+      equals(other) {
+        return equals(this, other);
+      }
+      /**
+       * Compare two PackageURLs for equality.
+       *
+       * Two PURLs are considered equal if their canonical string representations match.
+       *
+       * @param a - First PackageURL to compare
+       * @param b - Second PackageURL to compare
+       * @returns true if the PURLs are equal, false otherwise
+       */
+      static equals(a, b) {
+        return equals(a, b);
+      }
+      /**
+       * Compare this PackageURL with another for sorting.
+       *
+       * Returns a number indicating sort order:
+       * - Negative if this comes before other
+       * - Zero if they are equal
+       * - Positive if this comes after other
+       *
+       * @param other - The PackageURL to compare with
+       * @returns -1, 0, or 1 for sort ordering
+       */
+      compare(other) {
+        return compare(this, other);
+      }
+      /**
+       * Compare two PackageURLs for sorting.
+       *
+       * Compares PURLs using their canonical string representations.
+       * Returns a number indicating sort order:
+       * - Negative if a comes before b
+       * - Zero if they are equal
+       * - Positive if a comes after b
+       *
+       * @param a - First PackageURL to compare
+       * @param b - Second PackageURL to compare
+       * @returns -1, 0, or 1 for sort ordering
+       */
+      static compare(a, b) {
+        return compare(a, b);
+      }
+      /**
+       * Create PackageURL from JSON string.
+       */
+      static fromJSON(json) {
+        if (typeof json !== "string") {
+          throw new Error("JSON string argument is required.");
+        }
+        const MAX_JSON_SIZE = 1024 * 1024;
+        const byteSize = Buffer.byteLength(json, "utf8");
+        if (byteSize > MAX_JSON_SIZE) {
+          throw new Error(
+            `JSON string exceeds maximum size limit of ${MAX_JSON_SIZE} bytes`
+          );
+        }
+        let parsed;
+        try {
+          parsed = JSONParse(json);
+        } catch (e) {
+          throw new SyntaxError("Failed to parse PackageURL from JSON", {
+            cause: e
+          });
+        }
+        if (!parsed || typeof parsed !== "object" || ArrayIsArray(parsed)) {
+          throw new Error("JSON must parse to an object.");
+        }
+        const parsedRecord = parsed;
+        const safeObject = {
+          __proto__: null,
+          type: parsedRecord["type"],
+          namespace: parsedRecord["namespace"],
+          name: parsedRecord["name"],
+          version: parsedRecord["version"],
+          qualifiers: parsedRecord["qualifiers"],
+          subpath: parsedRecord["subpath"]
+        };
+        return _PackageURL3.fromObject(safeObject);
+      }
+      /**
+       * Create PackageURL from a plain object.
+       */
+      static fromObject(obj) {
+        if (!isObject(obj)) {
+          throw new Error("Object argument is required.");
+        }
+        const typedObj = obj;
+        return new _PackageURL3(
+          typedObj["type"],
+          typedObj["namespace"],
+          typedObj["name"],
+          typedObj["version"],
+          typedObj["qualifiers"],
+          typedObj["subpath"]
+        );
+      }
+      static fromString(purlStr) {
+        if (typeof purlStr === "string") {
+          const cached = flyweightCache.get(purlStr);
+          if (cached !== void 0) {
+            return cached;
+          }
+        }
+        const purl = new _PackageURL3(..._PackageURL3.parseString(purlStr));
+        purl.toString();
+        recursiveFreeze(purl);
+        if (typeof purlStr === "string") {
+          if (flyweightCache.size >= FLYWEIGHT_CACHE_MAX) {
+            const oldest = flyweightCache.keys().next().value;
+            if (oldest !== void 0) {
+              flyweightCache.delete(oldest);
+            }
+          }
+          flyweightCache.set(purlStr, purl);
+        }
+        return purl;
+      }
+      /**
+       * Create PackageURL from npm package specifier.
+       *
+       * Parses npm package specifiers and converts them to PackageURL format.
+       * Handles scoped packages, version ranges, and normalizes version strings.
+       *
+       * **Supported formats:**
+       * - Basic packages: `lodash`, `lodash@4.17.21`
+       * - Scoped packages: `@babel/core`, `@babel/core@7.0.0`
+       * - Version ranges: `^4.17.21`, `~1.2.3`, `>=1.0.0` (prefixes stripped)
+       * - Dist-tags: `latest`, `next`, `beta` (passed through as version)
+       *
+       * **Not supported:**
+       * - Git URLs: `git+https://...` (use PackageURL constructor directly)
+       * - File paths: `file:../package.tgz`
+       * - GitHub shortcuts: `user/repo#branch`
+       * - Aliases: `npm:package@version`
+       *
+       * **Note:** Dist-tags like `latest` are mutable and should be resolved to
+       * concrete versions for reproducible builds. This method passes them through
+       * as-is for convenience.
+       *
+       * @param specifier - npm package specifier (e.g., 'lodash@4.17.21', '@babel/core@^7.0.0')
+       * @returns PackageURL instance for the npm package
+       * @throws {Error} If specifier is not a string or is empty
+       *
+       * @example
+       * ```typescript
+       * // Basic packages
+       * PackageURL.fromNpm('lodash@4.17.21')
+       * // -> pkg:npm/lodash@4.17.21
+       *
+       * // Scoped packages
+       * PackageURL.fromNpm('@babel/core@^7.0.0')
+       * // -> pkg:npm/%40babel/core@7.0.0
+       *
+       * // Dist-tags (passed through)
+       * PackageURL.fromNpm('react@latest')
+       * // -> pkg:npm/react@latest
+       *
+       * // No version
+       * PackageURL.fromNpm('express')
+       * // -> pkg:npm/express
+       * ```
+       */
+      static fromNpm(specifier) {
+        const { name, namespace, version } = parseNpmSpecifier(specifier);
+        return new _PackageURL3("npm", namespace, name, version, void 0, void 0);
+      }
+      /**
+       * Create PackageURL from ecosystem-specific package specifier.
+       *
+       * This is a convenience wrapper that delegates to type-specific parsers.
+       * Each ecosystem has its own specifier format and parsing rules.
+       *
+       * **Supported types:**
+       * - `npm`: npm package specifiers (e.g., 'lodash@4.17.21', '@babel/core@^7.0.0')
+       *
+       * @param type - Package ecosystem type (e.g., 'npm', 'pypi', 'maven')
+       * @param specifier - Ecosystem-specific package specifier string
+       * @returns PackageURL instance for the package
+       * @throws {Error} If type is not supported or specifier is invalid
+       *
+       * @example
+       * ```typescript
+       * // npm packages
+       * PackageURL.fromSpec('npm', 'lodash@4.17.21')
+       * // -> pkg:npm/lodash@4.17.21
+       *
+       * PackageURL.fromSpec('npm', '@babel/core@^7.0.0')
+       * // -> pkg:npm/%40babel/core@7.0.0
+       * ```
+       */
+      static fromSpec(type, specifier) {
+        switch (type) {
+          case "npm": {
+            const { name, namespace, version } = parseNpmSpecifier(specifier);
+            return new _PackageURL3(
+              "npm",
+              namespace,
+              name,
+              version,
+              void 0,
+              void 0
+            );
+          }
+          default:
+            throw new Error(
+              `Unsupported package type: ${type}. Currently supported: npm`
+            );
+        }
+      }
+      static parseString(purlStr) {
+        if (typeof purlStr !== "string") {
+          throw new Error("A purl string argument is required.");
+        }
+        if (isBlank(purlStr)) {
+          return [void 0, void 0, void 0, void 0, void 0, void 0];
+        }
+        const MAX_PURL_LENGTH = 4096;
+        if (purlStr.length > MAX_PURL_LENGTH) {
+          throw new Error(
+            `Package URL exceeds maximum length of ${MAX_PURL_LENGTH} characters.`
+          );
+        }
+        if (!StringPrototypeStartsWith(purlStr, "pkg:")) {
+          const hasOtherScheme = RegExpPrototypeTest(OTHER_SCHEME_PATTERN, purlStr);
+          const looksLikePurl = RegExpPrototypeTest(PURL_LIKE_PATTERN, purlStr);
+          if (!hasOtherScheme && looksLikePurl) {
+            return _PackageURL3.parseString(`pkg:${purlStr}`);
+          }
+        }
+        const colonIndex = StringPrototypeIndexOf(purlStr, ":");
+        let url;
+        let hasAuth = false;
+        if (colonIndex !== -1) {
+          try {
+            const beforeColon = StringPrototypeSlice(purlStr, 0, colonIndex);
+            const afterColon = StringPrototypeSlice(purlStr, colonIndex + 1);
+            const trimmedAfterColon = trimLeadingSlashes(afterColon);
+            url = new URLCtor(`${beforeColon}:${trimmedAfterColon}`);
+            if (afterColon.length !== trimmedAfterColon.length) {
+              const authorityStart = StringPrototypeIndexOf(afterColon, "//") + 2;
+              const authorityEnd = StringPrototypeIndexOf(
+                afterColon,
+                "/",
+                authorityStart
+              );
+              const authority = authorityEnd === -1 ? StringPrototypeSlice(afterColon, authorityStart) : StringPrototypeSlice(afterColon, authorityStart, authorityEnd);
+              hasAuth = StringPrototypeIncludes(authority, "@");
+            }
+          } catch (e) {
+            throw new PurlError("failed to parse as URL", {
+              cause: e
+            });
+          }
+        }
+        if (url?.protocol !== "pkg:") {
+          throw new PurlError('missing required "pkg" scheme component');
+        }
+        if (hasAuth) {
+          throw new PurlError('cannot contain a "user:pass@host:port"');
+        }
+        const { pathname } = url;
+        const firstSlashIndex = StringPrototypeIndexOf(pathname, "/");
+        const rawType = decodePurlComponent(
+          "type",
+          firstSlashIndex === -1 ? pathname : StringPrototypeSlice(pathname, 0, firstSlashIndex)
+        );
+        if (firstSlashIndex < 1) {
+          return [rawType, void 0, void 0, void 0, void 0, void 0];
+        }
+        let rawVersion;
+        let atSignIndex = rawType === "npm" ? StringPrototypeIndexOf(pathname, "@", firstSlashIndex + 2) : StringPrototypeLastIndexOf(pathname, "@");
+        if (atSignIndex > 0 && StringPrototypeCharCodeAt(pathname, atSignIndex - 1) === 47) {
+          atSignIndex = -1;
+        }
+        const beforeVersion = StringPrototypeSlice(
+          pathname,
+          rawType.length + 1,
+          atSignIndex === -1 ? pathname.length : atSignIndex
+        );
+        if (atSignIndex !== -1) {
+          rawVersion = decodePurlComponent(
+            "version",
+            StringPrototypeSlice(pathname, atSignIndex + 1)
+          );
+        }
+        let rawNamespace;
+        let rawName;
+        const lastSlashIndex = StringPrototypeLastIndexOf(beforeVersion, "/");
+        if (lastSlashIndex === -1) {
+          rawName = decodePurlComponent("name", beforeVersion);
+        } else {
+          rawName = decodePurlComponent(
+            "name",
+            StringPrototypeSlice(beforeVersion, lastSlashIndex + 1)
+          );
+          rawNamespace = decodePurlComponent(
+            "namespace",
+            StringPrototypeSlice(beforeVersion, 0, lastSlashIndex)
+          );
+        }
+        let rawQualifiers;
+        if (url.searchParams.size !== 0) {
+          const search = StringPrototypeSlice(url.search, 1);
+          const searchParams = new URLSearchParamsCtor();
+          const entries = StringPrototypeSplit(search, "&");
+          for (let i = 0, { length } = entries; i < length; i += 1) {
+            const pairs = StringPrototypeSplit(entries[i], "=");
+            if (pairs) {
+              const key = pairs[0];
+              if (key.length === 0) {
+                throw new PurlError("qualifier key must not be empty");
+              }
+              const value = decodePurlComponent(
+                "qualifiers",
+                ArrayPrototypeAt(pairs, 1) ?? ""
+              );
+              searchParams.append(
+                key,
+                value
+              );
+            }
+          }
+          rawQualifiers = searchParams;
+        }
+        let rawSubpath;
+        const { hash } = url;
+        if (hash.length !== 0) {
+          rawSubpath = decodePurlComponent("subpath", StringPrototypeSlice(hash, 1));
+        }
+        return [
+          rawType,
+          rawNamespace,
+          rawName,
+          rawVersion,
+          rawQualifiers,
+          rawSubpath
+        ];
+      }
+      /**
+       * Check if a string is a valid PURL without throwing.
+       *
+       * @param purlStr - String to validate
+       * @returns true if the string is a valid PURL
+       *
+       * @example
+       * ```typescript
+       * PackageURL.isValid('pkg:npm/lodash@4.17.21') // true
+       * PackageURL.isValid('not a purl')              // false
+       * ```
+       */
+      static isValid(purlStr) {
+        return _PackageURL3.tryFromString(purlStr).isOk();
+      }
+      /**
+       * Create PackageURL from a registry or repository URL.
+       *
+       * Convenience wrapper for UrlConverter.fromUrl(). Supports 27 hostnames
+       * across 17 package types including npm, pypi, maven, github, and more.
+       *
+       * @param urlStr - Registry or repository URL
+       * @returns PackageURL instance or undefined if URL is not recognized
+       *
+       * @example
+       * ```typescript
+       * PackageURL.fromUrl('https://www.npmjs.com/package/lodash')
+       * // -> pkg:npm/lodash
+       *
+       * PackageURL.fromUrl('https://github.com/lodash/lodash')
+       * // -> pkg:github/lodash/lodash
+       * ```
+       */
+      static fromUrl(urlStr) {
+        return UrlConverter.fromUrl(urlStr);
+      }
+      static tryFromJSON(json) {
+        return ResultUtils.from(() => _PackageURL3.fromJSON(json));
+      }
+      static tryFromObject(obj) {
+        return ResultUtils.from(() => _PackageURL3.fromObject(obj));
+      }
+      static tryFromString(purlStr) {
+        return ResultUtils.from(() => _PackageURL3.fromString(purlStr));
+      }
+      static tryParseString(purlStr) {
+        return ResultUtils.from(() => _PackageURL3.parseString(purlStr));
+      }
+    };
+    for (const staticProp of ["Component", "KnownQualifierNames", "Type"]) {
+      ReflectDefineProperty(PackageURL, staticProp, {
+        ...ReflectGetOwnPropertyDescriptor(PackageURL, staticProp),
+        writable: false
+      });
+    }
+    ReflectSetPrototypeOf(PackageURL.prototype, null);
+    _registerPackageURL(PackageURL);
+    _registerPackageURLForUrlConverter(PackageURL);
+    var PurlBuilder = class _PurlBuilder {
+      static {
+        __name(this, "_PurlBuilder");
+      }
+      /** The package type (e.g., 'npm', 'pypi', 'maven'). */
+      _type;
+      /** The package namespace (organization, group, or scope). */
+      _namespace;
+      /** The package name (required for valid PackageURLs). */
+      _name;
+      /** The package version string. */
+      _version;
+      /** Key-value pairs of additional package qualifiers. */
+      _qualifiers;
+      /** Optional subpath within the package. */
+      _subpath;
+      /**
+       * Build and return the final PackageURL instance.
+       *
+       * This method creates a new PackageURL instance using all the properties
+       * set on this builder. The PackageURL constructor will handle validation
+       * and normalization of the provided values.
+       *
+       * @throws {Error} If the configuration results in an invalid PackageURL
+       */
+      build() {
+        return new PackageURL(
+          this._type,
+          this._namespace,
+          this._name,
+          this._version,
+          this._qualifiers,
+          this._subpath
+        );
+      }
+      /**
+       * Set the package name for the PackageURL.
+       *
+       * This is the core identifier for the package and is required for all valid
+       * PackageURLs. The name should be the canonical package name as it appears
+       * in the package repository.
+       */
+      name(name) {
+        this._name = name;
+        return this;
+      }
+      /**
+       * Set the package namespace for the PackageURL.
+       *
+       * The namespace represents different concepts depending on the package type:
+       * - npm: organization or scope (e.g., '@angular' for '@angular/core')
+       * - maven: groupId (e.g., 'org.apache.commons')
+       * - pypi: typically unused
+       */
+      namespace(namespace) {
+        this._namespace = namespace;
+        return this;
+      }
+      /**
+       * Add a single qualifier key-value pair.
+       *
+       * This method allows adding qualifiers incrementally. If the qualifier key
+       * already exists, its value will be overwritten.
+       */
+      qualifier(key, value) {
+        if (!this._qualifiers) {
+          this._qualifiers = { __proto__: null };
+        }
+        this._qualifiers[key] = value;
+        return this;
+      }
+      /**
+       * Set all qualifiers at once, replacing any existing qualifiers.
+       *
+       * Qualifiers provide additional metadata about the package such as:
+       * - arch: target architecture
+       * - os: target operating system
+       * - classifier: additional classifier for the package
+       */
+      qualifiers(qualifiers) {
+        this._qualifiers = { __proto__: null, ...qualifiers };
+        return this;
+      }
+      /**
+       * Set the subpath for the PackageURL.
+       *
+       * The subpath represents a path within the package, useful for referencing
+       * specific files or directories within a package. It should not start with
+       * a forward slash.
+       */
+      subpath(subpath) {
+        this._subpath = subpath;
+        return this;
+      }
+      /**
+       * Set the package type for the PackageURL.
+       */
+      type(type) {
+        this._type = type;
+        return this;
+      }
+      /**
+       * Set the package version for the PackageURL.
+       *
+       * The version string should match the format used by the package repository.
+       * Some package types may normalize version formats (e.g., removing leading 'v').
+       */
+      version(version) {
+        this._version = version;
+        return this;
+      }
+      /**
+       * Create a builder with the bitbucket package type preset.
+       *
+       * @example `PurlBuilder.bitbucket().namespace('owner').name('repo').build()`
+       */
+      static bitbucket() {
+        return new _PurlBuilder().type("bitbucket");
+      }
+      /**
+       * Create a builder with the cargo package type preset.
+       *
+       * @example `PurlBuilder.cargo().name('serde').version('1.0.0').build()`
+       */
+      static cargo() {
+        return new _PurlBuilder().type("cargo");
+      }
+      /**
+       * Create a builder with the cocoapods package type preset.
+       *
+       * @example `PurlBuilder.cocoapods().name('Alamofire').version('5.9.1').build()`
+       */
+      static cocoapods() {
+        return new _PurlBuilder().type("cocoapods");
+      }
+      /**
+       * Create a builder with the composer package type preset.
+       *
+       * @example `PurlBuilder.composer().namespace('laravel').name('framework').build()`
+       */
+      static composer() {
+        return new _PurlBuilder().type("composer");
+      }
+      /**
+       * Create a builder with the conan package type preset.
+       *
+       * @example `PurlBuilder.conan().name('zlib').version('1.3.1').build()`
+       */
+      static conan() {
+        return new _PurlBuilder().type("conan");
+      }
+      /**
+       * Create a builder with the conda package type preset.
+       *
+       * @example `PurlBuilder.conda().name('numpy').version('1.26.4').build()`
+       */
+      static conda() {
+        return new _PurlBuilder().type("conda");
+      }
+      /**
+       * Create a builder with the cran package type preset.
+       *
+       * @example `PurlBuilder.cran().name('ggplot2').version('3.5.0').build()`
+       */
+      static cran() {
+        return new _PurlBuilder().type("cran");
+      }
+      /**
+       * Create a new empty builder instance.
+       *
+       * This is a convenience factory method that returns a new PurlBuilder
+       * instance ready for configuration.
+       */
+      static create() {
+        return new _PurlBuilder();
+      }
+      /**
+       * Create a builder with the deb package type preset.
+       *
+       * @example `PurlBuilder.deb().namespace('debian').name('curl').version('8.5.0').build()`
+       */
+      static deb() {
+        return new _PurlBuilder().type("deb");
+      }
+      /**
+       * Create a builder with the docker package type preset.
+       *
+       * @example `PurlBuilder.docker().namespace('library').name('nginx').version('latest').build()`
+       */
+      static docker() {
+        return new _PurlBuilder().type("docker");
+      }
+      /**
+       * Create a builder from an existing PackageURL instance.
+       *
+       * This factory method copies all properties from an existing PackageURL
+       * into a new builder, allowing for modification of existing URLs.
+       */
+      static from(purl) {
+        const builder = new _PurlBuilder();
+        if (purl.type !== void 0) {
+          builder._type = purl.type;
+        }
+        if (purl.namespace !== void 0) {
+          builder._namespace = purl.namespace;
+        }
+        if (purl.name !== void 0) {
+          builder._name = purl.name;
+        }
+        if (purl.version !== void 0) {
+          builder._version = purl.version;
+        }
+        if (purl.qualifiers !== void 0) {
+          const qualifiersObj = purl.qualifiers;
+          builder._qualifiers = ObjectFromEntries(
+            ArrayPrototypeMap(ObjectEntries(qualifiersObj), ([key, value]) => [
+              key,
+              String(value)
+            ])
+          );
+        }
+        if (purl.subpath !== void 0) {
+          builder._subpath = purl.subpath;
+        }
+        return builder;
+      }
+      /**
+       * Create a builder with the gem package type preset.
+       *
+       * @example `PurlBuilder.gem().name('rails').version('7.0.0').build()`
+       */
+      static gem() {
+        return new _PurlBuilder().type("gem");
+      }
+      /**
+       * Create a builder with the github package type preset.
+       *
+       * @example `PurlBuilder.github().namespace('socketdev').name('socket-cli').build()`
+       */
+      static github() {
+        return new _PurlBuilder().type("github");
+      }
+      /**
+       * Create a builder with the gitlab package type preset.
+       *
+       * @example `PurlBuilder.gitlab().namespace('owner').name('project').build()`
+       */
+      static gitlab() {
+        return new _PurlBuilder().type("gitlab");
+      }
+      /**
+       * Create a builder with the golang package type preset.
+       *
+       * @example `PurlBuilder.golang().namespace('github.com/go').name('text').build()`
+       */
+      static golang() {
+        return new _PurlBuilder().type("golang");
+      }
+      /**
+       * Create a builder with the hackage package type preset.
+       *
+       * @example `PurlBuilder.hackage().name('aeson').version('2.2.1.0').build()`
+       */
+      static hackage() {
+        return new _PurlBuilder().type("hackage");
+      }
+      /**
+       * Create a builder with the hex package type preset.
+       *
+       * @example `PurlBuilder.hex().name('phoenix').version('1.7.12').build()`
+       */
+      static hex() {
+        return new _PurlBuilder().type("hex");
+      }
+      /**
+       * Create a builder with the huggingface package type preset.
+       *
+       * @example `PurlBuilder.huggingface().name('bert-base-uncased').build()`
+       */
+      static huggingface() {
+        return new _PurlBuilder().type("huggingface");
+      }
+      /**
+       * Create a builder with the luarocks package type preset.
+       *
+       * @example `PurlBuilder.luarocks().name('luasocket').version('3.1.0').build()`
+       */
+      static luarocks() {
+        return new _PurlBuilder().type("luarocks");
+      }
+      /**
+       * Create a builder with the maven package type preset.
+       *
+       * @example `PurlBuilder.maven().namespace('org.apache').name('commons-lang3').build()`
+       */
+      static maven() {
+        return new _PurlBuilder().type("maven");
+      }
+      /**
+       * Create a builder with the npm package type preset.
+       *
+       * @example `PurlBuilder.npm().name('lodash').version('4.17.21').build()`
+       */
+      static npm() {
+        return new _PurlBuilder().type("npm");
+      }
+      /**
+       * Create a builder with the nuget package type preset.
+       *
+       * @example `PurlBuilder.nuget().name('Newtonsoft.Json').version('13.0.3').build()`
+       */
+      static nuget() {
+        return new _PurlBuilder().type("nuget");
+      }
+      /**
+       * Create a builder with the oci package type preset.
+       *
+       * @example `PurlBuilder.oci().name('nginx').version('sha256:abc123').build()`
+       */
+      static oci() {
+        return new _PurlBuilder().type("oci");
+      }
+      /**
+       * Create a builder with the pub package type preset.
+       *
+       * @example `PurlBuilder.pub().name('flutter').version('3.19.0').build()`
+       */
+      static pub() {
+        return new _PurlBuilder().type("pub");
+      }
+      /**
+       * Create a builder with the pypi package type preset.
+       *
+       * @example `PurlBuilder.pypi().name('requests').version('2.31.0').build()`
+       */
+      static pypi() {
+        return new _PurlBuilder().type("pypi");
+      }
+      /**
+       * Create a builder with the rpm package type preset.
+       *
+       * @example `PurlBuilder.rpm().namespace('fedora').name('curl').version('8.5.0').build()`
+       */
+      static rpm() {
+        return new _PurlBuilder().type("rpm");
+      }
+      /**
+       * Create a builder with the swift package type preset.
+       *
+       * @example `PurlBuilder.swift().namespace('apple').name('swift-nio').version('2.64.0').build()`
+       */
+      static swift() {
+        return new _PurlBuilder().type("swift");
+      }
+    };
+    var SEMVER_SCHEMES = ObjectFreeze(
+      new SetCtor([
+        "semver",
+        "npm",
+        "cargo",
+        "golang",
+        "hex",
+        "pub",
+        "cran",
+        "gem",
+        "swift"
+      ])
+    );
+    var COMPARATORS = ObjectFreeze([
+      "!=",
+      "<=",
+      ">=",
+      "<",
+      ">",
+      "="
+    ]);
+    var DIGITS_ONLY = ObjectFreeze(/^\d+$/);
+    var regexSemverNumberedGroups2 = ObjectFreeze(
+      /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/
+    );
+    function parseSemver(version) {
+      const match = RegExpPrototypeExec(regexSemverNumberedGroups2, version);
+      if (!match) {
+        throw new PurlError(`invalid semver version "${version}"`);
+      }
+      const major = Number(match[1]);
+      const minor = Number(match[2]);
+      const patch = Number(match[3]);
+      if (major > Number.MAX_SAFE_INTEGER || minor > Number.MAX_SAFE_INTEGER || patch > Number.MAX_SAFE_INTEGER) {
+        throw new PurlError(
+          `version component exceeds maximum safe integer in "${version}"`
+        );
+      }
+      return {
+        major,
+        minor,
+        patch,
+        prerelease: match[4] ? StringPrototypeSplit(match[4], ".") : []
+      };
+    }
+    __name(parseSemver, "parseSemver");
+    function comparePrereleases(a, b) {
+      if (a.length === 0 && b.length === 0) return 0;
+      if (a.length === 0) return 1;
+      if (b.length === 0) return -1;
+      const len = Math.min(a.length, b.length);
+      for (let i = 0; i < len; i += 1) {
+        const ai = a[i];
+        const bi = b[i];
+        if (ai === bi) continue;
+        const aNum = RegExpPrototypeTest(DIGITS_ONLY, ai);
+        const bNum = RegExpPrototypeTest(DIGITS_ONLY, bi);
+        if (aNum && bNum) {
+          const diff = Number(ai) - Number(bi);
+          if (diff !== 0) return diff < 0 ? -1 : 1;
+        } else if (aNum) {
+          return -1;
+        } else if (bNum) {
+          return 1;
+        } else {
+          if (ai < bi) return -1;
+          if (ai > bi) return 1;
+        }
+      }
+      if (a.length !== b.length) {
+        return a.length < b.length ? -1 : 1;
+      }
+      return 0;
+    }
+    __name(comparePrereleases, "comparePrereleases");
+    function compareSemver(a, b) {
+      const pa = parseSemver(a);
+      const pb = parseSemver(b);
+      if (pa.major !== pb.major) return pa.major < pb.major ? -1 : 1;
+      if (pa.minor !== pb.minor) return pa.minor < pb.minor ? -1 : 1;
+      if (pa.patch !== pb.patch) return pa.patch < pb.patch ? -1 : 1;
+      const pre = comparePrereleases(pa.prerelease, pb.prerelease);
+      if (pre !== 0) return pre < 0 ? -1 : 1;
+      return 0;
+    }
+    __name(compareSemver, "compareSemver");
+    function parseConstraint(raw) {
+      const trimmed = StringPrototypeTrim(raw);
+      if (trimmed === "*") {
+        return ObjectFreeze({
+          __proto__: null,
+          comparator: "*",
+          version: "*"
+        });
+      }
+      for (let i = 0, { length } = COMPARATORS; i < length; i += 1) {
+        const op = COMPARATORS[i];
+        if (StringPrototypeStartsWith(trimmed, op)) {
+          const version = StringPrototypeTrim(
+            StringPrototypeSlice(trimmed, op.length)
+          );
+          if (version.length === 0) {
+            throw new PurlError(`empty version after comparator "${op}"`);
+          }
+          return ObjectFreeze({
+            __proto__: null,
+            comparator: op,
+            version
+          });
+        }
+      }
+      if (trimmed.length === 0) {
+        throw new PurlError("empty constraint");
+      }
+      return ObjectFreeze({
+        __proto__: null,
+        comparator: "=",
+        version: trimmed
+      });
+    }
+    __name(parseConstraint, "parseConstraint");
+    var Vers = class _Vers {
+      static {
+        __name(this, "_Vers");
+      }
+      scheme;
+      constraints;
+      constructor(scheme, constraints) {
+        this.scheme = scheme;
+        this.constraints = ObjectFreeze(constraints);
+        ObjectFreeze(this);
+      }
+      /**
+       * Parse a VERS string.
+       *
+       * @param versStr - VERS string (e.g., 'vers:npm/>=1.0.0|<2.0.0')
+       * @returns Vers instance
+       * @throws {PurlError} If the string is not a valid VERS
+       */
+      static parse(versStr) {
+        return _Vers.fromString(versStr);
+      }
+      /**
+       * Parse a VERS string.
+       *
+       * @param versStr - VERS string (e.g., 'vers:npm/>=1.0.0|<2.0.0')
+       * @returns Vers instance
+       * @throws {PurlError} If the string is not a valid VERS
+       */
+      static fromString(versStr) {
+        if (typeof versStr !== "string" || versStr.length === 0) {
+          throw new PurlError("VERS string is required");
+        }
+        if (!StringPrototypeStartsWith(versStr, "vers:")) {
+          throw new PurlError('VERS must start with "vers:" scheme');
+        }
+        const remainder = StringPrototypeSlice(versStr, 5);
+        const slashIndex = StringPrototypeIndexOf(remainder, "/");
+        if (slashIndex === -1 || slashIndex === 0) {
+          throw new PurlError('VERS must contain a version scheme before "/"');
+        }
+        const scheme = StringPrototypeToLowerCase(
+          StringPrototypeSlice(remainder, 0, slashIndex)
+        );
+        const constraintsStr = StringPrototypeSlice(remainder, slashIndex + 1);
+        if (constraintsStr.length === 0) {
+          throw new PurlError("VERS must contain at least one constraint");
+        }
+        const rawConstraints = StringPrototypeSplit(constraintsStr, "|");
+        const MAX_CONSTRAINTS = 1e3;
+        if (rawConstraints.length > MAX_CONSTRAINTS) {
+          throw new PurlError(
+            `VERS exceeds maximum of ${MAX_CONSTRAINTS} constraints`
+          );
+        }
+        const constraints = [];
+        for (let i = 0, { length } = rawConstraints; i < length; i += 1) {
+          const constraint = parseConstraint(rawConstraints[i]);
+          ArrayPrototypePush(constraints, constraint);
+        }
+        if (constraints.length > 1) {
+          for (let i = 0, { length } = constraints; i < length; i += 1) {
+            if (constraints[i].comparator === "*") {
+              throw new PurlError('wildcard "*" must be the only constraint');
+            }
+          }
+        }
+        if (SEMVER_SCHEMES.has(scheme)) {
+          for (let i = 0, { length } = constraints; i < length; i += 1) {
+            const c = constraints[i];
+            if (c.comparator !== "*" && !isSemverString(c.version)) {
+              throw new PurlError(
+                `invalid semver version "${c.version}" in VERS constraint`
+              );
+            }
+          }
+        }
+        return new _Vers(scheme, constraints);
+      }
+      /**
+       * Check if a version is contained within this VERS range.
+       *
+       * Implements the VERS containment algorithm for semver-based schemes.
+       *
+       * @param version - Version string to check
+       * @returns true if the version matches the range
+       * @throws {PurlError} If the scheme is not supported
+       */
+      contains(version) {
+        if (!SEMVER_SCHEMES.has(this.scheme)) {
+          throw new PurlError(
+            `unsupported VERS scheme "${this.scheme}" for containment check`
+          );
+        }
+        const { constraints } = this;
+        if (constraints.length === 1 && constraints[0].comparator === "*") {
+          return true;
+        }
+        for (let i = 0, { length } = constraints; i < length; i += 1) {
+          const c = constraints[i];
+          if (c.comparator === "!=" && compareSemver(version, c.version) === 0) {
+            return false;
+          }
+        }
+        for (let i = 0, { length } = constraints; i < length; i += 1) {
+          const c = constraints[i];
+          if (c.comparator === "=" && compareSemver(version, c.version) === 0) {
+            return true;
+          }
+        }
+        const ranges = [];
+        for (let i = 0, { length } = constraints; i < length; i += 1) {
+          const c = constraints[i];
+          if (c.comparator !== "=" && c.comparator !== "!=") {
+            ArrayPrototypePush(ranges, c);
+          }
+        }
+        if (ranges.length === 0) {
+          return false;
+        }
+        for (let i = 0, { length } = ranges; i < length; i += 1) {
+          const c = ranges[i];
+          const cmp = compareSemver(version, c.version);
+          if (c.comparator === ">=") {
+            if (cmp < 0) {
+              const next2 = ranges[i + 1];
+              if (next2 && (next2.comparator === "<" || next2.comparator === "<=")) {
+                i += 1;
+              }
+              continue;
+            }
+            const next = ranges[i + 1];
+            if (!next) return true;
+            const cmpNext = compareSemver(version, next.version);
+            if (next.comparator === "<" && cmpNext < 0) return true;
+            if (next.comparator === "<=" && cmpNext <= 0) return true;
+            i += 1;
+          } else if (c.comparator === ">") {
+            if (cmp <= 0) {
+              const next2 = ranges[i + 1];
+              if (next2 && (next2.comparator === "<" || next2.comparator === "<=")) {
+                i += 1;
+              }
+              continue;
+            }
+            const next = ranges[i + 1];
+            if (!next) return true;
+            const cmpNext = compareSemver(version, next.version);
+            if (next.comparator === "<" && cmpNext < 0) return true;
+            if (next.comparator === "<=" && cmpNext <= 0) return true;
+            i += 1;
+          } else if (c.comparator === "<" || c.comparator === "<=") {
+            const cmpVal = compareSemver(version, c.version);
+            if (c.comparator === "<" && cmpVal < 0) return true;
+            if (c.comparator === "<=" && cmpVal <= 0) return true;
+          }
+        }
+        return false;
+      }
+      /**
+       * Serialize to canonical VERS string.
+       */
+      toString() {
+        const parts = [];
+        for (let i = 0, { length } = this.constraints; i < length; i += 1) {
+          const c = this.constraints[i];
+          if (c.comparator === "*") {
+            ArrayPrototypePush(parts, "*");
+          } else if (c.comparator === "=") {
+            ArrayPrototypePush(parts, c.version);
+          } else {
+            ArrayPrototypePush(parts, `${c.comparator}${c.version}`);
+          }
+        }
+        return `vers:${this.scheme}/${ArrayPrototypeJoin(parts, "|")}`;
+      }
+    };
+  }
+});
+
+// src/external/@socketregistry/packageurl-js.js
+module.exports = require_dist();
+/*! Bundled license information:
+
+@socketregistry/packageurl-js/dist/index.js:
+  (*!
+  Copyright (c) the purl authors
+  
+  Permission is hereby granted, free of charge, to any person obtaining a copy
+  of this software and associated documentation files (the "Software"), to deal
+  in the Software without restriction, including without limitation the rights
+  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+  copies of the Software, and to permit persons to whom the Software is
+  furnished to do so, subject to the following conditions:
+  
+  The above copyright notice and this permission notice shall be included in all
+  copies or substantial portions of the Software.
+  
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+  SOFTWARE.
+  *)
+*/
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@socketregistry/yocto-spinner.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@socketregistry/yocto-spinner.js
new file mode 100644
index 00000000..761d02e9
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@socketregistry/yocto-spinner.js
@@ -0,0 +1,465 @@
+"use strict";
+/**
+ * Bundled from @socketregistry/yocto-spinner
+ * This is a zero-dependency bundle created by esbuild.
+ */
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+var __commonJS = (cb, mod) => function __require() {
+  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+
+// node_modules/.pnpm/yoctocolors-cjs@2.1.3/node_modules/yoctocolors-cjs/index.js
+var require_yoctocolors_cjs = __commonJS({
+  "node_modules/.pnpm/yoctocolors-cjs@2.1.3/node_modules/yoctocolors-cjs/index.js"(exports2, module2) {
+    var tty = require("node:tty");
+    var hasColors = tty?.WriteStream?.prototype?.hasColors?.() ?? false;
+    var format = /* @__PURE__ */ __name((open, close) => {
+      if (!hasColors) {
+        return (input) => input;
+      }
+      const openCode = `\x1B[${open}m`;
+      const closeCode = `\x1B[${close}m`;
+      return (input) => {
+        const string = input + "";
+        let index = string.indexOf(closeCode);
+        if (index === -1) {
+          return openCode + string + closeCode;
+        }
+        let result = openCode;
+        let lastIndex = 0;
+        const reopenOnNestedClose = close === 22;
+        const replaceCode = (reopenOnNestedClose ? closeCode : "") + openCode;
+        while (index !== -1) {
+          result += string.slice(lastIndex, index) + replaceCode;
+          lastIndex = index + closeCode.length;
+          index = string.indexOf(closeCode, lastIndex);
+        }
+        result += string.slice(lastIndex) + closeCode;
+        return result;
+      };
+    }, "format");
+    var colors = {};
+    colors.reset = format(0, 0);
+    colors.bold = format(1, 22);
+    colors.dim = format(2, 22);
+    colors.italic = format(3, 23);
+    colors.underline = format(4, 24);
+    colors.overline = format(53, 55);
+    colors.inverse = format(7, 27);
+    colors.hidden = format(8, 28);
+    colors.strikethrough = format(9, 29);
+    colors.black = format(30, 39);
+    colors.red = format(31, 39);
+    colors.green = format(32, 39);
+    colors.yellow = format(33, 39);
+    colors.blue = format(34, 39);
+    colors.magenta = format(35, 39);
+    colors.cyan = format(36, 39);
+    colors.white = format(37, 39);
+    colors.gray = format(90, 39);
+    colors.bgBlack = format(40, 49);
+    colors.bgRed = format(41, 49);
+    colors.bgGreen = format(42, 49);
+    colors.bgYellow = format(43, 49);
+    colors.bgBlue = format(44, 49);
+    colors.bgMagenta = format(45, 49);
+    colors.bgCyan = format(46, 49);
+    colors.bgWhite = format(47, 49);
+    colors.bgGray = format(100, 49);
+    colors.redBright = format(91, 39);
+    colors.greenBright = format(92, 39);
+    colors.yellowBright = format(93, 39);
+    colors.blueBright = format(94, 39);
+    colors.magentaBright = format(95, 39);
+    colors.cyanBright = format(96, 39);
+    colors.whiteBright = format(97, 39);
+    colors.bgRedBright = format(101, 49);
+    colors.bgGreenBright = format(102, 49);
+    colors.bgYellowBright = format(103, 49);
+    colors.bgBlueBright = format(104, 49);
+    colors.bgMagentaBright = format(105, 49);
+    colors.bgCyanBright = format(106, 49);
+    colors.bgWhiteBright = format(107, 49);
+    module2.exports = colors;
+  }
+});
+
+// node_modules/.pnpm/@socketregistry+yocto-spinner@1.0.25/node_modules/@socketregistry/yocto-spinner/index.cjs
+var require_yocto_spinner = __commonJS({
+  "node_modules/.pnpm/@socketregistry+yocto-spinner@1.0.25/node_modules/@socketregistry/yocto-spinner/index.cjs"(exports2, module2) {
+    "use strict";
+    var { isArray: ArrayIsArray } = Array;
+    var { defineProperty: ObjectDefineProperty } = Object;
+    var defaultTtyColumns = 80;
+    var _defaultSpinner;
+    function getDefaultSpinner() {
+      if (_defaultSpinner === void 0) {
+        _defaultSpinner = {
+          frames: isUnicodeSupported() ? ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"] : ["-", "\\", "|", "/"],
+          interval: 80
+        };
+      }
+      return _defaultSpinner;
+    }
+    __name(getDefaultSpinner, "getDefaultSpinner");
+    var _logSymbols;
+    function getLogSymbols() {
+      if (_logSymbols === void 0) {
+        const supported = isUnicodeSupported();
+        const colors = getYoctocolors();
+        _logSymbols = {
+          error: colors.red(supported ? "✖" : "×"),
+          info: colors.blue(supported ? "ℹ" : "i"),
+          success: colors.green(supported ? "✔" : "√"),
+          warning: colors.yellow(supported ? "⚠" : "‼")
+        };
+      }
+      return _logSymbols;
+    }
+    __name(getLogSymbols, "getLogSymbols");
+    var _process;
+    function getProcess() {
+      if (_process === void 0) {
+        _process = require("node:process");
+      }
+      return _process;
+    }
+    __name(getProcess, "getProcess");
+    var _yoctocolors;
+    function getYoctocolors() {
+      if (_yoctocolors === void 0) {
+        _yoctocolors = { ...require_yoctocolors_cjs() };
+      }
+      return _yoctocolors;
+    }
+    __name(getYoctocolors, "getYoctocolors");
+    var _processInteractive;
+    function isProcessInteractive() {
+      if (_processInteractive === void 0) {
+        const { env } = getProcess();
+        _processInteractive = env.TERM !== "dumb" && !("CI" in env);
+      }
+      return _processInteractive;
+    }
+    __name(isProcessInteractive, "isProcessInteractive");
+    var _unicodeSupported;
+    function isUnicodeSupported() {
+      if (_unicodeSupported === void 0) {
+        const process2 = getProcess();
+        if (process2.platform !== "win32") {
+          _unicodeSupported = process2.env.TERM !== "linux";
+          return _unicodeSupported;
+        }
+        const { env } = process2;
+        if (
+          // Windows Terminal.
+          env.WT_SESSION || // Terminus (<0.2.27).
+          env.TERMINUS_SUBLIME || // ConEmu and cmder.
+          env.ConEmuTask === "{cmd::Cmder}"
+        ) {
+          _unicodeSupported = true;
+          return _unicodeSupported;
+        }
+        const { TERM, TERM_PROGRAM } = env;
+        _unicodeSupported = TERM_PROGRAM === "Terminus-Sublime" || TERM_PROGRAM === "vscode" || TERM === "xterm-256color" || TERM === "alacritty" || TERM === "rxvt-unicode" || TERM === "rxvt-unicode-256color" || env.TERMINAL_EMULATOR === "JetBrains-JediTerm";
+      }
+      return _unicodeSupported;
+    }
+    __name(isUnicodeSupported, "isUnicodeSupported");
+    var _stripVTControlCharacters;
+    function stripVTControlCharacters(string) {
+      if (_stripVTControlCharacters === void 0) {
+        const nodeUtil = require("node:util");
+        _stripVTControlCharacters = nodeUtil.stripVTControlCharacters;
+      }
+      return _stripVTControlCharacters(string);
+    }
+    __name(stripVTControlCharacters, "stripVTControlCharacters");
+    function getFrame(spinner, index) {
+      const { frames } = spinner;
+      const length = frames?.length ?? 0;
+      return index > -1 && index < length ? frames[index] : "";
+    }
+    __name(getFrame, "getFrame");
+    function getFrameCount(spinner) {
+      const { frames } = spinner;
+      const length = frames?.length ?? 0;
+      return length < 1 ? 1 : length;
+    }
+    __name(getFrameCount, "getFrameCount");
+    function normalizeText(value) {
+      return typeof value === "string" ? value.trimStart() : "";
+    }
+    __name(normalizeText, "normalizeText");
+    var YoctoSpinner2 = class _YoctoSpinner {
+      static {
+        __name(this, "YoctoSpinner");
+      }
+      #color;
+      #currentFrame = -1;
+      #exitHandlerBound;
+      #indention = "";
+      #isInteractive;
+      #isSpinning = false;
+      #lastSpinnerFrameTime = 0;
+      #lines = 0;
+      #onFrameUpdate;
+      #onRenderFrame;
+      #skipRender = false;
+      #spinner;
+      #stream;
+      #text;
+      #timer;
+      static spinners = {
+        get default() {
+          return getDefaultSpinner();
+        },
+        set default(spinner) {
+          ObjectDefineProperty(this, "default", {
+            __proto__: null,
+            configurable: true,
+            enumerable: true,
+            value: spinner,
+            writable: true
+          });
+        },
+        ci: {
+          frames: [""],
+          // The delay argument is converted to a signed 32-bit integer. This effectively
+          // limits delay to 2147483647 ms, roughly 24.8 days, since it's specified as a
+          // signed integer in the IDL.
+          // https://developer.mozilla.org/en-US/docs/Web/API/Window/setInterval?utm_source=chatgpt.com#return_value
+          interval: 2147483647
+        }
+      };
+      constructor(options = {}) {
+        const opts = { __proto__: null, ...options };
+        const stream = opts.stream ?? getProcess().stderr;
+        this.#spinner = opts.spinner ?? _YoctoSpinner.spinners.default ?? getDefaultSpinner();
+        this.#text = normalizeText(options.text);
+        this.#stream = stream ?? process.stderr;
+        const color = options.color ?? "cyan";
+        if (ArrayIsArray(color) && (color.length !== 3 || !color.every((n) => typeof n === "number" && n >= 0 && n <= 255))) {
+          throw new TypeError(
+            "RGB color must be an array of 3 numbers between 0 and 255"
+          );
+        }
+        this.#color = color;
+        this.#isInteractive = !!stream.isTTY && isProcessInteractive();
+        this.#exitHandlerBound = this.#exitHandler.bind(this);
+        this.#onFrameUpdate = options.onFrameUpdate;
+        this.#onRenderFrame = options.onRenderFrame;
+      }
+      #exitHandler(signal) {
+        if (this.isSpinning) {
+          this.stop();
+        }
+        const exitCode = signal === "SIGINT" ? 130 : signal === "SIGTERM" ? 143 : 1;
+        process.exit(exitCode);
+      }
+      #hideCursor() {
+        if (this.#isInteractive) {
+          this.#write("\x1B[?25l");
+        }
+      }
+      #lineCount(text) {
+        const width = this.#stream.columns ?? defaultTtyColumns;
+        const lines = stripVTControlCharacters(text).split("\n");
+        let lineCount = 0;
+        for (const line of lines) {
+          lineCount += Math.max(1, Math.ceil(line.length / width));
+        }
+        return lineCount;
+      }
+      #render() {
+        if (!this.#isSpinning) {
+          return;
+        }
+        const now = Date.now();
+        let frameAdvanced = false;
+        if (this.#currentFrame === -1 || now - this.#lastSpinnerFrameTime >= this.#spinner.interval) {
+          frameAdvanced = true;
+          this.#currentFrame = ++this.#currentFrame % getFrameCount(this.#spinner);
+          this.#lastSpinnerFrameTime = now;
+        }
+        if (frameAdvanced && typeof this.#onFrameUpdate === "function") {
+          this.#skipRender = true;
+          try {
+            this.#onFrameUpdate();
+          } finally {
+            this.#skipRender = false;
+          }
+        }
+        const colors = getYoctocolors();
+        const applyColor = ArrayIsArray(this.#color) ? (text) => `\x1B[38;2;${this.#color[0]};${this.#color[1]};${this.#color[2]}m${text}\x1B[39m` : colors[this.#color] ?? colors.cyan;
+        const frame = getFrame(this.#spinner, this.#currentFrame);
+        let string;
+        if (typeof this.#onRenderFrame === "function") {
+          string = this.#onRenderFrame(frame, this.#text, applyColor);
+        } else {
+          string = `${frame ? `${applyColor(frame)} ` : ""}${this.#text}`;
+        }
+        if (string) {
+          if (this.#indention.length) {
+            string = `${this.#indention}${string}`;
+          }
+          if (!this.#isInteractive) {
+            string += "\n";
+          }
+        }
+        if (this.#isInteractive) {
+          this.clear();
+        }
+        if (string) {
+          this.#write(string);
+        }
+        if (this.#isInteractive) {
+          this.#lines = this.#lineCount(string);
+        }
+      }
+      #showCursor() {
+        if (this.#isInteractive) {
+          this.#write("\x1B[?25h");
+        }
+      }
+      #subscribeToProcessEvents() {
+        process.once("SIGINT", this.#exitHandlerBound);
+        process.once("SIGTERM", this.#exitHandlerBound);
+      }
+      #symbolStop(symbolType, text) {
+        const symbols = getLogSymbols();
+        return this.stop(`${symbols[symbolType]}  ${text ?? this.#text}`);
+      }
+      #write(text) {
+        this.#stream.write(text);
+      }
+      #unsubscribeFromProcessEvents() {
+        process.off("SIGINT", this.#exitHandlerBound);
+        process.off("SIGTERM", this.#exitHandlerBound);
+      }
+      get color() {
+        return this.#color;
+      }
+      set color(value) {
+        this.#color = value;
+        this.#render();
+      }
+      get isSpinning() {
+        return this.#isSpinning;
+      }
+      get spinner() {
+        return this.#spinner;
+      }
+      set spinner(spinner) {
+        this.#spinner = spinner;
+      }
+      get text() {
+        if (this._textMethod) {
+          return this._textMethod;
+        }
+        return this.#text;
+      }
+      set text(value) {
+        if (this._textMethod && !this._inTextSetter) {
+          this._inTextSetter = true;
+          try {
+            this._textMethod(value);
+          } finally {
+            this._inTextSetter = false;
+          }
+          return;
+        }
+        this.#text = normalizeText(value);
+        if (!this.#skipRender) {
+          this.#render();
+        }
+      }
+      clear() {
+        if (!this.#isInteractive) {
+          return this;
+        }
+        this.#stream.cursorTo(0);
+        for (let index = 0; index < this.#lines; index += 1) {
+          if (index > 0) {
+            this.#stream.moveCursor(0, -1);
+          }
+          this.#stream.clearLine(1);
+        }
+        this.#lines = 0;
+        return this;
+      }
+      dedent(spaces = 2) {
+        this.#indention = this.#indention.slice(0, -spaces);
+        return this;
+      }
+      error(text) {
+        return this.#symbolStop("error", text);
+      }
+      indent(spaces = 2) {
+        this.#indention += " ".repeat(spaces);
+        return this;
+      }
+      info(text) {
+        return this.#symbolStop("info", text);
+      }
+      resetIndent() {
+        this.#indention = "";
+        return this;
+      }
+      start(text) {
+        const normalized = normalizeText(text);
+        if (normalized) {
+          this.#text = normalized;
+        }
+        if (this.isSpinning) {
+          return this;
+        }
+        this.#isSpinning = true;
+        this.#hideCursor();
+        this.#render();
+        this.#subscribeToProcessEvents();
+        if (this.#isInteractive) {
+          this.#timer = setInterval(() => {
+            this.#render();
+          }, this.#spinner.interval);
+        }
+        return this;
+      }
+      stop(finalText) {
+        if (!this.isSpinning) {
+          return this;
+        }
+        if (this.#timer) {
+          clearInterval(this.#timer);
+          this.#timer = void 0;
+        }
+        this.#isSpinning = false;
+        this.#showCursor();
+        this.clear();
+        this.#unsubscribeFromProcessEvents();
+        if (finalText) {
+          this.#write(`${this.#indention}${finalText}
+`);
+        }
+        return this;
+      }
+      success(text) {
+        return this.#symbolStop("success", text);
+      }
+      warning(text) {
+        return this.#symbolStop("warning", text);
+      }
+    };
+    module2.exports = /* @__PURE__ */ __name(function yoctoSpinner(options) {
+      return new YoctoSpinner2(options);
+    }, "yoctoSpinner");
+  }
+});
+
+// src/external/@socketregistry/yocto-spinner.js
+var YoctoSpinner = require_yocto_spinner();
+module.exports = YoctoSpinner;
+module.exports.default = YoctoSpinner;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@yarnpkg/extensions.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@yarnpkg/extensions.js
new file mode 100644
index 00000000..9bcd55f4
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/@yarnpkg/extensions.js
@@ -0,0 +1,1030 @@
+"use strict";
+/**
+ * Bundled from @yarnpkg/extensions
+ * This is a zero-dependency bundle created by esbuild.
+ */
+"use strict";
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __commonJS = (cb, mod) => function __require() {
+  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+
+// node_modules/.pnpm/@yarnpkg+extensions@2.0.6_@yarnpkg+core@4.5.0_typanion@3.14.0_/node_modules/@yarnpkg/extensions/lib/index.js
+var require_lib = __commonJS({
+  "node_modules/.pnpm/@yarnpkg+extensions@2.0.6_@yarnpkg+core@4.5.0_typanion@3.14.0_/node_modules/@yarnpkg/extensions/lib/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.packageExtensions = void 0;
+    var optionalPeerDep = {
+      optional: true
+    };
+    exports2.packageExtensions = [
+      // https://github.com/tailwindlabs/tailwindcss-aspect-ratio/pull/14
+      [`@tailwindcss/aspect-ratio@<0.2.1`, {
+        peerDependencies: {
+          [`tailwindcss`]: `^2.0.2`
+        }
+      }],
+      // https://github.com/tailwindlabs/tailwindcss-line-clamp/pull/6
+      [`@tailwindcss/line-clamp@<0.2.1`, {
+        peerDependencies: {
+          [`tailwindcss`]: `^2.0.2`
+        }
+      }],
+      // https://github.com/FullHuman/purgecss/commit/24116f394dc54c913e4fd254cf2d78c03db971f2
+      [`@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0`, {
+        peerDependencies: {
+          [`postcss`]: `^8.0.0`
+        }
+      }],
+      // https://github.com/SamVerschueren/stream-to-observable/pull/5
+      [`@samverschueren/stream-to-observable@<0.3.1`, {
+        peerDependenciesMeta: {
+          [`rxjs`]: optionalPeerDep,
+          [`zenObservable`]: optionalPeerDep
+        }
+      }],
+      // https://github.com/sindresorhus/any-observable/pull/25
+      [`any-observable@<0.5.1`, {
+        peerDependenciesMeta: {
+          [`rxjs`]: optionalPeerDep,
+          [`zenObservable`]: optionalPeerDep
+        }
+      }],
+      // https://github.com/keymetrics/pm2-io-agent/pull/125
+      [`@pm2/agent@<1.0.4`, {
+        dependencies: {
+          [`debug`]: `*`
+        }
+      }],
+      // https://github.com/visionmedia/debug/pull/727
+      [`debug@<4.2.0`, {
+        peerDependenciesMeta: {
+          [`supports-color`]: optionalPeerDep
+        }
+      }],
+      // https://github.com/sindresorhus/got/pull/1125
+      [`got@<11`, {
+        dependencies: {
+          [`@types/responselike`]: `^1.0.0`,
+          [`@types/keyv`]: `^3.1.1`
+        }
+      }],
+      // https://github.com/szmarczak/cacheable-lookup/pull/12
+      [`cacheable-lookup@<4.1.2`, {
+        dependencies: {
+          [`@types/keyv`]: `^3.1.1`
+        }
+      }],
+      // https://github.com/prisma-labs/http-link-dataloader/pull/22
+      [`http-link-dataloader@*`, {
+        peerDependencies: {
+          [`graphql`]: `^0.13.1 || ^14.0.0`
+        }
+      }],
+      // https://github.com/theia-ide/typescript-language-server/issues/144
+      [`typescript-language-server@*`, {
+        dependencies: {
+          [`vscode-jsonrpc`]: `^5.0.1`,
+          [`vscode-languageserver-protocol`]: `^3.15.0`
+        }
+      }],
+      // https://github.com/gucong3000/postcss-syntax/pull/46
+      [`postcss-syntax@*`, {
+        peerDependenciesMeta: {
+          [`postcss-html`]: optionalPeerDep,
+          [`postcss-jsx`]: optionalPeerDep,
+          [`postcss-less`]: optionalPeerDep,
+          [`postcss-markdown`]: optionalPeerDep,
+          [`postcss-scss`]: optionalPeerDep
+        }
+      }],
+      // https://github.com/cssinjs/jss/pull/1315
+      [`jss-plugin-rule-value-function@<=10.1.1`, {
+        dependencies: {
+          [`tiny-warning`]: `^1.0.2`
+        }
+      }],
+      // https://github.com/vadimdemedes/ink-select-input/pull/26
+      [`ink-select-input@<4.1.0`, {
+        peerDependencies: {
+          react: `^16.8.2`
+        }
+      }],
+      // https://github.com/xz64/license-webpack-plugin/pull/100
+      [`license-webpack-plugin@<2.3.18`, {
+        peerDependenciesMeta: {
+          [`webpack`]: optionalPeerDep
+        }
+      }],
+      // https://github.com/snowpackjs/snowpack/issues/3158
+      [`snowpack@>=3.3.0`, {
+        dependencies: {
+          [`node-gyp`]: `^7.1.0`
+        }
+      }],
+      // https://github.com/iarna/promise-inflight/pull/4
+      [`promise-inflight@*`, {
+        peerDependenciesMeta: {
+          [`bluebird`]: optionalPeerDep
+        }
+      }],
+      // https://github.com/casesandberg/reactcss/pull/153
+      [`reactcss@*`, {
+        peerDependencies: {
+          react: `*`
+        }
+      }],
+      // https://github.com/casesandberg/react-color/pull/746
+      [`react-color@<=2.19.0`, {
+        peerDependencies: {
+          react: `*`
+        }
+      }],
+      // https://github.com/angeloocana/gatsby-plugin-i18n/pull/145
+      [`gatsby-plugin-i18n@*`, {
+        dependencies: {
+          ramda: `^0.24.1`
+        }
+      }],
+      // https://github.com/3rd-Eden/useragent/pull/159
+      [`useragent@^2.0.0`, {
+        dependencies: {
+          request: `^2.88.0`,
+          yamlparser: `0.0.x`,
+          semver: `5.5.x`
+        }
+      }],
+      // https://github.com/apollographql/apollo-tooling/pull/2049
+      [`@apollographql/apollo-tools@<=0.5.2`, {
+        peerDependencies: {
+          graphql: `^14.2.1 || ^15.0.0`
+        }
+      }],
+      // https://github.com/mbrn/material-table/pull/2374
+      [`material-table@^2.0.0`, {
+        dependencies: {
+          "@babel/runtime": `^7.11.2`
+        }
+      }],
+      // https://github.com/babel/babel/pull/11118
+      [`@babel/parser@*`, {
+        dependencies: {
+          "@babel/types": `^7.8.3`
+        }
+      }],
+      // https://github.com/TypeStrong/fork-ts-checker-webpack-plugin/pull/507
+      [`fork-ts-checker-webpack-plugin@<=6.3.4`, {
+        peerDependencies: {
+          eslint: `>= 6`,
+          typescript: `>= 2.7`,
+          webpack: `>= 4`,
+          "vue-template-compiler": `*`
+        },
+        peerDependenciesMeta: {
+          eslint: optionalPeerDep,
+          "vue-template-compiler": optionalPeerDep
+        }
+      }],
+      // https://github.com/react-component/animate/pull/116
+      [`rc-animate@<=3.1.1`, {
+        peerDependencies: {
+          react: `>=16.9.0`,
+          "react-dom": `>=16.9.0`
+        }
+      }],
+      // https://github.com/react-bootstrap-table/react-bootstrap-table2/pull/1491
+      [`react-bootstrap-table2-paginator@*`, {
+        dependencies: {
+          classnames: `^2.2.6`
+        }
+      }],
+      // https://github.com/STRML/react-draggable/pull/525
+      [`react-draggable@<=4.4.3`, {
+        peerDependencies: {
+          react: `>= 16.3.0`,
+          "react-dom": `>= 16.3.0`
+        }
+      }],
+      // https://github.com/jaydenseric/apollo-upload-client/commit/336691cec6698661ab404649e4e8435750255803
+      [`apollo-upload-client@<14`, {
+        peerDependencies: {
+          graphql: `14 - 15`
+        }
+      }],
+      // https://github.com/algolia/react-instantsearch/pull/2975
+      [`react-instantsearch-core@<=6.7.0`, {
+        peerDependencies: {
+          algoliasearch: `>= 3.1 < 5`
+        }
+      }],
+      // https://github.com/algolia/react-instantsearch/pull/2975
+      [`react-instantsearch-dom@<=6.7.0`, {
+        dependencies: {
+          "react-fast-compare": `^3.0.0`
+        }
+      }],
+      // https://github.com/websockets/ws/pull/1626
+      [`ws@<7.2.1`, {
+        peerDependencies: {
+          bufferutil: `^4.0.1`,
+          "utf-8-validate": `^5.0.2`
+        },
+        peerDependenciesMeta: {
+          bufferutil: optionalPeerDep,
+          "utf-8-validate": optionalPeerDep
+        }
+      }],
+      // https://github.com/tajo/react-portal/pull/233
+      // https://github.com/tajo/react-portal/commit/daf85792c2fce25a3481b6f9132ef61a110f3d78
+      [`react-portal@<4.2.2`, {
+        peerDependencies: {
+          "react-dom": `^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0`
+        }
+      }],
+      // https://github.com/facebook/create-react-app/pull/9872
+      [`react-scripts@<=4.0.1`, {
+        peerDependencies: {
+          [`react`]: `*`
+        }
+      }],
+      // https://github.com/DevExpress/testcafe/pull/5872
+      [`testcafe@<=1.10.1`, {
+        dependencies: {
+          "@babel/plugin-transform-for-of": `^7.12.1`,
+          "@babel/runtime": `^7.12.5`
+        }
+      }],
+      // https://github.com/DevExpress/testcafe-legacy-api/pull/51
+      [`testcafe-legacy-api@<=4.2.0`, {
+        dependencies: {
+          "testcafe-hammerhead": `^17.0.1`,
+          "read-file-relative": `^1.2.0`
+        }
+      }],
+      // https://github.com/googleapis/nodejs-firestore/pull/1425
+      [`@google-cloud/firestore@<=4.9.3`, {
+        dependencies: {
+          protobufjs: `^6.8.6`
+        }
+      }],
+      // https://github.com/thinhle-agilityio/gatsby-source-apiserver/pull/58
+      [`gatsby-source-apiserver@*`, {
+        dependencies: {
+          [`babel-polyfill`]: `^6.26.0`
+        }
+      }],
+      // https://github.com/webpack/webpack-cli/pull/2097
+      [`@webpack-cli/package-utils@<=1.0.1-alpha.4`, {
+        dependencies: {
+          [`cross-spawn`]: `^7.0.3`
+        }
+      }],
+      // https://github.com/gatsbyjs/gatsby/pull/20156
+      [`gatsby-remark-prismjs@<3.3.28`, {
+        dependencies: {
+          [`lodash`]: `^4`
+        }
+      }],
+      // https://github.com/Creatiwity/gatsby-plugin-favicon/pull/65
+      [`gatsby-plugin-favicon@*`, {
+        peerDependencies: {
+          [`webpack`]: `*`
+        }
+      }],
+      // https://github.com/gatsbyjs/gatsby/pull/28759
+      [`gatsby-plugin-sharp@<=4.6.0-next.3`, {
+        dependencies: {
+          [`debug`]: `^4.3.1`
+        }
+      }],
+      // https://github.com/gatsbyjs/gatsby/pull/28759
+      [`gatsby-react-router-scroll@<=5.6.0-next.0`, {
+        dependencies: {
+          [`prop-types`]: `^15.7.2`
+        }
+      }],
+      // https://github.com/rebassjs/rebass/pull/934
+      [`@rebass/forms@*`, {
+        dependencies: {
+          [`@styled-system/should-forward-prop`]: `^5.0.0`
+        },
+        peerDependencies: {
+          react: `^16.8.6`
+        }
+      }],
+      // https://github.com/rebassjs/rebass/pull/934
+      [`rebass@*`, {
+        peerDependencies: {
+          react: `^16.8.6`
+        }
+      }],
+      // https://github.com/ant-design/react-slick/pull/95
+      [`@ant-design/react-slick@<=0.28.3`, {
+        peerDependencies: {
+          react: `>=16.0.0`
+        }
+      }],
+      // https://github.com/mqttjs/MQTT.js/pull/1266
+      [`mqtt@<4.2.7`, {
+        dependencies: {
+          duplexify: `^4.1.1`
+        }
+      }],
+      // https://github.com/vuetifyjs/vue-cli-plugins/pull/155
+      [`vue-cli-plugin-vuetify@<=2.0.3`, {
+        dependencies: {
+          semver: `^6.3.0`
+        },
+        peerDependenciesMeta: {
+          "sass-loader": optionalPeerDep,
+          "vuetify-loader": optionalPeerDep
+        }
+      }],
+      // https://github.com/vuetifyjs/vue-cli-plugins/pull/152
+      [`vue-cli-plugin-vuetify@<=2.0.4`, {
+        dependencies: {
+          "null-loader": `^3.0.0`
+        }
+      }],
+      // https://github.com/vuetifyjs/vue-cli-plugins/pull/324
+      [`vue-cli-plugin-vuetify@>=2.4.3`, {
+        peerDependencies: {
+          vue: `*`
+        }
+      }],
+      // https://github.com/vuetifyjs/vue-cli-plugins/pull/155
+      [`@vuetify/cli-plugin-utils@<=0.0.4`, {
+        dependencies: {
+          semver: `^6.3.0`
+        },
+        peerDependenciesMeta: {
+          "sass-loader": optionalPeerDep
+        }
+      }],
+      // https://github.com/vuejs/vue-cli/pull/6060/files#diff-857cfb6f3e9a676b0de4a00c2c712297068c038a7d5820c133b8d6aa8cceb146R28
+      [`@vue/cli-plugin-typescript@<=5.0.0-alpha.0`, {
+        dependencies: {
+          "babel-loader": `^8.1.0`
+        }
+      }],
+      // https://github.com/vuejs/vue-cli/pull/6456
+      [`@vue/cli-plugin-typescript@<=5.0.0-beta.0`, {
+        dependencies: {
+          "@babel/core": `^7.12.16`
+        },
+        peerDependencies: {
+          "vue-template-compiler": `^2.0.0`
+        },
+        peerDependenciesMeta: {
+          "vue-template-compiler": optionalPeerDep
+        }
+      }],
+      // https://github.com/apache/cordova-ios/pull/1105
+      [`cordova-ios@<=6.3.0`, {
+        dependencies: {
+          underscore: `^1.9.2`
+        }
+      }],
+      // https://github.com/apache/cordova-lib/pull/871
+      [`cordova-lib@<=10.0.1`, {
+        dependencies: {
+          underscore: `^1.9.2`
+        }
+      }],
+      // https://github.com/creationix/git-node-fs/pull/8
+      [`git-node-fs@*`, {
+        peerDependencies: {
+          "js-git": `^0.7.8`
+        },
+        peerDependenciesMeta: {
+          "js-git": optionalPeerDep
+        }
+      }],
+      // https://github.com/tj/consolidate.js/pull/339
+      // https://github.com/tj/consolidate.js/commit/6068c17fd443897e540d69b1786db07a0d64b53b
+      [`consolidate@<0.16.0`, {
+        peerDependencies: {
+          mustache: `^3.0.0`
+        },
+        peerDependenciesMeta: {
+          mustache: optionalPeerDep
+        }
+      }],
+      // https://github.com/tj/consolidate.js/pull/339
+      [`consolidate@<=0.16.0`, {
+        peerDependencies: {
+          velocityjs: `^2.0.1`,
+          tinyliquid: `^0.2.34`,
+          "liquid-node": `^3.0.1`,
+          jade: `^1.11.0`,
+          "then-jade": `*`,
+          dust: `^0.3.0`,
+          "dustjs-helpers": `^1.7.4`,
+          "dustjs-linkedin": `^2.7.5`,
+          swig: `^1.4.2`,
+          "swig-templates": `^2.0.3`,
+          "razor-tmpl": `^1.3.1`,
+          atpl: `>=0.7.6`,
+          liquor: `^0.0.5`,
+          twig: `^1.15.2`,
+          ejs: `^3.1.5`,
+          eco: `^1.1.0-rc-3`,
+          jazz: `^0.0.18`,
+          jqtpl: `~1.1.0`,
+          hamljs: `^0.6.2`,
+          hamlet: `^0.3.3`,
+          whiskers: `^0.4.0`,
+          "haml-coffee": `^1.14.1`,
+          "hogan.js": `^3.0.2`,
+          templayed: `>=0.2.3`,
+          handlebars: `^4.7.6`,
+          underscore: `^1.11.0`,
+          lodash: `^4.17.20`,
+          pug: `^3.0.0`,
+          "then-pug": `*`,
+          qejs: `^3.0.5`,
+          walrus: `^0.10.1`,
+          mustache: `^4.0.1`,
+          just: `^0.1.8`,
+          ect: `^0.5.9`,
+          mote: `^0.2.0`,
+          toffee: `^0.3.6`,
+          dot: `^1.1.3`,
+          "bracket-template": `^1.1.5`,
+          ractive: `^1.3.12`,
+          nunjucks: `^3.2.2`,
+          htmling: `^0.0.8`,
+          "babel-core": `^6.26.3`,
+          plates: `~0.4.11`,
+          "react-dom": `^16.13.1`,
+          react: `^16.13.1`,
+          "arc-templates": `^0.5.3`,
+          vash: `^0.13.0`,
+          slm: `^2.0.0`,
+          marko: `^3.14.4`,
+          teacup: `^2.0.0`,
+          "coffee-script": `^1.12.7`,
+          squirrelly: `^5.1.0`,
+          twing: `^5.0.2`
+        },
+        peerDependenciesMeta: {
+          velocityjs: optionalPeerDep,
+          tinyliquid: optionalPeerDep,
+          "liquid-node": optionalPeerDep,
+          jade: optionalPeerDep,
+          "then-jade": optionalPeerDep,
+          dust: optionalPeerDep,
+          "dustjs-helpers": optionalPeerDep,
+          "dustjs-linkedin": optionalPeerDep,
+          swig: optionalPeerDep,
+          "swig-templates": optionalPeerDep,
+          "razor-tmpl": optionalPeerDep,
+          atpl: optionalPeerDep,
+          liquor: optionalPeerDep,
+          twig: optionalPeerDep,
+          ejs: optionalPeerDep,
+          eco: optionalPeerDep,
+          jazz: optionalPeerDep,
+          jqtpl: optionalPeerDep,
+          hamljs: optionalPeerDep,
+          hamlet: optionalPeerDep,
+          whiskers: optionalPeerDep,
+          "haml-coffee": optionalPeerDep,
+          "hogan.js": optionalPeerDep,
+          templayed: optionalPeerDep,
+          handlebars: optionalPeerDep,
+          underscore: optionalPeerDep,
+          lodash: optionalPeerDep,
+          pug: optionalPeerDep,
+          "then-pug": optionalPeerDep,
+          qejs: optionalPeerDep,
+          walrus: optionalPeerDep,
+          mustache: optionalPeerDep,
+          just: optionalPeerDep,
+          ect: optionalPeerDep,
+          mote: optionalPeerDep,
+          toffee: optionalPeerDep,
+          dot: optionalPeerDep,
+          "bracket-template": optionalPeerDep,
+          ractive: optionalPeerDep,
+          nunjucks: optionalPeerDep,
+          htmling: optionalPeerDep,
+          "babel-core": optionalPeerDep,
+          plates: optionalPeerDep,
+          "react-dom": optionalPeerDep,
+          react: optionalPeerDep,
+          "arc-templates": optionalPeerDep,
+          vash: optionalPeerDep,
+          slm: optionalPeerDep,
+          marko: optionalPeerDep,
+          teacup: optionalPeerDep,
+          "coffee-script": optionalPeerDep,
+          squirrelly: optionalPeerDep,
+          twing: optionalPeerDep
+        }
+      }],
+      // https://github.com/vuejs/vue-loader/pull/1853
+      // https://github.com/vuejs/vue-loader/commit/089473af97077b8e14b3feff48d32d2733ad792c
+      [`vue-loader@<=16.3.3`, {
+        peerDependencies: {
+          "@vue/compiler-sfc": `^3.0.8`,
+          webpack: `^4.1.0 || ^5.0.0-0`
+        },
+        peerDependenciesMeta: {
+          "@vue/compiler-sfc": optionalPeerDep
+        }
+      }],
+      // https://github.com/vuejs/vue-loader/pull/1944
+      [`vue-loader@^16.7.0`, {
+        peerDependencies: {
+          "@vue/compiler-sfc": `^3.0.8`,
+          vue: `^3.2.13`
+        },
+        peerDependenciesMeta: {
+          "@vue/compiler-sfc": optionalPeerDep,
+          vue: optionalPeerDep
+        }
+      }],
+      // https://github.com/salesforce-ux/scss-parser/pull/43
+      [`scss-parser@<=1.0.5`, {
+        dependencies: {
+          lodash: `^4.17.21`
+        }
+      }],
+      // https://github.com/salesforce-ux/query-ast/pull/25
+      [`query-ast@<1.0.5`, {
+        dependencies: {
+          lodash: `^4.17.21`
+        }
+      }],
+      // https://github.com/reduxjs/redux-thunk/pull/251
+      [`redux-thunk@<=2.3.0`, {
+        peerDependencies: {
+          redux: `^4.0.0`
+        }
+      }],
+      // https://github.com/snowpackjs/snowpack/pull/3556
+      [`skypack@<=0.3.2`, {
+        dependencies: {
+          tar: `^6.1.0`
+        }
+      }],
+      // https://github.com/npm/metavuln-calculator/pull/8
+      [`@npmcli/metavuln-calculator@<2.0.0`, {
+        dependencies: {
+          "json-parse-even-better-errors": `^2.3.1`
+        }
+      }],
+      // https://github.com/npm/bin-links/pull/17
+      [`bin-links@<2.3.0`, {
+        dependencies: {
+          "mkdirp-infer-owner": `^1.0.2`
+        }
+      }],
+      // https://github.com/snowpackjs/rollup-plugin-polyfill-node/pull/30
+      [`rollup-plugin-polyfill-node@<=0.8.0`, {
+        peerDependencies: {
+          rollup: `^1.20.0 || ^2.0.0`
+        }
+      }],
+      // https://github.com/snowpackjs/snowpack/pull/3673
+      [`snowpack@<3.8.6`, {
+        dependencies: {
+          "magic-string": `^0.25.7`
+        }
+      }],
+      // https://github.com/elm-community/elm-webpack-loader/pull/202
+      [`elm-webpack-loader@*`, {
+        dependencies: {
+          temp: `^0.9.4`
+        }
+      }],
+      // https://github.com/winstonjs/winston-transport/pull/58
+      [`winston-transport@<=4.4.0`, {
+        dependencies: {
+          logform: `^2.2.0`
+        }
+      }],
+      // https://github.com/vire/jest-vue-preprocessor/pull/177
+      [`jest-vue-preprocessor@*`, {
+        dependencies: {
+          "@babel/core": `7.8.7`,
+          "@babel/template": `7.8.6`
+        },
+        peerDependencies: {
+          pug: `^2.0.4`
+        },
+        peerDependenciesMeta: {
+          pug: optionalPeerDep
+        }
+      }],
+      // https://github.com/rt2zz/redux-persist/pull/1336
+      [`redux-persist@*`, {
+        peerDependencies: {
+          react: `>=16`
+        },
+        peerDependenciesMeta: {
+          react: optionalPeerDep
+        }
+      }],
+      // https://github.com/paixaop/node-sodium/pull/159
+      [`sodium@>=3`, {
+        dependencies: {
+          "node-gyp": `^3.8.0`
+        }
+      }],
+      // https://github.com/gajus/babel-plugin-graphql-tag/pull/63
+      [`babel-plugin-graphql-tag@<=3.1.0`, {
+        peerDependencies: {
+          graphql: `^14.0.0 || ^15.0.0`
+        }
+      }],
+      // https://github.com/microsoft/playwright/pull/8501
+      [`@playwright/test@<=1.14.1`, {
+        dependencies: {
+          "jest-matcher-utils": `^26.4.2`
+        }
+      }],
+      // https://github.com/gatsbyjs/gatsby/pull/32954
+      ...[
+        `babel-plugin-remove-graphql-queries@<3.14.0-next.1`,
+        `babel-preset-gatsby-package@<1.14.0-next.1`,
+        `create-gatsby@<1.14.0-next.1`,
+        `gatsby-admin@<0.24.0-next.1`,
+        `gatsby-cli@<3.14.0-next.1`,
+        `gatsby-core-utils@<2.14.0-next.1`,
+        `gatsby-design-tokens@<3.14.0-next.1`,
+        `gatsby-legacy-polyfills@<1.14.0-next.1`,
+        `gatsby-plugin-benchmark-reporting@<1.14.0-next.1`,
+        `gatsby-plugin-graphql-config@<0.23.0-next.1`,
+        `gatsby-plugin-image@<1.14.0-next.1`,
+        `gatsby-plugin-mdx@<2.14.0-next.1`,
+        `gatsby-plugin-netlify-cms@<5.14.0-next.1`,
+        `gatsby-plugin-no-sourcemaps@<3.14.0-next.1`,
+        `gatsby-plugin-page-creator@<3.14.0-next.1`,
+        `gatsby-plugin-preact@<5.14.0-next.1`,
+        `gatsby-plugin-preload-fonts@<2.14.0-next.1`,
+        `gatsby-plugin-schema-snapshot@<2.14.0-next.1`,
+        `gatsby-plugin-styletron@<6.14.0-next.1`,
+        `gatsby-plugin-subfont@<3.14.0-next.1`,
+        `gatsby-plugin-utils@<1.14.0-next.1`,
+        `gatsby-recipes@<0.25.0-next.1`,
+        `gatsby-source-shopify@<5.6.0-next.1`,
+        `gatsby-source-wikipedia@<3.14.0-next.1`,
+        `gatsby-transformer-screenshot@<3.14.0-next.1`,
+        `gatsby-worker@<0.5.0-next.1`
+      ].map((descriptorString) => [
+        descriptorString,
+        {
+          dependencies: {
+            "@babel/runtime": `^7.14.8`
+          }
+        }
+      ]),
+      // Originally fixed in https://github.com/gatsbyjs/gatsby/pull/31837 (https://github.com/gatsbyjs/gatsby/commit/6378692d7ec1eb902520720e27aca97e8eb42c21)
+      // Version updated and added in https://github.com/gatsbyjs/gatsby/pull/32928
+      [`gatsby-core-utils@<2.14.0-next.1`, {
+        dependencies: {
+          got: `8.3.2`
+        }
+      }],
+      // https://github.com/gatsbyjs/gatsby/pull/32861
+      [`gatsby-plugin-gatsby-cloud@<=3.1.0-next.0`, {
+        dependencies: {
+          "gatsby-core-utils": `^2.13.0-next.0`
+        }
+      }],
+      // https://github.com/gatsbyjs/gatsby/pull/31837
+      [`gatsby-plugin-gatsby-cloud@<=3.2.0-next.1`, {
+        peerDependencies: {
+          webpack: `*`
+        }
+      }],
+      // https://github.com/gatsbyjs/gatsby/pull/31837
+      [`babel-plugin-remove-graphql-queries@<=3.14.0-next.1`, {
+        dependencies: {
+          "gatsby-core-utils": `^2.8.0-next.1`
+        }
+      }],
+      // https://github.com/gatsbyjs/gatsby/pull/32861
+      [`gatsby-plugin-netlify@3.13.0-next.1`, {
+        dependencies: {
+          "gatsby-core-utils": `^2.13.0-next.0`
+        }
+      }],
+      // https://github.com/paul-soporan/clipanion-v3-codemod/pull/1
+      [`clipanion-v3-codemod@<=0.2.0`, {
+        peerDependencies: {
+          jscodeshift: `^0.11.0`
+        }
+      }],
+      // https://github.com/FormidableLabs/react-live/pull/180
+      [`react-live@*`, {
+        peerDependencies: {
+          "react-dom": `*`,
+          react: `*`
+        }
+      }],
+      // https://github.com/webpack/webpack/pull/11190
+      [`webpack@<4.44.1`, {
+        peerDependenciesMeta: {
+          "webpack-cli": optionalPeerDep,
+          "webpack-command": optionalPeerDep
+        }
+      }],
+      // https://github.com/webpack/webpack/pull/11189
+      [`webpack@<5.0.0-beta.23`, {
+        peerDependenciesMeta: {
+          "webpack-cli": optionalPeerDep
+        }
+      }],
+      // https://github.com/webpack/webpack-dev-server/pull/2396
+      [`webpack-dev-server@<3.10.2`, {
+        peerDependenciesMeta: {
+          "webpack-cli": optionalPeerDep
+        }
+      }],
+      // https://github.com/slorber/responsive-loader/pull/1/files
+      [`@docusaurus/responsive-loader@<1.5.0`, {
+        peerDependenciesMeta: {
+          sharp: optionalPeerDep,
+          jimp: optionalPeerDep
+        }
+      }],
+      // https://github.com/import-js/eslint-plugin-import/pull/2283
+      [`eslint-module-utils@*`, {
+        peerDependenciesMeta: {
+          "eslint-import-resolver-node": optionalPeerDep,
+          "eslint-import-resolver-typescript": optionalPeerDep,
+          "eslint-import-resolver-webpack": optionalPeerDep,
+          "@typescript-eslint/parser": optionalPeerDep
+        }
+      }],
+      // https://github.com/import-js/eslint-plugin-import/pull/2283
+      [`eslint-plugin-import@*`, {
+        peerDependenciesMeta: {
+          "@typescript-eslint/parser": optionalPeerDep
+        }
+      }],
+      // https://github.com/GoogleChromeLabs/critters/pull/91
+      [`critters-webpack-plugin@<3.0.2`, {
+        peerDependenciesMeta: {
+          "html-webpack-plugin": optionalPeerDep
+        }
+      }],
+      // https://github.com/terser/terser/commit/05b23eeb682d732484ad51b19bf528258fd5dc2a
+      [`terser@<=5.10.0`, {
+        dependencies: {
+          acorn: `^8.5.0`
+        }
+      }],
+      // https://github.com/facebook/create-react-app/pull/12364
+      [`babel-preset-react-app@10.0.x <10.0.2`, {
+        dependencies: {
+          "@babel/plugin-proposal-private-property-in-object": `^7.16.7`
+        }
+      }],
+      // https://github.com/facebook/create-react-app/pull/11751
+      [`eslint-config-react-app@*`, {
+        peerDependenciesMeta: {
+          typescript: optionalPeerDep
+        }
+      }],
+      // https://github.com/vuejs/eslint-config-typescript/pull/39
+      [`@vue/eslint-config-typescript@<11.0.0`, {
+        peerDependenciesMeta: {
+          typescript: optionalPeerDep
+        }
+      }],
+      // https://github.com/antfu/unplugin-vue2-script-setup/pull/100
+      [`unplugin-vue2-script-setup@<0.9.1`, {
+        peerDependencies: {
+          "@vue/composition-api": `^1.4.3`,
+          "@vue/runtime-dom": `^3.2.26`
+        }
+      }],
+      // https://github.com/cypress-io/snapshot/pull/159
+      [`@cypress/snapshot@*`, {
+        dependencies: {
+          debug: `^3.2.7`
+        }
+      }],
+      // https://github.com/wemaintain/auto-relay/pull/95
+      [`auto-relay@<=0.14.0`, {
+        peerDependencies: {
+          "reflect-metadata": `^0.1.13`
+        }
+      }],
+      // https://github.com/JuniorTour/vue-template-babel-compiler/pull/40
+      [`vue-template-babel-compiler@<1.2.0`, {
+        peerDependencies: {
+          [`vue-template-compiler`]: `^2.6.0`
+        }
+      }],
+      // https://github.com/parcel-bundler/parcel/pull/7977
+      [`@parcel/transformer-image@<2.5.0`, {
+        peerDependencies: {
+          [`@parcel/core`]: `*`
+        }
+      }],
+      // https://github.com/parcel-bundler/parcel/pull/7977
+      [`@parcel/transformer-js@<2.5.0`, {
+        peerDependencies: {
+          [`@parcel/core`]: `*`
+        }
+      }],
+      // Experiment to unblock the usage of Parcel in E2E tests
+      [`parcel@*`, {
+        peerDependenciesMeta: {
+          [`@parcel/core`]: optionalPeerDep
+        }
+      }],
+      // This doesn't have an upstream PR.
+      // The auto types causes two instances of eslint-config-react-app,
+      // one that has access to @types/eslint and one that doesn't.
+      // ESLint doesn't allow the same plugin to show up multiple times so it throws.
+      // As a temporary workaround until create-react-app fixes their ESLint
+      // setup we make eslint a peer dependency /w fallback.
+      // TODO: Lock the range when create-react-app fixes their ESLint setup
+      [`react-scripts@*`, {
+        peerDependencies: {
+          [`eslint`]: `*`
+        }
+      }],
+      // https://github.com/focus-trap/focus-trap-react/pull/691
+      [`focus-trap-react@^8.0.0`, {
+        dependencies: {
+          tabbable: `^5.3.2`
+        }
+      }],
+      // https://github.com/bokuweb/react-rnd/pull/864
+      [`react-rnd@<10.3.7`, {
+        peerDependencies: {
+          react: `>=16.3.0`,
+          "react-dom": `>=16.3.0`
+        }
+      }],
+      // https://github.com/jdesboeufs/connect-mongo/pull/458
+      // https://github.com/jdesboeufs/connect-mongo/commit/f462a2598d1dea0722a89e1f101937d427462458
+      [`connect-mongo@<5.0.0`, {
+        peerDependencies: {
+          "express-session": `^1.17.1`
+        }
+      }],
+      // https://github.com/intlify/vue-i18n-next/commit/ed932b9e575807dc27c30573b280ad8ae48e98c9
+      [`vue-i18n@<9`, {
+        peerDependencies: {
+          vue: `^2`
+        }
+      }],
+      // https://github.com/vuejs/router/commit/c2305083a8fcb42d1bb1f3f0d92f09930124b530
+      [`vue-router@<4`, {
+        peerDependencies: {
+          vue: `^2`
+        }
+      }],
+      // https://github.com/unifiedjs/unified/pull/146
+      [`unified@<10`, {
+        dependencies: {
+          "@types/unist": `^2.0.0`
+        }
+      }],
+      // https://github.com/ntkme/react-github-btn/pull/23
+      [`react-github-btn@<=1.3.0`, {
+        peerDependencies: {
+          react: `>=16.3.0`
+        }
+      }],
+      // There are two candidates upstream, clean this up when either is merged.
+      // - https://github.com/facebook/create-react-app/pull/11526
+      // - https://github.com/facebook/create-react-app/pull/11716
+      [`react-dev-utils@*`, {
+        peerDependencies: {
+          typescript: `>=2.7`,
+          webpack: `>=4`
+        },
+        peerDependenciesMeta: {
+          typescript: optionalPeerDep
+        }
+      }],
+      // https://github.com/asyncapi/asyncapi-react/pull/614
+      [`@asyncapi/react-component@<=1.0.0-next.39`, {
+        peerDependencies: {
+          react: `>=16.8.0`,
+          "react-dom": `>=16.8.0`
+        }
+      }],
+      // https://github.com/xojs/xo/pull/678
+      [`xo@*`, {
+        peerDependencies: {
+          webpack: `>=1.11.0`
+        },
+        peerDependenciesMeta: {
+          webpack: optionalPeerDep
+        }
+      }],
+      // https://github.com/gatsbyjs/gatsby/pull/36230
+      [`babel-plugin-remove-graphql-queries@<=4.20.0-next.0`, {
+        dependencies: {
+          "@babel/types": `^7.15.4`
+        }
+      }],
+      // https://github.com/gatsbyjs/gatsby/pull/36230
+      [`gatsby-plugin-page-creator@<=4.20.0-next.1`, {
+        dependencies: {
+          "fs-extra": `^10.1.0`
+        }
+      }],
+      // https://github.com/gatsbyjs/gatsby/pull/36230
+      [`gatsby-plugin-utils@<=3.14.0-next.1`, {
+        dependencies: {
+          fastq: `^1.13.0`
+        },
+        peerDependencies: {
+          graphql: `^15.0.0`
+        }
+      }],
+      // https://github.com/gatsbyjs/gatsby/pull/33724
+      [`gatsby-plugin-mdx@<3.1.0-next.1`, {
+        dependencies: {
+          mkdirp: `^1.0.4`
+        }
+      }],
+      // https://github.com/gatsbyjs/gatsby/pull/33170
+      [`gatsby-plugin-mdx@^2`, {
+        peerDependencies: {
+          gatsby: `^3.0.0-next`
+        }
+      }],
+      // https://github.com/thecodrr/fdir/pull/76
+      // https://github.com/thecodrr/fdir/pull/80
+      [`fdir@<=5.2.0`, {
+        peerDependencies: {
+          picomatch: `2.x`
+        },
+        peerDependenciesMeta: {
+          picomatch: optionalPeerDep
+        }
+      }],
+      // https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/pull/61
+      [`babel-plugin-transform-typescript-metadata@<=0.3.2`, {
+        peerDependencies: {
+          "@babel/core": `^7`,
+          "@babel/traverse": `^7`
+        },
+        peerDependenciesMeta: {
+          "@babel/traverse": optionalPeerDep
+        }
+      }],
+      // https://github.com/graphql-compose/graphql-compose/pull/398
+      [`graphql-compose@>=9.0.10`, {
+        peerDependencies: {
+          graphql: `^14.2.0 || ^15.0.0 || ^16.0.0`
+        }
+      }],
+      // https://github.com/vuetifyjs/vuetify-loader/commit/6634db3218dcc706db1c5c9e90f338ce76e9fff3
+      [`vite-plugin-vuetify@<=1.0.2`, {
+        peerDependencies: {
+          vue: `^3.0.0`
+        }
+      }],
+      // https://github.com/vuetifyjs/vuetify-loader/commit/6634db3218dcc706db1c5c9e90f338ce76e9fff3
+      [`webpack-plugin-vuetify@<=2.0.1`, {
+        peerDependencies: {
+          vue: `^3.2.6`
+        }
+      }],
+      // https://github.com/pzmosquito/eslint-import-resolver-vite/pull/22
+      // https://github.com/pzmosquito/eslint-import-resolver-vite/commit/97b8111b03d3f8c66506732ac965e906568e8dc1#diff-7ae45ad102eab3b6d7e7896acd08c427a9b25b346470d7bc6507b6481575d519
+      [`eslint-import-resolver-vite@<2.0.1`, {
+        dependencies: {
+          debug: `^4.3.4`,
+          resolve: `^1.22.8`
+        }
+      }],
+      // https://github.com/iamhosseindhv/notistack/issues/561
+      // https://github.com/iamhosseindhv/notistack/pull/562
+      [`notistack@^3.0.0`, {
+        dependencies: {
+          csstype: `^3.0.10`
+        }
+      }],
+      // https://github.com/fastify/fastify-type-provider-typebox/issues/114
+      // https://github.com/fastify/fastify-type-provider-typebox/pull/165
+      [`@fastify/type-provider-typebox@^5.0.0`, {
+        peerDependencies: {
+          fastify: `^5.0.0`
+        }
+      }],
+      [`@fastify/type-provider-typebox@^4.0.0`, {
+        peerDependencies: {
+          fastify: `^4.0.0`
+        }
+      }]
+    ];
+  }
+});
+
+// src/external/@yarnpkg/extensions.js
+module.exports = require_lib();
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/adm-zip.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/adm-zip.js
new file mode 100644
index 00000000..8134a568
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/adm-zip.js
@@ -0,0 +1,2696 @@
+"use strict";
+/**
+ * Bundled from adm-zip
+ * This is a zero-dependency bundle created by esbuild.
+ */
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+var __commonJS = (cb, mod) => function __require() {
+  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+
+// node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/constants.js
+var require_constants = __commonJS({
+  "node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/constants.js"(exports2, module2) {
+    module2.exports = {
+      /* The local file header */
+      LOCHDR: 30,
+      // LOC header size
+      LOCSIG: 67324752,
+      // "PK\003\004"
+      LOCVER: 4,
+      // version needed to extract
+      LOCFLG: 6,
+      // general purpose bit flag
+      LOCHOW: 8,
+      // compression method
+      LOCTIM: 10,
+      // modification time (2 bytes time, 2 bytes date)
+      LOCCRC: 14,
+      // uncompressed file crc-32 value
+      LOCSIZ: 18,
+      // compressed size
+      LOCLEN: 22,
+      // uncompressed size
+      LOCNAM: 26,
+      // filename length
+      LOCEXT: 28,
+      // extra field length
+      /* The Data descriptor */
+      EXTSIG: 134695760,
+      // "PK\007\008"
+      EXTHDR: 16,
+      // EXT header size
+      EXTCRC: 4,
+      // uncompressed file crc-32 value
+      EXTSIZ: 8,
+      // compressed size
+      EXTLEN: 12,
+      // uncompressed size
+      /* The central directory file header */
+      CENHDR: 46,
+      // CEN header size
+      CENSIG: 33639248,
+      // "PK\001\002"
+      CENVEM: 4,
+      // version made by
+      CENVER: 6,
+      // version needed to extract
+      CENFLG: 8,
+      // encrypt, decrypt flags
+      CENHOW: 10,
+      // compression method
+      CENTIM: 12,
+      // modification time (2 bytes time, 2 bytes date)
+      CENCRC: 16,
+      // uncompressed file crc-32 value
+      CENSIZ: 20,
+      // compressed size
+      CENLEN: 24,
+      // uncompressed size
+      CENNAM: 28,
+      // filename length
+      CENEXT: 30,
+      // extra field length
+      CENCOM: 32,
+      // file comment length
+      CENDSK: 34,
+      // volume number start
+      CENATT: 36,
+      // internal file attributes
+      CENATX: 38,
+      // external file attributes (host system dependent)
+      CENOFF: 42,
+      // LOC header offset
+      /* The entries in the end of central directory */
+      ENDHDR: 22,
+      // END header size
+      ENDSIG: 101010256,
+      // "PK\005\006"
+      ENDSUB: 8,
+      // number of entries on this disk
+      ENDTOT: 10,
+      // total number of entries
+      ENDSIZ: 12,
+      // central directory size in bytes
+      ENDOFF: 16,
+      // offset of first CEN header
+      ENDCOM: 20,
+      // zip file comment length
+      END64HDR: 20,
+      // zip64 END header size
+      END64SIG: 117853008,
+      // zip64 Locator signature, "PK\006\007"
+      END64START: 4,
+      // number of the disk with the start of the zip64
+      END64OFF: 8,
+      // relative offset of the zip64 end of central directory
+      END64NUMDISKS: 16,
+      // total number of disks
+      ZIP64SIG: 101075792,
+      // zip64 signature, "PK\006\006"
+      ZIP64HDR: 56,
+      // zip64 record minimum size
+      ZIP64LEAD: 12,
+      // leading bytes at the start of the record, not counted by the value stored in ZIP64SIZE
+      ZIP64SIZE: 4,
+      // zip64 size of the central directory record
+      ZIP64VEM: 12,
+      // zip64 version made by
+      ZIP64VER: 14,
+      // zip64 version needed to extract
+      ZIP64DSK: 16,
+      // zip64 number of this disk
+      ZIP64DSKDIR: 20,
+      // number of the disk with the start of the record directory
+      ZIP64SUB: 24,
+      // number of entries on this disk
+      ZIP64TOT: 32,
+      // total number of entries
+      ZIP64SIZB: 40,
+      // zip64 central directory size in bytes
+      ZIP64OFF: 48,
+      // offset of start of central directory with respect to the starting disk number
+      ZIP64EXTRA: 56,
+      // extensible data sector
+      /* Compression methods */
+      STORED: 0,
+      // no compression
+      SHRUNK: 1,
+      // shrunk
+      REDUCED1: 2,
+      // reduced with compression factor 1
+      REDUCED2: 3,
+      // reduced with compression factor 2
+      REDUCED3: 4,
+      // reduced with compression factor 3
+      REDUCED4: 5,
+      // reduced with compression factor 4
+      IMPLODED: 6,
+      // imploded
+      // 7 reserved for Tokenizing compression algorithm
+      DEFLATED: 8,
+      // deflated
+      ENHANCED_DEFLATED: 9,
+      // enhanced deflated
+      PKWARE: 10,
+      // PKWare DCL imploded
+      // 11 reserved by PKWARE
+      BZIP2: 12,
+      //  compressed using BZIP2
+      // 13 reserved by PKWARE
+      LZMA: 14,
+      // LZMA
+      // 15-17 reserved by PKWARE
+      IBM_TERSE: 18,
+      // compressed using IBM TERSE
+      IBM_LZ77: 19,
+      // IBM LZ77 z
+      AES_ENCRYPT: 99,
+      // WinZIP AES encryption method
+      /* General purpose bit flag */
+      // values can obtained with expression 2**bitnr
+      FLG_ENC: 1,
+      // Bit 0: encrypted file
+      FLG_COMP1: 2,
+      // Bit 1, compression option
+      FLG_COMP2: 4,
+      // Bit 2, compression option
+      FLG_DESC: 8,
+      // Bit 3, data descriptor
+      FLG_ENH: 16,
+      // Bit 4, enhanced deflating
+      FLG_PATCH: 32,
+      // Bit 5, indicates that the file is compressed patched data.
+      FLG_STR: 64,
+      // Bit 6, strong encryption (patented)
+      // Bits 7-10: Currently unused.
+      FLG_EFS: 2048,
+      // Bit 11: Language encoding flag (EFS)
+      // Bit 12: Reserved by PKWARE for enhanced compression.
+      // Bit 13: encrypted the Central Directory (patented).
+      // Bits 14-15: Reserved by PKWARE.
+      FLG_MSK: 4096,
+      // mask header values
+      /* Load type */
+      FILE: 2,
+      BUFFER: 1,
+      NONE: 0,
+      /* 4.5 Extensible data fields */
+      EF_ID: 0,
+      EF_SIZE: 2,
+      /* Header IDs */
+      ID_ZIP64: 1,
+      ID_AVINFO: 7,
+      ID_PFS: 8,
+      ID_OS2: 9,
+      ID_NTFS: 10,
+      ID_OPENVMS: 12,
+      ID_UNIX: 13,
+      ID_FORK: 14,
+      ID_PATCH: 15,
+      ID_X509_PKCS7: 20,
+      ID_X509_CERTID_F: 21,
+      ID_X509_CERTID_C: 22,
+      ID_STRONGENC: 23,
+      ID_RECORD_MGT: 24,
+      ID_X509_PKCS7_RL: 25,
+      ID_IBM1: 101,
+      ID_IBM2: 102,
+      ID_POSZIP: 18064,
+      EF_ZIP64_OR_32: 4294967295,
+      EF_ZIP64_OR_16: 65535,
+      EF_ZIP64_SUNCOMP: 0,
+      EF_ZIP64_SCOMP: 8,
+      EF_ZIP64_RHO: 16,
+      EF_ZIP64_DSN: 24
+    };
+  }
+});
+
+// node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/errors.js
+var require_errors = __commonJS({
+  "node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/errors.js"(exports2) {
+    var errors = {
+      /* Header error messages */
+      INVALID_LOC: "Invalid LOC header (bad signature)",
+      INVALID_CEN: "Invalid CEN header (bad signature)",
+      INVALID_END: "Invalid END header (bad signature)",
+      /* Descriptor */
+      DESCRIPTOR_NOT_EXIST: "No descriptor present",
+      DESCRIPTOR_UNKNOWN: "Unknown descriptor format",
+      DESCRIPTOR_FAULTY: "Descriptor data is malformed",
+      /* ZipEntry error messages*/
+      NO_DATA: "Nothing to decompress",
+      BAD_CRC: "CRC32 checksum failed {0}",
+      FILE_IN_THE_WAY: "There is a file in the way: {0}",
+      UNKNOWN_METHOD: "Invalid/unsupported compression method",
+      /* Inflater error messages */
+      AVAIL_DATA: "inflate::Available inflate data did not terminate",
+      INVALID_DISTANCE: "inflate::Invalid literal/length or distance code in fixed or dynamic block",
+      TO_MANY_CODES: "inflate::Dynamic block code description: too many length or distance codes",
+      INVALID_REPEAT_LEN: "inflate::Dynamic block code description: repeat more than specified lengths",
+      INVALID_REPEAT_FIRST: "inflate::Dynamic block code description: repeat lengths with no first length",
+      INCOMPLETE_CODES: "inflate::Dynamic block code description: code lengths codes incomplete",
+      INVALID_DYN_DISTANCE: "inflate::Dynamic block code description: invalid distance code lengths",
+      INVALID_CODES_LEN: "inflate::Dynamic block code description: invalid literal/length code lengths",
+      INVALID_STORE_BLOCK: "inflate::Stored block length did not match one's complement",
+      INVALID_BLOCK_TYPE: "inflate::Invalid block type (type == 3)",
+      /* ADM-ZIP error messages */
+      CANT_EXTRACT_FILE: "Could not extract the file",
+      CANT_OVERRIDE: "Target file already exists",
+      DISK_ENTRY_TOO_LARGE: "Number of disk entries is too large",
+      NO_ZIP: "No zip file was loaded",
+      NO_ENTRY: "Entry doesn't exist",
+      DIRECTORY_CONTENT_ERROR: "A directory cannot have content",
+      FILE_NOT_FOUND: 'File not found: "{0}"',
+      NOT_IMPLEMENTED: "Not implemented",
+      INVALID_FILENAME: "Invalid filename",
+      INVALID_FORMAT: "Invalid or unsupported zip format. No END header found",
+      INVALID_PASS_PARAM: "Incompatible password parameter",
+      WRONG_PASSWORD: "Wrong Password",
+      /* ADM-ZIP */
+      COMMENT_TOO_LONG: "Comment is too long",
+      // Comment can be max 65535 bytes long (NOTE: some non-US characters may take more space)
+      EXTRA_FIELD_PARSE_ERROR: "Extra field parsing error"
+    };
+    function E(message) {
+      return function(...args) {
+        if (args.length) {
+          message = message.replace(/\{(\d)\}/g, (_, n) => args[n] || "");
+        }
+        return new Error("ADM-ZIP: " + message);
+      };
+    }
+    __name(E, "E");
+    for (const msg of Object.keys(errors)) {
+      exports2[msg] = E(errors[msg]);
+    }
+  }
+});
+
+// node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/utils.js
+var require_utils = __commonJS({
+  "node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/utils.js"(exports2, module2) {
+    var fsystem = require("fs");
+    var pth = require("path");
+    var Constants = require_constants();
+    var Errors = require_errors();
+    var isWin = typeof process === "object" && "win32" === process.platform;
+    var is_Obj = /* @__PURE__ */ __name((obj) => typeof obj === "object" && obj !== null, "is_Obj");
+    var crcTable = new Uint32Array(256).map((t, c) => {
+      for (let k = 0; k < 8; k++) {
+        if ((c & 1) !== 0) {
+          c = 3988292384 ^ c >>> 1;
+        } else {
+          c >>>= 1;
+        }
+      }
+      return c >>> 0;
+    });
+    function Utils(opts) {
+      this.sep = pth.sep;
+      this.fs = fsystem;
+      if (is_Obj(opts)) {
+        if (is_Obj(opts.fs) && typeof opts.fs.statSync === "function") {
+          this.fs = opts.fs;
+        }
+      }
+    }
+    __name(Utils, "Utils");
+    module2.exports = Utils;
+    Utils.prototype.makeDir = function(folder) {
+      const self = this;
+      function mkdirSync(fpath) {
+        let resolvedPath = fpath.split(self.sep)[0];
+        fpath.split(self.sep).forEach(function(name) {
+          if (!name || name.substr(-1, 1) === ":") return;
+          resolvedPath += self.sep + name;
+          var stat;
+          try {
+            stat = self.fs.statSync(resolvedPath);
+          } catch (e) {
+            self.fs.mkdirSync(resolvedPath);
+          }
+          if (stat && stat.isFile()) throw Errors.FILE_IN_THE_WAY(`"${resolvedPath}"`);
+        });
+      }
+      __name(mkdirSync, "mkdirSync");
+      mkdirSync(folder);
+    };
+    Utils.prototype.writeFileTo = function(path, content, overwrite, attr) {
+      const self = this;
+      if (self.fs.existsSync(path)) {
+        if (!overwrite) return false;
+        var stat = self.fs.statSync(path);
+        if (stat.isDirectory()) {
+          return false;
+        }
+      }
+      var folder = pth.dirname(path);
+      if (!self.fs.existsSync(folder)) {
+        self.makeDir(folder);
+      }
+      var fd;
+      try {
+        fd = self.fs.openSync(path, "w", 438);
+      } catch (e) {
+        self.fs.chmodSync(path, 438);
+        fd = self.fs.openSync(path, "w", 438);
+      }
+      if (fd) {
+        try {
+          self.fs.writeSync(fd, content, 0, content.length, 0);
+        } finally {
+          self.fs.closeSync(fd);
+        }
+      }
+      self.fs.chmodSync(path, attr || 438);
+      return true;
+    };
+    Utils.prototype.writeFileToAsync = function(path, content, overwrite, attr, callback) {
+      if (typeof attr === "function") {
+        callback = attr;
+        attr = void 0;
+      }
+      const self = this;
+      self.fs.exists(path, function(exist) {
+        if (exist && !overwrite) return callback(false);
+        self.fs.stat(path, function(err, stat) {
+          if (exist && stat.isDirectory()) {
+            return callback(false);
+          }
+          var folder = pth.dirname(path);
+          self.fs.exists(folder, function(exists) {
+            if (!exists) self.makeDir(folder);
+            self.fs.open(path, "w", 438, function(err2, fd) {
+              if (err2) {
+                self.fs.chmod(path, 438, function() {
+                  self.fs.open(path, "w", 438, function(err3, fd2) {
+                    self.fs.write(fd2, content, 0, content.length, 0, function() {
+                      self.fs.close(fd2, function() {
+                        self.fs.chmod(path, attr || 438, function() {
+                          callback(true);
+                        });
+                      });
+                    });
+                  });
+                });
+              } else if (fd) {
+                self.fs.write(fd, content, 0, content.length, 0, function() {
+                  self.fs.close(fd, function() {
+                    self.fs.chmod(path, attr || 438, function() {
+                      callback(true);
+                    });
+                  });
+                });
+              } else {
+                self.fs.chmod(path, attr || 438, function() {
+                  callback(true);
+                });
+              }
+            });
+          });
+        });
+      });
+    };
+    Utils.prototype.findFiles = function(path) {
+      const self = this;
+      function findSync(dir, pattern, recursive) {
+        if (typeof pattern === "boolean") {
+          recursive = pattern;
+          pattern = void 0;
+        }
+        let files = [];
+        self.fs.readdirSync(dir).forEach(function(file) {
+          const path2 = pth.join(dir, file);
+          const stat = self.fs.statSync(path2);
+          if (!pattern || pattern.test(path2)) {
+            files.push(pth.normalize(path2) + (stat.isDirectory() ? self.sep : ""));
+          }
+          if (stat.isDirectory() && recursive) files = files.concat(findSync(path2, pattern, recursive));
+        });
+        return files;
+      }
+      __name(findSync, "findSync");
+      return findSync(path, void 0, true);
+    };
+    Utils.prototype.findFilesAsync = function(dir, cb) {
+      const self = this;
+      let results = [];
+      self.fs.readdir(dir, function(err, list) {
+        if (err) return cb(err);
+        let list_length = list.length;
+        if (!list_length) return cb(null, results);
+        list.forEach(function(file) {
+          file = pth.join(dir, file);
+          self.fs.stat(file, function(err2, stat) {
+            if (err2) return cb(err2);
+            if (stat) {
+              results.push(pth.normalize(file) + (stat.isDirectory() ? self.sep : ""));
+              if (stat.isDirectory()) {
+                self.findFilesAsync(file, function(err3, res) {
+                  if (err3) return cb(err3);
+                  results = results.concat(res);
+                  if (!--list_length) cb(null, results);
+                });
+              } else {
+                if (!--list_length) cb(null, results);
+              }
+            }
+          });
+        });
+      });
+    };
+    Utils.prototype.getAttributes = function() {
+    };
+    Utils.prototype.setAttributes = function() {
+    };
+    Utils.crc32update = function(crc, byte) {
+      return crcTable[(crc ^ byte) & 255] ^ crc >>> 8;
+    };
+    Utils.crc32 = function(buf) {
+      if (typeof buf === "string") {
+        buf = Buffer.from(buf, "utf8");
+      }
+      let len = buf.length;
+      let crc = ~0;
+      for (let off = 0; off < len; ) crc = Utils.crc32update(crc, buf[off++]);
+      return ~crc >>> 0;
+    };
+    Utils.methodToString = function(method) {
+      switch (method) {
+        case Constants.STORED:
+          return "STORED (" + method + ")";
+        case Constants.DEFLATED:
+          return "DEFLATED (" + method + ")";
+        default:
+          return "UNSUPPORTED (" + method + ")";
+      }
+    };
+    Utils.canonical = function(path) {
+      if (!path) return "";
+      const safeSuffix = pth.posix.normalize("/" + path.split("\\").join("/"));
+      return pth.join(".", safeSuffix);
+    };
+    Utils.zipnamefix = function(path) {
+      if (!path) return "";
+      const safeSuffix = pth.posix.normalize("/" + path.split("\\").join("/"));
+      return pth.posix.join(".", safeSuffix);
+    };
+    Utils.findLast = function(arr, callback) {
+      if (!Array.isArray(arr)) throw new TypeError("arr is not array");
+      const len = arr.length >>> 0;
+      for (let i = len - 1; i >= 0; i--) {
+        if (callback(arr[i], i, arr)) {
+          return arr[i];
+        }
+      }
+      return void 0;
+    };
+    Utils.sanitize = function(prefix, name) {
+      prefix = pth.resolve(pth.normalize(prefix));
+      var parts = name.split("/");
+      for (var i = 0, l = parts.length; i < l; i++) {
+        var path = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep)));
+        if (path.indexOf(prefix) === 0) {
+          return path;
+        }
+      }
+      return pth.normalize(pth.join(prefix, pth.basename(name)));
+    };
+    Utils.toBuffer = /* @__PURE__ */ __name(function toBuffer(input, encoder) {
+      if (Buffer.isBuffer(input)) {
+        return input;
+      } else if (input instanceof Uint8Array) {
+        return Buffer.from(input);
+      } else {
+        return typeof input === "string" ? encoder(input) : Buffer.alloc(0);
+      }
+    }, "toBuffer");
+    Utils.readBigUInt64LE = function(buffer, index) {
+      var slice = Buffer.from(buffer.slice(index, index + 8));
+      slice.swap64();
+      return parseInt(`0x${slice.toString("hex")}`);
+    };
+    Utils.fromDOS2Date = function(val) {
+      return new Date((val >> 25 & 127) + 1980, Math.max((val >> 21 & 15) - 1, 0), Math.max(val >> 16 & 31, 1), val >> 11 & 31, val >> 5 & 63, (val & 31) << 1);
+    };
+    Utils.fromDate2DOS = function(val) {
+      let date = 0;
+      let time = 0;
+      if (val.getFullYear() > 1979) {
+        date = (val.getFullYear() - 1980 & 127) << 9 | val.getMonth() + 1 << 5 | val.getDate();
+        time = val.getHours() << 11 | val.getMinutes() << 5 | val.getSeconds() >> 1;
+      }
+      return date << 16 | time;
+    };
+    Utils.isWin = isWin;
+    Utils.crcTable = crcTable;
+  }
+});
+
+// node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/fattr.js
+var require_fattr = __commonJS({
+  "node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/fattr.js"(exports2, module2) {
+    var pth = require("path");
+    module2.exports = function(path, { fs }) {
+      var _path = path || "", _obj = newAttr(), _stat = null;
+      function newAttr() {
+        return {
+          directory: false,
+          readonly: false,
+          hidden: false,
+          executable: false,
+          mtime: 0,
+          atime: 0
+        };
+      }
+      __name(newAttr, "newAttr");
+      if (_path && fs.existsSync(_path)) {
+        _stat = fs.statSync(_path);
+        _obj.directory = _stat.isDirectory();
+        _obj.mtime = _stat.mtime;
+        _obj.atime = _stat.atime;
+        _obj.executable = (73 & _stat.mode) !== 0;
+        _obj.readonly = (128 & _stat.mode) === 0;
+        _obj.hidden = pth.basename(_path)[0] === ".";
+      } else {
+        /* @__PURE__ */ console.warn("Invalid path: " + _path);
+      }
+      return {
+        get directory() {
+          return _obj.directory;
+        },
+        get readOnly() {
+          return _obj.readonly;
+        },
+        get hidden() {
+          return _obj.hidden;
+        },
+        get mtime() {
+          return _obj.mtime;
+        },
+        get atime() {
+          return _obj.atime;
+        },
+        get executable() {
+          return _obj.executable;
+        },
+        decodeAttributes: /* @__PURE__ */ __name(function() {
+        }, "decodeAttributes"),
+        encodeAttributes: /* @__PURE__ */ __name(function() {
+        }, "encodeAttributes"),
+        toJSON: /* @__PURE__ */ __name(function() {
+          return {
+            path: _path,
+            isDirectory: _obj.directory,
+            isReadOnly: _obj.readonly,
+            isHidden: _obj.hidden,
+            isExecutable: _obj.executable,
+            mTime: _obj.mtime,
+            aTime: _obj.atime
+          };
+        }, "toJSON"),
+        toString: /* @__PURE__ */ __name(function() {
+          return JSON.stringify(this.toJSON(), null, "	");
+        }, "toString")
+      };
+    };
+  }
+});
+
+// node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/decoder.js
+var require_decoder = __commonJS({
+  "node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/decoder.js"(exports2, module2) {
+    module2.exports = {
+      efs: true,
+      encode: /* @__PURE__ */ __name((data) => Buffer.from(data, "utf8"), "encode"),
+      decode: /* @__PURE__ */ __name((data) => data.toString("utf8"), "decode")
+    };
+  }
+});
+
+// node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/index.js
+var require_util = __commonJS({
+  "node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/util/index.js"(exports2, module2) {
+    module2.exports = require_utils();
+    module2.exports.Constants = require_constants();
+    module2.exports.Errors = require_errors();
+    module2.exports.FileAttr = require_fattr();
+    module2.exports.decoder = require_decoder();
+  }
+});
+
+// node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/headers/entryHeader.js
+var require_entryHeader = __commonJS({
+  "node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/headers/entryHeader.js"(exports2, module2) {
+    var Utils = require_util();
+    var Constants = Utils.Constants;
+    module2.exports = function() {
+      var _verMade = 20, _version = 10, _flags = 0, _method = 0, _time = 0, _crc = 0, _compressedSize = 0, _size = 0, _fnameLen = 0, _extraLen = 0, _comLen = 0, _diskStart = 0, _inattr = 0, _attr = 0, _offset = 0;
+      _verMade |= Utils.isWin ? 2560 : 768;
+      _flags |= Constants.FLG_EFS;
+      const _localHeader = {
+        extraLen: 0
+      };
+      const uint32 = /* @__PURE__ */ __name((val) => Math.max(0, val) >>> 0, "uint32");
+      const uint16 = /* @__PURE__ */ __name((val) => Math.max(0, val) & 65535, "uint16");
+      const uint8 = /* @__PURE__ */ __name((val) => Math.max(0, val) & 255, "uint8");
+      _time = Utils.fromDate2DOS(/* @__PURE__ */ new Date());
+      return {
+        get made() {
+          return _verMade;
+        },
+        set made(val) {
+          _verMade = val;
+        },
+        get version() {
+          return _version;
+        },
+        set version(val) {
+          _version = val;
+        },
+        get flags() {
+          return _flags;
+        },
+        set flags(val) {
+          _flags = val;
+        },
+        get flags_efs() {
+          return (_flags & Constants.FLG_EFS) > 0;
+        },
+        set flags_efs(val) {
+          if (val) {
+            _flags |= Constants.FLG_EFS;
+          } else {
+            _flags &= ~Constants.FLG_EFS;
+          }
+        },
+        get flags_desc() {
+          return (_flags & Constants.FLG_DESC) > 0;
+        },
+        set flags_desc(val) {
+          if (val) {
+            _flags |= Constants.FLG_DESC;
+          } else {
+            _flags &= ~Constants.FLG_DESC;
+          }
+        },
+        get method() {
+          return _method;
+        },
+        set method(val) {
+          switch (val) {
+            case Constants.STORED:
+              this.version = 10;
+            case Constants.DEFLATED:
+            default:
+              this.version = 20;
+          }
+          _method = val;
+        },
+        get time() {
+          return Utils.fromDOS2Date(this.timeval);
+        },
+        set time(val) {
+          this.timeval = Utils.fromDate2DOS(val);
+        },
+        get timeval() {
+          return _time;
+        },
+        set timeval(val) {
+          _time = uint32(val);
+        },
+        get timeHighByte() {
+          return uint8(_time >>> 8);
+        },
+        get crc() {
+          return _crc;
+        },
+        set crc(val) {
+          _crc = uint32(val);
+        },
+        get compressedSize() {
+          return _compressedSize;
+        },
+        set compressedSize(val) {
+          _compressedSize = uint32(val);
+        },
+        get size() {
+          return _size;
+        },
+        set size(val) {
+          _size = uint32(val);
+        },
+        get fileNameLength() {
+          return _fnameLen;
+        },
+        set fileNameLength(val) {
+          _fnameLen = val;
+        },
+        get extraLength() {
+          return _extraLen;
+        },
+        set extraLength(val) {
+          _extraLen = val;
+        },
+        get extraLocalLength() {
+          return _localHeader.extraLen;
+        },
+        set extraLocalLength(val) {
+          _localHeader.extraLen = val;
+        },
+        get commentLength() {
+          return _comLen;
+        },
+        set commentLength(val) {
+          _comLen = val;
+        },
+        get diskNumStart() {
+          return _diskStart;
+        },
+        set diskNumStart(val) {
+          _diskStart = uint32(val);
+        },
+        get inAttr() {
+          return _inattr;
+        },
+        set inAttr(val) {
+          _inattr = uint32(val);
+        },
+        get attr() {
+          return _attr;
+        },
+        set attr(val) {
+          _attr = uint32(val);
+        },
+        // get Unix file permissions
+        get fileAttr() {
+          return (_attr || 0) >> 16 & 4095;
+        },
+        get offset() {
+          return _offset;
+        },
+        set offset(val) {
+          _offset = uint32(val);
+        },
+        get encrypted() {
+          return (_flags & Constants.FLG_ENC) === Constants.FLG_ENC;
+        },
+        get centralHeaderSize() {
+          return Constants.CENHDR + _fnameLen + _extraLen + _comLen;
+        },
+        get realDataOffset() {
+          return _offset + Constants.LOCHDR + _localHeader.fnameLen + _localHeader.extraLen;
+        },
+        get localHeader() {
+          return _localHeader;
+        },
+        loadLocalHeaderFromBinary: /* @__PURE__ */ __name(function(input) {
+          var data = input.slice(_offset, _offset + Constants.LOCHDR);
+          if (data.readUInt32LE(0) !== Constants.LOCSIG) {
+            throw Utils.Errors.INVALID_LOC();
+          }
+          _localHeader.version = data.readUInt16LE(Constants.LOCVER);
+          _localHeader.flags = data.readUInt16LE(Constants.LOCFLG);
+          _localHeader.method = data.readUInt16LE(Constants.LOCHOW);
+          _localHeader.time = data.readUInt32LE(Constants.LOCTIM);
+          _localHeader.crc = data.readUInt32LE(Constants.LOCCRC);
+          _localHeader.compressedSize = data.readUInt32LE(Constants.LOCSIZ);
+          _localHeader.size = data.readUInt32LE(Constants.LOCLEN);
+          _localHeader.fnameLen = data.readUInt16LE(Constants.LOCNAM);
+          _localHeader.extraLen = data.readUInt16LE(Constants.LOCEXT);
+          const extraStart = _offset + Constants.LOCHDR + _localHeader.fnameLen;
+          const extraEnd = extraStart + _localHeader.extraLen;
+          return input.slice(extraStart, extraEnd);
+        }, "loadLocalHeaderFromBinary"),
+        loadFromBinary: /* @__PURE__ */ __name(function(data) {
+          if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) {
+            throw Utils.Errors.INVALID_CEN();
+          }
+          _verMade = data.readUInt16LE(Constants.CENVEM);
+          _version = data.readUInt16LE(Constants.CENVER);
+          _flags = data.readUInt16LE(Constants.CENFLG);
+          _method = data.readUInt16LE(Constants.CENHOW);
+          _time = data.readUInt32LE(Constants.CENTIM);
+          _crc = data.readUInt32LE(Constants.CENCRC);
+          _compressedSize = data.readUInt32LE(Constants.CENSIZ);
+          _size = data.readUInt32LE(Constants.CENLEN);
+          _fnameLen = data.readUInt16LE(Constants.CENNAM);
+          _extraLen = data.readUInt16LE(Constants.CENEXT);
+          _comLen = data.readUInt16LE(Constants.CENCOM);
+          _diskStart = data.readUInt16LE(Constants.CENDSK);
+          _inattr = data.readUInt16LE(Constants.CENATT);
+          _attr = data.readUInt32LE(Constants.CENATX);
+          _offset = data.readUInt32LE(Constants.CENOFF);
+        }, "loadFromBinary"),
+        localHeaderToBinary: /* @__PURE__ */ __name(function() {
+          var data = Buffer.alloc(Constants.LOCHDR);
+          data.writeUInt32LE(Constants.LOCSIG, 0);
+          data.writeUInt16LE(_version, Constants.LOCVER);
+          data.writeUInt16LE(_flags, Constants.LOCFLG);
+          data.writeUInt16LE(_method, Constants.LOCHOW);
+          data.writeUInt32LE(_time, Constants.LOCTIM);
+          data.writeUInt32LE(_crc, Constants.LOCCRC);
+          data.writeUInt32LE(_compressedSize, Constants.LOCSIZ);
+          data.writeUInt32LE(_size, Constants.LOCLEN);
+          data.writeUInt16LE(_fnameLen, Constants.LOCNAM);
+          data.writeUInt16LE(_localHeader.extraLen, Constants.LOCEXT);
+          return data;
+        }, "localHeaderToBinary"),
+        centralHeaderToBinary: /* @__PURE__ */ __name(function() {
+          var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen);
+          data.writeUInt32LE(Constants.CENSIG, 0);
+          data.writeUInt16LE(_verMade, Constants.CENVEM);
+          data.writeUInt16LE(_version, Constants.CENVER);
+          data.writeUInt16LE(_flags, Constants.CENFLG);
+          data.writeUInt16LE(_method, Constants.CENHOW);
+          data.writeUInt32LE(_time, Constants.CENTIM);
+          data.writeUInt32LE(_crc, Constants.CENCRC);
+          data.writeUInt32LE(_compressedSize, Constants.CENSIZ);
+          data.writeUInt32LE(_size, Constants.CENLEN);
+          data.writeUInt16LE(_fnameLen, Constants.CENNAM);
+          data.writeUInt16LE(_extraLen, Constants.CENEXT);
+          data.writeUInt16LE(_comLen, Constants.CENCOM);
+          data.writeUInt16LE(_diskStart, Constants.CENDSK);
+          data.writeUInt16LE(_inattr, Constants.CENATT);
+          data.writeUInt32LE(_attr, Constants.CENATX);
+          data.writeUInt32LE(_offset, Constants.CENOFF);
+          return data;
+        }, "centralHeaderToBinary"),
+        toJSON: /* @__PURE__ */ __name(function() {
+          const bytes = /* @__PURE__ */ __name(function(nr) {
+            return nr + " bytes";
+          }, "bytes");
+          return {
+            made: _verMade,
+            version: _version,
+            flags: _flags,
+            method: Utils.methodToString(_method),
+            time: this.time,
+            crc: "0x" + _crc.toString(16).toUpperCase(),
+            compressedSize: bytes(_compressedSize),
+            size: bytes(_size),
+            fileNameLength: bytes(_fnameLen),
+            extraLength: bytes(_extraLen),
+            commentLength: bytes(_comLen),
+            diskNumStart: _diskStart,
+            inAttr: _inattr,
+            attr: _attr,
+            offset: _offset,
+            centralHeaderSize: bytes(Constants.CENHDR + _fnameLen + _extraLen + _comLen)
+          };
+        }, "toJSON"),
+        toString: /* @__PURE__ */ __name(function() {
+          return JSON.stringify(this.toJSON(), null, "	");
+        }, "toString")
+      };
+    };
+  }
+});
+
+// node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/headers/mainHeader.js
+var require_mainHeader = __commonJS({
+  "node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/headers/mainHeader.js"(exports2, module2) {
+    var Utils = require_util();
+    var Constants = Utils.Constants;
+    module2.exports = function() {
+      var _volumeEntries = 0, _totalEntries = 0, _size = 0, _offset = 0, _commentLength = 0;
+      return {
+        get diskEntries() {
+          return _volumeEntries;
+        },
+        set diskEntries(val) {
+          _volumeEntries = _totalEntries = val;
+        },
+        get totalEntries() {
+          return _totalEntries;
+        },
+        set totalEntries(val) {
+          _totalEntries = _volumeEntries = val;
+        },
+        get size() {
+          return _size;
+        },
+        set size(val) {
+          _size = val;
+        },
+        get offset() {
+          return _offset;
+        },
+        set offset(val) {
+          _offset = val;
+        },
+        get commentLength() {
+          return _commentLength;
+        },
+        set commentLength(val) {
+          _commentLength = val;
+        },
+        get mainHeaderSize() {
+          return Constants.ENDHDR + _commentLength;
+        },
+        loadFromBinary: /* @__PURE__ */ __name(function(data) {
+          if ((data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG) && (data.length < Constants.ZIP64HDR || data.readUInt32LE(0) !== Constants.ZIP64SIG)) {
+            throw Utils.Errors.INVALID_END();
+          }
+          if (data.readUInt32LE(0) === Constants.ENDSIG) {
+            _volumeEntries = data.readUInt16LE(Constants.ENDSUB);
+            _totalEntries = data.readUInt16LE(Constants.ENDTOT);
+            _size = data.readUInt32LE(Constants.ENDSIZ);
+            _offset = data.readUInt32LE(Constants.ENDOFF);
+            _commentLength = data.readUInt16LE(Constants.ENDCOM);
+          } else {
+            _volumeEntries = Utils.readBigUInt64LE(data, Constants.ZIP64SUB);
+            _totalEntries = Utils.readBigUInt64LE(data, Constants.ZIP64TOT);
+            _size = Utils.readBigUInt64LE(data, Constants.ZIP64SIZE);
+            _offset = Utils.readBigUInt64LE(data, Constants.ZIP64OFF);
+            _commentLength = 0;
+          }
+        }, "loadFromBinary"),
+        toBinary: /* @__PURE__ */ __name(function() {
+          var b = Buffer.alloc(Constants.ENDHDR + _commentLength);
+          b.writeUInt32LE(Constants.ENDSIG, 0);
+          b.writeUInt32LE(0, 4);
+          b.writeUInt16LE(_volumeEntries, Constants.ENDSUB);
+          b.writeUInt16LE(_totalEntries, Constants.ENDTOT);
+          b.writeUInt32LE(_size, Constants.ENDSIZ);
+          b.writeUInt32LE(_offset, Constants.ENDOFF);
+          b.writeUInt16LE(_commentLength, Constants.ENDCOM);
+          b.fill(" ", Constants.ENDHDR);
+          return b;
+        }, "toBinary"),
+        toJSON: /* @__PURE__ */ __name(function() {
+          const offset = /* @__PURE__ */ __name(function(nr, len) {
+            let offs = nr.toString(16).toUpperCase();
+            while (offs.length < len) offs = "0" + offs;
+            return "0x" + offs;
+          }, "offset");
+          return {
+            diskEntries: _volumeEntries,
+            totalEntries: _totalEntries,
+            size: _size + " bytes",
+            offset: offset(_offset, 4),
+            commentLength: _commentLength
+          };
+        }, "toJSON"),
+        toString: /* @__PURE__ */ __name(function() {
+          return JSON.stringify(this.toJSON(), null, "	");
+        }, "toString")
+      };
+    };
+  }
+});
+
+// node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/headers/index.js
+var require_headers = __commonJS({
+  "node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/headers/index.js"(exports2) {
+    exports2.EntryHeader = require_entryHeader();
+    exports2.MainHeader = require_mainHeader();
+  }
+});
+
+// node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/methods/deflater.js
+var require_deflater = __commonJS({
+  "node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/methods/deflater.js"(exports2, module2) {
+    module2.exports = function(inbuf) {
+      var zlib = require("zlib");
+      var opts = { chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024 };
+      return {
+        deflate: /* @__PURE__ */ __name(function() {
+          return zlib.deflateRawSync(inbuf, opts);
+        }, "deflate"),
+        deflateAsync: /* @__PURE__ */ __name(function(callback) {
+          var tmp = zlib.createDeflateRaw(opts), parts = [], total = 0;
+          tmp.on("data", function(data) {
+            parts.push(data);
+            total += data.length;
+          });
+          tmp.on("end", function() {
+            var buf = Buffer.alloc(total), written = 0;
+            buf.fill(0);
+            for (var i = 0; i < parts.length; i++) {
+              var part = parts[i];
+              part.copy(buf, written);
+              written += part.length;
+            }
+            callback && callback(buf);
+          });
+          tmp.end(inbuf);
+        }, "deflateAsync")
+      };
+    };
+  }
+});
+
+// node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/methods/inflater.js
+var require_inflater = __commonJS({
+  "node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/methods/inflater.js"(exports2, module2) {
+    var version = +(process.versions ? process.versions.node : "").split(".")[0] || 0;
+    module2.exports = function(inbuf, expectedLength) {
+      var zlib = require("zlib");
+      const option = version >= 15 && expectedLength > 0 ? { maxOutputLength: expectedLength } : {};
+      return {
+        inflate: /* @__PURE__ */ __name(function() {
+          return zlib.inflateRawSync(inbuf, option);
+        }, "inflate"),
+        inflateAsync: /* @__PURE__ */ __name(function(callback) {
+          var tmp = zlib.createInflateRaw(option), parts = [], total = 0;
+          tmp.on("data", function(data) {
+            parts.push(data);
+            total += data.length;
+          });
+          tmp.on("end", function() {
+            var buf = Buffer.alloc(total), written = 0;
+            buf.fill(0);
+            for (var i = 0; i < parts.length; i++) {
+              var part = parts[i];
+              part.copy(buf, written);
+              written += part.length;
+            }
+            callback && callback(buf);
+          });
+          tmp.end(inbuf);
+        }, "inflateAsync")
+      };
+    };
+  }
+});
+
+// node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/methods/zipcrypto.js
+var require_zipcrypto = __commonJS({
+  "node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/methods/zipcrypto.js"(exports2, module2) {
+    "use strict";
+    var { randomFillSync } = require("crypto");
+    var Errors = require_errors();
+    var crctable = new Uint32Array(256).map((t, crc) => {
+      for (let j = 0; j < 8; j++) {
+        if (0 !== (crc & 1)) {
+          crc = crc >>> 1 ^ 3988292384;
+        } else {
+          crc >>>= 1;
+        }
+      }
+      return crc >>> 0;
+    });
+    var uMul = /* @__PURE__ */ __name((a, b) => Math.imul(a, b) >>> 0, "uMul");
+    var crc32update = /* @__PURE__ */ __name((pCrc32, bval) => {
+      return crctable[(pCrc32 ^ bval) & 255] ^ pCrc32 >>> 8;
+    }, "crc32update");
+    var genSalt = /* @__PURE__ */ __name(() => {
+      if ("function" === typeof randomFillSync) {
+        return randomFillSync(Buffer.alloc(12));
+      } else {
+        return genSalt.node();
+      }
+    }, "genSalt");
+    genSalt.node = () => {
+      const salt = Buffer.alloc(12);
+      const len = salt.length;
+      for (let i = 0; i < len; i++) salt[i] = Math.random() * 256 & 255;
+      return salt;
+    };
+    var config = {
+      genSalt
+    };
+    function Initkeys(pw) {
+      const pass = Buffer.isBuffer(pw) ? pw : Buffer.from(pw);
+      this.keys = new Uint32Array([305419896, 591751049, 878082192]);
+      for (let i = 0; i < pass.length; i++) {
+        this.updateKeys(pass[i]);
+      }
+    }
+    __name(Initkeys, "Initkeys");
+    Initkeys.prototype.updateKeys = function(byteValue) {
+      const keys = this.keys;
+      keys[0] = crc32update(keys[0], byteValue);
+      keys[1] += keys[0] & 255;
+      keys[1] = uMul(keys[1], 134775813) + 1;
+      keys[2] = crc32update(keys[2], keys[1] >>> 24);
+      return byteValue;
+    };
+    Initkeys.prototype.next = function() {
+      const k = (this.keys[2] | 2) >>> 0;
+      return uMul(k, k ^ 1) >> 8 & 255;
+    };
+    function make_decrypter(pwd) {
+      const keys = new Initkeys(pwd);
+      return function(data) {
+        const result = Buffer.alloc(data.length);
+        let pos = 0;
+        for (let c of data) {
+          result[pos++] = keys.updateKeys(c ^ keys.next());
+        }
+        return result;
+      };
+    }
+    __name(make_decrypter, "make_decrypter");
+    function make_encrypter(pwd) {
+      const keys = new Initkeys(pwd);
+      return function(data, result, pos = 0) {
+        if (!result) result = Buffer.alloc(data.length);
+        for (let c of data) {
+          const k = keys.next();
+          result[pos++] = c ^ k;
+          keys.updateKeys(c);
+        }
+        return result;
+      };
+    }
+    __name(make_encrypter, "make_encrypter");
+    function decrypt(data, header, pwd) {
+      if (!data || !Buffer.isBuffer(data) || data.length < 12) {
+        return Buffer.alloc(0);
+      }
+      const decrypter = make_decrypter(pwd);
+      const salt = decrypter(data.slice(0, 12));
+      const verifyByte = (header.flags & 8) === 8 ? header.timeHighByte : header.crc >>> 24;
+      if (salt[11] !== verifyByte) {
+        throw Errors.WRONG_PASSWORD();
+      }
+      return decrypter(data.slice(12));
+    }
+    __name(decrypt, "decrypt");
+    function _salter(data) {
+      if (Buffer.isBuffer(data) && data.length >= 12) {
+        config.genSalt = function() {
+          return data.slice(0, 12);
+        };
+      } else if (data === "node") {
+        config.genSalt = genSalt.node;
+      } else {
+        config.genSalt = genSalt;
+      }
+    }
+    __name(_salter, "_salter");
+    function encrypt(data, header, pwd, oldlike = false) {
+      if (data == null) data = Buffer.alloc(0);
+      if (!Buffer.isBuffer(data)) data = Buffer.from(data.toString());
+      const encrypter = make_encrypter(pwd);
+      const salt = config.genSalt();
+      salt[11] = header.crc >>> 24 & 255;
+      if (oldlike) salt[10] = header.crc >>> 16 & 255;
+      const result = Buffer.alloc(data.length + 12);
+      encrypter(salt, result);
+      return encrypter(data, result, 12);
+    }
+    __name(encrypt, "encrypt");
+    module2.exports = { decrypt, encrypt, _salter };
+  }
+});
+
+// node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/methods/index.js
+var require_methods = __commonJS({
+  "node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/methods/index.js"(exports2) {
+    exports2.Deflater = require_deflater();
+    exports2.Inflater = require_inflater();
+    exports2.ZipCrypto = require_zipcrypto();
+  }
+});
+
+// node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/zipEntry.js
+var require_zipEntry = __commonJS({
+  "node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/zipEntry.js"(exports2, module2) {
+    var Utils = require_util();
+    var Headers = require_headers();
+    var Constants = Utils.Constants;
+    var Methods = require_methods();
+    module2.exports = function(options, input) {
+      var _centralHeader = new Headers.EntryHeader(), _entryName = Buffer.alloc(0), _comment = Buffer.alloc(0), _isDirectory = false, uncompressedData = null, _extra = Buffer.alloc(0), _extralocal = Buffer.alloc(0), _efs = true;
+      const opts = options;
+      const decoder = typeof opts.decoder === "object" ? opts.decoder : Utils.decoder;
+      _efs = decoder.hasOwnProperty("efs") ? decoder.efs : false;
+      function getCompressedDataFromZip() {
+        if (!input || !(input instanceof Uint8Array)) {
+          return Buffer.alloc(0);
+        }
+        _extralocal = _centralHeader.loadLocalHeaderFromBinary(input);
+        return input.slice(_centralHeader.realDataOffset, _centralHeader.realDataOffset + _centralHeader.compressedSize);
+      }
+      __name(getCompressedDataFromZip, "getCompressedDataFromZip");
+      function crc32OK(data) {
+        if (!_centralHeader.flags_desc) {
+          if (Utils.crc32(data) !== _centralHeader.localHeader.crc) {
+            return false;
+          }
+        } else {
+          const descriptor = {};
+          const dataEndOffset = _centralHeader.realDataOffset + _centralHeader.compressedSize;
+          if (input.readUInt32LE(dataEndOffset) == Constants.LOCSIG || input.readUInt32LE(dataEndOffset) == Constants.CENSIG) {
+            throw Utils.Errors.DESCRIPTOR_NOT_EXIST();
+          }
+          if (input.readUInt32LE(dataEndOffset) == Constants.EXTSIG) {
+            descriptor.crc = input.readUInt32LE(dataEndOffset + Constants.EXTCRC);
+            descriptor.compressedSize = input.readUInt32LE(dataEndOffset + Constants.EXTSIZ);
+            descriptor.size = input.readUInt32LE(dataEndOffset + Constants.EXTLEN);
+          } else if (input.readUInt16LE(dataEndOffset + 12) === 19280) {
+            descriptor.crc = input.readUInt32LE(dataEndOffset + Constants.EXTCRC - 4);
+            descriptor.compressedSize = input.readUInt32LE(dataEndOffset + Constants.EXTSIZ - 4);
+            descriptor.size = input.readUInt32LE(dataEndOffset + Constants.EXTLEN - 4);
+          } else {
+            throw Utils.Errors.DESCRIPTOR_UNKNOWN();
+          }
+          if (descriptor.compressedSize !== _centralHeader.compressedSize || descriptor.size !== _centralHeader.size || descriptor.crc !== _centralHeader.crc) {
+            throw Utils.Errors.DESCRIPTOR_FAULTY();
+          }
+          if (Utils.crc32(data) !== descriptor.crc) {
+            return false;
+          }
+        }
+        return true;
+      }
+      __name(crc32OK, "crc32OK");
+      function decompress(async, callback, pass) {
+        if (typeof callback === "undefined" && typeof async === "string") {
+          pass = async;
+          async = void 0;
+        }
+        if (_isDirectory) {
+          if (async && callback) {
+            callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR());
+          }
+          return Buffer.alloc(0);
+        }
+        var compressedData = getCompressedDataFromZip();
+        if (compressedData.length === 0) {
+          if (async && callback) callback(compressedData);
+          return compressedData;
+        }
+        if (_centralHeader.encrypted) {
+          if ("string" !== typeof pass && !Buffer.isBuffer(pass)) {
+            throw Utils.Errors.INVALID_PASS_PARAM();
+          }
+          compressedData = Methods.ZipCrypto.decrypt(compressedData, _centralHeader, pass);
+        }
+        var data = Buffer.alloc(_centralHeader.size);
+        switch (_centralHeader.method) {
+          case Utils.Constants.STORED:
+            compressedData.copy(data);
+            if (!crc32OK(data)) {
+              if (async && callback) callback(data, Utils.Errors.BAD_CRC());
+              throw Utils.Errors.BAD_CRC();
+            } else {
+              if (async && callback) callback(data);
+              return data;
+            }
+          case Utils.Constants.DEFLATED:
+            var inflater = new Methods.Inflater(compressedData, _centralHeader.size);
+            if (!async) {
+              const result = inflater.inflate(data);
+              result.copy(data, 0);
+              if (!crc32OK(data)) {
+                throw Utils.Errors.BAD_CRC(`"${decoder.decode(_entryName)}"`);
+              }
+              return data;
+            } else {
+              inflater.inflateAsync(function(result) {
+                result.copy(result, 0);
+                if (callback) {
+                  if (!crc32OK(result)) {
+                    callback(result, Utils.Errors.BAD_CRC());
+                  } else {
+                    callback(result);
+                  }
+                }
+              });
+            }
+            break;
+          default:
+            if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD());
+            throw Utils.Errors.UNKNOWN_METHOD();
+        }
+      }
+      __name(decompress, "decompress");
+      function compress(async, callback) {
+        if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) {
+          if (async && callback) callback(getCompressedDataFromZip());
+          return getCompressedDataFromZip();
+        }
+        if (uncompressedData.length && !_isDirectory) {
+          var compressedData;
+          switch (_centralHeader.method) {
+            case Utils.Constants.STORED:
+              _centralHeader.compressedSize = _centralHeader.size;
+              compressedData = Buffer.alloc(uncompressedData.length);
+              uncompressedData.copy(compressedData);
+              if (async && callback) callback(compressedData);
+              return compressedData;
+            default:
+            case Utils.Constants.DEFLATED:
+              var deflater = new Methods.Deflater(uncompressedData);
+              if (!async) {
+                var deflated = deflater.deflate();
+                _centralHeader.compressedSize = deflated.length;
+                return deflated;
+              } else {
+                deflater.deflateAsync(function(data) {
+                  compressedData = Buffer.alloc(data.length);
+                  _centralHeader.compressedSize = data.length;
+                  data.copy(compressedData);
+                  callback && callback(compressedData);
+                });
+              }
+              deflater = null;
+              break;
+          }
+        } else if (async && callback) {
+          callback(Buffer.alloc(0));
+        } else {
+          return Buffer.alloc(0);
+        }
+      }
+      __name(compress, "compress");
+      function readUInt64LE(buffer, offset) {
+        return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset);
+      }
+      __name(readUInt64LE, "readUInt64LE");
+      function parseExtra(data) {
+        try {
+          var offset = 0;
+          var signature, size, part;
+          while (offset + 4 < data.length) {
+            signature = data.readUInt16LE(offset);
+            offset += 2;
+            size = data.readUInt16LE(offset);
+            offset += 2;
+            part = data.slice(offset, offset + size);
+            offset += size;
+            if (Constants.ID_ZIP64 === signature) {
+              parseZip64ExtendedInformation(part);
+            }
+          }
+        } catch (error) {
+          throw Utils.Errors.EXTRA_FIELD_PARSE_ERROR();
+        }
+      }
+      __name(parseExtra, "parseExtra");
+      function parseZip64ExtendedInformation(data) {
+        var size, compressedSize, offset, diskNumStart;
+        if (data.length >= Constants.EF_ZIP64_SCOMP) {
+          size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);
+          if (_centralHeader.size === Constants.EF_ZIP64_OR_32) {
+            _centralHeader.size = size;
+          }
+        }
+        if (data.length >= Constants.EF_ZIP64_RHO) {
+          compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);
+          if (_centralHeader.compressedSize === Constants.EF_ZIP64_OR_32) {
+            _centralHeader.compressedSize = compressedSize;
+          }
+        }
+        if (data.length >= Constants.EF_ZIP64_DSN) {
+          offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);
+          if (_centralHeader.offset === Constants.EF_ZIP64_OR_32) {
+            _centralHeader.offset = offset;
+          }
+        }
+        if (data.length >= Constants.EF_ZIP64_DSN + 4) {
+          diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);
+          if (_centralHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {
+            _centralHeader.diskNumStart = diskNumStart;
+          }
+        }
+      }
+      __name(parseZip64ExtendedInformation, "parseZip64ExtendedInformation");
+      return {
+        get entryName() {
+          return decoder.decode(_entryName);
+        },
+        get rawEntryName() {
+          return _entryName;
+        },
+        set entryName(val) {
+          _entryName = Utils.toBuffer(val, decoder.encode);
+          var lastChar = _entryName[_entryName.length - 1];
+          _isDirectory = lastChar === 47 || lastChar === 92;
+          _centralHeader.fileNameLength = _entryName.length;
+        },
+        get efs() {
+          if (typeof _efs === "function") {
+            return _efs(this.entryName);
+          } else {
+            return _efs;
+          }
+        },
+        get extra() {
+          return _extra;
+        },
+        set extra(val) {
+          _extra = val;
+          _centralHeader.extraLength = val.length;
+          parseExtra(val);
+        },
+        get comment() {
+          return decoder.decode(_comment);
+        },
+        set comment(val) {
+          _comment = Utils.toBuffer(val, decoder.encode);
+          _centralHeader.commentLength = _comment.length;
+          if (_comment.length > 65535) throw Utils.Errors.COMMENT_TOO_LONG();
+        },
+        get name() {
+          var n = decoder.decode(_entryName);
+          return _isDirectory ? n.substr(n.length - 1).split("/").pop() : n.split("/").pop();
+        },
+        get isDirectory() {
+          return _isDirectory;
+        },
+        getCompressedData: /* @__PURE__ */ __name(function() {
+          return compress(false, null);
+        }, "getCompressedData"),
+        getCompressedDataAsync: /* @__PURE__ */ __name(function(callback) {
+          compress(true, callback);
+        }, "getCompressedDataAsync"),
+        setData: /* @__PURE__ */ __name(function(value) {
+          uncompressedData = Utils.toBuffer(value, Utils.decoder.encode);
+          if (!_isDirectory && uncompressedData.length) {
+            _centralHeader.size = uncompressedData.length;
+            _centralHeader.method = Utils.Constants.DEFLATED;
+            _centralHeader.crc = Utils.crc32(value);
+            _centralHeader.changed = true;
+          } else {
+            _centralHeader.method = Utils.Constants.STORED;
+          }
+        }, "setData"),
+        getData: /* @__PURE__ */ __name(function(pass) {
+          if (_centralHeader.changed) {
+            return uncompressedData;
+          } else {
+            return decompress(false, null, pass);
+          }
+        }, "getData"),
+        getDataAsync: /* @__PURE__ */ __name(function(callback, pass) {
+          if (_centralHeader.changed) {
+            callback(uncompressedData);
+          } else {
+            decompress(true, callback, pass);
+          }
+        }, "getDataAsync"),
+        set attr(attr) {
+          _centralHeader.attr = attr;
+        },
+        get attr() {
+          return _centralHeader.attr;
+        },
+        set header(data) {
+          _centralHeader.loadFromBinary(data);
+        },
+        get header() {
+          return _centralHeader;
+        },
+        packCentralHeader: /* @__PURE__ */ __name(function() {
+          _centralHeader.flags_efs = this.efs;
+          _centralHeader.extraLength = _extra.length;
+          var header = _centralHeader.centralHeaderToBinary();
+          var addpos = Utils.Constants.CENHDR;
+          _entryName.copy(header, addpos);
+          addpos += _entryName.length;
+          _extra.copy(header, addpos);
+          addpos += _centralHeader.extraLength;
+          _comment.copy(header, addpos);
+          return header;
+        }, "packCentralHeader"),
+        packLocalHeader: /* @__PURE__ */ __name(function() {
+          let addpos = 0;
+          _centralHeader.flags_efs = this.efs;
+          _centralHeader.extraLocalLength = _extralocal.length;
+          const localHeaderBuf = _centralHeader.localHeaderToBinary();
+          const localHeader = Buffer.alloc(localHeaderBuf.length + _entryName.length + _centralHeader.extraLocalLength);
+          localHeaderBuf.copy(localHeader, addpos);
+          addpos += localHeaderBuf.length;
+          _entryName.copy(localHeader, addpos);
+          addpos += _entryName.length;
+          _extralocal.copy(localHeader, addpos);
+          addpos += _extralocal.length;
+          return localHeader;
+        }, "packLocalHeader"),
+        toJSON: /* @__PURE__ */ __name(function() {
+          const bytes = /* @__PURE__ */ __name(function(nr) {
+            return "<" + (nr && nr.length + " bytes buffer" || "null") + ">";
+          }, "bytes");
+          return {
+            entryName: this.entryName,
+            name: this.name,
+            comment: this.comment,
+            isDirectory: this.isDirectory,
+            header: _centralHeader.toJSON(),
+            compressedData: bytes(input),
+            data: bytes(uncompressedData)
+          };
+        }, "toJSON"),
+        toString: /* @__PURE__ */ __name(function() {
+          return JSON.stringify(this.toJSON(), null, "	");
+        }, "toString")
+      };
+    };
+  }
+});
+
+// node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/zipFile.js
+var require_zipFile = __commonJS({
+  "node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/zipFile.js"(exports2, module2) {
+    var ZipEntry = require_zipEntry();
+    var Headers = require_headers();
+    var Utils = require_util();
+    module2.exports = function(inBuffer, options) {
+      var entryList = [], entryTable = {}, _comment = Buffer.alloc(0), mainHeader = new Headers.MainHeader(), loadedEntries = false;
+      var password = null;
+      const temporary = /* @__PURE__ */ new Set();
+      const opts = options;
+      const { noSort, decoder } = opts;
+      if (inBuffer) {
+        readMainHeader(opts.readEntries);
+      } else {
+        loadedEntries = true;
+      }
+      function makeTemporaryFolders() {
+        const foldersList = /* @__PURE__ */ new Set();
+        for (const elem of Object.keys(entryTable)) {
+          const elements = elem.split("/");
+          elements.pop();
+          if (!elements.length) continue;
+          for (let i = 0; i < elements.length; i++) {
+            const sub = elements.slice(0, i + 1).join("/") + "/";
+            foldersList.add(sub);
+          }
+        }
+        for (const elem of foldersList) {
+          if (!(elem in entryTable)) {
+            const tempfolder = new ZipEntry(opts);
+            tempfolder.entryName = elem;
+            tempfolder.attr = 16;
+            tempfolder.temporary = true;
+            entryList.push(tempfolder);
+            entryTable[tempfolder.entryName] = tempfolder;
+            temporary.add(tempfolder);
+          }
+        }
+      }
+      __name(makeTemporaryFolders, "makeTemporaryFolders");
+      function readEntries() {
+        loadedEntries = true;
+        entryTable = {};
+        if (mainHeader.diskEntries > (inBuffer.length - mainHeader.offset) / Utils.Constants.CENHDR) {
+          throw Utils.Errors.DISK_ENTRY_TOO_LARGE();
+        }
+        entryList = new Array(mainHeader.diskEntries);
+        var index = mainHeader.offset;
+        for (var i = 0; i < entryList.length; i++) {
+          var tmp = index, entry = new ZipEntry(opts, inBuffer);
+          entry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR);
+          entry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength);
+          if (entry.header.extraLength) {
+            entry.extra = inBuffer.slice(tmp, tmp += entry.header.extraLength);
+          }
+          if (entry.header.commentLength) entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength);
+          index += entry.header.centralHeaderSize;
+          entryList[i] = entry;
+          entryTable[entry.entryName] = entry;
+        }
+        temporary.clear();
+        makeTemporaryFolders();
+      }
+      __name(readEntries, "readEntries");
+      function readMainHeader(readNow) {
+        var i = inBuffer.length - Utils.Constants.ENDHDR, max = Math.max(0, i - 65535), n = max, endStart = inBuffer.length, endOffset = -1, commentEnd = 0;
+        const trailingSpace = typeof opts.trailingSpace === "boolean" ? opts.trailingSpace : false;
+        if (trailingSpace) max = 0;
+        for (i; i >= n; i--) {
+          if (inBuffer[i] !== 80) continue;
+          if (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) {
+            endOffset = i;
+            commentEnd = i;
+            endStart = i + Utils.Constants.ENDHDR;
+            n = i - Utils.Constants.END64HDR;
+            continue;
+          }
+          if (inBuffer.readUInt32LE(i) === Utils.Constants.END64SIG) {
+            n = max;
+            continue;
+          }
+          if (inBuffer.readUInt32LE(i) === Utils.Constants.ZIP64SIG) {
+            endOffset = i;
+            endStart = i + Utils.readBigUInt64LE(inBuffer, i + Utils.Constants.ZIP64SIZE) + Utils.Constants.ZIP64LEAD;
+            break;
+          }
+        }
+        if (endOffset == -1) throw Utils.Errors.INVALID_FORMAT();
+        mainHeader.loadFromBinary(inBuffer.slice(endOffset, endStart));
+        if (mainHeader.commentLength) {
+          _comment = inBuffer.slice(commentEnd + Utils.Constants.ENDHDR);
+        }
+        if (readNow) readEntries();
+      }
+      __name(readMainHeader, "readMainHeader");
+      function sortEntries() {
+        if (entryList.length > 1 && !noSort) {
+          entryList.sort((a, b) => a.entryName.toLowerCase().localeCompare(b.entryName.toLowerCase()));
+        }
+      }
+      __name(sortEntries, "sortEntries");
+      return {
+        /**
+         * Returns an array of ZipEntry objects existent in the current opened archive
+         * @return Array
+         */
+        get entries() {
+          if (!loadedEntries) {
+            readEntries();
+          }
+          return entryList.filter((e) => !temporary.has(e));
+        },
+        /**
+         * Archive comment
+         * @return {String}
+         */
+        get comment() {
+          return decoder.decode(_comment);
+        },
+        set comment(val) {
+          _comment = Utils.toBuffer(val, decoder.encode);
+          mainHeader.commentLength = _comment.length;
+        },
+        getEntryCount: /* @__PURE__ */ __name(function() {
+          if (!loadedEntries) {
+            return mainHeader.diskEntries;
+          }
+          return entryList.length;
+        }, "getEntryCount"),
+        forEach: /* @__PURE__ */ __name(function(callback) {
+          this.entries.forEach(callback);
+        }, "forEach"),
+        /**
+         * Returns a reference to the entry with the given name or null if entry is inexistent
+         *
+         * @param entryName
+         * @return ZipEntry
+         */
+        getEntry: /* @__PURE__ */ __name(function(entryName) {
+          if (!loadedEntries) {
+            readEntries();
+          }
+          return entryTable[entryName] || null;
+        }, "getEntry"),
+        /**
+         * Adds the given entry to the entry list
+         *
+         * @param entry
+         */
+        setEntry: /* @__PURE__ */ __name(function(entry) {
+          if (!loadedEntries) {
+            readEntries();
+          }
+          entryList.push(entry);
+          entryTable[entry.entryName] = entry;
+          mainHeader.totalEntries = entryList.length;
+        }, "setEntry"),
+        /**
+         * Removes the file with the given name from the entry list.
+         *
+         * If the entry is a directory, then all nested files and directories will be removed
+         * @param entryName
+         * @returns {void}
+         */
+        deleteFile: /* @__PURE__ */ __name(function(entryName, withsubfolders = true) {
+          if (!loadedEntries) {
+            readEntries();
+          }
+          const entry = entryTable[entryName];
+          const list = this.getEntryChildren(entry, withsubfolders).map((child) => child.entryName);
+          list.forEach(this.deleteEntry);
+        }, "deleteFile"),
+        /**
+         * Removes the entry with the given name from the entry list.
+         *
+         * @param {string} entryName
+         * @returns {void}
+         */
+        deleteEntry: /* @__PURE__ */ __name(function(entryName) {
+          if (!loadedEntries) {
+            readEntries();
+          }
+          const entry = entryTable[entryName];
+          const index = entryList.indexOf(entry);
+          if (index >= 0) {
+            entryList.splice(index, 1);
+            delete entryTable[entryName];
+            mainHeader.totalEntries = entryList.length;
+          }
+        }, "deleteEntry"),
+        /**
+         *  Iterates and returns all nested files and directories of the given entry
+         *
+         * @param entry
+         * @return Array
+         */
+        getEntryChildren: /* @__PURE__ */ __name(function(entry, subfolders = true) {
+          if (!loadedEntries) {
+            readEntries();
+          }
+          if (typeof entry === "object") {
+            if (entry.isDirectory && subfolders) {
+              const list = [];
+              const name = entry.entryName;
+              for (const zipEntry of entryList) {
+                if (zipEntry.entryName.startsWith(name)) {
+                  list.push(zipEntry);
+                }
+              }
+              return list;
+            } else {
+              return [entry];
+            }
+          }
+          return [];
+        }, "getEntryChildren"),
+        /**
+         *  How many child elements entry has
+         *
+         * @param {ZipEntry} entry
+         * @return {integer}
+         */
+        getChildCount: /* @__PURE__ */ __name(function(entry) {
+          if (entry && entry.isDirectory) {
+            const list = this.getEntryChildren(entry);
+            return list.includes(entry) ? list.length - 1 : list.length;
+          }
+          return 0;
+        }, "getChildCount"),
+        /**
+         * Returns the zip file
+         *
+         * @return Buffer
+         */
+        compressToBuffer: /* @__PURE__ */ __name(function() {
+          if (!loadedEntries) {
+            readEntries();
+          }
+          sortEntries();
+          const dataBlock = [];
+          const headerBlocks = [];
+          let totalSize = 0;
+          let dindex = 0;
+          mainHeader.size = 0;
+          mainHeader.offset = 0;
+          let totalEntries = 0;
+          for (const entry of this.entries) {
+            const compressedData = entry.getCompressedData();
+            entry.header.offset = dindex;
+            const localHeader = entry.packLocalHeader();
+            const dataLength = localHeader.length + compressedData.length;
+            dindex += dataLength;
+            dataBlock.push(localHeader);
+            dataBlock.push(compressedData);
+            const centralHeader = entry.packCentralHeader();
+            headerBlocks.push(centralHeader);
+            mainHeader.size += centralHeader.length;
+            totalSize += dataLength + centralHeader.length;
+            totalEntries++;
+          }
+          totalSize += mainHeader.mainHeaderSize;
+          mainHeader.offset = dindex;
+          mainHeader.totalEntries = totalEntries;
+          dindex = 0;
+          const outBuffer = Buffer.alloc(totalSize);
+          for (const content of dataBlock) {
+            content.copy(outBuffer, dindex);
+            dindex += content.length;
+          }
+          for (const content of headerBlocks) {
+            content.copy(outBuffer, dindex);
+            dindex += content.length;
+          }
+          const mh = mainHeader.toBinary();
+          if (_comment) {
+            _comment.copy(mh, Utils.Constants.ENDHDR);
+          }
+          mh.copy(outBuffer, dindex);
+          inBuffer = outBuffer;
+          loadedEntries = false;
+          return outBuffer;
+        }, "compressToBuffer"),
+        toAsyncBuffer: /* @__PURE__ */ __name(function(onSuccess, onFail, onItemStart, onItemEnd) {
+          try {
+            if (!loadedEntries) {
+              readEntries();
+            }
+            sortEntries();
+            const dataBlock = [];
+            const centralHeaders = [];
+            let totalSize = 0;
+            let dindex = 0;
+            let totalEntries = 0;
+            mainHeader.size = 0;
+            mainHeader.offset = 0;
+            const compress2Buffer = /* @__PURE__ */ __name(function(entryLists) {
+              if (entryLists.length > 0) {
+                const entry = entryLists.shift();
+                const name = entry.entryName + entry.extra.toString();
+                if (onItemStart) onItemStart(name);
+                entry.getCompressedDataAsync(function(compressedData) {
+                  if (onItemEnd) onItemEnd(name);
+                  entry.header.offset = dindex;
+                  const localHeader = entry.packLocalHeader();
+                  const dataLength = localHeader.length + compressedData.length;
+                  dindex += dataLength;
+                  dataBlock.push(localHeader);
+                  dataBlock.push(compressedData);
+                  const centalHeader = entry.packCentralHeader();
+                  centralHeaders.push(centalHeader);
+                  mainHeader.size += centalHeader.length;
+                  totalSize += dataLength + centalHeader.length;
+                  totalEntries++;
+                  compress2Buffer(entryLists);
+                });
+              } else {
+                totalSize += mainHeader.mainHeaderSize;
+                mainHeader.offset = dindex;
+                mainHeader.totalEntries = totalEntries;
+                dindex = 0;
+                const outBuffer = Buffer.alloc(totalSize);
+                dataBlock.forEach(function(content) {
+                  content.copy(outBuffer, dindex);
+                  dindex += content.length;
+                });
+                centralHeaders.forEach(function(content) {
+                  content.copy(outBuffer, dindex);
+                  dindex += content.length;
+                });
+                const mh = mainHeader.toBinary();
+                if (_comment) {
+                  _comment.copy(mh, Utils.Constants.ENDHDR);
+                }
+                mh.copy(outBuffer, dindex);
+                inBuffer = outBuffer;
+                loadedEntries = false;
+                onSuccess(outBuffer);
+              }
+            }, "compress2Buffer");
+            compress2Buffer(Array.from(this.entries));
+          } catch (e) {
+            onFail(e);
+          }
+        }, "toAsyncBuffer")
+      };
+    };
+  }
+});
+
+// node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/adm-zip.js
+var require_adm_zip = __commonJS({
+  "node_modules/.pnpm/adm-zip@0.5.16/node_modules/adm-zip/adm-zip.js"(exports2, module2) {
+    var Utils = require_util();
+    var pth = require("path");
+    var ZipEntry = require_zipEntry();
+    var ZipFile = require_zipFile();
+    var get_Bool = /* @__PURE__ */ __name((...val) => Utils.findLast(val, (c) => typeof c === "boolean"), "get_Bool");
+    var get_Str = /* @__PURE__ */ __name((...val) => Utils.findLast(val, (c) => typeof c === "string"), "get_Str");
+    var get_Fun = /* @__PURE__ */ __name((...val) => Utils.findLast(val, (c) => typeof c === "function"), "get_Fun");
+    var defaultOptions = {
+      // option "noSort" : if true it disables files sorting
+      noSort: false,
+      // read entries during load (initial loading may be slower)
+      readEntries: false,
+      // default method is none
+      method: Utils.Constants.NONE,
+      // file system
+      fs: null
+    };
+    module2.exports = function(input, options) {
+      let inBuffer = null;
+      const opts = Object.assign(/* @__PURE__ */ Object.create(null), defaultOptions);
+      if (input && "object" === typeof input) {
+        if (!(input instanceof Uint8Array)) {
+          Object.assign(opts, input);
+          input = opts.input ? opts.input : void 0;
+          if (opts.input) delete opts.input;
+        }
+        if (Buffer.isBuffer(input)) {
+          inBuffer = input;
+          opts.method = Utils.Constants.BUFFER;
+          input = void 0;
+        }
+      }
+      Object.assign(opts, options);
+      const filetools = new Utils(opts);
+      if (typeof opts.decoder !== "object" || typeof opts.decoder.encode !== "function" || typeof opts.decoder.decode !== "function") {
+        opts.decoder = Utils.decoder;
+      }
+      if (input && "string" === typeof input) {
+        if (filetools.fs.existsSync(input)) {
+          opts.method = Utils.Constants.FILE;
+          opts.filename = input;
+          inBuffer = filetools.fs.readFileSync(input);
+        } else {
+          throw Utils.Errors.INVALID_FILENAME();
+        }
+      }
+      const _zip = new ZipFile(inBuffer, opts);
+      const { canonical, sanitize, zipnamefix } = Utils;
+      function getEntry(entry) {
+        if (entry && _zip) {
+          var item;
+          if (typeof entry === "string") item = _zip.getEntry(pth.posix.normalize(entry));
+          if (typeof entry === "object" && typeof entry.entryName !== "undefined" && typeof entry.header !== "undefined") item = _zip.getEntry(entry.entryName);
+          if (item) {
+            return item;
+          }
+        }
+        return null;
+      }
+      __name(getEntry, "getEntry");
+      function fixPath(zipPath) {
+        const { join, normalize, sep } = pth.posix;
+        return join(".", normalize(sep + zipPath.split("\\").join(sep) + sep));
+      }
+      __name(fixPath, "fixPath");
+      function filenameFilter(filterfn) {
+        if (filterfn instanceof RegExp) {
+          return /* @__PURE__ */ (function(rx) {
+            return function(filename) {
+              return rx.test(filename);
+            };
+          })(filterfn);
+        } else if ("function" !== typeof filterfn) {
+          return () => true;
+        }
+        return filterfn;
+      }
+      __name(filenameFilter, "filenameFilter");
+      const relativePath = /* @__PURE__ */ __name((local, entry) => {
+        let lastChar = entry.slice(-1);
+        lastChar = lastChar === filetools.sep ? filetools.sep : "";
+        return pth.relative(local, entry) + lastChar;
+      }, "relativePath");
+      return {
+        /**
+         * Extracts the given entry from the archive and returns the content as a Buffer object
+         * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry
+         * @param {Buffer|string} [pass] - password
+         * @return Buffer or Null in case of error
+         */
+        readFile: /* @__PURE__ */ __name(function(entry, pass) {
+          var item = getEntry(entry);
+          return item && item.getData(pass) || null;
+        }, "readFile"),
+        /**
+         * Returns how many child elements has on entry (directories) on files it is always 0
+         * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry
+         * @returns {integer}
+         */
+        childCount: /* @__PURE__ */ __name(function(entry) {
+          const item = getEntry(entry);
+          if (item) {
+            return _zip.getChildCount(item);
+          }
+        }, "childCount"),
+        /**
+         * Asynchronous readFile
+         * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry
+         * @param {callback} callback
+         *
+         * @return Buffer or Null in case of error
+         */
+        readFileAsync: /* @__PURE__ */ __name(function(entry, callback) {
+          var item = getEntry(entry);
+          if (item) {
+            item.getDataAsync(callback);
+          } else {
+            callback(null, "getEntry failed for:" + entry);
+          }
+        }, "readFileAsync"),
+        /**
+         * Extracts the given entry from the archive and returns the content as plain text in the given encoding
+         * @param {ZipEntry|string} entry - ZipEntry object or String with the full path of the entry
+         * @param {string} encoding - Optional. If no encoding is specified utf8 is used
+         *
+         * @return String
+         */
+        readAsText: /* @__PURE__ */ __name(function(entry, encoding) {
+          var item = getEntry(entry);
+          if (item) {
+            var data = item.getData();
+            if (data && data.length) {
+              return data.toString(encoding || "utf8");
+            }
+          }
+          return "";
+        }, "readAsText"),
+        /**
+         * Asynchronous readAsText
+         * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry
+         * @param {callback} callback
+         * @param {string} [encoding] - Optional. If no encoding is specified utf8 is used
+         *
+         * @return String
+         */
+        readAsTextAsync: /* @__PURE__ */ __name(function(entry, callback, encoding) {
+          var item = getEntry(entry);
+          if (item) {
+            item.getDataAsync(function(data, err) {
+              if (err) {
+                callback(data, err);
+                return;
+              }
+              if (data && data.length) {
+                callback(data.toString(encoding || "utf8"));
+              } else {
+                callback("");
+              }
+            });
+          } else {
+            callback("");
+          }
+        }, "readAsTextAsync"),
+        /**
+         * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory
+         *
+         * @param {ZipEntry|string} entry
+         * @returns {void}
+         */
+        deleteFile: /* @__PURE__ */ __name(function(entry, withsubfolders = true) {
+          var item = getEntry(entry);
+          if (item) {
+            _zip.deleteFile(item.entryName, withsubfolders);
+          }
+        }, "deleteFile"),
+        /**
+         * Remove the entry from the file or directory without affecting any nested entries
+         *
+         * @param {ZipEntry|string} entry
+         * @returns {void}
+         */
+        deleteEntry: /* @__PURE__ */ __name(function(entry) {
+          var item = getEntry(entry);
+          if (item) {
+            _zip.deleteEntry(item.entryName);
+          }
+        }, "deleteEntry"),
+        /**
+         * Adds a comment to the zip. The zip must be rewritten after adding the comment.
+         *
+         * @param {string} comment
+         */
+        addZipComment: /* @__PURE__ */ __name(function(comment) {
+          _zip.comment = comment;
+        }, "addZipComment"),
+        /**
+         * Returns the zip comment
+         *
+         * @return String
+         */
+        getZipComment: /* @__PURE__ */ __name(function() {
+          return _zip.comment || "";
+        }, "getZipComment"),
+        /**
+         * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment
+         * The comment cannot exceed 65535 characters in length
+         *
+         * @param {ZipEntry} entry
+         * @param {string} comment
+         */
+        addZipEntryComment: /* @__PURE__ */ __name(function(entry, comment) {
+          var item = getEntry(entry);
+          if (item) {
+            item.comment = comment;
+          }
+        }, "addZipEntryComment"),
+        /**
+         * Returns the comment of the specified entry
+         *
+         * @param {ZipEntry} entry
+         * @return String
+         */
+        getZipEntryComment: /* @__PURE__ */ __name(function(entry) {
+          var item = getEntry(entry);
+          if (item) {
+            return item.comment || "";
+          }
+          return "";
+        }, "getZipEntryComment"),
+        /**
+         * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content
+         *
+         * @param {ZipEntry} entry
+         * @param {Buffer} content
+         */
+        updateFile: /* @__PURE__ */ __name(function(entry, content) {
+          var item = getEntry(entry);
+          if (item) {
+            item.setData(content);
+          }
+        }, "updateFile"),
+        /**
+         * Adds a file from the disk to the archive
+         *
+         * @param {string} localPath File to add to zip
+         * @param {string} [zipPath] Optional path inside the zip
+         * @param {string} [zipName] Optional name for the file
+         * @param {string} [comment] Optional file comment
+         */
+        addLocalFile: /* @__PURE__ */ __name(function(localPath2, zipPath, zipName, comment) {
+          if (filetools.fs.existsSync(localPath2)) {
+            zipPath = zipPath ? fixPath(zipPath) : "";
+            const p = pth.win32.basename(pth.win32.normalize(localPath2));
+            zipPath += zipName ? zipName : p;
+            const _attr = filetools.fs.statSync(localPath2);
+            const data = _attr.isFile() ? filetools.fs.readFileSync(localPath2) : Buffer.alloc(0);
+            if (_attr.isDirectory()) zipPath += filetools.sep;
+            this.addFile(zipPath, data, comment, _attr);
+          } else {
+            throw Utils.Errors.FILE_NOT_FOUND(localPath2);
+          }
+        }, "addLocalFile"),
+        /**
+         * Callback for showing if everything was done.
+         *
+         * @callback doneCallback
+         * @param {Error} err - Error object
+         * @param {boolean} done - was request fully completed
+         */
+        /**
+         * Adds a file from the disk to the archive
+         *
+         * @param {(object|string)} options - options object, if it is string it us used as localPath.
+         * @param {string} options.localPath - Local path to the file.
+         * @param {string} [options.comment] - Optional file comment.
+         * @param {string} [options.zipPath] - Optional path inside the zip
+         * @param {string} [options.zipName] - Optional name for the file
+         * @param {doneCallback} callback - The callback that handles the response.
+         */
+        addLocalFileAsync: /* @__PURE__ */ __name(function(options2, callback) {
+          options2 = typeof options2 === "object" ? options2 : { localPath: options2 };
+          const localPath2 = pth.resolve(options2.localPath);
+          const { comment } = options2;
+          let { zipPath, zipName } = options2;
+          const self = this;
+          filetools.fs.stat(localPath2, function(err, stats) {
+            if (err) return callback(err, false);
+            zipPath = zipPath ? fixPath(zipPath) : "";
+            const p = pth.win32.basename(pth.win32.normalize(localPath2));
+            zipPath += zipName ? zipName : p;
+            if (stats.isFile()) {
+              filetools.fs.readFile(localPath2, function(err2, data) {
+                if (err2) return callback(err2, false);
+                self.addFile(zipPath, data, comment, stats);
+                return setImmediate(callback, void 0, true);
+              });
+            } else if (stats.isDirectory()) {
+              zipPath += filetools.sep;
+              self.addFile(zipPath, Buffer.alloc(0), comment, stats);
+              return setImmediate(callback, void 0, true);
+            }
+          });
+        }, "addLocalFileAsync"),
+        /**
+         * Adds a local directory and all its nested files and directories to the archive
+         *
+         * @param {string} localPath - local path to the folder
+         * @param {string} [zipPath] - optional path inside zip
+         * @param {(RegExp|function)} [filter] - optional RegExp or Function if files match will be included.
+         */
+        addLocalFolder: /* @__PURE__ */ __name(function(localPath2, zipPath, filter) {
+          filter = filenameFilter(filter);
+          zipPath = zipPath ? fixPath(zipPath) : "";
+          localPath2 = pth.normalize(localPath2);
+          if (filetools.fs.existsSync(localPath2)) {
+            const items = filetools.findFiles(localPath2);
+            const self = this;
+            if (items.length) {
+              for (const filepath of items) {
+                const p = pth.join(zipPath, relativePath(localPath2, filepath));
+                if (filter(p)) {
+                  self.addLocalFile(filepath, pth.dirname(p));
+                }
+              }
+            }
+          } else {
+            throw Utils.Errors.FILE_NOT_FOUND(localPath2);
+          }
+        }, "addLocalFolder"),
+        /**
+         * Asynchronous addLocalFolder
+         * @param {string} localPath
+         * @param {callback} callback
+         * @param {string} [zipPath] optional path inside zip
+         * @param {RegExp|function} [filter] optional RegExp or Function if files match will
+         *               be included.
+         */
+        addLocalFolderAsync: /* @__PURE__ */ __name(function(localPath2, callback, zipPath, filter) {
+          filter = filenameFilter(filter);
+          zipPath = zipPath ? fixPath(zipPath) : "";
+          localPath2 = pth.normalize(localPath2);
+          var self = this;
+          filetools.fs.open(localPath2, "r", function(err) {
+            if (err && err.code === "ENOENT") {
+              callback(void 0, Utils.Errors.FILE_NOT_FOUND(localPath2));
+            } else if (err) {
+              callback(void 0, err);
+            } else {
+              var items = filetools.findFiles(localPath2);
+              var i = -1;
+              var next = /* @__PURE__ */ __name(function() {
+                i += 1;
+                if (i < items.length) {
+                  var filepath = items[i];
+                  var p = relativePath(localPath2, filepath).split("\\").join("/");
+                  p = p.normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[^\x20-\x7E]/g, "");
+                  if (filter(p)) {
+                    filetools.fs.stat(filepath, function(er0, stats) {
+                      if (er0) callback(void 0, er0);
+                      if (stats.isFile()) {
+                        filetools.fs.readFile(filepath, function(er1, data) {
+                          if (er1) {
+                            callback(void 0, er1);
+                          } else {
+                            self.addFile(zipPath + p, data, "", stats);
+                            next();
+                          }
+                        });
+                      } else {
+                        self.addFile(zipPath + p + "/", Buffer.alloc(0), "", stats);
+                        next();
+                      }
+                    });
+                  } else {
+                    process.nextTick(() => {
+                      next();
+                    });
+                  }
+                } else {
+                  callback(true, void 0);
+                }
+              }, "next");
+              next();
+            }
+          });
+        }, "addLocalFolderAsync"),
+        /**
+         * Adds a local directory and all its nested files and directories to the archive
+         *
+         * @param {object | string} options - options object, if it is string it us used as localPath.
+         * @param {string} options.localPath - Local path to the folder.
+         * @param {string} [options.zipPath] - optional path inside zip.
+         * @param {RegExp|function} [options.filter] - optional RegExp or Function if files match will be included.
+         * @param {function|string} [options.namefix] - optional function to help fix filename
+         * @param {doneCallback} callback - The callback that handles the response.
+         *
+         */
+        addLocalFolderAsync2: /* @__PURE__ */ __name(function(options2, callback) {
+          const self = this;
+          options2 = typeof options2 === "object" ? options2 : { localPath: options2 };
+          localPath = pth.resolve(fixPath(options2.localPath));
+          let { zipPath, filter, namefix } = options2;
+          if (filter instanceof RegExp) {
+            filter = /* @__PURE__ */ (function(rx) {
+              return function(filename) {
+                return rx.test(filename);
+              };
+            })(filter);
+          } else if ("function" !== typeof filter) {
+            filter = /* @__PURE__ */ __name(function() {
+              return true;
+            }, "filter");
+          }
+          zipPath = zipPath ? fixPath(zipPath) : "";
+          if (namefix == "latin1") {
+            namefix = /* @__PURE__ */ __name((str) => str.normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[^\x20-\x7E]/g, ""), "namefix");
+          }
+          if (typeof namefix !== "function") namefix = /* @__PURE__ */ __name((str) => str, "namefix");
+          const relPathFix = /* @__PURE__ */ __name((entry) => pth.join(zipPath, namefix(relativePath(localPath, entry))), "relPathFix");
+          const fileNameFix = /* @__PURE__ */ __name((entry) => pth.win32.basename(pth.win32.normalize(namefix(entry))), "fileNameFix");
+          filetools.fs.open(localPath, "r", function(err) {
+            if (err && err.code === "ENOENT") {
+              callback(void 0, Utils.Errors.FILE_NOT_FOUND(localPath));
+            } else if (err) {
+              callback(void 0, err);
+            } else {
+              filetools.findFilesAsync(localPath, function(err2, fileEntries) {
+                if (err2) return callback(err2);
+                fileEntries = fileEntries.filter((dir) => filter(relPathFix(dir)));
+                if (!fileEntries.length) callback(void 0, false);
+                setImmediate(
+                  fileEntries.reverse().reduce(function(next, entry) {
+                    return function(err3, done) {
+                      if (err3 || done === false) return setImmediate(next, err3, false);
+                      self.addLocalFileAsync(
+                        {
+                          localPath: entry,
+                          zipPath: pth.dirname(relPathFix(entry)),
+                          zipName: fileNameFix(entry)
+                        },
+                        next
+                      );
+                    };
+                  }, callback)
+                );
+              });
+            }
+          });
+        }, "addLocalFolderAsync2"),
+        /**
+         * Adds a local directory and all its nested files and directories to the archive
+         *
+         * @param {string} localPath - path where files will be extracted
+         * @param {object} props - optional properties
+         * @param {string} [props.zipPath] - optional path inside zip
+         * @param {RegExp|function} [props.filter] - optional RegExp or Function if files match will be included.
+         * @param {function|string} [props.namefix] - optional function to help fix filename
+         */
+        addLocalFolderPromise: /* @__PURE__ */ __name(function(localPath2, props) {
+          return new Promise((resolve, reject) => {
+            this.addLocalFolderAsync2(Object.assign({ localPath: localPath2 }, props), (err, done) => {
+              if (err) reject(err);
+              if (done) resolve(this);
+            });
+          });
+        }, "addLocalFolderPromise"),
+        /**
+         * Allows you to create a entry (file or directory) in the zip file.
+         * If you want to create a directory the entryName must end in / and a null buffer should be provided.
+         * Comment and attributes are optional
+         *
+         * @param {string} entryName
+         * @param {Buffer | string} content - file content as buffer or utf8 coded string
+         * @param {string} [comment] - file comment
+         * @param {number | object} [attr] - number as unix file permissions, object as filesystem Stats object
+         */
+        addFile: /* @__PURE__ */ __name(function(entryName, content, comment, attr) {
+          entryName = zipnamefix(entryName);
+          let entry = getEntry(entryName);
+          const update = entry != null;
+          if (!update) {
+            entry = new ZipEntry(opts);
+            entry.entryName = entryName;
+          }
+          entry.comment = comment || "";
+          const isStat = "object" === typeof attr && attr instanceof filetools.fs.Stats;
+          if (isStat) {
+            entry.header.time = attr.mtime;
+          }
+          var fileattr = entry.isDirectory ? 16 : 0;
+          let unix = entry.isDirectory ? 16384 : 32768;
+          if (isStat) {
+            unix |= 4095 & attr.mode;
+          } else if ("number" === typeof attr) {
+            unix |= 4095 & attr;
+          } else {
+            unix |= entry.isDirectory ? 493 : 420;
+          }
+          fileattr = (fileattr | unix << 16) >>> 0;
+          entry.attr = fileattr;
+          entry.setData(content);
+          if (!update) _zip.setEntry(entry);
+          return entry;
+        }, "addFile"),
+        /**
+         * Returns an array of ZipEntry objects representing the files and folders inside the archive
+         *
+         * @param {string} [password]
+         * @returns Array
+         */
+        getEntries: /* @__PURE__ */ __name(function(password) {
+          _zip.password = password;
+          return _zip ? _zip.entries : [];
+        }, "getEntries"),
+        /**
+         * Returns a ZipEntry object representing the file or folder specified by ``name``.
+         *
+         * @param {string} name
+         * @return ZipEntry
+         */
+        getEntry: /* @__PURE__ */ __name(function(name) {
+          return getEntry(name);
+        }, "getEntry"),
+        getEntryCount: /* @__PURE__ */ __name(function() {
+          return _zip.getEntryCount();
+        }, "getEntryCount"),
+        forEach: /* @__PURE__ */ __name(function(callback) {
+          return _zip.forEach(callback);
+        }, "forEach"),
+        /**
+         * Extracts the given entry to the given targetPath
+         * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted
+         *
+         * @param {string|ZipEntry} entry - ZipEntry object or String with the full path of the entry
+         * @param {string} targetPath - Target folder where to write the file
+         * @param {boolean} [maintainEntryPath=true] - If maintainEntryPath is true and the entry is inside a folder, the entry folder will be created in targetPath as well. Default is TRUE
+         * @param {boolean} [overwrite=false] - If the file already exists at the target path, the file will be overwriten if this is true.
+         * @param {boolean} [keepOriginalPermission=false] - The file will be set as the permission from the entry if this is true.
+         * @param {string} [outFileName] - String If set will override the filename of the extracted file (Only works if the entry is a file)
+         *
+         * @return Boolean
+         */
+        extractEntryTo: /* @__PURE__ */ __name(function(entry, targetPath, maintainEntryPath, overwrite, keepOriginalPermission, outFileName) {
+          overwrite = get_Bool(false, overwrite);
+          keepOriginalPermission = get_Bool(false, keepOriginalPermission);
+          maintainEntryPath = get_Bool(true, maintainEntryPath);
+          outFileName = get_Str(keepOriginalPermission, outFileName);
+          var item = getEntry(entry);
+          if (!item) {
+            throw Utils.Errors.NO_ENTRY();
+          }
+          var entryName = canonical(item.entryName);
+          var target = sanitize(targetPath, outFileName && !item.isDirectory ? outFileName : maintainEntryPath ? entryName : pth.basename(entryName));
+          if (item.isDirectory) {
+            var children = _zip.getEntryChildren(item);
+            children.forEach(function(child) {
+              if (child.isDirectory) return;
+              var content2 = child.getData();
+              if (!content2) {
+                throw Utils.Errors.CANT_EXTRACT_FILE();
+              }
+              var name = canonical(child.entryName);
+              var childName = sanitize(targetPath, maintainEntryPath ? name : pth.basename(name));
+              const fileAttr2 = keepOriginalPermission ? child.header.fileAttr : void 0;
+              filetools.writeFileTo(childName, content2, overwrite, fileAttr2);
+            });
+            return true;
+          }
+          var content = item.getData(_zip.password);
+          if (!content) throw Utils.Errors.CANT_EXTRACT_FILE();
+          if (filetools.fs.existsSync(target) && !overwrite) {
+            throw Utils.Errors.CANT_OVERRIDE();
+          }
+          const fileAttr = keepOriginalPermission ? entry.header.fileAttr : void 0;
+          filetools.writeFileTo(target, content, overwrite, fileAttr);
+          return true;
+        }, "extractEntryTo"),
+        /**
+         * Test the archive
+         * @param {string} [pass]
+         */
+        test: /* @__PURE__ */ __name(function(pass) {
+          if (!_zip) {
+            return false;
+          }
+          for (var entry in _zip.entries) {
+            try {
+              if (entry.isDirectory) {
+                continue;
+              }
+              var content = _zip.entries[entry].getData(pass);
+              if (!content) {
+                return false;
+              }
+            } catch (err) {
+              return false;
+            }
+          }
+          return true;
+        }, "test"),
+        /**
+         * Extracts the entire archive to the given location
+         *
+         * @param {string} targetPath Target location
+         * @param {boolean} [overwrite=false] If the file already exists at the target path, the file will be overwriten if this is true.
+         *                  Default is FALSE
+         * @param {boolean} [keepOriginalPermission=false] The file will be set as the permission from the entry if this is true.
+         *                  Default is FALSE
+         * @param {string|Buffer} [pass] password
+         */
+        extractAllTo: /* @__PURE__ */ __name(function(targetPath, overwrite, keepOriginalPermission, pass) {
+          keepOriginalPermission = get_Bool(false, keepOriginalPermission);
+          pass = get_Str(keepOriginalPermission, pass);
+          overwrite = get_Bool(false, overwrite);
+          if (!_zip) throw Utils.Errors.NO_ZIP();
+          _zip.entries.forEach(function(entry) {
+            var entryName = sanitize(targetPath, canonical(entry.entryName));
+            if (entry.isDirectory) {
+              filetools.makeDir(entryName);
+              return;
+            }
+            var content = entry.getData(pass);
+            if (!content) {
+              throw Utils.Errors.CANT_EXTRACT_FILE();
+            }
+            const fileAttr = keepOriginalPermission ? entry.header.fileAttr : void 0;
+            filetools.writeFileTo(entryName, content, overwrite, fileAttr);
+            try {
+              filetools.fs.utimesSync(entryName, entry.header.time, entry.header.time);
+            } catch (err) {
+              throw Utils.Errors.CANT_EXTRACT_FILE();
+            }
+          });
+        }, "extractAllTo"),
+        /**
+         * Asynchronous extractAllTo
+         *
+         * @param {string} targetPath Target location
+         * @param {boolean} [overwrite=false] If the file already exists at the target path, the file will be overwriten if this is true.
+         *                  Default is FALSE
+         * @param {boolean} [keepOriginalPermission=false] The file will be set as the permission from the entry if this is true.
+         *                  Default is FALSE
+         * @param {function} callback The callback will be executed when all entries are extracted successfully or any error is thrown.
+         */
+        extractAllToAsync: /* @__PURE__ */ __name(function(targetPath, overwrite, keepOriginalPermission, callback) {
+          callback = get_Fun(overwrite, keepOriginalPermission, callback);
+          keepOriginalPermission = get_Bool(false, keepOriginalPermission);
+          overwrite = get_Bool(false, overwrite);
+          if (!callback) {
+            return new Promise((resolve, reject) => {
+              this.extractAllToAsync(targetPath, overwrite, keepOriginalPermission, function(err) {
+                if (err) {
+                  reject(err);
+                } else {
+                  resolve(this);
+                }
+              });
+            });
+          }
+          if (!_zip) {
+            callback(Utils.Errors.NO_ZIP());
+            return;
+          }
+          targetPath = pth.resolve(targetPath);
+          const getPath = /* @__PURE__ */ __name((entry) => sanitize(targetPath, pth.normalize(canonical(entry.entryName))), "getPath");
+          const getError = /* @__PURE__ */ __name((msg, file) => new Error(msg + ': "' + file + '"'), "getError");
+          const dirEntries = [];
+          const fileEntries = [];
+          _zip.entries.forEach((e) => {
+            if (e.isDirectory) {
+              dirEntries.push(e);
+            } else {
+              fileEntries.push(e);
+            }
+          });
+          for (const entry of dirEntries) {
+            const dirPath = getPath(entry);
+            const dirAttr = keepOriginalPermission ? entry.header.fileAttr : void 0;
+            try {
+              filetools.makeDir(dirPath);
+              if (dirAttr) filetools.fs.chmodSync(dirPath, dirAttr);
+              filetools.fs.utimesSync(dirPath, entry.header.time, entry.header.time);
+            } catch (er) {
+              callback(getError("Unable to create folder", dirPath));
+            }
+          }
+          fileEntries.reverse().reduce(function(next, entry) {
+            return function(err) {
+              if (err) {
+                next(err);
+              } else {
+                const entryName = pth.normalize(canonical(entry.entryName));
+                const filePath = sanitize(targetPath, entryName);
+                entry.getDataAsync(function(content, err_1) {
+                  if (err_1) {
+                    next(err_1);
+                  } else if (!content) {
+                    next(Utils.Errors.CANT_EXTRACT_FILE());
+                  } else {
+                    const fileAttr = keepOriginalPermission ? entry.header.fileAttr : void 0;
+                    filetools.writeFileToAsync(filePath, content, overwrite, fileAttr, function(succ) {
+                      if (!succ) {
+                        next(getError("Unable to write file", filePath));
+                      }
+                      filetools.fs.utimes(filePath, entry.header.time, entry.header.time, function(err_2) {
+                        if (err_2) {
+                          next(getError("Unable to set times", filePath));
+                        } else {
+                          next();
+                        }
+                      });
+                    });
+                  }
+                });
+              }
+            };
+          }, callback)();
+        }, "extractAllToAsync"),
+        /**
+         * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip
+         *
+         * @param {string} targetFileName
+         * @param {function} callback
+         */
+        writeZip: /* @__PURE__ */ __name(function(targetFileName, callback) {
+          if (arguments.length === 1) {
+            if (typeof targetFileName === "function") {
+              callback = targetFileName;
+              targetFileName = "";
+            }
+          }
+          if (!targetFileName && opts.filename) {
+            targetFileName = opts.filename;
+          }
+          if (!targetFileName) return;
+          var zipData = _zip.compressToBuffer();
+          if (zipData) {
+            var ok = filetools.writeFileTo(targetFileName, zipData, true);
+            if (typeof callback === "function") callback(!ok ? new Error("failed") : null, "");
+          }
+        }, "writeZip"),
+        /**
+                 *
+                 * @param {string} targetFileName
+                 * @param {object} [props]
+                 * @param {boolean} [props.overwrite=true] If the file already exists at the target path, the file will be overwriten if this is true.
+                 * @param {boolean} [props.perm] The file will be set as the permission from the entry if this is true.
+        
+                 * @returns {Promise}
+                 */
+        writeZipPromise: /* @__PURE__ */ __name(function(targetFileName, props) {
+          const { overwrite, perm } = Object.assign({ overwrite: true }, props);
+          return new Promise((resolve, reject) => {
+            if (!targetFileName && opts.filename) targetFileName = opts.filename;
+            if (!targetFileName) reject("ADM-ZIP: ZIP File Name Missing");
+            this.toBufferPromise().then((zipData) => {
+              const ret = /* @__PURE__ */ __name((done) => done ? resolve(done) : reject("ADM-ZIP: Wasn't able to write zip file"), "ret");
+              filetools.writeFileToAsync(targetFileName, zipData, overwrite, perm, ret);
+            }, reject);
+          });
+        }, "writeZipPromise"),
+        /**
+         * @returns {Promise} A promise to the Buffer.
+         */
+        toBufferPromise: /* @__PURE__ */ __name(function() {
+          return new Promise((resolve, reject) => {
+            _zip.toAsyncBuffer(resolve, reject);
+          });
+        }, "toBufferPromise"),
+        /**
+         * Returns the content of the entire zip file as a Buffer object
+         *
+         * @prop {function} [onSuccess]
+         * @prop {function} [onFail]
+         * @prop {function} [onItemStart]
+         * @prop {function} [onItemEnd]
+         * @returns {Buffer}
+         */
+        toBuffer: /* @__PURE__ */ __name(function(onSuccess, onFail, onItemStart, onItemEnd) {
+          if (typeof onSuccess === "function") {
+            _zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd);
+            return null;
+          }
+          return _zip.compressToBuffer();
+        }, "toBuffer")
+      };
+    };
+  }
+});
+
+// src/external/adm-zip.js
+module.exports = require_adm_zip();
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/cacache.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/cacache.js
new file mode 100644
index 00000000..a861768d
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/cacache.js
@@ -0,0 +1,5 @@
+'use strict'
+
+// Re-export from npm-pack bundle for better deduplication
+const { cacache } = require('./npm-pack')
+module.exports = cacache
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/debug.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/debug.js
new file mode 100644
index 00000000..e8ac438e
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/debug.js
@@ -0,0 +1,871 @@
+"use strict";
+/**
+ * Bundled from debug
+ * This is a zero-dependency bundle created by esbuild.
+ */
+"use strict";
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+var __esm = (fn, res) => function __init() {
+  return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
+};
+var __commonJS = (cb, mod) => function __require() {
+  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js
+var require_ms = __commonJS({
+  "node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js"(exports2, module2) {
+    var s = 1e3;
+    var m = s * 60;
+    var h = m * 60;
+    var d = h * 24;
+    var w = d * 7;
+    var y = d * 365.25;
+    module2.exports = function(val, options) {
+      options = options || {};
+      var type = typeof val;
+      if (type === "string" && val.length > 0) {
+        return parse(val);
+      } else if (type === "number" && isFinite(val)) {
+        return options.long ? fmtLong(val) : fmtShort(val);
+      }
+      throw new Error(
+        "val is not a non-empty string or a valid number. val=" + JSON.stringify(val)
+      );
+    };
+    function parse(str) {
+      str = String(str);
+      if (str.length > 100) {
+        return;
+      }
+      var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
+        str
+      );
+      if (!match) {
+        return;
+      }
+      var n = parseFloat(match[1]);
+      var type = (match[2] || "ms").toLowerCase();
+      switch (type) {
+        case "years":
+        case "year":
+        case "yrs":
+        case "yr":
+        case "y":
+          return n * y;
+        case "weeks":
+        case "week":
+        case "w":
+          return n * w;
+        case "days":
+        case "day":
+        case "d":
+          return n * d;
+        case "hours":
+        case "hour":
+        case "hrs":
+        case "hr":
+        case "h":
+          return n * h;
+        case "minutes":
+        case "minute":
+        case "mins":
+        case "min":
+        case "m":
+          return n * m;
+        case "seconds":
+        case "second":
+        case "secs":
+        case "sec":
+        case "s":
+          return n * s;
+        case "milliseconds":
+        case "millisecond":
+        case "msecs":
+        case "msec":
+        case "ms":
+          return n;
+        default:
+          return void 0;
+      }
+    }
+    __name(parse, "parse");
+    function fmtShort(ms) {
+      var msAbs = Math.abs(ms);
+      if (msAbs >= d) {
+        return Math.round(ms / d) + "d";
+      }
+      if (msAbs >= h) {
+        return Math.round(ms / h) + "h";
+      }
+      if (msAbs >= m) {
+        return Math.round(ms / m) + "m";
+      }
+      if (msAbs >= s) {
+        return Math.round(ms / s) + "s";
+      }
+      return ms + "ms";
+    }
+    __name(fmtShort, "fmtShort");
+    function fmtLong(ms) {
+      var msAbs = Math.abs(ms);
+      if (msAbs >= d) {
+        return plural(ms, msAbs, d, "day");
+      }
+      if (msAbs >= h) {
+        return plural(ms, msAbs, h, "hour");
+      }
+      if (msAbs >= m) {
+        return plural(ms, msAbs, m, "minute");
+      }
+      if (msAbs >= s) {
+        return plural(ms, msAbs, s, "second");
+      }
+      return ms + " ms";
+    }
+    __name(fmtLong, "fmtLong");
+    function plural(ms, msAbs, n, name) {
+      var isPlural = msAbs >= n * 1.5;
+      return Math.round(ms / n) + " " + name + (isPlural ? "s" : "");
+    }
+    __name(plural, "plural");
+  }
+});
+
+// node_modules/.pnpm/debug@4.4.3_supports-color@10.2.2/node_modules/debug/src/common.js
+var require_common = __commonJS({
+  "node_modules/.pnpm/debug@4.4.3_supports-color@10.2.2/node_modules/debug/src/common.js"(exports2, module2) {
+    function setup(env2) {
+      createDebug.debug = createDebug;
+      createDebug.default = createDebug;
+      createDebug.coerce = coerce;
+      createDebug.disable = disable;
+      createDebug.enable = enable;
+      createDebug.enabled = enabled;
+      createDebug.humanize = require_ms();
+      createDebug.destroy = destroy;
+      Object.keys(env2).forEach((key) => {
+        createDebug[key] = env2[key];
+      });
+      createDebug.names = [];
+      createDebug.skips = [];
+      createDebug.formatters = {};
+      function selectColor(namespace) {
+        let hash = 0;
+        for (let i = 0; i < namespace.length; i++) {
+          hash = (hash << 5) - hash + namespace.charCodeAt(i);
+          hash |= 0;
+        }
+        return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
+      }
+      __name(selectColor, "selectColor");
+      createDebug.selectColor = selectColor;
+      function createDebug(namespace) {
+        let prevTime;
+        let enableOverride = null;
+        let namespacesCache;
+        let enabledCache;
+        function debug(...args) {
+          if (!debug.enabled) {
+            return;
+          }
+          const self = debug;
+          const curr = Number(/* @__PURE__ */ new Date());
+          const ms = curr - (prevTime || curr);
+          self.diff = ms;
+          self.prev = prevTime;
+          self.curr = curr;
+          prevTime = curr;
+          args[0] = createDebug.coerce(args[0]);
+          if (typeof args[0] !== "string") {
+            args.unshift("%O");
+          }
+          let index = 0;
+          args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
+            if (match === "%%") {
+              return "%";
+            }
+            index++;
+            const formatter = createDebug.formatters[format];
+            if (typeof formatter === "function") {
+              const val = args[index];
+              match = formatter.call(self, val);
+              args.splice(index, 1);
+              index--;
+            }
+            return match;
+          });
+          createDebug.formatArgs.call(self, args);
+          const logFn = self.log || createDebug.log;
+          logFn.apply(self, args);
+        }
+        __name(debug, "debug");
+        debug.namespace = namespace;
+        debug.useColors = createDebug.useColors();
+        debug.color = createDebug.selectColor(namespace);
+        debug.extend = extend;
+        debug.destroy = createDebug.destroy;
+        Object.defineProperty(debug, "enabled", {
+          enumerable: true,
+          configurable: false,
+          get: /* @__PURE__ */ __name(() => {
+            if (enableOverride !== null) {
+              return enableOverride;
+            }
+            if (namespacesCache !== createDebug.namespaces) {
+              namespacesCache = createDebug.namespaces;
+              enabledCache = createDebug.enabled(namespace);
+            }
+            return enabledCache;
+          }, "get"),
+          set: /* @__PURE__ */ __name((v) => {
+            enableOverride = v;
+          }, "set")
+        });
+        if (typeof createDebug.init === "function") {
+          createDebug.init(debug);
+        }
+        return debug;
+      }
+      __name(createDebug, "createDebug");
+      function extend(namespace, delimiter) {
+        const newDebug = createDebug(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace);
+        newDebug.log = this.log;
+        return newDebug;
+      }
+      __name(extend, "extend");
+      function enable(namespaces) {
+        createDebug.save(namespaces);
+        createDebug.namespaces = namespaces;
+        createDebug.names = [];
+        createDebug.skips = [];
+        const split = (typeof namespaces === "string" ? namespaces : "").trim().replace(/\s+/g, ",").split(",").filter(Boolean);
+        for (const ns of split) {
+          if (ns[0] === "-") {
+            createDebug.skips.push(ns.slice(1));
+          } else {
+            createDebug.names.push(ns);
+          }
+        }
+      }
+      __name(enable, "enable");
+      function matchesTemplate(search, template) {
+        let searchIndex = 0;
+        let templateIndex = 0;
+        let starIndex = -1;
+        let matchIndex = 0;
+        while (searchIndex < search.length) {
+          if (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === "*")) {
+            if (template[templateIndex] === "*") {
+              starIndex = templateIndex;
+              matchIndex = searchIndex;
+              templateIndex++;
+            } else {
+              searchIndex++;
+              templateIndex++;
+            }
+          } else if (starIndex !== -1) {
+            templateIndex = starIndex + 1;
+            matchIndex++;
+            searchIndex = matchIndex;
+          } else {
+            return false;
+          }
+        }
+        while (templateIndex < template.length && template[templateIndex] === "*") {
+          templateIndex++;
+        }
+        return templateIndex === template.length;
+      }
+      __name(matchesTemplate, "matchesTemplate");
+      function disable() {
+        const namespaces = [
+          ...createDebug.names,
+          ...createDebug.skips.map((namespace) => "-" + namespace)
+        ].join(",");
+        createDebug.enable("");
+        return namespaces;
+      }
+      __name(disable, "disable");
+      function enabled(name) {
+        for (const skip of createDebug.skips) {
+          if (matchesTemplate(name, skip)) {
+            return false;
+          }
+        }
+        for (const ns of createDebug.names) {
+          if (matchesTemplate(name, ns)) {
+            return true;
+          }
+        }
+        return false;
+      }
+      __name(enabled, "enabled");
+      function coerce(val) {
+        if (val instanceof Error) {
+          return val.stack || val.message;
+        }
+        return val;
+      }
+      __name(coerce, "coerce");
+      function destroy() {
+        /* @__PURE__ */ console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
+      }
+      __name(destroy, "destroy");
+      createDebug.enable(createDebug.load());
+      return createDebug;
+    }
+    __name(setup, "setup");
+    module2.exports = setup;
+  }
+});
+
+// node_modules/.pnpm/debug@4.4.3_supports-color@10.2.2/node_modules/debug/src/browser.js
+var require_browser = __commonJS({
+  "node_modules/.pnpm/debug@4.4.3_supports-color@10.2.2/node_modules/debug/src/browser.js"(exports2, module2) {
+    exports2.formatArgs = formatArgs;
+    exports2.save = save;
+    exports2.load = load;
+    exports2.useColors = useColors;
+    exports2.storage = localstorage();
+    exports2.destroy = /* @__PURE__ */ (() => {
+      let warned = false;
+      return () => {
+        if (!warned) {
+          warned = true;
+          /* @__PURE__ */ console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
+        }
+      };
+    })();
+    exports2.colors = [
+      "#0000CC",
+      "#0000FF",
+      "#0033CC",
+      "#0033FF",
+      "#0066CC",
+      "#0066FF",
+      "#0099CC",
+      "#0099FF",
+      "#00CC00",
+      "#00CC33",
+      "#00CC66",
+      "#00CC99",
+      "#00CCCC",
+      "#00CCFF",
+      "#3300CC",
+      "#3300FF",
+      "#3333CC",
+      "#3333FF",
+      "#3366CC",
+      "#3366FF",
+      "#3399CC",
+      "#3399FF",
+      "#33CC00",
+      "#33CC33",
+      "#33CC66",
+      "#33CC99",
+      "#33CCCC",
+      "#33CCFF",
+      "#6600CC",
+      "#6600FF",
+      "#6633CC",
+      "#6633FF",
+      "#66CC00",
+      "#66CC33",
+      "#9900CC",
+      "#9900FF",
+      "#9933CC",
+      "#9933FF",
+      "#99CC00",
+      "#99CC33",
+      "#CC0000",
+      "#CC0033",
+      "#CC0066",
+      "#CC0099",
+      "#CC00CC",
+      "#CC00FF",
+      "#CC3300",
+      "#CC3333",
+      "#CC3366",
+      "#CC3399",
+      "#CC33CC",
+      "#CC33FF",
+      "#CC6600",
+      "#CC6633",
+      "#CC9900",
+      "#CC9933",
+      "#CCCC00",
+      "#CCCC33",
+      "#FF0000",
+      "#FF0033",
+      "#FF0066",
+      "#FF0099",
+      "#FF00CC",
+      "#FF00FF",
+      "#FF3300",
+      "#FF3333",
+      "#FF3366",
+      "#FF3399",
+      "#FF33CC",
+      "#FF33FF",
+      "#FF6600",
+      "#FF6633",
+      "#FF9900",
+      "#FF9933",
+      "#FFCC00",
+      "#FFCC33"
+    ];
+    function useColors() {
+      if (false) {
+        return true;
+      }
+      if (false) {
+        return false;
+      }
+      let m;
+      return (
+        // Double check webkit in userAgent just in case we are in a worker
+        false
+      );
+    }
+    __name(useColors, "useColors");
+    function formatArgs(args) {
+      args[0] = (this.useColors ? "%c" : "") + this.namespace + (this.useColors ? " %c" : " ") + args[0] + (this.useColors ? "%c " : " ") + "+" + module2.exports.humanize(this.diff);
+      if (!this.useColors) {
+        return;
+      }
+      const c = "color: " + this.color;
+      args.splice(1, 0, c, "color: inherit");
+      let index = 0;
+      let lastC = 0;
+      args[0].replace(/%[a-zA-Z%]/g, (match) => {
+        if (match === "%%") {
+          return;
+        }
+        index++;
+        if (match === "%c") {
+          lastC = index;
+        }
+      });
+      args.splice(lastC, 0, c);
+    }
+    __name(formatArgs, "formatArgs");
+    exports2.log = console.debug || console.log || (() => {
+    });
+    function save(namespaces) {
+      try {
+        if (namespaces) {
+          exports2.storage.setItem("debug", namespaces);
+        } else {
+          exports2.storage.removeItem("debug");
+        }
+      } catch (error) {
+      }
+    }
+    __name(save, "save");
+    function load() {
+      let r;
+      try {
+        r = exports2.storage.getItem("debug") || exports2.storage.getItem("DEBUG");
+      } catch (error) {
+      }
+      if (!r && typeof process !== "undefined" && "env" in process) {
+        r = void 0;
+      }
+      return r;
+    }
+    __name(load, "load");
+    function localstorage() {
+      try {
+        return void 0;
+      } catch (error) {
+      }
+    }
+    __name(localstorage, "localstorage");
+    module2.exports = require_common()(exports2);
+    var { formatters } = module2.exports;
+    formatters.j = function(v) {
+      try {
+        return JSON.stringify(v);
+      } catch (error) {
+        return "[UnexpectedJSONParseError]: " + error.message;
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/supports-color@10.2.2/node_modules/supports-color/index.js
+var supports_color_exports = {};
+__export(supports_color_exports, {
+  createSupportsColor: () => createSupportsColor,
+  default: () => supports_color_default
+});
+function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : import_node_process.default.argv) {
+  const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
+  const position = argv.indexOf(prefix + flag);
+  const terminatorPosition = argv.indexOf("--");
+  return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
+}
+function envForceColor() {
+  if (!("FORCE_COLOR" in env)) {
+    return;
+  }
+  if (env.FORCE_COLOR === "true") {
+    return 1;
+  }
+  if (env.FORCE_COLOR === "false") {
+    return 0;
+  }
+  if (env.FORCE_COLOR.length === 0) {
+    return 1;
+  }
+  const level = Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);
+  if (![0, 1, 2, 3].includes(level)) {
+    return;
+  }
+  return level;
+}
+function translateLevel(level) {
+  if (level === 0) {
+    return false;
+  }
+  return {
+    level,
+    hasBasic: true,
+    has256: level >= 2,
+    has16m: level >= 3
+  };
+}
+function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
+  const noFlagForceColor = envForceColor();
+  if (noFlagForceColor !== void 0) {
+    flagForceColor = noFlagForceColor;
+  }
+  const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
+  if (forceColor === 0) {
+    return 0;
+  }
+  if (sniffFlags) {
+    if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) {
+      return 3;
+    }
+    if (hasFlag("color=256")) {
+      return 2;
+    }
+  }
+  if ("TF_BUILD" in env && "AGENT_NAME" in env) {
+    return 1;
+  }
+  if (haveStream && !streamIsTTY && forceColor === void 0) {
+    return 0;
+  }
+  const min = forceColor || 0;
+  if (env.TERM === "dumb") {
+    return min;
+  }
+  if (import_node_process.default.platform === "win32") {
+    const osRelease = import_node_os.default.release().split(".");
+    if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
+      return Number(osRelease[2]) >= 14931 ? 3 : 2;
+    }
+    return 1;
+  }
+  if ("CI" in env) {
+    if (["GITHUB_ACTIONS", "GITEA_ACTIONS", "CIRCLECI"].some((key) => key in env)) {
+      return 3;
+    }
+    if (["TRAVIS", "APPVEYOR", "GITLAB_CI", "BUILDKITE", "DRONE"].some((sign) => sign in env) || env.CI_NAME === "codeship") {
+      return 1;
+    }
+    return min;
+  }
+  if ("TEAMCITY_VERSION" in env) {
+    return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
+  }
+  if (env.COLORTERM === "truecolor") {
+    return 3;
+  }
+  if (env.TERM === "xterm-kitty") {
+    return 3;
+  }
+  if (env.TERM === "xterm-ghostty") {
+    return 3;
+  }
+  if (env.TERM === "wezterm") {
+    return 3;
+  }
+  if ("TERM_PROGRAM" in env) {
+    const version = Number.parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
+    switch (env.TERM_PROGRAM) {
+      case "iTerm.app": {
+        return version >= 3 ? 3 : 2;
+      }
+      case "Apple_Terminal": {
+        return 2;
+      }
+    }
+  }
+  if (/-256(color)?$/i.test(env.TERM)) {
+    return 2;
+  }
+  if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
+    return 1;
+  }
+  if ("COLORTERM" in env) {
+    return 1;
+  }
+  return min;
+}
+function createSupportsColor(stream, options = {}) {
+  const level = _supportsColor(stream, {
+    streamIsTTY: stream && stream.isTTY,
+    ...options
+  });
+  return translateLevel(level);
+}
+var import_node_process, import_node_os, import_node_tty, env, flagForceColor, supportsColor, supports_color_default;
+var init_supports_color = __esm({
+  "node_modules/.pnpm/supports-color@10.2.2/node_modules/supports-color/index.js"() {
+    import_node_process = __toESM(require("node:process"), 1);
+    import_node_os = __toESM(require("node:os"), 1);
+    import_node_tty = __toESM(require("node:tty"), 1);
+    __name(hasFlag, "hasFlag");
+    ({ env } = import_node_process.default);
+    if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) {
+      flagForceColor = 0;
+    } else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) {
+      flagForceColor = 1;
+    }
+    __name(envForceColor, "envForceColor");
+    __name(translateLevel, "translateLevel");
+    __name(_supportsColor, "_supportsColor");
+    __name(createSupportsColor, "createSupportsColor");
+    supportsColor = {
+      stdout: createSupportsColor({ isTTY: import_node_tty.default.isatty(1) }),
+      stderr: createSupportsColor({ isTTY: import_node_tty.default.isatty(2) })
+    };
+    supports_color_default = supportsColor;
+  }
+});
+
+// node_modules/.pnpm/debug@4.4.3_supports-color@10.2.2/node_modules/debug/src/node.js
+var require_node = __commonJS({
+  "node_modules/.pnpm/debug@4.4.3_supports-color@10.2.2/node_modules/debug/src/node.js"(exports2, module2) {
+    var tty2 = require("tty");
+    var util = require("util");
+    exports2.init = init;
+    exports2.log = log;
+    exports2.formatArgs = formatArgs;
+    exports2.save = save;
+    exports2.load = load;
+    exports2.useColors = useColors;
+    exports2.destroy = util.deprecate(
+      () => {
+      },
+      "Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."
+    );
+    exports2.colors = [6, 2, 3, 4, 5, 1];
+    try {
+      const supportsColor2 = (init_supports_color(), __toCommonJS(supports_color_exports));
+      if (supportsColor2 && (supportsColor2.stderr || supportsColor2).level >= 2) {
+        exports2.colors = [
+          20,
+          21,
+          26,
+          27,
+          32,
+          33,
+          38,
+          39,
+          40,
+          41,
+          42,
+          43,
+          44,
+          45,
+          56,
+          57,
+          62,
+          63,
+          68,
+          69,
+          74,
+          75,
+          76,
+          77,
+          78,
+          79,
+          80,
+          81,
+          92,
+          93,
+          98,
+          99,
+          112,
+          113,
+          128,
+          129,
+          134,
+          135,
+          148,
+          149,
+          160,
+          161,
+          162,
+          163,
+          164,
+          165,
+          166,
+          167,
+          168,
+          169,
+          170,
+          171,
+          172,
+          173,
+          178,
+          179,
+          184,
+          185,
+          196,
+          197,
+          198,
+          199,
+          200,
+          201,
+          202,
+          203,
+          204,
+          205,
+          206,
+          207,
+          208,
+          209,
+          214,
+          215,
+          220,
+          221
+        ];
+      }
+    } catch (error) {
+    }
+    exports2.inspectOpts = Object.keys(process.env).filter((key) => {
+      return /^debug_/i.test(key);
+    }).reduce((obj, key) => {
+      const prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, (_, k) => {
+        return k.toUpperCase();
+      });
+      let val = process.env[key];
+      if (/^(yes|on|true|enabled)$/i.test(val)) {
+        val = true;
+      } else if (/^(no|off|false|disabled)$/i.test(val)) {
+        val = false;
+      } else if (val === "null") {
+        val = null;
+      } else {
+        val = Number(val);
+      }
+      obj[prop] = val;
+      return obj;
+    }, {});
+    function useColors() {
+      return "colors" in exports2.inspectOpts ? Boolean(exports2.inspectOpts.colors) : tty2.isatty(process.stderr.fd);
+    }
+    __name(useColors, "useColors");
+    function formatArgs(args) {
+      const { namespace: name, useColors: useColors2 } = this;
+      if (useColors2) {
+        const c = this.color;
+        const colorCode = "\x1B[3" + (c < 8 ? c : "8;5;" + c);
+        const prefix = `  ${colorCode};1m${name} \x1B[0m`;
+        args[0] = prefix + args[0].split("\n").join("\n" + prefix);
+        args.push(colorCode + "m+" + module2.exports.humanize(this.diff) + "\x1B[0m");
+      } else {
+        args[0] = getDate() + name + " " + args[0];
+      }
+    }
+    __name(formatArgs, "formatArgs");
+    function getDate() {
+      if (exports2.inspectOpts.hideDate) {
+        return "";
+      }
+      return (/* @__PURE__ */ new Date()).toISOString() + " ";
+    }
+    __name(getDate, "getDate");
+    function log(...args) {
+      return process.stderr.write(util.formatWithOptions(exports2.inspectOpts, ...args) + "\n");
+    }
+    __name(log, "log");
+    function save(namespaces) {
+      if (namespaces) {
+        process.env.DEBUG = namespaces;
+      } else {
+        delete void 0;
+      }
+    }
+    __name(save, "save");
+    function load() {
+      return void 0;
+    }
+    __name(load, "load");
+    function init(debug) {
+      debug.inspectOpts = {};
+      const keys = Object.keys(exports2.inspectOpts);
+      for (let i = 0; i < keys.length; i++) {
+        debug.inspectOpts[keys[i]] = exports2.inspectOpts[keys[i]];
+      }
+    }
+    __name(init, "init");
+    module2.exports = require_common()(exports2);
+    var { formatters } = module2.exports;
+    formatters.o = function(v) {
+      this.inspectOpts.colors = this.useColors;
+      return util.inspect(v, this.inspectOpts).split("\n").map((str) => str.trim()).join(" ");
+    };
+    formatters.O = function(v) {
+      this.inspectOpts.colors = this.useColors;
+      return util.inspect(v, this.inspectOpts);
+    };
+  }
+});
+
+// node_modules/.pnpm/debug@4.4.3_supports-color@10.2.2/node_modules/debug/src/index.js
+var require_src = __commonJS({
+  "node_modules/.pnpm/debug@4.4.3_supports-color@10.2.2/node_modules/debug/src/index.js"(exports2, module2) {
+    if (typeof process === "undefined" || process.type === "renderer" || false || process.__nwjs) {
+      module2.exports = require_browser();
+    } else {
+      module2.exports = require_node();
+    }
+  }
+});
+
+// src/external/debug.js
+module.exports = require_src();
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/del.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/del.js
new file mode 100644
index 00000000..663eb9d2
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/del.js
@@ -0,0 +1,6 @@
+'use strict'
+
+// Re-export from pico-pack bundle.
+const { del } = require('./pico-pack.js')
+
+module.exports = del
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/external-pack.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/external-pack.js
new file mode 100644
index 00000000..56f9d285
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/external-pack.js
@@ -0,0 +1,3411 @@
+"use strict";
+/**
+ * Bundled from external-pack
+ * This is a zero-dependency bundle created by esbuild.
+ */
+"use strict";
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+var __esm = (fn, res) => function __init() {
+  return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
+};
+var __commonJS = (cb, mod) => function __require() {
+  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/cjs/signals.js
+var require_signals = __commonJS({
+  "node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/cjs/signals.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.signals = void 0;
+    exports2.signals = [];
+    exports2.signals.push("SIGHUP", "SIGINT", "SIGTERM");
+    if (process.platform !== "win32") {
+      exports2.signals.push(
+        "SIGALRM",
+        "SIGABRT",
+        "SIGVTALRM",
+        "SIGXCPU",
+        "SIGXFSZ",
+        "SIGUSR2",
+        "SIGTRAP",
+        "SIGSYS",
+        "SIGQUIT",
+        "SIGIOT"
+        // should detect profiler and enable/disable accordingly.
+        // see #21
+        // 'SIGPROF'
+      );
+    }
+    if (process.platform === "linux") {
+      exports2.signals.push("SIGIO", "SIGPOLL", "SIGPWR", "SIGSTKFLT");
+    }
+  }
+});
+
+// node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/cjs/index.js
+var require_cjs = __commonJS({
+  "node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/cjs/index.js"(exports2) {
+    "use strict";
+    var _a;
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.unload = exports2.load = exports2.onExit = exports2.signals = void 0;
+    var signals_js_1 = require_signals();
+    Object.defineProperty(exports2, "signals", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return signals_js_1.signals;
+    }, "get") });
+    var processOk = /* @__PURE__ */ __name((process5) => !!process5 && typeof process5 === "object" && typeof process5.removeListener === "function" && typeof process5.emit === "function" && typeof process5.reallyExit === "function" && typeof process5.listeners === "function" && typeof process5.kill === "function" && typeof process5.pid === "number" && typeof process5.on === "function", "processOk");
+    var kExitEmitter = Symbol.for("signal-exit emitter");
+    var global = globalThis;
+    var ObjectDefineProperty = Object.defineProperty.bind(Object);
+    var Emitter = class {
+      static {
+        __name(this, "Emitter");
+      }
+      emitted = {
+        afterExit: false,
+        exit: false
+      };
+      listeners = {
+        afterExit: [],
+        exit: []
+      };
+      count = 0;
+      id = Math.random();
+      constructor() {
+        if (global[kExitEmitter]) {
+          return global[kExitEmitter];
+        }
+        ObjectDefineProperty(global, kExitEmitter, {
+          value: this,
+          writable: false,
+          enumerable: false,
+          configurable: false
+        });
+      }
+      on(ev, fn) {
+        this.listeners[ev].push(fn);
+      }
+      removeListener(ev, fn) {
+        const list = this.listeners[ev];
+        const i = list.indexOf(fn);
+        if (i === -1) {
+          return;
+        }
+        if (i === 0 && list.length === 1) {
+          list.length = 0;
+        } else {
+          list.splice(i, 1);
+        }
+      }
+      emit(ev, code, signal) {
+        if (this.emitted[ev]) {
+          return false;
+        }
+        this.emitted[ev] = true;
+        let ret = false;
+        for (const fn of this.listeners[ev]) {
+          ret = fn(code, signal) === true || ret;
+        }
+        if (ev === "exit") {
+          ret = this.emit("afterExit", code, signal) || ret;
+        }
+        return ret;
+      }
+    };
+    var SignalExitBase = class {
+      static {
+        __name(this, "SignalExitBase");
+      }
+    };
+    var signalExitWrap = /* @__PURE__ */ __name((handler) => {
+      return {
+        onExit(cb, opts) {
+          return handler.onExit(cb, opts);
+        },
+        load() {
+          return handler.load();
+        },
+        unload() {
+          return handler.unload();
+        }
+      };
+    }, "signalExitWrap");
+    var SignalExitFallback = class extends SignalExitBase {
+      static {
+        __name(this, "SignalExitFallback");
+      }
+      onExit() {
+        return () => {
+        };
+      }
+      load() {
+      }
+      unload() {
+      }
+    };
+    var SignalExit = class extends SignalExitBase {
+      static {
+        __name(this, "SignalExit");
+      }
+      // "SIGHUP" throws an `ENOSYS` error on Windows,
+      // so use a supported signal instead
+      /* c8 ignore start */
+      #hupSig = process4.platform === "win32" ? "SIGINT" : "SIGHUP";
+      /* c8 ignore stop */
+      #emitter = new Emitter();
+      #process;
+      #originalProcessEmit;
+      #originalProcessReallyExit;
+      #sigListeners = {};
+      #loaded = false;
+      constructor(process5) {
+        super();
+        this.#process = process5;
+        this.#sigListeners = {};
+        for (const sig of signals_js_1.signals) {
+          this.#sigListeners[sig] = () => {
+            const listeners = this.#process.listeners(sig);
+            let { count } = this.#emitter;
+            const p = process5;
+            if (typeof p.__signal_exit_emitter__ === "object" && typeof p.__signal_exit_emitter__.count === "number") {
+              count += p.__signal_exit_emitter__.count;
+            }
+            if (listeners.length === count) {
+              this.unload();
+              const ret = this.#emitter.emit("exit", null, sig);
+              const s = sig === "SIGHUP" ? this.#hupSig : sig;
+              if (!ret)
+                process5.kill(process5.pid, s);
+            }
+          };
+        }
+        this.#originalProcessReallyExit = process5.reallyExit;
+        this.#originalProcessEmit = process5.emit;
+      }
+      onExit(cb, opts) {
+        if (!processOk(this.#process)) {
+          return () => {
+          };
+        }
+        if (this.#loaded === false) {
+          this.load();
+        }
+        const ev = opts?.alwaysLast ? "afterExit" : "exit";
+        this.#emitter.on(ev, cb);
+        return () => {
+          this.#emitter.removeListener(ev, cb);
+          if (this.#emitter.listeners["exit"].length === 0 && this.#emitter.listeners["afterExit"].length === 0) {
+            this.unload();
+          }
+        };
+      }
+      load() {
+        if (this.#loaded) {
+          return;
+        }
+        this.#loaded = true;
+        this.#emitter.count += 1;
+        for (const sig of signals_js_1.signals) {
+          try {
+            const fn = this.#sigListeners[sig];
+            if (fn)
+              this.#process.on(sig, fn);
+          } catch (_) {
+          }
+        }
+        this.#process.emit = (ev, ...a) => {
+          return this.#processEmit(ev, ...a);
+        };
+        this.#process.reallyExit = (code) => {
+          return this.#processReallyExit(code);
+        };
+      }
+      unload() {
+        if (!this.#loaded) {
+          return;
+        }
+        this.#loaded = false;
+        signals_js_1.signals.forEach((sig) => {
+          const listener = this.#sigListeners[sig];
+          if (!listener) {
+            throw new Error("Listener not defined for signal: " + sig);
+          }
+          try {
+            this.#process.removeListener(sig, listener);
+          } catch (_) {
+          }
+        });
+        this.#process.emit = this.#originalProcessEmit;
+        this.#process.reallyExit = this.#originalProcessReallyExit;
+        this.#emitter.count -= 1;
+      }
+      #processReallyExit(code) {
+        if (!processOk(this.#process)) {
+          return 0;
+        }
+        this.#process.exitCode = code || 0;
+        this.#emitter.emit("exit", this.#process.exitCode, null);
+        return this.#originalProcessReallyExit.call(this.#process, this.#process.exitCode);
+      }
+      #processEmit(ev, ...args) {
+        const og = this.#originalProcessEmit;
+        if (ev === "exit" && processOk(this.#process)) {
+          if (typeof args[0] === "number") {
+            this.#process.exitCode = args[0];
+          }
+          const ret = og.call(this.#process, ev, ...args);
+          this.#emitter.emit("exit", this.#process.exitCode, null);
+          return ret;
+        } else {
+          return og.call(this.#process, ev, ...args);
+        }
+      }
+    };
+    var process4 = globalThis.process;
+    _a = signalExitWrap(processOk(process4) ? new SignalExit(process4) : new SignalExitFallback()), /**
+     * Called when the process is exiting, whether via signal, explicit
+     * exit, or running out of stuff to do.
+     *
+     * If the global process object is not suitable for instrumentation,
+     * then this will be a no-op.
+     *
+     * Returns a function that may be used to unload signal-exit.
+     */
+    exports2.onExit = _a.onExit, /**
+     * Load the listeners.  Likely you never need to call this, unless
+     * doing a rather deep integration with signal-exit functionality.
+     * Mostly exposed for the benefit of testing.
+     *
+     * @internal
+     */
+    exports2.load = _a.load, /**
+     * Unload the listeners.  Likely you never need to call this, unless
+     * doing a rather deep integration with signal-exit functionality.
+     * Mostly exposed for the benefit of testing.
+     *
+     * @internal
+     */
+    exports2.unload = _a.unload;
+  }
+});
+
+// node_modules/.pnpm/supports-color@10.2.2/node_modules/supports-color/index.js
+var supports_color_exports = {};
+__export(supports_color_exports, {
+  createSupportsColor: () => createSupportsColor,
+  default: () => supports_color_default
+});
+function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : import_node_process.default.argv) {
+  const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
+  const position = argv.indexOf(prefix + flag);
+  const terminatorPosition = argv.indexOf("--");
+  return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
+}
+function envForceColor() {
+  if (!("FORCE_COLOR" in env)) {
+    return;
+  }
+  if (env.FORCE_COLOR === "true") {
+    return 1;
+  }
+  if (env.FORCE_COLOR === "false") {
+    return 0;
+  }
+  if (env.FORCE_COLOR.length === 0) {
+    return 1;
+  }
+  const level = Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);
+  if (![0, 1, 2, 3].includes(level)) {
+    return;
+  }
+  return level;
+}
+function translateLevel(level) {
+  if (level === 0) {
+    return false;
+  }
+  return {
+    level,
+    hasBasic: true,
+    has256: level >= 2,
+    has16m: level >= 3
+  };
+}
+function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
+  const noFlagForceColor = envForceColor();
+  if (noFlagForceColor !== void 0) {
+    flagForceColor = noFlagForceColor;
+  }
+  const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
+  if (forceColor === 0) {
+    return 0;
+  }
+  if (sniffFlags) {
+    if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) {
+      return 3;
+    }
+    if (hasFlag("color=256")) {
+      return 2;
+    }
+  }
+  if ("TF_BUILD" in env && "AGENT_NAME" in env) {
+    return 1;
+  }
+  if (haveStream && !streamIsTTY && forceColor === void 0) {
+    return 0;
+  }
+  const min = forceColor || 0;
+  if (env.TERM === "dumb") {
+    return min;
+  }
+  if (import_node_process.default.platform === "win32") {
+    const osRelease = import_node_os.default.release().split(".");
+    if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
+      return Number(osRelease[2]) >= 14931 ? 3 : 2;
+    }
+    return 1;
+  }
+  if ("CI" in env) {
+    if (["GITHUB_ACTIONS", "GITEA_ACTIONS", "CIRCLECI"].some((key) => key in env)) {
+      return 3;
+    }
+    if (["TRAVIS", "APPVEYOR", "GITLAB_CI", "BUILDKITE", "DRONE"].some((sign) => sign in env) || env.CI_NAME === "codeship") {
+      return 1;
+    }
+    return min;
+  }
+  if ("TEAMCITY_VERSION" in env) {
+    return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
+  }
+  if (env.COLORTERM === "truecolor") {
+    return 3;
+  }
+  if (env.TERM === "xterm-kitty") {
+    return 3;
+  }
+  if (env.TERM === "xterm-ghostty") {
+    return 3;
+  }
+  if (env.TERM === "wezterm") {
+    return 3;
+  }
+  if ("TERM_PROGRAM" in env) {
+    const version = Number.parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
+    switch (env.TERM_PROGRAM) {
+      case "iTerm.app": {
+        return version >= 3 ? 3 : 2;
+      }
+      case "Apple_Terminal": {
+        return 2;
+      }
+    }
+  }
+  if (/-256(color)?$/i.test(env.TERM)) {
+    return 2;
+  }
+  if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
+    return 1;
+  }
+  if ("COLORTERM" in env) {
+    return 1;
+  }
+  return min;
+}
+function createSupportsColor(stream, options = {}) {
+  const level = _supportsColor(stream, {
+    streamIsTTY: stream && stream.isTTY,
+    ...options
+  });
+  return translateLevel(level);
+}
+var import_node_process, import_node_os, import_node_tty, env, flagForceColor, supportsColor, supports_color_default;
+var init_supports_color = __esm({
+  "node_modules/.pnpm/supports-color@10.2.2/node_modules/supports-color/index.js"() {
+    import_node_process = __toESM(require("node:process"), 1);
+    import_node_os = __toESM(require("node:os"), 1);
+    import_node_tty = __toESM(require("node:tty"), 1);
+    __name(hasFlag, "hasFlag");
+    ({ env } = import_node_process.default);
+    if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) {
+      flagForceColor = 0;
+    } else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) {
+      flagForceColor = 1;
+    }
+    __name(envForceColor, "envForceColor");
+    __name(translateLevel, "translateLevel");
+    __name(_supportsColor, "_supportsColor");
+    __name(createSupportsColor, "createSupportsColor");
+    supportsColor = {
+      stdout: createSupportsColor({ isTTY: import_node_tty.default.isatty(1) }),
+      stderr: createSupportsColor({ isTTY: import_node_tty.default.isatty(2) })
+    };
+    supports_color_default = supportsColor;
+  }
+});
+
+// node_modules/.pnpm/has-flag@5.0.1/node_modules/has-flag/index.js
+var has_flag_exports = {};
+__export(has_flag_exports, {
+  default: () => hasFlag2
+});
+function hasFlag2(flag, argv = import_process.default.argv) {
+  const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
+  const position = argv.indexOf(prefix + flag);
+  const terminatorPosition = argv.indexOf("--");
+  return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
+}
+var import_process;
+var init_has_flag = __esm({
+  "node_modules/.pnpm/has-flag@5.0.1/node_modules/has-flag/index.js"() {
+    import_process = __toESM(require("process"), 1);
+    __name(hasFlag2, "hasFlag");
+  }
+});
+
+// node_modules/.pnpm/yoctocolors-cjs@2.1.3/node_modules/yoctocolors-cjs/index.js
+var require_yoctocolors_cjs = __commonJS({
+  "node_modules/.pnpm/yoctocolors-cjs@2.1.3/node_modules/yoctocolors-cjs/index.js"(exports2, module2) {
+    var tty2 = require("node:tty");
+    var hasColors = tty2?.WriteStream?.prototype?.hasColors?.() ?? false;
+    var format = /* @__PURE__ */ __name((open, close) => {
+      if (!hasColors) {
+        return (input2) => input2;
+      }
+      const openCode = `\x1B[${open}m`;
+      const closeCode = `\x1B[${close}m`;
+      return (input2) => {
+        const string = input2 + "";
+        let index = string.indexOf(closeCode);
+        if (index === -1) {
+          return openCode + string + closeCode;
+        }
+        let result = openCode;
+        let lastIndex = 0;
+        const reopenOnNestedClose = close === 22;
+        const replaceCode = (reopenOnNestedClose ? closeCode : "") + openCode;
+        while (index !== -1) {
+          result += string.slice(lastIndex, index) + replaceCode;
+          lastIndex = index + closeCode.length;
+          index = string.indexOf(closeCode, lastIndex);
+        }
+        result += string.slice(lastIndex) + closeCode;
+        return result;
+      };
+    }, "format");
+    var colors = {};
+    colors.reset = format(0, 0);
+    colors.bold = format(1, 22);
+    colors.dim = format(2, 22);
+    colors.italic = format(3, 23);
+    colors.underline = format(4, 24);
+    colors.overline = format(53, 55);
+    colors.inverse = format(7, 27);
+    colors.hidden = format(8, 28);
+    colors.strikethrough = format(9, 29);
+    colors.black = format(30, 39);
+    colors.red = format(31, 39);
+    colors.green = format(32, 39);
+    colors.yellow = format(33, 39);
+    colors.blue = format(34, 39);
+    colors.magenta = format(35, 39);
+    colors.cyan = format(36, 39);
+    colors.white = format(37, 39);
+    colors.gray = format(90, 39);
+    colors.bgBlack = format(40, 49);
+    colors.bgRed = format(41, 49);
+    colors.bgGreen = format(42, 49);
+    colors.bgYellow = format(43, 49);
+    colors.bgBlue = format(44, 49);
+    colors.bgMagenta = format(45, 49);
+    colors.bgCyan = format(46, 49);
+    colors.bgWhite = format(47, 49);
+    colors.bgGray = format(100, 49);
+    colors.redBright = format(91, 39);
+    colors.greenBright = format(92, 39);
+    colors.yellowBright = format(93, 39);
+    colors.blueBright = format(94, 39);
+    colors.magentaBright = format(95, 39);
+    colors.cyanBright = format(96, 39);
+    colors.whiteBright = format(97, 39);
+    colors.bgRedBright = format(101, 49);
+    colors.bgGreenBright = format(102, 49);
+    colors.bgYellowBright = format(103, 49);
+    colors.bgBlueBright = format(104, 49);
+    colors.bgMagentaBright = format(105, 49);
+    colors.bgCyanBright = format(106, 49);
+    colors.bgWhiteBright = format(107, 49);
+    module2.exports = colors;
+  }
+});
+
+// node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/key.js
+var require_key = __commonJS({
+  "node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/key.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.isEnterKey = exports2.isNumberKey = exports2.isTabKey = exports2.isBackspaceKey = exports2.isSpaceKey = exports2.isDownKey = exports2.isUpKey = void 0;
+    var isUpKey = /* @__PURE__ */ __name((key, keybindings = []) => (
+      // The up key
+      key.name === "up" || // Vim keybinding: hjkl keys map to left/down/up/right
+      keybindings.includes("vim") && key.name === "k" || // Emacs keybinding: Ctrl+P means "previous" in Emacs navigation conventions
+      keybindings.includes("emacs") && key.ctrl && key.name === "p"
+    ), "isUpKey");
+    exports2.isUpKey = isUpKey;
+    var isDownKey = /* @__PURE__ */ __name((key, keybindings = []) => (
+      // The down key
+      key.name === "down" || // Vim keybinding: hjkl keys map to left/down/up/right
+      keybindings.includes("vim") && key.name === "j" || // Emacs keybinding: Ctrl+N means "next" in Emacs navigation conventions
+      keybindings.includes("emacs") && key.ctrl && key.name === "n"
+    ), "isDownKey");
+    exports2.isDownKey = isDownKey;
+    var isSpaceKey = /* @__PURE__ */ __name((key) => key.name === "space", "isSpaceKey");
+    exports2.isSpaceKey = isSpaceKey;
+    var isBackspaceKey = /* @__PURE__ */ __name((key) => key.name === "backspace", "isBackspaceKey");
+    exports2.isBackspaceKey = isBackspaceKey;
+    var isTabKey = /* @__PURE__ */ __name((key) => key.name === "tab", "isTabKey");
+    exports2.isTabKey = isTabKey;
+    var isNumberKey = /* @__PURE__ */ __name((key) => "1234567890".includes(key.name), "isNumberKey");
+    exports2.isNumberKey = isNumberKey;
+    var isEnterKey = /* @__PURE__ */ __name((key) => key.name === "enter" || key.name === "return", "isEnterKey");
+    exports2.isEnterKey = isEnterKey;
+  }
+});
+
+// node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/errors.js
+var require_errors = __commonJS({
+  "node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/errors.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.ValidationError = exports2.HookError = exports2.ExitPromptError = exports2.CancelPromptError = exports2.AbortPromptError = void 0;
+    var AbortPromptError = class extends Error {
+      static {
+        __name(this, "AbortPromptError");
+      }
+      name = "AbortPromptError";
+      message = "Prompt was aborted";
+      constructor(options) {
+        super();
+        this.cause = options?.cause;
+      }
+    };
+    exports2.AbortPromptError = AbortPromptError;
+    var CancelPromptError = class extends Error {
+      static {
+        __name(this, "CancelPromptError");
+      }
+      name = "CancelPromptError";
+      message = "Prompt was canceled";
+    };
+    exports2.CancelPromptError = CancelPromptError;
+    var ExitPromptError = class extends Error {
+      static {
+        __name(this, "ExitPromptError");
+      }
+      name = "ExitPromptError";
+    };
+    exports2.ExitPromptError = ExitPromptError;
+    var HookError = class extends Error {
+      static {
+        __name(this, "HookError");
+      }
+      name = "HookError";
+    };
+    exports2.HookError = HookError;
+    var ValidationError = class extends Error {
+      static {
+        __name(this, "ValidationError");
+      }
+      name = "ValidationError";
+    };
+    exports2.ValidationError = ValidationError;
+  }
+});
+
+// node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/hook-engine.js
+var require_hook_engine = __commonJS({
+  "node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/hook-engine.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.effectScheduler = void 0;
+    exports2.withHooks = withHooks;
+    exports2.readline = readline;
+    exports2.withUpdates = withUpdates;
+    exports2.withPointer = withPointer;
+    exports2.handleChange = handleChange;
+    var node_async_hooks_1 = require("node:async_hooks");
+    var errors_ts_1 = require_errors();
+    var hookStorage = new node_async_hooks_1.AsyncLocalStorage();
+    function createStore(rl) {
+      const store = {
+        rl,
+        hooks: [],
+        hooksCleanup: [],
+        hooksEffect: [],
+        index: 0,
+        handleChange() {
+        }
+      };
+      return store;
+    }
+    __name(createStore, "createStore");
+    function withHooks(rl, cb) {
+      const store = createStore(rl);
+      return hookStorage.run(store, () => {
+        function cycle(render) {
+          store.handleChange = () => {
+            store.index = 0;
+            render();
+          };
+          store.handleChange();
+        }
+        __name(cycle, "cycle");
+        return cb(cycle);
+      });
+    }
+    __name(withHooks, "withHooks");
+    function getStore() {
+      const store = hookStorage.getStore();
+      if (!store) {
+        throw new errors_ts_1.HookError("[Inquirer] Hook functions can only be called from within a prompt");
+      }
+      return store;
+    }
+    __name(getStore, "getStore");
+    function readline() {
+      return getStore().rl;
+    }
+    __name(readline, "readline");
+    function withUpdates(fn) {
+      const wrapped = /* @__PURE__ */ __name((...args) => {
+        const store = getStore();
+        let shouldUpdate = false;
+        const oldHandleChange = store.handleChange;
+        store.handleChange = () => {
+          shouldUpdate = true;
+        };
+        const returnValue = fn(...args);
+        if (shouldUpdate) {
+          oldHandleChange();
+        }
+        store.handleChange = oldHandleChange;
+        return returnValue;
+      }, "wrapped");
+      return node_async_hooks_1.AsyncResource.bind(wrapped);
+    }
+    __name(withUpdates, "withUpdates");
+    function withPointer(cb) {
+      const store = getStore();
+      const { index } = store;
+      const pointer = {
+        get() {
+          return store.hooks[index];
+        },
+        set(value) {
+          store.hooks[index] = value;
+        },
+        initialized: index in store.hooks
+      };
+      const returnValue = cb(pointer);
+      store.index++;
+      return returnValue;
+    }
+    __name(withPointer, "withPointer");
+    function handleChange() {
+      getStore().handleChange();
+    }
+    __name(handleChange, "handleChange");
+    exports2.effectScheduler = {
+      queue(cb) {
+        const store = getStore();
+        const { index } = store;
+        store.hooksEffect.push(() => {
+          store.hooksCleanup[index]?.();
+          const cleanFn = cb(readline());
+          if (cleanFn != null && typeof cleanFn !== "function") {
+            throw new errors_ts_1.ValidationError("useEffect return value must be a cleanup function or nothing.");
+          }
+          store.hooksCleanup[index] = cleanFn;
+        });
+      },
+      run() {
+        const store = getStore();
+        withUpdates(() => {
+          store.hooksEffect.forEach((effect) => {
+            effect();
+          });
+          store.hooksEffect.length = 0;
+        })();
+      },
+      clearAll() {
+        const store = getStore();
+        store.hooksCleanup.forEach((cleanFn) => {
+          cleanFn?.();
+        });
+        store.hooksEffect.length = 0;
+        store.hooksCleanup.length = 0;
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/use-state.js
+var require_use_state = __commonJS({
+  "node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/use-state.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.useState = useState;
+    var node_async_hooks_1 = require("node:async_hooks");
+    var hook_engine_ts_1 = require_hook_engine();
+    function useState(defaultValue) {
+      return (0, hook_engine_ts_1.withPointer)((pointer) => {
+        const setState = node_async_hooks_1.AsyncResource.bind(/* @__PURE__ */ __name(function setState2(newValue) {
+          if (pointer.get() !== newValue) {
+            pointer.set(newValue);
+            (0, hook_engine_ts_1.handleChange)();
+          }
+        }, "setState"));
+        if (pointer.initialized) {
+          return [pointer.get(), setState];
+        }
+        const value = typeof defaultValue === "function" ? defaultValue() : defaultValue;
+        pointer.set(value);
+        return [value, setState];
+      });
+    }
+    __name(useState, "useState");
+  }
+});
+
+// node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/use-effect.js
+var require_use_effect = __commonJS({
+  "node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/use-effect.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.useEffect = useEffect;
+    var hook_engine_ts_1 = require_hook_engine();
+    function useEffect(cb, depArray) {
+      (0, hook_engine_ts_1.withPointer)((pointer) => {
+        const oldDeps = pointer.get();
+        const hasChanged = !Array.isArray(oldDeps) || depArray.some((dep, i) => !Object.is(dep, oldDeps[i]));
+        if (hasChanged) {
+          hook_engine_ts_1.effectScheduler.queue(cb);
+        }
+        pointer.set(depArray);
+      });
+    }
+    __name(useEffect, "useEffect");
+  }
+});
+
+// node_modules/.pnpm/@inquirer+figures@1.0.15/node_modules/@inquirer/figures/dist/commonjs/index.js
+var require_commonjs = __commonJS({
+  "node_modules/.pnpm/@inquirer+figures@1.0.15/node_modules/@inquirer/figures/dist/commonjs/index.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.replaceSymbols = exports2.fallbackSymbols = exports2.mainSymbols = void 0;
+    var node_process_1 = __importDefault(require("node:process"));
+    function isUnicodeSupported() {
+      if (node_process_1.default.platform !== "win32") {
+        return node_process_1.default.env["TERM"] !== "linux";
+      }
+      return Boolean(node_process_1.default.env["WT_SESSION"]) || // Windows Terminal
+      Boolean(node_process_1.default.env["TERMINUS_SUBLIME"]) || // Terminus (<0.2.27)
+      node_process_1.default.env["ConEmuTask"] === "{cmd::Cmder}" || // ConEmu and cmder
+      node_process_1.default.env["TERM_PROGRAM"] === "Terminus-Sublime" || node_process_1.default.env["TERM_PROGRAM"] === "vscode" || node_process_1.default.env["TERM"] === "xterm-256color" || node_process_1.default.env["TERM"] === "alacritty" || node_process_1.default.env["TERMINAL_EMULATOR"] === "JetBrains-JediTerm";
+    }
+    __name(isUnicodeSupported, "isUnicodeSupported");
+    var common = {
+      circleQuestionMark: "(?)",
+      questionMarkPrefix: "(?)",
+      square: "█",
+      squareDarkShade: "▓",
+      squareMediumShade: "▒",
+      squareLightShade: "░",
+      squareTop: "▀",
+      squareBottom: "▄",
+      squareLeft: "▌",
+      squareRight: "▐",
+      squareCenter: "■",
+      bullet: "●",
+      dot: "․",
+      ellipsis: "…",
+      pointerSmall: "›",
+      triangleUp: "▲",
+      triangleUpSmall: "▴",
+      triangleDown: "▼",
+      triangleDownSmall: "▾",
+      triangleLeftSmall: "◂",
+      triangleRightSmall: "▸",
+      home: "⌂",
+      heart: "♥",
+      musicNote: "♪",
+      musicNoteBeamed: "♫",
+      arrowUp: "↑",
+      arrowDown: "↓",
+      arrowLeft: "←",
+      arrowRight: "→",
+      arrowLeftRight: "↔",
+      arrowUpDown: "↕",
+      almostEqual: "≈",
+      notEqual: "≠",
+      lessOrEqual: "≤",
+      greaterOrEqual: "≥",
+      identical: "≡",
+      infinity: "∞",
+      subscriptZero: "₀",
+      subscriptOne: "₁",
+      subscriptTwo: "₂",
+      subscriptThree: "₃",
+      subscriptFour: "₄",
+      subscriptFive: "₅",
+      subscriptSix: "₆",
+      subscriptSeven: "₇",
+      subscriptEight: "₈",
+      subscriptNine: "₉",
+      oneHalf: "½",
+      oneThird: "⅓",
+      oneQuarter: "¼",
+      oneFifth: "⅕",
+      oneSixth: "⅙",
+      oneEighth: "⅛",
+      twoThirds: "⅔",
+      twoFifths: "⅖",
+      threeQuarters: "¾",
+      threeFifths: "⅗",
+      threeEighths: "⅜",
+      fourFifths: "⅘",
+      fiveSixths: "⅚",
+      fiveEighths: "⅝",
+      sevenEighths: "⅞",
+      line: "─",
+      lineBold: "━",
+      lineDouble: "═",
+      lineDashed0: "┄",
+      lineDashed1: "┅",
+      lineDashed2: "┈",
+      lineDashed3: "┉",
+      lineDashed4: "╌",
+      lineDashed5: "╍",
+      lineDashed6: "╴",
+      lineDashed7: "╶",
+      lineDashed8: "╸",
+      lineDashed9: "╺",
+      lineDashed10: "╼",
+      lineDashed11: "╾",
+      lineDashed12: "−",
+      lineDashed13: "–",
+      lineDashed14: "‐",
+      lineDashed15: "⁃",
+      lineVertical: "│",
+      lineVerticalBold: "┃",
+      lineVerticalDouble: "║",
+      lineVerticalDashed0: "┆",
+      lineVerticalDashed1: "┇",
+      lineVerticalDashed2: "┊",
+      lineVerticalDashed3: "┋",
+      lineVerticalDashed4: "╎",
+      lineVerticalDashed5: "╏",
+      lineVerticalDashed6: "╵",
+      lineVerticalDashed7: "╷",
+      lineVerticalDashed8: "╹",
+      lineVerticalDashed9: "╻",
+      lineVerticalDashed10: "╽",
+      lineVerticalDashed11: "╿",
+      lineDownLeft: "┐",
+      lineDownLeftArc: "╮",
+      lineDownBoldLeftBold: "┓",
+      lineDownBoldLeft: "┒",
+      lineDownLeftBold: "┑",
+      lineDownDoubleLeftDouble: "╗",
+      lineDownDoubleLeft: "╖",
+      lineDownLeftDouble: "╕",
+      lineDownRight: "┌",
+      lineDownRightArc: "╭",
+      lineDownBoldRightBold: "┏",
+      lineDownBoldRight: "┎",
+      lineDownRightBold: "┍",
+      lineDownDoubleRightDouble: "╔",
+      lineDownDoubleRight: "╓",
+      lineDownRightDouble: "╒",
+      lineUpLeft: "┘",
+      lineUpLeftArc: "╯",
+      lineUpBoldLeftBold: "┛",
+      lineUpBoldLeft: "┚",
+      lineUpLeftBold: "┙",
+      lineUpDoubleLeftDouble: "╝",
+      lineUpDoubleLeft: "╜",
+      lineUpLeftDouble: "╛",
+      lineUpRight: "└",
+      lineUpRightArc: "╰",
+      lineUpBoldRightBold: "┗",
+      lineUpBoldRight: "┖",
+      lineUpRightBold: "┕",
+      lineUpDoubleRightDouble: "╚",
+      lineUpDoubleRight: "╙",
+      lineUpRightDouble: "╘",
+      lineUpDownLeft: "┤",
+      lineUpBoldDownBoldLeftBold: "┫",
+      lineUpBoldDownBoldLeft: "┨",
+      lineUpDownLeftBold: "┥",
+      lineUpBoldDownLeftBold: "┩",
+      lineUpDownBoldLeftBold: "┪",
+      lineUpDownBoldLeft: "┧",
+      lineUpBoldDownLeft: "┦",
+      lineUpDoubleDownDoubleLeftDouble: "╣",
+      lineUpDoubleDownDoubleLeft: "╢",
+      lineUpDownLeftDouble: "╡",
+      lineUpDownRight: "├",
+      lineUpBoldDownBoldRightBold: "┣",
+      lineUpBoldDownBoldRight: "┠",
+      lineUpDownRightBold: "┝",
+      lineUpBoldDownRightBold: "┡",
+      lineUpDownBoldRightBold: "┢",
+      lineUpDownBoldRight: "┟",
+      lineUpBoldDownRight: "┞",
+      lineUpDoubleDownDoubleRightDouble: "╠",
+      lineUpDoubleDownDoubleRight: "╟",
+      lineUpDownRightDouble: "╞",
+      lineDownLeftRight: "┬",
+      lineDownBoldLeftBoldRightBold: "┳",
+      lineDownLeftBoldRightBold: "┯",
+      lineDownBoldLeftRight: "┰",
+      lineDownBoldLeftBoldRight: "┱",
+      lineDownBoldLeftRightBold: "┲",
+      lineDownLeftRightBold: "┮",
+      lineDownLeftBoldRight: "┭",
+      lineDownDoubleLeftDoubleRightDouble: "╦",
+      lineDownDoubleLeftRight: "╥",
+      lineDownLeftDoubleRightDouble: "╤",
+      lineUpLeftRight: "┴",
+      lineUpBoldLeftBoldRightBold: "┻",
+      lineUpLeftBoldRightBold: "┷",
+      lineUpBoldLeftRight: "┸",
+      lineUpBoldLeftBoldRight: "┹",
+      lineUpBoldLeftRightBold: "┺",
+      lineUpLeftRightBold: "┶",
+      lineUpLeftBoldRight: "┵",
+      lineUpDoubleLeftDoubleRightDouble: "╩",
+      lineUpDoubleLeftRight: "╨",
+      lineUpLeftDoubleRightDouble: "╧",
+      lineUpDownLeftRight: "┼",
+      lineUpBoldDownBoldLeftBoldRightBold: "╋",
+      lineUpDownBoldLeftBoldRightBold: "╈",
+      lineUpBoldDownLeftBoldRightBold: "╇",
+      lineUpBoldDownBoldLeftRightBold: "╊",
+      lineUpBoldDownBoldLeftBoldRight: "╉",
+      lineUpBoldDownLeftRight: "╀",
+      lineUpDownBoldLeftRight: "╁",
+      lineUpDownLeftBoldRight: "┽",
+      lineUpDownLeftRightBold: "┾",
+      lineUpBoldDownBoldLeftRight: "╂",
+      lineUpDownLeftBoldRightBold: "┿",
+      lineUpBoldDownLeftBoldRight: "╃",
+      lineUpBoldDownLeftRightBold: "╄",
+      lineUpDownBoldLeftBoldRight: "╅",
+      lineUpDownBoldLeftRightBold: "╆",
+      lineUpDoubleDownDoubleLeftDoubleRightDouble: "╬",
+      lineUpDoubleDownDoubleLeftRight: "╫",
+      lineUpDownLeftDoubleRightDouble: "╪",
+      lineCross: "╳",
+      lineBackslash: "╲",
+      lineSlash: "╱"
+    };
+    var specialMainSymbols = {
+      tick: "✔",
+      info: "ℹ",
+      warning: "⚠",
+      cross: "✘",
+      squareSmall: "◻",
+      squareSmallFilled: "◼",
+      circle: "◯",
+      circleFilled: "◉",
+      circleDotted: "◌",
+      circleDouble: "◎",
+      circleCircle: "ⓞ",
+      circleCross: "ⓧ",
+      circlePipe: "Ⓘ",
+      radioOn: "◉",
+      radioOff: "◯",
+      checkboxOn: "☒",
+      checkboxOff: "☐",
+      checkboxCircleOn: "ⓧ",
+      checkboxCircleOff: "Ⓘ",
+      pointer: "❯",
+      triangleUpOutline: "△",
+      triangleLeft: "◀",
+      triangleRight: "▶",
+      lozenge: "◆",
+      lozengeOutline: "◇",
+      hamburger: "☰",
+      smiley: "㋡",
+      mustache: "෴",
+      star: "★",
+      play: "▶",
+      nodejs: "⬢",
+      oneSeventh: "⅐",
+      oneNinth: "⅑",
+      oneTenth: "⅒"
+    };
+    var specialFallbackSymbols = {
+      tick: "√",
+      info: "i",
+      warning: "‼",
+      cross: "×",
+      squareSmall: "□",
+      squareSmallFilled: "■",
+      circle: "( )",
+      circleFilled: "(*)",
+      circleDotted: "( )",
+      circleDouble: "( )",
+      circleCircle: "(○)",
+      circleCross: "(×)",
+      circlePipe: "(│)",
+      radioOn: "(*)",
+      radioOff: "( )",
+      checkboxOn: "[×]",
+      checkboxOff: "[ ]",
+      checkboxCircleOn: "(×)",
+      checkboxCircleOff: "( )",
+      pointer: ">",
+      triangleUpOutline: "∆",
+      triangleLeft: "◄",
+      triangleRight: "►",
+      lozenge: "♦",
+      lozengeOutline: "◊",
+      hamburger: "≡",
+      smiley: "☺",
+      mustache: "┌─┐",
+      star: "✶",
+      play: "►",
+      nodejs: "♦",
+      oneSeventh: "1/7",
+      oneNinth: "1/9",
+      oneTenth: "1/10"
+    };
+    exports2.mainSymbols = {
+      ...common,
+      ...specialMainSymbols
+    };
+    exports2.fallbackSymbols = {
+      ...common,
+      ...specialFallbackSymbols
+    };
+    var shouldUseMain = isUnicodeSupported();
+    var figures = shouldUseMain ? exports2.mainSymbols : exports2.fallbackSymbols;
+    exports2.default = figures;
+    var replacements = Object.entries(specialMainSymbols);
+    var replaceSymbols = /* @__PURE__ */ __name((string, { useFallback = !shouldUseMain } = {}) => {
+      if (useFallback) {
+        for (const [key, mainSymbol] of replacements) {
+          const fallbackSymbol = exports2.fallbackSymbols[key];
+          if (!fallbackSymbol) {
+            throw new Error(`Unable to find fallback for ${key}`);
+          }
+          string = string.replaceAll(mainSymbol, fallbackSymbol);
+        }
+      }
+      return string;
+    }, "replaceSymbols");
+    exports2.replaceSymbols = replaceSymbols;
+  }
+});
+
+// node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/theme.js
+var require_theme = __commonJS({
+  "node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/theme.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.defaultTheme = void 0;
+    var yoctocolors_cjs_1 = __importDefault(require_yoctocolors_cjs());
+    var figures_1 = __importDefault(require_commonjs());
+    exports2.defaultTheme = {
+      prefix: {
+        idle: yoctocolors_cjs_1.default.blue("?"),
+        done: yoctocolors_cjs_1.default.green(figures_1.default.tick)
+      },
+      spinner: {
+        interval: 80,
+        frames: ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"].map((frame) => yoctocolors_cjs_1.default.yellow(frame))
+      },
+      style: {
+        answer: yoctocolors_cjs_1.default.cyan,
+        message: yoctocolors_cjs_1.default.bold,
+        error: /* @__PURE__ */ __name((text) => yoctocolors_cjs_1.default.red(`> ${text}`), "error"),
+        defaultAnswer: /* @__PURE__ */ __name((text) => yoctocolors_cjs_1.default.dim(`(${text})`), "defaultAnswer"),
+        help: yoctocolors_cjs_1.default.dim,
+        highlight: yoctocolors_cjs_1.default.cyan,
+        key: /* @__PURE__ */ __name((text) => yoctocolors_cjs_1.default.cyan(yoctocolors_cjs_1.default.bold(`<${text}>`)), "key")
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/make-theme.js
+var require_make_theme = __commonJS({
+  "node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/make-theme.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.makeTheme = makeTheme;
+    var theme_ts_1 = require_theme();
+    function isPlainObject(value) {
+      if (typeof value !== "object" || value === null)
+        return false;
+      let proto = value;
+      while (Object.getPrototypeOf(proto) !== null) {
+        proto = Object.getPrototypeOf(proto);
+      }
+      return Object.getPrototypeOf(value) === proto;
+    }
+    __name(isPlainObject, "isPlainObject");
+    function deepMerge(...objects) {
+      const output = {};
+      for (const obj of objects) {
+        for (const [key, value] of Object.entries(obj)) {
+          const prevValue = output[key];
+          output[key] = isPlainObject(prevValue) && isPlainObject(value) ? deepMerge(prevValue, value) : value;
+        }
+      }
+      return output;
+    }
+    __name(deepMerge, "deepMerge");
+    function makeTheme(...themes) {
+      const themesToMerge = [
+        theme_ts_1.defaultTheme,
+        ...themes.filter((theme) => theme != null)
+      ];
+      return deepMerge(...themesToMerge);
+    }
+    __name(makeTheme, "makeTheme");
+  }
+});
+
+// node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/use-prefix.js
+var require_use_prefix = __commonJS({
+  "node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/use-prefix.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.usePrefix = usePrefix;
+    var use_state_ts_1 = require_use_state();
+    var use_effect_ts_1 = require_use_effect();
+    var make_theme_ts_1 = require_make_theme();
+    function usePrefix({ status = "idle", theme }) {
+      const [showLoader, setShowLoader] = (0, use_state_ts_1.useState)(false);
+      const [tick, setTick] = (0, use_state_ts_1.useState)(0);
+      const { prefix, spinner } = (0, make_theme_ts_1.makeTheme)(theme);
+      (0, use_effect_ts_1.useEffect)(() => {
+        if (status === "loading") {
+          let tickInterval;
+          let inc = -1;
+          const delayTimeout = setTimeout(() => {
+            setShowLoader(true);
+            tickInterval = setInterval(() => {
+              inc = inc + 1;
+              setTick(inc % spinner.frames.length);
+            }, spinner.interval);
+          }, 300);
+          return () => {
+            clearTimeout(delayTimeout);
+            clearInterval(tickInterval);
+          };
+        } else {
+          setShowLoader(false);
+        }
+      }, [status]);
+      if (showLoader) {
+        return spinner.frames[tick];
+      }
+      const iconName = status === "loading" ? "idle" : status;
+      return typeof prefix === "string" ? prefix : prefix[iconName] ?? prefix["idle"];
+    }
+    __name(usePrefix, "usePrefix");
+  }
+});
+
+// node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/use-memo.js
+var require_use_memo = __commonJS({
+  "node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/use-memo.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.useMemo = useMemo;
+    var hook_engine_ts_1 = require_hook_engine();
+    function useMemo(fn, dependencies) {
+      return (0, hook_engine_ts_1.withPointer)((pointer) => {
+        const prev = pointer.get();
+        if (!prev || prev.dependencies.length !== dependencies.length || prev.dependencies.some((dep, i) => dep !== dependencies[i])) {
+          const value = fn();
+          pointer.set({ value, dependencies });
+          return value;
+        }
+        return prev.value;
+      });
+    }
+    __name(useMemo, "useMemo");
+  }
+});
+
+// node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/use-ref.js
+var require_use_ref = __commonJS({
+  "node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/use-ref.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.useRef = useRef;
+    var use_state_ts_1 = require_use_state();
+    function useRef(val) {
+      return (0, use_state_ts_1.useState)({ current: val })[0];
+    }
+    __name(useRef, "useRef");
+  }
+});
+
+// node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/use-keypress.js
+var require_use_keypress = __commonJS({
+  "node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/use-keypress.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.useKeypress = useKeypress;
+    var use_ref_ts_1 = require_use_ref();
+    var use_effect_ts_1 = require_use_effect();
+    var hook_engine_ts_1 = require_hook_engine();
+    function useKeypress(userHandler) {
+      const signal = (0, use_ref_ts_1.useRef)(userHandler);
+      signal.current = userHandler;
+      (0, use_effect_ts_1.useEffect)((rl) => {
+        let ignore = false;
+        const handler = (0, hook_engine_ts_1.withUpdates)((_input, event) => {
+          if (ignore)
+            return;
+          void signal.current(event, rl);
+        });
+        rl.input.on("keypress", handler);
+        return () => {
+          ignore = true;
+          rl.input.removeListener("keypress", handler);
+        };
+      }, []);
+    }
+    __name(useKeypress, "useKeypress");
+  }
+});
+
+// node_modules/.pnpm/cli-width@4.1.0/node_modules/cli-width/index.js
+var require_cli_width = __commonJS({
+  "node_modules/.pnpm/cli-width@4.1.0/node_modules/cli-width/index.js"(exports2, module2) {
+    "use strict";
+    module2.exports = cliWidth;
+    function normalizeOpts(options) {
+      const defaultOpts = {
+        defaultWidth: 0,
+        output: process.stdout,
+        tty: require("tty")
+      };
+      if (!options) {
+        return defaultOpts;
+      }
+      Object.keys(defaultOpts).forEach(function(key) {
+        if (!options[key]) {
+          options[key] = defaultOpts[key];
+        }
+      });
+      return options;
+    }
+    __name(normalizeOpts, "normalizeOpts");
+    function cliWidth(options) {
+      const opts = normalizeOpts(options);
+      if (opts.output.getWindowSize) {
+        return opts.output.getWindowSize()[0] || opts.defaultWidth;
+      }
+      if (opts.tty.getWindowSize) {
+        return opts.tty.getWindowSize()[1] || opts.defaultWidth;
+      }
+      if (opts.output.columns) {
+        return opts.output.columns;
+      }
+      if (process.env.CLI_WIDTH) {
+        const width = parseInt(process.env.CLI_WIDTH, 10);
+        if (!isNaN(width) && width !== 0) {
+          return width;
+        }
+      }
+      return opts.defaultWidth;
+    }
+    __name(cliWidth, "cliWidth");
+  }
+});
+
+// node_modules/.pnpm/ansi-regex@6.2.2/node_modules/ansi-regex/index.js
+function ansiRegex({ onlyFirst = false } = {}) {
+  const ST = "(?:\\u0007|\\u001B\\u005C|\\u009C)";
+  const osc = `(?:\\u001B\\][\\s\\S]*?${ST})`;
+  const csi = "[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]";
+  const pattern = `${osc}|${csi}`;
+  return new RegExp(pattern, onlyFirst ? void 0 : "g");
+}
+var init_ansi_regex = __esm({
+  "node_modules/.pnpm/ansi-regex@6.2.2/node_modules/ansi-regex/index.js"() {
+    __name(ansiRegex, "ansiRegex");
+  }
+});
+
+// node_modules/.pnpm/strip-ansi@7.1.2/node_modules/strip-ansi/index.js
+function stripAnsi(string) {
+  if (typeof string !== "string") {
+    throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
+  }
+  return string.replace(regex, "");
+}
+var regex;
+var init_strip_ansi = __esm({
+  "node_modules/.pnpm/strip-ansi@7.1.2/node_modules/strip-ansi/index.js"() {
+    init_ansi_regex();
+    regex = ansiRegex();
+    __name(stripAnsi, "stripAnsi");
+  }
+});
+
+// node_modules/.pnpm/get-east-asian-width@1.3.0/node_modules/get-east-asian-width/lookup.js
+function isAmbiguous(x) {
+  return x === 161 || x === 164 || x === 167 || x === 168 || x === 170 || x === 173 || x === 174 || x >= 176 && x <= 180 || x >= 182 && x <= 186 || x >= 188 && x <= 191 || x === 198 || x === 208 || x === 215 || x === 216 || x >= 222 && x <= 225 || x === 230 || x >= 232 && x <= 234 || x === 236 || x === 237 || x === 240 || x === 242 || x === 243 || x >= 247 && x <= 250 || x === 252 || x === 254 || x === 257 || x === 273 || x === 275 || x === 283 || x === 294 || x === 295 || x === 299 || x >= 305 && x <= 307 || x === 312 || x >= 319 && x <= 322 || x === 324 || x >= 328 && x <= 331 || x === 333 || x === 338 || x === 339 || x === 358 || x === 359 || x === 363 || x === 462 || x === 464 || x === 466 || x === 468 || x === 470 || x === 472 || x === 474 || x === 476 || x === 593 || x === 609 || x === 708 || x === 711 || x >= 713 && x <= 715 || x === 717 || x === 720 || x >= 728 && x <= 731 || x === 733 || x === 735 || x >= 768 && x <= 879 || x >= 913 && x <= 929 || x >= 931 && x <= 937 || x >= 945 && x <= 961 || x >= 963 && x <= 969 || x === 1025 || x >= 1040 && x <= 1103 || x === 1105 || x === 8208 || x >= 8211 && x <= 8214 || x === 8216 || x === 8217 || x === 8220 || x === 8221 || x >= 8224 && x <= 8226 || x >= 8228 && x <= 8231 || x === 8240 || x === 8242 || x === 8243 || x === 8245 || x === 8251 || x === 8254 || x === 8308 || x === 8319 || x >= 8321 && x <= 8324 || x === 8364 || x === 8451 || x === 8453 || x === 8457 || x === 8467 || x === 8470 || x === 8481 || x === 8482 || x === 8486 || x === 8491 || x === 8531 || x === 8532 || x >= 8539 && x <= 8542 || x >= 8544 && x <= 8555 || x >= 8560 && x <= 8569 || x === 8585 || x >= 8592 && x <= 8601 || x === 8632 || x === 8633 || x === 8658 || x === 8660 || x === 8679 || x === 8704 || x === 8706 || x === 8707 || x === 8711 || x === 8712 || x === 8715 || x === 8719 || x === 8721 || x === 8725 || x === 8730 || x >= 8733 && x <= 8736 || x === 8739 || x === 8741 || x >= 8743 && x <= 8748 || x === 8750 || x >= 8756 && x <= 8759 || x === 8764 || x === 8765 || x === 8776 || x === 8780 || x === 8786 || x === 8800 || x === 8801 || x >= 8804 && x <= 8807 || x === 8810 || x === 8811 || x === 8814 || x === 8815 || x === 8834 || x === 8835 || x === 8838 || x === 8839 || x === 8853 || x === 8857 || x === 8869 || x === 8895 || x === 8978 || x >= 9312 && x <= 9449 || x >= 9451 && x <= 9547 || x >= 9552 && x <= 9587 || x >= 9600 && x <= 9615 || x >= 9618 && x <= 9621 || x === 9632 || x === 9633 || x >= 9635 && x <= 9641 || x === 9650 || x === 9651 || x === 9654 || x === 9655 || x === 9660 || x === 9661 || x === 9664 || x === 9665 || x >= 9670 && x <= 9672 || x === 9675 || x >= 9678 && x <= 9681 || x >= 9698 && x <= 9701 || x === 9711 || x === 9733 || x === 9734 || x === 9737 || x === 9742 || x === 9743 || x === 9756 || x === 9758 || x === 9792 || x === 9794 || x === 9824 || x === 9825 || x >= 9827 && x <= 9829 || x >= 9831 && x <= 9834 || x === 9836 || x === 9837 || x === 9839 || x === 9886 || x === 9887 || x === 9919 || x >= 9926 && x <= 9933 || x >= 9935 && x <= 9939 || x >= 9941 && x <= 9953 || x === 9955 || x === 9960 || x === 9961 || x >= 9963 && x <= 9969 || x === 9972 || x >= 9974 && x <= 9977 || x === 9979 || x === 9980 || x === 9982 || x === 9983 || x === 10045 || x >= 10102 && x <= 10111 || x >= 11094 && x <= 11097 || x >= 12872 && x <= 12879 || x >= 57344 && x <= 63743 || x >= 65024 && x <= 65039 || x === 65533 || x >= 127232 && x <= 127242 || x >= 127248 && x <= 127277 || x >= 127280 && x <= 127337 || x >= 127344 && x <= 127373 || x === 127375 || x === 127376 || x >= 127387 && x <= 127404 || x >= 917760 && x <= 917999 || x >= 983040 && x <= 1048573 || x >= 1048576 && x <= 1114109;
+}
+function isFullWidth(x) {
+  return x === 12288 || x >= 65281 && x <= 65376 || x >= 65504 && x <= 65510;
+}
+function isWide(x) {
+  return x >= 4352 && x <= 4447 || x === 8986 || x === 8987 || x === 9001 || x === 9002 || x >= 9193 && x <= 9196 || x === 9200 || x === 9203 || x === 9725 || x === 9726 || x === 9748 || x === 9749 || x >= 9776 && x <= 9783 || x >= 9800 && x <= 9811 || x === 9855 || x >= 9866 && x <= 9871 || x === 9875 || x === 9889 || x === 9898 || x === 9899 || x === 9917 || x === 9918 || x === 9924 || x === 9925 || x === 9934 || x === 9940 || x === 9962 || x === 9970 || x === 9971 || x === 9973 || x === 9978 || x === 9981 || x === 9989 || x === 9994 || x === 9995 || x === 10024 || x === 10060 || x === 10062 || x >= 10067 && x <= 10069 || x === 10071 || x >= 10133 && x <= 10135 || x === 10160 || x === 10175 || x === 11035 || x === 11036 || x === 11088 || x === 11093 || x >= 11904 && x <= 11929 || x >= 11931 && x <= 12019 || x >= 12032 && x <= 12245 || x >= 12272 && x <= 12287 || x >= 12289 && x <= 12350 || x >= 12353 && x <= 12438 || x >= 12441 && x <= 12543 || x >= 12549 && x <= 12591 || x >= 12593 && x <= 12686 || x >= 12688 && x <= 12773 || x >= 12783 && x <= 12830 || x >= 12832 && x <= 12871 || x >= 12880 && x <= 42124 || x >= 42128 && x <= 42182 || x >= 43360 && x <= 43388 || x >= 44032 && x <= 55203 || x >= 63744 && x <= 64255 || x >= 65040 && x <= 65049 || x >= 65072 && x <= 65106 || x >= 65108 && x <= 65126 || x >= 65128 && x <= 65131 || x >= 94176 && x <= 94180 || x === 94192 || x === 94193 || x >= 94208 && x <= 100343 || x >= 100352 && x <= 101589 || x >= 101631 && x <= 101640 || x >= 110576 && x <= 110579 || x >= 110581 && x <= 110587 || x === 110589 || x === 110590 || x >= 110592 && x <= 110882 || x === 110898 || x >= 110928 && x <= 110930 || x === 110933 || x >= 110948 && x <= 110951 || x >= 110960 && x <= 111355 || x >= 119552 && x <= 119638 || x >= 119648 && x <= 119670 || x === 126980 || x === 127183 || x === 127374 || x >= 127377 && x <= 127386 || x >= 127488 && x <= 127490 || x >= 127504 && x <= 127547 || x >= 127552 && x <= 127560 || x === 127568 || x === 127569 || x >= 127584 && x <= 127589 || x >= 127744 && x <= 127776 || x >= 127789 && x <= 127797 || x >= 127799 && x <= 127868 || x >= 127870 && x <= 127891 || x >= 127904 && x <= 127946 || x >= 127951 && x <= 127955 || x >= 127968 && x <= 127984 || x === 127988 || x >= 127992 && x <= 128062 || x === 128064 || x >= 128066 && x <= 128252 || x >= 128255 && x <= 128317 || x >= 128331 && x <= 128334 || x >= 128336 && x <= 128359 || x === 128378 || x === 128405 || x === 128406 || x === 128420 || x >= 128507 && x <= 128591 || x >= 128640 && x <= 128709 || x === 128716 || x >= 128720 && x <= 128722 || x >= 128725 && x <= 128727 || x >= 128732 && x <= 128735 || x === 128747 || x === 128748 || x >= 128756 && x <= 128764 || x >= 128992 && x <= 129003 || x === 129008 || x >= 129292 && x <= 129338 || x >= 129340 && x <= 129349 || x >= 129351 && x <= 129535 || x >= 129648 && x <= 129660 || x >= 129664 && x <= 129673 || x >= 129679 && x <= 129734 || x >= 129742 && x <= 129756 || x >= 129759 && x <= 129769 || x >= 129776 && x <= 129784 || x >= 131072 && x <= 196605 || x >= 196608 && x <= 262141;
+}
+var init_lookup = __esm({
+  "node_modules/.pnpm/get-east-asian-width@1.3.0/node_modules/get-east-asian-width/lookup.js"() {
+    __name(isAmbiguous, "isAmbiguous");
+    __name(isFullWidth, "isFullWidth");
+    __name(isWide, "isWide");
+  }
+});
+
+// node_modules/.pnpm/get-east-asian-width@1.3.0/node_modules/get-east-asian-width/index.js
+function validate(codePoint) {
+  if (!Number.isSafeInteger(codePoint)) {
+    throw new TypeError(`Expected a code point, got \`${typeof codePoint}\`.`);
+  }
+}
+function eastAsianWidth(codePoint, { ambiguousAsWide = false } = {}) {
+  validate(codePoint);
+  if (isFullWidth(codePoint) || isWide(codePoint) || ambiguousAsWide && isAmbiguous(codePoint)) {
+    return 2;
+  }
+  return 1;
+}
+var init_get_east_asian_width = __esm({
+  "node_modules/.pnpm/get-east-asian-width@1.3.0/node_modules/get-east-asian-width/index.js"() {
+    init_lookup();
+    __name(validate, "validate");
+    __name(eastAsianWidth, "eastAsianWidth");
+  }
+});
+
+// node_modules/.pnpm/string-width@8.1.0/node_modules/string-width/index.js
+function baseVisible(segment) {
+  return segment.replace(leadingNonPrintingRegex, "");
+}
+function isZeroWidthCluster(segment) {
+  return zeroWidthClusterRegex.test(segment);
+}
+function trailingHalfwidthWidth(segment, eastAsianWidthOptions) {
+  let extra = 0;
+  if (segment.length > 1) {
+    for (const char of segment.slice(1)) {
+      if (char >= "＀" && char <= "￯") {
+        extra += eastAsianWidth(char.codePointAt(0), eastAsianWidthOptions);
+      }
+    }
+  }
+  return extra;
+}
+function stringWidth(input2, options = {}) {
+  if (typeof input2 !== "string" || input2.length === 0) {
+    return 0;
+  }
+  const {
+    ambiguousIsNarrow = true,
+    countAnsiEscapeCodes = false
+  } = options;
+  let string = input2;
+  if (!countAnsiEscapeCodes) {
+    string = stripAnsi(string);
+  }
+  if (string.length === 0) {
+    return 0;
+  }
+  let width = 0;
+  const eastAsianWidthOptions = { ambiguousAsWide: !ambiguousIsNarrow };
+  for (const { segment } of segmenter.segment(string)) {
+    if (isZeroWidthCluster(segment)) {
+      continue;
+    }
+    if (rgiEmojiRegex.test(segment)) {
+      width += 2;
+      continue;
+    }
+    const codePoint = baseVisible(segment).codePointAt(0);
+    width += eastAsianWidth(codePoint, eastAsianWidthOptions);
+    width += trailingHalfwidthWidth(segment, eastAsianWidthOptions);
+  }
+  return width;
+}
+var segmenter, zeroWidthClusterRegex, leadingNonPrintingRegex, rgiEmojiRegex;
+var init_string_width = __esm({
+  "node_modules/.pnpm/string-width@8.1.0/node_modules/string-width/index.js"() {
+    init_strip_ansi();
+    init_get_east_asian_width();
+    segmenter = new Intl.Segmenter();
+    zeroWidthClusterRegex = new RegExp("^(?:\\p{Default_Ignorable_Code_Point}|\\p{Control}|\\p{Mark}|\\p{Surrogate})+$", "v");
+    leadingNonPrintingRegex = new RegExp("^[\\p{Default_Ignorable_Code_Point}\\p{Control}\\p{Format}\\p{Mark}\\p{Surrogate}]+", "v");
+    rgiEmojiRegex = new RegExp("^\\p{RGI_Emoji}$", "v");
+    __name(baseVisible, "baseVisible");
+    __name(isZeroWidthCluster, "isZeroWidthCluster");
+    __name(trailingHalfwidthWidth, "trailingHalfwidthWidth");
+    __name(stringWidth, "stringWidth");
+  }
+});
+
+// node_modules/.pnpm/ansi-styles@6.2.3/node_modules/ansi-styles/index.js
+function assembleStyles() {
+  const codes = /* @__PURE__ */ new Map();
+  for (const [groupName, group] of Object.entries(styles)) {
+    for (const [styleName, style] of Object.entries(group)) {
+      styles[styleName] = {
+        open: `\x1B[${style[0]}m`,
+        close: `\x1B[${style[1]}m`
+      };
+      group[styleName] = styles[styleName];
+      codes.set(style[0], style[1]);
+    }
+    Object.defineProperty(styles, groupName, {
+      value: group,
+      enumerable: false
+    });
+  }
+  Object.defineProperty(styles, "codes", {
+    value: codes,
+    enumerable: false
+  });
+  styles.color.close = "\x1B[39m";
+  styles.bgColor.close = "\x1B[49m";
+  styles.color.ansi = wrapAnsi16();
+  styles.color.ansi256 = wrapAnsi256();
+  styles.color.ansi16m = wrapAnsi16m();
+  styles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);
+  styles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);
+  styles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);
+  Object.defineProperties(styles, {
+    rgbToAnsi256: {
+      value(red, green, blue) {
+        if (red === green && green === blue) {
+          if (red < 8) {
+            return 16;
+          }
+          if (red > 248) {
+            return 231;
+          }
+          return Math.round((red - 8) / 247 * 24) + 232;
+        }
+        return 16 + 36 * Math.round(red / 255 * 5) + 6 * Math.round(green / 255 * 5) + Math.round(blue / 255 * 5);
+      },
+      enumerable: false
+    },
+    hexToRgb: {
+      value(hex) {
+        const matches = /[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16));
+        if (!matches) {
+          return [0, 0, 0];
+        }
+        let [colorString] = matches;
+        if (colorString.length === 3) {
+          colorString = [...colorString].map((character) => character + character).join("");
+        }
+        const integer = Number.parseInt(colorString, 16);
+        return [
+          /* eslint-disable no-bitwise */
+          integer >> 16 & 255,
+          integer >> 8 & 255,
+          integer & 255
+          /* eslint-enable no-bitwise */
+        ];
+      },
+      enumerable: false
+    },
+    hexToAnsi256: {
+      value: /* @__PURE__ */ __name((hex) => styles.rgbToAnsi256(...styles.hexToRgb(hex)), "value"),
+      enumerable: false
+    },
+    ansi256ToAnsi: {
+      value(code) {
+        if (code < 8) {
+          return 30 + code;
+        }
+        if (code < 16) {
+          return 90 + (code - 8);
+        }
+        let red;
+        let green;
+        let blue;
+        if (code >= 232) {
+          red = ((code - 232) * 10 + 8) / 255;
+          green = red;
+          blue = red;
+        } else {
+          code -= 16;
+          const remainder = code % 36;
+          red = Math.floor(code / 36) / 5;
+          green = Math.floor(remainder / 6) / 5;
+          blue = remainder % 6 / 5;
+        }
+        const value = Math.max(red, green, blue) * 2;
+        if (value === 0) {
+          return 30;
+        }
+        let result = 30 + (Math.round(blue) << 2 | Math.round(green) << 1 | Math.round(red));
+        if (value === 2) {
+          result += 60;
+        }
+        return result;
+      },
+      enumerable: false
+    },
+    rgbToAnsi: {
+      value: /* @__PURE__ */ __name((red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)), "value"),
+      enumerable: false
+    },
+    hexToAnsi: {
+      value: /* @__PURE__ */ __name((hex) => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)), "value"),
+      enumerable: false
+    }
+  });
+  return styles;
+}
+var ANSI_BACKGROUND_OFFSET, wrapAnsi16, wrapAnsi256, wrapAnsi16m, styles, modifierNames, foregroundColorNames, backgroundColorNames, colorNames, ansiStyles, ansi_styles_default;
+var init_ansi_styles = __esm({
+  "node_modules/.pnpm/ansi-styles@6.2.3/node_modules/ansi-styles/index.js"() {
+    ANSI_BACKGROUND_OFFSET = 10;
+    wrapAnsi16 = /* @__PURE__ */ __name((offset = 0) => (code) => `\x1B[${code + offset}m`, "wrapAnsi16");
+    wrapAnsi256 = /* @__PURE__ */ __name((offset = 0) => (code) => `\x1B[${38 + offset};5;${code}m`, "wrapAnsi256");
+    wrapAnsi16m = /* @__PURE__ */ __name((offset = 0) => (red, green, blue) => `\x1B[${38 + offset};2;${red};${green};${blue}m`, "wrapAnsi16m");
+    styles = {
+      modifier: {
+        reset: [0, 0],
+        // 21 isn't widely supported and 22 does the same thing
+        bold: [1, 22],
+        dim: [2, 22],
+        italic: [3, 23],
+        underline: [4, 24],
+        overline: [53, 55],
+        inverse: [7, 27],
+        hidden: [8, 28],
+        strikethrough: [9, 29]
+      },
+      color: {
+        black: [30, 39],
+        red: [31, 39],
+        green: [32, 39],
+        yellow: [33, 39],
+        blue: [34, 39],
+        magenta: [35, 39],
+        cyan: [36, 39],
+        white: [37, 39],
+        // Bright color
+        blackBright: [90, 39],
+        gray: [90, 39],
+        // Alias of `blackBright`
+        grey: [90, 39],
+        // Alias of `blackBright`
+        redBright: [91, 39],
+        greenBright: [92, 39],
+        yellowBright: [93, 39],
+        blueBright: [94, 39],
+        magentaBright: [95, 39],
+        cyanBright: [96, 39],
+        whiteBright: [97, 39]
+      },
+      bgColor: {
+        bgBlack: [40, 49],
+        bgRed: [41, 49],
+        bgGreen: [42, 49],
+        bgYellow: [43, 49],
+        bgBlue: [44, 49],
+        bgMagenta: [45, 49],
+        bgCyan: [46, 49],
+        bgWhite: [47, 49],
+        // Bright color
+        bgBlackBright: [100, 49],
+        bgGray: [100, 49],
+        // Alias of `bgBlackBright`
+        bgGrey: [100, 49],
+        // Alias of `bgBlackBright`
+        bgRedBright: [101, 49],
+        bgGreenBright: [102, 49],
+        bgYellowBright: [103, 49],
+        bgBlueBright: [104, 49],
+        bgMagentaBright: [105, 49],
+        bgCyanBright: [106, 49],
+        bgWhiteBright: [107, 49]
+      }
+    };
+    modifierNames = Object.keys(styles.modifier);
+    foregroundColorNames = Object.keys(styles.color);
+    backgroundColorNames = Object.keys(styles.bgColor);
+    colorNames = [...foregroundColorNames, ...backgroundColorNames];
+    __name(assembleStyles, "assembleStyles");
+    ansiStyles = assembleStyles();
+    ansi_styles_default = ansiStyles;
+  }
+});
+
+// node_modules/.pnpm/wrap-ansi@9.0.2/node_modules/wrap-ansi/index.js
+var wrap_ansi_exports = {};
+__export(wrap_ansi_exports, {
+  default: () => wrapAnsi
+});
+function wrapAnsi(string, columns, options) {
+  return String(string).normalize().replaceAll("\r\n", "\n").split("\n").map((line) => exec(line, columns, options)).join("\n");
+}
+var ESCAPES, END_CODE, ANSI_ESCAPE_BELL, ANSI_CSI, ANSI_OSC, ANSI_SGR_TERMINATOR, ANSI_ESCAPE_LINK, wrapAnsiCode, wrapAnsiHyperlink, wordLengths, wrapWord, stringVisibleTrimSpacesRight, exec;
+var init_wrap_ansi = __esm({
+  "node_modules/.pnpm/wrap-ansi@9.0.2/node_modules/wrap-ansi/index.js"() {
+    init_string_width();
+    init_strip_ansi();
+    init_ansi_styles();
+    ESCAPES = /* @__PURE__ */ new Set([
+      "\x1B",
+      "›"
+    ]);
+    END_CODE = 39;
+    ANSI_ESCAPE_BELL = "\x07";
+    ANSI_CSI = "[";
+    ANSI_OSC = "]";
+    ANSI_SGR_TERMINATOR = "m";
+    ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;
+    wrapAnsiCode = /* @__PURE__ */ __name((code) => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`, "wrapAnsiCode");
+    wrapAnsiHyperlink = /* @__PURE__ */ __name((url) => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${url}${ANSI_ESCAPE_BELL}`, "wrapAnsiHyperlink");
+    wordLengths = /* @__PURE__ */ __name((string) => string.split(" ").map((character) => stringWidth(character)), "wordLengths");
+    wrapWord = /* @__PURE__ */ __name((rows, word, columns) => {
+      const characters = [...word];
+      let isInsideEscape = false;
+      let isInsideLinkEscape = false;
+      let visible = stringWidth(stripAnsi(rows.at(-1)));
+      for (const [index, character] of characters.entries()) {
+        const characterLength = stringWidth(character);
+        if (visible + characterLength <= columns) {
+          rows[rows.length - 1] += character;
+        } else {
+          rows.push(character);
+          visible = 0;
+        }
+        if (ESCAPES.has(character)) {
+          isInsideEscape = true;
+          const ansiEscapeLinkCandidate = characters.slice(index + 1, index + 1 + ANSI_ESCAPE_LINK.length).join("");
+          isInsideLinkEscape = ansiEscapeLinkCandidate === ANSI_ESCAPE_LINK;
+        }
+        if (isInsideEscape) {
+          if (isInsideLinkEscape) {
+            if (character === ANSI_ESCAPE_BELL) {
+              isInsideEscape = false;
+              isInsideLinkEscape = false;
+            }
+          } else if (character === ANSI_SGR_TERMINATOR) {
+            isInsideEscape = false;
+          }
+          continue;
+        }
+        visible += characterLength;
+        if (visible === columns && index < characters.length - 1) {
+          rows.push("");
+          visible = 0;
+        }
+      }
+      if (!visible && rows.at(-1).length > 0 && rows.length > 1) {
+        rows[rows.length - 2] += rows.pop();
+      }
+    }, "wrapWord");
+    stringVisibleTrimSpacesRight = /* @__PURE__ */ __name((string) => {
+      const words = string.split(" ");
+      let last = words.length;
+      while (last > 0) {
+        if (stringWidth(words[last - 1]) > 0) {
+          break;
+        }
+        last--;
+      }
+      if (last === words.length) {
+        return string;
+      }
+      return words.slice(0, last).join(" ") + words.slice(last).join("");
+    }, "stringVisibleTrimSpacesRight");
+    exec = /* @__PURE__ */ __name((string, columns, options = {}) => {
+      if (options.trim !== false && string.trim() === "") {
+        return "";
+      }
+      let returnValue = "";
+      let escapeCode;
+      let escapeUrl;
+      const lengths = wordLengths(string);
+      let rows = [""];
+      for (const [index, word] of string.split(" ").entries()) {
+        if (options.trim !== false) {
+          rows[rows.length - 1] = rows.at(-1).trimStart();
+        }
+        let rowLength = stringWidth(rows.at(-1));
+        if (index !== 0) {
+          if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {
+            rows.push("");
+            rowLength = 0;
+          }
+          if (rowLength > 0 || options.trim === false) {
+            rows[rows.length - 1] += " ";
+            rowLength++;
+          }
+        }
+        if (options.hard && lengths[index] > columns) {
+          const remainingColumns = columns - rowLength;
+          const breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);
+          const breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);
+          if (breaksStartingNextLine < breaksStartingThisLine) {
+            rows.push("");
+          }
+          wrapWord(rows, word, columns);
+          continue;
+        }
+        if (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {
+          if (options.wordWrap === false && rowLength < columns) {
+            wrapWord(rows, word, columns);
+            continue;
+          }
+          rows.push("");
+        }
+        if (rowLength + lengths[index] > columns && options.wordWrap === false) {
+          wrapWord(rows, word, columns);
+          continue;
+        }
+        rows[rows.length - 1] += word;
+      }
+      if (options.trim !== false) {
+        rows = rows.map((row) => stringVisibleTrimSpacesRight(row));
+      }
+      const preString = rows.join("\n");
+      const pre = [...preString];
+      let preStringIndex = 0;
+      for (const [index, character] of pre.entries()) {
+        returnValue += character;
+        if (ESCAPES.has(character)) {
+          const { groups } = new RegExp(`(?:\\${ANSI_CSI}(?\\d+)m|\\${ANSI_ESCAPE_LINK}(?.*)${ANSI_ESCAPE_BELL})`).exec(preString.slice(preStringIndex)) || { groups: {} };
+          if (groups.code !== void 0) {
+            const code2 = Number.parseFloat(groups.code);
+            escapeCode = code2 === END_CODE ? void 0 : code2;
+          } else if (groups.uri !== void 0) {
+            escapeUrl = groups.uri.length === 0 ? void 0 : groups.uri;
+          }
+        }
+        const code = ansi_styles_default.codes.get(Number(escapeCode));
+        if (pre[index + 1] === "\n") {
+          if (escapeUrl) {
+            returnValue += wrapAnsiHyperlink("");
+          }
+          if (escapeCode && code) {
+            returnValue += wrapAnsiCode(code);
+          }
+        } else if (character === "\n") {
+          if (escapeCode && code) {
+            returnValue += wrapAnsiCode(escapeCode);
+          }
+          if (escapeUrl) {
+            returnValue += wrapAnsiHyperlink(escapeUrl);
+          }
+        }
+        preStringIndex += character.length;
+      }
+      return returnValue;
+    }, "exec");
+    __name(wrapAnsi, "wrapAnsi");
+  }
+});
+
+// node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/utils.js
+var require_utils = __commonJS({
+  "node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/utils.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.breakLines = breakLines;
+    exports2.readlineWidth = readlineWidth;
+    var cli_width_1 = __importDefault(require_cli_width());
+    var wrap_ansi_1 = __importDefault((init_wrap_ansi(), __toCommonJS(wrap_ansi_exports)));
+    var hook_engine_ts_1 = require_hook_engine();
+    function breakLines(content, width) {
+      return content.split("\n").flatMap((line) => (0, wrap_ansi_1.default)(line, width, { trim: false, hard: true }).split("\n").map((str) => str.trimEnd())).join("\n");
+    }
+    __name(breakLines, "breakLines");
+    function readlineWidth() {
+      return (0, cli_width_1.default)({ defaultWidth: 80, output: (0, hook_engine_ts_1.readline)().output });
+    }
+    __name(readlineWidth, "readlineWidth");
+  }
+});
+
+// node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/pagination/use-pagination.js
+var require_use_pagination = __commonJS({
+  "node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/pagination/use-pagination.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.usePagination = usePagination;
+    var use_ref_ts_1 = require_use_ref();
+    var utils_ts_1 = require_utils();
+    function usePointerPosition({ active, renderedItems, pageSize, loop }) {
+      const state = (0, use_ref_ts_1.useRef)({
+        lastPointer: active,
+        lastActive: void 0
+      });
+      const { lastPointer, lastActive } = state.current;
+      const middle = Math.floor(pageSize / 2);
+      const renderedLength = renderedItems.reduce((acc, item) => acc + item.length, 0);
+      const defaultPointerPosition = renderedItems.slice(0, active).reduce((acc, item) => acc + item.length, 0);
+      let pointer = defaultPointerPosition;
+      if (renderedLength > pageSize) {
+        if (loop) {
+          pointer = lastPointer;
+          if (
+            // First render, skip this logic.
+            lastActive != null && // Only move the pointer down when the user moves down.
+            lastActive < active && // Check user didn't move up across page boundary.
+            active - lastActive < pageSize
+          ) {
+            pointer = Math.min(
+              // Furthest allowed position for the pointer is the middle of the list
+              middle,
+              Math.abs(active - lastActive) === 1 ? Math.min(
+                // Move the pointer at most the height of the last active item.
+                lastPointer + (renderedItems[lastActive]?.length ?? 0),
+                // If the user moved by one item, move the pointer to the natural position of the active item as
+                // long as it doesn't move the cursor up.
+                Math.max(defaultPointerPosition, lastPointer)
+              ) : (
+                // Otherwise, move the pointer down by the difference between the active and last active item.
+                lastPointer + active - lastActive
+              )
+            );
+          }
+        } else {
+          const spaceUnderActive = renderedItems.slice(active).reduce((acc, item) => acc + item.length, 0);
+          pointer = spaceUnderActive < pageSize - middle ? (
+            // If the active item is near the end of the list, progressively move the cursor towards the end.
+            pageSize - spaceUnderActive
+          ) : (
+            // Otherwise, progressively move the pointer to the middle of the list.
+            Math.min(defaultPointerPosition, middle)
+          );
+        }
+      }
+      state.current.lastPointer = pointer;
+      state.current.lastActive = active;
+      return pointer;
+    }
+    __name(usePointerPosition, "usePointerPosition");
+    function usePagination({ items, active, renderItem, pageSize, loop = true }) {
+      const width = (0, utils_ts_1.readlineWidth)();
+      const bound = /* @__PURE__ */ __name((num) => (num % items.length + items.length) % items.length, "bound");
+      const renderedItems = items.map((item, index) => {
+        if (item == null)
+          return [];
+        return (0, utils_ts_1.breakLines)(renderItem({ item, index, isActive: index === active }), width).split("\n");
+      });
+      const renderedLength = renderedItems.reduce((acc, item) => acc + item.length, 0);
+      const renderItemAtIndex = /* @__PURE__ */ __name((index) => renderedItems[index] ?? [], "renderItemAtIndex");
+      const pointer = usePointerPosition({ active, renderedItems, pageSize, loop });
+      const activeItem = renderItemAtIndex(active).slice(0, pageSize);
+      const activeItemPosition = pointer + activeItem.length <= pageSize ? pointer : pageSize - activeItem.length;
+      const pageBuffer = Array.from({ length: pageSize });
+      pageBuffer.splice(activeItemPosition, activeItem.length, ...activeItem);
+      const itemVisited = /* @__PURE__ */ new Set([active]);
+      let bufferPointer = activeItemPosition + activeItem.length;
+      let itemPointer = bound(active + 1);
+      while (bufferPointer < pageSize && !itemVisited.has(itemPointer) && (loop && renderedLength > pageSize ? itemPointer !== active : itemPointer > active)) {
+        const lines = renderItemAtIndex(itemPointer);
+        const linesToAdd = lines.slice(0, pageSize - bufferPointer);
+        pageBuffer.splice(bufferPointer, linesToAdd.length, ...linesToAdd);
+        itemVisited.add(itemPointer);
+        bufferPointer += linesToAdd.length;
+        itemPointer = bound(itemPointer + 1);
+      }
+      bufferPointer = activeItemPosition - 1;
+      itemPointer = bound(active - 1);
+      while (bufferPointer >= 0 && !itemVisited.has(itemPointer) && (loop && renderedLength > pageSize ? itemPointer !== active : itemPointer < active)) {
+        const lines = renderItemAtIndex(itemPointer);
+        const linesToAdd = lines.slice(Math.max(0, lines.length - bufferPointer - 1));
+        pageBuffer.splice(bufferPointer - linesToAdd.length + 1, linesToAdd.length, ...linesToAdd);
+        itemVisited.add(itemPointer);
+        bufferPointer -= linesToAdd.length;
+        itemPointer = bound(itemPointer - 1);
+      }
+      return pageBuffer.filter((line) => typeof line === "string").join("\n");
+    }
+    __name(usePagination, "usePagination");
+  }
+});
+
+// node_modules/.pnpm/mute-stream@3.0.0/node_modules/mute-stream/lib/index.js
+var require_lib = __commonJS({
+  "node_modules/.pnpm/mute-stream@3.0.0/node_modules/mute-stream/lib/index.js"(exports2, module2) {
+    var Stream = require("stream");
+    var MuteStream = class extends Stream {
+      static {
+        __name(this, "MuteStream");
+      }
+      #isTTY = null;
+      constructor(opts = {}) {
+        super(opts);
+        this.writable = this.readable = true;
+        this.muted = false;
+        this.on("pipe", this._onpipe);
+        this.replace = opts.replace;
+        this._prompt = opts.prompt || null;
+        this._hadControl = false;
+      }
+      #destSrc(key, def) {
+        if (this._dest) {
+          return this._dest[key];
+        }
+        if (this._src) {
+          return this._src[key];
+        }
+        return def;
+      }
+      #proxy(method, ...args) {
+        if (typeof this._dest?.[method] === "function") {
+          this._dest[method](...args);
+        }
+        if (typeof this._src?.[method] === "function") {
+          this._src[method](...args);
+        }
+      }
+      get isTTY() {
+        if (this.#isTTY !== null) {
+          return this.#isTTY;
+        }
+        return this.#destSrc("isTTY", false);
+      }
+      // basically just get replace the getter/setter with a regular value
+      set isTTY(val) {
+        this.#isTTY = val;
+      }
+      get rows() {
+        return this.#destSrc("rows");
+      }
+      get columns() {
+        return this.#destSrc("columns");
+      }
+      mute() {
+        this.muted = true;
+      }
+      unmute() {
+        this.muted = false;
+      }
+      _onpipe(src) {
+        this._src = src;
+      }
+      pipe(dest, options) {
+        this._dest = dest;
+        return super.pipe(dest, options);
+      }
+      pause() {
+        if (this._src) {
+          return this._src.pause();
+        }
+      }
+      resume() {
+        if (this._src) {
+          return this._src.resume();
+        }
+      }
+      write(c) {
+        if (this.muted) {
+          if (!this.replace) {
+            return true;
+          }
+          if (c.match(/^\u001b/)) {
+            if (c.indexOf(this._prompt) === 0) {
+              c = c.slice(this._prompt.length);
+              c = c.replace(/./g, this.replace);
+              c = this._prompt + c;
+            }
+            this._hadControl = true;
+            return this.emit("data", c);
+          } else {
+            if (this._prompt && this._hadControl && c.indexOf(this._prompt) === 0) {
+              this._hadControl = false;
+              this.emit("data", this._prompt);
+              c = c.slice(this._prompt.length);
+            }
+            c = c.toString().replace(/./g, this.replace);
+          }
+        }
+        this.emit("data", c);
+      }
+      end(c) {
+        if (this.muted) {
+          if (c && this.replace) {
+            c = c.toString().replace(/./g, this.replace);
+          } else {
+            c = null;
+          }
+        }
+        if (c) {
+          this.emit("data", c);
+        }
+        this.emit("end");
+      }
+      destroy(...args) {
+        return this.#proxy("destroy", ...args);
+      }
+      destroySoon(...args) {
+        return this.#proxy("destroySoon", ...args);
+      }
+      close(...args) {
+        return this.#proxy("close", ...args);
+      }
+    };
+    module2.exports = MuteStream;
+  }
+});
+
+// node_modules/.pnpm/@inquirer+ansi@1.0.2/node_modules/@inquirer/ansi/dist/commonjs/index.js
+var require_commonjs2 = __commonJS({
+  "node_modules/.pnpm/@inquirer+ansi@1.0.2/node_modules/@inquirer/ansi/dist/commonjs/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.eraseLines = exports2.cursorTo = exports2.cursorDown = exports2.cursorUp = exports2.cursorShow = exports2.cursorHide = exports2.cursorLeft = void 0;
+    var ESC = "\x1B[";
+    exports2.cursorLeft = ESC + "G";
+    exports2.cursorHide = ESC + "?25l";
+    exports2.cursorShow = ESC + "?25h";
+    var cursorUp = /* @__PURE__ */ __name((rows = 1) => rows > 0 ? `${ESC}${rows}A` : "", "cursorUp");
+    exports2.cursorUp = cursorUp;
+    var cursorDown = /* @__PURE__ */ __name((rows = 1) => rows > 0 ? `${ESC}${rows}B` : "", "cursorDown");
+    exports2.cursorDown = cursorDown;
+    var cursorTo = /* @__PURE__ */ __name((x, y) => {
+      if (typeof y === "number" && !Number.isNaN(y)) {
+        return `${ESC}${y + 1};${x + 1}H`;
+      }
+      return `${ESC}${x + 1}G`;
+    }, "cursorTo");
+    exports2.cursorTo = cursorTo;
+    var eraseLine = ESC + "2K";
+    var eraseLines = /* @__PURE__ */ __name((lines) => lines > 0 ? (eraseLine + (0, exports2.cursorUp)(1)).repeat(lines - 1) + eraseLine + exports2.cursorLeft : "", "eraseLines");
+    exports2.eraseLines = eraseLines;
+  }
+});
+
+// node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/screen-manager.js
+var require_screen_manager = __commonJS({
+  "node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/screen-manager.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var node_util_1 = require("node:util");
+    var utils_ts_1 = require_utils();
+    var ansi_1 = require_commonjs2();
+    var height = /* @__PURE__ */ __name((content) => content.split("\n").length, "height");
+    var lastLine = /* @__PURE__ */ __name((content) => content.split("\n").pop() ?? "", "lastLine");
+    var ScreenManager = class {
+      static {
+        __name(this, "ScreenManager");
+      }
+      // These variables are keeping information to allow correct prompt re-rendering
+      height = 0;
+      extraLinesUnderPrompt = 0;
+      cursorPos;
+      rl;
+      constructor(rl) {
+        this.rl = rl;
+        this.cursorPos = rl.getCursorPos();
+      }
+      write(content) {
+        this.rl.output.unmute();
+        this.rl.output.write(content);
+        this.rl.output.mute();
+      }
+      render(content, bottomContent = "") {
+        const promptLine = lastLine(content);
+        const rawPromptLine = (0, node_util_1.stripVTControlCharacters)(promptLine);
+        let prompt = rawPromptLine;
+        if (this.rl.line.length > 0) {
+          prompt = prompt.slice(0, -this.rl.line.length);
+        }
+        this.rl.setPrompt(prompt);
+        this.cursorPos = this.rl.getCursorPos();
+        const width = (0, utils_ts_1.readlineWidth)();
+        content = (0, utils_ts_1.breakLines)(content, width);
+        bottomContent = (0, utils_ts_1.breakLines)(bottomContent, width);
+        if (rawPromptLine.length % width === 0) {
+          content += "\n";
+        }
+        let output = content + (bottomContent ? "\n" + bottomContent : "");
+        const promptLineUpDiff = Math.floor(rawPromptLine.length / width) - this.cursorPos.rows;
+        const bottomContentHeight = promptLineUpDiff + (bottomContent ? height(bottomContent) : 0);
+        if (bottomContentHeight > 0)
+          output += (0, ansi_1.cursorUp)(bottomContentHeight);
+        output += (0, ansi_1.cursorTo)(this.cursorPos.cols);
+        this.write((0, ansi_1.cursorDown)(this.extraLinesUnderPrompt) + (0, ansi_1.eraseLines)(this.height) + output);
+        this.extraLinesUnderPrompt = bottomContentHeight;
+        this.height = height(output);
+      }
+      checkCursorPos() {
+        const cursorPos = this.rl.getCursorPos();
+        if (cursorPos.cols !== this.cursorPos.cols) {
+          this.write((0, ansi_1.cursorTo)(cursorPos.cols));
+          this.cursorPos = cursorPos;
+        }
+      }
+      done({ clearContent }) {
+        this.rl.setPrompt("");
+        let output = (0, ansi_1.cursorDown)(this.extraLinesUnderPrompt);
+        output += clearContent ? (0, ansi_1.eraseLines)(this.height) : "\n";
+        output += ansi_1.cursorShow;
+        this.write(output);
+        this.rl.close();
+      }
+    };
+    exports2.default = ScreenManager;
+  }
+});
+
+// node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/promise-polyfill.js
+var require_promise_polyfill = __commonJS({
+  "node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/promise-polyfill.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.PromisePolyfill = void 0;
+    var PromisePolyfill = class extends Promise {
+      static {
+        __name(this, "PromisePolyfill");
+      }
+      // Available starting from Node 22
+      // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolvers
+      static withResolver() {
+        let resolve;
+        let reject;
+        const promise = new Promise((res, rej) => {
+          resolve = res;
+          reject = rej;
+        });
+        return { promise, resolve, reject };
+      }
+    };
+    exports2.PromisePolyfill = PromisePolyfill;
+  }
+});
+
+// node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/create-prompt.js
+var require_create_prompt = __commonJS({
+  "node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/create-prompt.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
+      var ownKeys = /* @__PURE__ */ __name(function(o) {
+        ownKeys = Object.getOwnPropertyNames || function(o2) {
+          var ar = [];
+          for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
+          return ar;
+        };
+        return ownKeys(o);
+      }, "ownKeys");
+      return function(mod) {
+        if (mod && mod.__esModule) return mod;
+        var result = {};
+        if (mod != null) {
+          for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+        }
+        __setModuleDefault(result, mod);
+        return result;
+      };
+    })();
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.createPrompt = createPrompt;
+    var readline = __importStar(require("node:readline"));
+    var node_async_hooks_1 = require("node:async_hooks");
+    var mute_stream_1 = __importDefault(require_lib());
+    var signal_exit_1 = require_cjs();
+    var screen_manager_ts_1 = __importDefault(require_screen_manager());
+    var promise_polyfill_ts_1 = require_promise_polyfill();
+    var hook_engine_ts_1 = require_hook_engine();
+    var errors_ts_1 = require_errors();
+    function getCallSites() {
+      const _prepareStackTrace = Error.prepareStackTrace;
+      let result = [];
+      try {
+        Error.prepareStackTrace = (_, callSites) => {
+          const callSitesWithoutCurrent = callSites.slice(1);
+          result = callSitesWithoutCurrent;
+          return callSitesWithoutCurrent;
+        };
+        new Error().stack;
+      } catch {
+        return result;
+      }
+      Error.prepareStackTrace = _prepareStackTrace;
+      return result;
+    }
+    __name(getCallSites, "getCallSites");
+    function createPrompt(view) {
+      const callSites = getCallSites();
+      const prompt = /* @__PURE__ */ __name((config, context = {}) => {
+        const { input: input2 = process.stdin, signal } = context;
+        const cleanups = /* @__PURE__ */ new Set();
+        const output = new mute_stream_1.default();
+        output.pipe(context.output ?? process.stdout);
+        const rl = readline.createInterface({
+          terminal: true,
+          input: input2,
+          output
+        });
+        const screen = new screen_manager_ts_1.default(rl);
+        const { promise, resolve, reject } = promise_polyfill_ts_1.PromisePolyfill.withResolver();
+        const cancel = /* @__PURE__ */ __name(() => reject(new errors_ts_1.CancelPromptError()), "cancel");
+        if (signal) {
+          const abort = /* @__PURE__ */ __name(() => reject(new errors_ts_1.AbortPromptError({ cause: signal.reason })), "abort");
+          if (signal.aborted) {
+            abort();
+            return Object.assign(promise, { cancel });
+          }
+          signal.addEventListener("abort", abort);
+          cleanups.add(() => signal.removeEventListener("abort", abort));
+        }
+        cleanups.add((0, signal_exit_1.onExit)((code, signal2) => {
+          reject(new errors_ts_1.ExitPromptError(`User force closed the prompt with ${code} ${signal2}`));
+        }));
+        const sigint = /* @__PURE__ */ __name(() => reject(new errors_ts_1.ExitPromptError(`User force closed the prompt with SIGINT`)), "sigint");
+        rl.on("SIGINT", sigint);
+        cleanups.add(() => rl.removeListener("SIGINT", sigint));
+        const checkCursorPos = /* @__PURE__ */ __name(() => screen.checkCursorPos(), "checkCursorPos");
+        rl.input.on("keypress", checkCursorPos);
+        cleanups.add(() => rl.input.removeListener("keypress", checkCursorPos));
+        return (0, hook_engine_ts_1.withHooks)(rl, (cycle) => {
+          const hooksCleanup = node_async_hooks_1.AsyncResource.bind(() => hook_engine_ts_1.effectScheduler.clearAll());
+          rl.on("close", hooksCleanup);
+          cleanups.add(() => rl.removeListener("close", hooksCleanup));
+          cycle(() => {
+            try {
+              const nextView = view(config, (value) => {
+                setImmediate(() => resolve(value));
+              });
+              if (nextView === void 0) {
+                const callerFilename = callSites[1]?.getFileName();
+                throw new Error(`Prompt functions must return a string.
+    at ${callerFilename}`);
+              }
+              const [content, bottomContent] = typeof nextView === "string" ? [nextView] : nextView;
+              screen.render(content, bottomContent);
+              hook_engine_ts_1.effectScheduler.run();
+            } catch (error) {
+              reject(error);
+            }
+          });
+          return Object.assign(promise.then((answer) => {
+            hook_engine_ts_1.effectScheduler.clearAll();
+            return answer;
+          }, (error) => {
+            hook_engine_ts_1.effectScheduler.clearAll();
+            throw error;
+          }).finally(() => {
+            cleanups.forEach((cleanup) => cleanup());
+            screen.done({ clearContent: Boolean(context.clearPromptOnDone) });
+            output.end();
+          }).then(() => promise), { cancel });
+        });
+      }, "prompt");
+      return prompt;
+    }
+    __name(createPrompt, "createPrompt");
+  }
+});
+
+// node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/Separator.js
+var require_Separator = __commonJS({
+  "node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/lib/Separator.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Separator = void 0;
+    var yoctocolors_cjs_1 = __importDefault(require_yoctocolors_cjs());
+    var figures_1 = __importDefault(require_commonjs());
+    var Separator = class {
+      static {
+        __name(this, "Separator");
+      }
+      separator = yoctocolors_cjs_1.default.dim(Array.from({ length: 15 }).join(figures_1.default.line));
+      type = "separator";
+      constructor(separator) {
+        if (separator) {
+          this.separator = separator;
+        }
+      }
+      static isSeparator(choice) {
+        return Boolean(choice && typeof choice === "object" && "type" in choice && choice.type === "separator");
+      }
+    };
+    exports2.Separator = Separator;
+  }
+});
+
+// node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/index.js
+var require_commonjs3 = __commonJS({
+  "node_modules/.pnpm/@inquirer+core@10.3.1_@types+node@24.9.2/node_modules/@inquirer/core/dist/commonjs/index.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
+      for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Separator = exports2.createPrompt = exports2.usePagination = exports2.makeTheme = exports2.useKeypress = exports2.useRef = exports2.useMemo = exports2.useEffect = exports2.useState = exports2.usePrefix = exports2.isEnterKey = exports2.isNumberKey = exports2.isTabKey = exports2.isBackspaceKey = exports2.isSpaceKey = exports2.isDownKey = exports2.isUpKey = void 0;
+    var key_ts_1 = require_key();
+    Object.defineProperty(exports2, "isUpKey", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return key_ts_1.isUpKey;
+    }, "get") });
+    Object.defineProperty(exports2, "isDownKey", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return key_ts_1.isDownKey;
+    }, "get") });
+    Object.defineProperty(exports2, "isSpaceKey", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return key_ts_1.isSpaceKey;
+    }, "get") });
+    Object.defineProperty(exports2, "isBackspaceKey", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return key_ts_1.isBackspaceKey;
+    }, "get") });
+    Object.defineProperty(exports2, "isTabKey", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return key_ts_1.isTabKey;
+    }, "get") });
+    Object.defineProperty(exports2, "isNumberKey", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return key_ts_1.isNumberKey;
+    }, "get") });
+    Object.defineProperty(exports2, "isEnterKey", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return key_ts_1.isEnterKey;
+    }, "get") });
+    __exportStar(require_errors(), exports2);
+    var use_prefix_ts_1 = require_use_prefix();
+    Object.defineProperty(exports2, "usePrefix", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return use_prefix_ts_1.usePrefix;
+    }, "get") });
+    var use_state_ts_1 = require_use_state();
+    Object.defineProperty(exports2, "useState", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return use_state_ts_1.useState;
+    }, "get") });
+    var use_effect_ts_1 = require_use_effect();
+    Object.defineProperty(exports2, "useEffect", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return use_effect_ts_1.useEffect;
+    }, "get") });
+    var use_memo_ts_1 = require_use_memo();
+    Object.defineProperty(exports2, "useMemo", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return use_memo_ts_1.useMemo;
+    }, "get") });
+    var use_ref_ts_1 = require_use_ref();
+    Object.defineProperty(exports2, "useRef", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return use_ref_ts_1.useRef;
+    }, "get") });
+    var use_keypress_ts_1 = require_use_keypress();
+    Object.defineProperty(exports2, "useKeypress", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return use_keypress_ts_1.useKeypress;
+    }, "get") });
+    var make_theme_ts_1 = require_make_theme();
+    Object.defineProperty(exports2, "makeTheme", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return make_theme_ts_1.makeTheme;
+    }, "get") });
+    var use_pagination_ts_1 = require_use_pagination();
+    Object.defineProperty(exports2, "usePagination", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return use_pagination_ts_1.usePagination;
+    }, "get") });
+    var create_prompt_ts_1 = require_create_prompt();
+    Object.defineProperty(exports2, "createPrompt", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return create_prompt_ts_1.createPrompt;
+    }, "get") });
+    var Separator_ts_1 = require_Separator();
+    Object.defineProperty(exports2, "Separator", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return Separator_ts_1.Separator;
+    }, "get") });
+  }
+});
+
+// node_modules/.pnpm/@inquirer+checkbox@4.3.1_@types+node@24.9.2/node_modules/@inquirer/checkbox/dist/commonjs/index.js
+var require_commonjs4 = __commonJS({
+  "node_modules/.pnpm/@inquirer+checkbox@4.3.1_@types+node@24.9.2/node_modules/@inquirer/checkbox/dist/commonjs/index.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Separator = void 0;
+    var core_1 = require_commonjs3();
+    var ansi_1 = require_commonjs2();
+    var yoctocolors_cjs_1 = __importDefault(require_yoctocolors_cjs());
+    var figures_1 = __importDefault(require_commonjs());
+    var checkboxTheme = {
+      icon: {
+        checked: yoctocolors_cjs_1.default.green(figures_1.default.circleFilled),
+        unchecked: figures_1.default.circle,
+        cursor: figures_1.default.pointer
+      },
+      style: {
+        disabledChoice: /* @__PURE__ */ __name((text) => yoctocolors_cjs_1.default.dim(`- ${text}`), "disabledChoice"),
+        renderSelectedChoices: /* @__PURE__ */ __name((selectedChoices) => selectedChoices.map((choice) => choice.short).join(", "), "renderSelectedChoices"),
+        description: /* @__PURE__ */ __name((text) => yoctocolors_cjs_1.default.cyan(text), "description"),
+        keysHelpTip: /* @__PURE__ */ __name((keys) => keys.map(([key, action]) => `${yoctocolors_cjs_1.default.bold(key)} ${yoctocolors_cjs_1.default.dim(action)}`).join(yoctocolors_cjs_1.default.dim(" • ")), "keysHelpTip")
+      },
+      helpMode: "always",
+      keybindings: []
+    };
+    function isSelectable(item) {
+      return !core_1.Separator.isSeparator(item) && !item.disabled;
+    }
+    __name(isSelectable, "isSelectable");
+    function isChecked(item) {
+      return isSelectable(item) && item.checked;
+    }
+    __name(isChecked, "isChecked");
+    function toggle(item) {
+      return isSelectable(item) ? { ...item, checked: !item.checked } : item;
+    }
+    __name(toggle, "toggle");
+    function check(checked) {
+      return function(item) {
+        return isSelectable(item) ? { ...item, checked } : item;
+      };
+    }
+    __name(check, "check");
+    function normalizeChoices(choices) {
+      return choices.map((choice) => {
+        if (core_1.Separator.isSeparator(choice))
+          return choice;
+        if (typeof choice === "string") {
+          return {
+            value: choice,
+            name: choice,
+            short: choice,
+            checkedName: choice,
+            disabled: false,
+            checked: false
+          };
+        }
+        const name = choice.name ?? String(choice.value);
+        const normalizedChoice = {
+          value: choice.value,
+          name,
+          short: choice.short ?? name,
+          checkedName: choice.checkedName ?? name,
+          disabled: choice.disabled ?? false,
+          checked: choice.checked ?? false
+        };
+        if (choice.description) {
+          normalizedChoice.description = choice.description;
+        }
+        return normalizedChoice;
+      });
+    }
+    __name(normalizeChoices, "normalizeChoices");
+    exports2.default = (0, core_1.createPrompt)((config, done) => {
+      const {
+        // eslint-disable-next-line @typescript-eslint/no-deprecated
+        instructions,
+        pageSize = 7,
+        loop = true,
+        required,
+        validate: validate2 = /* @__PURE__ */ __name(() => true, "validate")
+      } = config;
+      const shortcuts = { all: "a", invert: "i", ...config.shortcuts };
+      const theme = (0, core_1.makeTheme)(checkboxTheme, config.theme);
+      const { keybindings } = theme;
+      const [status, setStatus] = (0, core_1.useState)("idle");
+      const prefix = (0, core_1.usePrefix)({ status, theme });
+      const [items, setItems] = (0, core_1.useState)(normalizeChoices(config.choices));
+      const bounds = (0, core_1.useMemo)(() => {
+        const first = items.findIndex(isSelectable);
+        const last = items.findLastIndex(isSelectable);
+        if (first === -1) {
+          throw new core_1.ValidationError("[checkbox prompt] No selectable choices. All choices are disabled.");
+        }
+        return { first, last };
+      }, [items]);
+      const [active, setActive] = (0, core_1.useState)(bounds.first);
+      const [errorMsg, setError] = (0, core_1.useState)();
+      (0, core_1.useKeypress)(async (key) => {
+        if ((0, core_1.isEnterKey)(key)) {
+          const selection = items.filter(isChecked);
+          const isValid = await validate2([...selection]);
+          if (required && !items.some(isChecked)) {
+            setError("At least one choice must be selected");
+          } else if (isValid === true) {
+            setStatus("done");
+            done(selection.map((choice) => choice.value));
+          } else {
+            setError(isValid || "You must select a valid value");
+          }
+        } else if ((0, core_1.isUpKey)(key, keybindings) || (0, core_1.isDownKey)(key, keybindings)) {
+          if (loop || (0, core_1.isUpKey)(key, keybindings) && active !== bounds.first || (0, core_1.isDownKey)(key, keybindings) && active !== bounds.last) {
+            const offset = (0, core_1.isUpKey)(key, keybindings) ? -1 : 1;
+            let next = active;
+            do {
+              next = (next + offset + items.length) % items.length;
+            } while (!isSelectable(items[next]));
+            setActive(next);
+          }
+        } else if ((0, core_1.isSpaceKey)(key)) {
+          setError(void 0);
+          setItems(items.map((choice, i) => i === active ? toggle(choice) : choice));
+        } else if (key.name === shortcuts.all) {
+          const selectAll = items.some((choice) => isSelectable(choice) && !choice.checked);
+          setItems(items.map(check(selectAll)));
+        } else if (key.name === shortcuts.invert) {
+          setItems(items.map(toggle));
+        } else if ((0, core_1.isNumberKey)(key)) {
+          const selectedIndex = Number(key.name) - 1;
+          let selectableIndex = -1;
+          const position = items.findIndex((item) => {
+            if (core_1.Separator.isSeparator(item))
+              return false;
+            selectableIndex++;
+            return selectableIndex === selectedIndex;
+          });
+          const selectedItem = items[position];
+          if (selectedItem && isSelectable(selectedItem)) {
+            setActive(position);
+            setItems(items.map((choice, i) => i === position ? toggle(choice) : choice));
+          }
+        }
+      });
+      const message = theme.style.message(config.message, status);
+      let description;
+      const page = (0, core_1.usePagination)({
+        items,
+        active,
+        renderItem({ item, isActive }) {
+          if (core_1.Separator.isSeparator(item)) {
+            return ` ${item.separator}`;
+          }
+          if (item.disabled) {
+            const disabledLabel = typeof item.disabled === "string" ? item.disabled : "(disabled)";
+            return theme.style.disabledChoice(`${item.name} ${disabledLabel}`);
+          }
+          if (isActive) {
+            description = item.description;
+          }
+          const checkbox2 = item.checked ? theme.icon.checked : theme.icon.unchecked;
+          const name = item.checked ? item.checkedName : item.name;
+          const color = isActive ? theme.style.highlight : (x) => x;
+          const cursor = isActive ? theme.icon.cursor : " ";
+          return color(`${cursor}${checkbox2} ${name}`);
+        },
+        pageSize,
+        loop
+      });
+      if (status === "done") {
+        const selection = items.filter(isChecked);
+        const answer = theme.style.answer(theme.style.renderSelectedChoices(selection, items));
+        return [prefix, message, answer].filter(Boolean).join(" ");
+      }
+      let helpLine;
+      if (theme.helpMode !== "never" && instructions !== false) {
+        if (typeof instructions === "string") {
+          helpLine = instructions;
+        } else {
+          const keys = [
+            ["↑↓", "navigate"],
+            ["space", "select"]
+          ];
+          if (shortcuts.all)
+            keys.push([shortcuts.all, "all"]);
+          if (shortcuts.invert)
+            keys.push([shortcuts.invert, "invert"]);
+          keys.push(["⏎", "submit"]);
+          helpLine = theme.style.keysHelpTip(keys);
+        }
+      }
+      const lines = [
+        [prefix, message].filter(Boolean).join(" "),
+        page,
+        " ",
+        description ? theme.style.description(description) : "",
+        errorMsg ? theme.style.error(errorMsg) : "",
+        helpLine
+      ].filter(Boolean).join("\n").trimEnd();
+      return `${lines}${ansi_1.cursorHide}`;
+    });
+    var core_2 = require_commonjs3();
+    Object.defineProperty(exports2, "Separator", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return core_2.Separator;
+    }, "get") });
+  }
+});
+
+// node_modules/.pnpm/@inquirer+confirm@5.1.16_@types+node@24.9.2/node_modules/@inquirer/confirm/dist/commonjs/index.js
+var require_commonjs5 = __commonJS({
+  "node_modules/.pnpm/@inquirer+confirm@5.1.16_@types+node@24.9.2/node_modules/@inquirer/confirm/dist/commonjs/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var core_1 = require_commonjs3();
+    function getBooleanValue(value, defaultValue) {
+      let answer = defaultValue !== false;
+      if (/^(y|yes)/i.test(value))
+        answer = true;
+      else if (/^(n|no)/i.test(value))
+        answer = false;
+      return answer;
+    }
+    __name(getBooleanValue, "getBooleanValue");
+    function boolToString(value) {
+      return value ? "Yes" : "No";
+    }
+    __name(boolToString, "boolToString");
+    exports2.default = (0, core_1.createPrompt)((config, done) => {
+      const { transformer = boolToString } = config;
+      const [status, setStatus] = (0, core_1.useState)("idle");
+      const [value, setValue] = (0, core_1.useState)("");
+      const theme = (0, core_1.makeTheme)(config.theme);
+      const prefix = (0, core_1.usePrefix)({ status, theme });
+      (0, core_1.useKeypress)((key, rl) => {
+        if (status !== "idle")
+          return;
+        if ((0, core_1.isEnterKey)(key)) {
+          const answer = getBooleanValue(value, config.default);
+          setValue(transformer(answer));
+          setStatus("done");
+          done(answer);
+        } else if ((0, core_1.isTabKey)(key)) {
+          const answer = boolToString(!getBooleanValue(value, config.default));
+          rl.clearLine(0);
+          rl.write(answer);
+          setValue(answer);
+        } else {
+          setValue(rl.line);
+        }
+      });
+      let formattedValue = value;
+      let defaultValue = "";
+      if (status === "done") {
+        formattedValue = theme.style.answer(value);
+      } else {
+        defaultValue = ` ${theme.style.defaultAnswer(config.default === false ? "y/N" : "Y/n")}`;
+      }
+      const message = theme.style.message(config.message, status);
+      return `${prefix} ${message}${defaultValue} ${formattedValue}`;
+    });
+  }
+});
+
+// node_modules/.pnpm/@inquirer+input@4.2.2_@types+node@24.9.2/node_modules/@inquirer/input/dist/commonjs/index.js
+var require_commonjs6 = __commonJS({
+  "node_modules/.pnpm/@inquirer+input@4.2.2_@types+node@24.9.2/node_modules/@inquirer/input/dist/commonjs/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var core_1 = require_commonjs3();
+    var inputTheme = {
+      validationFailureMode: "keep"
+    };
+    exports2.default = (0, core_1.createPrompt)((config, done) => {
+      const { required, validate: validate2 = /* @__PURE__ */ __name(() => true, "validate"), prefill = "tab" } = config;
+      const theme = (0, core_1.makeTheme)(inputTheme, config.theme);
+      const [status, setStatus] = (0, core_1.useState)("idle");
+      const [defaultValue = "", setDefaultValue] = (0, core_1.useState)(config.default);
+      const [errorMsg, setError] = (0, core_1.useState)();
+      const [value, setValue] = (0, core_1.useState)("");
+      const prefix = (0, core_1.usePrefix)({ status, theme });
+      (0, core_1.useKeypress)(async (key, rl) => {
+        if (status !== "idle") {
+          return;
+        }
+        if ((0, core_1.isEnterKey)(key)) {
+          const answer = value || defaultValue;
+          setStatus("loading");
+          const isValid = required && !answer ? "You must provide a value" : await validate2(answer);
+          if (isValid === true) {
+            setValue(answer);
+            setStatus("done");
+            done(answer);
+          } else {
+            if (theme.validationFailureMode === "clear") {
+              setValue("");
+            } else {
+              rl.write(value);
+            }
+            setError(isValid || "You must provide a valid value");
+            setStatus("idle");
+          }
+        } else if ((0, core_1.isBackspaceKey)(key) && !value) {
+          setDefaultValue(void 0);
+        } else if ((0, core_1.isTabKey)(key) && !value) {
+          setDefaultValue(void 0);
+          rl.clearLine(0);
+          rl.write(defaultValue);
+          setValue(defaultValue);
+        } else {
+          setValue(rl.line);
+          setError(void 0);
+        }
+      });
+      (0, core_1.useEffect)((rl) => {
+        if (prefill === "editable" && defaultValue) {
+          rl.write(defaultValue);
+          setValue(defaultValue);
+        }
+      }, []);
+      const message = theme.style.message(config.message, status);
+      let formattedValue = value;
+      if (typeof config.transformer === "function") {
+        formattedValue = config.transformer(value, { isFinal: status === "done" });
+      } else if (status === "done") {
+        formattedValue = theme.style.answer(value);
+      }
+      let defaultStr;
+      if (defaultValue && status !== "done" && !value) {
+        defaultStr = theme.style.defaultAnswer(defaultValue);
+      }
+      let error = "";
+      if (errorMsg) {
+        error = theme.style.error(errorMsg);
+      }
+      return [
+        [prefix, message, defaultStr, formattedValue].filter((v) => v !== void 0).join(" "),
+        error
+      ];
+    });
+  }
+});
+
+// node_modules/.pnpm/ansi-escapes@4.3.2/node_modules/ansi-escapes/index.js
+var require_ansi_escapes = __commonJS({
+  "node_modules/.pnpm/ansi-escapes@4.3.2/node_modules/ansi-escapes/index.js"(exports2, module2) {
+    "use strict";
+    var ansiEscapes = module2.exports;
+    module2.exports.default = ansiEscapes;
+    var ESC = "\x1B[";
+    var OSC = "\x1B]";
+    var BEL = "\x07";
+    var SEP = ";";
+    var isTerminalApp = process.env.TERM_PROGRAM === "Apple_Terminal";
+    ansiEscapes.cursorTo = (x, y) => {
+      if (typeof x !== "number") {
+        throw new TypeError("The `x` argument is required");
+      }
+      if (typeof y !== "number") {
+        return ESC + (x + 1) + "G";
+      }
+      return ESC + (y + 1) + ";" + (x + 1) + "H";
+    };
+    ansiEscapes.cursorMove = (x, y) => {
+      if (typeof x !== "number") {
+        throw new TypeError("The `x` argument is required");
+      }
+      let ret = "";
+      if (x < 0) {
+        ret += ESC + -x + "D";
+      } else if (x > 0) {
+        ret += ESC + x + "C";
+      }
+      if (y < 0) {
+        ret += ESC + -y + "A";
+      } else if (y > 0) {
+        ret += ESC + y + "B";
+      }
+      return ret;
+    };
+    ansiEscapes.cursorUp = (count = 1) => ESC + count + "A";
+    ansiEscapes.cursorDown = (count = 1) => ESC + count + "B";
+    ansiEscapes.cursorForward = (count = 1) => ESC + count + "C";
+    ansiEscapes.cursorBackward = (count = 1) => ESC + count + "D";
+    ansiEscapes.cursorLeft = ESC + "G";
+    ansiEscapes.cursorSavePosition = isTerminalApp ? "\x1B7" : ESC + "s";
+    ansiEscapes.cursorRestorePosition = isTerminalApp ? "\x1B8" : ESC + "u";
+    ansiEscapes.cursorGetPosition = ESC + "6n";
+    ansiEscapes.cursorNextLine = ESC + "E";
+    ansiEscapes.cursorPrevLine = ESC + "F";
+    ansiEscapes.cursorHide = ESC + "?25l";
+    ansiEscapes.cursorShow = ESC + "?25h";
+    ansiEscapes.eraseLines = (count) => {
+      let clear = "";
+      for (let i = 0; i < count; i++) {
+        clear += ansiEscapes.eraseLine + (i < count - 1 ? ansiEscapes.cursorUp() : "");
+      }
+      if (count) {
+        clear += ansiEscapes.cursorLeft;
+      }
+      return clear;
+    };
+    ansiEscapes.eraseEndLine = ESC + "K";
+    ansiEscapes.eraseStartLine = ESC + "1K";
+    ansiEscapes.eraseLine = ESC + "2K";
+    ansiEscapes.eraseDown = ESC + "J";
+    ansiEscapes.eraseUp = ESC + "1J";
+    ansiEscapes.eraseScreen = ESC + "2J";
+    ansiEscapes.scrollUp = ESC + "S";
+    ansiEscapes.scrollDown = ESC + "T";
+    ansiEscapes.clearScreen = "\x1Bc";
+    ansiEscapes.clearTerminal = process.platform === "win32" ? `${ansiEscapes.eraseScreen}${ESC}0f` : (
+      // 1. Erases the screen (Only done in case `2` is not supported)
+      // 2. Erases the whole screen including scrollback buffer
+      // 3. Moves cursor to the top-left position
+      // More info: https://www.real-world-systems.com/docs/ANSIcode.html
+      `${ansiEscapes.eraseScreen}${ESC}3J${ESC}H`
+    );
+    ansiEscapes.beep = BEL;
+    ansiEscapes.link = (text, url) => {
+      return [
+        OSC,
+        "8",
+        SEP,
+        SEP,
+        url,
+        BEL,
+        text,
+        OSC,
+        "8",
+        SEP,
+        SEP,
+        BEL
+      ].join("");
+    };
+    ansiEscapes.image = (buffer, options = {}) => {
+      let ret = `${OSC}1337;File=inline=1`;
+      if (options.width) {
+        ret += `;width=${options.width}`;
+      }
+      if (options.height) {
+        ret += `;height=${options.height}`;
+      }
+      if (options.preserveAspectRatio === false) {
+        ret += ";preserveAspectRatio=0";
+      }
+      return ret + ":" + buffer.toString("base64") + BEL;
+    };
+    ansiEscapes.iTerm = {
+      setCwd: /* @__PURE__ */ __name((cwd = process.cwd()) => `${OSC}50;CurrentDir=${cwd}${BEL}`, "setCwd"),
+      annotation: /* @__PURE__ */ __name((message, options = {}) => {
+        let ret = `${OSC}1337;`;
+        const hasX = typeof options.x !== "undefined";
+        const hasY = typeof options.y !== "undefined";
+        if ((hasX || hasY) && !(hasX && hasY && typeof options.length !== "undefined")) {
+          throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");
+        }
+        message = message.replace(/\|/g, "");
+        ret += options.isHidden ? "AddHiddenAnnotation=" : "AddAnnotation=";
+        if (options.length > 0) {
+          ret += (hasX ? [message, options.length, options.x, options.y] : [options.length, message]).join("|");
+        } else {
+          ret += message;
+        }
+        return ret + BEL;
+      }, "annotation")
+    };
+  }
+});
+
+// node_modules/.pnpm/@inquirer+password@4.0.18_@types+node@24.9.2/node_modules/@inquirer/password/dist/commonjs/index.js
+var require_commonjs7 = __commonJS({
+  "node_modules/.pnpm/@inquirer+password@4.0.18_@types+node@24.9.2/node_modules/@inquirer/password/dist/commonjs/index.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var core_1 = require_commonjs3();
+    var ansi_escapes_1 = __importDefault(require_ansi_escapes());
+    exports2.default = (0, core_1.createPrompt)((config, done) => {
+      const { validate: validate2 = /* @__PURE__ */ __name(() => true, "validate") } = config;
+      const theme = (0, core_1.makeTheme)(config.theme);
+      const [status, setStatus] = (0, core_1.useState)("idle");
+      const [errorMsg, setError] = (0, core_1.useState)();
+      const [value, setValue] = (0, core_1.useState)("");
+      const prefix = (0, core_1.usePrefix)({ status, theme });
+      (0, core_1.useKeypress)(async (key, rl) => {
+        if (status !== "idle") {
+          return;
+        }
+        if ((0, core_1.isEnterKey)(key)) {
+          const answer = value;
+          setStatus("loading");
+          const isValid = await validate2(answer);
+          if (isValid === true) {
+            setValue(answer);
+            setStatus("done");
+            done(answer);
+          } else {
+            rl.write(value);
+            setError(isValid || "You must provide a valid value");
+            setStatus("idle");
+          }
+        } else {
+          setValue(rl.line);
+          setError(void 0);
+        }
+      });
+      const message = theme.style.message(config.message, status);
+      let formattedValue = "";
+      let helpTip;
+      if (config.mask) {
+        const maskChar = typeof config.mask === "string" ? config.mask : "*";
+        formattedValue = maskChar.repeat(value.length);
+      } else if (status !== "done") {
+        helpTip = `${theme.style.help("[input is masked]")}${ansi_escapes_1.default.cursorHide}`;
+      }
+      if (status === "done") {
+        formattedValue = theme.style.answer(formattedValue);
+      }
+      let error = "";
+      if (errorMsg) {
+        error = theme.style.error(errorMsg);
+      }
+      return [[prefix, message, config.mask ? formattedValue : helpTip].join(" "), error];
+    });
+  }
+});
+
+// node_modules/.pnpm/@inquirer+search@3.1.1_@types+node@24.9.2/node_modules/@inquirer/search/dist/commonjs/index.js
+var require_commonjs8 = __commonJS({
+  "node_modules/.pnpm/@inquirer+search@3.1.1_@types+node@24.9.2/node_modules/@inquirer/search/dist/commonjs/index.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Separator = void 0;
+    var core_1 = require_commonjs3();
+    var yoctocolors_cjs_1 = __importDefault(require_yoctocolors_cjs());
+    var figures_1 = __importDefault(require_commonjs());
+    var searchTheme = {
+      icon: { cursor: figures_1.default.pointer },
+      style: {
+        disabled: /* @__PURE__ */ __name((text) => yoctocolors_cjs_1.default.dim(`- ${text}`), "disabled"),
+        searchTerm: /* @__PURE__ */ __name((text) => yoctocolors_cjs_1.default.cyan(text), "searchTerm"),
+        description: /* @__PURE__ */ __name((text) => yoctocolors_cjs_1.default.cyan(text), "description")
+      },
+      helpMode: "auto"
+    };
+    function isSelectable(item) {
+      return !core_1.Separator.isSeparator(item) && !item.disabled;
+    }
+    __name(isSelectable, "isSelectable");
+    function normalizeChoices(choices) {
+      return choices.map((choice) => {
+        if (core_1.Separator.isSeparator(choice))
+          return choice;
+        if (typeof choice === "string") {
+          return {
+            value: choice,
+            name: choice,
+            short: choice,
+            disabled: false
+          };
+        }
+        const name = choice.name ?? String(choice.value);
+        const normalizedChoice = {
+          value: choice.value,
+          name,
+          short: choice.short ?? name,
+          disabled: choice.disabled ?? false
+        };
+        if (choice.description) {
+          normalizedChoice.description = choice.description;
+        }
+        return normalizedChoice;
+      });
+    }
+    __name(normalizeChoices, "normalizeChoices");
+    exports2.default = (0, core_1.createPrompt)((config, done) => {
+      const { pageSize = 7, validate: validate2 = /* @__PURE__ */ __name(() => true, "validate") } = config;
+      const theme = (0, core_1.makeTheme)(searchTheme, config.theme);
+      const firstRender = (0, core_1.useRef)(true);
+      const [status, setStatus] = (0, core_1.useState)("loading");
+      const [searchTerm, setSearchTerm] = (0, core_1.useState)("");
+      const [searchResults, setSearchResults] = (0, core_1.useState)([]);
+      const [searchError, setSearchError] = (0, core_1.useState)();
+      const prefix = (0, core_1.usePrefix)({ status, theme });
+      const bounds = (0, core_1.useMemo)(() => {
+        const first = searchResults.findIndex(isSelectable);
+        const last = searchResults.findLastIndex(isSelectable);
+        return { first, last };
+      }, [searchResults]);
+      const [active = bounds.first, setActive] = (0, core_1.useState)();
+      (0, core_1.useEffect)(() => {
+        const controller = new AbortController();
+        setStatus("loading");
+        setSearchError(void 0);
+        const fetchResults = /* @__PURE__ */ __name(async () => {
+          try {
+            const results = await config.source(searchTerm || void 0, {
+              signal: controller.signal
+            });
+            if (!controller.signal.aborted) {
+              setActive(void 0);
+              setSearchError(void 0);
+              setSearchResults(normalizeChoices(results));
+              setStatus("idle");
+            }
+          } catch (error2) {
+            if (!controller.signal.aborted && error2 instanceof Error) {
+              setSearchError(error2.message);
+            }
+          }
+        }, "fetchResults");
+        void fetchResults();
+        return () => {
+          controller.abort();
+        };
+      }, [searchTerm]);
+      const selectedChoice = searchResults[active];
+      (0, core_1.useKeypress)(async (key, rl) => {
+        if ((0, core_1.isEnterKey)(key)) {
+          if (selectedChoice) {
+            setStatus("loading");
+            const isValid = await validate2(selectedChoice.value);
+            setStatus("idle");
+            if (isValid === true) {
+              setStatus("done");
+              done(selectedChoice.value);
+            } else if (selectedChoice.name === searchTerm) {
+              setSearchError(isValid || "You must provide a valid value");
+            } else {
+              rl.write(selectedChoice.name);
+              setSearchTerm(selectedChoice.name);
+            }
+          } else {
+            rl.write(searchTerm);
+          }
+        } else if ((0, core_1.isTabKey)(key) && selectedChoice) {
+          rl.clearLine(0);
+          rl.write(selectedChoice.name);
+          setSearchTerm(selectedChoice.name);
+        } else if (status !== "loading" && ((0, core_1.isUpKey)(key) || (0, core_1.isDownKey)(key))) {
+          rl.clearLine(0);
+          if ((0, core_1.isUpKey)(key) && active !== bounds.first || (0, core_1.isDownKey)(key) && active !== bounds.last) {
+            const offset = (0, core_1.isUpKey)(key) ? -1 : 1;
+            let next = active;
+            do {
+              next = (next + offset + searchResults.length) % searchResults.length;
+            } while (!isSelectable(searchResults[next]));
+            setActive(next);
+          }
+        } else {
+          setSearchTerm(rl.line);
+        }
+      });
+      const message = theme.style.message(config.message, status);
+      if (active > 0) {
+        firstRender.current = false;
+      }
+      let helpTip = "";
+      if (searchResults.length > 1 && (theme.helpMode === "always" || theme.helpMode === "auto" && firstRender.current)) {
+        helpTip = searchResults.length > pageSize ? `
+${theme.style.help(`(${config.instructions?.pager ?? "Use arrow keys to reveal more choices"})`)}` : `
+${theme.style.help(`(${config.instructions?.navigation ?? "Use arrow keys"})`)}`;
+      }
+      const page = (0, core_1.usePagination)({
+        items: searchResults,
+        active,
+        renderItem({ item, isActive }) {
+          if (core_1.Separator.isSeparator(item)) {
+            return ` ${item.separator}`;
+          }
+          if (item.disabled) {
+            const disabledLabel = typeof item.disabled === "string" ? item.disabled : "(disabled)";
+            return theme.style.disabled(`${item.name} ${disabledLabel}`);
+          }
+          const color = isActive ? theme.style.highlight : (x) => x;
+          const cursor = isActive ? theme.icon.cursor : ` `;
+          return color(`${cursor} ${item.name}`);
+        },
+        pageSize,
+        loop: false
+      });
+      let error;
+      if (searchError) {
+        error = theme.style.error(searchError);
+      } else if (searchResults.length === 0 && searchTerm !== "" && status === "idle") {
+        error = theme.style.error("No results found");
+      }
+      let searchStr;
+      if (status === "done" && selectedChoice) {
+        const answer = selectedChoice.short;
+        return `${prefix} ${message} ${theme.style.answer(answer)}`;
+      } else {
+        searchStr = theme.style.searchTerm(searchTerm);
+      }
+      const choiceDescription = selectedChoice?.description ? `
+${theme.style.description(selectedChoice.description)}` : ``;
+      return [
+        [prefix, message, searchStr].filter(Boolean).join(" "),
+        `${error ?? page}${helpTip}${choiceDescription}`
+      ];
+    });
+    var core_2 = require_commonjs3();
+    Object.defineProperty(exports2, "Separator", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return core_2.Separator;
+    }, "get") });
+  }
+});
+
+// node_modules/.pnpm/@inquirer+select@4.3.2_@types+node@24.9.2/node_modules/@inquirer/select/dist/commonjs/index.js
+var require_commonjs9 = __commonJS({
+  "node_modules/.pnpm/@inquirer+select@4.3.2_@types+node@24.9.2/node_modules/@inquirer/select/dist/commonjs/index.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Separator = void 0;
+    var core_1 = require_commonjs3();
+    var yoctocolors_cjs_1 = __importDefault(require_yoctocolors_cjs());
+    var figures_1 = __importDefault(require_commonjs());
+    var ansi_escapes_1 = __importDefault(require_ansi_escapes());
+    var selectTheme = {
+      icon: { cursor: figures_1.default.pointer },
+      style: {
+        disabled: /* @__PURE__ */ __name((text) => yoctocolors_cjs_1.default.dim(`- ${text}`), "disabled"),
+        description: /* @__PURE__ */ __name((text) => yoctocolors_cjs_1.default.cyan(text), "description")
+      },
+      helpMode: "auto",
+      indexMode: "hidden"
+    };
+    function isSelectable(item) {
+      return !core_1.Separator.isSeparator(item) && !item.disabled;
+    }
+    __name(isSelectable, "isSelectable");
+    function normalizeChoices(choices) {
+      return choices.map((choice) => {
+        if (core_1.Separator.isSeparator(choice))
+          return choice;
+        if (typeof choice === "string") {
+          return {
+            value: choice,
+            name: choice,
+            short: choice,
+            disabled: false
+          };
+        }
+        const name = choice.name ?? String(choice.value);
+        const normalizedChoice = {
+          value: choice.value,
+          name,
+          short: choice.short ?? name,
+          disabled: choice.disabled ?? false
+        };
+        if (choice.description) {
+          normalizedChoice.description = choice.description;
+        }
+        return normalizedChoice;
+      });
+    }
+    __name(normalizeChoices, "normalizeChoices");
+    exports2.default = (0, core_1.createPrompt)((config, done) => {
+      const { loop = true, pageSize = 7 } = config;
+      const firstRender = (0, core_1.useRef)(true);
+      const theme = (0, core_1.makeTheme)(selectTheme, config.theme);
+      const [status, setStatus] = (0, core_1.useState)("idle");
+      const prefix = (0, core_1.usePrefix)({ status, theme });
+      const searchTimeoutRef = (0, core_1.useRef)();
+      const items = (0, core_1.useMemo)(() => normalizeChoices(config.choices), [config.choices]);
+      const bounds = (0, core_1.useMemo)(() => {
+        const first = items.findIndex(isSelectable);
+        const last = items.findLastIndex(isSelectable);
+        if (first === -1) {
+          throw new core_1.ValidationError("[select prompt] No selectable choices. All choices are disabled.");
+        }
+        return { first, last };
+      }, [items]);
+      const defaultItemIndex = (0, core_1.useMemo)(() => {
+        if (!("default" in config))
+          return -1;
+        return items.findIndex((item) => isSelectable(item) && item.value === config.default);
+      }, [config.default, items]);
+      const [active, setActive] = (0, core_1.useState)(defaultItemIndex === -1 ? bounds.first : defaultItemIndex);
+      const selectedChoice = items[active];
+      (0, core_1.useKeypress)((key, rl) => {
+        clearTimeout(searchTimeoutRef.current);
+        if ((0, core_1.isEnterKey)(key)) {
+          setStatus("done");
+          done(selectedChoice.value);
+        } else if ((0, core_1.isUpKey)(key) || (0, core_1.isDownKey)(key)) {
+          rl.clearLine(0);
+          if (loop || (0, core_1.isUpKey)(key) && active !== bounds.first || (0, core_1.isDownKey)(key) && active !== bounds.last) {
+            const offset = (0, core_1.isUpKey)(key) ? -1 : 1;
+            let next = active;
+            do {
+              next = (next + offset + items.length) % items.length;
+            } while (!isSelectable(items[next]));
+            setActive(next);
+          }
+        } else if ((0, core_1.isNumberKey)(key) && !Number.isNaN(Number(rl.line))) {
+          const selectedIndex = Number(rl.line) - 1;
+          let selectableIndex = -1;
+          const position = items.findIndex((item2) => {
+            if (core_1.Separator.isSeparator(item2))
+              return false;
+            selectableIndex++;
+            return selectableIndex === selectedIndex;
+          });
+          const item = items[position];
+          if (item != null && isSelectable(item)) {
+            setActive(position);
+          }
+          searchTimeoutRef.current = setTimeout(() => {
+            rl.clearLine(0);
+          }, 700);
+        } else if ((0, core_1.isBackspaceKey)(key)) {
+          rl.clearLine(0);
+        } else {
+          const searchTerm = rl.line.toLowerCase();
+          const matchIndex = items.findIndex((item) => {
+            if (core_1.Separator.isSeparator(item) || !isSelectable(item))
+              return false;
+            return item.name.toLowerCase().startsWith(searchTerm);
+          });
+          if (matchIndex !== -1) {
+            setActive(matchIndex);
+          }
+          searchTimeoutRef.current = setTimeout(() => {
+            rl.clearLine(0);
+          }, 700);
+        }
+      });
+      (0, core_1.useEffect)(() => () => {
+        clearTimeout(searchTimeoutRef.current);
+      }, []);
+      const message = theme.style.message(config.message, status);
+      let helpTipTop = "";
+      let helpTipBottom = "";
+      if (theme.helpMode === "always" || theme.helpMode === "auto" && firstRender.current) {
+        firstRender.current = false;
+        if (items.length > pageSize) {
+          helpTipBottom = `
+${theme.style.help(`(${config.instructions?.pager ?? "Use arrow keys to reveal more choices"})`)}`;
+        } else {
+          helpTipTop = theme.style.help(`(${config.instructions?.navigation ?? "Use arrow keys"})`);
+        }
+      }
+      let separatorCount = 0;
+      const page = (0, core_1.usePagination)({
+        items,
+        active,
+        renderItem({ item, isActive, index }) {
+          if (core_1.Separator.isSeparator(item)) {
+            separatorCount++;
+            return ` ${item.separator}`;
+          }
+          const indexLabel = theme.indexMode === "number" ? `${index + 1 - separatorCount}. ` : "";
+          if (item.disabled) {
+            const disabledLabel = typeof item.disabled === "string" ? item.disabled : "(disabled)";
+            return theme.style.disabled(`${indexLabel}${item.name} ${disabledLabel}`);
+          }
+          const color = isActive ? theme.style.highlight : (x) => x;
+          const cursor = isActive ? theme.icon.cursor : ` `;
+          return color(`${cursor} ${indexLabel}${item.name}`);
+        },
+        pageSize,
+        loop
+      });
+      if (status === "done") {
+        return `${prefix} ${message} ${theme.style.answer(selectedChoice.short)}`;
+      }
+      const choiceDescription = selectedChoice.description ? `
+${theme.style.description(selectedChoice.description)}` : ``;
+      return `${[prefix, message, helpTipTop].filter(Boolean).join(" ")}
+${page}${helpTipBottom}${choiceDescription}${ansi_escapes_1.default.cursorHide}`;
+    });
+    var core_2 = require_commonjs3();
+    Object.defineProperty(exports2, "Separator", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return core_2.Separator;
+    }, "get") });
+  }
+});
+
+// src/external/external-pack.js
+var signalExit = require_cjs();
+var supportsColor2 = (init_supports_color(), __toCommonJS(supports_color_exports));
+var hasFlag3 = (init_has_flag(), __toCommonJS(has_flag_exports));
+var yoctocolorsCjs = require_yoctocolors_cjs();
+var checkbox = require_commonjs4();
+var confirm = require_commonjs5();
+var input = require_commonjs6();
+var password = require_commonjs7();
+var search = require_commonjs8();
+var select = require_commonjs9();
+module.exports = {
+  checkbox,
+  confirm,
+  hasFlag: hasFlag3,
+  input,
+  password,
+  search,
+  select,
+  signalExit,
+  supportsColor: supportsColor2,
+  yoctocolorsCjs
+};
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/fast-glob.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/fast-glob.js
new file mode 100644
index 00000000..dab4f6b3
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/fast-glob.js
@@ -0,0 +1,6 @@
+'use strict'
+
+// Re-export from pico-pack bundle.
+const { glob } = require('./pico-pack.js')
+
+module.exports = glob
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/fast-sort.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/fast-sort.js
new file mode 100644
index 00000000..7674c7ab
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/fast-sort.js
@@ -0,0 +1,145 @@
+"use strict";
+/**
+ * Bundled from fast-sort
+ * This is a zero-dependency bundle created by esbuild.
+ */
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+var __commonJS = (cb, mod) => function __require() {
+  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+
+// node_modules/.pnpm/fast-sort@3.4.1/node_modules/fast-sort/dist/sort.cjs.js
+var require_sort_cjs = __commonJS({
+  "node_modules/.pnpm/fast-sort@3.4.1/node_modules/fast-sort/dist/sort.cjs.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var castComparer = /* @__PURE__ */ __name(function(comparer) {
+      return function(a, b, order) {
+        return comparer(a, b, order) * order;
+      };
+    }, "castComparer");
+    var throwInvalidConfigErrorIfTrue = /* @__PURE__ */ __name(function(condition, context) {
+      if (condition)
+        throw Error("Invalid sort config: " + context);
+    }, "throwInvalidConfigErrorIfTrue");
+    var unpackObjectSorter = /* @__PURE__ */ __name(function(sortByObj) {
+      var _a = sortByObj || {}, asc = _a.asc, desc = _a.desc;
+      var order = asc ? 1 : -1;
+      var sortBy = asc || desc;
+      throwInvalidConfigErrorIfTrue(!sortBy, "Expected `asc` or `desc` property");
+      throwInvalidConfigErrorIfTrue(asc && desc, "Ambiguous object with `asc` and `desc` config properties");
+      var comparer = sortByObj.comparer && castComparer(sortByObj.comparer);
+      return { order, sortBy, comparer };
+    }, "unpackObjectSorter");
+    var multiPropertySorterProvider = /* @__PURE__ */ __name(function(defaultComparer2) {
+      return /* @__PURE__ */ __name(function multiPropertySorter(sortBy, sortByArr, depth, order, comparer, a, b) {
+        var valA;
+        var valB;
+        if (typeof sortBy === "string") {
+          valA = a[sortBy];
+          valB = b[sortBy];
+        } else if (typeof sortBy === "function") {
+          valA = sortBy(a);
+          valB = sortBy(b);
+        } else {
+          var objectSorterConfig = unpackObjectSorter(sortBy);
+          return multiPropertySorter(objectSorterConfig.sortBy, sortByArr, depth, objectSorterConfig.order, objectSorterConfig.comparer || defaultComparer2, a, b);
+        }
+        var equality = comparer(valA, valB, order);
+        if ((equality === 0 || valA == null && valB == null) && sortByArr.length > depth) {
+          return multiPropertySorter(sortByArr[depth], sortByArr, depth + 1, order, comparer, a, b);
+        }
+        return equality;
+      }, "multiPropertySorter");
+    }, "multiPropertySorterProvider");
+    function getSortStrategy(sortBy, comparer, order) {
+      if (sortBy === void 0 || sortBy === true) {
+        return function(a, b) {
+          return comparer(a, b, order);
+        };
+      }
+      if (typeof sortBy === "string") {
+        throwInvalidConfigErrorIfTrue(sortBy.includes("."), "String syntax not allowed for nested properties.");
+        return function(a, b) {
+          return comparer(a[sortBy], b[sortBy], order);
+        };
+      }
+      if (typeof sortBy === "function") {
+        return function(a, b) {
+          return comparer(sortBy(a), sortBy(b), order);
+        };
+      }
+      if (Array.isArray(sortBy)) {
+        var multiPropSorter_1 = multiPropertySorterProvider(comparer);
+        return function(a, b) {
+          return multiPropSorter_1(sortBy[0], sortBy, 1, order, comparer, a, b);
+        };
+      }
+      var objectSorterConfig = unpackObjectSorter(sortBy);
+      return getSortStrategy(objectSorterConfig.sortBy, objectSorterConfig.comparer || comparer, objectSorterConfig.order);
+    }
+    __name(getSortStrategy, "getSortStrategy");
+    var sortArray = /* @__PURE__ */ __name(function(order, ctx, sortBy, comparer) {
+      var _a;
+      if (!Array.isArray(ctx)) {
+        return ctx;
+      }
+      if (Array.isArray(sortBy) && sortBy.length < 2) {
+        _a = sortBy, sortBy = _a[0];
+      }
+      return ctx.sort(getSortStrategy(sortBy, comparer, order));
+    }, "sortArray");
+    function createNewSortInstance2(opts) {
+      var comparer = castComparer(opts.comparer);
+      return function(arrayToSort) {
+        var ctx = Array.isArray(arrayToSort) && !opts.inPlaceSorting ? arrayToSort.slice() : arrayToSort;
+        return {
+          asc: /* @__PURE__ */ __name(function(sortBy) {
+            return sortArray(1, ctx, sortBy, comparer);
+          }, "asc"),
+          desc: /* @__PURE__ */ __name(function(sortBy) {
+            return sortArray(-1, ctx, sortBy, comparer);
+          }, "desc"),
+          by: /* @__PURE__ */ __name(function(sortBy) {
+            return sortArray(1, ctx, sortBy, comparer);
+          }, "by")
+        };
+      };
+    }
+    __name(createNewSortInstance2, "createNewSortInstance");
+    var defaultComparer = /* @__PURE__ */ __name(function(a, b, order) {
+      if (a == null)
+        return order;
+      if (b == null)
+        return -order;
+      if (typeof a !== typeof b) {
+        return typeof a < typeof b ? -1 : 1;
+      }
+      if (a < b)
+        return -1;
+      if (a > b)
+        return 1;
+      return 0;
+    }, "defaultComparer");
+    var sort = createNewSortInstance2({
+      comparer: defaultComparer
+    });
+    var inPlaceSort = createNewSortInstance2({
+      comparer: defaultComparer,
+      inPlaceSorting: true
+    });
+    exports2.createNewSortInstance = createNewSortInstance2;
+    exports2.defaultComparer = defaultComparer;
+    exports2.inPlaceSort = inPlaceSort;
+    exports2.sort = sort;
+  }
+});
+
+// src/external/fast-sort.js
+var { createNewSortInstance } = require_sort_cjs();
+module.exports = {
+  createNewSortInstance
+};
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/get-east-asian-width.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/get-east-asian-width.js
new file mode 100644
index 00000000..4d76855c
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/get-east-asian-width.js
@@ -0,0 +1,95 @@
+"use strict";
+/**
+ * Bundled from get-east-asian-width
+ * This is a zero-dependency bundle created by esbuild.
+ */
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+var __esm = (fn, res) => function __init() {
+  return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
+};
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// node_modules/.pnpm/get-east-asian-width@1.3.0/node_modules/get-east-asian-width/lookup.js
+function isAmbiguous(x) {
+  return x === 161 || x === 164 || x === 167 || x === 168 || x === 170 || x === 173 || x === 174 || x >= 176 && x <= 180 || x >= 182 && x <= 186 || x >= 188 && x <= 191 || x === 198 || x === 208 || x === 215 || x === 216 || x >= 222 && x <= 225 || x === 230 || x >= 232 && x <= 234 || x === 236 || x === 237 || x === 240 || x === 242 || x === 243 || x >= 247 && x <= 250 || x === 252 || x === 254 || x === 257 || x === 273 || x === 275 || x === 283 || x === 294 || x === 295 || x === 299 || x >= 305 && x <= 307 || x === 312 || x >= 319 && x <= 322 || x === 324 || x >= 328 && x <= 331 || x === 333 || x === 338 || x === 339 || x === 358 || x === 359 || x === 363 || x === 462 || x === 464 || x === 466 || x === 468 || x === 470 || x === 472 || x === 474 || x === 476 || x === 593 || x === 609 || x === 708 || x === 711 || x >= 713 && x <= 715 || x === 717 || x === 720 || x >= 728 && x <= 731 || x === 733 || x === 735 || x >= 768 && x <= 879 || x >= 913 && x <= 929 || x >= 931 && x <= 937 || x >= 945 && x <= 961 || x >= 963 && x <= 969 || x === 1025 || x >= 1040 && x <= 1103 || x === 1105 || x === 8208 || x >= 8211 && x <= 8214 || x === 8216 || x === 8217 || x === 8220 || x === 8221 || x >= 8224 && x <= 8226 || x >= 8228 && x <= 8231 || x === 8240 || x === 8242 || x === 8243 || x === 8245 || x === 8251 || x === 8254 || x === 8308 || x === 8319 || x >= 8321 && x <= 8324 || x === 8364 || x === 8451 || x === 8453 || x === 8457 || x === 8467 || x === 8470 || x === 8481 || x === 8482 || x === 8486 || x === 8491 || x === 8531 || x === 8532 || x >= 8539 && x <= 8542 || x >= 8544 && x <= 8555 || x >= 8560 && x <= 8569 || x === 8585 || x >= 8592 && x <= 8601 || x === 8632 || x === 8633 || x === 8658 || x === 8660 || x === 8679 || x === 8704 || x === 8706 || x === 8707 || x === 8711 || x === 8712 || x === 8715 || x === 8719 || x === 8721 || x === 8725 || x === 8730 || x >= 8733 && x <= 8736 || x === 8739 || x === 8741 || x >= 8743 && x <= 8748 || x === 8750 || x >= 8756 && x <= 8759 || x === 8764 || x === 8765 || x === 8776 || x === 8780 || x === 8786 || x === 8800 || x === 8801 || x >= 8804 && x <= 8807 || x === 8810 || x === 8811 || x === 8814 || x === 8815 || x === 8834 || x === 8835 || x === 8838 || x === 8839 || x === 8853 || x === 8857 || x === 8869 || x === 8895 || x === 8978 || x >= 9312 && x <= 9449 || x >= 9451 && x <= 9547 || x >= 9552 && x <= 9587 || x >= 9600 && x <= 9615 || x >= 9618 && x <= 9621 || x === 9632 || x === 9633 || x >= 9635 && x <= 9641 || x === 9650 || x === 9651 || x === 9654 || x === 9655 || x === 9660 || x === 9661 || x === 9664 || x === 9665 || x >= 9670 && x <= 9672 || x === 9675 || x >= 9678 && x <= 9681 || x >= 9698 && x <= 9701 || x === 9711 || x === 9733 || x === 9734 || x === 9737 || x === 9742 || x === 9743 || x === 9756 || x === 9758 || x === 9792 || x === 9794 || x === 9824 || x === 9825 || x >= 9827 && x <= 9829 || x >= 9831 && x <= 9834 || x === 9836 || x === 9837 || x === 9839 || x === 9886 || x === 9887 || x === 9919 || x >= 9926 && x <= 9933 || x >= 9935 && x <= 9939 || x >= 9941 && x <= 9953 || x === 9955 || x === 9960 || x === 9961 || x >= 9963 && x <= 9969 || x === 9972 || x >= 9974 && x <= 9977 || x === 9979 || x === 9980 || x === 9982 || x === 9983 || x === 10045 || x >= 10102 && x <= 10111 || x >= 11094 && x <= 11097 || x >= 12872 && x <= 12879 || x >= 57344 && x <= 63743 || x >= 65024 && x <= 65039 || x === 65533 || x >= 127232 && x <= 127242 || x >= 127248 && x <= 127277 || x >= 127280 && x <= 127337 || x >= 127344 && x <= 127373 || x === 127375 || x === 127376 || x >= 127387 && x <= 127404 || x >= 917760 && x <= 917999 || x >= 983040 && x <= 1048573 || x >= 1048576 && x <= 1114109;
+}
+function isFullWidth(x) {
+  return x === 12288 || x >= 65281 && x <= 65376 || x >= 65504 && x <= 65510;
+}
+function isWide(x) {
+  return x >= 4352 && x <= 4447 || x === 8986 || x === 8987 || x === 9001 || x === 9002 || x >= 9193 && x <= 9196 || x === 9200 || x === 9203 || x === 9725 || x === 9726 || x === 9748 || x === 9749 || x >= 9776 && x <= 9783 || x >= 9800 && x <= 9811 || x === 9855 || x >= 9866 && x <= 9871 || x === 9875 || x === 9889 || x === 9898 || x === 9899 || x === 9917 || x === 9918 || x === 9924 || x === 9925 || x === 9934 || x === 9940 || x === 9962 || x === 9970 || x === 9971 || x === 9973 || x === 9978 || x === 9981 || x === 9989 || x === 9994 || x === 9995 || x === 10024 || x === 10060 || x === 10062 || x >= 10067 && x <= 10069 || x === 10071 || x >= 10133 && x <= 10135 || x === 10160 || x === 10175 || x === 11035 || x === 11036 || x === 11088 || x === 11093 || x >= 11904 && x <= 11929 || x >= 11931 && x <= 12019 || x >= 12032 && x <= 12245 || x >= 12272 && x <= 12287 || x >= 12289 && x <= 12350 || x >= 12353 && x <= 12438 || x >= 12441 && x <= 12543 || x >= 12549 && x <= 12591 || x >= 12593 && x <= 12686 || x >= 12688 && x <= 12773 || x >= 12783 && x <= 12830 || x >= 12832 && x <= 12871 || x >= 12880 && x <= 42124 || x >= 42128 && x <= 42182 || x >= 43360 && x <= 43388 || x >= 44032 && x <= 55203 || x >= 63744 && x <= 64255 || x >= 65040 && x <= 65049 || x >= 65072 && x <= 65106 || x >= 65108 && x <= 65126 || x >= 65128 && x <= 65131 || x >= 94176 && x <= 94180 || x === 94192 || x === 94193 || x >= 94208 && x <= 100343 || x >= 100352 && x <= 101589 || x >= 101631 && x <= 101640 || x >= 110576 && x <= 110579 || x >= 110581 && x <= 110587 || x === 110589 || x === 110590 || x >= 110592 && x <= 110882 || x === 110898 || x >= 110928 && x <= 110930 || x === 110933 || x >= 110948 && x <= 110951 || x >= 110960 && x <= 111355 || x >= 119552 && x <= 119638 || x >= 119648 && x <= 119670 || x === 126980 || x === 127183 || x === 127374 || x >= 127377 && x <= 127386 || x >= 127488 && x <= 127490 || x >= 127504 && x <= 127547 || x >= 127552 && x <= 127560 || x === 127568 || x === 127569 || x >= 127584 && x <= 127589 || x >= 127744 && x <= 127776 || x >= 127789 && x <= 127797 || x >= 127799 && x <= 127868 || x >= 127870 && x <= 127891 || x >= 127904 && x <= 127946 || x >= 127951 && x <= 127955 || x >= 127968 && x <= 127984 || x === 127988 || x >= 127992 && x <= 128062 || x === 128064 || x >= 128066 && x <= 128252 || x >= 128255 && x <= 128317 || x >= 128331 && x <= 128334 || x >= 128336 && x <= 128359 || x === 128378 || x === 128405 || x === 128406 || x === 128420 || x >= 128507 && x <= 128591 || x >= 128640 && x <= 128709 || x === 128716 || x >= 128720 && x <= 128722 || x >= 128725 && x <= 128727 || x >= 128732 && x <= 128735 || x === 128747 || x === 128748 || x >= 128756 && x <= 128764 || x >= 128992 && x <= 129003 || x === 129008 || x >= 129292 && x <= 129338 || x >= 129340 && x <= 129349 || x >= 129351 && x <= 129535 || x >= 129648 && x <= 129660 || x >= 129664 && x <= 129673 || x >= 129679 && x <= 129734 || x >= 129742 && x <= 129756 || x >= 129759 && x <= 129769 || x >= 129776 && x <= 129784 || x >= 131072 && x <= 196605 || x >= 196608 && x <= 262141;
+}
+function getCategory(x) {
+  if (isAmbiguous(x)) return "ambiguous";
+  if (isFullWidth(x)) return "fullwidth";
+  if (x === 8361 || x >= 65377 && x <= 65470 || x >= 65474 && x <= 65479 || x >= 65482 && x <= 65487 || x >= 65490 && x <= 65495 || x >= 65498 && x <= 65500 || x >= 65512 && x <= 65518) {
+    return "halfwidth";
+  }
+  if (x >= 32 && x <= 126 || x === 162 || x === 163 || x === 165 || x === 166 || x === 172 || x === 175 || x >= 10214 && x <= 10221 || x === 10629 || x === 10630) {
+    return "narrow";
+  }
+  if (isWide(x)) return "wide";
+  return "neutral";
+}
+var init_lookup = __esm({
+  "node_modules/.pnpm/get-east-asian-width@1.3.0/node_modules/get-east-asian-width/lookup.js"() {
+    __name(isAmbiguous, "isAmbiguous");
+    __name(isFullWidth, "isFullWidth");
+    __name(isWide, "isWide");
+    __name(getCategory, "getCategory");
+  }
+});
+
+// node_modules/.pnpm/get-east-asian-width@1.3.0/node_modules/get-east-asian-width/index.js
+var get_east_asian_width_exports = {};
+__export(get_east_asian_width_exports, {
+  _isNarrowWidth: () => _isNarrowWidth,
+  eastAsianWidth: () => eastAsianWidth,
+  eastAsianWidthType: () => eastAsianWidthType
+});
+function validate(codePoint) {
+  if (!Number.isSafeInteger(codePoint)) {
+    throw new TypeError(`Expected a code point, got \`${typeof codePoint}\`.`);
+  }
+}
+function eastAsianWidthType(codePoint) {
+  validate(codePoint);
+  return getCategory(codePoint);
+}
+function eastAsianWidth(codePoint, { ambiguousAsWide = false } = {}) {
+  validate(codePoint);
+  if (isFullWidth(codePoint) || isWide(codePoint) || ambiguousAsWide && isAmbiguous(codePoint)) {
+    return 2;
+  }
+  return 1;
+}
+var _isNarrowWidth;
+var init_get_east_asian_width = __esm({
+  "node_modules/.pnpm/get-east-asian-width@1.3.0/node_modules/get-east-asian-width/index.js"() {
+    init_lookup();
+    __name(validate, "validate");
+    __name(eastAsianWidthType, "eastAsianWidthType");
+    __name(eastAsianWidth, "eastAsianWidth");
+    _isNarrowWidth = /* @__PURE__ */ __name((codePoint) => !(isFullWidth(codePoint) || isWide(codePoint)), "_isNarrowWidth");
+  }
+});
+
+// src/external/get-east-asian-width.js
+module.exports = (init_get_east_asian_width(), __toCommonJS(get_east_asian_width_exports));
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/has-flag.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/has-flag.js
new file mode 100644
index 00000000..ca290b89
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/has-flag.js
@@ -0,0 +1,6 @@
+'use strict'
+
+// Re-export from external-pack bundle for better deduplication.
+const { hasFlag } = require('./external-pack')
+// has-flag is an ESM module with default export.
+module.exports = hasFlag.default || hasFlag
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/libnpmexec.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/libnpmexec.js
new file mode 100644
index 00000000..0216de90
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/libnpmexec.js
@@ -0,0 +1,38 @@
+"use strict";
+/**
+ * Bundled from libnpmexec
+ * This is a zero-dependency bundle created by esbuild.
+ */
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+var __commonJS = (cb, mod) => function __require() {
+  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+
+// node_modules/.pnpm/libnpmexec@10.2.3_supports-color@10.2.2/node_modules/libnpmexec/lib/get-bin-from-manifest.js
+var require_get_bin_from_manifest = __commonJS({
+  "node_modules/.pnpm/libnpmexec@10.2.3_supports-color@10.2.2/node_modules/libnpmexec/lib/get-bin-from-manifest.js"(exports2, module2) {
+    var getBinFromManifest2 = /* @__PURE__ */ __name((mani) => {
+      const bin = mani.bin || {};
+      if (new Set(Object.values(bin)).size === 1) {
+        return Object.keys(bin)[0];
+      }
+      const name = mani.name.replace(/^@[^/]+\//, "");
+      if (bin[name]) {
+        return name;
+      }
+      throw Object.assign(new Error("could not determine executable to run"), {
+        pkgid: mani._id
+      });
+    }, "getBinFromManifest");
+    module2.exports = getBinFromManifest2;
+  }
+});
+
+// src/external/libnpmexec.js
+var getBinFromManifest = require_get_bin_from_manifest();
+module.exports = {
+  getBinFromManifest
+};
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/libnpmpack.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/libnpmpack.js
new file mode 100644
index 00000000..968888bf
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/libnpmpack.js
@@ -0,0 +1,5 @@
+'use strict'
+
+// Re-export from npm-pack bundle for better deduplication
+const { libnpmpack } = require('./npm-pack')
+module.exports = libnpmpack
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/make-fetch-happen.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/make-fetch-happen.js
new file mode 100644
index 00000000..494cbcb8
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/make-fetch-happen.js
@@ -0,0 +1,5 @@
+'use strict'
+
+// Re-export from npm-pack bundle for better deduplication
+const { makeFetchHappen } = require('./npm-pack')
+module.exports = makeFetchHappen
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/normalize-package-data.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/normalize-package-data.js
new file mode 100644
index 00000000..81d73e1b
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/normalize-package-data.js
@@ -0,0 +1,5 @@
+'use strict'
+
+// Re-export from npm-pack bundle for better deduplication.
+const { normalizePackageData } = require('./npm-pack')
+module.exports = normalizePackageData
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/npm-pack.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/npm-pack.js
new file mode 100644
index 00000000..89dd823b
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/npm-pack.js
@@ -0,0 +1,66443 @@
+"use strict";
+/**
+ * Bundled from npm-pack
+ * This is a zero-dependency bundle created by esbuild.
+ */
+"use strict";
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+var __esm = (fn, res) => function __init() {
+  return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
+};
+var __commonJS = (cb, mod) => function __require() {
+  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// node_modules/.pnpm/json-parse-even-better-errors@5.0.0/node_modules/json-parse-even-better-errors/lib/index.js
+var require_lib = __commonJS({
+  "node_modules/.pnpm/json-parse-even-better-errors@5.0.0/node_modules/json-parse-even-better-errors/lib/index.js"(exports2, module2) {
+    "use strict";
+    var INDENT = Symbol.for("indent");
+    var NEWLINE = Symbol.for("newline");
+    var DEFAULT_NEWLINE = "\n";
+    var DEFAULT_INDENT = "  ";
+    var BOM = /^\uFEFF/;
+    var FORMAT = /^\s*[{[]((?:\r?\n)+)([\s\t]*)/;
+    var EMPTY = /^(?:\{\}|\[\])((?:\r?\n)+)?$/;
+    var UNEXPECTED_TOKEN = /^Unexpected token '?(.)'?(,)? /i;
+    var hexify = /* @__PURE__ */ __name((char) => {
+      const h = char.charCodeAt(0).toString(16).toUpperCase();
+      return `0x${h.length % 2 ? "0" : ""}${h}`;
+    }, "hexify");
+    var stripBOM = /* @__PURE__ */ __name((txt) => String(txt).replace(BOM, ""), "stripBOM");
+    var makeParsedError = /* @__PURE__ */ __name((msg, parsing, position = 0) => ({
+      message: `${msg} while parsing ${parsing}`,
+      position
+    }), "makeParsedError");
+    var parseError = /* @__PURE__ */ __name((e, txt, context = 20) => {
+      let msg = e.message;
+      if (!txt) {
+        return makeParsedError(msg, "empty string");
+      }
+      const badTokenMatch = msg.match(UNEXPECTED_TOKEN);
+      const badIndexMatch = msg.match(/ position\s+(\d+)/i);
+      if (badTokenMatch) {
+        msg = msg.replace(
+          UNEXPECTED_TOKEN,
+          `Unexpected token ${JSON.stringify(badTokenMatch[1])} (${hexify(badTokenMatch[1])})$2 `
+        );
+      }
+      let errIdx;
+      if (badIndexMatch) {
+        errIdx = +badIndexMatch[1];
+      } else if (msg.match(/^Unexpected end of JSON.*/i)) {
+        errIdx = txt.length - 1;
+      }
+      if (errIdx == null) {
+        return makeParsedError(msg, `'${txt.slice(0, context * 2)}'`);
+      }
+      const start = errIdx <= context ? 0 : errIdx - context;
+      const end = errIdx + context >= txt.length ? txt.length : errIdx + context;
+      const slice = `${start ? "..." : ""}${txt.slice(start, end)}${end === txt.length ? "" : "..."}`;
+      return makeParsedError(
+        msg,
+        `${txt === slice ? "" : "near "}${JSON.stringify(slice)}`,
+        errIdx
+      );
+    }, "parseError");
+    var JSONParseError = class extends SyntaxError {
+      static {
+        __name(this, "JSONParseError");
+      }
+      constructor(er, txt, context, caller) {
+        const metadata = parseError(er, txt, context);
+        super(metadata.message);
+        Object.assign(this, metadata);
+        this.code = "EJSONPARSE";
+        this.systemError = er;
+        Error.captureStackTrace(this, caller || this.constructor);
+      }
+      get name() {
+        return this.constructor.name;
+      }
+      set name(n) {
+      }
+      get [Symbol.toStringTag]() {
+        return this.constructor.name;
+      }
+    };
+    var parseJson = /* @__PURE__ */ __name((txt, reviver) => {
+      const result = JSON.parse(txt, reviver);
+      if (result && typeof result === "object") {
+        const match = txt.match(EMPTY) || txt.match(FORMAT) || [null, "", ""];
+        result[NEWLINE] = match[1] ?? DEFAULT_NEWLINE;
+        result[INDENT] = match[2] ?? DEFAULT_INDENT;
+      }
+      return result;
+    }, "parseJson");
+    var parseJsonError = /* @__PURE__ */ __name((raw, reviver, context) => {
+      const txt = stripBOM(raw);
+      try {
+        return parseJson(txt, reviver);
+      } catch (e) {
+        if (typeof raw !== "string" && !Buffer.isBuffer(raw)) {
+          const msg = Array.isArray(raw) && raw.length === 0 ? "an empty array" : String(raw);
+          throw Object.assign(
+            new TypeError(`Cannot parse ${msg}`),
+            { code: "EJSONPARSE", systemError: e }
+          );
+        }
+        throw new JSONParseError(e, txt, context, parseJsonError);
+      }
+    }, "parseJsonError");
+    module2.exports = parseJsonError;
+    parseJsonError.JSONParseError = JSONParseError;
+    parseJsonError.noExceptions = (raw, reviver) => {
+      try {
+        return parseJson(stripBOM(raw), reviver);
+      } catch {
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/update-dependencies.js
+var require_update_dependencies = __commonJS({
+  "node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/update-dependencies.js"(exports2, module2) {
+    var depTypes = /* @__PURE__ */ new Set([
+      "dependencies",
+      "optionalDependencies",
+      "devDependencies",
+      "peerDependencies"
+    ]);
+    var orderDeps = /* @__PURE__ */ __name((content) => {
+      for (const type of depTypes) {
+        if (content && content[type]) {
+          content[type] = Object.keys(content[type]).sort((a, b) => a.localeCompare(b, "en")).reduce((res, key) => {
+            res[key] = content[type][key];
+            return res;
+          }, {});
+        }
+      }
+      return content;
+    }, "orderDeps");
+    var updateDependencies = /* @__PURE__ */ __name(({ content, originalContent }) => {
+      const pkg = orderDeps({
+        ...content
+      });
+      if (pkg.dependencies) {
+        if (pkg.optionalDependencies) {
+          for (const name of Object.keys(pkg.optionalDependencies)) {
+            delete pkg.dependencies[name];
+          }
+        }
+      }
+      const result = { ...originalContent };
+      for (const type of depTypes) {
+        if (pkg[type]) {
+          result[type] = pkg[type];
+        }
+        const emptyDepType = pkg[type] && typeof pkg === "object" && Object.keys(pkg[type]).length === 0;
+        if (emptyDepType) {
+          delete result[type];
+        }
+      }
+      const { dependencies: origProd, peerDependencies: origPeer } = originalContent || {};
+      const { peerDependencies: newPeer } = result;
+      if (origProd && origPeer && newPeer) {
+        for (const name of Object.keys(origPeer)) {
+          if (origProd[name] !== void 0 && newPeer[name] !== void 0) {
+            result.dependencies = result.dependencies || {};
+            result.dependencies[name] = newPeer[name];
+          }
+        }
+      }
+      return result;
+    }, "updateDependencies");
+    updateDependencies.knownKeys = depTypes;
+    module2.exports = updateDependencies;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/update-scripts.js
+var require_update_scripts = __commonJS({
+  "node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/update-scripts.js"(exports2, module2) {
+    var updateScripts = /* @__PURE__ */ __name(({ content, originalContent = {} }) => {
+      const newScripts = content.scripts;
+      if (!newScripts) {
+        return originalContent;
+      }
+      const hasInvalidScripts = /* @__PURE__ */ __name(() => Object.entries(newScripts).some(([key, value]) => typeof key !== "string" || typeof value !== "string"), "hasInvalidScripts");
+      if (hasInvalidScripts()) {
+        throw Object.assign(
+          new TypeError(
+            "package.json scripts should be a key-value pair of strings."
+          ),
+          { code: "ESCRIPTSINVALID" }
+        );
+      }
+      return {
+        ...originalContent,
+        scripts: {
+          ...newScripts
+        }
+      };
+    }, "updateScripts");
+    module2.exports = updateScripts;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/update-workspaces.js
+var require_update_workspaces = __commonJS({
+  "node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/update-workspaces.js"(exports2, module2) {
+    var updateWorkspaces = /* @__PURE__ */ __name(({ content, originalContent = {} }) => {
+      const newWorkspaces = content.workspaces;
+      if (!newWorkspaces) {
+        return originalContent;
+      }
+      const hasInvalidWorkspaces = /* @__PURE__ */ __name(() => newWorkspaces.some((w) => !(typeof w === "string")), "hasInvalidWorkspaces");
+      if (!newWorkspaces.length || hasInvalidWorkspaces()) {
+        throw Object.assign(
+          new TypeError("workspaces should be an array of strings."),
+          { code: "EWORKSPACESINVALID" }
+        );
+      }
+      return {
+        ...originalContent,
+        workspaces: [
+          ...newWorkspaces
+        ]
+      };
+    }, "updateWorkspaces");
+    module2.exports = updateWorkspaces;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/debug.js
+var require_debug = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/debug.js"(exports2, module2) {
+    "use strict";
+    var debug = typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error("SEMVER", ...args) : () => {
+    };
+    module2.exports = debug;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/constants.js
+var require_constants = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/constants.js"(exports2, module2) {
+    "use strict";
+    var SEMVER_SPEC_VERSION = "2.0.0";
+    var MAX_LENGTH = 256;
+    var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || /* istanbul ignore next */
+    9007199254740991;
+    var MAX_SAFE_COMPONENT_LENGTH = 16;
+    var MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6;
+    var RELEASE_TYPES = [
+      "major",
+      "premajor",
+      "minor",
+      "preminor",
+      "patch",
+      "prepatch",
+      "prerelease"
+    ];
+    module2.exports = {
+      MAX_LENGTH,
+      MAX_SAFE_COMPONENT_LENGTH,
+      MAX_SAFE_BUILD_LENGTH,
+      MAX_SAFE_INTEGER,
+      RELEASE_TYPES,
+      SEMVER_SPEC_VERSION,
+      FLAG_INCLUDE_PRERELEASE: 1,
+      FLAG_LOOSE: 2
+    };
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/re.js
+var require_re = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/re.js"(exports2, module2) {
+    "use strict";
+    var {
+      MAX_SAFE_COMPONENT_LENGTH,
+      MAX_SAFE_BUILD_LENGTH,
+      MAX_LENGTH
+    } = require_constants();
+    var debug = require_debug();
+    exports2 = module2.exports = {};
+    var re = exports2.re = [];
+    var safeRe = exports2.safeRe = [];
+    var src = exports2.src = [];
+    var safeSrc = exports2.safeSrc = [];
+    var t = exports2.t = {};
+    var R = 0;
+    var LETTERDASHNUMBER = "[a-zA-Z0-9-]";
+    var safeRegexReplacements = [
+      ["\\s", 1],
+      ["\\d", MAX_LENGTH],
+      [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH]
+    ];
+    var makeSafeRegex = /* @__PURE__ */ __name((value) => {
+      for (const [token, max] of safeRegexReplacements) {
+        value = value.split(`${token}*`).join(`${token}{0,${max}}`).split(`${token}+`).join(`${token}{1,${max}}`);
+      }
+      return value;
+    }, "makeSafeRegex");
+    var createToken = /* @__PURE__ */ __name((name, value, isGlobal) => {
+      const safe = makeSafeRegex(value);
+      const index = R++;
+      debug(name, index, value);
+      t[name] = index;
+      src[index] = value;
+      safeSrc[index] = safe;
+      re[index] = new RegExp(value, isGlobal ? "g" : void 0);
+      safeRe[index] = new RegExp(safe, isGlobal ? "g" : void 0);
+    }, "createToken");
+    createToken("NUMERICIDENTIFIER", "0|[1-9]\\d*");
+    createToken("NUMERICIDENTIFIERLOOSE", "\\d+");
+    createToken("NONNUMERICIDENTIFIER", `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`);
+    createToken("MAINVERSION", `(${src[t.NUMERICIDENTIFIER]})\\.(${src[t.NUMERICIDENTIFIER]})\\.(${src[t.NUMERICIDENTIFIER]})`);
+    createToken("MAINVERSIONLOOSE", `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.(${src[t.NUMERICIDENTIFIERLOOSE]})\\.(${src[t.NUMERICIDENTIFIERLOOSE]})`);
+    createToken("PRERELEASEIDENTIFIER", `(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIER]})`);
+    createToken("PRERELEASEIDENTIFIERLOOSE", `(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIERLOOSE]})`);
+    createToken("PRERELEASE", `(?:-(${src[t.PRERELEASEIDENTIFIER]}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`);
+    createToken("PRERELEASELOOSE", `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`);
+    createToken("BUILDIDENTIFIER", `${LETTERDASHNUMBER}+`);
+    createToken("BUILD", `(?:\\+(${src[t.BUILDIDENTIFIER]}(?:\\.${src[t.BUILDIDENTIFIER]})*))`);
+    createToken("FULLPLAIN", `v?${src[t.MAINVERSION]}${src[t.PRERELEASE]}?${src[t.BUILD]}?`);
+    createToken("FULL", `^${src[t.FULLPLAIN]}$`);
+    createToken("LOOSEPLAIN", `[v=\\s]*${src[t.MAINVERSIONLOOSE]}${src[t.PRERELEASELOOSE]}?${src[t.BUILD]}?`);
+    createToken("LOOSE", `^${src[t.LOOSEPLAIN]}$`);
+    createToken("GTLT", "((?:<|>)?=?)");
+    createToken("XRANGEIDENTIFIERLOOSE", `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);
+    createToken("XRANGEIDENTIFIER", `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`);
+    createToken("XRANGEPLAIN", `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})(?:\\.(${src[t.XRANGEIDENTIFIER]})(?:\\.(${src[t.XRANGEIDENTIFIER]})(?:${src[t.PRERELEASE]})?${src[t.BUILD]}?)?)?`);
+    createToken("XRANGEPLAINLOOSE", `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:${src[t.PRERELEASELOOSE]})?${src[t.BUILD]}?)?)?`);
+    createToken("XRANGE", `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`);
+    createToken("XRANGELOOSE", `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`);
+    createToken("COERCEPLAIN", `${"(^|[^\\d])(\\d{1,"}${MAX_SAFE_COMPONENT_LENGTH}})(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`);
+    createToken("COERCE", `${src[t.COERCEPLAIN]}(?:$|[^\\d])`);
+    createToken("COERCEFULL", src[t.COERCEPLAIN] + `(?:${src[t.PRERELEASE]})?(?:${src[t.BUILD]})?(?:$|[^\\d])`);
+    createToken("COERCERTL", src[t.COERCE], true);
+    createToken("COERCERTLFULL", src[t.COERCEFULL], true);
+    createToken("LONETILDE", "(?:~>?)");
+    createToken("TILDETRIM", `(\\s*)${src[t.LONETILDE]}\\s+`, true);
+    exports2.tildeTrimReplace = "$1~";
+    createToken("TILDE", `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`);
+    createToken("TILDELOOSE", `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`);
+    createToken("LONECARET", "(?:\\^)");
+    createToken("CARETTRIM", `(\\s*)${src[t.LONECARET]}\\s+`, true);
+    exports2.caretTrimReplace = "$1^";
+    createToken("CARET", `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`);
+    createToken("CARETLOOSE", `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`);
+    createToken("COMPARATORLOOSE", `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`);
+    createToken("COMPARATOR", `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`);
+    createToken("COMPARATORTRIM", `(\\s*)${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true);
+    exports2.comparatorTrimReplace = "$1$2$3";
+    createToken("HYPHENRANGE", `^\\s*(${src[t.XRANGEPLAIN]})\\s+-\\s+(${src[t.XRANGEPLAIN]})\\s*$`);
+    createToken("HYPHENRANGELOOSE", `^\\s*(${src[t.XRANGEPLAINLOOSE]})\\s+-\\s+(${src[t.XRANGEPLAINLOOSE]})\\s*$`);
+    createToken("STAR", "(<|>)?=?\\s*\\*");
+    createToken("GTE0", "^\\s*>=\\s*0\\.0\\.0\\s*$");
+    createToken("GTE0PRE", "^\\s*>=\\s*0\\.0\\.0-0\\s*$");
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/parse-options.js
+var require_parse_options = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/parse-options.js"(exports2, module2) {
+    "use strict";
+    var looseOption = Object.freeze({ loose: true });
+    var emptyOpts = Object.freeze({});
+    var parseOptions = /* @__PURE__ */ __name((options) => {
+      if (!options) {
+        return emptyOpts;
+      }
+      if (typeof options !== "object") {
+        return looseOption;
+      }
+      return options;
+    }, "parseOptions");
+    module2.exports = parseOptions;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/identifiers.js
+var require_identifiers = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/identifiers.js"(exports2, module2) {
+    "use strict";
+    var numeric = /^[0-9]+$/;
+    var compareIdentifiers = /* @__PURE__ */ __name((a, b) => {
+      const anum = numeric.test(a);
+      const bnum = numeric.test(b);
+      if (anum && bnum) {
+        a = +a;
+        b = +b;
+      }
+      return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1;
+    }, "compareIdentifiers");
+    var rcompareIdentifiers = /* @__PURE__ */ __name((a, b) => compareIdentifiers(b, a), "rcompareIdentifiers");
+    module2.exports = {
+      compareIdentifiers,
+      rcompareIdentifiers
+    };
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/semver.js
+var require_semver = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/semver.js"(exports2, module2) {
+    "use strict";
+    var debug = require_debug();
+    var { MAX_LENGTH, MAX_SAFE_INTEGER } = require_constants();
+    var { safeRe: re, t } = require_re();
+    var parseOptions = require_parse_options();
+    var { compareIdentifiers } = require_identifiers();
+    var SemVer = class _SemVer {
+      static {
+        __name(this, "SemVer");
+      }
+      constructor(version, options) {
+        options = parseOptions(options);
+        if (version instanceof _SemVer) {
+          if (version.loose === !!options.loose && version.includePrerelease === !!options.includePrerelease) {
+            return version;
+          } else {
+            version = version.version;
+          }
+        } else if (typeof version !== "string") {
+          throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version}".`);
+        }
+        if (version.length > MAX_LENGTH) {
+          throw new TypeError(
+            `version is longer than ${MAX_LENGTH} characters`
+          );
+        }
+        debug("SemVer", version, options);
+        this.options = options;
+        this.loose = !!options.loose;
+        this.includePrerelease = !!options.includePrerelease;
+        const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]);
+        if (!m) {
+          throw new TypeError(`Invalid Version: ${version}`);
+        }
+        this.raw = version;
+        this.major = +m[1];
+        this.minor = +m[2];
+        this.patch = +m[3];
+        if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
+          throw new TypeError("Invalid major version");
+        }
+        if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
+          throw new TypeError("Invalid minor version");
+        }
+        if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
+          throw new TypeError("Invalid patch version");
+        }
+        if (!m[4]) {
+          this.prerelease = [];
+        } else {
+          this.prerelease = m[4].split(".").map((id) => {
+            if (/^[0-9]+$/.test(id)) {
+              const num = +id;
+              if (num >= 0 && num < MAX_SAFE_INTEGER) {
+                return num;
+              }
+            }
+            return id;
+          });
+        }
+        this.build = m[5] ? m[5].split(".") : [];
+        this.format();
+      }
+      format() {
+        this.version = `${this.major}.${this.minor}.${this.patch}`;
+        if (this.prerelease.length) {
+          this.version += `-${this.prerelease.join(".")}`;
+        }
+        return this.version;
+      }
+      toString() {
+        return this.version;
+      }
+      compare(other) {
+        debug("SemVer.compare", this.version, this.options, other);
+        if (!(other instanceof _SemVer)) {
+          if (typeof other === "string" && other === this.version) {
+            return 0;
+          }
+          other = new _SemVer(other, this.options);
+        }
+        if (other.version === this.version) {
+          return 0;
+        }
+        return this.compareMain(other) || this.comparePre(other);
+      }
+      compareMain(other) {
+        if (!(other instanceof _SemVer)) {
+          other = new _SemVer(other, this.options);
+        }
+        return compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch);
+      }
+      comparePre(other) {
+        if (!(other instanceof _SemVer)) {
+          other = new _SemVer(other, this.options);
+        }
+        if (this.prerelease.length && !other.prerelease.length) {
+          return -1;
+        } else if (!this.prerelease.length && other.prerelease.length) {
+          return 1;
+        } else if (!this.prerelease.length && !other.prerelease.length) {
+          return 0;
+        }
+        let i = 0;
+        do {
+          const a = this.prerelease[i];
+          const b = other.prerelease[i];
+          debug("prerelease compare", i, a, b);
+          if (a === void 0 && b === void 0) {
+            return 0;
+          } else if (b === void 0) {
+            return 1;
+          } else if (a === void 0) {
+            return -1;
+          } else if (a === b) {
+            continue;
+          } else {
+            return compareIdentifiers(a, b);
+          }
+        } while (++i);
+      }
+      compareBuild(other) {
+        if (!(other instanceof _SemVer)) {
+          other = new _SemVer(other, this.options);
+        }
+        let i = 0;
+        do {
+          const a = this.build[i];
+          const b = other.build[i];
+          debug("build compare", i, a, b);
+          if (a === void 0 && b === void 0) {
+            return 0;
+          } else if (b === void 0) {
+            return 1;
+          } else if (a === void 0) {
+            return -1;
+          } else if (a === b) {
+            continue;
+          } else {
+            return compareIdentifiers(a, b);
+          }
+        } while (++i);
+      }
+      // preminor will bump the version up to the next minor release, and immediately
+      // down to pre-release. premajor and prepatch work the same way.
+      inc(release, identifier, identifierBase) {
+        if (release.startsWith("pre")) {
+          if (!identifier && identifierBase === false) {
+            throw new Error("invalid increment argument: identifier is empty");
+          }
+          if (identifier) {
+            const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE]);
+            if (!match || match[1] !== identifier) {
+              throw new Error(`invalid identifier: ${identifier}`);
+            }
+          }
+        }
+        switch (release) {
+          case "premajor":
+            this.prerelease.length = 0;
+            this.patch = 0;
+            this.minor = 0;
+            this.major++;
+            this.inc("pre", identifier, identifierBase);
+            break;
+          case "preminor":
+            this.prerelease.length = 0;
+            this.patch = 0;
+            this.minor++;
+            this.inc("pre", identifier, identifierBase);
+            break;
+          case "prepatch":
+            this.prerelease.length = 0;
+            this.inc("patch", identifier, identifierBase);
+            this.inc("pre", identifier, identifierBase);
+            break;
+          // If the input is a non-prerelease version, this acts the same as
+          // prepatch.
+          case "prerelease":
+            if (this.prerelease.length === 0) {
+              this.inc("patch", identifier, identifierBase);
+            }
+            this.inc("pre", identifier, identifierBase);
+            break;
+          case "release":
+            if (this.prerelease.length === 0) {
+              throw new Error(`version ${this.raw} is not a prerelease`);
+            }
+            this.prerelease.length = 0;
+            break;
+          case "major":
+            if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) {
+              this.major++;
+            }
+            this.minor = 0;
+            this.patch = 0;
+            this.prerelease = [];
+            break;
+          case "minor":
+            if (this.patch !== 0 || this.prerelease.length === 0) {
+              this.minor++;
+            }
+            this.patch = 0;
+            this.prerelease = [];
+            break;
+          case "patch":
+            if (this.prerelease.length === 0) {
+              this.patch++;
+            }
+            this.prerelease = [];
+            break;
+          // This probably shouldn't be used publicly.
+          // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.
+          case "pre": {
+            const base = Number(identifierBase) ? 1 : 0;
+            if (this.prerelease.length === 0) {
+              this.prerelease = [base];
+            } else {
+              let i = this.prerelease.length;
+              while (--i >= 0) {
+                if (typeof this.prerelease[i] === "number") {
+                  this.prerelease[i]++;
+                  i = -2;
+                }
+              }
+              if (i === -1) {
+                if (identifier === this.prerelease.join(".") && identifierBase === false) {
+                  throw new Error("invalid increment argument: identifier already exists");
+                }
+                this.prerelease.push(base);
+              }
+            }
+            if (identifier) {
+              let prerelease = [identifier, base];
+              if (identifierBase === false) {
+                prerelease = [identifier];
+              }
+              if (compareIdentifiers(this.prerelease[0], identifier) === 0) {
+                if (isNaN(this.prerelease[1])) {
+                  this.prerelease = prerelease;
+                }
+              } else {
+                this.prerelease = prerelease;
+              }
+            }
+            break;
+          }
+          default:
+            throw new Error(`invalid increment argument: ${release}`);
+        }
+        this.raw = this.format();
+        if (this.build.length) {
+          this.raw += `+${this.build.join(".")}`;
+        }
+        return this;
+      }
+    };
+    module2.exports = SemVer;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/parse.js
+var require_parse = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/parse.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var parse = /* @__PURE__ */ __name((version, options, throwErrors = false) => {
+      if (version instanceof SemVer) {
+        return version;
+      }
+      try {
+        return new SemVer(version, options);
+      } catch (er) {
+        if (!throwErrors) {
+          return null;
+        }
+        throw er;
+      }
+    }, "parse");
+    module2.exports = parse;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/valid.js
+var require_valid = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/valid.js"(exports2, module2) {
+    "use strict";
+    var parse = require_parse();
+    var valid = /* @__PURE__ */ __name((version, options) => {
+      const v = parse(version, options);
+      return v ? v.version : null;
+    }, "valid");
+    module2.exports = valid;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/clean.js
+var require_clean = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/clean.js"(exports2, module2) {
+    "use strict";
+    var parse = require_parse();
+    var clean = /* @__PURE__ */ __name((version, options) => {
+      const s = parse(version.trim().replace(/^[=v]+/, ""), options);
+      return s ? s.version : null;
+    }, "clean");
+    module2.exports = clean;
+  }
+});
+
+// node_modules/.pnpm/proc-log@6.1.0/node_modules/proc-log/lib/index.js
+var require_lib2 = __commonJS({
+  "node_modules/.pnpm/proc-log@6.1.0/node_modules/proc-log/lib/index.js"(exports2, module2) {
+    var META = Symbol("proc-log.meta");
+    module2.exports = {
+      META,
+      output: {
+        LEVELS: [
+          "standard",
+          "error",
+          "buffer",
+          "flush"
+        ],
+        KEYS: {
+          standard: "standard",
+          error: "error",
+          buffer: "buffer",
+          flush: "flush"
+        },
+        standard: /* @__PURE__ */ __name(function(...args) {
+          return process.emit("output", "standard", ...args);
+        }, "standard"),
+        error: /* @__PURE__ */ __name(function(...args) {
+          return process.emit("output", "error", ...args);
+        }, "error"),
+        buffer: /* @__PURE__ */ __name(function(...args) {
+          return process.emit("output", "buffer", ...args);
+        }, "buffer"),
+        flush: /* @__PURE__ */ __name(function(...args) {
+          return process.emit("output", "flush", ...args);
+        }, "flush")
+      },
+      log: {
+        LEVELS: [
+          "notice",
+          "error",
+          "warn",
+          "info",
+          "verbose",
+          "http",
+          "silly",
+          "timing",
+          "pause",
+          "resume"
+        ],
+        KEYS: {
+          notice: "notice",
+          error: "error",
+          warn: "warn",
+          info: "info",
+          verbose: "verbose",
+          http: "http",
+          silly: "silly",
+          timing: "timing",
+          pause: "pause",
+          resume: "resume"
+        },
+        error: /* @__PURE__ */ __name(function(...args) {
+          return process.emit("log", "error", ...args);
+        }, "error"),
+        notice: /* @__PURE__ */ __name(function(...args) {
+          return process.emit("log", "notice", ...args);
+        }, "notice"),
+        warn: /* @__PURE__ */ __name(function(...args) {
+          return process.emit("log", "warn", ...args);
+        }, "warn"),
+        info: /* @__PURE__ */ __name(function(...args) {
+          return process.emit("log", "info", ...args);
+        }, "info"),
+        verbose: /* @__PURE__ */ __name(function(...args) {
+          return process.emit("log", "verbose", ...args);
+        }, "verbose"),
+        http: /* @__PURE__ */ __name(function(...args) {
+          return process.emit("log", "http", ...args);
+        }, "http"),
+        silly: /* @__PURE__ */ __name(function(...args) {
+          return process.emit("log", "silly", ...args);
+        }, "silly"),
+        timing: /* @__PURE__ */ __name(function(...args) {
+          return process.emit("log", "timing", ...args);
+        }, "timing"),
+        pause: /* @__PURE__ */ __name(function() {
+          return process.emit("log", "pause");
+        }, "pause"),
+        resume: /* @__PURE__ */ __name(function() {
+          return process.emit("log", "resume");
+        }, "resume")
+      },
+      time: {
+        LEVELS: [
+          "start",
+          "end"
+        ],
+        KEYS: {
+          start: "start",
+          end: "end"
+        },
+        start: /* @__PURE__ */ __name(function(name, fn) {
+          process.emit("time", "start", name);
+          function end() {
+            return process.emit("time", "end", name);
+          }
+          __name(end, "end");
+          if (typeof fn === "function") {
+            const res = fn();
+            if (res && res.finally) {
+              return res.finally(end);
+            }
+            end();
+            return res;
+          }
+          return end;
+        }, "start"),
+        end: /* @__PURE__ */ __name(function(name) {
+          return process.emit("time", "end", name);
+        }, "end")
+      },
+      input: {
+        LEVELS: [
+          "start",
+          "end",
+          "read"
+        ],
+        KEYS: {
+          start: "start",
+          end: "end",
+          read: "read"
+        },
+        start: /* @__PURE__ */ __name(function(...args) {
+          let fn;
+          if (typeof args[0] === "function") {
+            fn = args.shift();
+          }
+          process.emit("input", "start", ...args);
+          function end() {
+            return process.emit("input", "end", ...args);
+          }
+          __name(end, "end");
+          if (typeof fn === "function") {
+            const res = fn();
+            if (res && res.finally) {
+              return res.finally(end);
+            }
+            end();
+            return res;
+          }
+          return end;
+        }, "start"),
+        end: /* @__PURE__ */ __name(function(...args) {
+          return process.emit("input", "end", ...args);
+        }, "end"),
+        read: /* @__PURE__ */ __name(function(...args) {
+          let resolve, reject;
+          const promise = new Promise((_resolve, _reject) => {
+            resolve = _resolve;
+            reject = _reject;
+          });
+          process.emit("input", "read", resolve, reject, ...args);
+          return promise;
+        }, "read")
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/lru-cache@11.2.2/node_modules/lru-cache/dist/commonjs/index.js
+var require_commonjs = __commonJS({
+  "node_modules/.pnpm/lru-cache@11.2.2/node_modules/lru-cache/dist/commonjs/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.LRUCache = void 0;
+    var defaultPerf = typeof performance === "object" && performance && typeof performance.now === "function" ? performance : Date;
+    var warned = /* @__PURE__ */ new Set();
+    var PROCESS = typeof process === "object" && !!process ? process : {};
+    var emitWarning = /* @__PURE__ */ __name((msg, type, code, fn) => {
+      typeof PROCESS.emitWarning === "function" ? PROCESS.emitWarning(msg, type, code, fn) : console.error(`[${code}] ${type}: ${msg}`);
+    }, "emitWarning");
+    var AC = globalThis.AbortController;
+    var AS = globalThis.AbortSignal;
+    if (typeof AC === "undefined") {
+      AS = class AbortSignal {
+        static {
+          __name(this, "AbortSignal");
+        }
+        onabort;
+        _onabort = [];
+        reason;
+        aborted = false;
+        addEventListener(_, fn) {
+          this._onabort.push(fn);
+        }
+      };
+      AC = class AbortController {
+        static {
+          __name(this, "AbortController");
+        }
+        constructor() {
+          warnACPolyfill();
+        }
+        signal = new AS();
+        abort(reason) {
+          if (this.signal.aborted)
+            return;
+          this.signal.reason = reason;
+          this.signal.aborted = true;
+          for (const fn of this.signal._onabort) {
+            fn(reason);
+          }
+          this.signal.onabort?.(reason);
+        }
+      };
+      let printACPolyfillWarning = PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== "1";
+      const warnACPolyfill = /* @__PURE__ */ __name(() => {
+        if (!printACPolyfillWarning)
+          return;
+        printACPolyfillWarning = false;
+        emitWarning("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.", "NO_ABORT_CONTROLLER", "ENOTSUP", warnACPolyfill);
+      }, "warnACPolyfill");
+    }
+    var shouldWarn = /* @__PURE__ */ __name((code) => !warned.has(code), "shouldWarn");
+    var TYPE = Symbol("type");
+    var isPosInt = /* @__PURE__ */ __name((n) => n && n === Math.floor(n) && n > 0 && isFinite(n), "isPosInt");
+    var getUintArray = /* @__PURE__ */ __name((max) => !isPosInt(max) ? null : max <= Math.pow(2, 8) ? Uint8Array : max <= Math.pow(2, 16) ? Uint16Array : max <= Math.pow(2, 32) ? Uint32Array : max <= Number.MAX_SAFE_INTEGER ? ZeroArray : null, "getUintArray");
+    var ZeroArray = class extends Array {
+      static {
+        __name(this, "ZeroArray");
+      }
+      constructor(size) {
+        super(size);
+        this.fill(0);
+      }
+    };
+    var Stack = class _Stack {
+      static {
+        __name(this, "Stack");
+      }
+      heap;
+      length;
+      // private constructor
+      static #constructing = false;
+      static create(max) {
+        const HeapCls = getUintArray(max);
+        if (!HeapCls)
+          return [];
+        _Stack.#constructing = true;
+        const s = new _Stack(max, HeapCls);
+        _Stack.#constructing = false;
+        return s;
+      }
+      constructor(max, HeapCls) {
+        if (!_Stack.#constructing) {
+          throw new TypeError("instantiate Stack using Stack.create(n)");
+        }
+        this.heap = new HeapCls(max);
+        this.length = 0;
+      }
+      push(n) {
+        this.heap[this.length++] = n;
+      }
+      pop() {
+        return this.heap[--this.length];
+      }
+    };
+    var LRUCache = class _LRUCache {
+      static {
+        __name(this, "LRUCache");
+      }
+      // options that cannot be changed without disaster
+      #max;
+      #maxSize;
+      #dispose;
+      #onInsert;
+      #disposeAfter;
+      #fetchMethod;
+      #memoMethod;
+      #perf;
+      /**
+       * {@link LRUCache.OptionsBase.perf}
+       */
+      get perf() {
+        return this.#perf;
+      }
+      /**
+       * {@link LRUCache.OptionsBase.ttl}
+       */
+      ttl;
+      /**
+       * {@link LRUCache.OptionsBase.ttlResolution}
+       */
+      ttlResolution;
+      /**
+       * {@link LRUCache.OptionsBase.ttlAutopurge}
+       */
+      ttlAutopurge;
+      /**
+       * {@link LRUCache.OptionsBase.updateAgeOnGet}
+       */
+      updateAgeOnGet;
+      /**
+       * {@link LRUCache.OptionsBase.updateAgeOnHas}
+       */
+      updateAgeOnHas;
+      /**
+       * {@link LRUCache.OptionsBase.allowStale}
+       */
+      allowStale;
+      /**
+       * {@link LRUCache.OptionsBase.noDisposeOnSet}
+       */
+      noDisposeOnSet;
+      /**
+       * {@link LRUCache.OptionsBase.noUpdateTTL}
+       */
+      noUpdateTTL;
+      /**
+       * {@link LRUCache.OptionsBase.maxEntrySize}
+       */
+      maxEntrySize;
+      /**
+       * {@link LRUCache.OptionsBase.sizeCalculation}
+       */
+      sizeCalculation;
+      /**
+       * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}
+       */
+      noDeleteOnFetchRejection;
+      /**
+       * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}
+       */
+      noDeleteOnStaleGet;
+      /**
+       * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}
+       */
+      allowStaleOnFetchAbort;
+      /**
+       * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}
+       */
+      allowStaleOnFetchRejection;
+      /**
+       * {@link LRUCache.OptionsBase.ignoreFetchAbort}
+       */
+      ignoreFetchAbort;
+      // computed properties
+      #size;
+      #calculatedSize;
+      #keyMap;
+      #keyList;
+      #valList;
+      #next;
+      #prev;
+      #head;
+      #tail;
+      #free;
+      #disposed;
+      #sizes;
+      #starts;
+      #ttls;
+      #hasDispose;
+      #hasFetchMethod;
+      #hasDisposeAfter;
+      #hasOnInsert;
+      /**
+       * Do not call this method unless you need to inspect the
+       * inner workings of the cache.  If anything returned by this
+       * object is modified in any way, strange breakage may occur.
+       *
+       * These fields are private for a reason!
+       *
+       * @internal
+       */
+      static unsafeExposeInternals(c) {
+        return {
+          // properties
+          starts: c.#starts,
+          ttls: c.#ttls,
+          sizes: c.#sizes,
+          keyMap: c.#keyMap,
+          keyList: c.#keyList,
+          valList: c.#valList,
+          next: c.#next,
+          prev: c.#prev,
+          get head() {
+            return c.#head;
+          },
+          get tail() {
+            return c.#tail;
+          },
+          free: c.#free,
+          // methods
+          isBackgroundFetch: /* @__PURE__ */ __name((p) => c.#isBackgroundFetch(p), "isBackgroundFetch"),
+          backgroundFetch: /* @__PURE__ */ __name((k, index, options, context) => c.#backgroundFetch(k, index, options, context), "backgroundFetch"),
+          moveToTail: /* @__PURE__ */ __name((index) => c.#moveToTail(index), "moveToTail"),
+          indexes: /* @__PURE__ */ __name((options) => c.#indexes(options), "indexes"),
+          rindexes: /* @__PURE__ */ __name((options) => c.#rindexes(options), "rindexes"),
+          isStale: /* @__PURE__ */ __name((index) => c.#isStale(index), "isStale")
+        };
+      }
+      // Protected read-only members
+      /**
+       * {@link LRUCache.OptionsBase.max} (read-only)
+       */
+      get max() {
+        return this.#max;
+      }
+      /**
+       * {@link LRUCache.OptionsBase.maxSize} (read-only)
+       */
+      get maxSize() {
+        return this.#maxSize;
+      }
+      /**
+       * The total computed size of items in the cache (read-only)
+       */
+      get calculatedSize() {
+        return this.#calculatedSize;
+      }
+      /**
+       * The number of items stored in the cache (read-only)
+       */
+      get size() {
+        return this.#size;
+      }
+      /**
+       * {@link LRUCache.OptionsBase.fetchMethod} (read-only)
+       */
+      get fetchMethod() {
+        return this.#fetchMethod;
+      }
+      get memoMethod() {
+        return this.#memoMethod;
+      }
+      /**
+       * {@link LRUCache.OptionsBase.dispose} (read-only)
+       */
+      get dispose() {
+        return this.#dispose;
+      }
+      /**
+       * {@link LRUCache.OptionsBase.onInsert} (read-only)
+       */
+      get onInsert() {
+        return this.#onInsert;
+      }
+      /**
+       * {@link LRUCache.OptionsBase.disposeAfter} (read-only)
+       */
+      get disposeAfter() {
+        return this.#disposeAfter;
+      }
+      constructor(options) {
+        const { max = 0, ttl, ttlResolution = 1, ttlAutopurge, updateAgeOnGet, updateAgeOnHas, allowStale, dispose, onInsert, disposeAfter, noDisposeOnSet, noUpdateTTL, maxSize = 0, maxEntrySize = 0, sizeCalculation, fetchMethod, memoMethod, noDeleteOnFetchRejection, noDeleteOnStaleGet, allowStaleOnFetchRejection, allowStaleOnFetchAbort, ignoreFetchAbort, perf } = options;
+        if (perf !== void 0) {
+          if (typeof perf?.now !== "function") {
+            throw new TypeError("perf option must have a now() method if specified");
+          }
+        }
+        this.#perf = perf ?? defaultPerf;
+        if (max !== 0 && !isPosInt(max)) {
+          throw new TypeError("max option must be a nonnegative integer");
+        }
+        const UintArray = max ? getUintArray(max) : Array;
+        if (!UintArray) {
+          throw new Error("invalid max value: " + max);
+        }
+        this.#max = max;
+        this.#maxSize = maxSize;
+        this.maxEntrySize = maxEntrySize || this.#maxSize;
+        this.sizeCalculation = sizeCalculation;
+        if (this.sizeCalculation) {
+          if (!this.#maxSize && !this.maxEntrySize) {
+            throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");
+          }
+          if (typeof this.sizeCalculation !== "function") {
+            throw new TypeError("sizeCalculation set to non-function");
+          }
+        }
+        if (memoMethod !== void 0 && typeof memoMethod !== "function") {
+          throw new TypeError("memoMethod must be a function if defined");
+        }
+        this.#memoMethod = memoMethod;
+        if (fetchMethod !== void 0 && typeof fetchMethod !== "function") {
+          throw new TypeError("fetchMethod must be a function if specified");
+        }
+        this.#fetchMethod = fetchMethod;
+        this.#hasFetchMethod = !!fetchMethod;
+        this.#keyMap = /* @__PURE__ */ new Map();
+        this.#keyList = new Array(max).fill(void 0);
+        this.#valList = new Array(max).fill(void 0);
+        this.#next = new UintArray(max);
+        this.#prev = new UintArray(max);
+        this.#head = 0;
+        this.#tail = 0;
+        this.#free = Stack.create(max);
+        this.#size = 0;
+        this.#calculatedSize = 0;
+        if (typeof dispose === "function") {
+          this.#dispose = dispose;
+        }
+        if (typeof onInsert === "function") {
+          this.#onInsert = onInsert;
+        }
+        if (typeof disposeAfter === "function") {
+          this.#disposeAfter = disposeAfter;
+          this.#disposed = [];
+        } else {
+          this.#disposeAfter = void 0;
+          this.#disposed = void 0;
+        }
+        this.#hasDispose = !!this.#dispose;
+        this.#hasOnInsert = !!this.#onInsert;
+        this.#hasDisposeAfter = !!this.#disposeAfter;
+        this.noDisposeOnSet = !!noDisposeOnSet;
+        this.noUpdateTTL = !!noUpdateTTL;
+        this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection;
+        this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection;
+        this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort;
+        this.ignoreFetchAbort = !!ignoreFetchAbort;
+        if (this.maxEntrySize !== 0) {
+          if (this.#maxSize !== 0) {
+            if (!isPosInt(this.#maxSize)) {
+              throw new TypeError("maxSize must be a positive integer if specified");
+            }
+          }
+          if (!isPosInt(this.maxEntrySize)) {
+            throw new TypeError("maxEntrySize must be a positive integer if specified");
+          }
+          this.#initializeSizeTracking();
+        }
+        this.allowStale = !!allowStale;
+        this.noDeleteOnStaleGet = !!noDeleteOnStaleGet;
+        this.updateAgeOnGet = !!updateAgeOnGet;
+        this.updateAgeOnHas = !!updateAgeOnHas;
+        this.ttlResolution = isPosInt(ttlResolution) || ttlResolution === 0 ? ttlResolution : 1;
+        this.ttlAutopurge = !!ttlAutopurge;
+        this.ttl = ttl || 0;
+        if (this.ttl) {
+          if (!isPosInt(this.ttl)) {
+            throw new TypeError("ttl must be a positive integer if specified");
+          }
+          this.#initializeTTLTracking();
+        }
+        if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) {
+          throw new TypeError("At least one of max, maxSize, or ttl is required");
+        }
+        if (!this.ttlAutopurge && !this.#max && !this.#maxSize) {
+          const code = "LRU_CACHE_UNBOUNDED";
+          if (shouldWarn(code)) {
+            warned.add(code);
+            const msg = "TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.";
+            emitWarning(msg, "UnboundedCacheWarning", code, _LRUCache);
+          }
+        }
+      }
+      /**
+       * Return the number of ms left in the item's TTL. If item is not in cache,
+       * returns `0`. Returns `Infinity` if item is in cache without a defined TTL.
+       */
+      getRemainingTTL(key) {
+        return this.#keyMap.has(key) ? Infinity : 0;
+      }
+      #initializeTTLTracking() {
+        const ttls = new ZeroArray(this.#max);
+        const starts = new ZeroArray(this.#max);
+        this.#ttls = ttls;
+        this.#starts = starts;
+        this.#setItemTTL = (index, ttl, start = this.#perf.now()) => {
+          starts[index] = ttl !== 0 ? start : 0;
+          ttls[index] = ttl;
+          if (ttl !== 0 && this.ttlAutopurge) {
+            const t = setTimeout(() => {
+              if (this.#isStale(index)) {
+                this.#delete(this.#keyList[index], "expire");
+              }
+            }, ttl + 1);
+            if (t.unref) {
+              t.unref();
+            }
+          }
+        };
+        this.#updateItemAge = (index) => {
+          starts[index] = ttls[index] !== 0 ? this.#perf.now() : 0;
+        };
+        this.#statusTTL = (status, index) => {
+          if (ttls[index]) {
+            const ttl = ttls[index];
+            const start = starts[index];
+            if (!ttl || !start)
+              return;
+            status.ttl = ttl;
+            status.start = start;
+            status.now = cachedNow || getNow();
+            const age = status.now - start;
+            status.remainingTTL = ttl - age;
+          }
+        };
+        let cachedNow = 0;
+        const getNow = /* @__PURE__ */ __name(() => {
+          const n = this.#perf.now();
+          if (this.ttlResolution > 0) {
+            cachedNow = n;
+            const t = setTimeout(() => cachedNow = 0, this.ttlResolution);
+            if (t.unref) {
+              t.unref();
+            }
+          }
+          return n;
+        }, "getNow");
+        this.getRemainingTTL = (key) => {
+          const index = this.#keyMap.get(key);
+          if (index === void 0) {
+            return 0;
+          }
+          const ttl = ttls[index];
+          const start = starts[index];
+          if (!ttl || !start) {
+            return Infinity;
+          }
+          const age = (cachedNow || getNow()) - start;
+          return ttl - age;
+        };
+        this.#isStale = (index) => {
+          const s = starts[index];
+          const t = ttls[index];
+          return !!t && !!s && (cachedNow || getNow()) - s > t;
+        };
+      }
+      // conditionally set private methods related to TTL
+      #updateItemAge = /* @__PURE__ */ __name(() => {
+      }, "#updateItemAge");
+      #statusTTL = /* @__PURE__ */ __name(() => {
+      }, "#statusTTL");
+      #setItemTTL = /* @__PURE__ */ __name(() => {
+      }, "#setItemTTL");
+      /* c8 ignore stop */
+      #isStale = /* @__PURE__ */ __name(() => false, "#isStale");
+      #initializeSizeTracking() {
+        const sizes = new ZeroArray(this.#max);
+        this.#calculatedSize = 0;
+        this.#sizes = sizes;
+        this.#removeItemSize = (index) => {
+          this.#calculatedSize -= sizes[index];
+          sizes[index] = 0;
+        };
+        this.#requireSize = (k, v, size, sizeCalculation) => {
+          if (this.#isBackgroundFetch(v)) {
+            return 0;
+          }
+          if (!isPosInt(size)) {
+            if (sizeCalculation) {
+              if (typeof sizeCalculation !== "function") {
+                throw new TypeError("sizeCalculation must be a function");
+              }
+              size = sizeCalculation(v, k);
+              if (!isPosInt(size)) {
+                throw new TypeError("sizeCalculation return invalid (expect positive integer)");
+              }
+            } else {
+              throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");
+            }
+          }
+          return size;
+        };
+        this.#addItemSize = (index, size, status) => {
+          sizes[index] = size;
+          if (this.#maxSize) {
+            const maxSize = this.#maxSize - sizes[index];
+            while (this.#calculatedSize > maxSize) {
+              this.#evict(true);
+            }
+          }
+          this.#calculatedSize += sizes[index];
+          if (status) {
+            status.entrySize = size;
+            status.totalCalculatedSize = this.#calculatedSize;
+          }
+        };
+      }
+      #removeItemSize = /* @__PURE__ */ __name((_i) => {
+      }, "#removeItemSize");
+      #addItemSize = /* @__PURE__ */ __name((_i, _s, _st) => {
+      }, "#addItemSize");
+      #requireSize = /* @__PURE__ */ __name((_k, _v, size, sizeCalculation) => {
+        if (size || sizeCalculation) {
+          throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");
+        }
+        return 0;
+      }, "#requireSize");
+      *#indexes({ allowStale = this.allowStale } = {}) {
+        if (this.#size) {
+          for (let i = this.#tail; true; ) {
+            if (!this.#isValidIndex(i)) {
+              break;
+            }
+            if (allowStale || !this.#isStale(i)) {
+              yield i;
+            }
+            if (i === this.#head) {
+              break;
+            } else {
+              i = this.#prev[i];
+            }
+          }
+        }
+      }
+      *#rindexes({ allowStale = this.allowStale } = {}) {
+        if (this.#size) {
+          for (let i = this.#head; true; ) {
+            if (!this.#isValidIndex(i)) {
+              break;
+            }
+            if (allowStale || !this.#isStale(i)) {
+              yield i;
+            }
+            if (i === this.#tail) {
+              break;
+            } else {
+              i = this.#next[i];
+            }
+          }
+        }
+      }
+      #isValidIndex(index) {
+        return index !== void 0 && this.#keyMap.get(this.#keyList[index]) === index;
+      }
+      /**
+       * Return a generator yielding `[key, value]` pairs,
+       * in order from most recently used to least recently used.
+       */
+      *entries() {
+        for (const i of this.#indexes()) {
+          if (this.#valList[i] !== void 0 && this.#keyList[i] !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) {
+            yield [this.#keyList[i], this.#valList[i]];
+          }
+        }
+      }
+      /**
+       * Inverse order version of {@link LRUCache.entries}
+       *
+       * Return a generator yielding `[key, value]` pairs,
+       * in order from least recently used to most recently used.
+       */
+      *rentries() {
+        for (const i of this.#rindexes()) {
+          if (this.#valList[i] !== void 0 && this.#keyList[i] !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) {
+            yield [this.#keyList[i], this.#valList[i]];
+          }
+        }
+      }
+      /**
+       * Return a generator yielding the keys in the cache,
+       * in order from most recently used to least recently used.
+       */
+      *keys() {
+        for (const i of this.#indexes()) {
+          const k = this.#keyList[i];
+          if (k !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) {
+            yield k;
+          }
+        }
+      }
+      /**
+       * Inverse order version of {@link LRUCache.keys}
+       *
+       * Return a generator yielding the keys in the cache,
+       * in order from least recently used to most recently used.
+       */
+      *rkeys() {
+        for (const i of this.#rindexes()) {
+          const k = this.#keyList[i];
+          if (k !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) {
+            yield k;
+          }
+        }
+      }
+      /**
+       * Return a generator yielding the values in the cache,
+       * in order from most recently used to least recently used.
+       */
+      *values() {
+        for (const i of this.#indexes()) {
+          const v = this.#valList[i];
+          if (v !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) {
+            yield this.#valList[i];
+          }
+        }
+      }
+      /**
+       * Inverse order version of {@link LRUCache.values}
+       *
+       * Return a generator yielding the values in the cache,
+       * in order from least recently used to most recently used.
+       */
+      *rvalues() {
+        for (const i of this.#rindexes()) {
+          const v = this.#valList[i];
+          if (v !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) {
+            yield this.#valList[i];
+          }
+        }
+      }
+      /**
+       * Iterating over the cache itself yields the same results as
+       * {@link LRUCache.entries}
+       */
+      [Symbol.iterator]() {
+        return this.entries();
+      }
+      /**
+       * A String value that is used in the creation of the default string
+       * description of an object. Called by the built-in method
+       * `Object.prototype.toString`.
+       */
+      [Symbol.toStringTag] = "LRUCache";
+      /**
+       * Find a value for which the supplied fn method returns a truthy value,
+       * similar to `Array.find()`. fn is called as `fn(value, key, cache)`.
+       */
+      find(fn, getOptions = {}) {
+        for (const i of this.#indexes()) {
+          const v = this.#valList[i];
+          const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;
+          if (value === void 0)
+            continue;
+          if (fn(value, this.#keyList[i], this)) {
+            return this.get(this.#keyList[i], getOptions);
+          }
+        }
+      }
+      /**
+       * Call the supplied function on each item in the cache, in order from most
+       * recently used to least recently used.
+       *
+       * `fn` is called as `fn(value, key, cache)`.
+       *
+       * If `thisp` is provided, function will be called in the `this`-context of
+       * the provided object, or the cache if no `thisp` object is provided.
+       *
+       * Does not update age or recenty of use, or iterate over stale values.
+       */
+      forEach(fn, thisp = this) {
+        for (const i of this.#indexes()) {
+          const v = this.#valList[i];
+          const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;
+          if (value === void 0)
+            continue;
+          fn.call(thisp, value, this.#keyList[i], this);
+        }
+      }
+      /**
+       * The same as {@link LRUCache.forEach} but items are iterated over in
+       * reverse order.  (ie, less recently used items are iterated over first.)
+       */
+      rforEach(fn, thisp = this) {
+        for (const i of this.#rindexes()) {
+          const v = this.#valList[i];
+          const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;
+          if (value === void 0)
+            continue;
+          fn.call(thisp, value, this.#keyList[i], this);
+        }
+      }
+      /**
+       * Delete any stale entries. Returns true if anything was removed,
+       * false otherwise.
+       */
+      purgeStale() {
+        let deleted = false;
+        for (const i of this.#rindexes({ allowStale: true })) {
+          if (this.#isStale(i)) {
+            this.#delete(this.#keyList[i], "expire");
+            deleted = true;
+          }
+        }
+        return deleted;
+      }
+      /**
+       * Get the extended info about a given entry, to get its value, size, and
+       * TTL info simultaneously. Returns `undefined` if the key is not present.
+       *
+       * Unlike {@link LRUCache#dump}, which is designed to be portable and survive
+       * serialization, the `start` value is always the current timestamp, and the
+       * `ttl` is a calculated remaining time to live (negative if expired).
+       *
+       * Always returns stale values, if their info is found in the cache, so be
+       * sure to check for expirations (ie, a negative {@link LRUCache.Entry#ttl})
+       * if relevant.
+       */
+      info(key) {
+        const i = this.#keyMap.get(key);
+        if (i === void 0)
+          return void 0;
+        const v = this.#valList[i];
+        const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;
+        if (value === void 0)
+          return void 0;
+        const entry = { value };
+        if (this.#ttls && this.#starts) {
+          const ttl = this.#ttls[i];
+          const start = this.#starts[i];
+          if (ttl && start) {
+            const remain = ttl - (this.#perf.now() - start);
+            entry.ttl = remain;
+            entry.start = Date.now();
+          }
+        }
+        if (this.#sizes) {
+          entry.size = this.#sizes[i];
+        }
+        return entry;
+      }
+      /**
+       * Return an array of [key, {@link LRUCache.Entry}] tuples which can be
+       * passed to {@link LRUCache#load}.
+       *
+       * The `start` fields are calculated relative to a portable `Date.now()`
+       * timestamp, even if `performance.now()` is available.
+       *
+       * Stale entries are always included in the `dump`, even if
+       * {@link LRUCache.OptionsBase.allowStale} is false.
+       *
+       * Note: this returns an actual array, not a generator, so it can be more
+       * easily passed around.
+       */
+      dump() {
+        const arr = [];
+        for (const i of this.#indexes({ allowStale: true })) {
+          const key = this.#keyList[i];
+          const v = this.#valList[i];
+          const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;
+          if (value === void 0 || key === void 0)
+            continue;
+          const entry = { value };
+          if (this.#ttls && this.#starts) {
+            entry.ttl = this.#ttls[i];
+            const age = this.#perf.now() - this.#starts[i];
+            entry.start = Math.floor(Date.now() - age);
+          }
+          if (this.#sizes) {
+            entry.size = this.#sizes[i];
+          }
+          arr.unshift([key, entry]);
+        }
+        return arr;
+      }
+      /**
+       * Reset the cache and load in the items in entries in the order listed.
+       *
+       * The shape of the resulting cache may be different if the same options are
+       * not used in both caches.
+       *
+       * The `start` fields are assumed to be calculated relative to a portable
+       * `Date.now()` timestamp, even if `performance.now()` is available.
+       */
+      load(arr) {
+        this.clear();
+        for (const [key, entry] of arr) {
+          if (entry.start) {
+            const age = Date.now() - entry.start;
+            entry.start = this.#perf.now() - age;
+          }
+          this.set(key, entry.value, entry);
+        }
+      }
+      /**
+       * Add a value to the cache.
+       *
+       * Note: if `undefined` is specified as a value, this is an alias for
+       * {@link LRUCache#delete}
+       *
+       * Fields on the {@link LRUCache.SetOptions} options param will override
+       * their corresponding values in the constructor options for the scope
+       * of this single `set()` operation.
+       *
+       * If `start` is provided, then that will set the effective start
+       * time for the TTL calculation. Note that this must be a previous
+       * value of `performance.now()` if supported, or a previous value of
+       * `Date.now()` if not.
+       *
+       * Options object may also include `size`, which will prevent
+       * calling the `sizeCalculation` function and just use the specified
+       * number if it is a positive integer, and `noDisposeOnSet` which
+       * will prevent calling a `dispose` function in the case of
+       * overwrites.
+       *
+       * If the `size` (or return value of `sizeCalculation`) for a given
+       * entry is greater than `maxEntrySize`, then the item will not be
+       * added to the cache.
+       *
+       * Will update the recency of the entry.
+       *
+       * If the value is `undefined`, then this is an alias for
+       * `cache.delete(key)`. `undefined` is never stored in the cache.
+       */
+      set(k, v, setOptions = {}) {
+        if (v === void 0) {
+          this.delete(k);
+          return this;
+        }
+        const { ttl = this.ttl, start, noDisposeOnSet = this.noDisposeOnSet, sizeCalculation = this.sizeCalculation, status } = setOptions;
+        let { noUpdateTTL = this.noUpdateTTL } = setOptions;
+        const size = this.#requireSize(k, v, setOptions.size || 0, sizeCalculation);
+        if (this.maxEntrySize && size > this.maxEntrySize) {
+          if (status) {
+            status.set = "miss";
+            status.maxEntrySizeExceeded = true;
+          }
+          this.#delete(k, "set");
+          return this;
+        }
+        let index = this.#size === 0 ? void 0 : this.#keyMap.get(k);
+        if (index === void 0) {
+          index = this.#size === 0 ? this.#tail : this.#free.length !== 0 ? this.#free.pop() : this.#size === this.#max ? this.#evict(false) : this.#size;
+          this.#keyList[index] = k;
+          this.#valList[index] = v;
+          this.#keyMap.set(k, index);
+          this.#next[this.#tail] = index;
+          this.#prev[index] = this.#tail;
+          this.#tail = index;
+          this.#size++;
+          this.#addItemSize(index, size, status);
+          if (status)
+            status.set = "add";
+          noUpdateTTL = false;
+          if (this.#hasOnInsert) {
+            this.#onInsert?.(v, k, "add");
+          }
+        } else {
+          this.#moveToTail(index);
+          const oldVal = this.#valList[index];
+          if (v !== oldVal) {
+            if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) {
+              oldVal.__abortController.abort(new Error("replaced"));
+              const { __staleWhileFetching: s } = oldVal;
+              if (s !== void 0 && !noDisposeOnSet) {
+                if (this.#hasDispose) {
+                  this.#dispose?.(s, k, "set");
+                }
+                if (this.#hasDisposeAfter) {
+                  this.#disposed?.push([s, k, "set"]);
+                }
+              }
+            } else if (!noDisposeOnSet) {
+              if (this.#hasDispose) {
+                this.#dispose?.(oldVal, k, "set");
+              }
+              if (this.#hasDisposeAfter) {
+                this.#disposed?.push([oldVal, k, "set"]);
+              }
+            }
+            this.#removeItemSize(index);
+            this.#addItemSize(index, size, status);
+            this.#valList[index] = v;
+            if (status) {
+              status.set = "replace";
+              const oldValue = oldVal && this.#isBackgroundFetch(oldVal) ? oldVal.__staleWhileFetching : oldVal;
+              if (oldValue !== void 0)
+                status.oldValue = oldValue;
+            }
+          } else if (status) {
+            status.set = "update";
+          }
+          if (this.#hasOnInsert) {
+            this.onInsert?.(v, k, v === oldVal ? "update" : "replace");
+          }
+        }
+        if (ttl !== 0 && !this.#ttls) {
+          this.#initializeTTLTracking();
+        }
+        if (this.#ttls) {
+          if (!noUpdateTTL) {
+            this.#setItemTTL(index, ttl, start);
+          }
+          if (status)
+            this.#statusTTL(status, index);
+        }
+        if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) {
+          const dt = this.#disposed;
+          let task;
+          while (task = dt?.shift()) {
+            this.#disposeAfter?.(...task);
+          }
+        }
+        return this;
+      }
+      /**
+       * Evict the least recently used item, returning its value or
+       * `undefined` if cache is empty.
+       */
+      pop() {
+        try {
+          while (this.#size) {
+            const val = this.#valList[this.#head];
+            this.#evict(true);
+            if (this.#isBackgroundFetch(val)) {
+              if (val.__staleWhileFetching) {
+                return val.__staleWhileFetching;
+              }
+            } else if (val !== void 0) {
+              return val;
+            }
+          }
+        } finally {
+          if (this.#hasDisposeAfter && this.#disposed) {
+            const dt = this.#disposed;
+            let task;
+            while (task = dt?.shift()) {
+              this.#disposeAfter?.(...task);
+            }
+          }
+        }
+      }
+      #evict(free) {
+        const head = this.#head;
+        const k = this.#keyList[head];
+        const v = this.#valList[head];
+        if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) {
+          v.__abortController.abort(new Error("evicted"));
+        } else if (this.#hasDispose || this.#hasDisposeAfter) {
+          if (this.#hasDispose) {
+            this.#dispose?.(v, k, "evict");
+          }
+          if (this.#hasDisposeAfter) {
+            this.#disposed?.push([v, k, "evict"]);
+          }
+        }
+        this.#removeItemSize(head);
+        if (free) {
+          this.#keyList[head] = void 0;
+          this.#valList[head] = void 0;
+          this.#free.push(head);
+        }
+        if (this.#size === 1) {
+          this.#head = this.#tail = 0;
+          this.#free.length = 0;
+        } else {
+          this.#head = this.#next[head];
+        }
+        this.#keyMap.delete(k);
+        this.#size--;
+        return head;
+      }
+      /**
+       * Check if a key is in the cache, without updating the recency of use.
+       * Will return false if the item is stale, even though it is technically
+       * in the cache.
+       *
+       * Check if a key is in the cache, without updating the recency of
+       * use. Age is updated if {@link LRUCache.OptionsBase.updateAgeOnHas} is set
+       * to `true` in either the options or the constructor.
+       *
+       * Will return `false` if the item is stale, even though it is technically in
+       * the cache. The difference can be determined (if it matters) by using a
+       * `status` argument, and inspecting the `has` field.
+       *
+       * Will not update item age unless
+       * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.
+       */
+      has(k, hasOptions = {}) {
+        const { updateAgeOnHas = this.updateAgeOnHas, status } = hasOptions;
+        const index = this.#keyMap.get(k);
+        if (index !== void 0) {
+          const v = this.#valList[index];
+          if (this.#isBackgroundFetch(v) && v.__staleWhileFetching === void 0) {
+            return false;
+          }
+          if (!this.#isStale(index)) {
+            if (updateAgeOnHas) {
+              this.#updateItemAge(index);
+            }
+            if (status) {
+              status.has = "hit";
+              this.#statusTTL(status, index);
+            }
+            return true;
+          } else if (status) {
+            status.has = "stale";
+            this.#statusTTL(status, index);
+          }
+        } else if (status) {
+          status.has = "miss";
+        }
+        return false;
+      }
+      /**
+       * Like {@link LRUCache#get} but doesn't update recency or delete stale
+       * items.
+       *
+       * Returns `undefined` if the item is stale, unless
+       * {@link LRUCache.OptionsBase.allowStale} is set.
+       */
+      peek(k, peekOptions = {}) {
+        const { allowStale = this.allowStale } = peekOptions;
+        const index = this.#keyMap.get(k);
+        if (index === void 0 || !allowStale && this.#isStale(index)) {
+          return;
+        }
+        const v = this.#valList[index];
+        return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;
+      }
+      #backgroundFetch(k, index, options, context) {
+        const v = index === void 0 ? void 0 : this.#valList[index];
+        if (this.#isBackgroundFetch(v)) {
+          return v;
+        }
+        const ac = new AC();
+        const { signal } = options;
+        signal?.addEventListener("abort", () => ac.abort(signal.reason), {
+          signal: ac.signal
+        });
+        const fetchOpts = {
+          signal: ac.signal,
+          options,
+          context
+        };
+        const cb = /* @__PURE__ */ __name((v2, updateCache = false) => {
+          const { aborted } = ac.signal;
+          const ignoreAbort = options.ignoreFetchAbort && v2 !== void 0;
+          if (options.status) {
+            if (aborted && !updateCache) {
+              options.status.fetchAborted = true;
+              options.status.fetchError = ac.signal.reason;
+              if (ignoreAbort)
+                options.status.fetchAbortIgnored = true;
+            } else {
+              options.status.fetchResolved = true;
+            }
+          }
+          if (aborted && !ignoreAbort && !updateCache) {
+            return fetchFail(ac.signal.reason);
+          }
+          const bf2 = p;
+          const vl = this.#valList[index];
+          if (vl === p || ignoreAbort && updateCache && vl === void 0) {
+            if (v2 === void 0) {
+              if (bf2.__staleWhileFetching !== void 0) {
+                this.#valList[index] = bf2.__staleWhileFetching;
+              } else {
+                this.#delete(k, "fetch");
+              }
+            } else {
+              if (options.status)
+                options.status.fetchUpdated = true;
+              this.set(k, v2, fetchOpts.options);
+            }
+          }
+          return v2;
+        }, "cb");
+        const eb = /* @__PURE__ */ __name((er) => {
+          if (options.status) {
+            options.status.fetchRejected = true;
+            options.status.fetchError = er;
+          }
+          return fetchFail(er);
+        }, "eb");
+        const fetchFail = /* @__PURE__ */ __name((er) => {
+          const { aborted } = ac.signal;
+          const allowStaleAborted = aborted && options.allowStaleOnFetchAbort;
+          const allowStale = allowStaleAborted || options.allowStaleOnFetchRejection;
+          const noDelete = allowStale || options.noDeleteOnFetchRejection;
+          const bf2 = p;
+          if (this.#valList[index] === p) {
+            const del = !noDelete || bf2.__staleWhileFetching === void 0;
+            if (del) {
+              this.#delete(k, "fetch");
+            } else if (!allowStaleAborted) {
+              this.#valList[index] = bf2.__staleWhileFetching;
+            }
+          }
+          if (allowStale) {
+            if (options.status && bf2.__staleWhileFetching !== void 0) {
+              options.status.returnedStale = true;
+            }
+            return bf2.__staleWhileFetching;
+          } else if (bf2.__returned === bf2) {
+            throw er;
+          }
+        }, "fetchFail");
+        const pcall = /* @__PURE__ */ __name((res, rej) => {
+          const fmp = this.#fetchMethod?.(k, v, fetchOpts);
+          if (fmp && fmp instanceof Promise) {
+            fmp.then((v2) => res(v2 === void 0 ? void 0 : v2), rej);
+          }
+          ac.signal.addEventListener("abort", () => {
+            if (!options.ignoreFetchAbort || options.allowStaleOnFetchAbort) {
+              res(void 0);
+              if (options.allowStaleOnFetchAbort) {
+                res = /* @__PURE__ */ __name((v2) => cb(v2, true), "res");
+              }
+            }
+          });
+        }, "pcall");
+        if (options.status)
+          options.status.fetchDispatched = true;
+        const p = new Promise(pcall).then(cb, eb);
+        const bf = Object.assign(p, {
+          __abortController: ac,
+          __staleWhileFetching: v,
+          __returned: void 0
+        });
+        if (index === void 0) {
+          this.set(k, bf, { ...fetchOpts.options, status: void 0 });
+          index = this.#keyMap.get(k);
+        } else {
+          this.#valList[index] = bf;
+        }
+        return bf;
+      }
+      #isBackgroundFetch(p) {
+        if (!this.#hasFetchMethod)
+          return false;
+        const b = p;
+        return !!b && b instanceof Promise && b.hasOwnProperty("__staleWhileFetching") && b.__abortController instanceof AC;
+      }
+      async fetch(k, fetchOptions = {}) {
+        const {
+          // get options
+          allowStale = this.allowStale,
+          updateAgeOnGet = this.updateAgeOnGet,
+          noDeleteOnStaleGet = this.noDeleteOnStaleGet,
+          // set options
+          ttl = this.ttl,
+          noDisposeOnSet = this.noDisposeOnSet,
+          size = 0,
+          sizeCalculation = this.sizeCalculation,
+          noUpdateTTL = this.noUpdateTTL,
+          // fetch exclusive options
+          noDeleteOnFetchRejection = this.noDeleteOnFetchRejection,
+          allowStaleOnFetchRejection = this.allowStaleOnFetchRejection,
+          ignoreFetchAbort = this.ignoreFetchAbort,
+          allowStaleOnFetchAbort = this.allowStaleOnFetchAbort,
+          context,
+          forceRefresh = false,
+          status,
+          signal
+        } = fetchOptions;
+        if (!this.#hasFetchMethod) {
+          if (status)
+            status.fetch = "get";
+          return this.get(k, {
+            allowStale,
+            updateAgeOnGet,
+            noDeleteOnStaleGet,
+            status
+          });
+        }
+        const options = {
+          allowStale,
+          updateAgeOnGet,
+          noDeleteOnStaleGet,
+          ttl,
+          noDisposeOnSet,
+          size,
+          sizeCalculation,
+          noUpdateTTL,
+          noDeleteOnFetchRejection,
+          allowStaleOnFetchRejection,
+          allowStaleOnFetchAbort,
+          ignoreFetchAbort,
+          status,
+          signal
+        };
+        let index = this.#keyMap.get(k);
+        if (index === void 0) {
+          if (status)
+            status.fetch = "miss";
+          const p = this.#backgroundFetch(k, index, options, context);
+          return p.__returned = p;
+        } else {
+          const v = this.#valList[index];
+          if (this.#isBackgroundFetch(v)) {
+            const stale = allowStale && v.__staleWhileFetching !== void 0;
+            if (status) {
+              status.fetch = "inflight";
+              if (stale)
+                status.returnedStale = true;
+            }
+            return stale ? v.__staleWhileFetching : v.__returned = v;
+          }
+          const isStale = this.#isStale(index);
+          if (!forceRefresh && !isStale) {
+            if (status)
+              status.fetch = "hit";
+            this.#moveToTail(index);
+            if (updateAgeOnGet) {
+              this.#updateItemAge(index);
+            }
+            if (status)
+              this.#statusTTL(status, index);
+            return v;
+          }
+          const p = this.#backgroundFetch(k, index, options, context);
+          const hasStale = p.__staleWhileFetching !== void 0;
+          const staleVal = hasStale && allowStale;
+          if (status) {
+            status.fetch = isStale ? "stale" : "refresh";
+            if (staleVal && isStale)
+              status.returnedStale = true;
+          }
+          return staleVal ? p.__staleWhileFetching : p.__returned = p;
+        }
+      }
+      async forceFetch(k, fetchOptions = {}) {
+        const v = await this.fetch(k, fetchOptions);
+        if (v === void 0)
+          throw new Error("fetch() returned undefined");
+        return v;
+      }
+      memo(k, memoOptions = {}) {
+        const memoMethod = this.#memoMethod;
+        if (!memoMethod) {
+          throw new Error("no memoMethod provided to constructor");
+        }
+        const { context, forceRefresh, ...options } = memoOptions;
+        const v = this.get(k, options);
+        if (!forceRefresh && v !== void 0)
+          return v;
+        const vv = memoMethod(k, v, {
+          options,
+          context
+        });
+        this.set(k, vv, options);
+        return vv;
+      }
+      /**
+       * Return a value from the cache. Will update the recency of the cache
+       * entry found.
+       *
+       * If the key is not found, get() will return `undefined`.
+       */
+      get(k, getOptions = {}) {
+        const { allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, status } = getOptions;
+        const index = this.#keyMap.get(k);
+        if (index !== void 0) {
+          const value = this.#valList[index];
+          const fetching = this.#isBackgroundFetch(value);
+          if (status)
+            this.#statusTTL(status, index);
+          if (this.#isStale(index)) {
+            if (status)
+              status.get = "stale";
+            if (!fetching) {
+              if (!noDeleteOnStaleGet) {
+                this.#delete(k, "expire");
+              }
+              if (status && allowStale)
+                status.returnedStale = true;
+              return allowStale ? value : void 0;
+            } else {
+              if (status && allowStale && value.__staleWhileFetching !== void 0) {
+                status.returnedStale = true;
+              }
+              return allowStale ? value.__staleWhileFetching : void 0;
+            }
+          } else {
+            if (status)
+              status.get = "hit";
+            if (fetching) {
+              return value.__staleWhileFetching;
+            }
+            this.#moveToTail(index);
+            if (updateAgeOnGet) {
+              this.#updateItemAge(index);
+            }
+            return value;
+          }
+        } else if (status) {
+          status.get = "miss";
+        }
+      }
+      #connect(p, n) {
+        this.#prev[n] = p;
+        this.#next[p] = n;
+      }
+      #moveToTail(index) {
+        if (index !== this.#tail) {
+          if (index === this.#head) {
+            this.#head = this.#next[index];
+          } else {
+            this.#connect(this.#prev[index], this.#next[index]);
+          }
+          this.#connect(this.#tail, index);
+          this.#tail = index;
+        }
+      }
+      /**
+       * Deletes a key out of the cache.
+       *
+       * Returns true if the key was deleted, false otherwise.
+       */
+      delete(k) {
+        return this.#delete(k, "delete");
+      }
+      #delete(k, reason) {
+        let deleted = false;
+        if (this.#size !== 0) {
+          const index = this.#keyMap.get(k);
+          if (index !== void 0) {
+            deleted = true;
+            if (this.#size === 1) {
+              this.#clear(reason);
+            } else {
+              this.#removeItemSize(index);
+              const v = this.#valList[index];
+              if (this.#isBackgroundFetch(v)) {
+                v.__abortController.abort(new Error("deleted"));
+              } else if (this.#hasDispose || this.#hasDisposeAfter) {
+                if (this.#hasDispose) {
+                  this.#dispose?.(v, k, reason);
+                }
+                if (this.#hasDisposeAfter) {
+                  this.#disposed?.push([v, k, reason]);
+                }
+              }
+              this.#keyMap.delete(k);
+              this.#keyList[index] = void 0;
+              this.#valList[index] = void 0;
+              if (index === this.#tail) {
+                this.#tail = this.#prev[index];
+              } else if (index === this.#head) {
+                this.#head = this.#next[index];
+              } else {
+                const pi = this.#prev[index];
+                this.#next[pi] = this.#next[index];
+                const ni = this.#next[index];
+                this.#prev[ni] = this.#prev[index];
+              }
+              this.#size--;
+              this.#free.push(index);
+            }
+          }
+        }
+        if (this.#hasDisposeAfter && this.#disposed?.length) {
+          const dt = this.#disposed;
+          let task;
+          while (task = dt?.shift()) {
+            this.#disposeAfter?.(...task);
+          }
+        }
+        return deleted;
+      }
+      /**
+       * Clear the cache entirely, throwing away all values.
+       */
+      clear() {
+        return this.#clear("delete");
+      }
+      #clear(reason) {
+        for (const index of this.#rindexes({ allowStale: true })) {
+          const v = this.#valList[index];
+          if (this.#isBackgroundFetch(v)) {
+            v.__abortController.abort(new Error("deleted"));
+          } else {
+            const k = this.#keyList[index];
+            if (this.#hasDispose) {
+              this.#dispose?.(v, k, reason);
+            }
+            if (this.#hasDisposeAfter) {
+              this.#disposed?.push([v, k, reason]);
+            }
+          }
+        }
+        this.#keyMap.clear();
+        this.#valList.fill(void 0);
+        this.#keyList.fill(void 0);
+        if (this.#ttls && this.#starts) {
+          this.#ttls.fill(0);
+          this.#starts.fill(0);
+        }
+        if (this.#sizes) {
+          this.#sizes.fill(0);
+        }
+        this.#head = 0;
+        this.#tail = 0;
+        this.#free.length = 0;
+        this.#calculatedSize = 0;
+        this.#size = 0;
+        if (this.#hasDisposeAfter && this.#disposed) {
+          const dt = this.#disposed;
+          let task;
+          while (task = dt?.shift()) {
+            this.#disposeAfter?.(...task);
+          }
+        }
+      }
+    };
+    exports2.LRUCache = LRUCache;
+  }
+});
+
+// node_modules/.pnpm/hosted-git-info@8.1.0/node_modules/hosted-git-info/lib/hosts.js
+var require_hosts = __commonJS({
+  "node_modules/.pnpm/hosted-git-info@8.1.0/node_modules/hosted-git-info/lib/hosts.js"(exports2, module2) {
+    "use strict";
+    var maybeJoin = /* @__PURE__ */ __name((...args) => args.every((arg) => arg) ? args.join("") : "", "maybeJoin");
+    var maybeEncode = /* @__PURE__ */ __name((arg) => arg ? encodeURIComponent(arg) : "", "maybeEncode");
+    var formatHashFragment = /* @__PURE__ */ __name((f) => f.toLowerCase().replace(/^\W+/g, "").replace(/(? `git@${domain}:${user}/${project}.git${maybeJoin("#", committish)}`, "sshtemplate"),
+      sshurltemplate: /* @__PURE__ */ __name(({ domain, user, project, committish }) => `git+ssh://git@${domain}/${user}/${project}.git${maybeJoin("#", committish)}`, "sshurltemplate"),
+      edittemplate: /* @__PURE__ */ __name(({ domain, user, project, committish, editpath, path }) => `https://${domain}/${user}/${project}${maybeJoin("/", editpath, "/", maybeEncode(committish || "HEAD"), "/", path)}`, "edittemplate"),
+      browsetemplate: /* @__PURE__ */ __name(({ domain, user, project, committish, treepath }) => `https://${domain}/${user}/${project}${maybeJoin("/", treepath, "/", maybeEncode(committish))}`, "browsetemplate"),
+      browsetreetemplate: /* @__PURE__ */ __name(({ domain, user, project, committish, treepath, path, fragment, hashformat }) => `https://${domain}/${user}/${project}/${treepath}/${maybeEncode(committish || "HEAD")}/${path}${maybeJoin("#", hashformat(fragment || ""))}`, "browsetreetemplate"),
+      browseblobtemplate: /* @__PURE__ */ __name(({ domain, user, project, committish, blobpath, path, fragment, hashformat }) => `https://${domain}/${user}/${project}/${blobpath}/${maybeEncode(committish || "HEAD")}/${path}${maybeJoin("#", hashformat(fragment || ""))}`, "browseblobtemplate"),
+      docstemplate: /* @__PURE__ */ __name(({ domain, user, project, treepath, committish }) => `https://${domain}/${user}/${project}${maybeJoin("/", treepath, "/", maybeEncode(committish))}#readme`, "docstemplate"),
+      httpstemplate: /* @__PURE__ */ __name(({ auth, domain, user, project, committish }) => `git+https://${maybeJoin(auth, "@")}${domain}/${user}/${project}.git${maybeJoin("#", committish)}`, "httpstemplate"),
+      filetemplate: /* @__PURE__ */ __name(({ domain, user, project, committish, path }) => `https://${domain}/${user}/${project}/raw/${maybeEncode(committish || "HEAD")}/${path}`, "filetemplate"),
+      shortcuttemplate: /* @__PURE__ */ __name(({ type, user, project, committish }) => `${type}:${user}/${project}${maybeJoin("#", committish)}`, "shortcuttemplate"),
+      pathtemplate: /* @__PURE__ */ __name(({ user, project, committish }) => `${user}/${project}${maybeJoin("#", committish)}`, "pathtemplate"),
+      bugstemplate: /* @__PURE__ */ __name(({ domain, user, project }) => `https://${domain}/${user}/${project}/issues`, "bugstemplate"),
+      hashformat: formatHashFragment
+    };
+    var hosts = {};
+    hosts.github = {
+      // First two are insecure and generally shouldn't be used any more, but
+      // they are still supported.
+      protocols: ["git:", "http:", "git+ssh:", "git+https:", "ssh:", "https:"],
+      domain: "github.com",
+      treepath: "tree",
+      blobpath: "blob",
+      editpath: "edit",
+      filetemplate: /* @__PURE__ */ __name(({ auth, user, project, committish, path }) => `https://${maybeJoin(auth, "@")}raw.githubusercontent.com/${user}/${project}/${maybeEncode(committish || "HEAD")}/${path}`, "filetemplate"),
+      gittemplate: /* @__PURE__ */ __name(({ auth, domain, user, project, committish }) => `git://${maybeJoin(auth, "@")}${domain}/${user}/${project}.git${maybeJoin("#", committish)}`, "gittemplate"),
+      tarballtemplate: /* @__PURE__ */ __name(({ domain, user, project, committish }) => `https://codeload.${domain}/${user}/${project}/tar.gz/${maybeEncode(committish || "HEAD")}`, "tarballtemplate"),
+      extract: /* @__PURE__ */ __name((url) => {
+        let [, user, project, type, committish] = url.pathname.split("/", 5);
+        if (type && type !== "tree") {
+          return;
+        }
+        if (!type) {
+          committish = url.hash.slice(1);
+        }
+        if (project && project.endsWith(".git")) {
+          project = project.slice(0, -4);
+        }
+        if (!user || !project) {
+          return;
+        }
+        return { user, project, committish };
+      }, "extract")
+    };
+    hosts.bitbucket = {
+      protocols: ["git+ssh:", "git+https:", "ssh:", "https:"],
+      domain: "bitbucket.org",
+      treepath: "src",
+      blobpath: "src",
+      editpath: "?mode=edit",
+      edittemplate: /* @__PURE__ */ __name(({ domain, user, project, committish, treepath, path, editpath }) => `https://${domain}/${user}/${project}${maybeJoin("/", treepath, "/", maybeEncode(committish || "HEAD"), "/", path, editpath)}`, "edittemplate"),
+      tarballtemplate: /* @__PURE__ */ __name(({ domain, user, project, committish }) => `https://${domain}/${user}/${project}/get/${maybeEncode(committish || "HEAD")}.tar.gz`, "tarballtemplate"),
+      extract: /* @__PURE__ */ __name((url) => {
+        let [, user, project, aux] = url.pathname.split("/", 4);
+        if (["get"].includes(aux)) {
+          return;
+        }
+        if (project && project.endsWith(".git")) {
+          project = project.slice(0, -4);
+        }
+        if (!user || !project) {
+          return;
+        }
+        return { user, project, committish: url.hash.slice(1) };
+      }, "extract")
+    };
+    hosts.gitlab = {
+      protocols: ["git+ssh:", "git+https:", "ssh:", "https:"],
+      domain: "gitlab.com",
+      treepath: "tree",
+      blobpath: "tree",
+      editpath: "-/edit",
+      httpstemplate: /* @__PURE__ */ __name(({ auth, domain, user, project, committish }) => `git+https://${maybeJoin(auth, "@")}${domain}/${user}/${project}.git${maybeJoin("#", committish)}`, "httpstemplate"),
+      tarballtemplate: /* @__PURE__ */ __name(({ domain, user, project, committish }) => `https://${domain}/${user}/${project}/repository/archive.tar.gz?ref=${maybeEncode(committish || "HEAD")}`, "tarballtemplate"),
+      extract: /* @__PURE__ */ __name((url) => {
+        const path = url.pathname.slice(1);
+        if (path.includes("/-/") || path.includes("/archive.tar.gz")) {
+          return;
+        }
+        const segments = path.split("/");
+        let project = segments.pop();
+        if (project.endsWith(".git")) {
+          project = project.slice(0, -4);
+        }
+        const user = segments.join("/");
+        if (!user || !project) {
+          return;
+        }
+        return { user, project, committish: url.hash.slice(1) };
+      }, "extract")
+    };
+    hosts.gist = {
+      protocols: ["git:", "git+ssh:", "git+https:", "ssh:", "https:"],
+      domain: "gist.github.com",
+      editpath: "edit",
+      sshtemplate: /* @__PURE__ */ __name(({ domain, project, committish }) => `git@${domain}:${project}.git${maybeJoin("#", committish)}`, "sshtemplate"),
+      sshurltemplate: /* @__PURE__ */ __name(({ domain, project, committish }) => `git+ssh://git@${domain}/${project}.git${maybeJoin("#", committish)}`, "sshurltemplate"),
+      edittemplate: /* @__PURE__ */ __name(({ domain, user, project, committish, editpath }) => `https://${domain}/${user}/${project}${maybeJoin("/", maybeEncode(committish))}/${editpath}`, "edittemplate"),
+      browsetemplate: /* @__PURE__ */ __name(({ domain, project, committish }) => `https://${domain}/${project}${maybeJoin("/", maybeEncode(committish))}`, "browsetemplate"),
+      browsetreetemplate: /* @__PURE__ */ __name(({ domain, project, committish, path, hashformat }) => `https://${domain}/${project}${maybeJoin("/", maybeEncode(committish))}${maybeJoin("#", hashformat(path))}`, "browsetreetemplate"),
+      browseblobtemplate: /* @__PURE__ */ __name(({ domain, project, committish, path, hashformat }) => `https://${domain}/${project}${maybeJoin("/", maybeEncode(committish))}${maybeJoin("#", hashformat(path))}`, "browseblobtemplate"),
+      docstemplate: /* @__PURE__ */ __name(({ domain, project, committish }) => `https://${domain}/${project}${maybeJoin("/", maybeEncode(committish))}`, "docstemplate"),
+      httpstemplate: /* @__PURE__ */ __name(({ domain, project, committish }) => `git+https://${domain}/${project}.git${maybeJoin("#", committish)}`, "httpstemplate"),
+      filetemplate: /* @__PURE__ */ __name(({ user, project, committish, path }) => `https://gist.githubusercontent.com/${user}/${project}/raw${maybeJoin("/", maybeEncode(committish))}/${path}`, "filetemplate"),
+      shortcuttemplate: /* @__PURE__ */ __name(({ type, project, committish }) => `${type}:${project}${maybeJoin("#", committish)}`, "shortcuttemplate"),
+      pathtemplate: /* @__PURE__ */ __name(({ project, committish }) => `${project}${maybeJoin("#", committish)}`, "pathtemplate"),
+      bugstemplate: /* @__PURE__ */ __name(({ domain, project }) => `https://${domain}/${project}`, "bugstemplate"),
+      gittemplate: /* @__PURE__ */ __name(({ domain, project, committish }) => `git://${domain}/${project}.git${maybeJoin("#", committish)}`, "gittemplate"),
+      tarballtemplate: /* @__PURE__ */ __name(({ project, committish }) => `https://codeload.github.com/gist/${project}/tar.gz/${maybeEncode(committish || "HEAD")}`, "tarballtemplate"),
+      extract: /* @__PURE__ */ __name((url) => {
+        let [, user, project, aux] = url.pathname.split("/", 4);
+        if (aux === "raw") {
+          return;
+        }
+        if (!project) {
+          if (!user) {
+            return;
+          }
+          project = user;
+          user = null;
+        }
+        if (project.endsWith(".git")) {
+          project = project.slice(0, -4);
+        }
+        return { user, project, committish: url.hash.slice(1) };
+      }, "extract"),
+      hashformat: /* @__PURE__ */ __name(function(fragment) {
+        return fragment && "file-" + formatHashFragment(fragment);
+      }, "hashformat")
+    };
+    hosts.sourcehut = {
+      protocols: ["git+ssh:", "https:"],
+      domain: "git.sr.ht",
+      treepath: "tree",
+      blobpath: "tree",
+      filetemplate: /* @__PURE__ */ __name(({ domain, user, project, committish, path }) => `https://${domain}/${user}/${project}/blob/${maybeEncode(committish) || "HEAD"}/${path}`, "filetemplate"),
+      httpstemplate: /* @__PURE__ */ __name(({ domain, user, project, committish }) => `https://${domain}/${user}/${project}.git${maybeJoin("#", committish)}`, "httpstemplate"),
+      tarballtemplate: /* @__PURE__ */ __name(({ domain, user, project, committish }) => `https://${domain}/${user}/${project}/archive/${maybeEncode(committish) || "HEAD"}.tar.gz`, "tarballtemplate"),
+      bugstemplate: /* @__PURE__ */ __name(() => null, "bugstemplate"),
+      extract: /* @__PURE__ */ __name((url) => {
+        let [, user, project, aux] = url.pathname.split("/", 4);
+        if (["archive"].includes(aux)) {
+          return;
+        }
+        if (project && project.endsWith(".git")) {
+          project = project.slice(0, -4);
+        }
+        if (!user || !project) {
+          return;
+        }
+        return { user, project, committish: url.hash.slice(1) };
+      }, "extract")
+    };
+    for (const [name, host] of Object.entries(hosts)) {
+      hosts[name] = Object.assign({}, defaults, host);
+    }
+    module2.exports = hosts;
+  }
+});
+
+// node_modules/.pnpm/hosted-git-info@8.1.0/node_modules/hosted-git-info/lib/parse-url.js
+var require_parse_url = __commonJS({
+  "node_modules/.pnpm/hosted-git-info@8.1.0/node_modules/hosted-git-info/lib/parse-url.js"(exports2, module2) {
+    var url = require("url");
+    var lastIndexOfBefore = /* @__PURE__ */ __name((str, char, beforeChar) => {
+      const startPosition = str.indexOf(beforeChar);
+      return str.lastIndexOf(char, startPosition > -1 ? startPosition : Infinity);
+    }, "lastIndexOfBefore");
+    var safeUrl = /* @__PURE__ */ __name((u) => {
+      try {
+        return new url.URL(u);
+      } catch {
+      }
+    }, "safeUrl");
+    var correctProtocol = /* @__PURE__ */ __name((arg, protocols) => {
+      const firstColon = arg.indexOf(":");
+      const proto = arg.slice(0, firstColon + 1);
+      if (Object.prototype.hasOwnProperty.call(protocols, proto)) {
+        return arg;
+      }
+      const firstAt = arg.indexOf("@");
+      if (firstAt > -1) {
+        if (firstAt > firstColon) {
+          return `git+ssh://${arg}`;
+        } else {
+          return arg;
+        }
+      }
+      const doubleSlash = arg.indexOf("//");
+      if (doubleSlash === firstColon + 1) {
+        return arg;
+      }
+      return `${arg.slice(0, firstColon + 1)}//${arg.slice(firstColon + 1)}`;
+    }, "correctProtocol");
+    var correctUrl = /* @__PURE__ */ __name((giturl) => {
+      const firstAt = lastIndexOfBefore(giturl, "@", "#");
+      const lastColonBeforeHash = lastIndexOfBefore(giturl, ":", "#");
+      if (lastColonBeforeHash > firstAt) {
+        giturl = giturl.slice(0, lastColonBeforeHash) + "/" + giturl.slice(lastColonBeforeHash + 1);
+      }
+      if (lastIndexOfBefore(giturl, ":", "#") === -1 && giturl.indexOf("//") === -1) {
+        giturl = `git+ssh://${giturl}`;
+      }
+      return giturl;
+    }, "correctUrl");
+    module2.exports = (giturl, protocols) => {
+      const withProtocol = protocols ? correctProtocol(giturl, protocols) : giturl;
+      return safeUrl(withProtocol) || safeUrl(correctUrl(withProtocol));
+    };
+  }
+});
+
+// node_modules/.pnpm/hosted-git-info@8.1.0/node_modules/hosted-git-info/lib/from-url.js
+var require_from_url = __commonJS({
+  "node_modules/.pnpm/hosted-git-info@8.1.0/node_modules/hosted-git-info/lib/from-url.js"(exports2, module2) {
+    "use strict";
+    var parseUrl = require_parse_url();
+    var isGitHubShorthand = /* @__PURE__ */ __name((arg) => {
+      const firstHash = arg.indexOf("#");
+      const firstSlash = arg.indexOf("/");
+      const secondSlash = arg.indexOf("/", firstSlash + 1);
+      const firstColon = arg.indexOf(":");
+      const firstSpace = /\s/.exec(arg);
+      const firstAt = arg.indexOf("@");
+      const spaceOnlyAfterHash = !firstSpace || firstHash > -1 && firstSpace.index > firstHash;
+      const atOnlyAfterHash = firstAt === -1 || firstHash > -1 && firstAt > firstHash;
+      const colonOnlyAfterHash = firstColon === -1 || firstHash > -1 && firstColon > firstHash;
+      const secondSlashOnlyAfterHash = secondSlash === -1 || firstHash > -1 && secondSlash > firstHash;
+      const hasSlash = firstSlash > 0;
+      const doesNotEndWithSlash = firstHash > -1 ? arg[firstHash - 1] !== "/" : !arg.endsWith("/");
+      const doesNotStartWithDot = !arg.startsWith(".");
+      return spaceOnlyAfterHash && hasSlash && doesNotEndWithSlash && doesNotStartWithDot && atOnlyAfterHash && colonOnlyAfterHash && secondSlashOnlyAfterHash;
+    }, "isGitHubShorthand");
+    module2.exports = (giturl, opts, { gitHosts, protocols }) => {
+      if (!giturl) {
+        return;
+      }
+      const correctedUrl = isGitHubShorthand(giturl) ? `github:${giturl}` : giturl;
+      const parsed = parseUrl(correctedUrl, protocols);
+      if (!parsed) {
+        return;
+      }
+      const gitHostShortcut = gitHosts.byShortcut[parsed.protocol];
+      const gitHostDomain = gitHosts.byDomain[parsed.hostname.startsWith("www.") ? parsed.hostname.slice(4) : parsed.hostname];
+      const gitHostName = gitHostShortcut || gitHostDomain;
+      if (!gitHostName) {
+        return;
+      }
+      const gitHostInfo = gitHosts[gitHostShortcut || gitHostDomain];
+      let auth = null;
+      if (protocols[parsed.protocol]?.auth && (parsed.username || parsed.password)) {
+        auth = `${parsed.username}${parsed.password ? ":" + parsed.password : ""}`;
+      }
+      let committish = null;
+      let user = null;
+      let project = null;
+      let defaultRepresentation = null;
+      try {
+        if (gitHostShortcut) {
+          let pathname = parsed.pathname.startsWith("/") ? parsed.pathname.slice(1) : parsed.pathname;
+          const firstAt = pathname.indexOf("@");
+          if (firstAt > -1) {
+            pathname = pathname.slice(firstAt + 1);
+          }
+          const lastSlash = pathname.lastIndexOf("/");
+          if (lastSlash > -1) {
+            user = decodeURIComponent(pathname.slice(0, lastSlash));
+            if (!user) {
+              user = null;
+            }
+            project = decodeURIComponent(pathname.slice(lastSlash + 1));
+          } else {
+            project = decodeURIComponent(pathname);
+          }
+          if (project.endsWith(".git")) {
+            project = project.slice(0, -4);
+          }
+          if (parsed.hash) {
+            committish = decodeURIComponent(parsed.hash.slice(1));
+          }
+          defaultRepresentation = "shortcut";
+        } else {
+          if (!gitHostInfo.protocols.includes(parsed.protocol)) {
+            return;
+          }
+          const segments = gitHostInfo.extract(parsed);
+          if (!segments) {
+            return;
+          }
+          user = segments.user && decodeURIComponent(segments.user);
+          project = decodeURIComponent(segments.project);
+          committish = decodeURIComponent(segments.committish);
+          defaultRepresentation = protocols[parsed.protocol]?.name || parsed.protocol.slice(0, -1);
+        }
+      } catch (err) {
+        if (err instanceof URIError) {
+          return;
+        } else {
+          throw err;
+        }
+      }
+      return [gitHostName, user, auth, project, committish, defaultRepresentation, opts];
+    };
+  }
+});
+
+// node_modules/.pnpm/hosted-git-info@8.1.0/node_modules/hosted-git-info/lib/index.js
+var require_lib3 = __commonJS({
+  "node_modules/.pnpm/hosted-git-info@8.1.0/node_modules/hosted-git-info/lib/index.js"(exports2, module2) {
+    "use strict";
+    var { LRUCache } = require_commonjs();
+    var hosts = require_hosts();
+    var fromUrl = require_from_url();
+    var parseUrl = require_parse_url();
+    var cache = new LRUCache({ max: 1e3 });
+    function unknownHostedUrl(url) {
+      try {
+        const {
+          protocol,
+          hostname,
+          pathname
+        } = new URL(url);
+        if (!hostname) {
+          return null;
+        }
+        const proto = /(?:git\+)http:$/.test(protocol) ? "http:" : "https:";
+        const path = pathname.replace(/\.git$/, "");
+        return `${proto}//${hostname}${path}`;
+      } catch {
+        return null;
+      }
+    }
+    __name(unknownHostedUrl, "unknownHostedUrl");
+    var GitHost = class _GitHost {
+      static {
+        __name(this, "GitHost");
+      }
+      constructor(type, user, auth, project, committish, defaultRepresentation, opts = {}) {
+        Object.assign(this, _GitHost.#gitHosts[type], {
+          type,
+          user,
+          auth,
+          project,
+          committish,
+          default: defaultRepresentation,
+          opts
+        });
+      }
+      static #gitHosts = { byShortcut: {}, byDomain: {} };
+      static #protocols = {
+        "git+ssh:": { name: "sshurl" },
+        "ssh:": { name: "sshurl" },
+        "git+https:": { name: "https", auth: true },
+        "git:": { auth: true },
+        "http:": { auth: true },
+        "https:": { auth: true },
+        "git+http:": { auth: true }
+      };
+      static addHost(name, host) {
+        _GitHost.#gitHosts[name] = host;
+        _GitHost.#gitHosts.byDomain[host.domain] = name;
+        _GitHost.#gitHosts.byShortcut[`${name}:`] = name;
+        _GitHost.#protocols[`${name}:`] = { name };
+      }
+      static fromUrl(giturl, opts) {
+        if (typeof giturl !== "string") {
+          return;
+        }
+        const key = giturl + JSON.stringify(opts || {});
+        if (!cache.has(key)) {
+          const hostArgs = fromUrl(giturl, opts, {
+            gitHosts: _GitHost.#gitHosts,
+            protocols: _GitHost.#protocols
+          });
+          cache.set(key, hostArgs ? new _GitHost(...hostArgs) : void 0);
+        }
+        return cache.get(key);
+      }
+      static fromManifest(manifest, opts = {}) {
+        if (!manifest || typeof manifest !== "object") {
+          return;
+        }
+        const r = manifest.repository;
+        const rurl = r && (typeof r === "string" ? r : typeof r === "object" && typeof r.url === "string" ? r.url : null);
+        if (!rurl) {
+          throw new Error("no repository");
+        }
+        const info = rurl && _GitHost.fromUrl(rurl.replace(/^git\+/, ""), opts) || null;
+        if (info) {
+          return info;
+        }
+        const unk = unknownHostedUrl(rurl);
+        return _GitHost.fromUrl(unk, opts) || unk;
+      }
+      static parseUrl(url) {
+        return parseUrl(url);
+      }
+      #fill(template, opts) {
+        if (typeof template !== "function") {
+          return null;
+        }
+        const options = { ...this, ...this.opts, ...opts };
+        if (!options.path) {
+          options.path = "";
+        }
+        if (options.path.startsWith("/")) {
+          options.path = options.path.slice(1);
+        }
+        if (options.noCommittish) {
+          options.committish = null;
+        }
+        const result = template(options);
+        return options.noGitPlus && result.startsWith("git+") ? result.slice(4) : result;
+      }
+      hash() {
+        return this.committish ? `#${this.committish}` : "";
+      }
+      ssh(opts) {
+        return this.#fill(this.sshtemplate, opts);
+      }
+      sshurl(opts) {
+        return this.#fill(this.sshurltemplate, opts);
+      }
+      browse(path, ...args) {
+        if (typeof path !== "string") {
+          return this.#fill(this.browsetemplate, path);
+        }
+        if (typeof args[0] !== "string") {
+          return this.#fill(this.browsetreetemplate, { ...args[0], path });
+        }
+        return this.#fill(this.browsetreetemplate, { ...args[1], fragment: args[0], path });
+      }
+      // If the path is known to be a file, then browseFile should be used. For some hosts
+      // the url is the same as browse, but for others like GitHub a file can use both `/tree/`
+      // and `/blob/` in the path. When using a default committish of `HEAD` then the `/tree/`
+      // path will redirect to a specific commit. Using the `/blob/` path avoids this and
+      // does not redirect to a different commit.
+      browseFile(path, ...args) {
+        if (typeof args[0] !== "string") {
+          return this.#fill(this.browseblobtemplate, { ...args[0], path });
+        }
+        return this.#fill(this.browseblobtemplate, { ...args[1], fragment: args[0], path });
+      }
+      docs(opts) {
+        return this.#fill(this.docstemplate, opts);
+      }
+      bugs(opts) {
+        return this.#fill(this.bugstemplate, opts);
+      }
+      https(opts) {
+        return this.#fill(this.httpstemplate, opts);
+      }
+      git(opts) {
+        return this.#fill(this.gittemplate, opts);
+      }
+      shortcut(opts) {
+        return this.#fill(this.shortcuttemplate, opts);
+      }
+      path(opts) {
+        return this.#fill(this.pathtemplate, opts);
+      }
+      tarball(opts) {
+        return this.#fill(this.tarballtemplate, { ...opts, noCommittish: false });
+      }
+      file(path, opts) {
+        return this.#fill(this.filetemplate, { ...opts, path });
+      }
+      edit(path, opts) {
+        return this.#fill(this.edittemplate, { ...opts, path });
+      }
+      getDefaultRepresentation() {
+        return this.default;
+      }
+      toString(opts) {
+        if (this.default && typeof this[this.default] === "function") {
+          return this[this.default](opts);
+        }
+        return this.sshurl(opts);
+      }
+    };
+    for (const [name, host] of Object.entries(hosts)) {
+      GitHost.addHost(name, host);
+    }
+    module2.exports = GitHost;
+  }
+});
+
+// node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/commonjs/index.js
+var require_commonjs2 = __commonJS({
+  "node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/commonjs/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.range = exports2.balanced = void 0;
+    var balanced = /* @__PURE__ */ __name((a, b, str) => {
+      const ma = a instanceof RegExp ? maybeMatch(a, str) : a;
+      const mb = b instanceof RegExp ? maybeMatch(b, str) : b;
+      const r = ma !== null && mb != null && (0, exports2.range)(ma, mb, str);
+      return r && {
+        start: r[0],
+        end: r[1],
+        pre: str.slice(0, r[0]),
+        body: str.slice(r[0] + ma.length, r[1]),
+        post: str.slice(r[1] + mb.length)
+      };
+    }, "balanced");
+    exports2.balanced = balanced;
+    var maybeMatch = /* @__PURE__ */ __name((reg, str) => {
+      const m = str.match(reg);
+      return m ? m[0] : null;
+    }, "maybeMatch");
+    var range = /* @__PURE__ */ __name((a, b, str) => {
+      let begs, beg, left, right = void 0, result;
+      let ai = str.indexOf(a);
+      let bi = str.indexOf(b, ai + 1);
+      let i = ai;
+      if (ai >= 0 && bi > 0) {
+        if (a === b) {
+          return [ai, bi];
+        }
+        begs = [];
+        left = str.length;
+        while (i >= 0 && !result) {
+          if (i === ai) {
+            begs.push(i);
+            ai = str.indexOf(a, i + 1);
+          } else if (begs.length === 1) {
+            const r = begs.pop();
+            if (r !== void 0)
+              result = [r, bi];
+          } else {
+            beg = begs.pop();
+            if (beg !== void 0 && beg < left) {
+              left = beg;
+              right = bi;
+            }
+            bi = str.indexOf(b, i + 1);
+          }
+          i = ai < bi && ai >= 0 ? ai : bi;
+        }
+        if (begs.length && right !== void 0) {
+          result = [left, right];
+        }
+      }
+      return result;
+    }, "range");
+    exports2.range = range;
+  }
+});
+
+// node_modules/.pnpm/brace-expansion@5.0.5/node_modules/brace-expansion/dist/commonjs/index.js
+var require_commonjs3 = __commonJS({
+  "node_modules/.pnpm/brace-expansion@5.0.5/node_modules/brace-expansion/dist/commonjs/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.EXPANSION_MAX = void 0;
+    exports2.expand = expand;
+    var balanced_match_1 = require_commonjs2();
+    var escSlash = "\0SLASH" + Math.random() + "\0";
+    var escOpen = "\0OPEN" + Math.random() + "\0";
+    var escClose = "\0CLOSE" + Math.random() + "\0";
+    var escComma = "\0COMMA" + Math.random() + "\0";
+    var escPeriod = "\0PERIOD" + Math.random() + "\0";
+    var escSlashPattern = new RegExp(escSlash, "g");
+    var escOpenPattern = new RegExp(escOpen, "g");
+    var escClosePattern = new RegExp(escClose, "g");
+    var escCommaPattern = new RegExp(escComma, "g");
+    var escPeriodPattern = new RegExp(escPeriod, "g");
+    var slashPattern = /\\\\/g;
+    var openPattern = /\\{/g;
+    var closePattern = /\\}/g;
+    var commaPattern = /\\,/g;
+    var periodPattern = /\\\./g;
+    exports2.EXPANSION_MAX = 1e5;
+    function numeric(str) {
+      return !isNaN(str) ? parseInt(str, 10) : str.charCodeAt(0);
+    }
+    __name(numeric, "numeric");
+    function escapeBraces(str) {
+      return str.replace(slashPattern, escSlash).replace(openPattern, escOpen).replace(closePattern, escClose).replace(commaPattern, escComma).replace(periodPattern, escPeriod);
+    }
+    __name(escapeBraces, "escapeBraces");
+    function unescapeBraces(str) {
+      return str.replace(escSlashPattern, "\\").replace(escOpenPattern, "{").replace(escClosePattern, "}").replace(escCommaPattern, ",").replace(escPeriodPattern, ".");
+    }
+    __name(unescapeBraces, "unescapeBraces");
+    function parseCommaParts(str) {
+      if (!str) {
+        return [""];
+      }
+      const parts = [];
+      const m = (0, balanced_match_1.balanced)("{", "}", str);
+      if (!m) {
+        return str.split(",");
+      }
+      const { pre, body, post } = m;
+      const p = pre.split(",");
+      p[p.length - 1] += "{" + body + "}";
+      const postParts = parseCommaParts(post);
+      if (post.length) {
+        ;
+        p[p.length - 1] += postParts.shift();
+        p.push.apply(p, postParts);
+      }
+      parts.push.apply(parts, p);
+      return parts;
+    }
+    __name(parseCommaParts, "parseCommaParts");
+    function expand(str, options = {}) {
+      if (!str) {
+        return [];
+      }
+      const { max = exports2.EXPANSION_MAX } = options;
+      if (str.slice(0, 2) === "{}") {
+        str = "\\{\\}" + str.slice(2);
+      }
+      return expand_(escapeBraces(str), max, true).map(unescapeBraces);
+    }
+    __name(expand, "expand");
+    function embrace(str) {
+      return "{" + str + "}";
+    }
+    __name(embrace, "embrace");
+    function isPadded(el) {
+      return /^-?0\d/.test(el);
+    }
+    __name(isPadded, "isPadded");
+    function lte(i, y) {
+      return i <= y;
+    }
+    __name(lte, "lte");
+    function gte(i, y) {
+      return i >= y;
+    }
+    __name(gte, "gte");
+    function expand_(str, max, isTop) {
+      const expansions = [];
+      const m = (0, balanced_match_1.balanced)("{", "}", str);
+      if (!m)
+        return [str];
+      const pre = m.pre;
+      const post = m.post.length ? expand_(m.post, max, false) : [""];
+      if (/\$$/.test(m.pre)) {
+        for (let k = 0; k < post.length && k < max; k++) {
+          const expansion = pre + "{" + m.body + "}" + post[k];
+          expansions.push(expansion);
+        }
+      } else {
+        const isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
+        const isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
+        const isSequence = isNumericSequence || isAlphaSequence;
+        const isOptions = m.body.indexOf(",") >= 0;
+        if (!isSequence && !isOptions) {
+          if (m.post.match(/,(?!,).*\}/)) {
+            str = m.pre + "{" + m.body + escClose + m.post;
+            return expand_(str, max, true);
+          }
+          return [str];
+        }
+        let n;
+        if (isSequence) {
+          n = m.body.split(/\.\./);
+        } else {
+          n = parseCommaParts(m.body);
+          if (n.length === 1 && n[0] !== void 0) {
+            n = expand_(n[0], max, false).map(embrace);
+            if (n.length === 1) {
+              return post.map((p) => m.pre + n[0] + p);
+            }
+          }
+        }
+        let N;
+        if (isSequence && n[0] !== void 0 && n[1] !== void 0) {
+          const x = numeric(n[0]);
+          const y = numeric(n[1]);
+          const width = Math.max(n[0].length, n[1].length);
+          let incr = n.length === 3 && n[2] !== void 0 ? Math.max(Math.abs(numeric(n[2])), 1) : 1;
+          let test = lte;
+          const reverse = y < x;
+          if (reverse) {
+            incr *= -1;
+            test = gte;
+          }
+          const pad = n.some(isPadded);
+          N = [];
+          for (let i = x; test(i, y); i += incr) {
+            let c;
+            if (isAlphaSequence) {
+              c = String.fromCharCode(i);
+              if (c === "\\") {
+                c = "";
+              }
+            } else {
+              c = String(i);
+              if (pad) {
+                const need = width - c.length;
+                if (need > 0) {
+                  const z = new Array(need + 1).join("0");
+                  if (i < 0) {
+                    c = "-" + z + c.slice(1);
+                  } else {
+                    c = z + c;
+                  }
+                }
+              }
+            }
+            N.push(c);
+          }
+        } else {
+          N = [];
+          for (let j = 0; j < n.length; j++) {
+            N.push.apply(N, expand_(n[j], max, false));
+          }
+        }
+        for (let j = 0; j < N.length; j++) {
+          for (let k = 0; k < post.length && expansions.length < max; k++) {
+            const expansion = pre + N[j] + post[k];
+            if (!isTop || isSequence || expansion) {
+              expansions.push(expansion);
+            }
+          }
+        }
+      }
+      return expansions;
+    }
+    __name(expand_, "expand_");
+  }
+});
+
+// node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js
+var require_assert_valid_pattern = __commonJS({
+  "node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.assertValidPattern = void 0;
+    var MAX_PATTERN_LENGTH = 1024 * 64;
+    var assertValidPattern = /* @__PURE__ */ __name((pattern) => {
+      if (typeof pattern !== "string") {
+        throw new TypeError("invalid pattern");
+      }
+      if (pattern.length > MAX_PATTERN_LENGTH) {
+        throw new TypeError("pattern is too long");
+      }
+    }, "assertValidPattern");
+    exports2.assertValidPattern = assertValidPattern;
+  }
+});
+
+// node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/brace-expressions.js
+var require_brace_expressions = __commonJS({
+  "node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/brace-expressions.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.parseClass = void 0;
+    var posixClasses = {
+      "[:alnum:]": ["\\p{L}\\p{Nl}\\p{Nd}", true],
+      "[:alpha:]": ["\\p{L}\\p{Nl}", true],
+      "[:ascii:]": ["\\x00-\\x7f", false],
+      "[:blank:]": ["\\p{Zs}\\t", true],
+      "[:cntrl:]": ["\\p{Cc}", true],
+      "[:digit:]": ["\\p{Nd}", true],
+      "[:graph:]": ["\\p{Z}\\p{C}", true, true],
+      "[:lower:]": ["\\p{Ll}", true],
+      "[:print:]": ["\\p{C}", true],
+      "[:punct:]": ["\\p{P}", true],
+      "[:space:]": ["\\p{Z}\\t\\r\\n\\v\\f", true],
+      "[:upper:]": ["\\p{Lu}", true],
+      "[:word:]": ["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}", true],
+      "[:xdigit:]": ["A-Fa-f0-9", false]
+    };
+    var braceEscape = /* @__PURE__ */ __name((s) => s.replace(/[[\]\\-]/g, "\\$&"), "braceEscape");
+    var regexpEscape = /* @__PURE__ */ __name((s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), "regexpEscape");
+    var rangesToString = /* @__PURE__ */ __name((ranges) => ranges.join(""), "rangesToString");
+    var parseClass = /* @__PURE__ */ __name((glob, position) => {
+      const pos = position;
+      if (glob.charAt(pos) !== "[") {
+        throw new Error("not in a brace expression");
+      }
+      const ranges = [];
+      const negs = [];
+      let i = pos + 1;
+      let sawStart = false;
+      let uflag = false;
+      let escaping = false;
+      let negate = false;
+      let endPos = pos;
+      let rangeStart = "";
+      WHILE: while (i < glob.length) {
+        const c = glob.charAt(i);
+        if ((c === "!" || c === "^") && i === pos + 1) {
+          negate = true;
+          i++;
+          continue;
+        }
+        if (c === "]" && sawStart && !escaping) {
+          endPos = i + 1;
+          break;
+        }
+        sawStart = true;
+        if (c === "\\") {
+          if (!escaping) {
+            escaping = true;
+            i++;
+            continue;
+          }
+        }
+        if (c === "[" && !escaping) {
+          for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) {
+            if (glob.startsWith(cls, i)) {
+              if (rangeStart) {
+                return ["$.", false, glob.length - pos, true];
+              }
+              i += cls.length;
+              if (neg)
+                negs.push(unip);
+              else
+                ranges.push(unip);
+              uflag = uflag || u;
+              continue WHILE;
+            }
+          }
+        }
+        escaping = false;
+        if (rangeStart) {
+          if (c > rangeStart) {
+            ranges.push(braceEscape(rangeStart) + "-" + braceEscape(c));
+          } else if (c === rangeStart) {
+            ranges.push(braceEscape(c));
+          }
+          rangeStart = "";
+          i++;
+          continue;
+        }
+        if (glob.startsWith("-]", i + 1)) {
+          ranges.push(braceEscape(c + "-"));
+          i += 2;
+          continue;
+        }
+        if (glob.startsWith("-", i + 1)) {
+          rangeStart = c;
+          i += 2;
+          continue;
+        }
+        ranges.push(braceEscape(c));
+        i++;
+      }
+      if (endPos < i) {
+        return ["", false, 0, false];
+      }
+      if (!ranges.length && !negs.length) {
+        return ["$.", false, glob.length - pos, true];
+      }
+      if (negs.length === 0 && ranges.length === 1 && /^\\?.$/.test(ranges[0]) && !negate) {
+        const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0];
+        return [regexpEscape(r), false, endPos - pos, false];
+      }
+      const sranges = "[" + (negate ? "^" : "") + rangesToString(ranges) + "]";
+      const snegs = "[" + (negate ? "" : "^") + rangesToString(negs) + "]";
+      const comb = ranges.length && negs.length ? "(" + sranges + "|" + snegs + ")" : ranges.length ? sranges : snegs;
+      return [comb, uflag, endPos - pos, true];
+    }, "parseClass");
+    exports2.parseClass = parseClass;
+  }
+});
+
+// node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/unescape.js
+var require_unescape = __commonJS({
+  "node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/unescape.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.unescape = void 0;
+    var unescape = /* @__PURE__ */ __name((s, { windowsPathsNoEscape = false } = {}) => {
+      return windowsPathsNoEscape ? s.replace(/\[([^\/\\])\]/g, "$1") : s.replace(/((?!\\).|^)\[([^\/\\])\]/g, "$1$2").replace(/\\([^\/])/g, "$1");
+    }, "unescape");
+    exports2.unescape = unescape;
+  }
+});
+
+// node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/ast.js
+var require_ast = __commonJS({
+  "node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/ast.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.AST = void 0;
+    var brace_expressions_js_1 = require_brace_expressions();
+    var unescape_js_1 = require_unescape();
+    var types = /* @__PURE__ */ new Set(["!", "?", "+", "*", "@"]);
+    var isExtglobType = /* @__PURE__ */ __name((c) => types.has(c), "isExtglobType");
+    var startNoTraversal = "(?!(?:^|/)\\.\\.?(?:$|/))";
+    var startNoDot = "(?!\\.)";
+    var addPatternStart = /* @__PURE__ */ new Set(["[", "."]);
+    var justDots = /* @__PURE__ */ new Set(["..", "."]);
+    var reSpecials = new Set("().*{}+?[]^$\\!");
+    var regExpEscape = /* @__PURE__ */ __name((s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), "regExpEscape");
+    var qmark = "[^/]";
+    var star = qmark + "*?";
+    var starNoEmpty = qmark + "+?";
+    var AST = class _AST {
+      static {
+        __name(this, "AST");
+      }
+      type;
+      #root;
+      #hasMagic;
+      #uflag = false;
+      #parts = [];
+      #parent;
+      #parentIndex;
+      #negs;
+      #filledNegs = false;
+      #options;
+      #toString;
+      // set to true if it's an extglob with no children
+      // (which really means one child of '')
+      #emptyExt = false;
+      constructor(type, parent, options = {}) {
+        this.type = type;
+        if (type)
+          this.#hasMagic = true;
+        this.#parent = parent;
+        this.#root = this.#parent ? this.#parent.#root : this;
+        this.#options = this.#root === this ? options : this.#root.#options;
+        this.#negs = this.#root === this ? [] : this.#root.#negs;
+        if (type === "!" && !this.#root.#filledNegs)
+          this.#negs.push(this);
+        this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0;
+      }
+      get hasMagic() {
+        if (this.#hasMagic !== void 0)
+          return this.#hasMagic;
+        for (const p of this.#parts) {
+          if (typeof p === "string")
+            continue;
+          if (p.type || p.hasMagic)
+            return this.#hasMagic = true;
+        }
+        return this.#hasMagic;
+      }
+      // reconstructs the pattern
+      toString() {
+        if (this.#toString !== void 0)
+          return this.#toString;
+        if (!this.type) {
+          return this.#toString = this.#parts.map((p) => String(p)).join("");
+        } else {
+          return this.#toString = this.type + "(" + this.#parts.map((p) => String(p)).join("|") + ")";
+        }
+      }
+      #fillNegs() {
+        if (this !== this.#root)
+          throw new Error("should only call on root");
+        if (this.#filledNegs)
+          return this;
+        this.toString();
+        this.#filledNegs = true;
+        let n;
+        while (n = this.#negs.pop()) {
+          if (n.type !== "!")
+            continue;
+          let p = n;
+          let pp = p.#parent;
+          while (pp) {
+            for (let i = p.#parentIndex + 1; !pp.type && i < pp.#parts.length; i++) {
+              for (const part of n.#parts) {
+                if (typeof part === "string") {
+                  throw new Error("string part in extglob AST??");
+                }
+                part.copyIn(pp.#parts[i]);
+              }
+            }
+            p = pp;
+            pp = p.#parent;
+          }
+        }
+        return this;
+      }
+      push(...parts) {
+        for (const p of parts) {
+          if (p === "")
+            continue;
+          if (typeof p !== "string" && !(p instanceof _AST && p.#parent === this)) {
+            throw new Error("invalid part: " + p);
+          }
+          this.#parts.push(p);
+        }
+      }
+      toJSON() {
+        const ret = this.type === null ? this.#parts.slice().map((p) => typeof p === "string" ? p : p.toJSON()) : [this.type, ...this.#parts.map((p) => p.toJSON())];
+        if (this.isStart() && !this.type)
+          ret.unshift([]);
+        if (this.isEnd() && (this === this.#root || this.#root.#filledNegs && this.#parent?.type === "!")) {
+          ret.push({});
+        }
+        return ret;
+      }
+      isStart() {
+        if (this.#root === this)
+          return true;
+        if (!this.#parent?.isStart())
+          return false;
+        if (this.#parentIndex === 0)
+          return true;
+        const p = this.#parent;
+        for (let i = 0; i < this.#parentIndex; i++) {
+          const pp = p.#parts[i];
+          if (!(pp instanceof _AST && pp.type === "!")) {
+            return false;
+          }
+        }
+        return true;
+      }
+      isEnd() {
+        if (this.#root === this)
+          return true;
+        if (this.#parent?.type === "!")
+          return true;
+        if (!this.#parent?.isEnd())
+          return false;
+        if (!this.type)
+          return this.#parent?.isEnd();
+        const pl = this.#parent ? this.#parent.#parts.length : 0;
+        return this.#parentIndex === pl - 1;
+      }
+      copyIn(part) {
+        if (typeof part === "string")
+          this.push(part);
+        else
+          this.push(part.clone(this));
+      }
+      clone(parent) {
+        const c = new _AST(this.type, parent);
+        for (const p of this.#parts) {
+          c.copyIn(p);
+        }
+        return c;
+      }
+      static #parseAST(str, ast, pos, opt) {
+        let escaping = false;
+        let inBrace = false;
+        let braceStart = -1;
+        let braceNeg = false;
+        if (ast.type === null) {
+          let i2 = pos;
+          let acc2 = "";
+          while (i2 < str.length) {
+            const c = str.charAt(i2++);
+            if (escaping || c === "\\") {
+              escaping = !escaping;
+              acc2 += c;
+              continue;
+            }
+            if (inBrace) {
+              if (i2 === braceStart + 1) {
+                if (c === "^" || c === "!") {
+                  braceNeg = true;
+                }
+              } else if (c === "]" && !(i2 === braceStart + 2 && braceNeg)) {
+                inBrace = false;
+              }
+              acc2 += c;
+              continue;
+            } else if (c === "[") {
+              inBrace = true;
+              braceStart = i2;
+              braceNeg = false;
+              acc2 += c;
+              continue;
+            }
+            if (!opt.noext && isExtglobType(c) && str.charAt(i2) === "(") {
+              ast.push(acc2);
+              acc2 = "";
+              const ext = new _AST(c, ast);
+              i2 = _AST.#parseAST(str, ext, i2, opt);
+              ast.push(ext);
+              continue;
+            }
+            acc2 += c;
+          }
+          ast.push(acc2);
+          return i2;
+        }
+        let i = pos + 1;
+        let part = new _AST(null, ast);
+        const parts = [];
+        let acc = "";
+        while (i < str.length) {
+          const c = str.charAt(i++);
+          if (escaping || c === "\\") {
+            escaping = !escaping;
+            acc += c;
+            continue;
+          }
+          if (inBrace) {
+            if (i === braceStart + 1) {
+              if (c === "^" || c === "!") {
+                braceNeg = true;
+              }
+            } else if (c === "]" && !(i === braceStart + 2 && braceNeg)) {
+              inBrace = false;
+            }
+            acc += c;
+            continue;
+          } else if (c === "[") {
+            inBrace = true;
+            braceStart = i;
+            braceNeg = false;
+            acc += c;
+            continue;
+          }
+          if (isExtglobType(c) && str.charAt(i) === "(") {
+            part.push(acc);
+            acc = "";
+            const ext = new _AST(c, part);
+            part.push(ext);
+            i = _AST.#parseAST(str, ext, i, opt);
+            continue;
+          }
+          if (c === "|") {
+            part.push(acc);
+            acc = "";
+            parts.push(part);
+            part = new _AST(null, ast);
+            continue;
+          }
+          if (c === ")") {
+            if (acc === "" && ast.#parts.length === 0) {
+              ast.#emptyExt = true;
+            }
+            part.push(acc);
+            acc = "";
+            ast.push(...parts, part);
+            return i;
+          }
+          acc += c;
+        }
+        ast.type = null;
+        ast.#hasMagic = void 0;
+        ast.#parts = [str.substring(pos - 1)];
+        return i;
+      }
+      static fromGlob(pattern, options = {}) {
+        const ast = new _AST(null, void 0, options);
+        _AST.#parseAST(pattern, ast, 0, options);
+        return ast;
+      }
+      // returns the regular expression if there's magic, or the unescaped
+      // string if not.
+      toMMPattern() {
+        if (this !== this.#root)
+          return this.#root.toMMPattern();
+        const glob = this.toString();
+        const [re, body, hasMagic, uflag] = this.toRegExpSource();
+        const anyMagic = hasMagic || this.#hasMagic || this.#options.nocase && !this.#options.nocaseMagicOnly && glob.toUpperCase() !== glob.toLowerCase();
+        if (!anyMagic) {
+          return body;
+        }
+        const flags = (this.#options.nocase ? "i" : "") + (uflag ? "u" : "");
+        return Object.assign(new RegExp(`^${re}$`, flags), {
+          _src: re,
+          _glob: glob
+        });
+      }
+      get options() {
+        return this.#options;
+      }
+      // returns the string match, the regexp source, whether there's magic
+      // in the regexp (so a regular expression is required) and whether or
+      // not the uflag is needed for the regular expression (for posix classes)
+      // TODO: instead of injecting the start/end at this point, just return
+      // the BODY of the regexp, along with the start/end portions suitable
+      // for binding the start/end in either a joined full-path makeRe context
+      // (where we bind to (^|/), or a standalone matchPart context (where
+      // we bind to ^, and not /).  Otherwise slashes get duped!
+      //
+      // In part-matching mode, the start is:
+      // - if not isStart: nothing
+      // - if traversal possible, but not allowed: ^(?!\.\.?$)
+      // - if dots allowed or not possible: ^
+      // - if dots possible and not allowed: ^(?!\.)
+      // end is:
+      // - if not isEnd(): nothing
+      // - else: $
+      //
+      // In full-path matching mode, we put the slash at the START of the
+      // pattern, so start is:
+      // - if first pattern: same as part-matching mode
+      // - if not isStart(): nothing
+      // - if traversal possible, but not allowed: /(?!\.\.?(?:$|/))
+      // - if dots allowed or not possible: /
+      // - if dots possible and not allowed: /(?!\.)
+      // end is:
+      // - if last pattern, same as part-matching mode
+      // - else nothing
+      //
+      // Always put the (?:$|/) on negated tails, though, because that has to be
+      // there to bind the end of the negated pattern portion, and it's easier to
+      // just stick it in now rather than try to inject it later in the middle of
+      // the pattern.
+      //
+      // We can just always return the same end, and leave it up to the caller
+      // to know whether it's going to be used joined or in parts.
+      // And, if the start is adjusted slightly, can do the same there:
+      // - if not isStart: nothing
+      // - if traversal possible, but not allowed: (?:/|^)(?!\.\.?$)
+      // - if dots allowed or not possible: (?:/|^)
+      // - if dots possible and not allowed: (?:/|^)(?!\.)
+      //
+      // But it's better to have a simpler binding without a conditional, for
+      // performance, so probably better to return both start options.
+      //
+      // Then the caller just ignores the end if it's not the first pattern,
+      // and the start always gets applied.
+      //
+      // But that's always going to be $ if it's the ending pattern, or nothing,
+      // so the caller can just attach $ at the end of the pattern when building.
+      //
+      // So the todo is:
+      // - better detect what kind of start is needed
+      // - return both flavors of starting pattern
+      // - attach $ at the end of the pattern when creating the actual RegExp
+      //
+      // Ah, but wait, no, that all only applies to the root when the first pattern
+      // is not an extglob. If the first pattern IS an extglob, then we need all
+      // that dot prevention biz to live in the extglob portions, because eg
+      // +(*|.x*) can match .xy but not .yx.
+      //
+      // So, return the two flavors if it's #root and the first child is not an
+      // AST, otherwise leave it to the child AST to handle it, and there,
+      // use the (?:^|/) style of start binding.
+      //
+      // Even simplified further:
+      // - Since the start for a join is eg /(?!\.) and the start for a part
+      // is ^(?!\.), we can just prepend (?!\.) to the pattern (either root
+      // or start or whatever) and prepend ^ or / at the Regexp construction.
+      toRegExpSource(allowDot) {
+        const dot = allowDot ?? !!this.#options.dot;
+        if (this.#root === this)
+          this.#fillNegs();
+        if (!this.type) {
+          const noEmpty = this.isStart() && this.isEnd();
+          const src = this.#parts.map((p) => {
+            const [re, _, hasMagic, uflag] = typeof p === "string" ? _AST.#parseGlob(p, this.#hasMagic, noEmpty) : p.toRegExpSource(allowDot);
+            this.#hasMagic = this.#hasMagic || hasMagic;
+            this.#uflag = this.#uflag || uflag;
+            return re;
+          }).join("");
+          let start2 = "";
+          if (this.isStart()) {
+            if (typeof this.#parts[0] === "string") {
+              const dotTravAllowed = this.#parts.length === 1 && justDots.has(this.#parts[0]);
+              if (!dotTravAllowed) {
+                const aps = addPatternStart;
+                const needNoTrav = (
+                  // dots are allowed, and the pattern starts with [ or .
+                  dot && aps.has(src.charAt(0)) || // the pattern starts with \., and then [ or .
+                  src.startsWith("\\.") && aps.has(src.charAt(2)) || // the pattern starts with \.\., and then [ or .
+                  src.startsWith("\\.\\.") && aps.has(src.charAt(4))
+                );
+                const needNoDot = !dot && !allowDot && aps.has(src.charAt(0));
+                start2 = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : "";
+              }
+            }
+          }
+          let end = "";
+          if (this.isEnd() && this.#root.#filledNegs && this.#parent?.type === "!") {
+            end = "(?:$|\\/)";
+          }
+          const final2 = start2 + src + end;
+          return [
+            final2,
+            (0, unescape_js_1.unescape)(src),
+            this.#hasMagic = !!this.#hasMagic,
+            this.#uflag
+          ];
+        }
+        const repeated = this.type === "*" || this.type === "+";
+        const start = this.type === "!" ? "(?:(?!(?:" : "(?:";
+        let body = this.#partsToRegExp(dot);
+        if (this.isStart() && this.isEnd() && !body && this.type !== "!") {
+          const s = this.toString();
+          this.#parts = [s];
+          this.type = null;
+          this.#hasMagic = void 0;
+          return [s, (0, unescape_js_1.unescape)(this.toString()), false, false];
+        }
+        let bodyDotAllowed = !repeated || allowDot || dot || !startNoDot ? "" : this.#partsToRegExp(true);
+        if (bodyDotAllowed === body) {
+          bodyDotAllowed = "";
+        }
+        if (bodyDotAllowed) {
+          body = `(?:${body})(?:${bodyDotAllowed})*?`;
+        }
+        let final = "";
+        if (this.type === "!" && this.#emptyExt) {
+          final = (this.isStart() && !dot ? startNoDot : "") + starNoEmpty;
+        } else {
+          const close = this.type === "!" ? (
+            // !() must match something,but !(x) can match ''
+            "))" + (this.isStart() && !dot && !allowDot ? startNoDot : "") + star + ")"
+          ) : this.type === "@" ? ")" : this.type === "?" ? ")?" : this.type === "+" && bodyDotAllowed ? ")" : this.type === "*" && bodyDotAllowed ? `)?` : `)${this.type}`;
+          final = start + body + close;
+        }
+        return [
+          final,
+          (0, unescape_js_1.unescape)(body),
+          this.#hasMagic = !!this.#hasMagic,
+          this.#uflag
+        ];
+      }
+      #partsToRegExp(dot) {
+        return this.#parts.map((p) => {
+          if (typeof p === "string") {
+            throw new Error("string type in extglob ast??");
+          }
+          const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot);
+          this.#uflag = this.#uflag || uflag;
+          return re;
+        }).filter((p) => !(this.isStart() && this.isEnd()) || !!p).join("|");
+      }
+      static #parseGlob(glob, hasMagic, noEmpty = false) {
+        let escaping = false;
+        let re = "";
+        let uflag = false;
+        let inStar = false;
+        for (let i = 0; i < glob.length; i++) {
+          const c = glob.charAt(i);
+          if (escaping) {
+            escaping = false;
+            re += (reSpecials.has(c) ? "\\" : "") + c;
+            inStar = false;
+            continue;
+          }
+          if (c === "\\") {
+            if (i === glob.length - 1) {
+              re += "\\\\";
+            } else {
+              escaping = true;
+            }
+            continue;
+          }
+          if (c === "[") {
+            const [src, needUflag, consumed, magic] = (0, brace_expressions_js_1.parseClass)(glob, i);
+            if (consumed) {
+              re += src;
+              uflag = uflag || needUflag;
+              i += consumed - 1;
+              hasMagic = hasMagic || magic;
+              inStar = false;
+              continue;
+            }
+          }
+          if (c === "*") {
+            if (inStar)
+              continue;
+            inStar = true;
+            re += noEmpty && /^[*]+$/.test(glob) ? starNoEmpty : star;
+            hasMagic = true;
+            continue;
+          } else {
+            inStar = false;
+          }
+          if (c === "?") {
+            re += qmark;
+            hasMagic = true;
+            continue;
+          }
+          re += regExpEscape(c);
+        }
+        return [re, (0, unescape_js_1.unescape)(glob), !!hasMagic, uflag];
+      }
+    };
+    exports2.AST = AST;
+  }
+});
+
+// node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/escape.js
+var require_escape = __commonJS({
+  "node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/escape.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.escape = void 0;
+    var escape = /* @__PURE__ */ __name((s, { windowsPathsNoEscape = false } = {}) => {
+      return windowsPathsNoEscape ? s.replace(/[?*()[\]]/g, "[$&]") : s.replace(/[?*()[\]\\]/g, "\\$&");
+    }, "escape");
+    exports2.escape = escape;
+  }
+});
+
+// node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/index.js
+var require_commonjs4 = __commonJS({
+  "node_modules/.pnpm/minimatch@9.0.6/node_modules/minimatch/dist/commonjs/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.unescape = exports2.escape = exports2.AST = exports2.Minimatch = exports2.match = exports2.makeRe = exports2.braceExpand = exports2.defaults = exports2.filter = exports2.GLOBSTAR = exports2.sep = exports2.minimatch = void 0;
+    var brace_expansion_1 = require_commonjs3();
+    var assert_valid_pattern_js_1 = require_assert_valid_pattern();
+    var ast_js_1 = require_ast();
+    var escape_js_1 = require_escape();
+    var unescape_js_1 = require_unescape();
+    var minimatch = /* @__PURE__ */ __name((p, pattern, options = {}) => {
+      (0, assert_valid_pattern_js_1.assertValidPattern)(pattern);
+      if (!options.nocomment && pattern.charAt(0) === "#") {
+        return false;
+      }
+      return new Minimatch(pattern, options).match(p);
+    }, "minimatch");
+    exports2.minimatch = minimatch;
+    var starDotExtRE = /^\*+([^+@!?\*\[\(]*)$/;
+    var starDotExtTest = /* @__PURE__ */ __name((ext2) => (f) => !f.startsWith(".") && f.endsWith(ext2), "starDotExtTest");
+    var starDotExtTestDot = /* @__PURE__ */ __name((ext2) => (f) => f.endsWith(ext2), "starDotExtTestDot");
+    var starDotExtTestNocase = /* @__PURE__ */ __name((ext2) => {
+      ext2 = ext2.toLowerCase();
+      return (f) => !f.startsWith(".") && f.toLowerCase().endsWith(ext2);
+    }, "starDotExtTestNocase");
+    var starDotExtTestNocaseDot = /* @__PURE__ */ __name((ext2) => {
+      ext2 = ext2.toLowerCase();
+      return (f) => f.toLowerCase().endsWith(ext2);
+    }, "starDotExtTestNocaseDot");
+    var starDotStarRE = /^\*+\.\*+$/;
+    var starDotStarTest = /* @__PURE__ */ __name((f) => !f.startsWith(".") && f.includes("."), "starDotStarTest");
+    var starDotStarTestDot = /* @__PURE__ */ __name((f) => f !== "." && f !== ".." && f.includes("."), "starDotStarTestDot");
+    var dotStarRE = /^\.\*+$/;
+    var dotStarTest = /* @__PURE__ */ __name((f) => f !== "." && f !== ".." && f.startsWith("."), "dotStarTest");
+    var starRE = /^\*+$/;
+    var starTest = /* @__PURE__ */ __name((f) => f.length !== 0 && !f.startsWith("."), "starTest");
+    var starTestDot = /* @__PURE__ */ __name((f) => f.length !== 0 && f !== "." && f !== "..", "starTestDot");
+    var qmarksRE = /^\?+([^+@!?\*\[\(]*)?$/;
+    var qmarksTestNocase = /* @__PURE__ */ __name(([$0, ext2 = ""]) => {
+      const noext = qmarksTestNoExt([$0]);
+      if (!ext2)
+        return noext;
+      ext2 = ext2.toLowerCase();
+      return (f) => noext(f) && f.toLowerCase().endsWith(ext2);
+    }, "qmarksTestNocase");
+    var qmarksTestNocaseDot = /* @__PURE__ */ __name(([$0, ext2 = ""]) => {
+      const noext = qmarksTestNoExtDot([$0]);
+      if (!ext2)
+        return noext;
+      ext2 = ext2.toLowerCase();
+      return (f) => noext(f) && f.toLowerCase().endsWith(ext2);
+    }, "qmarksTestNocaseDot");
+    var qmarksTestDot = /* @__PURE__ */ __name(([$0, ext2 = ""]) => {
+      const noext = qmarksTestNoExtDot([$0]);
+      return !ext2 ? noext : (f) => noext(f) && f.endsWith(ext2);
+    }, "qmarksTestDot");
+    var qmarksTest = /* @__PURE__ */ __name(([$0, ext2 = ""]) => {
+      const noext = qmarksTestNoExt([$0]);
+      return !ext2 ? noext : (f) => noext(f) && f.endsWith(ext2);
+    }, "qmarksTest");
+    var qmarksTestNoExt = /* @__PURE__ */ __name(([$0]) => {
+      const len = $0.length;
+      return (f) => f.length === len && !f.startsWith(".");
+    }, "qmarksTestNoExt");
+    var qmarksTestNoExtDot = /* @__PURE__ */ __name(([$0]) => {
+      const len = $0.length;
+      return (f) => f.length === len && f !== "." && f !== "..";
+    }, "qmarksTestNoExtDot");
+    var defaultPlatform = typeof process === "object" && process ? typeof process.env === "object" && process.env && process.env.__MINIMATCH_TESTING_PLATFORM__ || process.platform : "posix";
+    var path = {
+      win32: { sep: "\\" },
+      posix: { sep: "/" }
+    };
+    exports2.sep = defaultPlatform === "win32" ? path.win32.sep : path.posix.sep;
+    exports2.minimatch.sep = exports2.sep;
+    exports2.GLOBSTAR = Symbol("globstar **");
+    exports2.minimatch.GLOBSTAR = exports2.GLOBSTAR;
+    var qmark = "[^/]";
+    var star = qmark + "*?";
+    var twoStarDot = "(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?";
+    var twoStarNoDot = "(?:(?!(?:\\/|^)\\.).)*?";
+    var filter = /* @__PURE__ */ __name((pattern, options = {}) => (p) => (0, exports2.minimatch)(p, pattern, options), "filter");
+    exports2.filter = filter;
+    exports2.minimatch.filter = exports2.filter;
+    var ext = /* @__PURE__ */ __name((a, b = {}) => Object.assign({}, a, b), "ext");
+    var defaults = /* @__PURE__ */ __name((def) => {
+      if (!def || typeof def !== "object" || !Object.keys(def).length) {
+        return exports2.minimatch;
+      }
+      const orig = exports2.minimatch;
+      const m = /* @__PURE__ */ __name((p, pattern, options = {}) => orig(p, pattern, ext(def, options)), "m");
+      return Object.assign(m, {
+        Minimatch: class Minimatch extends orig.Minimatch {
+          static {
+            __name(this, "Minimatch");
+          }
+          constructor(pattern, options = {}) {
+            super(pattern, ext(def, options));
+          }
+          static defaults(options) {
+            return orig.defaults(ext(def, options)).Minimatch;
+          }
+        },
+        AST: class AST extends orig.AST {
+          static {
+            __name(this, "AST");
+          }
+          /* c8 ignore start */
+          constructor(type, parent, options = {}) {
+            super(type, parent, ext(def, options));
+          }
+          /* c8 ignore stop */
+          static fromGlob(pattern, options = {}) {
+            return orig.AST.fromGlob(pattern, ext(def, options));
+          }
+        },
+        unescape: /* @__PURE__ */ __name((s, options = {}) => orig.unescape(s, ext(def, options)), "unescape"),
+        escape: /* @__PURE__ */ __name((s, options = {}) => orig.escape(s, ext(def, options)), "escape"),
+        filter: /* @__PURE__ */ __name((pattern, options = {}) => orig.filter(pattern, ext(def, options)), "filter"),
+        defaults: /* @__PURE__ */ __name((options) => orig.defaults(ext(def, options)), "defaults"),
+        makeRe: /* @__PURE__ */ __name((pattern, options = {}) => orig.makeRe(pattern, ext(def, options)), "makeRe"),
+        braceExpand: /* @__PURE__ */ __name((pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)), "braceExpand"),
+        match: /* @__PURE__ */ __name((list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)), "match"),
+        sep: orig.sep,
+        GLOBSTAR: exports2.GLOBSTAR
+      });
+    }, "defaults");
+    exports2.defaults = defaults;
+    exports2.minimatch.defaults = exports2.defaults;
+    var braceExpand = /* @__PURE__ */ __name((pattern, options = {}) => {
+      (0, assert_valid_pattern_js_1.assertValidPattern)(pattern);
+      if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) {
+        return [pattern];
+      }
+      return (0, brace_expansion_1.expand)(pattern);
+    }, "braceExpand");
+    exports2.braceExpand = braceExpand;
+    exports2.minimatch.braceExpand = exports2.braceExpand;
+    var makeRe = /* @__PURE__ */ __name((pattern, options = {}) => new Minimatch(pattern, options).makeRe(), "makeRe");
+    exports2.makeRe = makeRe;
+    exports2.minimatch.makeRe = exports2.makeRe;
+    var match = /* @__PURE__ */ __name((list, pattern, options = {}) => {
+      const mm = new Minimatch(pattern, options);
+      list = list.filter((f) => mm.match(f));
+      if (mm.options.nonull && !list.length) {
+        list.push(pattern);
+      }
+      return list;
+    }, "match");
+    exports2.match = match;
+    exports2.minimatch.match = exports2.match;
+    var globMagic = /[?*]|[+@!]\(.*?\)|\[|\]/;
+    var regExpEscape = /* @__PURE__ */ __name((s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), "regExpEscape");
+    var Minimatch = class {
+      static {
+        __name(this, "Minimatch");
+      }
+      options;
+      set;
+      pattern;
+      windowsPathsNoEscape;
+      nonegate;
+      negate;
+      comment;
+      empty;
+      preserveMultipleSlashes;
+      partial;
+      globSet;
+      globParts;
+      nocase;
+      isWindows;
+      platform;
+      windowsNoMagicRoot;
+      regexp;
+      constructor(pattern, options = {}) {
+        (0, assert_valid_pattern_js_1.assertValidPattern)(pattern);
+        options = options || {};
+        this.options = options;
+        this.pattern = pattern;
+        this.platform = options.platform || defaultPlatform;
+        this.isWindows = this.platform === "win32";
+        this.windowsPathsNoEscape = !!options.windowsPathsNoEscape || options.allowWindowsEscape === false;
+        if (this.windowsPathsNoEscape) {
+          this.pattern = this.pattern.replace(/\\/g, "/");
+        }
+        this.preserveMultipleSlashes = !!options.preserveMultipleSlashes;
+        this.regexp = null;
+        this.negate = false;
+        this.nonegate = !!options.nonegate;
+        this.comment = false;
+        this.empty = false;
+        this.partial = !!options.partial;
+        this.nocase = !!this.options.nocase;
+        this.windowsNoMagicRoot = options.windowsNoMagicRoot !== void 0 ? options.windowsNoMagicRoot : !!(this.isWindows && this.nocase);
+        this.globSet = [];
+        this.globParts = [];
+        this.set = [];
+        this.make();
+      }
+      hasMagic() {
+        if (this.options.magicalBraces && this.set.length > 1) {
+          return true;
+        }
+        for (const pattern of this.set) {
+          for (const part of pattern) {
+            if (typeof part !== "string")
+              return true;
+          }
+        }
+        return false;
+      }
+      debug(..._) {
+      }
+      make() {
+        const pattern = this.pattern;
+        const options = this.options;
+        if (!options.nocomment && pattern.charAt(0) === "#") {
+          this.comment = true;
+          return;
+        }
+        if (!pattern) {
+          this.empty = true;
+          return;
+        }
+        this.parseNegate();
+        this.globSet = [...new Set(this.braceExpand())];
+        if (options.debug) {
+          this.debug = (...args) => console.error(...args);
+        }
+        this.debug(this.pattern, this.globSet);
+        const rawGlobParts = this.globSet.map((s) => this.slashSplit(s));
+        this.globParts = this.preprocess(rawGlobParts);
+        this.debug(this.pattern, this.globParts);
+        let set = this.globParts.map((s, _, __) => {
+          if (this.isWindows && this.windowsNoMagicRoot) {
+            const isUNC = s[0] === "" && s[1] === "" && (s[2] === "?" || !globMagic.test(s[2])) && !globMagic.test(s[3]);
+            const isDrive = /^[a-z]:/i.test(s[0]);
+            if (isUNC) {
+              return [...s.slice(0, 4), ...s.slice(4).map((ss) => this.parse(ss))];
+            } else if (isDrive) {
+              return [s[0], ...s.slice(1).map((ss) => this.parse(ss))];
+            }
+          }
+          return s.map((ss) => this.parse(ss));
+        });
+        this.debug(this.pattern, set);
+        this.set = set.filter((s) => s.indexOf(false) === -1);
+        if (this.isWindows) {
+          for (let i = 0; i < this.set.length; i++) {
+            const p = this.set[i];
+            if (p[0] === "" && p[1] === "" && this.globParts[i][2] === "?" && typeof p[3] === "string" && /^[a-z]:$/i.test(p[3])) {
+              p[2] = "?";
+            }
+          }
+        }
+        this.debug(this.pattern, this.set);
+      }
+      // various transforms to equivalent pattern sets that are
+      // faster to process in a filesystem walk.  The goal is to
+      // eliminate what we can, and push all ** patterns as far
+      // to the right as possible, even if it increases the number
+      // of patterns that we have to process.
+      preprocess(globParts) {
+        if (this.options.noglobstar) {
+          for (let i = 0; i < globParts.length; i++) {
+            for (let j = 0; j < globParts[i].length; j++) {
+              if (globParts[i][j] === "**") {
+                globParts[i][j] = "*";
+              }
+            }
+          }
+        }
+        const { optimizationLevel = 1 } = this.options;
+        if (optimizationLevel >= 2) {
+          globParts = this.firstPhasePreProcess(globParts);
+          globParts = this.secondPhasePreProcess(globParts);
+        } else if (optimizationLevel >= 1) {
+          globParts = this.levelOneOptimize(globParts);
+        } else {
+          globParts = this.adjascentGlobstarOptimize(globParts);
+        }
+        return globParts;
+      }
+      // just get rid of adjascent ** portions
+      adjascentGlobstarOptimize(globParts) {
+        return globParts.map((parts) => {
+          let gs = -1;
+          while (-1 !== (gs = parts.indexOf("**", gs + 1))) {
+            let i = gs;
+            while (parts[i + 1] === "**") {
+              i++;
+            }
+            if (i !== gs) {
+              parts.splice(gs, i - gs);
+            }
+          }
+          return parts;
+        });
+      }
+      // get rid of adjascent ** and resolve .. portions
+      levelOneOptimize(globParts) {
+        return globParts.map((parts) => {
+          parts = parts.reduce((set, part) => {
+            const prev = set[set.length - 1];
+            if (part === "**" && prev === "**") {
+              return set;
+            }
+            if (part === "..") {
+              if (prev && prev !== ".." && prev !== "." && prev !== "**") {
+                set.pop();
+                return set;
+              }
+            }
+            set.push(part);
+            return set;
+          }, []);
+          return parts.length === 0 ? [""] : parts;
+        });
+      }
+      levelTwoFileOptimize(parts) {
+        if (!Array.isArray(parts)) {
+          parts = this.slashSplit(parts);
+        }
+        let didSomething = false;
+        do {
+          didSomething = false;
+          if (!this.preserveMultipleSlashes) {
+            for (let i = 1; i < parts.length - 1; i++) {
+              const p = parts[i];
+              if (i === 1 && p === "" && parts[0] === "")
+                continue;
+              if (p === "." || p === "") {
+                didSomething = true;
+                parts.splice(i, 1);
+                i--;
+              }
+            }
+            if (parts[0] === "." && parts.length === 2 && (parts[1] === "." || parts[1] === "")) {
+              didSomething = true;
+              parts.pop();
+            }
+          }
+          let dd = 0;
+          while (-1 !== (dd = parts.indexOf("..", dd + 1))) {
+            const p = parts[dd - 1];
+            if (p && p !== "." && p !== ".." && p !== "**") {
+              didSomething = true;
+              parts.splice(dd - 1, 2);
+              dd -= 2;
+            }
+          }
+        } while (didSomething);
+        return parts.length === 0 ? [""] : parts;
+      }
+      // First phase: single-pattern processing
+      // 
 is 1 or more portions
+      //  is 1 or more portions
+      // 

is any portion other than ., .., '', or ** + // is . or '' + // + // **/.. is *brutal* for filesystem walking performance, because + // it effectively resets the recursive walk each time it occurs, + // and ** cannot be reduced out by a .. pattern part like a regexp + // or most strings (other than .., ., and '') can be. + // + //

/**/../

/

/ -> {

/../

/

/,

/**/

/

/} + //

// -> 
/
+      // 
/

/../ ->

/
+      // **/**/ -> **/
+      //
+      // **/*/ -> */**/ <== not valid because ** doesn't follow
+      // this WOULD be allowed if ** did follow symlinks, or * didn't
+      firstPhasePreProcess(globParts) {
+        let didSomething = false;
+        do {
+          didSomething = false;
+          for (let parts of globParts) {
+            let gs = -1;
+            while (-1 !== (gs = parts.indexOf("**", gs + 1))) {
+              let gss = gs;
+              while (parts[gss + 1] === "**") {
+                gss++;
+              }
+              if (gss > gs) {
+                parts.splice(gs + 1, gss - gs);
+              }
+              let next = parts[gs + 1];
+              const p = parts[gs + 2];
+              const p2 = parts[gs + 3];
+              if (next !== "..")
+                continue;
+              if (!p || p === "." || p === ".." || !p2 || p2 === "." || p2 === "..") {
+                continue;
+              }
+              didSomething = true;
+              parts.splice(gs, 1);
+              const other = parts.slice(0);
+              other[gs] = "**";
+              globParts.push(other);
+              gs--;
+            }
+            if (!this.preserveMultipleSlashes) {
+              for (let i = 1; i < parts.length - 1; i++) {
+                const p = parts[i];
+                if (i === 1 && p === "" && parts[0] === "")
+                  continue;
+                if (p === "." || p === "") {
+                  didSomething = true;
+                  parts.splice(i, 1);
+                  i--;
+                }
+              }
+              if (parts[0] === "." && parts.length === 2 && (parts[1] === "." || parts[1] === "")) {
+                didSomething = true;
+                parts.pop();
+              }
+            }
+            let dd = 0;
+            while (-1 !== (dd = parts.indexOf("..", dd + 1))) {
+              const p = parts[dd - 1];
+              if (p && p !== "." && p !== ".." && p !== "**") {
+                didSomething = true;
+                const needDot = dd === 1 && parts[dd + 1] === "**";
+                const splin = needDot ? ["."] : [];
+                parts.splice(dd - 1, 2, ...splin);
+                if (parts.length === 0)
+                  parts.push("");
+                dd -= 2;
+              }
+            }
+          }
+        } while (didSomething);
+        return globParts;
+      }
+      // second phase: multi-pattern dedupes
+      // {
/*/,
/

/} ->

/*/
+      // {
/,
/} -> 
/
+      // {
/**/,
/} -> 
/**/
+      //
+      // {
/**/,
/**/

/} ->

/**/
+      // ^-- not valid because ** doens't follow symlinks
+      secondPhasePreProcess(globParts) {
+        for (let i = 0; i < globParts.length - 1; i++) {
+          for (let j = i + 1; j < globParts.length; j++) {
+            const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);
+            if (matched) {
+              globParts[i] = [];
+              globParts[j] = matched;
+              break;
+            }
+          }
+        }
+        return globParts.filter((gs) => gs.length);
+      }
+      partsMatch(a, b, emptyGSMatch = false) {
+        let ai = 0;
+        let bi = 0;
+        let result = [];
+        let which = "";
+        while (ai < a.length && bi < b.length) {
+          if (a[ai] === b[bi]) {
+            result.push(which === "b" ? b[bi] : a[ai]);
+            ai++;
+            bi++;
+          } else if (emptyGSMatch && a[ai] === "**" && b[bi] === a[ai + 1]) {
+            result.push(a[ai]);
+            ai++;
+          } else if (emptyGSMatch && b[bi] === "**" && a[ai] === b[bi + 1]) {
+            result.push(b[bi]);
+            bi++;
+          } else if (a[ai] === "*" && b[bi] && (this.options.dot || !b[bi].startsWith(".")) && b[bi] !== "**") {
+            if (which === "b")
+              return false;
+            which = "a";
+            result.push(a[ai]);
+            ai++;
+            bi++;
+          } else if (b[bi] === "*" && a[ai] && (this.options.dot || !a[ai].startsWith(".")) && a[ai] !== "**") {
+            if (which === "a")
+              return false;
+            which = "b";
+            result.push(b[bi]);
+            ai++;
+            bi++;
+          } else {
+            return false;
+          }
+        }
+        return a.length === b.length && result;
+      }
+      parseNegate() {
+        if (this.nonegate)
+          return;
+        const pattern = this.pattern;
+        let negate = false;
+        let negateOffset = 0;
+        for (let i = 0; i < pattern.length && pattern.charAt(i) === "!"; i++) {
+          negate = !negate;
+          negateOffset++;
+        }
+        if (negateOffset)
+          this.pattern = pattern.slice(negateOffset);
+        this.negate = negate;
+      }
+      // set partial to true to test if, for example,
+      // "/a/b" matches the start of "/*/b/*/d"
+      // Partial means, if you run out of file before you run
+      // out of pattern, then that's fine, as long as all
+      // the parts match.
+      matchOne(file, pattern, partial = false) {
+        const options = this.options;
+        if (this.isWindows) {
+          const fileDrive = typeof file[0] === "string" && /^[a-z]:$/i.test(file[0]);
+          const fileUNC = !fileDrive && file[0] === "" && file[1] === "" && file[2] === "?" && /^[a-z]:$/i.test(file[3]);
+          const patternDrive = typeof pattern[0] === "string" && /^[a-z]:$/i.test(pattern[0]);
+          const patternUNC = !patternDrive && pattern[0] === "" && pattern[1] === "" && pattern[2] === "?" && typeof pattern[3] === "string" && /^[a-z]:$/i.test(pattern[3]);
+          const fdi = fileUNC ? 3 : fileDrive ? 0 : void 0;
+          const pdi = patternUNC ? 3 : patternDrive ? 0 : void 0;
+          if (typeof fdi === "number" && typeof pdi === "number") {
+            const [fd, pd] = [file[fdi], pattern[pdi]];
+            if (fd.toLowerCase() === pd.toLowerCase()) {
+              pattern[pdi] = fd;
+              if (pdi > fdi) {
+                pattern = pattern.slice(pdi);
+              } else if (fdi > pdi) {
+                file = file.slice(fdi);
+              }
+            }
+          }
+        }
+        const { optimizationLevel = 1 } = this.options;
+        if (optimizationLevel >= 2) {
+          file = this.levelTwoFileOptimize(file);
+        }
+        this.debug("matchOne", this, { file, pattern });
+        this.debug("matchOne", file.length, pattern.length);
+        for (var fi = 0, pi = 0, fl = file.length, pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {
+          this.debug("matchOne loop");
+          var p = pattern[pi];
+          var f = file[fi];
+          this.debug(pattern, p, f);
+          if (p === false) {
+            return false;
+          }
+          if (p === exports2.GLOBSTAR) {
+            this.debug("GLOBSTAR", [pattern, p, f]);
+            var fr = fi;
+            var pr = pi + 1;
+            if (pr === pl) {
+              this.debug("** at the end");
+              for (; fi < fl; fi++) {
+                if (file[fi] === "." || file[fi] === ".." || !options.dot && file[fi].charAt(0) === ".")
+                  return false;
+              }
+              return true;
+            }
+            while (fr < fl) {
+              var swallowee = file[fr];
+              this.debug("\nglobstar while", file, fr, pattern, pr, swallowee);
+              if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
+                this.debug("globstar found match!", fr, fl, swallowee);
+                return true;
+              } else {
+                if (swallowee === "." || swallowee === ".." || !options.dot && swallowee.charAt(0) === ".") {
+                  this.debug("dot detected!", file, fr, pattern, pr);
+                  break;
+                }
+                this.debug("globstar swallow a segment, and continue");
+                fr++;
+              }
+            }
+            if (partial) {
+              this.debug("\n>>> no match, partial?", file, fr, pattern, pr);
+              if (fr === fl) {
+                return true;
+              }
+            }
+            return false;
+          }
+          let hit;
+          if (typeof p === "string") {
+            hit = f === p;
+            this.debug("string match", p, f, hit);
+          } else {
+            hit = p.test(f);
+            this.debug("pattern match", p, f, hit);
+          }
+          if (!hit)
+            return false;
+        }
+        if (fi === fl && pi === pl) {
+          return true;
+        } else if (fi === fl) {
+          return partial;
+        } else if (pi === pl) {
+          return fi === fl - 1 && file[fi] === "";
+        } else {
+          throw new Error("wtf?");
+        }
+      }
+      braceExpand() {
+        return (0, exports2.braceExpand)(this.pattern, this.options);
+      }
+      parse(pattern) {
+        (0, assert_valid_pattern_js_1.assertValidPattern)(pattern);
+        const options = this.options;
+        if (pattern === "**")
+          return exports2.GLOBSTAR;
+        if (pattern === "")
+          return "";
+        let m;
+        let fastTest = null;
+        if (m = pattern.match(starRE)) {
+          fastTest = options.dot ? starTestDot : starTest;
+        } else if (m = pattern.match(starDotExtRE)) {
+          fastTest = (options.nocase ? options.dot ? starDotExtTestNocaseDot : starDotExtTestNocase : options.dot ? starDotExtTestDot : starDotExtTest)(m[1]);
+        } else if (m = pattern.match(qmarksRE)) {
+          fastTest = (options.nocase ? options.dot ? qmarksTestNocaseDot : qmarksTestNocase : options.dot ? qmarksTestDot : qmarksTest)(m);
+        } else if (m = pattern.match(starDotStarRE)) {
+          fastTest = options.dot ? starDotStarTestDot : starDotStarTest;
+        } else if (m = pattern.match(dotStarRE)) {
+          fastTest = dotStarTest;
+        }
+        const re = ast_js_1.AST.fromGlob(pattern, this.options).toMMPattern();
+        if (fastTest && typeof re === "object") {
+          Reflect.defineProperty(re, "test", { value: fastTest });
+        }
+        return re;
+      }
+      makeRe() {
+        if (this.regexp || this.regexp === false)
+          return this.regexp;
+        const set = this.set;
+        if (!set.length) {
+          this.regexp = false;
+          return this.regexp;
+        }
+        const options = this.options;
+        const twoStar = options.noglobstar ? star : options.dot ? twoStarDot : twoStarNoDot;
+        const flags = new Set(options.nocase ? ["i"] : []);
+        let re = set.map((pattern) => {
+          const pp = pattern.map((p) => {
+            if (p instanceof RegExp) {
+              for (const f of p.flags.split(""))
+                flags.add(f);
+            }
+            return typeof p === "string" ? regExpEscape(p) : p === exports2.GLOBSTAR ? exports2.GLOBSTAR : p._src;
+          });
+          pp.forEach((p, i) => {
+            const next = pp[i + 1];
+            const prev = pp[i - 1];
+            if (p !== exports2.GLOBSTAR || prev === exports2.GLOBSTAR) {
+              return;
+            }
+            if (prev === void 0) {
+              if (next !== void 0 && next !== exports2.GLOBSTAR) {
+                pp[i + 1] = "(?:\\/|" + twoStar + "\\/)?" + next;
+              } else {
+                pp[i] = twoStar;
+              }
+            } else if (next === void 0) {
+              pp[i - 1] = prev + "(?:\\/|" + twoStar + ")?";
+            } else if (next !== exports2.GLOBSTAR) {
+              pp[i - 1] = prev + "(?:\\/|\\/" + twoStar + "\\/)" + next;
+              pp[i + 1] = exports2.GLOBSTAR;
+            }
+          });
+          return pp.filter((p) => p !== exports2.GLOBSTAR).join("/");
+        }).join("|");
+        const [open, close] = set.length > 1 ? ["(?:", ")"] : ["", ""];
+        re = "^" + open + re + close + "$";
+        if (this.negate)
+          re = "^(?!" + re + ").+$";
+        try {
+          this.regexp = new RegExp(re, [...flags].join(""));
+        } catch (ex) {
+          this.regexp = false;
+        }
+        return this.regexp;
+      }
+      slashSplit(p) {
+        if (this.preserveMultipleSlashes) {
+          return p.split("/");
+        } else if (this.isWindows && /^\/\/[^\/]+/.test(p)) {
+          return ["", ...p.split(/\/+/)];
+        } else {
+          return p.split(/\/+/);
+        }
+      }
+      match(f, partial = this.partial) {
+        this.debug("match", f, this.pattern);
+        if (this.comment) {
+          return false;
+        }
+        if (this.empty) {
+          return f === "";
+        }
+        if (f === "/" && partial) {
+          return true;
+        }
+        const options = this.options;
+        if (this.isWindows) {
+          f = f.split("\\").join("/");
+        }
+        const ff = this.slashSplit(f);
+        this.debug(this.pattern, "split", ff);
+        const set = this.set;
+        this.debug(this.pattern, "set", set);
+        let filename = ff[ff.length - 1];
+        if (!filename) {
+          for (let i = ff.length - 2; !filename && i >= 0; i--) {
+            filename = ff[i];
+          }
+        }
+        for (let i = 0; i < set.length; i++) {
+          const pattern = set[i];
+          let file = ff;
+          if (options.matchBase && pattern.length === 1) {
+            file = [filename];
+          }
+          const hit = this.matchOne(file, pattern, partial);
+          if (hit) {
+            if (options.flipNegate) {
+              return true;
+            }
+            return !this.negate;
+          }
+        }
+        if (options.flipNegate) {
+          return false;
+        }
+        return this.negate;
+      }
+      static defaults(def) {
+        return exports2.minimatch.defaults(def).Minimatch;
+      }
+    };
+    exports2.Minimatch = Minimatch;
+    var ast_js_2 = require_ast();
+    Object.defineProperty(exports2, "AST", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return ast_js_2.AST;
+    }, "get") });
+    var escape_js_2 = require_escape();
+    Object.defineProperty(exports2, "escape", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return escape_js_2.escape;
+    }, "get") });
+    var unescape_js_2 = require_unescape();
+    Object.defineProperty(exports2, "unescape", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return unescape_js_2.unescape;
+    }, "get") });
+    exports2.minimatch.AST = ast_js_1.AST;
+    exports2.minimatch.Minimatch = Minimatch;
+    exports2.minimatch.escape = escape_js_1.escape;
+    exports2.minimatch.unescape = unescape_js_1.unescape;
+  }
+});
+
+// node_modules/.pnpm/minipass@7.1.3/node_modules/minipass/dist/commonjs/index.js
+var require_commonjs5 = __commonJS({
+  "node_modules/.pnpm/minipass@7.1.3/node_modules/minipass/dist/commonjs/index.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Minipass = exports2.isWritable = exports2.isReadable = exports2.isStream = void 0;
+    var proc = typeof process === "object" && process ? process : {
+      stdout: null,
+      stderr: null
+    };
+    var node_events_1 = require("node:events");
+    var node_stream_1 = __importDefault(require("node:stream"));
+    var node_string_decoder_1 = require("node:string_decoder");
+    var isStream = /* @__PURE__ */ __name((s) => !!s && typeof s === "object" && (s instanceof Minipass || s instanceof node_stream_1.default || (0, exports2.isReadable)(s) || (0, exports2.isWritable)(s)), "isStream");
+    exports2.isStream = isStream;
+    var isReadable = /* @__PURE__ */ __name((s) => !!s && typeof s === "object" && s instanceof node_events_1.EventEmitter && typeof s.pipe === "function" && // node core Writable streams have a pipe() method, but it throws
+    s.pipe !== node_stream_1.default.Writable.prototype.pipe, "isReadable");
+    exports2.isReadable = isReadable;
+    var isWritable = /* @__PURE__ */ __name((s) => !!s && typeof s === "object" && s instanceof node_events_1.EventEmitter && typeof s.write === "function" && typeof s.end === "function", "isWritable");
+    exports2.isWritable = isWritable;
+    var EOF = Symbol("EOF");
+    var MAYBE_EMIT_END = Symbol("maybeEmitEnd");
+    var EMITTED_END = Symbol("emittedEnd");
+    var EMITTING_END = Symbol("emittingEnd");
+    var EMITTED_ERROR = Symbol("emittedError");
+    var CLOSED = Symbol("closed");
+    var READ = Symbol("read");
+    var FLUSH = Symbol("flush");
+    var FLUSHCHUNK = Symbol("flushChunk");
+    var ENCODING = Symbol("encoding");
+    var DECODER = Symbol("decoder");
+    var FLOWING = Symbol("flowing");
+    var PAUSED = Symbol("paused");
+    var RESUME = Symbol("resume");
+    var BUFFER = Symbol("buffer");
+    var PIPES = Symbol("pipes");
+    var BUFFERLENGTH = Symbol("bufferLength");
+    var BUFFERPUSH = Symbol("bufferPush");
+    var BUFFERSHIFT = Symbol("bufferShift");
+    var OBJECTMODE = Symbol("objectMode");
+    var DESTROYED = Symbol("destroyed");
+    var ERROR = Symbol("error");
+    var EMITDATA = Symbol("emitData");
+    var EMITEND = Symbol("emitEnd");
+    var EMITEND2 = Symbol("emitEnd2");
+    var ASYNC = Symbol("async");
+    var ABORT = Symbol("abort");
+    var ABORTED = Symbol("aborted");
+    var SIGNAL = Symbol("signal");
+    var DATALISTENERS = Symbol("dataListeners");
+    var DISCARDED = Symbol("discarded");
+    var defer = /* @__PURE__ */ __name((fn) => Promise.resolve().then(fn), "defer");
+    var nodefer = /* @__PURE__ */ __name((fn) => fn(), "nodefer");
+    var isEndish = /* @__PURE__ */ __name((ev) => ev === "end" || ev === "finish" || ev === "prefinish", "isEndish");
+    var isArrayBufferLike = /* @__PURE__ */ __name((b) => b instanceof ArrayBuffer || !!b && typeof b === "object" && b.constructor && b.constructor.name === "ArrayBuffer" && b.byteLength >= 0, "isArrayBufferLike");
+    var isArrayBufferView = /* @__PURE__ */ __name((b) => !Buffer.isBuffer(b) && ArrayBuffer.isView(b), "isArrayBufferView");
+    var Pipe = class {
+      static {
+        __name(this, "Pipe");
+      }
+      src;
+      dest;
+      opts;
+      ondrain;
+      constructor(src, dest, opts) {
+        this.src = src;
+        this.dest = dest;
+        this.opts = opts;
+        this.ondrain = () => src[RESUME]();
+        this.dest.on("drain", this.ondrain);
+      }
+      unpipe() {
+        this.dest.removeListener("drain", this.ondrain);
+      }
+      // only here for the prototype
+      /* c8 ignore start */
+      proxyErrors(_er) {
+      }
+      /* c8 ignore stop */
+      end() {
+        this.unpipe();
+        if (this.opts.end)
+          this.dest.end();
+      }
+    };
+    var PipeProxyErrors = class extends Pipe {
+      static {
+        __name(this, "PipeProxyErrors");
+      }
+      unpipe() {
+        this.src.removeListener("error", this.proxyErrors);
+        super.unpipe();
+      }
+      constructor(src, dest, opts) {
+        super(src, dest, opts);
+        this.proxyErrors = (er) => this.dest.emit("error", er);
+        src.on("error", this.proxyErrors);
+      }
+    };
+    var isObjectModeOptions = /* @__PURE__ */ __name((o) => !!o.objectMode, "isObjectModeOptions");
+    var isEncodingOptions = /* @__PURE__ */ __name((o) => !o.objectMode && !!o.encoding && o.encoding !== "buffer", "isEncodingOptions");
+    var Minipass = class extends node_events_1.EventEmitter {
+      static {
+        __name(this, "Minipass");
+      }
+      [FLOWING] = false;
+      [PAUSED] = false;
+      [PIPES] = [];
+      [BUFFER] = [];
+      [OBJECTMODE];
+      [ENCODING];
+      [ASYNC];
+      [DECODER];
+      [EOF] = false;
+      [EMITTED_END] = false;
+      [EMITTING_END] = false;
+      [CLOSED] = false;
+      [EMITTED_ERROR] = null;
+      [BUFFERLENGTH] = 0;
+      [DESTROYED] = false;
+      [SIGNAL];
+      [ABORTED] = false;
+      [DATALISTENERS] = 0;
+      [DISCARDED] = false;
+      /**
+       * true if the stream can be written
+       */
+      writable = true;
+      /**
+       * true if the stream can be read
+       */
+      readable = true;
+      /**
+       * If `RType` is Buffer, then options do not need to be provided.
+       * Otherwise, an options object must be provided to specify either
+       * {@link Minipass.SharedOptions.objectMode} or
+       * {@link Minipass.SharedOptions.encoding}, as appropriate.
+       */
+      constructor(...args) {
+        const options = args[0] || {};
+        super();
+        if (options.objectMode && typeof options.encoding === "string") {
+          throw new TypeError("Encoding and objectMode may not be used together");
+        }
+        if (isObjectModeOptions(options)) {
+          this[OBJECTMODE] = true;
+          this[ENCODING] = null;
+        } else if (isEncodingOptions(options)) {
+          this[ENCODING] = options.encoding;
+          this[OBJECTMODE] = false;
+        } else {
+          this[OBJECTMODE] = false;
+          this[ENCODING] = null;
+        }
+        this[ASYNC] = !!options.async;
+        this[DECODER] = this[ENCODING] ? new node_string_decoder_1.StringDecoder(this[ENCODING]) : null;
+        if (options && options.debugExposeBuffer === true) {
+          Object.defineProperty(this, "buffer", { get: /* @__PURE__ */ __name(() => this[BUFFER], "get") });
+        }
+        if (options && options.debugExposePipes === true) {
+          Object.defineProperty(this, "pipes", { get: /* @__PURE__ */ __name(() => this[PIPES], "get") });
+        }
+        const { signal } = options;
+        if (signal) {
+          this[SIGNAL] = signal;
+          if (signal.aborted) {
+            this[ABORT]();
+          } else {
+            signal.addEventListener("abort", () => this[ABORT]());
+          }
+        }
+      }
+      /**
+       * The amount of data stored in the buffer waiting to be read.
+       *
+       * For Buffer strings, this will be the total byte length.
+       * For string encoding streams, this will be the string character length,
+       * according to JavaScript's `string.length` logic.
+       * For objectMode streams, this is a count of the items waiting to be
+       * emitted.
+       */
+      get bufferLength() {
+        return this[BUFFERLENGTH];
+      }
+      /**
+       * The `BufferEncoding` currently in use, or `null`
+       */
+      get encoding() {
+        return this[ENCODING];
+      }
+      /**
+       * @deprecated - This is a read only property
+       */
+      set encoding(_enc) {
+        throw new Error("Encoding must be set at instantiation time");
+      }
+      /**
+       * @deprecated - Encoding may only be set at instantiation time
+       */
+      setEncoding(_enc) {
+        throw new Error("Encoding must be set at instantiation time");
+      }
+      /**
+       * True if this is an objectMode stream
+       */
+      get objectMode() {
+        return this[OBJECTMODE];
+      }
+      /**
+       * @deprecated - This is a read-only property
+       */
+      set objectMode(_om) {
+        throw new Error("objectMode must be set at instantiation time");
+      }
+      /**
+       * true if this is an async stream
+       */
+      get ["async"]() {
+        return this[ASYNC];
+      }
+      /**
+       * Set to true to make this stream async.
+       *
+       * Once set, it cannot be unset, as this would potentially cause incorrect
+       * behavior.  Ie, a sync stream can be made async, but an async stream
+       * cannot be safely made sync.
+       */
+      set ["async"](a) {
+        this[ASYNC] = this[ASYNC] || !!a;
+      }
+      // drop everything and get out of the flow completely
+      [ABORT]() {
+        this[ABORTED] = true;
+        this.emit("abort", this[SIGNAL]?.reason);
+        this.destroy(this[SIGNAL]?.reason);
+      }
+      /**
+       * True if the stream has been aborted.
+       */
+      get aborted() {
+        return this[ABORTED];
+      }
+      /**
+       * No-op setter. Stream aborted status is set via the AbortSignal provided
+       * in the constructor options.
+       */
+      set aborted(_) {
+      }
+      write(chunk, encoding, cb) {
+        if (this[ABORTED])
+          return false;
+        if (this[EOF])
+          throw new Error("write after end");
+        if (this[DESTROYED]) {
+          this.emit("error", Object.assign(new Error("Cannot call write after a stream was destroyed"), { code: "ERR_STREAM_DESTROYED" }));
+          return true;
+        }
+        if (typeof encoding === "function") {
+          cb = encoding;
+          encoding = "utf8";
+        }
+        if (!encoding)
+          encoding = "utf8";
+        const fn = this[ASYNC] ? defer : nodefer;
+        if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {
+          if (isArrayBufferView(chunk)) {
+            chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength);
+          } else if (isArrayBufferLike(chunk)) {
+            chunk = Buffer.from(chunk);
+          } else if (typeof chunk !== "string") {
+            throw new Error("Non-contiguous data written to non-objectMode stream");
+          }
+        }
+        if (this[OBJECTMODE]) {
+          if (this[FLOWING] && this[BUFFERLENGTH] !== 0)
+            this[FLUSH](true);
+          if (this[FLOWING])
+            this.emit("data", chunk);
+          else
+            this[BUFFERPUSH](chunk);
+          if (this[BUFFERLENGTH] !== 0)
+            this.emit("readable");
+          if (cb)
+            fn(cb);
+          return this[FLOWING];
+        }
+        if (!chunk.length) {
+          if (this[BUFFERLENGTH] !== 0)
+            this.emit("readable");
+          if (cb)
+            fn(cb);
+          return this[FLOWING];
+        }
+        if (typeof chunk === "string" && // unless it is a string already ready for us to use
+        !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)) {
+          chunk = Buffer.from(chunk, encoding);
+        }
+        if (Buffer.isBuffer(chunk) && this[ENCODING]) {
+          chunk = this[DECODER].write(chunk);
+        }
+        if (this[FLOWING] && this[BUFFERLENGTH] !== 0)
+          this[FLUSH](true);
+        if (this[FLOWING])
+          this.emit("data", chunk);
+        else
+          this[BUFFERPUSH](chunk);
+        if (this[BUFFERLENGTH] !== 0)
+          this.emit("readable");
+        if (cb)
+          fn(cb);
+        return this[FLOWING];
+      }
+      /**
+       * Low-level explicit read method.
+       *
+       * In objectMode, the argument is ignored, and one item is returned if
+       * available.
+       *
+       * `n` is the number of bytes (or in the case of encoding streams,
+       * characters) to consume. If `n` is not provided, then the entire buffer
+       * is returned, or `null` is returned if no data is available.
+       *
+       * If `n` is greater that the amount of data in the internal buffer,
+       * then `null` is returned.
+       */
+      read(n) {
+        if (this[DESTROYED])
+          return null;
+        this[DISCARDED] = false;
+        if (this[BUFFERLENGTH] === 0 || n === 0 || n && n > this[BUFFERLENGTH]) {
+          this[MAYBE_EMIT_END]();
+          return null;
+        }
+        if (this[OBJECTMODE])
+          n = null;
+        if (this[BUFFER].length > 1 && !this[OBJECTMODE]) {
+          this[BUFFER] = [
+            this[ENCODING] ? this[BUFFER].join("") : Buffer.concat(this[BUFFER], this[BUFFERLENGTH])
+          ];
+        }
+        const ret = this[READ](n || null, this[BUFFER][0]);
+        this[MAYBE_EMIT_END]();
+        return ret;
+      }
+      [READ](n, chunk) {
+        if (this[OBJECTMODE])
+          this[BUFFERSHIFT]();
+        else {
+          const c = chunk;
+          if (n === c.length || n === null)
+            this[BUFFERSHIFT]();
+          else if (typeof c === "string") {
+            this[BUFFER][0] = c.slice(n);
+            chunk = c.slice(0, n);
+            this[BUFFERLENGTH] -= n;
+          } else {
+            this[BUFFER][0] = c.subarray(n);
+            chunk = c.subarray(0, n);
+            this[BUFFERLENGTH] -= n;
+          }
+        }
+        this.emit("data", chunk);
+        if (!this[BUFFER].length && !this[EOF])
+          this.emit("drain");
+        return chunk;
+      }
+      end(chunk, encoding, cb) {
+        if (typeof chunk === "function") {
+          cb = chunk;
+          chunk = void 0;
+        }
+        if (typeof encoding === "function") {
+          cb = encoding;
+          encoding = "utf8";
+        }
+        if (chunk !== void 0)
+          this.write(chunk, encoding);
+        if (cb)
+          this.once("end", cb);
+        this[EOF] = true;
+        this.writable = false;
+        if (this[FLOWING] || !this[PAUSED])
+          this[MAYBE_EMIT_END]();
+        return this;
+      }
+      // don't let the internal resume be overwritten
+      [RESUME]() {
+        if (this[DESTROYED])
+          return;
+        if (!this[DATALISTENERS] && !this[PIPES].length) {
+          this[DISCARDED] = true;
+        }
+        this[PAUSED] = false;
+        this[FLOWING] = true;
+        this.emit("resume");
+        if (this[BUFFER].length)
+          this[FLUSH]();
+        else if (this[EOF])
+          this[MAYBE_EMIT_END]();
+        else
+          this.emit("drain");
+      }
+      /**
+       * Resume the stream if it is currently in a paused state
+       *
+       * If called when there are no pipe destinations or `data` event listeners,
+       * this will place the stream in a "discarded" state, where all data will
+       * be thrown away. The discarded state is removed if a pipe destination or
+       * data handler is added, if pause() is called, or if any synchronous or
+       * asynchronous iteration is started.
+       */
+      resume() {
+        return this[RESUME]();
+      }
+      /**
+       * Pause the stream
+       */
+      pause() {
+        this[FLOWING] = false;
+        this[PAUSED] = true;
+        this[DISCARDED] = false;
+      }
+      /**
+       * true if the stream has been forcibly destroyed
+       */
+      get destroyed() {
+        return this[DESTROYED];
+      }
+      /**
+       * true if the stream is currently in a flowing state, meaning that
+       * any writes will be immediately emitted.
+       */
+      get flowing() {
+        return this[FLOWING];
+      }
+      /**
+       * true if the stream is currently in a paused state
+       */
+      get paused() {
+        return this[PAUSED];
+      }
+      [BUFFERPUSH](chunk) {
+        if (this[OBJECTMODE])
+          this[BUFFERLENGTH] += 1;
+        else
+          this[BUFFERLENGTH] += chunk.length;
+        this[BUFFER].push(chunk);
+      }
+      [BUFFERSHIFT]() {
+        if (this[OBJECTMODE])
+          this[BUFFERLENGTH] -= 1;
+        else
+          this[BUFFERLENGTH] -= this[BUFFER][0].length;
+        return this[BUFFER].shift();
+      }
+      [FLUSH](noDrain = false) {
+        do {
+        } while (this[FLUSHCHUNK](this[BUFFERSHIFT]()) && this[BUFFER].length);
+        if (!noDrain && !this[BUFFER].length && !this[EOF])
+          this.emit("drain");
+      }
+      [FLUSHCHUNK](chunk) {
+        this.emit("data", chunk);
+        return this[FLOWING];
+      }
+      /**
+       * Pipe all data emitted by this stream into the destination provided.
+       *
+       * Triggers the flow of data.
+       */
+      pipe(dest, opts) {
+        if (this[DESTROYED])
+          return dest;
+        this[DISCARDED] = false;
+        const ended = this[EMITTED_END];
+        opts = opts || {};
+        if (dest === proc.stdout || dest === proc.stderr)
+          opts.end = false;
+        else
+          opts.end = opts.end !== false;
+        opts.proxyErrors = !!opts.proxyErrors;
+        if (ended) {
+          if (opts.end)
+            dest.end();
+        } else {
+          this[PIPES].push(!opts.proxyErrors ? new Pipe(this, dest, opts) : new PipeProxyErrors(this, dest, opts));
+          if (this[ASYNC])
+            defer(() => this[RESUME]());
+          else
+            this[RESUME]();
+        }
+        return dest;
+      }
+      /**
+       * Fully unhook a piped destination stream.
+       *
+       * If the destination stream was the only consumer of this stream (ie,
+       * there are no other piped destinations or `'data'` event listeners)
+       * then the flow of data will stop until there is another consumer or
+       * {@link Minipass#resume} is explicitly called.
+       */
+      unpipe(dest) {
+        const p = this[PIPES].find((p2) => p2.dest === dest);
+        if (p) {
+          if (this[PIPES].length === 1) {
+            if (this[FLOWING] && this[DATALISTENERS] === 0) {
+              this[FLOWING] = false;
+            }
+            this[PIPES] = [];
+          } else
+            this[PIPES].splice(this[PIPES].indexOf(p), 1);
+          p.unpipe();
+        }
+      }
+      /**
+       * Alias for {@link Minipass#on}
+       */
+      addListener(ev, handler) {
+        return this.on(ev, handler);
+      }
+      /**
+       * Mostly identical to `EventEmitter.on`, with the following
+       * behavior differences to prevent data loss and unnecessary hangs:
+       *
+       * - Adding a 'data' event handler will trigger the flow of data
+       *
+       * - Adding a 'readable' event handler when there is data waiting to be read
+       *   will cause 'readable' to be emitted immediately.
+       *
+       * - Adding an 'endish' event handler ('end', 'finish', etc.) which has
+       *   already passed will cause the event to be emitted immediately and all
+       *   handlers removed.
+       *
+       * - Adding an 'error' event handler after an error has been emitted will
+       *   cause the event to be re-emitted immediately with the error previously
+       *   raised.
+       */
+      on(ev, handler) {
+        const ret = super.on(ev, handler);
+        if (ev === "data") {
+          this[DISCARDED] = false;
+          this[DATALISTENERS]++;
+          if (!this[PIPES].length && !this[FLOWING]) {
+            this[RESUME]();
+          }
+        } else if (ev === "readable" && this[BUFFERLENGTH] !== 0) {
+          super.emit("readable");
+        } else if (isEndish(ev) && this[EMITTED_END]) {
+          super.emit(ev);
+          this.removeAllListeners(ev);
+        } else if (ev === "error" && this[EMITTED_ERROR]) {
+          const h = handler;
+          if (this[ASYNC])
+            defer(() => h.call(this, this[EMITTED_ERROR]));
+          else
+            h.call(this, this[EMITTED_ERROR]);
+        }
+        return ret;
+      }
+      /**
+       * Alias for {@link Minipass#off}
+       */
+      removeListener(ev, handler) {
+        return this.off(ev, handler);
+      }
+      /**
+       * Mostly identical to `EventEmitter.off`
+       *
+       * If a 'data' event handler is removed, and it was the last consumer
+       * (ie, there are no pipe destinations or other 'data' event listeners),
+       * then the flow of data will stop until there is another consumer or
+       * {@link Minipass#resume} is explicitly called.
+       */
+      off(ev, handler) {
+        const ret = super.off(ev, handler);
+        if (ev === "data") {
+          this[DATALISTENERS] = this.listeners("data").length;
+          if (this[DATALISTENERS] === 0 && !this[DISCARDED] && !this[PIPES].length) {
+            this[FLOWING] = false;
+          }
+        }
+        return ret;
+      }
+      /**
+       * Mostly identical to `EventEmitter.removeAllListeners`
+       *
+       * If all 'data' event handlers are removed, and they were the last consumer
+       * (ie, there are no pipe destinations), then the flow of data will stop
+       * until there is another consumer or {@link Minipass#resume} is explicitly
+       * called.
+       */
+      removeAllListeners(ev) {
+        const ret = super.removeAllListeners(ev);
+        if (ev === "data" || ev === void 0) {
+          this[DATALISTENERS] = 0;
+          if (!this[DISCARDED] && !this[PIPES].length) {
+            this[FLOWING] = false;
+          }
+        }
+        return ret;
+      }
+      /**
+       * true if the 'end' event has been emitted
+       */
+      get emittedEnd() {
+        return this[EMITTED_END];
+      }
+      [MAYBE_EMIT_END]() {
+        if (!this[EMITTING_END] && !this[EMITTED_END] && !this[DESTROYED] && this[BUFFER].length === 0 && this[EOF]) {
+          this[EMITTING_END] = true;
+          this.emit("end");
+          this.emit("prefinish");
+          this.emit("finish");
+          if (this[CLOSED])
+            this.emit("close");
+          this[EMITTING_END] = false;
+        }
+      }
+      /**
+       * Mostly identical to `EventEmitter.emit`, with the following
+       * behavior differences to prevent data loss and unnecessary hangs:
+       *
+       * If the stream has been destroyed, and the event is something other
+       * than 'close' or 'error', then `false` is returned and no handlers
+       * are called.
+       *
+       * If the event is 'end', and has already been emitted, then the event
+       * is ignored. If the stream is in a paused or non-flowing state, then
+       * the event will be deferred until data flow resumes. If the stream is
+       * async, then handlers will be called on the next tick rather than
+       * immediately.
+       *
+       * If the event is 'close', and 'end' has not yet been emitted, then
+       * the event will be deferred until after 'end' is emitted.
+       *
+       * If the event is 'error', and an AbortSignal was provided for the stream,
+       * and there are no listeners, then the event is ignored, matching the
+       * behavior of node core streams in the presense of an AbortSignal.
+       *
+       * If the event is 'finish' or 'prefinish', then all listeners will be
+       * removed after emitting the event, to prevent double-firing.
+       */
+      emit(ev, ...args) {
+        const data = args[0];
+        if (ev !== "error" && ev !== "close" && ev !== DESTROYED && this[DESTROYED]) {
+          return false;
+        } else if (ev === "data") {
+          return !this[OBJECTMODE] && !data ? false : this[ASYNC] ? (defer(() => this[EMITDATA](data)), true) : this[EMITDATA](data);
+        } else if (ev === "end") {
+          return this[EMITEND]();
+        } else if (ev === "close") {
+          this[CLOSED] = true;
+          if (!this[EMITTED_END] && !this[DESTROYED])
+            return false;
+          const ret2 = super.emit("close");
+          this.removeAllListeners("close");
+          return ret2;
+        } else if (ev === "error") {
+          this[EMITTED_ERROR] = data;
+          super.emit(ERROR, data);
+          const ret2 = !this[SIGNAL] || this.listeners("error").length ? super.emit("error", data) : false;
+          this[MAYBE_EMIT_END]();
+          return ret2;
+        } else if (ev === "resume") {
+          const ret2 = super.emit("resume");
+          this[MAYBE_EMIT_END]();
+          return ret2;
+        } else if (ev === "finish" || ev === "prefinish") {
+          const ret2 = super.emit(ev);
+          this.removeAllListeners(ev);
+          return ret2;
+        }
+        const ret = super.emit(ev, ...args);
+        this[MAYBE_EMIT_END]();
+        return ret;
+      }
+      [EMITDATA](data) {
+        for (const p of this[PIPES]) {
+          if (p.dest.write(data) === false)
+            this.pause();
+        }
+        const ret = this[DISCARDED] ? false : super.emit("data", data);
+        this[MAYBE_EMIT_END]();
+        return ret;
+      }
+      [EMITEND]() {
+        if (this[EMITTED_END])
+          return false;
+        this[EMITTED_END] = true;
+        this.readable = false;
+        return this[ASYNC] ? (defer(() => this[EMITEND2]()), true) : this[EMITEND2]();
+      }
+      [EMITEND2]() {
+        if (this[DECODER]) {
+          const data = this[DECODER].end();
+          if (data) {
+            for (const p of this[PIPES]) {
+              p.dest.write(data);
+            }
+            if (!this[DISCARDED])
+              super.emit("data", data);
+          }
+        }
+        for (const p of this[PIPES]) {
+          p.end();
+        }
+        const ret = super.emit("end");
+        this.removeAllListeners("end");
+        return ret;
+      }
+      /**
+       * Return a Promise that resolves to an array of all emitted data once
+       * the stream ends.
+       */
+      async collect() {
+        const buf = Object.assign([], {
+          dataLength: 0
+        });
+        if (!this[OBJECTMODE])
+          buf.dataLength = 0;
+        const p = this.promise();
+        this.on("data", (c) => {
+          buf.push(c);
+          if (!this[OBJECTMODE])
+            buf.dataLength += c.length;
+        });
+        await p;
+        return buf;
+      }
+      /**
+       * Return a Promise that resolves to the concatenation of all emitted data
+       * once the stream ends.
+       *
+       * Not allowed on objectMode streams.
+       */
+      async concat() {
+        if (this[OBJECTMODE]) {
+          throw new Error("cannot concat in objectMode");
+        }
+        const buf = await this.collect();
+        return this[ENCODING] ? buf.join("") : Buffer.concat(buf, buf.dataLength);
+      }
+      /**
+       * Return a void Promise that resolves once the stream ends.
+       */
+      async promise() {
+        return new Promise((resolve, reject) => {
+          this.on(DESTROYED, () => reject(new Error("stream destroyed")));
+          this.on("error", (er) => reject(er));
+          this.on("end", () => resolve());
+        });
+      }
+      /**
+       * Asynchronous `for await of` iteration.
+       *
+       * This will continue emitting all chunks until the stream terminates.
+       */
+      [Symbol.asyncIterator]() {
+        this[DISCARDED] = false;
+        let stopped = false;
+        const stop = /* @__PURE__ */ __name(async () => {
+          this.pause();
+          stopped = true;
+          return { value: void 0, done: true };
+        }, "stop");
+        const next = /* @__PURE__ */ __name(() => {
+          if (stopped)
+            return stop();
+          const res = this.read();
+          if (res !== null)
+            return Promise.resolve({ done: false, value: res });
+          if (this[EOF])
+            return stop();
+          let resolve;
+          let reject;
+          const onerr = /* @__PURE__ */ __name((er) => {
+            this.off("data", ondata);
+            this.off("end", onend);
+            this.off(DESTROYED, ondestroy);
+            stop();
+            reject(er);
+          }, "onerr");
+          const ondata = /* @__PURE__ */ __name((value) => {
+            this.off("error", onerr);
+            this.off("end", onend);
+            this.off(DESTROYED, ondestroy);
+            this.pause();
+            resolve({ value, done: !!this[EOF] });
+          }, "ondata");
+          const onend = /* @__PURE__ */ __name(() => {
+            this.off("error", onerr);
+            this.off("data", ondata);
+            this.off(DESTROYED, ondestroy);
+            stop();
+            resolve({ done: true, value: void 0 });
+          }, "onend");
+          const ondestroy = /* @__PURE__ */ __name(() => onerr(new Error("stream destroyed")), "ondestroy");
+          return new Promise((res2, rej) => {
+            reject = rej;
+            resolve = res2;
+            this.once(DESTROYED, ondestroy);
+            this.once("error", onerr);
+            this.once("end", onend);
+            this.once("data", ondata);
+          });
+        }, "next");
+        return {
+          next,
+          throw: stop,
+          return: stop,
+          [Symbol.asyncIterator]() {
+            return this;
+          },
+          [Symbol.asyncDispose]: async () => {
+          }
+        };
+      }
+      /**
+       * Synchronous `for of` iteration.
+       *
+       * The iteration will terminate when the internal buffer runs out, even
+       * if the stream has not yet terminated.
+       */
+      [Symbol.iterator]() {
+        this[DISCARDED] = false;
+        let stopped = false;
+        const stop = /* @__PURE__ */ __name(() => {
+          this.pause();
+          this.off(ERROR, stop);
+          this.off(DESTROYED, stop);
+          this.off("end", stop);
+          stopped = true;
+          return { done: true, value: void 0 };
+        }, "stop");
+        const next = /* @__PURE__ */ __name(() => {
+          if (stopped)
+            return stop();
+          const value = this.read();
+          return value === null ? stop() : { done: false, value };
+        }, "next");
+        this.once("end", stop);
+        this.once(ERROR, stop);
+        this.once(DESTROYED, stop);
+        return {
+          next,
+          throw: stop,
+          return: stop,
+          [Symbol.iterator]() {
+            return this;
+          },
+          [Symbol.dispose]: () => {
+          }
+        };
+      }
+      /**
+       * Destroy a stream, preventing it from being used for any further purpose.
+       *
+       * If the stream has a `close()` method, then it will be called on
+       * destruction.
+       *
+       * After destruction, any attempt to write data, read data, or emit most
+       * events will be ignored.
+       *
+       * If an error argument is provided, then it will be emitted in an
+       * 'error' event.
+       */
+      destroy(er) {
+        if (this[DESTROYED]) {
+          if (er)
+            this.emit("error", er);
+          else
+            this.emit(DESTROYED);
+          return this;
+        }
+        this[DESTROYED] = true;
+        this[DISCARDED] = true;
+        this[BUFFER].length = 0;
+        this[BUFFERLENGTH] = 0;
+        const wc = this;
+        if (typeof wc.close === "function" && !this[CLOSED])
+          wc.close();
+        if (er)
+          this.emit("error", er);
+        else
+          this.emit(DESTROYED);
+        return this;
+      }
+      /**
+       * Alias for {@link isStream}
+       *
+       * Former export location, maintained for backwards compatibility.
+       *
+       * @deprecated
+       */
+      static get isStream() {
+        return exports2.isStream;
+      }
+    };
+    exports2.Minipass = Minipass;
+  }
+});
+
+// node_modules/.pnpm/path-scurry@2.0.2/node_modules/path-scurry/dist/commonjs/index.js
+var require_commonjs6 = __commonJS({
+  "node_modules/.pnpm/path-scurry@2.0.2/node_modules/path-scurry/dist/commonjs/index.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.PathScurry = exports2.Path = exports2.PathScurryDarwin = exports2.PathScurryPosix = exports2.PathScurryWin32 = exports2.PathScurryBase = exports2.PathPosix = exports2.PathWin32 = exports2.PathBase = exports2.ChildrenCache = exports2.ResolveCache = void 0;
+    var lru_cache_1 = require_commonjs();
+    var node_path_1 = require("node:path");
+    var node_url_1 = require("node:url");
+    var fs_1 = require("fs");
+    var actualFS = __importStar(require("node:fs"));
+    var realpathSync = fs_1.realpathSync.native;
+    var promises_1 = require("node:fs/promises");
+    var minipass_1 = require_commonjs5();
+    var defaultFS = {
+      lstatSync: fs_1.lstatSync,
+      readdir: fs_1.readdir,
+      readdirSync: fs_1.readdirSync,
+      readlinkSync: fs_1.readlinkSync,
+      realpathSync,
+      promises: {
+        lstat: promises_1.lstat,
+        readdir: promises_1.readdir,
+        readlink: promises_1.readlink,
+        realpath: promises_1.realpath
+      }
+    };
+    var fsFromOption = /* @__PURE__ */ __name((fsOption) => !fsOption || fsOption === defaultFS || fsOption === actualFS ? defaultFS : {
+      ...defaultFS,
+      ...fsOption,
+      promises: {
+        ...defaultFS.promises,
+        ...fsOption.promises || {}
+      }
+    }, "fsFromOption");
+    var uncDriveRegexp = /^\\\\\?\\([a-z]:)\\?$/i;
+    var uncToDrive = /* @__PURE__ */ __name((rootPath) => rootPath.replace(/\//g, "\\").replace(uncDriveRegexp, "$1\\"), "uncToDrive");
+    var eitherSep = /[\\\/]/;
+    var UNKNOWN = 0;
+    var IFIFO = 1;
+    var IFCHR = 2;
+    var IFDIR = 4;
+    var IFBLK = 6;
+    var IFREG = 8;
+    var IFLNK = 10;
+    var IFSOCK = 12;
+    var IFMT = 15;
+    var IFMT_UNKNOWN = ~IFMT;
+    var READDIR_CALLED = 16;
+    var LSTAT_CALLED = 32;
+    var ENOTDIR = 64;
+    var ENOENT = 128;
+    var ENOREADLINK = 256;
+    var ENOREALPATH = 512;
+    var ENOCHILD = ENOTDIR | ENOENT | ENOREALPATH;
+    var TYPEMASK = 1023;
+    var entToType = /* @__PURE__ */ __name((s) => s.isFile() ? IFREG : s.isDirectory() ? IFDIR : s.isSymbolicLink() ? IFLNK : s.isCharacterDevice() ? IFCHR : s.isBlockDevice() ? IFBLK : s.isSocket() ? IFSOCK : s.isFIFO() ? IFIFO : UNKNOWN, "entToType");
+    var normalizeCache = new lru_cache_1.LRUCache({ max: 2 ** 12 });
+    var normalize = /* @__PURE__ */ __name((s) => {
+      const c = normalizeCache.get(s);
+      if (c)
+        return c;
+      const n = s.normalize("NFKD");
+      normalizeCache.set(s, n);
+      return n;
+    }, "normalize");
+    var normalizeNocaseCache = new lru_cache_1.LRUCache({ max: 2 ** 12 });
+    var normalizeNocase = /* @__PURE__ */ __name((s) => {
+      const c = normalizeNocaseCache.get(s);
+      if (c)
+        return c;
+      const n = normalize(s.toLowerCase());
+      normalizeNocaseCache.set(s, n);
+      return n;
+    }, "normalizeNocase");
+    var ResolveCache = class extends lru_cache_1.LRUCache {
+      static {
+        __name(this, "ResolveCache");
+      }
+      constructor() {
+        super({ max: 256 });
+      }
+    };
+    exports2.ResolveCache = ResolveCache;
+    var ChildrenCache = class extends lru_cache_1.LRUCache {
+      static {
+        __name(this, "ChildrenCache");
+      }
+      constructor(maxSize = 16 * 1024) {
+        super({
+          maxSize,
+          // parent + children
+          sizeCalculation: /* @__PURE__ */ __name((a) => a.length + 1, "sizeCalculation")
+        });
+      }
+    };
+    exports2.ChildrenCache = ChildrenCache;
+    var setAsCwd = Symbol("PathScurry setAsCwd");
+    var PathBase = class {
+      static {
+        __name(this, "PathBase");
+      }
+      /**
+       * the basename of this path
+       *
+       * **Important**: *always* test the path name against any test string
+       * usingthe {@link isNamed} method, and not by directly comparing this
+       * string. Otherwise, unicode path strings that the system sees as identical
+       * will not be properly treated as the same path, leading to incorrect
+       * behavior and possible security issues.
+       */
+      name;
+      /**
+       * the Path entry corresponding to the path root.
+       *
+       * @internal
+       */
+      root;
+      /**
+       * All roots found within the current PathScurry family
+       *
+       * @internal
+       */
+      roots;
+      /**
+       * a reference to the parent path, or undefined in the case of root entries
+       *
+       * @internal
+       */
+      parent;
+      /**
+       * boolean indicating whether paths are compared case-insensitively
+       * @internal
+       */
+      nocase;
+      /**
+       * boolean indicating that this path is the current working directory
+       * of the PathScurry collection that contains it.
+       */
+      isCWD = false;
+      // potential default fs override
+      #fs;
+      // Stats fields
+      #dev;
+      get dev() {
+        return this.#dev;
+      }
+      #mode;
+      get mode() {
+        return this.#mode;
+      }
+      #nlink;
+      get nlink() {
+        return this.#nlink;
+      }
+      #uid;
+      get uid() {
+        return this.#uid;
+      }
+      #gid;
+      get gid() {
+        return this.#gid;
+      }
+      #rdev;
+      get rdev() {
+        return this.#rdev;
+      }
+      #blksize;
+      get blksize() {
+        return this.#blksize;
+      }
+      #ino;
+      get ino() {
+        return this.#ino;
+      }
+      #size;
+      get size() {
+        return this.#size;
+      }
+      #blocks;
+      get blocks() {
+        return this.#blocks;
+      }
+      #atimeMs;
+      get atimeMs() {
+        return this.#atimeMs;
+      }
+      #mtimeMs;
+      get mtimeMs() {
+        return this.#mtimeMs;
+      }
+      #ctimeMs;
+      get ctimeMs() {
+        return this.#ctimeMs;
+      }
+      #birthtimeMs;
+      get birthtimeMs() {
+        return this.#birthtimeMs;
+      }
+      #atime;
+      get atime() {
+        return this.#atime;
+      }
+      #mtime;
+      get mtime() {
+        return this.#mtime;
+      }
+      #ctime;
+      get ctime() {
+        return this.#ctime;
+      }
+      #birthtime;
+      get birthtime() {
+        return this.#birthtime;
+      }
+      #matchName;
+      #depth;
+      #fullpath;
+      #fullpathPosix;
+      #relative;
+      #relativePosix;
+      #type;
+      #children;
+      #linkTarget;
+      #realpath;
+      /**
+       * This property is for compatibility with the Dirent class as of
+       * Node v20, where Dirent['parentPath'] refers to the path of the
+       * directory that was passed to readdir. For root entries, it's the path
+       * to the entry itself.
+       */
+      get parentPath() {
+        return (this.parent || this).fullpath();
+      }
+      /* c8 ignore start */
+      /**
+       * Deprecated alias for Dirent['parentPath'] Somewhat counterintuitively,
+       * this property refers to the *parent* path, not the path object itself.
+       *
+       * @deprecated
+       */
+      get path() {
+        return this.parentPath;
+      }
+      /* c8 ignore stop */
+      /**
+       * Do not create new Path objects directly.  They should always be accessed
+       * via the PathScurry class or other methods on the Path class.
+       *
+       * @internal
+       */
+      constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) {
+        this.name = name;
+        this.#matchName = nocase ? normalizeNocase(name) : normalize(name);
+        this.#type = type & TYPEMASK;
+        this.nocase = nocase;
+        this.roots = roots;
+        this.root = root || this;
+        this.#children = children;
+        this.#fullpath = opts.fullpath;
+        this.#relative = opts.relative;
+        this.#relativePosix = opts.relativePosix;
+        this.parent = opts.parent;
+        if (this.parent) {
+          this.#fs = this.parent.#fs;
+        } else {
+          this.#fs = fsFromOption(opts.fs);
+        }
+      }
+      /**
+       * Returns the depth of the Path object from its root.
+       *
+       * For example, a path at `/foo/bar` would have a depth of 2.
+       */
+      depth() {
+        if (this.#depth !== void 0)
+          return this.#depth;
+        if (!this.parent)
+          return this.#depth = 0;
+        return this.#depth = this.parent.depth() + 1;
+      }
+      /**
+       * @internal
+       */
+      childrenCache() {
+        return this.#children;
+      }
+      /**
+       * Get the Path object referenced by the string path, resolved from this Path
+       */
+      resolve(path) {
+        if (!path) {
+          return this;
+        }
+        const rootPath = this.getRootString(path);
+        const dir = path.substring(rootPath.length);
+        const dirParts = dir.split(this.splitSep);
+        const result = rootPath ? this.getRoot(rootPath).#resolveParts(dirParts) : this.#resolveParts(dirParts);
+        return result;
+      }
+      #resolveParts(dirParts) {
+        let p = this;
+        for (const part of dirParts) {
+          p = p.child(part);
+        }
+        return p;
+      }
+      /**
+       * Returns the cached children Path objects, if still available.  If they
+       * have fallen out of the cache, then returns an empty array, and resets the
+       * READDIR_CALLED bit, so that future calls to readdir() will require an fs
+       * lookup.
+       *
+       * @internal
+       */
+      children() {
+        const cached = this.#children.get(this);
+        if (cached) {
+          return cached;
+        }
+        const children = Object.assign([], { provisional: 0 });
+        this.#children.set(this, children);
+        this.#type &= ~READDIR_CALLED;
+        return children;
+      }
+      /**
+       * Resolves a path portion and returns or creates the child Path.
+       *
+       * Returns `this` if pathPart is `''` or `'.'`, or `parent` if pathPart is
+       * `'..'`.
+       *
+       * This should not be called directly.  If `pathPart` contains any path
+       * separators, it will lead to unsafe undefined behavior.
+       *
+       * Use `Path.resolve()` instead.
+       *
+       * @internal
+       */
+      child(pathPart, opts) {
+        if (pathPart === "" || pathPart === ".") {
+          return this;
+        }
+        if (pathPart === "..") {
+          return this.parent || this;
+        }
+        const children = this.children();
+        const name = this.nocase ? normalizeNocase(pathPart) : normalize(pathPart);
+        for (const p of children) {
+          if (p.#matchName === name) {
+            return p;
+          }
+        }
+        const s = this.parent ? this.sep : "";
+        const fullpath = this.#fullpath ? this.#fullpath + s + pathPart : void 0;
+        const pchild = this.newChild(pathPart, UNKNOWN, {
+          ...opts,
+          parent: this,
+          fullpath
+        });
+        if (!this.canReaddir()) {
+          pchild.#type |= ENOENT;
+        }
+        children.push(pchild);
+        return pchild;
+      }
+      /**
+       * The relative path from the cwd. If it does not share an ancestor with
+       * the cwd, then this ends up being equivalent to the fullpath()
+       */
+      relative() {
+        if (this.isCWD)
+          return "";
+        if (this.#relative !== void 0) {
+          return this.#relative;
+        }
+        const name = this.name;
+        const p = this.parent;
+        if (!p) {
+          return this.#relative = this.name;
+        }
+        const pv = p.relative();
+        return pv + (!pv || !p.parent ? "" : this.sep) + name;
+      }
+      /**
+       * The relative path from the cwd, using / as the path separator.
+       * If it does not share an ancestor with
+       * the cwd, then this ends up being equivalent to the fullpathPosix()
+       * On posix systems, this is identical to relative().
+       */
+      relativePosix() {
+        if (this.sep === "/")
+          return this.relative();
+        if (this.isCWD)
+          return "";
+        if (this.#relativePosix !== void 0)
+          return this.#relativePosix;
+        const name = this.name;
+        const p = this.parent;
+        if (!p) {
+          return this.#relativePosix = this.fullpathPosix();
+        }
+        const pv = p.relativePosix();
+        return pv + (!pv || !p.parent ? "" : "/") + name;
+      }
+      /**
+       * The fully resolved path string for this Path entry
+       */
+      fullpath() {
+        if (this.#fullpath !== void 0) {
+          return this.#fullpath;
+        }
+        const name = this.name;
+        const p = this.parent;
+        if (!p) {
+          return this.#fullpath = this.name;
+        }
+        const pv = p.fullpath();
+        const fp = pv + (!p.parent ? "" : this.sep) + name;
+        return this.#fullpath = fp;
+      }
+      /**
+       * On platforms other than windows, this is identical to fullpath.
+       *
+       * On windows, this is overridden to return the forward-slash form of the
+       * full UNC path.
+       */
+      fullpathPosix() {
+        if (this.#fullpathPosix !== void 0)
+          return this.#fullpathPosix;
+        if (this.sep === "/")
+          return this.#fullpathPosix = this.fullpath();
+        if (!this.parent) {
+          const p2 = this.fullpath().replace(/\\/g, "/");
+          if (/^[a-z]:\//i.test(p2)) {
+            return this.#fullpathPosix = `//?/${p2}`;
+          } else {
+            return this.#fullpathPosix = p2;
+          }
+        }
+        const p = this.parent;
+        const pfpp = p.fullpathPosix();
+        const fpp = pfpp + (!pfpp || !p.parent ? "" : "/") + this.name;
+        return this.#fullpathPosix = fpp;
+      }
+      /**
+       * Is the Path of an unknown type?
+       *
+       * Note that we might know *something* about it if there has been a previous
+       * filesystem operation, for example that it does not exist, or is not a
+       * link, or whether it has child entries.
+       */
+      isUnknown() {
+        return (this.#type & IFMT) === UNKNOWN;
+      }
+      isType(type) {
+        return this[`is${type}`]();
+      }
+      getType() {
+        return this.isUnknown() ? "Unknown" : this.isDirectory() ? "Directory" : this.isFile() ? "File" : this.isSymbolicLink() ? "SymbolicLink" : this.isFIFO() ? "FIFO" : this.isCharacterDevice() ? "CharacterDevice" : this.isBlockDevice() ? "BlockDevice" : (
+          /* c8 ignore start */
+          this.isSocket() ? "Socket" : "Unknown"
+        );
+      }
+      /**
+       * Is the Path a regular file?
+       */
+      isFile() {
+        return (this.#type & IFMT) === IFREG;
+      }
+      /**
+       * Is the Path a directory?
+       */
+      isDirectory() {
+        return (this.#type & IFMT) === IFDIR;
+      }
+      /**
+       * Is the path a character device?
+       */
+      isCharacterDevice() {
+        return (this.#type & IFMT) === IFCHR;
+      }
+      /**
+       * Is the path a block device?
+       */
+      isBlockDevice() {
+        return (this.#type & IFMT) === IFBLK;
+      }
+      /**
+       * Is the path a FIFO pipe?
+       */
+      isFIFO() {
+        return (this.#type & IFMT) === IFIFO;
+      }
+      /**
+       * Is the path a socket?
+       */
+      isSocket() {
+        return (this.#type & IFMT) === IFSOCK;
+      }
+      /**
+       * Is the path a symbolic link?
+       */
+      isSymbolicLink() {
+        return (this.#type & IFLNK) === IFLNK;
+      }
+      /**
+       * Return the entry if it has been subject of a successful lstat, or
+       * undefined otherwise.
+       *
+       * Does not read the filesystem, so an undefined result *could* simply
+       * mean that we haven't called lstat on it.
+       */
+      lstatCached() {
+        return this.#type & LSTAT_CALLED ? this : void 0;
+      }
+      /**
+       * Return the cached link target if the entry has been the subject of a
+       * successful readlink, or undefined otherwise.
+       *
+       * Does not read the filesystem, so an undefined result *could* just mean we
+       * don't have any cached data. Only use it if you are very sure that a
+       * readlink() has been called at some point.
+       */
+      readlinkCached() {
+        return this.#linkTarget;
+      }
+      /**
+       * Returns the cached realpath target if the entry has been the subject
+       * of a successful realpath, or undefined otherwise.
+       *
+       * Does not read the filesystem, so an undefined result *could* just mean we
+       * don't have any cached data. Only use it if you are very sure that a
+       * realpath() has been called at some point.
+       */
+      realpathCached() {
+        return this.#realpath;
+      }
+      /**
+       * Returns the cached child Path entries array if the entry has been the
+       * subject of a successful readdir(), or [] otherwise.
+       *
+       * Does not read the filesystem, so an empty array *could* just mean we
+       * don't have any cached data. Only use it if you are very sure that a
+       * readdir() has been called recently enough to still be valid.
+       */
+      readdirCached() {
+        const children = this.children();
+        return children.slice(0, children.provisional);
+      }
+      /**
+       * Return true if it's worth trying to readlink.  Ie, we don't (yet) have
+       * any indication that readlink will definitely fail.
+       *
+       * Returns false if the path is known to not be a symlink, if a previous
+       * readlink failed, or if the entry does not exist.
+       */
+      canReadlink() {
+        if (this.#linkTarget)
+          return true;
+        if (!this.parent)
+          return false;
+        const ifmt = this.#type & IFMT;
+        return !(ifmt !== UNKNOWN && ifmt !== IFLNK || this.#type & ENOREADLINK || this.#type & ENOENT);
+      }
+      /**
+       * Return true if readdir has previously been successfully called on this
+       * path, indicating that cachedReaddir() is likely valid.
+       */
+      calledReaddir() {
+        return !!(this.#type & READDIR_CALLED);
+      }
+      /**
+       * Returns true if the path is known to not exist. That is, a previous lstat
+       * or readdir failed to verify its existence when that would have been
+       * expected, or a parent entry was marked either enoent or enotdir.
+       */
+      isENOENT() {
+        return !!(this.#type & ENOENT);
+      }
+      /**
+       * Return true if the path is a match for the given path name.  This handles
+       * case sensitivity and unicode normalization.
+       *
+       * Note: even on case-sensitive systems, it is **not** safe to test the
+       * equality of the `.name` property to determine whether a given pathname
+       * matches, due to unicode normalization mismatches.
+       *
+       * Always use this method instead of testing the `path.name` property
+       * directly.
+       */
+      isNamed(n) {
+        return !this.nocase ? this.#matchName === normalize(n) : this.#matchName === normalizeNocase(n);
+      }
+      /**
+       * Return the Path object corresponding to the target of a symbolic link.
+       *
+       * If the Path is not a symbolic link, or if the readlink call fails for any
+       * reason, `undefined` is returned.
+       *
+       * Result is cached, and thus may be outdated if the filesystem is mutated.
+       */
+      async readlink() {
+        const target = this.#linkTarget;
+        if (target) {
+          return target;
+        }
+        if (!this.canReadlink()) {
+          return void 0;
+        }
+        if (!this.parent) {
+          return void 0;
+        }
+        try {
+          const read = await this.#fs.promises.readlink(this.fullpath());
+          const linkTarget = (await this.parent.realpath())?.resolve(read);
+          if (linkTarget) {
+            return this.#linkTarget = linkTarget;
+          }
+        } catch (er) {
+          this.#readlinkFail(er.code);
+          return void 0;
+        }
+      }
+      /**
+       * Synchronous {@link PathBase.readlink}
+       */
+      readlinkSync() {
+        const target = this.#linkTarget;
+        if (target) {
+          return target;
+        }
+        if (!this.canReadlink()) {
+          return void 0;
+        }
+        if (!this.parent) {
+          return void 0;
+        }
+        try {
+          const read = this.#fs.readlinkSync(this.fullpath());
+          const linkTarget = this.parent.realpathSync()?.resolve(read);
+          if (linkTarget) {
+            return this.#linkTarget = linkTarget;
+          }
+        } catch (er) {
+          this.#readlinkFail(er.code);
+          return void 0;
+        }
+      }
+      #readdirSuccess(children) {
+        this.#type |= READDIR_CALLED;
+        for (let p = children.provisional; p < children.length; p++) {
+          const c = children[p];
+          if (c)
+            c.#markENOENT();
+        }
+      }
+      #markENOENT() {
+        if (this.#type & ENOENT)
+          return;
+        this.#type = (this.#type | ENOENT) & IFMT_UNKNOWN;
+        this.#markChildrenENOENT();
+      }
+      #markChildrenENOENT() {
+        const children = this.children();
+        children.provisional = 0;
+        for (const p of children) {
+          p.#markENOENT();
+        }
+      }
+      #markENOREALPATH() {
+        this.#type |= ENOREALPATH;
+        this.#markENOTDIR();
+      }
+      // save the information when we know the entry is not a dir
+      #markENOTDIR() {
+        if (this.#type & ENOTDIR)
+          return;
+        let t = this.#type;
+        if ((t & IFMT) === IFDIR)
+          t &= IFMT_UNKNOWN;
+        this.#type = t | ENOTDIR;
+        this.#markChildrenENOENT();
+      }
+      #readdirFail(code = "") {
+        if (code === "ENOTDIR" || code === "EPERM") {
+          this.#markENOTDIR();
+        } else if (code === "ENOENT") {
+          this.#markENOENT();
+        } else {
+          this.children().provisional = 0;
+        }
+      }
+      #lstatFail(code = "") {
+        if (code === "ENOTDIR") {
+          const p = this.parent;
+          p.#markENOTDIR();
+        } else if (code === "ENOENT") {
+          this.#markENOENT();
+        }
+      }
+      #readlinkFail(code = "") {
+        let ter = this.#type;
+        ter |= ENOREADLINK;
+        if (code === "ENOENT")
+          ter |= ENOENT;
+        if (code === "EINVAL" || code === "UNKNOWN") {
+          ter &= IFMT_UNKNOWN;
+        }
+        this.#type = ter;
+        if (code === "ENOTDIR" && this.parent) {
+          this.parent.#markENOTDIR();
+        }
+      }
+      #readdirAddChild(e, c) {
+        return this.#readdirMaybePromoteChild(e, c) || this.#readdirAddNewChild(e, c);
+      }
+      #readdirAddNewChild(e, c) {
+        const type = entToType(e);
+        const child = this.newChild(e.name, type, { parent: this });
+        const ifmt = child.#type & IFMT;
+        if (ifmt !== IFDIR && ifmt !== IFLNK && ifmt !== UNKNOWN) {
+          child.#type |= ENOTDIR;
+        }
+        c.unshift(child);
+        c.provisional++;
+        return child;
+      }
+      #readdirMaybePromoteChild(e, c) {
+        for (let p = c.provisional; p < c.length; p++) {
+          const pchild = c[p];
+          const name = this.nocase ? normalizeNocase(e.name) : normalize(e.name);
+          if (name !== pchild.#matchName) {
+            continue;
+          }
+          return this.#readdirPromoteChild(e, pchild, p, c);
+        }
+      }
+      #readdirPromoteChild(e, p, index, c) {
+        const v = p.name;
+        p.#type = p.#type & IFMT_UNKNOWN | entToType(e);
+        if (v !== e.name)
+          p.name = e.name;
+        if (index !== c.provisional) {
+          if (index === c.length - 1)
+            c.pop();
+          else
+            c.splice(index, 1);
+          c.unshift(p);
+        }
+        c.provisional++;
+        return p;
+      }
+      /**
+       * Call lstat() on this Path, and update all known information that can be
+       * determined.
+       *
+       * Note that unlike `fs.lstat()`, the returned value does not contain some
+       * information, such as `mode`, `dev`, `nlink`, and `ino`.  If that
+       * information is required, you will need to call `fs.lstat` yourself.
+       *
+       * If the Path refers to a nonexistent file, or if the lstat call fails for
+       * any reason, `undefined` is returned.  Otherwise the updated Path object is
+       * returned.
+       *
+       * Results are cached, and thus may be out of date if the filesystem is
+       * mutated.
+       */
+      async lstat() {
+        if ((this.#type & ENOENT) === 0) {
+          try {
+            this.#applyStat(await this.#fs.promises.lstat(this.fullpath()));
+            return this;
+          } catch (er) {
+            this.#lstatFail(er.code);
+          }
+        }
+      }
+      /**
+       * synchronous {@link PathBase.lstat}
+       */
+      lstatSync() {
+        if ((this.#type & ENOENT) === 0) {
+          try {
+            this.#applyStat(this.#fs.lstatSync(this.fullpath()));
+            return this;
+          } catch (er) {
+            this.#lstatFail(er.code);
+          }
+        }
+      }
+      #applyStat(st) {
+        const { atime, atimeMs, birthtime, birthtimeMs, blksize, blocks, ctime, ctimeMs, dev, gid, ino, mode, mtime, mtimeMs, nlink, rdev, size, uid } = st;
+        this.#atime = atime;
+        this.#atimeMs = atimeMs;
+        this.#birthtime = birthtime;
+        this.#birthtimeMs = birthtimeMs;
+        this.#blksize = blksize;
+        this.#blocks = blocks;
+        this.#ctime = ctime;
+        this.#ctimeMs = ctimeMs;
+        this.#dev = dev;
+        this.#gid = gid;
+        this.#ino = ino;
+        this.#mode = mode;
+        this.#mtime = mtime;
+        this.#mtimeMs = mtimeMs;
+        this.#nlink = nlink;
+        this.#rdev = rdev;
+        this.#size = size;
+        this.#uid = uid;
+        const ifmt = entToType(st);
+        this.#type = this.#type & IFMT_UNKNOWN | ifmt | LSTAT_CALLED;
+        if (ifmt !== UNKNOWN && ifmt !== IFDIR && ifmt !== IFLNK) {
+          this.#type |= ENOTDIR;
+        }
+      }
+      #onReaddirCB = [];
+      #readdirCBInFlight = false;
+      #callOnReaddirCB(children) {
+        this.#readdirCBInFlight = false;
+        const cbs = this.#onReaddirCB.slice();
+        this.#onReaddirCB.length = 0;
+        cbs.forEach((cb) => cb(null, children));
+      }
+      /**
+       * Standard node-style callback interface to get list of directory entries.
+       *
+       * If the Path cannot or does not contain any children, then an empty array
+       * is returned.
+       *
+       * Results are cached, and thus may be out of date if the filesystem is
+       * mutated.
+       *
+       * @param cb The callback called with (er, entries).  Note that the `er`
+       * param is somewhat extraneous, as all readdir() errors are handled and
+       * simply result in an empty set of entries being returned.
+       * @param allowZalgo Boolean indicating that immediately known results should
+       * *not* be deferred with `queueMicrotask`. Defaults to `false`. Release
+       * zalgo at your peril, the dark pony lord is devious and unforgiving.
+       */
+      readdirCB(cb, allowZalgo = false) {
+        if (!this.canReaddir()) {
+          if (allowZalgo)
+            cb(null, []);
+          else
+            queueMicrotask(() => cb(null, []));
+          return;
+        }
+        const children = this.children();
+        if (this.calledReaddir()) {
+          const c = children.slice(0, children.provisional);
+          if (allowZalgo)
+            cb(null, c);
+          else
+            queueMicrotask(() => cb(null, c));
+          return;
+        }
+        this.#onReaddirCB.push(cb);
+        if (this.#readdirCBInFlight) {
+          return;
+        }
+        this.#readdirCBInFlight = true;
+        const fullpath = this.fullpath();
+        this.#fs.readdir(fullpath, { withFileTypes: true }, (er, entries) => {
+          if (er) {
+            this.#readdirFail(er.code);
+            children.provisional = 0;
+          } else {
+            for (const e of entries) {
+              this.#readdirAddChild(e, children);
+            }
+            this.#readdirSuccess(children);
+          }
+          this.#callOnReaddirCB(children.slice(0, children.provisional));
+          return;
+        });
+      }
+      #asyncReaddirInFlight;
+      /**
+       * Return an array of known child entries.
+       *
+       * If the Path cannot or does not contain any children, then an empty array
+       * is returned.
+       *
+       * Results are cached, and thus may be out of date if the filesystem is
+       * mutated.
+       */
+      async readdir() {
+        if (!this.canReaddir()) {
+          return [];
+        }
+        const children = this.children();
+        if (this.calledReaddir()) {
+          return children.slice(0, children.provisional);
+        }
+        const fullpath = this.fullpath();
+        if (this.#asyncReaddirInFlight) {
+          await this.#asyncReaddirInFlight;
+        } else {
+          let resolve = /* @__PURE__ */ __name(() => {
+          }, "resolve");
+          this.#asyncReaddirInFlight = new Promise((res) => resolve = res);
+          try {
+            for (const e of await this.#fs.promises.readdir(fullpath, {
+              withFileTypes: true
+            })) {
+              this.#readdirAddChild(e, children);
+            }
+            this.#readdirSuccess(children);
+          } catch (er) {
+            this.#readdirFail(er.code);
+            children.provisional = 0;
+          }
+          this.#asyncReaddirInFlight = void 0;
+          resolve();
+        }
+        return children.slice(0, children.provisional);
+      }
+      /**
+       * synchronous {@link PathBase.readdir}
+       */
+      readdirSync() {
+        if (!this.canReaddir()) {
+          return [];
+        }
+        const children = this.children();
+        if (this.calledReaddir()) {
+          return children.slice(0, children.provisional);
+        }
+        const fullpath = this.fullpath();
+        try {
+          for (const e of this.#fs.readdirSync(fullpath, {
+            withFileTypes: true
+          })) {
+            this.#readdirAddChild(e, children);
+          }
+          this.#readdirSuccess(children);
+        } catch (er) {
+          this.#readdirFail(er.code);
+          children.provisional = 0;
+        }
+        return children.slice(0, children.provisional);
+      }
+      canReaddir() {
+        if (this.#type & ENOCHILD)
+          return false;
+        const ifmt = IFMT & this.#type;
+        if (!(ifmt === UNKNOWN || ifmt === IFDIR || ifmt === IFLNK)) {
+          return false;
+        }
+        return true;
+      }
+      shouldWalk(dirs, walkFilter) {
+        return (this.#type & IFDIR) === IFDIR && !(this.#type & ENOCHILD) && !dirs.has(this) && (!walkFilter || walkFilter(this));
+      }
+      /**
+       * Return the Path object corresponding to path as resolved
+       * by realpath(3).
+       *
+       * If the realpath call fails for any reason, `undefined` is returned.
+       *
+       * Result is cached, and thus may be outdated if the filesystem is mutated.
+       * On success, returns a Path object.
+       */
+      async realpath() {
+        if (this.#realpath)
+          return this.#realpath;
+        if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type)
+          return void 0;
+        try {
+          const rp = await this.#fs.promises.realpath(this.fullpath());
+          return this.#realpath = this.resolve(rp);
+        } catch (_) {
+          this.#markENOREALPATH();
+        }
+      }
+      /**
+       * Synchronous {@link realpath}
+       */
+      realpathSync() {
+        if (this.#realpath)
+          return this.#realpath;
+        if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type)
+          return void 0;
+        try {
+          const rp = this.#fs.realpathSync(this.fullpath());
+          return this.#realpath = this.resolve(rp);
+        } catch (_) {
+          this.#markENOREALPATH();
+        }
+      }
+      /**
+       * Internal method to mark this Path object as the scurry cwd,
+       * called by {@link PathScurry#chdir}
+       *
+       * @internal
+       */
+      [setAsCwd](oldCwd) {
+        if (oldCwd === this)
+          return;
+        oldCwd.isCWD = false;
+        this.isCWD = true;
+        const changed = /* @__PURE__ */ new Set([]);
+        let rp = [];
+        let p = this;
+        while (p && p.parent) {
+          changed.add(p);
+          p.#relative = rp.join(this.sep);
+          p.#relativePosix = rp.join("/");
+          p = p.parent;
+          rp.push("..");
+        }
+        p = oldCwd;
+        while (p && p.parent && !changed.has(p)) {
+          p.#relative = void 0;
+          p.#relativePosix = void 0;
+          p = p.parent;
+        }
+      }
+    };
+    exports2.PathBase = PathBase;
+    var PathWin32 = class _PathWin32 extends PathBase {
+      static {
+        __name(this, "PathWin32");
+      }
+      /**
+       * Separator for generating path strings.
+       */
+      sep = "\\";
+      /**
+       * Separator for parsing path strings.
+       */
+      splitSep = eitherSep;
+      /**
+       * Do not create new Path objects directly.  They should always be accessed
+       * via the PathScurry class or other methods on the Path class.
+       *
+       * @internal
+       */
+      constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) {
+        super(name, type, root, roots, nocase, children, opts);
+      }
+      /**
+       * @internal
+       */
+      newChild(name, type = UNKNOWN, opts = {}) {
+        return new _PathWin32(name, type, this.root, this.roots, this.nocase, this.childrenCache(), opts);
+      }
+      /**
+       * @internal
+       */
+      getRootString(path) {
+        return node_path_1.win32.parse(path).root;
+      }
+      /**
+       * @internal
+       */
+      getRoot(rootPath) {
+        rootPath = uncToDrive(rootPath.toUpperCase());
+        if (rootPath === this.root.name) {
+          return this.root;
+        }
+        for (const [compare, root] of Object.entries(this.roots)) {
+          if (this.sameRoot(rootPath, compare)) {
+            return this.roots[rootPath] = root;
+          }
+        }
+        return this.roots[rootPath] = new PathScurryWin32(rootPath, this).root;
+      }
+      /**
+       * @internal
+       */
+      sameRoot(rootPath, compare = this.root.name) {
+        rootPath = rootPath.toUpperCase().replace(/\//g, "\\").replace(uncDriveRegexp, "$1\\");
+        return rootPath === compare;
+      }
+    };
+    exports2.PathWin32 = PathWin32;
+    var PathPosix = class _PathPosix extends PathBase {
+      static {
+        __name(this, "PathPosix");
+      }
+      /**
+       * separator for parsing path strings
+       */
+      splitSep = "/";
+      /**
+       * separator for generating path strings
+       */
+      sep = "/";
+      /**
+       * Do not create new Path objects directly.  They should always be accessed
+       * via the PathScurry class or other methods on the Path class.
+       *
+       * @internal
+       */
+      constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) {
+        super(name, type, root, roots, nocase, children, opts);
+      }
+      /**
+       * @internal
+       */
+      getRootString(path) {
+        return path.startsWith("/") ? "/" : "";
+      }
+      /**
+       * @internal
+       */
+      getRoot(_rootPath) {
+        return this.root;
+      }
+      /**
+       * @internal
+       */
+      newChild(name, type = UNKNOWN, opts = {}) {
+        return new _PathPosix(name, type, this.root, this.roots, this.nocase, this.childrenCache(), opts);
+      }
+    };
+    exports2.PathPosix = PathPosix;
+    var PathScurryBase = class {
+      static {
+        __name(this, "PathScurryBase");
+      }
+      /**
+       * The root Path entry for the current working directory of this Scurry
+       */
+      root;
+      /**
+       * The string path for the root of this Scurry's current working directory
+       */
+      rootPath;
+      /**
+       * A collection of all roots encountered, referenced by rootPath
+       */
+      roots;
+      /**
+       * The Path entry corresponding to this PathScurry's current working directory.
+       */
+      cwd;
+      #resolveCache;
+      #resolvePosixCache;
+      #children;
+      /**
+       * Perform path comparisons case-insensitively.
+       *
+       * Defaults true on Darwin and Windows systems, false elsewhere.
+       */
+      nocase;
+      #fs;
+      /**
+       * This class should not be instantiated directly.
+       *
+       * Use PathScurryWin32, PathScurryDarwin, PathScurryPosix, or PathScurry
+       *
+       * @internal
+       */
+      constructor(cwd = process.cwd(), pathImpl, sep, { nocase, childrenCacheSize = 16 * 1024, fs = defaultFS } = {}) {
+        this.#fs = fsFromOption(fs);
+        if (cwd instanceof URL || cwd.startsWith("file://")) {
+          cwd = (0, node_url_1.fileURLToPath)(cwd);
+        }
+        const cwdPath = pathImpl.resolve(cwd);
+        this.roots = /* @__PURE__ */ Object.create(null);
+        this.rootPath = this.parseRootPath(cwdPath);
+        this.#resolveCache = new ResolveCache();
+        this.#resolvePosixCache = new ResolveCache();
+        this.#children = new ChildrenCache(childrenCacheSize);
+        const split = cwdPath.substring(this.rootPath.length).split(sep);
+        if (split.length === 1 && !split[0]) {
+          split.pop();
+        }
+        if (nocase === void 0) {
+          throw new TypeError("must provide nocase setting to PathScurryBase ctor");
+        }
+        this.nocase = nocase;
+        this.root = this.newRoot(this.#fs);
+        this.roots[this.rootPath] = this.root;
+        let prev = this.root;
+        let len = split.length - 1;
+        const joinSep = pathImpl.sep;
+        let abs = this.rootPath;
+        let sawFirst = false;
+        for (const part of split) {
+          const l = len--;
+          prev = prev.child(part, {
+            relative: new Array(l).fill("..").join(joinSep),
+            relativePosix: new Array(l).fill("..").join("/"),
+            fullpath: abs += (sawFirst ? "" : joinSep) + part
+          });
+          sawFirst = true;
+        }
+        this.cwd = prev;
+      }
+      /**
+       * Get the depth of a provided path, string, or the cwd
+       */
+      depth(path = this.cwd) {
+        if (typeof path === "string") {
+          path = this.cwd.resolve(path);
+        }
+        return path.depth();
+      }
+      /**
+       * Return the cache of child entries.  Exposed so subclasses can create
+       * child Path objects in a platform-specific way.
+       *
+       * @internal
+       */
+      childrenCache() {
+        return this.#children;
+      }
+      /**
+       * Resolve one or more path strings to a resolved string
+       *
+       * Same interface as require('path').resolve.
+       *
+       * Much faster than path.resolve() when called multiple times for the same
+       * path, because the resolved Path objects are cached.  Much slower
+       * otherwise.
+       */
+      resolve(...paths) {
+        let r = "";
+        for (let i = paths.length - 1; i >= 0; i--) {
+          const p = paths[i];
+          if (!p || p === ".")
+            continue;
+          r = r ? `${p}/${r}` : p;
+          if (this.isAbsolute(p)) {
+            break;
+          }
+        }
+        const cached = this.#resolveCache.get(r);
+        if (cached !== void 0) {
+          return cached;
+        }
+        const result = this.cwd.resolve(r).fullpath();
+        this.#resolveCache.set(r, result);
+        return result;
+      }
+      /**
+       * Resolve one or more path strings to a resolved string, returning
+       * the posix path.  Identical to .resolve() on posix systems, but on
+       * windows will return a forward-slash separated UNC path.
+       *
+       * Same interface as require('path').resolve.
+       *
+       * Much faster than path.resolve() when called multiple times for the same
+       * path, because the resolved Path objects are cached.  Much slower
+       * otherwise.
+       */
+      resolvePosix(...paths) {
+        let r = "";
+        for (let i = paths.length - 1; i >= 0; i--) {
+          const p = paths[i];
+          if (!p || p === ".")
+            continue;
+          r = r ? `${p}/${r}` : p;
+          if (this.isAbsolute(p)) {
+            break;
+          }
+        }
+        const cached = this.#resolvePosixCache.get(r);
+        if (cached !== void 0) {
+          return cached;
+        }
+        const result = this.cwd.resolve(r).fullpathPosix();
+        this.#resolvePosixCache.set(r, result);
+        return result;
+      }
+      /**
+       * find the relative path from the cwd to the supplied path string or entry
+       */
+      relative(entry = this.cwd) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        }
+        return entry.relative();
+      }
+      /**
+       * find the relative path from the cwd to the supplied path string or
+       * entry, using / as the path delimiter, even on Windows.
+       */
+      relativePosix(entry = this.cwd) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        }
+        return entry.relativePosix();
+      }
+      /**
+       * Return the basename for the provided string or Path object
+       */
+      basename(entry = this.cwd) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        }
+        return entry.name;
+      }
+      /**
+       * Return the dirname for the provided string or Path object
+       */
+      dirname(entry = this.cwd) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        }
+        return (entry.parent || entry).fullpath();
+      }
+      async readdir(entry = this.cwd, opts = {
+        withFileTypes: true
+      }) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          opts = entry;
+          entry = this.cwd;
+        }
+        const { withFileTypes } = opts;
+        if (!entry.canReaddir()) {
+          return [];
+        } else {
+          const p = await entry.readdir();
+          return withFileTypes ? p : p.map((e) => e.name);
+        }
+      }
+      readdirSync(entry = this.cwd, opts = {
+        withFileTypes: true
+      }) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          opts = entry;
+          entry = this.cwd;
+        }
+        const { withFileTypes = true } = opts;
+        if (!entry.canReaddir()) {
+          return [];
+        } else if (withFileTypes) {
+          return entry.readdirSync();
+        } else {
+          return entry.readdirSync().map((e) => e.name);
+        }
+      }
+      /**
+       * Call lstat() on the string or Path object, and update all known
+       * information that can be determined.
+       *
+       * Note that unlike `fs.lstat()`, the returned value does not contain some
+       * information, such as `mode`, `dev`, `nlink`, and `ino`.  If that
+       * information is required, you will need to call `fs.lstat` yourself.
+       *
+       * If the Path refers to a nonexistent file, or if the lstat call fails for
+       * any reason, `undefined` is returned.  Otherwise the updated Path object is
+       * returned.
+       *
+       * Results are cached, and thus may be out of date if the filesystem is
+       * mutated.
+       */
+      async lstat(entry = this.cwd) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        }
+        return entry.lstat();
+      }
+      /**
+       * synchronous {@link PathScurryBase.lstat}
+       */
+      lstatSync(entry = this.cwd) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        }
+        return entry.lstatSync();
+      }
+      async readlink(entry = this.cwd, { withFileTypes } = {
+        withFileTypes: false
+      }) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          withFileTypes = entry.withFileTypes;
+          entry = this.cwd;
+        }
+        const e = await entry.readlink();
+        return withFileTypes ? e : e?.fullpath();
+      }
+      readlinkSync(entry = this.cwd, { withFileTypes } = {
+        withFileTypes: false
+      }) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          withFileTypes = entry.withFileTypes;
+          entry = this.cwd;
+        }
+        const e = entry.readlinkSync();
+        return withFileTypes ? e : e?.fullpath();
+      }
+      async realpath(entry = this.cwd, { withFileTypes } = {
+        withFileTypes: false
+      }) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          withFileTypes = entry.withFileTypes;
+          entry = this.cwd;
+        }
+        const e = await entry.realpath();
+        return withFileTypes ? e : e?.fullpath();
+      }
+      realpathSync(entry = this.cwd, { withFileTypes } = {
+        withFileTypes: false
+      }) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          withFileTypes = entry.withFileTypes;
+          entry = this.cwd;
+        }
+        const e = entry.realpathSync();
+        return withFileTypes ? e : e?.fullpath();
+      }
+      async walk(entry = this.cwd, opts = {}) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          opts = entry;
+          entry = this.cwd;
+        }
+        const { withFileTypes = true, follow = false, filter, walkFilter } = opts;
+        const results = [];
+        if (!filter || filter(entry)) {
+          results.push(withFileTypes ? entry : entry.fullpath());
+        }
+        const dirs = /* @__PURE__ */ new Set();
+        const walk = /* @__PURE__ */ __name((dir, cb) => {
+          dirs.add(dir);
+          dir.readdirCB((er, entries) => {
+            if (er) {
+              return cb(er);
+            }
+            let len = entries.length;
+            if (!len)
+              return cb();
+            const next = /* @__PURE__ */ __name(() => {
+              if (--len === 0) {
+                cb();
+              }
+            }, "next");
+            for (const e of entries) {
+              if (!filter || filter(e)) {
+                results.push(withFileTypes ? e : e.fullpath());
+              }
+              if (follow && e.isSymbolicLink()) {
+                e.realpath().then((r) => r?.isUnknown() ? r.lstat() : r).then((r) => r?.shouldWalk(dirs, walkFilter) ? walk(r, next) : next());
+              } else {
+                if (e.shouldWalk(dirs, walkFilter)) {
+                  walk(e, next);
+                } else {
+                  next();
+                }
+              }
+            }
+          }, true);
+        }, "walk");
+        const start = entry;
+        return new Promise((res, rej) => {
+          walk(start, (er) => {
+            if (er)
+              return rej(er);
+            res(results);
+          });
+        });
+      }
+      walkSync(entry = this.cwd, opts = {}) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          opts = entry;
+          entry = this.cwd;
+        }
+        const { withFileTypes = true, follow = false, filter, walkFilter } = opts;
+        const results = [];
+        if (!filter || filter(entry)) {
+          results.push(withFileTypes ? entry : entry.fullpath());
+        }
+        const dirs = /* @__PURE__ */ new Set([entry]);
+        for (const dir of dirs) {
+          const entries = dir.readdirSync();
+          for (const e of entries) {
+            if (!filter || filter(e)) {
+              results.push(withFileTypes ? e : e.fullpath());
+            }
+            let r = e;
+            if (e.isSymbolicLink()) {
+              if (!(follow && (r = e.realpathSync())))
+                continue;
+              if (r.isUnknown())
+                r.lstatSync();
+            }
+            if (r.shouldWalk(dirs, walkFilter)) {
+              dirs.add(r);
+            }
+          }
+        }
+        return results;
+      }
+      /**
+       * Support for `for await`
+       *
+       * Alias for {@link PathScurryBase.iterate}
+       *
+       * Note: As of Node 19, this is very slow, compared to other methods of
+       * walking.  Consider using {@link PathScurryBase.stream} if memory overhead
+       * and backpressure are concerns, or {@link PathScurryBase.walk} if not.
+       */
+      [Symbol.asyncIterator]() {
+        return this.iterate();
+      }
+      iterate(entry = this.cwd, options = {}) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          options = entry;
+          entry = this.cwd;
+        }
+        return this.stream(entry, options)[Symbol.asyncIterator]();
+      }
+      /**
+       * Iterating over a PathScurry performs a synchronous walk.
+       *
+       * Alias for {@link PathScurryBase.iterateSync}
+       */
+      [Symbol.iterator]() {
+        return this.iterateSync();
+      }
+      *iterateSync(entry = this.cwd, opts = {}) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          opts = entry;
+          entry = this.cwd;
+        }
+        const { withFileTypes = true, follow = false, filter, walkFilter } = opts;
+        if (!filter || filter(entry)) {
+          yield withFileTypes ? entry : entry.fullpath();
+        }
+        const dirs = /* @__PURE__ */ new Set([entry]);
+        for (const dir of dirs) {
+          const entries = dir.readdirSync();
+          for (const e of entries) {
+            if (!filter || filter(e)) {
+              yield withFileTypes ? e : e.fullpath();
+            }
+            let r = e;
+            if (e.isSymbolicLink()) {
+              if (!(follow && (r = e.realpathSync())))
+                continue;
+              if (r.isUnknown())
+                r.lstatSync();
+            }
+            if (r.shouldWalk(dirs, walkFilter)) {
+              dirs.add(r);
+            }
+          }
+        }
+      }
+      stream(entry = this.cwd, opts = {}) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          opts = entry;
+          entry = this.cwd;
+        }
+        const { withFileTypes = true, follow = false, filter, walkFilter } = opts;
+        const results = new minipass_1.Minipass({ objectMode: true });
+        if (!filter || filter(entry)) {
+          results.write(withFileTypes ? entry : entry.fullpath());
+        }
+        const dirs = /* @__PURE__ */ new Set();
+        const queue = [entry];
+        let processing = 0;
+        const process3 = /* @__PURE__ */ __name(() => {
+          let paused = false;
+          while (!paused) {
+            const dir = queue.shift();
+            if (!dir) {
+              if (processing === 0)
+                results.end();
+              return;
+            }
+            processing++;
+            dirs.add(dir);
+            const onReaddir = /* @__PURE__ */ __name((er, entries, didRealpaths = false) => {
+              if (er)
+                return results.emit("error", er);
+              if (follow && !didRealpaths) {
+                const promises = [];
+                for (const e of entries) {
+                  if (e.isSymbolicLink()) {
+                    promises.push(e.realpath().then((r) => r?.isUnknown() ? r.lstat() : r));
+                  }
+                }
+                if (promises.length) {
+                  Promise.all(promises).then(() => onReaddir(null, entries, true));
+                  return;
+                }
+              }
+              for (const e of entries) {
+                if (e && (!filter || filter(e))) {
+                  if (!results.write(withFileTypes ? e : e.fullpath())) {
+                    paused = true;
+                  }
+                }
+              }
+              processing--;
+              for (const e of entries) {
+                const r = e.realpathCached() || e;
+                if (r.shouldWalk(dirs, walkFilter)) {
+                  queue.push(r);
+                }
+              }
+              if (paused && !results.flowing) {
+                results.once("drain", process3);
+              } else if (!sync) {
+                process3();
+              }
+            }, "onReaddir");
+            let sync = true;
+            dir.readdirCB(onReaddir, true);
+            sync = false;
+          }
+        }, "process");
+        process3();
+        return results;
+      }
+      streamSync(entry = this.cwd, opts = {}) {
+        if (typeof entry === "string") {
+          entry = this.cwd.resolve(entry);
+        } else if (!(entry instanceof PathBase)) {
+          opts = entry;
+          entry = this.cwd;
+        }
+        const { withFileTypes = true, follow = false, filter, walkFilter } = opts;
+        const results = new minipass_1.Minipass({ objectMode: true });
+        const dirs = /* @__PURE__ */ new Set();
+        if (!filter || filter(entry)) {
+          results.write(withFileTypes ? entry : entry.fullpath());
+        }
+        const queue = [entry];
+        let processing = 0;
+        const process3 = /* @__PURE__ */ __name(() => {
+          let paused = false;
+          while (!paused) {
+            const dir = queue.shift();
+            if (!dir) {
+              if (processing === 0)
+                results.end();
+              return;
+            }
+            processing++;
+            dirs.add(dir);
+            const entries = dir.readdirSync();
+            for (const e of entries) {
+              if (!filter || filter(e)) {
+                if (!results.write(withFileTypes ? e : e.fullpath())) {
+                  paused = true;
+                }
+              }
+            }
+            processing--;
+            for (const e of entries) {
+              let r = e;
+              if (e.isSymbolicLink()) {
+                if (!(follow && (r = e.realpathSync())))
+                  continue;
+                if (r.isUnknown())
+                  r.lstatSync();
+              }
+              if (r.shouldWalk(dirs, walkFilter)) {
+                queue.push(r);
+              }
+            }
+          }
+          if (paused && !results.flowing)
+            results.once("drain", process3);
+        }, "process");
+        process3();
+        return results;
+      }
+      chdir(path = this.cwd) {
+        const oldCwd = this.cwd;
+        this.cwd = typeof path === "string" ? this.cwd.resolve(path) : path;
+        this.cwd[setAsCwd](oldCwd);
+      }
+    };
+    exports2.PathScurryBase = PathScurryBase;
+    var PathScurryWin32 = class extends PathScurryBase {
+      static {
+        __name(this, "PathScurryWin32");
+      }
+      /**
+       * separator for generating path strings
+       */
+      sep = "\\";
+      constructor(cwd = process.cwd(), opts = {}) {
+        const { nocase = true } = opts;
+        super(cwd, node_path_1.win32, "\\", { ...opts, nocase });
+        this.nocase = nocase;
+        for (let p = this.cwd; p; p = p.parent) {
+          p.nocase = this.nocase;
+        }
+      }
+      /**
+       * @internal
+       */
+      parseRootPath(dir) {
+        return node_path_1.win32.parse(dir).root.toUpperCase();
+      }
+      /**
+       * @internal
+       */
+      newRoot(fs) {
+        return new PathWin32(this.rootPath, IFDIR, void 0, this.roots, this.nocase, this.childrenCache(), { fs });
+      }
+      /**
+       * Return true if the provided path string is an absolute path
+       */
+      isAbsolute(p) {
+        return p.startsWith("/") || p.startsWith("\\") || /^[a-z]:(\/|\\)/i.test(p);
+      }
+    };
+    exports2.PathScurryWin32 = PathScurryWin32;
+    var PathScurryPosix = class extends PathScurryBase {
+      static {
+        __name(this, "PathScurryPosix");
+      }
+      /**
+       * separator for generating path strings
+       */
+      sep = "/";
+      constructor(cwd = process.cwd(), opts = {}) {
+        const { nocase = false } = opts;
+        super(cwd, node_path_1.posix, "/", { ...opts, nocase });
+        this.nocase = nocase;
+      }
+      /**
+       * @internal
+       */
+      parseRootPath(_dir) {
+        return "/";
+      }
+      /**
+       * @internal
+       */
+      newRoot(fs) {
+        return new PathPosix(this.rootPath, IFDIR, void 0, this.roots, this.nocase, this.childrenCache(), { fs });
+      }
+      /**
+       * Return true if the provided path string is an absolute path
+       */
+      isAbsolute(p) {
+        return p.startsWith("/");
+      }
+    };
+    exports2.PathScurryPosix = PathScurryPosix;
+    var PathScurryDarwin = class extends PathScurryPosix {
+      static {
+        __name(this, "PathScurryDarwin");
+      }
+      constructor(cwd = process.cwd(), opts = {}) {
+        const { nocase = true } = opts;
+        super(cwd, { ...opts, nocase });
+      }
+    };
+    exports2.PathScurryDarwin = PathScurryDarwin;
+    exports2.Path = process.platform === "win32" ? PathWin32 : PathPosix;
+    exports2.PathScurry = process.platform === "win32" ? PathScurryWin32 : process.platform === "darwin" ? PathScurryDarwin : PathScurryPosix;
+  }
+});
+
+// node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/pattern.js
+var require_pattern = __commonJS({
+  "node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/pattern.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Pattern = void 0;
+    var minimatch_1 = require_commonjs4();
+    var isPatternList = /* @__PURE__ */ __name((pl) => pl.length >= 1, "isPatternList");
+    var isGlobList = /* @__PURE__ */ __name((gl) => gl.length >= 1, "isGlobList");
+    var Pattern = class _Pattern {
+      static {
+        __name(this, "Pattern");
+      }
+      #patternList;
+      #globList;
+      #index;
+      length;
+      #platform;
+      #rest;
+      #globString;
+      #isDrive;
+      #isUNC;
+      #isAbsolute;
+      #followGlobstar = true;
+      constructor(patternList, globList, index, platform) {
+        if (!isPatternList(patternList)) {
+          throw new TypeError("empty pattern list");
+        }
+        if (!isGlobList(globList)) {
+          throw new TypeError("empty glob list");
+        }
+        if (globList.length !== patternList.length) {
+          throw new TypeError("mismatched pattern list and glob list lengths");
+        }
+        this.length = patternList.length;
+        if (index < 0 || index >= this.length) {
+          throw new TypeError("index out of range");
+        }
+        this.#patternList = patternList;
+        this.#globList = globList;
+        this.#index = index;
+        this.#platform = platform;
+        if (this.#index === 0) {
+          if (this.isUNC()) {
+            const [p0, p1, p2, p3, ...prest] = this.#patternList;
+            const [g0, g1, g2, g3, ...grest] = this.#globList;
+            if (prest[0] === "") {
+              prest.shift();
+              grest.shift();
+            }
+            const p = [p0, p1, p2, p3, ""].join("/");
+            const g = [g0, g1, g2, g3, ""].join("/");
+            this.#patternList = [p, ...prest];
+            this.#globList = [g, ...grest];
+            this.length = this.#patternList.length;
+          } else if (this.isDrive() || this.isAbsolute()) {
+            const [p1, ...prest] = this.#patternList;
+            const [g1, ...grest] = this.#globList;
+            if (prest[0] === "") {
+              prest.shift();
+              grest.shift();
+            }
+            const p = p1 + "/";
+            const g = g1 + "/";
+            this.#patternList = [p, ...prest];
+            this.#globList = [g, ...grest];
+            this.length = this.#patternList.length;
+          }
+        }
+      }
+      /**
+       * The first entry in the parsed list of patterns
+       */
+      pattern() {
+        return this.#patternList[this.#index];
+      }
+      /**
+       * true of if pattern() returns a string
+       */
+      isString() {
+        return typeof this.#patternList[this.#index] === "string";
+      }
+      /**
+       * true of if pattern() returns GLOBSTAR
+       */
+      isGlobstar() {
+        return this.#patternList[this.#index] === minimatch_1.GLOBSTAR;
+      }
+      /**
+       * true if pattern() returns a regexp
+       */
+      isRegExp() {
+        return this.#patternList[this.#index] instanceof RegExp;
+      }
+      /**
+       * The /-joined set of glob parts that make up this pattern
+       */
+      globString() {
+        return this.#globString = this.#globString || (this.#index === 0 ? this.isAbsolute() ? this.#globList[0] + this.#globList.slice(1).join("/") : this.#globList.join("/") : this.#globList.slice(this.#index).join("/"));
+      }
+      /**
+       * true if there are more pattern parts after this one
+       */
+      hasMore() {
+        return this.length > this.#index + 1;
+      }
+      /**
+       * The rest of the pattern after this part, or null if this is the end
+       */
+      rest() {
+        if (this.#rest !== void 0)
+          return this.#rest;
+        if (!this.hasMore())
+          return this.#rest = null;
+        this.#rest = new _Pattern(this.#patternList, this.#globList, this.#index + 1, this.#platform);
+        this.#rest.#isAbsolute = this.#isAbsolute;
+        this.#rest.#isUNC = this.#isUNC;
+        this.#rest.#isDrive = this.#isDrive;
+        return this.#rest;
+      }
+      /**
+       * true if the pattern represents a //unc/path/ on windows
+       */
+      isUNC() {
+        const pl = this.#patternList;
+        return this.#isUNC !== void 0 ? this.#isUNC : this.#isUNC = this.#platform === "win32" && this.#index === 0 && pl[0] === "" && pl[1] === "" && typeof pl[2] === "string" && !!pl[2] && typeof pl[3] === "string" && !!pl[3];
+      }
+      // pattern like C:/...
+      // split = ['C:', ...]
+      // XXX: would be nice to handle patterns like `c:*` to test the cwd
+      // in c: for *, but I don't know of a way to even figure out what that
+      // cwd is without actually chdir'ing into it?
+      /**
+       * True if the pattern starts with a drive letter on Windows
+       */
+      isDrive() {
+        const pl = this.#patternList;
+        return this.#isDrive !== void 0 ? this.#isDrive : this.#isDrive = this.#platform === "win32" && this.#index === 0 && this.length > 1 && typeof pl[0] === "string" && /^[a-z]:$/i.test(pl[0]);
+      }
+      // pattern = '/' or '/...' or '/x/...'
+      // split = ['', ''] or ['', ...] or ['', 'x', ...]
+      // Drive and UNC both considered absolute on windows
+      /**
+       * True if the pattern is rooted on an absolute path
+       */
+      isAbsolute() {
+        const pl = this.#patternList;
+        return this.#isAbsolute !== void 0 ? this.#isAbsolute : this.#isAbsolute = pl[0] === "" && pl.length > 1 || this.isDrive() || this.isUNC();
+      }
+      /**
+       * consume the root of the pattern, and return it
+       */
+      root() {
+        const p = this.#patternList[0];
+        return typeof p === "string" && this.isAbsolute() && this.#index === 0 ? p : "";
+      }
+      /**
+       * Check to see if the current globstar pattern is allowed to follow
+       * a symbolic link.
+       */
+      checkFollowGlobstar() {
+        return !(this.#index === 0 || !this.isGlobstar() || !this.#followGlobstar);
+      }
+      /**
+       * Mark that the current globstar pattern is following a symbolic link
+       */
+      markFollowGlobstar() {
+        if (this.#index === 0 || !this.isGlobstar() || !this.#followGlobstar)
+          return false;
+        this.#followGlobstar = false;
+        return true;
+      }
+    };
+    exports2.Pattern = Pattern;
+  }
+});
+
+// node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/ignore.js
+var require_ignore = __commonJS({
+  "node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/ignore.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Ignore = void 0;
+    var minimatch_1 = require_commonjs4();
+    var pattern_js_1 = require_pattern();
+    var defaultPlatform = typeof process === "object" && process && typeof process.platform === "string" ? process.platform : "linux";
+    var Ignore = class {
+      static {
+        __name(this, "Ignore");
+      }
+      relative;
+      relativeChildren;
+      absolute;
+      absoluteChildren;
+      platform;
+      mmopts;
+      constructor(ignored, { nobrace, nocase, noext, noglobstar, platform = defaultPlatform }) {
+        this.relative = [];
+        this.absolute = [];
+        this.relativeChildren = [];
+        this.absoluteChildren = [];
+        this.platform = platform;
+        this.mmopts = {
+          dot: true,
+          nobrace,
+          nocase,
+          noext,
+          noglobstar,
+          optimizationLevel: 2,
+          platform,
+          nocomment: true,
+          nonegate: true
+        };
+        for (const ign of ignored)
+          this.add(ign);
+      }
+      add(ign) {
+        const mm = new minimatch_1.Minimatch(ign, this.mmopts);
+        for (let i = 0; i < mm.set.length; i++) {
+          const parsed = mm.set[i];
+          const globParts = mm.globParts[i];
+          if (!parsed || !globParts) {
+            throw new Error("invalid pattern object");
+          }
+          while (parsed[0] === "." && globParts[0] === ".") {
+            parsed.shift();
+            globParts.shift();
+          }
+          const p = new pattern_js_1.Pattern(parsed, globParts, 0, this.platform);
+          const m = new minimatch_1.Minimatch(p.globString(), this.mmopts);
+          const children = globParts[globParts.length - 1] === "**";
+          const absolute = p.isAbsolute();
+          if (absolute)
+            this.absolute.push(m);
+          else
+            this.relative.push(m);
+          if (children) {
+            if (absolute)
+              this.absoluteChildren.push(m);
+            else
+              this.relativeChildren.push(m);
+          }
+        }
+      }
+      ignored(p) {
+        const fullpath = p.fullpath();
+        const fullpaths = `${fullpath}/`;
+        const relative = p.relative() || ".";
+        const relatives = `${relative}/`;
+        for (const m of this.relative) {
+          if (m.match(relative) || m.match(relatives))
+            return true;
+        }
+        for (const m of this.absolute) {
+          if (m.match(fullpath) || m.match(fullpaths))
+            return true;
+        }
+        return false;
+      }
+      childrenIgnored(p) {
+        const fullpath = p.fullpath() + "/";
+        const relative = (p.relative() || ".") + "/";
+        for (const m of this.relativeChildren) {
+          if (m.match(relative))
+            return true;
+        }
+        for (const m of this.absoluteChildren) {
+          if (m.match(fullpath))
+            return true;
+        }
+        return false;
+      }
+    };
+    exports2.Ignore = Ignore;
+  }
+});
+
+// node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/processor.js
+var require_processor = __commonJS({
+  "node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/processor.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Processor = exports2.SubWalks = exports2.MatchRecord = exports2.HasWalkedCache = void 0;
+    var minimatch_1 = require_commonjs4();
+    var HasWalkedCache = class _HasWalkedCache {
+      static {
+        __name(this, "HasWalkedCache");
+      }
+      store;
+      constructor(store = /* @__PURE__ */ new Map()) {
+        this.store = store;
+      }
+      copy() {
+        return new _HasWalkedCache(new Map(this.store));
+      }
+      hasWalked(target, pattern) {
+        return this.store.get(target.fullpath())?.has(pattern.globString());
+      }
+      storeWalked(target, pattern) {
+        const fullpath = target.fullpath();
+        const cached = this.store.get(fullpath);
+        if (cached)
+          cached.add(pattern.globString());
+        else
+          this.store.set(fullpath, /* @__PURE__ */ new Set([pattern.globString()]));
+      }
+    };
+    exports2.HasWalkedCache = HasWalkedCache;
+    var MatchRecord = class {
+      static {
+        __name(this, "MatchRecord");
+      }
+      store = /* @__PURE__ */ new Map();
+      add(target, absolute, ifDir) {
+        const n = (absolute ? 2 : 0) | (ifDir ? 1 : 0);
+        const current = this.store.get(target);
+        this.store.set(target, current === void 0 ? n : n & current);
+      }
+      // match, absolute, ifdir
+      entries() {
+        return [...this.store.entries()].map(([path, n]) => [
+          path,
+          !!(n & 2),
+          !!(n & 1)
+        ]);
+      }
+    };
+    exports2.MatchRecord = MatchRecord;
+    var SubWalks = class {
+      static {
+        __name(this, "SubWalks");
+      }
+      store = /* @__PURE__ */ new Map();
+      add(target, pattern) {
+        if (!target.canReaddir()) {
+          return;
+        }
+        const subs = this.store.get(target);
+        if (subs) {
+          if (!subs.find((p) => p.globString() === pattern.globString())) {
+            subs.push(pattern);
+          }
+        } else
+          this.store.set(target, [pattern]);
+      }
+      get(target) {
+        const subs = this.store.get(target);
+        if (!subs) {
+          throw new Error("attempting to walk unknown path");
+        }
+        return subs;
+      }
+      entries() {
+        return this.keys().map((k) => [k, this.store.get(k)]);
+      }
+      keys() {
+        return [...this.store.keys()].filter((t) => t.canReaddir());
+      }
+    };
+    exports2.SubWalks = SubWalks;
+    var Processor = class _Processor {
+      static {
+        __name(this, "Processor");
+      }
+      hasWalkedCache;
+      matches = new MatchRecord();
+      subwalks = new SubWalks();
+      patterns;
+      follow;
+      dot;
+      opts;
+      constructor(opts, hasWalkedCache) {
+        this.opts = opts;
+        this.follow = !!opts.follow;
+        this.dot = !!opts.dot;
+        this.hasWalkedCache = hasWalkedCache ? hasWalkedCache.copy() : new HasWalkedCache();
+      }
+      processPatterns(target, patterns) {
+        this.patterns = patterns;
+        const processingSet = patterns.map((p) => [target, p]);
+        for (let [t, pattern] of processingSet) {
+          this.hasWalkedCache.storeWalked(t, pattern);
+          const root = pattern.root();
+          const absolute = pattern.isAbsolute() && this.opts.absolute !== false;
+          if (root) {
+            t = t.resolve(root === "/" && this.opts.root !== void 0 ? this.opts.root : root);
+            const rest2 = pattern.rest();
+            if (!rest2) {
+              this.matches.add(t, true, false);
+              continue;
+            } else {
+              pattern = rest2;
+            }
+          }
+          if (t.isENOENT())
+            continue;
+          let p;
+          let rest;
+          let changed = false;
+          while (typeof (p = pattern.pattern()) === "string" && (rest = pattern.rest())) {
+            const c = t.resolve(p);
+            t = c;
+            pattern = rest;
+            changed = true;
+          }
+          p = pattern.pattern();
+          rest = pattern.rest();
+          if (changed) {
+            if (this.hasWalkedCache.hasWalked(t, pattern))
+              continue;
+            this.hasWalkedCache.storeWalked(t, pattern);
+          }
+          if (typeof p === "string") {
+            const ifDir = p === ".." || p === "" || p === ".";
+            this.matches.add(t.resolve(p), absolute, ifDir);
+            continue;
+          } else if (p === minimatch_1.GLOBSTAR) {
+            if (!t.isSymbolicLink() || this.follow || pattern.checkFollowGlobstar()) {
+              this.subwalks.add(t, pattern);
+            }
+            const rp = rest?.pattern();
+            const rrest = rest?.rest();
+            if (!rest || (rp === "" || rp === ".") && !rrest) {
+              this.matches.add(t, absolute, rp === "" || rp === ".");
+            } else {
+              if (rp === "..") {
+                const tp = t.parent || t;
+                if (!rrest)
+                  this.matches.add(tp, absolute, true);
+                else if (!this.hasWalkedCache.hasWalked(tp, rrest)) {
+                  this.subwalks.add(tp, rrest);
+                }
+              }
+            }
+          } else if (p instanceof RegExp) {
+            this.subwalks.add(t, pattern);
+          }
+        }
+        return this;
+      }
+      subwalkTargets() {
+        return this.subwalks.keys();
+      }
+      child() {
+        return new _Processor(this.opts, this.hasWalkedCache);
+      }
+      // return a new Processor containing the subwalks for each
+      // child entry, and a set of matches, and
+      // a hasWalkedCache that's a copy of this one
+      // then we're going to call
+      filterEntries(parent, entries) {
+        const patterns = this.subwalks.get(parent);
+        const results = this.child();
+        for (const e of entries) {
+          for (const pattern of patterns) {
+            const absolute = pattern.isAbsolute();
+            const p = pattern.pattern();
+            const rest = pattern.rest();
+            if (p === minimatch_1.GLOBSTAR) {
+              results.testGlobstar(e, pattern, rest, absolute);
+            } else if (p instanceof RegExp) {
+              results.testRegExp(e, p, rest, absolute);
+            } else {
+              results.testString(e, p, rest, absolute);
+            }
+          }
+        }
+        return results;
+      }
+      testGlobstar(e, pattern, rest, absolute) {
+        if (this.dot || !e.name.startsWith(".")) {
+          if (!pattern.hasMore()) {
+            this.matches.add(e, absolute, false);
+          }
+          if (e.canReaddir()) {
+            if (this.follow || !e.isSymbolicLink()) {
+              this.subwalks.add(e, pattern);
+            } else if (e.isSymbolicLink()) {
+              if (rest && pattern.checkFollowGlobstar()) {
+                this.subwalks.add(e, rest);
+              } else if (pattern.markFollowGlobstar()) {
+                this.subwalks.add(e, pattern);
+              }
+            }
+          }
+        }
+        if (rest) {
+          const rp = rest.pattern();
+          if (typeof rp === "string" && // dots and empty were handled already
+          rp !== ".." && rp !== "" && rp !== ".") {
+            this.testString(e, rp, rest.rest(), absolute);
+          } else if (rp === "..") {
+            const ep = e.parent || e;
+            this.subwalks.add(ep, rest);
+          } else if (rp instanceof RegExp) {
+            this.testRegExp(e, rp, rest.rest(), absolute);
+          }
+        }
+      }
+      testRegExp(e, p, rest, absolute) {
+        if (!p.test(e.name))
+          return;
+        if (!rest) {
+          this.matches.add(e, absolute, false);
+        } else {
+          this.subwalks.add(e, rest);
+        }
+      }
+      testString(e, p, rest, absolute) {
+        if (!e.isNamed(p))
+          return;
+        if (!rest) {
+          this.matches.add(e, absolute, false);
+        } else {
+          this.subwalks.add(e, rest);
+        }
+      }
+    };
+    exports2.Processor = Processor;
+  }
+});
+
+// node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/walker.js
+var require_walker = __commonJS({
+  "node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/walker.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.GlobStream = exports2.GlobWalker = exports2.GlobUtil = void 0;
+    var minipass_1 = require_commonjs5();
+    var ignore_js_1 = require_ignore();
+    var processor_js_1 = require_processor();
+    var makeIgnore = /* @__PURE__ */ __name((ignore, opts) => typeof ignore === "string" ? new ignore_js_1.Ignore([ignore], opts) : Array.isArray(ignore) ? new ignore_js_1.Ignore(ignore, opts) : ignore, "makeIgnore");
+    var GlobUtil = class {
+      static {
+        __name(this, "GlobUtil");
+      }
+      path;
+      patterns;
+      opts;
+      seen = /* @__PURE__ */ new Set();
+      paused = false;
+      aborted = false;
+      #onResume = [];
+      #ignore;
+      #sep;
+      signal;
+      maxDepth;
+      includeChildMatches;
+      constructor(patterns, path, opts) {
+        this.patterns = patterns;
+        this.path = path;
+        this.opts = opts;
+        this.#sep = !opts.posix && opts.platform === "win32" ? "\\" : "/";
+        this.includeChildMatches = opts.includeChildMatches !== false;
+        if (opts.ignore || !this.includeChildMatches) {
+          this.#ignore = makeIgnore(opts.ignore ?? [], opts);
+          if (!this.includeChildMatches && typeof this.#ignore.add !== "function") {
+            const m = "cannot ignore child matches, ignore lacks add() method.";
+            throw new Error(m);
+          }
+        }
+        this.maxDepth = opts.maxDepth || Infinity;
+        if (opts.signal) {
+          this.signal = opts.signal;
+          this.signal.addEventListener("abort", () => {
+            this.#onResume.length = 0;
+          });
+        }
+      }
+      #ignored(path) {
+        return this.seen.has(path) || !!this.#ignore?.ignored?.(path);
+      }
+      #childrenIgnored(path) {
+        return !!this.#ignore?.childrenIgnored?.(path);
+      }
+      // backpressure mechanism
+      pause() {
+        this.paused = true;
+      }
+      resume() {
+        if (this.signal?.aborted)
+          return;
+        this.paused = false;
+        let fn = void 0;
+        while (!this.paused && (fn = this.#onResume.shift())) {
+          fn();
+        }
+      }
+      onResume(fn) {
+        if (this.signal?.aborted)
+          return;
+        if (!this.paused) {
+          fn();
+        } else {
+          this.#onResume.push(fn);
+        }
+      }
+      // do the requisite realpath/stat checking, and return the path
+      // to add or undefined to filter it out.
+      async matchCheck(e, ifDir) {
+        if (ifDir && this.opts.nodir)
+          return void 0;
+        let rpc;
+        if (this.opts.realpath) {
+          rpc = e.realpathCached() || await e.realpath();
+          if (!rpc)
+            return void 0;
+          e = rpc;
+        }
+        const needStat = e.isUnknown() || this.opts.stat;
+        const s = needStat ? await e.lstat() : e;
+        if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {
+          const target = await s.realpath();
+          if (target && (target.isUnknown() || this.opts.stat)) {
+            await target.lstat();
+          }
+        }
+        return this.matchCheckTest(s, ifDir);
+      }
+      matchCheckTest(e, ifDir) {
+        return e && (this.maxDepth === Infinity || e.depth() <= this.maxDepth) && (!ifDir || e.canReaddir()) && (!this.opts.nodir || !e.isDirectory()) && (!this.opts.nodir || !this.opts.follow || !e.isSymbolicLink() || !e.realpathCached()?.isDirectory()) && !this.#ignored(e) ? e : void 0;
+      }
+      matchCheckSync(e, ifDir) {
+        if (ifDir && this.opts.nodir)
+          return void 0;
+        let rpc;
+        if (this.opts.realpath) {
+          rpc = e.realpathCached() || e.realpathSync();
+          if (!rpc)
+            return void 0;
+          e = rpc;
+        }
+        const needStat = e.isUnknown() || this.opts.stat;
+        const s = needStat ? e.lstatSync() : e;
+        if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {
+          const target = s.realpathSync();
+          if (target && (target?.isUnknown() || this.opts.stat)) {
+            target.lstatSync();
+          }
+        }
+        return this.matchCheckTest(s, ifDir);
+      }
+      matchFinish(e, absolute) {
+        if (this.#ignored(e))
+          return;
+        if (!this.includeChildMatches && this.#ignore?.add) {
+          const ign = `${e.relativePosix()}/**`;
+          this.#ignore.add(ign);
+        }
+        const abs = this.opts.absolute === void 0 ? absolute : this.opts.absolute;
+        this.seen.add(e);
+        const mark = this.opts.mark && e.isDirectory() ? this.#sep : "";
+        if (this.opts.withFileTypes) {
+          this.matchEmit(e);
+        } else if (abs) {
+          const abs2 = this.opts.posix ? e.fullpathPosix() : e.fullpath();
+          this.matchEmit(abs2 + mark);
+        } else {
+          const rel = this.opts.posix ? e.relativePosix() : e.relative();
+          const pre = this.opts.dotRelative && !rel.startsWith(".." + this.#sep) ? "." + this.#sep : "";
+          this.matchEmit(!rel ? "." + mark : pre + rel + mark);
+        }
+      }
+      async match(e, absolute, ifDir) {
+        const p = await this.matchCheck(e, ifDir);
+        if (p)
+          this.matchFinish(p, absolute);
+      }
+      matchSync(e, absolute, ifDir) {
+        const p = this.matchCheckSync(e, ifDir);
+        if (p)
+          this.matchFinish(p, absolute);
+      }
+      walkCB(target, patterns, cb) {
+        if (this.signal?.aborted)
+          cb();
+        this.walkCB2(target, patterns, new processor_js_1.Processor(this.opts), cb);
+      }
+      walkCB2(target, patterns, processor, cb) {
+        if (this.#childrenIgnored(target))
+          return cb();
+        if (this.signal?.aborted)
+          cb();
+        if (this.paused) {
+          this.onResume(() => this.walkCB2(target, patterns, processor, cb));
+          return;
+        }
+        processor.processPatterns(target, patterns);
+        let tasks = 1;
+        const next = /* @__PURE__ */ __name(() => {
+          if (--tasks === 0)
+            cb();
+        }, "next");
+        for (const [m, absolute, ifDir] of processor.matches.entries()) {
+          if (this.#ignored(m))
+            continue;
+          tasks++;
+          this.match(m, absolute, ifDir).then(() => next());
+        }
+        for (const t of processor.subwalkTargets()) {
+          if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {
+            continue;
+          }
+          tasks++;
+          const childrenCached = t.readdirCached();
+          if (t.calledReaddir())
+            this.walkCB3(t, childrenCached, processor, next);
+          else {
+            t.readdirCB((_, entries) => this.walkCB3(t, entries, processor, next), true);
+          }
+        }
+        next();
+      }
+      walkCB3(target, entries, processor, cb) {
+        processor = processor.filterEntries(target, entries);
+        let tasks = 1;
+        const next = /* @__PURE__ */ __name(() => {
+          if (--tasks === 0)
+            cb();
+        }, "next");
+        for (const [m, absolute, ifDir] of processor.matches.entries()) {
+          if (this.#ignored(m))
+            continue;
+          tasks++;
+          this.match(m, absolute, ifDir).then(() => next());
+        }
+        for (const [target2, patterns] of processor.subwalks.entries()) {
+          tasks++;
+          this.walkCB2(target2, patterns, processor.child(), next);
+        }
+        next();
+      }
+      walkCBSync(target, patterns, cb) {
+        if (this.signal?.aborted)
+          cb();
+        this.walkCB2Sync(target, patterns, new processor_js_1.Processor(this.opts), cb);
+      }
+      walkCB2Sync(target, patterns, processor, cb) {
+        if (this.#childrenIgnored(target))
+          return cb();
+        if (this.signal?.aborted)
+          cb();
+        if (this.paused) {
+          this.onResume(() => this.walkCB2Sync(target, patterns, processor, cb));
+          return;
+        }
+        processor.processPatterns(target, patterns);
+        let tasks = 1;
+        const next = /* @__PURE__ */ __name(() => {
+          if (--tasks === 0)
+            cb();
+        }, "next");
+        for (const [m, absolute, ifDir] of processor.matches.entries()) {
+          if (this.#ignored(m))
+            continue;
+          this.matchSync(m, absolute, ifDir);
+        }
+        for (const t of processor.subwalkTargets()) {
+          if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {
+            continue;
+          }
+          tasks++;
+          const children = t.readdirSync();
+          this.walkCB3Sync(t, children, processor, next);
+        }
+        next();
+      }
+      walkCB3Sync(target, entries, processor, cb) {
+        processor = processor.filterEntries(target, entries);
+        let tasks = 1;
+        const next = /* @__PURE__ */ __name(() => {
+          if (--tasks === 0)
+            cb();
+        }, "next");
+        for (const [m, absolute, ifDir] of processor.matches.entries()) {
+          if (this.#ignored(m))
+            continue;
+          this.matchSync(m, absolute, ifDir);
+        }
+        for (const [target2, patterns] of processor.subwalks.entries()) {
+          tasks++;
+          this.walkCB2Sync(target2, patterns, processor.child(), next);
+        }
+        next();
+      }
+    };
+    exports2.GlobUtil = GlobUtil;
+    var GlobWalker = class extends GlobUtil {
+      static {
+        __name(this, "GlobWalker");
+      }
+      matches = /* @__PURE__ */ new Set();
+      constructor(patterns, path, opts) {
+        super(patterns, path, opts);
+      }
+      matchEmit(e) {
+        this.matches.add(e);
+      }
+      async walk() {
+        if (this.signal?.aborted)
+          throw this.signal.reason;
+        if (this.path.isUnknown()) {
+          await this.path.lstat();
+        }
+        await new Promise((res, rej) => {
+          this.walkCB(this.path, this.patterns, () => {
+            if (this.signal?.aborted) {
+              rej(this.signal.reason);
+            } else {
+              res(this.matches);
+            }
+          });
+        });
+        return this.matches;
+      }
+      walkSync() {
+        if (this.signal?.aborted)
+          throw this.signal.reason;
+        if (this.path.isUnknown()) {
+          this.path.lstatSync();
+        }
+        this.walkCBSync(this.path, this.patterns, () => {
+          if (this.signal?.aborted)
+            throw this.signal.reason;
+        });
+        return this.matches;
+      }
+    };
+    exports2.GlobWalker = GlobWalker;
+    var GlobStream = class extends GlobUtil {
+      static {
+        __name(this, "GlobStream");
+      }
+      results;
+      constructor(patterns, path, opts) {
+        super(patterns, path, opts);
+        this.results = new minipass_1.Minipass({
+          signal: this.signal,
+          objectMode: true
+        });
+        this.results.on("drain", () => this.resume());
+        this.results.on("resume", () => this.resume());
+      }
+      matchEmit(e) {
+        this.results.write(e);
+        if (!this.results.flowing)
+          this.pause();
+      }
+      stream() {
+        const target = this.path;
+        if (target.isUnknown()) {
+          target.lstat().then(() => {
+            this.walkCB(target, this.patterns, () => this.results.end());
+          });
+        } else {
+          this.walkCB(target, this.patterns, () => this.results.end());
+        }
+        return this.results;
+      }
+      streamSync() {
+        if (this.path.isUnknown()) {
+          this.path.lstatSync();
+        }
+        this.walkCBSync(this.path, this.patterns, () => this.results.end());
+        return this.results;
+      }
+    };
+    exports2.GlobStream = GlobStream;
+  }
+});
+
+// node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/glob.js
+var require_glob = __commonJS({
+  "node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/glob.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Glob = void 0;
+    var minimatch_1 = require_commonjs4();
+    var node_url_1 = require("node:url");
+    var path_scurry_1 = require_commonjs6();
+    var pattern_js_1 = require_pattern();
+    var walker_js_1 = require_walker();
+    var defaultPlatform = typeof process === "object" && process && typeof process.platform === "string" ? process.platform : "linux";
+    var Glob = class {
+      static {
+        __name(this, "Glob");
+      }
+      absolute;
+      cwd;
+      root;
+      dot;
+      dotRelative;
+      follow;
+      ignore;
+      magicalBraces;
+      mark;
+      matchBase;
+      maxDepth;
+      nobrace;
+      nocase;
+      nodir;
+      noext;
+      noglobstar;
+      pattern;
+      platform;
+      realpath;
+      scurry;
+      stat;
+      signal;
+      windowsPathsNoEscape;
+      withFileTypes;
+      includeChildMatches;
+      /**
+       * The options provided to the constructor.
+       */
+      opts;
+      /**
+       * An array of parsed immutable {@link Pattern} objects.
+       */
+      patterns;
+      /**
+       * All options are stored as properties on the `Glob` object.
+       *
+       * See {@link GlobOptions} for full options descriptions.
+       *
+       * Note that a previous `Glob` object can be passed as the
+       * `GlobOptions` to another `Glob` instantiation to re-use settings
+       * and caches with a new pattern.
+       *
+       * Traversal functions can be called multiple times to run the walk
+       * again.
+       */
+      constructor(pattern, opts) {
+        if (!opts)
+          throw new TypeError("glob options required");
+        this.withFileTypes = !!opts.withFileTypes;
+        this.signal = opts.signal;
+        this.follow = !!opts.follow;
+        this.dot = !!opts.dot;
+        this.dotRelative = !!opts.dotRelative;
+        this.nodir = !!opts.nodir;
+        this.mark = !!opts.mark;
+        if (!opts.cwd) {
+          this.cwd = "";
+        } else if (opts.cwd instanceof URL || opts.cwd.startsWith("file://")) {
+          opts.cwd = (0, node_url_1.fileURLToPath)(opts.cwd);
+        }
+        this.cwd = opts.cwd || "";
+        this.root = opts.root;
+        this.magicalBraces = !!opts.magicalBraces;
+        this.nobrace = !!opts.nobrace;
+        this.noext = !!opts.noext;
+        this.realpath = !!opts.realpath;
+        this.absolute = opts.absolute;
+        this.includeChildMatches = opts.includeChildMatches !== false;
+        this.noglobstar = !!opts.noglobstar;
+        this.matchBase = !!opts.matchBase;
+        this.maxDepth = typeof opts.maxDepth === "number" ? opts.maxDepth : Infinity;
+        this.stat = !!opts.stat;
+        this.ignore = opts.ignore;
+        if (this.withFileTypes && this.absolute !== void 0) {
+          throw new Error("cannot set absolute and withFileTypes:true");
+        }
+        if (typeof pattern === "string") {
+          pattern = [pattern];
+        }
+        this.windowsPathsNoEscape = !!opts.windowsPathsNoEscape || opts.allowWindowsEscape === false;
+        if (this.windowsPathsNoEscape) {
+          pattern = pattern.map((p) => p.replace(/\\/g, "/"));
+        }
+        if (this.matchBase) {
+          if (opts.noglobstar) {
+            throw new TypeError("base matching requires globstar");
+          }
+          pattern = pattern.map((p) => p.includes("/") ? p : `./**/${p}`);
+        }
+        this.pattern = pattern;
+        this.platform = opts.platform || defaultPlatform;
+        this.opts = { ...opts, platform: this.platform };
+        if (opts.scurry) {
+          this.scurry = opts.scurry;
+          if (opts.nocase !== void 0 && opts.nocase !== opts.scurry.nocase) {
+            throw new Error("nocase option contradicts provided scurry option");
+          }
+        } else {
+          const Scurry = opts.platform === "win32" ? path_scurry_1.PathScurryWin32 : opts.platform === "darwin" ? path_scurry_1.PathScurryDarwin : opts.platform ? path_scurry_1.PathScurryPosix : path_scurry_1.PathScurry;
+          this.scurry = new Scurry(this.cwd, {
+            nocase: opts.nocase,
+            fs: opts.fs
+          });
+        }
+        this.nocase = this.scurry.nocase;
+        const nocaseMagicOnly = this.platform === "darwin" || this.platform === "win32";
+        const mmo = {
+          // default nocase based on platform
+          ...opts,
+          dot: this.dot,
+          matchBase: this.matchBase,
+          nobrace: this.nobrace,
+          nocase: this.nocase,
+          nocaseMagicOnly,
+          nocomment: true,
+          noext: this.noext,
+          nonegate: true,
+          optimizationLevel: 2,
+          platform: this.platform,
+          windowsPathsNoEscape: this.windowsPathsNoEscape,
+          debug: !!this.opts.debug
+        };
+        const mms = this.pattern.map((p) => new minimatch_1.Minimatch(p, mmo));
+        const [matchSet, globParts] = mms.reduce((set, m) => {
+          set[0].push(...m.set);
+          set[1].push(...m.globParts);
+          return set;
+        }, [[], []]);
+        this.patterns = matchSet.map((set, i) => {
+          const g = globParts[i];
+          if (!g)
+            throw new Error("invalid pattern object");
+          return new pattern_js_1.Pattern(set, g, 0, this.platform);
+        });
+      }
+      async walk() {
+        return [
+          ...await new walker_js_1.GlobWalker(this.patterns, this.scurry.cwd, {
+            ...this.opts,
+            maxDepth: this.maxDepth !== Infinity ? this.maxDepth + this.scurry.cwd.depth() : Infinity,
+            platform: this.platform,
+            nocase: this.nocase,
+            includeChildMatches: this.includeChildMatches
+          }).walk()
+        ];
+      }
+      walkSync() {
+        return [
+          ...new walker_js_1.GlobWalker(this.patterns, this.scurry.cwd, {
+            ...this.opts,
+            maxDepth: this.maxDepth !== Infinity ? this.maxDepth + this.scurry.cwd.depth() : Infinity,
+            platform: this.platform,
+            nocase: this.nocase,
+            includeChildMatches: this.includeChildMatches
+          }).walkSync()
+        ];
+      }
+      stream() {
+        return new walker_js_1.GlobStream(this.patterns, this.scurry.cwd, {
+          ...this.opts,
+          maxDepth: this.maxDepth !== Infinity ? this.maxDepth + this.scurry.cwd.depth() : Infinity,
+          platform: this.platform,
+          nocase: this.nocase,
+          includeChildMatches: this.includeChildMatches
+        }).stream();
+      }
+      streamSync() {
+        return new walker_js_1.GlobStream(this.patterns, this.scurry.cwd, {
+          ...this.opts,
+          maxDepth: this.maxDepth !== Infinity ? this.maxDepth + this.scurry.cwd.depth() : Infinity,
+          platform: this.platform,
+          nocase: this.nocase,
+          includeChildMatches: this.includeChildMatches
+        }).streamSync();
+      }
+      /**
+       * Default sync iteration function. Returns a Generator that
+       * iterates over the results.
+       */
+      iterateSync() {
+        return this.streamSync()[Symbol.iterator]();
+      }
+      [Symbol.iterator]() {
+        return this.iterateSync();
+      }
+      /**
+       * Default async iteration function. Returns an AsyncGenerator that
+       * iterates over the results.
+       */
+      iterate() {
+        return this.stream()[Symbol.asyncIterator]();
+      }
+      [Symbol.asyncIterator]() {
+        return this.iterate();
+      }
+    };
+    exports2.Glob = Glob;
+  }
+});
+
+// node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/has-magic.js
+var require_has_magic = __commonJS({
+  "node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/has-magic.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.hasMagic = void 0;
+    var minimatch_1 = require_commonjs4();
+    var hasMagic = /* @__PURE__ */ __name((pattern, options = {}) => {
+      if (!Array.isArray(pattern)) {
+        pattern = [pattern];
+      }
+      for (const p of pattern) {
+        if (new minimatch_1.Minimatch(p, options).hasMagic())
+          return true;
+      }
+      return false;
+    }, "hasMagic");
+    exports2.hasMagic = hasMagic;
+  }
+});
+
+// node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/index.js
+var require_commonjs7 = __commonJS({
+  "node_modules/.pnpm/glob@11.1.0/node_modules/glob/dist/commonjs/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.glob = exports2.sync = exports2.iterate = exports2.iterateSync = exports2.stream = exports2.streamSync = exports2.Ignore = exports2.hasMagic = exports2.Glob = exports2.unescape = exports2.escape = void 0;
+    exports2.globStreamSync = globStreamSync;
+    exports2.globStream = globStream;
+    exports2.globSync = globSync;
+    exports2.globIterateSync = globIterateSync;
+    exports2.globIterate = globIterate;
+    var minimatch_1 = require_commonjs4();
+    var glob_js_1 = require_glob();
+    var has_magic_js_1 = require_has_magic();
+    var minimatch_2 = require_commonjs4();
+    Object.defineProperty(exports2, "escape", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return minimatch_2.escape;
+    }, "get") });
+    Object.defineProperty(exports2, "unescape", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return minimatch_2.unescape;
+    }, "get") });
+    var glob_js_2 = require_glob();
+    Object.defineProperty(exports2, "Glob", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return glob_js_2.Glob;
+    }, "get") });
+    var has_magic_js_2 = require_has_magic();
+    Object.defineProperty(exports2, "hasMagic", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return has_magic_js_2.hasMagic;
+    }, "get") });
+    var ignore_js_1 = require_ignore();
+    Object.defineProperty(exports2, "Ignore", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return ignore_js_1.Ignore;
+    }, "get") });
+    function globStreamSync(pattern, options = {}) {
+      return new glob_js_1.Glob(pattern, options).streamSync();
+    }
+    __name(globStreamSync, "globStreamSync");
+    function globStream(pattern, options = {}) {
+      return new glob_js_1.Glob(pattern, options).stream();
+    }
+    __name(globStream, "globStream");
+    function globSync(pattern, options = {}) {
+      return new glob_js_1.Glob(pattern, options).walkSync();
+    }
+    __name(globSync, "globSync");
+    async function glob_(pattern, options = {}) {
+      return new glob_js_1.Glob(pattern, options).walk();
+    }
+    __name(glob_, "glob_");
+    function globIterateSync(pattern, options = {}) {
+      return new glob_js_1.Glob(pattern, options).iterateSync();
+    }
+    __name(globIterateSync, "globIterateSync");
+    function globIterate(pattern, options = {}) {
+      return new glob_js_1.Glob(pattern, options).iterate();
+    }
+    __name(globIterate, "globIterate");
+    exports2.streamSync = globStreamSync;
+    exports2.stream = Object.assign(globStream, { sync: globStreamSync });
+    exports2.iterateSync = globIterateSync;
+    exports2.iterate = Object.assign(globIterate, {
+      sync: globIterateSync
+    });
+    exports2.sync = Object.assign(globSync, {
+      stream: globStreamSync,
+      iterate: globIterateSync
+    });
+    exports2.glob = Object.assign(glob_, {
+      glob: glob_,
+      globSync,
+      sync: exports2.sync,
+      globStream,
+      stream: exports2.stream,
+      globStreamSync,
+      streamSync: exports2.streamSync,
+      globIterate,
+      iterate: exports2.iterate,
+      globIterateSync,
+      iterateSync: exports2.iterateSync,
+      Glob: glob_js_1.Glob,
+      hasMagic: has_magic_js_1.hasMagic,
+      escape: minimatch_1.escape,
+      unescape: minimatch_1.unescape
+    });
+    exports2.glob.glob = exports2.glob;
+  }
+});
+
+// node_modules/.pnpm/spdx-license-ids@3.0.23/node_modules/spdx-license-ids/index.json
+var require_spdx_license_ids = __commonJS({
+  "node_modules/.pnpm/spdx-license-ids@3.0.23/node_modules/spdx-license-ids/index.json"(exports2, module2) {
+    module2.exports = [
+      "0BSD",
+      "3D-Slicer-1.0",
+      "AAL",
+      "ADSL",
+      "AFL-1.1",
+      "AFL-1.2",
+      "AFL-2.0",
+      "AFL-2.1",
+      "AFL-3.0",
+      "AGPL-1.0-only",
+      "AGPL-1.0-or-later",
+      "AGPL-3.0-only",
+      "AGPL-3.0-or-later",
+      "ALGLIB-Documentation",
+      "AMD-newlib",
+      "AMDPLPA",
+      "AML",
+      "AML-glslang",
+      "AMPAS",
+      "ANTLR-PD",
+      "ANTLR-PD-fallback",
+      "APAFML",
+      "APL-1.0",
+      "APSL-1.0",
+      "APSL-1.1",
+      "APSL-1.2",
+      "APSL-2.0",
+      "ASWF-Digital-Assets-1.0",
+      "ASWF-Digital-Assets-1.1",
+      "Abstyles",
+      "AdaCore-doc",
+      "Adobe-2006",
+      "Adobe-Display-PostScript",
+      "Adobe-Glyph",
+      "Adobe-Utopia",
+      "Advanced-Cryptics-Dictionary",
+      "Afmparse",
+      "Aladdin",
+      "Apache-1.0",
+      "Apache-1.1",
+      "Apache-2.0",
+      "App-s2p",
+      "Arphic-1999",
+      "Artistic-1.0",
+      "Artistic-1.0-Perl",
+      "Artistic-1.0-cl8",
+      "Artistic-2.0",
+      "Artistic-dist",
+      "Aspell-RU",
+      "BOLA-1.1",
+      "BSD-1-Clause",
+      "BSD-2-Clause",
+      "BSD-2-Clause-Darwin",
+      "BSD-2-Clause-Patent",
+      "BSD-2-Clause-Views",
+      "BSD-2-Clause-first-lines",
+      "BSD-2-Clause-pkgconf-disclaimer",
+      "BSD-3-Clause",
+      "BSD-3-Clause-Attribution",
+      "BSD-3-Clause-Clear",
+      "BSD-3-Clause-HP",
+      "BSD-3-Clause-LBNL",
+      "BSD-3-Clause-Modification",
+      "BSD-3-Clause-No-Military-License",
+      "BSD-3-Clause-No-Nuclear-License",
+      "BSD-3-Clause-No-Nuclear-License-2014",
+      "BSD-3-Clause-No-Nuclear-Warranty",
+      "BSD-3-Clause-Open-MPI",
+      "BSD-3-Clause-Sun",
+      "BSD-3-Clause-Tso",
+      "BSD-3-Clause-acpica",
+      "BSD-3-Clause-flex",
+      "BSD-4-Clause",
+      "BSD-4-Clause-Shortened",
+      "BSD-4-Clause-UC",
+      "BSD-4.3RENO",
+      "BSD-4.3TAHOE",
+      "BSD-Advertising-Acknowledgement",
+      "BSD-Attribution-HPND-disclaimer",
+      "BSD-Inferno-Nettverk",
+      "BSD-Mark-Modifications",
+      "BSD-Protection",
+      "BSD-Source-Code",
+      "BSD-Source-beginning-file",
+      "BSD-Systemics",
+      "BSD-Systemics-W3Works",
+      "BSL-1.0",
+      "BUSL-1.1",
+      "Baekmuk",
+      "Bahyph",
+      "Barr",
+      "Beerware",
+      "BitTorrent-1.0",
+      "BitTorrent-1.1",
+      "Bitstream-Charter",
+      "Bitstream-Vera",
+      "BlueOak-1.0.0",
+      "Boehm-GC",
+      "Boehm-GC-without-fee",
+      "Borceux",
+      "Brian-Gladman-2-Clause",
+      "Brian-Gladman-3-Clause",
+      "Buddy",
+      "C-UDA-1.0",
+      "CAL-1.0",
+      "CAL-1.0-Combined-Work-Exception",
+      "CAPEC-tou",
+      "CATOSL-1.1",
+      "CC-BY-1.0",
+      "CC-BY-2.0",
+      "CC-BY-2.5",
+      "CC-BY-2.5-AU",
+      "CC-BY-3.0",
+      "CC-BY-3.0-AT",
+      "CC-BY-3.0-AU",
+      "CC-BY-3.0-DE",
+      "CC-BY-3.0-IGO",
+      "CC-BY-3.0-NL",
+      "CC-BY-3.0-US",
+      "CC-BY-4.0",
+      "CC-BY-NC-1.0",
+      "CC-BY-NC-2.0",
+      "CC-BY-NC-2.5",
+      "CC-BY-NC-3.0",
+      "CC-BY-NC-3.0-DE",
+      "CC-BY-NC-4.0",
+      "CC-BY-NC-ND-1.0",
+      "CC-BY-NC-ND-2.0",
+      "CC-BY-NC-ND-2.5",
+      "CC-BY-NC-ND-3.0",
+      "CC-BY-NC-ND-3.0-DE",
+      "CC-BY-NC-ND-3.0-IGO",
+      "CC-BY-NC-ND-4.0",
+      "CC-BY-NC-SA-1.0",
+      "CC-BY-NC-SA-2.0",
+      "CC-BY-NC-SA-2.0-DE",
+      "CC-BY-NC-SA-2.0-FR",
+      "CC-BY-NC-SA-2.0-UK",
+      "CC-BY-NC-SA-2.5",
+      "CC-BY-NC-SA-3.0",
+      "CC-BY-NC-SA-3.0-DE",
+      "CC-BY-NC-SA-3.0-IGO",
+      "CC-BY-NC-SA-4.0",
+      "CC-BY-ND-1.0",
+      "CC-BY-ND-2.0",
+      "CC-BY-ND-2.5",
+      "CC-BY-ND-3.0",
+      "CC-BY-ND-3.0-DE",
+      "CC-BY-ND-4.0",
+      "CC-BY-SA-1.0",
+      "CC-BY-SA-2.0",
+      "CC-BY-SA-2.0-UK",
+      "CC-BY-SA-2.1-JP",
+      "CC-BY-SA-2.5",
+      "CC-BY-SA-3.0",
+      "CC-BY-SA-3.0-AT",
+      "CC-BY-SA-3.0-DE",
+      "CC-BY-SA-3.0-IGO",
+      "CC-BY-SA-4.0",
+      "CC-PDDC",
+      "CC-PDM-1.0",
+      "CC-SA-1.0",
+      "CC0-1.0",
+      "CDDL-1.0",
+      "CDDL-1.1",
+      "CDL-1.0",
+      "CDLA-Permissive-1.0",
+      "CDLA-Permissive-2.0",
+      "CDLA-Sharing-1.0",
+      "CECILL-1.0",
+      "CECILL-1.1",
+      "CECILL-2.0",
+      "CECILL-2.1",
+      "CECILL-B",
+      "CECILL-C",
+      "CERN-OHL-1.1",
+      "CERN-OHL-1.2",
+      "CERN-OHL-P-2.0",
+      "CERN-OHL-S-2.0",
+      "CERN-OHL-W-2.0",
+      "CFITSIO",
+      "CMU-Mach",
+      "CMU-Mach-nodoc",
+      "CNRI-Jython",
+      "CNRI-Python",
+      "CNRI-Python-GPL-Compatible",
+      "COIL-1.0",
+      "CPAL-1.0",
+      "CPL-1.0",
+      "CPOL-1.02",
+      "CUA-OPL-1.0",
+      "Caldera",
+      "Caldera-no-preamble",
+      "Catharon",
+      "ClArtistic",
+      "Clips",
+      "Community-Spec-1.0",
+      "Condor-1.1",
+      "Cornell-Lossless-JPEG",
+      "Cronyx",
+      "Crossword",
+      "CryptoSwift",
+      "CrystalStacker",
+      "Cube",
+      "D-FSL-1.0",
+      "DEC-3-Clause",
+      "DL-DE-BY-2.0",
+      "DL-DE-ZERO-2.0",
+      "DOC",
+      "DRL-1.0",
+      "DRL-1.1",
+      "DSDP",
+      "DocBook-DTD",
+      "DocBook-Schema",
+      "DocBook-Stylesheet",
+      "DocBook-XML",
+      "Dotseqn",
+      "ECL-1.0",
+      "ECL-2.0",
+      "EFL-1.0",
+      "EFL-2.0",
+      "EPICS",
+      "EPL-1.0",
+      "EPL-2.0",
+      "ESA-PL-permissive-2.4",
+      "ESA-PL-strong-copyleft-2.4",
+      "ESA-PL-weak-copyleft-2.4",
+      "EUDatagrid",
+      "EUPL-1.0",
+      "EUPL-1.1",
+      "EUPL-1.2",
+      "Elastic-2.0",
+      "Entessa",
+      "ErlPL-1.1",
+      "Eurosym",
+      "FBM",
+      "FDK-AAC",
+      "FSFAP",
+      "FSFAP-no-warranty-disclaimer",
+      "FSFUL",
+      "FSFULLR",
+      "FSFULLRSD",
+      "FSFULLRWD",
+      "FSL-1.1-ALv2",
+      "FSL-1.1-MIT",
+      "FTL",
+      "Fair",
+      "Ferguson-Twofish",
+      "Frameworx-1.0",
+      "FreeBSD-DOC",
+      "FreeImage",
+      "Furuseth",
+      "GCR-docs",
+      "GD",
+      "GFDL-1.1-invariants-only",
+      "GFDL-1.1-invariants-or-later",
+      "GFDL-1.1-no-invariants-only",
+      "GFDL-1.1-no-invariants-or-later",
+      "GFDL-1.1-only",
+      "GFDL-1.1-or-later",
+      "GFDL-1.2-invariants-only",
+      "GFDL-1.2-invariants-or-later",
+      "GFDL-1.2-no-invariants-only",
+      "GFDL-1.2-no-invariants-or-later",
+      "GFDL-1.2-only",
+      "GFDL-1.2-or-later",
+      "GFDL-1.3-invariants-only",
+      "GFDL-1.3-invariants-or-later",
+      "GFDL-1.3-no-invariants-only",
+      "GFDL-1.3-no-invariants-or-later",
+      "GFDL-1.3-only",
+      "GFDL-1.3-or-later",
+      "GL2PS",
+      "GLWTPL",
+      "GPL-1.0-only",
+      "GPL-1.0-or-later",
+      "GPL-2.0-only",
+      "GPL-2.0-or-later",
+      "GPL-3.0-only",
+      "GPL-3.0-or-later",
+      "Game-Programming-Gems",
+      "Giftware",
+      "Glide",
+      "Glulxe",
+      "Graphics-Gems",
+      "Gutmann",
+      "HDF5",
+      "HIDAPI",
+      "HP-1986",
+      "HP-1989",
+      "HPND",
+      "HPND-DEC",
+      "HPND-Fenneberg-Livingston",
+      "HPND-INRIA-IMAG",
+      "HPND-Intel",
+      "HPND-Kevlin-Henney",
+      "HPND-MIT-disclaimer",
+      "HPND-Markus-Kuhn",
+      "HPND-Netrek",
+      "HPND-Pbmplus",
+      "HPND-SMC",
+      "HPND-UC",
+      "HPND-UC-export-US",
+      "HPND-doc",
+      "HPND-doc-sell",
+      "HPND-export-US",
+      "HPND-export-US-acknowledgement",
+      "HPND-export-US-modify",
+      "HPND-export2-US",
+      "HPND-merchantability-variant",
+      "HPND-sell-MIT-disclaimer-xserver",
+      "HPND-sell-regexpr",
+      "HPND-sell-variant",
+      "HPND-sell-variant-MIT-disclaimer",
+      "HPND-sell-variant-MIT-disclaimer-rev",
+      "HPND-sell-variant-critical-systems",
+      "HTMLTIDY",
+      "HaskellReport",
+      "Hippocratic-2.1",
+      "IBM-pibs",
+      "ICU",
+      "IEC-Code-Components-EULA",
+      "IJG",
+      "IJG-short",
+      "IPA",
+      "IPL-1.0",
+      "ISC",
+      "ISC-Veillard",
+      "ISO-permission",
+      "ImageMagick",
+      "Imlib2",
+      "Info-ZIP",
+      "Inner-Net-2.0",
+      "InnoSetup",
+      "Intel",
+      "Intel-ACPI",
+      "Interbase-1.0",
+      "JPL-image",
+      "JPNIC",
+      "JSON",
+      "Jam",
+      "JasPer-2.0",
+      "Kastrup",
+      "Kazlib",
+      "Knuth-CTAN",
+      "LAL-1.2",
+      "LAL-1.3",
+      "LGPL-2.0-only",
+      "LGPL-2.0-or-later",
+      "LGPL-2.1-only",
+      "LGPL-2.1-or-later",
+      "LGPL-3.0-only",
+      "LGPL-3.0-or-later",
+      "LGPLLR",
+      "LOOP",
+      "LPD-document",
+      "LPL-1.0",
+      "LPL-1.02",
+      "LPPL-1.0",
+      "LPPL-1.1",
+      "LPPL-1.2",
+      "LPPL-1.3a",
+      "LPPL-1.3c",
+      "LZMA-SDK-9.11-to-9.20",
+      "LZMA-SDK-9.22",
+      "Latex2e",
+      "Latex2e-translated-notice",
+      "Leptonica",
+      "LiLiQ-P-1.1",
+      "LiLiQ-R-1.1",
+      "LiLiQ-Rplus-1.1",
+      "Libpng",
+      "Linux-OpenIB",
+      "Linux-man-pages-1-para",
+      "Linux-man-pages-copyleft",
+      "Linux-man-pages-copyleft-2-para",
+      "Linux-man-pages-copyleft-var",
+      "Lucida-Bitmap-Fonts",
+      "MIPS",
+      "MIT",
+      "MIT-0",
+      "MIT-CMU",
+      "MIT-Click",
+      "MIT-Festival",
+      "MIT-Khronos-old",
+      "MIT-Modern-Variant",
+      "MIT-STK",
+      "MIT-Wu",
+      "MIT-advertising",
+      "MIT-enna",
+      "MIT-feh",
+      "MIT-open-group",
+      "MIT-testregex",
+      "MITNFA",
+      "MMIXware",
+      "MMPL-1.0.1",
+      "MPEG-SSG",
+      "MPL-1.0",
+      "MPL-1.1",
+      "MPL-2.0",
+      "MPL-2.0-no-copyleft-exception",
+      "MS-LPL",
+      "MS-PL",
+      "MS-RL",
+      "MTLL",
+      "Mackerras-3-Clause",
+      "Mackerras-3-Clause-acknowledgment",
+      "MakeIndex",
+      "Martin-Birgmeier",
+      "McPhee-slideshow",
+      "Minpack",
+      "MirOS",
+      "Motosoto",
+      "MulanPSL-1.0",
+      "MulanPSL-2.0",
+      "Multics",
+      "Mup",
+      "NAIST-2003",
+      "NASA-1.3",
+      "NBPL-1.0",
+      "NCBI-PD",
+      "NCGL-UK-2.0",
+      "NCL",
+      "NCSA",
+      "NGPL",
+      "NICTA-1.0",
+      "NIST-PD",
+      "NIST-PD-TNT",
+      "NIST-PD-fallback",
+      "NIST-Software",
+      "NLOD-1.0",
+      "NLOD-2.0",
+      "NLPL",
+      "NOSL",
+      "NPL-1.0",
+      "NPL-1.1",
+      "NPOSL-3.0",
+      "NRL",
+      "NTIA-PD",
+      "NTP",
+      "NTP-0",
+      "Naumen",
+      "NetCDF",
+      "Newsletr",
+      "Nokia",
+      "Noweb",
+      "O-UDA-1.0",
+      "OAR",
+      "OCCT-PL",
+      "OCLC-2.0",
+      "ODC-By-1.0",
+      "ODbL-1.0",
+      "OFFIS",
+      "OFL-1.0",
+      "OFL-1.0-RFN",
+      "OFL-1.0-no-RFN",
+      "OFL-1.1",
+      "OFL-1.1-RFN",
+      "OFL-1.1-no-RFN",
+      "OGC-1.0",
+      "OGDL-Taiwan-1.0",
+      "OGL-Canada-2.0",
+      "OGL-UK-1.0",
+      "OGL-UK-2.0",
+      "OGL-UK-3.0",
+      "OGTSL",
+      "OLDAP-1.1",
+      "OLDAP-1.2",
+      "OLDAP-1.3",
+      "OLDAP-1.4",
+      "OLDAP-2.0",
+      "OLDAP-2.0.1",
+      "OLDAP-2.1",
+      "OLDAP-2.2",
+      "OLDAP-2.2.1",
+      "OLDAP-2.2.2",
+      "OLDAP-2.3",
+      "OLDAP-2.4",
+      "OLDAP-2.5",
+      "OLDAP-2.6",
+      "OLDAP-2.7",
+      "OLDAP-2.8",
+      "OLFL-1.3",
+      "OML",
+      "OPL-1.0",
+      "OPL-UK-3.0",
+      "OPUBL-1.0",
+      "OSC-1.0",
+      "OSET-PL-2.1",
+      "OSL-1.0",
+      "OSL-1.1",
+      "OSL-2.0",
+      "OSL-2.1",
+      "OSL-3.0",
+      "OSSP",
+      "OpenMDW-1.0",
+      "OpenPBS-2.3",
+      "OpenSSL",
+      "OpenSSL-standalone",
+      "OpenVision",
+      "PADL",
+      "PDDL-1.0",
+      "PHP-3.0",
+      "PHP-3.01",
+      "PPL",
+      "PSF-2.0",
+      "ParaType-Free-Font-1.3",
+      "Parity-6.0.0",
+      "Parity-7.0.0",
+      "Pixar",
+      "Plexus",
+      "PolyForm-Noncommercial-1.0.0",
+      "PolyForm-Small-Business-1.0.0",
+      "PostgreSQL",
+      "Python-2.0",
+      "Python-2.0.1",
+      "QPL-1.0",
+      "QPL-1.0-INRIA-2004",
+      "Qhull",
+      "RHeCos-1.1",
+      "RPL-1.1",
+      "RPL-1.5",
+      "RPSL-1.0",
+      "RSA-MD",
+      "RSCPL",
+      "Rdisc",
+      "Ruby",
+      "Ruby-pty",
+      "SAX-PD",
+      "SAX-PD-2.0",
+      "SCEA",
+      "SGI-B-1.0",
+      "SGI-B-1.1",
+      "SGI-B-2.0",
+      "SGI-OpenGL",
+      "SGMLUG-PM",
+      "SGP4",
+      "SHL-0.5",
+      "SHL-0.51",
+      "SISSL",
+      "SISSL-1.2",
+      "SL",
+      "SMAIL-GPL",
+      "SMLNJ",
+      "SMPPL",
+      "SNIA",
+      "SOFA",
+      "SPL-1.0",
+      "SSH-OpenSSH",
+      "SSH-short",
+      "SSLeay-standalone",
+      "SSPL-1.0",
+      "SUL-1.0",
+      "SWL",
+      "Saxpath",
+      "SchemeReport",
+      "Sendmail",
+      "Sendmail-8.23",
+      "Sendmail-Open-Source-1.1",
+      "SimPL-2.0",
+      "Sleepycat",
+      "Soundex",
+      "Spencer-86",
+      "Spencer-94",
+      "Spencer-99",
+      "SugarCRM-1.1.3",
+      "Sun-PPP",
+      "Sun-PPP-2000",
+      "SunPro",
+      "Symlinks",
+      "TAPR-OHL-1.0",
+      "TCL",
+      "TCP-wrappers",
+      "TGPPL-1.0",
+      "TMate",
+      "TORQUE-1.1",
+      "TOSL",
+      "TPDL",
+      "TPL-1.0",
+      "TTWL",
+      "TTYP0",
+      "TU-Berlin-1.0",
+      "TU-Berlin-2.0",
+      "TekHVC",
+      "TermReadKey",
+      "ThirdEye",
+      "TrustedQSL",
+      "UCAR",
+      "UCL-1.0",
+      "UMich-Merit",
+      "UPL-1.0",
+      "URT-RLE",
+      "Ubuntu-font-1.0",
+      "UnRAR",
+      "Unicode-3.0",
+      "Unicode-DFS-2015",
+      "Unicode-DFS-2016",
+      "Unicode-TOU",
+      "UnixCrypt",
+      "Unlicense",
+      "Unlicense-libtelnet",
+      "Unlicense-libwhirlpool",
+      "VOSTROM",
+      "VSL-1.0",
+      "Vim",
+      "Vixie-Cron",
+      "W3C",
+      "W3C-19980720",
+      "W3C-20150513",
+      "WTFNMFPL",
+      "WTFPL",
+      "Watcom-1.0",
+      "Widget-Workshop",
+      "WordNet",
+      "Wsuipa",
+      "X11",
+      "X11-distribute-modifications-variant",
+      "X11-no-permit-persons",
+      "X11-swapped",
+      "XFree86-1.1",
+      "XSkat",
+      "Xdebug-1.03",
+      "Xerox",
+      "Xfig",
+      "Xnet",
+      "YPL-1.0",
+      "YPL-1.1",
+      "ZPL-1.1",
+      "ZPL-2.0",
+      "ZPL-2.1",
+      "Zed",
+      "Zeeff",
+      "Zend-2.0",
+      "Zimbra-1.3",
+      "Zimbra-1.4",
+      "Zlib",
+      "any-OSI",
+      "any-OSI-perl-modules",
+      "bcrypt-Solar-Designer",
+      "blessing",
+      "bzip2-1.0.6",
+      "check-cvs",
+      "checkmk",
+      "copyleft-next-0.3.0",
+      "copyleft-next-0.3.1",
+      "curl",
+      "cve-tou",
+      "diffmark",
+      "dtoa",
+      "dvipdfm",
+      "eGenix",
+      "etalab-2.0",
+      "fwlw",
+      "gSOAP-1.3b",
+      "generic-xts",
+      "gnuplot",
+      "gtkbook",
+      "hdparm",
+      "hyphen-bulgarian",
+      "iMatix",
+      "jove",
+      "libpng-1.6.35",
+      "libpng-2.0",
+      "libselinux-1.0",
+      "libtiff",
+      "libutil-David-Nugent",
+      "lsof",
+      "magaz",
+      "mailprio",
+      "man2html",
+      "metamail",
+      "mpi-permissive",
+      "mpich2",
+      "mplus",
+      "ngrep",
+      "pkgconf",
+      "pnmstitch",
+      "psfrag",
+      "psutils",
+      "python-ldap",
+      "radvd",
+      "snprintf",
+      "softSurfer",
+      "ssh-keyscan",
+      "swrule",
+      "threeparttable",
+      "ulem",
+      "w3m",
+      "wwl",
+      "xinetd",
+      "xkeyboard-config-Zinoviev",
+      "xlock",
+      "xpp",
+      "xzoom",
+      "zlib-acknowledgement"
+    ];
+  }
+});
+
+// node_modules/.pnpm/spdx-license-ids@3.0.23/node_modules/spdx-license-ids/deprecated.json
+var require_deprecated = __commonJS({
+  "node_modules/.pnpm/spdx-license-ids@3.0.23/node_modules/spdx-license-ids/deprecated.json"(exports2, module2) {
+    module2.exports = [
+      "AGPL-1.0",
+      "AGPL-3.0",
+      "BSD-2-Clause-FreeBSD",
+      "BSD-2-Clause-NetBSD",
+      "GFDL-1.1",
+      "GFDL-1.2",
+      "GFDL-1.3",
+      "GPL-1.0",
+      "GPL-2.0",
+      "GPL-2.0-with-GCC-exception",
+      "GPL-2.0-with-autoconf-exception",
+      "GPL-2.0-with-bison-exception",
+      "GPL-2.0-with-classpath-exception",
+      "GPL-2.0-with-font-exception",
+      "GPL-3.0",
+      "GPL-3.0-with-GCC-exception",
+      "GPL-3.0-with-autoconf-exception",
+      "LGPL-2.0",
+      "LGPL-2.1",
+      "LGPL-3.0",
+      "Net-SNMP",
+      "Nunit",
+      "StandardML-NJ",
+      "bzip2-1.0.5",
+      "eCos-2.0",
+      "wxWindows"
+    ];
+  }
+});
+
+// node_modules/.pnpm/spdx-exceptions@2.5.0/node_modules/spdx-exceptions/index.json
+var require_spdx_exceptions = __commonJS({
+  "node_modules/.pnpm/spdx-exceptions@2.5.0/node_modules/spdx-exceptions/index.json"(exports2, module2) {
+    module2.exports = [
+      "389-exception",
+      "Asterisk-exception",
+      "Autoconf-exception-2.0",
+      "Autoconf-exception-3.0",
+      "Autoconf-exception-generic",
+      "Autoconf-exception-generic-3.0",
+      "Autoconf-exception-macro",
+      "Bison-exception-1.24",
+      "Bison-exception-2.2",
+      "Bootloader-exception",
+      "Classpath-exception-2.0",
+      "CLISP-exception-2.0",
+      "cryptsetup-OpenSSL-exception",
+      "DigiRule-FOSS-exception",
+      "eCos-exception-2.0",
+      "Fawkes-Runtime-exception",
+      "FLTK-exception",
+      "fmt-exception",
+      "Font-exception-2.0",
+      "freertos-exception-2.0",
+      "GCC-exception-2.0",
+      "GCC-exception-2.0-note",
+      "GCC-exception-3.1",
+      "Gmsh-exception",
+      "GNAT-exception",
+      "GNOME-examples-exception",
+      "GNU-compiler-exception",
+      "gnu-javamail-exception",
+      "GPL-3.0-interface-exception",
+      "GPL-3.0-linking-exception",
+      "GPL-3.0-linking-source-exception",
+      "GPL-CC-1.0",
+      "GStreamer-exception-2005",
+      "GStreamer-exception-2008",
+      "i2p-gpl-java-exception",
+      "KiCad-libraries-exception",
+      "LGPL-3.0-linking-exception",
+      "libpri-OpenH323-exception",
+      "Libtool-exception",
+      "Linux-syscall-note",
+      "LLGPL",
+      "LLVM-exception",
+      "LZMA-exception",
+      "mif-exception",
+      "OCaml-LGPL-linking-exception",
+      "OCCT-exception-1.0",
+      "OpenJDK-assembly-exception-1.0",
+      "openvpn-openssl-exception",
+      "PS-or-PDF-font-exception-20170817",
+      "QPL-1.0-INRIA-2004-exception",
+      "Qt-GPL-exception-1.0",
+      "Qt-LGPL-exception-1.1",
+      "Qwt-exception-1.0",
+      "SANE-exception",
+      "SHL-2.0",
+      "SHL-2.1",
+      "stunnel-exception",
+      "SWI-exception",
+      "Swift-exception",
+      "Texinfo-exception",
+      "u-boot-exception-2.0",
+      "UBDL-exception",
+      "Universal-FOSS-exception-1.0",
+      "vsftpd-openssl-exception",
+      "WxWindows-exception-3.1",
+      "x11vnc-openssl-exception"
+    ];
+  }
+});
+
+// node_modules/.pnpm/spdx-expression-parse@4.0.0/node_modules/spdx-expression-parse/scan.js
+var require_scan = __commonJS({
+  "node_modules/.pnpm/spdx-expression-parse@4.0.0/node_modules/spdx-expression-parse/scan.js"(exports2, module2) {
+    "use strict";
+    var licenses = [].concat(require_spdx_license_ids()).concat(require_deprecated());
+    var exceptions = require_spdx_exceptions();
+    module2.exports = function(source) {
+      var index = 0;
+      function hasMore() {
+        return index < source.length;
+      }
+      __name(hasMore, "hasMore");
+      function read(value) {
+        if (value instanceof RegExp) {
+          var chars = source.slice(index);
+          var match = chars.match(value);
+          if (match) {
+            index += match[0].length;
+            return match[0];
+          }
+        } else {
+          if (source.indexOf(value, index) === index) {
+            index += value.length;
+            return value;
+          }
+        }
+      }
+      __name(read, "read");
+      function skipWhitespace() {
+        read(/[ ]*/);
+      }
+      __name(skipWhitespace, "skipWhitespace");
+      function operator() {
+        var string;
+        var possibilities = [/^WITH/i, /^AND/i, /^OR/i, "(", ")", ":", "+"];
+        for (var i = 0; i < possibilities.length; i++) {
+          string = read(possibilities[i]);
+          if (string) {
+            break;
+          }
+        }
+        if (string === "+" && index > 1 && source[index - 2] === " ") {
+          throw new Error("Space before `+`");
+        }
+        return string && {
+          type: "OPERATOR",
+          string: string.toUpperCase()
+        };
+      }
+      __name(operator, "operator");
+      function idstring() {
+        return read(/[A-Za-z0-9-.]+/);
+      }
+      __name(idstring, "idstring");
+      function expectIdstring() {
+        var string = idstring();
+        if (!string) {
+          throw new Error("Expected idstring at offset " + index);
+        }
+        return string;
+      }
+      __name(expectIdstring, "expectIdstring");
+      function documentRef() {
+        if (read("DocumentRef-")) {
+          var string = expectIdstring();
+          return { type: "DOCUMENTREF", string };
+        }
+      }
+      __name(documentRef, "documentRef");
+      function licenseRef() {
+        if (read("LicenseRef-")) {
+          var string = expectIdstring();
+          return { type: "LICENSEREF", string };
+        }
+      }
+      __name(licenseRef, "licenseRef");
+      function identifier() {
+        var begin = index;
+        var string = idstring();
+        if (licenses.indexOf(string) !== -1) {
+          return {
+            type: "LICENSE",
+            string
+          };
+        } else if (exceptions.indexOf(string) !== -1) {
+          return {
+            type: "EXCEPTION",
+            string
+          };
+        }
+        index = begin;
+      }
+      __name(identifier, "identifier");
+      function parseToken() {
+        return operator() || documentRef() || licenseRef() || identifier();
+      }
+      __name(parseToken, "parseToken");
+      var tokens = [];
+      while (hasMore()) {
+        skipWhitespace();
+        if (!hasMore()) {
+          break;
+        }
+        var token = parseToken();
+        if (!token) {
+          throw new Error("Unexpected `" + source[index] + "` at offset " + index);
+        }
+        tokens.push(token);
+      }
+      return tokens;
+    };
+  }
+});
+
+// node_modules/.pnpm/spdx-expression-parse@4.0.0/node_modules/spdx-expression-parse/parse.js
+var require_parse2 = __commonJS({
+  "node_modules/.pnpm/spdx-expression-parse@4.0.0/node_modules/spdx-expression-parse/parse.js"(exports2, module2) {
+    "use strict";
+    module2.exports = function(tokens) {
+      var index = 0;
+      function hasMore() {
+        return index < tokens.length;
+      }
+      __name(hasMore, "hasMore");
+      function token() {
+        return hasMore() ? tokens[index] : null;
+      }
+      __name(token, "token");
+      function next() {
+        if (!hasMore()) {
+          throw new Error();
+        }
+        index++;
+      }
+      __name(next, "next");
+      function parseOperator(operator) {
+        var t = token();
+        if (t && t.type === "OPERATOR" && operator === t.string) {
+          next();
+          return t.string;
+        }
+      }
+      __name(parseOperator, "parseOperator");
+      function parseWith() {
+        if (parseOperator("WITH")) {
+          var t = token();
+          if (t && t.type === "EXCEPTION") {
+            next();
+            return t.string;
+          }
+          throw new Error("Expected exception after `WITH`");
+        }
+      }
+      __name(parseWith, "parseWith");
+      function parseLicenseRef() {
+        var begin = index;
+        var string = "";
+        var t = token();
+        if (t.type === "DOCUMENTREF") {
+          next();
+          string += "DocumentRef-" + t.string + ":";
+          if (!parseOperator(":")) {
+            throw new Error("Expected `:` after `DocumentRef-...`");
+          }
+        }
+        t = token();
+        if (t.type === "LICENSEREF") {
+          next();
+          string += "LicenseRef-" + t.string;
+          return { license: string };
+        }
+        index = begin;
+      }
+      __name(parseLicenseRef, "parseLicenseRef");
+      function parseLicense() {
+        var t = token();
+        if (t && t.type === "LICENSE") {
+          next();
+          var node2 = { license: t.string };
+          if (parseOperator("+")) {
+            node2.plus = true;
+          }
+          var exception = parseWith();
+          if (exception) {
+            node2.exception = exception;
+          }
+          return node2;
+        }
+      }
+      __name(parseLicense, "parseLicense");
+      function parseParenthesizedExpression() {
+        var left = parseOperator("(");
+        if (!left) {
+          return;
+        }
+        var expr = parseExpression();
+        if (!parseOperator(")")) {
+          throw new Error("Expected `)`");
+        }
+        return expr;
+      }
+      __name(parseParenthesizedExpression, "parseParenthesizedExpression");
+      function parseAtom() {
+        return parseParenthesizedExpression() || parseLicenseRef() || parseLicense();
+      }
+      __name(parseAtom, "parseAtom");
+      function makeBinaryOpParser(operator, nextParser) {
+        return /* @__PURE__ */ __name(function parseBinaryOp() {
+          var left = nextParser();
+          if (!left) {
+            return;
+          }
+          if (!parseOperator(operator)) {
+            return left;
+          }
+          var right = parseBinaryOp();
+          if (!right) {
+            throw new Error("Expected expression");
+          }
+          return {
+            left,
+            conjunction: operator.toLowerCase(),
+            right
+          };
+        }, "parseBinaryOp");
+      }
+      __name(makeBinaryOpParser, "makeBinaryOpParser");
+      var parseAnd = makeBinaryOpParser("AND", parseAtom);
+      var parseExpression = makeBinaryOpParser("OR", parseAnd);
+      var node = parseExpression();
+      if (!node || hasMore()) {
+        throw new Error("Syntax error");
+      }
+      return node;
+    };
+  }
+});
+
+// node_modules/.pnpm/spdx-expression-parse@4.0.0/node_modules/spdx-expression-parse/index.js
+var require_spdx_expression_parse = __commonJS({
+  "node_modules/.pnpm/spdx-expression-parse@4.0.0/node_modules/spdx-expression-parse/index.js"(exports2, module2) {
+    "use strict";
+    var scan = require_scan();
+    var parse = require_parse2();
+    module2.exports = function(source) {
+      return parse(scan(source));
+    };
+  }
+});
+
+// node_modules/.pnpm/spdx-correct@3.2.0/node_modules/spdx-correct/index.js
+var require_spdx_correct = __commonJS({
+  "node_modules/.pnpm/spdx-correct@3.2.0/node_modules/spdx-correct/index.js"(exports2, module2) {
+    var parse = require_spdx_expression_parse();
+    var spdxLicenseIds = require_spdx_license_ids();
+    function valid(string) {
+      try {
+        parse(string);
+        return true;
+      } catch (error) {
+        return false;
+      }
+    }
+    __name(valid, "valid");
+    function sortTranspositions(a, b) {
+      var length = b[0].length - a[0].length;
+      if (length !== 0) return length;
+      return a[0].toUpperCase().localeCompare(b[0].toUpperCase());
+    }
+    __name(sortTranspositions, "sortTranspositions");
+    var transpositions = [
+      ["APGL", "AGPL"],
+      ["Gpl", "GPL"],
+      ["GLP", "GPL"],
+      ["APL", "Apache"],
+      ["ISD", "ISC"],
+      ["GLP", "GPL"],
+      ["IST", "ISC"],
+      ["Claude", "Clause"],
+      [" or later", "+"],
+      [" International", ""],
+      ["GNU", "GPL"],
+      ["GUN", "GPL"],
+      ["+", ""],
+      ["GNU GPL", "GPL"],
+      ["GNU LGPL", "LGPL"],
+      ["GNU/GPL", "GPL"],
+      ["GNU GLP", "GPL"],
+      ["GNU LESSER GENERAL PUBLIC LICENSE", "LGPL"],
+      ["GNU Lesser General Public License", "LGPL"],
+      ["GNU LESSER GENERAL PUBLIC LICENSE", "LGPL-2.1"],
+      ["GNU Lesser General Public License", "LGPL-2.1"],
+      ["LESSER GENERAL PUBLIC LICENSE", "LGPL"],
+      ["Lesser General Public License", "LGPL"],
+      ["LESSER GENERAL PUBLIC LICENSE", "LGPL-2.1"],
+      ["Lesser General Public License", "LGPL-2.1"],
+      ["GNU General Public License", "GPL"],
+      ["Gnu public license", "GPL"],
+      ["GNU Public License", "GPL"],
+      ["GNU GENERAL PUBLIC LICENSE", "GPL"],
+      ["MTI", "MIT"],
+      ["Mozilla Public License", "MPL"],
+      ["Universal Permissive License", "UPL"],
+      ["WTH", "WTF"],
+      ["WTFGPL", "WTFPL"],
+      ["-License", ""]
+    ].sort(sortTranspositions);
+    var TRANSPOSED = 0;
+    var CORRECT = 1;
+    var transforms = [
+      // e.g. 'mit'
+      function(argument) {
+        return argument.toUpperCase();
+      },
+      // e.g. 'MIT '
+      function(argument) {
+        return argument.trim();
+      },
+      // e.g. 'M.I.T.'
+      function(argument) {
+        return argument.replace(/\./g, "");
+      },
+      // e.g. 'Apache- 2.0'
+      function(argument) {
+        return argument.replace(/\s+/g, "");
+      },
+      // e.g. 'CC BY 4.0''
+      function(argument) {
+        return argument.replace(/\s+/g, "-");
+      },
+      // e.g. 'LGPLv2.1'
+      function(argument) {
+        return argument.replace("v", "-");
+      },
+      // e.g. 'Apache 2.0'
+      function(argument) {
+        return argument.replace(/,?\s*(\d)/, "-$1");
+      },
+      // e.g. 'GPL 2'
+      function(argument) {
+        return argument.replace(/,?\s*(\d)/, "-$1.0");
+      },
+      // e.g. 'Apache Version 2.0'
+      function(argument) {
+        return argument.replace(/,?\s*(V\.|v\.|V|v|Version|version)\s*(\d)/, "-$2");
+      },
+      // e.g. 'Apache Version 2'
+      function(argument) {
+        return argument.replace(/,?\s*(V\.|v\.|V|v|Version|version)\s*(\d)/, "-$2.0");
+      },
+      // e.g. 'ZLIB'
+      function(argument) {
+        return argument[0].toUpperCase() + argument.slice(1);
+      },
+      // e.g. 'MPL/2.0'
+      function(argument) {
+        return argument.replace("/", "-");
+      },
+      // e.g. 'Apache 2'
+      function(argument) {
+        return argument.replace(/\s*V\s*(\d)/, "-$1").replace(/(\d)$/, "$1.0");
+      },
+      // e.g. 'GPL-2.0', 'GPL-3.0'
+      function(argument) {
+        if (argument.indexOf("3.0") !== -1) {
+          return argument + "-or-later";
+        } else {
+          return argument + "-only";
+        }
+      },
+      // e.g. 'GPL-2.0-'
+      function(argument) {
+        return argument + "only";
+      },
+      // e.g. 'GPL2'
+      function(argument) {
+        return argument.replace(/(\d)$/, "-$1.0");
+      },
+      // e.g. 'BSD 3'
+      function(argument) {
+        return argument.replace(/(-| )?(\d)$/, "-$2-Clause");
+      },
+      // e.g. 'BSD clause 3'
+      function(argument) {
+        return argument.replace(/(-| )clause(-| )(\d)/, "-$3-Clause");
+      },
+      // e.g. 'New BSD license'
+      function(argument) {
+        return argument.replace(/\b(Modified|New|Revised)(-| )?BSD((-| )License)?/i, "BSD-3-Clause");
+      },
+      // e.g. 'Simplified BSD license'
+      function(argument) {
+        return argument.replace(/\bSimplified(-| )?BSD((-| )License)?/i, "BSD-2-Clause");
+      },
+      // e.g. 'Free BSD license'
+      function(argument) {
+        return argument.replace(/\b(Free|Net)(-| )?BSD((-| )License)?/i, "BSD-2-Clause-$1BSD");
+      },
+      // e.g. 'Clear BSD license'
+      function(argument) {
+        return argument.replace(/\bClear(-| )?BSD((-| )License)?/i, "BSD-3-Clause-Clear");
+      },
+      // e.g. 'Old BSD License'
+      function(argument) {
+        return argument.replace(/\b(Old|Original)(-| )?BSD((-| )License)?/i, "BSD-4-Clause");
+      },
+      // e.g. 'BY-NC-4.0'
+      function(argument) {
+        return "CC-" + argument;
+      },
+      // e.g. 'BY-NC'
+      function(argument) {
+        return "CC-" + argument + "-4.0";
+      },
+      // e.g. 'Attribution-NonCommercial'
+      function(argument) {
+        return argument.replace("Attribution", "BY").replace("NonCommercial", "NC").replace("NoDerivatives", "ND").replace(/ (\d)/, "-$1").replace(/ ?International/, "");
+      },
+      // e.g. 'Attribution-NonCommercial'
+      function(argument) {
+        return "CC-" + argument.replace("Attribution", "BY").replace("NonCommercial", "NC").replace("NoDerivatives", "ND").replace(/ (\d)/, "-$1").replace(/ ?International/, "") + "-4.0";
+      }
+    ];
+    var licensesWithVersions = spdxLicenseIds.map(function(id) {
+      var match = /^(.*)-\d+\.\d+$/.exec(id);
+      return match ? [match[0], match[1]] : [id, null];
+    }).reduce(function(objectMap, item) {
+      var key = item[1];
+      objectMap[key] = objectMap[key] || [];
+      objectMap[key].push(item[0]);
+      return objectMap;
+    }, {});
+    var licensesWithOneVersion = Object.keys(licensesWithVersions).map(/* @__PURE__ */ __name(function makeEntries(key) {
+      return [key, licensesWithVersions[key]];
+    }, "makeEntries")).filter(/* @__PURE__ */ __name(function identifySoleVersions(item) {
+      return (
+        // Licenses has just one valid version suffix.
+        item[1].length === 1 && item[0] !== null && // APL will be considered Apache, rather than APL-1.0
+        item[0] !== "APL"
+      );
+    }, "identifySoleVersions")).map(/* @__PURE__ */ __name(function createLastResorts(item) {
+      return [item[0], item[1][0]];
+    }, "createLastResorts"));
+    licensesWithVersions = void 0;
+    var lastResorts = [
+      ["UNLI", "Unlicense"],
+      ["WTF", "WTFPL"],
+      ["2 CLAUSE", "BSD-2-Clause"],
+      ["2-CLAUSE", "BSD-2-Clause"],
+      ["3 CLAUSE", "BSD-3-Clause"],
+      ["3-CLAUSE", "BSD-3-Clause"],
+      ["AFFERO", "AGPL-3.0-or-later"],
+      ["AGPL", "AGPL-3.0-or-later"],
+      ["APACHE", "Apache-2.0"],
+      ["ARTISTIC", "Artistic-2.0"],
+      ["Affero", "AGPL-3.0-or-later"],
+      ["BEER", "Beerware"],
+      ["BOOST", "BSL-1.0"],
+      ["BSD", "BSD-2-Clause"],
+      ["CDDL", "CDDL-1.1"],
+      ["ECLIPSE", "EPL-1.0"],
+      ["FUCK", "WTFPL"],
+      ["GNU", "GPL-3.0-or-later"],
+      ["LGPL", "LGPL-3.0-or-later"],
+      ["GPLV1", "GPL-1.0-only"],
+      ["GPL-1", "GPL-1.0-only"],
+      ["GPLV2", "GPL-2.0-only"],
+      ["GPL-2", "GPL-2.0-only"],
+      ["GPL", "GPL-3.0-or-later"],
+      ["MIT +NO-FALSE-ATTRIBS", "MITNFA"],
+      ["MIT", "MIT"],
+      ["MPL", "MPL-2.0"],
+      ["X11", "X11"],
+      ["ZLIB", "Zlib"]
+    ].concat(licensesWithOneVersion).sort(sortTranspositions);
+    var SUBSTRING = 0;
+    var IDENTIFIER = 1;
+    var validTransformation = /* @__PURE__ */ __name(function(identifier) {
+      for (var i = 0; i < transforms.length; i++) {
+        var transformed = transforms[i](identifier).trim();
+        if (transformed !== identifier && valid(transformed)) {
+          return transformed;
+        }
+      }
+      return null;
+    }, "validTransformation");
+    var validLastResort = /* @__PURE__ */ __name(function(identifier) {
+      var upperCased = identifier.toUpperCase();
+      for (var i = 0; i < lastResorts.length; i++) {
+        var lastResort = lastResorts[i];
+        if (upperCased.indexOf(lastResort[SUBSTRING]) > -1) {
+          return lastResort[IDENTIFIER];
+        }
+      }
+      return null;
+    }, "validLastResort");
+    var anyCorrection = /* @__PURE__ */ __name(function(identifier, check) {
+      for (var i = 0; i < transpositions.length; i++) {
+        var transposition = transpositions[i];
+        var transposed = transposition[TRANSPOSED];
+        if (identifier.indexOf(transposed) > -1) {
+          var corrected = identifier.replace(
+            transposed,
+            transposition[CORRECT]
+          );
+          var checked = check(corrected);
+          if (checked !== null) {
+            return checked;
+          }
+        }
+      }
+      return null;
+    }, "anyCorrection");
+    module2.exports = function(identifier, options) {
+      options = options || {};
+      var upgrade = options.upgrade === void 0 ? true : !!options.upgrade;
+      function postprocess(value) {
+        return upgrade ? upgradeGPLs(value) : value;
+      }
+      __name(postprocess, "postprocess");
+      var validArugment = typeof identifier === "string" && identifier.trim().length !== 0;
+      if (!validArugment) {
+        throw Error("Invalid argument. Expected non-empty string.");
+      }
+      identifier = identifier.trim();
+      if (valid(identifier)) {
+        return postprocess(identifier);
+      }
+      var noPlus = identifier.replace(/\+$/, "").trim();
+      if (valid(noPlus)) {
+        return postprocess(noPlus);
+      }
+      var transformed = validTransformation(identifier);
+      if (transformed !== null) {
+        return postprocess(transformed);
+      }
+      transformed = anyCorrection(identifier, function(argument) {
+        if (valid(argument)) {
+          return argument;
+        }
+        return validTransformation(argument);
+      });
+      if (transformed !== null) {
+        return postprocess(transformed);
+      }
+      transformed = validLastResort(identifier);
+      if (transformed !== null) {
+        return postprocess(transformed);
+      }
+      transformed = anyCorrection(identifier, validLastResort);
+      if (transformed !== null) {
+        return postprocess(transformed);
+      }
+      return null;
+    };
+    function upgradeGPLs(value) {
+      if ([
+        "GPL-1.0",
+        "LGPL-1.0",
+        "AGPL-1.0",
+        "GPL-2.0",
+        "LGPL-2.0",
+        "AGPL-2.0",
+        "LGPL-2.1"
+      ].indexOf(value) !== -1) {
+        return value + "-only";
+      } else if ([
+        "GPL-1.0+",
+        "GPL-2.0+",
+        "GPL-3.0+",
+        "LGPL-2.0+",
+        "LGPL-2.1+",
+        "LGPL-3.0+",
+        "AGPL-1.0+",
+        "AGPL-3.0+"
+      ].indexOf(value) !== -1) {
+        return value.replace(/\+$/, "-or-later");
+      } else if (["GPL-3.0", "LGPL-3.0", "AGPL-3.0"].indexOf(value) !== -1) {
+        return value + "-or-later";
+      } else {
+        return value;
+      }
+    }
+    __name(upgradeGPLs, "upgradeGPLs");
+  }
+});
+
+// node_modules/.pnpm/validate-npm-package-license@3.0.4/node_modules/validate-npm-package-license/index.js
+var require_validate_npm_package_license = __commonJS({
+  "node_modules/.pnpm/validate-npm-package-license@3.0.4/node_modules/validate-npm-package-license/index.js"(exports2, module2) {
+    var parse = require_spdx_expression_parse();
+    var correct = require_spdx_correct();
+    var genericWarning = 'license should be a valid SPDX license expression (without "LicenseRef"), "UNLICENSED", or "SEE LICENSE IN "';
+    var fileReferenceRE = /^SEE LICEN[CS]E IN (.+)$/;
+    function startsWith(prefix, string) {
+      return string.slice(0, prefix.length) === prefix;
+    }
+    __name(startsWith, "startsWith");
+    function usesLicenseRef(ast) {
+      if (ast.hasOwnProperty("license")) {
+        var license = ast.license;
+        return startsWith("LicenseRef", license) || startsWith("DocumentRef", license);
+      } else {
+        return usesLicenseRef(ast.left) || usesLicenseRef(ast.right);
+      }
+    }
+    __name(usesLicenseRef, "usesLicenseRef");
+    module2.exports = function(argument) {
+      var ast;
+      try {
+        ast = parse(argument);
+      } catch (e) {
+        var match;
+        if (argument === "UNLICENSED" || argument === "UNLICENCED") {
+          return {
+            validForOldPackages: true,
+            validForNewPackages: true,
+            unlicensed: true
+          };
+        } else if (match = fileReferenceRE.exec(argument)) {
+          return {
+            validForOldPackages: true,
+            validForNewPackages: true,
+            inFile: match[1]
+          };
+        } else {
+          var result = {
+            validForOldPackages: false,
+            validForNewPackages: false,
+            warnings: [genericWarning]
+          };
+          if (argument.trim().length !== 0) {
+            var corrected = correct(argument);
+            if (corrected) {
+              result.warnings.push(
+                'license is similar to the valid expression "' + corrected + '"'
+              );
+            }
+          }
+          return result;
+        }
+      }
+      if (usesLicenseRef(ast)) {
+        return {
+          validForNewPackages: false,
+          validForOldPackages: false,
+          spdx: true,
+          warnings: [genericWarning]
+        };
+      } else {
+        return {
+          validForNewPackages: true,
+          validForOldPackages: true,
+          spdx: true
+        };
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/normalize-data.js
+var require_normalize_data = __commonJS({
+  "node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/normalize-data.js"(exports2, module2) {
+    var { URL: URL2 } = require("node:url");
+    var hostedGitInfo = require_lib3();
+    var validateLicense = require_validate_npm_package_license();
+    var typos = {
+      dependancies: "dependencies",
+      dependecies: "dependencies",
+      depdenencies: "dependencies",
+      devEependencies: "devDependencies",
+      depends: "dependencies",
+      "dev-dependencies": "devDependencies",
+      devDependences: "devDependencies",
+      devDepenencies: "devDependencies",
+      devdependencies: "devDependencies",
+      repostitory: "repository",
+      repo: "repository",
+      prefereGlobal: "preferGlobal",
+      hompage: "homepage",
+      hampage: "homepage",
+      autohr: "author",
+      autor: "author",
+      contributers: "contributors",
+      publicationConfig: "publishConfig",
+      script: "scripts"
+    };
+    var isEmail = /* @__PURE__ */ __name((str) => str.includes("@") && str.indexOf("@") < str.lastIndexOf("."), "isEmail");
+    function extractDescription(description) {
+      const lines = description.trim().split("\n");
+      let start = 0;
+      while (lines[start]?.trim().match(/^(#|$)/)) {
+        start++;
+      }
+      let end = start + 1;
+      while (end < lines.length && lines[end].trim()) {
+        end++;
+      }
+      return lines.slice(start, end).join(" ").trim();
+    }
+    __name(extractDescription, "extractDescription");
+    function stringifyPerson(person) {
+      if (typeof person !== "string") {
+        const name = person.name || "";
+        const u = person.url || person.web;
+        const wrappedUrl = u ? " (" + u + ")" : "";
+        const e = person.email || person.mail;
+        const wrappedEmail = e ? " <" + e + ">" : "";
+        person = name + wrappedEmail + wrappedUrl;
+      }
+      const matchedName = person.match(/^([^(<]+)/);
+      const matchedUrl = person.match(/\(([^()]+)\)/);
+      const matchedEmail = person.match(/<([^<>]+)>/);
+      const parsed = {};
+      if (matchedName?.[0].trim()) {
+        parsed.name = matchedName[0].trim();
+      }
+      if (matchedEmail) {
+        parsed.email = matchedEmail[1];
+      }
+      if (matchedUrl) {
+        parsed.url = matchedUrl[1];
+      }
+      return parsed;
+    }
+    __name(stringifyPerson, "stringifyPerson");
+    function normalizeData(data, changes) {
+      if (data.description && typeof data.description !== "string") {
+        changes?.push(`'description' field should be a string`);
+        delete data.description;
+      }
+      if (data.readme && !data.description && data.readme !== "ERROR: No README data found!") {
+        data.description = extractDescription(data.readme);
+      }
+      if (data.description === void 0) {
+        delete data.description;
+      }
+      if (!data.description) {
+        changes?.push("No description");
+      }
+      if (data.modules) {
+        changes?.push(`modules field is deprecated`);
+        delete data.modules;
+      }
+      const files = data.files;
+      if (files && !Array.isArray(files)) {
+        changes?.push(`Invalid 'files' member`);
+        delete data.files;
+      } else if (data.files) {
+        data.files = data.files.filter(function(file) {
+          if (!file || typeof file !== "string") {
+            changes?.push(`Invalid filename in 'files' list: ${file}`);
+            return false;
+          } else {
+            return true;
+          }
+        });
+      }
+      if (data.man && typeof data.man === "string") {
+        data.man = [data.man];
+      }
+      if (!data.bugs && data.repository?.url) {
+        const hosted = hostedGitInfo.fromUrl(data.repository.url);
+        if (hosted && hosted.bugs()) {
+          data.bugs = { url: hosted.bugs() };
+        }
+      } else if (data.bugs) {
+        if (typeof data.bugs === "string") {
+          if (isEmail(data.bugs)) {
+            data.bugs = { email: data.bugs };
+          } else if (URL2.canParse(data.bugs)) {
+            data.bugs = { url: data.bugs };
+          } else {
+            changes?.push(`Bug string field must be url, email, or {email,url}`);
+          }
+        } else {
+          for (const k in data.bugs) {
+            if (["web", "name"].includes(k)) {
+              changes?.push(`bugs['${k}'] should probably be bugs['url'].`);
+              data.bugs.url = data.bugs[k];
+              delete data.bugs[k];
+            }
+          }
+          const oldBugs = data.bugs;
+          data.bugs = {};
+          if (oldBugs.url) {
+            if (URL2.canParse(oldBugs.url)) {
+              data.bugs.url = oldBugs.url;
+            } else {
+              changes?.push("bugs.url field must be a string url. Deleted.");
+            }
+          }
+          if (oldBugs.email) {
+            if (typeof oldBugs.email === "string" && isEmail(oldBugs.email)) {
+              data.bugs.email = oldBugs.email;
+            } else {
+              changes?.push("bugs.email field must be a string email. Deleted.");
+            }
+          }
+        }
+        if (!data.bugs.email && !data.bugs.url) {
+          delete data.bugs;
+          changes?.push("Normalized value of bugs field is an empty object. Deleted.");
+        }
+      }
+      if (typeof data.keywords === "string") {
+        data.keywords = data.keywords.split(/,\s+/);
+      }
+      if (data.keywords && !Array.isArray(data.keywords)) {
+        delete data.keywords;
+        changes?.push(`keywords should be an array of strings`);
+      } else if (data.keywords) {
+        data.keywords = data.keywords.filter(function(kw) {
+          if (typeof kw !== "string" || !kw) {
+            changes?.push(`keywords should be an array of strings`);
+            return false;
+          } else {
+            return true;
+          }
+        });
+      }
+      const bdd = "bundledDependencies";
+      const bd = "bundleDependencies";
+      if (data[bdd] && !data[bd]) {
+        data[bd] = data[bdd];
+        delete data[bdd];
+      }
+      if (data[bd] && !Array.isArray(data[bd])) {
+        changes?.push(`Invalid 'bundleDependencies' list. Must be array of package names`);
+        delete data[bd];
+      } else if (data[bd]) {
+        data[bd] = data[bd].filter(function(filtered) {
+          if (!filtered || typeof filtered !== "string") {
+            changes?.push(`Invalid bundleDependencies member: ${filtered}`);
+            return false;
+          } else {
+            if (!data.dependencies) {
+              data.dependencies = {};
+            }
+            if (!Object.prototype.hasOwnProperty.call(data.dependencies, filtered)) {
+              changes?.push(`Non-dependency in bundleDependencies: ${filtered}`);
+              data.dependencies[filtered] = "*";
+            }
+            return true;
+          }
+        });
+      }
+      if (!data.homepage && data.repository && data.repository.url) {
+        const hosted = hostedGitInfo.fromUrl(data.repository.url);
+        if (hosted) {
+          data.homepage = hosted.docs();
+        }
+      }
+      if (data.homepage) {
+        if (typeof data.homepage !== "string") {
+          changes?.push("homepage field must be a string url. Deleted.");
+          delete data.homepage;
+        } else {
+          if (!URL2.canParse(data.homepage)) {
+            data.homepage = "http://" + data.homepage;
+          }
+        }
+      }
+      if (!data.readme) {
+        changes?.push("No README data");
+        data.readme = "ERROR: No README data found!";
+      }
+      const license = data.license || data.licence;
+      if (!license) {
+        changes?.push("No license field.");
+      } else if (typeof license !== "string" || license.length < 1 || license.trim() === "") {
+        changes?.push("license should be a valid SPDX license expression");
+      } else if (!validateLicense(license).validForNewPackages) {
+        changes?.push("license should be a valid SPDX license expression");
+      }
+      if (data.author) {
+        data.author = stringifyPerson(data.author);
+      }
+      ["maintainers", "contributors"].forEach(function(set) {
+        if (!Array.isArray(data[set])) {
+          return;
+        }
+        data[set] = data[set].map(stringifyPerson);
+      });
+      for (const d in typos) {
+        if (Object.prototype.hasOwnProperty.call(data, d)) {
+          changes?.push(`${d} should probably be ${typos[d]}.`);
+        }
+      }
+    }
+    __name(normalizeData, "normalizeData");
+    module2.exports = { normalizeData };
+  }
+});
+
+// node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/posix.js
+var require_posix = __commonJS({
+  "node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/posix.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.sync = exports2.isexe = void 0;
+    var fs_1 = require("fs");
+    var promises_1 = require("fs/promises");
+    var isexe = /* @__PURE__ */ __name(async (path, options = {}) => {
+      const { ignoreErrors = false } = options;
+      try {
+        return checkStat(await (0, promises_1.stat)(path), options);
+      } catch (e) {
+        const er = e;
+        if (ignoreErrors || er.code === "EACCES")
+          return false;
+        throw er;
+      }
+    }, "isexe");
+    exports2.isexe = isexe;
+    var sync = /* @__PURE__ */ __name((path, options = {}) => {
+      const { ignoreErrors = false } = options;
+      try {
+        return checkStat((0, fs_1.statSync)(path), options);
+      } catch (e) {
+        const er = e;
+        if (ignoreErrors || er.code === "EACCES")
+          return false;
+        throw er;
+      }
+    }, "sync");
+    exports2.sync = sync;
+    var checkStat = /* @__PURE__ */ __name((stat, options) => stat.isFile() && checkMode(stat, options), "checkStat");
+    var checkMode = /* @__PURE__ */ __name((stat, options) => {
+      const myUid = options.uid ?? process.getuid?.();
+      const myGroups = options.groups ?? process.getgroups?.() ?? [];
+      const myGid = options.gid ?? process.getgid?.() ?? myGroups[0];
+      if (myUid === void 0 || myGid === void 0) {
+        throw new Error("cannot get uid or gid");
+      }
+      const groups = /* @__PURE__ */ new Set([myGid, ...myGroups]);
+      const mod = stat.mode;
+      const uid = stat.uid;
+      const gid = stat.gid;
+      const u = parseInt("100", 8);
+      const g = parseInt("010", 8);
+      const o = parseInt("001", 8);
+      const ug = u | g;
+      return !!(mod & o || mod & g && groups.has(gid) || mod & u && uid === myUid || mod & ug && myUid === 0);
+    }, "checkMode");
+  }
+});
+
+// node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/win32.js
+var require_win32 = __commonJS({
+  "node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/win32.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.sync = exports2.isexe = void 0;
+    var fs_1 = require("fs");
+    var promises_1 = require("fs/promises");
+    var isexe = /* @__PURE__ */ __name(async (path, options = {}) => {
+      const { ignoreErrors = false } = options;
+      try {
+        return checkStat(await (0, promises_1.stat)(path), path, options);
+      } catch (e) {
+        const er = e;
+        if (ignoreErrors || er.code === "EACCES")
+          return false;
+        throw er;
+      }
+    }, "isexe");
+    exports2.isexe = isexe;
+    var sync = /* @__PURE__ */ __name((path, options = {}) => {
+      const { ignoreErrors = false } = options;
+      try {
+        return checkStat((0, fs_1.statSync)(path), path, options);
+      } catch (e) {
+        const er = e;
+        if (ignoreErrors || er.code === "EACCES")
+          return false;
+        throw er;
+      }
+    }, "sync");
+    exports2.sync = sync;
+    var checkPathExt = /* @__PURE__ */ __name((path, options) => {
+      const { pathExt = process.env.PATHEXT || "" } = options;
+      const peSplit = pathExt.split(";");
+      if (peSplit.indexOf("") !== -1) {
+        return true;
+      }
+      for (let i = 0; i < peSplit.length; i++) {
+        const p = peSplit[i].toLowerCase();
+        const ext = path.substring(path.length - p.length).toLowerCase();
+        if (p && ext === p) {
+          return true;
+        }
+      }
+      return false;
+    }, "checkPathExt");
+    var checkStat = /* @__PURE__ */ __name((stat, path, options) => stat.isFile() && checkPathExt(path, options), "checkStat");
+  }
+});
+
+// node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/options.js
+var require_options = __commonJS({
+  "node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/options.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+  }
+});
+
+// node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/index.js
+var require_cjs = __commonJS({
+  "node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/index.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
+      for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.sync = exports2.isexe = exports2.posix = exports2.win32 = void 0;
+    var posix = __importStar(require_posix());
+    exports2.posix = posix;
+    var win32 = __importStar(require_win32());
+    exports2.win32 = win32;
+    __exportStar(require_options(), exports2);
+    var platform = process.env._ISEXE_TEST_PLATFORM_ || process.platform;
+    var impl = platform === "win32" ? win32 : posix;
+    exports2.isexe = impl.isexe;
+    exports2.sync = impl.sync;
+  }
+});
+
+// node_modules/.pnpm/which@5.0.0/node_modules/which/lib/index.js
+var require_lib4 = __commonJS({
+  "node_modules/.pnpm/which@5.0.0/node_modules/which/lib/index.js"(exports2, module2) {
+    var { isexe, sync: isexeSync } = require_cjs();
+    var { join, delimiter, sep, posix } = require("path");
+    var isWindows = process.platform === "win32";
+    var rSlash = new RegExp(`[${posix.sep}${sep === posix.sep ? "" : sep}]`.replace(/(\\)/g, "\\$1"));
+    var rRel = new RegExp(`^\\.${rSlash.source}`);
+    var getNotFoundError = /* @__PURE__ */ __name((cmd) => Object.assign(new Error(`not found: ${cmd}`), { code: "ENOENT" }), "getNotFoundError");
+    var getPathInfo = /* @__PURE__ */ __name((cmd, {
+      path: optPath = process.env.PATH,
+      pathExt: optPathExt = process.env.PATHEXT,
+      delimiter: optDelimiter = delimiter
+    }) => {
+      const pathEnv = cmd.match(rSlash) ? [""] : [
+        // windows always checks the cwd first
+        ...isWindows ? [process.cwd()] : [],
+        ...(optPath || /* istanbul ignore next: very unusual */
+        "").split(optDelimiter)
+      ];
+      if (isWindows) {
+        const pathExtExe = optPathExt || [".EXE", ".CMD", ".BAT", ".COM"].join(optDelimiter);
+        const pathExt = pathExtExe.split(optDelimiter).flatMap((item) => [item, item.toLowerCase()]);
+        if (cmd.includes(".") && pathExt[0] !== "") {
+          pathExt.unshift("");
+        }
+        return { pathEnv, pathExt, pathExtExe };
+      }
+      return { pathEnv, pathExt: [""] };
+    }, "getPathInfo");
+    var getPathPart = /* @__PURE__ */ __name((raw, cmd) => {
+      const pathPart = /^".*"$/.test(raw) ? raw.slice(1, -1) : raw;
+      const prefix = !pathPart && rRel.test(cmd) ? cmd.slice(0, 2) : "";
+      return prefix + join(pathPart, cmd);
+    }, "getPathPart");
+    var which = /* @__PURE__ */ __name(async (cmd, opt = {}) => {
+      const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt);
+      const found = [];
+      for (const envPart of pathEnv) {
+        const p = getPathPart(envPart, cmd);
+        for (const ext of pathExt) {
+          const withExt = p + ext;
+          const is = await isexe(withExt, { pathExt: pathExtExe, ignoreErrors: true });
+          if (is) {
+            if (!opt.all) {
+              return withExt;
+            }
+            found.push(withExt);
+          }
+        }
+      }
+      if (opt.all && found.length) {
+        return found;
+      }
+      if (opt.nothrow) {
+        return null;
+      }
+      throw getNotFoundError(cmd);
+    }, "which");
+    var whichSync = /* @__PURE__ */ __name((cmd, opt = {}) => {
+      const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt);
+      const found = [];
+      for (const pathEnvPart of pathEnv) {
+        const p = getPathPart(pathEnvPart, cmd);
+        for (const ext of pathExt) {
+          const withExt = p + ext;
+          const is = isexeSync(withExt, { pathExt: pathExtExe, ignoreErrors: true });
+          if (is) {
+            if (!opt.all) {
+              return withExt;
+            }
+            found.push(withExt);
+          }
+        }
+      }
+      if (opt.all && found.length) {
+        return found;
+      }
+      if (opt.nothrow) {
+        return null;
+      }
+      throw getNotFoundError(cmd);
+    }, "whichSync");
+    module2.exports = which;
+    which.sync = whichSync;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+promise-spawn@9.0.1/node_modules/@npmcli/promise-spawn/lib/escape.js
+var require_escape2 = __commonJS({
+  "node_modules/.pnpm/@npmcli+promise-spawn@9.0.1/node_modules/@npmcli/promise-spawn/lib/escape.js"(exports2, module2) {
+    "use strict";
+    var cmd = /* @__PURE__ */ __name((input, doubleEscape) => {
+      if (!input.length) {
+        return '""';
+      }
+      let result;
+      if (!/[ \t\n\v"]/.test(input)) {
+        result = input;
+      } else {
+        result = '"';
+        for (let i = 0; i <= input.length; ++i) {
+          let slashCount = 0;
+          while (input[i] === "\\") {
+            ++i;
+            ++slashCount;
+          }
+          if (i === input.length) {
+            result += "\\".repeat(slashCount * 2);
+            break;
+          }
+          if (input[i] === '"') {
+            result += "\\".repeat(slashCount * 2 + 1);
+            result += input[i];
+          } else {
+            result += "\\".repeat(slashCount);
+            result += input[i];
+          }
+        }
+        result += '"';
+      }
+      result = result.replace(/[ !%^&()<>|"]/g, "^$&");
+      if (doubleEscape) {
+        result = result.replace(/[ !%^&()<>|"]/g, "^$&");
+      }
+      return result;
+    }, "cmd");
+    var sh = /* @__PURE__ */ __name((input) => {
+      if (!input.length) {
+        return `''`;
+      }
+      if (!/[\t\n\r "#$&'()*;<>?\\`|~]/.test(input)) {
+        return input;
+      }
+      const result = `'${input.replace(/'/g, `'\\''`)}'`.replace(/^(?:'')+(?!$)/, "").replace(/\\'''/g, `\\'`);
+      return result;
+    }, "sh");
+    module2.exports = {
+      cmd,
+      sh
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+promise-spawn@9.0.1/node_modules/@npmcli/promise-spawn/lib/index.js
+var require_lib5 = __commonJS({
+  "node_modules/.pnpm/@npmcli+promise-spawn@9.0.1/node_modules/@npmcli/promise-spawn/lib/index.js"(exports2, module2) {
+    "use strict";
+    var { spawn } = require("child_process");
+    var os2 = require("os");
+    var which = require_lib4();
+    var escape = require_escape2();
+    var promiseSpawn = /* @__PURE__ */ __name((cmd, args, opts = {}, extra = {}) => {
+      if (opts.shell) {
+        return spawnWithShell(cmd, args, opts, extra);
+      }
+      let resolve, reject;
+      const promise = new Promise((_resolve, _reject) => {
+        resolve = _resolve;
+        reject = _reject;
+      });
+      const closeError = new Error("command failed");
+      const stdout = [];
+      const stderr = [];
+      const getResult = /* @__PURE__ */ __name((result) => ({
+        cmd,
+        args,
+        ...result,
+        ...stdioResult(stdout, stderr, opts),
+        ...extra
+      }), "getResult");
+      const rejectWithOpts = /* @__PURE__ */ __name((er, erOpts) => {
+        const resultError = getResult(erOpts);
+        reject(Object.assign(er, resultError));
+      }, "rejectWithOpts");
+      const proc = spawn(cmd, args, opts);
+      promise.stdin = proc.stdin;
+      promise.process = proc;
+      proc.on("error", rejectWithOpts);
+      if (proc.stdout) {
+        proc.stdout.on("data", (c) => stdout.push(c));
+        proc.stdout.on("error", rejectWithOpts);
+      }
+      if (proc.stderr) {
+        proc.stderr.on("data", (c) => stderr.push(c));
+        proc.stderr.on("error", rejectWithOpts);
+      }
+      proc.on("close", (code, signal) => {
+        if (code || signal) {
+          rejectWithOpts(closeError, { code, signal });
+        } else {
+          resolve(getResult({ code, signal }));
+        }
+      });
+      return promise;
+    }, "promiseSpawn");
+    var spawnWithShell = /* @__PURE__ */ __name((cmd, args, opts, extra) => {
+      let command = opts.shell;
+      if (command === true) {
+        command = process.platform === "win32" ? process.env.ComSpec || "cmd.exe" : "sh";
+      }
+      const options = { ...opts, shell: false };
+      const realArgs = [];
+      let script = cmd;
+      const isCmd = /(?:^|\\)cmd(?:\.exe)?$/i.test(command);
+      if (isCmd) {
+        let doubleEscape = false;
+        let initialCmd = "";
+        let insideQuotes = false;
+        for (let i = 0; i < cmd.length; ++i) {
+          const char = cmd.charAt(i);
+          if (char === " " && !insideQuotes) {
+            break;
+          }
+          initialCmd += char;
+          if (char === '"' || char === "'") {
+            insideQuotes = !insideQuotes;
+          }
+        }
+        let pathToInitial;
+        try {
+          pathToInitial = which.sync(initialCmd, {
+            path: options.env && findInObject(options.env, "PATH") || process.env.PATH,
+            pathext: options.env && findInObject(options.env, "PATHEXT") || process.env.PATHEXT
+          }).toLowerCase();
+        } catch (err) {
+          pathToInitial = initialCmd.toLowerCase();
+        }
+        doubleEscape = pathToInitial.endsWith(".cmd") || pathToInitial.endsWith(".bat");
+        for (const arg of args) {
+          script += ` ${escape.cmd(arg, doubleEscape)}`;
+        }
+        realArgs.push("/d", "/s", "/c", script);
+        options.windowsVerbatimArguments = true;
+      } else {
+        for (const arg of args) {
+          script += ` ${escape.sh(arg)}`;
+        }
+        realArgs.push("-c", script);
+      }
+      return promiseSpawn(command, realArgs, options, extra);
+    }, "spawnWithShell");
+    var open = /* @__PURE__ */ __name((_args, opts = {}, extra = {}) => {
+      const options = { ...opts, shell: true };
+      const args = [].concat(_args);
+      let platform = process.platform;
+      if (platform === "linux" && os2.release().toLowerCase().includes("microsoft")) {
+        platform = "wsl";
+        if (!process.env.BROWSER) {
+          return Promise.reject(
+            new Error("Set the BROWSER environment variable to your desired browser.")
+          );
+        }
+      }
+      let command = options.command;
+      if (!command) {
+        if (platform === "win32") {
+          options.shell = process.env.ComSpec;
+          command = 'start ""';
+        } else if (platform === "wsl") {
+          command = "sensible-browser";
+        } else if (platform === "darwin") {
+          command = "open";
+        } else {
+          command = "xdg-open";
+        }
+      }
+      return spawnWithShell(command, args, options, extra);
+    }, "open");
+    promiseSpawn.open = open;
+    var isPipe = /* @__PURE__ */ __name((stdio = "pipe", fd) => {
+      if (stdio === "pipe" || stdio === null) {
+        return true;
+      }
+      if (Array.isArray(stdio)) {
+        return isPipe(stdio[fd], fd);
+      }
+      return false;
+    }, "isPipe");
+    var stdioResult = /* @__PURE__ */ __name((stdout, stderr, { stdioString = true, stdio }) => {
+      const result = {
+        stdout: null,
+        stderr: null
+      };
+      if (isPipe(stdio, 1)) {
+        result.stdout = Buffer.concat(stdout);
+        if (stdioString) {
+          result.stdout = result.stdout.toString().trim();
+        }
+      }
+      if (isPipe(stdio, 2)) {
+        result.stderr = Buffer.concat(stderr);
+        if (stdioString) {
+          result.stderr = result.stderr.toString().trim();
+        }
+      }
+      return result;
+    }, "stdioResult");
+    var findInObject = /* @__PURE__ */ __name((obj, key) => {
+      key = key.toLowerCase();
+      for (const objKey of Object.keys(obj).sort()) {
+        if (objKey.toLowerCase() === key) {
+          return obj[objKey];
+        }
+      }
+    }, "findInObject");
+    module2.exports = promiseSpawn;
+  }
+});
+
+// node_modules/.pnpm/err-code@2.0.3/node_modules/err-code/index.js
+var require_err_code = __commonJS({
+  "node_modules/.pnpm/err-code@2.0.3/node_modules/err-code/index.js"(exports2, module2) {
+    "use strict";
+    function assign(obj, props) {
+      for (const key in props) {
+        Object.defineProperty(obj, key, {
+          value: props[key],
+          enumerable: true,
+          configurable: true
+        });
+      }
+      return obj;
+    }
+    __name(assign, "assign");
+    function createError(err, code, props) {
+      if (!err || typeof err === "string") {
+        throw new TypeError("Please pass an Error to err-code");
+      }
+      if (!props) {
+        props = {};
+      }
+      if (typeof code === "object") {
+        props = code;
+        code = void 0;
+      }
+      if (code != null) {
+        props.code = code;
+      }
+      try {
+        return assign(err, props);
+      } catch (_) {
+        props.message = err.message;
+        props.stack = err.stack;
+        const ErrClass = /* @__PURE__ */ __name(function() {
+        }, "ErrClass");
+        ErrClass.prototype = Object.create(Object.getPrototypeOf(err));
+        return assign(new ErrClass(), props);
+      }
+    }
+    __name(createError, "createError");
+    module2.exports = createError;
+  }
+});
+
+// node_modules/.pnpm/retry@0.12.0/node_modules/retry/lib/retry_operation.js
+var require_retry_operation = __commonJS({
+  "node_modules/.pnpm/retry@0.12.0/node_modules/retry/lib/retry_operation.js"(exports2, module2) {
+    function RetryOperation(timeouts, options) {
+      if (typeof options === "boolean") {
+        options = { forever: options };
+      }
+      this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));
+      this._timeouts = timeouts;
+      this._options = options || {};
+      this._maxRetryTime = options && options.maxRetryTime || Infinity;
+      this._fn = null;
+      this._errors = [];
+      this._attempts = 1;
+      this._operationTimeout = null;
+      this._operationTimeoutCb = null;
+      this._timeout = null;
+      this._operationStart = null;
+      if (this._options.forever) {
+        this._cachedTimeouts = this._timeouts.slice(0);
+      }
+    }
+    __name(RetryOperation, "RetryOperation");
+    module2.exports = RetryOperation;
+    RetryOperation.prototype.reset = function() {
+      this._attempts = 1;
+      this._timeouts = this._originalTimeouts;
+    };
+    RetryOperation.prototype.stop = function() {
+      if (this._timeout) {
+        clearTimeout(this._timeout);
+      }
+      this._timeouts = [];
+      this._cachedTimeouts = null;
+    };
+    RetryOperation.prototype.retry = function(err) {
+      if (this._timeout) {
+        clearTimeout(this._timeout);
+      }
+      if (!err) {
+        return false;
+      }
+      var currentTime = (/* @__PURE__ */ new Date()).getTime();
+      if (err && currentTime - this._operationStart >= this._maxRetryTime) {
+        this._errors.unshift(new Error("RetryOperation timeout occurred"));
+        return false;
+      }
+      this._errors.push(err);
+      var timeout = this._timeouts.shift();
+      if (timeout === void 0) {
+        if (this._cachedTimeouts) {
+          this._errors.splice(this._errors.length - 1, this._errors.length);
+          this._timeouts = this._cachedTimeouts.slice(0);
+          timeout = this._timeouts.shift();
+        } else {
+          return false;
+        }
+      }
+      var self = this;
+      var timer = setTimeout(function() {
+        self._attempts++;
+        if (self._operationTimeoutCb) {
+          self._timeout = setTimeout(function() {
+            self._operationTimeoutCb(self._attempts);
+          }, self._operationTimeout);
+          if (self._options.unref) {
+            self._timeout.unref();
+          }
+        }
+        self._fn(self._attempts);
+      }, timeout);
+      if (this._options.unref) {
+        timer.unref();
+      }
+      return true;
+    };
+    RetryOperation.prototype.attempt = function(fn, timeoutOps) {
+      this._fn = fn;
+      if (timeoutOps) {
+        if (timeoutOps.timeout) {
+          this._operationTimeout = timeoutOps.timeout;
+        }
+        if (timeoutOps.cb) {
+          this._operationTimeoutCb = timeoutOps.cb;
+        }
+      }
+      var self = this;
+      if (this._operationTimeoutCb) {
+        this._timeout = setTimeout(function() {
+          self._operationTimeoutCb();
+        }, self._operationTimeout);
+      }
+      this._operationStart = (/* @__PURE__ */ new Date()).getTime();
+      this._fn(this._attempts);
+    };
+    RetryOperation.prototype.try = function(fn) {
+      /* @__PURE__ */ console.log("Using RetryOperation.try() is deprecated");
+      this.attempt(fn);
+    };
+    RetryOperation.prototype.start = function(fn) {
+      /* @__PURE__ */ console.log("Using RetryOperation.start() is deprecated");
+      this.attempt(fn);
+    };
+    RetryOperation.prototype.start = RetryOperation.prototype.try;
+    RetryOperation.prototype.errors = function() {
+      return this._errors;
+    };
+    RetryOperation.prototype.attempts = function() {
+      return this._attempts;
+    };
+    RetryOperation.prototype.mainError = function() {
+      if (this._errors.length === 0) {
+        return null;
+      }
+      var counts = {};
+      var mainError = null;
+      var mainErrorCount = 0;
+      for (var i = 0; i < this._errors.length; i++) {
+        var error = this._errors[i];
+        var message = error.message;
+        var count = (counts[message] || 0) + 1;
+        counts[message] = count;
+        if (count >= mainErrorCount) {
+          mainError = error;
+          mainErrorCount = count;
+        }
+      }
+      return mainError;
+    };
+  }
+});
+
+// node_modules/.pnpm/retry@0.12.0/node_modules/retry/lib/retry.js
+var require_retry = __commonJS({
+  "node_modules/.pnpm/retry@0.12.0/node_modules/retry/lib/retry.js"(exports2) {
+    var RetryOperation = require_retry_operation();
+    exports2.operation = function(options) {
+      var timeouts = exports2.timeouts(options);
+      return new RetryOperation(timeouts, {
+        forever: options && options.forever,
+        unref: options && options.unref,
+        maxRetryTime: options && options.maxRetryTime
+      });
+    };
+    exports2.timeouts = function(options) {
+      if (options instanceof Array) {
+        return [].concat(options);
+      }
+      var opts = {
+        retries: 10,
+        factor: 2,
+        minTimeout: 1 * 1e3,
+        maxTimeout: Infinity,
+        randomize: false
+      };
+      for (var key in options) {
+        opts[key] = options[key];
+      }
+      if (opts.minTimeout > opts.maxTimeout) {
+        throw new Error("minTimeout is greater than maxTimeout");
+      }
+      var timeouts = [];
+      for (var i = 0; i < opts.retries; i++) {
+        timeouts.push(this.createTimeout(i, opts));
+      }
+      if (options && options.forever && !timeouts.length) {
+        timeouts.push(this.createTimeout(i, opts));
+      }
+      timeouts.sort(function(a, b) {
+        return a - b;
+      });
+      return timeouts;
+    };
+    exports2.createTimeout = function(attempt, opts) {
+      var random = opts.randomize ? Math.random() + 1 : 1;
+      var timeout = Math.round(random * opts.minTimeout * Math.pow(opts.factor, attempt));
+      timeout = Math.min(timeout, opts.maxTimeout);
+      return timeout;
+    };
+    exports2.wrap = function(obj, options, methods) {
+      if (options instanceof Array) {
+        methods = options;
+        options = null;
+      }
+      if (!methods) {
+        methods = [];
+        for (var key in obj) {
+          if (typeof obj[key] === "function") {
+            methods.push(key);
+          }
+        }
+      }
+      for (var i = 0; i < methods.length; i++) {
+        var method = methods[i];
+        var original = obj[method];
+        obj[method] = (/* @__PURE__ */ __name(function retryWrapper(original2) {
+          var op = exports2.operation(options);
+          var args = Array.prototype.slice.call(arguments, 1);
+          var callback = args.pop();
+          args.push(function(err) {
+            if (op.retry(err)) {
+              return;
+            }
+            if (err) {
+              arguments[0] = op.mainError();
+            }
+            callback.apply(this, arguments);
+          });
+          op.attempt(function() {
+            original2.apply(obj, args);
+          });
+        }, "retryWrapper")).bind(obj, original);
+        obj[method].options = options;
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/retry@0.12.0/node_modules/retry/index.js
+var require_retry2 = __commonJS({
+  "node_modules/.pnpm/retry@0.12.0/node_modules/retry/index.js"(exports2, module2) {
+    module2.exports = require_retry();
+  }
+});
+
+// node_modules/.pnpm/promise-retry@2.0.1/node_modules/promise-retry/index.js
+var require_promise_retry = __commonJS({
+  "node_modules/.pnpm/promise-retry@2.0.1/node_modules/promise-retry/index.js"(exports2, module2) {
+    "use strict";
+    var errcode = require_err_code();
+    var retry = require_retry2();
+    var hasOwn = Object.prototype.hasOwnProperty;
+    function isRetryError(err) {
+      return err && err.code === "EPROMISERETRY" && hasOwn.call(err, "retried");
+    }
+    __name(isRetryError, "isRetryError");
+    function promiseRetry(fn, options) {
+      var temp;
+      var operation;
+      if (typeof fn === "object" && typeof options === "function") {
+        temp = options;
+        options = fn;
+        fn = temp;
+      }
+      operation = retry.operation(options);
+      return new Promise(function(resolve, reject) {
+        operation.attempt(function(number) {
+          Promise.resolve().then(function() {
+            return fn(function(err) {
+              if (isRetryError(err)) {
+                err = err.retried;
+              }
+              throw errcode(new Error("Retrying"), "EPROMISERETRY", { retried: err });
+            }, number);
+          }).then(resolve, function(err) {
+            if (isRetryError(err)) {
+              err = err.retried;
+              if (operation.retry(err || new Error())) {
+                return;
+              }
+            }
+            reject(err);
+          });
+        });
+      });
+    }
+    __name(promiseRetry, "promiseRetry");
+    module2.exports = promiseRetry;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/errors.js
+var require_errors = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/errors.js"(exports2, module2) {
+    var maxRetry = 3;
+    var GitError = class extends Error {
+      static {
+        __name(this, "GitError");
+      }
+      shouldRetry() {
+        return false;
+      }
+    };
+    var GitConnectionError = class extends GitError {
+      static {
+        __name(this, "GitConnectionError");
+      }
+      constructor() {
+        super("A git connection error occurred");
+      }
+      shouldRetry(number) {
+        return number < maxRetry;
+      }
+    };
+    var GitPathspecError = class extends GitError {
+      static {
+        __name(this, "GitPathspecError");
+      }
+      constructor() {
+        super("The git reference could not be found");
+      }
+    };
+    var GitUnknownError = class extends GitError {
+      static {
+        __name(this, "GitUnknownError");
+      }
+      constructor() {
+        super("An unknown git error occurred");
+      }
+    };
+    module2.exports = {
+      GitConnectionError,
+      GitPathspecError,
+      GitUnknownError
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/make-error.js
+var require_make_error = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/make-error.js"(exports2, module2) {
+    var {
+      GitConnectionError,
+      GitPathspecError,
+      GitUnknownError
+    } = require_errors();
+    var connectionErrorRe = new RegExp([
+      "remote error: Internal Server Error",
+      "The remote end hung up unexpectedly",
+      "Connection timed out",
+      "Operation timed out",
+      "Failed to connect to .* Timed out",
+      "Connection reset by peer",
+      "SSL_ERROR_SYSCALL",
+      "The requested URL returned error: 503"
+    ].join("|"));
+    var missingPathspecRe = /pathspec .* did not match any file\(s\) known to git/;
+    function makeError(er) {
+      const message = er.stderr;
+      let gitEr;
+      if (connectionErrorRe.test(message)) {
+        gitEr = new GitConnectionError(message);
+      } else if (missingPathspecRe.test(message)) {
+        gitEr = new GitPathspecError(message);
+      } else {
+        gitEr = new GitUnknownError(message);
+      }
+      return Object.assign(gitEr, er);
+    }
+    __name(makeError, "makeError");
+    module2.exports = makeError;
+  }
+});
+
+// node_modules/.pnpm/ini@5.0.0/node_modules/ini/lib/ini.js
+var require_ini = __commonJS({
+  "node_modules/.pnpm/ini@5.0.0/node_modules/ini/lib/ini.js"(exports2, module2) {
+    var { hasOwnProperty } = Object.prototype;
+    var encode = /* @__PURE__ */ __name((obj, opt = {}) => {
+      if (typeof opt === "string") {
+        opt = { section: opt };
+      }
+      opt.align = opt.align === true;
+      opt.newline = opt.newline === true;
+      opt.sort = opt.sort === true;
+      opt.whitespace = opt.whitespace === true || opt.align === true;
+      opt.platform = opt.platform || typeof process !== "undefined" && process.platform;
+      opt.bracketedArray = opt.bracketedArray !== false;
+      const eol = opt.platform === "win32" ? "\r\n" : "\n";
+      const separator = opt.whitespace ? " = " : "=";
+      const children = [];
+      const keys = opt.sort ? Object.keys(obj).sort() : Object.keys(obj);
+      let padToChars = 0;
+      if (opt.align) {
+        padToChars = safe(
+          keys.filter((k) => obj[k] === null || Array.isArray(obj[k]) || typeof obj[k] !== "object").map((k) => Array.isArray(obj[k]) ? `${k}[]` : k).concat([""]).reduce((a, b) => safe(a).length >= safe(b).length ? a : b)
+        ).length;
+      }
+      let out = "";
+      const arraySuffix = opt.bracketedArray ? "[]" : "";
+      for (const k of keys) {
+        const val = obj[k];
+        if (val && Array.isArray(val)) {
+          for (const item of val) {
+            out += safe(`${k}${arraySuffix}`).padEnd(padToChars, " ") + separator + safe(item) + eol;
+          }
+        } else if (val && typeof val === "object") {
+          children.push(k);
+        } else {
+          out += safe(k).padEnd(padToChars, " ") + separator + safe(val) + eol;
+        }
+      }
+      if (opt.section && out.length) {
+        out = "[" + safe(opt.section) + "]" + (opt.newline ? eol + eol : eol) + out;
+      }
+      for (const k of children) {
+        const nk = splitSections(k, ".").join("\\.");
+        const section = (opt.section ? opt.section + "." : "") + nk;
+        const child = encode(obj[k], {
+          ...opt,
+          section
+        });
+        if (out.length && child.length) {
+          out += eol;
+        }
+        out += child;
+      }
+      return out;
+    }, "encode");
+    function splitSections(str, separator) {
+      var lastMatchIndex = 0;
+      var lastSeparatorIndex = 0;
+      var nextIndex = 0;
+      var sections = [];
+      do {
+        nextIndex = str.indexOf(separator, lastMatchIndex);
+        if (nextIndex !== -1) {
+          lastMatchIndex = nextIndex + separator.length;
+          if (nextIndex > 0 && str[nextIndex - 1] === "\\") {
+            continue;
+          }
+          sections.push(str.slice(lastSeparatorIndex, nextIndex));
+          lastSeparatorIndex = nextIndex + separator.length;
+        }
+      } while (nextIndex !== -1);
+      sections.push(str.slice(lastSeparatorIndex));
+      return sections;
+    }
+    __name(splitSections, "splitSections");
+    var decode = /* @__PURE__ */ __name((str, opt = {}) => {
+      opt.bracketedArray = opt.bracketedArray !== false;
+      const out = /* @__PURE__ */ Object.create(null);
+      let p = out;
+      let section = null;
+      const re = /^\[([^\]]*)\]\s*$|^([^=]+)(=(.*))?$/i;
+      const lines = str.split(/[\r\n]+/g);
+      const duplicates = {};
+      for (const line of lines) {
+        if (!line || line.match(/^\s*[;#]/) || line.match(/^\s*$/)) {
+          continue;
+        }
+        const match = line.match(re);
+        if (!match) {
+          continue;
+        }
+        if (match[1] !== void 0) {
+          section = unsafe(match[1]);
+          if (section === "__proto__") {
+            p = /* @__PURE__ */ Object.create(null);
+            continue;
+          }
+          p = out[section] = out[section] || /* @__PURE__ */ Object.create(null);
+          continue;
+        }
+        const keyRaw = unsafe(match[2]);
+        let isArray;
+        if (opt.bracketedArray) {
+          isArray = keyRaw.length > 2 && keyRaw.slice(-2) === "[]";
+        } else {
+          duplicates[keyRaw] = (duplicates?.[keyRaw] || 0) + 1;
+          isArray = duplicates[keyRaw] > 1;
+        }
+        const key = isArray && keyRaw.endsWith("[]") ? keyRaw.slice(0, -2) : keyRaw;
+        if (key === "__proto__") {
+          continue;
+        }
+        const valueRaw = match[3] ? unsafe(match[4]) : true;
+        const value = valueRaw === "true" || valueRaw === "false" || valueRaw === "null" ? JSON.parse(valueRaw) : valueRaw;
+        if (isArray) {
+          if (!hasOwnProperty.call(p, key)) {
+            p[key] = [];
+          } else if (!Array.isArray(p[key])) {
+            p[key] = [p[key]];
+          }
+        }
+        if (Array.isArray(p[key])) {
+          p[key].push(value);
+        } else {
+          p[key] = value;
+        }
+      }
+      const remove = [];
+      for (const k of Object.keys(out)) {
+        if (!hasOwnProperty.call(out, k) || typeof out[k] !== "object" || Array.isArray(out[k])) {
+          continue;
+        }
+        const parts = splitSections(k, ".");
+        p = out;
+        const l = parts.pop();
+        const nl = l.replace(/\\\./g, ".");
+        for (const part of parts) {
+          if (part === "__proto__") {
+            continue;
+          }
+          if (!hasOwnProperty.call(p, part) || typeof p[part] !== "object") {
+            p[part] = /* @__PURE__ */ Object.create(null);
+          }
+          p = p[part];
+        }
+        if (p === out && nl === l) {
+          continue;
+        }
+        p[nl] = out[k];
+        remove.push(k);
+      }
+      for (const del of remove) {
+        delete out[del];
+      }
+      return out;
+    }, "decode");
+    var isQuoted = /* @__PURE__ */ __name((val) => {
+      return val.startsWith('"') && val.endsWith('"') || val.startsWith("'") && val.endsWith("'");
+    }, "isQuoted");
+    var safe = /* @__PURE__ */ __name((val) => {
+      if (typeof val !== "string" || val.match(/[=\r\n]/) || val.match(/^\[/) || val.length > 1 && isQuoted(val) || val !== val.trim()) {
+        return JSON.stringify(val);
+      }
+      return val.split(";").join("\\;").split("#").join("\\#");
+    }, "safe");
+    var unsafe = /* @__PURE__ */ __name((val) => {
+      val = (val || "").trim();
+      if (isQuoted(val)) {
+        if (val.charAt(0) === "'") {
+          val = val.slice(1, -1);
+        }
+        try {
+          val = JSON.parse(val);
+        } catch {
+        }
+      } else {
+        let esc = false;
+        let unesc = "";
+        for (let i = 0, l = val.length; i < l; i++) {
+          const c = val.charAt(i);
+          if (esc) {
+            if ("\\;#".indexOf(c) !== -1) {
+              unesc += c;
+            } else {
+              unesc += "\\" + c;
+            }
+            esc = false;
+          } else if (";#".indexOf(c) !== -1) {
+            break;
+          } else if (c === "\\") {
+            esc = true;
+          } else {
+            unesc += c;
+          }
+        }
+        if (esc) {
+          unesc += "\\";
+        }
+        return unesc.trim();
+      }
+      return val;
+    }, "unsafe");
+    module2.exports = {
+      parse: decode,
+      decode,
+      stringify: encode,
+      encode,
+      safe,
+      unsafe
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/opts.js
+var require_opts = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/opts.js"(exports2, module2) {
+    var fs = require("node:fs");
+    var os2 = require("node:os");
+    var path = require("node:path");
+    var ini = require_ini();
+    var gitConfigPath = path.join(os2.homedir(), ".gitconfig");
+    var cachedConfig = null;
+    var loadGitConfig = /* @__PURE__ */ __name(() => {
+      if (cachedConfig === null) {
+        try {
+          cachedConfig = {};
+          if (fs.existsSync(gitConfigPath)) {
+            const configContent = fs.readFileSync(gitConfigPath, "utf-8");
+            cachedConfig = ini.parse(configContent);
+          }
+        } catch (error) {
+          cachedConfig = {};
+        }
+      }
+      return cachedConfig;
+    }, "loadGitConfig");
+    var checkGitConfigs = /* @__PURE__ */ __name(() => {
+      const config = loadGitConfig();
+      return {
+        sshCommandSetInConfig: config?.core?.sshCommand !== void 0,
+        askPassSetInConfig: config?.core?.askpass !== void 0
+      };
+    }, "checkGitConfigs");
+    var sshCommandSetInEnv = process.env.GIT_SSH_COMMAND !== void 0;
+    var askPassSetInEnv = process.env.GIT_ASKPASS !== void 0;
+    var { sshCommandSetInConfig, askPassSetInConfig } = checkGitConfigs();
+    var finalGitEnv = {
+      ...askPassSetInEnv || askPassSetInConfig ? {} : {
+        GIT_ASKPASS: "echo"
+      },
+      ...sshCommandSetInEnv || sshCommandSetInConfig ? {} : {
+        GIT_SSH_COMMAND: "ssh -oStrictHostKeyChecking=accept-new"
+      }
+    };
+    module2.exports = (opts = {}) => ({
+      stdioString: true,
+      ...opts,
+      shell: false,
+      env: opts.env || { ...finalGitEnv, ...process.env }
+    });
+    module2.exports.loadGitConfig = loadGitConfig;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/which.js
+var require_which = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/which.js"(exports2, module2) {
+    var which = require_lib4();
+    var gitPath;
+    try {
+      gitPath = which.sync("git");
+    } catch {
+    }
+    module2.exports = (opts = {}) => {
+      if (opts.git) {
+        return opts.git;
+      }
+      if (!gitPath || opts.git === false) {
+        return Object.assign(new Error("No git binary found in $PATH"), { code: "ENOGIT" });
+      }
+      return gitPath;
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/spawn.js
+var require_spawn = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/spawn.js"(exports2, module2) {
+    var spawn = require_lib5();
+    var promiseRetry = require_promise_retry();
+    var { log } = require_lib2();
+    var makeError = require_make_error();
+    var makeOpts = require_opts();
+    module2.exports = (gitArgs, opts = {}) => {
+      const whichGit = require_which();
+      const gitPath = whichGit(opts);
+      if (gitPath instanceof Error) {
+        return Promise.reject(gitPath);
+      }
+      const args = opts.allowReplace || gitArgs[0] === "--no-replace-objects" ? gitArgs : ["--no-replace-objects", ...gitArgs];
+      let retryOpts = opts.retry;
+      if (retryOpts === null || retryOpts === void 0) {
+        retryOpts = {
+          retries: opts.fetchRetries || 2,
+          factor: opts.fetchRetryFactor || 10,
+          maxTimeout: opts.fetchRetryMaxtimeout || 6e4,
+          minTimeout: opts.fetchRetryMintimeout || 1e3
+        };
+      }
+      return promiseRetry((retryFn, number) => {
+        if (number !== 1) {
+          log.silly("git", `Retrying git command: ${args.join(" ")} attempt # ${number}`);
+        }
+        return spawn(gitPath, args, makeOpts(opts)).catch((er) => {
+          const gitError = makeError(er);
+          if (!gitError.shouldRetry(number)) {
+            throw gitError;
+          }
+          retryFn(gitError);
+        });
+      }, retryOpts);
+    };
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/inc.js
+var require_inc = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/inc.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var inc = /* @__PURE__ */ __name((version, release, options, identifier, identifierBase) => {
+      if (typeof options === "string") {
+        identifierBase = identifier;
+        identifier = options;
+        options = void 0;
+      }
+      try {
+        return new SemVer(
+          version instanceof SemVer ? version.version : version,
+          options
+        ).inc(release, identifier, identifierBase).version;
+      } catch (er) {
+        return null;
+      }
+    }, "inc");
+    module2.exports = inc;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/diff.js
+var require_diff = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/diff.js"(exports2, module2) {
+    "use strict";
+    var parse = require_parse();
+    var diff = /* @__PURE__ */ __name((version1, version2) => {
+      const v1 = parse(version1, null, true);
+      const v2 = parse(version2, null, true);
+      const comparison = v1.compare(v2);
+      if (comparison === 0) {
+        return null;
+      }
+      const v1Higher = comparison > 0;
+      const highVersion = v1Higher ? v1 : v2;
+      const lowVersion = v1Higher ? v2 : v1;
+      const highHasPre = !!highVersion.prerelease.length;
+      const lowHasPre = !!lowVersion.prerelease.length;
+      if (lowHasPre && !highHasPre) {
+        if (!lowVersion.patch && !lowVersion.minor) {
+          return "major";
+        }
+        if (lowVersion.compareMain(highVersion) === 0) {
+          if (lowVersion.minor && !lowVersion.patch) {
+            return "minor";
+          }
+          return "patch";
+        }
+      }
+      const prefix = highHasPre ? "pre" : "";
+      if (v1.major !== v2.major) {
+        return prefix + "major";
+      }
+      if (v1.minor !== v2.minor) {
+        return prefix + "minor";
+      }
+      if (v1.patch !== v2.patch) {
+        return prefix + "patch";
+      }
+      return "prerelease";
+    }, "diff");
+    module2.exports = diff;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/major.js
+var require_major = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/major.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var major = /* @__PURE__ */ __name((a, loose) => new SemVer(a, loose).major, "major");
+    module2.exports = major;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/minor.js
+var require_minor = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/minor.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var minor = /* @__PURE__ */ __name((a, loose) => new SemVer(a, loose).minor, "minor");
+    module2.exports = minor;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/patch.js
+var require_patch = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/patch.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var patch = /* @__PURE__ */ __name((a, loose) => new SemVer(a, loose).patch, "patch");
+    module2.exports = patch;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/prerelease.js
+var require_prerelease = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/prerelease.js"(exports2, module2) {
+    "use strict";
+    var parse = require_parse();
+    var prerelease = /* @__PURE__ */ __name((version, options) => {
+      const parsed = parse(version, options);
+      return parsed && parsed.prerelease.length ? parsed.prerelease : null;
+    }, "prerelease");
+    module2.exports = prerelease;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare.js
+var require_compare = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var compare = /* @__PURE__ */ __name((a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose)), "compare");
+    module2.exports = compare;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rcompare.js
+var require_rcompare = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rcompare.js"(exports2, module2) {
+    "use strict";
+    var compare = require_compare();
+    var rcompare = /* @__PURE__ */ __name((a, b, loose) => compare(b, a, loose), "rcompare");
+    module2.exports = rcompare;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-loose.js
+var require_compare_loose = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-loose.js"(exports2, module2) {
+    "use strict";
+    var compare = require_compare();
+    var compareLoose = /* @__PURE__ */ __name((a, b) => compare(a, b, true), "compareLoose");
+    module2.exports = compareLoose;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-build.js
+var require_compare_build = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-build.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var compareBuild = /* @__PURE__ */ __name((a, b, loose) => {
+      const versionA = new SemVer(a, loose);
+      const versionB = new SemVer(b, loose);
+      return versionA.compare(versionB) || versionA.compareBuild(versionB);
+    }, "compareBuild");
+    module2.exports = compareBuild;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/sort.js
+var require_sort = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/sort.js"(exports2, module2) {
+    "use strict";
+    var compareBuild = require_compare_build();
+    var sort = /* @__PURE__ */ __name((list, loose) => list.sort((a, b) => compareBuild(a, b, loose)), "sort");
+    module2.exports = sort;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rsort.js
+var require_rsort = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rsort.js"(exports2, module2) {
+    "use strict";
+    var compareBuild = require_compare_build();
+    var rsort = /* @__PURE__ */ __name((list, loose) => list.sort((a, b) => compareBuild(b, a, loose)), "rsort");
+    module2.exports = rsort;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gt.js
+var require_gt = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gt.js"(exports2, module2) {
+    "use strict";
+    var compare = require_compare();
+    var gt = /* @__PURE__ */ __name((a, b, loose) => compare(a, b, loose) > 0, "gt");
+    module2.exports = gt;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lt.js
+var require_lt = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lt.js"(exports2, module2) {
+    "use strict";
+    var compare = require_compare();
+    var lt = /* @__PURE__ */ __name((a, b, loose) => compare(a, b, loose) < 0, "lt");
+    module2.exports = lt;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/eq.js
+var require_eq = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/eq.js"(exports2, module2) {
+    "use strict";
+    var compare = require_compare();
+    var eq = /* @__PURE__ */ __name((a, b, loose) => compare(a, b, loose) === 0, "eq");
+    module2.exports = eq;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/neq.js
+var require_neq = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/neq.js"(exports2, module2) {
+    "use strict";
+    var compare = require_compare();
+    var neq = /* @__PURE__ */ __name((a, b, loose) => compare(a, b, loose) !== 0, "neq");
+    module2.exports = neq;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gte.js
+var require_gte = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gte.js"(exports2, module2) {
+    "use strict";
+    var compare = require_compare();
+    var gte = /* @__PURE__ */ __name((a, b, loose) => compare(a, b, loose) >= 0, "gte");
+    module2.exports = gte;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lte.js
+var require_lte = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lte.js"(exports2, module2) {
+    "use strict";
+    var compare = require_compare();
+    var lte = /* @__PURE__ */ __name((a, b, loose) => compare(a, b, loose) <= 0, "lte");
+    module2.exports = lte;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/cmp.js
+var require_cmp = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/cmp.js"(exports2, module2) {
+    "use strict";
+    var eq = require_eq();
+    var neq = require_neq();
+    var gt = require_gt();
+    var gte = require_gte();
+    var lt = require_lt();
+    var lte = require_lte();
+    var cmp = /* @__PURE__ */ __name((a, op, b, loose) => {
+      switch (op) {
+        case "===":
+          if (typeof a === "object") {
+            a = a.version;
+          }
+          if (typeof b === "object") {
+            b = b.version;
+          }
+          return a === b;
+        case "!==":
+          if (typeof a === "object") {
+            a = a.version;
+          }
+          if (typeof b === "object") {
+            b = b.version;
+          }
+          return a !== b;
+        case "":
+        case "=":
+        case "==":
+          return eq(a, b, loose);
+        case "!=":
+          return neq(a, b, loose);
+        case ">":
+          return gt(a, b, loose);
+        case ">=":
+          return gte(a, b, loose);
+        case "<":
+          return lt(a, b, loose);
+        case "<=":
+          return lte(a, b, loose);
+        default:
+          throw new TypeError(`Invalid operator: ${op}`);
+      }
+    }, "cmp");
+    module2.exports = cmp;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/coerce.js
+var require_coerce = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/coerce.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var parse = require_parse();
+    var { safeRe: re, t } = require_re();
+    var coerce = /* @__PURE__ */ __name((version, options) => {
+      if (version instanceof SemVer) {
+        return version;
+      }
+      if (typeof version === "number") {
+        version = String(version);
+      }
+      if (typeof version !== "string") {
+        return null;
+      }
+      options = options || {};
+      let match = null;
+      if (!options.rtl) {
+        match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE]);
+      } else {
+        const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL];
+        let next;
+        while ((next = coerceRtlRegex.exec(version)) && (!match || match.index + match[0].length !== version.length)) {
+          if (!match || next.index + next[0].length !== match.index + match[0].length) {
+            match = next;
+          }
+          coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length;
+        }
+        coerceRtlRegex.lastIndex = -1;
+      }
+      if (match === null) {
+        return null;
+      }
+      const major = match[2];
+      const minor = match[3] || "0";
+      const patch = match[4] || "0";
+      const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : "";
+      const build = options.includePrerelease && match[6] ? `+${match[6]}` : "";
+      return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options);
+    }, "coerce");
+    module2.exports = coerce;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/lrucache.js
+var require_lrucache = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/lrucache.js"(exports2, module2) {
+    "use strict";
+    var LRUCache = class {
+      static {
+        __name(this, "LRUCache");
+      }
+      constructor() {
+        this.max = 1e3;
+        this.map = /* @__PURE__ */ new Map();
+      }
+      get(key) {
+        const value = this.map.get(key);
+        if (value === void 0) {
+          return void 0;
+        } else {
+          this.map.delete(key);
+          this.map.set(key, value);
+          return value;
+        }
+      }
+      delete(key) {
+        return this.map.delete(key);
+      }
+      set(key, value) {
+        const deleted = this.delete(key);
+        if (!deleted && value !== void 0) {
+          if (this.map.size >= this.max) {
+            const firstKey = this.map.keys().next().value;
+            this.delete(firstKey);
+          }
+          this.map.set(key, value);
+        }
+        return this;
+      }
+    };
+    module2.exports = LRUCache;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/range.js
+var require_range = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/range.js"(exports2, module2) {
+    "use strict";
+    var SPACE_CHARACTERS = /\s+/g;
+    var Range = class _Range {
+      static {
+        __name(this, "Range");
+      }
+      constructor(range, options) {
+        options = parseOptions(options);
+        if (range instanceof _Range) {
+          if (range.loose === !!options.loose && range.includePrerelease === !!options.includePrerelease) {
+            return range;
+          } else {
+            return new _Range(range.raw, options);
+          }
+        }
+        if (range instanceof Comparator) {
+          this.raw = range.value;
+          this.set = [[range]];
+          this.formatted = void 0;
+          return this;
+        }
+        this.options = options;
+        this.loose = !!options.loose;
+        this.includePrerelease = !!options.includePrerelease;
+        this.raw = range.trim().replace(SPACE_CHARACTERS, " ");
+        this.set = this.raw.split("||").map((r) => this.parseRange(r.trim())).filter((c) => c.length);
+        if (!this.set.length) {
+          throw new TypeError(`Invalid SemVer Range: ${this.raw}`);
+        }
+        if (this.set.length > 1) {
+          const first = this.set[0];
+          this.set = this.set.filter((c) => !isNullSet(c[0]));
+          if (this.set.length === 0) {
+            this.set = [first];
+          } else if (this.set.length > 1) {
+            for (const c of this.set) {
+              if (c.length === 1 && isAny(c[0])) {
+                this.set = [c];
+                break;
+              }
+            }
+          }
+        }
+        this.formatted = void 0;
+      }
+      get range() {
+        if (this.formatted === void 0) {
+          this.formatted = "";
+          for (let i = 0; i < this.set.length; i++) {
+            if (i > 0) {
+              this.formatted += "||";
+            }
+            const comps = this.set[i];
+            for (let k = 0; k < comps.length; k++) {
+              if (k > 0) {
+                this.formatted += " ";
+              }
+              this.formatted += comps[k].toString().trim();
+            }
+          }
+        }
+        return this.formatted;
+      }
+      format() {
+        return this.range;
+      }
+      toString() {
+        return this.range;
+      }
+      parseRange(range) {
+        const memoOpts = (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) | (this.options.loose && FLAG_LOOSE);
+        const memoKey = memoOpts + ":" + range;
+        const cached = cache.get(memoKey);
+        if (cached) {
+          return cached;
+        }
+        const loose = this.options.loose;
+        const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE];
+        range = range.replace(hr, hyphenReplace(this.options.includePrerelease));
+        debug("hyphen replace", range);
+        range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace);
+        debug("comparator trim", range);
+        range = range.replace(re[t.TILDETRIM], tildeTrimReplace);
+        debug("tilde trim", range);
+        range = range.replace(re[t.CARETTRIM], caretTrimReplace);
+        debug("caret trim", range);
+        let rangeList = range.split(" ").map((comp) => parseComparator(comp, this.options)).join(" ").split(/\s+/).map((comp) => replaceGTE0(comp, this.options));
+        if (loose) {
+          rangeList = rangeList.filter((comp) => {
+            debug("loose invalid filter", comp, this.options);
+            return !!comp.match(re[t.COMPARATORLOOSE]);
+          });
+        }
+        debug("range list", rangeList);
+        const rangeMap = /* @__PURE__ */ new Map();
+        const comparators = rangeList.map((comp) => new Comparator(comp, this.options));
+        for (const comp of comparators) {
+          if (isNullSet(comp)) {
+            return [comp];
+          }
+          rangeMap.set(comp.value, comp);
+        }
+        if (rangeMap.size > 1 && rangeMap.has("")) {
+          rangeMap.delete("");
+        }
+        const result = [...rangeMap.values()];
+        cache.set(memoKey, result);
+        return result;
+      }
+      intersects(range, options) {
+        if (!(range instanceof _Range)) {
+          throw new TypeError("a Range is required");
+        }
+        return this.set.some((thisComparators) => {
+          return isSatisfiable(thisComparators, options) && range.set.some((rangeComparators) => {
+            return isSatisfiable(rangeComparators, options) && thisComparators.every((thisComparator) => {
+              return rangeComparators.every((rangeComparator) => {
+                return thisComparator.intersects(rangeComparator, options);
+              });
+            });
+          });
+        });
+      }
+      // if ANY of the sets match ALL of its comparators, then pass
+      test(version) {
+        if (!version) {
+          return false;
+        }
+        if (typeof version === "string") {
+          try {
+            version = new SemVer(version, this.options);
+          } catch (er) {
+            return false;
+          }
+        }
+        for (let i = 0; i < this.set.length; i++) {
+          if (testSet(this.set[i], version, this.options)) {
+            return true;
+          }
+        }
+        return false;
+      }
+    };
+    module2.exports = Range;
+    var LRU = require_lrucache();
+    var cache = new LRU();
+    var parseOptions = require_parse_options();
+    var Comparator = require_comparator();
+    var debug = require_debug();
+    var SemVer = require_semver();
+    var {
+      safeRe: re,
+      t,
+      comparatorTrimReplace,
+      tildeTrimReplace,
+      caretTrimReplace
+    } = require_re();
+    var { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require_constants();
+    var isNullSet = /* @__PURE__ */ __name((c) => c.value === "<0.0.0-0", "isNullSet");
+    var isAny = /* @__PURE__ */ __name((c) => c.value === "", "isAny");
+    var isSatisfiable = /* @__PURE__ */ __name((comparators, options) => {
+      let result = true;
+      const remainingComparators = comparators.slice();
+      let testComparator = remainingComparators.pop();
+      while (result && remainingComparators.length) {
+        result = remainingComparators.every((otherComparator) => {
+          return testComparator.intersects(otherComparator, options);
+        });
+        testComparator = remainingComparators.pop();
+      }
+      return result;
+    }, "isSatisfiable");
+    var parseComparator = /* @__PURE__ */ __name((comp, options) => {
+      debug("comp", comp, options);
+      comp = replaceCarets(comp, options);
+      debug("caret", comp);
+      comp = replaceTildes(comp, options);
+      debug("tildes", comp);
+      comp = replaceXRanges(comp, options);
+      debug("xrange", comp);
+      comp = replaceStars(comp, options);
+      debug("stars", comp);
+      return comp;
+    }, "parseComparator");
+    var isX = /* @__PURE__ */ __name((id) => !id || id.toLowerCase() === "x" || id === "*", "isX");
+    var replaceTildes = /* @__PURE__ */ __name((comp, options) => {
+      return comp.trim().split(/\s+/).map((c) => replaceTilde(c, options)).join(" ");
+    }, "replaceTildes");
+    var replaceTilde = /* @__PURE__ */ __name((comp, options) => {
+      const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE];
+      return comp.replace(r, (_, M, m, p, pr) => {
+        debug("tilde", comp, _, M, m, p, pr);
+        let ret;
+        if (isX(M)) {
+          ret = "";
+        } else if (isX(m)) {
+          ret = `>=${M}.0.0 <${+M + 1}.0.0-0`;
+        } else if (isX(p)) {
+          ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`;
+        } else if (pr) {
+          debug("replaceTilde pr", pr);
+          ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;
+        } else {
+          ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`;
+        }
+        debug("tilde return", ret);
+        return ret;
+      });
+    }, "replaceTilde");
+    var replaceCarets = /* @__PURE__ */ __name((comp, options) => {
+      return comp.trim().split(/\s+/).map((c) => replaceCaret(c, options)).join(" ");
+    }, "replaceCarets");
+    var replaceCaret = /* @__PURE__ */ __name((comp, options) => {
+      debug("caret", comp, options);
+      const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET];
+      const z = options.includePrerelease ? "-0" : "";
+      return comp.replace(r, (_, M, m, p, pr) => {
+        debug("caret", comp, _, M, m, p, pr);
+        let ret;
+        if (isX(M)) {
+          ret = "";
+        } else if (isX(m)) {
+          ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`;
+        } else if (isX(p)) {
+          if (M === "0") {
+            ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`;
+          } else {
+            ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`;
+          }
+        } else if (pr) {
+          debug("replaceCaret pr", pr);
+          if (M === "0") {
+            if (m === "0") {
+              ret = `>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p + 1}-0`;
+            } else {
+              ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;
+            }
+          } else {
+            ret = `>=${M}.${m}.${p}-${pr} <${+M + 1}.0.0-0`;
+          }
+        } else {
+          debug("no pr");
+          if (M === "0") {
+            if (m === "0") {
+              ret = `>=${M}.${m}.${p}${z} <${M}.${m}.${+p + 1}-0`;
+            } else {
+              ret = `>=${M}.${m}.${p}${z} <${M}.${+m + 1}.0-0`;
+            }
+          } else {
+            ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`;
+          }
+        }
+        debug("caret return", ret);
+        return ret;
+      });
+    }, "replaceCaret");
+    var replaceXRanges = /* @__PURE__ */ __name((comp, options) => {
+      debug("replaceXRanges", comp, options);
+      return comp.split(/\s+/).map((c) => replaceXRange(c, options)).join(" ");
+    }, "replaceXRanges");
+    var replaceXRange = /* @__PURE__ */ __name((comp, options) => {
+      comp = comp.trim();
+      const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE];
+      return comp.replace(r, (ret, gtlt, M, m, p, pr) => {
+        debug("xRange", comp, ret, gtlt, M, m, p, pr);
+        const xM = isX(M);
+        const xm = xM || isX(m);
+        const xp = xm || isX(p);
+        const anyX = xp;
+        if (gtlt === "=" && anyX) {
+          gtlt = "";
+        }
+        pr = options.includePrerelease ? "-0" : "";
+        if (xM) {
+          if (gtlt === ">" || gtlt === "<") {
+            ret = "<0.0.0-0";
+          } else {
+            ret = "*";
+          }
+        } else if (gtlt && anyX) {
+          if (xm) {
+            m = 0;
+          }
+          p = 0;
+          if (gtlt === ">") {
+            gtlt = ">=";
+            if (xm) {
+              M = +M + 1;
+              m = 0;
+              p = 0;
+            } else {
+              m = +m + 1;
+              p = 0;
+            }
+          } else if (gtlt === "<=") {
+            gtlt = "<";
+            if (xm) {
+              M = +M + 1;
+            } else {
+              m = +m + 1;
+            }
+          }
+          if (gtlt === "<") {
+            pr = "-0";
+          }
+          ret = `${gtlt + M}.${m}.${p}${pr}`;
+        } else if (xm) {
+          ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`;
+        } else if (xp) {
+          ret = `>=${M}.${m}.0${pr} <${M}.${+m + 1}.0-0`;
+        }
+        debug("xRange return", ret);
+        return ret;
+      });
+    }, "replaceXRange");
+    var replaceStars = /* @__PURE__ */ __name((comp, options) => {
+      debug("replaceStars", comp, options);
+      return comp.trim().replace(re[t.STAR], "");
+    }, "replaceStars");
+    var replaceGTE0 = /* @__PURE__ */ __name((comp, options) => {
+      debug("replaceGTE0", comp, options);
+      return comp.trim().replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], "");
+    }, "replaceGTE0");
+    var hyphenReplace = /* @__PURE__ */ __name((incPr) => ($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr) => {
+      if (isX(fM)) {
+        from = "";
+      } else if (isX(fm)) {
+        from = `>=${fM}.0.0${incPr ? "-0" : ""}`;
+      } else if (isX(fp)) {
+        from = `>=${fM}.${fm}.0${incPr ? "-0" : ""}`;
+      } else if (fpr) {
+        from = `>=${from}`;
+      } else {
+        from = `>=${from}${incPr ? "-0" : ""}`;
+      }
+      if (isX(tM)) {
+        to = "";
+      } else if (isX(tm)) {
+        to = `<${+tM + 1}.0.0-0`;
+      } else if (isX(tp)) {
+        to = `<${tM}.${+tm + 1}.0-0`;
+      } else if (tpr) {
+        to = `<=${tM}.${tm}.${tp}-${tpr}`;
+      } else if (incPr) {
+        to = `<${tM}.${tm}.${+tp + 1}-0`;
+      } else {
+        to = `<=${to}`;
+      }
+      return `${from} ${to}`.trim();
+    }, "hyphenReplace");
+    var testSet = /* @__PURE__ */ __name((set, version, options) => {
+      for (let i = 0; i < set.length; i++) {
+        if (!set[i].test(version)) {
+          return false;
+        }
+      }
+      if (version.prerelease.length && !options.includePrerelease) {
+        for (let i = 0; i < set.length; i++) {
+          debug(set[i].semver);
+          if (set[i].semver === Comparator.ANY) {
+            continue;
+          }
+          if (set[i].semver.prerelease.length > 0) {
+            const allowed = set[i].semver;
+            if (allowed.major === version.major && allowed.minor === version.minor && allowed.patch === version.patch) {
+              return true;
+            }
+          }
+        }
+        return false;
+      }
+      return true;
+    }, "testSet");
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/comparator.js
+var require_comparator = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/comparator.js"(exports2, module2) {
+    "use strict";
+    var ANY = Symbol("SemVer ANY");
+    var Comparator = class _Comparator {
+      static {
+        __name(this, "Comparator");
+      }
+      static get ANY() {
+        return ANY;
+      }
+      constructor(comp, options) {
+        options = parseOptions(options);
+        if (comp instanceof _Comparator) {
+          if (comp.loose === !!options.loose) {
+            return comp;
+          } else {
+            comp = comp.value;
+          }
+        }
+        comp = comp.trim().split(/\s+/).join(" ");
+        debug("comparator", comp, options);
+        this.options = options;
+        this.loose = !!options.loose;
+        this.parse(comp);
+        if (this.semver === ANY) {
+          this.value = "";
+        } else {
+          this.value = this.operator + this.semver.version;
+        }
+        debug("comp", this);
+      }
+      parse(comp) {
+        const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR];
+        const m = comp.match(r);
+        if (!m) {
+          throw new TypeError(`Invalid comparator: ${comp}`);
+        }
+        this.operator = m[1] !== void 0 ? m[1] : "";
+        if (this.operator === "=") {
+          this.operator = "";
+        }
+        if (!m[2]) {
+          this.semver = ANY;
+        } else {
+          this.semver = new SemVer(m[2], this.options.loose);
+        }
+      }
+      toString() {
+        return this.value;
+      }
+      test(version) {
+        debug("Comparator.test", version, this.options.loose);
+        if (this.semver === ANY || version === ANY) {
+          return true;
+        }
+        if (typeof version === "string") {
+          try {
+            version = new SemVer(version, this.options);
+          } catch (er) {
+            return false;
+          }
+        }
+        return cmp(version, this.operator, this.semver, this.options);
+      }
+      intersects(comp, options) {
+        if (!(comp instanceof _Comparator)) {
+          throw new TypeError("a Comparator is required");
+        }
+        if (this.operator === "") {
+          if (this.value === "") {
+            return true;
+          }
+          return new Range(comp.value, options).test(this.value);
+        } else if (comp.operator === "") {
+          if (comp.value === "") {
+            return true;
+          }
+          return new Range(this.value, options).test(comp.semver);
+        }
+        options = parseOptions(options);
+        if (options.includePrerelease && (this.value === "<0.0.0-0" || comp.value === "<0.0.0-0")) {
+          return false;
+        }
+        if (!options.includePrerelease && (this.value.startsWith("<0.0.0") || comp.value.startsWith("<0.0.0"))) {
+          return false;
+        }
+        if (this.operator.startsWith(">") && comp.operator.startsWith(">")) {
+          return true;
+        }
+        if (this.operator.startsWith("<") && comp.operator.startsWith("<")) {
+          return true;
+        }
+        if (this.semver.version === comp.semver.version && this.operator.includes("=") && comp.operator.includes("=")) {
+          return true;
+        }
+        if (cmp(this.semver, "<", comp.semver, options) && this.operator.startsWith(">") && comp.operator.startsWith("<")) {
+          return true;
+        }
+        if (cmp(this.semver, ">", comp.semver, options) && this.operator.startsWith("<") && comp.operator.startsWith(">")) {
+          return true;
+        }
+        return false;
+      }
+    };
+    module2.exports = Comparator;
+    var parseOptions = require_parse_options();
+    var { safeRe: re, t } = require_re();
+    var cmp = require_cmp();
+    var debug = require_debug();
+    var SemVer = require_semver();
+    var Range = require_range();
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/satisfies.js
+var require_satisfies = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/satisfies.js"(exports2, module2) {
+    "use strict";
+    var Range = require_range();
+    var satisfies = /* @__PURE__ */ __name((version, range, options) => {
+      try {
+        range = new Range(range, options);
+      } catch (er) {
+        return false;
+      }
+      return range.test(version);
+    }, "satisfies");
+    module2.exports = satisfies;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/to-comparators.js
+var require_to_comparators = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/to-comparators.js"(exports2, module2) {
+    "use strict";
+    var Range = require_range();
+    var toComparators = /* @__PURE__ */ __name((range, options) => new Range(range, options).set.map((comp) => comp.map((c) => c.value).join(" ").trim().split(" ")), "toComparators");
+    module2.exports = toComparators;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/max-satisfying.js
+var require_max_satisfying = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/max-satisfying.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var Range = require_range();
+    var maxSatisfying = /* @__PURE__ */ __name((versions, range, options) => {
+      let max = null;
+      let maxSV = null;
+      let rangeObj = null;
+      try {
+        rangeObj = new Range(range, options);
+      } catch (er) {
+        return null;
+      }
+      versions.forEach((v) => {
+        if (rangeObj.test(v)) {
+          if (!max || maxSV.compare(v) === -1) {
+            max = v;
+            maxSV = new SemVer(max, options);
+          }
+        }
+      });
+      return max;
+    }, "maxSatisfying");
+    module2.exports = maxSatisfying;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-satisfying.js
+var require_min_satisfying = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-satisfying.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var Range = require_range();
+    var minSatisfying = /* @__PURE__ */ __name((versions, range, options) => {
+      let min = null;
+      let minSV = null;
+      let rangeObj = null;
+      try {
+        rangeObj = new Range(range, options);
+      } catch (er) {
+        return null;
+      }
+      versions.forEach((v) => {
+        if (rangeObj.test(v)) {
+          if (!min || minSV.compare(v) === 1) {
+            min = v;
+            minSV = new SemVer(min, options);
+          }
+        }
+      });
+      return min;
+    }, "minSatisfying");
+    module2.exports = minSatisfying;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-version.js
+var require_min_version = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-version.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var Range = require_range();
+    var gt = require_gt();
+    var minVersion = /* @__PURE__ */ __name((range, loose) => {
+      range = new Range(range, loose);
+      let minver = new SemVer("0.0.0");
+      if (range.test(minver)) {
+        return minver;
+      }
+      minver = new SemVer("0.0.0-0");
+      if (range.test(minver)) {
+        return minver;
+      }
+      minver = null;
+      for (let i = 0; i < range.set.length; ++i) {
+        const comparators = range.set[i];
+        let setMin = null;
+        comparators.forEach((comparator) => {
+          const compver = new SemVer(comparator.semver.version);
+          switch (comparator.operator) {
+            case ">":
+              if (compver.prerelease.length === 0) {
+                compver.patch++;
+              } else {
+                compver.prerelease.push(0);
+              }
+              compver.raw = compver.format();
+            /* fallthrough */
+            case "":
+            case ">=":
+              if (!setMin || gt(compver, setMin)) {
+                setMin = compver;
+              }
+              break;
+            case "<":
+            case "<=":
+              break;
+            /* istanbul ignore next */
+            default:
+              throw new Error(`Unexpected operation: ${comparator.operator}`);
+          }
+        });
+        if (setMin && (!minver || gt(minver, setMin))) {
+          minver = setMin;
+        }
+      }
+      if (minver && range.test(minver)) {
+        return minver;
+      }
+      return null;
+    }, "minVersion");
+    module2.exports = minVersion;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/valid.js
+var require_valid2 = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/valid.js"(exports2, module2) {
+    "use strict";
+    var Range = require_range();
+    var validRange = /* @__PURE__ */ __name((range, options) => {
+      try {
+        return new Range(range, options).range || "*";
+      } catch (er) {
+        return null;
+      }
+    }, "validRange");
+    module2.exports = validRange;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/outside.js
+var require_outside = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/outside.js"(exports2, module2) {
+    "use strict";
+    var SemVer = require_semver();
+    var Comparator = require_comparator();
+    var { ANY } = Comparator;
+    var Range = require_range();
+    var satisfies = require_satisfies();
+    var gt = require_gt();
+    var lt = require_lt();
+    var lte = require_lte();
+    var gte = require_gte();
+    var outside = /* @__PURE__ */ __name((version, range, hilo, options) => {
+      version = new SemVer(version, options);
+      range = new Range(range, options);
+      let gtfn, ltefn, ltfn, comp, ecomp;
+      switch (hilo) {
+        case ">":
+          gtfn = gt;
+          ltefn = lte;
+          ltfn = lt;
+          comp = ">";
+          ecomp = ">=";
+          break;
+        case "<":
+          gtfn = lt;
+          ltefn = gte;
+          ltfn = gt;
+          comp = "<";
+          ecomp = "<=";
+          break;
+        default:
+          throw new TypeError('Must provide a hilo val of "<" or ">"');
+      }
+      if (satisfies(version, range, options)) {
+        return false;
+      }
+      for (let i = 0; i < range.set.length; ++i) {
+        const comparators = range.set[i];
+        let high = null;
+        let low = null;
+        comparators.forEach((comparator) => {
+          if (comparator.semver === ANY) {
+            comparator = new Comparator(">=0.0.0");
+          }
+          high = high || comparator;
+          low = low || comparator;
+          if (gtfn(comparator.semver, high.semver, options)) {
+            high = comparator;
+          } else if (ltfn(comparator.semver, low.semver, options)) {
+            low = comparator;
+          }
+        });
+        if (high.operator === comp || high.operator === ecomp) {
+          return false;
+        }
+        if ((!low.operator || low.operator === comp) && ltefn(version, low.semver)) {
+          return false;
+        } else if (low.operator === ecomp && ltfn(version, low.semver)) {
+          return false;
+        }
+      }
+      return true;
+    }, "outside");
+    module2.exports = outside;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/gtr.js
+var require_gtr = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/gtr.js"(exports2, module2) {
+    "use strict";
+    var outside = require_outside();
+    var gtr = /* @__PURE__ */ __name((version, range, options) => outside(version, range, ">", options), "gtr");
+    module2.exports = gtr;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/ltr.js
+var require_ltr = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/ltr.js"(exports2, module2) {
+    "use strict";
+    var outside = require_outside();
+    var ltr = /* @__PURE__ */ __name((version, range, options) => outside(version, range, "<", options), "ltr");
+    module2.exports = ltr;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/intersects.js
+var require_intersects = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/intersects.js"(exports2, module2) {
+    "use strict";
+    var Range = require_range();
+    var intersects = /* @__PURE__ */ __name((r1, r2, options) => {
+      r1 = new Range(r1, options);
+      r2 = new Range(r2, options);
+      return r1.intersects(r2, options);
+    }, "intersects");
+    module2.exports = intersects;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/simplify.js
+var require_simplify = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/simplify.js"(exports2, module2) {
+    "use strict";
+    var satisfies = require_satisfies();
+    var compare = require_compare();
+    module2.exports = (versions, range, options) => {
+      const set = [];
+      let first = null;
+      let prev = null;
+      const v = versions.sort((a, b) => compare(a, b, options));
+      for (const version of v) {
+        const included = satisfies(version, range, options);
+        if (included) {
+          prev = version;
+          if (!first) {
+            first = version;
+          }
+        } else {
+          if (prev) {
+            set.push([first, prev]);
+          }
+          prev = null;
+          first = null;
+        }
+      }
+      if (first) {
+        set.push([first, null]);
+      }
+      const ranges = [];
+      for (const [min, max] of set) {
+        if (min === max) {
+          ranges.push(min);
+        } else if (!max && min === v[0]) {
+          ranges.push("*");
+        } else if (!max) {
+          ranges.push(`>=${min}`);
+        } else if (min === v[0]) {
+          ranges.push(`<=${max}`);
+        } else {
+          ranges.push(`${min} - ${max}`);
+        }
+      }
+      const simplified = ranges.join(" || ");
+      const original = typeof range.raw === "string" ? range.raw : String(range);
+      return simplified.length < original.length ? simplified : range;
+    };
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/subset.js
+var require_subset = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/subset.js"(exports2, module2) {
+    "use strict";
+    var Range = require_range();
+    var Comparator = require_comparator();
+    var { ANY } = Comparator;
+    var satisfies = require_satisfies();
+    var compare = require_compare();
+    var subset = /* @__PURE__ */ __name((sub, dom, options = {}) => {
+      if (sub === dom) {
+        return true;
+      }
+      sub = new Range(sub, options);
+      dom = new Range(dom, options);
+      let sawNonNull = false;
+      OUTER: for (const simpleSub of sub.set) {
+        for (const simpleDom of dom.set) {
+          const isSub = simpleSubset(simpleSub, simpleDom, options);
+          sawNonNull = sawNonNull || isSub !== null;
+          if (isSub) {
+            continue OUTER;
+          }
+        }
+        if (sawNonNull) {
+          return false;
+        }
+      }
+      return true;
+    }, "subset");
+    var minimumVersionWithPreRelease = [new Comparator(">=0.0.0-0")];
+    var minimumVersion = [new Comparator(">=0.0.0")];
+    var simpleSubset = /* @__PURE__ */ __name((sub, dom, options) => {
+      if (sub === dom) {
+        return true;
+      }
+      if (sub.length === 1 && sub[0].semver === ANY) {
+        if (dom.length === 1 && dom[0].semver === ANY) {
+          return true;
+        } else if (options.includePrerelease) {
+          sub = minimumVersionWithPreRelease;
+        } else {
+          sub = minimumVersion;
+        }
+      }
+      if (dom.length === 1 && dom[0].semver === ANY) {
+        if (options.includePrerelease) {
+          return true;
+        } else {
+          dom = minimumVersion;
+        }
+      }
+      const eqSet = /* @__PURE__ */ new Set();
+      let gt, lt;
+      for (const c of sub) {
+        if (c.operator === ">" || c.operator === ">=") {
+          gt = higherGT(gt, c, options);
+        } else if (c.operator === "<" || c.operator === "<=") {
+          lt = lowerLT(lt, c, options);
+        } else {
+          eqSet.add(c.semver);
+        }
+      }
+      if (eqSet.size > 1) {
+        return null;
+      }
+      let gtltComp;
+      if (gt && lt) {
+        gtltComp = compare(gt.semver, lt.semver, options);
+        if (gtltComp > 0) {
+          return null;
+        } else if (gtltComp === 0 && (gt.operator !== ">=" || lt.operator !== "<=")) {
+          return null;
+        }
+      }
+      for (const eq of eqSet) {
+        if (gt && !satisfies(eq, String(gt), options)) {
+          return null;
+        }
+        if (lt && !satisfies(eq, String(lt), options)) {
+          return null;
+        }
+        for (const c of dom) {
+          if (!satisfies(eq, String(c), options)) {
+            return false;
+          }
+        }
+        return true;
+      }
+      let higher, lower;
+      let hasDomLT, hasDomGT;
+      let needDomLTPre = lt && !options.includePrerelease && lt.semver.prerelease.length ? lt.semver : false;
+      let needDomGTPre = gt && !options.includePrerelease && gt.semver.prerelease.length ? gt.semver : false;
+      if (needDomLTPre && needDomLTPre.prerelease.length === 1 && lt.operator === "<" && needDomLTPre.prerelease[0] === 0) {
+        needDomLTPre = false;
+      }
+      for (const c of dom) {
+        hasDomGT = hasDomGT || c.operator === ">" || c.operator === ">=";
+        hasDomLT = hasDomLT || c.operator === "<" || c.operator === "<=";
+        if (gt) {
+          if (needDomGTPre) {
+            if (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomGTPre.major && c.semver.minor === needDomGTPre.minor && c.semver.patch === needDomGTPre.patch) {
+              needDomGTPre = false;
+            }
+          }
+          if (c.operator === ">" || c.operator === ">=") {
+            higher = higherGT(gt, c, options);
+            if (higher === c && higher !== gt) {
+              return false;
+            }
+          } else if (gt.operator === ">=" && !satisfies(gt.semver, String(c), options)) {
+            return false;
+          }
+        }
+        if (lt) {
+          if (needDomLTPre) {
+            if (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomLTPre.major && c.semver.minor === needDomLTPre.minor && c.semver.patch === needDomLTPre.patch) {
+              needDomLTPre = false;
+            }
+          }
+          if (c.operator === "<" || c.operator === "<=") {
+            lower = lowerLT(lt, c, options);
+            if (lower === c && lower !== lt) {
+              return false;
+            }
+          } else if (lt.operator === "<=" && !satisfies(lt.semver, String(c), options)) {
+            return false;
+          }
+        }
+        if (!c.operator && (lt || gt) && gtltComp !== 0) {
+          return false;
+        }
+      }
+      if (gt && hasDomLT && !lt && gtltComp !== 0) {
+        return false;
+      }
+      if (lt && hasDomGT && !gt && gtltComp !== 0) {
+        return false;
+      }
+      if (needDomGTPre || needDomLTPre) {
+        return false;
+      }
+      return true;
+    }, "simpleSubset");
+    var higherGT = /* @__PURE__ */ __name((a, b, options) => {
+      if (!a) {
+        return b;
+      }
+      const comp = compare(a.semver, b.semver, options);
+      return comp > 0 ? a : comp < 0 ? b : b.operator === ">" && a.operator === ">=" ? b : a;
+    }, "higherGT");
+    var lowerLT = /* @__PURE__ */ __name((a, b, options) => {
+      if (!a) {
+        return b;
+      }
+      const comp = compare(a.semver, b.semver, options);
+      return comp < 0 ? a : comp > 0 ? b : b.operator === "<" && a.operator === "<=" ? b : a;
+    }, "lowerLT");
+    module2.exports = subset;
+  }
+});
+
+// node_modules/.pnpm/semver@7.7.2/node_modules/semver/index.js
+var require_semver2 = __commonJS({
+  "node_modules/.pnpm/semver@7.7.2/node_modules/semver/index.js"(exports2, module2) {
+    "use strict";
+    var internalRe = require_re();
+    var constants = require_constants();
+    var SemVer = require_semver();
+    var identifiers = require_identifiers();
+    var parse = require_parse();
+    var valid = require_valid();
+    var clean = require_clean();
+    var inc = require_inc();
+    var diff = require_diff();
+    var major = require_major();
+    var minor = require_minor();
+    var patch = require_patch();
+    var prerelease = require_prerelease();
+    var compare = require_compare();
+    var rcompare = require_rcompare();
+    var compareLoose = require_compare_loose();
+    var compareBuild = require_compare_build();
+    var sort = require_sort();
+    var rsort = require_rsort();
+    var gt = require_gt();
+    var lt = require_lt();
+    var eq = require_eq();
+    var neq = require_neq();
+    var gte = require_gte();
+    var lte = require_lte();
+    var cmp = require_cmp();
+    var coerce = require_coerce();
+    var Comparator = require_comparator();
+    var Range = require_range();
+    var satisfies = require_satisfies();
+    var toComparators = require_to_comparators();
+    var maxSatisfying = require_max_satisfying();
+    var minSatisfying = require_min_satisfying();
+    var minVersion = require_min_version();
+    var validRange = require_valid2();
+    var outside = require_outside();
+    var gtr = require_gtr();
+    var ltr = require_ltr();
+    var intersects = require_intersects();
+    var simplifyRange = require_simplify();
+    var subset = require_subset();
+    module2.exports = {
+      parse,
+      valid,
+      clean,
+      inc,
+      diff,
+      major,
+      minor,
+      patch,
+      prerelease,
+      compare,
+      rcompare,
+      compareLoose,
+      compareBuild,
+      sort,
+      rsort,
+      gt,
+      lt,
+      eq,
+      neq,
+      gte,
+      lte,
+      cmp,
+      coerce,
+      Comparator,
+      Range,
+      satisfies,
+      toComparators,
+      maxSatisfying,
+      minSatisfying,
+      minVersion,
+      validRange,
+      outside,
+      gtr,
+      ltr,
+      intersects,
+      simplifyRange,
+      subset,
+      SemVer,
+      re: internalRe.re,
+      src: internalRe.src,
+      tokens: internalRe.t,
+      SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,
+      RELEASE_TYPES: constants.RELEASE_TYPES,
+      compareIdentifiers: identifiers.compareIdentifiers,
+      rcompareIdentifiers: identifiers.rcompareIdentifiers
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/lines-to-revs.js
+var require_lines_to_revs = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/lines-to-revs.js"(exports2, module2) {
+    var semver2 = require_semver2();
+    module2.exports = (lines) => finish(lines.reduce(linesToRevsReducer, {
+      versions: {},
+      "dist-tags": {},
+      refs: {},
+      shas: {}
+    }));
+    var finish = /* @__PURE__ */ __name((revs) => distTags(shaList(peelTags(revs))), "finish");
+    var shaList = /* @__PURE__ */ __name((revs) => {
+      Object.keys(revs.refs).forEach((ref) => {
+        const doc = revs.refs[ref];
+        if (!revs.shas[doc.sha]) {
+          revs.shas[doc.sha] = [ref];
+        } else {
+          revs.shas[doc.sha].push(ref);
+        }
+      });
+      return revs;
+    }, "shaList");
+    var peelTags = /* @__PURE__ */ __name((revs) => {
+      Object.keys(revs.refs).filter((ref) => ref.endsWith("^{}")).forEach((ref) => {
+        const peeled = revs.refs[ref];
+        const unpeeled = revs.refs[ref.replace(/\^\{\}$/, "")];
+        if (unpeeled) {
+          unpeeled.sha = peeled.sha;
+          delete revs.refs[ref];
+        }
+      });
+      return revs;
+    }, "peelTags");
+    var distTags = /* @__PURE__ */ __name((revs) => {
+      const HEAD = revs.refs.HEAD || /* istanbul ignore next */
+      {};
+      const versions = Object.keys(revs.versions);
+      versions.forEach((v) => {
+        const ver = revs.versions[v];
+        if (revs.refs.latest && ver.sha === revs.refs.latest.sha) {
+          revs["dist-tags"].latest = v;
+        } else if (ver.sha === HEAD.sha) {
+          revs["dist-tags"].HEAD = v;
+          if (!revs.refs.latest) {
+            revs["dist-tags"].latest = v;
+          }
+        }
+      });
+      return revs;
+    }, "distTags");
+    var refType = /* @__PURE__ */ __name((ref) => {
+      if (ref.startsWith("refs/tags/")) {
+        return "tag";
+      }
+      if (ref.startsWith("refs/heads/")) {
+        return "branch";
+      }
+      if (ref.startsWith("refs/pull/")) {
+        return "pull";
+      }
+      if (ref === "HEAD") {
+        return "head";
+      }
+      return "other";
+    }, "refType");
+    var lineToRevDoc = /* @__PURE__ */ __name((line) => {
+      const split = line.trim().split(/\s+/, 2);
+      if (split.length < 2) {
+        return null;
+      }
+      const sha = split[0].trim();
+      const rawRef = split[1].trim();
+      const type = refType(rawRef);
+      if (type === "tag") {
+        const ref = rawRef.slice("refs/tags/".length);
+        return { sha, ref, rawRef, type };
+      }
+      if (type === "branch") {
+        const ref = rawRef.slice("refs/heads/".length);
+        return { sha, ref, rawRef, type };
+      }
+      if (type === "pull") {
+        const ref = rawRef.slice("refs/".length).replace(/\/head$/, "");
+        return { sha, ref, rawRef, type };
+      }
+      if (type === "head") {
+        const ref = "HEAD";
+        return { sha, ref, rawRef, type };
+      }
+      return { sha, ref: rawRef, rawRef, type };
+    }, "lineToRevDoc");
+    var linesToRevsReducer = /* @__PURE__ */ __name((revs, line) => {
+      const doc = lineToRevDoc(line);
+      if (!doc) {
+        return revs;
+      }
+      revs.refs[doc.ref] = doc;
+      revs.refs[doc.rawRef] = doc;
+      if (doc.type === "tag") {
+        const match = !doc.ref.endsWith("^{}") && doc.ref.match(/v?(\d+\.\d+\.\d+(?:[-+].+)?)$/);
+        if (match && semver2.valid(match[1], true)) {
+          revs.versions[semver2.clean(match[1], true)] = doc;
+        }
+      }
+      return revs;
+    }, "linesToRevsReducer");
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/revs.js
+var require_revs = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/revs.js"(exports2, module2) {
+    var spawn = require_spawn();
+    var { LRUCache } = require_commonjs();
+    var linesToRevs = require_lines_to_revs();
+    var revsCache = new LRUCache({
+      max: 100,
+      ttl: 5 * 60 * 1e3
+    });
+    module2.exports = async (repo, opts = {}) => {
+      if (!opts.noGitRevCache) {
+        const cached = revsCache.get(repo);
+        if (cached) {
+          return cached;
+        }
+      }
+      const { stdout } = await spawn(["ls-remote", repo], opts);
+      const revs = linesToRevs(stdout.trim().split("\n"));
+      revsCache.set(repo, revs);
+      return revs;
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/utils.js
+var require_utils = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/utils.js"(exports2) {
+    var isWindows = /* @__PURE__ */ __name((opts) => (opts.fakePlatform || process.platform) === "win32", "isWindows");
+    exports2.isWindows = isWindows;
+  }
+});
+
+// node_modules/.pnpm/validate-npm-package-name@6.0.2/node_modules/validate-npm-package-name/lib/index.js
+var require_lib6 = __commonJS({
+  "node_modules/.pnpm/validate-npm-package-name@6.0.2/node_modules/validate-npm-package-name/lib/index.js"(exports2, module2) {
+    "use strict";
+    var { builtinModules: builtins } = require("module");
+    var scopedPackagePattern = new RegExp("^(?:@([^/]+?)[/])?([^/]+?)$");
+    var exclusionList = [
+      "node_modules",
+      "favicon.ico"
+    ];
+    function validate(name) {
+      var warnings = [];
+      var errors = [];
+      if (name === null) {
+        errors.push("name cannot be null");
+        return done(warnings, errors);
+      }
+      if (name === void 0) {
+        errors.push("name cannot be undefined");
+        return done(warnings, errors);
+      }
+      if (typeof name !== "string") {
+        errors.push("name must be a string");
+        return done(warnings, errors);
+      }
+      if (!name.length) {
+        errors.push("name length must be greater than zero");
+      }
+      if (name.startsWith(".")) {
+        errors.push("name cannot start with a period");
+      }
+      if (name.match(/^_/)) {
+        errors.push("name cannot start with an underscore");
+      }
+      if (name.trim() !== name) {
+        errors.push("name cannot contain leading or trailing spaces");
+      }
+      exclusionList.forEach(function(excludedName) {
+        if (name.toLowerCase() === excludedName) {
+          errors.push(excludedName + " is not a valid package name");
+        }
+      });
+      if (builtins.includes(name.toLowerCase())) {
+        warnings.push(name + " is a core module name");
+      }
+      if (name.length > 214) {
+        warnings.push("name can no longer contain more than 214 characters");
+      }
+      if (name.toLowerCase() !== name) {
+        warnings.push("name can no longer contain capital letters");
+      }
+      if (/[~'!()*]/.test(name.split("/").slice(-1)[0])) {
+        warnings.push(`name can no longer contain special characters ("~'!()*")`);
+      }
+      if (encodeURIComponent(name) !== name) {
+        var nameMatch = name.match(scopedPackagePattern);
+        if (nameMatch) {
+          var user = nameMatch[1];
+          var pkg = nameMatch[2];
+          if (pkg.startsWith(".")) {
+            errors.push("name cannot start with a period");
+          }
+          if (encodeURIComponent(user) === user && encodeURIComponent(pkg) === pkg) {
+            return done(warnings, errors);
+          }
+        }
+        errors.push("name can only contain URL-friendly characters");
+      }
+      return done(warnings, errors);
+    }
+    __name(validate, "validate");
+    var done = /* @__PURE__ */ __name(function(warnings, errors) {
+      var result = {
+        validForNewPackages: errors.length === 0 && warnings.length === 0,
+        validForOldPackages: errors.length === 0,
+        warnings,
+        errors
+      };
+      if (!result.warnings.length) {
+        delete result.warnings;
+      }
+      if (!result.errors.length) {
+        delete result.errors;
+      }
+      return result;
+    }, "done");
+    module2.exports = validate;
+  }
+});
+
+// node_modules/.pnpm/npm-package-arg@12.0.2/node_modules/npm-package-arg/lib/npa.js
+var require_npa = __commonJS({
+  "node_modules/.pnpm/npm-package-arg@12.0.2/node_modules/npm-package-arg/lib/npa.js"(exports2, module2) {
+    "use strict";
+    var isWindows = process.platform === "win32";
+    var { URL: URL2 } = require("node:url");
+    var path = isWindows ? require("node:path/win32") : require("node:path");
+    var { homedir } = require("node:os");
+    var HostedGit = require_lib3();
+    var semver2 = require_semver2();
+    var validatePackageName = require_lib6();
+    var { log } = require_lib2();
+    var hasSlashes = isWindows ? /\\|[/]/ : /[/]/;
+    var isURL = /^(?:git[+])?[a-z]+:/i;
+    var isGit = /^[^@]+@[^:.]+\.[^:]+:.+$/i;
+    var isFileType = /[.](?:tgz|tar.gz|tar)$/i;
+    var isPortNumber = /:[0-9]+(\/|$)/i;
+    var isWindowsFile = /^(?:[.]|~[/]|[/\\]|[a-zA-Z]:)/;
+    var isPosixFile = /^(?:[.]|~[/]|[/]|[a-zA-Z]:)/;
+    var defaultRegistry = "https://registry.npmjs.org";
+    function npa(arg, where) {
+      let name;
+      let spec;
+      if (typeof arg === "object") {
+        if (arg instanceof Result && (!where || where === arg.where)) {
+          return arg;
+        } else if (arg.name && arg.rawSpec) {
+          return npa.resolve(arg.name, arg.rawSpec, where || arg.where);
+        } else {
+          return npa(arg.raw, where || arg.where);
+        }
+      }
+      const nameEndsAt = arg.indexOf("@", 1);
+      const namePart = nameEndsAt > 0 ? arg.slice(0, nameEndsAt) : arg;
+      if (isURL.test(arg)) {
+        spec = arg;
+      } else if (isGit.test(arg)) {
+        spec = `git+ssh://${arg}`;
+      } else if (!namePart.startsWith("@") && (hasSlashes.test(namePart) || isFileType.test(namePart))) {
+        spec = arg;
+      } else if (nameEndsAt > 0) {
+        name = namePart;
+        spec = arg.slice(nameEndsAt + 1) || "*";
+      } else {
+        const valid = validatePackageName(arg);
+        if (valid.validForOldPackages) {
+          name = arg;
+          spec = "*";
+        } else {
+          spec = arg;
+        }
+      }
+      return resolve(name, spec, where, arg);
+    }
+    __name(npa, "npa");
+    function isFileSpec(spec) {
+      if (!spec) {
+        return false;
+      }
+      if (spec.toLowerCase().startsWith("file:")) {
+        return true;
+      }
+      if (isWindows) {
+        return isWindowsFile.test(spec);
+      }
+      return isPosixFile.test(spec);
+    }
+    __name(isFileSpec, "isFileSpec");
+    function isAliasSpec(spec) {
+      if (!spec) {
+        return false;
+      }
+      return spec.toLowerCase().startsWith("npm:");
+    }
+    __name(isAliasSpec, "isAliasSpec");
+    function resolve(name, spec, where, arg) {
+      const res = new Result({
+        raw: arg,
+        name,
+        rawSpec: spec,
+        fromArgument: arg != null
+      });
+      if (name) {
+        res.name = name;
+      }
+      if (!where) {
+        where = process.cwd();
+      }
+      if (isFileSpec(spec)) {
+        return fromFile(res, where);
+      } else if (isAliasSpec(spec)) {
+        return fromAlias(res, where);
+      }
+      const hosted = HostedGit.fromUrl(spec, {
+        noGitPlus: true,
+        noCommittish: true
+      });
+      if (hosted) {
+        return fromHostedGit(res, hosted);
+      } else if (spec && isURL.test(spec)) {
+        return fromURL(res);
+      } else if (spec && (hasSlashes.test(spec) || isFileType.test(spec))) {
+        return fromFile(res, where);
+      } else {
+        return fromRegistry(res);
+      }
+    }
+    __name(resolve, "resolve");
+    function toPurl(arg, reg = defaultRegistry) {
+      const res = npa(arg);
+      if (res.type !== "version") {
+        throw invalidPurlType(res.type, res.raw);
+      }
+      let purl = "pkg:npm/" + res.name.replace(/^@/, "%40") + "@" + res.rawSpec;
+      if (reg !== defaultRegistry) {
+        purl += "?repository_url=" + reg;
+      }
+      return purl;
+    }
+    __name(toPurl, "toPurl");
+    function invalidPackageName(name, valid, raw) {
+      const err = new Error(`Invalid package name "${name}" of package "${raw}": ${valid.errors.join("; ")}.`);
+      err.code = "EINVALIDPACKAGENAME";
+      return err;
+    }
+    __name(invalidPackageName, "invalidPackageName");
+    function invalidTagName(name, raw) {
+      const err = new Error(`Invalid tag name "${name}" of package "${raw}": Tags may not have any characters that encodeURIComponent encodes.`);
+      err.code = "EINVALIDTAGNAME";
+      return err;
+    }
+    __name(invalidTagName, "invalidTagName");
+    function invalidPurlType(type, raw) {
+      const err = new Error(`Invalid type "${type}" of package "${raw}": Purl can only be generated for "version" types.`);
+      err.code = "EINVALIDPURLTYPE";
+      return err;
+    }
+    __name(invalidPurlType, "invalidPurlType");
+    var Result = class {
+      static {
+        __name(this, "Result");
+      }
+      constructor(opts) {
+        this.type = opts.type;
+        this.registry = opts.registry;
+        this.where = opts.where;
+        if (opts.raw == null) {
+          this.raw = opts.name ? `${opts.name}@${opts.rawSpec}` : opts.rawSpec;
+        } else {
+          this.raw = opts.raw;
+        }
+        this.name = void 0;
+        this.escapedName = void 0;
+        this.scope = void 0;
+        this.rawSpec = opts.rawSpec || "";
+        this.saveSpec = opts.saveSpec;
+        this.fetchSpec = opts.fetchSpec;
+        if (opts.name) {
+          this.setName(opts.name);
+        }
+        this.gitRange = opts.gitRange;
+        this.gitCommittish = opts.gitCommittish;
+        this.gitSubdir = opts.gitSubdir;
+        this.hosted = opts.hosted;
+      }
+      // TODO move this to a getter/setter in a semver major
+      setName(name) {
+        const valid = validatePackageName(name);
+        if (!valid.validForOldPackages) {
+          throw invalidPackageName(name, valid, this.raw);
+        }
+        this.name = name;
+        this.scope = name[0] === "@" ? name.slice(0, name.indexOf("/")) : void 0;
+        this.escapedName = name.replace("/", "%2f");
+        return this;
+      }
+      toString() {
+        const full = [];
+        if (this.name != null && this.name !== "") {
+          full.push(this.name);
+        }
+        const spec = this.saveSpec || this.fetchSpec || this.rawSpec;
+        if (spec != null && spec !== "") {
+          full.push(spec);
+        }
+        return full.length ? full.join("@") : this.raw;
+      }
+      toJSON() {
+        const result = Object.assign({}, this);
+        delete result.hosted;
+        return result;
+      }
+    };
+    function setGitAttrs(res, committish) {
+      if (!committish) {
+        res.gitCommittish = null;
+        return;
+      }
+      for (const part of committish.split("::")) {
+        if (!part.includes(":")) {
+          if (res.gitRange) {
+            throw new Error("cannot override existing semver range with a committish");
+          }
+          if (res.gitCommittish) {
+            throw new Error("cannot override existing committish with a second committish");
+          }
+          res.gitCommittish = part;
+          continue;
+        }
+        const [name, value] = part.split(":");
+        if (name === "semver") {
+          if (res.gitCommittish) {
+            throw new Error("cannot override existing committish with a semver range");
+          }
+          if (res.gitRange) {
+            throw new Error("cannot override existing semver range with a second semver range");
+          }
+          res.gitRange = decodeURIComponent(value);
+          continue;
+        }
+        if (name === "path") {
+          if (res.gitSubdir) {
+            throw new Error("cannot override existing path with a second path");
+          }
+          res.gitSubdir = `/${value}`;
+          continue;
+        }
+        log.warn("npm-package-arg", `ignoring unknown key "${name}"`);
+      }
+    }
+    __name(setGitAttrs, "setGitAttrs");
+    var encodedPathChars = /* @__PURE__ */ new Map([
+      ["\0", "%00"],
+      ["	", "%09"],
+      ["\n", "%0A"],
+      ["\r", "%0D"],
+      [" ", "%20"],
+      ['"', "%22"],
+      ["#", "%23"],
+      ["%", "%25"],
+      ["?", "%3F"],
+      ["[", "%5B"],
+      ["\\", isWindows ? "/" : "%5C"],
+      ["]", "%5D"],
+      ["^", "%5E"],
+      ["|", "%7C"],
+      ["~", "%7E"]
+    ]);
+    function pathToFileURL(str) {
+      let result = "";
+      for (let i = 0; i < str.length; i++) {
+        result = `${result}${encodedPathChars.get(str[i]) ?? str[i]}`;
+      }
+      if (result.startsWith("file:")) {
+        return result;
+      }
+      return `file:${result}`;
+    }
+    __name(pathToFileURL, "pathToFileURL");
+    function fromFile(res, where) {
+      res.type = isFileType.test(res.rawSpec) ? "file" : "directory";
+      res.where = where;
+      let rawSpec = pathToFileURL(res.rawSpec);
+      if (rawSpec.startsWith("file:/")) {
+        if (/^file:\/\/[^/]/.test(rawSpec)) {
+          rawSpec = `file:/${rawSpec.slice(5)}`;
+        }
+        if (/^\/{1,3}\.\.?(\/|$)/.test(rawSpec.slice(5))) {
+          rawSpec = rawSpec.replace(/^file:\/{1,3}/, "file:");
+        }
+      }
+      let resolvedUrl;
+      let specUrl;
+      try {
+        resolvedUrl = new URL2(rawSpec, `${pathToFileURL(path.resolve(where))}/`);
+        specUrl = new URL2(rawSpec);
+      } catch (originalError) {
+        const er = new Error("Invalid file: URL, must comply with RFC 8089");
+        throw Object.assign(er, {
+          raw: res.rawSpec,
+          spec: res,
+          where,
+          originalError
+        });
+      }
+      let specPath = decodeURIComponent(specUrl.pathname);
+      let resolvedPath = decodeURIComponent(resolvedUrl.pathname);
+      if (isWindows) {
+        specPath = specPath.replace(/^\/+([a-z]:\/)/i, "$1");
+        resolvedPath = resolvedPath.replace(/^\/+([a-z]:\/)/i, "$1");
+      }
+      if (/^\/~(\/|$)/.test(specPath)) {
+        res.saveSpec = `file:${specPath.substr(1)}`;
+        resolvedPath = path.resolve(homedir(), specPath.substr(3));
+      } else if (!path.isAbsolute(rawSpec.slice(5))) {
+        res.saveSpec = `file:${path.relative(where, resolvedPath)}`;
+      } else {
+        res.saveSpec = `file:${path.resolve(resolvedPath)}`;
+      }
+      res.fetchSpec = path.resolve(where, resolvedPath);
+      res.saveSpec = res.saveSpec.split("\\").join("/");
+      if (res.saveSpec.startsWith("file://")) {
+        res.saveSpec = `file:/${res.saveSpec.slice(7)}`;
+      }
+      return res;
+    }
+    __name(fromFile, "fromFile");
+    function fromHostedGit(res, hosted) {
+      res.type = "git";
+      res.hosted = hosted;
+      res.saveSpec = hosted.toString({ noGitPlus: false, noCommittish: false });
+      res.fetchSpec = hosted.getDefaultRepresentation() === "shortcut" ? null : hosted.toString();
+      setGitAttrs(res, hosted.committish);
+      return res;
+    }
+    __name(fromHostedGit, "fromHostedGit");
+    function unsupportedURLType(protocol, spec) {
+      const err = new Error(`Unsupported URL Type "${protocol}": ${spec}`);
+      err.code = "EUNSUPPORTEDPROTOCOL";
+      return err;
+    }
+    __name(unsupportedURLType, "unsupportedURLType");
+    function fromURL(res) {
+      let rawSpec = res.rawSpec;
+      res.saveSpec = rawSpec;
+      if (rawSpec.startsWith("git+ssh:")) {
+        const matched = rawSpec.match(/^git\+ssh:\/\/([^:#]+:[^#]+(?:\.git)?)(?:#(.*))?$/i);
+        if (matched && !matched[1].match(isPortNumber)) {
+          res.type = "git";
+          setGitAttrs(res, matched[2]);
+          res.fetchSpec = matched[1];
+          return res;
+        }
+      } else if (rawSpec.startsWith("git+file://")) {
+        rawSpec = rawSpec.replace(/\\/g, "/");
+      }
+      const parsedUrl = new URL2(rawSpec);
+      switch (parsedUrl.protocol) {
+        case "git:":
+        case "git+http:":
+        case "git+https:":
+        case "git+rsync:":
+        case "git+ftp:":
+        case "git+file:":
+        case "git+ssh:":
+          res.type = "git";
+          setGitAttrs(res, parsedUrl.hash.slice(1));
+          if (parsedUrl.protocol === "git+file:" && /^git\+file:\/\/[a-z]:/i.test(rawSpec)) {
+            res.fetchSpec = `git+file://${parsedUrl.host.toLowerCase()}:${parsedUrl.pathname}`;
+          } else {
+            parsedUrl.hash = "";
+            res.fetchSpec = parsedUrl.toString();
+          }
+          if (res.fetchSpec.startsWith("git+")) {
+            res.fetchSpec = res.fetchSpec.slice(4);
+          }
+          break;
+        case "http:":
+        case "https:":
+          res.type = "remote";
+          res.fetchSpec = res.saveSpec;
+          break;
+        default:
+          throw unsupportedURLType(parsedUrl.protocol, rawSpec);
+      }
+      return res;
+    }
+    __name(fromURL, "fromURL");
+    function fromAlias(res, where) {
+      const subSpec = npa(res.rawSpec.substr(4), where);
+      if (subSpec.type === "alias") {
+        throw new Error("nested aliases not supported");
+      }
+      if (!subSpec.registry) {
+        throw new Error("aliases only work for registry deps");
+      }
+      if (!subSpec.name) {
+        throw new Error("aliases must have a name");
+      }
+      res.subSpec = subSpec;
+      res.registry = true;
+      res.type = "alias";
+      res.saveSpec = null;
+      res.fetchSpec = null;
+      return res;
+    }
+    __name(fromAlias, "fromAlias");
+    function fromRegistry(res) {
+      res.registry = true;
+      const spec = res.rawSpec.trim();
+      res.saveSpec = null;
+      res.fetchSpec = spec;
+      const version = semver2.valid(spec, true);
+      const range = semver2.validRange(spec, true);
+      if (version) {
+        res.type = "version";
+      } else if (range) {
+        res.type = "range";
+      } else {
+        if (encodeURIComponent(spec) !== spec) {
+          throw invalidTagName(spec, res.raw);
+        }
+        res.type = "tag";
+      }
+      return res;
+    }
+    __name(fromRegistry, "fromRegistry");
+    module2.exports = npa;
+    module2.exports.resolve = resolve;
+    module2.exports.toPurl = toPurl;
+    module2.exports.Result = Result;
+  }
+});
+
+// node_modules/.pnpm/npm-install-checks@7.1.2/node_modules/npm-install-checks/lib/current-env.js
+var require_current_env = __commonJS({
+  "node_modules/.pnpm/npm-install-checks@7.1.2/node_modules/npm-install-checks/lib/current-env.js"(exports2, module2) {
+    var process3 = require("node:process");
+    var nodeOs = require("node:os");
+    var fs = require("node:fs");
+    function isMusl(file) {
+      return file.includes("libc.musl-") || file.includes("ld-musl-");
+    }
+    __name(isMusl, "isMusl");
+    function os2() {
+      return process3.platform;
+    }
+    __name(os2, "os");
+    function cpu() {
+      return process3.arch;
+    }
+    __name(cpu, "cpu");
+    var LDD_PATH = "/usr/bin/ldd";
+    function getFamilyFromFilesystem() {
+      try {
+        const content = fs.readFileSync(LDD_PATH, "utf-8");
+        if (content.includes("musl")) {
+          return "musl";
+        }
+        if (content.includes("GNU C Library")) {
+          return "glibc";
+        }
+        return null;
+      } catch {
+        return void 0;
+      }
+    }
+    __name(getFamilyFromFilesystem, "getFamilyFromFilesystem");
+    function getFamilyFromReport() {
+      const originalExclude = process3.report.excludeNetwork;
+      process3.report.excludeNetwork = true;
+      const report = process3.report.getReport();
+      process3.report.excludeNetwork = originalExclude;
+      if (report.header?.glibcVersionRuntime) {
+        family = "glibc";
+      } else if (Array.isArray(report.sharedObjects) && report.sharedObjects.some(isMusl)) {
+        family = "musl";
+      } else {
+        family = null;
+      }
+      return family;
+    }
+    __name(getFamilyFromReport, "getFamilyFromReport");
+    var family;
+    function libc(osName) {
+      if (osName !== "linux") {
+        return void 0;
+      }
+      if (family === void 0) {
+        family = getFamilyFromFilesystem();
+        if (family === void 0) {
+          family = getFamilyFromReport();
+        }
+      }
+      return family;
+    }
+    __name(libc, "libc");
+    function devEngines(env2 = {}) {
+      const osName = env2.os || os2();
+      return {
+        cpu: {
+          name: env2.cpu || cpu()
+        },
+        libc: {
+          name: env2.libc || libc(osName)
+        },
+        os: {
+          name: osName,
+          version: env2.osVersion || nodeOs.release()
+        },
+        packageManager: {
+          name: "npm",
+          version: env2.npmVersion
+        },
+        runtime: {
+          name: "node",
+          version: env2.nodeVersion || process3.version
+        }
+      };
+    }
+    __name(devEngines, "devEngines");
+    module2.exports = {
+      cpu,
+      libc,
+      os: os2,
+      devEngines
+    };
+  }
+});
+
+// node_modules/.pnpm/npm-install-checks@7.1.2/node_modules/npm-install-checks/lib/dev-engines.js
+var require_dev_engines = __commonJS({
+  "node_modules/.pnpm/npm-install-checks@7.1.2/node_modules/npm-install-checks/lib/dev-engines.js"(exports2, module2) {
+    var satisfies = require_satisfies();
+    var validRange = require_valid2();
+    var recognizedOnFail = [
+      "ignore",
+      "warn",
+      "error",
+      "download"
+    ];
+    var recognizedProperties = [
+      "name",
+      "version",
+      "onFail"
+    ];
+    var recognizedEngines = [
+      "packageManager",
+      "runtime",
+      "cpu",
+      "libc",
+      "os"
+    ];
+    function checkDependency(wanted, current, opts) {
+      const { engine } = opts;
+      if (typeof wanted !== "object" || wanted === null || Array.isArray(wanted)) {
+        throw new Error(`Invalid non-object value for "${engine}"`);
+      }
+      const properties = Object.keys(wanted);
+      for (const prop of properties) {
+        if (!recognizedProperties.includes(prop)) {
+          throw new Error(`Invalid property "${prop}" for "${engine}"`);
+        }
+      }
+      if (!properties.includes("name")) {
+        throw new Error(`Missing "name" property for "${engine}"`);
+      }
+      if (typeof wanted.name !== "string") {
+        throw new Error(`Invalid non-string value for "name" within "${engine}"`);
+      }
+      if (typeof current.name !== "string" || current.name === "") {
+        throw new Error(`Unable to determine "name" for "${engine}"`);
+      }
+      if (properties.includes("onFail")) {
+        if (typeof wanted.onFail !== "string") {
+          throw new Error(`Invalid non-string value for "onFail" within "${engine}"`);
+        }
+        if (!recognizedOnFail.includes(wanted.onFail)) {
+          throw new Error(`Invalid onFail value "${wanted.onFail}" for "${engine}"`);
+        }
+      }
+      if (wanted.name !== current.name) {
+        return new Error(
+          `Invalid name "${wanted.name}" does not match "${current.name}" for "${engine}"`
+        );
+      }
+      if (properties.includes("version")) {
+        if (typeof wanted.version !== "string") {
+          throw new Error(`Invalid non-string value for "version" within "${engine}"`);
+        }
+        if (typeof current.version !== "string" || current.version === "") {
+          throw new Error(`Unable to determine "version" for "${engine}" "${wanted.name}"`);
+        }
+        if (validRange(wanted.version)) {
+          if (!satisfies(current.version, wanted.version, opts.semver)) {
+            return new Error(
+              // eslint-disable-next-line max-len
+              `Invalid semver version "${wanted.version}" does not match "${current.version}" for "${engine}"`
+            );
+          }
+        } else if (wanted.version !== current.version) {
+          return new Error(
+            `Invalid version "${wanted.version}" does not match "${current.version}" for "${engine}"`
+          );
+        }
+      }
+    }
+    __name(checkDependency, "checkDependency");
+    function checkDevEngines(wanted, current = {}, opts = {}) {
+      if (typeof wanted !== "object" || wanted === null || Array.isArray(wanted)) {
+        throw new Error(`Invalid non-object value for "devEngines"`);
+      }
+      const errors = [];
+      for (const engine of Object.keys(wanted)) {
+        if (!recognizedEngines.includes(engine)) {
+          throw new Error(`Invalid property "devEngines.${engine}"`);
+        }
+        const dependencyAsAuthored = wanted[engine];
+        const dependencies = [dependencyAsAuthored].flat();
+        const currentEngine = current[engine] || {};
+        if (dependencies.length === 0) {
+          continue;
+        }
+        const depErrors = [];
+        for (const dep of dependencies) {
+          const result = checkDependency(dep, currentEngine, { ...opts, engine });
+          if (result) {
+            depErrors.push(result);
+          }
+        }
+        const invalid = depErrors.length === dependencies.length;
+        if (invalid) {
+          const lastDependency = dependencies[dependencies.length - 1];
+          let onFail = lastDependency.onFail || "error";
+          if (onFail === "download") {
+            onFail = "error";
+          }
+          const err = Object.assign(new Error(`Invalid devEngines.${engine}`), {
+            errors: depErrors,
+            engine,
+            isWarn: onFail === "warn",
+            isError: onFail === "error",
+            current: currentEngine,
+            required: dependencyAsAuthored
+          });
+          errors.push(err);
+        }
+      }
+      return errors;
+    }
+    __name(checkDevEngines, "checkDevEngines");
+    module2.exports = {
+      checkDevEngines
+    };
+  }
+});
+
+// node_modules/.pnpm/npm-install-checks@7.1.2/node_modules/npm-install-checks/lib/index.js
+var require_lib7 = __commonJS({
+  "node_modules/.pnpm/npm-install-checks@7.1.2/node_modules/npm-install-checks/lib/index.js"(exports2, module2) {
+    var semver2 = require_semver2();
+    var currentEnv = require_current_env();
+    var { checkDevEngines } = require_dev_engines();
+    var checkEngine = /* @__PURE__ */ __name((target, npmVer, nodeVer, force = false) => {
+      const nodev = force ? null : nodeVer;
+      const eng = target.engines;
+      const opt = { includePrerelease: true };
+      if (!eng) {
+        return;
+      }
+      const nodeFail = nodev && eng.node && !semver2.satisfies(nodev, eng.node, opt);
+      const npmFail = npmVer && eng.npm && !semver2.satisfies(npmVer, eng.npm, opt);
+      if (nodeFail || npmFail) {
+        throw Object.assign(new Error("Unsupported engine"), {
+          pkgid: target._id,
+          current: { node: nodeVer, npm: npmVer },
+          required: eng,
+          code: "EBADENGINE"
+        });
+      }
+    }, "checkEngine");
+    var checkPlatform = /* @__PURE__ */ __name((target, force = false, environment = {}) => {
+      if (force) {
+        return;
+      }
+      const os2 = environment.os || currentEnv.os();
+      const cpu = environment.cpu || currentEnv.cpu();
+      const libc = environment.libc || currentEnv.libc(os2);
+      const osOk = target.os ? checkList(os2, target.os) : true;
+      const cpuOk = target.cpu ? checkList(cpu, target.cpu) : true;
+      let libcOk = target.libc ? checkList(libc, target.libc) : true;
+      if (target.libc && !libc) {
+        libcOk = false;
+      }
+      if (!osOk || !cpuOk || !libcOk) {
+        throw Object.assign(new Error("Unsupported platform"), {
+          pkgid: target._id,
+          current: {
+            os: os2,
+            cpu,
+            libc
+          },
+          required: {
+            os: target.os,
+            cpu: target.cpu,
+            libc: target.libc
+          },
+          code: "EBADPLATFORM"
+        });
+      }
+    }, "checkPlatform");
+    var checkList = /* @__PURE__ */ __name((value, list) => {
+      if (typeof list === "string") {
+        list = [list];
+      }
+      if (list.length === 1 && list[0] === "any") {
+        return true;
+      }
+      let negated = 0;
+      let match = false;
+      for (const entry of list) {
+        const negate = entry.charAt(0) === "!";
+        const test = negate ? entry.slice(1) : entry;
+        if (negate) {
+          negated++;
+          if (value === test) {
+            return false;
+          }
+        } else {
+          match = match || value === test;
+        }
+      }
+      return match || negated === list.length;
+    }, "checkList");
+    module2.exports = {
+      checkEngine,
+      checkPlatform,
+      checkDevEngines,
+      currentEnv
+    };
+  }
+});
+
+// node_modules/.pnpm/npm-normalize-package-bin@5.0.0/node_modules/npm-normalize-package-bin/lib/index.js
+var require_lib8 = __commonJS({
+  "node_modules/.pnpm/npm-normalize-package-bin@5.0.0/node_modules/npm-normalize-package-bin/lib/index.js"(exports2, module2) {
+    var { join, basename } = require("path");
+    var normalize = /* @__PURE__ */ __name((pkg) => !pkg.bin ? removeBin(pkg) : typeof pkg.bin === "string" ? normalizeString(pkg) : Array.isArray(pkg.bin) ? normalizeArray(pkg) : typeof pkg.bin === "object" ? normalizeObject(pkg) : removeBin(pkg), "normalize");
+    var normalizeString = /* @__PURE__ */ __name((pkg) => {
+      if (!pkg.name) {
+        return removeBin(pkg);
+      }
+      pkg.bin = { [pkg.name]: pkg.bin };
+      return normalizeObject(pkg);
+    }, "normalizeString");
+    var normalizeArray = /* @__PURE__ */ __name((pkg) => {
+      pkg.bin = pkg.bin.reduce((acc, k) => {
+        acc[basename(k)] = k;
+        return acc;
+      }, {});
+      return normalizeObject(pkg);
+    }, "normalizeArray");
+    var removeBin = /* @__PURE__ */ __name((pkg) => {
+      delete pkg.bin;
+      return pkg;
+    }, "removeBin");
+    var normalizeObject = /* @__PURE__ */ __name((pkg) => {
+      const orig = pkg.bin;
+      const clean = {};
+      let hasBins = false;
+      Object.keys(orig).forEach((binKey) => {
+        const base = join("/", basename(binKey.replace(/\\|:/g, "/"))).slice(1);
+        if (typeof orig[binKey] !== "string" || !base) {
+          return;
+        }
+        const binTarget = join("/", orig[binKey].replace(/\\/g, "/")).replace(/\\/g, "/").slice(1);
+        if (!binTarget) {
+          return;
+        }
+        clean[base] = binTarget;
+        hasBins = true;
+      });
+      if (hasBins) {
+        pkg.bin = clean;
+      } else {
+        delete pkg.bin;
+      }
+      return pkg;
+    }, "normalizeObject");
+    module2.exports = normalize;
+  }
+});
+
+// node_modules/.pnpm/npm-pick-manifest@10.0.0/node_modules/npm-pick-manifest/lib/index.js
+var require_lib9 = __commonJS({
+  "node_modules/.pnpm/npm-pick-manifest@10.0.0/node_modules/npm-pick-manifest/lib/index.js"(exports2, module2) {
+    "use strict";
+    var npa = require_npa();
+    var semver2 = require_semver2();
+    var { checkEngine } = require_lib7();
+    var normalizeBin = require_lib8();
+    var engineOk = /* @__PURE__ */ __name((manifest, npmVersion, nodeVersion) => {
+      try {
+        checkEngine(manifest, npmVersion, nodeVersion);
+        return true;
+      } catch (_) {
+        return false;
+      }
+    }, "engineOk");
+    var isBefore = /* @__PURE__ */ __name((verTimes, ver, time) => !verTimes || !verTimes[ver] || Date.parse(verTimes[ver]) <= time, "isBefore");
+    var avoidSemverOpt = { includePrerelease: true, loose: true };
+    var shouldAvoid = /* @__PURE__ */ __name((ver, avoid) => avoid && semver2.satisfies(ver, avoid, avoidSemverOpt), "shouldAvoid");
+    var decorateAvoid = /* @__PURE__ */ __name((result, avoid) => result && shouldAvoid(result.version, avoid) ? { ...result, _shouldAvoid: true } : result, "decorateAvoid");
+    var pickManifest = /* @__PURE__ */ __name((packument, wanted, opts) => {
+      const {
+        defaultTag = "latest",
+        before = null,
+        nodeVersion = process.version,
+        npmVersion = null,
+        includeStaged = false,
+        avoid = null,
+        avoidStrict = false
+      } = opts;
+      const { name, time: verTimes } = packument;
+      const versions = packument.versions || {};
+      if (avoidStrict) {
+        const looseOpts = {
+          ...opts,
+          avoidStrict: false
+        };
+        const result = pickManifest(packument, wanted, looseOpts);
+        if (!result || !result._shouldAvoid) {
+          return result;
+        }
+        const caret = pickManifest(packument, `^${result.version}`, looseOpts);
+        if (!caret || !caret._shouldAvoid) {
+          return {
+            ...caret,
+            _outsideDependencyRange: true,
+            _isSemVerMajor: false
+          };
+        }
+        const star = pickManifest(packument, "*", looseOpts);
+        if (!star || !star._shouldAvoid) {
+          return {
+            ...star,
+            _outsideDependencyRange: true,
+            _isSemVerMajor: true
+          };
+        }
+        throw Object.assign(new Error(`No avoidable versions for ${name}`), {
+          code: "ETARGET",
+          name,
+          wanted,
+          avoid,
+          before,
+          versions: Object.keys(versions)
+        });
+      }
+      const staged = includeStaged && packument.stagedVersions && packument.stagedVersions.versions || {};
+      const restricted = packument.policyRestrictions && packument.policyRestrictions.versions || {};
+      const time = before && verTimes ? +new Date(before) : Infinity;
+      const spec = npa.resolve(name, wanted || defaultTag);
+      const type = spec.type;
+      const distTags = packument["dist-tags"] || {};
+      if (type !== "tag" && type !== "version" && type !== "range") {
+        throw new Error("Only tag, version, and range are supported");
+      }
+      if (wanted && type === "tag") {
+        const ver = distTags[wanted];
+        if (isBefore(verTimes, ver, time)) {
+          return decorateAvoid(versions[ver] || staged[ver] || restricted[ver], avoid);
+        } else {
+          return pickManifest(packument, `<=${ver}`, opts);
+        }
+      }
+      if (wanted && type === "version") {
+        const ver = semver2.clean(wanted, { loose: true });
+        const mani = versions[ver] || staged[ver] || restricted[ver];
+        return isBefore(verTimes, ver, time) ? decorateAvoid(mani, avoid) : null;
+      }
+      const range = type === "range" ? wanted : "*";
+      const defaultVer = distTags[defaultTag];
+      if (defaultVer && (range === "*" || semver2.satisfies(defaultVer, range, { loose: true })) && !restricted[defaultVer] && !shouldAvoid(defaultVer, avoid)) {
+        const mani = versions[defaultVer];
+        const ok = mani && isBefore(verTimes, defaultVer, time) && engineOk(mani, npmVersion, nodeVersion) && !mani.deprecated && !staged[defaultVer];
+        if (ok) {
+          return mani;
+        }
+      }
+      const allEntries = Object.entries(versions).concat(Object.entries(staged)).concat(Object.entries(restricted)).filter(([ver]) => isBefore(verTimes, ver, time));
+      if (!allEntries.length) {
+        throw Object.assign(new Error(`No versions available for ${name}`), {
+          code: "ENOVERSIONS",
+          name,
+          type,
+          wanted,
+          before,
+          versions: Object.keys(versions)
+        });
+      }
+      const sortSemverOpt = { loose: true };
+      const entries = allEntries.filter(([ver]) => semver2.satisfies(ver, range, { loose: true })).sort((a, b) => {
+        const [vera, mania] = a;
+        const [verb, manib] = b;
+        const notavoida = !shouldAvoid(vera, avoid);
+        const notavoidb = !shouldAvoid(verb, avoid);
+        const notrestra = !restricted[vera];
+        const notrestrb = !restricted[verb];
+        const notstagea = !staged[vera];
+        const notstageb = !staged[verb];
+        const notdepra = !mania.deprecated;
+        const notdeprb = !manib.deprecated;
+        const enginea = engineOk(mania, npmVersion, nodeVersion);
+        const engineb = engineOk(manib, npmVersion, nodeVersion);
+        return notavoidb - notavoida || notrestrb - notrestra || notstageb - notstagea || (notdeprb && engineb) - (notdepra && enginea) || engineb - enginea || notdeprb - notdepra || semver2.rcompare(vera, verb, sortSemverOpt);
+      });
+      return decorateAvoid(entries[0] && entries[0][1], avoid);
+    }, "pickManifest");
+    module2.exports = (packument, wanted, opts = {}) => {
+      const mani = pickManifest(packument, wanted, opts);
+      const picked = mani && normalizeBin(mani);
+      const policyRestrictions = packument.policyRestrictions;
+      const restricted = policyRestrictions && policyRestrictions.versions || {};
+      if (picked && !restricted[picked.version]) {
+        return picked;
+      }
+      const { before = null, defaultTag = "latest" } = opts;
+      const bstr = before ? new Date(before).toLocaleString() : "";
+      const { name } = packument;
+      const pckg = `${name}@${wanted}` + (before ? ` with a date before ${bstr}` : "");
+      const isForbidden = picked && !!restricted[picked.version];
+      const polMsg = isForbidden ? policyRestrictions.message : "";
+      const msg = !isForbidden ? `No matching version found for ${pckg}.` : `Could not download ${pckg} due to policy violations:
+${polMsg}`;
+      const code = isForbidden ? "E403" : "ETARGET";
+      throw Object.assign(new Error(msg), {
+        code,
+        type: npa.resolve(packument.name, wanted).type,
+        wanted,
+        versions: Object.keys(packument.versions ?? {}),
+        name,
+        distTags: packument["dist-tags"],
+        defaultTag
+      });
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/clone.js
+var require_clone = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/clone.js"(exports2, module2) {
+    var shallowHosts = /* @__PURE__ */ new Set([
+      "github.com",
+      "gist.github.com",
+      "gitlab.com",
+      "bitbucket.com",
+      "bitbucket.org"
+    ]);
+    var { parse } = require("url");
+    var path = require("path");
+    var getRevs = require_revs();
+    var spawn = require_spawn();
+    var { isWindows } = require_utils();
+    var pickManifest = require_lib9();
+    var fs = require("fs/promises");
+    module2.exports = (repo, ref = "HEAD", target = null, opts = {}) => getRevs(repo, opts).then((revs) => clone(
+      repo,
+      revs,
+      ref,
+      resolveRef(revs, ref, opts),
+      target || defaultTarget(repo, opts.cwd),
+      opts
+    ));
+    var maybeShallow = /* @__PURE__ */ __name((repo, opts) => {
+      if (opts.gitShallow === false || opts.gitShallow) {
+        return opts.gitShallow;
+      }
+      return shallowHosts.has(parse(repo).host);
+    }, "maybeShallow");
+    var defaultTarget = /* @__PURE__ */ __name((repo, cwd = process.cwd()) => path.resolve(cwd, path.basename(repo.replace(/[/\\]?\.git$/, ""))), "defaultTarget");
+    var clone = /* @__PURE__ */ __name((repo, revs, ref, revDoc, target, opts) => {
+      if (!revDoc) {
+        return unresolved(repo, ref, target, opts);
+      }
+      if (revDoc.sha === revs.refs.HEAD.sha) {
+        return plain(repo, revDoc, target, opts);
+      }
+      if (revDoc.type === "tag" || revDoc.type === "branch") {
+        return branch(repo, revDoc, target, opts);
+      }
+      return other(repo, revDoc, target, opts);
+    }, "clone");
+    var resolveRef = /* @__PURE__ */ __name((revs, ref, opts) => {
+      const { spec = {} } = opts;
+      ref = spec.gitCommittish || ref;
+      if (!revs) {
+        return null;
+      }
+      if (spec.gitRange) {
+        return pickManifest(revs, spec.gitRange, opts);
+      }
+      if (!ref) {
+        return revs.refs.HEAD;
+      }
+      if (revs.refs[ref]) {
+        return revs.refs[ref];
+      }
+      if (revs.shas[ref]) {
+        return revs.refs[revs.shas[ref][0]];
+      }
+      return null;
+    }, "resolveRef");
+    var other = /* @__PURE__ */ __name((repo, revDoc, target, opts) => {
+      const shallow = maybeShallow(repo, opts);
+      const fetchOrigin = ["fetch", "origin", revDoc.rawRef].concat(shallow ? ["--depth=1"] : []);
+      const git = /* @__PURE__ */ __name((args) => spawn(args, { ...opts, cwd: target }), "git");
+      return fs.mkdir(target, { recursive: true }).then(() => git(["init"])).then(() => isWindows(opts) ? git(["config", "--local", "--add", "core.longpaths", "true"]) : null).then(() => git(["remote", "add", "origin", repo])).then(() => git(fetchOrigin)).then(() => git(["checkout", revDoc.sha])).then(() => updateSubmodules(target, opts)).then(() => revDoc.sha);
+    }, "other");
+    var branch = /* @__PURE__ */ __name((repo, revDoc, target, opts) => {
+      const args = [
+        "clone",
+        "-b",
+        revDoc.ref,
+        repo,
+        target,
+        "--recurse-submodules"
+      ];
+      if (maybeShallow(repo, opts)) {
+        args.push("--depth=1");
+      }
+      if (isWindows(opts)) {
+        args.push("--config", "core.longpaths=true");
+      }
+      return spawn(args, opts).then(() => revDoc.sha);
+    }, "branch");
+    var plain = /* @__PURE__ */ __name((repo, revDoc, target, opts) => {
+      const args = [
+        "clone",
+        repo,
+        target,
+        "--recurse-submodules"
+      ];
+      if (maybeShallow(repo, opts)) {
+        args.push("--depth=1");
+      }
+      if (isWindows(opts)) {
+        args.push("--config", "core.longpaths=true");
+      }
+      return spawn(args, opts).then(() => revDoc.sha);
+    }, "plain");
+    var updateSubmodules = /* @__PURE__ */ __name(async (target, opts) => {
+      const hasSubmodules = await fs.stat(`${target}/.gitmodules`).then(() => true).catch(() => false);
+      if (!hasSubmodules) {
+        return null;
+      }
+      return spawn([
+        "submodule",
+        "update",
+        "-q",
+        "--init",
+        "--recursive"
+      ], { ...opts, cwd: target });
+    }, "updateSubmodules");
+    var unresolved = /* @__PURE__ */ __name((repo, ref, target, opts) => {
+      const lp = isWindows(opts) ? ["--config", "core.longpaths=true"] : [];
+      const cloneArgs = ["clone", "--mirror", "-q", repo, target + "/.git"];
+      const git = /* @__PURE__ */ __name((args) => spawn(args, { ...opts, cwd: target }), "git");
+      return fs.mkdir(target, { recursive: true }).then(() => git(cloneArgs.concat(lp))).then(() => git(["init"])).then(() => git(["checkout", ref])).then(() => updateSubmodules(target, opts)).then(() => git(["rev-parse", "--revs-only", "HEAD"])).then(({ stdout }) => stdout.trim());
+    }, "unresolved");
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/is.js
+var require_is = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/is.js"(exports2, module2) {
+    var { stat } = require("fs/promises");
+    module2.exports = ({ cwd = process.cwd() } = {}) => stat(cwd + "/.git").then(() => true, () => false);
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/find.js
+var require_find = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/find.js"(exports2, module2) {
+    var is = require_is();
+    var { dirname } = require("path");
+    module2.exports = async ({ cwd = process.cwd(), root } = {}) => {
+      while (true) {
+        if (await is({ cwd })) {
+          return cwd;
+        }
+        const next = dirname(cwd);
+        if (cwd === root || cwd === next) {
+          return null;
+        }
+        cwd = next;
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/is-clean.js
+var require_is_clean = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/is-clean.js"(exports2, module2) {
+    var spawn = require_spawn();
+    module2.exports = (opts = {}) => spawn(["status", "--porcelain=v1", "-uno"], opts).then((res) => !res.stdout.trim().split(/\r?\n+/).map((l) => l.trim()).filter((l) => l).length);
+  }
+});
+
+// node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/index.js
+var require_lib10 = __commonJS({
+  "node_modules/.pnpm/@npmcli+git@6.0.3/node_modules/@npmcli/git/lib/index.js"(exports2, module2) {
+    module2.exports = {
+      clone: require_clone(),
+      revs: require_revs(),
+      spawn: require_spawn(),
+      is: require_is(),
+      find: require_find(),
+      isClean: require_is_clean(),
+      errors: require_errors()
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/normalize.js
+var require_normalize = __commonJS({
+  "node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/normalize.js"(exports2, module2) {
+    var valid = require_valid();
+    var clean = require_clean();
+    var fs = require("node:fs/promises");
+    var path = require("node:path");
+    var { log } = require_lib2();
+    var moduleBuiltin = require("node:module");
+    var _hostedGitInfo;
+    function lazyHostedGitInfo() {
+      if (!_hostedGitInfo) {
+        _hostedGitInfo = require_lib3();
+      }
+      return _hostedGitInfo;
+    }
+    __name(lazyHostedGitInfo, "lazyHostedGitInfo");
+    var _glob;
+    function lazyLoadGlob() {
+      if (!_glob) {
+        _glob = require_commonjs7().glob;
+      }
+      return _glob;
+    }
+    __name(lazyLoadGlob, "lazyLoadGlob");
+    function normalizePackageBin(pkg, changes) {
+      if (pkg.bin) {
+        if (typeof pkg.bin === "string" && pkg.name) {
+          changes?.push('"bin" was converted to an object');
+          pkg.bin = { [pkg.name]: pkg.bin };
+        } else if (Array.isArray(pkg.bin)) {
+          changes?.push('"bin" was converted to an object');
+          pkg.bin = pkg.bin.reduce((acc, k) => {
+            acc[path.basename(k)] = k;
+            return acc;
+          }, {});
+        }
+        if (typeof pkg.bin === "object") {
+          for (const binKey in pkg.bin) {
+            if (typeof pkg.bin[binKey] !== "string") {
+              delete pkg.bin[binKey];
+              changes?.push(`removed invalid "bin[${binKey}]"`);
+              continue;
+            }
+            const base = path.basename(secureAndUnixifyPath(binKey));
+            if (!base) {
+              delete pkg.bin[binKey];
+              changes?.push(`removed invalid "bin[${binKey}]"`);
+              continue;
+            }
+            const binTarget = secureAndUnixifyPath(pkg.bin[binKey]);
+            if (!binTarget) {
+              delete pkg.bin[binKey];
+              changes?.push(`removed invalid "bin[${binKey}]"`);
+              continue;
+            }
+            if (base !== binKey) {
+              delete pkg.bin[binKey];
+              changes?.push(`"bin[${binKey}]" was renamed to "bin[${base}]"`);
+            }
+            if (binTarget !== pkg.bin[binKey]) {
+              changes?.push(`"bin[${base}]" script name ${binTarget} was invalid and removed`);
+            }
+            pkg.bin[base] = binTarget;
+          }
+          if (Object.keys(pkg.bin).length === 0) {
+            changes?.push('empty "bin" was removed');
+            delete pkg.bin;
+          }
+          return pkg;
+        }
+      }
+      delete pkg.bin;
+    }
+    __name(normalizePackageBin, "normalizePackageBin");
+    function normalizePackageMan(pkg, changes) {
+      if (pkg.man) {
+        const mans = [];
+        for (const man of Array.isArray(pkg.man) ? pkg.man : [pkg.man]) {
+          if (typeof man !== "string") {
+            changes?.push(`removed invalid "man [${man}]"`);
+          } else {
+            mans.push(secureAndUnixifyPath(man));
+          }
+        }
+        if (!mans.length) {
+          changes?.push('empty "man" was removed');
+        } else {
+          pkg.man = mans;
+          return pkg;
+        }
+      }
+      delete pkg.man;
+    }
+    __name(normalizePackageMan, "normalizePackageMan");
+    function isCorrectlyEncodedName(spec) {
+      return !spec.match(/[/@\s+%:]/) && spec === encodeURIComponent(spec);
+    }
+    __name(isCorrectlyEncodedName, "isCorrectlyEncodedName");
+    function isValidScopedPackageName(spec) {
+      if (spec.charAt(0) !== "@") {
+        return false;
+      }
+      const rest = spec.slice(1).split("/");
+      if (rest.length !== 2) {
+        return false;
+      }
+      return rest[0] && rest[1] && rest[0] === encodeURIComponent(rest[0]) && rest[1] === encodeURIComponent(rest[1]);
+    }
+    __name(isValidScopedPackageName, "isValidScopedPackageName");
+    function unixifyPath(ref) {
+      return ref.replace(/\\|:/g, "/");
+    }
+    __name(unixifyPath, "unixifyPath");
+    function secureAndUnixifyPath(ref) {
+      const secured = unixifyPath(path.join(".", path.join("/", unixifyPath(ref))));
+      return secured.startsWith("./") ? "" : secured;
+    }
+    __name(secureAndUnixifyPath, "secureAndUnixifyPath");
+    function syncSteps(pkg, { strict, steps, changes, allowLegacyCase }) {
+      const data = pkg.content;
+      const pkgId = `${data.name ?? ""}@${data.version ?? ""}`;
+      if (steps.includes("fixName") || steps.includes("fixNameField") || steps.includes("normalizeData")) {
+        if (!data.name && !strict) {
+          changes?.push('Missing "name" field was set to an empty string');
+          data.name = "";
+        } else {
+          if (typeof data.name !== "string") {
+            throw new Error("name field must be a string.");
+          }
+          if (!strict) {
+            const name = data.name.trim();
+            if (data.name !== name) {
+              changes?.push(`Whitespace was trimmed from "name"`);
+              data.name = name;
+            }
+          }
+          if (data.name.startsWith(".") || !(isValidScopedPackageName(data.name) || isCorrectlyEncodedName(data.name)) || strict && !allowLegacyCase && data.name !== data.name.toLowerCase() || data.name.toLowerCase() === "node_modules" || data.name.toLowerCase() === "favicon.ico") {
+            throw new Error("Invalid name: " + JSON.stringify(data.name));
+          }
+        }
+      }
+      if (steps.includes("fixName")) {
+        if (moduleBuiltin.builtinModules.includes(data.name)) {
+          log.warn("package-json", pkgId, `Package name "${data.name}" conflicts with a Node.js built-in module name`);
+        }
+      }
+      if (steps.includes("fixVersionField") || steps.includes("normalizeData")) {
+        const loose = !strict;
+        if (!data.version) {
+          data.version = "";
+        } else {
+          if (!valid(data.version, loose)) {
+            throw new Error(`Invalid version: "${data.version}"`);
+          }
+          const version = clean(data.version, loose);
+          if (version !== data.version) {
+            changes?.push(`"version" was cleaned and set to "${version}"`);
+            data.version = version;
+          }
+        }
+      }
+      if (steps.includes("_attributes")) {
+        for (const key in data) {
+          if (key.startsWith("_")) {
+            changes?.push(`"${key}" was removed`);
+            delete pkg.content[key];
+          }
+        }
+      }
+      if (steps.includes("_id")) {
+        if (data.name && data.version) {
+          changes?.push(`"_id" was set to ${pkgId}`);
+          data._id = pkgId;
+        }
+      }
+      if (steps.includes("bundledDependencies")) {
+        if (data.bundleDependencies === void 0 && data.bundledDependencies !== void 0) {
+          data.bundleDependencies = data.bundledDependencies;
+          changes?.push(`Deleted incorrect "bundledDependencies"`);
+        }
+        delete data.bundledDependencies;
+      }
+      if (steps.includes("bundleDependencies")) {
+        const bd = data.bundleDependencies;
+        if (bd === false && !steps.includes("bundleDependenciesDeleteFalse")) {
+          changes?.push(`"bundleDependencies" was changed from "false" to "[]"`);
+          data.bundleDependencies = [];
+        } else if (bd === true) {
+          changes?.push(`"bundleDependencies" was auto-populated from "dependencies"`);
+          data.bundleDependencies = Object.keys(data.dependencies || {});
+        } else if (bd && typeof bd === "object") {
+          if (!Array.isArray(bd)) {
+            changes?.push(`"bundleDependencies" was changed from an object to an array`);
+            data.bundleDependencies = Object.keys(bd);
+          }
+        } else if ("bundleDependencies" in data) {
+          changes?.push(`"bundleDependencies" was removed`);
+          delete data.bundleDependencies;
+        }
+      }
+      if (steps.includes("optionalDedupe")) {
+        if (data.dependencies && data.optionalDependencies && typeof data.optionalDependencies === "object") {
+          for (const name in data.optionalDependencies) {
+            changes?.push(`optionalDependencies."${name}" was removed`);
+            delete data.dependencies[name];
+          }
+          if (!Object.keys(data.dependencies).length) {
+            changes?.push(`Empty "optionalDependencies" was removed`);
+            delete data.dependencies;
+          }
+        }
+      }
+      if ((steps.includes("scripts") || steps.includes("scriptpath")) && data.scripts !== void 0) {
+        const spre = /^(\.[/\\])?node_modules[/\\].bin[\\/]/;
+        if (typeof data.scripts === "object") {
+          for (const name in data.scripts) {
+            if (typeof data.scripts[name] !== "string") {
+              delete data.scripts[name];
+              changes?.push(`Invalid scripts."${name}" was removed`);
+            } else if (steps.includes("scriptpath") && spre.test(data.scripts[name])) {
+              data.scripts[name] = data.scripts[name].replace(spre, "");
+              changes?.push(`scripts entry "${name}" was fixed to remove node_modules/.bin reference`);
+            }
+          }
+        } else {
+          changes?.push(`Removed invalid "scripts"`);
+          delete data.scripts;
+        }
+      }
+      if (steps.includes("funding")) {
+        if (data.funding && typeof data.funding === "string") {
+          data.funding = { url: data.funding };
+          changes?.push(`"funding" was changed to an object with a url attribute`);
+        }
+      }
+      if (steps.includes("fixRepositoryField") || steps.includes("normalizeData")) {
+        if (data.repositories) {
+          changes?.push(`"repository" was set to the first entry in "repositories" (${data.repository})`);
+          data.repository = data.repositories[0];
+        }
+        if (data.repository) {
+          if (typeof data.repository === "string") {
+            changes?.push('"repository" was changed from a string to an object');
+            data.repository = {
+              type: "git",
+              url: data.repository
+            };
+          }
+          if (data.repository.url) {
+            const hosted = lazyHostedGitInfo().fromUrl(data.repository.url);
+            let r;
+            if (hosted) {
+              if (hosted.getDefaultRepresentation() === "shortcut") {
+                r = hosted.https();
+              } else {
+                r = hosted.toString();
+              }
+              if (r !== data.repository.url) {
+                changes?.push(`"repository.url" was normalized to "${r}"`);
+                data.repository.url = r;
+              }
+            }
+          }
+        }
+      }
+      if (steps.includes("fixDependencies") || steps.includes("normalizeData")) {
+        for (const type of ["dependencies", "devDependencies", "optionalDependencies"]) {
+          if (data[type]) {
+            let secondWarning = true;
+            if (typeof data[type] === "string") {
+              changes?.push(`"${type}" was converted from a string into an object`);
+              data[type] = data[type].trim().split(/[\n\r\s\t ,]+/);
+              secondWarning = false;
+            }
+            if (Array.isArray(data[type])) {
+              if (secondWarning) {
+                changes?.push(`"${type}" was converted from an array into an object`);
+              }
+              const o = {};
+              for (const d of data[type]) {
+                if (typeof d === "string") {
+                  const dep = d.trim().split(/(:?[@\s><=])/);
+                  const dn = dep.shift();
+                  const dv = dep.join("").replace(/^@/, "").trim();
+                  o[dn] = dv;
+                }
+              }
+              data[type] = o;
+            }
+          }
+        }
+        for (const deps of ["dependencies", "devDependencies"]) {
+          if (deps in data) {
+            if (!data[deps] || typeof data[deps] !== "object") {
+              changes?.push(`Removed invalid "${deps}"`);
+              delete data[deps];
+            } else {
+              for (const d in data[deps]) {
+                const r = data[deps][d];
+                if (typeof r !== "string") {
+                  changes?.push(`Removed invalid "${deps}.${d}"`);
+                  delete data[deps][d];
+                }
+                const hosted = lazyHostedGitInfo().fromUrl(data[deps][d])?.toString();
+                if (hosted && hosted !== data[deps][d]) {
+                  changes?.push(`Normalized git reference to "${deps}.${d}"`);
+                  data[deps][d] = hosted.toString();
+                }
+              }
+            }
+          }
+        }
+      }
+      if (steps.includes("normalizeData")) {
+        const { normalizeData } = require_normalize_data();
+        normalizeData(data, changes);
+      }
+    }
+    __name(syncSteps, "syncSteps");
+    async function asyncSteps(pkg, { steps, root, changes }) {
+      const data = pkg.content;
+      const scripts = data.scripts || {};
+      const pkgId = `${data.name ?? ""}@${data.version ?? ""}`;
+      if (steps.includes("gypfile")) {
+        if (!scripts.install && !scripts.preinstall && data.gypfile !== false) {
+          const files = await lazyLoadGlob()("*.gyp", { cwd: pkg.path });
+          if (files.length) {
+            scripts.install = "node-gyp rebuild";
+            data.scripts = scripts;
+            data.gypfile = true;
+            changes?.push(`"scripts.install" was set to "node-gyp rebuild"`);
+            changes?.push(`"gypfile" was set to "true"`);
+          }
+        }
+      }
+      if (steps.includes("serverjs") && !scripts.start) {
+        try {
+          await fs.access(path.join(pkg.path, "server.js"));
+          scripts.start = "node server.js";
+          data.scripts = scripts;
+          changes?.push('"scripts.start" was set to "node server.js"');
+        } catch {
+        }
+      }
+      if (steps.includes("authors") && !data.contributors) {
+        try {
+          const authorData = await fs.readFile(path.join(pkg.path, "AUTHORS"), "utf8");
+          const authors = authorData.split(/\r?\n/g).map((line) => line.replace(/^\s*#.*$/, "").trim()).filter((line) => line);
+          data.contributors = authors;
+          changes?.push('"contributors" was auto-populated with the contents of the "AUTHORS" file');
+        } catch {
+        }
+      }
+      if (steps.includes("readme") && !data.readme) {
+        const mdre = /\.m?a?r?k?d?o?w?n?$/i;
+        const files = await lazyLoadGlob()("{README,README.*}", {
+          cwd: pkg.path,
+          nocase: true,
+          mark: true
+        });
+        let readmeFile;
+        for (const file of files) {
+          if (!file.endsWith(path.sep)) {
+            if (file.match(mdre)) {
+              readmeFile = file;
+              break;
+            }
+            if (file.endsWith("README")) {
+              readmeFile = file;
+            }
+          }
+        }
+        if (readmeFile) {
+          const readmeData = await fs.readFile(path.join(pkg.path, readmeFile), "utf8");
+          data.readme = readmeData;
+          data.readmeFilename = readmeFile;
+          changes?.push(`"readme" was set to the contents of ${readmeFile}`);
+          changes?.push(`"readmeFilename" was set to ${readmeFile}`);
+        }
+        if (!data.readme) {
+          data.readme = "ERROR: No README data found!";
+        }
+      }
+      if (steps.includes("mans")) {
+        if (data.directories?.man && !data.man) {
+          const manDir = secureAndUnixifyPath(data.directories.man);
+          const cwd = path.resolve(pkg.path, manDir);
+          const files = await lazyLoadGlob()("**/*.[0-9]", { cwd });
+          data.man = files.map(
+            (man) => path.relative(pkg.path, path.join(cwd, man)).split(path.sep).join("/")
+          );
+        }
+        normalizePackageMan(data, changes);
+      }
+      if (steps.includes("binDir") && data.directories?.bin && !data.bin) {
+        const binPath = secureAndUnixifyPath(data.directories.bin);
+        const bins = await lazyLoadGlob()("**", { cwd: path.resolve(pkg.path, binPath) });
+        data.bin = bins.reduce((acc, binFile) => {
+          if (binFile && !binFile.startsWith(".")) {
+            const binName = path.basename(binFile);
+            acc[binName] = `${binPath}/${secureAndUnixifyPath(binFile)}`;
+          }
+          return acc;
+        }, {});
+      } else if (steps.includes("bin") || steps.includes("binDir") || steps.includes("binRefs")) {
+        normalizePackageBin(data, changes);
+      }
+      if (steps.includes("gitHead") && !data.gitHead) {
+        const git = require_lib10();
+        const gitRoot = await git.find({ cwd: pkg.path, root });
+        let head;
+        if (gitRoot) {
+          try {
+            head = await fs.readFile(path.resolve(gitRoot, ".git/HEAD"), "utf8");
+          } catch (err) {
+          }
+        }
+        let headData;
+        if (head) {
+          if (head.startsWith("ref: ")) {
+            const headRef = head.replace(/^ref: /, "").trim();
+            const headFile = path.resolve(gitRoot, ".git", headRef);
+            try {
+              headData = await fs.readFile(headFile, "utf8");
+              headData = headData.replace(/^ref: /, "").trim();
+            } catch (err) {
+            }
+            if (!headData) {
+              const packFile = path.resolve(gitRoot, ".git/packed-refs");
+              try {
+                let refs = await fs.readFile(packFile, "utf8");
+                if (refs) {
+                  refs = refs.split("\n");
+                  for (let i = 0; i < refs.length; i++) {
+                    const match = refs[i].match(/^([0-9a-f]{40}) (.+)$/);
+                    if (match && match[2].trim() === headRef) {
+                      headData = match[1];
+                      break;
+                    }
+                  }
+                }
+              } catch {
+              }
+            }
+          } else {
+            headData = head.trim();
+          }
+        }
+        if (headData) {
+          data.gitHead = headData;
+        }
+      }
+      if (steps.includes("fillTypes")) {
+        const index = data.main || "index.js";
+        if (typeof index !== "string") {
+          throw new TypeError('The "main" attribute must be of type string.');
+        }
+        const extless = path.join(path.dirname(index), path.basename(index, path.extname(index)));
+        const dts = `./${extless}.d.ts`;
+        const hasDTSFields = "types" in data || "typings" in data;
+        if (!hasDTSFields) {
+          try {
+            await fs.access(path.join(pkg.path, dts));
+            data.types = dts.split(path.sep).join("/");
+          } catch {
+          }
+        }
+      }
+      if (steps.includes("binRefs") && data.bin instanceof Object) {
+        for (const key in data.bin) {
+          try {
+            await fs.access(path.resolve(pkg.path, data.bin[key]));
+          } catch {
+            log.warn("package-json", pkgId, `No bin file found at ${data.bin[key]}`);
+          }
+        }
+      }
+    }
+    __name(asyncSteps, "asyncSteps");
+    async function normalize(pkg, opts) {
+      if (!pkg.content) {
+        throw new Error("Can not normalize without content");
+      }
+      await asyncSteps(pkg, opts);
+      syncSteps(pkg, opts);
+    }
+    __name(normalize, "normalize");
+    function syncNormalize(pkg, opts) {
+      syncSteps(pkg, opts);
+    }
+    __name(syncNormalize, "syncNormalize");
+    module2.exports = { normalize, syncNormalize };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/read-package.js
+var require_read_package = __commonJS({
+  "node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/read-package.js"(exports2, module2) {
+    var { readFile } = require("fs/promises");
+    var parseJSON = require_lib();
+    async function read(filename) {
+      try {
+        const data = await readFile(filename, "utf8");
+        return data;
+      } catch (err) {
+        err.message = `Could not read package.json: ${err}`;
+        throw err;
+      }
+    }
+    __name(read, "read");
+    function parse(data) {
+      try {
+        const content = parseJSON(data);
+        return content;
+      } catch (err) {
+        err.message = `Invalid package.json: ${err}`;
+        throw err;
+      }
+    }
+    __name(parse, "parse");
+    async function readPackage(filename) {
+      const data = await read(filename);
+      const content = parse(data);
+      return content;
+    }
+    __name(readPackage, "readPackage");
+    module2.exports = {
+      read,
+      parse,
+      readPackage
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/sort.js
+var require_sort2 = __commonJS({
+  "node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/sort.js"(exports2, module2) {
+    function packageSort(json) {
+      const {
+        name,
+        version,
+        private: isPrivate,
+        description,
+        keywords,
+        homepage,
+        bugs,
+        repository,
+        funding,
+        license,
+        author,
+        maintainers,
+        contributors,
+        type,
+        imports,
+        exports: exports3,
+        main,
+        browser,
+        types,
+        bin,
+        man,
+        directories,
+        files,
+        workspaces,
+        scripts,
+        config,
+        dependencies,
+        devDependencies,
+        peerDependencies,
+        peerDependenciesMeta,
+        optionalDependencies,
+        bundledDependencies,
+        bundleDependencies,
+        engines,
+        os: os2,
+        cpu,
+        publishConfig,
+        devEngines,
+        licenses,
+        overrides,
+        ...rest
+      } = json;
+      return {
+        ...typeof name !== "undefined" ? { name } : {},
+        ...typeof version !== "undefined" ? { version } : {},
+        ...typeof isPrivate !== "undefined" ? { private: isPrivate } : {},
+        ...typeof description !== "undefined" ? { description } : {},
+        ...typeof keywords !== "undefined" ? { keywords } : {},
+        ...typeof homepage !== "undefined" ? { homepage } : {},
+        ...typeof bugs !== "undefined" ? { bugs } : {},
+        ...typeof repository !== "undefined" ? { repository } : {},
+        ...typeof funding !== "undefined" ? { funding } : {},
+        ...typeof license !== "undefined" ? { license } : {},
+        ...typeof author !== "undefined" ? { author } : {},
+        ...typeof maintainers !== "undefined" ? { maintainers } : {},
+        ...typeof contributors !== "undefined" ? { contributors } : {},
+        ...typeof type !== "undefined" ? { type } : {},
+        ...typeof imports !== "undefined" ? { imports } : {},
+        ...typeof exports3 !== "undefined" ? { exports: exports3 } : {},
+        ...typeof main !== "undefined" ? { main } : {},
+        ...typeof browser !== "undefined" ? { browser } : {},
+        ...typeof types !== "undefined" ? { types } : {},
+        ...typeof bin !== "undefined" ? { bin } : {},
+        ...typeof man !== "undefined" ? { man } : {},
+        ...typeof directories !== "undefined" ? { directories } : {},
+        ...typeof files !== "undefined" ? { files } : {},
+        ...typeof workspaces !== "undefined" ? { workspaces } : {},
+        ...typeof scripts !== "undefined" ? { scripts } : {},
+        ...typeof config !== "undefined" ? { config } : {},
+        ...typeof dependencies !== "undefined" ? { dependencies } : {},
+        ...typeof devDependencies !== "undefined" ? { devDependencies } : {},
+        ...typeof peerDependencies !== "undefined" ? { peerDependencies } : {},
+        ...typeof peerDependenciesMeta !== "undefined" ? { peerDependenciesMeta } : {},
+        ...typeof optionalDependencies !== "undefined" ? { optionalDependencies } : {},
+        ...typeof bundledDependencies !== "undefined" ? { bundledDependencies } : {},
+        ...typeof bundleDependencies !== "undefined" ? { bundleDependencies } : {},
+        ...typeof engines !== "undefined" ? { engines } : {},
+        ...typeof os2 !== "undefined" ? { os: os2 } : {},
+        ...typeof cpu !== "undefined" ? { cpu } : {},
+        ...typeof publishConfig !== "undefined" ? { publishConfig } : {},
+        ...typeof devEngines !== "undefined" ? { devEngines } : {},
+        ...typeof licenses !== "undefined" ? { licenses } : {},
+        ...typeof overrides !== "undefined" ? { overrides } : {},
+        ...rest
+      };
+    }
+    __name(packageSort, "packageSort");
+    module2.exports = {
+      packageSort
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/index.js
+var require_lib11 = __commonJS({
+  "node_modules/.pnpm/@npmcli+package-json@7.0.0/node_modules/@npmcli/package-json/lib/index.js"(exports2, module2) {
+    var { readFile, writeFile } = require("node:fs/promises");
+    var { resolve } = require("node:path");
+    var parseJSON = require_lib();
+    var updateDeps = require_update_dependencies();
+    var updateScripts = require_update_scripts();
+    var updateWorkspaces = require_update_workspaces();
+    var { normalize, syncNormalize } = require_normalize();
+    var { read, parse } = require_read_package();
+    var { packageSort } = require_sort2();
+    var knownSteps = /* @__PURE__ */ new Set([
+      updateDeps,
+      updateScripts,
+      updateWorkspaces
+    ]);
+    var knownKeys = /* @__PURE__ */ new Set([
+      ...updateDeps.knownKeys,
+      "scripts",
+      "workspaces"
+    ]);
+    var PackageJson = class _PackageJson {
+      static {
+        __name(this, "PackageJson");
+      }
+      // npm pkg fix
+      static fixSteps = Object.freeze([
+        "binRefs",
+        "bundleDependencies",
+        "fixName",
+        "fixVersionField",
+        "fixRepositoryField",
+        "fixDependencies",
+        "devDependencies",
+        "scriptpath"
+      ]);
+      static normalizeSteps = Object.freeze([
+        "_id",
+        "_attributes",
+        "bundledDependencies",
+        "bundleDependencies",
+        "optionalDedupe",
+        "scripts",
+        "funding",
+        "bin",
+        "binDir"
+      ]);
+      static prepareSteps = Object.freeze([
+        "_id",
+        "_attributes",
+        "bundledDependencies",
+        "bundleDependencies",
+        "bundleDependenciesDeleteFalse",
+        "gypfile",
+        "serverjs",
+        "scriptpath",
+        "authors",
+        "readme",
+        "mans",
+        "binDir",
+        "gitHead",
+        "fillTypes",
+        "normalizeData",
+        "binRefs"
+      ]);
+      // create a new empty package.json, so we can save at the given path even
+      // though we didn't start from a parsed file
+      static async create(path, opts = {}) {
+        const p = new _PackageJson();
+        await p.create(path);
+        if (opts.data) {
+          return p.update(opts.data);
+        }
+        return p;
+      }
+      // Loads a package.json at given path and JSON parses
+      static async load(path, opts = {}) {
+        const p = new _PackageJson();
+        if (!opts.create) {
+          return p.load(path);
+        }
+        try {
+          return await p.load(path);
+        } catch (err) {
+          if (!err.message.startsWith("Could not read package.json")) {
+            throw err;
+          }
+          return await p.create(path);
+        }
+      }
+      // npm pkg fix
+      static async fix(path, opts) {
+        const p = new _PackageJson();
+        await p.load(path, true);
+        return p.fix(opts);
+      }
+      // read-package-json compatible behavior
+      static async prepare(path, opts) {
+        const p = new _PackageJson();
+        await p.load(path, true);
+        return p.prepare(opts);
+      }
+      // read-package-json-fast compatible behavior
+      static async normalize(path, opts) {
+        const p = new _PackageJson();
+        await p.load(path);
+        return p.normalize(opts);
+      }
+      #path;
+      #manifest;
+      #readFileContent = "";
+      #canSave = true;
+      // Load content from given path
+      async load(path, parseIndex) {
+        this.#path = path;
+        let parseErr;
+        try {
+          this.#readFileContent = await read(this.filename);
+        } catch (err) {
+          if (!parseIndex) {
+            throw err;
+          }
+          parseErr = err;
+        }
+        if (parseErr) {
+          const indexFile = resolve(this.path, "index.js");
+          let indexFileContent;
+          try {
+            indexFileContent = await readFile(indexFile, "utf8");
+          } catch (err) {
+            throw parseErr;
+          }
+          try {
+            this.fromComment(indexFileContent);
+          } catch (err) {
+            throw parseErr;
+          }
+          this.#canSave = false;
+          return this;
+        }
+        return this.fromJSON(this.#readFileContent);
+      }
+      // Load data from a JSON string/buffer
+      fromJSON(data) {
+        this.#manifest = parse(data);
+        return this;
+      }
+      // Manually set data from an existing object
+      fromContent(data) {
+        if (!data || typeof data !== "object") {
+          throw new Error("Content data must be an object");
+        }
+        this.#manifest = data;
+        this.#canSave = false;
+        return this;
+      }
+      // Load data from a comment
+      // /**package { "name": "foo", "version": "1.2.3", ... } **/
+      fromComment(data) {
+        data = data.split(/^\/\*\*package(?:\s|$)/m);
+        if (data.length < 2) {
+          throw new Error("File has no package in comments");
+        }
+        data = data[1];
+        data = data.split(/\*\*\/$/m);
+        if (data.length < 2) {
+          throw new Error("File has no package in comments");
+        }
+        data = data[0];
+        data = data.replace(/^\s*\*/mg, "");
+        this.#manifest = parseJSON(data);
+        return this;
+      }
+      get content() {
+        return this.#manifest;
+      }
+      get path() {
+        return this.#path;
+      }
+      get filename() {
+        if (this.path) {
+          return resolve(this.path, "package.json");
+        }
+        return void 0;
+      }
+      create(path) {
+        this.#path = path;
+        this.#manifest = {};
+        return this;
+      }
+      // This should be the ONLY way to set content in the manifest
+      update(content) {
+        if (!this.content) {
+          throw new Error("Can not update without content.  Please `load` or `create`");
+        }
+        for (const step of knownSteps) {
+          this.#manifest = step({ content, originalContent: this.content });
+        }
+        for (const [key, value] of Object.entries(content)) {
+          if (!knownKeys.has(key)) {
+            this.content[key] = value;
+          }
+        }
+        return this;
+      }
+      async save({ sort } = {}) {
+        if (!this.#canSave) {
+          throw new Error("No package.json to save to");
+        }
+        const {
+          [Symbol.for("indent")]: indent,
+          [Symbol.for("newline")]: newline,
+          ...rest
+        } = this.content;
+        const format = indent === void 0 ? "  " : indent;
+        const eol = newline === void 0 ? "\n" : newline;
+        const content = sort ? packageSort(rest) : rest;
+        const fileContent = `${JSON.stringify(content, null, format)}
+`.replace(/\n/g, eol);
+        if (fileContent.trim() !== this.#readFileContent.trim()) {
+          const written = await writeFile(this.filename, fileContent);
+          this.#readFileContent = fileContent;
+          return written;
+        }
+      }
+      // steps is NOT overrideable here because this is a legacy function that's not being used in new places
+      syncNormalize(opts = {}) {
+        opts.steps = this.constructor.normalizeSteps.filter((s) => s !== "_attributes");
+        syncNormalize(this, opts);
+        return this;
+      }
+      async normalize(opts = {}) {
+        if (!opts.steps) {
+          opts.steps = this.constructor.normalizeSteps;
+        }
+        await normalize(this, opts);
+        return this;
+      }
+      async prepare(opts = {}) {
+        if (!opts.steps) {
+          opts.steps = this.constructor.prepareSteps;
+        }
+        await normalize(this, opts);
+        return this;
+      }
+      async fix(opts = {}) {
+        opts.steps = this.constructor.fixSteps;
+        await normalize(this, opts);
+        return this;
+      }
+    };
+    module2.exports = PackageJson;
+  }
+});
+
+// node_modules/.pnpm/minipass-collect@2.0.1/node_modules/minipass-collect/index.js
+var require_minipass_collect = __commonJS({
+  "node_modules/.pnpm/minipass-collect@2.0.1/node_modules/minipass-collect/index.js"(exports2, module2) {
+    var { Minipass } = require_commonjs5();
+    var _data = Symbol("_data");
+    var _length = Symbol("_length");
+    var Collect = class extends Minipass {
+      static {
+        __name(this, "Collect");
+      }
+      constructor(options) {
+        super(options);
+        this[_data] = [];
+        this[_length] = 0;
+      }
+      write(chunk, encoding, cb) {
+        if (typeof encoding === "function")
+          cb = encoding, encoding = "utf8";
+        if (!encoding)
+          encoding = "utf8";
+        const c = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, encoding);
+        this[_data].push(c);
+        this[_length] += c.length;
+        if (cb)
+          cb();
+        return true;
+      }
+      end(chunk, encoding, cb) {
+        if (typeof chunk === "function")
+          cb = chunk, chunk = null;
+        if (typeof encoding === "function")
+          cb = encoding, encoding = "utf8";
+        if (chunk)
+          this.write(chunk, encoding);
+        const result = Buffer.concat(this[_data], this[_length]);
+        super.write(result);
+        return super.end(cb);
+      }
+    };
+    module2.exports = Collect;
+    var CollectPassThrough = class extends Minipass {
+      static {
+        __name(this, "CollectPassThrough");
+      }
+      constructor(options) {
+        super(options);
+        this[_data] = [];
+        this[_length] = 0;
+      }
+      write(chunk, encoding, cb) {
+        if (typeof encoding === "function")
+          cb = encoding, encoding = "utf8";
+        if (!encoding)
+          encoding = "utf8";
+        const c = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, encoding);
+        this[_data].push(c);
+        this[_length] += c.length;
+        return super.write(chunk, encoding, cb);
+      }
+      end(chunk, encoding, cb) {
+        if (typeof chunk === "function")
+          cb = chunk, chunk = null;
+        if (typeof encoding === "function")
+          cb = encoding, encoding = "utf8";
+        if (chunk)
+          this.write(chunk, encoding);
+        const result = Buffer.concat(this[_data], this[_length]);
+        this.emit("collect", result);
+        return super.end(cb);
+      }
+    };
+    module2.exports.PassThrough = CollectPassThrough;
+  }
+});
+
+// node_modules/.pnpm/minipass-pipeline@1.2.4_patch_hash=ace05cec4a6d3ccfb43c804a925683b0809e4c50067530985ee7795826d942a4/node_modules/minipass-pipeline/index.js
+var require_minipass_pipeline = __commonJS({
+  "node_modules/.pnpm/minipass-pipeline@1.2.4_patch_hash=ace05cec4a6d3ccfb43c804a925683b0809e4c50067530985ee7795826d942a4/node_modules/minipass-pipeline/index.js"(exports2, module2) {
+    var { Minipass } = require_commonjs5();
+    var EE = require("events");
+    var isStream = /* @__PURE__ */ __name((s) => s && s instanceof EE && (typeof s.pipe === "function" || // readable
+    typeof s.write === "function" && typeof s.end === "function"), "isStream");
+    var _head = Symbol("_head");
+    var _tail = Symbol("_tail");
+    var _linkStreams = Symbol("_linkStreams");
+    var _setHead = Symbol("_setHead");
+    var _setTail = Symbol("_setTail");
+    var _onError = Symbol("_onError");
+    var _onData = Symbol("_onData");
+    var _onEnd = Symbol("_onEnd");
+    var _onDrain = Symbol("_onDrain");
+    var _streams = Symbol("_streams");
+    var Pipeline = class extends Minipass {
+      static {
+        __name(this, "Pipeline");
+      }
+      constructor(opts, ...streams) {
+        if (isStream(opts)) {
+          streams.unshift(opts);
+          opts = {};
+        }
+        super(opts);
+        this[_streams] = [];
+        if (streams.length)
+          this.push(...streams);
+      }
+      [_linkStreams](streams) {
+        return streams.reduce((src, dest) => {
+          src.on("error", (er) => dest.emit("error", er));
+          src.pipe(dest);
+          return dest;
+        });
+      }
+      push(...streams) {
+        this[_streams].push(...streams);
+        if (this[_tail])
+          streams.unshift(this[_tail]);
+        const linkRet = this[_linkStreams](streams);
+        this[_setTail](linkRet);
+        if (!this[_head])
+          this[_setHead](streams[0]);
+      }
+      unshift(...streams) {
+        this[_streams].unshift(...streams);
+        if (this[_head])
+          streams.push(this[_head]);
+        const linkRet = this[_linkStreams](streams);
+        this[_setHead](streams[0]);
+        if (!this[_tail])
+          this[_setTail](linkRet);
+      }
+      destroy(er) {
+        this[_streams].forEach((s) => typeof s.destroy === "function" && s.destroy());
+        return super.destroy(er);
+      }
+      // readable interface -> tail
+      [_setTail](stream) {
+        this[_tail] = stream;
+        stream.on("error", (er) => this[_onError](stream, er));
+        stream.on("data", (chunk) => this[_onData](stream, chunk));
+        stream.on("end", () => this[_onEnd](stream));
+        stream.on("finish", () => this[_onEnd](stream));
+      }
+      // errors proxied down the pipeline
+      // they're considered part of the "read" interface
+      [_onError](stream, er) {
+        if (stream === this[_tail])
+          this.emit("error", er);
+      }
+      [_onData](stream, chunk) {
+        if (stream === this[_tail])
+          super.write(chunk);
+      }
+      [_onEnd](stream) {
+        if (stream === this[_tail])
+          super.end();
+      }
+      pause() {
+        super.pause();
+        return this[_tail] && this[_tail].pause && this[_tail].pause();
+      }
+      // NB: Minipass calls its internal private [RESUME] method during
+      // pipe drains, to avoid hazards where stream.resume() is overridden.
+      // Thus, we need to listen to the resume *event*, not override the
+      // resume() method, and proxy *that* to the tail.
+      emit(ev, ...args) {
+        if (ev === "resume" && this[_tail] && this[_tail].resume)
+          this[_tail].resume();
+        return super.emit(ev, ...args);
+      }
+      // writable interface -> head
+      [_setHead](stream) {
+        this[_head] = stream;
+        stream.on("drain", () => this[_onDrain](stream));
+      }
+      [_onDrain](stream) {
+        if (stream === this[_head])
+          this.emit("drain");
+      }
+      write(chunk, enc, cb) {
+        return this[_head].write(chunk, enc, cb) && (this.flowing || this.bufferLength === 0);
+      }
+      end(chunk, enc, cb) {
+        this[_head].end(chunk, enc, cb);
+        return this;
+      }
+    };
+    module2.exports = Pipeline;
+  }
+});
+
+// node_modules/.pnpm/ssri@12.0.0/node_modules/ssri/lib/index.js
+var require_lib12 = __commonJS({
+  "node_modules/.pnpm/ssri@12.0.0/node_modules/ssri/lib/index.js"(exports2, module2) {
+    "use strict";
+    var crypto = require("crypto");
+    var { Minipass } = require_commonjs5();
+    var SPEC_ALGORITHMS = ["sha512", "sha384", "sha256"];
+    var DEFAULT_ALGORITHMS = ["sha512"];
+    var BASE64_REGEX = /^[a-z0-9+/]+(?:=?=?)$/i;
+    var SRI_REGEX = /^([a-z0-9]+)-([^?]+)([?\S*]*)$/;
+    var STRICT_SRI_REGEX = /^([a-z0-9]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)?$/;
+    var VCHAR_REGEX = /^[\x21-\x7E]+$/;
+    var getOptString = /* @__PURE__ */ __name((options) => options?.length ? `?${options.join("?")}` : "", "getOptString");
+    var IntegrityStream = class extends Minipass {
+      static {
+        __name(this, "IntegrityStream");
+      }
+      #emittedIntegrity;
+      #emittedSize;
+      #emittedVerified;
+      constructor(opts) {
+        super();
+        this.size = 0;
+        this.opts = opts;
+        this.#getOptions();
+        if (opts?.algorithms) {
+          this.algorithms = [...opts.algorithms];
+        } else {
+          this.algorithms = [...DEFAULT_ALGORITHMS];
+        }
+        if (this.algorithm !== null && !this.algorithms.includes(this.algorithm)) {
+          this.algorithms.push(this.algorithm);
+        }
+        this.hashes = this.algorithms.map(crypto.createHash);
+      }
+      #getOptions() {
+        this.sri = this.opts?.integrity ? parse(this.opts?.integrity, this.opts) : null;
+        this.expectedSize = this.opts?.size;
+        if (!this.sri) {
+          this.algorithm = null;
+        } else if (this.sri.isHash) {
+          this.goodSri = true;
+          this.algorithm = this.sri.algorithm;
+        } else {
+          this.goodSri = !this.sri.isEmpty();
+          this.algorithm = this.sri.pickAlgorithm(this.opts);
+        }
+        this.digests = this.goodSri ? this.sri[this.algorithm] : null;
+        this.optString = getOptString(this.opts?.options);
+      }
+      on(ev, handler) {
+        if (ev === "size" && this.#emittedSize) {
+          return handler(this.#emittedSize);
+        }
+        if (ev === "integrity" && this.#emittedIntegrity) {
+          return handler(this.#emittedIntegrity);
+        }
+        if (ev === "verified" && this.#emittedVerified) {
+          return handler(this.#emittedVerified);
+        }
+        return super.on(ev, handler);
+      }
+      emit(ev, data) {
+        if (ev === "end") {
+          this.#onEnd();
+        }
+        return super.emit(ev, data);
+      }
+      write(data) {
+        this.size += data.length;
+        this.hashes.forEach((h) => h.update(data));
+        return super.write(data);
+      }
+      #onEnd() {
+        if (!this.goodSri) {
+          this.#getOptions();
+        }
+        const newSri = parse(this.hashes.map((h, i) => {
+          return `${this.algorithms[i]}-${h.digest("base64")}${this.optString}`;
+        }).join(" "), this.opts);
+        const match = this.goodSri && newSri.match(this.sri, this.opts);
+        if (typeof this.expectedSize === "number" && this.size !== this.expectedSize) {
+          const err = new Error(`stream size mismatch when checking ${this.sri}.
+  Wanted: ${this.expectedSize}
+  Found: ${this.size}`);
+          err.code = "EBADSIZE";
+          err.found = this.size;
+          err.expected = this.expectedSize;
+          err.sri = this.sri;
+          this.emit("error", err);
+        } else if (this.sri && !match) {
+          const err = new Error(`${this.sri} integrity checksum failed when using ${this.algorithm}: wanted ${this.digests} but got ${newSri}. (${this.size} bytes)`);
+          err.code = "EINTEGRITY";
+          err.found = newSri;
+          err.expected = this.digests;
+          err.algorithm = this.algorithm;
+          err.sri = this.sri;
+          this.emit("error", err);
+        } else {
+          this.#emittedSize = this.size;
+          this.emit("size", this.size);
+          this.#emittedIntegrity = newSri;
+          this.emit("integrity", newSri);
+          if (match) {
+            this.#emittedVerified = match;
+            this.emit("verified", match);
+          }
+        }
+      }
+    };
+    var Hash = class {
+      static {
+        __name(this, "Hash");
+      }
+      get isHash() {
+        return true;
+      }
+      constructor(hash, opts) {
+        const strict = opts?.strict;
+        this.source = hash.trim();
+        this.digest = "";
+        this.algorithm = "";
+        this.options = [];
+        const match = this.source.match(
+          strict ? STRICT_SRI_REGEX : SRI_REGEX
+        );
+        if (!match) {
+          return;
+        }
+        if (strict && !SPEC_ALGORITHMS.includes(match[1])) {
+          return;
+        }
+        this.algorithm = match[1];
+        this.digest = match[2];
+        const rawOpts = match[3];
+        if (rawOpts) {
+          this.options = rawOpts.slice(1).split("?");
+        }
+      }
+      hexDigest() {
+        return this.digest && Buffer.from(this.digest, "base64").toString("hex");
+      }
+      toJSON() {
+        return this.toString();
+      }
+      match(integrity, opts) {
+        const other = parse(integrity, opts);
+        if (!other) {
+          return false;
+        }
+        if (other.isIntegrity) {
+          const algo = other.pickAlgorithm(opts, [this.algorithm]);
+          if (!algo) {
+            return false;
+          }
+          const foundHash = other[algo].find((hash) => hash.digest === this.digest);
+          if (foundHash) {
+            return foundHash;
+          }
+          return false;
+        }
+        return other.digest === this.digest ? other : false;
+      }
+      toString(opts) {
+        if (opts?.strict) {
+          if (!// The spec has very restricted productions for algorithms.
+          // https://www.w3.org/TR/CSP2/#source-list-syntax
+          (SPEC_ALGORITHMS.includes(this.algorithm) && // Usually, if someone insists on using a "different" base64, we
+          // leave it as-is, since there's multiple standards, and the
+          // specified is not a URL-safe variant.
+          // https://www.w3.org/TR/CSP2/#base64_value
+          this.digest.match(BASE64_REGEX) && // Option syntax is strictly visual chars.
+          // https://w3c.github.io/webappsec-subresource-integrity/#grammardef-option-expression
+          // https://tools.ietf.org/html/rfc5234#appendix-B.1
+          this.options.every((opt) => opt.match(VCHAR_REGEX)))) {
+            return "";
+          }
+        }
+        return `${this.algorithm}-${this.digest}${getOptString(this.options)}`;
+      }
+    };
+    function integrityHashToString(toString, sep, opts, hashes) {
+      const toStringIsNotEmpty = toString !== "";
+      let shouldAddFirstSep = false;
+      let complement = "";
+      const lastIndex = hashes.length - 1;
+      for (let i = 0; i < lastIndex; i++) {
+        const hashString = Hash.prototype.toString.call(hashes[i], opts);
+        if (hashString) {
+          shouldAddFirstSep = true;
+          complement += hashString;
+          complement += sep;
+        }
+      }
+      const finalHashString = Hash.prototype.toString.call(hashes[lastIndex], opts);
+      if (finalHashString) {
+        shouldAddFirstSep = true;
+        complement += finalHashString;
+      }
+      if (toStringIsNotEmpty && shouldAddFirstSep) {
+        return toString + sep + complement;
+      }
+      return toString + complement;
+    }
+    __name(integrityHashToString, "integrityHashToString");
+    var Integrity = class {
+      static {
+        __name(this, "Integrity");
+      }
+      get isIntegrity() {
+        return true;
+      }
+      toJSON() {
+        return this.toString();
+      }
+      isEmpty() {
+        return Object.keys(this).length === 0;
+      }
+      toString(opts) {
+        let sep = opts?.sep || " ";
+        let toString = "";
+        if (opts?.strict) {
+          sep = sep.replace(/\S+/g, " ");
+          for (const hash of SPEC_ALGORITHMS) {
+            if (this[hash]) {
+              toString = integrityHashToString(toString, sep, opts, this[hash]);
+            }
+          }
+        } else {
+          for (const hash of Object.keys(this)) {
+            toString = integrityHashToString(toString, sep, opts, this[hash]);
+          }
+        }
+        return toString;
+      }
+      concat(integrity, opts) {
+        const other = typeof integrity === "string" ? integrity : stringify(integrity, opts);
+        return parse(`${this.toString(opts)} ${other}`, opts);
+      }
+      hexDigest() {
+        return parse(this, { single: true }).hexDigest();
+      }
+      // add additional hashes to an integrity value, but prevent
+      // *changing* an existing integrity hash.
+      merge(integrity, opts) {
+        const other = parse(integrity, opts);
+        for (const algo in other) {
+          if (this[algo]) {
+            if (!this[algo].find((hash) => other[algo].find((otherhash) => hash.digest === otherhash.digest))) {
+              throw new Error("hashes do not match, cannot update integrity");
+            }
+          } else {
+            this[algo] = other[algo];
+          }
+        }
+      }
+      match(integrity, opts) {
+        const other = parse(integrity, opts);
+        if (!other) {
+          return false;
+        }
+        const algo = other.pickAlgorithm(opts, Object.keys(this));
+        return !!algo && this[algo] && other[algo] && this[algo].find(
+          (hash) => other[algo].find(
+            (otherhash) => hash.digest === otherhash.digest
+          )
+        ) || false;
+      }
+      // Pick the highest priority algorithm present, optionally also limited to a
+      // set of hashes found in another integrity.  When limiting it may return
+      // nothing.
+      pickAlgorithm(opts, hashes) {
+        const pickAlgorithm = opts?.pickAlgorithm || getPrioritizedHash;
+        const keys = Object.keys(this).filter((k) => {
+          if (hashes?.length) {
+            return hashes.includes(k);
+          }
+          return true;
+        });
+        if (keys.length) {
+          return keys.reduce((acc, algo) => pickAlgorithm(acc, algo) || acc);
+        }
+        return null;
+      }
+    };
+    module2.exports.parse = parse;
+    function parse(sri, opts) {
+      if (!sri) {
+        return null;
+      }
+      if (typeof sri === "string") {
+        return _parse(sri, opts);
+      } else if (sri.algorithm && sri.digest) {
+        const fullSri = new Integrity();
+        fullSri[sri.algorithm] = [sri];
+        return _parse(stringify(fullSri, opts), opts);
+      } else {
+        return _parse(stringify(sri, opts), opts);
+      }
+    }
+    __name(parse, "parse");
+    function _parse(integrity, opts) {
+      if (opts?.single) {
+        return new Hash(integrity, opts);
+      }
+      const hashes = integrity.trim().split(/\s+/).reduce((acc, string) => {
+        const hash = new Hash(string, opts);
+        if (hash.algorithm && hash.digest) {
+          const algo = hash.algorithm;
+          if (!acc[algo]) {
+            acc[algo] = [];
+          }
+          acc[algo].push(hash);
+        }
+        return acc;
+      }, new Integrity());
+      return hashes.isEmpty() ? null : hashes;
+    }
+    __name(_parse, "_parse");
+    module2.exports.stringify = stringify;
+    function stringify(obj, opts) {
+      if (obj.algorithm && obj.digest) {
+        return Hash.prototype.toString.call(obj, opts);
+      } else if (typeof obj === "string") {
+        return stringify(parse(obj, opts), opts);
+      } else {
+        return Integrity.prototype.toString.call(obj, opts);
+      }
+    }
+    __name(stringify, "stringify");
+    module2.exports.fromHex = fromHex;
+    function fromHex(hexDigest, algorithm, opts) {
+      const optString = getOptString(opts?.options);
+      return parse(
+        `${algorithm}-${Buffer.from(hexDigest, "hex").toString("base64")}${optString}`,
+        opts
+      );
+    }
+    __name(fromHex, "fromHex");
+    module2.exports.fromData = fromData;
+    function fromData(data, opts) {
+      const algorithms = opts?.algorithms || [...DEFAULT_ALGORITHMS];
+      const optString = getOptString(opts?.options);
+      return algorithms.reduce((acc, algo) => {
+        const digest = crypto.createHash(algo).update(data).digest("base64");
+        const hash = new Hash(
+          `${algo}-${digest}${optString}`,
+          opts
+        );
+        if (hash.algorithm && hash.digest) {
+          const hashAlgo = hash.algorithm;
+          if (!acc[hashAlgo]) {
+            acc[hashAlgo] = [];
+          }
+          acc[hashAlgo].push(hash);
+        }
+        return acc;
+      }, new Integrity());
+    }
+    __name(fromData, "fromData");
+    module2.exports.fromStream = fromStream;
+    function fromStream(stream, opts) {
+      const istream = integrityStream(opts);
+      return new Promise((resolve, reject) => {
+        stream.pipe(istream);
+        stream.on("error", reject);
+        istream.on("error", reject);
+        let sri;
+        istream.on("integrity", (s) => {
+          sri = s;
+        });
+        istream.on("end", () => resolve(sri));
+        istream.resume();
+      });
+    }
+    __name(fromStream, "fromStream");
+    module2.exports.checkData = checkData;
+    function checkData(data, sri, opts) {
+      sri = parse(sri, opts);
+      if (!sri || !Object.keys(sri).length) {
+        if (opts?.error) {
+          throw Object.assign(
+            new Error("No valid integrity hashes to check against"),
+            {
+              code: "EINTEGRITY"
+            }
+          );
+        } else {
+          return false;
+        }
+      }
+      const algorithm = sri.pickAlgorithm(opts);
+      const digest = crypto.createHash(algorithm).update(data).digest("base64");
+      const newSri = parse({ algorithm, digest });
+      const match = newSri.match(sri, opts);
+      opts = opts || {};
+      if (match || !opts.error) {
+        return match;
+      } else if (typeof opts.size === "number" && data.length !== opts.size) {
+        const err = new Error(`data size mismatch when checking ${sri}.
+  Wanted: ${opts.size}
+  Found: ${data.length}`);
+        err.code = "EBADSIZE";
+        err.found = data.length;
+        err.expected = opts.size;
+        err.sri = sri;
+        throw err;
+      } else {
+        const err = new Error(`Integrity checksum failed when using ${algorithm}: Wanted ${sri}, but got ${newSri}. (${data.length} bytes)`);
+        err.code = "EINTEGRITY";
+        err.found = newSri;
+        err.expected = sri;
+        err.algorithm = algorithm;
+        err.sri = sri;
+        throw err;
+      }
+    }
+    __name(checkData, "checkData");
+    module2.exports.checkStream = checkStream;
+    function checkStream(stream, sri, opts) {
+      opts = opts || /* @__PURE__ */ Object.create(null);
+      opts.integrity = sri;
+      sri = parse(sri, opts);
+      if (!sri || !Object.keys(sri).length) {
+        return Promise.reject(Object.assign(
+          new Error("No valid integrity hashes to check against"),
+          {
+            code: "EINTEGRITY"
+          }
+        ));
+      }
+      const checker = integrityStream(opts);
+      return new Promise((resolve, reject) => {
+        stream.pipe(checker);
+        stream.on("error", reject);
+        checker.on("error", reject);
+        let verified;
+        checker.on("verified", (s) => {
+          verified = s;
+        });
+        checker.on("end", () => resolve(verified));
+        checker.resume();
+      });
+    }
+    __name(checkStream, "checkStream");
+    module2.exports.integrityStream = integrityStream;
+    function integrityStream(opts = /* @__PURE__ */ Object.create(null)) {
+      return new IntegrityStream(opts);
+    }
+    __name(integrityStream, "integrityStream");
+    module2.exports.create = createIntegrity;
+    function createIntegrity(opts) {
+      const algorithms = opts?.algorithms || [...DEFAULT_ALGORITHMS];
+      const optString = getOptString(opts?.options);
+      const hashes = algorithms.map(crypto.createHash);
+      return {
+        update: /* @__PURE__ */ __name(function(chunk, enc) {
+          hashes.forEach((h) => h.update(chunk, enc));
+          return this;
+        }, "update"),
+        digest: /* @__PURE__ */ __name(function() {
+          const integrity = algorithms.reduce((acc, algo) => {
+            const digest = hashes.shift().digest("base64");
+            const hash = new Hash(
+              `${algo}-${digest}${optString}`,
+              opts
+            );
+            if (hash.algorithm && hash.digest) {
+              const hashAlgo = hash.algorithm;
+              if (!acc[hashAlgo]) {
+                acc[hashAlgo] = [];
+              }
+              acc[hashAlgo].push(hash);
+            }
+            return acc;
+          }, new Integrity());
+          return integrity;
+        }, "digest")
+      };
+    }
+    __name(createIntegrity, "createIntegrity");
+    var NODE_HASHES = crypto.getHashes();
+    var DEFAULT_PRIORITY = [
+      "md5",
+      "whirlpool",
+      "sha1",
+      "sha224",
+      "sha256",
+      "sha384",
+      "sha512",
+      // TODO - it's unclear _which_ of these Node will actually use as its name
+      //        for the algorithm, so we guesswork it based on the OpenSSL names.
+      "sha3",
+      "sha3-256",
+      "sha3-384",
+      "sha3-512",
+      "sha3_256",
+      "sha3_384",
+      "sha3_512"
+    ].filter((algo) => NODE_HASHES.includes(algo));
+    function getPrioritizedHash(algo1, algo2) {
+      return DEFAULT_PRIORITY.indexOf(algo1.toLowerCase()) >= DEFAULT_PRIORITY.indexOf(algo2.toLowerCase()) ? algo1 : algo2;
+    }
+    __name(getPrioritizedHash, "getPrioritizedHash");
+  }
+});
+
+// node_modules/.pnpm/imurmurhash@0.1.4/node_modules/imurmurhash/imurmurhash.js
+var require_imurmurhash = __commonJS({
+  "node_modules/.pnpm/imurmurhash@0.1.4/node_modules/imurmurhash/imurmurhash.js"(exports2, module2) {
+    (function() {
+      var cache;
+      function MurmurHash3(key, seed) {
+        var m = this instanceof MurmurHash3 ? this : cache;
+        m.reset(seed);
+        if (typeof key === "string" && key.length > 0) {
+          m.hash(key);
+        }
+        if (m !== this) {
+          return m;
+        }
+      }
+      __name(MurmurHash3, "MurmurHash3");
+      ;
+      MurmurHash3.prototype.hash = function(key) {
+        var h1, k1, i, top, len;
+        len = key.length;
+        this.len += len;
+        k1 = this.k1;
+        i = 0;
+        switch (this.rem) {
+          case 0:
+            k1 ^= len > i ? key.charCodeAt(i++) & 65535 : 0;
+          case 1:
+            k1 ^= len > i ? (key.charCodeAt(i++) & 65535) << 8 : 0;
+          case 2:
+            k1 ^= len > i ? (key.charCodeAt(i++) & 65535) << 16 : 0;
+          case 3:
+            k1 ^= len > i ? (key.charCodeAt(i) & 255) << 24 : 0;
+            k1 ^= len > i ? (key.charCodeAt(i++) & 65280) >> 8 : 0;
+        }
+        this.rem = len + this.rem & 3;
+        len -= this.rem;
+        if (len > 0) {
+          h1 = this.h1;
+          while (1) {
+            k1 = k1 * 11601 + (k1 & 65535) * 3432906752 & 4294967295;
+            k1 = k1 << 15 | k1 >>> 17;
+            k1 = k1 * 13715 + (k1 & 65535) * 461832192 & 4294967295;
+            h1 ^= k1;
+            h1 = h1 << 13 | h1 >>> 19;
+            h1 = h1 * 5 + 3864292196 & 4294967295;
+            if (i >= len) {
+              break;
+            }
+            k1 = key.charCodeAt(i++) & 65535 ^ (key.charCodeAt(i++) & 65535) << 8 ^ (key.charCodeAt(i++) & 65535) << 16;
+            top = key.charCodeAt(i++);
+            k1 ^= (top & 255) << 24 ^ (top & 65280) >> 8;
+          }
+          k1 = 0;
+          switch (this.rem) {
+            case 3:
+              k1 ^= (key.charCodeAt(i + 2) & 65535) << 16;
+            case 2:
+              k1 ^= (key.charCodeAt(i + 1) & 65535) << 8;
+            case 1:
+              k1 ^= key.charCodeAt(i) & 65535;
+          }
+          this.h1 = h1;
+        }
+        this.k1 = k1;
+        return this;
+      };
+      MurmurHash3.prototype.result = function() {
+        var k1, h1;
+        k1 = this.k1;
+        h1 = this.h1;
+        if (k1 > 0) {
+          k1 = k1 * 11601 + (k1 & 65535) * 3432906752 & 4294967295;
+          k1 = k1 << 15 | k1 >>> 17;
+          k1 = k1 * 13715 + (k1 & 65535) * 461832192 & 4294967295;
+          h1 ^= k1;
+        }
+        h1 ^= this.len;
+        h1 ^= h1 >>> 16;
+        h1 = h1 * 51819 + (h1 & 65535) * 2246770688 & 4294967295;
+        h1 ^= h1 >>> 13;
+        h1 = h1 * 44597 + (h1 & 65535) * 3266445312 & 4294967295;
+        h1 ^= h1 >>> 16;
+        return h1 >>> 0;
+      };
+      MurmurHash3.prototype.reset = function(seed) {
+        this.h1 = typeof seed === "number" ? seed : 0;
+        this.rem = this.k1 = this.len = 0;
+        return this;
+      };
+      cache = new MurmurHash3();
+      if (typeof module2 != "undefined") {
+        module2.exports = MurmurHash3;
+      } else {
+        this.MurmurHash3 = MurmurHash3;
+      }
+    })();
+  }
+});
+
+// node_modules/.pnpm/unique-slug@5.0.0/node_modules/unique-slug/lib/index.js
+var require_lib13 = __commonJS({
+  "node_modules/.pnpm/unique-slug@5.0.0/node_modules/unique-slug/lib/index.js"(exports2, module2) {
+    "use strict";
+    var MurmurHash3 = require_imurmurhash();
+    module2.exports = function(uniq) {
+      if (uniq) {
+        var hash = new MurmurHash3(uniq);
+        return ("00000000" + hash.result().toString(16)).slice(-8);
+      } else {
+        return (Math.random().toString(16) + "0000000").slice(2, 10);
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/unique-filename@4.0.0/node_modules/unique-filename/lib/index.js
+var require_lib14 = __commonJS({
+  "node_modules/.pnpm/unique-filename@4.0.0/node_modules/unique-filename/lib/index.js"(exports2, module2) {
+    var path = require("path");
+    var uniqueSlug = require_lib13();
+    module2.exports = function(filepath, prefix, uniq) {
+      return path.join(filepath, (prefix ? prefix + "-" : "") + uniqueSlug(uniq));
+    };
+  }
+});
+
+// node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/package.json
+var require_package = __commonJS({
+  "node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/package.json"(exports2, module2) {
+    module2.exports = {
+      name: "cacache",
+      version: "20.0.1",
+      "cache-version": {
+        content: "2",
+        index: "5"
+      },
+      description: "Fast, fault-tolerant, cross-platform, disk-based, data-agnostic, content-addressable cache.",
+      main: "lib/index.js",
+      files: [
+        "bin/",
+        "lib/"
+      ],
+      scripts: {
+        test: "tap",
+        snap: "tap",
+        coverage: "tap",
+        "test-docker": 'docker run -it --rm --name pacotest -v "$PWD":/tmp -w /tmp node:latest npm test',
+        lint: "npm run eslint",
+        npmclilint: "npmcli-lint",
+        lintfix: "npm run eslint -- --fix",
+        postsnap: "npm run lintfix --",
+        postlint: "template-oss-check",
+        posttest: "npm run lint",
+        "template-oss-apply": "template-oss-apply --force",
+        eslint: 'eslint "**/*.{js,cjs,ts,mjs,jsx,tsx}"'
+      },
+      repository: {
+        type: "git",
+        url: "git+https://github.com/npm/cacache.git"
+      },
+      keywords: [
+        "cache",
+        "caching",
+        "content-addressable",
+        "sri",
+        "sri hash",
+        "subresource integrity",
+        "cache",
+        "storage",
+        "store",
+        "file store",
+        "filesystem",
+        "disk cache",
+        "disk storage"
+      ],
+      license: "ISC",
+      dependencies: {
+        "@npmcli/fs": "^4.0.0",
+        "fs-minipass": "^3.0.0",
+        glob: "^11.0.3",
+        "lru-cache": "^11.1.0",
+        minipass: "^7.0.3",
+        "minipass-collect": "^2.0.1",
+        "minipass-flush": "^1.0.5",
+        "minipass-pipeline": "^1.2.4",
+        "p-map": "^7.0.2",
+        ssri: "^12.0.0",
+        "unique-filename": "^4.0.0"
+      },
+      devDependencies: {
+        "@npmcli/eslint-config": "^5.0.0",
+        "@npmcli/template-oss": "4.25.0",
+        tap: "^16.0.0"
+      },
+      engines: {
+        node: "^20.17.0 || >=22.9.0"
+      },
+      templateOSS: {
+        "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+        windowsCI: false,
+        version: "4.25.0",
+        publish: "true"
+      },
+      author: "GitHub Inc.",
+      tap: {
+        "nyc-arg": [
+          "--exclude",
+          "tap-snapshots/**"
+        ]
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/util/hash-to-segments.js
+var require_hash_to_segments = __commonJS({
+  "node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/util/hash-to-segments.js"(exports2, module2) {
+    "use strict";
+    module2.exports = hashToSegments;
+    function hashToSegments(hash) {
+      return [hash.slice(0, 2), hash.slice(2, 4), hash.slice(4)];
+    }
+    __name(hashToSegments, "hashToSegments");
+  }
+});
+
+// node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/content/path.js
+var require_path = __commonJS({
+  "node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/content/path.js"(exports2, module2) {
+    "use strict";
+    var contentVer = require_package()["cache-version"].content;
+    var hashToSegments = require_hash_to_segments();
+    var path = require("path");
+    var ssri = require_lib12();
+    module2.exports = contentPath;
+    function contentPath(cache, integrity) {
+      const sri = ssri.parse(integrity, { single: true });
+      return path.join(
+        contentDir(cache),
+        sri.algorithm,
+        ...hashToSegments(sri.hexDigest())
+      );
+    }
+    __name(contentPath, "contentPath");
+    module2.exports.contentDir = contentDir;
+    function contentDir(cache) {
+      return path.join(cache, `content-v${contentVer}`);
+    }
+    __name(contentDir, "contentDir");
+  }
+});
+
+// node_modules/.pnpm/@npmcli+fs@4.0.0/node_modules/@npmcli/fs/lib/common/get-options.js
+var require_get_options = __commonJS({
+  "node_modules/.pnpm/@npmcli+fs@4.0.0/node_modules/@npmcli/fs/lib/common/get-options.js"(exports2, module2) {
+    var getOptions = /* @__PURE__ */ __name((input, { copy, wrap }) => {
+      const result = {};
+      if (input && typeof input === "object") {
+        for (const prop of copy) {
+          if (input[prop] !== void 0) {
+            result[prop] = input[prop];
+          }
+        }
+      } else {
+        result[wrap] = input;
+      }
+      return result;
+    }, "getOptions");
+    module2.exports = getOptions;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+fs@4.0.0/node_modules/@npmcli/fs/lib/common/node.js
+var require_node = __commonJS({
+  "node_modules/.pnpm/@npmcli+fs@4.0.0/node_modules/@npmcli/fs/lib/common/node.js"(exports2, module2) {
+    var semver2 = require_semver2();
+    var satisfies = /* @__PURE__ */ __name((range) => {
+      return semver2.satisfies(process.version, range, { includePrerelease: true });
+    }, "satisfies");
+    module2.exports = {
+      satisfies
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+fs@4.0.0/node_modules/@npmcli/fs/lib/cp/errors.js
+var require_errors2 = __commonJS({
+  "node_modules/.pnpm/@npmcli+fs@4.0.0/node_modules/@npmcli/fs/lib/cp/errors.js"(exports2, module2) {
+    "use strict";
+    var { inspect } = require("util");
+    var SystemError = class {
+      static {
+        __name(this, "SystemError");
+      }
+      constructor(code, prefix, context) {
+        let message = `${prefix}: ${context.syscall} returned ${context.code} (${context.message})`;
+        if (context.path !== void 0) {
+          message += ` ${context.path}`;
+        }
+        if (context.dest !== void 0) {
+          message += ` => ${context.dest}`;
+        }
+        this.code = code;
+        Object.defineProperties(this, {
+          name: {
+            value: "SystemError",
+            enumerable: false,
+            writable: true,
+            configurable: true
+          },
+          message: {
+            value: message,
+            enumerable: false,
+            writable: true,
+            configurable: true
+          },
+          info: {
+            value: context,
+            enumerable: true,
+            configurable: true,
+            writable: false
+          },
+          errno: {
+            get() {
+              return context.errno;
+            },
+            set(value) {
+              context.errno = value;
+            },
+            enumerable: true,
+            configurable: true
+          },
+          syscall: {
+            get() {
+              return context.syscall;
+            },
+            set(value) {
+              context.syscall = value;
+            },
+            enumerable: true,
+            configurable: true
+          }
+        });
+        if (context.path !== void 0) {
+          Object.defineProperty(this, "path", {
+            get() {
+              return context.path;
+            },
+            set(value) {
+              context.path = value;
+            },
+            enumerable: true,
+            configurable: true
+          });
+        }
+        if (context.dest !== void 0) {
+          Object.defineProperty(this, "dest", {
+            get() {
+              return context.dest;
+            },
+            set(value) {
+              context.dest = value;
+            },
+            enumerable: true,
+            configurable: true
+          });
+        }
+      }
+      toString() {
+        return `${this.name} [${this.code}]: ${this.message}`;
+      }
+      [Symbol.for("nodejs.util.inspect.custom")](_recurseTimes, ctx) {
+        return inspect(this, {
+          ...ctx,
+          getters: true,
+          customInspect: false
+        });
+      }
+    };
+    function E(code, message) {
+      module2.exports[code] = class NodeError extends SystemError {
+        static {
+          __name(this, "NodeError");
+        }
+        constructor(ctx) {
+          super(code, message, ctx);
+        }
+      };
+    }
+    __name(E, "E");
+    E("ERR_FS_CP_DIR_TO_NON_DIR", "Cannot overwrite directory with non-directory");
+    E("ERR_FS_CP_EEXIST", "Target already exists");
+    E("ERR_FS_CP_EINVAL", "Invalid src or dest");
+    E("ERR_FS_CP_FIFO_PIPE", "Cannot copy a FIFO pipe");
+    E("ERR_FS_CP_NON_DIR_TO_DIR", "Cannot overwrite non-directory with directory");
+    E("ERR_FS_CP_SOCKET", "Cannot copy a socket file");
+    E("ERR_FS_CP_SYMLINK_TO_SUBDIRECTORY", "Cannot overwrite symlink in subdirectory of self");
+    E("ERR_FS_CP_UNKNOWN", "Cannot copy an unknown file type");
+    E("ERR_FS_EISDIR", "Path is a directory");
+    module2.exports.ERR_INVALID_ARG_TYPE = class ERR_INVALID_ARG_TYPE extends Error {
+      static {
+        __name(this, "ERR_INVALID_ARG_TYPE");
+      }
+      constructor(name, expected, actual) {
+        super();
+        this.code = "ERR_INVALID_ARG_TYPE";
+        this.message = `The ${name} argument must be ${expected}. Received ${typeof actual}`;
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+fs@4.0.0/node_modules/@npmcli/fs/lib/cp/polyfill.js
+var require_polyfill = __commonJS({
+  "node_modules/.pnpm/@npmcli+fs@4.0.0/node_modules/@npmcli/fs/lib/cp/polyfill.js"(exports2, module2) {
+    "use strict";
+    var {
+      ERR_FS_CP_DIR_TO_NON_DIR,
+      ERR_FS_CP_EEXIST,
+      ERR_FS_CP_EINVAL,
+      ERR_FS_CP_FIFO_PIPE,
+      ERR_FS_CP_NON_DIR_TO_DIR,
+      ERR_FS_CP_SOCKET,
+      ERR_FS_CP_SYMLINK_TO_SUBDIRECTORY,
+      ERR_FS_CP_UNKNOWN,
+      ERR_FS_EISDIR,
+      ERR_INVALID_ARG_TYPE
+    } = require_errors2();
+    var {
+      constants: {
+        errno: {
+          EEXIST,
+          EISDIR,
+          EINVAL,
+          ENOTDIR
+        }
+      }
+    } = require("os");
+    var {
+      chmod,
+      copyFile,
+      lstat,
+      mkdir,
+      readdir,
+      readlink,
+      stat,
+      symlink,
+      unlink,
+      utimes
+    } = require("fs/promises");
+    var {
+      dirname,
+      isAbsolute,
+      join,
+      parse,
+      resolve,
+      sep,
+      toNamespacedPath
+    } = require("path");
+    var { fileURLToPath } = require("url");
+    var defaultOptions = {
+      dereference: false,
+      errorOnExist: false,
+      filter: void 0,
+      force: true,
+      preserveTimestamps: false,
+      recursive: false
+    };
+    async function cp(src, dest, opts) {
+      if (opts != null && typeof opts !== "object") {
+        throw new ERR_INVALID_ARG_TYPE("options", ["Object"], opts);
+      }
+      return cpFn(
+        toNamespacedPath(getValidatedPath(src)),
+        toNamespacedPath(getValidatedPath(dest)),
+        { ...defaultOptions, ...opts }
+      );
+    }
+    __name(cp, "cp");
+    function getValidatedPath(fileURLOrPath) {
+      const path = fileURLOrPath != null && fileURLOrPath.href && fileURLOrPath.origin ? fileURLToPath(fileURLOrPath) : fileURLOrPath;
+      return path;
+    }
+    __name(getValidatedPath, "getValidatedPath");
+    async function cpFn(src, dest, opts) {
+      if (opts.preserveTimestamps && process.arch === "ia32") {
+        const warning = "Using the preserveTimestamps option in 32-bit node is not recommended";
+        process.emitWarning(warning, "TimestampPrecisionWarning");
+      }
+      const stats = await checkPaths(src, dest, opts);
+      const { srcStat, destStat } = stats;
+      await checkParentPaths(src, srcStat, dest);
+      if (opts.filter) {
+        return handleFilter(checkParentDir, destStat, src, dest, opts);
+      }
+      return checkParentDir(destStat, src, dest, opts);
+    }
+    __name(cpFn, "cpFn");
+    async function checkPaths(src, dest, opts) {
+      const { 0: srcStat, 1: destStat } = await getStats(src, dest, opts);
+      if (destStat) {
+        if (areIdentical(srcStat, destStat)) {
+          throw new ERR_FS_CP_EINVAL({
+            message: "src and dest cannot be the same",
+            path: dest,
+            syscall: "cp",
+            errno: EINVAL
+          });
+        }
+        if (srcStat.isDirectory() && !destStat.isDirectory()) {
+          throw new ERR_FS_CP_DIR_TO_NON_DIR({
+            message: `cannot overwrite directory ${src} with non-directory ${dest}`,
+            path: dest,
+            syscall: "cp",
+            errno: EISDIR
+          });
+        }
+        if (!srcStat.isDirectory() && destStat.isDirectory()) {
+          throw new ERR_FS_CP_NON_DIR_TO_DIR({
+            message: `cannot overwrite non-directory ${src} with directory ${dest}`,
+            path: dest,
+            syscall: "cp",
+            errno: ENOTDIR
+          });
+        }
+      }
+      if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
+        throw new ERR_FS_CP_EINVAL({
+          message: `cannot copy ${src} to a subdirectory of self ${dest}`,
+          path: dest,
+          syscall: "cp",
+          errno: EINVAL
+        });
+      }
+      return { srcStat, destStat };
+    }
+    __name(checkPaths, "checkPaths");
+    function areIdentical(srcStat, destStat) {
+      return destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev;
+    }
+    __name(areIdentical, "areIdentical");
+    function getStats(src, dest, opts) {
+      const statFunc = opts.dereference ? (file) => stat(file, { bigint: true }) : (file) => lstat(file, { bigint: true });
+      return Promise.all([
+        statFunc(src),
+        statFunc(dest).catch((err) => {
+          if (err.code === "ENOENT") {
+            return null;
+          }
+          throw err;
+        })
+      ]);
+    }
+    __name(getStats, "getStats");
+    async function checkParentDir(destStat, src, dest, opts) {
+      const destParent = dirname(dest);
+      const dirExists = await pathExists(destParent);
+      if (dirExists) {
+        return getStatsForCopy(destStat, src, dest, opts);
+      }
+      await mkdir(destParent, { recursive: true });
+      return getStatsForCopy(destStat, src, dest, opts);
+    }
+    __name(checkParentDir, "checkParentDir");
+    function pathExists(dest) {
+      return stat(dest).then(
+        () => true,
+        // istanbul ignore next: not sure when this would occur
+        (err) => err.code === "ENOENT" ? false : Promise.reject(err)
+      );
+    }
+    __name(pathExists, "pathExists");
+    async function checkParentPaths(src, srcStat, dest) {
+      const srcParent = resolve(dirname(src));
+      const destParent = resolve(dirname(dest));
+      if (destParent === srcParent || destParent === parse(destParent).root) {
+        return;
+      }
+      let destStat;
+      try {
+        destStat = await stat(destParent, { bigint: true });
+      } catch (err) {
+        if (err.code === "ENOENT") {
+          return;
+        }
+        throw err;
+      }
+      if (areIdentical(srcStat, destStat)) {
+        throw new ERR_FS_CP_EINVAL({
+          message: `cannot copy ${src} to a subdirectory of self ${dest}`,
+          path: dest,
+          syscall: "cp",
+          errno: EINVAL
+        });
+      }
+      return checkParentPaths(src, srcStat, destParent);
+    }
+    __name(checkParentPaths, "checkParentPaths");
+    var normalizePathToArray = /* @__PURE__ */ __name((path) => resolve(path).split(sep).filter(Boolean), "normalizePathToArray");
+    function isSrcSubdir(src, dest) {
+      const srcArr = normalizePathToArray(src);
+      const destArr = normalizePathToArray(dest);
+      return srcArr.every((cur, i) => destArr[i] === cur);
+    }
+    __name(isSrcSubdir, "isSrcSubdir");
+    async function handleFilter(onInclude, destStat, src, dest, opts, cb) {
+      const include = await opts.filter(src, dest);
+      if (include) {
+        return onInclude(destStat, src, dest, opts, cb);
+      }
+    }
+    __name(handleFilter, "handleFilter");
+    function startCopy(destStat, src, dest, opts) {
+      if (opts.filter) {
+        return handleFilter(getStatsForCopy, destStat, src, dest, opts);
+      }
+      return getStatsForCopy(destStat, src, dest, opts);
+    }
+    __name(startCopy, "startCopy");
+    async function getStatsForCopy(destStat, src, dest, opts) {
+      const statFn = opts.dereference ? stat : lstat;
+      const srcStat = await statFn(src);
+      if (srcStat.isDirectory() && opts.recursive) {
+        return onDir(srcStat, destStat, src, dest, opts);
+      } else if (srcStat.isDirectory()) {
+        throw new ERR_FS_EISDIR({
+          message: `${src} is a directory (not copied)`,
+          path: src,
+          syscall: "cp",
+          errno: EINVAL
+        });
+      } else if (srcStat.isFile() || srcStat.isCharacterDevice() || srcStat.isBlockDevice()) {
+        return onFile(srcStat, destStat, src, dest, opts);
+      } else if (srcStat.isSymbolicLink()) {
+        return onLink(destStat, src, dest);
+      } else if (srcStat.isSocket()) {
+        throw new ERR_FS_CP_SOCKET({
+          message: `cannot copy a socket file: ${dest}`,
+          path: dest,
+          syscall: "cp",
+          errno: EINVAL
+        });
+      } else if (srcStat.isFIFO()) {
+        throw new ERR_FS_CP_FIFO_PIPE({
+          message: `cannot copy a FIFO pipe: ${dest}`,
+          path: dest,
+          syscall: "cp",
+          errno: EINVAL
+        });
+      }
+      throw new ERR_FS_CP_UNKNOWN({
+        message: `cannot copy an unknown file type: ${dest}`,
+        path: dest,
+        syscall: "cp",
+        errno: EINVAL
+      });
+    }
+    __name(getStatsForCopy, "getStatsForCopy");
+    function onFile(srcStat, destStat, src, dest, opts) {
+      if (!destStat) {
+        return _copyFile(srcStat, src, dest, opts);
+      }
+      return mayCopyFile(srcStat, src, dest, opts);
+    }
+    __name(onFile, "onFile");
+    async function mayCopyFile(srcStat, src, dest, opts) {
+      if (opts.force) {
+        await unlink(dest);
+        return _copyFile(srcStat, src, dest, opts);
+      } else if (opts.errorOnExist) {
+        throw new ERR_FS_CP_EEXIST({
+          message: `${dest} already exists`,
+          path: dest,
+          syscall: "cp",
+          errno: EEXIST
+        });
+      }
+    }
+    __name(mayCopyFile, "mayCopyFile");
+    async function _copyFile(srcStat, src, dest, opts) {
+      await copyFile(src, dest);
+      if (opts.preserveTimestamps) {
+        return handleTimestampsAndMode(srcStat.mode, src, dest);
+      }
+      return setDestMode(dest, srcStat.mode);
+    }
+    __name(_copyFile, "_copyFile");
+    async function handleTimestampsAndMode(srcMode, src, dest) {
+      if (fileIsNotWritable(srcMode)) {
+        await makeFileWritable(dest, srcMode);
+        return setDestTimestampsAndMode(srcMode, src, dest);
+      }
+      return setDestTimestampsAndMode(srcMode, src, dest);
+    }
+    __name(handleTimestampsAndMode, "handleTimestampsAndMode");
+    function fileIsNotWritable(srcMode) {
+      return (srcMode & 128) === 0;
+    }
+    __name(fileIsNotWritable, "fileIsNotWritable");
+    function makeFileWritable(dest, srcMode) {
+      return setDestMode(dest, srcMode | 128);
+    }
+    __name(makeFileWritable, "makeFileWritable");
+    async function setDestTimestampsAndMode(srcMode, src, dest) {
+      await setDestTimestamps(src, dest);
+      return setDestMode(dest, srcMode);
+    }
+    __name(setDestTimestampsAndMode, "setDestTimestampsAndMode");
+    function setDestMode(dest, srcMode) {
+      return chmod(dest, srcMode);
+    }
+    __name(setDestMode, "setDestMode");
+    async function setDestTimestamps(src, dest) {
+      const updatedSrcStat = await stat(src);
+      return utimes(dest, updatedSrcStat.atime, updatedSrcStat.mtime);
+    }
+    __name(setDestTimestamps, "setDestTimestamps");
+    function onDir(srcStat, destStat, src, dest, opts) {
+      if (!destStat) {
+        return mkDirAndCopy(srcStat.mode, src, dest, opts);
+      }
+      return copyDir(src, dest, opts);
+    }
+    __name(onDir, "onDir");
+    async function mkDirAndCopy(srcMode, src, dest, opts) {
+      await mkdir(dest);
+      await copyDir(src, dest, opts);
+      return setDestMode(dest, srcMode);
+    }
+    __name(mkDirAndCopy, "mkDirAndCopy");
+    async function copyDir(src, dest, opts) {
+      const dir = await readdir(src);
+      for (let i = 0; i < dir.length; i++) {
+        const item = dir[i];
+        const srcItem = join(src, item);
+        const destItem = join(dest, item);
+        const { destStat } = await checkPaths(srcItem, destItem, opts);
+        await startCopy(destStat, srcItem, destItem, opts);
+      }
+    }
+    __name(copyDir, "copyDir");
+    async function onLink(destStat, src, dest) {
+      let resolvedSrc = await readlink(src);
+      if (!isAbsolute(resolvedSrc)) {
+        resolvedSrc = resolve(dirname(src), resolvedSrc);
+      }
+      if (!destStat) {
+        return symlink(resolvedSrc, dest);
+      }
+      let resolvedDest;
+      try {
+        resolvedDest = await readlink(dest);
+      } catch (err) {
+        if (err.code === "EINVAL" || err.code === "UNKNOWN") {
+          return symlink(resolvedSrc, dest);
+        }
+        throw err;
+      }
+      if (!isAbsolute(resolvedDest)) {
+        resolvedDest = resolve(dirname(dest), resolvedDest);
+      }
+      if (isSrcSubdir(resolvedSrc, resolvedDest)) {
+        throw new ERR_FS_CP_EINVAL({
+          message: `cannot copy ${resolvedSrc} to a subdirectory of self ${resolvedDest}`,
+          path: dest,
+          syscall: "cp",
+          errno: EINVAL
+        });
+      }
+      const srcStat = await stat(src);
+      if (srcStat.isDirectory() && isSrcSubdir(resolvedDest, resolvedSrc)) {
+        throw new ERR_FS_CP_SYMLINK_TO_SUBDIRECTORY({
+          message: `cannot overwrite ${resolvedDest} with ${resolvedSrc}`,
+          path: dest,
+          syscall: "cp",
+          errno: EINVAL
+        });
+      }
+      return copyLink(resolvedSrc, dest);
+    }
+    __name(onLink, "onLink");
+    async function copyLink(resolvedSrc, dest) {
+      await unlink(dest);
+      return symlink(resolvedSrc, dest);
+    }
+    __name(copyLink, "copyLink");
+    module2.exports = cp;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+fs@4.0.0/node_modules/@npmcli/fs/lib/cp/index.js
+var require_cp = __commonJS({
+  "node_modules/.pnpm/@npmcli+fs@4.0.0/node_modules/@npmcli/fs/lib/cp/index.js"(exports2, module2) {
+    var fs = require("fs/promises");
+    var getOptions = require_get_options();
+    var node = require_node();
+    var polyfill = require_polyfill();
+    var useNative = node.satisfies(">=16.7.0");
+    var cp = /* @__PURE__ */ __name(async (src, dest, opts) => {
+      const options = getOptions(opts, {
+        copy: ["dereference", "errorOnExist", "filter", "force", "preserveTimestamps", "recursive"]
+      });
+      return useNative ? fs.cp(src, dest, options) : polyfill(src, dest, options);
+    }, "cp");
+    module2.exports = cp;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+fs@4.0.0/node_modules/@npmcli/fs/lib/with-temp-dir.js
+var require_with_temp_dir = __commonJS({
+  "node_modules/.pnpm/@npmcli+fs@4.0.0/node_modules/@npmcli/fs/lib/with-temp-dir.js"(exports2, module2) {
+    var { join, sep } = require("path");
+    var getOptions = require_get_options();
+    var { mkdir, mkdtemp, rm } = require("fs/promises");
+    var withTempDir = /* @__PURE__ */ __name(async (root, fn, opts) => {
+      const options = getOptions(opts, {
+        copy: ["tmpPrefix"]
+      });
+      await mkdir(root, { recursive: true });
+      const target = await mkdtemp(join(`${root}${sep}`, options.tmpPrefix || ""));
+      let err;
+      let result;
+      try {
+        result = await fn(target);
+      } catch (_err) {
+        err = _err;
+      }
+      try {
+        await rm(target, { force: true, recursive: true });
+      } catch {
+      }
+      if (err) {
+        throw err;
+      }
+      return result;
+    }, "withTempDir");
+    module2.exports = withTempDir;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+fs@4.0.0/node_modules/@npmcli/fs/lib/readdir-scoped.js
+var require_readdir_scoped = __commonJS({
+  "node_modules/.pnpm/@npmcli+fs@4.0.0/node_modules/@npmcli/fs/lib/readdir-scoped.js"(exports2, module2) {
+    var { readdir } = require("fs/promises");
+    var { join } = require("path");
+    var readdirScoped = /* @__PURE__ */ __name(async (dir) => {
+      const results = [];
+      for (const item of await readdir(dir)) {
+        if (item.startsWith("@")) {
+          for (const scopedItem of await readdir(join(dir, item))) {
+            results.push(join(item, scopedItem));
+          }
+        } else {
+          results.push(item);
+        }
+      }
+      return results;
+    }, "readdirScoped");
+    module2.exports = readdirScoped;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+fs@4.0.0/node_modules/@npmcli/fs/lib/move-file.js
+var require_move_file = __commonJS({
+  "node_modules/.pnpm/@npmcli+fs@4.0.0/node_modules/@npmcli/fs/lib/move-file.js"(exports2, module2) {
+    var { dirname, join, resolve, relative, isAbsolute } = require("path");
+    var fs = require("fs/promises");
+    var pathExists = /* @__PURE__ */ __name(async (path) => {
+      try {
+        await fs.access(path);
+        return true;
+      } catch (er) {
+        return er.code !== "ENOENT";
+      }
+    }, "pathExists");
+    var moveFile = /* @__PURE__ */ __name(async (source, destination, options = {}, root = true, symlinks = []) => {
+      if (!source || !destination) {
+        throw new TypeError("`source` and `destination` file required");
+      }
+      options = {
+        overwrite: true,
+        ...options
+      };
+      if (!options.overwrite && await pathExists(destination)) {
+        throw new Error(`The destination file exists: ${destination}`);
+      }
+      await fs.mkdir(dirname(destination), { recursive: true });
+      try {
+        await fs.rename(source, destination);
+      } catch (error) {
+        if (error.code === "EXDEV" || error.code === "EPERM") {
+          const sourceStat = await fs.lstat(source);
+          if (sourceStat.isDirectory()) {
+            const files = await fs.readdir(source);
+            await Promise.all(files.map(
+              (file) => moveFile(join(source, file), join(destination, file), options, false, symlinks)
+            ));
+          } else if (sourceStat.isSymbolicLink()) {
+            symlinks.push({ source, destination });
+          } else {
+            await fs.copyFile(source, destination);
+          }
+        } else {
+          throw error;
+        }
+      }
+      if (root) {
+        await Promise.all(symlinks.map(async ({ source: symSource, destination: symDestination }) => {
+          let target = await fs.readlink(symSource);
+          if (isAbsolute(target)) {
+            target = resolve(symDestination, relative(symSource, target));
+          }
+          let targetStat = "file";
+          try {
+            targetStat = await fs.stat(resolve(dirname(symSource), target));
+            if (targetStat.isDirectory()) {
+              targetStat = "junction";
+            }
+          } catch {
+          }
+          await fs.symlink(
+            target,
+            symDestination,
+            targetStat
+          );
+        }));
+        await fs.rm(source, { recursive: true, force: true });
+      }
+    }, "moveFile");
+    module2.exports = moveFile;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+fs@4.0.0/node_modules/@npmcli/fs/lib/index.js
+var require_lib15 = __commonJS({
+  "node_modules/.pnpm/@npmcli+fs@4.0.0/node_modules/@npmcli/fs/lib/index.js"(exports2, module2) {
+    "use strict";
+    var cp = require_cp();
+    var withTempDir = require_with_temp_dir();
+    var readdirScoped = require_readdir_scoped();
+    var moveFile = require_move_file();
+    module2.exports = {
+      cp,
+      withTempDir,
+      readdirScoped,
+      moveFile
+    };
+  }
+});
+
+// node_modules/.pnpm/p-map@7.0.4/node_modules/p-map/index.js
+var p_map_exports = {};
+__export(p_map_exports, {
+  default: () => pMap,
+  pMapIterable: () => pMapIterable,
+  pMapSkip: () => pMapSkip
+});
+async function pMap(iterable, mapper, {
+  concurrency = Number.POSITIVE_INFINITY,
+  stopOnError = true,
+  signal
+} = {}) {
+  return new Promise((resolve_, reject_) => {
+    if (iterable[Symbol.iterator] === void 0 && iterable[Symbol.asyncIterator] === void 0) {
+      throw new TypeError(`Expected \`input\` to be either an \`Iterable\` or \`AsyncIterable\`, got (${typeof iterable})`);
+    }
+    if (typeof mapper !== "function") {
+      throw new TypeError("Mapper function is required");
+    }
+    if (!(Number.isSafeInteger(concurrency) && concurrency >= 1 || concurrency === Number.POSITIVE_INFINITY)) {
+      throw new TypeError(`Expected \`concurrency\` to be an integer from 1 and up or \`Infinity\`, got \`${concurrency}\` (${typeof concurrency})`);
+    }
+    const result = [];
+    const errors = [];
+    const skippedIndexesMap = /* @__PURE__ */ new Map();
+    let isRejected = false;
+    let isResolved = false;
+    let isIterableDone = false;
+    let resolvingCount = 0;
+    let currentIndex = 0;
+    const iterator = iterable[Symbol.iterator] === void 0 ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();
+    const signalListener = /* @__PURE__ */ __name(() => {
+      reject(signal.reason);
+    }, "signalListener");
+    const cleanup = /* @__PURE__ */ __name(() => {
+      signal?.removeEventListener("abort", signalListener);
+    }, "cleanup");
+    const resolve = /* @__PURE__ */ __name((value) => {
+      resolve_(value);
+      cleanup();
+    }, "resolve");
+    const reject = /* @__PURE__ */ __name((reason) => {
+      isRejected = true;
+      isResolved = true;
+      reject_(reason);
+      cleanup();
+    }, "reject");
+    if (signal) {
+      if (signal.aborted) {
+        reject(signal.reason);
+      }
+      signal.addEventListener("abort", signalListener, { once: true });
+    }
+    const next = /* @__PURE__ */ __name(async () => {
+      if (isResolved) {
+        return;
+      }
+      const nextItem = await iterator.next();
+      const index = currentIndex;
+      currentIndex++;
+      if (nextItem.done) {
+        isIterableDone = true;
+        if (resolvingCount === 0 && !isResolved) {
+          if (!stopOnError && errors.length > 0) {
+            reject(new AggregateError(errors));
+            return;
+          }
+          isResolved = true;
+          if (skippedIndexesMap.size === 0) {
+            resolve(result);
+            return;
+          }
+          const pureResult = [];
+          for (const [index2, value] of result.entries()) {
+            if (skippedIndexesMap.get(index2) === pMapSkip) {
+              continue;
+            }
+            pureResult.push(value);
+          }
+          resolve(pureResult);
+        }
+        return;
+      }
+      resolvingCount++;
+      (async () => {
+        try {
+          const element = await nextItem.value;
+          if (isResolved) {
+            return;
+          }
+          const value = await mapper(element, index);
+          if (value === pMapSkip) {
+            skippedIndexesMap.set(index, value);
+          }
+          result[index] = value;
+          resolvingCount--;
+          await next();
+        } catch (error) {
+          if (stopOnError) {
+            reject(error);
+          } else {
+            errors.push(error);
+            resolvingCount--;
+            try {
+              await next();
+            } catch (error2) {
+              reject(error2);
+            }
+          }
+        }
+      })();
+    }, "next");
+    (async () => {
+      for (let index = 0; index < concurrency; index++) {
+        try {
+          await next();
+        } catch (error) {
+          reject(error);
+          break;
+        }
+        if (isIterableDone || isRejected) {
+          break;
+        }
+      }
+    })();
+  });
+}
+function pMapIterable(iterable, mapper, {
+  concurrency = Number.POSITIVE_INFINITY,
+  backpressure = concurrency
+} = {}) {
+  if (iterable[Symbol.iterator] === void 0 && iterable[Symbol.asyncIterator] === void 0) {
+    throw new TypeError(`Expected \`input\` to be either an \`Iterable\` or \`AsyncIterable\`, got (${typeof iterable})`);
+  }
+  if (typeof mapper !== "function") {
+    throw new TypeError("Mapper function is required");
+  }
+  if (!(Number.isSafeInteger(concurrency) && concurrency >= 1 || concurrency === Number.POSITIVE_INFINITY)) {
+    throw new TypeError(`Expected \`concurrency\` to be an integer from 1 and up or \`Infinity\`, got \`${concurrency}\` (${typeof concurrency})`);
+  }
+  if (!(Number.isSafeInteger(backpressure) && backpressure >= concurrency || backpressure === Number.POSITIVE_INFINITY)) {
+    throw new TypeError(`Expected \`backpressure\` to be an integer from \`concurrency\` (${concurrency}) and up or \`Infinity\`, got \`${backpressure}\` (${typeof backpressure})`);
+  }
+  return {
+    async *[Symbol.asyncIterator]() {
+      const iterator = iterable[Symbol.asyncIterator] === void 0 ? iterable[Symbol.iterator]() : iterable[Symbol.asyncIterator]();
+      const promises = [];
+      let pendingPromisesCount = 0;
+      let isDone = false;
+      let index = 0;
+      function trySpawn() {
+        if (isDone || !(pendingPromisesCount < concurrency && promises.length < backpressure)) {
+          return;
+        }
+        pendingPromisesCount++;
+        const promise = (async () => {
+          const { done, value } = await iterator.next();
+          if (done) {
+            pendingPromisesCount--;
+            return { done: true };
+          }
+          trySpawn();
+          try {
+            const returnValue = await mapper(await value, index++);
+            pendingPromisesCount--;
+            if (returnValue === pMapSkip) {
+              const index2 = promises.indexOf(promise);
+              if (index2 > 0) {
+                promises.splice(index2, 1);
+              }
+            }
+            trySpawn();
+            return { done: false, value: returnValue };
+          } catch (error) {
+            pendingPromisesCount--;
+            isDone = true;
+            return { error };
+          }
+        })();
+        promises.push(promise);
+      }
+      __name(trySpawn, "trySpawn");
+      trySpawn();
+      while (promises.length > 0) {
+        const { error, done, value } = await promises[0];
+        promises.shift();
+        if (error) {
+          throw error;
+        }
+        if (done) {
+          return;
+        }
+        trySpawn();
+        if (value === pMapSkip) {
+          continue;
+        }
+        yield value;
+      }
+    }
+  };
+}
+var pMapSkip;
+var init_p_map = __esm({
+  "node_modules/.pnpm/p-map@7.0.4/node_modules/p-map/index.js"() {
+    __name(pMap, "pMap");
+    __name(pMapIterable, "pMapIterable");
+    pMapSkip = Symbol("skip");
+  }
+});
+
+// node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/entry-index.js
+var require_entry_index = __commonJS({
+  "node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/entry-index.js"(exports2, module2) {
+    "use strict";
+    var crypto = require("crypto");
+    var {
+      appendFile,
+      mkdir,
+      readFile,
+      readdir,
+      rm,
+      writeFile
+    } = require("fs/promises");
+    var { Minipass } = require_commonjs5();
+    var path = require("path");
+    var ssri = require_lib12();
+    var uniqueFilename = require_lib14();
+    var contentPath = require_path();
+    var hashToSegments = require_hash_to_segments();
+    var indexV = require_package()["cache-version"].index;
+    var { moveFile } = require_lib15();
+    var lsStreamConcurrency = 5;
+    module2.exports.NotFoundError = class NotFoundError extends Error {
+      static {
+        __name(this, "NotFoundError");
+      }
+      constructor(cache, key) {
+        super(`No cache entry for ${key} found in ${cache}`);
+        this.code = "ENOENT";
+        this.cache = cache;
+        this.key = key;
+      }
+    };
+    module2.exports.compact = compact;
+    async function compact(cache, key, matchFn, opts = {}) {
+      const bucket = bucketPath(cache, key);
+      const entries = await bucketEntries(bucket);
+      const newEntries = [];
+      for (let i = entries.length - 1; i >= 0; --i) {
+        const entry = entries[i];
+        if (entry.integrity === null && !opts.validateEntry) {
+          break;
+        }
+        if ((!opts.validateEntry || opts.validateEntry(entry) === true) && (newEntries.length === 0 || !newEntries.find((oldEntry) => matchFn(oldEntry, entry)))) {
+          newEntries.unshift(entry);
+        }
+      }
+      const newIndex = "\n" + newEntries.map((entry) => {
+        const stringified = JSON.stringify(entry);
+        const hash2 = hashEntry(stringified);
+        return `${hash2}	${stringified}`;
+      }).join("\n");
+      const setup = /* @__PURE__ */ __name(async () => {
+        const target = uniqueFilename(path.join(cache, "tmp"), opts.tmpPrefix);
+        await mkdir(path.dirname(target), { recursive: true });
+        return {
+          target,
+          moved: false
+        };
+      }, "setup");
+      const teardown = /* @__PURE__ */ __name(async (tmp2) => {
+        if (!tmp2.moved) {
+          return rm(tmp2.target, { recursive: true, force: true });
+        }
+      }, "teardown");
+      const write = /* @__PURE__ */ __name(async (tmp2) => {
+        await writeFile(tmp2.target, newIndex, { flag: "wx" });
+        await mkdir(path.dirname(bucket), { recursive: true });
+        await moveFile(tmp2.target, bucket);
+        tmp2.moved = true;
+      }, "write");
+      const tmp = await setup();
+      try {
+        await write(tmp);
+      } finally {
+        await teardown(tmp);
+      }
+      return newEntries.reverse().map((entry) => formatEntry(cache, entry, true));
+    }
+    __name(compact, "compact");
+    module2.exports.insert = insert;
+    async function insert(cache, key, integrity, opts = {}) {
+      const { metadata, size, time } = opts;
+      const bucket = bucketPath(cache, key);
+      const entry = {
+        key,
+        integrity: integrity && ssri.stringify(integrity),
+        time: time || Date.now(),
+        size,
+        metadata
+      };
+      try {
+        await mkdir(path.dirname(bucket), { recursive: true });
+        const stringified = JSON.stringify(entry);
+        await appendFile(bucket, `
+${hashEntry(stringified)}	${stringified}`);
+      } catch (err) {
+        if (err.code === "ENOENT") {
+          return void 0;
+        }
+        throw err;
+      }
+      return formatEntry(cache, entry);
+    }
+    __name(insert, "insert");
+    module2.exports.find = find;
+    async function find(cache, key) {
+      const bucket = bucketPath(cache, key);
+      try {
+        const entries = await bucketEntries(bucket);
+        return entries.reduce((latest, next) => {
+          if (next && next.key === key) {
+            return formatEntry(cache, next);
+          } else {
+            return latest;
+          }
+        }, null);
+      } catch (err) {
+        if (err.code === "ENOENT") {
+          return null;
+        } else {
+          throw err;
+        }
+      }
+    }
+    __name(find, "find");
+    module2.exports.delete = del;
+    function del(cache, key, opts = {}) {
+      if (!opts.removeFully) {
+        return insert(cache, key, null, opts);
+      }
+      const bucket = bucketPath(cache, key);
+      return rm(bucket, { recursive: true, force: true });
+    }
+    __name(del, "del");
+    module2.exports.lsStream = lsStream2;
+    function lsStream2(cache) {
+      const indexDir = bucketDir(cache);
+      const stream = new Minipass({ objectMode: true });
+      Promise.resolve().then(async () => {
+        const { default: pMap2 } = await Promise.resolve().then(() => (init_p_map(), p_map_exports));
+        const buckets = await readdirOrEmpty(indexDir);
+        await pMap2(
+          buckets,
+          async (bucket) => {
+            const bucketPath2 = path.join(indexDir, bucket);
+            const subbuckets = await readdirOrEmpty(bucketPath2);
+            await pMap2(
+              subbuckets,
+              async (subbucket) => {
+                const subbucketPath = path.join(bucketPath2, subbucket);
+                const subbucketEntries = await readdirOrEmpty(subbucketPath);
+                await pMap2(
+                  subbucketEntries,
+                  async (entry) => {
+                    const entryPath = path.join(subbucketPath, entry);
+                    try {
+                      const entries = await bucketEntries(entryPath);
+                      const reduced = entries.reduce((acc, entry2) => {
+                        acc.set(entry2.key, entry2);
+                        return acc;
+                      }, /* @__PURE__ */ new Map());
+                      for (const entry2 of reduced.values()) {
+                        const formatted = formatEntry(cache, entry2);
+                        if (formatted) {
+                          stream.write(formatted);
+                        }
+                      }
+                    } catch (err) {
+                      if (err.code === "ENOENT") {
+                        return void 0;
+                      }
+                      throw err;
+                    }
+                  },
+                  { concurrency: lsStreamConcurrency }
+                );
+              },
+              { concurrency: lsStreamConcurrency }
+            );
+          },
+          { concurrency: lsStreamConcurrency }
+        );
+        stream.end();
+        return stream;
+      }).catch((err) => stream.emit("error", err));
+      return stream;
+    }
+    __name(lsStream2, "lsStream");
+    module2.exports.ls = ls;
+    async function ls(cache) {
+      const entries = await lsStream2(cache).collect();
+      return entries.reduce((acc, xs) => {
+        acc[xs.key] = xs;
+        return acc;
+      }, {});
+    }
+    __name(ls, "ls");
+    module2.exports.bucketEntries = bucketEntries;
+    async function bucketEntries(bucket, filter) {
+      const data = await readFile(bucket, "utf8");
+      return _bucketEntries(data, filter);
+    }
+    __name(bucketEntries, "bucketEntries");
+    function _bucketEntries(data) {
+      const entries = [];
+      data.split("\n").forEach((entry) => {
+        if (!entry) {
+          return;
+        }
+        const pieces = entry.split("	");
+        if (!pieces[1] || hashEntry(pieces[1]) !== pieces[0]) {
+          return;
+        }
+        let obj;
+        try {
+          obj = JSON.parse(pieces[1]);
+        } catch (_) {
+        }
+        if (obj) {
+          entries.push(obj);
+        }
+      });
+      return entries;
+    }
+    __name(_bucketEntries, "_bucketEntries");
+    module2.exports.bucketDir = bucketDir;
+    function bucketDir(cache) {
+      return path.join(cache, `index-v${indexV}`);
+    }
+    __name(bucketDir, "bucketDir");
+    module2.exports.bucketPath = bucketPath;
+    function bucketPath(cache, key) {
+      const hashed = hashKey(key);
+      return path.join.apply(
+        path,
+        [bucketDir(cache)].concat(hashToSegments(hashed))
+      );
+    }
+    __name(bucketPath, "bucketPath");
+    module2.exports.hashKey = hashKey;
+    function hashKey(key) {
+      return hash(key, "sha256");
+    }
+    __name(hashKey, "hashKey");
+    module2.exports.hashEntry = hashEntry;
+    function hashEntry(str) {
+      return hash(str, "sha1");
+    }
+    __name(hashEntry, "hashEntry");
+    function hash(str, digest) {
+      return crypto.createHash(digest).update(str).digest("hex");
+    }
+    __name(hash, "hash");
+    function formatEntry(cache, entry, keepAll) {
+      if (!entry.integrity && !keepAll) {
+        return null;
+      }
+      return {
+        key: entry.key,
+        integrity: entry.integrity,
+        path: entry.integrity ? contentPath(cache, entry.integrity) : void 0,
+        size: entry.size,
+        time: entry.time,
+        metadata: entry.metadata
+      };
+    }
+    __name(formatEntry, "formatEntry");
+    function readdirOrEmpty(dir) {
+      return readdir(dir).catch((err) => {
+        if (err.code === "ENOENT" || err.code === "ENOTDIR") {
+          return [];
+        }
+        throw err;
+      });
+    }
+    __name(readdirOrEmpty, "readdirOrEmpty");
+  }
+});
+
+// node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/memoization.js
+var require_memoization = __commonJS({
+  "node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/memoization.js"(exports2, module2) {
+    "use strict";
+    var { LRUCache } = require_commonjs();
+    var MEMOIZED = new LRUCache({
+      max: 500,
+      maxSize: 50 * 1024 * 1024,
+      // 50MB
+      ttl: 3 * 60 * 1e3,
+      // 3 minutes
+      sizeCalculation: /* @__PURE__ */ __name((entry, key) => key.startsWith("key:") ? entry.data.length : entry.length, "sizeCalculation")
+    });
+    module2.exports.clearMemoized = clearMemoized;
+    function clearMemoized() {
+      const old = {};
+      MEMOIZED.forEach((v, k) => {
+        old[k] = v;
+      });
+      MEMOIZED.clear();
+      return old;
+    }
+    __name(clearMemoized, "clearMemoized");
+    module2.exports.put = put;
+    function put(cache, entry, data, opts) {
+      pickMem(opts).set(`key:${cache}:${entry.key}`, { entry, data });
+      putDigest(cache, entry.integrity, data, opts);
+    }
+    __name(put, "put");
+    module2.exports.put.byDigest = putDigest;
+    function putDigest(cache, integrity, data, opts) {
+      pickMem(opts).set(`digest:${cache}:${integrity}`, data);
+    }
+    __name(putDigest, "putDigest");
+    module2.exports.get = get;
+    function get(cache, key, opts) {
+      return pickMem(opts).get(`key:${cache}:${key}`);
+    }
+    __name(get, "get");
+    module2.exports.get.byDigest = getDigest;
+    function getDigest(cache, integrity, opts) {
+      return pickMem(opts).get(`digest:${cache}:${integrity}`);
+    }
+    __name(getDigest, "getDigest");
+    var ObjProxy = class {
+      static {
+        __name(this, "ObjProxy");
+      }
+      constructor(obj) {
+        this.obj = obj;
+      }
+      get(key) {
+        return this.obj[key];
+      }
+      set(key, val) {
+        this.obj[key] = val;
+      }
+    };
+    function pickMem(opts) {
+      if (!opts || !opts.memoize) {
+        return MEMOIZED;
+      } else if (opts.memoize.get && opts.memoize.set) {
+        return opts.memoize;
+      } else if (typeof opts.memoize === "object") {
+        return new ObjProxy(opts.memoize);
+      } else {
+        return MEMOIZED;
+      }
+    }
+    __name(pickMem, "pickMem");
+  }
+});
+
+// node_modules/.pnpm/fs-minipass@3.0.3/node_modules/fs-minipass/lib/index.js
+var require_lib16 = __commonJS({
+  "node_modules/.pnpm/fs-minipass@3.0.3/node_modules/fs-minipass/lib/index.js"(exports2) {
+    "use strict";
+    var { Minipass } = require_commonjs5();
+    var EE = require("events").EventEmitter;
+    var fs = require("fs");
+    var writev = fs.writev;
+    var _autoClose = Symbol("_autoClose");
+    var _close = Symbol("_close");
+    var _ended = Symbol("_ended");
+    var _fd = Symbol("_fd");
+    var _finished = Symbol("_finished");
+    var _flags = Symbol("_flags");
+    var _flush = Symbol("_flush");
+    var _handleChunk = Symbol("_handleChunk");
+    var _makeBuf = Symbol("_makeBuf");
+    var _mode = Symbol("_mode");
+    var _needDrain = Symbol("_needDrain");
+    var _onerror = Symbol("_onerror");
+    var _onopen = Symbol("_onopen");
+    var _onread = Symbol("_onread");
+    var _onwrite = Symbol("_onwrite");
+    var _open = Symbol("_open");
+    var _path = Symbol("_path");
+    var _pos = Symbol("_pos");
+    var _queue = Symbol("_queue");
+    var _read = Symbol("_read");
+    var _readSize = Symbol("_readSize");
+    var _reading = Symbol("_reading");
+    var _remain = Symbol("_remain");
+    var _size = Symbol("_size");
+    var _write = Symbol("_write");
+    var _writing = Symbol("_writing");
+    var _defaultFlag = Symbol("_defaultFlag");
+    var _errored = Symbol("_errored");
+    var ReadStream = class extends Minipass {
+      static {
+        __name(this, "ReadStream");
+      }
+      constructor(path, opt) {
+        opt = opt || {};
+        super(opt);
+        this.readable = true;
+        this.writable = false;
+        if (typeof path !== "string") {
+          throw new TypeError("path must be a string");
+        }
+        this[_errored] = false;
+        this[_fd] = typeof opt.fd === "number" ? opt.fd : null;
+        this[_path] = path;
+        this[_readSize] = opt.readSize || 16 * 1024 * 1024;
+        this[_reading] = false;
+        this[_size] = typeof opt.size === "number" ? opt.size : Infinity;
+        this[_remain] = this[_size];
+        this[_autoClose] = typeof opt.autoClose === "boolean" ? opt.autoClose : true;
+        if (typeof this[_fd] === "number") {
+          this[_read]();
+        } else {
+          this[_open]();
+        }
+      }
+      get fd() {
+        return this[_fd];
+      }
+      get path() {
+        return this[_path];
+      }
+      write() {
+        throw new TypeError("this is a readable stream");
+      }
+      end() {
+        throw new TypeError("this is a readable stream");
+      }
+      [_open]() {
+        fs.open(this[_path], "r", (er, fd) => this[_onopen](er, fd));
+      }
+      [_onopen](er, fd) {
+        if (er) {
+          this[_onerror](er);
+        } else {
+          this[_fd] = fd;
+          this.emit("open", fd);
+          this[_read]();
+        }
+      }
+      [_makeBuf]() {
+        return Buffer.allocUnsafe(Math.min(this[_readSize], this[_remain]));
+      }
+      [_read]() {
+        if (!this[_reading]) {
+          this[_reading] = true;
+          const buf = this[_makeBuf]();
+          if (buf.length === 0) {
+            return process.nextTick(() => this[_onread](null, 0, buf));
+          }
+          fs.read(this[_fd], buf, 0, buf.length, null, (er, br, b) => this[_onread](er, br, b));
+        }
+      }
+      [_onread](er, br, buf) {
+        this[_reading] = false;
+        if (er) {
+          this[_onerror](er);
+        } else if (this[_handleChunk](br, buf)) {
+          this[_read]();
+        }
+      }
+      [_close]() {
+        if (this[_autoClose] && typeof this[_fd] === "number") {
+          const fd = this[_fd];
+          this[_fd] = null;
+          fs.close(fd, (er) => er ? this.emit("error", er) : this.emit("close"));
+        }
+      }
+      [_onerror](er) {
+        this[_reading] = true;
+        this[_close]();
+        this.emit("error", er);
+      }
+      [_handleChunk](br, buf) {
+        let ret = false;
+        this[_remain] -= br;
+        if (br > 0) {
+          ret = super.write(br < buf.length ? buf.slice(0, br) : buf);
+        }
+        if (br === 0 || this[_remain] <= 0) {
+          ret = false;
+          this[_close]();
+          super.end();
+        }
+        return ret;
+      }
+      emit(ev, data) {
+        switch (ev) {
+          case "prefinish":
+          case "finish":
+            break;
+          case "drain":
+            if (typeof this[_fd] === "number") {
+              this[_read]();
+            }
+            break;
+          case "error":
+            if (this[_errored]) {
+              return;
+            }
+            this[_errored] = true;
+            return super.emit(ev, data);
+          default:
+            return super.emit(ev, data);
+        }
+      }
+    };
+    var ReadStreamSync = class extends ReadStream {
+      static {
+        __name(this, "ReadStreamSync");
+      }
+      [_open]() {
+        let threw = true;
+        try {
+          this[_onopen](null, fs.openSync(this[_path], "r"));
+          threw = false;
+        } finally {
+          if (threw) {
+            this[_close]();
+          }
+        }
+      }
+      [_read]() {
+        let threw = true;
+        try {
+          if (!this[_reading]) {
+            this[_reading] = true;
+            do {
+              const buf = this[_makeBuf]();
+              const br = buf.length === 0 ? 0 : fs.readSync(this[_fd], buf, 0, buf.length, null);
+              if (!this[_handleChunk](br, buf)) {
+                break;
+              }
+            } while (true);
+            this[_reading] = false;
+          }
+          threw = false;
+        } finally {
+          if (threw) {
+            this[_close]();
+          }
+        }
+      }
+      [_close]() {
+        if (this[_autoClose] && typeof this[_fd] === "number") {
+          const fd = this[_fd];
+          this[_fd] = null;
+          fs.closeSync(fd);
+          this.emit("close");
+        }
+      }
+    };
+    var WriteStream = class extends EE {
+      static {
+        __name(this, "WriteStream");
+      }
+      constructor(path, opt) {
+        opt = opt || {};
+        super(opt);
+        this.readable = false;
+        this.writable = true;
+        this[_errored] = false;
+        this[_writing] = false;
+        this[_ended] = false;
+        this[_needDrain] = false;
+        this[_queue] = [];
+        this[_path] = path;
+        this[_fd] = typeof opt.fd === "number" ? opt.fd : null;
+        this[_mode] = opt.mode === void 0 ? 438 : opt.mode;
+        this[_pos] = typeof opt.start === "number" ? opt.start : null;
+        this[_autoClose] = typeof opt.autoClose === "boolean" ? opt.autoClose : true;
+        const defaultFlag = this[_pos] !== null ? "r+" : "w";
+        this[_defaultFlag] = opt.flags === void 0;
+        this[_flags] = this[_defaultFlag] ? defaultFlag : opt.flags;
+        if (this[_fd] === null) {
+          this[_open]();
+        }
+      }
+      emit(ev, data) {
+        if (ev === "error") {
+          if (this[_errored]) {
+            return;
+          }
+          this[_errored] = true;
+        }
+        return super.emit(ev, data);
+      }
+      get fd() {
+        return this[_fd];
+      }
+      get path() {
+        return this[_path];
+      }
+      [_onerror](er) {
+        this[_close]();
+        this[_writing] = true;
+        this.emit("error", er);
+      }
+      [_open]() {
+        fs.open(
+          this[_path],
+          this[_flags],
+          this[_mode],
+          (er, fd) => this[_onopen](er, fd)
+        );
+      }
+      [_onopen](er, fd) {
+        if (this[_defaultFlag] && this[_flags] === "r+" && er && er.code === "ENOENT") {
+          this[_flags] = "w";
+          this[_open]();
+        } else if (er) {
+          this[_onerror](er);
+        } else {
+          this[_fd] = fd;
+          this.emit("open", fd);
+          if (!this[_writing]) {
+            this[_flush]();
+          }
+        }
+      }
+      end(buf, enc) {
+        if (buf) {
+          this.write(buf, enc);
+        }
+        this[_ended] = true;
+        if (!this[_writing] && !this[_queue].length && typeof this[_fd] === "number") {
+          this[_onwrite](null, 0);
+        }
+        return this;
+      }
+      write(buf, enc) {
+        if (typeof buf === "string") {
+          buf = Buffer.from(buf, enc);
+        }
+        if (this[_ended]) {
+          this.emit("error", new Error("write() after end()"));
+          return false;
+        }
+        if (this[_fd] === null || this[_writing] || this[_queue].length) {
+          this[_queue].push(buf);
+          this[_needDrain] = true;
+          return false;
+        }
+        this[_writing] = true;
+        this[_write](buf);
+        return true;
+      }
+      [_write](buf) {
+        fs.write(this[_fd], buf, 0, buf.length, this[_pos], (er, bw) => this[_onwrite](er, bw));
+      }
+      [_onwrite](er, bw) {
+        if (er) {
+          this[_onerror](er);
+        } else {
+          if (this[_pos] !== null) {
+            this[_pos] += bw;
+          }
+          if (this[_queue].length) {
+            this[_flush]();
+          } else {
+            this[_writing] = false;
+            if (this[_ended] && !this[_finished]) {
+              this[_finished] = true;
+              this[_close]();
+              this.emit("finish");
+            } else if (this[_needDrain]) {
+              this[_needDrain] = false;
+              this.emit("drain");
+            }
+          }
+        }
+      }
+      [_flush]() {
+        if (this[_queue].length === 0) {
+          if (this[_ended]) {
+            this[_onwrite](null, 0);
+          }
+        } else if (this[_queue].length === 1) {
+          this[_write](this[_queue].pop());
+        } else {
+          const iovec = this[_queue];
+          this[_queue] = [];
+          writev(
+            this[_fd],
+            iovec,
+            this[_pos],
+            (er, bw) => this[_onwrite](er, bw)
+          );
+        }
+      }
+      [_close]() {
+        if (this[_autoClose] && typeof this[_fd] === "number") {
+          const fd = this[_fd];
+          this[_fd] = null;
+          fs.close(fd, (er) => er ? this.emit("error", er) : this.emit("close"));
+        }
+      }
+    };
+    var WriteStreamSync = class extends WriteStream {
+      static {
+        __name(this, "WriteStreamSync");
+      }
+      [_open]() {
+        let fd;
+        if (this[_defaultFlag] && this[_flags] === "r+") {
+          try {
+            fd = fs.openSync(this[_path], this[_flags], this[_mode]);
+          } catch (er) {
+            if (er.code === "ENOENT") {
+              this[_flags] = "w";
+              return this[_open]();
+            } else {
+              throw er;
+            }
+          }
+        } else {
+          fd = fs.openSync(this[_path], this[_flags], this[_mode]);
+        }
+        this[_onopen](null, fd);
+      }
+      [_close]() {
+        if (this[_autoClose] && typeof this[_fd] === "number") {
+          const fd = this[_fd];
+          this[_fd] = null;
+          fs.closeSync(fd);
+          this.emit("close");
+        }
+      }
+      [_write](buf) {
+        let threw = true;
+        try {
+          this[_onwrite](
+            null,
+            fs.writeSync(this[_fd], buf, 0, buf.length, this[_pos])
+          );
+          threw = false;
+        } finally {
+          if (threw) {
+            try {
+              this[_close]();
+            } catch {
+            }
+          }
+        }
+      }
+    };
+    exports2.ReadStream = ReadStream;
+    exports2.ReadStreamSync = ReadStreamSync;
+    exports2.WriteStream = WriteStream;
+    exports2.WriteStreamSync = WriteStreamSync;
+  }
+});
+
+// node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/content/read.js
+var require_read = __commonJS({
+  "node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/content/read.js"(exports2, module2) {
+    "use strict";
+    var fs = require("fs/promises");
+    var fsm = require_lib16();
+    var ssri = require_lib12();
+    var contentPath = require_path();
+    var Pipeline = require_minipass_pipeline();
+    module2.exports = read;
+    var MAX_SINGLE_READ_SIZE = 64 * 1024 * 1024;
+    async function read(cache, integrity, opts = {}) {
+      const { size } = opts;
+      const { stat, cpath, sri } = await withContentSri(cache, integrity, async (cpath2, sri2) => {
+        const stat2 = size ? { size } : await fs.stat(cpath2);
+        return { stat: stat2, cpath: cpath2, sri: sri2 };
+      });
+      if (stat.size > MAX_SINGLE_READ_SIZE) {
+        return readPipeline(cpath, stat.size, sri, new Pipeline()).concat();
+      }
+      const data = await fs.readFile(cpath, { encoding: null });
+      if (stat.size !== data.length) {
+        throw sizeError(stat.size, data.length);
+      }
+      if (!ssri.checkData(data, sri)) {
+        throw integrityError(sri, cpath);
+      }
+      return data;
+    }
+    __name(read, "read");
+    var readPipeline = /* @__PURE__ */ __name((cpath, size, sri, stream) => {
+      stream.push(
+        new fsm.ReadStream(cpath, {
+          size,
+          readSize: MAX_SINGLE_READ_SIZE
+        }),
+        ssri.integrityStream({
+          integrity: sri,
+          size
+        })
+      );
+      return stream;
+    }, "readPipeline");
+    module2.exports.stream = readStream;
+    module2.exports.readStream = readStream;
+    function readStream(cache, integrity, opts = {}) {
+      const { size } = opts;
+      const stream = new Pipeline();
+      Promise.resolve().then(async () => {
+        const { stat, cpath, sri } = await withContentSri(cache, integrity, async (cpath2, sri2) => {
+          const stat2 = size ? { size } : await fs.stat(cpath2);
+          return { stat: stat2, cpath: cpath2, sri: sri2 };
+        });
+        return readPipeline(cpath, stat.size, sri, stream);
+      }).catch((err) => stream.emit("error", err));
+      return stream;
+    }
+    __name(readStream, "readStream");
+    module2.exports.copy = copy;
+    function copy(cache, integrity, dest) {
+      return withContentSri(cache, integrity, (cpath) => {
+        return fs.copyFile(cpath, dest);
+      });
+    }
+    __name(copy, "copy");
+    module2.exports.hasContent = hasContent;
+    async function hasContent(cache, integrity) {
+      if (!integrity) {
+        return false;
+      }
+      try {
+        return await withContentSri(cache, integrity, async (cpath, sri) => {
+          const stat = await fs.stat(cpath);
+          return { size: stat.size, sri, stat };
+        });
+      } catch (err) {
+        if (err.code === "ENOENT") {
+          return false;
+        }
+        if (err.code === "EPERM") {
+          if (process.platform !== "win32") {
+            throw err;
+          } else {
+            return false;
+          }
+        }
+      }
+    }
+    __name(hasContent, "hasContent");
+    async function withContentSri(cache, integrity, fn) {
+      const sri = ssri.parse(integrity);
+      const algo = sri.pickAlgorithm();
+      const digests = sri[algo];
+      if (digests.length <= 1) {
+        const cpath = contentPath(cache, digests[0]);
+        return fn(cpath, digests[0]);
+      } else {
+        const results = await Promise.all(digests.map(async (meta) => {
+          try {
+            return await withContentSri(cache, meta, fn);
+          } catch (err) {
+            if (err.code === "ENOENT") {
+              return Object.assign(
+                new Error("No matching content found for " + sri.toString()),
+                { code: "ENOENT" }
+              );
+            }
+            return err;
+          }
+        }));
+        const result = results.find((r) => !(r instanceof Error));
+        if (result) {
+          return result;
+        }
+        const enoentError = results.find((r) => r.code === "ENOENT");
+        if (enoentError) {
+          throw enoentError;
+        }
+        throw results.find((r) => r instanceof Error);
+      }
+    }
+    __name(withContentSri, "withContentSri");
+    function sizeError(expected, found) {
+      const err = new Error(`Bad data size: expected inserted data to be ${expected} bytes, but got ${found} instead`);
+      err.expected = expected;
+      err.found = found;
+      err.code = "EBADSIZE";
+      return err;
+    }
+    __name(sizeError, "sizeError");
+    function integrityError(sri, path) {
+      const err = new Error(`Integrity verification failed for ${sri} (${path})`);
+      err.code = "EINTEGRITY";
+      err.sri = sri;
+      err.path = path;
+      return err;
+    }
+    __name(integrityError, "integrityError");
+  }
+});
+
+// node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/get.js
+var require_get = __commonJS({
+  "node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/get.js"(exports2, module2) {
+    "use strict";
+    var Collect = require_minipass_collect();
+    var { Minipass } = require_commonjs5();
+    var Pipeline = require_minipass_pipeline();
+    var index = require_entry_index();
+    var memo = require_memoization();
+    var read = require_read();
+    async function getData(cache, key, opts = {}) {
+      const { integrity, memoize, size } = opts;
+      const memoized = memo.get(cache, key, opts);
+      if (memoized && memoize !== false) {
+        return {
+          metadata: memoized.entry.metadata,
+          data: memoized.data,
+          integrity: memoized.entry.integrity,
+          size: memoized.entry.size
+        };
+      }
+      const entry = await index.find(cache, key, opts);
+      if (!entry) {
+        throw new index.NotFoundError(cache, key);
+      }
+      const data = await read(cache, entry.integrity, { integrity, size });
+      if (memoize) {
+        memo.put(cache, entry, data, opts);
+      }
+      return {
+        data,
+        metadata: entry.metadata,
+        size: entry.size,
+        integrity: entry.integrity
+      };
+    }
+    __name(getData, "getData");
+    module2.exports = getData;
+    async function getDataByDigest(cache, key, opts = {}) {
+      const { integrity, memoize, size } = opts;
+      const memoized = memo.get.byDigest(cache, key, opts);
+      if (memoized && memoize !== false) {
+        return memoized;
+      }
+      const res = await read(cache, key, { integrity, size });
+      if (memoize) {
+        memo.put.byDigest(cache, key, res, opts);
+      }
+      return res;
+    }
+    __name(getDataByDigest, "getDataByDigest");
+    module2.exports.byDigest = getDataByDigest;
+    var getMemoizedStream = /* @__PURE__ */ __name((memoized) => {
+      const stream = new Minipass();
+      stream.on("newListener", function(ev, cb) {
+        ev === "metadata" && cb(memoized.entry.metadata);
+        ev === "integrity" && cb(memoized.entry.integrity);
+        ev === "size" && cb(memoized.entry.size);
+      });
+      stream.end(memoized.data);
+      return stream;
+    }, "getMemoizedStream");
+    function getStream(cache, key, opts = {}) {
+      const { memoize, size } = opts;
+      const memoized = memo.get(cache, key, opts);
+      if (memoized && memoize !== false) {
+        return getMemoizedStream(memoized);
+      }
+      const stream = new Pipeline();
+      Promise.resolve().then(async () => {
+        const entry = await index.find(cache, key);
+        if (!entry) {
+          throw new index.NotFoundError(cache, key);
+        }
+        stream.emit("metadata", entry.metadata);
+        stream.emit("integrity", entry.integrity);
+        stream.emit("size", entry.size);
+        stream.on("newListener", function(ev, cb) {
+          ev === "metadata" && cb(entry.metadata);
+          ev === "integrity" && cb(entry.integrity);
+          ev === "size" && cb(entry.size);
+        });
+        const src = read.readStream(
+          cache,
+          entry.integrity,
+          { ...opts, size: typeof size !== "number" ? entry.size : size }
+        );
+        if (memoize) {
+          const memoStream = new Collect.PassThrough();
+          memoStream.on("collect", (data) => memo.put(cache, entry, data, opts));
+          stream.unshift(memoStream);
+        }
+        stream.unshift(src);
+        return stream;
+      }).catch((err) => stream.emit("error", err));
+      return stream;
+    }
+    __name(getStream, "getStream");
+    module2.exports.stream = getStream;
+    function getStreamDigest(cache, integrity, opts = {}) {
+      const { memoize } = opts;
+      const memoized = memo.get.byDigest(cache, integrity, opts);
+      if (memoized && memoize !== false) {
+        const stream = new Minipass();
+        stream.end(memoized);
+        return stream;
+      } else {
+        const stream = read.readStream(cache, integrity, opts);
+        if (!memoize) {
+          return stream;
+        }
+        const memoStream = new Collect.PassThrough();
+        memoStream.on("collect", (data) => memo.put.byDigest(
+          cache,
+          integrity,
+          data,
+          opts
+        ));
+        return new Pipeline(stream, memoStream);
+      }
+    }
+    __name(getStreamDigest, "getStreamDigest");
+    module2.exports.stream.byDigest = getStreamDigest;
+    function info(cache, key, opts = {}) {
+      const { memoize } = opts;
+      const memoized = memo.get(cache, key, opts);
+      if (memoized && memoize !== false) {
+        return Promise.resolve(memoized.entry);
+      } else {
+        return index.find(cache, key);
+      }
+    }
+    __name(info, "info");
+    module2.exports.info = info;
+    async function copy(cache, key, dest, opts = {}) {
+      const entry = await index.find(cache, key, opts);
+      if (!entry) {
+        throw new index.NotFoundError(cache, key);
+      }
+      await read.copy(cache, entry.integrity, dest, opts);
+      return {
+        metadata: entry.metadata,
+        size: entry.size,
+        integrity: entry.integrity
+      };
+    }
+    __name(copy, "copy");
+    module2.exports.copy = copy;
+    async function copyByDigest(cache, key, dest, opts = {}) {
+      await read.copy(cache, key, dest, opts);
+      return key;
+    }
+    __name(copyByDigest, "copyByDigest");
+    module2.exports.copy.byDigest = copyByDigest;
+    module2.exports.hasContent = read.hasContent;
+  }
+});
+
+// node_modules/.pnpm/minipass-flush@1.0.7_patch_hash=4a4cd8b943f82f604bbf860eb115cf24118327b78afb799fee8dfd90c3546769/node_modules/minipass-flush/index.js
+var require_minipass_flush = __commonJS({
+  "node_modules/.pnpm/minipass-flush@1.0.7_patch_hash=4a4cd8b943f82f604bbf860eb115cf24118327b78afb799fee8dfd90c3546769/node_modules/minipass-flush/index.js"(exports2, module2) {
+    var { Minipass } = require_commonjs5();
+    var _flush = Symbol("_flush");
+    var _flushed = Symbol("_flushed");
+    var _flushing = Symbol("_flushing");
+    var Flush = class extends Minipass {
+      static {
+        __name(this, "Flush");
+      }
+      constructor(opt = {}) {
+        if (typeof opt === "function")
+          opt = { flush: opt };
+        super(opt);
+        if (typeof opt.flush !== "function" && typeof this.flush !== "function")
+          throw new TypeError("must provide flush function in options");
+        this[_flush] = opt.flush || this.flush;
+      }
+      emit(ev, ...data) {
+        if (ev !== "end" && ev !== "finish" || this[_flushed])
+          return super.emit(ev, ...data);
+        if (this[_flushing])
+          return;
+        this[_flushing] = true;
+        const afterFlush = /* @__PURE__ */ __name((er) => {
+          this[_flushed] = true;
+          er ? super.emit("error", er) : super.emit("end");
+        }, "afterFlush");
+        const ret = this[_flush](afterFlush);
+        if (ret && ret.then)
+          ret.then(() => afterFlush(), (er) => afterFlush(er));
+      }
+    };
+    module2.exports = Flush;
+  }
+});
+
+// node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/content/write.js
+var require_write = __commonJS({
+  "node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/content/write.js"(exports2, module2) {
+    "use strict";
+    var events = require("events");
+    var contentPath = require_path();
+    var fs = require("fs/promises");
+    var { moveFile } = require_lib15();
+    var { Minipass } = require_commonjs5();
+    var Pipeline = require_minipass_pipeline();
+    var Flush = require_minipass_flush();
+    var path = require("path");
+    var ssri = require_lib12();
+    var uniqueFilename = require_lib14();
+    var fsm = require_lib16();
+    module2.exports = write;
+    var moveOperations = /* @__PURE__ */ new Map();
+    async function write(cache, data, opts = {}) {
+      const { algorithms, size, integrity } = opts;
+      if (typeof size === "number" && data.length !== size) {
+        throw sizeError(size, data.length);
+      }
+      const sri = ssri.fromData(data, algorithms ? { algorithms } : {});
+      if (integrity && !ssri.checkData(data, integrity, opts)) {
+        throw checksumError(integrity, sri);
+      }
+      for (const algo in sri) {
+        const tmp = await makeTmp(cache, opts);
+        const hash = sri[algo].toString();
+        try {
+          await fs.writeFile(tmp.target, data, { flag: "wx" });
+          await moveToDestination(tmp, cache, hash, opts);
+        } finally {
+          if (!tmp.moved) {
+            await fs.rm(tmp.target, { recursive: true, force: true });
+          }
+        }
+      }
+      return { integrity: sri, size: data.length };
+    }
+    __name(write, "write");
+    module2.exports.stream = writeStream;
+    var CacacheWriteStream = class extends Flush {
+      static {
+        __name(this, "CacacheWriteStream");
+      }
+      constructor(cache, opts) {
+        super();
+        this.opts = opts;
+        this.cache = cache;
+        this.inputStream = new Minipass();
+        this.inputStream.on("error", (er) => this.emit("error", er));
+        this.inputStream.on("drain", () => this.emit("drain"));
+        this.handleContentP = null;
+      }
+      write(chunk, encoding, cb) {
+        if (!this.handleContentP) {
+          this.handleContentP = handleContent(
+            this.inputStream,
+            this.cache,
+            this.opts
+          );
+          this.handleContentP.catch((error) => this.emit("error", error));
+        }
+        return this.inputStream.write(chunk, encoding, cb);
+      }
+      flush(cb) {
+        this.inputStream.end(() => {
+          if (!this.handleContentP) {
+            const e = new Error("Cache input stream was empty");
+            e.code = "ENODATA";
+            return Promise.reject(e).catch(cb);
+          }
+          this.handleContentP.then(
+            (res) => {
+              res.integrity && this.emit("integrity", res.integrity);
+              res.size !== null && this.emit("size", res.size);
+              cb();
+            },
+            (er) => cb(er)
+          );
+        });
+      }
+    };
+    function writeStream(cache, opts = {}) {
+      return new CacacheWriteStream(cache, opts);
+    }
+    __name(writeStream, "writeStream");
+    async function handleContent(inputStream, cache, opts) {
+      const tmp = await makeTmp(cache, opts);
+      try {
+        const res = await pipeToTmp(inputStream, cache, tmp.target, opts);
+        await moveToDestination(
+          tmp,
+          cache,
+          res.integrity,
+          opts
+        );
+        return res;
+      } finally {
+        if (!tmp.moved) {
+          await fs.rm(tmp.target, { recursive: true, force: true });
+        }
+      }
+    }
+    __name(handleContent, "handleContent");
+    async function pipeToTmp(inputStream, cache, tmpTarget, opts) {
+      const outStream = new fsm.WriteStream(tmpTarget, {
+        flags: "wx"
+      });
+      if (opts.integrityEmitter) {
+        const [integrity2, size2] = await Promise.all([
+          events.once(opts.integrityEmitter, "integrity").then((res) => res[0]),
+          events.once(opts.integrityEmitter, "size").then((res) => res[0]),
+          new Pipeline(inputStream, outStream).promise()
+        ]);
+        return { integrity: integrity2, size: size2 };
+      }
+      let integrity;
+      let size;
+      const hashStream = ssri.integrityStream({
+        integrity: opts.integrity,
+        algorithms: opts.algorithms,
+        size: opts.size
+      });
+      hashStream.on("integrity", (i) => {
+        integrity = i;
+      });
+      hashStream.on("size", (s) => {
+        size = s;
+      });
+      const pipeline = new Pipeline(inputStream, hashStream, outStream);
+      await pipeline.promise();
+      return { integrity, size };
+    }
+    __name(pipeToTmp, "pipeToTmp");
+    async function makeTmp(cache, opts) {
+      const tmpTarget = uniqueFilename(path.join(cache, "tmp"), opts.tmpPrefix);
+      await fs.mkdir(path.dirname(tmpTarget), { recursive: true });
+      return {
+        target: tmpTarget,
+        moved: false
+      };
+    }
+    __name(makeTmp, "makeTmp");
+    async function moveToDestination(tmp, cache, sri) {
+      const destination = contentPath(cache, sri);
+      const destDir = path.dirname(destination);
+      if (moveOperations.has(destination)) {
+        return moveOperations.get(destination);
+      }
+      moveOperations.set(
+        destination,
+        fs.mkdir(destDir, { recursive: true }).then(async () => {
+          await moveFile(tmp.target, destination, { overwrite: false });
+          tmp.moved = true;
+          return tmp.moved;
+        }).catch((err) => {
+          if (!err.message.startsWith("The destination file exists")) {
+            throw Object.assign(err, { code: "EEXIST" });
+          }
+        }).finally(() => {
+          moveOperations.delete(destination);
+        })
+      );
+      return moveOperations.get(destination);
+    }
+    __name(moveToDestination, "moveToDestination");
+    function sizeError(expected, found) {
+      const err = new Error(`Bad data size: expected inserted data to be ${expected} bytes, but got ${found} instead`);
+      err.expected = expected;
+      err.found = found;
+      err.code = "EBADSIZE";
+      return err;
+    }
+    __name(sizeError, "sizeError");
+    function checksumError(expected, found) {
+      const err = new Error(`Integrity check failed:
+  Wanted: ${expected}
+   Found: ${found}`);
+      err.code = "EINTEGRITY";
+      err.expected = expected;
+      err.found = found;
+      return err;
+    }
+    __name(checksumError, "checksumError");
+  }
+});
+
+// node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/put.js
+var require_put = __commonJS({
+  "node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/put.js"(exports2, module2) {
+    "use strict";
+    var index = require_entry_index();
+    var memo = require_memoization();
+    var write = require_write();
+    var Flush = require_minipass_flush();
+    var { PassThrough } = require_minipass_collect();
+    var Pipeline = require_minipass_pipeline();
+    var putOpts = /* @__PURE__ */ __name((opts) => ({
+      algorithms: ["sha512"],
+      ...opts
+    }), "putOpts");
+    module2.exports = putData;
+    async function putData(cache, key, data, opts = {}) {
+      const { memoize } = opts;
+      opts = putOpts(opts);
+      const res = await write(cache, data, opts);
+      const entry = await index.insert(cache, key, res.integrity, { ...opts, size: res.size });
+      if (memoize) {
+        memo.put(cache, entry, data, opts);
+      }
+      return res.integrity;
+    }
+    __name(putData, "putData");
+    module2.exports.stream = putStream;
+    function putStream(cache, key, opts = {}) {
+      const { memoize } = opts;
+      opts = putOpts(opts);
+      let integrity;
+      let size;
+      let error;
+      let memoData;
+      const pipeline = new Pipeline();
+      if (memoize) {
+        const memoizer = new PassThrough().on("collect", (data) => {
+          memoData = data;
+        });
+        pipeline.push(memoizer);
+      }
+      const contentStream = write.stream(cache, opts).on("integrity", (int) => {
+        integrity = int;
+      }).on("size", (s) => {
+        size = s;
+      }).on("error", (err) => {
+        error = err;
+      });
+      pipeline.push(contentStream);
+      pipeline.push(new Flush({
+        async flush() {
+          if (!error) {
+            const entry = await index.insert(cache, key, integrity, { ...opts, size });
+            if (memoize && memoData) {
+              memo.put(cache, entry, memoData, opts);
+            }
+            pipeline.emit("integrity", integrity);
+            pipeline.emit("size", size);
+          }
+        }
+      }));
+      return pipeline;
+    }
+    __name(putStream, "putStream");
+  }
+});
+
+// node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/util/glob.js
+var require_glob2 = __commonJS({
+  "node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/util/glob.js"(exports2, module2) {
+    "use strict";
+    var { glob } = require_commonjs7();
+    var path = require("path");
+    var globify = /* @__PURE__ */ __name((pattern) => pattern.split(path.win32.sep).join(path.posix.sep), "globify");
+    module2.exports = (path2, options) => glob(globify(path2), options);
+  }
+});
+
+// node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/content/rm.js
+var require_rm = __commonJS({
+  "node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/content/rm.js"(exports2, module2) {
+    "use strict";
+    var fs = require("fs/promises");
+    var contentPath = require_path();
+    var { hasContent } = require_read();
+    module2.exports = rm;
+    async function rm(cache, integrity) {
+      const content = await hasContent(cache, integrity);
+      if (content && content.sri) {
+        await fs.rm(contentPath(cache, content.sri), { recursive: true, force: true });
+        return true;
+      } else {
+        return false;
+      }
+    }
+    __name(rm, "rm");
+  }
+});
+
+// node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/rm.js
+var require_rm2 = __commonJS({
+  "node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/rm.js"(exports2, module2) {
+    "use strict";
+    var { rm } = require("fs/promises");
+    var glob = require_glob2();
+    var index = require_entry_index();
+    var memo = require_memoization();
+    var path = require("path");
+    var rmContent = require_rm();
+    module2.exports = entry;
+    module2.exports.entry = entry;
+    function entry(cache, key, opts) {
+      memo.clearMemoized();
+      return index.delete(cache, key, opts);
+    }
+    __name(entry, "entry");
+    module2.exports.content = content;
+    function content(cache, integrity) {
+      memo.clearMemoized();
+      return rmContent(cache, integrity);
+    }
+    __name(content, "content");
+    module2.exports.all = all;
+    async function all(cache) {
+      memo.clearMemoized();
+      const paths = await glob(path.join(cache, "*(content-*|index-*)"), { silent: true, nosort: true });
+      return Promise.all(paths.map((p) => rm(p, { recursive: true, force: true })));
+    }
+    __name(all, "all");
+  }
+});
+
+// node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/verify.js
+var require_verify = __commonJS({
+  "node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/verify.js"(exports2, module2) {
+    "use strict";
+    var {
+      mkdir,
+      readFile,
+      rm,
+      stat,
+      truncate,
+      writeFile
+    } = require("fs/promises");
+    var contentPath = require_path();
+    var fsm = require_lib16();
+    var glob = require_glob2();
+    var index = require_entry_index();
+    var path = require("path");
+    var ssri = require_lib12();
+    var hasOwnProperty = /* @__PURE__ */ __name((obj, key) => Object.prototype.hasOwnProperty.call(obj, key), "hasOwnProperty");
+    var verifyOpts = /* @__PURE__ */ __name((opts) => ({
+      concurrency: 20,
+      log: { silly() {
+      } },
+      ...opts
+    }), "verifyOpts");
+    module2.exports = verify;
+    async function verify(cache, opts) {
+      opts = verifyOpts(opts);
+      opts.log.silly("verify", "verifying cache at", cache);
+      const steps = [
+        markStartTime,
+        fixPerms,
+        garbageCollect,
+        rebuildIndex,
+        cleanTmp,
+        writeVerifile,
+        markEndTime
+      ];
+      const stats = {};
+      for (const step of steps) {
+        const label = step.name;
+        const start = /* @__PURE__ */ new Date();
+        const s = await step(cache, opts);
+        if (s) {
+          Object.keys(s).forEach((k) => {
+            stats[k] = s[k];
+          });
+        }
+        const end = /* @__PURE__ */ new Date();
+        if (!stats.runTime) {
+          stats.runTime = {};
+        }
+        stats.runTime[label] = end - start;
+      }
+      stats.runTime.total = stats.endTime - stats.startTime;
+      opts.log.silly(
+        "verify",
+        "verification finished for",
+        cache,
+        "in",
+        `${stats.runTime.total}ms`
+      );
+      return stats;
+    }
+    __name(verify, "verify");
+    async function markStartTime() {
+      return { startTime: /* @__PURE__ */ new Date() };
+    }
+    __name(markStartTime, "markStartTime");
+    async function markEndTime() {
+      return { endTime: /* @__PURE__ */ new Date() };
+    }
+    __name(markEndTime, "markEndTime");
+    async function fixPerms(cache, opts) {
+      opts.log.silly("verify", "fixing cache permissions");
+      await mkdir(cache, { recursive: true });
+      return null;
+    }
+    __name(fixPerms, "fixPerms");
+    async function garbageCollect(cache, opts) {
+      opts.log.silly("verify", "garbage collecting content");
+      const { default: pMap2 } = await Promise.resolve().then(() => (init_p_map(), p_map_exports));
+      const indexStream = index.lsStream(cache);
+      const liveContent = /* @__PURE__ */ new Set();
+      indexStream.on("data", (entry) => {
+        if (opts.filter && !opts.filter(entry)) {
+          return;
+        }
+        const integrity = ssri.parse(entry.integrity);
+        for (const algo in integrity) {
+          liveContent.add(integrity[algo].toString());
+        }
+      });
+      await new Promise((resolve, reject) => {
+        indexStream.on("end", resolve).on("error", reject);
+      });
+      const contentDir = contentPath.contentDir(cache);
+      const files = await glob(path.join(contentDir, "**"), {
+        follow: false,
+        nodir: true,
+        nosort: true
+      });
+      const stats = {
+        verifiedContent: 0,
+        reclaimedCount: 0,
+        reclaimedSize: 0,
+        badContentCount: 0,
+        keptSize: 0
+      };
+      await pMap2(
+        files,
+        async (f) => {
+          const split = f.split(/[/\\]/);
+          const digest = split.slice(split.length - 3).join("");
+          const algo = split[split.length - 4];
+          const integrity = ssri.fromHex(digest, algo);
+          if (liveContent.has(integrity.toString())) {
+            const info = await verifyContent(f, integrity);
+            if (!info.valid) {
+              stats.reclaimedCount++;
+              stats.badContentCount++;
+              stats.reclaimedSize += info.size;
+            } else {
+              stats.verifiedContent++;
+              stats.keptSize += info.size;
+            }
+          } else {
+            stats.reclaimedCount++;
+            const s = await stat(f);
+            await rm(f, { recursive: true, force: true });
+            stats.reclaimedSize += s.size;
+          }
+          return stats;
+        },
+        { concurrency: opts.concurrency }
+      );
+      return stats;
+    }
+    __name(garbageCollect, "garbageCollect");
+    async function verifyContent(filepath, sri) {
+      const contentInfo = {};
+      try {
+        const { size } = await stat(filepath);
+        contentInfo.size = size;
+        contentInfo.valid = true;
+        await ssri.checkStream(new fsm.ReadStream(filepath), sri);
+      } catch (err) {
+        if (err.code === "ENOENT") {
+          return { size: 0, valid: false };
+        }
+        if (err.code !== "EINTEGRITY") {
+          throw err;
+        }
+        await rm(filepath, { recursive: true, force: true });
+        contentInfo.valid = false;
+      }
+      return contentInfo;
+    }
+    __name(verifyContent, "verifyContent");
+    async function rebuildIndex(cache, opts) {
+      opts.log.silly("verify", "rebuilding index");
+      const { default: pMap2 } = await Promise.resolve().then(() => (init_p_map(), p_map_exports));
+      const entries = await index.ls(cache);
+      const stats = {
+        missingContent: 0,
+        rejectedEntries: 0,
+        totalEntries: 0
+      };
+      const buckets = {};
+      for (const k in entries) {
+        if (hasOwnProperty(entries, k)) {
+          const hashed = index.hashKey(k);
+          const entry = entries[k];
+          const excluded = opts.filter && !opts.filter(entry);
+          excluded && stats.rejectedEntries++;
+          if (buckets[hashed] && !excluded) {
+            buckets[hashed].push(entry);
+          } else if (buckets[hashed] && excluded) {
+          } else if (excluded) {
+            buckets[hashed] = [];
+            buckets[hashed]._path = index.bucketPath(cache, k);
+          } else {
+            buckets[hashed] = [entry];
+            buckets[hashed]._path = index.bucketPath(cache, k);
+          }
+        }
+      }
+      await pMap2(
+        Object.keys(buckets),
+        (key) => {
+          return rebuildBucket(cache, buckets[key], stats, opts);
+        },
+        { concurrency: opts.concurrency }
+      );
+      return stats;
+    }
+    __name(rebuildIndex, "rebuildIndex");
+    async function rebuildBucket(cache, bucket, stats) {
+      await truncate(bucket._path);
+      for (const entry of bucket) {
+        const content = contentPath(cache, entry.integrity);
+        try {
+          await stat(content);
+          await index.insert(cache, entry.key, entry.integrity, {
+            metadata: entry.metadata,
+            size: entry.size,
+            time: entry.time
+          });
+          stats.totalEntries++;
+        } catch (err) {
+          if (err.code === "ENOENT") {
+            stats.rejectedEntries++;
+            stats.missingContent++;
+          } else {
+            throw err;
+          }
+        }
+      }
+    }
+    __name(rebuildBucket, "rebuildBucket");
+    function cleanTmp(cache, opts) {
+      opts.log.silly("verify", "cleaning tmp directory");
+      return rm(path.join(cache, "tmp"), { recursive: true, force: true });
+    }
+    __name(cleanTmp, "cleanTmp");
+    async function writeVerifile(cache, opts) {
+      const verifile = path.join(cache, "_lastverified");
+      opts.log.silly("verify", "writing verifile to " + verifile);
+      return writeFile(verifile, `${Date.now()}`);
+    }
+    __name(writeVerifile, "writeVerifile");
+    module2.exports.lastRun = lastRun;
+    async function lastRun(cache) {
+      const data = await readFile(path.join(cache, "_lastverified"), { encoding: "utf8" });
+      return /* @__PURE__ */ new Date(+data);
+    }
+    __name(lastRun, "lastRun");
+  }
+});
+
+// node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/util/tmp.js
+var require_tmp = __commonJS({
+  "node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/util/tmp.js"(exports2, module2) {
+    "use strict";
+    var { withTempDir } = require_lib15();
+    var fs = require("fs/promises");
+    var path = require("path");
+    module2.exports.mkdir = mktmpdir;
+    async function mktmpdir(cache, opts = {}) {
+      const { tmpPrefix } = opts;
+      const tmpDir = path.join(cache, "tmp");
+      await fs.mkdir(tmpDir, { recursive: true, owner: "inherit" });
+      const target = `${tmpDir}${path.sep}${tmpPrefix || ""}`;
+      return fs.mkdtemp(target, { owner: "inherit" });
+    }
+    __name(mktmpdir, "mktmpdir");
+    module2.exports.withTmp = withTmp;
+    function withTmp(cache, opts, cb) {
+      if (!cb) {
+        cb = opts;
+        opts = {};
+      }
+      return withTempDir(path.join(cache, "tmp"), cb, opts);
+    }
+    __name(withTmp, "withTmp");
+  }
+});
+
+// node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/index.js
+var require_lib17 = __commonJS({
+  "node_modules/.pnpm/cacache@20.0.1/node_modules/cacache/lib/index.js"(exports2, module2) {
+    "use strict";
+    var get = require_get();
+    var put = require_put();
+    var rm = require_rm2();
+    var verify = require_verify();
+    var { clearMemoized } = require_memoization();
+    var tmp = require_tmp();
+    var index = require_entry_index();
+    module2.exports.index = {};
+    module2.exports.index.compact = index.compact;
+    module2.exports.index.insert = index.insert;
+    module2.exports.ls = index.ls;
+    module2.exports.ls.stream = index.lsStream;
+    module2.exports.get = get;
+    module2.exports.get.byDigest = get.byDigest;
+    module2.exports.get.stream = get.stream;
+    module2.exports.get.stream.byDigest = get.stream.byDigest;
+    module2.exports.get.copy = get.copy;
+    module2.exports.get.copy.byDigest = get.copy.byDigest;
+    module2.exports.get.info = get.info;
+    module2.exports.get.hasContent = get.hasContent;
+    module2.exports.put = put;
+    module2.exports.put.stream = put.stream;
+    module2.exports.rm = rm.entry;
+    module2.exports.rm.all = rm.all;
+    module2.exports.rm.entry = module2.exports.rm;
+    module2.exports.rm.content = rm.content;
+    module2.exports.clearMemoized = clearMemoized;
+    module2.exports.tmp = {};
+    module2.exports.tmp.mkdir = tmp.mkdir;
+    module2.exports.tmp.withTmp = tmp.withTmp;
+    module2.exports.verify = verify;
+    module2.exports.verify.lastRun = verify.lastRun;
+  }
+});
+
+// node_modules/.pnpm/npm-bundled@5.0.0/node_modules/npm-bundled/lib/index.js
+var require_lib18 = __commonJS({
+  "node_modules/.pnpm/npm-bundled@5.0.0/node_modules/npm-bundled/lib/index.js"(exports2, module2) {
+    "use strict";
+    var fs = require("fs");
+    var path = require("path");
+    var EE = require("events").EventEmitter;
+    var normalizePackageBin = require_lib8();
+    var BundleWalker = class _BundleWalker extends EE {
+      static {
+        __name(this, "BundleWalker");
+      }
+      constructor(opt) {
+        opt = opt || {};
+        super(opt);
+        this.path = path.resolve(opt.path || process.cwd());
+        this.parent = opt.parent || null;
+        if (this.parent) {
+          this.result = this.parent.result;
+          if (!this.parent.parent) {
+            const base = path.basename(this.path);
+            const scope = path.basename(path.dirname(this.path));
+            this.result.add(/^@/.test(scope) ? scope + "/" + base : base);
+          }
+          this.root = this.parent.root;
+          this.packageJsonCache = this.parent.packageJsonCache;
+        } else {
+          this.result = /* @__PURE__ */ new Set();
+          this.root = this.path;
+          this.packageJsonCache = opt.packageJsonCache || /* @__PURE__ */ new Map();
+        }
+        this.seen = /* @__PURE__ */ new Set();
+        this.didDone = false;
+        this.children = 0;
+        this.node_modules = [];
+        this.package = null;
+        this.bundle = null;
+      }
+      addListener(ev, fn) {
+        return this.on(ev, fn);
+      }
+      on(ev, fn) {
+        const ret = super.on(ev, fn);
+        if (ev === "done" && this.didDone) {
+          this.emit("done", this.result);
+        }
+        return ret;
+      }
+      done() {
+        if (!this.didDone) {
+          this.didDone = true;
+          if (!this.parent) {
+            const res = Array.from(this.result);
+            this.result = res;
+            this.emit("done", res);
+          } else {
+            this.emit("done");
+          }
+        }
+      }
+      start() {
+        const pj = path.resolve(this.path, "package.json");
+        if (this.packageJsonCache.has(pj)) {
+          this.onPackage(this.packageJsonCache.get(pj));
+        } else {
+          this.readPackageJson(pj);
+        }
+        return this;
+      }
+      readPackageJson(pj) {
+        fs.readFile(pj, (er, data) => er ? this.done() : this.onPackageJson(pj, data));
+      }
+      onPackageJson(pj, data) {
+        try {
+          this.package = normalizePackageBin(JSON.parse(data + ""));
+        } catch (er) {
+          return this.done();
+        }
+        this.packageJsonCache.set(pj, this.package);
+        this.onPackage(this.package);
+      }
+      allDepsBundled(pkg) {
+        return Object.keys(pkg.dependencies || {}).concat(
+          Object.keys(pkg.optionalDependencies || {})
+        );
+      }
+      onPackage(pkg) {
+        const bdRaw = this.parent ? this.allDepsBundled(pkg) : pkg.bundleDependencies || pkg.bundledDependencies || [];
+        const bd = Array.from(new Set(
+          Array.isArray(bdRaw) ? bdRaw : bdRaw === true ? this.allDepsBundled(pkg) : Object.keys(bdRaw)
+        ));
+        if (!bd.length) {
+          return this.done();
+        }
+        this.bundle = bd;
+        this.readModules();
+      }
+      readModules() {
+        readdirNodeModules(this.path + "/node_modules", (er, nm) => er ? this.onReaddir([]) : this.onReaddir(nm));
+      }
+      onReaddir(nm) {
+        this.node_modules = nm;
+        this.bundle.forEach((dep) => this.childDep(dep));
+        if (this.children === 0) {
+          this.done();
+        }
+      }
+      childDep(dep) {
+        if (this.node_modules.indexOf(dep) !== -1) {
+          if (!this.seen.has(dep)) {
+            this.seen.add(dep);
+            this.child(dep);
+          }
+        } else if (this.parent) {
+          this.parent.childDep(dep);
+        }
+      }
+      child(dep) {
+        const p = this.path + "/node_modules/" + dep;
+        this.children += 1;
+        const child = new _BundleWalker({
+          path: p,
+          parent: this
+        });
+        child.on("done", () => {
+          if (--this.children === 0) {
+            this.done();
+          }
+        });
+        child.start();
+      }
+    };
+    var BundleWalkerSync = class _BundleWalkerSync extends BundleWalker {
+      static {
+        __name(this, "BundleWalkerSync");
+      }
+      start() {
+        super.start();
+        this.done();
+        return this;
+      }
+      readPackageJson(pj) {
+        try {
+          this.onPackageJson(pj, fs.readFileSync(pj));
+        } catch {
+        }
+        return this;
+      }
+      readModules() {
+        try {
+          this.onReaddir(readdirNodeModulesSync(this.path + "/node_modules"));
+        } catch {
+          this.onReaddir([]);
+        }
+      }
+      child(dep) {
+        new _BundleWalkerSync({
+          path: this.path + "/node_modules/" + dep,
+          parent: this
+        }).start();
+      }
+    };
+    var readdirNodeModules = /* @__PURE__ */ __name((nm, cb) => {
+      fs.readdir(nm, (er, set) => {
+        if (er) {
+          cb(er);
+        } else {
+          const scopes = set.filter((f) => /^@/.test(f));
+          if (!scopes.length) {
+            cb(null, set);
+          } else {
+            const unscoped = set.filter((f) => !/^@/.test(f));
+            let count = scopes.length;
+            scopes.forEach((scope) => {
+              fs.readdir(nm + "/" + scope, (readdirEr, pkgs) => {
+                if (readdirEr || !pkgs.length) {
+                  unscoped.push(scope);
+                } else {
+                  unscoped.push.apply(unscoped, pkgs.map((p) => scope + "/" + p));
+                }
+                if (--count === 0) {
+                  cb(null, unscoped);
+                }
+              });
+            });
+          }
+        }
+      });
+    }, "readdirNodeModules");
+    var readdirNodeModulesSync = /* @__PURE__ */ __name((nm) => {
+      const set = fs.readdirSync(nm);
+      const unscoped = set.filter((f) => !/^@/.test(f));
+      const scopes = set.filter((f) => /^@/.test(f)).map((scope) => {
+        try {
+          const pkgs = fs.readdirSync(nm + "/" + scope);
+          return pkgs.length ? pkgs.map((p) => scope + "/" + p) : [scope];
+        } catch (er) {
+          return [scope];
+        }
+      }).reduce((a, b) => a.concat(b), []);
+      return unscoped.concat(scopes);
+    }, "readdirNodeModulesSync");
+    var walk = /* @__PURE__ */ __name((options, callback) => {
+      const p = new Promise((resolve, reject) => {
+        new BundleWalker(options).on("done", resolve).on("error", reject).start();
+      });
+      return callback ? p.then((res) => callback(null, res), callback) : p;
+    }, "walk");
+    var walkSync = /* @__PURE__ */ __name((options) => {
+      return new BundleWalkerSync(options).start().result;
+    }, "walkSync");
+    module2.exports = walk;
+    walk.sync = walkSync;
+    walk.BundleWalker = BundleWalker;
+    walk.BundleWalkerSync = BundleWalkerSync;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+installed-package-contents@4.0.0/node_modules/@npmcli/installed-package-contents/lib/index.js
+var require_lib19 = __commonJS({
+  "node_modules/.pnpm/@npmcli+installed-package-contents@4.0.0/node_modules/@npmcli/installed-package-contents/lib/index.js"(exports2, module2) {
+    var bundled = require_lib18();
+    var { readFile, readdir, stat } = require("fs/promises");
+    var { resolve, basename, dirname } = require("path");
+    var normalizePackageBin = require_lib8();
+    var readPackage = /* @__PURE__ */ __name(({ path, packageJsonCache }) => packageJsonCache.has(path) ? Promise.resolve(packageJsonCache.get(path)) : readFile(path).then((json) => {
+      const pkg = normalizePackageBin(JSON.parse(json));
+      packageJsonCache.set(path, pkg);
+      return pkg;
+    }).catch(() => null), "readPackage");
+    var normalized = Symbol("package data has been normalized");
+    var rpj = /* @__PURE__ */ __name(({ path, packageJsonCache }) => readPackage({ path, packageJsonCache }).then((pkg) => {
+      if (!pkg || pkg[normalized]) {
+        return pkg;
+      }
+      if (pkg.bundledDependencies && !pkg.bundleDependencies) {
+        pkg.bundleDependencies = pkg.bundledDependencies;
+        delete pkg.bundledDependencies;
+      }
+      const bd = pkg.bundleDependencies;
+      if (bd === true) {
+        pkg.bundleDependencies = [
+          ...Object.keys(pkg.dependencies || {}),
+          ...Object.keys(pkg.optionalDependencies || {})
+        ];
+      }
+      if (typeof bd === "object" && !Array.isArray(bd)) {
+        pkg.bundleDependencies = Object.keys(bd);
+      }
+      pkg[normalized] = true;
+      return pkg;
+    }), "rpj");
+    var pkgContents = /* @__PURE__ */ __name(async ({
+      path,
+      depth = 1,
+      currentDepth = 0,
+      pkg = null,
+      result = null,
+      packageJsonCache = null
+    }) => {
+      if (!result) {
+        result = /* @__PURE__ */ new Set();
+      }
+      if (!packageJsonCache) {
+        packageJsonCache = /* @__PURE__ */ new Map();
+      }
+      if (pkg === true) {
+        return rpj({ path: path + "/package.json", packageJsonCache }).then((p) => pkgContents({
+          path,
+          depth,
+          currentDepth,
+          pkg: p,
+          result,
+          packageJsonCache
+        }));
+      }
+      if (pkg) {
+        if (pkg.bin) {
+          const dir = dirname(path);
+          const scope = basename(dir);
+          const nm = /^@.+/.test(scope) ? dirname(dir) : dir;
+          const binFiles = [];
+          Object.keys(pkg.bin).forEach((b) => {
+            const base = resolve(nm, ".bin", b);
+            binFiles.push(base, base + ".cmd", base + ".ps1");
+          });
+          const bins = await Promise.all(
+            binFiles.map((b) => stat(b).then(() => b).catch(() => null))
+          );
+          bins.filter((b) => b).forEach((b) => result.add(b));
+        }
+      }
+      if (currentDepth >= depth) {
+        result.add(path);
+        return result;
+      }
+      const [dirEntries, bundleDeps] = await Promise.all([
+        readdir(path, { withFileTypes: true }),
+        currentDepth === 0 && pkg && pkg.bundleDependencies ? bundled({ path, packageJsonCache }) : null
+      ]).catch(() => []);
+      if (!dirEntries) {
+        return result;
+      }
+      if (!dirEntries.length && !bundleDeps && currentDepth !== 0) {
+        result.add(path);
+        return result;
+      }
+      const recursePromises = [];
+      for (const entry of dirEntries) {
+        const p = resolve(path, entry.name);
+        if (entry.isDirectory() === false) {
+          result.add(p);
+          continue;
+        }
+        if (currentDepth !== 0 || entry.name !== "node_modules") {
+          if (currentDepth < depth - 1) {
+            recursePromises.push(pkgContents({
+              path: p,
+              packageJsonCache,
+              depth,
+              currentDepth: currentDepth + 1,
+              result
+            }));
+          } else {
+            result.add(p);
+          }
+          continue;
+        }
+      }
+      if (bundleDeps) {
+        recursePromises.push(...bundleDeps.map((dep) => {
+          const p = resolve(path, "node_modules", dep);
+          return pkgContents({
+            path: p,
+            packageJsonCache,
+            pkg: true,
+            depth,
+            currentDepth: currentDepth + 1,
+            result
+          });
+        }));
+      }
+      if (recursePromises.length) {
+        await Promise.all(recursePromises);
+      }
+      return result;
+    }, "pkgContents");
+    module2.exports = ({ path, ...opts }) => pkgContents({
+      path: resolve(path),
+      ...opts,
+      pkg: true
+    }).then((results) => [...results]);
+  }
+});
+
+// node_modules/.pnpm/@gar+promise-retry@1.0.3/node_modules/@gar/promise-retry/lib/retry.js
+var require_retry3 = __commonJS({
+  "node_modules/.pnpm/@gar+promise-retry@1.0.3/node_modules/@gar/promise-retry/lib/retry.js"(exports2, module2) {
+    var RetryOperation = class {
+      static {
+        __name(this, "RetryOperation");
+      }
+      #attempts = 1;
+      #cachedTimeouts = null;
+      #errors = [];
+      #fn = null;
+      #maxRetryTime;
+      #operationStart = null;
+      #originalTimeouts;
+      #timeouts;
+      #timer = null;
+      #unref;
+      constructor(timeouts, options = {}) {
+        this.#originalTimeouts = [...timeouts];
+        this.#timeouts = [...timeouts];
+        this.#unref = options.unref;
+        this.#maxRetryTime = options.maxRetryTime || Infinity;
+        if (options.forever) {
+          this.#cachedTimeouts = [...this.#timeouts];
+        }
+      }
+      get timeouts() {
+        return [...this.#timeouts];
+      }
+      get errors() {
+        return [...this.#errors];
+      }
+      get attempts() {
+        return this.#attempts;
+      }
+      get mainError() {
+        let mainError = null;
+        if (this.#errors.length) {
+          let mainErrorCount = 0;
+          const counts = {};
+          for (let i = 0; i < this.#errors.length; i++) {
+            const error = this.#errors[i];
+            const { message } = error;
+            if (!counts[message]) {
+              counts[message] = 0;
+            }
+            counts[message]++;
+            if (counts[message] >= mainErrorCount) {
+              mainError = error;
+              mainErrorCount = counts[message];
+            }
+          }
+        }
+        return mainError;
+      }
+      reset() {
+        this.#attempts = 1;
+        this.#timeouts = [...this.#originalTimeouts];
+      }
+      stop() {
+        if (this.#timer) {
+          clearTimeout(this.#timer);
+        }
+        this.#timeouts = [];
+        this.#cachedTimeouts = null;
+      }
+      retry(err) {
+        this.#errors.push(err);
+        if ((/* @__PURE__ */ new Date()).getTime() - this.#operationStart >= this.#maxRetryTime) {
+          this.#errors.unshift(new Error("RetryOperation timeout occurred"));
+          return false;
+        }
+        let timeout = this.#timeouts.shift();
+        if (timeout === void 0) {
+          if (this.#cachedTimeouts) {
+            this.#errors.pop();
+            timeout = this.#cachedTimeouts.at(-1);
+          } else {
+            return false;
+          }
+        }
+        this.#timer = setTimeout(() => {
+          this.#attempts++;
+          this.#fn(this.#attempts);
+        }, timeout);
+        if (this.#unref) {
+          this.#timer.unref();
+        }
+        return true;
+      }
+      attempt(fn) {
+        this.#fn = fn;
+        this.#operationStart = (/* @__PURE__ */ new Date()).getTime();
+        this.#fn(this.#attempts);
+      }
+    };
+    module2.exports = { RetryOperation };
+  }
+});
+
+// node_modules/.pnpm/@gar+promise-retry@1.0.3/node_modules/@gar/promise-retry/lib/index.js
+var require_lib20 = __commonJS({
+  "node_modules/.pnpm/@gar+promise-retry@1.0.3/node_modules/@gar/promise-retry/lib/index.js"(exports2, module2) {
+    var { RetryOperation } = require_retry3();
+    var createTimeout = /* @__PURE__ */ __name((attempt, opts) => Math.min(Math.round((1 + (opts.randomize ? Math.random() : 0)) * Math.max(opts.minTimeout, 1) * Math.pow(opts.factor, attempt)), opts.maxTimeout), "createTimeout");
+    var isRetryError = /* @__PURE__ */ __name((err) => err?.code === "EPROMISERETRY" && Object.hasOwn(err, "retried"), "isRetryError");
+    var promiseRetry = /* @__PURE__ */ __name(async (fn, options = {}) => {
+      let timeouts = [];
+      if (options instanceof Array) {
+        timeouts = [...options];
+      } else {
+        if (options.retries === Infinity) {
+          options.forever = true;
+          delete options.retries;
+        }
+        const opts = {
+          retries: 10,
+          factor: 2,
+          minTimeout: 1 * 1e3,
+          maxTimeout: Infinity,
+          randomize: false,
+          ...options
+        };
+        if (opts.minTimeout > opts.maxTimeout) {
+          throw new Error("minTimeout is greater than maxTimeout");
+        }
+        if (opts.retries) {
+          for (let i = 0; i < opts.retries; i++) {
+            timeouts.push(createTimeout(i, opts));
+          }
+          timeouts.sort((a, b) => a - b);
+        } else if (options.forever) {
+          timeouts.push(createTimeout(0, opts));
+        }
+      }
+      const operation = new RetryOperation(timeouts, {
+        forever: options.forever,
+        unref: options.unref,
+        maxRetryTime: options.maxRetryTime
+      });
+      return new Promise(function(resolve, reject) {
+        operation.attempt(async (number) => {
+          try {
+            const result = await fn((err) => {
+              throw Object.assign(new Error("Retrying"), { code: "EPROMISERETRY", retried: err });
+            }, number, operation);
+            return resolve(result);
+          } catch (err) {
+            if (!isRetryError(err)) {
+              return reject(err);
+            }
+            if (!operation.retry(err.retried || new Error())) {
+              return reject(err.retried);
+            }
+          }
+        });
+      });
+    }, "promiseRetry");
+    module2.exports = { promiseRetry };
+  }
+});
+
+// node_modules/.pnpm/tar@7.5.11/node_modules/tar/dist/commonjs/index.min.js
+var require_index_min = __commonJS({
+  "node_modules/.pnpm/tar@7.5.11/node_modules/tar/dist/commonjs/index.min.js"(exports2) {
+    "use strict";
+    var d = /* @__PURE__ */ __name((s, e) => () => (e || s((e = { exports: {} }).exports, e), e.exports), "d");
+    var We = d((C) => {
+      "use strict";
+      var yo = C && C.__importDefault || function(s) {
+        return s && s.__esModule ? s : { default: s };
+      };
+      Object.defineProperty(C, "__esModule", { value: true });
+      C.Minipass = C.isWritable = C.isReadable = C.isStream = void 0;
+      var Br = typeof process == "object" && process ? process : { stdout: null, stderr: null }, es = require("node:events"), xr = yo(require("node:stream")), Eo = require("node:string_decoder"), bo = /* @__PURE__ */ __name((s) => !!s && typeof s == "object" && (s instanceof Wt || s instanceof xr.default || (0, C.isReadable)(s) || (0, C.isWritable)(s)), "bo");
+      C.isStream = bo;
+      var So = /* @__PURE__ */ __name((s) => !!s && typeof s == "object" && s instanceof es.EventEmitter && typeof s.pipe == "function" && s.pipe !== xr.default.Writable.prototype.pipe, "So");
+      C.isReadable = So;
+      var go = /* @__PURE__ */ __name((s) => !!s && typeof s == "object" && s instanceof es.EventEmitter && typeof s.write == "function" && typeof s.end == "function", "go");
+      C.isWritable = go;
+      var le = Symbol("EOF"), ue = Symbol("maybeEmitEnd"), _e = Symbol("emittedEnd"), zt = Symbol("emittingEnd"), ft = Symbol("emittedError"), kt = Symbol("closed"), zr = Symbol("read"), jt = Symbol("flush"), kr = Symbol("flushChunk"), K = Symbol("encoding"), Ue = Symbol("decoder"), R = Symbol("flowing"), dt = Symbol("paused"), qe = Symbol("resume"), O = Symbol("buffer"), I = Symbol("pipes"), v = Symbol("bufferLength"), Ki = Symbol("bufferPush"), xt = Symbol("bufferShift"), N = Symbol("objectMode"), y = Symbol("destroyed"), Vi = Symbol("error"), $i = Symbol("emitData"), jr = Symbol("emitEnd"), Xi = Symbol("emitEnd2"), J = Symbol("async"), Qi = Symbol("abort"), Ut = Symbol("aborted"), mt = Symbol("signal"), Pe = Symbol("dataListeners"), k = Symbol("discarded"), pt = /* @__PURE__ */ __name((s) => Promise.resolve().then(s), "pt"), Ro = /* @__PURE__ */ __name((s) => s(), "Ro"), Oo = /* @__PURE__ */ __name((s) => s === "end" || s === "finish" || s === "prefinish", "Oo"), vo = /* @__PURE__ */ __name((s) => s instanceof ArrayBuffer || !!s && typeof s == "object" && s.constructor && s.constructor.name === "ArrayBuffer" && s.byteLength >= 0, "vo"), To = /* @__PURE__ */ __name((s) => !Buffer.isBuffer(s) && ArrayBuffer.isView(s), "To"), qt = class {
+        static {
+          __name(this, "qt");
+        }
+        src;
+        dest;
+        opts;
+        ondrain;
+        constructor(e, t, i) {
+          this.src = e, this.dest = t, this.opts = i, this.ondrain = () => e[qe](), this.dest.on("drain", this.ondrain);
+        }
+        unpipe() {
+          this.dest.removeListener("drain", this.ondrain);
+        }
+        proxyErrors(e) {
+        }
+        end() {
+          this.unpipe(), this.opts.end && this.dest.end();
+        }
+      }, Ji = class extends qt {
+        static {
+          __name(this, "Ji");
+        }
+        unpipe() {
+          this.src.removeListener("error", this.proxyErrors), super.unpipe();
+        }
+        constructor(e, t, i) {
+          super(e, t, i), this.proxyErrors = (r) => this.dest.emit("error", r), e.on("error", this.proxyErrors);
+        }
+      }, Do = /* @__PURE__ */ __name((s) => !!s.objectMode, "Do"), Po = /* @__PURE__ */ __name((s) => !s.objectMode && !!s.encoding && s.encoding !== "buffer", "Po"), Wt = class extends es.EventEmitter {
+        static {
+          __name(this, "Wt");
+        }
+        [R] = false;
+        [dt] = false;
+        [I] = [];
+        [O] = [];
+        [N];
+        [K];
+        [J];
+        [Ue];
+        [le] = false;
+        [_e] = false;
+        [zt] = false;
+        [kt] = false;
+        [ft] = null;
+        [v] = 0;
+        [y] = false;
+        [mt];
+        [Ut] = false;
+        [Pe] = 0;
+        [k] = false;
+        writable = true;
+        readable = true;
+        constructor(...e) {
+          let t = e[0] || {};
+          if (super(), t.objectMode && typeof t.encoding == "string") throw new TypeError("Encoding and objectMode may not be used together");
+          Do(t) ? (this[N] = true, this[K] = null) : Po(t) ? (this[K] = t.encoding, this[N] = false) : (this[N] = false, this[K] = null), this[J] = !!t.async, this[Ue] = this[K] ? new Eo.StringDecoder(this[K]) : null, t && t.debugExposeBuffer === true && Object.defineProperty(this, "buffer", { get: /* @__PURE__ */ __name(() => this[O], "get") }), t && t.debugExposePipes === true && Object.defineProperty(this, "pipes", { get: /* @__PURE__ */ __name(() => this[I], "get") });
+          let { signal: i } = t;
+          i && (this[mt] = i, i.aborted ? this[Qi]() : i.addEventListener("abort", () => this[Qi]()));
+        }
+        get bufferLength() {
+          return this[v];
+        }
+        get encoding() {
+          return this[K];
+        }
+        set encoding(e) {
+          throw new Error("Encoding must be set at instantiation time");
+        }
+        setEncoding(e) {
+          throw new Error("Encoding must be set at instantiation time");
+        }
+        get objectMode() {
+          return this[N];
+        }
+        set objectMode(e) {
+          throw new Error("objectMode must be set at instantiation time");
+        }
+        get async() {
+          return this[J];
+        }
+        set async(e) {
+          this[J] = this[J] || !!e;
+        }
+        [Qi]() {
+          this[Ut] = true, this.emit("abort", this[mt]?.reason), this.destroy(this[mt]?.reason);
+        }
+        get aborted() {
+          return this[Ut];
+        }
+        set aborted(e) {
+        }
+        write(e, t, i) {
+          if (this[Ut]) return false;
+          if (this[le]) throw new Error("write after end");
+          if (this[y]) return this.emit("error", Object.assign(new Error("Cannot call write after a stream was destroyed"), { code: "ERR_STREAM_DESTROYED" })), true;
+          typeof t == "function" && (i = t, t = "utf8"), t || (t = "utf8");
+          let r = this[J] ? pt : Ro;
+          if (!this[N] && !Buffer.isBuffer(e)) {
+            if (To(e)) e = Buffer.from(e.buffer, e.byteOffset, e.byteLength);
+            else if (vo(e)) e = Buffer.from(e);
+            else if (typeof e != "string") throw new Error("Non-contiguous data written to non-objectMode stream");
+          }
+          return this[N] ? (this[R] && this[v] !== 0 && this[jt](true), this[R] ? this.emit("data", e) : this[Ki](e), this[v] !== 0 && this.emit("readable"), i && r(i), this[R]) : e.length ? (typeof e == "string" && !(t === this[K] && !this[Ue]?.lastNeed) && (e = Buffer.from(e, t)), Buffer.isBuffer(e) && this[K] && (e = this[Ue].write(e)), this[R] && this[v] !== 0 && this[jt](true), this[R] ? this.emit("data", e) : this[Ki](e), this[v] !== 0 && this.emit("readable"), i && r(i), this[R]) : (this[v] !== 0 && this.emit("readable"), i && r(i), this[R]);
+        }
+        read(e) {
+          if (this[y]) return null;
+          if (this[k] = false, this[v] === 0 || e === 0 || e && e > this[v]) return this[ue](), null;
+          this[N] && (e = null), this[O].length > 1 && !this[N] && (this[O] = [this[K] ? this[O].join("") : Buffer.concat(this[O], this[v])]);
+          let t = this[zr](e || null, this[O][0]);
+          return this[ue](), t;
+        }
+        [zr](e, t) {
+          if (this[N]) this[xt]();
+          else {
+            let i = t;
+            e === i.length || e === null ? this[xt]() : typeof i == "string" ? (this[O][0] = i.slice(e), t = i.slice(0, e), this[v] -= e) : (this[O][0] = i.subarray(e), t = i.subarray(0, e), this[v] -= e);
+          }
+          return this.emit("data", t), !this[O].length && !this[le] && this.emit("drain"), t;
+        }
+        end(e, t, i) {
+          return typeof e == "function" && (i = e, e = void 0), typeof t == "function" && (i = t, t = "utf8"), e !== void 0 && this.write(e, t), i && this.once("end", i), this[le] = true, this.writable = false, (this[R] || !this[dt]) && this[ue](), this;
+        }
+        [qe]() {
+          this[y] || (!this[Pe] && !this[I].length && (this[k] = true), this[dt] = false, this[R] = true, this.emit("resume"), this[O].length ? this[jt]() : this[le] ? this[ue]() : this.emit("drain"));
+        }
+        resume() {
+          return this[qe]();
+        }
+        pause() {
+          this[R] = false, this[dt] = true, this[k] = false;
+        }
+        get destroyed() {
+          return this[y];
+        }
+        get flowing() {
+          return this[R];
+        }
+        get paused() {
+          return this[dt];
+        }
+        [Ki](e) {
+          this[N] ? this[v] += 1 : this[v] += e.length, this[O].push(e);
+        }
+        [xt]() {
+          return this[N] ? this[v] -= 1 : this[v] -= this[O][0].length, this[O].shift();
+        }
+        [jt](e = false) {
+          do
+            ;
+          while (this[kr](this[xt]()) && this[O].length);
+          !e && !this[O].length && !this[le] && this.emit("drain");
+        }
+        [kr](e) {
+          return this.emit("data", e), this[R];
+        }
+        pipe(e, t) {
+          if (this[y]) return e;
+          this[k] = false;
+          let i = this[_e];
+          return t = t || {}, e === Br.stdout || e === Br.stderr ? t.end = false : t.end = t.end !== false, t.proxyErrors = !!t.proxyErrors, i ? t.end && e.end() : (this[I].push(t.proxyErrors ? new Ji(this, e, t) : new qt(this, e, t)), this[J] ? pt(() => this[qe]()) : this[qe]()), e;
+        }
+        unpipe(e) {
+          let t = this[I].find((i) => i.dest === e);
+          t && (this[I].length === 1 ? (this[R] && this[Pe] === 0 && (this[R] = false), this[I] = []) : this[I].splice(this[I].indexOf(t), 1), t.unpipe());
+        }
+        addListener(e, t) {
+          return this.on(e, t);
+        }
+        on(e, t) {
+          let i = super.on(e, t);
+          if (e === "data") this[k] = false, this[Pe]++, !this[I].length && !this[R] && this[qe]();
+          else if (e === "readable" && this[v] !== 0) super.emit("readable");
+          else if (Oo(e) && this[_e]) super.emit(e), this.removeAllListeners(e);
+          else if (e === "error" && this[ft]) {
+            let r = t;
+            this[J] ? pt(() => r.call(this, this[ft])) : r.call(this, this[ft]);
+          }
+          return i;
+        }
+        removeListener(e, t) {
+          return this.off(e, t);
+        }
+        off(e, t) {
+          let i = super.off(e, t);
+          return e === "data" && (this[Pe] = this.listeners("data").length, this[Pe] === 0 && !this[k] && !this[I].length && (this[R] = false)), i;
+        }
+        removeAllListeners(e) {
+          let t = super.removeAllListeners(e);
+          return (e === "data" || e === void 0) && (this[Pe] = 0, !this[k] && !this[I].length && (this[R] = false)), t;
+        }
+        get emittedEnd() {
+          return this[_e];
+        }
+        [ue]() {
+          !this[zt] && !this[_e] && !this[y] && this[O].length === 0 && this[le] && (this[zt] = true, this.emit("end"), this.emit("prefinish"), this.emit("finish"), this[kt] && this.emit("close"), this[zt] = false);
+        }
+        emit(e, ...t) {
+          let i = t[0];
+          if (e !== "error" && e !== "close" && e !== y && this[y]) return false;
+          if (e === "data") return !this[N] && !i ? false : this[J] ? (pt(() => this[$i](i)), true) : this[$i](i);
+          if (e === "end") return this[jr]();
+          if (e === "close") {
+            if (this[kt] = true, !this[_e] && !this[y]) return false;
+            let n = super.emit("close");
+            return this.removeAllListeners("close"), n;
+          } else if (e === "error") {
+            this[ft] = i, super.emit(Vi, i);
+            let n = !this[mt] || this.listeners("error").length ? super.emit("error", i) : false;
+            return this[ue](), n;
+          } else if (e === "resume") {
+            let n = super.emit("resume");
+            return this[ue](), n;
+          } else if (e === "finish" || e === "prefinish") {
+            let n = super.emit(e);
+            return this.removeAllListeners(e), n;
+          }
+          let r = super.emit(e, ...t);
+          return this[ue](), r;
+        }
+        [$i](e) {
+          for (let i of this[I]) i.dest.write(e) === false && this.pause();
+          let t = this[k] ? false : super.emit("data", e);
+          return this[ue](), t;
+        }
+        [jr]() {
+          return this[_e] ? false : (this[_e] = true, this.readable = false, this[J] ? (pt(() => this[Xi]()), true) : this[Xi]());
+        }
+        [Xi]() {
+          if (this[Ue]) {
+            let t = this[Ue].end();
+            if (t) {
+              for (let i of this[I]) i.dest.write(t);
+              this[k] || super.emit("data", t);
+            }
+          }
+          for (let t of this[I]) t.end();
+          let e = super.emit("end");
+          return this.removeAllListeners("end"), e;
+        }
+        async collect() {
+          let e = Object.assign([], { dataLength: 0 });
+          this[N] || (e.dataLength = 0);
+          let t = this.promise();
+          return this.on("data", (i) => {
+            e.push(i), this[N] || (e.dataLength += i.length);
+          }), await t, e;
+        }
+        async concat() {
+          if (this[N]) throw new Error("cannot concat in objectMode");
+          let e = await this.collect();
+          return this[K] ? e.join("") : Buffer.concat(e, e.dataLength);
+        }
+        async promise() {
+          return new Promise((e, t) => {
+            this.on(y, () => t(new Error("stream destroyed"))), this.on("error", (i) => t(i)), this.on("end", () => e());
+          });
+        }
+        [Symbol.asyncIterator]() {
+          this[k] = false;
+          let e = false, t = /* @__PURE__ */ __name(async () => (this.pause(), e = true, { value: void 0, done: true }), "t");
+          return { next: /* @__PURE__ */ __name(() => {
+            if (e) return t();
+            let r = this.read();
+            if (r !== null) return Promise.resolve({ done: false, value: r });
+            if (this[le]) return t();
+            let n, o, a = /* @__PURE__ */ __name((c) => {
+              this.off("data", h), this.off("end", l), this.off(y, u), t(), o(c);
+            }, "a"), h = /* @__PURE__ */ __name((c) => {
+              this.off("error", a), this.off("end", l), this.off(y, u), this.pause(), n({ value: c, done: !!this[le] });
+            }, "h"), l = /* @__PURE__ */ __name(() => {
+              this.off("error", a), this.off("data", h), this.off(y, u), t(), n({ done: true, value: void 0 });
+            }, "l"), u = /* @__PURE__ */ __name(() => a(new Error("stream destroyed")), "u");
+            return new Promise((c, E) => {
+              o = E, n = c, this.once(y, u), this.once("error", a), this.once("end", l), this.once("data", h);
+            });
+          }, "next"), throw: t, return: t, [Symbol.asyncIterator]() {
+            return this;
+          }, [Symbol.asyncDispose]: async () => {
+          } };
+        }
+        [Symbol.iterator]() {
+          this[k] = false;
+          let e = false, t = /* @__PURE__ */ __name(() => (this.pause(), this.off(Vi, t), this.off(y, t), this.off("end", t), e = true, { done: true, value: void 0 }), "t"), i = /* @__PURE__ */ __name(() => {
+            if (e) return t();
+            let r = this.read();
+            return r === null ? t() : { done: false, value: r };
+          }, "i");
+          return this.once("end", t), this.once(Vi, t), this.once(y, t), { next: i, throw: t, return: t, [Symbol.iterator]() {
+            return this;
+          }, [Symbol.dispose]: () => {
+          } };
+        }
+        destroy(e) {
+          if (this[y]) return e ? this.emit("error", e) : this.emit(y), this;
+          this[y] = true, this[k] = true, this[O].length = 0, this[v] = 0;
+          let t = this;
+          return typeof t.close == "function" && !this[kt] && t.close(), e ? this.emit("error", e) : this.emit(y), this;
+        }
+        static get isStream() {
+          return C.isStream;
+        }
+      };
+      C.Minipass = Wt;
+    });
+    var Ke = d((W) => {
+      "use strict";
+      var Ur = W && W.__importDefault || function(s) {
+        return s && s.__esModule ? s : { default: s };
+      };
+      Object.defineProperty(W, "__esModule", { value: true });
+      W.WriteStreamSync = W.WriteStream = W.ReadStreamSync = W.ReadStream = void 0;
+      var No = Ur(require("events")), B = Ur(require("fs")), Mo = We(), Lo = B.default.writev, ye = Symbol("_autoClose"), $ = Symbol("_close"), _t = Symbol("_ended"), p = Symbol("_fd"), ts = Symbol("_finished"), fe = Symbol("_flags"), is = Symbol("_flush"), os2 = Symbol("_handleChunk"), as = Symbol("_makeBuf"), yt = Symbol("_mode"), Ht = Symbol("_needDrain"), Ge = Symbol("_onerror"), Ye = Symbol("_onopen"), ss = Symbol("_onread"), He = Symbol("_onwrite"), Ee = Symbol("_open"), V = Symbol("_path"), we = Symbol("_pos"), ee = Symbol("_queue"), Ze = Symbol("_read"), rs = Symbol("_readSize"), ce = Symbol("_reading"), wt = Symbol("_remain"), ns = Symbol("_size"), Zt = Symbol("_write"), Ne = Symbol("_writing"), Gt = Symbol("_defaultFlag"), Me = Symbol("_errored"), Yt = class extends Mo.Minipass {
+        static {
+          __name(this, "Yt");
+        }
+        [Me] = false;
+        [p];
+        [V];
+        [rs];
+        [ce] = false;
+        [ns];
+        [wt];
+        [ye];
+        constructor(e, t) {
+          if (t = t || {}, super(t), this.readable = true, this.writable = false, typeof e != "string") throw new TypeError("path must be a string");
+          this[Me] = false, this[p] = typeof t.fd == "number" ? t.fd : void 0, this[V] = e, this[rs] = t.readSize || 16 * 1024 * 1024, this[ce] = false, this[ns] = typeof t.size == "number" ? t.size : 1 / 0, this[wt] = this[ns], this[ye] = typeof t.autoClose == "boolean" ? t.autoClose : true, typeof this[p] == "number" ? this[Ze]() : this[Ee]();
+        }
+        get fd() {
+          return this[p];
+        }
+        get path() {
+          return this[V];
+        }
+        write() {
+          throw new TypeError("this is a readable stream");
+        }
+        end() {
+          throw new TypeError("this is a readable stream");
+        }
+        [Ee]() {
+          B.default.open(this[V], "r", (e, t) => this[Ye](e, t));
+        }
+        [Ye](e, t) {
+          e ? this[Ge](e) : (this[p] = t, this.emit("open", t), this[Ze]());
+        }
+        [as]() {
+          return Buffer.allocUnsafe(Math.min(this[rs], this[wt]));
+        }
+        [Ze]() {
+          if (!this[ce]) {
+            this[ce] = true;
+            let e = this[as]();
+            if (e.length === 0) return process.nextTick(() => this[ss](null, 0, e));
+            B.default.read(this[p], e, 0, e.length, null, (t, i, r) => this[ss](t, i, r));
+          }
+        }
+        [ss](e, t, i) {
+          this[ce] = false, e ? this[Ge](e) : this[os2](t, i) && this[Ze]();
+        }
+        [$]() {
+          if (this[ye] && typeof this[p] == "number") {
+            let e = this[p];
+            this[p] = void 0, B.default.close(e, (t) => t ? this.emit("error", t) : this.emit("close"));
+          }
+        }
+        [Ge](e) {
+          this[ce] = true, this[$](), this.emit("error", e);
+        }
+        [os2](e, t) {
+          let i = false;
+          return this[wt] -= e, e > 0 && (i = super.write(e < t.length ? t.subarray(0, e) : t)), (e === 0 || this[wt] <= 0) && (i = false, this[$](), super.end()), i;
+        }
+        emit(e, ...t) {
+          switch (e) {
+            case "prefinish":
+            case "finish":
+              return false;
+            case "drain":
+              return typeof this[p] == "number" && this[Ze](), false;
+            case "error":
+              return this[Me] ? false : (this[Me] = true, super.emit(e, ...t));
+            default:
+              return super.emit(e, ...t);
+          }
+        }
+      };
+      W.ReadStream = Yt;
+      var hs = class extends Yt {
+        static {
+          __name(this, "hs");
+        }
+        [Ee]() {
+          let e = true;
+          try {
+            this[Ye](null, B.default.openSync(this[V], "r")), e = false;
+          } finally {
+            e && this[$]();
+          }
+        }
+        [Ze]() {
+          let e = true;
+          try {
+            if (!this[ce]) {
+              this[ce] = true;
+              do {
+                let t = this[as](), i = t.length === 0 ? 0 : B.default.readSync(this[p], t, 0, t.length, null);
+                if (!this[os2](i, t)) break;
+              } while (true);
+              this[ce] = false;
+            }
+            e = false;
+          } finally {
+            e && this[$]();
+          }
+        }
+        [$]() {
+          if (this[ye] && typeof this[p] == "number") {
+            let e = this[p];
+            this[p] = void 0, B.default.closeSync(e), this.emit("close");
+          }
+        }
+      };
+      W.ReadStreamSync = hs;
+      var Kt = class extends No.default {
+        static {
+          __name(this, "Kt");
+        }
+        readable = false;
+        writable = true;
+        [Me] = false;
+        [Ne] = false;
+        [_t] = false;
+        [ee] = [];
+        [Ht] = false;
+        [V];
+        [yt];
+        [ye];
+        [p];
+        [Gt];
+        [fe];
+        [ts] = false;
+        [we];
+        constructor(e, t) {
+          t = t || {}, super(t), this[V] = e, this[p] = typeof t.fd == "number" ? t.fd : void 0, this[yt] = t.mode === void 0 ? 438 : t.mode, this[we] = typeof t.start == "number" ? t.start : void 0, this[ye] = typeof t.autoClose == "boolean" ? t.autoClose : true;
+          let i = this[we] !== void 0 ? "r+" : "w";
+          this[Gt] = t.flags === void 0, this[fe] = t.flags === void 0 ? i : t.flags, this[p] === void 0 && this[Ee]();
+        }
+        emit(e, ...t) {
+          if (e === "error") {
+            if (this[Me]) return false;
+            this[Me] = true;
+          }
+          return super.emit(e, ...t);
+        }
+        get fd() {
+          return this[p];
+        }
+        get path() {
+          return this[V];
+        }
+        [Ge](e) {
+          this[$](), this[Ne] = true, this.emit("error", e);
+        }
+        [Ee]() {
+          B.default.open(this[V], this[fe], this[yt], (e, t) => this[Ye](e, t));
+        }
+        [Ye](e, t) {
+          this[Gt] && this[fe] === "r+" && e && e.code === "ENOENT" ? (this[fe] = "w", this[Ee]()) : e ? this[Ge](e) : (this[p] = t, this.emit("open", t), this[Ne] || this[is]());
+        }
+        end(e, t) {
+          return e && this.write(e, t), this[_t] = true, !this[Ne] && !this[ee].length && typeof this[p] == "number" && this[He](null, 0), this;
+        }
+        write(e, t) {
+          return typeof e == "string" && (e = Buffer.from(e, t)), this[_t] ? (this.emit("error", new Error("write() after end()")), false) : this[p] === void 0 || this[Ne] || this[ee].length ? (this[ee].push(e), this[Ht] = true, false) : (this[Ne] = true, this[Zt](e), true);
+        }
+        [Zt](e) {
+          B.default.write(this[p], e, 0, e.length, this[we], (t, i) => this[He](t, i));
+        }
+        [He](e, t) {
+          e ? this[Ge](e) : (this[we] !== void 0 && typeof t == "number" && (this[we] += t), this[ee].length ? this[is]() : (this[Ne] = false, this[_t] && !this[ts] ? (this[ts] = true, this[$](), this.emit("finish")) : this[Ht] && (this[Ht] = false, this.emit("drain"))));
+        }
+        [is]() {
+          if (this[ee].length === 0) this[_t] && this[He](null, 0);
+          else if (this[ee].length === 1) this[Zt](this[ee].pop());
+          else {
+            let e = this[ee];
+            this[ee] = [], Lo(this[p], e, this[we], (t, i) => this[He](t, i));
+          }
+        }
+        [$]() {
+          if (this[ye] && typeof this[p] == "number") {
+            let e = this[p];
+            this[p] = void 0, B.default.close(e, (t) => t ? this.emit("error", t) : this.emit("close"));
+          }
+        }
+      };
+      W.WriteStream = Kt;
+      var ls = class extends Kt {
+        static {
+          __name(this, "ls");
+        }
+        [Ee]() {
+          let e;
+          if (this[Gt] && this[fe] === "r+") try {
+            e = B.default.openSync(this[V], this[fe], this[yt]);
+          } catch (t) {
+            if (t?.code === "ENOENT") return this[fe] = "w", this[Ee]();
+            throw t;
+          }
+          else e = B.default.openSync(this[V], this[fe], this[yt]);
+          this[Ye](null, e);
+        }
+        [$]() {
+          if (this[ye] && typeof this[p] == "number") {
+            let e = this[p];
+            this[p] = void 0, B.default.closeSync(e), this.emit("close");
+          }
+        }
+        [Zt](e) {
+          let t = true;
+          try {
+            this[He](null, B.default.writeSync(this[p], e, 0, e.length, this[we])), t = false;
+          } finally {
+            if (t) try {
+              this[$]();
+            } catch {
+            }
+          }
+        }
+      };
+      W.WriteStreamSync = ls;
+    });
+    var Vt = d((b) => {
+      "use strict";
+      Object.defineProperty(b, "__esModule", { value: true });
+      b.dealias = b.isNoFile = b.isFile = b.isAsync = b.isSync = b.isAsyncNoFile = b.isSyncNoFile = b.isAsyncFile = b.isSyncFile = void 0;
+      var Ao = /* @__PURE__ */ new Map([["C", "cwd"], ["f", "file"], ["z", "gzip"], ["P", "preservePaths"], ["U", "unlink"], ["strip-components", "strip"], ["stripComponents", "strip"], ["keep-newer", "newer"], ["keepNewer", "newer"], ["keep-newer-files", "newer"], ["keepNewerFiles", "newer"], ["k", "keep"], ["keep-existing", "keep"], ["keepExisting", "keep"], ["m", "noMtime"], ["no-mtime", "noMtime"], ["p", "preserveOwner"], ["L", "follow"], ["h", "follow"], ["onentry", "onReadEntry"]]), Io = /* @__PURE__ */ __name((s) => !!s.sync && !!s.file, "Io");
+      b.isSyncFile = Io;
+      var Co = /* @__PURE__ */ __name((s) => !s.sync && !!s.file, "Co");
+      b.isAsyncFile = Co;
+      var Fo = /* @__PURE__ */ __name((s) => !!s.sync && !s.file, "Fo");
+      b.isSyncNoFile = Fo;
+      var Bo = /* @__PURE__ */ __name((s) => !s.sync && !s.file, "Bo");
+      b.isAsyncNoFile = Bo;
+      var zo = /* @__PURE__ */ __name((s) => !!s.sync, "zo");
+      b.isSync = zo;
+      var ko = /* @__PURE__ */ __name((s) => !s.sync, "ko");
+      b.isAsync = ko;
+      var jo = /* @__PURE__ */ __name((s) => !!s.file, "jo");
+      b.isFile = jo;
+      var xo = /* @__PURE__ */ __name((s) => !s.file, "xo");
+      b.isNoFile = xo;
+      var Uo = /* @__PURE__ */ __name((s) => {
+        let e = Ao.get(s);
+        return e || s;
+      }, "Uo"), qo = /* @__PURE__ */ __name((s = {}) => {
+        if (!s) return {};
+        let e = {};
+        for (let [t, i] of Object.entries(s)) {
+          let r = Uo(t);
+          e[r] = i;
+        }
+        return e.chmod === void 0 && e.noChmod === false && (e.chmod = true), delete e.noChmod, e;
+      }, "qo");
+      b.dealias = qo;
+    });
+    var Ve = d(($t) => {
+      "use strict";
+      Object.defineProperty($t, "__esModule", { value: true });
+      $t.makeCommand = void 0;
+      var Et = Vt(), Wo = /* @__PURE__ */ __name((s, e, t, i, r) => Object.assign((n = [], o, a) => {
+        Array.isArray(n) && (o = n, n = {}), typeof o == "function" && (a = o, o = void 0), o ? o = Array.from(o) : o = [];
+        let h = (0, Et.dealias)(n);
+        if (r?.(h, o), (0, Et.isSyncFile)(h)) {
+          if (typeof a == "function") throw new TypeError("callback not supported for sync tar functions");
+          return s(h, o);
+        } else if ((0, Et.isAsyncFile)(h)) {
+          let l = e(h, o), u = a || void 0;
+          return u ? l.then(() => u(), u) : l;
+        } else if ((0, Et.isSyncNoFile)(h)) {
+          if (typeof a == "function") throw new TypeError("callback not supported for sync tar functions");
+          return t(h, o);
+        } else if ((0, Et.isAsyncNoFile)(h)) {
+          if (typeof a == "function") throw new TypeError("callback only supported with file option");
+          return i(h, o);
+        } else throw new Error("impossible options??");
+      }, { syncFile: s, asyncFile: e, syncNoFile: t, asyncNoFile: i, validate: r }), "Wo");
+      $t.makeCommand = Wo;
+    });
+    var us = d(($e) => {
+      "use strict";
+      var Ho = $e && $e.__importDefault || function(s) {
+        return s && s.__esModule ? s : { default: s };
+      };
+      Object.defineProperty($e, "__esModule", { value: true });
+      $e.constants = void 0;
+      var Zo = Ho(require("zlib")), Go = Zo.default.constants || { ZLIB_VERNUM: 4736 };
+      $e.constants = Object.freeze(Object.assign(/* @__PURE__ */ Object.create(null), { Z_NO_FLUSH: 0, Z_PARTIAL_FLUSH: 1, Z_SYNC_FLUSH: 2, Z_FULL_FLUSH: 3, Z_FINISH: 4, Z_BLOCK: 5, Z_OK: 0, Z_STREAM_END: 1, Z_NEED_DICT: 2, Z_ERRNO: -1, Z_STREAM_ERROR: -2, Z_DATA_ERROR: -3, Z_MEM_ERROR: -4, Z_BUF_ERROR: -5, Z_VERSION_ERROR: -6, Z_NO_COMPRESSION: 0, Z_BEST_SPEED: 1, Z_BEST_COMPRESSION: 9, Z_DEFAULT_COMPRESSION: -1, Z_FILTERED: 1, Z_HUFFMAN_ONLY: 2, Z_RLE: 3, Z_FIXED: 4, Z_DEFAULT_STRATEGY: 0, DEFLATE: 1, INFLATE: 2, GZIP: 3, GUNZIP: 4, DEFLATERAW: 5, INFLATERAW: 6, UNZIP: 7, BROTLI_DECODE: 8, BROTLI_ENCODE: 9, Z_MIN_WINDOWBITS: 8, Z_MAX_WINDOWBITS: 15, Z_DEFAULT_WINDOWBITS: 15, Z_MIN_CHUNK: 64, Z_MAX_CHUNK: 1 / 0, Z_DEFAULT_CHUNK: 16384, Z_MIN_MEMLEVEL: 1, Z_MAX_MEMLEVEL: 9, Z_DEFAULT_MEMLEVEL: 8, Z_MIN_LEVEL: -1, Z_MAX_LEVEL: 9, Z_DEFAULT_LEVEL: -1, BROTLI_OPERATION_PROCESS: 0, BROTLI_OPERATION_FLUSH: 1, BROTLI_OPERATION_FINISH: 2, BROTLI_OPERATION_EMIT_METADATA: 3, BROTLI_MODE_GENERIC: 0, BROTLI_MODE_TEXT: 1, BROTLI_MODE_FONT: 2, BROTLI_DEFAULT_MODE: 0, BROTLI_MIN_QUALITY: 0, BROTLI_MAX_QUALITY: 11, BROTLI_DEFAULT_QUALITY: 11, BROTLI_MIN_WINDOW_BITS: 10, BROTLI_MAX_WINDOW_BITS: 24, BROTLI_LARGE_MAX_WINDOW_BITS: 30, BROTLI_DEFAULT_WINDOW: 22, BROTLI_MIN_INPUT_BLOCK_BITS: 16, BROTLI_MAX_INPUT_BLOCK_BITS: 24, BROTLI_PARAM_MODE: 0, BROTLI_PARAM_QUALITY: 1, BROTLI_PARAM_LGWIN: 2, BROTLI_PARAM_LGBLOCK: 3, BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: 4, BROTLI_PARAM_SIZE_HINT: 5, BROTLI_PARAM_LARGE_WINDOW: 6, BROTLI_PARAM_NPOSTFIX: 7, BROTLI_PARAM_NDIRECT: 8, BROTLI_DECODER_RESULT_ERROR: 0, BROTLI_DECODER_RESULT_SUCCESS: 1, BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: 2, BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: 3, BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: 0, BROTLI_DECODER_PARAM_LARGE_WINDOW: 1, BROTLI_DECODER_NO_ERROR: 0, BROTLI_DECODER_SUCCESS: 1, BROTLI_DECODER_NEEDS_MORE_INPUT: 2, BROTLI_DECODER_NEEDS_MORE_OUTPUT: 3, BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: -1, BROTLI_DECODER_ERROR_FORMAT_RESERVED: -2, BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: -3, BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: -4, BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: -5, BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: -6, BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: -7, BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: -8, BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: -9, BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: -10, BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: -11, BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: -12, BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: -13, BROTLI_DECODER_ERROR_FORMAT_PADDING_1: -14, BROTLI_DECODER_ERROR_FORMAT_PADDING_2: -15, BROTLI_DECODER_ERROR_FORMAT_DISTANCE: -16, BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: -19, BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: -20, BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: -21, BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: -22, BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: -25, BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: -26, BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: -27, BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: -30, BROTLI_DECODER_ERROR_UNREACHABLE: -31 }, Go));
+    });
+    var vs = d((f) => {
+      "use strict";
+      var Yo = f && f.__createBinding || (Object.create ? (function(s, e, t, i) {
+        i === void 0 && (i = t);
+        var r = Object.getOwnPropertyDescriptor(e, t);
+        (!r || ("get" in r ? !e.__esModule : r.writable || r.configurable)) && (r = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return e[t];
+        }, "get") }), Object.defineProperty(s, i, r);
+      }) : (function(s, e, t, i) {
+        i === void 0 && (i = t), s[i] = e[t];
+      })), Ko = f && f.__setModuleDefault || (Object.create ? (function(s, e) {
+        Object.defineProperty(s, "default", { enumerable: true, value: e });
+      }) : function(s, e) {
+        s.default = e;
+      }), Vo = f && f.__importStar || /* @__PURE__ */ (function() {
+        var s = /* @__PURE__ */ __name(function(e) {
+          return s = Object.getOwnPropertyNames || function(t) {
+            var i = [];
+            for (var r in t) Object.prototype.hasOwnProperty.call(t, r) && (i[i.length] = r);
+            return i;
+          }, s(e);
+        }, "s");
+        return function(e) {
+          if (e && e.__esModule) return e;
+          var t = {};
+          if (e != null) for (var i = s(e), r = 0; r < i.length; r++) i[r] !== "default" && Yo(t, e, i[r]);
+          return Ko(t, e), t;
+        };
+      })(), $o = f && f.__importDefault || function(s) {
+        return s && s.__esModule ? s : { default: s };
+      };
+      Object.defineProperty(f, "__esModule", { value: true });
+      f.ZstdDecompress = f.ZstdCompress = f.BrotliDecompress = f.BrotliCompress = f.Unzip = f.InflateRaw = f.DeflateRaw = f.Gunzip = f.Gzip = f.Inflate = f.Deflate = f.Zlib = f.ZlibError = f.constants = void 0;
+      var ds = $o(require("assert")), Le = require("buffer"), Xo = We(), qr = Vo(require("zlib")), te = us(), Qo = us();
+      Object.defineProperty(f, "constants", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+        return Qo.constants;
+      }, "get") });
+      var Jo = Le.Buffer.concat, Wr = Object.getOwnPropertyDescriptor(Le.Buffer, "concat"), ea = /* @__PURE__ */ __name((s) => s, "ea"), cs = Wr?.writable === true || Wr?.set !== void 0 ? (s) => {
+        Le.Buffer.concat = s ? ea : Jo;
+      } : (s) => {
+      }, Ae = Symbol("_superWrite"), Ie = class extends Error {
+        static {
+          __name(this, "Ie");
+        }
+        code;
+        errno;
+        constructor(e, t) {
+          super("zlib: " + e.message, { cause: e }), this.code = e.code, this.errno = e.errno, this.code || (this.code = "ZLIB_ERROR"), this.message = "zlib: " + e.message, Error.captureStackTrace(this, t ?? this.constructor);
+        }
+        get name() {
+          return "ZlibError";
+        }
+      };
+      f.ZlibError = Ie;
+      var fs = Symbol("flushFlag"), bt = class extends Xo.Minipass {
+        static {
+          __name(this, "bt");
+        }
+        #e = false;
+        #i = false;
+        #s;
+        #n;
+        #r;
+        #t;
+        #o;
+        get sawError() {
+          return this.#e;
+        }
+        get handle() {
+          return this.#t;
+        }
+        get flushFlag() {
+          return this.#s;
+        }
+        constructor(e, t) {
+          if (!e || typeof e != "object") throw new TypeError("invalid options for ZlibBase constructor");
+          if (super(e), this.#s = e.flush ?? 0, this.#n = e.finishFlush ?? 0, this.#r = e.fullFlushFlag ?? 0, typeof qr[t] != "function") throw new TypeError("Compression method not supported: " + t);
+          try {
+            this.#t = new qr[t](e);
+          } catch (i) {
+            throw new Ie(i, this.constructor);
+          }
+          this.#o = (i) => {
+            this.#e || (this.#e = true, this.close(), this.emit("error", i));
+          }, this.#t?.on("error", (i) => this.#o(new Ie(i))), this.once("end", () => this.close);
+        }
+        close() {
+          this.#t && (this.#t.close(), this.#t = void 0, this.emit("close"));
+        }
+        reset() {
+          if (!this.#e) return (0, ds.default)(this.#t, "zlib binding closed"), this.#t.reset?.();
+        }
+        flush(e) {
+          this.ended || (typeof e != "number" && (e = this.#r), this.write(Object.assign(Le.Buffer.alloc(0), { [fs]: e })));
+        }
+        end(e, t, i) {
+          return typeof e == "function" && (i = e, t = void 0, e = void 0), typeof t == "function" && (i = t, t = void 0), e && (t ? this.write(e, t) : this.write(e)), this.flush(this.#n), this.#i = true, super.end(i);
+        }
+        get ended() {
+          return this.#i;
+        }
+        [Ae](e) {
+          return super.write(e);
+        }
+        write(e, t, i) {
+          if (typeof t == "function" && (i = t, t = "utf8"), typeof e == "string" && (e = Le.Buffer.from(e, t)), this.#e) return;
+          (0, ds.default)(this.#t, "zlib binding closed");
+          let r = this.#t._handle, n = r.close;
+          r.close = () => {
+          };
+          let o = this.#t.close;
+          this.#t.close = () => {
+          }, cs(true);
+          let a;
+          try {
+            let l = typeof e[fs] == "number" ? e[fs] : this.#s;
+            a = this.#t._processChunk(e, l), cs(false);
+          } catch (l) {
+            cs(false), this.#o(new Ie(l, this.write));
+          } finally {
+            this.#t && (this.#t._handle = r, r.close = n, this.#t.close = o, this.#t.removeAllListeners("error"));
+          }
+          this.#t && this.#t.on("error", (l) => this.#o(new Ie(l, this.write)));
+          let h;
+          if (a) if (Array.isArray(a) && a.length > 0) {
+            let l = a[0];
+            h = this[Ae](Le.Buffer.from(l));
+            for (let u = 1; u < a.length; u++) h = this[Ae](a[u]);
+          } else h = this[Ae](Le.Buffer.from(a));
+          return i && i(), h;
+        }
+      }, ie = class extends bt {
+        static {
+          __name(this, "ie");
+        }
+        #e;
+        #i;
+        constructor(e, t) {
+          e = e || {}, e.flush = e.flush || te.constants.Z_NO_FLUSH, e.finishFlush = e.finishFlush || te.constants.Z_FINISH, e.fullFlushFlag = te.constants.Z_FULL_FLUSH, super(e, t), this.#e = e.level, this.#i = e.strategy;
+        }
+        params(e, t) {
+          if (!this.sawError) {
+            if (!this.handle) throw new Error("cannot switch params when binding is closed");
+            if (!this.handle.params) throw new Error("not supported in this implementation");
+            if (this.#e !== e || this.#i !== t) {
+              this.flush(te.constants.Z_SYNC_FLUSH), (0, ds.default)(this.handle, "zlib binding closed");
+              let i = this.handle.flush;
+              this.handle.flush = (r, n) => {
+                typeof r == "function" && (n = r, r = this.flushFlag), this.flush(r), n?.();
+              };
+              try {
+                this.handle.params(e, t);
+              } finally {
+                this.handle.flush = i;
+              }
+              this.handle && (this.#e = e, this.#i = t);
+            }
+          }
+        }
+      };
+      f.Zlib = ie;
+      var ms = class extends ie {
+        static {
+          __name(this, "ms");
+        }
+        constructor(e) {
+          super(e, "Deflate");
+        }
+      };
+      f.Deflate = ms;
+      var ps = class extends ie {
+        static {
+          __name(this, "ps");
+        }
+        constructor(e) {
+          super(e, "Inflate");
+        }
+      };
+      f.Inflate = ps;
+      var _s = class extends ie {
+        static {
+          __name(this, "_s");
+        }
+        #e;
+        constructor(e) {
+          super(e, "Gzip"), this.#e = e && !!e.portable;
+        }
+        [Ae](e) {
+          return this.#e ? (this.#e = false, e[9] = 255, super[Ae](e)) : super[Ae](e);
+        }
+      };
+      f.Gzip = _s;
+      var ws = class extends ie {
+        static {
+          __name(this, "ws");
+        }
+        constructor(e) {
+          super(e, "Gunzip");
+        }
+      };
+      f.Gunzip = ws;
+      var ys = class extends ie {
+        static {
+          __name(this, "ys");
+        }
+        constructor(e) {
+          super(e, "DeflateRaw");
+        }
+      };
+      f.DeflateRaw = ys;
+      var Es = class extends ie {
+        static {
+          __name(this, "Es");
+        }
+        constructor(e) {
+          super(e, "InflateRaw");
+        }
+      };
+      f.InflateRaw = Es;
+      var bs = class extends ie {
+        static {
+          __name(this, "bs");
+        }
+        constructor(e) {
+          super(e, "Unzip");
+        }
+      };
+      f.Unzip = bs;
+      var Xt = class extends bt {
+        static {
+          __name(this, "Xt");
+        }
+        constructor(e, t) {
+          e = e || {}, e.flush = e.flush || te.constants.BROTLI_OPERATION_PROCESS, e.finishFlush = e.finishFlush || te.constants.BROTLI_OPERATION_FINISH, e.fullFlushFlag = te.constants.BROTLI_OPERATION_FLUSH, super(e, t);
+        }
+      }, Ss = class extends Xt {
+        static {
+          __name(this, "Ss");
+        }
+        constructor(e) {
+          super(e, "BrotliCompress");
+        }
+      };
+      f.BrotliCompress = Ss;
+      var gs = class extends Xt {
+        static {
+          __name(this, "gs");
+        }
+        constructor(e) {
+          super(e, "BrotliDecompress");
+        }
+      };
+      f.BrotliDecompress = gs;
+      var Qt = class extends bt {
+        static {
+          __name(this, "Qt");
+        }
+        constructor(e, t) {
+          e = e || {}, e.flush = e.flush || te.constants.ZSTD_e_continue, e.finishFlush = e.finishFlush || te.constants.ZSTD_e_end, e.fullFlushFlag = te.constants.ZSTD_e_flush, super(e, t);
+        }
+      }, Rs = class extends Qt {
+        static {
+          __name(this, "Rs");
+        }
+        constructor(e) {
+          super(e, "ZstdCompress");
+        }
+      };
+      f.ZstdCompress = Rs;
+      var Os = class extends Qt {
+        static {
+          __name(this, "Os");
+        }
+        constructor(e) {
+          super(e, "ZstdDecompress");
+        }
+      };
+      f.ZstdDecompress = Os;
+    });
+    var Gr = d((Xe) => {
+      "use strict";
+      Object.defineProperty(Xe, "__esModule", { value: true });
+      Xe.parse = Xe.encode = void 0;
+      var ta = /* @__PURE__ */ __name((s, e) => {
+        if (Number.isSafeInteger(s)) s < 0 ? sa(s, e) : ia(s, e);
+        else throw Error("cannot encode number outside of javascript safe integer range");
+        return e;
+      }, "ta");
+      Xe.encode = ta;
+      var ia = /* @__PURE__ */ __name((s, e) => {
+        e[0] = 128;
+        for (var t = e.length; t > 1; t--) e[t - 1] = s & 255, s = Math.floor(s / 256);
+      }, "ia"), sa = /* @__PURE__ */ __name((s, e) => {
+        e[0] = 255;
+        var t = false;
+        s = s * -1;
+        for (var i = e.length; i > 1; i--) {
+          var r = s & 255;
+          s = Math.floor(s / 256), t ? e[i - 1] = Hr(r) : r === 0 ? e[i - 1] = 0 : (t = true, e[i - 1] = Zr(r));
+        }
+      }, "sa"), ra = /* @__PURE__ */ __name((s) => {
+        let e = s[0], t = e === 128 ? oa(s.subarray(1, s.length)) : e === 255 ? na(s) : null;
+        if (t === null) throw Error("invalid base256 encoding");
+        if (!Number.isSafeInteger(t)) throw Error("parsed number outside of javascript safe integer range");
+        return t;
+      }, "ra");
+      Xe.parse = ra;
+      var na = /* @__PURE__ */ __name((s) => {
+        for (var e = s.length, t = 0, i = false, r = e - 1; r > -1; r--) {
+          var n = Number(s[r]), o;
+          i ? o = Hr(n) : n === 0 ? o = n : (i = true, o = Zr(n)), o !== 0 && (t -= o * Math.pow(256, e - r - 1));
+        }
+        return t;
+      }, "na"), oa = /* @__PURE__ */ __name((s) => {
+        for (var e = s.length, t = 0, i = e - 1; i > -1; i--) {
+          var r = Number(s[i]);
+          r !== 0 && (t += r * Math.pow(256, e - i - 1));
+        }
+        return t;
+      }, "oa"), Hr = /* @__PURE__ */ __name((s) => (255 ^ s) & 255, "Hr"), Zr = /* @__PURE__ */ __name((s) => (255 ^ s) + 1 & 255, "Zr");
+    });
+    var Ts = d((j) => {
+      "use strict";
+      Object.defineProperty(j, "__esModule", { value: true });
+      j.code = j.name = j.isName = j.isCode = void 0;
+      var aa = /* @__PURE__ */ __name((s) => j.name.has(s), "aa");
+      j.isCode = aa;
+      var ha = /* @__PURE__ */ __name((s) => j.code.has(s), "ha");
+      j.isName = ha;
+      j.name = /* @__PURE__ */ new Map([["0", "File"], ["", "OldFile"], ["1", "Link"], ["2", "SymbolicLink"], ["3", "CharacterDevice"], ["4", "BlockDevice"], ["5", "Directory"], ["6", "FIFO"], ["7", "ContiguousFile"], ["g", "GlobalExtendedHeader"], ["x", "ExtendedHeader"], ["A", "SolarisACL"], ["D", "GNUDumpDir"], ["I", "Inode"], ["K", "NextFileHasLongLinkpath"], ["L", "NextFileHasLongPath"], ["M", "ContinuationFile"], ["N", "OldGnuLongPath"], ["S", "SparseFile"], ["V", "TapeVolumeHeader"], ["X", "OldExtendedHeader"]]);
+      j.code = new Map(Array.from(j.name).map((s) => [s[1], s[0]]));
+    });
+    var Je = d((se) => {
+      "use strict";
+      var la = se && se.__createBinding || (Object.create ? (function(s, e, t, i) {
+        i === void 0 && (i = t);
+        var r = Object.getOwnPropertyDescriptor(e, t);
+        (!r || ("get" in r ? !e.__esModule : r.writable || r.configurable)) && (r = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return e[t];
+        }, "get") }), Object.defineProperty(s, i, r);
+      }) : (function(s, e, t, i) {
+        i === void 0 && (i = t), s[i] = e[t];
+      })), ua = se && se.__setModuleDefault || (Object.create ? (function(s, e) {
+        Object.defineProperty(s, "default", { enumerable: true, value: e });
+      }) : function(s, e) {
+        s.default = e;
+      }), Yr = se && se.__importStar || /* @__PURE__ */ (function() {
+        var s = /* @__PURE__ */ __name(function(e) {
+          return s = Object.getOwnPropertyNames || function(t) {
+            var i = [];
+            for (var r in t) Object.prototype.hasOwnProperty.call(t, r) && (i[i.length] = r);
+            return i;
+          }, s(e);
+        }, "s");
+        return function(e) {
+          if (e && e.__esModule) return e;
+          var t = {};
+          if (e != null) for (var i = s(e), r = 0; r < i.length; r++) i[r] !== "default" && la(t, e, i[r]);
+          return ua(t, e), t;
+        };
+      })();
+      Object.defineProperty(se, "__esModule", { value: true });
+      se.Header = void 0;
+      var Qe = require("node:path"), Kr = Yr(Gr()), St = Yr(Ts()), Ns = class {
+        static {
+          __name(this, "Ns");
+        }
+        cksumValid = false;
+        needPax = false;
+        nullBlock = false;
+        block;
+        path;
+        mode;
+        uid;
+        gid;
+        size;
+        cksum;
+        #e = "Unsupported";
+        linkpath;
+        uname;
+        gname;
+        devmaj = 0;
+        devmin = 0;
+        atime;
+        ctime;
+        mtime;
+        charset;
+        comment;
+        constructor(e, t = 0, i, r) {
+          Buffer.isBuffer(e) ? this.decode(e, t || 0, i, r) : e && this.#i(e);
+        }
+        decode(e, t, i, r) {
+          if (t || (t = 0), !e || !(e.length >= t + 512)) throw new Error("need 512 bytes for header");
+          this.path = i?.path ?? Ce(e, t, 100), this.mode = i?.mode ?? r?.mode ?? be(e, t + 100, 8), this.uid = i?.uid ?? r?.uid ?? be(e, t + 108, 8), this.gid = i?.gid ?? r?.gid ?? be(e, t + 116, 8), this.size = i?.size ?? r?.size ?? be(e, t + 124, 12), this.mtime = i?.mtime ?? r?.mtime ?? Ds(e, t + 136, 12), this.cksum = be(e, t + 148, 12), r && this.#i(r, true), i && this.#i(i);
+          let n = Ce(e, t + 156, 1);
+          if (St.isCode(n) && (this.#e = n || "0"), this.#e === "0" && this.path.slice(-1) === "/" && (this.#e = "5"), this.#e === "5" && (this.size = 0), this.linkpath = Ce(e, t + 157, 100), e.subarray(t + 257, t + 265).toString() === "ustar\x0000") if (this.uname = i?.uname ?? r?.uname ?? Ce(e, t + 265, 32), this.gname = i?.gname ?? r?.gname ?? Ce(e, t + 297, 32), this.devmaj = i?.devmaj ?? r?.devmaj ?? be(e, t + 329, 8) ?? 0, this.devmin = i?.devmin ?? r?.devmin ?? be(e, t + 337, 8) ?? 0, e[t + 475] !== 0) {
+            let a = Ce(e, t + 345, 155);
+            this.path = a + "/" + this.path;
+          } else {
+            let a = Ce(e, t + 345, 130);
+            a && (this.path = a + "/" + this.path), this.atime = i?.atime ?? r?.atime ?? Ds(e, t + 476, 12), this.ctime = i?.ctime ?? r?.ctime ?? Ds(e, t + 488, 12);
+          }
+          let o = 256;
+          for (let a = t; a < t + 148; a++) o += e[a];
+          for (let a = t + 156; a < t + 512; a++) o += e[a];
+          this.cksumValid = o === this.cksum, this.cksum === void 0 && o === 256 && (this.nullBlock = true);
+        }
+        #i(e, t = false) {
+          Object.assign(this, Object.fromEntries(Object.entries(e).filter(([i, r]) => !(r == null || i === "path" && t || i === "linkpath" && t || i === "global"))));
+        }
+        encode(e, t = 0) {
+          if (e || (e = this.block = Buffer.alloc(512)), this.#e === "Unsupported" && (this.#e = "0"), !(e.length >= t + 512)) throw new Error("need 512 bytes for header");
+          let i = this.ctime || this.atime ? 130 : 155, r = ca(this.path || "", i), n = r[0], o = r[1];
+          this.needPax = !!r[2], this.needPax = Fe(e, t, 100, n) || this.needPax, this.needPax = Se(e, t + 100, 8, this.mode) || this.needPax, this.needPax = Se(e, t + 108, 8, this.uid) || this.needPax, this.needPax = Se(e, t + 116, 8, this.gid) || this.needPax, this.needPax = Se(e, t + 124, 12, this.size) || this.needPax, this.needPax = Ps(e, t + 136, 12, this.mtime) || this.needPax, e[t + 156] = this.#e.charCodeAt(0), this.needPax = Fe(e, t + 157, 100, this.linkpath) || this.needPax, e.write("ustar\x0000", t + 257, 8), this.needPax = Fe(e, t + 265, 32, this.uname) || this.needPax, this.needPax = Fe(e, t + 297, 32, this.gname) || this.needPax, this.needPax = Se(e, t + 329, 8, this.devmaj) || this.needPax, this.needPax = Se(e, t + 337, 8, this.devmin) || this.needPax, this.needPax = Fe(e, t + 345, i, o) || this.needPax, e[t + 475] !== 0 ? this.needPax = Fe(e, t + 345, 155, o) || this.needPax : (this.needPax = Fe(e, t + 345, 130, o) || this.needPax, this.needPax = Ps(e, t + 476, 12, this.atime) || this.needPax, this.needPax = Ps(e, t + 488, 12, this.ctime) || this.needPax);
+          let a = 256;
+          for (let h = t; h < t + 148; h++) a += e[h];
+          for (let h = t + 156; h < t + 512; h++) a += e[h];
+          return this.cksum = a, Se(e, t + 148, 8, this.cksum), this.cksumValid = true, this.needPax;
+        }
+        get type() {
+          return this.#e === "Unsupported" ? this.#e : St.name.get(this.#e);
+        }
+        get typeKey() {
+          return this.#e;
+        }
+        set type(e) {
+          let t = String(St.code.get(e));
+          if (St.isCode(t) || t === "Unsupported") this.#e = t;
+          else if (St.isCode(e)) this.#e = e;
+          else throw new TypeError("invalid entry type: " + e);
+        }
+      };
+      se.Header = Ns;
+      var ca = /* @__PURE__ */ __name((s, e) => {
+        let i = s, r = "", n, o = Qe.posix.parse(s).root || ".";
+        if (Buffer.byteLength(i) < 100) n = [i, r, false];
+        else {
+          r = Qe.posix.dirname(i), i = Qe.posix.basename(i);
+          do
+            Buffer.byteLength(i) <= 100 && Buffer.byteLength(r) <= e ? n = [i, r, false] : Buffer.byteLength(i) > 100 && Buffer.byteLength(r) <= e ? n = [i.slice(0, 99), r, true] : (i = Qe.posix.join(Qe.posix.basename(r), i), r = Qe.posix.dirname(r));
+          while (r !== o && n === void 0);
+          n || (n = [s.slice(0, 99), "", true]);
+        }
+        return n;
+      }, "ca"), Ce = /* @__PURE__ */ __name((s, e, t) => s.subarray(e, e + t).toString("utf8").replace(/\0.*/, ""), "Ce"), Ds = /* @__PURE__ */ __name((s, e, t) => fa(be(s, e, t)), "Ds"), fa = /* @__PURE__ */ __name((s) => s === void 0 ? void 0 : new Date(s * 1e3), "fa"), be = /* @__PURE__ */ __name((s, e, t) => Number(s[e]) & 128 ? Kr.parse(s.subarray(e, e + t)) : ma(s, e, t), "be"), da = /* @__PURE__ */ __name((s) => isNaN(s) ? void 0 : s, "da"), ma = /* @__PURE__ */ __name((s, e, t) => da(parseInt(s.subarray(e, e + t).toString("utf8").replace(/\0.*$/, "").trim(), 8)), "ma"), pa = { 12: 8589934591, 8: 2097151 }, Se = /* @__PURE__ */ __name((s, e, t, i) => i === void 0 ? false : i > pa[t] || i < 0 ? (Kr.encode(i, s.subarray(e, e + t)), true) : (_a(s, e, t, i), false), "Se"), _a = /* @__PURE__ */ __name((s, e, t, i) => s.write(wa(i, t), e, t, "ascii"), "_a"), wa = /* @__PURE__ */ __name((s, e) => ya(Math.floor(s).toString(8), e), "wa"), ya = /* @__PURE__ */ __name((s, e) => (s.length === e - 1 ? s : new Array(e - s.length - 1).join("0") + s + " ") + "\0", "ya"), Ps = /* @__PURE__ */ __name((s, e, t, i) => i === void 0 ? false : Se(s, e, t, i.getTime() / 1e3), "Ps"), Ea = new Array(156).join("\0"), Fe = /* @__PURE__ */ __name((s, e, t, i) => i === void 0 ? false : (s.write(i + Ea, e, t, "utf8"), i.length !== Buffer.byteLength(i) || i.length > t), "Fe");
+    });
+    var ei = d((Jt) => {
+      "use strict";
+      Object.defineProperty(Jt, "__esModule", { value: true });
+      Jt.Pax = void 0;
+      var ba = require("node:path"), Sa = Je(), Ms = class s {
+        static {
+          __name(this, "s");
+        }
+        atime;
+        mtime;
+        ctime;
+        charset;
+        comment;
+        gid;
+        uid;
+        gname;
+        uname;
+        linkpath;
+        dev;
+        ino;
+        nlink;
+        path;
+        size;
+        mode;
+        global;
+        constructor(e, t = false) {
+          this.atime = e.atime, this.charset = e.charset, this.comment = e.comment, this.ctime = e.ctime, this.dev = e.dev, this.gid = e.gid, this.global = t, this.gname = e.gname, this.ino = e.ino, this.linkpath = e.linkpath, this.mtime = e.mtime, this.nlink = e.nlink, this.path = e.path, this.size = e.size, this.uid = e.uid, this.uname = e.uname;
+        }
+        encode() {
+          let e = this.encodeBody();
+          if (e === "") return Buffer.allocUnsafe(0);
+          let t = Buffer.byteLength(e), i = 512 * Math.ceil(1 + t / 512), r = Buffer.allocUnsafe(i);
+          for (let n = 0; n < 512; n++) r[n] = 0;
+          new Sa.Header({ path: ("PaxHeader/" + (0, ba.basename)(this.path ?? "")).slice(0, 99), mode: this.mode || 420, uid: this.uid, gid: this.gid, size: t, mtime: this.mtime, type: this.global ? "GlobalExtendedHeader" : "ExtendedHeader", linkpath: "", uname: this.uname || "", gname: this.gname || "", devmaj: 0, devmin: 0, atime: this.atime, ctime: this.ctime }).encode(r), r.write(e, 512, t, "utf8");
+          for (let n = t + 512; n < r.length; n++) r[n] = 0;
+          return r;
+        }
+        encodeBody() {
+          return this.encodeField("path") + this.encodeField("ctime") + this.encodeField("atime") + this.encodeField("dev") + this.encodeField("ino") + this.encodeField("nlink") + this.encodeField("charset") + this.encodeField("comment") + this.encodeField("gid") + this.encodeField("gname") + this.encodeField("linkpath") + this.encodeField("mtime") + this.encodeField("size") + this.encodeField("uid") + this.encodeField("uname");
+        }
+        encodeField(e) {
+          if (this[e] === void 0) return "";
+          let t = this[e], i = t instanceof Date ? t.getTime() / 1e3 : t, r = " " + (e === "dev" || e === "ino" || e === "nlink" ? "SCHILY." : "") + e + "=" + i + `
+`, n = Buffer.byteLength(r), o = Math.floor(Math.log(n) / Math.log(10)) + 1;
+          return n + o >= Math.pow(10, o) && (o += 1), o + n + r;
+        }
+        static parse(e, t, i = false) {
+          return new s(ga(Ra(e), t), i);
+        }
+      };
+      Jt.Pax = Ms;
+      var ga = /* @__PURE__ */ __name((s, e) => e ? Object.assign({}, e, s) : s, "ga"), Ra = /* @__PURE__ */ __name((s) => s.replace(/\n$/, "").split(`
+`).reduce(Oa, /* @__PURE__ */ Object.create(null)), "Ra"), Oa = /* @__PURE__ */ __name((s, e) => {
+        let t = parseInt(e, 10);
+        if (t !== Buffer.byteLength(e) + 1) return s;
+        e = e.slice((t + " ").length);
+        let i = e.split("="), r = i.shift();
+        if (!r) return s;
+        let n = r.replace(/^SCHILY\.(dev|ino|nlink)/, "$1"), o = i.join("=");
+        return s[n] = /^([A-Z]+\.)?([mac]|birth|creation)time$/.test(n) ? new Date(Number(o) * 1e3) : /^[0-9]+$/.test(o) ? +o : o, s;
+      }, "Oa");
+    });
+    var et = d((ti) => {
+      "use strict";
+      Object.defineProperty(ti, "__esModule", { value: true });
+      ti.normalizeWindowsPath = void 0;
+      var va = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform;
+      ti.normalizeWindowsPath = va !== "win32" ? (s) => s : (s) => s && s.replace(/\\/g, "/");
+    });
+    var ri = d((si) => {
+      "use strict";
+      Object.defineProperty(si, "__esModule", { value: true });
+      si.ReadEntry = void 0;
+      var Ta = We(), ii = et(), Ls = class extends Ta.Minipass {
+        static {
+          __name(this, "Ls");
+        }
+        extended;
+        globalExtended;
+        header;
+        startBlockSize;
+        blockRemain;
+        remain;
+        type;
+        meta = false;
+        ignore = false;
+        path;
+        mode;
+        uid;
+        gid;
+        uname;
+        gname;
+        size = 0;
+        mtime;
+        atime;
+        ctime;
+        linkpath;
+        dev;
+        ino;
+        nlink;
+        invalid = false;
+        absolute;
+        unsupported = false;
+        constructor(e, t, i) {
+          switch (super({}), this.pause(), this.extended = t, this.globalExtended = i, this.header = e, this.remain = e.size ?? 0, this.startBlockSize = 512 * Math.ceil(this.remain / 512), this.blockRemain = this.startBlockSize, this.type = e.type, this.type) {
+            case "File":
+            case "OldFile":
+            case "Link":
+            case "SymbolicLink":
+            case "CharacterDevice":
+            case "BlockDevice":
+            case "Directory":
+            case "FIFO":
+            case "ContiguousFile":
+            case "GNUDumpDir":
+              break;
+            case "NextFileHasLongLinkpath":
+            case "NextFileHasLongPath":
+            case "OldGnuLongPath":
+            case "GlobalExtendedHeader":
+            case "ExtendedHeader":
+            case "OldExtendedHeader":
+              this.meta = true;
+              break;
+            default:
+              this.ignore = true;
+          }
+          if (!e.path) throw new Error("no path provided for tar.ReadEntry");
+          this.path = (0, ii.normalizeWindowsPath)(e.path), this.mode = e.mode, this.mode && (this.mode = this.mode & 4095), this.uid = e.uid, this.gid = e.gid, this.uname = e.uname, this.gname = e.gname, this.size = this.remain, this.mtime = e.mtime, this.atime = e.atime, this.ctime = e.ctime, this.linkpath = e.linkpath ? (0, ii.normalizeWindowsPath)(e.linkpath) : void 0, this.uname = e.uname, this.gname = e.gname, t && this.#e(t), i && this.#e(i, true);
+        }
+        write(e) {
+          let t = e.length;
+          if (t > this.blockRemain) throw new Error("writing more to entry than is appropriate");
+          let i = this.remain, r = this.blockRemain;
+          return this.remain = Math.max(0, i - t), this.blockRemain = Math.max(0, r - t), this.ignore ? true : i >= t ? super.write(e) : super.write(e.subarray(0, i));
+        }
+        #e(e, t = false) {
+          e.path && (e.path = (0, ii.normalizeWindowsPath)(e.path)), e.linkpath && (e.linkpath = (0, ii.normalizeWindowsPath)(e.linkpath)), Object.assign(this, Object.fromEntries(Object.entries(e).filter(([i, r]) => !(r == null || i === "path" && t))));
+        }
+      };
+      si.ReadEntry = Ls;
+    });
+    var oi = d((ni) => {
+      "use strict";
+      Object.defineProperty(ni, "__esModule", { value: true });
+      ni.warnMethod = void 0;
+      var Da = /* @__PURE__ */ __name((s, e, t, i = {}) => {
+        s.file && (i.file = s.file), s.cwd && (i.cwd = s.cwd), i.code = t instanceof Error && t.code || e, i.tarCode = e, !s.strict && i.recoverable !== false ? (t instanceof Error && (i = Object.assign(t, i), t = t.message), s.emit("warn", e, t, i)) : t instanceof Error ? s.emit("error", Object.assign(t, i)) : s.emit("error", Object.assign(new Error(`${e}: ${t}`), i));
+      }, "Da");
+      ni.warnMethod = Da;
+    });
+    var mi = d((di) => {
+      "use strict";
+      Object.defineProperty(di, "__esModule", { value: true });
+      di.Parser = void 0;
+      var Pa = require("events"), As = vs(), Vr = Je(), $r = ei(), Na = ri(), Ma = oi(), La = 1024 * 1024, zs = Buffer.from([31, 139]), ks = Buffer.from([40, 181, 47, 253]), Aa = Math.max(zs.length, ks.length), H = Symbol("state"), Be = Symbol("writeEntry"), de = Symbol("readEntry"), Is = Symbol("nextEntry"), Xr = Symbol("processEntry"), re = Symbol("extendedHeader"), gt = Symbol("globalExtendedHeader"), ge = Symbol("meta"), Qr = Symbol("emitMeta"), _ = Symbol("buffer"), me = Symbol("queue"), Re = Symbol("ended"), Cs = Symbol("emittedEnd"), ze = Symbol("emit"), S = Symbol("unzip"), ai = Symbol("consumeChunk"), hi = Symbol("consumeChunkSub"), Fs = Symbol("consumeBody"), Jr = Symbol("consumeMeta"), en = Symbol("consumeHeader"), Rt = Symbol("consuming"), Bs = Symbol("bufferConcat"), li = Symbol("maybeEnd"), tt = Symbol("writing"), Oe = Symbol("aborted"), ui = Symbol("onDone"), ke = Symbol("sawValidEntry"), ci = Symbol("sawNullBlock"), fi = Symbol("sawEOF"), tn = Symbol("closeStream"), Ia = /* @__PURE__ */ __name(() => true, "Ia"), js = class extends Pa.EventEmitter {
+        static {
+          __name(this, "js");
+        }
+        file;
+        strict;
+        maxMetaEntrySize;
+        filter;
+        brotli;
+        zstd;
+        writable = true;
+        readable = false;
+        [me] = [];
+        [_];
+        [de];
+        [Be];
+        [H] = "begin";
+        [ge] = "";
+        [re];
+        [gt];
+        [Re] = false;
+        [S];
+        [Oe] = false;
+        [ke];
+        [ci] = false;
+        [fi] = false;
+        [tt] = false;
+        [Rt] = false;
+        [Cs] = false;
+        constructor(e = {}) {
+          super(), this.file = e.file || "", this.on(ui, () => {
+            (this[H] === "begin" || this[ke] === false) && this.warn("TAR_BAD_ARCHIVE", "Unrecognized archive format");
+          }), e.ondone ? this.on(ui, e.ondone) : this.on(ui, () => {
+            this.emit("prefinish"), this.emit("finish"), this.emit("end");
+          }), this.strict = !!e.strict, this.maxMetaEntrySize = e.maxMetaEntrySize || La, this.filter = typeof e.filter == "function" ? e.filter : Ia;
+          let t = e.file && (e.file.endsWith(".tar.br") || e.file.endsWith(".tbr"));
+          this.brotli = !(e.gzip || e.zstd) && e.brotli !== void 0 ? e.brotli : t ? void 0 : false;
+          let i = e.file && (e.file.endsWith(".tar.zst") || e.file.endsWith(".tzst"));
+          this.zstd = !(e.gzip || e.brotli) && e.zstd !== void 0 ? e.zstd : i ? true : void 0, this.on("end", () => this[tn]()), typeof e.onwarn == "function" && this.on("warn", e.onwarn), typeof e.onReadEntry == "function" && this.on("entry", e.onReadEntry);
+        }
+        warn(e, t, i = {}) {
+          (0, Ma.warnMethod)(this, e, t, i);
+        }
+        [en](e, t) {
+          this[ke] === void 0 && (this[ke] = false);
+          let i;
+          try {
+            i = new Vr.Header(e, t, this[re], this[gt]);
+          } catch (r) {
+            return this.warn("TAR_ENTRY_INVALID", r);
+          }
+          if (i.nullBlock) this[ci] ? (this[fi] = true, this[H] === "begin" && (this[H] = "header"), this[ze]("eof")) : (this[ci] = true, this[ze]("nullBlock"));
+          else if (this[ci] = false, !i.cksumValid) this.warn("TAR_ENTRY_INVALID", "checksum failure", { header: i });
+          else if (!i.path) this.warn("TAR_ENTRY_INVALID", "path is required", { header: i });
+          else {
+            let r = i.type;
+            if (/^(Symbolic)?Link$/.test(r) && !i.linkpath) this.warn("TAR_ENTRY_INVALID", "linkpath required", { header: i });
+            else if (!/^(Symbolic)?Link$/.test(r) && !/^(Global)?ExtendedHeader$/.test(r) && i.linkpath) this.warn("TAR_ENTRY_INVALID", "linkpath forbidden", { header: i });
+            else {
+              let n = this[Be] = new Na.ReadEntry(i, this[re], this[gt]);
+              if (!this[ke]) if (n.remain) {
+                let o = /* @__PURE__ */ __name(() => {
+                  n.invalid || (this[ke] = true);
+                }, "o");
+                n.on("end", o);
+              } else this[ke] = true;
+              n.meta ? n.size > this.maxMetaEntrySize ? (n.ignore = true, this[ze]("ignoredEntry", n), this[H] = "ignore", n.resume()) : n.size > 0 && (this[ge] = "", n.on("data", (o) => this[ge] += o), this[H] = "meta") : (this[re] = void 0, n.ignore = n.ignore || !this.filter(n.path, n), n.ignore ? (this[ze]("ignoredEntry", n), this[H] = n.remain ? "ignore" : "header", n.resume()) : (n.remain ? this[H] = "body" : (this[H] = "header", n.end()), this[de] ? this[me].push(n) : (this[me].push(n), this[Is]())));
+            }
+          }
+        }
+        [tn]() {
+          queueMicrotask(() => this.emit("close"));
+        }
+        [Xr](e) {
+          let t = true;
+          if (!e) this[de] = void 0, t = false;
+          else if (Array.isArray(e)) {
+            let [i, ...r] = e;
+            this.emit(i, ...r);
+          } else this[de] = e, this.emit("entry", e), e.emittedEnd || (e.on("end", () => this[Is]()), t = false);
+          return t;
+        }
+        [Is]() {
+          do
+            ;
+          while (this[Xr](this[me].shift()));
+          if (!this[me].length) {
+            let e = this[de];
+            !e || e.flowing || e.size === e.remain ? this[tt] || this.emit("drain") : e.once("drain", () => this.emit("drain"));
+          }
+        }
+        [Fs](e, t) {
+          let i = this[Be];
+          if (!i) throw new Error("attempt to consume body without entry??");
+          let r = i.blockRemain ?? 0, n = r >= e.length && t === 0 ? e : e.subarray(t, t + r);
+          return i.write(n), i.blockRemain || (this[H] = "header", this[Be] = void 0, i.end()), n.length;
+        }
+        [Jr](e, t) {
+          let i = this[Be], r = this[Fs](e, t);
+          return !this[Be] && i && this[Qr](i), r;
+        }
+        [ze](e, t, i) {
+          !this[me].length && !this[de] ? this.emit(e, t, i) : this[me].push([e, t, i]);
+        }
+        [Qr](e) {
+          switch (this[ze]("meta", this[ge]), e.type) {
+            case "ExtendedHeader":
+            case "OldExtendedHeader":
+              this[re] = $r.Pax.parse(this[ge], this[re], false);
+              break;
+            case "GlobalExtendedHeader":
+              this[gt] = $r.Pax.parse(this[ge], this[gt], true);
+              break;
+            case "NextFileHasLongPath":
+            case "OldGnuLongPath": {
+              let t = this[re] ?? /* @__PURE__ */ Object.create(null);
+              this[re] = t, t.path = this[ge].replace(/\0.*/, "");
+              break;
+            }
+            case "NextFileHasLongLinkpath": {
+              let t = this[re] || /* @__PURE__ */ Object.create(null);
+              this[re] = t, t.linkpath = this[ge].replace(/\0.*/, "");
+              break;
+            }
+            default:
+              throw new Error("unknown meta: " + e.type);
+          }
+        }
+        abort(e) {
+          this[Oe] = true, this.emit("abort", e), this.warn("TAR_ABORT", e, { recoverable: false });
+        }
+        write(e, t, i) {
+          if (typeof t == "function" && (i = t, t = void 0), typeof e == "string" && (e = Buffer.from(e, typeof t == "string" ? t : "utf8")), this[Oe]) return i?.(), false;
+          if ((this[S] === void 0 || this.brotli === void 0 && this[S] === false) && e) {
+            if (this[_] && (e = Buffer.concat([this[_], e]), this[_] = void 0), e.length < Aa) return this[_] = e, i?.(), true;
+            for (let h = 0; this[S] === void 0 && h < zs.length; h++) e[h] !== zs[h] && (this[S] = false);
+            let o = false;
+            if (this[S] === false && this.zstd !== false) {
+              o = true;
+              for (let h = 0; h < ks.length; h++) if (e[h] !== ks[h]) {
+                o = false;
+                break;
+              }
+            }
+            let a = this.brotli === void 0 && !o;
+            if (this[S] === false && a) if (e.length < 512) if (this[Re]) this.brotli = true;
+            else return this[_] = e, i?.(), true;
+            else try {
+              new Vr.Header(e.subarray(0, 512)), this.brotli = false;
+            } catch {
+              this.brotli = true;
+            }
+            if (this[S] === void 0 || this[S] === false && (this.brotli || o)) {
+              let h = this[Re];
+              this[Re] = false, this[S] = this[S] === void 0 ? new As.Unzip({}) : o ? new As.ZstdDecompress({}) : new As.BrotliDecompress({}), this[S].on("data", (u) => this[ai](u)), this[S].on("error", (u) => this.abort(u)), this[S].on("end", () => {
+                this[Re] = true, this[ai]();
+              }), this[tt] = true;
+              let l = !!this[S][h ? "end" : "write"](e);
+              return this[tt] = false, i?.(), l;
+            }
+          }
+          this[tt] = true, this[S] ? this[S].write(e) : this[ai](e), this[tt] = false;
+          let n = this[me].length ? false : this[de] ? this[de].flowing : true;
+          return !n && !this[me].length && this[de]?.once("drain", () => this.emit("drain")), i?.(), n;
+        }
+        [Bs](e) {
+          e && !this[Oe] && (this[_] = this[_] ? Buffer.concat([this[_], e]) : e);
+        }
+        [li]() {
+          if (this[Re] && !this[Cs] && !this[Oe] && !this[Rt]) {
+            this[Cs] = true;
+            let e = this[Be];
+            if (e && e.blockRemain) {
+              let t = this[_] ? this[_].length : 0;
+              this.warn("TAR_BAD_ARCHIVE", `Truncated input (needed ${e.blockRemain} more bytes, only ${t} available)`, { entry: e }), this[_] && e.write(this[_]), e.end();
+            }
+            this[ze](ui);
+          }
+        }
+        [ai](e) {
+          if (this[Rt] && e) this[Bs](e);
+          else if (!e && !this[_]) this[li]();
+          else if (e) {
+            if (this[Rt] = true, this[_]) {
+              this[Bs](e);
+              let t = this[_];
+              this[_] = void 0, this[hi](t);
+            } else this[hi](e);
+            for (; this[_] && this[_]?.length >= 512 && !this[Oe] && !this[fi]; ) {
+              let t = this[_];
+              this[_] = void 0, this[hi](t);
+            }
+            this[Rt] = false;
+          }
+          (!this[_] || this[Re]) && this[li]();
+        }
+        [hi](e) {
+          let t = 0, i = e.length;
+          for (; t + 512 <= i && !this[Oe] && !this[fi]; ) switch (this[H]) {
+            case "begin":
+            case "header":
+              this[en](e, t), t += 512;
+              break;
+            case "ignore":
+            case "body":
+              t += this[Fs](e, t);
+              break;
+            case "meta":
+              t += this[Jr](e, t);
+              break;
+            default:
+              throw new Error("invalid state: " + this[H]);
+          }
+          t < i && (this[_] ? this[_] = Buffer.concat([e.subarray(t), this[_]]) : this[_] = e.subarray(t));
+        }
+        end(e, t, i) {
+          return typeof e == "function" && (i = e, t = void 0, e = void 0), typeof t == "function" && (i = t, t = void 0), typeof e == "string" && (e = Buffer.from(e, t)), i && this.once("finish", i), this[Oe] || (this[S] ? (e && this[S].write(e), this[S].end()) : (this[Re] = true, (this.brotli === void 0 || this.zstd === void 0) && (e = e || Buffer.alloc(0)), e && this.write(e), this[li]())), this;
+        }
+      };
+      di.Parser = js;
+    });
+    var _i = d((pi) => {
+      "use strict";
+      Object.defineProperty(pi, "__esModule", { value: true });
+      pi.stripTrailingSlashes = void 0;
+      var Ca = /* @__PURE__ */ __name((s) => {
+        let e = s.length - 1, t = -1;
+        for (; e > -1 && s.charAt(e) === "/"; ) t = e, e--;
+        return t === -1 ? s : s.slice(0, t);
+      }, "Ca");
+      pi.stripTrailingSlashes = Ca;
+    });
+    var st = d((F) => {
+      "use strict";
+      var Fa = F && F.__createBinding || (Object.create ? (function(s, e, t, i) {
+        i === void 0 && (i = t);
+        var r = Object.getOwnPropertyDescriptor(e, t);
+        (!r || ("get" in r ? !e.__esModule : r.writable || r.configurable)) && (r = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return e[t];
+        }, "get") }), Object.defineProperty(s, i, r);
+      }) : (function(s, e, t, i) {
+        i === void 0 && (i = t), s[i] = e[t];
+      })), Ba = F && F.__setModuleDefault || (Object.create ? (function(s, e) {
+        Object.defineProperty(s, "default", { enumerable: true, value: e });
+      }) : function(s, e) {
+        s.default = e;
+      }), za = F && F.__importStar || /* @__PURE__ */ (function() {
+        var s = /* @__PURE__ */ __name(function(e) {
+          return s = Object.getOwnPropertyNames || function(t) {
+            var i = [];
+            for (var r in t) Object.prototype.hasOwnProperty.call(t, r) && (i[i.length] = r);
+            return i;
+          }, s(e);
+        }, "s");
+        return function(e) {
+          if (e && e.__esModule) return e;
+          var t = {};
+          if (e != null) for (var i = s(e), r = 0; r < i.length; r++) i[r] !== "default" && Fa(t, e, i[r]);
+          return Ba(t, e), t;
+        };
+      })(), ka = F && F.__importDefault || function(s) {
+        return s && s.__esModule ? s : { default: s };
+      };
+      Object.defineProperty(F, "__esModule", { value: true });
+      F.list = F.filesFilter = void 0;
+      var ja = za(Ke()), it = ka(require("node:fs")), sn = require("path"), xa = Ve(), wi = mi(), xs = _i(), Ua = /* @__PURE__ */ __name((s) => {
+        let e = s.onReadEntry;
+        s.onReadEntry = e ? (t) => {
+          e(t), t.resume();
+        } : (t) => t.resume();
+      }, "Ua"), qa = /* @__PURE__ */ __name((s, e) => {
+        let t = new Map(e.map((n) => [(0, xs.stripTrailingSlashes)(n), true])), i = s.filter, r = /* @__PURE__ */ __name((n, o = "") => {
+          let a = o || (0, sn.parse)(n).root || ".", h;
+          if (n === a) h = false;
+          else {
+            let l = t.get(n);
+            l !== void 0 ? h = l : h = r((0, sn.dirname)(n), a);
+          }
+          return t.set(n, h), h;
+        }, "r");
+        s.filter = i ? (n, o) => i(n, o) && r((0, xs.stripTrailingSlashes)(n)) : (n) => r((0, xs.stripTrailingSlashes)(n));
+      }, "qa");
+      F.filesFilter = qa;
+      var Wa = /* @__PURE__ */ __name((s) => {
+        let e = new wi.Parser(s), t = s.file, i;
+        try {
+          i = it.default.openSync(t, "r");
+          let r = it.default.fstatSync(i), n = s.maxReadSize || 16 * 1024 * 1024;
+          if (r.size < n) {
+            let o = Buffer.allocUnsafe(r.size), a = it.default.readSync(i, o, 0, r.size, 0);
+            e.end(a === o.byteLength ? o : o.subarray(0, a));
+          } else {
+            let o = 0, a = Buffer.allocUnsafe(n);
+            for (; o < r.size; ) {
+              let h = it.default.readSync(i, a, 0, n, o);
+              if (h === 0) break;
+              o += h, e.write(a.subarray(0, h));
+            }
+            e.end();
+          }
+        } finally {
+          if (typeof i == "number") try {
+            it.default.closeSync(i);
+          } catch {
+          }
+        }
+      }, "Wa"), Ha = /* @__PURE__ */ __name((s, e) => {
+        let t = new wi.Parser(s), i = s.maxReadSize || 16 * 1024 * 1024, r = s.file;
+        return new Promise((o, a) => {
+          t.on("error", a), t.on("end", o), it.default.stat(r, (h, l) => {
+            if (h) a(h);
+            else {
+              let u = new ja.ReadStream(r, { readSize: i, size: l.size });
+              u.on("error", a), u.pipe(t);
+            }
+          });
+        });
+      }, "Ha");
+      F.list = (0, xa.makeCommand)(Wa, Ha, (s) => new wi.Parser(s), (s) => new wi.Parser(s), (s, e) => {
+        e?.length && (0, F.filesFilter)(s, e), s.noResume || Ua(s);
+      });
+    });
+    var rn = d((yi) => {
+      "use strict";
+      Object.defineProperty(yi, "__esModule", { value: true });
+      yi.modeFix = void 0;
+      var Za = /* @__PURE__ */ __name((s, e, t) => (s &= 4095, t && (s = (s | 384) & -19), e && (s & 256 && (s |= 64), s & 32 && (s |= 8), s & 4 && (s |= 1)), s), "Za");
+      yi.modeFix = Za;
+    });
+    var Us = d((Ei) => {
+      "use strict";
+      Object.defineProperty(Ei, "__esModule", { value: true });
+      Ei.stripAbsolutePath = void 0;
+      var Ga = require("node:path"), { isAbsolute: Ya, parse: nn } = Ga.win32, Ka = /* @__PURE__ */ __name((s) => {
+        let e = "", t = nn(s);
+        for (; Ya(s) || t.root; ) {
+          let i = s.charAt(0) === "/" && s.slice(0, 4) !== "//?/" ? "/" : t.root;
+          s = s.slice(i.length), e += i, t = nn(s);
+        }
+        return [e, s];
+      }, "Ka");
+      Ei.stripAbsolutePath = Ka;
+    });
+    var Ws = d((rt) => {
+      "use strict";
+      Object.defineProperty(rt, "__esModule", { value: true });
+      rt.decode = rt.encode = void 0;
+      var bi = ["|", "<", ">", "?", ":"], qs = bi.map((s) => String.fromCharCode(61440 + s.charCodeAt(0))), Va = new Map(bi.map((s, e) => [s, qs[e]])), $a = new Map(qs.map((s, e) => [s, bi[e]])), Xa = /* @__PURE__ */ __name((s) => bi.reduce((e, t) => e.split(t).join(Va.get(t)), s), "Xa");
+      rt.encode = Xa;
+      var Qa = /* @__PURE__ */ __name((s) => qs.reduce((e, t) => e.split(t).join($a.get(t)), s), "Qa");
+      rt.decode = Qa;
+    });
+    var er = d((M) => {
+      "use strict";
+      var Ja = M && M.__createBinding || (Object.create ? (function(s, e, t, i) {
+        i === void 0 && (i = t);
+        var r = Object.getOwnPropertyDescriptor(e, t);
+        (!r || ("get" in r ? !e.__esModule : r.writable || r.configurable)) && (r = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return e[t];
+        }, "get") }), Object.defineProperty(s, i, r);
+      }) : (function(s, e, t, i) {
+        i === void 0 && (i = t), s[i] = e[t];
+      })), eh = M && M.__setModuleDefault || (Object.create ? (function(s, e) {
+        Object.defineProperty(s, "default", { enumerable: true, value: e });
+      }) : function(s, e) {
+        s.default = e;
+      }), th = M && M.__importStar || /* @__PURE__ */ (function() {
+        var s = /* @__PURE__ */ __name(function(e) {
+          return s = Object.getOwnPropertyNames || function(t) {
+            var i = [];
+            for (var r in t) Object.prototype.hasOwnProperty.call(t, r) && (i[i.length] = r);
+            return i;
+          }, s(e);
+        }, "s");
+        return function(e) {
+          if (e && e.__esModule) return e;
+          var t = {};
+          if (e != null) for (var i = s(e), r = 0; r < i.length; r++) i[r] !== "default" && Ja(t, e, i[r]);
+          return eh(t, e), t;
+        };
+      })(), cn = M && M.__importDefault || function(s) {
+        return s && s.__esModule ? s : { default: s };
+      };
+      Object.defineProperty(M, "__esModule", { value: true });
+      M.WriteEntryTar = M.WriteEntrySync = M.WriteEntry = void 0;
+      var oe = cn(require("fs")), fn = We(), on = cn(require("path")), dn = Je(), mn = rn(), ne = et(), pn = Vt(), _n = ei(), wn = Us(), ih = _i(), yn = oi(), sh = th(Ws()), En = /* @__PURE__ */ __name((s, e) => e ? (s = (0, ne.normalizeWindowsPath)(s).replace(/^\.(\/|$)/, ""), (0, ih.stripTrailingSlashes)(e) + "/" + s) : (0, ne.normalizeWindowsPath)(s), "En"), rh = 16 * 1024 * 1024, an = Symbol("process"), hn = Symbol("file"), ln = Symbol("directory"), Zs = Symbol("symlink"), un = Symbol("hardlink"), Ot = Symbol("header"), Si = Symbol("read"), Gs = Symbol("lstat"), gi = Symbol("onlstat"), Ys = Symbol("onread"), Ks = Symbol("onreadlink"), Vs = Symbol("openfile"), $s = Symbol("onopenfile"), ve = Symbol("close"), Ri = Symbol("mode"), Xs = Symbol("awaitDrain"), Hs = Symbol("ondrain"), ae = Symbol("prefix"), Oi = class extends fn.Minipass {
+        static {
+          __name(this, "Oi");
+        }
+        path;
+        portable;
+        myuid = process.getuid && process.getuid() || 0;
+        myuser = process.env.USER || "";
+        maxReadSize;
+        linkCache;
+        statCache;
+        preservePaths;
+        cwd;
+        strict;
+        mtime;
+        noPax;
+        noMtime;
+        prefix;
+        fd;
+        blockLen = 0;
+        blockRemain = 0;
+        buf;
+        pos = 0;
+        remain = 0;
+        length = 0;
+        offset = 0;
+        win32;
+        absolute;
+        header;
+        type;
+        linkpath;
+        stat;
+        onWriteEntry;
+        #e = false;
+        constructor(e, t = {}) {
+          let i = (0, pn.dealias)(t);
+          super(), this.path = (0, ne.normalizeWindowsPath)(e), this.portable = !!i.portable, this.maxReadSize = i.maxReadSize || rh, this.linkCache = i.linkCache || /* @__PURE__ */ new Map(), this.statCache = i.statCache || /* @__PURE__ */ new Map(), this.preservePaths = !!i.preservePaths, this.cwd = (0, ne.normalizeWindowsPath)(i.cwd || process.cwd()), this.strict = !!i.strict, this.noPax = !!i.noPax, this.noMtime = !!i.noMtime, this.mtime = i.mtime, this.prefix = i.prefix ? (0, ne.normalizeWindowsPath)(i.prefix) : void 0, this.onWriteEntry = i.onWriteEntry, typeof i.onwarn == "function" && this.on("warn", i.onwarn);
+          let r = false;
+          if (!this.preservePaths) {
+            let [o, a] = (0, wn.stripAbsolutePath)(this.path);
+            o && typeof a == "string" && (this.path = a, r = o);
+          }
+          this.win32 = !!i.win32 || process.platform === "win32", this.win32 && (this.path = sh.decode(this.path.replace(/\\/g, "/")), e = e.replace(/\\/g, "/")), this.absolute = (0, ne.normalizeWindowsPath)(i.absolute || on.default.resolve(this.cwd, e)), this.path === "" && (this.path = "./"), r && this.warn("TAR_ENTRY_INFO", `stripping ${r} from absolute path`, { entry: this, path: r + this.path });
+          let n = this.statCache.get(this.absolute);
+          n ? this[gi](n) : this[Gs]();
+        }
+        warn(e, t, i = {}) {
+          return (0, yn.warnMethod)(this, e, t, i);
+        }
+        emit(e, ...t) {
+          return e === "error" && (this.#e = true), super.emit(e, ...t);
+        }
+        [Gs]() {
+          oe.default.lstat(this.absolute, (e, t) => {
+            if (e) return this.emit("error", e);
+            this[gi](t);
+          });
+        }
+        [gi](e) {
+          this.statCache.set(this.absolute, e), this.stat = e, e.isFile() || (e.size = 0), this.type = nh(e), this.emit("stat", e), this[an]();
+        }
+        [an]() {
+          switch (this.type) {
+            case "File":
+              return this[hn]();
+            case "Directory":
+              return this[ln]();
+            case "SymbolicLink":
+              return this[Zs]();
+            default:
+              return this.end();
+          }
+        }
+        [Ri](e) {
+          return (0, mn.modeFix)(e, this.type === "Directory", this.portable);
+        }
+        [ae](e) {
+          return En(e, this.prefix);
+        }
+        [Ot]() {
+          if (!this.stat) throw new Error("cannot write header before stat");
+          this.type === "Directory" && this.portable && (this.noMtime = true), this.onWriteEntry?.(this), this.header = new dn.Header({ path: this[ae](this.path), linkpath: this.type === "Link" && this.linkpath !== void 0 ? this[ae](this.linkpath) : this.linkpath, mode: this[Ri](this.stat.mode), uid: this.portable ? void 0 : this.stat.uid, gid: this.portable ? void 0 : this.stat.gid, size: this.stat.size, mtime: this.noMtime ? void 0 : this.mtime || this.stat.mtime, type: this.type === "Unsupported" ? void 0 : this.type, uname: this.portable ? void 0 : this.stat.uid === this.myuid ? this.myuser : "", atime: this.portable ? void 0 : this.stat.atime, ctime: this.portable ? void 0 : this.stat.ctime }), this.header.encode() && !this.noPax && super.write(new _n.Pax({ atime: this.portable ? void 0 : this.header.atime, ctime: this.portable ? void 0 : this.header.ctime, gid: this.portable ? void 0 : this.header.gid, mtime: this.noMtime ? void 0 : this.mtime || this.header.mtime, path: this[ae](this.path), linkpath: this.type === "Link" && this.linkpath !== void 0 ? this[ae](this.linkpath) : this.linkpath, size: this.header.size, uid: this.portable ? void 0 : this.header.uid, uname: this.portable ? void 0 : this.header.uname, dev: this.portable ? void 0 : this.stat.dev, ino: this.portable ? void 0 : this.stat.ino, nlink: this.portable ? void 0 : this.stat.nlink }).encode());
+          let e = this.header?.block;
+          if (!e) throw new Error("failed to encode header");
+          super.write(e);
+        }
+        [ln]() {
+          if (!this.stat) throw new Error("cannot create directory entry without stat");
+          this.path.slice(-1) !== "/" && (this.path += "/"), this.stat.size = 0, this[Ot](), this.end();
+        }
+        [Zs]() {
+          oe.default.readlink(this.absolute, (e, t) => {
+            if (e) return this.emit("error", e);
+            this[Ks](t);
+          });
+        }
+        [Ks](e) {
+          this.linkpath = (0, ne.normalizeWindowsPath)(e), this[Ot](), this.end();
+        }
+        [un](e) {
+          if (!this.stat) throw new Error("cannot create link entry without stat");
+          this.type = "Link", this.linkpath = (0, ne.normalizeWindowsPath)(on.default.relative(this.cwd, e)), this.stat.size = 0, this[Ot](), this.end();
+        }
+        [hn]() {
+          if (!this.stat) throw new Error("cannot create file entry without stat");
+          if (this.stat.nlink > 1) {
+            let e = `${this.stat.dev}:${this.stat.ino}`, t = this.linkCache.get(e);
+            if (t?.indexOf(this.cwd) === 0) return this[un](t);
+            this.linkCache.set(e, this.absolute);
+          }
+          if (this[Ot](), this.stat.size === 0) return this.end();
+          this[Vs]();
+        }
+        [Vs]() {
+          oe.default.open(this.absolute, "r", (e, t) => {
+            if (e) return this.emit("error", e);
+            this[$s](t);
+          });
+        }
+        [$s](e) {
+          if (this.fd = e, this.#e) return this[ve]();
+          if (!this.stat) throw new Error("should stat before calling onopenfile");
+          this.blockLen = 512 * Math.ceil(this.stat.size / 512), this.blockRemain = this.blockLen;
+          let t = Math.min(this.blockLen, this.maxReadSize);
+          this.buf = Buffer.allocUnsafe(t), this.offset = 0, this.pos = 0, this.remain = this.stat.size, this.length = this.buf.length, this[Si]();
+        }
+        [Si]() {
+          let { fd: e, buf: t, offset: i, length: r, pos: n } = this;
+          if (e === void 0 || t === void 0) throw new Error("cannot read file without first opening");
+          oe.default.read(e, t, i, r, n, (o, a) => {
+            if (o) return this[ve](() => this.emit("error", o));
+            this[Ys](a);
+          });
+        }
+        [ve](e = () => {
+        }) {
+          this.fd !== void 0 && oe.default.close(this.fd, e);
+        }
+        [Ys](e) {
+          if (e <= 0 && this.remain > 0) {
+            let r = Object.assign(new Error("encountered unexpected EOF"), { path: this.absolute, syscall: "read", code: "EOF" });
+            return this[ve](() => this.emit("error", r));
+          }
+          if (e > this.remain) {
+            let r = Object.assign(new Error("did not encounter expected EOF"), { path: this.absolute, syscall: "read", code: "EOF" });
+            return this[ve](() => this.emit("error", r));
+          }
+          if (!this.buf) throw new Error("should have created buffer prior to reading");
+          if (e === this.remain) for (let r = e; r < this.length && e < this.blockRemain; r++) this.buf[r + this.offset] = 0, e++, this.remain++;
+          let t = this.offset === 0 && e === this.buf.length ? this.buf : this.buf.subarray(this.offset, this.offset + e);
+          this.write(t) ? this[Hs]() : this[Xs](() => this[Hs]());
+        }
+        [Xs](e) {
+          this.once("drain", e);
+        }
+        write(e, t, i) {
+          if (typeof t == "function" && (i = t, t = void 0), typeof e == "string" && (e = Buffer.from(e, typeof t == "string" ? t : "utf8")), this.blockRemain < e.length) {
+            let r = Object.assign(new Error("writing more data than expected"), { path: this.absolute });
+            return this.emit("error", r);
+          }
+          return this.remain -= e.length, this.blockRemain -= e.length, this.pos += e.length, this.offset += e.length, super.write(e, null, i);
+        }
+        [Hs]() {
+          if (!this.remain) return this.blockRemain && super.write(Buffer.alloc(this.blockRemain)), this[ve]((e) => e ? this.emit("error", e) : this.end());
+          if (!this.buf) throw new Error("buffer lost somehow in ONDRAIN");
+          this.offset >= this.length && (this.buf = Buffer.allocUnsafe(Math.min(this.blockRemain, this.buf.length)), this.offset = 0), this.length = this.buf.length - this.offset, this[Si]();
+        }
+      };
+      M.WriteEntry = Oi;
+      var Qs = class extends Oi {
+        static {
+          __name(this, "Qs");
+        }
+        sync = true;
+        [Gs]() {
+          this[gi](oe.default.lstatSync(this.absolute));
+        }
+        [Zs]() {
+          this[Ks](oe.default.readlinkSync(this.absolute));
+        }
+        [Vs]() {
+          this[$s](oe.default.openSync(this.absolute, "r"));
+        }
+        [Si]() {
+          let e = true;
+          try {
+            let { fd: t, buf: i, offset: r, length: n, pos: o } = this;
+            if (t === void 0 || i === void 0) throw new Error("fd and buf must be set in READ method");
+            let a = oe.default.readSync(t, i, r, n, o);
+            this[Ys](a), e = false;
+          } finally {
+            if (e) try {
+              this[ve](() => {
+              });
+            } catch {
+            }
+          }
+        }
+        [Xs](e) {
+          e();
+        }
+        [ve](e = () => {
+        }) {
+          this.fd !== void 0 && oe.default.closeSync(this.fd), e();
+        }
+      };
+      M.WriteEntrySync = Qs;
+      var Js = class extends fn.Minipass {
+        static {
+          __name(this, "Js");
+        }
+        blockLen = 0;
+        blockRemain = 0;
+        buf = 0;
+        pos = 0;
+        remain = 0;
+        length = 0;
+        preservePaths;
+        portable;
+        strict;
+        noPax;
+        noMtime;
+        readEntry;
+        type;
+        prefix;
+        path;
+        mode;
+        uid;
+        gid;
+        uname;
+        gname;
+        header;
+        mtime;
+        atime;
+        ctime;
+        linkpath;
+        size;
+        onWriteEntry;
+        warn(e, t, i = {}) {
+          return (0, yn.warnMethod)(this, e, t, i);
+        }
+        constructor(e, t = {}) {
+          let i = (0, pn.dealias)(t);
+          super(), this.preservePaths = !!i.preservePaths, this.portable = !!i.portable, this.strict = !!i.strict, this.noPax = !!i.noPax, this.noMtime = !!i.noMtime, this.onWriteEntry = i.onWriteEntry, this.readEntry = e;
+          let { type: r } = e;
+          if (r === "Unsupported") throw new Error("writing entry that should be ignored");
+          this.type = r, this.type === "Directory" && this.portable && (this.noMtime = true), this.prefix = i.prefix, this.path = (0, ne.normalizeWindowsPath)(e.path), this.mode = e.mode !== void 0 ? this[Ri](e.mode) : void 0, this.uid = this.portable ? void 0 : e.uid, this.gid = this.portable ? void 0 : e.gid, this.uname = this.portable ? void 0 : e.uname, this.gname = this.portable ? void 0 : e.gname, this.size = e.size, this.mtime = this.noMtime ? void 0 : i.mtime || e.mtime, this.atime = this.portable ? void 0 : e.atime, this.ctime = this.portable ? void 0 : e.ctime, this.linkpath = e.linkpath !== void 0 ? (0, ne.normalizeWindowsPath)(e.linkpath) : void 0, typeof i.onwarn == "function" && this.on("warn", i.onwarn);
+          let n = false;
+          if (!this.preservePaths) {
+            let [a, h] = (0, wn.stripAbsolutePath)(this.path);
+            a && typeof h == "string" && (this.path = h, n = a);
+          }
+          this.remain = e.size, this.blockRemain = e.startBlockSize, this.onWriteEntry?.(this), this.header = new dn.Header({ path: this[ae](this.path), linkpath: this.type === "Link" && this.linkpath !== void 0 ? this[ae](this.linkpath) : this.linkpath, mode: this.mode, uid: this.portable ? void 0 : this.uid, gid: this.portable ? void 0 : this.gid, size: this.size, mtime: this.noMtime ? void 0 : this.mtime, type: this.type, uname: this.portable ? void 0 : this.uname, atime: this.portable ? void 0 : this.atime, ctime: this.portable ? void 0 : this.ctime }), n && this.warn("TAR_ENTRY_INFO", `stripping ${n} from absolute path`, { entry: this, path: n + this.path }), this.header.encode() && !this.noPax && super.write(new _n.Pax({ atime: this.portable ? void 0 : this.atime, ctime: this.portable ? void 0 : this.ctime, gid: this.portable ? void 0 : this.gid, mtime: this.noMtime ? void 0 : this.mtime, path: this[ae](this.path), linkpath: this.type === "Link" && this.linkpath !== void 0 ? this[ae](this.linkpath) : this.linkpath, size: this.size, uid: this.portable ? void 0 : this.uid, uname: this.portable ? void 0 : this.uname, dev: this.portable ? void 0 : this.readEntry.dev, ino: this.portable ? void 0 : this.readEntry.ino, nlink: this.portable ? void 0 : this.readEntry.nlink }).encode());
+          let o = this.header?.block;
+          if (!o) throw new Error("failed to encode header");
+          super.write(o), e.pipe(this);
+        }
+        [ae](e) {
+          return En(e, this.prefix);
+        }
+        [Ri](e) {
+          return (0, mn.modeFix)(e, this.type === "Directory", this.portable);
+        }
+        write(e, t, i) {
+          typeof t == "function" && (i = t, t = void 0), typeof e == "string" && (e = Buffer.from(e, typeof t == "string" ? t : "utf8"));
+          let r = e.length;
+          if (r > this.blockRemain) throw new Error("writing more to entry than is appropriate");
+          return this.blockRemain -= r, super.write(e, i);
+        }
+        end(e, t, i) {
+          return this.blockRemain && super.write(Buffer.alloc(this.blockRemain)), typeof e == "function" && (i = e, t = void 0, e = void 0), typeof t == "function" && (i = t, t = void 0), typeof e == "string" && (e = Buffer.from(e, t ?? "utf8")), i && this.once("finish", i), e ? super.end(e, i) : super.end(i), this;
+        }
+      };
+      M.WriteEntryTar = Js;
+      var nh = /* @__PURE__ */ __name((s) => s.isFile() ? "File" : s.isDirectory() ? "Directory" : s.isSymbolicLink() ? "SymbolicLink" : "Unsupported", "nh");
+    });
+    var bn = d((ot) => {
+      "use strict";
+      Object.defineProperty(ot, "__esModule", { value: true });
+      ot.Node = ot.Yallist = void 0;
+      var tr = class s {
+        static {
+          __name(this, "s");
+        }
+        tail;
+        head;
+        length = 0;
+        static create(e = []) {
+          return new s(e);
+        }
+        constructor(e = []) {
+          for (let t of e) this.push(t);
+        }
+        *[Symbol.iterator]() {
+          for (let e = this.head; e; e = e.next) yield e.value;
+        }
+        removeNode(e) {
+          if (e.list !== this) throw new Error("removing node which does not belong to this list");
+          let t = e.next, i = e.prev;
+          return t && (t.prev = i), i && (i.next = t), e === this.head && (this.head = t), e === this.tail && (this.tail = i), this.length--, e.next = void 0, e.prev = void 0, e.list = void 0, t;
+        }
+        unshiftNode(e) {
+          if (e === this.head) return;
+          e.list && e.list.removeNode(e);
+          let t = this.head;
+          e.list = this, e.next = t, t && (t.prev = e), this.head = e, this.tail || (this.tail = e), this.length++;
+        }
+        pushNode(e) {
+          if (e === this.tail) return;
+          e.list && e.list.removeNode(e);
+          let t = this.tail;
+          e.list = this, e.prev = t, t && (t.next = e), this.tail = e, this.head || (this.head = e), this.length++;
+        }
+        push(...e) {
+          for (let t = 0, i = e.length; t < i; t++) ah(this, e[t]);
+          return this.length;
+        }
+        unshift(...e) {
+          for (var t = 0, i = e.length; t < i; t++) hh(this, e[t]);
+          return this.length;
+        }
+        pop() {
+          if (!this.tail) return;
+          let e = this.tail.value, t = this.tail;
+          return this.tail = this.tail.prev, this.tail ? this.tail.next = void 0 : this.head = void 0, t.list = void 0, this.length--, e;
+        }
+        shift() {
+          if (!this.head) return;
+          let e = this.head.value, t = this.head;
+          return this.head = this.head.next, this.head ? this.head.prev = void 0 : this.tail = void 0, t.list = void 0, this.length--, e;
+        }
+        forEach(e, t) {
+          t = t || this;
+          for (let i = this.head, r = 0; i; r++) e.call(t, i.value, r, this), i = i.next;
+        }
+        forEachReverse(e, t) {
+          t = t || this;
+          for (let i = this.tail, r = this.length - 1; i; r--) e.call(t, i.value, r, this), i = i.prev;
+        }
+        get(e) {
+          let t = 0, i = this.head;
+          for (; i && t < e; t++) i = i.next;
+          if (t === e && i) return i.value;
+        }
+        getReverse(e) {
+          let t = 0, i = this.tail;
+          for (; i && t < e; t++) i = i.prev;
+          if (t === e && i) return i.value;
+        }
+        map(e, t) {
+          t = t || this;
+          let i = new s();
+          for (let r = this.head; r; ) i.push(e.call(t, r.value, this)), r = r.next;
+          return i;
+        }
+        mapReverse(e, t) {
+          t = t || this;
+          var i = new s();
+          for (let r = this.tail; r; ) i.push(e.call(t, r.value, this)), r = r.prev;
+          return i;
+        }
+        reduce(e, t) {
+          let i, r = this.head;
+          if (arguments.length > 1) i = t;
+          else if (this.head) r = this.head.next, i = this.head.value;
+          else throw new TypeError("Reduce of empty list with no initial value");
+          for (var n = 0; r; n++) i = e(i, r.value, n), r = r.next;
+          return i;
+        }
+        reduceReverse(e, t) {
+          let i, r = this.tail;
+          if (arguments.length > 1) i = t;
+          else if (this.tail) r = this.tail.prev, i = this.tail.value;
+          else throw new TypeError("Reduce of empty list with no initial value");
+          for (let n = this.length - 1; r; n--) i = e(i, r.value, n), r = r.prev;
+          return i;
+        }
+        toArray() {
+          let e = new Array(this.length);
+          for (let t = 0, i = this.head; i; t++) e[t] = i.value, i = i.next;
+          return e;
+        }
+        toArrayReverse() {
+          let e = new Array(this.length);
+          for (let t = 0, i = this.tail; i; t++) e[t] = i.value, i = i.prev;
+          return e;
+        }
+        slice(e = 0, t = this.length) {
+          t < 0 && (t += this.length), e < 0 && (e += this.length);
+          let i = new s();
+          if (t < e || t < 0) return i;
+          e < 0 && (e = 0), t > this.length && (t = this.length);
+          let r = this.head, n = 0;
+          for (n = 0; r && n < e; n++) r = r.next;
+          for (; r && n < t; n++, r = r.next) i.push(r.value);
+          return i;
+        }
+        sliceReverse(e = 0, t = this.length) {
+          t < 0 && (t += this.length), e < 0 && (e += this.length);
+          let i = new s();
+          if (t < e || t < 0) return i;
+          e < 0 && (e = 0), t > this.length && (t = this.length);
+          let r = this.length, n = this.tail;
+          for (; n && r > t; r--) n = n.prev;
+          for (; n && r > e; r--, n = n.prev) i.push(n.value);
+          return i;
+        }
+        splice(e, t = 0, ...i) {
+          e > this.length && (e = this.length - 1), e < 0 && (e = this.length + e);
+          let r = this.head;
+          for (let o = 0; r && o < e; o++) r = r.next;
+          let n = [];
+          for (let o = 0; r && o < t; o++) n.push(r.value), r = this.removeNode(r);
+          r ? r !== this.tail && (r = r.prev) : r = this.tail;
+          for (let o of i) r = oh(this, r, o);
+          return n;
+        }
+        reverse() {
+          let e = this.head, t = this.tail;
+          for (let i = e; i; i = i.prev) {
+            let r = i.prev;
+            i.prev = i.next, i.next = r;
+          }
+          return this.head = t, this.tail = e, this;
+        }
+      };
+      ot.Yallist = tr;
+      function oh(s, e, t) {
+        let i = e, r = e ? e.next : s.head, n = new nt(t, i, r, s);
+        return n.next === void 0 && (s.tail = n), n.prev === void 0 && (s.head = n), s.length++, n;
+      }
+      __name(oh, "oh");
+      function ah(s, e) {
+        s.tail = new nt(e, s.tail, void 0, s), s.head || (s.head = s.tail), s.length++;
+      }
+      __name(ah, "ah");
+      function hh(s, e) {
+        s.head = new nt(e, void 0, s.head, s), s.tail || (s.tail = s.head), s.length++;
+      }
+      __name(hh, "hh");
+      var nt = class {
+        static {
+          __name(this, "nt");
+        }
+        list;
+        next;
+        prev;
+        value;
+        constructor(e, t, i, r) {
+          this.list = r, this.value = e, t ? (t.next = this, this.prev = t) : this.prev = void 0, i ? (i.prev = this, this.next = i) : this.next = void 0;
+        }
+      };
+      ot.Node = nt;
+    });
+    var Ai = d((L) => {
+      "use strict";
+      var lh = L && L.__createBinding || (Object.create ? (function(s, e, t, i) {
+        i === void 0 && (i = t);
+        var r = Object.getOwnPropertyDescriptor(e, t);
+        (!r || ("get" in r ? !e.__esModule : r.writable || r.configurable)) && (r = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return e[t];
+        }, "get") }), Object.defineProperty(s, i, r);
+      }) : (function(s, e, t, i) {
+        i === void 0 && (i = t), s[i] = e[t];
+      })), uh = L && L.__setModuleDefault || (Object.create ? (function(s, e) {
+        Object.defineProperty(s, "default", { enumerable: true, value: e });
+      }) : function(s, e) {
+        s.default = e;
+      }), ch = L && L.__importStar || /* @__PURE__ */ (function() {
+        var s = /* @__PURE__ */ __name(function(e) {
+          return s = Object.getOwnPropertyNames || function(t) {
+            var i = [];
+            for (var r in t) Object.prototype.hasOwnProperty.call(t, r) && (i[i.length] = r);
+            return i;
+          }, s(e);
+        }, "s");
+        return function(e) {
+          if (e && e.__esModule) return e;
+          var t = {};
+          if (e != null) for (var i = s(e), r = 0; r < i.length; r++) i[r] !== "default" && lh(t, e, i[r]);
+          return uh(t, e), t;
+        };
+      })(), vn = L && L.__importDefault || function(s) {
+        return s && s.__esModule ? s : { default: s };
+      };
+      Object.defineProperty(L, "__esModule", { value: true });
+      L.PackSync = L.Pack = L.PackJob = void 0;
+      var Mi = vn(require("fs")), hr = er(), Dt = class {
+        static {
+          __name(this, "Dt");
+        }
+        path;
+        absolute;
+        entry;
+        stat;
+        readdir;
+        pending = false;
+        ignore = false;
+        piped = false;
+        constructor(e, t) {
+          this.path = e || "./", this.absolute = t;
+        }
+      };
+      L.PackJob = Dt;
+      var fh = We(), ir = ch(vs()), dh = bn(), mh = ri(), ph = oi(), Sn = Buffer.alloc(1024), vi = Symbol("onStat"), vt = Symbol("ended"), X = Symbol("queue"), je = Symbol("current"), xe = Symbol("process"), Tt = Symbol("processing"), sr = Symbol("processJob"), Q = Symbol("jobs"), rr = Symbol("jobDone"), Ti = Symbol("addFSEntry"), gn = Symbol("addTarEntry"), lr = Symbol("stat"), ur = Symbol("readdir"), Di = Symbol("onreaddir"), Pi = Symbol("pipe"), Rn = Symbol("entry"), nr = Symbol("entryOpt"), Ni = Symbol("writeEntryClass"), Tn = Symbol("write"), or = Symbol("ondrain"), On = vn(require("path")), ar = et(), Li = class extends fh.Minipass {
+        static {
+          __name(this, "Li");
+        }
+        sync = false;
+        opt;
+        cwd;
+        maxReadSize;
+        preservePaths;
+        strict;
+        noPax;
+        prefix;
+        linkCache;
+        statCache;
+        file;
+        portable;
+        zip;
+        readdirCache;
+        noDirRecurse;
+        follow;
+        noMtime;
+        mtime;
+        filter;
+        jobs;
+        [Ni];
+        onWriteEntry;
+        [X];
+        [Q] = 0;
+        [Tt] = false;
+        [vt] = false;
+        constructor(e = {}) {
+          if (super(), this.opt = e, this.file = e.file || "", this.cwd = e.cwd || process.cwd(), this.maxReadSize = e.maxReadSize, this.preservePaths = !!e.preservePaths, this.strict = !!e.strict, this.noPax = !!e.noPax, this.prefix = (0, ar.normalizeWindowsPath)(e.prefix || ""), this.linkCache = e.linkCache || /* @__PURE__ */ new Map(), this.statCache = e.statCache || /* @__PURE__ */ new Map(), this.readdirCache = e.readdirCache || /* @__PURE__ */ new Map(), this.onWriteEntry = e.onWriteEntry, this[Ni] = hr.WriteEntry, typeof e.onwarn == "function" && this.on("warn", e.onwarn), this.portable = !!e.portable, e.gzip || e.brotli || e.zstd) {
+            if ((e.gzip ? 1 : 0) + (e.brotli ? 1 : 0) + (e.zstd ? 1 : 0) > 1) throw new TypeError("gzip, brotli, zstd are mutually exclusive");
+            if (e.gzip && (typeof e.gzip != "object" && (e.gzip = {}), this.portable && (e.gzip.portable = true), this.zip = new ir.Gzip(e.gzip)), e.brotli && (typeof e.brotli != "object" && (e.brotli = {}), this.zip = new ir.BrotliCompress(e.brotli)), e.zstd && (typeof e.zstd != "object" && (e.zstd = {}), this.zip = new ir.ZstdCompress(e.zstd)), !this.zip) throw new Error("impossible");
+            let t = this.zip;
+            t.on("data", (i) => super.write(i)), t.on("end", () => super.end()), t.on("drain", () => this[or]()), this.on("resume", () => t.resume());
+          } else this.on("drain", this[or]);
+          this.noDirRecurse = !!e.noDirRecurse, this.follow = !!e.follow, this.noMtime = !!e.noMtime, e.mtime && (this.mtime = e.mtime), this.filter = typeof e.filter == "function" ? e.filter : () => true, this[X] = new dh.Yallist(), this[Q] = 0, this.jobs = Number(e.jobs) || 4, this[Tt] = false, this[vt] = false;
+        }
+        [Tn](e) {
+          return super.write(e);
+        }
+        add(e) {
+          return this.write(e), this;
+        }
+        end(e, t, i) {
+          return typeof e == "function" && (i = e, e = void 0), typeof t == "function" && (i = t, t = void 0), e && this.add(e), this[vt] = true, this[xe](), i && i(), this;
+        }
+        write(e) {
+          if (this[vt]) throw new Error("write after end");
+          return e instanceof mh.ReadEntry ? this[gn](e) : this[Ti](e), this.flowing;
+        }
+        [gn](e) {
+          let t = (0, ar.normalizeWindowsPath)(On.default.resolve(this.cwd, e.path));
+          if (!this.filter(e.path, e)) e.resume();
+          else {
+            let i = new Dt(e.path, t);
+            i.entry = new hr.WriteEntryTar(e, this[nr](i)), i.entry.on("end", () => this[rr](i)), this[Q] += 1, this[X].push(i);
+          }
+          this[xe]();
+        }
+        [Ti](e) {
+          let t = (0, ar.normalizeWindowsPath)(On.default.resolve(this.cwd, e));
+          this[X].push(new Dt(e, t)), this[xe]();
+        }
+        [lr](e) {
+          e.pending = true, this[Q] += 1;
+          let t = this.follow ? "stat" : "lstat";
+          Mi.default[t](e.absolute, (i, r) => {
+            e.pending = false, this[Q] -= 1, i ? this.emit("error", i) : this[vi](e, r);
+          });
+        }
+        [vi](e, t) {
+          this.statCache.set(e.absolute, t), e.stat = t, this.filter(e.path, t) ? t.isFile() && t.nlink > 1 && e === this[je] && !this.linkCache.get(`${t.dev}:${t.ino}`) && !this.sync && this[sr](e) : e.ignore = true, this[xe]();
+        }
+        [ur](e) {
+          e.pending = true, this[Q] += 1, Mi.default.readdir(e.absolute, (t, i) => {
+            if (e.pending = false, this[Q] -= 1, t) return this.emit("error", t);
+            this[Di](e, i);
+          });
+        }
+        [Di](e, t) {
+          this.readdirCache.set(e.absolute, t), e.readdir = t, this[xe]();
+        }
+        [xe]() {
+          if (!this[Tt]) {
+            this[Tt] = true;
+            for (let e = this[X].head; e && this[Q] < this.jobs; e = e.next) if (this[sr](e.value), e.value.ignore) {
+              let t = e.next;
+              this[X].removeNode(e), e.next = t;
+            }
+            this[Tt] = false, this[vt] && !this[X].length && this[Q] === 0 && (this.zip ? this.zip.end(Sn) : (super.write(Sn), super.end()));
+          }
+        }
+        get [je]() {
+          return this[X] && this[X].head && this[X].head.value;
+        }
+        [rr](e) {
+          this[X].shift(), this[Q] -= 1, this[xe]();
+        }
+        [sr](e) {
+          if (!e.pending) {
+            if (e.entry) {
+              e === this[je] && !e.piped && this[Pi](e);
+              return;
+            }
+            if (!e.stat) {
+              let t = this.statCache.get(e.absolute);
+              t ? this[vi](e, t) : this[lr](e);
+            }
+            if (e.stat && !e.ignore) {
+              if (!this.noDirRecurse && e.stat.isDirectory() && !e.readdir) {
+                let t = this.readdirCache.get(e.absolute);
+                if (t ? this[Di](e, t) : this[ur](e), !e.readdir) return;
+              }
+              if (e.entry = this[Rn](e), !e.entry) {
+                e.ignore = true;
+                return;
+              }
+              e === this[je] && !e.piped && this[Pi](e);
+            }
+          }
+        }
+        [nr](e) {
+          return { onwarn: /* @__PURE__ */ __name((t, i, r) => this.warn(t, i, r), "onwarn"), noPax: this.noPax, cwd: this.cwd, absolute: e.absolute, preservePaths: this.preservePaths, maxReadSize: this.maxReadSize, strict: this.strict, portable: this.portable, linkCache: this.linkCache, statCache: this.statCache, noMtime: this.noMtime, mtime: this.mtime, prefix: this.prefix, onWriteEntry: this.onWriteEntry };
+        }
+        [Rn](e) {
+          this[Q] += 1;
+          try {
+            return new this[Ni](e.path, this[nr](e)).on("end", () => this[rr](e)).on("error", (i) => this.emit("error", i));
+          } catch (t) {
+            this.emit("error", t);
+          }
+        }
+        [or]() {
+          this[je] && this[je].entry && this[je].entry.resume();
+        }
+        [Pi](e) {
+          e.piped = true, e.readdir && e.readdir.forEach((r) => {
+            let n = e.path, o = n === "./" ? "" : n.replace(/\/*$/, "/");
+            this[Ti](o + r);
+          });
+          let t = e.entry, i = this.zip;
+          if (!t) throw new Error("cannot pipe without source");
+          i ? t.on("data", (r) => {
+            i.write(r) || t.pause();
+          }) : t.on("data", (r) => {
+            super.write(r) || t.pause();
+          });
+        }
+        pause() {
+          return this.zip && this.zip.pause(), super.pause();
+        }
+        warn(e, t, i = {}) {
+          (0, ph.warnMethod)(this, e, t, i);
+        }
+      };
+      L.Pack = Li;
+      var cr = class extends Li {
+        static {
+          __name(this, "cr");
+        }
+        sync = true;
+        constructor(e) {
+          super(e), this[Ni] = hr.WriteEntrySync;
+        }
+        pause() {
+        }
+        resume() {
+        }
+        [lr](e) {
+          let t = this.follow ? "statSync" : "lstatSync";
+          this[vi](e, Mi.default[t](e.absolute));
+        }
+        [ur](e) {
+          this[Di](e, Mi.default.readdirSync(e.absolute));
+        }
+        [Pi](e) {
+          let t = e.entry, i = this.zip;
+          if (e.readdir && e.readdir.forEach((r) => {
+            let n = e.path, o = n === "./" ? "" : n.replace(/\/*$/, "/");
+            this[Ti](o + r);
+          }), !t) throw new Error("Cannot pipe without source");
+          i ? t.on("data", (r) => {
+            i.write(r);
+          }) : t.on("data", (r) => {
+            super[Tn](r);
+          });
+        }
+      };
+      L.PackSync = cr;
+    });
+    var fr = d((at) => {
+      "use strict";
+      var _h = at && at.__importDefault || function(s) {
+        return s && s.__esModule ? s : { default: s };
+      };
+      Object.defineProperty(at, "__esModule", { value: true });
+      at.create = void 0;
+      var Dn = Ke(), Pn = _h(require("node:path")), Nn = st(), wh = Ve(), Ii = Ai(), yh = /* @__PURE__ */ __name((s, e) => {
+        let t = new Ii.PackSync(s), i = new Dn.WriteStreamSync(s.file, { mode: s.mode || 438 });
+        t.pipe(i), Mn(t, e);
+      }, "yh"), Eh = /* @__PURE__ */ __name((s, e) => {
+        let t = new Ii.Pack(s), i = new Dn.WriteStream(s.file, { mode: s.mode || 438 });
+        t.pipe(i);
+        let r = new Promise((n, o) => {
+          i.on("error", o), i.on("close", n), t.on("error", o);
+        });
+        return Ln(t, e), r;
+      }, "Eh"), Mn = /* @__PURE__ */ __name((s, e) => {
+        e.forEach((t) => {
+          t.charAt(0) === "@" ? (0, Nn.list)({ file: Pn.default.resolve(s.cwd, t.slice(1)), sync: true, noResume: true, onReadEntry: /* @__PURE__ */ __name((i) => s.add(i), "onReadEntry") }) : s.add(t);
+        }), s.end();
+      }, "Mn"), Ln = /* @__PURE__ */ __name(async (s, e) => {
+        for (let t = 0; t < e.length; t++) {
+          let i = String(e[t]);
+          i.charAt(0) === "@" ? await (0, Nn.list)({ file: Pn.default.resolve(String(s.cwd), i.slice(1)), noResume: true, onReadEntry: /* @__PURE__ */ __name((r) => {
+            s.add(r);
+          }, "onReadEntry") }) : s.add(i);
+        }
+        s.end();
+      }, "Ln"), bh = /* @__PURE__ */ __name((s, e) => {
+        let t = new Ii.PackSync(s);
+        return Mn(t, e), t;
+      }, "bh"), Sh = /* @__PURE__ */ __name((s, e) => {
+        let t = new Ii.Pack(s);
+        return Ln(t, e), t;
+      }, "Sh");
+      at.create = (0, wh.makeCommand)(yh, Eh, bh, Sh, (s, e) => {
+        if (!e?.length) throw new TypeError("no paths specified to add to archive");
+      });
+    });
+    var Cn = d((ht) => {
+      "use strict";
+      var gh = ht && ht.__importDefault || function(s) {
+        return s && s.__esModule ? s : { default: s };
+      };
+      Object.defineProperty(ht, "__esModule", { value: true });
+      ht.getWriteFlag = void 0;
+      var An = gh(require("fs")), Rh = process.env.__FAKE_PLATFORM__ || process.platform, Oh = Rh === "win32", { O_CREAT: vh, O_TRUNC: Th, O_WRONLY: Dh } = An.default.constants, In = Number(process.env.__FAKE_FS_O_FILENAME__) || An.default.constants.UV_FS_O_FILEMAP || 0, Ph = Oh && !!In, Nh = 512 * 1024, Mh = In | Th | vh | Dh;
+      ht.getWriteFlag = Ph ? (s) => s < Nh ? Mh : "w" : () => "w";
+    });
+    var Bn = d((he) => {
+      "use strict";
+      var Fn = he && he.__importDefault || function(s) {
+        return s && s.__esModule ? s : { default: s };
+      };
+      Object.defineProperty(he, "__esModule", { value: true });
+      he.chownrSync = he.chownr = void 0;
+      var Fi = Fn(require("node:fs")), Pt = Fn(require("node:path")), dr = /* @__PURE__ */ __name((s, e, t) => {
+        try {
+          return Fi.default.lchownSync(s, e, t);
+        } catch (i) {
+          if (i?.code !== "ENOENT") throw i;
+        }
+      }, "dr"), Ci = /* @__PURE__ */ __name((s, e, t, i) => {
+        Fi.default.lchown(s, e, t, (r) => {
+          i(r && r?.code !== "ENOENT" ? r : null);
+        });
+      }, "Ci"), Lh = /* @__PURE__ */ __name((s, e, t, i, r) => {
+        if (e.isDirectory()) (0, he.chownr)(Pt.default.resolve(s, e.name), t, i, (n) => {
+          if (n) return r(n);
+          let o = Pt.default.resolve(s, e.name);
+          Ci(o, t, i, r);
+        });
+        else {
+          let n = Pt.default.resolve(s, e.name);
+          Ci(n, t, i, r);
+        }
+      }, "Lh"), Ah = /* @__PURE__ */ __name((s, e, t, i) => {
+        Fi.default.readdir(s, { withFileTypes: true }, (r, n) => {
+          if (r) {
+            if (r.code === "ENOENT") return i();
+            if (r.code !== "ENOTDIR" && r.code !== "ENOTSUP") return i(r);
+          }
+          if (r || !n.length) return Ci(s, e, t, i);
+          let o = n.length, a = null, h = /* @__PURE__ */ __name((l) => {
+            if (!a) {
+              if (l) return i(a = l);
+              if (--o === 0) return Ci(s, e, t, i);
+            }
+          }, "h");
+          for (let l of n) Lh(s, l, e, t, h);
+        });
+      }, "Ah");
+      he.chownr = Ah;
+      var Ih = /* @__PURE__ */ __name((s, e, t, i) => {
+        e.isDirectory() && (0, he.chownrSync)(Pt.default.resolve(s, e.name), t, i), dr(Pt.default.resolve(s, e.name), t, i);
+      }, "Ih"), Ch = /* @__PURE__ */ __name((s, e, t) => {
+        let i;
+        try {
+          i = Fi.default.readdirSync(s, { withFileTypes: true });
+        } catch (r) {
+          let n = r;
+          if (n?.code === "ENOENT") return;
+          if (n?.code === "ENOTDIR" || n?.code === "ENOTSUP") return dr(s, e, t);
+          throw n;
+        }
+        for (let r of i) Ih(s, r, e, t);
+        return dr(s, e, t);
+      }, "Ch");
+      he.chownrSync = Ch;
+    });
+    var zn = d((Bi) => {
+      "use strict";
+      Object.defineProperty(Bi, "__esModule", { value: true });
+      Bi.CwdError = void 0;
+      var mr = class extends Error {
+        static {
+          __name(this, "mr");
+        }
+        path;
+        code;
+        syscall = "chdir";
+        constructor(e, t) {
+          super(`${t}: Cannot cd into '${e}'`), this.path = e, this.code = t;
+        }
+        get name() {
+          return "CwdError";
+        }
+      };
+      Bi.CwdError = mr;
+    });
+    var _r = d((zi) => {
+      "use strict";
+      Object.defineProperty(zi, "__esModule", { value: true });
+      zi.SymlinkError = void 0;
+      var pr = class extends Error {
+        static {
+          __name(this, "pr");
+        }
+        path;
+        symlink;
+        syscall = "symlink";
+        code = "TAR_SYMLINK_ERROR";
+        constructor(e, t) {
+          super("TAR_SYMLINK_ERROR: Cannot extract through symbolic link"), this.symlink = e, this.path = t;
+        }
+        get name() {
+          return "SymlinkError";
+        }
+      };
+      zi.SymlinkError = pr;
+    });
+    var qn = d((Te) => {
+      "use strict";
+      var yr = Te && Te.__importDefault || function(s) {
+        return s && s.__esModule ? s : { default: s };
+      };
+      Object.defineProperty(Te, "__esModule", { value: true });
+      Te.mkdirSync = Te.mkdir = void 0;
+      var kn = Bn(), x = yr(require("node:fs")), Fh = yr(require("node:fs/promises")), ki = yr(require("node:path")), jn = zn(), pe = et(), xn = _r(), Bh = /* @__PURE__ */ __name((s, e) => {
+        x.default.stat(s, (t, i) => {
+          (t || !i.isDirectory()) && (t = new jn.CwdError(s, t?.code || "ENOTDIR")), e(t);
+        });
+      }, "Bh"), zh = /* @__PURE__ */ __name((s, e, t) => {
+        s = (0, pe.normalizeWindowsPath)(s);
+        let i = e.umask ?? 18, r = e.mode | 448, n = (r & i) !== 0, o = e.uid, a = e.gid, h = typeof o == "number" && typeof a == "number" && (o !== e.processUid || a !== e.processGid), l = e.preserve, u = e.unlink, c = (0, pe.normalizeWindowsPath)(e.cwd), E = /* @__PURE__ */ __name((w, P) => {
+          w ? t(w) : P && h ? (0, kn.chownr)(P, o, a, (Cr) => E(Cr)) : n ? x.default.chmod(s, r, t) : t();
+        }, "E");
+        if (s === c) return Bh(s, E);
+        if (l) return Fh.default.mkdir(s, { mode: r, recursive: true }).then((w) => E(null, w ?? void 0), E);
+        let A = (0, pe.normalizeWindowsPath)(ki.default.relative(c, s)).split("/");
+        wr(c, A, r, u, c, void 0, E);
+      }, "zh");
+      Te.mkdir = zh;
+      var wr = /* @__PURE__ */ __name((s, e, t, i, r, n, o) => {
+        if (!e.length) return o(null, n);
+        let a = e.shift(), h = (0, pe.normalizeWindowsPath)(ki.default.resolve(s + "/" + a));
+        x.default.mkdir(h, t, Un(h, e, t, i, r, n, o));
+      }, "wr"), Un = /* @__PURE__ */ __name((s, e, t, i, r, n, o) => (a) => {
+        a ? x.default.lstat(s, (h, l) => {
+          if (h) h.path = h.path && (0, pe.normalizeWindowsPath)(h.path), o(h);
+          else if (l.isDirectory()) wr(s, e, t, i, r, n, o);
+          else if (i) x.default.unlink(s, (u) => {
+            if (u) return o(u);
+            x.default.mkdir(s, t, Un(s, e, t, i, r, n, o));
+          });
+          else {
+            if (l.isSymbolicLink()) return o(new xn.SymlinkError(s, s + "/" + e.join("/")));
+            o(a);
+          }
+        }) : (n = n || s, wr(s, e, t, i, r, n, o));
+      }, "Un"), kh = /* @__PURE__ */ __name((s) => {
+        let e = false, t;
+        try {
+          e = x.default.statSync(s).isDirectory();
+        } catch (i) {
+          t = i?.code;
+        } finally {
+          if (!e) throw new jn.CwdError(s, t ?? "ENOTDIR");
+        }
+      }, "kh"), jh = /* @__PURE__ */ __name((s, e) => {
+        s = (0, pe.normalizeWindowsPath)(s);
+        let t = e.umask ?? 18, i = e.mode | 448, r = (i & t) !== 0, n = e.uid, o = e.gid, a = typeof n == "number" && typeof o == "number" && (n !== e.processUid || o !== e.processGid), h = e.preserve, l = e.unlink, u = (0, pe.normalizeWindowsPath)(e.cwd), c = /* @__PURE__ */ __name((w) => {
+          w && a && (0, kn.chownrSync)(w, n, o), r && x.default.chmodSync(s, i);
+        }, "c");
+        if (s === u) return kh(u), c();
+        if (h) return c(x.default.mkdirSync(s, { mode: i, recursive: true }) ?? void 0);
+        let D = (0, pe.normalizeWindowsPath)(ki.default.relative(u, s)).split("/"), A;
+        for (let w = D.shift(), P = u; w && (P += "/" + w); w = D.shift()) {
+          P = (0, pe.normalizeWindowsPath)(ki.default.resolve(P));
+          try {
+            x.default.mkdirSync(P, i), A = A || P;
+          } catch {
+            let Fr = x.default.lstatSync(P);
+            if (Fr.isDirectory()) continue;
+            if (l) {
+              x.default.unlinkSync(P), x.default.mkdirSync(P, i), A = A || P;
+              continue;
+            } else if (Fr.isSymbolicLink()) return new xn.SymlinkError(P, P + "/" + D.join("/"));
+          }
+        }
+        return c(A);
+      }, "jh");
+      Te.mkdirSync = jh;
+    });
+    var Hn = d((ji) => {
+      "use strict";
+      Object.defineProperty(ji, "__esModule", { value: true });
+      ji.normalizeUnicode = void 0;
+      var Er = /* @__PURE__ */ Object.create(null), Wn = 1e4, lt = /* @__PURE__ */ new Set(), xh = /* @__PURE__ */ __name((s) => {
+        lt.has(s) ? lt.delete(s) : Er[s] = s.normalize("NFD").toLocaleLowerCase("en").toLocaleUpperCase("en"), lt.add(s);
+        let e = Er[s], t = lt.size - Wn;
+        if (t > Wn / 10) {
+          for (let i of lt) if (lt.delete(i), delete Er[i], --t <= 0) break;
+        }
+        return e;
+      }, "xh");
+      ji.normalizeUnicode = xh;
+    });
+    var Gn = d((xi) => {
+      "use strict";
+      Object.defineProperty(xi, "__esModule", { value: true });
+      xi.PathReservations = void 0;
+      var Zn = require("node:path"), Uh = Hn(), qh = _i(), Wh = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform, Hh = Wh === "win32", Zh = /* @__PURE__ */ __name((s) => s.split("/").slice(0, -1).reduce((t, i) => {
+        let r = t[t.length - 1];
+        return r !== void 0 && (i = (0, Zn.join)(r, i)), t.push(i || "/"), t;
+      }, []), "Zh"), br = class {
+        static {
+          __name(this, "br");
+        }
+        #e = /* @__PURE__ */ new Map();
+        #i = /* @__PURE__ */ new Map();
+        #s = /* @__PURE__ */ new Set();
+        reserve(e, t) {
+          e = Hh ? ["win32 parallelization disabled"] : e.map((r) => (0, qh.stripTrailingSlashes)((0, Zn.join)((0, Uh.normalizeUnicode)(r))));
+          let i = new Set(e.map((r) => Zh(r)).reduce((r, n) => r.concat(n)));
+          this.#i.set(t, { dirs: i, paths: e });
+          for (let r of e) {
+            let n = this.#e.get(r);
+            n ? n.push(t) : this.#e.set(r, [t]);
+          }
+          for (let r of i) {
+            let n = this.#e.get(r);
+            if (!n) this.#e.set(r, [/* @__PURE__ */ new Set([t])]);
+            else {
+              let o = n[n.length - 1];
+              o instanceof Set ? o.add(t) : n.push(/* @__PURE__ */ new Set([t]));
+            }
+          }
+          return this.#r(t);
+        }
+        #n(e) {
+          let t = this.#i.get(e);
+          if (!t) throw new Error("function does not have any path reservations");
+          return { paths: t.paths.map((i) => this.#e.get(i)), dirs: [...t.dirs].map((i) => this.#e.get(i)) };
+        }
+        check(e) {
+          let { paths: t, dirs: i } = this.#n(e);
+          return t.every((r) => r && r[0] === e) && i.every((r) => r && r[0] instanceof Set && r[0].has(e));
+        }
+        #r(e) {
+          return this.#s.has(e) || !this.check(e) ? false : (this.#s.add(e), e(() => this.#t(e)), true);
+        }
+        #t(e) {
+          if (!this.#s.has(e)) return false;
+          let t = this.#i.get(e);
+          if (!t) throw new Error("invalid reservation");
+          let { paths: i, dirs: r } = t, n = /* @__PURE__ */ new Set();
+          for (let o of i) {
+            let a = this.#e.get(o);
+            if (!a || a?.[0] !== e) continue;
+            let h = a[1];
+            if (!h) {
+              this.#e.delete(o);
+              continue;
+            }
+            if (a.shift(), typeof h == "function") n.add(h);
+            else for (let l of h) n.add(l);
+          }
+          for (let o of r) {
+            let a = this.#e.get(o), h = a?.[0];
+            if (!(!a || !(h instanceof Set))) if (h.size === 1 && a.length === 1) {
+              this.#e.delete(o);
+              continue;
+            } else if (h.size === 1) {
+              a.shift();
+              let l = a[0];
+              typeof l == "function" && n.add(l);
+            } else h.delete(e);
+          }
+          return this.#s.delete(e), n.forEach((o) => this.#r(o)), true;
+        }
+      };
+      xi.PathReservations = br;
+    });
+    var Yn = d((Ui) => {
+      "use strict";
+      Object.defineProperty(Ui, "__esModule", { value: true });
+      Ui.umask = void 0;
+      var Gh = /* @__PURE__ */ __name(() => process.umask(), "Gh");
+      Ui.umask = Gh;
+    });
+    var Lr = d((z) => {
+      "use strict";
+      var Yh = z && z.__createBinding || (Object.create ? (function(s, e, t, i) {
+        i === void 0 && (i = t);
+        var r = Object.getOwnPropertyDescriptor(e, t);
+        (!r || ("get" in r ? !e.__esModule : r.writable || r.configurable)) && (r = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return e[t];
+        }, "get") }), Object.defineProperty(s, i, r);
+      }) : (function(s, e, t, i) {
+        i === void 0 && (i = t), s[i] = e[t];
+      })), Kh = z && z.__setModuleDefault || (Object.create ? (function(s, e) {
+        Object.defineProperty(s, "default", { enumerable: true, value: e });
+      }) : function(s, e) {
+        s.default = e;
+      }), so = z && z.__importStar || /* @__PURE__ */ (function() {
+        var s = /* @__PURE__ */ __name(function(e) {
+          return s = Object.getOwnPropertyNames || function(t) {
+            var i = [];
+            for (var r in t) Object.prototype.hasOwnProperty.call(t, r) && (i[i.length] = r);
+            return i;
+          }, s(e);
+        }, "s");
+        return function(e) {
+          if (e && e.__esModule) return e;
+          var t = {};
+          if (e != null) for (var i = s(e), r = 0; r < i.length; r++) i[r] !== "default" && Yh(t, e, i[r]);
+          return Kh(t, e), t;
+        };
+      })(), Mr = z && z.__importDefault || function(s) {
+        return s && s.__esModule ? s : { default: s };
+      };
+      Object.defineProperty(z, "__esModule", { value: true });
+      z.UnpackSync = z.Unpack = void 0;
+      var Vh = so(Ke()), $h = Mr(require("node:assert")), ro = require("node:crypto"), m = Mr(require("node:fs")), g = Mr(require("node:path")), no = Cn(), oo = qn(), U = et(), Xh = mi(), Qh = Us(), Kn = so(Ws()), Jh = Gn(), ao = _r(), el = Yn(), Vn = Symbol("onEntry"), Or = Symbol("checkFs"), $n = Symbol("checkFs2"), vr = Symbol("isReusable"), Z = Symbol("makeFs"), Tr = Symbol("file"), Dr = Symbol("directory"), Wi = Symbol("link"), Xn = Symbol("symlink"), Qn = Symbol("hardlink"), Mt = Symbol("ensureNoSymlink"), Jn = Symbol("unsupported"), eo = Symbol("checkPath"), Sr = Symbol("stripAbsolutePath"), De = Symbol("mkdir"), T = Symbol("onError"), qi = Symbol("pending"), to = Symbol("pend"), ut = Symbol("unpend"), gr = Symbol("ended"), Rr = Symbol("maybeClose"), Pr = Symbol("skip"), Lt = Symbol("doChown"), At = Symbol("uid"), It = Symbol("gid"), Ct = Symbol("checkedCwd"), tl = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform, Ft = tl === "win32", il = 1024, sl = /* @__PURE__ */ __name((s, e) => {
+        if (!Ft) return m.default.unlink(s, e);
+        let t = s + ".DELETE." + (0, ro.randomBytes)(16).toString("hex");
+        m.default.rename(s, t, (i) => {
+          if (i) return e(i);
+          m.default.unlink(t, e);
+        });
+      }, "sl"), rl = /* @__PURE__ */ __name((s) => {
+        if (!Ft) return m.default.unlinkSync(s);
+        let e = s + ".DELETE." + (0, ro.randomBytes)(16).toString("hex");
+        m.default.renameSync(s, e), m.default.unlinkSync(e);
+      }, "rl"), io = /* @__PURE__ */ __name((s, e, t) => s !== void 0 && s === s >>> 0 ? s : e !== void 0 && e === e >>> 0 ? e : t, "io"), Hi = class extends Xh.Parser {
+        static {
+          __name(this, "Hi");
+        }
+        [gr] = false;
+        [Ct] = false;
+        [qi] = 0;
+        reservations = new Jh.PathReservations();
+        transform;
+        writable = true;
+        readable = false;
+        uid;
+        gid;
+        setOwner;
+        preserveOwner;
+        processGid;
+        processUid;
+        maxDepth;
+        forceChown;
+        win32;
+        newer;
+        keep;
+        noMtime;
+        preservePaths;
+        unlink;
+        cwd;
+        strip;
+        processUmask;
+        umask;
+        dmode;
+        fmode;
+        chmod;
+        constructor(e = {}) {
+          if (e.ondone = () => {
+            this[gr] = true, this[Rr]();
+          }, super(e), this.transform = e.transform, this.chmod = !!e.chmod, typeof e.uid == "number" || typeof e.gid == "number") {
+            if (typeof e.uid != "number" || typeof e.gid != "number") throw new TypeError("cannot set owner without number uid and gid");
+            if (e.preserveOwner) throw new TypeError("cannot preserve owner in archive and also set owner explicitly");
+            this.uid = e.uid, this.gid = e.gid, this.setOwner = true;
+          } else this.uid = void 0, this.gid = void 0, this.setOwner = false;
+          e.preserveOwner === void 0 && typeof e.uid != "number" ? this.preserveOwner = !!(process.getuid && process.getuid() === 0) : this.preserveOwner = !!e.preserveOwner, this.processUid = (this.preserveOwner || this.setOwner) && process.getuid ? process.getuid() : void 0, this.processGid = (this.preserveOwner || this.setOwner) && process.getgid ? process.getgid() : void 0, this.maxDepth = typeof e.maxDepth == "number" ? e.maxDepth : il, this.forceChown = e.forceChown === true, this.win32 = !!e.win32 || Ft, this.newer = !!e.newer, this.keep = !!e.keep, this.noMtime = !!e.noMtime, this.preservePaths = !!e.preservePaths, this.unlink = !!e.unlink, this.cwd = (0, U.normalizeWindowsPath)(g.default.resolve(e.cwd || process.cwd())), this.strip = Number(e.strip) || 0, this.processUmask = this.chmod ? typeof e.processUmask == "number" ? e.processUmask : (0, el.umask)() : 0, this.umask = typeof e.umask == "number" ? e.umask : this.processUmask, this.dmode = e.dmode || 511 & ~this.umask, this.fmode = e.fmode || 438 & ~this.umask, this.on("entry", (t) => this[Vn](t));
+        }
+        warn(e, t, i = {}) {
+          return (e === "TAR_BAD_ARCHIVE" || e === "TAR_ABORT") && (i.recoverable = false), super.warn(e, t, i);
+        }
+        [Rr]() {
+          this[gr] && this[qi] === 0 && (this.emit("prefinish"), this.emit("finish"), this.emit("end"));
+        }
+        [Sr](e, t) {
+          let i = e[t], { type: r } = e;
+          if (!i || this.preservePaths) return true;
+          let [n, o] = (0, Qh.stripAbsolutePath)(i), a = o.replace(/\\/g, "/").split("/");
+          if (a.includes("..") || Ft && /^[a-z]:\.\.$/i.test(a[0] ?? "")) {
+            if (t === "path" || r === "Link") return this.warn("TAR_ENTRY_ERROR", `${t} contains '..'`, { entry: e, [t]: i }), false;
+            {
+              let h = g.default.posix.dirname(e.path), l = g.default.posix.normalize(g.default.posix.join(h, a.join("/")));
+              if (l.startsWith("../") || l === "..") return this.warn("TAR_ENTRY_ERROR", `${t} escapes extraction directory`, { entry: e, [t]: i }), false;
+            }
+          }
+          return n && (e[t] = String(o), this.warn("TAR_ENTRY_INFO", `stripping ${n} from absolute ${t}`, { entry: e, [t]: i })), true;
+        }
+        [eo](e) {
+          let t = (0, U.normalizeWindowsPath)(e.path), i = t.split("/");
+          if (this.strip) {
+            if (i.length < this.strip) return false;
+            if (e.type === "Link") {
+              let r = (0, U.normalizeWindowsPath)(String(e.linkpath)).split("/");
+              if (r.length >= this.strip) e.linkpath = r.slice(this.strip).join("/");
+              else return false;
+            }
+            i.splice(0, this.strip), e.path = i.join("/");
+          }
+          if (isFinite(this.maxDepth) && i.length > this.maxDepth) return this.warn("TAR_ENTRY_ERROR", "path excessively deep", { entry: e, path: t, depth: i.length, maxDepth: this.maxDepth }), false;
+          if (!this[Sr](e, "path") || !this[Sr](e, "linkpath")) return false;
+          if (g.default.isAbsolute(e.path) ? e.absolute = (0, U.normalizeWindowsPath)(g.default.resolve(e.path)) : e.absolute = (0, U.normalizeWindowsPath)(g.default.resolve(this.cwd, e.path)), !this.preservePaths && typeof e.absolute == "string" && e.absolute.indexOf(this.cwd + "/") !== 0 && e.absolute !== this.cwd) return this.warn("TAR_ENTRY_ERROR", "path escaped extraction target", { entry: e, path: (0, U.normalizeWindowsPath)(e.path), resolvedPath: e.absolute, cwd: this.cwd }), false;
+          if (e.absolute === this.cwd && e.type !== "Directory" && e.type !== "GNUDumpDir") return false;
+          if (this.win32) {
+            let { root: r } = g.default.win32.parse(String(e.absolute));
+            e.absolute = r + Kn.encode(String(e.absolute).slice(r.length));
+            let { root: n } = g.default.win32.parse(e.path);
+            e.path = n + Kn.encode(e.path.slice(n.length));
+          }
+          return true;
+        }
+        [Vn](e) {
+          if (!this[eo](e)) return e.resume();
+          switch ($h.default.equal(typeof e.absolute, "string"), e.type) {
+            case "Directory":
+            case "GNUDumpDir":
+              e.mode && (e.mode = e.mode | 448);
+            case "File":
+            case "OldFile":
+            case "ContiguousFile":
+            case "Link":
+            case "SymbolicLink":
+              return this[Or](e);
+            default:
+              return this[Jn](e);
+          }
+        }
+        [T](e, t) {
+          e.name === "CwdError" ? this.emit("error", e) : (this.warn("TAR_ENTRY_ERROR", e, { entry: t }), this[ut](), t.resume());
+        }
+        [De](e, t, i) {
+          (0, oo.mkdir)((0, U.normalizeWindowsPath)(e), { uid: this.uid, gid: this.gid, processUid: this.processUid, processGid: this.processGid, umask: this.processUmask, preserve: this.preservePaths, unlink: this.unlink, cwd: this.cwd, mode: t }, i);
+        }
+        [Lt](e) {
+          return this.forceChown || this.preserveOwner && (typeof e.uid == "number" && e.uid !== this.processUid || typeof e.gid == "number" && e.gid !== this.processGid) || typeof this.uid == "number" && this.uid !== this.processUid || typeof this.gid == "number" && this.gid !== this.processGid;
+        }
+        [At](e) {
+          return io(this.uid, e.uid, this.processUid);
+        }
+        [It](e) {
+          return io(this.gid, e.gid, this.processGid);
+        }
+        [Tr](e, t) {
+          let i = typeof e.mode == "number" ? e.mode & 4095 : this.fmode, r = new Vh.WriteStream(String(e.absolute), { flags: (0, no.getWriteFlag)(e.size), mode: i, autoClose: false });
+          r.on("error", (h) => {
+            r.fd && m.default.close(r.fd, () => {
+            }), r.write = () => true, this[T](h, e), t();
+          });
+          let n = 1, o = /* @__PURE__ */ __name((h) => {
+            if (h) {
+              r.fd && m.default.close(r.fd, () => {
+              }), this[T](h, e), t();
+              return;
+            }
+            --n === 0 && r.fd !== void 0 && m.default.close(r.fd, (l) => {
+              l ? this[T](l, e) : this[ut](), t();
+            });
+          }, "o");
+          r.on("finish", () => {
+            let h = String(e.absolute), l = r.fd;
+            if (typeof l == "number" && e.mtime && !this.noMtime) {
+              n++;
+              let u = e.atime || /* @__PURE__ */ new Date(), c = e.mtime;
+              m.default.futimes(l, u, c, (E) => E ? m.default.utimes(h, u, c, (D) => o(D && E)) : o());
+            }
+            if (typeof l == "number" && this[Lt](e)) {
+              n++;
+              let u = this[At](e), c = this[It](e);
+              typeof u == "number" && typeof c == "number" && m.default.fchown(l, u, c, (E) => E ? m.default.chown(h, u, c, (D) => o(D && E)) : o());
+            }
+            o();
+          });
+          let a = this.transform && this.transform(e) || e;
+          a !== e && (a.on("error", (h) => {
+            this[T](h, e), t();
+          }), e.pipe(a)), a.pipe(r);
+        }
+        [Dr](e, t) {
+          let i = typeof e.mode == "number" ? e.mode & 4095 : this.dmode;
+          this[De](String(e.absolute), i, (r) => {
+            if (r) {
+              this[T](r, e), t();
+              return;
+            }
+            let n = 1, o = /* @__PURE__ */ __name(() => {
+              --n === 0 && (t(), this[ut](), e.resume());
+            }, "o");
+            e.mtime && !this.noMtime && (n++, m.default.utimes(String(e.absolute), e.atime || /* @__PURE__ */ new Date(), e.mtime, o)), this[Lt](e) && (n++, m.default.chown(String(e.absolute), Number(this[At](e)), Number(this[It](e)), o)), o();
+          });
+        }
+        [Jn](e) {
+          e.unsupported = true, this.warn("TAR_ENTRY_UNSUPPORTED", `unsupported entry type: ${e.type}`, { entry: e }), e.resume();
+        }
+        [Xn](e, t) {
+          let i = (0, U.normalizeWindowsPath)(g.default.relative(this.cwd, g.default.resolve(g.default.dirname(String(e.absolute)), String(e.linkpath)))).split("/");
+          this[Mt](e, this.cwd, i, () => this[Wi](e, String(e.linkpath), "symlink", t), (r) => {
+            this[T](r, e), t();
+          });
+        }
+        [Qn](e, t) {
+          let i = (0, U.normalizeWindowsPath)(g.default.resolve(this.cwd, String(e.linkpath))), r = (0, U.normalizeWindowsPath)(String(e.linkpath)).split("/");
+          this[Mt](e, this.cwd, r, () => this[Wi](e, i, "link", t), (n) => {
+            this[T](n, e), t();
+          });
+        }
+        [Mt](e, t, i, r, n) {
+          let o = i.shift();
+          if (this.preservePaths || o === void 0) return r();
+          let a = g.default.resolve(t, o);
+          m.default.lstat(a, (h, l) => {
+            if (h) return r();
+            if (l?.isSymbolicLink()) return n(new ao.SymlinkError(a, g.default.resolve(a, i.join("/"))));
+            this[Mt](e, a, i, r, n);
+          });
+        }
+        [to]() {
+          this[qi]++;
+        }
+        [ut]() {
+          this[qi]--, this[Rr]();
+        }
+        [Pr](e) {
+          this[ut](), e.resume();
+        }
+        [vr](e, t) {
+          return e.type === "File" && !this.unlink && t.isFile() && t.nlink <= 1 && !Ft;
+        }
+        [Or](e) {
+          this[to]();
+          let t = [e.path];
+          e.linkpath && t.push(e.linkpath), this.reservations.reserve(t, (i) => this[$n](e, i));
+        }
+        [$n](e, t) {
+          let i = /* @__PURE__ */ __name((a) => {
+            t(a);
+          }, "i"), r = /* @__PURE__ */ __name(() => {
+            this[De](this.cwd, this.dmode, (a) => {
+              if (a) {
+                this[T](a, e), i();
+                return;
+              }
+              this[Ct] = true, n();
+            });
+          }, "r"), n = /* @__PURE__ */ __name(() => {
+            if (e.absolute !== this.cwd) {
+              let a = (0, U.normalizeWindowsPath)(g.default.dirname(String(e.absolute)));
+              if (a !== this.cwd) return this[De](a, this.dmode, (h) => {
+                if (h) {
+                  this[T](h, e), i();
+                  return;
+                }
+                o();
+              });
+            }
+            o();
+          }, "n"), o = /* @__PURE__ */ __name(() => {
+            m.default.lstat(String(e.absolute), (a, h) => {
+              if (h && (this.keep || this.newer && h.mtime > (e.mtime ?? h.mtime))) {
+                this[Pr](e), i();
+                return;
+              }
+              if (a || this[vr](e, h)) return this[Z](null, e, i);
+              if (h.isDirectory()) {
+                if (e.type === "Directory") {
+                  let l = this.chmod && e.mode && (h.mode & 4095) !== e.mode, u = /* @__PURE__ */ __name((c) => this[Z](c ?? null, e, i), "u");
+                  return l ? m.default.chmod(String(e.absolute), Number(e.mode), u) : u();
+                }
+                if (e.absolute !== this.cwd) return m.default.rmdir(String(e.absolute), (l) => this[Z](l ?? null, e, i));
+              }
+              if (e.absolute === this.cwd) return this[Z](null, e, i);
+              sl(String(e.absolute), (l) => this[Z](l ?? null, e, i));
+            });
+          }, "o");
+          this[Ct] ? n() : r();
+        }
+        [Z](e, t, i) {
+          if (e) {
+            this[T](e, t), i();
+            return;
+          }
+          switch (t.type) {
+            case "File":
+            case "OldFile":
+            case "ContiguousFile":
+              return this[Tr](t, i);
+            case "Link":
+              return this[Qn](t, i);
+            case "SymbolicLink":
+              return this[Xn](t, i);
+            case "Directory":
+            case "GNUDumpDir":
+              return this[Dr](t, i);
+          }
+        }
+        [Wi](e, t, i, r) {
+          m.default[i](t, String(e.absolute), (n) => {
+            n ? this[T](n, e) : (this[ut](), e.resume()), r();
+          });
+        }
+      };
+      z.Unpack = Hi;
+      var Nt = /* @__PURE__ */ __name((s) => {
+        try {
+          return [null, s()];
+        } catch (e) {
+          return [e, null];
+        }
+      }, "Nt"), Nr = class extends Hi {
+        static {
+          __name(this, "Nr");
+        }
+        sync = true;
+        [Z](e, t) {
+          return super[Z](e, t, () => {
+          });
+        }
+        [Or](e) {
+          if (!this[Ct]) {
+            let n = this[De](this.cwd, this.dmode);
+            if (n) return this[T](n, e);
+            this[Ct] = true;
+          }
+          if (e.absolute !== this.cwd) {
+            let n = (0, U.normalizeWindowsPath)(g.default.dirname(String(e.absolute)));
+            if (n !== this.cwd) {
+              let o = this[De](n, this.dmode);
+              if (o) return this[T](o, e);
+            }
+          }
+          let [t, i] = Nt(() => m.default.lstatSync(String(e.absolute)));
+          if (i && (this.keep || this.newer && i.mtime > (e.mtime ?? i.mtime))) return this[Pr](e);
+          if (t || this[vr](e, i)) return this[Z](null, e);
+          if (i.isDirectory()) {
+            if (e.type === "Directory") {
+              let o = this.chmod && e.mode && (i.mode & 4095) !== e.mode, [a] = o ? Nt(() => {
+                m.default.chmodSync(String(e.absolute), Number(e.mode));
+              }) : [];
+              return this[Z](a, e);
+            }
+            let [n] = Nt(() => m.default.rmdirSync(String(e.absolute)));
+            this[Z](n, e);
+          }
+          let [r] = e.absolute === this.cwd ? [] : Nt(() => rl(String(e.absolute)));
+          this[Z](r, e);
+        }
+        [Tr](e, t) {
+          let i = typeof e.mode == "number" ? e.mode & 4095 : this.fmode, r = /* @__PURE__ */ __name((a) => {
+            let h;
+            try {
+              m.default.closeSync(n);
+            } catch (l) {
+              h = l;
+            }
+            (a || h) && this[T](a || h, e), t();
+          }, "r"), n;
+          try {
+            n = m.default.openSync(String(e.absolute), (0, no.getWriteFlag)(e.size), i);
+          } catch (a) {
+            return r(a);
+          }
+          let o = this.transform && this.transform(e) || e;
+          o !== e && (o.on("error", (a) => this[T](a, e)), e.pipe(o)), o.on("data", (a) => {
+            try {
+              m.default.writeSync(n, a, 0, a.length);
+            } catch (h) {
+              r(h);
+            }
+          }), o.on("end", () => {
+            let a = null;
+            if (e.mtime && !this.noMtime) {
+              let h = e.atime || /* @__PURE__ */ new Date(), l = e.mtime;
+              try {
+                m.default.futimesSync(n, h, l);
+              } catch (u) {
+                try {
+                  m.default.utimesSync(String(e.absolute), h, l);
+                } catch {
+                  a = u;
+                }
+              }
+            }
+            if (this[Lt](e)) {
+              let h = this[At](e), l = this[It](e);
+              try {
+                m.default.fchownSync(n, Number(h), Number(l));
+              } catch (u) {
+                try {
+                  m.default.chownSync(String(e.absolute), Number(h), Number(l));
+                } catch {
+                  a = a || u;
+                }
+              }
+            }
+            r(a);
+          });
+        }
+        [Dr](e, t) {
+          let i = typeof e.mode == "number" ? e.mode & 4095 : this.dmode, r = this[De](String(e.absolute), i);
+          if (r) {
+            this[T](r, e), t();
+            return;
+          }
+          if (e.mtime && !this.noMtime) try {
+            m.default.utimesSync(String(e.absolute), e.atime || /* @__PURE__ */ new Date(), e.mtime);
+          } catch {
+          }
+          if (this[Lt](e)) try {
+            m.default.chownSync(String(e.absolute), Number(this[At](e)), Number(this[It](e)));
+          } catch {
+          }
+          t(), e.resume();
+        }
+        [De](e, t) {
+          try {
+            return (0, oo.mkdirSync)((0, U.normalizeWindowsPath)(e), { uid: this.uid, gid: this.gid, processUid: this.processUid, processGid: this.processGid, umask: this.processUmask, preserve: this.preservePaths, unlink: this.unlink, cwd: this.cwd, mode: t });
+          } catch (i) {
+            return i;
+          }
+        }
+        [Mt](e, t, i, r, n) {
+          if (this.preservePaths || !i.length) return r();
+          let o = t;
+          for (let a of i) {
+            o = g.default.resolve(o, a);
+            let [h, l] = Nt(() => m.default.lstatSync(o));
+            if (h) return r();
+            if (l.isSymbolicLink()) return n(new ao.SymlinkError(o, g.default.resolve(t, i.join("/"))));
+          }
+          r();
+        }
+        [Wi](e, t, i, r) {
+          let n = `${i}Sync`;
+          try {
+            m.default[n](t, String(e.absolute)), r(), e.resume();
+          } catch (o) {
+            return this[T](o, e);
+          }
+        }
+      };
+      z.UnpackSync = Nr;
+    });
+    var Ar = d((G) => {
+      "use strict";
+      var nl = G && G.__createBinding || (Object.create ? (function(s, e, t, i) {
+        i === void 0 && (i = t);
+        var r = Object.getOwnPropertyDescriptor(e, t);
+        (!r || ("get" in r ? !e.__esModule : r.writable || r.configurable)) && (r = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return e[t];
+        }, "get") }), Object.defineProperty(s, i, r);
+      }) : (function(s, e, t, i) {
+        i === void 0 && (i = t), s[i] = e[t];
+      })), ol = G && G.__setModuleDefault || (Object.create ? (function(s, e) {
+        Object.defineProperty(s, "default", { enumerable: true, value: e });
+      }) : function(s, e) {
+        s.default = e;
+      }), al = G && G.__importStar || /* @__PURE__ */ (function() {
+        var s = /* @__PURE__ */ __name(function(e) {
+          return s = Object.getOwnPropertyNames || function(t) {
+            var i = [];
+            for (var r in t) Object.prototype.hasOwnProperty.call(t, r) && (i[i.length] = r);
+            return i;
+          }, s(e);
+        }, "s");
+        return function(e) {
+          if (e && e.__esModule) return e;
+          var t = {};
+          if (e != null) for (var i = s(e), r = 0; r < i.length; r++) i[r] !== "default" && nl(t, e, i[r]);
+          return ol(t, e), t;
+        };
+      })(), hl = G && G.__importDefault || function(s) {
+        return s && s.__esModule ? s : { default: s };
+      };
+      Object.defineProperty(G, "__esModule", { value: true });
+      G.extract = void 0;
+      var ho = al(Ke()), lo = hl(require("node:fs")), ll = st(), ul = Ve(), Zi = Lr(), cl = /* @__PURE__ */ __name((s) => {
+        let e = new Zi.UnpackSync(s), t = s.file, i = lo.default.statSync(t), r = s.maxReadSize || 16 * 1024 * 1024;
+        new ho.ReadStreamSync(t, { readSize: r, size: i.size }).pipe(e);
+      }, "cl"), fl = /* @__PURE__ */ __name((s, e) => {
+        let t = new Zi.Unpack(s), i = s.maxReadSize || 16 * 1024 * 1024, r = s.file;
+        return new Promise((o, a) => {
+          t.on("error", a), t.on("close", o), lo.default.stat(r, (h, l) => {
+            if (h) a(h);
+            else {
+              let u = new ho.ReadStream(r, { readSize: i, size: l.size });
+              u.on("error", a), u.pipe(t);
+            }
+          });
+        });
+      }, "fl");
+      G.extract = (0, ul.makeCommand)(cl, fl, (s) => new Zi.UnpackSync(s), (s) => new Zi.Unpack(s), (s, e) => {
+        e?.length && (0, ll.filesFilter)(s, e);
+      });
+    });
+    var Gi = d((ct) => {
+      "use strict";
+      var uo = ct && ct.__importDefault || function(s) {
+        return s && s.__esModule ? s : { default: s };
+      };
+      Object.defineProperty(ct, "__esModule", { value: true });
+      ct.replace = void 0;
+      var co = Ke(), q = uo(require("node:fs")), fo = uo(require("node:path")), mo = Je(), po = st(), dl = Ve(), ml = Vt(), _o = Ai(), pl = /* @__PURE__ */ __name((s, e) => {
+        let t = new _o.PackSync(s), i = true, r, n;
+        try {
+          try {
+            r = q.default.openSync(s.file, "r+");
+          } catch (h) {
+            if (h?.code === "ENOENT") r = q.default.openSync(s.file, "w+");
+            else throw h;
+          }
+          let o = q.default.fstatSync(r), a = Buffer.alloc(512);
+          e: for (n = 0; n < o.size; n += 512) {
+            for (let u = 0, c = 0; u < 512; u += c) {
+              if (c = q.default.readSync(r, a, u, a.length - u, n + u), n === 0 && a[0] === 31 && a[1] === 139) throw new Error("cannot append to compressed archives");
+              if (!c) break e;
+            }
+            let h = new mo.Header(a);
+            if (!h.cksumValid) break;
+            let l = 512 * Math.ceil((h.size || 0) / 512);
+            if (n + l + 512 > o.size) break;
+            n += l, s.mtimeCache && h.mtime && s.mtimeCache.set(String(h.path), h.mtime);
+          }
+          i = false, _l(s, t, n, r, e);
+        } finally {
+          if (i) try {
+            q.default.closeSync(r);
+          } catch {
+          }
+        }
+      }, "pl"), _l = /* @__PURE__ */ __name((s, e, t, i, r) => {
+        let n = new co.WriteStreamSync(s.file, { fd: i, start: t });
+        e.pipe(n), yl(e, r);
+      }, "_l"), wl = /* @__PURE__ */ __name((s, e) => {
+        e = Array.from(e);
+        let t = new _o.Pack(s), i = /* @__PURE__ */ __name((n, o, a) => {
+          let h = /* @__PURE__ */ __name((D, A) => {
+            D ? q.default.close(n, (w) => a(D)) : a(null, A);
+          }, "h"), l = 0;
+          if (o === 0) return h(null, 0);
+          let u = 0, c = Buffer.alloc(512), E = /* @__PURE__ */ __name((D, A) => {
+            if (D || typeof A > "u") return h(D);
+            if (u += A, u < 512 && A) return q.default.read(n, c, u, c.length - u, l + u, E);
+            if (l === 0 && c[0] === 31 && c[1] === 139) return h(new Error("cannot append to compressed archives"));
+            if (u < 512) return h(null, l);
+            let w = new mo.Header(c);
+            if (!w.cksumValid) return h(null, l);
+            let P = 512 * Math.ceil((w.size ?? 0) / 512);
+            if (l + P + 512 > o || (l += P + 512, l >= o)) return h(null, l);
+            s.mtimeCache && w.mtime && s.mtimeCache.set(String(w.path), w.mtime), u = 0, q.default.read(n, c, 0, 512, l, E);
+          }, "E");
+          q.default.read(n, c, 0, 512, l, E);
+        }, "i");
+        return new Promise((n, o) => {
+          t.on("error", o);
+          let a = "r+", h = /* @__PURE__ */ __name((l, u) => {
+            if (l && l.code === "ENOENT" && a === "r+") return a = "w+", q.default.open(s.file, a, h);
+            if (l || !u) return o(l);
+            q.default.fstat(u, (c, E) => {
+              if (c) return q.default.close(u, () => o(c));
+              i(u, E.size, (D, A) => {
+                if (D) return o(D);
+                let w = new co.WriteStream(s.file, { fd: u, start: A });
+                t.pipe(w), w.on("error", o), w.on("close", n), El(t, e);
+              });
+            });
+          }, "h");
+          q.default.open(s.file, a, h);
+        });
+      }, "wl"), yl = /* @__PURE__ */ __name((s, e) => {
+        e.forEach((t) => {
+          t.charAt(0) === "@" ? (0, po.list)({ file: fo.default.resolve(s.cwd, t.slice(1)), sync: true, noResume: true, onReadEntry: /* @__PURE__ */ __name((i) => s.add(i), "onReadEntry") }) : s.add(t);
+        }), s.end();
+      }, "yl"), El = /* @__PURE__ */ __name(async (s, e) => {
+        for (let t = 0; t < e.length; t++) {
+          let i = String(e[t]);
+          i.charAt(0) === "@" ? await (0, po.list)({ file: fo.default.resolve(String(s.cwd), i.slice(1)), noResume: true, onReadEntry: /* @__PURE__ */ __name((r) => s.add(r), "onReadEntry") }) : s.add(i);
+        }
+        s.end();
+      }, "El");
+      ct.replace = (0, dl.makeCommand)(pl, wl, () => {
+        throw new TypeError("file is required");
+      }, () => {
+        throw new TypeError("file is required");
+      }, (s, e) => {
+        if (!(0, ml.isFile)(s)) throw new TypeError("file is required");
+        if (s.gzip || s.brotli || s.zstd || s.file.endsWith(".br") || s.file.endsWith(".tbr")) throw new TypeError("cannot append to compressed archives");
+        if (!e?.length) throw new TypeError("no paths specified to add/replace");
+      });
+    });
+    var Ir = d((Yi) => {
+      "use strict";
+      Object.defineProperty(Yi, "__esModule", { value: true });
+      Yi.update = void 0;
+      var bl = Ve(), Bt = Gi();
+      Yi.update = (0, bl.makeCommand)(Bt.replace.syncFile, Bt.replace.asyncFile, Bt.replace.syncNoFile, Bt.replace.asyncNoFile, (s, e = []) => {
+        Bt.replace.validate?.(s, e), Sl(s);
+      });
+      var Sl = /* @__PURE__ */ __name((s) => {
+        let e = s.filter;
+        s.mtimeCache || (s.mtimeCache = /* @__PURE__ */ new Map()), s.filter = e ? (t, i) => e(t, i) && !((s.mtimeCache?.get(t) ?? i.mtime ?? 0) > (i.mtime ?? 0)) : (t, i) => !((s.mtimeCache?.get(t) ?? i.mtime ?? 0) > (i.mtime ?? 0));
+      }, "Sl");
+    });
+    var wo = exports2 && exports2.__createBinding || (Object.create ? (function(s, e, t, i) {
+      i === void 0 && (i = t);
+      var r = Object.getOwnPropertyDescriptor(e, t);
+      (!r || ("get" in r ? !e.__esModule : r.writable || r.configurable)) && (r = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+        return e[t];
+      }, "get") }), Object.defineProperty(s, i, r);
+    }) : (function(s, e, t, i) {
+      i === void 0 && (i = t), s[i] = e[t];
+    }));
+    var gl = exports2 && exports2.__setModuleDefault || (Object.create ? (function(s, e) {
+      Object.defineProperty(s, "default", { enumerable: true, value: e });
+    }) : function(s, e) {
+      s.default = e;
+    });
+    var Y = exports2 && exports2.__exportStar || function(s, e) {
+      for (var t in s) t !== "default" && !Object.prototype.hasOwnProperty.call(e, t) && wo(e, s, t);
+    };
+    var Rl = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
+      var s = /* @__PURE__ */ __name(function(e) {
+        return s = Object.getOwnPropertyNames || function(t) {
+          var i = [];
+          for (var r in t) Object.prototype.hasOwnProperty.call(t, r) && (i[i.length] = r);
+          return i;
+        }, s(e);
+      }, "s");
+      return function(e) {
+        if (e && e.__esModule) return e;
+        var t = {};
+        if (e != null) for (var i = s(e), r = 0; r < i.length; r++) i[r] !== "default" && wo(t, e, i[r]);
+        return gl(t, e), t;
+      };
+    })();
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.u = exports2.types = exports2.r = exports2.t = exports2.x = exports2.c = void 0;
+    Y(fr(), exports2);
+    var Ol = fr();
+    Object.defineProperty(exports2, "c", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return Ol.create;
+    }, "get") });
+    Y(Ar(), exports2);
+    var vl = Ar();
+    Object.defineProperty(exports2, "x", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return vl.extract;
+    }, "get") });
+    Y(Je(), exports2);
+    Y(st(), exports2);
+    var Tl = st();
+    Object.defineProperty(exports2, "t", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return Tl.list;
+    }, "get") });
+    Y(Ai(), exports2);
+    Y(mi(), exports2);
+    Y(ei(), exports2);
+    Y(ri(), exports2);
+    Y(Gi(), exports2);
+    var Dl = Gi();
+    Object.defineProperty(exports2, "r", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return Dl.replace;
+    }, "get") });
+    exports2.types = Rl(Ts());
+    Y(Lr(), exports2);
+    Y(Ir(), exports2);
+    var Pl = Ir();
+    Object.defineProperty(exports2, "u", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return Pl.update;
+    }, "get") });
+    Y(er(), exports2);
+  }
+});
+
+// node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/util/protected.js
+var require_protected = __commonJS({
+  "node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/util/protected.js"(exports2, module2) {
+    module2.exports = {
+      cacheFetches: Symbol.for("pacote.Fetcher._cacheFetches"),
+      readPackageJson: Symbol.for("package.Fetcher._readPackageJson"),
+      tarballFromResolved: Symbol.for("pacote.Fetcher._tarballFromResolved")
+    };
+  }
+});
+
+// node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/util/cache-dir.js
+var require_cache_dir = __commonJS({
+  "node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/util/cache-dir.js"(exports2, module2) {
+    var { resolve } = require("node:path");
+    var { tmpdir, homedir } = require("node:os");
+    module2.exports = (fakePlatform = false) => {
+      const temp = tmpdir();
+      const uidOrPid = process.getuid ? process.getuid() : process.pid;
+      const home = homedir() || resolve(temp, "npm-" + uidOrPid);
+      const platform = fakePlatform || process.platform;
+      const cacheExtra = platform === "win32" ? "npm-cache" : ".npm";
+      const cacheRoot = platform === "win32" && process.env.LOCALAPPDATA || home;
+      return {
+        cacache: resolve(cacheRoot, cacheExtra, "_cacache"),
+        tufcache: resolve(cacheRoot, cacheExtra, "_tuf")
+      };
+    };
+  }
+});
+
+// node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/util/is-package-bin.js
+var require_is_package_bin = __commonJS({
+  "node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/util/is-package-bin.js"(exports2, module2) {
+    var binObj = /* @__PURE__ */ __name((name, bin) => typeof bin === "string" ? { [name]: bin } : bin, "binObj");
+    var hasBin = /* @__PURE__ */ __name((pkg, path) => {
+      const bin = binObj(pkg.name, pkg.bin);
+      const p = path.replace(/^[^\\/]*\//, "");
+      for (const kv of Object.entries(bin)) {
+        if (kv[1] === p) {
+          return true;
+        }
+      }
+      return false;
+    }, "hasBin");
+    module2.exports = (pkg, path) => pkg && pkg.bin ? hasBin(pkg, path) : false;
+  }
+});
+
+// node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/util/trailing-slashes.js
+var require_trailing_slashes = __commonJS({
+  "node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/util/trailing-slashes.js"(exports2, module2) {
+    var removeTrailingSlashes = /* @__PURE__ */ __name((input) => {
+      let output = input;
+      while (output.endsWith("/")) {
+        output = output.slice(0, -1);
+      }
+      return output;
+    }, "removeTrailingSlashes");
+    module2.exports = removeTrailingSlashes;
+  }
+});
+
+// node_modules/.pnpm/ignore-walk@8.0.0/node_modules/ignore-walk/lib/index.js
+var require_lib21 = __commonJS({
+  "node_modules/.pnpm/ignore-walk@8.0.0/node_modules/ignore-walk/lib/index.js"(exports2, module2) {
+    "use strict";
+    var fs = require("fs");
+    var path = require("path");
+    var EE = require("events").EventEmitter;
+    var Minimatch = require_commonjs4().Minimatch;
+    var Walker = class _Walker extends EE {
+      static {
+        __name(this, "Walker");
+      }
+      constructor(opts) {
+        opts = opts || {};
+        super(opts);
+        this.isSymbolicLink = opts.isSymbolicLink;
+        this.path = opts.path || process.cwd();
+        this.basename = path.basename(this.path);
+        this.ignoreFiles = opts.ignoreFiles || [".ignore"];
+        this.ignoreRules = {};
+        this.parent = opts.parent || null;
+        this.includeEmpty = !!opts.includeEmpty;
+        this.root = this.parent ? this.parent.root : this.path;
+        this.follow = !!opts.follow;
+        this.result = this.parent ? this.parent.result : /* @__PURE__ */ new Set();
+        this.entries = null;
+        this.sawError = false;
+        this.exact = opts.exact;
+      }
+      sort(a, b) {
+        return a.localeCompare(b, "en");
+      }
+      emit(ev, data) {
+        let ret = false;
+        if (!(this.sawError && ev === "error")) {
+          if (ev === "error") {
+            this.sawError = true;
+          } else if (ev === "done" && !this.parent) {
+            data = Array.from(data).map((e) => /^@/.test(e) ? `./${e}` : e).sort(this.sort);
+            this.result = data;
+          }
+          if (ev === "error" && this.parent) {
+            ret = this.parent.emit("error", data);
+          } else {
+            ret = super.emit(ev, data);
+          }
+        }
+        return ret;
+      }
+      start() {
+        fs.readdir(this.path, (er, entries) => er ? this.emit("error", er) : this.onReaddir(entries));
+        return this;
+      }
+      isIgnoreFile(e) {
+        return e !== "." && e !== ".." && this.ignoreFiles.indexOf(e) !== -1;
+      }
+      onReaddir(entries) {
+        this.entries = entries;
+        if (entries.length === 0) {
+          if (this.includeEmpty) {
+            this.result.add(this.path.slice(this.root.length + 1));
+          }
+          this.emit("done", this.result);
+        } else {
+          const hasIg = this.entries.some((e) => this.isIgnoreFile(e));
+          if (hasIg) {
+            this.addIgnoreFiles();
+          } else {
+            this.filterEntries();
+          }
+        }
+      }
+      addIgnoreFiles() {
+        const newIg = this.entries.filter((e) => this.isIgnoreFile(e));
+        let igCount = newIg.length;
+        const then = /* @__PURE__ */ __name(() => {
+          if (--igCount === 0) {
+            this.filterEntries();
+          }
+        }, "then");
+        newIg.forEach((e) => this.addIgnoreFile(e, then));
+      }
+      addIgnoreFile(file, then) {
+        const ig = path.resolve(this.path, file);
+        fs.readFile(ig, "utf8", (er, data) => er ? this.emit("error", er) : this.onReadIgnoreFile(file, data, then));
+      }
+      onReadIgnoreFile(file, data, then) {
+        const mmopt = {
+          matchBase: true,
+          dot: true,
+          flipNegate: true,
+          nocase: true
+        };
+        const rules = data.split(/\r?\n/).filter((line) => !/^#|^$/.test(line.trim())).map((rule) => {
+          return new Minimatch(rule.trim(), mmopt);
+        });
+        this.ignoreRules[file] = rules;
+        then();
+      }
+      filterEntries() {
+        const filtered = this.entries.map((entry) => {
+          const passFile = this.filterEntry(entry);
+          const passDir = this.filterEntry(entry, true);
+          return passFile || passDir ? [entry, passFile, passDir] : false;
+        }).filter((e) => e);
+        let entryCount = filtered.length;
+        if (entryCount === 0) {
+          this.emit("done", this.result);
+        } else {
+          const then = /* @__PURE__ */ __name(() => {
+            if (--entryCount === 0) {
+              this.emit("done", this.result);
+            }
+          }, "then");
+          filtered.forEach((filt) => {
+            const entry = filt[0];
+            const file = filt[1];
+            const dir = filt[2];
+            this.stat({ entry, file, dir }, then);
+          });
+        }
+      }
+      onstat({ st, entry, file, dir, isSymbolicLink }, then) {
+        const abs = this.path + "/" + entry;
+        if (!st.isDirectory()) {
+          if (file) {
+            this.result.add(abs.slice(this.root.length + 1));
+          }
+          then();
+        } else {
+          if (dir) {
+            this.walker(entry, { isSymbolicLink, exact: file || this.filterEntry(entry + "/") }, then);
+          } else {
+            then();
+          }
+        }
+      }
+      stat({ entry, file, dir }, then) {
+        const abs = this.path + "/" + entry;
+        fs.lstat(abs, (lstatErr, lstatResult) => {
+          if (lstatErr) {
+            this.emit("error", lstatErr);
+          } else {
+            const isSymbolicLink = lstatResult.isSymbolicLink();
+            if (this.follow && isSymbolicLink) {
+              fs.stat(abs, (statErr, statResult) => {
+                if (statErr) {
+                  this.emit("error", statErr);
+                } else {
+                  this.onstat({ st: statResult, entry, file, dir, isSymbolicLink }, then);
+                }
+              });
+            } else {
+              this.onstat({ st: lstatResult, entry, file, dir, isSymbolicLink }, then);
+            }
+          }
+        });
+      }
+      walkerOpt(entry, opts) {
+        return {
+          path: this.path + "/" + entry,
+          parent: this,
+          ignoreFiles: this.ignoreFiles,
+          follow: this.follow,
+          includeEmpty: this.includeEmpty,
+          ...opts
+        };
+      }
+      walker(entry, opts, then) {
+        new _Walker(this.walkerOpt(entry, opts)).on("done", then).start();
+      }
+      filterEntry(entry, partial, entryBasename) {
+        let included = true;
+        if (this.parent && this.parent.filterEntry) {
+          const parentEntry = this.basename + "/" + entry;
+          const parentBasename = entryBasename || entry;
+          included = this.parent.filterEntry(parentEntry, partial, parentBasename);
+          if (!included && !this.exact) {
+            return false;
+          }
+        }
+        this.ignoreFiles.forEach((f) => {
+          if (this.ignoreRules[f]) {
+            this.ignoreRules[f].forEach((rule) => {
+              if (rule.negate !== included) {
+                const isRelativeRule = entryBasename && rule.globParts.some(
+                  (part) => part.length <= (part.slice(-1)[0] ? 1 : 2)
+                );
+                const match = rule.match("/" + entry) || rule.match(entry) || !!partial && (rule.match("/" + entry + "/") || rule.match(entry + "/") || rule.negate && (rule.match("/" + entry, true) || rule.match(entry, true)) || isRelativeRule && (rule.match("/" + entryBasename + "/") || rule.match(entryBasename + "/") || rule.negate && (rule.match("/" + entryBasename, true) || rule.match(entryBasename, true))));
+                if (match) {
+                  included = rule.negate;
+                }
+              }
+            });
+          }
+        });
+        return included;
+      }
+    };
+    var WalkerSync = class _WalkerSync extends Walker {
+      static {
+        __name(this, "WalkerSync");
+      }
+      start() {
+        this.onReaddir(fs.readdirSync(this.path));
+        return this;
+      }
+      addIgnoreFile(file, then) {
+        const ig = path.resolve(this.path, file);
+        this.onReadIgnoreFile(file, fs.readFileSync(ig, "utf8"), then);
+      }
+      stat({ entry, file, dir }, then) {
+        const abs = this.path + "/" + entry;
+        let st = fs.lstatSync(abs);
+        const isSymbolicLink = st.isSymbolicLink();
+        if (this.follow && isSymbolicLink) {
+          st = fs.statSync(abs);
+        }
+        this.onstat({ st, entry, file, dir, isSymbolicLink }, then);
+      }
+      walker(entry, opts, then) {
+        new _WalkerSync(this.walkerOpt(entry, opts)).start();
+        then();
+      }
+    };
+    var walk = /* @__PURE__ */ __name((opts, callback) => {
+      const p = new Promise((resolve, reject) => {
+        new Walker(opts).on("done", resolve).on("error", reject).start();
+      });
+      return callback ? p.then((res) => callback(null, res), callback) : p;
+    }, "walk");
+    var walkSync = /* @__PURE__ */ __name((opts) => new WalkerSync(opts).start().result, "walkSync");
+    module2.exports = walk;
+    walk.sync = walkSync;
+    walk.Walker = Walker;
+    walk.WalkerSync = WalkerSync;
+  }
+});
+
+// node_modules/.pnpm/npm-packlist@10.0.4/node_modules/npm-packlist/lib/index.js
+var require_lib22 = __commonJS({
+  "node_modules/.pnpm/npm-packlist@10.0.4/node_modules/npm-packlist/lib/index.js"(exports2, module2) {
+    "use strict";
+    var { Walker: IgnoreWalker } = require_lib21();
+    var { lstatSync: lstat, readFileSync: readFile } = require("fs");
+    var { basename, dirname, extname, join, relative, resolve, sep } = require("path");
+    var { log } = require_lib2();
+    var defaultRules = Symbol("npm-packlist.rules.default");
+    var strictRules = Symbol("npm-packlist.rules.strict");
+    var nameIsBadForWindows = /* @__PURE__ */ __name((file) => /\*/.test(file), "nameIsBadForWindows");
+    var defaults = [
+      ".npmignore",
+      ".gitignore",
+      "**/.git",
+      "**/.svn",
+      "**/.hg",
+      "**/CVS",
+      "**/.git/**",
+      "**/.svn/**",
+      "**/.hg/**",
+      "**/CVS/**",
+      "/.lock-wscript",
+      "/.wafpickle-*",
+      "/build/config.gypi",
+      "npm-debug.log",
+      "**/.npmrc",
+      ".*.swp",
+      ".DS_Store",
+      "**/.DS_Store/**",
+      "._*",
+      "**/._*/**",
+      "*.orig",
+      "/archived-packages/**"
+    ];
+    var strictDefaults = [
+      // these are forcibly excluded
+      "/.git"
+    ];
+    var normalizePath = /* @__PURE__ */ __name((path) => path.split("\\").join("/"), "normalizePath");
+    var readOutOfTreeIgnoreFiles = /* @__PURE__ */ __name((root, rel, result = []) => {
+      for (const file of [".npmignore", ".gitignore"]) {
+        try {
+          const ignoreContent = readFile(join(root, file), { encoding: "utf8" });
+          result.push(ignoreContent);
+          break;
+        } catch (err) {
+          if (err.code !== "ENOENT") {
+            throw err;
+          }
+        }
+      }
+      if (!rel) {
+        return result;
+      }
+      const firstRel = rel.split(sep, 1)[0];
+      const newRoot = join(root, firstRel);
+      const newRel = relative(newRoot, join(root, rel));
+      return readOutOfTreeIgnoreFiles(newRoot, newRel, result);
+    }, "readOutOfTreeIgnoreFiles");
+    var PackWalker = class _PackWalker extends IgnoreWalker {
+      static {
+        __name(this, "PackWalker");
+      }
+      constructor(tree, opts) {
+        const options = {
+          ...opts,
+          includeEmpty: false,
+          follow: false,
+          // we path.resolve() here because ignore-walk doesn't do it and we want full paths
+          path: resolve(opts?.path || tree.path).replace(/\\/g, "/"),
+          ignoreFiles: opts?.ignoreFiles || [
+            defaultRules,
+            "package.json",
+            ".npmignore",
+            ".gitignore",
+            strictRules
+          ]
+        };
+        super(options);
+        this.isPackage = options.isPackage;
+        this.seen = options.seen || /* @__PURE__ */ new Set();
+        this.tree = tree;
+        this.requiredFiles = options.requiredFiles || [];
+        const additionalDefaults = [];
+        if (options.prefix && options.workspaces) {
+          const path = normalizePath(options.path);
+          const prefix = normalizePath(options.prefix);
+          const workspaces = options.workspaces.map((ws) => normalizePath(ws));
+          if (path !== prefix && workspaces.includes(path)) {
+            const relpath = relative(options.prefix, dirname(options.path));
+            additionalDefaults.push(...readOutOfTreeIgnoreFiles(options.prefix, relpath));
+          } else if (path === prefix) {
+            additionalDefaults.push(...workspaces.map((w) => normalizePath(relative(options.path, w))));
+          }
+        }
+        this.injectRules(defaultRules, [...defaults, ...additionalDefaults]);
+        if (!this.isPackage) {
+          this.injectRules(strictRules, [
+            ...strictDefaults,
+            ...this.requiredFiles.map((file) => `!${file}`)
+          ]);
+        }
+      }
+      // overridden method: we intercept the reading of the package.json file here so that we can
+      // process it into both the package.json file rules as well as the strictRules synthetic rule set
+      addIgnoreFile(file, callback) {
+        if (file !== "package.json" || !this.isPackage) {
+          return super.addIgnoreFile(file, callback);
+        }
+        return this.processPackage(callback);
+      }
+      // overridden method: if we're done, but we're a package, then we also need to evaluate bundles
+      // before we actually emit our done event
+      emit(ev, data) {
+        if (ev !== "done" || !this.isPackage) {
+          return super.emit(ev, data);
+        }
+        this.gatherBundles().then(() => {
+          super.emit("done", this.result);
+        });
+        return true;
+      }
+      // overridden method: before actually filtering, we make sure that we've removed the rules for
+      // files that should no longer take effect due to our order of precedence
+      filterEntries() {
+        if (this.ignoreRules["package.json"]) {
+          this.ignoreRules[".npmignore"] = null;
+          this.ignoreRules[".gitignore"] = null;
+        } else if (this.ignoreRules[".npmignore"]) {
+          this.ignoreRules[".gitignore"] = null;
+        } else if (this.ignoreRules[".gitignore"] && !this.ignoreRules[".npmignore"] && !this.parent) {
+          log.warn(
+            "gitignore-fallback",
+            "No .npmignore file found, using .gitignore for file exclusion. Consider creating a .npmignore file to explicitly control published files."
+          );
+        }
+        return super.filterEntries();
+      }
+      // overridden method: we never want to include anything that isn't a file or directory
+      onstat(opts, callback) {
+        if (!opts.st.isFile() && !opts.st.isDirectory()) {
+          return callback();
+        }
+        return super.onstat(opts, callback);
+      }
+      // overridden method: we want to refuse to pack files that are invalid, node-tar protects us from
+      // a lot of them but not all
+      stat(opts, callback) {
+        if (nameIsBadForWindows(opts.entry)) {
+          return callback();
+        }
+        return super.stat(opts, callback);
+      }
+      // overridden method: this is called to create options for a child walker when we step
+      // in to a normal child directory (this will never be a bundle). the default method here
+      // copies the root's `ignoreFiles` value, but we don't want to respect package.json for
+      // subdirectories, so we override it with a list that intentionally omits package.json
+      walkerOpt(entry, opts) {
+        let ignoreFiles = null;
+        if (this.tree.workspaces) {
+          const workspaceDirs = [...this.tree.workspaces.values()].map((dir) => dir.replace(/\\/g, "/"));
+          const entryPath = join(this.path, entry).replace(/\\/g, "/");
+          if (workspaceDirs.includes(entryPath)) {
+            ignoreFiles = [
+              defaultRules,
+              "package.json",
+              ".npmignore",
+              ".gitignore",
+              strictRules
+            ];
+          }
+        } else {
+          ignoreFiles = [
+            defaultRules,
+            ".npmignore",
+            ".gitignore",
+            strictRules
+          ];
+        }
+        return {
+          ...super.walkerOpt(entry, opts),
+          ignoreFiles,
+          // we map over our own requiredFiles and pass ones that are within this entry
+          requiredFiles: this.requiredFiles.map((file) => {
+            if (relative(file, entry) === "..") {
+              return relative(entry, file).replace(/\\/g, "/");
+            }
+            return false;
+          }).filter(Boolean)
+        };
+      }
+      // overridden method: we want child walkers to be instances of this class, not ignore-walk
+      walker(entry, opts, callback) {
+        new _PackWalker(this.tree, this.walkerOpt(entry, opts)).on("done", callback).start();
+      }
+      // overridden method: we use a custom sort method to help compressibility
+      sort(a, b) {
+        const exta = extname(a).toLowerCase();
+        const extb = extname(b).toLowerCase();
+        const basea = basename(a).toLowerCase();
+        const baseb = basename(b).toLowerCase();
+        return exta.localeCompare(extb, "en") || basea.localeCompare(baseb, "en") || a.localeCompare(b, "en");
+      }
+      // convenience method: this joins the given rules with newlines, appends a trailing newline,
+      // and calls the internal onReadIgnoreFile method
+      injectRules(filename, rules, callback = () => {
+      }) {
+        this.onReadIgnoreFile(filename, `${rules.join("\n")}
+`, callback);
+      }
+      // custom method: this is called by addIgnoreFile when we find a package.json, it uses the
+      // arborist tree to pull both default rules and strict rules for the package
+      processPackage(callback) {
+        const {
+          bin,
+          browser,
+          files,
+          main
+        } = this.tree.package;
+        const ignores = [];
+        const strict = [
+          ...strictDefaults,
+          "!/package.json",
+          "!/readme{,.*[^~$]}",
+          "!/copying{,.*[^~$]}",
+          "!/license{,.*[^~$]}",
+          "!/licence{,.*[^~$]}",
+          "/.git",
+          "/node_modules",
+          ".npmrc",
+          "/package-lock.json",
+          "/yarn.lock",
+          "/pnpm-lock.yaml",
+          "/bun.lockb"
+        ];
+        if (files) {
+          for (let file of files) {
+            if (file.startsWith("./")) {
+              file = file.slice(1);
+            }
+            if (file.endsWith("/*")) {
+              file += "*";
+            }
+            const inverse = `!${file}`;
+            try {
+              const stat = lstat(join(this.path, file.replace(/^!+/, "")).replace(/\\/g, "/"));
+              if (stat.isFile()) {
+                strict.unshift(inverse);
+                this.requiredFiles.push(file.startsWith("/") ? file.slice(1) : file);
+              } else if (stat.isDirectory()) {
+                ignores.push(inverse);
+                ignores.push(`${inverse}/**`);
+              }
+            } catch (err) {
+              ignores.push(inverse);
+            }
+          }
+          this.injectRules("package.json", ["*", ...ignores]);
+        }
+        if (browser) {
+          strict.push(`!/${browser}`);
+        }
+        if (main) {
+          strict.push(`!/${main}`);
+        }
+        if (bin) {
+          for (const key in bin) {
+            strict.push(`!/${bin[key]}`);
+          }
+        }
+        this.injectRules(strictRules, strict, callback);
+      }
+      // custom method: after we've finished gathering the files for the root package, we call this
+      // before emitting the 'done' event in order to gather all of the files for bundled deps
+      async gatherBundles() {
+        if (this.seen.has(this.tree)) {
+          return;
+        }
+        this.seen.add(this.tree);
+        let toBundle;
+        if (this.tree.isProjectRoot) {
+          const { bundleDependencies } = this.tree.package;
+          toBundle = bundleDependencies || [];
+        } else {
+          const { dependencies, optionalDependencies } = this.tree.package;
+          toBundle = Object.keys(dependencies || {}).concat(Object.keys(optionalDependencies || {}));
+        }
+        for (const dep of toBundle) {
+          const edge = this.tree.edgesOut.get(dep);
+          if (!edge || edge.peer || edge.dev) {
+            continue;
+          }
+          const node = this.tree.edgesOut.get(dep).to;
+          if (!node) {
+            continue;
+          }
+          const path = node.path;
+          const tree = node.target;
+          const walkerOpts = {
+            path,
+            isPackage: true,
+            ignoreFiles: [],
+            seen: this.seen
+            // pass through seen so we can prevent infinite circular loops
+          };
+          if (node.isLink) {
+            walkerOpts.ignoreFiles.push(defaultRules);
+          }
+          walkerOpts.ignoreFiles.push("package.json");
+          if (node.isLink) {
+            walkerOpts.ignoreFiles.push(".npmignore");
+            walkerOpts.ignoreFiles.push(".gitignore");
+          }
+          walkerOpts.ignoreFiles.push(strictRules);
+          const walker = new _PackWalker(tree, walkerOpts);
+          const bundled = await new Promise((pResolve, pReject) => {
+            walker.on("error", pReject);
+            walker.on("done", pResolve);
+            walker.start();
+          });
+          const relativeFrom = relative(this.root, walker.path);
+          for (const file of bundled) {
+            this.result.add(join(relativeFrom, file).replace(/\\/g, "/"));
+          }
+        }
+      }
+    };
+    var walk = /* @__PURE__ */ __name((tree, options, callback) => {
+      if (typeof options === "function") {
+        callback = options;
+        options = {};
+      }
+      const p = new Promise((pResolve, pReject) => {
+        new PackWalker(tree, { ...options, isPackage: true }).on("done", pResolve).on("error", pReject).start();
+      });
+      return callback ? p.then((res) => callback(null, res), callback) : p;
+    }, "walk");
+    module2.exports = walk;
+    walk.Walker = PackWalker;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+run-script@10.0.0_patch_hash=65d59a7c4dd7b00f1c218cbcf97d78fe2f462f2e048de4a22b_132738c317cf48b93eacff806f571587/node_modules/@npmcli/run-script/lib/set-path.js
+var require_set_path = __commonJS({
+  "node_modules/.pnpm/@npmcli+run-script@10.0.0_patch_hash=65d59a7c4dd7b00f1c218cbcf97d78fe2f462f2e048de4a22b_132738c317cf48b93eacff806f571587/node_modules/@npmcli/run-script/lib/set-path.js"(exports2, module2) {
+    var { resolve, dirname, delimiter } = require("path");
+    var nodeGypPath = resolve(__dirname, "../lib/node-gyp-bin");
+    var setPATH = /* @__PURE__ */ __name((projectPath, binPaths, env2) => {
+      const PATH = Object.keys(env2).filter((p2) => /^path$/i.test(p2) && env2[p2]).map((p2) => env2[p2].split(delimiter)).reduce((set, p2) => set.concat(p2.filter((concatted) => !set.includes(concatted))), []).join(delimiter);
+      const pathArr = [];
+      if (binPaths) {
+        pathArr.push(...binPaths);
+      }
+      let p = projectPath;
+      let pp;
+      do {
+        pathArr.push(resolve(p, "node_modules", ".bin"));
+        pp = p;
+        p = dirname(p);
+      } while (p !== pp);
+      pathArr.push(nodeGypPath, PATH);
+      const pathVal = pathArr.join(delimiter);
+      for (const key of Object.keys(env2)) {
+        if (/^path$/i.test(key)) {
+          env2[key] = pathVal;
+        }
+      }
+      return env2;
+    }, "setPATH");
+    module2.exports = setPATH;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+run-script@10.0.0_patch_hash=65d59a7c4dd7b00f1c218cbcf97d78fe2f462f2e048de4a22b_132738c317cf48b93eacff806f571587/node_modules/@npmcli/run-script/lib/make-spawn-args.js
+var require_make_spawn_args = __commonJS({
+  "node_modules/.pnpm/@npmcli+run-script@10.0.0_patch_hash=65d59a7c4dd7b00f1c218cbcf97d78fe2f462f2e048de4a22b_132738c317cf48b93eacff806f571587/node_modules/@npmcli/run-script/lib/make-spawn-args.js"(exports2, module2) {
+    var setPATH = require_set_path();
+    var { resolve } = require("path");
+    var npm_config_node_gyp;
+    var makeSpawnArgs = /* @__PURE__ */ __name((options) => {
+      const {
+        args,
+        binPaths,
+        cmd,
+        env: env2,
+        event,
+        nodeGyp,
+        path,
+        scriptShell = true,
+        stdio,
+        stdioString
+      } = options;
+      if (nodeGyp) {
+        npm_config_node_gyp = nodeGyp;
+      } else if (env2.npm_config_node_gyp) {
+        npm_config_node_gyp = env2.npm_config_node_gyp;
+      } else {
+        npm_config_node_gyp = require.resolve("node-" + "gyp/bin/node-gyp.js");
+      }
+      const spawnEnv = setPATH(path, binPaths, {
+        // we need to at least save the PATH environment var
+        ...process.env,
+        ...env2,
+        npm_package_json: resolve(path, "package.json"),
+        npm_lifecycle_event: event,
+        npm_lifecycle_script: cmd,
+        npm_config_node_gyp
+      });
+      const spawnOpts = {
+        env: spawnEnv,
+        stdioString,
+        stdio,
+        cwd: path,
+        shell: scriptShell
+      };
+      return [cmd, args, spawnOpts];
+    }, "makeSpawnArgs");
+    module2.exports = makeSpawnArgs;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+run-script@10.0.0_patch_hash=65d59a7c4dd7b00f1c218cbcf97d78fe2f462f2e048de4a22b_132738c317cf48b93eacff806f571587/node_modules/@npmcli/run-script/lib/package-envs.js
+var require_package_envs = __commonJS({
+  "node_modules/.pnpm/@npmcli+run-script@10.0.0_patch_hash=65d59a7c4dd7b00f1c218cbcf97d78fe2f462f2e048de4a22b_132738c317cf48b93eacff806f571587/node_modules/@npmcli/run-script/lib/package-envs.js"(exports2, module2) {
+    var packageEnvs = /* @__PURE__ */ __name((vals, prefix, env2 = {}) => {
+      for (const [key, val] of Object.entries(vals)) {
+        if (val === void 0) {
+          continue;
+        } else if (val === null || val === false) {
+          env2[`${prefix}${key}`] = "";
+        } else if (Array.isArray(val)) {
+          val.forEach((item, index) => {
+            packageEnvs({ [`${key}_${index}`]: item }, `${prefix}`, env2);
+          });
+        } else if (typeof val === "object") {
+          packageEnvs(val, `${prefix}${key}_`, env2);
+        } else {
+          env2[`${prefix}${key}`] = String(val);
+        }
+      }
+      return env2;
+    }, "packageEnvs");
+    module2.exports = (pkg) => {
+      return packageEnvs({
+        name: pkg.name,
+        version: pkg.version,
+        config: pkg.config,
+        engines: pkg.engines,
+        bin: pkg.bin
+      }, "npm_package_");
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+node-gyp@4.0.0/node_modules/@npmcli/node-gyp/lib/index.js
+var require_lib23 = __commonJS({
+  "node_modules/.pnpm/@npmcli+node-gyp@4.0.0/node_modules/@npmcli/node-gyp/lib/index.js"(exports2, module2) {
+    var util = require("util");
+    var fs = require("fs");
+    var { stat } = fs.promises || { stat: util.promisify(fs.stat) };
+    async function isNodeGypPackage(path) {
+      return await stat(`${path}/binding.gyp`).then((st) => st.isFile()).catch(() => false);
+    }
+    __name(isNodeGypPackage, "isNodeGypPackage");
+    module2.exports = {
+      isNodeGypPackage,
+      defaultGypInstallScript: "node-gyp rebuild"
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+run-script@10.0.0_patch_hash=65d59a7c4dd7b00f1c218cbcf97d78fe2f462f2e048de4a22b_132738c317cf48b93eacff806f571587/node_modules/@npmcli/run-script/lib/signal-manager.js
+var require_signal_manager = __commonJS({
+  "node_modules/.pnpm/@npmcli+run-script@10.0.0_patch_hash=65d59a7c4dd7b00f1c218cbcf97d78fe2f462f2e048de4a22b_132738c317cf48b93eacff806f571587/node_modules/@npmcli/run-script/lib/signal-manager.js"(exports2, module2) {
+    var runningProcs = /* @__PURE__ */ new Set();
+    var handlersInstalled = false;
+    var forwardedSignals = [
+      "SIGINT",
+      "SIGTERM"
+    ];
+    var handleSignal = /* @__PURE__ */ __name((signal) => {
+      for (const proc of runningProcs) {
+        proc.kill(signal);
+      }
+    }, "handleSignal");
+    var setupListeners = /* @__PURE__ */ __name(() => {
+      for (const signal of forwardedSignals) {
+        process.on(signal, handleSignal);
+      }
+      handlersInstalled = true;
+    }, "setupListeners");
+    var cleanupListeners = /* @__PURE__ */ __name(() => {
+      if (runningProcs.size === 0) {
+        for (const signal of forwardedSignals) {
+          process.removeListener(signal, handleSignal);
+        }
+        handlersInstalled = false;
+      }
+    }, "cleanupListeners");
+    var add = /* @__PURE__ */ __name((proc) => {
+      runningProcs.add(proc);
+      if (!handlersInstalled) {
+        setupListeners();
+      }
+      proc.once("exit", () => {
+        runningProcs.delete(proc);
+        cleanupListeners();
+      });
+    }, "add");
+    module2.exports = {
+      add,
+      handleSignal,
+      forwardedSignals
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+run-script@10.0.0_patch_hash=65d59a7c4dd7b00f1c218cbcf97d78fe2f462f2e048de4a22b_132738c317cf48b93eacff806f571587/node_modules/@npmcli/run-script/lib/is-server-package.js
+var require_is_server_package = __commonJS({
+  "node_modules/.pnpm/@npmcli+run-script@10.0.0_patch_hash=65d59a7c4dd7b00f1c218cbcf97d78fe2f462f2e048de4a22b_132738c317cf48b93eacff806f571587/node_modules/@npmcli/run-script/lib/is-server-package.js"(exports2, module2) {
+    var { stat } = require("node:fs/promises");
+    var { resolve } = require("node:path");
+    module2.exports = async (path) => {
+      try {
+        const st = await stat(resolve(path, "server.js"));
+        return st.isFile();
+      } catch (er) {
+        return false;
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+run-script@10.0.0_patch_hash=65d59a7c4dd7b00f1c218cbcf97d78fe2f462f2e048de4a22b_132738c317cf48b93eacff806f571587/node_modules/@npmcli/run-script/lib/run-script-pkg.js
+var require_run_script_pkg = __commonJS({
+  "node_modules/.pnpm/@npmcli+run-script@10.0.0_patch_hash=65d59a7c4dd7b00f1c218cbcf97d78fe2f462f2e048de4a22b_132738c317cf48b93eacff806f571587/node_modules/@npmcli/run-script/lib/run-script-pkg.js"(exports2, module2) {
+    var makeSpawnArgs = require_make_spawn_args();
+    var promiseSpawn = require_lib5();
+    var packageEnvs = require_package_envs();
+    var { isNodeGypPackage, defaultGypInstallScript } = require_lib23();
+    var signalManager = require_signal_manager();
+    var isServerPackage = require_is_server_package();
+    var runScriptPkg = /* @__PURE__ */ __name(async (options) => {
+      const {
+        args = [],
+        binPaths = false,
+        env: env2 = {},
+        event,
+        nodeGyp,
+        path,
+        pkg,
+        scriptShell,
+        // how long to wait for a process.kill signal
+        // only exposed here so that we can make the test go a bit faster.
+        signalTimeout = 500,
+        stdio = "pipe",
+        stdioString
+      } = options;
+      const { scripts = {}, gypfile } = pkg;
+      let cmd = null;
+      if (options.cmd) {
+        cmd = options.cmd;
+      } else if (pkg.scripts && pkg.scripts[event]) {
+        cmd = pkg.scripts[event];
+      } else if (
+        // If there is no preinstall or install script, default to rebuilding node-gyp packages.
+        event === "install" && !scripts.install && !scripts.preinstall && gypfile !== false && await isNodeGypPackage(path)
+      ) {
+        cmd = defaultGypInstallScript;
+      } else if (event === "start" && await isServerPackage(path)) {
+        cmd = "node server.js";
+      }
+      if (!cmd) {
+        return { code: 0, signal: null };
+      }
+      let inputEnd = /* @__PURE__ */ __name(() => {
+      }, "inputEnd");
+      if (stdio === "inherit") {
+        let banner;
+        if (pkg._id) {
+          banner = `
+> ${pkg._id} ${event}
+`;
+        } else {
+          banner = `
+> ${event}
+`;
+        }
+        banner += `> ${cmd.trim().replace(/\n/g, "\n> ")}`;
+        if (args.length) {
+          banner += ` ${args.join(" ")}`;
+        }
+        banner += "\n";
+        const { output, input } = require_lib2();
+        output.standard(banner);
+        inputEnd = input.start();
+      }
+      const [spawnShell, spawnArgs, spawnOpts] = makeSpawnArgs({
+        args,
+        binPaths,
+        cmd,
+        env: { ...env2, ...packageEnvs(pkg) },
+        event,
+        nodeGyp,
+        path,
+        scriptShell,
+        stdio,
+        stdioString
+      });
+      const p = promiseSpawn(spawnShell, spawnArgs, spawnOpts, {
+        event,
+        script: cmd,
+        pkgid: pkg._id,
+        path
+      });
+      if (stdio === "inherit") {
+        signalManager.add(p.process);
+      }
+      if (p.stdin) {
+        p.stdin.end();
+      }
+      return p.catch((er) => {
+        const { signal } = er;
+        if (stdio === "inherit" && signal) {
+          process.kill(process.pid, signal);
+          return new Promise((res, rej) => setTimeout(() => rej(er), signalTimeout));
+        } else {
+          throw er;
+        }
+      }).finally(inputEnd);
+    }, "runScriptPkg");
+    module2.exports = runScriptPkg;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+run-script@10.0.0_patch_hash=65d59a7c4dd7b00f1c218cbcf97d78fe2f462f2e048de4a22b_132738c317cf48b93eacff806f571587/node_modules/@npmcli/run-script/lib/validate-options.js
+var require_validate_options = __commonJS({
+  "node_modules/.pnpm/@npmcli+run-script@10.0.0_patch_hash=65d59a7c4dd7b00f1c218cbcf97d78fe2f462f2e048de4a22b_132738c317cf48b93eacff806f571587/node_modules/@npmcli/run-script/lib/validate-options.js"(exports2, module2) {
+    var validateOptions = /* @__PURE__ */ __name((options) => {
+      if (typeof options !== "object" || !options) {
+        throw new TypeError("invalid options object provided to runScript");
+      }
+      const {
+        event,
+        path,
+        scriptShell,
+        env: env2 = {},
+        stdio = "pipe",
+        args = [],
+        cmd
+      } = options;
+      if (!event || typeof event !== "string") {
+        throw new TypeError("valid event not provided to runScript");
+      }
+      if (!path || typeof path !== "string") {
+        throw new TypeError("valid path not provided to runScript");
+      }
+      if (scriptShell !== void 0 && typeof scriptShell !== "string") {
+        throw new TypeError("invalid scriptShell option provided to runScript");
+      }
+      if (typeof env2 !== "object" || !env2) {
+        throw new TypeError("invalid env option provided to runScript");
+      }
+      if (typeof stdio !== "string" && !Array.isArray(stdio)) {
+        throw new TypeError("invalid stdio option provided to runScript");
+      }
+      if (!Array.isArray(args) || args.some((a) => typeof a !== "string")) {
+        throw new TypeError("invalid args option provided to runScript");
+      }
+      if (cmd !== void 0 && typeof cmd !== "string") {
+        throw new TypeError("invalid cmd option provided to runScript");
+      }
+    }, "validateOptions");
+    module2.exports = validateOptions;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+run-script@10.0.0_patch_hash=65d59a7c4dd7b00f1c218cbcf97d78fe2f462f2e048de4a22b_132738c317cf48b93eacff806f571587/node_modules/@npmcli/run-script/lib/run-script.js
+var require_run_script = __commonJS({
+  "node_modules/.pnpm/@npmcli+run-script@10.0.0_patch_hash=65d59a7c4dd7b00f1c218cbcf97d78fe2f462f2e048de4a22b_132738c317cf48b93eacff806f571587/node_modules/@npmcli/run-script/lib/run-script.js"(exports2, module2) {
+    var PackageJson = require_lib11();
+    var runScriptPkg = require_run_script_pkg();
+    var validateOptions = require_validate_options();
+    var isServerPackage = require_is_server_package();
+    var runScript = /* @__PURE__ */ __name(async (options) => {
+      validateOptions(options);
+      if (options.pkg) {
+        return runScriptPkg(options);
+      }
+      const { content: pkg } = await PackageJson.normalize(options.path);
+      return runScriptPkg({ ...options, pkg });
+    }, "runScript");
+    module2.exports = Object.assign(runScript, { isServerPackage });
+  }
+});
+
+// node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/file.js
+var require_file = __commonJS({
+  "node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/file.js"(exports2, module2) {
+    var { resolve } = require("node:path");
+    var { stat, chmod } = require("node:fs/promises");
+    var cacache2 = require_lib17();
+    var fsm = require_lib16();
+    var Fetcher = require_fetcher2();
+    var _ = require_protected();
+    var FileFetcher = class extends Fetcher {
+      static {
+        __name(this, "FileFetcher");
+      }
+      constructor(spec, opts) {
+        super(spec, opts);
+        this.resolved = this.spec.fetchSpec;
+      }
+      get types() {
+        return ["file"];
+      }
+      manifest() {
+        if (this.package) {
+          return Promise.resolve(this.package);
+        }
+        return cacache2.tmp.withTmp(this.cache, this.opts, (dir) => this.extract(dir).then(() => this[_.readPackageJson](dir)).then((mani) => this.package = {
+          ...mani,
+          _integrity: this.integrity && String(this.integrity),
+          _resolved: this.resolved,
+          _from: this.from
+        }));
+      }
+      #exeBins(pkg, dest) {
+        if (!pkg.bin) {
+          return Promise.resolve();
+        }
+        return Promise.all(Object.keys(pkg.bin).map(async (k) => {
+          const script = resolve(dest, pkg.bin[k]);
+          try {
+            const st = await stat(script);
+            const mode = st.mode | 73;
+            if (mode === st.mode) {
+              return;
+            }
+            await chmod(script, mode);
+          } catch {
+          }
+        }));
+      }
+      extract(dest) {
+        return super.extract(dest).then((result) => this.package ? result : this[_.readPackageJson](dest).then((pkg) => this.#exeBins(pkg, dest)).then(() => result));
+      }
+      [_.tarballFromResolved]() {
+        return new fsm.ReadStream(this.resolved);
+      }
+      packument() {
+        return this.manifest().then((mani) => ({
+          name: mani.name,
+          "dist-tags": {
+            [this.defaultTag]: mani.version
+          },
+          versions: {
+            [mani.version]: {
+              ...mani,
+              dist: {
+                tarball: `file:${this.resolved}`,
+                integrity: this.integrity && String(this.integrity)
+              }
+            }
+          }
+        }));
+      }
+    };
+    module2.exports = FileFetcher;
+  }
+});
+
+// node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/util/tar-create-options.js
+var require_tar_create_options = __commonJS({
+  "node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/util/tar-create-options.js"(exports2, module2) {
+    var isPackageBin = require_is_package_bin();
+    var tarCreateOptions = /* @__PURE__ */ __name((manifest) => ({
+      cwd: manifest._resolved,
+      prefix: "package/",
+      portable: true,
+      gzip: {
+        // forcing the level to 9 seems to avoid some
+        // platform specific optimizations that cause
+        // integrity mismatch errors due to differing
+        // end results after compression
+        level: 9
+      },
+      // ensure that package bins are always executable
+      // Note that npm-packlist is already filtering out
+      // anything that is not a regular file, ignored by
+      // .npmignore or package.json "files", etc.
+      filter: /* @__PURE__ */ __name((path, stat) => {
+        if (isPackageBin(manifest, path)) {
+          stat.mode |= 73;
+        }
+        return true;
+      }, "filter"),
+      // Provide a specific date in the 1980s for the benefit of zip,
+      // which is confounded by files dated at the Unix epoch 0.
+      mtime: /* @__PURE__ */ new Date("1985-10-26T08:15:00.000Z")
+    }), "tarCreateOptions");
+    module2.exports = tarCreateOptions;
+  }
+});
+
+// node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/dir.js
+var require_dir = __commonJS({
+  "node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/dir.js"(exports2, module2) {
+    var { resolve } = require("node:path");
+    var packlist = require_lib22();
+    var runScript = require_run_script();
+    var tar = require_index_min();
+    var { Minipass } = require_commonjs5();
+    var Fetcher = require_fetcher2();
+    var FileFetcher = require_file();
+    var _ = require_protected();
+    var tarCreateOptions = require_tar_create_options();
+    var DirFetcher = class extends Fetcher {
+      static {
+        __name(this, "DirFetcher");
+      }
+      constructor(spec, opts) {
+        super(spec, opts);
+        this.resolved = this.spec.fetchSpec;
+        this.tree = opts.tree || null;
+        this.Arborist = opts.Arborist || null;
+      }
+      // exposes tarCreateOptions as public API
+      static tarCreateOptions(manifest) {
+        return tarCreateOptions(manifest);
+      }
+      get types() {
+        return ["directory"];
+      }
+      #prepareDir() {
+        return this.manifest().then((mani) => {
+          if (!mani.scripts || !mani.scripts.prepare) {
+            return;
+          }
+          if (this.opts.ignoreScripts) {
+            return;
+          }
+          const stdio = this.opts.foregroundScripts ? "inherit" : "pipe";
+          return runScript({
+            // this || undefined is because runScript will be unhappy with the default null value
+            scriptShell: this.opts.scriptShell || void 0,
+            pkg: mani,
+            event: "prepare",
+            path: this.resolved,
+            stdio,
+            env: {
+              npm_package_resolved: this.resolved,
+              npm_package_integrity: this.integrity,
+              npm_package_json: resolve(this.resolved, "package.json")
+            }
+          });
+        });
+      }
+      [_.tarballFromResolved]() {
+        if (!this.tree && !this.Arborist) {
+          throw new Error("DirFetcher requires either a tree or an Arborist constructor to pack");
+        }
+        const stream = new Minipass();
+        stream.resolved = this.resolved;
+        stream.integrity = this.integrity;
+        const { prefix, workspaces } = this.opts;
+        this.#prepareDir().then(async () => {
+          if (!this.tree) {
+            const arb = new this.Arborist({ path: this.resolved });
+            this.tree = await arb.loadActual();
+          }
+          return packlist(this.tree, { path: this.resolved, prefix, workspaces });
+        }).then((files) => tar.c(tarCreateOptions(this.package), files).on("error", (er) => stream.emit("error", er)).pipe(stream)).catch((er) => stream.emit("error", er));
+        return stream;
+      }
+      manifest() {
+        if (this.package) {
+          return Promise.resolve(this.package);
+        }
+        return this[_.readPackageJson](this.resolved).then((mani) => this.package = {
+          ...mani,
+          _integrity: this.integrity && String(this.integrity),
+          _resolved: this.resolved,
+          _from: this.from
+        });
+      }
+      packument() {
+        return FileFetcher.prototype.packument.apply(this);
+      }
+    };
+    module2.exports = DirFetcher;
+  }
+});
+
+// node_modules/.pnpm/npm-registry-fetch@19.1.1_supports-color@10.2.2/node_modules/npm-registry-fetch/lib/errors.js
+var require_errors3 = __commonJS({
+  "node_modules/.pnpm/npm-registry-fetch@19.1.1_supports-color@10.2.2/node_modules/npm-registry-fetch/lib/errors.js"(exports2, module2) {
+    "use strict";
+    var { URL: URL2 } = require("node:url");
+    function packageName(href) {
+      try {
+        let basePath = new URL2(href).pathname.slice(1);
+        if (!basePath.match(/^-/)) {
+          basePath = basePath.split("/");
+          var index = basePath.indexOf("_rewrite");
+          if (index === -1) {
+            index = basePath.length - 1;
+          } else {
+            index++;
+          }
+          return decodeURIComponent(basePath[index]);
+        }
+      } catch {
+      }
+    }
+    __name(packageName, "packageName");
+    var HttpErrorBase = class extends Error {
+      static {
+        __name(this, "HttpErrorBase");
+      }
+      constructor(method, res, body, spec) {
+        super();
+        this.name = this.constructor.name;
+        this.headers = typeof res.headers?.raw === "function" ? res.headers.raw() : res.headers;
+        this.statusCode = res.status;
+        this.code = `E${res.status}`;
+        this.method = method;
+        this.uri = res.url;
+        this.body = body;
+        this.pkgid = spec ? spec.toString() : packageName(res.url);
+        Error.captureStackTrace(this, this.constructor);
+      }
+    };
+    var HttpErrorGeneral = class extends HttpErrorBase {
+      static {
+        __name(this, "HttpErrorGeneral");
+      }
+      constructor(method, res, body, spec) {
+        super(method, res, body, spec);
+        this.message = `${res.status} ${res.statusText} - ${this.method.toUpperCase()} ${this.spec || this.uri}${body && body.error ? " - " + body.error : ""}`;
+      }
+    };
+    var HttpErrorAuthOTP = class extends HttpErrorBase {
+      static {
+        __name(this, "HttpErrorAuthOTP");
+      }
+      constructor(method, res, body, spec) {
+        super(method, res, body, spec);
+        this.message = "OTP required for authentication";
+        this.code = "EOTP";
+      }
+    };
+    var HttpErrorAuthIPAddress = class extends HttpErrorBase {
+      static {
+        __name(this, "HttpErrorAuthIPAddress");
+      }
+      constructor(method, res, body, spec) {
+        super(method, res, body, spec);
+        this.message = "Login is not allowed from your IP address";
+        this.code = "EAUTHIP";
+      }
+    };
+    var HttpErrorAuthUnknown = class extends HttpErrorBase {
+      static {
+        __name(this, "HttpErrorAuthUnknown");
+      }
+      constructor(method, res, body, spec) {
+        super(method, res, body, spec);
+        this.message = "Unable to authenticate, need: " + res.headers.get("www-authenticate");
+      }
+    };
+    module2.exports = {
+      HttpErrorBase,
+      HttpErrorGeneral,
+      HttpErrorAuthOTP,
+      HttpErrorAuthIPAddress,
+      HttpErrorAuthUnknown
+    };
+  }
+});
+
+// node_modules/.pnpm/minizlib@3.1.0/node_modules/minizlib/dist/commonjs/constants.js
+var require_constants2 = __commonJS({
+  "node_modules/.pnpm/minizlib@3.1.0/node_modules/minizlib/dist/commonjs/constants.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.constants = void 0;
+    var zlib_1 = __importDefault(require("zlib"));
+    var realZlibConstants = zlib_1.default.constants || { ZLIB_VERNUM: 4736 };
+    exports2.constants = Object.freeze(Object.assign(/* @__PURE__ */ Object.create(null), {
+      Z_NO_FLUSH: 0,
+      Z_PARTIAL_FLUSH: 1,
+      Z_SYNC_FLUSH: 2,
+      Z_FULL_FLUSH: 3,
+      Z_FINISH: 4,
+      Z_BLOCK: 5,
+      Z_OK: 0,
+      Z_STREAM_END: 1,
+      Z_NEED_DICT: 2,
+      Z_ERRNO: -1,
+      Z_STREAM_ERROR: -2,
+      Z_DATA_ERROR: -3,
+      Z_MEM_ERROR: -4,
+      Z_BUF_ERROR: -5,
+      Z_VERSION_ERROR: -6,
+      Z_NO_COMPRESSION: 0,
+      Z_BEST_SPEED: 1,
+      Z_BEST_COMPRESSION: 9,
+      Z_DEFAULT_COMPRESSION: -1,
+      Z_FILTERED: 1,
+      Z_HUFFMAN_ONLY: 2,
+      Z_RLE: 3,
+      Z_FIXED: 4,
+      Z_DEFAULT_STRATEGY: 0,
+      DEFLATE: 1,
+      INFLATE: 2,
+      GZIP: 3,
+      GUNZIP: 4,
+      DEFLATERAW: 5,
+      INFLATERAW: 6,
+      UNZIP: 7,
+      BROTLI_DECODE: 8,
+      BROTLI_ENCODE: 9,
+      Z_MIN_WINDOWBITS: 8,
+      Z_MAX_WINDOWBITS: 15,
+      Z_DEFAULT_WINDOWBITS: 15,
+      Z_MIN_CHUNK: 64,
+      Z_MAX_CHUNK: Infinity,
+      Z_DEFAULT_CHUNK: 16384,
+      Z_MIN_MEMLEVEL: 1,
+      Z_MAX_MEMLEVEL: 9,
+      Z_DEFAULT_MEMLEVEL: 8,
+      Z_MIN_LEVEL: -1,
+      Z_MAX_LEVEL: 9,
+      Z_DEFAULT_LEVEL: -1,
+      BROTLI_OPERATION_PROCESS: 0,
+      BROTLI_OPERATION_FLUSH: 1,
+      BROTLI_OPERATION_FINISH: 2,
+      BROTLI_OPERATION_EMIT_METADATA: 3,
+      BROTLI_MODE_GENERIC: 0,
+      BROTLI_MODE_TEXT: 1,
+      BROTLI_MODE_FONT: 2,
+      BROTLI_DEFAULT_MODE: 0,
+      BROTLI_MIN_QUALITY: 0,
+      BROTLI_MAX_QUALITY: 11,
+      BROTLI_DEFAULT_QUALITY: 11,
+      BROTLI_MIN_WINDOW_BITS: 10,
+      BROTLI_MAX_WINDOW_BITS: 24,
+      BROTLI_LARGE_MAX_WINDOW_BITS: 30,
+      BROTLI_DEFAULT_WINDOW: 22,
+      BROTLI_MIN_INPUT_BLOCK_BITS: 16,
+      BROTLI_MAX_INPUT_BLOCK_BITS: 24,
+      BROTLI_PARAM_MODE: 0,
+      BROTLI_PARAM_QUALITY: 1,
+      BROTLI_PARAM_LGWIN: 2,
+      BROTLI_PARAM_LGBLOCK: 3,
+      BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: 4,
+      BROTLI_PARAM_SIZE_HINT: 5,
+      BROTLI_PARAM_LARGE_WINDOW: 6,
+      BROTLI_PARAM_NPOSTFIX: 7,
+      BROTLI_PARAM_NDIRECT: 8,
+      BROTLI_DECODER_RESULT_ERROR: 0,
+      BROTLI_DECODER_RESULT_SUCCESS: 1,
+      BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: 2,
+      BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: 3,
+      BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: 0,
+      BROTLI_DECODER_PARAM_LARGE_WINDOW: 1,
+      BROTLI_DECODER_NO_ERROR: 0,
+      BROTLI_DECODER_SUCCESS: 1,
+      BROTLI_DECODER_NEEDS_MORE_INPUT: 2,
+      BROTLI_DECODER_NEEDS_MORE_OUTPUT: 3,
+      BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: -1,
+      BROTLI_DECODER_ERROR_FORMAT_RESERVED: -2,
+      BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: -3,
+      BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: -4,
+      BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: -5,
+      BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: -6,
+      BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: -7,
+      BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: -8,
+      BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: -9,
+      BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: -10,
+      BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: -11,
+      BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: -12,
+      BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: -13,
+      BROTLI_DECODER_ERROR_FORMAT_PADDING_1: -14,
+      BROTLI_DECODER_ERROR_FORMAT_PADDING_2: -15,
+      BROTLI_DECODER_ERROR_FORMAT_DISTANCE: -16,
+      BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: -19,
+      BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: -20,
+      BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: -21,
+      BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: -22,
+      BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: -25,
+      BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: -26,
+      BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: -27,
+      BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: -30,
+      BROTLI_DECODER_ERROR_UNREACHABLE: -31
+    }, realZlibConstants));
+  }
+});
+
+// node_modules/.pnpm/minizlib@3.1.0/node_modules/minizlib/dist/commonjs/index.js
+var require_commonjs8 = __commonJS({
+  "node_modules/.pnpm/minizlib@3.1.0/node_modules/minizlib/dist/commonjs/index.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc2 = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc2 || ("get" in desc2 ? !m.__esModule : desc2.writable || desc2.configurable)) {
+        desc2 = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc2);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
+      var ownKeys = /* @__PURE__ */ __name(function(o) {
+        ownKeys = Object.getOwnPropertyNames || function(o2) {
+          var ar = [];
+          for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
+          return ar;
+        };
+        return ownKeys(o);
+      }, "ownKeys");
+      return function(mod) {
+        if (mod && mod.__esModule) return mod;
+        var result = {};
+        if (mod != null) {
+          for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+        }
+        __setModuleDefault(result, mod);
+        return result;
+      };
+    })();
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.ZstdDecompress = exports2.ZstdCompress = exports2.BrotliDecompress = exports2.BrotliCompress = exports2.Unzip = exports2.InflateRaw = exports2.DeflateRaw = exports2.Gunzip = exports2.Gzip = exports2.Inflate = exports2.Deflate = exports2.Zlib = exports2.ZlibError = exports2.constants = void 0;
+    var assert_1 = __importDefault(require("assert"));
+    var buffer_1 = require("buffer");
+    var minipass_1 = require_commonjs5();
+    var realZlib = __importStar(require("zlib"));
+    var constants_js_1 = require_constants2();
+    var constants_js_2 = require_constants2();
+    Object.defineProperty(exports2, "constants", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return constants_js_2.constants;
+    }, "get") });
+    var OriginalBufferConcat = buffer_1.Buffer.concat;
+    var desc = Object.getOwnPropertyDescriptor(buffer_1.Buffer, "concat");
+    var noop = /* @__PURE__ */ __name((args) => args, "noop");
+    var passthroughBufferConcat = desc?.writable === true || desc?.set !== void 0 ? (makeNoOp) => {
+      buffer_1.Buffer.concat = makeNoOp ? noop : OriginalBufferConcat;
+    } : (_) => {
+    };
+    var _superWrite = Symbol("_superWrite");
+    var ZlibError = class extends Error {
+      static {
+        __name(this, "ZlibError");
+      }
+      code;
+      errno;
+      constructor(err, origin) {
+        super("zlib: " + err.message, { cause: err });
+        this.code = err.code;
+        this.errno = err.errno;
+        if (!this.code)
+          this.code = "ZLIB_ERROR";
+        this.message = "zlib: " + err.message;
+        Error.captureStackTrace(this, origin ?? this.constructor);
+      }
+      get name() {
+        return "ZlibError";
+      }
+    };
+    exports2.ZlibError = ZlibError;
+    var _flushFlag = Symbol("flushFlag");
+    var ZlibBase = class extends minipass_1.Minipass {
+      static {
+        __name(this, "ZlibBase");
+      }
+      #sawError = false;
+      #ended = false;
+      #flushFlag;
+      #finishFlushFlag;
+      #fullFlushFlag;
+      #handle;
+      #onError;
+      get sawError() {
+        return this.#sawError;
+      }
+      get handle() {
+        return this.#handle;
+      }
+      /* c8 ignore start */
+      get flushFlag() {
+        return this.#flushFlag;
+      }
+      /* c8 ignore stop */
+      constructor(opts, mode) {
+        if (!opts || typeof opts !== "object")
+          throw new TypeError("invalid options for ZlibBase constructor");
+        super(opts);
+        this.#flushFlag = opts.flush ?? 0;
+        this.#finishFlushFlag = opts.finishFlush ?? 0;
+        this.#fullFlushFlag = opts.fullFlushFlag ?? 0;
+        if (typeof realZlib[mode] !== "function") {
+          throw new TypeError("Compression method not supported: " + mode);
+        }
+        try {
+          this.#handle = new realZlib[mode](opts);
+        } catch (er) {
+          throw new ZlibError(er, this.constructor);
+        }
+        this.#onError = (err) => {
+          if (this.#sawError)
+            return;
+          this.#sawError = true;
+          this.close();
+          this.emit("error", err);
+        };
+        this.#handle?.on("error", (er) => this.#onError(new ZlibError(er)));
+        this.once("end", () => this.close);
+      }
+      close() {
+        if (this.#handle) {
+          this.#handle.close();
+          this.#handle = void 0;
+          this.emit("close");
+        }
+      }
+      reset() {
+        if (!this.#sawError) {
+          (0, assert_1.default)(this.#handle, "zlib binding closed");
+          return this.#handle.reset?.();
+        }
+      }
+      flush(flushFlag) {
+        if (this.ended)
+          return;
+        if (typeof flushFlag !== "number")
+          flushFlag = this.#fullFlushFlag;
+        this.write(Object.assign(buffer_1.Buffer.alloc(0), { [_flushFlag]: flushFlag }));
+      }
+      end(chunk, encoding, cb) {
+        if (typeof chunk === "function") {
+          cb = chunk;
+          encoding = void 0;
+          chunk = void 0;
+        }
+        if (typeof encoding === "function") {
+          cb = encoding;
+          encoding = void 0;
+        }
+        if (chunk) {
+          if (encoding)
+            this.write(chunk, encoding);
+          else
+            this.write(chunk);
+        }
+        this.flush(this.#finishFlushFlag);
+        this.#ended = true;
+        return super.end(cb);
+      }
+      get ended() {
+        return this.#ended;
+      }
+      // overridden in the gzip classes to do portable writes
+      [_superWrite](data) {
+        return super.write(data);
+      }
+      write(chunk, encoding, cb) {
+        if (typeof encoding === "function")
+          cb = encoding, encoding = "utf8";
+        if (typeof chunk === "string")
+          chunk = buffer_1.Buffer.from(chunk, encoding);
+        if (this.#sawError)
+          return;
+        (0, assert_1.default)(this.#handle, "zlib binding closed");
+        const nativeHandle = this.#handle._handle;
+        const originalNativeClose = nativeHandle.close;
+        nativeHandle.close = () => {
+        };
+        const originalClose = this.#handle.close;
+        this.#handle.close = () => {
+        };
+        passthroughBufferConcat(true);
+        let result = void 0;
+        try {
+          const flushFlag = typeof chunk[_flushFlag] === "number" ? chunk[_flushFlag] : this.#flushFlag;
+          result = this.#handle._processChunk(chunk, flushFlag);
+          passthroughBufferConcat(false);
+        } catch (err) {
+          passthroughBufferConcat(false);
+          this.#onError(new ZlibError(err, this.write));
+        } finally {
+          if (this.#handle) {
+            ;
+            this.#handle._handle = nativeHandle;
+            nativeHandle.close = originalNativeClose;
+            this.#handle.close = originalClose;
+            this.#handle.removeAllListeners("error");
+          }
+        }
+        if (this.#handle)
+          this.#handle.on("error", (er) => this.#onError(new ZlibError(er, this.write)));
+        let writeReturn;
+        if (result) {
+          if (Array.isArray(result) && result.length > 0) {
+            const r = result[0];
+            writeReturn = this[_superWrite](buffer_1.Buffer.from(r));
+            for (let i = 1; i < result.length; i++) {
+              writeReturn = this[_superWrite](result[i]);
+            }
+          } else {
+            writeReturn = this[_superWrite](buffer_1.Buffer.from(result));
+          }
+        }
+        if (cb)
+          cb();
+        return writeReturn;
+      }
+    };
+    var Zlib = class extends ZlibBase {
+      static {
+        __name(this, "Zlib");
+      }
+      #level;
+      #strategy;
+      constructor(opts, mode) {
+        opts = opts || {};
+        opts.flush = opts.flush || constants_js_1.constants.Z_NO_FLUSH;
+        opts.finishFlush = opts.finishFlush || constants_js_1.constants.Z_FINISH;
+        opts.fullFlushFlag = constants_js_1.constants.Z_FULL_FLUSH;
+        super(opts, mode);
+        this.#level = opts.level;
+        this.#strategy = opts.strategy;
+      }
+      params(level, strategy) {
+        if (this.sawError)
+          return;
+        if (!this.handle)
+          throw new Error("cannot switch params when binding is closed");
+        if (!this.handle.params)
+          throw new Error("not supported in this implementation");
+        if (this.#level !== level || this.#strategy !== strategy) {
+          this.flush(constants_js_1.constants.Z_SYNC_FLUSH);
+          (0, assert_1.default)(this.handle, "zlib binding closed");
+          const origFlush = this.handle.flush;
+          this.handle.flush = (flushFlag, cb) => {
+            if (typeof flushFlag === "function") {
+              cb = flushFlag;
+              flushFlag = this.flushFlag;
+            }
+            this.flush(flushFlag);
+            cb?.();
+          };
+          try {
+            ;
+            this.handle.params(level, strategy);
+          } finally {
+            this.handle.flush = origFlush;
+          }
+          if (this.handle) {
+            this.#level = level;
+            this.#strategy = strategy;
+          }
+        }
+      }
+    };
+    exports2.Zlib = Zlib;
+    var Deflate = class extends Zlib {
+      static {
+        __name(this, "Deflate");
+      }
+      constructor(opts) {
+        super(opts, "Deflate");
+      }
+    };
+    exports2.Deflate = Deflate;
+    var Inflate = class extends Zlib {
+      static {
+        __name(this, "Inflate");
+      }
+      constructor(opts) {
+        super(opts, "Inflate");
+      }
+    };
+    exports2.Inflate = Inflate;
+    var Gzip = class extends Zlib {
+      static {
+        __name(this, "Gzip");
+      }
+      #portable;
+      constructor(opts) {
+        super(opts, "Gzip");
+        this.#portable = opts && !!opts.portable;
+      }
+      [_superWrite](data) {
+        if (!this.#portable)
+          return super[_superWrite](data);
+        this.#portable = false;
+        data[9] = 255;
+        return super[_superWrite](data);
+      }
+    };
+    exports2.Gzip = Gzip;
+    var Gunzip = class extends Zlib {
+      static {
+        __name(this, "Gunzip");
+      }
+      constructor(opts) {
+        super(opts, "Gunzip");
+      }
+    };
+    exports2.Gunzip = Gunzip;
+    var DeflateRaw = class extends Zlib {
+      static {
+        __name(this, "DeflateRaw");
+      }
+      constructor(opts) {
+        super(opts, "DeflateRaw");
+      }
+    };
+    exports2.DeflateRaw = DeflateRaw;
+    var InflateRaw = class extends Zlib {
+      static {
+        __name(this, "InflateRaw");
+      }
+      constructor(opts) {
+        super(opts, "InflateRaw");
+      }
+    };
+    exports2.InflateRaw = InflateRaw;
+    var Unzip = class extends Zlib {
+      static {
+        __name(this, "Unzip");
+      }
+      constructor(opts) {
+        super(opts, "Unzip");
+      }
+    };
+    exports2.Unzip = Unzip;
+    var Brotli = class extends ZlibBase {
+      static {
+        __name(this, "Brotli");
+      }
+      constructor(opts, mode) {
+        opts = opts || {};
+        opts.flush = opts.flush || constants_js_1.constants.BROTLI_OPERATION_PROCESS;
+        opts.finishFlush = opts.finishFlush || constants_js_1.constants.BROTLI_OPERATION_FINISH;
+        opts.fullFlushFlag = constants_js_1.constants.BROTLI_OPERATION_FLUSH;
+        super(opts, mode);
+      }
+    };
+    var BrotliCompress = class extends Brotli {
+      static {
+        __name(this, "BrotliCompress");
+      }
+      constructor(opts) {
+        super(opts, "BrotliCompress");
+      }
+    };
+    exports2.BrotliCompress = BrotliCompress;
+    var BrotliDecompress = class extends Brotli {
+      static {
+        __name(this, "BrotliDecompress");
+      }
+      constructor(opts) {
+        super(opts, "BrotliDecompress");
+      }
+    };
+    exports2.BrotliDecompress = BrotliDecompress;
+    var Zstd = class extends ZlibBase {
+      static {
+        __name(this, "Zstd");
+      }
+      constructor(opts, mode) {
+        opts = opts || {};
+        opts.flush = opts.flush || constants_js_1.constants.ZSTD_e_continue;
+        opts.finishFlush = opts.finishFlush || constants_js_1.constants.ZSTD_e_end;
+        opts.fullFlushFlag = constants_js_1.constants.ZSTD_e_flush;
+        super(opts, mode);
+      }
+    };
+    var ZstdCompress = class extends Zstd {
+      static {
+        __name(this, "ZstdCompress");
+      }
+      constructor(opts) {
+        super(opts, "ZstdCompress");
+      }
+    };
+    exports2.ZstdCompress = ZstdCompress;
+    var ZstdDecompress = class extends Zstd {
+      static {
+        __name(this, "ZstdDecompress");
+      }
+      constructor(opts) {
+        super(opts, "ZstdDecompress");
+      }
+    };
+    exports2.ZstdDecompress = ZstdDecompress;
+  }
+});
+
+// node_modules/.pnpm/minipass-sized@1.0.3_patch_hash=2048620f836b8d07ca6b41a3500944fe7a43fb7542aa6d45bceb405afa513738/node_modules/minipass-sized/index.js
+var require_minipass_sized = __commonJS({
+  "node_modules/.pnpm/minipass-sized@1.0.3_patch_hash=2048620f836b8d07ca6b41a3500944fe7a43fb7542aa6d45bceb405afa513738/node_modules/minipass-sized/index.js"(exports2, module2) {
+    var { Minipass } = require_commonjs5();
+    var SizeError = class extends Error {
+      static {
+        __name(this, "SizeError");
+      }
+      constructor(found, expect) {
+        super(`Bad data size: expected ${expect} bytes, but got ${found}`);
+        this.expect = expect;
+        this.found = found;
+        this.code = "EBADSIZE";
+        Error.captureStackTrace(this, this.constructor);
+      }
+      get name() {
+        return "SizeError";
+      }
+    };
+    var MinipassSized = class extends Minipass {
+      static {
+        __name(this, "MinipassSized");
+      }
+      constructor(options = {}) {
+        super(options);
+        if (options.objectMode)
+          throw new TypeError(`${this.constructor.name} streams only work with string and buffer data`);
+        this.found = 0;
+        this.expect = options.size;
+        if (typeof this.expect !== "number" || this.expect > Number.MAX_SAFE_INTEGER || isNaN(this.expect) || this.expect < 0 || !isFinite(this.expect) || this.expect !== Math.floor(this.expect))
+          throw new Error("invalid expected size: " + this.expect);
+      }
+      write(chunk, encoding, cb) {
+        const buffer = Buffer.isBuffer(chunk) ? chunk : typeof chunk === "string" ? Buffer.from(chunk, typeof encoding === "string" ? encoding : "utf8") : chunk;
+        if (!Buffer.isBuffer(buffer)) {
+          this.emit("error", new TypeError(`${this.constructor.name} streams only work with string and buffer data`));
+          return false;
+        }
+        this.found += buffer.length;
+        if (this.found > this.expect)
+          this.emit("error", new SizeError(this.found, this.expect));
+        return super.write(chunk, encoding, cb);
+      }
+      emit(ev, ...data) {
+        if (ev === "end") {
+          if (this.found !== this.expect)
+            this.emit("error", new SizeError(this.found, this.expect));
+        }
+        return super.emit(ev, ...data);
+      }
+    };
+    MinipassSized.SizeError = SizeError;
+    module2.exports = MinipassSized;
+  }
+});
+
+// node_modules/.pnpm/minipass-fetch@4.0.1/node_modules/minipass-fetch/lib/blob.js
+var require_blob = __commonJS({
+  "node_modules/.pnpm/minipass-fetch@4.0.1/node_modules/minipass-fetch/lib/blob.js"(exports2, module2) {
+    "use strict";
+    var { Minipass } = require_commonjs5();
+    var TYPE = Symbol("type");
+    var BUFFER = Symbol("buffer");
+    var Blob = class _Blob {
+      static {
+        __name(this, "Blob");
+      }
+      constructor(blobParts, options) {
+        this[TYPE] = "";
+        const buffers = [];
+        let size = 0;
+        if (blobParts) {
+          const a = blobParts;
+          const length = Number(a.length);
+          for (let i = 0; i < length; i++) {
+            const element = a[i];
+            const buffer = element instanceof Buffer ? element : ArrayBuffer.isView(element) ? Buffer.from(element.buffer, element.byteOffset, element.byteLength) : element instanceof ArrayBuffer ? Buffer.from(element) : element instanceof _Blob ? element[BUFFER] : typeof element === "string" ? Buffer.from(element) : Buffer.from(String(element));
+            size += buffer.length;
+            buffers.push(buffer);
+          }
+        }
+        this[BUFFER] = Buffer.concat(buffers, size);
+        const type = options && options.type !== void 0 && String(options.type).toLowerCase();
+        if (type && !/[^\u0020-\u007E]/.test(type)) {
+          this[TYPE] = type;
+        }
+      }
+      get size() {
+        return this[BUFFER].length;
+      }
+      get type() {
+        return this[TYPE];
+      }
+      text() {
+        return Promise.resolve(this[BUFFER].toString());
+      }
+      arrayBuffer() {
+        const buf = this[BUFFER];
+        const off = buf.byteOffset;
+        const len = buf.byteLength;
+        const ab = buf.buffer.slice(off, off + len);
+        return Promise.resolve(ab);
+      }
+      stream() {
+        return new Minipass().end(this[BUFFER]);
+      }
+      slice(start, end, type) {
+        const size = this.size;
+        const relativeStart = start === void 0 ? 0 : start < 0 ? Math.max(size + start, 0) : Math.min(start, size);
+        const relativeEnd = end === void 0 ? size : end < 0 ? Math.max(size + end, 0) : Math.min(end, size);
+        const span = Math.max(relativeEnd - relativeStart, 0);
+        const buffer = this[BUFFER];
+        const slicedBuffer = buffer.slice(
+          relativeStart,
+          relativeStart + span
+        );
+        const blob = new _Blob([], { type });
+        blob[BUFFER] = slicedBuffer;
+        return blob;
+      }
+      get [Symbol.toStringTag]() {
+        return "Blob";
+      }
+      static get BUFFER() {
+        return BUFFER;
+      }
+    };
+    Object.defineProperties(Blob.prototype, {
+      size: { enumerable: true },
+      type: { enumerable: true }
+    });
+    module2.exports = Blob;
+  }
+});
+
+// node_modules/.pnpm/minipass-fetch@4.0.1/node_modules/minipass-fetch/lib/fetch-error.js
+var require_fetch_error = __commonJS({
+  "node_modules/.pnpm/minipass-fetch@4.0.1/node_modules/minipass-fetch/lib/fetch-error.js"(exports2, module2) {
+    "use strict";
+    var FetchError = class extends Error {
+      static {
+        __name(this, "FetchError");
+      }
+      constructor(message, type, systemError) {
+        super(message);
+        this.code = "FETCH_ERROR";
+        if (systemError) {
+          Object.assign(this, systemError);
+        }
+        this.errno = this.code;
+        this.type = this.code === "EBADSIZE" && this.found > this.expect ? "max-size" : type;
+        this.message = message;
+        Error.captureStackTrace(this, this.constructor);
+      }
+      get name() {
+        return "FetchError";
+      }
+      // don't allow name to be overwritten
+      set name(n) {
+      }
+      get [Symbol.toStringTag]() {
+        return "FetchError";
+      }
+    };
+    module2.exports = FetchError;
+  }
+});
+
+// stub:encoding.cjs:encoding
+var require_encoding = __commonJS({
+  "stub:encoding.cjs:encoding"(exports2, module2) {
+    "use strict";
+    module2.exports = {};
+  }
+});
+
+// node_modules/.pnpm/minipass-fetch@4.0.1/node_modules/minipass-fetch/lib/body.js
+var require_body = __commonJS({
+  "node_modules/.pnpm/minipass-fetch@4.0.1/node_modules/minipass-fetch/lib/body.js"(exports2, module2) {
+    "use strict";
+    var { Minipass } = require_commonjs5();
+    var MinipassSized = require_minipass_sized();
+    var Blob = require_blob();
+    var { BUFFER } = Blob;
+    var FetchError = require_fetch_error();
+    var convert;
+    try {
+      convert = require_encoding().convert;
+    } catch (e) {
+    }
+    var INTERNALS = Symbol("Body internals");
+    var CONSUME_BODY = Symbol("consumeBody");
+    var Body = class {
+      static {
+        __name(this, "Body");
+      }
+      constructor(bodyArg, options = {}) {
+        const { size = 0, timeout = 0 } = options;
+        const body = bodyArg === void 0 || bodyArg === null ? null : isURLSearchParams(bodyArg) ? Buffer.from(bodyArg.toString()) : isBlob(bodyArg) ? bodyArg : Buffer.isBuffer(bodyArg) ? bodyArg : Object.prototype.toString.call(bodyArg) === "[object ArrayBuffer]" ? Buffer.from(bodyArg) : ArrayBuffer.isView(bodyArg) ? Buffer.from(bodyArg.buffer, bodyArg.byteOffset, bodyArg.byteLength) : Minipass.isStream(bodyArg) ? bodyArg : Buffer.from(String(bodyArg));
+        this[INTERNALS] = {
+          body,
+          disturbed: false,
+          error: null
+        };
+        this.size = size;
+        this.timeout = timeout;
+        if (Minipass.isStream(body)) {
+          body.on("error", (er) => {
+            const error = er.name === "AbortError" ? er : new FetchError(`Invalid response while trying to fetch ${this.url}: ${er.message}`, "system", er);
+            this[INTERNALS].error = error;
+          });
+        }
+      }
+      get body() {
+        return this[INTERNALS].body;
+      }
+      get bodyUsed() {
+        return this[INTERNALS].disturbed;
+      }
+      arrayBuffer() {
+        return this[CONSUME_BODY]().then((buf) => buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength));
+      }
+      blob() {
+        const ct = this.headers && this.headers.get("content-type") || "";
+        return this[CONSUME_BODY]().then((buf) => Object.assign(
+          new Blob([], { type: ct.toLowerCase() }),
+          { [BUFFER]: buf }
+        ));
+      }
+      async json() {
+        const buf = await this[CONSUME_BODY]();
+        try {
+          return JSON.parse(buf.toString());
+        } catch (er) {
+          throw new FetchError(
+            `invalid json response body at ${this.url} reason: ${er.message}`,
+            "invalid-json"
+          );
+        }
+      }
+      text() {
+        return this[CONSUME_BODY]().then((buf) => buf.toString());
+      }
+      buffer() {
+        return this[CONSUME_BODY]();
+      }
+      textConverted() {
+        return this[CONSUME_BODY]().then((buf) => convertBody(buf, this.headers));
+      }
+      [CONSUME_BODY]() {
+        if (this[INTERNALS].disturbed) {
+          return Promise.reject(new TypeError(`body used already for: ${this.url}`));
+        }
+        this[INTERNALS].disturbed = true;
+        if (this[INTERNALS].error) {
+          return Promise.reject(this[INTERNALS].error);
+        }
+        if (this.body === null) {
+          return Promise.resolve(Buffer.alloc(0));
+        }
+        if (Buffer.isBuffer(this.body)) {
+          return Promise.resolve(this.body);
+        }
+        const upstream = isBlob(this.body) ? this.body.stream() : this.body;
+        if (!Minipass.isStream(upstream)) {
+          return Promise.resolve(Buffer.alloc(0));
+        }
+        const stream = this.size && upstream instanceof MinipassSized ? upstream : !this.size && upstream instanceof Minipass && !(upstream instanceof MinipassSized) ? upstream : this.size ? new MinipassSized({ size: this.size }) : new Minipass();
+        const resTimeout = this.timeout && stream.writable ? setTimeout(() => {
+          stream.emit("error", new FetchError(
+            `Response timeout while trying to fetch ${this.url} (over ${this.timeout}ms)`,
+            "body-timeout"
+          ));
+        }, this.timeout) : null;
+        if (resTimeout && resTimeout.unref) {
+          resTimeout.unref();
+        }
+        return new Promise((resolve) => {
+          if (stream !== upstream) {
+            upstream.on("error", (er) => stream.emit("error", er));
+            upstream.pipe(stream);
+          }
+          resolve();
+        }).then(() => stream.concat()).then((buf) => {
+          clearTimeout(resTimeout);
+          return buf;
+        }).catch((er) => {
+          clearTimeout(resTimeout);
+          if (er.name === "AbortError" || er.name === "FetchError") {
+            throw er;
+          } else if (er.name === "RangeError") {
+            throw new FetchError(`Could not create Buffer from response body for ${this.url}: ${er.message}`, "system", er);
+          } else {
+            throw new FetchError(`Invalid response body while trying to fetch ${this.url}: ${er.message}`, "system", er);
+          }
+        });
+      }
+      static clone(instance) {
+        if (instance.bodyUsed) {
+          throw new Error("cannot clone body after it is used");
+        }
+        const body = instance.body;
+        if (Minipass.isStream(body) && typeof body.getBoundary !== "function") {
+          const tee = new Minipass();
+          const p1 = new Minipass();
+          const p2 = new Minipass();
+          tee.on("error", (er) => {
+            p1.emit("error", er);
+            p2.emit("error", er);
+          });
+          body.on("error", (er) => tee.emit("error", er));
+          tee.pipe(p1);
+          tee.pipe(p2);
+          body.pipe(tee);
+          instance[INTERNALS].body = p1;
+          return p2;
+        } else {
+          return instance.body;
+        }
+      }
+      static extractContentType(body) {
+        return body === null || body === void 0 ? null : typeof body === "string" ? "text/plain;charset=UTF-8" : isURLSearchParams(body) ? "application/x-www-form-urlencoded;charset=UTF-8" : isBlob(body) ? body.type || null : Buffer.isBuffer(body) ? null : Object.prototype.toString.call(body) === "[object ArrayBuffer]" ? null : ArrayBuffer.isView(body) ? null : typeof body.getBoundary === "function" ? `multipart/form-data;boundary=${body.getBoundary()}` : Minipass.isStream(body) ? null : "text/plain;charset=UTF-8";
+      }
+      static getTotalBytes(instance) {
+        const { body } = instance;
+        return body === null || body === void 0 ? 0 : isBlob(body) ? body.size : Buffer.isBuffer(body) ? body.length : body && typeof body.getLengthSync === "function" && // detect form data input from form-data module
+        (body._lengthRetrievers && /* istanbul ignore next */
+        body._lengthRetrievers.length === 0 || // 1.x
+        body.hasKnownLength && body.hasKnownLength()) ? body.getLengthSync() : null;
+      }
+      static writeToStream(dest, instance) {
+        const { body } = instance;
+        if (body === null || body === void 0) {
+          dest.end();
+        } else if (Buffer.isBuffer(body) || typeof body === "string") {
+          dest.end(body);
+        } else {
+          const stream = isBlob(body) ? body.stream() : body;
+          stream.on("error", (er) => dest.emit("error", er)).pipe(dest);
+        }
+        return dest;
+      }
+    };
+    Object.defineProperties(Body.prototype, {
+      body: { enumerable: true },
+      bodyUsed: { enumerable: true },
+      arrayBuffer: { enumerable: true },
+      blob: { enumerable: true },
+      json: { enumerable: true },
+      text: { enumerable: true }
+    });
+    var isURLSearchParams = /* @__PURE__ */ __name((obj) => (
+      // Duck-typing as a necessary condition.
+      typeof obj !== "object" || typeof obj.append !== "function" || typeof obj.delete !== "function" || typeof obj.get !== "function" || typeof obj.getAll !== "function" || typeof obj.has !== "function" || typeof obj.set !== "function" ? false : obj.constructor.name === "URLSearchParams" || Object.prototype.toString.call(obj) === "[object URLSearchParams]" || typeof obj.sort === "function"
+    ), "isURLSearchParams");
+    var isBlob = /* @__PURE__ */ __name((obj) => typeof obj === "object" && typeof obj.arrayBuffer === "function" && typeof obj.type === "string" && typeof obj.stream === "function" && typeof obj.constructor === "function" && typeof obj.constructor.name === "string" && /^(Blob|File)$/.test(obj.constructor.name) && /^(Blob|File)$/.test(obj[Symbol.toStringTag]), "isBlob");
+    var convertBody = /* @__PURE__ */ __name((buffer, headers) => {
+      if (typeof convert !== "function") {
+        throw new Error("The package `encoding` must be installed to use the textConverted() function");
+      }
+      const ct = headers && headers.get("content-type");
+      let charset = "utf-8";
+      let res;
+      if (ct) {
+        res = /charset=([^;]*)/i.exec(ct);
+      }
+      const str = buffer.slice(0, 1024).toString();
+      if (!res && str) {
+        res = / {
+      name = `${name}`;
+      if (invalidTokenRegex.test(name) || name === "") {
+        throw new TypeError(`${name} is not a legal HTTP header name`);
+      }
+    }, "validateName");
+    var validateValue = /* @__PURE__ */ __name((value) => {
+      value = `${value}`;
+      if (invalidHeaderCharRegex.test(value)) {
+        throw new TypeError(`${value} is not a legal HTTP header value`);
+      }
+    }, "validateValue");
+    var find = /* @__PURE__ */ __name((map, name) => {
+      name = name.toLowerCase();
+      for (const key in map) {
+        if (key.toLowerCase() === name) {
+          return key;
+        }
+      }
+      return void 0;
+    }, "find");
+    var MAP = Symbol("map");
+    var Headers = class _Headers {
+      static {
+        __name(this, "Headers");
+      }
+      constructor(init = void 0) {
+        this[MAP] = /* @__PURE__ */ Object.create(null);
+        if (init instanceof _Headers) {
+          const rawHeaders = init.raw();
+          const headerNames = Object.keys(rawHeaders);
+          for (const headerName of headerNames) {
+            for (const value of rawHeaders[headerName]) {
+              this.append(headerName, value);
+            }
+          }
+          return;
+        }
+        if (init === void 0 || init === null) {
+          return;
+        }
+        if (typeof init === "object") {
+          const method = init[Symbol.iterator];
+          if (method !== null && method !== void 0) {
+            if (typeof method !== "function") {
+              throw new TypeError("Header pairs must be iterable");
+            }
+            const pairs = [];
+            for (const pair of init) {
+              if (typeof pair !== "object" || typeof pair[Symbol.iterator] !== "function") {
+                throw new TypeError("Each header pair must be iterable");
+              }
+              const arrPair = Array.from(pair);
+              if (arrPair.length !== 2) {
+                throw new TypeError("Each header pair must be a name/value tuple");
+              }
+              pairs.push(arrPair);
+            }
+            for (const pair of pairs) {
+              this.append(pair[0], pair[1]);
+            }
+          } else {
+            for (const key of Object.keys(init)) {
+              this.append(key, init[key]);
+            }
+          }
+        } else {
+          throw new TypeError("Provided initializer must be an object");
+        }
+      }
+      get(name) {
+        name = `${name}`;
+        validateName(name);
+        const key = find(this[MAP], name);
+        if (key === void 0) {
+          return null;
+        }
+        return this[MAP][key].join(", ");
+      }
+      forEach(callback, thisArg = void 0) {
+        let pairs = getHeaders(this);
+        for (let i = 0; i < pairs.length; i++) {
+          const [name, value] = pairs[i];
+          callback.call(thisArg, value, name, this);
+          pairs = getHeaders(this);
+        }
+      }
+      set(name, value) {
+        name = `${name}`;
+        value = `${value}`;
+        validateName(name);
+        validateValue(value);
+        const key = find(this[MAP], name);
+        this[MAP][key !== void 0 ? key : name] = [value];
+      }
+      append(name, value) {
+        name = `${name}`;
+        value = `${value}`;
+        validateName(name);
+        validateValue(value);
+        const key = find(this[MAP], name);
+        if (key !== void 0) {
+          this[MAP][key].push(value);
+        } else {
+          this[MAP][name] = [value];
+        }
+      }
+      has(name) {
+        name = `${name}`;
+        validateName(name);
+        return find(this[MAP], name) !== void 0;
+      }
+      delete(name) {
+        name = `${name}`;
+        validateName(name);
+        const key = find(this[MAP], name);
+        if (key !== void 0) {
+          delete this[MAP][key];
+        }
+      }
+      raw() {
+        return this[MAP];
+      }
+      keys() {
+        return new HeadersIterator(this, "key");
+      }
+      values() {
+        return new HeadersIterator(this, "value");
+      }
+      [Symbol.iterator]() {
+        return new HeadersIterator(this, "key+value");
+      }
+      entries() {
+        return new HeadersIterator(this, "key+value");
+      }
+      get [Symbol.toStringTag]() {
+        return "Headers";
+      }
+      static exportNodeCompatibleHeaders(headers) {
+        const obj = Object.assign(/* @__PURE__ */ Object.create(null), headers[MAP]);
+        const hostHeaderKey = find(headers[MAP], "Host");
+        if (hostHeaderKey !== void 0) {
+          obj[hostHeaderKey] = obj[hostHeaderKey][0];
+        }
+        return obj;
+      }
+      static createHeadersLenient(obj) {
+        const headers = new _Headers();
+        for (const name of Object.keys(obj)) {
+          if (invalidTokenRegex.test(name)) {
+            continue;
+          }
+          if (Array.isArray(obj[name])) {
+            for (const val of obj[name]) {
+              if (invalidHeaderCharRegex.test(val)) {
+                continue;
+              }
+              if (headers[MAP][name] === void 0) {
+                headers[MAP][name] = [val];
+              } else {
+                headers[MAP][name].push(val);
+              }
+            }
+          } else if (!invalidHeaderCharRegex.test(obj[name])) {
+            headers[MAP][name] = [obj[name]];
+          }
+        }
+        return headers;
+      }
+    };
+    Object.defineProperties(Headers.prototype, {
+      get: { enumerable: true },
+      forEach: { enumerable: true },
+      set: { enumerable: true },
+      append: { enumerable: true },
+      has: { enumerable: true },
+      delete: { enumerable: true },
+      keys: { enumerable: true },
+      values: { enumerable: true },
+      entries: { enumerable: true }
+    });
+    var getHeaders = /* @__PURE__ */ __name((headers, kind = "key+value") => Object.keys(headers[MAP]).sort().map(
+      kind === "key" ? (k) => k.toLowerCase() : kind === "value" ? (k) => headers[MAP][k].join(", ") : (k) => [k.toLowerCase(), headers[MAP][k].join(", ")]
+    ), "getHeaders");
+    var INTERNAL = Symbol("internal");
+    var HeadersIterator = class _HeadersIterator {
+      static {
+        __name(this, "HeadersIterator");
+      }
+      constructor(target, kind) {
+        this[INTERNAL] = {
+          target,
+          kind,
+          index: 0
+        };
+      }
+      get [Symbol.toStringTag]() {
+        return "HeadersIterator";
+      }
+      next() {
+        if (!this || Object.getPrototypeOf(this) !== _HeadersIterator.prototype) {
+          throw new TypeError("Value of `this` is not a HeadersIterator");
+        }
+        const { target, kind, index } = this[INTERNAL];
+        const values = getHeaders(target, kind);
+        const len = values.length;
+        if (index >= len) {
+          return {
+            value: void 0,
+            done: true
+          };
+        }
+        this[INTERNAL].index++;
+        return { value: values[index], done: false };
+      }
+    };
+    Object.setPrototypeOf(
+      HeadersIterator.prototype,
+      Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))
+    );
+    module2.exports = Headers;
+  }
+});
+
+// node_modules/.pnpm/minipass-fetch@4.0.1/node_modules/minipass-fetch/lib/response.js
+var require_response = __commonJS({
+  "node_modules/.pnpm/minipass-fetch@4.0.1/node_modules/minipass-fetch/lib/response.js"(exports2, module2) {
+    "use strict";
+    var http = require("http");
+    var { STATUS_CODES } = http;
+    var Headers = require_headers();
+    var Body = require_body();
+    var { clone, extractContentType } = Body;
+    var INTERNALS = Symbol("Response internals");
+    var Response = class _Response extends Body {
+      static {
+        __name(this, "Response");
+      }
+      constructor(body = null, opts = {}) {
+        super(body, opts);
+        const status = opts.status || 200;
+        const headers = new Headers(opts.headers);
+        if (body !== null && body !== void 0 && !headers.has("Content-Type")) {
+          const contentType = extractContentType(body);
+          if (contentType) {
+            headers.append("Content-Type", contentType);
+          }
+        }
+        this[INTERNALS] = {
+          url: opts.url,
+          status,
+          statusText: opts.statusText || STATUS_CODES[status],
+          headers,
+          counter: opts.counter,
+          trailer: Promise.resolve(opts.trailer || new Headers())
+        };
+      }
+      get trailer() {
+        return this[INTERNALS].trailer;
+      }
+      get url() {
+        return this[INTERNALS].url || "";
+      }
+      get status() {
+        return this[INTERNALS].status;
+      }
+      get ok() {
+        return this[INTERNALS].status >= 200 && this[INTERNALS].status < 300;
+      }
+      get redirected() {
+        return this[INTERNALS].counter > 0;
+      }
+      get statusText() {
+        return this[INTERNALS].statusText;
+      }
+      get headers() {
+        return this[INTERNALS].headers;
+      }
+      clone() {
+        return new _Response(clone(this), {
+          url: this.url,
+          status: this.status,
+          statusText: this.statusText,
+          headers: this.headers,
+          ok: this.ok,
+          redirected: this.redirected,
+          trailer: this.trailer
+        });
+      }
+      get [Symbol.toStringTag]() {
+        return "Response";
+      }
+    };
+    module2.exports = Response;
+    Object.defineProperties(Response.prototype, {
+      url: { enumerable: true },
+      status: { enumerable: true },
+      ok: { enumerable: true },
+      redirected: { enumerable: true },
+      statusText: { enumerable: true },
+      headers: { enumerable: true },
+      clone: { enumerable: true }
+    });
+  }
+});
+
+// node_modules/.pnpm/minipass-fetch@4.0.1/node_modules/minipass-fetch/package.json
+var require_package2 = __commonJS({
+  "node_modules/.pnpm/minipass-fetch@4.0.1/node_modules/minipass-fetch/package.json"(exports2, module2) {
+    module2.exports = {
+      name: "minipass-fetch",
+      version: "4.0.1",
+      description: "An implementation of window.fetch in Node.js using Minipass streams",
+      license: "MIT",
+      main: "lib/index.js",
+      scripts: {
+        "test:tls-fixtures": "./test/fixtures/tls/setup.sh",
+        test: "tap",
+        snap: "tap",
+        lint: "npm run eslint",
+        postlint: "template-oss-check",
+        lintfix: "npm run eslint -- --fix",
+        posttest: "npm run lint",
+        "template-oss-apply": "template-oss-apply --force",
+        eslint: 'eslint "**/*.{js,cjs,ts,mjs,jsx,tsx}"'
+      },
+      tap: {
+        "coverage-map": "map.js",
+        "check-coverage": true,
+        "nyc-arg": [
+          "--exclude",
+          "tap-snapshots/**"
+        ]
+      },
+      devDependencies: {
+        "@npmcli/eslint-config": "^5.0.0",
+        "@npmcli/template-oss": "4.23.3",
+        "@ungap/url-search-params": "^0.2.2",
+        "abort-controller": "^3.0.0",
+        "abortcontroller-polyfill": "~1.7.3",
+        encoding: "^0.1.13",
+        "form-data": "^4.0.0",
+        nock: "^13.2.4",
+        parted: "^0.1.1",
+        "string-to-arraybuffer": "^1.0.2",
+        tap: "^16.0.0"
+      },
+      dependencies: {
+        minipass: "^7.0.3",
+        "minipass-sized": "^1.0.3",
+        minizlib: "^3.0.1"
+      },
+      optionalDependencies: {
+        encoding: "^0.1.13"
+      },
+      repository: {
+        type: "git",
+        url: "git+https://github.com/npm/minipass-fetch.git"
+      },
+      keywords: [
+        "fetch",
+        "minipass",
+        "node-fetch",
+        "window.fetch"
+      ],
+      files: [
+        "bin/",
+        "lib/"
+      ],
+      engines: {
+        node: "^18.17.0 || >=20.5.0"
+      },
+      author: "GitHub Inc.",
+      templateOSS: {
+        "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+        version: "4.23.3",
+        publish: "true"
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/minipass-fetch@4.0.1/node_modules/minipass-fetch/lib/request.js
+var require_request = __commonJS({
+  "node_modules/.pnpm/minipass-fetch@4.0.1/node_modules/minipass-fetch/lib/request.js"(exports2, module2) {
+    "use strict";
+    var { URL: URL2 } = require("url");
+    var { Minipass } = require_commonjs5();
+    var Headers = require_headers();
+    var { exportNodeCompatibleHeaders } = Headers;
+    var Body = require_body();
+    var { clone, extractContentType, getTotalBytes } = Body;
+    var version = require_package2().version;
+    var defaultUserAgent = `minipass-fetch/${version} (+https://github.com/isaacs/minipass-fetch)`;
+    var INTERNALS = Symbol("Request internals");
+    var isRequest = /* @__PURE__ */ __name((input) => typeof input === "object" && typeof input[INTERNALS] === "object", "isRequest");
+    var isAbortSignal = /* @__PURE__ */ __name((signal) => {
+      const proto = signal && typeof signal === "object" && Object.getPrototypeOf(signal);
+      return !!(proto && proto.constructor.name === "AbortSignal");
+    }, "isAbortSignal");
+    var Request = class _Request extends Body {
+      static {
+        __name(this, "Request");
+      }
+      constructor(input, init = {}) {
+        const parsedURL = isRequest(input) ? new URL2(input.url) : input && input.href ? new URL2(input.href) : new URL2(`${input}`);
+        if (isRequest(input)) {
+          init = { ...input[INTERNALS], ...init };
+        } else if (!input || typeof input === "string") {
+          input = {};
+        }
+        const method = (init.method || input.method || "GET").toUpperCase();
+        const isGETHEAD = method === "GET" || method === "HEAD";
+        if ((init.body !== null && init.body !== void 0 || isRequest(input) && input.body !== null) && isGETHEAD) {
+          throw new TypeError("Request with GET/HEAD method cannot have body");
+        }
+        const inputBody = init.body !== null && init.body !== void 0 ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;
+        super(inputBody, {
+          timeout: init.timeout || input.timeout || 0,
+          size: init.size || input.size || 0
+        });
+        const headers = new Headers(init.headers || input.headers || {});
+        if (inputBody !== null && inputBody !== void 0 && !headers.has("Content-Type")) {
+          const contentType = extractContentType(inputBody);
+          if (contentType) {
+            headers.append("Content-Type", contentType);
+          }
+        }
+        const signal = "signal" in init ? init.signal : null;
+        if (signal !== null && signal !== void 0 && !isAbortSignal(signal)) {
+          throw new TypeError("Expected signal must be an instanceof AbortSignal");
+        }
+        const {
+          ca,
+          cert,
+          ciphers,
+          clientCertEngine,
+          crl,
+          dhparam,
+          ecdhCurve,
+          family,
+          honorCipherOrder,
+          key,
+          passphrase,
+          pfx,
+          rejectUnauthorized = process.env.NODE_TLS_REJECT_UNAUTHORIZED !== "0",
+          secureOptions,
+          secureProtocol,
+          servername,
+          sessionIdContext
+        } = init;
+        this[INTERNALS] = {
+          method,
+          redirect: init.redirect || input.redirect || "follow",
+          headers,
+          parsedURL,
+          signal,
+          ca,
+          cert,
+          ciphers,
+          clientCertEngine,
+          crl,
+          dhparam,
+          ecdhCurve,
+          family,
+          honorCipherOrder,
+          key,
+          passphrase,
+          pfx,
+          rejectUnauthorized,
+          secureOptions,
+          secureProtocol,
+          servername,
+          sessionIdContext
+        };
+        this.follow = init.follow !== void 0 ? init.follow : input.follow !== void 0 ? input.follow : 20;
+        this.compress = init.compress !== void 0 ? init.compress : input.compress !== void 0 ? input.compress : true;
+        this.counter = init.counter || input.counter || 0;
+        this.agent = init.agent || input.agent;
+      }
+      get method() {
+        return this[INTERNALS].method;
+      }
+      get url() {
+        return this[INTERNALS].parsedURL.toString();
+      }
+      get headers() {
+        return this[INTERNALS].headers;
+      }
+      get redirect() {
+        return this[INTERNALS].redirect;
+      }
+      get signal() {
+        return this[INTERNALS].signal;
+      }
+      clone() {
+        return new _Request(this);
+      }
+      get [Symbol.toStringTag]() {
+        return "Request";
+      }
+      static getNodeRequestOptions(request) {
+        const parsedURL = request[INTERNALS].parsedURL;
+        const headers = new Headers(request[INTERNALS].headers);
+        if (!headers.has("Accept")) {
+          headers.set("Accept", "*/*");
+        }
+        if (!/^https?:$/.test(parsedURL.protocol)) {
+          throw new TypeError("Only HTTP(S) protocols are supported");
+        }
+        if (request.signal && Minipass.isStream(request.body) && typeof request.body.destroy !== "function") {
+          throw new Error(
+            "Cancellation of streamed requests with AbortSignal is not supported"
+          );
+        }
+        const contentLengthValue = (request.body === null || request.body === void 0) && /^(POST|PUT)$/i.test(request.method) ? "0" : request.body !== null && request.body !== void 0 ? getTotalBytes(request) : null;
+        if (contentLengthValue) {
+          headers.set("Content-Length", contentLengthValue + "");
+        }
+        if (!headers.has("User-Agent")) {
+          headers.set("User-Agent", defaultUserAgent);
+        }
+        if (request.compress && !headers.has("Accept-Encoding")) {
+          headers.set("Accept-Encoding", "gzip,deflate");
+        }
+        const agent = typeof request.agent === "function" ? request.agent(parsedURL) : request.agent;
+        if (!headers.has("Connection") && !agent) {
+          headers.set("Connection", "close");
+        }
+        const {
+          ca,
+          cert,
+          ciphers,
+          clientCertEngine,
+          crl,
+          dhparam,
+          ecdhCurve,
+          family,
+          honorCipherOrder,
+          key,
+          passphrase,
+          pfx,
+          rejectUnauthorized,
+          secureOptions,
+          secureProtocol,
+          servername,
+          sessionIdContext
+        } = request[INTERNALS];
+        const urlProps = {
+          auth: parsedURL.username || parsedURL.password ? `${parsedURL.username}:${parsedURL.password}` : "",
+          host: parsedURL.host,
+          hostname: parsedURL.hostname,
+          path: `${parsedURL.pathname}${parsedURL.search}`,
+          port: parsedURL.port,
+          protocol: parsedURL.protocol
+        };
+        return {
+          ...urlProps,
+          method: request.method,
+          headers: exportNodeCompatibleHeaders(headers),
+          agent,
+          ca,
+          cert,
+          ciphers,
+          clientCertEngine,
+          crl,
+          dhparam,
+          ecdhCurve,
+          family,
+          honorCipherOrder,
+          key,
+          passphrase,
+          pfx,
+          rejectUnauthorized,
+          secureOptions,
+          secureProtocol,
+          servername,
+          sessionIdContext,
+          timeout: request.timeout
+        };
+      }
+    };
+    module2.exports = Request;
+    Object.defineProperties(Request.prototype, {
+      method: { enumerable: true },
+      url: { enumerable: true },
+      headers: { enumerable: true },
+      redirect: { enumerable: true },
+      clone: { enumerable: true },
+      signal: { enumerable: true }
+    });
+  }
+});
+
+// node_modules/.pnpm/minipass-fetch@4.0.1/node_modules/minipass-fetch/lib/abort-error.js
+var require_abort_error = __commonJS({
+  "node_modules/.pnpm/minipass-fetch@4.0.1/node_modules/minipass-fetch/lib/abort-error.js"(exports2, module2) {
+    "use strict";
+    var AbortError = class extends Error {
+      static {
+        __name(this, "AbortError");
+      }
+      constructor(message) {
+        super(message);
+        this.code = "FETCH_ABORTED";
+        this.type = "aborted";
+        Error.captureStackTrace(this, this.constructor);
+      }
+      get name() {
+        return "AbortError";
+      }
+      // don't allow name to be overridden, but don't throw either
+      set name(s) {
+      }
+    };
+    module2.exports = AbortError;
+  }
+});
+
+// node_modules/.pnpm/minipass-fetch@4.0.1/node_modules/minipass-fetch/lib/index.js
+var require_lib24 = __commonJS({
+  "node_modules/.pnpm/minipass-fetch@4.0.1/node_modules/minipass-fetch/lib/index.js"(exports2, module2) {
+    "use strict";
+    var { URL: URL2 } = require("url");
+    var http = require("http");
+    var https = require("https");
+    var zlib = require_commonjs8();
+    var { Minipass } = require_commonjs5();
+    var Body = require_body();
+    var { writeToStream, getTotalBytes } = Body;
+    var Response = require_response();
+    var Headers = require_headers();
+    var { createHeadersLenient } = Headers;
+    var Request = require_request();
+    var { getNodeRequestOptions } = Request;
+    var FetchError = require_fetch_error();
+    var AbortError = require_abort_error();
+    var fetch = /* @__PURE__ */ __name(async (url, opts) => {
+      if (/^data:/.test(url)) {
+        const request = new Request(url, opts);
+        return Promise.resolve().then(() => new Promise((resolve, reject) => {
+          let type, data;
+          try {
+            const { pathname, search } = new URL2(url);
+            const split = pathname.split(",");
+            if (split.length < 2) {
+              throw new Error("invalid data: URI");
+            }
+            const mime = split.shift();
+            const base64 = /;base64$/.test(mime);
+            type = base64 ? mime.slice(0, -1 * ";base64".length) : mime;
+            const rawData = decodeURIComponent(split.join(",") + search);
+            data = base64 ? Buffer.from(rawData, "base64") : Buffer.from(rawData);
+          } catch (er) {
+            return reject(new FetchError(`[${request.method}] ${request.url} invalid URL, ${er.message}`, "system", er));
+          }
+          const { signal } = request;
+          if (signal && signal.aborted) {
+            return reject(new AbortError("The user aborted a request."));
+          }
+          const headers = { "Content-Length": data.length };
+          if (type) {
+            headers["Content-Type"] = type;
+          }
+          return resolve(new Response(data, { headers }));
+        }));
+      }
+      return new Promise((resolve, reject) => {
+        const request = new Request(url, opts);
+        let options;
+        try {
+          options = getNodeRequestOptions(request);
+        } catch (er) {
+          return reject(er);
+        }
+        const send = (options.protocol === "https:" ? https : http).request;
+        const { signal } = request;
+        let response = null;
+        const abort = /* @__PURE__ */ __name(() => {
+          const error = new AbortError("The user aborted a request.");
+          reject(error);
+          if (Minipass.isStream(request.body) && typeof request.body.destroy === "function") {
+            request.body.destroy(error);
+          }
+          if (response && response.body) {
+            response.body.emit("error", error);
+          }
+        }, "abort");
+        if (signal && signal.aborted) {
+          return abort();
+        }
+        const abortAndFinalize = /* @__PURE__ */ __name(() => {
+          abort();
+          finalize();
+        }, "abortAndFinalize");
+        const finalize = /* @__PURE__ */ __name(() => {
+          req.abort();
+          if (signal) {
+            signal.removeEventListener("abort", abortAndFinalize);
+          }
+          clearTimeout(reqTimeout);
+        }, "finalize");
+        const req = send(options);
+        if (signal) {
+          signal.addEventListener("abort", abortAndFinalize);
+        }
+        let reqTimeout = null;
+        if (request.timeout) {
+          req.once("socket", () => {
+            reqTimeout = setTimeout(() => {
+              reject(new FetchError(`network timeout at: ${request.url}`, "request-timeout"));
+              finalize();
+            }, request.timeout);
+          });
+        }
+        req.on("error", (er) => {
+          if (req.res) {
+            req.res.emit("error", er);
+          }
+          reject(new FetchError(`request to ${request.url} failed, reason: ${er.message}`, "system", er));
+          finalize();
+        });
+        req.on("response", (res) => {
+          clearTimeout(reqTimeout);
+          const headers = createHeadersLenient(res.headers);
+          if (fetch.isRedirect(res.statusCode)) {
+            const location = headers.get("Location");
+            let locationURL = null;
+            try {
+              locationURL = location === null ? null : new URL2(location, request.url).toString();
+            } catch {
+              if (request.redirect !== "manual") {
+                reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, "invalid-redirect"));
+                finalize();
+                return;
+              }
+            }
+            if (request.redirect === "error") {
+              reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, "no-redirect"));
+              finalize();
+              return;
+            } else if (request.redirect === "manual") {
+              if (locationURL !== null) {
+                try {
+                  headers.set("Location", locationURL);
+                } catch (err) {
+                  reject(err);
+                }
+              }
+            } else if (request.redirect === "follow" && locationURL !== null) {
+              if (request.counter >= request.follow) {
+                reject(new FetchError(`maximum redirect reached at: ${request.url}`, "max-redirect"));
+                finalize();
+                return;
+              }
+              if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {
+                reject(new FetchError(
+                  "Cannot follow redirect with body being a readable stream",
+                  "unsupported-redirect"
+                ));
+                finalize();
+                return;
+              }
+              request.headers.set("host", new URL2(locationURL).host);
+              const requestOpts = {
+                headers: new Headers(request.headers),
+                follow: request.follow,
+                counter: request.counter + 1,
+                agent: request.agent,
+                compress: request.compress,
+                method: request.method,
+                body: request.body,
+                signal: request.signal,
+                timeout: request.timeout
+              };
+              const parsedOriginal = new URL2(request.url);
+              const parsedRedirect = new URL2(locationURL);
+              if (parsedOriginal.hostname !== parsedRedirect.hostname) {
+                requestOpts.headers.delete("authorization");
+                requestOpts.headers.delete("cookie");
+              }
+              if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === "POST") {
+                requestOpts.method = "GET";
+                requestOpts.body = void 0;
+                requestOpts.headers.delete("content-length");
+              }
+              resolve(fetch(new Request(locationURL, requestOpts)));
+              finalize();
+              return;
+            }
+          }
+          res.once("end", () => signal && signal.removeEventListener("abort", abortAndFinalize));
+          const body = new Minipass();
+          body.on("error", finalize);
+          res.on(
+            "error",
+            /* istanbul ignore next */
+            (er) => body.emit("error", er)
+          );
+          res.on("data", (chunk) => body.write(chunk));
+          res.on("end", () => body.end());
+          const responseOptions = {
+            url: request.url,
+            status: res.statusCode,
+            statusText: res.statusMessage,
+            headers,
+            size: request.size,
+            timeout: request.timeout,
+            counter: request.counter,
+            trailer: new Promise((resolveTrailer) => res.on("end", () => resolveTrailer(createHeadersLenient(res.trailers))))
+          };
+          const codings = headers.get("Content-Encoding");
+          if (!request.compress || request.method === "HEAD" || codings === null || res.statusCode === 204 || res.statusCode === 304) {
+            response = new Response(body, responseOptions);
+            resolve(response);
+            return;
+          }
+          const zlibOptions = {
+            flush: zlib.constants.Z_SYNC_FLUSH,
+            finishFlush: zlib.constants.Z_SYNC_FLUSH
+          };
+          if (codings === "gzip" || codings === "x-gzip") {
+            const unzip = new zlib.Gunzip(zlibOptions);
+            response = new Response(
+              // exceedingly rare that the stream would have an error,
+              // but just in case we proxy it to the stream in use.
+              body.on(
+                "error",
+                /* istanbul ignore next */
+                (er) => unzip.emit("error", er)
+              ).pipe(unzip),
+              responseOptions
+            );
+            resolve(response);
+            return;
+          }
+          if (codings === "deflate" || codings === "x-deflate") {
+            res.once("data", (chunk) => {
+              const decoder2 = (chunk[0] & 15) === 8 ? new zlib.Inflate() : new zlib.InflateRaw();
+              body.on(
+                "error",
+                /* istanbul ignore next */
+                (er) => decoder2.emit("error", er)
+              ).pipe(decoder2);
+              response = new Response(decoder2, responseOptions);
+              resolve(response);
+            });
+            return;
+          }
+          if (codings === "br") {
+            try {
+              var decoder = new zlib.BrotliDecompress();
+            } catch (err) {
+              reject(err);
+              finalize();
+              return;
+            }
+            body.on(
+              "error",
+              /* istanbul ignore next */
+              (er) => decoder.emit("error", er)
+            ).pipe(decoder);
+            response = new Response(decoder, responseOptions);
+            resolve(response);
+            return;
+          }
+          response = new Response(body, responseOptions);
+          resolve(response);
+        });
+        writeToStream(req, request);
+      });
+    }, "fetch");
+    module2.exports = fetch;
+    fetch.isRedirect = (code) => code === 301 || code === 302 || code === 303 || code === 307 || code === 308;
+    fetch.Headers = Headers;
+    fetch.Request = Request;
+    fetch.Response = Response;
+    fetch.FetchError = FetchError;
+    fetch.AbortError = AbortError;
+  }
+});
+
+// node_modules/.pnpm/npm-registry-fetch@19.1.1_supports-color@10.2.2/node_modules/npm-registry-fetch/package.json
+var require_package3 = __commonJS({
+  "node_modules/.pnpm/npm-registry-fetch@19.1.1_supports-color@10.2.2/node_modules/npm-registry-fetch/package.json"(exports2, module2) {
+    module2.exports = {
+      name: "npm-registry-fetch",
+      version: "19.1.1",
+      description: "Fetch-based http client for use with npm registry APIs",
+      main: "lib",
+      files: [
+        "bin/",
+        "lib/"
+      ],
+      scripts: {
+        eslint: 'eslint "**/*.{js,cjs,ts,mjs,jsx,tsx}"',
+        lint: "npm run eslint",
+        lintfix: "npm run eslint -- --fix",
+        test: "tap",
+        posttest: "npm run lint",
+        npmclilint: "npmcli-lint",
+        postsnap: "npm run lintfix --",
+        postlint: "template-oss-check",
+        snap: "tap",
+        "template-oss-apply": "template-oss-apply --force"
+      },
+      repository: {
+        type: "git",
+        url: "git+https://github.com/npm/npm-registry-fetch.git"
+      },
+      keywords: [
+        "npm",
+        "registry",
+        "fetch"
+      ],
+      author: "GitHub Inc.",
+      license: "ISC",
+      dependencies: {
+        "@npmcli/redact": "^4.0.0",
+        jsonparse: "^1.3.1",
+        "make-fetch-happen": "^15.0.0",
+        minipass: "^7.0.2",
+        "minipass-fetch": "^5.0.0",
+        minizlib: "^3.0.1",
+        "npm-package-arg": "^13.0.0",
+        "proc-log": "^6.0.0"
+      },
+      devDependencies: {
+        "@npmcli/eslint-config": "^6.0.0",
+        "@npmcli/template-oss": "4.28.0",
+        cacache: "^20.0.0",
+        nock: "^13.2.4",
+        "require-inject": "^1.4.4",
+        ssri: "^13.0.0",
+        tap: "^16.0.1"
+      },
+      tap: {
+        "check-coverage": true,
+        "test-ignore": "test[\\\\/](util|cache)[\\\\/]",
+        "nyc-arg": [
+          "--exclude",
+          "tap-snapshots/**"
+        ]
+      },
+      engines: {
+        node: "^20.17.0 || >=22.9.0"
+      },
+      templateOSS: {
+        "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+        version: "4.28.0",
+        publish: "true"
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/npm-registry-fetch@19.1.1_supports-color@10.2.2/node_modules/npm-registry-fetch/lib/default-opts.js
+var require_default_opts = __commonJS({
+  "node_modules/.pnpm/npm-registry-fetch@19.1.1_supports-color@10.2.2/node_modules/npm-registry-fetch/lib/default-opts.js"(exports2, module2) {
+    var pkg = require_package3();
+    module2.exports = {
+      maxSockets: 12,
+      method: "GET",
+      registry: "https://registry.npmjs.org/",
+      timeout: 5 * 60 * 1e3,
+      // 5 minutes
+      strictSSL: true,
+      noProxy: process.env.NOPROXY,
+      userAgent: `${pkg.name}@${pkg.version}/node@${process.version}+${process.arch} (${process.platform})`
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+redact@4.0.0/node_modules/@npmcli/redact/lib/matchers.js
+var require_matchers = __commonJS({
+  "node_modules/.pnpm/@npmcli+redact@4.0.0/node_modules/@npmcli/redact/lib/matchers.js"(exports2, module2) {
+    var TYPE_REGEX = "regex";
+    var TYPE_URL = "url";
+    var TYPE_PATH = "path";
+    var NPM_SECRET = {
+      type: TYPE_REGEX,
+      pattern: /\b(npms?_)[a-zA-Z0-9]{36,48}\b/gi,
+      replacement: `[REDACTED_NPM_SECRET]`
+    };
+    var AUTH_HEADER = {
+      type: TYPE_REGEX,
+      pattern: /\b(Basic\s+|Bearer\s+)[\w+=\-.]+\b/gi,
+      replacement: `[REDACTED_AUTH_HEADER]`
+    };
+    var JSON_WEB_TOKEN = {
+      type: TYPE_REGEX,
+      pattern: /\b[A-Za-z0-9-_]{10,}(?!\.\d+\.)\.[A-Za-z0-9-_]{3,}\.[A-Za-z0-9-_]{20,}\b/gi,
+      replacement: `[REDACTED_JSON_WEB_TOKEN]`
+    };
+    var UUID = {
+      type: TYPE_REGEX,
+      pattern: /\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi,
+      replacement: `[REDACTED_UUID]`
+    };
+    var URL_MATCHER = {
+      type: TYPE_REGEX,
+      pattern: /(?:https?|ftp):\/\/[^\s/"$.?#].[^\s"]*/gi,
+      replacement: "[REDACTED_URL]"
+    };
+    var DEEP_HEADER_AUTHORIZATION = {
+      type: TYPE_PATH,
+      predicate: /* @__PURE__ */ __name(({ path }) => path.endsWith(".headers.authorization"), "predicate"),
+      replacement: "[REDACTED_HEADER_AUTHORIZATION]"
+    };
+    var DEEP_HEADER_SET_COOKIE = {
+      type: TYPE_PATH,
+      predicate: /* @__PURE__ */ __name(({ path }) => path.endsWith(".headers.set-cookie"), "predicate"),
+      replacement: "[REDACTED_HEADER_SET_COOKIE]"
+    };
+    var DEEP_HEADER_COOKIE = {
+      type: TYPE_PATH,
+      predicate: /* @__PURE__ */ __name(({ path }) => path.endsWith(".headers.cookie"), "predicate"),
+      replacement: "[REDACTED_HEADER_COOKIE]"
+    };
+    var REWRITE_REQUEST = {
+      type: TYPE_PATH,
+      predicate: /* @__PURE__ */ __name(({ path }) => path.endsWith(".request"), "predicate"),
+      replacement: /* @__PURE__ */ __name((input) => ({
+        method: input?.method,
+        path: input?.path,
+        headers: input?.headers,
+        url: input?.url
+      }), "replacement")
+    };
+    var REWRITE_RESPONSE = {
+      type: TYPE_PATH,
+      predicate: /* @__PURE__ */ __name(({ path }) => path.endsWith(".response"), "predicate"),
+      replacement: /* @__PURE__ */ __name((input) => ({
+        data: input?.data,
+        status: input?.status,
+        headers: input?.headers
+      }), "replacement")
+    };
+    module2.exports = {
+      TYPE_REGEX,
+      TYPE_URL,
+      TYPE_PATH,
+      NPM_SECRET,
+      AUTH_HEADER,
+      JSON_WEB_TOKEN,
+      UUID,
+      URL_MATCHER,
+      DEEP_HEADER_AUTHORIZATION,
+      DEEP_HEADER_SET_COOKIE,
+      DEEP_HEADER_COOKIE,
+      REWRITE_REQUEST,
+      REWRITE_RESPONSE
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+redact@4.0.0/node_modules/@npmcli/redact/lib/utils.js
+var require_utils2 = __commonJS({
+  "node_modules/.pnpm/@npmcli+redact@4.0.0/node_modules/@npmcli/redact/lib/utils.js"(exports2, module2) {
+    var {
+      URL_MATCHER,
+      TYPE_URL,
+      TYPE_REGEX,
+      TYPE_PATH
+    } = require_matchers();
+    var asterisk = /* @__PURE__ */ __name((length = 0) => {
+      length = typeof length === "string" ? length.length : length;
+      if (length < 8) {
+        return "*".repeat(8);
+      }
+      return "*".repeat(length);
+    }, "asterisk");
+    var escapeRegExp = /* @__PURE__ */ __name((text) => {
+      return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, `\\$&`);
+    }, "escapeRegExp");
+    var urlEncodeRegexGroup = /* @__PURE__ */ __name((value) => {
+      const decoded = decodeURIComponent(value);
+      const encoded = encodeURIComponent(value);
+      const union = [.../* @__PURE__ */ new Set([encoded, decoded, value])].map(escapeRegExp).join("|");
+      return union;
+    }, "urlEncodeRegexGroup");
+    var urlEncodeRegexTag = /* @__PURE__ */ __name((strings, ...values) => {
+      let pattern = "";
+      for (let i = 0; i < values.length; i++) {
+        pattern += strings[i] + `(${urlEncodeRegexGroup(values[i])})`;
+      }
+      pattern += strings[strings.length - 1];
+      return new RegExp(pattern);
+    }, "urlEncodeRegexTag");
+    var redactUrlHostnameMatcher = /* @__PURE__ */ __name(({ hostname, replacement } = {}) => ({
+      type: TYPE_URL,
+      predicate: /* @__PURE__ */ __name(({ url }) => url.hostname === hostname, "predicate"),
+      pattern: /* @__PURE__ */ __name(({ url }) => {
+        return urlEncodeRegexTag`(^${url.protocol}//${url.username}:.+@)?${url.hostname}`;
+      }, "pattern"),
+      replacement: `$1${replacement || asterisk()}`
+    }), "redactUrlHostnameMatcher");
+    var redactUrlSearchParamsMatcher = /* @__PURE__ */ __name(({ param, replacement } = {}) => ({
+      type: TYPE_URL,
+      predicate: /* @__PURE__ */ __name(({ url }) => url.searchParams.has(param), "predicate"),
+      pattern: /* @__PURE__ */ __name(({ url }) => urlEncodeRegexTag`(${param}=)${url.searchParams.get(param)}`, "pattern"),
+      replacement: `$1${replacement || asterisk()}`
+    }), "redactUrlSearchParamsMatcher");
+    var redactUrlPasswordMatcher = /* @__PURE__ */ __name(({ replacement } = {}) => ({
+      type: TYPE_URL,
+      predicate: /* @__PURE__ */ __name(({ url }) => url.password, "predicate"),
+      pattern: /* @__PURE__ */ __name(({ url }) => urlEncodeRegexTag`(^${url.protocol}//${url.username}:)${url.password}`, "pattern"),
+      replacement: `$1${replacement || asterisk()}`
+    }), "redactUrlPasswordMatcher");
+    var redactUrlReplacement = /* @__PURE__ */ __name((...matchers) => (subValue) => {
+      try {
+        const url = new URL(subValue);
+        return redactMatchers(...matchers)(subValue, { url });
+      } catch (err) {
+        return subValue;
+      }
+    }, "redactUrlReplacement");
+    var redactUrlMatcher = /* @__PURE__ */ __name((...matchers) => {
+      return {
+        ...URL_MATCHER,
+        replacement: redactUrlReplacement(...matchers)
+      };
+    }, "redactUrlMatcher");
+    var matcherFunctions = {
+      [TYPE_REGEX]: (matcher) => (value) => {
+        if (typeof value === "string") {
+          value = value.replace(matcher.pattern, matcher.replacement);
+        }
+        return value;
+      },
+      [TYPE_URL]: (matcher) => (value, ctx) => {
+        if (typeof value === "string") {
+          try {
+            const url = ctx?.url || new URL(value);
+            const { predicate, pattern } = matcher;
+            const predicateValue = predicate({ url });
+            if (predicateValue) {
+              value = value.replace(pattern({ url }), matcher.replacement);
+            }
+          } catch (_e) {
+            return value;
+          }
+        }
+        return value;
+      },
+      [TYPE_PATH]: (matcher) => (value, ctx) => {
+        const rawPath = ctx?.path;
+        const path = rawPath.join(".").toLowerCase();
+        const { predicate, replacement } = matcher;
+        const replace = typeof replacement === "function" ? replacement : () => replacement;
+        const shouldRun = predicate({ rawPath, path });
+        if (shouldRun) {
+          value = replace(value, { rawPath, path });
+        }
+        return value;
+      }
+    };
+    var redactMatcher = /* @__PURE__ */ __name((matcher) => {
+      return matcherFunctions[matcher.type](matcher);
+    }, "redactMatcher");
+    var redactMatchers = /* @__PURE__ */ __name((...matchers) => (value, ctx) => {
+      const flatMatchers = matchers.flat();
+      return flatMatchers.reduce((result, matcher) => {
+        const fn = typeof matcher === "function" ? matcher : redactMatcher(matcher);
+        return fn(result, ctx);
+      }, value);
+    }, "redactMatchers");
+    var redactDynamicReplacement = /* @__PURE__ */ __name(() => (value, start) => {
+      if (typeof start === "number") {
+        return asterisk(value);
+      }
+      return start + asterisk(value.substring(start.length).length);
+    }, "redactDynamicReplacement");
+    var redactFixedReplacement = /* @__PURE__ */ __name((length) => (_value, start) => {
+      if (typeof start === "number") {
+        return asterisk(length);
+      }
+      return start + asterisk(length);
+    }, "redactFixedReplacement");
+    var redactUrlPassword = /* @__PURE__ */ __name((value, replacement) => {
+      return redactMatchers(redactUrlPasswordMatcher({ replacement }))(value);
+    }, "redactUrlPassword");
+    module2.exports = {
+      asterisk,
+      escapeRegExp,
+      urlEncodeRegexGroup,
+      urlEncodeRegexTag,
+      redactUrlHostnameMatcher,
+      redactUrlSearchParamsMatcher,
+      redactUrlPasswordMatcher,
+      redactUrlMatcher,
+      redactUrlReplacement,
+      redactDynamicReplacement,
+      redactFixedReplacement,
+      redactMatchers,
+      redactUrlPassword
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+redact@4.0.0/node_modules/@npmcli/redact/lib/index.js
+var require_lib25 = __commonJS({
+  "node_modules/.pnpm/@npmcli+redact@4.0.0/node_modules/@npmcli/redact/lib/index.js"(exports2, module2) {
+    var matchers = require_matchers();
+    var { redactUrlPassword } = require_utils2();
+    var REPLACE = "***";
+    var redact = /* @__PURE__ */ __name((value) => {
+      if (typeof value !== "string" || !value) {
+        return value;
+      }
+      return redactUrlPassword(value, REPLACE).replace(matchers.NPM_SECRET.pattern, `npm_${REPLACE}`).replace(matchers.UUID.pattern, REPLACE);
+    }, "redact");
+    var splitAndRedact = /* @__PURE__ */ __name((str) => {
+      const splitChars = /[\s=]/g;
+      let match = null;
+      let result = "";
+      let index = 0;
+      while (match = splitChars.exec(str)) {
+        result += redact(str.slice(index, match.index)) + match[0];
+        index = splitChars.lastIndex;
+      }
+      return result + redact(str.slice(index));
+    }, "splitAndRedact");
+    var redactLog = /* @__PURE__ */ __name((arg) => {
+      if (typeof arg === "string") {
+        return splitAndRedact(arg);
+      } else if (Array.isArray(arg)) {
+        return arg.map((a) => typeof a === "string" ? splitAndRedact(a) : a);
+      }
+      return arg;
+    }, "redactLog");
+    module2.exports = {
+      redact,
+      redactLog
+    };
+  }
+});
+
+// node_modules/.pnpm/npm-registry-fetch@19.1.1_supports-color@10.2.2/node_modules/npm-registry-fetch/lib/check-response.js
+var require_check_response = __commonJS({
+  "node_modules/.pnpm/npm-registry-fetch@19.1.1_supports-color@10.2.2/node_modules/npm-registry-fetch/lib/check-response.js"(exports2, module2) {
+    "use strict";
+    var errors = require_errors3();
+    var { Response } = require_lib24();
+    var defaultOpts = require_default_opts();
+    var { log } = require_lib2();
+    var { redact: cleanUrl } = require_lib25();
+    var moreInfoUrl = "https://github.com/npm/cli/wiki/No-auth-for-URI,-but-auth-present-for-scoped-registry";
+    var checkResponse = /* @__PURE__ */ __name(async ({ method, uri, res, startTime, auth, opts }) => {
+      opts = { ...defaultOpts, ...opts };
+      if (res.headers.has("npm-notice") && !res.headers.has("x-local-cache")) {
+        log.notice("", res.headers.get("npm-notice"));
+      }
+      if (res.status >= 400) {
+        logRequest(method, res, startTime);
+        if (auth && auth.scopeAuthKey && !auth.token && !auth.auth) {
+          log.warn("registry", `No auth for URI, but auth present for scoped registry.
+
+URI: ${uri}
+Scoped Registry Key: ${auth.scopeAuthKey}
+
+More info here: ${moreInfoUrl}`);
+        }
+        return checkErrors(method, res, startTime, opts);
+      } else {
+        res.body.on("end", () => logRequest(method, res, startTime, opts));
+        if (opts.ignoreBody) {
+          res.body.resume();
+          return new Response(null, res);
+        }
+        return res;
+      }
+    }, "checkResponse");
+    module2.exports = checkResponse;
+    function logRequest(method, res, startTime) {
+      const elapsedTime = Date.now() - startTime;
+      const attempt = res.headers.get("x-fetch-attempts");
+      const attemptStr = attempt && attempt > 1 ? ` attempt #${attempt}` : "";
+      const cacheStatus = res.headers.get("x-local-cache-status");
+      const cacheStr = cacheStatus ? ` (cache ${cacheStatus})` : "";
+      const urlStr = cleanUrl(res.url);
+      if (cacheStatus === "hit") {
+        log.http(
+          "cache",
+          `${urlStr} ${elapsedTime}ms${attemptStr}${cacheStr}`
+        );
+      } else {
+        log.http(
+          "fetch",
+          `${method.toUpperCase()} ${res.status} ${urlStr} ${elapsedTime}ms${attemptStr}${cacheStr}`
+        );
+      }
+    }
+    __name(logRequest, "logRequest");
+    function checkErrors(method, res, startTime, opts) {
+      return res.buffer().catch(() => null).then((body) => {
+        let parsed = body;
+        try {
+          parsed = JSON.parse(body.toString("utf8"));
+        } catch {
+        }
+        if (res.status === 401 && res.headers.get("www-authenticate")) {
+          const auth = res.headers.get("www-authenticate").split(/,\s*/).map((s) => s.toLowerCase());
+          if (auth.indexOf("ipaddress") !== -1) {
+            throw new errors.HttpErrorAuthIPAddress(
+              method,
+              res,
+              parsed,
+              opts.spec
+            );
+          } else if (auth.indexOf("otp") !== -1) {
+            throw new errors.HttpErrorAuthOTP(
+              method,
+              res,
+              parsed,
+              opts.spec
+            );
+          } else {
+            throw new errors.HttpErrorAuthUnknown(
+              method,
+              res,
+              parsed,
+              opts.spec
+            );
+          }
+        } else if (res.status === 401 && body != null && /one-time pass/.test(body.toString("utf8"))) {
+          throw new errors.HttpErrorAuthOTP(
+            method,
+            res,
+            parsed,
+            opts.spec
+          );
+        } else {
+          throw new errors.HttpErrorGeneral(
+            method,
+            res,
+            parsed,
+            opts.spec
+          );
+        }
+      });
+    }
+    __name(checkErrors, "checkErrors");
+  }
+});
+
+// node_modules/.pnpm/npm-registry-fetch@19.1.1_supports-color@10.2.2/node_modules/npm-registry-fetch/lib/auth.js
+var require_auth = __commonJS({
+  "node_modules/.pnpm/npm-registry-fetch@19.1.1_supports-color@10.2.2/node_modules/npm-registry-fetch/lib/auth.js"(exports2, module2) {
+    "use strict";
+    var fs = require("fs");
+    var npa = require_npa();
+    var { URL: URL2 } = require("url");
+    var regFromURI = /* @__PURE__ */ __name((uri, opts) => {
+      const parsed = new URL2(uri);
+      let regKey = `//${parsed.host}${parsed.pathname}`;
+      while (regKey.length > "//".length) {
+        const authKey = hasAuth(regKey, opts);
+        if (authKey) {
+          return { regKey, authKey };
+        }
+        regKey = regKey.replace(/([^/]+|\/)$/, "");
+      }
+      return { regKey: false, authKey: null };
+    }, "regFromURI");
+    var hasAuth = /* @__PURE__ */ __name((regKey, opts) => {
+      if (opts[`${regKey}:_authToken`]) {
+        return "_authToken";
+      }
+      if (opts[`${regKey}:_auth`]) {
+        return "_auth";
+      }
+      if (opts[`${regKey}:username`] && opts[`${regKey}:_password`]) {
+        return "username";
+      }
+      if (opts[`${regKey}:certfile`] && opts[`${regKey}:keyfile`]) {
+        return "certfile";
+      }
+      return false;
+    }, "hasAuth");
+    var sameHost = /* @__PURE__ */ __name((a, b) => {
+      const parsedA = new URL2(a);
+      const parsedB = new URL2(b);
+      return parsedA.host === parsedB.host;
+    }, "sameHost");
+    var getRegistry = /* @__PURE__ */ __name((opts) => {
+      const { spec } = opts;
+      const { scope: specScope, subSpec } = spec ? npa(spec) : {};
+      const subSpecScope = subSpec && subSpec.scope;
+      const scope = subSpec ? subSpecScope : specScope;
+      const scopeReg = scope && opts[`${scope}:registry`];
+      return scopeReg || opts.registry;
+    }, "getRegistry");
+    var maybeReadFile = /* @__PURE__ */ __name((file) => {
+      try {
+        return fs.readFileSync(file, "utf8");
+      } catch (er) {
+        if (er.code !== "ENOENT") {
+          throw er;
+        }
+        return null;
+      }
+    }, "maybeReadFile");
+    var getAuth = /* @__PURE__ */ __name((uri, opts = {}) => {
+      const { forceAuth } = opts;
+      if (!uri) {
+        throw new Error("URI is required");
+      }
+      const { regKey, authKey } = regFromURI(uri, forceAuth || opts);
+      if (forceAuth && !regKey) {
+        return new Auth({
+          // if we force auth we don't want to refer back to anything in config
+          regKey: false,
+          authKey: null,
+          scopeAuthKey: null,
+          token: forceAuth._authToken || forceAuth.token,
+          username: forceAuth.username,
+          password: forceAuth._password || forceAuth.password,
+          auth: forceAuth._auth || forceAuth.auth,
+          certfile: forceAuth.certfile,
+          keyfile: forceAuth.keyfile
+        });
+      }
+      if (!regKey) {
+        const registry = getRegistry(opts);
+        if (registry && uri !== registry && sameHost(uri, registry)) {
+          return getAuth(registry, opts);
+        } else if (registry !== opts.registry) {
+          const { regKey: scopeAuthKey, authKey: _authKey } = regFromURI(registry, opts);
+          return new Auth({ scopeAuthKey, regKey: scopeAuthKey, authKey: _authKey });
+        }
+      }
+      const {
+        [`${regKey}:_authToken`]: token,
+        [`${regKey}:username`]: username,
+        [`${regKey}:_password`]: password,
+        [`${regKey}:_auth`]: auth,
+        [`${regKey}:certfile`]: certfile,
+        [`${regKey}:keyfile`]: keyfile
+      } = opts;
+      return new Auth({
+        scopeAuthKey: null,
+        regKey,
+        authKey,
+        token,
+        auth,
+        username,
+        password,
+        certfile,
+        keyfile
+      });
+    }, "getAuth");
+    var Auth = class {
+      static {
+        __name(this, "Auth");
+      }
+      constructor({
+        token,
+        auth,
+        username,
+        password,
+        scopeAuthKey,
+        certfile,
+        keyfile,
+        regKey,
+        authKey
+      }) {
+        this.scopeAuthKey = scopeAuthKey;
+        this.regKey = regKey;
+        this.authKey = authKey;
+        this.token = null;
+        this.auth = null;
+        this.isBasicAuth = false;
+        this.cert = null;
+        this.key = null;
+        if (token) {
+          this.token = token;
+        } else if (auth) {
+          this.auth = auth;
+        } else if (username && password) {
+          const p = Buffer.from(password, "base64").toString("utf8");
+          this.auth = Buffer.from(`${username}:${p}`, "utf8").toString("base64");
+          this.isBasicAuth = true;
+        }
+        if (certfile && keyfile) {
+          const cert = maybeReadFile(certfile, "utf-8");
+          const key = maybeReadFile(keyfile, "utf-8");
+          if (cert && key) {
+            this.cert = cert;
+            this.key = key;
+          }
+        }
+      }
+    };
+    module2.exports = getAuth;
+  }
+});
+
+// node_modules/.pnpm/make-fetch-happen@15.0.5_supports-color@10.2.2/node_modules/make-fetch-happen/lib/options.js
+var require_options2 = __commonJS({
+  "node_modules/.pnpm/make-fetch-happen@15.0.5_supports-color@10.2.2/node_modules/make-fetch-happen/lib/options.js"(exports2, module2) {
+    var dns = require("dns");
+    var conditionalHeaders = [
+      "if-modified-since",
+      "if-none-match",
+      "if-unmodified-since",
+      "if-match",
+      "if-range"
+    ];
+    var configureOptions = /* @__PURE__ */ __name((opts) => {
+      const { strictSSL, ...options } = { ...opts };
+      options.method = options.method ? options.method.toUpperCase() : "GET";
+      if (strictSSL === void 0 || strictSSL === null) {
+        options.rejectUnauthorized = process.env.NODE_TLS_REJECT_UNAUTHORIZED !== "0";
+      } else {
+        options.rejectUnauthorized = strictSSL !== false;
+      }
+      if (!options.retry) {
+        options.retry = { retries: 0 };
+      } else if (typeof options.retry === "string") {
+        const retries = parseInt(options.retry, 10);
+        if (isFinite(retries)) {
+          options.retry = { retries };
+        } else {
+          options.retry = { retries: 0 };
+        }
+      } else if (typeof options.retry === "number") {
+        options.retry = { retries: options.retry };
+      } else {
+        options.retry = { retries: 0, ...options.retry };
+      }
+      options.dns = { ttl: 5 * 60 * 1e3, lookup: dns.lookup, ...options.dns };
+      options.cache = options.cache || "default";
+      if (options.cache === "default") {
+        const hasConditionalHeader = Object.keys(options.headers || {}).some((name) => {
+          return conditionalHeaders.includes(name.toLowerCase());
+        });
+        if (hasConditionalHeader) {
+          options.cache = "no-store";
+        }
+      }
+      options.cacheAdditionalHeaders = options.cacheAdditionalHeaders || [];
+      if (options.cacheManager && !options.cachePath) {
+        options.cachePath = options.cacheManager;
+      }
+      return options;
+    }, "configureOptions");
+    module2.exports = configureOptions;
+  }
+});
+
+// node_modules/.pnpm/http-cache-semantics@4.2.0/node_modules/http-cache-semantics/index.js
+var require_http_cache_semantics = __commonJS({
+  "node_modules/.pnpm/http-cache-semantics@4.2.0/node_modules/http-cache-semantics/index.js"(exports2, module2) {
+    "use strict";
+    var statusCodeCacheableByDefault = /* @__PURE__ */ new Set([
+      200,
+      203,
+      204,
+      206,
+      300,
+      301,
+      308,
+      404,
+      405,
+      410,
+      414,
+      501
+    ]);
+    var understoodStatuses = /* @__PURE__ */ new Set([
+      200,
+      203,
+      204,
+      300,
+      301,
+      302,
+      303,
+      307,
+      308,
+      404,
+      405,
+      410,
+      414,
+      501
+    ]);
+    var errorStatusCodes = /* @__PURE__ */ new Set([
+      500,
+      502,
+      503,
+      504
+    ]);
+    var hopByHopHeaders = {
+      date: true,
+      // included, because we add Age update Date
+      connection: true,
+      "keep-alive": true,
+      "proxy-authenticate": true,
+      "proxy-authorization": true,
+      te: true,
+      trailer: true,
+      "transfer-encoding": true,
+      upgrade: true
+    };
+    var excludedFromRevalidationUpdate = {
+      // Since the old body is reused, it doesn't make sense to change properties of the body
+      "content-length": true,
+      "content-encoding": true,
+      "transfer-encoding": true,
+      "content-range": true
+    };
+    function toNumberOrZero(s) {
+      const n = parseInt(s, 10);
+      return isFinite(n) ? n : 0;
+    }
+    __name(toNumberOrZero, "toNumberOrZero");
+    function isErrorResponse(response) {
+      if (!response) {
+        return true;
+      }
+      return errorStatusCodes.has(response.status);
+    }
+    __name(isErrorResponse, "isErrorResponse");
+    function parseCacheControl(header) {
+      const cc = {};
+      if (!header) return cc;
+      const parts = header.trim().split(/,/);
+      for (const part of parts) {
+        const [k, v] = part.split(/=/, 2);
+        cc[k.trim()] = v === void 0 ? true : v.trim().replace(/^"|"$/g, "");
+      }
+      return cc;
+    }
+    __name(parseCacheControl, "parseCacheControl");
+    function formatCacheControl(cc) {
+      let parts = [];
+      for (const k in cc) {
+        const v = cc[k];
+        parts.push(v === true ? k : k + "=" + v);
+      }
+      if (!parts.length) {
+        return void 0;
+      }
+      return parts.join(", ");
+    }
+    __name(formatCacheControl, "formatCacheControl");
+    module2.exports = class CachePolicy {
+      static {
+        __name(this, "CachePolicy");
+      }
+      /**
+       * Creates a new CachePolicy instance.
+       * @param {HttpRequest} req - Incoming client request.
+       * @param {HttpResponse} res - Received server response.
+       * @param {Object} [options={}] - Configuration options.
+       * @param {boolean} [options.shared=true] - Is the cache shared (a public proxy)? `false` for personal browser caches.
+       * @param {number} [options.cacheHeuristic=0.1] - Fallback heuristic (age fraction) for cache duration.
+       * @param {number} [options.immutableMinTimeToLive=86400000] - Minimum TTL for immutable responses in milliseconds.
+       * @param {boolean} [options.ignoreCargoCult=false] - Detect nonsense cache headers, and override them.
+       * @param {any} [options._fromObject] - Internal parameter for deserialization. Do not use.
+       */
+      constructor(req, res, {
+        shared,
+        cacheHeuristic,
+        immutableMinTimeToLive,
+        ignoreCargoCult,
+        _fromObject
+      } = {}) {
+        if (_fromObject) {
+          this._fromObject(_fromObject);
+          return;
+        }
+        if (!res || !res.headers) {
+          throw Error("Response headers missing");
+        }
+        this._assertRequestHasHeaders(req);
+        this._responseTime = this.now();
+        this._isShared = shared !== false;
+        this._ignoreCargoCult = !!ignoreCargoCult;
+        this._cacheHeuristic = void 0 !== cacheHeuristic ? cacheHeuristic : 0.1;
+        this._immutableMinTtl = void 0 !== immutableMinTimeToLive ? immutableMinTimeToLive : 24 * 3600 * 1e3;
+        this._status = "status" in res ? res.status : 200;
+        this._resHeaders = res.headers;
+        this._rescc = parseCacheControl(res.headers["cache-control"]);
+        this._method = "method" in req ? req.method : "GET";
+        this._url = req.url;
+        this._host = req.headers.host;
+        this._noAuthorization = !req.headers.authorization;
+        this._reqHeaders = res.headers.vary ? req.headers : null;
+        this._reqcc = parseCacheControl(req.headers["cache-control"]);
+        if (this._ignoreCargoCult && "pre-check" in this._rescc && "post-check" in this._rescc) {
+          delete this._rescc["pre-check"];
+          delete this._rescc["post-check"];
+          delete this._rescc["no-cache"];
+          delete this._rescc["no-store"];
+          delete this._rescc["must-revalidate"];
+          this._resHeaders = Object.assign({}, this._resHeaders, {
+            "cache-control": formatCacheControl(this._rescc)
+          });
+          delete this._resHeaders.expires;
+          delete this._resHeaders.pragma;
+        }
+        if (res.headers["cache-control"] == null && /no-cache/.test(res.headers.pragma)) {
+          this._rescc["no-cache"] = true;
+        }
+      }
+      /**
+       * You can monkey-patch it for testing.
+       * @returns {number} Current time in milliseconds.
+       */
+      now() {
+        return Date.now();
+      }
+      /**
+       * Determines if the response is storable in a cache.
+       * @returns {boolean} `false` if can never be cached.
+       */
+      storable() {
+        return !!(!this._reqcc["no-store"] && // A cache MUST NOT store a response to any request, unless:
+        // The request method is understood by the cache and defined as being cacheable, and
+        ("GET" === this._method || "HEAD" === this._method || "POST" === this._method && this._hasExplicitExpiration()) && // the response status code is understood by the cache, and
+        understoodStatuses.has(this._status) && // the "no-store" cache directive does not appear in request or response header fields, and
+        !this._rescc["no-store"] && // the "private" response directive does not appear in the response, if the cache is shared, and
+        (!this._isShared || !this._rescc.private) && // the Authorization header field does not appear in the request, if the cache is shared,
+        (!this._isShared || this._noAuthorization || this._allowsStoringAuthenticated()) && // the response either:
+        // contains an Expires header field, or
+        (this._resHeaders.expires || // contains a max-age response directive, or
+        // contains a s-maxage response directive and the cache is shared, or
+        // contains a public response directive.
+        this._rescc["max-age"] || this._isShared && this._rescc["s-maxage"] || this._rescc.public || // has a status code that is defined as cacheable by default
+        statusCodeCacheableByDefault.has(this._status)));
+      }
+      /**
+       * @returns {boolean} true if expiration is explicitly defined.
+       */
+      _hasExplicitExpiration() {
+        return !!(this._isShared && this._rescc["s-maxage"] || this._rescc["max-age"] || this._resHeaders.expires);
+      }
+      /**
+       * @param {HttpRequest} req - a request
+       * @throws {Error} if the headers are missing.
+       */
+      _assertRequestHasHeaders(req) {
+        if (!req || !req.headers) {
+          throw Error("Request headers missing");
+        }
+      }
+      /**
+       * Checks if the request matches the cache and can be satisfied from the cache immediately,
+       * without having to make a request to the server.
+       *
+       * This doesn't support `stale-while-revalidate`. See `evaluateRequest()` for a more complete solution.
+       *
+       * @param {HttpRequest} req - The new incoming HTTP request.
+       * @returns {boolean} `true`` if the cached response used to construct this cache policy satisfies the request without revalidation.
+       */
+      satisfiesWithoutRevalidation(req) {
+        const result = this.evaluateRequest(req);
+        return !result.revalidation;
+      }
+      /**
+       * @param {{headers: Record, synchronous: boolean}|undefined} revalidation - Revalidation information, if any.
+       * @returns {{response: {headers: Record}, revalidation: {headers: Record, synchronous: boolean}|undefined}} An object with a cached response headers and revalidation info.
+       */
+      _evaluateRequestHitResult(revalidation) {
+        return {
+          response: {
+            headers: this.responseHeaders()
+          },
+          revalidation
+        };
+      }
+      /**
+       * @param {HttpRequest} request - new incoming
+       * @param {boolean} synchronous - whether revalidation must be synchronous (not s-w-r).
+       * @returns {{headers: Record, synchronous: boolean}} An object with revalidation headers and a synchronous flag.
+       */
+      _evaluateRequestRevalidation(request, synchronous) {
+        return {
+          synchronous,
+          headers: this.revalidationHeaders(request)
+        };
+      }
+      /**
+       * @param {HttpRequest} request - new incoming
+       * @returns {{response: undefined, revalidation: {headers: Record, synchronous: boolean}}} An object indicating no cached response and revalidation details.
+       */
+      _evaluateRequestMissResult(request) {
+        return {
+          response: void 0,
+          revalidation: this._evaluateRequestRevalidation(request, true)
+        };
+      }
+      /**
+       * Checks if the given request matches this cache entry, and how the cache can be used to satisfy it. Returns an object with:
+       *
+       * ```
+       * {
+       *     // If defined, you must send a request to the server.
+       *     revalidation: {
+       *         headers: {}, // HTTP headers to use when sending the revalidation response
+       *         // If true, you MUST wait for a response from the server before using the cache
+       *         // If false, this is stale-while-revalidate. The cache is stale, but you can use it while you update it asynchronously.
+       *         synchronous: bool,
+       *     },
+       *     // If defined, you can use this cached response.
+       *     response: {
+       *         headers: {}, // Updated cached HTTP headers you must use when responding to the client
+       *     },
+       * }
+       * ```
+       * @param {HttpRequest} req - new incoming HTTP request
+       * @returns {{response: {headers: Record}|undefined, revalidation: {headers: Record, synchronous: boolean}|undefined}} An object containing keys:
+       *   - revalidation: { headers: Record, synchronous: boolean } Set if you should send this to the origin server
+       *   - response: { headers: Record } Set if you can respond to the client with these cached headers
+       */
+      evaluateRequest(req) {
+        this._assertRequestHasHeaders(req);
+        if (this._rescc["must-revalidate"]) {
+          return this._evaluateRequestMissResult(req);
+        }
+        if (!this._requestMatches(req, false)) {
+          return this._evaluateRequestMissResult(req);
+        }
+        const requestCC = parseCacheControl(req.headers["cache-control"]);
+        if (requestCC["no-cache"] || /no-cache/.test(req.headers.pragma)) {
+          return this._evaluateRequestMissResult(req);
+        }
+        if (requestCC["max-age"] && this.age() > toNumberOrZero(requestCC["max-age"])) {
+          return this._evaluateRequestMissResult(req);
+        }
+        if (requestCC["min-fresh"] && this.maxAge() - this.age() < toNumberOrZero(requestCC["min-fresh"])) {
+          return this._evaluateRequestMissResult(req);
+        }
+        if (this.stale()) {
+          const allowsStaleWithoutRevalidation = "max-stale" in requestCC && (true === requestCC["max-stale"] || requestCC["max-stale"] > this.age() - this.maxAge());
+          if (allowsStaleWithoutRevalidation) {
+            return this._evaluateRequestHitResult(void 0);
+          }
+          if (this.useStaleWhileRevalidate()) {
+            return this._evaluateRequestHitResult(this._evaluateRequestRevalidation(req, false));
+          }
+          return this._evaluateRequestMissResult(req);
+        }
+        return this._evaluateRequestHitResult(void 0);
+      }
+      /**
+       * @param {HttpRequest} req - check if this is for the same cache entry
+       * @param {boolean} allowHeadMethod - allow a HEAD method to match.
+       * @returns {boolean} `true` if the request matches.
+       */
+      _requestMatches(req, allowHeadMethod) {
+        return !!((!this._url || this._url === req.url) && this._host === req.headers.host && // the request method associated with the stored response allows it to be used for the presented request, and
+        (!req.method || this._method === req.method || allowHeadMethod && "HEAD" === req.method) && // selecting header fields nominated by the stored response (if any) match those presented, and
+        this._varyMatches(req));
+      }
+      /**
+       * Determines whether storing authenticated responses is allowed.
+       * @returns {boolean} `true` if allowed.
+       */
+      _allowsStoringAuthenticated() {
+        return !!(this._rescc["must-revalidate"] || this._rescc.public || this._rescc["s-maxage"]);
+      }
+      /**
+       * Checks whether the Vary header in the response matches the new request.
+       * @param {HttpRequest} req - incoming HTTP request
+       * @returns {boolean} `true` if the vary headers match.
+       */
+      _varyMatches(req) {
+        if (!this._resHeaders.vary) {
+          return true;
+        }
+        if (this._resHeaders.vary === "*") {
+          return false;
+        }
+        const fields = this._resHeaders.vary.trim().toLowerCase().split(/\s*,\s*/);
+        for (const name of fields) {
+          if (req.headers[name] !== this._reqHeaders[name]) return false;
+        }
+        return true;
+      }
+      /**
+       * Creates a copy of the given headers without any hop-by-hop headers.
+       * @param {Record} inHeaders - old headers from the cached response
+       * @returns {Record} A new headers object without hop-by-hop headers.
+       */
+      _copyWithoutHopByHopHeaders(inHeaders) {
+        const headers = {};
+        for (const name in inHeaders) {
+          if (hopByHopHeaders[name]) continue;
+          headers[name] = inHeaders[name];
+        }
+        if (inHeaders.connection) {
+          const tokens = inHeaders.connection.trim().split(/\s*,\s*/);
+          for (const name of tokens) {
+            delete headers[name];
+          }
+        }
+        if (headers.warning) {
+          const warnings = headers.warning.split(/,/).filter((warning) => {
+            return !/^\s*1[0-9][0-9]/.test(warning);
+          });
+          if (!warnings.length) {
+            delete headers.warning;
+          } else {
+            headers.warning = warnings.join(",").trim();
+          }
+        }
+        return headers;
+      }
+      /**
+       * Returns the response headers adjusted for serving the cached response.
+       * Removes hop-by-hop headers and updates the Age and Date headers.
+       * @returns {Record} The adjusted response headers.
+       */
+      responseHeaders() {
+        const headers = this._copyWithoutHopByHopHeaders(this._resHeaders);
+        const age = this.age();
+        if (age > 3600 * 24 && !this._hasExplicitExpiration() && this.maxAge() > 3600 * 24) {
+          headers.warning = (headers.warning ? `${headers.warning}, ` : "") + '113 - "rfc7234 5.5.4"';
+        }
+        headers.age = `${Math.round(age)}`;
+        headers.date = new Date(this.now()).toUTCString();
+        return headers;
+      }
+      /**
+       * Returns the Date header value from the response or the current time if invalid.
+       * @returns {number} Timestamp (in milliseconds) representing the Date header or response time.
+       */
+      date() {
+        const serverDate = Date.parse(this._resHeaders.date);
+        if (isFinite(serverDate)) {
+          return serverDate;
+        }
+        return this._responseTime;
+      }
+      /**
+       * Value of the Age header, in seconds, updated for the current time.
+       * May be fractional.
+       * @returns {number} The age in seconds.
+       */
+      age() {
+        let age = this._ageValue();
+        const residentTime = (this.now() - this._responseTime) / 1e3;
+        return age + residentTime;
+      }
+      /**
+       * @returns {number} The Age header value as a number.
+       */
+      _ageValue() {
+        return toNumberOrZero(this._resHeaders.age);
+      }
+      /**
+       * Possibly outdated value of applicable max-age (or heuristic equivalent) in seconds.
+       * This counts since response's `Date`.
+       *
+       * For an up-to-date value, see `timeToLive()`.
+       *
+       * Returns the maximum age (freshness lifetime) of the response in seconds.
+       * @returns {number} The max-age value in seconds.
+       */
+      maxAge() {
+        if (!this.storable() || this._rescc["no-cache"]) {
+          return 0;
+        }
+        if (this._isShared && (this._resHeaders["set-cookie"] && !this._rescc.public && !this._rescc.immutable)) {
+          return 0;
+        }
+        if (this._resHeaders.vary === "*") {
+          return 0;
+        }
+        if (this._isShared) {
+          if (this._rescc["proxy-revalidate"]) {
+            return 0;
+          }
+          if (this._rescc["s-maxage"]) {
+            return toNumberOrZero(this._rescc["s-maxage"]);
+          }
+        }
+        if (this._rescc["max-age"]) {
+          return toNumberOrZero(this._rescc["max-age"]);
+        }
+        const defaultMinTtl = this._rescc.immutable ? this._immutableMinTtl : 0;
+        const serverDate = this.date();
+        if (this._resHeaders.expires) {
+          const expires = Date.parse(this._resHeaders.expires);
+          if (Number.isNaN(expires) || expires < serverDate) {
+            return 0;
+          }
+          return Math.max(defaultMinTtl, (expires - serverDate) / 1e3);
+        }
+        if (this._resHeaders["last-modified"]) {
+          const lastModified = Date.parse(this._resHeaders["last-modified"]);
+          if (isFinite(lastModified) && serverDate > lastModified) {
+            return Math.max(
+              defaultMinTtl,
+              (serverDate - lastModified) / 1e3 * this._cacheHeuristic
+            );
+          }
+        }
+        return defaultMinTtl;
+      }
+      /**
+       * Remaining time this cache entry may be useful for, in *milliseconds*.
+       * You can use this as an expiration time for your cache storage.
+       *
+       * Prefer this method over `maxAge()`, because it includes other factors like `age` and `stale-while-revalidate`.
+       * @returns {number} Time-to-live in milliseconds.
+       */
+      timeToLive() {
+        const age = this.maxAge() - this.age();
+        const staleIfErrorAge = age + toNumberOrZero(this._rescc["stale-if-error"]);
+        const staleWhileRevalidateAge = age + toNumberOrZero(this._rescc["stale-while-revalidate"]);
+        return Math.round(Math.max(0, age, staleIfErrorAge, staleWhileRevalidateAge) * 1e3);
+      }
+      /**
+       * If true, this cache entry is past its expiration date.
+       * Note that stale cache may be useful sometimes, see `evaluateRequest()`.
+       * @returns {boolean} `false` doesn't mean it's fresh nor usable
+       */
+      stale() {
+        return this.maxAge() <= this.age();
+      }
+      /**
+       * @returns {boolean} `true` if `stale-if-error` condition allows use of a stale response.
+       */
+      _useStaleIfError() {
+        return this.maxAge() + toNumberOrZero(this._rescc["stale-if-error"]) > this.age();
+      }
+      /** See `evaluateRequest()` for a more complete solution
+       * @returns {boolean} `true` if `stale-while-revalidate` is currently allowed.
+       */
+      useStaleWhileRevalidate() {
+        const swr = toNumberOrZero(this._rescc["stale-while-revalidate"]);
+        return swr > 0 && this.maxAge() + swr > this.age();
+      }
+      /**
+       * Creates a `CachePolicy` instance from a serialized object.
+       * @param {Object} obj - The serialized object.
+       * @returns {CachePolicy} A new CachePolicy instance.
+       */
+      static fromObject(obj) {
+        return new this(void 0, void 0, { _fromObject: obj });
+      }
+      /**
+       * @param {any} obj - The serialized object.
+       * @throws {Error} If already initialized or if the object is invalid.
+       */
+      _fromObject(obj) {
+        if (this._responseTime) throw Error("Reinitialized");
+        if (!obj || obj.v !== 1) throw Error("Invalid serialization");
+        this._responseTime = obj.t;
+        this._isShared = obj.sh;
+        this._cacheHeuristic = obj.ch;
+        this._immutableMinTtl = obj.imm !== void 0 ? obj.imm : 24 * 3600 * 1e3;
+        this._ignoreCargoCult = !!obj.icc;
+        this._status = obj.st;
+        this._resHeaders = obj.resh;
+        this._rescc = obj.rescc;
+        this._method = obj.m;
+        this._url = obj.u;
+        this._host = obj.h;
+        this._noAuthorization = obj.a;
+        this._reqHeaders = obj.reqh;
+        this._reqcc = obj.reqcc;
+      }
+      /**
+       * Serializes the `CachePolicy` instance into a JSON-serializable object.
+       * @returns {Object} The serialized object.
+       */
+      toObject() {
+        return {
+          v: 1,
+          t: this._responseTime,
+          sh: this._isShared,
+          ch: this._cacheHeuristic,
+          imm: this._immutableMinTtl,
+          icc: this._ignoreCargoCult,
+          st: this._status,
+          resh: this._resHeaders,
+          rescc: this._rescc,
+          m: this._method,
+          u: this._url,
+          h: this._host,
+          a: this._noAuthorization,
+          reqh: this._reqHeaders,
+          reqcc: this._reqcc
+        };
+      }
+      /**
+       * Headers for sending to the origin server to revalidate stale response.
+       * Allows server to return 304 to allow reuse of the previous response.
+       *
+       * Hop by hop headers are always stripped.
+       * Revalidation headers may be added or removed, depending on request.
+       * @param {HttpRequest} incomingReq - The incoming HTTP request.
+       * @returns {Record} The headers for the revalidation request.
+       */
+      revalidationHeaders(incomingReq) {
+        this._assertRequestHasHeaders(incomingReq);
+        const headers = this._copyWithoutHopByHopHeaders(incomingReq.headers);
+        delete headers["if-range"];
+        if (!this._requestMatches(incomingReq, true) || !this.storable()) {
+          delete headers["if-none-match"];
+          delete headers["if-modified-since"];
+          return headers;
+        }
+        if (this._resHeaders.etag) {
+          headers["if-none-match"] = headers["if-none-match"] ? `${headers["if-none-match"]}, ${this._resHeaders.etag}` : this._resHeaders.etag;
+        }
+        const forbidsWeakValidators = headers["accept-ranges"] || headers["if-match"] || headers["if-unmodified-since"] || this._method && this._method != "GET";
+        if (forbidsWeakValidators) {
+          delete headers["if-modified-since"];
+          if (headers["if-none-match"]) {
+            const etags = headers["if-none-match"].split(/,/).filter((etag) => {
+              return !/^\s*W\//.test(etag);
+            });
+            if (!etags.length) {
+              delete headers["if-none-match"];
+            } else {
+              headers["if-none-match"] = etags.join(",").trim();
+            }
+          }
+        } else if (this._resHeaders["last-modified"] && !headers["if-modified-since"]) {
+          headers["if-modified-since"] = this._resHeaders["last-modified"];
+        }
+        return headers;
+      }
+      /**
+       * Creates new CachePolicy with information combined from the previews response,
+       * and the new revalidation response.
+       *
+       * Returns {policy, modified} where modified is a boolean indicating
+       * whether the response body has been modified, and old cached body can't be used.
+       *
+       * @param {HttpRequest} request - The latest HTTP request asking for the cached entry.
+       * @param {HttpResponse} response - The latest revalidation HTTP response from the origin server.
+       * @returns {{policy: CachePolicy, modified: boolean, matches: boolean}} The updated policy and modification status.
+       * @throws {Error} If the response headers are missing.
+       */
+      revalidatedPolicy(request, response) {
+        this._assertRequestHasHeaders(request);
+        if (this._useStaleIfError() && isErrorResponse(response)) {
+          return {
+            policy: this,
+            modified: false,
+            matches: true
+          };
+        }
+        if (!response || !response.headers) {
+          throw Error("Response headers missing");
+        }
+        let matches = false;
+        if (response.status !== void 0 && response.status != 304) {
+          matches = false;
+        } else if (response.headers.etag && !/^\s*W\//.test(response.headers.etag)) {
+          matches = this._resHeaders.etag && this._resHeaders.etag.replace(/^\s*W\//, "") === response.headers.etag;
+        } else if (this._resHeaders.etag && response.headers.etag) {
+          matches = this._resHeaders.etag.replace(/^\s*W\//, "") === response.headers.etag.replace(/^\s*W\//, "");
+        } else if (this._resHeaders["last-modified"]) {
+          matches = this._resHeaders["last-modified"] === response.headers["last-modified"];
+        } else {
+          if (!this._resHeaders.etag && !this._resHeaders["last-modified"] && !response.headers.etag && !response.headers["last-modified"]) {
+            matches = true;
+          }
+        }
+        const optionsCopy = {
+          shared: this._isShared,
+          cacheHeuristic: this._cacheHeuristic,
+          immutableMinTimeToLive: this._immutableMinTtl,
+          ignoreCargoCult: this._ignoreCargoCult
+        };
+        if (!matches) {
+          return {
+            policy: new this.constructor(request, response, optionsCopy),
+            // Client receiving 304 without body, even if it's invalid/mismatched has no option
+            // but to reuse a cached body. We don't have a good way to tell clients to do
+            // error recovery in such case.
+            modified: response.status != 304,
+            matches: false
+          };
+        }
+        const headers = {};
+        for (const k in this._resHeaders) {
+          headers[k] = k in response.headers && !excludedFromRevalidationUpdate[k] ? response.headers[k] : this._resHeaders[k];
+        }
+        const newResponse = Object.assign({}, response, {
+          status: this._status,
+          method: this._method,
+          headers
+        });
+        return {
+          policy: new this.constructor(request, newResponse, optionsCopy),
+          modified: false,
+          matches: true
+        };
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/negotiator@1.0.0/node_modules/negotiator/lib/charset.js
+var require_charset = __commonJS({
+  "node_modules/.pnpm/negotiator@1.0.0/node_modules/negotiator/lib/charset.js"(exports2, module2) {
+    "use strict";
+    module2.exports = preferredCharsets;
+    module2.exports.preferredCharsets = preferredCharsets;
+    var simpleCharsetRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/;
+    function parseAcceptCharset(accept) {
+      var accepts = accept.split(",");
+      for (var i = 0, j = 0; i < accepts.length; i++) {
+        var charset = parseCharset(accepts[i].trim(), i);
+        if (charset) {
+          accepts[j++] = charset;
+        }
+      }
+      accepts.length = j;
+      return accepts;
+    }
+    __name(parseAcceptCharset, "parseAcceptCharset");
+    function parseCharset(str, i) {
+      var match = simpleCharsetRegExp.exec(str);
+      if (!match) return null;
+      var charset = match[1];
+      var q = 1;
+      if (match[2]) {
+        var params = match[2].split(";");
+        for (var j = 0; j < params.length; j++) {
+          var p = params[j].trim().split("=");
+          if (p[0] === "q") {
+            q = parseFloat(p[1]);
+            break;
+          }
+        }
+      }
+      return {
+        charset,
+        q,
+        i
+      };
+    }
+    __name(parseCharset, "parseCharset");
+    function getCharsetPriority(charset, accepted, index) {
+      var priority = { o: -1, q: 0, s: 0 };
+      for (var i = 0; i < accepted.length; i++) {
+        var spec = specify(charset, accepted[i], index);
+        if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
+          priority = spec;
+        }
+      }
+      return priority;
+    }
+    __name(getCharsetPriority, "getCharsetPriority");
+    function specify(charset, spec, index) {
+      var s = 0;
+      if (spec.charset.toLowerCase() === charset.toLowerCase()) {
+        s |= 1;
+      } else if (spec.charset !== "*") {
+        return null;
+      }
+      return {
+        i: index,
+        o: spec.i,
+        q: spec.q,
+        s
+      };
+    }
+    __name(specify, "specify");
+    function preferredCharsets(accept, provided) {
+      var accepts = parseAcceptCharset(accept === void 0 ? "*" : accept || "");
+      if (!provided) {
+        return accepts.filter(isQuality).sort(compareSpecs).map(getFullCharset);
+      }
+      var priorities = provided.map(/* @__PURE__ */ __name(function getPriority(type, index) {
+        return getCharsetPriority(type, accepts, index);
+      }, "getPriority"));
+      return priorities.filter(isQuality).sort(compareSpecs).map(/* @__PURE__ */ __name(function getCharset(priority) {
+        return provided[priorities.indexOf(priority)];
+      }, "getCharset"));
+    }
+    __name(preferredCharsets, "preferredCharsets");
+    function compareSpecs(a, b) {
+      return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0;
+    }
+    __name(compareSpecs, "compareSpecs");
+    function getFullCharset(spec) {
+      return spec.charset;
+    }
+    __name(getFullCharset, "getFullCharset");
+    function isQuality(spec) {
+      return spec.q > 0;
+    }
+    __name(isQuality, "isQuality");
+  }
+});
+
+// node_modules/.pnpm/negotiator@1.0.0/node_modules/negotiator/lib/encoding.js
+var require_encoding2 = __commonJS({
+  "node_modules/.pnpm/negotiator@1.0.0/node_modules/negotiator/lib/encoding.js"(exports2, module2) {
+    "use strict";
+    module2.exports = preferredEncodings;
+    module2.exports.preferredEncodings = preferredEncodings;
+    var simpleEncodingRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/;
+    function parseAcceptEncoding(accept) {
+      var accepts = accept.split(",");
+      var hasIdentity = false;
+      var minQuality = 1;
+      for (var i = 0, j = 0; i < accepts.length; i++) {
+        var encoding = parseEncoding(accepts[i].trim(), i);
+        if (encoding) {
+          accepts[j++] = encoding;
+          hasIdentity = hasIdentity || specify("identity", encoding);
+          minQuality = Math.min(minQuality, encoding.q || 1);
+        }
+      }
+      if (!hasIdentity) {
+        accepts[j++] = {
+          encoding: "identity",
+          q: minQuality,
+          i
+        };
+      }
+      accepts.length = j;
+      return accepts;
+    }
+    __name(parseAcceptEncoding, "parseAcceptEncoding");
+    function parseEncoding(str, i) {
+      var match = simpleEncodingRegExp.exec(str);
+      if (!match) return null;
+      var encoding = match[1];
+      var q = 1;
+      if (match[2]) {
+        var params = match[2].split(";");
+        for (var j = 0; j < params.length; j++) {
+          var p = params[j].trim().split("=");
+          if (p[0] === "q") {
+            q = parseFloat(p[1]);
+            break;
+          }
+        }
+      }
+      return {
+        encoding,
+        q,
+        i
+      };
+    }
+    __name(parseEncoding, "parseEncoding");
+    function getEncodingPriority(encoding, accepted, index) {
+      var priority = { encoding, o: -1, q: 0, s: 0 };
+      for (var i = 0; i < accepted.length; i++) {
+        var spec = specify(encoding, accepted[i], index);
+        if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
+          priority = spec;
+        }
+      }
+      return priority;
+    }
+    __name(getEncodingPriority, "getEncodingPriority");
+    function specify(encoding, spec, index) {
+      var s = 0;
+      if (spec.encoding.toLowerCase() === encoding.toLowerCase()) {
+        s |= 1;
+      } else if (spec.encoding !== "*") {
+        return null;
+      }
+      return {
+        encoding,
+        i: index,
+        o: spec.i,
+        q: spec.q,
+        s
+      };
+    }
+    __name(specify, "specify");
+    function preferredEncodings(accept, provided, preferred) {
+      var accepts = parseAcceptEncoding(accept || "");
+      var comparator = preferred ? /* @__PURE__ */ __name(function comparator2(a, b) {
+        if (a.q !== b.q) {
+          return b.q - a.q;
+        }
+        var aPreferred = preferred.indexOf(a.encoding);
+        var bPreferred = preferred.indexOf(b.encoding);
+        if (aPreferred === -1 && bPreferred === -1) {
+          return b.s - a.s || a.o - b.o || a.i - b.i;
+        }
+        if (aPreferred !== -1 && bPreferred !== -1) {
+          return aPreferred - bPreferred;
+        }
+        return aPreferred === -1 ? 1 : -1;
+      }, "comparator") : compareSpecs;
+      if (!provided) {
+        return accepts.filter(isQuality).sort(comparator).map(getFullEncoding);
+      }
+      var priorities = provided.map(/* @__PURE__ */ __name(function getPriority(type, index) {
+        return getEncodingPriority(type, accepts, index);
+      }, "getPriority"));
+      return priorities.filter(isQuality).sort(comparator).map(/* @__PURE__ */ __name(function getEncoding(priority) {
+        return provided[priorities.indexOf(priority)];
+      }, "getEncoding"));
+    }
+    __name(preferredEncodings, "preferredEncodings");
+    function compareSpecs(a, b) {
+      return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i;
+    }
+    __name(compareSpecs, "compareSpecs");
+    function getFullEncoding(spec) {
+      return spec.encoding;
+    }
+    __name(getFullEncoding, "getFullEncoding");
+    function isQuality(spec) {
+      return spec.q > 0;
+    }
+    __name(isQuality, "isQuality");
+  }
+});
+
+// node_modules/.pnpm/negotiator@1.0.0/node_modules/negotiator/lib/language.js
+var require_language = __commonJS({
+  "node_modules/.pnpm/negotiator@1.0.0/node_modules/negotiator/lib/language.js"(exports2, module2) {
+    "use strict";
+    module2.exports = preferredLanguages;
+    module2.exports.preferredLanguages = preferredLanguages;
+    var simpleLanguageRegExp = /^\s*([^\s\-;]+)(?:-([^\s;]+))?\s*(?:;(.*))?$/;
+    function parseAcceptLanguage(accept) {
+      var accepts = accept.split(",");
+      for (var i = 0, j = 0; i < accepts.length; i++) {
+        var language = parseLanguage(accepts[i].trim(), i);
+        if (language) {
+          accepts[j++] = language;
+        }
+      }
+      accepts.length = j;
+      return accepts;
+    }
+    __name(parseAcceptLanguage, "parseAcceptLanguage");
+    function parseLanguage(str, i) {
+      var match = simpleLanguageRegExp.exec(str);
+      if (!match) return null;
+      var prefix = match[1];
+      var suffix = match[2];
+      var full = prefix;
+      if (suffix) full += "-" + suffix;
+      var q = 1;
+      if (match[3]) {
+        var params = match[3].split(";");
+        for (var j = 0; j < params.length; j++) {
+          var p = params[j].split("=");
+          if (p[0] === "q") q = parseFloat(p[1]);
+        }
+      }
+      return {
+        prefix,
+        suffix,
+        q,
+        i,
+        full
+      };
+    }
+    __name(parseLanguage, "parseLanguage");
+    function getLanguagePriority(language, accepted, index) {
+      var priority = { o: -1, q: 0, s: 0 };
+      for (var i = 0; i < accepted.length; i++) {
+        var spec = specify(language, accepted[i], index);
+        if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
+          priority = spec;
+        }
+      }
+      return priority;
+    }
+    __name(getLanguagePriority, "getLanguagePriority");
+    function specify(language, spec, index) {
+      var p = parseLanguage(language);
+      if (!p) return null;
+      var s = 0;
+      if (spec.full.toLowerCase() === p.full.toLowerCase()) {
+        s |= 4;
+      } else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) {
+        s |= 2;
+      } else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) {
+        s |= 1;
+      } else if (spec.full !== "*") {
+        return null;
+      }
+      return {
+        i: index,
+        o: spec.i,
+        q: spec.q,
+        s
+      };
+    }
+    __name(specify, "specify");
+    function preferredLanguages(accept, provided) {
+      var accepts = parseAcceptLanguage(accept === void 0 ? "*" : accept || "");
+      if (!provided) {
+        return accepts.filter(isQuality).sort(compareSpecs).map(getFullLanguage);
+      }
+      var priorities = provided.map(/* @__PURE__ */ __name(function getPriority(type, index) {
+        return getLanguagePriority(type, accepts, index);
+      }, "getPriority"));
+      return priorities.filter(isQuality).sort(compareSpecs).map(/* @__PURE__ */ __name(function getLanguage(priority) {
+        return provided[priorities.indexOf(priority)];
+      }, "getLanguage"));
+    }
+    __name(preferredLanguages, "preferredLanguages");
+    function compareSpecs(a, b) {
+      return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0;
+    }
+    __name(compareSpecs, "compareSpecs");
+    function getFullLanguage(spec) {
+      return spec.full;
+    }
+    __name(getFullLanguage, "getFullLanguage");
+    function isQuality(spec) {
+      return spec.q > 0;
+    }
+    __name(isQuality, "isQuality");
+  }
+});
+
+// node_modules/.pnpm/negotiator@1.0.0/node_modules/negotiator/lib/mediaType.js
+var require_mediaType = __commonJS({
+  "node_modules/.pnpm/negotiator@1.0.0/node_modules/negotiator/lib/mediaType.js"(exports2, module2) {
+    "use strict";
+    module2.exports = preferredMediaTypes;
+    module2.exports.preferredMediaTypes = preferredMediaTypes;
+    var simpleMediaTypeRegExp = /^\s*([^\s\/;]+)\/([^;\s]+)\s*(?:;(.*))?$/;
+    function parseAccept(accept) {
+      var accepts = splitMediaTypes(accept);
+      for (var i = 0, j = 0; i < accepts.length; i++) {
+        var mediaType = parseMediaType(accepts[i].trim(), i);
+        if (mediaType) {
+          accepts[j++] = mediaType;
+        }
+      }
+      accepts.length = j;
+      return accepts;
+    }
+    __name(parseAccept, "parseAccept");
+    function parseMediaType(str, i) {
+      var match = simpleMediaTypeRegExp.exec(str);
+      if (!match) return null;
+      var params = /* @__PURE__ */ Object.create(null);
+      var q = 1;
+      var subtype = match[2];
+      var type = match[1];
+      if (match[3]) {
+        var kvps = splitParameters(match[3]).map(splitKeyValuePair);
+        for (var j = 0; j < kvps.length; j++) {
+          var pair = kvps[j];
+          var key = pair[0].toLowerCase();
+          var val = pair[1];
+          var value = val && val[0] === '"' && val[val.length - 1] === '"' ? val.slice(1, -1) : val;
+          if (key === "q") {
+            q = parseFloat(value);
+            break;
+          }
+          params[key] = value;
+        }
+      }
+      return {
+        type,
+        subtype,
+        params,
+        q,
+        i
+      };
+    }
+    __name(parseMediaType, "parseMediaType");
+    function getMediaTypePriority(type, accepted, index) {
+      var priority = { o: -1, q: 0, s: 0 };
+      for (var i = 0; i < accepted.length; i++) {
+        var spec = specify(type, accepted[i], index);
+        if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
+          priority = spec;
+        }
+      }
+      return priority;
+    }
+    __name(getMediaTypePriority, "getMediaTypePriority");
+    function specify(type, spec, index) {
+      var p = parseMediaType(type);
+      var s = 0;
+      if (!p) {
+        return null;
+      }
+      if (spec.type.toLowerCase() == p.type.toLowerCase()) {
+        s |= 4;
+      } else if (spec.type != "*") {
+        return null;
+      }
+      if (spec.subtype.toLowerCase() == p.subtype.toLowerCase()) {
+        s |= 2;
+      } else if (spec.subtype != "*") {
+        return null;
+      }
+      var keys = Object.keys(spec.params);
+      if (keys.length > 0) {
+        if (keys.every(function(k) {
+          return spec.params[k] == "*" || (spec.params[k] || "").toLowerCase() == (p.params[k] || "").toLowerCase();
+        })) {
+          s |= 1;
+        } else {
+          return null;
+        }
+      }
+      return {
+        i: index,
+        o: spec.i,
+        q: spec.q,
+        s
+      };
+    }
+    __name(specify, "specify");
+    function preferredMediaTypes(accept, provided) {
+      var accepts = parseAccept(accept === void 0 ? "*/*" : accept || "");
+      if (!provided) {
+        return accepts.filter(isQuality).sort(compareSpecs).map(getFullType);
+      }
+      var priorities = provided.map(/* @__PURE__ */ __name(function getPriority(type, index) {
+        return getMediaTypePriority(type, accepts, index);
+      }, "getPriority"));
+      return priorities.filter(isQuality).sort(compareSpecs).map(/* @__PURE__ */ __name(function getType(priority) {
+        return provided[priorities.indexOf(priority)];
+      }, "getType"));
+    }
+    __name(preferredMediaTypes, "preferredMediaTypes");
+    function compareSpecs(a, b) {
+      return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0;
+    }
+    __name(compareSpecs, "compareSpecs");
+    function getFullType(spec) {
+      return spec.type + "/" + spec.subtype;
+    }
+    __name(getFullType, "getFullType");
+    function isQuality(spec) {
+      return spec.q > 0;
+    }
+    __name(isQuality, "isQuality");
+    function quoteCount(string) {
+      var count = 0;
+      var index = 0;
+      while ((index = string.indexOf('"', index)) !== -1) {
+        count++;
+        index++;
+      }
+      return count;
+    }
+    __name(quoteCount, "quoteCount");
+    function splitKeyValuePair(str) {
+      var index = str.indexOf("=");
+      var key;
+      var val;
+      if (index === -1) {
+        key = str;
+      } else {
+        key = str.slice(0, index);
+        val = str.slice(index + 1);
+      }
+      return [key, val];
+    }
+    __name(splitKeyValuePair, "splitKeyValuePair");
+    function splitMediaTypes(accept) {
+      var accepts = accept.split(",");
+      for (var i = 1, j = 0; i < accepts.length; i++) {
+        if (quoteCount(accepts[j]) % 2 == 0) {
+          accepts[++j] = accepts[i];
+        } else {
+          accepts[j] += "," + accepts[i];
+        }
+      }
+      accepts.length = j + 1;
+      return accepts;
+    }
+    __name(splitMediaTypes, "splitMediaTypes");
+    function splitParameters(str) {
+      var parameters = str.split(";");
+      for (var i = 1, j = 0; i < parameters.length; i++) {
+        if (quoteCount(parameters[j]) % 2 == 0) {
+          parameters[++j] = parameters[i];
+        } else {
+          parameters[j] += ";" + parameters[i];
+        }
+      }
+      parameters.length = j + 1;
+      for (var i = 0; i < parameters.length; i++) {
+        parameters[i] = parameters[i].trim();
+      }
+      return parameters;
+    }
+    __name(splitParameters, "splitParameters");
+  }
+});
+
+// node_modules/.pnpm/negotiator@1.0.0/node_modules/negotiator/index.js
+var require_negotiator = __commonJS({
+  "node_modules/.pnpm/negotiator@1.0.0/node_modules/negotiator/index.js"(exports2, module2) {
+    "use strict";
+    var preferredCharsets = require_charset();
+    var preferredEncodings = require_encoding2();
+    var preferredLanguages = require_language();
+    var preferredMediaTypes = require_mediaType();
+    module2.exports = Negotiator;
+    module2.exports.Negotiator = Negotiator;
+    function Negotiator(request) {
+      if (!(this instanceof Negotiator)) {
+        return new Negotiator(request);
+      }
+      this.request = request;
+    }
+    __name(Negotiator, "Negotiator");
+    Negotiator.prototype.charset = /* @__PURE__ */ __name(function charset(available) {
+      var set = this.charsets(available);
+      return set && set[0];
+    }, "charset");
+    Negotiator.prototype.charsets = /* @__PURE__ */ __name(function charsets(available) {
+      return preferredCharsets(this.request.headers["accept-charset"], available);
+    }, "charsets");
+    Negotiator.prototype.encoding = /* @__PURE__ */ __name(function encoding(available, opts) {
+      var set = this.encodings(available, opts);
+      return set && set[0];
+    }, "encoding");
+    Negotiator.prototype.encodings = /* @__PURE__ */ __name(function encodings(available, options) {
+      var opts = options || {};
+      return preferredEncodings(this.request.headers["accept-encoding"], available, opts.preferred);
+    }, "encodings");
+    Negotiator.prototype.language = /* @__PURE__ */ __name(function language(available) {
+      var set = this.languages(available);
+      return set && set[0];
+    }, "language");
+    Negotiator.prototype.languages = /* @__PURE__ */ __name(function languages(available) {
+      return preferredLanguages(this.request.headers["accept-language"], available);
+    }, "languages");
+    Negotiator.prototype.mediaType = /* @__PURE__ */ __name(function mediaType(available) {
+      var set = this.mediaTypes(available);
+      return set && set[0];
+    }, "mediaType");
+    Negotiator.prototype.mediaTypes = /* @__PURE__ */ __name(function mediaTypes(available) {
+      return preferredMediaTypes(this.request.headers.accept, available);
+    }, "mediaTypes");
+    Negotiator.prototype.preferredCharset = Negotiator.prototype.charset;
+    Negotiator.prototype.preferredCharsets = Negotiator.prototype.charsets;
+    Negotiator.prototype.preferredEncoding = Negotiator.prototype.encoding;
+    Negotiator.prototype.preferredEncodings = Negotiator.prototype.encodings;
+    Negotiator.prototype.preferredLanguage = Negotiator.prototype.language;
+    Negotiator.prototype.preferredLanguages = Negotiator.prototype.languages;
+    Negotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType;
+    Negotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes;
+  }
+});
+
+// node_modules/.pnpm/make-fetch-happen@15.0.5_supports-color@10.2.2/node_modules/make-fetch-happen/lib/cache/policy.js
+var require_policy = __commonJS({
+  "node_modules/.pnpm/make-fetch-happen@15.0.5_supports-color@10.2.2/node_modules/make-fetch-happen/lib/cache/policy.js"(exports2, module2) {
+    var CacheSemantics = require_http_cache_semantics();
+    var Negotiator = require_negotiator();
+    var ssri = require_lib12();
+    var policyOptions = {
+      shared: false,
+      ignoreCargoCult: true
+    };
+    var emptyResponse = { status: 200, headers: {} };
+    var requestObject = /* @__PURE__ */ __name((request) => {
+      const _obj = {
+        method: request.method,
+        url: request.url,
+        headers: {},
+        compress: request.compress
+      };
+      request.headers.forEach((value, key) => {
+        _obj.headers[key] = value;
+      });
+      return _obj;
+    }, "requestObject");
+    var responseObject = /* @__PURE__ */ __name((response) => {
+      const _obj = {
+        status: response.status,
+        headers: {}
+      };
+      response.headers.forEach((value, key) => {
+        _obj.headers[key] = value;
+      });
+      return _obj;
+    }, "responseObject");
+    var CachePolicy = class {
+      static {
+        __name(this, "CachePolicy");
+      }
+      constructor({ entry, request, response, options }) {
+        this.entry = entry;
+        this.request = requestObject(request);
+        this.response = responseObject(response);
+        this.options = options;
+        this.policy = new CacheSemantics(this.request, this.response, policyOptions);
+        if (this.entry) {
+          this.policy._responseTime = this.entry.metadata.time;
+        }
+      }
+      // static method to quickly determine if a request alone is storable
+      static storable(request, options) {
+        if (!options.cachePath) {
+          return false;
+        }
+        if (options.cache === "no-store") {
+          return false;
+        }
+        if (!["GET", "HEAD"].includes(request.method)) {
+          return false;
+        }
+        const policy = new CacheSemantics(requestObject(request), emptyResponse, policyOptions);
+        return policy.storable();
+      }
+      // returns true if the policy satisfies the request
+      satisfies(request) {
+        const _req = requestObject(request);
+        if (this.request.headers.host !== _req.headers.host) {
+          return false;
+        }
+        if (this.request.compress !== _req.compress) {
+          return false;
+        }
+        const negotiatorA = new Negotiator(this.request);
+        const negotiatorB = new Negotiator(_req);
+        if (JSON.stringify(negotiatorA.mediaTypes()) !== JSON.stringify(negotiatorB.mediaTypes())) {
+          return false;
+        }
+        if (JSON.stringify(negotiatorA.languages()) !== JSON.stringify(negotiatorB.languages())) {
+          return false;
+        }
+        if (JSON.stringify(negotiatorA.encodings()) !== JSON.stringify(negotiatorB.encodings())) {
+          return false;
+        }
+        if (this.options.integrity) {
+          return ssri.parse(this.options.integrity).match(this.entry.integrity);
+        }
+        return true;
+      }
+      // returns true if the request and response allow caching
+      storable() {
+        return this.policy.storable();
+      }
+      // NOTE: this is a hack to avoid parsing the cache-control
+      // header ourselves, it returns true if the response's
+      // cache-control contains must-revalidate
+      get mustRevalidate() {
+        return !!this.policy._rescc["must-revalidate"];
+      }
+      // returns true if the cached response requires revalidation
+      // for the given request
+      needsRevalidation(request) {
+        const _req = requestObject(request);
+        _req.method = "GET";
+        return !this.policy.satisfiesWithoutRevalidation(_req);
+      }
+      responseHeaders() {
+        return this.policy.responseHeaders();
+      }
+      // returns a new object containing the appropriate headers
+      // to send a revalidation request
+      revalidationHeaders(request) {
+        const _req = requestObject(request);
+        return this.policy.revalidationHeaders(_req);
+      }
+      // returns true if the request/response was revalidated
+      // successfully. returns false if a new response was received
+      revalidated(request, response) {
+        const _req = requestObject(request);
+        const _res = responseObject(response);
+        const policy = this.policy.revalidatedPolicy(_req, _res);
+        return !policy.modified;
+      }
+    };
+    module2.exports = CachePolicy;
+  }
+});
+
+// node_modules/.pnpm/make-fetch-happen@15.0.5_supports-color@10.2.2/node_modules/make-fetch-happen/lib/cache/errors.js
+var require_errors4 = __commonJS({
+  "node_modules/.pnpm/make-fetch-happen@15.0.5_supports-color@10.2.2/node_modules/make-fetch-happen/lib/cache/errors.js"(exports2, module2) {
+    var NotCachedError = class extends Error {
+      static {
+        __name(this, "NotCachedError");
+      }
+      constructor(url) {
+        super(`request to ${url} failed: cache mode is 'only-if-cached' but no cached response is available.`);
+        this.code = "ENOTCACHED";
+      }
+    };
+    module2.exports = {
+      NotCachedError
+    };
+  }
+});
+
+// node_modules/.pnpm/make-fetch-happen@15.0.5_supports-color@10.2.2/node_modules/make-fetch-happen/lib/pipeline.js
+var require_pipeline = __commonJS({
+  "node_modules/.pnpm/make-fetch-happen@15.0.5_supports-color@10.2.2/node_modules/make-fetch-happen/lib/pipeline.js"(exports2, module2) {
+    "use strict";
+    var MinipassPipeline = require_minipass_pipeline();
+    var CachingMinipassPipeline = class extends MinipassPipeline {
+      static {
+        __name(this, "CachingMinipassPipeline");
+      }
+      #events = [];
+      #data = /* @__PURE__ */ new Map();
+      constructor(opts, ...streams) {
+        super();
+        this.#events = opts.events;
+        if (streams.length) {
+          this.push(...streams);
+        }
+      }
+      on(event, handler) {
+        if (this.#events.includes(event) && this.#data.has(event)) {
+          return handler(...this.#data.get(event));
+        }
+        return super.on(event, handler);
+      }
+      emit(event, ...data) {
+        if (this.#events.includes(event)) {
+          this.#data.set(event, data);
+        }
+        return super.emit(event, ...data);
+      }
+    };
+    module2.exports = CachingMinipassPipeline;
+  }
+});
+
+// node_modules/.pnpm/make-fetch-happen@15.0.5_supports-color@10.2.2/node_modules/make-fetch-happen/lib/cache/key.js
+var require_key = __commonJS({
+  "node_modules/.pnpm/make-fetch-happen@15.0.5_supports-color@10.2.2/node_modules/make-fetch-happen/lib/cache/key.js"(exports2, module2) {
+    var { URL: URL2, format } = require("url");
+    var formatOptions = {
+      auth: false,
+      fragment: false,
+      search: true,
+      unicode: false
+    };
+    var cacheKey = /* @__PURE__ */ __name((request) => {
+      const parsed = new URL2(request.url);
+      return `make-fetch-happen:request-cache:${format(parsed, formatOptions)}`;
+    }, "cacheKey");
+    module2.exports = cacheKey;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+agent@4.0.0_supports-color@10.2.2/node_modules/@npmcli/agent/lib/dns.js
+var require_dns = __commonJS({
+  "node_modules/.pnpm/@npmcli+agent@4.0.0_supports-color@10.2.2/node_modules/@npmcli/agent/lib/dns.js"(exports2, module2) {
+    "use strict";
+    var { LRUCache } = require_commonjs();
+    var dns = require("dns");
+    var cache = new LRUCache({ max: 50 });
+    var getOptions = /* @__PURE__ */ __name(({
+      family = 0,
+      hints = dns.ADDRCONFIG,
+      all = false,
+      verbatim = void 0,
+      ttl = 5 * 60 * 1e3,
+      lookup = dns.lookup
+    }) => ({
+      // hints and lookup are returned since both are top level properties to (net|tls).connect
+      hints,
+      lookup: /* @__PURE__ */ __name((hostname, ...args) => {
+        const callback = args.pop();
+        const lookupOptions = args[0] ?? {};
+        const options = {
+          family,
+          hints,
+          all,
+          verbatim,
+          ...typeof lookupOptions === "number" ? { family: lookupOptions } : lookupOptions
+        };
+        const key = JSON.stringify({ hostname, ...options });
+        if (cache.has(key)) {
+          const cached = cache.get(key);
+          return process.nextTick(callback, null, ...cached);
+        }
+        lookup(hostname, options, (err, ...result) => {
+          if (err) {
+            return callback(err);
+          }
+          cache.set(key, result, { ttl });
+          return callback(null, ...result);
+        });
+      }, "lookup")
+    }), "getOptions");
+    module2.exports = {
+      cache,
+      getOptions
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+agent@4.0.0_supports-color@10.2.2/node_modules/@npmcli/agent/lib/options.js
+var require_options3 = __commonJS({
+  "node_modules/.pnpm/@npmcli+agent@4.0.0_supports-color@10.2.2/node_modules/@npmcli/agent/lib/options.js"(exports2, module2) {
+    "use strict";
+    var dns = require_dns();
+    var normalizeOptions = /* @__PURE__ */ __name((opts) => {
+      const family = parseInt(opts.family ?? "0", 10);
+      const keepAlive = opts.keepAlive ?? true;
+      const normalized = {
+        // nodejs http agent options. these are all the defaults
+        // but kept here to increase the likelihood of cache hits
+        // https://nodejs.org/api/http.html#new-agentoptions
+        keepAliveMsecs: keepAlive ? 1e3 : void 0,
+        maxSockets: opts.maxSockets ?? 15,
+        maxTotalSockets: Infinity,
+        maxFreeSockets: keepAlive ? 256 : void 0,
+        scheduling: "fifo",
+        // then spread the rest of the options
+        ...opts,
+        // we already set these to their defaults that we want
+        family,
+        keepAlive,
+        // our custom timeout options
+        timeouts: {
+          // the standard timeout option is mapped to our idle timeout
+          // and then deleted below
+          idle: opts.timeout ?? 0,
+          connection: 0,
+          response: 0,
+          transfer: 0,
+          ...opts.timeouts
+        },
+        // get the dns options that go at the top level of socket connection
+        ...dns.getOptions({ family, ...opts.dns })
+      };
+      delete normalized.timeout;
+      return normalized;
+    }, "normalizeOptions");
+    var createKey = /* @__PURE__ */ __name((obj) => {
+      let key = "";
+      const sorted = Object.entries(obj).sort((a, b) => a[0] - b[0]);
+      for (let [k, v] of sorted) {
+        if (v == null) {
+          v = "null";
+        } else if (v instanceof URL) {
+          v = v.toString();
+        } else if (typeof v === "object") {
+          v = createKey(v);
+        }
+        key += `${k}:${v}:`;
+      }
+      return key;
+    }, "createKey");
+    var cacheOptions = /* @__PURE__ */ __name(({ secureEndpoint, ...options }) => createKey({
+      secureEndpoint: !!secureEndpoint,
+      // socket connect options
+      family: options.family,
+      hints: options.hints,
+      localAddress: options.localAddress,
+      // tls specific connect options
+      strictSsl: secureEndpoint ? !!options.rejectUnauthorized : false,
+      ca: secureEndpoint ? options.ca : null,
+      cert: secureEndpoint ? options.cert : null,
+      key: secureEndpoint ? options.key : null,
+      // http agent options
+      keepAlive: options.keepAlive,
+      keepAliveMsecs: options.keepAliveMsecs,
+      maxSockets: options.maxSockets,
+      maxTotalSockets: options.maxTotalSockets,
+      maxFreeSockets: options.maxFreeSockets,
+      scheduling: options.scheduling,
+      // timeout options
+      timeouts: options.timeouts,
+      // proxy
+      proxy: options.proxy
+    }), "cacheOptions");
+    module2.exports = {
+      normalizeOptions,
+      cacheOptions
+    };
+  }
+});
+
+// node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js
+var require_ms = __commonJS({
+  "node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js"(exports2, module2) {
+    var s = 1e3;
+    var m = s * 60;
+    var h = m * 60;
+    var d = h * 24;
+    var w = d * 7;
+    var y = d * 365.25;
+    module2.exports = function(val, options) {
+      options = options || {};
+      var type = typeof val;
+      if (type === "string" && val.length > 0) {
+        return parse(val);
+      } else if (type === "number" && isFinite(val)) {
+        return options.long ? fmtLong(val) : fmtShort(val);
+      }
+      throw new Error(
+        "val is not a non-empty string or a valid number. val=" + JSON.stringify(val)
+      );
+    };
+    function parse(str) {
+      str = String(str);
+      if (str.length > 100) {
+        return;
+      }
+      var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
+        str
+      );
+      if (!match) {
+        return;
+      }
+      var n = parseFloat(match[1]);
+      var type = (match[2] || "ms").toLowerCase();
+      switch (type) {
+        case "years":
+        case "year":
+        case "yrs":
+        case "yr":
+        case "y":
+          return n * y;
+        case "weeks":
+        case "week":
+        case "w":
+          return n * w;
+        case "days":
+        case "day":
+        case "d":
+          return n * d;
+        case "hours":
+        case "hour":
+        case "hrs":
+        case "hr":
+        case "h":
+          return n * h;
+        case "minutes":
+        case "minute":
+        case "mins":
+        case "min":
+        case "m":
+          return n * m;
+        case "seconds":
+        case "second":
+        case "secs":
+        case "sec":
+        case "s":
+          return n * s;
+        case "milliseconds":
+        case "millisecond":
+        case "msecs":
+        case "msec":
+        case "ms":
+          return n;
+        default:
+          return void 0;
+      }
+    }
+    __name(parse, "parse");
+    function fmtShort(ms) {
+      var msAbs = Math.abs(ms);
+      if (msAbs >= d) {
+        return Math.round(ms / d) + "d";
+      }
+      if (msAbs >= h) {
+        return Math.round(ms / h) + "h";
+      }
+      if (msAbs >= m) {
+        return Math.round(ms / m) + "m";
+      }
+      if (msAbs >= s) {
+        return Math.round(ms / s) + "s";
+      }
+      return ms + "ms";
+    }
+    __name(fmtShort, "fmtShort");
+    function fmtLong(ms) {
+      var msAbs = Math.abs(ms);
+      if (msAbs >= d) {
+        return plural(ms, msAbs, d, "day");
+      }
+      if (msAbs >= h) {
+        return plural(ms, msAbs, h, "hour");
+      }
+      if (msAbs >= m) {
+        return plural(ms, msAbs, m, "minute");
+      }
+      if (msAbs >= s) {
+        return plural(ms, msAbs, s, "second");
+      }
+      return ms + " ms";
+    }
+    __name(fmtLong, "fmtLong");
+    function plural(ms, msAbs, n, name) {
+      var isPlural = msAbs >= n * 1.5;
+      return Math.round(ms / n) + " " + name + (isPlural ? "s" : "");
+    }
+    __name(plural, "plural");
+  }
+});
+
+// node_modules/.pnpm/debug@4.4.3_supports-color@10.2.2/node_modules/debug/src/common.js
+var require_common = __commonJS({
+  "node_modules/.pnpm/debug@4.4.3_supports-color@10.2.2/node_modules/debug/src/common.js"(exports2, module2) {
+    function setup(env2) {
+      createDebug.debug = createDebug;
+      createDebug.default = createDebug;
+      createDebug.coerce = coerce;
+      createDebug.disable = disable;
+      createDebug.enable = enable;
+      createDebug.enabled = enabled;
+      createDebug.humanize = require_ms();
+      createDebug.destroy = destroy;
+      Object.keys(env2).forEach((key) => {
+        createDebug[key] = env2[key];
+      });
+      createDebug.names = [];
+      createDebug.skips = [];
+      createDebug.formatters = {};
+      function selectColor(namespace) {
+        let hash = 0;
+        for (let i = 0; i < namespace.length; i++) {
+          hash = (hash << 5) - hash + namespace.charCodeAt(i);
+          hash |= 0;
+        }
+        return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
+      }
+      __name(selectColor, "selectColor");
+      createDebug.selectColor = selectColor;
+      function createDebug(namespace) {
+        let prevTime;
+        let enableOverride = null;
+        let namespacesCache;
+        let enabledCache;
+        function debug(...args) {
+          if (!debug.enabled) {
+            return;
+          }
+          const self = debug;
+          const curr = Number(/* @__PURE__ */ new Date());
+          const ms = curr - (prevTime || curr);
+          self.diff = ms;
+          self.prev = prevTime;
+          self.curr = curr;
+          prevTime = curr;
+          args[0] = createDebug.coerce(args[0]);
+          if (typeof args[0] !== "string") {
+            args.unshift("%O");
+          }
+          let index = 0;
+          args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
+            if (match === "%%") {
+              return "%";
+            }
+            index++;
+            const formatter = createDebug.formatters[format];
+            if (typeof formatter === "function") {
+              const val = args[index];
+              match = formatter.call(self, val);
+              args.splice(index, 1);
+              index--;
+            }
+            return match;
+          });
+          createDebug.formatArgs.call(self, args);
+          const logFn = self.log || createDebug.log;
+          logFn.apply(self, args);
+        }
+        __name(debug, "debug");
+        debug.namespace = namespace;
+        debug.useColors = createDebug.useColors();
+        debug.color = createDebug.selectColor(namespace);
+        debug.extend = extend;
+        debug.destroy = createDebug.destroy;
+        Object.defineProperty(debug, "enabled", {
+          enumerable: true,
+          configurable: false,
+          get: /* @__PURE__ */ __name(() => {
+            if (enableOverride !== null) {
+              return enableOverride;
+            }
+            if (namespacesCache !== createDebug.namespaces) {
+              namespacesCache = createDebug.namespaces;
+              enabledCache = createDebug.enabled(namespace);
+            }
+            return enabledCache;
+          }, "get"),
+          set: /* @__PURE__ */ __name((v) => {
+            enableOverride = v;
+          }, "set")
+        });
+        if (typeof createDebug.init === "function") {
+          createDebug.init(debug);
+        }
+        return debug;
+      }
+      __name(createDebug, "createDebug");
+      function extend(namespace, delimiter) {
+        const newDebug = createDebug(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace);
+        newDebug.log = this.log;
+        return newDebug;
+      }
+      __name(extend, "extend");
+      function enable(namespaces) {
+        createDebug.save(namespaces);
+        createDebug.namespaces = namespaces;
+        createDebug.names = [];
+        createDebug.skips = [];
+        const split = (typeof namespaces === "string" ? namespaces : "").trim().replace(/\s+/g, ",").split(",").filter(Boolean);
+        for (const ns of split) {
+          if (ns[0] === "-") {
+            createDebug.skips.push(ns.slice(1));
+          } else {
+            createDebug.names.push(ns);
+          }
+        }
+      }
+      __name(enable, "enable");
+      function matchesTemplate(search, template) {
+        let searchIndex = 0;
+        let templateIndex = 0;
+        let starIndex = -1;
+        let matchIndex = 0;
+        while (searchIndex < search.length) {
+          if (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === "*")) {
+            if (template[templateIndex] === "*") {
+              starIndex = templateIndex;
+              matchIndex = searchIndex;
+              templateIndex++;
+            } else {
+              searchIndex++;
+              templateIndex++;
+            }
+          } else if (starIndex !== -1) {
+            templateIndex = starIndex + 1;
+            matchIndex++;
+            searchIndex = matchIndex;
+          } else {
+            return false;
+          }
+        }
+        while (templateIndex < template.length && template[templateIndex] === "*") {
+          templateIndex++;
+        }
+        return templateIndex === template.length;
+      }
+      __name(matchesTemplate, "matchesTemplate");
+      function disable() {
+        const namespaces = [
+          ...createDebug.names,
+          ...createDebug.skips.map((namespace) => "-" + namespace)
+        ].join(",");
+        createDebug.enable("");
+        return namespaces;
+      }
+      __name(disable, "disable");
+      function enabled(name) {
+        for (const skip of createDebug.skips) {
+          if (matchesTemplate(name, skip)) {
+            return false;
+          }
+        }
+        for (const ns of createDebug.names) {
+          if (matchesTemplate(name, ns)) {
+            return true;
+          }
+        }
+        return false;
+      }
+      __name(enabled, "enabled");
+      function coerce(val) {
+        if (val instanceof Error) {
+          return val.stack || val.message;
+        }
+        return val;
+      }
+      __name(coerce, "coerce");
+      function destroy() {
+        /* @__PURE__ */ console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
+      }
+      __name(destroy, "destroy");
+      createDebug.enable(createDebug.load());
+      return createDebug;
+    }
+    __name(setup, "setup");
+    module2.exports = setup;
+  }
+});
+
+// node_modules/.pnpm/debug@4.4.3_supports-color@10.2.2/node_modules/debug/src/browser.js
+var require_browser = __commonJS({
+  "node_modules/.pnpm/debug@4.4.3_supports-color@10.2.2/node_modules/debug/src/browser.js"(exports2, module2) {
+    exports2.formatArgs = formatArgs;
+    exports2.save = save;
+    exports2.load = load;
+    exports2.useColors = useColors;
+    exports2.storage = localstorage();
+    exports2.destroy = /* @__PURE__ */ (() => {
+      let warned = false;
+      return () => {
+        if (!warned) {
+          warned = true;
+          /* @__PURE__ */ console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
+        }
+      };
+    })();
+    exports2.colors = [
+      "#0000CC",
+      "#0000FF",
+      "#0033CC",
+      "#0033FF",
+      "#0066CC",
+      "#0066FF",
+      "#0099CC",
+      "#0099FF",
+      "#00CC00",
+      "#00CC33",
+      "#00CC66",
+      "#00CC99",
+      "#00CCCC",
+      "#00CCFF",
+      "#3300CC",
+      "#3300FF",
+      "#3333CC",
+      "#3333FF",
+      "#3366CC",
+      "#3366FF",
+      "#3399CC",
+      "#3399FF",
+      "#33CC00",
+      "#33CC33",
+      "#33CC66",
+      "#33CC99",
+      "#33CCCC",
+      "#33CCFF",
+      "#6600CC",
+      "#6600FF",
+      "#6633CC",
+      "#6633FF",
+      "#66CC00",
+      "#66CC33",
+      "#9900CC",
+      "#9900FF",
+      "#9933CC",
+      "#9933FF",
+      "#99CC00",
+      "#99CC33",
+      "#CC0000",
+      "#CC0033",
+      "#CC0066",
+      "#CC0099",
+      "#CC00CC",
+      "#CC00FF",
+      "#CC3300",
+      "#CC3333",
+      "#CC3366",
+      "#CC3399",
+      "#CC33CC",
+      "#CC33FF",
+      "#CC6600",
+      "#CC6633",
+      "#CC9900",
+      "#CC9933",
+      "#CCCC00",
+      "#CCCC33",
+      "#FF0000",
+      "#FF0033",
+      "#FF0066",
+      "#FF0099",
+      "#FF00CC",
+      "#FF00FF",
+      "#FF3300",
+      "#FF3333",
+      "#FF3366",
+      "#FF3399",
+      "#FF33CC",
+      "#FF33FF",
+      "#FF6600",
+      "#FF6633",
+      "#FF9900",
+      "#FF9933",
+      "#FFCC00",
+      "#FFCC33"
+    ];
+    function useColors() {
+      if (false) {
+        return true;
+      }
+      if (false) {
+        return false;
+      }
+      let m;
+      return (
+        // Double check webkit in userAgent just in case we are in a worker
+        false
+      );
+    }
+    __name(useColors, "useColors");
+    function formatArgs(args) {
+      args[0] = (this.useColors ? "%c" : "") + this.namespace + (this.useColors ? " %c" : " ") + args[0] + (this.useColors ? "%c " : " ") + "+" + module2.exports.humanize(this.diff);
+      if (!this.useColors) {
+        return;
+      }
+      const c = "color: " + this.color;
+      args.splice(1, 0, c, "color: inherit");
+      let index = 0;
+      let lastC = 0;
+      args[0].replace(/%[a-zA-Z%]/g, (match) => {
+        if (match === "%%") {
+          return;
+        }
+        index++;
+        if (match === "%c") {
+          lastC = index;
+        }
+      });
+      args.splice(lastC, 0, c);
+    }
+    __name(formatArgs, "formatArgs");
+    exports2.log = console.debug || console.log || (() => {
+    });
+    function save(namespaces) {
+      try {
+        if (namespaces) {
+          exports2.storage.setItem("debug", namespaces);
+        } else {
+          exports2.storage.removeItem("debug");
+        }
+      } catch (error) {
+      }
+    }
+    __name(save, "save");
+    function load() {
+      let r;
+      try {
+        r = exports2.storage.getItem("debug") || exports2.storage.getItem("DEBUG");
+      } catch (error) {
+      }
+      if (!r && typeof process !== "undefined" && "env" in process) {
+        r = void 0;
+      }
+      return r;
+    }
+    __name(load, "load");
+    function localstorage() {
+      try {
+        return void 0;
+      } catch (error) {
+      }
+    }
+    __name(localstorage, "localstorage");
+    module2.exports = require_common()(exports2);
+    var { formatters } = module2.exports;
+    formatters.j = function(v) {
+      try {
+        return JSON.stringify(v);
+      } catch (error) {
+        return "[UnexpectedJSONParseError]: " + error.message;
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/supports-color@10.2.2/node_modules/supports-color/index.js
+var supports_color_exports = {};
+__export(supports_color_exports, {
+  createSupportsColor: () => createSupportsColor,
+  default: () => supports_color_default
+});
+function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : import_node_process.default.argv) {
+  const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
+  const position = argv.indexOf(prefix + flag);
+  const terminatorPosition = argv.indexOf("--");
+  return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
+}
+function envForceColor() {
+  if (!("FORCE_COLOR" in env)) {
+    return;
+  }
+  if (env.FORCE_COLOR === "true") {
+    return 1;
+  }
+  if (env.FORCE_COLOR === "false") {
+    return 0;
+  }
+  if (env.FORCE_COLOR.length === 0) {
+    return 1;
+  }
+  const level = Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);
+  if (![0, 1, 2, 3].includes(level)) {
+    return;
+  }
+  return level;
+}
+function translateLevel(level) {
+  if (level === 0) {
+    return false;
+  }
+  return {
+    level,
+    hasBasic: true,
+    has256: level >= 2,
+    has16m: level >= 3
+  };
+}
+function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
+  const noFlagForceColor = envForceColor();
+  if (noFlagForceColor !== void 0) {
+    flagForceColor = noFlagForceColor;
+  }
+  const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
+  if (forceColor === 0) {
+    return 0;
+  }
+  if (sniffFlags) {
+    if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) {
+      return 3;
+    }
+    if (hasFlag("color=256")) {
+      return 2;
+    }
+  }
+  if ("TF_BUILD" in env && "AGENT_NAME" in env) {
+    return 1;
+  }
+  if (haveStream && !streamIsTTY && forceColor === void 0) {
+    return 0;
+  }
+  const min = forceColor || 0;
+  if (env.TERM === "dumb") {
+    return min;
+  }
+  if (import_node_process.default.platform === "win32") {
+    const osRelease = import_node_os.default.release().split(".");
+    if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
+      return Number(osRelease[2]) >= 14931 ? 3 : 2;
+    }
+    return 1;
+  }
+  if ("CI" in env) {
+    if (["GITHUB_ACTIONS", "GITEA_ACTIONS", "CIRCLECI"].some((key) => key in env)) {
+      return 3;
+    }
+    if (["TRAVIS", "APPVEYOR", "GITLAB_CI", "BUILDKITE", "DRONE"].some((sign) => sign in env) || env.CI_NAME === "codeship") {
+      return 1;
+    }
+    return min;
+  }
+  if ("TEAMCITY_VERSION" in env) {
+    return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
+  }
+  if (env.COLORTERM === "truecolor") {
+    return 3;
+  }
+  if (env.TERM === "xterm-kitty") {
+    return 3;
+  }
+  if (env.TERM === "xterm-ghostty") {
+    return 3;
+  }
+  if (env.TERM === "wezterm") {
+    return 3;
+  }
+  if ("TERM_PROGRAM" in env) {
+    const version = Number.parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
+    switch (env.TERM_PROGRAM) {
+      case "iTerm.app": {
+        return version >= 3 ? 3 : 2;
+      }
+      case "Apple_Terminal": {
+        return 2;
+      }
+    }
+  }
+  if (/-256(color)?$/i.test(env.TERM)) {
+    return 2;
+  }
+  if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
+    return 1;
+  }
+  if ("COLORTERM" in env) {
+    return 1;
+  }
+  return min;
+}
+function createSupportsColor(stream, options = {}) {
+  const level = _supportsColor(stream, {
+    streamIsTTY: stream && stream.isTTY,
+    ...options
+  });
+  return translateLevel(level);
+}
+var import_node_process, import_node_os, import_node_tty, env, flagForceColor, supportsColor, supports_color_default;
+var init_supports_color = __esm({
+  "node_modules/.pnpm/supports-color@10.2.2/node_modules/supports-color/index.js"() {
+    import_node_process = __toESM(require("node:process"), 1);
+    import_node_os = __toESM(require("node:os"), 1);
+    import_node_tty = __toESM(require("node:tty"), 1);
+    __name(hasFlag, "hasFlag");
+    ({ env } = import_node_process.default);
+    if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) {
+      flagForceColor = 0;
+    } else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) {
+      flagForceColor = 1;
+    }
+    __name(envForceColor, "envForceColor");
+    __name(translateLevel, "translateLevel");
+    __name(_supportsColor, "_supportsColor");
+    __name(createSupportsColor, "createSupportsColor");
+    supportsColor = {
+      stdout: createSupportsColor({ isTTY: import_node_tty.default.isatty(1) }),
+      stderr: createSupportsColor({ isTTY: import_node_tty.default.isatty(2) })
+    };
+    supports_color_default = supportsColor;
+  }
+});
+
+// node_modules/.pnpm/debug@4.4.3_supports-color@10.2.2/node_modules/debug/src/node.js
+var require_node2 = __commonJS({
+  "node_modules/.pnpm/debug@4.4.3_supports-color@10.2.2/node_modules/debug/src/node.js"(exports2, module2) {
+    var tty2 = require("tty");
+    var util = require("util");
+    exports2.init = init;
+    exports2.log = log;
+    exports2.formatArgs = formatArgs;
+    exports2.save = save;
+    exports2.load = load;
+    exports2.useColors = useColors;
+    exports2.destroy = util.deprecate(
+      () => {
+      },
+      "Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."
+    );
+    exports2.colors = [6, 2, 3, 4, 5, 1];
+    try {
+      const supportsColor2 = (init_supports_color(), __toCommonJS(supports_color_exports));
+      if (supportsColor2 && (supportsColor2.stderr || supportsColor2).level >= 2) {
+        exports2.colors = [
+          20,
+          21,
+          26,
+          27,
+          32,
+          33,
+          38,
+          39,
+          40,
+          41,
+          42,
+          43,
+          44,
+          45,
+          56,
+          57,
+          62,
+          63,
+          68,
+          69,
+          74,
+          75,
+          76,
+          77,
+          78,
+          79,
+          80,
+          81,
+          92,
+          93,
+          98,
+          99,
+          112,
+          113,
+          128,
+          129,
+          134,
+          135,
+          148,
+          149,
+          160,
+          161,
+          162,
+          163,
+          164,
+          165,
+          166,
+          167,
+          168,
+          169,
+          170,
+          171,
+          172,
+          173,
+          178,
+          179,
+          184,
+          185,
+          196,
+          197,
+          198,
+          199,
+          200,
+          201,
+          202,
+          203,
+          204,
+          205,
+          206,
+          207,
+          208,
+          209,
+          214,
+          215,
+          220,
+          221
+        ];
+      }
+    } catch (error) {
+    }
+    exports2.inspectOpts = Object.keys(process.env).filter((key) => {
+      return /^debug_/i.test(key);
+    }).reduce((obj, key) => {
+      const prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, (_, k) => {
+        return k.toUpperCase();
+      });
+      let val = process.env[key];
+      if (/^(yes|on|true|enabled)$/i.test(val)) {
+        val = true;
+      } else if (/^(no|off|false|disabled)$/i.test(val)) {
+        val = false;
+      } else if (val === "null") {
+        val = null;
+      } else {
+        val = Number(val);
+      }
+      obj[prop] = val;
+      return obj;
+    }, {});
+    function useColors() {
+      return "colors" in exports2.inspectOpts ? Boolean(exports2.inspectOpts.colors) : tty2.isatty(process.stderr.fd);
+    }
+    __name(useColors, "useColors");
+    function formatArgs(args) {
+      const { namespace: name, useColors: useColors2 } = this;
+      if (useColors2) {
+        const c = this.color;
+        const colorCode = "\x1B[3" + (c < 8 ? c : "8;5;" + c);
+        const prefix = `  ${colorCode};1m${name} \x1B[0m`;
+        args[0] = prefix + args[0].split("\n").join("\n" + prefix);
+        args.push(colorCode + "m+" + module2.exports.humanize(this.diff) + "\x1B[0m");
+      } else {
+        args[0] = getDate() + name + " " + args[0];
+      }
+    }
+    __name(formatArgs, "formatArgs");
+    function getDate() {
+      if (exports2.inspectOpts.hideDate) {
+        return "";
+      }
+      return (/* @__PURE__ */ new Date()).toISOString() + " ";
+    }
+    __name(getDate, "getDate");
+    function log(...args) {
+      return process.stderr.write(util.formatWithOptions(exports2.inspectOpts, ...args) + "\n");
+    }
+    __name(log, "log");
+    function save(namespaces) {
+      if (namespaces) {
+        process.env.DEBUG = namespaces;
+      } else {
+        delete void 0;
+      }
+    }
+    __name(save, "save");
+    function load() {
+      return void 0;
+    }
+    __name(load, "load");
+    function init(debug) {
+      debug.inspectOpts = {};
+      const keys = Object.keys(exports2.inspectOpts);
+      for (let i = 0; i < keys.length; i++) {
+        debug.inspectOpts[keys[i]] = exports2.inspectOpts[keys[i]];
+      }
+    }
+    __name(init, "init");
+    module2.exports = require_common()(exports2);
+    var { formatters } = module2.exports;
+    formatters.o = function(v) {
+      this.inspectOpts.colors = this.useColors;
+      return util.inspect(v, this.inspectOpts).split("\n").map((str) => str.trim()).join(" ");
+    };
+    formatters.O = function(v) {
+      this.inspectOpts.colors = this.useColors;
+      return util.inspect(v, this.inspectOpts);
+    };
+  }
+});
+
+// node_modules/.pnpm/debug@4.4.3_supports-color@10.2.2/node_modules/debug/src/index.js
+var require_src = __commonJS({
+  "node_modules/.pnpm/debug@4.4.3_supports-color@10.2.2/node_modules/debug/src/index.js"(exports2, module2) {
+    if (typeof process === "undefined" || process.type === "renderer" || false || process.__nwjs) {
+      module2.exports = require_browser();
+    } else {
+      module2.exports = require_node2();
+    }
+  }
+});
+
+// node_modules/.pnpm/agent-base@7.1.4/node_modules/agent-base/dist/helpers.js
+var require_helpers = __commonJS({
+  "node_modules/.pnpm/agent-base@7.1.4/node_modules/agent-base/dist/helpers.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.req = exports2.json = exports2.toBuffer = void 0;
+    var http = __importStar(require("http"));
+    var https = __importStar(require("https"));
+    async function toBuffer(stream) {
+      let length = 0;
+      const chunks = [];
+      for await (const chunk of stream) {
+        length += chunk.length;
+        chunks.push(chunk);
+      }
+      return Buffer.concat(chunks, length);
+    }
+    __name(toBuffer, "toBuffer");
+    exports2.toBuffer = toBuffer;
+    async function json(stream) {
+      const buf = await toBuffer(stream);
+      const str = buf.toString("utf8");
+      try {
+        return JSON.parse(str);
+      } catch (_err) {
+        const err = _err;
+        err.message += ` (input: ${str})`;
+        throw err;
+      }
+    }
+    __name(json, "json");
+    exports2.json = json;
+    function req(url, opts = {}) {
+      const href = typeof url === "string" ? url : url.href;
+      const req2 = (href.startsWith("https:") ? https : http).request(url, opts);
+      const promise = new Promise((resolve, reject) => {
+        req2.once("response", resolve).once("error", reject).end();
+      });
+      req2.then = promise.then.bind(promise);
+      return req2;
+    }
+    __name(req, "req");
+    exports2.req = req;
+  }
+});
+
+// node_modules/.pnpm/agent-base@7.1.4/node_modules/agent-base/dist/index.js
+var require_dist = __commonJS({
+  "node_modules/.pnpm/agent-base@7.1.4/node_modules/agent-base/dist/index.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
+      for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Agent = void 0;
+    var net = __importStar(require("net"));
+    var http = __importStar(require("http"));
+    var https_1 = require("https");
+    __exportStar(require_helpers(), exports2);
+    var INTERNAL = Symbol("AgentBaseInternalState");
+    var Agent = class extends http.Agent {
+      static {
+        __name(this, "Agent");
+      }
+      constructor(opts) {
+        super(opts);
+        this[INTERNAL] = {};
+      }
+      /**
+       * Determine whether this is an `http` or `https` request.
+       */
+      isSecureEndpoint(options) {
+        if (options) {
+          if (typeof options.secureEndpoint === "boolean") {
+            return options.secureEndpoint;
+          }
+          if (typeof options.protocol === "string") {
+            return options.protocol === "https:";
+          }
+        }
+        const { stack } = new Error();
+        if (typeof stack !== "string")
+          return false;
+        return stack.split("\n").some((l) => l.indexOf("(https.js:") !== -1 || l.indexOf("node:https:") !== -1);
+      }
+      // In order to support async signatures in `connect()` and Node's native
+      // connection pooling in `http.Agent`, the array of sockets for each origin
+      // has to be updated synchronously. This is so the length of the array is
+      // accurate when `addRequest()` is next called. We achieve this by creating a
+      // fake socket and adding it to `sockets[origin]` and incrementing
+      // `totalSocketCount`.
+      incrementSockets(name) {
+        if (this.maxSockets === Infinity && this.maxTotalSockets === Infinity) {
+          return null;
+        }
+        if (!this.sockets[name]) {
+          this.sockets[name] = [];
+        }
+        const fakeSocket = new net.Socket({ writable: false });
+        this.sockets[name].push(fakeSocket);
+        this.totalSocketCount++;
+        return fakeSocket;
+      }
+      decrementSockets(name, socket) {
+        if (!this.sockets[name] || socket === null) {
+          return;
+        }
+        const sockets = this.sockets[name];
+        const index = sockets.indexOf(socket);
+        if (index !== -1) {
+          sockets.splice(index, 1);
+          this.totalSocketCount--;
+          if (sockets.length === 0) {
+            delete this.sockets[name];
+          }
+        }
+      }
+      // In order to properly update the socket pool, we need to call `getName()` on
+      // the core `https.Agent` if it is a secureEndpoint.
+      getName(options) {
+        const secureEndpoint = this.isSecureEndpoint(options);
+        if (secureEndpoint) {
+          return https_1.Agent.prototype.getName.call(this, options);
+        }
+        return super.getName(options);
+      }
+      createSocket(req, options, cb) {
+        const connectOpts = {
+          ...options,
+          secureEndpoint: this.isSecureEndpoint(options)
+        };
+        const name = this.getName(connectOpts);
+        const fakeSocket = this.incrementSockets(name);
+        Promise.resolve().then(() => this.connect(req, connectOpts)).then((socket) => {
+          this.decrementSockets(name, fakeSocket);
+          if (socket instanceof http.Agent) {
+            try {
+              return socket.addRequest(req, connectOpts);
+            } catch (err) {
+              return cb(err);
+            }
+          }
+          this[INTERNAL].currentSocket = socket;
+          super.createSocket(req, options, cb);
+        }, (err) => {
+          this.decrementSockets(name, fakeSocket);
+          cb(err);
+        });
+      }
+      createConnection() {
+        const socket = this[INTERNAL].currentSocket;
+        this[INTERNAL].currentSocket = void 0;
+        if (!socket) {
+          throw new Error("No socket was returned in the `connect()` function");
+        }
+        return socket;
+      }
+      get defaultPort() {
+        return this[INTERNAL].defaultPort ?? (this.protocol === "https:" ? 443 : 80);
+      }
+      set defaultPort(v) {
+        if (this[INTERNAL]) {
+          this[INTERNAL].defaultPort = v;
+        }
+      }
+      get protocol() {
+        return this[INTERNAL].protocol ?? (this.isSecureEndpoint() ? "https:" : "http:");
+      }
+      set protocol(v) {
+        if (this[INTERNAL]) {
+          this[INTERNAL].protocol = v;
+        }
+      }
+    };
+    exports2.Agent = Agent;
+  }
+});
+
+// node_modules/.pnpm/http-proxy-agent@7.0.2_supports-color@10.2.2/node_modules/http-proxy-agent/dist/index.js
+var require_dist2 = __commonJS({
+  "node_modules/.pnpm/http-proxy-agent@7.0.2_supports-color@10.2.2/node_modules/http-proxy-agent/dist/index.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.HttpProxyAgent = void 0;
+    var net = __importStar(require("net"));
+    var tls = __importStar(require("tls"));
+    var debug_1 = __importDefault(require_src());
+    var events_1 = require("events");
+    var agent_base_1 = require_dist();
+    var url_1 = require("url");
+    var debug = (0, debug_1.default)("http-proxy-agent");
+    var HttpProxyAgent = class extends agent_base_1.Agent {
+      static {
+        __name(this, "HttpProxyAgent");
+      }
+      constructor(proxy, opts) {
+        super(opts);
+        this.proxy = typeof proxy === "string" ? new url_1.URL(proxy) : proxy;
+        this.proxyHeaders = opts?.headers ?? {};
+        debug("Creating new HttpProxyAgent instance: %o", this.proxy.href);
+        const host = (this.proxy.hostname || this.proxy.host).replace(/^\[|\]$/g, "");
+        const port = this.proxy.port ? parseInt(this.proxy.port, 10) : this.proxy.protocol === "https:" ? 443 : 80;
+        this.connectOpts = {
+          ...opts ? omit(opts, "headers") : null,
+          host,
+          port
+        };
+      }
+      addRequest(req, opts) {
+        req._header = null;
+        this.setRequestProps(req, opts);
+        super.addRequest(req, opts);
+      }
+      setRequestProps(req, opts) {
+        const { proxy } = this;
+        const protocol = opts.secureEndpoint ? "https:" : "http:";
+        const hostname = req.getHeader("host") || "localhost";
+        const base = `${protocol}//${hostname}`;
+        const url = new url_1.URL(req.path, base);
+        if (opts.port !== 80) {
+          url.port = String(opts.port);
+        }
+        req.path = String(url);
+        const headers = typeof this.proxyHeaders === "function" ? this.proxyHeaders() : { ...this.proxyHeaders };
+        if (proxy.username || proxy.password) {
+          const auth = `${decodeURIComponent(proxy.username)}:${decodeURIComponent(proxy.password)}`;
+          headers["Proxy-Authorization"] = `Basic ${Buffer.from(auth).toString("base64")}`;
+        }
+        if (!headers["Proxy-Connection"]) {
+          headers["Proxy-Connection"] = this.keepAlive ? "Keep-Alive" : "close";
+        }
+        for (const name of Object.keys(headers)) {
+          const value = headers[name];
+          if (value) {
+            req.setHeader(name, value);
+          }
+        }
+      }
+      async connect(req, opts) {
+        req._header = null;
+        if (!req.path.includes("://")) {
+          this.setRequestProps(req, opts);
+        }
+        let first;
+        let endOfHeaders;
+        debug("Regenerating stored HTTP header string for request");
+        req._implicitHeader();
+        if (req.outputData && req.outputData.length > 0) {
+          debug("Patching connection write() output buffer with updated header");
+          first = req.outputData[0].data;
+          endOfHeaders = first.indexOf("\r\n\r\n") + 4;
+          req.outputData[0].data = req._header + first.substring(endOfHeaders);
+          debug("Output buffer: %o", req.outputData[0].data);
+        }
+        let socket;
+        if (this.proxy.protocol === "https:") {
+          debug("Creating `tls.Socket`: %o", this.connectOpts);
+          socket = tls.connect(this.connectOpts);
+        } else {
+          debug("Creating `net.Socket`: %o", this.connectOpts);
+          socket = net.connect(this.connectOpts);
+        }
+        await (0, events_1.once)(socket, "connect");
+        return socket;
+      }
+    };
+    HttpProxyAgent.protocols = ["http", "https"];
+    exports2.HttpProxyAgent = HttpProxyAgent;
+    function omit(obj, ...keys) {
+      const ret = {};
+      let key;
+      for (key in obj) {
+        if (!keys.includes(key)) {
+          ret[key] = obj[key];
+        }
+      }
+      return ret;
+    }
+    __name(omit, "omit");
+  }
+});
+
+// node_modules/.pnpm/https-proxy-agent@7.0.6_supports-color@10.2.2/node_modules/https-proxy-agent/dist/parse-proxy-response.js
+var require_parse_proxy_response = __commonJS({
+  "node_modules/.pnpm/https-proxy-agent@7.0.6_supports-color@10.2.2/node_modules/https-proxy-agent/dist/parse-proxy-response.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.parseProxyResponse = void 0;
+    var debug_1 = __importDefault(require_src());
+    var debug = (0, debug_1.default)("https-proxy-agent:parse-proxy-response");
+    function parseProxyResponse(socket) {
+      return new Promise((resolve, reject) => {
+        let buffersLength = 0;
+        const buffers = [];
+        function read() {
+          const b = socket.read();
+          if (b)
+            ondata(b);
+          else
+            socket.once("readable", read);
+        }
+        __name(read, "read");
+        function cleanup() {
+          socket.removeListener("end", onend);
+          socket.removeListener("error", onerror);
+          socket.removeListener("readable", read);
+        }
+        __name(cleanup, "cleanup");
+        function onend() {
+          cleanup();
+          debug("onend");
+          reject(new Error("Proxy connection ended before receiving CONNECT response"));
+        }
+        __name(onend, "onend");
+        function onerror(err) {
+          cleanup();
+          debug("onerror %o", err);
+          reject(err);
+        }
+        __name(onerror, "onerror");
+        function ondata(b) {
+          buffers.push(b);
+          buffersLength += b.length;
+          const buffered = Buffer.concat(buffers, buffersLength);
+          const endOfHeaders = buffered.indexOf("\r\n\r\n");
+          if (endOfHeaders === -1) {
+            debug("have not received end of HTTP headers yet...");
+            read();
+            return;
+          }
+          const headerParts = buffered.slice(0, endOfHeaders).toString("ascii").split("\r\n");
+          const firstLine = headerParts.shift();
+          if (!firstLine) {
+            socket.destroy();
+            return reject(new Error("No header received from proxy CONNECT response"));
+          }
+          const firstLineParts = firstLine.split(" ");
+          const statusCode = +firstLineParts[1];
+          const statusText = firstLineParts.slice(2).join(" ");
+          const headers = {};
+          for (const header of headerParts) {
+            if (!header)
+              continue;
+            const firstColon = header.indexOf(":");
+            if (firstColon === -1) {
+              socket.destroy();
+              return reject(new Error(`Invalid header from proxy CONNECT response: "${header}"`));
+            }
+            const key = header.slice(0, firstColon).toLowerCase();
+            const value = header.slice(firstColon + 1).trimStart();
+            const current = headers[key];
+            if (typeof current === "string") {
+              headers[key] = [current, value];
+            } else if (Array.isArray(current)) {
+              current.push(value);
+            } else {
+              headers[key] = value;
+            }
+          }
+          debug("got proxy server response: %o %o", firstLine, headers);
+          cleanup();
+          resolve({
+            connect: {
+              statusCode,
+              statusText,
+              headers
+            },
+            buffered
+          });
+        }
+        __name(ondata, "ondata");
+        socket.on("error", onerror);
+        socket.on("end", onend);
+        read();
+      });
+    }
+    __name(parseProxyResponse, "parseProxyResponse");
+    exports2.parseProxyResponse = parseProxyResponse;
+  }
+});
+
+// node_modules/.pnpm/https-proxy-agent@7.0.6_supports-color@10.2.2/node_modules/https-proxy-agent/dist/index.js
+var require_dist3 = __commonJS({
+  "node_modules/.pnpm/https-proxy-agent@7.0.6_supports-color@10.2.2/node_modules/https-proxy-agent/dist/index.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.HttpsProxyAgent = void 0;
+    var net = __importStar(require("net"));
+    var tls = __importStar(require("tls"));
+    var assert_1 = __importDefault(require("assert"));
+    var debug_1 = __importDefault(require_src());
+    var agent_base_1 = require_dist();
+    var url_1 = require("url");
+    var parse_proxy_response_1 = require_parse_proxy_response();
+    var debug = (0, debug_1.default)("https-proxy-agent");
+    var setServernameFromNonIpHost = /* @__PURE__ */ __name((options) => {
+      if (options.servername === void 0 && options.host && !net.isIP(options.host)) {
+        return {
+          ...options,
+          servername: options.host
+        };
+      }
+      return options;
+    }, "setServernameFromNonIpHost");
+    var HttpsProxyAgent = class extends agent_base_1.Agent {
+      static {
+        __name(this, "HttpsProxyAgent");
+      }
+      constructor(proxy, opts) {
+        super(opts);
+        this.options = { path: void 0 };
+        this.proxy = typeof proxy === "string" ? new url_1.URL(proxy) : proxy;
+        this.proxyHeaders = opts?.headers ?? {};
+        debug("Creating new HttpsProxyAgent instance: %o", this.proxy.href);
+        const host = (this.proxy.hostname || this.proxy.host).replace(/^\[|\]$/g, "");
+        const port = this.proxy.port ? parseInt(this.proxy.port, 10) : this.proxy.protocol === "https:" ? 443 : 80;
+        this.connectOpts = {
+          // Attempt to negotiate http/1.1 for proxy servers that support http/2
+          ALPNProtocols: ["http/1.1"],
+          ...opts ? omit(opts, "headers") : null,
+          host,
+          port
+        };
+      }
+      /**
+       * Called when the node-core HTTP client library is creating a
+       * new HTTP request.
+       */
+      async connect(req, opts) {
+        const { proxy } = this;
+        if (!opts.host) {
+          throw new TypeError('No "host" provided');
+        }
+        let socket;
+        if (proxy.protocol === "https:") {
+          debug("Creating `tls.Socket`: %o", this.connectOpts);
+          socket = tls.connect(setServernameFromNonIpHost(this.connectOpts));
+        } else {
+          debug("Creating `net.Socket`: %o", this.connectOpts);
+          socket = net.connect(this.connectOpts);
+        }
+        const headers = typeof this.proxyHeaders === "function" ? this.proxyHeaders() : { ...this.proxyHeaders };
+        const host = net.isIPv6(opts.host) ? `[${opts.host}]` : opts.host;
+        let payload = `CONNECT ${host}:${opts.port} HTTP/1.1\r
+`;
+        if (proxy.username || proxy.password) {
+          const auth = `${decodeURIComponent(proxy.username)}:${decodeURIComponent(proxy.password)}`;
+          headers["Proxy-Authorization"] = `Basic ${Buffer.from(auth).toString("base64")}`;
+        }
+        headers.Host = `${host}:${opts.port}`;
+        if (!headers["Proxy-Connection"]) {
+          headers["Proxy-Connection"] = this.keepAlive ? "Keep-Alive" : "close";
+        }
+        for (const name of Object.keys(headers)) {
+          payload += `${name}: ${headers[name]}\r
+`;
+        }
+        const proxyResponsePromise = (0, parse_proxy_response_1.parseProxyResponse)(socket);
+        socket.write(`${payload}\r
+`);
+        const { connect, buffered } = await proxyResponsePromise;
+        req.emit("proxyConnect", connect);
+        this.emit("proxyConnect", connect, req);
+        if (connect.statusCode === 200) {
+          req.once("socket", resume);
+          if (opts.secureEndpoint) {
+            debug("Upgrading socket connection to TLS");
+            return tls.connect({
+              ...omit(setServernameFromNonIpHost(opts), "host", "path", "port"),
+              socket
+            });
+          }
+          return socket;
+        }
+        socket.destroy();
+        const fakeSocket = new net.Socket({ writable: false });
+        fakeSocket.readable = true;
+        req.once("socket", (s) => {
+          debug("Replaying proxy buffer for failed request");
+          (0, assert_1.default)(s.listenerCount("data") > 0);
+          s.push(buffered);
+          s.push(null);
+        });
+        return fakeSocket;
+      }
+    };
+    HttpsProxyAgent.protocols = ["http", "https"];
+    exports2.HttpsProxyAgent = HttpsProxyAgent;
+    function resume(socket) {
+      socket.resume();
+    }
+    __name(resume, "resume");
+    function omit(obj, ...keys) {
+      const ret = {};
+      let key;
+      for (key in obj) {
+        if (!keys.includes(key)) {
+          ret[key] = obj[key];
+        }
+      }
+      return ret;
+    }
+    __name(omit, "omit");
+  }
+});
+
+// node_modules/.pnpm/smart-buffer@4.2.0/node_modules/smart-buffer/build/utils.js
+var require_utils3 = __commonJS({
+  "node_modules/.pnpm/smart-buffer@4.2.0/node_modules/smart-buffer/build/utils.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var buffer_1 = require("buffer");
+    var ERRORS = {
+      INVALID_ENCODING: "Invalid encoding provided. Please specify a valid encoding the internal Node.js Buffer supports.",
+      INVALID_SMARTBUFFER_SIZE: "Invalid size provided. Size must be a valid integer greater than zero.",
+      INVALID_SMARTBUFFER_BUFFER: "Invalid Buffer provided in SmartBufferOptions.",
+      INVALID_SMARTBUFFER_OBJECT: "Invalid SmartBufferOptions object supplied to SmartBuffer constructor or factory methods.",
+      INVALID_OFFSET: "An invalid offset value was provided.",
+      INVALID_OFFSET_NON_NUMBER: "An invalid offset value was provided. A numeric value is required.",
+      INVALID_LENGTH: "An invalid length value was provided.",
+      INVALID_LENGTH_NON_NUMBER: "An invalid length value was provived. A numeric value is required.",
+      INVALID_TARGET_OFFSET: "Target offset is beyond the bounds of the internal SmartBuffer data.",
+      INVALID_TARGET_LENGTH: "Specified length value moves cursor beyong the bounds of the internal SmartBuffer data.",
+      INVALID_READ_BEYOND_BOUNDS: "Attempted to read beyond the bounds of the managed data.",
+      INVALID_WRITE_BEYOND_BOUNDS: "Attempted to write beyond the bounds of the managed data."
+    };
+    exports2.ERRORS = ERRORS;
+    function checkEncoding(encoding) {
+      if (!buffer_1.Buffer.isEncoding(encoding)) {
+        throw new Error(ERRORS.INVALID_ENCODING);
+      }
+    }
+    __name(checkEncoding, "checkEncoding");
+    exports2.checkEncoding = checkEncoding;
+    function isFiniteInteger(value) {
+      return typeof value === "number" && isFinite(value) && isInteger(value);
+    }
+    __name(isFiniteInteger, "isFiniteInteger");
+    exports2.isFiniteInteger = isFiniteInteger;
+    function checkOffsetOrLengthValue(value, offset) {
+      if (typeof value === "number") {
+        if (!isFiniteInteger(value) || value < 0) {
+          throw new Error(offset ? ERRORS.INVALID_OFFSET : ERRORS.INVALID_LENGTH);
+        }
+      } else {
+        throw new Error(offset ? ERRORS.INVALID_OFFSET_NON_NUMBER : ERRORS.INVALID_LENGTH_NON_NUMBER);
+      }
+    }
+    __name(checkOffsetOrLengthValue, "checkOffsetOrLengthValue");
+    function checkLengthValue(length) {
+      checkOffsetOrLengthValue(length, false);
+    }
+    __name(checkLengthValue, "checkLengthValue");
+    exports2.checkLengthValue = checkLengthValue;
+    function checkOffsetValue(offset) {
+      checkOffsetOrLengthValue(offset, true);
+    }
+    __name(checkOffsetValue, "checkOffsetValue");
+    exports2.checkOffsetValue = checkOffsetValue;
+    function checkTargetOffset(offset, buff) {
+      if (offset < 0 || offset > buff.length) {
+        throw new Error(ERRORS.INVALID_TARGET_OFFSET);
+      }
+    }
+    __name(checkTargetOffset, "checkTargetOffset");
+    exports2.checkTargetOffset = checkTargetOffset;
+    function isInteger(value) {
+      return typeof value === "number" && isFinite(value) && Math.floor(value) === value;
+    }
+    __name(isInteger, "isInteger");
+    function bigIntAndBufferInt64Check(bufferMethod) {
+      if (typeof BigInt === "undefined") {
+        throw new Error("Platform does not support JS BigInt type.");
+      }
+      if (typeof buffer_1.Buffer.prototype[bufferMethod] === "undefined") {
+        throw new Error(`Platform does not support Buffer.prototype.${bufferMethod}.`);
+      }
+    }
+    __name(bigIntAndBufferInt64Check, "bigIntAndBufferInt64Check");
+    exports2.bigIntAndBufferInt64Check = bigIntAndBufferInt64Check;
+  }
+});
+
+// node_modules/.pnpm/smart-buffer@4.2.0/node_modules/smart-buffer/build/smartbuffer.js
+var require_smartbuffer = __commonJS({
+  "node_modules/.pnpm/smart-buffer@4.2.0/node_modules/smart-buffer/build/smartbuffer.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var utils_1 = require_utils3();
+    var DEFAULT_SMARTBUFFER_SIZE = 4096;
+    var DEFAULT_SMARTBUFFER_ENCODING = "utf8";
+    var SmartBuffer = class _SmartBuffer {
+      static {
+        __name(this, "SmartBuffer");
+      }
+      /**
+       * Creates a new SmartBuffer instance.
+       *
+       * @param options { SmartBufferOptions } The SmartBufferOptions to apply to this instance.
+       */
+      constructor(options) {
+        this.length = 0;
+        this._encoding = DEFAULT_SMARTBUFFER_ENCODING;
+        this._writeOffset = 0;
+        this._readOffset = 0;
+        if (_SmartBuffer.isSmartBufferOptions(options)) {
+          if (options.encoding) {
+            utils_1.checkEncoding(options.encoding);
+            this._encoding = options.encoding;
+          }
+          if (options.size) {
+            if (utils_1.isFiniteInteger(options.size) && options.size > 0) {
+              this._buff = Buffer.allocUnsafe(options.size);
+            } else {
+              throw new Error(utils_1.ERRORS.INVALID_SMARTBUFFER_SIZE);
+            }
+          } else if (options.buff) {
+            if (Buffer.isBuffer(options.buff)) {
+              this._buff = options.buff;
+              this.length = options.buff.length;
+            } else {
+              throw new Error(utils_1.ERRORS.INVALID_SMARTBUFFER_BUFFER);
+            }
+          } else {
+            this._buff = Buffer.allocUnsafe(DEFAULT_SMARTBUFFER_SIZE);
+          }
+        } else {
+          if (typeof options !== "undefined") {
+            throw new Error(utils_1.ERRORS.INVALID_SMARTBUFFER_OBJECT);
+          }
+          this._buff = Buffer.allocUnsafe(DEFAULT_SMARTBUFFER_SIZE);
+        }
+      }
+      /**
+       * Creates a new SmartBuffer instance with the provided internal Buffer size and optional encoding.
+       *
+       * @param size { Number } The size of the internal Buffer.
+       * @param encoding { String } The BufferEncoding to use for strings.
+       *
+       * @return { SmartBuffer }
+       */
+      static fromSize(size, encoding) {
+        return new this({
+          size,
+          encoding
+        });
+      }
+      /**
+       * Creates a new SmartBuffer instance with the provided Buffer and optional encoding.
+       *
+       * @param buffer { Buffer } The Buffer to use as the internal Buffer value.
+       * @param encoding { String } The BufferEncoding to use for strings.
+       *
+       * @return { SmartBuffer }
+       */
+      static fromBuffer(buff, encoding) {
+        return new this({
+          buff,
+          encoding
+        });
+      }
+      /**
+       * Creates a new SmartBuffer instance with the provided SmartBufferOptions options.
+       *
+       * @param options { SmartBufferOptions } The options to use when creating the SmartBuffer instance.
+       */
+      static fromOptions(options) {
+        return new this(options);
+      }
+      /**
+       * Type checking function that determines if an object is a SmartBufferOptions object.
+       */
+      static isSmartBufferOptions(options) {
+        const castOptions = options;
+        return castOptions && (castOptions.encoding !== void 0 || castOptions.size !== void 0 || castOptions.buff !== void 0);
+      }
+      // Signed integers
+      /**
+       * Reads an Int8 value from the current read position or an optionally provided offset.
+       *
+       * @param offset { Number } The offset to read data from (optional)
+       * @return { Number }
+       */
+      readInt8(offset) {
+        return this._readNumberValue(Buffer.prototype.readInt8, 1, offset);
+      }
+      /**
+       * Reads an Int16BE value from the current read position or an optionally provided offset.
+       *
+       * @param offset { Number } The offset to read data from (optional)
+       * @return { Number }
+       */
+      readInt16BE(offset) {
+        return this._readNumberValue(Buffer.prototype.readInt16BE, 2, offset);
+      }
+      /**
+       * Reads an Int16LE value from the current read position or an optionally provided offset.
+       *
+       * @param offset { Number } The offset to read data from (optional)
+       * @return { Number }
+       */
+      readInt16LE(offset) {
+        return this._readNumberValue(Buffer.prototype.readInt16LE, 2, offset);
+      }
+      /**
+       * Reads an Int32BE value from the current read position or an optionally provided offset.
+       *
+       * @param offset { Number } The offset to read data from (optional)
+       * @return { Number }
+       */
+      readInt32BE(offset) {
+        return this._readNumberValue(Buffer.prototype.readInt32BE, 4, offset);
+      }
+      /**
+       * Reads an Int32LE value from the current read position or an optionally provided offset.
+       *
+       * @param offset { Number } The offset to read data from (optional)
+       * @return { Number }
+       */
+      readInt32LE(offset) {
+        return this._readNumberValue(Buffer.prototype.readInt32LE, 4, offset);
+      }
+      /**
+       * Reads a BigInt64BE value from the current read position or an optionally provided offset.
+       *
+       * @param offset { Number } The offset to read data from (optional)
+       * @return { BigInt }
+       */
+      readBigInt64BE(offset) {
+        utils_1.bigIntAndBufferInt64Check("readBigInt64BE");
+        return this._readNumberValue(Buffer.prototype.readBigInt64BE, 8, offset);
+      }
+      /**
+       * Reads a BigInt64LE value from the current read position or an optionally provided offset.
+       *
+       * @param offset { Number } The offset to read data from (optional)
+       * @return { BigInt }
+       */
+      readBigInt64LE(offset) {
+        utils_1.bigIntAndBufferInt64Check("readBigInt64LE");
+        return this._readNumberValue(Buffer.prototype.readBigInt64LE, 8, offset);
+      }
+      /**
+       * Writes an Int8 value to the current write position (or at optional offset).
+       *
+       * @param value { Number } The value to write.
+       * @param offset { Number } The offset to write the value at.
+       *
+       * @return this
+       */
+      writeInt8(value, offset) {
+        this._writeNumberValue(Buffer.prototype.writeInt8, 1, value, offset);
+        return this;
+      }
+      /**
+       * Inserts an Int8 value at the given offset value.
+       *
+       * @param value { Number } The value to insert.
+       * @param offset { Number } The offset to insert the value at.
+       *
+       * @return this
+       */
+      insertInt8(value, offset) {
+        return this._insertNumberValue(Buffer.prototype.writeInt8, 1, value, offset);
+      }
+      /**
+       * Writes an Int16BE value to the current write position (or at optional offset).
+       *
+       * @param value { Number } The value to write.
+       * @param offset { Number } The offset to write the value at.
+       *
+       * @return this
+       */
+      writeInt16BE(value, offset) {
+        return this._writeNumberValue(Buffer.prototype.writeInt16BE, 2, value, offset);
+      }
+      /**
+       * Inserts an Int16BE value at the given offset value.
+       *
+       * @param value { Number } The value to insert.
+       * @param offset { Number } The offset to insert the value at.
+       *
+       * @return this
+       */
+      insertInt16BE(value, offset) {
+        return this._insertNumberValue(Buffer.prototype.writeInt16BE, 2, value, offset);
+      }
+      /**
+       * Writes an Int16LE value to the current write position (or at optional offset).
+       *
+       * @param value { Number } The value to write.
+       * @param offset { Number } The offset to write the value at.
+       *
+       * @return this
+       */
+      writeInt16LE(value, offset) {
+        return this._writeNumberValue(Buffer.prototype.writeInt16LE, 2, value, offset);
+      }
+      /**
+       * Inserts an Int16LE value at the given offset value.
+       *
+       * @param value { Number } The value to insert.
+       * @param offset { Number } The offset to insert the value at.
+       *
+       * @return this
+       */
+      insertInt16LE(value, offset) {
+        return this._insertNumberValue(Buffer.prototype.writeInt16LE, 2, value, offset);
+      }
+      /**
+       * Writes an Int32BE value to the current write position (or at optional offset).
+       *
+       * @param value { Number } The value to write.
+       * @param offset { Number } The offset to write the value at.
+       *
+       * @return this
+       */
+      writeInt32BE(value, offset) {
+        return this._writeNumberValue(Buffer.prototype.writeInt32BE, 4, value, offset);
+      }
+      /**
+       * Inserts an Int32BE value at the given offset value.
+       *
+       * @param value { Number } The value to insert.
+       * @param offset { Number } The offset to insert the value at.
+       *
+       * @return this
+       */
+      insertInt32BE(value, offset) {
+        return this._insertNumberValue(Buffer.prototype.writeInt32BE, 4, value, offset);
+      }
+      /**
+       * Writes an Int32LE value to the current write position (or at optional offset).
+       *
+       * @param value { Number } The value to write.
+       * @param offset { Number } The offset to write the value at.
+       *
+       * @return this
+       */
+      writeInt32LE(value, offset) {
+        return this._writeNumberValue(Buffer.prototype.writeInt32LE, 4, value, offset);
+      }
+      /**
+       * Inserts an Int32LE value at the given offset value.
+       *
+       * @param value { Number } The value to insert.
+       * @param offset { Number } The offset to insert the value at.
+       *
+       * @return this
+       */
+      insertInt32LE(value, offset) {
+        return this._insertNumberValue(Buffer.prototype.writeInt32LE, 4, value, offset);
+      }
+      /**
+       * Writes a BigInt64BE value to the current write position (or at optional offset).
+       *
+       * @param value { BigInt } The value to write.
+       * @param offset { Number } The offset to write the value at.
+       *
+       * @return this
+       */
+      writeBigInt64BE(value, offset) {
+        utils_1.bigIntAndBufferInt64Check("writeBigInt64BE");
+        return this._writeNumberValue(Buffer.prototype.writeBigInt64BE, 8, value, offset);
+      }
+      /**
+       * Inserts a BigInt64BE value at the given offset value.
+       *
+       * @param value { BigInt } The value to insert.
+       * @param offset { Number } The offset to insert the value at.
+       *
+       * @return this
+       */
+      insertBigInt64BE(value, offset) {
+        utils_1.bigIntAndBufferInt64Check("writeBigInt64BE");
+        return this._insertNumberValue(Buffer.prototype.writeBigInt64BE, 8, value, offset);
+      }
+      /**
+       * Writes a BigInt64LE value to the current write position (or at optional offset).
+       *
+       * @param value { BigInt } The value to write.
+       * @param offset { Number } The offset to write the value at.
+       *
+       * @return this
+       */
+      writeBigInt64LE(value, offset) {
+        utils_1.bigIntAndBufferInt64Check("writeBigInt64LE");
+        return this._writeNumberValue(Buffer.prototype.writeBigInt64LE, 8, value, offset);
+      }
+      /**
+       * Inserts a Int64LE value at the given offset value.
+       *
+       * @param value { BigInt } The value to insert.
+       * @param offset { Number } The offset to insert the value at.
+       *
+       * @return this
+       */
+      insertBigInt64LE(value, offset) {
+        utils_1.bigIntAndBufferInt64Check("writeBigInt64LE");
+        return this._insertNumberValue(Buffer.prototype.writeBigInt64LE, 8, value, offset);
+      }
+      // Unsigned Integers
+      /**
+       * Reads an UInt8 value from the current read position or an optionally provided offset.
+       *
+       * @param offset { Number } The offset to read data from (optional)
+       * @return { Number }
+       */
+      readUInt8(offset) {
+        return this._readNumberValue(Buffer.prototype.readUInt8, 1, offset);
+      }
+      /**
+       * Reads an UInt16BE value from the current read position or an optionally provided offset.
+       *
+       * @param offset { Number } The offset to read data from (optional)
+       * @return { Number }
+       */
+      readUInt16BE(offset) {
+        return this._readNumberValue(Buffer.prototype.readUInt16BE, 2, offset);
+      }
+      /**
+       * Reads an UInt16LE value from the current read position or an optionally provided offset.
+       *
+       * @param offset { Number } The offset to read data from (optional)
+       * @return { Number }
+       */
+      readUInt16LE(offset) {
+        return this._readNumberValue(Buffer.prototype.readUInt16LE, 2, offset);
+      }
+      /**
+       * Reads an UInt32BE value from the current read position or an optionally provided offset.
+       *
+       * @param offset { Number } The offset to read data from (optional)
+       * @return { Number }
+       */
+      readUInt32BE(offset) {
+        return this._readNumberValue(Buffer.prototype.readUInt32BE, 4, offset);
+      }
+      /**
+       * Reads an UInt32LE value from the current read position or an optionally provided offset.
+       *
+       * @param offset { Number } The offset to read data from (optional)
+       * @return { Number }
+       */
+      readUInt32LE(offset) {
+        return this._readNumberValue(Buffer.prototype.readUInt32LE, 4, offset);
+      }
+      /**
+       * Reads a BigUInt64BE value from the current read position or an optionally provided offset.
+       *
+       * @param offset { Number } The offset to read data from (optional)
+       * @return { BigInt }
+       */
+      readBigUInt64BE(offset) {
+        utils_1.bigIntAndBufferInt64Check("readBigUInt64BE");
+        return this._readNumberValue(Buffer.prototype.readBigUInt64BE, 8, offset);
+      }
+      /**
+       * Reads a BigUInt64LE value from the current read position or an optionally provided offset.
+       *
+       * @param offset { Number } The offset to read data from (optional)
+       * @return { BigInt }
+       */
+      readBigUInt64LE(offset) {
+        utils_1.bigIntAndBufferInt64Check("readBigUInt64LE");
+        return this._readNumberValue(Buffer.prototype.readBigUInt64LE, 8, offset);
+      }
+      /**
+       * Writes an UInt8 value to the current write position (or at optional offset).
+       *
+       * @param value { Number } The value to write.
+       * @param offset { Number } The offset to write the value at.
+       *
+       * @return this
+       */
+      writeUInt8(value, offset) {
+        return this._writeNumberValue(Buffer.prototype.writeUInt8, 1, value, offset);
+      }
+      /**
+       * Inserts an UInt8 value at the given offset value.
+       *
+       * @param value { Number } The value to insert.
+       * @param offset { Number } The offset to insert the value at.
+       *
+       * @return this
+       */
+      insertUInt8(value, offset) {
+        return this._insertNumberValue(Buffer.prototype.writeUInt8, 1, value, offset);
+      }
+      /**
+       * Writes an UInt16BE value to the current write position (or at optional offset).
+       *
+       * @param value { Number } The value to write.
+       * @param offset { Number } The offset to write the value at.
+       *
+       * @return this
+       */
+      writeUInt16BE(value, offset) {
+        return this._writeNumberValue(Buffer.prototype.writeUInt16BE, 2, value, offset);
+      }
+      /**
+       * Inserts an UInt16BE value at the given offset value.
+       *
+       * @param value { Number } The value to insert.
+       * @param offset { Number } The offset to insert the value at.
+       *
+       * @return this
+       */
+      insertUInt16BE(value, offset) {
+        return this._insertNumberValue(Buffer.prototype.writeUInt16BE, 2, value, offset);
+      }
+      /**
+       * Writes an UInt16LE value to the current write position (or at optional offset).
+       *
+       * @param value { Number } The value to write.
+       * @param offset { Number } The offset to write the value at.
+       *
+       * @return this
+       */
+      writeUInt16LE(value, offset) {
+        return this._writeNumberValue(Buffer.prototype.writeUInt16LE, 2, value, offset);
+      }
+      /**
+       * Inserts an UInt16LE value at the given offset value.
+       *
+       * @param value { Number } The value to insert.
+       * @param offset { Number } The offset to insert the value at.
+       *
+       * @return this
+       */
+      insertUInt16LE(value, offset) {
+        return this._insertNumberValue(Buffer.prototype.writeUInt16LE, 2, value, offset);
+      }
+      /**
+       * Writes an UInt32BE value to the current write position (or at optional offset).
+       *
+       * @param value { Number } The value to write.
+       * @param offset { Number } The offset to write the value at.
+       *
+       * @return this
+       */
+      writeUInt32BE(value, offset) {
+        return this._writeNumberValue(Buffer.prototype.writeUInt32BE, 4, value, offset);
+      }
+      /**
+       * Inserts an UInt32BE value at the given offset value.
+       *
+       * @param value { Number } The value to insert.
+       * @param offset { Number } The offset to insert the value at.
+       *
+       * @return this
+       */
+      insertUInt32BE(value, offset) {
+        return this._insertNumberValue(Buffer.prototype.writeUInt32BE, 4, value, offset);
+      }
+      /**
+       * Writes an UInt32LE value to the current write position (or at optional offset).
+       *
+       * @param value { Number } The value to write.
+       * @param offset { Number } The offset to write the value at.
+       *
+       * @return this
+       */
+      writeUInt32LE(value, offset) {
+        return this._writeNumberValue(Buffer.prototype.writeUInt32LE, 4, value, offset);
+      }
+      /**
+       * Inserts an UInt32LE value at the given offset value.
+       *
+       * @param value { Number } The value to insert.
+       * @param offset { Number } The offset to insert the value at.
+       *
+       * @return this
+       */
+      insertUInt32LE(value, offset) {
+        return this._insertNumberValue(Buffer.prototype.writeUInt32LE, 4, value, offset);
+      }
+      /**
+       * Writes a BigUInt64BE value to the current write position (or at optional offset).
+       *
+       * @param value { Number } The value to write.
+       * @param offset { Number } The offset to write the value at.
+       *
+       * @return this
+       */
+      writeBigUInt64BE(value, offset) {
+        utils_1.bigIntAndBufferInt64Check("writeBigUInt64BE");
+        return this._writeNumberValue(Buffer.prototype.writeBigUInt64BE, 8, value, offset);
+      }
+      /**
+       * Inserts a BigUInt64BE value at the given offset value.
+       *
+       * @param value { Number } The value to insert.
+       * @param offset { Number } The offset to insert the value at.
+       *
+       * @return this
+       */
+      insertBigUInt64BE(value, offset) {
+        utils_1.bigIntAndBufferInt64Check("writeBigUInt64BE");
+        return this._insertNumberValue(Buffer.prototype.writeBigUInt64BE, 8, value, offset);
+      }
+      /**
+       * Writes a BigUInt64LE value to the current write position (or at optional offset).
+       *
+       * @param value { Number } The value to write.
+       * @param offset { Number } The offset to write the value at.
+       *
+       * @return this
+       */
+      writeBigUInt64LE(value, offset) {
+        utils_1.bigIntAndBufferInt64Check("writeBigUInt64LE");
+        return this._writeNumberValue(Buffer.prototype.writeBigUInt64LE, 8, value, offset);
+      }
+      /**
+       * Inserts a BigUInt64LE value at the given offset value.
+       *
+       * @param value { Number } The value to insert.
+       * @param offset { Number } The offset to insert the value at.
+       *
+       * @return this
+       */
+      insertBigUInt64LE(value, offset) {
+        utils_1.bigIntAndBufferInt64Check("writeBigUInt64LE");
+        return this._insertNumberValue(Buffer.prototype.writeBigUInt64LE, 8, value, offset);
+      }
+      // Floating Point
+      /**
+       * Reads an FloatBE value from the current read position or an optionally provided offset.
+       *
+       * @param offset { Number } The offset to read data from (optional)
+       * @return { Number }
+       */
+      readFloatBE(offset) {
+        return this._readNumberValue(Buffer.prototype.readFloatBE, 4, offset);
+      }
+      /**
+       * Reads an FloatLE value from the current read position or an optionally provided offset.
+       *
+       * @param offset { Number } The offset to read data from (optional)
+       * @return { Number }
+       */
+      readFloatLE(offset) {
+        return this._readNumberValue(Buffer.prototype.readFloatLE, 4, offset);
+      }
+      /**
+       * Writes a FloatBE value to the current write position (or at optional offset).
+       *
+       * @param value { Number } The value to write.
+       * @param offset { Number } The offset to write the value at.
+       *
+       * @return this
+       */
+      writeFloatBE(value, offset) {
+        return this._writeNumberValue(Buffer.prototype.writeFloatBE, 4, value, offset);
+      }
+      /**
+       * Inserts a FloatBE value at the given offset value.
+       *
+       * @param value { Number } The value to insert.
+       * @param offset { Number } The offset to insert the value at.
+       *
+       * @return this
+       */
+      insertFloatBE(value, offset) {
+        return this._insertNumberValue(Buffer.prototype.writeFloatBE, 4, value, offset);
+      }
+      /**
+       * Writes a FloatLE value to the current write position (or at optional offset).
+       *
+       * @param value { Number } The value to write.
+       * @param offset { Number } The offset to write the value at.
+       *
+       * @return this
+       */
+      writeFloatLE(value, offset) {
+        return this._writeNumberValue(Buffer.prototype.writeFloatLE, 4, value, offset);
+      }
+      /**
+       * Inserts a FloatLE value at the given offset value.
+       *
+       * @param value { Number } The value to insert.
+       * @param offset { Number } The offset to insert the value at.
+       *
+       * @return this
+       */
+      insertFloatLE(value, offset) {
+        return this._insertNumberValue(Buffer.prototype.writeFloatLE, 4, value, offset);
+      }
+      // Double Floating Point
+      /**
+       * Reads an DoublEBE value from the current read position or an optionally provided offset.
+       *
+       * @param offset { Number } The offset to read data from (optional)
+       * @return { Number }
+       */
+      readDoubleBE(offset) {
+        return this._readNumberValue(Buffer.prototype.readDoubleBE, 8, offset);
+      }
+      /**
+       * Reads an DoubleLE value from the current read position or an optionally provided offset.
+       *
+       * @param offset { Number } The offset to read data from (optional)
+       * @return { Number }
+       */
+      readDoubleLE(offset) {
+        return this._readNumberValue(Buffer.prototype.readDoubleLE, 8, offset);
+      }
+      /**
+       * Writes a DoubleBE value to the current write position (or at optional offset).
+       *
+       * @param value { Number } The value to write.
+       * @param offset { Number } The offset to write the value at.
+       *
+       * @return this
+       */
+      writeDoubleBE(value, offset) {
+        return this._writeNumberValue(Buffer.prototype.writeDoubleBE, 8, value, offset);
+      }
+      /**
+       * Inserts a DoubleBE value at the given offset value.
+       *
+       * @param value { Number } The value to insert.
+       * @param offset { Number } The offset to insert the value at.
+       *
+       * @return this
+       */
+      insertDoubleBE(value, offset) {
+        return this._insertNumberValue(Buffer.prototype.writeDoubleBE, 8, value, offset);
+      }
+      /**
+       * Writes a DoubleLE value to the current write position (or at optional offset).
+       *
+       * @param value { Number } The value to write.
+       * @param offset { Number } The offset to write the value at.
+       *
+       * @return this
+       */
+      writeDoubleLE(value, offset) {
+        return this._writeNumberValue(Buffer.prototype.writeDoubleLE, 8, value, offset);
+      }
+      /**
+       * Inserts a DoubleLE value at the given offset value.
+       *
+       * @param value { Number } The value to insert.
+       * @param offset { Number } The offset to insert the value at.
+       *
+       * @return this
+       */
+      insertDoubleLE(value, offset) {
+        return this._insertNumberValue(Buffer.prototype.writeDoubleLE, 8, value, offset);
+      }
+      // Strings
+      /**
+       * Reads a String from the current read position.
+       *
+       * @param arg1 { Number | String } The number of bytes to read as a String, or the BufferEncoding to use for
+       *             the string (Defaults to instance level encoding).
+       * @param encoding { String } The BufferEncoding to use for the string (Defaults to instance level encoding).
+       *
+       * @return { String }
+       */
+      readString(arg1, encoding) {
+        let lengthVal;
+        if (typeof arg1 === "number") {
+          utils_1.checkLengthValue(arg1);
+          lengthVal = Math.min(arg1, this.length - this._readOffset);
+        } else {
+          encoding = arg1;
+          lengthVal = this.length - this._readOffset;
+        }
+        if (typeof encoding !== "undefined") {
+          utils_1.checkEncoding(encoding);
+        }
+        const value = this._buff.slice(this._readOffset, this._readOffset + lengthVal).toString(encoding || this._encoding);
+        this._readOffset += lengthVal;
+        return value;
+      }
+      /**
+       * Inserts a String
+       *
+       * @param value { String } The String value to insert.
+       * @param offset { Number } The offset to insert the string at.
+       * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding).
+       *
+       * @return this
+       */
+      insertString(value, offset, encoding) {
+        utils_1.checkOffsetValue(offset);
+        return this._handleString(value, true, offset, encoding);
+      }
+      /**
+       * Writes a String
+       *
+       * @param value { String } The String value to write.
+       * @param arg2 { Number | String } The offset to write the string at, or the BufferEncoding to use.
+       * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding).
+       *
+       * @return this
+       */
+      writeString(value, arg2, encoding) {
+        return this._handleString(value, false, arg2, encoding);
+      }
+      /**
+       * Reads a null-terminated String from the current read position.
+       *
+       * @param encoding { String } The BufferEncoding to use for the string (Defaults to instance level encoding).
+       *
+       * @return { String }
+       */
+      readStringNT(encoding) {
+        if (typeof encoding !== "undefined") {
+          utils_1.checkEncoding(encoding);
+        }
+        let nullPos = this.length;
+        for (let i = this._readOffset; i < this.length; i++) {
+          if (this._buff[i] === 0) {
+            nullPos = i;
+            break;
+          }
+        }
+        const value = this._buff.slice(this._readOffset, nullPos);
+        this._readOffset = nullPos + 1;
+        return value.toString(encoding || this._encoding);
+      }
+      /**
+       * Inserts a null-terminated String.
+       *
+       * @param value { String } The String value to write.
+       * @param arg2 { Number | String } The offset to write the string to, or the BufferEncoding to use.
+       * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding).
+       *
+       * @return this
+       */
+      insertStringNT(value, offset, encoding) {
+        utils_1.checkOffsetValue(offset);
+        this.insertString(value, offset, encoding);
+        this.insertUInt8(0, offset + value.length);
+        return this;
+      }
+      /**
+       * Writes a null-terminated String.
+       *
+       * @param value { String } The String value to write.
+       * @param arg2 { Number | String } The offset to write the string to, or the BufferEncoding to use.
+       * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding).
+       *
+       * @return this
+       */
+      writeStringNT(value, arg2, encoding) {
+        this.writeString(value, arg2, encoding);
+        this.writeUInt8(0, typeof arg2 === "number" ? arg2 + value.length : this.writeOffset);
+        return this;
+      }
+      // Buffers
+      /**
+       * Reads a Buffer from the internal read position.
+       *
+       * @param length { Number } The length of data to read as a Buffer.
+       *
+       * @return { Buffer }
+       */
+      readBuffer(length) {
+        if (typeof length !== "undefined") {
+          utils_1.checkLengthValue(length);
+        }
+        const lengthVal = typeof length === "number" ? length : this.length;
+        const endPoint = Math.min(this.length, this._readOffset + lengthVal);
+        const value = this._buff.slice(this._readOffset, endPoint);
+        this._readOffset = endPoint;
+        return value;
+      }
+      /**
+       * Writes a Buffer to the current write position.
+       *
+       * @param value { Buffer } The Buffer to write.
+       * @param offset { Number } The offset to write the Buffer to.
+       *
+       * @return this
+       */
+      insertBuffer(value, offset) {
+        utils_1.checkOffsetValue(offset);
+        return this._handleBuffer(value, true, offset);
+      }
+      /**
+       * Writes a Buffer to the current write position.
+       *
+       * @param value { Buffer } The Buffer to write.
+       * @param offset { Number } The offset to write the Buffer to.
+       *
+       * @return this
+       */
+      writeBuffer(value, offset) {
+        return this._handleBuffer(value, false, offset);
+      }
+      /**
+       * Reads a null-terminated Buffer from the current read poisiton.
+       *
+       * @return { Buffer }
+       */
+      readBufferNT() {
+        let nullPos = this.length;
+        for (let i = this._readOffset; i < this.length; i++) {
+          if (this._buff[i] === 0) {
+            nullPos = i;
+            break;
+          }
+        }
+        const value = this._buff.slice(this._readOffset, nullPos);
+        this._readOffset = nullPos + 1;
+        return value;
+      }
+      /**
+       * Inserts a null-terminated Buffer.
+       *
+       * @param value { Buffer } The Buffer to write.
+       * @param offset { Number } The offset to write the Buffer to.
+       *
+       * @return this
+       */
+      insertBufferNT(value, offset) {
+        utils_1.checkOffsetValue(offset);
+        this.insertBuffer(value, offset);
+        this.insertUInt8(0, offset + value.length);
+        return this;
+      }
+      /**
+       * Writes a null-terminated Buffer.
+       *
+       * @param value { Buffer } The Buffer to write.
+       * @param offset { Number } The offset to write the Buffer to.
+       *
+       * @return this
+       */
+      writeBufferNT(value, offset) {
+        if (typeof offset !== "undefined") {
+          utils_1.checkOffsetValue(offset);
+        }
+        this.writeBuffer(value, offset);
+        this.writeUInt8(0, typeof offset === "number" ? offset + value.length : this._writeOffset);
+        return this;
+      }
+      /**
+       * Clears the SmartBuffer instance to its original empty state.
+       */
+      clear() {
+        this._writeOffset = 0;
+        this._readOffset = 0;
+        this.length = 0;
+        return this;
+      }
+      /**
+       * Gets the remaining data left to be read from the SmartBuffer instance.
+       *
+       * @return { Number }
+       */
+      remaining() {
+        return this.length - this._readOffset;
+      }
+      /**
+       * Gets the current read offset value of the SmartBuffer instance.
+       *
+       * @return { Number }
+       */
+      get readOffset() {
+        return this._readOffset;
+      }
+      /**
+       * Sets the read offset value of the SmartBuffer instance.
+       *
+       * @param offset { Number } - The offset value to set.
+       */
+      set readOffset(offset) {
+        utils_1.checkOffsetValue(offset);
+        utils_1.checkTargetOffset(offset, this);
+        this._readOffset = offset;
+      }
+      /**
+       * Gets the current write offset value of the SmartBuffer instance.
+       *
+       * @return { Number }
+       */
+      get writeOffset() {
+        return this._writeOffset;
+      }
+      /**
+       * Sets the write offset value of the SmartBuffer instance.
+       *
+       * @param offset { Number } - The offset value to set.
+       */
+      set writeOffset(offset) {
+        utils_1.checkOffsetValue(offset);
+        utils_1.checkTargetOffset(offset, this);
+        this._writeOffset = offset;
+      }
+      /**
+       * Gets the currently set string encoding of the SmartBuffer instance.
+       *
+       * @return { BufferEncoding } The string Buffer encoding currently set.
+       */
+      get encoding() {
+        return this._encoding;
+      }
+      /**
+       * Sets the string encoding of the SmartBuffer instance.
+       *
+       * @param encoding { BufferEncoding } The string Buffer encoding to set.
+       */
+      set encoding(encoding) {
+        utils_1.checkEncoding(encoding);
+        this._encoding = encoding;
+      }
+      /**
+       * Gets the underlying internal Buffer. (This includes unmanaged data in the Buffer)
+       *
+       * @return { Buffer } The Buffer value.
+       */
+      get internalBuffer() {
+        return this._buff;
+      }
+      /**
+       * Gets the value of the internal managed Buffer (Includes managed data only)
+       *
+       * @param { Buffer }
+       */
+      toBuffer() {
+        return this._buff.slice(0, this.length);
+      }
+      /**
+       * Gets the String value of the internal managed Buffer
+       *
+       * @param encoding { String } The BufferEncoding to display the Buffer as (defaults to instance level encoding).
+       */
+      toString(encoding) {
+        const encodingVal = typeof encoding === "string" ? encoding : this._encoding;
+        utils_1.checkEncoding(encodingVal);
+        return this._buff.toString(encodingVal, 0, this.length);
+      }
+      /**
+       * Destroys the SmartBuffer instance.
+       */
+      destroy() {
+        this.clear();
+        return this;
+      }
+      /**
+       * Handles inserting and writing strings.
+       *
+       * @param value { String } The String value to insert.
+       * @param isInsert { Boolean } True if inserting a string, false if writing.
+       * @param arg2 { Number | String } The offset to insert the string at, or the BufferEncoding to use.
+       * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding).
+       */
+      _handleString(value, isInsert, arg3, encoding) {
+        let offsetVal = this._writeOffset;
+        let encodingVal = this._encoding;
+        if (typeof arg3 === "number") {
+          offsetVal = arg3;
+        } else if (typeof arg3 === "string") {
+          utils_1.checkEncoding(arg3);
+          encodingVal = arg3;
+        }
+        if (typeof encoding === "string") {
+          utils_1.checkEncoding(encoding);
+          encodingVal = encoding;
+        }
+        const byteLength = Buffer.byteLength(value, encodingVal);
+        if (isInsert) {
+          this.ensureInsertable(byteLength, offsetVal);
+        } else {
+          this._ensureWriteable(byteLength, offsetVal);
+        }
+        this._buff.write(value, offsetVal, byteLength, encodingVal);
+        if (isInsert) {
+          this._writeOffset += byteLength;
+        } else {
+          if (typeof arg3 === "number") {
+            this._writeOffset = Math.max(this._writeOffset, offsetVal + byteLength);
+          } else {
+            this._writeOffset += byteLength;
+          }
+        }
+        return this;
+      }
+      /**
+       * Handles writing or insert of a Buffer.
+       *
+       * @param value { Buffer } The Buffer to write.
+       * @param offset { Number } The offset to write the Buffer to.
+       */
+      _handleBuffer(value, isInsert, offset) {
+        const offsetVal = typeof offset === "number" ? offset : this._writeOffset;
+        if (isInsert) {
+          this.ensureInsertable(value.length, offsetVal);
+        } else {
+          this._ensureWriteable(value.length, offsetVal);
+        }
+        value.copy(this._buff, offsetVal);
+        if (isInsert) {
+          this._writeOffset += value.length;
+        } else {
+          if (typeof offset === "number") {
+            this._writeOffset = Math.max(this._writeOffset, offsetVal + value.length);
+          } else {
+            this._writeOffset += value.length;
+          }
+        }
+        return this;
+      }
+      /**
+       * Ensures that the internal Buffer is large enough to read data.
+       *
+       * @param length { Number } The length of the data that needs to be read.
+       * @param offset { Number } The offset of the data that needs to be read.
+       */
+      ensureReadable(length, offset) {
+        let offsetVal = this._readOffset;
+        if (typeof offset !== "undefined") {
+          utils_1.checkOffsetValue(offset);
+          offsetVal = offset;
+        }
+        if (offsetVal < 0 || offsetVal + length > this.length) {
+          throw new Error(utils_1.ERRORS.INVALID_READ_BEYOND_BOUNDS);
+        }
+      }
+      /**
+       * Ensures that the internal Buffer is large enough to insert data.
+       *
+       * @param dataLength { Number } The length of the data that needs to be written.
+       * @param offset { Number } The offset of the data to be written.
+       */
+      ensureInsertable(dataLength, offset) {
+        utils_1.checkOffsetValue(offset);
+        this._ensureCapacity(this.length + dataLength);
+        if (offset < this.length) {
+          this._buff.copy(this._buff, offset + dataLength, offset, this._buff.length);
+        }
+        if (offset + dataLength > this.length) {
+          this.length = offset + dataLength;
+        } else {
+          this.length += dataLength;
+        }
+      }
+      /**
+       * Ensures that the internal Buffer is large enough to write data.
+       *
+       * @param dataLength { Number } The length of the data that needs to be written.
+       * @param offset { Number } The offset of the data to be written (defaults to writeOffset).
+       */
+      _ensureWriteable(dataLength, offset) {
+        const offsetVal = typeof offset === "number" ? offset : this._writeOffset;
+        this._ensureCapacity(offsetVal + dataLength);
+        if (offsetVal + dataLength > this.length) {
+          this.length = offsetVal + dataLength;
+        }
+      }
+      /**
+       * Ensures that the internal Buffer is large enough to write at least the given amount of data.
+       *
+       * @param minLength { Number } The minimum length of the data needs to be written.
+       */
+      _ensureCapacity(minLength) {
+        const oldLength = this._buff.length;
+        if (minLength > oldLength) {
+          let data = this._buff;
+          let newLength = oldLength * 3 / 2 + 1;
+          if (newLength < minLength) {
+            newLength = minLength;
+          }
+          this._buff = Buffer.allocUnsafe(newLength);
+          data.copy(this._buff, 0, 0, oldLength);
+        }
+      }
+      /**
+       * Reads a numeric number value using the provided function.
+       *
+       * @typeparam T { number | bigint } The type of the value to be read
+       *
+       * @param func { Function(offset: number) => number } The function to read data on the internal Buffer with.
+       * @param byteSize { Number } The number of bytes read.
+       * @param offset { Number } The offset to read from (optional). When this is not provided, the managed readOffset is used instead.
+       *
+       * @returns { T } the number value
+       */
+      _readNumberValue(func, byteSize, offset) {
+        this.ensureReadable(byteSize, offset);
+        const value = func.call(this._buff, typeof offset === "number" ? offset : this._readOffset);
+        if (typeof offset === "undefined") {
+          this._readOffset += byteSize;
+        }
+        return value;
+      }
+      /**
+       * Inserts a numeric number value based on the given offset and value.
+       *
+       * @typeparam T { number | bigint } The type of the value to be written
+       *
+       * @param func { Function(offset: T, offset?) => number} The function to write data on the internal Buffer with.
+       * @param byteSize { Number } The number of bytes written.
+       * @param value { T } The number value to write.
+       * @param offset { Number } the offset to write the number at (REQUIRED).
+       *
+       * @returns SmartBuffer this buffer
+       */
+      _insertNumberValue(func, byteSize, value, offset) {
+        utils_1.checkOffsetValue(offset);
+        this.ensureInsertable(byteSize, offset);
+        func.call(this._buff, value, offset);
+        this._writeOffset += byteSize;
+        return this;
+      }
+      /**
+       * Writes a numeric number value based on the given offset and value.
+       *
+       * @typeparam T { number | bigint } The type of the value to be written
+       *
+       * @param func { Function(offset: T, offset?) => number} The function to write data on the internal Buffer with.
+       * @param byteSize { Number } The number of bytes written.
+       * @param value { T } The number value to write.
+       * @param offset { Number } the offset to write the number at (REQUIRED).
+       *
+       * @returns SmartBuffer this buffer
+       */
+      _writeNumberValue(func, byteSize, value, offset) {
+        if (typeof offset === "number") {
+          if (offset < 0) {
+            throw new Error(utils_1.ERRORS.INVALID_WRITE_BEYOND_BOUNDS);
+          }
+          utils_1.checkOffsetValue(offset);
+        }
+        const offsetVal = typeof offset === "number" ? offset : this._writeOffset;
+        this._ensureWriteable(byteSize, offsetVal);
+        func.call(this._buff, value, offsetVal);
+        if (typeof offset === "number") {
+          this._writeOffset = Math.max(this._writeOffset, offsetVal + byteSize);
+        } else {
+          this._writeOffset += byteSize;
+        }
+        return this;
+      }
+    };
+    exports2.SmartBuffer = SmartBuffer;
+  }
+});
+
+// node_modules/.pnpm/socks@2.8.7/node_modules/socks/build/common/constants.js
+var require_constants3 = __commonJS({
+  "node_modules/.pnpm/socks@2.8.7/node_modules/socks/build/common/constants.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.SOCKS5_NO_ACCEPTABLE_AUTH = exports2.SOCKS5_CUSTOM_AUTH_END = exports2.SOCKS5_CUSTOM_AUTH_START = exports2.SOCKS_INCOMING_PACKET_SIZES = exports2.SocksClientState = exports2.Socks5Response = exports2.Socks5HostType = exports2.Socks5Auth = exports2.Socks4Response = exports2.SocksCommand = exports2.ERRORS = exports2.DEFAULT_TIMEOUT = void 0;
+    var DEFAULT_TIMEOUT = 3e4;
+    exports2.DEFAULT_TIMEOUT = DEFAULT_TIMEOUT;
+    var ERRORS = {
+      InvalidSocksCommand: "An invalid SOCKS command was provided. Valid options are connect, bind, and associate.",
+      InvalidSocksCommandForOperation: "An invalid SOCKS command was provided. Only a subset of commands are supported for this operation.",
+      InvalidSocksCommandChain: "An invalid SOCKS command was provided. Chaining currently only supports the connect command.",
+      InvalidSocksClientOptionsDestination: "An invalid destination host was provided.",
+      InvalidSocksClientOptionsExistingSocket: "An invalid existing socket was provided. This should be an instance of stream.Duplex.",
+      InvalidSocksClientOptionsProxy: "Invalid SOCKS proxy details were provided.",
+      InvalidSocksClientOptionsTimeout: "An invalid timeout value was provided. Please enter a value above 0 (in ms).",
+      InvalidSocksClientOptionsProxiesLength: "At least two socks proxies must be provided for chaining.",
+      InvalidSocksClientOptionsCustomAuthRange: "Custom auth must be a value between 0x80 and 0xFE.",
+      InvalidSocksClientOptionsCustomAuthOptions: "When a custom_auth_method is provided, custom_auth_request_handler, custom_auth_response_size, and custom_auth_response_handler must also be provided and valid.",
+      NegotiationError: "Negotiation error",
+      SocketClosed: "Socket closed",
+      ProxyConnectionTimedOut: "Proxy connection timed out",
+      InternalError: "SocksClient internal error (this should not happen)",
+      InvalidSocks4HandshakeResponse: "Received invalid Socks4 handshake response",
+      Socks4ProxyRejectedConnection: "Socks4 Proxy rejected connection",
+      InvalidSocks4IncomingConnectionResponse: "Socks4 invalid incoming connection response",
+      Socks4ProxyRejectedIncomingBoundConnection: "Socks4 Proxy rejected incoming bound connection",
+      InvalidSocks5InitialHandshakeResponse: "Received invalid Socks5 initial handshake response",
+      InvalidSocks5IntiailHandshakeSocksVersion: "Received invalid Socks5 initial handshake (invalid socks version)",
+      InvalidSocks5InitialHandshakeNoAcceptedAuthType: "Received invalid Socks5 initial handshake (no accepted authentication type)",
+      InvalidSocks5InitialHandshakeUnknownAuthType: "Received invalid Socks5 initial handshake (unknown authentication type)",
+      Socks5AuthenticationFailed: "Socks5 Authentication failed",
+      InvalidSocks5FinalHandshake: "Received invalid Socks5 final handshake response",
+      InvalidSocks5FinalHandshakeRejected: "Socks5 proxy rejected connection",
+      InvalidSocks5IncomingConnectionResponse: "Received invalid Socks5 incoming connection response",
+      Socks5ProxyRejectedIncomingBoundConnection: "Socks5 Proxy rejected incoming bound connection"
+    };
+    exports2.ERRORS = ERRORS;
+    var SOCKS_INCOMING_PACKET_SIZES = {
+      Socks5InitialHandshakeResponse: 2,
+      Socks5UserPassAuthenticationResponse: 2,
+      // Command response + incoming connection (bind)
+      Socks5ResponseHeader: 5,
+      // We need at least 5 to read the hostname length, then we wait for the address+port information.
+      Socks5ResponseIPv4: 10,
+      // 4 header + 4 ip + 2 port
+      Socks5ResponseIPv6: 22,
+      // 4 header + 16 ip + 2 port
+      Socks5ResponseHostname: /* @__PURE__ */ __name((hostNameLength) => hostNameLength + 7, "Socks5ResponseHostname"),
+      // 4 header + 1 host length + host + 2 port
+      // Command response + incoming connection (bind)
+      Socks4Response: 8
+      // 2 header + 2 port + 4 ip
+    };
+    exports2.SOCKS_INCOMING_PACKET_SIZES = SOCKS_INCOMING_PACKET_SIZES;
+    var SocksCommand;
+    (function(SocksCommand2) {
+      SocksCommand2[SocksCommand2["connect"] = 1] = "connect";
+      SocksCommand2[SocksCommand2["bind"] = 2] = "bind";
+      SocksCommand2[SocksCommand2["associate"] = 3] = "associate";
+    })(SocksCommand || (exports2.SocksCommand = SocksCommand = {}));
+    var Socks4Response;
+    (function(Socks4Response2) {
+      Socks4Response2[Socks4Response2["Granted"] = 90] = "Granted";
+      Socks4Response2[Socks4Response2["Failed"] = 91] = "Failed";
+      Socks4Response2[Socks4Response2["Rejected"] = 92] = "Rejected";
+      Socks4Response2[Socks4Response2["RejectedIdent"] = 93] = "RejectedIdent";
+    })(Socks4Response || (exports2.Socks4Response = Socks4Response = {}));
+    var Socks5Auth;
+    (function(Socks5Auth2) {
+      Socks5Auth2[Socks5Auth2["NoAuth"] = 0] = "NoAuth";
+      Socks5Auth2[Socks5Auth2["GSSApi"] = 1] = "GSSApi";
+      Socks5Auth2[Socks5Auth2["UserPass"] = 2] = "UserPass";
+    })(Socks5Auth || (exports2.Socks5Auth = Socks5Auth = {}));
+    var SOCKS5_CUSTOM_AUTH_START = 128;
+    exports2.SOCKS5_CUSTOM_AUTH_START = SOCKS5_CUSTOM_AUTH_START;
+    var SOCKS5_CUSTOM_AUTH_END = 254;
+    exports2.SOCKS5_CUSTOM_AUTH_END = SOCKS5_CUSTOM_AUTH_END;
+    var SOCKS5_NO_ACCEPTABLE_AUTH = 255;
+    exports2.SOCKS5_NO_ACCEPTABLE_AUTH = SOCKS5_NO_ACCEPTABLE_AUTH;
+    var Socks5Response;
+    (function(Socks5Response2) {
+      Socks5Response2[Socks5Response2["Granted"] = 0] = "Granted";
+      Socks5Response2[Socks5Response2["Failure"] = 1] = "Failure";
+      Socks5Response2[Socks5Response2["NotAllowed"] = 2] = "NotAllowed";
+      Socks5Response2[Socks5Response2["NetworkUnreachable"] = 3] = "NetworkUnreachable";
+      Socks5Response2[Socks5Response2["HostUnreachable"] = 4] = "HostUnreachable";
+      Socks5Response2[Socks5Response2["ConnectionRefused"] = 5] = "ConnectionRefused";
+      Socks5Response2[Socks5Response2["TTLExpired"] = 6] = "TTLExpired";
+      Socks5Response2[Socks5Response2["CommandNotSupported"] = 7] = "CommandNotSupported";
+      Socks5Response2[Socks5Response2["AddressNotSupported"] = 8] = "AddressNotSupported";
+    })(Socks5Response || (exports2.Socks5Response = Socks5Response = {}));
+    var Socks5HostType;
+    (function(Socks5HostType2) {
+      Socks5HostType2[Socks5HostType2["IPv4"] = 1] = "IPv4";
+      Socks5HostType2[Socks5HostType2["Hostname"] = 3] = "Hostname";
+      Socks5HostType2[Socks5HostType2["IPv6"] = 4] = "IPv6";
+    })(Socks5HostType || (exports2.Socks5HostType = Socks5HostType = {}));
+    var SocksClientState;
+    (function(SocksClientState2) {
+      SocksClientState2[SocksClientState2["Created"] = 0] = "Created";
+      SocksClientState2[SocksClientState2["Connecting"] = 1] = "Connecting";
+      SocksClientState2[SocksClientState2["Connected"] = 2] = "Connected";
+      SocksClientState2[SocksClientState2["SentInitialHandshake"] = 3] = "SentInitialHandshake";
+      SocksClientState2[SocksClientState2["ReceivedInitialHandshakeResponse"] = 4] = "ReceivedInitialHandshakeResponse";
+      SocksClientState2[SocksClientState2["SentAuthentication"] = 5] = "SentAuthentication";
+      SocksClientState2[SocksClientState2["ReceivedAuthenticationResponse"] = 6] = "ReceivedAuthenticationResponse";
+      SocksClientState2[SocksClientState2["SentFinalHandshake"] = 7] = "SentFinalHandshake";
+      SocksClientState2[SocksClientState2["ReceivedFinalResponse"] = 8] = "ReceivedFinalResponse";
+      SocksClientState2[SocksClientState2["BoundWaitingForConnection"] = 9] = "BoundWaitingForConnection";
+      SocksClientState2[SocksClientState2["Established"] = 10] = "Established";
+      SocksClientState2[SocksClientState2["Disconnected"] = 11] = "Disconnected";
+      SocksClientState2[SocksClientState2["Error"] = 99] = "Error";
+    })(SocksClientState || (exports2.SocksClientState = SocksClientState = {}));
+  }
+});
+
+// node_modules/.pnpm/socks@2.8.7/node_modules/socks/build/common/util.js
+var require_util = __commonJS({
+  "node_modules/.pnpm/socks@2.8.7/node_modules/socks/build/common/util.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.shuffleArray = exports2.SocksClientError = void 0;
+    var SocksClientError = class extends Error {
+      static {
+        __name(this, "SocksClientError");
+      }
+      constructor(message, options) {
+        super(message);
+        this.options = options;
+      }
+    };
+    exports2.SocksClientError = SocksClientError;
+    function shuffleArray(array) {
+      for (let i = array.length - 1; i > 0; i--) {
+        const j = Math.floor(Math.random() * (i + 1));
+        [array[i], array[j]] = [array[j], array[i]];
+      }
+    }
+    __name(shuffleArray, "shuffleArray");
+    exports2.shuffleArray = shuffleArray;
+  }
+});
+
+// node_modules/.pnpm/ip-address@10.1.0/node_modules/ip-address/dist/common.js
+var require_common2 = __commonJS({
+  "node_modules/.pnpm/ip-address@10.1.0/node_modules/ip-address/dist/common.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.isInSubnet = isInSubnet;
+    exports2.isCorrect = isCorrect;
+    exports2.numberToPaddedHex = numberToPaddedHex;
+    exports2.stringToPaddedHex = stringToPaddedHex;
+    exports2.testBit = testBit;
+    function isInSubnet(address) {
+      if (this.subnetMask < address.subnetMask) {
+        return false;
+      }
+      if (this.mask(address.subnetMask) === address.mask()) {
+        return true;
+      }
+      return false;
+    }
+    __name(isInSubnet, "isInSubnet");
+    function isCorrect(defaultBits) {
+      return function() {
+        if (this.addressMinusSuffix !== this.correctForm()) {
+          return false;
+        }
+        if (this.subnetMask === defaultBits && !this.parsedSubnet) {
+          return true;
+        }
+        return this.parsedSubnet === String(this.subnetMask);
+      };
+    }
+    __name(isCorrect, "isCorrect");
+    function numberToPaddedHex(number) {
+      return number.toString(16).padStart(2, "0");
+    }
+    __name(numberToPaddedHex, "numberToPaddedHex");
+    function stringToPaddedHex(numberString) {
+      return numberToPaddedHex(parseInt(numberString, 10));
+    }
+    __name(stringToPaddedHex, "stringToPaddedHex");
+    function testBit(binaryValue, position) {
+      const { length } = binaryValue;
+      if (position > length) {
+        return false;
+      }
+      const positionInString = length - position;
+      return binaryValue.substring(positionInString, positionInString + 1) === "1";
+    }
+    __name(testBit, "testBit");
+  }
+});
+
+// node_modules/.pnpm/ip-address@10.1.0/node_modules/ip-address/dist/v4/constants.js
+var require_constants4 = __commonJS({
+  "node_modules/.pnpm/ip-address@10.1.0/node_modules/ip-address/dist/v4/constants.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.RE_SUBNET_STRING = exports2.RE_ADDRESS = exports2.GROUPS = exports2.BITS = void 0;
+    exports2.BITS = 32;
+    exports2.GROUPS = 4;
+    exports2.RE_ADDRESS = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/g;
+    exports2.RE_SUBNET_STRING = /\/\d{1,2}$/;
+  }
+});
+
+// node_modules/.pnpm/ip-address@10.1.0/node_modules/ip-address/dist/address-error.js
+var require_address_error = __commonJS({
+  "node_modules/.pnpm/ip-address@10.1.0/node_modules/ip-address/dist/address-error.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.AddressError = void 0;
+    var AddressError = class extends Error {
+      static {
+        __name(this, "AddressError");
+      }
+      constructor(message, parseMessage) {
+        super(message);
+        this.name = "AddressError";
+        this.parseMessage = parseMessage;
+      }
+    };
+    exports2.AddressError = AddressError;
+  }
+});
+
+// node_modules/.pnpm/ip-address@10.1.0/node_modules/ip-address/dist/ipv4.js
+var require_ipv4 = __commonJS({
+  "node_modules/.pnpm/ip-address@10.1.0/node_modules/ip-address/dist/ipv4.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Address4 = void 0;
+    var common = __importStar(require_common2());
+    var constants = __importStar(require_constants4());
+    var address_error_1 = require_address_error();
+    var Address4 = class _Address4 {
+      static {
+        __name(this, "Address4");
+      }
+      constructor(address) {
+        this.groups = constants.GROUPS;
+        this.parsedAddress = [];
+        this.parsedSubnet = "";
+        this.subnet = "/32";
+        this.subnetMask = 32;
+        this.v4 = true;
+        this.isCorrect = common.isCorrect(constants.BITS);
+        this.isInSubnet = common.isInSubnet;
+        this.address = address;
+        const subnet = constants.RE_SUBNET_STRING.exec(address);
+        if (subnet) {
+          this.parsedSubnet = subnet[0].replace("/", "");
+          this.subnetMask = parseInt(this.parsedSubnet, 10);
+          this.subnet = `/${this.subnetMask}`;
+          if (this.subnetMask < 0 || this.subnetMask > constants.BITS) {
+            throw new address_error_1.AddressError("Invalid subnet mask.");
+          }
+          address = address.replace(constants.RE_SUBNET_STRING, "");
+        }
+        this.addressMinusSuffix = address;
+        this.parsedAddress = this.parse(address);
+      }
+      static isValid(address) {
+        try {
+          new _Address4(address);
+          return true;
+        } catch (e) {
+          return false;
+        }
+      }
+      /*
+       * Parses a v4 address
+       */
+      parse(address) {
+        const groups = address.split(".");
+        if (!address.match(constants.RE_ADDRESS)) {
+          throw new address_error_1.AddressError("Invalid IPv4 address.");
+        }
+        return groups;
+      }
+      /**
+       * Returns the correct form of an address
+       * @memberof Address4
+       * @instance
+       * @returns {String}
+       */
+      correctForm() {
+        return this.parsedAddress.map((part) => parseInt(part, 10)).join(".");
+      }
+      /**
+       * Converts a hex string to an IPv4 address object
+       * @memberof Address4
+       * @static
+       * @param {string} hex - a hex string to convert
+       * @returns {Address4}
+       */
+      static fromHex(hex) {
+        const padded = hex.replace(/:/g, "").padStart(8, "0");
+        const groups = [];
+        let i;
+        for (i = 0; i < 8; i += 2) {
+          const h = padded.slice(i, i + 2);
+          groups.push(parseInt(h, 16));
+        }
+        return new _Address4(groups.join("."));
+      }
+      /**
+       * Converts an integer into a IPv4 address object
+       * @memberof Address4
+       * @static
+       * @param {integer} integer - a number to convert
+       * @returns {Address4}
+       */
+      static fromInteger(integer) {
+        return _Address4.fromHex(integer.toString(16));
+      }
+      /**
+       * Return an address from in-addr.arpa form
+       * @memberof Address4
+       * @static
+       * @param {string} arpaFormAddress - an 'in-addr.arpa' form ipv4 address
+       * @returns {Adress4}
+       * @example
+       * var address = Address4.fromArpa(42.2.0.192.in-addr.arpa.)
+       * address.correctForm(); // '192.0.2.42'
+       */
+      static fromArpa(arpaFormAddress) {
+        const leader = arpaFormAddress.replace(/(\.in-addr\.arpa)?\.$/, "");
+        const address = leader.split(".").reverse().join(".");
+        return new _Address4(address);
+      }
+      /**
+       * Converts an IPv4 address object to a hex string
+       * @memberof Address4
+       * @instance
+       * @returns {String}
+       */
+      toHex() {
+        return this.parsedAddress.map((part) => common.stringToPaddedHex(part)).join(":");
+      }
+      /**
+       * Converts an IPv4 address object to an array of bytes
+       * @memberof Address4
+       * @instance
+       * @returns {Array}
+       */
+      toArray() {
+        return this.parsedAddress.map((part) => parseInt(part, 10));
+      }
+      /**
+       * Converts an IPv4 address object to an IPv6 address group
+       * @memberof Address4
+       * @instance
+       * @returns {String}
+       */
+      toGroup6() {
+        const output = [];
+        let i;
+        for (i = 0; i < constants.GROUPS; i += 2) {
+          output.push(`${common.stringToPaddedHex(this.parsedAddress[i])}${common.stringToPaddedHex(this.parsedAddress[i + 1])}`);
+        }
+        return output.join(":");
+      }
+      /**
+       * Returns the address as a `bigint`
+       * @memberof Address4
+       * @instance
+       * @returns {bigint}
+       */
+      bigInt() {
+        return BigInt(`0x${this.parsedAddress.map((n) => common.stringToPaddedHex(n)).join("")}`);
+      }
+      /**
+       * Helper function getting start address.
+       * @memberof Address4
+       * @instance
+       * @returns {bigint}
+       */
+      _startAddress() {
+        return BigInt(`0b${this.mask() + "0".repeat(constants.BITS - this.subnetMask)}`);
+      }
+      /**
+       * The first address in the range given by this address' subnet.
+       * Often referred to as the Network Address.
+       * @memberof Address4
+       * @instance
+       * @returns {Address4}
+       */
+      startAddress() {
+        return _Address4.fromBigInt(this._startAddress());
+      }
+      /**
+       * The first host address in the range given by this address's subnet ie
+       * the first address after the Network Address
+       * @memberof Address4
+       * @instance
+       * @returns {Address4}
+       */
+      startAddressExclusive() {
+        const adjust = BigInt("1");
+        return _Address4.fromBigInt(this._startAddress() + adjust);
+      }
+      /**
+       * Helper function getting end address.
+       * @memberof Address4
+       * @instance
+       * @returns {bigint}
+       */
+      _endAddress() {
+        return BigInt(`0b${this.mask() + "1".repeat(constants.BITS - this.subnetMask)}`);
+      }
+      /**
+       * The last address in the range given by this address' subnet
+       * Often referred to as the Broadcast
+       * @memberof Address4
+       * @instance
+       * @returns {Address4}
+       */
+      endAddress() {
+        return _Address4.fromBigInt(this._endAddress());
+      }
+      /**
+       * The last host address in the range given by this address's subnet ie
+       * the last address prior to the Broadcast Address
+       * @memberof Address4
+       * @instance
+       * @returns {Address4}
+       */
+      endAddressExclusive() {
+        const adjust = BigInt("1");
+        return _Address4.fromBigInt(this._endAddress() - adjust);
+      }
+      /**
+       * Converts a BigInt to a v4 address object
+       * @memberof Address4
+       * @static
+       * @param {bigint} bigInt - a BigInt to convert
+       * @returns {Address4}
+       */
+      static fromBigInt(bigInt) {
+        return _Address4.fromHex(bigInt.toString(16));
+      }
+      /**
+       * Convert a byte array to an Address4 object
+       * @memberof Address4
+       * @static
+       * @param {Array} bytes - an array of 4 bytes (0-255)
+       * @returns {Address4}
+       */
+      static fromByteArray(bytes) {
+        if (bytes.length !== 4) {
+          throw new address_error_1.AddressError("IPv4 addresses require exactly 4 bytes");
+        }
+        for (let i = 0; i < bytes.length; i++) {
+          if (!Number.isInteger(bytes[i]) || bytes[i] < 0 || bytes[i] > 255) {
+            throw new address_error_1.AddressError("All bytes must be integers between 0 and 255");
+          }
+        }
+        return this.fromUnsignedByteArray(bytes);
+      }
+      /**
+       * Convert an unsigned byte array to an Address4 object
+       * @memberof Address4
+       * @static
+       * @param {Array} bytes - an array of 4 unsigned bytes (0-255)
+       * @returns {Address4}
+       */
+      static fromUnsignedByteArray(bytes) {
+        if (bytes.length !== 4) {
+          throw new address_error_1.AddressError("IPv4 addresses require exactly 4 bytes");
+        }
+        const address = bytes.join(".");
+        return new _Address4(address);
+      }
+      /**
+       * Returns the first n bits of the address, defaulting to the
+       * subnet mask
+       * @memberof Address4
+       * @instance
+       * @returns {String}
+       */
+      mask(mask) {
+        if (mask === void 0) {
+          mask = this.subnetMask;
+        }
+        return this.getBitsBase2(0, mask);
+      }
+      /**
+       * Returns the bits in the given range as a base-2 string
+       * @memberof Address4
+       * @instance
+       * @returns {string}
+       */
+      getBitsBase2(start, end) {
+        return this.binaryZeroPad().slice(start, end);
+      }
+      /**
+       * Return the reversed ip6.arpa form of the address
+       * @memberof Address4
+       * @param {Object} options
+       * @param {boolean} options.omitSuffix - omit the "in-addr.arpa" suffix
+       * @instance
+       * @returns {String}
+       */
+      reverseForm(options) {
+        if (!options) {
+          options = {};
+        }
+        const reversed = this.correctForm().split(".").reverse().join(".");
+        if (options.omitSuffix) {
+          return reversed;
+        }
+        return `${reversed}.in-addr.arpa.`;
+      }
+      /**
+       * Returns true if the given address is a multicast address
+       * @memberof Address4
+       * @instance
+       * @returns {boolean}
+       */
+      isMulticast() {
+        return this.isInSubnet(new _Address4("224.0.0.0/4"));
+      }
+      /**
+       * Returns a zero-padded base-2 string representation of the address
+       * @memberof Address4
+       * @instance
+       * @returns {string}
+       */
+      binaryZeroPad() {
+        return this.bigInt().toString(2).padStart(constants.BITS, "0");
+      }
+      /**
+       * Groups an IPv4 address for inclusion at the end of an IPv6 address
+       * @returns {String}
+       */
+      groupForV6() {
+        const segments = this.parsedAddress;
+        return this.address.replace(constants.RE_ADDRESS, `${segments.slice(0, 2).join(".")}.${segments.slice(2, 4).join(".")}`);
+      }
+    };
+    exports2.Address4 = Address4;
+  }
+});
+
+// node_modules/.pnpm/ip-address@10.1.0/node_modules/ip-address/dist/v6/constants.js
+var require_constants5 = __commonJS({
+  "node_modules/.pnpm/ip-address@10.1.0/node_modules/ip-address/dist/v6/constants.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.RE_URL_WITH_PORT = exports2.RE_URL = exports2.RE_ZONE_STRING = exports2.RE_SUBNET_STRING = exports2.RE_BAD_ADDRESS = exports2.RE_BAD_CHARACTERS = exports2.TYPES = exports2.SCOPES = exports2.GROUPS = exports2.BITS = void 0;
+    exports2.BITS = 128;
+    exports2.GROUPS = 8;
+    exports2.SCOPES = {
+      0: "Reserved",
+      1: "Interface local",
+      2: "Link local",
+      4: "Admin local",
+      5: "Site local",
+      8: "Organization local",
+      14: "Global",
+      15: "Reserved"
+    };
+    exports2.TYPES = {
+      "ff01::1/128": "Multicast (All nodes on this interface)",
+      "ff01::2/128": "Multicast (All routers on this interface)",
+      "ff02::1/128": "Multicast (All nodes on this link)",
+      "ff02::2/128": "Multicast (All routers on this link)",
+      "ff05::2/128": "Multicast (All routers in this site)",
+      "ff02::5/128": "Multicast (OSPFv3 AllSPF routers)",
+      "ff02::6/128": "Multicast (OSPFv3 AllDR routers)",
+      "ff02::9/128": "Multicast (RIP routers)",
+      "ff02::a/128": "Multicast (EIGRP routers)",
+      "ff02::d/128": "Multicast (PIM routers)",
+      "ff02::16/128": "Multicast (MLDv2 reports)",
+      "ff01::fb/128": "Multicast (mDNSv6)",
+      "ff02::fb/128": "Multicast (mDNSv6)",
+      "ff05::fb/128": "Multicast (mDNSv6)",
+      "ff02::1:2/128": "Multicast (All DHCP servers and relay agents on this link)",
+      "ff05::1:2/128": "Multicast (All DHCP servers and relay agents in this site)",
+      "ff02::1:3/128": "Multicast (All DHCP servers on this link)",
+      "ff05::1:3/128": "Multicast (All DHCP servers in this site)",
+      "::/128": "Unspecified",
+      "::1/128": "Loopback",
+      "ff00::/8": "Multicast",
+      "fe80::/10": "Link-local unicast"
+    };
+    exports2.RE_BAD_CHARACTERS = /([^0-9a-f:/%])/gi;
+    exports2.RE_BAD_ADDRESS = /([0-9a-f]{5,}|:{3,}|[^:]:$|^:[^:]|\/$)/gi;
+    exports2.RE_SUBNET_STRING = /\/\d{1,3}(?=%|$)/;
+    exports2.RE_ZONE_STRING = /%.*$/;
+    exports2.RE_URL = /^\[{0,1}([0-9a-f:]+)\]{0,1}/;
+    exports2.RE_URL_WITH_PORT = /\[([0-9a-f:]+)\]:([0-9]{1,5})/;
+  }
+});
+
+// node_modules/.pnpm/ip-address@10.1.0/node_modules/ip-address/dist/v6/helpers.js
+var require_helpers2 = __commonJS({
+  "node_modules/.pnpm/ip-address@10.1.0/node_modules/ip-address/dist/v6/helpers.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.spanAllZeroes = spanAllZeroes;
+    exports2.spanAll = spanAll;
+    exports2.spanLeadingZeroes = spanLeadingZeroes;
+    exports2.simpleGroup = simpleGroup;
+    function spanAllZeroes(s) {
+      return s.replace(/(0+)/g, '$1');
+    }
+    __name(spanAllZeroes, "spanAllZeroes");
+    function spanAll(s, offset = 0) {
+      const letters = s.split("");
+      return letters.map((n, i) => `${spanAllZeroes(n)}`).join("");
+    }
+    __name(spanAll, "spanAll");
+    function spanLeadingZeroesSimple(group) {
+      return group.replace(/^(0+)/, '$1');
+    }
+    __name(spanLeadingZeroesSimple, "spanLeadingZeroesSimple");
+    function spanLeadingZeroes(address) {
+      const groups = address.split(":");
+      return groups.map((g) => spanLeadingZeroesSimple(g)).join(":");
+    }
+    __name(spanLeadingZeroes, "spanLeadingZeroes");
+    function simpleGroup(addressString, offset = 0) {
+      const groups = addressString.split(":");
+      return groups.map((g, i) => {
+        if (/group-v4/.test(g)) {
+          return g;
+        }
+        return `${spanLeadingZeroesSimple(g)}`;
+      });
+    }
+    __name(simpleGroup, "simpleGroup");
+  }
+});
+
+// node_modules/.pnpm/ip-address@10.1.0/node_modules/ip-address/dist/v6/regular-expressions.js
+var require_regular_expressions = __commonJS({
+  "node_modules/.pnpm/ip-address@10.1.0/node_modules/ip-address/dist/v6/regular-expressions.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.ADDRESS_BOUNDARY = void 0;
+    exports2.groupPossibilities = groupPossibilities;
+    exports2.padGroup = padGroup;
+    exports2.simpleRegularExpression = simpleRegularExpression;
+    exports2.possibleElisions = possibleElisions;
+    var v6 = __importStar(require_constants5());
+    function groupPossibilities(possibilities) {
+      return `(${possibilities.join("|")})`;
+    }
+    __name(groupPossibilities, "groupPossibilities");
+    function padGroup(group) {
+      if (group.length < 4) {
+        return `0{0,${4 - group.length}}${group}`;
+      }
+      return group;
+    }
+    __name(padGroup, "padGroup");
+    exports2.ADDRESS_BOUNDARY = "[^A-Fa-f0-9:]";
+    function simpleRegularExpression(groups) {
+      const zeroIndexes = [];
+      groups.forEach((group, i) => {
+        const groupInteger = parseInt(group, 16);
+        if (groupInteger === 0) {
+          zeroIndexes.push(i);
+        }
+      });
+      const possibilities = zeroIndexes.map((zeroIndex) => groups.map((group, i) => {
+        if (i === zeroIndex) {
+          const elision = i === 0 || i === v6.GROUPS - 1 ? ":" : "";
+          return groupPossibilities([padGroup(group), elision]);
+        }
+        return padGroup(group);
+      }).join(":"));
+      possibilities.push(groups.map(padGroup).join(":"));
+      return groupPossibilities(possibilities);
+    }
+    __name(simpleRegularExpression, "simpleRegularExpression");
+    function possibleElisions(elidedGroups, moreLeft, moreRight) {
+      const left = moreLeft ? "" : ":";
+      const right = moreRight ? "" : ":";
+      const possibilities = [];
+      if (!moreLeft && !moreRight) {
+        possibilities.push("::");
+      }
+      if (moreLeft && moreRight) {
+        possibilities.push("");
+      }
+      if (moreRight && !moreLeft || !moreRight && moreLeft) {
+        possibilities.push(":");
+      }
+      possibilities.push(`${left}(:0{1,4}){1,${elidedGroups - 1}}`);
+      possibilities.push(`(0{1,4}:){1,${elidedGroups - 1}}${right}`);
+      possibilities.push(`(0{1,4}:){${elidedGroups - 1}}0{1,4}`);
+      for (let groups = 1; groups < elidedGroups - 1; groups++) {
+        for (let position = 1; position < elidedGroups - groups; position++) {
+          possibilities.push(`(0{1,4}:){${position}}:(0{1,4}:){${elidedGroups - position - groups - 1}}0{1,4}`);
+        }
+      }
+      return groupPossibilities(possibilities);
+    }
+    __name(possibleElisions, "possibleElisions");
+  }
+});
+
+// node_modules/.pnpm/ip-address@10.1.0/node_modules/ip-address/dist/ipv6.js
+var require_ipv6 = __commonJS({
+  "node_modules/.pnpm/ip-address@10.1.0/node_modules/ip-address/dist/ipv6.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Address6 = void 0;
+    var common = __importStar(require_common2());
+    var constants4 = __importStar(require_constants4());
+    var constants6 = __importStar(require_constants5());
+    var helpers = __importStar(require_helpers2());
+    var ipv4_1 = require_ipv4();
+    var regular_expressions_1 = require_regular_expressions();
+    var address_error_1 = require_address_error();
+    var common_1 = require_common2();
+    function assert(condition) {
+      if (!condition) {
+        throw new Error("Assertion failed.");
+      }
+    }
+    __name(assert, "assert");
+    function addCommas(number) {
+      const r = /(\d+)(\d{3})/;
+      while (r.test(number)) {
+        number = number.replace(r, "$1,$2");
+      }
+      return number;
+    }
+    __name(addCommas, "addCommas");
+    function spanLeadingZeroes4(n) {
+      n = n.replace(/^(0{1,})([1-9]+)$/, '$1$2');
+      n = n.replace(/^(0{1,})(0)$/, '$1$2');
+      return n;
+    }
+    __name(spanLeadingZeroes4, "spanLeadingZeroes4");
+    function compact(address, slice) {
+      const s1 = [];
+      const s2 = [];
+      let i;
+      for (i = 0; i < address.length; i++) {
+        if (i < slice[0]) {
+          s1.push(address[i]);
+        } else if (i > slice[1]) {
+          s2.push(address[i]);
+        }
+      }
+      return s1.concat(["compact"]).concat(s2);
+    }
+    __name(compact, "compact");
+    function paddedHex(octet) {
+      return parseInt(octet, 16).toString(16).padStart(4, "0");
+    }
+    __name(paddedHex, "paddedHex");
+    function unsignByte(b) {
+      return b & 255;
+    }
+    __name(unsignByte, "unsignByte");
+    var Address6 = class _Address6 {
+      static {
+        __name(this, "Address6");
+      }
+      constructor(address, optionalGroups) {
+        this.addressMinusSuffix = "";
+        this.parsedSubnet = "";
+        this.subnet = "/128";
+        this.subnetMask = 128;
+        this.v4 = false;
+        this.zone = "";
+        this.isInSubnet = common.isInSubnet;
+        this.isCorrect = common.isCorrect(constants6.BITS);
+        if (optionalGroups === void 0) {
+          this.groups = constants6.GROUPS;
+        } else {
+          this.groups = optionalGroups;
+        }
+        this.address = address;
+        const subnet = constants6.RE_SUBNET_STRING.exec(address);
+        if (subnet) {
+          this.parsedSubnet = subnet[0].replace("/", "");
+          this.subnetMask = parseInt(this.parsedSubnet, 10);
+          this.subnet = `/${this.subnetMask}`;
+          if (Number.isNaN(this.subnetMask) || this.subnetMask < 0 || this.subnetMask > constants6.BITS) {
+            throw new address_error_1.AddressError("Invalid subnet mask.");
+          }
+          address = address.replace(constants6.RE_SUBNET_STRING, "");
+        } else if (/\//.test(address)) {
+          throw new address_error_1.AddressError("Invalid subnet mask.");
+        }
+        const zone = constants6.RE_ZONE_STRING.exec(address);
+        if (zone) {
+          this.zone = zone[0];
+          address = address.replace(constants6.RE_ZONE_STRING, "");
+        }
+        this.addressMinusSuffix = address;
+        this.parsedAddress = this.parse(this.addressMinusSuffix);
+      }
+      static isValid(address) {
+        try {
+          new _Address6(address);
+          return true;
+        } catch (e) {
+          return false;
+        }
+      }
+      /**
+       * Convert a BigInt to a v6 address object
+       * @memberof Address6
+       * @static
+       * @param {bigint} bigInt - a BigInt to convert
+       * @returns {Address6}
+       * @example
+       * var bigInt = BigInt('1000000000000');
+       * var address = Address6.fromBigInt(bigInt);
+       * address.correctForm(); // '::e8:d4a5:1000'
+       */
+      static fromBigInt(bigInt) {
+        const hex = bigInt.toString(16).padStart(32, "0");
+        const groups = [];
+        let i;
+        for (i = 0; i < constants6.GROUPS; i++) {
+          groups.push(hex.slice(i * 4, (i + 1) * 4));
+        }
+        return new _Address6(groups.join(":"));
+      }
+      /**
+       * Convert a URL (with optional port number) to an address object
+       * @memberof Address6
+       * @static
+       * @param {string} url - a URL with optional port number
+       * @example
+       * var addressAndPort = Address6.fromURL('http://[ffff::]:8080/foo/');
+       * addressAndPort.address.correctForm(); // 'ffff::'
+       * addressAndPort.port; // 8080
+       */
+      static fromURL(url) {
+        let host;
+        let port = null;
+        let result;
+        if (url.indexOf("[") !== -1 && url.indexOf("]:") !== -1) {
+          result = constants6.RE_URL_WITH_PORT.exec(url);
+          if (result === null) {
+            return {
+              error: "failed to parse address with port",
+              address: null,
+              port: null
+            };
+          }
+          host = result[1];
+          port = result[2];
+        } else if (url.indexOf("/") !== -1) {
+          url = url.replace(/^[a-z0-9]+:\/\//, "");
+          result = constants6.RE_URL.exec(url);
+          if (result === null) {
+            return {
+              error: "failed to parse address from URL",
+              address: null,
+              port: null
+            };
+          }
+          host = result[1];
+        } else {
+          host = url;
+        }
+        if (port) {
+          port = parseInt(port, 10);
+          if (port < 0 || port > 65536) {
+            port = null;
+          }
+        } else {
+          port = null;
+        }
+        return {
+          address: new _Address6(host),
+          port
+        };
+      }
+      /**
+       * Create an IPv6-mapped address given an IPv4 address
+       * @memberof Address6
+       * @static
+       * @param {string} address - An IPv4 address string
+       * @returns {Address6}
+       * @example
+       * var address = Address6.fromAddress4('192.168.0.1');
+       * address.correctForm(); // '::ffff:c0a8:1'
+       * address.to4in6(); // '::ffff:192.168.0.1'
+       */
+      static fromAddress4(address) {
+        const address4 = new ipv4_1.Address4(address);
+        const mask6 = constants6.BITS - (constants4.BITS - address4.subnetMask);
+        return new _Address6(`::ffff:${address4.correctForm()}/${mask6}`);
+      }
+      /**
+       * Return an address from ip6.arpa form
+       * @memberof Address6
+       * @static
+       * @param {string} arpaFormAddress - an 'ip6.arpa' form address
+       * @returns {Adress6}
+       * @example
+       * var address = Address6.fromArpa(e.f.f.f.3.c.2.6.f.f.f.e.6.6.8.e.1.0.6.7.9.4.e.c.0.0.0.0.1.0.0.2.ip6.arpa.)
+       * address.correctForm(); // '2001:0:ce49:7601:e866:efff:62c3:fffe'
+       */
+      static fromArpa(arpaFormAddress) {
+        let address = arpaFormAddress.replace(/(\.ip6\.arpa)?\.$/, "");
+        const semicolonAmount = 7;
+        if (address.length !== 63) {
+          throw new address_error_1.AddressError("Invalid 'ip6.arpa' form.");
+        }
+        const parts = address.split(".").reverse();
+        for (let i = semicolonAmount; i > 0; i--) {
+          const insertIndex = i * 4;
+          parts.splice(insertIndex, 0, ":");
+        }
+        address = parts.join("");
+        return new _Address6(address);
+      }
+      /**
+       * Return the Microsoft UNC transcription of the address
+       * @memberof Address6
+       * @instance
+       * @returns {String} the Microsoft UNC transcription of the address
+       */
+      microsoftTranscription() {
+        return `${this.correctForm().replace(/:/g, "-")}.ipv6-literal.net`;
+      }
+      /**
+       * Return the first n bits of the address, defaulting to the subnet mask
+       * @memberof Address6
+       * @instance
+       * @param {number} [mask=subnet] - the number of bits to mask
+       * @returns {String} the first n bits of the address as a string
+       */
+      mask(mask = this.subnetMask) {
+        return this.getBitsBase2(0, mask);
+      }
+      /**
+       * Return the number of possible subnets of a given size in the address
+       * @memberof Address6
+       * @instance
+       * @param {number} [subnetSize=128] - the subnet size
+       * @returns {String}
+       */
+      // TODO: probably useful to have a numeric version of this too
+      possibleSubnets(subnetSize = 128) {
+        const availableBits = constants6.BITS - this.subnetMask;
+        const subnetBits = Math.abs(subnetSize - constants6.BITS);
+        const subnetPowers = availableBits - subnetBits;
+        if (subnetPowers < 0) {
+          return "0";
+        }
+        return addCommas((BigInt("2") ** BigInt(subnetPowers)).toString(10));
+      }
+      /**
+       * Helper function getting start address.
+       * @memberof Address6
+       * @instance
+       * @returns {bigint}
+       */
+      _startAddress() {
+        return BigInt(`0b${this.mask() + "0".repeat(constants6.BITS - this.subnetMask)}`);
+      }
+      /**
+       * The first address in the range given by this address' subnet
+       * Often referred to as the Network Address.
+       * @memberof Address6
+       * @instance
+       * @returns {Address6}
+       */
+      startAddress() {
+        return _Address6.fromBigInt(this._startAddress());
+      }
+      /**
+       * The first host address in the range given by this address's subnet ie
+       * the first address after the Network Address
+       * @memberof Address6
+       * @instance
+       * @returns {Address6}
+       */
+      startAddressExclusive() {
+        const adjust = BigInt("1");
+        return _Address6.fromBigInt(this._startAddress() + adjust);
+      }
+      /**
+       * Helper function getting end address.
+       * @memberof Address6
+       * @instance
+       * @returns {bigint}
+       */
+      _endAddress() {
+        return BigInt(`0b${this.mask() + "1".repeat(constants6.BITS - this.subnetMask)}`);
+      }
+      /**
+       * The last address in the range given by this address' subnet
+       * Often referred to as the Broadcast
+       * @memberof Address6
+       * @instance
+       * @returns {Address6}
+       */
+      endAddress() {
+        return _Address6.fromBigInt(this._endAddress());
+      }
+      /**
+       * The last host address in the range given by this address's subnet ie
+       * the last address prior to the Broadcast Address
+       * @memberof Address6
+       * @instance
+       * @returns {Address6}
+       */
+      endAddressExclusive() {
+        const adjust = BigInt("1");
+        return _Address6.fromBigInt(this._endAddress() - adjust);
+      }
+      /**
+       * Return the scope of the address
+       * @memberof Address6
+       * @instance
+       * @returns {String}
+       */
+      getScope() {
+        let scope = constants6.SCOPES[parseInt(this.getBits(12, 16).toString(10), 10)];
+        if (this.getType() === "Global unicast" && scope !== "Link local") {
+          scope = "Global";
+        }
+        return scope || "Unknown";
+      }
+      /**
+       * Return the type of the address
+       * @memberof Address6
+       * @instance
+       * @returns {String}
+       */
+      getType() {
+        for (const subnet of Object.keys(constants6.TYPES)) {
+          if (this.isInSubnet(new _Address6(subnet))) {
+            return constants6.TYPES[subnet];
+          }
+        }
+        return "Global unicast";
+      }
+      /**
+       * Return the bits in the given range as a BigInt
+       * @memberof Address6
+       * @instance
+       * @returns {bigint}
+       */
+      getBits(start, end) {
+        return BigInt(`0b${this.getBitsBase2(start, end)}`);
+      }
+      /**
+       * Return the bits in the given range as a base-2 string
+       * @memberof Address6
+       * @instance
+       * @returns {String}
+       */
+      getBitsBase2(start, end) {
+        return this.binaryZeroPad().slice(start, end);
+      }
+      /**
+       * Return the bits in the given range as a base-16 string
+       * @memberof Address6
+       * @instance
+       * @returns {String}
+       */
+      getBitsBase16(start, end) {
+        const length = end - start;
+        if (length % 4 !== 0) {
+          throw new Error("Length of bits to retrieve must be divisible by four");
+        }
+        return this.getBits(start, end).toString(16).padStart(length / 4, "0");
+      }
+      /**
+       * Return the bits that are set past the subnet mask length
+       * @memberof Address6
+       * @instance
+       * @returns {String}
+       */
+      getBitsPastSubnet() {
+        return this.getBitsBase2(this.subnetMask, constants6.BITS);
+      }
+      /**
+       * Return the reversed ip6.arpa form of the address
+       * @memberof Address6
+       * @param {Object} options
+       * @param {boolean} options.omitSuffix - omit the "ip6.arpa" suffix
+       * @instance
+       * @returns {String}
+       */
+      reverseForm(options) {
+        if (!options) {
+          options = {};
+        }
+        const characters = Math.floor(this.subnetMask / 4);
+        const reversed = this.canonicalForm().replace(/:/g, "").split("").slice(0, characters).reverse().join(".");
+        if (characters > 0) {
+          if (options.omitSuffix) {
+            return reversed;
+          }
+          return `${reversed}.ip6.arpa.`;
+        }
+        if (options.omitSuffix) {
+          return "";
+        }
+        return "ip6.arpa.";
+      }
+      /**
+       * Return the correct form of the address
+       * @memberof Address6
+       * @instance
+       * @returns {String}
+       */
+      correctForm() {
+        let i;
+        let groups = [];
+        let zeroCounter = 0;
+        const zeroes = [];
+        for (i = 0; i < this.parsedAddress.length; i++) {
+          const value = parseInt(this.parsedAddress[i], 16);
+          if (value === 0) {
+            zeroCounter++;
+          }
+          if (value !== 0 && zeroCounter > 0) {
+            if (zeroCounter > 1) {
+              zeroes.push([i - zeroCounter, i - 1]);
+            }
+            zeroCounter = 0;
+          }
+        }
+        if (zeroCounter > 1) {
+          zeroes.push([this.parsedAddress.length - zeroCounter, this.parsedAddress.length - 1]);
+        }
+        const zeroLengths = zeroes.map((n) => n[1] - n[0] + 1);
+        if (zeroes.length > 0) {
+          const index = zeroLengths.indexOf(Math.max(...zeroLengths));
+          groups = compact(this.parsedAddress, zeroes[index]);
+        } else {
+          groups = this.parsedAddress;
+        }
+        for (i = 0; i < groups.length; i++) {
+          if (groups[i] !== "compact") {
+            groups[i] = parseInt(groups[i], 16).toString(16);
+          }
+        }
+        let correct = groups.join(":");
+        correct = correct.replace(/^compact$/, "::");
+        correct = correct.replace(/(^compact)|(compact$)/, ":");
+        correct = correct.replace(/compact/, "");
+        return correct;
+      }
+      /**
+       * Return a zero-padded base-2 string representation of the address
+       * @memberof Address6
+       * @instance
+       * @returns {String}
+       * @example
+       * var address = new Address6('2001:4860:4001:803::1011');
+       * address.binaryZeroPad();
+       * // '0010000000000001010010000110000001000000000000010000100000000011
+       * //  0000000000000000000000000000000000000000000000000001000000010001'
+       */
+      binaryZeroPad() {
+        return this.bigInt().toString(2).padStart(constants6.BITS, "0");
+      }
+      // TODO: Improve the semantics of this helper function
+      parse4in6(address) {
+        const groups = address.split(":");
+        const lastGroup = groups.slice(-1)[0];
+        const address4 = lastGroup.match(constants4.RE_ADDRESS);
+        if (address4) {
+          this.parsedAddress4 = address4[0];
+          this.address4 = new ipv4_1.Address4(this.parsedAddress4);
+          for (let i = 0; i < this.address4.groups; i++) {
+            if (/^0[0-9]+/.test(this.address4.parsedAddress[i])) {
+              throw new address_error_1.AddressError("IPv4 addresses can't have leading zeroes.", address.replace(constants4.RE_ADDRESS, this.address4.parsedAddress.map(spanLeadingZeroes4).join(".")));
+            }
+          }
+          this.v4 = true;
+          groups[groups.length - 1] = this.address4.toGroup6();
+          address = groups.join(":");
+        }
+        return address;
+      }
+      // TODO: Make private?
+      parse(address) {
+        address = this.parse4in6(address);
+        const badCharacters = address.match(constants6.RE_BAD_CHARACTERS);
+        if (badCharacters) {
+          throw new address_error_1.AddressError(`Bad character${badCharacters.length > 1 ? "s" : ""} detected in address: ${badCharacters.join("")}`, address.replace(constants6.RE_BAD_CHARACTERS, '$1'));
+        }
+        const badAddress = address.match(constants6.RE_BAD_ADDRESS);
+        if (badAddress) {
+          throw new address_error_1.AddressError(`Address failed regex: ${badAddress.join("")}`, address.replace(constants6.RE_BAD_ADDRESS, '$1'));
+        }
+        let groups = [];
+        const halves = address.split("::");
+        if (halves.length === 2) {
+          let first = halves[0].split(":");
+          let last = halves[1].split(":");
+          if (first.length === 1 && first[0] === "") {
+            first = [];
+          }
+          if (last.length === 1 && last[0] === "") {
+            last = [];
+          }
+          const remaining = this.groups - (first.length + last.length);
+          if (!remaining) {
+            throw new address_error_1.AddressError("Error parsing groups");
+          }
+          this.elidedGroups = remaining;
+          this.elisionBegin = first.length;
+          this.elisionEnd = first.length + this.elidedGroups;
+          groups = groups.concat(first);
+          for (let i = 0; i < remaining; i++) {
+            groups.push("0");
+          }
+          groups = groups.concat(last);
+        } else if (halves.length === 1) {
+          groups = address.split(":");
+          this.elidedGroups = 0;
+        } else {
+          throw new address_error_1.AddressError("Too many :: groups found");
+        }
+        groups = groups.map((group) => parseInt(group, 16).toString(16));
+        if (groups.length !== this.groups) {
+          throw new address_error_1.AddressError("Incorrect number of groups found");
+        }
+        return groups;
+      }
+      /**
+       * Return the canonical form of the address
+       * @memberof Address6
+       * @instance
+       * @returns {String}
+       */
+      canonicalForm() {
+        return this.parsedAddress.map(paddedHex).join(":");
+      }
+      /**
+       * Return the decimal form of the address
+       * @memberof Address6
+       * @instance
+       * @returns {String}
+       */
+      decimal() {
+        return this.parsedAddress.map((n) => parseInt(n, 16).toString(10).padStart(5, "0")).join(":");
+      }
+      /**
+       * Return the address as a BigInt
+       * @memberof Address6
+       * @instance
+       * @returns {bigint}
+       */
+      bigInt() {
+        return BigInt(`0x${this.parsedAddress.map(paddedHex).join("")}`);
+      }
+      /**
+       * Return the last two groups of this address as an IPv4 address string
+       * @memberof Address6
+       * @instance
+       * @returns {Address4}
+       * @example
+       * var address = new Address6('2001:4860:4001::1825:bf11');
+       * address.to4().correctForm(); // '24.37.191.17'
+       */
+      to4() {
+        const binary = this.binaryZeroPad().split("");
+        return ipv4_1.Address4.fromHex(BigInt(`0b${binary.slice(96, 128).join("")}`).toString(16));
+      }
+      /**
+       * Return the v4-in-v6 form of the address
+       * @memberof Address6
+       * @instance
+       * @returns {String}
+       */
+      to4in6() {
+        const address4 = this.to4();
+        const address6 = new _Address6(this.parsedAddress.slice(0, 6).join(":"), 6);
+        const correct = address6.correctForm();
+        let infix = "";
+        if (!/:$/.test(correct)) {
+          infix = ":";
+        }
+        return correct + infix + address4.address;
+      }
+      /**
+       * Return an object containing the Teredo properties of the address
+       * @memberof Address6
+       * @instance
+       * @returns {Object}
+       */
+      inspectTeredo() {
+        const prefix = this.getBitsBase16(0, 32);
+        const bitsForUdpPort = this.getBits(80, 96);
+        const udpPort = (bitsForUdpPort ^ BigInt("0xffff")).toString();
+        const server4 = ipv4_1.Address4.fromHex(this.getBitsBase16(32, 64));
+        const bitsForClient4 = this.getBits(96, 128);
+        const client4 = ipv4_1.Address4.fromHex((bitsForClient4 ^ BigInt("0xffffffff")).toString(16));
+        const flagsBase2 = this.getBitsBase2(64, 80);
+        const coneNat = (0, common_1.testBit)(flagsBase2, 15);
+        const reserved = (0, common_1.testBit)(flagsBase2, 14);
+        const groupIndividual = (0, common_1.testBit)(flagsBase2, 8);
+        const universalLocal = (0, common_1.testBit)(flagsBase2, 9);
+        const nonce = BigInt(`0b${flagsBase2.slice(2, 6) + flagsBase2.slice(8, 16)}`).toString(10);
+        return {
+          prefix: `${prefix.slice(0, 4)}:${prefix.slice(4, 8)}`,
+          server4: server4.address,
+          client4: client4.address,
+          flags: flagsBase2,
+          coneNat,
+          microsoft: {
+            reserved,
+            universalLocal,
+            groupIndividual,
+            nonce
+          },
+          udpPort
+        };
+      }
+      /**
+       * Return an object containing the 6to4 properties of the address
+       * @memberof Address6
+       * @instance
+       * @returns {Object}
+       */
+      inspect6to4() {
+        const prefix = this.getBitsBase16(0, 16);
+        const gateway = ipv4_1.Address4.fromHex(this.getBitsBase16(16, 48));
+        return {
+          prefix: prefix.slice(0, 4),
+          gateway: gateway.address
+        };
+      }
+      /**
+       * Return a v6 6to4 address from a v6 v4inv6 address
+       * @memberof Address6
+       * @instance
+       * @returns {Address6}
+       */
+      to6to4() {
+        if (!this.is4()) {
+          return null;
+        }
+        const addr6to4 = [
+          "2002",
+          this.getBitsBase16(96, 112),
+          this.getBitsBase16(112, 128),
+          "",
+          "/16"
+        ].join(":");
+        return new _Address6(addr6to4);
+      }
+      /**
+       * Return a byte array
+       * @memberof Address6
+       * @instance
+       * @returns {Array}
+       */
+      toByteArray() {
+        const valueWithoutPadding = this.bigInt().toString(16);
+        const leadingPad = "0".repeat(valueWithoutPadding.length % 2);
+        const value = `${leadingPad}${valueWithoutPadding}`;
+        const bytes = [];
+        for (let i = 0, length = value.length; i < length; i += 2) {
+          bytes.push(parseInt(value.substring(i, i + 2), 16));
+        }
+        return bytes;
+      }
+      /**
+       * Return an unsigned byte array
+       * @memberof Address6
+       * @instance
+       * @returns {Array}
+       */
+      toUnsignedByteArray() {
+        return this.toByteArray().map(unsignByte);
+      }
+      /**
+       * Convert a byte array to an Address6 object
+       * @memberof Address6
+       * @static
+       * @returns {Address6}
+       */
+      static fromByteArray(bytes) {
+        return this.fromUnsignedByteArray(bytes.map(unsignByte));
+      }
+      /**
+       * Convert an unsigned byte array to an Address6 object
+       * @memberof Address6
+       * @static
+       * @returns {Address6}
+       */
+      static fromUnsignedByteArray(bytes) {
+        const BYTE_MAX = BigInt("256");
+        let result = BigInt("0");
+        let multiplier = BigInt("1");
+        for (let i = bytes.length - 1; i >= 0; i--) {
+          result += multiplier * BigInt(bytes[i].toString(10));
+          multiplier *= BYTE_MAX;
+        }
+        return _Address6.fromBigInt(result);
+      }
+      /**
+       * Returns true if the address is in the canonical form, false otherwise
+       * @memberof Address6
+       * @instance
+       * @returns {boolean}
+       */
+      isCanonical() {
+        return this.addressMinusSuffix === this.canonicalForm();
+      }
+      /**
+       * Returns true if the address is a link local address, false otherwise
+       * @memberof Address6
+       * @instance
+       * @returns {boolean}
+       */
+      isLinkLocal() {
+        if (this.getBitsBase2(0, 64) === "1111111010000000000000000000000000000000000000000000000000000000") {
+          return true;
+        }
+        return false;
+      }
+      /**
+       * Returns true if the address is a multicast address, false otherwise
+       * @memberof Address6
+       * @instance
+       * @returns {boolean}
+       */
+      isMulticast() {
+        return this.getType() === "Multicast";
+      }
+      /**
+       * Returns true if the address is a v4-in-v6 address, false otherwise
+       * @memberof Address6
+       * @instance
+       * @returns {boolean}
+       */
+      is4() {
+        return this.v4;
+      }
+      /**
+       * Returns true if the address is a Teredo address, false otherwise
+       * @memberof Address6
+       * @instance
+       * @returns {boolean}
+       */
+      isTeredo() {
+        return this.isInSubnet(new _Address6("2001::/32"));
+      }
+      /**
+       * Returns true if the address is a 6to4 address, false otherwise
+       * @memberof Address6
+       * @instance
+       * @returns {boolean}
+       */
+      is6to4() {
+        return this.isInSubnet(new _Address6("2002::/16"));
+      }
+      /**
+       * Returns true if the address is a loopback address, false otherwise
+       * @memberof Address6
+       * @instance
+       * @returns {boolean}
+       */
+      isLoopback() {
+        return this.getType() === "Loopback";
+      }
+      // #endregion
+      // #region HTML
+      /**
+       * @returns {String} the address in link form with a default port of 80
+       */
+      href(optionalPort) {
+        if (optionalPort === void 0) {
+          optionalPort = "";
+        } else {
+          optionalPort = `:${optionalPort}`;
+        }
+        return `http://[${this.correctForm()}]${optionalPort}/`;
+      }
+      /**
+       * @returns {String} a link suitable for conveying the address via a URL hash
+       */
+      link(options) {
+        if (!options) {
+          options = {};
+        }
+        if (options.className === void 0) {
+          options.className = "";
+        }
+        if (options.prefix === void 0) {
+          options.prefix = "/#address=";
+        }
+        if (options.v4 === void 0) {
+          options.v4 = false;
+        }
+        let formFunction = this.correctForm;
+        if (options.v4) {
+          formFunction = this.to4in6;
+        }
+        const form = formFunction.call(this);
+        if (options.className) {
+          return `${form}`;
+        }
+        return `${form}`;
+      }
+      /**
+       * Groups an address
+       * @returns {String}
+       */
+      group() {
+        if (this.elidedGroups === 0) {
+          return helpers.simpleGroup(this.address).join(":");
+        }
+        assert(typeof this.elidedGroups === "number");
+        assert(typeof this.elisionBegin === "number");
+        const output = [];
+        const [left, right] = this.address.split("::");
+        if (left.length) {
+          output.push(...helpers.simpleGroup(left));
+        } else {
+          output.push("");
+        }
+        const classes = ["hover-group"];
+        for (let i = this.elisionBegin; i < this.elisionBegin + this.elidedGroups; i++) {
+          classes.push(`group-${i}`);
+        }
+        output.push(``);
+        if (right.length) {
+          output.push(...helpers.simpleGroup(right, this.elisionEnd));
+        } else {
+          output.push("");
+        }
+        if (this.is4()) {
+          assert(this.address4 instanceof ipv4_1.Address4);
+          output.pop();
+          output.push(this.address4.groupForV6());
+        }
+        return output.join(":");
+      }
+      // #endregion
+      // #region Regular expressions
+      /**
+       * Generate a regular expression string that can be used to find or validate
+       * all variations of this address
+       * @memberof Address6
+       * @instance
+       * @param {boolean} substringSearch
+       * @returns {string}
+       */
+      regularExpressionString(substringSearch = false) {
+        let output = [];
+        const address6 = new _Address6(this.correctForm());
+        if (address6.elidedGroups === 0) {
+          output.push((0, regular_expressions_1.simpleRegularExpression)(address6.parsedAddress));
+        } else if (address6.elidedGroups === constants6.GROUPS) {
+          output.push((0, regular_expressions_1.possibleElisions)(constants6.GROUPS));
+        } else {
+          const halves = address6.address.split("::");
+          if (halves[0].length) {
+            output.push((0, regular_expressions_1.simpleRegularExpression)(halves[0].split(":")));
+          }
+          assert(typeof address6.elidedGroups === "number");
+          output.push((0, regular_expressions_1.possibleElisions)(address6.elidedGroups, halves[0].length !== 0, halves[1].length !== 0));
+          if (halves[1].length) {
+            output.push((0, regular_expressions_1.simpleRegularExpression)(halves[1].split(":")));
+          }
+          output = [output.join(":")];
+        }
+        if (!substringSearch) {
+          output = [
+            "(?=^|",
+            regular_expressions_1.ADDRESS_BOUNDARY,
+            "|[^\\w\\:])(",
+            ...output,
+            ")(?=[^\\w\\:]|",
+            regular_expressions_1.ADDRESS_BOUNDARY,
+            "|$)"
+          ];
+        }
+        return output.join("");
+      }
+      /**
+       * Generate a regular expression that can be used to find or validate all
+       * variations of this address.
+       * @memberof Address6
+       * @instance
+       * @param {boolean} substringSearch
+       * @returns {RegExp}
+       */
+      regularExpression(substringSearch = false) {
+        return new RegExp(this.regularExpressionString(substringSearch), "i");
+      }
+    };
+    exports2.Address6 = Address6;
+  }
+});
+
+// node_modules/.pnpm/ip-address@10.1.0/node_modules/ip-address/dist/ip-address.js
+var require_ip_address = __commonJS({
+  "node_modules/.pnpm/ip-address@10.1.0/node_modules/ip-address/dist/ip-address.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.v6 = exports2.AddressError = exports2.Address6 = exports2.Address4 = void 0;
+    var ipv4_1 = require_ipv4();
+    Object.defineProperty(exports2, "Address4", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return ipv4_1.Address4;
+    }, "get") });
+    var ipv6_1 = require_ipv6();
+    Object.defineProperty(exports2, "Address6", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return ipv6_1.Address6;
+    }, "get") });
+    var address_error_1 = require_address_error();
+    Object.defineProperty(exports2, "AddressError", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return address_error_1.AddressError;
+    }, "get") });
+    var helpers = __importStar(require_helpers2());
+    exports2.v6 = { helpers };
+  }
+});
+
+// node_modules/.pnpm/socks@2.8.7/node_modules/socks/build/common/helpers.js
+var require_helpers3 = __commonJS({
+  "node_modules/.pnpm/socks@2.8.7/node_modules/socks/build/common/helpers.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.ipToBuffer = exports2.int32ToIpv4 = exports2.ipv4ToInt32 = exports2.validateSocksClientChainOptions = exports2.validateSocksClientOptions = void 0;
+    var util_1 = require_util();
+    var constants_1 = require_constants3();
+    var stream = require("stream");
+    var ip_address_1 = require_ip_address();
+    var net = require("net");
+    function validateSocksClientOptions(options, acceptedCommands = ["connect", "bind", "associate"]) {
+      if (!constants_1.SocksCommand[options.command]) {
+        throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksCommand, options);
+      }
+      if (acceptedCommands.indexOf(options.command) === -1) {
+        throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksCommandForOperation, options);
+      }
+      if (!isValidSocksRemoteHost(options.destination)) {
+        throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsDestination, options);
+      }
+      if (!isValidSocksProxy(options.proxy)) {
+        throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsProxy, options);
+      }
+      validateCustomProxyAuth(options.proxy, options);
+      if (options.timeout && !isValidTimeoutValue(options.timeout)) {
+        throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsTimeout, options);
+      }
+      if (options.existing_socket && !(options.existing_socket instanceof stream.Duplex)) {
+        throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsExistingSocket, options);
+      }
+    }
+    __name(validateSocksClientOptions, "validateSocksClientOptions");
+    exports2.validateSocksClientOptions = validateSocksClientOptions;
+    function validateSocksClientChainOptions(options) {
+      if (options.command !== "connect") {
+        throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksCommandChain, options);
+      }
+      if (!isValidSocksRemoteHost(options.destination)) {
+        throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsDestination, options);
+      }
+      if (!(options.proxies && Array.isArray(options.proxies) && options.proxies.length >= 2)) {
+        throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsProxiesLength, options);
+      }
+      options.proxies.forEach((proxy) => {
+        if (!isValidSocksProxy(proxy)) {
+          throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsProxy, options);
+        }
+        validateCustomProxyAuth(proxy, options);
+      });
+      if (options.timeout && !isValidTimeoutValue(options.timeout)) {
+        throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsTimeout, options);
+      }
+    }
+    __name(validateSocksClientChainOptions, "validateSocksClientChainOptions");
+    exports2.validateSocksClientChainOptions = validateSocksClientChainOptions;
+    function validateCustomProxyAuth(proxy, options) {
+      if (proxy.custom_auth_method !== void 0) {
+        if (proxy.custom_auth_method < constants_1.SOCKS5_CUSTOM_AUTH_START || proxy.custom_auth_method > constants_1.SOCKS5_CUSTOM_AUTH_END) {
+          throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsCustomAuthRange, options);
+        }
+        if (proxy.custom_auth_request_handler === void 0 || typeof proxy.custom_auth_request_handler !== "function") {
+          throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsCustomAuthOptions, options);
+        }
+        if (proxy.custom_auth_response_size === void 0) {
+          throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsCustomAuthOptions, options);
+        }
+        if (proxy.custom_auth_response_handler === void 0 || typeof proxy.custom_auth_response_handler !== "function") {
+          throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsCustomAuthOptions, options);
+        }
+      }
+    }
+    __name(validateCustomProxyAuth, "validateCustomProxyAuth");
+    function isValidSocksRemoteHost(remoteHost) {
+      return remoteHost && typeof remoteHost.host === "string" && Buffer.byteLength(remoteHost.host) < 256 && typeof remoteHost.port === "number" && remoteHost.port >= 0 && remoteHost.port <= 65535;
+    }
+    __name(isValidSocksRemoteHost, "isValidSocksRemoteHost");
+    function isValidSocksProxy(proxy) {
+      return proxy && (typeof proxy.host === "string" || typeof proxy.ipaddress === "string") && typeof proxy.port === "number" && proxy.port >= 0 && proxy.port <= 65535 && (proxy.type === 4 || proxy.type === 5);
+    }
+    __name(isValidSocksProxy, "isValidSocksProxy");
+    function isValidTimeoutValue(value) {
+      return typeof value === "number" && value > 0;
+    }
+    __name(isValidTimeoutValue, "isValidTimeoutValue");
+    function ipv4ToInt32(ip) {
+      const address = new ip_address_1.Address4(ip);
+      return address.toArray().reduce((acc, part) => (acc << 8) + part, 0) >>> 0;
+    }
+    __name(ipv4ToInt32, "ipv4ToInt32");
+    exports2.ipv4ToInt32 = ipv4ToInt32;
+    function int32ToIpv4(int32) {
+      const octet1 = int32 >>> 24 & 255;
+      const octet2 = int32 >>> 16 & 255;
+      const octet3 = int32 >>> 8 & 255;
+      const octet4 = int32 & 255;
+      return [octet1, octet2, octet3, octet4].join(".");
+    }
+    __name(int32ToIpv4, "int32ToIpv4");
+    exports2.int32ToIpv4 = int32ToIpv4;
+    function ipToBuffer(ip) {
+      if (net.isIPv4(ip)) {
+        const address = new ip_address_1.Address4(ip);
+        return Buffer.from(address.toArray());
+      } else if (net.isIPv6(ip)) {
+        const address = new ip_address_1.Address6(ip);
+        return Buffer.from(address.canonicalForm().split(":").map((segment) => segment.padStart(4, "0")).join(""), "hex");
+      } else {
+        throw new Error("Invalid IP address format");
+      }
+    }
+    __name(ipToBuffer, "ipToBuffer");
+    exports2.ipToBuffer = ipToBuffer;
+  }
+});
+
+// node_modules/.pnpm/socks@2.8.7/node_modules/socks/build/common/receivebuffer.js
+var require_receivebuffer = __commonJS({
+  "node_modules/.pnpm/socks@2.8.7/node_modules/socks/build/common/receivebuffer.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.ReceiveBuffer = void 0;
+    var ReceiveBuffer = class {
+      static {
+        __name(this, "ReceiveBuffer");
+      }
+      constructor(size = 4096) {
+        this.buffer = Buffer.allocUnsafe(size);
+        this.offset = 0;
+        this.originalSize = size;
+      }
+      get length() {
+        return this.offset;
+      }
+      append(data) {
+        if (!Buffer.isBuffer(data)) {
+          throw new Error("Attempted to append a non-buffer instance to ReceiveBuffer.");
+        }
+        if (this.offset + data.length >= this.buffer.length) {
+          const tmp = this.buffer;
+          this.buffer = Buffer.allocUnsafe(Math.max(this.buffer.length + this.originalSize, this.buffer.length + data.length));
+          tmp.copy(this.buffer);
+        }
+        data.copy(this.buffer, this.offset);
+        return this.offset += data.length;
+      }
+      peek(length) {
+        if (length > this.offset) {
+          throw new Error("Attempted to read beyond the bounds of the managed internal data.");
+        }
+        return this.buffer.slice(0, length);
+      }
+      get(length) {
+        if (length > this.offset) {
+          throw new Error("Attempted to read beyond the bounds of the managed internal data.");
+        }
+        const value = Buffer.allocUnsafe(length);
+        this.buffer.slice(0, length).copy(value);
+        this.buffer.copyWithin(0, length, length + this.offset - length);
+        this.offset -= length;
+        return value;
+      }
+    };
+    exports2.ReceiveBuffer = ReceiveBuffer;
+  }
+});
+
+// node_modules/.pnpm/socks@2.8.7/node_modules/socks/build/client/socksclient.js
+var require_socksclient = __commonJS({
+  "node_modules/.pnpm/socks@2.8.7/node_modules/socks/build/client/socksclient.js"(exports2) {
+    "use strict";
+    var __awaiter = exports2 && exports2.__awaiter || function(thisArg, _arguments, P, generator) {
+      function adopt(value) {
+        return value instanceof P ? value : new P(function(resolve) {
+          resolve(value);
+        });
+      }
+      __name(adopt, "adopt");
+      return new (P || (P = Promise))(function(resolve, reject) {
+        function fulfilled(value) {
+          try {
+            step(generator.next(value));
+          } catch (e) {
+            reject(e);
+          }
+        }
+        __name(fulfilled, "fulfilled");
+        function rejected(value) {
+          try {
+            step(generator["throw"](value));
+          } catch (e) {
+            reject(e);
+          }
+        }
+        __name(rejected, "rejected");
+        function step(result) {
+          result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
+        }
+        __name(step, "step");
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+      });
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.SocksClientError = exports2.SocksClient = void 0;
+    var events_1 = require("events");
+    var net = require("net");
+    var smart_buffer_1 = require_smartbuffer();
+    var constants_1 = require_constants3();
+    var helpers_1 = require_helpers3();
+    var receivebuffer_1 = require_receivebuffer();
+    var util_1 = require_util();
+    Object.defineProperty(exports2, "SocksClientError", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return util_1.SocksClientError;
+    }, "get") });
+    var ip_address_1 = require_ip_address();
+    var SocksClient = class _SocksClient extends events_1.EventEmitter {
+      static {
+        __name(this, "SocksClient");
+      }
+      constructor(options) {
+        super();
+        this.options = Object.assign({}, options);
+        (0, helpers_1.validateSocksClientOptions)(options);
+        this.setState(constants_1.SocksClientState.Created);
+      }
+      /**
+       * Creates a new SOCKS connection.
+       *
+       * Note: Supports callbacks and promises. Only supports the connect command.
+       * @param options { SocksClientOptions } Options.
+       * @param callback { Function } An optional callback function.
+       * @returns { Promise }
+       */
+      static createConnection(options, callback) {
+        return new Promise((resolve, reject) => {
+          try {
+            (0, helpers_1.validateSocksClientOptions)(options, ["connect"]);
+          } catch (err) {
+            if (typeof callback === "function") {
+              callback(err);
+              return resolve(err);
+            } else {
+              return reject(err);
+            }
+          }
+          const client = new _SocksClient(options);
+          client.connect(options.existing_socket);
+          client.once("established", (info) => {
+            client.removeAllListeners();
+            if (typeof callback === "function") {
+              callback(null, info);
+              resolve(info);
+            } else {
+              resolve(info);
+            }
+          });
+          client.once("error", (err) => {
+            client.removeAllListeners();
+            if (typeof callback === "function") {
+              callback(err);
+              resolve(err);
+            } else {
+              reject(err);
+            }
+          });
+        });
+      }
+      /**
+       * Creates a new SOCKS connection chain to a destination host through 2 or more SOCKS proxies.
+       *
+       * Note: Supports callbacks and promises. Only supports the connect method.
+       * Note: Implemented via createConnection() factory function.
+       * @param options { SocksClientChainOptions } Options
+       * @param callback { Function } An optional callback function.
+       * @returns { Promise }
+       */
+      static createConnectionChain(options, callback) {
+        return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
+          try {
+            (0, helpers_1.validateSocksClientChainOptions)(options);
+          } catch (err) {
+            if (typeof callback === "function") {
+              callback(err);
+              return resolve(err);
+            } else {
+              return reject(err);
+            }
+          }
+          if (options.randomizeChain) {
+            (0, util_1.shuffleArray)(options.proxies);
+          }
+          try {
+            let sock;
+            for (let i = 0; i < options.proxies.length; i++) {
+              const nextProxy = options.proxies[i];
+              const nextDestination = i === options.proxies.length - 1 ? options.destination : {
+                host: options.proxies[i + 1].host || options.proxies[i + 1].ipaddress,
+                port: options.proxies[i + 1].port
+              };
+              const result = yield _SocksClient.createConnection({
+                command: "connect",
+                proxy: nextProxy,
+                destination: nextDestination,
+                existing_socket: sock
+              });
+              sock = sock || result.socket;
+            }
+            if (typeof callback === "function") {
+              callback(null, { socket: sock });
+              resolve({ socket: sock });
+            } else {
+              resolve({ socket: sock });
+            }
+          } catch (err) {
+            if (typeof callback === "function") {
+              callback(err);
+              resolve(err);
+            } else {
+              reject(err);
+            }
+          }
+        }));
+      }
+      /**
+       * Creates a SOCKS UDP Frame.
+       * @param options
+       */
+      static createUDPFrame(options) {
+        const buff = new smart_buffer_1.SmartBuffer();
+        buff.writeUInt16BE(0);
+        buff.writeUInt8(options.frameNumber || 0);
+        if (net.isIPv4(options.remoteHost.host)) {
+          buff.writeUInt8(constants_1.Socks5HostType.IPv4);
+          buff.writeUInt32BE((0, helpers_1.ipv4ToInt32)(options.remoteHost.host));
+        } else if (net.isIPv6(options.remoteHost.host)) {
+          buff.writeUInt8(constants_1.Socks5HostType.IPv6);
+          buff.writeBuffer((0, helpers_1.ipToBuffer)(options.remoteHost.host));
+        } else {
+          buff.writeUInt8(constants_1.Socks5HostType.Hostname);
+          buff.writeUInt8(Buffer.byteLength(options.remoteHost.host));
+          buff.writeString(options.remoteHost.host);
+        }
+        buff.writeUInt16BE(options.remoteHost.port);
+        buff.writeBuffer(options.data);
+        return buff.toBuffer();
+      }
+      /**
+       * Parses a SOCKS UDP frame.
+       * @param data
+       */
+      static parseUDPFrame(data) {
+        const buff = smart_buffer_1.SmartBuffer.fromBuffer(data);
+        buff.readOffset = 2;
+        const frameNumber = buff.readUInt8();
+        const hostType = buff.readUInt8();
+        let remoteHost;
+        if (hostType === constants_1.Socks5HostType.IPv4) {
+          remoteHost = (0, helpers_1.int32ToIpv4)(buff.readUInt32BE());
+        } else if (hostType === constants_1.Socks5HostType.IPv6) {
+          remoteHost = ip_address_1.Address6.fromByteArray(Array.from(buff.readBuffer(16))).canonicalForm();
+        } else {
+          remoteHost = buff.readString(buff.readUInt8());
+        }
+        const remotePort = buff.readUInt16BE();
+        return {
+          frameNumber,
+          remoteHost: {
+            host: remoteHost,
+            port: remotePort
+          },
+          data: buff.readBuffer()
+        };
+      }
+      /**
+       * Internal state setter. If the SocksClient is in an error state, it cannot be changed to a non error state.
+       */
+      setState(newState) {
+        if (this.state !== constants_1.SocksClientState.Error) {
+          this.state = newState;
+        }
+      }
+      /**
+       * Starts the connection establishment to the proxy and destination.
+       * @param existingSocket Connected socket to use instead of creating a new one (internal use).
+       */
+      connect(existingSocket) {
+        this.onDataReceived = (data) => this.onDataReceivedHandler(data);
+        this.onClose = () => this.onCloseHandler();
+        this.onError = (err) => this.onErrorHandler(err);
+        this.onConnect = () => this.onConnectHandler();
+        const timer = setTimeout(() => this.onEstablishedTimeout(), this.options.timeout || constants_1.DEFAULT_TIMEOUT);
+        if (timer.unref && typeof timer.unref === "function") {
+          timer.unref();
+        }
+        if (existingSocket) {
+          this.socket = existingSocket;
+        } else {
+          this.socket = new net.Socket();
+        }
+        this.socket.once("close", this.onClose);
+        this.socket.once("error", this.onError);
+        this.socket.once("connect", this.onConnect);
+        this.socket.on("data", this.onDataReceived);
+        this.setState(constants_1.SocksClientState.Connecting);
+        this.receiveBuffer = new receivebuffer_1.ReceiveBuffer();
+        if (existingSocket) {
+          this.socket.emit("connect");
+        } else {
+          this.socket.connect(this.getSocketOptions());
+          if (this.options.set_tcp_nodelay !== void 0 && this.options.set_tcp_nodelay !== null) {
+            this.socket.setNoDelay(!!this.options.set_tcp_nodelay);
+          }
+        }
+        this.prependOnceListener("established", (info) => {
+          setImmediate(() => {
+            if (this.receiveBuffer.length > 0) {
+              const excessData = this.receiveBuffer.get(this.receiveBuffer.length);
+              info.socket.emit("data", excessData);
+            }
+            info.socket.resume();
+          });
+        });
+      }
+      // Socket options (defaults host/port to options.proxy.host/options.proxy.port)
+      getSocketOptions() {
+        return Object.assign(Object.assign({}, this.options.socket_options), { host: this.options.proxy.host || this.options.proxy.ipaddress, port: this.options.proxy.port });
+      }
+      /**
+       * Handles internal Socks timeout callback.
+       * Note: If the Socks client is not BoundWaitingForConnection or Established, the connection will be closed.
+       */
+      onEstablishedTimeout() {
+        if (this.state !== constants_1.SocksClientState.Established && this.state !== constants_1.SocksClientState.BoundWaitingForConnection) {
+          this.closeSocket(constants_1.ERRORS.ProxyConnectionTimedOut);
+        }
+      }
+      /**
+       * Handles Socket connect event.
+       */
+      onConnectHandler() {
+        this.setState(constants_1.SocksClientState.Connected);
+        if (this.options.proxy.type === 4) {
+          this.sendSocks4InitialHandshake();
+        } else {
+          this.sendSocks5InitialHandshake();
+        }
+        this.setState(constants_1.SocksClientState.SentInitialHandshake);
+      }
+      /**
+       * Handles Socket data event.
+       * @param data
+       */
+      onDataReceivedHandler(data) {
+        this.receiveBuffer.append(data);
+        this.processData();
+      }
+      /**
+       * Handles processing of the data we have received.
+       */
+      processData() {
+        while (this.state !== constants_1.SocksClientState.Established && this.state !== constants_1.SocksClientState.Error && this.receiveBuffer.length >= this.nextRequiredPacketBufferSize) {
+          if (this.state === constants_1.SocksClientState.SentInitialHandshake) {
+            if (this.options.proxy.type === 4) {
+              this.handleSocks4FinalHandshakeResponse();
+            } else {
+              this.handleInitialSocks5HandshakeResponse();
+            }
+          } else if (this.state === constants_1.SocksClientState.SentAuthentication) {
+            this.handleInitialSocks5AuthenticationHandshakeResponse();
+          } else if (this.state === constants_1.SocksClientState.SentFinalHandshake) {
+            this.handleSocks5FinalHandshakeResponse();
+          } else if (this.state === constants_1.SocksClientState.BoundWaitingForConnection) {
+            if (this.options.proxy.type === 4) {
+              this.handleSocks4IncomingConnectionResponse();
+            } else {
+              this.handleSocks5IncomingConnectionResponse();
+            }
+          } else {
+            this.closeSocket(constants_1.ERRORS.InternalError);
+            break;
+          }
+        }
+      }
+      /**
+       * Handles Socket close event.
+       * @param had_error
+       */
+      onCloseHandler() {
+        this.closeSocket(constants_1.ERRORS.SocketClosed);
+      }
+      /**
+       * Handles Socket error event.
+       * @param err
+       */
+      onErrorHandler(err) {
+        this.closeSocket(err.message);
+      }
+      /**
+       * Removes internal event listeners on the underlying Socket.
+       */
+      removeInternalSocketHandlers() {
+        this.socket.pause();
+        this.socket.removeListener("data", this.onDataReceived);
+        this.socket.removeListener("close", this.onClose);
+        this.socket.removeListener("error", this.onError);
+        this.socket.removeListener("connect", this.onConnect);
+      }
+      /**
+       * Closes and destroys the underlying Socket. Emits an error event.
+       * @param err { String } An error string to include in error event.
+       */
+      closeSocket(err) {
+        if (this.state !== constants_1.SocksClientState.Error) {
+          this.setState(constants_1.SocksClientState.Error);
+          this.socket.destroy();
+          this.removeInternalSocketHandlers();
+          this.emit("error", new util_1.SocksClientError(err, this.options));
+        }
+      }
+      /**
+       * Sends initial Socks v4 handshake request.
+       */
+      sendSocks4InitialHandshake() {
+        const userId = this.options.proxy.userId || "";
+        const buff = new smart_buffer_1.SmartBuffer();
+        buff.writeUInt8(4);
+        buff.writeUInt8(constants_1.SocksCommand[this.options.command]);
+        buff.writeUInt16BE(this.options.destination.port);
+        if (net.isIPv4(this.options.destination.host)) {
+          buff.writeBuffer((0, helpers_1.ipToBuffer)(this.options.destination.host));
+          buff.writeStringNT(userId);
+        } else {
+          buff.writeUInt8(0);
+          buff.writeUInt8(0);
+          buff.writeUInt8(0);
+          buff.writeUInt8(1);
+          buff.writeStringNT(userId);
+          buff.writeStringNT(this.options.destination.host);
+        }
+        this.nextRequiredPacketBufferSize = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks4Response;
+        this.socket.write(buff.toBuffer());
+      }
+      /**
+       * Handles Socks v4 handshake response.
+       * @param data
+       */
+      handleSocks4FinalHandshakeResponse() {
+        const data = this.receiveBuffer.get(8);
+        if (data[1] !== constants_1.Socks4Response.Granted) {
+          this.closeSocket(`${constants_1.ERRORS.Socks4ProxyRejectedConnection} - (${constants_1.Socks4Response[data[1]]})`);
+        } else {
+          if (constants_1.SocksCommand[this.options.command] === constants_1.SocksCommand.bind) {
+            const buff = smart_buffer_1.SmartBuffer.fromBuffer(data);
+            buff.readOffset = 2;
+            const remoteHost = {
+              port: buff.readUInt16BE(),
+              host: (0, helpers_1.int32ToIpv4)(buff.readUInt32BE())
+            };
+            if (remoteHost.host === "0.0.0.0") {
+              remoteHost.host = this.options.proxy.ipaddress;
+            }
+            this.setState(constants_1.SocksClientState.BoundWaitingForConnection);
+            this.emit("bound", { remoteHost, socket: this.socket });
+          } else {
+            this.setState(constants_1.SocksClientState.Established);
+            this.removeInternalSocketHandlers();
+            this.emit("established", { socket: this.socket });
+          }
+        }
+      }
+      /**
+       * Handles Socks v4 incoming connection request (BIND)
+       * @param data
+       */
+      handleSocks4IncomingConnectionResponse() {
+        const data = this.receiveBuffer.get(8);
+        if (data[1] !== constants_1.Socks4Response.Granted) {
+          this.closeSocket(`${constants_1.ERRORS.Socks4ProxyRejectedIncomingBoundConnection} - (${constants_1.Socks4Response[data[1]]})`);
+        } else {
+          const buff = smart_buffer_1.SmartBuffer.fromBuffer(data);
+          buff.readOffset = 2;
+          const remoteHost = {
+            port: buff.readUInt16BE(),
+            host: (0, helpers_1.int32ToIpv4)(buff.readUInt32BE())
+          };
+          this.setState(constants_1.SocksClientState.Established);
+          this.removeInternalSocketHandlers();
+          this.emit("established", { remoteHost, socket: this.socket });
+        }
+      }
+      /**
+       * Sends initial Socks v5 handshake request.
+       */
+      sendSocks5InitialHandshake() {
+        const buff = new smart_buffer_1.SmartBuffer();
+        const supportedAuthMethods = [constants_1.Socks5Auth.NoAuth];
+        if (this.options.proxy.userId || this.options.proxy.password) {
+          supportedAuthMethods.push(constants_1.Socks5Auth.UserPass);
+        }
+        if (this.options.proxy.custom_auth_method !== void 0) {
+          supportedAuthMethods.push(this.options.proxy.custom_auth_method);
+        }
+        buff.writeUInt8(5);
+        buff.writeUInt8(supportedAuthMethods.length);
+        for (const authMethod of supportedAuthMethods) {
+          buff.writeUInt8(authMethod);
+        }
+        this.nextRequiredPacketBufferSize = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5InitialHandshakeResponse;
+        this.socket.write(buff.toBuffer());
+        this.setState(constants_1.SocksClientState.SentInitialHandshake);
+      }
+      /**
+       * Handles initial Socks v5 handshake response.
+       * @param data
+       */
+      handleInitialSocks5HandshakeResponse() {
+        const data = this.receiveBuffer.get(2);
+        if (data[0] !== 5) {
+          this.closeSocket(constants_1.ERRORS.InvalidSocks5IntiailHandshakeSocksVersion);
+        } else if (data[1] === constants_1.SOCKS5_NO_ACCEPTABLE_AUTH) {
+          this.closeSocket(constants_1.ERRORS.InvalidSocks5InitialHandshakeNoAcceptedAuthType);
+        } else {
+          if (data[1] === constants_1.Socks5Auth.NoAuth) {
+            this.socks5ChosenAuthType = constants_1.Socks5Auth.NoAuth;
+            this.sendSocks5CommandRequest();
+          } else if (data[1] === constants_1.Socks5Auth.UserPass) {
+            this.socks5ChosenAuthType = constants_1.Socks5Auth.UserPass;
+            this.sendSocks5UserPassAuthentication();
+          } else if (data[1] === this.options.proxy.custom_auth_method) {
+            this.socks5ChosenAuthType = this.options.proxy.custom_auth_method;
+            this.sendSocks5CustomAuthentication();
+          } else {
+            this.closeSocket(constants_1.ERRORS.InvalidSocks5InitialHandshakeUnknownAuthType);
+          }
+        }
+      }
+      /**
+       * Sends Socks v5 user & password auth handshake.
+       *
+       * Note: No auth and user/pass are currently supported.
+       */
+      sendSocks5UserPassAuthentication() {
+        const userId = this.options.proxy.userId || "";
+        const password = this.options.proxy.password || "";
+        const buff = new smart_buffer_1.SmartBuffer();
+        buff.writeUInt8(1);
+        buff.writeUInt8(Buffer.byteLength(userId));
+        buff.writeString(userId);
+        buff.writeUInt8(Buffer.byteLength(password));
+        buff.writeString(password);
+        this.nextRequiredPacketBufferSize = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5UserPassAuthenticationResponse;
+        this.socket.write(buff.toBuffer());
+        this.setState(constants_1.SocksClientState.SentAuthentication);
+      }
+      sendSocks5CustomAuthentication() {
+        return __awaiter(this, void 0, void 0, function* () {
+          this.nextRequiredPacketBufferSize = this.options.proxy.custom_auth_response_size;
+          this.socket.write(yield this.options.proxy.custom_auth_request_handler());
+          this.setState(constants_1.SocksClientState.SentAuthentication);
+        });
+      }
+      handleSocks5CustomAuthHandshakeResponse(data) {
+        return __awaiter(this, void 0, void 0, function* () {
+          return yield this.options.proxy.custom_auth_response_handler(data);
+        });
+      }
+      handleSocks5AuthenticationNoAuthHandshakeResponse(data) {
+        return __awaiter(this, void 0, void 0, function* () {
+          return data[1] === 0;
+        });
+      }
+      handleSocks5AuthenticationUserPassHandshakeResponse(data) {
+        return __awaiter(this, void 0, void 0, function* () {
+          return data[1] === 0;
+        });
+      }
+      /**
+       * Handles Socks v5 auth handshake response.
+       * @param data
+       */
+      handleInitialSocks5AuthenticationHandshakeResponse() {
+        return __awaiter(this, void 0, void 0, function* () {
+          this.setState(constants_1.SocksClientState.ReceivedAuthenticationResponse);
+          let authResult = false;
+          if (this.socks5ChosenAuthType === constants_1.Socks5Auth.NoAuth) {
+            authResult = yield this.handleSocks5AuthenticationNoAuthHandshakeResponse(this.receiveBuffer.get(2));
+          } else if (this.socks5ChosenAuthType === constants_1.Socks5Auth.UserPass) {
+            authResult = yield this.handleSocks5AuthenticationUserPassHandshakeResponse(this.receiveBuffer.get(2));
+          } else if (this.socks5ChosenAuthType === this.options.proxy.custom_auth_method) {
+            authResult = yield this.handleSocks5CustomAuthHandshakeResponse(this.receiveBuffer.get(this.options.proxy.custom_auth_response_size));
+          }
+          if (!authResult) {
+            this.closeSocket(constants_1.ERRORS.Socks5AuthenticationFailed);
+          } else {
+            this.sendSocks5CommandRequest();
+          }
+        });
+      }
+      /**
+       * Sends Socks v5 final handshake request.
+       */
+      sendSocks5CommandRequest() {
+        const buff = new smart_buffer_1.SmartBuffer();
+        buff.writeUInt8(5);
+        buff.writeUInt8(constants_1.SocksCommand[this.options.command]);
+        buff.writeUInt8(0);
+        if (net.isIPv4(this.options.destination.host)) {
+          buff.writeUInt8(constants_1.Socks5HostType.IPv4);
+          buff.writeBuffer((0, helpers_1.ipToBuffer)(this.options.destination.host));
+        } else if (net.isIPv6(this.options.destination.host)) {
+          buff.writeUInt8(constants_1.Socks5HostType.IPv6);
+          buff.writeBuffer((0, helpers_1.ipToBuffer)(this.options.destination.host));
+        } else {
+          buff.writeUInt8(constants_1.Socks5HostType.Hostname);
+          buff.writeUInt8(this.options.destination.host.length);
+          buff.writeString(this.options.destination.host);
+        }
+        buff.writeUInt16BE(this.options.destination.port);
+        this.nextRequiredPacketBufferSize = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseHeader;
+        this.socket.write(buff.toBuffer());
+        this.setState(constants_1.SocksClientState.SentFinalHandshake);
+      }
+      /**
+       * Handles Socks v5 final handshake response.
+       * @param data
+       */
+      handleSocks5FinalHandshakeResponse() {
+        const header = this.receiveBuffer.peek(5);
+        if (header[0] !== 5 || header[1] !== constants_1.Socks5Response.Granted) {
+          this.closeSocket(`${constants_1.ERRORS.InvalidSocks5FinalHandshakeRejected} - ${constants_1.Socks5Response[header[1]]}`);
+        } else {
+          const addressType = header[3];
+          let remoteHost;
+          let buff;
+          if (addressType === constants_1.Socks5HostType.IPv4) {
+            const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseIPv4;
+            if (this.receiveBuffer.length < dataNeeded) {
+              this.nextRequiredPacketBufferSize = dataNeeded;
+              return;
+            }
+            buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4));
+            remoteHost = {
+              host: (0, helpers_1.int32ToIpv4)(buff.readUInt32BE()),
+              port: buff.readUInt16BE()
+            };
+            if (remoteHost.host === "0.0.0.0") {
+              remoteHost.host = this.options.proxy.ipaddress;
+            }
+          } else if (addressType === constants_1.Socks5HostType.Hostname) {
+            const hostLength = header[4];
+            const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseHostname(hostLength);
+            if (this.receiveBuffer.length < dataNeeded) {
+              this.nextRequiredPacketBufferSize = dataNeeded;
+              return;
+            }
+            buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(5));
+            remoteHost = {
+              host: buff.readString(hostLength),
+              port: buff.readUInt16BE()
+            };
+          } else if (addressType === constants_1.Socks5HostType.IPv6) {
+            const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseIPv6;
+            if (this.receiveBuffer.length < dataNeeded) {
+              this.nextRequiredPacketBufferSize = dataNeeded;
+              return;
+            }
+            buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4));
+            remoteHost = {
+              host: ip_address_1.Address6.fromByteArray(Array.from(buff.readBuffer(16))).canonicalForm(),
+              port: buff.readUInt16BE()
+            };
+          }
+          this.setState(constants_1.SocksClientState.ReceivedFinalResponse);
+          if (constants_1.SocksCommand[this.options.command] === constants_1.SocksCommand.connect) {
+            this.setState(constants_1.SocksClientState.Established);
+            this.removeInternalSocketHandlers();
+            this.emit("established", { remoteHost, socket: this.socket });
+          } else if (constants_1.SocksCommand[this.options.command] === constants_1.SocksCommand.bind) {
+            this.setState(constants_1.SocksClientState.BoundWaitingForConnection);
+            this.nextRequiredPacketBufferSize = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseHeader;
+            this.emit("bound", { remoteHost, socket: this.socket });
+          } else if (constants_1.SocksCommand[this.options.command] === constants_1.SocksCommand.associate) {
+            this.setState(constants_1.SocksClientState.Established);
+            this.removeInternalSocketHandlers();
+            this.emit("established", {
+              remoteHost,
+              socket: this.socket
+            });
+          }
+        }
+      }
+      /**
+       * Handles Socks v5 incoming connection request (BIND).
+       */
+      handleSocks5IncomingConnectionResponse() {
+        const header = this.receiveBuffer.peek(5);
+        if (header[0] !== 5 || header[1] !== constants_1.Socks5Response.Granted) {
+          this.closeSocket(`${constants_1.ERRORS.Socks5ProxyRejectedIncomingBoundConnection} - ${constants_1.Socks5Response[header[1]]}`);
+        } else {
+          const addressType = header[3];
+          let remoteHost;
+          let buff;
+          if (addressType === constants_1.Socks5HostType.IPv4) {
+            const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseIPv4;
+            if (this.receiveBuffer.length < dataNeeded) {
+              this.nextRequiredPacketBufferSize = dataNeeded;
+              return;
+            }
+            buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4));
+            remoteHost = {
+              host: (0, helpers_1.int32ToIpv4)(buff.readUInt32BE()),
+              port: buff.readUInt16BE()
+            };
+            if (remoteHost.host === "0.0.0.0") {
+              remoteHost.host = this.options.proxy.ipaddress;
+            }
+          } else if (addressType === constants_1.Socks5HostType.Hostname) {
+            const hostLength = header[4];
+            const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseHostname(hostLength);
+            if (this.receiveBuffer.length < dataNeeded) {
+              this.nextRequiredPacketBufferSize = dataNeeded;
+              return;
+            }
+            buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(5));
+            remoteHost = {
+              host: buff.readString(hostLength),
+              port: buff.readUInt16BE()
+            };
+          } else if (addressType === constants_1.Socks5HostType.IPv6) {
+            const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseIPv6;
+            if (this.receiveBuffer.length < dataNeeded) {
+              this.nextRequiredPacketBufferSize = dataNeeded;
+              return;
+            }
+            buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4));
+            remoteHost = {
+              host: ip_address_1.Address6.fromByteArray(Array.from(buff.readBuffer(16))).canonicalForm(),
+              port: buff.readUInt16BE()
+            };
+          }
+          this.setState(constants_1.SocksClientState.Established);
+          this.removeInternalSocketHandlers();
+          this.emit("established", { remoteHost, socket: this.socket });
+        }
+      }
+      get socksClientOptions() {
+        return Object.assign({}, this.options);
+      }
+    };
+    exports2.SocksClient = SocksClient;
+  }
+});
+
+// node_modules/.pnpm/socks@2.8.7/node_modules/socks/build/index.js
+var require_build = __commonJS({
+  "node_modules/.pnpm/socks@2.8.7/node_modules/socks/build/index.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
+      for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    __exportStar(require_socksclient(), exports2);
+  }
+});
+
+// node_modules/.pnpm/socks-proxy-agent@8.0.5_supports-color@10.2.2/node_modules/socks-proxy-agent/dist/index.js
+var require_dist4 = __commonJS({
+  "node_modules/.pnpm/socks-proxy-agent@8.0.5_supports-color@10.2.2/node_modules/socks-proxy-agent/dist/index.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.SocksProxyAgent = void 0;
+    var socks_1 = require_build();
+    var agent_base_1 = require_dist();
+    var debug_1 = __importDefault(require_src());
+    var dns = __importStar(require("dns"));
+    var net = __importStar(require("net"));
+    var tls = __importStar(require("tls"));
+    var url_1 = require("url");
+    var debug = (0, debug_1.default)("socks-proxy-agent");
+    var setServernameFromNonIpHost = /* @__PURE__ */ __name((options) => {
+      if (options.servername === void 0 && options.host && !net.isIP(options.host)) {
+        return {
+          ...options,
+          servername: options.host
+        };
+      }
+      return options;
+    }, "setServernameFromNonIpHost");
+    function parseSocksURL(url) {
+      let lookup = false;
+      let type = 5;
+      const host = url.hostname;
+      const port = parseInt(url.port, 10) || 1080;
+      switch (url.protocol.replace(":", "")) {
+        case "socks4":
+          lookup = true;
+          type = 4;
+          break;
+        // pass through
+        case "socks4a":
+          type = 4;
+          break;
+        case "socks5":
+          lookup = true;
+          type = 5;
+          break;
+        // pass through
+        case "socks":
+          type = 5;
+          break;
+        case "socks5h":
+          type = 5;
+          break;
+        default:
+          throw new TypeError(`A "socks" protocol must be specified! Got: ${String(url.protocol)}`);
+      }
+      const proxy = {
+        host,
+        port,
+        type
+      };
+      if (url.username) {
+        Object.defineProperty(proxy, "userId", {
+          value: decodeURIComponent(url.username),
+          enumerable: false
+        });
+      }
+      if (url.password != null) {
+        Object.defineProperty(proxy, "password", {
+          value: decodeURIComponent(url.password),
+          enumerable: false
+        });
+      }
+      return { lookup, proxy };
+    }
+    __name(parseSocksURL, "parseSocksURL");
+    var SocksProxyAgent = class extends agent_base_1.Agent {
+      static {
+        __name(this, "SocksProxyAgent");
+      }
+      constructor(uri, opts) {
+        super(opts);
+        const url = typeof uri === "string" ? new url_1.URL(uri) : uri;
+        const { proxy, lookup } = parseSocksURL(url);
+        this.shouldLookup = lookup;
+        this.proxy = proxy;
+        this.timeout = opts?.timeout ?? null;
+        this.socketOptions = opts?.socketOptions ?? null;
+      }
+      /**
+       * Initiates a SOCKS connection to the specified SOCKS proxy server,
+       * which in turn connects to the specified remote host and port.
+       */
+      async connect(req, opts) {
+        const { shouldLookup, proxy, timeout } = this;
+        if (!opts.host) {
+          throw new Error("No `host` defined!");
+        }
+        let { host } = opts;
+        const { port, lookup: lookupFn = dns.lookup } = opts;
+        if (shouldLookup) {
+          host = await new Promise((resolve, reject) => {
+            lookupFn(host, {}, (err, res) => {
+              if (err) {
+                reject(err);
+              } else {
+                resolve(res);
+              }
+            });
+          });
+        }
+        const socksOpts = {
+          proxy,
+          destination: {
+            host,
+            port: typeof port === "number" ? port : parseInt(port, 10)
+          },
+          command: "connect",
+          timeout: timeout ?? void 0,
+          // @ts-expect-error the type supplied by socks for socket_options is wider
+          // than necessary since socks will always override the host and port
+          socket_options: this.socketOptions ?? void 0
+        };
+        const cleanup = /* @__PURE__ */ __name((tlsSocket) => {
+          req.destroy();
+          socket.destroy();
+          if (tlsSocket)
+            tlsSocket.destroy();
+        }, "cleanup");
+        debug("Creating socks proxy connection: %o", socksOpts);
+        const { socket } = await socks_1.SocksClient.createConnection(socksOpts);
+        debug("Successfully created socks proxy connection");
+        if (timeout !== null) {
+          socket.setTimeout(timeout);
+          socket.on("timeout", () => cleanup());
+        }
+        if (opts.secureEndpoint) {
+          debug("Upgrading socket connection to TLS");
+          const tlsSocket = tls.connect({
+            ...omit(setServernameFromNonIpHost(opts), "host", "path", "port"),
+            socket
+          });
+          tlsSocket.once("error", (error) => {
+            debug("Socket TLS error", error.message);
+            cleanup(tlsSocket);
+          });
+          return tlsSocket;
+        }
+        return socket;
+      }
+    };
+    SocksProxyAgent.protocols = [
+      "socks",
+      "socks4",
+      "socks4a",
+      "socks5",
+      "socks5h"
+    ];
+    exports2.SocksProxyAgent = SocksProxyAgent;
+    function omit(obj, ...keys) {
+      const ret = {};
+      let key;
+      for (key in obj) {
+        if (!keys.includes(key)) {
+          ret[key] = obj[key];
+        }
+      }
+      return ret;
+    }
+    __name(omit, "omit");
+  }
+});
+
+// node_modules/.pnpm/@npmcli+agent@4.0.0_supports-color@10.2.2/node_modules/@npmcli/agent/lib/errors.js
+var require_errors5 = __commonJS({
+  "node_modules/.pnpm/@npmcli+agent@4.0.0_supports-color@10.2.2/node_modules/@npmcli/agent/lib/errors.js"(exports2, module2) {
+    "use strict";
+    var InvalidProxyProtocolError = class extends Error {
+      static {
+        __name(this, "InvalidProxyProtocolError");
+      }
+      constructor(url) {
+        super(`Invalid protocol \`${url.protocol}\` connecting to proxy \`${url.host}\``);
+        this.code = "EINVALIDPROXY";
+        this.proxy = url;
+      }
+    };
+    var ConnectionTimeoutError = class extends Error {
+      static {
+        __name(this, "ConnectionTimeoutError");
+      }
+      constructor(host) {
+        super(`Timeout connecting to host \`${host}\``);
+        this.code = "ECONNECTIONTIMEOUT";
+        this.host = host;
+      }
+    };
+    var IdleTimeoutError = class extends Error {
+      static {
+        __name(this, "IdleTimeoutError");
+      }
+      constructor(host) {
+        super(`Idle timeout reached for host \`${host}\``);
+        this.code = "EIDLETIMEOUT";
+        this.host = host;
+      }
+    };
+    var ResponseTimeoutError = class extends Error {
+      static {
+        __name(this, "ResponseTimeoutError");
+      }
+      constructor(request, proxy) {
+        let msg = "Response timeout ";
+        if (proxy) {
+          msg += `from proxy \`${proxy.host}\` `;
+        }
+        msg += `connecting to host \`${request.host}\``;
+        super(msg);
+        this.code = "ERESPONSETIMEOUT";
+        this.proxy = proxy;
+        this.request = request;
+      }
+    };
+    var TransferTimeoutError = class extends Error {
+      static {
+        __name(this, "TransferTimeoutError");
+      }
+      constructor(request, proxy) {
+        let msg = "Transfer timeout ";
+        if (proxy) {
+          msg += `from proxy \`${proxy.host}\` `;
+        }
+        msg += `for \`${request.host}\``;
+        super(msg);
+        this.code = "ETRANSFERTIMEOUT";
+        this.proxy = proxy;
+        this.request = request;
+      }
+    };
+    module2.exports = {
+      InvalidProxyProtocolError,
+      ConnectionTimeoutError,
+      IdleTimeoutError,
+      ResponseTimeoutError,
+      TransferTimeoutError
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+agent@4.0.0_supports-color@10.2.2/node_modules/@npmcli/agent/lib/proxy.js
+var require_proxy = __commonJS({
+  "node_modules/.pnpm/@npmcli+agent@4.0.0_supports-color@10.2.2/node_modules/@npmcli/agent/lib/proxy.js"(exports2, module2) {
+    "use strict";
+    var { HttpProxyAgent } = require_dist2();
+    var { HttpsProxyAgent } = require_dist3();
+    var { SocksProxyAgent } = require_dist4();
+    var { LRUCache } = require_commonjs();
+    var { InvalidProxyProtocolError } = require_errors5();
+    var PROXY_CACHE = new LRUCache({ max: 20 });
+    var SOCKS_PROTOCOLS = new Set(SocksProxyAgent.protocols);
+    var PROXY_ENV_KEYS = /* @__PURE__ */ new Set(["https_proxy", "http_proxy", "proxy", "no_proxy"]);
+    var PROXY_ENV = Object.entries(process.env).reduce((acc, [key, value]) => {
+      key = key.toLowerCase();
+      if (PROXY_ENV_KEYS.has(key)) {
+        acc[key] = value;
+      }
+      return acc;
+    }, {});
+    var getProxyAgent = /* @__PURE__ */ __name((url) => {
+      url = new URL(url);
+      const protocol = url.protocol.slice(0, -1);
+      if (SOCKS_PROTOCOLS.has(protocol)) {
+        return SocksProxyAgent;
+      }
+      if (protocol === "https" || protocol === "http") {
+        return [HttpProxyAgent, HttpsProxyAgent];
+      }
+      throw new InvalidProxyProtocolError(url);
+    }, "getProxyAgent");
+    var isNoProxy = /* @__PURE__ */ __name((url, noProxy) => {
+      if (typeof noProxy === "string") {
+        noProxy = noProxy.split(",").map((p) => p.trim()).filter(Boolean);
+      }
+      if (!noProxy || !noProxy.length) {
+        return false;
+      }
+      const hostSegments = url.hostname.split(".").reverse();
+      return noProxy.some((no) => {
+        const noSegments = no.split(".").filter(Boolean).reverse();
+        if (!noSegments.length) {
+          return false;
+        }
+        for (let i = 0; i < noSegments.length; i++) {
+          if (hostSegments[i] !== noSegments[i]) {
+            return false;
+          }
+        }
+        return true;
+      });
+    }, "isNoProxy");
+    var getProxy = /* @__PURE__ */ __name((url, { proxy, noProxy }) => {
+      url = new URL(url);
+      if (!proxy) {
+        proxy = url.protocol === "https:" ? PROXY_ENV.https_proxy : PROXY_ENV.https_proxy || PROXY_ENV.http_proxy || PROXY_ENV.proxy;
+      }
+      if (!noProxy) {
+        noProxy = PROXY_ENV.no_proxy;
+      }
+      if (!proxy || isNoProxy(url, noProxy)) {
+        return null;
+      }
+      return new URL(proxy);
+    }, "getProxy");
+    module2.exports = {
+      getProxyAgent,
+      getProxy,
+      proxyCache: PROXY_CACHE
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+agent@4.0.0_supports-color@10.2.2/node_modules/@npmcli/agent/lib/agents.js
+var require_agents = __commonJS({
+  "node_modules/.pnpm/@npmcli+agent@4.0.0_supports-color@10.2.2/node_modules/@npmcli/agent/lib/agents.js"(exports2, module2) {
+    "use strict";
+    var net = require("net");
+    var tls = require("tls");
+    var { once } = require("events");
+    var timers = require("timers/promises");
+    var { normalizeOptions, cacheOptions } = require_options3();
+    var { getProxy, getProxyAgent, proxyCache } = require_proxy();
+    var Errors = require_errors5();
+    var { Agent: AgentBase } = require_dist();
+    module2.exports = class Agent extends AgentBase {
+      static {
+        __name(this, "Agent");
+      }
+      #options;
+      #timeouts;
+      #proxy;
+      #noProxy;
+      #ProxyAgent;
+      constructor(options = {}) {
+        const { timeouts, proxy, noProxy, ...normalizedOptions } = normalizeOptions(options);
+        super(normalizedOptions);
+        this.#options = normalizedOptions;
+        this.#timeouts = timeouts;
+        if (proxy) {
+          this.#proxy = new URL(proxy);
+          this.#noProxy = noProxy;
+          this.#ProxyAgent = getProxyAgent(proxy);
+        }
+      }
+      get proxy() {
+        return this.#proxy ? { url: this.#proxy } : {};
+      }
+      #getProxy(options) {
+        if (!this.#proxy) {
+          return;
+        }
+        const proxy = getProxy(`${options.protocol}//${options.host}:${options.port}`, {
+          proxy: this.#proxy,
+          noProxy: this.#noProxy
+        });
+        if (!proxy) {
+          return;
+        }
+        const cacheKey = cacheOptions({
+          ...options,
+          ...this.#options,
+          timeouts: this.#timeouts,
+          proxy
+        });
+        if (proxyCache.has(cacheKey)) {
+          return proxyCache.get(cacheKey);
+        }
+        let ProxyAgent = this.#ProxyAgent;
+        if (Array.isArray(ProxyAgent)) {
+          ProxyAgent = this.isSecureEndpoint(options) ? ProxyAgent[1] : ProxyAgent[0];
+        }
+        const proxyAgent = new ProxyAgent(proxy, {
+          ...this.#options,
+          socketOptions: { family: this.#options.family }
+        });
+        proxyCache.set(cacheKey, proxyAgent);
+        return proxyAgent;
+      }
+      // takes an array of promises and races them against the connection timeout
+      // which will throw the necessary error if it is hit. This will return the
+      // result of the promise race.
+      async #timeoutConnection({ promises, options, timeout }, ac = new AbortController()) {
+        if (timeout) {
+          const connectionTimeout = timers.setTimeout(timeout, null, { signal: ac.signal }).then(() => {
+            throw new Errors.ConnectionTimeoutError(`${options.host}:${options.port}`);
+          }).catch((err) => {
+            if (err.name === "AbortError") {
+              return;
+            }
+            throw err;
+          });
+          promises.push(connectionTimeout);
+        }
+        let result;
+        try {
+          result = await Promise.race(promises);
+          ac.abort();
+        } catch (err) {
+          ac.abort();
+          throw err;
+        }
+        return result;
+      }
+      async connect(request, options) {
+        options.lookup ??= this.#options.lookup;
+        let socket;
+        let timeout = this.#timeouts.connection;
+        const isSecureEndpoint = this.isSecureEndpoint(options);
+        const proxy = this.#getProxy(options);
+        if (proxy) {
+          const start = Date.now();
+          socket = await this.#timeoutConnection({
+            options,
+            timeout,
+            promises: [proxy.connect(request, options)]
+          });
+          if (timeout) {
+            timeout = timeout - (Date.now() - start);
+          }
+        } else {
+          socket = (isSecureEndpoint ? tls : net).connect(options);
+        }
+        socket.setKeepAlive(this.keepAlive, this.keepAliveMsecs);
+        socket.setNoDelay(this.keepAlive);
+        const abortController = new AbortController();
+        const { signal } = abortController;
+        const connectPromise = socket[isSecureEndpoint ? "secureConnecting" : "connecting"] ? once(socket, isSecureEndpoint ? "secureConnect" : "connect", { signal }) : Promise.resolve();
+        await this.#timeoutConnection({
+          options,
+          timeout,
+          promises: [
+            connectPromise,
+            once(socket, "error", { signal }).then((err) => {
+              throw err[0];
+            })
+          ]
+        }, abortController);
+        if (this.#timeouts.idle) {
+          socket.setTimeout(this.#timeouts.idle, () => {
+            socket.destroy(new Errors.IdleTimeoutError(`${options.host}:${options.port}`));
+          });
+        }
+        return socket;
+      }
+      addRequest(request, options) {
+        const proxy = this.#getProxy(options);
+        if (proxy?.setRequestProps) {
+          proxy.setRequestProps(request, options);
+        }
+        request.setHeader("connection", this.keepAlive ? "keep-alive" : "close");
+        if (this.#timeouts.response) {
+          let responseTimeout;
+          request.once("finish", () => {
+            setTimeout(() => {
+              request.destroy(new Errors.ResponseTimeoutError(request, this.#proxy));
+            }, this.#timeouts.response);
+          });
+          request.once("response", () => {
+            clearTimeout(responseTimeout);
+          });
+        }
+        if (this.#timeouts.transfer) {
+          let transferTimeout;
+          request.once("response", (res) => {
+            setTimeout(() => {
+              res.destroy(new Errors.TransferTimeoutError(request, this.#proxy));
+            }, this.#timeouts.transfer);
+            res.once("close", () => {
+              clearTimeout(transferTimeout);
+            });
+          });
+        }
+        return super.addRequest(request, options);
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+agent@4.0.0_supports-color@10.2.2/node_modules/@npmcli/agent/lib/index.js
+var require_lib26 = __commonJS({
+  "node_modules/.pnpm/@npmcli+agent@4.0.0_supports-color@10.2.2/node_modules/@npmcli/agent/lib/index.js"(exports2, module2) {
+    "use strict";
+    var { LRUCache } = require_commonjs();
+    var { normalizeOptions, cacheOptions } = require_options3();
+    var { getProxy, proxyCache } = require_proxy();
+    var dns = require_dns();
+    var Agent = require_agents();
+    var agentCache = new LRUCache({ max: 20 });
+    var getAgent = /* @__PURE__ */ __name((url, { agent, proxy, noProxy, ...options } = {}) => {
+      if (agent != null) {
+        return agent;
+      }
+      url = new URL(url);
+      const proxyForUrl = getProxy(url, { proxy, noProxy });
+      const normalizedOptions = {
+        ...normalizeOptions(options),
+        proxy: proxyForUrl
+      };
+      const cacheKey = cacheOptions({
+        ...normalizedOptions,
+        secureEndpoint: url.protocol === "https:"
+      });
+      if (agentCache.has(cacheKey)) {
+        return agentCache.get(cacheKey);
+      }
+      const newAgent = new Agent(normalizedOptions);
+      agentCache.set(cacheKey, newAgent);
+      return newAgent;
+    }, "getAgent");
+    module2.exports = {
+      getAgent,
+      Agent,
+      // these are exported for backwards compatability
+      HttpAgent: Agent,
+      HttpsAgent: Agent,
+      cache: {
+        proxy: proxyCache,
+        agent: agentCache,
+        dns: dns.cache,
+        clear: /* @__PURE__ */ __name(() => {
+          proxyCache.clear();
+          agentCache.clear();
+          dns.cache.clear();
+        }, "clear")
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/make-fetch-happen@15.0.5_supports-color@10.2.2/node_modules/make-fetch-happen/package.json
+var require_package4 = __commonJS({
+  "node_modules/.pnpm/make-fetch-happen@15.0.5_supports-color@10.2.2/node_modules/make-fetch-happen/package.json"(exports2, module2) {
+    module2.exports = {
+      name: "make-fetch-happen",
+      version: "15.0.5",
+      description: "Opinionated, caching, retrying fetch client",
+      main: "lib/index.js",
+      files: [
+        "bin/",
+        "lib/"
+      ],
+      scripts: {
+        test: "tap",
+        posttest: "npm run lint",
+        eslint: 'eslint "**/*.{js,cjs,ts,mjs,jsx,tsx}"',
+        lint: "npm run eslint",
+        lintfix: "npm run eslint -- --fix",
+        postlint: "template-oss-check",
+        snap: "tap",
+        "template-oss-apply": "template-oss-apply --force"
+      },
+      repository: {
+        type: "git",
+        url: "git+https://github.com/npm/make-fetch-happen.git"
+      },
+      keywords: [
+        "http",
+        "request",
+        "fetch",
+        "mean girls",
+        "caching",
+        "cache",
+        "subresource integrity"
+      ],
+      author: "GitHub Inc.",
+      license: "ISC",
+      dependencies: {
+        "@gar/promise-retry": "^1.0.0",
+        "@npmcli/agent": "^4.0.0",
+        "@npmcli/redact": "^4.0.0",
+        cacache: "^20.0.1",
+        "http-cache-semantics": "^4.1.1",
+        minipass: "^7.0.2",
+        "minipass-fetch": "^5.0.0",
+        "minipass-flush": "^1.0.5",
+        "minipass-pipeline": "^1.2.4",
+        negotiator: "^1.0.0",
+        "proc-log": "^6.0.0",
+        ssri: "^13.0.0"
+      },
+      devDependencies: {
+        "@npmcli/eslint-config": "^5.0.0",
+        "@npmcli/template-oss": "4.25.0",
+        nock: "^13.2.4",
+        "safe-buffer": "^5.2.1",
+        "standard-version": "^9.3.2",
+        tap: "^16.0.0"
+      },
+      engines: {
+        node: "^20.17.0 || >=22.9.0"
+      },
+      tap: {
+        color: 1,
+        files: "test/*.js",
+        "check-coverage": true,
+        timeout: 60,
+        "nyc-arg": [
+          "--exclude",
+          "tap-snapshots/**"
+        ]
+      },
+      templateOSS: {
+        "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+        version: "4.25.0",
+        publish: "true"
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/make-fetch-happen@15.0.5_supports-color@10.2.2/node_modules/make-fetch-happen/lib/remote.js
+var require_remote = __commonJS({
+  "node_modules/.pnpm/make-fetch-happen@15.0.5_supports-color@10.2.2/node_modules/make-fetch-happen/lib/remote.js"(exports2, module2) {
+    var { Minipass } = require_commonjs5();
+    var fetch = require_lib24();
+    var { promiseRetry } = require_lib20();
+    var ssri = require_lib12();
+    var { log } = require_lib2();
+    var { redact: cleanUrl } = require_lib25();
+    var CachingMinipassPipeline = require_pipeline();
+    var { getAgent } = require_lib26();
+    var pkg = require_package4();
+    var USER_AGENT = `${pkg.name}/${pkg.version} (+https://npm.im/${pkg.name})`;
+    var RETRY_ERRORS = [
+      "ECONNRESET",
+      // remote socket closed on us
+      "ECONNREFUSED",
+      // remote host refused to open connection
+      "EADDRINUSE",
+      // failed to bind to a local port (proxy?)
+      "ETIMEDOUT",
+      // someone in the transaction is WAY TOO SLOW
+      // from @npmcli/agent
+      "ECONNECTIONTIMEOUT",
+      "EIDLETIMEOUT",
+      "ERESPONSETIMEOUT",
+      "ETRANSFERTIMEOUT"
+      // Known codes we do NOT retry on:
+      // ENOTFOUND (getaddrinfo failure. Either bad hostname, or offline)
+      // EINVALIDPROXY // invalid protocol from @npmcli/agent
+      // EINVALIDRESPONSE // invalid status code from @npmcli/agent
+    ];
+    var RETRY_TYPES = [
+      "request-timeout"
+    ];
+    var remoteFetch = /* @__PURE__ */ __name((request, options) => {
+      const agent = getAgent(request.url, { ...options, signal: void 0 });
+      if (!request.headers.has("connection")) {
+        request.headers.set("connection", agent ? "keep-alive" : "close");
+      }
+      if (!request.headers.has("user-agent")) {
+        request.headers.set("user-agent", USER_AGENT);
+      }
+      const _opts = {
+        ...options,
+        agent,
+        redirect: "manual"
+      };
+      return promiseRetry(async (retryHandler, attemptNum) => {
+        const req = new fetch.Request(request, _opts);
+        const url = cleanUrl(req.url);
+        try {
+          let res = await fetch(req, _opts);
+          if (_opts.integrity && res.status === 200) {
+            const integrityStream = ssri.integrityStream({
+              algorithms: _opts.algorithms,
+              integrity: _opts.integrity,
+              size: _opts.size
+            });
+            const pipeline = new CachingMinipassPipeline({
+              events: ["integrity", "size"]
+            }, res.body, integrityStream);
+            integrityStream.on("integrity", (i) => pipeline.emit("integrity", i));
+            integrityStream.on("size", (s) => pipeline.emit("size", s));
+            res = new fetch.Response(pipeline, res);
+            res.body.hasIntegrityEmitter = true;
+          }
+          res.headers.set("x-fetch-attempts", attemptNum);
+          const isStream = Minipass.isStream(req.body);
+          const isRetriable = req.method !== "POST" && !isStream && ([408, 420, 429].includes(res.status) || res.status >= 500);
+          if (isRetriable) {
+            if (typeof options.onRetry === "function") {
+              options.onRetry(res);
+            }
+            log.http("fetch", `${req.method} ${url} attempt ${attemptNum} failed with ${res.status}`);
+            return retryHandler(res);
+          }
+          return res;
+        } catch (err) {
+          const code = err.code === "EPROMISERETRY" ? err.retried.code : err.code;
+          const isRetryError = err.retried instanceof fetch.Response || RETRY_ERRORS.includes(code) && RETRY_TYPES.includes(err.type);
+          if (req.method === "POST" || isRetryError) {
+            throw err;
+          }
+          if (typeof options.onRetry === "function") {
+            options.onRetry(err);
+          }
+          log.http("fetch", `${req.method} ${url} attempt ${attemptNum} failed with ${err.code}`);
+          return retryHandler(err);
+        }
+      }, options.retry).catch((err) => {
+        if (err.status >= 400 && err.type !== "system") {
+          return err;
+        }
+        throw err;
+      });
+    }, "remoteFetch");
+    module2.exports = remoteFetch;
+  }
+});
+
+// node_modules/.pnpm/make-fetch-happen@15.0.5_supports-color@10.2.2/node_modules/make-fetch-happen/lib/cache/entry.js
+var require_entry = __commonJS({
+  "node_modules/.pnpm/make-fetch-happen@15.0.5_supports-color@10.2.2/node_modules/make-fetch-happen/lib/cache/entry.js"(exports2, module2) {
+    var { Request, Response } = require_lib24();
+    var { Minipass } = require_commonjs5();
+    var MinipassFlush = require_minipass_flush();
+    var cacache2 = require_lib17();
+    var url = require("url");
+    var CachingMinipassPipeline = require_pipeline();
+    var CachePolicy = require_policy();
+    var cacheKey = require_key();
+    var remote = require_remote();
+    var hasOwnProperty = /* @__PURE__ */ __name((obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop), "hasOwnProperty");
+    var KEEP_REQUEST_HEADERS = [
+      "accept-charset",
+      "accept-encoding",
+      "accept-language",
+      "accept",
+      "cache-control"
+    ];
+    var KEEP_RESPONSE_HEADERS = [
+      "cache-control",
+      "content-encoding",
+      "content-language",
+      "content-type",
+      "date",
+      "etag",
+      "expires",
+      "last-modified",
+      "link",
+      "location",
+      "pragma",
+      "vary"
+    ];
+    var getMetadata = /* @__PURE__ */ __name((request, response, options) => {
+      const metadata = {
+        time: Date.now(),
+        url: request.url,
+        reqHeaders: {},
+        resHeaders: {},
+        // options on which we must match the request and vary the response
+        options: {
+          compress: options.compress != null ? options.compress : request.compress
+        }
+      };
+      if (response.status !== 200 && response.status !== 304) {
+        metadata.status = response.status;
+      }
+      for (const name of KEEP_REQUEST_HEADERS) {
+        if (request.headers.has(name)) {
+          metadata.reqHeaders[name] = request.headers.get(name);
+        }
+      }
+      const host = request.headers.get("host");
+      const parsedUrl = new url.URL(request.url);
+      if (host && parsedUrl.host !== host) {
+        metadata.reqHeaders.host = host;
+      }
+      if (response.headers.has("vary")) {
+        const vary = response.headers.get("vary");
+        if (vary !== "*") {
+          const varyHeaders = vary.trim().toLowerCase().split(/\s*,\s*/);
+          for (const name of varyHeaders) {
+            if (request.headers.has(name)) {
+              metadata.reqHeaders[name] = request.headers.get(name);
+            }
+          }
+        }
+      }
+      for (const name of KEEP_RESPONSE_HEADERS) {
+        if (response.headers.has(name)) {
+          metadata.resHeaders[name] = response.headers.get(name);
+        }
+      }
+      for (const name of options.cacheAdditionalHeaders) {
+        if (response.headers.has(name)) {
+          metadata.resHeaders[name] = response.headers.get(name);
+        }
+      }
+      return metadata;
+    }, "getMetadata");
+    var _request = Symbol("request");
+    var _response = Symbol("response");
+    var _policy = Symbol("policy");
+    var CacheEntry = class _CacheEntry {
+      static {
+        __name(this, "CacheEntry");
+      }
+      constructor({ entry, request, response, options }) {
+        if (entry) {
+          this.key = entry.key;
+          this.entry = entry;
+          this.entry.metadata.time = this.entry.metadata.time || this.entry.time;
+        } else {
+          this.key = cacheKey(request);
+        }
+        this.options = options;
+        this[_request] = request;
+        this[_response] = response;
+        this[_policy] = null;
+      }
+      // returns a CacheEntry instance that satisfies the given request
+      // or undefined if no existing entry satisfies
+      static async find(request, options) {
+        try {
+          var matches = await cacache2.index.compact(options.cachePath, cacheKey(request), (A, B) => {
+            const entryA = new _CacheEntry({ entry: A, options });
+            const entryB = new _CacheEntry({ entry: B, options });
+            return entryA.policy.satisfies(entryB.request);
+          }, {
+            validateEntry: /* @__PURE__ */ __name((entry) => {
+              if (entry.metadata && entry.metadata.resHeaders && entry.metadata.resHeaders["content-encoding"] === null) {
+                return false;
+              }
+              if (entry.integrity === null) {
+                return !!(entry.metadata && entry.metadata.status);
+              }
+              return true;
+            }, "validateEntry")
+          });
+        } catch (err) {
+          return;
+        }
+        if (options.cache === "reload") {
+          return;
+        }
+        let match;
+        for (const entry of matches) {
+          const _entry = new _CacheEntry({
+            entry,
+            options
+          });
+          if (_entry.policy.satisfies(request)) {
+            match = _entry;
+            break;
+          }
+        }
+        return match;
+      }
+      // if the user made a PUT/POST/PATCH then we invalidate our
+      // cache for the same url by deleting the index entirely
+      static async invalidate(request, options) {
+        const key = cacheKey(request);
+        try {
+          await cacache2.rm.entry(options.cachePath, key, { removeFully: true });
+        } catch (err) {
+        }
+      }
+      get request() {
+        if (!this[_request]) {
+          this[_request] = new Request(this.entry.metadata.url, {
+            method: "GET",
+            headers: this.entry.metadata.reqHeaders,
+            ...this.entry.metadata.options
+          });
+        }
+        return this[_request];
+      }
+      get response() {
+        if (!this[_response]) {
+          this[_response] = new Response(null, {
+            url: this.entry.metadata.url,
+            counter: this.options.counter,
+            status: this.entry.metadata.status || 200,
+            headers: {
+              ...this.entry.metadata.resHeaders,
+              "content-length": this.entry.size
+            }
+          });
+        }
+        return this[_response];
+      }
+      get policy() {
+        if (!this[_policy]) {
+          this[_policy] = new CachePolicy({
+            entry: this.entry,
+            request: this.request,
+            response: this.response,
+            options: this.options
+          });
+        }
+        return this[_policy];
+      }
+      // wraps the response in a pipeline that stores the data
+      // in the cache while the user consumes it
+      async store(status) {
+        if (this.request.method !== "GET" || ![200, 301, 308].includes(this.response.status) || !this.policy.storable()) {
+          this.response.headers.set("x-local-cache-status", "skip");
+          return this.response;
+        }
+        const size = this.response.headers.get("content-length");
+        const cacheOpts = {
+          algorithms: this.options.algorithms,
+          metadata: getMetadata(this.request, this.response, this.options),
+          size,
+          integrity: this.options.integrity,
+          integrityEmitter: this.response.body.hasIntegrityEmitter && this.response.body
+        };
+        let body = null;
+        if (this.response.status === 200) {
+          let cacheWriteResolve, cacheWriteReject;
+          const cacheWritePromise = new Promise((resolve, reject) => {
+            cacheWriteResolve = resolve;
+            cacheWriteReject = reject;
+          }).catch((err) => {
+            body.emit("error", err);
+          });
+          body = new CachingMinipassPipeline({ events: ["integrity", "size"] }, new MinipassFlush({
+            flush() {
+              return cacheWritePromise;
+            }
+          }));
+          body.hasIntegrityEmitter = true;
+          const onResume = /* @__PURE__ */ __name(() => {
+            const tee = new Minipass();
+            const cacheStream = cacache2.put.stream(this.options.cachePath, this.key, cacheOpts);
+            cacheStream.on("integrity", (i) => body.emit("integrity", i));
+            cacheStream.on("size", (s) => body.emit("size", s));
+            tee.pipe(cacheStream);
+            cacheStream.promise().then(cacheWriteResolve, cacheWriteReject);
+            body.unshift(tee);
+            body.unshift(this.response.body);
+          }, "onResume");
+          body.once("resume", onResume);
+          body.once("end", () => body.removeListener("resume", onResume));
+        } else {
+          await cacache2.index.insert(this.options.cachePath, this.key, null, cacheOpts);
+        }
+        this.response.headers.set("x-local-cache", encodeURIComponent(this.options.cachePath));
+        this.response.headers.set("x-local-cache-key", encodeURIComponent(this.key));
+        this.response.headers.set("x-local-cache-mode", "stream");
+        this.response.headers.set("x-local-cache-status", status);
+        this.response.headers.set("x-local-cache-time", (/* @__PURE__ */ new Date()).toISOString());
+        const newResponse = new Response(body, {
+          url: this.response.url,
+          status: this.response.status,
+          headers: this.response.headers,
+          counter: this.options.counter
+        });
+        return newResponse;
+      }
+      // use the cached data to create a response and return it
+      async respond(method, options, status) {
+        let response;
+        if (method === "HEAD" || [301, 308].includes(this.response.status)) {
+          response = this.response;
+        } else {
+          const body = new Minipass();
+          const headers = { ...this.policy.responseHeaders() };
+          const onResume = /* @__PURE__ */ __name(() => {
+            const cacheStream = cacache2.get.stream.byDigest(
+              this.options.cachePath,
+              this.entry.integrity,
+              { memoize: this.options.memoize }
+            );
+            cacheStream.on("error", async (err) => {
+              cacheStream.pause();
+              if (err.code === "EINTEGRITY") {
+                await cacache2.rm.content(
+                  this.options.cachePath,
+                  this.entry.integrity,
+                  { memoize: this.options.memoize }
+                );
+              }
+              if (err.code === "ENOENT" || err.code === "EINTEGRITY") {
+                await _CacheEntry.invalidate(this.request, this.options);
+              }
+              body.emit("error", err);
+              cacheStream.resume();
+            });
+            body.emit("integrity", this.entry.integrity);
+            body.emit("size", Number(headers["content-length"]));
+            cacheStream.pipe(body);
+          }, "onResume");
+          body.once("resume", onResume);
+          body.once("end", () => body.removeListener("resume", onResume));
+          response = new Response(body, {
+            url: this.entry.metadata.url,
+            counter: options.counter,
+            status: 200,
+            headers
+          });
+        }
+        response.headers.set("x-local-cache", encodeURIComponent(this.options.cachePath));
+        response.headers.set("x-local-cache-hash", encodeURIComponent(this.entry.integrity));
+        response.headers.set("x-local-cache-key", encodeURIComponent(this.key));
+        response.headers.set("x-local-cache-mode", "stream");
+        response.headers.set("x-local-cache-status", status);
+        response.headers.set("x-local-cache-time", new Date(this.entry.metadata.time).toUTCString());
+        return response;
+      }
+      // use the provided request along with this cache entry to
+      // revalidate the stored response. returns a response, either
+      // from the cache or from the update
+      async revalidate(request, options) {
+        const revalidateRequest = new Request(request, {
+          headers: this.policy.revalidationHeaders(request)
+        });
+        try {
+          var response = await remote(revalidateRequest, {
+            ...options,
+            headers: void 0
+          });
+        } catch (err) {
+          if (!this.policy.mustRevalidate) {
+            return this.respond(request.method, options, "stale");
+          }
+          throw err;
+        }
+        if (this.policy.revalidated(revalidateRequest, response)) {
+          const metadata = getMetadata(request, response, options);
+          for (const name of KEEP_RESPONSE_HEADERS) {
+            if (!hasOwnProperty(metadata.resHeaders, name) && hasOwnProperty(this.entry.metadata.resHeaders, name)) {
+              metadata.resHeaders[name] = this.entry.metadata.resHeaders[name];
+            }
+          }
+          for (const name of options.cacheAdditionalHeaders) {
+            const inMeta = hasOwnProperty(metadata.resHeaders, name);
+            const inEntry = hasOwnProperty(this.entry.metadata.resHeaders, name);
+            const inPolicy = hasOwnProperty(this.policy.response.headers, name);
+            if (!inMeta && inEntry) {
+              metadata.resHeaders[name] = this.entry.metadata.resHeaders[name];
+            }
+            if (!inPolicy && inMeta) {
+              this.policy.response.headers[name] = metadata.resHeaders[name];
+            }
+          }
+          try {
+            await cacache2.index.insert(options.cachePath, this.key, this.entry.integrity, {
+              size: this.entry.size,
+              metadata
+            });
+          } catch (err) {
+          }
+          return this.respond(request.method, options, "revalidated");
+        }
+        const newEntry = new _CacheEntry({
+          request,
+          response,
+          options
+        });
+        return newEntry.store("updated");
+      }
+    };
+    module2.exports = CacheEntry;
+  }
+});
+
+// node_modules/.pnpm/make-fetch-happen@15.0.5_supports-color@10.2.2/node_modules/make-fetch-happen/lib/cache/index.js
+var require_cache = __commonJS({
+  "node_modules/.pnpm/make-fetch-happen@15.0.5_supports-color@10.2.2/node_modules/make-fetch-happen/lib/cache/index.js"(exports2, module2) {
+    var { NotCachedError } = require_errors4();
+    var CacheEntry = require_entry();
+    var remote = require_remote();
+    var cacheFetch = /* @__PURE__ */ __name(async (request, options) => {
+      const entry = await CacheEntry.find(request, options);
+      if (!entry) {
+        if (options.cache === "only-if-cached") {
+          throw new NotCachedError(request.url);
+        }
+        const response = await remote(request, options);
+        const newEntry = new CacheEntry({ request, response, options });
+        return newEntry.store("miss");
+      }
+      if (options.cache === "no-cache") {
+        return entry.revalidate(request, options);
+      }
+      const _needsRevalidation = entry.policy.needsRevalidation(request);
+      if (options.cache === "force-cache" || options.cache === "only-if-cached" || !_needsRevalidation) {
+        return entry.respond(request.method, options, _needsRevalidation ? "stale" : "hit");
+      }
+      return entry.revalidate(request, options);
+    }, "cacheFetch");
+    cacheFetch.invalidate = async (request, options) => {
+      if (!options.cachePath) {
+        return;
+      }
+      return CacheEntry.invalidate(request, options);
+    };
+    module2.exports = cacheFetch;
+  }
+});
+
+// node_modules/.pnpm/make-fetch-happen@15.0.5_supports-color@10.2.2/node_modules/make-fetch-happen/lib/fetch.js
+var require_fetch = __commonJS({
+  "node_modules/.pnpm/make-fetch-happen@15.0.5_supports-color@10.2.2/node_modules/make-fetch-happen/lib/fetch.js"(exports2, module2) {
+    "use strict";
+    var { FetchError, Request, isRedirect } = require_lib24();
+    var url = require("url");
+    var CachePolicy = require_policy();
+    var cache = require_cache();
+    var remote = require_remote();
+    var canFollowRedirect = /* @__PURE__ */ __name((request, response, options) => {
+      if (!isRedirect(response.status)) {
+        return false;
+      }
+      if (options.redirect === "manual") {
+        return false;
+      }
+      if (options.redirect === "error") {
+        throw new FetchError(
+          `redirect mode is set to error: ${request.url}`,
+          "no-redirect",
+          { code: "ENOREDIRECT" }
+        );
+      }
+      if (!response.headers.has("location")) {
+        throw new FetchError(
+          `redirect location header missing for: ${request.url}`,
+          "no-location",
+          { code: "EINVALIDREDIRECT" }
+        );
+      }
+      if (request.counter >= request.follow) {
+        throw new FetchError(
+          `maximum redirect reached at: ${request.url}`,
+          "max-redirect",
+          { code: "EMAXREDIRECT" }
+        );
+      }
+      return true;
+    }, "canFollowRedirect");
+    var getRedirect = /* @__PURE__ */ __name((request, response, options) => {
+      const _opts = { ...options };
+      const location = response.headers.get("location");
+      const redirectUrl = new url.URL(location, /^https?:/.test(location) ? void 0 : request.url);
+      if (new url.URL(request.url).hostname !== redirectUrl.hostname) {
+        request.headers.delete("authorization");
+        request.headers.delete("cookie");
+      }
+      if (response.status === 303 || request.method === "POST" && [301, 302].includes(response.status)) {
+        _opts.method = "GET";
+        _opts.body = null;
+        request.headers.delete("content-length");
+      }
+      _opts.headers = {};
+      request.headers.forEach((value, key) => {
+        _opts.headers[key] = value;
+      });
+      _opts.counter = ++request.counter;
+      const redirectReq = new Request(url.format(redirectUrl), _opts);
+      return {
+        request: redirectReq,
+        options: _opts
+      };
+    }, "getRedirect");
+    var fetch = /* @__PURE__ */ __name(async (request, options) => {
+      const response = CachePolicy.storable(request, options) ? await cache(request, options) : await remote(request, options);
+      if (!["GET", "HEAD"].includes(request.method) && response.status >= 200 && response.status <= 399) {
+        await cache.invalidate(request, options);
+      }
+      if (!canFollowRedirect(request, response, options)) {
+        return response;
+      }
+      const redirect = getRedirect(request, response, options);
+      return fetch(redirect.request, redirect.options);
+    }, "fetch");
+    module2.exports = fetch;
+  }
+});
+
+// node_modules/.pnpm/make-fetch-happen@15.0.5_supports-color@10.2.2/node_modules/make-fetch-happen/lib/index.js
+var require_lib27 = __commonJS({
+  "node_modules/.pnpm/make-fetch-happen@15.0.5_supports-color@10.2.2/node_modules/make-fetch-happen/lib/index.js"(exports2, module2) {
+    var { FetchError, Headers, Request, Response } = require_lib24();
+    var configureOptions = require_options2();
+    var fetch = require_fetch();
+    var makeFetchHappen2 = /* @__PURE__ */ __name((url, opts) => {
+      const options = configureOptions(opts);
+      const request = new Request(url, options);
+      return fetch(request, options);
+    }, "makeFetchHappen");
+    makeFetchHappen2.defaults = (defaultUrl, defaultOptions = {}, wrappedFetch = makeFetchHappen2) => {
+      if (typeof defaultUrl === "object") {
+        defaultOptions = defaultUrl;
+        defaultUrl = null;
+      }
+      const defaultedFetch = /* @__PURE__ */ __name((url, options = {}) => {
+        const finalUrl = url || defaultUrl;
+        const finalOptions = {
+          ...defaultOptions,
+          ...options,
+          headers: {
+            ...defaultOptions.headers,
+            ...options.headers
+          }
+        };
+        return wrappedFetch(finalUrl, finalOptions);
+      }, "defaultedFetch");
+      defaultedFetch.defaults = (defaultUrl1, defaultOptions1 = {}) => makeFetchHappen2.defaults(defaultUrl1, defaultOptions1, defaultedFetch);
+      return defaultedFetch;
+    };
+    module2.exports = makeFetchHappen2;
+    module2.exports.FetchError = FetchError;
+    module2.exports.Headers = Headers;
+    module2.exports.Request = Request;
+    module2.exports.Response = Response;
+  }
+});
+
+// node_modules/.pnpm/jsonparse@1.3.1/node_modules/jsonparse/jsonparse.js
+var require_jsonparse = __commonJS({
+  "node_modules/.pnpm/jsonparse@1.3.1/node_modules/jsonparse/jsonparse.js"(exports2, module2) {
+    var C = {};
+    var LEFT_BRACE = C.LEFT_BRACE = 1;
+    var RIGHT_BRACE = C.RIGHT_BRACE = 2;
+    var LEFT_BRACKET = C.LEFT_BRACKET = 3;
+    var RIGHT_BRACKET = C.RIGHT_BRACKET = 4;
+    var COLON = C.COLON = 5;
+    var COMMA = C.COMMA = 6;
+    var TRUE = C.TRUE = 7;
+    var FALSE = C.FALSE = 8;
+    var NULL = C.NULL = 9;
+    var STRING = C.STRING = 10;
+    var NUMBER = C.NUMBER = 11;
+    var START = C.START = 17;
+    var STOP = C.STOP = 18;
+    var TRUE1 = C.TRUE1 = 33;
+    var TRUE2 = C.TRUE2 = 34;
+    var TRUE3 = C.TRUE3 = 35;
+    var FALSE1 = C.FALSE1 = 49;
+    var FALSE2 = C.FALSE2 = 50;
+    var FALSE3 = C.FALSE3 = 51;
+    var FALSE4 = C.FALSE4 = 52;
+    var NULL1 = C.NULL1 = 65;
+    var NULL2 = C.NULL2 = 66;
+    var NULL3 = C.NULL3 = 67;
+    var NUMBER1 = C.NUMBER1 = 81;
+    var NUMBER3 = C.NUMBER3 = 83;
+    var STRING1 = C.STRING1 = 97;
+    var STRING2 = C.STRING2 = 98;
+    var STRING3 = C.STRING3 = 99;
+    var STRING4 = C.STRING4 = 100;
+    var STRING5 = C.STRING5 = 101;
+    var STRING6 = C.STRING6 = 102;
+    var VALUE = C.VALUE = 113;
+    var KEY = C.KEY = 114;
+    var OBJECT = C.OBJECT = 129;
+    var ARRAY = C.ARRAY = 130;
+    var BACK_SLASH = "\\".charCodeAt(0);
+    var FORWARD_SLASH = "/".charCodeAt(0);
+    var BACKSPACE = "\b".charCodeAt(0);
+    var FORM_FEED = "\f".charCodeAt(0);
+    var NEWLINE = "\n".charCodeAt(0);
+    var CARRIAGE_RETURN = "\r".charCodeAt(0);
+    var TAB = "	".charCodeAt(0);
+    var STRING_BUFFER_SIZE = 64 * 1024;
+    function Parser() {
+      this.tState = START;
+      this.value = void 0;
+      this.string = void 0;
+      this.stringBuffer = Buffer.alloc ? Buffer.alloc(STRING_BUFFER_SIZE) : new Buffer(STRING_BUFFER_SIZE);
+      this.stringBufferOffset = 0;
+      this.unicode = void 0;
+      this.highSurrogate = void 0;
+      this.key = void 0;
+      this.mode = void 0;
+      this.stack = [];
+      this.state = VALUE;
+      this.bytes_remaining = 0;
+      this.bytes_in_sequence = 0;
+      this.temp_buffs = { "2": new Buffer(2), "3": new Buffer(3), "4": new Buffer(4) };
+      this.offset = -1;
+    }
+    __name(Parser, "Parser");
+    Parser.toknam = function(code) {
+      var keys = Object.keys(C);
+      for (var i = 0, l = keys.length; i < l; i++) {
+        var key = keys[i];
+        if (C[key] === code) {
+          return key;
+        }
+      }
+      return code && "0x" + code.toString(16);
+    };
+    var proto = Parser.prototype;
+    proto.onError = function(err) {
+      throw err;
+    };
+    proto.charError = function(buffer, i) {
+      this.tState = STOP;
+      this.onError(new Error("Unexpected " + JSON.stringify(String.fromCharCode(buffer[i])) + " at position " + i + " in state " + Parser.toknam(this.tState)));
+    };
+    proto.appendStringChar = function(char) {
+      if (this.stringBufferOffset >= STRING_BUFFER_SIZE) {
+        this.string += this.stringBuffer.toString("utf8");
+        this.stringBufferOffset = 0;
+      }
+      this.stringBuffer[this.stringBufferOffset++] = char;
+    };
+    proto.appendStringBuf = function(buf, start, end) {
+      var size = buf.length;
+      if (typeof start === "number") {
+        if (typeof end === "number") {
+          if (end < 0) {
+            size = buf.length - start + end;
+          } else {
+            size = end - start;
+          }
+        } else {
+          size = buf.length - start;
+        }
+      }
+      if (size < 0) {
+        size = 0;
+      }
+      if (this.stringBufferOffset + size > STRING_BUFFER_SIZE) {
+        this.string += this.stringBuffer.toString("utf8", 0, this.stringBufferOffset);
+        this.stringBufferOffset = 0;
+      }
+      buf.copy(this.stringBuffer, this.stringBufferOffset, start, end);
+      this.stringBufferOffset += size;
+    };
+    proto.write = function(buffer) {
+      if (typeof buffer === "string") buffer = new Buffer(buffer);
+      var n;
+      for (var i = 0, l = buffer.length; i < l; i++) {
+        if (this.tState === START) {
+          n = buffer[i];
+          this.offset++;
+          if (n === 123) {
+            this.onToken(LEFT_BRACE, "{");
+          } else if (n === 125) {
+            this.onToken(RIGHT_BRACE, "}");
+          } else if (n === 91) {
+            this.onToken(LEFT_BRACKET, "[");
+          } else if (n === 93) {
+            this.onToken(RIGHT_BRACKET, "]");
+          } else if (n === 58) {
+            this.onToken(COLON, ":");
+          } else if (n === 44) {
+            this.onToken(COMMA, ",");
+          } else if (n === 116) {
+            this.tState = TRUE1;
+          } else if (n === 102) {
+            this.tState = FALSE1;
+          } else if (n === 110) {
+            this.tState = NULL1;
+          } else if (n === 34) {
+            this.string = "";
+            this.stringBufferOffset = 0;
+            this.tState = STRING1;
+          } else if (n === 45) {
+            this.string = "-";
+            this.tState = NUMBER1;
+          } else {
+            if (n >= 48 && n < 64) {
+              this.string = String.fromCharCode(n);
+              this.tState = NUMBER3;
+            } else if (n === 32 || n === 9 || n === 10 || n === 13) {
+            } else {
+              return this.charError(buffer, i);
+            }
+          }
+        } else if (this.tState === STRING1) {
+          n = buffer[i];
+          if (this.bytes_remaining > 0) {
+            for (var j = 0; j < this.bytes_remaining; j++) {
+              this.temp_buffs[this.bytes_in_sequence][this.bytes_in_sequence - this.bytes_remaining + j] = buffer[j];
+            }
+            this.appendStringBuf(this.temp_buffs[this.bytes_in_sequence]);
+            this.bytes_in_sequence = this.bytes_remaining = 0;
+            i = i + j - 1;
+          } else if (this.bytes_remaining === 0 && n >= 128) {
+            if (n <= 193 || n > 244) {
+              return this.onError(new Error("Invalid UTF-8 character at position " + i + " in state " + Parser.toknam(this.tState)));
+            }
+            if (n >= 194 && n <= 223) this.bytes_in_sequence = 2;
+            if (n >= 224 && n <= 239) this.bytes_in_sequence = 3;
+            if (n >= 240 && n <= 244) this.bytes_in_sequence = 4;
+            if (this.bytes_in_sequence + i > buffer.length) {
+              for (var k = 0; k <= buffer.length - 1 - i; k++) {
+                this.temp_buffs[this.bytes_in_sequence][k] = buffer[i + k];
+              }
+              this.bytes_remaining = i + this.bytes_in_sequence - buffer.length;
+              i = buffer.length - 1;
+            } else {
+              this.appendStringBuf(buffer, i, i + this.bytes_in_sequence);
+              i = i + this.bytes_in_sequence - 1;
+            }
+          } else if (n === 34) {
+            this.tState = START;
+            this.string += this.stringBuffer.toString("utf8", 0, this.stringBufferOffset);
+            this.stringBufferOffset = 0;
+            this.onToken(STRING, this.string);
+            this.offset += Buffer.byteLength(this.string, "utf8") + 1;
+            this.string = void 0;
+          } else if (n === 92) {
+            this.tState = STRING2;
+          } else if (n >= 32) {
+            this.appendStringChar(n);
+          } else {
+            return this.charError(buffer, i);
+          }
+        } else if (this.tState === STRING2) {
+          n = buffer[i];
+          if (n === 34) {
+            this.appendStringChar(n);
+            this.tState = STRING1;
+          } else if (n === 92) {
+            this.appendStringChar(BACK_SLASH);
+            this.tState = STRING1;
+          } else if (n === 47) {
+            this.appendStringChar(FORWARD_SLASH);
+            this.tState = STRING1;
+          } else if (n === 98) {
+            this.appendStringChar(BACKSPACE);
+            this.tState = STRING1;
+          } else if (n === 102) {
+            this.appendStringChar(FORM_FEED);
+            this.tState = STRING1;
+          } else if (n === 110) {
+            this.appendStringChar(NEWLINE);
+            this.tState = STRING1;
+          } else if (n === 114) {
+            this.appendStringChar(CARRIAGE_RETURN);
+            this.tState = STRING1;
+          } else if (n === 116) {
+            this.appendStringChar(TAB);
+            this.tState = STRING1;
+          } else if (n === 117) {
+            this.unicode = "";
+            this.tState = STRING3;
+          } else {
+            return this.charError(buffer, i);
+          }
+        } else if (this.tState === STRING3 || this.tState === STRING4 || this.tState === STRING5 || this.tState === STRING6) {
+          n = buffer[i];
+          if (n >= 48 && n < 64 || n > 64 && n <= 70 || n > 96 && n <= 102) {
+            this.unicode += String.fromCharCode(n);
+            if (this.tState++ === STRING6) {
+              var intVal = parseInt(this.unicode, 16);
+              this.unicode = void 0;
+              if (this.highSurrogate !== void 0 && intVal >= 56320 && intVal < 57343 + 1) {
+                this.appendStringBuf(new Buffer(String.fromCharCode(this.highSurrogate, intVal)));
+                this.highSurrogate = void 0;
+              } else if (this.highSurrogate === void 0 && intVal >= 55296 && intVal < 56319 + 1) {
+                this.highSurrogate = intVal;
+              } else {
+                if (this.highSurrogate !== void 0) {
+                  this.appendStringBuf(new Buffer(String.fromCharCode(this.highSurrogate)));
+                  this.highSurrogate = void 0;
+                }
+                this.appendStringBuf(new Buffer(String.fromCharCode(intVal)));
+              }
+              this.tState = STRING1;
+            }
+          } else {
+            return this.charError(buffer, i);
+          }
+        } else if (this.tState === NUMBER1 || this.tState === NUMBER3) {
+          n = buffer[i];
+          switch (n) {
+            case 48:
+            // 0
+            case 49:
+            // 1
+            case 50:
+            // 2
+            case 51:
+            // 3
+            case 52:
+            // 4
+            case 53:
+            // 5
+            case 54:
+            // 6
+            case 55:
+            // 7
+            case 56:
+            // 8
+            case 57:
+            // 9
+            case 46:
+            // .
+            case 101:
+            // e
+            case 69:
+            // E
+            case 43:
+            // +
+            case 45:
+              this.string += String.fromCharCode(n);
+              this.tState = NUMBER3;
+              break;
+            default:
+              this.tState = START;
+              var result = Number(this.string);
+              if (isNaN(result)) {
+                return this.charError(buffer, i);
+              }
+              if (this.string.match(/[0-9]+/) == this.string && result.toString() != this.string) {
+                this.onToken(STRING, this.string);
+              } else {
+                this.onToken(NUMBER, result);
+              }
+              this.offset += this.string.length - 1;
+              this.string = void 0;
+              i--;
+              break;
+          }
+        } else if (this.tState === TRUE1) {
+          if (buffer[i] === 114) {
+            this.tState = TRUE2;
+          } else {
+            return this.charError(buffer, i);
+          }
+        } else if (this.tState === TRUE2) {
+          if (buffer[i] === 117) {
+            this.tState = TRUE3;
+          } else {
+            return this.charError(buffer, i);
+          }
+        } else if (this.tState === TRUE3) {
+          if (buffer[i] === 101) {
+            this.tState = START;
+            this.onToken(TRUE, true);
+            this.offset += 3;
+          } else {
+            return this.charError(buffer, i);
+          }
+        } else if (this.tState === FALSE1) {
+          if (buffer[i] === 97) {
+            this.tState = FALSE2;
+          } else {
+            return this.charError(buffer, i);
+          }
+        } else if (this.tState === FALSE2) {
+          if (buffer[i] === 108) {
+            this.tState = FALSE3;
+          } else {
+            return this.charError(buffer, i);
+          }
+        } else if (this.tState === FALSE3) {
+          if (buffer[i] === 115) {
+            this.tState = FALSE4;
+          } else {
+            return this.charError(buffer, i);
+          }
+        } else if (this.tState === FALSE4) {
+          if (buffer[i] === 101) {
+            this.tState = START;
+            this.onToken(FALSE, false);
+            this.offset += 4;
+          } else {
+            return this.charError(buffer, i);
+          }
+        } else if (this.tState === NULL1) {
+          if (buffer[i] === 117) {
+            this.tState = NULL2;
+          } else {
+            return this.charError(buffer, i);
+          }
+        } else if (this.tState === NULL2) {
+          if (buffer[i] === 108) {
+            this.tState = NULL3;
+          } else {
+            return this.charError(buffer, i);
+          }
+        } else if (this.tState === NULL3) {
+          if (buffer[i] === 108) {
+            this.tState = START;
+            this.onToken(NULL, null);
+            this.offset += 3;
+          } else {
+            return this.charError(buffer, i);
+          }
+        }
+      }
+    };
+    proto.onToken = function(token, value) {
+    };
+    proto.parseError = function(token, value) {
+      this.tState = STOP;
+      this.onError(new Error("Unexpected " + Parser.toknam(token) + (value ? "(" + JSON.stringify(value) + ")" : "") + " in state " + Parser.toknam(this.state)));
+    };
+    proto.push = function() {
+      this.stack.push({ value: this.value, key: this.key, mode: this.mode });
+    };
+    proto.pop = function() {
+      var value = this.value;
+      var parent = this.stack.pop();
+      this.value = parent.value;
+      this.key = parent.key;
+      this.mode = parent.mode;
+      this.emit(value);
+      if (!this.mode) {
+        this.state = VALUE;
+      }
+    };
+    proto.emit = function(value) {
+      if (this.mode) {
+        this.state = COMMA;
+      }
+      this.onValue(value);
+    };
+    proto.onValue = function(value) {
+    };
+    proto.onToken = function(token, value) {
+      if (this.state === VALUE) {
+        if (token === STRING || token === NUMBER || token === TRUE || token === FALSE || token === NULL) {
+          if (this.value) {
+            this.value[this.key] = value;
+          }
+          this.emit(value);
+        } else if (token === LEFT_BRACE) {
+          this.push();
+          if (this.value) {
+            this.value = this.value[this.key] = {};
+          } else {
+            this.value = {};
+          }
+          this.key = void 0;
+          this.state = KEY;
+          this.mode = OBJECT;
+        } else if (token === LEFT_BRACKET) {
+          this.push();
+          if (this.value) {
+            this.value = this.value[this.key] = [];
+          } else {
+            this.value = [];
+          }
+          this.key = 0;
+          this.mode = ARRAY;
+          this.state = VALUE;
+        } else if (token === RIGHT_BRACE) {
+          if (this.mode === OBJECT) {
+            this.pop();
+          } else {
+            return this.parseError(token, value);
+          }
+        } else if (token === RIGHT_BRACKET) {
+          if (this.mode === ARRAY) {
+            this.pop();
+          } else {
+            return this.parseError(token, value);
+          }
+        } else {
+          return this.parseError(token, value);
+        }
+      } else if (this.state === KEY) {
+        if (token === STRING) {
+          this.key = value;
+          this.state = COLON;
+        } else if (token === RIGHT_BRACE) {
+          this.pop();
+        } else {
+          return this.parseError(token, value);
+        }
+      } else if (this.state === COLON) {
+        if (token === COLON) {
+          this.state = VALUE;
+        } else {
+          return this.parseError(token, value);
+        }
+      } else if (this.state === COMMA) {
+        if (token === COMMA) {
+          if (this.mode === ARRAY) {
+            this.key++;
+            this.state = VALUE;
+          } else if (this.mode === OBJECT) {
+            this.state = KEY;
+          }
+        } else if (token === RIGHT_BRACKET && this.mode === ARRAY || token === RIGHT_BRACE && this.mode === OBJECT) {
+          this.pop();
+        } else {
+          return this.parseError(token, value);
+        }
+      } else {
+        return this.parseError(token, value);
+      }
+    };
+    Parser.C = C;
+    module2.exports = Parser;
+  }
+});
+
+// node_modules/.pnpm/npm-registry-fetch@19.1.1_supports-color@10.2.2/node_modules/npm-registry-fetch/lib/json-stream.js
+var require_json_stream = __commonJS({
+  "node_modules/.pnpm/npm-registry-fetch@19.1.1_supports-color@10.2.2/node_modules/npm-registry-fetch/lib/json-stream.js"(exports2, module2) {
+    var Parser = require_jsonparse();
+    var { Minipass } = require_commonjs5();
+    var JSONStreamError = class extends Error {
+      static {
+        __name(this, "JSONStreamError");
+      }
+      constructor(err, caller) {
+        super(err.message);
+        Error.captureStackTrace(this, caller || this.constructor);
+      }
+      get name() {
+        return "JSONStreamError";
+      }
+    };
+    var check = /* @__PURE__ */ __name((x, y) => typeof x === "string" ? String(y) === x : x && typeof x.test === "function" ? x.test(y) : typeof x === "boolean" || typeof x === "object" ? x : typeof x === "function" ? x(y) : false, "check");
+    var JSONStream = class _JSONStream extends Minipass {
+      static {
+        __name(this, "JSONStream");
+      }
+      #count = 0;
+      #ending = false;
+      #footer = null;
+      #header = null;
+      #map = null;
+      #onTokenOriginal;
+      #parser;
+      #path = null;
+      #root = null;
+      constructor(opts) {
+        super({
+          ...opts,
+          objectMode: true
+        });
+        const parser = this.#parser = new Parser();
+        parser.onValue = (value) => this.#onValue(value);
+        this.#onTokenOriginal = parser.onToken;
+        parser.onToken = (token, value) => this.#onToken(token, value);
+        parser.onError = (er) => this.#onError(er);
+        this.#path = typeof opts.path === "string" ? opts.path.split(".").map((e) => e === "$*" ? { emitKey: true } : e === "*" ? true : e === "" ? { recurse: true } : e) : Array.isArray(opts.path) && opts.path.length ? opts.path : null;
+        if (typeof opts.map === "function") {
+          this.#map = opts.map;
+        }
+      }
+      #setHeaderFooter(key, value) {
+        if (this.#header !== false) {
+          this.#header = this.#header || {};
+          this.#header[key] = value;
+        }
+        if (this.#footer !== false && this.#header === false) {
+          this.#footer = this.#footer || {};
+          this.#footer[key] = value;
+        }
+      }
+      #onError(er) {
+        const caller = this.#ending ? this.end : this.write;
+        this.#ending = false;
+        return this.emit("error", new JSONStreamError(er, caller));
+      }
+      #onToken(token, value) {
+        const parser = this.#parser;
+        this.#onTokenOriginal.call(this.#parser, token, value);
+        if (parser.stack.length === 0) {
+          if (this.#root) {
+            const root = this.#root;
+            if (!this.#path) {
+              super.write(root);
+            }
+            this.#root = null;
+            this.#count = 0;
+          }
+        }
+      }
+      #onValue(value) {
+        const parser = this.#parser;
+        this.#root = value;
+        if (!this.#path) {
+          return;
+        }
+        let i = 0;
+        let j = 0;
+        let emitKey = false;
+        while (i < this.#path.length) {
+          const key = this.#path[i];
+          j++;
+          if (key && !key.recurse) {
+            const c = j === parser.stack.length ? parser : parser.stack[j];
+            if (!c) {
+              return;
+            }
+            if (!check(key, c.key)) {
+              this.#setHeaderFooter(c.key, value);
+              return;
+            }
+            emitKey = !!key.emitKey;
+            i++;
+          } else {
+            i++;
+            if (i >= this.#path.length) {
+              return;
+            }
+            const nextKey = this.#path[i];
+            if (!nextKey) {
+              return;
+            }
+            while (true) {
+              const c = j === parser.stack.length ? parser : parser.stack[j];
+              if (!c) {
+                return;
+              }
+              if (check(nextKey, c.key)) {
+                i++;
+                if (!Object.isFrozen(parser.stack[j])) {
+                  parser.stack[j].value = null;
+                }
+                break;
+              } else {
+                this.#setHeaderFooter(c.key, value);
+              }
+              j++;
+            }
+          }
+        }
+        if (this.#header) {
+          const header = this.#header;
+          this.#header = false;
+          this.emit("header", header);
+        }
+        if (j !== parser.stack.length) {
+          return;
+        }
+        this.#count++;
+        const actualPath = parser.stack.slice(1).map((e) => e.key).concat([parser.key]);
+        if (value !== null && value !== void 0) {
+          const data = this.#map ? this.#map(value, actualPath) : value;
+          if (data !== null && data !== void 0) {
+            const emit = emitKey ? { value: data } : data;
+            if (emitKey) {
+              emit.key = parser.key;
+            }
+            super.write(emit);
+          }
+        }
+        if (parser.value) {
+          delete parser.value[parser.key];
+        }
+        for (const k of parser.stack) {
+          k.value = null;
+        }
+      }
+      write(chunk, encoding) {
+        if (typeof chunk === "string") {
+          chunk = Buffer.from(chunk, encoding);
+        } else if (!Buffer.isBuffer(chunk)) {
+          return this.emit("error", new TypeError(
+            "Can only parse JSON from string or buffer input"
+          ));
+        }
+        this.#parser.write(chunk);
+        return this.flowing;
+      }
+      end(chunk, encoding) {
+        this.#ending = true;
+        if (chunk) {
+          this.write(chunk, encoding);
+        }
+        const h = this.#header;
+        this.#header = null;
+        const f = this.#footer;
+        this.#footer = null;
+        if (h) {
+          this.emit("header", h);
+        }
+        if (f) {
+          this.emit("footer", f);
+        }
+        return super.end();
+      }
+      static get JSONStreamError() {
+        return JSONStreamError;
+      }
+      static parse(path, map) {
+        return new _JSONStream({ path, map });
+      }
+    };
+    module2.exports = JSONStream;
+  }
+});
+
+// node_modules/.pnpm/npm-registry-fetch@19.1.1_supports-color@10.2.2/node_modules/npm-registry-fetch/lib/index.js
+var require_lib28 = __commonJS({
+  "node_modules/.pnpm/npm-registry-fetch@19.1.1_supports-color@10.2.2/node_modules/npm-registry-fetch/lib/index.js"(exports2, module2) {
+    "use strict";
+    var { HttpErrorAuthOTP } = require_errors3();
+    var checkResponse = require_check_response();
+    var getAuth = require_auth();
+    var fetch = require_lib27();
+    var JSONStream = require_json_stream();
+    var npa = require_npa();
+    var qs = require("querystring");
+    var url = require("url");
+    var zlib = require_commonjs8();
+    var { Minipass } = require_commonjs5();
+    var defaultOpts = require_default_opts();
+    var urlIsValid = /* @__PURE__ */ __name((u) => {
+      try {
+        return !!new url.URL(u);
+      } catch (_) {
+        return false;
+      }
+    }, "urlIsValid");
+    module2.exports = regFetch;
+    function regFetch(uri, opts_ = {}) {
+      const opts = {
+        ...defaultOpts,
+        ...opts_
+      };
+      const uriValid = urlIsValid(uri);
+      let registry = opts.registry || defaultOpts.registry;
+      if (!uriValid) {
+        registry = opts.registry = opts.spec && pickRegistry(opts.spec, opts) || opts.registry || registry;
+        uri = `${registry.trim().replace(/\/?$/g, "")}/${uri.trim().replace(/^\//, "")}`;
+        new url.URL(uri);
+      }
+      const method = opts.method || "GET";
+      const startTime = Date.now();
+      const auth = getAuth(uri, opts);
+      const headers = getHeaders(uri, auth, opts);
+      let body = opts.body;
+      const bodyIsStream = Minipass.isStream(body);
+      const bodyIsPromise = body && typeof body === "object" && typeof body.then === "function";
+      if (body && !bodyIsStream && !bodyIsPromise && typeof body !== "string" && !Buffer.isBuffer(body)) {
+        headers["content-type"] = headers["content-type"] || "application/json";
+        body = JSON.stringify(body);
+      } else if (body && !headers["content-type"]) {
+        headers["content-type"] = "application/octet-stream";
+      }
+      if (opts.gzip) {
+        headers["content-encoding"] = "gzip";
+        if (bodyIsStream) {
+          const gz = new zlib.Gzip();
+          body.on(
+            "error",
+            /* istanbul ignore next: unlikely and hard to test */
+            (err) => gz.emit("error", err)
+          );
+          body = body.pipe(gz);
+        } else if (!bodyIsPromise) {
+          body = new zlib.Gzip().end(body).concat();
+        }
+      }
+      const parsed = new url.URL(uri);
+      if (opts.query) {
+        const q = typeof opts.query === "string" ? qs.parse(opts.query) : opts.query;
+        Object.keys(q).forEach((key) => {
+          if (q[key] !== void 0) {
+            parsed.searchParams.set(key, q[key]);
+          }
+        });
+        uri = url.format(parsed);
+      }
+      if (parsed.searchParams.get("write") === "true" && method === "GET") {
+        opts.offline = false;
+        opts.preferOffline = false;
+        opts.preferOnline = true;
+      }
+      const doFetch = /* @__PURE__ */ __name(async (fetchBody) => {
+        const p = fetch(uri, {
+          agent: opts.agent,
+          algorithms: opts.algorithms,
+          body: fetchBody,
+          cache: getCacheMode(opts),
+          cachePath: opts.cache,
+          ca: opts.ca,
+          cert: auth.cert || opts.cert,
+          headers,
+          integrity: opts.integrity,
+          key: auth.key || opts.key,
+          localAddress: opts.localAddress,
+          maxSockets: opts.maxSockets,
+          memoize: opts.memoize,
+          method,
+          noProxy: opts.noProxy,
+          proxy: opts.httpsProxy || opts.proxy,
+          retry: opts.retry ? opts.retry : {
+            retries: opts.fetchRetries,
+            factor: opts.fetchRetryFactor,
+            minTimeout: opts.fetchRetryMintimeout,
+            maxTimeout: opts.fetchRetryMaxtimeout
+          },
+          strictSSL: opts.strictSSL,
+          timeout: opts.timeout || 30 * 1e3,
+          signal: opts.signal
+        }).then((res) => checkResponse({
+          method,
+          uri,
+          res,
+          registry,
+          startTime,
+          auth,
+          opts
+        }));
+        if (typeof opts.otpPrompt === "function") {
+          return p.catch(async (er) => {
+            if (er instanceof HttpErrorAuthOTP) {
+              let otp;
+              try {
+                otp = await opts.otpPrompt();
+              } catch (_) {
+              }
+              if (!otp) {
+                throw er;
+              }
+              return regFetch(uri, { ...opts, otp });
+            }
+            throw er;
+          });
+        } else {
+          return p;
+        }
+      }, "doFetch");
+      return Promise.resolve(body).then(doFetch);
+    }
+    __name(regFetch, "regFetch");
+    module2.exports.getAuth = getAuth;
+    module2.exports.json = fetchJSON;
+    function fetchJSON(uri, opts) {
+      return regFetch(uri, opts).then((res) => res.json());
+    }
+    __name(fetchJSON, "fetchJSON");
+    module2.exports.json.stream = fetchJSONStream;
+    function fetchJSONStream(uri, jsonPath, opts_ = {}) {
+      const opts = { ...defaultOpts, ...opts_ };
+      const parser = JSONStream.parse(jsonPath, opts.mapJSON);
+      regFetch(uri, opts).then(
+        (res) => res.body.on(
+          "error",
+          /* istanbul ignore next: unlikely and difficult to test */
+          (er) => parser.emit("error", er)
+        ).pipe(parser)
+      ).catch((er) => parser.emit("error", er));
+      return parser;
+    }
+    __name(fetchJSONStream, "fetchJSONStream");
+    module2.exports.pickRegistry = pickRegistry;
+    function pickRegistry(spec, opts = {}) {
+      spec = npa(spec);
+      let registry = spec.scope && opts[spec.scope.replace(/^@?/, "@") + ":registry"];
+      if (!registry && opts.scope) {
+        registry = opts[opts.scope.replace(/^@?/, "@") + ":registry"];
+      }
+      if (!registry) {
+        registry = opts.registry || defaultOpts.registry;
+      }
+      return registry;
+    }
+    __name(pickRegistry, "pickRegistry");
+    function getCacheMode(opts) {
+      return opts.offline ? "only-if-cached" : opts.preferOffline ? "force-cache" : opts.preferOnline ? "no-cache" : "default";
+    }
+    __name(getCacheMode, "getCacheMode");
+    function getHeaders(uri, auth, opts) {
+      const headers = Object.assign({
+        "user-agent": opts.userAgent
+      }, opts.headers || {});
+      if (opts.authType) {
+        headers["npm-auth-type"] = opts.authType;
+      }
+      if (opts.scope) {
+        headers["npm-scope"] = opts.scope;
+      }
+      if (opts.npmSession) {
+        headers["npm-session"] = opts.npmSession;
+      }
+      if (opts.npmCommand) {
+        headers["npm-command"] = opts.npmCommand;
+      }
+      if (auth.token) {
+        headers.authorization = `Bearer ${auth.token}`;
+      } else if (auth.auth) {
+        headers.authorization = `Basic ${auth.auth}`;
+      }
+      if (opts.otp) {
+        headers["npm-otp"] = opts.otp;
+      }
+      return headers;
+    }
+    __name(getHeaders, "getHeaders");
+  }
+});
+
+// node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/package.json
+var require_package5 = __commonJS({
+  "node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/package.json"(exports2, module2) {
+    module2.exports = {
+      name: "pacote",
+      version: "21.5.0",
+      description: "JavaScript package downloader",
+      author: "GitHub Inc.",
+      bin: {
+        pacote: "bin/index.js"
+      },
+      license: "ISC",
+      main: "lib/index.js",
+      scripts: {
+        test: "tap",
+        snap: "tap",
+        lint: "npm run eslint",
+        postlint: "template-oss-check",
+        lintfix: "npm run eslint -- --fix",
+        posttest: "npm run lint",
+        "template-oss-apply": "template-oss-apply --force",
+        eslint: 'eslint "**/*.{js,cjs,ts,mjs,jsx,tsx}"'
+      },
+      tap: {
+        timeout: 300,
+        "nyc-arg": [
+          "--exclude",
+          "tap-snapshots/**"
+        ]
+      },
+      devDependencies: {
+        "@npmcli/arborist": "^9.0.2",
+        "@npmcli/eslint-config": "^6.0.0",
+        "@npmcli/template-oss": "4.29.0",
+        "hosted-git-info": "^9.0.0",
+        "mutate-fs": "^2.1.1",
+        nock: "^13.2.4",
+        "npm-registry-mock": "^1.3.2",
+        rimraf: "^6.0.1",
+        tap: "^16.0.1"
+      },
+      files: [
+        "bin/",
+        "lib/"
+      ],
+      keywords: [
+        "packages",
+        "npm",
+        "git"
+      ],
+      dependencies: {
+        "@gar/promise-retry": "^1.0.0",
+        "@npmcli/git": "^7.0.0",
+        "@npmcli/installed-package-contents": "^4.0.0",
+        "@npmcli/package-json": "^7.0.0",
+        "@npmcli/promise-spawn": "^9.0.0",
+        "@npmcli/run-script": "^10.0.0",
+        cacache: "^20.0.0",
+        "fs-minipass": "^3.0.0",
+        minipass: "^7.0.2",
+        "npm-package-arg": "^13.0.0",
+        "npm-packlist": "^10.0.1",
+        "npm-pick-manifest": "^11.0.1",
+        "npm-registry-fetch": "^19.0.0",
+        "proc-log": "^6.0.0",
+        sigstore: "^4.0.0",
+        ssri: "^13.0.0",
+        tar: "^7.4.3"
+      },
+      engines: {
+        node: "^20.17.0 || >=22.9.0"
+      },
+      repository: {
+        type: "git",
+        url: "git+https://github.com/npm/pacote.git"
+      },
+      templateOSS: {
+        "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
+        version: "4.29.0",
+        windowsCI: false,
+        publish: "true"
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/remote.js
+var require_remote2 = __commonJS({
+  "node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/remote.js"(exports2, module2) {
+    var fetch = require_lib28();
+    var { Minipass } = require_commonjs5();
+    var Fetcher = require_fetcher2();
+    var FileFetcher = require_file();
+    var _ = require_protected();
+    var pacoteVersion = require_package5().version;
+    var RemoteFetcher = class extends Fetcher {
+      static {
+        __name(this, "RemoteFetcher");
+      }
+      constructor(spec, opts) {
+        super(spec, opts);
+        this.resolved = this.spec.fetchSpec;
+        const resolvedURL = new URL(this.resolved);
+        if (this.replaceRegistryHost !== "never" && (this.replaceRegistryHost === "always" || this.replaceRegistryHost === resolvedURL.host)) {
+          this.resolved = new URL(resolvedURL.pathname, this.registry).href;
+        }
+        const nameat = this.spec.name ? `${this.spec.name}@` : "";
+        this.pkgid = opts.pkgid ? opts.pkgid : `remote:${nameat}${this.resolved}`;
+      }
+      // Don't need to cache tarball fetches in pacote, because make-fetch-happen
+      // will write into cacache anyway.
+      get [_.cacheFetches]() {
+        return false;
+      }
+      [_.tarballFromResolved]() {
+        const stream = new Minipass();
+        stream.hasIntegrityEmitter = true;
+        const fetchOpts = {
+          ...this.opts,
+          headers: this.#headers(),
+          spec: this.spec,
+          integrity: this.integrity,
+          algorithms: [this.pickIntegrityAlgorithm()]
+        };
+        fetch(this.resolved, fetchOpts).then((res) => {
+          res.body.on(
+            "error",
+            /* istanbul ignore next - exceedingly rare and hard to simulate */
+            (er) => stream.emit("error", er)
+          );
+          res.body.on("integrity", (i) => {
+            this.integrity = i;
+            stream.emit("integrity", i);
+          });
+          res.body.pipe(stream);
+        }).catch((er) => stream.emit("error", er));
+        return stream;
+      }
+      #headers() {
+        return {
+          // npm will override this, but ensure that we always send *something*
+          "user-agent": this.opts.userAgent || `pacote/${pacoteVersion} node/${process.version}`,
+          ...this.opts.headers || {},
+          "pacote-version": pacoteVersion,
+          "pacote-req-type": "tarball",
+          "pacote-pkg-id": this.pkgid,
+          ...this.integrity ? { "pacote-integrity": String(this.integrity) } : {},
+          ...this.opts.headers || {}
+        };
+      }
+      get types() {
+        return ["remote"];
+      }
+      // getting a packument and/or manifest is the same as with a file: spec.
+      // unpack the tarball stream, and then read from the package.json file.
+      packument() {
+        return FileFetcher.prototype.packument.apply(this);
+      }
+      manifest() {
+        return FileFetcher.prototype.manifest.apply(this);
+      }
+    };
+    module2.exports = RemoteFetcher;
+  }
+});
+
+// node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/util/add-git-sha.js
+var require_add_git_sha = __commonJS({
+  "node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/util/add-git-sha.js"(exports2, module2) {
+    var addGitSha = /* @__PURE__ */ __name((spec, sha) => {
+      if (spec.hosted) {
+        const h = spec.hosted;
+        const opt = { noCommittish: true };
+        const base = h.https && h.auth ? h.https(opt) : h.shortcut(opt);
+        return `${base}#${sha}`;
+      } else {
+        return spec.rawSpec.replace(/#.*$/, "") + `#${sha}`;
+      }
+    }, "addGitSha");
+    module2.exports = addGitSha;
+  }
+});
+
+// node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/util/npm.js
+var require_npm = __commonJS({
+  "node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/util/npm.js"(exports2, module2) {
+    var spawn = require_lib5();
+    module2.exports = (npmBin, npmCommand, cwd, env2, extra) => {
+      const isJS = npmBin.endsWith(".js");
+      const cmd = isJS ? process.execPath : npmBin;
+      const args = (isJS ? [npmBin] : []).concat(npmCommand);
+      return spawn(cmd, args, { cwd, env: env2 }, extra);
+    };
+  }
+});
+
+// node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/git.js
+var require_git = __commonJS({
+  "node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/git.js"(exports2, module2) {
+    var cacache2 = require_lib17();
+    var git = require_lib10();
+    var npa = require_npa();
+    var pickManifest = require_lib9();
+    var { Minipass } = require_commonjs5();
+    var { log } = require_lib2();
+    var DirFetcher = require_dir();
+    var Fetcher = require_fetcher2();
+    var FileFetcher = require_file();
+    var RemoteFetcher = require_remote2();
+    var _ = require_protected();
+    var addGitSha = require_add_git_sha();
+    var npm = require_npm();
+    var hashre = /^[a-f0-9]{40,64}$/;
+    var repoUrl = /* @__PURE__ */ __name((h, opts) => h.sshurl && !(h.https && h.auth) && addGitPlus(h.sshurl(opts)) || h.https && addGitPlus(h.https(opts)), "repoUrl");
+    var addGitPlus = /* @__PURE__ */ __name((url) => url && `git+${url}`.replace(/^(git\+)+/, "git+"), "addGitPlus");
+    var checkoutError = /* @__PURE__ */ __name((expected, found) => {
+      const err = new Error(`Commit mismatch: expected SHA ${expected} and cloned HEAD ${found}`);
+      err.code = "EGITCHECKOUT";
+      err.sha = expected;
+      err.head = found;
+      return err;
+    }, "checkoutError");
+    var GitFetcher = class extends Fetcher {
+      static {
+        __name(this, "GitFetcher");
+      }
+      constructor(spec, opts) {
+        super(spec, opts);
+        if (this.opts.integrity) {
+          delete this.opts.integrity;
+          log.warn(`skipping integrity check for git dependency ${this.spec.fetchSpec}`);
+        }
+        this.resolvedRef = null;
+        if (this.spec.hosted) {
+          this.from = this.spec.hosted.shortcut({ noCommittish: false });
+        }
+        if (this.spec.gitCommittish && hashre.test(this.spec.gitCommittish)) {
+          this.resolvedSha = this.spec.gitCommittish;
+          this.resolved = this.spec.hosted ? repoUrl(this.spec.hosted, { noCommittish: false }) : this.spec.rawSpec;
+        } else {
+          this.resolvedSha = "";
+        }
+        this.Arborist = opts.Arborist || null;
+      }
+      // just exposed to make it easier to test all the combinations
+      static repoUrl(hosted, opts) {
+        return repoUrl(hosted, opts);
+      }
+      get types() {
+        return ["git"];
+      }
+      resolve() {
+        if (this.resolved) {
+          return super.resolve();
+        }
+        const h = this.spec.hosted;
+        return h ? this.#resolvedFromHosted(h) : this.#resolvedFromRepo(this.spec.fetchSpec);
+      }
+      // first try https, since that's faster and passphrase-less for
+      // public repos, and supports private repos when auth is provided.
+      // Fall back to SSH to support private repos
+      // NB: we always store the https url in resolved field if auth
+      // is present, otherwise ssh if the hosted type provides it
+      #resolvedFromHosted(hosted) {
+        return this.#resolvedFromRepo(hosted.https && hosted.https()).catch((er) => {
+          if (er instanceof git.errors.GitPathspecError) {
+            throw er;
+          }
+          const ssh = hosted.sshurl && hosted.sshurl();
+          if (!ssh || hosted.auth) {
+            throw er;
+          }
+          return this.#resolvedFromRepo(ssh);
+        });
+      }
+      #resolvedFromRepo(gitRemote) {
+        if (!gitRemote) {
+          return Promise.reject(new Error(`No git url for ${this.spec}`));
+        }
+        const gitRange = this.spec.gitRange;
+        const name = this.spec.name;
+        return git.revs(gitRemote, this.opts).then((remoteRefs) => {
+          return gitRange ? pickManifest({
+            versions: remoteRefs.versions,
+            "dist-tags": remoteRefs["dist-tags"],
+            name
+          }, gitRange, this.opts) : this.spec.gitCommittish ? remoteRefs.refs[this.spec.gitCommittish] || remoteRefs.refs[remoteRefs.shas[this.spec.gitCommittish]] : remoteRefs.refs.HEAD;
+        }).then((revDoc) => {
+          if (!revDoc || !revDoc.sha) {
+            return this.#resolvedFromClone();
+          }
+          this.resolvedRef = revDoc;
+          this.resolvedSha = revDoc.sha;
+          this.#addGitSha(revDoc.sha);
+          return this.resolved;
+        });
+      }
+      #setResolvedWithSha(withSha) {
+        this.resolved = !this.spec.hosted ? withSha : repoUrl(npa(withSha).hosted, { noCommittish: false });
+      }
+      // when we get the git sha, we affix it to our spec to build up
+      // either a git url with a hash, or a tarball download URL
+      #addGitSha(sha) {
+        this.#setResolvedWithSha(addGitSha(this.spec, sha));
+      }
+      #resolvedFromClone() {
+        return this.#clone(() => this.resolved);
+      }
+      #prepareDir(dir) {
+        return this[_.readPackageJson](dir).then((mani) => {
+          const scripts = mani.scripts;
+          if (!mani.workspaces && (!scripts || !(scripts.postinstall || scripts.build || scripts.preinstall || scripts.install || scripts.prepack || scripts.prepare))) {
+            return;
+          }
+          const noPrepare = !process.env._PACOTE_NO_PREPARE_ ? [] : process.env._PACOTE_NO_PREPARE_.split("\n");
+          if (noPrepare.includes(this.resolved)) {
+            log.info("prepare", "skip prepare, already seen", this.resolved);
+            return;
+          }
+          noPrepare.push(this.resolved);
+          return npm(
+            this.npmBin,
+            [].concat(this.npmInstallCmd).concat(this.npmCliConfig),
+            dir,
+            { ...process.env, _PACOTE_NO_PREPARE_: noPrepare.join("\n") },
+            { message: "git dep preparation failed" }
+          );
+        });
+      }
+      [_.tarballFromResolved]() {
+        const stream = new Minipass();
+        stream.resolved = this.resolved;
+        stream.from = this.from;
+        this.#clone((dir) => this.#prepareDir(dir).then(() => new Promise((res, rej) => {
+          if (!this.Arborist) {
+            throw new Error("GitFetcher requires an Arborist constructor to pack a tarball");
+          }
+          const df = new DirFetcher(`file:${dir}`, {
+            ...this.opts,
+            Arborist: this.Arborist,
+            resolved: null,
+            integrity: null
+          });
+          const dirStream = df[_.tarballFromResolved]();
+          dirStream.on("error", rej);
+          dirStream.on("end", res);
+          dirStream.pipe(stream);
+        }))).catch(
+          /* istanbul ignore next: very unlikely and hard to test */
+          (er) => stream.emit("error", er)
+        );
+        return stream;
+      }
+      // clone a git repo into a temp folder (or fetch and unpack if possible)
+      // handler accepts a directory, and returns a promise that resolves
+      // when we're done with it, at which point, cacache deletes it
+      //
+      // TODO: after cloning, create a tarball of the folder, and add to the cache
+      // with cacache.put.stream(), using a key that's deterministic based on the
+      // spec and repo, so that we don't ever clone the same thing multiple times.
+      #clone(handler, tarballOk = true) {
+        const o = { tmpPrefix: "git-clone" };
+        const ref = this.resolvedSha || this.spec.gitCommittish;
+        const h = this.spec.hosted;
+        const resolved = this.resolved;
+        tarballOk = tarballOk && h && resolved === repoUrl(h, { noCommittish: false }) && h.tarball;
+        return cacache2.tmp.withTmp(this.cache, o, async (tmp) => {
+          if (tarballOk) {
+            const nameat = this.spec.name ? `${this.spec.name}@` : "";
+            return new RemoteFetcher(h.tarball({ noCommittish: false }), {
+              ...this.opts,
+              allowGitIgnore: true,
+              pkgid: `git:${nameat}${this.resolved}`,
+              resolved: this.resolved,
+              integrity: null
+              // it'll always be different, if we have one
+            }).extract(tmp).then(() => handler(`${tmp}${this.spec.gitSubdir || ""}`), (er) => {
+              if (er.constructor.name.match(/^Http/)) {
+                return this.#clone(handler, false);
+              } else {
+                throw er;
+              }
+            });
+          }
+          const sha = await (h ? this.#cloneHosted(ref, tmp) : this.#cloneRepo(this.spec.fetchSpec, ref, tmp));
+          if (this.resolvedSha && this.resolvedSha !== sha) {
+            throw checkoutError(this.resolvedSha, sha);
+          }
+          this.resolvedSha = sha;
+          if (!this.resolved) {
+            await this.#addGitSha(sha);
+          }
+          return handler(`${tmp}${this.spec.gitSubdir || ""}`);
+        });
+      }
+      // first try https, since that's faster and passphrase-less for
+      // public repos, and supports private repos when auth is provided.
+      // Fall back to SSH to support private repos
+      // NB: we always store the https url in resolved field if auth
+      // is present, otherwise ssh if the hosted type provides it
+      #cloneHosted(ref, tmp) {
+        const hosted = this.spec.hosted;
+        return this.#cloneRepo(hosted.https({ noCommittish: true }), ref, tmp).catch((er) => {
+          if (er instanceof git.errors.GitPathspecError) {
+            throw er;
+          }
+          const ssh = hosted.sshurl && hosted.sshurl({ noCommittish: true });
+          if (!ssh || hosted.auth) {
+            throw er;
+          }
+          return this.#cloneRepo(ssh, ref, tmp);
+        });
+      }
+      #cloneRepo(repo, ref, tmp) {
+        const { opts, spec } = this;
+        return git.clone(repo, ref, tmp, { ...opts, spec });
+      }
+      manifest() {
+        if (this.package) {
+          return Promise.resolve(this.package);
+        }
+        return this.spec.hosted && this.resolved ? FileFetcher.prototype.manifest.apply(this) : this.#clone((dir) => this[_.readPackageJson](dir).then((mani) => this.package = {
+          ...mani,
+          _resolved: this.resolved,
+          _from: this.from
+        }));
+      }
+      packument() {
+        return FileFetcher.prototype.packument.apply(this);
+      }
+    };
+    module2.exports = GitFetcher;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/__generated__/envelope.js
+var require_envelope = __commonJS({
+  "node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/__generated__/envelope.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Signature = exports2.Envelope = void 0;
+    exports2.Envelope = {
+      fromJSON(object) {
+        return {
+          payload: isSet(object.payload) ? Buffer.from(bytesFromBase64(object.payload)) : Buffer.alloc(0),
+          payloadType: isSet(object.payloadType) ? globalThis.String(object.payloadType) : "",
+          signatures: globalThis.Array.isArray(object?.signatures) ? object.signatures.map((e) => exports2.Signature.fromJSON(e)) : []
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.payload.length !== 0) {
+          obj.payload = base64FromBytes(message.payload);
+        }
+        if (message.payloadType !== "") {
+          obj.payloadType = message.payloadType;
+        }
+        if (message.signatures?.length) {
+          obj.signatures = message.signatures.map((e) => exports2.Signature.toJSON(e));
+        }
+        return obj;
+      }
+    };
+    exports2.Signature = {
+      fromJSON(object) {
+        return {
+          sig: isSet(object.sig) ? Buffer.from(bytesFromBase64(object.sig)) : Buffer.alloc(0),
+          keyid: isSet(object.keyid) ? globalThis.String(object.keyid) : ""
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.sig.length !== 0) {
+          obj.sig = base64FromBytes(message.sig);
+        }
+        if (message.keyid !== "") {
+          obj.keyid = message.keyid;
+        }
+        return obj;
+      }
+    };
+    function bytesFromBase64(b64) {
+      return Uint8Array.from(globalThis.Buffer.from(b64, "base64"));
+    }
+    __name(bytesFromBase64, "bytesFromBase64");
+    function base64FromBytes(arr) {
+      return globalThis.Buffer.from(arr).toString("base64");
+    }
+    __name(base64FromBytes, "base64FromBytes");
+    function isSet(value) {
+      return value !== null && value !== void 0;
+    }
+    __name(isSet, "isSet");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/__generated__/google/protobuf/timestamp.js
+var require_timestamp = __commonJS({
+  "node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/__generated__/google/protobuf/timestamp.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Timestamp = void 0;
+    exports2.Timestamp = {
+      fromJSON(object) {
+        return {
+          seconds: isSet(object.seconds) ? globalThis.String(object.seconds) : "0",
+          nanos: isSet(object.nanos) ? globalThis.Number(object.nanos) : 0
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.seconds !== "0") {
+          obj.seconds = message.seconds;
+        }
+        if (message.nanos !== 0) {
+          obj.nanos = Math.round(message.nanos);
+        }
+        return obj;
+      }
+    };
+    function isSet(value) {
+      return value !== null && value !== void 0;
+    }
+    __name(isSet, "isSet");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_common.js
+var require_sigstore_common = __commonJS({
+  "node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_common.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.TimeRange = exports2.X509CertificateChain = exports2.SubjectAlternativeName = exports2.X509Certificate = exports2.DistinguishedName = exports2.ObjectIdentifierValuePair = exports2.ObjectIdentifier = exports2.PublicKeyIdentifier = exports2.PublicKey = exports2.RFC3161SignedTimestamp = exports2.LogId = exports2.MessageSignature = exports2.HashOutput = exports2.SubjectAlternativeNameType = exports2.PublicKeyDetails = exports2.HashAlgorithm = void 0;
+    exports2.hashAlgorithmFromJSON = hashAlgorithmFromJSON;
+    exports2.hashAlgorithmToJSON = hashAlgorithmToJSON;
+    exports2.publicKeyDetailsFromJSON = publicKeyDetailsFromJSON;
+    exports2.publicKeyDetailsToJSON = publicKeyDetailsToJSON;
+    exports2.subjectAlternativeNameTypeFromJSON = subjectAlternativeNameTypeFromJSON;
+    exports2.subjectAlternativeNameTypeToJSON = subjectAlternativeNameTypeToJSON;
+    var timestamp_1 = require_timestamp();
+    var HashAlgorithm;
+    (function(HashAlgorithm2) {
+      HashAlgorithm2[HashAlgorithm2["HASH_ALGORITHM_UNSPECIFIED"] = 0] = "HASH_ALGORITHM_UNSPECIFIED";
+      HashAlgorithm2[HashAlgorithm2["SHA2_256"] = 1] = "SHA2_256";
+      HashAlgorithm2[HashAlgorithm2["SHA2_384"] = 2] = "SHA2_384";
+      HashAlgorithm2[HashAlgorithm2["SHA2_512"] = 3] = "SHA2_512";
+      HashAlgorithm2[HashAlgorithm2["SHA3_256"] = 4] = "SHA3_256";
+      HashAlgorithm2[HashAlgorithm2["SHA3_384"] = 5] = "SHA3_384";
+    })(HashAlgorithm || (exports2.HashAlgorithm = HashAlgorithm = {}));
+    function hashAlgorithmFromJSON(object) {
+      switch (object) {
+        case 0:
+        case "HASH_ALGORITHM_UNSPECIFIED":
+          return HashAlgorithm.HASH_ALGORITHM_UNSPECIFIED;
+        case 1:
+        case "SHA2_256":
+          return HashAlgorithm.SHA2_256;
+        case 2:
+        case "SHA2_384":
+          return HashAlgorithm.SHA2_384;
+        case 3:
+        case "SHA2_512":
+          return HashAlgorithm.SHA2_512;
+        case 4:
+        case "SHA3_256":
+          return HashAlgorithm.SHA3_256;
+        case 5:
+        case "SHA3_384":
+          return HashAlgorithm.SHA3_384;
+        default:
+          throw new globalThis.Error("Unrecognized enum value " + object + " for enum HashAlgorithm");
+      }
+    }
+    __name(hashAlgorithmFromJSON, "hashAlgorithmFromJSON");
+    function hashAlgorithmToJSON(object) {
+      switch (object) {
+        case HashAlgorithm.HASH_ALGORITHM_UNSPECIFIED:
+          return "HASH_ALGORITHM_UNSPECIFIED";
+        case HashAlgorithm.SHA2_256:
+          return "SHA2_256";
+        case HashAlgorithm.SHA2_384:
+          return "SHA2_384";
+        case HashAlgorithm.SHA2_512:
+          return "SHA2_512";
+        case HashAlgorithm.SHA3_256:
+          return "SHA3_256";
+        case HashAlgorithm.SHA3_384:
+          return "SHA3_384";
+        default:
+          throw new globalThis.Error("Unrecognized enum value " + object + " for enum HashAlgorithm");
+      }
+    }
+    __name(hashAlgorithmToJSON, "hashAlgorithmToJSON");
+    var PublicKeyDetails;
+    (function(PublicKeyDetails2) {
+      PublicKeyDetails2[PublicKeyDetails2["PUBLIC_KEY_DETAILS_UNSPECIFIED"] = 0] = "PUBLIC_KEY_DETAILS_UNSPECIFIED";
+      PublicKeyDetails2[PublicKeyDetails2["PKCS1_RSA_PKCS1V5"] = 1] = "PKCS1_RSA_PKCS1V5";
+      PublicKeyDetails2[PublicKeyDetails2["PKCS1_RSA_PSS"] = 2] = "PKCS1_RSA_PSS";
+      PublicKeyDetails2[PublicKeyDetails2["PKIX_RSA_PKCS1V5"] = 3] = "PKIX_RSA_PKCS1V5";
+      PublicKeyDetails2[PublicKeyDetails2["PKIX_RSA_PSS"] = 4] = "PKIX_RSA_PSS";
+      PublicKeyDetails2[PublicKeyDetails2["PKIX_RSA_PKCS1V15_2048_SHA256"] = 9] = "PKIX_RSA_PKCS1V15_2048_SHA256";
+      PublicKeyDetails2[PublicKeyDetails2["PKIX_RSA_PKCS1V15_3072_SHA256"] = 10] = "PKIX_RSA_PKCS1V15_3072_SHA256";
+      PublicKeyDetails2[PublicKeyDetails2["PKIX_RSA_PKCS1V15_4096_SHA256"] = 11] = "PKIX_RSA_PKCS1V15_4096_SHA256";
+      PublicKeyDetails2[PublicKeyDetails2["PKIX_RSA_PSS_2048_SHA256"] = 16] = "PKIX_RSA_PSS_2048_SHA256";
+      PublicKeyDetails2[PublicKeyDetails2["PKIX_RSA_PSS_3072_SHA256"] = 17] = "PKIX_RSA_PSS_3072_SHA256";
+      PublicKeyDetails2[PublicKeyDetails2["PKIX_RSA_PSS_4096_SHA256"] = 18] = "PKIX_RSA_PSS_4096_SHA256";
+      PublicKeyDetails2[PublicKeyDetails2["PKIX_ECDSA_P256_HMAC_SHA_256"] = 6] = "PKIX_ECDSA_P256_HMAC_SHA_256";
+      PublicKeyDetails2[PublicKeyDetails2["PKIX_ECDSA_P256_SHA_256"] = 5] = "PKIX_ECDSA_P256_SHA_256";
+      PublicKeyDetails2[PublicKeyDetails2["PKIX_ECDSA_P384_SHA_384"] = 12] = "PKIX_ECDSA_P384_SHA_384";
+      PublicKeyDetails2[PublicKeyDetails2["PKIX_ECDSA_P521_SHA_512"] = 13] = "PKIX_ECDSA_P521_SHA_512";
+      PublicKeyDetails2[PublicKeyDetails2["PKIX_ED25519"] = 7] = "PKIX_ED25519";
+      PublicKeyDetails2[PublicKeyDetails2["PKIX_ED25519_PH"] = 8] = "PKIX_ED25519_PH";
+      PublicKeyDetails2[PublicKeyDetails2["PKIX_ECDSA_P384_SHA_256"] = 19] = "PKIX_ECDSA_P384_SHA_256";
+      PublicKeyDetails2[PublicKeyDetails2["PKIX_ECDSA_P521_SHA_256"] = 20] = "PKIX_ECDSA_P521_SHA_256";
+      PublicKeyDetails2[PublicKeyDetails2["LMS_SHA256"] = 14] = "LMS_SHA256";
+      PublicKeyDetails2[PublicKeyDetails2["LMOTS_SHA256"] = 15] = "LMOTS_SHA256";
+      PublicKeyDetails2[PublicKeyDetails2["ML_DSA_44"] = 23] = "ML_DSA_44";
+      PublicKeyDetails2[PublicKeyDetails2["ML_DSA_65"] = 21] = "ML_DSA_65";
+      PublicKeyDetails2[PublicKeyDetails2["ML_DSA_87"] = 22] = "ML_DSA_87";
+    })(PublicKeyDetails || (exports2.PublicKeyDetails = PublicKeyDetails = {}));
+    function publicKeyDetailsFromJSON(object) {
+      switch (object) {
+        case 0:
+        case "PUBLIC_KEY_DETAILS_UNSPECIFIED":
+          return PublicKeyDetails.PUBLIC_KEY_DETAILS_UNSPECIFIED;
+        case 1:
+        case "PKCS1_RSA_PKCS1V5":
+          return PublicKeyDetails.PKCS1_RSA_PKCS1V5;
+        case 2:
+        case "PKCS1_RSA_PSS":
+          return PublicKeyDetails.PKCS1_RSA_PSS;
+        case 3:
+        case "PKIX_RSA_PKCS1V5":
+          return PublicKeyDetails.PKIX_RSA_PKCS1V5;
+        case 4:
+        case "PKIX_RSA_PSS":
+          return PublicKeyDetails.PKIX_RSA_PSS;
+        case 9:
+        case "PKIX_RSA_PKCS1V15_2048_SHA256":
+          return PublicKeyDetails.PKIX_RSA_PKCS1V15_2048_SHA256;
+        case 10:
+        case "PKIX_RSA_PKCS1V15_3072_SHA256":
+          return PublicKeyDetails.PKIX_RSA_PKCS1V15_3072_SHA256;
+        case 11:
+        case "PKIX_RSA_PKCS1V15_4096_SHA256":
+          return PublicKeyDetails.PKIX_RSA_PKCS1V15_4096_SHA256;
+        case 16:
+        case "PKIX_RSA_PSS_2048_SHA256":
+          return PublicKeyDetails.PKIX_RSA_PSS_2048_SHA256;
+        case 17:
+        case "PKIX_RSA_PSS_3072_SHA256":
+          return PublicKeyDetails.PKIX_RSA_PSS_3072_SHA256;
+        case 18:
+        case "PKIX_RSA_PSS_4096_SHA256":
+          return PublicKeyDetails.PKIX_RSA_PSS_4096_SHA256;
+        case 6:
+        case "PKIX_ECDSA_P256_HMAC_SHA_256":
+          return PublicKeyDetails.PKIX_ECDSA_P256_HMAC_SHA_256;
+        case 5:
+        case "PKIX_ECDSA_P256_SHA_256":
+          return PublicKeyDetails.PKIX_ECDSA_P256_SHA_256;
+        case 12:
+        case "PKIX_ECDSA_P384_SHA_384":
+          return PublicKeyDetails.PKIX_ECDSA_P384_SHA_384;
+        case 13:
+        case "PKIX_ECDSA_P521_SHA_512":
+          return PublicKeyDetails.PKIX_ECDSA_P521_SHA_512;
+        case 7:
+        case "PKIX_ED25519":
+          return PublicKeyDetails.PKIX_ED25519;
+        case 8:
+        case "PKIX_ED25519_PH":
+          return PublicKeyDetails.PKIX_ED25519_PH;
+        case 19:
+        case "PKIX_ECDSA_P384_SHA_256":
+          return PublicKeyDetails.PKIX_ECDSA_P384_SHA_256;
+        case 20:
+        case "PKIX_ECDSA_P521_SHA_256":
+          return PublicKeyDetails.PKIX_ECDSA_P521_SHA_256;
+        case 14:
+        case "LMS_SHA256":
+          return PublicKeyDetails.LMS_SHA256;
+        case 15:
+        case "LMOTS_SHA256":
+          return PublicKeyDetails.LMOTS_SHA256;
+        case 23:
+        case "ML_DSA_44":
+          return PublicKeyDetails.ML_DSA_44;
+        case 21:
+        case "ML_DSA_65":
+          return PublicKeyDetails.ML_DSA_65;
+        case 22:
+        case "ML_DSA_87":
+          return PublicKeyDetails.ML_DSA_87;
+        default:
+          throw new globalThis.Error("Unrecognized enum value " + object + " for enum PublicKeyDetails");
+      }
+    }
+    __name(publicKeyDetailsFromJSON, "publicKeyDetailsFromJSON");
+    function publicKeyDetailsToJSON(object) {
+      switch (object) {
+        case PublicKeyDetails.PUBLIC_KEY_DETAILS_UNSPECIFIED:
+          return "PUBLIC_KEY_DETAILS_UNSPECIFIED";
+        case PublicKeyDetails.PKCS1_RSA_PKCS1V5:
+          return "PKCS1_RSA_PKCS1V5";
+        case PublicKeyDetails.PKCS1_RSA_PSS:
+          return "PKCS1_RSA_PSS";
+        case PublicKeyDetails.PKIX_RSA_PKCS1V5:
+          return "PKIX_RSA_PKCS1V5";
+        case PublicKeyDetails.PKIX_RSA_PSS:
+          return "PKIX_RSA_PSS";
+        case PublicKeyDetails.PKIX_RSA_PKCS1V15_2048_SHA256:
+          return "PKIX_RSA_PKCS1V15_2048_SHA256";
+        case PublicKeyDetails.PKIX_RSA_PKCS1V15_3072_SHA256:
+          return "PKIX_RSA_PKCS1V15_3072_SHA256";
+        case PublicKeyDetails.PKIX_RSA_PKCS1V15_4096_SHA256:
+          return "PKIX_RSA_PKCS1V15_4096_SHA256";
+        case PublicKeyDetails.PKIX_RSA_PSS_2048_SHA256:
+          return "PKIX_RSA_PSS_2048_SHA256";
+        case PublicKeyDetails.PKIX_RSA_PSS_3072_SHA256:
+          return "PKIX_RSA_PSS_3072_SHA256";
+        case PublicKeyDetails.PKIX_RSA_PSS_4096_SHA256:
+          return "PKIX_RSA_PSS_4096_SHA256";
+        case PublicKeyDetails.PKIX_ECDSA_P256_HMAC_SHA_256:
+          return "PKIX_ECDSA_P256_HMAC_SHA_256";
+        case PublicKeyDetails.PKIX_ECDSA_P256_SHA_256:
+          return "PKIX_ECDSA_P256_SHA_256";
+        case PublicKeyDetails.PKIX_ECDSA_P384_SHA_384:
+          return "PKIX_ECDSA_P384_SHA_384";
+        case PublicKeyDetails.PKIX_ECDSA_P521_SHA_512:
+          return "PKIX_ECDSA_P521_SHA_512";
+        case PublicKeyDetails.PKIX_ED25519:
+          return "PKIX_ED25519";
+        case PublicKeyDetails.PKIX_ED25519_PH:
+          return "PKIX_ED25519_PH";
+        case PublicKeyDetails.PKIX_ECDSA_P384_SHA_256:
+          return "PKIX_ECDSA_P384_SHA_256";
+        case PublicKeyDetails.PKIX_ECDSA_P521_SHA_256:
+          return "PKIX_ECDSA_P521_SHA_256";
+        case PublicKeyDetails.LMS_SHA256:
+          return "LMS_SHA256";
+        case PublicKeyDetails.LMOTS_SHA256:
+          return "LMOTS_SHA256";
+        case PublicKeyDetails.ML_DSA_44:
+          return "ML_DSA_44";
+        case PublicKeyDetails.ML_DSA_65:
+          return "ML_DSA_65";
+        case PublicKeyDetails.ML_DSA_87:
+          return "ML_DSA_87";
+        default:
+          throw new globalThis.Error("Unrecognized enum value " + object + " for enum PublicKeyDetails");
+      }
+    }
+    __name(publicKeyDetailsToJSON, "publicKeyDetailsToJSON");
+    var SubjectAlternativeNameType;
+    (function(SubjectAlternativeNameType2) {
+      SubjectAlternativeNameType2[SubjectAlternativeNameType2["SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED"] = 0] = "SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED";
+      SubjectAlternativeNameType2[SubjectAlternativeNameType2["EMAIL"] = 1] = "EMAIL";
+      SubjectAlternativeNameType2[SubjectAlternativeNameType2["URI"] = 2] = "URI";
+      SubjectAlternativeNameType2[SubjectAlternativeNameType2["OTHER_NAME"] = 3] = "OTHER_NAME";
+    })(SubjectAlternativeNameType || (exports2.SubjectAlternativeNameType = SubjectAlternativeNameType = {}));
+    function subjectAlternativeNameTypeFromJSON(object) {
+      switch (object) {
+        case 0:
+        case "SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED":
+          return SubjectAlternativeNameType.SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED;
+        case 1:
+        case "EMAIL":
+          return SubjectAlternativeNameType.EMAIL;
+        case 2:
+        case "URI":
+          return SubjectAlternativeNameType.URI;
+        case 3:
+        case "OTHER_NAME":
+          return SubjectAlternativeNameType.OTHER_NAME;
+        default:
+          throw new globalThis.Error("Unrecognized enum value " + object + " for enum SubjectAlternativeNameType");
+      }
+    }
+    __name(subjectAlternativeNameTypeFromJSON, "subjectAlternativeNameTypeFromJSON");
+    function subjectAlternativeNameTypeToJSON(object) {
+      switch (object) {
+        case SubjectAlternativeNameType.SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED:
+          return "SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED";
+        case SubjectAlternativeNameType.EMAIL:
+          return "EMAIL";
+        case SubjectAlternativeNameType.URI:
+          return "URI";
+        case SubjectAlternativeNameType.OTHER_NAME:
+          return "OTHER_NAME";
+        default:
+          throw new globalThis.Error("Unrecognized enum value " + object + " for enum SubjectAlternativeNameType");
+      }
+    }
+    __name(subjectAlternativeNameTypeToJSON, "subjectAlternativeNameTypeToJSON");
+    exports2.HashOutput = {
+      fromJSON(object) {
+        return {
+          algorithm: isSet(object.algorithm) ? hashAlgorithmFromJSON(object.algorithm) : 0,
+          digest: isSet(object.digest) ? Buffer.from(bytesFromBase64(object.digest)) : Buffer.alloc(0)
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.algorithm !== 0) {
+          obj.algorithm = hashAlgorithmToJSON(message.algorithm);
+        }
+        if (message.digest.length !== 0) {
+          obj.digest = base64FromBytes(message.digest);
+        }
+        return obj;
+      }
+    };
+    exports2.MessageSignature = {
+      fromJSON(object) {
+        return {
+          messageDigest: isSet(object.messageDigest) ? exports2.HashOutput.fromJSON(object.messageDigest) : void 0,
+          signature: isSet(object.signature) ? Buffer.from(bytesFromBase64(object.signature)) : Buffer.alloc(0)
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.messageDigest !== void 0) {
+          obj.messageDigest = exports2.HashOutput.toJSON(message.messageDigest);
+        }
+        if (message.signature.length !== 0) {
+          obj.signature = base64FromBytes(message.signature);
+        }
+        return obj;
+      }
+    };
+    exports2.LogId = {
+      fromJSON(object) {
+        return { keyId: isSet(object.keyId) ? Buffer.from(bytesFromBase64(object.keyId)) : Buffer.alloc(0) };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.keyId.length !== 0) {
+          obj.keyId = base64FromBytes(message.keyId);
+        }
+        return obj;
+      }
+    };
+    exports2.RFC3161SignedTimestamp = {
+      fromJSON(object) {
+        return {
+          signedTimestamp: isSet(object.signedTimestamp) ? Buffer.from(bytesFromBase64(object.signedTimestamp)) : Buffer.alloc(0)
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.signedTimestamp.length !== 0) {
+          obj.signedTimestamp = base64FromBytes(message.signedTimestamp);
+        }
+        return obj;
+      }
+    };
+    exports2.PublicKey = {
+      fromJSON(object) {
+        return {
+          rawBytes: isSet(object.rawBytes) ? Buffer.from(bytesFromBase64(object.rawBytes)) : void 0,
+          keyDetails: isSet(object.keyDetails) ? publicKeyDetailsFromJSON(object.keyDetails) : 0,
+          validFor: isSet(object.validFor) ? exports2.TimeRange.fromJSON(object.validFor) : void 0
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.rawBytes !== void 0) {
+          obj.rawBytes = base64FromBytes(message.rawBytes);
+        }
+        if (message.keyDetails !== 0) {
+          obj.keyDetails = publicKeyDetailsToJSON(message.keyDetails);
+        }
+        if (message.validFor !== void 0) {
+          obj.validFor = exports2.TimeRange.toJSON(message.validFor);
+        }
+        return obj;
+      }
+    };
+    exports2.PublicKeyIdentifier = {
+      fromJSON(object) {
+        return { hint: isSet(object.hint) ? globalThis.String(object.hint) : "" };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.hint !== "") {
+          obj.hint = message.hint;
+        }
+        return obj;
+      }
+    };
+    exports2.ObjectIdentifier = {
+      fromJSON(object) {
+        return { id: globalThis.Array.isArray(object?.id) ? object.id.map((e) => globalThis.Number(e)) : [] };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.id?.length) {
+          obj.id = message.id.map((e) => Math.round(e));
+        }
+        return obj;
+      }
+    };
+    exports2.ObjectIdentifierValuePair = {
+      fromJSON(object) {
+        return {
+          oid: isSet(object.oid) ? exports2.ObjectIdentifier.fromJSON(object.oid) : void 0,
+          value: isSet(object.value) ? Buffer.from(bytesFromBase64(object.value)) : Buffer.alloc(0)
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.oid !== void 0) {
+          obj.oid = exports2.ObjectIdentifier.toJSON(message.oid);
+        }
+        if (message.value.length !== 0) {
+          obj.value = base64FromBytes(message.value);
+        }
+        return obj;
+      }
+    };
+    exports2.DistinguishedName = {
+      fromJSON(object) {
+        return {
+          organization: isSet(object.organization) ? globalThis.String(object.organization) : "",
+          commonName: isSet(object.commonName) ? globalThis.String(object.commonName) : ""
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.organization !== "") {
+          obj.organization = message.organization;
+        }
+        if (message.commonName !== "") {
+          obj.commonName = message.commonName;
+        }
+        return obj;
+      }
+    };
+    exports2.X509Certificate = {
+      fromJSON(object) {
+        return { rawBytes: isSet(object.rawBytes) ? Buffer.from(bytesFromBase64(object.rawBytes)) : Buffer.alloc(0) };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.rawBytes.length !== 0) {
+          obj.rawBytes = base64FromBytes(message.rawBytes);
+        }
+        return obj;
+      }
+    };
+    exports2.SubjectAlternativeName = {
+      fromJSON(object) {
+        return {
+          type: isSet(object.type) ? subjectAlternativeNameTypeFromJSON(object.type) : 0,
+          identity: isSet(object.regexp) ? { $case: "regexp", regexp: globalThis.String(object.regexp) } : isSet(object.value) ? { $case: "value", value: globalThis.String(object.value) } : void 0
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.type !== 0) {
+          obj.type = subjectAlternativeNameTypeToJSON(message.type);
+        }
+        if (message.identity?.$case === "regexp") {
+          obj.regexp = message.identity.regexp;
+        } else if (message.identity?.$case === "value") {
+          obj.value = message.identity.value;
+        }
+        return obj;
+      }
+    };
+    exports2.X509CertificateChain = {
+      fromJSON(object) {
+        return {
+          certificates: globalThis.Array.isArray(object?.certificates) ? object.certificates.map((e) => exports2.X509Certificate.fromJSON(e)) : []
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.certificates?.length) {
+          obj.certificates = message.certificates.map((e) => exports2.X509Certificate.toJSON(e));
+        }
+        return obj;
+      }
+    };
+    exports2.TimeRange = {
+      fromJSON(object) {
+        return {
+          start: isSet(object.start) ? fromJsonTimestamp(object.start) : void 0,
+          end: isSet(object.end) ? fromJsonTimestamp(object.end) : void 0
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.start !== void 0) {
+          obj.start = message.start.toISOString();
+        }
+        if (message.end !== void 0) {
+          obj.end = message.end.toISOString();
+        }
+        return obj;
+      }
+    };
+    function bytesFromBase64(b64) {
+      return Uint8Array.from(globalThis.Buffer.from(b64, "base64"));
+    }
+    __name(bytesFromBase64, "bytesFromBase64");
+    function base64FromBytes(arr) {
+      return globalThis.Buffer.from(arr).toString("base64");
+    }
+    __name(base64FromBytes, "base64FromBytes");
+    function fromTimestamp(t) {
+      let millis = (globalThis.Number(t.seconds) || 0) * 1e3;
+      millis += (t.nanos || 0) / 1e6;
+      return new globalThis.Date(millis);
+    }
+    __name(fromTimestamp, "fromTimestamp");
+    function fromJsonTimestamp(o) {
+      if (o instanceof globalThis.Date) {
+        return o;
+      } else if (typeof o === "string") {
+        return new globalThis.Date(o);
+      } else {
+        return fromTimestamp(timestamp_1.Timestamp.fromJSON(o));
+      }
+    }
+    __name(fromJsonTimestamp, "fromJsonTimestamp");
+    function isSet(value) {
+      return value !== null && value !== void 0;
+    }
+    __name(isSet, "isSet");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_rekor.js
+var require_sigstore_rekor = __commonJS({
+  "node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_rekor.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.TransparencyLogEntry = exports2.InclusionPromise = exports2.InclusionProof = exports2.Checkpoint = exports2.KindVersion = void 0;
+    var sigstore_common_1 = require_sigstore_common();
+    exports2.KindVersion = {
+      fromJSON(object) {
+        return {
+          kind: isSet(object.kind) ? globalThis.String(object.kind) : "",
+          version: isSet(object.version) ? globalThis.String(object.version) : ""
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.kind !== "") {
+          obj.kind = message.kind;
+        }
+        if (message.version !== "") {
+          obj.version = message.version;
+        }
+        return obj;
+      }
+    };
+    exports2.Checkpoint = {
+      fromJSON(object) {
+        return { envelope: isSet(object.envelope) ? globalThis.String(object.envelope) : "" };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.envelope !== "") {
+          obj.envelope = message.envelope;
+        }
+        return obj;
+      }
+    };
+    exports2.InclusionProof = {
+      fromJSON(object) {
+        return {
+          logIndex: isSet(object.logIndex) ? globalThis.String(object.logIndex) : "0",
+          rootHash: isSet(object.rootHash) ? Buffer.from(bytesFromBase64(object.rootHash)) : Buffer.alloc(0),
+          treeSize: isSet(object.treeSize) ? globalThis.String(object.treeSize) : "0",
+          hashes: globalThis.Array.isArray(object?.hashes) ? object.hashes.map((e) => Buffer.from(bytesFromBase64(e))) : [],
+          checkpoint: isSet(object.checkpoint) ? exports2.Checkpoint.fromJSON(object.checkpoint) : void 0
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.logIndex !== "0") {
+          obj.logIndex = message.logIndex;
+        }
+        if (message.rootHash.length !== 0) {
+          obj.rootHash = base64FromBytes(message.rootHash);
+        }
+        if (message.treeSize !== "0") {
+          obj.treeSize = message.treeSize;
+        }
+        if (message.hashes?.length) {
+          obj.hashes = message.hashes.map((e) => base64FromBytes(e));
+        }
+        if (message.checkpoint !== void 0) {
+          obj.checkpoint = exports2.Checkpoint.toJSON(message.checkpoint);
+        }
+        return obj;
+      }
+    };
+    exports2.InclusionPromise = {
+      fromJSON(object) {
+        return {
+          signedEntryTimestamp: isSet(object.signedEntryTimestamp) ? Buffer.from(bytesFromBase64(object.signedEntryTimestamp)) : Buffer.alloc(0)
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.signedEntryTimestamp.length !== 0) {
+          obj.signedEntryTimestamp = base64FromBytes(message.signedEntryTimestamp);
+        }
+        return obj;
+      }
+    };
+    exports2.TransparencyLogEntry = {
+      fromJSON(object) {
+        return {
+          logIndex: isSet(object.logIndex) ? globalThis.String(object.logIndex) : "0",
+          logId: isSet(object.logId) ? sigstore_common_1.LogId.fromJSON(object.logId) : void 0,
+          kindVersion: isSet(object.kindVersion) ? exports2.KindVersion.fromJSON(object.kindVersion) : void 0,
+          integratedTime: isSet(object.integratedTime) ? globalThis.String(object.integratedTime) : "0",
+          inclusionPromise: isSet(object.inclusionPromise) ? exports2.InclusionPromise.fromJSON(object.inclusionPromise) : void 0,
+          inclusionProof: isSet(object.inclusionProof) ? exports2.InclusionProof.fromJSON(object.inclusionProof) : void 0,
+          canonicalizedBody: isSet(object.canonicalizedBody) ? Buffer.from(bytesFromBase64(object.canonicalizedBody)) : Buffer.alloc(0)
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.logIndex !== "0") {
+          obj.logIndex = message.logIndex;
+        }
+        if (message.logId !== void 0) {
+          obj.logId = sigstore_common_1.LogId.toJSON(message.logId);
+        }
+        if (message.kindVersion !== void 0) {
+          obj.kindVersion = exports2.KindVersion.toJSON(message.kindVersion);
+        }
+        if (message.integratedTime !== "0") {
+          obj.integratedTime = message.integratedTime;
+        }
+        if (message.inclusionPromise !== void 0) {
+          obj.inclusionPromise = exports2.InclusionPromise.toJSON(message.inclusionPromise);
+        }
+        if (message.inclusionProof !== void 0) {
+          obj.inclusionProof = exports2.InclusionProof.toJSON(message.inclusionProof);
+        }
+        if (message.canonicalizedBody.length !== 0) {
+          obj.canonicalizedBody = base64FromBytes(message.canonicalizedBody);
+        }
+        return obj;
+      }
+    };
+    function bytesFromBase64(b64) {
+      return Uint8Array.from(globalThis.Buffer.from(b64, "base64"));
+    }
+    __name(bytesFromBase64, "bytesFromBase64");
+    function base64FromBytes(arr) {
+      return globalThis.Buffer.from(arr).toString("base64");
+    }
+    __name(base64FromBytes, "base64FromBytes");
+    function isSet(value) {
+      return value !== null && value !== void 0;
+    }
+    __name(isSet, "isSet");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_bundle.js
+var require_sigstore_bundle = __commonJS({
+  "node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_bundle.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Bundle = exports2.VerificationMaterial = exports2.TimestampVerificationData = void 0;
+    var envelope_1 = require_envelope();
+    var sigstore_common_1 = require_sigstore_common();
+    var sigstore_rekor_1 = require_sigstore_rekor();
+    exports2.TimestampVerificationData = {
+      fromJSON(object) {
+        return {
+          rfc3161Timestamps: globalThis.Array.isArray(object?.rfc3161Timestamps) ? object.rfc3161Timestamps.map((e) => sigstore_common_1.RFC3161SignedTimestamp.fromJSON(e)) : []
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.rfc3161Timestamps?.length) {
+          obj.rfc3161Timestamps = message.rfc3161Timestamps.map((e) => sigstore_common_1.RFC3161SignedTimestamp.toJSON(e));
+        }
+        return obj;
+      }
+    };
+    exports2.VerificationMaterial = {
+      fromJSON(object) {
+        return {
+          content: isSet(object.publicKey) ? { $case: "publicKey", publicKey: sigstore_common_1.PublicKeyIdentifier.fromJSON(object.publicKey) } : isSet(object.x509CertificateChain) ? {
+            $case: "x509CertificateChain",
+            x509CertificateChain: sigstore_common_1.X509CertificateChain.fromJSON(object.x509CertificateChain)
+          } : isSet(object.certificate) ? { $case: "certificate", certificate: sigstore_common_1.X509Certificate.fromJSON(object.certificate) } : void 0,
+          tlogEntries: globalThis.Array.isArray(object?.tlogEntries) ? object.tlogEntries.map((e) => sigstore_rekor_1.TransparencyLogEntry.fromJSON(e)) : [],
+          timestampVerificationData: isSet(object.timestampVerificationData) ? exports2.TimestampVerificationData.fromJSON(object.timestampVerificationData) : void 0
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.content?.$case === "publicKey") {
+          obj.publicKey = sigstore_common_1.PublicKeyIdentifier.toJSON(message.content.publicKey);
+        } else if (message.content?.$case === "x509CertificateChain") {
+          obj.x509CertificateChain = sigstore_common_1.X509CertificateChain.toJSON(message.content.x509CertificateChain);
+        } else if (message.content?.$case === "certificate") {
+          obj.certificate = sigstore_common_1.X509Certificate.toJSON(message.content.certificate);
+        }
+        if (message.tlogEntries?.length) {
+          obj.tlogEntries = message.tlogEntries.map((e) => sigstore_rekor_1.TransparencyLogEntry.toJSON(e));
+        }
+        if (message.timestampVerificationData !== void 0) {
+          obj.timestampVerificationData = exports2.TimestampVerificationData.toJSON(message.timestampVerificationData);
+        }
+        return obj;
+      }
+    };
+    exports2.Bundle = {
+      fromJSON(object) {
+        return {
+          mediaType: isSet(object.mediaType) ? globalThis.String(object.mediaType) : "",
+          verificationMaterial: isSet(object.verificationMaterial) ? exports2.VerificationMaterial.fromJSON(object.verificationMaterial) : void 0,
+          content: isSet(object.messageSignature) ? { $case: "messageSignature", messageSignature: sigstore_common_1.MessageSignature.fromJSON(object.messageSignature) } : isSet(object.dsseEnvelope) ? { $case: "dsseEnvelope", dsseEnvelope: envelope_1.Envelope.fromJSON(object.dsseEnvelope) } : void 0
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.mediaType !== "") {
+          obj.mediaType = message.mediaType;
+        }
+        if (message.verificationMaterial !== void 0) {
+          obj.verificationMaterial = exports2.VerificationMaterial.toJSON(message.verificationMaterial);
+        }
+        if (message.content?.$case === "messageSignature") {
+          obj.messageSignature = sigstore_common_1.MessageSignature.toJSON(message.content.messageSignature);
+        } else if (message.content?.$case === "dsseEnvelope") {
+          obj.dsseEnvelope = envelope_1.Envelope.toJSON(message.content.dsseEnvelope);
+        }
+        return obj;
+      }
+    };
+    function isSet(value) {
+      return value !== null && value !== void 0;
+    }
+    __name(isSet, "isSet");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_trustroot.js
+var require_sigstore_trustroot = __commonJS({
+  "node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_trustroot.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.ClientTrustConfig = exports2.ServiceConfiguration = exports2.Service = exports2.SigningConfig = exports2.TrustedRoot = exports2.CertificateAuthority = exports2.TransparencyLogInstance = exports2.ServiceSelector = void 0;
+    exports2.serviceSelectorFromJSON = serviceSelectorFromJSON;
+    exports2.serviceSelectorToJSON = serviceSelectorToJSON;
+    var sigstore_common_1 = require_sigstore_common();
+    var ServiceSelector;
+    (function(ServiceSelector2) {
+      ServiceSelector2[ServiceSelector2["SERVICE_SELECTOR_UNDEFINED"] = 0] = "SERVICE_SELECTOR_UNDEFINED";
+      ServiceSelector2[ServiceSelector2["ALL"] = 1] = "ALL";
+      ServiceSelector2[ServiceSelector2["ANY"] = 2] = "ANY";
+      ServiceSelector2[ServiceSelector2["EXACT"] = 3] = "EXACT";
+    })(ServiceSelector || (exports2.ServiceSelector = ServiceSelector = {}));
+    function serviceSelectorFromJSON(object) {
+      switch (object) {
+        case 0:
+        case "SERVICE_SELECTOR_UNDEFINED":
+          return ServiceSelector.SERVICE_SELECTOR_UNDEFINED;
+        case 1:
+        case "ALL":
+          return ServiceSelector.ALL;
+        case 2:
+        case "ANY":
+          return ServiceSelector.ANY;
+        case 3:
+        case "EXACT":
+          return ServiceSelector.EXACT;
+        default:
+          throw new globalThis.Error("Unrecognized enum value " + object + " for enum ServiceSelector");
+      }
+    }
+    __name(serviceSelectorFromJSON, "serviceSelectorFromJSON");
+    function serviceSelectorToJSON(object) {
+      switch (object) {
+        case ServiceSelector.SERVICE_SELECTOR_UNDEFINED:
+          return "SERVICE_SELECTOR_UNDEFINED";
+        case ServiceSelector.ALL:
+          return "ALL";
+        case ServiceSelector.ANY:
+          return "ANY";
+        case ServiceSelector.EXACT:
+          return "EXACT";
+        default:
+          throw new globalThis.Error("Unrecognized enum value " + object + " for enum ServiceSelector");
+      }
+    }
+    __name(serviceSelectorToJSON, "serviceSelectorToJSON");
+    exports2.TransparencyLogInstance = {
+      fromJSON(object) {
+        return {
+          baseUrl: isSet(object.baseUrl) ? globalThis.String(object.baseUrl) : "",
+          hashAlgorithm: isSet(object.hashAlgorithm) ? (0, sigstore_common_1.hashAlgorithmFromJSON)(object.hashAlgorithm) : 0,
+          publicKey: isSet(object.publicKey) ? sigstore_common_1.PublicKey.fromJSON(object.publicKey) : void 0,
+          logId: isSet(object.logId) ? sigstore_common_1.LogId.fromJSON(object.logId) : void 0,
+          checkpointKeyId: isSet(object.checkpointKeyId) ? sigstore_common_1.LogId.fromJSON(object.checkpointKeyId) : void 0,
+          operator: isSet(object.operator) ? globalThis.String(object.operator) : ""
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.baseUrl !== "") {
+          obj.baseUrl = message.baseUrl;
+        }
+        if (message.hashAlgorithm !== 0) {
+          obj.hashAlgorithm = (0, sigstore_common_1.hashAlgorithmToJSON)(message.hashAlgorithm);
+        }
+        if (message.publicKey !== void 0) {
+          obj.publicKey = sigstore_common_1.PublicKey.toJSON(message.publicKey);
+        }
+        if (message.logId !== void 0) {
+          obj.logId = sigstore_common_1.LogId.toJSON(message.logId);
+        }
+        if (message.checkpointKeyId !== void 0) {
+          obj.checkpointKeyId = sigstore_common_1.LogId.toJSON(message.checkpointKeyId);
+        }
+        if (message.operator !== "") {
+          obj.operator = message.operator;
+        }
+        return obj;
+      }
+    };
+    exports2.CertificateAuthority = {
+      fromJSON(object) {
+        return {
+          subject: isSet(object.subject) ? sigstore_common_1.DistinguishedName.fromJSON(object.subject) : void 0,
+          uri: isSet(object.uri) ? globalThis.String(object.uri) : "",
+          certChain: isSet(object.certChain) ? sigstore_common_1.X509CertificateChain.fromJSON(object.certChain) : void 0,
+          validFor: isSet(object.validFor) ? sigstore_common_1.TimeRange.fromJSON(object.validFor) : void 0,
+          operator: isSet(object.operator) ? globalThis.String(object.operator) : ""
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.subject !== void 0) {
+          obj.subject = sigstore_common_1.DistinguishedName.toJSON(message.subject);
+        }
+        if (message.uri !== "") {
+          obj.uri = message.uri;
+        }
+        if (message.certChain !== void 0) {
+          obj.certChain = sigstore_common_1.X509CertificateChain.toJSON(message.certChain);
+        }
+        if (message.validFor !== void 0) {
+          obj.validFor = sigstore_common_1.TimeRange.toJSON(message.validFor);
+        }
+        if (message.operator !== "") {
+          obj.operator = message.operator;
+        }
+        return obj;
+      }
+    };
+    exports2.TrustedRoot = {
+      fromJSON(object) {
+        return {
+          mediaType: isSet(object.mediaType) ? globalThis.String(object.mediaType) : "",
+          tlogs: globalThis.Array.isArray(object?.tlogs) ? object.tlogs.map((e) => exports2.TransparencyLogInstance.fromJSON(e)) : [],
+          certificateAuthorities: globalThis.Array.isArray(object?.certificateAuthorities) ? object.certificateAuthorities.map((e) => exports2.CertificateAuthority.fromJSON(e)) : [],
+          ctlogs: globalThis.Array.isArray(object?.ctlogs) ? object.ctlogs.map((e) => exports2.TransparencyLogInstance.fromJSON(e)) : [],
+          timestampAuthorities: globalThis.Array.isArray(object?.timestampAuthorities) ? object.timestampAuthorities.map((e) => exports2.CertificateAuthority.fromJSON(e)) : []
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.mediaType !== "") {
+          obj.mediaType = message.mediaType;
+        }
+        if (message.tlogs?.length) {
+          obj.tlogs = message.tlogs.map((e) => exports2.TransparencyLogInstance.toJSON(e));
+        }
+        if (message.certificateAuthorities?.length) {
+          obj.certificateAuthorities = message.certificateAuthorities.map((e) => exports2.CertificateAuthority.toJSON(e));
+        }
+        if (message.ctlogs?.length) {
+          obj.ctlogs = message.ctlogs.map((e) => exports2.TransparencyLogInstance.toJSON(e));
+        }
+        if (message.timestampAuthorities?.length) {
+          obj.timestampAuthorities = message.timestampAuthorities.map((e) => exports2.CertificateAuthority.toJSON(e));
+        }
+        return obj;
+      }
+    };
+    exports2.SigningConfig = {
+      fromJSON(object) {
+        return {
+          mediaType: isSet(object.mediaType) ? globalThis.String(object.mediaType) : "",
+          caUrls: globalThis.Array.isArray(object?.caUrls) ? object.caUrls.map((e) => exports2.Service.fromJSON(e)) : [],
+          oidcUrls: globalThis.Array.isArray(object?.oidcUrls) ? object.oidcUrls.map((e) => exports2.Service.fromJSON(e)) : [],
+          rekorTlogUrls: globalThis.Array.isArray(object?.rekorTlogUrls) ? object.rekorTlogUrls.map((e) => exports2.Service.fromJSON(e)) : [],
+          rekorTlogConfig: isSet(object.rekorTlogConfig) ? exports2.ServiceConfiguration.fromJSON(object.rekorTlogConfig) : void 0,
+          tsaUrls: globalThis.Array.isArray(object?.tsaUrls) ? object.tsaUrls.map((e) => exports2.Service.fromJSON(e)) : [],
+          tsaConfig: isSet(object.tsaConfig) ? exports2.ServiceConfiguration.fromJSON(object.tsaConfig) : void 0
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.mediaType !== "") {
+          obj.mediaType = message.mediaType;
+        }
+        if (message.caUrls?.length) {
+          obj.caUrls = message.caUrls.map((e) => exports2.Service.toJSON(e));
+        }
+        if (message.oidcUrls?.length) {
+          obj.oidcUrls = message.oidcUrls.map((e) => exports2.Service.toJSON(e));
+        }
+        if (message.rekorTlogUrls?.length) {
+          obj.rekorTlogUrls = message.rekorTlogUrls.map((e) => exports2.Service.toJSON(e));
+        }
+        if (message.rekorTlogConfig !== void 0) {
+          obj.rekorTlogConfig = exports2.ServiceConfiguration.toJSON(message.rekorTlogConfig);
+        }
+        if (message.tsaUrls?.length) {
+          obj.tsaUrls = message.tsaUrls.map((e) => exports2.Service.toJSON(e));
+        }
+        if (message.tsaConfig !== void 0) {
+          obj.tsaConfig = exports2.ServiceConfiguration.toJSON(message.tsaConfig);
+        }
+        return obj;
+      }
+    };
+    exports2.Service = {
+      fromJSON(object) {
+        return {
+          url: isSet(object.url) ? globalThis.String(object.url) : "",
+          majorApiVersion: isSet(object.majorApiVersion) ? globalThis.Number(object.majorApiVersion) : 0,
+          validFor: isSet(object.validFor) ? sigstore_common_1.TimeRange.fromJSON(object.validFor) : void 0,
+          operator: isSet(object.operator) ? globalThis.String(object.operator) : ""
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.url !== "") {
+          obj.url = message.url;
+        }
+        if (message.majorApiVersion !== 0) {
+          obj.majorApiVersion = Math.round(message.majorApiVersion);
+        }
+        if (message.validFor !== void 0) {
+          obj.validFor = sigstore_common_1.TimeRange.toJSON(message.validFor);
+        }
+        if (message.operator !== "") {
+          obj.operator = message.operator;
+        }
+        return obj;
+      }
+    };
+    exports2.ServiceConfiguration = {
+      fromJSON(object) {
+        return {
+          selector: isSet(object.selector) ? serviceSelectorFromJSON(object.selector) : 0,
+          count: isSet(object.count) ? globalThis.Number(object.count) : 0
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.selector !== 0) {
+          obj.selector = serviceSelectorToJSON(message.selector);
+        }
+        if (message.count !== 0) {
+          obj.count = Math.round(message.count);
+        }
+        return obj;
+      }
+    };
+    exports2.ClientTrustConfig = {
+      fromJSON(object) {
+        return {
+          mediaType: isSet(object.mediaType) ? globalThis.String(object.mediaType) : "",
+          trustedRoot: isSet(object.trustedRoot) ? exports2.TrustedRoot.fromJSON(object.trustedRoot) : void 0,
+          signingConfig: isSet(object.signingConfig) ? exports2.SigningConfig.fromJSON(object.signingConfig) : void 0
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.mediaType !== "") {
+          obj.mediaType = message.mediaType;
+        }
+        if (message.trustedRoot !== void 0) {
+          obj.trustedRoot = exports2.TrustedRoot.toJSON(message.trustedRoot);
+        }
+        if (message.signingConfig !== void 0) {
+          obj.signingConfig = exports2.SigningConfig.toJSON(message.signingConfig);
+        }
+        return obj;
+      }
+    };
+    function isSet(value) {
+      return value !== null && value !== void 0;
+    }
+    __name(isSet, "isSet");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_verification.js
+var require_sigstore_verification = __commonJS({
+  "node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_verification.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Input = exports2.Artifact = exports2.ArtifactVerificationOptions_ObserverTimestampOptions = exports2.ArtifactVerificationOptions_TlogIntegratedTimestampOptions = exports2.ArtifactVerificationOptions_TimestampAuthorityOptions = exports2.ArtifactVerificationOptions_CtlogOptions = exports2.ArtifactVerificationOptions_TlogOptions = exports2.ArtifactVerificationOptions = exports2.PublicKeyIdentities = exports2.CertificateIdentities = exports2.CertificateIdentity = void 0;
+    var sigstore_bundle_1 = require_sigstore_bundle();
+    var sigstore_common_1 = require_sigstore_common();
+    var sigstore_trustroot_1 = require_sigstore_trustroot();
+    exports2.CertificateIdentity = {
+      fromJSON(object) {
+        return {
+          issuer: isSet(object.issuer) ? globalThis.String(object.issuer) : "",
+          san: isSet(object.san) ? sigstore_common_1.SubjectAlternativeName.fromJSON(object.san) : void 0,
+          oids: globalThis.Array.isArray(object?.oids) ? object.oids.map((e) => sigstore_common_1.ObjectIdentifierValuePair.fromJSON(e)) : []
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.issuer !== "") {
+          obj.issuer = message.issuer;
+        }
+        if (message.san !== void 0) {
+          obj.san = sigstore_common_1.SubjectAlternativeName.toJSON(message.san);
+        }
+        if (message.oids?.length) {
+          obj.oids = message.oids.map((e) => sigstore_common_1.ObjectIdentifierValuePair.toJSON(e));
+        }
+        return obj;
+      }
+    };
+    exports2.CertificateIdentities = {
+      fromJSON(object) {
+        return {
+          identities: globalThis.Array.isArray(object?.identities) ? object.identities.map((e) => exports2.CertificateIdentity.fromJSON(e)) : []
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.identities?.length) {
+          obj.identities = message.identities.map((e) => exports2.CertificateIdentity.toJSON(e));
+        }
+        return obj;
+      }
+    };
+    exports2.PublicKeyIdentities = {
+      fromJSON(object) {
+        return {
+          publicKeys: globalThis.Array.isArray(object?.publicKeys) ? object.publicKeys.map((e) => sigstore_common_1.PublicKey.fromJSON(e)) : []
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.publicKeys?.length) {
+          obj.publicKeys = message.publicKeys.map((e) => sigstore_common_1.PublicKey.toJSON(e));
+        }
+        return obj;
+      }
+    };
+    exports2.ArtifactVerificationOptions = {
+      fromJSON(object) {
+        return {
+          signers: isSet(object.certificateIdentities) ? {
+            $case: "certificateIdentities",
+            certificateIdentities: exports2.CertificateIdentities.fromJSON(object.certificateIdentities)
+          } : isSet(object.publicKeys) ? { $case: "publicKeys", publicKeys: exports2.PublicKeyIdentities.fromJSON(object.publicKeys) } : void 0,
+          tlogOptions: isSet(object.tlogOptions) ? exports2.ArtifactVerificationOptions_TlogOptions.fromJSON(object.tlogOptions) : void 0,
+          ctlogOptions: isSet(object.ctlogOptions) ? exports2.ArtifactVerificationOptions_CtlogOptions.fromJSON(object.ctlogOptions) : void 0,
+          tsaOptions: isSet(object.tsaOptions) ? exports2.ArtifactVerificationOptions_TimestampAuthorityOptions.fromJSON(object.tsaOptions) : void 0,
+          integratedTsOptions: isSet(object.integratedTsOptions) ? exports2.ArtifactVerificationOptions_TlogIntegratedTimestampOptions.fromJSON(object.integratedTsOptions) : void 0,
+          observerOptions: isSet(object.observerOptions) ? exports2.ArtifactVerificationOptions_ObserverTimestampOptions.fromJSON(object.observerOptions) : void 0
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.signers?.$case === "certificateIdentities") {
+          obj.certificateIdentities = exports2.CertificateIdentities.toJSON(message.signers.certificateIdentities);
+        } else if (message.signers?.$case === "publicKeys") {
+          obj.publicKeys = exports2.PublicKeyIdentities.toJSON(message.signers.publicKeys);
+        }
+        if (message.tlogOptions !== void 0) {
+          obj.tlogOptions = exports2.ArtifactVerificationOptions_TlogOptions.toJSON(message.tlogOptions);
+        }
+        if (message.ctlogOptions !== void 0) {
+          obj.ctlogOptions = exports2.ArtifactVerificationOptions_CtlogOptions.toJSON(message.ctlogOptions);
+        }
+        if (message.tsaOptions !== void 0) {
+          obj.tsaOptions = exports2.ArtifactVerificationOptions_TimestampAuthorityOptions.toJSON(message.tsaOptions);
+        }
+        if (message.integratedTsOptions !== void 0) {
+          obj.integratedTsOptions = exports2.ArtifactVerificationOptions_TlogIntegratedTimestampOptions.toJSON(message.integratedTsOptions);
+        }
+        if (message.observerOptions !== void 0) {
+          obj.observerOptions = exports2.ArtifactVerificationOptions_ObserverTimestampOptions.toJSON(message.observerOptions);
+        }
+        return obj;
+      }
+    };
+    exports2.ArtifactVerificationOptions_TlogOptions = {
+      fromJSON(object) {
+        return {
+          threshold: isSet(object.threshold) ? globalThis.Number(object.threshold) : 0,
+          performOnlineVerification: isSet(object.performOnlineVerification) ? globalThis.Boolean(object.performOnlineVerification) : false,
+          disable: isSet(object.disable) ? globalThis.Boolean(object.disable) : false
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.threshold !== 0) {
+          obj.threshold = Math.round(message.threshold);
+        }
+        if (message.performOnlineVerification !== false) {
+          obj.performOnlineVerification = message.performOnlineVerification;
+        }
+        if (message.disable !== false) {
+          obj.disable = message.disable;
+        }
+        return obj;
+      }
+    };
+    exports2.ArtifactVerificationOptions_CtlogOptions = {
+      fromJSON(object) {
+        return {
+          threshold: isSet(object.threshold) ? globalThis.Number(object.threshold) : 0,
+          disable: isSet(object.disable) ? globalThis.Boolean(object.disable) : false
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.threshold !== 0) {
+          obj.threshold = Math.round(message.threshold);
+        }
+        if (message.disable !== false) {
+          obj.disable = message.disable;
+        }
+        return obj;
+      }
+    };
+    exports2.ArtifactVerificationOptions_TimestampAuthorityOptions = {
+      fromJSON(object) {
+        return {
+          threshold: isSet(object.threshold) ? globalThis.Number(object.threshold) : 0,
+          disable: isSet(object.disable) ? globalThis.Boolean(object.disable) : false
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.threshold !== 0) {
+          obj.threshold = Math.round(message.threshold);
+        }
+        if (message.disable !== false) {
+          obj.disable = message.disable;
+        }
+        return obj;
+      }
+    };
+    exports2.ArtifactVerificationOptions_TlogIntegratedTimestampOptions = {
+      fromJSON(object) {
+        return {
+          threshold: isSet(object.threshold) ? globalThis.Number(object.threshold) : 0,
+          disable: isSet(object.disable) ? globalThis.Boolean(object.disable) : false
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.threshold !== 0) {
+          obj.threshold = Math.round(message.threshold);
+        }
+        if (message.disable !== false) {
+          obj.disable = message.disable;
+        }
+        return obj;
+      }
+    };
+    exports2.ArtifactVerificationOptions_ObserverTimestampOptions = {
+      fromJSON(object) {
+        return {
+          threshold: isSet(object.threshold) ? globalThis.Number(object.threshold) : 0,
+          disable: isSet(object.disable) ? globalThis.Boolean(object.disable) : false
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.threshold !== 0) {
+          obj.threshold = Math.round(message.threshold);
+        }
+        if (message.disable !== false) {
+          obj.disable = message.disable;
+        }
+        return obj;
+      }
+    };
+    exports2.Artifact = {
+      fromJSON(object) {
+        return {
+          data: isSet(object.artifactUri) ? { $case: "artifactUri", artifactUri: globalThis.String(object.artifactUri) } : isSet(object.artifact) ? { $case: "artifact", artifact: Buffer.from(bytesFromBase64(object.artifact)) } : isSet(object.artifactDigest) ? { $case: "artifactDigest", artifactDigest: sigstore_common_1.HashOutput.fromJSON(object.artifactDigest) } : void 0
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.data?.$case === "artifactUri") {
+          obj.artifactUri = message.data.artifactUri;
+        } else if (message.data?.$case === "artifact") {
+          obj.artifact = base64FromBytes(message.data.artifact);
+        } else if (message.data?.$case === "artifactDigest") {
+          obj.artifactDigest = sigstore_common_1.HashOutput.toJSON(message.data.artifactDigest);
+        }
+        return obj;
+      }
+    };
+    exports2.Input = {
+      fromJSON(object) {
+        return {
+          artifactTrustRoot: isSet(object.artifactTrustRoot) ? sigstore_trustroot_1.TrustedRoot.fromJSON(object.artifactTrustRoot) : void 0,
+          artifactVerificationOptions: isSet(object.artifactVerificationOptions) ? exports2.ArtifactVerificationOptions.fromJSON(object.artifactVerificationOptions) : void 0,
+          bundle: isSet(object.bundle) ? sigstore_bundle_1.Bundle.fromJSON(object.bundle) : void 0,
+          artifact: isSet(object.artifact) ? exports2.Artifact.fromJSON(object.artifact) : void 0
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.artifactTrustRoot !== void 0) {
+          obj.artifactTrustRoot = sigstore_trustroot_1.TrustedRoot.toJSON(message.artifactTrustRoot);
+        }
+        if (message.artifactVerificationOptions !== void 0) {
+          obj.artifactVerificationOptions = exports2.ArtifactVerificationOptions.toJSON(message.artifactVerificationOptions);
+        }
+        if (message.bundle !== void 0) {
+          obj.bundle = sigstore_bundle_1.Bundle.toJSON(message.bundle);
+        }
+        if (message.artifact !== void 0) {
+          obj.artifact = exports2.Artifact.toJSON(message.artifact);
+        }
+        return obj;
+      }
+    };
+    function bytesFromBase64(b64) {
+      return Uint8Array.from(globalThis.Buffer.from(b64, "base64"));
+    }
+    __name(bytesFromBase64, "bytesFromBase64");
+    function base64FromBytes(arr) {
+      return globalThis.Buffer.from(arr).toString("base64");
+    }
+    __name(base64FromBytes, "base64FromBytes");
+    function isSet(value) {
+      return value !== null && value !== void 0;
+    }
+    __name(isSet, "isSet");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/index.js
+var require_dist5 = __commonJS({
+  "node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/index.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
+      for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    __exportStar(require_envelope(), exports2);
+    __exportStar(require_sigstore_bundle(), exports2);
+    __exportStar(require_sigstore_common(), exports2);
+    __exportStar(require_sigstore_rekor(), exports2);
+    __exportStar(require_sigstore_trustroot(), exports2);
+    __exportStar(require_sigstore_verification(), exports2);
+  }
+});
+
+// node_modules/.pnpm/@sigstore+bundle@4.0.0/node_modules/@sigstore/bundle/dist/bundle.js
+var require_bundle = __commonJS({
+  "node_modules/.pnpm/@sigstore+bundle@4.0.0/node_modules/@sigstore/bundle/dist/bundle.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.BUNDLE_V03_MEDIA_TYPE = exports2.BUNDLE_V03_LEGACY_MEDIA_TYPE = exports2.BUNDLE_V02_MEDIA_TYPE = exports2.BUNDLE_V01_MEDIA_TYPE = void 0;
+    exports2.isBundleWithCertificateChain = isBundleWithCertificateChain;
+    exports2.isBundleWithPublicKey = isBundleWithPublicKey;
+    exports2.isBundleWithMessageSignature = isBundleWithMessageSignature;
+    exports2.isBundleWithDsseEnvelope = isBundleWithDsseEnvelope;
+    exports2.BUNDLE_V01_MEDIA_TYPE = "application/vnd.dev.sigstore.bundle+json;version=0.1";
+    exports2.BUNDLE_V02_MEDIA_TYPE = "application/vnd.dev.sigstore.bundle+json;version=0.2";
+    exports2.BUNDLE_V03_LEGACY_MEDIA_TYPE = "application/vnd.dev.sigstore.bundle+json;version=0.3";
+    exports2.BUNDLE_V03_MEDIA_TYPE = "application/vnd.dev.sigstore.bundle.v0.3+json";
+    function isBundleWithCertificateChain(b) {
+      return b.verificationMaterial.content.$case === "x509CertificateChain";
+    }
+    __name(isBundleWithCertificateChain, "isBundleWithCertificateChain");
+    function isBundleWithPublicKey(b) {
+      return b.verificationMaterial.content.$case === "publicKey";
+    }
+    __name(isBundleWithPublicKey, "isBundleWithPublicKey");
+    function isBundleWithMessageSignature(b) {
+      return b.content.$case === "messageSignature";
+    }
+    __name(isBundleWithMessageSignature, "isBundleWithMessageSignature");
+    function isBundleWithDsseEnvelope(b) {
+      return b.content.$case === "dsseEnvelope";
+    }
+    __name(isBundleWithDsseEnvelope, "isBundleWithDsseEnvelope");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+bundle@4.0.0/node_modules/@sigstore/bundle/dist/build.js
+var require_build2 = __commonJS({
+  "node_modules/.pnpm/@sigstore+bundle@4.0.0/node_modules/@sigstore/bundle/dist/build.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.toMessageSignatureBundle = toMessageSignatureBundle;
+    exports2.toDSSEBundle = toDSSEBundle;
+    var protobuf_specs_1 = require_dist5();
+    var bundle_1 = require_bundle();
+    function toMessageSignatureBundle(options) {
+      return {
+        mediaType: options.certificateChain ? bundle_1.BUNDLE_V02_MEDIA_TYPE : bundle_1.BUNDLE_V03_MEDIA_TYPE,
+        content: {
+          $case: "messageSignature",
+          messageSignature: {
+            messageDigest: {
+              algorithm: protobuf_specs_1.HashAlgorithm.SHA2_256,
+              digest: options.digest
+            },
+            signature: options.signature
+          }
+        },
+        verificationMaterial: toVerificationMaterial(options)
+      };
+    }
+    __name(toMessageSignatureBundle, "toMessageSignatureBundle");
+    function toDSSEBundle(options) {
+      return {
+        mediaType: options.certificateChain ? bundle_1.BUNDLE_V02_MEDIA_TYPE : bundle_1.BUNDLE_V03_MEDIA_TYPE,
+        content: {
+          $case: "dsseEnvelope",
+          dsseEnvelope: toEnvelope(options)
+        },
+        verificationMaterial: toVerificationMaterial(options)
+      };
+    }
+    __name(toDSSEBundle, "toDSSEBundle");
+    function toEnvelope(options) {
+      return {
+        payloadType: options.artifactType,
+        payload: options.artifact,
+        signatures: [toSignature(options)]
+      };
+    }
+    __name(toEnvelope, "toEnvelope");
+    function toSignature(options) {
+      return {
+        keyid: options.keyHint || "",
+        sig: options.signature
+      };
+    }
+    __name(toSignature, "toSignature");
+    function toVerificationMaterial(options) {
+      return {
+        content: toKeyContent(options),
+        tlogEntries: [],
+        timestampVerificationData: { rfc3161Timestamps: [] }
+      };
+    }
+    __name(toVerificationMaterial, "toVerificationMaterial");
+    function toKeyContent(options) {
+      if (options.certificate) {
+        if (options.certificateChain) {
+          return {
+            $case: "x509CertificateChain",
+            x509CertificateChain: {
+              certificates: [{ rawBytes: options.certificate }]
+            }
+          };
+        } else {
+          return {
+            $case: "certificate",
+            certificate: { rawBytes: options.certificate }
+          };
+        }
+      } else {
+        return {
+          $case: "publicKey",
+          publicKey: {
+            hint: options.keyHint || ""
+          }
+        };
+      }
+    }
+    __name(toKeyContent, "toKeyContent");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+bundle@4.0.0/node_modules/@sigstore/bundle/dist/error.js
+var require_error = __commonJS({
+  "node_modules/.pnpm/@sigstore+bundle@4.0.0/node_modules/@sigstore/bundle/dist/error.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.ValidationError = void 0;
+    var ValidationError = class extends Error {
+      static {
+        __name(this, "ValidationError");
+      }
+      constructor(message, fields) {
+        super(message);
+        this.fields = fields;
+      }
+    };
+    exports2.ValidationError = ValidationError;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+bundle@4.0.0/node_modules/@sigstore/bundle/dist/validate.js
+var require_validate = __commonJS({
+  "node_modules/.pnpm/@sigstore+bundle@4.0.0/node_modules/@sigstore/bundle/dist/validate.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.assertBundle = assertBundle;
+    exports2.assertBundleV01 = assertBundleV01;
+    exports2.isBundleV01 = isBundleV01;
+    exports2.assertBundleV02 = assertBundleV02;
+    exports2.assertBundleLatest = assertBundleLatest;
+    var error_1 = require_error();
+    function assertBundle(b) {
+      const invalidValues = validateBundleBase(b);
+      if (invalidValues.length > 0) {
+        throw new error_1.ValidationError("invalid bundle", invalidValues);
+      }
+    }
+    __name(assertBundle, "assertBundle");
+    function assertBundleV01(b) {
+      const invalidValues = [];
+      invalidValues.push(...validateBundleBase(b));
+      invalidValues.push(...validateInclusionPromise(b));
+      if (invalidValues.length > 0) {
+        throw new error_1.ValidationError("invalid v0.1 bundle", invalidValues);
+      }
+    }
+    __name(assertBundleV01, "assertBundleV01");
+    function isBundleV01(b) {
+      try {
+        assertBundleV01(b);
+        return true;
+      } catch (e) {
+        return false;
+      }
+    }
+    __name(isBundleV01, "isBundleV01");
+    function assertBundleV02(b) {
+      const invalidValues = [];
+      invalidValues.push(...validateBundleBase(b));
+      invalidValues.push(...validateInclusionProof(b));
+      if (invalidValues.length > 0) {
+        throw new error_1.ValidationError("invalid v0.2 bundle", invalidValues);
+      }
+    }
+    __name(assertBundleV02, "assertBundleV02");
+    function assertBundleLatest(b) {
+      const invalidValues = [];
+      invalidValues.push(...validateBundleBase(b));
+      invalidValues.push(...validateInclusionProof(b));
+      invalidValues.push(...validateNoCertificateChain(b));
+      if (invalidValues.length > 0) {
+        throw new error_1.ValidationError("invalid bundle", invalidValues);
+      }
+    }
+    __name(assertBundleLatest, "assertBundleLatest");
+    function validateBundleBase(b) {
+      const invalidValues = [];
+      if (b.mediaType === void 0 || !b.mediaType.match(/^application\/vnd\.dev\.sigstore\.bundle\+json;version=\d\.\d/) && !b.mediaType.match(/^application\/vnd\.dev\.sigstore\.bundle\.v\d\.\d\+json/)) {
+        invalidValues.push("mediaType");
+      }
+      if (b.content === void 0) {
+        invalidValues.push("content");
+      } else {
+        switch (b.content.$case) {
+          case "messageSignature":
+            if (b.content.messageSignature.messageDigest === void 0) {
+              invalidValues.push("content.messageSignature.messageDigest");
+            } else {
+              if (b.content.messageSignature.messageDigest.digest.length === 0) {
+                invalidValues.push("content.messageSignature.messageDigest.digest");
+              }
+            }
+            if (b.content.messageSignature.signature.length === 0) {
+              invalidValues.push("content.messageSignature.signature");
+            }
+            break;
+          case "dsseEnvelope":
+            if (b.content.dsseEnvelope.payload.length === 0) {
+              invalidValues.push("content.dsseEnvelope.payload");
+            }
+            if (b.content.dsseEnvelope.signatures.length !== 1) {
+              invalidValues.push("content.dsseEnvelope.signatures");
+            } else {
+              if (b.content.dsseEnvelope.signatures[0].sig.length === 0) {
+                invalidValues.push("content.dsseEnvelope.signatures[0].sig");
+              }
+            }
+            break;
+        }
+      }
+      if (b.verificationMaterial === void 0) {
+        invalidValues.push("verificationMaterial");
+      } else {
+        if (b.verificationMaterial.content === void 0) {
+          invalidValues.push("verificationMaterial.content");
+        } else {
+          switch (b.verificationMaterial.content.$case) {
+            case "x509CertificateChain":
+              if (b.verificationMaterial.content.x509CertificateChain.certificates.length === 0) {
+                invalidValues.push("verificationMaterial.content.x509CertificateChain.certificates");
+              }
+              b.verificationMaterial.content.x509CertificateChain.certificates.forEach((cert, i) => {
+                if (cert.rawBytes.length === 0) {
+                  invalidValues.push(`verificationMaterial.content.x509CertificateChain.certificates[${i}].rawBytes`);
+                }
+              });
+              break;
+            case "certificate":
+              if (b.verificationMaterial.content.certificate.rawBytes.length === 0) {
+                invalidValues.push("verificationMaterial.content.certificate.rawBytes");
+              }
+              break;
+          }
+        }
+        if (b.verificationMaterial.tlogEntries === void 0) {
+          invalidValues.push("verificationMaterial.tlogEntries");
+        } else {
+          if (b.verificationMaterial.tlogEntries.length > 0) {
+            b.verificationMaterial.tlogEntries.forEach((entry, i) => {
+              if (entry.logId === void 0) {
+                invalidValues.push(`verificationMaterial.tlogEntries[${i}].logId`);
+              }
+              if (entry.kindVersion === void 0) {
+                invalidValues.push(`verificationMaterial.tlogEntries[${i}].kindVersion`);
+              }
+            });
+          }
+        }
+      }
+      return invalidValues;
+    }
+    __name(validateBundleBase, "validateBundleBase");
+    function validateInclusionPromise(b) {
+      const invalidValues = [];
+      if (b.verificationMaterial && b.verificationMaterial.tlogEntries?.length > 0) {
+        b.verificationMaterial.tlogEntries.forEach((entry, i) => {
+          if (entry.inclusionPromise === void 0) {
+            invalidValues.push(`verificationMaterial.tlogEntries[${i}].inclusionPromise`);
+          }
+        });
+      }
+      return invalidValues;
+    }
+    __name(validateInclusionPromise, "validateInclusionPromise");
+    function validateInclusionProof(b) {
+      const invalidValues = [];
+      if (b.verificationMaterial && b.verificationMaterial.tlogEntries?.length > 0) {
+        b.verificationMaterial.tlogEntries.forEach((entry, i) => {
+          if (entry.inclusionProof === void 0) {
+            invalidValues.push(`verificationMaterial.tlogEntries[${i}].inclusionProof`);
+          } else {
+            if (entry.inclusionProof.checkpoint === void 0) {
+              invalidValues.push(`verificationMaterial.tlogEntries[${i}].inclusionProof.checkpoint`);
+            }
+          }
+        });
+      }
+      return invalidValues;
+    }
+    __name(validateInclusionProof, "validateInclusionProof");
+    function validateNoCertificateChain(b) {
+      const invalidValues = [];
+      if (b.verificationMaterial?.content?.$case === "x509CertificateChain") {
+        invalidValues.push("verificationMaterial.content.$case");
+      }
+      return invalidValues;
+    }
+    __name(validateNoCertificateChain, "validateNoCertificateChain");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+bundle@4.0.0/node_modules/@sigstore/bundle/dist/serialized.js
+var require_serialized = __commonJS({
+  "node_modules/.pnpm/@sigstore+bundle@4.0.0/node_modules/@sigstore/bundle/dist/serialized.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.envelopeToJSON = exports2.envelopeFromJSON = exports2.bundleToJSON = exports2.bundleFromJSON = void 0;
+    var protobuf_specs_1 = require_dist5();
+    var bundle_1 = require_bundle();
+    var validate_1 = require_validate();
+    var bundleFromJSON = /* @__PURE__ */ __name((obj) => {
+      const bundle = protobuf_specs_1.Bundle.fromJSON(obj);
+      switch (bundle.mediaType) {
+        case bundle_1.BUNDLE_V01_MEDIA_TYPE:
+          (0, validate_1.assertBundleV01)(bundle);
+          break;
+        case bundle_1.BUNDLE_V02_MEDIA_TYPE:
+          (0, validate_1.assertBundleV02)(bundle);
+          break;
+        default:
+          (0, validate_1.assertBundleLatest)(bundle);
+          break;
+      }
+      return bundle;
+    }, "bundleFromJSON");
+    exports2.bundleFromJSON = bundleFromJSON;
+    var bundleToJSON = /* @__PURE__ */ __name((bundle) => {
+      return protobuf_specs_1.Bundle.toJSON(bundle);
+    }, "bundleToJSON");
+    exports2.bundleToJSON = bundleToJSON;
+    var envelopeFromJSON = /* @__PURE__ */ __name((obj) => {
+      return protobuf_specs_1.Envelope.fromJSON(obj);
+    }, "envelopeFromJSON");
+    exports2.envelopeFromJSON = envelopeFromJSON;
+    var envelopeToJSON = /* @__PURE__ */ __name((envelope) => {
+      return protobuf_specs_1.Envelope.toJSON(envelope);
+    }, "envelopeToJSON");
+    exports2.envelopeToJSON = envelopeToJSON;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+bundle@4.0.0/node_modules/@sigstore/bundle/dist/index.js
+var require_dist6 = __commonJS({
+  "node_modules/.pnpm/@sigstore+bundle@4.0.0/node_modules/@sigstore/bundle/dist/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.isBundleV01 = exports2.assertBundleV02 = exports2.assertBundleV01 = exports2.assertBundleLatest = exports2.assertBundle = exports2.envelopeToJSON = exports2.envelopeFromJSON = exports2.bundleToJSON = exports2.bundleFromJSON = exports2.ValidationError = exports2.isBundleWithPublicKey = exports2.isBundleWithMessageSignature = exports2.isBundleWithDsseEnvelope = exports2.isBundleWithCertificateChain = exports2.BUNDLE_V03_MEDIA_TYPE = exports2.BUNDLE_V03_LEGACY_MEDIA_TYPE = exports2.BUNDLE_V02_MEDIA_TYPE = exports2.BUNDLE_V01_MEDIA_TYPE = exports2.toMessageSignatureBundle = exports2.toDSSEBundle = void 0;
+    var build_1 = require_build2();
+    Object.defineProperty(exports2, "toDSSEBundle", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return build_1.toDSSEBundle;
+    }, "get") });
+    Object.defineProperty(exports2, "toMessageSignatureBundle", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return build_1.toMessageSignatureBundle;
+    }, "get") });
+    var bundle_1 = require_bundle();
+    Object.defineProperty(exports2, "BUNDLE_V01_MEDIA_TYPE", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return bundle_1.BUNDLE_V01_MEDIA_TYPE;
+    }, "get") });
+    Object.defineProperty(exports2, "BUNDLE_V02_MEDIA_TYPE", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return bundle_1.BUNDLE_V02_MEDIA_TYPE;
+    }, "get") });
+    Object.defineProperty(exports2, "BUNDLE_V03_LEGACY_MEDIA_TYPE", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return bundle_1.BUNDLE_V03_LEGACY_MEDIA_TYPE;
+    }, "get") });
+    Object.defineProperty(exports2, "BUNDLE_V03_MEDIA_TYPE", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return bundle_1.BUNDLE_V03_MEDIA_TYPE;
+    }, "get") });
+    Object.defineProperty(exports2, "isBundleWithCertificateChain", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return bundle_1.isBundleWithCertificateChain;
+    }, "get") });
+    Object.defineProperty(exports2, "isBundleWithDsseEnvelope", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return bundle_1.isBundleWithDsseEnvelope;
+    }, "get") });
+    Object.defineProperty(exports2, "isBundleWithMessageSignature", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return bundle_1.isBundleWithMessageSignature;
+    }, "get") });
+    Object.defineProperty(exports2, "isBundleWithPublicKey", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return bundle_1.isBundleWithPublicKey;
+    }, "get") });
+    var error_1 = require_error();
+    Object.defineProperty(exports2, "ValidationError", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return error_1.ValidationError;
+    }, "get") });
+    var serialized_1 = require_serialized();
+    Object.defineProperty(exports2, "bundleFromJSON", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return serialized_1.bundleFromJSON;
+    }, "get") });
+    Object.defineProperty(exports2, "bundleToJSON", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return serialized_1.bundleToJSON;
+    }, "get") });
+    Object.defineProperty(exports2, "envelopeFromJSON", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return serialized_1.envelopeFromJSON;
+    }, "get") });
+    Object.defineProperty(exports2, "envelopeToJSON", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return serialized_1.envelopeToJSON;
+    }, "get") });
+    var validate_1 = require_validate();
+    Object.defineProperty(exports2, "assertBundle", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return validate_1.assertBundle;
+    }, "get") });
+    Object.defineProperty(exports2, "assertBundleLatest", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return validate_1.assertBundleLatest;
+    }, "get") });
+    Object.defineProperty(exports2, "assertBundleV01", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return validate_1.assertBundleV01;
+    }, "get") });
+    Object.defineProperty(exports2, "assertBundleV02", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return validate_1.assertBundleV02;
+    }, "get") });
+    Object.defineProperty(exports2, "isBundleV01", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return validate_1.isBundleV01;
+    }, "get") });
+  }
+});
+
+// node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/stream.js
+var require_stream = __commonJS({
+  "node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/stream.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.ByteStream = void 0;
+    var StreamError = class extends Error {
+      static {
+        __name(this, "StreamError");
+      }
+    };
+    var ByteStream = class _ByteStream {
+      static {
+        __name(this, "ByteStream");
+      }
+      static BLOCK_SIZE = 1024;
+      buf;
+      view;
+      start = 0;
+      constructor(buffer) {
+        if (buffer) {
+          this.buf = buffer;
+          this.view = Buffer.from(buffer);
+        } else {
+          this.buf = Buffer.alloc(0);
+          this.view = Buffer.from(this.buf);
+        }
+      }
+      get buffer() {
+        return this.view.subarray(0, this.start);
+      }
+      get length() {
+        return this.view.byteLength;
+      }
+      get position() {
+        return this.start;
+      }
+      seek(position) {
+        this.start = position;
+      }
+      // Returns a Buffer containing the specified number of bytes starting at the
+      // given start position.
+      slice(start, len) {
+        const end = start + len;
+        if (end > this.length) {
+          throw new StreamError("request past end of buffer");
+        }
+        return this.view.subarray(start, end);
+      }
+      appendChar(char) {
+        this.ensureCapacity(1);
+        this.view[this.start] = char;
+        this.start += 1;
+      }
+      appendUint16(num) {
+        this.ensureCapacity(2);
+        const value = new Uint16Array([num]);
+        const view = new Uint8Array(value.buffer);
+        this.view[this.start] = view[1];
+        this.view[this.start + 1] = view[0];
+        this.start += 2;
+      }
+      appendUint24(num) {
+        this.ensureCapacity(3);
+        const value = new Uint32Array([num]);
+        const view = new Uint8Array(value.buffer);
+        this.view[this.start] = view[2];
+        this.view[this.start + 1] = view[1];
+        this.view[this.start + 2] = view[0];
+        this.start += 3;
+      }
+      appendView(view) {
+        this.ensureCapacity(view.length);
+        this.view.set(view, this.start);
+        this.start += view.length;
+      }
+      getBlock(size) {
+        if (size <= 0) {
+          return Buffer.alloc(0);
+        }
+        if (this.start + size > this.view.length) {
+          throw new Error("request past end of buffer");
+        }
+        const result = this.view.subarray(this.start, this.start + size);
+        this.start += size;
+        return result;
+      }
+      getUint8() {
+        return this.getBlock(1)[0];
+      }
+      getUint16() {
+        const block = this.getBlock(2);
+        return block[0] << 8 | block[1];
+      }
+      ensureCapacity(size) {
+        if (this.start + size > this.view.byteLength) {
+          const blockSize = _ByteStream.BLOCK_SIZE + (size > _ByteStream.BLOCK_SIZE ? size : 0);
+          this.realloc(this.view.byteLength + blockSize);
+        }
+      }
+      realloc(size) {
+        const newArray = Buffer.alloc(size);
+        const newView = Buffer.from(newArray);
+        newView.set(this.view);
+        this.buf = newArray;
+        this.view = newView;
+      }
+    };
+    exports2.ByteStream = ByteStream;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/asn1/error.js
+var require_error2 = __commonJS({
+  "node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/asn1/error.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.ASN1TypeError = exports2.ASN1ParseError = void 0;
+    var ASN1ParseError = class extends Error {
+      static {
+        __name(this, "ASN1ParseError");
+      }
+    };
+    exports2.ASN1ParseError = ASN1ParseError;
+    var ASN1TypeError = class extends Error {
+      static {
+        __name(this, "ASN1TypeError");
+      }
+    };
+    exports2.ASN1TypeError = ASN1TypeError;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/asn1/length.js
+var require_length = __commonJS({
+  "node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/asn1/length.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.decodeLength = decodeLength;
+    exports2.encodeLength = encodeLength;
+    var error_1 = require_error2();
+    function decodeLength(stream) {
+      const buf = stream.getUint8();
+      if ((buf & 128) === 0) {
+        return buf;
+      }
+      const byteCount = buf & 127;
+      if (byteCount > 6) {
+        throw new error_1.ASN1ParseError("length exceeds 6 byte limit");
+      }
+      let len = 0;
+      for (let i = 0; i < byteCount; i++) {
+        len = len * 256 + stream.getUint8();
+      }
+      if (len === 0) {
+        throw new error_1.ASN1ParseError("indefinite length encoding not supported");
+      }
+      return len;
+    }
+    __name(decodeLength, "decodeLength");
+    function encodeLength(len) {
+      if (len < 128) {
+        return Buffer.from([len]);
+      }
+      let val = BigInt(len);
+      const bytes = [];
+      while (val > 0n) {
+        bytes.unshift(Number(val & 255n));
+        val = val >> 8n;
+      }
+      return Buffer.from([128 | bytes.length, ...bytes]);
+    }
+    __name(encodeLength, "encodeLength");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/asn1/parse.js
+var require_parse3 = __commonJS({
+  "node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/asn1/parse.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.parseInteger = parseInteger;
+    exports2.parseStringASCII = parseStringASCII;
+    exports2.parseTime = parseTime;
+    exports2.parseOID = parseOID;
+    exports2.parseBoolean = parseBoolean;
+    exports2.parseBitString = parseBitString;
+    var RE_TIME_SHORT_YEAR = /^(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\.\d{3})?Z$/;
+    var RE_TIME_LONG_YEAR = /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\.\d{3})?Z$/;
+    function parseInteger(buf) {
+      let pos = 0;
+      const end = buf.length;
+      let val = buf[pos];
+      const neg = val > 127;
+      const pad = neg ? 255 : 0;
+      while (val == pad && ++pos < end) {
+        val = buf[pos];
+      }
+      const len = end - pos;
+      if (len === 0)
+        return BigInt(neg ? -1 : 0);
+      val = neg ? val - 256 : val;
+      let n = BigInt(val);
+      for (let i = pos + 1; i < end; ++i) {
+        n = n * BigInt(256) + BigInt(buf[i]);
+      }
+      return n;
+    }
+    __name(parseInteger, "parseInteger");
+    function parseStringASCII(buf) {
+      return buf.toString("ascii");
+    }
+    __name(parseStringASCII, "parseStringASCII");
+    function parseTime(buf, shortYear) {
+      const timeStr = parseStringASCII(buf);
+      const m = shortYear ? RE_TIME_SHORT_YEAR.exec(timeStr) : RE_TIME_LONG_YEAR.exec(timeStr);
+      if (!m) {
+        throw new Error("invalid time");
+      }
+      if (shortYear) {
+        let year = Number(m[1]);
+        year += year >= 50 ? 1900 : 2e3;
+        m[1] = year.toString();
+      }
+      return /* @__PURE__ */ new Date(`${m[1]}-${m[2]}-${m[3]}T${m[4]}:${m[5]}:${m[6]}Z`);
+    }
+    __name(parseTime, "parseTime");
+    function parseOID(buf) {
+      let pos = 0;
+      const end = buf.length;
+      let n = buf[pos++];
+      const first = Math.floor(n / 40);
+      const second = n % 40;
+      let oid = `${first}.${second}`;
+      let val = 0;
+      for (; pos < end; ++pos) {
+        n = buf[pos];
+        val = (val << 7) + (n & 127);
+        if ((n & 128) === 0) {
+          oid += `.${val}`;
+          val = 0;
+        }
+      }
+      return oid;
+    }
+    __name(parseOID, "parseOID");
+    function parseBoolean(buf) {
+      return buf[0] !== 0;
+    }
+    __name(parseBoolean, "parseBoolean");
+    function parseBitString(buf) {
+      const unused = buf[0];
+      const start = 1;
+      const end = buf.length;
+      const bits = [];
+      for (let i = start; i < end; ++i) {
+        const byte = buf[i];
+        const skip = i === end - 1 ? unused : 0;
+        for (let j = 7; j >= skip; --j) {
+          bits.push(byte >> j & 1);
+        }
+      }
+      return bits;
+    }
+    __name(parseBitString, "parseBitString");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/asn1/tag.js
+var require_tag = __commonJS({
+  "node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/asn1/tag.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.ASN1Tag = void 0;
+    var error_1 = require_error2();
+    var UNIVERSAL_TAG = {
+      BOOLEAN: 1,
+      INTEGER: 2,
+      BIT_STRING: 3,
+      OCTET_STRING: 4,
+      OBJECT_IDENTIFIER: 6,
+      SEQUENCE: 16,
+      SET: 17,
+      PRINTABLE_STRING: 19,
+      UTC_TIME: 23,
+      GENERALIZED_TIME: 24
+    };
+    var TAG_CLASS = {
+      UNIVERSAL: 0,
+      APPLICATION: 1,
+      CONTEXT_SPECIFIC: 2,
+      PRIVATE: 3
+    };
+    var ASN1Tag = class {
+      static {
+        __name(this, "ASN1Tag");
+      }
+      number;
+      constructed;
+      class;
+      constructor(enc) {
+        this.number = enc & 31;
+        this.constructed = (enc & 32) === 32;
+        this.class = enc >> 6;
+        if (this.number === 31) {
+          throw new error_1.ASN1ParseError("long form tags not supported");
+        }
+        if (this.class === TAG_CLASS.UNIVERSAL && this.number === 0) {
+          throw new error_1.ASN1ParseError("unsupported tag 0x00");
+        }
+      }
+      isUniversal() {
+        return this.class === TAG_CLASS.UNIVERSAL;
+      }
+      isContextSpecific(num) {
+        const res = this.class === TAG_CLASS.CONTEXT_SPECIFIC;
+        return num !== void 0 ? res && this.number === num : res;
+      }
+      isBoolean() {
+        return this.isUniversal() && this.number === UNIVERSAL_TAG.BOOLEAN;
+      }
+      isInteger() {
+        return this.isUniversal() && this.number === UNIVERSAL_TAG.INTEGER;
+      }
+      isBitString() {
+        return this.isUniversal() && this.number === UNIVERSAL_TAG.BIT_STRING;
+      }
+      isOctetString() {
+        return this.isUniversal() && this.number === UNIVERSAL_TAG.OCTET_STRING;
+      }
+      isOID() {
+        return this.isUniversal() && this.number === UNIVERSAL_TAG.OBJECT_IDENTIFIER;
+      }
+      isUTCTime() {
+        return this.isUniversal() && this.number === UNIVERSAL_TAG.UTC_TIME;
+      }
+      isGeneralizedTime() {
+        return this.isUniversal() && this.number === UNIVERSAL_TAG.GENERALIZED_TIME;
+      }
+      toDER() {
+        return this.number | (this.constructed ? 32 : 0) | this.class << 6;
+      }
+    };
+    exports2.ASN1Tag = ASN1Tag;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/asn1/obj.js
+var require_obj = __commonJS({
+  "node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/asn1/obj.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.ASN1Obj = void 0;
+    var stream_1 = require_stream();
+    var error_1 = require_error2();
+    var length_1 = require_length();
+    var parse_1 = require_parse3();
+    var tag_1 = require_tag();
+    var ASN1Obj = class {
+      static {
+        __name(this, "ASN1Obj");
+      }
+      tag;
+      subs;
+      value;
+      constructor(tag, value, subs) {
+        this.tag = tag;
+        this.value = value;
+        this.subs = subs;
+      }
+      // Constructs an ASN.1 object from a Buffer of DER-encoded bytes.
+      static parseBuffer(buf) {
+        return parseStream(new stream_1.ByteStream(buf));
+      }
+      toDER() {
+        const valueStream = new stream_1.ByteStream();
+        if (this.subs.length > 0) {
+          for (const sub of this.subs) {
+            valueStream.appendView(sub.toDER());
+          }
+        } else {
+          valueStream.appendView(this.value);
+        }
+        const value = valueStream.buffer;
+        const obj = new stream_1.ByteStream();
+        obj.appendChar(this.tag.toDER());
+        obj.appendView((0, length_1.encodeLength)(value.length));
+        obj.appendView(value);
+        return obj.buffer;
+      }
+      /////////////////////////////////////////////////////////////////////////////
+      // Convenience methods for parsing ASN.1 primitives into JS types
+      // Returns the ASN.1 object's value as a boolean. Throws an error if the
+      // object is not a boolean.
+      toBoolean() {
+        if (!this.tag.isBoolean()) {
+          throw new error_1.ASN1TypeError("not a boolean");
+        }
+        return (0, parse_1.parseBoolean)(this.value);
+      }
+      // Returns the ASN.1 object's value as a BigInt. Throws an error if the
+      // object is not an integer.
+      toInteger() {
+        if (!this.tag.isInteger()) {
+          throw new error_1.ASN1TypeError("not an integer");
+        }
+        return (0, parse_1.parseInteger)(this.value);
+      }
+      // Returns the ASN.1 object's value as an OID string. Throws an error if the
+      // object is not an OID.
+      toOID() {
+        if (!this.tag.isOID()) {
+          throw new error_1.ASN1TypeError("not an OID");
+        }
+        return (0, parse_1.parseOID)(this.value);
+      }
+      // Returns the ASN.1 object's value as a Date. Throws an error if the object
+      // is not either a UTCTime or a GeneralizedTime.
+      toDate() {
+        switch (true) {
+          case this.tag.isUTCTime():
+            return (0, parse_1.parseTime)(this.value, true);
+          case this.tag.isGeneralizedTime():
+            return (0, parse_1.parseTime)(this.value, false);
+          default:
+            throw new error_1.ASN1TypeError("not a date");
+        }
+      }
+      // Returns the ASN.1 object's value as a number[] where each number is the
+      // value of a bit in the bit string. Throws an error if the object is not a
+      // bit string.
+      toBitString() {
+        if (!this.tag.isBitString()) {
+          throw new error_1.ASN1TypeError("not a bit string");
+        }
+        return (0, parse_1.parseBitString)(this.value);
+      }
+    };
+    exports2.ASN1Obj = ASN1Obj;
+    function parseStream(stream) {
+      const tag = new tag_1.ASN1Tag(stream.getUint8());
+      const len = (0, length_1.decodeLength)(stream);
+      const value = stream.slice(stream.position, len);
+      const start = stream.position;
+      let subs = [];
+      if (tag.constructed) {
+        subs = collectSubs(stream, len);
+      } else if (tag.isOctetString()) {
+        try {
+          subs = collectSubs(stream, len);
+        } catch (e) {
+        }
+      }
+      if (subs.length === 0) {
+        stream.seek(start + len);
+      }
+      return new ASN1Obj(tag, value, subs);
+    }
+    __name(parseStream, "parseStream");
+    function collectSubs(stream, len) {
+      const end = stream.position + len;
+      if (end > stream.length) {
+        throw new error_1.ASN1ParseError("invalid length");
+      }
+      const subs = [];
+      while (stream.position < end) {
+        subs.push(parseStream(stream));
+      }
+      if (stream.position !== end) {
+        throw new error_1.ASN1ParseError("invalid length");
+      }
+      return subs;
+    }
+    __name(collectSubs, "collectSubs");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/asn1/index.js
+var require_asn1 = __commonJS({
+  "node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/asn1/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.ASN1Obj = void 0;
+    var obj_1 = require_obj();
+    Object.defineProperty(exports2, "ASN1Obj", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return obj_1.ASN1Obj;
+    }, "get") });
+  }
+});
+
+// node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/crypto.js
+var require_crypto = __commonJS({
+  "node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/crypto.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.createPublicKey = createPublicKey;
+    exports2.digest = digest;
+    exports2.verify = verify;
+    exports2.bufferEqual = bufferEqual;
+    var crypto_1 = __importDefault(require("crypto"));
+    function createPublicKey(key, type = "spki") {
+      if (typeof key === "string") {
+        return crypto_1.default.createPublicKey(key);
+      } else {
+        return crypto_1.default.createPublicKey({ key, format: "der", type });
+      }
+    }
+    __name(createPublicKey, "createPublicKey");
+    function digest(algorithm, ...data) {
+      const hash = crypto_1.default.createHash(algorithm);
+      for (const d of data) {
+        hash.update(d);
+      }
+      return hash.digest();
+    }
+    __name(digest, "digest");
+    function verify(data, key, signature, algorithm) {
+      try {
+        return crypto_1.default.verify(algorithm, data, key, signature);
+      } catch (e) {
+        return false;
+      }
+    }
+    __name(verify, "verify");
+    function bufferEqual(a, b) {
+      try {
+        return crypto_1.default.timingSafeEqual(a, b);
+      } catch {
+        return false;
+      }
+    }
+    __name(bufferEqual, "bufferEqual");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/dsse.js
+var require_dsse = __commonJS({
+  "node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/dsse.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.preAuthEncoding = preAuthEncoding;
+    var PAE_PREFIX = "DSSEv1";
+    function preAuthEncoding(payloadType, payload) {
+      const prefix = [
+        PAE_PREFIX,
+        payloadType.length,
+        payloadType,
+        payload.length,
+        ""
+      ].join(" ");
+      return Buffer.concat([Buffer.from(prefix, "ascii"), payload]);
+    }
+    __name(preAuthEncoding, "preAuthEncoding");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/encoding.js
+var require_encoding3 = __commonJS({
+  "node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/encoding.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.base64Encode = base64Encode;
+    exports2.base64Decode = base64Decode;
+    var BASE64_ENCODING = "base64";
+    var UTF8_ENCODING = "utf-8";
+    function base64Encode(str) {
+      return Buffer.from(str, UTF8_ENCODING).toString(BASE64_ENCODING);
+    }
+    __name(base64Encode, "base64Encode");
+    function base64Decode(str) {
+      return Buffer.from(str, BASE64_ENCODING).toString(UTF8_ENCODING);
+    }
+    __name(base64Decode, "base64Decode");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/json.js
+var require_json = __commonJS({
+  "node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/json.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.canonicalize = canonicalize;
+    function canonicalize(object) {
+      let buffer = "";
+      if (object === null || typeof object !== "object" || object.toJSON != null) {
+        buffer += JSON.stringify(object);
+      } else if (Array.isArray(object)) {
+        buffer += "[";
+        let first = true;
+        object.forEach((element) => {
+          if (!first) {
+            buffer += ",";
+          }
+          first = false;
+          buffer += canonicalize(element);
+        });
+        buffer += "]";
+      } else {
+        buffer += "{";
+        let first = true;
+        Object.keys(object).sort().forEach((property) => {
+          if (!first) {
+            buffer += ",";
+          }
+          first = false;
+          buffer += JSON.stringify(property);
+          buffer += ":";
+          buffer += canonicalize(object[property]);
+        });
+        buffer += "}";
+      }
+      return buffer;
+    }
+    __name(canonicalize, "canonicalize");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/pem.js
+var require_pem = __commonJS({
+  "node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/pem.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.toDER = toDER;
+    exports2.fromDER = fromDER;
+    var PEM_HEADER = /-----BEGIN (.*)-----/;
+    var PEM_FOOTER = /-----END (.*)-----/;
+    function toDER(certificate) {
+      let der = "";
+      certificate.split("\n").forEach((line) => {
+        if (line.match(PEM_HEADER) || line.match(PEM_FOOTER)) {
+          return;
+        }
+        der += line;
+      });
+      return Buffer.from(der, "base64");
+    }
+    __name(toDER, "toDER");
+    function fromDER(certificate, type = "CERTIFICATE") {
+      const der = certificate.toString("base64");
+      const lines = der.match(/.{1,64}/g) || "";
+      return [`-----BEGIN ${type}-----`, ...lines, `-----END ${type}-----`].join("\n").concat("\n");
+    }
+    __name(fromDER, "fromDER");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/oid.js
+var require_oid = __commonJS({
+  "node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/oid.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.SHA2_HASH_ALGOS = exports2.RSA_SIGNATURE_ALGOS = exports2.ECDSA_SIGNATURE_ALGOS = void 0;
+    exports2.ECDSA_SIGNATURE_ALGOS = {
+      "1.2.840.10045.4.3.1": "sha224",
+      "1.2.840.10045.4.3.2": "sha256",
+      "1.2.840.10045.4.3.3": "sha384",
+      "1.2.840.10045.4.3.4": "sha512"
+    };
+    exports2.RSA_SIGNATURE_ALGOS = {
+      "1.2.840.113549.1.1.14": "sha224",
+      "1.2.840.113549.1.1.11": "sha256",
+      "1.2.840.113549.1.1.12": "sha384",
+      "1.2.840.113549.1.1.13": "sha512"
+    };
+    exports2.SHA2_HASH_ALGOS = {
+      "2.16.840.1.101.3.4.2.1": "sha256",
+      "2.16.840.1.101.3.4.2.2": "sha384",
+      "2.16.840.1.101.3.4.2.3": "sha512"
+    };
+  }
+});
+
+// node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/rfc3161/error.js
+var require_error3 = __commonJS({
+  "node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/rfc3161/error.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.RFC3161TimestampVerificationError = void 0;
+    var RFC3161TimestampVerificationError = class extends Error {
+      static {
+        __name(this, "RFC3161TimestampVerificationError");
+      }
+    };
+    exports2.RFC3161TimestampVerificationError = RFC3161TimestampVerificationError;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/rfc3161/tstinfo.js
+var require_tstinfo = __commonJS({
+  "node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/rfc3161/tstinfo.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
+      var ownKeys = /* @__PURE__ */ __name(function(o) {
+        ownKeys = Object.getOwnPropertyNames || function(o2) {
+          var ar = [];
+          for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
+          return ar;
+        };
+        return ownKeys(o);
+      }, "ownKeys");
+      return function(mod) {
+        if (mod && mod.__esModule) return mod;
+        var result = {};
+        if (mod != null) {
+          for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+        }
+        __setModuleDefault(result, mod);
+        return result;
+      };
+    })();
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.TSTInfo = void 0;
+    var crypto = __importStar(require_crypto());
+    var oid_1 = require_oid();
+    var error_1 = require_error3();
+    var TSTInfo = class {
+      static {
+        __name(this, "TSTInfo");
+      }
+      root;
+      constructor(asn1) {
+        this.root = asn1;
+      }
+      get version() {
+        return this.root.subs[0].toInteger();
+      }
+      get genTime() {
+        return this.root.subs[4].toDate();
+      }
+      get messageImprintHashAlgorithm() {
+        const oid = this.messageImprintObj.subs[0].subs[0].toOID();
+        return oid_1.SHA2_HASH_ALGOS[oid];
+      }
+      get messageImprintHashedMessage() {
+        return this.messageImprintObj.subs[1].value;
+      }
+      get raw() {
+        return this.root.toDER();
+      }
+      verify(data) {
+        const digest = crypto.digest(this.messageImprintHashAlgorithm, data);
+        if (!crypto.bufferEqual(digest, this.messageImprintHashedMessage)) {
+          throw new error_1.RFC3161TimestampVerificationError("message imprint does not match artifact");
+        }
+      }
+      // https://www.rfc-editor.org/rfc/rfc3161#section-2.4.2
+      get messageImprintObj() {
+        return this.root.subs[2];
+      }
+    };
+    exports2.TSTInfo = TSTInfo;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/rfc3161/timestamp.js
+var require_timestamp2 = __commonJS({
+  "node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/rfc3161/timestamp.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
+      var ownKeys = /* @__PURE__ */ __name(function(o) {
+        ownKeys = Object.getOwnPropertyNames || function(o2) {
+          var ar = [];
+          for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
+          return ar;
+        };
+        return ownKeys(o);
+      }, "ownKeys");
+      return function(mod) {
+        if (mod && mod.__esModule) return mod;
+        var result = {};
+        if (mod != null) {
+          for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+        }
+        __setModuleDefault(result, mod);
+        return result;
+      };
+    })();
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.RFC3161Timestamp = void 0;
+    var asn1_1 = require_asn1();
+    var crypto = __importStar(require_crypto());
+    var oid_1 = require_oid();
+    var error_1 = require_error3();
+    var tstinfo_1 = require_tstinfo();
+    var OID_PKCS9_CONTENT_TYPE_SIGNED_DATA = "1.2.840.113549.1.7.2";
+    var OID_PKCS9_CONTENT_TYPE_TSTINFO = "1.2.840.113549.1.9.16.1.4";
+    var OID_PKCS9_MESSAGE_DIGEST_KEY = "1.2.840.113549.1.9.4";
+    var RFC3161Timestamp = class _RFC3161Timestamp {
+      static {
+        __name(this, "RFC3161Timestamp");
+      }
+      root;
+      constructor(asn1) {
+        this.root = asn1;
+      }
+      static parse(der) {
+        const asn1 = asn1_1.ASN1Obj.parseBuffer(der);
+        return new _RFC3161Timestamp(asn1);
+      }
+      get status() {
+        return this.pkiStatusInfoObj.subs[0].toInteger();
+      }
+      get contentType() {
+        return this.contentTypeObj.toOID();
+      }
+      get eContentType() {
+        return this.eContentTypeObj.toOID();
+      }
+      get signingTime() {
+        return this.tstInfo.genTime;
+      }
+      get signerIssuer() {
+        return this.signerSidObj.subs[0].value;
+      }
+      get signerSerialNumber() {
+        return this.signerSidObj.subs[1].value;
+      }
+      get signerDigestAlgorithm() {
+        const oid = this.signerDigestAlgorithmObj.subs[0].toOID();
+        return oid_1.SHA2_HASH_ALGOS[oid];
+      }
+      get signatureAlgorithm() {
+        const oid = this.signatureAlgorithmObj.subs[0].toOID();
+        return oid_1.ECDSA_SIGNATURE_ALGOS[oid];
+      }
+      get signatureValue() {
+        return this.signatureValueObj.value;
+      }
+      get tstInfo() {
+        return new tstinfo_1.TSTInfo(this.eContentObj.subs[0].subs[0]);
+      }
+      verify(data, publicKey) {
+        if (!this.timeStampTokenObj) {
+          throw new error_1.RFC3161TimestampVerificationError("timeStampToken is missing");
+        }
+        if (this.contentType !== OID_PKCS9_CONTENT_TYPE_SIGNED_DATA) {
+          throw new error_1.RFC3161TimestampVerificationError(`incorrect content type: ${this.contentType}`);
+        }
+        if (this.eContentType !== OID_PKCS9_CONTENT_TYPE_TSTINFO) {
+          throw new error_1.RFC3161TimestampVerificationError(`incorrect encapsulated content type: ${this.eContentType}`);
+        }
+        this.tstInfo.verify(data);
+        this.verifyMessageDigest();
+        this.verifySignature(publicKey);
+      }
+      verifyMessageDigest() {
+        const tstInfoDigest = crypto.digest(this.signerDigestAlgorithm, this.tstInfo.raw);
+        const expectedDigest = this.messageDigestAttributeObj.subs[1].subs[0].value;
+        if (!crypto.bufferEqual(tstInfoDigest, expectedDigest)) {
+          throw new error_1.RFC3161TimestampVerificationError("signed data does not match tstInfo");
+        }
+      }
+      verifySignature(key) {
+        const signedAttrs = this.signedAttrsObj.toDER();
+        signedAttrs[0] = 49;
+        const verified = crypto.verify(signedAttrs, key, this.signatureValue, this.signatureAlgorithm);
+        if (!verified) {
+          throw new error_1.RFC3161TimestampVerificationError("signature verification failed");
+        }
+      }
+      // https://www.rfc-editor.org/rfc/rfc3161#section-2.4.2
+      get pkiStatusInfoObj() {
+        return this.root.subs[0];
+      }
+      // https://www.rfc-editor.org/rfc/rfc3161#section-2.4.2
+      get timeStampTokenObj() {
+        return this.root.subs[1];
+      }
+      // https://datatracker.ietf.org/doc/html/rfc5652#section-3
+      get contentTypeObj() {
+        return this.timeStampTokenObj.subs[0];
+      }
+      // https://www.rfc-editor.org/rfc/rfc5652#section-3
+      get signedDataObj() {
+        const obj = this.timeStampTokenObj.subs.find((sub) => sub.tag.isContextSpecific(0));
+        return obj.subs[0];
+      }
+      // https://datatracker.ietf.org/doc/html/rfc5652#section-5.1
+      get encapContentInfoObj() {
+        return this.signedDataObj.subs[2];
+      }
+      // https://datatracker.ietf.org/doc/html/rfc5652#section-5.1
+      get signerInfosObj() {
+        const sd = this.signedDataObj;
+        return sd.subs[sd.subs.length - 1];
+      }
+      // https://www.rfc-editor.org/rfc/rfc5652#section-5.1
+      get signerInfoObj() {
+        return this.signerInfosObj.subs[0];
+      }
+      // https://datatracker.ietf.org/doc/html/rfc5652#section-5.2
+      get eContentTypeObj() {
+        return this.encapContentInfoObj.subs[0];
+      }
+      // https://datatracker.ietf.org/doc/html/rfc5652#section-5.2
+      get eContentObj() {
+        return this.encapContentInfoObj.subs[1];
+      }
+      // https://datatracker.ietf.org/doc/html/rfc5652#section-5.3
+      get signedAttrsObj() {
+        const signedAttrs = this.signerInfoObj.subs.find((sub) => sub.tag.isContextSpecific(0));
+        return signedAttrs;
+      }
+      // https://datatracker.ietf.org/doc/html/rfc5652#section-5.3
+      get messageDigestAttributeObj() {
+        const messageDigest = this.signedAttrsObj.subs.find((sub) => sub.subs[0].tag.isOID() && sub.subs[0].toOID() === OID_PKCS9_MESSAGE_DIGEST_KEY);
+        return messageDigest;
+      }
+      // https://datatracker.ietf.org/doc/html/rfc5652#section-5.3
+      get signerSidObj() {
+        return this.signerInfoObj.subs[1];
+      }
+      // https://datatracker.ietf.org/doc/html/rfc5652#section-5.3
+      get signerDigestAlgorithmObj() {
+        return this.signerInfoObj.subs[2];
+      }
+      // https://datatracker.ietf.org/doc/html/rfc5652#section-5.3
+      get signatureAlgorithmObj() {
+        return this.signerInfoObj.subs[4];
+      }
+      // https://datatracker.ietf.org/doc/html/rfc5652#section-5.3
+      get signatureValueObj() {
+        return this.signerInfoObj.subs[5];
+      }
+    };
+    exports2.RFC3161Timestamp = RFC3161Timestamp;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/rfc3161/index.js
+var require_rfc3161 = __commonJS({
+  "node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/rfc3161/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.RFC3161Timestamp = void 0;
+    var timestamp_1 = require_timestamp2();
+    Object.defineProperty(exports2, "RFC3161Timestamp", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return timestamp_1.RFC3161Timestamp;
+    }, "get") });
+  }
+});
+
+// node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/x509/sct.js
+var require_sct = __commonJS({
+  "node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/x509/sct.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
+      var ownKeys = /* @__PURE__ */ __name(function(o) {
+        ownKeys = Object.getOwnPropertyNames || function(o2) {
+          var ar = [];
+          for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
+          return ar;
+        };
+        return ownKeys(o);
+      }, "ownKeys");
+      return function(mod) {
+        if (mod && mod.__esModule) return mod;
+        var result = {};
+        if (mod != null) {
+          for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+        }
+        __setModuleDefault(result, mod);
+        return result;
+      };
+    })();
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.SignedCertificateTimestamp = void 0;
+    var crypto = __importStar(require_crypto());
+    var stream_1 = require_stream();
+    var SignedCertificateTimestamp = class _SignedCertificateTimestamp {
+      static {
+        __name(this, "SignedCertificateTimestamp");
+      }
+      version;
+      logID;
+      timestamp;
+      extensions;
+      hashAlgorithm;
+      signatureAlgorithm;
+      signature;
+      constructor(options) {
+        this.version = options.version;
+        this.logID = options.logID;
+        this.timestamp = options.timestamp;
+        this.extensions = options.extensions;
+        this.hashAlgorithm = options.hashAlgorithm;
+        this.signatureAlgorithm = options.signatureAlgorithm;
+        this.signature = options.signature;
+      }
+      get datetime() {
+        return new Date(Number(this.timestamp.readBigInt64BE()));
+      }
+      // Returns the hash algorithm used to generate the SCT's signature.
+      // https://www.rfc-editor.org/rfc/rfc5246#section-7.4.1.4.1
+      get algorithm() {
+        switch (this.hashAlgorithm) {
+          /* istanbul ignore next */
+          case 0:
+            return "none";
+          /* istanbul ignore next */
+          case 1:
+            return "md5";
+          /* istanbul ignore next */
+          case 2:
+            return "sha1";
+          /* istanbul ignore next */
+          case 3:
+            return "sha224";
+          case 4:
+            return "sha256";
+          /* istanbul ignore next */
+          case 5:
+            return "sha384";
+          /* istanbul ignore next */
+          case 6:
+            return "sha512";
+          /* istanbul ignore next */
+          default:
+            return "unknown";
+        }
+      }
+      verify(preCert, key) {
+        const stream = new stream_1.ByteStream();
+        stream.appendChar(this.version);
+        stream.appendChar(0);
+        stream.appendView(this.timestamp);
+        stream.appendUint16(1);
+        stream.appendView(preCert);
+        stream.appendUint16(this.extensions.byteLength);
+        if (this.extensions.byteLength > 0) {
+          stream.appendView(this.extensions);
+        }
+        return crypto.verify(stream.buffer, key, this.signature, this.algorithm);
+      }
+      // Parses a SignedCertificateTimestamp from a buffer. SCTs are encoded using
+      // TLS encoding which means the fields and lengths of most fields are
+      // specified as part of the SCT and TLS specs.
+      // https://www.rfc-editor.org/rfc/rfc6962#section-3.2
+      // https://www.rfc-editor.org/rfc/rfc5246#section-7.4.1.4.1
+      static parse(buf) {
+        const stream = new stream_1.ByteStream(buf);
+        const version = stream.getUint8();
+        const logID = stream.getBlock(32);
+        const timestamp = stream.getBlock(8);
+        const extenstionLength = stream.getUint16();
+        const extensions = stream.getBlock(extenstionLength);
+        const hashAlgorithm = stream.getUint8();
+        const signatureAlgorithm = stream.getUint8();
+        const sigLength = stream.getUint16();
+        const signature = stream.getBlock(sigLength);
+        if (stream.position !== buf.length) {
+          throw new Error("SCT buffer length mismatch");
+        }
+        return new _SignedCertificateTimestamp({
+          version,
+          logID,
+          timestamp,
+          extensions,
+          hashAlgorithm,
+          signatureAlgorithm,
+          signature
+        });
+      }
+    };
+    exports2.SignedCertificateTimestamp = SignedCertificateTimestamp;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/x509/ext.js
+var require_ext = __commonJS({
+  "node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/x509/ext.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.X509SCTExtension = exports2.X509SubjectKeyIDExtension = exports2.X509AuthorityKeyIDExtension = exports2.X509SubjectAlternativeNameExtension = exports2.X509KeyUsageExtension = exports2.X509BasicConstraintsExtension = exports2.X509Extension = void 0;
+    var stream_1 = require_stream();
+    var sct_1 = require_sct();
+    var X509Extension = class {
+      static {
+        __name(this, "X509Extension");
+      }
+      root;
+      constructor(asn1) {
+        this.root = asn1;
+      }
+      get oid() {
+        return this.root.subs[0].toOID();
+      }
+      get critical() {
+        return this.root.subs.length === 3 ? this.root.subs[1].toBoolean() : false;
+      }
+      get value() {
+        return this.extnValueObj.value;
+      }
+      get valueObj() {
+        return this.extnValueObj;
+      }
+      get extnValueObj() {
+        return this.root.subs[this.root.subs.length - 1];
+      }
+    };
+    exports2.X509Extension = X509Extension;
+    var X509BasicConstraintsExtension = class extends X509Extension {
+      static {
+        __name(this, "X509BasicConstraintsExtension");
+      }
+      get isCA() {
+        return this.sequence.subs[0]?.toBoolean() ?? false;
+      }
+      get pathLenConstraint() {
+        return this.sequence.subs.length > 1 ? this.sequence.subs[1].toInteger() : void 0;
+      }
+      // The extnValue field contains a single sequence wrapping the isCA and
+      // pathLenConstraint.
+      get sequence() {
+        return this.extnValueObj.subs[0];
+      }
+    };
+    exports2.X509BasicConstraintsExtension = X509BasicConstraintsExtension;
+    var X509KeyUsageExtension = class extends X509Extension {
+      static {
+        __name(this, "X509KeyUsageExtension");
+      }
+      get digitalSignature() {
+        return this.bitString[0] === 1;
+      }
+      get keyCertSign() {
+        return this.bitString[5] === 1;
+      }
+      get crlSign() {
+        return this.bitString[6] === 1;
+      }
+      // The extnValue field contains a single bit string which is a bit mask
+      // indicating which key usages are enabled.
+      get bitString() {
+        return this.extnValueObj.subs[0].toBitString();
+      }
+    };
+    exports2.X509KeyUsageExtension = X509KeyUsageExtension;
+    var X509SubjectAlternativeNameExtension = class extends X509Extension {
+      static {
+        __name(this, "X509SubjectAlternativeNameExtension");
+      }
+      get rfc822Name() {
+        return this.findGeneralName(1)?.value.toString("ascii");
+      }
+      get uri() {
+        return this.findGeneralName(6)?.value.toString("ascii");
+      }
+      // Retrieve the value of an otherName with the given OID.
+      otherName(oid) {
+        const otherName = this.findGeneralName(0);
+        if (otherName === void 0) {
+          return void 0;
+        }
+        const otherNameOID = otherName.subs[0].toOID();
+        if (otherNameOID !== oid) {
+          return void 0;
+        }
+        const otherNameValue = otherName.subs[1];
+        return otherNameValue.subs[0].value.toString("ascii");
+      }
+      findGeneralName(tag) {
+        return this.generalNames.find((gn) => gn.tag.isContextSpecific(tag));
+      }
+      // The extnValue field contains a sequence of GeneralNames.
+      get generalNames() {
+        return this.extnValueObj.subs[0].subs;
+      }
+    };
+    exports2.X509SubjectAlternativeNameExtension = X509SubjectAlternativeNameExtension;
+    var X509AuthorityKeyIDExtension = class extends X509Extension {
+      static {
+        __name(this, "X509AuthorityKeyIDExtension");
+      }
+      get keyIdentifier() {
+        return this.findSequenceMember(0)?.value;
+      }
+      findSequenceMember(tag) {
+        return this.sequence.subs.find((el) => el.tag.isContextSpecific(tag));
+      }
+      // The extnValue field contains a single sequence wrapping the keyIdentifier
+      get sequence() {
+        return this.extnValueObj.subs[0];
+      }
+    };
+    exports2.X509AuthorityKeyIDExtension = X509AuthorityKeyIDExtension;
+    var X509SubjectKeyIDExtension = class extends X509Extension {
+      static {
+        __name(this, "X509SubjectKeyIDExtension");
+      }
+      get keyIdentifier() {
+        return this.extnValueObj.subs[0].value;
+      }
+    };
+    exports2.X509SubjectKeyIDExtension = X509SubjectKeyIDExtension;
+    var X509SCTExtension = class extends X509Extension {
+      static {
+        __name(this, "X509SCTExtension");
+      }
+      constructor(asn1) {
+        super(asn1);
+      }
+      get signedCertificateTimestamps() {
+        const buf = this.extnValueObj.subs[0].value;
+        const stream = new stream_1.ByteStream(buf);
+        const end = stream.getUint16() + 2;
+        const sctList = [];
+        while (stream.position < end) {
+          const sctLength = stream.getUint16();
+          const sct = stream.getBlock(sctLength);
+          sctList.push(sct_1.SignedCertificateTimestamp.parse(sct));
+        }
+        if (stream.position !== end) {
+          throw new Error("SCT list length does not match actual length");
+        }
+        return sctList;
+      }
+    };
+    exports2.X509SCTExtension = X509SCTExtension;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/x509/cert.js
+var require_cert = __commonJS({
+  "node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/x509/cert.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
+      var ownKeys = /* @__PURE__ */ __name(function(o) {
+        ownKeys = Object.getOwnPropertyNames || function(o2) {
+          var ar = [];
+          for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
+          return ar;
+        };
+        return ownKeys(o);
+      }, "ownKeys");
+      return function(mod) {
+        if (mod && mod.__esModule) return mod;
+        var result = {};
+        if (mod != null) {
+          for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+        }
+        __setModuleDefault(result, mod);
+        return result;
+      };
+    })();
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.X509Certificate = exports2.EXTENSION_OID_SCT = void 0;
+    var asn1_1 = require_asn1();
+    var crypto = __importStar(require_crypto());
+    var oid_1 = require_oid();
+    var pem = __importStar(require_pem());
+    var ext_1 = require_ext();
+    var EXTENSION_OID_SUBJECT_KEY_ID = "2.5.29.14";
+    var EXTENSION_OID_KEY_USAGE = "2.5.29.15";
+    var EXTENSION_OID_SUBJECT_ALT_NAME = "2.5.29.17";
+    var EXTENSION_OID_BASIC_CONSTRAINTS = "2.5.29.19";
+    var EXTENSION_OID_AUTHORITY_KEY_ID = "2.5.29.35";
+    exports2.EXTENSION_OID_SCT = "1.3.6.1.4.1.11129.2.4.2";
+    var X509Certificate = class _X509Certificate {
+      static {
+        __name(this, "X509Certificate");
+      }
+      root;
+      constructor(asn1) {
+        this.root = asn1;
+      }
+      static parse(cert) {
+        const der = typeof cert === "string" ? pem.toDER(cert) : cert;
+        const asn1 = asn1_1.ASN1Obj.parseBuffer(der);
+        return new _X509Certificate(asn1);
+      }
+      get tbsCertificate() {
+        return this.tbsCertificateObj;
+      }
+      get version() {
+        const ver = this.versionObj.subs[0].toInteger();
+        return `v${(ver + BigInt(1)).toString()}`;
+      }
+      get serialNumber() {
+        return this.serialNumberObj.value;
+      }
+      get notBefore() {
+        return this.validityObj.subs[0].toDate();
+      }
+      get notAfter() {
+        return this.validityObj.subs[1].toDate();
+      }
+      get issuer() {
+        return this.issuerObj.value;
+      }
+      get subject() {
+        return this.subjectObj.value;
+      }
+      get publicKey() {
+        return this.subjectPublicKeyInfoObj.toDER();
+      }
+      get signatureAlgorithm() {
+        const oid = this.signatureAlgorithmObj.subs[0].toOID();
+        if (oid_1.RSA_SIGNATURE_ALGOS[oid]) {
+          return oid_1.RSA_SIGNATURE_ALGOS[oid];
+        }
+        return oid_1.ECDSA_SIGNATURE_ALGOS[oid];
+      }
+      get signatureValue() {
+        return this.signatureValueObj.value.subarray(1);
+      }
+      get subjectAltName() {
+        const ext = this.extSubjectAltName;
+        return ext?.uri || /* istanbul ignore next */
+        ext?.rfc822Name;
+      }
+      get extensions() {
+        const extSeq = this.extensionsObj?.subs[0];
+        return extSeq?.subs || [];
+      }
+      get extKeyUsage() {
+        const ext = this.findExtension(EXTENSION_OID_KEY_USAGE);
+        return ext ? new ext_1.X509KeyUsageExtension(ext) : void 0;
+      }
+      get extBasicConstraints() {
+        const ext = this.findExtension(EXTENSION_OID_BASIC_CONSTRAINTS);
+        return ext ? new ext_1.X509BasicConstraintsExtension(ext) : void 0;
+      }
+      get extSubjectAltName() {
+        const ext = this.findExtension(EXTENSION_OID_SUBJECT_ALT_NAME);
+        return ext ? new ext_1.X509SubjectAlternativeNameExtension(ext) : void 0;
+      }
+      get extAuthorityKeyID() {
+        const ext = this.findExtension(EXTENSION_OID_AUTHORITY_KEY_ID);
+        return ext ? new ext_1.X509AuthorityKeyIDExtension(ext) : void 0;
+      }
+      get extSubjectKeyID() {
+        const ext = this.findExtension(EXTENSION_OID_SUBJECT_KEY_ID);
+        return ext ? new ext_1.X509SubjectKeyIDExtension(ext) : (
+          /* istanbul ignore next */
+          void 0
+        );
+      }
+      get extSCT() {
+        const ext = this.findExtension(exports2.EXTENSION_OID_SCT);
+        return ext ? new ext_1.X509SCTExtension(ext) : void 0;
+      }
+      get isCA() {
+        const ca = this.extBasicConstraints?.isCA || false;
+        if (this.extKeyUsage) {
+          return ca && this.extKeyUsage.keyCertSign;
+        }
+        return ca;
+      }
+      extension(oid) {
+        const ext = this.findExtension(oid);
+        return ext ? new ext_1.X509Extension(ext) : void 0;
+      }
+      verify(issuerCertificate) {
+        const publicKey = issuerCertificate?.publicKey || this.publicKey;
+        const key = crypto.createPublicKey(publicKey);
+        return crypto.verify(this.tbsCertificate.toDER(), key, this.signatureValue, this.signatureAlgorithm);
+      }
+      validForDate(date) {
+        return this.notBefore <= date && date <= this.notAfter;
+      }
+      equals(other) {
+        return this.root.toDER().equals(other.root.toDER());
+      }
+      // Creates a copy of the certificate with a new buffer
+      clone() {
+        const der = this.root.toDER();
+        const clone = Buffer.alloc(der.length);
+        der.copy(clone);
+        return _X509Certificate.parse(clone);
+      }
+      findExtension(oid) {
+        return this.extensions.find((ext) => ext.subs[0].toOID() === oid);
+      }
+      /////////////////////////////////////////////////////////////////////////////
+      // The following properties use the documented x509 structure to locate the
+      // desired ASN.1 object
+      // https://www.rfc-editor.org/rfc/rfc5280#section-4.1
+      // https://www.rfc-editor.org/rfc/rfc5280#section-4.1.1.1
+      get tbsCertificateObj() {
+        return this.root.subs[0];
+      }
+      // https://www.rfc-editor.org/rfc/rfc5280#section-4.1.1.2
+      get signatureAlgorithmObj() {
+        return this.root.subs[1];
+      }
+      // https://www.rfc-editor.org/rfc/rfc5280#section-4.1.1.3
+      get signatureValueObj() {
+        return this.root.subs[2];
+      }
+      // https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.1
+      get versionObj() {
+        return this.tbsCertificateObj.subs[0];
+      }
+      // https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.2
+      get serialNumberObj() {
+        return this.tbsCertificateObj.subs[1];
+      }
+      // https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.4
+      get issuerObj() {
+        return this.tbsCertificateObj.subs[3];
+      }
+      // https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.5
+      get validityObj() {
+        return this.tbsCertificateObj.subs[4];
+      }
+      // https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.6
+      get subjectObj() {
+        return this.tbsCertificateObj.subs[5];
+      }
+      // https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.7
+      get subjectPublicKeyInfoObj() {
+        return this.tbsCertificateObj.subs[6];
+      }
+      // Extensions can't be located by index because their position varies. Instead,
+      // we need to find the extensions context specific tag
+      // https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.9
+      get extensionsObj() {
+        return this.tbsCertificateObj.subs.find((sub) => sub.tag.isContextSpecific(3));
+      }
+    };
+    exports2.X509Certificate = X509Certificate;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/x509/index.js
+var require_x509 = __commonJS({
+  "node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/x509/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.X509SCTExtension = exports2.X509Certificate = exports2.EXTENSION_OID_SCT = void 0;
+    var cert_1 = require_cert();
+    Object.defineProperty(exports2, "EXTENSION_OID_SCT", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return cert_1.EXTENSION_OID_SCT;
+    }, "get") });
+    Object.defineProperty(exports2, "X509Certificate", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return cert_1.X509Certificate;
+    }, "get") });
+    var ext_1 = require_ext();
+    Object.defineProperty(exports2, "X509SCTExtension", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return ext_1.X509SCTExtension;
+    }, "get") });
+  }
+});
+
+// node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/index.js
+var require_dist7 = __commonJS({
+  "node_modules/.pnpm/@sigstore+core@3.1.0/node_modules/@sigstore/core/dist/index.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
+      var ownKeys = /* @__PURE__ */ __name(function(o) {
+        ownKeys = Object.getOwnPropertyNames || function(o2) {
+          var ar = [];
+          for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
+          return ar;
+        };
+        return ownKeys(o);
+      }, "ownKeys");
+      return function(mod) {
+        if (mod && mod.__esModule) return mod;
+        var result = {};
+        if (mod != null) {
+          for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+        }
+        __setModuleDefault(result, mod);
+        return result;
+      };
+    })();
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.X509SCTExtension = exports2.X509Certificate = exports2.EXTENSION_OID_SCT = exports2.ByteStream = exports2.RFC3161Timestamp = exports2.pem = exports2.json = exports2.encoding = exports2.dsse = exports2.crypto = exports2.ASN1Obj = void 0;
+    var asn1_1 = require_asn1();
+    Object.defineProperty(exports2, "ASN1Obj", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return asn1_1.ASN1Obj;
+    }, "get") });
+    exports2.crypto = __importStar(require_crypto());
+    exports2.dsse = __importStar(require_dsse());
+    exports2.encoding = __importStar(require_encoding3());
+    exports2.json = __importStar(require_json());
+    exports2.pem = __importStar(require_pem());
+    var rfc3161_1 = require_rfc3161();
+    Object.defineProperty(exports2, "RFC3161Timestamp", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return rfc3161_1.RFC3161Timestamp;
+    }, "get") });
+    var stream_1 = require_stream();
+    Object.defineProperty(exports2, "ByteStream", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return stream_1.ByteStream;
+    }, "get") });
+    var x509_1 = require_x509();
+    Object.defineProperty(exports2, "EXTENSION_OID_SCT", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return x509_1.EXTENSION_OID_SCT;
+    }, "get") });
+    Object.defineProperty(exports2, "X509Certificate", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return x509_1.X509Certificate;
+    }, "get") });
+    Object.defineProperty(exports2, "X509SCTExtension", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return x509_1.X509SCTExtension;
+    }, "get") });
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/util/oidc.js
+var require_oidc = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/util/oidc.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.extractJWTSubject = extractJWTSubject;
+    var core_1 = require_dist7();
+    function extractJWTSubject(jwt) {
+      const parts = jwt.split(".", 3);
+      const payload = JSON.parse(core_1.encoding.base64Decode(parts[1]));
+      if (payload.email) {
+        if (!payload.email_verified) {
+          throw new Error("JWT email not verified by issuer");
+        }
+        return payload.email;
+      }
+      if (payload.sub) {
+        return payload.sub;
+      } else {
+        throw new Error("JWT subject not found");
+      }
+    }
+    __name(extractJWTSubject, "extractJWTSubject");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/package.json
+var require_package6 = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/package.json"(exports2, module2) {
+    module2.exports = {
+      name: "@sigstore/sign",
+      version: "4.1.0",
+      description: "Sigstore signing library",
+      main: "dist/index.js",
+      types: "dist/index.d.ts",
+      scripts: {
+        clean: "shx rm -rf dist *.tsbuildinfo",
+        build: "tsc --build",
+        test: "jest"
+      },
+      files: [
+        "dist"
+      ],
+      author: "bdehamer@github.com",
+      license: "Apache-2.0",
+      repository: {
+        type: "git",
+        url: "git+https://github.com/sigstore/sigstore-js.git"
+      },
+      bugs: {
+        url: "https://github.com/sigstore/sigstore-js/issues"
+      },
+      homepage: "https://github.com/sigstore/sigstore-js/tree/main/packages/sign#readme",
+      publishConfig: {
+        provenance: true
+      },
+      devDependencies: {
+        "@sigstore/jest": "^0.0.0",
+        "@sigstore/mock": "^0.11.0",
+        "@sigstore/rekor-types": "^4.0.0",
+        "@types/make-fetch-happen": "^10.0.4",
+        "@types/promise-retry": "^1.1.6"
+      },
+      dependencies: {
+        "@sigstore/bundle": "^4.0.0",
+        "@sigstore/core": "^3.1.0",
+        "@sigstore/protobuf-specs": "^0.5.0",
+        "make-fetch-happen": "^15.0.3",
+        "proc-log": "^6.1.0",
+        "promise-retry": "^2.0.1"
+      },
+      engines: {
+        node: "^20.17.0 || >=22.9.0"
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/util/ua.js
+var require_ua = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/util/ua.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.getUserAgent = void 0;
+    var os_1 = __importDefault(require("os"));
+    var getUserAgent = /* @__PURE__ */ __name(() => {
+      const packageVersion = require_package6().version;
+      const nodeVersion = process.version;
+      const platformName = os_1.default.platform();
+      const archName = os_1.default.arch();
+      return `sigstore-js/${packageVersion} (Node ${nodeVersion}) (${platformName}/${archName})`;
+    }, "getUserAgent");
+    exports2.getUserAgent = getUserAgent;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/util/index.js
+var require_util2 = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/util/index.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
+      var ownKeys = /* @__PURE__ */ __name(function(o) {
+        ownKeys = Object.getOwnPropertyNames || function(o2) {
+          var ar = [];
+          for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
+          return ar;
+        };
+        return ownKeys(o);
+      }, "ownKeys");
+      return function(mod) {
+        if (mod && mod.__esModule) return mod;
+        var result = {};
+        if (mod != null) {
+          for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+        }
+        __setModuleDefault(result, mod);
+        return result;
+      };
+    })();
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.ua = exports2.oidc = exports2.pem = exports2.json = exports2.encoding = exports2.dsse = exports2.crypto = void 0;
+    var core_1 = require_dist7();
+    Object.defineProperty(exports2, "crypto", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return core_1.crypto;
+    }, "get") });
+    Object.defineProperty(exports2, "dsse", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return core_1.dsse;
+    }, "get") });
+    Object.defineProperty(exports2, "encoding", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return core_1.encoding;
+    }, "get") });
+    Object.defineProperty(exports2, "json", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return core_1.json;
+    }, "get") });
+    Object.defineProperty(exports2, "pem", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return core_1.pem;
+    }, "get") });
+    exports2.oidc = __importStar(require_oidc());
+    exports2.ua = __importStar(require_ua());
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/bundler/base.js
+var require_base = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/bundler/base.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.BaseBundleBuilder = void 0;
+    var BaseBundleBuilder = class {
+      static {
+        __name(this, "BaseBundleBuilder");
+      }
+      signer;
+      witnesses;
+      constructor(options) {
+        this.signer = options.signer;
+        this.witnesses = options.witnesses;
+      }
+      // Executes the signing/witnessing process for the given artifact.
+      async create(artifact) {
+        const signature = await this.prepare(artifact).then((blob) => this.signer.sign(blob));
+        const bundle = await this.package(artifact, signature);
+        const verificationMaterials = await Promise.all(this.witnesses.map((witness) => witness.testify(bundle.content, publicKey(signature.key))));
+        const tlogEntryList = [];
+        const timestampList = [];
+        verificationMaterials.forEach(({ tlogEntries, rfc3161Timestamps }) => {
+          tlogEntryList.push(...tlogEntries ?? []);
+          timestampList.push(...rfc3161Timestamps ?? []);
+        });
+        bundle.verificationMaterial.tlogEntries = tlogEntryList;
+        bundle.verificationMaterial.timestampVerificationData = {
+          rfc3161Timestamps: timestampList
+        };
+        return bundle;
+      }
+      // Override this function to apply any pre-signing transformations to the
+      // artifact. The returned buffer will be signed by the signer. The default
+      // implementation simply returns the artifact data.
+      async prepare(artifact) {
+        return artifact.data;
+      }
+    };
+    exports2.BaseBundleBuilder = BaseBundleBuilder;
+    function publicKey(key) {
+      switch (key.$case) {
+        case "publicKey":
+          return key.publicKey;
+        case "x509Certificate":
+          return key.certificate;
+      }
+    }
+    __name(publicKey, "publicKey");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/bundler/bundle.js
+var require_bundle2 = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/bundler/bundle.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
+      var ownKeys = /* @__PURE__ */ __name(function(o) {
+        ownKeys = Object.getOwnPropertyNames || function(o2) {
+          var ar = [];
+          for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
+          return ar;
+        };
+        return ownKeys(o);
+      }, "ownKeys");
+      return function(mod) {
+        if (mod && mod.__esModule) return mod;
+        var result = {};
+        if (mod != null) {
+          for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+        }
+        __setModuleDefault(result, mod);
+        return result;
+      };
+    })();
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.toMessageSignatureBundle = toMessageSignatureBundle;
+    exports2.toDSSEBundle = toDSSEBundle;
+    var sigstore = __importStar(require_dist6());
+    var util_1 = require_util2();
+    function toMessageSignatureBundle(artifact, signature) {
+      const digest = util_1.crypto.digest("sha256", artifact.data);
+      return sigstore.toMessageSignatureBundle({
+        digest,
+        signature: signature.signature,
+        certificate: signature.key.$case === "x509Certificate" ? util_1.pem.toDER(signature.key.certificate) : void 0,
+        keyHint: signature.key.$case === "publicKey" ? signature.key.hint : void 0,
+        certificateChain: true
+      });
+    }
+    __name(toMessageSignatureBundle, "toMessageSignatureBundle");
+    function toDSSEBundle(artifact, signature, certificateChain) {
+      return sigstore.toDSSEBundle({
+        artifact: artifact.data,
+        artifactType: artifact.type,
+        signature: signature.signature,
+        certificate: signature.key.$case === "x509Certificate" ? util_1.pem.toDER(signature.key.certificate) : void 0,
+        keyHint: signature.key.$case === "publicKey" ? signature.key.hint : void 0,
+        certificateChain
+      });
+    }
+    __name(toDSSEBundle, "toDSSEBundle");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/bundler/dsse.js
+var require_dsse2 = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/bundler/dsse.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.DSSEBundleBuilder = void 0;
+    var util_1 = require_util2();
+    var base_1 = require_base();
+    var bundle_1 = require_bundle2();
+    var DSSEBundleBuilder = class extends base_1.BaseBundleBuilder {
+      static {
+        __name(this, "DSSEBundleBuilder");
+      }
+      certificateChain;
+      constructor(options) {
+        super(options);
+        this.certificateChain = options.certificateChain ?? false;
+      }
+      // DSSE requires the artifact to be pre-encoded with the payload type
+      // before the signature is generated.
+      async prepare(artifact) {
+        const a = artifactDefaults(artifact);
+        return util_1.dsse.preAuthEncoding(a.type, a.data);
+      }
+      // Packages the artifact and signature into a DSSE bundle
+      async package(artifact, signature) {
+        return (0, bundle_1.toDSSEBundle)(artifactDefaults(artifact), signature, this.certificateChain);
+      }
+    };
+    exports2.DSSEBundleBuilder = DSSEBundleBuilder;
+    function artifactDefaults(artifact) {
+      return {
+        ...artifact,
+        type: artifact.type ?? ""
+      };
+    }
+    __name(artifactDefaults, "artifactDefaults");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/bundler/message.js
+var require_message = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/bundler/message.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.MessageSignatureBundleBuilder = void 0;
+    var base_1 = require_base();
+    var bundle_1 = require_bundle2();
+    var MessageSignatureBundleBuilder = class extends base_1.BaseBundleBuilder {
+      static {
+        __name(this, "MessageSignatureBundleBuilder");
+      }
+      constructor(options) {
+        super(options);
+      }
+      async package(artifact, signature) {
+        return (0, bundle_1.toMessageSignatureBundle)(artifact, signature);
+      }
+    };
+    exports2.MessageSignatureBundleBuilder = MessageSignatureBundleBuilder;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/bundler/index.js
+var require_bundler = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/bundler/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.MessageSignatureBundleBuilder = exports2.DSSEBundleBuilder = void 0;
+    var dsse_1 = require_dsse2();
+    Object.defineProperty(exports2, "DSSEBundleBuilder", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return dsse_1.DSSEBundleBuilder;
+    }, "get") });
+    var message_1 = require_message();
+    Object.defineProperty(exports2, "MessageSignatureBundleBuilder", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return message_1.MessageSignatureBundleBuilder;
+    }, "get") });
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/external/error.js
+var require_error4 = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/external/error.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.HTTPError = void 0;
+    var HTTPError = class extends Error {
+      static {
+        __name(this, "HTTPError");
+      }
+      statusCode;
+      location;
+      constructor({ status, message, location }) {
+        super(`(${status}) ${message}`);
+        this.statusCode = status;
+        this.location = location;
+      }
+    };
+    exports2.HTTPError = HTTPError;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/error.js
+var require_error5 = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/error.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.InternalError = void 0;
+    exports2.internalError = internalError;
+    var error_1 = require_error4();
+    var InternalError = class extends Error {
+      static {
+        __name(this, "InternalError");
+      }
+      code;
+      cause;
+      constructor({ code, message, cause }) {
+        super(message);
+        this.name = this.constructor.name;
+        this.cause = cause;
+        this.code = code;
+      }
+    };
+    exports2.InternalError = InternalError;
+    function internalError(err, code, message) {
+      if (err instanceof error_1.HTTPError) {
+        message += ` - ${err.message}`;
+      }
+      throw new InternalError({
+        code,
+        message,
+        cause: err
+      });
+    }
+    __name(internalError, "internalError");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/external/fetch.js
+var require_fetch2 = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/external/fetch.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.fetchWithRetry = fetchWithRetry;
+    var make_fetch_happen_1 = __importDefault(require_lib27());
+    var proc_log_1 = require_lib2();
+    var promise_retry_1 = __importDefault(require_promise_retry());
+    var util_1 = require_util2();
+    var error_1 = require_error4();
+    var HTTP2_HEADER_LOCATION = "location";
+    var HTTP2_HEADER_CONTENT_TYPE = "content-type";
+    var HTTP2_HEADER_USER_AGENT = "user-agent";
+    var HTTP_STATUS_INTERNAL_SERVER_ERROR = 500;
+    var HTTP_STATUS_TOO_MANY_REQUESTS = 429;
+    var HTTP_STATUS_REQUEST_TIMEOUT = 408;
+    async function fetchWithRetry(url, options) {
+      return (0, promise_retry_1.default)(async (retry, attemptNum) => {
+        const method = options.method || "POST";
+        const headers = {
+          [HTTP2_HEADER_USER_AGENT]: util_1.ua.getUserAgent(),
+          ...options.headers
+        };
+        const response = await (0, make_fetch_happen_1.default)(url, {
+          method,
+          headers,
+          body: options.body,
+          timeout: options.timeout,
+          retry: false
+          // We're handling retries ourselves
+        }).catch((reason) => {
+          proc_log_1.log.http("fetch", `${method} ${url} attempt ${attemptNum} failed with ${reason}`);
+          return retry(reason);
+        });
+        if (response.ok) {
+          return response;
+        } else {
+          const error = await errorFromResponse(response);
+          proc_log_1.log.http("fetch", `${method} ${url} attempt ${attemptNum} failed with ${response.status}`);
+          if (retryable(response.status)) {
+            return retry(error);
+          } else {
+            throw error;
+          }
+        }
+      }, retryOpts(options.retry));
+    }
+    __name(fetchWithRetry, "fetchWithRetry");
+    var errorFromResponse = /* @__PURE__ */ __name(async (response) => {
+      let message = response.statusText;
+      const location = response.headers.get(HTTP2_HEADER_LOCATION) || void 0;
+      const contentType = response.headers.get(HTTP2_HEADER_CONTENT_TYPE);
+      if (contentType?.includes("application/json")) {
+        try {
+          const body = await response.json();
+          message = body.message || message;
+        } catch (e) {
+        }
+      }
+      return new error_1.HTTPError({
+        status: response.status,
+        message,
+        location
+      });
+    }, "errorFromResponse");
+    var retryable = /* @__PURE__ */ __name((status) => [HTTP_STATUS_REQUEST_TIMEOUT, HTTP_STATUS_TOO_MANY_REQUESTS].includes(status) || status >= HTTP_STATUS_INTERNAL_SERVER_ERROR, "retryable");
+    var retryOpts = /* @__PURE__ */ __name((retry) => {
+      if (typeof retry === "boolean") {
+        return { retries: retry ? 1 : 0 };
+      } else if (typeof retry === "number") {
+        return { retries: retry };
+      } else {
+        return { retries: 0, ...retry };
+      }
+    }, "retryOpts");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/external/fulcio.js
+var require_fulcio = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/external/fulcio.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Fulcio = void 0;
+    var fetch_1 = require_fetch2();
+    var Fulcio = class {
+      static {
+        __name(this, "Fulcio");
+      }
+      options;
+      constructor(options) {
+        this.options = options;
+      }
+      async createSigningCertificate(request) {
+        const { baseURL, retry, timeout } = this.options;
+        const url = `${baseURL}/api/v2/signingCert`;
+        const response = await (0, fetch_1.fetchWithRetry)(url, {
+          headers: {
+            "Content-Type": "application/json"
+          },
+          body: JSON.stringify(request),
+          timeout,
+          retry
+        });
+        return response.json();
+      }
+    };
+    exports2.Fulcio = Fulcio;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/signer/fulcio/ca.js
+var require_ca = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/signer/fulcio/ca.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.CAClient = void 0;
+    var error_1 = require_error5();
+    var fulcio_1 = require_fulcio();
+    var CAClient = class {
+      static {
+        __name(this, "CAClient");
+      }
+      fulcio;
+      constructor(options) {
+        this.fulcio = new fulcio_1.Fulcio({
+          baseURL: options.fulcioBaseURL,
+          retry: options.retry,
+          timeout: options.timeout
+        });
+      }
+      async createSigningCertificate(identityToken, publicKey, challenge) {
+        const request = toCertificateRequest(identityToken, publicKey, challenge);
+        try {
+          const resp = await this.fulcio.createSigningCertificate(request);
+          const cert = resp.signedCertificateEmbeddedSct ? resp.signedCertificateEmbeddedSct : resp.signedCertificateDetachedSct;
+          return cert.chain.certificates;
+        } catch (err) {
+          (0, error_1.internalError)(err, "CA_CREATE_SIGNING_CERTIFICATE_ERROR", "error creating signing certificate");
+        }
+      }
+    };
+    exports2.CAClient = CAClient;
+    function toCertificateRequest(identityToken, publicKey, challenge) {
+      return {
+        credentials: {
+          oidcIdentityToken: identityToken
+        },
+        publicKeyRequest: {
+          publicKey: {
+            algorithm: "ECDSA",
+            content: publicKey
+          },
+          proofOfPossession: challenge.toString("base64")
+        }
+      };
+    }
+    __name(toCertificateRequest, "toCertificateRequest");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/signer/fulcio/ephemeral.js
+var require_ephemeral = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/signer/fulcio/ephemeral.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.EphemeralSigner = void 0;
+    var crypto_1 = require("crypto");
+    var EC_KEYPAIR_TYPE = "ec";
+    var P256_CURVE = "P-256";
+    var EphemeralSigner = class {
+      static {
+        __name(this, "EphemeralSigner");
+      }
+      keypair;
+      constructor() {
+        this.keypair = (0, crypto_1.generateKeyPairSync)(EC_KEYPAIR_TYPE, {
+          namedCurve: P256_CURVE
+        });
+      }
+      async sign(data) {
+        const signature = (0, crypto_1.sign)("sha256", data, this.keypair.privateKey);
+        const publicKey = this.keypair.publicKey.export({ format: "pem", type: "spki" }).toString("ascii");
+        return {
+          signature,
+          key: { $case: "publicKey", publicKey }
+        };
+      }
+    };
+    exports2.EphemeralSigner = EphemeralSigner;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/signer/fulcio/index.js
+var require_fulcio2 = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/signer/fulcio/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.FulcioSigner = exports2.DEFAULT_FULCIO_URL = void 0;
+    var error_1 = require_error5();
+    var util_1 = require_util2();
+    var ca_1 = require_ca();
+    var ephemeral_1 = require_ephemeral();
+    exports2.DEFAULT_FULCIO_URL = "https://fulcio.sigstore.dev";
+    var FulcioSigner = class {
+      static {
+        __name(this, "FulcioSigner");
+      }
+      ca;
+      identityProvider;
+      keyHolder;
+      constructor(options) {
+        this.ca = new ca_1.CAClient({
+          ...options,
+          fulcioBaseURL: options.fulcioBaseURL || /* istanbul ignore next */
+          exports2.DEFAULT_FULCIO_URL
+        });
+        this.identityProvider = options.identityProvider;
+        this.keyHolder = options.keyHolder || new ephemeral_1.EphemeralSigner();
+      }
+      async sign(data) {
+        const identityToken = await this.getIdentityToken();
+        let subject;
+        try {
+          subject = util_1.oidc.extractJWTSubject(identityToken);
+        } catch (err) {
+          throw new error_1.InternalError({
+            code: "IDENTITY_TOKEN_PARSE_ERROR",
+            message: `invalid identity token: ${identityToken}`,
+            cause: err
+          });
+        }
+        const challenge = await this.keyHolder.sign(Buffer.from(subject));
+        if (challenge.key.$case !== "publicKey") {
+          throw new error_1.InternalError({
+            code: "CA_CREATE_SIGNING_CERTIFICATE_ERROR",
+            message: "unexpected format for signing key"
+          });
+        }
+        const certificates = await this.ca.createSigningCertificate(identityToken, challenge.key.publicKey, challenge.signature);
+        const signature = await this.keyHolder.sign(data);
+        return {
+          signature: signature.signature,
+          key: {
+            $case: "x509Certificate",
+            certificate: certificates[0]
+          }
+        };
+      }
+      async getIdentityToken() {
+        try {
+          return await this.identityProvider.getToken();
+        } catch (err) {
+          throw new error_1.InternalError({
+            code: "IDENTITY_TOKEN_READ_ERROR",
+            message: "error retrieving identity token",
+            cause: err
+          });
+        }
+      }
+    };
+    exports2.FulcioSigner = FulcioSigner;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/signer/index.js
+var require_signer = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/signer/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.FulcioSigner = exports2.DEFAULT_FULCIO_URL = void 0;
+    var fulcio_1 = require_fulcio2();
+    Object.defineProperty(exports2, "DEFAULT_FULCIO_URL", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return fulcio_1.DEFAULT_FULCIO_URL;
+    }, "get") });
+    Object.defineProperty(exports2, "FulcioSigner", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return fulcio_1.FulcioSigner;
+    }, "get") });
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/external/rekor.js
+var require_rekor = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/external/rekor.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Rekor = void 0;
+    var fetch_1 = require_fetch2();
+    var Rekor = class {
+      static {
+        __name(this, "Rekor");
+      }
+      options;
+      constructor(options) {
+        this.options = options;
+      }
+      /**
+       * Create a new entry in the Rekor log.
+       * @param propsedEntry {ProposedEntry} Data to create a new entry
+       * @returns {Promise} The created entry
+       */
+      async createEntry(propsedEntry) {
+        const { baseURL, timeout, retry } = this.options;
+        const url = `${baseURL}/api/v1/log/entries`;
+        const response = await (0, fetch_1.fetchWithRetry)(url, {
+          headers: {
+            "Content-Type": "application/json",
+            Accept: "application/json"
+          },
+          body: JSON.stringify(propsedEntry),
+          timeout,
+          retry
+        });
+        const data = await response.json();
+        return entryFromResponse(data);
+      }
+      /**
+       * Get an entry from the Rekor log.
+       * @param uuid {string} The UUID of the entry to retrieve
+       * @returns {Promise} The retrieved entry
+       */
+      async getEntry(uuid) {
+        const { baseURL, timeout, retry } = this.options;
+        const url = `${baseURL}/api/v1/log/entries/${uuid}`;
+        const response = await (0, fetch_1.fetchWithRetry)(url, {
+          method: "GET",
+          headers: {
+            Accept: "application/json"
+          },
+          timeout,
+          retry
+        });
+        const data = await response.json();
+        return entryFromResponse(data);
+      }
+    };
+    exports2.Rekor = Rekor;
+    function entryFromResponse(data) {
+      const entries = Object.entries(data);
+      if (entries.length != 1) {
+        throw new Error("Received multiple entries in Rekor response");
+      }
+      const [uuid, entry] = entries[0];
+      return {
+        ...entry,
+        uuid
+      };
+    }
+    __name(entryFromResponse, "entryFromResponse");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/__generated__/rekor/v2/verifier.js
+var require_verifier = __commonJS({
+  "node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/__generated__/rekor/v2/verifier.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Signature = exports2.Verifier = exports2.PublicKey = void 0;
+    var sigstore_common_1 = require_sigstore_common();
+    exports2.PublicKey = {
+      fromJSON(object) {
+        return { rawBytes: isSet(object.rawBytes) ? Buffer.from(bytesFromBase64(object.rawBytes)) : Buffer.alloc(0) };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.rawBytes.length !== 0) {
+          obj.rawBytes = base64FromBytes(message.rawBytes);
+        }
+        return obj;
+      }
+    };
+    exports2.Verifier = {
+      fromJSON(object) {
+        return {
+          verifier: isSet(object.publicKey) ? { $case: "publicKey", publicKey: exports2.PublicKey.fromJSON(object.publicKey) } : isSet(object.x509Certificate) ? { $case: "x509Certificate", x509Certificate: sigstore_common_1.X509Certificate.fromJSON(object.x509Certificate) } : void 0,
+          keyDetails: isSet(object.keyDetails) ? (0, sigstore_common_1.publicKeyDetailsFromJSON)(object.keyDetails) : 0
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.verifier?.$case === "publicKey") {
+          obj.publicKey = exports2.PublicKey.toJSON(message.verifier.publicKey);
+        } else if (message.verifier?.$case === "x509Certificate") {
+          obj.x509Certificate = sigstore_common_1.X509Certificate.toJSON(message.verifier.x509Certificate);
+        }
+        if (message.keyDetails !== 0) {
+          obj.keyDetails = (0, sigstore_common_1.publicKeyDetailsToJSON)(message.keyDetails);
+        }
+        return obj;
+      }
+    };
+    exports2.Signature = {
+      fromJSON(object) {
+        return {
+          content: isSet(object.content) ? Buffer.from(bytesFromBase64(object.content)) : Buffer.alloc(0),
+          verifier: isSet(object.verifier) ? exports2.Verifier.fromJSON(object.verifier) : void 0
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.content.length !== 0) {
+          obj.content = base64FromBytes(message.content);
+        }
+        if (message.verifier !== void 0) {
+          obj.verifier = exports2.Verifier.toJSON(message.verifier);
+        }
+        return obj;
+      }
+    };
+    function bytesFromBase64(b64) {
+      return Uint8Array.from(globalThis.Buffer.from(b64, "base64"));
+    }
+    __name(bytesFromBase64, "bytesFromBase64");
+    function base64FromBytes(arr) {
+      return globalThis.Buffer.from(arr).toString("base64");
+    }
+    __name(base64FromBytes, "base64FromBytes");
+    function isSet(value) {
+      return value !== null && value !== void 0;
+    }
+    __name(isSet, "isSet");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/__generated__/rekor/v2/dsse.js
+var require_dsse3 = __commonJS({
+  "node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/__generated__/rekor/v2/dsse.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.DSSELogEntryV002 = exports2.DSSERequestV002 = void 0;
+    var envelope_1 = require_envelope();
+    var sigstore_common_1 = require_sigstore_common();
+    var verifier_1 = require_verifier();
+    exports2.DSSERequestV002 = {
+      fromJSON(object) {
+        return {
+          envelope: isSet(object.envelope) ? envelope_1.Envelope.fromJSON(object.envelope) : void 0,
+          verifiers: globalThis.Array.isArray(object?.verifiers) ? object.verifiers.map((e) => verifier_1.Verifier.fromJSON(e)) : []
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.envelope !== void 0) {
+          obj.envelope = envelope_1.Envelope.toJSON(message.envelope);
+        }
+        if (message.verifiers?.length) {
+          obj.verifiers = message.verifiers.map((e) => verifier_1.Verifier.toJSON(e));
+        }
+        return obj;
+      }
+    };
+    exports2.DSSELogEntryV002 = {
+      fromJSON(object) {
+        return {
+          payloadHash: isSet(object.payloadHash) ? sigstore_common_1.HashOutput.fromJSON(object.payloadHash) : void 0,
+          signatures: globalThis.Array.isArray(object?.signatures) ? object.signatures.map((e) => verifier_1.Signature.fromJSON(e)) : []
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.payloadHash !== void 0) {
+          obj.payloadHash = sigstore_common_1.HashOutput.toJSON(message.payloadHash);
+        }
+        if (message.signatures?.length) {
+          obj.signatures = message.signatures.map((e) => verifier_1.Signature.toJSON(e));
+        }
+        return obj;
+      }
+    };
+    function isSet(value) {
+      return value !== null && value !== void 0;
+    }
+    __name(isSet, "isSet");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/__generated__/rekor/v2/hashedrekord.js
+var require_hashedrekord = __commonJS({
+  "node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/__generated__/rekor/v2/hashedrekord.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.HashedRekordLogEntryV002 = exports2.HashedRekordRequestV002 = void 0;
+    var sigstore_common_1 = require_sigstore_common();
+    var verifier_1 = require_verifier();
+    exports2.HashedRekordRequestV002 = {
+      fromJSON(object) {
+        return {
+          digest: isSet(object.digest) ? Buffer.from(bytesFromBase64(object.digest)) : Buffer.alloc(0),
+          signature: isSet(object.signature) ? verifier_1.Signature.fromJSON(object.signature) : void 0
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.digest.length !== 0) {
+          obj.digest = base64FromBytes(message.digest);
+        }
+        if (message.signature !== void 0) {
+          obj.signature = verifier_1.Signature.toJSON(message.signature);
+        }
+        return obj;
+      }
+    };
+    exports2.HashedRekordLogEntryV002 = {
+      fromJSON(object) {
+        return {
+          data: isSet(object.data) ? sigstore_common_1.HashOutput.fromJSON(object.data) : void 0,
+          signature: isSet(object.signature) ? verifier_1.Signature.fromJSON(object.signature) : void 0
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.data !== void 0) {
+          obj.data = sigstore_common_1.HashOutput.toJSON(message.data);
+        }
+        if (message.signature !== void 0) {
+          obj.signature = verifier_1.Signature.toJSON(message.signature);
+        }
+        return obj;
+      }
+    };
+    function bytesFromBase64(b64) {
+      return Uint8Array.from(globalThis.Buffer.from(b64, "base64"));
+    }
+    __name(bytesFromBase64, "bytesFromBase64");
+    function base64FromBytes(arr) {
+      return globalThis.Buffer.from(arr).toString("base64");
+    }
+    __name(base64FromBytes, "base64FromBytes");
+    function isSet(value) {
+      return value !== null && value !== void 0;
+    }
+    __name(isSet, "isSet");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/__generated__/rekor/v2/entry.js
+var require_entry2 = __commonJS({
+  "node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/__generated__/rekor/v2/entry.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.CreateEntryRequest = exports2.Spec = exports2.Entry = void 0;
+    var dsse_1 = require_dsse3();
+    var hashedrekord_1 = require_hashedrekord();
+    exports2.Entry = {
+      fromJSON(object) {
+        return {
+          kind: isSet(object.kind) ? globalThis.String(object.kind) : "",
+          apiVersion: isSet(object.apiVersion) ? globalThis.String(object.apiVersion) : "",
+          spec: isSet(object.spec) ? exports2.Spec.fromJSON(object.spec) : void 0
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.kind !== "") {
+          obj.kind = message.kind;
+        }
+        if (message.apiVersion !== "") {
+          obj.apiVersion = message.apiVersion;
+        }
+        if (message.spec !== void 0) {
+          obj.spec = exports2.Spec.toJSON(message.spec);
+        }
+        return obj;
+      }
+    };
+    exports2.Spec = {
+      fromJSON(object) {
+        return {
+          spec: isSet(object.hashedRekordV002) ? { $case: "hashedRekordV002", hashedRekordV002: hashedrekord_1.HashedRekordLogEntryV002.fromJSON(object.hashedRekordV002) } : isSet(object.dsseV002) ? { $case: "dsseV002", dsseV002: dsse_1.DSSELogEntryV002.fromJSON(object.dsseV002) } : void 0
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.spec?.$case === "hashedRekordV002") {
+          obj.hashedRekordV002 = hashedrekord_1.HashedRekordLogEntryV002.toJSON(message.spec.hashedRekordV002);
+        } else if (message.spec?.$case === "dsseV002") {
+          obj.dsseV002 = dsse_1.DSSELogEntryV002.toJSON(message.spec.dsseV002);
+        }
+        return obj;
+      }
+    };
+    exports2.CreateEntryRequest = {
+      fromJSON(object) {
+        return {
+          spec: isSet(object.hashedRekordRequestV002) ? {
+            $case: "hashedRekordRequestV002",
+            hashedRekordRequestV002: hashedrekord_1.HashedRekordRequestV002.fromJSON(object.hashedRekordRequestV002)
+          } : isSet(object.dsseRequestV002) ? { $case: "dsseRequestV002", dsseRequestV002: dsse_1.DSSERequestV002.fromJSON(object.dsseRequestV002) } : void 0
+        };
+      },
+      toJSON(message) {
+        const obj = {};
+        if (message.spec?.$case === "hashedRekordRequestV002") {
+          obj.hashedRekordRequestV002 = hashedrekord_1.HashedRekordRequestV002.toJSON(message.spec.hashedRekordRequestV002);
+        } else if (message.spec?.$case === "dsseRequestV002") {
+          obj.dsseRequestV002 = dsse_1.DSSERequestV002.toJSON(message.spec.dsseRequestV002);
+        }
+        return obj;
+      }
+    };
+    function isSet(value) {
+      return value !== null && value !== void 0;
+    }
+    __name(isSet, "isSet");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/rekor/v2/index.js
+var require_v2 = __commonJS({
+  "node_modules/.pnpm/@sigstore+protobuf-specs@0.5.1/node_modules/@sigstore/protobuf-specs/dist/rekor/v2/index.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
+      for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    __exportStar(require_dsse3(), exports2);
+    __exportStar(require_entry2(), exports2);
+    __exportStar(require_hashedrekord(), exports2);
+    __exportStar(require_verifier(), exports2);
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/external/rekor-v2.js
+var require_rekor_v2 = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/external/rekor-v2.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.RekorV2 = void 0;
+    var fetch_1 = require_fetch2();
+    var protobuf_specs_1 = require_dist5();
+    var v2_1 = require_v2();
+    var RekorV2 = class {
+      static {
+        __name(this, "RekorV2");
+      }
+      options;
+      constructor(options) {
+        this.options = options;
+      }
+      async createEntry(proposedEntry) {
+        const { baseURL, timeout, retry } = this.options;
+        const url = `${baseURL}/api/v2/log/entries`;
+        const response = await (0, fetch_1.fetchWithRetry)(url, {
+          headers: {
+            "Content-Type": "application/json",
+            Accept: "application/json"
+          },
+          body: JSON.stringify(v2_1.CreateEntryRequest.toJSON(proposedEntry)),
+          timeout,
+          retry
+        });
+        return response.json().then((data) => protobuf_specs_1.TransparencyLogEntry.fromJSON(data));
+      }
+    };
+    exports2.RekorV2 = RekorV2;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/witness/tlog/client.js
+var require_client = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/witness/tlog/client.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.TLogV2Client = exports2.TLogClient = void 0;
+    var error_1 = require_error5();
+    var error_2 = require_error4();
+    var rekor_1 = require_rekor();
+    var rekor_v2_1 = require_rekor_v2();
+    var TLogClient = class {
+      static {
+        __name(this, "TLogClient");
+      }
+      rekor;
+      fetchOnConflict;
+      constructor(options) {
+        this.fetchOnConflict = options.fetchOnConflict ?? false;
+        this.rekor = new rekor_1.Rekor({
+          baseURL: options.rekorBaseURL,
+          retry: options.retry,
+          timeout: options.timeout
+        });
+      }
+      async createEntry(proposedEntry) {
+        let entry;
+        try {
+          entry = await this.rekor.createEntry(proposedEntry);
+        } catch (err) {
+          if (entryExistsError(err) && this.fetchOnConflict) {
+            const uuid = err.location.split("/").pop() || "";
+            try {
+              entry = await this.rekor.getEntry(uuid);
+            } catch (err2) {
+              (0, error_1.internalError)(err2, "TLOG_FETCH_ENTRY_ERROR", "error fetching tlog entry");
+            }
+          } else {
+            (0, error_1.internalError)(err, "TLOG_CREATE_ENTRY_ERROR", "error creating tlog entry");
+          }
+        }
+        return entry;
+      }
+    };
+    exports2.TLogClient = TLogClient;
+    function entryExistsError(value) {
+      return value instanceof error_2.HTTPError && value.statusCode === 409 && value.location !== void 0;
+    }
+    __name(entryExistsError, "entryExistsError");
+    var TLogV2Client = class {
+      static {
+        __name(this, "TLogV2Client");
+      }
+      rekor;
+      constructor(options) {
+        this.rekor = new rekor_v2_1.RekorV2({
+          baseURL: options.rekorBaseURL,
+          retry: options.retry,
+          timeout: options.timeout
+        });
+      }
+      async createEntry(createEntryRequest) {
+        let entry;
+        try {
+          entry = await this.rekor.createEntry(createEntryRequest);
+        } catch (err) {
+          (0, error_1.internalError)(err, "TLOG_CREATE_ENTRY_ERROR", "error creating tlog entry");
+        }
+        if (entry.logId === void 0 || entry.kindVersion === void 0) {
+          (0, error_1.internalError)(new Error("invalid tlog entry"), "TLOG_CREATE_ENTRY_ERROR", "error creating tlog entry");
+        }
+        return {
+          ...entry,
+          logId: entry.logId,
+          kindVersion: entry.kindVersion
+        };
+      }
+    };
+    exports2.TLogV2Client = TLogV2Client;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/witness/tlog/entry.js
+var require_entry3 = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/witness/tlog/entry.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.toProposedEntry = toProposedEntry;
+    exports2.toCreateEntryRequest = toCreateEntryRequest;
+    var bundle_1 = require_dist6();
+    var protobuf_specs_1 = require_dist5();
+    var util_1 = require_util2();
+    var SHA256_ALGORITHM = "sha256";
+    function toProposedEntry(content, publicKey, entryType = "dsse") {
+      switch (content.$case) {
+        case "dsseEnvelope":
+          if (entryType === "intoto") {
+            return toProposedIntotoEntry(content.dsseEnvelope, publicKey);
+          }
+          return toProposedDSSEEntry(content.dsseEnvelope, publicKey);
+        case "messageSignature":
+          return toProposedHashedRekordEntry(content.messageSignature, publicKey);
+      }
+    }
+    __name(toProposedEntry, "toProposedEntry");
+    function toProposedHashedRekordEntry(messageSignature, publicKey) {
+      const hexDigest = messageSignature.messageDigest.digest.toString("hex");
+      const b64Signature = messageSignature.signature.toString("base64");
+      const b64Key = util_1.encoding.base64Encode(publicKey);
+      return {
+        apiVersion: "0.0.1",
+        kind: "hashedrekord",
+        spec: {
+          data: {
+            hash: {
+              algorithm: SHA256_ALGORITHM,
+              value: hexDigest
+            }
+          },
+          signature: {
+            content: b64Signature,
+            publicKey: {
+              content: b64Key
+            }
+          }
+        }
+      };
+    }
+    __name(toProposedHashedRekordEntry, "toProposedHashedRekordEntry");
+    function toProposedDSSEEntry(envelope, publicKey) {
+      const envelopeJSON = JSON.stringify((0, bundle_1.envelopeToJSON)(envelope));
+      const encodedKey = util_1.encoding.base64Encode(publicKey);
+      return {
+        apiVersion: "0.0.1",
+        kind: "dsse",
+        spec: {
+          proposedContent: {
+            envelope: envelopeJSON,
+            verifiers: [encodedKey]
+          }
+        }
+      };
+    }
+    __name(toProposedDSSEEntry, "toProposedDSSEEntry");
+    function toProposedIntotoEntry(envelope, publicKey) {
+      const payloadHash = util_1.crypto.digest(SHA256_ALGORITHM, envelope.payload).toString("hex");
+      const envelopeHash = calculateDSSEHash(envelope, publicKey);
+      const payload = util_1.encoding.base64Encode(envelope.payload.toString("base64"));
+      const sig = util_1.encoding.base64Encode(envelope.signatures[0].sig.toString("base64"));
+      const keyid = envelope.signatures[0].keyid;
+      const encodedKey = util_1.encoding.base64Encode(publicKey);
+      const dsse = {
+        payloadType: envelope.payloadType,
+        payload,
+        signatures: [{ sig, publicKey: encodedKey }]
+      };
+      if (keyid.length > 0) {
+        dsse.signatures[0].keyid = keyid;
+      }
+      return {
+        apiVersion: "0.0.2",
+        kind: "intoto",
+        spec: {
+          content: {
+            envelope: dsse,
+            hash: { algorithm: SHA256_ALGORITHM, value: envelopeHash },
+            payloadHash: { algorithm: SHA256_ALGORITHM, value: payloadHash }
+          }
+        }
+      };
+    }
+    __name(toProposedIntotoEntry, "toProposedIntotoEntry");
+    function calculateDSSEHash(envelope, publicKey) {
+      const dsse = {
+        payloadType: envelope.payloadType,
+        payload: envelope.payload.toString("base64"),
+        signatures: [
+          { sig: envelope.signatures[0].sig.toString("base64"), publicKey }
+        ]
+      };
+      if (envelope.signatures[0].keyid.length > 0) {
+        dsse.signatures[0].keyid = envelope.signatures[0].keyid;
+      }
+      return util_1.crypto.digest(SHA256_ALGORITHM, util_1.json.canonicalize(dsse)).toString("hex");
+    }
+    __name(calculateDSSEHash, "calculateDSSEHash");
+    function toCreateEntryRequest(content, publicKey) {
+      switch (content.$case) {
+        case "dsseEnvelope":
+          return toCreateEntryRequestDSSE(content.dsseEnvelope, publicKey);
+        case "messageSignature":
+          return toCreateEntryRequestMessageSignature(content.messageSignature, publicKey);
+      }
+    }
+    __name(toCreateEntryRequest, "toCreateEntryRequest");
+    function toCreateEntryRequestDSSE(envelope, publicKey) {
+      return {
+        spec: {
+          $case: "dsseRequestV002",
+          dsseRequestV002: {
+            envelope,
+            verifiers: [
+              {
+                // TODO: We need to add support of passing the key details in the
+                // signature bundle. For now we're hardcoding the key details here.
+                keyDetails: protobuf_specs_1.PublicKeyDetails.PKIX_ECDSA_P256_SHA_256,
+                verifier: {
+                  $case: "x509Certificate",
+                  x509Certificate: {
+                    rawBytes: util_1.pem.toDER(publicKey)
+                  }
+                }
+              }
+            ]
+          }
+        }
+      };
+    }
+    __name(toCreateEntryRequestDSSE, "toCreateEntryRequestDSSE");
+    function toCreateEntryRequestMessageSignature(messageSignature, publicKey) {
+      return {
+        spec: {
+          $case: "hashedRekordRequestV002",
+          hashedRekordRequestV002: {
+            digest: messageSignature.messageDigest.digest,
+            signature: {
+              content: messageSignature.signature,
+              verifier: {
+                // TODO: We need to add support of passing the key details in the
+                // signature bundle. For now we're hardcoding the key details here.
+                keyDetails: protobuf_specs_1.PublicKeyDetails.PKIX_ECDSA_P256_SHA_256,
+                verifier: {
+                  $case: "x509Certificate",
+                  x509Certificate: {
+                    rawBytes: util_1.pem.toDER(publicKey)
+                  }
+                }
+              }
+            }
+          }
+        }
+      };
+    }
+    __name(toCreateEntryRequestMessageSignature, "toCreateEntryRequestMessageSignature");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/witness/tlog/index.js
+var require_tlog = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/witness/tlog/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.RekorWitness = exports2.DEFAULT_REKOR_URL = void 0;
+    var util_1 = require_util2();
+    var client_1 = require_client();
+    var entry_1 = require_entry3();
+    exports2.DEFAULT_REKOR_URL = "https://rekor.sigstore.dev";
+    var RekorWitness = class {
+      static {
+        __name(this, "RekorWitness");
+      }
+      tlogV1;
+      tlogV2;
+      entryType;
+      majorApiVersion;
+      constructor(options) {
+        this.entryType = options.entryType;
+        this.majorApiVersion = options.majorApiVersion || 1;
+        this.tlogV1 = new client_1.TLogClient({
+          ...options,
+          rekorBaseURL: options.rekorBaseURL || /* istanbul ignore next */
+          exports2.DEFAULT_REKOR_URL
+        });
+        this.tlogV2 = new client_1.TLogV2Client({
+          ...options,
+          rekorBaseURL: options.rekorBaseURL || /* istanbul ignore next */
+          exports2.DEFAULT_REKOR_URL
+        });
+      }
+      async testify(content, publicKey) {
+        let tlogEntry;
+        if (this.majorApiVersion === 2) {
+          const request = (0, entry_1.toCreateEntryRequest)(content, publicKey);
+          tlogEntry = await this.tlogV2.createEntry(request);
+        } else {
+          const proposedEntry = (0, entry_1.toProposedEntry)(content, publicKey, this.entryType);
+          const entry = await this.tlogV1.createEntry(proposedEntry);
+          tlogEntry = toTransparencyLogEntry(entry);
+        }
+        return { tlogEntries: [tlogEntry] };
+      }
+    };
+    exports2.RekorWitness = RekorWitness;
+    function toTransparencyLogEntry(entry) {
+      const logID = Buffer.from(entry.logID, "hex");
+      const bodyJSON = util_1.encoding.base64Decode(entry.body);
+      const entryBody = JSON.parse(bodyJSON);
+      const promise = entry?.verification?.signedEntryTimestamp ? inclusionPromise(entry.verification.signedEntryTimestamp) : void 0;
+      const proof = entry?.verification?.inclusionProof ? inclusionProof(entry.verification.inclusionProof) : void 0;
+      const tlogEntry = {
+        logIndex: entry.logIndex.toString(),
+        logId: {
+          keyId: logID
+        },
+        integratedTime: entry.integratedTime.toString(),
+        kindVersion: {
+          kind: entryBody.kind,
+          version: entryBody.apiVersion
+        },
+        inclusionPromise: promise,
+        inclusionProof: proof,
+        canonicalizedBody: Buffer.from(entry.body, "base64")
+      };
+      return tlogEntry;
+    }
+    __name(toTransparencyLogEntry, "toTransparencyLogEntry");
+    function inclusionPromise(promise) {
+      return {
+        signedEntryTimestamp: Buffer.from(promise, "base64")
+      };
+    }
+    __name(inclusionPromise, "inclusionPromise");
+    function inclusionProof(proof) {
+      return {
+        logIndex: proof.logIndex.toString(),
+        treeSize: proof.treeSize.toString(),
+        rootHash: Buffer.from(proof.rootHash, "hex"),
+        hashes: proof.hashes.map((h) => Buffer.from(h, "hex")),
+        checkpoint: {
+          envelope: proof.checkpoint
+        }
+      };
+    }
+    __name(inclusionProof, "inclusionProof");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/external/tsa.js
+var require_tsa = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/external/tsa.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.TimestampAuthority = void 0;
+    var fetch_1 = require_fetch2();
+    var TimestampAuthority = class {
+      static {
+        __name(this, "TimestampAuthority");
+      }
+      options;
+      constructor(options) {
+        this.options = options;
+      }
+      async createTimestamp(request) {
+        const { baseURL, timeout, retry } = this.options;
+        const url = new URL(baseURL).pathname === "/" ? `${baseURL}/api/v1/timestamp` : baseURL;
+        const response = await (0, fetch_1.fetchWithRetry)(url, {
+          headers: {
+            "Content-Type": "application/json"
+          },
+          body: JSON.stringify(request),
+          timeout,
+          retry
+        });
+        return response.buffer();
+      }
+    };
+    exports2.TimestampAuthority = TimestampAuthority;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/witness/tsa/client.js
+var require_client2 = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/witness/tsa/client.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.TSAClient = void 0;
+    var error_1 = require_error5();
+    var tsa_1 = require_tsa();
+    var util_1 = require_util2();
+    var SHA256_ALGORITHM = "sha256";
+    var TSAClient = class {
+      static {
+        __name(this, "TSAClient");
+      }
+      tsa;
+      constructor(options) {
+        this.tsa = new tsa_1.TimestampAuthority({
+          baseURL: options.tsaBaseURL,
+          retry: options.retry,
+          timeout: options.timeout
+        });
+      }
+      async createTimestamp(signature) {
+        const request = {
+          artifactHash: util_1.crypto.digest(SHA256_ALGORITHM, signature).toString("base64"),
+          hashAlgorithm: SHA256_ALGORITHM
+        };
+        try {
+          return await this.tsa.createTimestamp(request);
+        } catch (err) {
+          (0, error_1.internalError)(err, "TSA_CREATE_TIMESTAMP_ERROR", "error creating timestamp");
+        }
+      }
+    };
+    exports2.TSAClient = TSAClient;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/witness/tsa/index.js
+var require_tsa2 = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/witness/tsa/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.TSAWitness = void 0;
+    var client_1 = require_client2();
+    var TSAWitness = class {
+      static {
+        __name(this, "TSAWitness");
+      }
+      tsa;
+      constructor(options) {
+        this.tsa = new client_1.TSAClient({
+          tsaBaseURL: options.tsaBaseURL,
+          retry: options.retry,
+          timeout: options.timeout
+        });
+      }
+      async testify(content) {
+        const signature = extractSignature(content);
+        const timestamp = await this.tsa.createTimestamp(signature);
+        return {
+          rfc3161Timestamps: [{ signedTimestamp: timestamp }]
+        };
+      }
+    };
+    exports2.TSAWitness = TSAWitness;
+    function extractSignature(content) {
+      switch (content.$case) {
+        case "dsseEnvelope":
+          return content.dsseEnvelope.signatures[0].sig;
+        case "messageSignature":
+          return content.messageSignature.signature;
+      }
+    }
+    __name(extractSignature, "extractSignature");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/witness/index.js
+var require_witness = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/witness/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.TSAWitness = exports2.RekorWitness = exports2.DEFAULT_REKOR_URL = void 0;
+    var tlog_1 = require_tlog();
+    Object.defineProperty(exports2, "DEFAULT_REKOR_URL", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return tlog_1.DEFAULT_REKOR_URL;
+    }, "get") });
+    Object.defineProperty(exports2, "RekorWitness", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return tlog_1.RekorWitness;
+    }, "get") });
+    var tsa_1 = require_tsa2();
+    Object.defineProperty(exports2, "TSAWitness", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return tsa_1.TSAWitness;
+    }, "get") });
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/config.js
+var require_config = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/config.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.bundleBuilderFromSigningConfig = bundleBuilderFromSigningConfig;
+    var protobuf_specs_1 = require_dist5();
+    var dsse_1 = require_dsse2();
+    var message_1 = require_message();
+    var signer_1 = require_signer();
+    var witness_1 = require_witness();
+    var MAX_CA_API_VERSION = 1;
+    var MAX_TLOG_API_VERSION = 2;
+    var MAX_TSA_API_VERSION = 1;
+    var DEFAULT_TIMEOUT = 5e3;
+    var DEFAULT_REKORV2_TIMEOUT = 2e4;
+    var DEFAULT_RETRY = { retries: 2 };
+    function bundleBuilderFromSigningConfig(options) {
+      const { signingConfig, identityProvider, bundleType } = options;
+      const fetchOptions = options.fetchOptions || {
+        timeout: DEFAULT_TIMEOUT,
+        retry: DEFAULT_RETRY
+      };
+      const signer = fulcioSignerFromConfig(signingConfig, identityProvider, fetchOptions);
+      const witnesses = witnessesFromConfig(signingConfig, fetchOptions);
+      switch (bundleType) {
+        case "messageSignature":
+          return new message_1.MessageSignatureBundleBuilder({ signer, witnesses });
+        case "dsseEnvelope":
+          return new dsse_1.DSSEBundleBuilder({ signer, witnesses });
+      }
+    }
+    __name(bundleBuilderFromSigningConfig, "bundleBuilderFromSigningConfig");
+    function fulcioSignerFromConfig(signingConfig, identityProvider, fetchOptions) {
+      const service = certAuthorityService(signingConfig);
+      return new signer_1.FulcioSigner({
+        fulcioBaseURL: service.url,
+        identityProvider,
+        timeout: fetchOptions.timeout,
+        retry: fetchOptions.retry
+      });
+    }
+    __name(fulcioSignerFromConfig, "fulcioSignerFromConfig");
+    function witnessesFromConfig(signingConfig, fetchOptions) {
+      const witnesses = [];
+      if (signingConfig.rekorTlogConfig) {
+        if (signingConfig.rekorTlogConfig.selector !== protobuf_specs_1.ServiceSelector.ANY) {
+          throw new Error("Unsupported Rekor TLog selector in signing configuration");
+        }
+        const tlog = tlogService(signingConfig);
+        witnesses.push(new witness_1.RekorWitness({
+          rekorBaseURL: tlog.url,
+          majorApiVersion: tlog.majorApiVersion,
+          retry: fetchOptions.retry,
+          timeout: (
+            // Ensure Rekor V2 has at least a 20 second timeout
+            tlog.majorApiVersion === 1 ? fetchOptions.timeout : Math.min(fetchOptions.timeout || /* istanbul ignore next */
+            DEFAULT_TIMEOUT, DEFAULT_REKORV2_TIMEOUT)
+          )
+        }));
+      }
+      if (signingConfig.tsaConfig) {
+        if (signingConfig.tsaConfig.selector !== protobuf_specs_1.ServiceSelector.ANY) {
+          throw new Error("Unsupported TSA selector in signing configuration");
+        }
+        const tsa = tsaService(signingConfig);
+        witnesses.push(new witness_1.TSAWitness({
+          tsaBaseURL: tsa.url,
+          retry: fetchOptions.retry,
+          timeout: fetchOptions.timeout
+        }));
+      }
+      return witnesses;
+    }
+    __name(witnessesFromConfig, "witnessesFromConfig");
+    function certAuthorityService(signingConfig) {
+      const compatibleCAs = filterServicesByMaxAPIVersion(signingConfig.caUrls, MAX_CA_API_VERSION);
+      const sortedCAs = sortServicesByStartDate(compatibleCAs);
+      if (sortedCAs.length === 0) {
+        throw new Error("No valid CA services found in signing configuration");
+      }
+      return sortedCAs[0];
+    }
+    __name(certAuthorityService, "certAuthorityService");
+    function tlogService(signingConfig) {
+      const compatibleTLogs = filterServicesByMaxAPIVersion(signingConfig.rekorTlogUrls, MAX_TLOG_API_VERSION);
+      const sortedTLogs = sortServicesByStartDate(compatibleTLogs);
+      if (sortedTLogs.length === 0) {
+        throw new Error("No valid TLogs found in signing configuration");
+      }
+      return sortedTLogs[0];
+    }
+    __name(tlogService, "tlogService");
+    function tsaService(signingConfig) {
+      const compatibleTSAs = filterServicesByMaxAPIVersion(signingConfig.tsaUrls, MAX_TSA_API_VERSION);
+      const sortedTSAs = sortServicesByStartDate(compatibleTSAs);
+      if (sortedTSAs.length === 0) {
+        throw new Error("No valid TSAs found in signing configuration");
+      }
+      return sortedTSAs[0];
+    }
+    __name(tsaService, "tsaService");
+    function sortServicesByStartDate(services) {
+      const now = /* @__PURE__ */ new Date();
+      const validServices = services.filter((service) => {
+        if (!service.validFor?.end) {
+          return true;
+        }
+        return service.validFor.end >= now;
+      });
+      return validServices.sort((a, b) => {
+        const aStart = a.validFor?.start?.getTime() ?? 0;
+        const bStart = b.validFor?.start?.getTime() ?? 0;
+        return bStart - aStart;
+      });
+    }
+    __name(sortServicesByStartDate, "sortServicesByStartDate");
+    function filterServicesByMaxAPIVersion(services, apiVersion) {
+      return services.filter((service) => {
+        return service.majorApiVersion <= apiVersion;
+      });
+    }
+    __name(filterServicesByMaxAPIVersion, "filterServicesByMaxAPIVersion");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/identity/ci.js
+var require_ci = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/identity/ci.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.CIContextProvider = void 0;
+    var make_fetch_happen_1 = __importDefault(require_lib27());
+    var providers = [getGHAToken, getEnv];
+    var CIContextProvider = class {
+      static {
+        __name(this, "CIContextProvider");
+      }
+      audience;
+      /* istanbul ignore next */
+      constructor(audience = "sigstore") {
+        this.audience = audience;
+      }
+      // Invoke all registered ProviderFuncs and return the value of whichever one
+      // resolves first.
+      async getToken() {
+        return Promise.any(providers.map((getToken) => getToken(this.audience))).catch(() => Promise.reject("CI: no tokens available"));
+      }
+    };
+    exports2.CIContextProvider = CIContextProvider;
+    async function getGHAToken(audience) {
+      if (!process.env.ACTIONS_ID_TOKEN_REQUEST_URL || !process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN) {
+        return Promise.reject("no token available");
+      }
+      const url = new URL(process.env.ACTIONS_ID_TOKEN_REQUEST_URL);
+      url.searchParams.append("audience", audience);
+      const response = await (0, make_fetch_happen_1.default)(url.href, {
+        retry: 2,
+        headers: {
+          Accept: "application/json",
+          Authorization: `Bearer ${process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN}`
+        }
+      });
+      return response.json().then((data) => data.value);
+    }
+    __name(getGHAToken, "getGHAToken");
+    async function getEnv() {
+      if (!process.env.SIGSTORE_ID_TOKEN) {
+        return Promise.reject("no token available");
+      }
+      return process.env.SIGSTORE_ID_TOKEN;
+    }
+    __name(getEnv, "getEnv");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/identity/index.js
+var require_identity = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/identity/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.CIContextProvider = void 0;
+    var ci_1 = require_ci();
+    Object.defineProperty(exports2, "CIContextProvider", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return ci_1.CIContextProvider;
+    }, "get") });
+  }
+});
+
+// node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/index.js
+var require_dist8 = __commonJS({
+  "node_modules/.pnpm/@sigstore+sign@4.1.0_patch_hash=cdf99454490d44e78fde33563611c0bf50da7f256a239c94d3eb7af6c7d205fa_supports-color@10.2.2/node_modules/@sigstore/sign/dist/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.TSAWitness = exports2.RekorWitness = exports2.DEFAULT_REKOR_URL = exports2.FulcioSigner = exports2.DEFAULT_FULCIO_URL = exports2.CIContextProvider = exports2.InternalError = exports2.bundleBuilderFromSigningConfig = exports2.MessageSignatureBundleBuilder = exports2.DSSEBundleBuilder = void 0;
+    var bundler_1 = require_bundler();
+    Object.defineProperty(exports2, "DSSEBundleBuilder", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return bundler_1.DSSEBundleBuilder;
+    }, "get") });
+    Object.defineProperty(exports2, "MessageSignatureBundleBuilder", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return bundler_1.MessageSignatureBundleBuilder;
+    }, "get") });
+    var config_1 = require_config();
+    Object.defineProperty(exports2, "bundleBuilderFromSigningConfig", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return config_1.bundleBuilderFromSigningConfig;
+    }, "get") });
+    var error_1 = require_error5();
+    Object.defineProperty(exports2, "InternalError", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return error_1.InternalError;
+    }, "get") });
+    var identity_1 = require_identity();
+    Object.defineProperty(exports2, "CIContextProvider", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return identity_1.CIContextProvider;
+    }, "get") });
+    var signer_1 = require_signer();
+    Object.defineProperty(exports2, "DEFAULT_FULCIO_URL", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return signer_1.DEFAULT_FULCIO_URL;
+    }, "get") });
+    Object.defineProperty(exports2, "FulcioSigner", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return signer_1.FulcioSigner;
+    }, "get") });
+    var witness_1 = require_witness();
+    Object.defineProperty(exports2, "DEFAULT_REKOR_URL", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return witness_1.DEFAULT_REKOR_URL;
+    }, "get") });
+    Object.defineProperty(exports2, "RekorWitness", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return witness_1.RekorWitness;
+    }, "get") });
+    Object.defineProperty(exports2, "TSAWitness", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return witness_1.TSAWitness;
+    }, "get") });
+  }
+});
+
+// node_modules/.pnpm/@sigstore+tuf@4.0.2_supports-color@10.2.2/node_modules/@sigstore/tuf/dist/appdata.js
+var require_appdata = __commonJS({
+  "node_modules/.pnpm/@sigstore+tuf@4.0.2_supports-color@10.2.2/node_modules/@sigstore/tuf/dist/appdata.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.appDataPath = appDataPath;
+    var os_1 = __importDefault(require("os"));
+    var path_1 = __importDefault(require("path"));
+    function appDataPath(name) {
+      const homedir = os_1.default.homedir();
+      switch (process.platform) {
+        /* istanbul ignore next */
+        case "darwin": {
+          const appSupport = path_1.default.join(homedir, "Library", "Application Support");
+          return path_1.default.join(appSupport, name);
+        }
+        /* istanbul ignore next */
+        case "win32": {
+          const localAppData = process.env.LOCALAPPDATA || path_1.default.join(homedir, "AppData", "Local");
+          return path_1.default.join(localAppData, name, "Data");
+        }
+        /* istanbul ignore next */
+        default: {
+          const localData = process.env.XDG_DATA_HOME || path_1.default.join(homedir, ".local", "share");
+          return path_1.default.join(localData, name);
+        }
+      }
+    }
+    __name(appDataPath, "appDataPath");
+  }
+});
+
+// node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/error.js
+var require_error6 = __commonJS({
+  "node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/error.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.UnsupportedAlgorithmError = exports2.CryptoError = exports2.LengthOrHashMismatchError = exports2.UnsignedMetadataError = exports2.RepositoryError = exports2.ValueError = void 0;
+    var ValueError = class extends Error {
+      static {
+        __name(this, "ValueError");
+      }
+    };
+    exports2.ValueError = ValueError;
+    var RepositoryError = class extends Error {
+      static {
+        __name(this, "RepositoryError");
+      }
+    };
+    exports2.RepositoryError = RepositoryError;
+    var UnsignedMetadataError = class extends RepositoryError {
+      static {
+        __name(this, "UnsignedMetadataError");
+      }
+    };
+    exports2.UnsignedMetadataError = UnsignedMetadataError;
+    var LengthOrHashMismatchError = class extends RepositoryError {
+      static {
+        __name(this, "LengthOrHashMismatchError");
+      }
+    };
+    exports2.LengthOrHashMismatchError = LengthOrHashMismatchError;
+    var CryptoError = class extends Error {
+      static {
+        __name(this, "CryptoError");
+      }
+    };
+    exports2.CryptoError = CryptoError;
+    var UnsupportedAlgorithmError = class extends CryptoError {
+      static {
+        __name(this, "UnsupportedAlgorithmError");
+      }
+    };
+    exports2.UnsupportedAlgorithmError = UnsupportedAlgorithmError;
+  }
+});
+
+// node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/utils/guard.js
+var require_guard = __commonJS({
+  "node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/utils/guard.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.isDefined = isDefined;
+    exports2.isObject = isObject;
+    exports2.isStringArray = isStringArray;
+    exports2.isObjectArray = isObjectArray;
+    exports2.isStringRecord = isStringRecord;
+    exports2.isObjectRecord = isObjectRecord;
+    function isDefined(val) {
+      return val !== void 0;
+    }
+    __name(isDefined, "isDefined");
+    function isObject(value) {
+      return typeof value === "object" && value !== null;
+    }
+    __name(isObject, "isObject");
+    function isStringArray(value) {
+      return Array.isArray(value) && value.every((v) => typeof v === "string");
+    }
+    __name(isStringArray, "isStringArray");
+    function isObjectArray(value) {
+      return Array.isArray(value) && value.every(isObject);
+    }
+    __name(isObjectArray, "isObjectArray");
+    function isStringRecord(value) {
+      return typeof value === "object" && value !== null && Object.keys(value).every((k) => typeof k === "string") && Object.values(value).every((v) => typeof v === "string");
+    }
+    __name(isStringRecord, "isStringRecord");
+    function isObjectRecord(value) {
+      return typeof value === "object" && value !== null && Object.keys(value).every((k) => typeof k === "string") && Object.values(value).every((v) => typeof v === "object" && v !== null);
+    }
+    __name(isObjectRecord, "isObjectRecord");
+  }
+});
+
+// node_modules/.pnpm/@tufjs+canonical-json@2.0.0/node_modules/@tufjs/canonical-json/lib/index.js
+var require_lib29 = __commonJS({
+  "node_modules/.pnpm/@tufjs+canonical-json@2.0.0/node_modules/@tufjs/canonical-json/lib/index.js"(exports2, module2) {
+    var COMMA = ",";
+    var COLON = ":";
+    var LEFT_SQUARE_BRACKET = "[";
+    var RIGHT_SQUARE_BRACKET = "]";
+    var LEFT_CURLY_BRACKET = "{";
+    var RIGHT_CURLY_BRACKET = "}";
+    function canonicalize(object) {
+      const buffer = [];
+      if (typeof object === "string") {
+        buffer.push(canonicalizeString(object));
+      } else if (typeof object === "boolean") {
+        buffer.push(JSON.stringify(object));
+      } else if (Number.isInteger(object)) {
+        buffer.push(JSON.stringify(object));
+      } else if (object === null) {
+        buffer.push(JSON.stringify(object));
+      } else if (Array.isArray(object)) {
+        buffer.push(LEFT_SQUARE_BRACKET);
+        let first = true;
+        object.forEach((element) => {
+          if (!first) {
+            buffer.push(COMMA);
+          }
+          first = false;
+          buffer.push(canonicalize(element));
+        });
+        buffer.push(RIGHT_SQUARE_BRACKET);
+      } else if (typeof object === "object") {
+        buffer.push(LEFT_CURLY_BRACKET);
+        let first = true;
+        Object.keys(object).sort().forEach((property) => {
+          if (!first) {
+            buffer.push(COMMA);
+          }
+          first = false;
+          buffer.push(canonicalizeString(property));
+          buffer.push(COLON);
+          buffer.push(canonicalize(object[property]));
+        });
+        buffer.push(RIGHT_CURLY_BRACKET);
+      } else {
+        throw new TypeError("cannot encode " + object.toString());
+      }
+      return buffer.join("");
+    }
+    __name(canonicalize, "canonicalize");
+    function canonicalizeString(string) {
+      const escapedString = string.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
+      return '"' + escapedString + '"';
+    }
+    __name(canonicalizeString, "canonicalizeString");
+    module2.exports = {
+      canonicalize
+    };
+  }
+});
+
+// node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/utils/verify.js
+var require_verify2 = __commonJS({
+  "node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/utils/verify.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.verifySignature = void 0;
+    var canonical_json_1 = require_lib29();
+    var crypto_1 = __importDefault(require("crypto"));
+    var verifySignature = /* @__PURE__ */ __name((metaDataSignedData, key, signature) => {
+      const canonicalData = Buffer.from((0, canonical_json_1.canonicalize)(metaDataSignedData));
+      return crypto_1.default.verify(void 0, canonicalData, key, Buffer.from(signature, "hex"));
+    }, "verifySignature");
+    exports2.verifySignature = verifySignature;
+  }
+});
+
+// node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/utils/index.js
+var require_utils4 = __commonJS({
+  "node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/utils/index.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
+      var ownKeys = /* @__PURE__ */ __name(function(o) {
+        ownKeys = Object.getOwnPropertyNames || function(o2) {
+          var ar = [];
+          for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
+          return ar;
+        };
+        return ownKeys(o);
+      }, "ownKeys");
+      return function(mod) {
+        if (mod && mod.__esModule) return mod;
+        var result = {};
+        if (mod != null) {
+          for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+        }
+        __setModuleDefault(result, mod);
+        return result;
+      };
+    })();
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.crypto = exports2.guard = void 0;
+    exports2.guard = __importStar(require_guard());
+    exports2.crypto = __importStar(require_verify2());
+  }
+});
+
+// node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/base.js
+var require_base2 = __commonJS({
+  "node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/base.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Signed = exports2.MetadataKind = void 0;
+    exports2.isMetadataKind = isMetadataKind;
+    var util_1 = __importDefault(require("util"));
+    var error_1 = require_error6();
+    var utils_1 = require_utils4();
+    var SPECIFICATION_VERSION = ["1", "0", "31"];
+    var MetadataKind;
+    (function(MetadataKind2) {
+      MetadataKind2["Root"] = "root";
+      MetadataKind2["Timestamp"] = "timestamp";
+      MetadataKind2["Snapshot"] = "snapshot";
+      MetadataKind2["Targets"] = "targets";
+    })(MetadataKind || (exports2.MetadataKind = MetadataKind = {}));
+    function isMetadataKind(value) {
+      return typeof value === "string" && Object.values(MetadataKind).includes(value);
+    }
+    __name(isMetadataKind, "isMetadataKind");
+    var Signed = class _Signed {
+      static {
+        __name(this, "Signed");
+      }
+      specVersion;
+      expires;
+      version;
+      unrecognizedFields;
+      constructor(options) {
+        this.specVersion = options.specVersion || SPECIFICATION_VERSION.join(".");
+        const specList = this.specVersion.split(".");
+        if (!(specList.length === 2 || specList.length === 3) || !specList.every((item) => isNumeric(item))) {
+          throw new error_1.ValueError("Failed to parse specVersion");
+        }
+        if (specList[0] != SPECIFICATION_VERSION[0]) {
+          throw new error_1.ValueError("Unsupported specVersion");
+        }
+        this.expires = options.expires;
+        this.version = options.version;
+        this.unrecognizedFields = options.unrecognizedFields || {};
+      }
+      equals(other) {
+        if (!(other instanceof _Signed)) {
+          return false;
+        }
+        return this.specVersion === other.specVersion && this.expires === other.expires && this.version === other.version && util_1.default.isDeepStrictEqual(this.unrecognizedFields, other.unrecognizedFields);
+      }
+      isExpired(referenceTime) {
+        if (!referenceTime) {
+          referenceTime = /* @__PURE__ */ new Date();
+        }
+        return referenceTime >= new Date(this.expires);
+      }
+      static commonFieldsFromJSON(data) {
+        const { spec_version, expires, version, ...rest } = data;
+        if (!utils_1.guard.isDefined(spec_version)) {
+          throw new error_1.ValueError("spec_version is not defined");
+        } else if (typeof spec_version !== "string") {
+          throw new TypeError("spec_version must be a string");
+        }
+        if (!utils_1.guard.isDefined(expires)) {
+          throw new error_1.ValueError("expires is not defined");
+        } else if (!(typeof expires === "string")) {
+          throw new TypeError("expires must be a string");
+        }
+        if (!utils_1.guard.isDefined(version)) {
+          throw new error_1.ValueError("version is not defined");
+        } else if (!(typeof version === "number")) {
+          throw new TypeError("version must be a number");
+        }
+        return {
+          specVersion: spec_version,
+          expires,
+          version,
+          unrecognizedFields: rest
+        };
+      }
+    };
+    exports2.Signed = Signed;
+    function isNumeric(str) {
+      return !isNaN(Number(str));
+    }
+    __name(isNumeric, "isNumeric");
+  }
+});
+
+// node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/file.js
+var require_file2 = __commonJS({
+  "node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/file.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.TargetFile = exports2.MetaFile = void 0;
+    var crypto_1 = __importDefault(require("crypto"));
+    var util_1 = __importDefault(require("util"));
+    var error_1 = require_error6();
+    var utils_1 = require_utils4();
+    var MetaFile = class _MetaFile {
+      static {
+        __name(this, "MetaFile");
+      }
+      version;
+      length;
+      hashes;
+      unrecognizedFields;
+      constructor(opts) {
+        if (opts.version <= 0) {
+          throw new error_1.ValueError("Metafile version must be at least 1");
+        }
+        if (opts.length !== void 0) {
+          validateLength(opts.length);
+        }
+        this.version = opts.version;
+        this.length = opts.length;
+        this.hashes = opts.hashes;
+        this.unrecognizedFields = opts.unrecognizedFields || {};
+      }
+      equals(other) {
+        if (!(other instanceof _MetaFile)) {
+          return false;
+        }
+        return this.version === other.version && this.length === other.length && util_1.default.isDeepStrictEqual(this.hashes, other.hashes) && util_1.default.isDeepStrictEqual(this.unrecognizedFields, other.unrecognizedFields);
+      }
+      verify(data) {
+        if (this.length !== void 0) {
+          if (data.length !== this.length) {
+            throw new error_1.LengthOrHashMismatchError(`Expected length ${this.length} but got ${data.length}`);
+          }
+        }
+        if (this.hashes) {
+          Object.entries(this.hashes).forEach(([key, value]) => {
+            let hash;
+            try {
+              hash = crypto_1.default.createHash(key);
+            } catch (e) {
+              throw new error_1.LengthOrHashMismatchError(`Hash algorithm ${key} not supported`);
+            }
+            const observedHash = hash.update(data).digest("hex");
+            if (observedHash !== value) {
+              throw new error_1.LengthOrHashMismatchError(`Expected hash ${value} but got ${observedHash}`);
+            }
+          });
+        }
+      }
+      toJSON() {
+        const json = {
+          version: this.version,
+          ...this.unrecognizedFields
+        };
+        if (this.length !== void 0) {
+          json.length = this.length;
+        }
+        if (this.hashes) {
+          json.hashes = this.hashes;
+        }
+        return json;
+      }
+      static fromJSON(data) {
+        const { version, length, hashes, ...rest } = data;
+        if (typeof version !== "number") {
+          throw new TypeError("version must be a number");
+        }
+        if (utils_1.guard.isDefined(length) && typeof length !== "number") {
+          throw new TypeError("length must be a number");
+        }
+        if (utils_1.guard.isDefined(hashes) && !utils_1.guard.isStringRecord(hashes)) {
+          throw new TypeError("hashes must be string keys and values");
+        }
+        return new _MetaFile({
+          version,
+          length,
+          hashes,
+          unrecognizedFields: rest
+        });
+      }
+    };
+    exports2.MetaFile = MetaFile;
+    var TargetFile = class _TargetFile {
+      static {
+        __name(this, "TargetFile");
+      }
+      length;
+      path;
+      hashes;
+      unrecognizedFields;
+      constructor(opts) {
+        validateLength(opts.length);
+        this.length = opts.length;
+        this.path = opts.path;
+        this.hashes = opts.hashes;
+        this.unrecognizedFields = opts.unrecognizedFields || {};
+      }
+      get custom() {
+        const custom = this.unrecognizedFields["custom"];
+        if (!custom || Array.isArray(custom) || !(typeof custom === "object")) {
+          return {};
+        }
+        return custom;
+      }
+      equals(other) {
+        if (!(other instanceof _TargetFile)) {
+          return false;
+        }
+        return this.length === other.length && this.path === other.path && util_1.default.isDeepStrictEqual(this.hashes, other.hashes) && util_1.default.isDeepStrictEqual(this.unrecognizedFields, other.unrecognizedFields);
+      }
+      async verify(stream) {
+        let observedLength = 0;
+        const digests = Object.keys(this.hashes).reduce((acc, key) => {
+          try {
+            acc[key] = crypto_1.default.createHash(key);
+          } catch (e) {
+            throw new error_1.LengthOrHashMismatchError(`Hash algorithm ${key} not supported`);
+          }
+          return acc;
+        }, {});
+        for await (const chunk of stream) {
+          observedLength += chunk.length;
+          Object.values(digests).forEach((digest) => {
+            digest.update(chunk);
+          });
+        }
+        if (observedLength !== this.length) {
+          throw new error_1.LengthOrHashMismatchError(`Expected length ${this.length} but got ${observedLength}`);
+        }
+        Object.entries(digests).forEach(([key, value]) => {
+          const expected = this.hashes[key];
+          const actual = value.digest("hex");
+          if (actual !== expected) {
+            throw new error_1.LengthOrHashMismatchError(`Expected hash ${expected} but got ${actual}`);
+          }
+        });
+      }
+      toJSON() {
+        return {
+          length: this.length,
+          hashes: this.hashes,
+          ...this.unrecognizedFields
+        };
+      }
+      static fromJSON(path, data) {
+        const { length, hashes, ...rest } = data;
+        if (typeof length !== "number") {
+          throw new TypeError("length must be a number");
+        }
+        if (!utils_1.guard.isStringRecord(hashes)) {
+          throw new TypeError("hashes must have string keys and values");
+        }
+        return new _TargetFile({
+          length,
+          path,
+          hashes,
+          unrecognizedFields: rest
+        });
+      }
+    };
+    exports2.TargetFile = TargetFile;
+    function validateLength(length) {
+      if (length < 0) {
+        throw new error_1.ValueError("Length must be at least 0");
+      }
+    }
+    __name(validateLength, "validateLength");
+  }
+});
+
+// node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/utils/oid.js
+var require_oid2 = __commonJS({
+  "node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/utils/oid.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.encodeOIDString = encodeOIDString;
+    var ANS1_TAG_OID = 6;
+    function encodeOIDString(oid) {
+      const parts = oid.split(".");
+      const first = parseInt(parts[0], 10) * 40 + parseInt(parts[1], 10);
+      const rest = [];
+      parts.slice(2).forEach((part) => {
+        const bytes = encodeVariableLengthInteger(parseInt(part, 10));
+        rest.push(...bytes);
+      });
+      const der = Buffer.from([first, ...rest]);
+      return Buffer.from([ANS1_TAG_OID, der.length, ...der]);
+    }
+    __name(encodeOIDString, "encodeOIDString");
+    function encodeVariableLengthInteger(value) {
+      const bytes = [];
+      let mask = 0;
+      while (value > 0) {
+        bytes.unshift(value & 127 | mask);
+        value >>= 7;
+        mask = 128;
+      }
+      return bytes;
+    }
+    __name(encodeVariableLengthInteger, "encodeVariableLengthInteger");
+  }
+});
+
+// node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/utils/key.js
+var require_key2 = __commonJS({
+  "node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/utils/key.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.getPublicKey = getPublicKey;
+    var crypto_1 = __importDefault(require("crypto"));
+    var error_1 = require_error6();
+    var oid_1 = require_oid2();
+    var ASN1_TAG_SEQUENCE = 48;
+    var ANS1_TAG_BIT_STRING = 3;
+    var NULL_BYTE = 0;
+    var OID_EDDSA = "1.3.101.112";
+    var OID_EC_PUBLIC_KEY = "1.2.840.10045.2.1";
+    var OID_EC_CURVE_P256V1 = "1.2.840.10045.3.1.7";
+    var PEM_HEADER = "-----BEGIN PUBLIC KEY-----";
+    function getPublicKey(keyInfo) {
+      switch (keyInfo.keyType) {
+        case "rsa":
+          return getRSAPublicKey(keyInfo);
+        case "ed25519":
+          return getED25519PublicKey(keyInfo);
+        case "ecdsa":
+        case "ecdsa-sha2-nistp256":
+        case "ecdsa-sha2-nistp384":
+          return getECDCSAPublicKey(keyInfo);
+        default:
+          throw new error_1.UnsupportedAlgorithmError(`Unsupported key type: ${keyInfo.keyType}`);
+      }
+    }
+    __name(getPublicKey, "getPublicKey");
+    function getRSAPublicKey(keyInfo) {
+      if (!keyInfo.keyVal.startsWith(PEM_HEADER)) {
+        throw new error_1.CryptoError("Invalid key format");
+      }
+      const key = crypto_1.default.createPublicKey(keyInfo.keyVal);
+      switch (keyInfo.scheme) {
+        case "rsassa-pss-sha256":
+          return {
+            key,
+            padding: crypto_1.default.constants.RSA_PKCS1_PSS_PADDING
+          };
+        default:
+          throw new error_1.UnsupportedAlgorithmError(`Unsupported RSA scheme: ${keyInfo.scheme}`);
+      }
+    }
+    __name(getRSAPublicKey, "getRSAPublicKey");
+    function getED25519PublicKey(keyInfo) {
+      let key;
+      if (keyInfo.keyVal.startsWith(PEM_HEADER)) {
+        key = crypto_1.default.createPublicKey(keyInfo.keyVal);
+      } else {
+        if (!isHex(keyInfo.keyVal)) {
+          throw new error_1.CryptoError("Invalid key format");
+        }
+        key = crypto_1.default.createPublicKey({
+          key: ed25519.hexToDER(keyInfo.keyVal),
+          format: "der",
+          type: "spki"
+        });
+      }
+      return { key };
+    }
+    __name(getED25519PublicKey, "getED25519PublicKey");
+    function getECDCSAPublicKey(keyInfo) {
+      let key;
+      if (keyInfo.keyVal.startsWith(PEM_HEADER)) {
+        key = crypto_1.default.createPublicKey(keyInfo.keyVal);
+      } else {
+        if (!isHex(keyInfo.keyVal)) {
+          throw new error_1.CryptoError("Invalid key format");
+        }
+        key = crypto_1.default.createPublicKey({
+          key: ecdsa.hexToDER(keyInfo.keyVal),
+          format: "der",
+          type: "spki"
+        });
+      }
+      return { key };
+    }
+    __name(getECDCSAPublicKey, "getECDCSAPublicKey");
+    var ed25519 = {
+      // Translates a hex key into a crypto KeyObject
+      // https://keygen.sh/blog/how-to-use-hexadecimal-ed25519-keys-in-node/
+      hexToDER: /* @__PURE__ */ __name((hex) => {
+        const key = Buffer.from(hex, "hex");
+        const oid = (0, oid_1.encodeOIDString)(OID_EDDSA);
+        const elements = Buffer.concat([
+          Buffer.concat([
+            Buffer.from([ASN1_TAG_SEQUENCE]),
+            Buffer.from([oid.length]),
+            oid
+          ]),
+          Buffer.concat([
+            Buffer.from([ANS1_TAG_BIT_STRING]),
+            Buffer.from([key.length + 1]),
+            Buffer.from([NULL_BYTE]),
+            key
+          ])
+        ]);
+        const der = Buffer.concat([
+          Buffer.from([ASN1_TAG_SEQUENCE]),
+          Buffer.from([elements.length]),
+          elements
+        ]);
+        return der;
+      }, "hexToDER")
+    };
+    var ecdsa = {
+      hexToDER: /* @__PURE__ */ __name((hex) => {
+        const key = Buffer.from(hex, "hex");
+        const bitString = Buffer.concat([
+          Buffer.from([ANS1_TAG_BIT_STRING]),
+          Buffer.from([key.length + 1]),
+          Buffer.from([NULL_BYTE]),
+          key
+        ]);
+        const oids = Buffer.concat([
+          (0, oid_1.encodeOIDString)(OID_EC_PUBLIC_KEY),
+          (0, oid_1.encodeOIDString)(OID_EC_CURVE_P256V1)
+        ]);
+        const oidSequence = Buffer.concat([
+          Buffer.from([ASN1_TAG_SEQUENCE]),
+          Buffer.from([oids.length]),
+          oids
+        ]);
+        const der = Buffer.concat([
+          Buffer.from([ASN1_TAG_SEQUENCE]),
+          Buffer.from([oidSequence.length + bitString.length]),
+          oidSequence,
+          bitString
+        ]);
+        return der;
+      }, "hexToDER")
+    };
+    var isHex = /* @__PURE__ */ __name((key) => /^[0-9a-fA-F]+$/.test(key), "isHex");
+  }
+});
+
+// node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/key.js
+var require_key3 = __commonJS({
+  "node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/key.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Key = void 0;
+    var util_1 = __importDefault(require("util"));
+    var error_1 = require_error6();
+    var utils_1 = require_utils4();
+    var key_1 = require_key2();
+    var Key = class _Key {
+      static {
+        __name(this, "Key");
+      }
+      keyID;
+      keyType;
+      scheme;
+      keyVal;
+      unrecognizedFields;
+      constructor(options) {
+        const { keyID, keyType, scheme, keyVal, unrecognizedFields } = options;
+        this.keyID = keyID;
+        this.keyType = keyType;
+        this.scheme = scheme;
+        this.keyVal = keyVal;
+        this.unrecognizedFields = unrecognizedFields || {};
+      }
+      // Verifies the that the metadata.signatures contains a signature made with
+      // this key and is correctly signed.
+      verifySignature(metadata) {
+        const signature = metadata.signatures[this.keyID];
+        if (!signature)
+          throw new error_1.UnsignedMetadataError("no signature for key found in metadata");
+        if (!this.keyVal.public)
+          throw new error_1.UnsignedMetadataError("no public key found");
+        const publicKey = (0, key_1.getPublicKey)({
+          keyType: this.keyType,
+          scheme: this.scheme,
+          keyVal: this.keyVal.public
+        });
+        const signedData = metadata.signed.toJSON();
+        try {
+          if (!utils_1.crypto.verifySignature(signedData, publicKey, signature.sig)) {
+            throw new error_1.UnsignedMetadataError(`failed to verify ${this.keyID} signature`);
+          }
+        } catch (error) {
+          if (error instanceof error_1.UnsignedMetadataError) {
+            throw error;
+          }
+          throw new error_1.UnsignedMetadataError(`failed to verify ${this.keyID} signature`);
+        }
+      }
+      equals(other) {
+        if (!(other instanceof _Key)) {
+          return false;
+        }
+        return this.keyID === other.keyID && this.keyType === other.keyType && this.scheme === other.scheme && util_1.default.isDeepStrictEqual(this.keyVal, other.keyVal) && util_1.default.isDeepStrictEqual(this.unrecognizedFields, other.unrecognizedFields);
+      }
+      toJSON() {
+        return {
+          keytype: this.keyType,
+          scheme: this.scheme,
+          keyval: this.keyVal,
+          ...this.unrecognizedFields
+        };
+      }
+      static fromJSON(keyID, data) {
+        const { keytype, scheme, keyval, ...rest } = data;
+        if (typeof keytype !== "string") {
+          throw new TypeError("keytype must be a string");
+        }
+        if (typeof scheme !== "string") {
+          throw new TypeError("scheme must be a string");
+        }
+        if (!utils_1.guard.isStringRecord(keyval)) {
+          throw new TypeError("keyval must be a string record");
+        }
+        return new _Key({
+          keyID,
+          keyType: keytype,
+          scheme,
+          keyVal: keyval,
+          unrecognizedFields: rest
+        });
+      }
+    };
+    exports2.Key = Key;
+  }
+});
+
+// node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/role.js
+var require_role = __commonJS({
+  "node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/role.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.SuccinctRoles = exports2.DelegatedRole = exports2.Role = exports2.TOP_LEVEL_ROLE_NAMES = void 0;
+    var crypto_1 = __importDefault(require("crypto"));
+    var minimatch_1 = require_commonjs4();
+    var util_1 = __importDefault(require("util"));
+    var error_1 = require_error6();
+    var utils_1 = require_utils4();
+    exports2.TOP_LEVEL_ROLE_NAMES = [
+      "root",
+      "targets",
+      "snapshot",
+      "timestamp"
+    ];
+    var Role = class _Role {
+      static {
+        __name(this, "Role");
+      }
+      keyIDs;
+      threshold;
+      unrecognizedFields;
+      constructor(options) {
+        const { keyIDs, threshold, unrecognizedFields } = options;
+        if (hasDuplicates(keyIDs)) {
+          throw new error_1.ValueError("duplicate key IDs found");
+        }
+        if (threshold < 1) {
+          throw new error_1.ValueError("threshold must be at least 1");
+        }
+        this.keyIDs = keyIDs;
+        this.threshold = threshold;
+        this.unrecognizedFields = unrecognizedFields || {};
+      }
+      equals(other) {
+        if (!(other instanceof _Role)) {
+          return false;
+        }
+        return this.threshold === other.threshold && util_1.default.isDeepStrictEqual(this.keyIDs, other.keyIDs) && util_1.default.isDeepStrictEqual(this.unrecognizedFields, other.unrecognizedFields);
+      }
+      toJSON() {
+        return {
+          keyids: this.keyIDs,
+          threshold: this.threshold,
+          ...this.unrecognizedFields
+        };
+      }
+      static fromJSON(data) {
+        const { keyids, threshold, ...rest } = data;
+        if (!utils_1.guard.isStringArray(keyids)) {
+          throw new TypeError("keyids must be an array");
+        }
+        if (typeof threshold !== "number") {
+          throw new TypeError("threshold must be a number");
+        }
+        return new _Role({
+          keyIDs: keyids,
+          threshold,
+          unrecognizedFields: rest
+        });
+      }
+    };
+    exports2.Role = Role;
+    function hasDuplicates(array) {
+      return new Set(array).size !== array.length;
+    }
+    __name(hasDuplicates, "hasDuplicates");
+    var DelegatedRole = class _DelegatedRole extends Role {
+      static {
+        __name(this, "DelegatedRole");
+      }
+      name;
+      terminating;
+      paths;
+      pathHashPrefixes;
+      constructor(opts) {
+        super(opts);
+        const { name, terminating, paths, pathHashPrefixes } = opts;
+        this.name = name;
+        this.terminating = terminating;
+        if (opts.paths && opts.pathHashPrefixes) {
+          throw new error_1.ValueError("paths and pathHashPrefixes are mutually exclusive");
+        }
+        this.paths = paths;
+        this.pathHashPrefixes = pathHashPrefixes;
+      }
+      equals(other) {
+        if (!(other instanceof _DelegatedRole)) {
+          return false;
+        }
+        return super.equals(other) && this.name === other.name && this.terminating === other.terminating && util_1.default.isDeepStrictEqual(this.paths, other.paths) && util_1.default.isDeepStrictEqual(this.pathHashPrefixes, other.pathHashPrefixes);
+      }
+      isDelegatedPath(targetFilepath) {
+        if (this.paths) {
+          return this.paths.some((pathPattern) => isTargetInPathPattern(targetFilepath, pathPattern));
+        }
+        if (this.pathHashPrefixes) {
+          const hasher = crypto_1.default.createHash("sha256");
+          const pathHash = hasher.update(targetFilepath).digest("hex");
+          return this.pathHashPrefixes.some((pathHashPrefix) => pathHash.startsWith(pathHashPrefix));
+        }
+        return false;
+      }
+      toJSON() {
+        const json = {
+          ...super.toJSON(),
+          name: this.name,
+          terminating: this.terminating
+        };
+        if (this.paths) {
+          json.paths = this.paths;
+        }
+        if (this.pathHashPrefixes) {
+          json.path_hash_prefixes = this.pathHashPrefixes;
+        }
+        return json;
+      }
+      static fromJSON(data) {
+        const { keyids, threshold, name, terminating, paths, path_hash_prefixes, ...rest } = data;
+        if (!utils_1.guard.isStringArray(keyids)) {
+          throw new TypeError("keyids must be an array of strings");
+        }
+        if (typeof threshold !== "number") {
+          throw new TypeError("threshold must be a number");
+        }
+        if (typeof name !== "string") {
+          throw new TypeError("name must be a string");
+        }
+        if (typeof terminating !== "boolean") {
+          throw new TypeError("terminating must be a boolean");
+        }
+        if (utils_1.guard.isDefined(paths) && !utils_1.guard.isStringArray(paths)) {
+          throw new TypeError("paths must be an array of strings");
+        }
+        if (utils_1.guard.isDefined(path_hash_prefixes) && !utils_1.guard.isStringArray(path_hash_prefixes)) {
+          throw new TypeError("path_hash_prefixes must be an array of strings");
+        }
+        return new _DelegatedRole({
+          keyIDs: keyids,
+          threshold,
+          name,
+          terminating,
+          paths,
+          pathHashPrefixes: path_hash_prefixes,
+          unrecognizedFields: rest
+        });
+      }
+    };
+    exports2.DelegatedRole = DelegatedRole;
+    var zip = /* @__PURE__ */ __name((a, b) => a.map((k, i) => [k, b[i]]), "zip");
+    function isTargetInPathPattern(target, pattern) {
+      const targetParts = target.split("/");
+      const patternParts = pattern.split("/");
+      if (patternParts.length != targetParts.length) {
+        return false;
+      }
+      return zip(targetParts, patternParts).every(([targetPart, patternPart]) => (0, minimatch_1.minimatch)(targetPart, patternPart));
+    }
+    __name(isTargetInPathPattern, "isTargetInPathPattern");
+    var SuccinctRoles = class _SuccinctRoles extends Role {
+      static {
+        __name(this, "SuccinctRoles");
+      }
+      bitLength;
+      namePrefix;
+      numberOfBins;
+      suffixLen;
+      constructor(opts) {
+        super(opts);
+        const { bitLength, namePrefix } = opts;
+        if (bitLength <= 0 || bitLength > 32) {
+          throw new error_1.ValueError("bitLength must be between 1 and 32");
+        }
+        this.bitLength = bitLength;
+        this.namePrefix = namePrefix;
+        this.numberOfBins = Math.pow(2, bitLength);
+        this.suffixLen = (this.numberOfBins - 1).toString(16).length;
+      }
+      equals(other) {
+        if (!(other instanceof _SuccinctRoles)) {
+          return false;
+        }
+        return super.equals(other) && this.bitLength === other.bitLength && this.namePrefix === other.namePrefix;
+      }
+      /***
+       * Calculates the name of the delegated role responsible for 'target_filepath'.
+       *
+       * The target at path ''target_filepath' is assigned to a bin by casting
+       * the left-most 'bit_length' of bits of the file path hash digest to
+       * int, using it as bin index between 0 and '2**bit_length - 1'.
+       *
+       * Args:
+       *  target_filepath: URL path to a target file, relative to a base
+       *  targets URL.
+       */
+      getRoleForTarget(targetFilepath) {
+        const hasher = crypto_1.default.createHash("sha256");
+        const hasherBuffer = hasher.update(targetFilepath).digest();
+        const hashBytes = hasherBuffer.subarray(0, 4);
+        const shiftValue = 32 - this.bitLength;
+        const binNumber = hashBytes.readUInt32BE() >>> shiftValue;
+        const suffix = binNumber.toString(16).padStart(this.suffixLen, "0");
+        return `${this.namePrefix}-${suffix}`;
+      }
+      *getRoles() {
+        for (let i = 0; i < this.numberOfBins; i++) {
+          const suffix = i.toString(16).padStart(this.suffixLen, "0");
+          yield `${this.namePrefix}-${suffix}`;
+        }
+      }
+      /***
+       * Determines whether the given ``role_name`` is in one of
+       * the delegated roles that ``SuccinctRoles`` represents.
+       *
+       * Args:
+       *  role_name: The name of the role to check against.
+       */
+      isDelegatedRole(roleName) {
+        const desiredPrefix = this.namePrefix + "-";
+        if (!roleName.startsWith(desiredPrefix)) {
+          return false;
+        }
+        const suffix = roleName.slice(desiredPrefix.length, roleName.length);
+        if (suffix.length != this.suffixLen) {
+          return false;
+        }
+        if (!suffix.match(/^[0-9a-fA-F]+$/)) {
+          return false;
+        }
+        const num = parseInt(suffix, 16);
+        return 0 <= num && num < this.numberOfBins;
+      }
+      toJSON() {
+        const json = {
+          ...super.toJSON(),
+          bit_length: this.bitLength,
+          name_prefix: this.namePrefix
+        };
+        return json;
+      }
+      static fromJSON(data) {
+        const { keyids, threshold, bit_length, name_prefix, ...rest } = data;
+        if (!utils_1.guard.isStringArray(keyids)) {
+          throw new TypeError("keyids must be an array of strings");
+        }
+        if (typeof threshold !== "number") {
+          throw new TypeError("threshold must be a number");
+        }
+        if (typeof bit_length !== "number") {
+          throw new TypeError("bit_length must be a number");
+        }
+        if (typeof name_prefix !== "string") {
+          throw new TypeError("name_prefix must be a string");
+        }
+        return new _SuccinctRoles({
+          keyIDs: keyids,
+          threshold,
+          bitLength: bit_length,
+          namePrefix: name_prefix,
+          unrecognizedFields: rest
+        });
+      }
+    };
+    exports2.SuccinctRoles = SuccinctRoles;
+  }
+});
+
+// node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/root.js
+var require_root = __commonJS({
+  "node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/root.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Root = void 0;
+    var util_1 = __importDefault(require("util"));
+    var base_1 = require_base2();
+    var error_1 = require_error6();
+    var key_1 = require_key3();
+    var role_1 = require_role();
+    var utils_1 = require_utils4();
+    var Root = class _Root extends base_1.Signed {
+      static {
+        __name(this, "Root");
+      }
+      type = base_1.MetadataKind.Root;
+      keys;
+      roles;
+      consistentSnapshot;
+      constructor(options) {
+        super(options);
+        this.keys = options.keys || {};
+        this.consistentSnapshot = options.consistentSnapshot ?? true;
+        if (!options.roles) {
+          this.roles = role_1.TOP_LEVEL_ROLE_NAMES.reduce((acc, role) => ({
+            ...acc,
+            [role]: new role_1.Role({ keyIDs: [], threshold: 1 })
+          }), {});
+        } else {
+          const roleNames = new Set(Object.keys(options.roles));
+          if (!role_1.TOP_LEVEL_ROLE_NAMES.every((role) => roleNames.has(role))) {
+            throw new error_1.ValueError("missing top-level role");
+          }
+          this.roles = options.roles;
+        }
+      }
+      addKey(key, role) {
+        if (!this.roles[role]) {
+          throw new error_1.ValueError(`role ${role} does not exist`);
+        }
+        if (!this.roles[role].keyIDs.includes(key.keyID)) {
+          this.roles[role].keyIDs.push(key.keyID);
+        }
+        this.keys[key.keyID] = key;
+      }
+      equals(other) {
+        if (!(other instanceof _Root)) {
+          return false;
+        }
+        return super.equals(other) && this.consistentSnapshot === other.consistentSnapshot && util_1.default.isDeepStrictEqual(this.keys, other.keys) && util_1.default.isDeepStrictEqual(this.roles, other.roles);
+      }
+      toJSON() {
+        return {
+          _type: this.type,
+          spec_version: this.specVersion,
+          version: this.version,
+          expires: this.expires,
+          keys: keysToJSON(this.keys),
+          roles: rolesToJSON(this.roles),
+          consistent_snapshot: this.consistentSnapshot,
+          ...this.unrecognizedFields
+        };
+      }
+      static fromJSON(data) {
+        const { unrecognizedFields, ...commonFields } = base_1.Signed.commonFieldsFromJSON(data);
+        const { keys, roles, consistent_snapshot, ...rest } = unrecognizedFields;
+        if (typeof consistent_snapshot !== "boolean") {
+          throw new TypeError("consistent_snapshot must be a boolean");
+        }
+        return new _Root({
+          ...commonFields,
+          keys: keysFromJSON(keys),
+          roles: rolesFromJSON(roles),
+          consistentSnapshot: consistent_snapshot,
+          unrecognizedFields: rest
+        });
+      }
+    };
+    exports2.Root = Root;
+    function keysToJSON(keys) {
+      return Object.entries(keys).reduce((acc, [keyID, key]) => ({ ...acc, [keyID]: key.toJSON() }), {});
+    }
+    __name(keysToJSON, "keysToJSON");
+    function rolesToJSON(roles) {
+      return Object.entries(roles).reduce((acc, [roleName, role]) => ({ ...acc, [roleName]: role.toJSON() }), {});
+    }
+    __name(rolesToJSON, "rolesToJSON");
+    function keysFromJSON(data) {
+      let keys;
+      if (utils_1.guard.isDefined(data)) {
+        if (!utils_1.guard.isObjectRecord(data)) {
+          throw new TypeError("keys must be an object");
+        }
+        keys = Object.entries(data).reduce((acc, [keyID, keyData]) => ({
+          ...acc,
+          [keyID]: key_1.Key.fromJSON(keyID, keyData)
+        }), {});
+      }
+      return keys;
+    }
+    __name(keysFromJSON, "keysFromJSON");
+    function rolesFromJSON(data) {
+      let roles;
+      if (utils_1.guard.isDefined(data)) {
+        if (!utils_1.guard.isObjectRecord(data)) {
+          throw new TypeError("roles must be an object");
+        }
+        roles = Object.entries(data).reduce((acc, [roleName, roleData]) => ({
+          ...acc,
+          [roleName]: role_1.Role.fromJSON(roleData)
+        }), {});
+      }
+      return roles;
+    }
+    __name(rolesFromJSON, "rolesFromJSON");
+  }
+});
+
+// node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/signature.js
+var require_signature = __commonJS({
+  "node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/signature.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Signature = void 0;
+    var Signature = class _Signature {
+      static {
+        __name(this, "Signature");
+      }
+      keyID;
+      sig;
+      constructor(options) {
+        const { keyID, sig } = options;
+        this.keyID = keyID;
+        this.sig = sig;
+      }
+      toJSON() {
+        return {
+          keyid: this.keyID,
+          sig: this.sig
+        };
+      }
+      static fromJSON(data) {
+        const { keyid, sig } = data;
+        if (typeof keyid !== "string") {
+          throw new TypeError("keyid must be a string");
+        }
+        if (typeof sig !== "string") {
+          throw new TypeError("sig must be a string");
+        }
+        return new _Signature({
+          keyID: keyid,
+          sig
+        });
+      }
+    };
+    exports2.Signature = Signature;
+  }
+});
+
+// node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/snapshot.js
+var require_snapshot = __commonJS({
+  "node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/snapshot.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Snapshot = void 0;
+    var util_1 = __importDefault(require("util"));
+    var base_1 = require_base2();
+    var file_1 = require_file2();
+    var utils_1 = require_utils4();
+    var Snapshot = class _Snapshot extends base_1.Signed {
+      static {
+        __name(this, "Snapshot");
+      }
+      type = base_1.MetadataKind.Snapshot;
+      meta;
+      constructor(opts) {
+        super(opts);
+        this.meta = opts.meta || { "targets.json": new file_1.MetaFile({ version: 1 }) };
+      }
+      equals(other) {
+        if (!(other instanceof _Snapshot)) {
+          return false;
+        }
+        return super.equals(other) && util_1.default.isDeepStrictEqual(this.meta, other.meta);
+      }
+      toJSON() {
+        return {
+          _type: this.type,
+          meta: metaToJSON(this.meta),
+          spec_version: this.specVersion,
+          version: this.version,
+          expires: this.expires,
+          ...this.unrecognizedFields
+        };
+      }
+      static fromJSON(data) {
+        const { unrecognizedFields, ...commonFields } = base_1.Signed.commonFieldsFromJSON(data);
+        const { meta, ...rest } = unrecognizedFields;
+        return new _Snapshot({
+          ...commonFields,
+          meta: metaFromJSON(meta),
+          unrecognizedFields: rest
+        });
+      }
+    };
+    exports2.Snapshot = Snapshot;
+    function metaToJSON(meta) {
+      return Object.entries(meta).reduce((acc, [path, metadata]) => ({
+        ...acc,
+        [path]: metadata.toJSON()
+      }), {});
+    }
+    __name(metaToJSON, "metaToJSON");
+    function metaFromJSON(data) {
+      let meta;
+      if (utils_1.guard.isDefined(data)) {
+        if (!utils_1.guard.isObjectRecord(data)) {
+          throw new TypeError("meta field is malformed");
+        } else {
+          meta = Object.entries(data).reduce((acc, [path, metadata]) => ({
+            ...acc,
+            [path]: file_1.MetaFile.fromJSON(metadata)
+          }), {});
+        }
+      }
+      return meta;
+    }
+    __name(metaFromJSON, "metaFromJSON");
+  }
+});
+
+// node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/delegations.js
+var require_delegations = __commonJS({
+  "node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/delegations.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Delegations = void 0;
+    var util_1 = __importDefault(require("util"));
+    var error_1 = require_error6();
+    var key_1 = require_key3();
+    var role_1 = require_role();
+    var utils_1 = require_utils4();
+    var Delegations = class _Delegations {
+      static {
+        __name(this, "Delegations");
+      }
+      keys;
+      roles;
+      unrecognizedFields;
+      succinctRoles;
+      constructor(options) {
+        this.keys = options.keys;
+        this.unrecognizedFields = options.unrecognizedFields || {};
+        if (options.roles) {
+          if (Object.keys(options.roles).some((roleName) => role_1.TOP_LEVEL_ROLE_NAMES.includes(roleName))) {
+            throw new error_1.ValueError("Delegated role name conflicts with top-level role name");
+          }
+        }
+        this.succinctRoles = options.succinctRoles;
+        this.roles = options.roles;
+      }
+      equals(other) {
+        if (!(other instanceof _Delegations)) {
+          return false;
+        }
+        return util_1.default.isDeepStrictEqual(this.keys, other.keys) && util_1.default.isDeepStrictEqual(this.roles, other.roles) && util_1.default.isDeepStrictEqual(this.unrecognizedFields, other.unrecognizedFields) && util_1.default.isDeepStrictEqual(this.succinctRoles, other.succinctRoles);
+      }
+      *rolesForTarget(targetPath) {
+        if (this.roles) {
+          for (const role of Object.values(this.roles)) {
+            if (role.isDelegatedPath(targetPath)) {
+              yield { role: role.name, terminating: role.terminating };
+            }
+          }
+        } else if (this.succinctRoles) {
+          yield {
+            role: this.succinctRoles.getRoleForTarget(targetPath),
+            terminating: true
+          };
+        }
+      }
+      toJSON() {
+        const json = {
+          keys: keysToJSON(this.keys),
+          ...this.unrecognizedFields
+        };
+        if (this.roles) {
+          json.roles = rolesToJSON(this.roles);
+        } else if (this.succinctRoles) {
+          json.succinct_roles = this.succinctRoles.toJSON();
+        }
+        return json;
+      }
+      static fromJSON(data) {
+        const { keys, roles, succinct_roles, ...unrecognizedFields } = data;
+        let succinctRoles;
+        if (utils_1.guard.isObject(succinct_roles)) {
+          succinctRoles = role_1.SuccinctRoles.fromJSON(succinct_roles);
+        }
+        return new _Delegations({
+          keys: keysFromJSON(keys),
+          roles: rolesFromJSON(roles),
+          unrecognizedFields,
+          succinctRoles
+        });
+      }
+    };
+    exports2.Delegations = Delegations;
+    function keysToJSON(keys) {
+      return Object.entries(keys).reduce((acc, [keyId, key]) => ({
+        ...acc,
+        [keyId]: key.toJSON()
+      }), {});
+    }
+    __name(keysToJSON, "keysToJSON");
+    function rolesToJSON(roles) {
+      return Object.values(roles).map((role) => role.toJSON());
+    }
+    __name(rolesToJSON, "rolesToJSON");
+    function keysFromJSON(data) {
+      if (!utils_1.guard.isObjectRecord(data)) {
+        throw new TypeError("keys is malformed");
+      }
+      return Object.entries(data).reduce((acc, [keyID, keyData]) => ({
+        ...acc,
+        [keyID]: key_1.Key.fromJSON(keyID, keyData)
+      }), {});
+    }
+    __name(keysFromJSON, "keysFromJSON");
+    function rolesFromJSON(data) {
+      let roleMap;
+      if (utils_1.guard.isDefined(data)) {
+        if (!utils_1.guard.isObjectArray(data)) {
+          throw new TypeError("roles is malformed");
+        }
+        roleMap = data.reduce((acc, role) => {
+          const delegatedRole = role_1.DelegatedRole.fromJSON(role);
+          return {
+            ...acc,
+            [delegatedRole.name]: delegatedRole
+          };
+        }, {});
+      }
+      return roleMap;
+    }
+    __name(rolesFromJSON, "rolesFromJSON");
+  }
+});
+
+// node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/targets.js
+var require_targets = __commonJS({
+  "node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/targets.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Targets = void 0;
+    var util_1 = __importDefault(require("util"));
+    var base_1 = require_base2();
+    var delegations_1 = require_delegations();
+    var file_1 = require_file2();
+    var utils_1 = require_utils4();
+    var Targets = class _Targets extends base_1.Signed {
+      static {
+        __name(this, "Targets");
+      }
+      type = base_1.MetadataKind.Targets;
+      targets;
+      delegations;
+      constructor(options) {
+        super(options);
+        this.targets = options.targets || {};
+        this.delegations = options.delegations;
+      }
+      addTarget(target) {
+        this.targets[target.path] = target;
+      }
+      equals(other) {
+        if (!(other instanceof _Targets)) {
+          return false;
+        }
+        return super.equals(other) && util_1.default.isDeepStrictEqual(this.targets, other.targets) && util_1.default.isDeepStrictEqual(this.delegations, other.delegations);
+      }
+      toJSON() {
+        const json = {
+          _type: this.type,
+          spec_version: this.specVersion,
+          version: this.version,
+          expires: this.expires,
+          targets: targetsToJSON(this.targets),
+          ...this.unrecognizedFields
+        };
+        if (this.delegations) {
+          json.delegations = this.delegations.toJSON();
+        }
+        return json;
+      }
+      static fromJSON(data) {
+        const { unrecognizedFields, ...commonFields } = base_1.Signed.commonFieldsFromJSON(data);
+        const { targets, delegations, ...rest } = unrecognizedFields;
+        return new _Targets({
+          ...commonFields,
+          targets: targetsFromJSON(targets),
+          delegations: delegationsFromJSON(delegations),
+          unrecognizedFields: rest
+        });
+      }
+    };
+    exports2.Targets = Targets;
+    function targetsToJSON(targets) {
+      return Object.entries(targets).reduce((acc, [path, target]) => ({
+        ...acc,
+        [path]: target.toJSON()
+      }), {});
+    }
+    __name(targetsToJSON, "targetsToJSON");
+    function targetsFromJSON(data) {
+      let targets;
+      if (utils_1.guard.isDefined(data)) {
+        if (!utils_1.guard.isObjectRecord(data)) {
+          throw new TypeError("targets must be an object");
+        } else {
+          targets = Object.entries(data).reduce((acc, [path, target]) => ({
+            ...acc,
+            [path]: file_1.TargetFile.fromJSON(path, target)
+          }), {});
+        }
+      }
+      return targets;
+    }
+    __name(targetsFromJSON, "targetsFromJSON");
+    function delegationsFromJSON(data) {
+      let delegations;
+      if (utils_1.guard.isDefined(data)) {
+        if (!utils_1.guard.isObject(data)) {
+          throw new TypeError("delegations must be an object");
+        } else {
+          delegations = delegations_1.Delegations.fromJSON(data);
+        }
+      }
+      return delegations;
+    }
+    __name(delegationsFromJSON, "delegationsFromJSON");
+  }
+});
+
+// node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/timestamp.js
+var require_timestamp3 = __commonJS({
+  "node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/timestamp.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Timestamp = void 0;
+    var base_1 = require_base2();
+    var file_1 = require_file2();
+    var utils_1 = require_utils4();
+    var Timestamp = class _Timestamp extends base_1.Signed {
+      static {
+        __name(this, "Timestamp");
+      }
+      type = base_1.MetadataKind.Timestamp;
+      snapshotMeta;
+      constructor(options) {
+        super(options);
+        this.snapshotMeta = options.snapshotMeta || new file_1.MetaFile({ version: 1 });
+      }
+      equals(other) {
+        if (!(other instanceof _Timestamp)) {
+          return false;
+        }
+        return super.equals(other) && this.snapshotMeta.equals(other.snapshotMeta);
+      }
+      toJSON() {
+        return {
+          _type: this.type,
+          spec_version: this.specVersion,
+          version: this.version,
+          expires: this.expires,
+          meta: { "snapshot.json": this.snapshotMeta.toJSON() },
+          ...this.unrecognizedFields
+        };
+      }
+      static fromJSON(data) {
+        const { unrecognizedFields, ...commonFields } = base_1.Signed.commonFieldsFromJSON(data);
+        const { meta, ...rest } = unrecognizedFields;
+        return new _Timestamp({
+          ...commonFields,
+          snapshotMeta: snapshotMetaFromJSON(meta),
+          unrecognizedFields: rest
+        });
+      }
+    };
+    exports2.Timestamp = Timestamp;
+    function snapshotMetaFromJSON(data) {
+      let snapshotMeta;
+      if (utils_1.guard.isDefined(data)) {
+        const snapshotData = data["snapshot.json"];
+        if (!utils_1.guard.isDefined(snapshotData) || !utils_1.guard.isObject(snapshotData)) {
+          throw new TypeError("missing snapshot.json in meta");
+        } else {
+          snapshotMeta = file_1.MetaFile.fromJSON(snapshotData);
+        }
+      }
+      return snapshotMeta;
+    }
+    __name(snapshotMetaFromJSON, "snapshotMetaFromJSON");
+  }
+});
+
+// node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/metadata.js
+var require_metadata = __commonJS({
+  "node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/metadata.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Metadata = void 0;
+    var canonical_json_1 = require_lib29();
+    var util_1 = __importDefault(require("util"));
+    var base_1 = require_base2();
+    var error_1 = require_error6();
+    var root_1 = require_root();
+    var signature_1 = require_signature();
+    var snapshot_1 = require_snapshot();
+    var targets_1 = require_targets();
+    var timestamp_1 = require_timestamp3();
+    var utils_1 = require_utils4();
+    var Metadata = class _Metadata {
+      static {
+        __name(this, "Metadata");
+      }
+      signed;
+      signatures;
+      unrecognizedFields;
+      constructor(signed, signatures, unrecognizedFields) {
+        this.signed = signed;
+        this.signatures = signatures || {};
+        this.unrecognizedFields = unrecognizedFields || {};
+      }
+      sign(signer, append = true) {
+        const bytes = Buffer.from((0, canonical_json_1.canonicalize)(this.signed.toJSON()));
+        const signature = signer(bytes);
+        if (!append) {
+          this.signatures = {};
+        }
+        this.signatures[signature.keyID] = signature;
+      }
+      verifyDelegate(delegatedRole, delegatedMetadata) {
+        let role;
+        let keys = {};
+        switch (this.signed.type) {
+          case base_1.MetadataKind.Root:
+            keys = this.signed.keys;
+            role = this.signed.roles[delegatedRole];
+            break;
+          case base_1.MetadataKind.Targets:
+            if (!this.signed.delegations) {
+              throw new error_1.ValueError(`No delegations found for ${delegatedRole}`);
+            }
+            keys = this.signed.delegations.keys;
+            if (this.signed.delegations.roles) {
+              role = this.signed.delegations.roles[delegatedRole];
+            } else if (this.signed.delegations.succinctRoles) {
+              if (this.signed.delegations.succinctRoles.isDelegatedRole(delegatedRole)) {
+                role = this.signed.delegations.succinctRoles;
+              }
+            }
+            break;
+          default:
+            throw new TypeError("invalid metadata type");
+        }
+        if (!role) {
+          throw new error_1.ValueError(`no delegation found for ${delegatedRole}`);
+        }
+        const signingKeys = /* @__PURE__ */ new Set();
+        role.keyIDs.forEach((keyID) => {
+          const key = keys[keyID];
+          if (!key) {
+            return;
+          }
+          try {
+            key.verifySignature(delegatedMetadata);
+            signingKeys.add(key.keyID);
+          } catch (error) {
+          }
+        });
+        if (signingKeys.size < role.threshold) {
+          throw new error_1.UnsignedMetadataError(`${delegatedRole} was signed by ${signingKeys.size}/${role.threshold} keys`);
+        }
+      }
+      equals(other) {
+        if (!(other instanceof _Metadata)) {
+          return false;
+        }
+        return (
+          // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
+          this.signed.equals(other.signed) && util_1.default.isDeepStrictEqual(this.signatures, other.signatures) && util_1.default.isDeepStrictEqual(this.unrecognizedFields, other.unrecognizedFields)
+        );
+      }
+      toJSON() {
+        const signatures = Object.values(this.signatures).map((signature) => {
+          return signature.toJSON();
+        });
+        return {
+          signatures,
+          signed: this.signed.toJSON(),
+          ...this.unrecognizedFields
+        };
+      }
+      static fromJSON(type, data) {
+        const { signed, signatures, ...rest } = data;
+        if (!utils_1.guard.isDefined(signed) || !utils_1.guard.isObject(signed)) {
+          throw new TypeError("signed is not defined");
+        }
+        if (type !== signed._type) {
+          throw new error_1.ValueError(`expected '${type}', got ${signed["_type"]}`);
+        }
+        if (!utils_1.guard.isObjectArray(signatures)) {
+          throw new TypeError("signatures is not an array");
+        }
+        let signedObj;
+        switch (type) {
+          case base_1.MetadataKind.Root:
+            signedObj = root_1.Root.fromJSON(signed);
+            break;
+          case base_1.MetadataKind.Timestamp:
+            signedObj = timestamp_1.Timestamp.fromJSON(signed);
+            break;
+          case base_1.MetadataKind.Snapshot:
+            signedObj = snapshot_1.Snapshot.fromJSON(signed);
+            break;
+          case base_1.MetadataKind.Targets:
+            signedObj = targets_1.Targets.fromJSON(signed);
+            break;
+          default:
+            throw new TypeError("invalid metadata type");
+        }
+        const sigMap = {};
+        signatures.forEach((sigData) => {
+          const sig = signature_1.Signature.fromJSON(sigData);
+          if (sigMap[sig.keyID]) {
+            throw new error_1.ValueError(`multiple signatures found for keyid: ${sig.keyID}`);
+          }
+          sigMap[sig.keyID] = sig;
+        });
+        return new _Metadata(signedObj, sigMap, rest);
+      }
+    };
+    exports2.Metadata = Metadata;
+  }
+});
+
+// node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/index.js
+var require_dist9 = __commonJS({
+  "node_modules/.pnpm/@tufjs+models@4.1.0/node_modules/@tufjs/models/dist/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Timestamp = exports2.Targets = exports2.Snapshot = exports2.Signature = exports2.Root = exports2.Metadata = exports2.Key = exports2.TargetFile = exports2.MetaFile = exports2.ValueError = exports2.MetadataKind = void 0;
+    var base_1 = require_base2();
+    Object.defineProperty(exports2, "MetadataKind", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return base_1.MetadataKind;
+    }, "get") });
+    var error_1 = require_error6();
+    Object.defineProperty(exports2, "ValueError", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return error_1.ValueError;
+    }, "get") });
+    var file_1 = require_file2();
+    Object.defineProperty(exports2, "MetaFile", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return file_1.MetaFile;
+    }, "get") });
+    Object.defineProperty(exports2, "TargetFile", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return file_1.TargetFile;
+    }, "get") });
+    var key_1 = require_key3();
+    Object.defineProperty(exports2, "Key", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return key_1.Key;
+    }, "get") });
+    var metadata_1 = require_metadata();
+    Object.defineProperty(exports2, "Metadata", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return metadata_1.Metadata;
+    }, "get") });
+    var root_1 = require_root();
+    Object.defineProperty(exports2, "Root", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return root_1.Root;
+    }, "get") });
+    var signature_1 = require_signature();
+    Object.defineProperty(exports2, "Signature", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return signature_1.Signature;
+    }, "get") });
+    var snapshot_1 = require_snapshot();
+    Object.defineProperty(exports2, "Snapshot", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return snapshot_1.Snapshot;
+    }, "get") });
+    var targets_1 = require_targets();
+    Object.defineProperty(exports2, "Targets", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return targets_1.Targets;
+    }, "get") });
+    var timestamp_1 = require_timestamp3();
+    Object.defineProperty(exports2, "Timestamp", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return timestamp_1.Timestamp;
+    }, "get") });
+  }
+});
+
+// node_modules/.pnpm/tuf-js@4.1.0_supports-color@10.2.2/node_modules/tuf-js/dist/error.js
+var require_error7 = __commonJS({
+  "node_modules/.pnpm/tuf-js@4.1.0_supports-color@10.2.2/node_modules/tuf-js/dist/error.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.DownloadHTTPError = exports2.DownloadLengthMismatchError = exports2.DownloadError = exports2.ExpiredMetadataError = exports2.EqualVersionError = exports2.BadVersionError = exports2.RepositoryError = exports2.PersistError = exports2.RuntimeError = exports2.ValueError = void 0;
+    var ValueError = class extends Error {
+      static {
+        __name(this, "ValueError");
+      }
+    };
+    exports2.ValueError = ValueError;
+    var RuntimeError = class extends Error {
+      static {
+        __name(this, "RuntimeError");
+      }
+    };
+    exports2.RuntimeError = RuntimeError;
+    var PersistError = class extends Error {
+      static {
+        __name(this, "PersistError");
+      }
+    };
+    exports2.PersistError = PersistError;
+    var RepositoryError = class extends Error {
+      static {
+        __name(this, "RepositoryError");
+      }
+    };
+    exports2.RepositoryError = RepositoryError;
+    var BadVersionError = class extends RepositoryError {
+      static {
+        __name(this, "BadVersionError");
+      }
+    };
+    exports2.BadVersionError = BadVersionError;
+    var EqualVersionError = class extends BadVersionError {
+      static {
+        __name(this, "EqualVersionError");
+      }
+    };
+    exports2.EqualVersionError = EqualVersionError;
+    var ExpiredMetadataError = class extends RepositoryError {
+      static {
+        __name(this, "ExpiredMetadataError");
+      }
+    };
+    exports2.ExpiredMetadataError = ExpiredMetadataError;
+    var DownloadError = class extends Error {
+      static {
+        __name(this, "DownloadError");
+      }
+    };
+    exports2.DownloadError = DownloadError;
+    var DownloadLengthMismatchError = class extends DownloadError {
+      static {
+        __name(this, "DownloadLengthMismatchError");
+      }
+    };
+    exports2.DownloadLengthMismatchError = DownloadLengthMismatchError;
+    var DownloadHTTPError = class extends DownloadError {
+      static {
+        __name(this, "DownloadHTTPError");
+      }
+      statusCode;
+      constructor(message, statusCode) {
+        super(message);
+        this.statusCode = statusCode;
+      }
+    };
+    exports2.DownloadHTTPError = DownloadHTTPError;
+  }
+});
+
+// node_modules/.pnpm/tuf-js@4.1.0_supports-color@10.2.2/node_modules/tuf-js/dist/utils/tmpfile.js
+var require_tmpfile = __commonJS({
+  "node_modules/.pnpm/tuf-js@4.1.0_supports-color@10.2.2/node_modules/tuf-js/dist/utils/tmpfile.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.withTempFile = void 0;
+    var promises_1 = __importDefault(require("fs/promises"));
+    var os_1 = __importDefault(require("os"));
+    var path_1 = __importDefault(require("path"));
+    var withTempFile = /* @__PURE__ */ __name(async (handler) => withTempDir(async (dir) => handler(path_1.default.join(dir, "tempfile"))), "withTempFile");
+    exports2.withTempFile = withTempFile;
+    var withTempDir = /* @__PURE__ */ __name(async (handler) => {
+      const tmpDir = await promises_1.default.realpath(os_1.default.tmpdir());
+      const dir = await promises_1.default.mkdtemp(tmpDir + path_1.default.sep);
+      try {
+        return await handler(dir);
+      } finally {
+        await promises_1.default.rm(dir, { force: true, recursive: true, maxRetries: 3 });
+      }
+    }, "withTempDir");
+  }
+});
+
+// node_modules/.pnpm/tuf-js@4.1.0_supports-color@10.2.2/node_modules/tuf-js/dist/fetcher.js
+var require_fetcher = __commonJS({
+  "node_modules/.pnpm/tuf-js@4.1.0_supports-color@10.2.2/node_modules/tuf-js/dist/fetcher.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.DefaultFetcher = exports2.BaseFetcher = void 0;
+    var debug_1 = __importDefault(require_src());
+    var fs_1 = __importDefault(require("fs"));
+    var make_fetch_happen_1 = __importDefault(require_lib27());
+    var util_1 = __importDefault(require("util"));
+    var error_1 = require_error7();
+    var tmpfile_1 = require_tmpfile();
+    var log = (0, debug_1.default)("tuf:fetch");
+    var USER_AGENT_HEADER = "User-Agent";
+    var BaseFetcher = class {
+      static {
+        __name(this, "BaseFetcher");
+      }
+      // Download file from given URL. The file is downloaded to a temporary
+      // location and then passed to the given handler. The handler is responsible
+      // for moving the file to its final location. The temporary file is deleted
+      // after the handler returns.
+      async downloadFile(url, maxLength, handler) {
+        return (0, tmpfile_1.withTempFile)(async (tmpFile) => {
+          const reader = await this.fetch(url);
+          let numberOfBytesReceived = 0;
+          const fileStream = fs_1.default.createWriteStream(tmpFile);
+          try {
+            for await (const chunk of reader) {
+              numberOfBytesReceived += chunk.length;
+              if (numberOfBytesReceived > maxLength) {
+                throw new error_1.DownloadLengthMismatchError("Max length reached");
+              }
+              await writeBufferToStream(fileStream, chunk);
+            }
+          } finally {
+            await util_1.default.promisify(fileStream.close).bind(fileStream)();
+          }
+          return handler(tmpFile);
+        });
+      }
+      // Download bytes from given URL.
+      async downloadBytes(url, maxLength) {
+        return this.downloadFile(url, maxLength, async (file) => {
+          const stream = fs_1.default.createReadStream(file);
+          const chunks = [];
+          for await (const chunk of stream) {
+            chunks.push(chunk);
+          }
+          return Buffer.concat(chunks);
+        });
+      }
+    };
+    exports2.BaseFetcher = BaseFetcher;
+    var DefaultFetcher = class extends BaseFetcher {
+      static {
+        __name(this, "DefaultFetcher");
+      }
+      userAgent;
+      timeout;
+      retry;
+      constructor(options = {}) {
+        super();
+        this.userAgent = options.userAgent;
+        this.timeout = options.timeout;
+        this.retry = options.retry;
+      }
+      async fetch(url) {
+        log("GET %s", url);
+        const response = await (0, make_fetch_happen_1.default)(url, {
+          headers: {
+            [USER_AGENT_HEADER]: this.userAgent || ""
+          },
+          timeout: this.timeout,
+          retry: this.retry
+        });
+        if (!response.ok || !response?.body) {
+          throw new error_1.DownloadHTTPError("Failed to download", response.status);
+        }
+        return response.body;
+      }
+    };
+    exports2.DefaultFetcher = DefaultFetcher;
+    var writeBufferToStream = /* @__PURE__ */ __name(async (stream, buffer) => {
+      return new Promise((resolve, reject) => {
+        stream.write(buffer, (err) => {
+          if (err) {
+            reject(err);
+          }
+          resolve(true);
+        });
+      });
+    }, "writeBufferToStream");
+  }
+});
+
+// node_modules/.pnpm/tuf-js@4.1.0_supports-color@10.2.2/node_modules/tuf-js/package.json
+var require_package7 = __commonJS({
+  "node_modules/.pnpm/tuf-js@4.1.0_supports-color@10.2.2/node_modules/tuf-js/package.json"(exports2, module2) {
+    module2.exports = {
+      name: "tuf-js",
+      version: "4.1.0",
+      description: "JavaScript implementation of The Update Framework (TUF)",
+      main: "dist/index.js",
+      types: "dist/index.d.ts",
+      scripts: {
+        build: "tsc --build tsconfig.build.json",
+        clean: "rm -rf dist && rm tsconfig.build.tsbuildinfo",
+        test: "jest"
+      },
+      repository: {
+        type: "git",
+        url: "git+https://github.com/theupdateframework/tuf-js.git"
+      },
+      files: [
+        "dist"
+      ],
+      keywords: [
+        "tuf",
+        "security",
+        "update"
+      ],
+      author: "bdehamer@github.com",
+      license: "MIT",
+      bugs: {
+        url: "https://github.com/theupdateframework/tuf-js/issues"
+      },
+      homepage: "https://github.com/theupdateframework/tuf-js/tree/main/packages/client#readme",
+      devDependencies: {
+        "@tufjs/repo-mock": "4.0.1",
+        "@types/debug": "^4.1.12",
+        "@types/make-fetch-happen": "^10.0.4"
+      },
+      dependencies: {
+        "@tufjs/models": "4.1.0",
+        debug: "^4.4.3",
+        "make-fetch-happen": "^15.0.1"
+      },
+      engines: {
+        node: "^20.17.0 || >=22.9.0"
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/tuf-js@4.1.0_supports-color@10.2.2/node_modules/tuf-js/dist/config.js
+var require_config2 = __commonJS({
+  "node_modules/.pnpm/tuf-js@4.1.0_supports-color@10.2.2/node_modules/tuf-js/dist/config.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.defaultConfig = void 0;
+    exports2.defaultConfig = {
+      maxRootRotations: 256,
+      maxDelegations: 32,
+      rootMaxLength: 512e3,
+      //bytes
+      timestampMaxLength: 16384,
+      // bytes
+      snapshotMaxLength: 2e6,
+      // bytes
+      targetsMaxLength: 5e6,
+      // bytes
+      prefixTargetsWithHash: true,
+      fetchTimeout: 1e5,
+      // milliseconds
+      fetchRetries: void 0,
+      fetchRetry: 2,
+      userAgent: ""
+    };
+  }
+});
+
+// node_modules/.pnpm/tuf-js@4.1.0_supports-color@10.2.2/node_modules/tuf-js/dist/store.js
+var require_store = __commonJS({
+  "node_modules/.pnpm/tuf-js@4.1.0_supports-color@10.2.2/node_modules/tuf-js/dist/store.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.TrustedMetadataStore = void 0;
+    var models_1 = require_dist9();
+    var error_1 = require_error7();
+    var TrustedMetadataStore = class {
+      static {
+        __name(this, "TrustedMetadataStore");
+      }
+      trustedSet = {};
+      referenceTime;
+      constructor(rootData) {
+        this.referenceTime = /* @__PURE__ */ new Date();
+        this.loadTrustedRoot(rootData);
+      }
+      get root() {
+        if (!this.trustedSet.root) {
+          throw new ReferenceError("No trusted root metadata");
+        }
+        return this.trustedSet.root;
+      }
+      get timestamp() {
+        return this.trustedSet.timestamp;
+      }
+      get snapshot() {
+        return this.trustedSet.snapshot;
+      }
+      get targets() {
+        return this.trustedSet.targets;
+      }
+      getRole(name) {
+        return this.trustedSet[name];
+      }
+      updateRoot(bytesBuffer) {
+        const data = JSON.parse(bytesBuffer.toString("utf8"));
+        const newRoot = models_1.Metadata.fromJSON(models_1.MetadataKind.Root, data);
+        if (newRoot.signed.type != models_1.MetadataKind.Root) {
+          throw new error_1.RepositoryError(`Expected 'root', got ${newRoot.signed.type}`);
+        }
+        this.root.verifyDelegate(models_1.MetadataKind.Root, newRoot);
+        if (newRoot.signed.version != this.root.signed.version + 1) {
+          throw new error_1.BadVersionError(`Expected version ${this.root.signed.version + 1}, got ${newRoot.signed.version}`);
+        }
+        newRoot.verifyDelegate(models_1.MetadataKind.Root, newRoot);
+        this.trustedSet.root = newRoot;
+        return newRoot;
+      }
+      updateTimestamp(bytesBuffer) {
+        if (this.snapshot) {
+          throw new error_1.RuntimeError("Cannot update timestamp after snapshot");
+        }
+        if (this.root.signed.isExpired(this.referenceTime)) {
+          throw new error_1.ExpiredMetadataError("Final root.json is expired");
+        }
+        const data = JSON.parse(bytesBuffer.toString("utf8"));
+        const newTimestamp = models_1.Metadata.fromJSON(models_1.MetadataKind.Timestamp, data);
+        if (newTimestamp.signed.type != models_1.MetadataKind.Timestamp) {
+          throw new error_1.RepositoryError(`Expected 'timestamp', got ${newTimestamp.signed.type}`);
+        }
+        this.root.verifyDelegate(models_1.MetadataKind.Timestamp, newTimestamp);
+        if (this.timestamp) {
+          if (newTimestamp.signed.version < this.timestamp.signed.version) {
+            throw new error_1.BadVersionError(`New timestamp version ${newTimestamp.signed.version} is less than current version ${this.timestamp.signed.version}`);
+          }
+          if (newTimestamp.signed.version === this.timestamp.signed.version) {
+            throw new error_1.EqualVersionError(`New timestamp version ${newTimestamp.signed.version} is equal to current version ${this.timestamp.signed.version}`);
+          }
+          const snapshotMeta = this.timestamp.signed.snapshotMeta;
+          const newSnapshotMeta = newTimestamp.signed.snapshotMeta;
+          if (newSnapshotMeta.version < snapshotMeta.version) {
+            throw new error_1.BadVersionError(`New snapshot version ${newSnapshotMeta.version} is less than current version ${snapshotMeta.version}`);
+          }
+        }
+        this.trustedSet.timestamp = newTimestamp;
+        this.checkFinalTimestamp();
+        return newTimestamp;
+      }
+      updateSnapshot(bytesBuffer, trusted = false) {
+        if (!this.timestamp) {
+          throw new error_1.RuntimeError("Cannot update snapshot before timestamp");
+        }
+        if (this.targets) {
+          throw new error_1.RuntimeError("Cannot update snapshot after targets");
+        }
+        this.checkFinalTimestamp();
+        const snapshotMeta = this.timestamp.signed.snapshotMeta;
+        if (!trusted) {
+          snapshotMeta.verify(bytesBuffer);
+        }
+        const data = JSON.parse(bytesBuffer.toString("utf8"));
+        const newSnapshot = models_1.Metadata.fromJSON(models_1.MetadataKind.Snapshot, data);
+        if (newSnapshot.signed.type != models_1.MetadataKind.Snapshot) {
+          throw new error_1.RepositoryError(`Expected 'snapshot', got ${newSnapshot.signed.type}`);
+        }
+        this.root.verifyDelegate(models_1.MetadataKind.Snapshot, newSnapshot);
+        if (this.snapshot) {
+          Object.entries(this.snapshot.signed.meta).forEach(([fileName, fileInfo]) => {
+            const newFileInfo = newSnapshot.signed.meta[fileName];
+            if (!newFileInfo) {
+              throw new error_1.RepositoryError(`Missing file ${fileName} in new snapshot`);
+            }
+            if (newFileInfo.version < fileInfo.version) {
+              throw new error_1.BadVersionError(`New version ${newFileInfo.version} of ${fileName} is less than current version ${fileInfo.version}`);
+            }
+          });
+        }
+        this.trustedSet.snapshot = newSnapshot;
+        this.checkFinalSnapsnot();
+        return newSnapshot;
+      }
+      updateDelegatedTargets(bytesBuffer, roleName, delegatorName) {
+        if (!this.snapshot) {
+          throw new error_1.RuntimeError("Cannot update delegated targets before snapshot");
+        }
+        this.checkFinalSnapsnot();
+        const delegator = this.trustedSet[delegatorName];
+        if (!delegator) {
+          throw new error_1.RuntimeError(`No trusted ${delegatorName} metadata`);
+        }
+        const meta = this.snapshot.signed.meta?.[`${roleName}.json`];
+        if (!meta) {
+          throw new error_1.RepositoryError(`Missing ${roleName}.json in snapshot`);
+        }
+        meta.verify(bytesBuffer);
+        const data = JSON.parse(bytesBuffer.toString("utf8"));
+        const newDelegate = models_1.Metadata.fromJSON(models_1.MetadataKind.Targets, data);
+        if (newDelegate.signed.type != models_1.MetadataKind.Targets) {
+          throw new error_1.RepositoryError(`Expected 'targets', got ${newDelegate.signed.type}`);
+        }
+        delegator.verifyDelegate(roleName, newDelegate);
+        const version = newDelegate.signed.version;
+        if (version != meta.version) {
+          throw new error_1.BadVersionError(`Version ${version} of ${roleName} does not match snapshot version ${meta.version}`);
+        }
+        if (newDelegate.signed.isExpired(this.referenceTime)) {
+          throw new error_1.ExpiredMetadataError(`${roleName}.json is expired`);
+        }
+        this.trustedSet[roleName] = newDelegate;
+      }
+      // Verifies and loads data as trusted root metadata.
+      // Note that an expired initial root is still considered valid.
+      loadTrustedRoot(bytesBuffer) {
+        const data = JSON.parse(bytesBuffer.toString("utf8"));
+        const root = models_1.Metadata.fromJSON(models_1.MetadataKind.Root, data);
+        if (root.signed.type != models_1.MetadataKind.Root) {
+          throw new error_1.RepositoryError(`Expected 'root', got ${root.signed.type}`);
+        }
+        root.verifyDelegate(models_1.MetadataKind.Root, root);
+        this.trustedSet["root"] = root;
+      }
+      checkFinalTimestamp() {
+        if (!this.timestamp) {
+          throw new ReferenceError("No trusted timestamp metadata");
+        }
+        if (this.timestamp.signed.isExpired(this.referenceTime)) {
+          throw new error_1.ExpiredMetadataError("Final timestamp.json is expired");
+        }
+      }
+      checkFinalSnapsnot() {
+        if (!this.snapshot) {
+          throw new ReferenceError("No trusted snapshot metadata");
+        }
+        if (!this.timestamp) {
+          throw new ReferenceError("No trusted timestamp metadata");
+        }
+        if (this.snapshot.signed.isExpired(this.referenceTime)) {
+          throw new error_1.ExpiredMetadataError("snapshot.json is expired");
+        }
+        const snapshotMeta = this.timestamp.signed.snapshotMeta;
+        if (this.snapshot.signed.version !== snapshotMeta.version) {
+          throw new error_1.BadVersionError("Snapshot version doesn't match timestamp");
+        }
+      }
+    };
+    exports2.TrustedMetadataStore = TrustedMetadataStore;
+  }
+});
+
+// node_modules/.pnpm/tuf-js@4.1.0_supports-color@10.2.2/node_modules/tuf-js/dist/utils/url.js
+var require_url = __commonJS({
+  "node_modules/.pnpm/tuf-js@4.1.0_supports-color@10.2.2/node_modules/tuf-js/dist/utils/url.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.join = join;
+    var url_1 = require("url");
+    function join(base, path) {
+      return new url_1.URL(ensureTrailingSlash(base) + removeLeadingSlash(path)).toString();
+    }
+    __name(join, "join");
+    function ensureTrailingSlash(path) {
+      return path.endsWith("/") ? path : path + "/";
+    }
+    __name(ensureTrailingSlash, "ensureTrailingSlash");
+    function removeLeadingSlash(path) {
+      return path.startsWith("/") ? path.slice(1) : path;
+    }
+    __name(removeLeadingSlash, "removeLeadingSlash");
+  }
+});
+
+// node_modules/.pnpm/tuf-js@4.1.0_supports-color@10.2.2/node_modules/tuf-js/dist/updater.js
+var require_updater = __commonJS({
+  "node_modules/.pnpm/tuf-js@4.1.0_supports-color@10.2.2/node_modules/tuf-js/dist/updater.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
+      var ownKeys = /* @__PURE__ */ __name(function(o) {
+        ownKeys = Object.getOwnPropertyNames || function(o2) {
+          var ar = [];
+          for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
+          return ar;
+        };
+        return ownKeys(o);
+      }, "ownKeys");
+      return function(mod) {
+        if (mod && mod.__esModule) return mod;
+        var result = {};
+        if (mod != null) {
+          for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+        }
+        __setModuleDefault(result, mod);
+        return result;
+      };
+    })();
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Updater = void 0;
+    var models_1 = require_dist9();
+    var debug_1 = __importDefault(require_src());
+    var fs = __importStar(require("fs"));
+    var path = __importStar(require("path"));
+    var package_json_1 = require_package7();
+    var config_1 = require_config2();
+    var error_1 = require_error7();
+    var fetcher_1 = require_fetcher();
+    var store_1 = require_store();
+    var url = __importStar(require_url());
+    var log = (0, debug_1.default)("tuf:cache");
+    var Updater = class {
+      static {
+        __name(this, "Updater");
+      }
+      dir;
+      metadataBaseUrl;
+      targetDir;
+      targetBaseUrl;
+      forceCache;
+      trustedSet;
+      config;
+      fetcher;
+      constructor(options) {
+        const { metadataDir, metadataBaseUrl, targetDir, targetBaseUrl, fetcher, config } = options;
+        this.dir = metadataDir;
+        this.metadataBaseUrl = metadataBaseUrl;
+        this.targetDir = targetDir;
+        this.targetBaseUrl = targetBaseUrl;
+        this.forceCache = options.forceCache ?? false;
+        const data = this.loadLocalMetadata(models_1.MetadataKind.Root);
+        this.trustedSet = new store_1.TrustedMetadataStore(data);
+        this.config = { ...config_1.defaultConfig, ...config };
+        const userAgent = config?.userAgent ? `${config.userAgent} tuf-js/${package_json_1.version}` : `tuf-js/${package_json_1.version}`;
+        this.fetcher = fetcher || new fetcher_1.DefaultFetcher({
+          userAgent,
+          timeout: this.config.fetchTimeout,
+          retry: this.config.fetchRetries ?? this.config.fetchRetry
+        });
+      }
+      // refresh and load the metadata before downloading the target
+      // refresh should be called once after the client is initialized
+      async refresh() {
+        if (this.forceCache) {
+          try {
+            await this.loadTimestamp({ checkRemote: false });
+          } catch (error) {
+            await this.loadRoot();
+            await this.loadTimestamp();
+          }
+        } else {
+          await this.loadRoot();
+          await this.loadTimestamp();
+        }
+        await this.loadSnapshot();
+        await this.loadTargets(models_1.MetadataKind.Targets, models_1.MetadataKind.Root);
+      }
+      // Returns the TargetFile instance with information for the given target path.
+      //
+      // Implicitly calls refresh if it hasn't already been called.
+      async getTargetInfo(targetPath) {
+        if (!this.trustedSet.targets) {
+          await this.refresh();
+        }
+        return this.preorderDepthFirstWalk(targetPath);
+      }
+      async downloadTarget(targetInfo, filePath, targetBaseUrl) {
+        const targetPath = filePath || this.generateTargetPath(targetInfo);
+        if (!targetBaseUrl) {
+          if (!this.targetBaseUrl) {
+            throw new error_1.ValueError("Target base URL not set");
+          }
+          targetBaseUrl = this.targetBaseUrl;
+        }
+        let targetFilePath = targetInfo.path;
+        const consistentSnapshot = this.trustedSet.root.signed.consistentSnapshot;
+        if (consistentSnapshot && this.config.prefixTargetsWithHash) {
+          const hashes = Object.values(targetInfo.hashes);
+          const { dir, base } = path.parse(targetFilePath);
+          const filename = `${hashes[0]}.${base}`;
+          targetFilePath = dir ? `${dir}/${filename}` : filename;
+        }
+        const targetUrl = url.join(targetBaseUrl, targetFilePath);
+        await this.fetcher.downloadFile(targetUrl, targetInfo.length, async (fileName) => {
+          await targetInfo.verify(fs.createReadStream(fileName));
+          log("WRITE %s", targetPath);
+          fs.copyFileSync(fileName, targetPath);
+        });
+        return targetPath;
+      }
+      async findCachedTarget(targetInfo, filePath) {
+        if (!filePath) {
+          filePath = this.generateTargetPath(targetInfo);
+        }
+        try {
+          if (fs.existsSync(filePath)) {
+            await targetInfo.verify(fs.createReadStream(filePath));
+            return filePath;
+          }
+        } catch (error) {
+          return;
+        }
+        return;
+      }
+      loadLocalMetadata(fileName) {
+        const filePath = path.join(this.dir, `${fileName}.json`);
+        log("READ %s", filePath);
+        return fs.readFileSync(filePath);
+      }
+      // Sequentially load and persist on local disk every newer root metadata
+      // version available on the remote.
+      // Client workflow 5.3: update root role
+      async loadRoot() {
+        const rootVersion = this.trustedSet.root.signed.version;
+        const lowerBound = rootVersion + 1;
+        const upperBound = lowerBound + this.config.maxRootRotations;
+        for (let version = lowerBound; version < upperBound; version++) {
+          const rootUrl = url.join(this.metadataBaseUrl, `${version}.root.json`);
+          try {
+            const bytesData = await this.fetcher.downloadBytes(rootUrl, this.config.rootMaxLength);
+            this.trustedSet.updateRoot(bytesData);
+            this.persistMetadata(models_1.MetadataKind.Root, bytesData);
+          } catch (error) {
+            if (error instanceof error_1.DownloadHTTPError) {
+              if ([403, 404].includes(error.statusCode)) {
+                break;
+              }
+            }
+            throw error;
+          }
+        }
+      }
+      // Load local and remote timestamp metadata.
+      // Client workflow 5.4: update timestamp role
+      async loadTimestamp({ checkRemote } = { checkRemote: true }) {
+        try {
+          const data = this.loadLocalMetadata(models_1.MetadataKind.Timestamp);
+          this.trustedSet.updateTimestamp(data);
+          if (!checkRemote) {
+            return;
+          }
+        } catch (error) {
+        }
+        const timestampUrl = url.join(this.metadataBaseUrl, "timestamp.json");
+        const bytesData = await this.fetcher.downloadBytes(timestampUrl, this.config.timestampMaxLength);
+        try {
+          this.trustedSet.updateTimestamp(bytesData);
+        } catch (error) {
+          if (error instanceof error_1.EqualVersionError) {
+            return;
+          }
+          throw error;
+        }
+        this.persistMetadata(models_1.MetadataKind.Timestamp, bytesData);
+      }
+      // Load local and remote snapshot metadata.
+      // Client workflow 5.5: update snapshot role
+      async loadSnapshot() {
+        try {
+          const data = this.loadLocalMetadata(models_1.MetadataKind.Snapshot);
+          this.trustedSet.updateSnapshot(data, true);
+        } catch (error) {
+          if (!this.trustedSet.timestamp) {
+            throw new ReferenceError("No timestamp metadata");
+          }
+          const snapshotMeta = this.trustedSet.timestamp.signed.snapshotMeta;
+          const maxLength = snapshotMeta.length || this.config.snapshotMaxLength;
+          const version = this.trustedSet.root.signed.consistentSnapshot ? snapshotMeta.version : void 0;
+          const snapshotUrl = url.join(this.metadataBaseUrl, version ? `${version}.snapshot.json` : "snapshot.json");
+          try {
+            const bytesData = await this.fetcher.downloadBytes(snapshotUrl, maxLength);
+            this.trustedSet.updateSnapshot(bytesData);
+            this.persistMetadata(models_1.MetadataKind.Snapshot, bytesData);
+          } catch (error2) {
+            throw new error_1.RuntimeError(`Unable to load snapshot metadata error ${error2}`);
+          }
+        }
+      }
+      // Load local and remote targets metadata.
+      // Client workflow 5.6: update targets role
+      async loadTargets(role, parentRole) {
+        if (this.trustedSet.getRole(role)) {
+          return this.trustedSet.getRole(role);
+        }
+        try {
+          const buffer = this.loadLocalMetadata(role);
+          this.trustedSet.updateDelegatedTargets(buffer, role, parentRole);
+        } catch (error) {
+          if (!this.trustedSet.snapshot) {
+            throw new ReferenceError("No snapshot metadata");
+          }
+          const metaInfo = this.trustedSet.snapshot.signed.meta[`${role}.json`];
+          const maxLength = metaInfo.length || this.config.targetsMaxLength;
+          const version = this.trustedSet.root.signed.consistentSnapshot ? metaInfo.version : void 0;
+          const encodedRole = encodeURIComponent(role);
+          const metadataUrl = url.join(this.metadataBaseUrl, version ? `${version}.${encodedRole}.json` : `${encodedRole}.json`);
+          try {
+            const bytesData = await this.fetcher.downloadBytes(metadataUrl, maxLength);
+            this.trustedSet.updateDelegatedTargets(bytesData, role, parentRole);
+            this.persistMetadata(role, bytesData);
+          } catch (error2) {
+            throw new error_1.RuntimeError(`Unable to load targets error ${error2}`);
+          }
+        }
+        return this.trustedSet.getRole(role);
+      }
+      async preorderDepthFirstWalk(targetPath) {
+        const delegationsToVisit = [
+          {
+            roleName: models_1.MetadataKind.Targets,
+            parentRoleName: models_1.MetadataKind.Root
+          }
+        ];
+        const visitedRoleNames = /* @__PURE__ */ new Set();
+        while (visitedRoleNames.size <= this.config.maxDelegations && delegationsToVisit.length > 0) {
+          const { roleName, parentRoleName } = delegationsToVisit.pop();
+          if (visitedRoleNames.has(roleName)) {
+            continue;
+          }
+          const targets = (await this.loadTargets(roleName, parentRoleName))?.signed;
+          if (!targets) {
+            continue;
+          }
+          const target = targets.targets?.[targetPath];
+          if (target) {
+            return target;
+          }
+          visitedRoleNames.add(roleName);
+          if (targets.delegations) {
+            const childRolesToVisit = [];
+            const rolesForTarget = targets.delegations.rolesForTarget(targetPath);
+            for (const { role: childName, terminating } of rolesForTarget) {
+              childRolesToVisit.push({
+                roleName: childName,
+                parentRoleName: roleName
+              });
+              if (terminating) {
+                delegationsToVisit.splice(0);
+                break;
+              }
+            }
+            childRolesToVisit.reverse();
+            delegationsToVisit.push(...childRolesToVisit);
+          }
+        }
+        return;
+      }
+      generateTargetPath(targetInfo) {
+        if (!this.targetDir) {
+          throw new error_1.ValueError("Target directory not set");
+        }
+        const filePath = encodeURIComponent(targetInfo.path);
+        return path.join(this.targetDir, filePath);
+      }
+      persistMetadata(metaDataName, bytesData) {
+        const encodedName = encodeURIComponent(metaDataName);
+        try {
+          const filePath = path.join(this.dir, `${encodedName}.json`);
+          log("WRITE %s", filePath);
+          fs.writeFileSync(filePath, bytesData.toString("utf8"));
+        } catch (error) {
+          throw new error_1.PersistError(`Failed to persist metadata ${encodedName} error: ${error}`);
+        }
+      }
+    };
+    exports2.Updater = Updater;
+  }
+});
+
+// node_modules/.pnpm/tuf-js@4.1.0_supports-color@10.2.2/node_modules/tuf-js/dist/index.js
+var require_dist10 = __commonJS({
+  "node_modules/.pnpm/tuf-js@4.1.0_supports-color@10.2.2/node_modules/tuf-js/dist/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Updater = exports2.BaseFetcher = exports2.TargetFile = void 0;
+    var models_1 = require_dist9();
+    Object.defineProperty(exports2, "TargetFile", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return models_1.TargetFile;
+    }, "get") });
+    var fetcher_1 = require_fetcher();
+    Object.defineProperty(exports2, "BaseFetcher", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return fetcher_1.BaseFetcher;
+    }, "get") });
+    var updater_1 = require_updater();
+    Object.defineProperty(exports2, "Updater", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return updater_1.Updater;
+    }, "get") });
+  }
+});
+
+// node_modules/.pnpm/@sigstore+tuf@4.0.2_supports-color@10.2.2/node_modules/@sigstore/tuf/package.json
+var require_package8 = __commonJS({
+  "node_modules/.pnpm/@sigstore+tuf@4.0.2_supports-color@10.2.2/node_modules/@sigstore/tuf/package.json"(exports2, module2) {
+    module2.exports = {
+      name: "@sigstore/tuf",
+      version: "4.0.2",
+      description: "Client for the Sigstore TUF repository",
+      main: "dist/index.js",
+      types: "dist/index.d.ts",
+      scripts: {
+        clean: "shx rm -rf dist *.tsbuildinfo",
+        build: "tsc --build",
+        test: "jest"
+      },
+      files: [
+        "dist",
+        "seeds.json"
+      ],
+      author: "bdehamer@github.com",
+      license: "Apache-2.0",
+      repository: {
+        type: "git",
+        url: "git+https://github.com/sigstore/sigstore-js.git"
+      },
+      bugs: {
+        url: "https://github.com/sigstore/sigstore-js/issues"
+      },
+      homepage: "https://github.com/sigstore/sigstore-js/tree/main/packages/tuf#readme",
+      publishConfig: {
+        provenance: true
+      },
+      devDependencies: {
+        "@sigstore/jest": "^0.0.0",
+        "@tufjs/repo-mock": "^4.0.1",
+        "@types/make-fetch-happen": "^10.0.4"
+      },
+      dependencies: {
+        "@sigstore/protobuf-specs": "^0.5.0",
+        "tuf-js": "^4.1.0"
+      },
+      engines: {
+        node: "^20.17.0 || >=22.9.0"
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/@sigstore+tuf@4.0.2_supports-color@10.2.2/node_modules/@sigstore/tuf/dist/error.js
+var require_error8 = __commonJS({
+  "node_modules/.pnpm/@sigstore+tuf@4.0.2_supports-color@10.2.2/node_modules/@sigstore/tuf/dist/error.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.TUFError = void 0;
+    var TUFError = class extends Error {
+      static {
+        __name(this, "TUFError");
+      }
+      code;
+      cause;
+      constructor({ code, message, cause }) {
+        super(message);
+        this.code = code;
+        this.cause = cause;
+        this.name = this.constructor.name;
+      }
+    };
+    exports2.TUFError = TUFError;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+tuf@4.0.2_supports-color@10.2.2/node_modules/@sigstore/tuf/dist/target.js
+var require_target = __commonJS({
+  "node_modules/.pnpm/@sigstore+tuf@4.0.2_supports-color@10.2.2/node_modules/@sigstore/tuf/dist/target.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.readTarget = readTarget;
+    var fs_1 = __importDefault(require("fs"));
+    var error_1 = require_error8();
+    async function readTarget(tuf, targetPath) {
+      const path = await getTargetPath(tuf, targetPath);
+      return new Promise((resolve, reject) => {
+        fs_1.default.readFile(path, "utf-8", (err, data) => {
+          if (err) {
+            reject(new error_1.TUFError({
+              code: "TUF_READ_TARGET_ERROR",
+              message: `error reading target ${path}`,
+              cause: err
+            }));
+          } else {
+            resolve(data);
+          }
+        });
+      });
+    }
+    __name(readTarget, "readTarget");
+    async function getTargetPath(tuf, target) {
+      let targetInfo;
+      try {
+        targetInfo = await tuf.getTargetInfo(target);
+      } catch (err) {
+        throw new error_1.TUFError({
+          code: "TUF_REFRESH_METADATA_ERROR",
+          message: "error refreshing TUF metadata",
+          cause: err
+        });
+      }
+      if (!targetInfo) {
+        throw new error_1.TUFError({
+          code: "TUF_FIND_TARGET_ERROR",
+          message: `target ${target} not found`
+        });
+      }
+      let path = await tuf.findCachedTarget(targetInfo);
+      if (!path) {
+        try {
+          path = await tuf.downloadTarget(targetInfo);
+        } catch (err) {
+          throw new error_1.TUFError({
+            code: "TUF_DOWNLOAD_TARGET_ERROR",
+            message: `error downloading target ${path}`,
+            cause: err
+          });
+        }
+      }
+      return path;
+    }
+    __name(getTargetPath, "getTargetPath");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+tuf@4.0.2_supports-color@10.2.2/node_modules/@sigstore/tuf/seeds.json
+var require_seeds = __commonJS({
+  "node_modules/.pnpm/@sigstore+tuf@4.0.2_supports-color@10.2.2/node_modules/@sigstore/tuf/seeds.json"(exports2, module2) {
+    module2.exports = { "https://tuf-repo-cdn.sigstore.dev": { "root.json": "ewogInNpZ25hdHVyZXMiOiBbCiAgewogICAia2V5aWQiOiAiZTcxYTU0ZDU0MzgzNWJhODZhZGFkOTQ2MDM3OWM3NjQxZmI4NzI2ZDE2NGVhNzY2ODAxYTFjNTIyYWJhN2VhMiIsCiAgICJzaWciOiAiMzA0NjAyMjEwMGUwNGM5NzA2Mjk5YmU1ZDhjMmIxNGZiNTBiY2Q1YjljMjQxZjEwNTk3MTUzZGZlMjJmOTQzZWZlODk2YjUxNTAwMjIxMDBjZmQ3YjlmMDZhNTkwMDc4NGUzMTJkMDJiOGUzMzZlZGJiM2IyZmFiNjFhYzE0NTUwYjMxMTJiNGY5ZTMzZGY0IgogIH0sCiAgewogICAia2V5aWQiOiAiMjJmNGNhZWM2ZDhlNmY5NTU1YWY2NmIzZDRjM2NiMDZhM2JiMjNmZGM3ZTM5YzkxNmM2MWY0NjJlNmY1MmIwNiIsCiAgICJzaWciOiAiIgogIH0sCiAgewogICAia2V5aWQiOiAiNjE2NDM4MzgxMjViNDQwYjQwZGI2OTQyZjVjYjVhMzFjMGRjMDQzNjgzMTZlYjJhYWE1OGI5NTkwNGE1ODIyMiIsCiAgICJzaWciOiAiMzA0NTAyMjEwMGNjMzA4YWU3ZDM5MGZhNzgyZWUzMzc2ZGRmYWE5Mjk4MzUwMTZlODZkYWQ4MWY2OWUyZGU3ZWMxZTE3NDQzMmUwMjIwNWZiMTk5MDZhMzFjY2UxNDZjMjk2MjQ0NDNjMGQwYzJmMzNlZTgwZGFjMzlkNzIxMTRmOTM5NjA3Y2MyMjkzNyIKICB9LAogIHsKICAgImtleWlkIjogImE2ODdlNWJmNGZhYjgyYjBlZTU4ZDQ2ZTA1Yzk1MzUxNDVhMmM5YWZiNDU4ZjQzZDQyYjQ1Y2EwZmRjZTJhNzAiLAogICAic2lnIjogIjMwNDUwMjIwM2Y4YWZmN2EzMGUwNWE4YzNkOTA0YjY3MWFiMWE2ZTRlOGE2ZjUwOGI3Y2ZhMGM3ODBlNzI5NzZiZWU3YTIyNzAyMjEwMGY2NGM5Yjc2NTUyNmYzNGQ5ZWExNjMzOWNmMjM4ODkzZTFjMzM2OGI0ZjA5MTBhNjFhMWFmMjdkZGEwMWViYjkiCiAgfSwKICB7CiAgICJrZXlpZCI6ICIxODNlNjRmMzc2NzBkYzEzY2EwZDI4OTk1YTMwNTNmMzc0MDk1NGRkY2U0NDMyMWE0MWU0NjUzNGNmNDRlNjMyIiwKICAgInNpZyI6ICIzMDQ1MDIyMDIzNjNjYTI0OWFlZmE2ZDVmNjFjNDA4YTMyY2RkMDc5YjAzNGE3ODg4ZGRmMjEzNmRjNDUxNWVkNGE3Mjg0MTgwMjIxMDBiMDRlY2E0MmJjNTEwY2NiYmY1ZDMwNzgzYWFhOTM2YjFmMTM3Y2E3YTAxN2VlOWQ5MGQzNzEwNDMyZGEwNDI3IgogIH0KIF0sCiAic2lnbmVkIjogewogICJfdHlwZSI6ICJyb290IiwKICAiY29uc2lzdGVudF9zbmFwc2hvdCI6IHRydWUsCiAgImV4cGlyZXMiOiAiMjAyNi0wNi0yMlQxMzoyNzowMVoiLAogICJrZXlzIjogewogICAiMGM4NzQzMmMzYmYwOWZkOTkxODlmZGMzMmZhNWVhZWRmNGU0YTVmYWM3YmFiNzNmYTA0YTJlMGZjNjRhZjZmNSI6IHsKICAgICJrZXlpZF9oYXNoX2FsZ29yaXRobXMiOiBbCiAgICAgInNoYTI1NiIsCiAgICAgInNoYTUxMiIKICAgIF0sCiAgICAia2V5dHlwZSI6ICJlY2RzYSIsCiAgICAia2V5dmFsIjogewogICAgICJwdWJsaWMiOiAiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVdSaUdyNStqKzNKNVNzSCtadHI1bkUySDJ3TzdcbkJWK25PM3M5M2dMY2ExOHFUT3pIWTFvV3lBR0R5a01Tc0dUVUJTdDlEK0FuMEtmS3NEMm1mU000MlE9PVxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tXG4iCiAgICB9LAogICAgInNjaGVtZSI6ICJlY2RzYS1zaGEyLW5pc3RwMjU2IiwKICAgICJ4LXR1Zi1vbi1jaS1vbmxpbmUtdXJpIjogImdjcGttczpwcm9qZWN0cy9zaWdzdG9yZS1yb290LXNpZ25pbmcvbG9jYXRpb25zL2dsb2JhbC9rZXlSaW5ncy9yb290L2NyeXB0b0tleXMvdGltZXN0YW1wL2NyeXB0b0tleVZlcnNpb25zLzEiCiAgIH0sCiAgICIxODNlNjRmMzc2NzBkYzEzY2EwZDI4OTk1YTMwNTNmMzc0MDk1NGRkY2U0NDMyMWE0MWU0NjUzNGNmNDRlNjMyIjogewogICAgImtleXR5cGUiOiAiZWNkc2EiLAogICAgImtleXZhbCI6IHsKICAgICAicHVibGljIjogIi0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVNeHBQT0pDSVo1b3RHNDEwNmZHSnNlRVFpM1Y5XG5wa01ZUTR1eVY5VGoxTTdXSFhJeUxHK2prZnZ1RzBnbFExSlpiUlpaQlYzZ0FSNHNvamRHSElTZW93PT1cbi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLVxuIgogICAgfSwKICAgICJzY2hlbWUiOiAiZWNkc2Etc2hhMi1uaXN0cDI1NiIsCiAgICAieC10dWYtb24tY2kta2V5b3duZXIiOiAiQGxhbmNlIgogICB9LAogICAiMjJmNGNhZWM2ZDhlNmY5NTU1YWY2NmIzZDRjM2NiMDZhM2JiMjNmZGM3ZTM5YzkxNmM2MWY0NjJlNmY1MmIwNiI6IHsKICAgICJrZXlpZF9oYXNoX2FsZ29yaXRobXMiOiBbCiAgICAgInNoYTI1NiIsCiAgICAgInNoYTUxMiIKICAgIF0sCiAgICAia2V5dHlwZSI6ICJlY2RzYSIsCiAgICAia2V5dmFsIjogewogICAgICJwdWJsaWMiOiAiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXpCelZPbUhDUG9qTVZMU0kzNjRXaWlWOE5QckRcbjZJZ1J4Vmxpc2t6L3YreTNKRVI1bWNWR2NPTmxpRGNXTUM1SjJsZkhtalBOUGhiNEg3eG04THpmU0E9PVxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tXG4iCiAgICB9LAogICAgInNjaGVtZSI6ICJlY2RzYS1zaGEyLW5pc3RwMjU2IiwKICAgICJ4LXR1Zi1vbi1jaS1rZXlvd25lciI6ICJAc2FudGlhZ290b3JyZXMiCiAgIH0sCiAgICI2MTY0MzgzODEyNWI0NDBiNDBkYjY5NDJmNWNiNWEzMWMwZGMwNDM2ODMxNmViMmFhYTU4Yjk1OTA0YTU4MjIyIjogewogICAgImtleWlkX2hhc2hfYWxnb3JpdGhtcyI6IFsKICAgICAic2hhMjU2IiwKICAgICAic2hhNTEyIgogICAgXSwKICAgICJrZXl0eXBlIjogImVjZHNhIiwKICAgICJrZXl2YWwiOiB7CiAgICAgInB1YmxpYyI6ICItLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaW5pa1NzQVFtWWtOZUg1ZVlxL0NuSXpMYWFjT1xueGxTYWF3UURPd3FLeS90Q3F4cTV4eFBTSmMyMUs0V0loczlHeU9rS2Z6dWVZM0dJTHpjTUpaNGNXdz09XG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1cbiIKICAgIH0sCiAgICAic2NoZW1lIjogImVjZHNhLXNoYTItbmlzdHAyNTYiLAogICAgIngtdHVmLW9uLWNpLWtleW93bmVyIjogIkBib2JjYWxsYXdheSIKICAgfSwKICAgImE2ODdlNWJmNGZhYjgyYjBlZTU4ZDQ2ZTA1Yzk1MzUxNDVhMmM5YWZiNDU4ZjQzZDQyYjQ1Y2EwZmRjZTJhNzAiOiB7CiAgICAia2V5aWRfaGFzaF9hbGdvcml0aG1zIjogWwogICAgICJzaGEyNTYiLAogICAgICJzaGE1MTIiCiAgICBdLAogICAgImtleXR5cGUiOiAiZWNkc2EiLAogICAgImtleXZhbCI6IHsKICAgICAicHVibGljIjogIi0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXG5NRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUwZ2hyaDkyTHcxWXIzaWRHVjVXcUN0TURCOEN4XG4rRDhoZEM0dzJaTE5JcGxWUm9WR0xza1lhM2doZU15T2ppSjhrUGkxNWFRMi8vN1Arb2o3VXZKUEd3PT1cbi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLVxuIgogICAgfSwKICAgICJzY2hlbWUiOiAiZWNkc2Etc2hhMi1uaXN0cDI1NiIsCiAgICAieC10dWYtb24tY2kta2V5b3duZXIiOiAiQGpvc2h1YWdsIgogICB9LAogICAiZTcxYTU0ZDU0MzgzNWJhODZhZGFkOTQ2MDM3OWM3NjQxZmI4NzI2ZDE2NGVhNzY2ODAxYTFjNTIyYWJhN2VhMiI6IHsKICAgICJrZXlpZF9oYXNoX2FsZ29yaXRobXMiOiBbCiAgICAgInNoYTI1NiIsCiAgICAgInNoYTUxMiIKICAgIF0sCiAgICAia2V5dHlwZSI6ICJlY2RzYSIsCiAgICAia2V5dmFsIjogewogICAgICJwdWJsaWMiOiAiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUVYc3ozU1pYRmI4ak1WNDJqNnBKbHlqYmpSOEtcbk4zQndvY2V4cTZMTUliNXFzV0tPUXZMTjE2TlVlZkxjNEhzd09vdW1Sc1ZWYWFqU3BRUzZmb2JrUnc9PVxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tXG4iCiAgICB9LAogICAgInNjaGVtZSI6ICJlY2RzYS1zaGEyLW5pc3RwMjU2IiwKICAgICJ4LXR1Zi1vbi1jaS1rZXlvd25lciI6ICJAbW5tNjc4IgogICB9CiAgfSwKICAicm9sZXMiOiB7CiAgICJyb290IjogewogICAgImtleWlkcyI6IFsKICAgICAiZTcxYTU0ZDU0MzgzNWJhODZhZGFkOTQ2MDM3OWM3NjQxZmI4NzI2ZDE2NGVhNzY2ODAxYTFjNTIyYWJhN2VhMiIsCiAgICAgIjIyZjRjYWVjNmQ4ZTZmOTU1NWFmNjZiM2Q0YzNjYjA2YTNiYjIzZmRjN2UzOWM5MTZjNjFmNDYyZTZmNTJiMDYiLAogICAgICI2MTY0MzgzODEyNWI0NDBiNDBkYjY5NDJmNWNiNWEzMWMwZGMwNDM2ODMxNmViMmFhYTU4Yjk1OTA0YTU4MjIyIiwKICAgICAiYTY4N2U1YmY0ZmFiODJiMGVlNThkNDZlMDVjOTUzNTE0NWEyYzlhZmI0NThmNDNkNDJiNDVjYTBmZGNlMmE3MCIsCiAgICAgIjE4M2U2NGYzNzY3MGRjMTNjYTBkMjg5OTVhMzA1M2YzNzQwOTU0ZGRjZTQ0MzIxYTQxZTQ2NTM0Y2Y0NGU2MzIiCiAgICBdLAogICAgInRocmVzaG9sZCI6IDMKICAgfSwKICAgInNuYXBzaG90IjogewogICAgImtleWlkcyI6IFsKICAgICAiMGM4NzQzMmMzYmYwOWZkOTkxODlmZGMzMmZhNWVhZWRmNGU0YTVmYWM3YmFiNzNmYTA0YTJlMGZjNjRhZjZmNSIKICAgIF0sCiAgICAidGhyZXNob2xkIjogMSwKICAgICJ4LXR1Zi1vbi1jaS1leHBpcnktcGVyaW9kIjogMzY1MCwKICAgICJ4LXR1Zi1vbi1jaS1zaWduaW5nLXBlcmlvZCI6IDM2NQogICB9LAogICAidGFyZ2V0cyI6IHsKICAgICJrZXlpZHMiOiBbCiAgICAgImU3MWE1NGQ1NDM4MzViYTg2YWRhZDk0NjAzNzljNzY0MWZiODcyNmQxNjRlYTc2NjgwMWExYzUyMmFiYTdlYTIiLAogICAgICIyMmY0Y2FlYzZkOGU2Zjk1NTVhZjY2YjNkNGMzY2IwNmEzYmIyM2ZkYzdlMzljOTE2YzYxZjQ2MmU2ZjUyYjA2IiwKICAgICAiNjE2NDM4MzgxMjViNDQwYjQwZGI2OTQyZjVjYjVhMzFjMGRjMDQzNjgzMTZlYjJhYWE1OGI5NTkwNGE1ODIyMiIsCiAgICAgImE2ODdlNWJmNGZhYjgyYjBlZTU4ZDQ2ZTA1Yzk1MzUxNDVhMmM5YWZiNDU4ZjQzZDQyYjQ1Y2EwZmRjZTJhNzAiLAogICAgICIxODNlNjRmMzc2NzBkYzEzY2EwZDI4OTk1YTMwNTNmMzc0MDk1NGRkY2U0NDMyMWE0MWU0NjUzNGNmNDRlNjMyIgogICAgXSwKICAgICJ0aHJlc2hvbGQiOiAzCiAgIH0sCiAgICJ0aW1lc3RhbXAiOiB7CiAgICAia2V5aWRzIjogWwogICAgICIwYzg3NDMyYzNiZjA5ZmQ5OTE4OWZkYzMyZmE1ZWFlZGY0ZTRhNWZhYzdiYWI3M2ZhMDRhMmUwZmM2NGFmNmY1IgogICAgXSwKICAgICJ0aHJlc2hvbGQiOiAxLAogICAgIngtdHVmLW9uLWNpLWV4cGlyeS1wZXJpb2QiOiA3LAogICAgIngtdHVmLW9uLWNpLXNpZ25pbmctcGVyaW9kIjogNgogICB9CiAgfSwKICAic3BlY192ZXJzaW9uIjogIjEuMCIsCiAgInZlcnNpb24iOiAxNCwKICAieC10dWYtb24tY2ktZXhwaXJ5LXBlcmlvZCI6IDE5NywKICAieC10dWYtb24tY2ktc2lnbmluZy1wZXJpb2QiOiA0NgogfQp9", targets: { "trusted_root.json": "ewogICJtZWRpYVR5cGUiOiAiYXBwbGljYXRpb24vdm5kLmRldi5zaWdzdG9yZS50cnVzdGVkcm9vdCtqc29uO3ZlcnNpb249MC4xIiwKICAidGxvZ3MiOiBbCiAgICB7CiAgICAgICJiYXNlVXJsIjogImh0dHBzOi8vcmVrb3Iuc2lnc3RvcmUuZGV2IiwKICAgICAgImhhc2hBbGdvcml0aG0iOiAiU0hBMl8yNTYiLAogICAgICAicHVibGljS2V5IjogewogICAgICAgICJyYXdCeXRlcyI6ICJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUyRzJZKzJ0YWJkVFY1QmNHaUJJeDBhOWZBRndya0JibUxTR3RrczRMM3FYNnlZWTB6dWZCbmhDOFVyL2l5NTVHaFdQLzlBL2JZMkxoQzMwTTkrUll0dz09IiwKICAgICAgICAia2V5RGV0YWlscyI6ICJQS0lYX0VDRFNBX1AyNTZfU0hBXzI1NiIsCiAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgInN0YXJ0IjogIjIwMjEtMDEtMTJUMTE6NTM6MjdaIgogICAgICAgIH0KICAgICAgfSwKICAgICAgImxvZ0lkIjogewogICAgICAgICJrZXlJZCI6ICJ3Tkk5YXRRR2x6K1ZXZk82TFJ5Z0g0UVVmWS84VzRSRndpVDVpNVdSZ0IwPSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgImJhc2VVcmwiOiAiaHR0cHM6Ly9sb2cyMDI1LTEucmVrb3Iuc2lnc3RvcmUuZGV2IiwKICAgICAgImhhc2hBbGdvcml0aG0iOiAiU0hBMl8yNTYiLAogICAgICAicHVibGljS2V5IjogewogICAgICAgICJyYXdCeXRlcyI6ICJNQ293QlFZREsyVndBeUVBdDhybHAxa25Hd2pmYmNYQVlQWUFrbjBYaUx6MXg4TzR0MFlrRWhpZTI0ND0iLAogICAgICAgICJrZXlEZXRhaWxzIjogIlBLSVhfRUQyNTUxOSIsCiAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgInN0YXJ0IjogIjIwMjUtMDktMjNUMDA6MDA6MDBaIgogICAgICAgIH0KICAgICAgfSwKICAgICAgImxvZ0lkIjogewogICAgICAgICJrZXlJZCI6ICJ6eEdaRlZ2ZDBGRW1qUjhXckZ3TWRjQUo5dnRhWS9RWGY0NFkxd1VlUDZBPSIKICAgICAgfQogICAgfQogIF0sCiAgImNlcnRpZmljYXRlQXV0aG9yaXRpZXMiOiBbCiAgICB7CiAgICAgICJzdWJqZWN0IjogewogICAgICAgICJvcmdhbml6YXRpb24iOiAic2lnc3RvcmUuZGV2IiwKICAgICAgICAiY29tbW9uTmFtZSI6ICJzaWdzdG9yZSIKICAgICAgfSwKICAgICAgInVyaSI6ICJodHRwczovL2Z1bGNpby5zaWdzdG9yZS5kZXYiLAogICAgICAiY2VydENoYWluIjogewogICAgICAgICJjZXJ0aWZpY2F0ZXMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJyYXdCeXRlcyI6ICJNSUlCK0RDQ0FYNmdBd0lCQWdJVE5Wa0Rab0Npb2ZQRHN5N2RmbTZnZUxidWh6QUtCZ2dxaGtqT1BRUURBekFxTVJVd0V3WURWUVFLRXd4emFXZHpkRzl5WlM1a1pYWXhFVEFQQmdOVkJBTVRDSE5wWjNOMGIzSmxNQjRYRFRJeE1ETXdOekF6TWpBeU9Wb1hEVE14TURJeU16QXpNakF5T1Zvd0tqRVZNQk1HQTFVRUNoTU1jMmxuYzNSdmNtVXVaR1YyTVJFd0R3WURWUVFERXdoemFXZHpkRzl5WlRCMk1CQUdCeXFHU000OUFnRUdCU3VCQkFBaUEySUFCTFN5QTdJaTVrK3BOTzhaRVdZMHlsZW1XRG93T2tOYTNrTCtHWkU1WjVHV2VoTDkvQTliUk5BM1JicnNaNWkwSmNhc3RhUkw3U3A1ZnAvakQ1ZHhxYy9VZFRWbmx2UzE2YW4rMllmc3dlL1F1TG9sUlVDcmNPRTIrMmlBNSt0emQ2Tm1NR1F3RGdZRFZSMFBBUUgvQkFRREFnRUdNQklHQTFVZEV3RUIvd1FJTUFZQkFmOENBUUV3SFFZRFZSME9CQllFRk1qRkhRQkJtaVFwTWxFazZ3MnVTdTFLQnRQc01COEdBMVVkSXdRWU1CYUFGTWpGSFFCQm1pUXBNbEVrNncydVN1MUtCdFBzTUFvR0NDcUdTTTQ5QkFNREEyZ0FNR1VDTUg4bGlXSmZNdWk2dlhYQmhqRGdZNE13c2xtTi9USnhWZS84M1dyRm9td21OZjA1NnkxWDQ4RjljNG0zYTNvelhBSXhBS2pSYXk1L2FqL2pzS0tHSWttUWF0akk4dXVwSHIvK0N4RnZhSldtcFlxTmtMREdSVSs5b3J6aDVoSTJScmN1YVE9PSIKICAgICAgICAgIH0KICAgICAgICBdCiAgICAgIH0sCiAgICAgICJ2YWxpZEZvciI6IHsKICAgICAgICAic3RhcnQiOiAiMjAyMS0wMy0wN1QwMzoyMDoyOVoiLAogICAgICAgICJlbmQiOiAiMjAyMi0xMi0zMVQyMzo1OTo1OS45OTlaIgogICAgICB9CiAgICB9LAogICAgewogICAgICAic3ViamVjdCI6IHsKICAgICAgICAib3JnYW5pemF0aW9uIjogInNpZ3N0b3JlLmRldiIsCiAgICAgICAgImNvbW1vbk5hbWUiOiAic2lnc3RvcmUiCiAgICAgIH0sCiAgICAgICJ1cmkiOiAiaHR0cHM6Ly9mdWxjaW8uc2lnc3RvcmUuZGV2IiwKICAgICAgImNlcnRDaGFpbiI6IHsKICAgICAgICAiY2VydGlmaWNhdGVzIjogWwogICAgICAgICAgewogICAgICAgICAgICAicmF3Qnl0ZXMiOiAiTUlJQ0dqQ0NBYUdnQXdJQkFnSVVBTG5WaVZmblUwYnJKYXNtUmtIcm4vVW5mYVF3Q2dZSUtvWkl6ajBFQXdNd0tqRVZNQk1HQTFVRUNoTU1jMmxuYzNSdmNtVXVaR1YyTVJFd0R3WURWUVFERXdoemFXZHpkRzl5WlRBZUZ3MHlNakEwTVRNeU1EQTJNVFZhRncwek1URXdNRFV4TXpVMk5UaGFNRGN4RlRBVEJnTlZCQW9UREhOcFozTjBiM0psTG1SbGRqRWVNQndHQTFVRUF4TVZjMmxuYzNSdmNtVXRhVzUwWlhKdFpXUnBZWFJsTUhZd0VBWUhLb1pJemowQ0FRWUZLNEVFQUNJRFlnQUU4UlZTL3lzSCtOT3Z1RFp5UEladGlsZ1VGOU5sYXJZcEFkOUhQMXZCQkgxVTVDVjc3TFNTN3MwWmlING5FN0h2N3B0UzZMdnZSL1NUazc5OExWZ016TGxKNEhlSWZGM3RIU2FleExjWXBTQVNyMWtTME4vUmdCSnovOWpXQ2lYbm8zc3dlVEFPQmdOVkhROEJBZjhFQkFNQ0FRWXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUhBd013RWdZRFZSMFRBUUgvQkFnd0JnRUIvd0lCQURBZEJnTlZIUTRFRmdRVTM5UHB6MVlrRVpiNXFOanBLRldpeGk0WVpEOHdId1lEVlIwakJCZ3dGb0FVV01BZVg1RkZwV2FwZXN5UW9aTWkwQ3JGeGZvd0NnWUlLb1pJemowRUF3TURad0F3WkFJd1BDc1FLNERZaVpZRFBJYURpNUhGS25meFh4NkFTU1ZtRVJmc3luWUJpWDJYNlNKUm5aVTg0LzlEWmRuRnZ2eG1BakJPdDZRcEJsYzRKLzBEeHZrVENxcGNsdnppTDZCQ0NQbmpkbElCM1B1M0J4c1BteWdVWTdJaTJ6YmRDZGxpaW93PSIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJyYXdCeXRlcyI6ICJNSUlCOXpDQ0FYeWdBd0lCQWdJVUFMWk5BUEZkeEhQd2plRGxvRHd5WUNoQU8vNHdDZ1lJS29aSXpqMEVBd013S2pFVk1CTUdBMVVFQ2hNTWMybG5jM1J2Y21VdVpHVjJNUkV3RHdZRFZRUURFd2h6YVdkemRHOXlaVEFlRncweU1URXdNRGN4TXpVMk5UbGFGdzB6TVRFd01EVXhNelUyTlRoYU1Db3hGVEFUQmdOVkJBb1RESE5wWjNOMGIzSmxMbVJsZGpFUk1BOEdBMVVFQXhNSWMybG5jM1J2Y21Vd2RqQVFCZ2NxaGtqT1BRSUJCZ1VyZ1FRQUlnTmlBQVQ3WGVGVDRyYjNQUUd3UzRJYWp0TGszL09sbnBnYW5nYUJjbFlwc1lCcjVpKzR5bkIwN2NlYjNMUDBPSU9aZHhleFg2OWM1aVZ1eUpSUStIejA1eWkrVUYzdUJXQWxIcGlTNXNoMCtIMkdIRTdTWHJrMUVDNW0xVHIxOUw5Z2c5MmpZekJoTUE0R0ExVWREd0VCL3dRRUF3SUJCakFQQmdOVkhSTUJBZjhFQlRBREFRSC9NQjBHQTFVZERnUVdCQlJZd0I1ZmtVV2xacWw2ekpDaGt5TFFLc1hGK2pBZkJnTlZIU01FR0RBV2dCUll3QjVma1VXbFpxbDZ6SkNoa3lMUUtzWEYrakFLQmdncWhrak9QUVFEQXdOcEFEQm1BakVBajFuSGVYWnArMTNOV0JOYStFRHNEUDhHMVdXZzF0Q01XUC9XSFBxcGFWbzBqaHN3ZU5GWmdTczBlRTd3WUk0cUFqRUEyV0I5b3Q5OHNJa29GM3ZaWWRkMy9WdFdCNWI5VE5NZWE3SXgvc3RKNVRmY0xMZUFCTEU0Qk5KT3NRNHZuQkhKIgogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSwKICAgICAgInZhbGlkRm9yIjogewogICAgICAgICJzdGFydCI6ICIyMDIyLTA0LTEzVDIwOjA2OjE1WiIKICAgICAgfQogICAgfQogIF0sCiAgImN0bG9ncyI6IFsKICAgIHsKICAgICAgImJhc2VVcmwiOiAiaHR0cHM6Ly9jdGZlLnNpZ3N0b3JlLmRldi90ZXN0IiwKICAgICAgImhhc2hBbGdvcml0aG0iOiAiU0hBMl8yNTYiLAogICAgICAicHVibGljS2V5IjogewogICAgICAgICJyYXdCeXRlcyI6ICJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUViZndSK1JKdWRYc2NnUkJScEtYMVhGRHkzUHl1ZER4ei9TZm5SaTFmVDhla3BmQmQyTzF1b3o3anIzWjhuS3p4QTY5RVVRK2VGQ0ZJM3pldWJQV1U3dz09IiwKICAgICAgICAia2V5RGV0YWlscyI6ICJQS0lYX0VDRFNBX1AyNTZfU0hBXzI1NiIsCiAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgInN0YXJ0IjogIjIwMjEtMDMtMTRUMDA6MDA6MDBaIiwKICAgICAgICAgICJlbmQiOiAiMjAyMi0xMC0zMVQyMzo1OTo1OS45OTlaIgogICAgICAgIH0KICAgICAgfSwKICAgICAgImxvZ0lkIjogewogICAgICAgICJrZXlJZCI6ICJDR0NTOENoUy8yaEYwZEZySjRTY1JXY1lyQlk5d3pqU2JlYThJZ1kyYjNJPSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgImJhc2VVcmwiOiAiaHR0cHM6Ly9jdGZlLnNpZ3N0b3JlLmRldi8yMDIyIiwKICAgICAgImhhc2hBbGdvcml0aG0iOiAiU0hBMl8yNTYiLAogICAgICAicHVibGljS2V5IjogewogICAgICAgICJyYXdCeXRlcyI6ICJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVpUFNsRmkwQ21GVGZFakNVcUY5SHVDRWNZWE5LQWFZYWxJSm1CWjh5eWV6UGpUcWh4cktCcE1uYW9jVnRMSkJJMWVNM3VYblF6UUdBSmRKNGdzOUZ5dz09IiwKICAgICAgICAia2V5RGV0YWlscyI6ICJQS0lYX0VDRFNBX1AyNTZfU0hBXzI1NiIsCiAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgInN0YXJ0IjogIjIwMjItMTAtMjBUMDA6MDA6MDBaIgogICAgICAgIH0KICAgICAgfSwKICAgICAgImxvZ0lkIjogewogICAgICAgICJrZXlJZCI6ICIzVDB3YXNiSEVUSmpHUjRjbVdjM0FxSktYcmplUEszL2g0cHlnQzhwN280PSIKICAgICAgfQogICAgfQogIF0sCiAgInRpbWVzdGFtcEF1dGhvcml0aWVzIjogWwogICAgewogICAgICAic3ViamVjdCI6IHsKICAgICAgICAib3JnYW5pemF0aW9uIjogInNpZ3N0b3JlLmRldiIsCiAgICAgICAgImNvbW1vbk5hbWUiOiAic2lnc3RvcmUtdHNhLXNlbGZzaWduZWQiCiAgICAgIH0sCiAgICAgICJ1cmkiOiAiaHR0cHM6Ly90aW1lc3RhbXAuc2lnc3RvcmUuZGV2L2FwaS92MS90aW1lc3RhbXAiLAogICAgICAiY2VydENoYWluIjogewogICAgICAgICJjZXJ0aWZpY2F0ZXMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJyYXdCeXRlcyI6ICJNSUlDRURDQ0FaYWdBd0lCQWdJVU9oTlVMd3lRWWU2OHdVTXZ5NHFPaXlvaml3d3dDZ1lJS29aSXpqMEVBd013T1RFVk1CTUdBMVVFQ2hNTWMybG5jM1J2Y21VdVpHVjJNU0F3SGdZRFZRUURFeGR6YVdkemRHOXlaUzEwYzJFdGMyVnNabk5wWjI1bFpEQWVGdzB5TlRBME1EZ3dOalU1TkROYUZ3MHpOVEEwTURZd05qVTVORE5hTUM0eEZUQVRCZ05WQkFvVERITnBaM04wYjNKbExtUmxkakVWTUJNR0ExVUVBeE1NYzJsbmMzUnZjbVV0ZEhOaE1IWXdFQVlIS29aSXpqMENBUVlGSzRFRUFDSURZZ0FFNHJhMlo4aEtOaWcyVDlrRmpDQVRvR0czMGpreStXUXYzQnpMK21LdmgxU0tOUi9Vd3V3c2ZOQ2c0c3J5b1lBZDhFNmlzb3ZWQTNNNGFvTmRtOVFEaTUwWjhuVEV5dnFnZkRQdFRJd1hJdGZpVy9BRmYxVjd1d2tia0FvajB4eGNvMm93YURBT0JnTlZIUThCQWY4RUJBTUNCNEF3SFFZRFZSME9CQllFRkluOWVVT0h6OUJsUnNNQ1JzY3NjMXQ5dE9zRE1COEdBMVVkSXdRWU1CYUFGSmpzQWU5L3UxSC8xSlVlYjRxSW1GTUhpYzYvTUJZR0ExVWRKUUVCL3dRTU1Bb0dDQ3NHQVFVRkJ3TUlNQW9HQ0NxR1NNNDlCQU1EQTJnQU1HVUNNRHRwc1YvNkthTzBxeUYvVU1zWDJhU1VYS1FGZG9HVHB0UUdjMGZ0cTFjc3VsSFBHRzZkc215TU5kM0pCK0czRVFJeEFPYWp2QmNqcEptS2I0TnYrMlRhb2o4VWM1K2I2aWg2RlhDQ0tyYVNxdXBlMDd6cXN3TWNYSlRlMWNFeHZIdnZsdz09IgogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgInJhd0J5dGVzIjogIk1JSUI5ekNDQVh5Z0F3SUJBZ0lVVjdmMEdMRE9vRXpJaDhMWFNXODBPSmlVcDE0d0NnWUlLb1pJemowRUF3TXdPVEVWTUJNR0ExVUVDaE1NYzJsbmMzUnZjbVV1WkdWMk1TQXdIZ1lEVlFRREV4ZHphV2R6ZEc5eVpTMTBjMkV0YzJWc1puTnBaMjVsWkRBZUZ3MHlOVEEwTURnd05qVTVORE5hRncwek5UQTBNRFl3TmpVNU5ETmFNRGt4RlRBVEJnTlZCQW9UREhOcFozTjBiM0psTG1SbGRqRWdNQjRHQTFVRUF4TVhjMmxuYzNSdmNtVXRkSE5oTFhObGJHWnphV2R1WldRd2RqQVFCZ2NxaGtqT1BRSUJCZ1VyZ1FRQUlnTmlBQVFVUU50ZlJUL291M1lBVGE2d0Iva0tUZTcwY2ZKd3lSSUJvdk1udDhSY0pwaC9DT0U4MnV5UzZGbXBwTExMMVZCUEdjUGZwUVBZSk5Yeld3aThpY3doS1E2Vy9RZTJoM29lYkJiMkZIcHdOSkRxbytUTWFDL3RkZmt2L0VsSkI3MmpSVEJETUE0R0ExVWREd0VCL3dRRUF3SUJCakFTQmdOVkhSTUJBZjhFQ0RBR0FRSC9BZ0VBTUIwR0ExVWREZ1FXQkJTWTdBSHZmN3RSLzlTVkhtK0tpSmhUQjRuT3Z6QUtCZ2dxaGtqT1BRUURBd05wQURCbUFqRUF3R0VHcmZHWlIxY2VuMVI4L0RUVk1JOTQzTHNzWm1KUnREcC9pN1NmR0htR1JQNmdSYnVqOXZPSzNiNjdaMFFRQWpFQXVUMkg2NzNMUUVhSFRjeVFTWnJrcDRtWDdXd2ttRitzVmJrWVk1bVhOK1JNSDEzS1VFSEhPcUFTYWVtWVdLL0UiCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9LAogICAgICAidmFsaWRGb3IiOiB7CiAgICAgICAgInN0YXJ0IjogIjIwMjUtMDctMDRUMDA6MDA6MDBaIgogICAgICB9CiAgICB9CiAgXQp9Cg==", "registry.npmjs.org%2Fkeys.json": "ewogICAgImtleXMiOiBbCiAgICAgICAgewogICAgICAgICAgICAia2V5SWQiOiAiU0hBMjU2OmpsM2J3c3d1ODBQampva0NnaDBvMnc1YzJVNExoUUFFNTdnajljejFrekEiLAogICAgICAgICAgICAia2V5VXNhZ2UiOiAibnBtOnNpZ25hdHVyZXMiLAogICAgICAgICAgICAicHVibGljS2V5IjogewogICAgICAgICAgICAgICAgInJhd0J5dGVzIjogIk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTFPbGIzek1BRkZ4WEtIaUlrUU81Y0ozWWhsNWk2VVBwK0lodXRlQkpidUhjQTVVb2dLbzBFV3RsV3dXNktTYUtvVE5FWUw3SmxDUWlWbmtoQmt0VWdnPT0iLAogICAgICAgICAgICAgICAgImtleURldGFpbHMiOiAiUEtJWF9FQ0RTQV9QMjU2X1NIQV8yNTYiLAogICAgICAgICAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgICAgICAgICAgICJzdGFydCI6ICIxOTk5LTAxLTAxVDAwOjAwOjAwLjAwMFoiLAogICAgICAgICAgICAgICAgICAgICJlbmQiOiAiMjAyNS0wMS0yOVQwMDowMDowMC4wMDBaIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJrZXlJZCI6ICJTSEEyNTY6amwzYndzd3U4MFBqam9rQ2doMG8ydzVjMlU0TGhRQUU1N2dqOWN6MWt6QSIsCiAgICAgICAgICAgICJrZXlVc2FnZSI6ICJucG06YXR0ZXN0YXRpb25zIiwKICAgICAgICAgICAgInB1YmxpY0tleSI6IHsKICAgICAgICAgICAgICAgICJyYXdCeXRlcyI6ICJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUxT2xiM3pNQUZGeFhLSGlJa1FPNWNKM1lobDVpNlVQcCtJaHV0ZUJKYnVIY0E1VW9nS28wRVd0bFd3VzZLU2FLb1RORVlMN0psQ1FpVm5raEJrdFVnZz09IiwKICAgICAgICAgICAgICAgICJrZXlEZXRhaWxzIjogIlBLSVhfRUNEU0FfUDI1Nl9TSEFfMjU2IiwKICAgICAgICAgICAgICAgICJ2YWxpZEZvciI6IHsKICAgICAgICAgICAgICAgICAgICAic3RhcnQiOiAiMjAyMi0xMi0wMVQwMDowMDowMC4wMDBaIiwKICAgICAgICAgICAgICAgICAgICAiZW5kIjogIjIwMjUtMDEtMjlUMDA6MDA6MDAuMDAwWiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAia2V5SWQiOiAiU0hBMjU2OkRoUTh3UjVBUEJ2RkhMRi8rVGMrQVl2UE9kVHBjSURxT2h4c0JIUndDN1UiLAogICAgICAgICAgICAia2V5VXNhZ2UiOiAibnBtOnNpZ25hdHVyZXMiLAogICAgICAgICAgICAicHVibGljS2V5IjogewogICAgICAgICAgICAgICAgInJhd0J5dGVzIjogIk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVk2WWE3VysrN2FVUHp2TVRyZXpINlljeDNjK0hPS1lDY05HeWJKWlNDSnEvZmQ3UWE4dXVBS3RkSWtVUXRRaUVLRVJoQW1FNWxNTUpoUDhPa0RPYTJnPT0iLAogICAgICAgICAgICAgICAgImtleURldGFpbHMiOiAiUEtJWF9FQ0RTQV9QMjU2X1NIQV8yNTYiLAogICAgICAgICAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgICAgICAgICAgICJzdGFydCI6ICIyMDI1LTAxLTEzVDAwOjAwOjAwLjAwMFoiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgImtleUlkIjogIlNIQTI1NjpEaFE4d1I1QVBCdkZITEYvK1RjK0FZdlBPZFRwY0lEcU9oeHNCSFJ3QzdVIiwKICAgICAgICAgICAgImtleVVzYWdlIjogIm5wbTphdHRlc3RhdGlvbnMiLAogICAgICAgICAgICAicHVibGljS2V5IjogewogICAgICAgICAgICAgICAgInJhd0J5dGVzIjogIk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVk2WWE3VysrN2FVUHp2TVRyZXpINlljeDNjK0hPS1lDY05HeWJKWlNDSnEvZmQ3UWE4dXVBS3RkSWtVUXRRaUVLRVJoQW1FNWxNTUpoUDhPa0RPYTJnPT0iLAogICAgICAgICAgICAgICAgImtleURldGFpbHMiOiAiUEtJWF9FQ0RTQV9QMjU2X1NIQV8yNTYiLAogICAgICAgICAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgICAgICAgICAgICJzdGFydCI6ICIyMDI1LTAxLTEzVDAwOjAwOjAwLjAwMFoiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICBdCn0K" } } };
+  }
+});
+
+// node_modules/.pnpm/@sigstore+tuf@4.0.2_supports-color@10.2.2/node_modules/@sigstore/tuf/dist/client.js
+var require_client3 = __commonJS({
+  "node_modules/.pnpm/@sigstore+tuf@4.0.2_supports-color@10.2.2/node_modules/@sigstore/tuf/dist/client.js"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.TUFClient = void 0;
+    var fs_1 = __importDefault(require("fs"));
+    var path_1 = __importDefault(require("path"));
+    var tuf_js_1 = require_dist10();
+    var _1 = require_dist11();
+    var package_json_1 = require_package8();
+    var target_1 = require_target();
+    var TARGETS_DIR_NAME = "targets";
+    var TUFClient = class {
+      static {
+        __name(this, "TUFClient");
+      }
+      updater;
+      constructor(options) {
+        const url = new URL(options.mirrorURL);
+        const repoName = encodeURIComponent(url.host + url.pathname.replace(/\/$/, ""));
+        const cachePath = path_1.default.join(options.cachePath, repoName);
+        initTufCache(cachePath);
+        seedCache({
+          cachePath,
+          mirrorURL: options.mirrorURL,
+          tufRootPath: options.rootPath,
+          forceInit: options.forceInit
+        });
+        this.updater = initClient({
+          mirrorURL: options.mirrorURL,
+          cachePath,
+          forceCache: options.forceCache,
+          retry: options.retry,
+          timeout: options.timeout
+        });
+      }
+      async refresh() {
+        return this.updater.refresh();
+      }
+      getTarget(targetName) {
+        return (0, target_1.readTarget)(this.updater, targetName);
+      }
+    };
+    exports2.TUFClient = TUFClient;
+    function initTufCache(cachePath) {
+      const targetsPath = path_1.default.join(cachePath, TARGETS_DIR_NAME);
+      if (!fs_1.default.existsSync(cachePath)) {
+        fs_1.default.mkdirSync(cachePath, { recursive: true });
+      }
+      if (!fs_1.default.existsSync(targetsPath)) {
+        fs_1.default.mkdirSync(targetsPath);
+      }
+    }
+    __name(initTufCache, "initTufCache");
+    function seedCache({ cachePath, mirrorURL, tufRootPath, forceInit }) {
+      const cachedRootPath = path_1.default.join(cachePath, "root.json");
+      if (!fs_1.default.existsSync(cachedRootPath) || forceInit) {
+        if (tufRootPath) {
+          fs_1.default.copyFileSync(tufRootPath, cachedRootPath);
+        } else {
+          const seeds = require_seeds();
+          const repoSeed = seeds[mirrorURL];
+          if (!repoSeed) {
+            throw new _1.TUFError({
+              code: "TUF_INIT_CACHE_ERROR",
+              message: `No root.json found for mirror: ${mirrorURL}`
+            });
+          }
+          fs_1.default.writeFileSync(cachedRootPath, Buffer.from(repoSeed["root.json"], "base64"));
+          Object.entries(repoSeed.targets).forEach(([targetName, target]) => {
+            fs_1.default.writeFileSync(path_1.default.join(cachePath, TARGETS_DIR_NAME, targetName), Buffer.from(target, "base64"));
+          });
+        }
+      }
+    }
+    __name(seedCache, "seedCache");
+    function initClient(options) {
+      const config = {
+        fetchTimeout: options.timeout,
+        fetchRetry: options.retry,
+        userAgent: `${encodeURIComponent(package_json_1.name)}/${package_json_1.version}`
+      };
+      return new tuf_js_1.Updater({
+        metadataBaseUrl: options.mirrorURL,
+        targetBaseUrl: `${options.mirrorURL}/targets`,
+        metadataDir: options.cachePath,
+        targetDir: path_1.default.join(options.cachePath, TARGETS_DIR_NAME),
+        forceCache: options.forceCache,
+        config
+      });
+    }
+    __name(initClient, "initClient");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+tuf@4.0.2_supports-color@10.2.2/node_modules/@sigstore/tuf/dist/index.js
+var require_dist11 = __commonJS({
+  "node_modules/.pnpm/@sigstore+tuf@4.0.2_supports-color@10.2.2/node_modules/@sigstore/tuf/dist/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.TUFError = exports2.DEFAULT_MIRROR_URL = void 0;
+    exports2.getTrustedRoot = getTrustedRoot;
+    exports2.initTUF = initTUF;
+    var protobuf_specs_1 = require_dist5();
+    var appdata_1 = require_appdata();
+    var client_1 = require_client3();
+    exports2.DEFAULT_MIRROR_URL = "https://tuf-repo-cdn.sigstore.dev";
+    var DEFAULT_CACHE_DIR = "sigstore-js";
+    var DEFAULT_RETRY = { retries: 2 };
+    var DEFAULT_TIMEOUT = 5e3;
+    var TRUSTED_ROOT_TARGET = "trusted_root.json";
+    async function getTrustedRoot(options = {}) {
+      const client = createClient(options);
+      const trustedRoot = await client.getTarget(TRUSTED_ROOT_TARGET);
+      return protobuf_specs_1.TrustedRoot.fromJSON(JSON.parse(trustedRoot));
+    }
+    __name(getTrustedRoot, "getTrustedRoot");
+    async function initTUF(options = {}) {
+      const client = createClient(options);
+      return client.refresh().then(() => client);
+    }
+    __name(initTUF, "initTUF");
+    function createClient(options) {
+      return new client_1.TUFClient({
+        cachePath: options.cachePath || (0, appdata_1.appDataPath)(DEFAULT_CACHE_DIR),
+        rootPath: options.rootPath,
+        mirrorURL: options.mirrorURL || exports2.DEFAULT_MIRROR_URL,
+        retry: options.retry ?? DEFAULT_RETRY,
+        timeout: options.timeout ?? DEFAULT_TIMEOUT,
+        forceCache: options.forceCache ?? false,
+        forceInit: options.forceInit ?? options.force ?? false
+      });
+    }
+    __name(createClient, "createClient");
+    var error_1 = require_error8();
+    Object.defineProperty(exports2, "TUFError", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return error_1.TUFError;
+    }, "get") });
+  }
+});
+
+// node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/bundle/dsse.js
+var require_dsse4 = __commonJS({
+  "node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/bundle/dsse.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.DSSESignatureContent = void 0;
+    var core_1 = require_dist7();
+    var DSSESignatureContent = class {
+      static {
+        __name(this, "DSSESignatureContent");
+      }
+      env;
+      constructor(env2) {
+        this.env = env2;
+      }
+      compareDigest(digest) {
+        return core_1.crypto.bufferEqual(digest, core_1.crypto.digest("sha256", this.env.payload));
+      }
+      compareSignature(signature) {
+        return core_1.crypto.bufferEqual(signature, this.signature);
+      }
+      verifySignature(key) {
+        return core_1.crypto.verify(this.preAuthEncoding, key, this.signature);
+      }
+      get signature() {
+        return this.env.signatures.length > 0 ? this.env.signatures[0].sig : Buffer.from("");
+      }
+      // DSSE Pre-Authentication Encoding
+      get preAuthEncoding() {
+        return core_1.dsse.preAuthEncoding(this.env.payloadType, this.env.payload);
+      }
+    };
+    exports2.DSSESignatureContent = DSSESignatureContent;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/bundle/message.js
+var require_message2 = __commonJS({
+  "node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/bundle/message.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.MessageSignatureContent = void 0;
+    var core_1 = require_dist7();
+    var protobuf_specs_1 = require_dist5();
+    var HASH_ALGORITHM_MAP = {
+      [protobuf_specs_1.HashAlgorithm.HASH_ALGORITHM_UNSPECIFIED]: "sha256",
+      [protobuf_specs_1.HashAlgorithm.SHA2_256]: "sha256",
+      [protobuf_specs_1.HashAlgorithm.SHA2_384]: "sha384",
+      [protobuf_specs_1.HashAlgorithm.SHA2_512]: "sha512",
+      [protobuf_specs_1.HashAlgorithm.SHA3_256]: "sha3-256",
+      [protobuf_specs_1.HashAlgorithm.SHA3_384]: "sha3-384"
+    };
+    var MessageSignatureContent = class {
+      static {
+        __name(this, "MessageSignatureContent");
+      }
+      signature;
+      messageDigest;
+      artifact;
+      hashAlgorithm;
+      constructor(messageSignature, artifact) {
+        this.signature = messageSignature.signature;
+        this.messageDigest = messageSignature.messageDigest.digest;
+        this.artifact = artifact;
+        this.hashAlgorithm = HASH_ALGORITHM_MAP[messageSignature.messageDigest.algorithm] ?? /* istanbul ignore next */
+        "sha256";
+      }
+      compareSignature(signature) {
+        return core_1.crypto.bufferEqual(signature, this.signature);
+      }
+      compareDigest(digest) {
+        return core_1.crypto.bufferEqual(digest, this.messageDigest);
+      }
+      verifySignature(key) {
+        return core_1.crypto.verify(this.artifact, key, this.signature, this.hashAlgorithm);
+      }
+    };
+    exports2.MessageSignatureContent = MessageSignatureContent;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/bundle/index.js
+var require_bundle3 = __commonJS({
+  "node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/bundle/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.toSignedEntity = toSignedEntity;
+    exports2.signatureContent = signatureContent;
+    var core_1 = require_dist7();
+    var dsse_1 = require_dsse4();
+    var message_1 = require_message2();
+    function toSignedEntity(bundle, artifact) {
+      const { tlogEntries, timestampVerificationData } = bundle.verificationMaterial;
+      const timestamps = [];
+      for (const entry of tlogEntries) {
+        if (entry.integratedTime && entry.integratedTime !== "0") {
+          timestamps.push({
+            $case: "transparency-log",
+            tlogEntry: entry
+          });
+        }
+      }
+      for (const ts of timestampVerificationData?.rfc3161Timestamps ?? []) {
+        timestamps.push({
+          $case: "timestamp-authority",
+          timestamp: core_1.RFC3161Timestamp.parse(Buffer.from(ts.signedTimestamp))
+        });
+      }
+      return {
+        signature: signatureContent(bundle, artifact),
+        key: key(bundle),
+        tlogEntries,
+        timestamps
+      };
+    }
+    __name(toSignedEntity, "toSignedEntity");
+    function signatureContent(bundle, artifact) {
+      switch (bundle.content.$case) {
+        case "dsseEnvelope":
+          return new dsse_1.DSSESignatureContent(bundle.content.dsseEnvelope);
+        case "messageSignature":
+          return new message_1.MessageSignatureContent(bundle.content.messageSignature, artifact);
+      }
+    }
+    __name(signatureContent, "signatureContent");
+    function key(bundle) {
+      switch (bundle.verificationMaterial.content.$case) {
+        case "publicKey":
+          return {
+            $case: "public-key",
+            hint: bundle.verificationMaterial.content.publicKey.hint
+          };
+        case "x509CertificateChain":
+          return {
+            $case: "certificate",
+            certificate: core_1.X509Certificate.parse(Buffer.from(bundle.verificationMaterial.content.x509CertificateChain.certificates[0].rawBytes))
+          };
+        case "certificate":
+          return {
+            $case: "certificate",
+            certificate: core_1.X509Certificate.parse(Buffer.from(bundle.verificationMaterial.content.certificate.rawBytes))
+          };
+      }
+    }
+    __name(key, "key");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/error.js
+var require_error9 = __commonJS({
+  "node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/error.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.PolicyError = exports2.VerificationError = void 0;
+    var BaseError = class extends Error {
+      static {
+        __name(this, "BaseError");
+      }
+      code;
+      cause;
+      /* eslint-disable-line @typescript-eslint/no-explicit-any */
+      constructor({ code, message, cause }) {
+        super(message);
+        this.code = code;
+        this.cause = cause;
+        this.name = this.constructor.name;
+      }
+    };
+    var VerificationError = class extends BaseError {
+      static {
+        __name(this, "VerificationError");
+      }
+    };
+    exports2.VerificationError = VerificationError;
+    var PolicyError = class extends BaseError {
+      static {
+        __name(this, "PolicyError");
+      }
+    };
+    exports2.PolicyError = PolicyError;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/trust/filter.js
+var require_filter = __commonJS({
+  "node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/trust/filter.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.filterCertAuthorities = filterCertAuthorities;
+    exports2.filterTLogAuthorities = filterTLogAuthorities;
+    function filterCertAuthorities(certAuthorities, timestamp) {
+      return certAuthorities.filter((ca) => {
+        return ca.validFor.start <= timestamp && ca.validFor.end >= timestamp;
+      });
+    }
+    __name(filterCertAuthorities, "filterCertAuthorities");
+    function filterTLogAuthorities(tlogAuthorities, criteria) {
+      return tlogAuthorities.filter((tlog) => {
+        if (criteria.logID && !tlog.logID.equals(criteria.logID)) {
+          return false;
+        }
+        return tlog.validFor.start <= criteria.targetDate && criteria.targetDate <= tlog.validFor.end;
+      });
+    }
+    __name(filterTLogAuthorities, "filterTLogAuthorities");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/trust/index.js
+var require_trust = __commonJS({
+  "node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/trust/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.filterTLogAuthorities = exports2.filterCertAuthorities = void 0;
+    exports2.toTrustMaterial = toTrustMaterial;
+    var core_1 = require_dist7();
+    var protobuf_specs_1 = require_dist5();
+    var error_1 = require_error9();
+    var BEGINNING_OF_TIME = /* @__PURE__ */ new Date(0);
+    var END_OF_TIME = /* @__PURE__ */ new Date(864e13);
+    var filter_1 = require_filter();
+    Object.defineProperty(exports2, "filterCertAuthorities", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return filter_1.filterCertAuthorities;
+    }, "get") });
+    Object.defineProperty(exports2, "filterTLogAuthorities", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return filter_1.filterTLogAuthorities;
+    }, "get") });
+    function toTrustMaterial(root, keys) {
+      const keyFinder = typeof keys === "function" ? keys : keyLocator(keys);
+      return {
+        certificateAuthorities: root.certificateAuthorities.map(createCertAuthority),
+        timestampAuthorities: root.timestampAuthorities.map(createCertAuthority),
+        tlogs: root.tlogs.map(createTLogAuthority),
+        ctlogs: root.ctlogs.map(createTLogAuthority),
+        publicKey: keyFinder
+      };
+    }
+    __name(toTrustMaterial, "toTrustMaterial");
+    function createTLogAuthority(tlogInstance) {
+      const keyDetails = tlogInstance.publicKey.keyDetails;
+      const keyType = keyDetails === protobuf_specs_1.PublicKeyDetails.PKCS1_RSA_PKCS1V5 || keyDetails === protobuf_specs_1.PublicKeyDetails.PKIX_RSA_PKCS1V5 || keyDetails === protobuf_specs_1.PublicKeyDetails.PKIX_RSA_PKCS1V15_2048_SHA256 || keyDetails === protobuf_specs_1.PublicKeyDetails.PKIX_RSA_PKCS1V15_3072_SHA256 || keyDetails === protobuf_specs_1.PublicKeyDetails.PKIX_RSA_PKCS1V15_4096_SHA256 ? "pkcs1" : "spki";
+      return {
+        baseURL: tlogInstance.baseUrl,
+        logID: tlogInstance.checkpointKeyId ? tlogInstance.checkpointKeyId.keyId : tlogInstance.logId.keyId,
+        publicKey: core_1.crypto.createPublicKey(tlogInstance.publicKey.rawBytes, keyType),
+        validFor: {
+          start: tlogInstance.publicKey.validFor?.start || BEGINNING_OF_TIME,
+          end: tlogInstance.publicKey.validFor?.end || END_OF_TIME
+        }
+      };
+    }
+    __name(createTLogAuthority, "createTLogAuthority");
+    function createCertAuthority(ca) {
+      return {
+        certChain: ca.certChain.certificates.map((cert) => {
+          return core_1.X509Certificate.parse(Buffer.from(cert.rawBytes));
+        }),
+        validFor: {
+          start: ca.validFor?.start || BEGINNING_OF_TIME,
+          end: ca.validFor?.end || END_OF_TIME
+        }
+      };
+    }
+    __name(createCertAuthority, "createCertAuthority");
+    function keyLocator(keys) {
+      return (hint) => {
+        const key = (keys || {})[hint];
+        if (!key) {
+          throw new error_1.VerificationError({
+            code: "PUBLIC_KEY_ERROR",
+            message: `key not found: ${hint}`
+          });
+        }
+        return {
+          publicKey: core_1.crypto.createPublicKey(key.rawBytes),
+          validFor: /* @__PURE__ */ __name((date) => {
+            return (key.validFor?.start || BEGINNING_OF_TIME) <= date && (key.validFor?.end || END_OF_TIME) >= date;
+          }, "validFor")
+        };
+      };
+    }
+    __name(keyLocator, "keyLocator");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/key/certificate.js
+var require_certificate = __commonJS({
+  "node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/key/certificate.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.CertificateChainVerifier = void 0;
+    exports2.verifyCertificateChain = verifyCertificateChain;
+    var error_1 = require_error9();
+    var trust_1 = require_trust();
+    function verifyCertificateChain(timestamp, leaf, certificateAuthorities) {
+      const cas = (0, trust_1.filterCertAuthorities)(certificateAuthorities, timestamp);
+      let error;
+      for (const ca of cas) {
+        try {
+          const verifier = new CertificateChainVerifier({
+            trustedCerts: ca.certChain,
+            untrustedCert: leaf,
+            timestamp
+          });
+          return verifier.verify();
+        } catch (err) {
+          error = err;
+        }
+      }
+      throw new error_1.VerificationError({
+        code: "CERTIFICATE_ERROR",
+        message: "Failed to verify certificate chain",
+        cause: error
+      });
+    }
+    __name(verifyCertificateChain, "verifyCertificateChain");
+    var CertificateChainVerifier = class {
+      static {
+        __name(this, "CertificateChainVerifier");
+      }
+      untrustedCert;
+      trustedCerts;
+      localCerts;
+      timestamp;
+      constructor(opts) {
+        this.untrustedCert = opts.untrustedCert;
+        this.trustedCerts = opts.trustedCerts;
+        this.localCerts = dedupeCertificates([
+          ...opts.trustedCerts,
+          opts.untrustedCert
+        ]);
+        this.timestamp = opts.timestamp;
+      }
+      verify() {
+        const certificatePath = this.sort();
+        this.checkPath(certificatePath);
+        const validForDate = certificatePath.every((cert) => cert.validForDate(this.timestamp));
+        if (!validForDate) {
+          throw new error_1.VerificationError({
+            code: "CERTIFICATE_ERROR",
+            message: "certificate is not valid or expired at the specified date"
+          });
+        }
+        return certificatePath;
+      }
+      sort() {
+        const leafCert = this.untrustedCert;
+        let paths = this.buildPaths(leafCert);
+        paths = paths.filter((path2) => path2.some((cert) => this.trustedCerts.includes(cert)));
+        if (paths.length === 0) {
+          throw new error_1.VerificationError({
+            code: "CERTIFICATE_ERROR",
+            message: "no trusted certificate path found"
+          });
+        }
+        const path = paths.reduce((prev, curr) => prev.length < curr.length ? prev : curr);
+        return [leafCert, ...path].slice(0, -1);
+      }
+      // Recursively build all possible paths from the leaf to the root
+      buildPaths(certificate) {
+        const paths = [];
+        const issuers = this.findIssuer(certificate);
+        if (issuers.length === 0) {
+          throw new error_1.VerificationError({
+            code: "CERTIFICATE_ERROR",
+            message: "no valid certificate path found"
+          });
+        }
+        for (let i = 0; i < issuers.length; i++) {
+          const issuer = issuers[i];
+          if (issuer.equals(certificate)) {
+            paths.push([certificate]);
+            continue;
+          }
+          const subPaths = this.buildPaths(issuer);
+          for (let j = 0; j < subPaths.length; j++) {
+            paths.push([issuer, ...subPaths[j]]);
+          }
+        }
+        return paths;
+      }
+      // Return all possible issuers for the given certificate
+      findIssuer(certificate) {
+        let issuers = [];
+        let keyIdentifier;
+        if (certificate.subject.equals(certificate.issuer)) {
+          if (certificate.verify()) {
+            return [certificate];
+          }
+        }
+        if (certificate.extAuthorityKeyID) {
+          keyIdentifier = certificate.extAuthorityKeyID.keyIdentifier;
+        }
+        this.localCerts.forEach((possibleIssuer) => {
+          if (keyIdentifier) {
+            if (possibleIssuer.extSubjectKeyID) {
+              if (possibleIssuer.extSubjectKeyID.keyIdentifier.equals(keyIdentifier)) {
+                issuers.push(possibleIssuer);
+              }
+              return;
+            }
+          }
+          if (possibleIssuer.subject.equals(certificate.issuer)) {
+            issuers.push(possibleIssuer);
+          }
+        });
+        issuers = issuers.filter((issuer) => {
+          try {
+            return certificate.verify(issuer);
+          } catch (ex) {
+            return false;
+          }
+        });
+        return issuers;
+      }
+      checkPath(path) {
+        if (path.length < 1) {
+          throw new error_1.VerificationError({
+            code: "CERTIFICATE_ERROR",
+            message: "certificate chain must contain at least one certificate"
+          });
+        }
+        const validCAs = path.slice(1).every((cert) => cert.isCA);
+        if (!validCAs) {
+          throw new error_1.VerificationError({
+            code: "CERTIFICATE_ERROR",
+            message: "intermediate certificate is not a CA"
+          });
+        }
+        for (let i = path.length - 2; i >= 0; i--) {
+          if (!path[i].issuer.equals(path[i + 1].subject)) {
+            throw new error_1.VerificationError({
+              code: "CERTIFICATE_ERROR",
+              message: "incorrect certificate name chaining"
+            });
+          }
+        }
+        for (let i = 0; i < path.length; i++) {
+          const cert = path[i];
+          if (cert.extBasicConstraints?.isCA) {
+            const pathLength = cert.extBasicConstraints.pathLenConstraint;
+            if (pathLength !== void 0 && pathLength < i - 1) {
+              throw new error_1.VerificationError({
+                code: "CERTIFICATE_ERROR",
+                message: "path length constraint exceeded"
+              });
+            }
+          }
+        }
+      }
+    };
+    exports2.CertificateChainVerifier = CertificateChainVerifier;
+    function dedupeCertificates(certs) {
+      for (let i = 0; i < certs.length; i++) {
+        for (let j = i + 1; j < certs.length; j++) {
+          if (certs[i].equals(certs[j])) {
+            certs.splice(j, 1);
+            j--;
+          }
+        }
+      }
+      return certs;
+    }
+    __name(dedupeCertificates, "dedupeCertificates");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/key/sct.js
+var require_sct2 = __commonJS({
+  "node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/key/sct.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.verifySCTs = verifySCTs;
+    var core_1 = require_dist7();
+    var error_1 = require_error9();
+    var trust_1 = require_trust();
+    function verifySCTs(cert, issuer, ctlogs) {
+      let extSCT;
+      const clone = cert.clone();
+      for (let i = 0; i < clone.extensions.length; i++) {
+        const ext = clone.extensions[i];
+        if (ext.subs[0].toOID() === core_1.EXTENSION_OID_SCT) {
+          extSCT = new core_1.X509SCTExtension(ext);
+          clone.extensions.splice(i, 1);
+          break;
+        }
+      }
+      if (!extSCT) {
+        return [];
+      }
+      if (extSCT.signedCertificateTimestamps.length === 0) {
+        return [];
+      }
+      const preCert = new core_1.ByteStream();
+      const issuerId = core_1.crypto.digest("sha256", issuer.publicKey);
+      preCert.appendView(issuerId);
+      const tbs = clone.tbsCertificate.toDER();
+      preCert.appendUint24(tbs.length);
+      preCert.appendView(tbs);
+      return extSCT.signedCertificateTimestamps.map((sct) => {
+        const validCTLogs = (0, trust_1.filterTLogAuthorities)(ctlogs, {
+          logID: sct.logID,
+          targetDate: sct.datetime
+        });
+        const verified = validCTLogs.some((log) => sct.verify(preCert.buffer, log.publicKey));
+        if (!verified) {
+          throw new error_1.VerificationError({
+            code: "CERTIFICATE_ERROR",
+            message: "SCT verification failed"
+          });
+        }
+        return sct.logID;
+      });
+    }
+    __name(verifySCTs, "verifySCTs");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/key/index.js
+var require_key4 = __commonJS({
+  "node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/key/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.verifyPublicKey = verifyPublicKey;
+    exports2.verifyCertificate = verifyCertificate;
+    var core_1 = require_dist7();
+    var error_1 = require_error9();
+    var certificate_1 = require_certificate();
+    var sct_1 = require_sct2();
+    var OID_FULCIO_ISSUER_V1 = "1.3.6.1.4.1.57264.1.1";
+    var OID_FULCIO_ISSUER_V2 = "1.3.6.1.4.1.57264.1.8";
+    function verifyPublicKey(hint, timestamps, trustMaterial) {
+      const key = trustMaterial.publicKey(hint);
+      timestamps.forEach((timestamp) => {
+        if (!key.validFor(timestamp)) {
+          throw new error_1.VerificationError({
+            code: "PUBLIC_KEY_ERROR",
+            message: `Public key is not valid for timestamp: ${timestamp.toISOString()}`
+          });
+        }
+      });
+      return { key: key.publicKey };
+    }
+    __name(verifyPublicKey, "verifyPublicKey");
+    function verifyCertificate(leaf, timestamps, trustMaterial) {
+      let path = [];
+      timestamps.forEach((timestamp) => {
+        path = (0, certificate_1.verifyCertificateChain)(timestamp, leaf, trustMaterial.certificateAuthorities);
+      });
+      return {
+        scts: (0, sct_1.verifySCTs)(path[0], path[1], trustMaterial.ctlogs),
+        signer: getSigner(path[0])
+      };
+    }
+    __name(verifyCertificate, "verifyCertificate");
+    function getSigner(cert) {
+      let issuer;
+      const issuerExtension = cert.extension(OID_FULCIO_ISSUER_V2);
+      if (issuerExtension) {
+        issuer = issuerExtension.valueObj.subs?.[0]?.value.toString("ascii");
+      } else {
+        issuer = cert.extension(OID_FULCIO_ISSUER_V1)?.value.toString("ascii");
+      }
+      const identity = {
+        extensions: { issuer },
+        subjectAlternativeName: cert.subjectAltName
+      };
+      return {
+        key: core_1.crypto.createPublicKey(cert.publicKey),
+        identity
+      };
+    }
+    __name(getSigner, "getSigner");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/policy.js
+var require_policy2 = __commonJS({
+  "node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/policy.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.verifySubjectAlternativeName = verifySubjectAlternativeName;
+    exports2.verifyExtensions = verifyExtensions;
+    var error_1 = require_error9();
+    function verifySubjectAlternativeName(policyIdentity, signerIdentity) {
+      if (signerIdentity === void 0 || !signerIdentity.match(policyIdentity)) {
+        throw new error_1.PolicyError({
+          code: "UNTRUSTED_SIGNER_ERROR",
+          message: `certificate identity error - expected ${policyIdentity}, got ${signerIdentity}`
+        });
+      }
+    }
+    __name(verifySubjectAlternativeName, "verifySubjectAlternativeName");
+    function verifyExtensions(policyExtensions, signerExtensions = {}) {
+      let key;
+      for (key in policyExtensions) {
+        if (signerExtensions[key] !== policyExtensions[key]) {
+          throw new error_1.PolicyError({
+            code: "UNTRUSTED_SIGNER_ERROR",
+            message: `invalid certificate extension - expected ${key}=${policyExtensions[key]}, got ${key}=${signerExtensions[key]}`
+          });
+        }
+      }
+    }
+    __name(verifyExtensions, "verifyExtensions");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/timestamp/tsa.js
+var require_tsa3 = __commonJS({
+  "node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/timestamp/tsa.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.verifyRFC3161Timestamp = verifyRFC3161Timestamp;
+    var core_1 = require_dist7();
+    var error_1 = require_error9();
+    var certificate_1 = require_certificate();
+    var trust_1 = require_trust();
+    function verifyRFC3161Timestamp(timestamp, data, timestampAuthorities) {
+      const signingTime = timestamp.signingTime;
+      timestampAuthorities = (0, trust_1.filterCertAuthorities)(timestampAuthorities, signingTime);
+      timestampAuthorities = filterCAsBySerialAndIssuer(timestampAuthorities, {
+        serialNumber: timestamp.signerSerialNumber,
+        issuer: timestamp.signerIssuer
+      });
+      const verified = timestampAuthorities.some((ca) => {
+        try {
+          verifyTimestampForCA(timestamp, data, ca);
+          return true;
+        } catch (e) {
+          return false;
+        }
+      });
+      if (!verified) {
+        throw new error_1.VerificationError({
+          code: "TIMESTAMP_ERROR",
+          message: "timestamp could not be verified"
+        });
+      }
+    }
+    __name(verifyRFC3161Timestamp, "verifyRFC3161Timestamp");
+    function verifyTimestampForCA(timestamp, data, ca) {
+      const [leaf, ...cas] = ca.certChain;
+      const signingKey = core_1.crypto.createPublicKey(leaf.publicKey);
+      const signingTime = timestamp.signingTime;
+      try {
+        new certificate_1.CertificateChainVerifier({
+          untrustedCert: leaf,
+          trustedCerts: cas,
+          timestamp: signingTime
+        }).verify();
+      } catch (e) {
+        throw new error_1.VerificationError({
+          code: "TIMESTAMP_ERROR",
+          message: "invalid certificate chain"
+        });
+      }
+      timestamp.verify(data, signingKey);
+    }
+    __name(verifyTimestampForCA, "verifyTimestampForCA");
+    function filterCAsBySerialAndIssuer(timestampAuthorities, criteria) {
+      return timestampAuthorities.filter((ca) => ca.certChain.length > 0 && core_1.crypto.bufferEqual(ca.certChain[0].serialNumber, criteria.serialNumber) && core_1.crypto.bufferEqual(ca.certChain[0].issuer, criteria.issuer));
+    }
+    __name(filterCAsBySerialAndIssuer, "filterCAsBySerialAndIssuer");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/timestamp/index.js
+var require_timestamp4 = __commonJS({
+  "node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/timestamp/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.getTSATimestamp = getTSATimestamp;
+    exports2.getTLogTimestamp = getTLogTimestamp;
+    var tsa_1 = require_tsa3();
+    function getTSATimestamp(timestamp, data, timestampAuthorities) {
+      (0, tsa_1.verifyRFC3161Timestamp)(timestamp, data, timestampAuthorities);
+      return {
+        type: "timestamp-authority",
+        logID: timestamp.signerSerialNumber,
+        timestamp: timestamp.signingTime
+      };
+    }
+    __name(getTSATimestamp, "getTSATimestamp");
+    function getTLogTimestamp(entry) {
+      return {
+        type: "transparency-log",
+        logID: entry.logId.keyId,
+        timestamp: new Date(Number(entry.integratedTime) * 1e3)
+      };
+    }
+    __name(getTLogTimestamp, "getTLogTimestamp");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/tlog/dsse.js
+var require_dsse5 = __commonJS({
+  "node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/tlog/dsse.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.DSSE_API_VERSION_V1 = void 0;
+    exports2.verifyDSSETLogBody = verifyDSSETLogBody;
+    exports2.verifyDSSETLogBodyV2 = verifyDSSETLogBodyV2;
+    var error_1 = require_error9();
+    exports2.DSSE_API_VERSION_V1 = "0.0.1";
+    function verifyDSSETLogBody(tlogEntry, content) {
+      switch (tlogEntry.apiVersion) {
+        case exports2.DSSE_API_VERSION_V1:
+          return verifyDSSE001TLogBody(tlogEntry, content);
+        default:
+          throw new error_1.VerificationError({
+            code: "TLOG_BODY_ERROR",
+            message: `unsupported dsse version: ${tlogEntry.apiVersion}`
+          });
+      }
+    }
+    __name(verifyDSSETLogBody, "verifyDSSETLogBody");
+    function verifyDSSETLogBodyV2(tlogEntry, content) {
+      const spec = tlogEntry.spec?.spec;
+      if (!spec) {
+        throw new error_1.VerificationError({
+          code: "TLOG_BODY_ERROR",
+          message: `missing dsse spec`
+        });
+      }
+      switch (spec.$case) {
+        case "dsseV002":
+          return verifyDSSE002TLogBody(spec.dsseV002, content);
+        default:
+          throw new error_1.VerificationError({
+            code: "TLOG_BODY_ERROR",
+            message: `unsupported version: ${spec.$case}`
+          });
+      }
+    }
+    __name(verifyDSSETLogBodyV2, "verifyDSSETLogBodyV2");
+    function verifyDSSE001TLogBody(tlogEntry, content) {
+      if (tlogEntry.spec.signatures?.length !== 1) {
+        throw new error_1.VerificationError({
+          code: "TLOG_BODY_ERROR",
+          message: "signature count mismatch"
+        });
+      }
+      const tlogSig = tlogEntry.spec.signatures[0].signature;
+      if (!content.compareSignature(Buffer.from(tlogSig, "base64")))
+        throw new error_1.VerificationError({
+          code: "TLOG_BODY_ERROR",
+          message: "tlog entry signature mismatch"
+        });
+      const tlogHash = tlogEntry.spec.payloadHash?.value || "";
+      if (!content.compareDigest(Buffer.from(tlogHash, "hex"))) {
+        throw new error_1.VerificationError({
+          code: "TLOG_BODY_ERROR",
+          message: "DSSE payload hash mismatch"
+        });
+      }
+    }
+    __name(verifyDSSE001TLogBody, "verifyDSSE001TLogBody");
+    function verifyDSSE002TLogBody(spec, content) {
+      if (spec.signatures?.length !== 1) {
+        throw new error_1.VerificationError({
+          code: "TLOG_BODY_ERROR",
+          message: "signature count mismatch"
+        });
+      }
+      const tlogSig = spec.signatures[0].content;
+      if (!content.compareSignature(tlogSig))
+        throw new error_1.VerificationError({
+          code: "TLOG_BODY_ERROR",
+          message: "tlog entry signature mismatch"
+        });
+      const tlogHash = spec.payloadHash?.digest || Buffer.from("");
+      if (!content.compareDigest(tlogHash)) {
+        throw new error_1.VerificationError({
+          code: "TLOG_BODY_ERROR",
+          message: "DSSE payload hash mismatch"
+        });
+      }
+    }
+    __name(verifyDSSE002TLogBody, "verifyDSSE002TLogBody");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/tlog/hashedrekord.js
+var require_hashedrekord2 = __commonJS({
+  "node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/tlog/hashedrekord.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.HASHEDREKORD_API_VERSION_V1 = void 0;
+    exports2.verifyHashedRekordTLogBody = verifyHashedRekordTLogBody;
+    exports2.verifyHashedRekordTLogBodyV2 = verifyHashedRekordTLogBodyV2;
+    var error_1 = require_error9();
+    exports2.HASHEDREKORD_API_VERSION_V1 = "0.0.1";
+    function verifyHashedRekordTLogBody(tlogEntry, content) {
+      switch (tlogEntry.apiVersion) {
+        case exports2.HASHEDREKORD_API_VERSION_V1:
+          return verifyHashedrekord001TLogBody(tlogEntry, content);
+        default:
+          throw new error_1.VerificationError({
+            code: "TLOG_BODY_ERROR",
+            message: `unsupported hashedrekord version: ${tlogEntry.apiVersion}`
+          });
+      }
+    }
+    __name(verifyHashedRekordTLogBody, "verifyHashedRekordTLogBody");
+    function verifyHashedRekordTLogBodyV2(tlogEntry, content) {
+      const spec = tlogEntry.spec?.spec;
+      if (!spec) {
+        throw new error_1.VerificationError({
+          code: "TLOG_BODY_ERROR",
+          message: `missing dsse spec`
+        });
+      }
+      switch (spec.$case) {
+        case "hashedRekordV002":
+          return verifyHashedrekord002TLogBody(spec.hashedRekordV002, content);
+        default:
+          throw new error_1.VerificationError({
+            code: "TLOG_BODY_ERROR",
+            message: `unsupported version: ${spec.$case}`
+          });
+      }
+    }
+    __name(verifyHashedRekordTLogBodyV2, "verifyHashedRekordTLogBodyV2");
+    function verifyHashedrekord001TLogBody(tlogEntry, content) {
+      const tlogSig = tlogEntry.spec.signature.content || "";
+      if (!content.compareSignature(Buffer.from(tlogSig, "base64"))) {
+        throw new error_1.VerificationError({
+          code: "TLOG_BODY_ERROR",
+          message: "signature mismatch"
+        });
+      }
+      const tlogDigest = tlogEntry.spec.data.hash?.value || "";
+      if (!content.compareDigest(Buffer.from(tlogDigest, "hex"))) {
+        throw new error_1.VerificationError({
+          code: "TLOG_BODY_ERROR",
+          message: "digest mismatch"
+        });
+      }
+    }
+    __name(verifyHashedrekord001TLogBody, "verifyHashedrekord001TLogBody");
+    function verifyHashedrekord002TLogBody(spec, content) {
+      const tlogSig = spec.signature?.content || Buffer.from("");
+      if (!content.compareSignature(tlogSig)) {
+        throw new error_1.VerificationError({
+          code: "TLOG_BODY_ERROR",
+          message: "signature mismatch"
+        });
+      }
+      const tlogHash = spec.data?.digest || Buffer.from("");
+      if (!content.compareDigest(tlogHash)) {
+        throw new error_1.VerificationError({
+          code: "TLOG_BODY_ERROR",
+          message: "digest mismatch"
+        });
+      }
+    }
+    __name(verifyHashedrekord002TLogBody, "verifyHashedrekord002TLogBody");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/tlog/intoto.js
+var require_intoto = __commonJS({
+  "node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/tlog/intoto.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.verifyIntotoTLogBody = verifyIntotoTLogBody;
+    var error_1 = require_error9();
+    function verifyIntotoTLogBody(tlogEntry, content) {
+      switch (tlogEntry.apiVersion) {
+        case "0.0.2":
+          return verifyIntoto002TLogBody(tlogEntry, content);
+        default:
+          throw new error_1.VerificationError({
+            code: "TLOG_BODY_ERROR",
+            message: `unsupported intoto version: ${tlogEntry.apiVersion}`
+          });
+      }
+    }
+    __name(verifyIntotoTLogBody, "verifyIntotoTLogBody");
+    function verifyIntoto002TLogBody(tlogEntry, content) {
+      if (tlogEntry.spec.content.envelope.signatures?.length !== 1) {
+        throw new error_1.VerificationError({
+          code: "TLOG_BODY_ERROR",
+          message: "signature count mismatch"
+        });
+      }
+      const tlogSig = base64Decode(tlogEntry.spec.content.envelope.signatures[0].sig);
+      if (!content.compareSignature(Buffer.from(tlogSig, "base64"))) {
+        throw new error_1.VerificationError({
+          code: "TLOG_BODY_ERROR",
+          message: "tlog entry signature mismatch"
+        });
+      }
+      const tlogHash = tlogEntry.spec.content.payloadHash?.value || "";
+      if (!content.compareDigest(Buffer.from(tlogHash, "hex"))) {
+        throw new error_1.VerificationError({
+          code: "TLOG_BODY_ERROR",
+          message: "DSSE payload hash mismatch"
+        });
+      }
+    }
+    __name(verifyIntoto002TLogBody, "verifyIntoto002TLogBody");
+    function base64Decode(str) {
+      return Buffer.from(str, "base64").toString("utf-8");
+    }
+    __name(base64Decode, "base64Decode");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/tlog/checkpoint.js
+var require_checkpoint = __commonJS({
+  "node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/tlog/checkpoint.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.LogCheckpoint = void 0;
+    exports2.verifyCheckpoint = verifyCheckpoint;
+    var core_1 = require_dist7();
+    var error_1 = require_error9();
+    var CHECKPOINT_SEPARATOR = "\n\n";
+    var SIGNATURE_REGEX = /\u2014 (\S+) (\S+)\n/g;
+    function verifyCheckpoint(entry, tlogs) {
+      const inclusionProof = entry.inclusionProof;
+      const signedNote = SignedNote.fromString(inclusionProof.checkpoint.envelope);
+      const checkpoint = LogCheckpoint.fromString(signedNote.note);
+      if (!verifySignedNote(signedNote, tlogs)) {
+        throw new error_1.VerificationError({
+          code: "TLOG_INCLUSION_PROOF_ERROR",
+          message: "invalid checkpoint signature"
+        });
+      }
+      return checkpoint;
+    }
+    __name(verifyCheckpoint, "verifyCheckpoint");
+    function verifySignedNote(signedNote, tlogs) {
+      const data = Buffer.from(signedNote.note, "utf-8");
+      return signedNote.signatures.some((signature) => {
+        const tlog = tlogs.find(
+          (tlog2) => core_1.crypto.bufferEqual(tlog2.logID.subarray(0, 4), signature.keyHint) && tlog2.baseURL.match(signature.name)
+          // Match the name to the base URL of the tlog
+        );
+        if (!tlog) {
+          return false;
+        }
+        return core_1.crypto.verify(data, tlog.publicKey, signature.signature);
+      });
+    }
+    __name(verifySignedNote, "verifySignedNote");
+    var SignedNote = class _SignedNote {
+      static {
+        __name(this, "SignedNote");
+      }
+      note;
+      signatures;
+      constructor(note, signatures) {
+        this.note = note;
+        this.signatures = signatures;
+      }
+      // Deserialize a SignedNote from a string
+      static fromString(envelope) {
+        if (!envelope.includes(CHECKPOINT_SEPARATOR)) {
+          throw new error_1.VerificationError({
+            code: "TLOG_INCLUSION_PROOF_ERROR",
+            message: "missing checkpoint separator"
+          });
+        }
+        const split = envelope.indexOf(CHECKPOINT_SEPARATOR);
+        const header = envelope.slice(0, split + 1);
+        const data = envelope.slice(split + CHECKPOINT_SEPARATOR.length);
+        const matches = data.matchAll(SIGNATURE_REGEX);
+        const signatures = Array.from(matches, (match) => {
+          const [, name, signature] = match;
+          const sigBytes = Buffer.from(signature, "base64");
+          if (sigBytes.length < 5) {
+            throw new error_1.VerificationError({
+              code: "TLOG_INCLUSION_PROOF_ERROR",
+              message: "malformed checkpoint signature"
+            });
+          }
+          return {
+            name,
+            keyHint: sigBytes.subarray(0, 4),
+            signature: sigBytes.subarray(4)
+          };
+        });
+        if (signatures.length === 0) {
+          throw new error_1.VerificationError({
+            code: "TLOG_INCLUSION_PROOF_ERROR",
+            message: "no signatures found in checkpoint"
+          });
+        }
+        return new _SignedNote(header, signatures);
+      }
+    };
+    var LogCheckpoint = class _LogCheckpoint {
+      static {
+        __name(this, "LogCheckpoint");
+      }
+      origin;
+      logSize;
+      logHash;
+      rest;
+      constructor(origin, logSize, logHash, rest) {
+        this.origin = origin;
+        this.logSize = logSize;
+        this.logHash = logHash;
+        this.rest = rest;
+      }
+      static fromString(note) {
+        const lines = note.trimEnd().split("\n");
+        if (lines.length < 3) {
+          throw new error_1.VerificationError({
+            code: "TLOG_INCLUSION_PROOF_ERROR",
+            message: "too few lines in checkpoint header"
+          });
+        }
+        const origin = lines[0];
+        const logSize = BigInt(lines[1]);
+        const rootHash = Buffer.from(lines[2], "base64");
+        const rest = lines.slice(3);
+        return new _LogCheckpoint(origin, logSize, rootHash, rest);
+      }
+    };
+    exports2.LogCheckpoint = LogCheckpoint;
+  }
+});
+
+// node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/tlog/merkle.js
+var require_merkle = __commonJS({
+  "node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/tlog/merkle.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.verifyMerkleInclusion = verifyMerkleInclusion;
+    var core_1 = require_dist7();
+    var error_1 = require_error9();
+    var RFC6962_LEAF_HASH_PREFIX = Buffer.from([0]);
+    var RFC6962_NODE_HASH_PREFIX = Buffer.from([1]);
+    function verifyMerkleInclusion(entry, checkpoint) {
+      const inclusionProof = entry.inclusionProof;
+      const logIndex = BigInt(inclusionProof.logIndex);
+      const treeSize = BigInt(checkpoint.logSize);
+      if (logIndex < 0n || logIndex >= treeSize) {
+        throw new error_1.VerificationError({
+          code: "TLOG_INCLUSION_PROOF_ERROR",
+          message: `invalid index: ${logIndex}`
+        });
+      }
+      const { inner, border } = decompInclProof(logIndex, treeSize);
+      if (inclusionProof.hashes.length !== inner + border) {
+        throw new error_1.VerificationError({
+          code: "TLOG_INCLUSION_PROOF_ERROR",
+          message: "invalid hash count"
+        });
+      }
+      const innerHashes = inclusionProof.hashes.slice(0, inner);
+      const borderHashes = inclusionProof.hashes.slice(inner);
+      const leafHash = hashLeaf(entry.canonicalizedBody);
+      const calculatedHash = chainBorderRight(chainInner(leafHash, innerHashes, logIndex), borderHashes);
+      if (!core_1.crypto.bufferEqual(calculatedHash, checkpoint.logHash)) {
+        throw new error_1.VerificationError({
+          code: "TLOG_INCLUSION_PROOF_ERROR",
+          message: "calculated root hash does not match inclusion proof"
+        });
+      }
+    }
+    __name(verifyMerkleInclusion, "verifyMerkleInclusion");
+    function decompInclProof(index, size) {
+      const inner = innerProofSize(index, size);
+      const border = onesCount(index >> BigInt(inner));
+      return { inner, border };
+    }
+    __name(decompInclProof, "decompInclProof");
+    function chainInner(seed, hashes, index) {
+      return hashes.reduce((acc, h, i) => {
+        if (index >> BigInt(i) & BigInt(1)) {
+          return hashChildren(h, acc);
+        } else {
+          return hashChildren(acc, h);
+        }
+      }, seed);
+    }
+    __name(chainInner, "chainInner");
+    function chainBorderRight(seed, hashes) {
+      return hashes.reduce((acc, h) => hashChildren(h, acc), seed);
+    }
+    __name(chainBorderRight, "chainBorderRight");
+    function innerProofSize(index, size) {
+      return bitLength(index ^ size - BigInt(1));
+    }
+    __name(innerProofSize, "innerProofSize");
+    function onesCount(num) {
+      return num.toString(2).split("1").length - 1;
+    }
+    __name(onesCount, "onesCount");
+    function bitLength(n) {
+      if (n === 0n) {
+        return 0;
+      }
+      return n.toString(2).length;
+    }
+    __name(bitLength, "bitLength");
+    function hashChildren(left, right) {
+      return core_1.crypto.digest("sha256", RFC6962_NODE_HASH_PREFIX, left, right);
+    }
+    __name(hashChildren, "hashChildren");
+    function hashLeaf(leaf) {
+      return core_1.crypto.digest("sha256", RFC6962_LEAF_HASH_PREFIX, leaf);
+    }
+    __name(hashLeaf, "hashLeaf");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/tlog/set.js
+var require_set = __commonJS({
+  "node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/tlog/set.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.verifyTLogSET = verifyTLogSET;
+    var core_1 = require_dist7();
+    var error_1 = require_error9();
+    var trust_1 = require_trust();
+    function verifyTLogSET(entry, tlogs) {
+      const validTLogs = (0, trust_1.filterTLogAuthorities)(tlogs, {
+        logID: entry.logId.keyId,
+        targetDate: new Date(Number(entry.integratedTime) * 1e3)
+      });
+      const verified = validTLogs.some((tlog) => {
+        const payload = toVerificationPayload(entry);
+        const data = Buffer.from(core_1.json.canonicalize(payload), "utf8");
+        const signature = entry.inclusionPromise.signedEntryTimestamp;
+        return core_1.crypto.verify(data, tlog.publicKey, signature);
+      });
+      if (!verified) {
+        throw new error_1.VerificationError({
+          code: "TLOG_INCLUSION_PROMISE_ERROR",
+          message: "inclusion promise could not be verified"
+        });
+      }
+    }
+    __name(verifyTLogSET, "verifyTLogSET");
+    function toVerificationPayload(entry) {
+      const { integratedTime, logIndex, logId, canonicalizedBody } = entry;
+      return {
+        body: canonicalizedBody.toString("base64"),
+        integratedTime: Number(integratedTime),
+        logIndex: Number(logIndex),
+        logID: logId.keyId.toString("hex")
+      };
+    }
+    __name(toVerificationPayload, "toVerificationPayload");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/tlog/index.js
+var require_tlog2 = __commonJS({
+  "node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/tlog/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.verifyTLogBody = verifyTLogBody;
+    exports2.verifyTLogInclusion = verifyTLogInclusion;
+    var v2_1 = require_v2();
+    var error_1 = require_error9();
+    var dsse_1 = require_dsse5();
+    var hashedrekord_1 = require_hashedrekord2();
+    var intoto_1 = require_intoto();
+    var checkpoint_1 = require_checkpoint();
+    var merkle_1 = require_merkle();
+    var set_1 = require_set();
+    function verifyTLogBody(entry, sigContent) {
+      const { kind, version } = entry.kindVersion;
+      const body = JSON.parse(entry.canonicalizedBody.toString("utf8"));
+      if (kind !== body.kind || version !== body.apiVersion) {
+        throw new error_1.VerificationError({
+          code: "TLOG_BODY_ERROR",
+          message: `kind/version mismatch - expected: ${kind}/${version}, received: ${body.kind}/${body.apiVersion}`
+        });
+      }
+      switch (kind) {
+        case "dsse":
+          if (version == dsse_1.DSSE_API_VERSION_V1) {
+            return (0, dsse_1.verifyDSSETLogBody)(body, sigContent);
+          } else {
+            const entryRekorV2 = v2_1.Entry.fromJSON(body);
+            return (0, dsse_1.verifyDSSETLogBodyV2)(entryRekorV2, sigContent);
+          }
+        case "intoto":
+          return (0, intoto_1.verifyIntotoTLogBody)(body, sigContent);
+        case "hashedrekord":
+          if (version == hashedrekord_1.HASHEDREKORD_API_VERSION_V1) {
+            return (0, hashedrekord_1.verifyHashedRekordTLogBody)(body, sigContent);
+          } else {
+            const entryRekorV2 = v2_1.Entry.fromJSON(body);
+            return (0, hashedrekord_1.verifyHashedRekordTLogBodyV2)(entryRekorV2, sigContent);
+          }
+        /* istanbul ignore next */
+        default:
+          throw new error_1.VerificationError({
+            code: "TLOG_BODY_ERROR",
+            message: `unsupported kind: ${kind}`
+          });
+      }
+    }
+    __name(verifyTLogBody, "verifyTLogBody");
+    function verifyTLogInclusion(entry, tlogAuthorities) {
+      let inclusionVerified = false;
+      if (isTLogEntryWithInclusionPromise(entry)) {
+        (0, set_1.verifyTLogSET)(entry, tlogAuthorities);
+        inclusionVerified = true;
+      }
+      if (isTLogEntryWithInclusionProof(entry)) {
+        const checkpoint = (0, checkpoint_1.verifyCheckpoint)(entry, tlogAuthorities);
+        (0, merkle_1.verifyMerkleInclusion)(entry, checkpoint);
+        inclusionVerified = true;
+      }
+      if (!inclusionVerified) {
+        throw new error_1.VerificationError({
+          code: "TLOG_MISSING_INCLUSION_ERROR",
+          message: "inclusion could not be verified"
+        });
+      }
+      return;
+    }
+    __name(verifyTLogInclusion, "verifyTLogInclusion");
+    function isTLogEntryWithInclusionPromise(entry) {
+      return entry.inclusionPromise !== void 0;
+    }
+    __name(isTLogEntryWithInclusionPromise, "isTLogEntryWithInclusionPromise");
+    function isTLogEntryWithInclusionProof(entry) {
+      return entry.inclusionProof !== void 0;
+    }
+    __name(isTLogEntryWithInclusionProof, "isTLogEntryWithInclusionProof");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/verifier.js
+var require_verifier2 = __commonJS({
+  "node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/verifier.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Verifier = void 0;
+    var util_1 = require("util");
+    var error_1 = require_error9();
+    var key_1 = require_key4();
+    var policy_1 = require_policy2();
+    var timestamp_1 = require_timestamp4();
+    var tlog_1 = require_tlog2();
+    var Verifier = class {
+      static {
+        __name(this, "Verifier");
+      }
+      trustMaterial;
+      options;
+      constructor(trustMaterial, options = {}) {
+        this.trustMaterial = trustMaterial;
+        this.options = {
+          ctlogThreshold: options.ctlogThreshold ?? 1,
+          tlogThreshold: options.tlogThreshold ?? 1,
+          timestampThreshold: options.timestampThreshold ?? options.tsaThreshold ?? 1,
+          tsaThreshold: 0
+        };
+      }
+      verify(entity, policy) {
+        const timestamps = this.verifyTimestamps(entity);
+        const signer = this.verifySigningKey(entity, timestamps);
+        this.verifyTLogs(entity);
+        this.verifySignature(entity, signer);
+        if (policy) {
+          this.verifyPolicy(policy, signer.identity || {});
+        }
+        return signer;
+      }
+      // Checks that all of the timestamps in the entity are valid and returns them
+      verifyTimestamps(entity) {
+        let timestampCount = 0;
+        const timestamps = entity.timestamps.map((timestamp) => {
+          switch (timestamp.$case) {
+            case "timestamp-authority":
+              timestampCount++;
+              return (0, timestamp_1.getTSATimestamp)(timestamp.timestamp, entity.signature.signature, this.trustMaterial.timestampAuthorities);
+            case "transparency-log":
+              timestampCount++;
+              return (0, timestamp_1.getTLogTimestamp)(timestamp.tlogEntry);
+          }
+        });
+        if (containsDupes(timestamps)) {
+          throw new error_1.VerificationError({
+            code: "TIMESTAMP_ERROR",
+            message: "duplicate timestamp"
+          });
+        }
+        if (timestampCount < this.options.timestampThreshold) {
+          throw new error_1.VerificationError({
+            code: "TIMESTAMP_ERROR",
+            message: `expected ${this.options.timestampThreshold} timestamps, got ${timestampCount}`
+          });
+        }
+        return timestamps.map((t) => t.timestamp);
+      }
+      // Checks that the signing key is valid for all of the the supplied timestamps
+      // and returns the signer.
+      verifySigningKey({ key }, timestamps) {
+        switch (key.$case) {
+          case "public-key": {
+            return (0, key_1.verifyPublicKey)(key.hint, timestamps, this.trustMaterial);
+          }
+          case "certificate": {
+            const result = (0, key_1.verifyCertificate)(key.certificate, timestamps, this.trustMaterial);
+            if (containsDupes(result.scts)) {
+              throw new error_1.VerificationError({
+                code: "CERTIFICATE_ERROR",
+                message: "duplicate SCT"
+              });
+            }
+            if (result.scts.length < this.options.ctlogThreshold) {
+              throw new error_1.VerificationError({
+                code: "CERTIFICATE_ERROR",
+                message: `expected ${this.options.ctlogThreshold} SCTs, got ${result.scts.length}`
+              });
+            }
+            return result.signer;
+          }
+        }
+      }
+      // Checks that the tlog entries are valid for the supplied content
+      verifyTLogs({ signature: content, tlogEntries }) {
+        let tlogCount = 0;
+        tlogEntries.forEach((entry) => {
+          tlogCount++;
+          (0, tlog_1.verifyTLogInclusion)(entry, this.trustMaterial.tlogs);
+          (0, tlog_1.verifyTLogBody)(entry, content);
+        });
+        if (tlogCount < this.options.tlogThreshold) {
+          throw new error_1.VerificationError({
+            code: "TLOG_ERROR",
+            message: `expected ${this.options.tlogThreshold} tlog entries, got ${tlogCount}`
+          });
+        }
+      }
+      // Checks that the signature is valid for the supplied content
+      verifySignature(entity, signer) {
+        if (!entity.signature.verifySignature(signer.key)) {
+          throw new error_1.VerificationError({
+            code: "SIGNATURE_ERROR",
+            message: "signature verification failed"
+          });
+        }
+      }
+      verifyPolicy(policy, identity) {
+        if (policy.subjectAlternativeName) {
+          (0, policy_1.verifySubjectAlternativeName)(policy.subjectAlternativeName, identity.subjectAlternativeName);
+        }
+        if (policy.extensions) {
+          (0, policy_1.verifyExtensions)(policy.extensions, identity.extensions);
+        }
+      }
+    };
+    exports2.Verifier = Verifier;
+    function containsDupes(arr) {
+      for (let i = 0; i < arr.length; i++) {
+        for (let j = i + 1; j < arr.length; j++) {
+          if ((0, util_1.isDeepStrictEqual)(arr[i], arr[j])) {
+            return true;
+          }
+        }
+      }
+      return false;
+    }
+    __name(containsDupes, "containsDupes");
+  }
+});
+
+// node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/index.js
+var require_dist12 = __commonJS({
+  "node_modules/.pnpm/@sigstore+verify@3.1.0/node_modules/@sigstore/verify/dist/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Verifier = exports2.toTrustMaterial = exports2.VerificationError = exports2.PolicyError = exports2.toSignedEntity = void 0;
+    var bundle_1 = require_bundle3();
+    Object.defineProperty(exports2, "toSignedEntity", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return bundle_1.toSignedEntity;
+    }, "get") });
+    var error_1 = require_error9();
+    Object.defineProperty(exports2, "PolicyError", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return error_1.PolicyError;
+    }, "get") });
+    Object.defineProperty(exports2, "VerificationError", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return error_1.VerificationError;
+    }, "get") });
+    var trust_1 = require_trust();
+    Object.defineProperty(exports2, "toTrustMaterial", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return trust_1.toTrustMaterial;
+    }, "get") });
+    var verifier_1 = require_verifier2();
+    Object.defineProperty(exports2, "Verifier", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return verifier_1.Verifier;
+    }, "get") });
+  }
+});
+
+// node_modules/.pnpm/sigstore@4.1.0_supports-color@10.2.2/node_modules/sigstore/dist/config.js
+var require_config3 = __commonJS({
+  "node_modules/.pnpm/sigstore@4.1.0_supports-color@10.2.2/node_modules/sigstore/dist/config.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.DEFAULT_TIMEOUT = exports2.DEFAULT_RETRY = void 0;
+    exports2.createBundleBuilder = createBundleBuilder;
+    exports2.createKeyFinder = createKeyFinder;
+    exports2.createVerificationPolicy = createVerificationPolicy;
+    var core_1 = require_dist7();
+    var sign_1 = require_dist8();
+    var verify_1 = require_dist12();
+    exports2.DEFAULT_RETRY = { retries: 2 };
+    exports2.DEFAULT_TIMEOUT = 5e3;
+    function createBundleBuilder(bundleType, options) {
+      const bundlerOptions = {
+        signer: initSigner(options),
+        witnesses: initWitnesses(options)
+      };
+      switch (bundleType) {
+        case "messageSignature":
+          return new sign_1.MessageSignatureBundleBuilder(bundlerOptions);
+        case "dsseEnvelope":
+          return new sign_1.DSSEBundleBuilder({
+            ...bundlerOptions,
+            certificateChain: options.legacyCompatibility
+          });
+      }
+    }
+    __name(createBundleBuilder, "createBundleBuilder");
+    function createKeyFinder(keySelector) {
+      return (hint) => {
+        const key = keySelector(hint);
+        if (!key) {
+          throw new verify_1.VerificationError({
+            code: "PUBLIC_KEY_ERROR",
+            message: `key not found: ${hint}`
+          });
+        }
+        return {
+          publicKey: core_1.crypto.createPublicKey(key),
+          validFor: /* @__PURE__ */ __name(() => true, "validFor")
+        };
+      };
+    }
+    __name(createKeyFinder, "createKeyFinder");
+    function createVerificationPolicy(options) {
+      const policy = {};
+      const san = options.certificateIdentityEmail || options.certificateIdentityURI;
+      if (san) {
+        policy.subjectAlternativeName = san;
+      }
+      if (options.certificateIssuer) {
+        policy.extensions = { issuer: options.certificateIssuer };
+      }
+      return policy;
+    }
+    __name(createVerificationPolicy, "createVerificationPolicy");
+    function initSigner(options) {
+      return new sign_1.FulcioSigner({
+        fulcioBaseURL: options.fulcioURL,
+        identityProvider: options.identityProvider || initIdentityProvider(options),
+        retry: options.retry ?? exports2.DEFAULT_RETRY,
+        timeout: options.timeout ?? exports2.DEFAULT_TIMEOUT
+      });
+    }
+    __name(initSigner, "initSigner");
+    function initIdentityProvider(options) {
+      const token = options.identityToken;
+      if (token) {
+        return { getToken: /* @__PURE__ */ __name(() => Promise.resolve(token), "getToken") };
+      } else {
+        return new sign_1.CIContextProvider("sigstore");
+      }
+    }
+    __name(initIdentityProvider, "initIdentityProvider");
+    function initWitnesses(options) {
+      const witnesses = [];
+      if (isRekorEnabled(options)) {
+        witnesses.push(new sign_1.RekorWitness({
+          rekorBaseURL: options.rekorURL,
+          entryType: options.legacyCompatibility ? "intoto" : "dsse",
+          fetchOnConflict: false,
+          retry: options.retry ?? exports2.DEFAULT_RETRY,
+          timeout: options.timeout ?? exports2.DEFAULT_TIMEOUT
+        }));
+      }
+      if (isTSAEnabled(options)) {
+        witnesses.push(new sign_1.TSAWitness({
+          tsaBaseURL: options.tsaServerURL,
+          retry: options.retry ?? exports2.DEFAULT_RETRY,
+          timeout: options.timeout ?? exports2.DEFAULT_TIMEOUT
+        }));
+      }
+      return witnesses;
+    }
+    __name(initWitnesses, "initWitnesses");
+    function isRekorEnabled(options) {
+      return options.tlogUpload !== false;
+    }
+    __name(isRekorEnabled, "isRekorEnabled");
+    function isTSAEnabled(options) {
+      return options.tsaServerURL !== void 0;
+    }
+    __name(isTSAEnabled, "isTSAEnabled");
+  }
+});
+
+// node_modules/.pnpm/sigstore@4.1.0_supports-color@10.2.2/node_modules/sigstore/dist/sigstore.js
+var require_sigstore = __commonJS({
+  "node_modules/.pnpm/sigstore@4.1.0_supports-color@10.2.2/node_modules/sigstore/dist/sigstore.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
+      var ownKeys = /* @__PURE__ */ __name(function(o) {
+        ownKeys = Object.getOwnPropertyNames || function(o2) {
+          var ar = [];
+          for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
+          return ar;
+        };
+        return ownKeys(o);
+      }, "ownKeys");
+      return function(mod) {
+        if (mod && mod.__esModule) return mod;
+        var result = {};
+        if (mod != null) {
+          for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+        }
+        __setModuleDefault(result, mod);
+        return result;
+      };
+    })();
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.sign = sign;
+    exports2.attest = attest;
+    exports2.verify = verify;
+    exports2.createVerifier = createVerifier;
+    var bundle_1 = require_dist6();
+    var tuf = __importStar(require_dist11());
+    var verify_1 = require_dist12();
+    var config = __importStar(require_config3());
+    async function sign(payload, options = {}) {
+      const bundler = config.createBundleBuilder("messageSignature", options);
+      const bundle = await bundler.create({ data: payload });
+      return (0, bundle_1.bundleToJSON)(bundle);
+    }
+    __name(sign, "sign");
+    async function attest(payload, payloadType, options = {}) {
+      const bundler = config.createBundleBuilder("dsseEnvelope", options);
+      const bundle = await bundler.create({ data: payload, type: payloadType });
+      return (0, bundle_1.bundleToJSON)(bundle);
+    }
+    __name(attest, "attest");
+    async function verify(bundle, dataOrOptions, options) {
+      let data;
+      if (Buffer.isBuffer(dataOrOptions)) {
+        data = dataOrOptions;
+      } else {
+        options = dataOrOptions;
+      }
+      const verifier = await createVerifier(options);
+      return verifier.verify(bundle, data);
+    }
+    __name(verify, "verify");
+    async function createVerifier(options = {}) {
+      const trustedRoot = await tuf.getTrustedRoot({
+        mirrorURL: options.tufMirrorURL,
+        rootPath: options.tufRootPath,
+        cachePath: options.tufCachePath,
+        forceCache: options.tufForceCache,
+        retry: options.retry ?? config.DEFAULT_RETRY,
+        timeout: options.timeout ?? config.DEFAULT_TIMEOUT
+      });
+      const keyFinder = options.keySelector ? config.createKeyFinder(options.keySelector) : void 0;
+      const trustMaterial = (0, verify_1.toTrustMaterial)(trustedRoot, keyFinder);
+      const verifierOptions = {
+        ctlogThreshold: options.ctLogThreshold,
+        tlogThreshold: options.tlogThreshold
+      };
+      const verifier = new verify_1.Verifier(trustMaterial, verifierOptions);
+      const policy = config.createVerificationPolicy(options);
+      return {
+        verify: /* @__PURE__ */ __name((bundle, payload) => {
+          const deserializedBundle = (0, bundle_1.bundleFromJSON)(bundle);
+          const signedEntity = (0, verify_1.toSignedEntity)(deserializedBundle, payload);
+          return verifier.verify(signedEntity, policy);
+        }, "verify")
+      };
+    }
+    __name(createVerifier, "createVerifier");
+  }
+});
+
+// node_modules/.pnpm/sigstore@4.1.0_supports-color@10.2.2/node_modules/sigstore/dist/index.js
+var require_dist13 = __commonJS({
+  "node_modules/.pnpm/sigstore@4.1.0_supports-color@10.2.2/node_modules/sigstore/dist/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.verify = exports2.sign = exports2.createVerifier = exports2.attest = exports2.VerificationError = exports2.PolicyError = exports2.TUFError = exports2.InternalError = exports2.DEFAULT_REKOR_URL = exports2.DEFAULT_FULCIO_URL = exports2.ValidationError = void 0;
+    var bundle_1 = require_dist6();
+    Object.defineProperty(exports2, "ValidationError", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return bundle_1.ValidationError;
+    }, "get") });
+    var sign_1 = require_dist8();
+    Object.defineProperty(exports2, "DEFAULT_FULCIO_URL", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return sign_1.DEFAULT_FULCIO_URL;
+    }, "get") });
+    Object.defineProperty(exports2, "DEFAULT_REKOR_URL", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return sign_1.DEFAULT_REKOR_URL;
+    }, "get") });
+    Object.defineProperty(exports2, "InternalError", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return sign_1.InternalError;
+    }, "get") });
+    var tuf_1 = require_dist11();
+    Object.defineProperty(exports2, "TUFError", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return tuf_1.TUFError;
+    }, "get") });
+    var verify_1 = require_dist12();
+    Object.defineProperty(exports2, "PolicyError", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return verify_1.PolicyError;
+    }, "get") });
+    Object.defineProperty(exports2, "VerificationError", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return verify_1.VerificationError;
+    }, "get") });
+    var sigstore_1 = require_sigstore();
+    Object.defineProperty(exports2, "attest", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return sigstore_1.attest;
+    }, "get") });
+    Object.defineProperty(exports2, "createVerifier", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return sigstore_1.createVerifier;
+    }, "get") });
+    Object.defineProperty(exports2, "sign", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return sigstore_1.sign;
+    }, "get") });
+    Object.defineProperty(exports2, "verify", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return sigstore_1.verify;
+    }, "get") });
+  }
+});
+
+// node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/registry.js
+var require_registry = __commonJS({
+  "node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/registry.js"(exports2, module2) {
+    var crypto = require("node:crypto");
+    var PackageJson = require_lib11();
+    var pickManifest = require_lib9();
+    var ssri = require_lib12();
+    var npa = require_npa();
+    var sigstore = require_dist13();
+    var fetch = require_lib28();
+    var Fetcher = require_fetcher2();
+    var RemoteFetcher = require_remote2();
+    var pacoteVersion = require_package5().version;
+    var removeTrailingSlashes = require_trailing_slashes();
+    var _ = require_protected();
+    var corgiDoc = "application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*";
+    var fullDoc = "application/json";
+    var MISSING_TIME_CUTOFF = "2015-01-01T00:00:00.000Z";
+    var RegistryFetcher = class extends Fetcher {
+      static {
+        __name(this, "RegistryFetcher");
+      }
+      #cacheKey;
+      constructor(spec, opts) {
+        super(spec, opts);
+        this.packumentCache = this.opts.packumentCache || null;
+        this.registry = fetch.pickRegistry(spec, opts);
+        this.packumentUrl = `${removeTrailingSlashes(this.registry)}/${this.spec.escapedName}`;
+        this.#cacheKey = `${this.fullMetadata ? "full" : "corgi"}:${this.packumentUrl}`;
+        const parsed = new URL(this.registry);
+        const regKey = `//${parsed.host}${parsed.pathname}`;
+        if (this.opts[`${regKey}:_keys`]) {
+          this.registryKeys = this.opts[`${regKey}:_keys`];
+        }
+      }
+      async resolve() {
+        await this.manifest();
+        if (!this.resolved) {
+          throw Object.assign(
+            new Error("Invalid package manifest: no `dist.tarball` field"),
+            { package: this.spec.toString() }
+          );
+        }
+        return this.resolved;
+      }
+      #headers() {
+        return {
+          // npm will override UA, but ensure that we always send *something*
+          "user-agent": this.opts.userAgent || `pacote/${pacoteVersion} node/${process.version}`,
+          ...this.opts.headers || {},
+          "pacote-version": pacoteVersion,
+          "pacote-req-type": "packument",
+          "pacote-pkg-id": `registry:${this.spec.name}`,
+          accept: this.fullMetadata ? fullDoc : corgiDoc
+        };
+      }
+      async packument() {
+        if (this.packumentCache?.has(this.#cacheKey)) {
+          return this.packumentCache.get(this.#cacheKey);
+        }
+        try {
+          const res = await fetch(this.packumentUrl, {
+            ...this.opts,
+            headers: this.#headers(),
+            spec: this.spec,
+            // never check integrity for packuments themselves
+            integrity: null
+          });
+          const packument = await res.json();
+          const contentLength = res.headers.get("content-length");
+          if (contentLength) {
+            packument._contentLength = Number(contentLength);
+          }
+          this.packumentCache?.set(this.#cacheKey, packument);
+          return packument;
+        } catch (err) {
+          this.packumentCache?.delete(this.#cacheKey);
+          if (err.code !== "E404" || this.fullMetadata) {
+            throw err;
+          }
+          this.fullMetadata = true;
+          return this.packument();
+        }
+      }
+      async manifest() {
+        if (this.package) {
+          return this.package;
+        }
+        if (this.opts.verifySignatures) {
+          this.fullMetadata = true;
+        }
+        const packument = await this.packument();
+        const steps = PackageJson.normalizeSteps.filter((s) => s !== "_attributes");
+        const mani = await new PackageJson().fromContent(pickManifest(packument, this.spec.fetchSpec, {
+          ...this.opts,
+          defaultTag: this.defaultTag,
+          before: this.before
+        })).normalize({ steps }).then((p) => p.content);
+        const time = packument.time?.[mani.version];
+        if (time) {
+          mani._time = time;
+        }
+        const { dist } = mani;
+        if (dist) {
+          this.resolved = mani._resolved = dist.tarball;
+          mani._from = this.from;
+          const distIntegrity = dist.integrity ? ssri.parse(dist.integrity) : dist.shasum ? ssri.fromHex(dist.shasum, "sha1", { ...this.opts }) : null;
+          if (distIntegrity) {
+            if (this.integrity && !this.integrity.match(distIntegrity)) {
+              for (const algo of Object.keys(this.integrity)) {
+                if (distIntegrity[algo]) {
+                  throw Object.assign(new Error(
+                    `Integrity checksum failed when using ${algo}: wanted ${this.integrity} but got ${distIntegrity}.`
+                  ), { code: "EINTEGRITY" });
+                }
+              }
+            }
+            this.integrity = distIntegrity;
+          }
+        }
+        if (this.integrity) {
+          mani._integrity = String(this.integrity);
+          if (dist.signatures) {
+            if (this.opts.verifySignatures) {
+              const message = `${mani._id}:${mani._integrity}`;
+              for (const signature of dist.signatures) {
+                const publicKey = this.registryKeys && this.registryKeys.filter((key) => key.keyid === signature.keyid)[0];
+                if (!publicKey) {
+                  throw Object.assign(new Error(
+                    `${mani._id} has a registry signature with keyid: ${signature.keyid} but no corresponding public key can be found`
+                  ), { code: "EMISSINGSIGNATUREKEY" });
+                }
+                const publishedTime = Date.parse(mani._time || MISSING_TIME_CUTOFF);
+                const validPublicKey = !publicKey.expires || publishedTime < Date.parse(publicKey.expires);
+                if (!validPublicKey) {
+                  throw Object.assign(new Error(
+                    `${mani._id} has a registry signature with keyid: ${signature.keyid} but the corresponding public key has expired ${publicKey.expires}`
+                  ), { code: "EEXPIREDSIGNATUREKEY" });
+                }
+                const verifier = crypto.createVerify("SHA256");
+                verifier.write(message);
+                verifier.end();
+                const valid = verifier.verify(
+                  publicKey.pemkey,
+                  signature.sig,
+                  "base64"
+                );
+                if (!valid) {
+                  throw Object.assign(new Error(
+                    `${mani._id} has an invalid registry signature with keyid: ${publicKey.keyid} and signature: ${signature.sig}`
+                  ), {
+                    code: "EINTEGRITYSIGNATURE",
+                    keyid: publicKey.keyid,
+                    signature: signature.sig,
+                    resolved: mani._resolved,
+                    integrity: mani._integrity
+                  });
+                }
+              }
+              mani._signatures = dist.signatures;
+            } else {
+              mani._signatures = dist.signatures;
+            }
+          }
+          if (dist.attestations) {
+            if (this.opts.verifyAttestations) {
+              const attestationsPath = new URL(dist.attestations.url).pathname;
+              const attestationsUrl = new URL(attestationsPath, this.registry).href;
+              const res = await fetch(attestationsUrl, {
+                ...this.opts,
+                // disable integrity check for attestations json payload, we check the
+                // integrity in the verification steps below
+                integrity: null
+              });
+              const { attestations } = await res.json();
+              const bundles = attestations.map(({ predicateType, bundle }) => {
+                const statement = JSON.parse(
+                  Buffer.from(bundle.dsseEnvelope.payload, "base64").toString("utf8")
+                );
+                const keyid = bundle.dsseEnvelope.signatures[0].keyid;
+                const signature = bundle.dsseEnvelope.signatures[0].sig;
+                return {
+                  predicateType,
+                  bundle,
+                  statement,
+                  keyid,
+                  signature
+                };
+              });
+              const attestationKeyIds = bundles.map((b) => b.keyid).filter((k) => !!k);
+              const attestationRegistryKeys = (this.registryKeys || []).filter((key) => attestationKeyIds.includes(key.keyid));
+              if (attestationKeyIds.length > 0 && !attestationRegistryKeys.length) {
+                throw Object.assign(new Error(
+                  `${mani._id} has attestations but no corresponding public key(s) can be found`
+                ), { code: "EMISSINGSIGNATUREKEY" });
+              }
+              for (const { predicateType, bundle, keyid, signature, statement } of bundles) {
+                const publicKey = attestationRegistryKeys.find((key) => key.keyid === keyid);
+                if (keyid) {
+                  if (!publicKey) {
+                    throw Object.assign(new Error(
+                      `${mani._id} has attestations with keyid: ${keyid} but no corresponding public key can be found`
+                    ), { code: "EMISSINGSIGNATUREKEY" });
+                  }
+                  const integratedTime = new Date(
+                    Number(
+                      bundle.verificationMaterial.tlogEntries[0].integratedTime
+                    ) * 1e3
+                  );
+                  const validPublicKey = !publicKey.expires || integratedTime < Date.parse(publicKey.expires);
+                  if (!validPublicKey) {
+                    throw Object.assign(new Error(
+                      `${mani._id} has attestations with keyid: ${keyid} but the corresponding public key has expired ${publicKey.expires}`
+                    ), { code: "EEXPIREDSIGNATUREKEY" });
+                  }
+                }
+                const subject = {
+                  name: statement.subject[0].name,
+                  sha512: statement.subject[0].digest.sha512
+                };
+                const purl = this.spec.type === "version" ? npa.toPurl(this.spec) : this.spec;
+                if (subject.name !== purl) {
+                  throw Object.assign(new Error(
+                    `${mani._id} package name and version (PURL): ${purl} doesn't match what was signed: ${subject.name}`
+                  ), { code: "EATTESTATIONSUBJECT" });
+                }
+                const integrityHexDigest = ssri.parse(this.integrity).hexDigest();
+                if (subject.sha512 !== integrityHexDigest) {
+                  throw Object.assign(new Error(
+                    `${mani._id} package integrity (hex digest): ${integrityHexDigest} doesn't match what was signed: ${subject.sha512}`
+                  ), { code: "EATTESTATIONSUBJECT" });
+                }
+                try {
+                  const options = {
+                    tufCachePath: this.tufCache,
+                    tufForceCache: true,
+                    keySelector: publicKey ? () => publicKey.pemkey : void 0
+                  };
+                  await sigstore.verify(bundle, options);
+                } catch (e) {
+                  throw Object.assign(new Error(
+                    `${mani._id} failed to verify attestation: ${e.message}`
+                  ), {
+                    code: "EATTESTATIONVERIFY",
+                    predicateType,
+                    keyid,
+                    signature,
+                    resolved: mani._resolved,
+                    integrity: mani._integrity
+                  });
+                }
+              }
+              mani._attestations = dist.attestations;
+              mani._attestationBundles = attestations;
+            } else {
+              mani._attestations = dist.attestations;
+            }
+          }
+        }
+        this.package = mani;
+        return this.package;
+      }
+      [_.tarballFromResolved]() {
+        return new RemoteFetcher(this.resolved, {
+          ...this.opts,
+          resolved: this.resolved,
+          pkgid: `registry:${this.spec.name}@${this.resolved}`
+        })[_.tarballFromResolved]();
+      }
+      get types() {
+        return [
+          "tag",
+          "version",
+          "range"
+        ];
+      }
+    };
+    module2.exports = RegistryFetcher;
+  }
+});
+
+// node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/fetcher.js
+var require_fetcher2 = __commonJS({
+  "node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/fetcher.js"(exports2, module2) {
+    var { basename, dirname } = require("node:path");
+    var { rm, mkdir } = require("node:fs/promises");
+    var PackageJson = require_lib11();
+    var cacache2 = require_lib17();
+    var fsm = require_lib16();
+    var getContents = require_lib19();
+    var npa = require_npa();
+    var { promiseRetry } = require_lib20();
+    var ssri = require_lib12();
+    var tar = require_index_min();
+    var { Minipass } = require_commonjs5();
+    var { log } = require_lib2();
+    var _ = require_protected();
+    var cacheDir = require_cache_dir();
+    var isPackageBin = require_is_package_bin();
+    var removeTrailingSlashes = require_trailing_slashes();
+    var packageJsonPrepare = /* @__PURE__ */ __name((p) => PackageJson.prepare(p).then((pkg) => pkg.content), "packageJsonPrepare");
+    var packageJsonNormalize = /* @__PURE__ */ __name((p) => PackageJson.normalize(p).then((pkg) => pkg.content), "packageJsonNormalize");
+    var FetcherBase = class {
+      static {
+        __name(this, "FetcherBase");
+      }
+      constructor(spec, opts) {
+        if (!opts || typeof opts !== "object") {
+          throw new TypeError("options object is required");
+        }
+        this.spec = npa(spec, opts.where);
+        this.allowGitIgnore = !!opts.allowGitIgnore;
+        this.from = this.spec.registry ? `${this.spec.name}@${this.spec.rawSpec}` : this.spec.saveSpec;
+        this.#assertType();
+        this.opts = { ...opts };
+        this.cache = opts.cache || cacheDir().cacache;
+        this.tufCache = opts.tufCache || cacheDir().tufcache;
+        this.resolved = opts.resolved || null;
+        this.defaultIntegrityAlgorithm = opts.defaultIntegrityAlgorithm || "sha512";
+        if (typeof opts.integrity === "string") {
+          this.opts.integrity = ssri.parse(opts.integrity);
+        }
+        this.package = null;
+        this.type = this.constructor.name;
+        this.fmode = opts.fmode || 438;
+        this.dmode = opts.dmode || 511;
+        this.umask = opts.umask || 0;
+        this.preferOnline = !!opts.preferOnline;
+        this.preferOffline = !!opts.preferOffline;
+        this.offline = !!opts.offline;
+        this.before = opts.before;
+        this.fullMetadata = this.before ? true : !!opts.fullMetadata;
+        this.fullReadJson = !!opts.fullReadJson;
+        this[_.readPackageJson] = this.fullReadJson ? packageJsonPrepare : packageJsonNormalize;
+        this.replaceRegistryHost = !opts.replaceRegistryHost || opts.replaceRegistryHost === "npmjs" ? "registry.npmjs.org" : opts.replaceRegistryHost;
+        this.defaultTag = opts.defaultTag || "latest";
+        this.registry = removeTrailingSlashes(opts.registry || "https://registry.npmjs.org");
+        this.npmBin = opts.npmBin || "npm";
+        this.npmInstallCmd = opts.npmInstallCmd || ["install", "--force"];
+        this.npmCliConfig = opts.npmCliConfig || [
+          `--cache=${dirname(this.cache)}`,
+          `--prefer-offline=${!!this.preferOffline}`,
+          `--prefer-online=${!!this.preferOnline}`,
+          `--offline=${!!this.offline}`,
+          ...this.before ? [`--before=${this.before.toISOString()}`] : [],
+          "--no-progress",
+          "--no-save",
+          "--no-audit",
+          // override any omit settings from the environment
+          "--include=dev",
+          "--include=peer",
+          "--include=optional",
+          // we need the actual things, not just the lockfile
+          "--no-package-lock-only",
+          "--no-dry-run"
+        ];
+      }
+      get integrity() {
+        return this.opts.integrity || null;
+      }
+      set integrity(i) {
+        if (!i) {
+          return;
+        }
+        i = ssri.parse(i);
+        const current = this.opts.integrity;
+        if (current) {
+          current.merge(i);
+        } else {
+          this.opts.integrity = i;
+        }
+      }
+      get notImplementedError() {
+        return new Error("not implemented in this fetcher type: " + this.type);
+      }
+      // override in child classes
+      // Returns a Promise that resolves to this.resolved string value
+      resolve() {
+        return this.resolved ? Promise.resolve(this.resolved) : Promise.reject(this.notImplementedError);
+      }
+      packument() {
+        return Promise.reject(this.notImplementedError);
+      }
+      // override in child class
+      // returns a manifest containing:
+      // - name
+      // - version
+      // - _resolved
+      // - _integrity
+      // - plus whatever else was in there (corgi, full metadata, or pj file)
+      manifest() {
+        return Promise.reject(this.notImplementedError);
+      }
+      // private, should be overridden.
+      // Note that they should *not* calculate or check integrity or cache,
+      // but *just*  return the raw tarball data stream.
+      [_.tarballFromResolved]() {
+        throw this.notImplementedError;
+      }
+      // public, should not be overridden
+      tarball() {
+        return this.tarballStream((stream) => stream.concat().then((data) => {
+          data.integrity = this.integrity && String(this.integrity);
+          data.resolved = this.resolved;
+          data.from = this.from;
+          return data;
+        }));
+      }
+      // private
+      // Note: cacache will raise a EINTEGRITY error if the integrity doesn't match
+      #tarballFromCache() {
+        const startTime = Date.now();
+        const stream = cacache2.get.stream.byDigest(this.cache, this.integrity, this.opts);
+        const elapsedTime = Date.now() - startTime;
+        log.http(
+          "cache",
+          `${this.spec} ${elapsedTime}ms (cache hit)`
+        );
+        return stream;
+      }
+      get [_.cacheFetches]() {
+        return true;
+      }
+      #istream(stream) {
+        if (!this.opts.cache || !this[_.cacheFetches]) {
+          if (stream.hasIntegrityEmitter) {
+            stream.on("integrity", (i) => this.integrity = i);
+            return stream;
+          }
+          const istream = ssri.integrityStream(this.opts);
+          istream.on("integrity", (i) => this.integrity = i);
+          stream.on("error", (err) => istream.emit("error", err));
+          return stream.pipe(istream);
+        }
+        const middleStream = new Minipass();
+        stream.on("error", (err) => middleStream.emit("error", err));
+        stream.pipe(middleStream, { end: false });
+        const cstream = cacache2.put.stream(
+          this.opts.cache,
+          `pacote:tarball:${this.from}`,
+          this.opts
+        );
+        cstream.on("integrity", (i) => this.integrity = i);
+        cstream.on("error", (err) => stream.emit("error", err));
+        stream.pipe(cstream);
+        cstream.promise().catch(() => {
+        }).then(() => middleStream.end());
+        return middleStream;
+      }
+      pickIntegrityAlgorithm() {
+        return this.integrity ? this.integrity.pickAlgorithm(this.opts) : this.defaultIntegrityAlgorithm;
+      }
+      // TODO: check error class, once those are rolled out to our deps
+      isDataCorruptionError(er) {
+        return er.code === "EINTEGRITY" || er.code === "Z_DATA_ERROR";
+      }
+      // override the types getter
+      get types() {
+        return false;
+      }
+      #assertType() {
+        if (this.types && !this.types.includes(this.spec.type)) {
+          throw new TypeError(`Wrong spec type (${this.spec.type}) for ${this.constructor.name}. Supported types: ${this.types.join(", ")}`);
+        }
+      }
+      // We allow ENOENTs from cacache, but not anywhere else.
+      // An ENOENT trying to read a tgz file, for example, is Right Out.
+      isRetriableError(er) {
+        return this.isDataCorruptionError(er) || er.code === "ENOENT" || er.code === "EISDIR";
+      }
+      // Mostly internal, but has some uses
+      // Pass in a function which returns a promise
+      // Function will be called 1 or more times with streams that may fail.
+      // Retries:
+      // Function MUST handle errors on the stream by rejecting the promise,
+      // so that retry logic can pick it up and either retry or fail whatever
+      // promise it was making (ie, failing extraction, etc.)
+      //
+      // The return value of this method is a Promise that resolves the same
+      // as whatever the streamHandler resolves to.
+      //
+      // This should never be overridden by child classes, but it is public.
+      tarballStream(streamHandler) {
+        const fromCache = !this.preferOnline && this.integrity && this.resolved ? streamHandler(this.#tarballFromCache()).catch((er) => {
+          if (this.isDataCorruptionError(er)) {
+            log.warn("tarball", `cached data for ${this.spec} (${this.integrity}) seems to be corrupted. Refreshing cache.`);
+            return this.cleanupCached().then(() => {
+              throw er;
+            });
+          } else {
+            throw er;
+          }
+        }) : null;
+        const fromResolved = /* @__PURE__ */ __name((er) => {
+          if (er) {
+            if (!this.isRetriableError(er)) {
+              throw er;
+            }
+            log.silly("tarball", `no local data for ${this.spec}. Extracting by manifest.`);
+          }
+          return this.resolve().then(() => promiseRetry((tryAgain) => streamHandler(this.#istream(this[_.tarballFromResolved]())).catch((streamErr) => {
+            if (this.isRetriableError(streamErr)) {
+              log.warn("tarball", `tarball data for ${this.spec} (${this.integrity}) seems to be corrupted. Trying again.`);
+              return this.cleanupCached().then(() => tryAgain(streamErr));
+            }
+            throw streamErr;
+          }), { retries: 1, minTimeout: 0, maxTimeout: 0 }));
+        }, "fromResolved");
+        return fromCache ? fromCache.catch(fromResolved) : fromResolved();
+      }
+      cleanupCached() {
+        return cacache2.rm.content(this.cache, this.integrity, this.opts);
+      }
+      #empty(path) {
+        return getContents({ path, depth: 1 }).then((contents) => Promise.all(
+          contents.map((entry) => rm(entry, { recursive: true, force: true }))
+        ));
+      }
+      async #mkdir(dest) {
+        await this.#empty(dest);
+        return await mkdir(dest, { recursive: true });
+      }
+      // extraction is always the same.  the only difference is where
+      // the tarball comes from.
+      async extract(dest) {
+        await this.#mkdir(dest);
+        return this.tarballStream((tarball) => this.#extract(dest, tarball));
+      }
+      #toFile(dest) {
+        return this.tarballStream((str) => new Promise((res, rej) => {
+          const writer = new fsm.WriteStream(dest);
+          str.on("error", (er) => writer.emit("error", er));
+          writer.on("error", (er) => rej(er));
+          writer.on("close", () => res({
+            integrity: this.integrity && String(this.integrity),
+            resolved: this.resolved,
+            from: this.from
+          }));
+          str.pipe(writer);
+        }));
+      }
+      // don't use this.#mkdir because we don't want to rimraf anything
+      async tarballFile(dest) {
+        const dir = dirname(dest);
+        await mkdir(dir, { recursive: true });
+        return this.#toFile(dest);
+      }
+      #extract(dest, tarball) {
+        const extractor = tar.x(this.#tarxOptions({ cwd: dest }));
+        const p = new Promise((resolve, reject) => {
+          extractor.on("end", () => {
+            resolve({
+              resolved: this.resolved,
+              integrity: this.integrity && String(this.integrity),
+              from: this.from
+            });
+          });
+          extractor.on("error", (er) => {
+            log.warn("tar", er.message);
+            log.silly("tar", er);
+            reject(er);
+          });
+          tarball.on("error", (er) => reject(er));
+        });
+        tarball.pipe(extractor);
+        return p;
+      }
+      // always ensure that entries are at least as permissive as our configured
+      // dmode/fmode, but never more permissive than the umask allows.
+      #entryMode(path, mode, type) {
+        const m = /Directory|GNUDumpDir/.test(type) ? this.dmode : /File$/.test(type) ? this.fmode : (
+          /* istanbul ignore next - should never happen in a pkg */
+          0
+        );
+        const exe = isPackageBin(this.package, path) ? 73 : 0;
+        return (mode | m) & ~this.umask | exe | 384;
+      }
+      #tarxOptions({ cwd }) {
+        const sawIgnores = /* @__PURE__ */ new Set();
+        return {
+          cwd,
+          noChmod: true,
+          noMtime: true,
+          filter: /* @__PURE__ */ __name((name, entry) => {
+            if (/Link$/.test(entry.type)) {
+              return false;
+            }
+            entry.mode = this.#entryMode(entry.path, entry.mode, entry.type);
+            if (/File$/.test(entry.type)) {
+              const base = basename(entry.path);
+              if (base === ".npmignore") {
+                sawIgnores.add(entry.path);
+              } else if (base === ".gitignore" && !this.allowGitIgnore) {
+                const ni = entry.path.replace(/\.gitignore$/, ".npmignore");
+                if (sawIgnores.has(ni)) {
+                  return false;
+                }
+                entry.path = ni;
+              }
+              return true;
+            }
+          }, "filter"),
+          strip: 1,
+          onwarn: (
+            /* istanbul ignore next - we can trust that tar logs */
+            /* @__PURE__ */ __name((code, msg, data) => {
+              log.warn("tar", code, msg);
+              log.silly("tar", code, msg, data);
+            }, "onwarn")
+          ),
+          umask: this.umask,
+          // always ignore ownership info from tarball metadata
+          preserveOwner: false
+        };
+      }
+    };
+    module2.exports = FetcherBase;
+    var GitFetcher = require_git();
+    var RegistryFetcher = require_registry();
+    var FileFetcher = require_file();
+    var DirFetcher = require_dir();
+    var RemoteFetcher = require_remote2();
+    var canUse = /* @__PURE__ */ __name(({ allow = "all", isRoot = false, allowType, spec }) => {
+      if (allow === "all") {
+        return true;
+      }
+      if (allow !== "none" && isRoot) {
+        return true;
+      }
+      throw Object.assign(
+        new Error(`Fetching${allow === "root" ? " non-root" : ""} packages of type "${allowType}" have been disabled`),
+        {
+          code: `EALLOW${allowType.toUpperCase()}`,
+          package: spec.toString()
+        }
+      );
+    }, "canUse");
+    FetcherBase.get = (rawSpec, opts = {}) => {
+      const spec = npa(rawSpec, opts.where);
+      switch (spec.type) {
+        case "git":
+          canUse({ allow: opts.allowGit, isRoot: opts._isRoot, allowType: "git", spec });
+          return new GitFetcher(spec, opts);
+        case "remote":
+          canUse({ allow: opts.allowRemote, isRoot: opts._isRoot, allowType: "remote", spec });
+          return new RemoteFetcher(spec, opts);
+        case "version":
+        case "range":
+        case "tag":
+        case "alias":
+          canUse({ allow: opts.allowRegistry, isRoot: opts._isRoot, allowType: "registry", spec });
+          return new RegistryFetcher(spec.subSpec || spec, opts);
+        case "file":
+          canUse({ allow: opts.allowFile, isRoot: opts._isRoot, allowType: "file", spec });
+          return new FileFetcher(spec, opts);
+        case "directory":
+          canUse({ allow: opts.allowDirectory, isRoot: opts._isRoot, allowType: "directory", spec });
+          return new DirFetcher(spec, opts);
+        default:
+          throw new TypeError("Unknown spec type: " + spec.type);
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/index.js
+var require_lib30 = __commonJS({
+  "node_modules/.pnpm/pacote@21.5.0_supports-color@10.2.2/node_modules/pacote/lib/index.js"(exports2, module2) {
+    var { get } = require_fetcher2();
+    var GitFetcher = require_git();
+    var RegistryFetcher = require_registry();
+    var FileFetcher = require_file();
+    var DirFetcher = require_dir();
+    var RemoteFetcher = require_remote2();
+    var tarball = /* @__PURE__ */ __name((spec, opts) => get(spec, opts).tarball(), "tarball");
+    tarball.stream = (spec, handler, opts) => get(spec, opts).tarballStream(handler);
+    tarball.file = (spec, dest, opts) => get(spec, opts).tarballFile(dest);
+    module2.exports = {
+      GitFetcher,
+      RegistryFetcher,
+      FileFetcher,
+      DirFetcher,
+      RemoteFetcher,
+      resolve: /* @__PURE__ */ __name((spec, opts) => get(spec, opts).resolve(), "resolve"),
+      extract: /* @__PURE__ */ __name((spec, dest, opts) => get(spec, opts).extract(dest), "extract"),
+      manifest: /* @__PURE__ */ __name((spec, opts) => get(spec, opts).manifest(), "manifest"),
+      packument: /* @__PURE__ */ __name((spec, opts) => get(spec, opts).packument(), "packument"),
+      tarball
+    };
+  }
+});
+
+// node_modules/.pnpm/treeverse@3.0.0/node_modules/treeverse/lib/breadth.js
+var require_breadth = __commonJS({
+  "node_modules/.pnpm/treeverse@3.0.0/node_modules/treeverse/lib/breadth.js"(exports2, module2) {
+    var breadth = /* @__PURE__ */ __name(({
+      visit,
+      filter = /* @__PURE__ */ __name(() => true, "filter"),
+      getChildren,
+      tree
+    }) => {
+      const queue = [];
+      const seen = /* @__PURE__ */ new Map();
+      const next = /* @__PURE__ */ __name(() => {
+        while (queue.length) {
+          const node = queue.shift();
+          const res = visitNode(node);
+          if (isPromise(res)) {
+            return res.then(() => next());
+          }
+        }
+        return seen.get(tree);
+      }, "next");
+      const visitNode = /* @__PURE__ */ __name((visitTree) => {
+        if (seen.has(visitTree)) {
+          return seen.get(visitTree);
+        }
+        seen.set(visitTree, null);
+        const res = visit ? visit(visitTree) : visitTree;
+        if (isPromise(res)) {
+          const fullResult = res.then((resThen) => {
+            seen.set(visitTree, resThen);
+            return kidNodes(visitTree);
+          });
+          seen.set(visitTree, fullResult);
+          return fullResult;
+        } else {
+          seen.set(visitTree, res);
+          return kidNodes(visitTree);
+        }
+      }, "visitNode");
+      const kidNodes = /* @__PURE__ */ __name((kidTree) => {
+        const kids = getChildren(kidTree, seen.get(kidTree));
+        return isPromise(kids) ? kids.then(processKids) : processKids(kids);
+      }, "kidNodes");
+      const processKids = /* @__PURE__ */ __name((kids) => {
+        kids = (kids || []).filter(filter);
+        queue.push(...kids);
+      }, "processKids");
+      queue.push(tree);
+      return next();
+    }, "breadth");
+    var isPromise = /* @__PURE__ */ __name((p) => p && typeof p.then === "function", "isPromise");
+    module2.exports = breadth;
+  }
+});
+
+// node_modules/.pnpm/treeverse@3.0.0/node_modules/treeverse/lib/depth-descent.js
+var require_depth_descent = __commonJS({
+  "node_modules/.pnpm/treeverse@3.0.0/node_modules/treeverse/lib/depth-descent.js"(exports2, module2) {
+    var depth = /* @__PURE__ */ __name(({
+      visit,
+      filter,
+      getChildren,
+      tree
+    }) => {
+      const stack = [];
+      const seen = /* @__PURE__ */ new Map();
+      const next = /* @__PURE__ */ __name(() => {
+        while (stack.length) {
+          const node = stack.pop();
+          const res = visitNode(node);
+          if (isPromise(res)) {
+            return res.then(() => next());
+          }
+        }
+        return seen.get(tree);
+      }, "next");
+      const visitNode = /* @__PURE__ */ __name((visitTree) => {
+        if (seen.has(visitTree)) {
+          return seen.get(visitTree);
+        }
+        seen.set(visitTree, null);
+        const res = visit ? visit(visitTree) : visitTree;
+        if (isPromise(res)) {
+          const fullResult = res.then((resThen) => {
+            seen.set(visitTree, resThen);
+            return kidNodes(visitTree);
+          });
+          seen.set(visitTree, fullResult);
+          return fullResult;
+        } else {
+          seen.set(visitTree, res);
+          return kidNodes(visitTree);
+        }
+      }, "visitNode");
+      const kidNodes = /* @__PURE__ */ __name((kidTree) => {
+        const kids = getChildren(kidTree, seen.get(kidTree));
+        return isPromise(kids) ? kids.then(processKids) : processKids(kids);
+      }, "kidNodes");
+      const processKids = /* @__PURE__ */ __name((kids) => {
+        kids = (kids || []).filter(filter);
+        stack.push(...kids);
+      }, "processKids");
+      stack.push(tree);
+      return next();
+    }, "depth");
+    var isPromise = /* @__PURE__ */ __name((p) => p && typeof p.then === "function", "isPromise");
+    module2.exports = depth;
+  }
+});
+
+// node_modules/.pnpm/treeverse@3.0.0/node_modules/treeverse/lib/depth.js
+var require_depth = __commonJS({
+  "node_modules/.pnpm/treeverse@3.0.0/node_modules/treeverse/lib/depth.js"(exports2, module2) {
+    var depthDescent = require_depth_descent();
+    var depth = /* @__PURE__ */ __name(({
+      visit,
+      leave,
+      filter = /* @__PURE__ */ __name(() => true, "filter"),
+      seen = /* @__PURE__ */ new Map(),
+      getChildren,
+      tree
+    }) => {
+      if (!leave) {
+        return depthDescent({ visit, filter, getChildren, tree });
+      }
+      if (seen.has(tree)) {
+        return seen.get(tree);
+      }
+      seen.set(tree, null);
+      const visitNode = /* @__PURE__ */ __name(() => {
+        const res = visit ? visit(tree) : tree;
+        if (isPromise(res)) {
+          const fullResult = res.then((resThen) => {
+            seen.set(tree, resThen);
+            return kidNodes();
+          });
+          seen.set(tree, fullResult);
+          return fullResult;
+        } else {
+          seen.set(tree, res);
+          return kidNodes();
+        }
+      }, "visitNode");
+      const kidNodes = /* @__PURE__ */ __name(() => {
+        const kids = getChildren(tree, seen.get(tree));
+        return isPromise(kids) ? kids.then(processKids) : processKids(kids);
+      }, "kidNodes");
+      const processKids = /* @__PURE__ */ __name((nodes) => {
+        const kids = (nodes || []).filter(filter).map((kid) => depth({ visit, leave, filter, seen, getChildren, tree: kid }));
+        return kids.some(isPromise) ? Promise.all(kids).then(leaveNode) : leaveNode(kids);
+      }, "processKids");
+      const leaveNode = /* @__PURE__ */ __name((kids) => {
+        const res = leave(seen.get(tree), kids);
+        seen.set(tree, res);
+        return res;
+      }, "leaveNode");
+      return visitNode();
+    }, "depth");
+    var isPromise = /* @__PURE__ */ __name((p) => p && typeof p.then === "function", "isPromise");
+    module2.exports = depth;
+  }
+});
+
+// node_modules/.pnpm/treeverse@3.0.0/node_modules/treeverse/lib/index.js
+var require_lib31 = __commonJS({
+  "node_modules/.pnpm/treeverse@3.0.0/node_modules/treeverse/lib/index.js"(exports2, module2) {
+    module2.exports = {
+      breadth: require_breadth(),
+      depth: require_depth()
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+name-from-folder@4.0.0/node_modules/@npmcli/name-from-folder/lib/index.js
+var require_lib32 = __commonJS({
+  "node_modules/.pnpm/@npmcli+name-from-folder@4.0.0/node_modules/@npmcli/name-from-folder/lib/index.js"(exports2, module2) {
+    var { basename, dirname } = require("path");
+    var getName = /* @__PURE__ */ __name((parent, base) => parent.charAt(0) === "@" ? `${parent}/${base}` : base, "getName");
+    module2.exports = (dir) => dir ? getName(basename(dirname(dir)), basename(dir)) : false;
+  }
+});
+
+// node_modules/.pnpm/glob@13.0.6/node_modules/glob/dist/commonjs/index.min.js
+var require_index_min2 = __commonJS({
+  "node_modules/.pnpm/glob@13.0.6/node_modules/glob/dist/commonjs/index.min.js"(exports2) {
+    "use strict";
+    var R = /* @__PURE__ */ __name((n, t) => () => (t || n((t = { exports: {} }).exports, t), t.exports), "R");
+    var Ge = R((Y) => {
+      "use strict";
+      Object.defineProperty(Y, "__esModule", { value: true });
+      Y.range = Y.balanced = void 0;
+      var Gs = /* @__PURE__ */ __name((n, t, e) => {
+        let s = n instanceof RegExp ? Ie(n, e) : n, i = t instanceof RegExp ? Ie(t, e) : t, r = s !== null && i != null && (0, Y.range)(s, i, e);
+        return r && { start: r[0], end: r[1], pre: e.slice(0, r[0]), body: e.slice(r[0] + s.length, r[1]), post: e.slice(r[1] + i.length) };
+      }, "Gs");
+      Y.balanced = Gs;
+      var Ie = /* @__PURE__ */ __name((n, t) => {
+        let e = t.match(n);
+        return e ? e[0] : null;
+      }, "Ie"), zs = /* @__PURE__ */ __name((n, t, e) => {
+        let s, i, r, h, o, a = e.indexOf(n), l = e.indexOf(t, a + 1), f = a;
+        if (a >= 0 && l > 0) {
+          if (n === t) return [a, l];
+          for (s = [], r = e.length; f >= 0 && !o; ) {
+            if (f === a) s.push(f), a = e.indexOf(n, f + 1);
+            else if (s.length === 1) {
+              let c = s.pop();
+              c !== void 0 && (o = [c, l]);
+            } else i = s.pop(), i !== void 0 && i < r && (r = i, h = l), l = e.indexOf(t, f + 1);
+            f = a < l && a >= 0 ? a : l;
+          }
+          s.length && h !== void 0 && (o = [r, h]);
+        }
+        return o;
+      }, "zs");
+      Y.range = zs;
+    });
+    var Ke = R((it) => {
+      "use strict";
+      Object.defineProperty(it, "__esModule", { value: true });
+      it.EXPANSION_MAX = void 0;
+      it.expand = ei;
+      var ze = Ge(), Ue = "\0SLASH" + Math.random() + "\0", $e = "\0OPEN" + Math.random() + "\0", ue = "\0CLOSE" + Math.random() + "\0", qe = "\0COMMA" + Math.random() + "\0", He = "\0PERIOD" + Math.random() + "\0", Us = new RegExp(Ue, "g"), $s = new RegExp($e, "g"), qs = new RegExp(ue, "g"), Hs = new RegExp(qe, "g"), Vs = new RegExp(He, "g"), Ks = /\\\\/g, Xs = /\\{/g, Ys = /\\}/g, Js = /\\,/g, Zs = /\\./g;
+      it.EXPANSION_MAX = 1e5;
+      function ce(n) {
+        return isNaN(n) ? n.charCodeAt(0) : parseInt(n, 10);
+      }
+      __name(ce, "ce");
+      function Qs(n) {
+        return n.replace(Ks, Ue).replace(Xs, $e).replace(Ys, ue).replace(Js, qe).replace(Zs, He);
+      }
+      __name(Qs, "Qs");
+      function ti(n) {
+        return n.replace(Us, "\\").replace($s, "{").replace(qs, "}").replace(Hs, ",").replace(Vs, ".");
+      }
+      __name(ti, "ti");
+      function Ve(n) {
+        if (!n) return [""];
+        let t = [], e = (0, ze.balanced)("{", "}", n);
+        if (!e) return n.split(",");
+        let { pre: s, body: i, post: r } = e, h = s.split(",");
+        h[h.length - 1] += "{" + i + "}";
+        let o = Ve(r);
+        return r.length && (h[h.length - 1] += o.shift(), h.push.apply(h, o)), t.push.apply(t, h), t;
+      }
+      __name(Ve, "Ve");
+      function ei(n, t = {}) {
+        if (!n) return [];
+        let { max: e = it.EXPANSION_MAX } = t;
+        return n.slice(0, 2) === "{}" && (n = "\\{\\}" + n.slice(2)), ht(Qs(n), e, true).map(ti);
+      }
+      __name(ei, "ei");
+      function si(n) {
+        return "{" + n + "}";
+      }
+      __name(si, "si");
+      function ii(n) {
+        return /^-?0\d/.test(n);
+      }
+      __name(ii, "ii");
+      function ri(n, t) {
+        return n <= t;
+      }
+      __name(ri, "ri");
+      function ni(n, t) {
+        return n >= t;
+      }
+      __name(ni, "ni");
+      function ht(n, t, e) {
+        let s = [], i = (0, ze.balanced)("{", "}", n);
+        if (!i) return [n];
+        let r = i.pre, h = i.post.length ? ht(i.post, t, false) : [""];
+        if (/\$$/.test(i.pre)) for (let o = 0; o < h.length && o < t; o++) {
+          let a = r + "{" + i.body + "}" + h[o];
+          s.push(a);
+        }
+        else {
+          let o = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(i.body), a = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(i.body), l = o || a, f = i.body.indexOf(",") >= 0;
+          if (!l && !f) return i.post.match(/,(?!,).*\}/) ? (n = i.pre + "{" + i.body + ue + i.post, ht(n, t, true)) : [n];
+          let c;
+          if (l) c = i.body.split(/\.\./);
+          else if (c = Ve(i.body), c.length === 1 && c[0] !== void 0 && (c = ht(c[0], t, false).map(si), c.length === 1)) return h.map((u) => i.pre + c[0] + u);
+          let d;
+          if (l && c[0] !== void 0 && c[1] !== void 0) {
+            let u = ce(c[0]), m = ce(c[1]), p = Math.max(c[0].length, c[1].length), b = c.length === 3 && c[2] !== void 0 ? Math.abs(ce(c[2])) : 1, w = ri;
+            m < u && (b *= -1, w = ni);
+            let E = c.some(ii);
+            d = [];
+            for (let y = u; w(y, m); y += b) {
+              let S;
+              if (a) S = String.fromCharCode(y), S === "\\" && (S = "");
+              else if (S = String(y), E) {
+                let B = p - S.length;
+                if (B > 0) {
+                  let U = new Array(B + 1).join("0");
+                  y < 0 ? S = "-" + U + S.slice(1) : S = U + S;
+                }
+              }
+              d.push(S);
+            }
+          } else {
+            d = [];
+            for (let u = 0; u < c.length; u++) d.push.apply(d, ht(c[u], t, false));
+          }
+          for (let u = 0; u < d.length; u++) for (let m = 0; m < h.length && s.length < t; m++) {
+            let p = r + d[u] + h[m];
+            (!e || l || p) && s.push(p);
+          }
+        }
+        return s;
+      }
+      __name(ht, "ht");
+    });
+    var Xe = R((Ct) => {
+      "use strict";
+      Object.defineProperty(Ct, "__esModule", { value: true });
+      Ct.assertValidPattern = void 0;
+      var hi = 1024 * 64, oi = /* @__PURE__ */ __name((n) => {
+        if (typeof n != "string") throw new TypeError("invalid pattern");
+        if (n.length > hi) throw new TypeError("pattern is too long");
+      }, "oi");
+      Ct.assertValidPattern = oi;
+    });
+    var Je = R((Rt) => {
+      "use strict";
+      Object.defineProperty(Rt, "__esModule", { value: true });
+      Rt.parseClass = void 0;
+      var ai = { "[:alnum:]": ["\\p{L}\\p{Nl}\\p{Nd}", true], "[:alpha:]": ["\\p{L}\\p{Nl}", true], "[:ascii:]": ["\\x00-\\x7f", false], "[:blank:]": ["\\p{Zs}\\t", true], "[:cntrl:]": ["\\p{Cc}", true], "[:digit:]": ["\\p{Nd}", true], "[:graph:]": ["\\p{Z}\\p{C}", true, true], "[:lower:]": ["\\p{Ll}", true], "[:print:]": ["\\p{C}", true], "[:punct:]": ["\\p{P}", true], "[:space:]": ["\\p{Z}\\t\\r\\n\\v\\f", true], "[:upper:]": ["\\p{Lu}", true], "[:word:]": ["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}", true], "[:xdigit:]": ["A-Fa-f0-9", false] }, ot = /* @__PURE__ */ __name((n) => n.replace(/[[\]\\-]/g, "\\$&"), "ot"), li = /* @__PURE__ */ __name((n) => n.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), "li"), Ye = /* @__PURE__ */ __name((n) => n.join(""), "Ye"), ci = /* @__PURE__ */ __name((n, t) => {
+        let e = t;
+        if (n.charAt(e) !== "[") throw new Error("not in a brace expression");
+        let s = [], i = [], r = e + 1, h = false, o = false, a = false, l = false, f = e, c = "";
+        t: for (; r < n.length; ) {
+          let p = n.charAt(r);
+          if ((p === "!" || p === "^") && r === e + 1) {
+            l = true, r++;
+            continue;
+          }
+          if (p === "]" && h && !a) {
+            f = r + 1;
+            break;
+          }
+          if (h = true, p === "\\" && !a) {
+            a = true, r++;
+            continue;
+          }
+          if (p === "[" && !a) {
+            for (let [b, [w, v, E]] of Object.entries(ai)) if (n.startsWith(b, r)) {
+              if (c) return ["$.", false, n.length - e, true];
+              r += b.length, E ? i.push(w) : s.push(w), o = o || v;
+              continue t;
+            }
+          }
+          if (a = false, c) {
+            p > c ? s.push(ot(c) + "-" + ot(p)) : p === c && s.push(ot(p)), c = "", r++;
+            continue;
+          }
+          if (n.startsWith("-]", r + 1)) {
+            s.push(ot(p + "-")), r += 2;
+            continue;
+          }
+          if (n.startsWith("-", r + 1)) {
+            c = p, r += 2;
+            continue;
+          }
+          s.push(ot(p)), r++;
+        }
+        if (f < r) return ["", false, 0, false];
+        if (!s.length && !i.length) return ["$.", false, n.length - e, true];
+        if (i.length === 0 && s.length === 1 && /^\\?.$/.test(s[0]) && !l) {
+          let p = s[0].length === 2 ? s[0].slice(-1) : s[0];
+          return [li(p), false, f - e, false];
+        }
+        let d = "[" + (l ? "^" : "") + Ye(s) + "]", u = "[" + (l ? "" : "^") + Ye(i) + "]";
+        return [s.length && i.length ? "(" + d + "|" + u + ")" : s.length ? d : u, o, f - e, true];
+      }, "ci");
+      Rt.parseClass = ci;
+    });
+    var kt = R((At) => {
+      "use strict";
+      Object.defineProperty(At, "__esModule", { value: true });
+      At.unescape = void 0;
+      var ui = /* @__PURE__ */ __name((n, { windowsPathsNoEscape: t = false, magicalBraces: e = true } = {}) => e ? t ? n.replace(/\[([^\/\\])\]/g, "$1") : n.replace(/((?!\\).|^)\[([^\/\\])\]/g, "$1$2").replace(/\\([^\/])/g, "$1") : t ? n.replace(/\[([^\/\\{}])\]/g, "$1") : n.replace(/((?!\\).|^)\[([^\/\\{}])\]/g, "$1$2").replace(/\\([^\/{}])/g, "$1"), "ui");
+      At.unescape = ui;
+    });
+    var pe = R((Dt) => {
+      "use strict";
+      Object.defineProperty(Dt, "__esModule", { value: true });
+      Dt.AST = void 0;
+      var fi = Je(), Mt = kt(), di = /* @__PURE__ */ new Set(["!", "?", "+", "*", "@"]), Ze = /* @__PURE__ */ __name((n) => di.has(n), "Ze"), pi = "(?!(?:^|/)\\.\\.?(?:$|/))", Pt = "(?!\\.)", mi = /* @__PURE__ */ new Set(["[", "."]), gi = /* @__PURE__ */ new Set(["..", "."]), wi = new Set("().*{}+?[]^$\\!"), bi = /* @__PURE__ */ __name((n) => n.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), "bi"), de = "[^/]", Qe = de + "*?", ts = de + "+?", fe = class n {
+        static {
+          __name(this, "n");
+        }
+        type;
+        #t;
+        #s;
+        #n = false;
+        #r = [];
+        #h;
+        #S;
+        #w;
+        #c = false;
+        #o;
+        #f;
+        #u = false;
+        constructor(t, e, s = {}) {
+          this.type = t, t && (this.#s = true), this.#h = e, this.#t = this.#h ? this.#h.#t : this, this.#o = this.#t === this ? s : this.#t.#o, this.#w = this.#t === this ? [] : this.#t.#w, t === "!" && !this.#t.#c && this.#w.push(this), this.#S = this.#h ? this.#h.#r.length : 0;
+        }
+        get hasMagic() {
+          if (this.#s !== void 0) return this.#s;
+          for (let t of this.#r) if (typeof t != "string" && (t.type || t.hasMagic)) return this.#s = true;
+          return this.#s;
+        }
+        toString() {
+          return this.#f !== void 0 ? this.#f : this.type ? this.#f = this.type + "(" + this.#r.map((t) => String(t)).join("|") + ")" : this.#f = this.#r.map((t) => String(t)).join("");
+        }
+        #a() {
+          if (this !== this.#t) throw new Error("should only call on root");
+          if (this.#c) return this;
+          this.toString(), this.#c = true;
+          let t;
+          for (; t = this.#w.pop(); ) {
+            if (t.type !== "!") continue;
+            let e = t, s = e.#h;
+            for (; s; ) {
+              for (let i = e.#S + 1; !s.type && i < s.#r.length; i++) for (let r of t.#r) {
+                if (typeof r == "string") throw new Error("string part in extglob AST??");
+                r.copyIn(s.#r[i]);
+              }
+              e = s, s = e.#h;
+            }
+          }
+          return this;
+        }
+        push(...t) {
+          for (let e of t) if (e !== "") {
+            if (typeof e != "string" && !(e instanceof n && e.#h === this)) throw new Error("invalid part: " + e);
+            this.#r.push(e);
+          }
+        }
+        toJSON() {
+          let t = this.type === null ? this.#r.slice().map((e) => typeof e == "string" ? e : e.toJSON()) : [this.type, ...this.#r.map((e) => e.toJSON())];
+          return this.isStart() && !this.type && t.unshift([]), this.isEnd() && (this === this.#t || this.#t.#c && this.#h?.type === "!") && t.push({}), t;
+        }
+        isStart() {
+          if (this.#t === this) return true;
+          if (!this.#h?.isStart()) return false;
+          if (this.#S === 0) return true;
+          let t = this.#h;
+          for (let e = 0; e < this.#S; e++) {
+            let s = t.#r[e];
+            if (!(s instanceof n && s.type === "!")) return false;
+          }
+          return true;
+        }
+        isEnd() {
+          if (this.#t === this || this.#h?.type === "!") return true;
+          if (!this.#h?.isEnd()) return false;
+          if (!this.type) return this.#h?.isEnd();
+          let t = this.#h ? this.#h.#r.length : 0;
+          return this.#S === t - 1;
+        }
+        copyIn(t) {
+          typeof t == "string" ? this.push(t) : this.push(t.clone(this));
+        }
+        clone(t) {
+          let e = new n(this.type, t);
+          for (let s of this.#r) e.copyIn(s);
+          return e;
+        }
+        static #i(t, e, s, i) {
+          let r = false, h = false, o = -1, a = false;
+          if (e.type === null) {
+            let u = s, m = "";
+            for (; u < t.length; ) {
+              let p = t.charAt(u++);
+              if (r || p === "\\") {
+                r = !r, m += p;
+                continue;
+              }
+              if (h) {
+                u === o + 1 ? (p === "^" || p === "!") && (a = true) : p === "]" && !(u === o + 2 && a) && (h = false), m += p;
+                continue;
+              } else if (p === "[") {
+                h = true, o = u, a = false, m += p;
+                continue;
+              }
+              if (!i.noext && Ze(p) && t.charAt(u) === "(") {
+                e.push(m), m = "";
+                let b = new n(p, e);
+                u = n.#i(t, b, u, i), e.push(b);
+                continue;
+              }
+              m += p;
+            }
+            return e.push(m), u;
+          }
+          let l = s + 1, f = new n(null, e), c = [], d = "";
+          for (; l < t.length; ) {
+            let u = t.charAt(l++);
+            if (r || u === "\\") {
+              r = !r, d += u;
+              continue;
+            }
+            if (h) {
+              l === o + 1 ? (u === "^" || u === "!") && (a = true) : u === "]" && !(l === o + 2 && a) && (h = false), d += u;
+              continue;
+            } else if (u === "[") {
+              h = true, o = l, a = false, d += u;
+              continue;
+            }
+            if (Ze(u) && t.charAt(l) === "(") {
+              f.push(d), d = "";
+              let m = new n(u, f);
+              f.push(m), l = n.#i(t, m, l, i);
+              continue;
+            }
+            if (u === "|") {
+              f.push(d), d = "", c.push(f), f = new n(null, e);
+              continue;
+            }
+            if (u === ")") return d === "" && e.#r.length === 0 && (e.#u = true), f.push(d), d = "", e.push(...c, f), l;
+            d += u;
+          }
+          return e.type = null, e.#s = void 0, e.#r = [t.substring(s - 1)], l;
+        }
+        static fromGlob(t, e = {}) {
+          let s = new n(null, void 0, e);
+          return n.#i(t, s, 0, e), s;
+        }
+        toMMPattern() {
+          if (this !== this.#t) return this.#t.toMMPattern();
+          let t = this.toString(), [e, s, i, r] = this.toRegExpSource();
+          if (!(i || this.#s || this.#o.nocase && !this.#o.nocaseMagicOnly && t.toUpperCase() !== t.toLowerCase())) return s;
+          let o = (this.#o.nocase ? "i" : "") + (r ? "u" : "");
+          return Object.assign(new RegExp(`^${e}$`, o), { _src: e, _glob: t });
+        }
+        get options() {
+          return this.#o;
+        }
+        toRegExpSource(t) {
+          let e = t ?? !!this.#o.dot;
+          if (this.#t === this && this.#a(), !this.type) {
+            let a = this.isStart() && this.isEnd() && !this.#r.some((u) => typeof u != "string"), l = this.#r.map((u) => {
+              let [m, p, b, w] = typeof u == "string" ? n.#v(u, this.#s, a) : u.toRegExpSource(t);
+              return this.#s = this.#s || b, this.#n = this.#n || w, m;
+            }).join(""), f = "";
+            if (this.isStart() && typeof this.#r[0] == "string" && !(this.#r.length === 1 && gi.has(this.#r[0]))) {
+              let m = mi, p = e && m.has(l.charAt(0)) || l.startsWith("\\.") && m.has(l.charAt(2)) || l.startsWith("\\.\\.") && m.has(l.charAt(4)), b = !e && !t && m.has(l.charAt(0));
+              f = p ? pi : b ? Pt : "";
+            }
+            let c = "";
+            return this.isEnd() && this.#t.#c && this.#h?.type === "!" && (c = "(?:$|\\/)"), [f + l + c, (0, Mt.unescape)(l), this.#s = !!this.#s, this.#n];
+          }
+          let s = this.type === "*" || this.type === "+", i = this.type === "!" ? "(?:(?!(?:" : "(?:", r = this.#d(e);
+          if (this.isStart() && this.isEnd() && !r && this.type !== "!") {
+            let a = this.toString();
+            return this.#r = [a], this.type = null, this.#s = void 0, [a, (0, Mt.unescape)(this.toString()), false, false];
+          }
+          let h = !s || t || e || !Pt ? "" : this.#d(true);
+          h === r && (h = ""), h && (r = `(?:${r})(?:${h})*?`);
+          let o = "";
+          if (this.type === "!" && this.#u) o = (this.isStart() && !e ? Pt : "") + ts;
+          else {
+            let a = this.type === "!" ? "))" + (this.isStart() && !e && !t ? Pt : "") + Qe + ")" : this.type === "@" ? ")" : this.type === "?" ? ")?" : this.type === "+" && h ? ")" : this.type === "*" && h ? ")?" : `)${this.type}`;
+            o = i + r + a;
+          }
+          return [o, (0, Mt.unescape)(r), this.#s = !!this.#s, this.#n];
+        }
+        #d(t) {
+          return this.#r.map((e) => {
+            if (typeof e == "string") throw new Error("string type in extglob ast??");
+            let [s, i, r, h] = e.toRegExpSource(t);
+            return this.#n = this.#n || h, s;
+          }).filter((e) => !(this.isStart() && this.isEnd()) || !!e).join("|");
+        }
+        static #v(t, e, s = false) {
+          let i = false, r = "", h = false, o = false;
+          for (let a = 0; a < t.length; a++) {
+            let l = t.charAt(a);
+            if (i) {
+              i = false, r += (wi.has(l) ? "\\" : "") + l;
+              continue;
+            }
+            if (l === "*") {
+              if (o) continue;
+              o = true, r += s && /^[*]+$/.test(t) ? ts : Qe, e = true;
+              continue;
+            } else o = false;
+            if (l === "\\") {
+              a === t.length - 1 ? r += "\\\\" : i = true;
+              continue;
+            }
+            if (l === "[") {
+              let [f, c, d, u] = (0, fi.parseClass)(t, a);
+              if (d) {
+                r += f, h = h || c, a += d - 1, e = e || u;
+                continue;
+              }
+            }
+            if (l === "?") {
+              r += de, e = true;
+              continue;
+            }
+            r += bi(l);
+          }
+          return [r, (0, Mt.unescape)(t), !!e, h];
+        }
+      };
+      Dt.AST = fe;
+    });
+    var me = R((Ft) => {
+      "use strict";
+      Object.defineProperty(Ft, "__esModule", { value: true });
+      Ft.escape = void 0;
+      var yi = /* @__PURE__ */ __name((n, { windowsPathsNoEscape: t = false, magicalBraces: e = false } = {}) => e ? t ? n.replace(/[?*()[\]{}]/g, "[$&]") : n.replace(/[?*()[\]\\{}]/g, "\\$&") : t ? n.replace(/[?*()[\]]/g, "[$&]") : n.replace(/[?*()[\]\\]/g, "\\$&"), "yi");
+      Ft.escape = yi;
+    });
+    var H = R((g) => {
+      "use strict";
+      Object.defineProperty(g, "__esModule", { value: true });
+      g.unescape = g.escape = g.AST = g.Minimatch = g.match = g.makeRe = g.braceExpand = g.defaults = g.filter = g.GLOBSTAR = g.sep = g.minimatch = void 0;
+      var Si = Ke(), jt = Xe(), is = pe(), vi = me(), Ei = kt(), _i = /* @__PURE__ */ __name((n, t, e = {}) => ((0, jt.assertValidPattern)(t), !e.nocomment && t.charAt(0) === "#" ? false : new J(t, e).match(n)), "_i");
+      g.minimatch = _i;
+      var Oi = /^\*+([^+@!?\*\[\(]*)$/, xi = /* @__PURE__ */ __name((n) => (t) => !t.startsWith(".") && t.endsWith(n), "xi"), Ti = /* @__PURE__ */ __name((n) => (t) => t.endsWith(n), "Ti"), Ci = /* @__PURE__ */ __name((n) => (n = n.toLowerCase(), (t) => !t.startsWith(".") && t.toLowerCase().endsWith(n)), "Ci"), Ri = /* @__PURE__ */ __name((n) => (n = n.toLowerCase(), (t) => t.toLowerCase().endsWith(n)), "Ri"), Ai = /^\*+\.\*+$/, ki = /* @__PURE__ */ __name((n) => !n.startsWith(".") && n.includes("."), "ki"), Mi = /* @__PURE__ */ __name((n) => n !== "." && n !== ".." && n.includes("."), "Mi"), Pi = /^\.\*+$/, Di = /* @__PURE__ */ __name((n) => n !== "." && n !== ".." && n.startsWith("."), "Di"), Fi = /^\*+$/, ji = /* @__PURE__ */ __name((n) => n.length !== 0 && !n.startsWith("."), "ji"), Ni = /* @__PURE__ */ __name((n) => n.length !== 0 && n !== "." && n !== "..", "Ni"), Li = /^\?+([^+@!?\*\[\(]*)?$/, Wi = /* @__PURE__ */ __name(([n, t = ""]) => {
+        let e = rs([n]);
+        return t ? (t = t.toLowerCase(), (s) => e(s) && s.toLowerCase().endsWith(t)) : e;
+      }, "Wi"), Bi = /* @__PURE__ */ __name(([n, t = ""]) => {
+        let e = ns([n]);
+        return t ? (t = t.toLowerCase(), (s) => e(s) && s.toLowerCase().endsWith(t)) : e;
+      }, "Bi"), Ii = /* @__PURE__ */ __name(([n, t = ""]) => {
+        let e = ns([n]);
+        return t ? (s) => e(s) && s.endsWith(t) : e;
+      }, "Ii"), Gi = /* @__PURE__ */ __name(([n, t = ""]) => {
+        let e = rs([n]);
+        return t ? (s) => e(s) && s.endsWith(t) : e;
+      }, "Gi"), rs = /* @__PURE__ */ __name(([n]) => {
+        let t = n.length;
+        return (e) => e.length === t && !e.startsWith(".");
+      }, "rs"), ns = /* @__PURE__ */ __name(([n]) => {
+        let t = n.length;
+        return (e) => e.length === t && e !== "." && e !== "..";
+      }, "ns"), hs = typeof process == "object" && process ? typeof process.env == "object" && process.env && process.env.__MINIMATCH_TESTING_PLATFORM__ || process.platform : "posix", es = { win32: { sep: "\\" }, posix: { sep: "/" } };
+      g.sep = hs === "win32" ? es.win32.sep : es.posix.sep;
+      g.minimatch.sep = g.sep;
+      g.GLOBSTAR = Symbol("globstar **");
+      g.minimatch.GLOBSTAR = g.GLOBSTAR;
+      var zi = "[^/]", Ui = zi + "*?", $i = "(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?", qi = "(?:(?!(?:\\/|^)\\.).)*?", Hi = /* @__PURE__ */ __name((n, t = {}) => (e) => (0, g.minimatch)(e, n, t), "Hi");
+      g.filter = Hi;
+      g.minimatch.filter = g.filter;
+      var F = /* @__PURE__ */ __name((n, t = {}) => Object.assign({}, n, t), "F"), Vi = /* @__PURE__ */ __name((n) => {
+        if (!n || typeof n != "object" || !Object.keys(n).length) return g.minimatch;
+        let t = g.minimatch;
+        return Object.assign((s, i, r = {}) => t(s, i, F(n, r)), { Minimatch: class extends t.Minimatch {
+          static {
+            __name(this, "Minimatch");
+          }
+          constructor(i, r = {}) {
+            super(i, F(n, r));
+          }
+          static defaults(i) {
+            return t.defaults(F(n, i)).Minimatch;
+          }
+        }, AST: class extends t.AST {
+          static {
+            __name(this, "AST");
+          }
+          constructor(i, r, h = {}) {
+            super(i, r, F(n, h));
+          }
+          static fromGlob(i, r = {}) {
+            return t.AST.fromGlob(i, F(n, r));
+          }
+        }, unescape: /* @__PURE__ */ __name((s, i = {}) => t.unescape(s, F(n, i)), "unescape"), escape: /* @__PURE__ */ __name((s, i = {}) => t.escape(s, F(n, i)), "escape"), filter: /* @__PURE__ */ __name((s, i = {}) => t.filter(s, F(n, i)), "filter"), defaults: /* @__PURE__ */ __name((s) => t.defaults(F(n, s)), "defaults"), makeRe: /* @__PURE__ */ __name((s, i = {}) => t.makeRe(s, F(n, i)), "makeRe"), braceExpand: /* @__PURE__ */ __name((s, i = {}) => t.braceExpand(s, F(n, i)), "braceExpand"), match: /* @__PURE__ */ __name((s, i, r = {}) => t.match(s, i, F(n, r)), "match"), sep: t.sep, GLOBSTAR: g.GLOBSTAR });
+      }, "Vi");
+      g.defaults = Vi;
+      g.minimatch.defaults = g.defaults;
+      var Ki = /* @__PURE__ */ __name((n, t = {}) => ((0, jt.assertValidPattern)(n), t.nobrace || !/\{(?:(?!\{).)*\}/.test(n) ? [n] : (0, Si.expand)(n, { max: t.braceExpandMax })), "Ki");
+      g.braceExpand = Ki;
+      g.minimatch.braceExpand = g.braceExpand;
+      var Xi = /* @__PURE__ */ __name((n, t = {}) => new J(n, t).makeRe(), "Xi");
+      g.makeRe = Xi;
+      g.minimatch.makeRe = g.makeRe;
+      var Yi = /* @__PURE__ */ __name((n, t, e = {}) => {
+        let s = new J(t, e);
+        return n = n.filter((i) => s.match(i)), s.options.nonull && !n.length && n.push(t), n;
+      }, "Yi");
+      g.match = Yi;
+      g.minimatch.match = g.match;
+      var ss = /[?*]|[+@!]\(.*?\)|\[|\]/, Ji = /* @__PURE__ */ __name((n) => n.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), "Ji"), J = class {
+        static {
+          __name(this, "J");
+        }
+        options;
+        set;
+        pattern;
+        windowsPathsNoEscape;
+        nonegate;
+        negate;
+        comment;
+        empty;
+        preserveMultipleSlashes;
+        partial;
+        globSet;
+        globParts;
+        nocase;
+        isWindows;
+        platform;
+        windowsNoMagicRoot;
+        regexp;
+        constructor(t, e = {}) {
+          (0, jt.assertValidPattern)(t), e = e || {}, this.options = e, this.pattern = t, this.platform = e.platform || hs, this.isWindows = this.platform === "win32";
+          let s = "allowWindowsEscape";
+          this.windowsPathsNoEscape = !!e.windowsPathsNoEscape || e[s] === false, this.windowsPathsNoEscape && (this.pattern = this.pattern.replace(/\\/g, "/")), this.preserveMultipleSlashes = !!e.preserveMultipleSlashes, this.regexp = null, this.negate = false, this.nonegate = !!e.nonegate, this.comment = false, this.empty = false, this.partial = !!e.partial, this.nocase = !!this.options.nocase, this.windowsNoMagicRoot = e.windowsNoMagicRoot !== void 0 ? e.windowsNoMagicRoot : !!(this.isWindows && this.nocase), this.globSet = [], this.globParts = [], this.set = [], this.make();
+        }
+        hasMagic() {
+          if (this.options.magicalBraces && this.set.length > 1) return true;
+          for (let t of this.set) for (let e of t) if (typeof e != "string") return true;
+          return false;
+        }
+        debug(...t) {
+        }
+        make() {
+          let t = this.pattern, e = this.options;
+          if (!e.nocomment && t.charAt(0) === "#") {
+            this.comment = true;
+            return;
+          }
+          if (!t) {
+            this.empty = true;
+            return;
+          }
+          this.parseNegate(), this.globSet = [...new Set(this.braceExpand())], e.debug && (this.debug = (...r) => console.error(...r)), this.debug(this.pattern, this.globSet);
+          let s = this.globSet.map((r) => this.slashSplit(r));
+          this.globParts = this.preprocess(s), this.debug(this.pattern, this.globParts);
+          let i = this.globParts.map((r, h, o) => {
+            if (this.isWindows && this.windowsNoMagicRoot) {
+              let a = r[0] === "" && r[1] === "" && (r[2] === "?" || !ss.test(r[2])) && !ss.test(r[3]), l = /^[a-z]:/i.test(r[0]);
+              if (a) return [...r.slice(0, 4), ...r.slice(4).map((f) => this.parse(f))];
+              if (l) return [r[0], ...r.slice(1).map((f) => this.parse(f))];
+            }
+            return r.map((a) => this.parse(a));
+          });
+          if (this.debug(this.pattern, i), this.set = i.filter((r) => r.indexOf(false) === -1), this.isWindows) for (let r = 0; r < this.set.length; r++) {
+            let h = this.set[r];
+            h[0] === "" && h[1] === "" && this.globParts[r][2] === "?" && typeof h[3] == "string" && /^[a-z]:$/i.test(h[3]) && (h[2] = "?");
+          }
+          this.debug(this.pattern, this.set);
+        }
+        preprocess(t) {
+          if (this.options.noglobstar) for (let s = 0; s < t.length; s++) for (let i = 0; i < t[s].length; i++) t[s][i] === "**" && (t[s][i] = "*");
+          let { optimizationLevel: e = 1 } = this.options;
+          return e >= 2 ? (t = this.firstPhasePreProcess(t), t = this.secondPhasePreProcess(t)) : e >= 1 ? t = this.levelOneOptimize(t) : t = this.adjascentGlobstarOptimize(t), t;
+        }
+        adjascentGlobstarOptimize(t) {
+          return t.map((e) => {
+            let s = -1;
+            for (; (s = e.indexOf("**", s + 1)) !== -1; ) {
+              let i = s;
+              for (; e[i + 1] === "**"; ) i++;
+              i !== s && e.splice(s, i - s);
+            }
+            return e;
+          });
+        }
+        levelOneOptimize(t) {
+          return t.map((e) => (e = e.reduce((s, i) => {
+            let r = s[s.length - 1];
+            return i === "**" && r === "**" ? s : i === ".." && r && r !== ".." && r !== "." && r !== "**" ? (s.pop(), s) : (s.push(i), s);
+          }, []), e.length === 0 ? [""] : e));
+        }
+        levelTwoFileOptimize(t) {
+          Array.isArray(t) || (t = this.slashSplit(t));
+          let e = false;
+          do {
+            if (e = false, !this.preserveMultipleSlashes) {
+              for (let i = 1; i < t.length - 1; i++) {
+                let r = t[i];
+                i === 1 && r === "" && t[0] === "" || (r === "." || r === "") && (e = true, t.splice(i, 1), i--);
+              }
+              t[0] === "." && t.length === 2 && (t[1] === "." || t[1] === "") && (e = true, t.pop());
+            }
+            let s = 0;
+            for (; (s = t.indexOf("..", s + 1)) !== -1; ) {
+              let i = t[s - 1];
+              i && i !== "." && i !== ".." && i !== "**" && (e = true, t.splice(s - 1, 2), s -= 2);
+            }
+          } while (e);
+          return t.length === 0 ? [""] : t;
+        }
+        firstPhasePreProcess(t) {
+          let e = false;
+          do {
+            e = false;
+            for (let s of t) {
+              let i = -1;
+              for (; (i = s.indexOf("**", i + 1)) !== -1; ) {
+                let h = i;
+                for (; s[h + 1] === "**"; ) h++;
+                h > i && s.splice(i + 1, h - i);
+                let o = s[i + 1], a = s[i + 2], l = s[i + 3];
+                if (o !== ".." || !a || a === "." || a === ".." || !l || l === "." || l === "..") continue;
+                e = true, s.splice(i, 1);
+                let f = s.slice(0);
+                f[i] = "**", t.push(f), i--;
+              }
+              if (!this.preserveMultipleSlashes) {
+                for (let h = 1; h < s.length - 1; h++) {
+                  let o = s[h];
+                  h === 1 && o === "" && s[0] === "" || (o === "." || o === "") && (e = true, s.splice(h, 1), h--);
+                }
+                s[0] === "." && s.length === 2 && (s[1] === "." || s[1] === "") && (e = true, s.pop());
+              }
+              let r = 0;
+              for (; (r = s.indexOf("..", r + 1)) !== -1; ) {
+                let h = s[r - 1];
+                if (h && h !== "." && h !== ".." && h !== "**") {
+                  e = true;
+                  let a = r === 1 && s[r + 1] === "**" ? ["."] : [];
+                  s.splice(r - 1, 2, ...a), s.length === 0 && s.push(""), r -= 2;
+                }
+              }
+            }
+          } while (e);
+          return t;
+        }
+        secondPhasePreProcess(t) {
+          for (let e = 0; e < t.length - 1; e++) for (let s = e + 1; s < t.length; s++) {
+            let i = this.partsMatch(t[e], t[s], !this.preserveMultipleSlashes);
+            if (i) {
+              t[e] = [], t[s] = i;
+              break;
+            }
+          }
+          return t.filter((e) => e.length);
+        }
+        partsMatch(t, e, s = false) {
+          let i = 0, r = 0, h = [], o = "";
+          for (; i < t.length && r < e.length; ) if (t[i] === e[r]) h.push(o === "b" ? e[r] : t[i]), i++, r++;
+          else if (s && t[i] === "**" && e[r] === t[i + 1]) h.push(t[i]), i++;
+          else if (s && e[r] === "**" && t[i] === e[r + 1]) h.push(e[r]), r++;
+          else if (t[i] === "*" && e[r] && (this.options.dot || !e[r].startsWith(".")) && e[r] !== "**") {
+            if (o === "b") return false;
+            o = "a", h.push(t[i]), i++, r++;
+          } else if (e[r] === "*" && t[i] && (this.options.dot || !t[i].startsWith(".")) && t[i] !== "**") {
+            if (o === "a") return false;
+            o = "b", h.push(e[r]), i++, r++;
+          } else return false;
+          return t.length === e.length && h;
+        }
+        parseNegate() {
+          if (this.nonegate) return;
+          let t = this.pattern, e = false, s = 0;
+          for (let i = 0; i < t.length && t.charAt(i) === "!"; i++) e = !e, s++;
+          s && (this.pattern = t.slice(s)), this.negate = e;
+        }
+        matchOne(t, e, s = false) {
+          let i = this.options;
+          if (this.isWindows) {
+            let p = typeof t[0] == "string" && /^[a-z]:$/i.test(t[0]), b = !p && t[0] === "" && t[1] === "" && t[2] === "?" && /^[a-z]:$/i.test(t[3]), w = typeof e[0] == "string" && /^[a-z]:$/i.test(e[0]), v = !w && e[0] === "" && e[1] === "" && e[2] === "?" && typeof e[3] == "string" && /^[a-z]:$/i.test(e[3]), E = b ? 3 : p ? 0 : void 0, y = v ? 3 : w ? 0 : void 0;
+            if (typeof E == "number" && typeof y == "number") {
+              let [S, B] = [t[E], e[y]];
+              S.toLowerCase() === B.toLowerCase() && (e[y] = S, y > E ? e = e.slice(y) : E > y && (t = t.slice(E)));
+            }
+          }
+          let { optimizationLevel: r = 1 } = this.options;
+          r >= 2 && (t = this.levelTwoFileOptimize(t)), this.debug("matchOne", this, { file: t, pattern: e }), this.debug("matchOne", t.length, e.length);
+          for (var h = 0, o = 0, a = t.length, l = e.length; h < a && o < l; h++, o++) {
+            this.debug("matchOne loop");
+            var f = e[o], c = t[h];
+            if (this.debug(e, f, c), f === false) return false;
+            if (f === g.GLOBSTAR) {
+              this.debug("GLOBSTAR", [e, f, c]);
+              var d = h, u = o + 1;
+              if (u === l) {
+                for (this.debug("** at the end"); h < a; h++) if (t[h] === "." || t[h] === ".." || !i.dot && t[h].charAt(0) === ".") return false;
+                return true;
+              }
+              for (; d < a; ) {
+                var m = t[d];
+                if (this.debug(`
+globstar while`, t, d, e, u, m), this.matchOne(t.slice(d), e.slice(u), s)) return this.debug("globstar found match!", d, a, m), true;
+                if (m === "." || m === ".." || !i.dot && m.charAt(0) === ".") {
+                  this.debug("dot detected!", t, d, e, u);
+                  break;
+                }
+                this.debug("globstar swallow a segment, and continue"), d++;
+              }
+              return !!(s && (this.debug(`
+>>> no match, partial?`, t, d, e, u), d === a));
+            }
+            let p;
+            if (typeof f == "string" ? (p = c === f, this.debug("string match", f, c, p)) : (p = f.test(c), this.debug("pattern match", f, c, p)), !p) return false;
+          }
+          if (h === a && o === l) return true;
+          if (h === a) return s;
+          if (o === l) return h === a - 1 && t[h] === "";
+          throw new Error("wtf?");
+        }
+        braceExpand() {
+          return (0, g.braceExpand)(this.pattern, this.options);
+        }
+        parse(t) {
+          (0, jt.assertValidPattern)(t);
+          let e = this.options;
+          if (t === "**") return g.GLOBSTAR;
+          if (t === "") return "";
+          let s, i = null;
+          (s = t.match(Fi)) ? i = e.dot ? Ni : ji : (s = t.match(Oi)) ? i = (e.nocase ? e.dot ? Ri : Ci : e.dot ? Ti : xi)(s[1]) : (s = t.match(Li)) ? i = (e.nocase ? e.dot ? Bi : Wi : e.dot ? Ii : Gi)(s) : (s = t.match(Ai)) ? i = e.dot ? Mi : ki : (s = t.match(Pi)) && (i = Di);
+          let r = is.AST.fromGlob(t, this.options).toMMPattern();
+          return i && typeof r == "object" && Reflect.defineProperty(r, "test", { value: i }), r;
+        }
+        makeRe() {
+          if (this.regexp || this.regexp === false) return this.regexp;
+          let t = this.set;
+          if (!t.length) return this.regexp = false, this.regexp;
+          let e = this.options, s = e.noglobstar ? Ui : e.dot ? $i : qi, i = new Set(e.nocase ? ["i"] : []), r = t.map((a) => {
+            let l = a.map((c) => {
+              if (c instanceof RegExp) for (let d of c.flags.split("")) i.add(d);
+              return typeof c == "string" ? Ji(c) : c === g.GLOBSTAR ? g.GLOBSTAR : c._src;
+            });
+            l.forEach((c, d) => {
+              let u = l[d + 1], m = l[d - 1];
+              c !== g.GLOBSTAR || m === g.GLOBSTAR || (m === void 0 ? u !== void 0 && u !== g.GLOBSTAR ? l[d + 1] = "(?:\\/|" + s + "\\/)?" + u : l[d] = s : u === void 0 ? l[d - 1] = m + "(?:\\/|\\/" + s + ")?" : u !== g.GLOBSTAR && (l[d - 1] = m + "(?:\\/|\\/" + s + "\\/)" + u, l[d + 1] = g.GLOBSTAR));
+            });
+            let f = l.filter((c) => c !== g.GLOBSTAR);
+            if (this.partial && f.length >= 1) {
+              let c = [];
+              for (let d = 1; d <= f.length; d++) c.push(f.slice(0, d).join("/"));
+              return "(?:" + c.join("|") + ")";
+            }
+            return f.join("/");
+          }).join("|"), [h, o] = t.length > 1 ? ["(?:", ")"] : ["", ""];
+          r = "^" + h + r + o + "$", this.partial && (r = "^(?:\\/|" + h + r.slice(1, -1) + o + ")$"), this.negate && (r = "^(?!" + r + ").+$");
+          try {
+            this.regexp = new RegExp(r, [...i].join(""));
+          } catch {
+            this.regexp = false;
+          }
+          return this.regexp;
+        }
+        slashSplit(t) {
+          return this.preserveMultipleSlashes ? t.split("/") : this.isWindows && /^\/\/[^\/]+/.test(t) ? ["", ...t.split(/\/+/)] : t.split(/\/+/);
+        }
+        match(t, e = this.partial) {
+          if (this.debug("match", t, this.pattern), this.comment) return false;
+          if (this.empty) return t === "";
+          if (t === "/" && e) return true;
+          let s = this.options;
+          this.isWindows && (t = t.split("\\").join("/"));
+          let i = this.slashSplit(t);
+          this.debug(this.pattern, "split", i);
+          let r = this.set;
+          this.debug(this.pattern, "set", r);
+          let h = i[i.length - 1];
+          if (!h) for (let o = i.length - 2; !h && o >= 0; o--) h = i[o];
+          for (let o = 0; o < r.length; o++) {
+            let a = r[o], l = i;
+            if (s.matchBase && a.length === 1 && (l = [h]), this.matchOne(l, a, e)) return s.flipNegate ? true : !this.negate;
+          }
+          return s.flipNegate ? false : this.negate;
+        }
+        static defaults(t) {
+          return g.minimatch.defaults(t).Minimatch;
+        }
+      };
+      g.Minimatch = J;
+      var Zi = pe();
+      Object.defineProperty(g, "AST", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+        return Zi.AST;
+      }, "get") });
+      var Qi = me();
+      Object.defineProperty(g, "escape", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+        return Qi.escape;
+      }, "get") });
+      var tr = kt();
+      Object.defineProperty(g, "unescape", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+        return tr.unescape;
+      }, "get") });
+      g.minimatch.AST = is.AST;
+      g.minimatch.Minimatch = J;
+      g.minimatch.escape = vi.escape;
+      g.minimatch.unescape = Ei.unescape;
+    });
+    var fs = R((Wt) => {
+      "use strict";
+      Object.defineProperty(Wt, "__esModule", { value: true });
+      Wt.LRUCache = void 0;
+      var er = typeof performance == "object" && performance && typeof performance.now == "function" ? performance : Date, as = /* @__PURE__ */ new Set(), ge = typeof process == "object" && process ? process : {}, ls = /* @__PURE__ */ __name((n, t, e, s) => {
+        typeof ge.emitWarning == "function" ? ge.emitWarning(n, t, e, s) : console.error(`[${e}] ${t}: ${n}`);
+      }, "ls"), Lt = globalThis.AbortController, os2 = globalThis.AbortSignal;
+      if (typeof Lt > "u") {
+        os2 = class {
+          static {
+            __name(this, "os");
+          }
+          onabort;
+          _onabort = [];
+          reason;
+          aborted = false;
+          addEventListener(e, s) {
+            this._onabort.push(s);
+          }
+        }, Lt = class {
+          static {
+            __name(this, "Lt");
+          }
+          constructor() {
+            t();
+          }
+          signal = new os2();
+          abort(e) {
+            if (!this.signal.aborted) {
+              this.signal.reason = e, this.signal.aborted = true;
+              for (let s of this.signal._onabort) s(e);
+              this.signal.onabort?.(e);
+            }
+          }
+        };
+        let n = ge.env?.LRU_CACHE_IGNORE_AC_WARNING !== "1", t = /* @__PURE__ */ __name(() => {
+          n && (n = false, ls("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.", "NO_ABORT_CONTROLLER", "ENOTSUP", t));
+        }, "t");
+      }
+      var sr = /* @__PURE__ */ __name((n) => !as.has(n), "sr"), V = /* @__PURE__ */ __name((n) => n && n === Math.floor(n) && n > 0 && isFinite(n), "V"), cs = /* @__PURE__ */ __name((n) => V(n) ? n <= Math.pow(2, 8) ? Uint8Array : n <= Math.pow(2, 16) ? Uint16Array : n <= Math.pow(2, 32) ? Uint32Array : n <= Number.MAX_SAFE_INTEGER ? Nt : null : null, "cs"), Nt = class extends Array {
+        static {
+          __name(this, "Nt");
+        }
+        constructor(n) {
+          super(n), this.fill(0);
+        }
+      }, ir = class at {
+        static {
+          __name(this, "at");
+        }
+        heap;
+        length;
+        static #t = false;
+        static create(t) {
+          let e = cs(t);
+          if (!e) return [];
+          at.#t = true;
+          let s = new at(t, e);
+          return at.#t = false, s;
+        }
+        constructor(t, e) {
+          if (!at.#t) throw new TypeError("instantiate Stack using Stack.create(n)");
+          this.heap = new e(t), this.length = 0;
+        }
+        push(t) {
+          this.heap[this.length++] = t;
+        }
+        pop() {
+          return this.heap[--this.length];
+        }
+      }, rr = class us {
+        static {
+          __name(this, "us");
+        }
+        #t;
+        #s;
+        #n;
+        #r;
+        #h;
+        #S;
+        #w;
+        #c;
+        get perf() {
+          return this.#c;
+        }
+        ttl;
+        ttlResolution;
+        ttlAutopurge;
+        updateAgeOnGet;
+        updateAgeOnHas;
+        allowStale;
+        noDisposeOnSet;
+        noUpdateTTL;
+        maxEntrySize;
+        sizeCalculation;
+        noDeleteOnFetchRejection;
+        noDeleteOnStaleGet;
+        allowStaleOnFetchAbort;
+        allowStaleOnFetchRejection;
+        ignoreFetchAbort;
+        #o;
+        #f;
+        #u;
+        #a;
+        #i;
+        #d;
+        #v;
+        #y;
+        #p;
+        #R;
+        #m;
+        #O;
+        #x;
+        #g;
+        #b;
+        #E;
+        #T;
+        #e;
+        #F;
+        static unsafeExposeInternals(t) {
+          return { starts: t.#x, ttls: t.#g, autopurgeTimers: t.#b, sizes: t.#O, keyMap: t.#u, keyList: t.#a, valList: t.#i, next: t.#d, prev: t.#v, get head() {
+            return t.#y;
+          }, get tail() {
+            return t.#p;
+          }, free: t.#R, isBackgroundFetch: /* @__PURE__ */ __name((e) => t.#l(e), "isBackgroundFetch"), backgroundFetch: /* @__PURE__ */ __name((e, s, i, r) => t.#z(e, s, i, r), "backgroundFetch"), moveToTail: /* @__PURE__ */ __name((e) => t.#N(e), "moveToTail"), indexes: /* @__PURE__ */ __name((e) => t.#k(e), "indexes"), rindexes: /* @__PURE__ */ __name((e) => t.#M(e), "rindexes"), isStale: /* @__PURE__ */ __name((e) => t.#_(e), "isStale") };
+        }
+        get max() {
+          return this.#t;
+        }
+        get maxSize() {
+          return this.#s;
+        }
+        get calculatedSize() {
+          return this.#f;
+        }
+        get size() {
+          return this.#o;
+        }
+        get fetchMethod() {
+          return this.#S;
+        }
+        get memoMethod() {
+          return this.#w;
+        }
+        get dispose() {
+          return this.#n;
+        }
+        get onInsert() {
+          return this.#r;
+        }
+        get disposeAfter() {
+          return this.#h;
+        }
+        constructor(t) {
+          let { max: e = 0, ttl: s, ttlResolution: i = 1, ttlAutopurge: r, updateAgeOnGet: h, updateAgeOnHas: o, allowStale: a, dispose: l, onInsert: f, disposeAfter: c, noDisposeOnSet: d, noUpdateTTL: u, maxSize: m = 0, maxEntrySize: p = 0, sizeCalculation: b, fetchMethod: w, memoMethod: v, noDeleteOnFetchRejection: E, noDeleteOnStaleGet: y, allowStaleOnFetchRejection: S, allowStaleOnFetchAbort: B, ignoreFetchAbort: U, perf: et } = t;
+          if (et !== void 0 && typeof et?.now != "function") throw new TypeError("perf option must have a now() method if specified");
+          if (this.#c = et ?? er, e !== 0 && !V(e)) throw new TypeError("max option must be a nonnegative integer");
+          let st = e ? cs(e) : Array;
+          if (!st) throw new Error("invalid max value: " + e);
+          if (this.#t = e, this.#s = m, this.maxEntrySize = p || this.#s, this.sizeCalculation = b, this.sizeCalculation) {
+            if (!this.#s && !this.maxEntrySize) throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");
+            if (typeof this.sizeCalculation != "function") throw new TypeError("sizeCalculation set to non-function");
+          }
+          if (v !== void 0 && typeof v != "function") throw new TypeError("memoMethod must be a function if defined");
+          if (this.#w = v, w !== void 0 && typeof w != "function") throw new TypeError("fetchMethod must be a function if specified");
+          if (this.#S = w, this.#T = !!w, this.#u = /* @__PURE__ */ new Map(), this.#a = new Array(e).fill(void 0), this.#i = new Array(e).fill(void 0), this.#d = new st(e), this.#v = new st(e), this.#y = 0, this.#p = 0, this.#R = ir.create(e), this.#o = 0, this.#f = 0, typeof l == "function" && (this.#n = l), typeof f == "function" && (this.#r = f), typeof c == "function" ? (this.#h = c, this.#m = []) : (this.#h = void 0, this.#m = void 0), this.#E = !!this.#n, this.#F = !!this.#r, this.#e = !!this.#h, this.noDisposeOnSet = !!d, this.noUpdateTTL = !!u, this.noDeleteOnFetchRejection = !!E, this.allowStaleOnFetchRejection = !!S, this.allowStaleOnFetchAbort = !!B, this.ignoreFetchAbort = !!U, this.maxEntrySize !== 0) {
+            if (this.#s !== 0 && !V(this.#s)) throw new TypeError("maxSize must be a positive integer if specified");
+            if (!V(this.maxEntrySize)) throw new TypeError("maxEntrySize must be a positive integer if specified");
+            this.#$();
+          }
+          if (this.allowStale = !!a, this.noDeleteOnStaleGet = !!y, this.updateAgeOnGet = !!h, this.updateAgeOnHas = !!o, this.ttlResolution = V(i) || i === 0 ? i : 1, this.ttlAutopurge = !!r, this.ttl = s || 0, this.ttl) {
+            if (!V(this.ttl)) throw new TypeError("ttl must be a positive integer if specified");
+            this.#P();
+          }
+          if (this.#t === 0 && this.ttl === 0 && this.#s === 0) throw new TypeError("At least one of max, maxSize, or ttl is required");
+          if (!this.ttlAutopurge && !this.#t && !this.#s) {
+            let le = "LRU_CACHE_UNBOUNDED";
+            sr(le) && (as.add(le), ls("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.", "UnboundedCacheWarning", le, us));
+          }
+        }
+        getRemainingTTL(t) {
+          return this.#u.has(t) ? 1 / 0 : 0;
+        }
+        #P() {
+          let t = new Nt(this.#t), e = new Nt(this.#t);
+          this.#g = t, this.#x = e;
+          let s = this.ttlAutopurge ? new Array(this.#t) : void 0;
+          this.#b = s, this.#W = (h, o, a = this.#c.now()) => {
+            if (e[h] = o !== 0 ? a : 0, t[h] = o, s?.[h] && (clearTimeout(s[h]), s[h] = void 0), o !== 0 && s) {
+              let l = setTimeout(() => {
+                this.#_(h) && this.#A(this.#a[h], "expire");
+              }, o + 1);
+              l.unref && l.unref(), s[h] = l;
+            }
+          }, this.#C = (h) => {
+            e[h] = t[h] !== 0 ? this.#c.now() : 0;
+          }, this.#D = (h, o) => {
+            if (t[o]) {
+              let a = t[o], l = e[o];
+              if (!a || !l) return;
+              h.ttl = a, h.start = l, h.now = i || r();
+              let f = h.now - l;
+              h.remainingTTL = a - f;
+            }
+          };
+          let i = 0, r = /* @__PURE__ */ __name(() => {
+            let h = this.#c.now();
+            if (this.ttlResolution > 0) {
+              i = h;
+              let o = setTimeout(() => i = 0, this.ttlResolution);
+              o.unref && o.unref();
+            }
+            return h;
+          }, "r");
+          this.getRemainingTTL = (h) => {
+            let o = this.#u.get(h);
+            if (o === void 0) return 0;
+            let a = t[o], l = e[o];
+            if (!a || !l) return 1 / 0;
+            let f = (i || r()) - l;
+            return a - f;
+          }, this.#_ = (h) => {
+            let o = e[h], a = t[h];
+            return !!a && !!o && (i || r()) - o > a;
+          };
+        }
+        #C = /* @__PURE__ */ __name(() => {
+        }, "#C");
+        #D = /* @__PURE__ */ __name(() => {
+        }, "#D");
+        #W = /* @__PURE__ */ __name(() => {
+        }, "#W");
+        #_ = /* @__PURE__ */ __name(() => false, "#_");
+        #$() {
+          let t = new Nt(this.#t);
+          this.#f = 0, this.#O = t, this.#L = (e) => {
+            this.#f -= t[e], t[e] = 0;
+          }, this.#B = (e, s, i, r) => {
+            if (this.#l(s)) return 0;
+            if (!V(i)) if (r) {
+              if (typeof r != "function") throw new TypeError("sizeCalculation must be a function");
+              if (i = r(s, e), !V(i)) throw new TypeError("sizeCalculation return invalid (expect positive integer)");
+            } else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");
+            return i;
+          }, this.#j = (e, s, i) => {
+            if (t[e] = s, this.#s) {
+              let r = this.#s - t[e];
+              for (; this.#f > r; ) this.#G(true);
+            }
+            this.#f += t[e], i && (i.entrySize = s, i.totalCalculatedSize = this.#f);
+          };
+        }
+        #L = /* @__PURE__ */ __name((t) => {
+        }, "#L");
+        #j = /* @__PURE__ */ __name((t, e, s) => {
+        }, "#j");
+        #B = /* @__PURE__ */ __name((t, e, s, i) => {
+          if (s || i) throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");
+          return 0;
+        }, "#B");
+        *#k({ allowStale: t = this.allowStale } = {}) {
+          if (this.#o) for (let e = this.#p; !(!this.#I(e) || ((t || !this.#_(e)) && (yield e), e === this.#y)); ) e = this.#v[e];
+        }
+        *#M({ allowStale: t = this.allowStale } = {}) {
+          if (this.#o) for (let e = this.#y; !(!this.#I(e) || ((t || !this.#_(e)) && (yield e), e === this.#p)); ) e = this.#d[e];
+        }
+        #I(t) {
+          return t !== void 0 && this.#u.get(this.#a[t]) === t;
+        }
+        *entries() {
+          for (let t of this.#k()) this.#i[t] !== void 0 && this.#a[t] !== void 0 && !this.#l(this.#i[t]) && (yield [this.#a[t], this.#i[t]]);
+        }
+        *rentries() {
+          for (let t of this.#M()) this.#i[t] !== void 0 && this.#a[t] !== void 0 && !this.#l(this.#i[t]) && (yield [this.#a[t], this.#i[t]]);
+        }
+        *keys() {
+          for (let t of this.#k()) {
+            let e = this.#a[t];
+            e !== void 0 && !this.#l(this.#i[t]) && (yield e);
+          }
+        }
+        *rkeys() {
+          for (let t of this.#M()) {
+            let e = this.#a[t];
+            e !== void 0 && !this.#l(this.#i[t]) && (yield e);
+          }
+        }
+        *values() {
+          for (let t of this.#k()) this.#i[t] !== void 0 && !this.#l(this.#i[t]) && (yield this.#i[t]);
+        }
+        *rvalues() {
+          for (let t of this.#M()) this.#i[t] !== void 0 && !this.#l(this.#i[t]) && (yield this.#i[t]);
+        }
+        [Symbol.iterator]() {
+          return this.entries();
+        }
+        [Symbol.toStringTag] = "LRUCache";
+        find(t, e = {}) {
+          for (let s of this.#k()) {
+            let i = this.#i[s], r = this.#l(i) ? i.__staleWhileFetching : i;
+            if (r !== void 0 && t(r, this.#a[s], this)) return this.get(this.#a[s], e);
+          }
+        }
+        forEach(t, e = this) {
+          for (let s of this.#k()) {
+            let i = this.#i[s], r = this.#l(i) ? i.__staleWhileFetching : i;
+            r !== void 0 && t.call(e, r, this.#a[s], this);
+          }
+        }
+        rforEach(t, e = this) {
+          for (let s of this.#M()) {
+            let i = this.#i[s], r = this.#l(i) ? i.__staleWhileFetching : i;
+            r !== void 0 && t.call(e, r, this.#a[s], this);
+          }
+        }
+        purgeStale() {
+          let t = false;
+          for (let e of this.#M({ allowStale: true })) this.#_(e) && (this.#A(this.#a[e], "expire"), t = true);
+          return t;
+        }
+        info(t) {
+          let e = this.#u.get(t);
+          if (e === void 0) return;
+          let s = this.#i[e], i = this.#l(s) ? s.__staleWhileFetching : s;
+          if (i === void 0) return;
+          let r = { value: i };
+          if (this.#g && this.#x) {
+            let h = this.#g[e], o = this.#x[e];
+            if (h && o) {
+              let a = h - (this.#c.now() - o);
+              r.ttl = a, r.start = Date.now();
+            }
+          }
+          return this.#O && (r.size = this.#O[e]), r;
+        }
+        dump() {
+          let t = [];
+          for (let e of this.#k({ allowStale: true })) {
+            let s = this.#a[e], i = this.#i[e], r = this.#l(i) ? i.__staleWhileFetching : i;
+            if (r === void 0 || s === void 0) continue;
+            let h = { value: r };
+            if (this.#g && this.#x) {
+              h.ttl = this.#g[e];
+              let o = this.#c.now() - this.#x[e];
+              h.start = Math.floor(Date.now() - o);
+            }
+            this.#O && (h.size = this.#O[e]), t.unshift([s, h]);
+          }
+          return t;
+        }
+        load(t) {
+          this.clear();
+          for (let [e, s] of t) {
+            if (s.start) {
+              let i = Date.now() - s.start;
+              s.start = this.#c.now() - i;
+            }
+            this.set(e, s.value, s);
+          }
+        }
+        set(t, e, s = {}) {
+          if (e === void 0) return this.delete(t), this;
+          let { ttl: i = this.ttl, start: r, noDisposeOnSet: h = this.noDisposeOnSet, sizeCalculation: o = this.sizeCalculation, status: a } = s, { noUpdateTTL: l = this.noUpdateTTL } = s, f = this.#B(t, e, s.size || 0, o);
+          if (this.maxEntrySize && f > this.maxEntrySize) return a && (a.set = "miss", a.maxEntrySizeExceeded = true), this.#A(t, "set"), this;
+          let c = this.#o === 0 ? void 0 : this.#u.get(t);
+          if (c === void 0) c = this.#o === 0 ? this.#p : this.#R.length !== 0 ? this.#R.pop() : this.#o === this.#t ? this.#G(false) : this.#o, this.#a[c] = t, this.#i[c] = e, this.#u.set(t, c), this.#d[this.#p] = c, this.#v[c] = this.#p, this.#p = c, this.#o++, this.#j(c, f, a), a && (a.set = "add"), l = false, this.#F && this.#r?.(e, t, "add");
+          else {
+            this.#N(c);
+            let d = this.#i[c];
+            if (e !== d) {
+              if (this.#T && this.#l(d)) {
+                d.__abortController.abort(new Error("replaced"));
+                let { __staleWhileFetching: u } = d;
+                u !== void 0 && !h && (this.#E && this.#n?.(u, t, "set"), this.#e && this.#m?.push([u, t, "set"]));
+              } else h || (this.#E && this.#n?.(d, t, "set"), this.#e && this.#m?.push([d, t, "set"]));
+              if (this.#L(c), this.#j(c, f, a), this.#i[c] = e, a) {
+                a.set = "replace";
+                let u = d && this.#l(d) ? d.__staleWhileFetching : d;
+                u !== void 0 && (a.oldValue = u);
+              }
+            } else a && (a.set = "update");
+            this.#F && this.onInsert?.(e, t, e === d ? "update" : "replace");
+          }
+          if (i !== 0 && !this.#g && this.#P(), this.#g && (l || this.#W(c, i, r), a && this.#D(a, c)), !h && this.#e && this.#m) {
+            let d = this.#m, u;
+            for (; u = d?.shift(); ) this.#h?.(...u);
+          }
+          return this;
+        }
+        pop() {
+          try {
+            for (; this.#o; ) {
+              let t = this.#i[this.#y];
+              if (this.#G(true), this.#l(t)) {
+                if (t.__staleWhileFetching) return t.__staleWhileFetching;
+              } else if (t !== void 0) return t;
+            }
+          } finally {
+            if (this.#e && this.#m) {
+              let t = this.#m, e;
+              for (; e = t?.shift(); ) this.#h?.(...e);
+            }
+          }
+        }
+        #G(t) {
+          let e = this.#y, s = this.#a[e], i = this.#i[e];
+          return this.#T && this.#l(i) ? i.__abortController.abort(new Error("evicted")) : (this.#E || this.#e) && (this.#E && this.#n?.(i, s, "evict"), this.#e && this.#m?.push([i, s, "evict"])), this.#L(e), this.#b?.[e] && (clearTimeout(this.#b[e]), this.#b[e] = void 0), t && (this.#a[e] = void 0, this.#i[e] = void 0, this.#R.push(e)), this.#o === 1 ? (this.#y = this.#p = 0, this.#R.length = 0) : this.#y = this.#d[e], this.#u.delete(s), this.#o--, e;
+        }
+        has(t, e = {}) {
+          let { updateAgeOnHas: s = this.updateAgeOnHas, status: i } = e, r = this.#u.get(t);
+          if (r !== void 0) {
+            let h = this.#i[r];
+            if (this.#l(h) && h.__staleWhileFetching === void 0) return false;
+            if (this.#_(r)) i && (i.has = "stale", this.#D(i, r));
+            else return s && this.#C(r), i && (i.has = "hit", this.#D(i, r)), true;
+          } else i && (i.has = "miss");
+          return false;
+        }
+        peek(t, e = {}) {
+          let { allowStale: s = this.allowStale } = e, i = this.#u.get(t);
+          if (i === void 0 || !s && this.#_(i)) return;
+          let r = this.#i[i];
+          return this.#l(r) ? r.__staleWhileFetching : r;
+        }
+        #z(t, e, s, i) {
+          let r = e === void 0 ? void 0 : this.#i[e];
+          if (this.#l(r)) return r;
+          let h = new Lt(), { signal: o } = s;
+          o?.addEventListener("abort", () => h.abort(o.reason), { signal: h.signal });
+          let a = { signal: h.signal, options: s, context: i }, l = /* @__PURE__ */ __name((p, b = false) => {
+            let { aborted: w } = h.signal, v = s.ignoreFetchAbort && p !== void 0, E = s.ignoreFetchAbort || !!(s.allowStaleOnFetchAbort && p !== void 0);
+            if (s.status && (w && !b ? (s.status.fetchAborted = true, s.status.fetchError = h.signal.reason, v && (s.status.fetchAbortIgnored = true)) : s.status.fetchResolved = true), w && !v && !b) return c(h.signal.reason, E);
+            let y = u, S = this.#i[e];
+            return (S === u || v && b && S === void 0) && (p === void 0 ? y.__staleWhileFetching !== void 0 ? this.#i[e] = y.__staleWhileFetching : this.#A(t, "fetch") : (s.status && (s.status.fetchUpdated = true), this.set(t, p, a.options))), p;
+          }, "l"), f = /* @__PURE__ */ __name((p) => (s.status && (s.status.fetchRejected = true, s.status.fetchError = p), c(p, false)), "f"), c = /* @__PURE__ */ __name((p, b) => {
+            let { aborted: w } = h.signal, v = w && s.allowStaleOnFetchAbort, E = v || s.allowStaleOnFetchRejection, y = E || s.noDeleteOnFetchRejection, S = u;
+            if (this.#i[e] === u && (!y || !b && S.__staleWhileFetching === void 0 ? this.#A(t, "fetch") : v || (this.#i[e] = S.__staleWhileFetching)), E) return s.status && S.__staleWhileFetching !== void 0 && (s.status.returnedStale = true), S.__staleWhileFetching;
+            if (S.__returned === S) throw p;
+          }, "c"), d = /* @__PURE__ */ __name((p, b) => {
+            let w = this.#S?.(t, r, a);
+            w && w instanceof Promise && w.then((v) => p(v === void 0 ? void 0 : v), b), h.signal.addEventListener("abort", () => {
+              (!s.ignoreFetchAbort || s.allowStaleOnFetchAbort) && (p(void 0), s.allowStaleOnFetchAbort && (p = /* @__PURE__ */ __name((v) => l(v, true), "p")));
+            });
+          }, "d");
+          s.status && (s.status.fetchDispatched = true);
+          let u = new Promise(d).then(l, f), m = Object.assign(u, { __abortController: h, __staleWhileFetching: r, __returned: void 0 });
+          return e === void 0 ? (this.set(t, m, { ...a.options, status: void 0 }), e = this.#u.get(t)) : this.#i[e] = m, m;
+        }
+        #l(t) {
+          if (!this.#T) return false;
+          let e = t;
+          return !!e && e instanceof Promise && e.hasOwnProperty("__staleWhileFetching") && e.__abortController instanceof Lt;
+        }
+        async fetch(t, e = {}) {
+          let { allowStale: s = this.allowStale, updateAgeOnGet: i = this.updateAgeOnGet, noDeleteOnStaleGet: r = this.noDeleteOnStaleGet, ttl: h = this.ttl, noDisposeOnSet: o = this.noDisposeOnSet, size: a = 0, sizeCalculation: l = this.sizeCalculation, noUpdateTTL: f = this.noUpdateTTL, noDeleteOnFetchRejection: c = this.noDeleteOnFetchRejection, allowStaleOnFetchRejection: d = this.allowStaleOnFetchRejection, ignoreFetchAbort: u = this.ignoreFetchAbort, allowStaleOnFetchAbort: m = this.allowStaleOnFetchAbort, context: p, forceRefresh: b = false, status: w, signal: v } = e;
+          if (!this.#T) return w && (w.fetch = "get"), this.get(t, { allowStale: s, updateAgeOnGet: i, noDeleteOnStaleGet: r, status: w });
+          let E = { allowStale: s, updateAgeOnGet: i, noDeleteOnStaleGet: r, ttl: h, noDisposeOnSet: o, size: a, sizeCalculation: l, noUpdateTTL: f, noDeleteOnFetchRejection: c, allowStaleOnFetchRejection: d, allowStaleOnFetchAbort: m, ignoreFetchAbort: u, status: w, signal: v }, y = this.#u.get(t);
+          if (y === void 0) {
+            w && (w.fetch = "miss");
+            let S = this.#z(t, y, E, p);
+            return S.__returned = S;
+          } else {
+            let S = this.#i[y];
+            if (this.#l(S)) {
+              let st = s && S.__staleWhileFetching !== void 0;
+              return w && (w.fetch = "inflight", st && (w.returnedStale = true)), st ? S.__staleWhileFetching : S.__returned = S;
+            }
+            let B = this.#_(y);
+            if (!b && !B) return w && (w.fetch = "hit"), this.#N(y), i && this.#C(y), w && this.#D(w, y), S;
+            let U = this.#z(t, y, E, p), et = U.__staleWhileFetching !== void 0 && s;
+            return w && (w.fetch = B ? "stale" : "refresh", et && B && (w.returnedStale = true)), et ? U.__staleWhileFetching : U.__returned = U;
+          }
+        }
+        async forceFetch(t, e = {}) {
+          let s = await this.fetch(t, e);
+          if (s === void 0) throw new Error("fetch() returned undefined");
+          return s;
+        }
+        memo(t, e = {}) {
+          let s = this.#w;
+          if (!s) throw new Error("no memoMethod provided to constructor");
+          let { context: i, forceRefresh: r, ...h } = e, o = this.get(t, h);
+          if (!r && o !== void 0) return o;
+          let a = s(t, o, { options: h, context: i });
+          return this.set(t, a, h), a;
+        }
+        get(t, e = {}) {
+          let { allowStale: s = this.allowStale, updateAgeOnGet: i = this.updateAgeOnGet, noDeleteOnStaleGet: r = this.noDeleteOnStaleGet, status: h } = e, o = this.#u.get(t);
+          if (o !== void 0) {
+            let a = this.#i[o], l = this.#l(a);
+            return h && this.#D(h, o), this.#_(o) ? (h && (h.get = "stale"), l ? (h && s && a.__staleWhileFetching !== void 0 && (h.returnedStale = true), s ? a.__staleWhileFetching : void 0) : (r || this.#A(t, "expire"), h && s && (h.returnedStale = true), s ? a : void 0)) : (h && (h.get = "hit"), l ? a.__staleWhileFetching : (this.#N(o), i && this.#C(o), a));
+          } else h && (h.get = "miss");
+        }
+        #U(t, e) {
+          this.#v[e] = t, this.#d[t] = e;
+        }
+        #N(t) {
+          t !== this.#p && (t === this.#y ? this.#y = this.#d[t] : this.#U(this.#v[t], this.#d[t]), this.#U(this.#p, t), this.#p = t);
+        }
+        delete(t) {
+          return this.#A(t, "delete");
+        }
+        #A(t, e) {
+          let s = false;
+          if (this.#o !== 0) {
+            let i = this.#u.get(t);
+            if (i !== void 0) if (this.#b?.[i] && (clearTimeout(this.#b?.[i]), this.#b[i] = void 0), s = true, this.#o === 1) this.#q(e);
+            else {
+              this.#L(i);
+              let r = this.#i[i];
+              if (this.#l(r) ? r.__abortController.abort(new Error("deleted")) : (this.#E || this.#e) && (this.#E && this.#n?.(r, t, e), this.#e && this.#m?.push([r, t, e])), this.#u.delete(t), this.#a[i] = void 0, this.#i[i] = void 0, i === this.#p) this.#p = this.#v[i];
+              else if (i === this.#y) this.#y = this.#d[i];
+              else {
+                let h = this.#v[i];
+                this.#d[h] = this.#d[i];
+                let o = this.#d[i];
+                this.#v[o] = this.#v[i];
+              }
+              this.#o--, this.#R.push(i);
+            }
+          }
+          if (this.#e && this.#m?.length) {
+            let i = this.#m, r;
+            for (; r = i?.shift(); ) this.#h?.(...r);
+          }
+          return s;
+        }
+        clear() {
+          return this.#q("delete");
+        }
+        #q(t) {
+          for (let e of this.#M({ allowStale: true })) {
+            let s = this.#i[e];
+            if (this.#l(s)) s.__abortController.abort(new Error("deleted"));
+            else {
+              let i = this.#a[e];
+              this.#E && this.#n?.(s, i, t), this.#e && this.#m?.push([s, i, t]);
+            }
+          }
+          if (this.#u.clear(), this.#i.fill(void 0), this.#a.fill(void 0), this.#g && this.#x) {
+            this.#g.fill(0), this.#x.fill(0);
+            for (let e of this.#b ?? []) e !== void 0 && clearTimeout(e);
+            this.#b?.fill(void 0);
+          }
+          if (this.#O && this.#O.fill(0), this.#y = 0, this.#p = 0, this.#R.length = 0, this.#f = 0, this.#o = 0, this.#e && this.#m) {
+            let e = this.#m, s;
+            for (; s = e?.shift(); ) this.#h?.(...s);
+          }
+        }
+      };
+      Wt.LRUCache = rr;
+    });
+    var Oe = R((P) => {
+      "use strict";
+      var nr = P && P.__importDefault || function(n) {
+        return n && n.__esModule ? n : { default: n };
+      };
+      Object.defineProperty(P, "__esModule", { value: true });
+      P.Minipass = P.isWritable = P.isReadable = P.isStream = void 0;
+      var ds = typeof process == "object" && process ? process : { stdout: null, stderr: null }, _e = require("node:events"), ws = nr(require("node:stream")), hr = require("node:string_decoder"), or = /* @__PURE__ */ __name((n) => !!n && typeof n == "object" && (n instanceof qt || n instanceof ws.default || (0, P.isReadable)(n) || (0, P.isWritable)(n)), "or");
+      P.isStream = or;
+      var ar = /* @__PURE__ */ __name((n) => !!n && typeof n == "object" && n instanceof _e.EventEmitter && typeof n.pipe == "function" && n.pipe !== ws.default.Writable.prototype.pipe, "ar");
+      P.isReadable = ar;
+      var lr = /* @__PURE__ */ __name((n) => !!n && typeof n == "object" && n instanceof _e.EventEmitter && typeof n.write == "function" && typeof n.end == "function", "lr");
+      P.isWritable = lr;
+      var $ = Symbol("EOF"), q = Symbol("maybeEmitEnd"), K = Symbol("emittedEnd"), Bt = Symbol("emittingEnd"), lt = Symbol("emittedError"), It = Symbol("closed"), ps = Symbol("read"), Gt = Symbol("flush"), ms = Symbol("flushChunk"), L = Symbol("encoding"), rt = Symbol("decoder"), x = Symbol("flowing"), ct = Symbol("paused"), nt = Symbol("resume"), T = Symbol("buffer"), M = Symbol("pipes"), C = Symbol("bufferLength"), we = Symbol("bufferPush"), zt = Symbol("bufferShift"), k = Symbol("objectMode"), O = Symbol("destroyed"), be = Symbol("error"), ye = Symbol("emitData"), gs = Symbol("emitEnd"), Se = Symbol("emitEnd2"), I = Symbol("async"), ve = Symbol("abort"), Ut = Symbol("aborted"), ut = Symbol("signal"), Z = Symbol("dataListeners"), D = Symbol("discarded"), ft = /* @__PURE__ */ __name((n) => Promise.resolve().then(n), "ft"), cr = /* @__PURE__ */ __name((n) => n(), "cr"), ur = /* @__PURE__ */ __name((n) => n === "end" || n === "finish" || n === "prefinish", "ur"), fr = /* @__PURE__ */ __name((n) => n instanceof ArrayBuffer || !!n && typeof n == "object" && n.constructor && n.constructor.name === "ArrayBuffer" && n.byteLength >= 0, "fr"), dr = /* @__PURE__ */ __name((n) => !Buffer.isBuffer(n) && ArrayBuffer.isView(n), "dr"), $t = class {
+        static {
+          __name(this, "$t");
+        }
+        src;
+        dest;
+        opts;
+        ondrain;
+        constructor(t, e, s) {
+          this.src = t, this.dest = e, this.opts = s, this.ondrain = () => t[nt](), this.dest.on("drain", this.ondrain);
+        }
+        unpipe() {
+          this.dest.removeListener("drain", this.ondrain);
+        }
+        proxyErrors(t) {
+        }
+        end() {
+          this.unpipe(), this.opts.end && this.dest.end();
+        }
+      }, Ee = class extends $t {
+        static {
+          __name(this, "Ee");
+        }
+        unpipe() {
+          this.src.removeListener("error", this.proxyErrors), super.unpipe();
+        }
+        constructor(t, e, s) {
+          super(t, e, s), this.proxyErrors = (i) => this.dest.emit("error", i), t.on("error", this.proxyErrors);
+        }
+      }, pr = /* @__PURE__ */ __name((n) => !!n.objectMode, "pr"), mr = /* @__PURE__ */ __name((n) => !n.objectMode && !!n.encoding && n.encoding !== "buffer", "mr"), qt = class extends _e.EventEmitter {
+        static {
+          __name(this, "qt");
+        }
+        [x] = false;
+        [ct] = false;
+        [M] = [];
+        [T] = [];
+        [k];
+        [L];
+        [I];
+        [rt];
+        [$] = false;
+        [K] = false;
+        [Bt] = false;
+        [It] = false;
+        [lt] = null;
+        [C] = 0;
+        [O] = false;
+        [ut];
+        [Ut] = false;
+        [Z] = 0;
+        [D] = false;
+        writable = true;
+        readable = true;
+        constructor(...t) {
+          let e = t[0] || {};
+          if (super(), e.objectMode && typeof e.encoding == "string") throw new TypeError("Encoding and objectMode may not be used together");
+          pr(e) ? (this[k] = true, this[L] = null) : mr(e) ? (this[L] = e.encoding, this[k] = false) : (this[k] = false, this[L] = null), this[I] = !!e.async, this[rt] = this[L] ? new hr.StringDecoder(this[L]) : null, e && e.debugExposeBuffer === true && Object.defineProperty(this, "buffer", { get: /* @__PURE__ */ __name(() => this[T], "get") }), e && e.debugExposePipes === true && Object.defineProperty(this, "pipes", { get: /* @__PURE__ */ __name(() => this[M], "get") });
+          let { signal: s } = e;
+          s && (this[ut] = s, s.aborted ? this[ve]() : s.addEventListener("abort", () => this[ve]()));
+        }
+        get bufferLength() {
+          return this[C];
+        }
+        get encoding() {
+          return this[L];
+        }
+        set encoding(t) {
+          throw new Error("Encoding must be set at instantiation time");
+        }
+        setEncoding(t) {
+          throw new Error("Encoding must be set at instantiation time");
+        }
+        get objectMode() {
+          return this[k];
+        }
+        set objectMode(t) {
+          throw new Error("objectMode must be set at instantiation time");
+        }
+        get async() {
+          return this[I];
+        }
+        set async(t) {
+          this[I] = this[I] || !!t;
+        }
+        [ve]() {
+          this[Ut] = true, this.emit("abort", this[ut]?.reason), this.destroy(this[ut]?.reason);
+        }
+        get aborted() {
+          return this[Ut];
+        }
+        set aborted(t) {
+        }
+        write(t, e, s) {
+          if (this[Ut]) return false;
+          if (this[$]) throw new Error("write after end");
+          if (this[O]) return this.emit("error", Object.assign(new Error("Cannot call write after a stream was destroyed"), { code: "ERR_STREAM_DESTROYED" })), true;
+          typeof e == "function" && (s = e, e = "utf8"), e || (e = "utf8");
+          let i = this[I] ? ft : cr;
+          if (!this[k] && !Buffer.isBuffer(t)) {
+            if (dr(t)) t = Buffer.from(t.buffer, t.byteOffset, t.byteLength);
+            else if (fr(t)) t = Buffer.from(t);
+            else if (typeof t != "string") throw new Error("Non-contiguous data written to non-objectMode stream");
+          }
+          return this[k] ? (this[x] && this[C] !== 0 && this[Gt](true), this[x] ? this.emit("data", t) : this[we](t), this[C] !== 0 && this.emit("readable"), s && i(s), this[x]) : t.length ? (typeof t == "string" && !(e === this[L] && !this[rt]?.lastNeed) && (t = Buffer.from(t, e)), Buffer.isBuffer(t) && this[L] && (t = this[rt].write(t)), this[x] && this[C] !== 0 && this[Gt](true), this[x] ? this.emit("data", t) : this[we](t), this[C] !== 0 && this.emit("readable"), s && i(s), this[x]) : (this[C] !== 0 && this.emit("readable"), s && i(s), this[x]);
+        }
+        read(t) {
+          if (this[O]) return null;
+          if (this[D] = false, this[C] === 0 || t === 0 || t && t > this[C]) return this[q](), null;
+          this[k] && (t = null), this[T].length > 1 && !this[k] && (this[T] = [this[L] ? this[T].join("") : Buffer.concat(this[T], this[C])]);
+          let e = this[ps](t || null, this[T][0]);
+          return this[q](), e;
+        }
+        [ps](t, e) {
+          if (this[k]) this[zt]();
+          else {
+            let s = e;
+            t === s.length || t === null ? this[zt]() : typeof s == "string" ? (this[T][0] = s.slice(t), e = s.slice(0, t), this[C] -= t) : (this[T][0] = s.subarray(t), e = s.subarray(0, t), this[C] -= t);
+          }
+          return this.emit("data", e), !this[T].length && !this[$] && this.emit("drain"), e;
+        }
+        end(t, e, s) {
+          return typeof t == "function" && (s = t, t = void 0), typeof e == "function" && (s = e, e = "utf8"), t !== void 0 && this.write(t, e), s && this.once("end", s), this[$] = true, this.writable = false, (this[x] || !this[ct]) && this[q](), this;
+        }
+        [nt]() {
+          this[O] || (!this[Z] && !this[M].length && (this[D] = true), this[ct] = false, this[x] = true, this.emit("resume"), this[T].length ? this[Gt]() : this[$] ? this[q]() : this.emit("drain"));
+        }
+        resume() {
+          return this[nt]();
+        }
+        pause() {
+          this[x] = false, this[ct] = true, this[D] = false;
+        }
+        get destroyed() {
+          return this[O];
+        }
+        get flowing() {
+          return this[x];
+        }
+        get paused() {
+          return this[ct];
+        }
+        [we](t) {
+          this[k] ? this[C] += 1 : this[C] += t.length, this[T].push(t);
+        }
+        [zt]() {
+          return this[k] ? this[C] -= 1 : this[C] -= this[T][0].length, this[T].shift();
+        }
+        [Gt](t = false) {
+          do
+            ;
+          while (this[ms](this[zt]()) && this[T].length);
+          !t && !this[T].length && !this[$] && this.emit("drain");
+        }
+        [ms](t) {
+          return this.emit("data", t), this[x];
+        }
+        pipe(t, e) {
+          if (this[O]) return t;
+          this[D] = false;
+          let s = this[K];
+          return e = e || {}, t === ds.stdout || t === ds.stderr ? e.end = false : e.end = e.end !== false, e.proxyErrors = !!e.proxyErrors, s ? e.end && t.end() : (this[M].push(e.proxyErrors ? new Ee(this, t, e) : new $t(this, t, e)), this[I] ? ft(() => this[nt]()) : this[nt]()), t;
+        }
+        unpipe(t) {
+          let e = this[M].find((s) => s.dest === t);
+          e && (this[M].length === 1 ? (this[x] && this[Z] === 0 && (this[x] = false), this[M] = []) : this[M].splice(this[M].indexOf(e), 1), e.unpipe());
+        }
+        addListener(t, e) {
+          return this.on(t, e);
+        }
+        on(t, e) {
+          let s = super.on(t, e);
+          if (t === "data") this[D] = false, this[Z]++, !this[M].length && !this[x] && this[nt]();
+          else if (t === "readable" && this[C] !== 0) super.emit("readable");
+          else if (ur(t) && this[K]) super.emit(t), this.removeAllListeners(t);
+          else if (t === "error" && this[lt]) {
+            let i = e;
+            this[I] ? ft(() => i.call(this, this[lt])) : i.call(this, this[lt]);
+          }
+          return s;
+        }
+        removeListener(t, e) {
+          return this.off(t, e);
+        }
+        off(t, e) {
+          let s = super.off(t, e);
+          return t === "data" && (this[Z] = this.listeners("data").length, this[Z] === 0 && !this[D] && !this[M].length && (this[x] = false)), s;
+        }
+        removeAllListeners(t) {
+          let e = super.removeAllListeners(t);
+          return (t === "data" || t === void 0) && (this[Z] = 0, !this[D] && !this[M].length && (this[x] = false)), e;
+        }
+        get emittedEnd() {
+          return this[K];
+        }
+        [q]() {
+          !this[Bt] && !this[K] && !this[O] && this[T].length === 0 && this[$] && (this[Bt] = true, this.emit("end"), this.emit("prefinish"), this.emit("finish"), this[It] && this.emit("close"), this[Bt] = false);
+        }
+        emit(t, ...e) {
+          let s = e[0];
+          if (t !== "error" && t !== "close" && t !== O && this[O]) return false;
+          if (t === "data") return !this[k] && !s ? false : this[I] ? (ft(() => this[ye](s)), true) : this[ye](s);
+          if (t === "end") return this[gs]();
+          if (t === "close") {
+            if (this[It] = true, !this[K] && !this[O]) return false;
+            let r = super.emit("close");
+            return this.removeAllListeners("close"), r;
+          } else if (t === "error") {
+            this[lt] = s, super.emit(be, s);
+            let r = !this[ut] || this.listeners("error").length ? super.emit("error", s) : false;
+            return this[q](), r;
+          } else if (t === "resume") {
+            let r = super.emit("resume");
+            return this[q](), r;
+          } else if (t === "finish" || t === "prefinish") {
+            let r = super.emit(t);
+            return this.removeAllListeners(t), r;
+          }
+          let i = super.emit(t, ...e);
+          return this[q](), i;
+        }
+        [ye](t) {
+          for (let s of this[M]) s.dest.write(t) === false && this.pause();
+          let e = this[D] ? false : super.emit("data", t);
+          return this[q](), e;
+        }
+        [gs]() {
+          return this[K] ? false : (this[K] = true, this.readable = false, this[I] ? (ft(() => this[Se]()), true) : this[Se]());
+        }
+        [Se]() {
+          if (this[rt]) {
+            let e = this[rt].end();
+            if (e) {
+              for (let s of this[M]) s.dest.write(e);
+              this[D] || super.emit("data", e);
+            }
+          }
+          for (let e of this[M]) e.end();
+          let t = super.emit("end");
+          return this.removeAllListeners("end"), t;
+        }
+        async collect() {
+          let t = Object.assign([], { dataLength: 0 });
+          this[k] || (t.dataLength = 0);
+          let e = this.promise();
+          return this.on("data", (s) => {
+            t.push(s), this[k] || (t.dataLength += s.length);
+          }), await e, t;
+        }
+        async concat() {
+          if (this[k]) throw new Error("cannot concat in objectMode");
+          let t = await this.collect();
+          return this[L] ? t.join("") : Buffer.concat(t, t.dataLength);
+        }
+        async promise() {
+          return new Promise((t, e) => {
+            this.on(O, () => e(new Error("stream destroyed"))), this.on("error", (s) => e(s)), this.on("end", () => t());
+          });
+        }
+        [Symbol.asyncIterator]() {
+          this[D] = false;
+          let t = false, e = /* @__PURE__ */ __name(async () => (this.pause(), t = true, { value: void 0, done: true }), "e");
+          return { next: /* @__PURE__ */ __name(() => {
+            if (t) return e();
+            let i = this.read();
+            if (i !== null) return Promise.resolve({ done: false, value: i });
+            if (this[$]) return e();
+            let r, h, o = /* @__PURE__ */ __name((c) => {
+              this.off("data", a), this.off("end", l), this.off(O, f), e(), h(c);
+            }, "o"), a = /* @__PURE__ */ __name((c) => {
+              this.off("error", o), this.off("end", l), this.off(O, f), this.pause(), r({ value: c, done: !!this[$] });
+            }, "a"), l = /* @__PURE__ */ __name(() => {
+              this.off("error", o), this.off("data", a), this.off(O, f), e(), r({ done: true, value: void 0 });
+            }, "l"), f = /* @__PURE__ */ __name(() => o(new Error("stream destroyed")), "f");
+            return new Promise((c, d) => {
+              h = d, r = c, this.once(O, f), this.once("error", o), this.once("end", l), this.once("data", a);
+            });
+          }, "next"), throw: e, return: e, [Symbol.asyncIterator]() {
+            return this;
+          }, [Symbol.asyncDispose]: async () => {
+          } };
+        }
+        [Symbol.iterator]() {
+          this[D] = false;
+          let t = false, e = /* @__PURE__ */ __name(() => (this.pause(), this.off(be, e), this.off(O, e), this.off("end", e), t = true, { done: true, value: void 0 }), "e"), s = /* @__PURE__ */ __name(() => {
+            if (t) return e();
+            let i = this.read();
+            return i === null ? e() : { done: false, value: i };
+          }, "s");
+          return this.once("end", e), this.once(be, e), this.once(O, e), { next: s, throw: e, return: e, [Symbol.iterator]() {
+            return this;
+          }, [Symbol.dispose]: () => {
+          } };
+        }
+        destroy(t) {
+          if (this[O]) return t ? this.emit("error", t) : this.emit(O), this;
+          this[O] = true, this[D] = true, this[T].length = 0, this[C] = 0;
+          let e = this;
+          return typeof e.close == "function" && !this[It] && e.close(), t ? this.emit("error", t) : this.emit(O), this;
+        }
+        static get isStream() {
+          return P.isStream;
+        }
+      };
+      P.Minipass = qt;
+    });
+    var Ms = R((_) => {
+      "use strict";
+      var gr = _ && _.__createBinding || (Object.create ? (function(n, t, e, s) {
+        s === void 0 && (s = e);
+        var i = Object.getOwnPropertyDescriptor(t, e);
+        (!i || ("get" in i ? !t.__esModule : i.writable || i.configurable)) && (i = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return t[e];
+        }, "get") }), Object.defineProperty(n, s, i);
+      }) : (function(n, t, e, s) {
+        s === void 0 && (s = e), n[s] = t[e];
+      })), wr = _ && _.__setModuleDefault || (Object.create ? (function(n, t) {
+        Object.defineProperty(n, "default", { enumerable: true, value: t });
+      }) : function(n, t) {
+        n.default = t;
+      }), br = _ && _.__importStar || function(n) {
+        if (n && n.__esModule) return n;
+        var t = {};
+        if (n != null) for (var e in n) e !== "default" && Object.prototype.hasOwnProperty.call(n, e) && gr(t, n, e);
+        return wr(t, n), t;
+      };
+      Object.defineProperty(_, "__esModule", { value: true });
+      _.PathScurry = _.Path = _.PathScurryDarwin = _.PathScurryPosix = _.PathScurryWin32 = _.PathScurryBase = _.PathPosix = _.PathWin32 = _.PathBase = _.ChildrenCache = _.ResolveCache = void 0;
+      var Qt = fs(), Yt = require("node:path"), yr = require("node:url"), pt = require("fs"), Sr = br(require("node:fs")), vr = pt.realpathSync.native, Ht = require("node:fs/promises"), bs = Oe(), mt = { lstatSync: pt.lstatSync, readdir: pt.readdir, readdirSync: pt.readdirSync, readlinkSync: pt.readlinkSync, realpathSync: vr, promises: { lstat: Ht.lstat, readdir: Ht.readdir, readlink: Ht.readlink, realpath: Ht.realpath } }, _s = /* @__PURE__ */ __name((n) => !n || n === mt || n === Sr ? mt : { ...mt, ...n, promises: { ...mt.promises, ...n.promises || {} } }, "_s"), Os = /^\\\\\?\\([a-z]:)\\?$/i, Er = /* @__PURE__ */ __name((n) => n.replace(/\//g, "\\").replace(Os, "$1\\"), "Er"), _r = /[\\\/]/, N = 0, xs = 1, Ts = 2, G = 4, Cs = 6, Rs = 8, Q = 10, As = 12, j = 15, dt = ~j, xe = 16, ys = 32, gt = 64, W = 128, Vt = 256, Xt = 512, Ss = gt | W | Xt, Or = 1023, Te = /* @__PURE__ */ __name((n) => n.isFile() ? Rs : n.isDirectory() ? G : n.isSymbolicLink() ? Q : n.isCharacterDevice() ? Ts : n.isBlockDevice() ? Cs : n.isSocket() ? As : n.isFIFO() ? xs : N, "Te"), vs = new Qt.LRUCache({ max: 2 ** 12 }), wt = /* @__PURE__ */ __name((n) => {
+        let t = vs.get(n);
+        if (t) return t;
+        let e = n.normalize("NFKD");
+        return vs.set(n, e), e;
+      }, "wt"), Es = new Qt.LRUCache({ max: 2 ** 12 }), Kt = /* @__PURE__ */ __name((n) => {
+        let t = Es.get(n);
+        if (t) return t;
+        let e = wt(n.toLowerCase());
+        return Es.set(n, e), e;
+      }, "Kt"), bt = class extends Qt.LRUCache {
+        static {
+          __name(this, "bt");
+        }
+        constructor() {
+          super({ max: 256 });
+        }
+      };
+      _.ResolveCache = bt;
+      var Jt = class extends Qt.LRUCache {
+        static {
+          __name(this, "Jt");
+        }
+        constructor(t = 16 * 1024) {
+          super({ maxSize: t, sizeCalculation: /* @__PURE__ */ __name((e) => e.length + 1, "sizeCalculation") });
+        }
+      };
+      _.ChildrenCache = Jt;
+      var ks = Symbol("PathScurry setAsCwd"), A = class {
+        static {
+          __name(this, "A");
+        }
+        name;
+        root;
+        roots;
+        parent;
+        nocase;
+        isCWD = false;
+        #t;
+        #s;
+        get dev() {
+          return this.#s;
+        }
+        #n;
+        get mode() {
+          return this.#n;
+        }
+        #r;
+        get nlink() {
+          return this.#r;
+        }
+        #h;
+        get uid() {
+          return this.#h;
+        }
+        #S;
+        get gid() {
+          return this.#S;
+        }
+        #w;
+        get rdev() {
+          return this.#w;
+        }
+        #c;
+        get blksize() {
+          return this.#c;
+        }
+        #o;
+        get ino() {
+          return this.#o;
+        }
+        #f;
+        get size() {
+          return this.#f;
+        }
+        #u;
+        get blocks() {
+          return this.#u;
+        }
+        #a;
+        get atimeMs() {
+          return this.#a;
+        }
+        #i;
+        get mtimeMs() {
+          return this.#i;
+        }
+        #d;
+        get ctimeMs() {
+          return this.#d;
+        }
+        #v;
+        get birthtimeMs() {
+          return this.#v;
+        }
+        #y;
+        get atime() {
+          return this.#y;
+        }
+        #p;
+        get mtime() {
+          return this.#p;
+        }
+        #R;
+        get ctime() {
+          return this.#R;
+        }
+        #m;
+        get birthtime() {
+          return this.#m;
+        }
+        #O;
+        #x;
+        #g;
+        #b;
+        #E;
+        #T;
+        #e;
+        #F;
+        #P;
+        #C;
+        get parentPath() {
+          return (this.parent || this).fullpath();
+        }
+        get path() {
+          return this.parentPath;
+        }
+        constructor(t, e = N, s, i, r, h, o) {
+          this.name = t, this.#O = r ? Kt(t) : wt(t), this.#e = e & Or, this.nocase = r, this.roots = i, this.root = s || this, this.#F = h, this.#g = o.fullpath, this.#E = o.relative, this.#T = o.relativePosix, this.parent = o.parent, this.parent ? this.#t = this.parent.#t : this.#t = _s(o.fs);
+        }
+        depth() {
+          return this.#x !== void 0 ? this.#x : this.parent ? this.#x = this.parent.depth() + 1 : this.#x = 0;
+        }
+        childrenCache() {
+          return this.#F;
+        }
+        resolve(t) {
+          if (!t) return this;
+          let e = this.getRootString(t), i = t.substring(e.length).split(this.splitSep);
+          return e ? this.getRoot(e).#D(i) : this.#D(i);
+        }
+        #D(t) {
+          let e = this;
+          for (let s of t) e = e.child(s);
+          return e;
+        }
+        children() {
+          let t = this.#F.get(this);
+          if (t) return t;
+          let e = Object.assign([], { provisional: 0 });
+          return this.#F.set(this, e), this.#e &= ~xe, e;
+        }
+        child(t, e) {
+          if (t === "" || t === ".") return this;
+          if (t === "..") return this.parent || this;
+          let s = this.children(), i = this.nocase ? Kt(t) : wt(t);
+          for (let a of s) if (a.#O === i) return a;
+          let r = this.parent ? this.sep : "", h = this.#g ? this.#g + r + t : void 0, o = this.newChild(t, N, { ...e, parent: this, fullpath: h });
+          return this.canReaddir() || (o.#e |= W), s.push(o), o;
+        }
+        relative() {
+          if (this.isCWD) return "";
+          if (this.#E !== void 0) return this.#E;
+          let t = this.name, e = this.parent;
+          if (!e) return this.#E = this.name;
+          let s = e.relative();
+          return s + (!s || !e.parent ? "" : this.sep) + t;
+        }
+        relativePosix() {
+          if (this.sep === "/") return this.relative();
+          if (this.isCWD) return "";
+          if (this.#T !== void 0) return this.#T;
+          let t = this.name, e = this.parent;
+          if (!e) return this.#T = this.fullpathPosix();
+          let s = e.relativePosix();
+          return s + (!s || !e.parent ? "" : "/") + t;
+        }
+        fullpath() {
+          if (this.#g !== void 0) return this.#g;
+          let t = this.name, e = this.parent;
+          if (!e) return this.#g = this.name;
+          let i = e.fullpath() + (e.parent ? this.sep : "") + t;
+          return this.#g = i;
+        }
+        fullpathPosix() {
+          if (this.#b !== void 0) return this.#b;
+          if (this.sep === "/") return this.#b = this.fullpath();
+          if (!this.parent) {
+            let i = this.fullpath().replace(/\\/g, "/");
+            return /^[a-z]:\//i.test(i) ? this.#b = `//?/${i}` : this.#b = i;
+          }
+          let t = this.parent, e = t.fullpathPosix(), s = e + (!e || !t.parent ? "" : "/") + this.name;
+          return this.#b = s;
+        }
+        isUnknown() {
+          return (this.#e & j) === N;
+        }
+        isType(t) {
+          return this[`is${t}`]();
+        }
+        getType() {
+          return this.isUnknown() ? "Unknown" : this.isDirectory() ? "Directory" : this.isFile() ? "File" : this.isSymbolicLink() ? "SymbolicLink" : this.isFIFO() ? "FIFO" : this.isCharacterDevice() ? "CharacterDevice" : this.isBlockDevice() ? "BlockDevice" : this.isSocket() ? "Socket" : "Unknown";
+        }
+        isFile() {
+          return (this.#e & j) === Rs;
+        }
+        isDirectory() {
+          return (this.#e & j) === G;
+        }
+        isCharacterDevice() {
+          return (this.#e & j) === Ts;
+        }
+        isBlockDevice() {
+          return (this.#e & j) === Cs;
+        }
+        isFIFO() {
+          return (this.#e & j) === xs;
+        }
+        isSocket() {
+          return (this.#e & j) === As;
+        }
+        isSymbolicLink() {
+          return (this.#e & Q) === Q;
+        }
+        lstatCached() {
+          return this.#e & ys ? this : void 0;
+        }
+        readlinkCached() {
+          return this.#P;
+        }
+        realpathCached() {
+          return this.#C;
+        }
+        readdirCached() {
+          let t = this.children();
+          return t.slice(0, t.provisional);
+        }
+        canReadlink() {
+          if (this.#P) return true;
+          if (!this.parent) return false;
+          let t = this.#e & j;
+          return !(t !== N && t !== Q || this.#e & Vt || this.#e & W);
+        }
+        calledReaddir() {
+          return !!(this.#e & xe);
+        }
+        isENOENT() {
+          return !!(this.#e & W);
+        }
+        isNamed(t) {
+          return this.nocase ? this.#O === Kt(t) : this.#O === wt(t);
+        }
+        async readlink() {
+          let t = this.#P;
+          if (t) return t;
+          if (this.canReadlink() && this.parent) try {
+            let e = await this.#t.promises.readlink(this.fullpath()), s = (await this.parent.realpath())?.resolve(e);
+            if (s) return this.#P = s;
+          } catch (e) {
+            this.#M(e.code);
+            return;
+          }
+        }
+        readlinkSync() {
+          let t = this.#P;
+          if (t) return t;
+          if (this.canReadlink() && this.parent) try {
+            let e = this.#t.readlinkSync(this.fullpath()), s = this.parent.realpathSync()?.resolve(e);
+            if (s) return this.#P = s;
+          } catch (e) {
+            this.#M(e.code);
+            return;
+          }
+        }
+        #W(t) {
+          this.#e |= xe;
+          for (let e = t.provisional; e < t.length; e++) {
+            let s = t[e];
+            s && s.#_();
+          }
+        }
+        #_() {
+          this.#e & W || (this.#e = (this.#e | W) & dt, this.#$());
+        }
+        #$() {
+          let t = this.children();
+          t.provisional = 0;
+          for (let e of t) e.#_();
+        }
+        #L() {
+          this.#e |= Xt, this.#j();
+        }
+        #j() {
+          if (this.#e & gt) return;
+          let t = this.#e;
+          (t & j) === G && (t &= dt), this.#e = t | gt, this.#$();
+        }
+        #B(t = "") {
+          t === "ENOTDIR" || t === "EPERM" ? this.#j() : t === "ENOENT" ? this.#_() : this.children().provisional = 0;
+        }
+        #k(t = "") {
+          t === "ENOTDIR" ? this.parent.#j() : t === "ENOENT" && this.#_();
+        }
+        #M(t = "") {
+          let e = this.#e;
+          e |= Vt, t === "ENOENT" && (e |= W), (t === "EINVAL" || t === "UNKNOWN") && (e &= dt), this.#e = e, t === "ENOTDIR" && this.parent && this.parent.#j();
+        }
+        #I(t, e) {
+          return this.#z(t, e) || this.#G(t, e);
+        }
+        #G(t, e) {
+          let s = Te(t), i = this.newChild(t.name, s, { parent: this }), r = i.#e & j;
+          return r !== G && r !== Q && r !== N && (i.#e |= gt), e.unshift(i), e.provisional++, i;
+        }
+        #z(t, e) {
+          for (let s = e.provisional; s < e.length; s++) {
+            let i = e[s];
+            if ((this.nocase ? Kt(t.name) : wt(t.name)) === i.#O) return this.#l(t, i, s, e);
+          }
+        }
+        #l(t, e, s, i) {
+          let r = e.name;
+          return e.#e = e.#e & dt | Te(t), r !== t.name && (e.name = t.name), s !== i.provisional && (s === i.length - 1 ? i.pop() : i.splice(s, 1), i.unshift(e)), i.provisional++, e;
+        }
+        async lstat() {
+          if ((this.#e & W) === 0) try {
+            return this.#U(await this.#t.promises.lstat(this.fullpath())), this;
+          } catch (t) {
+            this.#k(t.code);
+          }
+        }
+        lstatSync() {
+          if ((this.#e & W) === 0) try {
+            return this.#U(this.#t.lstatSync(this.fullpath())), this;
+          } catch (t) {
+            this.#k(t.code);
+          }
+        }
+        #U(t) {
+          let { atime: e, atimeMs: s, birthtime: i, birthtimeMs: r, blksize: h, blocks: o, ctime: a, ctimeMs: l, dev: f, gid: c, ino: d, mode: u, mtime: m, mtimeMs: p, nlink: b, rdev: w, size: v, uid: E } = t;
+          this.#y = e, this.#a = s, this.#m = i, this.#v = r, this.#c = h, this.#u = o, this.#R = a, this.#d = l, this.#s = f, this.#S = c, this.#o = d, this.#n = u, this.#p = m, this.#i = p, this.#r = b, this.#w = w, this.#f = v, this.#h = E;
+          let y = Te(t);
+          this.#e = this.#e & dt | y | ys, y !== N && y !== G && y !== Q && (this.#e |= gt);
+        }
+        #N = [];
+        #A = false;
+        #q(t) {
+          this.#A = false;
+          let e = this.#N.slice();
+          this.#N.length = 0, e.forEach((s) => s(null, t));
+        }
+        readdirCB(t, e = false) {
+          if (!this.canReaddir()) {
+            e ? t(null, []) : queueMicrotask(() => t(null, []));
+            return;
+          }
+          let s = this.children();
+          if (this.calledReaddir()) {
+            let r = s.slice(0, s.provisional);
+            e ? t(null, r) : queueMicrotask(() => t(null, r));
+            return;
+          }
+          if (this.#N.push(t), this.#A) return;
+          this.#A = true;
+          let i = this.fullpath();
+          this.#t.readdir(i, { withFileTypes: true }, (r, h) => {
+            if (r) this.#B(r.code), s.provisional = 0;
+            else {
+              for (let o of h) this.#I(o, s);
+              this.#W(s);
+            }
+            this.#q(s.slice(0, s.provisional));
+          });
+        }
+        #H;
+        async readdir() {
+          if (!this.canReaddir()) return [];
+          let t = this.children();
+          if (this.calledReaddir()) return t.slice(0, t.provisional);
+          let e = this.fullpath();
+          if (this.#H) await this.#H;
+          else {
+            let s = /* @__PURE__ */ __name(() => {
+            }, "s");
+            this.#H = new Promise((i) => s = i);
+            try {
+              for (let i of await this.#t.promises.readdir(e, { withFileTypes: true })) this.#I(i, t);
+              this.#W(t);
+            } catch (i) {
+              this.#B(i.code), t.provisional = 0;
+            }
+            this.#H = void 0, s();
+          }
+          return t.slice(0, t.provisional);
+        }
+        readdirSync() {
+          if (!this.canReaddir()) return [];
+          let t = this.children();
+          if (this.calledReaddir()) return t.slice(0, t.provisional);
+          let e = this.fullpath();
+          try {
+            for (let s of this.#t.readdirSync(e, { withFileTypes: true })) this.#I(s, t);
+            this.#W(t);
+          } catch (s) {
+            this.#B(s.code), t.provisional = 0;
+          }
+          return t.slice(0, t.provisional);
+        }
+        canReaddir() {
+          if (this.#e & Ss) return false;
+          let t = j & this.#e;
+          return t === N || t === G || t === Q;
+        }
+        shouldWalk(t, e) {
+          return (this.#e & G) === G && !(this.#e & Ss) && !t.has(this) && (!e || e(this));
+        }
+        async realpath() {
+          if (this.#C) return this.#C;
+          if (!((Xt | Vt | W) & this.#e)) try {
+            let t = await this.#t.promises.realpath(this.fullpath());
+            return this.#C = this.resolve(t);
+          } catch {
+            this.#L();
+          }
+        }
+        realpathSync() {
+          if (this.#C) return this.#C;
+          if (!((Xt | Vt | W) & this.#e)) try {
+            let t = this.#t.realpathSync(this.fullpath());
+            return this.#C = this.resolve(t);
+          } catch {
+            this.#L();
+          }
+        }
+        [ks](t) {
+          if (t === this) return;
+          t.isCWD = false, this.isCWD = true;
+          let e = /* @__PURE__ */ new Set([]), s = [], i = this;
+          for (; i && i.parent; ) e.add(i), i.#E = s.join(this.sep), i.#T = s.join("/"), i = i.parent, s.push("..");
+          for (i = t; i && i.parent && !e.has(i); ) i.#E = void 0, i.#T = void 0, i = i.parent;
+        }
+      };
+      _.PathBase = A;
+      var yt = class n extends A {
+        static {
+          __name(this, "n");
+        }
+        sep = "\\";
+        splitSep = _r;
+        constructor(t, e = N, s, i, r, h, o) {
+          super(t, e, s, i, r, h, o);
+        }
+        newChild(t, e = N, s = {}) {
+          return new n(t, e, this.root, this.roots, this.nocase, this.childrenCache(), s);
+        }
+        getRootString(t) {
+          return Yt.win32.parse(t).root;
+        }
+        getRoot(t) {
+          if (t = Er(t.toUpperCase()), t === this.root.name) return this.root;
+          for (let [e, s] of Object.entries(this.roots)) if (this.sameRoot(t, e)) return this.roots[t] = s;
+          return this.roots[t] = new Et(t, this).root;
+        }
+        sameRoot(t, e = this.root.name) {
+          return t = t.toUpperCase().replace(/\//g, "\\").replace(Os, "$1\\"), t === e;
+        }
+      };
+      _.PathWin32 = yt;
+      var St = class n extends A {
+        static {
+          __name(this, "n");
+        }
+        splitSep = "/";
+        sep = "/";
+        constructor(t, e = N, s, i, r, h, o) {
+          super(t, e, s, i, r, h, o);
+        }
+        getRootString(t) {
+          return t.startsWith("/") ? "/" : "";
+        }
+        getRoot(t) {
+          return this.root;
+        }
+        newChild(t, e = N, s = {}) {
+          return new n(t, e, this.root, this.roots, this.nocase, this.childrenCache(), s);
+        }
+      };
+      _.PathPosix = St;
+      var vt = class {
+        static {
+          __name(this, "vt");
+        }
+        root;
+        rootPath;
+        roots;
+        cwd;
+        #t;
+        #s;
+        #n;
+        nocase;
+        #r;
+        constructor(t = process.cwd(), e, s, { nocase: i, childrenCacheSize: r = 16 * 1024, fs: h = mt } = {}) {
+          this.#r = _s(h), (t instanceof URL || t.startsWith("file://")) && (t = (0, yr.fileURLToPath)(t));
+          let o = e.resolve(t);
+          this.roots = /* @__PURE__ */ Object.create(null), this.rootPath = this.parseRootPath(o), this.#t = new bt(), this.#s = new bt(), this.#n = new Jt(r);
+          let a = o.substring(this.rootPath.length).split(s);
+          if (a.length === 1 && !a[0] && a.pop(), i === void 0) throw new TypeError("must provide nocase setting to PathScurryBase ctor");
+          this.nocase = i, this.root = this.newRoot(this.#r), this.roots[this.rootPath] = this.root;
+          let l = this.root, f = a.length - 1, c = e.sep, d = this.rootPath, u = false;
+          for (let m of a) {
+            let p = f--;
+            l = l.child(m, { relative: new Array(p).fill("..").join(c), relativePosix: new Array(p).fill("..").join("/"), fullpath: d += (u ? "" : c) + m }), u = true;
+          }
+          this.cwd = l;
+        }
+        depth(t = this.cwd) {
+          return typeof t == "string" && (t = this.cwd.resolve(t)), t.depth();
+        }
+        childrenCache() {
+          return this.#n;
+        }
+        resolve(...t) {
+          let e = "";
+          for (let r = t.length - 1; r >= 0; r--) {
+            let h = t[r];
+            if (!(!h || h === ".") && (e = e ? `${h}/${e}` : h, this.isAbsolute(h))) break;
+          }
+          let s = this.#t.get(e);
+          if (s !== void 0) return s;
+          let i = this.cwd.resolve(e).fullpath();
+          return this.#t.set(e, i), i;
+        }
+        resolvePosix(...t) {
+          let e = "";
+          for (let r = t.length - 1; r >= 0; r--) {
+            let h = t[r];
+            if (!(!h || h === ".") && (e = e ? `${h}/${e}` : h, this.isAbsolute(h))) break;
+          }
+          let s = this.#s.get(e);
+          if (s !== void 0) return s;
+          let i = this.cwd.resolve(e).fullpathPosix();
+          return this.#s.set(e, i), i;
+        }
+        relative(t = this.cwd) {
+          return typeof t == "string" && (t = this.cwd.resolve(t)), t.relative();
+        }
+        relativePosix(t = this.cwd) {
+          return typeof t == "string" && (t = this.cwd.resolve(t)), t.relativePosix();
+        }
+        basename(t = this.cwd) {
+          return typeof t == "string" && (t = this.cwd.resolve(t)), t.name;
+        }
+        dirname(t = this.cwd) {
+          return typeof t == "string" && (t = this.cwd.resolve(t)), (t.parent || t).fullpath();
+        }
+        async readdir(t = this.cwd, e = { withFileTypes: true }) {
+          typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd);
+          let { withFileTypes: s } = e;
+          if (t.canReaddir()) {
+            let i = await t.readdir();
+            return s ? i : i.map((r) => r.name);
+          } else return [];
+        }
+        readdirSync(t = this.cwd, e = { withFileTypes: true }) {
+          typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd);
+          let { withFileTypes: s = true } = e;
+          return t.canReaddir() ? s ? t.readdirSync() : t.readdirSync().map((i) => i.name) : [];
+        }
+        async lstat(t = this.cwd) {
+          return typeof t == "string" && (t = this.cwd.resolve(t)), t.lstat();
+        }
+        lstatSync(t = this.cwd) {
+          return typeof t == "string" && (t = this.cwd.resolve(t)), t.lstatSync();
+        }
+        async readlink(t = this.cwd, { withFileTypes: e } = { withFileTypes: false }) {
+          typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t.withFileTypes, t = this.cwd);
+          let s = await t.readlink();
+          return e ? s : s?.fullpath();
+        }
+        readlinkSync(t = this.cwd, { withFileTypes: e } = { withFileTypes: false }) {
+          typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t.withFileTypes, t = this.cwd);
+          let s = t.readlinkSync();
+          return e ? s : s?.fullpath();
+        }
+        async realpath(t = this.cwd, { withFileTypes: e } = { withFileTypes: false }) {
+          typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t.withFileTypes, t = this.cwd);
+          let s = await t.realpath();
+          return e ? s : s?.fullpath();
+        }
+        realpathSync(t = this.cwd, { withFileTypes: e } = { withFileTypes: false }) {
+          typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t.withFileTypes, t = this.cwd);
+          let s = t.realpathSync();
+          return e ? s : s?.fullpath();
+        }
+        async walk(t = this.cwd, e = {}) {
+          typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd);
+          let { withFileTypes: s = true, follow: i = false, filter: r, walkFilter: h } = e, o = [];
+          (!r || r(t)) && o.push(s ? t : t.fullpath());
+          let a = /* @__PURE__ */ new Set(), l = /* @__PURE__ */ __name((c, d) => {
+            a.add(c), c.readdirCB((u, m) => {
+              if (u) return d(u);
+              let p = m.length;
+              if (!p) return d();
+              let b = /* @__PURE__ */ __name(() => {
+                --p === 0 && d();
+              }, "b");
+              for (let w of m) (!r || r(w)) && o.push(s ? w : w.fullpath()), i && w.isSymbolicLink() ? w.realpath().then((v) => v?.isUnknown() ? v.lstat() : v).then((v) => v?.shouldWalk(a, h) ? l(v, b) : b()) : w.shouldWalk(a, h) ? l(w, b) : b();
+            }, true);
+          }, "l"), f = t;
+          return new Promise((c, d) => {
+            l(f, (u) => {
+              if (u) return d(u);
+              c(o);
+            });
+          });
+        }
+        walkSync(t = this.cwd, e = {}) {
+          typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd);
+          let { withFileTypes: s = true, follow: i = false, filter: r, walkFilter: h } = e, o = [];
+          (!r || r(t)) && o.push(s ? t : t.fullpath());
+          let a = /* @__PURE__ */ new Set([t]);
+          for (let l of a) {
+            let f = l.readdirSync();
+            for (let c of f) {
+              (!r || r(c)) && o.push(s ? c : c.fullpath());
+              let d = c;
+              if (c.isSymbolicLink()) {
+                if (!(i && (d = c.realpathSync()))) continue;
+                d.isUnknown() && d.lstatSync();
+              }
+              d.shouldWalk(a, h) && a.add(d);
+            }
+          }
+          return o;
+        }
+        [Symbol.asyncIterator]() {
+          return this.iterate();
+        }
+        iterate(t = this.cwd, e = {}) {
+          return typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd), this.stream(t, e)[Symbol.asyncIterator]();
+        }
+        [Symbol.iterator]() {
+          return this.iterateSync();
+        }
+        *iterateSync(t = this.cwd, e = {}) {
+          typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd);
+          let { withFileTypes: s = true, follow: i = false, filter: r, walkFilter: h } = e;
+          (!r || r(t)) && (yield s ? t : t.fullpath());
+          let o = /* @__PURE__ */ new Set([t]);
+          for (let a of o) {
+            let l = a.readdirSync();
+            for (let f of l) {
+              (!r || r(f)) && (yield s ? f : f.fullpath());
+              let c = f;
+              if (f.isSymbolicLink()) {
+                if (!(i && (c = f.realpathSync()))) continue;
+                c.isUnknown() && c.lstatSync();
+              }
+              c.shouldWalk(o, h) && o.add(c);
+            }
+          }
+        }
+        stream(t = this.cwd, e = {}) {
+          typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd);
+          let { withFileTypes: s = true, follow: i = false, filter: r, walkFilter: h } = e, o = new bs.Minipass({ objectMode: true });
+          (!r || r(t)) && o.write(s ? t : t.fullpath());
+          let a = /* @__PURE__ */ new Set(), l = [t], f = 0, c = /* @__PURE__ */ __name(() => {
+            let d = false;
+            for (; !d; ) {
+              let u = l.shift();
+              if (!u) {
+                f === 0 && o.end();
+                return;
+              }
+              f++, a.add(u);
+              let m = /* @__PURE__ */ __name((b, w, v = false) => {
+                if (b) return o.emit("error", b);
+                if (i && !v) {
+                  let E = [];
+                  for (let y of w) y.isSymbolicLink() && E.push(y.realpath().then((S) => S?.isUnknown() ? S.lstat() : S));
+                  if (E.length) {
+                    Promise.all(E).then(() => m(null, w, true));
+                    return;
+                  }
+                }
+                for (let E of w) E && (!r || r(E)) && (o.write(s ? E : E.fullpath()) || (d = true));
+                f--;
+                for (let E of w) {
+                  let y = E.realpathCached() || E;
+                  y.shouldWalk(a, h) && l.push(y);
+                }
+                d && !o.flowing ? o.once("drain", c) : p || c();
+              }, "m"), p = true;
+              u.readdirCB(m, true), p = false;
+            }
+          }, "c");
+          return c(), o;
+        }
+        streamSync(t = this.cwd, e = {}) {
+          typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd);
+          let { withFileTypes: s = true, follow: i = false, filter: r, walkFilter: h } = e, o = new bs.Minipass({ objectMode: true }), a = /* @__PURE__ */ new Set();
+          (!r || r(t)) && o.write(s ? t : t.fullpath());
+          let l = [t], f = 0, c = /* @__PURE__ */ __name(() => {
+            let d = false;
+            for (; !d; ) {
+              let u = l.shift();
+              if (!u) {
+                f === 0 && o.end();
+                return;
+              }
+              f++, a.add(u);
+              let m = u.readdirSync();
+              for (let p of m) (!r || r(p)) && (o.write(s ? p : p.fullpath()) || (d = true));
+              f--;
+              for (let p of m) {
+                let b = p;
+                if (p.isSymbolicLink()) {
+                  if (!(i && (b = p.realpathSync()))) continue;
+                  b.isUnknown() && b.lstatSync();
+                }
+                b.shouldWalk(a, h) && l.push(b);
+              }
+            }
+            d && !o.flowing && o.once("drain", c);
+          }, "c");
+          return c(), o;
+        }
+        chdir(t = this.cwd) {
+          let e = this.cwd;
+          this.cwd = typeof t == "string" ? this.cwd.resolve(t) : t, this.cwd[ks](e);
+        }
+      };
+      _.PathScurryBase = vt;
+      var Et = class extends vt {
+        static {
+          __name(this, "Et");
+        }
+        sep = "\\";
+        constructor(t = process.cwd(), e = {}) {
+          let { nocase: s = true } = e;
+          super(t, Yt.win32, "\\", { ...e, nocase: s }), this.nocase = s;
+          for (let i = this.cwd; i; i = i.parent) i.nocase = this.nocase;
+        }
+        parseRootPath(t) {
+          return Yt.win32.parse(t).root.toUpperCase();
+        }
+        newRoot(t) {
+          return new yt(this.rootPath, G, void 0, this.roots, this.nocase, this.childrenCache(), { fs: t });
+        }
+        isAbsolute(t) {
+          return t.startsWith("/") || t.startsWith("\\") || /^[a-z]:(\/|\\)/i.test(t);
+        }
+      };
+      _.PathScurryWin32 = Et;
+      var _t = class extends vt {
+        static {
+          __name(this, "_t");
+        }
+        sep = "/";
+        constructor(t = process.cwd(), e = {}) {
+          let { nocase: s = false } = e;
+          super(t, Yt.posix, "/", { ...e, nocase: s }), this.nocase = s;
+        }
+        parseRootPath(t) {
+          return "/";
+        }
+        newRoot(t) {
+          return new St(this.rootPath, G, void 0, this.roots, this.nocase, this.childrenCache(), { fs: t });
+        }
+        isAbsolute(t) {
+          return t.startsWith("/");
+        }
+      };
+      _.PathScurryPosix = _t;
+      var Zt = class extends _t {
+        static {
+          __name(this, "Zt");
+        }
+        constructor(t = process.cwd(), e = {}) {
+          let { nocase: s = true } = e;
+          super(t, { ...e, nocase: s });
+        }
+      };
+      _.PathScurryDarwin = Zt;
+      _.Path = process.platform === "win32" ? yt : St;
+      _.PathScurry = process.platform === "win32" ? Et : process.platform === "darwin" ? Zt : _t;
+    });
+    var Re = R((te) => {
+      "use strict";
+      Object.defineProperty(te, "__esModule", { value: true });
+      te.Pattern = void 0;
+      var xr = H(), Tr = /* @__PURE__ */ __name((n) => n.length >= 1, "Tr"), Cr = /* @__PURE__ */ __name((n) => n.length >= 1, "Cr"), Rr = Symbol.for("nodejs.util.inspect.custom"), Ce = class n {
+        static {
+          __name(this, "n");
+        }
+        #t;
+        #s;
+        #n;
+        length;
+        #r;
+        #h;
+        #S;
+        #w;
+        #c;
+        #o;
+        #f = true;
+        constructor(t, e, s, i) {
+          if (!Tr(t)) throw new TypeError("empty pattern list");
+          if (!Cr(e)) throw new TypeError("empty glob list");
+          if (e.length !== t.length) throw new TypeError("mismatched pattern list and glob list lengths");
+          if (this.length = t.length, s < 0 || s >= this.length) throw new TypeError("index out of range");
+          if (this.#t = t, this.#s = e, this.#n = s, this.#r = i, this.#n === 0) {
+            if (this.isUNC()) {
+              let [r, h, o, a, ...l] = this.#t, [f, c, d, u, ...m] = this.#s;
+              l[0] === "" && (l.shift(), m.shift());
+              let p = [r, h, o, a, ""].join("/"), b = [f, c, d, u, ""].join("/");
+              this.#t = [p, ...l], this.#s = [b, ...m], this.length = this.#t.length;
+            } else if (this.isDrive() || this.isAbsolute()) {
+              let [r, ...h] = this.#t, [o, ...a] = this.#s;
+              h[0] === "" && (h.shift(), a.shift());
+              let l = r + "/", f = o + "/";
+              this.#t = [l, ...h], this.#s = [f, ...a], this.length = this.#t.length;
+            }
+          }
+        }
+        [Rr]() {
+          return "Pattern <" + this.#s.slice(this.#n).join("/") + ">";
+        }
+        pattern() {
+          return this.#t[this.#n];
+        }
+        isString() {
+          return typeof this.#t[this.#n] == "string";
+        }
+        isGlobstar() {
+          return this.#t[this.#n] === xr.GLOBSTAR;
+        }
+        isRegExp() {
+          return this.#t[this.#n] instanceof RegExp;
+        }
+        globString() {
+          return this.#S = this.#S || (this.#n === 0 ? this.isAbsolute() ? this.#s[0] + this.#s.slice(1).join("/") : this.#s.join("/") : this.#s.slice(this.#n).join("/"));
+        }
+        hasMore() {
+          return this.length > this.#n + 1;
+        }
+        rest() {
+          return this.#h !== void 0 ? this.#h : this.hasMore() ? (this.#h = new n(this.#t, this.#s, this.#n + 1, this.#r), this.#h.#o = this.#o, this.#h.#c = this.#c, this.#h.#w = this.#w, this.#h) : this.#h = null;
+        }
+        isUNC() {
+          let t = this.#t;
+          return this.#c !== void 0 ? this.#c : this.#c = this.#r === "win32" && this.#n === 0 && t[0] === "" && t[1] === "" && typeof t[2] == "string" && !!t[2] && typeof t[3] == "string" && !!t[3];
+        }
+        isDrive() {
+          let t = this.#t;
+          return this.#w !== void 0 ? this.#w : this.#w = this.#r === "win32" && this.#n === 0 && this.length > 1 && typeof t[0] == "string" && /^[a-z]:$/i.test(t[0]);
+        }
+        isAbsolute() {
+          let t = this.#t;
+          return this.#o !== void 0 ? this.#o : this.#o = t[0] === "" && t.length > 1 || this.isDrive() || this.isUNC();
+        }
+        root() {
+          let t = this.#t[0];
+          return typeof t == "string" && this.isAbsolute() && this.#n === 0 ? t : "";
+        }
+        checkFollowGlobstar() {
+          return !(this.#n === 0 || !this.isGlobstar() || !this.#f);
+        }
+        markFollowGlobstar() {
+          return this.#n === 0 || !this.isGlobstar() || !this.#f ? false : (this.#f = false, true);
+        }
+      };
+      te.Pattern = Ce;
+    });
+    var ke = R((ee) => {
+      "use strict";
+      Object.defineProperty(ee, "__esModule", { value: true });
+      ee.Ignore = void 0;
+      var Ps = H(), Ar = Re(), kr = typeof process == "object" && process && typeof process.platform == "string" ? process.platform : "linux", Ae = class {
+        static {
+          __name(this, "Ae");
+        }
+        relative;
+        relativeChildren;
+        absolute;
+        absoluteChildren;
+        platform;
+        mmopts;
+        constructor(t, { nobrace: e, nocase: s, noext: i, noglobstar: r, platform: h = kr }) {
+          this.relative = [], this.absolute = [], this.relativeChildren = [], this.absoluteChildren = [], this.platform = h, this.mmopts = { dot: true, nobrace: e, nocase: s, noext: i, noglobstar: r, optimizationLevel: 2, platform: h, nocomment: true, nonegate: true };
+          for (let o of t) this.add(o);
+        }
+        add(t) {
+          let e = new Ps.Minimatch(t, this.mmopts);
+          for (let s = 0; s < e.set.length; s++) {
+            let i = e.set[s], r = e.globParts[s];
+            if (!i || !r) throw new Error("invalid pattern object");
+            for (; i[0] === "." && r[0] === "."; ) i.shift(), r.shift();
+            let h = new Ar.Pattern(i, r, 0, this.platform), o = new Ps.Minimatch(h.globString(), this.mmopts), a = r[r.length - 1] === "**", l = h.isAbsolute();
+            l ? this.absolute.push(o) : this.relative.push(o), a && (l ? this.absoluteChildren.push(o) : this.relativeChildren.push(o));
+          }
+        }
+        ignored(t) {
+          let e = t.fullpath(), s = `${e}/`, i = t.relative() || ".", r = `${i}/`;
+          for (let h of this.relative) if (h.match(i) || h.match(r)) return true;
+          for (let h of this.absolute) if (h.match(e) || h.match(s)) return true;
+          return false;
+        }
+        childrenIgnored(t) {
+          let e = t.fullpath() + "/", s = (t.relative() || ".") + "/";
+          for (let i of this.relativeChildren) if (i.match(s)) return true;
+          for (let i of this.absoluteChildren) if (i.match(e)) return true;
+          return false;
+        }
+      };
+      ee.Ignore = Ae;
+    });
+    var Fs = R((z) => {
+      "use strict";
+      Object.defineProperty(z, "__esModule", { value: true });
+      z.Processor = z.SubWalks = z.MatchRecord = z.HasWalkedCache = void 0;
+      var Ds = H(), se = class n {
+        static {
+          __name(this, "n");
+        }
+        store;
+        constructor(t = /* @__PURE__ */ new Map()) {
+          this.store = t;
+        }
+        copy() {
+          return new n(new Map(this.store));
+        }
+        hasWalked(t, e) {
+          return this.store.get(t.fullpath())?.has(e.globString());
+        }
+        storeWalked(t, e) {
+          let s = t.fullpath(), i = this.store.get(s);
+          i ? i.add(e.globString()) : this.store.set(s, /* @__PURE__ */ new Set([e.globString()]));
+        }
+      };
+      z.HasWalkedCache = se;
+      var ie = class {
+        static {
+          __name(this, "ie");
+        }
+        store = /* @__PURE__ */ new Map();
+        add(t, e, s) {
+          let i = (e ? 2 : 0) | (s ? 1 : 0), r = this.store.get(t);
+          this.store.set(t, r === void 0 ? i : i & r);
+        }
+        entries() {
+          return [...this.store.entries()].map(([t, e]) => [t, !!(e & 2), !!(e & 1)]);
+        }
+      };
+      z.MatchRecord = ie;
+      var re = class {
+        static {
+          __name(this, "re");
+        }
+        store = /* @__PURE__ */ new Map();
+        add(t, e) {
+          if (!t.canReaddir()) return;
+          let s = this.store.get(t);
+          s ? s.find((i) => i.globString() === e.globString()) || s.push(e) : this.store.set(t, [e]);
+        }
+        get(t) {
+          let e = this.store.get(t);
+          if (!e) throw new Error("attempting to walk unknown path");
+          return e;
+        }
+        entries() {
+          return this.keys().map((t) => [t, this.store.get(t)]);
+        }
+        keys() {
+          return [...this.store.keys()].filter((t) => t.canReaddir());
+        }
+      };
+      z.SubWalks = re;
+      var Me = class n {
+        static {
+          __name(this, "n");
+        }
+        hasWalkedCache;
+        matches = new ie();
+        subwalks = new re();
+        patterns;
+        follow;
+        dot;
+        opts;
+        constructor(t, e) {
+          this.opts = t, this.follow = !!t.follow, this.dot = !!t.dot, this.hasWalkedCache = e ? e.copy() : new se();
+        }
+        processPatterns(t, e) {
+          this.patterns = e;
+          let s = e.map((i) => [t, i]);
+          for (let [i, r] of s) {
+            this.hasWalkedCache.storeWalked(i, r);
+            let h = r.root(), o = r.isAbsolute() && this.opts.absolute !== false;
+            if (h) {
+              i = i.resolve(h === "/" && this.opts.root !== void 0 ? this.opts.root : h);
+              let c = r.rest();
+              if (c) r = c;
+              else {
+                this.matches.add(i, true, false);
+                continue;
+              }
+            }
+            if (i.isENOENT()) continue;
+            let a, l, f = false;
+            for (; typeof (a = r.pattern()) == "string" && (l = r.rest()); ) i = i.resolve(a), r = l, f = true;
+            if (a = r.pattern(), l = r.rest(), f) {
+              if (this.hasWalkedCache.hasWalked(i, r)) continue;
+              this.hasWalkedCache.storeWalked(i, r);
+            }
+            if (typeof a == "string") {
+              let c = a === ".." || a === "" || a === ".";
+              this.matches.add(i.resolve(a), o, c);
+              continue;
+            } else if (a === Ds.GLOBSTAR) {
+              (!i.isSymbolicLink() || this.follow || r.checkFollowGlobstar()) && this.subwalks.add(i, r);
+              let c = l?.pattern(), d = l?.rest();
+              if (!l || (c === "" || c === ".") && !d) this.matches.add(i, o, c === "" || c === ".");
+              else if (c === "..") {
+                let u = i.parent || i;
+                d ? this.hasWalkedCache.hasWalked(u, d) || this.subwalks.add(u, d) : this.matches.add(u, o, true);
+              }
+            } else a instanceof RegExp && this.subwalks.add(i, r);
+          }
+          return this;
+        }
+        subwalkTargets() {
+          return this.subwalks.keys();
+        }
+        child() {
+          return new n(this.opts, this.hasWalkedCache);
+        }
+        filterEntries(t, e) {
+          let s = this.subwalks.get(t), i = this.child();
+          for (let r of e) for (let h of s) {
+            let o = h.isAbsolute(), a = h.pattern(), l = h.rest();
+            a === Ds.GLOBSTAR ? i.testGlobstar(r, h, l, o) : a instanceof RegExp ? i.testRegExp(r, a, l, o) : i.testString(r, a, l, o);
+          }
+          return i;
+        }
+        testGlobstar(t, e, s, i) {
+          if ((this.dot || !t.name.startsWith(".")) && (e.hasMore() || this.matches.add(t, i, false), t.canReaddir() && (this.follow || !t.isSymbolicLink() ? this.subwalks.add(t, e) : t.isSymbolicLink() && (s && e.checkFollowGlobstar() ? this.subwalks.add(t, s) : e.markFollowGlobstar() && this.subwalks.add(t, e)))), s) {
+            let r = s.pattern();
+            if (typeof r == "string" && r !== ".." && r !== "" && r !== ".") this.testString(t, r, s.rest(), i);
+            else if (r === "..") {
+              let h = t.parent || t;
+              this.subwalks.add(h, s);
+            } else r instanceof RegExp && this.testRegExp(t, r, s.rest(), i);
+          }
+        }
+        testRegExp(t, e, s, i) {
+          e.test(t.name) && (s ? this.subwalks.add(t, s) : this.matches.add(t, i, false));
+        }
+        testString(t, e, s, i) {
+          t.isNamed(e) && (s ? this.subwalks.add(t, s) : this.matches.add(t, i, false));
+        }
+      };
+      z.Processor = Me;
+    });
+    var Ls = R((X) => {
+      "use strict";
+      Object.defineProperty(X, "__esModule", { value: true });
+      X.GlobStream = X.GlobWalker = X.GlobUtil = void 0;
+      var Mr = Oe(), js = ke(), Ns = Fs(), Pr = /* @__PURE__ */ __name((n, t) => typeof n == "string" ? new js.Ignore([n], t) : Array.isArray(n) ? new js.Ignore(n, t) : n, "Pr"), Ot = class {
+        static {
+          __name(this, "Ot");
+        }
+        path;
+        patterns;
+        opts;
+        seen = /* @__PURE__ */ new Set();
+        paused = false;
+        aborted = false;
+        #t = [];
+        #s;
+        #n;
+        signal;
+        maxDepth;
+        includeChildMatches;
+        constructor(t, e, s) {
+          if (this.patterns = t, this.path = e, this.opts = s, this.#n = !s.posix && s.platform === "win32" ? "\\" : "/", this.includeChildMatches = s.includeChildMatches !== false, (s.ignore || !this.includeChildMatches) && (this.#s = Pr(s.ignore ?? [], s), !this.includeChildMatches && typeof this.#s.add != "function")) {
+            let i = "cannot ignore child matches, ignore lacks add() method.";
+            throw new Error(i);
+          }
+          this.maxDepth = s.maxDepth || 1 / 0, s.signal && (this.signal = s.signal, this.signal.addEventListener("abort", () => {
+            this.#t.length = 0;
+          }));
+        }
+        #r(t) {
+          return this.seen.has(t) || !!this.#s?.ignored?.(t);
+        }
+        #h(t) {
+          return !!this.#s?.childrenIgnored?.(t);
+        }
+        pause() {
+          this.paused = true;
+        }
+        resume() {
+          if (this.signal?.aborted) return;
+          this.paused = false;
+          let t;
+          for (; !this.paused && (t = this.#t.shift()); ) t();
+        }
+        onResume(t) {
+          this.signal?.aborted || (this.paused ? this.#t.push(t) : t());
+        }
+        async matchCheck(t, e) {
+          if (e && this.opts.nodir) return;
+          let s;
+          if (this.opts.realpath) {
+            if (s = t.realpathCached() || await t.realpath(), !s) return;
+            t = s;
+          }
+          let r = t.isUnknown() || this.opts.stat ? await t.lstat() : t;
+          if (this.opts.follow && this.opts.nodir && r?.isSymbolicLink()) {
+            let h = await r.realpath();
+            h && (h.isUnknown() || this.opts.stat) && await h.lstat();
+          }
+          return this.matchCheckTest(r, e);
+        }
+        matchCheckTest(t, e) {
+          return t && (this.maxDepth === 1 / 0 || t.depth() <= this.maxDepth) && (!e || t.canReaddir()) && (!this.opts.nodir || !t.isDirectory()) && (!this.opts.nodir || !this.opts.follow || !t.isSymbolicLink() || !t.realpathCached()?.isDirectory()) && !this.#r(t) ? t : void 0;
+        }
+        matchCheckSync(t, e) {
+          if (e && this.opts.nodir) return;
+          let s;
+          if (this.opts.realpath) {
+            if (s = t.realpathCached() || t.realpathSync(), !s) return;
+            t = s;
+          }
+          let r = t.isUnknown() || this.opts.stat ? t.lstatSync() : t;
+          if (this.opts.follow && this.opts.nodir && r?.isSymbolicLink()) {
+            let h = r.realpathSync();
+            h && (h?.isUnknown() || this.opts.stat) && h.lstatSync();
+          }
+          return this.matchCheckTest(r, e);
+        }
+        matchFinish(t, e) {
+          if (this.#r(t)) return;
+          if (!this.includeChildMatches && this.#s?.add) {
+            let r = `${t.relativePosix()}/**`;
+            this.#s.add(r);
+          }
+          let s = this.opts.absolute === void 0 ? e : this.opts.absolute;
+          this.seen.add(t);
+          let i = this.opts.mark && t.isDirectory() ? this.#n : "";
+          if (this.opts.withFileTypes) this.matchEmit(t);
+          else if (s) {
+            let r = this.opts.posix ? t.fullpathPosix() : t.fullpath();
+            this.matchEmit(r + i);
+          } else {
+            let r = this.opts.posix ? t.relativePosix() : t.relative(), h = this.opts.dotRelative && !r.startsWith(".." + this.#n) ? "." + this.#n : "";
+            this.matchEmit(r ? h + r + i : "." + i);
+          }
+        }
+        async match(t, e, s) {
+          let i = await this.matchCheck(t, s);
+          i && this.matchFinish(i, e);
+        }
+        matchSync(t, e, s) {
+          let i = this.matchCheckSync(t, s);
+          i && this.matchFinish(i, e);
+        }
+        walkCB(t, e, s) {
+          this.signal?.aborted && s(), this.walkCB2(t, e, new Ns.Processor(this.opts), s);
+        }
+        walkCB2(t, e, s, i) {
+          if (this.#h(t)) return i();
+          if (this.signal?.aborted && i(), this.paused) {
+            this.onResume(() => this.walkCB2(t, e, s, i));
+            return;
+          }
+          s.processPatterns(t, e);
+          let r = 1, h = /* @__PURE__ */ __name(() => {
+            --r === 0 && i();
+          }, "h");
+          for (let [o, a, l] of s.matches.entries()) this.#r(o) || (r++, this.match(o, a, l).then(() => h()));
+          for (let o of s.subwalkTargets()) {
+            if (this.maxDepth !== 1 / 0 && o.depth() >= this.maxDepth) continue;
+            r++;
+            let a = o.readdirCached();
+            o.calledReaddir() ? this.walkCB3(o, a, s, h) : o.readdirCB((l, f) => this.walkCB3(o, f, s, h), true);
+          }
+          h();
+        }
+        walkCB3(t, e, s, i) {
+          s = s.filterEntries(t, e);
+          let r = 1, h = /* @__PURE__ */ __name(() => {
+            --r === 0 && i();
+          }, "h");
+          for (let [o, a, l] of s.matches.entries()) this.#r(o) || (r++, this.match(o, a, l).then(() => h()));
+          for (let [o, a] of s.subwalks.entries()) r++, this.walkCB2(o, a, s.child(), h);
+          h();
+        }
+        walkCBSync(t, e, s) {
+          this.signal?.aborted && s(), this.walkCB2Sync(t, e, new Ns.Processor(this.opts), s);
+        }
+        walkCB2Sync(t, e, s, i) {
+          if (this.#h(t)) return i();
+          if (this.signal?.aborted && i(), this.paused) {
+            this.onResume(() => this.walkCB2Sync(t, e, s, i));
+            return;
+          }
+          s.processPatterns(t, e);
+          let r = 1, h = /* @__PURE__ */ __name(() => {
+            --r === 0 && i();
+          }, "h");
+          for (let [o, a, l] of s.matches.entries()) this.#r(o) || this.matchSync(o, a, l);
+          for (let o of s.subwalkTargets()) {
+            if (this.maxDepth !== 1 / 0 && o.depth() >= this.maxDepth) continue;
+            r++;
+            let a = o.readdirSync();
+            this.walkCB3Sync(o, a, s, h);
+          }
+          h();
+        }
+        walkCB3Sync(t, e, s, i) {
+          s = s.filterEntries(t, e);
+          let r = 1, h = /* @__PURE__ */ __name(() => {
+            --r === 0 && i();
+          }, "h");
+          for (let [o, a, l] of s.matches.entries()) this.#r(o) || this.matchSync(o, a, l);
+          for (let [o, a] of s.subwalks.entries()) r++, this.walkCB2Sync(o, a, s.child(), h);
+          h();
+        }
+      };
+      X.GlobUtil = Ot;
+      var Pe = class extends Ot {
+        static {
+          __name(this, "Pe");
+        }
+        matches = /* @__PURE__ */ new Set();
+        constructor(t, e, s) {
+          super(t, e, s);
+        }
+        matchEmit(t) {
+          this.matches.add(t);
+        }
+        async walk() {
+          if (this.signal?.aborted) throw this.signal.reason;
+          return this.path.isUnknown() && await this.path.lstat(), await new Promise((t, e) => {
+            this.walkCB(this.path, this.patterns, () => {
+              this.signal?.aborted ? e(this.signal.reason) : t(this.matches);
+            });
+          }), this.matches;
+        }
+        walkSync() {
+          if (this.signal?.aborted) throw this.signal.reason;
+          return this.path.isUnknown() && this.path.lstatSync(), this.walkCBSync(this.path, this.patterns, () => {
+            if (this.signal?.aborted) throw this.signal.reason;
+          }), this.matches;
+        }
+      };
+      X.GlobWalker = Pe;
+      var De = class extends Ot {
+        static {
+          __name(this, "De");
+        }
+        results;
+        constructor(t, e, s) {
+          super(t, e, s), this.results = new Mr.Minipass({ signal: this.signal, objectMode: true }), this.results.on("drain", () => this.resume()), this.results.on("resume", () => this.resume());
+        }
+        matchEmit(t) {
+          this.results.write(t), this.results.flowing || this.pause();
+        }
+        stream() {
+          let t = this.path;
+          return t.isUnknown() ? t.lstat().then(() => {
+            this.walkCB(t, this.patterns, () => this.results.end());
+          }) : this.walkCB(t, this.patterns, () => this.results.end()), this.results;
+        }
+        streamSync() {
+          return this.path.isUnknown() && this.path.lstatSync(), this.walkCBSync(this.path, this.patterns, () => this.results.end()), this.results;
+        }
+      };
+      X.GlobStream = De;
+    });
+    var je = R((oe) => {
+      "use strict";
+      Object.defineProperty(oe, "__esModule", { value: true });
+      oe.Glob = void 0;
+      var Dr = H(), Fr = require("node:url"), ne = Ms(), jr = Re(), he = Ls(), Nr = typeof process == "object" && process && typeof process.platform == "string" ? process.platform : "linux", Fe = class {
+        static {
+          __name(this, "Fe");
+        }
+        absolute;
+        cwd;
+        root;
+        dot;
+        dotRelative;
+        follow;
+        ignore;
+        magicalBraces;
+        mark;
+        matchBase;
+        maxDepth;
+        nobrace;
+        nocase;
+        nodir;
+        noext;
+        noglobstar;
+        pattern;
+        platform;
+        realpath;
+        scurry;
+        stat;
+        signal;
+        windowsPathsNoEscape;
+        withFileTypes;
+        includeChildMatches;
+        opts;
+        patterns;
+        constructor(t, e) {
+          if (!e) throw new TypeError("glob options required");
+          if (this.withFileTypes = !!e.withFileTypes, this.signal = e.signal, this.follow = !!e.follow, this.dot = !!e.dot, this.dotRelative = !!e.dotRelative, this.nodir = !!e.nodir, this.mark = !!e.mark, e.cwd ? (e.cwd instanceof URL || e.cwd.startsWith("file://")) && (e.cwd = (0, Fr.fileURLToPath)(e.cwd)) : this.cwd = "", this.cwd = e.cwd || "", this.root = e.root, this.magicalBraces = !!e.magicalBraces, this.nobrace = !!e.nobrace, this.noext = !!e.noext, this.realpath = !!e.realpath, this.absolute = e.absolute, this.includeChildMatches = e.includeChildMatches !== false, this.noglobstar = !!e.noglobstar, this.matchBase = !!e.matchBase, this.maxDepth = typeof e.maxDepth == "number" ? e.maxDepth : 1 / 0, this.stat = !!e.stat, this.ignore = e.ignore, this.withFileTypes && this.absolute !== void 0) throw new Error("cannot set absolute and withFileTypes:true");
+          if (typeof t == "string" && (t = [t]), this.windowsPathsNoEscape = !!e.windowsPathsNoEscape || e.allowWindowsEscape === false, this.windowsPathsNoEscape && (t = t.map((a) => a.replace(/\\/g, "/"))), this.matchBase) {
+            if (e.noglobstar) throw new TypeError("base matching requires globstar");
+            t = t.map((a) => a.includes("/") ? a : `./**/${a}`);
+          }
+          if (this.pattern = t, this.platform = e.platform || Nr, this.opts = { ...e, platform: this.platform }, e.scurry) {
+            if (this.scurry = e.scurry, e.nocase !== void 0 && e.nocase !== e.scurry.nocase) throw new Error("nocase option contradicts provided scurry option");
+          } else {
+            let a = e.platform === "win32" ? ne.PathScurryWin32 : e.platform === "darwin" ? ne.PathScurryDarwin : e.platform ? ne.PathScurryPosix : ne.PathScurry;
+            this.scurry = new a(this.cwd, { nocase: e.nocase, fs: e.fs });
+          }
+          this.nocase = this.scurry.nocase;
+          let s = this.platform === "darwin" || this.platform === "win32", i = { braceExpandMax: 1e4, ...e, dot: this.dot, matchBase: this.matchBase, nobrace: this.nobrace, nocase: this.nocase, nocaseMagicOnly: s, nocomment: true, noext: this.noext, nonegate: true, optimizationLevel: 2, platform: this.platform, windowsPathsNoEscape: this.windowsPathsNoEscape, debug: !!this.opts.debug }, r = this.pattern.map((a) => new Dr.Minimatch(a, i)), [h, o] = r.reduce((a, l) => (a[0].push(...l.set), a[1].push(...l.globParts), a), [[], []]);
+          this.patterns = h.map((a, l) => {
+            let f = o[l];
+            if (!f) throw new Error("invalid pattern object");
+            return new jr.Pattern(a, f, 0, this.platform);
+          });
+        }
+        async walk() {
+          return [...await new he.GlobWalker(this.patterns, this.scurry.cwd, { ...this.opts, maxDepth: this.maxDepth !== 1 / 0 ? this.maxDepth + this.scurry.cwd.depth() : 1 / 0, platform: this.platform, nocase: this.nocase, includeChildMatches: this.includeChildMatches }).walk()];
+        }
+        walkSync() {
+          return [...new he.GlobWalker(this.patterns, this.scurry.cwd, { ...this.opts, maxDepth: this.maxDepth !== 1 / 0 ? this.maxDepth + this.scurry.cwd.depth() : 1 / 0, platform: this.platform, nocase: this.nocase, includeChildMatches: this.includeChildMatches }).walkSync()];
+        }
+        stream() {
+          return new he.GlobStream(this.patterns, this.scurry.cwd, { ...this.opts, maxDepth: this.maxDepth !== 1 / 0 ? this.maxDepth + this.scurry.cwd.depth() : 1 / 0, platform: this.platform, nocase: this.nocase, includeChildMatches: this.includeChildMatches }).stream();
+        }
+        streamSync() {
+          return new he.GlobStream(this.patterns, this.scurry.cwd, { ...this.opts, maxDepth: this.maxDepth !== 1 / 0 ? this.maxDepth + this.scurry.cwd.depth() : 1 / 0, platform: this.platform, nocase: this.nocase, includeChildMatches: this.includeChildMatches }).streamSync();
+        }
+        iterateSync() {
+          return this.streamSync()[Symbol.iterator]();
+        }
+        [Symbol.iterator]() {
+          return this.iterateSync();
+        }
+        iterate() {
+          return this.stream()[Symbol.asyncIterator]();
+        }
+        [Symbol.asyncIterator]() {
+          return this.iterate();
+        }
+      };
+      oe.Glob = Fe;
+    });
+    var Ne = R((ae) => {
+      "use strict";
+      Object.defineProperty(ae, "__esModule", { value: true });
+      ae.hasMagic = void 0;
+      var Lr = H(), Wr = /* @__PURE__ */ __name((n, t = {}) => {
+        Array.isArray(n) || (n = [n]);
+        for (let e of n) if (new Lr.Minimatch(e, t).hasMagic()) return true;
+        return false;
+      }, "Wr");
+      ae.hasMagic = Wr;
+    });
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.glob = exports2.sync = exports2.iterate = exports2.iterateSync = exports2.stream = exports2.streamSync = exports2.Ignore = exports2.hasMagic = exports2.Glob = exports2.unescape = exports2.escape = void 0;
+    exports2.globStreamSync = xt;
+    exports2.globStream = Le;
+    exports2.globSync = We;
+    exports2.globIterateSync = Tt;
+    exports2.globIterate = Be;
+    var Ws = H();
+    var tt = je();
+    var Br = Ne();
+    var Is = H();
+    Object.defineProperty(exports2, "escape", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return Is.escape;
+    }, "get") });
+    Object.defineProperty(exports2, "unescape", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return Is.unescape;
+    }, "get") });
+    var Ir = je();
+    Object.defineProperty(exports2, "Glob", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return Ir.Glob;
+    }, "get") });
+    var Gr = Ne();
+    Object.defineProperty(exports2, "hasMagic", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return Gr.hasMagic;
+    }, "get") });
+    var zr = ke();
+    Object.defineProperty(exports2, "Ignore", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return zr.Ignore;
+    }, "get") });
+    function xt(n, t = {}) {
+      return new tt.Glob(n, t).streamSync();
+    }
+    __name(xt, "xt");
+    function Le(n, t = {}) {
+      return new tt.Glob(n, t).stream();
+    }
+    __name(Le, "Le");
+    function We(n, t = {}) {
+      return new tt.Glob(n, t).walkSync();
+    }
+    __name(We, "We");
+    async function Bs(n, t = {}) {
+      return new tt.Glob(n, t).walk();
+    }
+    __name(Bs, "Bs");
+    function Tt(n, t = {}) {
+      return new tt.Glob(n, t).iterateSync();
+    }
+    __name(Tt, "Tt");
+    function Be(n, t = {}) {
+      return new tt.Glob(n, t).iterate();
+    }
+    __name(Be, "Be");
+    exports2.streamSync = xt;
+    exports2.stream = Object.assign(Le, { sync: xt });
+    exports2.iterateSync = Tt;
+    exports2.iterate = Object.assign(Be, { sync: Tt });
+    exports2.sync = Object.assign(We, { stream: xt, iterate: Tt });
+    exports2.glob = Object.assign(Bs, { glob: Bs, globSync: We, sync: exports2.sync, globStream: Le, stream: exports2.stream, globStreamSync: xt, streamSync: exports2.streamSync, globIterate: Be, iterate: exports2.iterate, globIterateSync: Tt, iterateSync: exports2.iterateSync, Glob: tt.Glob, hasMagic: Br.hasMagic, escape: Ws.escape, unescape: Ws.unescape });
+    exports2.glob.glob = exports2.glob;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+map-workspaces@5.0.3/node_modules/@npmcli/map-workspaces/lib/index.js
+var require_lib33 = __commonJS({
+  "node_modules/.pnpm/@npmcli+map-workspaces@5.0.3/node_modules/@npmcli/map-workspaces/lib/index.js"(exports2, module2) {
+    var path = require("path");
+    var getName = require_lib32();
+    var { minimatch } = require_commonjs4();
+    var pkgJson = require_lib11();
+    var { glob } = require_index_min2();
+    function appendNegatedPatterns(allPatterns) {
+      const patterns = [];
+      const negatedPatterns = [];
+      for (let pattern of allPatterns) {
+        const excl = pattern.match(/^!+/);
+        if (excl) {
+          pattern = pattern.slice(excl[0].length);
+        }
+        pattern = pattern.replace(/^\.?\/+/, "");
+        const negate = excl && excl[0].length % 2 === 1;
+        if (negate) {
+          negatedPatterns.push(pattern);
+        } else {
+          for (let i = 0; i < negatedPatterns.length; ++i) {
+            const negatedPattern = negatedPatterns[i];
+            if (minimatch(pattern, negatedPattern)) {
+              negatedPatterns.splice(i, 1);
+            }
+          }
+          patterns.push(pattern);
+        }
+      }
+      for (const negated of negatedPatterns) {
+        for (const pattern of minimatch.match(patterns, negated)) {
+          patterns.splice(patterns.indexOf(pattern), 1);
+        }
+      }
+      return { patterns, negatedPatterns };
+    }
+    __name(appendNegatedPatterns, "appendNegatedPatterns");
+    function getPatterns(workspaces) {
+      const workspacesDeclaration = Array.isArray(workspaces.packages) ? workspaces.packages : workspaces;
+      if (!Array.isArray(workspacesDeclaration)) {
+        throw getError({
+          message: "workspaces config expects an Array",
+          code: "EWORKSPACESCONFIG"
+        });
+      }
+      return appendNegatedPatterns(workspacesDeclaration);
+    }
+    __name(getPatterns, "getPatterns");
+    function getPackageName(pkg, pathname) {
+      return pkg.name || getName(pathname);
+    }
+    __name(getPackageName, "getPackageName");
+    function getGlobPattern(pattern) {
+      pattern = pattern.replace(/\\/g, "/");
+      return pattern.endsWith("/") ? pattern : `${pattern}/`;
+    }
+    __name(getGlobPattern, "getGlobPattern");
+    function getError({ Type = TypeError, message, code }) {
+      return Object.assign(new Type(message), { code });
+    }
+    __name(getError, "getError");
+    function reverseResultMap(map) {
+      return new Map(Array.from(map, (item) => item.reverse()));
+    }
+    __name(reverseResultMap, "reverseResultMap");
+    async function mapWorkspaces(opts = {}) {
+      if (!opts || !opts.pkg) {
+        throw getError({
+          message: "mapWorkspaces missing pkg info",
+          code: "EMAPWORKSPACESPKG"
+        });
+      }
+      if (!opts.cwd) {
+        opts.cwd = process.cwd();
+      }
+      const { workspaces = [] } = opts.pkg;
+      const { patterns, negatedPatterns } = getPatterns(workspaces);
+      const results = /* @__PURE__ */ new Map();
+      if (!patterns.length && !negatedPatterns.length) {
+        return results;
+      }
+      const seen = /* @__PURE__ */ new Map();
+      const getGlobOpts = /* @__PURE__ */ __name(() => ({
+        ...opts,
+        ignore: [
+          ...opts.ignore || [],
+          "**/node_modules/**",
+          // just ignore the negated patterns to avoid unnecessary crawling
+          ...negatedPatterns
+        ]
+      }), "getGlobOpts");
+      let matches = await glob(patterns.map((p) => getGlobPattern(p)), getGlobOpts());
+      matches = matches.sort((a, b) => a.localeCompare(b, "en"));
+      const orderedMatches = [];
+      for (const pattern of patterns) {
+        orderedMatches.push(...matches.filter((m) => {
+          return minimatch(m, pattern, { partial: true, windowsPathsNoEscape: true });
+        }));
+      }
+      for (const match of orderedMatches) {
+        let pkg;
+        try {
+          pkg = await pkgJson.normalize(path.join(opts.cwd, match));
+        } catch (err) {
+          if (err.code === "ENOENT" || err.code === "ENOTDIR") {
+            continue;
+          } else {
+            throw err;
+          }
+        }
+        const name = getPackageName(pkg.content, pkg.path);
+        let seenPackagePathnames = seen.get(name);
+        if (!seenPackagePathnames) {
+          seenPackagePathnames = /* @__PURE__ */ new Set();
+          seen.set(name, seenPackagePathnames);
+        }
+        seenPackagePathnames.add(pkg.path);
+      }
+      const errorMessageArray = ["must not have multiple workspaces with the same name"];
+      for (const [packageName, seenPackagePathnames] of seen) {
+        if (seenPackagePathnames.size > 1) {
+          addDuplicateErrorMessages(errorMessageArray, packageName, seenPackagePathnames);
+        } else {
+          results.set(packageName, seenPackagePathnames.values().next().value);
+        }
+      }
+      if (errorMessageArray.length > 1) {
+        throw getError({
+          Type: Error,
+          message: errorMessageArray.join("\n"),
+          code: "EDUPLICATEWORKSPACE"
+        });
+      }
+      return results;
+    }
+    __name(mapWorkspaces, "mapWorkspaces");
+    function addDuplicateErrorMessages(messageArray, packageName, packagePathnames) {
+      messageArray.push(
+        `package '${packageName}' has conflicts in the following paths:`
+      );
+      for (const packagePathname of packagePathnames) {
+        messageArray.push(
+          "    " + packagePathname
+        );
+      }
+    }
+    __name(addDuplicateErrorMessages, "addDuplicateErrorMessages");
+    mapWorkspaces.virtual = function(opts = {}) {
+      if (!opts || !opts.lockfile) {
+        throw getError({
+          message: "mapWorkspaces.virtual missing lockfile info",
+          code: "EMAPWORKSPACESLOCKFILE"
+        });
+      }
+      if (!opts.cwd) {
+        opts.cwd = process.cwd();
+      }
+      const { packages = {} } = opts.lockfile;
+      const { workspaces = [] } = packages[""] || {};
+      const results = /* @__PURE__ */ new Map();
+      const { patterns, negatedPatterns } = getPatterns(workspaces);
+      if (!patterns.length && !negatedPatterns.length) {
+        return results;
+      }
+      negatedPatterns.push("**/node_modules/**");
+      const packageKeys = Object.keys(packages);
+      for (const pattern of negatedPatterns) {
+        for (const packageKey of minimatch.match(packageKeys, pattern)) {
+          packageKeys.splice(packageKeys.indexOf(packageKey), 1);
+        }
+      }
+      for (const pattern of patterns) {
+        for (const packageKey of minimatch.match(packageKeys, pattern)) {
+          const packagePathname = path.join(opts.cwd, packageKey);
+          const name = getPackageName(packages[packageKey], packagePathname);
+          results.set(packagePathname, name);
+        }
+      }
+      return reverseResultMap(results);
+    };
+    module2.exports = mapWorkspaces;
+  }
+});
+
+// node_modules/.pnpm/@isaacs+string-locale-compare@1.1.0/node_modules/@isaacs/string-locale-compare/index.js
+var require_string_locale_compare = __commonJS({
+  "node_modules/.pnpm/@isaacs+string-locale-compare@1.1.0/node_modules/@isaacs/string-locale-compare/index.js"(exports2, module2) {
+    var hasIntl = typeof Intl === "object" && !!Intl;
+    var Collator = hasIntl && Intl.Collator;
+    var cache = /* @__PURE__ */ new Map();
+    var collatorCompare = /* @__PURE__ */ __name((locale, opts) => {
+      const collator = new Collator(locale, opts);
+      return (a, b) => collator.compare(a, b);
+    }, "collatorCompare");
+    var localeCompare = /* @__PURE__ */ __name((locale, opts) => (a, b) => a.localeCompare(b, locale, opts), "localeCompare");
+    var knownOptions = [
+      "sensitivity",
+      "numeric",
+      "ignorePunctuation",
+      "caseFirst"
+    ];
+    var { hasOwnProperty } = Object.prototype;
+    module2.exports = (locale, options = {}) => {
+      if (!locale || typeof locale !== "string")
+        throw new TypeError("locale required");
+      const opts = knownOptions.reduce((opts2, k) => {
+        if (hasOwnProperty.call(options, k)) {
+          opts2[k] = options[k];
+        }
+        return opts2;
+      }, {});
+      const key = `${locale}
+${JSON.stringify(opts)}`;
+      if (cache.has(key))
+        return cache.get(key);
+      const compare = hasIntl ? collatorCompare(locale, opts) : localeCompare(locale, opts);
+      cache.set(key, compare);
+      return compare;
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/add-rm-pkg-deps.js
+var require_add_rm_pkg_deps = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/add-rm-pkg-deps.js"(exports2, module2) {
+    var { log } = require_lib2();
+    var localeCompare = require_string_locale_compare()("en");
+    var add = /* @__PURE__ */ __name(({ pkg, add: add2, saveBundle, saveType }) => {
+      for (const { name, rawSpec } of add2) {
+        let addSaveType = saveType;
+        if (!addSaveType) {
+          addSaveType = inferSaveType(pkg, name);
+        }
+        if (addSaveType === "prod") {
+          deleteSubKey(pkg, "devDependencies", name, "dependencies");
+          deleteSubKey(pkg, "peerDependencies", name, "dependencies");
+        } else if (addSaveType === "dev") {
+          deleteSubKey(pkg, "dependencies", name, "devDependencies");
+        } else if (addSaveType === "optional") {
+          deleteSubKey(pkg, "peerDependencies", name, "optionalDependencies");
+        } else {
+          deleteSubKey(pkg, "dependencies", name, "peerDependencies");
+          deleteSubKey(pkg, "optionalDependencies", name, "peerDependencies");
+        }
+        const depType = saveTypeMap.get(addSaveType);
+        pkg[depType] = pkg[depType] || {};
+        if (rawSpec !== "*" || pkg[depType][name] === void 0) {
+          pkg[depType][name] = rawSpec;
+        }
+        if (addSaveType === "optional") {
+          pkg.dependencies = pkg.dependencies || {};
+          pkg.dependencies[name] = pkg.optionalDependencies[name];
+        }
+        if (addSaveType === "peer" || addSaveType === "peerOptional") {
+          const pdm = pkg.peerDependenciesMeta || {};
+          if (addSaveType === "peer" && pdm[name] && pdm[name].optional) {
+            pdm[name].optional = false;
+          } else if (addSaveType === "peerOptional") {
+            pdm[name] = pdm[name] || {};
+            pdm[name].optional = true;
+            pkg.peerDependenciesMeta = pdm;
+          }
+          if (pkg.devDependencies && pkg.devDependencies[name] !== void 0) {
+            pkg.devDependencies[name] = pkg.peerDependencies[name];
+          }
+        }
+        if (saveBundle && addSaveType !== "peer" && addSaveType !== "peerOptional") {
+          const bd = new Set(pkg.bundleDependencies || []);
+          bd.add(name);
+          pkg.bundleDependencies = [...bd].sort(localeCompare);
+        }
+      }
+      return pkg;
+    }, "add");
+    var saveTypeMap = /* @__PURE__ */ new Map([
+      ["dev", "devDependencies"],
+      ["optional", "optionalDependencies"],
+      ["prod", "dependencies"],
+      ["peerOptional", "peerDependencies"],
+      ["peer", "peerDependencies"]
+    ]);
+    var inferSaveType = /* @__PURE__ */ __name((pkg, name) => {
+      for (const saveType of saveTypeMap.keys()) {
+        if (hasSubKey(pkg, saveTypeMap.get(saveType), name)) {
+          if (saveType === "peerOptional" && (!hasSubKey(pkg, "peerDependenciesMeta", name) || !pkg.peerDependenciesMeta[name].optional)) {
+            return "peer";
+          }
+          return saveType;
+        }
+      }
+      return "prod";
+    }, "inferSaveType");
+    var hasSubKey = /* @__PURE__ */ __name((pkg, depType, name) => {
+      return pkg[depType] && Object.prototype.hasOwnProperty.call(pkg[depType], name);
+    }, "hasSubKey");
+    var deleteSubKey = /* @__PURE__ */ __name((pkg, depType, name, replacedBy) => {
+      if (hasSubKey(pkg, depType, name)) {
+        if (replacedBy) {
+          log.warn("idealTree", `Removing ${depType}.${name} in favor of ${replacedBy}.${name}`);
+        }
+        delete pkg[depType][name];
+        if (depType === "peerDependencies" && pkg.peerDependenciesMeta) {
+          delete pkg.peerDependenciesMeta[name];
+          if (!Object.keys(pkg.peerDependenciesMeta).length) {
+            delete pkg.peerDependenciesMeta;
+          }
+        }
+        if (!Object.keys(pkg[depType]).length) {
+          delete pkg[depType];
+        }
+      }
+    }, "deleteSubKey");
+    var rm = /* @__PURE__ */ __name((pkg, rm2) => {
+      for (const depType of new Set(saveTypeMap.values())) {
+        for (const name of rm2) {
+          deleteSubKey(pkg, depType, name);
+        }
+      }
+      if (pkg.bundleDependencies) {
+        pkg.bundleDependencies = pkg.bundleDependencies.filter((name) => !rm2.includes(name));
+        if (!pkg.bundleDependencies.length) {
+          delete pkg.bundleDependencies;
+        }
+      }
+      return pkg;
+    }, "rm");
+    module2.exports = { add, rm, saveTypeMap, hasSubKey };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/vuln.js
+var require_vuln = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/vuln.js"(exports2, module2) {
+    var { satisfies, simplifyRange } = require_semver2();
+    var semverOpt = { loose: true, includePrerelease: true };
+    var localeCompare = require_string_locale_compare()("en");
+    var npa = require_npa();
+    var severities = /* @__PURE__ */ new Map([
+      ["info", 0],
+      [0, "info"],
+      ["low", 1],
+      [1, "low"],
+      ["moderate", 2],
+      [2, "moderate"],
+      ["high", 3],
+      [3, "high"],
+      ["critical", 4],
+      [4, "critical"],
+      [null, -1],
+      [-1, null]
+    ]);
+    var Vuln = class {
+      static {
+        __name(this, "Vuln");
+      }
+      #range = null;
+      #simpleRange = null;
+      // assume a fix is available unless it hits a top node
+      // that locks it in place, setting this false or {isSemVerMajor, version}.
+      #fixAvailable = true;
+      constructor({ name, advisory }) {
+        this.name = name;
+        this.via = /* @__PURE__ */ new Set();
+        this.advisories = /* @__PURE__ */ new Set();
+        this.severity = null;
+        this.effects = /* @__PURE__ */ new Set();
+        this.topNodes = /* @__PURE__ */ new Set();
+        this.nodes = /* @__PURE__ */ new Set();
+        this.addAdvisory(advisory);
+        this.packument = advisory.packument;
+        this.versions = advisory.versions;
+      }
+      get fixAvailable() {
+        return this.#fixAvailable;
+      }
+      set fixAvailable(f) {
+        this.#fixAvailable = f;
+        for (const v of this.via) {
+          if (v.fixAvailable === f) {
+            continue;
+          }
+          if (f === false) {
+            v.fixAvailable = f;
+          } else if (v.fixAvailable === true) {
+            v.fixAvailable = f;
+          } else if (typeof f === "object" && (typeof v.fixAvailable !== "object" || !v.fixAvailable.isSemVerMajor)) {
+            v.fixAvailable = f;
+          }
+        }
+      }
+      get isDirect() {
+        for (const node of this.nodes.values()) {
+          for (const edge of node.edgesIn) {
+            if (edge.from.isProjectRoot || edge.from.isWorkspace) {
+              return true;
+            }
+          }
+        }
+        return false;
+      }
+      testSpec(spec) {
+        const specObj = npa(spec);
+        if (!specObj.registry) {
+          return true;
+        }
+        if (specObj.subSpec) {
+          spec = specObj.subSpec.rawSpec;
+        }
+        for (const v of this.versions) {
+          if (satisfies(v, spec) && !satisfies(v, this.range, semverOpt)) {
+            return false;
+          }
+        }
+        return true;
+      }
+      toJSON() {
+        return {
+          name: this.name,
+          severity: this.severity,
+          isDirect: this.isDirect,
+          // just loop over the advisories, since via is only Vuln objects,
+          // and calculated advisories have all the info we need
+          via: [...this.advisories].map((v) => v.type === "metavuln" ? v.dependency : {
+            ...v,
+            versions: void 0,
+            vulnerableVersions: void 0,
+            id: void 0
+          }).sort((a, b) => localeCompare(String(a.source || a), String(b.source || b))),
+          effects: [...this.effects].map((v) => v.name).sort(localeCompare),
+          range: this.simpleRange,
+          nodes: [...this.nodes].map((n) => n.location).sort(localeCompare),
+          fixAvailable: this.#fixAvailable
+        };
+      }
+      addVia(v) {
+        this.via.add(v);
+        v.effects.add(this);
+        this.fixAvailable = this.fixAvailable;
+      }
+      deleteVia(v) {
+        this.via.delete(v);
+        v.effects.delete(this);
+      }
+      deleteAdvisory(advisory) {
+        this.advisories.delete(advisory);
+        this.severity = null;
+        this.#range = null;
+        this.#simpleRange = null;
+        for (const advisory2 of this.advisories) {
+          this.addAdvisory(advisory2);
+        }
+        const vias = new Set([...this.advisories].map((a) => a.dependency));
+        for (const via of this.via) {
+          if (!vias.has(via.name)) {
+            this.deleteVia(via);
+          }
+        }
+      }
+      addAdvisory(advisory) {
+        this.advisories.add(advisory);
+        const sev = severities.get(advisory.severity);
+        this.#range = null;
+        this.#simpleRange = null;
+        if (sev > severities.get(this.severity)) {
+          this.severity = advisory.severity;
+        }
+      }
+      get range() {
+        if (!this.#range) {
+          this.#range = [...this.advisories].map((v) => v.range).join(" || ");
+        }
+        return this.#range;
+      }
+      get simpleRange() {
+        if (this.#simpleRange && this.#simpleRange === this.#range) {
+          return this.#simpleRange;
+        }
+        const versions = [...this.advisories][0].versions;
+        const range = this.range;
+        this.#simpleRange = simplifyRange(versions, range, semverOpt);
+        this.#range = this.#simpleRange;
+        return this.#simpleRange;
+      }
+      isVulnerable(node) {
+        if (this.nodes.has(node)) {
+          return true;
+        }
+        const { version } = node.package;
+        if (!version) {
+          return false;
+        }
+        for (const v of this.advisories) {
+          if (v.testVersion(version)) {
+            this.nodes.add(node);
+            return true;
+          }
+        }
+        return false;
+      }
+    };
+    module2.exports = Vuln;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+metavuln-calculator@9.0.3_supports-color@10.2.2/node_modules/@npmcli/metavuln-calculator/lib/hash.js
+var require_hash = __commonJS({
+  "node_modules/.pnpm/@npmcli+metavuln-calculator@9.0.3_supports-color@10.2.2/node_modules/@npmcli/metavuln-calculator/lib/hash.js"(exports2, module2) {
+    var { createHash } = require("crypto");
+    module2.exports = ({ name, source }) => createHash("sha512").update(JSON.stringify([name, source])).digest("base64");
+  }
+});
+
+// node_modules/.pnpm/@npmcli+metavuln-calculator@9.0.3_supports-color@10.2.2/node_modules/@npmcli/metavuln-calculator/lib/get-dep-spec.js
+var require_get_dep_spec = __commonJS({
+  "node_modules/.pnpm/@npmcli+metavuln-calculator@9.0.3_supports-color@10.2.2/node_modules/@npmcli/metavuln-calculator/lib/get-dep-spec.js"(exports2, module2) {
+    module2.exports = (mani, name) => {
+      const {
+        dependencies: deps = {},
+        optionalDependencies: optDeps = {},
+        peerDependencies: peerDeps = {}
+      } = mani;
+      return deps && typeof deps[name] === "string" ? deps[name] : optDeps && typeof optDeps[name] === "string" ? optDeps[name] : peerDeps && typeof peerDeps[name] === "string" ? peerDeps[name] : null;
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+metavuln-calculator@9.0.3_supports-color@10.2.2/node_modules/@npmcli/metavuln-calculator/lib/advisory.js
+var require_advisory = __commonJS({
+  "node_modules/.pnpm/@npmcli+metavuln-calculator@9.0.3_supports-color@10.2.2/node_modules/@npmcli/metavuln-calculator/lib/advisory.js"(exports2, module2) {
+    var hash = require_hash();
+    var semver2 = require_semver2();
+    var semverOpt = { includePrerelease: true, loose: true };
+    var getDepSpec = require_get_dep_spec();
+    var _source = Symbol("source");
+    var _packument = Symbol("packument");
+    var _versionVulnMemo = Symbol("versionVulnMemo");
+    var _updated = Symbol("updated");
+    var _options = Symbol("options");
+    var _specVulnMemo = Symbol("specVulnMemo");
+    var _testVersion = Symbol("testVersion");
+    var _testVersions = Symbol("testVersions");
+    var _calculateRange = Symbol("calculateRange");
+    var _markVulnerable = Symbol("markVulnerable");
+    var _testSpec = Symbol("testSpec");
+    var Advisory = class {
+      static {
+        __name(this, "Advisory");
+      }
+      constructor(name, source, options = {}) {
+        this.source = source.id;
+        this[_source] = source;
+        this[_options] = options;
+        this.name = name;
+        if (!source.name) {
+          source.name = name;
+        }
+        this.dependency = source.name;
+        if (this.type === "advisory") {
+          this.title = source.title;
+          this.url = source.url;
+        } else {
+          this.title = `Depends on vulnerable versions of ${source.name}`;
+          this.url = null;
+        }
+        this.severity = source.severity || "high";
+        this.versions = [];
+        this.vulnerableVersions = [];
+        this.cwe = source.cwe;
+        this.cvss = source.cvss;
+        this.range = this.type === "advisory" ? source.vulnerable_versions || "*" : null;
+        this.id = hash(this);
+        this[_packument] = null;
+        this[_versionVulnMemo] = /* @__PURE__ */ new Map();
+        this[_specVulnMemo] = /* @__PURE__ */ new Map();
+        this[_updated] = false;
+      }
+      // true if we updated from what we had in cache
+      get updated() {
+        return this[_updated];
+      }
+      get type() {
+        return this.dependency === this.name ? "advisory" : "metavuln";
+      }
+      get packument() {
+        return this[_packument];
+      }
+      // load up the data from a cache entry and a fetched packument
+      load(cached, packument) {
+        if (!cached || typeof cached !== "object") {
+          throw new TypeError("invalid cached data, expected object");
+        }
+        if (!packument || typeof packument !== "object") {
+          throw new TypeError("invalid packument data, expected object");
+        }
+        if (cached.id && cached.id !== this.id) {
+          throw Object.assign(new Error("loading from incorrect cache entry"), {
+            expected: this.id,
+            actual: cached.id
+          });
+        }
+        if (packument.name !== this.name) {
+          throw Object.assign(new Error("loading from incorrect packument"), {
+            expected: this.name,
+            actual: packument.name
+          });
+        }
+        if (this[_packument]) {
+          throw new Error("advisory object already loaded");
+        }
+        if (!this.range || cached.range && cached.range === this.range) {
+          Object.assign(this, cached);
+        }
+        this[_packument] = packument;
+        const pakuVersions = Object.keys(packument.versions || {});
+        const allVersions = /* @__PURE__ */ new Set([...pakuVersions, ...this.versions]);
+        const versionsAdded = [];
+        const versionsRemoved = [];
+        for (const v of allVersions) {
+          if (!this.versions.includes(v)) {
+            versionsAdded.push(v);
+            this.versions.push(v);
+          } else if (!pakuVersions.includes(v)) {
+            versionsRemoved.push(v);
+          }
+        }
+        this.versions = semver2.sort(this.versions.filter((v) => !versionsRemoved.includes(v)), semverOpt);
+        const unchanged = this.type === "advisory" ? this.range && this.range === cached.range : !this[_source].updated;
+        this.vulnerableVersions = !unchanged ? [] : semver2.sort(this.vulnerableVersions.filter((v) => !versionsRemoved.includes(v)), semverOpt);
+        if (unchanged && !versionsAdded.length && !versionsRemoved.length) {
+          return this;
+        }
+        this[_updated] = true;
+        if (!unchanged || versionsAdded.length) {
+          this[_testVersions](unchanged ? versionsAdded : this.versions);
+        }
+        this.vulnerableVersions = semver2.sort(this.vulnerableVersions, semverOpt);
+        if (this.type === "metavuln") {
+          this[_calculateRange]();
+        }
+        return this;
+      }
+      [_calculateRange]() {
+        const ranges = [];
+        this.versions = semver2.sort(this.versions, semverOpt);
+        this.vulnerableVersions = semver2.sort(this.vulnerableVersions, semverOpt);
+        for (let v = 0, vulnVer = 0; v < this.versions.length; v++) {
+          const vr = [this.versions[v]];
+          while (v < this.versions.length) {
+            if (this.versions[v] !== this.vulnerableVersions[vulnVer]) {
+              if (/-/.test(this.versions[v])) {
+                v++;
+                continue;
+              }
+              break;
+            }
+            if (vr.length > 1) {
+              vr[1] = this.versions[v];
+            } else {
+              vr.push(this.versions[v]);
+            }
+            v++;
+            vulnVer++;
+          }
+          if (vr.length > 1) {
+            const tail = this.versions[this.versions.length - 1];
+            ranges.push(vr[1] === tail ? `>=${vr[0]}` : vr[0] === vr[1] ? vr[0] : vr.join(" - "));
+          }
+        }
+        const metavuln = ranges.join(" || ").trim();
+        this.range = !metavuln ? "<0.0.0-0" : semver2.simplifyRange(this.versions, metavuln, semverOpt);
+      }
+      // returns true if marked as vulnerable, false if ok
+      // spec is a dependency specifier, for metavuln cases
+      // where the version might not be in the packument.  if
+      // we have the packument and spec is not provided, then
+      // we use the dependency version from the manifest.
+      testVersion(version, spec = null) {
+        const sv = String(version);
+        if (this[_versionVulnMemo].has(sv)) {
+          return this[_versionVulnMemo].get(sv);
+        }
+        const result = this[_testVersion](version, spec);
+        if (result) {
+          this[_markVulnerable](version);
+        }
+        this[_versionVulnMemo].set(sv, !!result);
+        return result;
+      }
+      [_markVulnerable](version) {
+        const sv = String(version);
+        if (!this.vulnerableVersions.includes(sv)) {
+          this.vulnerableVersions.push(sv);
+        }
+      }
+      [_testVersion](version, spec) {
+        const sv = String(version);
+        if (this.vulnerableVersions.includes(sv)) {
+          return true;
+        }
+        if (this.type === "advisory") {
+          return semver2.satisfies(version, this.range, semverOpt);
+        }
+        const mani = this[_packument]?.versions?.[version] || {
+          dependencies: {
+            [this.dependency]: spec
+          }
+        };
+        if (!spec) {
+          spec = getDepSpec(mani, this.dependency);
+        }
+        if (spec === null) {
+          return false;
+        }
+        if (!semver2.validRange(spec, semverOpt)) {
+          return true;
+        }
+        const bd = mani.bundleDependencies;
+        const bundled = bd && bd.includes(this[_source].name);
+        const avoid = this[_source].range;
+        if (bundled) {
+          return semver2.intersects(spec, avoid, semverOpt);
+        }
+        return this[_source].testSpec(spec);
+      }
+      testSpec(spec) {
+        const memo = this[_specVulnMemo];
+        if (memo.has(spec)) {
+          return memo.get(spec);
+        }
+        const res = this[_testSpec](spec);
+        memo.set(spec, res);
+        return res;
+      }
+      [_testSpec](spec) {
+        for (const v of this.versions) {
+          const satisfies = semver2.satisfies(v, spec, semverOpt);
+          if (!satisfies) {
+            continue;
+          }
+          if (!this.testVersion(v)) {
+            return false;
+          }
+        }
+        return true;
+      }
+      [_testVersions](versions) {
+        if (!versions.length) {
+          return;
+        }
+        const versionSets = /* @__PURE__ */ new Set();
+        versions = semver2.sort(versions.map((v) => semver2.parse(v, semverOpt)));
+        let last = versions[0].major + "." + versions[0].minor;
+        let list = [];
+        versionSets.add(list);
+        for (const v of versions) {
+          const k = v.major + "." + v.minor;
+          if (k !== last) {
+            last = k;
+            list = [];
+            versionSets.add(list);
+          }
+          list.push(v);
+        }
+        for (const set of versionSets) {
+          let h = 0;
+          const origHeadVuln = this.testVersion(set[h]);
+          while (h < set.length && /-/.test(String(set[h]))) {
+            h++;
+          }
+          if (h === set.length) {
+            h = 0;
+          } else if (origHeadVuln) {
+            for (let hh = 0; hh < h; hh++) {
+              this[_markVulnerable](set[hh]);
+            }
+          }
+          let t = set.length - 1;
+          const origTailVuln = this.testVersion(set[t]);
+          while (t > h && /-/.test(String(set[t]))) {
+            t--;
+          }
+          if (t === h) {
+            t = set.length - 1;
+          } else if (origTailVuln) {
+            for (let tt = set.length - 1; tt > t; tt--) {
+              this[_markVulnerable](set[tt]);
+            }
+          }
+          const headVuln = h === 0 ? origHeadVuln : this.testVersion(set[h]);
+          const tailVuln = t === set.length - 1 ? origTailVuln : this.testVersion(set[t]);
+          if (headVuln && tailVuln) {
+            for (let v = h; v < t; v++) {
+              this[_markVulnerable](set[v]);
+            }
+            continue;
+          }
+          if (t < h + 2) {
+            continue;
+          }
+          const mid = Math.floor(set.length / 2);
+          const pre = set.slice(0, mid);
+          const post = set.slice(mid);
+          if (!/-/.test(String(pre[0]))) {
+            const midVuln = this.testVersion(pre[pre.length - 1]);
+            while (/-/.test(String(pre[pre.length - 1]))) {
+              const v = pre.pop();
+              if (midVuln) {
+                this[_markVulnerable](v);
+              }
+            }
+          }
+          if (!/-/.test(String(post[post.length - 1]))) {
+            const midVuln = this.testVersion(post[0]);
+            while (/-/.test(String(post[0]))) {
+              const v = post.shift();
+              if (midVuln) {
+                this[_markVulnerable](v);
+              }
+            }
+          }
+          versionSets.add(pre);
+          versionSets.add(post);
+        }
+      }
+    };
+    module2.exports = Advisory;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+metavuln-calculator@9.0.3_supports-color@10.2.2/node_modules/@npmcli/metavuln-calculator/lib/index.js
+var require_lib34 = __commonJS({
+  "node_modules/.pnpm/@npmcli+metavuln-calculator@9.0.3_supports-color@10.2.2/node_modules/@npmcli/metavuln-calculator/lib/index.js"(exports2, module2) {
+    var pacote2 = require_lib30();
+    var cacache2 = require_lib17();
+    var { time } = require_lib2();
+    var Advisory = require_advisory();
+    var { homedir } = require("os");
+    var jsonParse = require_lib();
+    var _packument = Symbol("packument");
+    var _cachePut = Symbol("cachePut");
+    var _cacheGet = Symbol("cacheGet");
+    var _cacheData = Symbol("cacheData");
+    var _packuments = Symbol("packuments");
+    var _cache = Symbol("cache");
+    var _options = Symbol("options");
+    var _advisories = Symbol("advisories");
+    var _calculate = Symbol("calculate");
+    var Calculator = class {
+      static {
+        __name(this, "Calculator");
+      }
+      constructor(options = {}) {
+        this[_options] = { ...options };
+        this[_cache] = this[_options].cache || homedir() + "/.npm/_cacache";
+        this[_options].cache = this[_cache];
+        this[_packuments] = /* @__PURE__ */ new Map();
+        this[_cacheData] = /* @__PURE__ */ new Map();
+        this[_advisories] = /* @__PURE__ */ new Map();
+      }
+      get cache() {
+        return this[_cache];
+      }
+      get options() {
+        return { ...this[_options] };
+      }
+      async calculate(name, source) {
+        const k = `security-advisory:${name}:${source.id}`;
+        if (this[_advisories].has(k)) {
+          return this[_advisories].get(k);
+        }
+        const p = this[_calculate](name, source);
+        this[_advisories].set(k, p);
+        return p;
+      }
+      async [_calculate](name, source) {
+        const k = `security-advisory:${name}:${source.id}`;
+        const timeEnd = time.start(`metavuln:calculate:${k}`);
+        const advisory = new Advisory(name, source, this[_options]);
+        const [cached, packument] = await Promise.all([
+          this[_cacheGet](advisory),
+          this[_packument](name)
+        ]);
+        const timeEndLoad = time.start(`metavuln:load:${k}`);
+        advisory.load(cached, packument);
+        timeEndLoad();
+        if (advisory.updated) {
+          await this[_cachePut](advisory);
+        }
+        this[_advisories].set(k, advisory);
+        timeEnd();
+        return advisory;
+      }
+      async [_cachePut](advisory) {
+        const { name, id } = advisory;
+        const key = `security-advisory:${name}:${id}`;
+        const timeEnd = time.start(`metavuln:cache:put:${key}`);
+        const data = JSON.stringify(advisory);
+        const options = { ...this[_options] };
+        this[_cacheData].set(key, jsonParse(data));
+        await cacache2.put(this[_cache], key, data, options).catch(() => {
+        });
+        timeEnd();
+      }
+      async [_cacheGet](advisory) {
+        const { name, id } = advisory;
+        const key = `security-advisory:${name}:${id}`;
+        if (this[_cacheData].has(key)) {
+          return this[_cacheData].get(key);
+        }
+        const timeEnd = time.start(`metavuln:cache:get:${key}`);
+        const p = cacache2.get(this[_cache], key, { ...this[_options] }).catch(() => ({ data: "{}" })).then(({ data }) => {
+          data = jsonParse(data);
+          timeEnd();
+          this[_cacheData].set(key, data);
+          return data;
+        });
+        this[_cacheData].set(key, p);
+        return p;
+      }
+      async [_packument](name) {
+        if (this[_packuments].has(name)) {
+          return this[_packuments].get(name);
+        }
+        const timeEnd = time.start(`metavuln:packument:${name}`);
+        const p = pacote2.packument(name, { ...this[_options] }).catch(() => {
+          return {
+            name,
+            versions: {}
+          };
+        }).then((paku) => {
+          timeEnd();
+          this[_packuments].set(name, paku);
+          return paku;
+        });
+        this[_packuments].set(name, p);
+        return p;
+      }
+    };
+    module2.exports = Calculator;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/audit-report.js
+var require_audit_report = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/audit-report.js"(exports2, module2) {
+    var localeCompare = require_string_locale_compare()("en");
+    var npa = require_npa();
+    var pickManifest = require_lib9();
+    var Vuln = require_vuln();
+    var Calculator = require_lib34();
+    var { log, time } = require_lib2();
+    var npmFetch = require_lib28();
+    var AuditReport = class _AuditReport extends Map {
+      static {
+        __name(this, "AuditReport");
+      }
+      #omit;
+      error = null;
+      topVulns = /* @__PURE__ */ new Map();
+      static load(tree, opts) {
+        return new _AuditReport(tree, opts).run();
+      }
+      get auditReportVersion() {
+        return 2;
+      }
+      toJSON() {
+        const obj = {
+          auditReportVersion: this.auditReportVersion,
+          vulnerabilities: {},
+          metadata: {
+            vulnerabilities: {
+              info: 0,
+              low: 0,
+              moderate: 0,
+              high: 0,
+              critical: 0,
+              total: this.size
+            },
+            dependencies: {
+              prod: 0,
+              dev: 0,
+              optional: 0,
+              peer: 0,
+              peerOptional: 0,
+              total: this.tree.inventory.size - 1
+            }
+          }
+        };
+        for (const node of this.tree.inventory.values()) {
+          const { dependencies } = obj.metadata;
+          let prod = true;
+          for (const type of [
+            "dev",
+            "optional",
+            "peer",
+            "peerOptional"
+          ]) {
+            if (node[type]) {
+              dependencies[type]++;
+              prod = false;
+            }
+          }
+          if (prod) {
+            dependencies.prod++;
+          }
+        }
+        const vulnerabilities = [];
+        for (const [name, vuln] of this.entries()) {
+          vulnerabilities.push([name, vuln.toJSON()]);
+          obj.metadata.vulnerabilities[vuln.severity]++;
+        }
+        obj.vulnerabilities = vulnerabilities.sort(([a], [b]) => localeCompare(a, b)).reduce((set, [name, vuln]) => {
+          set[name] = vuln;
+          return set;
+        }, {});
+        return obj;
+      }
+      constructor(tree, opts = {}) {
+        super();
+        this.#omit = new Set(opts.omit || []);
+        this.calculator = new Calculator(opts);
+        this.options = opts;
+        this.tree = tree;
+        this.filterSet = opts.filterSet;
+      }
+      async run() {
+        this.report = await this.#getReport();
+        log.silly("audit report", this.report);
+        if (this.report) {
+          await this.#init();
+        }
+        return this;
+      }
+      isVulnerable(node) {
+        const vuln = this.get(node.packageName);
+        return !!(vuln && vuln.isVulnerable(node));
+      }
+      async #init() {
+        const timeEnd = time.start("auditReport:init");
+        const promises = [];
+        for (const [name, advisories2] of Object.entries(this.report)) {
+          for (const advisory of advisories2) {
+            promises.push(this.calculator.calculate(name, advisory));
+          }
+        }
+        const advisories = new Set(await Promise.all(promises));
+        const seen = /* @__PURE__ */ new Set();
+        for (const advisory of advisories) {
+          const { name, range } = advisory;
+          const k = `${name}@${range}`;
+          const vuln = this.get(name) || new Vuln({ name, advisory });
+          if (this.has(name)) {
+            vuln.addAdvisory(advisory);
+          }
+          super.set(name, vuln);
+          if (!seen.has(k)) {
+            const p = [];
+            for (const node of this.tree.inventory.query("packageName", name)) {
+              if (!this.shouldAudit(node)) {
+                continue;
+              }
+              if (!advisory.testVersion(node.version)) {
+                continue;
+              }
+              if (advisory.type === "metavuln") {
+                vuln.addVia(this.get(advisory.dependency));
+              }
+              if (vuln.nodes.has(node)) {
+                continue;
+              }
+              vuln.nodes.add(node);
+              for (const { from: dep, spec } of node.edgesIn) {
+                if (dep.isTop && !vuln.topNodes.has(dep)) {
+                  vuln.fixAvailable = this.#fixAvailable(vuln, spec);
+                  if (vuln.fixAvailable !== true) {
+                    this.topVulns.set(vuln.name, vuln);
+                    vuln.topNodes.add(dep);
+                  }
+                } else {
+                  const calc = this.calculator.calculate(dep.packageName, advisory);
+                  p.push(calc.then((meta) => {
+                    if (meta.testVersion(dep.version, spec)) {
+                      advisories.add(meta);
+                    }
+                  }));
+                }
+              }
+            }
+            await Promise.all(p);
+            seen.add(k);
+          }
+          if (this.get(name).nodes.size === 0) {
+            this.delete(name);
+            continue;
+          }
+          for (const advisory2 of vuln.advisories) {
+            const relevant = [...vuln.nodes].some((n) => advisory2.testVersion(n.version));
+            if (!relevant) {
+              vuln.deleteAdvisory(advisory2);
+            }
+          }
+        }
+        timeEnd();
+      }
+      // given the spec, see if there is a fix available at all, and note whether or not it's a semver major fix or not (i.e. will need --force)
+      #fixAvailable(vuln, spec) {
+        if (!vuln.testSpec(spec)) {
+          return true;
+        }
+        const specObj = npa(spec);
+        if (!specObj.registry) {
+          return false;
+        }
+        if (specObj.subSpec) {
+          spec = specObj.subSpec.rawSpec;
+        }
+        try {
+          const {
+            _isSemVerMajor: isSemVerMajor,
+            version,
+            name
+          } = pickManifest(vuln.packument, spec, {
+            ...this.options,
+            before: null,
+            avoid: vuln.range,
+            avoidStrict: true
+          });
+          return { name, version, isSemVerMajor };
+        } catch (er) {
+          return false;
+        }
+      }
+      set() {
+        throw new Error("do not call AuditReport.set() directly");
+      }
+      async #getReport() {
+        if (this.options.audit === false || this.options.offline === true || this.tree.inventory.size === 1) {
+          return null;
+        }
+        const timeEnd = time.start("auditReport:getReport");
+        try {
+          const body = this.prepareBulkData();
+          log.silly("audit", "bulk request", body);
+          if (!Object.keys(body).length) {
+            return null;
+          }
+          const res = await npmFetch("/-/npm/v1/security/advisories/bulk", {
+            ...this.options,
+            registry: this.options.auditRegistry || this.options.registry,
+            method: "POST",
+            gzip: true,
+            body
+          });
+          return await res.json();
+        } catch (er) {
+          log.verbose("audit error", er);
+          log.silly("audit error", String(er.body));
+          this.error = er;
+          return null;
+        } finally {
+          timeEnd();
+        }
+      }
+      // return true if we should audit this one
+      shouldAudit(node) {
+        if (!node.version || node.isRoot || this.filterSet && this.filterSet?.size !== 0 && !this.filterSet?.has(node)) {
+          return false;
+        }
+        if (this.#omit.size === 0) {
+          return true;
+        }
+        return !node.shouldOmit(this.#omit);
+      }
+      prepareBulkData() {
+        const payload = {};
+        for (const name of this.tree.inventory.query("packageName")) {
+          const set = /* @__PURE__ */ new Set();
+          for (const node of this.tree.inventory.query("packageName", name)) {
+            if (!this.shouldAudit(node)) {
+              continue;
+            }
+            set.add(node.version);
+          }
+          if (set.size) {
+            payload[name] = [...set];
+          }
+        }
+        return payload;
+      }
+    };
+    module2.exports = AuditReport;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/relpath.js
+var require_relpath = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/relpath.js"(exports2, module2) {
+    var { relative } = require("node:path");
+    var relpath = /* @__PURE__ */ __name((from, to) => relative(from, to).replace(/\\/g, "/"), "relpath");
+    module2.exports = relpath;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/packument-cache.js
+var require_packument_cache = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/packument-cache.js"(exports2, module2) {
+    var { LRUCache } = require_commonjs();
+    var { getHeapStatistics } = require("node:v8");
+    var { log } = require_lib2();
+    var PackumentCache = class _PackumentCache extends LRUCache {
+      static {
+        __name(this, "PackumentCache");
+      }
+      static #heapLimit = Math.floor(getHeapStatistics().heap_size_limit);
+      #sizeKey;
+      #disposed = /* @__PURE__ */ new Set();
+      #log(...args) {
+        log.silly("packumentCache", ...args);
+      }
+      constructor({
+        // How much of this.#heapLimit to take up
+        heapFactor = 0.25,
+        // How much of this.#maxSize we allow any one packument to take up
+        // Anything over this is not cached
+        maxEntryFactor = 0.5,
+        sizeKey = "_contentLength"
+      } = {}) {
+        const maxSize = Math.floor(_PackumentCache.#heapLimit * heapFactor);
+        const maxEntrySize = Math.floor(maxSize * maxEntryFactor);
+        super({
+          maxSize,
+          maxEntrySize,
+          sizeCalculation: /* @__PURE__ */ __name((p) => {
+            if (!p[sizeKey]) {
+              return maxEntrySize + 1;
+            }
+            if (p[sizeKey] < 1e4) {
+              return p[sizeKey] * 2;
+            }
+            if (p[sizeKey] < 1e6) {
+              return Math.floor(p[sizeKey] * 1.5);
+            }
+            return maxEntrySize + 1;
+          }, "sizeCalculation"),
+          dispose: /* @__PURE__ */ __name((v, k) => {
+            this.#disposed.add(k);
+            this.#log(k, "dispose");
+          }, "dispose")
+        });
+        this.#sizeKey = sizeKey;
+        this.#log(`heap:${_PackumentCache.#heapLimit} maxSize:${maxSize} maxEntrySize:${maxEntrySize}`);
+      }
+      set(k, v, ...args) {
+        const disposed = this.#disposed.has(k);
+        if (disposed) {
+          this.#disposed.delete(k);
+        }
+        this.#log(k, "set", `size:${v[this.#sizeKey]} disposed:${disposed}`);
+        return super.set(k, v, ...args);
+      }
+      has(k, ...args) {
+        const has = super.has(k, ...args);
+        this.#log(k, `cache-${has ? "hit" : "miss"}`);
+        return has;
+      }
+    };
+    module2.exports = PackumentCache;
+  }
+});
+
+// node_modules/.pnpm/proggy@3.0.0/node_modules/proggy/lib/client.js
+var require_client4 = __commonJS({
+  "node_modules/.pnpm/proggy@3.0.0/node_modules/proggy/lib/client.js"(exports2, module2) {
+    var EE = require("events");
+    var onProgress = Symbol("onProgress");
+    var bars = Symbol("bars");
+    var listener = Symbol("listener");
+    var normData = Symbol("normData");
+    var Client = class extends EE {
+      static {
+        __name(this, "Client");
+      }
+      constructor({ normalize = false, stopOnDone = false } = {}) {
+        super();
+        this.normalize = !!normalize;
+        this.stopOnDone = !!stopOnDone;
+        this[bars] = /* @__PURE__ */ new Map();
+        this[listener] = null;
+      }
+      get size() {
+        return this[bars].size;
+      }
+      get listening() {
+        return !!this[listener];
+      }
+      addListener(...args) {
+        return this.on(...args);
+      }
+      on(ev, ...args) {
+        if (ev === "progress" && !this[listener]) {
+          this.start();
+        }
+        return super.on(ev, ...args);
+      }
+      off(ev, ...args) {
+        return this.removeListener(ev, ...args);
+      }
+      removeListener(ev, ...args) {
+        const ret = super.removeListener(ev, ...args);
+        if (ev === "progress" && this.listeners(ev).length === 0) {
+          this.stop();
+        }
+        return ret;
+      }
+      stop() {
+        if (this[listener]) {
+          process.removeListener("progress", this[listener]);
+          this[listener] = null;
+        }
+      }
+      start() {
+        if (!this[listener]) {
+          this[listener] = (...args) => this[onProgress](...args);
+          process.on("progress", this[listener]);
+        }
+      }
+      [onProgress](key, data) {
+        data = this[normData](key, data);
+        if (!this[bars].has(key)) {
+          this.emit("bar", key, data);
+        }
+        this[bars].set(key, data);
+        this.emit("progress", key, data);
+        if (data.done) {
+          this[bars].delete(key);
+          this.emit("barDone", key, data);
+          if (this.size === 0) {
+            if (this.stopOnDone) {
+              this.stop();
+            }
+            this.emit("done");
+          }
+        }
+      }
+      [normData](key, data) {
+        const actualValue = data.value;
+        const actualTotal = data.total;
+        let value = actualValue;
+        let total = actualTotal;
+        const done = data.done || value >= total;
+        if (this.normalize) {
+          const bar = this[bars].get(key);
+          total = 100;
+          if (done) {
+            value = 100;
+          } else {
+            const pct = 100 * actualValue / actualTotal;
+            if (bar) {
+              value = pct > bar.value ? pct : (100 - bar.value) / 100 + bar.value;
+            }
+          }
+        }
+        return {
+          ...data,
+          key,
+          name: data.name || key,
+          value,
+          total,
+          actualValue,
+          actualTotal,
+          done
+        };
+      }
+    };
+    module2.exports = Client;
+  }
+});
+
+// node_modules/.pnpm/proggy@3.0.0/node_modules/proggy/lib/tracker.js
+var require_tracker = __commonJS({
+  "node_modules/.pnpm/proggy@3.0.0/node_modules/proggy/lib/tracker.js"(exports2, module2) {
+    var EE = require("events");
+    var Tracker = class extends EE {
+      static {
+        __name(this, "Tracker");
+      }
+      constructor(name, key, total) {
+        super();
+        if (!name) {
+          throw new Error("proggy: Tracker needs a name");
+        }
+        if (typeof key === "number" && !total) {
+          total = key;
+          key = null;
+        }
+        if (!total) {
+          total = 100;
+        }
+        if (!key) {
+          key = name;
+        }
+        this.done = false;
+        this.name = name;
+        this.key = key;
+        this.value = 0;
+        this.total = total;
+      }
+      finish(metadata = {}) {
+        this.update(this.total, this.total, metadata);
+      }
+      update(value, total, metadata) {
+        if (!metadata) {
+          if (total && typeof total === "object") {
+            metadata = total;
+          } else {
+            metadata = {};
+          }
+        }
+        if (typeof total !== "number") {
+          total = this.total;
+        }
+        if (this.done) {
+          const msg = `proggy: updating completed tracker: ${JSON.stringify(this.key)}`;
+          throw new Error(msg);
+        }
+        this.value = value;
+        this.total = total;
+        const done = this.value >= this.total;
+        process.emit("progress", this.key, {
+          ...metadata,
+          name: this.name,
+          key: this.key,
+          value,
+          total,
+          done
+        });
+        if (done) {
+          this.done = true;
+          this.emit("done");
+        }
+      }
+    };
+    module2.exports = Tracker;
+  }
+});
+
+// node_modules/.pnpm/proggy@3.0.0/node_modules/proggy/lib/index.js
+var require_lib35 = __commonJS({
+  "node_modules/.pnpm/proggy@3.0.0/node_modules/proggy/lib/index.js"(exports2) {
+    exports2.Client = require_client4();
+    exports2.Tracker = require_tracker();
+    var trackers = /* @__PURE__ */ new Map();
+    exports2.createTracker = (name, key, total) => {
+      const tracker = new exports2.Tracker(name, key, total);
+      if (trackers.has(tracker.key)) {
+        const msg = `proggy: duplicate progress id ${JSON.stringify(tracker.key)}`;
+        throw new Error(msg);
+      }
+      trackers.set(tracker.key, tracker);
+      tracker.on("done", () => trackers.delete(tracker.key));
+      return tracker;
+    };
+    exports2.createClient = (options = {}) => new exports2.Client(options);
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/tracker.js
+var require_tracker2 = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/tracker.js"(exports2, module2) {
+    var proggy = require_lib35();
+    module2.exports = (cls) => class Tracker extends cls {
+      static {
+        __name(this, "Tracker");
+      }
+      #progress = /* @__PURE__ */ new Map();
+      #createTracker(key, name) {
+        const tracker = new proggy.Tracker(name ?? key);
+        tracker.on("done", () => this.#progress.delete(key));
+        this.#progress.set(key, tracker);
+      }
+      addTracker(section, subsection = null, key = null) {
+        if (section === null || section === void 0) {
+          this.#onError(`Tracker can't be null or undefined`);
+        }
+        if (key === null) {
+          key = subsection;
+        }
+        const hasTracker = this.#progress.has(section);
+        const hasSubtracker = this.#progress.has(`${section}:${key}`);
+        if (hasTracker && subsection === null) {
+          this.#onError(`Tracker "${section}" already exists`);
+        } else if (!hasTracker && subsection === null) {
+          this.#createTracker(section);
+        } else if (!hasTracker && subsection !== null) {
+          this.#onError(`Parent tracker "${section}" does not exist`);
+        } else if (!hasTracker || !hasSubtracker) {
+          const parentTracker = this.#progress.get(section);
+          parentTracker.update(parentTracker.value, parentTracker.total + 1);
+          this.#createTracker(`${section}:${key}`, `${section}:${subsection}`);
+        }
+      }
+      finishTracker(section, subsection = null, key = null) {
+        if (section === null || section === void 0) {
+          this.#onError(`Tracker can't be null or undefined`);
+        }
+        if (key === null) {
+          key = subsection;
+        }
+        const hasTracker = this.#progress.has(section);
+        const hasSubtracker = this.#progress.has(`${section}:${key}`);
+        if (hasTracker && subsection === null) {
+          const keys = this.#progress.keys();
+          for (const key2 of keys) {
+            if (key2.match(new RegExp(section + ":"))) {
+              this.finishTracker(section, key2);
+            }
+          }
+          this.#progress.get(section).finish();
+        } else if (!hasTracker && subsection === null) {
+          this.#onError(`Tracker "${section}" does not exist`);
+        } else if (!hasTracker || hasSubtracker) {
+          const parentTracker = this.#progress.get(section);
+          parentTracker.update(parentTracker.value + 1);
+          this.#progress.get(`${section}:${key}`).finish();
+        }
+      }
+      #onError(msg) {
+        throw new Error(msg);
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/promise-call-limit@3.0.2/node_modules/promise-call-limit/dist/commonjs/index.js
+var require_commonjs9 = __commonJS({
+  "node_modules/.pnpm/promise-call-limit@3.0.2/node_modules/promise-call-limit/dist/commonjs/index.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.callLimit = void 0;
+    var os2 = __importStar(require("node:os"));
+    var defLimit = "availableParallelism" in os2 ? Math.max(1, os2.availableParallelism() - 1) : Math.max(1, os2.cpus().length - 1);
+    var callLimit = /* @__PURE__ */ __name((queue, { limit = defLimit, rejectLate } = {}) => new Promise((res, rej) => {
+      let active = 0;
+      let current = 0;
+      const results = [];
+      let rejected = false;
+      let rejection;
+      const reject = /* @__PURE__ */ __name((er) => {
+        if (rejected)
+          return;
+        rejected = true;
+        rejection ??= er;
+        if (!rejectLate)
+          rej(rejection);
+      }, "reject");
+      let resolved = false;
+      const resolve = /* @__PURE__ */ __name(() => {
+        if (resolved || active > 0)
+          return;
+        resolved = true;
+        res(results);
+      }, "resolve");
+      const run = /* @__PURE__ */ __name(() => {
+        const c = current++;
+        if (c >= queue.length)
+          return rejected ? reject() : resolve();
+        active++;
+        const step = queue[c];
+        if (!step)
+          throw new Error("walked off queue");
+        results[c] = step().then((result) => {
+          active--;
+          results[c] = result;
+          return result;
+        }, (er) => {
+          active--;
+          reject(er);
+        }).then((result) => {
+          if (rejected && active === 0)
+            return rej(rejection);
+          run();
+          return result;
+        });
+      }, "run");
+      for (let i = 0; i < limit; i++)
+        run();
+    }), "callLimit");
+    exports2.callLimit = callLimit;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/realpath.js
+var require_realpath = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/realpath.js"(exports2, module2) {
+    var { lstat, readlink } = require("node:fs/promises");
+    var { resolve, basename, dirname } = require("node:path");
+    var realpathCached = /* @__PURE__ */ __name((path, rpcache, stcache, depth) => {
+      if (depth > 2e3) {
+        throw eloop(path);
+      }
+      path = resolve(path);
+      if (rpcache.has(path)) {
+        return Promise.resolve(rpcache.get(path));
+      }
+      const dir = dirname(path);
+      const base = basename(path);
+      if (base && rpcache.has(dir)) {
+        return realpathChild(dir, base, rpcache, stcache, depth);
+      }
+      if (!base) {
+        rpcache.set(dir, dir);
+        return Promise.resolve(dir);
+      }
+      return realpathCached(dir, rpcache, stcache, depth + 1).then(() => realpathCached(path, rpcache, stcache, depth + 1));
+    }, "realpathCached");
+    var lstatCached = /* @__PURE__ */ __name((path, stcache) => {
+      if (stcache.has(path)) {
+        return Promise.resolve(stcache.get(path));
+      }
+      const p = lstat(path).then((st) => {
+        stcache.set(path, st);
+        return st;
+      });
+      stcache.set(path, p);
+      return p;
+    }, "lstatCached");
+    var eloop = /* @__PURE__ */ __name((path) => Object.assign(new Error(
+      `ELOOP: too many symbolic links encountered, stat '${path}'`
+    ), {
+      errno: -62,
+      syscall: "stat",
+      code: "ELOOP",
+      path
+    }), "eloop");
+    var realpathChild = /* @__PURE__ */ __name((dir, base, rpcache, stcache, depth) => {
+      const realdir = rpcache.get(dir);
+      if (typeof realdir === "undefined") {
+        throw new Error("in realpathChild without parent being in realpath cache");
+      }
+      const realish = resolve(realdir, base);
+      return lstatCached(realish, stcache).then((st) => {
+        if (!st.isSymbolicLink()) {
+          rpcache.set(resolve(dir, base), realish);
+          return realish;
+        }
+        return readlink(realish).then((target) => {
+          const resolved = resolve(realdir, target);
+          if (realish === resolved) {
+            throw eloop(realish);
+          }
+          return realpathCached(resolved, rpcache, stcache, depth + 1);
+        }).then((real) => {
+          rpcache.set(resolve(dir, base), real);
+          return real;
+        });
+      });
+    }, "realpathChild");
+    module2.exports = realpathCached;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/debug.js
+var require_debug2 = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/debug.js"(exports2, module2) {
+    var debug = process.env.ARBORIST_DEBUG !== "0" && (process.env.ARBORIST_DEBUG === "1" || /\barborist\b/.test(process.env.NODE_DEBUG || "") || process.env.npm_package_name === "@npmcli/arborist" && ["test", "snap"].includes(process.env.npm_lifecycle_event) || process.cwd() === require("node:path").resolve(__dirname, ".."));
+    module2.exports = debug ? (fn) => fn() : () => {
+    };
+    var red = process.stderr.isTTY ? (msg) => `\x1B[31m${msg}\x1B[39m` : (m) => m;
+    module2.exports.log = (...msg) => module2.exports(() => {
+      const { format } = require("node:util");
+      const prefix = `
+${process.pid} ${red(format(msg.shift()))} `;
+      msg = (prefix + format(...msg).trim().split("\n").join(prefix)).trim();
+      console.error(msg);
+    });
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/tree-check.js
+var require_tree_check = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/tree-check.js"(exports2, module2) {
+    var debug = require_debug2();
+    var checkTree = /* @__PURE__ */ __name((tree, checkUnreachable = true) => {
+      const log = [["START TREE CHECK", tree.path]];
+      if (!tree.root || !tree.root.inventory) {
+        return tree;
+      }
+      const { inventory } = tree.root;
+      const seen = /* @__PURE__ */ new Set();
+      const check = /* @__PURE__ */ __name((node, via = tree, viaType = "self") => {
+        log.push([
+          "CHECK",
+          node && node.location,
+          via && via.location,
+          viaType,
+          "seen=" + seen.has(node),
+          "promise=" + !!(node && node.then),
+          "root=" + !!(node && node.isRoot)
+        ]);
+        if (!node || seen.has(node) || node.then) {
+          return;
+        }
+        seen.add(node);
+        if (node.isRoot && node !== tree.root) {
+          throw Object.assign(new Error("double root"), {
+            node: node.path,
+            realpath: node.realpath,
+            tree: tree.path,
+            root: tree.root.path,
+            via: via.path,
+            viaType,
+            log
+          });
+        }
+        if (node.root !== tree.root) {
+          throw Object.assign(new Error("node from other root in tree"), {
+            node: node.path,
+            realpath: node.realpath,
+            tree: tree.path,
+            root: tree.root.path,
+            via: via.path,
+            viaType,
+            otherRoot: node.root && node.root.path,
+            log
+          });
+        }
+        if (!node.isRoot && node.inventory.size !== 0) {
+          throw Object.assign(new Error("non-root has non-zero inventory"), {
+            node: node.path,
+            tree: tree.path,
+            root: tree.root.path,
+            via: via.path,
+            viaType,
+            inventory: [...node.inventory.values()].map((node2) => [node2.path, node2.location]),
+            log
+          });
+        }
+        if (!node.isRoot && !inventory.has(node) && !node.dummy) {
+          throw Object.assign(new Error("not in inventory"), {
+            node: node.path,
+            tree: tree.path,
+            root: tree.root.path,
+            via: via.path,
+            viaType,
+            log
+          });
+        }
+        const devEdges = [...node.edgesOut.values()].filter((e) => e.dev);
+        if (!node.isTop && devEdges.length) {
+          throw Object.assign(new Error("dev edges on non-top node"), {
+            node: node.path,
+            tree: tree.path,
+            root: tree.root.path,
+            via: via.path,
+            viaType,
+            devEdges: devEdges.map((e) => [e.type, e.name, e.spec, e.error]),
+            log
+          });
+        }
+        if (node.path === tree.root.path && node !== tree.root && !tree.root.isLink) {
+          throw Object.assign(new Error("node with same path as root"), {
+            node: node.path,
+            tree: tree.path,
+            root: tree.root.path,
+            via: via.path,
+            viaType,
+            log
+          });
+        }
+        if (!node.isLink && node.path !== node.realpath) {
+          throw Object.assign(new Error("non-link with mismatched path/realpath"), {
+            node: node.path,
+            tree: tree.path,
+            realpath: node.realpath,
+            root: tree.root.path,
+            via: via.path,
+            viaType,
+            log
+          });
+        }
+        const { parent, fsParent, target } = node;
+        check(parent, node, "parent");
+        check(fsParent, node, "fsParent");
+        check(target, node, "target");
+        log.push(["CHILDREN", node.location, ...node.children.keys()]);
+        for (const kid of node.children.values()) {
+          check(kid, node, "children");
+        }
+        for (const kid of node.fsChildren) {
+          check(kid, node, "fsChildren");
+        }
+        for (const link of node.linksIn) {
+          check(link, node, "linksIn");
+        }
+        for (const top of node.tops) {
+          check(top, node, "tops");
+        }
+        log.push(["DONE", node.location]);
+      }, "check");
+      check(tree);
+      if (checkUnreachable) {
+        for (const node of inventory.values()) {
+          if (!seen.has(node) && node !== tree.root) {
+            throw Object.assign(new Error("unreachable in inventory"), {
+              node: node.path,
+              realpath: node.realpath,
+              location: node.location,
+              root: tree.root.path,
+              tree: tree.path,
+              log
+            });
+          }
+        }
+      }
+      return tree;
+    }, "checkTree");
+    module2.exports = (tree) => tree;
+    debug(() => module2.exports = checkTree);
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/peer-entry-sets.js
+var require_peer_entry_sets = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/peer-entry-sets.js"(exports2, module2) {
+    var peerEntrySets = /* @__PURE__ */ __name((node) => {
+      const unionSet = /* @__PURE__ */ new Set([node]);
+      for (const node2 of unionSet) {
+        for (const edge of node2.edgesOut.values()) {
+          if (edge.valid && edge.peer && edge.to) {
+            unionSet.add(edge.to);
+          }
+        }
+        for (const edge of node2.edgesIn) {
+          if (edge.valid && edge.peer) {
+            unionSet.add(edge.from);
+          }
+        }
+      }
+      const entrySets = /* @__PURE__ */ new Map();
+      for (const peer of unionSet) {
+        for (const edge of peer.edgesIn) {
+          if (!edge.valid) {
+            continue;
+          }
+          if (!edge.peer || edge.from.isTop) {
+            const sub = /* @__PURE__ */ new Set([peer]);
+            for (const peer2 of sub) {
+              for (const edge2 of peer2.edgesOut.values()) {
+                if (edge2.valid && edge2.peer && edge2.to) {
+                  sub.add(edge2.to);
+                }
+              }
+            }
+            if (sub.has(node)) {
+              entrySets.set(edge, sub);
+            }
+          }
+        }
+      }
+      return entrySets;
+    }, "peerEntrySets");
+    module2.exports = peerEntrySets;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/deepest-nesting-target.js
+var require_deepest_nesting_target = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/deepest-nesting-target.js"(exports2, module2) {
+    var deepestNestingTarget = /* @__PURE__ */ __name((start, name) => {
+      for (const target of start.ancestry()) {
+        if (target.isProjectRoot || !target.resolveParent || target.globalTop) {
+          return target;
+        }
+        const targetEdge = target.edgesOut.get(name);
+        if (!targetEdge || !targetEdge.peer) {
+          return target;
+        }
+      }
+    }, "deepestNestingTarget");
+    module2.exports = deepestNestingTarget;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/can-place-dep.js
+var require_can_place_dep = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/can-place-dep.js"(exports2, module2) {
+    var localeCompare = require_string_locale_compare()("en");
+    var semver2 = require_semver2();
+    var debug = require_debug2();
+    var peerEntrySets = require_peer_entry_sets();
+    var deepestNestingTarget = require_deepest_nesting_target();
+    var CONFLICT = Symbol("CONFLICT");
+    var OK = Symbol("OK");
+    var REPLACE = Symbol("REPLACE");
+    var KEEP = Symbol("KEEP");
+    var CanPlaceDep = class _CanPlaceDep {
+      static {
+        __name(this, "CanPlaceDep");
+      }
+      // dep is a dep that we're trying to place.  it should already live in
+      // a virtual tree where its peer set is loaded as children of the root.
+      // target is the actual place where we're trying to place this dep
+      // in a node_modules folder.
+      // edge is the edge that we're trying to satisfy with this placement.
+      // parent is the CanPlaceDep object of the entry node when placing a peer.
+      constructor(options) {
+        const {
+          dep,
+          target,
+          edge,
+          preferDedupe,
+          parent = null,
+          peerPath = [],
+          explicitRequest = false
+        } = options;
+        debug(() => {
+          if (!dep) {
+            throw new Error("no dep provided to CanPlaceDep");
+          }
+          if (!target) {
+            throw new Error("no target provided to CanPlaceDep");
+          }
+          if (!edge) {
+            throw new Error("no edge provided to CanPlaceDep");
+          }
+          this._treeSnapshot = JSON.stringify([...target.root.inventory.entries()].map(([loc, { packageName, version, resolved }]) => {
+            return [loc, packageName, version, resolved];
+          }).sort(([a], [b]) => localeCompare(a, b)));
+        });
+        this.canPlace = null;
+        this.canPlaceSelf = null;
+        this.dep = dep;
+        this.target = target;
+        this.edge = edge;
+        this.explicitRequest = explicitRequest;
+        this.peerPath = peerPath;
+        this.preferDedupe = !!preferDedupe || edge.peer;
+        this.parent = parent;
+        this.children = [];
+        this.isSource = target === this.peerSetSource;
+        this.name = edge.name;
+        this.current = target.children.get(this.name);
+        this.targetEdge = target.edgesOut.get(this.name);
+        this.conflicts = /* @__PURE__ */ new Map();
+        this.edgeOverride = !dep.satisfies(edge);
+        this.canPlace = this.checkCanPlace();
+        if (!this.canPlaceSelf) {
+          this.canPlaceSelf = this.canPlace;
+        }
+        debug(() => {
+          const treeSnapshot = JSON.stringify([...target.root.inventory.entries()].map(([loc, { packageName, version, resolved }]) => {
+            return [loc, packageName, version, resolved];
+          }).sort(([a], [b]) => localeCompare(a, b)));
+          if (this._treeSnapshot !== treeSnapshot) {
+            throw Object.assign(new Error("tree changed in CanPlaceDep"), {
+              expect: this._treeSnapshot,
+              actual: treeSnapshot
+            });
+          }
+        });
+      }
+      checkCanPlace() {
+        const { target, targetEdge, current, dep } = this;
+        if (dep.errors.length) {
+          return current ? REPLACE : OK;
+        }
+        if (targetEdge && targetEdge.peer && !target.isTop) {
+          return CONFLICT;
+        }
+        if (!current && targetEdge && !dep.satisfies(targetEdge) && targetEdge !== this.edge) {
+          return CONFLICT;
+        }
+        return current ? this.checkCanPlaceCurrent() : this.checkCanPlaceNoCurrent();
+      }
+      // we know that the target has a dep by this name in its node_modules
+      // already.  Can return KEEP, REPLACE, or CONFLICT.
+      checkCanPlaceCurrent() {
+        const { preferDedupe, explicitRequest, current, target, edge, dep } = this;
+        if (dep.matches(current)) {
+          if (current.satisfies(edge) || this.edgeOverride) {
+            return explicitRequest ? REPLACE : KEEP;
+          }
+        }
+        const { version: curVer } = current;
+        const { version: newVer } = dep;
+        const tryReplace = curVer && newVer && semver2.gte(newVer, curVer);
+        if (tryReplace && dep.canReplace(current)) {
+          const cpp = this.canPlacePeers(REPLACE);
+          if (cpp !== CONFLICT) {
+            return cpp;
+          }
+        }
+        if (current.satisfies(edge) && (!explicitRequest || preferDedupe)) {
+          return KEEP;
+        }
+        if (preferDedupe && !tryReplace && dep.canReplace(current)) {
+          const cpp = this.canPlacePeers(REPLACE);
+          if (cpp !== CONFLICT) {
+            return cpp;
+          }
+        }
+        const myDeepest = this.deepestNestingTarget;
+        if (target !== myDeepest) {
+          return CONFLICT;
+        }
+        if (!edge.peer && target === edge.from) {
+          return this.canPlacePeers(REPLACE);
+        }
+        if (!this.parent && !edge.peer) {
+          return CONFLICT;
+        }
+        let canReplace = true;
+        for (const [entryEdge, currentPeers] of peerEntrySets(current)) {
+          if (entryEdge === this.edge || entryEdge === this.peerEntryEdge) {
+            continue;
+          }
+          const entryNode = entryEdge.to;
+          const entryRep = dep.parent.children.get(entryNode.name);
+          if (entryRep) {
+            if (entryRep.canReplace(entryNode, dep.parent.children.keys())) {
+              continue;
+            }
+          }
+          let canClobber = !entryRep;
+          if (!entryRep) {
+            const peerReplacementWalk = /* @__PURE__ */ new Set([entryNode]);
+            OUTER: for (const currentPeer of peerReplacementWalk) {
+              for (const edge2 of currentPeer.edgesOut.values()) {
+                if (!edge2.peer || !edge2.valid) {
+                  continue;
+                }
+                const rep = dep.parent.children.get(edge2.name);
+                if (!rep) {
+                  if (edge2.to) {
+                    peerReplacementWalk.add(edge2.to);
+                  }
+                  continue;
+                }
+                if (!rep.satisfies(edge2)) {
+                  canClobber = false;
+                  break OUTER;
+                }
+              }
+            }
+          }
+          if (canClobber) {
+            continue;
+          }
+          let canNestCurrent = true;
+          for (const currentPeer of currentPeers) {
+            if (!canNestCurrent) {
+              break;
+            }
+            const curDeep = deepestNestingTarget(entryEdge.from, currentPeer.name);
+            if (curDeep === target || target.isDescendantOf(curDeep)) {
+              canNestCurrent = false;
+              canReplace = false;
+            }
+            if (canNestCurrent) {
+              continue;
+            }
+          }
+        }
+        if (canReplace) {
+          return this.canPlacePeers(REPLACE);
+        }
+        return CONFLICT;
+      }
+      checkCanPlaceNoCurrent() {
+        const { target, peerEntryEdge, dep, name } = this;
+        const current = target !== peerEntryEdge.from && target.resolve(name);
+        if (current) {
+          for (const edge of current.edgesIn.values()) {
+            if (edge.from.isDescendantOf(target) && edge.valid) {
+              if (!dep.satisfies(edge)) {
+                return CONFLICT;
+              }
+            }
+          }
+        }
+        return this.canPlacePeers(OK);
+      }
+      get deepestNestingTarget() {
+        const start = this.parent ? this.parent.deepestNestingTarget : this.edge.from;
+        return deepestNestingTarget(start, this.name);
+      }
+      get conflictChildren() {
+        return this.allChildren.filter((c) => c.canPlace === CONFLICT);
+      }
+      get allChildren() {
+        const set = new Set(this.children);
+        for (const child of set) {
+          for (const grandchild of child.children) {
+            set.add(grandchild);
+          }
+        }
+        return [...set];
+      }
+      get top() {
+        return this.parent ? this.parent.top : this;
+      }
+      // check if peers can go here.  returns state or CONFLICT
+      canPlacePeers(state) {
+        this.canPlaceSelf = state;
+        if (this._canPlacePeers) {
+          return this._canPlacePeers;
+        }
+        const peerPath = [...this.peerPath, this.dep];
+        let sawConflict = false;
+        for (const peerEdge of this.dep.edgesOut.values()) {
+          if (!peerEdge.peer || !peerEdge.to || peerPath.includes(peerEdge.to)) {
+            continue;
+          }
+          const peer = peerEdge.to;
+          const target = deepestNestingTarget(this.target, peer.name);
+          const cpp = new _CanPlaceDep({
+            dep: peer,
+            target,
+            parent: this,
+            edge: peerEdge,
+            peerPath,
+            // always place peers in preferDedupe mode
+            preferDedupe: true
+          });
+          debug(() => {
+            if (this.children.some((c) => c.dep === cpp.dep)) {
+              throw new Error("checking same dep repeatedly");
+            }
+          });
+          this.children.push(cpp);
+          if (cpp.canPlace === CONFLICT) {
+            sawConflict = true;
+          }
+        }
+        this._canPlacePeers = sawConflict ? CONFLICT : state;
+        return this._canPlacePeers;
+      }
+      // what is the node that is causing this peerSet to be placed?
+      get peerSetSource() {
+        return this.parent ? this.parent.peerSetSource : this.edge.from;
+      }
+      get peerEntryEdge() {
+        return this.top.edge;
+      }
+      static get CONFLICT() {
+        return CONFLICT;
+      }
+      static get OK() {
+        return OK;
+      }
+      static get REPLACE() {
+        return REPLACE;
+      }
+      static get KEEP() {
+        return KEEP;
+      }
+      get description() {
+        const { canPlace } = this;
+        return canPlace && canPlace.description || /* istanbul ignore next - old node affordance */
+        canPlace;
+      }
+    };
+    module2.exports = CanPlaceDep;
+  }
+});
+
+// node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/is-windows.js
+var require_is_windows = __commonJS({
+  "node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/is-windows.js"(exports2, module2) {
+    var platform = process.env.__TESTING_BIN_LINKS_PLATFORM__ || process.platform;
+    module2.exports = platform === "win32";
+  }
+});
+
+// node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/get-node-modules.js
+var require_get_node_modules = __commonJS({
+  "node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/get-node-modules.js"(exports2, module2) {
+    var { dirname, basename } = require("path");
+    var memo = /* @__PURE__ */ new Map();
+    module2.exports = (path) => {
+      if (memo.has(path)) {
+        return memo.get(path);
+      }
+      const scopeOrNm = dirname(path);
+      const nm = basename(scopeOrNm) === "node_modules" ? scopeOrNm : dirname(scopeOrNm);
+      memo.set(path, nm);
+      return nm;
+    };
+  }
+});
+
+// node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/get-prefix.js
+var require_get_prefix = __commonJS({
+  "node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/get-prefix.js"(exports2, module2) {
+    var { dirname } = require("path");
+    var getNodeModules = require_get_node_modules();
+    module2.exports = (path) => dirname(getNodeModules(path));
+  }
+});
+
+// node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/bin-target.js
+var require_bin_target = __commonJS({
+  "node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/bin-target.js"(exports2, module2) {
+    var isWindows = require_is_windows();
+    var getPrefix = require_get_prefix();
+    var getNodeModules = require_get_node_modules();
+    var { dirname } = require("path");
+    module2.exports = ({ top, path }) => !top ? getNodeModules(path) + "/.bin" : isWindows ? getPrefix(path) : dirname(getPrefix(path)) + "/bin";
+  }
+});
+
+// node_modules/.pnpm/cmd-shim@7.0.0/node_modules/cmd-shim/lib/to-batch-syntax.js
+var require_to_batch_syntax = __commonJS({
+  "node_modules/.pnpm/cmd-shim@7.0.0/node_modules/cmd-shim/lib/to-batch-syntax.js"(exports2) {
+    exports2.replaceDollarWithPercentPair = replaceDollarWithPercentPair;
+    exports2.convertToSetCommand = convertToSetCommand;
+    exports2.convertToSetCommands = convertToSetCommands;
+    function convertToSetCommand(key, value) {
+      var line = "";
+      key = key || "";
+      key = key.trim();
+      value = value || "";
+      value = value.trim();
+      if (key && value && value.length > 0) {
+        line = "@SET " + key + "=" + replaceDollarWithPercentPair(value) + "\r\n";
+      }
+      return line;
+    }
+    __name(convertToSetCommand, "convertToSetCommand");
+    function extractVariableValuePairs(declarations) {
+      var pairs = {};
+      declarations.map(function(declaration) {
+        var split = declaration.split("=");
+        pairs[split[0]] = split[1];
+      });
+      return pairs;
+    }
+    __name(extractVariableValuePairs, "extractVariableValuePairs");
+    function convertToSetCommands(variableString) {
+      var variableValuePairs = extractVariableValuePairs(variableString.split(" "));
+      var variableDeclarationsAsBatch = "";
+      Object.keys(variableValuePairs).forEach(function(key) {
+        variableDeclarationsAsBatch += convertToSetCommand(key, variableValuePairs[key]);
+      });
+      return variableDeclarationsAsBatch;
+    }
+    __name(convertToSetCommands, "convertToSetCommands");
+    function replaceDollarWithPercentPair(value) {
+      var dollarExpressions = /\$\{?([^$@#?\- \t{}:]+)\}?/g;
+      var result = "";
+      var startIndex = 0;
+      do {
+        var match = dollarExpressions.exec(value);
+        if (match) {
+          var betweenMatches = value.substring(startIndex, match.index) || "";
+          result += betweenMatches + "%" + match[1] + "%";
+          startIndex = dollarExpressions.lastIndex;
+        }
+      } while (dollarExpressions.lastIndex > 0);
+      result += value.slice(startIndex);
+      return result;
+    }
+    __name(replaceDollarWithPercentPair, "replaceDollarWithPercentPair");
+  }
+});
+
+// node_modules/.pnpm/cmd-shim@7.0.0/node_modules/cmd-shim/lib/index.js
+var require_lib36 = __commonJS({
+  "node_modules/.pnpm/cmd-shim@7.0.0/node_modules/cmd-shim/lib/index.js"(exports2, module2) {
+    var {
+      chmod,
+      mkdir,
+      readFile,
+      stat,
+      unlink,
+      writeFile
+    } = require("fs/promises");
+    var { dirname, relative } = require("path");
+    var toBatchSyntax = require_to_batch_syntax();
+    var shebangExpr = /^#!\s*(?:\/usr\/bin\/env\s+(?:-S\s+)?((?:[^ \t=]+=[^ \t=]+\s+)*))?([^ \t]+)(.*)$/;
+    var cmdShimIfExists = /* @__PURE__ */ __name((from, to) => stat(from).then(() => cmdShim(from, to), () => {
+    }), "cmdShimIfExists");
+    var rm = /* @__PURE__ */ __name((path) => unlink(path).catch(() => {
+    }), "rm");
+    var cmdShim = /* @__PURE__ */ __name((from, to) => stat(from).then(() => cmdShim_(from, to)), "cmdShim");
+    var cmdShim_ = /* @__PURE__ */ __name((from, to) => Promise.all([
+      rm(to),
+      rm(to + ".cmd"),
+      rm(to + ".ps1")
+    ]).then(() => writeShim(from, to)), "cmdShim_");
+    var writeShim = /* @__PURE__ */ __name((from, to) => (
+      // make a cmd file and a sh script
+      // First, check if the bin is a #! of some sort.
+      // If not, then assume it's something that'll be compiled, or some other
+      // sort of script, and just call it directly.
+      mkdir(dirname(to), { recursive: true }).then(() => readFile(from, "utf8")).then((data) => {
+        const firstLine = data.trim().split(/\r*\n/)[0];
+        const shebang = firstLine.match(shebangExpr);
+        if (!shebang) {
+          return writeShim_(from, to);
+        }
+        const vars = shebang[1] || "";
+        const prog = shebang[2];
+        const args = shebang[3] || "";
+        return writeShim_(from, to, prog, args, vars);
+      }, () => writeShim_(from, to))
+    ), "writeShim");
+    var writeShim_ = /* @__PURE__ */ __name((from, to, prog, args, variables) => {
+      let shTarget = relative(dirname(to), from);
+      let target = shTarget.split("/").join("\\");
+      let longProg;
+      let shProg = prog && prog.split("\\").join("/");
+      let shLongProg;
+      let pwshProg = shProg && `"${shProg}$exe"`;
+      let pwshLongProg;
+      shTarget = shTarget.split("\\").join("/");
+      args = args || "";
+      variables = variables || "";
+      if (!prog) {
+        prog = `"%dp0%\\${target}"`;
+        shProg = `"$basedir/${shTarget}"`;
+        pwshProg = shProg;
+        args = "";
+        target = "";
+        shTarget = "";
+      } else {
+        longProg = `"%dp0%\\${prog}.exe"`;
+        shLongProg = `"$basedir/${prog}"`;
+        pwshLongProg = `"$basedir/${prog}$exe"`;
+        target = `"%dp0%\\${target}"`;
+        shTarget = `"$basedir/${shTarget}"`;
+      }
+      const head = "@ECHO off\r\nGOTO start\r\n:find_dp0\r\nSET dp0=%~dp0\r\nEXIT /b\r\n:start\r\nSETLOCAL\r\nCALL :find_dp0\r\n";
+      let cmd;
+      if (longProg) {
+        shLongProg = shLongProg.trim();
+        args = args.trim();
+        const variablesBatch = toBatchSyntax.convertToSetCommands(variables);
+        cmd = head + variablesBatch + `\r
+IF EXIST ${longProg} (\r
+  SET "_prog=${longProg.replace(/(^")|("$)/g, "")}"\r
+) ELSE (\r
+  SET "_prog=${prog.replace(/(^")|("$)/g, "")}"\r
+  SET PATHEXT=%PATHEXT:;.JS;=;%\r
+)\r
+\r
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" ${args} ${target} %*\r
+`;
+      } else {
+        cmd = `${head}${prog} ${args} ${target} %*\r
+`;
+      }
+      let sh = "#!/bin/sh\n";
+      sh = sh + `basedir=$(dirname "$(echo "$0" | sed -e 's,\\\\,/,g')")
+
+case \`uname\` in
+    *CYGWIN*|*MINGW*|*MSYS*)
+        if command -v cygpath > /dev/null 2>&1; then
+            basedir=\`cygpath -w "$basedir"\`
+        fi
+    ;;
+esac
+
+`;
+      if (shLongProg) {
+        sh = sh + `if [ -x ${shLongProg} ]; then
+  exec ${variables}${shLongProg} ${args} ${shTarget} "$@"
+else 
+  exec ${variables}${shProg} ${args} ${shTarget} "$@"
+fi
+`;
+      } else {
+        sh = sh + `exec ${shProg} ${args} ${shTarget} "$@"
+`;
+      }
+      let pwsh = '#!/usr/bin/env pwsh\n$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent\n\n$exe=""\nif ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {\n  # Fix case when both the Windows and Linux builds of Node\n  # are installed in the same directory\n  $exe=".exe"\n}\n';
+      if (shLongProg) {
+        pwsh = pwsh + `$ret=0
+if (Test-Path ${pwshLongProg}) {
+  # Support pipeline input
+  if ($MyInvocation.ExpectingInput) {
+    $input | & ${pwshLongProg} ${args} ${shTarget} $args
+  } else {
+    & ${pwshLongProg} ${args} ${shTarget} $args
+  }
+  $ret=$LASTEXITCODE
+} else {
+  # Support pipeline input
+  if ($MyInvocation.ExpectingInput) {
+    $input | & ${pwshProg} ${args} ${shTarget} $args
+  } else {
+    & ${pwshProg} ${args} ${shTarget} $args
+  }
+  $ret=$LASTEXITCODE
+}
+exit $ret
+`;
+      } else {
+        pwsh = pwsh + `# Support pipeline input
+if ($MyInvocation.ExpectingInput) {
+  $input | & ${pwshProg} ${args} ${shTarget} $args
+} else {
+  & ${pwshProg} ${args} ${shTarget} $args
+}
+exit $LASTEXITCODE
+`;
+      }
+      return Promise.all([
+        writeFile(to + ".ps1", pwsh, "utf8"),
+        writeFile(to + ".cmd", cmd, "utf8"),
+        writeFile(to, sh, "utf8")
+      ]).then(() => chmodShim(to));
+    }, "writeShim_");
+    var chmodShim = /* @__PURE__ */ __name((to) => Promise.all([
+      chmod(to, 493),
+      chmod(to + ".cmd", 493),
+      chmod(to + ".ps1", 493)
+    ]), "chmodShim");
+    module2.exports = cmdShim;
+    cmdShim.ifExists = cmdShimIfExists;
+  }
+});
+
+// node_modules/.pnpm/read-cmd-shim@5.0.0/node_modules/read-cmd-shim/lib/index.js
+var require_lib37 = __commonJS({
+  "node_modules/.pnpm/read-cmd-shim@5.0.0/node_modules/read-cmd-shim/lib/index.js"(exports2, module2) {
+    var fs = require("fs");
+    var { promisify } = require("util");
+    var { readFileSync } = fs;
+    var readFile = promisify(fs.readFile);
+    var extractPath = /* @__PURE__ */ __name((path, cmdshimContents) => {
+      if (/[.]cmd$/.test(path)) {
+        return extractPathFromCmd(cmdshimContents);
+      } else if (/[.]ps1$/.test(path)) {
+        return extractPathFromPowershell(cmdshimContents);
+      } else {
+        return extractPathFromCygwin(cmdshimContents);
+      }
+    }, "extractPath");
+    var extractPathFromPowershell = /* @__PURE__ */ __name((cmdshimContents) => {
+      const matches = cmdshimContents.match(/"[$]basedir[/]([^"]+?)"\s+[$]args/);
+      return matches && matches[1];
+    }, "extractPathFromPowershell");
+    var extractPathFromCmd = /* @__PURE__ */ __name((cmdshimContents) => {
+      const matches = cmdshimContents.match(/"%(?:~dp0|dp0%)\\([^"]+?)"\s+%[*]/);
+      return matches && matches[1];
+    }, "extractPathFromCmd");
+    var extractPathFromCygwin = /* @__PURE__ */ __name((cmdshimContents) => {
+      const matches = cmdshimContents.match(/"[$]basedir[/]([^"]+?)"\s+"[$]@"/);
+      return matches && matches[1];
+    }, "extractPathFromCygwin");
+    var wrapError = /* @__PURE__ */ __name((thrown, newError) => {
+      newError.message = thrown.message;
+      newError.code = thrown.code;
+      newError.path = thrown.path;
+      return newError;
+    }, "wrapError");
+    var notaShim = /* @__PURE__ */ __name((path, er) => {
+      if (!er) {
+        er = new Error();
+        Error.captureStackTrace(er, notaShim);
+      }
+      er.code = "ENOTASHIM";
+      er.message = `Can't read shim path from '${path}', it doesn't appear to be a cmd-shim`;
+      return er;
+    }, "notaShim");
+    var readCmdShim = /* @__PURE__ */ __name((path) => {
+      const er = new Error();
+      Error.captureStackTrace(er, readCmdShim);
+      return readFile(path).then((contents) => {
+        const destination = extractPath(path, contents.toString());
+        if (destination) {
+          return destination;
+        }
+        throw notaShim(path, er);
+      }, (readFileEr) => {
+        throw wrapError(readFileEr, er);
+      });
+    }, "readCmdShim");
+    var readCmdShimSync = /* @__PURE__ */ __name((path) => {
+      const contents = readFileSync(path);
+      const destination = extractPath(path, contents.toString());
+      if (!destination) {
+        throw notaShim(path);
+      }
+      return destination;
+    }, "readCmdShimSync");
+    readCmdShim.sync = readCmdShimSync;
+    module2.exports = readCmdShim;
+  }
+});
+
+// node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/cjs/signals.js
+var require_signals = __commonJS({
+  "node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/cjs/signals.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.signals = void 0;
+    exports2.signals = [];
+    exports2.signals.push("SIGHUP", "SIGINT", "SIGTERM");
+    if (process.platform !== "win32") {
+      exports2.signals.push(
+        "SIGALRM",
+        "SIGABRT",
+        "SIGVTALRM",
+        "SIGXCPU",
+        "SIGXFSZ",
+        "SIGUSR2",
+        "SIGTRAP",
+        "SIGSYS",
+        "SIGQUIT",
+        "SIGIOT"
+        // should detect profiler and enable/disable accordingly.
+        // see #21
+        // 'SIGPROF'
+      );
+    }
+    if (process.platform === "linux") {
+      exports2.signals.push("SIGIO", "SIGPOLL", "SIGPWR", "SIGSTKFLT");
+    }
+  }
+});
+
+// node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/cjs/index.js
+var require_cjs2 = __commonJS({
+  "node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/cjs/index.js"(exports2) {
+    "use strict";
+    var _a;
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.unload = exports2.load = exports2.onExit = exports2.signals = void 0;
+    var signals_js_1 = require_signals();
+    Object.defineProperty(exports2, "signals", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return signals_js_1.signals;
+    }, "get") });
+    var processOk = /* @__PURE__ */ __name((process4) => !!process4 && typeof process4 === "object" && typeof process4.removeListener === "function" && typeof process4.emit === "function" && typeof process4.reallyExit === "function" && typeof process4.listeners === "function" && typeof process4.kill === "function" && typeof process4.pid === "number" && typeof process4.on === "function", "processOk");
+    var kExitEmitter = Symbol.for("signal-exit emitter");
+    var global2 = globalThis;
+    var ObjectDefineProperty = Object.defineProperty.bind(Object);
+    var Emitter = class {
+      static {
+        __name(this, "Emitter");
+      }
+      emitted = {
+        afterExit: false,
+        exit: false
+      };
+      listeners = {
+        afterExit: [],
+        exit: []
+      };
+      count = 0;
+      id = Math.random();
+      constructor() {
+        if (global2[kExitEmitter]) {
+          return global2[kExitEmitter];
+        }
+        ObjectDefineProperty(global2, kExitEmitter, {
+          value: this,
+          writable: false,
+          enumerable: false,
+          configurable: false
+        });
+      }
+      on(ev, fn) {
+        this.listeners[ev].push(fn);
+      }
+      removeListener(ev, fn) {
+        const list = this.listeners[ev];
+        const i = list.indexOf(fn);
+        if (i === -1) {
+          return;
+        }
+        if (i === 0 && list.length === 1) {
+          list.length = 0;
+        } else {
+          list.splice(i, 1);
+        }
+      }
+      emit(ev, code, signal) {
+        if (this.emitted[ev]) {
+          return false;
+        }
+        this.emitted[ev] = true;
+        let ret = false;
+        for (const fn of this.listeners[ev]) {
+          ret = fn(code, signal) === true || ret;
+        }
+        if (ev === "exit") {
+          ret = this.emit("afterExit", code, signal) || ret;
+        }
+        return ret;
+      }
+    };
+    var SignalExitBase = class {
+      static {
+        __name(this, "SignalExitBase");
+      }
+    };
+    var signalExitWrap = /* @__PURE__ */ __name((handler) => {
+      return {
+        onExit(cb, opts) {
+          return handler.onExit(cb, opts);
+        },
+        load() {
+          return handler.load();
+        },
+        unload() {
+          return handler.unload();
+        }
+      };
+    }, "signalExitWrap");
+    var SignalExitFallback = class extends SignalExitBase {
+      static {
+        __name(this, "SignalExitFallback");
+      }
+      onExit() {
+        return () => {
+        };
+      }
+      load() {
+      }
+      unload() {
+      }
+    };
+    var SignalExit = class extends SignalExitBase {
+      static {
+        __name(this, "SignalExit");
+      }
+      // "SIGHUP" throws an `ENOSYS` error on Windows,
+      // so use a supported signal instead
+      /* c8 ignore start */
+      #hupSig = process3.platform === "win32" ? "SIGINT" : "SIGHUP";
+      /* c8 ignore stop */
+      #emitter = new Emitter();
+      #process;
+      #originalProcessEmit;
+      #originalProcessReallyExit;
+      #sigListeners = {};
+      #loaded = false;
+      constructor(process4) {
+        super();
+        this.#process = process4;
+        this.#sigListeners = {};
+        for (const sig of signals_js_1.signals) {
+          this.#sigListeners[sig] = () => {
+            const listeners = this.#process.listeners(sig);
+            let { count } = this.#emitter;
+            const p = process4;
+            if (typeof p.__signal_exit_emitter__ === "object" && typeof p.__signal_exit_emitter__.count === "number") {
+              count += p.__signal_exit_emitter__.count;
+            }
+            if (listeners.length === count) {
+              this.unload();
+              const ret = this.#emitter.emit("exit", null, sig);
+              const s = sig === "SIGHUP" ? this.#hupSig : sig;
+              if (!ret)
+                process4.kill(process4.pid, s);
+            }
+          };
+        }
+        this.#originalProcessReallyExit = process4.reallyExit;
+        this.#originalProcessEmit = process4.emit;
+      }
+      onExit(cb, opts) {
+        if (!processOk(this.#process)) {
+          return () => {
+          };
+        }
+        if (this.#loaded === false) {
+          this.load();
+        }
+        const ev = opts?.alwaysLast ? "afterExit" : "exit";
+        this.#emitter.on(ev, cb);
+        return () => {
+          this.#emitter.removeListener(ev, cb);
+          if (this.#emitter.listeners["exit"].length === 0 && this.#emitter.listeners["afterExit"].length === 0) {
+            this.unload();
+          }
+        };
+      }
+      load() {
+        if (this.#loaded) {
+          return;
+        }
+        this.#loaded = true;
+        this.#emitter.count += 1;
+        for (const sig of signals_js_1.signals) {
+          try {
+            const fn = this.#sigListeners[sig];
+            if (fn)
+              this.#process.on(sig, fn);
+          } catch (_) {
+          }
+        }
+        this.#process.emit = (ev, ...a) => {
+          return this.#processEmit(ev, ...a);
+        };
+        this.#process.reallyExit = (code) => {
+          return this.#processReallyExit(code);
+        };
+      }
+      unload() {
+        if (!this.#loaded) {
+          return;
+        }
+        this.#loaded = false;
+        signals_js_1.signals.forEach((sig) => {
+          const listener = this.#sigListeners[sig];
+          if (!listener) {
+            throw new Error("Listener not defined for signal: " + sig);
+          }
+          try {
+            this.#process.removeListener(sig, listener);
+          } catch (_) {
+          }
+        });
+        this.#process.emit = this.#originalProcessEmit;
+        this.#process.reallyExit = this.#originalProcessReallyExit;
+        this.#emitter.count -= 1;
+      }
+      #processReallyExit(code) {
+        if (!processOk(this.#process)) {
+          return 0;
+        }
+        this.#process.exitCode = code || 0;
+        this.#emitter.emit("exit", this.#process.exitCode, null);
+        return this.#originalProcessReallyExit.call(this.#process, this.#process.exitCode);
+      }
+      #processEmit(ev, ...args) {
+        const og = this.#originalProcessEmit;
+        if (ev === "exit" && processOk(this.#process)) {
+          if (typeof args[0] === "number") {
+            this.#process.exitCode = args[0];
+          }
+          const ret = og.call(this.#process, ev, ...args);
+          this.#emitter.emit("exit", this.#process.exitCode, null);
+          return ret;
+        } else {
+          return og.call(this.#process, ev, ...args);
+        }
+      }
+    };
+    var process3 = globalThis.process;
+    _a = signalExitWrap(processOk(process3) ? new SignalExit(process3) : new SignalExitFallback()), /**
+     * Called when the process is exiting, whether via signal, explicit
+     * exit, or running out of stuff to do.
+     *
+     * If the global process object is not suitable for instrumentation,
+     * then this will be a no-op.
+     *
+     * Returns a function that may be used to unload signal-exit.
+     */
+    exports2.onExit = _a.onExit, /**
+     * Load the listeners.  Likely you never need to call this, unless
+     * doing a rather deep integration with signal-exit functionality.
+     * Mostly exposed for the benefit of testing.
+     *
+     * @internal
+     */
+    exports2.load = _a.load, /**
+     * Unload the listeners.  Likely you never need to call this, unless
+     * doing a rather deep integration with signal-exit functionality.
+     * Mostly exposed for the benefit of testing.
+     *
+     * @internal
+     */
+    exports2.unload = _a.unload;
+  }
+});
+
+// node_modules/.pnpm/write-file-atomic@6.0.0/node_modules/write-file-atomic/lib/index.js
+var require_lib38 = __commonJS({
+  "node_modules/.pnpm/write-file-atomic@6.0.0/node_modules/write-file-atomic/lib/index.js"(exports2, module2) {
+    "use strict";
+    module2.exports = writeFile;
+    module2.exports.sync = writeFileSync;
+    module2.exports._getTmpname = getTmpname;
+    module2.exports._cleanupOnExit = cleanupOnExit;
+    var fs = require("fs");
+    var MurmurHash3 = require_imurmurhash();
+    var { onExit } = require_cjs2();
+    var path = require("path");
+    var { promisify } = require("util");
+    var activeFiles = {};
+    var threadId = (/* @__PURE__ */ __name((function getId() {
+      try {
+        const workerThreads = require("worker_threads");
+        return workerThreads.threadId;
+      } catch (e) {
+        return 0;
+      }
+    }), "getId"))();
+    var invocations = 0;
+    function getTmpname(filename) {
+      return filename + "." + MurmurHash3(__filename).hash(String(process.pid)).hash(String(threadId)).hash(String(++invocations)).result();
+    }
+    __name(getTmpname, "getTmpname");
+    function cleanupOnExit(tmpfile) {
+      return () => {
+        try {
+          fs.unlinkSync(typeof tmpfile === "function" ? tmpfile() : tmpfile);
+        } catch {
+        }
+      };
+    }
+    __name(cleanupOnExit, "cleanupOnExit");
+    function serializeActiveFile(absoluteName) {
+      return new Promise((resolve) => {
+        if (!activeFiles[absoluteName]) {
+          activeFiles[absoluteName] = [];
+        }
+        activeFiles[absoluteName].push(resolve);
+        if (activeFiles[absoluteName].length === 1) {
+          resolve();
+        }
+      });
+    }
+    __name(serializeActiveFile, "serializeActiveFile");
+    function isChownErrOk(err) {
+      if (err.code === "ENOSYS") {
+        return true;
+      }
+      const nonroot = !process.getuid || process.getuid() !== 0;
+      if (nonroot) {
+        if (err.code === "EINVAL" || err.code === "EPERM") {
+          return true;
+        }
+      }
+      return false;
+    }
+    __name(isChownErrOk, "isChownErrOk");
+    async function writeFileAsync(filename, data, options = {}) {
+      if (typeof options === "string") {
+        options = { encoding: options };
+      }
+      let fd;
+      let tmpfile;
+      const removeOnExitHandler = onExit(cleanupOnExit(() => tmpfile));
+      const absoluteName = path.resolve(filename);
+      try {
+        await serializeActiveFile(absoluteName);
+        const truename = await promisify(fs.realpath)(filename).catch(() => filename);
+        tmpfile = getTmpname(truename);
+        if (!options.mode || !options.chown) {
+          const stats = await promisify(fs.stat)(truename).catch(() => {
+          });
+          if (stats) {
+            if (options.mode == null) {
+              options.mode = stats.mode;
+            }
+            if (options.chown == null && process.getuid) {
+              options.chown = { uid: stats.uid, gid: stats.gid };
+            }
+          }
+        }
+        fd = await promisify(fs.open)(tmpfile, "w", options.mode);
+        if (options.tmpfileCreated) {
+          await options.tmpfileCreated(tmpfile);
+        }
+        if (ArrayBuffer.isView(data)) {
+          await promisify(fs.write)(fd, data, 0, data.length, 0);
+        } else if (data != null) {
+          await promisify(fs.write)(fd, String(data), 0, String(options.encoding || "utf8"));
+        }
+        if (options.fsync !== false) {
+          await promisify(fs.fsync)(fd);
+        }
+        await promisify(fs.close)(fd);
+        fd = null;
+        if (options.chown) {
+          await promisify(fs.chown)(tmpfile, options.chown.uid, options.chown.gid).catch((err) => {
+            if (!isChownErrOk(err)) {
+              throw err;
+            }
+          });
+        }
+        if (options.mode) {
+          await promisify(fs.chmod)(tmpfile, options.mode).catch((err) => {
+            if (!isChownErrOk(err)) {
+              throw err;
+            }
+          });
+        }
+        await promisify(fs.rename)(tmpfile, truename);
+      } finally {
+        if (fd) {
+          await promisify(fs.close)(fd).catch(
+            /* istanbul ignore next */
+            () => {
+            }
+          );
+        }
+        removeOnExitHandler();
+        await promisify(fs.unlink)(tmpfile).catch(() => {
+        });
+        activeFiles[absoluteName].shift();
+        if (activeFiles[absoluteName].length > 0) {
+          activeFiles[absoluteName][0]();
+        } else {
+          delete activeFiles[absoluteName];
+        }
+      }
+    }
+    __name(writeFileAsync, "writeFileAsync");
+    async function writeFile(filename, data, options, callback) {
+      if (options instanceof Function) {
+        callback = options;
+        options = {};
+      }
+      const promise = writeFileAsync(filename, data, options);
+      if (callback) {
+        try {
+          const result = await promise;
+          return callback(result);
+        } catch (err) {
+          return callback(err);
+        }
+      }
+      return promise;
+    }
+    __name(writeFile, "writeFile");
+    function writeFileSync(filename, data, options) {
+      if (typeof options === "string") {
+        options = { encoding: options };
+      } else if (!options) {
+        options = {};
+      }
+      try {
+        filename = fs.realpathSync(filename);
+      } catch (ex) {
+      }
+      const tmpfile = getTmpname(filename);
+      if (!options.mode || !options.chown) {
+        try {
+          const stats = fs.statSync(filename);
+          options = Object.assign({}, options);
+          if (!options.mode) {
+            options.mode = stats.mode;
+          }
+          if (!options.chown && process.getuid) {
+            options.chown = { uid: stats.uid, gid: stats.gid };
+          }
+        } catch (ex) {
+        }
+      }
+      let fd;
+      const cleanup = cleanupOnExit(tmpfile);
+      const removeOnExitHandler = onExit(cleanup);
+      let threw = true;
+      try {
+        fd = fs.openSync(tmpfile, "w", options.mode || 438);
+        if (options.tmpfileCreated) {
+          options.tmpfileCreated(tmpfile);
+        }
+        if (ArrayBuffer.isView(data)) {
+          fs.writeSync(fd, data, 0, data.length, 0);
+        } else if (data != null) {
+          fs.writeSync(fd, String(data), 0, String(options.encoding || "utf8"));
+        }
+        if (options.fsync !== false) {
+          fs.fsyncSync(fd);
+        }
+        fs.closeSync(fd);
+        fd = null;
+        if (options.chown) {
+          try {
+            fs.chownSync(tmpfile, options.chown.uid, options.chown.gid);
+          } catch (err) {
+            if (!isChownErrOk(err)) {
+              throw err;
+            }
+          }
+        }
+        if (options.mode) {
+          try {
+            fs.chmodSync(tmpfile, options.mode);
+          } catch (err) {
+            if (!isChownErrOk(err)) {
+              throw err;
+            }
+          }
+        }
+        fs.renameSync(tmpfile, filename);
+        threw = false;
+      } finally {
+        if (fd) {
+          try {
+            fs.closeSync(fd);
+          } catch (ex) {
+          }
+        }
+        removeOnExitHandler();
+        if (threw) {
+          cleanup();
+        }
+      }
+    }
+    __name(writeFileSync, "writeFileSync");
+  }
+});
+
+// node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/fix-bin.js
+var require_fix_bin = __commonJS({
+  "node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/fix-bin.js"(exports2, module2) {
+    var {
+      chmod,
+      open,
+      readFile
+    } = require("fs/promises");
+    var execMode = 511 & ~process.umask();
+    var writeFileAtomic = require_lib38();
+    var isWindowsHashBang = /* @__PURE__ */ __name((buf) => buf[0] === "#".charCodeAt(0) && buf[1] === "!".charCodeAt(0) && /^#![^\n]+\r\n/.test(buf.toString()), "isWindowsHashBang");
+    var isWindowsHashbangFile = /* @__PURE__ */ __name((file) => {
+      const FALSE = /* @__PURE__ */ __name(() => false, "FALSE");
+      return open(file, "r").then((fh) => {
+        const buf = Buffer.alloc(2048);
+        return fh.read(buf, 0, 2048, 0).then(
+          () => {
+            const isWHB = isWindowsHashBang(buf);
+            return fh.close().then(() => isWHB, () => isWHB);
+          },
+          // don't leak FD if read() fails
+          () => fh.close().then(FALSE, FALSE)
+        );
+      }, FALSE);
+    }, "isWindowsHashbangFile");
+    var dos2Unix = /* @__PURE__ */ __name((file) => readFile(file, "utf8").then((content) => writeFileAtomic(file, content.replace(/^(#![^\n]+)\r\n/, "$1\n"))), "dos2Unix");
+    var fixBin = /* @__PURE__ */ __name((file, mode = execMode) => chmod(file, mode).then(() => isWindowsHashbangFile(file)).then((isWHB) => isWHB ? dos2Unix(file) : null), "fixBin");
+    module2.exports = fixBin;
+  }
+});
+
+// node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/shim-bin.js
+var require_shim_bin = __commonJS({
+  "node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/shim-bin.js"(exports2, module2) {
+    var { resolve, dirname } = require("path");
+    var { lstat } = require("fs/promises");
+    var throwNonEnoent = /* @__PURE__ */ __name((er) => {
+      if (er.code !== "ENOENT") {
+        throw er;
+      }
+    }, "throwNonEnoent");
+    var cmdShim = require_lib36();
+    var readCmdShim = require_lib37();
+    var fixBin = require_fix_bin();
+    var seen = /* @__PURE__ */ new Set();
+    var failEEXIST = /* @__PURE__ */ __name(({ to, from }) => Promise.reject(Object.assign(new Error("EEXIST: file already exists"), {
+      path: to,
+      dest: from,
+      code: "EEXIST"
+    })), "failEEXIST");
+    var handleReadCmdShimError = /* @__PURE__ */ __name(({ er, from, to }) => er.code === "ENOENT" ? null : er.code === "ENOTASHIM" ? failEEXIST({ from, to }) : Promise.reject(er), "handleReadCmdShimError");
+    var SKIP = Symbol("skip - missing or already installed");
+    var shimBin = /* @__PURE__ */ __name(({ path, to, from, absFrom, force }) => {
+      const shims = [
+        to,
+        to + ".cmd",
+        to + ".ps1"
+      ];
+      for (const shim of shims) {
+        if (seen.has(shim)) {
+          return true;
+        }
+        seen.add(shim);
+      }
+      return Promise.all([
+        ...shims,
+        absFrom
+      ].map((f) => lstat(f).catch(throwNonEnoent))).then((stats) => {
+        const [, , , stFrom] = stats;
+        if (!stFrom) {
+          return SKIP;
+        }
+        if (force) {
+          return false;
+        }
+        return Promise.all(shims.map((s, i) => [s, stats[i]]).map(([s, st]) => {
+          if (!st) {
+            return false;
+          }
+          return readCmdShim(s).then((target) => {
+            target = resolve(dirname(to), target);
+            if (target.indexOf(resolve(path)) !== 0) {
+              return failEEXIST({ from, to, path });
+            }
+            return false;
+          }, (er) => handleReadCmdShimError({ er, from, to }));
+        }));
+      }).then((skip) => skip !== SKIP && doShim(absFrom, to));
+    }, "shimBin");
+    var doShim = /* @__PURE__ */ __name((absFrom, to) => cmdShim(absFrom, to).then(() => fixBin(absFrom)), "doShim");
+    var resetSeen = /* @__PURE__ */ __name(() => {
+      for (const p of seen) {
+        seen.delete(p);
+      }
+    }, "resetSeen");
+    module2.exports = Object.assign(shimBin, { resetSeen });
+  }
+});
+
+// node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/link-gently.js
+var require_link_gently = __commonJS({
+  "node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/link-gently.js"(exports2, module2) {
+    var { resolve, dirname } = require("path");
+    var { lstat, mkdir, readlink, rm, symlink } = require("fs/promises");
+    var { log } = require_lib2();
+    var throwSignificant = /* @__PURE__ */ __name((er) => {
+      if (er.code === "ENOENT") {
+        return;
+      }
+      if (er.code === "EACCES") {
+        log.warn("error adding file", er.message);
+        return;
+      }
+      throw er;
+    }, "throwSignificant");
+    var rmOpts = {
+      recursive: true,
+      force: true
+    };
+    var seen = /* @__PURE__ */ new Set();
+    var SKIP = Symbol("skip - missing or already installed");
+    var CLOBBER = Symbol("clobber - ours or in forceful mode");
+    var linkGently = /* @__PURE__ */ __name(async ({ path, to, from, absFrom, force }) => {
+      if (seen.has(to)) {
+        return false;
+      }
+      seen.add(to);
+      return Promise.all([
+        lstat(absFrom).catch(throwSignificant),
+        lstat(to).catch(throwSignificant)
+      ]).then(([stFrom, stTo]) => {
+        if (!stFrom) {
+          return SKIP;
+        }
+        if (stTo) {
+          if (!stTo.isSymbolicLink()) {
+            return force && rm(to, rmOpts).then(() => CLOBBER);
+          }
+          return readlink(to).then((target) => {
+            if (target === from) {
+              return SKIP;
+            }
+            target = resolve(dirname(to), target);
+            if (target.indexOf(path) === 0 || force) {
+              return rm(to, rmOpts).then(() => CLOBBER);
+            }
+            return false;
+          });
+        } else {
+          return mkdir(dirname(to), { recursive: true });
+        }
+      }).then((skipOrClobber) => {
+        if (skipOrClobber === SKIP) {
+          return false;
+        }
+        return symlink(from, to, "file").catch((er) => {
+          if (skipOrClobber === CLOBBER || force) {
+            return rm(to, rmOpts).then(() => symlink(from, to, "file"));
+          }
+          throw er;
+        }).then(() => true);
+      });
+    }, "linkGently");
+    var resetSeen = /* @__PURE__ */ __name(() => {
+      for (const p of seen) {
+        seen.delete(p);
+      }
+    }, "resetSeen");
+    module2.exports = Object.assign(linkGently, { resetSeen });
+  }
+});
+
+// node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/link-bin.js
+var require_link_bin = __commonJS({
+  "node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/link-bin.js"(exports2, module2) {
+    var linkGently = require_link_gently();
+    var fixBin = require_fix_bin();
+    var linkBin = /* @__PURE__ */ __name(({ path, to, from, absFrom, force }) => linkGently({ path, to, from, absFrom, force }).then((linked) => linked && fixBin(absFrom)), "linkBin");
+    module2.exports = linkBin;
+  }
+});
+
+// node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/link-bins.js
+var require_link_bins = __commonJS({
+  "node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/link-bins.js"(exports2, module2) {
+    var isWindows = require_is_windows();
+    var binTarget = require_bin_target();
+    var { dirname, resolve, relative } = require("path");
+    var linkBin = isWindows ? require_shim_bin() : require_link_bin();
+    var normalize = require_lib8();
+    var linkBins = /* @__PURE__ */ __name(({ path, pkg, top, force }) => {
+      pkg = normalize(pkg);
+      if (!pkg.bin) {
+        return Promise.resolve([]);
+      }
+      const promises = [];
+      const target = binTarget({ path, top });
+      for (const [key, val] of Object.entries(pkg.bin)) {
+        const to = resolve(target, key);
+        const absFrom = resolve(path, val);
+        const from = relative(dirname(to), absFrom);
+        promises.push(linkBin({ path, from, to, absFrom, force }));
+      }
+      return Promise.all(promises);
+    }, "linkBins");
+    module2.exports = linkBins;
+  }
+});
+
+// node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/man-target.js
+var require_man_target = __commonJS({
+  "node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/man-target.js"(exports2, module2) {
+    var isWindows = require_is_windows();
+    var getPrefix = require_get_prefix();
+    var { dirname } = require("path");
+    module2.exports = ({ top, path }) => !top || isWindows ? null : dirname(getPrefix(path)) + "/share/man";
+  }
+});
+
+// node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/link-mans.js
+var require_link_mans = __commonJS({
+  "node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/link-mans.js"(exports2, module2) {
+    var { dirname, relative, join, resolve, basename } = require("path");
+    var linkGently = require_link_gently();
+    var manTarget = require_man_target();
+    var linkMans = /* @__PURE__ */ __name(async ({ path, pkg, top, force }) => {
+      const target = manTarget({ path, top });
+      if (!target || !Array.isArray(pkg?.man) || !pkg.man.length) {
+        return [];
+      }
+      const links = [];
+      for (let man of new Set(pkg.man)) {
+        if (!man || typeof man !== "string") {
+          continue;
+        }
+        man = join("/", man).replace(/\\|:/g, "/").slice(1);
+        const parseMan = man.match(/\.([0-9]+)(\.gz)?$/);
+        if (!parseMan) {
+          throw Object.assign(new Error(
+            "invalid man entry name\nMan files must end with a number, and optionally a .gz suffix if they are compressed."
+          ), {
+            code: "EBADMAN",
+            path,
+            pkgid: pkg._id,
+            man
+          });
+        }
+        const section = parseMan[1];
+        const base = basename(man);
+        const absFrom = resolve(path, man);
+        if (absFrom.indexOf(path) !== 0) {
+          throw Object.assign(new Error("invalid man entry"), {
+            code: "EBADMAN",
+            path,
+            pkgid: pkg._id,
+            man
+          });
+        }
+        const to = resolve(target, "man" + section, base);
+        const from = relative(dirname(to), absFrom);
+        links.push(linkGently({ from, to, path, absFrom, force }));
+      }
+      return Promise.all(links);
+    }, "linkMans");
+    module2.exports = linkMans;
+  }
+});
+
+// node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/check-bin.js
+var require_check_bin = __commonJS({
+  "node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/check-bin.js"(exports2, module2) {
+    var isWindows = require_is_windows();
+    var binTarget = require_bin_target();
+    var { resolve, dirname } = require("path");
+    var readCmdShim = require_lib37();
+    var { readlink } = require("fs/promises");
+    var checkBin = /* @__PURE__ */ __name(async ({ bin, path, top, global: global2, force }) => {
+      if (force || !global2 || !top) {
+        return;
+      }
+      const target = resolve(binTarget({ path, top }), bin);
+      path = resolve(path);
+      return isWindows ? checkShim({ target, path }) : checkLink({ target, path });
+    }, "checkBin");
+    var handleReadLinkError = /* @__PURE__ */ __name(async ({ er, target }) => er.code === "ENOENT" ? null : failEEXIST({ target }), "handleReadLinkError");
+    var checkLink = /* @__PURE__ */ __name(async ({ target, path }) => {
+      const current = await readlink(target).catch((er) => handleReadLinkError({ er, target }));
+      if (!current) {
+        return;
+      }
+      const resolved = resolve(dirname(target), current);
+      if (resolved.toLowerCase().indexOf(path.toLowerCase()) !== 0) {
+        return failEEXIST({ target });
+      }
+    }, "checkLink");
+    var handleReadCmdShimError = /* @__PURE__ */ __name(({ er, target }) => er.code === "ENOENT" ? null : failEEXIST({ target }), "handleReadCmdShimError");
+    var failEEXIST = /* @__PURE__ */ __name(({ target }) => Promise.reject(Object.assign(new Error("EEXIST: file already exists"), {
+      path: target,
+      code: "EEXIST"
+    })), "failEEXIST");
+    var checkShim = /* @__PURE__ */ __name(async ({ target, path }) => {
+      const shims = [
+        target,
+        target + ".cmd",
+        target + ".ps1"
+      ];
+      await Promise.all(shims.map(async (shim) => {
+        const current = await readCmdShim(shim).catch((er) => handleReadCmdShimError({ er, target: shim }));
+        if (!current) {
+          return;
+        }
+        const resolved = resolve(dirname(shim), current.replace(/\\/g, "/"));
+        if (resolved.toLowerCase().indexOf(path.toLowerCase()) !== 0) {
+          return failEEXIST({ target: shim });
+        }
+      }));
+    }, "checkShim");
+    module2.exports = checkBin;
+  }
+});
+
+// node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/check-bins.js
+var require_check_bins = __commonJS({
+  "node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/check-bins.js"(exports2, module2) {
+    var checkBin = require_check_bin();
+    var normalize = require_lib8();
+    var checkBins = /* @__PURE__ */ __name(async ({ pkg, path, top, global: global2, force }) => {
+      if (force || !global2 || !top) {
+        return;
+      }
+      pkg = normalize(pkg);
+      if (!pkg.bin) {
+        return;
+      }
+      await Promise.all(Object.keys(pkg.bin).map((bin) => checkBin({ bin, path, top, global: global2, force })));
+    }, "checkBins");
+    module2.exports = checkBins;
+  }
+});
+
+// node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/get-paths.js
+var require_get_paths = __commonJS({
+  "node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/get-paths.js"(exports2, module2) {
+    var binTarget = require_bin_target();
+    var manTarget = require_man_target();
+    var { resolve, basename, extname } = require("path");
+    var isWindows = require_is_windows();
+    module2.exports = ({ path, pkg, global: global2, top }) => {
+      if (top && !global2) {
+        return [];
+      }
+      const binSet = [];
+      const binTarg = binTarget({ path, top });
+      if (pkg.bin) {
+        for (const bin of Object.keys(pkg.bin)) {
+          const b = resolve(binTarg, bin);
+          binSet.push(b);
+          if (isWindows) {
+            binSet.push(b + ".cmd");
+            binSet.push(b + ".ps1");
+          }
+        }
+      }
+      const manTarg = manTarget({ path, top });
+      const manSet = [];
+      if (manTarg && pkg.man && Array.isArray(pkg.man) && pkg.man.length) {
+        for (const man of pkg.man) {
+          if (!/.\.[0-9]+(\.gz)?$/.test(man)) {
+            return binSet;
+          }
+          const section = extname(basename(man, ".gz")).slice(1);
+          const base = basename(man);
+          manSet.push(resolve(manTarg, "man" + section, base));
+        }
+      }
+      return manSet.length ? [...binSet, ...manSet] : binSet;
+    };
+  }
+});
+
+// node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/index.js
+var require_lib39 = __commonJS({
+  "node_modules/.pnpm/bin-links@5.0.0/node_modules/bin-links/lib/index.js"(exports2, module2) {
+    var linkBins = require_link_bins();
+    var linkMans = require_link_mans();
+    var binLinks = /* @__PURE__ */ __name((opts) => {
+      const { path, pkg, force, global: global2, top } = opts;
+      if (top && !global2) {
+        return Promise.resolve();
+      }
+      return Promise.all([
+        // allow clobbering within the local node_modules/.bin folder.
+        // only global bins are protected in this way, or else it is
+        // yet another vector for excessive dependency conflicts.
+        linkBins({ path, pkg, top, force: force || !top }),
+        linkMans({ path, pkg, top, force })
+      ]);
+    }, "binLinks");
+    var shimBin = require_shim_bin();
+    var linkGently = require_link_gently();
+    var resetSeen = /* @__PURE__ */ __name(() => {
+      shimBin.resetSeen();
+      linkGently.resetSeen();
+    }, "resetSeen");
+    var checkBins = require_check_bins();
+    var getPaths = require_get_paths();
+    module2.exports = Object.assign(binLinks, {
+      checkBins,
+      resetSeen,
+      getPaths
+    });
+  }
+});
+
+// node_modules/.pnpm/walk-up-path@4.0.0/node_modules/walk-up-path/dist/commonjs/index.js
+var require_commonjs10 = __commonJS({
+  "node_modules/.pnpm/walk-up-path@4.0.0/node_modules/walk-up-path/dist/commonjs/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.walkUp = void 0;
+    var path_1 = require("path");
+    var walkUp = /* @__PURE__ */ __name(function* (path) {
+      for (path = (0, path_1.resolve)(path); path; ) {
+        yield path;
+        const pp = (0, path_1.dirname)(path);
+        if (pp === path) {
+          break;
+        } else {
+          path = pp;
+        }
+      }
+    }, "walkUp");
+    exports2.walkUp = walkUp;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/case-insensitive-map.js
+var require_case_insensitive_map = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/case-insensitive-map.js"(exports2, module2) {
+    module2.exports = class CIMap extends Map {
+      static {
+        __name(this, "CIMap");
+      }
+      #keys = /* @__PURE__ */ new Map();
+      constructor(items = []) {
+        super();
+        for (const [key, val] of items) {
+          this.set(key, val);
+        }
+      }
+      #normKey(key) {
+        if (typeof key !== "string") {
+          return key;
+        }
+        return key.normalize("NFKD").toLowerCase();
+      }
+      get(key) {
+        const normKey = this.#normKey(key);
+        return this.#keys.has(normKey) ? super.get(this.#keys.get(normKey)) : void 0;
+      }
+      set(key, val) {
+        const normKey = this.#normKey(key);
+        if (this.#keys.has(normKey)) {
+          super.delete(this.#keys.get(normKey));
+        }
+        this.#keys.set(normKey, key);
+        return super.set(key, val);
+      }
+      delete(key) {
+        const normKey = this.#normKey(key);
+        if (this.#keys.has(normKey)) {
+          const prevKey = this.#keys.get(normKey);
+          this.#keys.delete(normKey);
+          return super.delete(prevKey);
+        }
+      }
+      has(key) {
+        const normKey = this.#normKey(key);
+        return this.#keys.has(normKey) && super.has(this.#keys.get(normKey));
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/from-path.js
+var require_from_path = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/from-path.js"(exports2, module2) {
+    var { dirname } = require("node:path");
+    var npa = require_npa();
+    var fromPath = /* @__PURE__ */ __name((node, edge) => {
+      if (edge && edge.overrides && edge.overrides.name === edge.name && edge.overrides.value) {
+        if (node.sourceReference) {
+          return node.sourceReference.root.realpath;
+        }
+        return node.root.realpath;
+      }
+      if (node.resolved) {
+        const spec = npa(node.resolved);
+        if (spec?.type === "file") {
+          return dirname(spec.fetchSpec);
+        }
+      }
+      return node.realpath;
+    }, "fromPath");
+    module2.exports = fromPath;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/dep-valid.js
+var require_dep_valid = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/dep-valid.js"(exports2, module2) {
+    var semver2 = require_semver2();
+    var npa = require_npa();
+    var { relative } = require("node:path");
+    var fromPath = require_from_path();
+    var depValid = /* @__PURE__ */ __name((child, requested, requestor) => {
+      if (typeof requested === "string") {
+        try {
+          requested = npa.resolve(child.name, requested || "*", fromPath(requestor, requestor.edgesOut.get(child.name)));
+        } catch (er2) {
+          er2.dependency = child.name;
+          er2.requested = requested;
+          requestor.errors.push(er2);
+          return false;
+        }
+      }
+      if (!requested) {
+        const er2 = new Error("Invalid dependency specifier");
+        er2.dependency = child.name;
+        er2.requested = requested;
+        requestor.errors.push(er2);
+        return false;
+      }
+      switch (requested.type) {
+        case "range":
+          if (requested.fetchSpec === "*") {
+            return true;
+          }
+        // fallthrough
+        case "version":
+          return semver2.satisfies(child.version, requested.fetchSpec, true);
+        case "directory":
+          return linkValid(child, requested, requestor);
+        case "file":
+          return tarballValid(child, requested, requestor);
+        case "alias":
+          return depValid(child, requested.subSpec, requestor);
+        case "tag":
+          return child.resolved && npa(child.resolved).type === "remote";
+        case "remote":
+          return child.resolved === requested.fetchSpec;
+        case "git": {
+          const resRepo = npa(child.resolved || "");
+          const resHost = resRepo.hosted;
+          const reqHost = requested.hosted;
+          const reqCommit = /^[a-fA-F0-9]{40}$/.test(requested.gitCommittish || "");
+          const nc = { noCommittish: !reqCommit };
+          if (!resHost) {
+            if (resRepo.fetchSpec !== requested.fetchSpec) {
+              return false;
+            }
+          } else {
+            if (reqHost?.ssh(nc) !== resHost.ssh(nc)) {
+              return false;
+            }
+          }
+          if (!requested.gitRange) {
+            return true;
+          }
+          return semver2.satisfies(child.package.version, requested.gitRange, {
+            loose: true
+          });
+        }
+        default:
+          break;
+      }
+      const er = new Error("Unsupported dependency type");
+      er.dependency = child.name;
+      er.requested = requested;
+      requestor.errors.push(er);
+      return false;
+    }, "depValid");
+    var linkValid = /* @__PURE__ */ __name((child, requested, requestor) => {
+      const isLink = !!child.isLink;
+      if (requestor.installLinks && !child.isWorkspace) {
+        return !isLink;
+      }
+      return isLink && relative(child.realpath, requested.fetchSpec) === "";
+    }, "linkValid");
+    var tarballValid = /* @__PURE__ */ __name((child, requested) => {
+      if (child.isLink) {
+        return false;
+      }
+      if (child.resolved) {
+        return child.resolved.replace(/\\/g, "/") === `file:${requested.fetchSpec.replace(/\\/g, "/")}`;
+      }
+      if (child.package._requested) {
+        return child.package._requested.saveSpec === requested.saveSpec;
+      }
+      return false;
+    }, "tarballValid");
+    module2.exports = (child, requested, accept, requestor) => depValid(child, requested, requestor) || (typeof accept === "string" ? depValid(child, accept, requestor) : false);
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/override-set.js
+var require_override_set = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/override-set.js"(exports2, module2) {
+    var npa = require_npa();
+    var semver2 = require_semver2();
+    var { log } = require_lib2();
+    var OverrideSet = class _OverrideSet {
+      static {
+        __name(this, "OverrideSet");
+      }
+      constructor({ overrides, key, parent }) {
+        this.parent = parent;
+        this.children = /* @__PURE__ */ new Map();
+        if (typeof overrides === "string") {
+          overrides = { ".": overrides };
+        }
+        if (overrides["."] === "") {
+          overrides["."] = "*";
+        }
+        if (parent) {
+          const spec = npa(key);
+          if (!spec.name) {
+            throw new Error(`Override without name: ${key}`);
+          }
+          this.name = spec.name;
+          spec.name = "";
+          this.key = key;
+          this.keySpec = spec.toString();
+          this.value = overrides["."] || this.keySpec;
+        }
+        for (const [key2, childOverrides] of Object.entries(overrides)) {
+          if (key2 === ".") {
+            continue;
+          }
+          const child = new _OverrideSet({
+            parent: this,
+            key: key2,
+            overrides: childOverrides
+          });
+          this.children.set(child.key, child);
+        }
+      }
+      childrenAreEqual(other) {
+        if (this.children.size !== other.children.size) {
+          return false;
+        }
+        for (const [key] of this.children) {
+          if (!other.children.has(key)) {
+            return false;
+          }
+          if (this.children.get(key).value !== other.children.get(key).value) {
+            return false;
+          }
+          if (!this.children.get(key).childrenAreEqual(other.children.get(key))) {
+            return false;
+          }
+        }
+        return true;
+      }
+      isEqual(other) {
+        if (this === other) {
+          return true;
+        }
+        if (!other) {
+          return false;
+        }
+        if (this.key !== other.key || this.value !== other.value) {
+          return false;
+        }
+        if (!this.childrenAreEqual(other)) {
+          return false;
+        }
+        if (!this.parent) {
+          return !other.parent;
+        }
+        return this.parent.isEqual(other.parent);
+      }
+      getEdgeRule(edge) {
+        for (const rule of this.ruleset.values()) {
+          if (rule.name !== edge.name) {
+            continue;
+          }
+          if (rule.keySpec === "*") {
+            return rule;
+          }
+          let spec = npa(`${edge.name}@${edge.rawSpec || edge.spec}`);
+          if (spec.type === "alias") {
+            spec = spec.subSpec;
+          }
+          if (spec.type === "git") {
+            if (spec.gitRange && semver2.intersects(spec.gitRange, rule.keySpec)) {
+              return rule;
+            }
+            continue;
+          }
+          if (spec.type === "range" || spec.type === "version") {
+            if (semver2.intersects(spec.fetchSpec, rule.keySpec)) {
+              return rule;
+            }
+            continue;
+          }
+          return rule;
+        }
+        return this;
+      }
+      getNodeRule(node) {
+        for (const rule of this.ruleset.values()) {
+          if (rule.name !== node.name) {
+            continue;
+          }
+          if (semver2.satisfies(node.version, rule.keySpec) || semver2.satisfies(node.version, rule.value)) {
+            return rule;
+          }
+        }
+        return this;
+      }
+      getMatchingRule(node) {
+        for (const rule of this.ruleset.values()) {
+          if (rule.name !== node.name) {
+            continue;
+          }
+          if (semver2.satisfies(node.version, rule.keySpec) || semver2.satisfies(node.version, rule.value)) {
+            return rule;
+          }
+        }
+        return null;
+      }
+      *ancestry() {
+        for (let ancestor = this; ancestor; ancestor = ancestor.parent) {
+          yield ancestor;
+        }
+      }
+      get isRoot() {
+        return !this.parent;
+      }
+      get ruleset() {
+        const ruleset = /* @__PURE__ */ new Map();
+        for (const override of this.ancestry()) {
+          for (const kid of override.children.values()) {
+            if (!ruleset.has(kid.key)) {
+              ruleset.set(kid.key, kid);
+            }
+          }
+          if (!override.isRoot && !ruleset.has(override.key)) {
+            ruleset.set(override.key, override);
+          }
+        }
+        return ruleset;
+      }
+      static findSpecificOverrideSet(first, second) {
+        for (let overrideSet = second; overrideSet; overrideSet = overrideSet.parent) {
+          if (overrideSet.isEqual(first)) {
+            return second;
+          }
+        }
+        for (let overrideSet = first; overrideSet; overrideSet = overrideSet.parent) {
+          if (overrideSet.isEqual(second)) {
+            return first;
+          }
+        }
+        log.silly("Conflicting override sets", first, second);
+      }
+      static doOverrideSetsConflict(first, second) {
+        return this.findSpecificOverrideSet(first, second) === void 0;
+      }
+    };
+    module2.exports = OverrideSet;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/edge.js
+var require_edge = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/edge.js"(exports2, module2) {
+    var util = require("node:util");
+    var npa = require_npa();
+    var depValid = require_dep_valid();
+    var OverrideSet = require_override_set();
+    var ArboristEdge = class {
+      static {
+        __name(this, "ArboristEdge");
+      }
+      constructor(edge) {
+        this.name = edge.name;
+        this.spec = edge.spec;
+        this.type = edge.type;
+        const edgeFrom = edge.from?.location;
+        const edgeTo = edge.to?.location;
+        const override = edge.overrides?.value;
+        if (edgeFrom != null) {
+          this.from = edgeFrom;
+        }
+        if (edgeTo) {
+          this.to = edgeTo;
+        }
+        if (edge.error) {
+          this.error = edge.error;
+        }
+        if (edge.peerConflicted) {
+          this.peerConflicted = true;
+        }
+        if (override) {
+          this.overridden = override;
+        }
+      }
+    };
+    var Edge = class _Edge {
+      static {
+        __name(this, "Edge");
+      }
+      #accept;
+      #error;
+      #explanation;
+      #from;
+      #name;
+      #spec;
+      #to;
+      #type;
+      static types = Object.freeze([
+        "prod",
+        "dev",
+        "optional",
+        "peer",
+        "peerOptional",
+        "workspace"
+      ]);
+      // XXX where is this used?
+      static errors = Object.freeze([
+        "DETACHED",
+        "MISSING",
+        "PEER LOCAL",
+        "INVALID"
+      ]);
+      constructor(options) {
+        const { type, name, spec, accept, from, overrides } = options;
+        if (typeof spec !== "string") {
+          throw new TypeError("must provide string spec");
+        }
+        if (!_Edge.types.includes(type)) {
+          throw new TypeError(`invalid type: ${type}
+(valid types are: ${_Edge.types.join(", ")})`);
+        }
+        if (type === "workspace" && npa(spec).type !== "directory") {
+          throw new TypeError("workspace edges must be a symlink");
+        }
+        if (typeof name !== "string") {
+          throw new TypeError("must provide dependency name");
+        }
+        if (!from) {
+          throw new TypeError('must provide "from" node');
+        }
+        if (accept !== void 0) {
+          if (typeof accept !== "string") {
+            throw new TypeError("accept field must be a string if provided");
+          }
+          this.#accept = accept || "*";
+        }
+        if (overrides !== void 0) {
+          this.overrides = overrides;
+        }
+        this.#name = name;
+        this.#type = type;
+        this.#spec = spec;
+        this.#explanation = null;
+        this.#from = from;
+        from.edgesOut.get(this.#name)?.detach();
+        from.addEdgeOut(this);
+        this.reload(true);
+        this.peerConflicted = false;
+      }
+      satisfiedBy(node) {
+        if (node.name !== this.#name || !this.#from) {
+          return false;
+        }
+        if (node.hasShrinkwrap || node.inShrinkwrap || node.inBundle) {
+          return depValid(node, this.rawSpec, this.#accept, this.#from);
+        }
+        if (!this.overrides?.keySpec) {
+          return depValid(node, this.spec, this.#accept, this.#from);
+        }
+        if (depValid(node, this.spec, this.#accept, this.#from)) {
+          return true;
+        }
+        if (!depValid(node, this.rawSpec, this.#accept, this.#from)) {
+          return false;
+        }
+        return !depValid(node, this.overrides.keySpec, this.#accept, this.#from);
+      }
+      // return the edge data, and an explanation of how that edge came to be here
+      explain(seen = []) {
+        if (!this.#explanation) {
+          const explanation = {
+            type: this.#type,
+            name: this.#name,
+            spec: this.spec
+          };
+          if (this.rawSpec !== this.spec) {
+            explanation.rawSpec = this.rawSpec;
+            explanation.overridden = true;
+          }
+          if (this.bundled) {
+            explanation.bundled = this.bundled;
+          }
+          if (this.error) {
+            explanation.error = this.error;
+          }
+          if (this.#from) {
+            explanation.from = this.#from.explain(null, seen);
+          }
+          this.#explanation = explanation;
+        }
+        return this.#explanation;
+      }
+      get bundled() {
+        return !!this.#from?.package?.bundleDependencies?.includes(this.#name);
+      }
+      get workspace() {
+        return this.#type === "workspace";
+      }
+      get prod() {
+        return this.#type === "prod";
+      }
+      get dev() {
+        return this.#type === "dev";
+      }
+      get optional() {
+        return this.#type === "optional" || this.#type === "peerOptional";
+      }
+      get peer() {
+        return this.#type === "peer" || this.#type === "peerOptional";
+      }
+      get type() {
+        return this.#type;
+      }
+      get name() {
+        return this.#name;
+      }
+      get rawSpec() {
+        return this.#spec;
+      }
+      get spec() {
+        if (this.overrides?.value && this.overrides.value !== "*" && this.overrides.name === this.#name) {
+          if (this.overrides.value.startsWith("$")) {
+            const ref = this.overrides.value.slice(1);
+            let pkg = this.#from?.sourceReference ? this.#from?.sourceReference.root.package : this.#from?.root?.package;
+            let specValue = this.#calculateReferentialOverrideSpec(ref, pkg);
+            if (!specValue) {
+              pkg = this.#from?.package;
+              specValue = this.#calculateReferentialOverrideSpec(ref, pkg);
+            }
+            if (specValue) {
+              return specValue;
+            }
+            throw new Error(`Unable to resolve reference ${this.overrides.value}`);
+          }
+          return this.overrides.value;
+        }
+        return this.#spec;
+      }
+      #calculateReferentialOverrideSpec(ref, pkg) {
+        if (pkg.devDependencies?.[ref]) {
+          return pkg.devDependencies[ref];
+        }
+        if (pkg.optionalDependencies?.[ref]) {
+          return pkg.optionalDependencies[ref];
+        }
+        if (pkg.dependencies?.[ref]) {
+          return pkg.dependencies[ref];
+        }
+        if (pkg.peerDependencies?.[ref]) {
+          return pkg.peerDependencies[ref];
+        }
+      }
+      get accept() {
+        return this.#accept;
+      }
+      get valid() {
+        return !this.error;
+      }
+      get missing() {
+        return this.error === "MISSING";
+      }
+      get invalid() {
+        return this.error === "INVALID";
+      }
+      get peerLocal() {
+        return this.error === "PEER LOCAL";
+      }
+      get error() {
+        if (!this.#error) {
+          if (!this.#to) {
+            if (this.optional) {
+              this.#error = null;
+            } else {
+              this.#error = "MISSING";
+            }
+          } else if (this.peer && this.#from === this.#to.parent && !this.#from?.isTop) {
+            this.#error = "PEER LOCAL";
+          } else if (!this.satisfiedBy(this.#to)) {
+            this.#error = "INVALID";
+          } else if (this.overrides && this.#to.edgesOut.size && OverrideSet.doOverrideSetsConflict(this.overrides, this.#to.overrides)) {
+            this.#error = "INVALID";
+          } else {
+            this.#error = "OK";
+          }
+        }
+        if (this.#error === "OK") {
+          return null;
+        }
+        return this.#error;
+      }
+      reload(hard = false) {
+        this.#explanation = null;
+        let needToUpdateOverrideSet = false;
+        let newOverrideSet;
+        let oldOverrideSet;
+        if (this.#from?.overrides) {
+          newOverrideSet = this.#from.overrides.getEdgeRule(this);
+          if (newOverrideSet && !newOverrideSet.isEqual(this.overrides)) {
+            needToUpdateOverrideSet = true;
+            oldOverrideSet = this.overrides;
+            this.overrides = newOverrideSet;
+          }
+        } else {
+          delete this.overrides;
+        }
+        const newTo = this.#from?.resolve(this.#name);
+        if (newTo !== this.#to) {
+          if (this.#to) {
+            this.#to.deleteEdgeIn(this);
+          }
+          this.#to = newTo;
+          this.#error = null;
+          if (this.#to) {
+            this.#to.addEdgeIn(this);
+          }
+        } else if (hard) {
+          this.#error = null;
+        } else if (needToUpdateOverrideSet && this.#to) {
+          this.#to.updateOverridesEdgeInRemoved(oldOverrideSet);
+          this.#to.updateOverridesEdgeInAdded(newOverrideSet);
+        }
+      }
+      detach() {
+        this.#explanation = null;
+        if (this.#to) {
+          this.#to.deleteEdgeIn(this);
+        }
+        this.#from?.edgesOut.delete(this.#name);
+        this.#to = null;
+        this.#error = "DETACHED";
+        this.#from = null;
+      }
+      get from() {
+        return this.#from;
+      }
+      get to() {
+        return this.#to;
+      }
+      toJSON() {
+        return new ArboristEdge(this);
+      }
+      [util.inspect.custom]() {
+        return this.toJSON();
+      }
+    };
+    module2.exports = Edge;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/inventory.js
+var require_inventory = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/inventory.js"(exports2, module2) {
+    var { hasOwnProperty } = Object.prototype;
+    var debug = require_debug2();
+    var keys = ["name", "license", "funding", "realpath", "packageName"];
+    var Inventory = class extends Map {
+      static {
+        __name(this, "Inventory");
+      }
+      #index;
+      constructor() {
+        super();
+        this.#index = /* @__PURE__ */ new Map();
+        for (const key of keys) {
+          this.#index.set(key, /* @__PURE__ */ new Map());
+        }
+      }
+      // XXX where is this used?
+      get primaryKey() {
+        return "location";
+      }
+      // XXX where is this used?
+      get indexes() {
+        return [...keys];
+      }
+      *filter(fn) {
+        for (const node of this.values()) {
+          if (fn(node)) {
+            yield node;
+          }
+        }
+      }
+      add(node) {
+        const root = super.get("");
+        if (root && node.root !== root && node.root !== root.root) {
+          debug(() => {
+            throw Object.assign(new Error("adding external node to inventory"), {
+              root: root.path,
+              node: node.path,
+              nodeRoot: node.root.path
+            });
+          });
+          return;
+        }
+        const current = super.get(node.location);
+        if (current) {
+          if (current === node) {
+            return;
+          }
+          this.delete(current);
+        }
+        super.set(node.location, node);
+        for (const [key, map] of this.#index.entries()) {
+          let val;
+          if (hasOwnProperty.call(node, key)) {
+            val = node[key];
+          } else if (key === "license" && node.package) {
+            if (node.package.license) {
+              val = node.package.license;
+            } else if (node.package.licence) {
+              val = node.package.licence;
+            } else if (Array.isArray(node.package.licenses)) {
+              val = node.package.licenses[0];
+            } else if (Array.isArray(node.package.licences)) {
+              val = node.package.licences[0];
+            }
+          } else if (node[key]) {
+            val = node[key];
+          } else {
+            val = node.package?.[key];
+          }
+          if (val && typeof val === "object") {
+            if (key === "license") {
+              val = val.type;
+            } else if (key === "funding") {
+              val = val.url;
+            }
+          }
+          if (!map.has(val)) {
+            map.set(val, /* @__PURE__ */ new Set());
+          }
+          map.get(val).add(node);
+        }
+      }
+      delete(node) {
+        if (!this.has(node)) {
+          return;
+        }
+        super.delete(node.location);
+        for (const [key, map] of this.#index.entries()) {
+          let val;
+          if (node[key] !== void 0) {
+            val = node[key];
+          } else {
+            val = node.package?.[key];
+          }
+          const set = map.get(val);
+          if (set) {
+            set.delete(node);
+            if (set.size === 0) {
+              map.delete(node[key]);
+            }
+          }
+        }
+      }
+      query(key, val) {
+        const map = this.#index.get(key);
+        if (arguments.length === 2) {
+          if (map.has(val)) {
+            return map.get(val);
+          }
+          return /* @__PURE__ */ new Set();
+        }
+        return map.keys();
+      }
+      has(node) {
+        return super.get(node.location) === node;
+      }
+      set() {
+        throw new Error("direct set() not supported, use inventory.add(node)");
+      }
+    };
+    module2.exports = Inventory;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/consistent-resolve.js
+var require_consistent_resolve = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/consistent-resolve.js"(exports2, module2) {
+    var npa = require_npa();
+    var relpath = require_relpath();
+    var consistentResolve = /* @__PURE__ */ __name((resolved, fromPath, toPath, relPaths = false) => {
+      if (!resolved) {
+        return null;
+      }
+      try {
+        const hostedOpt = { noCommittish: false };
+        const {
+          fetchSpec,
+          saveSpec,
+          type,
+          hosted,
+          rawSpec,
+          raw
+        } = npa(resolved, fromPath);
+        if (type === "file" || type === "directory") {
+          if (relPaths && toPath) {
+            return `file:${relpath(toPath, fetchSpec)}`;
+          }
+          return `file:${fetchSpec}`;
+        }
+        if (hosted) {
+          return `git+${hosted.auth ? hosted.https(hostedOpt) : hosted.sshurl(hostedOpt)}`;
+        }
+        if (type === "git") {
+          return saveSpec;
+        }
+        if (rawSpec === "*") {
+          return raw;
+        }
+        return rawSpec;
+      } catch (_) {
+        return resolved;
+      }
+    }, "consistentResolve");
+    module2.exports = consistentResolve;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/gather-dep-set.js
+var require_gather_dep_set = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/gather-dep-set.js"(exports2, module2) {
+    var gatherDepSet = /* @__PURE__ */ __name((set, edgeFilter) => {
+      const deps = new Set(set);
+      for (const node of deps) {
+        for (const edge of node.edgesOut.values()) {
+          if (edge.to && edgeFilter(edge)) {
+            deps.add(edge.to);
+          }
+        }
+      }
+      let changed = true;
+      while (changed === true && deps.size > 0) {
+        changed = false;
+        for (const dep of deps) {
+          for (const edge of dep.edgesIn) {
+            if (!deps.has(edge.from) && edgeFilter(edge)) {
+              changed = true;
+              deps.delete(dep);
+              break;
+            }
+          }
+        }
+      }
+      return deps;
+    }, "gatherDepSet");
+    module2.exports = gatherDepSet;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/printable.js
+var require_printable = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/printable.js"(exports2, module2) {
+    var localeCompare = require_string_locale_compare()("en");
+    var util = require("node:util");
+    var relpath = require_relpath();
+    var ArboristNode = class {
+      static {
+        __name(this, "ArboristNode");
+      }
+      constructor(tree, path) {
+        this.name = tree.name;
+        if (tree.packageName && tree.packageName !== this.name) {
+          this.packageName = tree.packageName;
+        }
+        if (tree.version) {
+          this.version = tree.version;
+        }
+        this.location = tree.location;
+        this.path = tree.path;
+        if (tree.realpath !== this.path) {
+          this.realpath = tree.realpath;
+        }
+        if (tree.resolved !== null) {
+          this.resolved = tree.resolved;
+        }
+        if (tree.extraneous) {
+          this.extraneous = true;
+        }
+        if (tree.dev) {
+          this.dev = true;
+        }
+        if (tree.optional) {
+          this.optional = true;
+        }
+        if (tree.devOptional && !tree.dev && !tree.optional) {
+          this.devOptional = true;
+        }
+        if (tree.peer) {
+          this.peer = true;
+        }
+        if (tree.inBundle) {
+          this.bundled = true;
+        }
+        if (tree.inDepBundle) {
+          this.bundler = tree.getBundler().location;
+        }
+        if (tree.isProjectRoot) {
+          this.isProjectRoot = true;
+        }
+        if (tree.isWorkspace) {
+          this.isWorkspace = true;
+        }
+        const bd = tree.package && tree.package.bundleDependencies;
+        if (bd && bd.length) {
+          this.bundleDependencies = bd;
+        }
+        if (tree.inShrinkwrap) {
+          this.inShrinkwrap = true;
+        } else if (tree.hasShrinkwrap) {
+          this.hasShrinkwrap = true;
+        }
+        if (tree.error) {
+          this.error = treeError(tree.error);
+        }
+        if (tree.errors && tree.errors.length) {
+          this.errors = tree.errors.map(treeError);
+        }
+        if (tree.overrides) {
+          this.overrides = new Map([...tree.overrides.ruleset.values()].map((override) => [override.key, override.value]));
+        }
+        if (tree.edgesOut.size) {
+          this.edgesOut = new Map([...tree.edgesOut.entries()].sort(([a], [b]) => localeCompare(a, b)).map(([name, edge]) => [name, new EdgeOut(edge)]));
+        }
+        if (tree.edgesIn.size) {
+          this.edgesIn = new Set([...tree.edgesIn].sort((a, b) => localeCompare(a.from.location, b.from.location)).map((edge) => new EdgeIn(edge)));
+        }
+        if (tree.workspaces && tree.workspaces.size) {
+          this.workspaces = new Map([...tree.workspaces.entries()].map(([name, path2]) => [name, relpath(tree.root.realpath, path2)]));
+        }
+        if (tree.fsChildren.size) {
+          this.fsChildren = new Set([...tree.fsChildren].sort(({ path: a }, { path: b }) => localeCompare(a, b)).map((tree2) => printableTree(tree2, path)));
+        }
+        if (tree.children.size) {
+          this.children = new Map([...tree.children.entries()].sort(([a], [b]) => localeCompare(a, b)).map(([name, tree2]) => [name, printableTree(tree2, path)]));
+        }
+      }
+    };
+    var ArboristVirtualNode = class extends ArboristNode {
+      static {
+        __name(this, "ArboristVirtualNode");
+      }
+      constructor(tree, path) {
+        super(tree, path);
+        this.sourceReference = printableTree(tree.sourceReference, path);
+      }
+    };
+    var ArboristLink = class extends ArboristNode {
+      static {
+        __name(this, "ArboristLink");
+      }
+      constructor(tree, path) {
+        super(tree, path);
+        this.target = printableTree(tree.target, path);
+      }
+    };
+    var treeError = /* @__PURE__ */ __name(({ code, path }) => ({
+      code,
+      ...path ? { path } : {}
+    }), "treeError");
+    var Edge = class {
+      static {
+        __name(this, "Edge");
+      }
+      constructor(edge) {
+        this.type = edge.type;
+        this.name = edge.name;
+        this.spec = edge.rawSpec || "*";
+        if (edge.rawSpec !== edge.spec) {
+          this.override = edge.spec;
+        }
+        if (edge.error) {
+          this.error = edge.error;
+        }
+        if (edge.peerConflicted) {
+          this.peerConflicted = edge.peerConflicted;
+        }
+      }
+    };
+    var EdgeOut = class extends Edge {
+      static {
+        __name(this, "EdgeOut");
+      }
+      constructor(edge) {
+        super(edge);
+        this.to = edge.to && edge.to.location;
+      }
+      [util.inspect.custom]() {
+        return `{ ${this.type} ${this.name}@${this.spec}${this.override ? ` overridden:${this.override}` : ""}${this.to ? " -> " + this.to : ""}${this.error ? " " + this.error : ""}${this.peerConflicted ? " peerConflicted" : ""} }`;
+      }
+    };
+    var EdgeIn = class extends Edge {
+      static {
+        __name(this, "EdgeIn");
+      }
+      constructor(edge) {
+        super(edge);
+        this.from = edge.from && edge.from.location;
+      }
+      [util.inspect.custom]() {
+        return `{ ${this.from || '""'} ${this.type} ${this.name}@${this.spec}${this.error ? " " + this.error : ""}${this.peerConflicted ? " peerConflicted" : ""} }`;
+      }
+    };
+    var printableTree = /* @__PURE__ */ __name((tree, path = []) => {
+      if (!tree) {
+        return tree;
+      }
+      const Cls = tree.isLink ? ArboristLink : tree.sourceReference ? ArboristVirtualNode : ArboristNode;
+      if (path.includes(tree)) {
+        const obj = Object.create(Cls.prototype);
+        return Object.assign(obj, { location: tree.location });
+      }
+      path.push(tree);
+      return new Cls(tree, path);
+    }, "printableTree");
+    module2.exports = printableTree;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/util/unesc.js
+var require_unesc = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/util/unesc.js"(exports2, module2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = unesc;
+    function gobbleHex(str) {
+      var lower = str.toLowerCase();
+      var hex = "";
+      var spaceTerminated = false;
+      for (var i = 0; i < 6 && lower[i] !== void 0; i++) {
+        var code = lower.charCodeAt(i);
+        var valid = code >= 97 && code <= 102 || code >= 48 && code <= 57;
+        spaceTerminated = code === 32;
+        if (!valid) {
+          break;
+        }
+        hex += lower[i];
+      }
+      if (hex.length === 0) {
+        return void 0;
+      }
+      var codePoint = parseInt(hex, 16);
+      var isSurrogate = codePoint >= 55296 && codePoint <= 57343;
+      if (isSurrogate || codePoint === 0 || codePoint > 1114111) {
+        return ["�", hex.length + (spaceTerminated ? 1 : 0)];
+      }
+      return [String.fromCodePoint(codePoint), hex.length + (spaceTerminated ? 1 : 0)];
+    }
+    __name(gobbleHex, "gobbleHex");
+    var CONTAINS_ESCAPE = /\\/;
+    function unesc(str) {
+      var needToProcess = CONTAINS_ESCAPE.test(str);
+      if (!needToProcess) {
+        return str;
+      }
+      var ret = "";
+      for (var i = 0; i < str.length; i++) {
+        if (str[i] === "\\") {
+          var gobbled = gobbleHex(str.slice(i + 1, i + 7));
+          if (gobbled !== void 0) {
+            ret += gobbled[0];
+            i += gobbled[1];
+            continue;
+          }
+          if (str[i + 1] === "\\") {
+            ret += "\\";
+            i++;
+            continue;
+          }
+          if (str.length === i + 1) {
+            ret += str[i];
+          }
+          continue;
+        }
+        ret += str[i];
+      }
+      return ret;
+    }
+    __name(unesc, "unesc");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/util/getProp.js
+var require_getProp = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/util/getProp.js"(exports2, module2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = getProp;
+    function getProp(obj) {
+      for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+        props[_key - 1] = arguments[_key];
+      }
+      while (props.length > 0) {
+        var prop = props.shift();
+        if (!obj[prop]) {
+          return void 0;
+        }
+        obj = obj[prop];
+      }
+      return obj;
+    }
+    __name(getProp, "getProp");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/util/ensureObject.js
+var require_ensureObject = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/util/ensureObject.js"(exports2, module2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = ensureObject;
+    function ensureObject(obj) {
+      for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+        props[_key - 1] = arguments[_key];
+      }
+      while (props.length > 0) {
+        var prop = props.shift();
+        if (!obj[prop]) {
+          obj[prop] = {};
+        }
+        obj = obj[prop];
+      }
+    }
+    __name(ensureObject, "ensureObject");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/util/stripComments.js
+var require_stripComments = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/util/stripComments.js"(exports2, module2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = stripComments;
+    function stripComments(str) {
+      var s = "";
+      var commentStart = str.indexOf("/*");
+      var lastEnd = 0;
+      while (commentStart >= 0) {
+        s = s + str.slice(lastEnd, commentStart);
+        var commentEnd = str.indexOf("*/", commentStart + 2);
+        if (commentEnd < 0) {
+          return s;
+        }
+        lastEnd = commentEnd + 2;
+        commentStart = str.indexOf("/*", lastEnd);
+      }
+      s = s + str.slice(lastEnd);
+      return s;
+    }
+    __name(stripComments, "stripComments");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/util/index.js
+var require_util3 = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/util/index.js"(exports2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2.unesc = exports2.stripComments = exports2.getProp = exports2.ensureObject = void 0;
+    var _unesc = _interopRequireDefault(require_unesc());
+    exports2.unesc = _unesc["default"];
+    var _getProp = _interopRequireDefault(require_getProp());
+    exports2.getProp = _getProp["default"];
+    var _ensureObject = _interopRequireDefault(require_ensureObject());
+    exports2.ensureObject = _ensureObject["default"];
+    var _stripComments = _interopRequireDefault(require_stripComments());
+    exports2.stripComments = _stripComments["default"];
+    function _interopRequireDefault(obj) {
+      return obj && obj.__esModule ? obj : { "default": obj };
+    }
+    __name(_interopRequireDefault, "_interopRequireDefault");
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/node.js
+var require_node3 = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/node.js"(exports2, module2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = void 0;
+    var _util = require_util3();
+    function _defineProperties(target, props) {
+      for (var i = 0; i < props.length; i++) {
+        var descriptor = props[i];
+        descriptor.enumerable = descriptor.enumerable || false;
+        descriptor.configurable = true;
+        if ("value" in descriptor) descriptor.writable = true;
+        Object.defineProperty(target, descriptor.key, descriptor);
+      }
+    }
+    __name(_defineProperties, "_defineProperties");
+    function _createClass(Constructor, protoProps, staticProps) {
+      if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+      if (staticProps) _defineProperties(Constructor, staticProps);
+      Object.defineProperty(Constructor, "prototype", { writable: false });
+      return Constructor;
+    }
+    __name(_createClass, "_createClass");
+    var cloneNode = /* @__PURE__ */ __name(function cloneNode2(obj, parent) {
+      if (typeof obj !== "object" || obj === null) {
+        return obj;
+      }
+      var cloned = new obj.constructor();
+      for (var i in obj) {
+        if (!obj.hasOwnProperty(i)) {
+          continue;
+        }
+        var value = obj[i];
+        var type = typeof value;
+        if (i === "parent" && type === "object") {
+          if (parent) {
+            cloned[i] = parent;
+          }
+        } else if (value instanceof Array) {
+          cloned[i] = value.map(function(j) {
+            return cloneNode2(j, cloned);
+          });
+        } else {
+          cloned[i] = cloneNode2(value, cloned);
+        }
+      }
+      return cloned;
+    }, "cloneNode");
+    var Node = /* @__PURE__ */ (function() {
+      function Node2(opts) {
+        if (opts === void 0) {
+          opts = {};
+        }
+        Object.assign(this, opts);
+        this.spaces = this.spaces || {};
+        this.spaces.before = this.spaces.before || "";
+        this.spaces.after = this.spaces.after || "";
+      }
+      __name(Node2, "Node");
+      var _proto = Node2.prototype;
+      _proto.remove = /* @__PURE__ */ __name(function remove() {
+        if (this.parent) {
+          this.parent.removeChild(this);
+        }
+        this.parent = void 0;
+        return this;
+      }, "remove");
+      _proto.replaceWith = /* @__PURE__ */ __name(function replaceWith() {
+        if (this.parent) {
+          for (var index in arguments) {
+            this.parent.insertBefore(this, arguments[index]);
+          }
+          this.remove();
+        }
+        return this;
+      }, "replaceWith");
+      _proto.next = /* @__PURE__ */ __name(function next() {
+        return this.parent.at(this.parent.index(this) + 1);
+      }, "next");
+      _proto.prev = /* @__PURE__ */ __name(function prev() {
+        return this.parent.at(this.parent.index(this) - 1);
+      }, "prev");
+      _proto.clone = /* @__PURE__ */ __name(function clone(overrides) {
+        if (overrides === void 0) {
+          overrides = {};
+        }
+        var cloned = cloneNode(this);
+        for (var name in overrides) {
+          cloned[name] = overrides[name];
+        }
+        return cloned;
+      }, "clone");
+      _proto.appendToPropertyAndEscape = /* @__PURE__ */ __name(function appendToPropertyAndEscape(name, value, valueEscaped) {
+        if (!this.raws) {
+          this.raws = {};
+        }
+        var originalValue = this[name];
+        var originalEscaped = this.raws[name];
+        this[name] = originalValue + value;
+        if (originalEscaped || valueEscaped !== value) {
+          this.raws[name] = (originalEscaped || originalValue) + valueEscaped;
+        } else {
+          delete this.raws[name];
+        }
+      }, "appendToPropertyAndEscape");
+      _proto.setPropertyAndEscape = /* @__PURE__ */ __name(function setPropertyAndEscape(name, value, valueEscaped) {
+        if (!this.raws) {
+          this.raws = {};
+        }
+        this[name] = value;
+        this.raws[name] = valueEscaped;
+      }, "setPropertyAndEscape");
+      _proto.setPropertyWithoutEscape = /* @__PURE__ */ __name(function setPropertyWithoutEscape(name, value) {
+        this[name] = value;
+        if (this.raws) {
+          delete this.raws[name];
+        }
+      }, "setPropertyWithoutEscape");
+      _proto.isAtPosition = /* @__PURE__ */ __name(function isAtPosition(line, column) {
+        if (this.source && this.source.start && this.source.end) {
+          if (this.source.start.line > line) {
+            return false;
+          }
+          if (this.source.end.line < line) {
+            return false;
+          }
+          if (this.source.start.line === line && this.source.start.column > column) {
+            return false;
+          }
+          if (this.source.end.line === line && this.source.end.column < column) {
+            return false;
+          }
+          return true;
+        }
+        return void 0;
+      }, "isAtPosition");
+      _proto.stringifyProperty = /* @__PURE__ */ __name(function stringifyProperty(name) {
+        return this.raws && this.raws[name] || this[name];
+      }, "stringifyProperty");
+      _proto.valueToString = /* @__PURE__ */ __name(function valueToString() {
+        return String(this.stringifyProperty("value"));
+      }, "valueToString");
+      _proto.toString = /* @__PURE__ */ __name(function toString() {
+        return [this.rawSpaceBefore, this.valueToString(), this.rawSpaceAfter].join("");
+      }, "toString");
+      _createClass(Node2, [{
+        key: "rawSpaceBefore",
+        get: /* @__PURE__ */ __name(function get() {
+          var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.before;
+          if (rawSpace === void 0) {
+            rawSpace = this.spaces && this.spaces.before;
+          }
+          return rawSpace || "";
+        }, "get"),
+        set: /* @__PURE__ */ __name(function set(raw) {
+          (0, _util.ensureObject)(this, "raws", "spaces");
+          this.raws.spaces.before = raw;
+        }, "set")
+      }, {
+        key: "rawSpaceAfter",
+        get: /* @__PURE__ */ __name(function get() {
+          var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.after;
+          if (rawSpace === void 0) {
+            rawSpace = this.spaces.after;
+          }
+          return rawSpace || "";
+        }, "get"),
+        set: /* @__PURE__ */ __name(function set(raw) {
+          (0, _util.ensureObject)(this, "raws", "spaces");
+          this.raws.spaces.after = raw;
+        }, "set")
+      }]);
+      return Node2;
+    })();
+    exports2["default"] = Node;
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/types.js
+var require_types = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/types.js"(exports2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2.UNIVERSAL = exports2.TAG = exports2.STRING = exports2.SELECTOR = exports2.ROOT = exports2.PSEUDO = exports2.NESTING = exports2.ID = exports2.COMMENT = exports2.COMBINATOR = exports2.CLASS = exports2.ATTRIBUTE = void 0;
+    var TAG = "tag";
+    exports2.TAG = TAG;
+    var STRING = "string";
+    exports2.STRING = STRING;
+    var SELECTOR = "selector";
+    exports2.SELECTOR = SELECTOR;
+    var ROOT = "root";
+    exports2.ROOT = ROOT;
+    var PSEUDO = "pseudo";
+    exports2.PSEUDO = PSEUDO;
+    var NESTING = "nesting";
+    exports2.NESTING = NESTING;
+    var ID = "id";
+    exports2.ID = ID;
+    var COMMENT = "comment";
+    exports2.COMMENT = COMMENT;
+    var COMBINATOR = "combinator";
+    exports2.COMBINATOR = COMBINATOR;
+    var CLASS = "class";
+    exports2.CLASS = CLASS;
+    var ATTRIBUTE = "attribute";
+    exports2.ATTRIBUTE = ATTRIBUTE;
+    var UNIVERSAL = "universal";
+    exports2.UNIVERSAL = UNIVERSAL;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/container.js
+var require_container = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/container.js"(exports2, module2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = void 0;
+    var _node = _interopRequireDefault(require_node3());
+    var types = _interopRequireWildcard(require_types());
+    function _getRequireWildcardCache(nodeInterop) {
+      if (typeof WeakMap !== "function") return null;
+      var cacheBabelInterop = /* @__PURE__ */ new WeakMap();
+      var cacheNodeInterop = /* @__PURE__ */ new WeakMap();
+      return (_getRequireWildcardCache = /* @__PURE__ */ __name(function _getRequireWildcardCache2(nodeInterop2) {
+        return nodeInterop2 ? cacheNodeInterop : cacheBabelInterop;
+      }, "_getRequireWildcardCache"))(nodeInterop);
+    }
+    __name(_getRequireWildcardCache, "_getRequireWildcardCache");
+    function _interopRequireWildcard(obj, nodeInterop) {
+      if (!nodeInterop && obj && obj.__esModule) {
+        return obj;
+      }
+      if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
+        return { "default": obj };
+      }
+      var cache = _getRequireWildcardCache(nodeInterop);
+      if (cache && cache.has(obj)) {
+        return cache.get(obj);
+      }
+      var newObj = {};
+      var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
+      for (var key in obj) {
+        if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
+          var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
+          if (desc && (desc.get || desc.set)) {
+            Object.defineProperty(newObj, key, desc);
+          } else {
+            newObj[key] = obj[key];
+          }
+        }
+      }
+      newObj["default"] = obj;
+      if (cache) {
+        cache.set(obj, newObj);
+      }
+      return newObj;
+    }
+    __name(_interopRequireWildcard, "_interopRequireWildcard");
+    function _interopRequireDefault(obj) {
+      return obj && obj.__esModule ? obj : { "default": obj };
+    }
+    __name(_interopRequireDefault, "_interopRequireDefault");
+    function _createForOfIteratorHelperLoose(o, allowArrayLike) {
+      var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
+      if (it) return (it = it.call(o)).next.bind(it);
+      if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
+        if (it) o = it;
+        var i = 0;
+        return function() {
+          if (i >= o.length) return { done: true };
+          return { done: false, value: o[i++] };
+        };
+      }
+      throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+    }
+    __name(_createForOfIteratorHelperLoose, "_createForOfIteratorHelperLoose");
+    function _unsupportedIterableToArray(o, minLen) {
+      if (!o) return;
+      if (typeof o === "string") return _arrayLikeToArray(o, minLen);
+      var n = Object.prototype.toString.call(o).slice(8, -1);
+      if (n === "Object" && o.constructor) n = o.constructor.name;
+      if (n === "Map" || n === "Set") return Array.from(o);
+      if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
+    }
+    __name(_unsupportedIterableToArray, "_unsupportedIterableToArray");
+    function _arrayLikeToArray(arr, len) {
+      if (len == null || len > arr.length) len = arr.length;
+      for (var i = 0, arr2 = new Array(len); i < len; i++) {
+        arr2[i] = arr[i];
+      }
+      return arr2;
+    }
+    __name(_arrayLikeToArray, "_arrayLikeToArray");
+    function _defineProperties(target, props) {
+      for (var i = 0; i < props.length; i++) {
+        var descriptor = props[i];
+        descriptor.enumerable = descriptor.enumerable || false;
+        descriptor.configurable = true;
+        if ("value" in descriptor) descriptor.writable = true;
+        Object.defineProperty(target, descriptor.key, descriptor);
+      }
+    }
+    __name(_defineProperties, "_defineProperties");
+    function _createClass(Constructor, protoProps, staticProps) {
+      if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+      if (staticProps) _defineProperties(Constructor, staticProps);
+      Object.defineProperty(Constructor, "prototype", { writable: false });
+      return Constructor;
+    }
+    __name(_createClass, "_createClass");
+    function _inheritsLoose(subClass, superClass) {
+      subClass.prototype = Object.create(superClass.prototype);
+      subClass.prototype.constructor = subClass;
+      _setPrototypeOf(subClass, superClass);
+    }
+    __name(_inheritsLoose, "_inheritsLoose");
+    function _setPrototypeOf(o, p) {
+      _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : /* @__PURE__ */ __name(function _setPrototypeOf2(o2, p2) {
+        o2.__proto__ = p2;
+        return o2;
+      }, "_setPrototypeOf");
+      return _setPrototypeOf(o, p);
+    }
+    __name(_setPrototypeOf, "_setPrototypeOf");
+    var Container = /* @__PURE__ */ (function(_Node) {
+      _inheritsLoose(Container2, _Node);
+      function Container2(opts) {
+        var _this;
+        _this = _Node.call(this, opts) || this;
+        if (!_this.nodes) {
+          _this.nodes = [];
+        }
+        return _this;
+      }
+      __name(Container2, "Container");
+      var _proto = Container2.prototype;
+      _proto.append = /* @__PURE__ */ __name(function append(selector) {
+        selector.parent = this;
+        this.nodes.push(selector);
+        return this;
+      }, "append");
+      _proto.prepend = /* @__PURE__ */ __name(function prepend(selector) {
+        selector.parent = this;
+        this.nodes.unshift(selector);
+        for (var id in this.indexes) {
+          this.indexes[id]++;
+        }
+        return this;
+      }, "prepend");
+      _proto.at = /* @__PURE__ */ __name(function at(index) {
+        return this.nodes[index];
+      }, "at");
+      _proto.index = /* @__PURE__ */ __name(function index(child) {
+        if (typeof child === "number") {
+          return child;
+        }
+        return this.nodes.indexOf(child);
+      }, "index");
+      _proto.removeChild = /* @__PURE__ */ __name(function removeChild(child) {
+        child = this.index(child);
+        this.at(child).parent = void 0;
+        this.nodes.splice(child, 1);
+        var index;
+        for (var id in this.indexes) {
+          index = this.indexes[id];
+          if (index >= child) {
+            this.indexes[id] = index - 1;
+          }
+        }
+        return this;
+      }, "removeChild");
+      _proto.removeAll = /* @__PURE__ */ __name(function removeAll() {
+        for (var _iterator = _createForOfIteratorHelperLoose(this.nodes), _step; !(_step = _iterator()).done; ) {
+          var node = _step.value;
+          node.parent = void 0;
+        }
+        this.nodes = [];
+        return this;
+      }, "removeAll");
+      _proto.empty = /* @__PURE__ */ __name(function empty() {
+        return this.removeAll();
+      }, "empty");
+      _proto.insertAfter = /* @__PURE__ */ __name(function insertAfter(oldNode, newNode) {
+        var _this$nodes;
+        newNode.parent = this;
+        var oldIndex = this.index(oldNode);
+        var resetNode = [];
+        for (var i = 2; i < arguments.length; i++) {
+          resetNode.push(arguments[i]);
+        }
+        (_this$nodes = this.nodes).splice.apply(_this$nodes, [oldIndex + 1, 0, newNode].concat(resetNode));
+        newNode.parent = this;
+        var index;
+        for (var id in this.indexes) {
+          index = this.indexes[id];
+          if (oldIndex < index) {
+            this.indexes[id] = index + arguments.length - 1;
+          }
+        }
+        return this;
+      }, "insertAfter");
+      _proto.insertBefore = /* @__PURE__ */ __name(function insertBefore(oldNode, newNode) {
+        var _this$nodes2;
+        newNode.parent = this;
+        var oldIndex = this.index(oldNode);
+        var resetNode = [];
+        for (var i = 2; i < arguments.length; i++) {
+          resetNode.push(arguments[i]);
+        }
+        (_this$nodes2 = this.nodes).splice.apply(_this$nodes2, [oldIndex, 0, newNode].concat(resetNode));
+        newNode.parent = this;
+        var index;
+        for (var id in this.indexes) {
+          index = this.indexes[id];
+          if (index >= oldIndex) {
+            this.indexes[id] = index + arguments.length - 1;
+          }
+        }
+        return this;
+      }, "insertBefore");
+      _proto._findChildAtPosition = /* @__PURE__ */ __name(function _findChildAtPosition(line, col) {
+        var found = void 0;
+        this.each(function(node) {
+          if (node.atPosition) {
+            var foundChild = node.atPosition(line, col);
+            if (foundChild) {
+              found = foundChild;
+              return false;
+            }
+          } else if (node.isAtPosition(line, col)) {
+            found = node;
+            return false;
+          }
+        });
+        return found;
+      }, "_findChildAtPosition");
+      _proto.atPosition = /* @__PURE__ */ __name(function atPosition(line, col) {
+        if (this.isAtPosition(line, col)) {
+          return this._findChildAtPosition(line, col) || this;
+        } else {
+          return void 0;
+        }
+      }, "atPosition");
+      _proto._inferEndPosition = /* @__PURE__ */ __name(function _inferEndPosition() {
+        if (this.last && this.last.source && this.last.source.end) {
+          this.source = this.source || {};
+          this.source.end = this.source.end || {};
+          Object.assign(this.source.end, this.last.source.end);
+        }
+      }, "_inferEndPosition");
+      _proto.each = /* @__PURE__ */ __name(function each(callback) {
+        if (!this.lastEach) {
+          this.lastEach = 0;
+        }
+        if (!this.indexes) {
+          this.indexes = {};
+        }
+        this.lastEach++;
+        var id = this.lastEach;
+        this.indexes[id] = 0;
+        if (!this.length) {
+          return void 0;
+        }
+        var index, result;
+        while (this.indexes[id] < this.length) {
+          index = this.indexes[id];
+          result = callback(this.at(index), index);
+          if (result === false) {
+            break;
+          }
+          this.indexes[id] += 1;
+        }
+        delete this.indexes[id];
+        if (result === false) {
+          return false;
+        }
+      }, "each");
+      _proto.walk = /* @__PURE__ */ __name(function walk(callback) {
+        return this.each(function(node, i) {
+          var result = callback(node, i);
+          if (result !== false && node.length) {
+            result = node.walk(callback);
+          }
+          if (result === false) {
+            return false;
+          }
+        });
+      }, "walk");
+      _proto.walkAttributes = /* @__PURE__ */ __name(function walkAttributes(callback) {
+        var _this2 = this;
+        return this.walk(function(selector) {
+          if (selector.type === types.ATTRIBUTE) {
+            return callback.call(_this2, selector);
+          }
+        });
+      }, "walkAttributes");
+      _proto.walkClasses = /* @__PURE__ */ __name(function walkClasses(callback) {
+        var _this3 = this;
+        return this.walk(function(selector) {
+          if (selector.type === types.CLASS) {
+            return callback.call(_this3, selector);
+          }
+        });
+      }, "walkClasses");
+      _proto.walkCombinators = /* @__PURE__ */ __name(function walkCombinators(callback) {
+        var _this4 = this;
+        return this.walk(function(selector) {
+          if (selector.type === types.COMBINATOR) {
+            return callback.call(_this4, selector);
+          }
+        });
+      }, "walkCombinators");
+      _proto.walkComments = /* @__PURE__ */ __name(function walkComments(callback) {
+        var _this5 = this;
+        return this.walk(function(selector) {
+          if (selector.type === types.COMMENT) {
+            return callback.call(_this5, selector);
+          }
+        });
+      }, "walkComments");
+      _proto.walkIds = /* @__PURE__ */ __name(function walkIds(callback) {
+        var _this6 = this;
+        return this.walk(function(selector) {
+          if (selector.type === types.ID) {
+            return callback.call(_this6, selector);
+          }
+        });
+      }, "walkIds");
+      _proto.walkNesting = /* @__PURE__ */ __name(function walkNesting(callback) {
+        var _this7 = this;
+        return this.walk(function(selector) {
+          if (selector.type === types.NESTING) {
+            return callback.call(_this7, selector);
+          }
+        });
+      }, "walkNesting");
+      _proto.walkPseudos = /* @__PURE__ */ __name(function walkPseudos(callback) {
+        var _this8 = this;
+        return this.walk(function(selector) {
+          if (selector.type === types.PSEUDO) {
+            return callback.call(_this8, selector);
+          }
+        });
+      }, "walkPseudos");
+      _proto.walkTags = /* @__PURE__ */ __name(function walkTags(callback) {
+        var _this9 = this;
+        return this.walk(function(selector) {
+          if (selector.type === types.TAG) {
+            return callback.call(_this9, selector);
+          }
+        });
+      }, "walkTags");
+      _proto.walkUniversals = /* @__PURE__ */ __name(function walkUniversals(callback) {
+        var _this10 = this;
+        return this.walk(function(selector) {
+          if (selector.type === types.UNIVERSAL) {
+            return callback.call(_this10, selector);
+          }
+        });
+      }, "walkUniversals");
+      _proto.split = /* @__PURE__ */ __name(function split(callback) {
+        var _this11 = this;
+        var current = [];
+        return this.reduce(function(memo, node, index) {
+          var split2 = callback.call(_this11, node);
+          current.push(node);
+          if (split2) {
+            memo.push(current);
+            current = [];
+          } else if (index === _this11.length - 1) {
+            memo.push(current);
+          }
+          return memo;
+        }, []);
+      }, "split");
+      _proto.map = /* @__PURE__ */ __name(function map(callback) {
+        return this.nodes.map(callback);
+      }, "map");
+      _proto.reduce = /* @__PURE__ */ __name(function reduce(callback, memo) {
+        return this.nodes.reduce(callback, memo);
+      }, "reduce");
+      _proto.every = /* @__PURE__ */ __name(function every(callback) {
+        return this.nodes.every(callback);
+      }, "every");
+      _proto.some = /* @__PURE__ */ __name(function some(callback) {
+        return this.nodes.some(callback);
+      }, "some");
+      _proto.filter = /* @__PURE__ */ __name(function filter(callback) {
+        return this.nodes.filter(callback);
+      }, "filter");
+      _proto.sort = /* @__PURE__ */ __name(function sort(callback) {
+        return this.nodes.sort(callback);
+      }, "sort");
+      _proto.toString = /* @__PURE__ */ __name(function toString() {
+        return this.map(String).join("");
+      }, "toString");
+      _createClass(Container2, [{
+        key: "first",
+        get: /* @__PURE__ */ __name(function get() {
+          return this.at(0);
+        }, "get")
+      }, {
+        key: "last",
+        get: /* @__PURE__ */ __name(function get() {
+          return this.at(this.length - 1);
+        }, "get")
+      }, {
+        key: "length",
+        get: /* @__PURE__ */ __name(function get() {
+          return this.nodes.length;
+        }, "get")
+      }]);
+      return Container2;
+    })(_node["default"]);
+    exports2["default"] = Container;
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/root.js
+var require_root2 = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/root.js"(exports2, module2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = void 0;
+    var _container = _interopRequireDefault(require_container());
+    var _types = require_types();
+    function _interopRequireDefault(obj) {
+      return obj && obj.__esModule ? obj : { "default": obj };
+    }
+    __name(_interopRequireDefault, "_interopRequireDefault");
+    function _defineProperties(target, props) {
+      for (var i = 0; i < props.length; i++) {
+        var descriptor = props[i];
+        descriptor.enumerable = descriptor.enumerable || false;
+        descriptor.configurable = true;
+        if ("value" in descriptor) descriptor.writable = true;
+        Object.defineProperty(target, descriptor.key, descriptor);
+      }
+    }
+    __name(_defineProperties, "_defineProperties");
+    function _createClass(Constructor, protoProps, staticProps) {
+      if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+      if (staticProps) _defineProperties(Constructor, staticProps);
+      Object.defineProperty(Constructor, "prototype", { writable: false });
+      return Constructor;
+    }
+    __name(_createClass, "_createClass");
+    function _inheritsLoose(subClass, superClass) {
+      subClass.prototype = Object.create(superClass.prototype);
+      subClass.prototype.constructor = subClass;
+      _setPrototypeOf(subClass, superClass);
+    }
+    __name(_inheritsLoose, "_inheritsLoose");
+    function _setPrototypeOf(o, p) {
+      _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : /* @__PURE__ */ __name(function _setPrototypeOf2(o2, p2) {
+        o2.__proto__ = p2;
+        return o2;
+      }, "_setPrototypeOf");
+      return _setPrototypeOf(o, p);
+    }
+    __name(_setPrototypeOf, "_setPrototypeOf");
+    var Root = /* @__PURE__ */ (function(_Container) {
+      _inheritsLoose(Root2, _Container);
+      function Root2(opts) {
+        var _this;
+        _this = _Container.call(this, opts) || this;
+        _this.type = _types.ROOT;
+        return _this;
+      }
+      __name(Root2, "Root");
+      var _proto = Root2.prototype;
+      _proto.toString = /* @__PURE__ */ __name(function toString() {
+        var str = this.reduce(function(memo, selector) {
+          memo.push(String(selector));
+          return memo;
+        }, []).join(",");
+        return this.trailingComma ? str + "," : str;
+      }, "toString");
+      _proto.error = /* @__PURE__ */ __name(function error(message, options) {
+        if (this._error) {
+          return this._error(message, options);
+        } else {
+          return new Error(message);
+        }
+      }, "error");
+      _createClass(Root2, [{
+        key: "errorGenerator",
+        set: /* @__PURE__ */ __name(function set(handler) {
+          this._error = handler;
+        }, "set")
+      }]);
+      return Root2;
+    })(_container["default"]);
+    exports2["default"] = Root;
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/selector.js
+var require_selector = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/selector.js"(exports2, module2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = void 0;
+    var _container = _interopRequireDefault(require_container());
+    var _types = require_types();
+    function _interopRequireDefault(obj) {
+      return obj && obj.__esModule ? obj : { "default": obj };
+    }
+    __name(_interopRequireDefault, "_interopRequireDefault");
+    function _inheritsLoose(subClass, superClass) {
+      subClass.prototype = Object.create(superClass.prototype);
+      subClass.prototype.constructor = subClass;
+      _setPrototypeOf(subClass, superClass);
+    }
+    __name(_inheritsLoose, "_inheritsLoose");
+    function _setPrototypeOf(o, p) {
+      _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : /* @__PURE__ */ __name(function _setPrototypeOf2(o2, p2) {
+        o2.__proto__ = p2;
+        return o2;
+      }, "_setPrototypeOf");
+      return _setPrototypeOf(o, p);
+    }
+    __name(_setPrototypeOf, "_setPrototypeOf");
+    var Selector = /* @__PURE__ */ (function(_Container) {
+      _inheritsLoose(Selector2, _Container);
+      function Selector2(opts) {
+        var _this;
+        _this = _Container.call(this, opts) || this;
+        _this.type = _types.SELECTOR;
+        return _this;
+      }
+      __name(Selector2, "Selector");
+      return Selector2;
+    })(_container["default"]);
+    exports2["default"] = Selector;
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/cssesc@3.0.0/node_modules/cssesc/cssesc.js
+var require_cssesc = __commonJS({
+  "node_modules/.pnpm/cssesc@3.0.0/node_modules/cssesc/cssesc.js"(exports2, module2) {
+    "use strict";
+    var object = {};
+    var hasOwnProperty = object.hasOwnProperty;
+    var merge = /* @__PURE__ */ __name(function merge2(options, defaults) {
+      if (!options) {
+        return defaults;
+      }
+      var result = {};
+      for (var key in defaults) {
+        result[key] = hasOwnProperty.call(options, key) ? options[key] : defaults[key];
+      }
+      return result;
+    }, "merge");
+    var regexAnySingleEscape = /[ -,\.\/:-@\[-\^`\{-~]/;
+    var regexSingleEscape = /[ -,\.\/:-@\[\]\^`\{-~]/;
+    var regexExcessiveSpaces = /(^|\\+)?(\\[A-F0-9]{1,6})\x20(?![a-fA-F0-9\x20])/g;
+    var cssesc = /* @__PURE__ */ __name(function cssesc2(string, options) {
+      options = merge(options, cssesc2.options);
+      if (options.quotes != "single" && options.quotes != "double") {
+        options.quotes = "single";
+      }
+      var quote = options.quotes == "double" ? '"' : "'";
+      var isIdentifier = options.isIdentifier;
+      var firstChar = string.charAt(0);
+      var output = "";
+      var counter = 0;
+      var length = string.length;
+      while (counter < length) {
+        var character = string.charAt(counter++);
+        var codePoint = character.charCodeAt();
+        var value = void 0;
+        if (codePoint < 32 || codePoint > 126) {
+          if (codePoint >= 55296 && codePoint <= 56319 && counter < length) {
+            var extra = string.charCodeAt(counter++);
+            if ((extra & 64512) == 56320) {
+              codePoint = ((codePoint & 1023) << 10) + (extra & 1023) + 65536;
+            } else {
+              counter--;
+            }
+          }
+          value = "\\" + codePoint.toString(16).toUpperCase() + " ";
+        } else {
+          if (options.escapeEverything) {
+            if (regexAnySingleEscape.test(character)) {
+              value = "\\" + character;
+            } else {
+              value = "\\" + codePoint.toString(16).toUpperCase() + " ";
+            }
+          } else if (/[\t\n\f\r\x0B]/.test(character)) {
+            value = "\\" + codePoint.toString(16).toUpperCase() + " ";
+          } else if (character == "\\" || !isIdentifier && (character == '"' && quote == character || character == "'" && quote == character) || isIdentifier && regexSingleEscape.test(character)) {
+            value = "\\" + character;
+          } else {
+            value = character;
+          }
+        }
+        output += value;
+      }
+      if (isIdentifier) {
+        if (/^-[-\d]/.test(output)) {
+          output = "\\-" + output.slice(1);
+        } else if (/\d/.test(firstChar)) {
+          output = "\\3" + firstChar + " " + output.slice(1);
+        }
+      }
+      output = output.replace(regexExcessiveSpaces, function($0, $1, $2) {
+        if ($1 && $1.length % 2) {
+          return $0;
+        }
+        return ($1 || "") + $2;
+      });
+      if (!isIdentifier && options.wrap) {
+        return quote + output + quote;
+      }
+      return output;
+    }, "cssesc");
+    cssesc.options = {
+      "escapeEverything": false,
+      "isIdentifier": false,
+      "quotes": "single",
+      "wrap": false
+    };
+    cssesc.version = "3.0.0";
+    module2.exports = cssesc;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/className.js
+var require_className = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/className.js"(exports2, module2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = void 0;
+    var _cssesc = _interopRequireDefault(require_cssesc());
+    var _util = require_util3();
+    var _node = _interopRequireDefault(require_node3());
+    var _types = require_types();
+    function _interopRequireDefault(obj) {
+      return obj && obj.__esModule ? obj : { "default": obj };
+    }
+    __name(_interopRequireDefault, "_interopRequireDefault");
+    function _defineProperties(target, props) {
+      for (var i = 0; i < props.length; i++) {
+        var descriptor = props[i];
+        descriptor.enumerable = descriptor.enumerable || false;
+        descriptor.configurable = true;
+        if ("value" in descriptor) descriptor.writable = true;
+        Object.defineProperty(target, descriptor.key, descriptor);
+      }
+    }
+    __name(_defineProperties, "_defineProperties");
+    function _createClass(Constructor, protoProps, staticProps) {
+      if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+      if (staticProps) _defineProperties(Constructor, staticProps);
+      Object.defineProperty(Constructor, "prototype", { writable: false });
+      return Constructor;
+    }
+    __name(_createClass, "_createClass");
+    function _inheritsLoose(subClass, superClass) {
+      subClass.prototype = Object.create(superClass.prototype);
+      subClass.prototype.constructor = subClass;
+      _setPrototypeOf(subClass, superClass);
+    }
+    __name(_inheritsLoose, "_inheritsLoose");
+    function _setPrototypeOf(o, p) {
+      _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : /* @__PURE__ */ __name(function _setPrototypeOf2(o2, p2) {
+        o2.__proto__ = p2;
+        return o2;
+      }, "_setPrototypeOf");
+      return _setPrototypeOf(o, p);
+    }
+    __name(_setPrototypeOf, "_setPrototypeOf");
+    var ClassName = /* @__PURE__ */ (function(_Node) {
+      _inheritsLoose(ClassName2, _Node);
+      function ClassName2(opts) {
+        var _this;
+        _this = _Node.call(this, opts) || this;
+        _this.type = _types.CLASS;
+        _this._constructed = true;
+        return _this;
+      }
+      __name(ClassName2, "ClassName");
+      var _proto = ClassName2.prototype;
+      _proto.valueToString = /* @__PURE__ */ __name(function valueToString() {
+        return "." + _Node.prototype.valueToString.call(this);
+      }, "valueToString");
+      _createClass(ClassName2, [{
+        key: "value",
+        get: /* @__PURE__ */ __name(function get() {
+          return this._value;
+        }, "get"),
+        set: /* @__PURE__ */ __name(function set(v) {
+          if (this._constructed) {
+            var escaped = (0, _cssesc["default"])(v, {
+              isIdentifier: true
+            });
+            if (escaped !== v) {
+              (0, _util.ensureObject)(this, "raws");
+              this.raws.value = escaped;
+            } else if (this.raws) {
+              delete this.raws.value;
+            }
+          }
+          this._value = v;
+        }, "set")
+      }]);
+      return ClassName2;
+    })(_node["default"]);
+    exports2["default"] = ClassName;
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/comment.js
+var require_comment = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/comment.js"(exports2, module2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = void 0;
+    var _node = _interopRequireDefault(require_node3());
+    var _types = require_types();
+    function _interopRequireDefault(obj) {
+      return obj && obj.__esModule ? obj : { "default": obj };
+    }
+    __name(_interopRequireDefault, "_interopRequireDefault");
+    function _inheritsLoose(subClass, superClass) {
+      subClass.prototype = Object.create(superClass.prototype);
+      subClass.prototype.constructor = subClass;
+      _setPrototypeOf(subClass, superClass);
+    }
+    __name(_inheritsLoose, "_inheritsLoose");
+    function _setPrototypeOf(o, p) {
+      _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : /* @__PURE__ */ __name(function _setPrototypeOf2(o2, p2) {
+        o2.__proto__ = p2;
+        return o2;
+      }, "_setPrototypeOf");
+      return _setPrototypeOf(o, p);
+    }
+    __name(_setPrototypeOf, "_setPrototypeOf");
+    var Comment = /* @__PURE__ */ (function(_Node) {
+      _inheritsLoose(Comment2, _Node);
+      function Comment2(opts) {
+        var _this;
+        _this = _Node.call(this, opts) || this;
+        _this.type = _types.COMMENT;
+        return _this;
+      }
+      __name(Comment2, "Comment");
+      return Comment2;
+    })(_node["default"]);
+    exports2["default"] = Comment;
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/id.js
+var require_id = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/id.js"(exports2, module2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = void 0;
+    var _node = _interopRequireDefault(require_node3());
+    var _types = require_types();
+    function _interopRequireDefault(obj) {
+      return obj && obj.__esModule ? obj : { "default": obj };
+    }
+    __name(_interopRequireDefault, "_interopRequireDefault");
+    function _inheritsLoose(subClass, superClass) {
+      subClass.prototype = Object.create(superClass.prototype);
+      subClass.prototype.constructor = subClass;
+      _setPrototypeOf(subClass, superClass);
+    }
+    __name(_inheritsLoose, "_inheritsLoose");
+    function _setPrototypeOf(o, p) {
+      _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : /* @__PURE__ */ __name(function _setPrototypeOf2(o2, p2) {
+        o2.__proto__ = p2;
+        return o2;
+      }, "_setPrototypeOf");
+      return _setPrototypeOf(o, p);
+    }
+    __name(_setPrototypeOf, "_setPrototypeOf");
+    var ID = /* @__PURE__ */ (function(_Node) {
+      _inheritsLoose(ID2, _Node);
+      function ID2(opts) {
+        var _this;
+        _this = _Node.call(this, opts) || this;
+        _this.type = _types.ID;
+        return _this;
+      }
+      __name(ID2, "ID");
+      var _proto = ID2.prototype;
+      _proto.valueToString = /* @__PURE__ */ __name(function valueToString() {
+        return "#" + _Node.prototype.valueToString.call(this);
+      }, "valueToString");
+      return ID2;
+    })(_node["default"]);
+    exports2["default"] = ID;
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/namespace.js
+var require_namespace = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/namespace.js"(exports2, module2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = void 0;
+    var _cssesc = _interopRequireDefault(require_cssesc());
+    var _util = require_util3();
+    var _node = _interopRequireDefault(require_node3());
+    function _interopRequireDefault(obj) {
+      return obj && obj.__esModule ? obj : { "default": obj };
+    }
+    __name(_interopRequireDefault, "_interopRequireDefault");
+    function _defineProperties(target, props) {
+      for (var i = 0; i < props.length; i++) {
+        var descriptor = props[i];
+        descriptor.enumerable = descriptor.enumerable || false;
+        descriptor.configurable = true;
+        if ("value" in descriptor) descriptor.writable = true;
+        Object.defineProperty(target, descriptor.key, descriptor);
+      }
+    }
+    __name(_defineProperties, "_defineProperties");
+    function _createClass(Constructor, protoProps, staticProps) {
+      if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+      if (staticProps) _defineProperties(Constructor, staticProps);
+      Object.defineProperty(Constructor, "prototype", { writable: false });
+      return Constructor;
+    }
+    __name(_createClass, "_createClass");
+    function _inheritsLoose(subClass, superClass) {
+      subClass.prototype = Object.create(superClass.prototype);
+      subClass.prototype.constructor = subClass;
+      _setPrototypeOf(subClass, superClass);
+    }
+    __name(_inheritsLoose, "_inheritsLoose");
+    function _setPrototypeOf(o, p) {
+      _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : /* @__PURE__ */ __name(function _setPrototypeOf2(o2, p2) {
+        o2.__proto__ = p2;
+        return o2;
+      }, "_setPrototypeOf");
+      return _setPrototypeOf(o, p);
+    }
+    __name(_setPrototypeOf, "_setPrototypeOf");
+    var Namespace = /* @__PURE__ */ (function(_Node) {
+      _inheritsLoose(Namespace2, _Node);
+      function Namespace2() {
+        return _Node.apply(this, arguments) || this;
+      }
+      __name(Namespace2, "Namespace");
+      var _proto = Namespace2.prototype;
+      _proto.qualifiedName = /* @__PURE__ */ __name(function qualifiedName(value) {
+        if (this.namespace) {
+          return this.namespaceString + "|" + value;
+        } else {
+          return value;
+        }
+      }, "qualifiedName");
+      _proto.valueToString = /* @__PURE__ */ __name(function valueToString() {
+        return this.qualifiedName(_Node.prototype.valueToString.call(this));
+      }, "valueToString");
+      _createClass(Namespace2, [{
+        key: "namespace",
+        get: /* @__PURE__ */ __name(function get() {
+          return this._namespace;
+        }, "get"),
+        set: /* @__PURE__ */ __name(function set(namespace) {
+          if (namespace === true || namespace === "*" || namespace === "&") {
+            this._namespace = namespace;
+            if (this.raws) {
+              delete this.raws.namespace;
+            }
+            return;
+          }
+          var escaped = (0, _cssesc["default"])(namespace, {
+            isIdentifier: true
+          });
+          this._namespace = namespace;
+          if (escaped !== namespace) {
+            (0, _util.ensureObject)(this, "raws");
+            this.raws.namespace = escaped;
+          } else if (this.raws) {
+            delete this.raws.namespace;
+          }
+        }, "set")
+      }, {
+        key: "ns",
+        get: /* @__PURE__ */ __name(function get() {
+          return this._namespace;
+        }, "get"),
+        set: /* @__PURE__ */ __name(function set(namespace) {
+          this.namespace = namespace;
+        }, "set")
+      }, {
+        key: "namespaceString",
+        get: /* @__PURE__ */ __name(function get() {
+          if (this.namespace) {
+            var ns = this.stringifyProperty("namespace");
+            if (ns === true) {
+              return "";
+            } else {
+              return ns;
+            }
+          } else {
+            return "";
+          }
+        }, "get")
+      }]);
+      return Namespace2;
+    })(_node["default"]);
+    exports2["default"] = Namespace;
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/tag.js
+var require_tag2 = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/tag.js"(exports2, module2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = void 0;
+    var _namespace = _interopRequireDefault(require_namespace());
+    var _types = require_types();
+    function _interopRequireDefault(obj) {
+      return obj && obj.__esModule ? obj : { "default": obj };
+    }
+    __name(_interopRequireDefault, "_interopRequireDefault");
+    function _inheritsLoose(subClass, superClass) {
+      subClass.prototype = Object.create(superClass.prototype);
+      subClass.prototype.constructor = subClass;
+      _setPrototypeOf(subClass, superClass);
+    }
+    __name(_inheritsLoose, "_inheritsLoose");
+    function _setPrototypeOf(o, p) {
+      _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : /* @__PURE__ */ __name(function _setPrototypeOf2(o2, p2) {
+        o2.__proto__ = p2;
+        return o2;
+      }, "_setPrototypeOf");
+      return _setPrototypeOf(o, p);
+    }
+    __name(_setPrototypeOf, "_setPrototypeOf");
+    var Tag = /* @__PURE__ */ (function(_Namespace) {
+      _inheritsLoose(Tag2, _Namespace);
+      function Tag2(opts) {
+        var _this;
+        _this = _Namespace.call(this, opts) || this;
+        _this.type = _types.TAG;
+        return _this;
+      }
+      __name(Tag2, "Tag");
+      return Tag2;
+    })(_namespace["default"]);
+    exports2["default"] = Tag;
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/string.js
+var require_string = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/string.js"(exports2, module2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = void 0;
+    var _node = _interopRequireDefault(require_node3());
+    var _types = require_types();
+    function _interopRequireDefault(obj) {
+      return obj && obj.__esModule ? obj : { "default": obj };
+    }
+    __name(_interopRequireDefault, "_interopRequireDefault");
+    function _inheritsLoose(subClass, superClass) {
+      subClass.prototype = Object.create(superClass.prototype);
+      subClass.prototype.constructor = subClass;
+      _setPrototypeOf(subClass, superClass);
+    }
+    __name(_inheritsLoose, "_inheritsLoose");
+    function _setPrototypeOf(o, p) {
+      _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : /* @__PURE__ */ __name(function _setPrototypeOf2(o2, p2) {
+        o2.__proto__ = p2;
+        return o2;
+      }, "_setPrototypeOf");
+      return _setPrototypeOf(o, p);
+    }
+    __name(_setPrototypeOf, "_setPrototypeOf");
+    var String2 = /* @__PURE__ */ (function(_Node) {
+      _inheritsLoose(String3, _Node);
+      function String3(opts) {
+        var _this;
+        _this = _Node.call(this, opts) || this;
+        _this.type = _types.STRING;
+        return _this;
+      }
+      __name(String3, "String");
+      return String3;
+    })(_node["default"]);
+    exports2["default"] = String2;
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/pseudo.js
+var require_pseudo = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/pseudo.js"(exports2, module2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = void 0;
+    var _container = _interopRequireDefault(require_container());
+    var _types = require_types();
+    function _interopRequireDefault(obj) {
+      return obj && obj.__esModule ? obj : { "default": obj };
+    }
+    __name(_interopRequireDefault, "_interopRequireDefault");
+    function _inheritsLoose(subClass, superClass) {
+      subClass.prototype = Object.create(superClass.prototype);
+      subClass.prototype.constructor = subClass;
+      _setPrototypeOf(subClass, superClass);
+    }
+    __name(_inheritsLoose, "_inheritsLoose");
+    function _setPrototypeOf(o, p) {
+      _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : /* @__PURE__ */ __name(function _setPrototypeOf2(o2, p2) {
+        o2.__proto__ = p2;
+        return o2;
+      }, "_setPrototypeOf");
+      return _setPrototypeOf(o, p);
+    }
+    __name(_setPrototypeOf, "_setPrototypeOf");
+    var Pseudo = /* @__PURE__ */ (function(_Container) {
+      _inheritsLoose(Pseudo2, _Container);
+      function Pseudo2(opts) {
+        var _this;
+        _this = _Container.call(this, opts) || this;
+        _this.type = _types.PSEUDO;
+        return _this;
+      }
+      __name(Pseudo2, "Pseudo");
+      var _proto = Pseudo2.prototype;
+      _proto.toString = /* @__PURE__ */ __name(function toString() {
+        var params = this.length ? "(" + this.map(String).join(",") + ")" : "";
+        return [this.rawSpaceBefore, this.stringifyProperty("value"), params, this.rawSpaceAfter].join("");
+      }, "toString");
+      return Pseudo2;
+    })(_container["default"]);
+    exports2["default"] = Pseudo;
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/util-deprecate@1.0.2/node_modules/util-deprecate/node.js
+var require_node4 = __commonJS({
+  "node_modules/.pnpm/util-deprecate@1.0.2/node_modules/util-deprecate/node.js"(exports2, module2) {
+    module2.exports = require("util").deprecate;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/attribute.js
+var require_attribute = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/attribute.js"(exports2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = void 0;
+    exports2.unescapeValue = unescapeValue;
+    var _cssesc = _interopRequireDefault(require_cssesc());
+    var _unesc = _interopRequireDefault(require_unesc());
+    var _namespace = _interopRequireDefault(require_namespace());
+    var _types = require_types();
+    var _CSSESC_QUOTE_OPTIONS;
+    function _interopRequireDefault(obj) {
+      return obj && obj.__esModule ? obj : { "default": obj };
+    }
+    __name(_interopRequireDefault, "_interopRequireDefault");
+    function _defineProperties(target, props) {
+      for (var i = 0; i < props.length; i++) {
+        var descriptor = props[i];
+        descriptor.enumerable = descriptor.enumerable || false;
+        descriptor.configurable = true;
+        if ("value" in descriptor) descriptor.writable = true;
+        Object.defineProperty(target, descriptor.key, descriptor);
+      }
+    }
+    __name(_defineProperties, "_defineProperties");
+    function _createClass(Constructor, protoProps, staticProps) {
+      if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+      if (staticProps) _defineProperties(Constructor, staticProps);
+      Object.defineProperty(Constructor, "prototype", { writable: false });
+      return Constructor;
+    }
+    __name(_createClass, "_createClass");
+    function _inheritsLoose(subClass, superClass) {
+      subClass.prototype = Object.create(superClass.prototype);
+      subClass.prototype.constructor = subClass;
+      _setPrototypeOf(subClass, superClass);
+    }
+    __name(_inheritsLoose, "_inheritsLoose");
+    function _setPrototypeOf(o, p) {
+      _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : /* @__PURE__ */ __name(function _setPrototypeOf2(o2, p2) {
+        o2.__proto__ = p2;
+        return o2;
+      }, "_setPrototypeOf");
+      return _setPrototypeOf(o, p);
+    }
+    __name(_setPrototypeOf, "_setPrototypeOf");
+    var deprecate = require_node4();
+    var WRAPPED_IN_QUOTES = /^('|")([^]*)\1$/;
+    var warnOfDeprecatedValueAssignment = deprecate(function() {
+    }, "Assigning an attribute a value containing characters that might need to be escaped is deprecated. Call attribute.setValue() instead.");
+    var warnOfDeprecatedQuotedAssignment = deprecate(function() {
+    }, "Assigning attr.quoted is deprecated and has no effect. Assign to attr.quoteMark instead.");
+    var warnOfDeprecatedConstructor = deprecate(function() {
+    }, "Constructing an Attribute selector with a value without specifying quoteMark is deprecated. Note: The value should be unescaped now.");
+    function unescapeValue(value) {
+      var deprecatedUsage = false;
+      var quoteMark = null;
+      var unescaped = value;
+      var m = unescaped.match(WRAPPED_IN_QUOTES);
+      if (m) {
+        quoteMark = m[1];
+        unescaped = m[2];
+      }
+      unescaped = (0, _unesc["default"])(unescaped);
+      if (unescaped !== value) {
+        deprecatedUsage = true;
+      }
+      return {
+        deprecatedUsage,
+        unescaped,
+        quoteMark
+      };
+    }
+    __name(unescapeValue, "unescapeValue");
+    function handleDeprecatedContructorOpts(opts) {
+      if (opts.quoteMark !== void 0) {
+        return opts;
+      }
+      if (opts.value === void 0) {
+        return opts;
+      }
+      warnOfDeprecatedConstructor();
+      var _unescapeValue = unescapeValue(opts.value), quoteMark = _unescapeValue.quoteMark, unescaped = _unescapeValue.unescaped;
+      if (!opts.raws) {
+        opts.raws = {};
+      }
+      if (opts.raws.value === void 0) {
+        opts.raws.value = opts.value;
+      }
+      opts.value = unescaped;
+      opts.quoteMark = quoteMark;
+      return opts;
+    }
+    __name(handleDeprecatedContructorOpts, "handleDeprecatedContructorOpts");
+    var Attribute = /* @__PURE__ */ (function(_Namespace) {
+      _inheritsLoose(Attribute2, _Namespace);
+      function Attribute2(opts) {
+        var _this;
+        if (opts === void 0) {
+          opts = {};
+        }
+        _this = _Namespace.call(this, handleDeprecatedContructorOpts(opts)) || this;
+        _this.type = _types.ATTRIBUTE;
+        _this.raws = _this.raws || {};
+        Object.defineProperty(_this.raws, "unquoted", {
+          get: deprecate(function() {
+            return _this.value;
+          }, "attr.raws.unquoted is deprecated. Call attr.value instead."),
+          set: deprecate(function() {
+            return _this.value;
+          }, "Setting attr.raws.unquoted is deprecated and has no effect. attr.value is unescaped by default now.")
+        });
+        _this._constructed = true;
+        return _this;
+      }
+      __name(Attribute2, "Attribute");
+      var _proto = Attribute2.prototype;
+      _proto.getQuotedValue = /* @__PURE__ */ __name(function getQuotedValue(options) {
+        if (options === void 0) {
+          options = {};
+        }
+        var quoteMark = this._determineQuoteMark(options);
+        var cssescopts = CSSESC_QUOTE_OPTIONS[quoteMark];
+        var escaped = (0, _cssesc["default"])(this._value, cssescopts);
+        return escaped;
+      }, "getQuotedValue");
+      _proto._determineQuoteMark = /* @__PURE__ */ __name(function _determineQuoteMark(options) {
+        return options.smart ? this.smartQuoteMark(options) : this.preferredQuoteMark(options);
+      }, "_determineQuoteMark");
+      _proto.setValue = /* @__PURE__ */ __name(function setValue(value, options) {
+        if (options === void 0) {
+          options = {};
+        }
+        this._value = value;
+        this._quoteMark = this._determineQuoteMark(options);
+        this._syncRawValue();
+      }, "setValue");
+      _proto.smartQuoteMark = /* @__PURE__ */ __name(function smartQuoteMark(options) {
+        var v = this.value;
+        var numSingleQuotes = v.replace(/[^']/g, "").length;
+        var numDoubleQuotes = v.replace(/[^"]/g, "").length;
+        if (numSingleQuotes + numDoubleQuotes === 0) {
+          var escaped = (0, _cssesc["default"])(v, {
+            isIdentifier: true
+          });
+          if (escaped === v) {
+            return Attribute2.NO_QUOTE;
+          } else {
+            var pref = this.preferredQuoteMark(options);
+            if (pref === Attribute2.NO_QUOTE) {
+              var quote = this.quoteMark || options.quoteMark || Attribute2.DOUBLE_QUOTE;
+              var opts = CSSESC_QUOTE_OPTIONS[quote];
+              var quoteValue = (0, _cssesc["default"])(v, opts);
+              if (quoteValue.length < escaped.length) {
+                return quote;
+              }
+            }
+            return pref;
+          }
+        } else if (numDoubleQuotes === numSingleQuotes) {
+          return this.preferredQuoteMark(options);
+        } else if (numDoubleQuotes < numSingleQuotes) {
+          return Attribute2.DOUBLE_QUOTE;
+        } else {
+          return Attribute2.SINGLE_QUOTE;
+        }
+      }, "smartQuoteMark");
+      _proto.preferredQuoteMark = /* @__PURE__ */ __name(function preferredQuoteMark(options) {
+        var quoteMark = options.preferCurrentQuoteMark ? this.quoteMark : options.quoteMark;
+        if (quoteMark === void 0) {
+          quoteMark = options.preferCurrentQuoteMark ? options.quoteMark : this.quoteMark;
+        }
+        if (quoteMark === void 0) {
+          quoteMark = Attribute2.DOUBLE_QUOTE;
+        }
+        return quoteMark;
+      }, "preferredQuoteMark");
+      _proto._syncRawValue = /* @__PURE__ */ __name(function _syncRawValue() {
+        var rawValue = (0, _cssesc["default"])(this._value, CSSESC_QUOTE_OPTIONS[this.quoteMark]);
+        if (rawValue === this._value) {
+          if (this.raws) {
+            delete this.raws.value;
+          }
+        } else {
+          this.raws.value = rawValue;
+        }
+      }, "_syncRawValue");
+      _proto._handleEscapes = /* @__PURE__ */ __name(function _handleEscapes(prop, value) {
+        if (this._constructed) {
+          var escaped = (0, _cssesc["default"])(value, {
+            isIdentifier: true
+          });
+          if (escaped !== value) {
+            this.raws[prop] = escaped;
+          } else {
+            delete this.raws[prop];
+          }
+        }
+      }, "_handleEscapes");
+      _proto._spacesFor = /* @__PURE__ */ __name(function _spacesFor(name) {
+        var attrSpaces = {
+          before: "",
+          after: ""
+        };
+        var spaces = this.spaces[name] || {};
+        var rawSpaces = this.raws.spaces && this.raws.spaces[name] || {};
+        return Object.assign(attrSpaces, spaces, rawSpaces);
+      }, "_spacesFor");
+      _proto._stringFor = /* @__PURE__ */ __name(function _stringFor(name, spaceName, concat) {
+        if (spaceName === void 0) {
+          spaceName = name;
+        }
+        if (concat === void 0) {
+          concat = defaultAttrConcat;
+        }
+        var attrSpaces = this._spacesFor(spaceName);
+        return concat(this.stringifyProperty(name), attrSpaces);
+      }, "_stringFor");
+      _proto.offsetOf = /* @__PURE__ */ __name(function offsetOf(name) {
+        var count = 1;
+        var attributeSpaces = this._spacesFor("attribute");
+        count += attributeSpaces.before.length;
+        if (name === "namespace" || name === "ns") {
+          return this.namespace ? count : -1;
+        }
+        if (name === "attributeNS") {
+          return count;
+        }
+        count += this.namespaceString.length;
+        if (this.namespace) {
+          count += 1;
+        }
+        if (name === "attribute") {
+          return count;
+        }
+        count += this.stringifyProperty("attribute").length;
+        count += attributeSpaces.after.length;
+        var operatorSpaces = this._spacesFor("operator");
+        count += operatorSpaces.before.length;
+        var operator = this.stringifyProperty("operator");
+        if (name === "operator") {
+          return operator ? count : -1;
+        }
+        count += operator.length;
+        count += operatorSpaces.after.length;
+        var valueSpaces = this._spacesFor("value");
+        count += valueSpaces.before.length;
+        var value = this.stringifyProperty("value");
+        if (name === "value") {
+          return value ? count : -1;
+        }
+        count += value.length;
+        count += valueSpaces.after.length;
+        var insensitiveSpaces = this._spacesFor("insensitive");
+        count += insensitiveSpaces.before.length;
+        if (name === "insensitive") {
+          return this.insensitive ? count : -1;
+        }
+        return -1;
+      }, "offsetOf");
+      _proto.toString = /* @__PURE__ */ __name(function toString() {
+        var _this2 = this;
+        var selector = [this.rawSpaceBefore, "["];
+        selector.push(this._stringFor("qualifiedAttribute", "attribute"));
+        if (this.operator && (this.value || this.value === "")) {
+          selector.push(this._stringFor("operator"));
+          selector.push(this._stringFor("value"));
+          selector.push(this._stringFor("insensitiveFlag", "insensitive", function(attrValue, attrSpaces) {
+            if (attrValue.length > 0 && !_this2.quoted && attrSpaces.before.length === 0 && !(_this2.spaces.value && _this2.spaces.value.after)) {
+              attrSpaces.before = " ";
+            }
+            return defaultAttrConcat(attrValue, attrSpaces);
+          }));
+        }
+        selector.push("]");
+        selector.push(this.rawSpaceAfter);
+        return selector.join("");
+      }, "toString");
+      _createClass(Attribute2, [{
+        key: "quoted",
+        get: /* @__PURE__ */ __name(function get() {
+          var qm = this.quoteMark;
+          return qm === "'" || qm === '"';
+        }, "get"),
+        set: /* @__PURE__ */ __name(function set(value) {
+          warnOfDeprecatedQuotedAssignment();
+        }, "set")
+        /**
+         * returns a single (`'`) or double (`"`) quote character if the value is quoted.
+         * returns `null` if the value is not quoted.
+         * returns `undefined` if the quotation state is unknown (this can happen when
+         * the attribute is constructed without specifying a quote mark.)
+         */
+      }, {
+        key: "quoteMark",
+        get: /* @__PURE__ */ __name(function get() {
+          return this._quoteMark;
+        }, "get"),
+        set: /* @__PURE__ */ __name(function set(quoteMark) {
+          if (!this._constructed) {
+            this._quoteMark = quoteMark;
+            return;
+          }
+          if (this._quoteMark !== quoteMark) {
+            this._quoteMark = quoteMark;
+            this._syncRawValue();
+          }
+        }, "set")
+      }, {
+        key: "qualifiedAttribute",
+        get: /* @__PURE__ */ __name(function get() {
+          return this.qualifiedName(this.raws.attribute || this.attribute);
+        }, "get")
+      }, {
+        key: "insensitiveFlag",
+        get: /* @__PURE__ */ __name(function get() {
+          return this.insensitive ? "i" : "";
+        }, "get")
+      }, {
+        key: "value",
+        get: /* @__PURE__ */ __name(function get() {
+          return this._value;
+        }, "get"),
+        set: (
+          /**
+           * Before 3.0, the value had to be set to an escaped value including any wrapped
+           * quote marks. In 3.0, the semantics of `Attribute.value` changed so that the value
+           * is unescaped during parsing and any quote marks are removed.
+           *
+           * Because the ambiguity of this semantic change, if you set `attr.value = newValue`,
+           * a deprecation warning is raised when the new value contains any characters that would
+           * require escaping (including if it contains wrapped quotes).
+           *
+           * Instead, you should call `attr.setValue(newValue, opts)` and pass options that describe
+           * how the new value is quoted.
+           */
+          /* @__PURE__ */ __name(function set(v) {
+            if (this._constructed) {
+              var _unescapeValue2 = unescapeValue(v), deprecatedUsage = _unescapeValue2.deprecatedUsage, unescaped = _unescapeValue2.unescaped, quoteMark = _unescapeValue2.quoteMark;
+              if (deprecatedUsage) {
+                warnOfDeprecatedValueAssignment();
+              }
+              if (unescaped === this._value && quoteMark === this._quoteMark) {
+                return;
+              }
+              this._value = unescaped;
+              this._quoteMark = quoteMark;
+              this._syncRawValue();
+            } else {
+              this._value = v;
+            }
+          }, "set")
+        )
+      }, {
+        key: "insensitive",
+        get: /* @__PURE__ */ __name(function get() {
+          return this._insensitive;
+        }, "get"),
+        set: /* @__PURE__ */ __name(function set(insensitive) {
+          if (!insensitive) {
+            this._insensitive = false;
+            if (this.raws && (this.raws.insensitiveFlag === "I" || this.raws.insensitiveFlag === "i")) {
+              this.raws.insensitiveFlag = void 0;
+            }
+          }
+          this._insensitive = insensitive;
+        }, "set")
+      }, {
+        key: "attribute",
+        get: /* @__PURE__ */ __name(function get() {
+          return this._attribute;
+        }, "get"),
+        set: /* @__PURE__ */ __name(function set(name) {
+          this._handleEscapes("attribute", name);
+          this._attribute = name;
+        }, "set")
+      }]);
+      return Attribute2;
+    })(_namespace["default"]);
+    exports2["default"] = Attribute;
+    Attribute.NO_QUOTE = null;
+    Attribute.SINGLE_QUOTE = "'";
+    Attribute.DOUBLE_QUOTE = '"';
+    var CSSESC_QUOTE_OPTIONS = (_CSSESC_QUOTE_OPTIONS = {
+      "'": {
+        quotes: "single",
+        wrap: true
+      },
+      '"': {
+        quotes: "double",
+        wrap: true
+      }
+    }, _CSSESC_QUOTE_OPTIONS[null] = {
+      isIdentifier: true
+    }, _CSSESC_QUOTE_OPTIONS);
+    function defaultAttrConcat(attrValue, attrSpaces) {
+      return "" + attrSpaces.before + attrValue + attrSpaces.after;
+    }
+    __name(defaultAttrConcat, "defaultAttrConcat");
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/universal.js
+var require_universal = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/universal.js"(exports2, module2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = void 0;
+    var _namespace = _interopRequireDefault(require_namespace());
+    var _types = require_types();
+    function _interopRequireDefault(obj) {
+      return obj && obj.__esModule ? obj : { "default": obj };
+    }
+    __name(_interopRequireDefault, "_interopRequireDefault");
+    function _inheritsLoose(subClass, superClass) {
+      subClass.prototype = Object.create(superClass.prototype);
+      subClass.prototype.constructor = subClass;
+      _setPrototypeOf(subClass, superClass);
+    }
+    __name(_inheritsLoose, "_inheritsLoose");
+    function _setPrototypeOf(o, p) {
+      _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : /* @__PURE__ */ __name(function _setPrototypeOf2(o2, p2) {
+        o2.__proto__ = p2;
+        return o2;
+      }, "_setPrototypeOf");
+      return _setPrototypeOf(o, p);
+    }
+    __name(_setPrototypeOf, "_setPrototypeOf");
+    var Universal = /* @__PURE__ */ (function(_Namespace) {
+      _inheritsLoose(Universal2, _Namespace);
+      function Universal2(opts) {
+        var _this;
+        _this = _Namespace.call(this, opts) || this;
+        _this.type = _types.UNIVERSAL;
+        _this.value = "*";
+        return _this;
+      }
+      __name(Universal2, "Universal");
+      return Universal2;
+    })(_namespace["default"]);
+    exports2["default"] = Universal;
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/combinator.js
+var require_combinator = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/combinator.js"(exports2, module2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = void 0;
+    var _node = _interopRequireDefault(require_node3());
+    var _types = require_types();
+    function _interopRequireDefault(obj) {
+      return obj && obj.__esModule ? obj : { "default": obj };
+    }
+    __name(_interopRequireDefault, "_interopRequireDefault");
+    function _inheritsLoose(subClass, superClass) {
+      subClass.prototype = Object.create(superClass.prototype);
+      subClass.prototype.constructor = subClass;
+      _setPrototypeOf(subClass, superClass);
+    }
+    __name(_inheritsLoose, "_inheritsLoose");
+    function _setPrototypeOf(o, p) {
+      _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : /* @__PURE__ */ __name(function _setPrototypeOf2(o2, p2) {
+        o2.__proto__ = p2;
+        return o2;
+      }, "_setPrototypeOf");
+      return _setPrototypeOf(o, p);
+    }
+    __name(_setPrototypeOf, "_setPrototypeOf");
+    var Combinator = /* @__PURE__ */ (function(_Node) {
+      _inheritsLoose(Combinator2, _Node);
+      function Combinator2(opts) {
+        var _this;
+        _this = _Node.call(this, opts) || this;
+        _this.type = _types.COMBINATOR;
+        return _this;
+      }
+      __name(Combinator2, "Combinator");
+      return Combinator2;
+    })(_node["default"]);
+    exports2["default"] = Combinator;
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/nesting.js
+var require_nesting = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/nesting.js"(exports2, module2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = void 0;
+    var _node = _interopRequireDefault(require_node3());
+    var _types = require_types();
+    function _interopRequireDefault(obj) {
+      return obj && obj.__esModule ? obj : { "default": obj };
+    }
+    __name(_interopRequireDefault, "_interopRequireDefault");
+    function _inheritsLoose(subClass, superClass) {
+      subClass.prototype = Object.create(superClass.prototype);
+      subClass.prototype.constructor = subClass;
+      _setPrototypeOf(subClass, superClass);
+    }
+    __name(_inheritsLoose, "_inheritsLoose");
+    function _setPrototypeOf(o, p) {
+      _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : /* @__PURE__ */ __name(function _setPrototypeOf2(o2, p2) {
+        o2.__proto__ = p2;
+        return o2;
+      }, "_setPrototypeOf");
+      return _setPrototypeOf(o, p);
+    }
+    __name(_setPrototypeOf, "_setPrototypeOf");
+    var Nesting = /* @__PURE__ */ (function(_Node) {
+      _inheritsLoose(Nesting2, _Node);
+      function Nesting2(opts) {
+        var _this;
+        _this = _Node.call(this, opts) || this;
+        _this.type = _types.NESTING;
+        _this.value = "&";
+        return _this;
+      }
+      __name(Nesting2, "Nesting");
+      return Nesting2;
+    })(_node["default"]);
+    exports2["default"] = Nesting;
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/sortAscending.js
+var require_sortAscending = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/sortAscending.js"(exports2, module2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = sortAscending;
+    function sortAscending(list) {
+      return list.sort(function(a, b) {
+        return a - b;
+      });
+    }
+    __name(sortAscending, "sortAscending");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/tokenTypes.js
+var require_tokenTypes = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/tokenTypes.js"(exports2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2.word = exports2.tilde = exports2.tab = exports2.str = exports2.space = exports2.slash = exports2.singleQuote = exports2.semicolon = exports2.plus = exports2.pipe = exports2.openSquare = exports2.openParenthesis = exports2.newline = exports2.greaterThan = exports2.feed = exports2.equals = exports2.doubleQuote = exports2.dollar = exports2.cr = exports2.comment = exports2.comma = exports2.combinator = exports2.colon = exports2.closeSquare = exports2.closeParenthesis = exports2.caret = exports2.bang = exports2.backslash = exports2.at = exports2.asterisk = exports2.ampersand = void 0;
+    var ampersand = 38;
+    exports2.ampersand = ampersand;
+    var asterisk = 42;
+    exports2.asterisk = asterisk;
+    var at = 64;
+    exports2.at = at;
+    var comma = 44;
+    exports2.comma = comma;
+    var colon = 58;
+    exports2.colon = colon;
+    var semicolon = 59;
+    exports2.semicolon = semicolon;
+    var openParenthesis = 40;
+    exports2.openParenthesis = openParenthesis;
+    var closeParenthesis = 41;
+    exports2.closeParenthesis = closeParenthesis;
+    var openSquare = 91;
+    exports2.openSquare = openSquare;
+    var closeSquare = 93;
+    exports2.closeSquare = closeSquare;
+    var dollar = 36;
+    exports2.dollar = dollar;
+    var tilde = 126;
+    exports2.tilde = tilde;
+    var caret = 94;
+    exports2.caret = caret;
+    var plus = 43;
+    exports2.plus = plus;
+    var equals = 61;
+    exports2.equals = equals;
+    var pipe = 124;
+    exports2.pipe = pipe;
+    var greaterThan = 62;
+    exports2.greaterThan = greaterThan;
+    var space = 32;
+    exports2.space = space;
+    var singleQuote = 39;
+    exports2.singleQuote = singleQuote;
+    var doubleQuote = 34;
+    exports2.doubleQuote = doubleQuote;
+    var slash = 47;
+    exports2.slash = slash;
+    var bang = 33;
+    exports2.bang = bang;
+    var backslash = 92;
+    exports2.backslash = backslash;
+    var cr = 13;
+    exports2.cr = cr;
+    var feed = 12;
+    exports2.feed = feed;
+    var newline = 10;
+    exports2.newline = newline;
+    var tab = 9;
+    exports2.tab = tab;
+    var str = singleQuote;
+    exports2.str = str;
+    var comment = -1;
+    exports2.comment = comment;
+    var word = -2;
+    exports2.word = word;
+    var combinator = -3;
+    exports2.combinator = combinator;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/tokenize.js
+var require_tokenize = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/tokenize.js"(exports2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2.FIELDS = void 0;
+    exports2["default"] = tokenize;
+    var t = _interopRequireWildcard(require_tokenTypes());
+    var _unescapable;
+    var _wordDelimiters;
+    function _getRequireWildcardCache(nodeInterop) {
+      if (typeof WeakMap !== "function") return null;
+      var cacheBabelInterop = /* @__PURE__ */ new WeakMap();
+      var cacheNodeInterop = /* @__PURE__ */ new WeakMap();
+      return (_getRequireWildcardCache = /* @__PURE__ */ __name(function _getRequireWildcardCache2(nodeInterop2) {
+        return nodeInterop2 ? cacheNodeInterop : cacheBabelInterop;
+      }, "_getRequireWildcardCache"))(nodeInterop);
+    }
+    __name(_getRequireWildcardCache, "_getRequireWildcardCache");
+    function _interopRequireWildcard(obj, nodeInterop) {
+      if (!nodeInterop && obj && obj.__esModule) {
+        return obj;
+      }
+      if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
+        return { "default": obj };
+      }
+      var cache = _getRequireWildcardCache(nodeInterop);
+      if (cache && cache.has(obj)) {
+        return cache.get(obj);
+      }
+      var newObj = {};
+      var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
+      for (var key in obj) {
+        if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
+          var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
+          if (desc && (desc.get || desc.set)) {
+            Object.defineProperty(newObj, key, desc);
+          } else {
+            newObj[key] = obj[key];
+          }
+        }
+      }
+      newObj["default"] = obj;
+      if (cache) {
+        cache.set(obj, newObj);
+      }
+      return newObj;
+    }
+    __name(_interopRequireWildcard, "_interopRequireWildcard");
+    var unescapable = (_unescapable = {}, _unescapable[t.tab] = true, _unescapable[t.newline] = true, _unescapable[t.cr] = true, _unescapable[t.feed] = true, _unescapable);
+    var wordDelimiters = (_wordDelimiters = {}, _wordDelimiters[t.space] = true, _wordDelimiters[t.tab] = true, _wordDelimiters[t.newline] = true, _wordDelimiters[t.cr] = true, _wordDelimiters[t.feed] = true, _wordDelimiters[t.ampersand] = true, _wordDelimiters[t.asterisk] = true, _wordDelimiters[t.bang] = true, _wordDelimiters[t.comma] = true, _wordDelimiters[t.colon] = true, _wordDelimiters[t.semicolon] = true, _wordDelimiters[t.openParenthesis] = true, _wordDelimiters[t.closeParenthesis] = true, _wordDelimiters[t.openSquare] = true, _wordDelimiters[t.closeSquare] = true, _wordDelimiters[t.singleQuote] = true, _wordDelimiters[t.doubleQuote] = true, _wordDelimiters[t.plus] = true, _wordDelimiters[t.pipe] = true, _wordDelimiters[t.tilde] = true, _wordDelimiters[t.greaterThan] = true, _wordDelimiters[t.equals] = true, _wordDelimiters[t.dollar] = true, _wordDelimiters[t.caret] = true, _wordDelimiters[t.slash] = true, _wordDelimiters);
+    var hex = {};
+    var hexChars = "0123456789abcdefABCDEF";
+    for (i = 0; i < hexChars.length; i++) {
+      hex[hexChars.charCodeAt(i)] = true;
+    }
+    var i;
+    function consumeWord(css, start) {
+      var next = start;
+      var code;
+      do {
+        code = css.charCodeAt(next);
+        if (wordDelimiters[code]) {
+          return next - 1;
+        } else if (code === t.backslash) {
+          next = consumeEscape(css, next) + 1;
+        } else {
+          next++;
+        }
+      } while (next < css.length);
+      return next - 1;
+    }
+    __name(consumeWord, "consumeWord");
+    function consumeEscape(css, start) {
+      var next = start;
+      var code = css.charCodeAt(next + 1);
+      if (unescapable[code]) {
+      } else if (hex[code]) {
+        var hexDigits = 0;
+        do {
+          next++;
+          hexDigits++;
+          code = css.charCodeAt(next + 1);
+        } while (hex[code] && hexDigits < 6);
+        if (hexDigits < 6 && code === t.space) {
+          next++;
+        }
+      } else {
+        next++;
+      }
+      return next;
+    }
+    __name(consumeEscape, "consumeEscape");
+    var FIELDS = {
+      TYPE: 0,
+      START_LINE: 1,
+      START_COL: 2,
+      END_LINE: 3,
+      END_COL: 4,
+      START_POS: 5,
+      END_POS: 6
+    };
+    exports2.FIELDS = FIELDS;
+    function tokenize(input) {
+      var tokens = [];
+      var css = input.css.valueOf();
+      var _css = css, length = _css.length;
+      var offset = -1;
+      var line = 1;
+      var start = 0;
+      var end = 0;
+      var code, content, endColumn, endLine, escaped, escapePos, last, lines, next, nextLine, nextOffset, quote, tokenType;
+      function unclosed(what, fix) {
+        if (input.safe) {
+          css += fix;
+          next = css.length - 1;
+        } else {
+          throw input.error("Unclosed " + what, line, start - offset, start);
+        }
+      }
+      __name(unclosed, "unclosed");
+      while (start < length) {
+        code = css.charCodeAt(start);
+        if (code === t.newline) {
+          offset = start;
+          line += 1;
+        }
+        switch (code) {
+          case t.space:
+          case t.tab:
+          case t.newline:
+          case t.cr:
+          case t.feed:
+            next = start;
+            do {
+              next += 1;
+              code = css.charCodeAt(next);
+              if (code === t.newline) {
+                offset = next;
+                line += 1;
+              }
+            } while (code === t.space || code === t.newline || code === t.tab || code === t.cr || code === t.feed);
+            tokenType = t.space;
+            endLine = line;
+            endColumn = next - offset - 1;
+            end = next;
+            break;
+          case t.plus:
+          case t.greaterThan:
+          case t.tilde:
+          case t.pipe:
+            next = start;
+            do {
+              next += 1;
+              code = css.charCodeAt(next);
+            } while (code === t.plus || code === t.greaterThan || code === t.tilde || code === t.pipe);
+            tokenType = t.combinator;
+            endLine = line;
+            endColumn = start - offset;
+            end = next;
+            break;
+          // Consume these characters as single tokens.
+          case t.asterisk:
+          case t.ampersand:
+          case t.bang:
+          case t.comma:
+          case t.equals:
+          case t.dollar:
+          case t.caret:
+          case t.openSquare:
+          case t.closeSquare:
+          case t.colon:
+          case t.semicolon:
+          case t.openParenthesis:
+          case t.closeParenthesis:
+            next = start;
+            tokenType = code;
+            endLine = line;
+            endColumn = start - offset;
+            end = next + 1;
+            break;
+          case t.singleQuote:
+          case t.doubleQuote:
+            quote = code === t.singleQuote ? "'" : '"';
+            next = start;
+            do {
+              escaped = false;
+              next = css.indexOf(quote, next + 1);
+              if (next === -1) {
+                unclosed("quote", quote);
+              }
+              escapePos = next;
+              while (css.charCodeAt(escapePos - 1) === t.backslash) {
+                escapePos -= 1;
+                escaped = !escaped;
+              }
+            } while (escaped);
+            tokenType = t.str;
+            endLine = line;
+            endColumn = start - offset;
+            end = next + 1;
+            break;
+          default:
+            if (code === t.slash && css.charCodeAt(start + 1) === t.asterisk) {
+              next = css.indexOf("*/", start + 2) + 1;
+              if (next === 0) {
+                unclosed("comment", "*/");
+              }
+              content = css.slice(start, next + 1);
+              lines = content.split("\n");
+              last = lines.length - 1;
+              if (last > 0) {
+                nextLine = line + last;
+                nextOffset = next - lines[last].length;
+              } else {
+                nextLine = line;
+                nextOffset = offset;
+              }
+              tokenType = t.comment;
+              line = nextLine;
+              endLine = nextLine;
+              endColumn = next - nextOffset;
+            } else if (code === t.slash) {
+              next = start;
+              tokenType = code;
+              endLine = line;
+              endColumn = start - offset;
+              end = next + 1;
+            } else {
+              next = consumeWord(css, start);
+              tokenType = t.word;
+              endLine = line;
+              endColumn = next - offset;
+            }
+            end = next + 1;
+            break;
+        }
+        tokens.push([
+          tokenType,
+          // [0] Token type
+          line,
+          // [1] Starting line
+          start - offset,
+          // [2] Starting column
+          endLine,
+          // [3] Ending line
+          endColumn,
+          // [4] Ending column
+          start,
+          // [5] Start position / Source index
+          end
+          // [6] End position
+        ]);
+        if (nextOffset) {
+          offset = nextOffset;
+          nextOffset = null;
+        }
+        start = end;
+      }
+      return tokens;
+    }
+    __name(tokenize, "tokenize");
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/parser.js
+var require_parser = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/parser.js"(exports2, module2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = void 0;
+    var _root = _interopRequireDefault(require_root2());
+    var _selector = _interopRequireDefault(require_selector());
+    var _className = _interopRequireDefault(require_className());
+    var _comment = _interopRequireDefault(require_comment());
+    var _id = _interopRequireDefault(require_id());
+    var _tag = _interopRequireDefault(require_tag2());
+    var _string = _interopRequireDefault(require_string());
+    var _pseudo = _interopRequireDefault(require_pseudo());
+    var _attribute = _interopRequireWildcard(require_attribute());
+    var _universal = _interopRequireDefault(require_universal());
+    var _combinator = _interopRequireDefault(require_combinator());
+    var _nesting = _interopRequireDefault(require_nesting());
+    var _sortAscending = _interopRequireDefault(require_sortAscending());
+    var _tokenize = _interopRequireWildcard(require_tokenize());
+    var tokens = _interopRequireWildcard(require_tokenTypes());
+    var types = _interopRequireWildcard(require_types());
+    var _util = require_util3();
+    var _WHITESPACE_TOKENS;
+    var _Object$assign;
+    function _getRequireWildcardCache(nodeInterop) {
+      if (typeof WeakMap !== "function") return null;
+      var cacheBabelInterop = /* @__PURE__ */ new WeakMap();
+      var cacheNodeInterop = /* @__PURE__ */ new WeakMap();
+      return (_getRequireWildcardCache = /* @__PURE__ */ __name(function _getRequireWildcardCache2(nodeInterop2) {
+        return nodeInterop2 ? cacheNodeInterop : cacheBabelInterop;
+      }, "_getRequireWildcardCache"))(nodeInterop);
+    }
+    __name(_getRequireWildcardCache, "_getRequireWildcardCache");
+    function _interopRequireWildcard(obj, nodeInterop) {
+      if (!nodeInterop && obj && obj.__esModule) {
+        return obj;
+      }
+      if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
+        return { "default": obj };
+      }
+      var cache = _getRequireWildcardCache(nodeInterop);
+      if (cache && cache.has(obj)) {
+        return cache.get(obj);
+      }
+      var newObj = {};
+      var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
+      for (var key in obj) {
+        if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
+          var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
+          if (desc && (desc.get || desc.set)) {
+            Object.defineProperty(newObj, key, desc);
+          } else {
+            newObj[key] = obj[key];
+          }
+        }
+      }
+      newObj["default"] = obj;
+      if (cache) {
+        cache.set(obj, newObj);
+      }
+      return newObj;
+    }
+    __name(_interopRequireWildcard, "_interopRequireWildcard");
+    function _interopRequireDefault(obj) {
+      return obj && obj.__esModule ? obj : { "default": obj };
+    }
+    __name(_interopRequireDefault, "_interopRequireDefault");
+    function _defineProperties(target, props) {
+      for (var i = 0; i < props.length; i++) {
+        var descriptor = props[i];
+        descriptor.enumerable = descriptor.enumerable || false;
+        descriptor.configurable = true;
+        if ("value" in descriptor) descriptor.writable = true;
+        Object.defineProperty(target, descriptor.key, descriptor);
+      }
+    }
+    __name(_defineProperties, "_defineProperties");
+    function _createClass(Constructor, protoProps, staticProps) {
+      if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+      if (staticProps) _defineProperties(Constructor, staticProps);
+      Object.defineProperty(Constructor, "prototype", { writable: false });
+      return Constructor;
+    }
+    __name(_createClass, "_createClass");
+    var WHITESPACE_TOKENS = (_WHITESPACE_TOKENS = {}, _WHITESPACE_TOKENS[tokens.space] = true, _WHITESPACE_TOKENS[tokens.cr] = true, _WHITESPACE_TOKENS[tokens.feed] = true, _WHITESPACE_TOKENS[tokens.newline] = true, _WHITESPACE_TOKENS[tokens.tab] = true, _WHITESPACE_TOKENS);
+    var WHITESPACE_EQUIV_TOKENS = Object.assign({}, WHITESPACE_TOKENS, (_Object$assign = {}, _Object$assign[tokens.comment] = true, _Object$assign));
+    function tokenStart(token) {
+      return {
+        line: token[_tokenize.FIELDS.START_LINE],
+        column: token[_tokenize.FIELDS.START_COL]
+      };
+    }
+    __name(tokenStart, "tokenStart");
+    function tokenEnd(token) {
+      return {
+        line: token[_tokenize.FIELDS.END_LINE],
+        column: token[_tokenize.FIELDS.END_COL]
+      };
+    }
+    __name(tokenEnd, "tokenEnd");
+    function getSource(startLine, startColumn, endLine, endColumn) {
+      return {
+        start: {
+          line: startLine,
+          column: startColumn
+        },
+        end: {
+          line: endLine,
+          column: endColumn
+        }
+      };
+    }
+    __name(getSource, "getSource");
+    function getTokenSource(token) {
+      return getSource(token[_tokenize.FIELDS.START_LINE], token[_tokenize.FIELDS.START_COL], token[_tokenize.FIELDS.END_LINE], token[_tokenize.FIELDS.END_COL]);
+    }
+    __name(getTokenSource, "getTokenSource");
+    function getTokenSourceSpan(startToken, endToken) {
+      if (!startToken) {
+        return void 0;
+      }
+      return getSource(startToken[_tokenize.FIELDS.START_LINE], startToken[_tokenize.FIELDS.START_COL], endToken[_tokenize.FIELDS.END_LINE], endToken[_tokenize.FIELDS.END_COL]);
+    }
+    __name(getTokenSourceSpan, "getTokenSourceSpan");
+    function unescapeProp(node, prop) {
+      var value = node[prop];
+      if (typeof value !== "string") {
+        return;
+      }
+      if (value.indexOf("\\") !== -1) {
+        (0, _util.ensureObject)(node, "raws");
+        node[prop] = (0, _util.unesc)(value);
+        if (node.raws[prop] === void 0) {
+          node.raws[prop] = value;
+        }
+      }
+      return node;
+    }
+    __name(unescapeProp, "unescapeProp");
+    function indexesOf(array, item) {
+      var i = -1;
+      var indexes = [];
+      while ((i = array.indexOf(item, i + 1)) !== -1) {
+        indexes.push(i);
+      }
+      return indexes;
+    }
+    __name(indexesOf, "indexesOf");
+    function uniqs() {
+      var list = Array.prototype.concat.apply([], arguments);
+      return list.filter(function(item, i) {
+        return i === list.indexOf(item);
+      });
+    }
+    __name(uniqs, "uniqs");
+    var Parser = /* @__PURE__ */ (function() {
+      function Parser2(rule, options) {
+        if (options === void 0) {
+          options = {};
+        }
+        this.rule = rule;
+        this.options = Object.assign({
+          lossy: false,
+          safe: false
+        }, options);
+        this.position = 0;
+        this.css = typeof this.rule === "string" ? this.rule : this.rule.selector;
+        this.tokens = (0, _tokenize["default"])({
+          css: this.css,
+          error: this._errorGenerator(),
+          safe: this.options.safe
+        });
+        var rootSource = getTokenSourceSpan(this.tokens[0], this.tokens[this.tokens.length - 1]);
+        this.root = new _root["default"]({
+          source: rootSource
+        });
+        this.root.errorGenerator = this._errorGenerator();
+        var selector = new _selector["default"]({
+          source: {
+            start: {
+              line: 1,
+              column: 1
+            }
+          },
+          sourceIndex: 0
+        });
+        this.root.append(selector);
+        this.current = selector;
+        this.loop();
+      }
+      __name(Parser2, "Parser");
+      var _proto = Parser2.prototype;
+      _proto._errorGenerator = /* @__PURE__ */ __name(function _errorGenerator() {
+        var _this = this;
+        return function(message, errorOptions) {
+          if (typeof _this.rule === "string") {
+            return new Error(message);
+          }
+          return _this.rule.error(message, errorOptions);
+        };
+      }, "_errorGenerator");
+      _proto.attribute = /* @__PURE__ */ __name(function attribute() {
+        var attr = [];
+        var startingToken = this.currToken;
+        this.position++;
+        while (this.position < this.tokens.length && this.currToken[_tokenize.FIELDS.TYPE] !== tokens.closeSquare) {
+          attr.push(this.currToken);
+          this.position++;
+        }
+        if (this.currToken[_tokenize.FIELDS.TYPE] !== tokens.closeSquare) {
+          return this.expected("closing square bracket", this.currToken[_tokenize.FIELDS.START_POS]);
+        }
+        var len = attr.length;
+        var node = {
+          source: getSource(startingToken[1], startingToken[2], this.currToken[3], this.currToken[4]),
+          sourceIndex: startingToken[_tokenize.FIELDS.START_POS]
+        };
+        if (len === 1 && !~[tokens.word].indexOf(attr[0][_tokenize.FIELDS.TYPE])) {
+          return this.expected("attribute", attr[0][_tokenize.FIELDS.START_POS]);
+        }
+        var pos = 0;
+        var spaceBefore = "";
+        var commentBefore = "";
+        var lastAdded = null;
+        var spaceAfterMeaningfulToken = false;
+        while (pos < len) {
+          var token = attr[pos];
+          var content = this.content(token);
+          var next = attr[pos + 1];
+          switch (token[_tokenize.FIELDS.TYPE]) {
+            case tokens.space:
+              spaceAfterMeaningfulToken = true;
+              if (this.options.lossy) {
+                break;
+              }
+              if (lastAdded) {
+                (0, _util.ensureObject)(node, "spaces", lastAdded);
+                var prevContent = node.spaces[lastAdded].after || "";
+                node.spaces[lastAdded].after = prevContent + content;
+                var existingComment = (0, _util.getProp)(node, "raws", "spaces", lastAdded, "after") || null;
+                if (existingComment) {
+                  node.raws.spaces[lastAdded].after = existingComment + content;
+                }
+              } else {
+                spaceBefore = spaceBefore + content;
+                commentBefore = commentBefore + content;
+              }
+              break;
+            case tokens.asterisk:
+              if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {
+                node.operator = content;
+                lastAdded = "operator";
+              } else if ((!node.namespace || lastAdded === "namespace" && !spaceAfterMeaningfulToken) && next) {
+                if (spaceBefore) {
+                  (0, _util.ensureObject)(node, "spaces", "attribute");
+                  node.spaces.attribute.before = spaceBefore;
+                  spaceBefore = "";
+                }
+                if (commentBefore) {
+                  (0, _util.ensureObject)(node, "raws", "spaces", "attribute");
+                  node.raws.spaces.attribute.before = spaceBefore;
+                  commentBefore = "";
+                }
+                node.namespace = (node.namespace || "") + content;
+                var rawValue = (0, _util.getProp)(node, "raws", "namespace") || null;
+                if (rawValue) {
+                  node.raws.namespace += content;
+                }
+                lastAdded = "namespace";
+              }
+              spaceAfterMeaningfulToken = false;
+              break;
+            case tokens.dollar:
+              if (lastAdded === "value") {
+                var oldRawValue = (0, _util.getProp)(node, "raws", "value");
+                node.value += "$";
+                if (oldRawValue) {
+                  node.raws.value = oldRawValue + "$";
+                }
+                break;
+              }
+            // Falls through
+            case tokens.caret:
+              if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {
+                node.operator = content;
+                lastAdded = "operator";
+              }
+              spaceAfterMeaningfulToken = false;
+              break;
+            case tokens.combinator:
+              if (content === "~" && next[_tokenize.FIELDS.TYPE] === tokens.equals) {
+                node.operator = content;
+                lastAdded = "operator";
+              }
+              if (content !== "|") {
+                spaceAfterMeaningfulToken = false;
+                break;
+              }
+              if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {
+                node.operator = content;
+                lastAdded = "operator";
+              } else if (!node.namespace && !node.attribute) {
+                node.namespace = true;
+              }
+              spaceAfterMeaningfulToken = false;
+              break;
+            case tokens.word:
+              if (next && this.content(next) === "|" && attr[pos + 2] && attr[pos + 2][_tokenize.FIELDS.TYPE] !== tokens.equals && // this look-ahead probably fails with comment nodes involved.
+              !node.operator && !node.namespace) {
+                node.namespace = content;
+                lastAdded = "namespace";
+              } else if (!node.attribute || lastAdded === "attribute" && !spaceAfterMeaningfulToken) {
+                if (spaceBefore) {
+                  (0, _util.ensureObject)(node, "spaces", "attribute");
+                  node.spaces.attribute.before = spaceBefore;
+                  spaceBefore = "";
+                }
+                if (commentBefore) {
+                  (0, _util.ensureObject)(node, "raws", "spaces", "attribute");
+                  node.raws.spaces.attribute.before = commentBefore;
+                  commentBefore = "";
+                }
+                node.attribute = (node.attribute || "") + content;
+                var _rawValue = (0, _util.getProp)(node, "raws", "attribute") || null;
+                if (_rawValue) {
+                  node.raws.attribute += content;
+                }
+                lastAdded = "attribute";
+              } else if (!node.value && node.value !== "" || lastAdded === "value" && !(spaceAfterMeaningfulToken || node.quoteMark)) {
+                var _unescaped = (0, _util.unesc)(content);
+                var _oldRawValue = (0, _util.getProp)(node, "raws", "value") || "";
+                var oldValue = node.value || "";
+                node.value = oldValue + _unescaped;
+                node.quoteMark = null;
+                if (_unescaped !== content || _oldRawValue) {
+                  (0, _util.ensureObject)(node, "raws");
+                  node.raws.value = (_oldRawValue || oldValue) + content;
+                }
+                lastAdded = "value";
+              } else {
+                var insensitive = content === "i" || content === "I";
+                if ((node.value || node.value === "") && (node.quoteMark || spaceAfterMeaningfulToken)) {
+                  node.insensitive = insensitive;
+                  if (!insensitive || content === "I") {
+                    (0, _util.ensureObject)(node, "raws");
+                    node.raws.insensitiveFlag = content;
+                  }
+                  lastAdded = "insensitive";
+                  if (spaceBefore) {
+                    (0, _util.ensureObject)(node, "spaces", "insensitive");
+                    node.spaces.insensitive.before = spaceBefore;
+                    spaceBefore = "";
+                  }
+                  if (commentBefore) {
+                    (0, _util.ensureObject)(node, "raws", "spaces", "insensitive");
+                    node.raws.spaces.insensitive.before = commentBefore;
+                    commentBefore = "";
+                  }
+                } else if (node.value || node.value === "") {
+                  lastAdded = "value";
+                  node.value += content;
+                  if (node.raws.value) {
+                    node.raws.value += content;
+                  }
+                }
+              }
+              spaceAfterMeaningfulToken = false;
+              break;
+            case tokens.str:
+              if (!node.attribute || !node.operator) {
+                return this.error("Expected an attribute followed by an operator preceding the string.", {
+                  index: token[_tokenize.FIELDS.START_POS]
+                });
+              }
+              var _unescapeValue = (0, _attribute.unescapeValue)(content), unescaped = _unescapeValue.unescaped, quoteMark = _unescapeValue.quoteMark;
+              node.value = unescaped;
+              node.quoteMark = quoteMark;
+              lastAdded = "value";
+              (0, _util.ensureObject)(node, "raws");
+              node.raws.value = content;
+              spaceAfterMeaningfulToken = false;
+              break;
+            case tokens.equals:
+              if (!node.attribute) {
+                return this.expected("attribute", token[_tokenize.FIELDS.START_POS], content);
+              }
+              if (node.value) {
+                return this.error('Unexpected "=" found; an operator was already defined.', {
+                  index: token[_tokenize.FIELDS.START_POS]
+                });
+              }
+              node.operator = node.operator ? node.operator + content : content;
+              lastAdded = "operator";
+              spaceAfterMeaningfulToken = false;
+              break;
+            case tokens.comment:
+              if (lastAdded) {
+                if (spaceAfterMeaningfulToken || next && next[_tokenize.FIELDS.TYPE] === tokens.space || lastAdded === "insensitive") {
+                  var lastComment = (0, _util.getProp)(node, "spaces", lastAdded, "after") || "";
+                  var rawLastComment = (0, _util.getProp)(node, "raws", "spaces", lastAdded, "after") || lastComment;
+                  (0, _util.ensureObject)(node, "raws", "spaces", lastAdded);
+                  node.raws.spaces[lastAdded].after = rawLastComment + content;
+                } else {
+                  var lastValue = node[lastAdded] || "";
+                  var rawLastValue = (0, _util.getProp)(node, "raws", lastAdded) || lastValue;
+                  (0, _util.ensureObject)(node, "raws");
+                  node.raws[lastAdded] = rawLastValue + content;
+                }
+              } else {
+                commentBefore = commentBefore + content;
+              }
+              break;
+            default:
+              return this.error('Unexpected "' + content + '" found.', {
+                index: token[_tokenize.FIELDS.START_POS]
+              });
+          }
+          pos++;
+        }
+        unescapeProp(node, "attribute");
+        unescapeProp(node, "namespace");
+        this.newNode(new _attribute["default"](node));
+        this.position++;
+      }, "attribute");
+      _proto.parseWhitespaceEquivalentTokens = /* @__PURE__ */ __name(function parseWhitespaceEquivalentTokens(stopPosition) {
+        if (stopPosition < 0) {
+          stopPosition = this.tokens.length;
+        }
+        var startPosition = this.position;
+        var nodes = [];
+        var space = "";
+        var lastComment = void 0;
+        do {
+          if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) {
+            if (!this.options.lossy) {
+              space += this.content();
+            }
+          } else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.comment) {
+            var spaces = {};
+            if (space) {
+              spaces.before = space;
+              space = "";
+            }
+            lastComment = new _comment["default"]({
+              value: this.content(),
+              source: getTokenSource(this.currToken),
+              sourceIndex: this.currToken[_tokenize.FIELDS.START_POS],
+              spaces
+            });
+            nodes.push(lastComment);
+          }
+        } while (++this.position < stopPosition);
+        if (space) {
+          if (lastComment) {
+            lastComment.spaces.after = space;
+          } else if (!this.options.lossy) {
+            var firstToken = this.tokens[startPosition];
+            var lastToken = this.tokens[this.position - 1];
+            nodes.push(new _string["default"]({
+              value: "",
+              source: getSource(firstToken[_tokenize.FIELDS.START_LINE], firstToken[_tokenize.FIELDS.START_COL], lastToken[_tokenize.FIELDS.END_LINE], lastToken[_tokenize.FIELDS.END_COL]),
+              sourceIndex: firstToken[_tokenize.FIELDS.START_POS],
+              spaces: {
+                before: space,
+                after: ""
+              }
+            }));
+          }
+        }
+        return nodes;
+      }, "parseWhitespaceEquivalentTokens");
+      _proto.convertWhitespaceNodesToSpace = /* @__PURE__ */ __name(function convertWhitespaceNodesToSpace(nodes, requiredSpace) {
+        var _this2 = this;
+        if (requiredSpace === void 0) {
+          requiredSpace = false;
+        }
+        var space = "";
+        var rawSpace = "";
+        nodes.forEach(function(n) {
+          var spaceBefore = _this2.lossySpace(n.spaces.before, requiredSpace);
+          var rawSpaceBefore = _this2.lossySpace(n.rawSpaceBefore, requiredSpace);
+          space += spaceBefore + _this2.lossySpace(n.spaces.after, requiredSpace && spaceBefore.length === 0);
+          rawSpace += spaceBefore + n.value + _this2.lossySpace(n.rawSpaceAfter, requiredSpace && rawSpaceBefore.length === 0);
+        });
+        if (rawSpace === space) {
+          rawSpace = void 0;
+        }
+        var result = {
+          space,
+          rawSpace
+        };
+        return result;
+      }, "convertWhitespaceNodesToSpace");
+      _proto.isNamedCombinator = /* @__PURE__ */ __name(function isNamedCombinator(position) {
+        if (position === void 0) {
+          position = this.position;
+        }
+        return this.tokens[position + 0] && this.tokens[position + 0][_tokenize.FIELDS.TYPE] === tokens.slash && this.tokens[position + 1] && this.tokens[position + 1][_tokenize.FIELDS.TYPE] === tokens.word && this.tokens[position + 2] && this.tokens[position + 2][_tokenize.FIELDS.TYPE] === tokens.slash;
+      }, "isNamedCombinator");
+      _proto.namedCombinator = /* @__PURE__ */ __name(function namedCombinator() {
+        if (this.isNamedCombinator()) {
+          var nameRaw = this.content(this.tokens[this.position + 1]);
+          var name = (0, _util.unesc)(nameRaw).toLowerCase();
+          var raws = {};
+          if (name !== nameRaw) {
+            raws.value = "/" + nameRaw + "/";
+          }
+          var node = new _combinator["default"]({
+            value: "/" + name + "/",
+            source: getSource(this.currToken[_tokenize.FIELDS.START_LINE], this.currToken[_tokenize.FIELDS.START_COL], this.tokens[this.position + 2][_tokenize.FIELDS.END_LINE], this.tokens[this.position + 2][_tokenize.FIELDS.END_COL]),
+            sourceIndex: this.currToken[_tokenize.FIELDS.START_POS],
+            raws
+          });
+          this.position = this.position + 3;
+          return node;
+        } else {
+          this.unexpected();
+        }
+      }, "namedCombinator");
+      _proto.combinator = /* @__PURE__ */ __name(function combinator() {
+        var _this3 = this;
+        if (this.content() === "|") {
+          return this.namespace();
+        }
+        var nextSigTokenPos = this.locateNextMeaningfulToken(this.position);
+        if (nextSigTokenPos < 0 || this.tokens[nextSigTokenPos][_tokenize.FIELDS.TYPE] === tokens.comma || this.tokens[nextSigTokenPos][_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {
+          var nodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos);
+          if (nodes.length > 0) {
+            var last = this.current.last;
+            if (last) {
+              var _this$convertWhitespa = this.convertWhitespaceNodesToSpace(nodes), space = _this$convertWhitespa.space, rawSpace = _this$convertWhitespa.rawSpace;
+              if (rawSpace !== void 0) {
+                last.rawSpaceAfter += rawSpace;
+              }
+              last.spaces.after += space;
+            } else {
+              nodes.forEach(function(n) {
+                return _this3.newNode(n);
+              });
+            }
+          }
+          return;
+        }
+        var firstToken = this.currToken;
+        var spaceOrDescendantSelectorNodes = void 0;
+        if (nextSigTokenPos > this.position) {
+          spaceOrDescendantSelectorNodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos);
+        }
+        var node;
+        if (this.isNamedCombinator()) {
+          node = this.namedCombinator();
+        } else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.combinator) {
+          node = new _combinator["default"]({
+            value: this.content(),
+            source: getTokenSource(this.currToken),
+            sourceIndex: this.currToken[_tokenize.FIELDS.START_POS]
+          });
+          this.position++;
+        } else if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) {
+        } else if (!spaceOrDescendantSelectorNodes) {
+          this.unexpected();
+        }
+        if (node) {
+          if (spaceOrDescendantSelectorNodes) {
+            var _this$convertWhitespa2 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes), _space = _this$convertWhitespa2.space, _rawSpace = _this$convertWhitespa2.rawSpace;
+            node.spaces.before = _space;
+            node.rawSpaceBefore = _rawSpace;
+          }
+        } else {
+          var _this$convertWhitespa3 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes, true), _space2 = _this$convertWhitespa3.space, _rawSpace2 = _this$convertWhitespa3.rawSpace;
+          if (!_rawSpace2) {
+            _rawSpace2 = _space2;
+          }
+          var spaces = {};
+          var raws = {
+            spaces: {}
+          };
+          if (_space2.endsWith(" ") && _rawSpace2.endsWith(" ")) {
+            spaces.before = _space2.slice(0, _space2.length - 1);
+            raws.spaces.before = _rawSpace2.slice(0, _rawSpace2.length - 1);
+          } else if (_space2[0] === " " && _rawSpace2[0] === " ") {
+            spaces.after = _space2.slice(1);
+            raws.spaces.after = _rawSpace2.slice(1);
+          } else {
+            raws.value = _rawSpace2;
+          }
+          node = new _combinator["default"]({
+            value: " ",
+            source: getTokenSourceSpan(firstToken, this.tokens[this.position - 1]),
+            sourceIndex: firstToken[_tokenize.FIELDS.START_POS],
+            spaces,
+            raws
+          });
+        }
+        if (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.space) {
+          node.spaces.after = this.optionalSpace(this.content());
+          this.position++;
+        }
+        return this.newNode(node);
+      }, "combinator");
+      _proto.comma = /* @__PURE__ */ __name(function comma() {
+        if (this.position === this.tokens.length - 1) {
+          this.root.trailingComma = true;
+          this.position++;
+          return;
+        }
+        this.current._inferEndPosition();
+        var selector = new _selector["default"]({
+          source: {
+            start: tokenStart(this.tokens[this.position + 1])
+          },
+          sourceIndex: this.tokens[this.position + 1][_tokenize.FIELDS.START_POS]
+        });
+        this.current.parent.append(selector);
+        this.current = selector;
+        this.position++;
+      }, "comma");
+      _proto.comment = /* @__PURE__ */ __name(function comment() {
+        var current = this.currToken;
+        this.newNode(new _comment["default"]({
+          value: this.content(),
+          source: getTokenSource(current),
+          sourceIndex: current[_tokenize.FIELDS.START_POS]
+        }));
+        this.position++;
+      }, "comment");
+      _proto.error = /* @__PURE__ */ __name(function error(message, opts) {
+        throw this.root.error(message, opts);
+      }, "error");
+      _proto.missingBackslash = /* @__PURE__ */ __name(function missingBackslash() {
+        return this.error("Expected a backslash preceding the semicolon.", {
+          index: this.currToken[_tokenize.FIELDS.START_POS]
+        });
+      }, "missingBackslash");
+      _proto.missingParenthesis = /* @__PURE__ */ __name(function missingParenthesis() {
+        return this.expected("opening parenthesis", this.currToken[_tokenize.FIELDS.START_POS]);
+      }, "missingParenthesis");
+      _proto.missingSquareBracket = /* @__PURE__ */ __name(function missingSquareBracket() {
+        return this.expected("opening square bracket", this.currToken[_tokenize.FIELDS.START_POS]);
+      }, "missingSquareBracket");
+      _proto.unexpected = /* @__PURE__ */ __name(function unexpected() {
+        return this.error("Unexpected '" + this.content() + "'. Escaping special characters with \\ may help.", this.currToken[_tokenize.FIELDS.START_POS]);
+      }, "unexpected");
+      _proto.unexpectedPipe = /* @__PURE__ */ __name(function unexpectedPipe() {
+        return this.error("Unexpected '|'.", this.currToken[_tokenize.FIELDS.START_POS]);
+      }, "unexpectedPipe");
+      _proto.namespace = /* @__PURE__ */ __name(function namespace() {
+        var before = this.prevToken && this.content(this.prevToken) || true;
+        if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.word) {
+          this.position++;
+          return this.word(before);
+        } else if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.asterisk) {
+          this.position++;
+          return this.universal(before);
+        }
+        this.unexpectedPipe();
+      }, "namespace");
+      _proto.nesting = /* @__PURE__ */ __name(function nesting() {
+        if (this.nextToken) {
+          var nextContent = this.content(this.nextToken);
+          if (nextContent === "|") {
+            this.position++;
+            return;
+          }
+        }
+        var current = this.currToken;
+        this.newNode(new _nesting["default"]({
+          value: this.content(),
+          source: getTokenSource(current),
+          sourceIndex: current[_tokenize.FIELDS.START_POS]
+        }));
+        this.position++;
+      }, "nesting");
+      _proto.parentheses = /* @__PURE__ */ __name(function parentheses() {
+        var last = this.current.last;
+        var unbalanced = 1;
+        this.position++;
+        if (last && last.type === types.PSEUDO) {
+          var selector = new _selector["default"]({
+            source: {
+              start: tokenStart(this.tokens[this.position])
+            },
+            sourceIndex: this.tokens[this.position][_tokenize.FIELDS.START_POS]
+          });
+          var cache = this.current;
+          last.append(selector);
+          this.current = selector;
+          while (this.position < this.tokens.length && unbalanced) {
+            if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {
+              unbalanced++;
+            }
+            if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {
+              unbalanced--;
+            }
+            if (unbalanced) {
+              this.parse();
+            } else {
+              this.current.source.end = tokenEnd(this.currToken);
+              this.current.parent.source.end = tokenEnd(this.currToken);
+              this.position++;
+            }
+          }
+          this.current = cache;
+        } else {
+          var parenStart = this.currToken;
+          var parenValue = "(";
+          var parenEnd;
+          while (this.position < this.tokens.length && unbalanced) {
+            if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {
+              unbalanced++;
+            }
+            if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {
+              unbalanced--;
+            }
+            parenEnd = this.currToken;
+            parenValue += this.parseParenthesisToken(this.currToken);
+            this.position++;
+          }
+          if (last) {
+            last.appendToPropertyAndEscape("value", parenValue, parenValue);
+          } else {
+            this.newNode(new _string["default"]({
+              value: parenValue,
+              source: getSource(parenStart[_tokenize.FIELDS.START_LINE], parenStart[_tokenize.FIELDS.START_COL], parenEnd[_tokenize.FIELDS.END_LINE], parenEnd[_tokenize.FIELDS.END_COL]),
+              sourceIndex: parenStart[_tokenize.FIELDS.START_POS]
+            }));
+          }
+        }
+        if (unbalanced) {
+          return this.expected("closing parenthesis", this.currToken[_tokenize.FIELDS.START_POS]);
+        }
+      }, "parentheses");
+      _proto.pseudo = /* @__PURE__ */ __name(function pseudo() {
+        var _this4 = this;
+        var pseudoStr = "";
+        var startingToken = this.currToken;
+        while (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.colon) {
+          pseudoStr += this.content();
+          this.position++;
+        }
+        if (!this.currToken) {
+          return this.expected(["pseudo-class", "pseudo-element"], this.position - 1);
+        }
+        if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.word) {
+          this.splitWord(false, function(first, length) {
+            pseudoStr += first;
+            _this4.newNode(new _pseudo["default"]({
+              value: pseudoStr,
+              source: getTokenSourceSpan(startingToken, _this4.currToken),
+              sourceIndex: startingToken[_tokenize.FIELDS.START_POS]
+            }));
+            if (length > 1 && _this4.nextToken && _this4.nextToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {
+              _this4.error("Misplaced parenthesis.", {
+                index: _this4.nextToken[_tokenize.FIELDS.START_POS]
+              });
+            }
+          });
+        } else {
+          return this.expected(["pseudo-class", "pseudo-element"], this.currToken[_tokenize.FIELDS.START_POS]);
+        }
+      }, "pseudo");
+      _proto.space = /* @__PURE__ */ __name(function space() {
+        var content = this.content();
+        if (this.position === 0 || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis || this.current.nodes.every(function(node) {
+          return node.type === "comment";
+        })) {
+          this.spaces = this.optionalSpace(content);
+          this.position++;
+        } else if (this.position === this.tokens.length - 1 || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {
+          this.current.last.spaces.after = this.optionalSpace(content);
+          this.position++;
+        } else {
+          this.combinator();
+        }
+      }, "space");
+      _proto.string = /* @__PURE__ */ __name(function string() {
+        var current = this.currToken;
+        this.newNode(new _string["default"]({
+          value: this.content(),
+          source: getTokenSource(current),
+          sourceIndex: current[_tokenize.FIELDS.START_POS]
+        }));
+        this.position++;
+      }, "string");
+      _proto.universal = /* @__PURE__ */ __name(function universal(namespace) {
+        var nextToken = this.nextToken;
+        if (nextToken && this.content(nextToken) === "|") {
+          this.position++;
+          return this.namespace();
+        }
+        var current = this.currToken;
+        this.newNode(new _universal["default"]({
+          value: this.content(),
+          source: getTokenSource(current),
+          sourceIndex: current[_tokenize.FIELDS.START_POS]
+        }), namespace);
+        this.position++;
+      }, "universal");
+      _proto.splitWord = /* @__PURE__ */ __name(function splitWord(namespace, firstCallback) {
+        var _this5 = this;
+        var nextToken = this.nextToken;
+        var word = this.content();
+        while (nextToken && ~[tokens.dollar, tokens.caret, tokens.equals, tokens.word].indexOf(nextToken[_tokenize.FIELDS.TYPE])) {
+          this.position++;
+          var current = this.content();
+          word += current;
+          if (current.lastIndexOf("\\") === current.length - 1) {
+            var next = this.nextToken;
+            if (next && next[_tokenize.FIELDS.TYPE] === tokens.space) {
+              word += this.requiredSpace(this.content(next));
+              this.position++;
+            }
+          }
+          nextToken = this.nextToken;
+        }
+        var hasClass = indexesOf(word, ".").filter(function(i) {
+          var escapedDot = word[i - 1] === "\\";
+          var isKeyframesPercent = /^\d+\.\d+%$/.test(word);
+          return !escapedDot && !isKeyframesPercent;
+        });
+        var hasId = indexesOf(word, "#").filter(function(i) {
+          return word[i - 1] !== "\\";
+        });
+        var interpolations = indexesOf(word, "#{");
+        if (interpolations.length) {
+          hasId = hasId.filter(function(hashIndex) {
+            return !~interpolations.indexOf(hashIndex);
+          });
+        }
+        var indices = (0, _sortAscending["default"])(uniqs([0].concat(hasClass, hasId)));
+        indices.forEach(function(ind, i) {
+          var index = indices[i + 1] || word.length;
+          var value = word.slice(ind, index);
+          if (i === 0 && firstCallback) {
+            return firstCallback.call(_this5, value, indices.length);
+          }
+          var node;
+          var current2 = _this5.currToken;
+          var sourceIndex = current2[_tokenize.FIELDS.START_POS] + indices[i];
+          var source = getSource(current2[1], current2[2] + ind, current2[3], current2[2] + (index - 1));
+          if (~hasClass.indexOf(ind)) {
+            var classNameOpts = {
+              value: value.slice(1),
+              source,
+              sourceIndex
+            };
+            node = new _className["default"](unescapeProp(classNameOpts, "value"));
+          } else if (~hasId.indexOf(ind)) {
+            var idOpts = {
+              value: value.slice(1),
+              source,
+              sourceIndex
+            };
+            node = new _id["default"](unescapeProp(idOpts, "value"));
+          } else {
+            var tagOpts = {
+              value,
+              source,
+              sourceIndex
+            };
+            unescapeProp(tagOpts, "value");
+            node = new _tag["default"](tagOpts);
+          }
+          _this5.newNode(node, namespace);
+          namespace = null;
+        });
+        this.position++;
+      }, "splitWord");
+      _proto.word = /* @__PURE__ */ __name(function word(namespace) {
+        var nextToken = this.nextToken;
+        if (nextToken && this.content(nextToken) === "|") {
+          this.position++;
+          return this.namespace();
+        }
+        return this.splitWord(namespace);
+      }, "word");
+      _proto.loop = /* @__PURE__ */ __name(function loop() {
+        while (this.position < this.tokens.length) {
+          this.parse(true);
+        }
+        this.current._inferEndPosition();
+        return this.root;
+      }, "loop");
+      _proto.parse = /* @__PURE__ */ __name(function parse(throwOnParenthesis) {
+        switch (this.currToken[_tokenize.FIELDS.TYPE]) {
+          case tokens.space:
+            this.space();
+            break;
+          case tokens.comment:
+            this.comment();
+            break;
+          case tokens.openParenthesis:
+            this.parentheses();
+            break;
+          case tokens.closeParenthesis:
+            if (throwOnParenthesis) {
+              this.missingParenthesis();
+            }
+            break;
+          case tokens.openSquare:
+            this.attribute();
+            break;
+          case tokens.dollar:
+          case tokens.caret:
+          case tokens.equals:
+          case tokens.word:
+            this.word();
+            break;
+          case tokens.colon:
+            this.pseudo();
+            break;
+          case tokens.comma:
+            this.comma();
+            break;
+          case tokens.asterisk:
+            this.universal();
+            break;
+          case tokens.ampersand:
+            this.nesting();
+            break;
+          case tokens.slash:
+          case tokens.combinator:
+            this.combinator();
+            break;
+          case tokens.str:
+            this.string();
+            break;
+          // These cases throw; no break needed.
+          case tokens.closeSquare:
+            this.missingSquareBracket();
+          case tokens.semicolon:
+            this.missingBackslash();
+          default:
+            this.unexpected();
+        }
+      }, "parse");
+      _proto.expected = /* @__PURE__ */ __name(function expected(description, index, found) {
+        if (Array.isArray(description)) {
+          var last = description.pop();
+          description = description.join(", ") + " or " + last;
+        }
+        var an = /^[aeiou]/.test(description[0]) ? "an" : "a";
+        if (!found) {
+          return this.error("Expected " + an + " " + description + ".", {
+            index
+          });
+        }
+        return this.error("Expected " + an + " " + description + ', found "' + found + '" instead.', {
+          index
+        });
+      }, "expected");
+      _proto.requiredSpace = /* @__PURE__ */ __name(function requiredSpace(space) {
+        return this.options.lossy ? " " : space;
+      }, "requiredSpace");
+      _proto.optionalSpace = /* @__PURE__ */ __name(function optionalSpace(space) {
+        return this.options.lossy ? "" : space;
+      }, "optionalSpace");
+      _proto.lossySpace = /* @__PURE__ */ __name(function lossySpace(space, required) {
+        if (this.options.lossy) {
+          return required ? " " : "";
+        } else {
+          return space;
+        }
+      }, "lossySpace");
+      _proto.parseParenthesisToken = /* @__PURE__ */ __name(function parseParenthesisToken(token) {
+        var content = this.content(token);
+        if (token[_tokenize.FIELDS.TYPE] === tokens.space) {
+          return this.requiredSpace(content);
+        } else {
+          return content;
+        }
+      }, "parseParenthesisToken");
+      _proto.newNode = /* @__PURE__ */ __name(function newNode(node, namespace) {
+        if (namespace) {
+          if (/^ +$/.test(namespace)) {
+            if (!this.options.lossy) {
+              this.spaces = (this.spaces || "") + namespace;
+            }
+            namespace = true;
+          }
+          node.namespace = namespace;
+          unescapeProp(node, "namespace");
+        }
+        if (this.spaces) {
+          node.spaces.before = this.spaces;
+          this.spaces = "";
+        }
+        return this.current.append(node);
+      }, "newNode");
+      _proto.content = /* @__PURE__ */ __name(function content(token) {
+        if (token === void 0) {
+          token = this.currToken;
+        }
+        return this.css.slice(token[_tokenize.FIELDS.START_POS], token[_tokenize.FIELDS.END_POS]);
+      }, "content");
+      _proto.locateNextMeaningfulToken = /* @__PURE__ */ __name(function locateNextMeaningfulToken(startPosition) {
+        if (startPosition === void 0) {
+          startPosition = this.position + 1;
+        }
+        var searchPosition = startPosition;
+        while (searchPosition < this.tokens.length) {
+          if (WHITESPACE_EQUIV_TOKENS[this.tokens[searchPosition][_tokenize.FIELDS.TYPE]]) {
+            searchPosition++;
+            continue;
+          } else {
+            return searchPosition;
+          }
+        }
+        return -1;
+      }, "locateNextMeaningfulToken");
+      _createClass(Parser2, [{
+        key: "currToken",
+        get: /* @__PURE__ */ __name(function get() {
+          return this.tokens[this.position];
+        }, "get")
+      }, {
+        key: "nextToken",
+        get: /* @__PURE__ */ __name(function get() {
+          return this.tokens[this.position + 1];
+        }, "get")
+      }, {
+        key: "prevToken",
+        get: /* @__PURE__ */ __name(function get() {
+          return this.tokens[this.position - 1];
+        }, "get")
+      }]);
+      return Parser2;
+    })();
+    exports2["default"] = Parser;
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/processor.js
+var require_processor2 = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/processor.js"(exports2, module2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = void 0;
+    var _parser = _interopRequireDefault(require_parser());
+    function _interopRequireDefault(obj) {
+      return obj && obj.__esModule ? obj : { "default": obj };
+    }
+    __name(_interopRequireDefault, "_interopRequireDefault");
+    var Processor = /* @__PURE__ */ (function() {
+      function Processor2(func, options) {
+        this.func = func || /* @__PURE__ */ __name(function noop() {
+        }, "noop");
+        this.funcRes = null;
+        this.options = options;
+      }
+      __name(Processor2, "Processor");
+      var _proto = Processor2.prototype;
+      _proto._shouldUpdateSelector = /* @__PURE__ */ __name(function _shouldUpdateSelector(rule, options) {
+        if (options === void 0) {
+          options = {};
+        }
+        var merged = Object.assign({}, this.options, options);
+        if (merged.updateSelector === false) {
+          return false;
+        } else {
+          return typeof rule !== "string";
+        }
+      }, "_shouldUpdateSelector");
+      _proto._isLossy = /* @__PURE__ */ __name(function _isLossy(options) {
+        if (options === void 0) {
+          options = {};
+        }
+        var merged = Object.assign({}, this.options, options);
+        if (merged.lossless === false) {
+          return true;
+        } else {
+          return false;
+        }
+      }, "_isLossy");
+      _proto._root = /* @__PURE__ */ __name(function _root(rule, options) {
+        if (options === void 0) {
+          options = {};
+        }
+        var parser = new _parser["default"](rule, this._parseOptions(options));
+        return parser.root;
+      }, "_root");
+      _proto._parseOptions = /* @__PURE__ */ __name(function _parseOptions(options) {
+        return {
+          lossy: this._isLossy(options)
+        };
+      }, "_parseOptions");
+      _proto._run = /* @__PURE__ */ __name(function _run(rule, options) {
+        var _this = this;
+        if (options === void 0) {
+          options = {};
+        }
+        return new Promise(function(resolve, reject) {
+          try {
+            var root = _this._root(rule, options);
+            Promise.resolve(_this.func(root)).then(function(transform) {
+              var string = void 0;
+              if (_this._shouldUpdateSelector(rule, options)) {
+                string = root.toString();
+                rule.selector = string;
+              }
+              return {
+                transform,
+                root,
+                string
+              };
+            }).then(resolve, reject);
+          } catch (e) {
+            reject(e);
+            return;
+          }
+        });
+      }, "_run");
+      _proto._runSync = /* @__PURE__ */ __name(function _runSync(rule, options) {
+        if (options === void 0) {
+          options = {};
+        }
+        var root = this._root(rule, options);
+        var transform = this.func(root);
+        if (transform && typeof transform.then === "function") {
+          throw new Error("Selector processor returned a promise to a synchronous call.");
+        }
+        var string = void 0;
+        if (options.updateSelector && typeof rule !== "string") {
+          string = root.toString();
+          rule.selector = string;
+        }
+        return {
+          transform,
+          root,
+          string
+        };
+      }, "_runSync");
+      _proto.ast = /* @__PURE__ */ __name(function ast(rule, options) {
+        return this._run(rule, options).then(function(result) {
+          return result.root;
+        });
+      }, "ast");
+      _proto.astSync = /* @__PURE__ */ __name(function astSync(rule, options) {
+        return this._runSync(rule, options).root;
+      }, "astSync");
+      _proto.transform = /* @__PURE__ */ __name(function transform(rule, options) {
+        return this._run(rule, options).then(function(result) {
+          return result.transform;
+        });
+      }, "transform");
+      _proto.transformSync = /* @__PURE__ */ __name(function transformSync(rule, options) {
+        return this._runSync(rule, options).transform;
+      }, "transformSync");
+      _proto.process = /* @__PURE__ */ __name(function process3(rule, options) {
+        return this._run(rule, options).then(function(result) {
+          return result.string || result.root.toString();
+        });
+      }, "process");
+      _proto.processSync = /* @__PURE__ */ __name(function processSync(rule, options) {
+        var result = this._runSync(rule, options);
+        return result.string || result.root.toString();
+      }, "processSync");
+      return Processor2;
+    })();
+    exports2["default"] = Processor;
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/constructors.js
+var require_constructors = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/constructors.js"(exports2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2.universal = exports2.tag = exports2.string = exports2.selector = exports2.root = exports2.pseudo = exports2.nesting = exports2.id = exports2.comment = exports2.combinator = exports2.className = exports2.attribute = void 0;
+    var _attribute = _interopRequireDefault(require_attribute());
+    var _className = _interopRequireDefault(require_className());
+    var _combinator = _interopRequireDefault(require_combinator());
+    var _comment = _interopRequireDefault(require_comment());
+    var _id = _interopRequireDefault(require_id());
+    var _nesting = _interopRequireDefault(require_nesting());
+    var _pseudo = _interopRequireDefault(require_pseudo());
+    var _root = _interopRequireDefault(require_root2());
+    var _selector = _interopRequireDefault(require_selector());
+    var _string = _interopRequireDefault(require_string());
+    var _tag = _interopRequireDefault(require_tag2());
+    var _universal = _interopRequireDefault(require_universal());
+    function _interopRequireDefault(obj) {
+      return obj && obj.__esModule ? obj : { "default": obj };
+    }
+    __name(_interopRequireDefault, "_interopRequireDefault");
+    var attribute = /* @__PURE__ */ __name(function attribute2(opts) {
+      return new _attribute["default"](opts);
+    }, "attribute");
+    exports2.attribute = attribute;
+    var className = /* @__PURE__ */ __name(function className2(opts) {
+      return new _className["default"](opts);
+    }, "className");
+    exports2.className = className;
+    var combinator = /* @__PURE__ */ __name(function combinator2(opts) {
+      return new _combinator["default"](opts);
+    }, "combinator");
+    exports2.combinator = combinator;
+    var comment = /* @__PURE__ */ __name(function comment2(opts) {
+      return new _comment["default"](opts);
+    }, "comment");
+    exports2.comment = comment;
+    var id = /* @__PURE__ */ __name(function id2(opts) {
+      return new _id["default"](opts);
+    }, "id");
+    exports2.id = id;
+    var nesting = /* @__PURE__ */ __name(function nesting2(opts) {
+      return new _nesting["default"](opts);
+    }, "nesting");
+    exports2.nesting = nesting;
+    var pseudo = /* @__PURE__ */ __name(function pseudo2(opts) {
+      return new _pseudo["default"](opts);
+    }, "pseudo");
+    exports2.pseudo = pseudo;
+    var root = /* @__PURE__ */ __name(function root2(opts) {
+      return new _root["default"](opts);
+    }, "root");
+    exports2.root = root;
+    var selector = /* @__PURE__ */ __name(function selector2(opts) {
+      return new _selector["default"](opts);
+    }, "selector");
+    exports2.selector = selector;
+    var string = /* @__PURE__ */ __name(function string2(opts) {
+      return new _string["default"](opts);
+    }, "string");
+    exports2.string = string;
+    var tag = /* @__PURE__ */ __name(function tag2(opts) {
+      return new _tag["default"](opts);
+    }, "tag");
+    exports2.tag = tag;
+    var universal = /* @__PURE__ */ __name(function universal2(opts) {
+      return new _universal["default"](opts);
+    }, "universal");
+    exports2.universal = universal;
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/guards.js
+var require_guards = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/guards.js"(exports2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2.isComment = exports2.isCombinator = exports2.isClassName = exports2.isAttribute = void 0;
+    exports2.isContainer = isContainer;
+    exports2.isIdentifier = void 0;
+    exports2.isNamespace = isNamespace;
+    exports2.isNesting = void 0;
+    exports2.isNode = isNode;
+    exports2.isPseudo = void 0;
+    exports2.isPseudoClass = isPseudoClass;
+    exports2.isPseudoElement = isPseudoElement;
+    exports2.isUniversal = exports2.isTag = exports2.isString = exports2.isSelector = exports2.isRoot = void 0;
+    var _types = require_types();
+    var _IS_TYPE;
+    var IS_TYPE = (_IS_TYPE = {}, _IS_TYPE[_types.ATTRIBUTE] = true, _IS_TYPE[_types.CLASS] = true, _IS_TYPE[_types.COMBINATOR] = true, _IS_TYPE[_types.COMMENT] = true, _IS_TYPE[_types.ID] = true, _IS_TYPE[_types.NESTING] = true, _IS_TYPE[_types.PSEUDO] = true, _IS_TYPE[_types.ROOT] = true, _IS_TYPE[_types.SELECTOR] = true, _IS_TYPE[_types.STRING] = true, _IS_TYPE[_types.TAG] = true, _IS_TYPE[_types.UNIVERSAL] = true, _IS_TYPE);
+    function isNode(node) {
+      return typeof node === "object" && IS_TYPE[node.type];
+    }
+    __name(isNode, "isNode");
+    function isNodeType(type, node) {
+      return isNode(node) && node.type === type;
+    }
+    __name(isNodeType, "isNodeType");
+    var isAttribute = isNodeType.bind(null, _types.ATTRIBUTE);
+    exports2.isAttribute = isAttribute;
+    var isClassName = isNodeType.bind(null, _types.CLASS);
+    exports2.isClassName = isClassName;
+    var isCombinator = isNodeType.bind(null, _types.COMBINATOR);
+    exports2.isCombinator = isCombinator;
+    var isComment = isNodeType.bind(null, _types.COMMENT);
+    exports2.isComment = isComment;
+    var isIdentifier = isNodeType.bind(null, _types.ID);
+    exports2.isIdentifier = isIdentifier;
+    var isNesting = isNodeType.bind(null, _types.NESTING);
+    exports2.isNesting = isNesting;
+    var isPseudo = isNodeType.bind(null, _types.PSEUDO);
+    exports2.isPseudo = isPseudo;
+    var isRoot = isNodeType.bind(null, _types.ROOT);
+    exports2.isRoot = isRoot;
+    var isSelector = isNodeType.bind(null, _types.SELECTOR);
+    exports2.isSelector = isSelector;
+    var isString = isNodeType.bind(null, _types.STRING);
+    exports2.isString = isString;
+    var isTag = isNodeType.bind(null, _types.TAG);
+    exports2.isTag = isTag;
+    var isUniversal = isNodeType.bind(null, _types.UNIVERSAL);
+    exports2.isUniversal = isUniversal;
+    function isPseudoElement(node) {
+      return isPseudo(node) && node.value && (node.value.startsWith("::") || node.value.toLowerCase() === ":before" || node.value.toLowerCase() === ":after" || node.value.toLowerCase() === ":first-letter" || node.value.toLowerCase() === ":first-line");
+    }
+    __name(isPseudoElement, "isPseudoElement");
+    function isPseudoClass(node) {
+      return isPseudo(node) && !isPseudoElement(node);
+    }
+    __name(isPseudoClass, "isPseudoClass");
+    function isContainer(node) {
+      return !!(isNode(node) && node.walk);
+    }
+    __name(isContainer, "isContainer");
+    function isNamespace(node) {
+      return isAttribute(node) || isTag(node);
+    }
+    __name(isNamespace, "isNamespace");
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/index.js
+var require_selectors = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/selectors/index.js"(exports2) {
+    "use strict";
+    exports2.__esModule = true;
+    var _types = require_types();
+    Object.keys(_types).forEach(function(key) {
+      if (key === "default" || key === "__esModule") return;
+      if (key in exports2 && exports2[key] === _types[key]) return;
+      exports2[key] = _types[key];
+    });
+    var _constructors = require_constructors();
+    Object.keys(_constructors).forEach(function(key) {
+      if (key === "default" || key === "__esModule") return;
+      if (key in exports2 && exports2[key] === _constructors[key]) return;
+      exports2[key] = _constructors[key];
+    });
+    var _guards = require_guards();
+    Object.keys(_guards).forEach(function(key) {
+      if (key === "default" || key === "__esModule") return;
+      if (key in exports2 && exports2[key] === _guards[key]) return;
+      exports2[key] = _guards[key];
+    });
+  }
+});
+
+// node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/index.js
+var require_dist14 = __commonJS({
+  "node_modules/.pnpm/postcss-selector-parser@7.1.1/node_modules/postcss-selector-parser/dist/index.js"(exports2, module2) {
+    "use strict";
+    exports2.__esModule = true;
+    exports2["default"] = void 0;
+    var _processor = _interopRequireDefault(require_processor2());
+    var selectors = _interopRequireWildcard(require_selectors());
+    function _getRequireWildcardCache(nodeInterop) {
+      if (typeof WeakMap !== "function") return null;
+      var cacheBabelInterop = /* @__PURE__ */ new WeakMap();
+      var cacheNodeInterop = /* @__PURE__ */ new WeakMap();
+      return (_getRequireWildcardCache = /* @__PURE__ */ __name(function _getRequireWildcardCache2(nodeInterop2) {
+        return nodeInterop2 ? cacheNodeInterop : cacheBabelInterop;
+      }, "_getRequireWildcardCache"))(nodeInterop);
+    }
+    __name(_getRequireWildcardCache, "_getRequireWildcardCache");
+    function _interopRequireWildcard(obj, nodeInterop) {
+      if (!nodeInterop && obj && obj.__esModule) {
+        return obj;
+      }
+      if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
+        return { "default": obj };
+      }
+      var cache = _getRequireWildcardCache(nodeInterop);
+      if (cache && cache.has(obj)) {
+        return cache.get(obj);
+      }
+      var newObj = {};
+      var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
+      for (var key in obj) {
+        if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
+          var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
+          if (desc && (desc.get || desc.set)) {
+            Object.defineProperty(newObj, key, desc);
+          } else {
+            newObj[key] = obj[key];
+          }
+        }
+      }
+      newObj["default"] = obj;
+      if (cache) {
+        cache.set(obj, newObj);
+      }
+      return newObj;
+    }
+    __name(_interopRequireWildcard, "_interopRequireWildcard");
+    function _interopRequireDefault(obj) {
+      return obj && obj.__esModule ? obj : { "default": obj };
+    }
+    __name(_interopRequireDefault, "_interopRequireDefault");
+    var parser = /* @__PURE__ */ __name(function parser2(processor) {
+      return new _processor["default"](processor);
+    }, "parser");
+    Object.assign(parser, selectors);
+    delete parser.__esModule;
+    var _default = parser;
+    exports2["default"] = _default;
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+query@4.0.1/node_modules/@npmcli/query/lib/index.js
+var require_lib40 = __commonJS({
+  "node_modules/.pnpm/@npmcli+query@4.0.1/node_modules/@npmcli/query/lib/index.js"(exports2, module2) {
+    "use strict";
+    var parser = require_dist14();
+    var arrayDelimiter = Symbol("arrayDelimiter");
+    var escapeSlashes = /* @__PURE__ */ __name((str) => str.replace(/\//g, "\\/"), "escapeSlashes");
+    var unescapeSlashes = /* @__PURE__ */ __name((str) => str.replace(/\\\//g, "/"), "unescapeSlashes");
+    var fixupAttr = /* @__PURE__ */ __name((astNode) => {
+      const properties = [];
+      const matcher = {};
+      for (const selectorAstNode of astNode.nodes) {
+        const [firstAstNode] = selectorAstNode.nodes;
+        if (firstAstNode.type === "tag") {
+          properties.push(firstAstNode.value);
+        }
+      }
+      const lastSelectorAstNode = astNode.nodes.pop();
+      const [attributeAstNode] = lastSelectorAstNode.nodes;
+      if (attributeAstNode.value === ":attr") {
+        const appendParts = fixupAttr(attributeAstNode);
+        properties.push(arrayDelimiter, ...appendParts.lookupProperties);
+        matcher.qualifiedAttribute = appendParts.attributeMatcher.qualifiedAttribute;
+        matcher.operator = appendParts.attributeMatcher.operator;
+        matcher.value = appendParts.attributeMatcher.value;
+        matcher.attribute = appendParts.attributeMatcher.attribute;
+        if (appendParts.attributeMatcher.insensitive) {
+          matcher.insensitive = true;
+        }
+      } else {
+        if (attributeAstNode.type !== "attribute") {
+          throw Object.assign(
+            new Error("`:attr` pseudo-class expects an attribute matcher as the last value"),
+            { code: "EQUERYATTR" }
+          );
+        }
+        matcher.qualifiedAttribute = unescapeSlashes(attributeAstNode.qualifiedAttribute);
+        matcher.operator = attributeAstNode.operator;
+        matcher.value = attributeAstNode.value;
+        matcher.attribute = matcher.qualifiedAttribute;
+        if (attributeAstNode.insensitive) {
+          matcher.insensitive = true;
+        }
+      }
+      astNode.lookupProperties = properties;
+      astNode.attributeMatcher = matcher;
+      astNode.nodes.length = 0;
+      return astNode;
+    }, "fixupAttr");
+    var fixupNestedPseudo = /* @__PURE__ */ __name((astNode) => {
+      const newRootNode = parser.root();
+      astNode.nestedNode = newRootNode;
+      newRootNode.nodes = [...astNode.nodes];
+      astNode.nodes.length = 0;
+      for (const currAstNode of newRootNode.nodes) {
+        currAstNode.parent = newRootNode;
+      }
+      transformAst(newRootNode);
+    }, "fixupNestedPseudo");
+    var fixupSemverSpecs = /* @__PURE__ */ __name((astNode) => {
+      if (astNode.nodes.length === 3) {
+        const funcNode = astNode.nodes.pop().nodes[0];
+        if (funcNode.type === "tag") {
+          astNode.semverFunc = funcNode.value;
+        } else if (funcNode.type === "string") {
+          astNode.semverFunc = funcNode.value.slice(1, -1);
+        } else {
+          throw Object.assign(
+            new Error("`:semver` pseudo-class expects a function name as last value"),
+            { code: "ESEMVERFUNC" }
+          );
+        }
+      }
+      if (astNode.nodes.length === 1) {
+        const semverNode = astNode.nodes.pop();
+        astNode.semverValue = semverNode.nodes.reduce((res, next) => `${res}${String(next)}`, "");
+      } else if (astNode.nodes.length === 2) {
+        for (let i = 0; i < astNode.nodes.length; ++i) {
+          const type = astNode.nodes[i].nodes[0].type;
+          if (type === "tag" || type === "combinator") {
+            const semverNode = astNode.nodes.splice(i, 1)[0];
+            astNode.semverValue = semverNode.nodes.reduce((res, next) => `${res}${String(next)}`, "");
+            astNode.semverPosition = i;
+            break;
+          }
+        }
+        if (typeof astNode.semverValue === "undefined") {
+          throw Object.assign(
+            new Error("`:semver` pseudo-class expects a static value in the first or second position"),
+            { code: "ESEMVERVALUE" }
+          );
+        }
+      }
+      if (astNode.nodes.length === 1) {
+        fixupAttr(astNode);
+      } else {
+        astNode.attributeMatcher = {
+          insensitive: false,
+          attribute: "version",
+          qualifiedAttribute: "version"
+        };
+        astNode.lookupProperties = [];
+      }
+      astNode.nodes.length = 0;
+    }, "fixupSemverSpecs");
+    var fixupTypes = /* @__PURE__ */ __name((astNode) => {
+      const [valueAstNode] = astNode.nodes[0].nodes;
+      const { value } = valueAstNode || {};
+      astNode.typeValue = value;
+      astNode.nodes.length = 0;
+    }, "fixupTypes");
+    var fixupPaths = /* @__PURE__ */ __name((astNode) => {
+      astNode.pathValue = unescapeSlashes(String(astNode.nodes[0]));
+      astNode.nodes.length = 0;
+    }, "fixupPaths");
+    var fixupOutdated = /* @__PURE__ */ __name((astNode) => {
+      if (astNode.nodes.length) {
+        astNode.outdatedKind = String(astNode.nodes[0]);
+        astNode.nodes.length = 0;
+      }
+    }, "fixupOutdated");
+    var fixupVuln = /* @__PURE__ */ __name((astNode) => {
+      const vulns = [];
+      if (astNode.nodes.length) {
+        for (const selector of astNode.nodes) {
+          const vuln = {};
+          for (const node of selector.nodes) {
+            if (node.type !== "attribute") {
+              throw Object.assign(
+                new Error(':vuln pseudo-class only accepts attribute matchers or "cwe" tag'),
+                { code: "EQUERYATTR" }
+              );
+            }
+            if (!["severity", "cwe"].includes(node._attribute)) {
+              throw Object.assign(
+                new Error(':vuln pseudo-class only matches "severity" and "cwe" attributes'),
+                { code: "EQUERYATTR" }
+              );
+            }
+            if (!node.operator) {
+              node.operator = "=";
+              node.value = "*";
+            }
+            if (node.operator !== "=") {
+              throw Object.assign(
+                new Error(':vuln pseudo-class attribute selector only accepts "=" operator', node),
+                { code: "EQUERYATTR" }
+              );
+            }
+            if (!vuln[node._attribute]) {
+              vuln[node._attribute] = [];
+            }
+            vuln[node._attribute].push(node._value);
+          }
+          vulns.push(vuln);
+        }
+        astNode.vulns = vulns;
+        astNode.nodes.length = 0;
+      }
+    }, "fixupVuln");
+    var transformAst = /* @__PURE__ */ __name((selector) => {
+      selector.walk((nextAstNode) => {
+        switch (nextAstNode.value) {
+          case ":attr":
+            return fixupAttr(nextAstNode);
+          case ":is":
+          case ":has":
+          case ":not":
+            return fixupNestedPseudo(nextAstNode);
+          case ":path":
+            return fixupPaths(nextAstNode);
+          case ":semver":
+            return fixupSemverSpecs(nextAstNode);
+          case ":type":
+            return fixupTypes(nextAstNode);
+          case ":outdated":
+            return fixupOutdated(nextAstNode);
+          case ":vuln":
+            return fixupVuln(nextAstNode);
+        }
+      });
+    }, "transformAst");
+    var queryParser = /* @__PURE__ */ __name((query) => {
+      if (!query) {
+        return [];
+      }
+      return parser(transformAst).astSync(escapeSlashes(query), { lossless: false });
+    }, "queryParser");
+    module2.exports = {
+      parser: queryParser,
+      arrayDelimiter
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/query-selector-all.js
+var require_query_selector_all = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/query-selector-all.js"(exports2, module2) {
+    "use strict";
+    var { resolve } = require("node:path");
+    var { parser, arrayDelimiter } = require_lib40();
+    var localeCompare = require_string_locale_compare()("en");
+    var { log } = require_lib2();
+    var { minimatch } = require_commonjs4();
+    var npa = require_npa();
+    var pacote2 = require_lib30();
+    var semver2 = require_semver2();
+    var npmFetch = require_lib28();
+    var Results = class {
+      static {
+        __name(this, "Results");
+      }
+      #currentAstSelector;
+      #initialItems;
+      #inventory;
+      #outdatedCache = /* @__PURE__ */ new Map();
+      #vulnCache;
+      #pendingCombinator;
+      #results = /* @__PURE__ */ new Map();
+      #targetNode;
+      constructor(opts) {
+        this.#currentAstSelector = opts.rootAstNode.nodes[0];
+        this.#inventory = opts.inventory;
+        this.#initialItems = opts.initialItems;
+        this.#vulnCache = opts.vulnCache;
+        this.#targetNode = opts.targetNode;
+        this.currentResults = this.#initialItems;
+        this.flatOptions = opts.flatOptions || {};
+        this.currentAstNode = opts.rootAstNode;
+      }
+      get currentResults() {
+        return this.#results.get(this.#currentAstSelector);
+      }
+      set currentResults(value) {
+        this.#results.set(this.#currentAstSelector, value);
+      }
+      // retrieves the initial items to which start the filtering / matching
+      // for most of the different types of recognized ast nodes, e.g: class (aka
+      // depType), id, *, etc in different contexts we need to start with the
+      // current list of filtered results, for example a query for `.workspace`
+      // actually means the same as `*.workspace` so we want to start with the full
+      // inventory if that's the first ast node we're reading but if it appears in
+      // the middle of a query it should respect the previous filtered results,
+      // combinators are a special case in which we always want to have the
+      // complete inventory list in order to use the left-hand side ast node as a
+      // filter combined with the element on its right-hand side
+      get initialItems() {
+        const firstParsed = this.currentAstNode.parent.nodes[0] === this.currentAstNode && this.currentAstNode.parent.parent.type === "root";
+        if (firstParsed) {
+          return this.#initialItems;
+        }
+        if (this.currentAstNode.prev().type === "combinator") {
+          return this.#inventory;
+        }
+        return this.currentResults;
+      }
+      // combinators need information about previously filtered items along
+      // with info of the items parsed / retrieved from the selector right
+      // past the combinator, for this reason combinators are stored and
+      // only ran as the last part of each selector logic
+      processPendingCombinator(nextResults) {
+        if (this.#pendingCombinator) {
+          const res = this.#pendingCombinator(this.currentResults, nextResults);
+          this.#pendingCombinator = null;
+          this.currentResults = res;
+        } else {
+          this.currentResults = nextResults;
+        }
+      }
+      // when collecting results to a root astNode, we traverse the list of child
+      // selector nodes and collect all of their resulting arborist nodes into a
+      // single/flat Set of items, this ensures we also deduplicate items
+      collect(rootAstNode) {
+        return new Set(rootAstNode.nodes.flatMap((n) => this.#results.get(n)));
+      }
+      // selector types map to the '.type' property of the ast nodes via `${astNode.type}Type`
+      //
+      // attribute selector [name=value], etc
+      attributeType() {
+        const nextResults = this.initialItems.filter(
+          (node) => attributeMatch(this.currentAstNode, node.package)
+        );
+        this.processPendingCombinator(nextResults);
+      }
+      // dependency type selector (i.e. .prod, .dev, etc)
+      // css calls this class, we interpret is as dependency type
+      classType() {
+        const depTypeFn = depTypes[String(this.currentAstNode)];
+        if (!depTypeFn) {
+          throw Object.assign(
+            new Error(`\`${String(this.currentAstNode)}\` is not a supported dependency type.`),
+            { code: "EQUERYNODEPTYPE" }
+          );
+        }
+        const nextResults = depTypeFn(this.initialItems);
+        this.processPendingCombinator(nextResults);
+      }
+      // combinators (i.e. '>', ' ', '~')
+      combinatorType() {
+        this.#pendingCombinator = combinators[String(this.currentAstNode)];
+      }
+      // name selectors (i.e. #foo)
+      // css calls this id, we interpret it as name
+      idType() {
+        const name = this.currentAstNode.value;
+        const nextResults = this.initialItems.filter(
+          (node) => name === node.name || name === node.package.name
+        );
+        this.processPendingCombinator(nextResults);
+      }
+      // pseudo selectors (prefixed with :)
+      async pseudoType() {
+        const pseudoFn = `${this.currentAstNode.value.slice(1)}Pseudo`;
+        if (!this[pseudoFn]) {
+          throw Object.assign(
+            new Error(`\`${this.currentAstNode.value}\` is not a supported pseudo selector.`),
+            { code: "EQUERYNOPSEUDO" }
+          );
+        }
+        const nextResults = await this[pseudoFn]();
+        this.processPendingCombinator(nextResults);
+      }
+      selectorType() {
+        this.#currentAstSelector = this.currentAstNode;
+        if (!this.currentResults) {
+          this.currentResults = [];
+        }
+      }
+      universalType() {
+        this.processPendingCombinator(this.initialItems);
+      }
+      // pseudo selectors map to the 'value' property of the pseudo selectors in the ast nodes
+      // via selectors via `${value.slice(1)}Pseudo`
+      attrPseudo() {
+        const { lookupProperties, attributeMatcher } = this.currentAstNode;
+        return this.initialItems.filter((node) => {
+          let objs = [node.package];
+          for (const prop of lookupProperties) {
+            if (prop === arrayDelimiter) {
+              objs = objs.flat();
+              continue;
+            }
+            objs = objs.flatMap((obj) => obj[prop] || []);
+            const noAttr = objs.every((obj) => !obj);
+            if (noAttr) {
+              return false;
+            }
+          }
+          return objs.some((obj) => attributeMatch(attributeMatcher, obj));
+        });
+      }
+      emptyPseudo() {
+        return this.initialItems.filter((node) => node.edgesOut.size === 0);
+      }
+      extraneousPseudo() {
+        return this.initialItems.filter((node) => node.extraneous);
+      }
+      async hasPseudo() {
+        const found = [];
+        for (const item of this.initialItems) {
+          const res = await retrieveNodesFromParsedAst({
+            flatOptions: this.flatOptions,
+            initialItems: [item],
+            inventory: this.#inventory,
+            rootAstNode: this.currentAstNode.nestedNode,
+            targetNode: item,
+            vulnCache: this.#vulnCache
+          });
+          if (res.size > 0) {
+            found.push(item);
+          }
+        }
+        return found;
+      }
+      invalidPseudo() {
+        const found = [];
+        for (const node of this.initialItems) {
+          for (const edge of node.edgesIn) {
+            if (edge.invalid) {
+              found.push(node);
+              break;
+            }
+          }
+        }
+        return found;
+      }
+      async isPseudo() {
+        const res = await retrieveNodesFromParsedAst({
+          flatOptions: this.flatOptions,
+          initialItems: this.initialItems,
+          inventory: this.#inventory,
+          rootAstNode: this.currentAstNode.nestedNode,
+          targetNode: this.currentAstNode,
+          vulnCache: this.#vulnCache
+        });
+        return [...res];
+      }
+      linkPseudo() {
+        return this.initialItems.filter((node) => node.isLink || node.isTop && !node.isRoot);
+      }
+      missingPseudo() {
+        return this.#inventory.reduce((res, node) => {
+          for (const edge of node.edgesOut.values()) {
+            if (edge.missing) {
+              const pkg = { name: edge.name, version: edge.spec };
+              const item = new this.#targetNode.constructor({ pkg });
+              item.queryContext = {
+                missing: true
+              };
+              item.edgesIn = /* @__PURE__ */ new Set([edge]);
+              res.push(item);
+            }
+          }
+          return res;
+        }, []);
+      }
+      async notPseudo() {
+        const res = await retrieveNodesFromParsedAst({
+          flatOptions: this.flatOptions,
+          initialItems: this.initialItems,
+          inventory: this.#inventory,
+          rootAstNode: this.currentAstNode.nestedNode,
+          targetNode: this.currentAstNode,
+          vulnCache: this.#vulnCache
+        });
+        const internalSelector = new Set(res);
+        return this.initialItems.filter((node) => !internalSelector.has(node));
+      }
+      overriddenPseudo() {
+        return this.initialItems.filter((node) => node.overridden);
+      }
+      pathPseudo() {
+        return this.initialItems.filter((node) => {
+          if (!this.currentAstNode.pathValue) {
+            return true;
+          }
+          return minimatch(
+            node.realpath.replace(/\\+/g, "/"),
+            resolve(node.root.realpath, this.currentAstNode.pathValue).replace(/\\+/g, "/")
+          );
+        });
+      }
+      privatePseudo() {
+        return this.initialItems.filter((node) => node.package.private);
+      }
+      rootPseudo() {
+        return this.initialItems.filter((node) => node === this.#targetNode.root);
+      }
+      scopePseudo() {
+        return this.initialItems.filter((node) => node === this.#targetNode);
+      }
+      semverPseudo() {
+        const {
+          attributeMatcher,
+          lookupProperties,
+          semverFunc = "infer",
+          semverValue
+        } = this.currentAstNode;
+        const { qualifiedAttribute } = attributeMatcher;
+        if (!semverValue) {
+          log.warn("query", "usage of :semver() with no parameters is deprecated");
+          return this.initialItems;
+        }
+        if (!semver2.valid(semverValue) && !semver2.validRange(semverValue)) {
+          throw Object.assign(
+            new Error(`\`${semverValue}\` is not a valid semver version or range`),
+            { code: "EQUERYINVALIDSEMVER" }
+          );
+        }
+        const valueIsVersion = !!semver2.valid(semverValue);
+        const nodeMatches = /* @__PURE__ */ __name((node, obj) => {
+          if (attributeMatcher.operator) {
+            if (!attributeMatch(attributeMatcher, obj)) {
+              return false;
+            }
+          }
+          const attrValue = obj[qualifiedAttribute];
+          if (!semver2.valid(attrValue) && !semver2.validRange(attrValue) || typeof attrValue !== "string") {
+            return false;
+          }
+          const attrIsVersion = !!semver2.valid(attrValue);
+          let actualFunc = semverFunc;
+          if (actualFunc === "infer") {
+            if (valueIsVersion && attrIsVersion) {
+              actualFunc = "eq";
+            } else if (!valueIsVersion && !attrIsVersion) {
+              actualFunc = "intersects";
+            } else {
+              actualFunc = "satisfies";
+            }
+          }
+          if (["eq", "neq", "gt", "gte", "lt", "lte"].includes(actualFunc)) {
+            if (!valueIsVersion || !attrIsVersion) {
+              return false;
+            }
+            return semver2[actualFunc](attrValue, semverValue);
+          } else if (["gtr", "ltr", "satisfies"].includes(actualFunc)) {
+            if (!valueIsVersion && !attrIsVersion) {
+              return false;
+            }
+            return valueIsVersion ? semver2[actualFunc](semverValue, attrValue) : semver2[actualFunc](attrValue, semverValue);
+          } else if (["intersects", "subset"].includes(actualFunc)) {
+            return semver2[actualFunc](attrValue, semverValue);
+          } else {
+            throw Object.assign(
+              new Error(`\`semver.${actualFunc}\` is not a supported operator.`),
+              { code: "EQUERYINVALIDOPERATOR" }
+            );
+          }
+        }, "nodeMatches");
+        return this.initialItems.filter((node) => {
+          if (!lookupProperties.length) {
+            return nodeMatches(node, node.package);
+          }
+          let objs = [node.package];
+          for (const prop of lookupProperties) {
+            if (prop === arrayDelimiter) {
+              objs = objs.flat();
+              continue;
+            }
+            objs = objs.flatMap((obj) => obj[prop] || []);
+            const noAttr = objs.every((obj) => !obj);
+            if (noAttr) {
+              return false;
+            }
+            return objs.some((obj) => nodeMatches(node, obj));
+          }
+        });
+      }
+      typePseudo() {
+        if (!this.currentAstNode.typeValue) {
+          return this.initialItems;
+        }
+        return this.initialItems.flatMap((node) => {
+          const found = [];
+          for (const edge of node.edgesIn) {
+            if (npa(`${edge.name}@${edge.spec}`).type === this.currentAstNode.typeValue) {
+              found.push(edge.to);
+            }
+          }
+          return found;
+        });
+      }
+      dedupedPseudo() {
+        return this.initialItems.filter((node) => node.target.edgesIn.size > 1);
+      }
+      async vulnPseudo() {
+        if (!this.initialItems.length) {
+          return this.initialItems;
+        }
+        if (!this.#vulnCache) {
+          const packages = {};
+          this.initialItems.map((node) => {
+            if (node.isProjectRoot || node.package.private) {
+              return;
+            }
+            if (!packages[node.name]) {
+              packages[node.name] = [];
+            }
+            if (!packages[node.name].includes(node.version)) {
+              packages[node.name].push(node.version);
+            }
+          });
+          const res = await npmFetch("/-/npm/v1/security/advisories/bulk", {
+            ...this.flatOptions,
+            registry: this.flatOptions.auditRegistry || this.flatOptions.registry,
+            method: "POST",
+            gzip: true,
+            body: packages
+          });
+          this.#vulnCache = await res.json();
+        }
+        const advisories = this.#vulnCache;
+        const { vulns } = this.currentAstNode;
+        return this.initialItems.filter((item) => {
+          const vulnerable = advisories[item.name]?.filter((advisory) => {
+            if (!semver2.intersects(advisory.vulnerable_versions, item.version)) {
+              return false;
+            }
+            if (!vulns) {
+              return true;
+            }
+            for (const vuln of vulns) {
+              if (vuln.severity && !vuln.severity.includes("*")) {
+                if (!vuln.severity.includes(advisory.severity)) {
+                  continue;
+                }
+              }
+              if (vuln?.cwe) {
+                if (vuln.cwe.includes("*")) {
+                  if (!advisory.cwe.length) {
+                    continue;
+                  }
+                } else if (!vuln.cwe.every((cwe) => advisory.cwe.includes(`CWE-${cwe}`))) {
+                  continue;
+                }
+              }
+              return true;
+            }
+          });
+          if (vulnerable?.length) {
+            item.queryContext = {
+              advisories: vulnerable
+            };
+            return true;
+          }
+          return false;
+        });
+      }
+      async outdatedPseudo() {
+        const { outdatedKind = "any" } = this.currentAstNode;
+        const initialResults = await Promise.all(this.initialItems.map(async (node) => {
+          if (node.isProjectRoot) {
+            return false;
+          }
+          if (node.package.private) {
+            return false;
+          }
+          if (!this.#outdatedCache.has(node.name)) {
+            this.#outdatedCache.set(node.name, getPackageVersions(node.name, this.flatOptions));
+          }
+          const availableVersions = await this.#outdatedCache.get(node.name);
+          node.queryContext.versions = availableVersions;
+          const greaterVersions = availableVersions.filter((available) => {
+            return semver2.gt(available, node.version);
+          });
+          if (!greaterVersions.length) {
+            return false;
+          }
+          if (outdatedKind === "any") {
+            return node;
+          }
+          if (["major", "minor", "patch"].includes(outdatedKind)) {
+            const filteredVersions = greaterVersions.filter((version) => {
+              return semver2.diff(node.version, version) === outdatedKind;
+            });
+            if (!filteredVersions.length) {
+              return false;
+            }
+            return node;
+          }
+          if (outdatedKind === "in-range") {
+            const inRangeContext = [];
+            for (const edge of node.edgesIn) {
+              const inRangeVersions = greaterVersions.filter((version) => {
+                return semver2.satisfies(version, edge.spec);
+              });
+              if (!inRangeVersions.length) {
+                continue;
+              }
+              inRangeContext.push({
+                from: edge.from.location,
+                versions: inRangeVersions
+              });
+            }
+            if (!inRangeContext.length) {
+              return false;
+            }
+            node.queryContext.outdated = {
+              ...node.queryContext.outdated,
+              inRange: inRangeContext
+            };
+            return node;
+          }
+          if (outdatedKind === "out-of-range") {
+            const outOfRangeContext = [];
+            for (const edge of node.edgesIn) {
+              const outOfRangeVersions = greaterVersions.filter((version) => {
+                return !semver2.satisfies(version, edge.spec);
+              });
+              if (!outOfRangeVersions.length) {
+                continue;
+              }
+              outOfRangeContext.push({
+                from: edge.from.location,
+                versions: outOfRangeVersions
+              });
+            }
+            if (!outOfRangeContext.length) {
+              return false;
+            }
+            node.queryContext.outdated = {
+              ...node.queryContext.outdated,
+              outOfRange: outOfRangeContext
+            };
+            return node;
+          }
+          return false;
+        }));
+        return initialResults.filter(Boolean);
+      }
+    };
+    var attributeOperators = {
+      // attribute value is equivalent
+      "="({ attr, value }) {
+        return attr === value;
+      },
+      // attribute value contains word
+      "~="({ attr, value }) {
+        return (attr.match(/\w+/g) || []).includes(value);
+      },
+      // attribute value contains string
+      "*="({ attr, value }) {
+        return attr.includes(value);
+      },
+      // attribute value is equal or starts with
+      "|="({ attr, value }) {
+        return attr.startsWith(`${value}-`);
+      },
+      // attribute value starts with
+      "^="({ attr, value }) {
+        return attr.startsWith(value);
+      },
+      // attribute value ends with
+      "$="({ attr, value }) {
+        return attr.endsWith(value);
+      }
+    };
+    var attributeOperator = /* @__PURE__ */ __name(({ attr, value, insensitive, operator }) => {
+      if (typeof attr === "number") {
+        attr = String(attr);
+      }
+      if (typeof attr !== "string") {
+        return false;
+      }
+      if (insensitive) {
+        attr = attr.toLowerCase();
+      }
+      return attributeOperators[operator]({
+        attr,
+        insensitive,
+        value
+      });
+    }, "attributeOperator");
+    var attributeMatch = /* @__PURE__ */ __name((matcher, obj) => {
+      const insensitive = !!matcher.insensitive;
+      const operator = matcher.operator || "";
+      const attribute = matcher.qualifiedAttribute;
+      let value = matcher.value || "";
+      if (operator === "") {
+        return Boolean(obj[attribute]);
+      }
+      if (insensitive) {
+        value = value.toLowerCase();
+      }
+      if (Array.isArray(obj[attribute])) {
+        return obj[attribute].find((i, index) => {
+          const attr = obj[attribute][index] || "";
+          return attributeOperator({ attr, value, insensitive, operator });
+        });
+      } else {
+        const attr = obj[attribute] || "";
+        return attributeOperator({ attr, value, insensitive, operator });
+      }
+    }, "attributeMatch");
+    var edgeIsType = /* @__PURE__ */ __name((node, type, seen = /* @__PURE__ */ new Set()) => {
+      for (const edgeIn of node.edgesIn) {
+        if (seen.has(edgeIn)) {
+          continue;
+        }
+        seen.add(edgeIn);
+        if (edgeIn.type === type || edgeIn.from[type] || edgeIsType(edgeIn.from, type, seen)) {
+          return true;
+        }
+      }
+      return false;
+    }, "edgeIsType");
+    var filterByType = /* @__PURE__ */ __name((nodes, type) => {
+      const found = [];
+      for (const node of nodes) {
+        if (node[type] || edgeIsType(node, type)) {
+          found.push(node);
+        }
+      }
+      return found;
+    }, "filterByType");
+    var depTypes = {
+      // dependency
+      ".prod"(prevResults) {
+        const found = [];
+        for (const node of prevResults) {
+          if (!node.dev) {
+            found.push(node);
+          }
+        }
+        return found;
+      },
+      // devDependency
+      ".dev"(prevResults) {
+        return filterByType(prevResults, "dev");
+      },
+      // optionalDependency
+      ".optional"(prevResults) {
+        return filterByType(prevResults, "optional");
+      },
+      // peerDependency
+      ".peer"(prevResults) {
+        return filterByType(prevResults, "peer");
+      },
+      // workspace
+      ".workspace"(prevResults) {
+        return prevResults.filter((node) => node.isWorkspace);
+      },
+      // bundledDependency
+      ".bundled"(prevResults) {
+        return prevResults.filter((node) => node.inBundle);
+      }
+    };
+    var hasParent = /* @__PURE__ */ __name((node, compareNodes) => {
+      for (let compareNode of compareNodes) {
+        if (compareNode.isLink) {
+          compareNode = compareNode.target;
+        }
+        if (node.isTop && node.resolveParent === compareNode) {
+          return true;
+        }
+        for (const edge of node.edgesIn) {
+          if (edge && edge.from === compareNode) {
+            return true;
+          }
+        }
+      }
+      return false;
+    }, "hasParent");
+    var hasAscendant = /* @__PURE__ */ __name((node, compareNodes, seen = /* @__PURE__ */ new Set()) => {
+      if (hasParent(node, compareNodes)) {
+        return true;
+      }
+      if (node.isTop && node.resolveParent) {
+        if (hasAscendant(node.resolveParent, compareNodes)) {
+          return true;
+        }
+      }
+      for (const edge of node.edgesIn) {
+        if (seen.has(edge)) {
+          continue;
+        }
+        seen.add(edge);
+        if (edge && edge.from && hasAscendant(edge.from, compareNodes, seen)) {
+          return true;
+        }
+      }
+      for (const linkNode of node.linksIn) {
+        if (hasAscendant(linkNode, compareNodes, seen)) {
+          return true;
+        }
+      }
+      return false;
+    }, "hasAscendant");
+    var combinators = {
+      // direct descendant
+      ">"(prevResults, nextResults) {
+        return nextResults.filter((node) => hasParent(node, prevResults));
+      },
+      // any descendant
+      " "(prevResults, nextResults) {
+        return nextResults.filter((node) => hasAscendant(node, prevResults));
+      },
+      // sibling
+      "~"(prevResults, nextResults) {
+        const parentNodes = /* @__PURE__ */ new Set();
+        for (const node of prevResults) {
+          for (const edge of node.edgesIn) {
+            parentNodes.add(edge.from);
+          }
+        }
+        return nextResults.filter(
+          (node) => !prevResults.includes(node) && hasParent(node, [...parentNodes])
+        );
+      }
+    };
+    var getPackageVersions = /* @__PURE__ */ __name(async (name, opts) => {
+      let packument;
+      try {
+        packument = await pacote2.packument(name, {
+          ...opts,
+          fullMetadata: false
+          // we only need the corgi
+        });
+      } catch (err) {
+        log.warn("query", `could not retrieve packument for ${name}: ${err.message}`);
+        return [];
+      }
+      let candidates = Object.keys(packument.versions).sort(semver2.compare);
+      if (packument.time && opts.before) {
+        candidates = candidates.filter((version) => {
+          if (!packument.time[version]) {
+            return false;
+          }
+          return Date.parse(packument.time[version]) <= opts.before;
+        });
+      }
+      return candidates;
+    }, "getPackageVersions");
+    var retrieveNodesFromParsedAst = /* @__PURE__ */ __name(async (opts) => {
+      const rootAstNode = opts.rootAstNode;
+      if (!rootAstNode.nodes) {
+        return /* @__PURE__ */ new Set();
+      }
+      const results = new Results(opts);
+      const astNodeQueue = /* @__PURE__ */ new Set();
+      rootAstNode.walk((nextAstNode) => {
+        astNodeQueue.add(nextAstNode);
+      });
+      for (const nextAstNode of astNodeQueue) {
+        results.currentAstNode = nextAstNode;
+        const updateFn = `${results.currentAstNode.type}Type`;
+        if (typeof results[updateFn] !== "function") {
+          throw Object.assign(
+            new Error(`\`${results.currentAstNode.type}\` is not a supported selector.`),
+            { code: "EQUERYNOSELECTOR" }
+          );
+        }
+        await results[updateFn]();
+      }
+      return results.collect(rootAstNode);
+    }, "retrieveNodesFromParsedAst");
+    var querySelectorAll = /* @__PURE__ */ __name(async (targetNode, query, flatOptions) => {
+      const inventory = [...targetNode.root.inventory.values()];
+      const res = await retrieveNodesFromParsedAst({
+        initialItems: inventory,
+        inventory,
+        flatOptions,
+        rootAstNode: parser(query),
+        targetNode
+      });
+      return [...res].sort((a, b) => localeCompare(a.location, b.location));
+    }, "querySelectorAll");
+    module2.exports = querySelectorAll;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/node.js
+var require_node5 = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/node.js"(exports2, module2) {
+    var PackageJson = require_lib11();
+    var nameFromFolder = require_lib32();
+    var npa = require_npa();
+    var semver2 = require_semver2();
+    var util = require("node:util");
+    var { getPaths: getBinPaths } = require_lib39();
+    var { log } = require_lib2();
+    var { resolve, relative, dirname, basename } = require("node:path");
+    var { walkUp } = require_commonjs10();
+    var CaseInsensitiveMap = require_case_insensitive_map();
+    var Edge = require_edge();
+    var Inventory = require_inventory();
+    var OverrideSet = require_override_set();
+    var consistentResolve = require_consistent_resolve();
+    var debug = require_debug2();
+    var gatherDepSet = require_gather_dep_set();
+    var printableTree = require_printable();
+    var querySelectorAll = require_query_selector_all();
+    var relpath = require_relpath();
+    var treeCheck = require_tree_check();
+    var _package = Symbol("_package");
+    var _parent = Symbol("_parent");
+    var _target = Symbol.for("_target");
+    var _fsParent = Symbol("_fsParent");
+    var _reloadNamedEdges = Symbol("_reloadNamedEdges");
+    var _loadDeps = Symbol.for("Arborist.Node._loadDeps");
+    var _refreshLocation = Symbol.for("_refreshLocation");
+    var _changePath = Symbol.for("_changePath");
+    var _delistFromMeta = Symbol.for("_delistFromMeta");
+    var _explain = Symbol("_explain");
+    var _explanation = Symbol("_explanation");
+    var Node = class _Node {
+      static {
+        __name(this, "Node");
+      }
+      #global;
+      #meta;
+      #root;
+      #workspaces;
+      constructor(options) {
+        const {
+          root,
+          path,
+          realpath,
+          parent,
+          error,
+          meta,
+          fsParent,
+          resolved,
+          integrity,
+          // allow setting name explicitly when we haven't set a path yet
+          name,
+          children,
+          fsChildren,
+          installLinks = false,
+          legacyPeerDeps = false,
+          linksIn,
+          isInStore = false,
+          hasShrinkwrap,
+          overrides,
+          loadOverrides = false,
+          extraneous = true,
+          dev = true,
+          optional = true,
+          devOptional = true,
+          peer = true,
+          global: global2 = false,
+          dummy = false,
+          sourceReference = null,
+          inert = false
+        } = options;
+        this.queryContext = {};
+        this.#global = global2;
+        this.#workspaces = null;
+        this.errors = error ? [error] : [];
+        this.isInStore = isInStore;
+        this.sourceReference = sourceReference;
+        if (sourceReference) {
+          this[_package] = sourceReference.package;
+        } else {
+          const pkg = new PackageJson();
+          let content = {};
+          if (options.pkg && typeof options.pkg === "object") {
+            content = options.pkg;
+          }
+          pkg.fromContent(content);
+          pkg.syncNormalize();
+          this[_package] = pkg.content;
+        }
+        this.name = name || nameFromFolder(path || this.package.name || realpath) || this.package.name || null;
+        this.path = path ? resolve(path) : null;
+        if (!this.name && (!this.path || this.path !== dirname(this.path))) {
+          throw new TypeError("could not detect node name from path or package");
+        }
+        this.realpath = !this.isLink ? this.path : resolve(realpath);
+        this.resolved = resolved || null;
+        if (!this.resolved) {
+          const resolved2 = consistentResolve(this.package._resolved);
+          if (resolved2 && !(/^file:/.test(resolved2) && this.package._where)) {
+            this.resolved = resolved2;
+          }
+        }
+        this.integrity = integrity || this.package._integrity || null;
+        this.hasShrinkwrap = hasShrinkwrap || this.package._hasShrinkwrap || false;
+        this.installLinks = installLinks;
+        this.legacyPeerDeps = legacyPeerDeps;
+        this.children = new CaseInsensitiveMap();
+        this.fsChildren = /* @__PURE__ */ new Set();
+        this.inventory = new Inventory();
+        this.tops = /* @__PURE__ */ new Set();
+        this.linksIn = new Set(linksIn || []);
+        if (!dummy) {
+          this.dev = dev;
+          this.optional = optional;
+          this.devOptional = devOptional;
+          this.peer = peer;
+          this.extraneous = extraneous;
+          this.dummy = false;
+        } else {
+          this.dummy = true;
+          this.dev = false;
+          this.optional = false;
+          this.devOptional = false;
+          this.peer = false;
+          this.extraneous = false;
+        }
+        this.inert = inert;
+        this.edgesIn = /* @__PURE__ */ new Set();
+        this.edgesOut = new CaseInsensitiveMap();
+        if (overrides) {
+          this.overrides = overrides;
+        } else if (loadOverrides) {
+          const overrides2 = this.package.overrides || {};
+          if (Object.keys(overrides2).length > 0) {
+            this.overrides = new OverrideSet({
+              overrides: this.package.overrides
+            });
+          }
+        }
+        this.meta = meta;
+        this[_parent] = null;
+        this.parent = parent || null;
+        this[_fsParent] = null;
+        this.fsParent = fsParent || null;
+        if (!parent && !fsParent) {
+          this.root = root || null;
+        }
+        if (children) {
+          for (const c of children) {
+            new _Node({ ...c, parent: this });
+          }
+        }
+        if (fsChildren) {
+          for (const c of fsChildren) {
+            new _Node({ ...c, fsParent: this });
+          }
+        }
+        this[_loadDeps]();
+      }
+      get meta() {
+        return this.#meta;
+      }
+      set meta(meta) {
+        this.#meta = meta;
+        if (meta) {
+          meta.add(this);
+        }
+      }
+      get global() {
+        if (this.#root === this) {
+          return this.#global;
+        }
+        return this.#root.global;
+      }
+      // true for packages installed directly in the global node_modules folder
+      get globalTop() {
+        return this.global && this.parent && this.parent.isProjectRoot;
+      }
+      get workspaces() {
+        return this.#workspaces;
+      }
+      set workspaces(workspaces) {
+        if (this.#workspaces) {
+          for (const name of this.#workspaces.keys()) {
+            if (!workspaces.has(name)) {
+              this.edgesOut.get(name).detach();
+            }
+          }
+        }
+        this.#workspaces = workspaces;
+        this.#loadWorkspaces();
+        this[_loadDeps]();
+      }
+      get binPaths() {
+        if (!this.parent) {
+          return [];
+        }
+        return getBinPaths({
+          pkg: this.package,
+          path: this.path,
+          global: this.global,
+          top: this.globalTop
+        });
+      }
+      get hasInstallScript() {
+        const { hasInstallScript, scripts } = this.package;
+        const { install, preinstall, postinstall } = scripts || {};
+        return !!(hasInstallScript || install || preinstall || postinstall);
+      }
+      get version() {
+        return this.package.version || "";
+      }
+      get packageName() {
+        return this.package.name || null;
+      }
+      get pkgid() {
+        const { name = "", version = "" } = this.package;
+        const { isProjectRoot } = this;
+        const myname = isProjectRoot ? name || this.name : this.name;
+        const alias = !isProjectRoot && name && myname !== name ? `npm:${name}@` : "";
+        return `${myname}@${alias}${version}`;
+      }
+      get overridden() {
+        if (!this.overrides) {
+          return false;
+        }
+        if (!this.overrides.value) {
+          return false;
+        }
+        if (this.overrides.name !== this.name) {
+          return false;
+        }
+        for (const edge of this.edgesIn) {
+          if (edge.overrides && edge.overrides.name === this.name && edge.overrides.value === this.version) {
+            if (!edge.overrides.isEqual(edge.from.overrides)) {
+              return true;
+            }
+          }
+        }
+        return false;
+      }
+      get package() {
+        return this[_package];
+      }
+      set package(pkg) {
+        for (const edge of this.edgesOut.values()) {
+          edge.detach();
+        }
+        this[_explanation] = null;
+        if (!pkg || typeof pkg !== "object") {
+          debug(() => {
+            throw new Error("setting Node.package to non-object");
+          });
+          pkg = {};
+        }
+        this[_package] = pkg;
+        this.#loadWorkspaces();
+        this[_loadDeps]();
+        this.edgesIn.forEach((edge) => edge.reload(true));
+      }
+      // node.explain(nodes seen already, edge we're trying to satisfy
+      // if edge is not specified, it lists every edge into the node.
+      explain(edge = null, seen = []) {
+        if (this[_explanation]) {
+          return this[_explanation];
+        }
+        return this[_explanation] = this[_explain](edge, seen);
+      }
+      [_explain](edge, seen) {
+        if (this.isProjectRoot && !this.sourceReference) {
+          return {
+            location: this.path
+          };
+        }
+        const why = {
+          name: this.isProjectRoot || this.isTop ? this.packageName : this.name,
+          version: this.package.version
+        };
+        if (this.errors.length || !this.packageName || !this.package.version) {
+          why.errors = this.errors.length ? this.errors : [
+            new Error("invalid package: lacks name and/or version")
+          ];
+          why.package = this.package;
+        }
+        if (this.root.sourceReference) {
+          const { name, version } = this.root.package;
+          why.whileInstalling = {
+            name,
+            version,
+            path: this.root.sourceReference.path
+          };
+        }
+        if (this.sourceReference) {
+          return this.sourceReference.explain(edge, seen);
+        }
+        if (seen.includes(this)) {
+          return why;
+        }
+        why.location = this.location;
+        why.isWorkspace = this.isWorkspace;
+        seen = seen.concat(this);
+        why.dependents = [];
+        if (edge) {
+          why.dependents.push(edge.explain(seen));
+        } else {
+          const edges = [];
+          for (const edge2 of this.edgesIn) {
+            if (!edge2.valid && !edge2.from.isProjectRoot) {
+              continue;
+            }
+            edges.push(edge2);
+          }
+          for (const edge2 of edges) {
+            why.dependents.push(edge2.explain(seen));
+          }
+        }
+        if (this.linksIn.size) {
+          why.linksIn = [...this.linksIn].map((link) => link[_explain](edge, seen));
+        }
+        return why;
+      }
+      isDescendantOf(node) {
+        for (let p = this; p; p = p.resolveParent) {
+          if (p === node) {
+            return true;
+          }
+        }
+        return false;
+      }
+      shouldOmit(omitSet) {
+        if (!omitSet.size) {
+          return false;
+        }
+        const { top } = this;
+        if (!top.isProjectRoot && !top.isWorkspace) {
+          return false;
+        }
+        return this.peer && omitSet.has("peer") || this.dev && omitSet.has("dev") || this.optional && omitSet.has("optional") || this.devOptional && omitSet.has("optional") && omitSet.has("dev");
+      }
+      getBundler(path = []) {
+        if (path.includes(this)) {
+          return null;
+        }
+        path.push(this);
+        const parent = this[_parent];
+        if (!parent) {
+          return null;
+        }
+        const pBundler = parent.getBundler(path);
+        if (pBundler) {
+          return pBundler;
+        }
+        const ppkg = parent.package;
+        const bd = ppkg && ppkg.bundleDependencies;
+        if (Array.isArray(bd) && bd.includes(this.name)) {
+          return parent;
+        }
+        for (const edge of this.edgesIn) {
+          const eBundler = edge.from.getBundler(path);
+          if (!eBundler) {
+            continue;
+          }
+          if (eBundler === parent) {
+            return eBundler;
+          }
+        }
+        return null;
+      }
+      get inBundle() {
+        return !!this.getBundler();
+      }
+      // when reifying, if a package is technically in a bundleDependencies list,
+      // but that list is the root project, we still have to install it.  This
+      // getter returns true if it's in a dependency's bundle list, not the root's.
+      get inDepBundle() {
+        const bundler = this.getBundler();
+        return !!bundler && bundler !== this.root;
+      }
+      get isWorkspace() {
+        if (this.isProjectRoot) {
+          return false;
+        }
+        const { root } = this;
+        const { type, to } = root.edgesOut.get(this.packageName) || {};
+        return type === "workspace" && to && (to.target === this || to === this);
+      }
+      get isRoot() {
+        return this === this.root;
+      }
+      get isProjectRoot() {
+        return this === this.root || this === this.root.target;
+      }
+      get isRegistryDependency() {
+        if (this.edgesIn.size === 0) {
+          return false;
+        }
+        for (const edge of this.edgesIn) {
+          if (!npa(edge.spec).registry) {
+            return false;
+          }
+        }
+        return true;
+      }
+      *ancestry() {
+        for (let anc = this; anc; anc = anc.resolveParent) {
+          yield anc;
+        }
+      }
+      set root(root) {
+        while (root && root.root !== root) {
+          root = root.root;
+        }
+        root = root || this;
+        this[_delistFromMeta]();
+        if (!this.path || !root.realpath || !root.path) {
+          this.#root = root;
+          return;
+        }
+        this.#root = this;
+        for (const link of this.linksIn) {
+          link[_target] = null;
+          this.linksIn.delete(link);
+        }
+        const { target } = this;
+        if (this.isLink) {
+          if (target) {
+            target.linksIn.delete(this);
+            if (target.root === this) {
+              target[_delistFromMeta]();
+            }
+          }
+          this[_target] = null;
+        }
+        if (this.parent && this.parent.root !== root) {
+          this.parent.children.delete(this.name);
+          this[_parent] = null;
+        }
+        if (this.fsParent && this.fsParent.root !== root) {
+          this.fsParent.fsChildren.delete(this);
+          this[_fsParent] = null;
+        }
+        if (root === this) {
+          this[_refreshLocation]();
+        } else {
+          const loc = relpath(root.realpath, this.path);
+          const current = root.inventory.get(loc);
+          if (current) {
+            current.root = null;
+          }
+          this.#root = root;
+          this[_refreshLocation]();
+          for (const p of walkUp(dirname(this.path))) {
+            if (p === this.path) {
+              continue;
+            }
+            const ploc = relpath(root.realpath, p);
+            const parent = root.inventory.get(ploc);
+            if (parent) {
+              if (parent.isLink) {
+                debug(() => {
+                  throw Object.assign(new Error("assigning parentage to link"), {
+                    path: this.path,
+                    parent: parent.path,
+                    parentReal: parent.realpath
+                  });
+                });
+                continue;
+              }
+              const childLoc = `${ploc}${ploc ? "/" : ""}node_modules/${this.name}`;
+              const isParent = this.location === childLoc;
+              if (isParent) {
+                const oldChild = parent.children.get(this.name);
+                if (oldChild && oldChild !== this) {
+                  oldChild.root = null;
+                }
+                if (this.parent) {
+                  this.parent.children.delete(this.name);
+                  this.parent[_reloadNamedEdges](this.name);
+                }
+                parent.children.set(this.name, this);
+                this[_parent] = parent;
+                if (!this.isLink) {
+                  parent[_reloadNamedEdges](this.name);
+                }
+              } else {
+                if (this.fsParent) {
+                  this.fsParent.fsChildren.delete(this);
+                }
+                parent.fsChildren.add(this);
+                this[_fsParent] = parent;
+              }
+              break;
+            }
+          }
+          if (!this.parent) {
+            root.tops.add(this);
+          } else {
+            root.tops.delete(this);
+          }
+          const nmloc = `${this.location}${this.location ? "/" : ""}node_modules/`;
+          for (const child of root.tops) {
+            const isChild = child.location === nmloc + child.name;
+            const isFsChild = dirname(child.path).startsWith(this.path) && child !== this && !child.parent && (!child.fsParent || child.fsParent === this || dirname(this.path).startsWith(child.fsParent.path));
+            if (!isChild && !isFsChild) {
+              continue;
+            }
+            if (this.isLink) {
+              child.root = null;
+            } else {
+              if (child.fsParent) {
+                child.fsParent.fsChildren.delete(child);
+              }
+              child[_fsParent] = null;
+              if (isChild) {
+                this.children.set(child.name, child);
+                child[_parent] = this;
+                root.tops.delete(child);
+              } else {
+                this.fsChildren.add(child);
+                child[_fsParent] = this;
+              }
+            }
+          }
+          for (const node of root.inventory.query("realpath", this.realpath)) {
+            if (node === this) {
+              continue;
+            }
+            debug(() => {
+              if (node.root !== root) {
+                throw new Error("inventory contains node from other root");
+              }
+            });
+            if (this.isLink) {
+              const target2 = node.target;
+              this[_target] = target2;
+              this[_package] = target2.package;
+              target2.linksIn.add(this);
+              if (this.parent) {
+                this.parent[_reloadNamedEdges](this.name);
+              }
+              break;
+            } else {
+              if (node.isLink) {
+                node[_target] = this;
+                node[_package] = this.package;
+                this.linksIn.add(node);
+                if (node.parent) {
+                  node.parent[_reloadNamedEdges](node.name);
+                }
+              } else {
+                debug(() => {
+                  throw Object.assign(new Error("duplicate node in root setter"), {
+                    path: this.path,
+                    realpath: this.realpath,
+                    root: root.realpath
+                  });
+                });
+              }
+            }
+          }
+        }
+        for (const edge of this.edgesIn) {
+          if (edge.from.root !== root) {
+            edge.reload();
+          }
+        }
+        for (const edge of this.edgesOut.values()) {
+          if (!edge.to || edge.to.root !== root) {
+            edge.reload();
+          }
+        }
+        const family = new Set([
+          ...this.fsChildren,
+          ...this.children.values(),
+          ...this.inventory.values()
+        ].filter((n) => n !== this));
+        for (const child of family) {
+          if (child.root !== root) {
+            child[_delistFromMeta]();
+            child[_parent] = null;
+            this.children.delete(child.name);
+            child[_fsParent] = null;
+            this.fsChildren.delete(child);
+            for (const l of child.linksIn) {
+              l[_target] = null;
+              child.linksIn.delete(l);
+            }
+          }
+        }
+        for (const child of family) {
+          if (child.root !== root) {
+            child.root = root;
+          }
+        }
+        if (this.isLink && target && !this.target && root !== this) {
+          target.root = root;
+        }
+        treeCheck(this);
+        if (this !== root) {
+          treeCheck(root);
+        }
+      }
+      get root() {
+        return this.#root || this;
+      }
+      #loadWorkspaces() {
+        if (!this.#workspaces) {
+          return;
+        }
+        for (const [name, path] of this.#workspaces.entries()) {
+          new Edge({ from: this, name, spec: `file:${path}`, type: "workspace" });
+        }
+      }
+      [_loadDeps]() {
+        const pd = this.package.peerDependencies;
+        const ad = this.package.acceptDependencies || {};
+        if (pd && typeof pd === "object" && !this.legacyPeerDeps) {
+          const pm = this.package.peerDependenciesMeta || {};
+          const peerDependencies = {};
+          const peerOptional = {};
+          for (const [name, dep] of Object.entries(pd)) {
+            if (pm[name]?.optional) {
+              peerOptional[name] = dep;
+            } else {
+              peerDependencies[name] = dep;
+            }
+          }
+          this.#loadDepType(peerDependencies, "peer", ad);
+          this.#loadDepType(peerOptional, "peerOptional", ad);
+        }
+        this.#loadDepType(this.package.dependencies, "prod", ad);
+        this.#loadDepType(this.package.optionalDependencies, "optional", ad);
+        const { globalTop, isTop, path, sourceReference } = this;
+        const {
+          globalTop: srcGlobalTop,
+          isTop: srcTop,
+          path: srcPath
+        } = sourceReference || {};
+        const thisDev = isTop && !globalTop && path;
+        const srcDev = !sourceReference || srcTop && !srcGlobalTop && srcPath;
+        if (thisDev && srcDev) {
+          this.#loadDepType(this.package.devDependencies, "dev", ad);
+        }
+      }
+      #loadDepType(deps, type, ad) {
+        for (const [name, spec] of Object.entries(deps || {})) {
+          const current = this.edgesOut.get(name);
+          if (!current || current.type !== "workspace") {
+            new Edge({ from: this, name, spec, accept: ad[name], type });
+          }
+        }
+      }
+      get fsParent() {
+        return this[_fsParent];
+      }
+      set fsParent(fsParent) {
+        if (!fsParent) {
+          if (this[_fsParent]) {
+            this.root = null;
+          }
+          return;
+        }
+        debug(() => {
+          if (fsParent === this) {
+            throw new Error("setting node to its own fsParent");
+          }
+          if (fsParent.realpath === this.realpath) {
+            throw new Error("setting fsParent to same path");
+          }
+          if (!this[_fsParent] && this.realpath.indexOf(fsParent.realpath) !== 0) {
+            throw Object.assign(new Error("setting fsParent improperly"), {
+              path: this.path,
+              realpath: this.realpath,
+              fsParent: {
+                path: fsParent.path,
+                realpath: fsParent.realpath
+              }
+            });
+          }
+        });
+        if (fsParent.isLink) {
+          fsParent = fsParent.target;
+        }
+        if (this === fsParent || fsParent.realpath === this.realpath) {
+          return;
+        }
+        if (this[_fsParent] === fsParent) {
+          return;
+        }
+        const oldFsParent = this[_fsParent];
+        const newPath = !oldFsParent ? this.path : resolve(fsParent.path, relative(oldFsParent.path, this.path));
+        const nmPath = resolve(fsParent.path, "node_modules", this.name);
+        if (newPath === nmPath) {
+          this.parent = fsParent;
+          return;
+        }
+        const pathChange = newPath !== this.path;
+        const oldParent = this.parent;
+        const oldName = this.name;
+        if (this.parent) {
+          this.parent.children.delete(this.name);
+          this[_parent] = null;
+        }
+        if (this.fsParent) {
+          this.fsParent.fsChildren.delete(this);
+          this[_fsParent] = null;
+        }
+        if (pathChange) {
+          this[_changePath](newPath);
+        }
+        if (oldParent) {
+          oldParent[_reloadNamedEdges](oldName);
+        }
+        this.root = fsParent.root;
+      }
+      // is it safe to replace one node with another?  check the edges to
+      // make sure no one will get upset.  Note that the node might end up
+      // having its own unmet dependencies, if the new node has new deps.
+      // Note that there are cases where Arborist will opt to insert a node
+      // into the tree even though this function returns false!  This is
+      // necessary when a root dependency is added or updated, or when a
+      // root dependency brings peer deps along with it.  In that case, we
+      // will go ahead and create the invalid state, and then try to resolve
+      // it with more tree construction, because it's a user request.
+      canReplaceWith(node, ignorePeers) {
+        if (node.name !== this.name) {
+          return false;
+        }
+        if (node.packageName !== this.packageName) {
+          return false;
+        }
+        if (this.edgesOut.size) {
+          if (node.overrides) {
+            if (!node.overrides.isEqual(this.overrides)) {
+              return false;
+            }
+          } else {
+            if (this.overrides) {
+              return false;
+            }
+          }
+        }
+        ignorePeers = new Set(ignorePeers);
+        const depSet = gatherDepSet([this], (e) => e.to !== this && e.valid);
+        for (const edge of this.edgesIn) {
+          if (!this.isTop && edge.from.parent === this.parent && edge.peer && ignorePeers.has(edge.from.name)) {
+            continue;
+          }
+          if (!depSet.has(edge.from) && !edge.satisfiedBy(node)) {
+            return false;
+          }
+        }
+        return true;
+      }
+      canReplace(node, ignorePeers) {
+        return node.canReplaceWith(this, ignorePeers);
+      }
+      // return true if it's safe to remove this node, because anything that
+      // is depending on it would be fine with the thing that they would resolve
+      // to if it was removed, or nothing is depending on it in the first place.
+      canDedupe(preferDedupe = false, explicitRequest = false) {
+        if (this.inDepBundle || this.inShrinkwrap) {
+          return false;
+        }
+        if (!this.resolveParent || !this.resolveParent.resolveParent) {
+          return false;
+        }
+        if (this.edgesIn.size === 0) {
+          return true;
+        }
+        const other = this.resolveParent.resolveParent.resolve(this.name);
+        if (!other) {
+          return false;
+        }
+        if (other.matches(this)) {
+          return true;
+        }
+        if (!other.canReplace(this)) {
+          return false;
+        }
+        if (preferDedupe || semver2.eq(other.version, this.version)) {
+          return true;
+        }
+        if (!this.overridden && semver2.gt(other.version, this.version)) {
+          return true;
+        }
+        if (explicitRequest) {
+          return true;
+        }
+        return false;
+      }
+      satisfies(requested) {
+        if (requested instanceof Edge) {
+          return this.name === requested.name && requested.satisfiedBy(this);
+        }
+        const parsed = npa(requested);
+        const { name = this.name, rawSpec: spec } = parsed;
+        return this.name === name && this.satisfies(new Edge({
+          from: new _Node({ path: this.root.realpath }),
+          type: "prod",
+          name,
+          spec
+        }));
+      }
+      matches(node) {
+        if (node === this) {
+          return true;
+        }
+        if (node.name !== this.name) {
+          return false;
+        }
+        if (this.isLink) {
+          return node.isLink && this.target.matches(node.target);
+        }
+        if (this.isProjectRoot && node.isProjectRoot) {
+          return this.path === node.path;
+        }
+        if (this.integrity && node.integrity) {
+          return this.integrity === node.integrity;
+        }
+        if (this.resolved && node.resolved) {
+          return this.resolved === node.resolved;
+        }
+        return this.packageName && node.packageName && this.packageName === node.packageName && this.version && node.version && this.version === node.version;
+      }
+      // replace this node with the supplied argument
+      // Useful when mutating an ideal tree, so we can avoid having to call
+      // the parent/root setters more than necessary.
+      replaceWith(node) {
+        node.replace(this);
+      }
+      replace(node) {
+        this[_delistFromMeta]();
+        if (node.parent?.children.get(this.name) === node) {
+          this.path = resolve(node.parent.path, "node_modules", this.name);
+        } else {
+          this.path = node.path;
+          this.name = node.name;
+        }
+        if (!this.isLink) {
+          this.realpath = this.path;
+        }
+        this[_refreshLocation]();
+        if (!this.isLink) {
+          for (const kid of node.children.values()) {
+            kid.parent = this;
+          }
+          if (node.isLink && node.target) {
+            node.target.root = null;
+          }
+        }
+        if (!node.isRoot) {
+          this.root = node.root;
+        }
+        treeCheck(this);
+      }
+      get inShrinkwrap() {
+        return this.parent && (this.parent.hasShrinkwrap || this.parent.inShrinkwrap);
+      }
+      get parent() {
+        return this[_parent];
+      }
+      // This setter keeps everything in order when we move a node from
+      // one point in a logical tree to another.  Edges get reloaded,
+      // metadata updated, etc.  It's also called when we *replace* a node
+      // with another by the same name (eg, to update or dedupe).
+      // This does a couple of walks out on the node_modules tree, recursing
+      // into child nodes.  However, as setting the parent is typically done
+      // with nodes that don't have many children, and (deduped) package
+      // trees tend to be broad rather than deep, it's not that bad.
+      // The only walk that starts from the parent rather than this node is
+      // limited by edge name.
+      set parent(parent) {
+        if (!parent) {
+          if (this[_parent]) {
+            this.root = null;
+          }
+          return;
+        }
+        if (parent.isLink) {
+          parent = parent.target;
+        }
+        if (this === parent) {
+          return;
+        }
+        const oldParent = this[_parent];
+        if (oldParent === parent) {
+          return;
+        }
+        const newPath = resolve(parent.path, "node_modules", this.name);
+        const pathChange = newPath !== this.path;
+        if (oldParent) {
+          oldParent.children.delete(this.name);
+          this[_parent] = null;
+        }
+        if (this.fsParent) {
+          this.fsParent.fsChildren.delete(this);
+          this[_fsParent] = null;
+        }
+        if (pathChange) {
+          this[_changePath](newPath);
+        }
+        this.root = parent.root;
+      }
+      // Call this before changing path or updating the _root reference.
+      // Removes the node from its root the metadata and inventory.
+      [_delistFromMeta]() {
+        const root = this.root;
+        if (!root.realpath || !this.path) {
+          return;
+        }
+        root.inventory.delete(this);
+        root.tops.delete(this);
+        if (root.meta) {
+          root.meta.delete(this.path);
+        }
+        debug(() => {
+          if ([...root.inventory.values()].includes(this)) {
+            throw new Error("failed to delist");
+          }
+        });
+      }
+      // update this.path/realpath and the paths of all children/fsChildren
+      [_changePath](newPath) {
+        this[_delistFromMeta]();
+        const oldPath = this.path;
+        this.path = newPath;
+        const namePattern = /(?:^|\/|\\)node_modules[\\/](@[^/\\]+[\\/][^\\/]+|[^\\/]+)$/;
+        const nameChange = newPath.match(namePattern);
+        if (nameChange && this.name !== nameChange[1]) {
+          this.name = nameChange[1].replace(/\\/g, "/");
+        }
+        if (!this.isLink) {
+          this.realpath = newPath;
+          for (const link of this.linksIn) {
+            link[_delistFromMeta]();
+            link.realpath = newPath;
+            link[_refreshLocation]();
+          }
+        }
+        for (const child of this.fsChildren) {
+          child[_changePath](resolve(newPath, relative(oldPath, child.path)));
+        }
+        for (const [name, child] of this.children.entries()) {
+          child[_changePath](resolve(newPath, "node_modules", name));
+        }
+        this[_refreshLocation]();
+      }
+      // Called whenever the root/parent is changed.
+      // NB: need to remove from former root's meta/inventory and then update
+      // this.path BEFORE calling this method!
+      [_refreshLocation]() {
+        const root = this.root;
+        const loc = relpath(root.realpath, this.path);
+        this.location = loc;
+        root.inventory.add(this);
+        if (root.meta) {
+          root.meta.add(this);
+        }
+      }
+      assertRootOverrides() {
+        if (!this.isProjectRoot || !this.overrides) {
+          return;
+        }
+        for (const edge of this.edgesOut.values()) {
+          if (edge.spec !== edge.rawSpec && !edge.spec.startsWith("$")) {
+            throw Object.assign(new Error(`Override for ${edge.name}@${edge.rawSpec} conflicts with direct dependency`), { code: "EOVERRIDE" });
+          }
+        }
+      }
+      addEdgeOut(edge) {
+        if (this.overrides) {
+          edge.overrides = this.overrides.getEdgeRule(edge);
+        }
+        this.edgesOut.set(edge.name, edge);
+      }
+      recalculateOutEdgesOverrides() {
+        for (const edge of this.edgesOut.values()) {
+          edge.reload(true);
+          if (edge.to) {
+            edge.to.updateOverridesEdgeInAdded(edge.overrides);
+          }
+        }
+      }
+      updateOverridesEdgeInRemoved(otherOverrideSet) {
+        if (!this.overrides || !this.overrides.isEqual(otherOverrideSet)) {
+          return false;
+        }
+        let newOverrideSet;
+        for (const edge of this.edgesIn) {
+          if (newOverrideSet && edge.overrides) {
+            newOverrideSet = OverrideSet.findSpecificOverrideSet(edge.overrides, newOverrideSet);
+          } else {
+            newOverrideSet = edge.overrides;
+          }
+        }
+        if (this.overrides.isEqual(newOverrideSet)) {
+          return false;
+        }
+        this.overrides = newOverrideSet;
+        if (this.overrides) {
+          this.recalculateOutEdgesOverrides();
+        }
+        return true;
+      }
+      // This logic isn't perfect either. When we have two edges in that have different override sets, then we have to decide which set is correct.
+      // This function assumes the more specific override set is applicable, so if we have dependencies A->B->C and A->C
+      // and an override set that specifies what happens for C under A->B, this will work even if the new A->C edge comes along and tries to change
+      // the override set.
+      // The strictly correct logic is not to allow two edges with different overrides to point to the same node, because even if this node can satisfy
+      // both, one of its dependencies might need to be different depending on the edge leading to it.
+      // However, this might cause a lot of duplication, because the conflict in the dependencies might never actually happen.
+      updateOverridesEdgeInAdded(otherOverrideSet) {
+        if (!otherOverrideSet) {
+          return false;
+        }
+        if (!this.overrides) {
+          this.overrides = otherOverrideSet;
+          this.recalculateOutEdgesOverrides();
+          return true;
+        }
+        if (this.overrides.isEqual(otherOverrideSet)) {
+          return false;
+        }
+        const newOverrideSet = OverrideSet.findSpecificOverrideSet(this.overrides, otherOverrideSet);
+        if (newOverrideSet) {
+          if (!this.overrides.isEqual(newOverrideSet)) {
+            this.overrides = newOverrideSet;
+            this.recalculateOutEdgesOverrides();
+            return true;
+          }
+          return false;
+        }
+        log.silly("Conflicting override sets", this.name);
+      }
+      deleteEdgeIn(edge) {
+        this.edgesIn.delete(edge);
+        if (edge.overrides) {
+          this.updateOverridesEdgeInRemoved(edge.overrides);
+        }
+      }
+      addEdgeIn(edge) {
+        if (!this.overrides || !this.overrides.isEqual(edge.overrides)) {
+          this.updateOverridesEdgeInAdded(edge.overrides);
+        }
+        this.edgesIn.add(edge);
+        if (this.root.meta) {
+          this.root.meta.addEdge(edge);
+        }
+      }
+      [_reloadNamedEdges](name, rootLoc = this.location) {
+        const edge = this.edgesOut.get(name);
+        const rootLocResolved = edge && edge.to && edge.to.location === `${rootLoc}/node_modules/${edge.name}`;
+        const sameResolved = edge && this.resolve(name) === edge.to;
+        const recheck = rootLocResolved || !sameResolved;
+        if (edge && recheck) {
+          edge.reload(true);
+        }
+        for (const c of this.children.values()) {
+          c[_reloadNamedEdges](name, rootLoc);
+        }
+        for (const c of this.fsChildren) {
+          c[_reloadNamedEdges](name, rootLoc);
+        }
+      }
+      get isLink() {
+        return false;
+      }
+      get target() {
+        return this;
+      }
+      set target(n) {
+        debug(() => {
+          throw Object.assign(new Error("cannot set target on non-Link Nodes"), {
+            path: this.path
+          });
+        });
+      }
+      get depth() {
+        if (this.isTop) {
+          return 0;
+        }
+        return this.parent.depth + 1;
+      }
+      get isTop() {
+        return !this.parent || this.globalTop;
+      }
+      get top() {
+        if (this.isTop) {
+          return this;
+        }
+        return this.parent.top;
+      }
+      get isFsTop() {
+        return !this.fsParent;
+      }
+      get fsTop() {
+        if (this.isFsTop) {
+          return this;
+        }
+        return this.fsParent.fsTop;
+      }
+      get resolveParent() {
+        return this.parent || this.fsParent;
+      }
+      resolve(name) {
+        debug(() => {
+          if (typeof name !== "string" || !name) {
+            throw new Error("non-string passed to Node.resolve");
+          }
+        });
+        const mine = this.children.get(name);
+        if (mine) {
+          return mine;
+        }
+        const resolveParent = this.resolveParent;
+        if (resolveParent) {
+          return resolveParent.resolve(name);
+        }
+        return null;
+      }
+      inNodeModules() {
+        const rp = this.realpath;
+        const name = this.name;
+        const scoped = name.charAt(0) === "@";
+        const d = dirname(rp);
+        const nm = scoped ? dirname(d) : d;
+        const dir = dirname(nm);
+        const base = scoped ? `${basename(d)}/${basename(rp)}` : basename(rp);
+        return base === name && basename(nm) === "node_modules" ? dir : false;
+      }
+      // maybe accept both string value or array of strings
+      // seems to be what dom API does
+      querySelectorAll(query, opts) {
+        return querySelectorAll(this, query, opts);
+      }
+      toJSON() {
+        return printableTree(this);
+      }
+      [util.inspect.custom]() {
+        return this.toJSON();
+      }
+    };
+    module2.exports = Node;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/link.js
+var require_link = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/link.js"(exports2, module2) {
+    var relpath = require_relpath();
+    var Node = require_node5();
+    var _loadDeps = Symbol.for("Arborist.Node._loadDeps");
+    var _target = Symbol.for("_target");
+    var { dirname } = require("node:path");
+    var _delistFromMeta = Symbol.for("_delistFromMeta");
+    var _refreshLocation = Symbol.for("_refreshLocation");
+    var Link = class extends Node {
+      static {
+        __name(this, "Link");
+      }
+      constructor(options) {
+        const { root, realpath, target, parent, fsParent, isStoreLink } = options;
+        if (!realpath && !(target && target.path)) {
+          throw new TypeError("must provide realpath for Link node");
+        }
+        super({
+          ...options,
+          realpath: realpath || target.path,
+          root: root || (parent ? parent.root : fsParent ? fsParent.root : target ? target.root : null)
+        });
+        this.isStoreLink = isStoreLink || false;
+        if (target) {
+          this.target = target;
+        } else if (this.realpath === this.root.path) {
+          this.target = this.root;
+        } else {
+          this.target = new Node({
+            ...options,
+            path: realpath,
+            parent: null,
+            fsParent: null,
+            root: this.root
+          });
+        }
+      }
+      get version() {
+        return this.target ? this.target.version : this.package.version || "";
+      }
+      get target() {
+        return this[_target];
+      }
+      set target(target) {
+        const current = this[_target];
+        if (target === current) {
+          return;
+        }
+        if (!target) {
+          if (current && current.linksIn) {
+            current.linksIn.delete(this);
+          }
+          if (this.path) {
+            this[_delistFromMeta]();
+            this[_target] = null;
+            this.package = {};
+            this[_refreshLocation]();
+          } else {
+            this[_target] = null;
+          }
+          return;
+        }
+        if (!this.path) {
+          if (target.path) {
+            this.realpath = target.path;
+          } else {
+            target.path = target.realpath = this.realpath;
+          }
+          target.root = this.root;
+          this[_target] = target;
+          target.linksIn.add(this);
+          this.package = target.package;
+          return;
+        }
+        this[_delistFromMeta]();
+        this.package = target.package;
+        this.realpath = target.path;
+        this[_refreshLocation]();
+        target.root = this.root;
+      }
+      // a link always resolves to the relative path to its target
+      get resolved() {
+        return this.path && this.realpath ? `file:${relpath(dirname(this.path), this.realpath)}` : null;
+      }
+      set resolved(r) {
+      }
+      // deps are resolved on the target, not the Link
+      // so this is a no-op
+      [_loadDeps]() {
+      }
+      // links can't have children, only their targets can
+      // fix it to an empty list so that we can still call
+      // things that iterate over them, just as a no-op
+      get children() {
+        return /* @__PURE__ */ new Map();
+      }
+      set children(c) {
+      }
+      get isLink() {
+        return true;
+      }
+    };
+    module2.exports = Link;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/place-dep.js
+var require_place_dep = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/place-dep.js"(exports2, module2) {
+    var localeCompare = require_string_locale_compare()("en");
+    var { log } = require_lib2();
+    var { redact } = require_lib25();
+    var deepestNestingTarget = require_deepest_nesting_target();
+    var CanPlaceDep = require_can_place_dep();
+    var {
+      KEEP,
+      CONFLICT
+    } = CanPlaceDep;
+    var debug = require_debug2();
+    var Link = require_link();
+    var gatherDepSet = require_gather_dep_set();
+    var peerEntrySets = require_peer_entry_sets();
+    var PlaceDep = class _PlaceDep {
+      static {
+        __name(this, "PlaceDep");
+      }
+      constructor(options) {
+        this.auditReport = options.auditReport;
+        this.dep = options.dep;
+        this.edge = options.edge;
+        this.explicitRequest = options.explicitRequest;
+        this.force = options.force;
+        this.installLinks = options.installLinks;
+        this.installStrategy = options.installStrategy;
+        this.legacyPeerDeps = options.legacyPeerDeps;
+        this.parent = options.parent || null;
+        this.preferDedupe = options.preferDedupe;
+        this.strictPeerDeps = options.strictPeerDeps;
+        this.updateNames = options.updateNames;
+        this.canPlace = null;
+        this.canPlaceSelf = null;
+        this.checks = /* @__PURE__ */ new Map();
+        this.children = [];
+        this.needEvaluation = /* @__PURE__ */ new Set();
+        this.peerConflict = null;
+        this.placed = null;
+        this.target = null;
+        this.current = this.edge.to;
+        this.name = this.edge.name;
+        this.top = this.parent?.top || this;
+        if (this.edge.to && !this.edge.error && !this.explicitRequest && !this.updateNames.includes(this.edge.name) && !this.auditReport?.isVulnerable(this.edge.to)) {
+          return;
+        }
+        const start = this.getStartNode();
+        for (const target2 of start.ancestry()) {
+          const targetEdge = target2.edgesOut.get(this.edge.name);
+          if (!target2.isTop && targetEdge && targetEdge.peer) {
+            continue;
+          }
+          const cpd = new CanPlaceDep({
+            dep: this.dep,
+            edge: this.edge,
+            // note: this sets the parent's canPlace as the parent of this
+            // canPlace, but it does NOT add this canPlace to the parent's
+            // children.  This way, we can know that it's a peer dep, and
+            // get the top edge easily, while still maintaining the
+            // tree of checks that factored into the original decision.
+            parent: this.parent && this.parent.canPlace,
+            target: target2,
+            preferDedupe: this.preferDedupe,
+            explicitRequest: this.explicitRequest
+          });
+          this.checks.set(target2, cpd);
+          if (cpd.canPlaceSelf !== CONFLICT) {
+            this.canPlaceSelf = cpd;
+          }
+          if (cpd.canPlace !== CONFLICT) {
+            this.canPlace = cpd;
+          } else {
+            break;
+          }
+          if (this.dep.errors.length) {
+            break;
+          }
+          if (this.installStrategy === "nested") {
+            break;
+          }
+          if (this.installStrategy === "shallow") {
+            const rp = target2.resolveParent;
+            if (rp && rp.isProjectRoot) {
+              break;
+            }
+          }
+        }
+        if (!this.canPlace) {
+          if (!this.force && (this.isMine || this.strictPeerDeps)) {
+            return this.failPeerConflict();
+          }
+          if (!this.canPlaceSelf) {
+            this.warnPeerConflict();
+            return;
+          }
+          this.canPlace = this.canPlaceSelf;
+        }
+        if (!this.canPlace) {
+          debug(() => {
+            throw new Error("canPlace not set, but trying to place in tree");
+          });
+          return;
+        }
+        const { target } = this.canPlace;
+        log.silly(
+          "placeDep",
+          target.location || "ROOT",
+          `${this.dep.name}@${this.dep.version}`,
+          this.canPlace.description,
+          `for: ${this.edge.from.package._id || this.edge.from.location}`,
+          `want: ${redact(this.edge.spec || "*")}`
+        );
+        const placementType = this.canPlace.canPlace === CONFLICT ? this.canPlace.canPlaceSelf : this.canPlace.canPlace;
+        if (placementType === KEEP) {
+          if (this.edge.peer && !this.edge.valid) {
+            this.warnPeerConflict();
+          }
+          this.pruneDedupable(target);
+          return;
+        }
+        for (let p = target; p; p = p.resolveParent) {
+          if (p.matches(this.dep) && !p.isTop) {
+            this.placed = new Link({ parent: target, target: p });
+            return;
+          }
+        }
+        const virtualRoot = this.dep.parent;
+        this.placed = new this.dep.constructor({
+          name: this.dep.name,
+          pkg: this.dep.package,
+          resolved: this.dep.resolved,
+          integrity: this.dep.integrity,
+          installLinks: this.installLinks,
+          legacyPeerDeps: this.legacyPeerDeps,
+          error: this.dep.errors[0],
+          ...this.dep.overrides ? { overrides: this.dep.overrides } : {},
+          ...this.dep.isLink ? { target: this.dep.target, realpath: this.dep.realpath } : {}
+        });
+        this.oldDep = target.children.get(this.name);
+        if (this.oldDep) {
+          this.replaceOldDep();
+        } else {
+          this.placed.parent = target;
+        }
+        if (this.edge.peer && !this.placed.satisfies(this.edge)) {
+          this.warnPeerConflict();
+        }
+        if (this.edge.valid && this.edge.to && this.edge.to !== this.placed) {
+          this.pruneDedupable(this.edge.to, false);
+        }
+        for (const node of target.root.inventory.query("name", this.name)) {
+          if (node.isDescendantOf(target) && !node.isTop) {
+            this.pruneDedupable(node, false);
+            if (node.root === target.root) {
+              for (const kid of node.children.values()) {
+                this.pruneDedupable(kid, false);
+              }
+            }
+          }
+        }
+        for (const peerEdge of this.placed.edgesOut.values()) {
+          if (peerEdge.valid || !peerEdge.peer || peerEdge.peerConflicted) {
+            continue;
+          }
+          const peer = virtualRoot.children.get(peerEdge.name);
+          if (!peer) {
+            continue;
+          }
+          if (!peer.satisfies(peerEdge)) {
+            continue;
+          }
+          this.children.push(new _PlaceDep({
+            auditReport: this.auditReport,
+            explicitRequest: this.explicitRequest,
+            force: this.force,
+            installLinks: this.installLinks,
+            installStrategy: this.installStrategy,
+            legacyPeerDeps: this.legacyPeerDeps,
+            preferDedupe: this.preferDedupe,
+            strictPeerDeps: this.strictPeerDeps,
+            updateNames: this.updateName,
+            parent: this,
+            dep: peer,
+            node: this.placed,
+            edge: peerEdge
+          }));
+        }
+      }
+      replaceOldDep() {
+        const target = this.oldDep.parent;
+        const oldDeps = [];
+        for (const [name, edge] of this.oldDep.edgesOut.entries()) {
+          if (!this.placed.edgesOut.has(name) && edge.to) {
+            oldDeps.push(...gatherDepSet([edge.to], (e) => e.to !== edge.to));
+          }
+        }
+        const prunePeerSets = [];
+        for (const edge of this.oldDep.edgesIn) {
+          if (this.placed.satisfies(edge) || !edge.peer || edge.from.parent !== target || edge.peerConflicted) {
+            continue;
+          }
+          for (const entryEdge of peerEntrySets(edge.from).keys()) {
+            const entryNode = entryEdge.to;
+            const deepestTarget = deepestNestingTarget(entryNode);
+            if (deepestTarget !== target && !(entryEdge.from.isProjectRoot || entryEdge.from.isWorkspace)) {
+              prunePeerSets.push(...gatherDepSet([entryNode], (e) => {
+                return e.to !== entryNode && !e.peerConflicted;
+              }));
+            } else {
+              this.warnPeerConflict(edge, this.dep);
+            }
+          }
+        }
+        this.placed.replace(this.oldDep);
+        this.pruneForReplacement(this.placed, oldDeps);
+        for (const dep of prunePeerSets) {
+          for (const edge of dep.edgesIn) {
+            this.needEvaluation.add(edge.from);
+          }
+          dep.root = null;
+        }
+      }
+      pruneForReplacement(node, oldDeps) {
+        const invalidDeps = new Set([...node.edgesOut.values()].filter((e) => e.to && !e.valid).map((e) => e.to));
+        for (const dep of oldDeps) {
+          const set = gatherDepSet([dep], (e) => e.to !== dep && e.valid);
+          for (const dep2 of set) {
+            invalidDeps.add(dep2);
+          }
+        }
+        const deps = gatherDepSet(invalidDeps, (edge) => edge.from !== node && edge.to !== node && edge.valid);
+        for (const dep of deps) {
+          dep.root = null;
+        }
+      }
+      // prune all the nodes in a branch of the tree that can be safely removed
+      // This is only the most basic duplication detection; it finds if there
+      // is another satisfying node further up the tree, and if so, dedupes.
+      // Even if installStrategy is nested, we do this amount of deduplication.
+      pruneDedupable(node, descend = true) {
+        if (node.canDedupe(this.preferDedupe, this.explicitRequest)) {
+          const deps = gatherDepSet([node], (e) => e.to !== node && e.valid);
+          for (const node2 of deps) {
+            node2.root = null;
+          }
+          return;
+        }
+        if (descend) {
+          const nodeSort = /* @__PURE__ */ __name((a, b) => localeCompare(a.location, b.location), "nodeSort");
+          const children = [...node.children.values()].sort(nodeSort);
+          for (const child of children) {
+            this.pruneDedupable(child);
+          }
+          const fsChildren = [...node.fsChildren].sort(nodeSort);
+          for (const topNode of fsChildren) {
+            const children2 = [...topNode.children.values()].sort(nodeSort);
+            for (const child of children2) {
+              this.pruneDedupable(child);
+            }
+          }
+        }
+      }
+      get isMine() {
+        const { edge } = this.top;
+        const { from: node } = edge;
+        if (node.isWorkspace || node.isProjectRoot) {
+          return true;
+        }
+        if (!edge.peer) {
+          return false;
+        }
+        let hasPeerEdges = false;
+        for (const edge2 of node.edgesIn) {
+          if (edge2.peer) {
+            hasPeerEdges = true;
+            continue;
+          }
+          if (edge2.from.isWorkspace || edge2.from.isProjectRoot) {
+            return true;
+          }
+        }
+        if (hasPeerEdges) {
+          for (const edge2 of peerEntrySets(node).keys()) {
+            if (edge2.from.isWorkspace || edge2.from.isProjectRoot) {
+              return true;
+            }
+          }
+        }
+        return false;
+      }
+      warnPeerConflict(edge, dep) {
+        edge = edge || this.edge;
+        dep = dep || this.dep;
+        edge.peerConflicted = true;
+        const expl = this.explainPeerConflict(edge, dep);
+        log.warn("ERESOLVE", "overriding peer dependency", expl);
+      }
+      failPeerConflict(edge, dep) {
+        edge = edge || this.top.edge;
+        dep = dep || this.top.dep;
+        const expl = this.explainPeerConflict(edge, dep);
+        throw Object.assign(new Error("could not resolve"), expl);
+      }
+      explainPeerConflict(edge, dep) {
+        const { from: node } = edge;
+        const curNode = node.resolve(edge.name);
+        const expl = {
+          code: "ERESOLVE",
+          edge: edge.explain(),
+          dep: dep.explain(edge),
+          force: this.force,
+          isMine: this.isMine,
+          strictPeerDeps: this.strictPeerDeps
+        };
+        if (this.parent) {
+          expl.current = curNode && curNode.explain(edge);
+          expl.peerConflict = this.current && this.current.explain(this.edge);
+        } else {
+          expl.current = curNode && curNode.explain();
+          if (this.canPlaceSelf && this.canPlaceSelf.canPlaceSelf !== CONFLICT) {
+            const cps = this.canPlaceSelf;
+            for (const peer of cps.conflictChildren) {
+              if (peer.current) {
+                expl.peerConflict = {
+                  current: peer.current.explain(),
+                  peer: peer.dep.explain(peer.edge)
+                };
+                break;
+              }
+            }
+          } else {
+            expl.peerConflict = {
+              current: this.current && this.current.explain(),
+              peer: this.dep.explain(this.edge)
+            };
+          }
+        }
+        return expl;
+      }
+      getStartNode() {
+        const from = this.parent?.getStartNode() || this.edge.from;
+        return deepestNestingTarget(from, this.name);
+      }
+      // XXX this only appears to be used by tests
+      get allChildren() {
+        const set = new Set(this.children);
+        for (const child of set) {
+          for (const grandchild of child.children) {
+            set.add(grandchild);
+          }
+        }
+        return [...set];
+      }
+    };
+    module2.exports = PlaceDep;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/calc-dep-flags.js
+var require_calc_dep_flags = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/calc-dep-flags.js"(exports2, module2) {
+    var { depth } = require_lib31();
+    var calcDepFlags = /* @__PURE__ */ __name((tree, resetRoot = true) => {
+      if (resetRoot) {
+        tree.dev = false;
+        tree.optional = false;
+        tree.devOptional = false;
+        tree.peer = false;
+      }
+      const ret = depth({
+        tree,
+        visit: /* @__PURE__ */ __name((node) => calcDepFlagsStep(node), "visit"),
+        filter: /* @__PURE__ */ __name((node) => node, "filter"),
+        getChildren: /* @__PURE__ */ __name((node, tree2) => [...tree2.edgesOut.values()].map((edge) => edge.to), "getChildren")
+      });
+      return ret;
+    }, "calcDepFlags");
+    var calcDepFlagsStep = /* @__PURE__ */ __name((node) => {
+      node.extraneous = false;
+      resetParents(node, "extraneous");
+      resetParents(node, "dev");
+      resetParents(node, "peer");
+      resetParents(node, "devOptional");
+      resetParents(node, "optional");
+      if (node.isLink) {
+        if (node.target == null) {
+          return node;
+        }
+        node.target.dev = node.dev;
+        node.target.optional = node.optional;
+        node.target.devOptional = node.devOptional;
+        node.target.peer = node.peer;
+        return calcDepFlagsStep(node.target);
+      }
+      node.edgesOut.forEach(({ peer, optional, dev, to }) => {
+        if (!to) {
+          return;
+        }
+        to.extraneous = false;
+        if (peer) {
+          to.peer = true;
+        } else if (to.peer && !hasIncomingPeerEdge(to)) {
+          unsetFlag(to, "peer");
+        }
+        const unsetDevOpt = !node.devOptional && !node.dev && !node.optional && !dev && !optional;
+        const unsetDev = unsetDevOpt || !node.dev && !dev;
+        const unsetOpt = unsetDevOpt || !node.optional && !optional;
+        if (unsetDevOpt) {
+          unsetFlag(to, "devOptional");
+        }
+        if (unsetDev) {
+          unsetFlag(to, "dev");
+        }
+        if (unsetOpt) {
+          unsetFlag(to, "optional");
+        }
+      });
+      return node;
+    }, "calcDepFlagsStep");
+    var hasIncomingPeerEdge = /* @__PURE__ */ __name((node) => {
+      const target = node.isLink && node.target ? node.target : node;
+      for (const edge of target.edgesIn) {
+        if (edge.type === "peer") {
+          return true;
+        }
+      }
+      return false;
+    }, "hasIncomingPeerEdge");
+    var resetParents = /* @__PURE__ */ __name((node, flag) => {
+      if (node[flag]) {
+        return;
+      }
+      for (let p = node; p && (p === node || p[flag]); p = p.resolveParent) {
+        p[flag] = false;
+      }
+    }, "resetParents");
+    var unsetFlag = /* @__PURE__ */ __name((node, flag) => {
+      if (node[flag]) {
+        node[flag] = false;
+        depth({
+          tree: node,
+          visit: /* @__PURE__ */ __name((node2) => {
+            node2.extraneous = node2[flag] = false;
+            if (node2.isLink && node2.target) {
+              node2.target.extraneous = node2.target[flag] = false;
+            }
+          }, "visit"),
+          getChildren: /* @__PURE__ */ __name((node2) => {
+            const children = [];
+            const targetNode = node2.isLink && node2.target ? node2.target : node2;
+            for (const edge of targetNode.edgesOut.values()) {
+              if (edge.to?.[flag]) {
+                if (flag === "peer") {
+                  if (edge.type === "peer") {
+                    children.push(edge.to);
+                  }
+                } else {
+                  if (edge.type === "prod" || edge.type === "peer") {
+                    children.push(edge.to);
+                  }
+                }
+              }
+            }
+            return children;
+          }, "getChildren")
+        });
+      }
+    }, "unsetFlag");
+    module2.exports = calcDepFlags;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/yarn-lock.js
+var require_yarn_lock = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/yarn-lock.js"(exports2, module2) {
+    var localeCompare = require_string_locale_compare()("en");
+    var consistentResolve = require_consistent_resolve();
+    var { dirname } = require("node:path");
+    var { breadth } = require_lib31();
+    var yarnEntryPriorities = {
+      name: 1,
+      version: 2,
+      uid: 3,
+      resolved: 4,
+      integrity: 5,
+      registry: 6,
+      dependencies: 7
+    };
+    var priorityThenLocaleCompare = /* @__PURE__ */ __name((a, b) => {
+      if (!yarnEntryPriorities[a] && !yarnEntryPriorities[b]) {
+        return localeCompare(a, b);
+      }
+      return (yarnEntryPriorities[a] || 100) > (yarnEntryPriorities[b] || 100) ? 1 : -1;
+    }, "priorityThenLocaleCompare");
+    var quoteIfNeeded = /* @__PURE__ */ __name((val) => {
+      if (typeof val === "boolean" || typeof val === "number" || val.startsWith("true") || val.startsWith("false") || /[:\s\n\\",[\]]/g.test(val) || !/^[a-zA-Z]/g.test(val)) {
+        return JSON.stringify(val);
+      }
+      return val;
+    }, "quoteIfNeeded");
+    var sortKV = /* @__PURE__ */ __name((obj) => Object.keys(obj).sort(localeCompare).map((k) => `    ${quoteIfNeeded(k)} ${quoteIfNeeded(obj[k])}`).join("\n"), "sortKV");
+    var match = /* @__PURE__ */ __name((p, n) => p.integrity && n.integrity ? p.integrity === n.integrity : p.resolved && n.resolved ? p.resolved === n.resolved : p.version && n.version ? p.version === n.version : true, "match");
+    var prefix = `# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+`;
+    var nullSymbol = Symbol("null");
+    var YarnLock = class _YarnLock {
+      static {
+        __name(this, "YarnLock");
+      }
+      static parse(data) {
+        return new _YarnLock().parse(data);
+      }
+      static fromTree(tree) {
+        return new _YarnLock().fromTree(tree);
+      }
+      constructor() {
+        this.entries = null;
+        this.endCurrent();
+      }
+      endCurrent() {
+        this.current = null;
+        this.subkey = nullSymbol;
+      }
+      parse(data) {
+        const ENTRY_START = /^[^\s].*:$/;
+        const SUBKEY = /^ {2}[^\s]+:$/;
+        const SUBVAL = /^ {4}[^\s]+ .+$/;
+        const METADATA = /^ {2}[^\s]+ .+$/;
+        this.entries = /* @__PURE__ */ new Map();
+        this.current = null;
+        const linere = /([^\r\n]*)\r?\n/gm;
+        let match2;
+        let lineNum = 0;
+        if (!/\n$/.test(data)) {
+          data += "\n";
+        }
+        while (match2 = linere.exec(data)) {
+          const line = match2[1];
+          lineNum++;
+          if (line.charAt(0) === "#") {
+            continue;
+          }
+          if (line === "") {
+            this.endCurrent();
+            continue;
+          }
+          if (ENTRY_START.test(line)) {
+            this.endCurrent();
+            const specs = this.splitQuoted(line.slice(0, -1), /, */);
+            this.current = new YarnLockEntry(specs);
+            specs.forEach((spec) => this.entries.set(spec, this.current));
+            continue;
+          }
+          if (SUBKEY.test(line)) {
+            this.subkey = line.slice(2, -1);
+            this.current[this.subkey] = {};
+            continue;
+          }
+          if (SUBVAL.test(line) && this.current && this.current[this.subkey]) {
+            const subval = this.splitQuoted(line.trimLeft(), " ");
+            if (subval.length === 2) {
+              this.current[this.subkey][subval[0]] = subval[1];
+              continue;
+            }
+          }
+          if (METADATA.test(line) && this.current) {
+            const metadata = this.splitQuoted(line.trimLeft(), " ");
+            if (metadata.length === 2) {
+              if (metadata[0] === "resolved") {
+                metadata[1] = metadata[1].replace(/#.*/, "");
+              }
+              this.current[metadata[0]] = metadata[1];
+              continue;
+            }
+          }
+          throw Object.assign(new Error("invalid or corrupted yarn.lock file"), {
+            position: match2.index,
+            content: match2[0],
+            line: lineNum
+          });
+        }
+        this.endCurrent();
+        return this;
+      }
+      splitQuoted(str, delim) {
+        const split = str.split(delim);
+        const out = [];
+        let o = 0;
+        for (let i = 0; i < split.length; i++) {
+          const chunk = split[i];
+          if (/^".*"$/.test(chunk)) {
+            out[o++] = chunk.trim().slice(1, -1);
+          } else if (/^"/.test(chunk)) {
+            let collect = chunk.trimLeft().slice(1);
+            while (++i < split.length) {
+              const n = split[i];
+              if (/[^\\](\\\\)*"$/.test(n)) {
+                collect += n.trimRight().slice(0, -1);
+                break;
+              } else {
+                collect += n;
+              }
+            }
+            out[o++] = collect;
+          } else {
+            out[o++] = chunk.trim();
+          }
+        }
+        return out;
+      }
+      toString() {
+        return prefix + [.../* @__PURE__ */ new Set([...this.entries.values()])].map((e) => e.toString()).sort((a, b) => localeCompare(a.replace(/"/g, ""), b.replace(/"/g, ""))).join("\n\n") + "\n";
+      }
+      fromTree(tree) {
+        this.entries = /* @__PURE__ */ new Map();
+        breadth({
+          tree,
+          visit: /* @__PURE__ */ __name((node) => this.addEntryFromNode(node), "visit"),
+          getChildren: /* @__PURE__ */ __name((node) => [...node.children.values(), ...node.fsChildren].sort((a, b) => a.depth - b.depth || localeCompare(a.name, b.name)), "getChildren")
+        });
+        return this;
+      }
+      addEntryFromNode(node) {
+        const specs = [...node.edgesIn].map((e) => `${node.name}@${e.spec}`).sort(localeCompare);
+        const n = this.entryDataFromNode(node);
+        let priorEntry = null;
+        const newSpecs = [];
+        for (const s of specs) {
+          const prev = this.entries.get(s);
+          if (!prev) {
+            if (priorEntry) {
+              priorEntry.addSpec(s);
+            } else {
+              newSpecs.push(s);
+            }
+            continue;
+          }
+          const m = match(prev, n);
+          if (!m) {
+            continue;
+          }
+          if (!priorEntry) {
+            priorEntry = prev;
+            for (const s2 of newSpecs) {
+              priorEntry.addSpec(s2);
+              this.entries.set(s2, priorEntry);
+            }
+            newSpecs.length = 0;
+            continue;
+          }
+          priorEntry.addSpec(s);
+          this.entries.set(s, priorEntry);
+        }
+        if (!priorEntry) {
+          const entry = Object.assign(new YarnLockEntry(newSpecs), n);
+          for (const s of newSpecs) {
+            this.entries.set(s, entry);
+          }
+        } else {
+          Object.assign(priorEntry, n);
+        }
+      }
+      entryDataFromNode(node) {
+        const n = {};
+        if (node.package.dependencies) {
+          n.dependencies = node.package.dependencies;
+        }
+        if (node.package.optionalDependencies) {
+          n.optionalDependencies = node.package.optionalDependencies;
+        }
+        if (node.version) {
+          n.version = node.version;
+        }
+        if (node.resolved) {
+          n.resolved = consistentResolve(
+            node.resolved,
+            node.isLink ? dirname(node.path) : node.path,
+            node.root.path,
+            true
+          );
+        }
+        if (node.integrity) {
+          n.integrity = node.integrity;
+        }
+        return n;
+      }
+      static get Entry() {
+        return YarnLockEntry;
+      }
+    };
+    var YarnLockEntry = class {
+      static {
+        __name(this, "YarnLockEntry");
+      }
+      #specs;
+      constructor(specs) {
+        this.#specs = new Set(specs);
+        this.resolved = null;
+        this.version = null;
+        this.integrity = null;
+        this.dependencies = null;
+        this.optionalDependencies = null;
+      }
+      toString() {
+        return ([...this.#specs].sort(localeCompare).map(quoteIfNeeded).join(", ") + ":\n" + Object.getOwnPropertyNames(this).filter((prop) => this[prop] !== null).sort(priorityThenLocaleCompare).map((prop) => typeof this[prop] !== "object" ? `  ${prop} ${prop === "integrity" ? this[prop] : JSON.stringify(this[prop])}
+` : Object.keys(this[prop]).length === 0 ? "" : `  ${prop}:
+` + sortKV(this[prop]) + "\n").join("")).trim();
+      }
+      addSpec(spec) {
+        this.#specs.add(spec);
+      }
+    };
+    module2.exports = YarnLock;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/spec-from-lock.js
+var require_spec_from_lock = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/spec-from-lock.js"(exports2, module2) {
+    var npa = require_npa();
+    var specFromLock = /* @__PURE__ */ __name((name, lock, where) => {
+      try {
+        if (lock.version) {
+          const spec = npa.resolve(name, lock.version, where);
+          if (lock.integrity || spec.type === "git") {
+            return spec;
+          }
+        }
+        if (lock.from) {
+          const spec = npa.resolve(name, lock.from, where);
+          if (spec.registry && lock.version) {
+            return npa.resolve(name, lock.version, where);
+          } else if (!lock.resolved) {
+            return spec;
+          }
+        }
+        if (lock.resolved) {
+          return npa.resolve(name, lock.resolved, where);
+        }
+      } catch {
+      }
+      try {
+        return npa.resolve(name, lock.version, where);
+      } catch {
+        return {};
+      }
+    }, "specFromLock");
+    module2.exports = specFromLock;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/version-from-tgz.js
+var require_version_from_tgz = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/version-from-tgz.js"(exports2, module2) {
+    var semver2 = require_semver2();
+    var { basename } = require("node:path");
+    var { URL: URL2 } = require("node:url");
+    module2.exports = (name, tgz) => {
+      const base = basename(tgz);
+      if (!base.endsWith(".tgz")) {
+        return null;
+      }
+      if (tgz.startsWith("http:/") || tgz.startsWith("https:/")) {
+        const u = new URL2(tgz);
+        const tfsplit = u.pathname.slice(1).split("/-/");
+        if (tfsplit.length > 1) {
+          const afterTF = tfsplit.pop();
+          if (afterTF === base) {
+            const pre = tfsplit.pop();
+            const preSplit = pre.split(/\/|%2f/i);
+            const project2 = preSplit.pop();
+            const scope2 = preSplit.pop();
+            return versionFromBaseScopeName(base, scope2, project2);
+          }
+        }
+      }
+      const split = name.split(/\/|%2f/i);
+      const project = split.pop();
+      const scope = split.pop();
+      return versionFromBaseScopeName(base, scope, project);
+    };
+    var versionFromBaseScopeName = /* @__PURE__ */ __name((base, scope, name) => {
+      if (!base.startsWith(name + "-")) {
+        return null;
+      }
+      const parsed = semver2.parse(base.substring(name.length + 1, base.length - 4));
+      return parsed ? {
+        name: scope && scope.charAt(0) === "@" ? `${scope}/${name}` : name,
+        version: parsed.version
+      } : null;
+    }, "versionFromBaseScopeName");
+  }
+});
+
+// node_modules/.pnpm/just-diff@6.0.2/node_modules/just-diff/index.cjs
+var require_just_diff = __commonJS({
+  "node_modules/.pnpm/just-diff@6.0.2/node_modules/just-diff/index.cjs"(exports2, module2) {
+    module2.exports = {
+      diff,
+      jsonPatchPathConverter
+    };
+    function diff(obj1, obj2, pathConverter) {
+      if (!obj1 || typeof obj1 != "object" || !obj2 || typeof obj2 != "object") {
+        throw new Error("both arguments must be objects or arrays");
+      }
+      pathConverter || (pathConverter = /* @__PURE__ */ __name(function(arr) {
+        return arr;
+      }, "pathConverter"));
+      function getDiff({ obj1: obj12, obj2: obj22, basePath, basePathForRemoves, diffs: diffs2 }) {
+        var obj1Keys = Object.keys(obj12);
+        var obj1KeysLength = obj1Keys.length;
+        var obj2Keys = Object.keys(obj22);
+        var obj2KeysLength = obj2Keys.length;
+        var path;
+        var lengthDelta = obj12.length - obj22.length;
+        if (trimFromRight(obj12, obj22)) {
+          for (var i = 0; i < obj1KeysLength; i++) {
+            var key = Array.isArray(obj12) ? Number(obj1Keys[i]) : obj1Keys[i];
+            if (!(key in obj22)) {
+              path = basePathForRemoves.concat(key);
+              diffs2.remove.push({
+                op: "remove",
+                path: pathConverter(path)
+              });
+            }
+          }
+          for (var i = 0; i < obj2KeysLength; i++) {
+            var key = Array.isArray(obj22) ? Number(obj2Keys[i]) : obj2Keys[i];
+            pushReplaces({
+              key,
+              obj1: obj12,
+              obj2: obj22,
+              path: basePath.concat(key),
+              pathForRemoves: basePath.concat(key),
+              diffs: diffs2
+            });
+          }
+        } else {
+          for (var i = 0; i < lengthDelta; i++) {
+            path = basePathForRemoves.concat(i);
+            diffs2.remove.push({
+              op: "remove",
+              path: pathConverter(path)
+            });
+          }
+          var obj1Trimmed = obj12.slice(lengthDelta);
+          ;
+          for (var i = 0; i < obj2KeysLength; i++) {
+            pushReplaces({
+              key: i,
+              obj1: obj1Trimmed,
+              obj2: obj22,
+              path: basePath.concat(i),
+              // since list of removes are reversed before presenting result,
+              // we need to ignore existing parent removes when doing nested removes
+              pathForRemoves: basePath.concat(i + lengthDelta),
+              diffs: diffs2
+            });
+          }
+        }
+      }
+      __name(getDiff, "getDiff");
+      var diffs = { remove: [], replace: [], add: [] };
+      getDiff({
+        obj1,
+        obj2,
+        basePath: [],
+        basePathForRemoves: [],
+        diffs
+      });
+      return diffs.remove.reverse().concat(diffs.replace).concat(diffs.add);
+      function pushReplaces({ key, obj1: obj12, obj2: obj22, path, pathForRemoves, diffs: diffs2 }) {
+        var obj1AtKey = obj12[key];
+        var obj2AtKey = obj22[key];
+        if (!(key in obj12) && key in obj22) {
+          var obj2Value = obj2AtKey;
+          diffs2.add.push({
+            op: "add",
+            path: pathConverter(path),
+            value: obj2Value
+          });
+        } else if (obj1AtKey !== obj2AtKey) {
+          if (Object(obj1AtKey) !== obj1AtKey || Object(obj2AtKey) !== obj2AtKey || differentTypes(obj1AtKey, obj2AtKey)) {
+            pushReplace(path, diffs2, obj2AtKey);
+          } else {
+            if (!Object.keys(obj1AtKey).length && !Object.keys(obj2AtKey).length && String(obj1AtKey) != String(obj2AtKey)) {
+              pushReplace(path, diffs2, obj2AtKey);
+            } else {
+              getDiff({
+                obj1: obj12[key],
+                obj2: obj22[key],
+                basePath: path,
+                basePathForRemoves: pathForRemoves,
+                diffs: diffs2
+              });
+            }
+          }
+        }
+      }
+      __name(pushReplaces, "pushReplaces");
+      function pushReplace(path, diffs2, newValue) {
+        diffs2.replace.push({
+          op: "replace",
+          path: pathConverter(path),
+          value: newValue
+        });
+      }
+      __name(pushReplace, "pushReplace");
+    }
+    __name(diff, "diff");
+    function jsonPatchPathConverter(arrayPath) {
+      return [""].concat(arrayPath).join("/");
+    }
+    __name(jsonPatchPathConverter, "jsonPatchPathConverter");
+    function differentTypes(a, b) {
+      return Object.prototype.toString.call(a) != Object.prototype.toString.call(b);
+    }
+    __name(differentTypes, "differentTypes");
+    function trimFromRight(obj1, obj2) {
+      var lengthDelta = obj1.length - obj2.length;
+      if (Array.isArray(obj1) && Array.isArray(obj2) && lengthDelta > 0) {
+        var leftMatches = 0;
+        var rightMatches = 0;
+        for (var i = 0; i < obj2.length; i++) {
+          if (String(obj1[i]) === String(obj2[i])) {
+            leftMatches++;
+          } else {
+            break;
+          }
+        }
+        for (var j = obj2.length; j > 0; j--) {
+          if (String(obj1[j + lengthDelta]) === String(obj2[j])) {
+            rightMatches++;
+          } else {
+            break;
+          }
+        }
+        return leftMatches >= rightMatches;
+      }
+      return true;
+    }
+    __name(trimFromRight, "trimFromRight");
+  }
+});
+
+// node_modules/.pnpm/just-diff-apply@5.5.0/node_modules/just-diff-apply/index.cjs
+var require_just_diff_apply = __commonJS({
+  "node_modules/.pnpm/just-diff-apply@5.5.0/node_modules/just-diff-apply/index.cjs"(exports2, module2) {
+    module2.exports = {
+      diffApply,
+      jsonPatchPathConverter
+    };
+    var REMOVE = "remove";
+    var REPLACE = "replace";
+    var ADD = "add";
+    var MOVE = "move";
+    function diffApply(obj, diff, pathConverter) {
+      if (!obj || typeof obj != "object") {
+        throw new Error("base object must be an object or an array");
+      }
+      if (!Array.isArray(diff)) {
+        throw new Error("diff must be an array");
+      }
+      var diffLength = diff.length;
+      for (var i = 0; i < diffLength; i++) {
+        var thisDiff = diff[i];
+        var subObject = obj;
+        var thisOp = thisDiff.op;
+        var thisPath = transformPath(pathConverter, thisDiff.path);
+        var thisFromPath = thisDiff.from && transformPath(pathConverter, thisDiff.from);
+        var toPath, toPathCopy, lastToProp, subToObject, valueToMove;
+        if (thisFromPath) {
+          toPath = thisPath;
+          thisPath = thisFromPath;
+          toPathCopy = toPath.slice();
+          lastToProp = toPathCopy.pop();
+          prototypeCheck(lastToProp);
+          if (lastToProp == null) {
+            return false;
+          }
+          var thisToProp;
+          while ((thisToProp = toPathCopy.shift()) != null) {
+            prototypeCheck(thisToProp);
+            if (!(thisToProp in subToObject)) {
+              subToObject[thisToProp] = {};
+            }
+            subToObject = subToObject[thisToProp];
+          }
+        }
+        var pathCopy = thisPath.slice();
+        var lastProp = pathCopy.pop();
+        prototypeCheck(lastProp);
+        if (lastProp == null) {
+          return false;
+        }
+        var thisProp;
+        while ((thisProp = pathCopy.shift()) != null) {
+          prototypeCheck(thisProp);
+          if (!(thisProp in subObject)) {
+            subObject[thisProp] = {};
+          }
+          subObject = subObject[thisProp];
+        }
+        if (thisOp === REMOVE || thisOp === REPLACE || thisOp === MOVE) {
+          var path = thisOp === MOVE ? thisDiff.from : thisDiff.path;
+          if (!subObject.hasOwnProperty(lastProp)) {
+            throw new Error(["expected to find property", path, "in object", obj].join(" "));
+          }
+        }
+        if (thisOp === REMOVE || thisOp === MOVE) {
+          if (thisOp === MOVE) {
+            valueToMove = subObject[lastProp];
+          }
+          Array.isArray(subObject) ? subObject.splice(lastProp, 1) : delete subObject[lastProp];
+        }
+        if (thisOp === REPLACE || thisOp === ADD) {
+          subObject[lastProp] = thisDiff.value;
+        }
+        if (thisOp === MOVE) {
+          subObject[lastToProp] = valueToMove;
+        }
+      }
+      return subObject;
+    }
+    __name(diffApply, "diffApply");
+    function transformPath(pathConverter, thisPath) {
+      if (pathConverter) {
+        thisPath = pathConverter(thisPath);
+        if (!Array.isArray(thisPath)) {
+          throw new Error([
+            "pathConverter must return an array, returned:",
+            thisPath
+          ].join(" "));
+        }
+      } else {
+        if (!Array.isArray(thisPath)) {
+          throw new Error([
+            "diff path",
+            thisPath,
+            "must be an array, consider supplying a path converter"
+          ].join(" "));
+        }
+      }
+      return thisPath;
+    }
+    __name(transformPath, "transformPath");
+    function jsonPatchPathConverter(stringPath) {
+      return stringPath.split("/").slice(1);
+    }
+    __name(jsonPatchPathConverter, "jsonPatchPathConverter");
+    function prototypeCheck(prop) {
+      if (prop == "__proto__" || prop == "constructor" || prop == "prototype") {
+        throw new Error("setting of prototype values not supported");
+      }
+    }
+    __name(prototypeCheck, "prototypeCheck");
+  }
+});
+
+// node_modules/.pnpm/parse-conflict-json@4.0.0/node_modules/parse-conflict-json/lib/index.js
+var require_lib41 = __commonJS({
+  "node_modules/.pnpm/parse-conflict-json@4.0.0/node_modules/parse-conflict-json/lib/index.js"(exports2, module2) {
+    var parseJSON = require_lib();
+    var { diff } = require_just_diff();
+    var { diffApply } = require_just_diff_apply();
+    var globalObjectProperties = Object.getOwnPropertyNames(Object.prototype);
+    var stripBOM = /* @__PURE__ */ __name((content) => {
+      content = content.toString();
+      if (content.charCodeAt(0) === 65279) {
+        content = content.slice(1);
+      }
+      return content;
+    }, "stripBOM");
+    var PARENT_RE = /\|{7,}/g;
+    var OURS_RE = /<{7,}/g;
+    var THEIRS_RE = /={7,}/g;
+    var END_RE = />{7,}/g;
+    var isDiff = /* @__PURE__ */ __name((str) => str.match(OURS_RE) && str.match(THEIRS_RE) && str.match(END_RE), "isDiff");
+    var parseConflictJSON = /* @__PURE__ */ __name((str, reviver, prefer) => {
+      prefer = prefer || "ours";
+      if (prefer !== "theirs" && prefer !== "ours") {
+        throw new TypeError('prefer param must be "ours" or "theirs" if set');
+      }
+      str = stripBOM(str);
+      if (!isDiff(str)) {
+        return parseJSON(str);
+      }
+      const pieces = str.split(/[\n\r]+/g).reduce((acc, line) => {
+        if (line.match(PARENT_RE)) {
+          acc.state = "parent";
+        } else if (line.match(OURS_RE)) {
+          acc.state = "ours";
+        } else if (line.match(THEIRS_RE)) {
+          acc.state = "theirs";
+        } else if (line.match(END_RE)) {
+          acc.state = "top";
+        } else {
+          if (acc.state === "top" || acc.state === "ours") {
+            acc.ours += line;
+          }
+          if (acc.state === "top" || acc.state === "theirs") {
+            acc.theirs += line;
+          }
+          if (acc.state === "top" || acc.state === "parent") {
+            acc.parent += line;
+          }
+        }
+        return acc;
+      }, {
+        state: "top",
+        ours: "",
+        theirs: "",
+        parent: ""
+      });
+      const parent = parseJSON(pieces.parent, reviver);
+      const ours = parseJSON(pieces.ours, reviver);
+      const theirs = parseJSON(pieces.theirs, reviver);
+      return prefer === "ours" ? resolve(parent, ours, theirs) : resolve(parent, theirs, ours);
+    }, "parseConflictJSON");
+    var isObj = /* @__PURE__ */ __name((obj) => obj && typeof obj === "object", "isObj");
+    var copyPath = /* @__PURE__ */ __name((to, from, path, i) => {
+      const p = path[i];
+      if (isObj(to[p]) && isObj(from[p]) && Array.isArray(to[p]) === Array.isArray(from[p])) {
+        return copyPath(to[p], from[p], path, i + 1);
+      }
+      to[p] = from[p];
+    }, "copyPath");
+    var resolve = /* @__PURE__ */ __name((parent, ours, theirs) => {
+      const dours = diff(parent, ours);
+      for (let i = 0; i < dours.length; i++) {
+        if (globalObjectProperties.find((prop) => dours[i].path.includes(prop))) {
+          continue;
+        }
+        try {
+          diffApply(theirs, [dours[i]]);
+        } catch (e) {
+          copyPath(theirs, ours, dours[i].path, 0);
+        }
+      }
+      return theirs;
+    }, "resolve");
+    module2.exports = Object.assign(parseConflictJSON, { isDiff });
+  }
+});
+
+// node_modules/.pnpm/json-stringify-nice@1.1.4/node_modules/json-stringify-nice/index.js
+var require_json_stringify_nice = __commonJS({
+  "node_modules/.pnpm/json-stringify-nice@1.1.4/node_modules/json-stringify-nice/index.js"(exports2, module2) {
+    var isObj = /* @__PURE__ */ __name((val) => !!val && !Array.isArray(val) && typeof val === "object", "isObj");
+    var compare = /* @__PURE__ */ __name((ak, bk, prefKeys) => prefKeys.includes(ak) && !prefKeys.includes(bk) ? -1 : prefKeys.includes(bk) && !prefKeys.includes(ak) ? 1 : prefKeys.includes(ak) && prefKeys.includes(bk) ? prefKeys.indexOf(ak) - prefKeys.indexOf(bk) : ak.localeCompare(bk, "en"), "compare");
+    var sort = /* @__PURE__ */ __name((replacer, seen) => (key, val) => {
+      const prefKeys = Array.isArray(replacer) ? replacer : [];
+      if (typeof replacer === "function")
+        val = replacer(key, val);
+      if (!isObj(val))
+        return val;
+      if (seen.has(val))
+        return seen.get(val);
+      const ret = Object.entries(val).sort(
+        ([ak, av], [bk, bv]) => isObj(av) === isObj(bv) ? compare(ak, bk, prefKeys) : isObj(av) ? 1 : -1
+      ).reduce((set, [k, v]) => {
+        set[k] = v;
+        return set;
+      }, {});
+      seen.set(val, ret);
+      return ret;
+    }, "sort");
+    module2.exports = (obj, replacer, space = 2) => JSON.stringify(obj, sort(replacer, /* @__PURE__ */ new Map()), space) + (space ? "\n" : "");
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/override-resolves.js
+var require_override_resolves = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/override-resolves.js"(exports2, module2) {
+    function overrideResolves(resolved, opts) {
+      const { omitLockfileRegistryResolved = false } = opts;
+      if (omitLockfileRegistryResolved) {
+        return void 0;
+      }
+      return resolved;
+    }
+    __name(overrideResolves, "overrideResolves");
+    module2.exports = { overrideResolves };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/shrinkwrap.js
+var require_shrinkwrap = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/shrinkwrap.js"(exports2, module2) {
+    var localeCompare = require_string_locale_compare()("en");
+    var defaultLockfileVersion = 3;
+    var mismatch = /* @__PURE__ */ __name((a, b) => a && b && a !== b, "mismatch");
+    var { log } = require_lib2();
+    var YarnLock = require_yarn_lock();
+    var {
+      readFile,
+      readdir,
+      readlink,
+      rm,
+      stat,
+      writeFile
+    } = require("node:fs/promises");
+    var { resolve, basename, relative } = require("node:path");
+    var specFromLock = require_spec_from_lock();
+    var versionFromTgz = require_version_from_tgz();
+    var npa = require_npa();
+    var pkgJson = require_lib11();
+    var parseJSON = require_lib41();
+    var nameFromFolder = require_lib32();
+    var stringify = require_json_stringify_nice();
+    var swKeyOrder = [
+      "name",
+      "version",
+      "lockfileVersion",
+      "resolved",
+      "integrity",
+      "requires",
+      "packages",
+      "dependencies"
+    ];
+    var yarnRegRe = /^https?:\/\/registry\.yarnpkg\.com\//;
+    var npmRegRe = /^https?:\/\/registry\.npmjs\.org\//;
+    var specFromResolved = /* @__PURE__ */ __name((resolved) => {
+      try {
+        return npa(resolved);
+      } catch (er) {
+        return {};
+      }
+    }, "specFromResolved");
+    var relpath = require_relpath();
+    var consistentResolve = require_consistent_resolve();
+    var { overrideResolves } = require_override_resolves();
+    var pkgMetaKeys = [
+      // note: name is included if necessary, for alias packages
+      "version",
+      "dependencies",
+      "peerDependencies",
+      "peerDependenciesMeta",
+      "optionalDependencies",
+      "bundleDependencies",
+      "acceptDependencies",
+      "funding",
+      "engines",
+      "os",
+      "cpu",
+      "_integrity",
+      "license",
+      "_hasShrinkwrap",
+      "hasInstallScript",
+      "bin",
+      "deprecated",
+      "workspaces"
+    ];
+    var nodeMetaKeys = [
+      "integrity",
+      "inBundle",
+      "hasShrinkwrap",
+      "hasInstallScript"
+    ];
+    var metaFieldFromPkg = /* @__PURE__ */ __name((pkg, key) => {
+      const val = pkg[key];
+      if (val) {
+        if (key === "license" && typeof val === "object" && val.type) {
+          return val.type;
+        }
+        if (typeof val !== "object" || Object.keys(val).length) {
+          return val;
+        }
+      }
+      return null;
+    }, "metaFieldFromPkg");
+    var assertNoNewer = /* @__PURE__ */ __name(async (path, data, lockTime, dir, seen) => {
+      const base = basename(dir);
+      const isNM = dir !== path && base === "node_modules";
+      const isScope = dir !== path && base.startsWith("@");
+      const isParent = dir === path || isNM || isScope;
+      const parent = isParent ? dir : resolve(dir, "node_modules");
+      const rel = relpath(path, dir);
+      seen.add(rel);
+      let entries;
+      if (dir === path) {
+        entries = [{ name: "node_modules", isDirectory: /* @__PURE__ */ __name(() => true, "isDirectory") }];
+      } else {
+        const { mtime: dirTime } = await stat(dir);
+        if (dirTime > lockTime) {
+          throw new Error(`out of date, updated: ${rel}`);
+        }
+        if (!isScope && !isNM && !data.packages[rel]) {
+          throw new Error(`missing from lockfile: ${rel}`);
+        }
+        entries = await readdir(parent, { withFileTypes: true }).catch(() => []);
+      }
+      await Promise.all(entries.map(async (dirent) => {
+        const child = resolve(parent, dirent.name);
+        if (dirent.isDirectory() && !dirent.name.startsWith(".")) {
+          await assertNoNewer(path, data, lockTime, child, seen);
+        } else if (dirent.isSymbolicLink()) {
+          const target = resolve(parent, await readlink(child));
+          const tstat = await stat(target).catch(
+            /* istanbul ignore next - windows */
+            () => null
+          );
+          seen.add(relpath(path, child));
+          if (tstat?.isDirectory() && !seen.has(relpath(path, target))) {
+            await assertNoNewer(path, data, lockTime, target, seen);
+          }
+        }
+      }));
+      if (dir !== path) {
+        return;
+      }
+      for (const loc in data.packages) {
+        if (!seen.has(loc)) {
+          throw new Error(`missing from node_modules: ${loc}`);
+        }
+      }
+    }, "assertNoNewer");
+    var Shrinkwrap = class _Shrinkwrap {
+      static {
+        __name(this, "Shrinkwrap");
+      }
+      static get defaultLockfileVersion() {
+        return defaultLockfileVersion;
+      }
+      static load(options) {
+        return new _Shrinkwrap(options).load();
+      }
+      static get keyOrder() {
+        return swKeyOrder;
+      }
+      static async reset(options) {
+        const s = new _Shrinkwrap(options);
+        s.reset();
+        const [sw, lock] = await s.resetFiles;
+        if (s.hiddenLockfile) {
+          s.filename = resolve(s.path, "node_modules/.package-lock.json");
+        } else if (s.shrinkwrapOnly || sw) {
+          s.filename = resolve(s.path, "npm-shrinkwrap.json");
+        } else {
+          s.filename = resolve(s.path, "package-lock.json");
+        }
+        s.loadedFromDisk = !!(sw || lock);
+        s.type = basename(s.filename);
+        return s;
+      }
+      static metaFromNode(node, path, options = {}) {
+        if (node.isLink) {
+          return {
+            resolved: relpath(path, node.realpath),
+            link: true
+          };
+        }
+        const meta = {};
+        for (const key of pkgMetaKeys) {
+          const val = metaFieldFromPkg(node.package, key);
+          if (val) {
+            meta[key.replace(/^_/, "")] = val;
+          }
+        }
+        const pname = node.packageName;
+        if (pname && (node === node.root || pname !== node.name || nameFromFolder(node.realpath) !== pname)) {
+          meta.name = pname;
+        }
+        if (node.isTop && node.package.devDependencies) {
+          meta.devDependencies = node.package.devDependencies;
+        }
+        for (const key of nodeMetaKeys) {
+          if (node[key]) {
+            meta[key] = node[key];
+          }
+        }
+        const resolved = consistentResolve(node.resolved, node.path, path, true);
+        if (!resolved) {
+        } else if (node.isRegistryDependency) {
+          meta.resolved = overrideResolves(resolved, options);
+        } else {
+          meta.resolved = resolved;
+        }
+        if (node.extraneous) {
+          meta.extraneous = true;
+        } else {
+          if (node.peer) {
+            meta.peer = true;
+          }
+          if (node.dev) {
+            meta.dev = true;
+          }
+          if (node.optional) {
+            meta.optional = true;
+          }
+          if (node.devOptional && !node.dev && !node.optional) {
+            meta.devOptional = true;
+          }
+        }
+        return meta;
+      }
+      #awaitingUpdate = /* @__PURE__ */ new Map();
+      constructor(options = {}) {
+        const {
+          path,
+          indent = 2,
+          newline = "\n",
+          shrinkwrapOnly = false,
+          hiddenLockfile = false,
+          lockfileVersion,
+          resolveOptions = {}
+        } = options;
+        if (hiddenLockfile) {
+          this.lockfileVersion = 3;
+        } else if (lockfileVersion) {
+          this.lockfileVersion = parseInt(lockfileVersion, 10);
+        } else {
+          this.lockfileVersion = null;
+        }
+        this.tree = null;
+        this.path = resolve(path || ".");
+        this.filename = null;
+        this.data = null;
+        this.indent = indent;
+        this.newline = newline;
+        this.loadedFromDisk = false;
+        this.type = null;
+        this.yarnLock = null;
+        this.hiddenLockfile = hiddenLockfile;
+        this.loadingError = null;
+        this.resolveOptions = resolveOptions;
+        this.shrinkwrapOnly = shrinkwrapOnly;
+      }
+      // check to see if a spec is present in the yarn.lock file, and if so,
+      // if we should use it, and what it should resolve to.  This is only
+      // done when we did not load a shrinkwrap from disk.  Also, decorate
+      // the options object if provided with the resolved and integrity that
+      // we expect.
+      checkYarnLock(spec, options = {}) {
+        spec = npa(spec);
+        const { yarnLock, loadedFromDisk } = this;
+        const useYarnLock = yarnLock && !loadedFromDisk;
+        const fromYarn = useYarnLock && yarnLock.entries.get(spec.raw);
+        if (fromYarn && fromYarn.version) {
+          const { resolved, version, integrity } = fromYarn;
+          const isYarnReg = spec.registry && yarnRegRe.test(resolved);
+          const isnpmReg = spec.registry && !isYarnReg && npmRegRe.test(resolved);
+          const isReg = isnpmReg || isYarnReg;
+          const tgz = isReg && versionFromTgz(spec.name, resolved) || {};
+          let yspec = resolved;
+          if (tgz.name === spec.name && tgz.version === version) {
+            yspec = version;
+          } else if (isReg && tgz.name && tgz.version) {
+            yspec = `npm:${tgz.name}@${tgz.version}`;
+          }
+          if (yspec) {
+            options.resolved = resolved.replace(yarnRegRe, "https://registry.npmjs.org/");
+            options.integrity = integrity;
+            return npa(`${spec.name}@${yspec}`);
+          }
+        }
+        return spec;
+      }
+      // throw away the shrinkwrap data so we can start fresh
+      // still worth doing a load() first so we know which files to write.
+      reset() {
+        this.tree = null;
+        this.#awaitingUpdate = /* @__PURE__ */ new Map();
+        const lockfileVersion = this.lockfileVersion || defaultLockfileVersion;
+        this.originalLockfileVersion = lockfileVersion;
+        this.data = {
+          lockfileVersion,
+          requires: true,
+          packages: {},
+          dependencies: {}
+        };
+      }
+      // files to potentially read from and write to, in order of priority
+      get #filenameSet() {
+        if (this.shrinkwrapOnly) {
+          return [`${this.path}/npm-shrinkwrap.json`];
+        }
+        if (this.hiddenLockfile) {
+          return [`${this.path}/node_modules/.package-lock.json`];
+        }
+        return [
+          `${this.path}/npm-shrinkwrap.json`,
+          `${this.path}/package-lock.json`,
+          `${this.path}/yarn.lock`
+        ];
+      }
+      get loadFiles() {
+        return Promise.all(
+          this.#filenameSet.map((file) => file && readFile(file, "utf8").then((d) => d, (er) => {
+            if (er.code === "ENOENT") {
+              return "";
+            } else {
+              throw er;
+            }
+          }))
+        );
+      }
+      get resetFiles() {
+        return Promise.all(
+          this.#filenameSet.slice(0, 2).map(
+            (file) => file && stat(file).then((st) => st.isFile(), (er) => {
+              if (er.code === "ENOENT") {
+                return null;
+              } else {
+                throw er;
+              }
+            })
+          )
+        );
+      }
+      inferFormattingOptions(packageJSONData) {
+        const {
+          [Symbol.for("indent")]: indent,
+          [Symbol.for("newline")]: newline
+        } = packageJSONData;
+        if (indent !== void 0) {
+          this.indent = indent;
+        }
+        if (newline !== void 0) {
+          this.newline = newline;
+        }
+      }
+      async load() {
+        let data;
+        try {
+          const [sw, lock, yarn] = await this.loadFiles;
+          data = sw || lock || "{}";
+          if (this.hiddenLockfile) {
+            this.filename = resolve(this.path, "node_modules/.package-lock.json");
+          } else if (this.shrinkwrapOnly || sw) {
+            this.filename = resolve(this.path, "npm-shrinkwrap.json");
+          } else {
+            this.filename = resolve(this.path, "package-lock.json");
+          }
+          this.type = basename(this.filename);
+          this.loadedFromDisk = Boolean(sw || lock);
+          if (yarn) {
+            this.yarnLock = new YarnLock();
+            try {
+              this.yarnLock.parse(yarn);
+            } catch {
+            }
+          }
+          data = parseJSON(data);
+          this.inferFormattingOptions(data);
+          if (this.hiddenLockfile && data.packages) {
+            const lockTime = +(await stat(this.filename)).mtime + 10;
+            await assertNoNewer(this.path, data, lockTime, this.path, /* @__PURE__ */ new Set());
+          }
+        } catch (er) {
+          if (typeof this.filename === "string") {
+            const rel = relpath(this.path, this.filename);
+            log.verbose("shrinkwrap", `failed to load ${rel}`, er.message);
+          } else {
+            log.verbose("shrinkwrap", `failed to load ${this.path}`, er.message);
+          }
+          this.loadingError = er;
+          this.loadedFromDisk = false;
+          this.ancientLockfile = false;
+          data = {};
+        }
+        let lockfileVersion = defaultLockfileVersion;
+        if (this.lockfileVersion) {
+          lockfileVersion = this.lockfileVersion;
+        } else if (data.lockfileVersion && data.lockfileVersion !== 1) {
+          lockfileVersion = data.lockfileVersion;
+        }
+        this.data = {
+          ...data,
+          lockfileVersion,
+          requires: true,
+          packages: data.packages || {},
+          dependencies: data.dependencies || {}
+        };
+        this.originalLockfileVersion = data.lockfileVersion;
+        if (!this.lockfileVersion) {
+          this.lockfileVersion = this.data.lockfileVersion = lockfileVersion;
+        }
+        this.ancientLockfile = this.loadedFromDisk && !(data.lockfileVersion >= 2) && !data.requires;
+        if (data.dependencies && !data.packages) {
+          let pkg;
+          try {
+            pkg = await pkgJson.normalize(this.path);
+            pkg = pkg.content;
+          } catch {
+            pkg = {};
+          }
+          this.#loadAll("", null, this.data);
+          this.#fixDependencies(pkg);
+        }
+        return this;
+      }
+      #loadAll(location, name, lock) {
+        const meta = this.#metaFromLock(location, name, lock);
+        if (meta.link) {
+          location = meta.resolved;
+        }
+        if (lock.dependencies) {
+          for (const name2 in lock.dependencies) {
+            const loc = location + (location ? "/" : "") + "node_modules/" + name2;
+            this.#loadAll(loc, name2, lock.dependencies[name2]);
+          }
+        }
+      }
+      // v1 lockfiles track the optional/dev flags, but they don't tell us
+      // which thing had what kind of dep on what other thing, so we need
+      // to correct that now, or every link will be considered prod
+      #fixDependencies(pkg) {
+        const root = this.data.packages[""];
+        for (const key of pkgMetaKeys) {
+          const val = metaFieldFromPkg(pkg, key);
+          if (val) {
+            root[key.replace(/^_/, "")] = val;
+          }
+        }
+        for (const loc in this.data.packages) {
+          const meta = this.data.packages[loc];
+          if (!meta.requires || !loc) {
+            continue;
+          }
+          for (const name in meta.requires) {
+            const dep = this.#resolveMetaNode(loc, name);
+            let depType = "dependencies";
+            if (dep?.optional && !meta.optional) {
+              depType = "optionalDependencies";
+            } else if (dep?.dev && !meta.dev) {
+              depType = "devDependencies";
+            }
+            if (!meta[depType]) {
+              meta[depType] = {};
+            }
+            meta[depType][name] = meta.requires[name];
+          }
+          delete meta.requires;
+        }
+      }
+      #resolveMetaNode(loc, name) {
+        for (let path = loc; true; path = path.replace(/(^|\/)[^/]*$/, "")) {
+          const check = `${path}${path ? "/" : ""}node_modules/${name}`;
+          if (this.data.packages[check]) {
+            return this.data.packages[check];
+          }
+          if (!path) {
+            break;
+          }
+        }
+        return null;
+      }
+      #lockFromLoc(lock, path, i = 0) {
+        if (!lock) {
+          return null;
+        }
+        if (path[i] === "") {
+          i++;
+        }
+        if (i >= path.length) {
+          return lock;
+        }
+        if (!lock.dependencies) {
+          return null;
+        }
+        return this.#lockFromLoc(lock.dependencies[path[i]], path, i + 1);
+      }
+      // pass in a path relative to the root path, or an absolute path,
+      // get back a /-normalized location based on root path.
+      #pathToLoc(path) {
+        return relpath(this.path, resolve(this.path, path));
+      }
+      delete(nodePath) {
+        if (!this.data) {
+          throw new Error("run load() before getting or setting data");
+        }
+        const location = this.#pathToLoc(nodePath);
+        this.#awaitingUpdate.delete(location);
+        delete this.data.packages[location];
+        const path = location.split(/(?:^|\/)node_modules\//);
+        const name = path.pop();
+        const pLock = this.#lockFromLoc(this.data, path);
+        if (pLock && pLock.dependencies) {
+          delete pLock.dependencies[name];
+        }
+      }
+      get(nodePath) {
+        if (!this.data) {
+          throw new Error("run load() before getting or setting data");
+        }
+        const location = this.#pathToLoc(nodePath);
+        if (this.#awaitingUpdate.has(location)) {
+          this.#updateWaitingNode(location);
+        }
+        if (this.data.packages[location]) {
+          return this.data.packages[location];
+        }
+        const path = location.split(/(?:^|\/)node_modules\//);
+        const name = path[path.length - 1];
+        const lock = this.#lockFromLoc(this.data, path);
+        return this.#metaFromLock(location, name, lock);
+      }
+      #metaFromLock(location, name, lock) {
+        if (!lock) {
+          return {};
+        }
+        const spec = specFromLock(name, lock, this.path);
+        if (spec.type === "directory") {
+          const target = relpath(this.path, spec.fetchSpec);
+          this.data.packages[location] = {
+            link: true,
+            resolved: target
+          };
+          if (!this.data.packages[target]) {
+            this.#metaFromLock(target, name, { ...lock, version: null });
+          }
+          return this.data.packages[location];
+        }
+        const meta = {};
+        if (lock.requires && typeof lock.requires === "object") {
+          meta.requires = lock.requires;
+        }
+        if (lock.optional) {
+          meta.optional = true;
+        }
+        if (lock.dev) {
+          meta.dev = true;
+        }
+        if (location === "") {
+          meta.name = lock.name;
+        }
+        if (lock.integrity) {
+          meta.integrity = lock.integrity;
+        }
+        if (lock.version && !lock.integrity) {
+          if (spec.type === "git") {
+            meta.resolved = consistentResolve(spec, this.path, this.path);
+            return this.data.packages[location] = meta;
+          } else if (spec.registry) {
+            meta.version = lock.version;
+          }
+        }
+        if (lock.resolved || spec.type && !spec.registry) {
+          if (spec.registry) {
+            meta.resolved = lock.resolved;
+          } else if (spec.type === "file") {
+            meta.resolved = consistentResolve(spec, this.path, this.path, true);
+          } else if (spec.fetchSpec) {
+            meta.resolved = spec.fetchSpec;
+          }
+        }
+        if (!meta.version) {
+          if (spec.type === "file" || spec.type === "remote") {
+            const fromTgz = versionFromTgz(spec.name, spec.fetchSpec) || versionFromTgz(spec.name, meta.resolved);
+            if (fromTgz) {
+              meta.version = fromTgz.version;
+              if (fromTgz.name !== name) {
+                meta.name = fromTgz.name;
+              }
+            }
+          } else if (spec.type === "alias") {
+            meta.name = spec.subSpec.name;
+            meta.version = spec.subSpec.fetchSpec;
+          } else if (spec.type === "version") {
+            meta.version = spec.fetchSpec;
+          }
+        }
+        if (lock.bundled) {
+          meta.inBundle = true;
+        }
+        return this.data.packages[location] = meta;
+      }
+      add(node) {
+        if (!this.data) {
+          throw new Error("run load() before getting or setting data");
+        }
+        const loc = relpath(this.path, node.path);
+        if (node.path === this.path) {
+          this.tree = node;
+        }
+        if (node.resolved === null || node.integrity === null) {
+          const {
+            resolved,
+            integrity,
+            hasShrinkwrap,
+            version
+          } = this.get(node.path);
+          let pathFixed = null;
+          if (resolved) {
+            if (!/^file:/.test(resolved)) {
+              pathFixed = resolved;
+            } else {
+              pathFixed = `file:${resolve(this.path, resolved.slice(5))}`;
+            }
+          }
+          const resolvedOk = !resolved || !node.resolved || node.resolved === pathFixed;
+          const integrityOk = !integrity || !node.integrity || node.integrity === integrity;
+          const versionOk = !version || !node.version || version === node.version;
+          const allOk = (resolved || integrity || version) && resolvedOk && integrityOk && versionOk;
+          if (allOk) {
+            node.resolved = node.resolved || pathFixed || null;
+            node.integrity = node.integrity || integrity || null;
+            node.hasShrinkwrap = node.hasShrinkwrap || hasShrinkwrap || false;
+          } else {
+            const {
+              resolved: resolved2,
+              integrity: integrity2,
+              hasShrinkwrap: hasShrinkwrap2
+            } = _Shrinkwrap.metaFromNode(node, this.path, this.resolveOptions);
+            node.resolved = node.resolved || resolved2 || null;
+            node.integrity = node.integrity || integrity2 || null;
+            node.hasShrinkwrap = node.hasShrinkwrap || hasShrinkwrap2 || false;
+          }
+        }
+        this.#awaitingUpdate.set(loc, node);
+      }
+      addEdge(edge) {
+        if (!this.yarnLock || !edge.valid) {
+          return;
+        }
+        const { to: node } = edge;
+        if (node.resolved !== null && node.integrity !== null) {
+          return;
+        }
+        if (!this.yarnLock.entries || !this.yarnLock.entries.size) {
+          return;
+        }
+        let pathFixed = null;
+        if (node.resolved) {
+          if (!/file:/.test(node.resolved)) {
+            pathFixed = node.resolved;
+          } else {
+            pathFixed = consistentResolve(node.resolved, node.path, this.path, true);
+          }
+        }
+        const spec = npa(`${node.name}@${edge.spec}`);
+        const entry = this.yarnLock.entries.get(`${node.name}@${edge.spec}`);
+        if (!entry || mismatch(node.version, entry.version) || mismatch(node.integrity, entry.integrity) || mismatch(pathFixed, entry.resolved)) {
+          return;
+        }
+        if (entry.resolved && yarnRegRe.test(entry.resolved) && spec.registry) {
+          entry.resolved = entry.resolved.replace(yarnRegRe, "https://registry.npmjs.org/");
+        }
+        node.integrity = node.integrity || entry.integrity || null;
+        node.resolved = node.resolved || consistentResolve(entry.resolved, this.path, node.path) || null;
+        this.#awaitingUpdate.set(relpath(this.path, node.path), node);
+      }
+      #updateWaitingNode(loc) {
+        const node = this.#awaitingUpdate.get(loc);
+        this.#awaitingUpdate.delete(loc);
+        this.data.packages[loc] = _Shrinkwrap.metaFromNode(
+          node,
+          this.path,
+          this.resolveOptions
+        );
+      }
+      commit() {
+        if (this.tree) {
+          if (this.yarnLock) {
+            this.yarnLock.fromTree(this.tree);
+          }
+          const root = _Shrinkwrap.metaFromNode(
+            this.tree.target,
+            this.path,
+            this.resolveOptions
+          );
+          this.data.packages = {};
+          if (Object.keys(root).length) {
+            this.data.packages[""] = root;
+          }
+          for (const node of this.tree.root.inventory.values()) {
+            if (node === this.tree || node.isRoot || node.location === "") {
+              continue;
+            }
+            const loc = relpath(this.path, node.path);
+            this.data.packages[loc] = _Shrinkwrap.metaFromNode(
+              node,
+              this.path,
+              this.resolveOptions
+            );
+          }
+        } else if (this.#awaitingUpdate.size > 0) {
+          for (const loc of this.#awaitingUpdate.keys()) {
+            this.#updateWaitingNode(loc);
+          }
+        }
+        if (!this.lockfileVersion) {
+          this.lockfileVersion = defaultLockfileVersion;
+        }
+        this.data.lockfileVersion = this.lockfileVersion;
+        if (this.hiddenLockfile) {
+          delete this.data.packages[""];
+          delete this.data.dependencies;
+        } else if (this.tree && this.lockfileVersion <= 3) {
+          this.#buildLegacyLockfile(this.tree, this.data);
+        }
+        if (this.lockfileVersion >= 3) {
+          const { dependencies, ...data } = this.data;
+          return data;
+        } else if (this.lockfileVersion < 2) {
+          const { packages, ...data } = this.data;
+          return data;
+        } else {
+          return { ...this.data };
+        }
+      }
+      #buildLegacyLockfile(node, lock, path = []) {
+        if (node === this.tree) {
+          lock.name = node.packageName || node.name;
+          if (node.version) {
+            lock.version = node.version;
+          }
+        }
+        const edge = [...node.edgesIn].filter((e) => e.valid).sort((a, b) => {
+          const aloc = a.from.location.split("node_modules");
+          const bloc = b.from.location.split("node_modules");
+          if (aloc.length > bloc.length) {
+            return 1;
+          }
+          if (bloc.length > aloc.length) {
+            return -1;
+          }
+          return localeCompare(aloc[aloc.length - 1], bloc[bloc.length - 1]);
+        })[0];
+        const res = consistentResolve(node.resolved, this.path, this.path, true);
+        const rSpec = specFromResolved(res);
+        let spec = rSpec;
+        if (edge) {
+          spec = npa.resolve(node.name, edge.spec, edge.from.realpath);
+        }
+        if (node.isLink) {
+          lock.version = `file:${relpath(this.path, node.realpath)}`;
+        } else if (spec && (spec.type === "file" || spec.type === "remote")) {
+          lock.version = spec.saveSpec;
+        } else if (spec && spec.type === "git" || rSpec.type === "git") {
+          lock.version = node.resolved;
+          if (spec.raw) {
+            lock.from = spec.raw;
+          }
+        } else if (!node.isRoot && node.package && node.packageName && node.packageName !== node.name) {
+          lock.version = `npm:${node.packageName}@${node.version}`;
+        } else if (node.package && node.version) {
+          lock.version = node.version;
+        }
+        if (node.inDepBundle) {
+          lock.bundled = true;
+        }
+        if (node.resolved && !node.isLink && rSpec.type !== "git" && rSpec.type !== "file" && rSpec.type !== "directory" && spec.type !== "directory" && spec.type !== "git" && spec.type !== "file" && spec.type !== "remote") {
+          lock.resolved = overrideResolves(node.resolved, this.resolveOptions);
+        }
+        if (node.integrity) {
+          lock.integrity = node.integrity;
+        }
+        if (node.extraneous) {
+          lock.extraneous = true;
+        } else if (!node.isLink) {
+          if (node.peer) {
+            lock.peer = true;
+          }
+          if (node.devOptional && !node.dev && !node.optional) {
+            lock.devOptional = true;
+          }
+          if (node.dev) {
+            lock.dev = true;
+          }
+          if (node.optional) {
+            lock.optional = true;
+          }
+        }
+        const depender = node.target;
+        if (depender.edgesOut.size > 0) {
+          if (node !== this.tree) {
+            const entries = [...depender.edgesOut.entries()];
+            lock.requires = entries.reduce((set, [k, v]) => {
+              const { spec: spec2, peer } = v;
+              if (peer) {
+                return set;
+              }
+              if (spec2.startsWith("file:")) {
+                const p = resolve(node.realpath, spec2.slice("file:".length));
+                set[k] = `file:${relpath(node.realpath, p)}`;
+              } else {
+                set[k] = spec2;
+              }
+              return set;
+            }, {});
+          } else {
+            lock.requires = true;
+          }
+        }
+        const { children } = node.target;
+        if (!children.size) {
+          delete lock.dependencies;
+        } else {
+          const kidPath = [...path, node.realpath];
+          const dependencies = {};
+          let found = false;
+          for (const [name, kid] of children.entries()) {
+            if (path.includes(kid.realpath)) {
+              continue;
+            }
+            dependencies[name] = this.#buildLegacyLockfile(kid, {}, kidPath);
+            found = true;
+          }
+          if (found) {
+            lock.dependencies = dependencies;
+          }
+        }
+        return lock;
+      }
+      toJSON() {
+        if (!this.data) {
+          throw new Error("run load() before getting or setting data");
+        }
+        return this.commit();
+      }
+      toString(options = {}) {
+        const data = this.toJSON();
+        const { format = true } = options;
+        const defaultIndent = this.indent || 2;
+        const indent = format === true ? defaultIndent : format || 0;
+        const eol = format ? this.newline || "\n" : "";
+        return stringify(data, swKeyOrder, indent).replace(/\n/g, eol);
+      }
+      save(options = {}) {
+        if (!this.data) {
+          throw new Error("run load() before saving data");
+        }
+        const json = this.toString(options);
+        if (!this.hiddenLockfile && this.originalLockfileVersion !== void 0 && this.originalLockfileVersion !== this.lockfileVersion) {
+          log.warn(
+            "shrinkwrap",
+            `Converting lock file (${relative(process.cwd(), this.filename)}) from v${this.originalLockfileVersion} -> v${this.lockfileVersion}`
+          );
+        }
+        return Promise.all([
+          writeFile(this.filename, json).catch((er) => {
+            if (this.hiddenLockfile) {
+              return rm(this.filename, { recursive: true, force: true });
+            }
+            throw er;
+          }),
+          this.yarnLock && this.yarnLock.entries.size && writeFile(this.path + "/yarn.lock", this.yarnLock.toString())
+        ]);
+      }
+    };
+    module2.exports = Shrinkwrap;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/optional-set.js
+var require_optional_set = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/optional-set.js"(exports2, module2) {
+    var gatherDepSet = require_gather_dep_set();
+    var optionalSet = /* @__PURE__ */ __name((node) => {
+      if (!node.optional) {
+        return /* @__PURE__ */ new Set();
+      }
+      const set = /* @__PURE__ */ new Set([node]);
+      for (const node2 of set) {
+        for (const edge of node2.edgesIn) {
+          if (!edge.optional) {
+            set.add(edge.from);
+          }
+        }
+      }
+      return gatherDepSet(set, (edge) => !set.has(edge.to));
+    }, "optionalSet");
+    module2.exports = optionalSet;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/reset-dep-flags.js
+var require_reset_dep_flags = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/reset-dep-flags.js"(exports2, module2) {
+    module2.exports = (tree) => {
+      for (const node of tree.inventory.values()) {
+        node.extraneous = true;
+        node.dev = true;
+        node.devOptional = true;
+        node.peer = true;
+        node.optional = true;
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js
+var require_build_ideal_tree = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js"(exports2, module2) {
+    var localeCompare = require_string_locale_compare()("en");
+    var PackageJson = require_lib11();
+    var npa = require_npa();
+    var pacote2 = require_lib30();
+    var cacache2 = require_lib17();
+    var { callLimit: promiseCallLimit } = require_commonjs9();
+    var realpath = require_realpath();
+    var { resolve, dirname, sep } = require("node:path");
+    var treeCheck = require_tree_check();
+    var { readdirScoped } = require_lib15();
+    var { lstat, readlink } = require("node:fs/promises");
+    var { depth } = require_lib31();
+    var { log, time } = require_lib2();
+    var { redact } = require_lib25();
+    var semver2 = require_semver2();
+    var {
+      OK,
+      REPLACE,
+      CONFLICT
+    } = require_can_place_dep();
+    var PlaceDep = require_place_dep();
+    var debug = require_debug2();
+    var fromPath = require_from_path();
+    var calcDepFlags = require_calc_dep_flags();
+    var Shrinkwrap = require_shrinkwrap();
+    var { defaultLockfileVersion } = Shrinkwrap;
+    var Node = require_node5();
+    var Link = require_link();
+    var addRmPkgDeps = require_add_rm_pkg_deps();
+    var optionalSet = require_optional_set();
+    var { checkEngine, checkPlatform } = require_lib7();
+    var relpath = require_relpath();
+    var resetDepFlags = require_reset_dep_flags();
+    var _updateAll = Symbol.for("updateAll");
+    var _flagsSuspect = Symbol.for("flagsSuspect");
+    var _setWorkspaces = Symbol.for("setWorkspaces");
+    var _updateNames = Symbol.for("updateNames");
+    var _resolvedAdd = Symbol.for("resolvedAdd");
+    var _usePackageLock = Symbol.for("usePackageLock");
+    var _rpcache = Symbol.for("realpathCache");
+    var _stcache = Symbol.for("statCache");
+    var _addNodeToTrashList = Symbol.for("addNodeToTrashList");
+    var DepsQueue = class {
+      static {
+        __name(this, "DepsQueue");
+      }
+      #deps = [];
+      #sorted = true;
+      get length() {
+        return this.#deps.length;
+      }
+      push(item) {
+        if (!this.#deps.includes(item)) {
+          this.#sorted = false;
+          this.#deps.push(item);
+        }
+      }
+      pop() {
+        if (!this.#sorted) {
+          this.#deps.sort((a, b) => a.depth - b.depth || localeCompare(a.path, b.path));
+          this.#sorted = true;
+        }
+        return this.#deps.shift();
+      }
+    };
+    module2.exports = (cls) => class IdealTreeBuilder extends cls {
+      static {
+        __name(this, "IdealTreeBuilder");
+      }
+      #complete;
+      #currentDep = null;
+      #depsQueue = new DepsQueue();
+      #depsSeen = /* @__PURE__ */ new Set();
+      #explicitRequests = /* @__PURE__ */ new Set();
+      #follow;
+      #installStrategy;
+      #linkNodes = /* @__PURE__ */ new Set();
+      #loadFailures = /* @__PURE__ */ new Set();
+      #manifests = /* @__PURE__ */ new Map();
+      #mutateTree = false;
+      // a map of each module in a peer set to the thing that depended on
+      // that set of peers in the first place.  Use a WeakMap so that we
+      // don't hold onto references for nodes that are garbage collected.
+      #peerSetSource = /* @__PURE__ */ new WeakMap();
+      #preferDedupe = false;
+      #prune;
+      #strictPeerDeps;
+      #virtualRoots = /* @__PURE__ */ new Map();
+      constructor(options) {
+        super(options);
+        const registry = options.registry || "https://registry.npmjs.org";
+        options.registry = this.registry = registry.replace(/\/+$/, "") + "/";
+        const {
+          follow = false,
+          installStrategy = "hoisted",
+          idealTree = null,
+          installLinks = false,
+          legacyPeerDeps = false,
+          packageLock = true,
+          strictPeerDeps = false,
+          workspaces,
+          global: global2
+        } = options;
+        this.#strictPeerDeps = !!strictPeerDeps;
+        this.idealTree = idealTree;
+        this.installLinks = installLinks;
+        this.legacyPeerDeps = legacyPeerDeps;
+        this[_usePackageLock] = packageLock;
+        this.#installStrategy = global2 ? "shallow" : installStrategy;
+        this.#follow = !!follow;
+        if (workspaces?.length && global2) {
+          throw new Error("Cannot operate on workspaces in global mode");
+        }
+        this[_updateAll] = false;
+        this[_updateNames] = [];
+        this[_resolvedAdd] = [];
+      }
+      get explicitRequests() {
+        return new Set(this.#explicitRequests);
+      }
+      // public method
+      async buildIdealTree(options = {}) {
+        if (this.idealTree) {
+          return this.idealTree;
+        }
+        options = { ...this.options, ...options };
+        if (!options.add || options.add.length === 0) {
+          options.add = null;
+        }
+        if (!options.rm || options.rm.length === 0) {
+          options.rm = null;
+        }
+        const timeEnd = time.start("idealTree");
+        if (!options.add && !options.rm && !options.update && this.options.global) {
+          throw new Error("global requires add, rm, or update option");
+        }
+        this.#parseSettings(options);
+        this.addTracker("idealTree");
+        try {
+          await this.#initTree();
+          await this.#inflateAncientLockfile();
+          await this.#applyUserRequests(options);
+          await this.#buildDeps();
+          await this.#fixDepFlags();
+          await this.#pruneFailedOptional();
+          await this.#checkEngineAndPlatform();
+        } finally {
+          timeEnd();
+          this.finishTracker("idealTree");
+        }
+        return treeCheck(this.idealTree);
+      }
+      async #checkEngineAndPlatform() {
+        const { engineStrict, npmVersion, nodeVersion, omit = [], cpu, os: os2, libc } = this.options;
+        const omitSet = new Set(omit);
+        for (const node of this.idealTree.inventory.values()) {
+          if (!node.optional && !node.shouldOmit(omitSet)) {
+            try {
+              if (!(node.isRoot && node.package.devEngines)) {
+                checkEngine(node.package, npmVersion, nodeVersion, this.options.force);
+              }
+            } catch (err) {
+              if (engineStrict) {
+                throw err;
+              }
+              log.warn(err.code, err.message, {
+                package: err.pkgid,
+                required: err.required,
+                current: err.current
+              });
+            }
+            checkPlatform(node.package, this.options.force);
+          }
+          if (node.optional && !node.inert) {
+            try {
+              checkEngine(node.package, npmVersion, nodeVersion, false);
+              checkPlatform(node.package, false, { cpu, os: os2, libc });
+            } catch (error) {
+              const set = optionalSet(node);
+              for (const node2 of set) {
+                node2.inert = true;
+              }
+            }
+          }
+        }
+      }
+      #parseSettings(options) {
+        const update = options.update === true ? { all: true } : Array.isArray(options.update) ? { names: options.update } : options.update || {};
+        if (update.all || !Array.isArray(update.names)) {
+          update.names = [];
+        }
+        this.#complete = !!options.complete;
+        this.#preferDedupe = !!options.preferDedupe;
+        for (const name of update.names) {
+          const spec = npa(name);
+          const validationError = new TypeError(`Update arguments must only contain package names, eg:
+    npm update ${spec.name}`);
+          validationError.code = "EUPDATEARGS";
+          if (spec.raw !== spec.name) {
+            throw validationError;
+          }
+        }
+        this[_updateNames] = update.names;
+        this[_updateAll] = update.all;
+        this.#prune = options.prune !== false;
+        this.#mutateTree = !!(options.add || options.rm || update.all || update.names.length);
+      }
+      // load the initial tree, either the virtualTree from a shrinkwrap,
+      // or just the root node from a package.json
+      async #initTree() {
+        const timeEnd = time.start("idealTree:init");
+        let root;
+        if (this.options.global) {
+          root = await this.#globalRootNode();
+        } else {
+          try {
+            const { content: pkg } = await PackageJson.normalize(this.path);
+            root = await this.#rootNodeFromPackage(pkg);
+          } catch (err) {
+            if (err.code === "EJSONPARSE") {
+              throw err;
+            }
+            root = await this.#rootNodeFromPackage({});
+          }
+        }
+        return this[_setWorkspaces](root).then((root2) => {
+          if (this.options.global) {
+            return root2;
+          } else if (!this[_usePackageLock] || this[_updateAll]) {
+            return Shrinkwrap.reset({
+              path: this.path,
+              lockfileVersion: this.options.lockfileVersion,
+              resolveOptions: this.options
+            }).then((meta) => Object.assign(root2, { meta }));
+          } else {
+            return this.loadVirtual({ root: root2 }).then((tree) => {
+              this.#applyRootOverridesToWorkspaces(tree);
+              return tree;
+            });
+          }
+        }).then(async (root2) => {
+          if (!this[_updateAll] && !this.options.global && !root2.meta.loadedFromDisk || this.options.global && this[_updateNames].length) {
+            await new this.constructor(this.options).loadActual({ root: root2 });
+            const tree = root2.target;
+            if (tree.children.size) {
+              root2.meta.loadedFromDisk = true;
+              root2.meta.originalLockfileVersion = root2.meta.lockfileVersion = this.options.lockfileVersion || defaultLockfileVersion;
+            }
+          }
+          root2.meta.inferFormattingOptions(root2.package);
+          return root2;
+        }).then((tree) => {
+          depth({
+            tree,
+            getChildren: /* @__PURE__ */ __name((node) => {
+              const children = [];
+              for (const edge of node.edgesOut.values()) {
+                children.push(edge.to);
+              }
+              return children;
+            }, "getChildren"),
+            filter: /* @__PURE__ */ __name((node) => node, "filter"),
+            visit: /* @__PURE__ */ __name((node) => {
+              for (const edge of node.edgesOut.values()) {
+                if (!edge.to || !edge.valid) {
+                  this.#depsQueue.push(node);
+                  break;
+                }
+              }
+            }, "visit")
+          });
+          this.idealTree = tree;
+          this.virtualTree = null;
+          timeEnd();
+          return tree;
+        });
+      }
+      async #globalRootNode() {
+        const root = await this.#rootNodeFromPackage({ dependencies: {} });
+        const meta = new Shrinkwrap({
+          path: this.path,
+          lockfileVersion: this.options.lockfileVersion,
+          resolveOptions: this.options
+        });
+        meta.reset();
+        root.meta = meta;
+        return root;
+      }
+      async #rootNodeFromPackage(pkg) {
+        const real = await realpath(this.path, this[_rpcache], this[_stcache]);
+        const Cls = real === this.path ? Node : Link;
+        const root = new Cls({
+          path: this.path,
+          realpath: real,
+          pkg,
+          extraneous: false,
+          dev: false,
+          devOptional: false,
+          peer: false,
+          optional: false,
+          global: this.options.global,
+          installLinks: this.installLinks,
+          legacyPeerDeps: this.legacyPeerDeps,
+          loadOverrides: true
+        });
+        if (root.isLink) {
+          root.target = new Node({
+            path: real,
+            realpath: real,
+            pkg,
+            extraneous: false,
+            dev: false,
+            devOptional: false,
+            peer: false,
+            optional: false,
+            global: this.options.global,
+            installLinks: this.installLinks,
+            legacyPeerDeps: this.legacyPeerDeps,
+            root
+          });
+        }
+        return root;
+      }
+      // process the add/rm requests by modifying the root node, and the
+      // update.names request by queueing nodes dependent on those named.
+      async #applyUserRequests(options) {
+        const timeEnd = time.start("idealTree:userRequests");
+        const tree = this.idealTree.target;
+        if (!this.options.workspaces.length) {
+          await this.#applyUserRequestsToNode(tree, options);
+        } else {
+          const nodes = this.workspaceNodes(tree, this.options.workspaces);
+          if (this.options.includeWorkspaceRoot) {
+            nodes.push(tree);
+          }
+          const appliedRequests = nodes.map(
+            (node) => this.#applyUserRequestsToNode(node, options)
+          );
+          await Promise.all(appliedRequests);
+        }
+        timeEnd();
+      }
+      async #applyUserRequestsToNode(tree, options) {
+        if (!this.options.global && this[_updateNames].length) {
+          this.#queueNamedUpdates();
+        }
+        const globalExplicitUpdateNames = [];
+        if (this.options.global && (this[_updateAll] || this[_updateNames].length)) {
+          const nm = resolve(this.path, "node_modules");
+          const paths = await readdirScoped(nm).catch(() => []);
+          for (const p of paths) {
+            const name = p.replace(/\\/g, "/");
+            const updateName = this[_updateNames].includes(name);
+            if (this[_updateAll] || updateName) {
+              if (updateName) {
+                globalExplicitUpdateNames.push(name);
+              }
+              const dir = resolve(nm, name);
+              const st = await lstat(dir).catch(
+                /* istanbul ignore next */
+                () => null
+              );
+              if (st && st.isSymbolicLink()) {
+                const target = await readlink(dir);
+                const real = resolve(dirname(dir), target);
+                tree.package.dependencies[name] = `file:${real}`;
+              } else {
+                tree.package.dependencies[name] = "*";
+              }
+            }
+          }
+        }
+        if (this.auditReport && this.auditReport.size > 0) {
+          await this.#queueVulnDependents(options);
+        }
+        const { add, rm } = options;
+        if (rm && rm.length) {
+          addRmPkgDeps.rm(tree.package, rm);
+          for (const name of rm) {
+            this.#explicitRequests.add({ from: tree, name, action: "DELETE" });
+          }
+        }
+        if (add && add.length) {
+          await this.#add(tree, options);
+        }
+        if (add && add.length || rm && rm.length || this.options.global) {
+          tree.package = tree.package;
+        }
+        for (const spec of this[_resolvedAdd]) {
+          if (spec.tree === tree) {
+            this.#explicitRequests.add(tree.edgesOut.get(spec.name));
+          }
+        }
+        for (const name of globalExplicitUpdateNames) {
+          this.#explicitRequests.add(tree.edgesOut.get(name));
+        }
+        this.#depsQueue.push(tree);
+      }
+      // This returns a promise because we might not have the name yet, and need to
+      // call pacote.manifest to find the name.
+      async #add(tree, { add, saveType = null, saveBundle = false }) {
+        const path = tree.target.path;
+        await Promise.all(add.map(async (rawSpec) => {
+          let spec = npa(rawSpec);
+          const isTag = spec.rawSpec && spec.type === "tag";
+          if (!spec.name || isTag) {
+            const mani = await pacote2.manifest(spec, { ...this.options });
+            if (isTag) {
+              spec = npa(`${mani.name}@${mani.version}`);
+            }
+            spec.name = mani.name;
+          }
+          const { name } = spec;
+          if (spec.type === "file") {
+            spec = npa(`file:${relpath(path, spec.fetchSpec)}`, path);
+            spec.name = name;
+          } else if (spec.type === "directory") {
+            try {
+              const real = await realpath(spec.fetchSpec, this[_rpcache], this[_stcache]);
+              spec = npa(`file:${relpath(path, real)}`, path);
+              spec.name = name;
+            } catch {
+            }
+          }
+          spec.tree = tree;
+          this[_resolvedAdd].push(spec);
+        }));
+        addRmPkgDeps.add({
+          pkg: tree.package,
+          add: this[_resolvedAdd],
+          saveBundle,
+          saveType
+        });
+      }
+      // TODO: provide a way to fix bundled deps by exposing metadata about
+      // what's in the bundle at each published manifest.  Without that, we
+      // can't possibly fix bundled deps without breaking a ton of other stuff,
+      // and leaving the user subject to getting it overwritten later anyway.
+      async #queueVulnDependents(options) {
+        for (const vuln of this.auditReport.values()) {
+          for (const node of vuln.nodes) {
+            const bundler = node.getBundler();
+            if (bundler) {
+              log.warn(
+                `audit fix ${node.name}@${node.version}`,
+                `${node.location}
+is a bundled dependency of
+${bundler.name}@${bundler.version} at ${bundler.location}
+It cannot be fixed automatically.
+Check for updates to the ${bundler.name} package.`
+              );
+              continue;
+            }
+            for (const edge of node.edgesIn) {
+              this.addTracker("idealTree", edge.from.name, edge.from.location);
+              this.#depsQueue.push(edge.from);
+            }
+          }
+        }
+        if (this.options.force && this.auditReport && this.auditReport.topVulns.size) {
+          options.add = options.add || [];
+          options.rm = options.rm || [];
+          const nodesTouched = /* @__PURE__ */ new Set();
+          for (const [name, topVuln] of this.auditReport.topVulns.entries()) {
+            const {
+              simpleRange,
+              topNodes,
+              fixAvailable
+            } = topVuln;
+            for (const node of topNodes) {
+              if (!node.isProjectRoot && !node.isWorkspace) {
+                log.warn("audit", `Manual fix required in linked project at ./${node.location} for ${name}@${simpleRange}.
+'cd ./${node.location}' and run 'npm audit' for details.`);
+                continue;
+              }
+              if (!fixAvailable) {
+                log.warn("audit", `No fix available for ${name}@${simpleRange}`);
+                continue;
+              }
+              const { isSemVerMajor, version, name: fixName } = fixAvailable;
+              const breakingMessage = isSemVerMajor ? "a SemVer major change" : "outside your stated dependency range";
+              log.warn("audit", `Updating ${fixName} to ${version}, which is ${breakingMessage}.`);
+              await this.#add(node, { add: [`${fixName}@${version}`] });
+              nodesTouched.add(node);
+            }
+          }
+          for (const node of nodesTouched) {
+            node.package = node.package;
+          }
+        }
+      }
+      #avoidRange(name) {
+        if (!this.auditReport) {
+          return null;
+        }
+        const vuln = this.auditReport.get(name);
+        if (!vuln) {
+          return null;
+        }
+        return vuln.range;
+      }
+      #queueNamedUpdates() {
+        for (const node of this.idealTree.inventory.values()) {
+          if (this[_updateNames].includes(node.name) && !node.isTop && !node.inDepBundle && !node.inShrinkwrap) {
+            for (const edge of node.edgesIn) {
+              this.addTracker("idealTree", edge.from.name, edge.from.location);
+              this.#depsQueue.push(edge.from);
+            }
+          }
+        }
+      }
+      async #inflateAncientLockfile() {
+        const { meta, inventory } = this.idealTree;
+        const ancient = meta.ancientLockfile;
+        const old = meta.loadedFromDisk && !(meta.originalLockfileVersion >= 2);
+        if (inventory.size === 0 || !ancient && !old) {
+          return;
+        }
+        const timeEnd = time.start("idealTree:inflate");
+        const heading = ancient ? "ancient lockfile" : "old lockfile";
+        if (ancient || !this.options.lockfileVersion || this.options.lockfileVersion >= defaultLockfileVersion) {
+          log.warn(
+            heading,
+            `
+The ${meta.type} file was created with an old version of npm,
+so supplemental metadata must be fetched from the registry.
+
+This is a one-time fix-up, please be patient...
+`
+          );
+        }
+        this.addTracker("idealTree:inflate");
+        const queue = [];
+        for (const node of inventory.values()) {
+          if (node.isProjectRoot) {
+            continue;
+          }
+          if (!node.location.startsWith("node_modules")) {
+            continue;
+          }
+          queue.push(async () => {
+            log.silly("inflate", node.location);
+            const { resolved, version, path, name, location, integrity } = node;
+            const useResolved = resolved && (!version || resolved.startsWith("file:"));
+            const id = useResolved ? resolved : version;
+            const spec = npa.resolve(name, id, dirname(path));
+            const t = `idealTree:inflate:${location}`;
+            this.addTracker(t);
+            try {
+              const mani = await pacote2.manifest(spec, {
+                ...this.options,
+                resolved,
+                integrity,
+                fullMetadata: false
+              });
+              node.package = { ...mani, _id: `${mani.name}@${mani.version}` };
+            } catch (er) {
+              const warning = `Could not fetch metadata for ${name}@${id}`;
+              log.warn(heading, warning, er);
+            }
+            this.finishTracker(t);
+          });
+        }
+        await promiseCallLimit(queue);
+        calcDepFlags(this.idealTree);
+        if (!this.options.lockfileVersion && !meta.hiddenLockfile) {
+          meta.originalLockfileVersion = defaultLockfileVersion;
+        }
+        this.finishTracker("idealTree:inflate");
+        timeEnd();
+      }
+      // at this point we have a virtual tree with the actual root node's
+      // package deps, which may be partly or entirely incomplete, invalid
+      // or extraneous.
+      #buildDeps() {
+        const timeEnd = time.start("idealTree:buildDeps");
+        const tree = this.idealTree.target;
+        tree.assertRootOverrides();
+        this.#depsQueue.push(tree);
+        log.silly("idealTree", "buildDeps");
+        this.addTracker("idealTree", tree.name, "");
+        return this.#buildDepStep().then(timeEnd);
+      }
+      async #buildDepStep() {
+        if (this.#currentDep) {
+          const { location, name } = this.#currentDep;
+          time.end(`idealTree:${location || "#root"}`);
+          this.finishTracker("idealTree", name, location);
+          this.#currentDep = null;
+        }
+        if (!this.#depsQueue.length) {
+          return this.#resolveLinks();
+        }
+        const node = this.#depsQueue.pop();
+        const bd = node.package.bundleDependencies;
+        const hasBundle = bd && Array.isArray(bd) && bd.length;
+        const { hasShrinkwrap } = node;
+        if (this.#depsSeen.has(node) || node.root !== this.idealTree || hasShrinkwrap && !this.#complete) {
+          return this.#buildDepStep();
+        }
+        this.#depsSeen.add(node);
+        this.#currentDep = node;
+        time.start(`idealTree:${node.location || "#root"}`);
+        const crackOpen = this.#complete && node !== this.idealTree && node.resolved && (hasBundle || hasShrinkwrap) && !node.inert;
+        if (crackOpen) {
+          const Arborist2 = this.constructor;
+          const opt = { ...this.options };
+          await cacache2.tmp.withTmp(this.cache, opt, async (path) => {
+            await pacote2.extract(node.resolved, path, {
+              ...opt,
+              Arborist: Arborist2,
+              resolved: node.resolved,
+              integrity: node.integrity
+            });
+            if (hasShrinkwrap) {
+              await new Arborist2({ ...this.options, path }).loadVirtual({ root: node });
+            }
+            if (hasBundle) {
+              await new Arborist2({ ...this.options, path }).loadActual({ root: node, ignoreMissing: true });
+            }
+          });
+        }
+        const tasks = [];
+        const peerSource = this.#peerSetSource.get(node) || node;
+        for (const edge of this.#problemEdges(node)) {
+          if (edge.peerConflicted) {
+            continue;
+          }
+          const source = edge.peer ? peerSource : node;
+          const virtualRoot = this.#virtualRoot(source, true);
+          const vrEdge = virtualRoot && virtualRoot.edgesOut.get(edge.name);
+          const vrDep = vrEdge && vrEdge.valid && vrEdge.to;
+          const required = /* @__PURE__ */ new Set([edge.from]);
+          const parent = edge.peer ? virtualRoot : null;
+          const dep = vrDep && vrDep.satisfies(edge) ? vrDep : await this.#nodeFromEdge(edge, parent, null, required);
+          debug(() => {
+            if (!dep) {
+              throw new Error("no dep??");
+            }
+          });
+          tasks.push({ edge, dep });
+        }
+        const placeDeps = tasks.sort((a, b) => localeCompare(a.edge.name, b.edge.name));
+        const promises = [];
+        for (const { edge, dep } of placeDeps) {
+          const pd = new PlaceDep({
+            edge,
+            dep,
+            auditReport: this.auditReport,
+            explicitRequest: this.#explicitRequests.has(edge),
+            force: this.options.force,
+            installLinks: this.installLinks,
+            installStrategy: this.#installStrategy,
+            legacyPeerDeps: this.legacyPeerDeps,
+            preferDedupe: this.#preferDedupe,
+            strictPeerDeps: this.#strictPeerDeps,
+            updateNames: this[_updateNames]
+          });
+          depth({
+            tree: pd,
+            getChildren: /* @__PURE__ */ __name((pd2) => pd2.children, "getChildren"),
+            visit: /* @__PURE__ */ __name((pd2) => {
+              const { placed, edge: edge2, canPlace: cpd } = pd2;
+              if (!placed) {
+                return;
+              }
+              if (placed.errors.length) {
+                this.#loadFailures.add(placed);
+              }
+              this.#mutateTree = true;
+              if (cpd.canPlaceSelf === OK) {
+                for (const edgeIn of placed.edgesIn) {
+                  if (edgeIn === edge2) {
+                    continue;
+                  }
+                  const { from, valid, peerConflicted } = edgeIn;
+                  if (!peerConflicted && !valid && !this.#depsSeen.has(from)) {
+                    this.addTracker("idealTree", from.name, from.location);
+                    this.#depsQueue.push(edgeIn.from);
+                  }
+                }
+              } else {
+                if (cpd.canPlaceSelf === REPLACE) {
+                  for (const edgeIn of placed.edgesIn) {
+                    if (edgeIn === edge2) {
+                      continue;
+                    }
+                    const { valid, peerConflicted } = edgeIn;
+                    if (!valid && !peerConflicted) {
+                      this.#depsSeen.delete(edgeIn.from);
+                      this.#depsQueue.push(edgeIn.from);
+                    }
+                  }
+                }
+              }
+              if (cpd.canPlaceSelf === CONFLICT) {
+                debug(() => {
+                  const er = new Error("placed with canPlaceSelf=CONFLICT");
+                  throw Object.assign(er, { placeDep: pd2 });
+                });
+                return;
+              }
+              this.#depsQueue.push(placed);
+              for (const dep2 of pd2.needEvaluation) {
+                this.#depsSeen.delete(dep2);
+                this.#depsQueue.push(dep2);
+              }
+              for (const e of this.#problemEdges(placed)) {
+                promises.push(
+                  () => this.#fetchManifest(npa.resolve(e.name, e.spec, fromPath(placed, e))).catch(() => null)
+                );
+              }
+            }, "visit")
+          });
+        }
+        for (const { to } of node.edgesOut.values()) {
+          if (to && to.isLink && to.target) {
+            this.#linkNodes.add(to);
+          }
+        }
+        await promiseCallLimit(promises);
+        return this.#buildDepStep();
+      }
+      // loads a node from an edge, and then loads its peer deps (and their
+      // peer deps, on down the line) into a virtual root parent.
+      async #nodeFromEdge(edge, parent_, secondEdge, required) {
+        const parent = parent_ || this.#virtualRoot(edge.from);
+        const spec = npa.resolve(edge.name, edge.spec, edge.from.path);
+        const first = await this.#nodeFromSpec(edge.name, spec, parent, edge);
+        const spec2 = secondEdge && npa.resolve(
+          edge.name,
+          secondEdge.spec,
+          secondEdge.from.path
+        );
+        const second = secondEdge && !secondEdge.valid ? await this.#nodeFromSpec(edge.name, spec2, parent, secondEdge) : null;
+        const node = second && edge.valid ? second : first;
+        node.parent = parent;
+        if (required.has(edge.from) && edge.type !== "peerOptional" || secondEdge && (required.has(secondEdge.from) && secondEdge.type !== "peerOptional")) {
+          required.add(node);
+        }
+        const src = parent.sourceReference;
+        this.#peerSetSource.set(node, src);
+        if (this.options.global && edge.from.isProjectRoot) {
+          return node;
+        }
+        return this.#loadPeerSet(node, required);
+      }
+      #virtualRoot(node, reuse = false) {
+        if (reuse && this.#virtualRoots.has(node)) {
+          return this.#virtualRoots.get(node);
+        }
+        const vr = new Node({
+          path: node.realpath,
+          sourceReference: node,
+          installLinks: this.installLinks,
+          legacyPeerDeps: this.legacyPeerDeps,
+          overrides: node.overrides
+        });
+        for (const child of node.children.values()) {
+          if (child.isLink) {
+            new Node({
+              path: child.realpath,
+              sourceReference: child.target,
+              root: vr
+            });
+          }
+        }
+        this.#virtualRoots.set(node, vr);
+        return vr;
+      }
+      #problemEdges(node) {
+        const bd = node.isProjectRoot || node.isWorkspace ? null : node.package.bundleDependencies;
+        const bundled = new Set(bd || []);
+        const problems = [];
+        for (const edge of node.edgesOut.values()) {
+          if (bundled.has(edge.name)) {
+            continue;
+          }
+          if (edge.to && this.#loadFailures.has(edge.to)) {
+            continue;
+          }
+          if (edge.to && edge.to.inShrinkwrap) {
+            continue;
+          }
+          if (!edge.to) {
+            if (edge.type !== "peerOptional" || this.#explicitRequests.has(edge)) {
+              problems.push(edge);
+            }
+            continue;
+          }
+          if (!edge.valid) {
+            problems.push(edge);
+            continue;
+          }
+          if (edge.to.isWorkspace) {
+            continue;
+          }
+          if (this[_updateNames].includes(edge.name)) {
+            problems.push(edge);
+            continue;
+          }
+          if (this.auditReport && this.auditReport.isVulnerable(edge.to)) {
+            problems.push(edge);
+            continue;
+          }
+          if (this.#explicitRequests.has(edge)) {
+            problems.push(edge);
+            continue;
+          }
+        }
+        return problems;
+      }
+      async #fetchManifest(spec) {
+        const options = {
+          ...this.options,
+          avoid: this.#avoidRange(spec.name),
+          fullMetadata: true
+        };
+        spec = this.idealTree.meta.checkYarnLock(spec, options);
+        if (this.#manifests.has(spec.raw)) {
+          return this.#manifests.get(spec.raw);
+        } else {
+          log.silly("fetch manifest", spec.raw.replace(spec.rawSpec, redact(spec.rawSpec)));
+          const mani = await pacote2.manifest(spec, options);
+          this.#manifests.set(spec.raw, mani);
+          return mani;
+        }
+      }
+      #nodeFromSpec(name, spec, parent, edge) {
+        const { installLinks, legacyPeerDeps } = this;
+        const isWorkspace = this.idealTree.workspaces && this.idealTree.workspaces.has(spec.name);
+        let isProjectInternalFileSpec = false;
+        if (edge?.rawSpec.startsWith("file:../") || edge?.rawSpec.startsWith("file:./")) {
+          const targetPath = resolve(parent.realpath, edge.rawSpec.slice(5));
+          const resolvedProjectRoot = resolve(this.idealTree.realpath);
+          isProjectInternalFileSpec = targetPath.startsWith(resolvedProjectRoot + sep) || targetPath === resolvedProjectRoot;
+        }
+        const parentWasInstalled = parent && !parent.isLink && parent.resolved?.startsWith("file:");
+        const isTransitiveFileDep = spec.type === "directory" && parentWasInstalled && installLinks;
+        const shouldLink = (isWorkspace || isProjectInternalFileSpec || !installLinks) && !isTransitiveFileDep;
+        if (spec.type === "directory" && shouldLink) {
+          return this.#linkFromSpec(name, spec, parent, edge);
+        }
+        if (isWorkspace) {
+          const existingNode = this.idealTree.edgesOut.get(spec.name).to;
+          if (existingNode && existingNode.isWorkspace && existingNode.satisfies(edge)) {
+            return existingNode;
+          }
+        }
+        if (isTransitiveFileDep && edge) {
+          const parentOriginalPath = parent.resolved.slice(5);
+          const relativePath = edge.rawSpec.slice(5);
+          const absolutePath = resolve(parentOriginalPath, relativePath);
+          spec = npa.resolve(name, `file:${absolutePath}`);
+        }
+        return this.#fetchManifest(spec).then((pkg) => new Node({ name, pkg, parent, installLinks, legacyPeerDeps }), (error) => {
+          error.requiredBy = edge.from.location || ".";
+          const n = new Node({
+            name,
+            parent,
+            error,
+            installLinks,
+            legacyPeerDeps
+          });
+          this.#loadFailures.add(n);
+          return n;
+        });
+      }
+      async #linkFromSpec(name, spec, parent) {
+        const realpath2 = spec.fetchSpec;
+        const { installLinks, legacyPeerDeps } = this;
+        const { content: pkg } = await PackageJson.normalize(realpath2).catch(() => {
+          return { content: {} };
+        });
+        const link = new Link({ name, parent, realpath: realpath2, pkg, installLinks, legacyPeerDeps });
+        this.#linkNodes.add(link);
+        return link;
+      }
+      // load all peer deps and meta-peer deps into the node's parent
+      // At the end of this, the node's peer-type outward edges are all
+      // resolved, and so are all of theirs, but other dep types are not.
+      // We prefer to get peer deps that meet the requiring node's dependency,
+      // if possible, since that almost certainly works (since that package was
+      // developed with this set of deps) and will typically be more restrictive.
+      // Note that the peers in the set can conflict either with each other,
+      // or with a direct dependency from the virtual root parent!  In strict
+      // mode, this is always an error.  In force mode, it never is, and we
+      // prefer the parent's non-peer dep over a peer dep, or the version that
+      // gets placed first.  In non-strict mode, we behave strictly if the
+      // virtual root is based on the root project, and allow non-peer parent
+      // deps to override, but throw if no preference can be determined.
+      async #loadPeerSet(node, required) {
+        const peerEdges = [...node.edgesOut.values()].filter((e) => e.peer && !(e.valid && e.to)).sort(({ name: a }, { name: b }) => localeCompare(a, b));
+        for (const edge of peerEdges) {
+          if (!node.parent) {
+            break;
+          }
+          if (edge.valid && edge.to) {
+            continue;
+          }
+          const parentEdge = node.parent.edgesOut.get(edge.name);
+          const { isProjectRoot, isWorkspace } = node.parent.sourceReference;
+          const isMine = isProjectRoot || isWorkspace;
+          const conflictOK = this.options.force || !isMine && !this.#strictPeerDeps;
+          if (!edge.to) {
+            if (!parentEdge) {
+              await this.#nodeFromEdge(edge, node.parent, null, required);
+              continue;
+            } else {
+              const dep2 = await this.#nodeFromEdge(
+                parentEdge,
+                node.parent,
+                edge,
+                required
+              );
+              if (edge.valid) {
+                continue;
+              }
+              if (conflictOK || !required.has(dep2)) {
+                edge.peerConflicted = true;
+                continue;
+              }
+              this.#failPeerConflict(edge, parentEdge);
+            }
+          }
+          const current = edge.to;
+          const dep = await this.#nodeFromEdge(edge, null, null, required);
+          if (dep.canReplace(current)) {
+            await this.#nodeFromEdge(edge, node.parent, null, required);
+            continue;
+          }
+          if (conflictOK || !required.has(edge.from)) {
+            continue;
+          }
+          this.#failPeerConflict(edge, parentEdge);
+        }
+        return node;
+      }
+      #failPeerConflict(edge, currentEdge) {
+        const expl = this.#explainPeerConflict(edge, currentEdge);
+        throw Object.assign(new Error("unable to resolve dependency tree"), expl);
+      }
+      #explainPeerConflict(edge, currentEdge) {
+        const node = edge.from;
+        const curNode = node.resolve(edge.name);
+        const current = curNode.explain();
+        return {
+          code: "ERESOLVE",
+          current,
+          // it SHOULD be impossible to get here without a current node in place,
+          // but this at least gives us something report on when bugs creep into
+          // the tree handling logic.
+          currentEdge: currentEdge ? currentEdge.explain() : null,
+          edge: edge.explain(),
+          strictPeerDeps: this.#strictPeerDeps,
+          force: this.options.force
+        };
+      }
+      // go through all the links in the this.#linkNodes set
+      // for each one:
+      // - if outside the root, ignore it, assume it's fine, it's not our problem
+      // - if a node in the tree already, assign the target to that node.
+      // - if a path under an existing node, then assign that as the fsParent,
+      //   and add it to the _depsQueue
+      //
+      // call buildDepStep if anything was added to the queue; otherwise, we're done
+      #resolveLinks() {
+        for (const link of this.#linkNodes) {
+          this.#linkNodes.delete(link);
+          if (link.root !== this.idealTree) {
+            continue;
+          }
+          const tree = this.idealTree.target;
+          const external = !link.target.isDescendantOf(tree);
+          if (external && !this.#follow) {
+            continue;
+          }
+          const unseenLink = (link.target.parent || link.target.fsParent) && !this.#depsSeen.has(link.target);
+          if (this.#follow && !link.target.parent && !link.target.fsParent || unseenLink) {
+            this.addTracker("idealTree", link.target.name, link.target.location);
+            this.#depsQueue.push(link.target);
+          }
+        }
+        if (this.#depsQueue.length) {
+          return this.#buildDepStep();
+        }
+      }
+      #fixDepFlags() {
+        const timeEnd = time.start("idealTree:fixDepFlags");
+        const metaFromDisk = this.idealTree.meta.loadedFromDisk;
+        const flagsSuspect = this[_flagsSuspect];
+        const mutateTree = this.#mutateTree;
+        if (metaFromDisk && mutateTree) {
+          resetDepFlags(this.idealTree);
+        }
+        if (!metaFromDisk || mutateTree) {
+          calcDepFlags(this.idealTree);
+        } else {
+          this.idealTree.extraneous = false;
+          this.idealTree.dev = false;
+          this.idealTree.optional = false;
+          this.idealTree.devOptional = false;
+          this.idealTree.peer = false;
+        }
+        const needPrune = metaFromDisk && (mutateTree || flagsSuspect);
+        if (this.#prune && needPrune) {
+          this.#idealTreePrune();
+        }
+        timeEnd();
+      }
+      #applyRootOverridesToWorkspaces(tree) {
+        const rootOverrides = tree.root.package.overrides || {};
+        for (const node of tree.root.inventory.values()) {
+          if (!node.isWorkspace) {
+            continue;
+          }
+          for (const depName of Object.keys(rootOverrides)) {
+            const edge = node.edgesOut.get(depName);
+            const rootNode = tree.root.children.get(depName);
+            if (!edge || !rootNode) {
+              continue;
+            }
+            const resolvedRootVersion = rootNode.package.version;
+            if (!semver2.satisfies(resolvedRootVersion, edge.spec)) {
+              edge.detach();
+              node.children.delete(depName);
+            }
+          }
+        }
+      }
+      #idealTreePrune() {
+        for (const node of this.idealTree.inventory.values()) {
+          if (node.extraneous || node.peer && node.optional) {
+            node.parent = null;
+          }
+        }
+      }
+      #pruneFailedOptional() {
+        for (const node of this.#loadFailures) {
+          if (!node.optional) {
+            throw node.errors[0];
+          }
+          const set = optionalSet(node);
+          for (const node2 of set) {
+            node2.inert = true;
+          }
+        }
+      }
+      async prune(options = {}) {
+        options = { ...this.options, ...options };
+        await this.buildIdealTree(options);
+        this.#idealTreePrune();
+        if (!this.options.workspacesEnabled) {
+          const excludeNodes = this.excludeWorkspacesDependencySet(this.idealTree);
+          for (const node of this.idealTree.inventory.values()) {
+            if (node.parent !== null && !node.isProjectRoot && !excludeNodes.has(node) && !node.inert) {
+              this[_addNodeToTrashList](node);
+            }
+          }
+        }
+        return this.reify(options);
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/common-ancestor-path@1.0.1/node_modules/common-ancestor-path/index.js
+var require_common_ancestor_path = __commonJS({
+  "node_modules/.pnpm/common-ancestor-path@1.0.1/node_modules/common-ancestor-path/index.js"(exports2, module2) {
+    var { parse, sep, normalize: norm } = require("path");
+    function* commonArrayMembers(a, b) {
+      const [l, s] = a.length > b.length ? [a, b] : [b, a];
+      for (const x of s) {
+        if (x === l.shift())
+          yield x;
+        else
+          break;
+      }
+    }
+    __name(commonArrayMembers, "commonArrayMembers");
+    var commonAncestorPath = /* @__PURE__ */ __name((a, b) => a === b ? a : parse(a).root !== parse(b).root ? null : [...commonArrayMembers(norm(a).split(sep), norm(b).split(sep))].join(sep), "commonAncestorPath");
+    module2.exports = (...paths) => paths.reduce(commonAncestorPath);
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/arborist/load-actual.js
+var require_load_actual = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/arborist/load-actual.js"(exports2, module2) {
+    var { dirname, join, normalize, relative, resolve } = require("node:path");
+    var PackageJson = require_lib11();
+    var { readdirScoped } = require_lib15();
+    var { walkUp } = require_commonjs10();
+    var ancestorPath = require_common_ancestor_path();
+    var treeCheck = require_tree_check();
+    var Shrinkwrap = require_shrinkwrap();
+    var calcDepFlags = require_calc_dep_flags();
+    var Node = require_node5();
+    var Link = require_link();
+    var realpath = require_realpath();
+    var _changePath = Symbol.for("_changePath");
+    var _setWorkspaces = Symbol.for("setWorkspaces");
+    var _rpcache = Symbol.for("realpathCache");
+    var _stcache = Symbol.for("statCache");
+    module2.exports = (cls) => class ActualLoader extends cls {
+      static {
+        __name(this, "ActualLoader");
+      }
+      #actualTree;
+      // ensure when walking the tree that we don't call loadTree on the same
+      // actual node more than one time.
+      #actualTreeLoaded = /* @__PURE__ */ new Set();
+      #actualTreePromise;
+      // cache of nodes when loading the actualTree, so that we avoid loaded the
+      // same node multiple times when symlinks attack.
+      #cache = /* @__PURE__ */ new Map();
+      #filter;
+      // cache of link targets for setting fsParent links
+      // We don't do fsParent as a magic getter/setter, because it'd be too costly
+      // to keep up to date along the walk.
+      // And, we know that it can ONLY be relevant when the node is a target of a
+      // link; otherwise, it'd be in a node_modules folder, so take advantage of
+      // that to limit the scans later.
+      #topNodes = /* @__PURE__ */ new Set();
+      #transplantFilter;
+      constructor(options) {
+        super(options);
+        this.actualTree = options.actualTree;
+        const cwd = process.cwd();
+        this[_rpcache] = /* @__PURE__ */ new Map([[cwd, cwd]]);
+        this[_stcache] = /* @__PURE__ */ new Map();
+      }
+      // public method
+      // TODO remove options param in next semver major
+      async loadActual(options = {}) {
+        if (this.actualTree) {
+          return this.actualTree;
+        }
+        if (!this.#actualTreePromise) {
+          options = { ...this.options, ...options };
+          this.#actualTreePromise = this.#loadActual(options).then((tree) => {
+            if (!options.root) {
+              for (const node of tree.inventory.values()) {
+                node.extraneous = true;
+              }
+            }
+            calcDepFlags(tree, !options.root);
+            this.actualTree = treeCheck(tree);
+            return this.actualTree;
+          });
+        }
+        return this.#actualTreePromise;
+      }
+      // return the promise so that we don't ever have more than one going at the
+      // same time.  This is so that buildIdealTree can default to the actualTree
+      // if no shrinkwrap present, but reify() can still call buildIdealTree and
+      // loadActual in parallel safely.
+      async #loadActual(options) {
+        const {
+          global: global2,
+          filter = /* @__PURE__ */ __name(() => true, "filter"),
+          root = null,
+          transplantFilter = /* @__PURE__ */ __name(() => true, "transplantFilter"),
+          ignoreMissing = false,
+          forceActual = false
+        } = options;
+        this.#filter = filter;
+        this.#transplantFilter = transplantFilter;
+        if (global2) {
+          const real = await realpath(this.path, this[_rpcache], this[_stcache]);
+          const params = {
+            path: this.path,
+            realpath: real,
+            pkg: {},
+            global: global2,
+            loadOverrides: true
+          };
+          if (this.path === real) {
+            this.#actualTree = this.#newNode(params);
+          } else {
+            this.#actualTree = await this.#newLink(params);
+          }
+        } else {
+          this.#actualTree = await this.#loadFSNode({
+            path: this.path,
+            real: await realpath(this.path, this[_rpcache], this[_stcache]),
+            loadOverrides: true
+          });
+          this.#actualTree.assertRootOverrides();
+          if (!forceActual) {
+            const meta2 = await Shrinkwrap.load({
+              path: this.#actualTree.path,
+              hiddenLockfile: true,
+              resolveOptions: this.options
+            });
+            if (meta2.loadedFromDisk) {
+              this.#actualTree.meta = meta2;
+              await new this.constructor({ ...this.options }).loadVirtual({
+                root: this.#actualTree
+              });
+              await this[_setWorkspaces](this.#actualTree);
+              this.#transplant(root);
+              return this.#actualTree;
+            }
+          }
+          const meta = await Shrinkwrap.load({
+            path: this.#actualTree.path,
+            lockfileVersion: this.options.lockfileVersion,
+            resolveOptions: this.options
+          });
+          this.#actualTree.meta = meta;
+        }
+        await this.#loadFSTree(this.#actualTree);
+        await this[_setWorkspaces](this.#actualTree);
+        if (this.#actualTree.workspaces && this.#actualTree.workspaces.size) {
+          const promises = [];
+          for (const path of this.#actualTree.workspaces.values()) {
+            if (!this.#cache.has(path)) {
+              const p = this.#loadFSNode({ path, root: this.#actualTree, useRootOverrides: true }).then((node) => this.#loadFSTree(node));
+              promises.push(p);
+            }
+          }
+          await Promise.all(promises);
+        }
+        if (!ignoreMissing) {
+          await this.#findMissingEdges();
+        }
+        for (const path of this.#topNodes) {
+          const node = this.#cache.get(path);
+          if (node && !node.parent && !node.fsParent) {
+            for (const p of walkUp(dirname(path))) {
+              if (this.#cache.has(p)) {
+                node.fsParent = this.#cache.get(p);
+                break;
+              }
+            }
+          }
+        }
+        this.#transplant(root);
+        if (global2) {
+          const tree = this.#actualTree;
+          const actualRoot = tree.isLink ? tree.target : tree;
+          const { dependencies = {} } = actualRoot.package;
+          for (const [name, kid] of actualRoot.children.entries()) {
+            const def = kid.isLink ? `file:${kid.realpath}` : "*";
+            dependencies[name] = dependencies[name] || def;
+          }
+          actualRoot.package = { ...actualRoot.package, dependencies };
+        }
+        return this.#actualTree;
+      }
+      #transplant(root) {
+        if (!root || root === this.#actualTree) {
+          return;
+        }
+        this.#actualTree[_changePath](root.path);
+        for (const node of this.#actualTree.children.values()) {
+          if (!this.#transplantFilter(node)) {
+            node.root = null;
+          }
+        }
+        root.replace(this.#actualTree);
+        for (const node of this.#actualTree.fsChildren) {
+          node.root = this.#transplantFilter(node) ? root : null;
+        }
+        this.#actualTree = root;
+      }
+      async #loadFSNode({ path, parent, real, root, loadOverrides, useRootOverrides }) {
+        if (!real) {
+          try {
+            real = await realpath(path, this[_rpcache], this[_stcache]);
+          } catch (error) {
+            return new Node({
+              error,
+              path,
+              realpath: path,
+              parent,
+              root,
+              loadOverrides
+            });
+          }
+        }
+        const cached = this.#cache.get(path);
+        let node;
+        if (cached && !cached.dummy) {
+          cached.parent = parent;
+          return cached;
+        } else {
+          const params = {
+            installLinks: this.installLinks,
+            legacyPeerDeps: this.legacyPeerDeps,
+            path,
+            realpath: real,
+            parent,
+            root,
+            loadOverrides
+          };
+          try {
+            const { content: pkg } = await PackageJson.normalize(real);
+            params.pkg = pkg;
+            if (useRootOverrides && root.overrides) {
+              params.overrides = root.overrides.getNodeRule({ name: pkg.name, version: pkg.version });
+            }
+          } catch (err) {
+            if (err.code === "EJSONPARSE") {
+              err.path = join(real, "package.json");
+            }
+            params.error = err;
+          }
+          if (normalize(path) === real) {
+            node = this.#newNode(params);
+          } else {
+            node = await this.#newLink(params);
+          }
+        }
+        this.#cache.set(path, node);
+        return node;
+      }
+      #newNode(options) {
+        const { parent, realpath: realpath2 } = options;
+        if (!parent) {
+          this.#topNodes.add(realpath2);
+        }
+        return new Node(options);
+      }
+      async #newLink(options) {
+        const { realpath: realpath2 } = options;
+        this.#topNodes.add(realpath2);
+        const target = this.#cache.get(realpath2);
+        const link = new Link({ ...options, target });
+        if (!target) {
+          this.#cache.set(realpath2, link.target);
+          await this.#loadFSTree(link.target);
+        }
+        return link;
+      }
+      async #loadFSTree(node) {
+        const did = this.#actualTreeLoaded;
+        if (!node.isLink && !did.has(node.target.realpath)) {
+          did.add(node.target.realpath);
+          await this.#loadFSChildren(node.target);
+          return Promise.all(
+            [...node.target.children.entries()].filter(([, kid]) => !did.has(kid.realpath)).map(([, kid]) => this.#loadFSTree(kid))
+          );
+        }
+      }
+      // create child nodes for all the entries in node_modules
+      // and attach them to the node as a parent
+      async #loadFSChildren(node) {
+        const nm = resolve(node.realpath, "node_modules");
+        try {
+          const kids = await readdirScoped(nm).then((paths) => paths.map((p) => p.replace(/\\/g, "/")));
+          return Promise.all(
+            // ignore . dirs and retired scoped package folders
+            kids.filter((kid) => !/^(@[^/]+\/)?\./.test(kid)).filter((kid) => this.#filter(node, kid)).map((kid) => this.#loadFSNode({
+              parent: node,
+              path: resolve(nm, kid)
+            }))
+          );
+        } catch {
+        }
+      }
+      async #findMissingEdges() {
+        const nmContents = /* @__PURE__ */ new Map();
+        const tree = this.#actualTree;
+        for (const node of tree.inventory.values()) {
+          const ancestor = ancestorPath(node.realpath, this.path);
+          const depPromises = [];
+          for (const [name, edge] of node.edgesOut.entries()) {
+            const notMissing = !edge.missing && !(edge.to && (edge.to.dummy || edge.to.parent !== node));
+            if (notMissing) {
+              continue;
+            }
+            for (const p of walkUp(dirname(node.realpath))) {
+              if (ancestor && /^\.\.(?:[\\/]|$)/.test(relative(ancestor, p))) {
+                break;
+              }
+              let entries;
+              if (!nmContents.has(p)) {
+                entries = await readdirScoped(p + "/node_modules").catch(() => []).then((paths) => paths.map((p2) => p2.replace(/\\/g, "/")));
+                nmContents.set(p, entries);
+              } else {
+                entries = nmContents.get(p);
+              }
+              if (!entries.includes(name)) {
+                continue;
+              }
+              let d;
+              if (!this.#cache.has(p)) {
+                d = new Node({ path: p, root: node.root, dummy: true });
+                this.#cache.set(p, d);
+              } else {
+                d = this.#cache.get(p);
+              }
+              if (d.dummy) {
+                const depPath = normalize(`${p}/node_modules/${name}`);
+                const cached = this.#cache.get(depPath);
+                if (!cached || cached.dummy) {
+                  depPromises.push(this.#loadFSNode({
+                    path: depPath,
+                    root: node.root,
+                    parent: d
+                  }).then((node2) => this.#loadFSTree(node2)));
+                }
+              }
+              break;
+            }
+          }
+          await Promise.all(depPromises);
+        }
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/arborist/load-virtual.js
+var require_load_virtual = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/arborist/load-virtual.js"(exports2, module2) {
+    var { resolve } = require("node:path");
+    var mapWorkspaces = require_lib33();
+    var PackageJson = require_lib11();
+    var nameFromFolder = require_lib32();
+    var consistentResolve = require_consistent_resolve();
+    var Shrinkwrap = require_shrinkwrap();
+    var Node = require_node5();
+    var Link = require_link();
+    var relpath = require_relpath();
+    var calcDepFlags = require_calc_dep_flags();
+    var treeCheck = require_tree_check();
+    var flagsSuspect = Symbol.for("flagsSuspect");
+    var setWorkspaces = Symbol.for("setWorkspaces");
+    module2.exports = (cls) => class VirtualLoader extends cls {
+      static {
+        __name(this, "VirtualLoader");
+      }
+      #rootOptionProvided;
+      constructor(options) {
+        super(options);
+        this.virtualTree = options.virtualTree;
+        this[flagsSuspect] = false;
+      }
+      // public method
+      async loadVirtual(options = {}) {
+        if (this.virtualTree) {
+          return this.virtualTree;
+        }
+        options = { ...this.options, ...options };
+        if (options.root && options.root.meta) {
+          await this.#loadFromShrinkwrap(options.root.meta, options.root);
+          return treeCheck(this.virtualTree);
+        }
+        const s = await Shrinkwrap.load({
+          path: this.path,
+          lockfileVersion: this.options.lockfileVersion,
+          resolveOptions: this.options
+        });
+        if (!s.loadedFromDisk && !options.root) {
+          const er = new Error("loadVirtual requires existing shrinkwrap file");
+          throw Object.assign(er, { code: "ENOLOCK" });
+        }
+        const pkg = await PackageJson.normalize(this.path).then((p) => p.content).catch(() => s.data.packages[""] || {});
+        const {
+          root = await this[setWorkspaces](this.#loadNode("", pkg, true))
+        } = options;
+        this.#rootOptionProvided = options.root;
+        await this.#loadFromShrinkwrap(s, root);
+        root.assertRootOverrides();
+        return treeCheck(this.virtualTree);
+      }
+      async #loadFromShrinkwrap(s, root) {
+        if (!this.#rootOptionProvided) {
+          root.extraneous = false;
+          root.dev = false;
+          root.optional = false;
+          root.devOptional = false;
+          root.peer = false;
+        } else {
+          this[flagsSuspect] = true;
+        }
+        this.#checkRootEdges(s, root);
+        root.meta = s;
+        this.virtualTree = root;
+        const { links, nodes } = this.#resolveNodes(s, root);
+        await this.#resolveLinks(links, nodes);
+        if (!(s.originalLockfileVersion >= 2)) {
+          this.#assignBundles(nodes);
+        }
+        if (this[flagsSuspect]) {
+          for (const node of nodes.values()) {
+            if (node.isRoot || node === this.#rootOptionProvided) {
+              continue;
+            }
+            node.extraneous = true;
+            node.dev = true;
+            node.optional = true;
+            node.devOptional = true;
+            node.peer = true;
+          }
+          calcDepFlags(this.virtualTree, !this.#rootOptionProvided);
+        }
+        return root;
+      }
+      // check the lockfile deps, and see if they match.  if they do not
+      // then we have to reset dep flags at the end.  for example, if the
+      // user manually edits their package.json file, then we need to know
+      // that the idealTree is no longer entirely trustworthy.
+      #checkRootEdges(s, root) {
+        if (!s.loadedFromDisk || s.ancientLockfile) {
+          return;
+        }
+        const lock = s.get("");
+        const prod = lock.dependencies || {};
+        const dev = lock.devDependencies || {};
+        const optional = lock.optionalDependencies || {};
+        const peer = lock.peerDependencies || {};
+        const peerOptional = {};
+        if (lock.peerDependenciesMeta) {
+          for (const [name, meta] of Object.entries(lock.peerDependenciesMeta)) {
+            if (meta.optional && peer[name] !== void 0) {
+              peerOptional[name] = peer[name];
+              delete peer[name];
+            }
+          }
+        }
+        for (const name of Object.keys(optional)) {
+          delete prod[name];
+        }
+        const lockWS = {};
+        const workspaces = mapWorkspaces.virtual({
+          cwd: this.path,
+          lockfile: s.data
+        });
+        for (const [name, path] of workspaces.entries()) {
+          lockWS[name] = `file:${path}`;
+        }
+        const rootNames = new Set(root.edgesOut.keys());
+        const lockByType = { dev, optional, peer, peerOptional, prod, workspace: lockWS };
+        for (const type in lockByType) {
+          const deps = lockByType[type];
+          for (const name in deps) {
+            const edge = root.edgesOut.get(name);
+            if (!edge || edge.type !== type || edge.spec !== deps[name]) {
+              return this[flagsSuspect] = true;
+            }
+            rootNames.delete(name);
+          }
+        }
+        if (rootNames.size) {
+          return this[flagsSuspect] = true;
+        }
+      }
+      // separate out link metadata, and create Node objects for nodes
+      #resolveNodes(s, root) {
+        const links = /* @__PURE__ */ new Map();
+        const nodes = /* @__PURE__ */ new Map([["", root]]);
+        for (const [location, meta] of Object.entries(s.data.packages)) {
+          if (!location) {
+            continue;
+          }
+          if (meta.link) {
+            links.set(location, meta);
+          } else {
+            nodes.set(location, this.#loadNode(location, meta));
+          }
+        }
+        return { links, nodes };
+      }
+      // links is the set of metadata, and nodes is the map of non-Link nodes
+      // Set the targets to nodes in the set, if we have them (we might not)
+      async #resolveLinks(links, nodes) {
+        for (const [location, meta] of links.entries()) {
+          const targetPath = resolve(this.path, meta.resolved);
+          const targetLoc = relpath(this.path, targetPath);
+          const target = nodes.get(targetLoc);
+          if (!target) {
+            const err = new Error(
+              `Missing target in lock file: "${targetLoc}" is referenced by "${location}" but does not exist.
+To fix:
+1. rm package-lock.json
+2. npm install`
+            );
+            err.code = "EMISSINGTARGET";
+            throw err;
+          }
+          const link = this.#loadLink(location, targetLoc, target, meta);
+          nodes.set(location, link);
+          nodes.set(targetLoc, link.target);
+          if (!link.target.parent) {
+            await PackageJson.normalize(link.realpath).then((p) => link.target.package = p.content).catch(() => null);
+          }
+        }
+      }
+      #assignBundles(nodes) {
+        for (const [location, node] of nodes) {
+          if (!location || node.isLink && !node.target.location) {
+            continue;
+          }
+          const { name, parent, package: { inBundle } } = node;
+          if (!parent) {
+            continue;
+          }
+          const { package: ppkg } = parent;
+          const { inBundle: parentBundled } = ppkg;
+          if (inBundle && !parentBundled && parent.edgesOut.has(node.name)) {
+            if (!ppkg.bundleDependencies) {
+              ppkg.bundleDependencies = [name];
+            } else {
+              ppkg.bundleDependencies.push(name);
+            }
+          }
+        }
+      }
+      #loadNode(location, sw, loadOverrides) {
+        const p = this.virtualTree ? this.virtualTree.realpath : this.path;
+        const path = resolve(p, location);
+        if (!sw.name) {
+          sw.name = nameFromFolder(path);
+        }
+        const dev = sw.dev;
+        const optional = sw.optional;
+        const devOptional = dev || optional || sw.devOptional;
+        const peer = sw.peer;
+        const node = new Node({
+          installLinks: this.installLinks,
+          legacyPeerDeps: this.legacyPeerDeps,
+          root: this.virtualTree,
+          path,
+          realpath: path,
+          integrity: sw.integrity,
+          resolved: consistentResolve(sw.resolved, this.path, path),
+          pkg: sw,
+          hasShrinkwrap: sw.hasShrinkwrap,
+          dev,
+          optional,
+          devOptional,
+          peer,
+          loadOverrides
+        });
+        node.extraneous = !!sw.extraneous;
+        node.devOptional = !!(sw.devOptional || sw.dev || sw.optional);
+        node.peer = !!sw.peer;
+        node.optional = !!sw.optional;
+        node.dev = !!sw.dev;
+        return node;
+      }
+      #loadLink(location, targetLoc, target) {
+        const path = resolve(this.path, location);
+        const link = new Link({
+          installLinks: this.installLinks,
+          legacyPeerDeps: this.legacyPeerDeps,
+          path,
+          realpath: resolve(this.path, targetLoc),
+          target,
+          pkg: target && target.package
+        });
+        link.extraneous = target.extraneous;
+        link.devOptional = target.devOptional;
+        link.peer = target.peer;
+        link.optional = target.optional;
+        link.dev = target.dev;
+        return link;
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/promise-all-reject-late@1.0.1/node_modules/promise-all-reject-late/index.js
+var require_promise_all_reject_late = __commonJS({
+  "node_modules/.pnpm/promise-all-reject-late@1.0.1/node_modules/promise-all-reject-late/index.js"(exports2, module2) {
+    var allSettled = Promise.allSettled ? (promises) => Promise.allSettled(promises) : (promises) => {
+      const reflections = [];
+      for (let i = 0; i < promises.length; i++) {
+        reflections[i] = Promise.resolve(promises[i]).then((value) => ({
+          status: "fulfilled",
+          value
+        }), (reason) => ({
+          status: "rejected",
+          reason
+        }));
+      }
+      return Promise.all(reflections);
+    };
+    module2.exports = (promises) => allSettled(promises).then((results) => {
+      let er = null;
+      const ret = new Array(results.length);
+      results.forEach((result, i) => {
+        if (result.status === "rejected")
+          throw result.reason;
+        else
+          ret[i] = result.value;
+      });
+      return ret;
+    });
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/arborist/rebuild.js
+var require_rebuild = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/arborist/rebuild.js"(exports2, module2) {
+    var PackageJson = require_lib11();
+    var binLinks = require_lib39();
+    var localeCompare = require_string_locale_compare()("en");
+    var promiseAllRejectLate = require_promise_all_reject_late();
+    var runScript = require_run_script();
+    var { callLimit: promiseCallLimit } = require_commonjs9();
+    var { depth: dfwalk } = require_lib31();
+    var { isNodeGypPackage, defaultGypInstallScript } = require_lib23();
+    var { log, time } = require_lib2();
+    var { resolve } = require("node:path");
+    var boolEnv = /* @__PURE__ */ __name((b) => b ? "1" : "", "boolEnv");
+    var sortNodes = /* @__PURE__ */ __name((a, b) => a.depth - b.depth || localeCompare(a.path, b.path), "sortNodes");
+    var _checkBins = Symbol.for("checkBins");
+    var _handleOptionalFailure = Symbol.for("handleOptionalFailure");
+    var _trashList = Symbol.for("trashList");
+    module2.exports = (cls) => class Builder extends cls {
+      static {
+        __name(this, "Builder");
+      }
+      #doHandleOptionalFailure;
+      #oldMeta = null;
+      #queues;
+      constructor(options) {
+        super(options);
+        this.scriptsRun = /* @__PURE__ */ new Set();
+        this.#resetQueues();
+      }
+      async rebuild({ nodes, handleOptionalFailure = false } = {}) {
+        if (this.options.ignoreScripts && !this.options.binLinks) {
+          return;
+        }
+        this.#doHandleOptionalFailure = handleOptionalFailure;
+        if (!nodes) {
+          nodes = await this.#loadDefaultNodes();
+        }
+        const timeEnd = time.start("build");
+        const {
+          depNodes,
+          linkNodes
+        } = this.#retrieveNodesByType(nodes);
+        await this.#build(depNodes, {});
+        if (linkNodes.size) {
+          this.#resetQueues();
+          await this.#build(linkNodes, { type: "links" });
+        }
+        timeEnd();
+      }
+      // if we don't have a set of nodes, then just rebuild
+      // the actual tree on disk.
+      async #loadDefaultNodes() {
+        let nodes;
+        const tree = await this.loadActual();
+        let filterSet;
+        if (!this.options.workspacesEnabled) {
+          filterSet = this.excludeWorkspacesDependencySet(tree);
+          nodes = tree.inventory.filter(
+            (node) => filterSet.has(node) || node.isProjectRoot
+          );
+        } else if (this.options.workspaces.length) {
+          filterSet = this.workspaceDependencySet(
+            tree,
+            this.options.workspaces,
+            this.options.includeWorkspaceRoot
+          );
+          nodes = tree.inventory.filter((node) => filterSet.has(node));
+        } else {
+          nodes = tree.inventory.values();
+        }
+        return nodes;
+      }
+      #retrieveNodesByType(nodes) {
+        const depNodes = /* @__PURE__ */ new Set();
+        const linkNodes = /* @__PURE__ */ new Set();
+        const storeNodes = /* @__PURE__ */ new Set();
+        for (const node of nodes) {
+          if (node.isStoreLink) {
+            storeNodes.add(node);
+          } else if (node.isLink) {
+            linkNodes.add(node);
+          } else {
+            depNodes.add(node);
+          }
+        }
+        for (const node of storeNodes) {
+          depNodes.add(node);
+        }
+        if (!this.options.global) {
+          for (const node of linkNodes) {
+            depNodes.delete(node.target);
+          }
+        }
+        return {
+          depNodes,
+          linkNodes
+        };
+      }
+      #resetQueues() {
+        this.#queues = {
+          preinstall: [],
+          install: [],
+          postinstall: [],
+          prepare: [],
+          bin: []
+        };
+      }
+      async #build(nodes, { type = "deps" }) {
+        const timeEnd = time.start(`build:${type}`);
+        await this.#buildQueues(nodes);
+        if (!this.options.ignoreScripts) {
+          await this.#runScripts("preinstall");
+        }
+        if (type === "links") {
+          if (!this.options.ignoreScripts) {
+            await this.#runScripts("prepare");
+          }
+        }
+        if (this.options.binLinks) {
+          await this.#linkAllBins();
+        }
+        if (!this.options.ignoreScripts) {
+          await this.#runScripts("install");
+          await this.#runScripts("postinstall");
+        }
+        timeEnd();
+      }
+      async #buildQueues(nodes) {
+        const timeEnd = time.start("build:queue");
+        const set = /* @__PURE__ */ new Set();
+        const promises = [];
+        for (const node of nodes) {
+          promises.push(this.#addToBuildSet(node, set));
+          if (this.options.rebuildBundle !== false) {
+            const bd = node.package.bundleDependencies;
+            if (bd && bd.length) {
+              dfwalk({
+                tree: node,
+                leave: /* @__PURE__ */ __name((node2) => promises.push(this.#addToBuildSet(node2, set)), "leave"),
+                getChildren: /* @__PURE__ */ __name((node2) => [...node2.children.values()], "getChildren"),
+                filter: /* @__PURE__ */ __name((node2) => node2.inBundle, "filter")
+              });
+            }
+          }
+        }
+        await promiseAllRejectLate(promises);
+        const queue = [...set].sort(sortNodes);
+        for (const node of queue) {
+          const { package: { bin, scripts = {} } } = node.target;
+          const { preinstall, install, postinstall, prepare } = scripts;
+          const tests = { bin, preinstall, install, postinstall, prepare };
+          for (const [key, has] of Object.entries(tests)) {
+            if (has) {
+              this.#queues[key].push(node);
+            }
+          }
+        }
+        timeEnd();
+      }
+      async [_checkBins](node) {
+        if (!node.globalTop || this.options.force) {
+          return;
+        }
+        const { path, package: pkg } = node;
+        await binLinks.checkBins({ pkg, path, top: true, global: true });
+      }
+      async #addToBuildSet(node, set, refreshed = false) {
+        if (set.has(node)) {
+          return;
+        }
+        if (this.#oldMeta === null) {
+          const { root: { meta } } = node;
+          this.#oldMeta = meta && meta.loadedFromDisk && !(meta.originalLockfileVersion >= 2);
+        }
+        const { package: pkg, hasInstallScript } = node.target;
+        const { gypfile, bin, scripts = {} } = pkg;
+        const { preinstall, install, postinstall, prepare } = scripts;
+        const anyScript = preinstall || install || postinstall || prepare;
+        if (!refreshed && !anyScript && (hasInstallScript || this.#oldMeta)) {
+          set.add(node);
+          const { content: pkg2 } = await PackageJson.normalize(node.path).catch(() => {
+            return { content: {} };
+          });
+          set.delete(node);
+          const { scripts: scripts2 = {} } = pkg2;
+          node.package.scripts = scripts2;
+          return this.#addToBuildSet(node, set, true);
+        }
+        const isGyp = gypfile !== false && !install && !preinstall && await isNodeGypPackage(node.path);
+        if (bin || preinstall || install || postinstall || prepare || isGyp) {
+          if (bin) {
+            await this[_checkBins](node);
+          }
+          if (isGyp) {
+            scripts.install = defaultGypInstallScript;
+            node.package.scripts = scripts;
+          }
+          set.add(node);
+        }
+      }
+      async #runScripts(event) {
+        const queue = this.#queues[event];
+        if (!queue.length) {
+          return;
+        }
+        const timeEnd = time.start(`build:run:${event}`);
+        const stdio = this.options.foregroundScripts ? "inherit" : "pipe";
+        const limit = this.options.foregroundScripts ? 1 : void 0;
+        await promiseCallLimit(queue.map((node) => async () => {
+          const {
+            path,
+            integrity,
+            resolved,
+            optional,
+            peer,
+            dev,
+            devOptional,
+            package: pkg,
+            location,
+            isStoreLink
+          } = node.target;
+          if (this[_trashList].has(path) || isStoreLink) {
+            return;
+          }
+          const timeEndLocation = time.start(`build:run:${event}:${location}`);
+          log.info("run", pkg._id, event, location, pkg.scripts[event]);
+          const env2 = {
+            npm_package_resolved: resolved,
+            npm_package_integrity: integrity,
+            npm_package_json: resolve(path, "package.json"),
+            npm_package_optional: boolEnv(optional),
+            npm_package_dev: boolEnv(dev),
+            npm_package_peer: boolEnv(peer),
+            npm_package_dev_optional: boolEnv(devOptional && !dev && !optional)
+          };
+          const runOpts = {
+            event,
+            path,
+            pkg,
+            stdio,
+            env: env2,
+            scriptShell: this.options.scriptShell
+          };
+          const p = runScript(runOpts).catch((er) => {
+            const { code, signal } = er;
+            log.info("run", pkg._id, event, { code, signal });
+            throw er;
+          }).then(({ args, code, signal, stdout, stderr }) => {
+            this.scriptsRun.add({
+              pkg,
+              path,
+              event,
+              // I do not know why this needs to be on THIS line but refactoring
+              // this function would be quite a process
+              // eslint-disable-next-line promise/always-return
+              cmd: args && args[args.length - 1],
+              env: env2,
+              code,
+              signal,
+              stdout,
+              stderr
+            });
+            log.info("run", pkg._id, event, { code, signal });
+          });
+          await (this.#doHandleOptionalFailure ? this[_handleOptionalFailure](node, p) : p);
+          timeEndLocation();
+        }), { limit });
+        timeEnd();
+      }
+      async #linkAllBins() {
+        const queue = this.#queues.bin;
+        if (!queue.length) {
+          return;
+        }
+        const timeEnd = time.start("build:link");
+        const promises = [];
+        for (const node of queue.sort(sortNodes)) {
+          promises.push(this.#createBinLinks(node));
+        }
+        await promiseAllRejectLate(promises);
+        timeEnd();
+      }
+      async #createBinLinks(node) {
+        if (this[_trashList].has(node.path)) {
+          return;
+        }
+        const timeEnd = time.start(`build:link:${node.location}`);
+        const p = binLinks({
+          pkg: node.package,
+          path: node.path,
+          top: !!(node.isTop || node.globalTop),
+          force: this.options.force,
+          global: !!node.globalTop
+        });
+        await (this.#doHandleOptionalFailure ? this[_handleOptionalFailure](node, p) : p);
+        timeEnd();
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/diff.js
+var require_diff2 = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/diff.js"(exports2, module2) {
+    var { depth } = require_lib31();
+    var { existsSync } = require("node:fs");
+    var ssri = require_lib12();
+    var Diff = class _Diff {
+      static {
+        __name(this, "Diff");
+      }
+      constructor({ actual, ideal, filterSet, shrinkwrapInflated, omit }) {
+        this.omit = omit;
+        this.filterSet = filterSet;
+        this.shrinkwrapInflated = shrinkwrapInflated;
+        this.children = [];
+        this.actual = actual;
+        this.ideal = ideal;
+        if (this.ideal) {
+          this.resolved = this.ideal.resolved;
+          this.integrity = this.ideal.integrity;
+        }
+        this.action = getAction(this);
+        this.parent = null;
+        this.leaves = [];
+        this.unchanged = [];
+        this.removed = [];
+      }
+      static calculate({
+        actual,
+        ideal,
+        filterNodes = [],
+        shrinkwrapInflated = /* @__PURE__ */ new Set(),
+        omit = /* @__PURE__ */ new Set()
+      }) {
+        const filterSet = /* @__PURE__ */ new Set();
+        const extraneous = /* @__PURE__ */ new Set();
+        for (const filterNode of filterNodes) {
+          const { root } = filterNode;
+          if (root !== ideal && root !== actual) {
+            throw new Error("invalid filterNode: outside idealTree/actualTree");
+          }
+          const rootTarget = root.target;
+          const edge = [...rootTarget.edgesOut.values()].filter((e) => {
+            return e.to && (e.to === filterNode || e.to.target === filterNode);
+          })[0];
+          filterSet.add(root);
+          filterSet.add(rootTarget);
+          filterSet.add(ideal);
+          filterSet.add(actual);
+          if (edge && edge.to) {
+            filterSet.add(edge.to);
+            filterSet.add(edge.to.target);
+          }
+          filterSet.add(filterNode);
+          depth({
+            tree: filterNode,
+            visit: /* @__PURE__ */ __name((node) => filterSet.add(node), "visit"),
+            getChildren: /* @__PURE__ */ __name((node) => {
+              node = node.target;
+              const loc = node.location;
+              const idealNode = ideal.inventory.get(loc);
+              const ideals = !idealNode ? [] : [...idealNode.edgesOut.values()].filter((e) => e.to).map((e) => e.to);
+              const actualNode = actual.inventory.get(loc);
+              const actuals = !actualNode ? [] : [...actualNode.edgesOut.values()].filter((e) => e.to).map((e) => e.to);
+              if (actualNode) {
+                for (const child of actualNode.children.values()) {
+                  if (child.extraneous) {
+                    extraneous.add(child);
+                  }
+                }
+              }
+              return ideals.concat(actuals);
+            }, "getChildren")
+          });
+        }
+        for (const extra of extraneous) {
+          filterSet.add(extra);
+        }
+        return depth({
+          tree: new _Diff({ actual, ideal, filterSet, shrinkwrapInflated, omit }),
+          getChildren,
+          leave
+        });
+      }
+    };
+    var getAction = /* @__PURE__ */ __name(({ actual, ideal }) => {
+      if (!ideal) {
+        return "REMOVE";
+      }
+      if (!actual) {
+        return ideal.inDepBundle ? null : "ADD";
+      }
+      if (ideal.isRoot && actual.isRoot) {
+        return null;
+      }
+      if (ideal.version !== actual.version) {
+        return "CHANGE";
+      }
+      const binsExist = ideal.binPaths.every((path) => existsSync(path));
+      const noIntegrity = !ideal.integrity && !actual.integrity;
+      const noResolved = !ideal.resolved && !actual.resolved;
+      const resolvedMatch = ideal.resolved && ideal.resolved === actual.resolved;
+      if (noIntegrity && binsExist && (resolvedMatch || noResolved)) {
+        return null;
+      }
+      const integrityMismatch = !ideal.integrity || !actual.integrity || !ssri.parse(ideal.integrity).match(actual.integrity);
+      if (integrityMismatch || !binsExist) {
+        return "CHANGE";
+      }
+      return null;
+    }, "getAction");
+    var allChildren = /* @__PURE__ */ __name((node) => {
+      if (!node) {
+        return /* @__PURE__ */ new Map();
+      }
+      if (node.isRoot && node.isLink) {
+        return allChildren(node.target);
+      }
+      const kids = /* @__PURE__ */ new Map();
+      for (const n of [node, ...node.fsChildren]) {
+        for (const kid of n.children.values()) {
+          kids.set(kid.path, kid);
+        }
+      }
+      return kids;
+    }, "allChildren");
+    var getChildren = /* @__PURE__ */ __name((diff) => {
+      const children = [];
+      const {
+        actual,
+        ideal,
+        unchanged,
+        removed,
+        filterSet,
+        shrinkwrapInflated,
+        omit
+      } = diff;
+      const actualKids = allChildren(actual);
+      const idealKids = allChildren(ideal);
+      if (ideal && ideal.hasShrinkwrap && !shrinkwrapInflated.has(ideal)) {
+        diff.leaves.push(diff);
+        return children;
+      }
+      const paths = /* @__PURE__ */ new Set([...actualKids.keys(), ...idealKids.keys()]);
+      for (const path of paths) {
+        const actual2 = actualKids.get(path);
+        const ideal2 = idealKids.get(path);
+        diffNode({
+          actual: actual2,
+          ideal: ideal2,
+          children,
+          unchanged,
+          removed,
+          filterSet,
+          shrinkwrapInflated,
+          omit
+        });
+      }
+      if (diff.leaves && !children.length) {
+        diff.leaves.push(diff);
+      }
+      return children;
+    }, "getChildren");
+    var diffNode = /* @__PURE__ */ __name(({
+      actual,
+      ideal,
+      children,
+      unchanged,
+      removed,
+      filterSet,
+      shrinkwrapInflated,
+      omit
+    }) => {
+      if (filterSet.size && !(filterSet.has(ideal) || filterSet.has(actual))) {
+        return;
+      }
+      if (ideal?.shouldOmit?.(omit)) {
+        ideal.inert = true;
+      }
+      if (ideal?.inert) {
+        ideal = void 0;
+      }
+      if (!actual && !ideal) {
+        return;
+      }
+      const action = getAction({ actual, ideal });
+      if (action || !shrinkwrapInflated.has(ideal) && ideal.hasShrinkwrap) {
+        if (action === "REMOVE") {
+          removed.push(actual);
+        }
+        children.push(new Diff({ actual, ideal, filterSet, shrinkwrapInflated, omit }));
+      } else {
+        unchanged.push(ideal);
+        const bd = ideal.package.bundleDependencies;
+        if (actual && bd && bd.length) {
+          const bundledChildren = [];
+          for (const node of actual.children.values()) {
+            if (node.inBundle) {
+              bundledChildren.push(node);
+            }
+          }
+          for (const node of bundledChildren) {
+            node.parent = ideal;
+          }
+        }
+        children.push(...getChildren({
+          actual,
+          ideal,
+          unchanged,
+          removed,
+          filterSet,
+          shrinkwrapInflated,
+          omit
+        }));
+      }
+    }, "diffNode");
+    var leave = /* @__PURE__ */ __name((diff, children) => {
+      children.forEach((kid) => {
+        kid.parent = diff;
+        diff.leaves.push(...kid.leaves);
+        diff.unchanged.push(...kid.unchanged);
+        diff.removed.push(...kid.removed);
+      });
+      diff.children = children;
+      return diff;
+    }, "leave");
+    module2.exports = Diff;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/signals.js
+var require_signals2 = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/signals.js"(exports2, module2) {
+    var platform = global.__ARBORIST_FAKE_PLATFORM__ || process.platform;
+    module2.exports = [
+      "SIGABRT",
+      "SIGALRM",
+      "SIGHUP",
+      "SIGINT",
+      "SIGTERM"
+    ];
+    if (platform !== "win32") {
+      module2.exports.push(
+        "SIGVTALRM",
+        "SIGXCPU",
+        "SIGXFSZ",
+        "SIGUSR2",
+        "SIGTRAP",
+        "SIGSYS",
+        "SIGQUIT",
+        "SIGIOT"
+        // should detect profiler and enable/disable accordingly.
+        // see #21
+        // 'SIGPROF'
+      );
+    }
+    if (platform === "linux") {
+      module2.exports.push(
+        "SIGIO",
+        "SIGPOLL",
+        "SIGPWR",
+        "SIGSTKFLT",
+        "SIGUNUSED"
+      );
+    }
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/signal-handling.js
+var require_signal_handling = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/signal-handling.js"(exports2, module2) {
+    var signals = require_signals2();
+    module2.exports = Object.assign((fn) => setup(fn), { process });
+    var setup = /* @__PURE__ */ __name((fn) => {
+      const { process: process3 } = module2.exports;
+      const sigListeners = { loaded: false };
+      const unload = /* @__PURE__ */ __name(() => {
+        if (!sigListeners.loaded) {
+          return;
+        }
+        for (const sig of signals) {
+          try {
+            process3.removeListener(sig, sigListeners[sig]);
+          } catch {
+          }
+        }
+        process3.removeListener("beforeExit", onBeforeExit);
+        sigListeners.loaded = false;
+      }, "unload");
+      const onBeforeExit = /* @__PURE__ */ __name(() => {
+        unload();
+        process3.kill(process3.pid, signalReceived);
+        setTimeout(() => {
+        }, 500);
+      }, "onBeforeExit");
+      let signalReceived = null;
+      const listener = /* @__PURE__ */ __name((sig, fn2) => () => {
+        signalReceived = sig;
+        unload();
+        if (process3.listeners(sig).length < 1) {
+          process3.once("beforeExit", onBeforeExit);
+        }
+        fn2({ signal: sig });
+      }, "listener");
+      for (const sig of signals) {
+        sigListeners[sig] = listener(sig, fn);
+        const max = process3.getMaxListeners();
+        try {
+          const { length } = process3.listeners(sig);
+          if (length >= max) {
+            process3.setMaxListeners(length + 1);
+          }
+          process3.on(sig, sigListeners[sig]);
+        } catch {
+        }
+      }
+      sigListeners.loaded = true;
+      return unload;
+    }, "setup");
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/retire-path.js
+var require_retire_path = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/retire-path.js"(exports2, module2) {
+    var crypto = require("node:crypto");
+    var { dirname, basename, resolve } = require("node:path");
+    var pathSafeHash = /* @__PURE__ */ __name((s) => crypto.createHash("sha1").update(s).digest("base64").replace(/[^a-zA-Z0-9]+/g, "").slice(0, 8), "pathSafeHash");
+    var retirePath = /* @__PURE__ */ __name((from) => {
+      const d = dirname(from);
+      const b = basename(from);
+      const hash = pathSafeHash(from);
+      return resolve(d, `.${b}-${hash}`);
+    }, "retirePath");
+    module2.exports = retirePath;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/arborist/reify.js
+var require_reify = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/arborist/reify.js"(exports2, module2) {
+    var PackageJson = require_lib11();
+    var hgi = require_lib3();
+    var npa = require_npa();
+    var packageContents = require_lib19();
+    var pacote2 = require_lib30();
+    var promiseAllRejectLate = require_promise_all_reject_late();
+    var runScript = require_run_script();
+    var { callLimit: promiseCallLimit } = require_commonjs9();
+    var { depth: dfwalk } = require_lib31();
+    var { dirname, resolve, relative, join } = require("node:path");
+    var { log, time } = require_lib2();
+    var { lstat, mkdir, rm, symlink } = require("node:fs/promises");
+    var { moveFile } = require_lib15();
+    var { subset, intersects } = require_semver2();
+    var { walkUp } = require_commonjs10();
+    var AuditReport = require_audit_report();
+    var Diff = require_diff2();
+    var calcDepFlags = require_calc_dep_flags();
+    var debug = require_debug2();
+    var onExit = require_signal_handling();
+    var optionalSet = require_optional_set();
+    var relpath = require_relpath();
+    var retirePath = require_retire_path();
+    var treeCheck = require_tree_check();
+    var { defaultLockfileVersion } = require_shrinkwrap();
+    var { saveTypeMap, hasSubKey } = require_add_rm_pkg_deps();
+    var _retireShallowNodes = Symbol.for("retireShallowNodes");
+    var _loadBundlesAndUpdateTrees = Symbol.for("loadBundlesAndUpdateTrees");
+    var _submitQuickAudit = Symbol("submitQuickAudit");
+    var _unpackNewModules = Symbol.for("unpackNewModules");
+    var _build = Symbol.for("build");
+    var _trashList = Symbol.for("trashList");
+    var _handleOptionalFailure = Symbol.for("handleOptionalFailure");
+    var _loadTrees = Symbol.for("loadTrees");
+    var _checkBins = Symbol.for("checkBins");
+    var _diffTrees = Symbol.for("diffTrees");
+    var _createSparseTree = Symbol.for("createSparseTree");
+    var _loadShrinkwrapsAndUpdateTrees = Symbol.for("loadShrinkwrapsAndUpdateTrees");
+    var _reifyNode = Symbol.for("reifyNode");
+    var _updateAll = Symbol.for("updateAll");
+    var _updateNames = Symbol.for("updateNames");
+    var _moveContents = Symbol.for("moveContents");
+    var _moveBackRetiredUnchanged = Symbol.for("moveBackRetiredUnchanged");
+    var _removeTrash = Symbol.for("removeTrash");
+    var _renamePath = Symbol.for("renamePath");
+    var _rollbackRetireShallowNodes = Symbol.for("rollbackRetireShallowNodes");
+    var _rollbackCreateSparseTree = Symbol.for("rollbackCreateSparseTree");
+    var _rollbackMoveBackRetiredUnchanged = Symbol.for("rollbackMoveBackRetiredUnchanged");
+    var _saveIdealTree = Symbol.for("saveIdealTree");
+    var _reifyPackages = Symbol.for("reifyPackages");
+    var _resolvedAdd = Symbol.for("resolvedAdd");
+    var _usePackageLock = Symbol.for("usePackageLock");
+    var _addNodeToTrashList = Symbol.for("addNodeToTrashList");
+    var _createIsolatedTree = Symbol.for("createIsolatedTree");
+    module2.exports = (cls) => class Reifier extends cls {
+      static {
+        __name(this, "Reifier");
+      }
+      #bundleMissing = /* @__PURE__ */ new Set();
+      // child nodes we'd EXPECT to be included in a bundle, but aren't
+      #bundleUnpacked = /* @__PURE__ */ new Set();
+      // the nodes we unpack to read their bundles
+      #dryRun;
+      #nmValidated = /* @__PURE__ */ new Set();
+      #omit;
+      #retiredPaths = {};
+      #retiredUnchanged = {};
+      #savePrefix;
+      #shrinkwrapInflated = /* @__PURE__ */ new Set();
+      #sparseTreeDirs = /* @__PURE__ */ new Set();
+      #sparseTreeRoots = /* @__PURE__ */ new Set();
+      constructor(options) {
+        super(options);
+        this[_trashList] = /* @__PURE__ */ new Set();
+      }
+      // public method
+      async reify(options = {}) {
+        const linked = (options.installStrategy || this.options.installStrategy) === "linked";
+        if (this.options.packageLockOnly && this.options.global) {
+          const er = new Error("cannot generate lockfile for global packages");
+          er.code = "ESHRINKWRAPGLOBAL";
+          throw er;
+        }
+        this.#omit = new Set(options.omit);
+        this.addTracker("reify");
+        const timeEnd = time.start("reify");
+        if (!this.options.packageLockOnly && !this.options.dryRun) {
+          await mkdir(resolve(this.path), { recursive: true });
+          await this.#validateNodeModules(resolve(this.path, "node_modules"));
+        }
+        await this[_loadTrees](options);
+        const oldTree = this.idealTree;
+        if (linked) {
+          log.warn("reify", 'The "linked" install strategy is EXPERIMENTAL and may contain bugs.');
+          this.idealTree = await this[_createIsolatedTree]();
+        }
+        await this[_diffTrees]();
+        await this[_reifyPackages]();
+        if (linked) {
+          this.idealTree = oldTree;
+        }
+        await this[_saveIdealTree](options);
+        for (const node of this.idealTree.inventory.values()) {
+          if (node.inert) {
+            node.parent = null;
+          }
+        }
+        for (const path of this[_trashList]) {
+          const loc = relpath(this.idealTree.realpath, path);
+          const node = this.idealTree.inventory.get(loc);
+          if (node && node.root === this.idealTree) {
+            node.parent = null;
+          }
+        }
+        if (this.diff && this.diff.filterSet.size) {
+          const reroot = /* @__PURE__ */ new Set();
+          const { filterSet } = this.diff;
+          const seen = /* @__PURE__ */ new Set();
+          for (const [loc, ideal] of this.idealTree.inventory.entries()) {
+            seen.add(loc);
+            if (filterSet.has(ideal)) {
+              continue;
+            }
+            const actual = this.actualTree.inventory.get(loc);
+            if (!actual) {
+              ideal.root = null;
+            } else {
+              if ([...actual.linksIn].some((link) => filterSet.has(link))) {
+                seen.add(actual.location);
+                continue;
+              }
+              const { realpath, isLink } = actual;
+              if (isLink && ideal.isLink && ideal.realpath === realpath) {
+                continue;
+              } else {
+                reroot.add(actual);
+              }
+            }
+          }
+          for (const [loc, actual] of this.actualTree.inventory.entries()) {
+            if (seen.has(loc)) {
+              continue;
+            }
+            seen.add(loc);
+            if (filterSet.has(actual)) {
+              continue;
+            }
+            reroot.add(actual);
+          }
+          for (const actual of reroot) {
+            actual.root = this.idealTree;
+          }
+          for (const top of this.idealTree.tops) {
+            if (top.linksIn.size === 0) {
+              top.root = null;
+            }
+          }
+          calcDepFlags(this.idealTree);
+        }
+        this.idealTree.meta.filename = this.idealTree.realpath + "/node_modules/.package-lock.json";
+        this.idealTree.meta.hiddenLockfile = true;
+        this.idealTree.meta.lockfileVersion = defaultLockfileVersion;
+        this.actualTree = this.idealTree;
+        this.idealTree = null;
+        if (!this.options.global) {
+          await this.actualTree.meta.save();
+          const ignoreScripts = !!this.options.ignoreScripts;
+          if (!this.options.dryRun && !ignoreScripts && this.diff && this.diff.children.length) {
+            const { path, package: pkg } = this.actualTree.target;
+            const stdio = this.options.foregroundScripts ? "inherit" : "pipe";
+            const { scripts = {} } = pkg;
+            for (const event of ["predependencies", "dependencies", "postdependencies"]) {
+              if (Object.prototype.hasOwnProperty.call(scripts, event)) {
+                log.info("run", pkg._id, event, scripts[event]);
+                await time.start(`reify:run:${event}`, () => runScript({
+                  event,
+                  path,
+                  pkg,
+                  stdio,
+                  scriptShell: this.options.scriptShell
+                }));
+              }
+            }
+          }
+        }
+        this.auditReport = await this.auditReport;
+        this.finishTracker("reify");
+        timeEnd();
+        return treeCheck(this.actualTree);
+      }
+      async [_reifyPackages]() {
+        if (this.options.dryRun) {
+          return;
+        }
+        if (this.options.packageLockOnly) {
+          return this[_submitQuickAudit]();
+        }
+        let reifyTerminated = null;
+        const removeHandler = onExit(({ signal }) => {
+          removeHandler();
+          reifyTerminated = Object.assign(new Error("process terminated"), {
+            signal
+          });
+          return false;
+        });
+        const steps = [
+          [_rollbackRetireShallowNodes, [
+            _retireShallowNodes
+          ]],
+          [_rollbackCreateSparseTree, [
+            _createSparseTree,
+            _loadShrinkwrapsAndUpdateTrees,
+            _loadBundlesAndUpdateTrees,
+            _submitQuickAudit,
+            _unpackNewModules
+          ]],
+          [_rollbackMoveBackRetiredUnchanged, [
+            _moveBackRetiredUnchanged,
+            _build
+          ]]
+        ];
+        for (const [rollback, actions] of steps) {
+          for (const action of actions) {
+            try {
+              await this[action]();
+              if (reifyTerminated) {
+                throw reifyTerminated;
+              }
+            } catch (er) {
+              await this[rollback](er);
+              throw er;
+            }
+          }
+        }
+        await this[_removeTrash]();
+        if (reifyTerminated) {
+          throw reifyTerminated;
+        }
+        removeHandler();
+      }
+      // when doing a local install, we load everything and figure it all out.
+      // when doing a global install, we *only* care about the explicit requests.
+      [_loadTrees](options) {
+        const timeEnd = time.start("reify:loadTrees");
+        const bitOpt = {
+          ...options,
+          complete: this.options.packageLockOnly || this.options.dryRun
+        };
+        if (this.options.packageLockOnly) {
+          return this.buildIdealTree(bitOpt).then(timeEnd);
+        }
+        const actualOpt = this.options.global ? {
+          ignoreMissing: true,
+          global: true,
+          filter: /* @__PURE__ */ __name((node, kid) => {
+            if (this.explicitRequests.size === 0 || !node.isProjectRoot) {
+              return true;
+            }
+            if (this.idealTree.edgesOut.has(kid)) {
+              return true;
+            }
+            const hasExplicit = [...this.explicitRequests].some((edge) => edge.name === kid);
+            if (hasExplicit) {
+              return true;
+            }
+            return false;
+          }, "filter")
+        } : { ignoreMissing: true };
+        if (!this.options.global) {
+          return Promise.all([
+            this.loadActual(actualOpt),
+            this.buildIdealTree(bitOpt)
+          ]).then(timeEnd);
+        }
+        return this.buildIdealTree(bitOpt).then(() => this.loadActual(actualOpt)).then(timeEnd);
+      }
+      [_diffTrees]() {
+        if (this.options.packageLockOnly) {
+          return;
+        }
+        const timeEnd = time.start("reify:diffTrees");
+        const includeWorkspaces = this.options.workspacesEnabled;
+        const includeRootDeps = !includeWorkspaces || this.options.includeWorkspaceRoot && this.options.workspaces.length > 0;
+        const filterNodes = [];
+        if (this.options.global && this.explicitRequests.size) {
+          const idealTree = this.idealTree.target;
+          const actualTree = this.actualTree.target;
+          for (const { name } of this.explicitRequests) {
+            const ideal = idealTree.children.get(name);
+            if (ideal) {
+              filterNodes.push(ideal);
+            }
+            const actual = actualTree.children.get(name);
+            if (actual) {
+              filterNodes.push(actual);
+            }
+          }
+        } else {
+          if (includeWorkspaces) {
+            for (const ws of this.options.workspaces) {
+              const ideal = this.idealTree.children.get(ws);
+              if (ideal) {
+                filterNodes.push(ideal);
+              }
+              const actual = this.actualTree.children.get(ws);
+              if (actual) {
+                filterNodes.push(actual);
+              }
+            }
+          }
+          if (includeRootDeps) {
+            for (const tree of [this.idealTree, this.actualTree]) {
+              for (const { type, to } of tree.edgesOut.values()) {
+                if (type !== "workspace" && to) {
+                  filterNodes.push(to);
+                }
+              }
+            }
+          }
+        }
+        this.diff = Diff.calculate({
+          omit: this.#omit,
+          shrinkwrapInflated: this.#shrinkwrapInflated,
+          filterNodes,
+          actual: this.actualTree,
+          ideal: this.idealTree
+        });
+        timeEnd();
+      }
+      // add the node and all its bins to the list of things to be
+      // removed later on in the process.  optionally, also mark them
+      // as a retired paths, so that we move them out of the way and
+      // replace them when rolling back on failure.
+      [_addNodeToTrashList](node, retire = false) {
+        const paths = [node.path, ...node.binPaths];
+        const moves = this.#retiredPaths;
+        log.silly("reify", "mark", retire ? "retired" : "deleted", paths);
+        for (const path of paths) {
+          if (retire) {
+            const retired = retirePath(path);
+            moves[path] = retired;
+            this[_trashList].add(retired);
+          } else {
+            this[_trashList].add(path);
+          }
+        }
+      }
+      // move aside the shallowest nodes in the tree that have to be
+      // changed or removed, so that we can rollback if necessary.
+      [_retireShallowNodes]() {
+        const timeEnd = time.start("reify:retireShallow");
+        const moves = this.#retiredPaths = {};
+        for (const diff of this.diff.children) {
+          if (diff.action === "CHANGE" || diff.action === "REMOVE") {
+            this[_addNodeToTrashList](diff.actual, true);
+          }
+        }
+        log.silly("reify", "moves", moves);
+        const movePromises = Object.entries(moves).map(([from, to]) => this[_renamePath](from, to));
+        return promiseAllRejectLate(movePromises).then(timeEnd);
+      }
+      [_renamePath](from, to, didMkdirp = false) {
+        return moveFile(from, to).catch((er) => {
+          if (er.code === "ENOENT") {
+            return didMkdirp ? null : mkdir(dirname(to), { recursive: true }).then(() => this[_renamePath](from, to, true));
+          } else if (er.code === "EEXIST") {
+            return rm(to, { recursive: true, force: true }).then(() => moveFile(from, to));
+          } else {
+            throw er;
+          }
+        });
+      }
+      [_rollbackRetireShallowNodes](er) {
+        const timeEnd = time.start("reify:rollback:retireShallow");
+        const moves = this.#retiredPaths;
+        const movePromises = Object.entries(moves).map(([from, to]) => this[_renamePath](to, from));
+        return promiseAllRejectLate(movePromises).catch(() => {
+        }).then(timeEnd).then(() => {
+          throw er;
+        });
+      }
+      [_createSparseTree]() {
+        const timeEnd = time.start("reify:createSparse");
+        const leaves = this.diff.leaves.filter((diff) => {
+          return (diff.action === "ADD" || diff.action === "CHANGE") && !this.#sparseTreeDirs.has(diff.ideal.path) && !diff.ideal.isLink;
+        }).map((diff) => diff.ideal);
+        const dirsChecked = /* @__PURE__ */ new Set();
+        return promiseAllRejectLate(leaves.map(async (node) => {
+          for (const d of walkUp(node.path)) {
+            if (d === node.top.path) {
+              break;
+            }
+            if (dirsChecked.has(d)) {
+              continue;
+            }
+            dirsChecked.add(d);
+            const st = await lstat(d).catch(() => null);
+            if (st && !st.isDirectory()) {
+              const retired = retirePath(d);
+              this.#retiredPaths[d] = retired;
+              this[_trashList].add(retired);
+              await this[_renamePath](d, retired);
+            }
+          }
+          this.#sparseTreeDirs.add(node.path);
+          const made = await mkdir(node.path, { recursive: true });
+          if (made) {
+            this.#sparseTreeRoots.add(made);
+          }
+        })).then(timeEnd);
+      }
+      [_rollbackCreateSparseTree](er) {
+        const timeEnd = time.start("reify:rollback:createSparse");
+        const roots = this.#sparseTreeRoots;
+        const failures = [];
+        const targets = [...roots, ...Object.keys(this.#retiredPaths)];
+        const unlinks = targets.map((path) => rm(path, { recursive: true, force: true }).catch((er2) => failures.push([path, er2])));
+        return promiseAllRejectLate(unlinks).then(() => {
+          if (failures.length) {
+            log.warn("cleanup", "Failed to remove some directories", failures);
+          }
+        }).then(timeEnd).then(() => this[_rollbackRetireShallowNodes](er));
+      }
+      // shrinkwrap nodes define their dependency branches with a file, so
+      // we need to unpack them, read that shrinkwrap file, and then update
+      // the tree by calling loadVirtual with the node as the root.
+      [_loadShrinkwrapsAndUpdateTrees]() {
+        const seen = this.#shrinkwrapInflated;
+        const shrinkwraps = this.diff.leaves.filter((d) => (d.action === "CHANGE" || d.action === "ADD" || !d.action) && d.ideal.hasShrinkwrap && !seen.has(d.ideal) && !this[_trashList].has(d.ideal.path));
+        if (!shrinkwraps.length) {
+          return;
+        }
+        const timeEnd = time.start("reify:loadShrinkwraps");
+        const Arborist2 = this.constructor;
+        return promiseAllRejectLate(shrinkwraps.map((diff) => {
+          const node = diff.ideal;
+          seen.add(node);
+          return diff.action ? this[_reifyNode](node) : node;
+        })).then((nodes) => promiseAllRejectLate(nodes.map((node) => new Arborist2({
+          ...this.options,
+          path: node.path
+        }).loadVirtual({ root: node })))).then(() => this[_diffTrees]()).then(() => this[_createSparseTree]()).then(() => this[_loadShrinkwrapsAndUpdateTrees]()).then(timeEnd);
+      }
+      // create a symlink for Links, extract for Nodes
+      // return the node object, since we usually want that
+      // handle optional dep failures here
+      // If reifying fails, and the node is optional, add it and its optionalSet
+      // to the trash list
+      // Always return the node.
+      [_reifyNode](node) {
+        const timeEnd = time.start(`reifyNode:${node.location}`);
+        this.addTracker("reify", node.name, node.location);
+        const p = Promise.resolve().then(async () => {
+          await this[_checkBins](node);
+          await this.#extractOrLink(node);
+          const { _id, deprecated } = node.package;
+          if (deprecated) {
+            log.warn("deprecated", `${_id}: ${deprecated}`);
+          }
+        });
+        return this[_handleOptionalFailure](node, p).then(() => {
+          this.finishTracker("reify", node.name, node.location);
+          timeEnd();
+          return node;
+        });
+      }
+      // do not allow node_modules to be a symlink
+      async #validateNodeModules(nm) {
+        if (this.options.force || this.#nmValidated.has(nm)) {
+          return;
+        }
+        const st = await lstat(nm).catch(() => null);
+        if (!st || st.isDirectory()) {
+          this.#nmValidated.add(nm);
+          return;
+        }
+        log.warn("reify", "Removing non-directory", nm);
+        await rm(nm, { recursive: true, force: true });
+      }
+      async #extractOrLink(node) {
+        const nm = resolve(node.parent.path, "node_modules");
+        await this.#validateNodeModules(nm);
+        if (!node.isLink) {
+          let res = null;
+          if (node.resolved) {
+            const registryResolved = this.#registryResolved(node.resolved);
+            if (registryResolved) {
+              res = `${node.name}@${registryResolved}`;
+            }
+          } else if (node.package.name && node.version) {
+            res = `${node.package.name}@${node.version}`;
+          }
+          if (!res) {
+            const warning = "invalid or damaged lockfile detected\nplease re-try this operation once it completes\nso that the damage can be corrected, or perform\na fresh install with no lockfile if the problem persists.";
+            log.warn("reify", warning);
+            log.verbose("reify", "unrecognized node in tree", node.path);
+            node.parent = null;
+            node.fsParent = null;
+            this[_addNodeToTrashList](node);
+            return;
+          }
+          await debug(async () => {
+            const st = await lstat(node.path).catch(() => null);
+            if (st && !st.isDirectory()) {
+              debug.log("unpacking into a non-directory", node);
+              throw Object.assign(new Error("ENOTDIR: not a directory"), {
+                code: "ENOTDIR",
+                path: node.path
+              });
+            }
+          });
+          await pacote2.extract(res, node.path, {
+            ...this.options,
+            resolved: node.resolved,
+            integrity: node.integrity
+          });
+          if (node.isInStore) {
+            const { content: pkg } = await PackageJson.normalize(node.path);
+            node.package.scripts = pkg.scripts;
+          }
+          return;
+        }
+        await rm(node.path, { recursive: true, force: true });
+        const dir = dirname(node.path);
+        const target = node.realpath;
+        let rel;
+        if (node.resolved?.startsWith("file:")) {
+          rel = this.#calculateRelativePath(node, dir, target, nm);
+        } else {
+          rel = relative(dir, target);
+        }
+        await mkdir(dir, { recursive: true });
+        return symlink(rel, node.path, "junction");
+      }
+      // if the node is optional, then the failure of the promise is nonfatal
+      // just add it and its optional set to the trash list.
+      [_handleOptionalFailure](node, p) {
+        return (node.optional ? p.catch(() => {
+          const set = optionalSet(node);
+          for (const node2 of set) {
+            log.verbose("reify", "failed optional dependency", node2.path);
+            node2.inert = true;
+            this[_addNodeToTrashList](node2);
+          }
+        }) : p).then(() => node);
+      }
+      #calculateRelativePath(node, dir, target) {
+        let hasRootOverride = [...node.edgesIn].some((edge) => edge.from.isRoot && edge.overrides);
+        if (!hasRootOverride && node.root) {
+          const rootPackage = node.root.target;
+          hasRootOverride = !!(rootPackage && rootPackage.package.overrides && rootPackage.package.overrides[node.name]);
+        }
+        if (!hasRootOverride) {
+          return relative(dir, target);
+        }
+        const overrideSpec = node.root?.target?.package?.overrides?.[node.name];
+        if (typeof overrideSpec === "string" && overrideSpec.startsWith("file:")) {
+          const overridePath = overrideSpec.replace(/^file:/, "");
+          const rootDir = node.root.target.path;
+          return relative(dir, resolve(rootDir, overridePath));
+        }
+        const filePath = node.resolved.replace(/^file:/, "");
+        return join(filePath);
+      }
+      #registryResolved(resolved) {
+        try {
+          const resolvedURL = hgi.parseUrl(resolved);
+          if (this.options.replaceRegistryHost === resolvedURL.hostname || this.options.replaceRegistryHost === "always") {
+            const registryURL = new URL(this.registry);
+            resolvedURL.hostname = registryURL.hostname;
+            resolvedURL.port = registryURL.port;
+            resolvedURL.protocol = registryURL.protocol;
+            const registryPath = registryURL.pathname.replace(/\/$/, "");
+            if (registryPath && registryPath !== "/" && !resolvedURL.pathname.startsWith(registryPath)) {
+              resolvedURL.pathname = registryPath + resolvedURL.pathname;
+            }
+            return resolvedURL.toString();
+          }
+          return resolved;
+        } catch (e) {
+          return void 0;
+        }
+      }
+      // bundles are *sort of* like shrinkwraps, in that the branch is defined
+      // by the contents of the package.  however, in their case, rather than
+      // shipping a virtual tree that must be reified, they ship an entire
+      // reified actual tree that must be unpacked and not modified.
+      [_loadBundlesAndUpdateTrees](depth = 0, bundlesByDepth) {
+        let maxBundleDepth;
+        if (!bundlesByDepth) {
+          bundlesByDepth = /* @__PURE__ */ new Map();
+          maxBundleDepth = -1;
+          dfwalk({
+            tree: this.diff,
+            visit: /* @__PURE__ */ __name((diff) => {
+              const node = diff.ideal;
+              if (!node) {
+                return;
+              }
+              if (node.isProjectRoot) {
+                return;
+              }
+              const { bundleDependencies } = node.package;
+              if (bundleDependencies && bundleDependencies.length) {
+                maxBundleDepth = Math.max(maxBundleDepth, node.depth);
+                if (!bundlesByDepth.has(node.depth)) {
+                  bundlesByDepth.set(node.depth, [node]);
+                } else {
+                  bundlesByDepth.get(node.depth).push(node);
+                }
+              }
+            }, "visit"),
+            getChildren: /* @__PURE__ */ __name((diff) => diff.children, "getChildren")
+          });
+          bundlesByDepth.set("maxBundleDepth", maxBundleDepth);
+        } else {
+          maxBundleDepth = bundlesByDepth.get("maxBundleDepth");
+        }
+        if (depth === 0) {
+          time.start("reify:loadBundles");
+        }
+        if (depth > maxBundleDepth) {
+          if (maxBundleDepth !== -1) {
+            this.#pruneBundledMetadeps(bundlesByDepth);
+            this[_diffTrees]();
+          }
+          time.end("reify:loadBundles");
+          return;
+        }
+        const set = (bundlesByDepth.get(depth) || []).filter((node) => node.root === this.idealTree && node.target !== node.root && !this[_trashList].has(node.path));
+        if (!set.length) {
+          return this[_loadBundlesAndUpdateTrees](depth + 1, bundlesByDepth);
+        }
+        return promiseCallLimit(set.map((node) => {
+          return () => {
+            this.#bundleUnpacked.add(node);
+            return this[_reifyNode](node);
+          };
+        }), { rejectLate: true }).then((nodes) => promiseAllRejectLate(nodes.map(async (node) => {
+          const arb = new this.constructor({
+            ...this.options,
+            path: node.path
+          });
+          const notTransplanted = new Set(node.children.keys());
+          await arb.loadActual({
+            root: node,
+            // don't transplant any sparse folders we created
+            // loadActual will set node.package to {} for empty directories
+            // if by chance there are some empty folders in the node_modules
+            // tree for some other reason, then ok, ignore those too.
+            transplantFilter: /* @__PURE__ */ __name((node2) => {
+              if (node2.package._id) {
+                notTransplanted.delete(node2.name);
+                return true;
+              } else {
+                return false;
+              }
+            }, "transplantFilter")
+          });
+          for (const name of notTransplanted) {
+            this.#bundleMissing.add(node.children.get(name));
+          }
+        }))).then(() => this[_loadBundlesAndUpdateTrees](depth + 1, bundlesByDepth));
+      }
+      // https://github.com/npm/cli/issues/1597#issuecomment-667639545
+      #pruneBundledMetadeps(bundlesByDepth) {
+        const bundleShadowed = /* @__PURE__ */ new Set();
+        for (const bundles of bundlesByDepth.values()) {
+          if (!Array.isArray(bundles)) {
+            continue;
+          }
+          for (const node of bundles) {
+            for (const name of node.children.keys()) {
+              const shadow = node.parent.resolve(name);
+              if (!shadow) {
+                continue;
+              }
+              bundleShadowed.add(shadow);
+              shadow.extraneous = true;
+            }
+          }
+        }
+        for (const shadow of bundleShadowed) {
+          for (const shadDep of shadow.edgesOut.values()) {
+            if (shadDep.to) {
+              bundleShadowed.add(shadDep.to);
+              shadDep.to.extraneous = true;
+            }
+          }
+        }
+        let changed;
+        do {
+          changed = false;
+          for (const shadow of bundleShadowed) {
+            for (const edge of shadow.edgesIn) {
+              if (!bundleShadowed.has(edge.from)) {
+                shadow.extraneous = false;
+                bundleShadowed.delete(shadow);
+                changed = true;
+                break;
+              }
+            }
+          }
+        } while (changed);
+        for (const shadow of bundleShadowed) {
+          this[_addNodeToTrashList](shadow);
+          shadow.root = null;
+        }
+      }
+      async [_submitQuickAudit]() {
+        if (this.options.audit === false) {
+          this.auditReport = null;
+          return;
+        }
+        const timeEnd = time.start("reify:audit");
+        const options = { ...this.options };
+        const tree = this.idealTree;
+        if (this.options.workspaces.length) {
+          options.filterSet = this.workspaceDependencySet(
+            tree,
+            this.options.workspaces,
+            this.options.includeWorkspaceRoot
+          );
+        }
+        this.auditReport = AuditReport.load(tree, options).then((res) => {
+          timeEnd();
+          return res;
+        });
+      }
+      // ok!  actually unpack stuff into their target locations!
+      // The sparse tree has already been created, so we walk the diff
+      // kicking off each unpack job.  If any fail, we rm the sparse
+      // tree entirely and try to put everything back where it was.
+      [_unpackNewModules]() {
+        const timeEnd = time.start("reify:unpack");
+        const unpacks = [];
+        dfwalk({
+          tree: this.diff,
+          visit: /* @__PURE__ */ __name((diff) => {
+            if (diff.action !== "CHANGE" && diff.action !== "ADD") {
+              return;
+            }
+            const node = diff.ideal;
+            const bd = this.#bundleUnpacked.has(node);
+            const sw = this.#shrinkwrapInflated.has(node);
+            const bundleMissing = this.#bundleMissing.has(node);
+            const doUnpack = node && // can't unpack if removed!
+            // root node already exists
+            !node.isRoot && // already unpacked to read bundle
+            !bd && // already unpacked to read sw
+            !sw && // already unpacked by another dep's bundle
+            (bundleMissing || !node.inDepBundle);
+            if (doUnpack) {
+              unpacks.push(this[_reifyNode](node));
+            }
+          }, "visit"),
+          getChildren: /* @__PURE__ */ __name((diff) => diff.children, "getChildren")
+        });
+        return promiseAllRejectLate(unpacks).then(timeEnd);
+      }
+      // This is the part where we move back the unchanging nodes that were
+      // the children of a node that did change.  If this fails, the rollback
+      // is a three-step process.  First, we try to move the retired unchanged
+      // nodes BACK to their retirement folders, then delete the sparse tree,
+      // then move everything out of retirement.
+      [_moveBackRetiredUnchanged]() {
+        const timeEnd = time.start("reify:unretire");
+        const moves = this.#retiredPaths;
+        this.#retiredUnchanged = {};
+        return promiseAllRejectLate(this.diff.children.map((diff) => {
+          if (diff.action !== "CHANGE" && diff.action !== "REMOVE") {
+            return;
+          }
+          const { path: realFolder } = diff.actual;
+          const retireFolder = moves[realFolder];
+          debug(() => {
+            if (!retireFolder) {
+              const er = new Error("trying to un-retire but not retired");
+              throw Object.assign(er, {
+                realFolder,
+                retireFolder,
+                actual: diff.actual,
+                ideal: diff.ideal,
+                action: diff.action
+              });
+            }
+          });
+          this.#retiredUnchanged[retireFolder] = [];
+          return promiseAllRejectLate(diff.unchanged.map((node) => {
+            if (node.isLink) {
+              return mkdir(dirname(node.path), { recursive: true, force: true }).then(() => this[_reifyNode](node));
+            }
+            if (node.inDepBundle && !this.#bundleMissing.has(node)) {
+              return;
+            }
+            this.#retiredUnchanged[retireFolder].push(node);
+            const rel = relative(realFolder, node.path);
+            const fromPath = resolve(retireFolder, rel);
+            const bd = node.package.bundleDependencies;
+            const dir = bd && bd.length ? node.path + "/node_modules" : node.path;
+            return mkdir(dir, { recursive: true }).then(() => this[_moveContents](node, fromPath));
+          }));
+        })).then(timeEnd);
+      }
+      // move the contents from the fromPath to the node.path
+      [_moveContents](node, fromPath) {
+        return packageContents({
+          path: fromPath,
+          depth: 1,
+          packageJsonCache: /* @__PURE__ */ new Map([[fromPath + "/package.json", node.package]])
+        }).then((res) => promiseAllRejectLate(res.map((path) => {
+          const rel = relative(fromPath, path);
+          const to = resolve(node.path, rel);
+          return this[_renamePath](path, to);
+        })));
+      }
+      [_rollbackMoveBackRetiredUnchanged](er) {
+        const moves = this.#retiredPaths;
+        const realFolders = new Map(Object.entries(moves).map(([k, v]) => [v, k]));
+        const promises = Object.entries(this.#retiredUnchanged).map(([retireFolder, nodes]) => promiseAllRejectLate(nodes.map((node) => {
+          const realFolder = realFolders.get(retireFolder);
+          const rel = relative(realFolder, node.path);
+          const fromPath = resolve(retireFolder, rel);
+          return this[_moveContents]({ ...node, path: fromPath }, node.path);
+        })));
+        return promiseAllRejectLate(promises).then(() => this[_rollbackCreateSparseTree](er));
+      }
+      [_build]() {
+        const timeEnd = time.start("reify:build");
+        const nodes = [];
+        dfwalk({
+          tree: this.diff,
+          leave: /* @__PURE__ */ __name((diff) => {
+            if (!diff.ideal.isProjectRoot) {
+              nodes.push(diff.ideal);
+            }
+          }, "leave"),
+          // process adds before changes, ignore removals
+          getChildren: /* @__PURE__ */ __name((diff) => diff && diff.children, "getChildren"),
+          filter: /* @__PURE__ */ __name((diff) => diff.action === "ADD" || diff.action === "CHANGE", "filter")
+        });
+        for (const node of this.diff.unchanged) {
+          const tree = node.root.target;
+          const linkedFromRoot = node.parent === tree && !node.inert || node.target.fsTop === tree;
+          if (node.isLink && linkedFromRoot) {
+            nodes.push(node);
+          }
+        }
+        return this.rebuild({ nodes, handleOptionalFailure: true }).then(timeEnd);
+      }
+      // the tree is pretty much built now, so it's cleanup time.
+      // remove the retired folders, and any deleted nodes
+      // If this fails, there isn't much we can do but tell the user about it.
+      // Thankfully, it's pretty unlikely that it'll fail, since rm is a node builtin.
+      async [_removeTrash]() {
+        const timeEnd = time.start("reify:trash");
+        const promises = [];
+        const failures = [];
+        const _rm = /* @__PURE__ */ __name((path) => rm(path, { recursive: true, force: true }).catch((er) => failures.push([path, er])), "_rm");
+        for (const path of this[_trashList]) {
+          promises.push(_rm(path));
+        }
+        await promiseAllRejectLate(promises);
+        if (failures.length) {
+          log.warn("cleanup", "Failed to remove some directories", failures);
+        }
+        timeEnd();
+      }
+      // last but not least, we save the ideal tree metadata to the package-lock
+      // or shrinkwrap file, and any additions or removals to package.json
+      async [_saveIdealTree](options) {
+        const save = !(options.save === false);
+        const hasUpdates = this[_updateAll] || this[_updateNames].length;
+        const saveIdealTree = !(!save && !hasUpdates || this.options.global || this.options.dryRun);
+        if (!saveIdealTree) {
+          return false;
+        }
+        const timeEnd = time.start("reify:save");
+        const updatedTrees = /* @__PURE__ */ new Set();
+        const updateNodes = /* @__PURE__ */ __name((nodes) => {
+          for (const { name, tree: addTree } of nodes) {
+            const edge = addTree.edgesOut.get(name);
+            const pkg = addTree.package;
+            const req = npa.resolve(name, edge.spec, addTree.realpath);
+            const { rawSpec, subSpec } = req;
+            const spec = subSpec ? subSpec.rawSpec : rawSpec;
+            const child = edge.to;
+            if (!child || !addTree.isTop) {
+              continue;
+            }
+            let newSpec;
+            const isLocalDep = req.type === "directory" || req.type === "file";
+            if (req.registry) {
+              const version = child.version;
+              const prefixRange = version ? this.options.savePrefix + version : "*";
+              const isRange = (subSpec || req).type === "range";
+              let range = spec;
+              if (!isRange || spec === "*" || subset(prefixRange, spec, { loose: true })) {
+                range = prefixRange;
+              }
+              const pname = child.packageName;
+              const alias = name !== pname;
+              newSpec = alias ? `npm:${pname}@${range}` : range;
+            } else if (req.hosted) {
+              const h = req.hosted;
+              const opt = { noCommittish: false };
+              if (h.https && h.auth) {
+                newSpec = `git+${h.https(opt)}`;
+              } else {
+                newSpec = h.shortcut(opt);
+              }
+            } else if (isLocalDep) {
+              if (edge.type === "workspace") {
+                const { version } = edge.to.target;
+                const prefixRange = version ? this.options.savePrefix + version : "*";
+                newSpec = prefixRange;
+              } else {
+                const p = req.fetchSpec.replace(/^file:/, "");
+                const rel = relpath(addTree.realpath, p);
+                newSpec = `file:${rel}`;
+              }
+            } else {
+              newSpec = req.saveSpec;
+            }
+            if (options.saveType) {
+              const depType = saveTypeMap.get(options.saveType);
+              pkg[depType][name] = newSpec;
+              if (options.saveType === "prod" && pkg.optionalDependencies) {
+                delete pkg.optionalDependencies[name];
+              }
+            } else {
+              if (hasSubKey(pkg, "dependencies", name)) {
+                pkg.dependencies[name] = newSpec;
+              }
+              if (hasSubKey(pkg, "devDependencies", name)) {
+                pkg.devDependencies[name] = newSpec;
+                if (hasSubKey(pkg, "peerDependencies", name) && (isLocalDep || !intersects(newSpec, pkg.peerDependencies[name]))) {
+                  pkg.peerDependencies[name] = newSpec;
+                }
+                if (hasSubKey(pkg, "optionalDependencies", name) && (isLocalDep || !intersects(newSpec, pkg.optionalDependencies[name]))) {
+                  pkg.optionalDependencies[name] = newSpec;
+                }
+              } else {
+                if (hasSubKey(pkg, "peerDependencies", name)) {
+                  pkg.peerDependencies[name] = newSpec;
+                }
+                if (hasSubKey(pkg, "optionalDependencies", name)) {
+                  pkg.optionalDependencies[name] = newSpec;
+                }
+              }
+            }
+            updatedTrees.add(addTree);
+          }
+        }, "updateNodes");
+        const exactVersion = /* @__PURE__ */ __name((node) => {
+          for (const edge of node.edgesIn) {
+            try {
+              if (subset(edge.spec, node.version)) {
+                return false;
+              }
+            } catch {
+            }
+          }
+          return true;
+        }, "exactVersion");
+        const retrieveUpdatedNodes = /* @__PURE__ */ __name((names) => {
+          const filterDirectDependencies = /* @__PURE__ */ __name((node) => !node.isRoot && node.resolveParent && node.resolveParent.isRoot && (!names || names.includes(node.name)) && exactVersion(node), "filterDirectDependencies");
+          const directDeps = this.idealTree.inventory.filter(filterDirectDependencies);
+          const nodes = [];
+          for (const node of directDeps) {
+            for (const edgeIn of node.edgesIn) {
+              nodes.push({
+                name: node.name,
+                tree: edgeIn.from.target
+              });
+            }
+          }
+          return nodes;
+        }, "retrieveUpdatedNodes");
+        if (save) {
+          if (this[_updateAll]) {
+            const nodes = retrieveUpdatedNodes();
+            updateNodes(nodes);
+          } else {
+            if (this[_resolvedAdd].length) {
+              updateNodes(this[_resolvedAdd]);
+            }
+            if (this[_updateNames].length) {
+              const nodes = retrieveUpdatedNodes(this[_updateNames]);
+              updateNodes(nodes);
+            }
+            for (const { from: tree } of this.explicitRequests) {
+              updatedTrees.add(tree);
+            }
+          }
+        }
+        if (save) {
+          for (const tree of updatedTrees) {
+            tree.package = tree.package;
+            const pkgJson = await PackageJson.load(tree.path, { create: true });
+            const {
+              dependencies = {},
+              devDependencies = {},
+              optionalDependencies = {},
+              peerDependencies = {},
+              // bundleDependencies is not required by PackageJson like the other
+              // fields here PackageJson also doesn't omit an empty array for this
+              // field so defaulting this to an empty array would add that field to
+              // every package.json file.
+              bundleDependencies
+            } = tree.package;
+            pkgJson.update({
+              dependencies,
+              devDependencies,
+              optionalDependencies,
+              peerDependencies,
+              bundleDependencies
+            });
+            await pkgJson.save();
+          }
+        }
+        if (this[_usePackageLock]) {
+          let format = this.idealTree.package[Symbol.for("indent")];
+          if (format === void 0) {
+            format = "  ";
+          }
+          await this.idealTree.meta.save({
+            format: this.options.formatPackageLock && format ? format : this.options.formatPackageLock
+          });
+        }
+        timeEnd();
+        return true;
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/arborist/isolated-reifier.js
+var require_isolated_reifier = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/arborist/isolated-reifier.js"(exports2, module2) {
+    var _makeIdealGraph = Symbol("makeIdealGraph");
+    var _createIsolatedTree = Symbol.for("createIsolatedTree");
+    var _createBundledTree = Symbol("createBundledTree");
+    var { mkdirSync } = require("node:fs");
+    var pacote2 = require_lib30();
+    var { join } = require("node:path");
+    var { depth } = require_lib31();
+    var crypto = require("node:crypto");
+    var memoize = /* @__PURE__ */ __name((fn) => {
+      const memo = /* @__PURE__ */ new Map();
+      return async function(arg) {
+        const key = arg;
+        if (memo.has(key)) {
+          return memo.get(key);
+        }
+        const result = {};
+        memo.set(key, result);
+        await fn(result, arg);
+        return result;
+      };
+    }, "memoize");
+    module2.exports = (cls) => class IsolatedReifier extends cls {
+      static {
+        __name(this, "IsolatedReifier");
+      }
+      /**
+       * Create an ideal graph.
+       *
+       * An implementation of npm RFC-0042
+       * https://github.com/npm/rfcs/blob/main/accepted/0042-isolated-mode.md
+       *
+       * This entire file should be considered technical debt that will be resolved
+       * with an Arborist refactor or rewrite. Embedded logic in Nodes and Links,
+       * and the incremental state of building trees and reifying contains too many
+       * assumptions to do a linked mode properly.
+       *
+       * Instead, this approach takes a tree built from build-ideal-tree, and
+       * returns a new tree-like structure without the embedded logic of Node and
+       * Link classes.
+       *
+       * Since the RFC requires leaving the package-lock in place, this approach
+       * temporarily replaces the tree state for a couple of steps of reifying.
+       *
+       **/
+      async [_makeIdealGraph](options) {
+        const bitOpt = {
+          ...options,
+          complete: false
+        };
+        await this.buildIdealTree(bitOpt);
+        const idealTree = this.idealTree;
+        this.rootNode = {};
+        const root = this.rootNode;
+        this.counter = 0;
+        this.externalProxyMemo = memoize(this.externalProxy.bind(this));
+        this.workspaceProxyMemo = memoize(this.workspaceProxy.bind(this));
+        root.external = [];
+        root.isProjectRoot = true;
+        root.localLocation = idealTree.location;
+        root.localPath = idealTree.path;
+        root.workspaces = await Promise.all(
+          Array.from(idealTree.fsChildren.values(), this.workspaceProxyMemo)
+        );
+        const processed = /* @__PURE__ */ new Set();
+        const queue = [idealTree, ...idealTree.fsChildren];
+        while (queue.length !== 0) {
+          const next = queue.pop();
+          if (processed.has(next.location)) {
+            continue;
+          }
+          processed.add(next.location);
+          next.edgesOut.forEach((e) => {
+            if (!e.to || (next.package.bundleDependencies || next.package.bundledDependencies || []).includes(e.to.name)) {
+              return;
+            }
+            queue.push(e.to);
+          });
+          if (!next.isProjectRoot && !next.isWorkspace && !next.inert) {
+            root.external.push(await this.externalProxyMemo(next));
+          }
+        }
+        await this.assignCommonProperties(idealTree, root);
+        this.idealGraph = root;
+      }
+      async workspaceProxy(result, node) {
+        result.localLocation = node.location;
+        result.localPath = node.path;
+        result.isWorkspace = true;
+        result.resolved = node.resolved;
+        await this.assignCommonProperties(node, result);
+      }
+      async externalProxy(result, node) {
+        await this.assignCommonProperties(node, result);
+        if (node.hasShrinkwrap) {
+          const dir = join(
+            node.root.path,
+            "node_modules",
+            ".store",
+            `${node.name}@${node.version}`
+          );
+          mkdirSync(dir, { recursive: true });
+          await pacote2.extract(node.resolved, dir, {
+            ...this.options,
+            resolved: node.resolved,
+            integrity: node.integrity
+          });
+          const Arborist2 = this.constructor;
+          const arb = new Arborist2({ ...this.options, path: dir });
+          await arb[_makeIdealGraph]({ dev: false });
+          this.rootNode.external.push(...arb.idealGraph.external);
+          arb.idealGraph.external.forEach((e) => {
+            e.root = this.rootNode;
+            e.id = `${node.id}=>${e.id}`;
+          });
+          result.localDependencies = [];
+          result.externalDependencies = arb.idealGraph.externalDependencies;
+          result.externalOptionalDependencies = arb.idealGraph.externalOptionalDependencies;
+          result.dependencies = [
+            ...result.externalDependencies,
+            ...result.localDependencies,
+            ...result.externalOptionalDependencies
+          ];
+        }
+        result.optional = node.optional;
+        result.resolved = node.resolved;
+        result.version = node.version;
+      }
+      async assignCommonProperties(node, result) {
+        function validEdgesOut(node2) {
+          return [...node2.edgesOut.values()].filter((e) => e.to && e.to.target && !(node2.package.bundledDependencies || node2.package.bundleDependencies || []).includes(e.to.name));
+        }
+        __name(validEdgesOut, "validEdgesOut");
+        const edges = validEdgesOut(node);
+        const optionalDeps = edges.filter((e) => e.optional).map((e) => e.to.target);
+        const nonOptionalDeps = edges.filter((e) => !e.optional).map((e) => e.to.target);
+        result.localDependencies = await Promise.all(nonOptionalDeps.filter((n) => n.isWorkspace).map(this.workspaceProxyMemo));
+        result.externalDependencies = await Promise.all(nonOptionalDeps.filter((n) => !n.isWorkspace && !n.inert).map(this.externalProxyMemo));
+        result.externalOptionalDependencies = await Promise.all(optionalDeps.filter((n) => !n.inert).map(this.externalProxyMemo));
+        result.dependencies = [
+          ...result.externalDependencies,
+          ...result.localDependencies,
+          ...result.externalOptionalDependencies
+        ];
+        result.root = this.rootNode;
+        result.id = this.counter++;
+        result.name = node.name;
+        result.package = { ...node.package };
+        result.package.bundleDependencies = void 0;
+        result.hasInstallScript = node.hasInstallScript;
+      }
+      async [_createBundledTree]() {
+        const idealTree = this.idealTree;
+        const queue = [];
+        for (const [, edge] of idealTree.edgesOut) {
+          if (edge.to && (idealTree.package.bundleDependencies || idealTree.package.bundledDependencies || []).includes(edge.to.name)) {
+            queue.push({ from: idealTree, to: edge.to });
+          }
+        }
+        for (const child of idealTree.fsChildren) {
+          for (const [, edge] of child.edgesOut) {
+            if (edge.to && (child.package.bundleDependencies || child.package.bundledDependencies || []).includes(edge.to.name)) {
+              queue.push({ from: child, to: edge.to });
+            }
+          }
+        }
+        const processed = /* @__PURE__ */ new Set();
+        const nodes = /* @__PURE__ */ new Map();
+        const edges = [];
+        while (queue.length !== 0) {
+          const nextEdge = queue.pop();
+          const key = `${nextEdge.from.location}=>${nextEdge.to.location}`;
+          if (processed.has(key)) {
+            continue;
+          }
+          processed.add(key);
+          const from = nextEdge.from;
+          if (!from.isRoot && !from.isWorkspace) {
+            nodes.set(from.location, { location: from.location, resolved: from.resolved, name: from.name, optional: from.optional, pkg: { ...from.package, bundleDependencies: void 0 } });
+          }
+          const to = nextEdge.to;
+          nodes.set(to.location, { location: to.location, resolved: to.resolved, name: to.name, optional: to.optional, pkg: { ...to.package, bundleDependencies: void 0 } });
+          edges.push({ from: from.isRoot ? "root" : from.location, to: to.location });
+          to.edgesOut.forEach((e) => {
+            if (e.to) {
+              queue.push({ from: e.from, to: e.to });
+            }
+          });
+        }
+        return { edges, nodes };
+      }
+      async [_createIsolatedTree]() {
+        await this[_makeIdealGraph](this.options);
+        const proxiedIdealTree = this.idealGraph;
+        const bundledTree = await this[_createBundledTree]();
+        const treeHash = /* @__PURE__ */ __name((startNode) => {
+          const deps = [];
+          const branch = [];
+          depth({
+            tree: startNode,
+            getChildren: /* @__PURE__ */ __name((node) => node.dependencies, "getChildren"),
+            filter: /* @__PURE__ */ __name((node) => node, "filter"),
+            visit: /* @__PURE__ */ __name((node) => {
+              branch.push(`${node.name}@${node.version}`);
+              deps.push(`${branch.join("->")}::${node.resolved}`);
+            }, "visit"),
+            leave: /* @__PURE__ */ __name(() => {
+              branch.pop();
+            }, "leave")
+          });
+          deps.sort();
+          return crypto.createHash("shake256", { outputLength: 16 }).update(deps.join(",")).digest("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/m, "");
+        }, "treeHash");
+        const getKey = /* @__PURE__ */ __name((idealTreeNode) => {
+          return `${idealTreeNode.name}@${idealTreeNode.version}-${treeHash(idealTreeNode)}`;
+        }, "getKey");
+        const root = {
+          fsChildren: [],
+          integrity: null,
+          inventory: /* @__PURE__ */ new Map(),
+          isLink: false,
+          isRoot: true,
+          binPaths: [],
+          edgesIn: /* @__PURE__ */ new Set(),
+          edgesOut: /* @__PURE__ */ new Map(),
+          hasShrinkwrap: false,
+          parent: null,
+          // TODO: we should probably not reference this.idealTree
+          resolved: this.idealTree.resolved,
+          isTop: true,
+          path: proxiedIdealTree.root.localPath,
+          realpath: proxiedIdealTree.root.localPath,
+          package: proxiedIdealTree.root.package,
+          meta: { loadedFromDisk: false },
+          global: false,
+          isProjectRoot: true,
+          children: []
+        };
+        root.inventory.query = () => {
+          return [];
+        };
+        const processed = /* @__PURE__ */ new Set();
+        proxiedIdealTree.workspaces.forEach((c) => {
+          const workspace = {
+            edgesIn: /* @__PURE__ */ new Set(),
+            edgesOut: /* @__PURE__ */ new Map(),
+            children: [],
+            hasInstallScript: c.hasInstallScript,
+            binPaths: [],
+            package: c.package,
+            location: c.localLocation,
+            path: c.localPath,
+            realpath: c.localPath,
+            resolved: c.resolved
+          };
+          root.fsChildren.push(workspace);
+          root.inventory.set(workspace.location, workspace);
+        });
+        const generateChild = /* @__PURE__ */ __name((node, location, pkg, inStore) => {
+          const newChild = {
+            global: false,
+            globalTop: false,
+            isProjectRoot: false,
+            isTop: false,
+            location,
+            name: node.name,
+            optional: node.optional,
+            top: { path: proxiedIdealTree.root.localPath },
+            children: [],
+            edgesIn: /* @__PURE__ */ new Set(),
+            edgesOut: /* @__PURE__ */ new Map(),
+            binPaths: [],
+            fsChildren: [],
+            /* istanbul ignore next -- emulate Node */
+            getBundler() {
+              return null;
+            },
+            hasShrinkwrap: false,
+            inDepBundle: false,
+            integrity: null,
+            isLink: false,
+            isRoot: false,
+            isInStore: inStore,
+            path: join(proxiedIdealTree.root.localPath, location),
+            realpath: join(proxiedIdealTree.root.localPath, location),
+            resolved: node.resolved,
+            version: pkg.version,
+            package: pkg
+          };
+          newChild.target = newChild;
+          root.children.push(newChild);
+          root.inventory.set(newChild.location, newChild);
+        }, "generateChild");
+        proxiedIdealTree.external.forEach((c) => {
+          const key = getKey(c);
+          if (processed.has(key)) {
+            return;
+          }
+          processed.add(key);
+          const location = join("node_modules", ".store", key, "node_modules", c.name);
+          generateChild(c, location, c.package, true);
+        });
+        bundledTree.nodes.forEach((node) => {
+          generateChild(node, node.location, node.pkg, false);
+        });
+        bundledTree.edges.forEach((e) => {
+          const from = e.from === "root" ? root : root.inventory.get(e.from);
+          const to = root.inventory.get(e.to);
+          const edge = { optional: false, from, to };
+          from.edgesOut.set(to.name, edge);
+          to.edgesIn.add(edge);
+        });
+        const memo = /* @__PURE__ */ new Set();
+        function processEdges(node, externalEdge) {
+          externalEdge = !!externalEdge;
+          const key = getKey(node);
+          if (memo.has(key)) {
+            return;
+          }
+          memo.add(key);
+          let from, nmFolder;
+          if (externalEdge) {
+            const fromLocation = join("node_modules", ".store", key, "node_modules", node.name);
+            from = root.children.find((c) => c.location === fromLocation);
+            nmFolder = join("node_modules", ".store", key, "node_modules");
+          } else {
+            from = node.isProjectRoot ? root : root.fsChildren.find((c) => c.location === node.localLocation);
+            nmFolder = join(node.localLocation, "node_modules");
+          }
+          const processDeps = /* @__PURE__ */ __name((dep, optional, external) => {
+            optional = !!optional;
+            external = !!external;
+            const location = join(nmFolder, dep.name);
+            const binNames = dep.package.bin && Object.keys(dep.package.bin) || [];
+            const toKey = getKey(dep);
+            let target;
+            if (external) {
+              const toLocation = join("node_modules", ".store", toKey, "node_modules", dep.name);
+              target = root.children.find((c) => c.location === toLocation);
+            } else {
+              target = root.fsChildren.find((c) => c.location === dep.localLocation);
+            }
+            binNames.forEach((bn) => {
+              target.binPaths.push(join(from.realpath, "node_modules", ".bin", bn));
+            });
+            const link = {
+              global: false,
+              globalTop: false,
+              isProjectRoot: false,
+              edgesIn: /* @__PURE__ */ new Set(),
+              edgesOut: /* @__PURE__ */ new Map(),
+              binPaths: [],
+              isTop: false,
+              optional,
+              location,
+              path: join(dep.root.localPath, nmFolder, dep.name),
+              realpath: target.path,
+              name: toKey,
+              resolved: dep.resolved,
+              top: { path: dep.root.localPath },
+              children: [],
+              fsChildren: [],
+              isLink: true,
+              isStoreLink: true,
+              isRoot: false,
+              package: { _id: "abc", bundleDependencies: void 0, deprecated: void 0, bin: target.package.bin, scripts: dep.package.scripts },
+              target
+            };
+            const newEdge1 = { optional, from, to: link };
+            from.edgesOut.set(dep.name, newEdge1);
+            link.edgesIn.add(newEdge1);
+            const newEdge2 = { optional: false, from: link, to: target };
+            link.edgesOut.set(dep.name, newEdge2);
+            target.edgesIn.add(newEdge2);
+            root.children.push(link);
+          }, "processDeps");
+          for (const dep of node.localDependencies) {
+            processEdges(dep, false);
+            processDeps(dep, false, false);
+          }
+          for (const dep of node.externalDependencies) {
+            processEdges(dep, true);
+            processDeps(dep, false, true);
+          }
+          for (const dep of node.externalOptionalDependencies) {
+            processEdges(dep, true);
+            processDeps(dep, true, true);
+          }
+        }
+        __name(processEdges, "processEdges");
+        processEdges(proxiedIdealTree, false);
+        for (const node of proxiedIdealTree.workspaces) {
+          processEdges(node, false);
+        }
+        root.children.forEach((c) => c.parent = root);
+        root.children.forEach((c) => c.root = root);
+        root.root = root;
+        root.target = root;
+        return root;
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/arborist/index.js
+var require_arborist = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/arborist/index.js"(exports2, module2) {
+    var { resolve } = require("node:path");
+    var { homedir } = require("node:os");
+    var { depth } = require_lib31();
+    var mapWorkspaces = require_lib33();
+    var { log, time } = require_lib2();
+    var { saveTypeMap } = require_add_rm_pkg_deps();
+    var AuditReport = require_audit_report();
+    var relpath = require_relpath();
+    var PackumentCache = require_packument_cache();
+    var mixins = [
+      require_tracker2(),
+      require_build_ideal_tree(),
+      require_load_actual(),
+      require_load_virtual(),
+      require_rebuild(),
+      require_reify(),
+      require_isolated_reifier()
+    ];
+    var _setWorkspaces = Symbol.for("setWorkspaces");
+    var Base = mixins.reduce((a, b) => b(a), require("node:events"));
+    var lockfileVersion = /* @__PURE__ */ __name((lfv) => {
+      if (lfv === 1 || lfv === 2 || lfv === 3) {
+        return lfv;
+      }
+      if (lfv === void 0 || lfv === null) {
+        return null;
+      }
+      throw new TypeError("Invalid lockfileVersion config: " + lfv);
+    }, "lockfileVersion");
+    var Arborist2 = class extends Base {
+      static {
+        __name(this, "Arborist");
+      }
+      constructor(options = {}) {
+        const timeEnd = time.start("arborist:ctor");
+        super(options);
+        this.options = {
+          nodeVersion: process.version,
+          ...options,
+          Arborist: this.constructor,
+          binLinks: "binLinks" in options ? !!options.binLinks : true,
+          cache: options.cache || `${homedir()}/.npm/_cacache`,
+          dryRun: !!options.dryRun,
+          formatPackageLock: "formatPackageLock" in options ? !!options.formatPackageLock : true,
+          force: !!options.force,
+          global: !!options.global,
+          ignoreScripts: !!options.ignoreScripts,
+          installStrategy: options.global ? "shallow" : options.installStrategy ? options.installStrategy : "hoisted",
+          lockfileVersion: lockfileVersion(options.lockfileVersion),
+          packageLockOnly: !!options.packageLockOnly,
+          packumentCache: options.packumentCache || new PackumentCache(),
+          path: options.path || ".",
+          rebuildBundle: "rebuildBundle" in options ? !!options.rebuildBundle : true,
+          replaceRegistryHost: options.replaceRegistryHost,
+          savePrefix: "savePrefix" in options ? options.savePrefix : "^",
+          scriptShell: options.scriptShell,
+          workspaces: options.workspaces || [],
+          workspacesEnabled: options.workspacesEnabled !== false
+        };
+        this.replaceRegistryHost = this.options.replaceRegistryHost = !this.options.replaceRegistryHost || this.options.replaceRegistryHost === "npmjs" ? "registry.npmjs.org" : this.options.replaceRegistryHost;
+        if (options.saveType && !saveTypeMap.get(options.saveType)) {
+          throw new Error(`Invalid saveType ${options.saveType}`);
+        }
+        this.cache = resolve(this.options.cache);
+        this.diff = null;
+        this.path = resolve(this.options.path);
+        timeEnd();
+      }
+      // TODO: We should change these to static functions instead
+      //   of methods for the next major version
+      // Get the actual nodes corresponding to a root node's child workspaces,
+      // given a list of workspace names.
+      workspaceNodes(tree, workspaces) {
+        const wsMap = tree.workspaces;
+        if (!wsMap) {
+          log.warn("workspaces", "filter set, but no workspaces present");
+          return [];
+        }
+        const nodes = [];
+        for (const name of workspaces) {
+          const path = wsMap.get(name);
+          if (!path) {
+            log.warn("workspaces", `${name} in filter set, but not in workspaces`);
+            continue;
+          }
+          const loc = relpath(tree.realpath, path);
+          const node = tree.inventory.get(loc);
+          if (!node) {
+            log.warn("workspaces", `${name} in filter set, but no workspace folder present`);
+            continue;
+          }
+          nodes.push(node);
+        }
+        return nodes;
+      }
+      // returns a set of workspace nodes and all their deps
+      // TODO why is includeWorkspaceRoot a param?
+      // TODO why is workspaces a param?
+      workspaceDependencySet(tree, workspaces, includeWorkspaceRoot) {
+        const wsNodes = this.workspaceNodes(tree, workspaces);
+        if (includeWorkspaceRoot) {
+          for (const edge of tree.edgesOut.values()) {
+            if (edge.type !== "workspace" && edge.to) {
+              wsNodes.push(edge.to);
+            }
+          }
+        }
+        const wsDepSet = new Set(wsNodes);
+        const extraneous = /* @__PURE__ */ new Set();
+        for (const node of wsDepSet) {
+          for (const edge of node.edgesOut.values()) {
+            const dep = edge.to;
+            if (dep) {
+              wsDepSet.add(dep);
+              if (dep.isLink) {
+                wsDepSet.add(dep.target);
+              }
+            }
+          }
+          for (const child of node.children.values()) {
+            if (child.extraneous) {
+              extraneous.add(child);
+            }
+          }
+        }
+        for (const extra of extraneous) {
+          wsDepSet.add(extra);
+        }
+        return wsDepSet;
+      }
+      // returns a set of root dependencies, excluding dependencies that are
+      // exclusively workspace dependencies
+      excludeWorkspacesDependencySet(tree) {
+        const rootDepSet = /* @__PURE__ */ new Set();
+        depth({
+          tree,
+          visit: /* @__PURE__ */ __name((node) => {
+            for (const { to } of node.edgesOut.values()) {
+              if (!to || to.isWorkspace) {
+                continue;
+              }
+              for (const edgeIn of to.edgesIn.values()) {
+                if (edgeIn.from.isRoot || rootDepSet.has(edgeIn.from)) {
+                  rootDepSet.add(to);
+                }
+              }
+            }
+            return node;
+          }, "visit"),
+          filter: /* @__PURE__ */ __name((node) => node, "filter"),
+          getChildren: /* @__PURE__ */ __name((node, tree2) => [...tree2.edgesOut.values()].map((edge) => edge.to), "getChildren")
+        });
+        return rootDepSet;
+      }
+      async [_setWorkspaces](node) {
+        const workspaces = await mapWorkspaces({
+          cwd: node.path,
+          pkg: node.package
+        });
+        if (node && workspaces.size) {
+          node.workspaces = workspaces;
+        }
+        return node;
+      }
+      async audit(options = {}) {
+        this.addTracker("audit");
+        if (this.options.global) {
+          throw Object.assign(
+            new Error("`npm audit` does not support testing globals"),
+            { code: "EAUDITGLOBAL" }
+          );
+        }
+        options = { ...this.options, ...options };
+        const timeEnd = time.start("audit");
+        let tree;
+        if (options.packageLock === false) {
+          await this.loadActual(options);
+          await this.buildIdealTree();
+          tree = this.idealTree;
+        } else {
+          tree = await this.loadVirtual();
+        }
+        if (this.options.workspaces.length) {
+          options.filterSet = this.workspaceDependencySet(
+            tree,
+            this.options.workspaces,
+            this.options.includeWorkspaceRoot
+          );
+        }
+        if (!options.workspacesEnabled) {
+          options.filterSet = this.excludeWorkspacesDependencySet(tree);
+        }
+        this.auditReport = await AuditReport.load(tree, options);
+        const ret = options.fix ? this.reify(options) : this.auditReport;
+        timeEnd();
+        this.finishTracker("audit");
+        return ret;
+      }
+      async dedupe(options = {}) {
+        options = { ...this.options, ...options };
+        const tree = await this.loadVirtual().catch(() => this.loadActual());
+        const names = [];
+        for (const name of tree.inventory.query("name")) {
+          if (tree.inventory.query("name", name).size > 1) {
+            names.push(name);
+          }
+        }
+        return this.reify({
+          ...options,
+          preferDedupe: true,
+          update: { names }
+        });
+      }
+    };
+    module2.exports = Arborist2;
+  }
+});
+
+// node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/index.js
+var require_lib42 = __commonJS({
+  "node_modules/.pnpm/@npmcli+arborist@9.1.6_supports-color@10.2.2/node_modules/@npmcli/arborist/lib/index.js"(exports2, module2) {
+    module2.exports = require_arborist();
+    module2.exports.Arborist = module2.exports;
+    module2.exports.Node = require_node5();
+    module2.exports.Link = require_link();
+    module2.exports.Edge = require_edge();
+    module2.exports.Shrinkwrap = require_shrinkwrap();
+  }
+});
+
+// node_modules/.pnpm/libnpmpack@9.0.9_supports-color@10.2.2/node_modules/libnpmpack/lib/index.js
+var require_lib43 = __commonJS({
+  "node_modules/.pnpm/libnpmpack@9.0.9_supports-color@10.2.2/node_modules/libnpmpack/lib/index.js"(exports2, module2) {
+    "use strict";
+    var pacote2 = require_lib30();
+    var npa = require_npa();
+    var runScript = require_run_script();
+    var path = require("node:path");
+    var Arborist2 = require_lib42();
+    var { writeFile } = require("node:fs/promises");
+    module2.exports = pack;
+    async function pack(spec = "file:.", opts = {}) {
+      spec = npa(spec);
+      const manifest = await pacote2.manifest(spec, { ...opts, Arborist: Arborist2 });
+      const stdio = opts.foregroundScripts ? "inherit" : "pipe";
+      if (spec.type === "directory" && !opts.ignoreScripts) {
+        await runScript({
+          ...opts,
+          event: "prepack",
+          path: spec.fetchSpec,
+          stdio,
+          pkg: manifest
+        });
+      }
+      const tarball = await pacote2.tarball(manifest._resolved, {
+        ...opts,
+        Arborist: Arborist2,
+        integrity: manifest._integrity
+      });
+      if (opts.dryRun === false) {
+        const filename = `${manifest.name}-${manifest.version}.tgz`.replace(/^@/, "").replace(/\//, "-");
+        const destination = path.resolve(opts.packDestination, filename);
+        await writeFile(destination, tarball);
+      }
+      if (spec.type === "directory" && !opts.ignoreScripts) {
+        await runScript({
+          ...opts,
+          event: "postpack",
+          path: spec.fetchSpec,
+          stdio,
+          pkg: manifest,
+          env: {
+            npm_package_from: tarball.from,
+            npm_package_resolved: tarball.resolved,
+            npm_package_integrity: tarball.integrity
+          }
+        });
+      }
+      return tarball;
+    }
+    __name(pack, "pack");
+  }
+});
+
+// node_modules/.pnpm/normalize-package-data@8.0.0/node_modules/normalize-package-data/lib/extract_description.js
+var require_extract_description = __commonJS({
+  "node_modules/.pnpm/normalize-package-data@8.0.0/node_modules/normalize-package-data/lib/extract_description.js"(exports2, module2) {
+    module2.exports = extractDescription;
+    function extractDescription(d) {
+      if (!d) {
+        return;
+      }
+      if (d === "ERROR: No README data found!") {
+        return;
+      }
+      d = d.trim().split("\n");
+      let s = 0;
+      while (d[s] && d[s].trim().match(/^(#|$)/)) {
+        s++;
+      }
+      const l = d.length;
+      let e = s + 1;
+      while (e < l && d[e].trim()) {
+        e++;
+      }
+      return d.slice(s, e).join(" ").trim();
+    }
+    __name(extractDescription, "extractDescription");
+  }
+});
+
+// node_modules/.pnpm/normalize-package-data@8.0.0/node_modules/normalize-package-data/lib/typos.json
+var require_typos = __commonJS({
+  "node_modules/.pnpm/normalize-package-data@8.0.0/node_modules/normalize-package-data/lib/typos.json"(exports2, module2) {
+    module2.exports = {
+      topLevel: {
+        dependancies: "dependencies",
+        dependecies: "dependencies",
+        depdenencies: "dependencies",
+        devEependencies: "devDependencies",
+        depends: "dependencies",
+        "dev-dependencies": "devDependencies",
+        devDependences: "devDependencies",
+        devDepenencies: "devDependencies",
+        devdependencies: "devDependencies",
+        repostitory: "repository",
+        repo: "repository",
+        prefereGlobal: "preferGlobal",
+        hompage: "homepage",
+        hampage: "homepage",
+        autohr: "author",
+        autor: "author",
+        contributers: "contributors",
+        publicationConfig: "publishConfig",
+        script: "scripts"
+      },
+      bugs: { web: "url", name: "url" },
+      script: { server: "start", tests: "test" }
+    };
+  }
+});
+
+// node_modules/.pnpm/normalize-package-data@8.0.0/node_modules/normalize-package-data/lib/fixer.js
+var require_fixer = __commonJS({
+  "node_modules/.pnpm/normalize-package-data@8.0.0/node_modules/normalize-package-data/lib/fixer.js"(exports2, module2) {
+    var { URL: URL2 } = require("node:url");
+    var isValidSemver = require_valid();
+    var cleanSemver = require_clean();
+    var validateLicense = require_validate_npm_package_license();
+    var hostedGitInfo = require_lib3();
+    var { isBuiltin } = require("node:module");
+    var depTypes = ["dependencies", "devDependencies", "optionalDependencies"];
+    var extractDescription = require_extract_description();
+    var typos = require_typos();
+    var isEmail = /* @__PURE__ */ __name((str) => str.includes("@") && str.indexOf("@") < str.lastIndexOf("."), "isEmail");
+    module2.exports = {
+      // default warning function
+      warn: /* @__PURE__ */ __name(function() {
+      }, "warn"),
+      fixRepositoryField: /* @__PURE__ */ __name(function(data) {
+        if (data.repositories) {
+          this.warn("repositories");
+          data.repository = data.repositories[0];
+        }
+        if (!data.repository) {
+          return this.warn("missingRepository");
+        }
+        if (typeof data.repository === "string") {
+          data.repository = {
+            type: "git",
+            url: data.repository
+          };
+        }
+        var r = data.repository.url || "";
+        if (r) {
+          var hosted = hostedGitInfo.fromUrl(r);
+          if (hosted) {
+            r = data.repository.url = hosted.getDefaultRepresentation() === "shortcut" ? hosted.https() : hosted.toString();
+          }
+        }
+        if (r.match(/github.com\/[^/]+\/[^/]+\.git\.git$/)) {
+          this.warn("brokenGitUrl", r);
+        }
+      }, "fixRepositoryField"),
+      fixTypos: /* @__PURE__ */ __name(function(data) {
+        Object.keys(typos.topLevel).forEach(function(d) {
+          if (Object.prototype.hasOwnProperty.call(data, d)) {
+            this.warn("typo", d, typos.topLevel[d]);
+          }
+        }, this);
+      }, "fixTypos"),
+      fixScriptsField: /* @__PURE__ */ __name(function(data) {
+        if (!data.scripts) {
+          return;
+        }
+        if (typeof data.scripts !== "object") {
+          this.warn("nonObjectScripts");
+          delete data.scripts;
+          return;
+        }
+        Object.keys(data.scripts).forEach(function(k) {
+          if (typeof data.scripts[k] !== "string") {
+            this.warn("nonStringScript");
+            delete data.scripts[k];
+          } else if (typos.script[k] && !data.scripts[typos.script[k]]) {
+            this.warn("typo", k, typos.script[k], "scripts");
+          }
+        }, this);
+      }, "fixScriptsField"),
+      fixFilesField: /* @__PURE__ */ __name(function(data) {
+        var files = data.files;
+        if (files && !Array.isArray(files)) {
+          this.warn("nonArrayFiles");
+          delete data.files;
+        } else if (data.files) {
+          data.files = data.files.filter(function(file) {
+            if (!file || typeof file !== "string") {
+              this.warn("invalidFilename", file);
+              return false;
+            } else {
+              return true;
+            }
+          }, this);
+        }
+      }, "fixFilesField"),
+      fixBinField: /* @__PURE__ */ __name(function(data) {
+        if (!data.bin) {
+          return;
+        }
+        if (typeof data.bin === "string") {
+          var b = {};
+          var match;
+          if (match = data.name.match(/^@[^/]+[/](.*)$/)) {
+            b[match[1]] = data.bin;
+          } else {
+            b[data.name] = data.bin;
+          }
+          data.bin = b;
+        }
+      }, "fixBinField"),
+      fixManField: /* @__PURE__ */ __name(function(data) {
+        if (!data.man) {
+          return;
+        }
+        if (typeof data.man === "string") {
+          data.man = [data.man];
+        }
+      }, "fixManField"),
+      fixBundleDependenciesField: /* @__PURE__ */ __name(function(data) {
+        var bdd = "bundledDependencies";
+        var bd = "bundleDependencies";
+        if (data[bdd] && !data[bd]) {
+          data[bd] = data[bdd];
+          delete data[bdd];
+        }
+        if (data[bd] && !Array.isArray(data[bd])) {
+          this.warn("nonArrayBundleDependencies");
+          delete data[bd];
+        } else if (data[bd]) {
+          data[bd] = data[bd].filter(function(filtered) {
+            if (!filtered || typeof filtered !== "string") {
+              this.warn("nonStringBundleDependency", filtered);
+              return false;
+            } else {
+              if (!data.dependencies) {
+                data.dependencies = {};
+              }
+              if (!Object.prototype.hasOwnProperty.call(data.dependencies, filtered)) {
+                this.warn("nonDependencyBundleDependency", filtered);
+                data.dependencies[filtered] = "*";
+              }
+              return true;
+            }
+          }, this);
+        }
+      }, "fixBundleDependenciesField"),
+      fixDependencies: /* @__PURE__ */ __name(function(data) {
+        objectifyDeps(data, this.warn);
+        addOptionalDepsToDeps(data, this.warn);
+        this.fixBundleDependenciesField(data);
+        ["dependencies", "devDependencies"].forEach(function(deps) {
+          if (!(deps in data)) {
+            return;
+          }
+          if (!data[deps] || typeof data[deps] !== "object") {
+            this.warn("nonObjectDependencies", deps);
+            delete data[deps];
+            return;
+          }
+          Object.keys(data[deps]).forEach(function(d) {
+            var r = data[deps][d];
+            if (typeof r !== "string") {
+              this.warn("nonStringDependency", d, JSON.stringify(r));
+              delete data[deps][d];
+            }
+            var hosted = hostedGitInfo.fromUrl(data[deps][d]);
+            if (hosted) {
+              data[deps][d] = hosted.toString();
+            }
+          }, this);
+        }, this);
+      }, "fixDependencies"),
+      fixModulesField: /* @__PURE__ */ __name(function(data) {
+        if (data.modules) {
+          this.warn("deprecatedModules");
+          delete data.modules;
+        }
+      }, "fixModulesField"),
+      fixKeywordsField: /* @__PURE__ */ __name(function(data) {
+        if (typeof data.keywords === "string") {
+          data.keywords = data.keywords.split(/,\s+/);
+        }
+        if (data.keywords && !Array.isArray(data.keywords)) {
+          delete data.keywords;
+          this.warn("nonArrayKeywords");
+        } else if (data.keywords) {
+          data.keywords = data.keywords.filter(function(kw) {
+            if (typeof kw !== "string" || !kw) {
+              this.warn("nonStringKeyword");
+              return false;
+            } else {
+              return true;
+            }
+          }, this);
+        }
+      }, "fixKeywordsField"),
+      fixVersionField: /* @__PURE__ */ __name(function(data, strict) {
+        var loose = !strict;
+        if (!data.version) {
+          data.version = "";
+          return true;
+        }
+        if (!isValidSemver(data.version, loose)) {
+          throw new Error('Invalid version: "' + data.version + '"');
+        }
+        data.version = cleanSemver(data.version, loose);
+        return true;
+      }, "fixVersionField"),
+      fixPeople: /* @__PURE__ */ __name(function(data) {
+        modifyPeople(data, unParsePerson);
+        modifyPeople(data, parsePerson);
+      }, "fixPeople"),
+      fixNameField: /* @__PURE__ */ __name(function(data, options) {
+        if (typeof options === "boolean") {
+          options = { strict: options };
+        } else if (typeof options === "undefined") {
+          options = {};
+        }
+        var strict = options.strict;
+        if (!data.name && !strict) {
+          data.name = "";
+          return;
+        }
+        if (typeof data.name !== "string") {
+          throw new Error("name field must be a string.");
+        }
+        if (!strict) {
+          data.name = data.name.trim();
+        }
+        ensureValidName(data.name, strict, options.allowLegacyCase);
+        if (isBuiltin(data.name)) {
+          this.warn("conflictingName", data.name);
+        }
+      }, "fixNameField"),
+      fixDescriptionField: /* @__PURE__ */ __name(function(data) {
+        if (data.description && typeof data.description !== "string") {
+          this.warn("nonStringDescription");
+          delete data.description;
+        }
+        if (data.readme && !data.description) {
+          data.description = extractDescription(data.readme);
+        }
+        if (data.description === void 0) {
+          delete data.description;
+        }
+        if (!data.description) {
+          this.warn("missingDescription");
+        }
+      }, "fixDescriptionField"),
+      fixReadmeField: /* @__PURE__ */ __name(function(data) {
+        if (!data.readme) {
+          this.warn("missingReadme");
+          data.readme = "ERROR: No README data found!";
+        }
+      }, "fixReadmeField"),
+      fixBugsField: /* @__PURE__ */ __name(function(data) {
+        if (!data.bugs && data.repository && data.repository.url) {
+          var hosted = hostedGitInfo.fromUrl(data.repository.url);
+          if (hosted && hosted.bugs()) {
+            data.bugs = { url: hosted.bugs() };
+          }
+        } else if (data.bugs) {
+          if (typeof data.bugs === "string") {
+            if (isEmail(data.bugs)) {
+              data.bugs = { email: data.bugs };
+            } else if (URL2.canParse(data.bugs)) {
+              data.bugs = { url: data.bugs };
+            } else {
+              this.warn("nonEmailUrlBugsString");
+            }
+          } else {
+            bugsTypos(data.bugs, this.warn);
+            var oldBugs = data.bugs;
+            data.bugs = {};
+            if (oldBugs.url) {
+              if (URL2.canParse(oldBugs.url)) {
+                data.bugs.url = oldBugs.url;
+              } else {
+                this.warn("nonUrlBugsUrlField");
+              }
+            }
+            if (oldBugs.email) {
+              if (typeof oldBugs.email === "string" && isEmail(oldBugs.email)) {
+                data.bugs.email = oldBugs.email;
+              } else {
+                this.warn("nonEmailBugsEmailField");
+              }
+            }
+          }
+          if (!data.bugs.email && !data.bugs.url) {
+            delete data.bugs;
+            this.warn("emptyNormalizedBugs");
+          }
+        }
+      }, "fixBugsField"),
+      fixHomepageField: /* @__PURE__ */ __name(function(data) {
+        if (!data.homepage && data.repository && data.repository.url) {
+          var hosted = hostedGitInfo.fromUrl(data.repository.url);
+          if (hosted && hosted.docs()) {
+            data.homepage = hosted.docs();
+          }
+        }
+        if (!data.homepage) {
+          return;
+        }
+        if (typeof data.homepage !== "string") {
+          this.warn("nonUrlHomepage");
+          return delete data.homepage;
+        }
+        if (!URL2.canParse(data.homepage)) {
+          data.homepage = "http://" + data.homepage;
+        }
+      }, "fixHomepageField"),
+      fixLicenseField: /* @__PURE__ */ __name(function(data) {
+        const license = data.license || data.licence;
+        if (!license) {
+          return this.warn("missingLicense");
+        }
+        if (typeof license !== "string" || license.length < 1 || license.trim() === "") {
+          return this.warn("invalidLicense");
+        }
+        if (!validateLicense(license).validForNewPackages) {
+          return this.warn("invalidLicense");
+        }
+      }, "fixLicenseField")
+    };
+    function isValidScopedPackageName(spec) {
+      if (spec.charAt(0) !== "@") {
+        return false;
+      }
+      var rest = spec.slice(1).split("/");
+      if (rest.length !== 2) {
+        return false;
+      }
+      return rest[0] && rest[1] && rest[0] === encodeURIComponent(rest[0]) && rest[1] === encodeURIComponent(rest[1]);
+    }
+    __name(isValidScopedPackageName, "isValidScopedPackageName");
+    function isCorrectlyEncodedName(spec) {
+      return !spec.match(/[/@\s+%:]/) && spec === encodeURIComponent(spec);
+    }
+    __name(isCorrectlyEncodedName, "isCorrectlyEncodedName");
+    function ensureValidName(name, strict, allowLegacyCase) {
+      if (name.charAt(0) === "." || !(isValidScopedPackageName(name) || isCorrectlyEncodedName(name)) || strict && !allowLegacyCase && name !== name.toLowerCase() || name.toLowerCase() === "node_modules" || name.toLowerCase() === "favicon.ico") {
+        throw new Error("Invalid name: " + JSON.stringify(name));
+      }
+    }
+    __name(ensureValidName, "ensureValidName");
+    function modifyPeople(data, fn) {
+      if (data.author) {
+        data.author = fn(data.author);
+      }
+      ["maintainers", "contributors"].forEach(function(set) {
+        if (!Array.isArray(data[set])) {
+          return;
+        }
+        data[set] = data[set].map(fn);
+      });
+      return data;
+    }
+    __name(modifyPeople, "modifyPeople");
+    function unParsePerson(person) {
+      if (typeof person === "string") {
+        return person;
+      }
+      var name = person.name || "";
+      var u = person.url || person.web;
+      var wrappedUrl = u ? " (" + u + ")" : "";
+      var e = person.email || person.mail;
+      var wrappedEmail = e ? " <" + e + ">" : "";
+      return name + wrappedEmail + wrappedUrl;
+    }
+    __name(unParsePerson, "unParsePerson");
+    function parsePerson(person) {
+      if (typeof person !== "string") {
+        return person;
+      }
+      var matchedName = person.match(/^([^(<]+)/);
+      var matchedUrl = person.match(/\(([^()]+)\)/);
+      var matchedEmail = person.match(/<([^<>]+)>/);
+      var obj = {};
+      if (matchedName && matchedName[0].trim()) {
+        obj.name = matchedName[0].trim();
+      }
+      if (matchedEmail) {
+        obj.email = matchedEmail[1];
+      }
+      if (matchedUrl) {
+        obj.url = matchedUrl[1];
+      }
+      return obj;
+    }
+    __name(parsePerson, "parsePerson");
+    function addOptionalDepsToDeps(data) {
+      var o = data.optionalDependencies;
+      if (!o) {
+        return;
+      }
+      var d = data.dependencies || {};
+      Object.keys(o).forEach(function(k) {
+        d[k] = o[k];
+      });
+      data.dependencies = d;
+    }
+    __name(addOptionalDepsToDeps, "addOptionalDepsToDeps");
+    function depObjectify(deps, type, warn) {
+      if (!deps) {
+        return {};
+      }
+      if (typeof deps === "string") {
+        deps = deps.trim().split(/[\n\r\s\t ,]+/);
+      }
+      if (!Array.isArray(deps)) {
+        return deps;
+      }
+      warn("deprecatedArrayDependencies", type);
+      var o = {};
+      deps.filter(function(d) {
+        return typeof d === "string";
+      }).forEach(function(d) {
+        d = d.trim().split(/(:?[@\s><=])/);
+        var dn = d.shift();
+        var dv = d.join("");
+        dv = dv.trim();
+        dv = dv.replace(/^@/, "");
+        o[dn] = dv;
+      });
+      return o;
+    }
+    __name(depObjectify, "depObjectify");
+    function objectifyDeps(data, warn) {
+      depTypes.forEach(function(type) {
+        if (!data[type]) {
+          return;
+        }
+        data[type] = depObjectify(data[type], type, warn);
+      });
+    }
+    __name(objectifyDeps, "objectifyDeps");
+    function bugsTypos(bugs, warn) {
+      if (!bugs) {
+        return;
+      }
+      Object.keys(bugs).forEach(function(k) {
+        if (typos.bugs[k]) {
+          warn("typo", k, typos.bugs[k], "bugs");
+          bugs[typos.bugs[k]] = bugs[k];
+          delete bugs[k];
+        }
+      });
+    }
+    __name(bugsTypos, "bugsTypos");
+  }
+});
+
+// node_modules/.pnpm/normalize-package-data@8.0.0/node_modules/normalize-package-data/lib/warning_messages.json
+var require_warning_messages = __commonJS({
+  "node_modules/.pnpm/normalize-package-data@8.0.0/node_modules/normalize-package-data/lib/warning_messages.json"(exports2, module2) {
+    module2.exports = {
+      repositories: "'repositories' (plural) Not supported. Please pick one as the 'repository' field",
+      missingRepository: "No repository field.",
+      brokenGitUrl: "Probably broken git url: %s",
+      nonObjectScripts: "scripts must be an object",
+      nonStringScript: "script values must be string commands",
+      nonArrayFiles: "Invalid 'files' member",
+      invalidFilename: "Invalid filename in 'files' list: %s",
+      nonArrayBundleDependencies: "Invalid 'bundleDependencies' list. Must be array of package names",
+      nonStringBundleDependency: "Invalid bundleDependencies member: %s",
+      nonDependencyBundleDependency: "Non-dependency in bundleDependencies: %s",
+      nonObjectDependencies: "%s field must be an object",
+      nonStringDependency: "Invalid dependency: %s %s",
+      deprecatedArrayDependencies: "specifying %s as array is deprecated",
+      deprecatedModules: "modules field is deprecated",
+      nonArrayKeywords: "keywords should be an array of strings",
+      nonStringKeyword: "keywords should be an array of strings",
+      conflictingName: "%s is also the name of a node core module.",
+      nonStringDescription: "'description' field should be a string",
+      missingDescription: "No description",
+      missingReadme: "No README data",
+      missingLicense: "No license field.",
+      nonEmailUrlBugsString: "Bug string field must be url, email, or {email,url}",
+      nonUrlBugsUrlField: "bugs.url field must be a string url. Deleted.",
+      nonEmailBugsEmailField: "bugs.email field must be a string email. Deleted.",
+      emptyNormalizedBugs: "Normalized value of bugs field is an empty object. Deleted.",
+      nonUrlHomepage: "homepage field must be a string url. Deleted.",
+      invalidLicense: "license should be a valid SPDX license expression",
+      typo: "%s should probably be %s."
+    };
+  }
+});
+
+// node_modules/.pnpm/normalize-package-data@8.0.0/node_modules/normalize-package-data/lib/make_warning.js
+var require_make_warning = __commonJS({
+  "node_modules/.pnpm/normalize-package-data@8.0.0/node_modules/normalize-package-data/lib/make_warning.js"(exports2, module2) {
+    var util = require("util");
+    var messages = require_warning_messages();
+    module2.exports = function() {
+      var args = Array.prototype.slice.call(arguments, 0);
+      var warningName = args.shift();
+      if (warningName === "typo") {
+        return makeTypoWarning.apply(null, args);
+      } else {
+        var msgTemplate = messages[warningName] ? messages[warningName] : warningName + ": '%s'";
+        args.unshift(msgTemplate);
+        return util.format.apply(null, args);
+      }
+    };
+    function makeTypoWarning(providedName, probableName, field) {
+      if (field) {
+        providedName = field + "['" + providedName + "']";
+        probableName = field + "['" + probableName + "']";
+      }
+      return util.format(messages.typo, providedName, probableName);
+    }
+    __name(makeTypoWarning, "makeTypoWarning");
+  }
+});
+
+// node_modules/.pnpm/normalize-package-data@8.0.0/node_modules/normalize-package-data/lib/normalize.js
+var require_normalize2 = __commonJS({
+  "node_modules/.pnpm/normalize-package-data@8.0.0/node_modules/normalize-package-data/lib/normalize.js"(exports2, module2) {
+    module2.exports = normalize;
+    var fixer = require_fixer();
+    normalize.fixer = fixer;
+    var makeWarning = require_make_warning();
+    var fieldsToFix = [
+      "name",
+      "version",
+      "description",
+      "repository",
+      "modules",
+      "scripts",
+      "files",
+      "bin",
+      "man",
+      "bugs",
+      "keywords",
+      "readme",
+      "homepage",
+      "license"
+    ];
+    var otherThingsToFix = ["dependencies", "people", "typos"];
+    var thingsToFix = fieldsToFix.map(function(fieldName) {
+      return ucFirst(fieldName) + "Field";
+    });
+    thingsToFix = thingsToFix.concat(otherThingsToFix);
+    function normalize(data, warn, strict) {
+      if (warn === true) {
+        warn = null;
+        strict = true;
+      }
+      if (!strict) {
+        strict = false;
+      }
+      if (!warn || data.private) {
+        warn = /* @__PURE__ */ __name(function() {
+        }, "warn");
+      }
+      if (data.scripts && data.scripts.install === "node-gyp rebuild" && !data.scripts.preinstall) {
+        data.gypfile = true;
+      }
+      fixer.warn = function() {
+        warn(makeWarning.apply(null, arguments));
+      };
+      thingsToFix.forEach(function(thingName) {
+        fixer["fix" + ucFirst(thingName)](data, strict);
+      });
+      data._id = data.name + "@" + data.version;
+    }
+    __name(normalize, "normalize");
+    function ucFirst(string) {
+      return string.charAt(0).toUpperCase() + string.slice(1);
+    }
+    __name(ucFirst, "ucFirst");
+  }
+});
+
+// src/external/npm-pack.js
+var { get: pacoteFetcherGet } = require_fetcher2();
+var libnpmpack = require_lib43();
+var cacacheGet = require_get();
+var cacachePut = require_put();
+var cacacheRm = require_rm2();
+var { lsStream } = require_entry_index();
+var cacacheTmp = require_tmp();
+var makeFetchHappen = require_lib27();
+var Arborist = require_arborist();
+var npmPackageArg = require_npa();
+var normalizePackageData = require_normalize2();
+var semver = require_semver2();
+var validateNpmPackageName = require_lib6();
+var pacote = {
+  extract: /* @__PURE__ */ __name((spec, dest, opts) => pacoteFetcherGet(spec, opts).extract(dest), "extract")
+};
+var cacache = {
+  get: cacacheGet,
+  put: cacachePut,
+  rm: {
+    entry: cacacheRm.entry,
+    all: cacacheRm.all
+  },
+  ls: {
+    stream: lsStream
+  },
+  tmp: {
+    withTmp: cacacheTmp.withTmp
+  }
+};
+module.exports = {
+  Arborist,
+  cacache,
+  libnpmpack,
+  makeFetchHappen: { defaults: makeFetchHappen.defaults },
+  normalizePackageData,
+  npmPackageArg,
+  pacote,
+  semver,
+  validateNpmPackageName
+};
+/*! Bundled license information:
+
+imurmurhash/imurmurhash.js:
+  (**
+   * @preserve
+   * JS Implementation of incremental MurmurHash3 (r150) (as of May 10, 2013)
+   *
+   * @author Jens Taylor
+   * @see http://github.com/homebrewing/brauhaus-diff
+   * @author Gary Court
+   * @see http://github.com/garycourt/murmurhash-js
+   * @author Austin Appleby
+   * @see http://sites.google.com/site/murmurhash/
+   *)
+
+negotiator/index.js:
+  (*!
+   * negotiator
+   * Copyright(c) 2012 Federico Romero
+   * Copyright(c) 2012-2014 Isaac Z. Schlueter
+   * Copyright(c) 2015 Douglas Christopher Wilson
+   * MIT Licensed
+   *)
+
+make-fetch-happen/lib/fetch.js:
+  (**
+   * @license
+   * Copyright (c) 2010-2012 Mikeal Rogers
+   * Licensed under the Apache License, Version 2.0 (the "License");
+   * you may not use this file except in compliance with the License.
+   * You may obtain a copy of the License at
+   * http://www.apache.org/licenses/LICENSE-2.0
+   * Unless required by applicable law or agreed to in writing,
+   * software distributed under the License is distributed on an "AS
+   * IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+   * express or implied. See the License for the specific language
+   * governing permissions and limitations under the License.
+   *)
+
+cssesc/cssesc.js:
+  (*! https://mths.be/cssesc v3.0.0 by @mathias *)
+*/
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/npm-package-arg.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/npm-package-arg.js
new file mode 100644
index 00000000..402bb921
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/npm-package-arg.js
@@ -0,0 +1,5 @@
+'use strict'
+
+// Re-export from npm-pack bundle for better deduplication.
+const { npmPackageArg } = require('./npm-pack')
+module.exports = npmPackageArg
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/p-map.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/p-map.js
new file mode 100644
index 00000000..55cdfa36
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/p-map.js
@@ -0,0 +1,240 @@
+"use strict";
+/**
+ * Bundled from p-map
+ * This is a zero-dependency bundle created by esbuild.
+ */
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+var __esm = (fn, res) => function __init() {
+  return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
+};
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// node_modules/.pnpm/p-map@7.0.4/node_modules/p-map/index.js
+var p_map_exports = {};
+__export(p_map_exports, {
+  default: () => pMap,
+  pMapIterable: () => pMapIterable,
+  pMapSkip: () => pMapSkip
+});
+async function pMap(iterable, mapper, {
+  concurrency = Number.POSITIVE_INFINITY,
+  stopOnError = true,
+  signal
+} = {}) {
+  return new Promise((resolve_, reject_) => {
+    if (iterable[Symbol.iterator] === void 0 && iterable[Symbol.asyncIterator] === void 0) {
+      throw new TypeError(`Expected \`input\` to be either an \`Iterable\` or \`AsyncIterable\`, got (${typeof iterable})`);
+    }
+    if (typeof mapper !== "function") {
+      throw new TypeError("Mapper function is required");
+    }
+    if (!(Number.isSafeInteger(concurrency) && concurrency >= 1 || concurrency === Number.POSITIVE_INFINITY)) {
+      throw new TypeError(`Expected \`concurrency\` to be an integer from 1 and up or \`Infinity\`, got \`${concurrency}\` (${typeof concurrency})`);
+    }
+    const result = [];
+    const errors = [];
+    const skippedIndexesMap = /* @__PURE__ */ new Map();
+    let isRejected = false;
+    let isResolved = false;
+    let isIterableDone = false;
+    let resolvingCount = 0;
+    let currentIndex = 0;
+    const iterator = iterable[Symbol.iterator] === void 0 ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();
+    const signalListener = /* @__PURE__ */ __name(() => {
+      reject(signal.reason);
+    }, "signalListener");
+    const cleanup = /* @__PURE__ */ __name(() => {
+      signal?.removeEventListener("abort", signalListener);
+    }, "cleanup");
+    const resolve = /* @__PURE__ */ __name((value) => {
+      resolve_(value);
+      cleanup();
+    }, "resolve");
+    const reject = /* @__PURE__ */ __name((reason) => {
+      isRejected = true;
+      isResolved = true;
+      reject_(reason);
+      cleanup();
+    }, "reject");
+    if (signal) {
+      if (signal.aborted) {
+        reject(signal.reason);
+      }
+      signal.addEventListener("abort", signalListener, { once: true });
+    }
+    const next = /* @__PURE__ */ __name(async () => {
+      if (isResolved) {
+        return;
+      }
+      const nextItem = await iterator.next();
+      const index = currentIndex;
+      currentIndex++;
+      if (nextItem.done) {
+        isIterableDone = true;
+        if (resolvingCount === 0 && !isResolved) {
+          if (!stopOnError && errors.length > 0) {
+            reject(new AggregateError(errors));
+            return;
+          }
+          isResolved = true;
+          if (skippedIndexesMap.size === 0) {
+            resolve(result);
+            return;
+          }
+          const pureResult = [];
+          for (const [index2, value] of result.entries()) {
+            if (skippedIndexesMap.get(index2) === pMapSkip) {
+              continue;
+            }
+            pureResult.push(value);
+          }
+          resolve(pureResult);
+        }
+        return;
+      }
+      resolvingCount++;
+      (async () => {
+        try {
+          const element = await nextItem.value;
+          if (isResolved) {
+            return;
+          }
+          const value = await mapper(element, index);
+          if (value === pMapSkip) {
+            skippedIndexesMap.set(index, value);
+          }
+          result[index] = value;
+          resolvingCount--;
+          await next();
+        } catch (error) {
+          if (stopOnError) {
+            reject(error);
+          } else {
+            errors.push(error);
+            resolvingCount--;
+            try {
+              await next();
+            } catch (error2) {
+              reject(error2);
+            }
+          }
+        }
+      })();
+    }, "next");
+    (async () => {
+      for (let index = 0; index < concurrency; index++) {
+        try {
+          await next();
+        } catch (error) {
+          reject(error);
+          break;
+        }
+        if (isIterableDone || isRejected) {
+          break;
+        }
+      }
+    })();
+  });
+}
+function pMapIterable(iterable, mapper, {
+  concurrency = Number.POSITIVE_INFINITY,
+  backpressure = concurrency
+} = {}) {
+  if (iterable[Symbol.iterator] === void 0 && iterable[Symbol.asyncIterator] === void 0) {
+    throw new TypeError(`Expected \`input\` to be either an \`Iterable\` or \`AsyncIterable\`, got (${typeof iterable})`);
+  }
+  if (typeof mapper !== "function") {
+    throw new TypeError("Mapper function is required");
+  }
+  if (!(Number.isSafeInteger(concurrency) && concurrency >= 1 || concurrency === Number.POSITIVE_INFINITY)) {
+    throw new TypeError(`Expected \`concurrency\` to be an integer from 1 and up or \`Infinity\`, got \`${concurrency}\` (${typeof concurrency})`);
+  }
+  if (!(Number.isSafeInteger(backpressure) && backpressure >= concurrency || backpressure === Number.POSITIVE_INFINITY)) {
+    throw new TypeError(`Expected \`backpressure\` to be an integer from \`concurrency\` (${concurrency}) and up or \`Infinity\`, got \`${backpressure}\` (${typeof backpressure})`);
+  }
+  return {
+    async *[Symbol.asyncIterator]() {
+      const iterator = iterable[Symbol.asyncIterator] === void 0 ? iterable[Symbol.iterator]() : iterable[Symbol.asyncIterator]();
+      const promises = [];
+      let pendingPromisesCount = 0;
+      let isDone = false;
+      let index = 0;
+      function trySpawn() {
+        if (isDone || !(pendingPromisesCount < concurrency && promises.length < backpressure)) {
+          return;
+        }
+        pendingPromisesCount++;
+        const promise = (async () => {
+          const { done, value } = await iterator.next();
+          if (done) {
+            pendingPromisesCount--;
+            return { done: true };
+          }
+          trySpawn();
+          try {
+            const returnValue = await mapper(await value, index++);
+            pendingPromisesCount--;
+            if (returnValue === pMapSkip) {
+              const index2 = promises.indexOf(promise);
+              if (index2 > 0) {
+                promises.splice(index2, 1);
+              }
+            }
+            trySpawn();
+            return { done: false, value: returnValue };
+          } catch (error) {
+            pendingPromisesCount--;
+            isDone = true;
+            return { error };
+          }
+        })();
+        promises.push(promise);
+      }
+      __name(trySpawn, "trySpawn");
+      trySpawn();
+      while (promises.length > 0) {
+        const { error, done, value } = await promises[0];
+        promises.shift();
+        if (error) {
+          throw error;
+        }
+        if (done) {
+          return;
+        }
+        trySpawn();
+        if (value === pMapSkip) {
+          continue;
+        }
+        yield value;
+      }
+    }
+  };
+}
+var pMapSkip;
+var init_p_map = __esm({
+  "node_modules/.pnpm/p-map@7.0.4/node_modules/p-map/index.js"() {
+    __name(pMap, "pMap");
+    __name(pMapIterable, "pMapIterable");
+    pMapSkip = Symbol("skip");
+  }
+});
+
+// src/external/p-map.js
+module.exports = (init_p_map(), __toCommonJS(p_map_exports));
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/pacote.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/pacote.js
new file mode 100644
index 00000000..34e7fd61
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/pacote.js
@@ -0,0 +1,5 @@
+'use strict'
+
+// Re-export from npm-pack bundle for better deduplication
+const { pacote } = require('./npm-pack')
+module.exports = pacote
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/pico-pack.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/pico-pack.js
new file mode 100644
index 00000000..323f0a44
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/pico-pack.js
@@ -0,0 +1,7419 @@
+"use strict";
+/**
+ * Bundled from pico-pack
+ * This is a zero-dependency bundle created by esbuild.
+ */
+"use strict";
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+var __esm = (fn, res) => function __init() {
+  return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
+};
+var __commonJS = (cb, mod) => function __require() {
+  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/lib/constants.js
+var require_constants = __commonJS({
+  "node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/lib/constants.js"(exports2, module2) {
+    "use strict";
+    var WIN_SLASH = "\\\\/";
+    var WIN_NO_SLASH = `[^${WIN_SLASH}]`;
+    var DEFAULT_MAX_EXTGLOB_RECURSION = 0;
+    var DOT_LITERAL = "\\.";
+    var PLUS_LITERAL = "\\+";
+    var QMARK_LITERAL = "\\?";
+    var SLASH_LITERAL = "\\/";
+    var ONE_CHAR = "(?=.)";
+    var QMARK = "[^/]";
+    var END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;
+    var START_ANCHOR = `(?:^|${SLASH_LITERAL})`;
+    var DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;
+    var NO_DOT = `(?!${DOT_LITERAL})`;
+    var NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;
+    var NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;
+    var NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;
+    var QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;
+    var STAR = `${QMARK}*?`;
+    var SEP = "/";
+    var POSIX_CHARS = {
+      DOT_LITERAL,
+      PLUS_LITERAL,
+      QMARK_LITERAL,
+      SLASH_LITERAL,
+      ONE_CHAR,
+      QMARK,
+      END_ANCHOR,
+      DOTS_SLASH,
+      NO_DOT,
+      NO_DOTS,
+      NO_DOT_SLASH,
+      NO_DOTS_SLASH,
+      QMARK_NO_DOT,
+      STAR,
+      START_ANCHOR,
+      SEP
+    };
+    var WINDOWS_CHARS = {
+      ...POSIX_CHARS,
+      SLASH_LITERAL: `[${WIN_SLASH}]`,
+      QMARK: WIN_NO_SLASH,
+      STAR: `${WIN_NO_SLASH}*?`,
+      DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,
+      NO_DOT: `(?!${DOT_LITERAL})`,
+      NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
+      NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,
+      NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
+      QMARK_NO_DOT: `[^.${WIN_SLASH}]`,
+      START_ANCHOR: `(?:^|[${WIN_SLASH}])`,
+      END_ANCHOR: `(?:[${WIN_SLASH}]|$)`,
+      SEP: "\\"
+    };
+    var POSIX_REGEX_SOURCE = {
+      __proto__: null,
+      alnum: "a-zA-Z0-9",
+      alpha: "a-zA-Z",
+      ascii: "\\x00-\\x7F",
+      blank: " \\t",
+      cntrl: "\\x00-\\x1F\\x7F",
+      digit: "0-9",
+      graph: "\\x21-\\x7E",
+      lower: "a-z",
+      print: "\\x20-\\x7E ",
+      punct: "\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",
+      space: " \\t\\r\\n\\v\\f",
+      upper: "A-Z",
+      word: "A-Za-z0-9_",
+      xdigit: "A-Fa-f0-9"
+    };
+    module2.exports = {
+      DEFAULT_MAX_EXTGLOB_RECURSION,
+      MAX_LENGTH: 1024 * 64,
+      POSIX_REGEX_SOURCE,
+      // regular expressions
+      REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g,
+      REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/,
+      REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/,
+      REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g,
+      REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g,
+      REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g,
+      // Replace globs with equivalent patterns to reduce parsing time.
+      REPLACEMENTS: {
+        __proto__: null,
+        "***": "*",
+        "**/**": "**",
+        "**/**/**": "**"
+      },
+      // Digits
+      CHAR_0: 48,
+      /* 0 */
+      CHAR_9: 57,
+      /* 9 */
+      // Alphabet chars.
+      CHAR_UPPERCASE_A: 65,
+      /* A */
+      CHAR_LOWERCASE_A: 97,
+      /* a */
+      CHAR_UPPERCASE_Z: 90,
+      /* Z */
+      CHAR_LOWERCASE_Z: 122,
+      /* z */
+      CHAR_LEFT_PARENTHESES: 40,
+      /* ( */
+      CHAR_RIGHT_PARENTHESES: 41,
+      /* ) */
+      CHAR_ASTERISK: 42,
+      /* * */
+      // Non-alphabetic chars.
+      CHAR_AMPERSAND: 38,
+      /* & */
+      CHAR_AT: 64,
+      /* @ */
+      CHAR_BACKWARD_SLASH: 92,
+      /* \ */
+      CHAR_CARRIAGE_RETURN: 13,
+      /* \r */
+      CHAR_CIRCUMFLEX_ACCENT: 94,
+      /* ^ */
+      CHAR_COLON: 58,
+      /* : */
+      CHAR_COMMA: 44,
+      /* , */
+      CHAR_DOT: 46,
+      /* . */
+      CHAR_DOUBLE_QUOTE: 34,
+      /* " */
+      CHAR_EQUAL: 61,
+      /* = */
+      CHAR_EXCLAMATION_MARK: 33,
+      /* ! */
+      CHAR_FORM_FEED: 12,
+      /* \f */
+      CHAR_FORWARD_SLASH: 47,
+      /* / */
+      CHAR_GRAVE_ACCENT: 96,
+      /* ` */
+      CHAR_HASH: 35,
+      /* # */
+      CHAR_HYPHEN_MINUS: 45,
+      /* - */
+      CHAR_LEFT_ANGLE_BRACKET: 60,
+      /* < */
+      CHAR_LEFT_CURLY_BRACE: 123,
+      /* { */
+      CHAR_LEFT_SQUARE_BRACKET: 91,
+      /* [ */
+      CHAR_LINE_FEED: 10,
+      /* \n */
+      CHAR_NO_BREAK_SPACE: 160,
+      /* \u00A0 */
+      CHAR_PERCENT: 37,
+      /* % */
+      CHAR_PLUS: 43,
+      /* + */
+      CHAR_QUESTION_MARK: 63,
+      /* ? */
+      CHAR_RIGHT_ANGLE_BRACKET: 62,
+      /* > */
+      CHAR_RIGHT_CURLY_BRACE: 125,
+      /* } */
+      CHAR_RIGHT_SQUARE_BRACKET: 93,
+      /* ] */
+      CHAR_SEMICOLON: 59,
+      /* ; */
+      CHAR_SINGLE_QUOTE: 39,
+      /* ' */
+      CHAR_SPACE: 32,
+      /*   */
+      CHAR_TAB: 9,
+      /* \t */
+      CHAR_UNDERSCORE: 95,
+      /* _ */
+      CHAR_VERTICAL_LINE: 124,
+      /* | */
+      CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279,
+      /* \uFEFF */
+      /**
+       * Create EXTGLOB_CHARS
+       */
+      extglobChars(chars) {
+        return {
+          "!": { type: "negate", open: "(?:(?!(?:", close: `))${chars.STAR})` },
+          "?": { type: "qmark", open: "(?:", close: ")?" },
+          "+": { type: "plus", open: "(?:", close: ")+" },
+          "*": { type: "star", open: "(?:", close: ")*" },
+          "@": { type: "at", open: "(?:", close: ")" }
+        };
+      },
+      /**
+       * Create GLOB_CHARS
+       */
+      globChars(win32) {
+        return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/lib/utils.js
+var require_utils = __commonJS({
+  "node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/lib/utils.js"(exports2) {
+    "use strict";
+    var {
+      REGEX_BACKSLASH,
+      REGEX_REMOVE_BACKSLASH,
+      REGEX_SPECIAL_CHARS,
+      REGEX_SPECIAL_CHARS_GLOBAL
+    } = require_constants();
+    exports2.isObject = (val) => val !== null && typeof val === "object" && !Array.isArray(val);
+    exports2.hasRegexChars = (str) => REGEX_SPECIAL_CHARS.test(str);
+    exports2.isRegexChar = (str) => str.length === 1 && exports2.hasRegexChars(str);
+    exports2.escapeRegex = (str) => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, "\\$1");
+    exports2.toPosixSlashes = (str) => str.replace(REGEX_BACKSLASH, "/");
+    exports2.isWindows = () => {
+      if (false) {
+        const platform = (void 0).platform.toLowerCase();
+        return platform === "win32" || platform === "windows";
+      }
+      if (typeof process !== "undefined" && process.platform) {
+        return process.platform === "win32";
+      }
+      return false;
+    };
+    exports2.removeBackslashes = (str) => {
+      return str.replace(REGEX_REMOVE_BACKSLASH, (match) => {
+        return match === "\\" ? "" : match;
+      });
+    };
+    exports2.escapeLast = (input, char, lastIdx) => {
+      const idx = input.lastIndexOf(char, lastIdx);
+      if (idx === -1) return input;
+      if (input[idx - 1] === "\\") return exports2.escapeLast(input, char, idx - 1);
+      return `${input.slice(0, idx)}\\${input.slice(idx)}`;
+    };
+    exports2.removePrefix = (input, state = {}) => {
+      let output = input;
+      if (output.startsWith("./")) {
+        output = output.slice(2);
+        state.prefix = "./";
+      }
+      return output;
+    };
+    exports2.wrapOutput = (input, state = {}, options = {}) => {
+      const prepend = options.contains ? "" : "^";
+      const append = options.contains ? "" : "$";
+      let output = `${prepend}(?:${input})${append}`;
+      if (state.negated === true) {
+        output = `(?:^(?!${output}).*$)`;
+      }
+      return output;
+    };
+    exports2.basename = (path6, { windows } = {}) => {
+      const segs = path6.split(windows ? /[\\/]/ : "/");
+      const last = segs[segs.length - 1];
+      if (last === "") {
+        return segs[segs.length - 2];
+      }
+      return last;
+    };
+  }
+});
+
+// node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/lib/scan.js
+var require_scan = __commonJS({
+  "node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/lib/scan.js"(exports2, module2) {
+    "use strict";
+    var utils = require_utils();
+    var {
+      CHAR_ASTERISK,
+      /* * */
+      CHAR_AT,
+      /* @ */
+      CHAR_BACKWARD_SLASH,
+      /* \ */
+      CHAR_COMMA,
+      /* , */
+      CHAR_DOT,
+      /* . */
+      CHAR_EXCLAMATION_MARK,
+      /* ! */
+      CHAR_FORWARD_SLASH,
+      /* / */
+      CHAR_LEFT_CURLY_BRACE,
+      /* { */
+      CHAR_LEFT_PARENTHESES,
+      /* ( */
+      CHAR_LEFT_SQUARE_BRACKET,
+      /* [ */
+      CHAR_PLUS,
+      /* + */
+      CHAR_QUESTION_MARK,
+      /* ? */
+      CHAR_RIGHT_CURLY_BRACE,
+      /* } */
+      CHAR_RIGHT_PARENTHESES,
+      /* ) */
+      CHAR_RIGHT_SQUARE_BRACKET
+      /* ] */
+    } = require_constants();
+    var isPathSeparator = /* @__PURE__ */ __name((code) => {
+      return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
+    }, "isPathSeparator");
+    var depth = /* @__PURE__ */ __name((token) => {
+      if (token.isPrefix !== true) {
+        token.depth = token.isGlobstar ? Infinity : 1;
+      }
+    }, "depth");
+    var scan = /* @__PURE__ */ __name((input, options) => {
+      const opts = options || {};
+      const length = input.length - 1;
+      const scanToEnd = opts.parts === true || opts.scanToEnd === true;
+      const slashes = [];
+      const tokens = [];
+      const parts = [];
+      let str = input;
+      let index = -1;
+      let start = 0;
+      let lastIndex = 0;
+      let isBrace = false;
+      let isBracket = false;
+      let isGlob2 = false;
+      let isExtglob = false;
+      let isGlobstar = false;
+      let braceEscaped = false;
+      let backslashes = false;
+      let negated = false;
+      let negatedExtglob = false;
+      let finished2 = false;
+      let braces = 0;
+      let prev;
+      let code;
+      let token = { value: "", depth: 0, isGlob: false };
+      const eos = /* @__PURE__ */ __name(() => index >= length, "eos");
+      const peek = /* @__PURE__ */ __name(() => str.charCodeAt(index + 1), "peek");
+      const advance = /* @__PURE__ */ __name(() => {
+        prev = code;
+        return str.charCodeAt(++index);
+      }, "advance");
+      while (index < length) {
+        code = advance();
+        let next;
+        if (code === CHAR_BACKWARD_SLASH) {
+          backslashes = token.backslashes = true;
+          code = advance();
+          if (code === CHAR_LEFT_CURLY_BRACE) {
+            braceEscaped = true;
+          }
+          continue;
+        }
+        if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {
+          braces++;
+          while (eos() !== true && (code = advance())) {
+            if (code === CHAR_BACKWARD_SLASH) {
+              backslashes = token.backslashes = true;
+              advance();
+              continue;
+            }
+            if (code === CHAR_LEFT_CURLY_BRACE) {
+              braces++;
+              continue;
+            }
+            if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {
+              isBrace = token.isBrace = true;
+              isGlob2 = token.isGlob = true;
+              finished2 = true;
+              if (scanToEnd === true) {
+                continue;
+              }
+              break;
+            }
+            if (braceEscaped !== true && code === CHAR_COMMA) {
+              isBrace = token.isBrace = true;
+              isGlob2 = token.isGlob = true;
+              finished2 = true;
+              if (scanToEnd === true) {
+                continue;
+              }
+              break;
+            }
+            if (code === CHAR_RIGHT_CURLY_BRACE) {
+              braces--;
+              if (braces === 0) {
+                braceEscaped = false;
+                isBrace = token.isBrace = true;
+                finished2 = true;
+                break;
+              }
+            }
+          }
+          if (scanToEnd === true) {
+            continue;
+          }
+          break;
+        }
+        if (code === CHAR_FORWARD_SLASH) {
+          slashes.push(index);
+          tokens.push(token);
+          token = { value: "", depth: 0, isGlob: false };
+          if (finished2 === true) continue;
+          if (prev === CHAR_DOT && index === start + 1) {
+            start += 2;
+            continue;
+          }
+          lastIndex = index + 1;
+          continue;
+        }
+        if (opts.noext !== true) {
+          const isExtglobChar = code === CHAR_PLUS || code === CHAR_AT || code === CHAR_ASTERISK || code === CHAR_QUESTION_MARK || code === CHAR_EXCLAMATION_MARK;
+          if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {
+            isGlob2 = token.isGlob = true;
+            isExtglob = token.isExtglob = true;
+            finished2 = true;
+            if (code === CHAR_EXCLAMATION_MARK && index === start) {
+              negatedExtglob = true;
+            }
+            if (scanToEnd === true) {
+              while (eos() !== true && (code = advance())) {
+                if (code === CHAR_BACKWARD_SLASH) {
+                  backslashes = token.backslashes = true;
+                  code = advance();
+                  continue;
+                }
+                if (code === CHAR_RIGHT_PARENTHESES) {
+                  isGlob2 = token.isGlob = true;
+                  finished2 = true;
+                  break;
+                }
+              }
+              continue;
+            }
+            break;
+          }
+        }
+        if (code === CHAR_ASTERISK) {
+          if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;
+          isGlob2 = token.isGlob = true;
+          finished2 = true;
+          if (scanToEnd === true) {
+            continue;
+          }
+          break;
+        }
+        if (code === CHAR_QUESTION_MARK) {
+          isGlob2 = token.isGlob = true;
+          finished2 = true;
+          if (scanToEnd === true) {
+            continue;
+          }
+          break;
+        }
+        if (code === CHAR_LEFT_SQUARE_BRACKET) {
+          while (eos() !== true && (next = advance())) {
+            if (next === CHAR_BACKWARD_SLASH) {
+              backslashes = token.backslashes = true;
+              advance();
+              continue;
+            }
+            if (next === CHAR_RIGHT_SQUARE_BRACKET) {
+              isBracket = token.isBracket = true;
+              isGlob2 = token.isGlob = true;
+              finished2 = true;
+              break;
+            }
+          }
+          if (scanToEnd === true) {
+            continue;
+          }
+          break;
+        }
+        if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {
+          negated = token.negated = true;
+          start++;
+          continue;
+        }
+        if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {
+          isGlob2 = token.isGlob = true;
+          if (scanToEnd === true) {
+            while (eos() !== true && (code = advance())) {
+              if (code === CHAR_LEFT_PARENTHESES) {
+                backslashes = token.backslashes = true;
+                code = advance();
+                continue;
+              }
+              if (code === CHAR_RIGHT_PARENTHESES) {
+                finished2 = true;
+                break;
+              }
+            }
+            continue;
+          }
+          break;
+        }
+        if (isGlob2 === true) {
+          finished2 = true;
+          if (scanToEnd === true) {
+            continue;
+          }
+          break;
+        }
+      }
+      if (opts.noext === true) {
+        isExtglob = false;
+        isGlob2 = false;
+      }
+      let base = str;
+      let prefix = "";
+      let glob2 = "";
+      if (start > 0) {
+        prefix = str.slice(0, start);
+        str = str.slice(start);
+        lastIndex -= start;
+      }
+      if (base && isGlob2 === true && lastIndex > 0) {
+        base = str.slice(0, lastIndex);
+        glob2 = str.slice(lastIndex);
+      } else if (isGlob2 === true) {
+        base = "";
+        glob2 = str;
+      } else {
+        base = str;
+      }
+      if (base && base !== "" && base !== "/" && base !== str) {
+        if (isPathSeparator(base.charCodeAt(base.length - 1))) {
+          base = base.slice(0, -1);
+        }
+      }
+      if (opts.unescape === true) {
+        if (glob2) glob2 = utils.removeBackslashes(glob2);
+        if (base && backslashes === true) {
+          base = utils.removeBackslashes(base);
+        }
+      }
+      const state = {
+        prefix,
+        input,
+        start,
+        base,
+        glob: glob2,
+        isBrace,
+        isBracket,
+        isGlob: isGlob2,
+        isExtglob,
+        isGlobstar,
+        negated,
+        negatedExtglob
+      };
+      if (opts.tokens === true) {
+        state.maxDepth = 0;
+        if (!isPathSeparator(code)) {
+          tokens.push(token);
+        }
+        state.tokens = tokens;
+      }
+      if (opts.parts === true || opts.tokens === true) {
+        let prevIndex;
+        for (let idx = 0; idx < slashes.length; idx++) {
+          const n = prevIndex ? prevIndex + 1 : start;
+          const i = slashes[idx];
+          const value = input.slice(n, i);
+          if (opts.tokens) {
+            if (idx === 0 && start !== 0) {
+              tokens[idx].isPrefix = true;
+              tokens[idx].value = prefix;
+            } else {
+              tokens[idx].value = value;
+            }
+            depth(tokens[idx]);
+            state.maxDepth += tokens[idx].depth;
+          }
+          if (idx !== 0 || value !== "") {
+            parts.push(value);
+          }
+          prevIndex = i;
+        }
+        if (prevIndex && prevIndex + 1 < input.length) {
+          const value = input.slice(prevIndex + 1);
+          parts.push(value);
+          if (opts.tokens) {
+            tokens[tokens.length - 1].value = value;
+            depth(tokens[tokens.length - 1]);
+            state.maxDepth += tokens[tokens.length - 1].depth;
+          }
+        }
+        state.slashes = slashes;
+        state.parts = parts;
+      }
+      return state;
+    }, "scan");
+    module2.exports = scan;
+  }
+});
+
+// node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/lib/parse.js
+var require_parse = __commonJS({
+  "node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/lib/parse.js"(exports2, module2) {
+    "use strict";
+    var constants = require_constants();
+    var utils = require_utils();
+    var {
+      MAX_LENGTH,
+      POSIX_REGEX_SOURCE,
+      REGEX_NON_SPECIAL_CHARS,
+      REGEX_SPECIAL_CHARS_BACKREF,
+      REPLACEMENTS
+    } = constants;
+    var expandRange = /* @__PURE__ */ __name((args, options) => {
+      if (typeof options.expandRange === "function") {
+        return options.expandRange(...args, options);
+      }
+      args.sort();
+      const value = `[${args.join("-")}]`;
+      try {
+        new RegExp(value);
+      } catch (ex) {
+        return args.map((v) => utils.escapeRegex(v)).join("..");
+      }
+      return value;
+    }, "expandRange");
+    var syntaxError = /* @__PURE__ */ __name((type, char) => {
+      return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`;
+    }, "syntaxError");
+    var splitTopLevel = /* @__PURE__ */ __name((input) => {
+      const parts = [];
+      let bracket = 0;
+      let paren = 0;
+      let quote = 0;
+      let value = "";
+      let escaped = false;
+      for (const ch of input) {
+        if (escaped === true) {
+          value += ch;
+          escaped = false;
+          continue;
+        }
+        if (ch === "\\") {
+          value += ch;
+          escaped = true;
+          continue;
+        }
+        if (ch === '"') {
+          quote = quote === 1 ? 0 : 1;
+          value += ch;
+          continue;
+        }
+        if (quote === 0) {
+          if (ch === "[") {
+            bracket++;
+          } else if (ch === "]" && bracket > 0) {
+            bracket--;
+          } else if (bracket === 0) {
+            if (ch === "(") {
+              paren++;
+            } else if (ch === ")" && paren > 0) {
+              paren--;
+            } else if (ch === "|" && paren === 0) {
+              parts.push(value);
+              value = "";
+              continue;
+            }
+          }
+        }
+        value += ch;
+      }
+      parts.push(value);
+      return parts;
+    }, "splitTopLevel");
+    var isPlainBranch = /* @__PURE__ */ __name((branch) => {
+      let escaped = false;
+      for (const ch of branch) {
+        if (escaped === true) {
+          escaped = false;
+          continue;
+        }
+        if (ch === "\\") {
+          escaped = true;
+          continue;
+        }
+        if (/[?*+@!()[\]{}]/.test(ch)) {
+          return false;
+        }
+      }
+      return true;
+    }, "isPlainBranch");
+    var normalizeSimpleBranch = /* @__PURE__ */ __name((branch) => {
+      let value = branch.trim();
+      let changed = true;
+      while (changed === true) {
+        changed = false;
+        if (/^@\([^\\()[\]{}|]+\)$/.test(value)) {
+          value = value.slice(2, -1);
+          changed = true;
+        }
+      }
+      if (!isPlainBranch(value)) {
+        return;
+      }
+      return value.replace(/\\(.)/g, "$1");
+    }, "normalizeSimpleBranch");
+    var hasRepeatedCharPrefixOverlap = /* @__PURE__ */ __name((branches) => {
+      const values = branches.map(normalizeSimpleBranch).filter(Boolean);
+      for (let i = 0; i < values.length; i++) {
+        for (let j = i + 1; j < values.length; j++) {
+          const a = values[i];
+          const b = values[j];
+          const char = a[0];
+          if (!char || a !== char.repeat(a.length) || b !== char.repeat(b.length)) {
+            continue;
+          }
+          if (a === b || a.startsWith(b) || b.startsWith(a)) {
+            return true;
+          }
+        }
+      }
+      return false;
+    }, "hasRepeatedCharPrefixOverlap");
+    var parseRepeatedExtglob = /* @__PURE__ */ __name((pattern, requireEnd = true) => {
+      if (pattern[0] !== "+" && pattern[0] !== "*" || pattern[1] !== "(") {
+        return;
+      }
+      let bracket = 0;
+      let paren = 0;
+      let quote = 0;
+      let escaped = false;
+      for (let i = 1; i < pattern.length; i++) {
+        const ch = pattern[i];
+        if (escaped === true) {
+          escaped = false;
+          continue;
+        }
+        if (ch === "\\") {
+          escaped = true;
+          continue;
+        }
+        if (ch === '"') {
+          quote = quote === 1 ? 0 : 1;
+          continue;
+        }
+        if (quote === 1) {
+          continue;
+        }
+        if (ch === "[") {
+          bracket++;
+          continue;
+        }
+        if (ch === "]" && bracket > 0) {
+          bracket--;
+          continue;
+        }
+        if (bracket > 0) {
+          continue;
+        }
+        if (ch === "(") {
+          paren++;
+          continue;
+        }
+        if (ch === ")") {
+          paren--;
+          if (paren === 0) {
+            if (requireEnd === true && i !== pattern.length - 1) {
+              return;
+            }
+            return {
+              type: pattern[0],
+              body: pattern.slice(2, i),
+              end: i
+            };
+          }
+        }
+      }
+    }, "parseRepeatedExtglob");
+    var getStarExtglobSequenceOutput = /* @__PURE__ */ __name((pattern) => {
+      let index = 0;
+      const chars = [];
+      while (index < pattern.length) {
+        const match = parseRepeatedExtglob(pattern.slice(index), false);
+        if (!match || match.type !== "*") {
+          return;
+        }
+        const branches = splitTopLevel(match.body).map((branch2) => branch2.trim());
+        if (branches.length !== 1) {
+          return;
+        }
+        const branch = normalizeSimpleBranch(branches[0]);
+        if (!branch || branch.length !== 1) {
+          return;
+        }
+        chars.push(branch);
+        index += match.end + 1;
+      }
+      if (chars.length < 1) {
+        return;
+      }
+      const source = chars.length === 1 ? utils.escapeRegex(chars[0]) : `[${chars.map((ch) => utils.escapeRegex(ch)).join("")}]`;
+      return `${source}*`;
+    }, "getStarExtglobSequenceOutput");
+    var repeatedExtglobRecursion = /* @__PURE__ */ __name((pattern) => {
+      let depth = 0;
+      let value = pattern.trim();
+      let match = parseRepeatedExtglob(value);
+      while (match) {
+        depth++;
+        value = match.body.trim();
+        match = parseRepeatedExtglob(value);
+      }
+      return depth;
+    }, "repeatedExtglobRecursion");
+    var analyzeRepeatedExtglob = /* @__PURE__ */ __name((body, options) => {
+      if (options.maxExtglobRecursion === false) {
+        return { risky: false };
+      }
+      const max = typeof options.maxExtglobRecursion === "number" ? options.maxExtglobRecursion : constants.DEFAULT_MAX_EXTGLOB_RECURSION;
+      const branches = splitTopLevel(body).map((branch) => branch.trim());
+      if (branches.length > 1) {
+        if (branches.some((branch) => branch === "") || branches.some((branch) => /^[*?]+$/.test(branch)) || hasRepeatedCharPrefixOverlap(branches)) {
+          return { risky: true };
+        }
+      }
+      for (const branch of branches) {
+        const safeOutput = getStarExtglobSequenceOutput(branch);
+        if (safeOutput) {
+          return { risky: true, safeOutput };
+        }
+        if (repeatedExtglobRecursion(branch) > max) {
+          return { risky: true };
+        }
+      }
+      return { risky: false };
+    }, "analyzeRepeatedExtglob");
+    var parse = /* @__PURE__ */ __name((input, options) => {
+      if (typeof input !== "string") {
+        throw new TypeError("Expected a string");
+      }
+      input = REPLACEMENTS[input] || input;
+      const opts = { ...options };
+      const max = typeof opts.maxLength === "number" ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
+      let len = input.length;
+      if (len > max) {
+        throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
+      }
+      const bos = { type: "bos", value: "", output: opts.prepend || "" };
+      const tokens = [bos];
+      const capture = opts.capture ? "" : "?:";
+      const PLATFORM_CHARS = constants.globChars(opts.windows);
+      const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);
+      const {
+        DOT_LITERAL,
+        PLUS_LITERAL,
+        SLASH_LITERAL,
+        ONE_CHAR,
+        DOTS_SLASH,
+        NO_DOT,
+        NO_DOT_SLASH,
+        NO_DOTS_SLASH,
+        QMARK,
+        QMARK_NO_DOT,
+        STAR,
+        START_ANCHOR
+      } = PLATFORM_CHARS;
+      const globstar = /* @__PURE__ */ __name((opts2) => {
+        return `(${capture}(?:(?!${START_ANCHOR}${opts2.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
+      }, "globstar");
+      const nodot = opts.dot ? "" : NO_DOT;
+      const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;
+      let star = opts.bash === true ? globstar(opts) : STAR;
+      if (opts.capture) {
+        star = `(${star})`;
+      }
+      if (typeof opts.noext === "boolean") {
+        opts.noextglob = opts.noext;
+      }
+      const state = {
+        input,
+        index: -1,
+        start: 0,
+        dot: opts.dot === true,
+        consumed: "",
+        output: "",
+        prefix: "",
+        backtrack: false,
+        negated: false,
+        brackets: 0,
+        braces: 0,
+        parens: 0,
+        quotes: 0,
+        globstar: false,
+        tokens
+      };
+      input = utils.removePrefix(input, state);
+      len = input.length;
+      const extglobs = [];
+      const braces = [];
+      const stack = [];
+      let prev = bos;
+      let value;
+      const eos = /* @__PURE__ */ __name(() => state.index === len - 1, "eos");
+      const peek = state.peek = (n = 1) => input[state.index + n];
+      const advance = state.advance = () => input[++state.index] || "";
+      const remaining = /* @__PURE__ */ __name(() => input.slice(state.index + 1), "remaining");
+      const consume = /* @__PURE__ */ __name((value2 = "", num = 0) => {
+        state.consumed += value2;
+        state.index += num;
+      }, "consume");
+      const append = /* @__PURE__ */ __name((token) => {
+        state.output += token.output != null ? token.output : token.value;
+        consume(token.value);
+      }, "append");
+      const negate = /* @__PURE__ */ __name(() => {
+        let count = 1;
+        while (peek() === "!" && (peek(2) !== "(" || peek(3) === "?")) {
+          advance();
+          state.start++;
+          count++;
+        }
+        if (count % 2 === 0) {
+          return false;
+        }
+        state.negated = true;
+        state.start++;
+        return true;
+      }, "negate");
+      const increment = /* @__PURE__ */ __name((type) => {
+        state[type]++;
+        stack.push(type);
+      }, "increment");
+      const decrement = /* @__PURE__ */ __name((type) => {
+        state[type]--;
+        stack.pop();
+      }, "decrement");
+      const push = /* @__PURE__ */ __name((tok) => {
+        if (prev.type === "globstar") {
+          const isBrace = state.braces > 0 && (tok.type === "comma" || tok.type === "brace");
+          const isExtglob = tok.extglob === true || extglobs.length && (tok.type === "pipe" || tok.type === "paren");
+          if (tok.type !== "slash" && tok.type !== "paren" && !isBrace && !isExtglob) {
+            state.output = state.output.slice(0, -prev.output.length);
+            prev.type = "star";
+            prev.value = "*";
+            prev.output = star;
+            state.output += prev.output;
+          }
+        }
+        if (extglobs.length && tok.type !== "paren") {
+          extglobs[extglobs.length - 1].inner += tok.value;
+        }
+        if (tok.value || tok.output) append(tok);
+        if (prev && prev.type === "text" && tok.type === "text") {
+          prev.output = (prev.output || prev.value) + tok.value;
+          prev.value += tok.value;
+          return;
+        }
+        tok.prev = prev;
+        tokens.push(tok);
+        prev = tok;
+      }, "push");
+      const extglobOpen = /* @__PURE__ */ __name((type, value2) => {
+        const token = { ...EXTGLOB_CHARS[value2], conditions: 1, inner: "" };
+        token.prev = prev;
+        token.parens = state.parens;
+        token.output = state.output;
+        token.startIndex = state.index;
+        token.tokensIndex = tokens.length;
+        const output = (opts.capture ? "(" : "") + token.open;
+        increment("parens");
+        push({ type, value: value2, output: state.output ? "" : ONE_CHAR });
+        push({ type: "paren", extglob: true, value: advance(), output });
+        extglobs.push(token);
+      }, "extglobOpen");
+      const extglobClose = /* @__PURE__ */ __name((token) => {
+        const literal = input.slice(token.startIndex, state.index + 1);
+        const body = input.slice(token.startIndex + 2, state.index);
+        const analysis = analyzeRepeatedExtglob(body, opts);
+        if ((token.type === "plus" || token.type === "star") && analysis.risky) {
+          const safeOutput = analysis.safeOutput ? (token.output ? "" : ONE_CHAR) + (opts.capture ? `(${analysis.safeOutput})` : analysis.safeOutput) : void 0;
+          const open = tokens[token.tokensIndex];
+          open.type = "text";
+          open.value = literal;
+          open.output = safeOutput || utils.escapeRegex(literal);
+          for (let i = token.tokensIndex + 1; i < tokens.length; i++) {
+            tokens[i].value = "";
+            tokens[i].output = "";
+            delete tokens[i].suffix;
+          }
+          state.output = token.output + open.output;
+          state.backtrack = true;
+          push({ type: "paren", extglob: true, value, output: "" });
+          decrement("parens");
+          return;
+        }
+        let output = token.close + (opts.capture ? ")" : "");
+        let rest;
+        if (token.type === "negate") {
+          let extglobStar = star;
+          if (token.inner && token.inner.length > 1 && token.inner.includes("/")) {
+            extglobStar = globstar(opts);
+          }
+          if (extglobStar !== star || eos() || /^\)+$/.test(remaining())) {
+            output = token.close = `)$))${extglobStar}`;
+          }
+          if (token.inner.includes("*") && (rest = remaining()) && /^\.[^\\/.]+$/.test(rest)) {
+            const expression = parse(rest, { ...options, fastpaths: false }).output;
+            output = token.close = `)${expression})${extglobStar})`;
+          }
+          if (token.prev.type === "bos") {
+            state.negatedExtglob = true;
+          }
+        }
+        push({ type: "paren", extglob: true, value, output });
+        decrement("parens");
+      }, "extglobClose");
+      if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) {
+        let backslashes = false;
+        let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {
+          if (first === "\\") {
+            backslashes = true;
+            return m;
+          }
+          if (first === "?") {
+            if (esc) {
+              return esc + first + (rest ? QMARK.repeat(rest.length) : "");
+            }
+            if (index === 0) {
+              return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : "");
+            }
+            return QMARK.repeat(chars.length);
+          }
+          if (first === ".") {
+            return DOT_LITERAL.repeat(chars.length);
+          }
+          if (first === "*") {
+            if (esc) {
+              return esc + first + (rest ? star : "");
+            }
+            return star;
+          }
+          return esc ? m : `\\${m}`;
+        });
+        if (backslashes === true) {
+          if (opts.unescape === true) {
+            output = output.replace(/\\/g, "");
+          } else {
+            output = output.replace(/\\+/g, (m) => {
+              return m.length % 2 === 0 ? "\\\\" : m ? "\\" : "";
+            });
+          }
+        }
+        if (output === input && opts.contains === true) {
+          state.output = input;
+          return state;
+        }
+        state.output = utils.wrapOutput(output, state, options);
+        return state;
+      }
+      while (!eos()) {
+        value = advance();
+        if (value === "\0") {
+          continue;
+        }
+        if (value === "\\") {
+          const next = peek();
+          if (next === "/" && opts.bash !== true) {
+            continue;
+          }
+          if (next === "." || next === ";") {
+            continue;
+          }
+          if (!next) {
+            value += "\\";
+            push({ type: "text", value });
+            continue;
+          }
+          const match = /^\\+/.exec(remaining());
+          let slashes = 0;
+          if (match && match[0].length > 2) {
+            slashes = match[0].length;
+            state.index += slashes;
+            if (slashes % 2 !== 0) {
+              value += "\\";
+            }
+          }
+          if (opts.unescape === true) {
+            value = advance();
+          } else {
+            value += advance();
+          }
+          if (state.brackets === 0) {
+            push({ type: "text", value });
+            continue;
+          }
+        }
+        if (state.brackets > 0 && (value !== "]" || prev.value === "[" || prev.value === "[^")) {
+          if (opts.posix !== false && value === ":") {
+            const inner = prev.value.slice(1);
+            if (inner.includes("[")) {
+              prev.posix = true;
+              if (inner.includes(":")) {
+                const idx = prev.value.lastIndexOf("[");
+                const pre = prev.value.slice(0, idx);
+                const rest2 = prev.value.slice(idx + 2);
+                const posix = POSIX_REGEX_SOURCE[rest2];
+                if (posix) {
+                  prev.value = pre + posix;
+                  state.backtrack = true;
+                  advance();
+                  if (!bos.output && tokens.indexOf(prev) === 1) {
+                    bos.output = ONE_CHAR;
+                  }
+                  continue;
+                }
+              }
+            }
+          }
+          if (value === "[" && peek() !== ":" || value === "-" && peek() === "]") {
+            value = `\\${value}`;
+          }
+          if (value === "]" && (prev.value === "[" || prev.value === "[^")) {
+            value = `\\${value}`;
+          }
+          if (opts.posix === true && value === "!" && prev.value === "[") {
+            value = "^";
+          }
+          prev.value += value;
+          append({ value });
+          continue;
+        }
+        if (state.quotes === 1 && value !== '"') {
+          value = utils.escapeRegex(value);
+          prev.value += value;
+          append({ value });
+          continue;
+        }
+        if (value === '"') {
+          state.quotes = state.quotes === 1 ? 0 : 1;
+          if (opts.keepQuotes === true) {
+            push({ type: "text", value });
+          }
+          continue;
+        }
+        if (value === "(") {
+          increment("parens");
+          push({ type: "paren", value });
+          continue;
+        }
+        if (value === ")") {
+          if (state.parens === 0 && opts.strictBrackets === true) {
+            throw new SyntaxError(syntaxError("opening", "("));
+          }
+          const extglob = extglobs[extglobs.length - 1];
+          if (extglob && state.parens === extglob.parens + 1) {
+            extglobClose(extglobs.pop());
+            continue;
+          }
+          push({ type: "paren", value, output: state.parens ? ")" : "\\)" });
+          decrement("parens");
+          continue;
+        }
+        if (value === "[") {
+          if (opts.nobracket === true || !remaining().includes("]")) {
+            if (opts.nobracket !== true && opts.strictBrackets === true) {
+              throw new SyntaxError(syntaxError("closing", "]"));
+            }
+            value = `\\${value}`;
+          } else {
+            increment("brackets");
+          }
+          push({ type: "bracket", value });
+          continue;
+        }
+        if (value === "]") {
+          if (opts.nobracket === true || prev && prev.type === "bracket" && prev.value.length === 1) {
+            push({ type: "text", value, output: `\\${value}` });
+            continue;
+          }
+          if (state.brackets === 0) {
+            if (opts.strictBrackets === true) {
+              throw new SyntaxError(syntaxError("opening", "["));
+            }
+            push({ type: "text", value, output: `\\${value}` });
+            continue;
+          }
+          decrement("brackets");
+          const prevValue = prev.value.slice(1);
+          if (prev.posix !== true && prevValue[0] === "^" && !prevValue.includes("/")) {
+            value = `/${value}`;
+          }
+          prev.value += value;
+          append({ value });
+          if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {
+            continue;
+          }
+          const escaped = utils.escapeRegex(prev.value);
+          state.output = state.output.slice(0, -prev.value.length);
+          if (opts.literalBrackets === true) {
+            state.output += escaped;
+            prev.value = escaped;
+            continue;
+          }
+          prev.value = `(${capture}${escaped}|${prev.value})`;
+          state.output += prev.value;
+          continue;
+        }
+        if (value === "{" && opts.nobrace !== true) {
+          increment("braces");
+          const open = {
+            type: "brace",
+            value,
+            output: "(",
+            outputIndex: state.output.length,
+            tokensIndex: state.tokens.length
+          };
+          braces.push(open);
+          push(open);
+          continue;
+        }
+        if (value === "}") {
+          const brace = braces[braces.length - 1];
+          if (opts.nobrace === true || !brace) {
+            push({ type: "text", value, output: value });
+            continue;
+          }
+          let output = ")";
+          if (brace.dots === true) {
+            const arr = tokens.slice();
+            const range = [];
+            for (let i = arr.length - 1; i >= 0; i--) {
+              tokens.pop();
+              if (arr[i].type === "brace") {
+                break;
+              }
+              if (arr[i].type !== "dots") {
+                range.unshift(arr[i].value);
+              }
+            }
+            output = expandRange(range, opts);
+            state.backtrack = true;
+          }
+          if (brace.comma !== true && brace.dots !== true) {
+            const out = state.output.slice(0, brace.outputIndex);
+            const toks = state.tokens.slice(brace.tokensIndex);
+            brace.value = brace.output = "\\{";
+            value = output = "\\}";
+            state.output = out;
+            for (const t of toks) {
+              state.output += t.output || t.value;
+            }
+          }
+          push({ type: "brace", value, output });
+          decrement("braces");
+          braces.pop();
+          continue;
+        }
+        if (value === "|") {
+          if (extglobs.length > 0) {
+            extglobs[extglobs.length - 1].conditions++;
+          }
+          push({ type: "text", value });
+          continue;
+        }
+        if (value === ",") {
+          let output = value;
+          const brace = braces[braces.length - 1];
+          if (brace && stack[stack.length - 1] === "braces") {
+            brace.comma = true;
+            output = "|";
+          }
+          push({ type: "comma", value, output });
+          continue;
+        }
+        if (value === "/") {
+          if (prev.type === "dot" && state.index === state.start + 1) {
+            state.start = state.index + 1;
+            state.consumed = "";
+            state.output = "";
+            tokens.pop();
+            prev = bos;
+            continue;
+          }
+          push({ type: "slash", value, output: SLASH_LITERAL });
+          continue;
+        }
+        if (value === ".") {
+          if (state.braces > 0 && prev.type === "dot") {
+            if (prev.value === ".") prev.output = DOT_LITERAL;
+            const brace = braces[braces.length - 1];
+            prev.type = "dots";
+            prev.output += value;
+            prev.value += value;
+            brace.dots = true;
+            continue;
+          }
+          if (state.braces + state.parens === 0 && prev.type !== "bos" && prev.type !== "slash") {
+            push({ type: "text", value, output: DOT_LITERAL });
+            continue;
+          }
+          push({ type: "dot", value, output: DOT_LITERAL });
+          continue;
+        }
+        if (value === "?") {
+          const isGroup = prev && prev.value === "(";
+          if (!isGroup && opts.noextglob !== true && peek() === "(" && peek(2) !== "?") {
+            extglobOpen("qmark", value);
+            continue;
+          }
+          if (prev && prev.type === "paren") {
+            const next = peek();
+            let output = value;
+            if (prev.value === "(" && !/[!=<:]/.test(next) || next === "<" && !/<([!=]|\w+>)/.test(remaining())) {
+              output = `\\${value}`;
+            }
+            push({ type: "text", value, output });
+            continue;
+          }
+          if (opts.dot !== true && (prev.type === "slash" || prev.type === "bos")) {
+            push({ type: "qmark", value, output: QMARK_NO_DOT });
+            continue;
+          }
+          push({ type: "qmark", value, output: QMARK });
+          continue;
+        }
+        if (value === "!") {
+          if (opts.noextglob !== true && peek() === "(") {
+            if (peek(2) !== "?" || !/[!=<:]/.test(peek(3))) {
+              extglobOpen("negate", value);
+              continue;
+            }
+          }
+          if (opts.nonegate !== true && state.index === 0) {
+            negate();
+            continue;
+          }
+        }
+        if (value === "+") {
+          if (opts.noextglob !== true && peek() === "(" && peek(2) !== "?") {
+            extglobOpen("plus", value);
+            continue;
+          }
+          if (prev && prev.value === "(" || opts.regex === false) {
+            push({ type: "plus", value, output: PLUS_LITERAL });
+            continue;
+          }
+          if (prev && (prev.type === "bracket" || prev.type === "paren" || prev.type === "brace") || state.parens > 0) {
+            push({ type: "plus", value });
+            continue;
+          }
+          push({ type: "plus", value: PLUS_LITERAL });
+          continue;
+        }
+        if (value === "@") {
+          if (opts.noextglob !== true && peek() === "(" && peek(2) !== "?") {
+            push({ type: "at", extglob: true, value, output: "" });
+            continue;
+          }
+          push({ type: "text", value });
+          continue;
+        }
+        if (value !== "*") {
+          if (value === "$" || value === "^") {
+            value = `\\${value}`;
+          }
+          const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());
+          if (match) {
+            value += match[0];
+            state.index += match[0].length;
+          }
+          push({ type: "text", value });
+          continue;
+        }
+        if (prev && (prev.type === "globstar" || prev.star === true)) {
+          prev.type = "star";
+          prev.star = true;
+          prev.value += value;
+          prev.output = star;
+          state.backtrack = true;
+          state.globstar = true;
+          consume(value);
+          continue;
+        }
+        let rest = remaining();
+        if (opts.noextglob !== true && /^\([^?]/.test(rest)) {
+          extglobOpen("star", value);
+          continue;
+        }
+        if (prev.type === "star") {
+          if (opts.noglobstar === true) {
+            consume(value);
+            continue;
+          }
+          const prior = prev.prev;
+          const before = prior.prev;
+          const isStart = prior.type === "slash" || prior.type === "bos";
+          const afterStar = before && (before.type === "star" || before.type === "globstar");
+          if (opts.bash === true && (!isStart || rest[0] && rest[0] !== "/")) {
+            push({ type: "star", value, output: "" });
+            continue;
+          }
+          const isBrace = state.braces > 0 && (prior.type === "comma" || prior.type === "brace");
+          const isExtglob = extglobs.length && (prior.type === "pipe" || prior.type === "paren");
+          if (!isStart && prior.type !== "paren" && !isBrace && !isExtglob) {
+            push({ type: "star", value, output: "" });
+            continue;
+          }
+          while (rest.slice(0, 3) === "/**") {
+            const after = input[state.index + 4];
+            if (after && after !== "/") {
+              break;
+            }
+            rest = rest.slice(3);
+            consume("/**", 3);
+          }
+          if (prior.type === "bos" && eos()) {
+            prev.type = "globstar";
+            prev.value += value;
+            prev.output = globstar(opts);
+            state.output = prev.output;
+            state.globstar = true;
+            consume(value);
+            continue;
+          }
+          if (prior.type === "slash" && prior.prev.type !== "bos" && !afterStar && eos()) {
+            state.output = state.output.slice(0, -(prior.output + prev.output).length);
+            prior.output = `(?:${prior.output}`;
+            prev.type = "globstar";
+            prev.output = globstar(opts) + (opts.strictSlashes ? ")" : "|$)");
+            prev.value += value;
+            state.globstar = true;
+            state.output += prior.output + prev.output;
+            consume(value);
+            continue;
+          }
+          if (prior.type === "slash" && prior.prev.type !== "bos" && rest[0] === "/") {
+            const end = rest[1] !== void 0 ? "|$" : "";
+            state.output = state.output.slice(0, -(prior.output + prev.output).length);
+            prior.output = `(?:${prior.output}`;
+            prev.type = "globstar";
+            prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;
+            prev.value += value;
+            state.output += prior.output + prev.output;
+            state.globstar = true;
+            consume(value + advance());
+            push({ type: "slash", value: "/", output: "" });
+            continue;
+          }
+          if (prior.type === "bos" && rest[0] === "/") {
+            prev.type = "globstar";
+            prev.value += value;
+            prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;
+            state.output = prev.output;
+            state.globstar = true;
+            consume(value + advance());
+            push({ type: "slash", value: "/", output: "" });
+            continue;
+          }
+          state.output = state.output.slice(0, -prev.output.length);
+          prev.type = "globstar";
+          prev.output = globstar(opts);
+          prev.value += value;
+          state.output += prev.output;
+          state.globstar = true;
+          consume(value);
+          continue;
+        }
+        const token = { type: "star", value, output: star };
+        if (opts.bash === true) {
+          token.output = ".*?";
+          if (prev.type === "bos" || prev.type === "slash") {
+            token.output = nodot + token.output;
+          }
+          push(token);
+          continue;
+        }
+        if (prev && (prev.type === "bracket" || prev.type === "paren") && opts.regex === true) {
+          token.output = value;
+          push(token);
+          continue;
+        }
+        if (state.index === state.start || prev.type === "slash" || prev.type === "dot") {
+          if (prev.type === "dot") {
+            state.output += NO_DOT_SLASH;
+            prev.output += NO_DOT_SLASH;
+          } else if (opts.dot === true) {
+            state.output += NO_DOTS_SLASH;
+            prev.output += NO_DOTS_SLASH;
+          } else {
+            state.output += nodot;
+            prev.output += nodot;
+          }
+          if (peek() !== "*") {
+            state.output += ONE_CHAR;
+            prev.output += ONE_CHAR;
+          }
+        }
+        push(token);
+      }
+      while (state.brackets > 0) {
+        if (opts.strictBrackets === true) throw new SyntaxError(syntaxError("closing", "]"));
+        state.output = utils.escapeLast(state.output, "[");
+        decrement("brackets");
+      }
+      while (state.parens > 0) {
+        if (opts.strictBrackets === true) throw new SyntaxError(syntaxError("closing", ")"));
+        state.output = utils.escapeLast(state.output, "(");
+        decrement("parens");
+      }
+      while (state.braces > 0) {
+        if (opts.strictBrackets === true) throw new SyntaxError(syntaxError("closing", "}"));
+        state.output = utils.escapeLast(state.output, "{");
+        decrement("braces");
+      }
+      if (opts.strictSlashes !== true && (prev.type === "star" || prev.type === "bracket")) {
+        push({ type: "maybe_slash", value: "", output: `${SLASH_LITERAL}?` });
+      }
+      if (state.backtrack === true) {
+        state.output = "";
+        for (const token of state.tokens) {
+          state.output += token.output != null ? token.output : token.value;
+          if (token.suffix) {
+            state.output += token.suffix;
+          }
+        }
+      }
+      return state;
+    }, "parse");
+    parse.fastpaths = (input, options) => {
+      const opts = { ...options };
+      const max = typeof opts.maxLength === "number" ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
+      const len = input.length;
+      if (len > max) {
+        throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
+      }
+      input = REPLACEMENTS[input] || input;
+      const {
+        DOT_LITERAL,
+        SLASH_LITERAL,
+        ONE_CHAR,
+        DOTS_SLASH,
+        NO_DOT,
+        NO_DOTS,
+        NO_DOTS_SLASH,
+        STAR,
+        START_ANCHOR
+      } = constants.globChars(opts.windows);
+      const nodot = opts.dot ? NO_DOTS : NO_DOT;
+      const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;
+      const capture = opts.capture ? "" : "?:";
+      const state = { negated: false, prefix: "" };
+      let star = opts.bash === true ? ".*?" : STAR;
+      if (opts.capture) {
+        star = `(${star})`;
+      }
+      const globstar = /* @__PURE__ */ __name((opts2) => {
+        if (opts2.noglobstar === true) return star;
+        return `(${capture}(?:(?!${START_ANCHOR}${opts2.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
+      }, "globstar");
+      const create = /* @__PURE__ */ __name((str) => {
+        switch (str) {
+          case "*":
+            return `${nodot}${ONE_CHAR}${star}`;
+          case ".*":
+            return `${DOT_LITERAL}${ONE_CHAR}${star}`;
+          case "*.*":
+            return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
+          case "*/*":
+            return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;
+          case "**":
+            return nodot + globstar(opts);
+          case "**/*":
+            return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;
+          case "**/*.*":
+            return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
+          case "**/.*":
+            return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;
+          default: {
+            const match = /^(.*?)\.(\w+)$/.exec(str);
+            if (!match) return;
+            const source2 = create(match[1]);
+            if (!source2) return;
+            return source2 + DOT_LITERAL + match[2];
+          }
+        }
+      }, "create");
+      const output = utils.removePrefix(input, state);
+      let source = create(output);
+      if (source && opts.strictSlashes !== true) {
+        source += `${SLASH_LITERAL}?`;
+      }
+      return source;
+    };
+    module2.exports = parse;
+  }
+});
+
+// node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/lib/picomatch.js
+var require_picomatch = __commonJS({
+  "node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/lib/picomatch.js"(exports2, module2) {
+    "use strict";
+    var scan = require_scan();
+    var parse = require_parse();
+    var utils = require_utils();
+    var constants = require_constants();
+    var isObject = /* @__PURE__ */ __name((val) => val && typeof val === "object" && !Array.isArray(val), "isObject");
+    var picomatch2 = /* @__PURE__ */ __name((glob2, options, returnState = false) => {
+      if (Array.isArray(glob2)) {
+        const fns = glob2.map((input) => picomatch2(input, options, returnState));
+        const arrayMatcher = /* @__PURE__ */ __name((str) => {
+          for (const isMatch of fns) {
+            const state2 = isMatch(str);
+            if (state2) return state2;
+          }
+          return false;
+        }, "arrayMatcher");
+        return arrayMatcher;
+      }
+      const isState = isObject(glob2) && glob2.tokens && glob2.input;
+      if (glob2 === "" || typeof glob2 !== "string" && !isState) {
+        throw new TypeError("Expected pattern to be a non-empty string");
+      }
+      const opts = options || {};
+      const posix = opts.windows;
+      const regex = isState ? picomatch2.compileRe(glob2, options) : picomatch2.makeRe(glob2, options, false, true);
+      const state = regex.state;
+      delete regex.state;
+      let isIgnored = /* @__PURE__ */ __name(() => false, "isIgnored");
+      if (opts.ignore) {
+        const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };
+        isIgnored = picomatch2(opts.ignore, ignoreOpts, returnState);
+      }
+      const matcher = /* @__PURE__ */ __name((input, returnObject = false) => {
+        const { isMatch, match, output } = picomatch2.test(input, regex, options, { glob: glob2, posix });
+        const result = { glob: glob2, state, regex, posix, input, output, match, isMatch };
+        if (typeof opts.onResult === "function") {
+          opts.onResult(result);
+        }
+        if (isMatch === false) {
+          result.isMatch = false;
+          return returnObject ? result : false;
+        }
+        if (isIgnored(input)) {
+          if (typeof opts.onIgnore === "function") {
+            opts.onIgnore(result);
+          }
+          result.isMatch = false;
+          return returnObject ? result : false;
+        }
+        if (typeof opts.onMatch === "function") {
+          opts.onMatch(result);
+        }
+        return returnObject ? result : true;
+      }, "matcher");
+      if (returnState) {
+        matcher.state = state;
+      }
+      return matcher;
+    }, "picomatch");
+    picomatch2.test = (input, regex, options, { glob: glob2, posix } = {}) => {
+      if (typeof input !== "string") {
+        throw new TypeError("Expected input to be a string");
+      }
+      if (input === "") {
+        return { isMatch: false, output: "" };
+      }
+      const opts = options || {};
+      const format = opts.format || (posix ? utils.toPosixSlashes : null);
+      let match = input === glob2;
+      let output = match && format ? format(input) : input;
+      if (match === false) {
+        output = format ? format(input) : input;
+        match = output === glob2;
+      }
+      if (match === false || opts.capture === true) {
+        if (opts.matchBase === true || opts.basename === true) {
+          match = picomatch2.matchBase(input, regex, options, posix);
+        } else {
+          match = regex.exec(output);
+        }
+      }
+      return { isMatch: Boolean(match), match, output };
+    };
+    picomatch2.matchBase = (input, glob2, options) => {
+      const regex = glob2 instanceof RegExp ? glob2 : picomatch2.makeRe(glob2, options);
+      return regex.test(utils.basename(input));
+    };
+    picomatch2.isMatch = (str, patterns, options) => picomatch2(patterns, options)(str);
+    picomatch2.parse = (pattern, options) => {
+      if (Array.isArray(pattern)) return pattern.map((p) => picomatch2.parse(p, options));
+      return parse(pattern, { ...options, fastpaths: false });
+    };
+    picomatch2.scan = (input, options) => scan(input, options);
+    picomatch2.compileRe = (state, options, returnOutput = false, returnState = false) => {
+      if (returnOutput === true) {
+        return state.output;
+      }
+      const opts = options || {};
+      const prepend = opts.contains ? "" : "^";
+      const append = opts.contains ? "" : "$";
+      let source = `${prepend}(?:${state.output})${append}`;
+      if (state && state.negated === true) {
+        source = `^(?!${source}).*$`;
+      }
+      const regex = picomatch2.toRegex(source, options);
+      if (returnState === true) {
+        regex.state = state;
+      }
+      return regex;
+    };
+    picomatch2.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {
+      if (!input || typeof input !== "string") {
+        throw new TypeError("Expected a non-empty string");
+      }
+      let parsed = { negated: false, fastpaths: true };
+      if (options.fastpaths !== false && (input[0] === "." || input[0] === "*")) {
+        parsed.output = parse.fastpaths(input, options);
+      }
+      if (!parsed.output) {
+        parsed = parse(input, options);
+      }
+      return picomatch2.compileRe(parsed, options, returnOutput, returnState);
+    };
+    picomatch2.toRegex = (source, options) => {
+      try {
+        const opts = options || {};
+        return new RegExp(source, opts.flags || (opts.nocase ? "i" : ""));
+      } catch (err) {
+        if (options && options.debug === true) throw err;
+        return /$^/;
+      }
+    };
+    picomatch2.constants = constants;
+    module2.exports = picomatch2;
+  }
+});
+
+// node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/index.js
+var require_picomatch2 = __commonJS({
+  "node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/index.js"(exports2, module2) {
+    "use strict";
+    var pico = require_picomatch();
+    var utils = require_utils();
+    function picomatch2(glob2, options, returnState = false) {
+      if (options && (options.windows === null || options.windows === void 0)) {
+        options = { ...options, windows: utils.isWindows() };
+      }
+      return pico(glob2, options, returnState);
+    }
+    __name(picomatch2, "picomatch");
+    Object.assign(picomatch2, pico);
+    module2.exports = picomatch2;
+  }
+});
+
+// node_modules/.pnpm/@sindresorhus+merge-streams@2.3.0/node_modules/@sindresorhus/merge-streams/index.js
+function mergeStreams(streams) {
+  if (!Array.isArray(streams)) {
+    throw new TypeError(`Expected an array, got \`${typeof streams}\`.`);
+  }
+  for (const stream of streams) {
+    validateStream(stream);
+  }
+  const objectMode = streams.some(({ readableObjectMode }) => readableObjectMode);
+  const highWaterMark = getHighWaterMark(streams, objectMode);
+  const passThroughStream = new MergedStream({
+    objectMode,
+    writableHighWaterMark: highWaterMark,
+    readableHighWaterMark: highWaterMark
+  });
+  for (const stream of streams) {
+    passThroughStream.add(stream);
+  }
+  if (streams.length === 0) {
+    endStream(passThroughStream);
+  }
+  return passThroughStream;
+}
+var import_node_events, import_node_stream, import_promises, getHighWaterMark, MergedStream, onMergedStreamFinished, onMergedStreamEnd, onInputStreamsUnpipe, validateStream, endWhenStreamsDone, isAbortError, afterMergedStreamFinished, onInputStreamEnd, onInputStreamUnpipe, unpipeEvent, endStream, abortStream, errorStream, noop, updateMaxListeners, PASSTHROUGH_LISTENERS_COUNT, PASSTHROUGH_LISTENERS_PER_STREAM;
+var init_merge_streams = __esm({
+  "node_modules/.pnpm/@sindresorhus+merge-streams@2.3.0/node_modules/@sindresorhus/merge-streams/index.js"() {
+    import_node_events = require("node:events");
+    import_node_stream = require("node:stream");
+    import_promises = require("node:stream/promises");
+    __name(mergeStreams, "mergeStreams");
+    getHighWaterMark = /* @__PURE__ */ __name((streams, objectMode) => {
+      if (streams.length === 0) {
+        return 16384;
+      }
+      const highWaterMarks = streams.filter(({ readableObjectMode }) => readableObjectMode === objectMode).map(({ readableHighWaterMark }) => readableHighWaterMark);
+      return Math.max(...highWaterMarks);
+    }, "getHighWaterMark");
+    MergedStream = class extends import_node_stream.PassThrough {
+      static {
+        __name(this, "MergedStream");
+      }
+      #streams = /* @__PURE__ */ new Set([]);
+      #ended = /* @__PURE__ */ new Set([]);
+      #aborted = /* @__PURE__ */ new Set([]);
+      #onFinished;
+      add(stream) {
+        validateStream(stream);
+        if (this.#streams.has(stream)) {
+          return;
+        }
+        this.#streams.add(stream);
+        this.#onFinished ??= onMergedStreamFinished(this, this.#streams);
+        endWhenStreamsDone({
+          passThroughStream: this,
+          stream,
+          streams: this.#streams,
+          ended: this.#ended,
+          aborted: this.#aborted,
+          onFinished: this.#onFinished
+        });
+        stream.pipe(this, { end: false });
+      }
+      remove(stream) {
+        validateStream(stream);
+        if (!this.#streams.has(stream)) {
+          return false;
+        }
+        stream.unpipe(this);
+        return true;
+      }
+    };
+    onMergedStreamFinished = /* @__PURE__ */ __name(async (passThroughStream, streams) => {
+      updateMaxListeners(passThroughStream, PASSTHROUGH_LISTENERS_COUNT);
+      const controller = new AbortController();
+      try {
+        await Promise.race([
+          onMergedStreamEnd(passThroughStream, controller),
+          onInputStreamsUnpipe(passThroughStream, streams, controller)
+        ]);
+      } finally {
+        controller.abort();
+        updateMaxListeners(passThroughStream, -PASSTHROUGH_LISTENERS_COUNT);
+      }
+    }, "onMergedStreamFinished");
+    onMergedStreamEnd = /* @__PURE__ */ __name(async (passThroughStream, { signal }) => {
+      await (0, import_promises.finished)(passThroughStream, { signal, cleanup: true });
+    }, "onMergedStreamEnd");
+    onInputStreamsUnpipe = /* @__PURE__ */ __name(async (passThroughStream, streams, { signal }) => {
+      for await (const [unpipedStream] of (0, import_node_events.on)(passThroughStream, "unpipe", { signal })) {
+        if (streams.has(unpipedStream)) {
+          unpipedStream.emit(unpipeEvent);
+        }
+      }
+    }, "onInputStreamsUnpipe");
+    validateStream = /* @__PURE__ */ __name((stream) => {
+      if (typeof stream?.pipe !== "function") {
+        throw new TypeError(`Expected a readable stream, got: \`${typeof stream}\`.`);
+      }
+    }, "validateStream");
+    endWhenStreamsDone = /* @__PURE__ */ __name(async ({ passThroughStream, stream, streams, ended, aborted, onFinished }) => {
+      updateMaxListeners(passThroughStream, PASSTHROUGH_LISTENERS_PER_STREAM);
+      const controller = new AbortController();
+      try {
+        await Promise.race([
+          afterMergedStreamFinished(onFinished, stream),
+          onInputStreamEnd({ passThroughStream, stream, streams, ended, aborted, controller }),
+          onInputStreamUnpipe({ stream, streams, ended, aborted, controller })
+        ]);
+      } finally {
+        controller.abort();
+        updateMaxListeners(passThroughStream, -PASSTHROUGH_LISTENERS_PER_STREAM);
+      }
+      if (streams.size === ended.size + aborted.size) {
+        if (ended.size === 0 && aborted.size > 0) {
+          abortStream(passThroughStream);
+        } else {
+          endStream(passThroughStream);
+        }
+      }
+    }, "endWhenStreamsDone");
+    isAbortError = /* @__PURE__ */ __name((error) => error?.code === "ERR_STREAM_PREMATURE_CLOSE", "isAbortError");
+    afterMergedStreamFinished = /* @__PURE__ */ __name(async (onFinished, stream) => {
+      try {
+        await onFinished;
+        abortStream(stream);
+      } catch (error) {
+        if (isAbortError(error)) {
+          abortStream(stream);
+        } else {
+          errorStream(stream, error);
+        }
+      }
+    }, "afterMergedStreamFinished");
+    onInputStreamEnd = /* @__PURE__ */ __name(async ({ passThroughStream, stream, streams, ended, aborted, controller: { signal } }) => {
+      try {
+        await (0, import_promises.finished)(stream, { signal, cleanup: true, readable: true, writable: false });
+        if (streams.has(stream)) {
+          ended.add(stream);
+        }
+      } catch (error) {
+        if (signal.aborted || !streams.has(stream)) {
+          return;
+        }
+        if (isAbortError(error)) {
+          aborted.add(stream);
+        } else {
+          errorStream(passThroughStream, error);
+        }
+      }
+    }, "onInputStreamEnd");
+    onInputStreamUnpipe = /* @__PURE__ */ __name(async ({ stream, streams, ended, aborted, controller: { signal } }) => {
+      await (0, import_node_events.once)(stream, unpipeEvent, { signal });
+      streams.delete(stream);
+      ended.delete(stream);
+      aborted.delete(stream);
+    }, "onInputStreamUnpipe");
+    unpipeEvent = Symbol("unpipe");
+    endStream = /* @__PURE__ */ __name((stream) => {
+      if (stream.writable) {
+        stream.end();
+      }
+    }, "endStream");
+    abortStream = /* @__PURE__ */ __name((stream) => {
+      if (stream.readable || stream.writable) {
+        stream.destroy();
+      }
+    }, "abortStream");
+    errorStream = /* @__PURE__ */ __name((stream, error) => {
+      if (!stream.destroyed) {
+        stream.once("error", noop);
+        stream.destroy(error);
+      }
+    }, "errorStream");
+    noop = /* @__PURE__ */ __name(() => {
+    }, "noop");
+    updateMaxListeners = /* @__PURE__ */ __name((passThroughStream, increment) => {
+      const maxListeners = passThroughStream.getMaxListeners();
+      if (maxListeners !== 0 && maxListeners !== Number.POSITIVE_INFINITY) {
+        passThroughStream.setMaxListeners(maxListeners + increment);
+      }
+    }, "updateMaxListeners");
+    PASSTHROUGH_LISTENERS_COUNT = 2;
+    PASSTHROUGH_LISTENERS_PER_STREAM = 1;
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/array.js
+var require_array = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/array.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.splitWhen = exports2.flatten = void 0;
+    function flatten(items) {
+      return items.reduce((collection, item) => [].concat(collection, item), []);
+    }
+    __name(flatten, "flatten");
+    exports2.flatten = flatten;
+    function splitWhen(items, predicate) {
+      const result = [[]];
+      let groupIndex = 0;
+      for (const item of items) {
+        if (predicate(item)) {
+          groupIndex++;
+          result[groupIndex] = [];
+        } else {
+          result[groupIndex].push(item);
+        }
+      }
+      return result;
+    }
+    __name(splitWhen, "splitWhen");
+    exports2.splitWhen = splitWhen;
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/errno.js
+var require_errno = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/errno.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.isEnoentCodeError = void 0;
+    function isEnoentCodeError(error) {
+      return error.code === "ENOENT";
+    }
+    __name(isEnoentCodeError, "isEnoentCodeError");
+    exports2.isEnoentCodeError = isEnoentCodeError;
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/fs.js
+var require_fs = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/fs.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.createDirentFromStats = void 0;
+    var DirentFromStats = class {
+      static {
+        __name(this, "DirentFromStats");
+      }
+      constructor(name, stats) {
+        this.name = name;
+        this.isBlockDevice = stats.isBlockDevice.bind(stats);
+        this.isCharacterDevice = stats.isCharacterDevice.bind(stats);
+        this.isDirectory = stats.isDirectory.bind(stats);
+        this.isFIFO = stats.isFIFO.bind(stats);
+        this.isFile = stats.isFile.bind(stats);
+        this.isSocket = stats.isSocket.bind(stats);
+        this.isSymbolicLink = stats.isSymbolicLink.bind(stats);
+      }
+    };
+    function createDirentFromStats(name, stats) {
+      return new DirentFromStats(name, stats);
+    }
+    __name(createDirentFromStats, "createDirentFromStats");
+    exports2.createDirentFromStats = createDirentFromStats;
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/path.js
+var require_path = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/path.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.convertPosixPathToPattern = exports2.convertWindowsPathToPattern = exports2.convertPathToPattern = exports2.escapePosixPath = exports2.escapeWindowsPath = exports2.escape = exports2.removeLeadingDotSegment = exports2.makeAbsolute = exports2.unixify = void 0;
+    var os = require("os");
+    var path6 = require("path");
+    var IS_WINDOWS_PLATFORM = os.platform() === "win32";
+    var LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2;
+    var POSIX_UNESCAPED_GLOB_SYMBOLS_RE = /(\\?)([()*?[\]{|}]|^!|[!+@](?=\()|\\(?![!()*+?@[\]{|}]))/g;
+    var WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE = /(\\?)([()[\]{}]|^!|[!+@](?=\())/g;
+    var DOS_DEVICE_PATH_RE = /^\\\\([.?])/;
+    var WINDOWS_BACKSLASHES_RE = /\\(?![!()+@[\]{}])/g;
+    function unixify(filepath) {
+      return filepath.replace(/\\/g, "/");
+    }
+    __name(unixify, "unixify");
+    exports2.unixify = unixify;
+    function makeAbsolute(cwd, filepath) {
+      return path6.resolve(cwd, filepath);
+    }
+    __name(makeAbsolute, "makeAbsolute");
+    exports2.makeAbsolute = makeAbsolute;
+    function removeLeadingDotSegment(entry) {
+      if (entry.charAt(0) === ".") {
+        const secondCharactery = entry.charAt(1);
+        if (secondCharactery === "/" || secondCharactery === "\\") {
+          return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT);
+        }
+      }
+      return entry;
+    }
+    __name(removeLeadingDotSegment, "removeLeadingDotSegment");
+    exports2.removeLeadingDotSegment = removeLeadingDotSegment;
+    exports2.escape = IS_WINDOWS_PLATFORM ? escapeWindowsPath : escapePosixPath;
+    function escapeWindowsPath(pattern) {
+      return pattern.replace(WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE, "\\$2");
+    }
+    __name(escapeWindowsPath, "escapeWindowsPath");
+    exports2.escapeWindowsPath = escapeWindowsPath;
+    function escapePosixPath(pattern) {
+      return pattern.replace(POSIX_UNESCAPED_GLOB_SYMBOLS_RE, "\\$2");
+    }
+    __name(escapePosixPath, "escapePosixPath");
+    exports2.escapePosixPath = escapePosixPath;
+    exports2.convertPathToPattern = IS_WINDOWS_PLATFORM ? convertWindowsPathToPattern : convertPosixPathToPattern;
+    function convertWindowsPathToPattern(filepath) {
+      return escapeWindowsPath(filepath).replace(DOS_DEVICE_PATH_RE, "//$1").replace(WINDOWS_BACKSLASHES_RE, "/");
+    }
+    __name(convertWindowsPathToPattern, "convertWindowsPathToPattern");
+    exports2.convertWindowsPathToPattern = convertWindowsPathToPattern;
+    function convertPosixPathToPattern(filepath) {
+      return escapePosixPath(filepath);
+    }
+    __name(convertPosixPathToPattern, "convertPosixPathToPattern");
+    exports2.convertPosixPathToPattern = convertPosixPathToPattern;
+  }
+});
+
+// node_modules/.pnpm/is-extglob@2.1.1/node_modules/is-extglob/index.js
+var require_is_extglob = __commonJS({
+  "node_modules/.pnpm/is-extglob@2.1.1/node_modules/is-extglob/index.js"(exports2, module2) {
+    module2.exports = /* @__PURE__ */ __name(function isExtglob(str) {
+      if (typeof str !== "string" || str === "") {
+        return false;
+      }
+      var match;
+      while (match = /(\\).|([@?!+*]\(.*\))/g.exec(str)) {
+        if (match[2]) return true;
+        str = str.slice(match.index + match[0].length);
+      }
+      return false;
+    }, "isExtglob");
+  }
+});
+
+// node_modules/.pnpm/is-glob@4.0.3/node_modules/is-glob/index.js
+var require_is_glob = __commonJS({
+  "node_modules/.pnpm/is-glob@4.0.3/node_modules/is-glob/index.js"(exports2, module2) {
+    var isExtglob = require_is_extglob();
+    var chars = { "{": "}", "(": ")", "[": "]" };
+    var strictCheck = /* @__PURE__ */ __name(function(str) {
+      if (str[0] === "!") {
+        return true;
+      }
+      var index = 0;
+      var pipeIndex = -2;
+      var closeSquareIndex = -2;
+      var closeCurlyIndex = -2;
+      var closeParenIndex = -2;
+      var backSlashIndex = -2;
+      while (index < str.length) {
+        if (str[index] === "*") {
+          return true;
+        }
+        if (str[index + 1] === "?" && /[\].+)]/.test(str[index])) {
+          return true;
+        }
+        if (closeSquareIndex !== -1 && str[index] === "[" && str[index + 1] !== "]") {
+          if (closeSquareIndex < index) {
+            closeSquareIndex = str.indexOf("]", index);
+          }
+          if (closeSquareIndex > index) {
+            if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {
+              return true;
+            }
+            backSlashIndex = str.indexOf("\\", index);
+            if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {
+              return true;
+            }
+          }
+        }
+        if (closeCurlyIndex !== -1 && str[index] === "{" && str[index + 1] !== "}") {
+          closeCurlyIndex = str.indexOf("}", index);
+          if (closeCurlyIndex > index) {
+            backSlashIndex = str.indexOf("\\", index);
+            if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) {
+              return true;
+            }
+          }
+        }
+        if (closeParenIndex !== -1 && str[index] === "(" && str[index + 1] === "?" && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ")") {
+          closeParenIndex = str.indexOf(")", index);
+          if (closeParenIndex > index) {
+            backSlashIndex = str.indexOf("\\", index);
+            if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {
+              return true;
+            }
+          }
+        }
+        if (pipeIndex !== -1 && str[index] === "(" && str[index + 1] !== "|") {
+          if (pipeIndex < index) {
+            pipeIndex = str.indexOf("|", index);
+          }
+          if (pipeIndex !== -1 && str[pipeIndex + 1] !== ")") {
+            closeParenIndex = str.indexOf(")", pipeIndex);
+            if (closeParenIndex > pipeIndex) {
+              backSlashIndex = str.indexOf("\\", pipeIndex);
+              if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {
+                return true;
+              }
+            }
+          }
+        }
+        if (str[index] === "\\") {
+          var open = str[index + 1];
+          index += 2;
+          var close = chars[open];
+          if (close) {
+            var n = str.indexOf(close, index);
+            if (n !== -1) {
+              index = n + 1;
+            }
+          }
+          if (str[index] === "!") {
+            return true;
+          }
+        } else {
+          index++;
+        }
+      }
+      return false;
+    }, "strictCheck");
+    var relaxedCheck = /* @__PURE__ */ __name(function(str) {
+      if (str[0] === "!") {
+        return true;
+      }
+      var index = 0;
+      while (index < str.length) {
+        if (/[*?{}()[\]]/.test(str[index])) {
+          return true;
+        }
+        if (str[index] === "\\") {
+          var open = str[index + 1];
+          index += 2;
+          var close = chars[open];
+          if (close) {
+            var n = str.indexOf(close, index);
+            if (n !== -1) {
+              index = n + 1;
+            }
+          }
+          if (str[index] === "!") {
+            return true;
+          }
+        } else {
+          index++;
+        }
+      }
+      return false;
+    }, "relaxedCheck");
+    module2.exports = /* @__PURE__ */ __name(function isGlob2(str, options) {
+      if (typeof str !== "string" || str === "") {
+        return false;
+      }
+      if (isExtglob(str)) {
+        return true;
+      }
+      var check = strictCheck;
+      if (options && options.strict === false) {
+        check = relaxedCheck;
+      }
+      return check(str);
+    }, "isGlob");
+  }
+});
+
+// node_modules/.pnpm/glob-parent@5.1.2/node_modules/glob-parent/index.js
+var require_glob_parent = __commonJS({
+  "node_modules/.pnpm/glob-parent@5.1.2/node_modules/glob-parent/index.js"(exports2, module2) {
+    "use strict";
+    var isGlob2 = require_is_glob();
+    var pathPosixDirname = require("path").posix.dirname;
+    var isWin32 = require("os").platform() === "win32";
+    var slash2 = "/";
+    var backslash = /\\/g;
+    var enclosure = /[\{\[].*[\}\]]$/;
+    var globby2 = /(^|[^\\])([\{\[]|\([^\)]+$)/;
+    var escaped = /\\([\!\*\?\|\[\]\(\)\{\}])/g;
+    module2.exports = /* @__PURE__ */ __name(function globParent(str, opts) {
+      var options = Object.assign({ flipBackslashes: true }, opts);
+      if (options.flipBackslashes && isWin32 && str.indexOf(slash2) < 0) {
+        str = str.replace(backslash, slash2);
+      }
+      if (enclosure.test(str)) {
+        str += slash2;
+      }
+      str += "a";
+      do {
+        str = pathPosixDirname(str);
+      } while (isGlob2(str) || globby2.test(str));
+      return str.replace(escaped, "$1");
+    }, "globParent");
+  }
+});
+
+// node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/utils.js
+var require_utils2 = __commonJS({
+  "node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/utils.js"(exports2) {
+    "use strict";
+    exports2.isInteger = (num) => {
+      if (typeof num === "number") {
+        return Number.isInteger(num);
+      }
+      if (typeof num === "string" && num.trim() !== "") {
+        return Number.isInteger(Number(num));
+      }
+      return false;
+    };
+    exports2.find = (node, type) => node.nodes.find((node2) => node2.type === type);
+    exports2.exceedsLimit = (min, max, step = 1, limit) => {
+      if (limit === false) return false;
+      if (!exports2.isInteger(min) || !exports2.isInteger(max)) return false;
+      return (Number(max) - Number(min)) / Number(step) >= limit;
+    };
+    exports2.escapeNode = (block, n = 0, type) => {
+      const node = block.nodes[n];
+      if (!node) return;
+      if (type && node.type === type || node.type === "open" || node.type === "close") {
+        if (node.escaped !== true) {
+          node.value = "\\" + node.value;
+          node.escaped = true;
+        }
+      }
+    };
+    exports2.encloseBrace = (node) => {
+      if (node.type !== "brace") return false;
+      if (node.commas >> 0 + node.ranges >> 0 === 0) {
+        node.invalid = true;
+        return true;
+      }
+      return false;
+    };
+    exports2.isInvalidBrace = (block) => {
+      if (block.type !== "brace") return false;
+      if (block.invalid === true || block.dollar) return true;
+      if (block.commas >> 0 + block.ranges >> 0 === 0) {
+        block.invalid = true;
+        return true;
+      }
+      if (block.open !== true || block.close !== true) {
+        block.invalid = true;
+        return true;
+      }
+      return false;
+    };
+    exports2.isOpenOrClose = (node) => {
+      if (node.type === "open" || node.type === "close") {
+        return true;
+      }
+      return node.open === true || node.close === true;
+    };
+    exports2.reduce = (nodes) => nodes.reduce((acc, node) => {
+      if (node.type === "text") acc.push(node.value);
+      if (node.type === "range") node.type = "text";
+      return acc;
+    }, []);
+    exports2.flatten = (...args) => {
+      const result = [];
+      const flat = /* @__PURE__ */ __name((arr) => {
+        for (let i = 0; i < arr.length; i++) {
+          const ele = arr[i];
+          if (Array.isArray(ele)) {
+            flat(ele);
+            continue;
+          }
+          if (ele !== void 0) {
+            result.push(ele);
+          }
+        }
+        return result;
+      }, "flat");
+      flat(args);
+      return result;
+    };
+  }
+});
+
+// node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/stringify.js
+var require_stringify = __commonJS({
+  "node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/stringify.js"(exports2, module2) {
+    "use strict";
+    var utils = require_utils2();
+    module2.exports = (ast, options = {}) => {
+      const stringify = /* @__PURE__ */ __name((node, parent = {}) => {
+        const invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);
+        const invalidNode = node.invalid === true && options.escapeInvalid === true;
+        let output = "";
+        if (node.value) {
+          if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {
+            return "\\" + node.value;
+          }
+          return node.value;
+        }
+        if (node.value) {
+          return node.value;
+        }
+        if (node.nodes) {
+          for (const child of node.nodes) {
+            output += stringify(child);
+          }
+        }
+        return output;
+      }, "stringify");
+      return stringify(ast);
+    };
+  }
+});
+
+// node_modules/.pnpm/is-number@7.0.0/node_modules/is-number/index.js
+var require_is_number = __commonJS({
+  "node_modules/.pnpm/is-number@7.0.0/node_modules/is-number/index.js"(exports2, module2) {
+    "use strict";
+    module2.exports = function(num) {
+      if (typeof num === "number") {
+        return num - num === 0;
+      }
+      if (typeof num === "string" && num.trim() !== "") {
+        return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);
+      }
+      return false;
+    };
+  }
+});
+
+// node_modules/.pnpm/to-regex-range@5.0.1/node_modules/to-regex-range/index.js
+var require_to_regex_range = __commonJS({
+  "node_modules/.pnpm/to-regex-range@5.0.1/node_modules/to-regex-range/index.js"(exports2, module2) {
+    "use strict";
+    var isNumber = require_is_number();
+    var toRegexRange = /* @__PURE__ */ __name((min, max, options) => {
+      if (isNumber(min) === false) {
+        throw new TypeError("toRegexRange: expected the first argument to be a number");
+      }
+      if (max === void 0 || min === max) {
+        return String(min);
+      }
+      if (isNumber(max) === false) {
+        throw new TypeError("toRegexRange: expected the second argument to be a number.");
+      }
+      let opts = { relaxZeros: true, ...options };
+      if (typeof opts.strictZeros === "boolean") {
+        opts.relaxZeros = opts.strictZeros === false;
+      }
+      let relax = String(opts.relaxZeros);
+      let shorthand = String(opts.shorthand);
+      let capture = String(opts.capture);
+      let wrap = String(opts.wrap);
+      let cacheKey = min + ":" + max + "=" + relax + shorthand + capture + wrap;
+      if (toRegexRange.cache.hasOwnProperty(cacheKey)) {
+        return toRegexRange.cache[cacheKey].result;
+      }
+      let a = Math.min(min, max);
+      let b = Math.max(min, max);
+      if (Math.abs(a - b) === 1) {
+        let result = min + "|" + max;
+        if (opts.capture) {
+          return `(${result})`;
+        }
+        if (opts.wrap === false) {
+          return result;
+        }
+        return `(?:${result})`;
+      }
+      let isPadded = hasPadding(min) || hasPadding(max);
+      let state = { min, max, a, b };
+      let positives = [];
+      let negatives = [];
+      if (isPadded) {
+        state.isPadded = isPadded;
+        state.maxLen = String(state.max).length;
+      }
+      if (a < 0) {
+        let newMin = b < 0 ? Math.abs(b) : 1;
+        negatives = splitToPatterns(newMin, Math.abs(a), state, opts);
+        a = state.a = 0;
+      }
+      if (b >= 0) {
+        positives = splitToPatterns(a, b, state, opts);
+      }
+      state.negatives = negatives;
+      state.positives = positives;
+      state.result = collatePatterns(negatives, positives, opts);
+      if (opts.capture === true) {
+        state.result = `(${state.result})`;
+      } else if (opts.wrap !== false && positives.length + negatives.length > 1) {
+        state.result = `(?:${state.result})`;
+      }
+      toRegexRange.cache[cacheKey] = state;
+      return state.result;
+    }, "toRegexRange");
+    function collatePatterns(neg, pos, options) {
+      let onlyNegative = filterPatterns(neg, pos, "-", false, options) || [];
+      let onlyPositive = filterPatterns(pos, neg, "", false, options) || [];
+      let intersected = filterPatterns(neg, pos, "-?", true, options) || [];
+      let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);
+      return subpatterns.join("|");
+    }
+    __name(collatePatterns, "collatePatterns");
+    function splitToRanges(min, max) {
+      let nines = 1;
+      let zeros = 1;
+      let stop = countNines(min, nines);
+      let stops = /* @__PURE__ */ new Set([max]);
+      while (min <= stop && stop <= max) {
+        stops.add(stop);
+        nines += 1;
+        stop = countNines(min, nines);
+      }
+      stop = countZeros(max + 1, zeros) - 1;
+      while (min < stop && stop <= max) {
+        stops.add(stop);
+        zeros += 1;
+        stop = countZeros(max + 1, zeros) - 1;
+      }
+      stops = [...stops];
+      stops.sort(compare);
+      return stops;
+    }
+    __name(splitToRanges, "splitToRanges");
+    function rangeToPattern(start, stop, options) {
+      if (start === stop) {
+        return { pattern: start, count: [], digits: 0 };
+      }
+      let zipped = zip(start, stop);
+      let digits = zipped.length;
+      let pattern = "";
+      let count = 0;
+      for (let i = 0; i < digits; i++) {
+        let [startDigit, stopDigit] = zipped[i];
+        if (startDigit === stopDigit) {
+          pattern += startDigit;
+        } else if (startDigit !== "0" || stopDigit !== "9") {
+          pattern += toCharacterClass(startDigit, stopDigit, options);
+        } else {
+          count++;
+        }
+      }
+      if (count) {
+        pattern += options.shorthand === true ? "\\d" : "[0-9]";
+      }
+      return { pattern, count: [count], digits };
+    }
+    __name(rangeToPattern, "rangeToPattern");
+    function splitToPatterns(min, max, tok, options) {
+      let ranges = splitToRanges(min, max);
+      let tokens = [];
+      let start = min;
+      let prev;
+      for (let i = 0; i < ranges.length; i++) {
+        let max2 = ranges[i];
+        let obj = rangeToPattern(String(start), String(max2), options);
+        let zeros = "";
+        if (!tok.isPadded && prev && prev.pattern === obj.pattern) {
+          if (prev.count.length > 1) {
+            prev.count.pop();
+          }
+          prev.count.push(obj.count[0]);
+          prev.string = prev.pattern + toQuantifier(prev.count);
+          start = max2 + 1;
+          continue;
+        }
+        if (tok.isPadded) {
+          zeros = padZeros(max2, tok, options);
+        }
+        obj.string = zeros + obj.pattern + toQuantifier(obj.count);
+        tokens.push(obj);
+        start = max2 + 1;
+        prev = obj;
+      }
+      return tokens;
+    }
+    __name(splitToPatterns, "splitToPatterns");
+    function filterPatterns(arr, comparison, prefix, intersection, options) {
+      let result = [];
+      for (let ele of arr) {
+        let { string } = ele;
+        if (!intersection && !contains(comparison, "string", string)) {
+          result.push(prefix + string);
+        }
+        if (intersection && contains(comparison, "string", string)) {
+          result.push(prefix + string);
+        }
+      }
+      return result;
+    }
+    __name(filterPatterns, "filterPatterns");
+    function zip(a, b) {
+      let arr = [];
+      for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);
+      return arr;
+    }
+    __name(zip, "zip");
+    function compare(a, b) {
+      return a > b ? 1 : b > a ? -1 : 0;
+    }
+    __name(compare, "compare");
+    function contains(arr, key, val) {
+      return arr.some((ele) => ele[key] === val);
+    }
+    __name(contains, "contains");
+    function countNines(min, len) {
+      return Number(String(min).slice(0, -len) + "9".repeat(len));
+    }
+    __name(countNines, "countNines");
+    function countZeros(integer, zeros) {
+      return integer - integer % Math.pow(10, zeros);
+    }
+    __name(countZeros, "countZeros");
+    function toQuantifier(digits) {
+      let [start = 0, stop = ""] = digits;
+      if (stop || start > 1) {
+        return `{${start + (stop ? "," + stop : "")}}`;
+      }
+      return "";
+    }
+    __name(toQuantifier, "toQuantifier");
+    function toCharacterClass(a, b, options) {
+      return `[${a}${b - a === 1 ? "" : "-"}${b}]`;
+    }
+    __name(toCharacterClass, "toCharacterClass");
+    function hasPadding(str) {
+      return /^-?(0+)\d/.test(str);
+    }
+    __name(hasPadding, "hasPadding");
+    function padZeros(value, tok, options) {
+      if (!tok.isPadded) {
+        return value;
+      }
+      let diff = Math.abs(tok.maxLen - String(value).length);
+      let relax = options.relaxZeros !== false;
+      switch (diff) {
+        case 0:
+          return "";
+        case 1:
+          return relax ? "0?" : "0";
+        case 2:
+          return relax ? "0{0,2}" : "00";
+        default: {
+          return relax ? `0{0,${diff}}` : `0{${diff}}`;
+        }
+      }
+    }
+    __name(padZeros, "padZeros");
+    toRegexRange.cache = {};
+    toRegexRange.clearCache = () => toRegexRange.cache = {};
+    module2.exports = toRegexRange;
+  }
+});
+
+// node_modules/.pnpm/fill-range@7.1.1/node_modules/fill-range/index.js
+var require_fill_range = __commonJS({
+  "node_modules/.pnpm/fill-range@7.1.1/node_modules/fill-range/index.js"(exports2, module2) {
+    "use strict";
+    var util = require("util");
+    var toRegexRange = require_to_regex_range();
+    var isObject = /* @__PURE__ */ __name((val) => val !== null && typeof val === "object" && !Array.isArray(val), "isObject");
+    var transform = /* @__PURE__ */ __name((toNumber) => {
+      return (value) => toNumber === true ? Number(value) : String(value);
+    }, "transform");
+    var isValidValue = /* @__PURE__ */ __name((value) => {
+      return typeof value === "number" || typeof value === "string" && value !== "";
+    }, "isValidValue");
+    var isNumber = /* @__PURE__ */ __name((num) => Number.isInteger(+num), "isNumber");
+    var zeros = /* @__PURE__ */ __name((input) => {
+      let value = `${input}`;
+      let index = -1;
+      if (value[0] === "-") value = value.slice(1);
+      if (value === "0") return false;
+      while (value[++index] === "0") ;
+      return index > 0;
+    }, "zeros");
+    var stringify = /* @__PURE__ */ __name((start, end, options) => {
+      if (typeof start === "string" || typeof end === "string") {
+        return true;
+      }
+      return options.stringify === true;
+    }, "stringify");
+    var pad = /* @__PURE__ */ __name((input, maxLength, toNumber) => {
+      if (maxLength > 0) {
+        let dash = input[0] === "-" ? "-" : "";
+        if (dash) input = input.slice(1);
+        input = dash + input.padStart(dash ? maxLength - 1 : maxLength, "0");
+      }
+      if (toNumber === false) {
+        return String(input);
+      }
+      return input;
+    }, "pad");
+    var toMaxLen = /* @__PURE__ */ __name((input, maxLength) => {
+      let negative = input[0] === "-" ? "-" : "";
+      if (negative) {
+        input = input.slice(1);
+        maxLength--;
+      }
+      while (input.length < maxLength) input = "0" + input;
+      return negative ? "-" + input : input;
+    }, "toMaxLen");
+    var toSequence = /* @__PURE__ */ __name((parts, options, maxLen) => {
+      parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
+      parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
+      let prefix = options.capture ? "" : "?:";
+      let positives = "";
+      let negatives = "";
+      let result;
+      if (parts.positives.length) {
+        positives = parts.positives.map((v) => toMaxLen(String(v), maxLen)).join("|");
+      }
+      if (parts.negatives.length) {
+        negatives = `-(${prefix}${parts.negatives.map((v) => toMaxLen(String(v), maxLen)).join("|")})`;
+      }
+      if (positives && negatives) {
+        result = `${positives}|${negatives}`;
+      } else {
+        result = positives || negatives;
+      }
+      if (options.wrap) {
+        return `(${prefix}${result})`;
+      }
+      return result;
+    }, "toSequence");
+    var toRange = /* @__PURE__ */ __name((a, b, isNumbers, options) => {
+      if (isNumbers) {
+        return toRegexRange(a, b, { wrap: false, ...options });
+      }
+      let start = String.fromCharCode(a);
+      if (a === b) return start;
+      let stop = String.fromCharCode(b);
+      return `[${start}-${stop}]`;
+    }, "toRange");
+    var toRegex = /* @__PURE__ */ __name((start, end, options) => {
+      if (Array.isArray(start)) {
+        let wrap = options.wrap === true;
+        let prefix = options.capture ? "" : "?:";
+        return wrap ? `(${prefix}${start.join("|")})` : start.join("|");
+      }
+      return toRegexRange(start, end, options);
+    }, "toRegex");
+    var rangeError = /* @__PURE__ */ __name((...args) => {
+      return new RangeError("Invalid range arguments: " + util.inspect(...args));
+    }, "rangeError");
+    var invalidRange = /* @__PURE__ */ __name((start, end, options) => {
+      if (options.strictRanges === true) throw rangeError([start, end]);
+      return [];
+    }, "invalidRange");
+    var invalidStep = /* @__PURE__ */ __name((step, options) => {
+      if (options.strictRanges === true) {
+        throw new TypeError(`Expected step "${step}" to be a number`);
+      }
+      return [];
+    }, "invalidStep");
+    var fillNumbers = /* @__PURE__ */ __name((start, end, step = 1, options = {}) => {
+      let a = Number(start);
+      let b = Number(end);
+      if (!Number.isInteger(a) || !Number.isInteger(b)) {
+        if (options.strictRanges === true) throw rangeError([start, end]);
+        return [];
+      }
+      if (a === 0) a = 0;
+      if (b === 0) b = 0;
+      let descending = a > b;
+      let startString = String(start);
+      let endString = String(end);
+      let stepString = String(step);
+      step = Math.max(Math.abs(step), 1);
+      let padded = zeros(startString) || zeros(endString) || zeros(stepString);
+      let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;
+      let toNumber = padded === false && stringify(start, end, options) === false;
+      let format = options.transform || transform(toNumber);
+      if (options.toRegex && step === 1) {
+        return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);
+      }
+      let parts = { negatives: [], positives: [] };
+      let push = /* @__PURE__ */ __name((num) => parts[num < 0 ? "negatives" : "positives"].push(Math.abs(num)), "push");
+      let range = [];
+      let index = 0;
+      while (descending ? a >= b : a <= b) {
+        if (options.toRegex === true && step > 1) {
+          push(a);
+        } else {
+          range.push(pad(format(a, index), maxLen, toNumber));
+        }
+        a = descending ? a - step : a + step;
+        index++;
+      }
+      if (options.toRegex === true) {
+        return step > 1 ? toSequence(parts, options, maxLen) : toRegex(range, null, { wrap: false, ...options });
+      }
+      return range;
+    }, "fillNumbers");
+    var fillLetters = /* @__PURE__ */ __name((start, end, step = 1, options = {}) => {
+      if (!isNumber(start) && start.length > 1 || !isNumber(end) && end.length > 1) {
+        return invalidRange(start, end, options);
+      }
+      let format = options.transform || ((val) => String.fromCharCode(val));
+      let a = `${start}`.charCodeAt(0);
+      let b = `${end}`.charCodeAt(0);
+      let descending = a > b;
+      let min = Math.min(a, b);
+      let max = Math.max(a, b);
+      if (options.toRegex && step === 1) {
+        return toRange(min, max, false, options);
+      }
+      let range = [];
+      let index = 0;
+      while (descending ? a >= b : a <= b) {
+        range.push(format(a, index));
+        a = descending ? a - step : a + step;
+        index++;
+      }
+      if (options.toRegex === true) {
+        return toRegex(range, null, { wrap: false, options });
+      }
+      return range;
+    }, "fillLetters");
+    var fill = /* @__PURE__ */ __name((start, end, step, options = {}) => {
+      if (end == null && isValidValue(start)) {
+        return [start];
+      }
+      if (!isValidValue(start) || !isValidValue(end)) {
+        return invalidRange(start, end, options);
+      }
+      if (typeof step === "function") {
+        return fill(start, end, 1, { transform: step });
+      }
+      if (isObject(step)) {
+        return fill(start, end, 0, step);
+      }
+      let opts = { ...options };
+      if (opts.capture === true) opts.wrap = true;
+      step = step || opts.step || 1;
+      if (!isNumber(step)) {
+        if (step != null && !isObject(step)) return invalidStep(step, opts);
+        return fill(start, end, 1, step);
+      }
+      if (isNumber(start) && isNumber(end)) {
+        return fillNumbers(start, end, step, opts);
+      }
+      return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);
+    }, "fill");
+    module2.exports = fill;
+  }
+});
+
+// node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/compile.js
+var require_compile = __commonJS({
+  "node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/compile.js"(exports2, module2) {
+    "use strict";
+    var fill = require_fill_range();
+    var utils = require_utils2();
+    var compile = /* @__PURE__ */ __name((ast, options = {}) => {
+      const walk = /* @__PURE__ */ __name((node, parent = {}) => {
+        const invalidBlock = utils.isInvalidBrace(parent);
+        const invalidNode = node.invalid === true && options.escapeInvalid === true;
+        const invalid = invalidBlock === true || invalidNode === true;
+        const prefix = options.escapeInvalid === true ? "\\" : "";
+        let output = "";
+        if (node.isOpen === true) {
+          return prefix + node.value;
+        }
+        if (node.isClose === true) {
+          /* @__PURE__ */ console.log("node.isClose", prefix, node.value);
+          return prefix + node.value;
+        }
+        if (node.type === "open") {
+          return invalid ? prefix + node.value : "(";
+        }
+        if (node.type === "close") {
+          return invalid ? prefix + node.value : ")";
+        }
+        if (node.type === "comma") {
+          return node.prev.type === "comma" ? "" : invalid ? node.value : "|";
+        }
+        if (node.value) {
+          return node.value;
+        }
+        if (node.nodes && node.ranges > 0) {
+          const args = utils.reduce(node.nodes);
+          const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true });
+          if (range.length !== 0) {
+            return args.length > 1 && range.length > 1 ? `(${range})` : range;
+          }
+        }
+        if (node.nodes) {
+          for (const child of node.nodes) {
+            output += walk(child, node);
+          }
+        }
+        return output;
+      }, "walk");
+      return walk(ast);
+    }, "compile");
+    module2.exports = compile;
+  }
+});
+
+// node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/expand.js
+var require_expand = __commonJS({
+  "node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/expand.js"(exports2, module2) {
+    "use strict";
+    var fill = require_fill_range();
+    var stringify = require_stringify();
+    var utils = require_utils2();
+    var append = /* @__PURE__ */ __name((queue = "", stash = "", enclose = false) => {
+      const result = [];
+      queue = [].concat(queue);
+      stash = [].concat(stash);
+      if (!stash.length) return queue;
+      if (!queue.length) {
+        return enclose ? utils.flatten(stash).map((ele) => `{${ele}}`) : stash;
+      }
+      for (const item of queue) {
+        if (Array.isArray(item)) {
+          for (const value of item) {
+            result.push(append(value, stash, enclose));
+          }
+        } else {
+          for (let ele of stash) {
+            if (enclose === true && typeof ele === "string") ele = `{${ele}}`;
+            result.push(Array.isArray(ele) ? append(item, ele, enclose) : item + ele);
+          }
+        }
+      }
+      return utils.flatten(result);
+    }, "append");
+    var expand = /* @__PURE__ */ __name((ast, options = {}) => {
+      const rangeLimit = options.rangeLimit === void 0 ? 1e3 : options.rangeLimit;
+      const walk = /* @__PURE__ */ __name((node, parent = {}) => {
+        node.queue = [];
+        let p = parent;
+        let q = parent.queue;
+        while (p.type !== "brace" && p.type !== "root" && p.parent) {
+          p = p.parent;
+          q = p.queue;
+        }
+        if (node.invalid || node.dollar) {
+          q.push(append(q.pop(), stringify(node, options)));
+          return;
+        }
+        if (node.type === "brace" && node.invalid !== true && node.nodes.length === 2) {
+          q.push(append(q.pop(), ["{}"]));
+          return;
+        }
+        if (node.nodes && node.ranges > 0) {
+          const args = utils.reduce(node.nodes);
+          if (utils.exceedsLimit(...args, options.step, rangeLimit)) {
+            throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");
+          }
+          let range = fill(...args, options);
+          if (range.length === 0) {
+            range = stringify(node, options);
+          }
+          q.push(append(q.pop(), range));
+          node.nodes = [];
+          return;
+        }
+        const enclose = utils.encloseBrace(node);
+        let queue = node.queue;
+        let block = node;
+        while (block.type !== "brace" && block.type !== "root" && block.parent) {
+          block = block.parent;
+          queue = block.queue;
+        }
+        for (let i = 0; i < node.nodes.length; i++) {
+          const child = node.nodes[i];
+          if (child.type === "comma" && node.type === "brace") {
+            if (i === 1) queue.push("");
+            queue.push("");
+            continue;
+          }
+          if (child.type === "close") {
+            q.push(append(q.pop(), queue, enclose));
+            continue;
+          }
+          if (child.value && child.type !== "open") {
+            queue.push(append(queue.pop(), child.value));
+            continue;
+          }
+          if (child.nodes) {
+            walk(child, node);
+          }
+        }
+        return queue;
+      }, "walk");
+      return utils.flatten(walk(ast));
+    }, "expand");
+    module2.exports = expand;
+  }
+});
+
+// node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/constants.js
+var require_constants2 = __commonJS({
+  "node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/constants.js"(exports2, module2) {
+    "use strict";
+    module2.exports = {
+      MAX_LENGTH: 1e4,
+      // Digits
+      CHAR_0: "0",
+      /* 0 */
+      CHAR_9: "9",
+      /* 9 */
+      // Alphabet chars.
+      CHAR_UPPERCASE_A: "A",
+      /* A */
+      CHAR_LOWERCASE_A: "a",
+      /* a */
+      CHAR_UPPERCASE_Z: "Z",
+      /* Z */
+      CHAR_LOWERCASE_Z: "z",
+      /* z */
+      CHAR_LEFT_PARENTHESES: "(",
+      /* ( */
+      CHAR_RIGHT_PARENTHESES: ")",
+      /* ) */
+      CHAR_ASTERISK: "*",
+      /* * */
+      // Non-alphabetic chars.
+      CHAR_AMPERSAND: "&",
+      /* & */
+      CHAR_AT: "@",
+      /* @ */
+      CHAR_BACKSLASH: "\\",
+      /* \ */
+      CHAR_BACKTICK: "`",
+      /* ` */
+      CHAR_CARRIAGE_RETURN: "\r",
+      /* \r */
+      CHAR_CIRCUMFLEX_ACCENT: "^",
+      /* ^ */
+      CHAR_COLON: ":",
+      /* : */
+      CHAR_COMMA: ",",
+      /* , */
+      CHAR_DOLLAR: "$",
+      /* . */
+      CHAR_DOT: ".",
+      /* . */
+      CHAR_DOUBLE_QUOTE: '"',
+      /* " */
+      CHAR_EQUAL: "=",
+      /* = */
+      CHAR_EXCLAMATION_MARK: "!",
+      /* ! */
+      CHAR_FORM_FEED: "\f",
+      /* \f */
+      CHAR_FORWARD_SLASH: "/",
+      /* / */
+      CHAR_HASH: "#",
+      /* # */
+      CHAR_HYPHEN_MINUS: "-",
+      /* - */
+      CHAR_LEFT_ANGLE_BRACKET: "<",
+      /* < */
+      CHAR_LEFT_CURLY_BRACE: "{",
+      /* { */
+      CHAR_LEFT_SQUARE_BRACKET: "[",
+      /* [ */
+      CHAR_LINE_FEED: "\n",
+      /* \n */
+      CHAR_NO_BREAK_SPACE: " ",
+      /* \u00A0 */
+      CHAR_PERCENT: "%",
+      /* % */
+      CHAR_PLUS: "+",
+      /* + */
+      CHAR_QUESTION_MARK: "?",
+      /* ? */
+      CHAR_RIGHT_ANGLE_BRACKET: ">",
+      /* > */
+      CHAR_RIGHT_CURLY_BRACE: "}",
+      /* } */
+      CHAR_RIGHT_SQUARE_BRACKET: "]",
+      /* ] */
+      CHAR_SEMICOLON: ";",
+      /* ; */
+      CHAR_SINGLE_QUOTE: "'",
+      /* ' */
+      CHAR_SPACE: " ",
+      /*   */
+      CHAR_TAB: "	",
+      /* \t */
+      CHAR_UNDERSCORE: "_",
+      /* _ */
+      CHAR_VERTICAL_LINE: "|",
+      /* | */
+      CHAR_ZERO_WIDTH_NOBREAK_SPACE: "\uFEFF"
+      /* \uFEFF */
+    };
+  }
+});
+
+// node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/parse.js
+var require_parse2 = __commonJS({
+  "node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/parse.js"(exports2, module2) {
+    "use strict";
+    var stringify = require_stringify();
+    var {
+      MAX_LENGTH,
+      CHAR_BACKSLASH,
+      /* \ */
+      CHAR_BACKTICK,
+      /* ` */
+      CHAR_COMMA,
+      /* , */
+      CHAR_DOT,
+      /* . */
+      CHAR_LEFT_PARENTHESES,
+      /* ( */
+      CHAR_RIGHT_PARENTHESES,
+      /* ) */
+      CHAR_LEFT_CURLY_BRACE,
+      /* { */
+      CHAR_RIGHT_CURLY_BRACE,
+      /* } */
+      CHAR_LEFT_SQUARE_BRACKET,
+      /* [ */
+      CHAR_RIGHT_SQUARE_BRACKET,
+      /* ] */
+      CHAR_DOUBLE_QUOTE,
+      /* " */
+      CHAR_SINGLE_QUOTE,
+      /* ' */
+      CHAR_NO_BREAK_SPACE,
+      CHAR_ZERO_WIDTH_NOBREAK_SPACE
+    } = require_constants2();
+    var parse = /* @__PURE__ */ __name((input, options = {}) => {
+      if (typeof input !== "string") {
+        throw new TypeError("Expected a string");
+      }
+      const opts = options || {};
+      const max = typeof opts.maxLength === "number" ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
+      if (input.length > max) {
+        throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);
+      }
+      const ast = { type: "root", input, nodes: [] };
+      const stack = [ast];
+      let block = ast;
+      let prev = ast;
+      let brackets = 0;
+      const length = input.length;
+      let index = 0;
+      let depth = 0;
+      let value;
+      const advance = /* @__PURE__ */ __name(() => input[index++], "advance");
+      const push = /* @__PURE__ */ __name((node) => {
+        if (node.type === "text" && prev.type === "dot") {
+          prev.type = "text";
+        }
+        if (prev && prev.type === "text" && node.type === "text") {
+          prev.value += node.value;
+          return;
+        }
+        block.nodes.push(node);
+        node.parent = block;
+        node.prev = prev;
+        prev = node;
+        return node;
+      }, "push");
+      push({ type: "bos" });
+      while (index < length) {
+        block = stack[stack.length - 1];
+        value = advance();
+        if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {
+          continue;
+        }
+        if (value === CHAR_BACKSLASH) {
+          push({ type: "text", value: (options.keepEscaping ? value : "") + advance() });
+          continue;
+        }
+        if (value === CHAR_RIGHT_SQUARE_BRACKET) {
+          push({ type: "text", value: "\\" + value });
+          continue;
+        }
+        if (value === CHAR_LEFT_SQUARE_BRACKET) {
+          brackets++;
+          let next;
+          while (index < length && (next = advance())) {
+            value += next;
+            if (next === CHAR_LEFT_SQUARE_BRACKET) {
+              brackets++;
+              continue;
+            }
+            if (next === CHAR_BACKSLASH) {
+              value += advance();
+              continue;
+            }
+            if (next === CHAR_RIGHT_SQUARE_BRACKET) {
+              brackets--;
+              if (brackets === 0) {
+                break;
+              }
+            }
+          }
+          push({ type: "text", value });
+          continue;
+        }
+        if (value === CHAR_LEFT_PARENTHESES) {
+          block = push({ type: "paren", nodes: [] });
+          stack.push(block);
+          push({ type: "text", value });
+          continue;
+        }
+        if (value === CHAR_RIGHT_PARENTHESES) {
+          if (block.type !== "paren") {
+            push({ type: "text", value });
+            continue;
+          }
+          block = stack.pop();
+          push({ type: "text", value });
+          block = stack[stack.length - 1];
+          continue;
+        }
+        if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {
+          const open = value;
+          let next;
+          if (options.keepQuotes !== true) {
+            value = "";
+          }
+          while (index < length && (next = advance())) {
+            if (next === CHAR_BACKSLASH) {
+              value += next + advance();
+              continue;
+            }
+            if (next === open) {
+              if (options.keepQuotes === true) value += next;
+              break;
+            }
+            value += next;
+          }
+          push({ type: "text", value });
+          continue;
+        }
+        if (value === CHAR_LEFT_CURLY_BRACE) {
+          depth++;
+          const dollar = prev.value && prev.value.slice(-1) === "$" || block.dollar === true;
+          const brace = {
+            type: "brace",
+            open: true,
+            close: false,
+            dollar,
+            depth,
+            commas: 0,
+            ranges: 0,
+            nodes: []
+          };
+          block = push(brace);
+          stack.push(block);
+          push({ type: "open", value });
+          continue;
+        }
+        if (value === CHAR_RIGHT_CURLY_BRACE) {
+          if (block.type !== "brace") {
+            push({ type: "text", value });
+            continue;
+          }
+          const type = "close";
+          block = stack.pop();
+          block.close = true;
+          push({ type, value });
+          depth--;
+          block = stack[stack.length - 1];
+          continue;
+        }
+        if (value === CHAR_COMMA && depth > 0) {
+          if (block.ranges > 0) {
+            block.ranges = 0;
+            const open = block.nodes.shift();
+            block.nodes = [open, { type: "text", value: stringify(block) }];
+          }
+          push({ type: "comma", value });
+          block.commas++;
+          continue;
+        }
+        if (value === CHAR_DOT && depth > 0 && block.commas === 0) {
+          const siblings = block.nodes;
+          if (depth === 0 || siblings.length === 0) {
+            push({ type: "text", value });
+            continue;
+          }
+          if (prev.type === "dot") {
+            block.range = [];
+            prev.value += value;
+            prev.type = "range";
+            if (block.nodes.length !== 3 && block.nodes.length !== 5) {
+              block.invalid = true;
+              block.ranges = 0;
+              prev.type = "text";
+              continue;
+            }
+            block.ranges++;
+            block.args = [];
+            continue;
+          }
+          if (prev.type === "range") {
+            siblings.pop();
+            const before = siblings[siblings.length - 1];
+            before.value += prev.value + value;
+            prev = before;
+            block.ranges--;
+            continue;
+          }
+          push({ type: "dot", value });
+          continue;
+        }
+        push({ type: "text", value });
+      }
+      do {
+        block = stack.pop();
+        if (block.type !== "root") {
+          block.nodes.forEach((node) => {
+            if (!node.nodes) {
+              if (node.type === "open") node.isOpen = true;
+              if (node.type === "close") node.isClose = true;
+              if (!node.nodes) node.type = "text";
+              node.invalid = true;
+            }
+          });
+          const parent = stack[stack.length - 1];
+          const index2 = parent.nodes.indexOf(block);
+          parent.nodes.splice(index2, 1, ...block.nodes);
+        }
+      } while (stack.length > 0);
+      push({ type: "eos" });
+      return ast;
+    }, "parse");
+    module2.exports = parse;
+  }
+});
+
+// node_modules/.pnpm/braces@3.0.3/node_modules/braces/index.js
+var require_braces = __commonJS({
+  "node_modules/.pnpm/braces@3.0.3/node_modules/braces/index.js"(exports2, module2) {
+    "use strict";
+    var stringify = require_stringify();
+    var compile = require_compile();
+    var expand = require_expand();
+    var parse = require_parse2();
+    var braces = /* @__PURE__ */ __name((input, options = {}) => {
+      let output = [];
+      if (Array.isArray(input)) {
+        for (const pattern of input) {
+          const result = braces.create(pattern, options);
+          if (Array.isArray(result)) {
+            output.push(...result);
+          } else {
+            output.push(result);
+          }
+        }
+      } else {
+        output = [].concat(braces.create(input, options));
+      }
+      if (options && options.expand === true && options.nodupes === true) {
+        output = [...new Set(output)];
+      }
+      return output;
+    }, "braces");
+    braces.parse = (input, options = {}) => parse(input, options);
+    braces.stringify = (input, options = {}) => {
+      if (typeof input === "string") {
+        return stringify(braces.parse(input, options), options);
+      }
+      return stringify(input, options);
+    };
+    braces.compile = (input, options = {}) => {
+      if (typeof input === "string") {
+        input = braces.parse(input, options);
+      }
+      return compile(input, options);
+    };
+    braces.expand = (input, options = {}) => {
+      if (typeof input === "string") {
+        input = braces.parse(input, options);
+      }
+      let result = expand(input, options);
+      if (options.noempty === true) {
+        result = result.filter(Boolean);
+      }
+      if (options.nodupes === true) {
+        result = [...new Set(result)];
+      }
+      return result;
+    };
+    braces.create = (input, options = {}) => {
+      if (input === "" || input.length < 3) {
+        return [input];
+      }
+      return options.expand !== true ? braces.compile(input, options) : braces.expand(input, options);
+    };
+    module2.exports = braces;
+  }
+});
+
+// node_modules/.pnpm/micromatch@4.0.8/node_modules/micromatch/index.js
+var require_micromatch = __commonJS({
+  "node_modules/.pnpm/micromatch@4.0.8/node_modules/micromatch/index.js"(exports2, module2) {
+    "use strict";
+    var util = require("util");
+    var braces = require_braces();
+    var picomatch2 = require_picomatch2();
+    var utils = require_utils();
+    var isEmptyString = /* @__PURE__ */ __name((v) => v === "" || v === "./", "isEmptyString");
+    var hasBraces = /* @__PURE__ */ __name((v) => {
+      const index = v.indexOf("{");
+      return index > -1 && v.indexOf("}", index) > -1;
+    }, "hasBraces");
+    var micromatch = /* @__PURE__ */ __name((list, patterns, options) => {
+      patterns = [].concat(patterns);
+      list = [].concat(list);
+      let omit = /* @__PURE__ */ new Set();
+      let keep = /* @__PURE__ */ new Set();
+      let items = /* @__PURE__ */ new Set();
+      let negatives = 0;
+      let onResult = /* @__PURE__ */ __name((state) => {
+        items.add(state.output);
+        if (options && options.onResult) {
+          options.onResult(state);
+        }
+      }, "onResult");
+      for (let i = 0; i < patterns.length; i++) {
+        let isMatch = picomatch2(String(patterns[i]), { ...options, onResult }, true);
+        let negated = isMatch.state.negated || isMatch.state.negatedExtglob;
+        if (negated) negatives++;
+        for (let item of list) {
+          let matched = isMatch(item, true);
+          let match = negated ? !matched.isMatch : matched.isMatch;
+          if (!match) continue;
+          if (negated) {
+            omit.add(matched.output);
+          } else {
+            omit.delete(matched.output);
+            keep.add(matched.output);
+          }
+        }
+      }
+      let result = negatives === patterns.length ? [...items] : [...keep];
+      let matches = result.filter((item) => !omit.has(item));
+      if (options && matches.length === 0) {
+        if (options.failglob === true) {
+          throw new Error(`No matches found for "${patterns.join(", ")}"`);
+        }
+        if (options.nonull === true || options.nullglob === true) {
+          return options.unescape ? patterns.map((p) => p.replace(/\\/g, "")) : patterns;
+        }
+      }
+      return matches;
+    }, "micromatch");
+    micromatch.match = micromatch;
+    micromatch.matcher = (pattern, options) => picomatch2(pattern, options);
+    micromatch.isMatch = (str, patterns, options) => picomatch2(patterns, options)(str);
+    micromatch.any = micromatch.isMatch;
+    micromatch.not = (list, patterns, options = {}) => {
+      patterns = [].concat(patterns).map(String);
+      let result = /* @__PURE__ */ new Set();
+      let items = [];
+      let onResult = /* @__PURE__ */ __name((state) => {
+        if (options.onResult) options.onResult(state);
+        items.push(state.output);
+      }, "onResult");
+      let matches = new Set(micromatch(list, patterns, { ...options, onResult }));
+      for (let item of items) {
+        if (!matches.has(item)) {
+          result.add(item);
+        }
+      }
+      return [...result];
+    };
+    micromatch.contains = (str, pattern, options) => {
+      if (typeof str !== "string") {
+        throw new TypeError(`Expected a string: "${util.inspect(str)}"`);
+      }
+      if (Array.isArray(pattern)) {
+        return pattern.some((p) => micromatch.contains(str, p, options));
+      }
+      if (typeof pattern === "string") {
+        if (isEmptyString(str) || isEmptyString(pattern)) {
+          return false;
+        }
+        if (str.includes(pattern) || str.startsWith("./") && str.slice(2).includes(pattern)) {
+          return true;
+        }
+      }
+      return micromatch.isMatch(str, pattern, { ...options, contains: true });
+    };
+    micromatch.matchKeys = (obj, patterns, options) => {
+      if (!utils.isObject(obj)) {
+        throw new TypeError("Expected the first argument to be an object");
+      }
+      let keys = micromatch(Object.keys(obj), patterns, options);
+      let res = {};
+      for (let key of keys) res[key] = obj[key];
+      return res;
+    };
+    micromatch.some = (list, patterns, options) => {
+      let items = [].concat(list);
+      for (let pattern of [].concat(patterns)) {
+        let isMatch = picomatch2(String(pattern), options);
+        if (items.some((item) => isMatch(item))) {
+          return true;
+        }
+      }
+      return false;
+    };
+    micromatch.every = (list, patterns, options) => {
+      let items = [].concat(list);
+      for (let pattern of [].concat(patterns)) {
+        let isMatch = picomatch2(String(pattern), options);
+        if (!items.every((item) => isMatch(item))) {
+          return false;
+        }
+      }
+      return true;
+    };
+    micromatch.all = (str, patterns, options) => {
+      if (typeof str !== "string") {
+        throw new TypeError(`Expected a string: "${util.inspect(str)}"`);
+      }
+      return [].concat(patterns).every((p) => picomatch2(p, options)(str));
+    };
+    micromatch.capture = (glob2, input, options) => {
+      let posix = utils.isWindows(options);
+      let regex = picomatch2.makeRe(String(glob2), { ...options, capture: true });
+      let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);
+      if (match) {
+        return match.slice(1).map((v) => v === void 0 ? "" : v);
+      }
+    };
+    micromatch.makeRe = (...args) => picomatch2.makeRe(...args);
+    micromatch.scan = (...args) => picomatch2.scan(...args);
+    micromatch.parse = (patterns, options) => {
+      let res = [];
+      for (let pattern of [].concat(patterns || [])) {
+        for (let str of braces(String(pattern), options)) {
+          res.push(picomatch2.parse(str, options));
+        }
+      }
+      return res;
+    };
+    micromatch.braces = (pattern, options) => {
+      if (typeof pattern !== "string") throw new TypeError("Expected a string");
+      if (options && options.nobrace === true || !hasBraces(pattern)) {
+        return [pattern];
+      }
+      return braces(pattern, options);
+    };
+    micromatch.braceExpand = (pattern, options) => {
+      if (typeof pattern !== "string") throw new TypeError("Expected a string");
+      return micromatch.braces(pattern, { ...options, expand: true });
+    };
+    micromatch.hasBraces = hasBraces;
+    module2.exports = micromatch;
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/pattern.js
+var require_pattern = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/pattern.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.isAbsolute = exports2.partitionAbsoluteAndRelative = exports2.removeDuplicateSlashes = exports2.matchAny = exports2.convertPatternsToRe = exports2.makeRe = exports2.getPatternParts = exports2.expandBraceExpansion = exports2.expandPatternsWithBraceExpansion = exports2.isAffectDepthOfReadingPattern = exports2.endsWithSlashGlobStar = exports2.hasGlobStar = exports2.getBaseDirectory = exports2.isPatternRelatedToParentDirectory = exports2.getPatternsOutsideCurrentDirectory = exports2.getPatternsInsideCurrentDirectory = exports2.getPositivePatterns = exports2.getNegativePatterns = exports2.isPositivePattern = exports2.isNegativePattern = exports2.convertToNegativePattern = exports2.convertToPositivePattern = exports2.isDynamicPattern = exports2.isStaticPattern = void 0;
+    var path6 = require("path");
+    var globParent = require_glob_parent();
+    var micromatch = require_micromatch();
+    var GLOBSTAR = "**";
+    var ESCAPE_SYMBOL = "\\";
+    var COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/;
+    var REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\[[^[]*]/;
+    var REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\([^(]*\|[^|]*\)/;
+    var GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\([^(]*\)/;
+    var BRACE_EXPANSION_SEPARATORS_RE = /,|\.\./;
+    var DOUBLE_SLASH_RE = /(?!^)\/{2,}/g;
+    function isStaticPattern(pattern, options = {}) {
+      return !isDynamicPattern2(pattern, options);
+    }
+    __name(isStaticPattern, "isStaticPattern");
+    exports2.isStaticPattern = isStaticPattern;
+    function isDynamicPattern2(pattern, options = {}) {
+      if (pattern === "") {
+        return false;
+      }
+      if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) {
+        return true;
+      }
+      if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) {
+        return true;
+      }
+      if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) {
+        return true;
+      }
+      if (options.braceExpansion !== false && hasBraceExpansion(pattern)) {
+        return true;
+      }
+      return false;
+    }
+    __name(isDynamicPattern2, "isDynamicPattern");
+    exports2.isDynamicPattern = isDynamicPattern2;
+    function hasBraceExpansion(pattern) {
+      const openingBraceIndex = pattern.indexOf("{");
+      if (openingBraceIndex === -1) {
+        return false;
+      }
+      const closingBraceIndex = pattern.indexOf("}", openingBraceIndex + 1);
+      if (closingBraceIndex === -1) {
+        return false;
+      }
+      const braceContent = pattern.slice(openingBraceIndex, closingBraceIndex);
+      return BRACE_EXPANSION_SEPARATORS_RE.test(braceContent);
+    }
+    __name(hasBraceExpansion, "hasBraceExpansion");
+    function convertToPositivePattern(pattern) {
+      return isNegativePattern2(pattern) ? pattern.slice(1) : pattern;
+    }
+    __name(convertToPositivePattern, "convertToPositivePattern");
+    exports2.convertToPositivePattern = convertToPositivePattern;
+    function convertToNegativePattern(pattern) {
+      return "!" + pattern;
+    }
+    __name(convertToNegativePattern, "convertToNegativePattern");
+    exports2.convertToNegativePattern = convertToNegativePattern;
+    function isNegativePattern2(pattern) {
+      return pattern.startsWith("!") && pattern[1] !== "(";
+    }
+    __name(isNegativePattern2, "isNegativePattern");
+    exports2.isNegativePattern = isNegativePattern2;
+    function isPositivePattern(pattern) {
+      return !isNegativePattern2(pattern);
+    }
+    __name(isPositivePattern, "isPositivePattern");
+    exports2.isPositivePattern = isPositivePattern;
+    function getNegativePatterns(patterns) {
+      return patterns.filter(isNegativePattern2);
+    }
+    __name(getNegativePatterns, "getNegativePatterns");
+    exports2.getNegativePatterns = getNegativePatterns;
+    function getPositivePatterns(patterns) {
+      return patterns.filter(isPositivePattern);
+    }
+    __name(getPositivePatterns, "getPositivePatterns");
+    exports2.getPositivePatterns = getPositivePatterns;
+    function getPatternsInsideCurrentDirectory(patterns) {
+      return patterns.filter((pattern) => !isPatternRelatedToParentDirectory(pattern));
+    }
+    __name(getPatternsInsideCurrentDirectory, "getPatternsInsideCurrentDirectory");
+    exports2.getPatternsInsideCurrentDirectory = getPatternsInsideCurrentDirectory;
+    function getPatternsOutsideCurrentDirectory(patterns) {
+      return patterns.filter(isPatternRelatedToParentDirectory);
+    }
+    __name(getPatternsOutsideCurrentDirectory, "getPatternsOutsideCurrentDirectory");
+    exports2.getPatternsOutsideCurrentDirectory = getPatternsOutsideCurrentDirectory;
+    function isPatternRelatedToParentDirectory(pattern) {
+      return pattern.startsWith("..") || pattern.startsWith("./..");
+    }
+    __name(isPatternRelatedToParentDirectory, "isPatternRelatedToParentDirectory");
+    exports2.isPatternRelatedToParentDirectory = isPatternRelatedToParentDirectory;
+    function getBaseDirectory(pattern) {
+      return globParent(pattern, { flipBackslashes: false });
+    }
+    __name(getBaseDirectory, "getBaseDirectory");
+    exports2.getBaseDirectory = getBaseDirectory;
+    function hasGlobStar(pattern) {
+      return pattern.includes(GLOBSTAR);
+    }
+    __name(hasGlobStar, "hasGlobStar");
+    exports2.hasGlobStar = hasGlobStar;
+    function endsWithSlashGlobStar(pattern) {
+      return pattern.endsWith("/" + GLOBSTAR);
+    }
+    __name(endsWithSlashGlobStar, "endsWithSlashGlobStar");
+    exports2.endsWithSlashGlobStar = endsWithSlashGlobStar;
+    function isAffectDepthOfReadingPattern(pattern) {
+      const basename = path6.basename(pattern);
+      return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);
+    }
+    __name(isAffectDepthOfReadingPattern, "isAffectDepthOfReadingPattern");
+    exports2.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;
+    function expandPatternsWithBraceExpansion(patterns) {
+      return patterns.reduce((collection, pattern) => {
+        return collection.concat(expandBraceExpansion(pattern));
+      }, []);
+    }
+    __name(expandPatternsWithBraceExpansion, "expandPatternsWithBraceExpansion");
+    exports2.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion;
+    function expandBraceExpansion(pattern) {
+      const patterns = micromatch.braces(pattern, { expand: true, nodupes: true, keepEscaping: true });
+      patterns.sort((a, b) => a.length - b.length);
+      return patterns.filter((pattern2) => pattern2 !== "");
+    }
+    __name(expandBraceExpansion, "expandBraceExpansion");
+    exports2.expandBraceExpansion = expandBraceExpansion;
+    function getPatternParts(pattern, options) {
+      let { parts } = micromatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true }));
+      if (parts.length === 0) {
+        parts = [pattern];
+      }
+      if (parts[0].startsWith("/")) {
+        parts[0] = parts[0].slice(1);
+        parts.unshift("");
+      }
+      return parts;
+    }
+    __name(getPatternParts, "getPatternParts");
+    exports2.getPatternParts = getPatternParts;
+    function makeRe(pattern, options) {
+      return micromatch.makeRe(pattern, options);
+    }
+    __name(makeRe, "makeRe");
+    exports2.makeRe = makeRe;
+    function convertPatternsToRe(patterns, options) {
+      return patterns.map((pattern) => makeRe(pattern, options));
+    }
+    __name(convertPatternsToRe, "convertPatternsToRe");
+    exports2.convertPatternsToRe = convertPatternsToRe;
+    function matchAny(entry, patternsRe) {
+      return patternsRe.some((patternRe) => patternRe.test(entry));
+    }
+    __name(matchAny, "matchAny");
+    exports2.matchAny = matchAny;
+    function removeDuplicateSlashes(pattern) {
+      return pattern.replace(DOUBLE_SLASH_RE, "/");
+    }
+    __name(removeDuplicateSlashes, "removeDuplicateSlashes");
+    exports2.removeDuplicateSlashes = removeDuplicateSlashes;
+    function partitionAbsoluteAndRelative(patterns) {
+      const absolute = [];
+      const relative = [];
+      for (const pattern of patterns) {
+        if (isAbsolute(pattern)) {
+          absolute.push(pattern);
+        } else {
+          relative.push(pattern);
+        }
+      }
+      return [absolute, relative];
+    }
+    __name(partitionAbsoluteAndRelative, "partitionAbsoluteAndRelative");
+    exports2.partitionAbsoluteAndRelative = partitionAbsoluteAndRelative;
+    function isAbsolute(pattern) {
+      return path6.isAbsolute(pattern);
+    }
+    __name(isAbsolute, "isAbsolute");
+    exports2.isAbsolute = isAbsolute;
+  }
+});
+
+// node_modules/.pnpm/merge2@1.4.1/node_modules/merge2/index.js
+var require_merge2 = __commonJS({
+  "node_modules/.pnpm/merge2@1.4.1/node_modules/merge2/index.js"(exports2, module2) {
+    "use strict";
+    var Stream = require("stream");
+    var PassThrough = Stream.PassThrough;
+    var slice = Array.prototype.slice;
+    module2.exports = merge2;
+    function merge2() {
+      const streamsQueue = [];
+      const args = slice.call(arguments);
+      let merging = false;
+      let options = args[args.length - 1];
+      if (options && !Array.isArray(options) && options.pipe == null) {
+        args.pop();
+      } else {
+        options = {};
+      }
+      const doEnd = options.end !== false;
+      const doPipeError = options.pipeError === true;
+      if (options.objectMode == null) {
+        options.objectMode = true;
+      }
+      if (options.highWaterMark == null) {
+        options.highWaterMark = 64 * 1024;
+      }
+      const mergedStream = PassThrough(options);
+      function addStream() {
+        for (let i = 0, len = arguments.length; i < len; i++) {
+          streamsQueue.push(pauseStreams(arguments[i], options));
+        }
+        mergeStream();
+        return this;
+      }
+      __name(addStream, "addStream");
+      function mergeStream() {
+        if (merging) {
+          return;
+        }
+        merging = true;
+        let streams = streamsQueue.shift();
+        if (!streams) {
+          process.nextTick(endStream2);
+          return;
+        }
+        if (!Array.isArray(streams)) {
+          streams = [streams];
+        }
+        let pipesCount = streams.length + 1;
+        function next() {
+          if (--pipesCount > 0) {
+            return;
+          }
+          merging = false;
+          mergeStream();
+        }
+        __name(next, "next");
+        function pipe(stream) {
+          function onend() {
+            stream.removeListener("merge2UnpipeEnd", onend);
+            stream.removeListener("end", onend);
+            if (doPipeError) {
+              stream.removeListener("error", onerror);
+            }
+            next();
+          }
+          __name(onend, "onend");
+          function onerror(err) {
+            mergedStream.emit("error", err);
+          }
+          __name(onerror, "onerror");
+          if (stream._readableState.endEmitted) {
+            return next();
+          }
+          stream.on("merge2UnpipeEnd", onend);
+          stream.on("end", onend);
+          if (doPipeError) {
+            stream.on("error", onerror);
+          }
+          stream.pipe(mergedStream, { end: false });
+          stream.resume();
+        }
+        __name(pipe, "pipe");
+        for (let i = 0; i < streams.length; i++) {
+          pipe(streams[i]);
+        }
+        next();
+      }
+      __name(mergeStream, "mergeStream");
+      function endStream2() {
+        merging = false;
+        mergedStream.emit("queueDrain");
+        if (doEnd) {
+          mergedStream.end();
+        }
+      }
+      __name(endStream2, "endStream");
+      mergedStream.setMaxListeners(0);
+      mergedStream.add = addStream;
+      mergedStream.on("unpipe", function(stream) {
+        stream.emit("merge2UnpipeEnd");
+      });
+      if (args.length) {
+        addStream.apply(null, args);
+      }
+      return mergedStream;
+    }
+    __name(merge2, "merge2");
+    function pauseStreams(streams, options) {
+      if (!Array.isArray(streams)) {
+        if (!streams._readableState && streams.pipe) {
+          streams = streams.pipe(PassThrough(options));
+        }
+        if (!streams._readableState || !streams.pause || !streams.pipe) {
+          throw new Error("Only readable stream can be merged.");
+        }
+        streams.pause();
+      } else {
+        for (let i = 0, len = streams.length; i < len; i++) {
+          streams[i] = pauseStreams(streams[i], options);
+        }
+      }
+      return streams;
+    }
+    __name(pauseStreams, "pauseStreams");
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/stream.js
+var require_stream = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/stream.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.merge = void 0;
+    var merge2 = require_merge2();
+    function merge(streams) {
+      const mergedStream = merge2(streams);
+      streams.forEach((stream) => {
+        stream.once("error", (error) => mergedStream.emit("error", error));
+      });
+      mergedStream.once("close", () => propagateCloseEventToSources(streams));
+      mergedStream.once("end", () => propagateCloseEventToSources(streams));
+      return mergedStream;
+    }
+    __name(merge, "merge");
+    exports2.merge = merge;
+    function propagateCloseEventToSources(streams) {
+      streams.forEach((stream) => stream.emit("close"));
+    }
+    __name(propagateCloseEventToSources, "propagateCloseEventToSources");
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/string.js
+var require_string = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/string.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.isEmpty = exports2.isString = void 0;
+    function isString(input) {
+      return typeof input === "string";
+    }
+    __name(isString, "isString");
+    exports2.isString = isString;
+    function isEmpty(input) {
+      return input === "";
+    }
+    __name(isEmpty, "isEmpty");
+    exports2.isEmpty = isEmpty;
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/index.js
+var require_utils3 = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.string = exports2.stream = exports2.pattern = exports2.path = exports2.fs = exports2.errno = exports2.array = void 0;
+    var array = require_array();
+    exports2.array = array;
+    var errno = require_errno();
+    exports2.errno = errno;
+    var fs5 = require_fs();
+    exports2.fs = fs5;
+    var path6 = require_path();
+    exports2.path = path6;
+    var pattern = require_pattern();
+    exports2.pattern = pattern;
+    var stream = require_stream();
+    exports2.stream = stream;
+    var string = require_string();
+    exports2.string = string;
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/managers/tasks.js
+var require_tasks = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/managers/tasks.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.convertPatternGroupToTask = exports2.convertPatternGroupsToTasks = exports2.groupPatternsByBaseDirectory = exports2.getNegativePatternsAsPositive = exports2.getPositivePatterns = exports2.convertPatternsToTasks = exports2.generate = void 0;
+    var utils = require_utils3();
+    function generate(input, settings) {
+      const patterns = processPatterns(input, settings);
+      const ignore = processPatterns(settings.ignore, settings);
+      const positivePatterns = getPositivePatterns(patterns);
+      const negativePatterns = getNegativePatternsAsPositive(patterns, ignore);
+      const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings));
+      const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings));
+      const staticTasks = convertPatternsToTasks(
+        staticPatterns,
+        negativePatterns,
+        /* dynamic */
+        false
+      );
+      const dynamicTasks = convertPatternsToTasks(
+        dynamicPatterns,
+        negativePatterns,
+        /* dynamic */
+        true
+      );
+      return staticTasks.concat(dynamicTasks);
+    }
+    __name(generate, "generate");
+    exports2.generate = generate;
+    function processPatterns(input, settings) {
+      let patterns = input;
+      if (settings.braceExpansion) {
+        patterns = utils.pattern.expandPatternsWithBraceExpansion(patterns);
+      }
+      if (settings.baseNameMatch) {
+        patterns = patterns.map((pattern) => pattern.includes("/") ? pattern : `**/${pattern}`);
+      }
+      return patterns.map((pattern) => utils.pattern.removeDuplicateSlashes(pattern));
+    }
+    __name(processPatterns, "processPatterns");
+    function convertPatternsToTasks(positive, negative, dynamic) {
+      const tasks = [];
+      const patternsOutsideCurrentDirectory = utils.pattern.getPatternsOutsideCurrentDirectory(positive);
+      const patternsInsideCurrentDirectory = utils.pattern.getPatternsInsideCurrentDirectory(positive);
+      const outsideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsOutsideCurrentDirectory);
+      const insideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsInsideCurrentDirectory);
+      tasks.push(...convertPatternGroupsToTasks(outsideCurrentDirectoryGroup, negative, dynamic));
+      if ("." in insideCurrentDirectoryGroup) {
+        tasks.push(convertPatternGroupToTask(".", patternsInsideCurrentDirectory, negative, dynamic));
+      } else {
+        tasks.push(...convertPatternGroupsToTasks(insideCurrentDirectoryGroup, negative, dynamic));
+      }
+      return tasks;
+    }
+    __name(convertPatternsToTasks, "convertPatternsToTasks");
+    exports2.convertPatternsToTasks = convertPatternsToTasks;
+    function getPositivePatterns(patterns) {
+      return utils.pattern.getPositivePatterns(patterns);
+    }
+    __name(getPositivePatterns, "getPositivePatterns");
+    exports2.getPositivePatterns = getPositivePatterns;
+    function getNegativePatternsAsPositive(patterns, ignore) {
+      const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore);
+      const positive = negative.map(utils.pattern.convertToPositivePattern);
+      return positive;
+    }
+    __name(getNegativePatternsAsPositive, "getNegativePatternsAsPositive");
+    exports2.getNegativePatternsAsPositive = getNegativePatternsAsPositive;
+    function groupPatternsByBaseDirectory(patterns) {
+      const group = {};
+      return patterns.reduce((collection, pattern) => {
+        const base = utils.pattern.getBaseDirectory(pattern);
+        if (base in collection) {
+          collection[base].push(pattern);
+        } else {
+          collection[base] = [pattern];
+        }
+        return collection;
+      }, group);
+    }
+    __name(groupPatternsByBaseDirectory, "groupPatternsByBaseDirectory");
+    exports2.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;
+    function convertPatternGroupsToTasks(positive, negative, dynamic) {
+      return Object.keys(positive).map((base) => {
+        return convertPatternGroupToTask(base, positive[base], negative, dynamic);
+      });
+    }
+    __name(convertPatternGroupsToTasks, "convertPatternGroupsToTasks");
+    exports2.convertPatternGroupsToTasks = convertPatternGroupsToTasks;
+    function convertPatternGroupToTask(base, positive, negative, dynamic) {
+      return {
+        dynamic,
+        positive,
+        negative,
+        base,
+        patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern))
+      };
+    }
+    __name(convertPatternGroupToTask, "convertPatternGroupToTask");
+    exports2.convertPatternGroupToTask = convertPatternGroupToTask;
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/providers/async.js
+var require_async = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/providers/async.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.read = void 0;
+    function read(path6, settings, callback) {
+      settings.fs.lstat(path6, (lstatError, lstat) => {
+        if (lstatError !== null) {
+          callFailureCallback(callback, lstatError);
+          return;
+        }
+        if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {
+          callSuccessCallback(callback, lstat);
+          return;
+        }
+        settings.fs.stat(path6, (statError, stat) => {
+          if (statError !== null) {
+            if (settings.throwErrorOnBrokenSymbolicLink) {
+              callFailureCallback(callback, statError);
+              return;
+            }
+            callSuccessCallback(callback, lstat);
+            return;
+          }
+          if (settings.markSymbolicLink) {
+            stat.isSymbolicLink = () => true;
+          }
+          callSuccessCallback(callback, stat);
+        });
+      });
+    }
+    __name(read, "read");
+    exports2.read = read;
+    function callFailureCallback(callback, error) {
+      callback(error);
+    }
+    __name(callFailureCallback, "callFailureCallback");
+    function callSuccessCallback(callback, result) {
+      callback(null, result);
+    }
+    __name(callSuccessCallback, "callSuccessCallback");
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/providers/sync.js
+var require_sync = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/providers/sync.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.read = void 0;
+    function read(path6, settings) {
+      const lstat = settings.fs.lstatSync(path6);
+      if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {
+        return lstat;
+      }
+      try {
+        const stat = settings.fs.statSync(path6);
+        if (settings.markSymbolicLink) {
+          stat.isSymbolicLink = () => true;
+        }
+        return stat;
+      } catch (error) {
+        if (!settings.throwErrorOnBrokenSymbolicLink) {
+          return lstat;
+        }
+        throw error;
+      }
+    }
+    __name(read, "read");
+    exports2.read = read;
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/adapters/fs.js
+var require_fs2 = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/adapters/fs.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.createFileSystemAdapter = exports2.FILE_SYSTEM_ADAPTER = void 0;
+    var fs5 = require("fs");
+    exports2.FILE_SYSTEM_ADAPTER = {
+      lstat: fs5.lstat,
+      stat: fs5.stat,
+      lstatSync: fs5.lstatSync,
+      statSync: fs5.statSync
+    };
+    function createFileSystemAdapter(fsMethods) {
+      if (fsMethods === void 0) {
+        return exports2.FILE_SYSTEM_ADAPTER;
+      }
+      return Object.assign(Object.assign({}, exports2.FILE_SYSTEM_ADAPTER), fsMethods);
+    }
+    __name(createFileSystemAdapter, "createFileSystemAdapter");
+    exports2.createFileSystemAdapter = createFileSystemAdapter;
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/settings.js
+var require_settings = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/settings.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var fs5 = require_fs2();
+    var Settings = class {
+      static {
+        __name(this, "Settings");
+      }
+      constructor(_options = {}) {
+        this._options = _options;
+        this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);
+        this.fs = fs5.createFileSystemAdapter(this._options.fs);
+        this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);
+        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
+      }
+      _getValue(option, value) {
+        return option !== null && option !== void 0 ? option : value;
+      }
+    };
+    exports2.default = Settings;
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/index.js
+var require_out = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.statSync = exports2.stat = exports2.Settings = void 0;
+    var async = require_async();
+    var sync = require_sync();
+    var settings_1 = require_settings();
+    exports2.Settings = settings_1.default;
+    function stat(path6, optionsOrSettingsOrCallback, callback) {
+      if (typeof optionsOrSettingsOrCallback === "function") {
+        async.read(path6, getSettings(), optionsOrSettingsOrCallback);
+        return;
+      }
+      async.read(path6, getSettings(optionsOrSettingsOrCallback), callback);
+    }
+    __name(stat, "stat");
+    exports2.stat = stat;
+    function statSync(path6, optionsOrSettings) {
+      const settings = getSettings(optionsOrSettings);
+      return sync.read(path6, settings);
+    }
+    __name(statSync, "statSync");
+    exports2.statSync = statSync;
+    function getSettings(settingsOrOptions = {}) {
+      if (settingsOrOptions instanceof settings_1.default) {
+        return settingsOrOptions;
+      }
+      return new settings_1.default(settingsOrOptions);
+    }
+    __name(getSettings, "getSettings");
+  }
+});
+
+// node_modules/.pnpm/queue-microtask@1.2.3/node_modules/queue-microtask/index.js
+var require_queue_microtask = __commonJS({
+  "node_modules/.pnpm/queue-microtask@1.2.3/node_modules/queue-microtask/index.js"(exports2, module2) {
+    var promise;
+    module2.exports = typeof queueMicrotask === "function" ? queueMicrotask.bind(false ? void 0 : global) : (cb) => (promise || (promise = Promise.resolve())).then(cb).catch((err) => setTimeout(() => {
+      throw err;
+    }, 0));
+  }
+});
+
+// node_modules/.pnpm/run-parallel@1.2.0/node_modules/run-parallel/index.js
+var require_run_parallel = __commonJS({
+  "node_modules/.pnpm/run-parallel@1.2.0/node_modules/run-parallel/index.js"(exports2, module2) {
+    module2.exports = runParallel;
+    var queueMicrotask2 = require_queue_microtask();
+    function runParallel(tasks, cb) {
+      let results, pending, keys;
+      let isSync = true;
+      if (Array.isArray(tasks)) {
+        results = [];
+        pending = tasks.length;
+      } else {
+        keys = Object.keys(tasks);
+        results = {};
+        pending = keys.length;
+      }
+      function done(err) {
+        function end() {
+          if (cb) cb(err, results);
+          cb = null;
+        }
+        __name(end, "end");
+        if (isSync) queueMicrotask2(end);
+        else end();
+      }
+      __name(done, "done");
+      function each(i, err, result) {
+        results[i] = result;
+        if (--pending === 0 || err) {
+          done(err);
+        }
+      }
+      __name(each, "each");
+      if (!pending) {
+        done(null);
+      } else if (keys) {
+        keys.forEach(function(key) {
+          tasks[key](function(err, result) {
+            each(key, err, result);
+          });
+        });
+      } else {
+        tasks.forEach(function(task, i) {
+          task(function(err, result) {
+            each(i, err, result);
+          });
+        });
+      }
+      isSync = false;
+    }
+    __name(runParallel, "runParallel");
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/constants.js
+var require_constants3 = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/constants.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.IS_SUPPORT_READDIR_WITH_FILE_TYPES = void 0;
+    var NODE_PROCESS_VERSION_PARTS = process.versions.node.split(".");
+    if (NODE_PROCESS_VERSION_PARTS[0] === void 0 || NODE_PROCESS_VERSION_PARTS[1] === void 0) {
+      throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);
+    }
+    var MAJOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[0], 10);
+    var MINOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[1], 10);
+    var SUPPORTED_MAJOR_VERSION = 10;
+    var SUPPORTED_MINOR_VERSION = 10;
+    var IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION;
+    var IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION;
+    exports2.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR;
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/utils/fs.js
+var require_fs3 = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/utils/fs.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.createDirentFromStats = void 0;
+    var DirentFromStats = class {
+      static {
+        __name(this, "DirentFromStats");
+      }
+      constructor(name, stats) {
+        this.name = name;
+        this.isBlockDevice = stats.isBlockDevice.bind(stats);
+        this.isCharacterDevice = stats.isCharacterDevice.bind(stats);
+        this.isDirectory = stats.isDirectory.bind(stats);
+        this.isFIFO = stats.isFIFO.bind(stats);
+        this.isFile = stats.isFile.bind(stats);
+        this.isSocket = stats.isSocket.bind(stats);
+        this.isSymbolicLink = stats.isSymbolicLink.bind(stats);
+      }
+    };
+    function createDirentFromStats(name, stats) {
+      return new DirentFromStats(name, stats);
+    }
+    __name(createDirentFromStats, "createDirentFromStats");
+    exports2.createDirentFromStats = createDirentFromStats;
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/utils/index.js
+var require_utils4 = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/utils/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.fs = void 0;
+    var fs5 = require_fs3();
+    exports2.fs = fs5;
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/providers/common.js
+var require_common = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/providers/common.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.joinPathSegments = void 0;
+    function joinPathSegments(a, b, separator) {
+      if (a.endsWith(separator)) {
+        return a + b;
+      }
+      return a + separator + b;
+    }
+    __name(joinPathSegments, "joinPathSegments");
+    exports2.joinPathSegments = joinPathSegments;
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/providers/async.js
+var require_async2 = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/providers/async.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.readdir = exports2.readdirWithFileTypes = exports2.read = void 0;
+    var fsStat = require_out();
+    var rpl = require_run_parallel();
+    var constants_1 = require_constants3();
+    var utils = require_utils4();
+    var common = require_common();
+    function read(directory, settings, callback) {
+      if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {
+        readdirWithFileTypes(directory, settings, callback);
+        return;
+      }
+      readdir(directory, settings, callback);
+    }
+    __name(read, "read");
+    exports2.read = read;
+    function readdirWithFileTypes(directory, settings, callback) {
+      settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => {
+        if (readdirError !== null) {
+          callFailureCallback(callback, readdirError);
+          return;
+        }
+        const entries = dirents.map((dirent) => ({
+          dirent,
+          name: dirent.name,
+          path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)
+        }));
+        if (!settings.followSymbolicLinks) {
+          callSuccessCallback(callback, entries);
+          return;
+        }
+        const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings));
+        rpl(tasks, (rplError, rplEntries) => {
+          if (rplError !== null) {
+            callFailureCallback(callback, rplError);
+            return;
+          }
+          callSuccessCallback(callback, rplEntries);
+        });
+      });
+    }
+    __name(readdirWithFileTypes, "readdirWithFileTypes");
+    exports2.readdirWithFileTypes = readdirWithFileTypes;
+    function makeRplTaskEntry(entry, settings) {
+      return (done) => {
+        if (!entry.dirent.isSymbolicLink()) {
+          done(null, entry);
+          return;
+        }
+        settings.fs.stat(entry.path, (statError, stats) => {
+          if (statError !== null) {
+            if (settings.throwErrorOnBrokenSymbolicLink) {
+              done(statError);
+              return;
+            }
+            done(null, entry);
+            return;
+          }
+          entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);
+          done(null, entry);
+        });
+      };
+    }
+    __name(makeRplTaskEntry, "makeRplTaskEntry");
+    function readdir(directory, settings, callback) {
+      settings.fs.readdir(directory, (readdirError, names) => {
+        if (readdirError !== null) {
+          callFailureCallback(callback, readdirError);
+          return;
+        }
+        const tasks = names.map((name) => {
+          const path6 = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);
+          return (done) => {
+            fsStat.stat(path6, settings.fsStatSettings, (error, stats) => {
+              if (error !== null) {
+                done(error);
+                return;
+              }
+              const entry = {
+                name,
+                path: path6,
+                dirent: utils.fs.createDirentFromStats(name, stats)
+              };
+              if (settings.stats) {
+                entry.stats = stats;
+              }
+              done(null, entry);
+            });
+          };
+        });
+        rpl(tasks, (rplError, entries) => {
+          if (rplError !== null) {
+            callFailureCallback(callback, rplError);
+            return;
+          }
+          callSuccessCallback(callback, entries);
+        });
+      });
+    }
+    __name(readdir, "readdir");
+    exports2.readdir = readdir;
+    function callFailureCallback(callback, error) {
+      callback(error);
+    }
+    __name(callFailureCallback, "callFailureCallback");
+    function callSuccessCallback(callback, result) {
+      callback(null, result);
+    }
+    __name(callSuccessCallback, "callSuccessCallback");
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/providers/sync.js
+var require_sync2 = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/providers/sync.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.readdir = exports2.readdirWithFileTypes = exports2.read = void 0;
+    var fsStat = require_out();
+    var constants_1 = require_constants3();
+    var utils = require_utils4();
+    var common = require_common();
+    function read(directory, settings) {
+      if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {
+        return readdirWithFileTypes(directory, settings);
+      }
+      return readdir(directory, settings);
+    }
+    __name(read, "read");
+    exports2.read = read;
+    function readdirWithFileTypes(directory, settings) {
+      const dirents = settings.fs.readdirSync(directory, { withFileTypes: true });
+      return dirents.map((dirent) => {
+        const entry = {
+          dirent,
+          name: dirent.name,
+          path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)
+        };
+        if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) {
+          try {
+            const stats = settings.fs.statSync(entry.path);
+            entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);
+          } catch (error) {
+            if (settings.throwErrorOnBrokenSymbolicLink) {
+              throw error;
+            }
+          }
+        }
+        return entry;
+      });
+    }
+    __name(readdirWithFileTypes, "readdirWithFileTypes");
+    exports2.readdirWithFileTypes = readdirWithFileTypes;
+    function readdir(directory, settings) {
+      const names = settings.fs.readdirSync(directory);
+      return names.map((name) => {
+        const entryPath = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);
+        const stats = fsStat.statSync(entryPath, settings.fsStatSettings);
+        const entry = {
+          name,
+          path: entryPath,
+          dirent: utils.fs.createDirentFromStats(name, stats)
+        };
+        if (settings.stats) {
+          entry.stats = stats;
+        }
+        return entry;
+      });
+    }
+    __name(readdir, "readdir");
+    exports2.readdir = readdir;
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/adapters/fs.js
+var require_fs4 = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/adapters/fs.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.createFileSystemAdapter = exports2.FILE_SYSTEM_ADAPTER = void 0;
+    var fs5 = require("fs");
+    exports2.FILE_SYSTEM_ADAPTER = {
+      lstat: fs5.lstat,
+      stat: fs5.stat,
+      lstatSync: fs5.lstatSync,
+      statSync: fs5.statSync,
+      readdir: fs5.readdir,
+      readdirSync: fs5.readdirSync
+    };
+    function createFileSystemAdapter(fsMethods) {
+      if (fsMethods === void 0) {
+        return exports2.FILE_SYSTEM_ADAPTER;
+      }
+      return Object.assign(Object.assign({}, exports2.FILE_SYSTEM_ADAPTER), fsMethods);
+    }
+    __name(createFileSystemAdapter, "createFileSystemAdapter");
+    exports2.createFileSystemAdapter = createFileSystemAdapter;
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/settings.js
+var require_settings2 = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/settings.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var path6 = require("path");
+    var fsStat = require_out();
+    var fs5 = require_fs4();
+    var Settings = class {
+      static {
+        __name(this, "Settings");
+      }
+      constructor(_options = {}) {
+        this._options = _options;
+        this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);
+        this.fs = fs5.createFileSystemAdapter(this._options.fs);
+        this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path6.sep);
+        this.stats = this._getValue(this._options.stats, false);
+        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
+        this.fsStatSettings = new fsStat.Settings({
+          followSymbolicLink: this.followSymbolicLinks,
+          fs: this.fs,
+          throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink
+        });
+      }
+      _getValue(option, value) {
+        return option !== null && option !== void 0 ? option : value;
+      }
+    };
+    exports2.default = Settings;
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/index.js
+var require_out2 = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Settings = exports2.scandirSync = exports2.scandir = void 0;
+    var async = require_async2();
+    var sync = require_sync2();
+    var settings_1 = require_settings2();
+    exports2.Settings = settings_1.default;
+    function scandir(path6, optionsOrSettingsOrCallback, callback) {
+      if (typeof optionsOrSettingsOrCallback === "function") {
+        async.read(path6, getSettings(), optionsOrSettingsOrCallback);
+        return;
+      }
+      async.read(path6, getSettings(optionsOrSettingsOrCallback), callback);
+    }
+    __name(scandir, "scandir");
+    exports2.scandir = scandir;
+    function scandirSync(path6, optionsOrSettings) {
+      const settings = getSettings(optionsOrSettings);
+      return sync.read(path6, settings);
+    }
+    __name(scandirSync, "scandirSync");
+    exports2.scandirSync = scandirSync;
+    function getSettings(settingsOrOptions = {}) {
+      if (settingsOrOptions instanceof settings_1.default) {
+        return settingsOrOptions;
+      }
+      return new settings_1.default(settingsOrOptions);
+    }
+    __name(getSettings, "getSettings");
+  }
+});
+
+// node_modules/.pnpm/reusify@1.1.0/node_modules/reusify/reusify.js
+var require_reusify = __commonJS({
+  "node_modules/.pnpm/reusify@1.1.0/node_modules/reusify/reusify.js"(exports2, module2) {
+    "use strict";
+    function reusify(Constructor) {
+      var head = new Constructor();
+      var tail = head;
+      function get() {
+        var current = head;
+        if (current.next) {
+          head = current.next;
+        } else {
+          head = new Constructor();
+          tail = head;
+        }
+        current.next = null;
+        return current;
+      }
+      __name(get, "get");
+      function release(obj) {
+        tail.next = obj;
+        tail = obj;
+      }
+      __name(release, "release");
+      return {
+        get,
+        release
+      };
+    }
+    __name(reusify, "reusify");
+    module2.exports = reusify;
+  }
+});
+
+// node_modules/.pnpm/fastq@1.20.1/node_modules/fastq/queue.js
+var require_queue = __commonJS({
+  "node_modules/.pnpm/fastq@1.20.1/node_modules/fastq/queue.js"(exports2, module2) {
+    "use strict";
+    var reusify = require_reusify();
+    function fastqueue(context, worker, _concurrency) {
+      if (typeof context === "function") {
+        _concurrency = worker;
+        worker = context;
+        context = null;
+      }
+      if (!(_concurrency >= 1)) {
+        throw new Error("fastqueue concurrency must be equal to or greater than 1");
+      }
+      var cache = reusify(Task);
+      var queueHead = null;
+      var queueTail = null;
+      var _running = 0;
+      var errorHandler = null;
+      var self = {
+        push,
+        drain: noop2,
+        saturated: noop2,
+        pause,
+        paused: false,
+        get concurrency() {
+          return _concurrency;
+        },
+        set concurrency(value) {
+          if (!(value >= 1)) {
+            throw new Error("fastqueue concurrency must be equal to or greater than 1");
+          }
+          _concurrency = value;
+          if (self.paused) return;
+          for (; queueHead && _running < _concurrency; ) {
+            _running++;
+            release();
+          }
+        },
+        running,
+        resume,
+        idle,
+        length,
+        getQueue,
+        unshift,
+        empty: noop2,
+        kill,
+        killAndDrain,
+        error,
+        abort
+      };
+      return self;
+      function running() {
+        return _running;
+      }
+      __name(running, "running");
+      function pause() {
+        self.paused = true;
+      }
+      __name(pause, "pause");
+      function length() {
+        var current = queueHead;
+        var counter = 0;
+        while (current) {
+          current = current.next;
+          counter++;
+        }
+        return counter;
+      }
+      __name(length, "length");
+      function getQueue() {
+        var current = queueHead;
+        var tasks = [];
+        while (current) {
+          tasks.push(current.value);
+          current = current.next;
+        }
+        return tasks;
+      }
+      __name(getQueue, "getQueue");
+      function resume() {
+        if (!self.paused) return;
+        self.paused = false;
+        if (queueHead === null) {
+          _running++;
+          release();
+          return;
+        }
+        for (; queueHead && _running < _concurrency; ) {
+          _running++;
+          release();
+        }
+      }
+      __name(resume, "resume");
+      function idle() {
+        return _running === 0 && self.length() === 0;
+      }
+      __name(idle, "idle");
+      function push(value, done) {
+        var current = cache.get();
+        current.context = context;
+        current.release = release;
+        current.value = value;
+        current.callback = done || noop2;
+        current.errorHandler = errorHandler;
+        if (_running >= _concurrency || self.paused) {
+          if (queueTail) {
+            queueTail.next = current;
+            queueTail = current;
+          } else {
+            queueHead = current;
+            queueTail = current;
+            self.saturated();
+          }
+        } else {
+          _running++;
+          worker.call(context, current.value, current.worked);
+        }
+      }
+      __name(push, "push");
+      function unshift(value, done) {
+        var current = cache.get();
+        current.context = context;
+        current.release = release;
+        current.value = value;
+        current.callback = done || noop2;
+        current.errorHandler = errorHandler;
+        if (_running >= _concurrency || self.paused) {
+          if (queueHead) {
+            current.next = queueHead;
+            queueHead = current;
+          } else {
+            queueHead = current;
+            queueTail = current;
+            self.saturated();
+          }
+        } else {
+          _running++;
+          worker.call(context, current.value, current.worked);
+        }
+      }
+      __name(unshift, "unshift");
+      function release(holder) {
+        if (holder) {
+          cache.release(holder);
+        }
+        var next = queueHead;
+        if (next && _running <= _concurrency) {
+          if (!self.paused) {
+            if (queueTail === queueHead) {
+              queueTail = null;
+            }
+            queueHead = next.next;
+            next.next = null;
+            worker.call(context, next.value, next.worked);
+            if (queueTail === null) {
+              self.empty();
+            }
+          } else {
+            _running--;
+          }
+        } else if (--_running === 0) {
+          self.drain();
+        }
+      }
+      __name(release, "release");
+      function kill() {
+        queueHead = null;
+        queueTail = null;
+        self.drain = noop2;
+      }
+      __name(kill, "kill");
+      function killAndDrain() {
+        queueHead = null;
+        queueTail = null;
+        self.drain();
+        self.drain = noop2;
+      }
+      __name(killAndDrain, "killAndDrain");
+      function abort() {
+        var current = queueHead;
+        queueHead = null;
+        queueTail = null;
+        while (current) {
+          var next = current.next;
+          var callback = current.callback;
+          var errorHandler2 = current.errorHandler;
+          var val = current.value;
+          var context2 = current.context;
+          current.value = null;
+          current.callback = noop2;
+          current.errorHandler = null;
+          if (errorHandler2) {
+            errorHandler2(new Error("abort"), val);
+          }
+          callback.call(context2, new Error("abort"));
+          current.release(current);
+          current = next;
+        }
+        self.drain = noop2;
+      }
+      __name(abort, "abort");
+      function error(handler) {
+        errorHandler = handler;
+      }
+      __name(error, "error");
+    }
+    __name(fastqueue, "fastqueue");
+    function noop2() {
+    }
+    __name(noop2, "noop");
+    function Task() {
+      this.value = null;
+      this.callback = noop2;
+      this.next = null;
+      this.release = noop2;
+      this.context = null;
+      this.errorHandler = null;
+      var self = this;
+      this.worked = /* @__PURE__ */ __name(function worked(err, result) {
+        var callback = self.callback;
+        var errorHandler = self.errorHandler;
+        var val = self.value;
+        self.value = null;
+        self.callback = noop2;
+        if (self.errorHandler) {
+          errorHandler(err, val);
+        }
+        callback.call(self.context, err, result);
+        self.release(self);
+      }, "worked");
+    }
+    __name(Task, "Task");
+    function queueAsPromised(context, worker, _concurrency) {
+      if (typeof context === "function") {
+        _concurrency = worker;
+        worker = context;
+        context = null;
+      }
+      function asyncWrapper(arg, cb) {
+        worker.call(this, arg).then(function(res) {
+          cb(null, res);
+        }, cb);
+      }
+      __name(asyncWrapper, "asyncWrapper");
+      var queue = fastqueue(context, asyncWrapper, _concurrency);
+      var pushCb = queue.push;
+      var unshiftCb = queue.unshift;
+      queue.push = push;
+      queue.unshift = unshift;
+      queue.drained = drained;
+      return queue;
+      function push(value) {
+        var p = new Promise(function(resolve, reject) {
+          pushCb(value, function(err, result) {
+            if (err) {
+              reject(err);
+              return;
+            }
+            resolve(result);
+          });
+        });
+        p.catch(noop2);
+        return p;
+      }
+      __name(push, "push");
+      function unshift(value) {
+        var p = new Promise(function(resolve, reject) {
+          unshiftCb(value, function(err, result) {
+            if (err) {
+              reject(err);
+              return;
+            }
+            resolve(result);
+          });
+        });
+        p.catch(noop2);
+        return p;
+      }
+      __name(unshift, "unshift");
+      function drained() {
+        var p = new Promise(function(resolve) {
+          process.nextTick(function() {
+            if (queue.idle()) {
+              resolve();
+            } else {
+              var previousDrain = queue.drain;
+              queue.drain = function() {
+                if (typeof previousDrain === "function") previousDrain();
+                resolve();
+                queue.drain = previousDrain;
+              };
+            }
+          });
+        });
+        return p;
+      }
+      __name(drained, "drained");
+    }
+    __name(queueAsPromised, "queueAsPromised");
+    module2.exports = fastqueue;
+    module2.exports.promise = queueAsPromised;
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/common.js
+var require_common2 = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/common.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.joinPathSegments = exports2.replacePathSegmentSeparator = exports2.isAppliedFilter = exports2.isFatalError = void 0;
+    function isFatalError(settings, error) {
+      if (settings.errorFilter === null) {
+        return true;
+      }
+      return !settings.errorFilter(error);
+    }
+    __name(isFatalError, "isFatalError");
+    exports2.isFatalError = isFatalError;
+    function isAppliedFilter(filter, value) {
+      return filter === null || filter(value);
+    }
+    __name(isAppliedFilter, "isAppliedFilter");
+    exports2.isAppliedFilter = isAppliedFilter;
+    function replacePathSegmentSeparator(filepath, separator) {
+      return filepath.split(/[/\\]/).join(separator);
+    }
+    __name(replacePathSegmentSeparator, "replacePathSegmentSeparator");
+    exports2.replacePathSegmentSeparator = replacePathSegmentSeparator;
+    function joinPathSegments(a, b, separator) {
+      if (a === "") {
+        return b;
+      }
+      if (a.endsWith(separator)) {
+        return a + b;
+      }
+      return a + separator + b;
+    }
+    __name(joinPathSegments, "joinPathSegments");
+    exports2.joinPathSegments = joinPathSegments;
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/reader.js
+var require_reader = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/reader.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var common = require_common2();
+    var Reader = class {
+      static {
+        __name(this, "Reader");
+      }
+      constructor(_root, _settings) {
+        this._root = _root;
+        this._settings = _settings;
+        this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator);
+      }
+    };
+    exports2.default = Reader;
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/async.js
+var require_async3 = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/async.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var events_1 = require("events");
+    var fsScandir = require_out2();
+    var fastq = require_queue();
+    var common = require_common2();
+    var reader_1 = require_reader();
+    var AsyncReader = class extends reader_1.default {
+      static {
+        __name(this, "AsyncReader");
+      }
+      constructor(_root, _settings) {
+        super(_root, _settings);
+        this._settings = _settings;
+        this._scandir = fsScandir.scandir;
+        this._emitter = new events_1.EventEmitter();
+        this._queue = fastq(this._worker.bind(this), this._settings.concurrency);
+        this._isFatalError = false;
+        this._isDestroyed = false;
+        this._queue.drain = () => {
+          if (!this._isFatalError) {
+            this._emitter.emit("end");
+          }
+        };
+      }
+      read() {
+        this._isFatalError = false;
+        this._isDestroyed = false;
+        setImmediate(() => {
+          this._pushToQueue(this._root, this._settings.basePath);
+        });
+        return this._emitter;
+      }
+      get isDestroyed() {
+        return this._isDestroyed;
+      }
+      destroy() {
+        if (this._isDestroyed) {
+          throw new Error("The reader is already destroyed");
+        }
+        this._isDestroyed = true;
+        this._queue.killAndDrain();
+      }
+      onEntry(callback) {
+        this._emitter.on("entry", callback);
+      }
+      onError(callback) {
+        this._emitter.once("error", callback);
+      }
+      onEnd(callback) {
+        this._emitter.once("end", callback);
+      }
+      _pushToQueue(directory, base) {
+        const queueItem = { directory, base };
+        this._queue.push(queueItem, (error) => {
+          if (error !== null) {
+            this._handleError(error);
+          }
+        });
+      }
+      _worker(item, done) {
+        this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => {
+          if (error !== null) {
+            done(error, void 0);
+            return;
+          }
+          for (const entry of entries) {
+            this._handleEntry(entry, item.base);
+          }
+          done(null, void 0);
+        });
+      }
+      _handleError(error) {
+        if (this._isDestroyed || !common.isFatalError(this._settings, error)) {
+          return;
+        }
+        this._isFatalError = true;
+        this._isDestroyed = true;
+        this._emitter.emit("error", error);
+      }
+      _handleEntry(entry, base) {
+        if (this._isDestroyed || this._isFatalError) {
+          return;
+        }
+        const fullpath = entry.path;
+        if (base !== void 0) {
+          entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);
+        }
+        if (common.isAppliedFilter(this._settings.entryFilter, entry)) {
+          this._emitEntry(entry);
+        }
+        if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {
+          this._pushToQueue(fullpath, base === void 0 ? void 0 : entry.path);
+        }
+      }
+      _emitEntry(entry) {
+        this._emitter.emit("entry", entry);
+      }
+    };
+    exports2.default = AsyncReader;
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/providers/async.js
+var require_async4 = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/providers/async.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var async_1 = require_async3();
+    var AsyncProvider = class {
+      static {
+        __name(this, "AsyncProvider");
+      }
+      constructor(_root, _settings) {
+        this._root = _root;
+        this._settings = _settings;
+        this._reader = new async_1.default(this._root, this._settings);
+        this._storage = [];
+      }
+      read(callback) {
+        this._reader.onError((error) => {
+          callFailureCallback(callback, error);
+        });
+        this._reader.onEntry((entry) => {
+          this._storage.push(entry);
+        });
+        this._reader.onEnd(() => {
+          callSuccessCallback(callback, this._storage);
+        });
+        this._reader.read();
+      }
+    };
+    exports2.default = AsyncProvider;
+    function callFailureCallback(callback, error) {
+      callback(error);
+    }
+    __name(callFailureCallback, "callFailureCallback");
+    function callSuccessCallback(callback, entries) {
+      callback(null, entries);
+    }
+    __name(callSuccessCallback, "callSuccessCallback");
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/providers/stream.js
+var require_stream2 = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/providers/stream.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var stream_1 = require("stream");
+    var async_1 = require_async3();
+    var StreamProvider = class {
+      static {
+        __name(this, "StreamProvider");
+      }
+      constructor(_root, _settings) {
+        this._root = _root;
+        this._settings = _settings;
+        this._reader = new async_1.default(this._root, this._settings);
+        this._stream = new stream_1.Readable({
+          objectMode: true,
+          read: /* @__PURE__ */ __name(() => {
+          }, "read"),
+          destroy: /* @__PURE__ */ __name(() => {
+            if (!this._reader.isDestroyed) {
+              this._reader.destroy();
+            }
+          }, "destroy")
+        });
+      }
+      read() {
+        this._reader.onError((error) => {
+          this._stream.emit("error", error);
+        });
+        this._reader.onEntry((entry) => {
+          this._stream.push(entry);
+        });
+        this._reader.onEnd(() => {
+          this._stream.push(null);
+        });
+        this._reader.read();
+        return this._stream;
+      }
+    };
+    exports2.default = StreamProvider;
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/sync.js
+var require_sync3 = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/sync.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var fsScandir = require_out2();
+    var common = require_common2();
+    var reader_1 = require_reader();
+    var SyncReader = class extends reader_1.default {
+      static {
+        __name(this, "SyncReader");
+      }
+      constructor() {
+        super(...arguments);
+        this._scandir = fsScandir.scandirSync;
+        this._storage = [];
+        this._queue = /* @__PURE__ */ new Set();
+      }
+      read() {
+        this._pushToQueue(this._root, this._settings.basePath);
+        this._handleQueue();
+        return this._storage;
+      }
+      _pushToQueue(directory, base) {
+        this._queue.add({ directory, base });
+      }
+      _handleQueue() {
+        for (const item of this._queue.values()) {
+          this._handleDirectory(item.directory, item.base);
+        }
+      }
+      _handleDirectory(directory, base) {
+        try {
+          const entries = this._scandir(directory, this._settings.fsScandirSettings);
+          for (const entry of entries) {
+            this._handleEntry(entry, base);
+          }
+        } catch (error) {
+          this._handleError(error);
+        }
+      }
+      _handleError(error) {
+        if (!common.isFatalError(this._settings, error)) {
+          return;
+        }
+        throw error;
+      }
+      _handleEntry(entry, base) {
+        const fullpath = entry.path;
+        if (base !== void 0) {
+          entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);
+        }
+        if (common.isAppliedFilter(this._settings.entryFilter, entry)) {
+          this._pushToStorage(entry);
+        }
+        if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {
+          this._pushToQueue(fullpath, base === void 0 ? void 0 : entry.path);
+        }
+      }
+      _pushToStorage(entry) {
+        this._storage.push(entry);
+      }
+    };
+    exports2.default = SyncReader;
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/providers/sync.js
+var require_sync4 = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/providers/sync.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var sync_1 = require_sync3();
+    var SyncProvider = class {
+      static {
+        __name(this, "SyncProvider");
+      }
+      constructor(_root, _settings) {
+        this._root = _root;
+        this._settings = _settings;
+        this._reader = new sync_1.default(this._root, this._settings);
+      }
+      read() {
+        return this._reader.read();
+      }
+    };
+    exports2.default = SyncProvider;
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/settings.js
+var require_settings3 = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/settings.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var path6 = require("path");
+    var fsScandir = require_out2();
+    var Settings = class {
+      static {
+        __name(this, "Settings");
+      }
+      constructor(_options = {}) {
+        this._options = _options;
+        this.basePath = this._getValue(this._options.basePath, void 0);
+        this.concurrency = this._getValue(this._options.concurrency, Number.POSITIVE_INFINITY);
+        this.deepFilter = this._getValue(this._options.deepFilter, null);
+        this.entryFilter = this._getValue(this._options.entryFilter, null);
+        this.errorFilter = this._getValue(this._options.errorFilter, null);
+        this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path6.sep);
+        this.fsScandirSettings = new fsScandir.Settings({
+          followSymbolicLinks: this._options.followSymbolicLinks,
+          fs: this._options.fs,
+          pathSegmentSeparator: this._options.pathSegmentSeparator,
+          stats: this._options.stats,
+          throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink
+        });
+      }
+      _getValue(option, value) {
+        return option !== null && option !== void 0 ? option : value;
+      }
+    };
+    exports2.default = Settings;
+  }
+});
+
+// node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/index.js
+var require_out3 = __commonJS({
+  "node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/index.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Settings = exports2.walkStream = exports2.walkSync = exports2.walk = void 0;
+    var async_1 = require_async4();
+    var stream_1 = require_stream2();
+    var sync_1 = require_sync4();
+    var settings_1 = require_settings3();
+    exports2.Settings = settings_1.default;
+    function walk(directory, optionsOrSettingsOrCallback, callback) {
+      if (typeof optionsOrSettingsOrCallback === "function") {
+        new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback);
+        return;
+      }
+      new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback);
+    }
+    __name(walk, "walk");
+    exports2.walk = walk;
+    function walkSync(directory, optionsOrSettings) {
+      const settings = getSettings(optionsOrSettings);
+      const provider = new sync_1.default(directory, settings);
+      return provider.read();
+    }
+    __name(walkSync, "walkSync");
+    exports2.walkSync = walkSync;
+    function walkStream(directory, optionsOrSettings) {
+      const settings = getSettings(optionsOrSettings);
+      const provider = new stream_1.default(directory, settings);
+      return provider.read();
+    }
+    __name(walkStream, "walkStream");
+    exports2.walkStream = walkStream;
+    function getSettings(settingsOrOptions = {}) {
+      if (settingsOrOptions instanceof settings_1.default) {
+        return settingsOrOptions;
+      }
+      return new settings_1.default(settingsOrOptions);
+    }
+    __name(getSettings, "getSettings");
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/readers/reader.js
+var require_reader2 = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/readers/reader.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var path6 = require("path");
+    var fsStat = require_out();
+    var utils = require_utils3();
+    var Reader = class {
+      static {
+        __name(this, "Reader");
+      }
+      constructor(_settings) {
+        this._settings = _settings;
+        this._fsStatSettings = new fsStat.Settings({
+          followSymbolicLink: this._settings.followSymbolicLinks,
+          fs: this._settings.fs,
+          throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks
+        });
+      }
+      _getFullEntryPath(filepath) {
+        return path6.resolve(this._settings.cwd, filepath);
+      }
+      _makeEntry(stats, pattern) {
+        const entry = {
+          name: pattern,
+          path: pattern,
+          dirent: utils.fs.createDirentFromStats(pattern, stats)
+        };
+        if (this._settings.stats) {
+          entry.stats = stats;
+        }
+        return entry;
+      }
+      _isFatalError(error) {
+        return !utils.errno.isEnoentCodeError(error) && !this._settings.suppressErrors;
+      }
+    };
+    exports2.default = Reader;
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/readers/stream.js
+var require_stream3 = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/readers/stream.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var stream_1 = require("stream");
+    var fsStat = require_out();
+    var fsWalk = require_out3();
+    var reader_1 = require_reader2();
+    var ReaderStream = class extends reader_1.default {
+      static {
+        __name(this, "ReaderStream");
+      }
+      constructor() {
+        super(...arguments);
+        this._walkStream = fsWalk.walkStream;
+        this._stat = fsStat.stat;
+      }
+      dynamic(root, options) {
+        return this._walkStream(root, options);
+      }
+      static(patterns, options) {
+        const filepaths = patterns.map(this._getFullEntryPath, this);
+        const stream = new stream_1.PassThrough({ objectMode: true });
+        stream._write = (index, _enc, done) => {
+          return this._getEntry(filepaths[index], patterns[index], options).then((entry) => {
+            if (entry !== null && options.entryFilter(entry)) {
+              stream.push(entry);
+            }
+            if (index === filepaths.length - 1) {
+              stream.end();
+            }
+            done();
+          }).catch(done);
+        };
+        for (let i = 0; i < filepaths.length; i++) {
+          stream.write(i);
+        }
+        return stream;
+      }
+      _getEntry(filepath, pattern, options) {
+        return this._getStat(filepath).then((stats) => this._makeEntry(stats, pattern)).catch((error) => {
+          if (options.errorFilter(error)) {
+            return null;
+          }
+          throw error;
+        });
+      }
+      _getStat(filepath) {
+        return new Promise((resolve, reject) => {
+          this._stat(filepath, this._fsStatSettings, (error, stats) => {
+            return error === null ? resolve(stats) : reject(error);
+          });
+        });
+      }
+    };
+    exports2.default = ReaderStream;
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/readers/async.js
+var require_async5 = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/readers/async.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var fsWalk = require_out3();
+    var reader_1 = require_reader2();
+    var stream_1 = require_stream3();
+    var ReaderAsync = class extends reader_1.default {
+      static {
+        __name(this, "ReaderAsync");
+      }
+      constructor() {
+        super(...arguments);
+        this._walkAsync = fsWalk.walk;
+        this._readerStream = new stream_1.default(this._settings);
+      }
+      dynamic(root, options) {
+        return new Promise((resolve, reject) => {
+          this._walkAsync(root, options, (error, entries) => {
+            if (error === null) {
+              resolve(entries);
+            } else {
+              reject(error);
+            }
+          });
+        });
+      }
+      async static(patterns, options) {
+        const entries = [];
+        const stream = this._readerStream.static(patterns, options);
+        return new Promise((resolve, reject) => {
+          stream.once("error", reject);
+          stream.on("data", (entry) => entries.push(entry));
+          stream.once("end", () => resolve(entries));
+        });
+      }
+    };
+    exports2.default = ReaderAsync;
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/matchers/matcher.js
+var require_matcher = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/matchers/matcher.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var utils = require_utils3();
+    var Matcher = class {
+      static {
+        __name(this, "Matcher");
+      }
+      constructor(_patterns, _settings, _micromatchOptions) {
+        this._patterns = _patterns;
+        this._settings = _settings;
+        this._micromatchOptions = _micromatchOptions;
+        this._storage = [];
+        this._fillStorage();
+      }
+      _fillStorage() {
+        for (const pattern of this._patterns) {
+          const segments = this._getPatternSegments(pattern);
+          const sections = this._splitSegmentsIntoSections(segments);
+          this._storage.push({
+            complete: sections.length <= 1,
+            pattern,
+            segments,
+            sections
+          });
+        }
+      }
+      _getPatternSegments(pattern) {
+        const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions);
+        return parts.map((part) => {
+          const dynamic = utils.pattern.isDynamicPattern(part, this._settings);
+          if (!dynamic) {
+            return {
+              dynamic: false,
+              pattern: part
+            };
+          }
+          return {
+            dynamic: true,
+            pattern: part,
+            patternRe: utils.pattern.makeRe(part, this._micromatchOptions)
+          };
+        });
+      }
+      _splitSegmentsIntoSections(segments) {
+        return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern));
+      }
+    };
+    exports2.default = Matcher;
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/matchers/partial.js
+var require_partial = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/matchers/partial.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var matcher_1 = require_matcher();
+    var PartialMatcher = class extends matcher_1.default {
+      static {
+        __name(this, "PartialMatcher");
+      }
+      match(filepath) {
+        const parts = filepath.split("/");
+        const levels = parts.length;
+        const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels);
+        for (const pattern of patterns) {
+          const section = pattern.sections[0];
+          if (!pattern.complete && levels > section.length) {
+            return true;
+          }
+          const match = parts.every((part, index) => {
+            const segment = pattern.segments[index];
+            if (segment.dynamic && segment.patternRe.test(part)) {
+              return true;
+            }
+            if (!segment.dynamic && segment.pattern === part) {
+              return true;
+            }
+            return false;
+          });
+          if (match) {
+            return true;
+          }
+        }
+        return false;
+      }
+    };
+    exports2.default = PartialMatcher;
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/filters/deep.js
+var require_deep = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/filters/deep.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var utils = require_utils3();
+    var partial_1 = require_partial();
+    var DeepFilter = class {
+      static {
+        __name(this, "DeepFilter");
+      }
+      constructor(_settings, _micromatchOptions) {
+        this._settings = _settings;
+        this._micromatchOptions = _micromatchOptions;
+      }
+      getFilter(basePath, positive, negative) {
+        const matcher = this._getMatcher(positive);
+        const negativeRe = this._getNegativePatternsRe(negative);
+        return (entry) => this._filter(basePath, entry, matcher, negativeRe);
+      }
+      _getMatcher(patterns) {
+        return new partial_1.default(patterns, this._settings, this._micromatchOptions);
+      }
+      _getNegativePatternsRe(patterns) {
+        const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern);
+        return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions);
+      }
+      _filter(basePath, entry, matcher, negativeRe) {
+        if (this._isSkippedByDeep(basePath, entry.path)) {
+          return false;
+        }
+        if (this._isSkippedSymbolicLink(entry)) {
+          return false;
+        }
+        const filepath = utils.path.removeLeadingDotSegment(entry.path);
+        if (this._isSkippedByPositivePatterns(filepath, matcher)) {
+          return false;
+        }
+        return this._isSkippedByNegativePatterns(filepath, negativeRe);
+      }
+      _isSkippedByDeep(basePath, entryPath) {
+        if (this._settings.deep === Infinity) {
+          return false;
+        }
+        return this._getEntryLevel(basePath, entryPath) >= this._settings.deep;
+      }
+      _getEntryLevel(basePath, entryPath) {
+        const entryPathDepth = entryPath.split("/").length;
+        if (basePath === "") {
+          return entryPathDepth;
+        }
+        const basePathDepth = basePath.split("/").length;
+        return entryPathDepth - basePathDepth;
+      }
+      _isSkippedSymbolicLink(entry) {
+        return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink();
+      }
+      _isSkippedByPositivePatterns(entryPath, matcher) {
+        return !this._settings.baseNameMatch && !matcher.match(entryPath);
+      }
+      _isSkippedByNegativePatterns(entryPath, patternsRe) {
+        return !utils.pattern.matchAny(entryPath, patternsRe);
+      }
+    };
+    exports2.default = DeepFilter;
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/filters/entry.js
+var require_entry = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/filters/entry.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var utils = require_utils3();
+    var EntryFilter = class {
+      static {
+        __name(this, "EntryFilter");
+      }
+      constructor(_settings, _micromatchOptions) {
+        this._settings = _settings;
+        this._micromatchOptions = _micromatchOptions;
+        this.index = /* @__PURE__ */ new Map();
+      }
+      getFilter(positive, negative) {
+        const [absoluteNegative, relativeNegative] = utils.pattern.partitionAbsoluteAndRelative(negative);
+        const patterns = {
+          positive: {
+            all: utils.pattern.convertPatternsToRe(positive, this._micromatchOptions)
+          },
+          negative: {
+            absolute: utils.pattern.convertPatternsToRe(absoluteNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true })),
+            relative: utils.pattern.convertPatternsToRe(relativeNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true }))
+          }
+        };
+        return (entry) => this._filter(entry, patterns);
+      }
+      _filter(entry, patterns) {
+        const filepath = utils.path.removeLeadingDotSegment(entry.path);
+        if (this._settings.unique && this._isDuplicateEntry(filepath)) {
+          return false;
+        }
+        if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) {
+          return false;
+        }
+        const isMatched = this._isMatchToPatternsSet(filepath, patterns, entry.dirent.isDirectory());
+        if (this._settings.unique && isMatched) {
+          this._createIndexRecord(filepath);
+        }
+        return isMatched;
+      }
+      _isDuplicateEntry(filepath) {
+        return this.index.has(filepath);
+      }
+      _createIndexRecord(filepath) {
+        this.index.set(filepath, void 0);
+      }
+      _onlyFileFilter(entry) {
+        return this._settings.onlyFiles && !entry.dirent.isFile();
+      }
+      _onlyDirectoryFilter(entry) {
+        return this._settings.onlyDirectories && !entry.dirent.isDirectory();
+      }
+      _isMatchToPatternsSet(filepath, patterns, isDirectory2) {
+        const isMatched = this._isMatchToPatterns(filepath, patterns.positive.all, isDirectory2);
+        if (!isMatched) {
+          return false;
+        }
+        const isMatchedByRelativeNegative = this._isMatchToPatterns(filepath, patterns.negative.relative, isDirectory2);
+        if (isMatchedByRelativeNegative) {
+          return false;
+        }
+        const isMatchedByAbsoluteNegative = this._isMatchToAbsoluteNegative(filepath, patterns.negative.absolute, isDirectory2);
+        if (isMatchedByAbsoluteNegative) {
+          return false;
+        }
+        return true;
+      }
+      _isMatchToAbsoluteNegative(filepath, patternsRe, isDirectory2) {
+        if (patternsRe.length === 0) {
+          return false;
+        }
+        const fullpath = utils.path.makeAbsolute(this._settings.cwd, filepath);
+        return this._isMatchToPatterns(fullpath, patternsRe, isDirectory2);
+      }
+      _isMatchToPatterns(filepath, patternsRe, isDirectory2) {
+        if (patternsRe.length === 0) {
+          return false;
+        }
+        const isMatched = utils.pattern.matchAny(filepath, patternsRe);
+        if (!isMatched && isDirectory2) {
+          return utils.pattern.matchAny(filepath + "/", patternsRe);
+        }
+        return isMatched;
+      }
+    };
+    exports2.default = EntryFilter;
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/filters/error.js
+var require_error = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/filters/error.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var utils = require_utils3();
+    var ErrorFilter = class {
+      static {
+        __name(this, "ErrorFilter");
+      }
+      constructor(_settings) {
+        this._settings = _settings;
+      }
+      getFilter() {
+        return (error) => this._isNonFatalError(error);
+      }
+      _isNonFatalError(error) {
+        return utils.errno.isEnoentCodeError(error) || this._settings.suppressErrors;
+      }
+    };
+    exports2.default = ErrorFilter;
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/transformers/entry.js
+var require_entry2 = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/transformers/entry.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var utils = require_utils3();
+    var EntryTransformer = class {
+      static {
+        __name(this, "EntryTransformer");
+      }
+      constructor(_settings) {
+        this._settings = _settings;
+      }
+      getTransformer() {
+        return (entry) => this._transform(entry);
+      }
+      _transform(entry) {
+        let filepath = entry.path;
+        if (this._settings.absolute) {
+          filepath = utils.path.makeAbsolute(this._settings.cwd, filepath);
+          filepath = utils.path.unixify(filepath);
+        }
+        if (this._settings.markDirectories && entry.dirent.isDirectory()) {
+          filepath += "/";
+        }
+        if (!this._settings.objectMode) {
+          return filepath;
+        }
+        return Object.assign(Object.assign({}, entry), { path: filepath });
+      }
+    };
+    exports2.default = EntryTransformer;
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/provider.js
+var require_provider = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/provider.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var path6 = require("path");
+    var deep_1 = require_deep();
+    var entry_1 = require_entry();
+    var error_1 = require_error();
+    var entry_2 = require_entry2();
+    var Provider = class {
+      static {
+        __name(this, "Provider");
+      }
+      constructor(_settings) {
+        this._settings = _settings;
+        this.errorFilter = new error_1.default(this._settings);
+        this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions());
+        this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions());
+        this.entryTransformer = new entry_2.default(this._settings);
+      }
+      _getRootDirectory(task) {
+        return path6.resolve(this._settings.cwd, task.base);
+      }
+      _getReaderOptions(task) {
+        const basePath = task.base === "." ? "" : task.base;
+        return {
+          basePath,
+          pathSegmentSeparator: "/",
+          concurrency: this._settings.concurrency,
+          deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative),
+          entryFilter: this.entryFilter.getFilter(task.positive, task.negative),
+          errorFilter: this.errorFilter.getFilter(),
+          followSymbolicLinks: this._settings.followSymbolicLinks,
+          fs: this._settings.fs,
+          stats: this._settings.stats,
+          throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink,
+          transform: this.entryTransformer.getTransformer()
+        };
+      }
+      _getMicromatchOptions() {
+        return {
+          dot: this._settings.dot,
+          matchBase: this._settings.baseNameMatch,
+          nobrace: !this._settings.braceExpansion,
+          nocase: !this._settings.caseSensitiveMatch,
+          noext: !this._settings.extglob,
+          noglobstar: !this._settings.globstar,
+          posix: true,
+          strictSlashes: false
+        };
+      }
+    };
+    exports2.default = Provider;
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/async.js
+var require_async6 = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/async.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var async_1 = require_async5();
+    var provider_1 = require_provider();
+    var ProviderAsync = class extends provider_1.default {
+      static {
+        __name(this, "ProviderAsync");
+      }
+      constructor() {
+        super(...arguments);
+        this._reader = new async_1.default(this._settings);
+      }
+      async read(task) {
+        const root = this._getRootDirectory(task);
+        const options = this._getReaderOptions(task);
+        const entries = await this.api(root, task, options);
+        return entries.map((entry) => options.transform(entry));
+      }
+      api(root, task, options) {
+        if (task.dynamic) {
+          return this._reader.dynamic(root, options);
+        }
+        return this._reader.static(task.patterns, options);
+      }
+    };
+    exports2.default = ProviderAsync;
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/stream.js
+var require_stream4 = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/stream.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var stream_1 = require("stream");
+    var stream_2 = require_stream3();
+    var provider_1 = require_provider();
+    var ProviderStream = class extends provider_1.default {
+      static {
+        __name(this, "ProviderStream");
+      }
+      constructor() {
+        super(...arguments);
+        this._reader = new stream_2.default(this._settings);
+      }
+      read(task) {
+        const root = this._getRootDirectory(task);
+        const options = this._getReaderOptions(task);
+        const source = this.api(root, task, options);
+        const destination = new stream_1.Readable({ objectMode: true, read: /* @__PURE__ */ __name(() => {
+        }, "read") });
+        source.once("error", (error) => destination.emit("error", error)).on("data", (entry) => destination.emit("data", options.transform(entry))).once("end", () => destination.emit("end"));
+        destination.once("close", () => source.destroy());
+        return destination;
+      }
+      api(root, task, options) {
+        if (task.dynamic) {
+          return this._reader.dynamic(root, options);
+        }
+        return this._reader.static(task.patterns, options);
+      }
+    };
+    exports2.default = ProviderStream;
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/readers/sync.js
+var require_sync5 = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/readers/sync.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var fsStat = require_out();
+    var fsWalk = require_out3();
+    var reader_1 = require_reader2();
+    var ReaderSync = class extends reader_1.default {
+      static {
+        __name(this, "ReaderSync");
+      }
+      constructor() {
+        super(...arguments);
+        this._walkSync = fsWalk.walkSync;
+        this._statSync = fsStat.statSync;
+      }
+      dynamic(root, options) {
+        return this._walkSync(root, options);
+      }
+      static(patterns, options) {
+        const entries = [];
+        for (const pattern of patterns) {
+          const filepath = this._getFullEntryPath(pattern);
+          const entry = this._getEntry(filepath, pattern, options);
+          if (entry === null || !options.entryFilter(entry)) {
+            continue;
+          }
+          entries.push(entry);
+        }
+        return entries;
+      }
+      _getEntry(filepath, pattern, options) {
+        try {
+          const stats = this._getStat(filepath);
+          return this._makeEntry(stats, pattern);
+        } catch (error) {
+          if (options.errorFilter(error)) {
+            return null;
+          }
+          throw error;
+        }
+      }
+      _getStat(filepath) {
+        return this._statSync(filepath, this._fsStatSettings);
+      }
+    };
+    exports2.default = ReaderSync;
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/sync.js
+var require_sync6 = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/sync.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    var sync_1 = require_sync5();
+    var provider_1 = require_provider();
+    var ProviderSync = class extends provider_1.default {
+      static {
+        __name(this, "ProviderSync");
+      }
+      constructor() {
+        super(...arguments);
+        this._reader = new sync_1.default(this._settings);
+      }
+      read(task) {
+        const root = this._getRootDirectory(task);
+        const options = this._getReaderOptions(task);
+        const entries = this.api(root, task, options);
+        return entries.map(options.transform);
+      }
+      api(root, task, options) {
+        if (task.dynamic) {
+          return this._reader.dynamic(root, options);
+        }
+        return this._reader.static(task.patterns, options);
+      }
+    };
+    exports2.default = ProviderSync;
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/settings.js
+var require_settings4 = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/settings.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;
+    var fs5 = require("fs");
+    var os = require("os");
+    var CPU_COUNT = Math.max(os.cpus().length, 1);
+    exports2.DEFAULT_FILE_SYSTEM_ADAPTER = {
+      lstat: fs5.lstat,
+      lstatSync: fs5.lstatSync,
+      stat: fs5.stat,
+      statSync: fs5.statSync,
+      readdir: fs5.readdir,
+      readdirSync: fs5.readdirSync
+    };
+    var Settings = class {
+      static {
+        __name(this, "Settings");
+      }
+      constructor(_options = {}) {
+        this._options = _options;
+        this.absolute = this._getValue(this._options.absolute, false);
+        this.baseNameMatch = this._getValue(this._options.baseNameMatch, false);
+        this.braceExpansion = this._getValue(this._options.braceExpansion, true);
+        this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true);
+        this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT);
+        this.cwd = this._getValue(this._options.cwd, process.cwd());
+        this.deep = this._getValue(this._options.deep, Infinity);
+        this.dot = this._getValue(this._options.dot, false);
+        this.extglob = this._getValue(this._options.extglob, true);
+        this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true);
+        this.fs = this._getFileSystemMethods(this._options.fs);
+        this.globstar = this._getValue(this._options.globstar, true);
+        this.ignore = this._getValue(this._options.ignore, []);
+        this.markDirectories = this._getValue(this._options.markDirectories, false);
+        this.objectMode = this._getValue(this._options.objectMode, false);
+        this.onlyDirectories = this._getValue(this._options.onlyDirectories, false);
+        this.onlyFiles = this._getValue(this._options.onlyFiles, true);
+        this.stats = this._getValue(this._options.stats, false);
+        this.suppressErrors = this._getValue(this._options.suppressErrors, false);
+        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false);
+        this.unique = this._getValue(this._options.unique, true);
+        if (this.onlyDirectories) {
+          this.onlyFiles = false;
+        }
+        if (this.stats) {
+          this.objectMode = true;
+        }
+        this.ignore = [].concat(this.ignore);
+      }
+      _getValue(option, value) {
+        return option === void 0 ? value : option;
+      }
+      _getFileSystemMethods(methods = {}) {
+        return Object.assign(Object.assign({}, exports2.DEFAULT_FILE_SYSTEM_ADAPTER), methods);
+      }
+    };
+    exports2.default = Settings;
+  }
+});
+
+// node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/index.js
+var require_out4 = __commonJS({
+  "node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/index.js"(exports2, module2) {
+    "use strict";
+    var taskManager = require_tasks();
+    var async_1 = require_async6();
+    var stream_1 = require_stream4();
+    var sync_1 = require_sync6();
+    var settings_1 = require_settings4();
+    var utils = require_utils3();
+    async function FastGlob(source, options) {
+      assertPatternsInput2(source);
+      const works = getWorks(source, async_1.default, options);
+      const result = await Promise.all(works);
+      return utils.array.flatten(result);
+    }
+    __name(FastGlob, "FastGlob");
+    (function(FastGlob2) {
+      FastGlob2.glob = FastGlob2;
+      FastGlob2.globSync = sync;
+      FastGlob2.globStream = stream;
+      FastGlob2.async = FastGlob2;
+      function sync(source, options) {
+        assertPatternsInput2(source);
+        const works = getWorks(source, sync_1.default, options);
+        return utils.array.flatten(works);
+      }
+      __name(sync, "sync");
+      FastGlob2.sync = sync;
+      function stream(source, options) {
+        assertPatternsInput2(source);
+        const works = getWorks(source, stream_1.default, options);
+        return utils.stream.merge(works);
+      }
+      __name(stream, "stream");
+      FastGlob2.stream = stream;
+      function generateTasks2(source, options) {
+        assertPatternsInput2(source);
+        const patterns = [].concat(source);
+        const settings = new settings_1.default(options);
+        return taskManager.generate(patterns, settings);
+      }
+      __name(generateTasks2, "generateTasks");
+      FastGlob2.generateTasks = generateTasks2;
+      function isDynamicPattern2(source, options) {
+        assertPatternsInput2(source);
+        const settings = new settings_1.default(options);
+        return utils.pattern.isDynamicPattern(source, settings);
+      }
+      __name(isDynamicPattern2, "isDynamicPattern");
+      FastGlob2.isDynamicPattern = isDynamicPattern2;
+      function escapePath(source) {
+        assertPatternsInput2(source);
+        return utils.path.escape(source);
+      }
+      __name(escapePath, "escapePath");
+      FastGlob2.escapePath = escapePath;
+      function convertPathToPattern2(source) {
+        assertPatternsInput2(source);
+        return utils.path.convertPathToPattern(source);
+      }
+      __name(convertPathToPattern2, "convertPathToPattern");
+      FastGlob2.convertPathToPattern = convertPathToPattern2;
+      let posix;
+      (function(posix2) {
+        function escapePath2(source) {
+          assertPatternsInput2(source);
+          return utils.path.escapePosixPath(source);
+        }
+        __name(escapePath2, "escapePath");
+        posix2.escapePath = escapePath2;
+        function convertPathToPattern3(source) {
+          assertPatternsInput2(source);
+          return utils.path.convertPosixPathToPattern(source);
+        }
+        __name(convertPathToPattern3, "convertPathToPattern");
+        posix2.convertPathToPattern = convertPathToPattern3;
+      })(posix = FastGlob2.posix || (FastGlob2.posix = {}));
+      let win32;
+      (function(win322) {
+        function escapePath2(source) {
+          assertPatternsInput2(source);
+          return utils.path.escapeWindowsPath(source);
+        }
+        __name(escapePath2, "escapePath");
+        win322.escapePath = escapePath2;
+        function convertPathToPattern3(source) {
+          assertPatternsInput2(source);
+          return utils.path.convertWindowsPathToPattern(source);
+        }
+        __name(convertPathToPattern3, "convertPathToPattern");
+        win322.convertPathToPattern = convertPathToPattern3;
+      })(win32 = FastGlob2.win32 || (FastGlob2.win32 = {}));
+    })(FastGlob || (FastGlob = {}));
+    function getWorks(source, _Provider, options) {
+      const patterns = [].concat(source);
+      const settings = new settings_1.default(options);
+      const tasks = taskManager.generate(patterns, settings);
+      const provider = new _Provider(settings);
+      return tasks.map(provider.read, provider);
+    }
+    __name(getWorks, "getWorks");
+    function assertPatternsInput2(input) {
+      const source = [].concat(input);
+      const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item));
+      if (!isValidSource) {
+        throw new TypeError("Patterns must be a string (non empty) or an array of strings");
+      }
+    }
+    __name(assertPatternsInput2, "assertPatternsInput");
+    module2.exports = FastGlob;
+  }
+});
+
+// node_modules/.pnpm/path-type@6.0.0/node_modules/path-type/index.js
+async function isType(fsStatType, statsMethodName, filePath) {
+  if (typeof filePath !== "string") {
+    throw new TypeError(`Expected a string, got ${typeof filePath}`);
+  }
+  try {
+    const stats = await import_promises2.default[fsStatType](filePath);
+    return stats[statsMethodName]();
+  } catch (error) {
+    if (error.code === "ENOENT") {
+      return false;
+    }
+    throw error;
+  }
+}
+function isTypeSync(fsStatType, statsMethodName, filePath) {
+  if (typeof filePath !== "string") {
+    throw new TypeError(`Expected a string, got ${typeof filePath}`);
+  }
+  try {
+    return import_node_fs.default[fsStatType](filePath)[statsMethodName]();
+  } catch (error) {
+    if (error.code === "ENOENT") {
+      return false;
+    }
+    throw error;
+  }
+}
+var import_node_fs, import_promises2, isFile, isDirectory, isSymlink, isFileSync, isDirectorySync, isSymlinkSync;
+var init_path_type = __esm({
+  "node_modules/.pnpm/path-type@6.0.0/node_modules/path-type/index.js"() {
+    import_node_fs = __toESM(require("node:fs"), 1);
+    import_promises2 = __toESM(require("node:fs/promises"), 1);
+    __name(isType, "isType");
+    __name(isTypeSync, "isTypeSync");
+    isFile = isType.bind(void 0, "stat", "isFile");
+    isDirectory = isType.bind(void 0, "stat", "isDirectory");
+    isSymlink = isType.bind(void 0, "lstat", "isSymbolicLink");
+    isFileSync = isTypeSync.bind(void 0, "statSync", "isFile");
+    isDirectorySync = isTypeSync.bind(void 0, "statSync", "isDirectory");
+    isSymlinkSync = isTypeSync.bind(void 0, "lstatSync", "isSymbolicLink");
+  }
+});
+
+// node_modules/.pnpm/unicorn-magic@0.3.0/node_modules/unicorn-magic/default.js
+var init_default = __esm({
+  "node_modules/.pnpm/unicorn-magic@0.3.0/node_modules/unicorn-magic/default.js"() {
+  }
+});
+
+// node_modules/.pnpm/unicorn-magic@0.3.0/node_modules/unicorn-magic/node.js
+function toPath(urlOrPath) {
+  return urlOrPath instanceof URL ? (0, import_node_url.fileURLToPath)(urlOrPath) : urlOrPath;
+}
+var import_node_util, import_node_child_process, import_node_path, import_node_url, execFileOriginal, TEN_MEGABYTES_IN_BYTES;
+var init_node = __esm({
+  "node_modules/.pnpm/unicorn-magic@0.3.0/node_modules/unicorn-magic/node.js"() {
+    import_node_util = require("node:util");
+    import_node_child_process = require("node:child_process");
+    import_node_path = __toESM(require("node:path"), 1);
+    import_node_url = require("node:url");
+    init_default();
+    execFileOriginal = (0, import_node_util.promisify)(import_node_child_process.execFile);
+    __name(toPath, "toPath");
+    TEN_MEGABYTES_IN_BYTES = 10 * 1024 * 1024;
+  }
+});
+
+// node_modules/.pnpm/ignore@7.0.5/node_modules/ignore/index.js
+var require_ignore = __commonJS({
+  "node_modules/.pnpm/ignore@7.0.5/node_modules/ignore/index.js"(exports2, module2) {
+    function makeArray(subject) {
+      return Array.isArray(subject) ? subject : [subject];
+    }
+    __name(makeArray, "makeArray");
+    var UNDEFINED = void 0;
+    var EMPTY = "";
+    var SPACE = " ";
+    var ESCAPE = "\\";
+    var REGEX_TEST_BLANK_LINE = /^\s+$/;
+    var REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\]|^)\\$/;
+    var REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/;
+    var REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/;
+    var REGEX_SPLITALL_CRLF = /\r?\n/g;
+    var REGEX_TEST_INVALID_PATH = /^\.{0,2}\/|^\.{1,2}$/;
+    var REGEX_TEST_TRAILING_SLASH = /\/$/;
+    var SLASH = "/";
+    var TMP_KEY_IGNORE = "node-ignore";
+    if (typeof Symbol !== "undefined") {
+      TMP_KEY_IGNORE = Symbol.for("node-ignore");
+    }
+    var KEY_IGNORE = TMP_KEY_IGNORE;
+    var define = /* @__PURE__ */ __name((object, key, value) => {
+      Object.defineProperty(object, key, { value });
+      return value;
+    }, "define");
+    var REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g;
+    var RETURN_FALSE = /* @__PURE__ */ __name(() => false, "RETURN_FALSE");
+    var sanitizeRange = /* @__PURE__ */ __name((range) => range.replace(
+      REGEX_REGEXP_RANGE,
+      (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0) ? match : EMPTY
+    ), "sanitizeRange");
+    var cleanRangeBackSlash = /* @__PURE__ */ __name((slashes) => {
+      const { length } = slashes;
+      return slashes.slice(0, length - length % 2);
+    }, "cleanRangeBackSlash");
+    var REPLACERS = [
+      [
+        // Remove BOM
+        // TODO:
+        // Other similar zero-width characters?
+        /^\uFEFF/,
+        () => EMPTY
+      ],
+      // > Trailing spaces are ignored unless they are quoted with backslash ("\")
+      [
+        // (a\ ) -> (a )
+        // (a  ) -> (a)
+        // (a ) -> (a)
+        // (a \ ) -> (a  )
+        /((?:\\\\)*?)(\\?\s+)$/,
+        (_, m1, m2) => m1 + (m2.indexOf("\\") === 0 ? SPACE : EMPTY)
+      ],
+      // Replace (\ ) with ' '
+      // (\ ) -> ' '
+      // (\\ ) -> '\\ '
+      // (\\\ ) -> '\\ '
+      [
+        /(\\+?)\s/g,
+        (_, m1) => {
+          const { length } = m1;
+          return m1.slice(0, length - length % 2) + SPACE;
+        }
+      ],
+      // Escape metacharacters
+      // which is written down by users but means special for regular expressions.
+      // > There are 12 characters with special meanings:
+      // > - the backslash \,
+      // > - the caret ^,
+      // > - the dollar sign $,
+      // > - the period or dot .,
+      // > - the vertical bar or pipe symbol |,
+      // > - the question mark ?,
+      // > - the asterisk or star *,
+      // > - the plus sign +,
+      // > - the opening parenthesis (,
+      // > - the closing parenthesis ),
+      // > - and the opening square bracket [,
+      // > - the opening curly brace {,
+      // > These special characters are often called "metacharacters".
+      [
+        /[\\$.|*+(){^]/g,
+        (match) => `\\${match}`
+      ],
+      [
+        // > a question mark (?) matches a single character
+        /(?!\\)\?/g,
+        () => "[^/]"
+      ],
+      // leading slash
+      [
+        // > A leading slash matches the beginning of the pathname.
+        // > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c".
+        // A leading slash matches the beginning of the pathname
+        /^\//,
+        () => "^"
+      ],
+      // replace special metacharacter slash after the leading slash
+      [
+        /\//g,
+        () => "\\/"
+      ],
+      [
+        // > A leading "**" followed by a slash means match in all directories.
+        // > For example, "**/foo" matches file or directory "foo" anywhere,
+        // > the same as pattern "foo".
+        // > "**/foo/bar" matches file or directory "bar" anywhere that is directly
+        // >   under directory "foo".
+        // Notice that the '*'s have been replaced as '\\*'
+        /^\^*\\\*\\\*\\\//,
+        // '**/foo' <-> 'foo'
+        () => "^(?:.*\\/)?"
+      ],
+      // starting
+      [
+        // there will be no leading '/'
+        //   (which has been replaced by section "leading slash")
+        // If starts with '**', adding a '^' to the regular expression also works
+        /^(?=[^^])/,
+        /* @__PURE__ */ __name(function startingReplacer() {
+          return !/\/(?!$)/.test(this) ? "(?:^|\\/)" : "^";
+        }, "startingReplacer")
+      ],
+      // two globstars
+      [
+        // Use lookahead assertions so that we could match more than one `'/**'`
+        /\\\/\\\*\\\*(?=\\\/|$)/g,
+        // Zero, one or several directories
+        // should not use '*', or it will be replaced by the next replacer
+        // Check if it is not the last `'/**'`
+        (_, index, str) => index + 6 < str.length ? "(?:\\/[^\\/]+)*" : "\\/.+"
+      ],
+      // normal intermediate wildcards
+      [
+        // Never replace escaped '*'
+        // ignore rule '\*' will match the path '*'
+        // 'abc.*/' -> go
+        // 'abc.*'  -> skip this rule,
+        //    coz trailing single wildcard will be handed by [trailing wildcard]
+        /(^|[^\\]+)(\\\*)+(?=.+)/g,
+        // '*.js' matches '.js'
+        // '*.js' doesn't match 'abc'
+        (_, p1, p2) => {
+          const unescaped = p2.replace(/\\\*/g, "[^\\/]*");
+          return p1 + unescaped;
+        }
+      ],
+      [
+        // unescape, revert step 3 except for back slash
+        // For example, if a user escape a '\\*',
+        // after step 3, the result will be '\\\\\\*'
+        /\\\\\\(?=[$.|*+(){^])/g,
+        () => ESCAPE
+      ],
+      [
+        // '\\\\' -> '\\'
+        /\\\\/g,
+        () => ESCAPE
+      ],
+      [
+        // > The range notation, e.g. [a-zA-Z],
+        // > can be used to match one of the characters in a range.
+        // `\` is escaped by step 3
+        /(\\)?\[([^\]/]*?)(\\*)($|\])/g,
+        (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE ? `\\[${range}${cleanRangeBackSlash(endEscape)}${close}` : close === "]" ? endEscape.length % 2 === 0 ? `[${sanitizeRange(range)}${endEscape}]` : "[]" : "[]"
+      ],
+      // ending
+      [
+        // 'js' will not match 'js.'
+        // 'ab' will not match 'abc'
+        /(?:[^*])$/,
+        // WTF!
+        // https://git-scm.com/docs/gitignore
+        // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1)
+        // which re-fixes #24, #38
+        // > If there is a separator at the end of the pattern then the pattern
+        // > will only match directories, otherwise the pattern can match both
+        // > files and directories.
+        // 'js*' will not match 'a.js'
+        // 'js/' will not match 'a.js'
+        // 'js' will match 'a.js' and 'a.js/'
+        (match) => /\/$/.test(match) ? `${match}$` : `${match}(?=$|\\/$)`
+      ]
+    ];
+    var REGEX_REPLACE_TRAILING_WILDCARD = /(^|\\\/)?\\\*$/;
+    var MODE_IGNORE = "regex";
+    var MODE_CHECK_IGNORE = "checkRegex";
+    var UNDERSCORE = "_";
+    var TRAILING_WILD_CARD_REPLACERS = {
+      [MODE_IGNORE](_, p1) {
+        const prefix = p1 ? `${p1}[^/]+` : "[^/]*";
+        return `${prefix}(?=$|\\/$)`;
+      },
+      [MODE_CHECK_IGNORE](_, p1) {
+        const prefix = p1 ? `${p1}[^/]*` : "[^/]*";
+        return `${prefix}(?=$|\\/$)`;
+      }
+    };
+    var makeRegexPrefix = /* @__PURE__ */ __name((pattern) => REPLACERS.reduce(
+      (prev, [matcher, replacer]) => prev.replace(matcher, replacer.bind(pattern)),
+      pattern
+    ), "makeRegexPrefix");
+    var isString = /* @__PURE__ */ __name((subject) => typeof subject === "string", "isString");
+    var checkPattern = /* @__PURE__ */ __name((pattern) => pattern && isString(pattern) && !REGEX_TEST_BLANK_LINE.test(pattern) && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern) && pattern.indexOf("#") !== 0, "checkPattern");
+    var splitPattern = /* @__PURE__ */ __name((pattern) => pattern.split(REGEX_SPLITALL_CRLF).filter(Boolean), "splitPattern");
+    var IgnoreRule = class {
+      static {
+        __name(this, "IgnoreRule");
+      }
+      constructor(pattern, mark, body, ignoreCase, negative, prefix) {
+        this.pattern = pattern;
+        this.mark = mark;
+        this.negative = negative;
+        define(this, "body", body);
+        define(this, "ignoreCase", ignoreCase);
+        define(this, "regexPrefix", prefix);
+      }
+      get regex() {
+        const key = UNDERSCORE + MODE_IGNORE;
+        if (this[key]) {
+          return this[key];
+        }
+        return this._make(MODE_IGNORE, key);
+      }
+      get checkRegex() {
+        const key = UNDERSCORE + MODE_CHECK_IGNORE;
+        if (this[key]) {
+          return this[key];
+        }
+        return this._make(MODE_CHECK_IGNORE, key);
+      }
+      _make(mode, key) {
+        const str = this.regexPrefix.replace(
+          REGEX_REPLACE_TRAILING_WILDCARD,
+          // It does not need to bind pattern
+          TRAILING_WILD_CARD_REPLACERS[mode]
+        );
+        const regex = this.ignoreCase ? new RegExp(str, "i") : new RegExp(str);
+        return define(this, key, regex);
+      }
+    };
+    var createRule = /* @__PURE__ */ __name(({
+      pattern,
+      mark
+    }, ignoreCase) => {
+      let negative = false;
+      let body = pattern;
+      if (body.indexOf("!") === 0) {
+        negative = true;
+        body = body.substr(1);
+      }
+      body = body.replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, "!").replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, "#");
+      const regexPrefix = makeRegexPrefix(body);
+      return new IgnoreRule(
+        pattern,
+        mark,
+        body,
+        ignoreCase,
+        negative,
+        regexPrefix
+      );
+    }, "createRule");
+    var RuleManager = class {
+      static {
+        __name(this, "RuleManager");
+      }
+      constructor(ignoreCase) {
+        this._ignoreCase = ignoreCase;
+        this._rules = [];
+      }
+      _add(pattern) {
+        if (pattern && pattern[KEY_IGNORE]) {
+          this._rules = this._rules.concat(pattern._rules._rules);
+          this._added = true;
+          return;
+        }
+        if (isString(pattern)) {
+          pattern = {
+            pattern
+          };
+        }
+        if (checkPattern(pattern.pattern)) {
+          const rule = createRule(pattern, this._ignoreCase);
+          this._added = true;
+          this._rules.push(rule);
+        }
+      }
+      // @param {Array | string | Ignore} pattern
+      add(pattern) {
+        this._added = false;
+        makeArray(
+          isString(pattern) ? splitPattern(pattern) : pattern
+        ).forEach(this._add, this);
+        return this._added;
+      }
+      // Test one single path without recursively checking parent directories
+      //
+      // - checkUnignored `boolean` whether should check if the path is unignored,
+      //   setting `checkUnignored` to `false` could reduce additional
+      //   path matching.
+      // - check `string` either `MODE_IGNORE` or `MODE_CHECK_IGNORE`
+      // @returns {TestResult} true if a file is ignored
+      test(path6, checkUnignored, mode) {
+        let ignored = false;
+        let unignored = false;
+        let matchedRule;
+        this._rules.forEach((rule) => {
+          const { negative } = rule;
+          if (unignored === negative && ignored !== unignored || negative && !ignored && !unignored && !checkUnignored) {
+            return;
+          }
+          const matched = rule[mode].test(path6);
+          if (!matched) {
+            return;
+          }
+          ignored = !negative;
+          unignored = negative;
+          matchedRule = negative ? UNDEFINED : rule;
+        });
+        const ret = {
+          ignored,
+          unignored
+        };
+        if (matchedRule) {
+          ret.rule = matchedRule;
+        }
+        return ret;
+      }
+    };
+    var throwError = /* @__PURE__ */ __name((message, Ctor) => {
+      throw new Ctor(message);
+    }, "throwError");
+    var checkPath = /* @__PURE__ */ __name((path6, originalPath, doThrow) => {
+      if (!isString(path6)) {
+        return doThrow(
+          `path must be a string, but got \`${originalPath}\``,
+          TypeError
+        );
+      }
+      if (!path6) {
+        return doThrow(`path must not be empty`, TypeError);
+      }
+      if (checkPath.isNotRelative(path6)) {
+        const r = "`path.relative()`d";
+        return doThrow(
+          `path should be a ${r} string, but got "${originalPath}"`,
+          RangeError
+        );
+      }
+      return true;
+    }, "checkPath");
+    var isNotRelative = /* @__PURE__ */ __name((path6) => REGEX_TEST_INVALID_PATH.test(path6), "isNotRelative");
+    checkPath.isNotRelative = isNotRelative;
+    checkPath.convert = (p) => p;
+    var Ignore = class {
+      static {
+        __name(this, "Ignore");
+      }
+      constructor({
+        ignorecase = true,
+        ignoreCase = ignorecase,
+        allowRelativePaths = false
+      } = {}) {
+        define(this, KEY_IGNORE, true);
+        this._rules = new RuleManager(ignoreCase);
+        this._strictPathCheck = !allowRelativePaths;
+        this._initCache();
+      }
+      _initCache() {
+        this._ignoreCache = /* @__PURE__ */ Object.create(null);
+        this._testCache = /* @__PURE__ */ Object.create(null);
+      }
+      add(pattern) {
+        if (this._rules.add(pattern)) {
+          this._initCache();
+        }
+        return this;
+      }
+      // legacy
+      addPattern(pattern) {
+        return this.add(pattern);
+      }
+      // @returns {TestResult}
+      _test(originalPath, cache, checkUnignored, slices) {
+        const path6 = originalPath && checkPath.convert(originalPath);
+        checkPath(
+          path6,
+          originalPath,
+          this._strictPathCheck ? throwError : RETURN_FALSE
+        );
+        return this._t(path6, cache, checkUnignored, slices);
+      }
+      checkIgnore(path6) {
+        if (!REGEX_TEST_TRAILING_SLASH.test(path6)) {
+          return this.test(path6);
+        }
+        const slices = path6.split(SLASH).filter(Boolean);
+        slices.pop();
+        if (slices.length) {
+          const parent = this._t(
+            slices.join(SLASH) + SLASH,
+            this._testCache,
+            true,
+            slices
+          );
+          if (parent.ignored) {
+            return parent;
+          }
+        }
+        return this._rules.test(path6, false, MODE_CHECK_IGNORE);
+      }
+      _t(path6, cache, checkUnignored, slices) {
+        if (path6 in cache) {
+          return cache[path6];
+        }
+        if (!slices) {
+          slices = path6.split(SLASH).filter(Boolean);
+        }
+        slices.pop();
+        if (!slices.length) {
+          return cache[path6] = this._rules.test(path6, checkUnignored, MODE_IGNORE);
+        }
+        const parent = this._t(
+          slices.join(SLASH) + SLASH,
+          cache,
+          checkUnignored,
+          slices
+        );
+        return cache[path6] = parent.ignored ? parent : this._rules.test(path6, checkUnignored, MODE_IGNORE);
+      }
+      ignores(path6) {
+        return this._test(path6, this._ignoreCache, false).ignored;
+      }
+      createFilter() {
+        return (path6) => !this.ignores(path6);
+      }
+      filter(paths) {
+        return makeArray(paths).filter(this.createFilter());
+      }
+      // @returns {TestResult}
+      test(path6) {
+        return this._test(path6, this._testCache, true);
+      }
+    };
+    var factory = /* @__PURE__ */ __name((options) => new Ignore(options), "factory");
+    var isPathValid = /* @__PURE__ */ __name((path6) => checkPath(path6 && checkPath.convert(path6), path6, RETURN_FALSE), "isPathValid");
+    var setupWindows = /* @__PURE__ */ __name(() => {
+      const makePosix = /* @__PURE__ */ __name((str) => /^\\\\\?\\/.test(str) || /["<>|\u0000-\u001F]+/u.test(str) ? str : str.replace(/\\/g, "/"), "makePosix");
+      checkPath.convert = makePosix;
+      const REGEX_TEST_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i;
+      checkPath.isNotRelative = (path6) => REGEX_TEST_WINDOWS_PATH_ABSOLUTE.test(path6) || isNotRelative(path6);
+    }, "setupWindows");
+    if (
+      // Detect `process` so that it can run in browsers.
+      typeof process !== "undefined" && process.platform === "win32"
+    ) {
+      setupWindows();
+    }
+    module2.exports = factory;
+    factory.default = factory;
+    module2.exports.isPathValid = isPathValid;
+    define(module2.exports, Symbol.for("setupWindows"), setupWindows);
+  }
+});
+
+// node_modules/.pnpm/slash@5.1.0/node_modules/slash/index.js
+function slash(path6) {
+  const isExtendedLengthPath = path6.startsWith("\\\\?\\");
+  if (isExtendedLengthPath) {
+    return path6;
+  }
+  return path6.replace(/\\/g, "/");
+}
+var init_slash = __esm({
+  "node_modules/.pnpm/slash@5.1.0/node_modules/slash/index.js"() {
+    __name(slash, "slash");
+  }
+});
+
+// node_modules/.pnpm/globby@14.1.0/node_modules/globby/utilities.js
+var isNegativePattern;
+var init_utilities = __esm({
+  "node_modules/.pnpm/globby@14.1.0/node_modules/globby/utilities.js"() {
+    isNegativePattern = /* @__PURE__ */ __name((pattern) => pattern[0] === "!", "isNegativePattern");
+  }
+});
+
+// node_modules/.pnpm/globby@14.1.0/node_modules/globby/ignore.js
+var import_node_process, import_node_fs2, import_promises3, import_node_path2, import_fast_glob, import_ignore, defaultIgnoredDirectories, ignoreFilesGlobOptions, GITIGNORE_FILES_PATTERN, applyBaseToPattern, parseIgnoreFile, toRelativePath, getIsIgnoredPredicate, normalizeOptions, isIgnoredByIgnoreFiles, isIgnoredByIgnoreFilesSync;
+var init_ignore = __esm({
+  "node_modules/.pnpm/globby@14.1.0/node_modules/globby/ignore.js"() {
+    import_node_process = __toESM(require("node:process"), 1);
+    import_node_fs2 = __toESM(require("node:fs"), 1);
+    import_promises3 = __toESM(require("node:fs/promises"), 1);
+    import_node_path2 = __toESM(require("node:path"), 1);
+    import_fast_glob = __toESM(require_out4(), 1);
+    import_ignore = __toESM(require_ignore(), 1);
+    init_slash();
+    init_node();
+    init_utilities();
+    defaultIgnoredDirectories = [
+      "**/node_modules",
+      "**/flow-typed",
+      "**/coverage",
+      "**/.git"
+    ];
+    ignoreFilesGlobOptions = {
+      absolute: true,
+      dot: true
+    };
+    GITIGNORE_FILES_PATTERN = "**/.gitignore";
+    applyBaseToPattern = /* @__PURE__ */ __name((pattern, base) => isNegativePattern(pattern) ? "!" + import_node_path2.default.posix.join(base, pattern.slice(1)) : import_node_path2.default.posix.join(base, pattern), "applyBaseToPattern");
+    parseIgnoreFile = /* @__PURE__ */ __name((file, cwd) => {
+      const base = slash(import_node_path2.default.relative(cwd, import_node_path2.default.dirname(file.filePath)));
+      return file.content.split(/\r?\n/).filter((line) => line && !line.startsWith("#")).map((pattern) => applyBaseToPattern(pattern, base));
+    }, "parseIgnoreFile");
+    toRelativePath = /* @__PURE__ */ __name((fileOrDirectory, cwd) => {
+      cwd = slash(cwd);
+      if (import_node_path2.default.isAbsolute(fileOrDirectory)) {
+        if (slash(fileOrDirectory).startsWith(cwd)) {
+          return import_node_path2.default.relative(cwd, fileOrDirectory);
+        }
+        throw new Error(`Path ${fileOrDirectory} is not in cwd ${cwd}`);
+      }
+      return fileOrDirectory;
+    }, "toRelativePath");
+    getIsIgnoredPredicate = /* @__PURE__ */ __name((files, cwd) => {
+      const patterns = files.flatMap((file) => parseIgnoreFile(file, cwd));
+      const ignores = (0, import_ignore.default)().add(patterns);
+      return (fileOrDirectory) => {
+        fileOrDirectory = toPath(fileOrDirectory);
+        fileOrDirectory = toRelativePath(fileOrDirectory, cwd);
+        return fileOrDirectory ? ignores.ignores(slash(fileOrDirectory)) : false;
+      };
+    }, "getIsIgnoredPredicate");
+    normalizeOptions = /* @__PURE__ */ __name((options = {}) => ({
+      cwd: toPath(options.cwd) ?? import_node_process.default.cwd(),
+      suppressErrors: Boolean(options.suppressErrors),
+      deep: typeof options.deep === "number" ? options.deep : Number.POSITIVE_INFINITY,
+      ignore: [...options.ignore ?? [], ...defaultIgnoredDirectories]
+    }), "normalizeOptions");
+    isIgnoredByIgnoreFiles = /* @__PURE__ */ __name(async (patterns, options) => {
+      const { cwd, suppressErrors, deep, ignore } = normalizeOptions(options);
+      const paths = await (0, import_fast_glob.default)(patterns, {
+        cwd,
+        suppressErrors,
+        deep,
+        ignore,
+        ...ignoreFilesGlobOptions
+      });
+      const files = await Promise.all(
+        paths.map(async (filePath) => ({
+          filePath,
+          content: await import_promises3.default.readFile(filePath, "utf8")
+        }))
+      );
+      return getIsIgnoredPredicate(files, cwd);
+    }, "isIgnoredByIgnoreFiles");
+    isIgnoredByIgnoreFilesSync = /* @__PURE__ */ __name((patterns, options) => {
+      const { cwd, suppressErrors, deep, ignore } = normalizeOptions(options);
+      const paths = import_fast_glob.default.sync(patterns, {
+        cwd,
+        suppressErrors,
+        deep,
+        ignore,
+        ...ignoreFilesGlobOptions
+      });
+      const files = paths.map((filePath) => ({
+        filePath,
+        content: import_node_fs2.default.readFileSync(filePath, "utf8")
+      }));
+      return getIsIgnoredPredicate(files, cwd);
+    }, "isIgnoredByIgnoreFilesSync");
+  }
+});
+
+// node_modules/.pnpm/globby@14.1.0/node_modules/globby/index.js
+var import_node_process2, import_node_fs3, import_node_path3, import_fast_glob2, assertPatternsInput, normalizePathForDirectoryGlob, getDirectoryGlob, directoryToGlob, directoryToGlobSync, toPatternsArray, checkCwdOption, normalizeOptions2, normalizeArguments, normalizeArgumentsSync, getIgnoreFilesPatterns, getFilter, getFilterSync, createFilterFunction, unionFastGlobResults, convertNegativePatterns, normalizeExpandDirectoriesOption, generateTasks, generateTasksSync, globby, globbySync, globbyStream, isDynamicPattern, generateGlobTasks, generateGlobTasksSync, convertPathToPattern;
+var init_globby = __esm({
+  "node_modules/.pnpm/globby@14.1.0/node_modules/globby/index.js"() {
+    import_node_process2 = __toESM(require("node:process"), 1);
+    import_node_fs3 = __toESM(require("node:fs"), 1);
+    import_node_path3 = __toESM(require("node:path"), 1);
+    init_merge_streams();
+    import_fast_glob2 = __toESM(require_out4(), 1);
+    init_path_type();
+    init_node();
+    init_ignore();
+    init_utilities();
+    assertPatternsInput = /* @__PURE__ */ __name((patterns) => {
+      if (patterns.some((pattern) => typeof pattern !== "string")) {
+        throw new TypeError("Patterns must be a string or an array of strings");
+      }
+    }, "assertPatternsInput");
+    normalizePathForDirectoryGlob = /* @__PURE__ */ __name((filePath, cwd) => {
+      const path6 = isNegativePattern(filePath) ? filePath.slice(1) : filePath;
+      return import_node_path3.default.isAbsolute(path6) ? path6 : import_node_path3.default.join(cwd, path6);
+    }, "normalizePathForDirectoryGlob");
+    getDirectoryGlob = /* @__PURE__ */ __name(({ directoryPath, files, extensions }) => {
+      const extensionGlob = extensions?.length > 0 ? `.${extensions.length > 1 ? `{${extensions.join(",")}}` : extensions[0]}` : "";
+      return files ? files.map((file) => import_node_path3.default.posix.join(directoryPath, `**/${import_node_path3.default.extname(file) ? file : `${file}${extensionGlob}`}`)) : [import_node_path3.default.posix.join(directoryPath, `**${extensionGlob ? `/*${extensionGlob}` : ""}`)];
+    }, "getDirectoryGlob");
+    directoryToGlob = /* @__PURE__ */ __name(async (directoryPaths, {
+      cwd = import_node_process2.default.cwd(),
+      files,
+      extensions
+    } = {}) => {
+      const globs = await Promise.all(
+        directoryPaths.map(async (directoryPath) => await isDirectory(normalizePathForDirectoryGlob(directoryPath, cwd)) ? getDirectoryGlob({ directoryPath, files, extensions }) : directoryPath)
+      );
+      return globs.flat();
+    }, "directoryToGlob");
+    directoryToGlobSync = /* @__PURE__ */ __name((directoryPaths, {
+      cwd = import_node_process2.default.cwd(),
+      files,
+      extensions
+    } = {}) => directoryPaths.flatMap((directoryPath) => isDirectorySync(normalizePathForDirectoryGlob(directoryPath, cwd)) ? getDirectoryGlob({ directoryPath, files, extensions }) : directoryPath), "directoryToGlobSync");
+    toPatternsArray = /* @__PURE__ */ __name((patterns) => {
+      patterns = [...new Set([patterns].flat())];
+      assertPatternsInput(patterns);
+      return patterns;
+    }, "toPatternsArray");
+    checkCwdOption = /* @__PURE__ */ __name((cwd) => {
+      if (!cwd) {
+        return;
+      }
+      let stat;
+      try {
+        stat = import_node_fs3.default.statSync(cwd);
+      } catch {
+        return;
+      }
+      if (!stat.isDirectory()) {
+        throw new Error("The `cwd` option must be a path to a directory");
+      }
+    }, "checkCwdOption");
+    normalizeOptions2 = /* @__PURE__ */ __name((options = {}) => {
+      options = {
+        ...options,
+        ignore: options.ignore ?? [],
+        expandDirectories: options.expandDirectories ?? true,
+        cwd: toPath(options.cwd)
+      };
+      checkCwdOption(options.cwd);
+      return options;
+    }, "normalizeOptions");
+    normalizeArguments = /* @__PURE__ */ __name((function_) => async (patterns, options) => function_(toPatternsArray(patterns), normalizeOptions2(options)), "normalizeArguments");
+    normalizeArgumentsSync = /* @__PURE__ */ __name((function_) => (patterns, options) => function_(toPatternsArray(patterns), normalizeOptions2(options)), "normalizeArgumentsSync");
+    getIgnoreFilesPatterns = /* @__PURE__ */ __name((options) => {
+      const { ignoreFiles, gitignore } = options;
+      const patterns = ignoreFiles ? toPatternsArray(ignoreFiles) : [];
+      if (gitignore) {
+        patterns.push(GITIGNORE_FILES_PATTERN);
+      }
+      return patterns;
+    }, "getIgnoreFilesPatterns");
+    getFilter = /* @__PURE__ */ __name(async (options) => {
+      const ignoreFilesPatterns = getIgnoreFilesPatterns(options);
+      return createFilterFunction(
+        ignoreFilesPatterns.length > 0 && await isIgnoredByIgnoreFiles(ignoreFilesPatterns, options)
+      );
+    }, "getFilter");
+    getFilterSync = /* @__PURE__ */ __name((options) => {
+      const ignoreFilesPatterns = getIgnoreFilesPatterns(options);
+      return createFilterFunction(
+        ignoreFilesPatterns.length > 0 && isIgnoredByIgnoreFilesSync(ignoreFilesPatterns, options)
+      );
+    }, "getFilterSync");
+    createFilterFunction = /* @__PURE__ */ __name((isIgnored) => {
+      const seen = /* @__PURE__ */ new Set();
+      return (fastGlobResult) => {
+        const pathKey = import_node_path3.default.normalize(fastGlobResult.path ?? fastGlobResult);
+        if (seen.has(pathKey) || isIgnored && isIgnored(pathKey)) {
+          return false;
+        }
+        seen.add(pathKey);
+        return true;
+      };
+    }, "createFilterFunction");
+    unionFastGlobResults = /* @__PURE__ */ __name((results, filter) => results.flat().filter((fastGlobResult) => filter(fastGlobResult)), "unionFastGlobResults");
+    convertNegativePatterns = /* @__PURE__ */ __name((patterns, options) => {
+      const tasks = [];
+      while (patterns.length > 0) {
+        const index = patterns.findIndex((pattern) => isNegativePattern(pattern));
+        if (index === -1) {
+          tasks.push({ patterns, options });
+          break;
+        }
+        const ignorePattern = patterns[index].slice(1);
+        for (const task of tasks) {
+          task.options.ignore.push(ignorePattern);
+        }
+        if (index !== 0) {
+          tasks.push({
+            patterns: patterns.slice(0, index),
+            options: {
+              ...options,
+              ignore: [
+                ...options.ignore,
+                ignorePattern
+              ]
+            }
+          });
+        }
+        patterns = patterns.slice(index + 1);
+      }
+      return tasks;
+    }, "convertNegativePatterns");
+    normalizeExpandDirectoriesOption = /* @__PURE__ */ __name((options, cwd) => ({
+      ...cwd ? { cwd } : {},
+      ...Array.isArray(options) ? { files: options } : options
+    }), "normalizeExpandDirectoriesOption");
+    generateTasks = /* @__PURE__ */ __name(async (patterns, options) => {
+      const globTasks = convertNegativePatterns(patterns, options);
+      const { cwd, expandDirectories } = options;
+      if (!expandDirectories) {
+        return globTasks;
+      }
+      const directoryToGlobOptions = normalizeExpandDirectoriesOption(expandDirectories, cwd);
+      return Promise.all(
+        globTasks.map(async (task) => {
+          let { patterns: patterns2, options: options2 } = task;
+          [
+            patterns2,
+            options2.ignore
+          ] = await Promise.all([
+            directoryToGlob(patterns2, directoryToGlobOptions),
+            directoryToGlob(options2.ignore, { cwd })
+          ]);
+          return { patterns: patterns2, options: options2 };
+        })
+      );
+    }, "generateTasks");
+    generateTasksSync = /* @__PURE__ */ __name((patterns, options) => {
+      const globTasks = convertNegativePatterns(patterns, options);
+      const { cwd, expandDirectories } = options;
+      if (!expandDirectories) {
+        return globTasks;
+      }
+      const directoryToGlobSyncOptions = normalizeExpandDirectoriesOption(expandDirectories, cwd);
+      return globTasks.map((task) => {
+        let { patterns: patterns2, options: options2 } = task;
+        patterns2 = directoryToGlobSync(patterns2, directoryToGlobSyncOptions);
+        options2.ignore = directoryToGlobSync(options2.ignore, { cwd });
+        return { patterns: patterns2, options: options2 };
+      });
+    }, "generateTasksSync");
+    globby = normalizeArguments(async (patterns, options) => {
+      const [
+        tasks,
+        filter
+      ] = await Promise.all([
+        generateTasks(patterns, options),
+        getFilter(options)
+      ]);
+      const results = await Promise.all(tasks.map((task) => (0, import_fast_glob2.default)(task.patterns, task.options)));
+      return unionFastGlobResults(results, filter);
+    });
+    globbySync = normalizeArgumentsSync((patterns, options) => {
+      const tasks = generateTasksSync(patterns, options);
+      const filter = getFilterSync(options);
+      const results = tasks.map((task) => import_fast_glob2.default.sync(task.patterns, task.options));
+      return unionFastGlobResults(results, filter);
+    });
+    globbyStream = normalizeArgumentsSync((patterns, options) => {
+      const tasks = generateTasksSync(patterns, options);
+      const filter = getFilterSync(options);
+      const streams = tasks.map((task) => import_fast_glob2.default.stream(task.patterns, task.options));
+      const stream = mergeStreams(streams).filter((fastGlobResult) => filter(fastGlobResult));
+      return stream;
+    });
+    isDynamicPattern = normalizeArgumentsSync(
+      (patterns, options) => patterns.some((pattern) => import_fast_glob2.default.isDynamicPattern(pattern, options))
+    );
+    generateGlobTasks = normalizeArguments(generateTasks);
+    generateGlobTasksSync = normalizeArgumentsSync(generateTasksSync);
+    ({ convertPathToPattern } = import_fast_glob2.default);
+  }
+});
+
+// node_modules/.pnpm/is-path-cwd@3.0.0/node_modules/is-path-cwd/index.js
+function isPathCwd(path_) {
+  let cwd = import_node_process3.default.cwd();
+  path_ = import_node_path4.default.resolve(path_);
+  if (import_node_process3.default.platform === "win32") {
+    cwd = cwd.toLowerCase();
+    path_ = path_.toLowerCase();
+  }
+  return path_ === cwd;
+}
+var import_node_process3, import_node_path4;
+var init_is_path_cwd = __esm({
+  "node_modules/.pnpm/is-path-cwd@3.0.0/node_modules/is-path-cwd/index.js"() {
+    import_node_process3 = __toESM(require("node:process"), 1);
+    import_node_path4 = __toESM(require("node:path"), 1);
+    __name(isPathCwd, "isPathCwd");
+  }
+});
+
+// node_modules/.pnpm/is-path-inside@4.0.0/node_modules/is-path-inside/index.js
+function isPathInside(childPath, parentPath) {
+  const relation = import_node_path5.default.relative(parentPath, childPath);
+  return Boolean(
+    relation && relation !== ".." && !relation.startsWith(`..${import_node_path5.default.sep}`) && relation !== import_node_path5.default.resolve(childPath)
+  );
+}
+var import_node_path5;
+var init_is_path_inside = __esm({
+  "node_modules/.pnpm/is-path-inside@4.0.0/node_modules/is-path-inside/index.js"() {
+    import_node_path5 = __toESM(require("node:path"), 1);
+    __name(isPathInside, "isPathInside");
+  }
+});
+
+// node_modules/.pnpm/p-map@7.0.4/node_modules/p-map/index.js
+async function pMap(iterable, mapper, {
+  concurrency = Number.POSITIVE_INFINITY,
+  stopOnError = true,
+  signal
+} = {}) {
+  return new Promise((resolve_, reject_) => {
+    if (iterable[Symbol.iterator] === void 0 && iterable[Symbol.asyncIterator] === void 0) {
+      throw new TypeError(`Expected \`input\` to be either an \`Iterable\` or \`AsyncIterable\`, got (${typeof iterable})`);
+    }
+    if (typeof mapper !== "function") {
+      throw new TypeError("Mapper function is required");
+    }
+    if (!(Number.isSafeInteger(concurrency) && concurrency >= 1 || concurrency === Number.POSITIVE_INFINITY)) {
+      throw new TypeError(`Expected \`concurrency\` to be an integer from 1 and up or \`Infinity\`, got \`${concurrency}\` (${typeof concurrency})`);
+    }
+    const result = [];
+    const errors = [];
+    const skippedIndexesMap = /* @__PURE__ */ new Map();
+    let isRejected = false;
+    let isResolved = false;
+    let isIterableDone = false;
+    let resolvingCount = 0;
+    let currentIndex = 0;
+    const iterator = iterable[Symbol.iterator] === void 0 ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();
+    const signalListener = /* @__PURE__ */ __name(() => {
+      reject(signal.reason);
+    }, "signalListener");
+    const cleanup = /* @__PURE__ */ __name(() => {
+      signal?.removeEventListener("abort", signalListener);
+    }, "cleanup");
+    const resolve = /* @__PURE__ */ __name((value) => {
+      resolve_(value);
+      cleanup();
+    }, "resolve");
+    const reject = /* @__PURE__ */ __name((reason) => {
+      isRejected = true;
+      isResolved = true;
+      reject_(reason);
+      cleanup();
+    }, "reject");
+    if (signal) {
+      if (signal.aborted) {
+        reject(signal.reason);
+      }
+      signal.addEventListener("abort", signalListener, { once: true });
+    }
+    const next = /* @__PURE__ */ __name(async () => {
+      if (isResolved) {
+        return;
+      }
+      const nextItem = await iterator.next();
+      const index = currentIndex;
+      currentIndex++;
+      if (nextItem.done) {
+        isIterableDone = true;
+        if (resolvingCount === 0 && !isResolved) {
+          if (!stopOnError && errors.length > 0) {
+            reject(new AggregateError(errors));
+            return;
+          }
+          isResolved = true;
+          if (skippedIndexesMap.size === 0) {
+            resolve(result);
+            return;
+          }
+          const pureResult = [];
+          for (const [index2, value] of result.entries()) {
+            if (skippedIndexesMap.get(index2) === pMapSkip) {
+              continue;
+            }
+            pureResult.push(value);
+          }
+          resolve(pureResult);
+        }
+        return;
+      }
+      resolvingCount++;
+      (async () => {
+        try {
+          const element = await nextItem.value;
+          if (isResolved) {
+            return;
+          }
+          const value = await mapper(element, index);
+          if (value === pMapSkip) {
+            skippedIndexesMap.set(index, value);
+          }
+          result[index] = value;
+          resolvingCount--;
+          await next();
+        } catch (error) {
+          if (stopOnError) {
+            reject(error);
+          } else {
+            errors.push(error);
+            resolvingCount--;
+            try {
+              await next();
+            } catch (error2) {
+              reject(error2);
+            }
+          }
+        }
+      })();
+    }, "next");
+    (async () => {
+      for (let index = 0; index < concurrency; index++) {
+        try {
+          await next();
+        } catch (error) {
+          reject(error);
+          break;
+        }
+        if (isIterableDone || isRejected) {
+          break;
+        }
+      }
+    })();
+  });
+}
+var pMapSkip;
+var init_p_map = __esm({
+  "node_modules/.pnpm/p-map@7.0.4/node_modules/p-map/index.js"() {
+    __name(pMap, "pMap");
+    pMapSkip = Symbol("skip");
+  }
+});
+
+// node_modules/.pnpm/presentable-error@0.0.1/node_modules/presentable-error/index.js
+var toString, PresentableError;
+var init_presentable_error = __esm({
+  "node_modules/.pnpm/presentable-error@0.0.1/node_modules/presentable-error/index.js"() {
+    ({ toString } = Object.prototype);
+    PresentableError = class _PresentableError extends Error {
+      static {
+        __name(this, "PresentableError");
+      }
+      constructor(message, { cause } = {}) {
+        super();
+        if (message instanceof _PresentableError) {
+          return message;
+        }
+        if (typeof message !== "string") {
+          throw new TypeError("Message required.");
+        }
+        this.name = "PresentableError";
+        this.message = message;
+        this.cause = cause;
+      }
+      get isPresentable() {
+        return true;
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/del@8.0.1/node_modules/del/index.js
+var del_exports = {};
+__export(del_exports, {
+  deleteAsync: () => deleteAsync,
+  deleteSync: () => deleteSync
+});
+function safeCheck(file, cwd) {
+  if (isPathCwd(file)) {
+    throw new PresentableError("Cannot delete the current working directory. Can be overridden with the `force` option.");
+  }
+  if (!isPathInside(file, cwd)) {
+    throw new PresentableError("Cannot delete files/directories outside the current working directory. Can be overridden with the `force` option.");
+  }
+}
+function normalizePatterns(patterns) {
+  patterns = Array.isArray(patterns) ? patterns : [patterns];
+  patterns = patterns.map((pattern) => {
+    if (import_node_process4.default.platform === "win32" && (0, import_is_glob.default)(pattern) === false) {
+      return slash(pattern);
+    }
+    return pattern;
+  });
+  return patterns;
+}
+async function deleteAsync(patterns, { force, dryRun, cwd = import_node_process4.default.cwd(), onProgress = /* @__PURE__ */ __name(() => {
+}, "onProgress"), ...options } = {}) {
+  options = {
+    expandDirectories: false,
+    onlyFiles: false,
+    followSymbolicLinks: false,
+    cwd,
+    ...options
+  };
+  patterns = normalizePatterns(patterns);
+  const paths = await globby(patterns, options);
+  const files = paths.sort((a, b) => b.localeCompare(a));
+  if (files.length === 0) {
+    onProgress({
+      totalCount: 0,
+      deletedCount: 0,
+      percent: 1
+    });
+  }
+  let deletedCount = 0;
+  const mapper = /* @__PURE__ */ __name(async (file) => {
+    file = import_node_path6.default.resolve(cwd, file);
+    if (!force) {
+      safeCheck(file, cwd);
+    }
+    if (!dryRun) {
+      await import_promises4.default.rm(file, { recursive: true, force: true });
+    }
+    deletedCount += 1;
+    onProgress({
+      totalCount: files.length,
+      deletedCount,
+      percent: deletedCount / files.length,
+      path: file
+    });
+    return file;
+  }, "mapper");
+  const removedFiles = await pMap(files, mapper, options);
+  removedFiles.sort((a, b) => a.localeCompare(b));
+  return removedFiles;
+}
+function deleteSync(patterns, { force, dryRun, cwd = import_node_process4.default.cwd(), ...options } = {}) {
+  options = {
+    expandDirectories: false,
+    onlyFiles: false,
+    followSymbolicLinks: false,
+    cwd,
+    ...options
+  };
+  patterns = normalizePatterns(patterns);
+  const files = globbySync(patterns, options).sort((a, b) => b.localeCompare(a));
+  const removedFiles = files.map((file) => {
+    file = import_node_path6.default.resolve(cwd, file);
+    if (!force) {
+      safeCheck(file, cwd);
+    }
+    if (!dryRun) {
+      import_node_fs4.default.rmSync(file, { recursive: true, force: true });
+    }
+    return file;
+  });
+  removedFiles.sort((a, b) => a.localeCompare(b));
+  return removedFiles;
+}
+var import_node_fs4, import_promises4, import_node_path6, import_node_process4, import_is_glob;
+var init_del = __esm({
+  "node_modules/.pnpm/del@8.0.1/node_modules/del/index.js"() {
+    import_node_fs4 = __toESM(require("node:fs"), 1);
+    import_promises4 = __toESM(require("node:fs/promises"), 1);
+    import_node_path6 = __toESM(require("node:path"), 1);
+    import_node_process4 = __toESM(require("node:process"), 1);
+    init_globby();
+    import_is_glob = __toESM(require_is_glob(), 1);
+    init_is_path_cwd();
+    init_is_path_inside();
+    init_p_map();
+    init_slash();
+    init_presentable_error();
+    __name(safeCheck, "safeCheck");
+    __name(normalizePatterns, "normalizePatterns");
+    __name(deleteAsync, "deleteAsync");
+    __name(deleteSync, "deleteSync");
+  }
+});
+
+// src/external/pico-pack.js
+var picomatch = require_picomatch2();
+var { deleteAsync: deleteAsync2, deleteSync: deleteSync2 } = (init_del(), __toCommonJS(del_exports));
+var fastGlob3 = require_out4();
+var del = {
+  deleteAsync: deleteAsync2,
+  deleteSync: deleteSync2
+};
+var glob = fastGlob3.globStream ? {
+  glob: fastGlob3,
+  globStream: fastGlob3.globStream,
+  globSync: fastGlob3.sync
+} : fastGlob3;
+module.exports = {
+  del,
+  glob,
+  picomatch
+};
+/*! Bundled license information:
+
+is-extglob/index.js:
+  (*!
+   * is-extglob 
+   *
+   * Copyright (c) 2014-2016, Jon Schlinkert.
+   * Licensed under the MIT License.
+   *)
+
+is-glob/index.js:
+  (*!
+   * is-glob 
+   *
+   * Copyright (c) 2014-2017, Jon Schlinkert.
+   * Released under the MIT License.
+   *)
+
+is-number/index.js:
+  (*!
+   * is-number 
+   *
+   * Copyright (c) 2014-present, Jon Schlinkert.
+   * Released under the MIT License.
+   *)
+
+to-regex-range/index.js:
+  (*!
+   * to-regex-range 
+   *
+   * Copyright (c) 2015-present, Jon Schlinkert.
+   * Released under the MIT License.
+   *)
+
+fill-range/index.js:
+  (*!
+   * fill-range 
+   *
+   * Copyright (c) 2014-present, Jon Schlinkert.
+   * Licensed under the MIT License.
+   *)
+
+queue-microtask/index.js:
+  (*! queue-microtask. MIT License. Feross Aboukhadijeh  *)
+
+run-parallel/index.js:
+  (*! run-parallel. MIT License. Feross Aboukhadijeh  *)
+*/
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/picomatch.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/picomatch.js
new file mode 100644
index 00000000..8ed03d43
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/picomatch.js
@@ -0,0 +1,6 @@
+'use strict'
+
+// Re-export from pico-pack bundle.
+const { picomatch } = require('./pico-pack.js')
+
+module.exports = picomatch
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/pony-cause.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/pony-cause.js
new file mode 100644
index 00000000..fb19df5a
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/pony-cause.js
@@ -0,0 +1,148 @@
+"use strict";
+/**
+ * Bundled from pony-cause
+ * This is a zero-dependency bundle created by esbuild.
+ */
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+var __commonJS = (cb, mod) => function __require() {
+  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+
+// node_modules/.pnpm/pony-cause@2.1.11/node_modules/pony-cause/lib/error-with-cause.js
+var require_error_with_cause = __commonJS({
+  "node_modules/.pnpm/pony-cause@2.1.11/node_modules/pony-cause/lib/error-with-cause.js"(exports2, module2) {
+    "use strict";
+    var ErrorWithCause = class _ErrorWithCause extends Error {
+      static {
+        __name(this, "ErrorWithCause");
+      }
+      // linemod-prefix-with: export
+      /**
+       * @param {string} message
+       * @param {{ cause?: T }} options
+       */
+      constructor(message, { cause } = {}) {
+        super(message);
+        this.name = _ErrorWithCause.name;
+        if (cause) {
+          this.cause = cause;
+        }
+        this.message = message;
+      }
+    };
+    module2.exports = {
+      // linemod-remove
+      ErrorWithCause
+      // linemod-remove
+    };
+  }
+});
+
+// node_modules/.pnpm/pony-cause@2.1.11/node_modules/pony-cause/lib/helpers.js
+var require_helpers = __commonJS({
+  "node_modules/.pnpm/pony-cause@2.1.11/node_modules/pony-cause/lib/helpers.js"(exports2, module2) {
+    "use strict";
+    var findCauseByReference = /* @__PURE__ */ __name((err, reference) => {
+      if (!err || !reference) return;
+      if (!(err instanceof Error)) return;
+      if (!(reference.prototype instanceof Error) && // @ts-ignore
+      reference !== Error) return;
+      const seen = /* @__PURE__ */ new Set();
+      let currentErr = err;
+      while (currentErr && !seen.has(currentErr)) {
+        seen.add(currentErr);
+        if (currentErr instanceof reference) {
+          return currentErr;
+        }
+        currentErr = getErrorCause(currentErr);
+      }
+    }, "findCauseByReference");
+    var getErrorCause = /* @__PURE__ */ __name((err) => {
+      if (!err || typeof err !== "object" || !("cause" in err)) {
+        return;
+      }
+      if (typeof err.cause === "function") {
+        const causeResult = err.cause();
+        return causeResult instanceof Error ? causeResult : void 0;
+      } else {
+        return err.cause instanceof Error ? err.cause : void 0;
+      }
+    }, "getErrorCause");
+    var _stackWithCauses = /* @__PURE__ */ __name((err, seen) => {
+      if (!(err instanceof Error)) return "";
+      const stack = err.stack || "";
+      if (seen.has(err)) {
+        return stack + "\ncauses have become circular...";
+      }
+      const cause = getErrorCause(err);
+      if (cause) {
+        seen.add(err);
+        return stack + "\ncaused by: " + _stackWithCauses(cause, seen);
+      } else {
+        return stack;
+      }
+    }, "_stackWithCauses");
+    var stackWithCauses = /* @__PURE__ */ __name((err) => _stackWithCauses(err, /* @__PURE__ */ new Set()), "stackWithCauses");
+    var _messageWithCauses = /* @__PURE__ */ __name((err, seen, skip) => {
+      if (!(err instanceof Error)) return "";
+      const message = skip ? "" : err.message || "";
+      if (seen.has(err)) {
+        return message + ": ...";
+      }
+      const cause = getErrorCause(err);
+      if (cause) {
+        seen.add(err);
+        const skipIfVErrorStyleCause = "cause" in err && typeof err.cause === "function";
+        return message + (skipIfVErrorStyleCause ? "" : ": ") + _messageWithCauses(cause, seen, skipIfVErrorStyleCause);
+      } else {
+        return message;
+      }
+    }, "_messageWithCauses");
+    var messageWithCauses = /* @__PURE__ */ __name((err) => _messageWithCauses(err, /* @__PURE__ */ new Set()), "messageWithCauses");
+    module2.exports = {
+      // linemod-remove
+      findCauseByReference,
+      // linemod-remove
+      getErrorCause,
+      // linemod-remove
+      stackWithCauses,
+      // linemod-remove
+      messageWithCauses
+      // linemod-remove
+    };
+  }
+});
+
+// node_modules/.pnpm/pony-cause@2.1.11/node_modules/pony-cause/index.js
+var require_pony_cause = __commonJS({
+  "node_modules/.pnpm/pony-cause@2.1.11/node_modules/pony-cause/index.js"(exports2, module2) {
+    "use strict";
+    var { ErrorWithCause } = require_error_with_cause();
+    var {
+      // linemod-replace-with: export {
+      findCauseByReference,
+      getErrorCause,
+      messageWithCauses,
+      stackWithCauses
+    } = require_helpers();
+    module2.exports = {
+      // linemod-remove
+      ErrorWithCause,
+      // linemod-remove
+      findCauseByReference,
+      // linemod-remove
+      getErrorCause,
+      // linemod-remove
+      stackWithCauses,
+      // linemod-remove
+      messageWithCauses
+      // linemod-remove
+    };
+  }
+});
+
+// src/external/pony-cause.js
+module.exports = require_pony_cause();
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/semver.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/semver.js
new file mode 100644
index 00000000..ee80d7be
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/semver.js
@@ -0,0 +1,5 @@
+'use strict'
+
+// Re-export from npm-pack bundle for better deduplication.
+const { semver } = require('./npm-pack')
+module.exports = semver
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/signal-exit.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/signal-exit.js
new file mode 100644
index 00000000..e2b9e675
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/signal-exit.js
@@ -0,0 +1,5 @@
+'use strict'
+
+// Re-export from external-pack bundle for better deduplication.
+const { signalExit } = require('./external-pack')
+module.exports = signalExit
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/spdx-correct.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/spdx-correct.js
new file mode 100644
index 00000000..c83aae64
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/spdx-correct.js
@@ -0,0 +1,5 @@
+'use strict'
+
+// Re-export from spdx-pack bundle for better deduplication.
+const { spdxCorrect } = require('./spdx-pack')
+module.exports = spdxCorrect
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/spdx-expression-parse.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/spdx-expression-parse.js
new file mode 100644
index 00000000..4118a818
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/spdx-expression-parse.js
@@ -0,0 +1,5 @@
+'use strict'
+
+// Re-export from spdx-pack bundle for better deduplication.
+const { spdxExpressionParse } = require('./spdx-pack')
+module.exports = spdxExpressionParse
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/spdx-pack.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/spdx-pack.js
new file mode 100644
index 00000000..4282432b
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/spdx-pack.js
@@ -0,0 +1,1418 @@
+"use strict";
+/**
+ * Bundled from spdx-pack
+ * This is a zero-dependency bundle created by esbuild.
+ */
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+var __commonJS = (cb, mod) => function __require() {
+  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+
+// node_modules/.pnpm/spdx-license-ids@3.0.23/node_modules/spdx-license-ids/index.json
+var require_spdx_license_ids = __commonJS({
+  "node_modules/.pnpm/spdx-license-ids@3.0.23/node_modules/spdx-license-ids/index.json"(exports2, module2) {
+    module2.exports = [
+      "0BSD",
+      "3D-Slicer-1.0",
+      "AAL",
+      "ADSL",
+      "AFL-1.1",
+      "AFL-1.2",
+      "AFL-2.0",
+      "AFL-2.1",
+      "AFL-3.0",
+      "AGPL-1.0-only",
+      "AGPL-1.0-or-later",
+      "AGPL-3.0-only",
+      "AGPL-3.0-or-later",
+      "ALGLIB-Documentation",
+      "AMD-newlib",
+      "AMDPLPA",
+      "AML",
+      "AML-glslang",
+      "AMPAS",
+      "ANTLR-PD",
+      "ANTLR-PD-fallback",
+      "APAFML",
+      "APL-1.0",
+      "APSL-1.0",
+      "APSL-1.1",
+      "APSL-1.2",
+      "APSL-2.0",
+      "ASWF-Digital-Assets-1.0",
+      "ASWF-Digital-Assets-1.1",
+      "Abstyles",
+      "AdaCore-doc",
+      "Adobe-2006",
+      "Adobe-Display-PostScript",
+      "Adobe-Glyph",
+      "Adobe-Utopia",
+      "Advanced-Cryptics-Dictionary",
+      "Afmparse",
+      "Aladdin",
+      "Apache-1.0",
+      "Apache-1.1",
+      "Apache-2.0",
+      "App-s2p",
+      "Arphic-1999",
+      "Artistic-1.0",
+      "Artistic-1.0-Perl",
+      "Artistic-1.0-cl8",
+      "Artistic-2.0",
+      "Artistic-dist",
+      "Aspell-RU",
+      "BOLA-1.1",
+      "BSD-1-Clause",
+      "BSD-2-Clause",
+      "BSD-2-Clause-Darwin",
+      "BSD-2-Clause-Patent",
+      "BSD-2-Clause-Views",
+      "BSD-2-Clause-first-lines",
+      "BSD-2-Clause-pkgconf-disclaimer",
+      "BSD-3-Clause",
+      "BSD-3-Clause-Attribution",
+      "BSD-3-Clause-Clear",
+      "BSD-3-Clause-HP",
+      "BSD-3-Clause-LBNL",
+      "BSD-3-Clause-Modification",
+      "BSD-3-Clause-No-Military-License",
+      "BSD-3-Clause-No-Nuclear-License",
+      "BSD-3-Clause-No-Nuclear-License-2014",
+      "BSD-3-Clause-No-Nuclear-Warranty",
+      "BSD-3-Clause-Open-MPI",
+      "BSD-3-Clause-Sun",
+      "BSD-3-Clause-Tso",
+      "BSD-3-Clause-acpica",
+      "BSD-3-Clause-flex",
+      "BSD-4-Clause",
+      "BSD-4-Clause-Shortened",
+      "BSD-4-Clause-UC",
+      "BSD-4.3RENO",
+      "BSD-4.3TAHOE",
+      "BSD-Advertising-Acknowledgement",
+      "BSD-Attribution-HPND-disclaimer",
+      "BSD-Inferno-Nettverk",
+      "BSD-Mark-Modifications",
+      "BSD-Protection",
+      "BSD-Source-Code",
+      "BSD-Source-beginning-file",
+      "BSD-Systemics",
+      "BSD-Systemics-W3Works",
+      "BSL-1.0",
+      "BUSL-1.1",
+      "Baekmuk",
+      "Bahyph",
+      "Barr",
+      "Beerware",
+      "BitTorrent-1.0",
+      "BitTorrent-1.1",
+      "Bitstream-Charter",
+      "Bitstream-Vera",
+      "BlueOak-1.0.0",
+      "Boehm-GC",
+      "Boehm-GC-without-fee",
+      "Borceux",
+      "Brian-Gladman-2-Clause",
+      "Brian-Gladman-3-Clause",
+      "Buddy",
+      "C-UDA-1.0",
+      "CAL-1.0",
+      "CAL-1.0-Combined-Work-Exception",
+      "CAPEC-tou",
+      "CATOSL-1.1",
+      "CC-BY-1.0",
+      "CC-BY-2.0",
+      "CC-BY-2.5",
+      "CC-BY-2.5-AU",
+      "CC-BY-3.0",
+      "CC-BY-3.0-AT",
+      "CC-BY-3.0-AU",
+      "CC-BY-3.0-DE",
+      "CC-BY-3.0-IGO",
+      "CC-BY-3.0-NL",
+      "CC-BY-3.0-US",
+      "CC-BY-4.0",
+      "CC-BY-NC-1.0",
+      "CC-BY-NC-2.0",
+      "CC-BY-NC-2.5",
+      "CC-BY-NC-3.0",
+      "CC-BY-NC-3.0-DE",
+      "CC-BY-NC-4.0",
+      "CC-BY-NC-ND-1.0",
+      "CC-BY-NC-ND-2.0",
+      "CC-BY-NC-ND-2.5",
+      "CC-BY-NC-ND-3.0",
+      "CC-BY-NC-ND-3.0-DE",
+      "CC-BY-NC-ND-3.0-IGO",
+      "CC-BY-NC-ND-4.0",
+      "CC-BY-NC-SA-1.0",
+      "CC-BY-NC-SA-2.0",
+      "CC-BY-NC-SA-2.0-DE",
+      "CC-BY-NC-SA-2.0-FR",
+      "CC-BY-NC-SA-2.0-UK",
+      "CC-BY-NC-SA-2.5",
+      "CC-BY-NC-SA-3.0",
+      "CC-BY-NC-SA-3.0-DE",
+      "CC-BY-NC-SA-3.0-IGO",
+      "CC-BY-NC-SA-4.0",
+      "CC-BY-ND-1.0",
+      "CC-BY-ND-2.0",
+      "CC-BY-ND-2.5",
+      "CC-BY-ND-3.0",
+      "CC-BY-ND-3.0-DE",
+      "CC-BY-ND-4.0",
+      "CC-BY-SA-1.0",
+      "CC-BY-SA-2.0",
+      "CC-BY-SA-2.0-UK",
+      "CC-BY-SA-2.1-JP",
+      "CC-BY-SA-2.5",
+      "CC-BY-SA-3.0",
+      "CC-BY-SA-3.0-AT",
+      "CC-BY-SA-3.0-DE",
+      "CC-BY-SA-3.0-IGO",
+      "CC-BY-SA-4.0",
+      "CC-PDDC",
+      "CC-PDM-1.0",
+      "CC-SA-1.0",
+      "CC0-1.0",
+      "CDDL-1.0",
+      "CDDL-1.1",
+      "CDL-1.0",
+      "CDLA-Permissive-1.0",
+      "CDLA-Permissive-2.0",
+      "CDLA-Sharing-1.0",
+      "CECILL-1.0",
+      "CECILL-1.1",
+      "CECILL-2.0",
+      "CECILL-2.1",
+      "CECILL-B",
+      "CECILL-C",
+      "CERN-OHL-1.1",
+      "CERN-OHL-1.2",
+      "CERN-OHL-P-2.0",
+      "CERN-OHL-S-2.0",
+      "CERN-OHL-W-2.0",
+      "CFITSIO",
+      "CMU-Mach",
+      "CMU-Mach-nodoc",
+      "CNRI-Jython",
+      "CNRI-Python",
+      "CNRI-Python-GPL-Compatible",
+      "COIL-1.0",
+      "CPAL-1.0",
+      "CPL-1.0",
+      "CPOL-1.02",
+      "CUA-OPL-1.0",
+      "Caldera",
+      "Caldera-no-preamble",
+      "Catharon",
+      "ClArtistic",
+      "Clips",
+      "Community-Spec-1.0",
+      "Condor-1.1",
+      "Cornell-Lossless-JPEG",
+      "Cronyx",
+      "Crossword",
+      "CryptoSwift",
+      "CrystalStacker",
+      "Cube",
+      "D-FSL-1.0",
+      "DEC-3-Clause",
+      "DL-DE-BY-2.0",
+      "DL-DE-ZERO-2.0",
+      "DOC",
+      "DRL-1.0",
+      "DRL-1.1",
+      "DSDP",
+      "DocBook-DTD",
+      "DocBook-Schema",
+      "DocBook-Stylesheet",
+      "DocBook-XML",
+      "Dotseqn",
+      "ECL-1.0",
+      "ECL-2.0",
+      "EFL-1.0",
+      "EFL-2.0",
+      "EPICS",
+      "EPL-1.0",
+      "EPL-2.0",
+      "ESA-PL-permissive-2.4",
+      "ESA-PL-strong-copyleft-2.4",
+      "ESA-PL-weak-copyleft-2.4",
+      "EUDatagrid",
+      "EUPL-1.0",
+      "EUPL-1.1",
+      "EUPL-1.2",
+      "Elastic-2.0",
+      "Entessa",
+      "ErlPL-1.1",
+      "Eurosym",
+      "FBM",
+      "FDK-AAC",
+      "FSFAP",
+      "FSFAP-no-warranty-disclaimer",
+      "FSFUL",
+      "FSFULLR",
+      "FSFULLRSD",
+      "FSFULLRWD",
+      "FSL-1.1-ALv2",
+      "FSL-1.1-MIT",
+      "FTL",
+      "Fair",
+      "Ferguson-Twofish",
+      "Frameworx-1.0",
+      "FreeBSD-DOC",
+      "FreeImage",
+      "Furuseth",
+      "GCR-docs",
+      "GD",
+      "GFDL-1.1-invariants-only",
+      "GFDL-1.1-invariants-or-later",
+      "GFDL-1.1-no-invariants-only",
+      "GFDL-1.1-no-invariants-or-later",
+      "GFDL-1.1-only",
+      "GFDL-1.1-or-later",
+      "GFDL-1.2-invariants-only",
+      "GFDL-1.2-invariants-or-later",
+      "GFDL-1.2-no-invariants-only",
+      "GFDL-1.2-no-invariants-or-later",
+      "GFDL-1.2-only",
+      "GFDL-1.2-or-later",
+      "GFDL-1.3-invariants-only",
+      "GFDL-1.3-invariants-or-later",
+      "GFDL-1.3-no-invariants-only",
+      "GFDL-1.3-no-invariants-or-later",
+      "GFDL-1.3-only",
+      "GFDL-1.3-or-later",
+      "GL2PS",
+      "GLWTPL",
+      "GPL-1.0-only",
+      "GPL-1.0-or-later",
+      "GPL-2.0-only",
+      "GPL-2.0-or-later",
+      "GPL-3.0-only",
+      "GPL-3.0-or-later",
+      "Game-Programming-Gems",
+      "Giftware",
+      "Glide",
+      "Glulxe",
+      "Graphics-Gems",
+      "Gutmann",
+      "HDF5",
+      "HIDAPI",
+      "HP-1986",
+      "HP-1989",
+      "HPND",
+      "HPND-DEC",
+      "HPND-Fenneberg-Livingston",
+      "HPND-INRIA-IMAG",
+      "HPND-Intel",
+      "HPND-Kevlin-Henney",
+      "HPND-MIT-disclaimer",
+      "HPND-Markus-Kuhn",
+      "HPND-Netrek",
+      "HPND-Pbmplus",
+      "HPND-SMC",
+      "HPND-UC",
+      "HPND-UC-export-US",
+      "HPND-doc",
+      "HPND-doc-sell",
+      "HPND-export-US",
+      "HPND-export-US-acknowledgement",
+      "HPND-export-US-modify",
+      "HPND-export2-US",
+      "HPND-merchantability-variant",
+      "HPND-sell-MIT-disclaimer-xserver",
+      "HPND-sell-regexpr",
+      "HPND-sell-variant",
+      "HPND-sell-variant-MIT-disclaimer",
+      "HPND-sell-variant-MIT-disclaimer-rev",
+      "HPND-sell-variant-critical-systems",
+      "HTMLTIDY",
+      "HaskellReport",
+      "Hippocratic-2.1",
+      "IBM-pibs",
+      "ICU",
+      "IEC-Code-Components-EULA",
+      "IJG",
+      "IJG-short",
+      "IPA",
+      "IPL-1.0",
+      "ISC",
+      "ISC-Veillard",
+      "ISO-permission",
+      "ImageMagick",
+      "Imlib2",
+      "Info-ZIP",
+      "Inner-Net-2.0",
+      "InnoSetup",
+      "Intel",
+      "Intel-ACPI",
+      "Interbase-1.0",
+      "JPL-image",
+      "JPNIC",
+      "JSON",
+      "Jam",
+      "JasPer-2.0",
+      "Kastrup",
+      "Kazlib",
+      "Knuth-CTAN",
+      "LAL-1.2",
+      "LAL-1.3",
+      "LGPL-2.0-only",
+      "LGPL-2.0-or-later",
+      "LGPL-2.1-only",
+      "LGPL-2.1-or-later",
+      "LGPL-3.0-only",
+      "LGPL-3.0-or-later",
+      "LGPLLR",
+      "LOOP",
+      "LPD-document",
+      "LPL-1.0",
+      "LPL-1.02",
+      "LPPL-1.0",
+      "LPPL-1.1",
+      "LPPL-1.2",
+      "LPPL-1.3a",
+      "LPPL-1.3c",
+      "LZMA-SDK-9.11-to-9.20",
+      "LZMA-SDK-9.22",
+      "Latex2e",
+      "Latex2e-translated-notice",
+      "Leptonica",
+      "LiLiQ-P-1.1",
+      "LiLiQ-R-1.1",
+      "LiLiQ-Rplus-1.1",
+      "Libpng",
+      "Linux-OpenIB",
+      "Linux-man-pages-1-para",
+      "Linux-man-pages-copyleft",
+      "Linux-man-pages-copyleft-2-para",
+      "Linux-man-pages-copyleft-var",
+      "Lucida-Bitmap-Fonts",
+      "MIPS",
+      "MIT",
+      "MIT-0",
+      "MIT-CMU",
+      "MIT-Click",
+      "MIT-Festival",
+      "MIT-Khronos-old",
+      "MIT-Modern-Variant",
+      "MIT-STK",
+      "MIT-Wu",
+      "MIT-advertising",
+      "MIT-enna",
+      "MIT-feh",
+      "MIT-open-group",
+      "MIT-testregex",
+      "MITNFA",
+      "MMIXware",
+      "MMPL-1.0.1",
+      "MPEG-SSG",
+      "MPL-1.0",
+      "MPL-1.1",
+      "MPL-2.0",
+      "MPL-2.0-no-copyleft-exception",
+      "MS-LPL",
+      "MS-PL",
+      "MS-RL",
+      "MTLL",
+      "Mackerras-3-Clause",
+      "Mackerras-3-Clause-acknowledgment",
+      "MakeIndex",
+      "Martin-Birgmeier",
+      "McPhee-slideshow",
+      "Minpack",
+      "MirOS",
+      "Motosoto",
+      "MulanPSL-1.0",
+      "MulanPSL-2.0",
+      "Multics",
+      "Mup",
+      "NAIST-2003",
+      "NASA-1.3",
+      "NBPL-1.0",
+      "NCBI-PD",
+      "NCGL-UK-2.0",
+      "NCL",
+      "NCSA",
+      "NGPL",
+      "NICTA-1.0",
+      "NIST-PD",
+      "NIST-PD-TNT",
+      "NIST-PD-fallback",
+      "NIST-Software",
+      "NLOD-1.0",
+      "NLOD-2.0",
+      "NLPL",
+      "NOSL",
+      "NPL-1.0",
+      "NPL-1.1",
+      "NPOSL-3.0",
+      "NRL",
+      "NTIA-PD",
+      "NTP",
+      "NTP-0",
+      "Naumen",
+      "NetCDF",
+      "Newsletr",
+      "Nokia",
+      "Noweb",
+      "O-UDA-1.0",
+      "OAR",
+      "OCCT-PL",
+      "OCLC-2.0",
+      "ODC-By-1.0",
+      "ODbL-1.0",
+      "OFFIS",
+      "OFL-1.0",
+      "OFL-1.0-RFN",
+      "OFL-1.0-no-RFN",
+      "OFL-1.1",
+      "OFL-1.1-RFN",
+      "OFL-1.1-no-RFN",
+      "OGC-1.0",
+      "OGDL-Taiwan-1.0",
+      "OGL-Canada-2.0",
+      "OGL-UK-1.0",
+      "OGL-UK-2.0",
+      "OGL-UK-3.0",
+      "OGTSL",
+      "OLDAP-1.1",
+      "OLDAP-1.2",
+      "OLDAP-1.3",
+      "OLDAP-1.4",
+      "OLDAP-2.0",
+      "OLDAP-2.0.1",
+      "OLDAP-2.1",
+      "OLDAP-2.2",
+      "OLDAP-2.2.1",
+      "OLDAP-2.2.2",
+      "OLDAP-2.3",
+      "OLDAP-2.4",
+      "OLDAP-2.5",
+      "OLDAP-2.6",
+      "OLDAP-2.7",
+      "OLDAP-2.8",
+      "OLFL-1.3",
+      "OML",
+      "OPL-1.0",
+      "OPL-UK-3.0",
+      "OPUBL-1.0",
+      "OSC-1.0",
+      "OSET-PL-2.1",
+      "OSL-1.0",
+      "OSL-1.1",
+      "OSL-2.0",
+      "OSL-2.1",
+      "OSL-3.0",
+      "OSSP",
+      "OpenMDW-1.0",
+      "OpenPBS-2.3",
+      "OpenSSL",
+      "OpenSSL-standalone",
+      "OpenVision",
+      "PADL",
+      "PDDL-1.0",
+      "PHP-3.0",
+      "PHP-3.01",
+      "PPL",
+      "PSF-2.0",
+      "ParaType-Free-Font-1.3",
+      "Parity-6.0.0",
+      "Parity-7.0.0",
+      "Pixar",
+      "Plexus",
+      "PolyForm-Noncommercial-1.0.0",
+      "PolyForm-Small-Business-1.0.0",
+      "PostgreSQL",
+      "Python-2.0",
+      "Python-2.0.1",
+      "QPL-1.0",
+      "QPL-1.0-INRIA-2004",
+      "Qhull",
+      "RHeCos-1.1",
+      "RPL-1.1",
+      "RPL-1.5",
+      "RPSL-1.0",
+      "RSA-MD",
+      "RSCPL",
+      "Rdisc",
+      "Ruby",
+      "Ruby-pty",
+      "SAX-PD",
+      "SAX-PD-2.0",
+      "SCEA",
+      "SGI-B-1.0",
+      "SGI-B-1.1",
+      "SGI-B-2.0",
+      "SGI-OpenGL",
+      "SGMLUG-PM",
+      "SGP4",
+      "SHL-0.5",
+      "SHL-0.51",
+      "SISSL",
+      "SISSL-1.2",
+      "SL",
+      "SMAIL-GPL",
+      "SMLNJ",
+      "SMPPL",
+      "SNIA",
+      "SOFA",
+      "SPL-1.0",
+      "SSH-OpenSSH",
+      "SSH-short",
+      "SSLeay-standalone",
+      "SSPL-1.0",
+      "SUL-1.0",
+      "SWL",
+      "Saxpath",
+      "SchemeReport",
+      "Sendmail",
+      "Sendmail-8.23",
+      "Sendmail-Open-Source-1.1",
+      "SimPL-2.0",
+      "Sleepycat",
+      "Soundex",
+      "Spencer-86",
+      "Spencer-94",
+      "Spencer-99",
+      "SugarCRM-1.1.3",
+      "Sun-PPP",
+      "Sun-PPP-2000",
+      "SunPro",
+      "Symlinks",
+      "TAPR-OHL-1.0",
+      "TCL",
+      "TCP-wrappers",
+      "TGPPL-1.0",
+      "TMate",
+      "TORQUE-1.1",
+      "TOSL",
+      "TPDL",
+      "TPL-1.0",
+      "TTWL",
+      "TTYP0",
+      "TU-Berlin-1.0",
+      "TU-Berlin-2.0",
+      "TekHVC",
+      "TermReadKey",
+      "ThirdEye",
+      "TrustedQSL",
+      "UCAR",
+      "UCL-1.0",
+      "UMich-Merit",
+      "UPL-1.0",
+      "URT-RLE",
+      "Ubuntu-font-1.0",
+      "UnRAR",
+      "Unicode-3.0",
+      "Unicode-DFS-2015",
+      "Unicode-DFS-2016",
+      "Unicode-TOU",
+      "UnixCrypt",
+      "Unlicense",
+      "Unlicense-libtelnet",
+      "Unlicense-libwhirlpool",
+      "VOSTROM",
+      "VSL-1.0",
+      "Vim",
+      "Vixie-Cron",
+      "W3C",
+      "W3C-19980720",
+      "W3C-20150513",
+      "WTFNMFPL",
+      "WTFPL",
+      "Watcom-1.0",
+      "Widget-Workshop",
+      "WordNet",
+      "Wsuipa",
+      "X11",
+      "X11-distribute-modifications-variant",
+      "X11-no-permit-persons",
+      "X11-swapped",
+      "XFree86-1.1",
+      "XSkat",
+      "Xdebug-1.03",
+      "Xerox",
+      "Xfig",
+      "Xnet",
+      "YPL-1.0",
+      "YPL-1.1",
+      "ZPL-1.1",
+      "ZPL-2.0",
+      "ZPL-2.1",
+      "Zed",
+      "Zeeff",
+      "Zend-2.0",
+      "Zimbra-1.3",
+      "Zimbra-1.4",
+      "Zlib",
+      "any-OSI",
+      "any-OSI-perl-modules",
+      "bcrypt-Solar-Designer",
+      "blessing",
+      "bzip2-1.0.6",
+      "check-cvs",
+      "checkmk",
+      "copyleft-next-0.3.0",
+      "copyleft-next-0.3.1",
+      "curl",
+      "cve-tou",
+      "diffmark",
+      "dtoa",
+      "dvipdfm",
+      "eGenix",
+      "etalab-2.0",
+      "fwlw",
+      "gSOAP-1.3b",
+      "generic-xts",
+      "gnuplot",
+      "gtkbook",
+      "hdparm",
+      "hyphen-bulgarian",
+      "iMatix",
+      "jove",
+      "libpng-1.6.35",
+      "libpng-2.0",
+      "libselinux-1.0",
+      "libtiff",
+      "libutil-David-Nugent",
+      "lsof",
+      "magaz",
+      "mailprio",
+      "man2html",
+      "metamail",
+      "mpi-permissive",
+      "mpich2",
+      "mplus",
+      "ngrep",
+      "pkgconf",
+      "pnmstitch",
+      "psfrag",
+      "psutils",
+      "python-ldap",
+      "radvd",
+      "snprintf",
+      "softSurfer",
+      "ssh-keyscan",
+      "swrule",
+      "threeparttable",
+      "ulem",
+      "w3m",
+      "wwl",
+      "xinetd",
+      "xkeyboard-config-Zinoviev",
+      "xlock",
+      "xpp",
+      "xzoom",
+      "zlib-acknowledgement"
+    ];
+  }
+});
+
+// node_modules/.pnpm/spdx-license-ids@3.0.23/node_modules/spdx-license-ids/deprecated.json
+var require_deprecated = __commonJS({
+  "node_modules/.pnpm/spdx-license-ids@3.0.23/node_modules/spdx-license-ids/deprecated.json"(exports2, module2) {
+    module2.exports = [
+      "AGPL-1.0",
+      "AGPL-3.0",
+      "BSD-2-Clause-FreeBSD",
+      "BSD-2-Clause-NetBSD",
+      "GFDL-1.1",
+      "GFDL-1.2",
+      "GFDL-1.3",
+      "GPL-1.0",
+      "GPL-2.0",
+      "GPL-2.0-with-GCC-exception",
+      "GPL-2.0-with-autoconf-exception",
+      "GPL-2.0-with-bison-exception",
+      "GPL-2.0-with-classpath-exception",
+      "GPL-2.0-with-font-exception",
+      "GPL-3.0",
+      "GPL-3.0-with-GCC-exception",
+      "GPL-3.0-with-autoconf-exception",
+      "LGPL-2.0",
+      "LGPL-2.1",
+      "LGPL-3.0",
+      "Net-SNMP",
+      "Nunit",
+      "StandardML-NJ",
+      "bzip2-1.0.5",
+      "eCos-2.0",
+      "wxWindows"
+    ];
+  }
+});
+
+// node_modules/.pnpm/spdx-exceptions@2.5.0/node_modules/spdx-exceptions/index.json
+var require_spdx_exceptions = __commonJS({
+  "node_modules/.pnpm/spdx-exceptions@2.5.0/node_modules/spdx-exceptions/index.json"(exports2, module2) {
+    module2.exports = [
+      "389-exception",
+      "Asterisk-exception",
+      "Autoconf-exception-2.0",
+      "Autoconf-exception-3.0",
+      "Autoconf-exception-generic",
+      "Autoconf-exception-generic-3.0",
+      "Autoconf-exception-macro",
+      "Bison-exception-1.24",
+      "Bison-exception-2.2",
+      "Bootloader-exception",
+      "Classpath-exception-2.0",
+      "CLISP-exception-2.0",
+      "cryptsetup-OpenSSL-exception",
+      "DigiRule-FOSS-exception",
+      "eCos-exception-2.0",
+      "Fawkes-Runtime-exception",
+      "FLTK-exception",
+      "fmt-exception",
+      "Font-exception-2.0",
+      "freertos-exception-2.0",
+      "GCC-exception-2.0",
+      "GCC-exception-2.0-note",
+      "GCC-exception-3.1",
+      "Gmsh-exception",
+      "GNAT-exception",
+      "GNOME-examples-exception",
+      "GNU-compiler-exception",
+      "gnu-javamail-exception",
+      "GPL-3.0-interface-exception",
+      "GPL-3.0-linking-exception",
+      "GPL-3.0-linking-source-exception",
+      "GPL-CC-1.0",
+      "GStreamer-exception-2005",
+      "GStreamer-exception-2008",
+      "i2p-gpl-java-exception",
+      "KiCad-libraries-exception",
+      "LGPL-3.0-linking-exception",
+      "libpri-OpenH323-exception",
+      "Libtool-exception",
+      "Linux-syscall-note",
+      "LLGPL",
+      "LLVM-exception",
+      "LZMA-exception",
+      "mif-exception",
+      "OCaml-LGPL-linking-exception",
+      "OCCT-exception-1.0",
+      "OpenJDK-assembly-exception-1.0",
+      "openvpn-openssl-exception",
+      "PS-or-PDF-font-exception-20170817",
+      "QPL-1.0-INRIA-2004-exception",
+      "Qt-GPL-exception-1.0",
+      "Qt-LGPL-exception-1.1",
+      "Qwt-exception-1.0",
+      "SANE-exception",
+      "SHL-2.0",
+      "SHL-2.1",
+      "stunnel-exception",
+      "SWI-exception",
+      "Swift-exception",
+      "Texinfo-exception",
+      "u-boot-exception-2.0",
+      "UBDL-exception",
+      "Universal-FOSS-exception-1.0",
+      "vsftpd-openssl-exception",
+      "WxWindows-exception-3.1",
+      "x11vnc-openssl-exception"
+    ];
+  }
+});
+
+// node_modules/.pnpm/spdx-expression-parse@4.0.0/node_modules/spdx-expression-parse/scan.js
+var require_scan = __commonJS({
+  "node_modules/.pnpm/spdx-expression-parse@4.0.0/node_modules/spdx-expression-parse/scan.js"(exports2, module2) {
+    "use strict";
+    var licenses = [].concat(require_spdx_license_ids()).concat(require_deprecated());
+    var exceptions = require_spdx_exceptions();
+    module2.exports = function(source) {
+      var index = 0;
+      function hasMore() {
+        return index < source.length;
+      }
+      __name(hasMore, "hasMore");
+      function read(value) {
+        if (value instanceof RegExp) {
+          var chars = source.slice(index);
+          var match = chars.match(value);
+          if (match) {
+            index += match[0].length;
+            return match[0];
+          }
+        } else {
+          if (source.indexOf(value, index) === index) {
+            index += value.length;
+            return value;
+          }
+        }
+      }
+      __name(read, "read");
+      function skipWhitespace() {
+        read(/[ ]*/);
+      }
+      __name(skipWhitespace, "skipWhitespace");
+      function operator() {
+        var string;
+        var possibilities = [/^WITH/i, /^AND/i, /^OR/i, "(", ")", ":", "+"];
+        for (var i = 0; i < possibilities.length; i++) {
+          string = read(possibilities[i]);
+          if (string) {
+            break;
+          }
+        }
+        if (string === "+" && index > 1 && source[index - 2] === " ") {
+          throw new Error("Space before `+`");
+        }
+        return string && {
+          type: "OPERATOR",
+          string: string.toUpperCase()
+        };
+      }
+      __name(operator, "operator");
+      function idstring() {
+        return read(/[A-Za-z0-9-.]+/);
+      }
+      __name(idstring, "idstring");
+      function expectIdstring() {
+        var string = idstring();
+        if (!string) {
+          throw new Error("Expected idstring at offset " + index);
+        }
+        return string;
+      }
+      __name(expectIdstring, "expectIdstring");
+      function documentRef() {
+        if (read("DocumentRef-")) {
+          var string = expectIdstring();
+          return { type: "DOCUMENTREF", string };
+        }
+      }
+      __name(documentRef, "documentRef");
+      function licenseRef() {
+        if (read("LicenseRef-")) {
+          var string = expectIdstring();
+          return { type: "LICENSEREF", string };
+        }
+      }
+      __name(licenseRef, "licenseRef");
+      function identifier() {
+        var begin = index;
+        var string = idstring();
+        if (licenses.indexOf(string) !== -1) {
+          return {
+            type: "LICENSE",
+            string
+          };
+        } else if (exceptions.indexOf(string) !== -1) {
+          return {
+            type: "EXCEPTION",
+            string
+          };
+        }
+        index = begin;
+      }
+      __name(identifier, "identifier");
+      function parseToken() {
+        return operator() || documentRef() || licenseRef() || identifier();
+      }
+      __name(parseToken, "parseToken");
+      var tokens = [];
+      while (hasMore()) {
+        skipWhitespace();
+        if (!hasMore()) {
+          break;
+        }
+        var token = parseToken();
+        if (!token) {
+          throw new Error("Unexpected `" + source[index] + "` at offset " + index);
+        }
+        tokens.push(token);
+      }
+      return tokens;
+    };
+  }
+});
+
+// node_modules/.pnpm/spdx-expression-parse@4.0.0/node_modules/spdx-expression-parse/parse.js
+var require_parse = __commonJS({
+  "node_modules/.pnpm/spdx-expression-parse@4.0.0/node_modules/spdx-expression-parse/parse.js"(exports2, module2) {
+    "use strict";
+    module2.exports = function(tokens) {
+      var index = 0;
+      function hasMore() {
+        return index < tokens.length;
+      }
+      __name(hasMore, "hasMore");
+      function token() {
+        return hasMore() ? tokens[index] : null;
+      }
+      __name(token, "token");
+      function next() {
+        if (!hasMore()) {
+          throw new Error();
+        }
+        index++;
+      }
+      __name(next, "next");
+      function parseOperator(operator) {
+        var t = token();
+        if (t && t.type === "OPERATOR" && operator === t.string) {
+          next();
+          return t.string;
+        }
+      }
+      __name(parseOperator, "parseOperator");
+      function parseWith() {
+        if (parseOperator("WITH")) {
+          var t = token();
+          if (t && t.type === "EXCEPTION") {
+            next();
+            return t.string;
+          }
+          throw new Error("Expected exception after `WITH`");
+        }
+      }
+      __name(parseWith, "parseWith");
+      function parseLicenseRef() {
+        var begin = index;
+        var string = "";
+        var t = token();
+        if (t.type === "DOCUMENTREF") {
+          next();
+          string += "DocumentRef-" + t.string + ":";
+          if (!parseOperator(":")) {
+            throw new Error("Expected `:` after `DocumentRef-...`");
+          }
+        }
+        t = token();
+        if (t.type === "LICENSEREF") {
+          next();
+          string += "LicenseRef-" + t.string;
+          return { license: string };
+        }
+        index = begin;
+      }
+      __name(parseLicenseRef, "parseLicenseRef");
+      function parseLicense() {
+        var t = token();
+        if (t && t.type === "LICENSE") {
+          next();
+          var node2 = { license: t.string };
+          if (parseOperator("+")) {
+            node2.plus = true;
+          }
+          var exception = parseWith();
+          if (exception) {
+            node2.exception = exception;
+          }
+          return node2;
+        }
+      }
+      __name(parseLicense, "parseLicense");
+      function parseParenthesizedExpression() {
+        var left = parseOperator("(");
+        if (!left) {
+          return;
+        }
+        var expr = parseExpression();
+        if (!parseOperator(")")) {
+          throw new Error("Expected `)`");
+        }
+        return expr;
+      }
+      __name(parseParenthesizedExpression, "parseParenthesizedExpression");
+      function parseAtom() {
+        return parseParenthesizedExpression() || parseLicenseRef() || parseLicense();
+      }
+      __name(parseAtom, "parseAtom");
+      function makeBinaryOpParser(operator, nextParser) {
+        return /* @__PURE__ */ __name(function parseBinaryOp() {
+          var left = nextParser();
+          if (!left) {
+            return;
+          }
+          if (!parseOperator(operator)) {
+            return left;
+          }
+          var right = parseBinaryOp();
+          if (!right) {
+            throw new Error("Expected expression");
+          }
+          return {
+            left,
+            conjunction: operator.toLowerCase(),
+            right
+          };
+        }, "parseBinaryOp");
+      }
+      __name(makeBinaryOpParser, "makeBinaryOpParser");
+      var parseAnd = makeBinaryOpParser("AND", parseAtom);
+      var parseExpression = makeBinaryOpParser("OR", parseAnd);
+      var node = parseExpression();
+      if (!node || hasMore()) {
+        throw new Error("Syntax error");
+      }
+      return node;
+    };
+  }
+});
+
+// node_modules/.pnpm/spdx-expression-parse@4.0.0/node_modules/spdx-expression-parse/index.js
+var require_spdx_expression_parse = __commonJS({
+  "node_modules/.pnpm/spdx-expression-parse@4.0.0/node_modules/spdx-expression-parse/index.js"(exports2, module2) {
+    "use strict";
+    var scan = require_scan();
+    var parse = require_parse();
+    module2.exports = function(source) {
+      return parse(scan(source));
+    };
+  }
+});
+
+// node_modules/.pnpm/spdx-correct@3.2.0/node_modules/spdx-correct/index.js
+var require_spdx_correct = __commonJS({
+  "node_modules/.pnpm/spdx-correct@3.2.0/node_modules/spdx-correct/index.js"(exports2, module2) {
+    var parse = require_spdx_expression_parse();
+    var spdxLicenseIds = require_spdx_license_ids();
+    function valid(string) {
+      try {
+        parse(string);
+        return true;
+      } catch (error) {
+        return false;
+      }
+    }
+    __name(valid, "valid");
+    function sortTranspositions(a, b) {
+      var length = b[0].length - a[0].length;
+      if (length !== 0) return length;
+      return a[0].toUpperCase().localeCompare(b[0].toUpperCase());
+    }
+    __name(sortTranspositions, "sortTranspositions");
+    var transpositions = [
+      ["APGL", "AGPL"],
+      ["Gpl", "GPL"],
+      ["GLP", "GPL"],
+      ["APL", "Apache"],
+      ["ISD", "ISC"],
+      ["GLP", "GPL"],
+      ["IST", "ISC"],
+      ["Claude", "Clause"],
+      [" or later", "+"],
+      [" International", ""],
+      ["GNU", "GPL"],
+      ["GUN", "GPL"],
+      ["+", ""],
+      ["GNU GPL", "GPL"],
+      ["GNU LGPL", "LGPL"],
+      ["GNU/GPL", "GPL"],
+      ["GNU GLP", "GPL"],
+      ["GNU LESSER GENERAL PUBLIC LICENSE", "LGPL"],
+      ["GNU Lesser General Public License", "LGPL"],
+      ["GNU LESSER GENERAL PUBLIC LICENSE", "LGPL-2.1"],
+      ["GNU Lesser General Public License", "LGPL-2.1"],
+      ["LESSER GENERAL PUBLIC LICENSE", "LGPL"],
+      ["Lesser General Public License", "LGPL"],
+      ["LESSER GENERAL PUBLIC LICENSE", "LGPL-2.1"],
+      ["Lesser General Public License", "LGPL-2.1"],
+      ["GNU General Public License", "GPL"],
+      ["Gnu public license", "GPL"],
+      ["GNU Public License", "GPL"],
+      ["GNU GENERAL PUBLIC LICENSE", "GPL"],
+      ["MTI", "MIT"],
+      ["Mozilla Public License", "MPL"],
+      ["Universal Permissive License", "UPL"],
+      ["WTH", "WTF"],
+      ["WTFGPL", "WTFPL"],
+      ["-License", ""]
+    ].sort(sortTranspositions);
+    var TRANSPOSED = 0;
+    var CORRECT = 1;
+    var transforms = [
+      // e.g. 'mit'
+      function(argument) {
+        return argument.toUpperCase();
+      },
+      // e.g. 'MIT '
+      function(argument) {
+        return argument.trim();
+      },
+      // e.g. 'M.I.T.'
+      function(argument) {
+        return argument.replace(/\./g, "");
+      },
+      // e.g. 'Apache- 2.0'
+      function(argument) {
+        return argument.replace(/\s+/g, "");
+      },
+      // e.g. 'CC BY 4.0''
+      function(argument) {
+        return argument.replace(/\s+/g, "-");
+      },
+      // e.g. 'LGPLv2.1'
+      function(argument) {
+        return argument.replace("v", "-");
+      },
+      // e.g. 'Apache 2.0'
+      function(argument) {
+        return argument.replace(/,?\s*(\d)/, "-$1");
+      },
+      // e.g. 'GPL 2'
+      function(argument) {
+        return argument.replace(/,?\s*(\d)/, "-$1.0");
+      },
+      // e.g. 'Apache Version 2.0'
+      function(argument) {
+        return argument.replace(/,?\s*(V\.|v\.|V|v|Version|version)\s*(\d)/, "-$2");
+      },
+      // e.g. 'Apache Version 2'
+      function(argument) {
+        return argument.replace(/,?\s*(V\.|v\.|V|v|Version|version)\s*(\d)/, "-$2.0");
+      },
+      // e.g. 'ZLIB'
+      function(argument) {
+        return argument[0].toUpperCase() + argument.slice(1);
+      },
+      // e.g. 'MPL/2.0'
+      function(argument) {
+        return argument.replace("/", "-");
+      },
+      // e.g. 'Apache 2'
+      function(argument) {
+        return argument.replace(/\s*V\s*(\d)/, "-$1").replace(/(\d)$/, "$1.0");
+      },
+      // e.g. 'GPL-2.0', 'GPL-3.0'
+      function(argument) {
+        if (argument.indexOf("3.0") !== -1) {
+          return argument + "-or-later";
+        } else {
+          return argument + "-only";
+        }
+      },
+      // e.g. 'GPL-2.0-'
+      function(argument) {
+        return argument + "only";
+      },
+      // e.g. 'GPL2'
+      function(argument) {
+        return argument.replace(/(\d)$/, "-$1.0");
+      },
+      // e.g. 'BSD 3'
+      function(argument) {
+        return argument.replace(/(-| )?(\d)$/, "-$2-Clause");
+      },
+      // e.g. 'BSD clause 3'
+      function(argument) {
+        return argument.replace(/(-| )clause(-| )(\d)/, "-$3-Clause");
+      },
+      // e.g. 'New BSD license'
+      function(argument) {
+        return argument.replace(/\b(Modified|New|Revised)(-| )?BSD((-| )License)?/i, "BSD-3-Clause");
+      },
+      // e.g. 'Simplified BSD license'
+      function(argument) {
+        return argument.replace(/\bSimplified(-| )?BSD((-| )License)?/i, "BSD-2-Clause");
+      },
+      // e.g. 'Free BSD license'
+      function(argument) {
+        return argument.replace(/\b(Free|Net)(-| )?BSD((-| )License)?/i, "BSD-2-Clause-$1BSD");
+      },
+      // e.g. 'Clear BSD license'
+      function(argument) {
+        return argument.replace(/\bClear(-| )?BSD((-| )License)?/i, "BSD-3-Clause-Clear");
+      },
+      // e.g. 'Old BSD License'
+      function(argument) {
+        return argument.replace(/\b(Old|Original)(-| )?BSD((-| )License)?/i, "BSD-4-Clause");
+      },
+      // e.g. 'BY-NC-4.0'
+      function(argument) {
+        return "CC-" + argument;
+      },
+      // e.g. 'BY-NC'
+      function(argument) {
+        return "CC-" + argument + "-4.0";
+      },
+      // e.g. 'Attribution-NonCommercial'
+      function(argument) {
+        return argument.replace("Attribution", "BY").replace("NonCommercial", "NC").replace("NoDerivatives", "ND").replace(/ (\d)/, "-$1").replace(/ ?International/, "");
+      },
+      // e.g. 'Attribution-NonCommercial'
+      function(argument) {
+        return "CC-" + argument.replace("Attribution", "BY").replace("NonCommercial", "NC").replace("NoDerivatives", "ND").replace(/ (\d)/, "-$1").replace(/ ?International/, "") + "-4.0";
+      }
+    ];
+    var licensesWithVersions = spdxLicenseIds.map(function(id) {
+      var match = /^(.*)-\d+\.\d+$/.exec(id);
+      return match ? [match[0], match[1]] : [id, null];
+    }).reduce(function(objectMap, item) {
+      var key = item[1];
+      objectMap[key] = objectMap[key] || [];
+      objectMap[key].push(item[0]);
+      return objectMap;
+    }, {});
+    var licensesWithOneVersion = Object.keys(licensesWithVersions).map(/* @__PURE__ */ __name(function makeEntries(key) {
+      return [key, licensesWithVersions[key]];
+    }, "makeEntries")).filter(/* @__PURE__ */ __name(function identifySoleVersions(item) {
+      return (
+        // Licenses has just one valid version suffix.
+        item[1].length === 1 && item[0] !== null && // APL will be considered Apache, rather than APL-1.0
+        item[0] !== "APL"
+      );
+    }, "identifySoleVersions")).map(/* @__PURE__ */ __name(function createLastResorts(item) {
+      return [item[0], item[1][0]];
+    }, "createLastResorts"));
+    licensesWithVersions = void 0;
+    var lastResorts = [
+      ["UNLI", "Unlicense"],
+      ["WTF", "WTFPL"],
+      ["2 CLAUSE", "BSD-2-Clause"],
+      ["2-CLAUSE", "BSD-2-Clause"],
+      ["3 CLAUSE", "BSD-3-Clause"],
+      ["3-CLAUSE", "BSD-3-Clause"],
+      ["AFFERO", "AGPL-3.0-or-later"],
+      ["AGPL", "AGPL-3.0-or-later"],
+      ["APACHE", "Apache-2.0"],
+      ["ARTISTIC", "Artistic-2.0"],
+      ["Affero", "AGPL-3.0-or-later"],
+      ["BEER", "Beerware"],
+      ["BOOST", "BSL-1.0"],
+      ["BSD", "BSD-2-Clause"],
+      ["CDDL", "CDDL-1.1"],
+      ["ECLIPSE", "EPL-1.0"],
+      ["FUCK", "WTFPL"],
+      ["GNU", "GPL-3.0-or-later"],
+      ["LGPL", "LGPL-3.0-or-later"],
+      ["GPLV1", "GPL-1.0-only"],
+      ["GPL-1", "GPL-1.0-only"],
+      ["GPLV2", "GPL-2.0-only"],
+      ["GPL-2", "GPL-2.0-only"],
+      ["GPL", "GPL-3.0-or-later"],
+      ["MIT +NO-FALSE-ATTRIBS", "MITNFA"],
+      ["MIT", "MIT"],
+      ["MPL", "MPL-2.0"],
+      ["X11", "X11"],
+      ["ZLIB", "Zlib"]
+    ].concat(licensesWithOneVersion).sort(sortTranspositions);
+    var SUBSTRING = 0;
+    var IDENTIFIER = 1;
+    var validTransformation = /* @__PURE__ */ __name(function(identifier) {
+      for (var i = 0; i < transforms.length; i++) {
+        var transformed = transforms[i](identifier).trim();
+        if (transformed !== identifier && valid(transformed)) {
+          return transformed;
+        }
+      }
+      return null;
+    }, "validTransformation");
+    var validLastResort = /* @__PURE__ */ __name(function(identifier) {
+      var upperCased = identifier.toUpperCase();
+      for (var i = 0; i < lastResorts.length; i++) {
+        var lastResort = lastResorts[i];
+        if (upperCased.indexOf(lastResort[SUBSTRING]) > -1) {
+          return lastResort[IDENTIFIER];
+        }
+      }
+      return null;
+    }, "validLastResort");
+    var anyCorrection = /* @__PURE__ */ __name(function(identifier, check) {
+      for (var i = 0; i < transpositions.length; i++) {
+        var transposition = transpositions[i];
+        var transposed = transposition[TRANSPOSED];
+        if (identifier.indexOf(transposed) > -1) {
+          var corrected = identifier.replace(
+            transposed,
+            transposition[CORRECT]
+          );
+          var checked = check(corrected);
+          if (checked !== null) {
+            return checked;
+          }
+        }
+      }
+      return null;
+    }, "anyCorrection");
+    module2.exports = function(identifier, options) {
+      options = options || {};
+      var upgrade = options.upgrade === void 0 ? true : !!options.upgrade;
+      function postprocess(value) {
+        return upgrade ? upgradeGPLs(value) : value;
+      }
+      __name(postprocess, "postprocess");
+      var validArugment = typeof identifier === "string" && identifier.trim().length !== 0;
+      if (!validArugment) {
+        throw Error("Invalid argument. Expected non-empty string.");
+      }
+      identifier = identifier.trim();
+      if (valid(identifier)) {
+        return postprocess(identifier);
+      }
+      var noPlus = identifier.replace(/\+$/, "").trim();
+      if (valid(noPlus)) {
+        return postprocess(noPlus);
+      }
+      var transformed = validTransformation(identifier);
+      if (transformed !== null) {
+        return postprocess(transformed);
+      }
+      transformed = anyCorrection(identifier, function(argument) {
+        if (valid(argument)) {
+          return argument;
+        }
+        return validTransformation(argument);
+      });
+      if (transformed !== null) {
+        return postprocess(transformed);
+      }
+      transformed = validLastResort(identifier);
+      if (transformed !== null) {
+        return postprocess(transformed);
+      }
+      transformed = anyCorrection(identifier, validLastResort);
+      if (transformed !== null) {
+        return postprocess(transformed);
+      }
+      return null;
+    };
+    function upgradeGPLs(value) {
+      if ([
+        "GPL-1.0",
+        "LGPL-1.0",
+        "AGPL-1.0",
+        "GPL-2.0",
+        "LGPL-2.0",
+        "AGPL-2.0",
+        "LGPL-2.1"
+      ].indexOf(value) !== -1) {
+        return value + "-only";
+      } else if ([
+        "GPL-1.0+",
+        "GPL-2.0+",
+        "GPL-3.0+",
+        "LGPL-2.0+",
+        "LGPL-2.1+",
+        "LGPL-3.0+",
+        "AGPL-1.0+",
+        "AGPL-3.0+"
+      ].indexOf(value) !== -1) {
+        return value.replace(/\+$/, "-or-later");
+      } else if (["GPL-3.0", "LGPL-3.0", "AGPL-3.0"].indexOf(value) !== -1) {
+        return value + "-or-later";
+      } else {
+        return value;
+      }
+    }
+    __name(upgradeGPLs, "upgradeGPLs");
+  }
+});
+
+// src/external/spdx-pack.js
+var spdxCorrect = require_spdx_correct();
+var spdxExpressionParse = require_spdx_expression_parse();
+module.exports = {
+  spdxCorrect,
+  spdxExpressionParse
+};
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/streaming-iterables.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/streaming-iterables.js
new file mode 100644
index 00000000..2611f938
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/streaming-iterables.js
@@ -0,0 +1,1061 @@
+"use strict";
+/**
+ * Bundled from streaming-iterables
+ * This is a zero-dependency bundle created by esbuild.
+ */
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+var __commonJS = (cb, mod) => function __require() {
+  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+
+// node_modules/.pnpm/streaming-iterables@8.0.1/node_modules/streaming-iterables/dist/index.js
+var require_dist = __commonJS({
+  "node_modules/.pnpm/streaming-iterables@8.0.1/node_modules/streaming-iterables/dist/index.js"(exports2, module2) {
+    (function(global, factory) {
+      typeof exports2 === "object" && typeof module2 !== "undefined" ? factory(exports2) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.streamingIterables = {}));
+    })(exports2, (function(exports3) {
+      "use strict";
+      async function* _batch(size, iterable) {
+        let dataBatch = [];
+        for await (const data of iterable) {
+          dataBatch.push(data);
+          if (dataBatch.length === size) {
+            yield dataBatch;
+            dataBatch = [];
+          }
+        }
+        if (dataBatch.length > 0) {
+          yield dataBatch;
+        }
+      }
+      __name(_batch, "_batch");
+      function* _syncBatch(size, iterable) {
+        let dataBatch = [];
+        for (const data of iterable) {
+          dataBatch.push(data);
+          if (dataBatch.length === size) {
+            yield dataBatch;
+            dataBatch = [];
+          }
+        }
+        if (dataBatch.length > 0) {
+          yield dataBatch;
+        }
+      }
+      __name(_syncBatch, "_syncBatch");
+      function batch(size, iterable) {
+        if (iterable === void 0) {
+          return (curriedIterable) => batch(size, curriedIterable);
+        }
+        if (iterable[Symbol.asyncIterator]) {
+          return _batch(size, iterable);
+        }
+        return _syncBatch(size, iterable);
+      }
+      __name(batch, "batch");
+      const TIMEOUT = Symbol("TIMEOUT");
+      const createTimer = /* @__PURE__ */ __name((duration) => {
+        let timeoutId;
+        return [
+          new Promise((resolve) => {
+            timeoutId = setTimeout(() => resolve(TIMEOUT), duration);
+          }),
+          () => {
+            clearTimeout(timeoutId);
+          }
+        ];
+      }, "createTimer");
+      async function* _batchWithTimeout(size, timeout, iterable) {
+        const iterator = iterable[Symbol.asyncIterator]();
+        let pendingData;
+        let batchData = [];
+        let timer;
+        let clearTimer;
+        const startTimer = /* @__PURE__ */ __name(() => {
+          deleteTimer();
+          [timer, clearTimer] = createTimer(timeout);
+        }, "startTimer");
+        const deleteTimer = /* @__PURE__ */ __name(() => {
+          if (clearTimer) {
+            clearTimer();
+          }
+          timer = void 0;
+        }, "deleteTimer");
+        pendingData = iterator.next();
+        while (true) {
+          const res = await (timer ? Promise.race([pendingData, timer]) : pendingData);
+          if (res === TIMEOUT || res.done) {
+            if (batchData.length) {
+              yield batchData;
+              batchData = [];
+            }
+            deleteTimer();
+            if (res !== TIMEOUT) {
+              break;
+            }
+            continue;
+          }
+          pendingData = iterator.next();
+          batchData.push(res.value);
+          if (batchData.length === 1) {
+            startTimer();
+          }
+          if (batchData.length === size) {
+            yield batchData;
+            batchData = [];
+            deleteTimer();
+            continue;
+          }
+        }
+      }
+      __name(_batchWithTimeout, "_batchWithTimeout");
+      function batchWithTimeout(size, timeout, iterable) {
+        if (iterable === void 0) {
+          return (curriedIterable) => batchWithTimeout(size, timeout, curriedIterable);
+        }
+        if (iterable[Symbol.asyncIterator] && timeout !== Infinity) {
+          return _batchWithTimeout(size, timeout, iterable);
+        }
+        return batch(size, iterable);
+      }
+      __name(batchWithTimeout, "batchWithTimeout");
+      function getIterator(iterable) {
+        if (typeof iterable.next === "function") {
+          return iterable;
+        }
+        if (typeof iterable[Symbol.iterator] === "function") {
+          return iterable[Symbol.iterator]();
+        }
+        if (typeof iterable[Symbol.asyncIterator] === "function") {
+          return iterable[Symbol.asyncIterator]();
+        }
+        throw new TypeError('"values" does not to conform to any of the iterator or iterable protocols');
+      }
+      __name(getIterator, "getIterator");
+      function defer() {
+        let reject;
+        let resolve;
+        const promise = new Promise((resolveFunc, rejectFunc) => {
+          resolve = resolveFunc;
+          reject = rejectFunc;
+        });
+        return {
+          promise,
+          reject,
+          resolve
+        };
+      }
+      __name(defer, "defer");
+      function _buffer(size, iterable) {
+        const iterator = getIterator(iterable);
+        const resultQueue = [];
+        const readQueue = [];
+        let reading = false;
+        let ended = false;
+        function fulfillReadQueue() {
+          while (readQueue.length > 0 && resultQueue.length > 0) {
+            const readDeferred = readQueue.shift();
+            const { error, value } = resultQueue.shift();
+            if (error) {
+              readDeferred.reject(error);
+            } else {
+              readDeferred.resolve({ done: false, value });
+            }
+          }
+          while (readQueue.length > 0 && ended) {
+            const { resolve } = readQueue.shift();
+            resolve({ done: true, value: void 0 });
+          }
+        }
+        __name(fulfillReadQueue, "fulfillReadQueue");
+        async function fillQueue() {
+          if (ended) {
+            return;
+          }
+          if (reading) {
+            return;
+          }
+          if (resultQueue.length >= size) {
+            return;
+          }
+          reading = true;
+          try {
+            const { done, value } = await iterator.next();
+            if (done) {
+              ended = true;
+            } else {
+              resultQueue.push({ value });
+            }
+          } catch (error) {
+            ended = true;
+            resultQueue.push({ error });
+          }
+          fulfillReadQueue();
+          reading = false;
+          fillQueue();
+        }
+        __name(fillQueue, "fillQueue");
+        async function next() {
+          if (resultQueue.length > 0) {
+            const { error, value } = resultQueue.shift();
+            if (error) {
+              throw error;
+            }
+            fillQueue();
+            return { done: false, value };
+          }
+          if (ended) {
+            return { done: true, value: void 0 };
+          }
+          const deferred = defer();
+          readQueue.push(deferred);
+          fillQueue();
+          return deferred.promise;
+        }
+        __name(next, "next");
+        const asyncIterableIterator = {
+          next,
+          [Symbol.asyncIterator]: () => asyncIterableIterator
+        };
+        return asyncIterableIterator;
+      }
+      __name(_buffer, "_buffer");
+      function* syncBuffer(size, iterable) {
+        const valueQueue = [];
+        let e;
+        try {
+          for (const value of iterable) {
+            valueQueue.push(value);
+            if (valueQueue.length <= size) {
+              continue;
+            }
+            yield valueQueue.shift();
+          }
+        } catch (error) {
+          e = error;
+        }
+        for (const value of valueQueue) {
+          yield value;
+        }
+        if (e) {
+          throw e;
+        }
+      }
+      __name(syncBuffer, "syncBuffer");
+      function buffer(size, iterable) {
+        if (iterable === void 0) {
+          return (curriedIterable) => buffer(size, curriedIterable);
+        }
+        if (size === 0) {
+          return iterable;
+        }
+        if (iterable[Symbol.asyncIterator]) {
+          return _buffer(size, iterable);
+        }
+        return syncBuffer(size, iterable);
+      }
+      __name(buffer, "buffer");
+      async function _collect(iterable) {
+        const values = [];
+        for await (const value of iterable) {
+          values.push(value);
+        }
+        return values;
+      }
+      __name(_collect, "_collect");
+      function collect(iterable) {
+        if (iterable[Symbol.asyncIterator]) {
+          return _collect(iterable);
+        }
+        return Array.from(iterable);
+      }
+      __name(collect, "collect");
+      async function* _concat(iterables) {
+        for await (const iterable of iterables) {
+          yield* iterable;
+        }
+      }
+      __name(_concat, "_concat");
+      function* _syncConcat(iterables) {
+        for (const iterable of iterables) {
+          yield* iterable;
+        }
+      }
+      __name(_syncConcat, "_syncConcat");
+      function concat(...iterables) {
+        const hasAnyAsync = iterables.find((itr) => itr[Symbol.asyncIterator] !== void 0);
+        if (hasAnyAsync) {
+          return _concat(iterables);
+        } else {
+          return _syncConcat(iterables);
+        }
+      }
+      __name(concat, "concat");
+      async function _consume(iterable) {
+        for await (const _val of iterable) {
+        }
+      }
+      __name(_consume, "_consume");
+      function consume(iterable) {
+        if (iterable[Symbol.asyncIterator]) {
+          return _consume(iterable);
+        }
+        for (const _val of iterable) {
+        }
+      }
+      __name(consume, "consume");
+      async function* _drop(count, iterable) {
+        let skipped = 0;
+        for await (const val of iterable) {
+          if (skipped < count) {
+            skipped++;
+            continue;
+          }
+          yield await val;
+        }
+      }
+      __name(_drop, "_drop");
+      function* _syncDrop(count, iterable) {
+        let skipped = 0;
+        for (const val of iterable) {
+          if (skipped < count) {
+            skipped++;
+            continue;
+          }
+          yield val;
+        }
+      }
+      __name(_syncDrop, "_syncDrop");
+      function drop(count, iterable) {
+        if (iterable === void 0) {
+          return (curriedIterable) => drop(count, curriedIterable);
+        }
+        if (iterable[Symbol.asyncIterator]) {
+          return _drop(count, iterable);
+        }
+        return _syncDrop(count, iterable);
+      }
+      __name(drop, "drop");
+      async function* _filter(filterFunc, iterable) {
+        for await (const data of iterable) {
+          if (await filterFunc(data)) {
+            yield data;
+          }
+        }
+      }
+      __name(_filter, "_filter");
+      function filter(filterFunc, iterable) {
+        if (iterable === void 0) {
+          return (curriedIterable) => _filter(filterFunc, curriedIterable);
+        }
+        return _filter(filterFunc, iterable);
+      }
+      __name(filter, "filter");
+      async function* flatten(iterable) {
+        for await (const maybeItr of iterable) {
+          if (maybeItr && typeof maybeItr !== "string" && (maybeItr[Symbol.iterator] || maybeItr[Symbol.asyncIterator])) {
+            yield* flatten(maybeItr);
+          } else {
+            yield maybeItr;
+          }
+        }
+      }
+      __name(flatten, "flatten");
+      async function* _map(func, iterable) {
+        for await (const val of iterable) {
+          yield await func(val);
+        }
+      }
+      __name(_map, "_map");
+      function map(func, iterable) {
+        if (iterable === void 0) {
+          return (curriedIterable) => _map(func, curriedIterable);
+        }
+        return _map(func, iterable);
+      }
+      __name(map, "map");
+      function flatMap(func, iterable) {
+        if (iterable === void 0) {
+          return (curriedIterable) => flatMap(func, curriedIterable);
+        }
+        return filter((i) => i !== void 0 && i !== null, flatten(map(func, iterable)));
+      }
+      __name(flatMap, "flatMap");
+      function _flatTransform(concurrency, func, iterable) {
+        const iterator = getIterator(iterable);
+        const resultQueue = [];
+        const readQueue = [];
+        let ended = false;
+        let reading = false;
+        let inflightCount = 0;
+        let lastError = null;
+        function fulfillReadQueue() {
+          while (readQueue.length > 0 && resultQueue.length > 0) {
+            const { resolve } = readQueue.shift();
+            const value = resultQueue.shift();
+            resolve({ done: false, value });
+          }
+          while (readQueue.length > 0 && inflightCount === 0 && ended) {
+            const { resolve, reject } = readQueue.shift();
+            if (lastError) {
+              reject(lastError);
+              lastError = null;
+            } else {
+              resolve({ done: true, value: void 0 });
+            }
+          }
+        }
+        __name(fulfillReadQueue, "fulfillReadQueue");
+        async function fillQueue() {
+          if (ended) {
+            fulfillReadQueue();
+            return;
+          }
+          if (reading) {
+            return;
+          }
+          if (inflightCount + resultQueue.length >= concurrency) {
+            return;
+          }
+          reading = true;
+          inflightCount++;
+          try {
+            const { done, value } = await iterator.next();
+            if (done) {
+              ended = true;
+              inflightCount--;
+              fulfillReadQueue();
+            } else {
+              mapAndQueue(value);
+            }
+          } catch (error) {
+            ended = true;
+            inflightCount--;
+            lastError = error;
+            fulfillReadQueue();
+          }
+          reading = false;
+          fillQueue();
+        }
+        __name(fillQueue, "fillQueue");
+        async function mapAndQueue(itrValue) {
+          try {
+            const value = await func(itrValue);
+            if (value && value[Symbol.asyncIterator]) {
+              for await (const asyncVal of value) {
+                resultQueue.push(asyncVal);
+              }
+            } else {
+              resultQueue.push(value);
+            }
+          } catch (error) {
+            ended = true;
+            lastError = error;
+          }
+          inflightCount--;
+          fulfillReadQueue();
+          fillQueue();
+        }
+        __name(mapAndQueue, "mapAndQueue");
+        async function next() {
+          if (resultQueue.length === 0) {
+            const deferred = defer();
+            readQueue.push(deferred);
+            fillQueue();
+            return deferred.promise;
+          }
+          const value = resultQueue.shift();
+          fillQueue();
+          return { done: false, value };
+        }
+        __name(next, "next");
+        const asyncIterableIterator = {
+          next,
+          [Symbol.asyncIterator]: () => asyncIterableIterator
+        };
+        return asyncIterableIterator;
+      }
+      __name(_flatTransform, "_flatTransform");
+      function flatTransform(concurrency, func, iterable) {
+        if (func === void 0) {
+          return (curriedFunc, curriedIterable) => curriedIterable ? flatTransform(concurrency, curriedFunc, curriedIterable) : flatTransform(concurrency, curriedFunc);
+        }
+        if (iterable === void 0) {
+          return (curriedIterable) => flatTransform(concurrency, func, curriedIterable);
+        }
+        return filter((i) => i !== void 0 && i !== null, flatten(_flatTransform(concurrency, func, iterable)));
+      }
+      __name(flatTransform, "flatTransform");
+      async function onceReadable(stream) {
+        return new Promise((resolve) => {
+          stream.once("readable", () => {
+            resolve();
+          });
+        });
+      }
+      __name(onceReadable, "onceReadable");
+      async function* _fromStream(stream) {
+        while (true) {
+          const data = stream.read();
+          if (data !== null) {
+            yield data;
+            continue;
+          }
+          if (stream._readableState.ended) {
+            break;
+          }
+          await onceReadable(stream);
+        }
+      }
+      __name(_fromStream, "_fromStream");
+      function fromStream(stream) {
+        if (typeof stream[Symbol.asyncIterator] === "function") {
+          return stream;
+        }
+        return _fromStream(stream);
+      }
+      __name(fromStream, "fromStream");
+      async function* merge(...iterables) {
+        const sources = new Set(iterables.map(getIterator));
+        while (sources.size > 0) {
+          for (const iterator of sources) {
+            const nextVal = await iterator.next();
+            if (nextVal.done) {
+              sources.delete(iterator);
+            } else {
+              yield nextVal.value;
+            }
+          }
+        }
+      }
+      __name(merge, "merge");
+      function pipeline(firstFn, ...fns) {
+        let previousFn = firstFn();
+        for (const func of fns) {
+          previousFn = func(previousFn);
+        }
+        return previousFn;
+      }
+      __name(pipeline, "pipeline");
+      async function* _parallelMap(concurrency, func, iterable) {
+        let transformError = null;
+        const wrapFunc = /* @__PURE__ */ __name((value) => ({
+          value: func(value)
+        }), "wrapFunc");
+        const stopOnError = /* @__PURE__ */ __name(async function* (source) {
+          for await (const value of source) {
+            if (transformError) {
+              return;
+            }
+            yield value;
+          }
+        }, "stopOnError");
+        const output = pipeline(() => iterable, buffer(1), stopOnError, map(wrapFunc), buffer(concurrency - 1));
+        const itr = getIterator(output);
+        while (true) {
+          const { value, done } = await itr.next();
+          if (done) {
+            break;
+          }
+          try {
+            const val = await value.value;
+            if (!transformError) {
+              yield val;
+            }
+          } catch (error) {
+            transformError = error;
+          }
+        }
+        if (transformError) {
+          throw transformError;
+        }
+      }
+      __name(_parallelMap, "_parallelMap");
+      function parallelMap2(concurrency, func, iterable) {
+        if (func === void 0) {
+          return (curriedFunc, curriedIterable) => parallelMap2(concurrency, curriedFunc, curriedIterable);
+        }
+        if (iterable === void 0) {
+          return (curriedIterable) => parallelMap2(concurrency, func, curriedIterable);
+        }
+        if (concurrency === 1) {
+          return map(func, iterable);
+        }
+        return _parallelMap(concurrency, func, iterable);
+      }
+      __name(parallelMap2, "parallelMap");
+      function parallelFlatMap(concurrency, func, iterable) {
+        if (func === void 0) {
+          return (curriedFunc, curriedIterable) => curriedIterable ? parallelFlatMap(concurrency, curriedFunc, curriedIterable) : parallelFlatMap(concurrency, curriedFunc);
+        }
+        if (iterable === void 0) {
+          return (curriedIterable) => parallelFlatMap(concurrency, func, curriedIterable);
+        }
+        return filter((i) => i !== void 0 && i !== null, flatten(parallelMap2(concurrency, func, iterable)));
+      }
+      __name(parallelFlatMap, "parallelFlatMap");
+      async function* parallelMerge(...iterables) {
+        const inputs = iterables.map(getIterator);
+        const concurrentWork = /* @__PURE__ */ new Set();
+        const values = /* @__PURE__ */ new Map();
+        let lastError = null;
+        let errCb = null;
+        let valueCb = null;
+        const notifyError = /* @__PURE__ */ __name((err) => {
+          lastError = err;
+          if (errCb) {
+            errCb(err);
+          }
+        }, "notifyError");
+        const notifyDone = /* @__PURE__ */ __name((value) => {
+          if (valueCb) {
+            valueCb(value);
+          }
+        }, "notifyDone");
+        const waitForQueue = /* @__PURE__ */ __name(() => new Promise((resolve, reject) => {
+          if (lastError) {
+            reject(lastError);
+          }
+          if (values.size > 0) {
+            return resolve();
+          }
+          valueCb = resolve;
+          errCb = reject;
+        }), "waitForQueue");
+        const queueNext = /* @__PURE__ */ __name((input) => {
+          const nextVal = Promise.resolve(input.next()).then(async ({ done, value }) => {
+            if (!done) {
+              values.set(input, value);
+            }
+            concurrentWork.delete(nextVal);
+          });
+          concurrentWork.add(nextVal);
+          nextVal.then(notifyDone, notifyError);
+        }, "queueNext");
+        for (const input of inputs) {
+          queueNext(input);
+        }
+        while (true) {
+          if (concurrentWork.size === 0 && values.size === 0) {
+            return;
+          }
+          await waitForQueue();
+          for (const [input, value] of values) {
+            values.delete(input);
+            yield value;
+            queueNext(input);
+          }
+        }
+      }
+      __name(parallelMerge, "parallelMerge");
+      async function _reduce(func, start, iterable) {
+        let value = start;
+        for await (const nextItem of iterable) {
+          value = await func(value, nextItem);
+        }
+        return value;
+      }
+      __name(_reduce, "_reduce");
+      function reduce(func, start, iterable) {
+        if (start === void 0) {
+          return (curriedStart, curriedIterable) => curriedIterable ? _reduce(func, curriedStart, curriedIterable) : reduce(func, curriedStart);
+        }
+        if (iterable === void 0) {
+          return (curriedIterable) => reduce(func, start, curriedIterable);
+        }
+        return _reduce(func, start, iterable);
+      }
+      __name(reduce, "reduce");
+      async function* _take(count, iterable) {
+        let taken = 0;
+        for await (const val of iterable) {
+          yield await val;
+          taken++;
+          if (taken >= count) {
+            break;
+          }
+        }
+      }
+      __name(_take, "_take");
+      function* _syncTake(count, iterable) {
+        let taken = 0;
+        for (const val of iterable) {
+          yield val;
+          taken++;
+          if (taken >= count) {
+            break;
+          }
+        }
+      }
+      __name(_syncTake, "_syncTake");
+      function take(count, iterable) {
+        if (iterable === void 0) {
+          return (curriedIterable) => take(count, curriedIterable);
+        }
+        if (iterable[Symbol.asyncIterator]) {
+          return _take(count, iterable);
+        }
+        return _syncTake(count, iterable);
+      }
+      __name(take, "take");
+      async function* _takeLast(count, iterable) {
+        const buffer2 = [];
+        for await (const res of iterable) {
+          buffer2.push(res);
+          if (buffer2.length > count) {
+            buffer2.shift();
+          }
+        }
+        while (buffer2.length) {
+          yield await buffer2.shift();
+        }
+      }
+      __name(_takeLast, "_takeLast");
+      function* _syncTakeLast(count, iterable) {
+        const buffer2 = [];
+        for (const res of iterable) {
+          buffer2.push(res);
+          if (buffer2.length > count) {
+            buffer2.shift();
+          }
+        }
+        while (buffer2.length) {
+          yield buffer2.shift();
+        }
+      }
+      __name(_syncTakeLast, "_syncTakeLast");
+      function takeLast(count, iterable) {
+        if (iterable === void 0) {
+          return (curriedIterable) => takeLast(count, curriedIterable);
+        }
+        if (iterable[Symbol.asyncIterator]) {
+          return _takeLast(count, iterable);
+        }
+        return _syncTakeLast(count, iterable);
+      }
+      __name(takeLast, "takeLast");
+      async function* _takeWhile(predicate, iterable) {
+        for await (const data of iterable) {
+          if (!await predicate(data)) {
+            return;
+          }
+          yield data;
+        }
+      }
+      __name(_takeWhile, "_takeWhile");
+      function takeWhile(predicate, iterable) {
+        if (iterable === void 0) {
+          return (curriedIterable) => _takeWhile(predicate, curriedIterable);
+        }
+        return _takeWhile(predicate, iterable);
+      }
+      __name(takeWhile, "takeWhile");
+      async function* _asyncTap(func, iterable) {
+        for await (const val of iterable) {
+          await func(val);
+          yield val;
+        }
+      }
+      __name(_asyncTap, "_asyncTap");
+      function tap(func, iterable) {
+        if (iterable === void 0) {
+          return (curriedIterable) => _asyncTap(func, curriedIterable);
+        }
+        return _asyncTap(func, iterable);
+      }
+      __name(tap, "tap");
+      const sleep = /* @__PURE__ */ __name((ms) => new Promise((resolve) => setTimeout(resolve, ms)), "sleep");
+      function _throttle(limit, interval, iterable) {
+        if (!Number.isFinite(limit)) {
+          throw new TypeError("Expected `limit` to be a finite number");
+        }
+        if (limit <= 0) {
+          throw new TypeError("Expected `limit` to be greater than 0");
+        }
+        if (!Number.isFinite(interval)) {
+          throw new TypeError("Expected `interval` to be a finite number");
+        }
+        return (/* @__PURE__ */ __name((async function* __throttle() {
+          let sent = 0;
+          let time2;
+          for await (const val of iterable) {
+            if (sent < limit) {
+              if (typeof time2 === "undefined") {
+                time2 = Date.now();
+              }
+              sent++;
+              yield val;
+              continue;
+            }
+            const elapsedMs = Date.now() - (time2 || 0);
+            const waitFor = interval - elapsedMs;
+            if (waitFor > 0) {
+              await sleep(waitFor);
+            }
+            time2 = Date.now();
+            sent = 1;
+            yield val;
+          }
+        }), "__throttle"))();
+      }
+      __name(_throttle, "_throttle");
+      function throttle(limit, interval, iterable) {
+        if (iterable === void 0) {
+          return (curriedIterable) => _throttle(limit, interval, curriedIterable);
+        }
+        return _throttle(limit, interval, iterable);
+      }
+      __name(throttle, "throttle");
+      function addTime(a, b) {
+        let seconds = a[0] + b[0];
+        let nanoseconds = a[1] + b[1];
+        if (nanoseconds >= 1e9) {
+          const remainder = nanoseconds % 1e9;
+          seconds += (nanoseconds - remainder) / 1e9;
+          nanoseconds = remainder;
+        }
+        return [seconds, nanoseconds];
+      }
+      __name(addTime, "addTime");
+      async function* _asyncTime(config, iterable) {
+        const itr = iterable[Symbol.asyncIterator]();
+        let total = [0, 0];
+        while (true) {
+          const start = process.hrtime();
+          const { value, done } = await itr.next();
+          const delta = process.hrtime(start);
+          total = addTime(total, delta);
+          if (config.progress) {
+            config.progress(delta, total);
+          }
+          if (done) {
+            if (config.total) {
+              config.total(total);
+            }
+            return value;
+          }
+          yield value;
+        }
+      }
+      __name(_asyncTime, "_asyncTime");
+      function* _syncTime(config, iterable) {
+        const itr = iterable[Symbol.iterator]();
+        let total = [0, 0];
+        while (true) {
+          const start = process.hrtime();
+          const { value, done } = itr.next();
+          const delta = process.hrtime(start);
+          total = addTime(total, delta);
+          if (config.progress) {
+            config.progress(delta, total);
+          }
+          if (done) {
+            if (config.total) {
+              config.total(total);
+            }
+            return value;
+          }
+          yield value;
+        }
+      }
+      __name(_syncTime, "_syncTime");
+      function time(config = {}, iterable) {
+        if (iterable === void 0) {
+          return (curriedIterable) => time(config, curriedIterable);
+        }
+        if (iterable[Symbol.asyncIterator] !== void 0) {
+          return _asyncTime(config, iterable);
+        } else {
+          return _syncTime(config, iterable);
+        }
+      }
+      __name(time, "time");
+      function _transform(concurrency, func, iterable) {
+        const iterator = getIterator(iterable);
+        const resultQueue = [];
+        const readQueue = [];
+        let ended = false;
+        let reading = false;
+        let inflightCount = 0;
+        let lastError = null;
+        function fulfillReadQueue() {
+          while (readQueue.length > 0 && resultQueue.length > 0) {
+            const { resolve } = readQueue.shift();
+            const value = resultQueue.shift();
+            resolve({ done: false, value });
+          }
+          while (readQueue.length > 0 && inflightCount === 0 && ended) {
+            const { resolve, reject } = readQueue.shift();
+            if (lastError) {
+              reject(lastError);
+              lastError = null;
+            } else {
+              resolve({ done: true, value: void 0 });
+            }
+          }
+        }
+        __name(fulfillReadQueue, "fulfillReadQueue");
+        async function fillQueue() {
+          if (ended) {
+            fulfillReadQueue();
+            return;
+          }
+          if (reading) {
+            return;
+          }
+          if (inflightCount + resultQueue.length >= concurrency) {
+            return;
+          }
+          reading = true;
+          inflightCount++;
+          try {
+            const { done, value } = await iterator.next();
+            if (done) {
+              ended = true;
+              inflightCount--;
+              fulfillReadQueue();
+            } else {
+              mapAndQueue(value);
+            }
+          } catch (error) {
+            ended = true;
+            inflightCount--;
+            lastError = error;
+            fulfillReadQueue();
+          }
+          reading = false;
+          fillQueue();
+        }
+        __name(fillQueue, "fillQueue");
+        async function mapAndQueue(itrValue) {
+          try {
+            const value = await func(itrValue);
+            resultQueue.push(value);
+          } catch (error) {
+            ended = true;
+            lastError = error;
+          }
+          inflightCount--;
+          fulfillReadQueue();
+          fillQueue();
+        }
+        __name(mapAndQueue, "mapAndQueue");
+        async function next() {
+          if (resultQueue.length === 0) {
+            const deferred = defer();
+            readQueue.push(deferred);
+            fillQueue();
+            return deferred.promise;
+          }
+          const value = resultQueue.shift();
+          fillQueue();
+          return { done: false, value };
+        }
+        __name(next, "next");
+        const asyncIterableIterator = {
+          next,
+          [Symbol.asyncIterator]: () => asyncIterableIterator
+        };
+        return asyncIterableIterator;
+      }
+      __name(_transform, "_transform");
+      function transform2(concurrency, func, iterable) {
+        if (func === void 0) {
+          return (curriedFunc, curriedIterable) => curriedIterable ? transform2(concurrency, curriedFunc, curriedIterable) : transform2(concurrency, curriedFunc);
+        }
+        if (iterable === void 0) {
+          return (curriedIterable) => transform2(concurrency, func, curriedIterable);
+        }
+        return _transform(concurrency, func, iterable);
+      }
+      __name(transform2, "transform");
+      async function _writeToStream(stream, iterable) {
+        let lastError = null;
+        let errCb = null;
+        let drainCb = null;
+        const notifyError = /* @__PURE__ */ __name((err) => {
+          lastError = err;
+          if (errCb) {
+            errCb(err);
+          }
+        }, "notifyError");
+        const notifyDrain = /* @__PURE__ */ __name(() => {
+          if (drainCb) {
+            drainCb();
+          }
+        }, "notifyDrain");
+        const cleanup = /* @__PURE__ */ __name(() => {
+          stream.removeListener("error", notifyError);
+          stream.removeListener("drain", notifyDrain);
+        }, "cleanup");
+        stream.once("error", notifyError);
+        const waitForDrain = /* @__PURE__ */ __name(() => new Promise((resolve, reject) => {
+          if (lastError) {
+            return reject(lastError);
+          }
+          stream.once("drain", notifyDrain);
+          drainCb = resolve;
+          errCb = reject;
+        }), "waitForDrain");
+        for await (const value of iterable) {
+          if (stream.write(value) === false) {
+            await waitForDrain();
+          }
+          if (lastError) {
+            break;
+          }
+        }
+        cleanup();
+        if (lastError) {
+          throw lastError;
+        }
+      }
+      __name(_writeToStream, "_writeToStream");
+      function writeToStream(stream, iterable) {
+        if (iterable === void 0) {
+          return (curriedIterable) => _writeToStream(stream, curriedIterable);
+        }
+        return _writeToStream(stream, iterable);
+      }
+      __name(writeToStream, "writeToStream");
+      exports3.batch = batch;
+      exports3.batchWithTimeout = batchWithTimeout;
+      exports3.buffer = buffer;
+      exports3.collect = collect;
+      exports3.concat = concat;
+      exports3.consume = consume;
+      exports3.drop = drop;
+      exports3.filter = filter;
+      exports3.flatMap = flatMap;
+      exports3.flatTransform = flatTransform;
+      exports3.flatten = flatten;
+      exports3.fromStream = fromStream;
+      exports3.getIterator = getIterator;
+      exports3.map = map;
+      exports3.merge = merge;
+      exports3.parallelFlatMap = parallelFlatMap;
+      exports3.parallelMap = parallelMap2;
+      exports3.parallelMerge = parallelMerge;
+      exports3.pipeline = pipeline;
+      exports3.reduce = reduce;
+      exports3.take = take;
+      exports3.takeLast = takeLast;
+      exports3.takeWhile = takeWhile;
+      exports3.tap = tap;
+      exports3.throttle = throttle;
+      exports3.time = time;
+      exports3.transform = transform2;
+      exports3.writeToStream = writeToStream;
+    }));
+  }
+});
+
+// src/external/streaming-iterables.js
+var { parallelMap, transform } = require_dist();
+module.exports = {
+  parallelMap,
+  transform
+};
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/supports-color.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/supports-color.js
new file mode 100644
index 00000000..f68d63b2
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/supports-color.js
@@ -0,0 +1,8 @@
+'use strict'
+
+// Re-export from external-pack bundle for better deduplication.
+const { supportsColor } = require('./external-pack')
+// supports-color is an ESM module, re-export all properties.
+const exported = supportsColor.default || supportsColor
+Object.assign(module.exports, exported)
+module.exports.default = exported
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/tar-fs.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/tar-fs.js
new file mode 100644
index 00000000..4c2f49fd
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/tar-fs.js
@@ -0,0 +1,3073 @@
+"use strict";
+/**
+ * Bundled from tar-fs
+ * This is a zero-dependency bundle created by esbuild.
+ */
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+var __commonJS = (cb, mod) => function __require() {
+  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+
+// node_modules/.pnpm/events-universal@1.0.1/node_modules/events-universal/default.js
+var require_default = __commonJS({
+  "node_modules/.pnpm/events-universal@1.0.1/node_modules/events-universal/default.js"(exports2, module2) {
+    module2.exports = require("events");
+  }
+});
+
+// node_modules/.pnpm/fast-fifo@1.3.2/node_modules/fast-fifo/fixed-size.js
+var require_fixed_size = __commonJS({
+  "node_modules/.pnpm/fast-fifo@1.3.2/node_modules/fast-fifo/fixed-size.js"(exports2, module2) {
+    module2.exports = class FixedFIFO {
+      static {
+        __name(this, "FixedFIFO");
+      }
+      constructor(hwm) {
+        if (!(hwm > 0) || (hwm - 1 & hwm) !== 0) throw new Error("Max size for a FixedFIFO should be a power of two");
+        this.buffer = new Array(hwm);
+        this.mask = hwm - 1;
+        this.top = 0;
+        this.btm = 0;
+        this.next = null;
+      }
+      clear() {
+        this.top = this.btm = 0;
+        this.next = null;
+        this.buffer.fill(void 0);
+      }
+      push(data) {
+        if (this.buffer[this.top] !== void 0) return false;
+        this.buffer[this.top] = data;
+        this.top = this.top + 1 & this.mask;
+        return true;
+      }
+      shift() {
+        const last = this.buffer[this.btm];
+        if (last === void 0) return void 0;
+        this.buffer[this.btm] = void 0;
+        this.btm = this.btm + 1 & this.mask;
+        return last;
+      }
+      peek() {
+        return this.buffer[this.btm];
+      }
+      isEmpty() {
+        return this.buffer[this.btm] === void 0;
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/fast-fifo@1.3.2/node_modules/fast-fifo/index.js
+var require_fast_fifo = __commonJS({
+  "node_modules/.pnpm/fast-fifo@1.3.2/node_modules/fast-fifo/index.js"(exports2, module2) {
+    var FixedFIFO = require_fixed_size();
+    module2.exports = class FastFIFO {
+      static {
+        __name(this, "FastFIFO");
+      }
+      constructor(hwm) {
+        this.hwm = hwm || 16;
+        this.head = new FixedFIFO(this.hwm);
+        this.tail = this.head;
+        this.length = 0;
+      }
+      clear() {
+        this.head = this.tail;
+        this.head.clear();
+        this.length = 0;
+      }
+      push(val) {
+        this.length++;
+        if (!this.head.push(val)) {
+          const prev = this.head;
+          this.head = prev.next = new FixedFIFO(2 * this.head.buffer.length);
+          this.head.push(val);
+        }
+      }
+      shift() {
+        if (this.length !== 0) this.length--;
+        const val = this.tail.shift();
+        if (val === void 0 && this.tail.next) {
+          const next = this.tail.next;
+          this.tail.next = null;
+          this.tail = next;
+          return this.tail.shift();
+        }
+        return val;
+      }
+      peek() {
+        const val = this.tail.peek();
+        if (val === void 0 && this.tail.next) return this.tail.next.peek();
+        return val;
+      }
+      isEmpty() {
+        return this.length === 0;
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/b4a@1.8.0/node_modules/b4a/index.js
+var require_b4a = __commonJS({
+  "node_modules/.pnpm/b4a@1.8.0/node_modules/b4a/index.js"(exports2, module2) {
+    function isBuffer(value) {
+      return Buffer.isBuffer(value) || value instanceof Uint8Array;
+    }
+    __name(isBuffer, "isBuffer");
+    function isEncoding(encoding) {
+      return Buffer.isEncoding(encoding);
+    }
+    __name(isEncoding, "isEncoding");
+    function alloc(size, fill2, encoding) {
+      return Buffer.alloc(size, fill2, encoding);
+    }
+    __name(alloc, "alloc");
+    function allocUnsafe(size) {
+      return Buffer.allocUnsafe(size);
+    }
+    __name(allocUnsafe, "allocUnsafe");
+    function allocUnsafeSlow(size) {
+      return Buffer.allocUnsafeSlow(size);
+    }
+    __name(allocUnsafeSlow, "allocUnsafeSlow");
+    function byteLength(string, encoding) {
+      return Buffer.byteLength(string, encoding);
+    }
+    __name(byteLength, "byteLength");
+    function compare(a, b) {
+      return Buffer.compare(a, b);
+    }
+    __name(compare, "compare");
+    function concat(buffers, totalLength) {
+      return Buffer.concat(buffers, totalLength);
+    }
+    __name(concat, "concat");
+    function copy(source, target, targetStart, start, end) {
+      return toBuffer(source).copy(target, targetStart, start, end);
+    }
+    __name(copy, "copy");
+    function equals(a, b) {
+      return toBuffer(a).equals(b);
+    }
+    __name(equals, "equals");
+    function fill(buffer, value, offset, end, encoding) {
+      return toBuffer(buffer).fill(value, offset, end, encoding);
+    }
+    __name(fill, "fill");
+    function from(value, encodingOrOffset, length) {
+      return Buffer.from(value, encodingOrOffset, length);
+    }
+    __name(from, "from");
+    function includes(buffer, value, byteOffset, encoding) {
+      return toBuffer(buffer).includes(value, byteOffset, encoding);
+    }
+    __name(includes, "includes");
+    function indexOf(buffer, value, byfeOffset, encoding) {
+      return toBuffer(buffer).indexOf(value, byfeOffset, encoding);
+    }
+    __name(indexOf, "indexOf");
+    function lastIndexOf(buffer, value, byteOffset, encoding) {
+      return toBuffer(buffer).lastIndexOf(value, byteOffset, encoding);
+    }
+    __name(lastIndexOf, "lastIndexOf");
+    function swap16(buffer) {
+      return toBuffer(buffer).swap16();
+    }
+    __name(swap16, "swap16");
+    function swap32(buffer) {
+      return toBuffer(buffer).swap32();
+    }
+    __name(swap32, "swap32");
+    function swap64(buffer) {
+      return toBuffer(buffer).swap64();
+    }
+    __name(swap64, "swap64");
+    function toBuffer(buffer) {
+      if (Buffer.isBuffer(buffer)) return buffer;
+      return Buffer.from(buffer.buffer, buffer.byteOffset, buffer.byteLength);
+    }
+    __name(toBuffer, "toBuffer");
+    function toString(buffer, encoding, start, end) {
+      return toBuffer(buffer).toString(encoding, start, end);
+    }
+    __name(toString, "toString");
+    function write(buffer, string, offset, length, encoding) {
+      return toBuffer(buffer).write(string, offset, length, encoding);
+    }
+    __name(write, "write");
+    function readDoubleBE(buffer, offset) {
+      return toBuffer(buffer).readDoubleBE(offset);
+    }
+    __name(readDoubleBE, "readDoubleBE");
+    function readDoubleLE(buffer, offset) {
+      return toBuffer(buffer).readDoubleLE(offset);
+    }
+    __name(readDoubleLE, "readDoubleLE");
+    function readFloatBE(buffer, offset) {
+      return toBuffer(buffer).readFloatBE(offset);
+    }
+    __name(readFloatBE, "readFloatBE");
+    function readFloatLE(buffer, offset) {
+      return toBuffer(buffer).readFloatLE(offset);
+    }
+    __name(readFloatLE, "readFloatLE");
+    function readInt32BE(buffer, offset) {
+      return toBuffer(buffer).readInt32BE(offset);
+    }
+    __name(readInt32BE, "readInt32BE");
+    function readInt32LE(buffer, offset) {
+      return toBuffer(buffer).readInt32LE(offset);
+    }
+    __name(readInt32LE, "readInt32LE");
+    function readUInt32BE(buffer, offset) {
+      return toBuffer(buffer).readUInt32BE(offset);
+    }
+    __name(readUInt32BE, "readUInt32BE");
+    function readUInt32LE(buffer, offset) {
+      return toBuffer(buffer).readUInt32LE(offset);
+    }
+    __name(readUInt32LE, "readUInt32LE");
+    function writeDoubleBE(buffer, value, offset) {
+      return toBuffer(buffer).writeDoubleBE(value, offset);
+    }
+    __name(writeDoubleBE, "writeDoubleBE");
+    function writeDoubleLE(buffer, value, offset) {
+      return toBuffer(buffer).writeDoubleLE(value, offset);
+    }
+    __name(writeDoubleLE, "writeDoubleLE");
+    function writeFloatBE(buffer, value, offset) {
+      return toBuffer(buffer).writeFloatBE(value, offset);
+    }
+    __name(writeFloatBE, "writeFloatBE");
+    function writeFloatLE(buffer, value, offset) {
+      return toBuffer(buffer).writeFloatLE(value, offset);
+    }
+    __name(writeFloatLE, "writeFloatLE");
+    function writeInt32BE(buffer, value, offset) {
+      return toBuffer(buffer).writeInt32BE(value, offset);
+    }
+    __name(writeInt32BE, "writeInt32BE");
+    function writeInt32LE(buffer, value, offset) {
+      return toBuffer(buffer).writeInt32LE(value, offset);
+    }
+    __name(writeInt32LE, "writeInt32LE");
+    function writeUInt32BE(buffer, value, offset) {
+      return toBuffer(buffer).writeUInt32BE(value, offset);
+    }
+    __name(writeUInt32BE, "writeUInt32BE");
+    function writeUInt32LE(buffer, value, offset) {
+      return toBuffer(buffer).writeUInt32LE(value, offset);
+    }
+    __name(writeUInt32LE, "writeUInt32LE");
+    module2.exports = {
+      isBuffer,
+      isEncoding,
+      alloc,
+      allocUnsafe,
+      allocUnsafeSlow,
+      byteLength,
+      compare,
+      concat,
+      copy,
+      equals,
+      fill,
+      from,
+      includes,
+      indexOf,
+      lastIndexOf,
+      swap16,
+      swap32,
+      swap64,
+      toBuffer,
+      toString,
+      write,
+      readDoubleBE,
+      readDoubleLE,
+      readFloatBE,
+      readFloatLE,
+      readInt32BE,
+      readInt32LE,
+      readUInt32BE,
+      readUInt32LE,
+      writeDoubleBE,
+      writeDoubleLE,
+      writeFloatBE,
+      writeFloatLE,
+      writeInt32BE,
+      writeInt32LE,
+      writeUInt32BE,
+      writeUInt32LE
+    };
+  }
+});
+
+// node_modules/.pnpm/text-decoder@1.2.7/node_modules/text-decoder/lib/pass-through-decoder.js
+var require_pass_through_decoder = __commonJS({
+  "node_modules/.pnpm/text-decoder@1.2.7/node_modules/text-decoder/lib/pass-through-decoder.js"(exports2, module2) {
+    var b4a = require_b4a();
+    module2.exports = class PassThroughDecoder {
+      static {
+        __name(this, "PassThroughDecoder");
+      }
+      constructor(encoding) {
+        this.encoding = encoding;
+      }
+      get remaining() {
+        return 0;
+      }
+      decode(data) {
+        return b4a.toString(data, this.encoding);
+      }
+      flush() {
+        return "";
+      }
+    };
+  }
+});
+
+// node_modules/.pnpm/text-decoder@1.2.7/node_modules/text-decoder/lib/utf8-decoder.js
+var require_utf8_decoder = __commonJS({
+  "node_modules/.pnpm/text-decoder@1.2.7/node_modules/text-decoder/lib/utf8-decoder.js"(exports2, module2) {
+    var b4a = require_b4a();
+    module2.exports = class UTF8Decoder {
+      static {
+        __name(this, "UTF8Decoder");
+      }
+      constructor() {
+        this._reset();
+      }
+      get remaining() {
+        return this.bytesSeen;
+      }
+      decode(data) {
+        if (data.byteLength === 0) return "";
+        if (this.bytesNeeded === 0 && trailingIncomplete(data, 0) === 0) {
+          this.bytesSeen = trailingBytesSeen(data);
+          return b4a.toString(data, "utf8");
+        }
+        let result = "";
+        let start = 0;
+        if (this.bytesNeeded > 0) {
+          while (start < data.byteLength) {
+            const byte = data[start];
+            if (byte < this.lowerBoundary || byte > this.upperBoundary) {
+              result += "�";
+              this._reset();
+              break;
+            }
+            this.lowerBoundary = 128;
+            this.upperBoundary = 191;
+            this.codePoint = this.codePoint << 6 | byte & 63;
+            this.bytesSeen++;
+            start++;
+            if (this.bytesSeen === this.bytesNeeded) {
+              result += String.fromCodePoint(this.codePoint);
+              this._reset();
+              break;
+            }
+          }
+          if (this.bytesNeeded > 0) return result;
+        }
+        const trailing = trailingIncomplete(data, start);
+        const end = data.byteLength - trailing;
+        if (end > start) result += b4a.toString(data, "utf8", start, end);
+        for (let i = end; i < data.byteLength; i++) {
+          const byte = data[i];
+          if (this.bytesNeeded === 0) {
+            if (byte <= 127) {
+              this.bytesSeen = 0;
+              result += String.fromCharCode(byte);
+            } else if (byte >= 194 && byte <= 223) {
+              this.bytesNeeded = 2;
+              this.bytesSeen = 1;
+              this.codePoint = byte & 31;
+            } else if (byte >= 224 && byte <= 239) {
+              if (byte === 224) this.lowerBoundary = 160;
+              else if (byte === 237) this.upperBoundary = 159;
+              this.bytesNeeded = 3;
+              this.bytesSeen = 1;
+              this.codePoint = byte & 15;
+            } else if (byte >= 240 && byte <= 244) {
+              if (byte === 240) this.lowerBoundary = 144;
+              else if (byte === 244) this.upperBoundary = 143;
+              this.bytesNeeded = 4;
+              this.bytesSeen = 1;
+              this.codePoint = byte & 7;
+            } else {
+              this.bytesSeen = 1;
+              result += "�";
+            }
+            continue;
+          }
+          if (byte < this.lowerBoundary || byte > this.upperBoundary) {
+            result += "�";
+            i--;
+            this._reset();
+            continue;
+          }
+          this.lowerBoundary = 128;
+          this.upperBoundary = 191;
+          this.codePoint = this.codePoint << 6 | byte & 63;
+          this.bytesSeen++;
+          if (this.bytesSeen === this.bytesNeeded) {
+            result += String.fromCodePoint(this.codePoint);
+            this._reset();
+          }
+        }
+        return result;
+      }
+      flush() {
+        const result = this.bytesNeeded > 0 ? "�" : "";
+        this._reset();
+        return result;
+      }
+      _reset() {
+        this.codePoint = 0;
+        this.bytesNeeded = 0;
+        this.bytesSeen = 0;
+        this.lowerBoundary = 128;
+        this.upperBoundary = 191;
+      }
+    };
+    function trailingIncomplete(data, start) {
+      const len = data.byteLength;
+      if (len <= start) return 0;
+      const limit = Math.max(start, len - 4);
+      let i = len - 1;
+      while (i > limit && (data[i] & 192) === 128) i--;
+      if (i < start) return 0;
+      const byte = data[i];
+      let needed;
+      if (byte <= 127) return 0;
+      if (byte >= 194 && byte <= 223) needed = 2;
+      else if (byte >= 224 && byte <= 239) needed = 3;
+      else if (byte >= 240 && byte <= 244) needed = 4;
+      else return 0;
+      const available = len - i;
+      return available < needed ? available : 0;
+    }
+    __name(trailingIncomplete, "trailingIncomplete");
+    function trailingBytesSeen(data) {
+      const len = data.byteLength;
+      if (len === 0) return 0;
+      const last = data[len - 1];
+      if (last <= 127) return 0;
+      if ((last & 192) !== 128) return 1;
+      const limit = Math.max(0, len - 4);
+      let i = len - 2;
+      while (i >= limit && (data[i] & 192) === 128) i--;
+      if (i < 0) return 1;
+      const first = data[i];
+      let needed;
+      if (first >= 194 && first <= 223) needed = 2;
+      else if (first >= 224 && first <= 239) needed = 3;
+      else if (first >= 240 && first <= 244) needed = 4;
+      else return 1;
+      if (len - i !== needed) return 1;
+      if (needed >= 3) {
+        const second = data[i + 1];
+        if (first === 224 && second < 160) return 1;
+        if (first === 237 && second > 159) return 1;
+        if (first === 240 && second < 144) return 1;
+        if (first === 244 && second > 143) return 1;
+      }
+      return 0;
+    }
+    __name(trailingBytesSeen, "trailingBytesSeen");
+  }
+});
+
+// node_modules/.pnpm/text-decoder@1.2.7/node_modules/text-decoder/index.js
+var require_text_decoder = __commonJS({
+  "node_modules/.pnpm/text-decoder@1.2.7/node_modules/text-decoder/index.js"(exports2, module2) {
+    var PassThroughDecoder = require_pass_through_decoder();
+    var UTF8Decoder = require_utf8_decoder();
+    module2.exports = class TextDecoder {
+      static {
+        __name(this, "TextDecoder");
+      }
+      constructor(encoding = "utf8") {
+        this.encoding = normalizeEncoding(encoding);
+        switch (this.encoding) {
+          case "utf8":
+            this.decoder = new UTF8Decoder();
+            break;
+          case "utf16le":
+          case "base64":
+            throw new Error("Unsupported encoding: " + this.encoding);
+          default:
+            this.decoder = new PassThroughDecoder(this.encoding);
+        }
+      }
+      get remaining() {
+        return this.decoder.remaining;
+      }
+      push(data) {
+        if (typeof data === "string") return data;
+        return this.decoder.decode(data);
+      }
+      // For Node.js compatibility
+      write(data) {
+        return this.push(data);
+      }
+      end(data) {
+        let result = "";
+        if (data) result = this.push(data);
+        result += this.decoder.flush();
+        return result;
+      }
+    };
+    function normalizeEncoding(encoding) {
+      encoding = encoding.toLowerCase();
+      switch (encoding) {
+        case "utf8":
+        case "utf-8":
+          return "utf8";
+        case "ucs2":
+        case "ucs-2":
+        case "utf16le":
+        case "utf-16le":
+          return "utf16le";
+        case "latin1":
+        case "binary":
+          return "latin1";
+        case "base64":
+        case "ascii":
+        case "hex":
+          return encoding;
+        default:
+          throw new Error("Unknown encoding: " + encoding);
+      }
+    }
+    __name(normalizeEncoding, "normalizeEncoding");
+  }
+});
+
+// node_modules/.pnpm/streamx@2.25.0/node_modules/streamx/index.js
+var require_streamx = __commonJS({
+  "node_modules/.pnpm/streamx@2.25.0/node_modules/streamx/index.js"(exports2, module2) {
+    var { EventEmitter } = require_default();
+    var STREAM_DESTROYED = new Error("Stream was destroyed");
+    var PREMATURE_CLOSE = new Error("Premature close");
+    var FIFO = require_fast_fifo();
+    var TextDecoder = require_text_decoder();
+    var qmt = typeof queueMicrotask === "undefined" ? (fn) => global.process.nextTick(fn) : queueMicrotask;
+    var MAX = (1 << 29) - 1;
+    var OPENING = 1;
+    var PREDESTROYING = 2;
+    var DESTROYING = 4;
+    var DESTROYED = 8;
+    var NOT_OPENING = MAX ^ OPENING;
+    var NOT_PREDESTROYING = MAX ^ PREDESTROYING;
+    var READ_ACTIVE = 1 << 4;
+    var READ_UPDATING = 2 << 4;
+    var READ_PRIMARY = 4 << 4;
+    var READ_QUEUED = 8 << 4;
+    var READ_RESUMED = 16 << 4;
+    var READ_PIPE_DRAINED = 32 << 4;
+    var READ_ENDING = 64 << 4;
+    var READ_EMIT_DATA = 128 << 4;
+    var READ_EMIT_READABLE = 256 << 4;
+    var READ_EMITTED_READABLE = 512 << 4;
+    var READ_DONE = 1024 << 4;
+    var READ_NEXT_TICK = 2048 << 4;
+    var READ_NEEDS_PUSH = 4096 << 4;
+    var READ_READ_AHEAD = 8192 << 4;
+    var READ_FLOWING = READ_RESUMED | READ_PIPE_DRAINED;
+    var READ_ACTIVE_AND_NEEDS_PUSH = READ_ACTIVE | READ_NEEDS_PUSH;
+    var READ_PRIMARY_AND_ACTIVE = READ_PRIMARY | READ_ACTIVE;
+    var READ_EMIT_READABLE_AND_QUEUED = READ_EMIT_READABLE | READ_QUEUED;
+    var READ_RESUMED_READ_AHEAD = READ_RESUMED | READ_READ_AHEAD;
+    var READ_NOT_ACTIVE = MAX ^ READ_ACTIVE;
+    var READ_NON_PRIMARY = MAX ^ READ_PRIMARY;
+    var READ_NON_PRIMARY_AND_PUSHED = MAX ^ (READ_PRIMARY | READ_NEEDS_PUSH);
+    var READ_PUSHED = MAX ^ READ_NEEDS_PUSH;
+    var READ_PAUSED = MAX ^ READ_RESUMED;
+    var READ_NOT_QUEUED = MAX ^ (READ_QUEUED | READ_EMITTED_READABLE);
+    var READ_NOT_ENDING = MAX ^ READ_ENDING;
+    var READ_PIPE_NOT_DRAINED = MAX ^ READ_FLOWING;
+    var READ_NOT_NEXT_TICK = MAX ^ READ_NEXT_TICK;
+    var READ_NOT_UPDATING = MAX ^ READ_UPDATING;
+    var READ_NO_READ_AHEAD = MAX ^ READ_READ_AHEAD;
+    var READ_PAUSED_NO_READ_AHEAD = MAX ^ READ_RESUMED_READ_AHEAD;
+    var WRITE_ACTIVE = 1 << 18;
+    var WRITE_UPDATING = 2 << 18;
+    var WRITE_PRIMARY = 4 << 18;
+    var WRITE_QUEUED = 8 << 18;
+    var WRITE_UNDRAINED = 16 << 18;
+    var WRITE_DONE = 32 << 18;
+    var WRITE_EMIT_DRAIN = 64 << 18;
+    var WRITE_NEXT_TICK = 128 << 18;
+    var WRITE_WRITING = 256 << 18;
+    var WRITE_FINISHING = 512 << 18;
+    var WRITE_CORKED = 1024 << 18;
+    var WRITE_NOT_ACTIVE = MAX ^ (WRITE_ACTIVE | WRITE_WRITING);
+    var WRITE_NON_PRIMARY = MAX ^ WRITE_PRIMARY;
+    var WRITE_NOT_FINISHING = MAX ^ (WRITE_ACTIVE | WRITE_FINISHING);
+    var WRITE_DRAINED = MAX ^ WRITE_UNDRAINED;
+    var WRITE_NOT_QUEUED = MAX ^ WRITE_QUEUED;
+    var WRITE_NOT_NEXT_TICK = MAX ^ WRITE_NEXT_TICK;
+    var WRITE_NOT_UPDATING = MAX ^ WRITE_UPDATING;
+    var WRITE_NOT_CORKED = MAX ^ WRITE_CORKED;
+    var ACTIVE = READ_ACTIVE | WRITE_ACTIVE;
+    var NOT_ACTIVE = MAX ^ ACTIVE;
+    var DONE = READ_DONE | WRITE_DONE;
+    var DESTROY_STATUS = DESTROYING | DESTROYED | PREDESTROYING;
+    var OPEN_STATUS = DESTROY_STATUS | OPENING;
+    var AUTO_DESTROY = DESTROY_STATUS | DONE;
+    var NON_PRIMARY = WRITE_NON_PRIMARY & READ_NON_PRIMARY;
+    var ACTIVE_OR_TICKING = WRITE_NEXT_TICK | READ_NEXT_TICK;
+    var TICKING = ACTIVE_OR_TICKING & NOT_ACTIVE;
+    var IS_OPENING = OPEN_STATUS | TICKING;
+    var READ_PRIMARY_STATUS = OPEN_STATUS | READ_ENDING | READ_DONE;
+    var READ_STATUS = OPEN_STATUS | READ_DONE | READ_QUEUED;
+    var READ_ENDING_STATUS = OPEN_STATUS | READ_ENDING | READ_QUEUED;
+    var READ_READABLE_STATUS = OPEN_STATUS | READ_EMIT_READABLE | READ_QUEUED | READ_EMITTED_READABLE;
+    var SHOULD_NOT_READ = OPEN_STATUS | READ_ACTIVE | READ_ENDING | READ_DONE | READ_NEEDS_PUSH | READ_READ_AHEAD;
+    var READ_BACKPRESSURE_STATUS = DESTROY_STATUS | READ_ENDING | READ_DONE;
+    var READ_UPDATE_SYNC_STATUS = READ_UPDATING | OPEN_STATUS | READ_NEXT_TICK | READ_PRIMARY;
+    var READ_NEXT_TICK_OR_OPENING = READ_NEXT_TICK | OPENING;
+    var WRITE_PRIMARY_STATUS = OPEN_STATUS | WRITE_FINISHING | WRITE_DONE;
+    var WRITE_QUEUED_AND_UNDRAINED = WRITE_QUEUED | WRITE_UNDRAINED;
+    var WRITE_QUEUED_AND_ACTIVE = WRITE_QUEUED | WRITE_ACTIVE;
+    var WRITE_DRAIN_STATUS = WRITE_QUEUED | WRITE_UNDRAINED | OPEN_STATUS | WRITE_ACTIVE;
+    var WRITE_STATUS = OPEN_STATUS | WRITE_ACTIVE | WRITE_QUEUED | WRITE_CORKED;
+    var WRITE_PRIMARY_AND_ACTIVE = WRITE_PRIMARY | WRITE_ACTIVE;
+    var WRITE_ACTIVE_AND_WRITING = WRITE_ACTIVE | WRITE_WRITING;
+    var WRITE_FINISHING_STATUS = OPEN_STATUS | WRITE_FINISHING | WRITE_QUEUED_AND_ACTIVE | WRITE_DONE;
+    var WRITE_BACKPRESSURE_STATUS = WRITE_UNDRAINED | DESTROY_STATUS | WRITE_FINISHING | WRITE_DONE;
+    var WRITE_UPDATE_SYNC_STATUS = WRITE_UPDATING | OPEN_STATUS | WRITE_NEXT_TICK | WRITE_PRIMARY;
+    var WRITE_DROP_DATA = WRITE_FINISHING | WRITE_DONE | DESTROY_STATUS;
+    var asyncIterator = Symbol.asyncIterator || Symbol("asyncIterator");
+    var WritableState = class {
+      static {
+        __name(this, "WritableState");
+      }
+      constructor(stream, { highWaterMark = 16384, map = null, mapWritable, byteLength, byteLengthWritable } = {}) {
+        this.stream = stream;
+        this.queue = new FIFO();
+        this.highWaterMark = highWaterMark;
+        this.buffered = 0;
+        this.error = null;
+        this.pipeline = null;
+        this.drains = null;
+        this.byteLength = byteLengthWritable || byteLength || defaultByteLength;
+        this.map = mapWritable || map;
+        this.afterWrite = afterWrite.bind(this);
+        this.afterUpdateNextTick = updateWriteNT.bind(this);
+      }
+      get ending() {
+        return (this.stream._duplexState & WRITE_FINISHING) !== 0;
+      }
+      get ended() {
+        return (this.stream._duplexState & WRITE_DONE) !== 0;
+      }
+      push(data) {
+        if ((this.stream._duplexState & WRITE_DROP_DATA) !== 0) return false;
+        if (this.map !== null) data = this.map(data);
+        this.buffered += this.byteLength(data);
+        this.queue.push(data);
+        if (this.buffered < this.highWaterMark) {
+          this.stream._duplexState |= WRITE_QUEUED;
+          return true;
+        }
+        this.stream._duplexState |= WRITE_QUEUED_AND_UNDRAINED;
+        return false;
+      }
+      shift() {
+        const data = this.queue.shift();
+        this.buffered -= this.byteLength(data);
+        if (this.buffered === 0) this.stream._duplexState &= WRITE_NOT_QUEUED;
+        return data;
+      }
+      end(data) {
+        if (typeof data === "function") this.stream.once("finish", data);
+        else if (data !== void 0 && data !== null) this.push(data);
+        this.stream._duplexState = (this.stream._duplexState | WRITE_FINISHING) & WRITE_NON_PRIMARY;
+      }
+      autoBatch(data, cb) {
+        const buffer = [];
+        const stream = this.stream;
+        buffer.push(data);
+        while ((stream._duplexState & WRITE_STATUS) === WRITE_QUEUED_AND_ACTIVE) {
+          buffer.push(stream._writableState.shift());
+        }
+        if ((stream._duplexState & OPEN_STATUS) !== 0) return cb(null);
+        stream._writev(buffer, cb);
+      }
+      update() {
+        const stream = this.stream;
+        stream._duplexState |= WRITE_UPDATING;
+        do {
+          while ((stream._duplexState & WRITE_STATUS) === WRITE_QUEUED) {
+            const data = this.shift();
+            stream._duplexState |= WRITE_ACTIVE_AND_WRITING;
+            stream._write(data, this.afterWrite);
+          }
+          if ((stream._duplexState & WRITE_PRIMARY_AND_ACTIVE) === 0) this.updateNonPrimary();
+        } while (this.continueUpdate() === true);
+        stream._duplexState &= WRITE_NOT_UPDATING;
+      }
+      updateNonPrimary() {
+        const stream = this.stream;
+        if ((stream._duplexState & WRITE_FINISHING_STATUS) === WRITE_FINISHING) {
+          stream._duplexState = stream._duplexState | WRITE_ACTIVE;
+          stream._final(afterFinal.bind(this));
+          return;
+        }
+        if ((stream._duplexState & DESTROY_STATUS) === DESTROYING) {
+          if ((stream._duplexState & ACTIVE_OR_TICKING) === 0) {
+            stream._duplexState |= ACTIVE;
+            stream._destroy(afterDestroy.bind(this));
+          }
+          return;
+        }
+        if ((stream._duplexState & IS_OPENING) === OPENING) {
+          stream._duplexState = (stream._duplexState | ACTIVE) & NOT_OPENING;
+          stream._open(afterOpen.bind(this));
+        }
+      }
+      continueUpdate() {
+        if ((this.stream._duplexState & WRITE_NEXT_TICK) === 0) return false;
+        this.stream._duplexState &= WRITE_NOT_NEXT_TICK;
+        return true;
+      }
+      updateCallback() {
+        if ((this.stream._duplexState & WRITE_UPDATE_SYNC_STATUS) === WRITE_PRIMARY) this.update();
+        else this.updateNextTick();
+      }
+      updateNextTick() {
+        if ((this.stream._duplexState & WRITE_NEXT_TICK) !== 0) return;
+        this.stream._duplexState |= WRITE_NEXT_TICK;
+        if ((this.stream._duplexState & WRITE_UPDATING) === 0) qmt(this.afterUpdateNextTick);
+      }
+    };
+    var ReadableState = class {
+      static {
+        __name(this, "ReadableState");
+      }
+      constructor(stream, { highWaterMark = 16384, map = null, mapReadable, byteLength, byteLengthReadable } = {}) {
+        this.stream = stream;
+        this.queue = new FIFO();
+        this.highWaterMark = highWaterMark === 0 ? 1 : highWaterMark;
+        this.buffered = 0;
+        this.readAhead = highWaterMark > 0;
+        this.error = null;
+        this.pipeline = null;
+        this.byteLength = byteLengthReadable || byteLength || defaultByteLength;
+        this.map = mapReadable || map;
+        this.pipeTo = null;
+        this.afterRead = afterRead.bind(this);
+        this.afterUpdateNextTick = updateReadNT.bind(this);
+      }
+      get ending() {
+        return (this.stream._duplexState & READ_ENDING) !== 0;
+      }
+      get ended() {
+        return (this.stream._duplexState & READ_DONE) !== 0;
+      }
+      pipe(pipeTo, cb) {
+        if (this.pipeTo !== null) throw new Error("Can only pipe to one destination");
+        if (typeof cb !== "function") cb = null;
+        this.stream._duplexState |= READ_PIPE_DRAINED;
+        this.pipeTo = pipeTo;
+        this.pipeline = new Pipeline(this.stream, pipeTo, cb);
+        if (cb) this.stream.on("error", noop);
+        if (isStreamx(pipeTo)) {
+          pipeTo._writableState.pipeline = this.pipeline;
+          if (cb) pipeTo.on("error", noop);
+          pipeTo.on("finish", this.pipeline.finished.bind(this.pipeline));
+        } else {
+          const onerror = this.pipeline.done.bind(this.pipeline, pipeTo);
+          const onclose = this.pipeline.done.bind(this.pipeline, pipeTo, null);
+          pipeTo.on("error", onerror);
+          pipeTo.on("close", onclose);
+          pipeTo.on("finish", this.pipeline.finished.bind(this.pipeline));
+        }
+        pipeTo.on("drain", afterDrain.bind(this));
+        this.stream.emit("piping", pipeTo);
+        pipeTo.emit("pipe", this.stream);
+      }
+      push(data) {
+        const stream = this.stream;
+        if (data === null) {
+          this.highWaterMark = 0;
+          stream._duplexState = (stream._duplexState | READ_ENDING) & READ_NON_PRIMARY_AND_PUSHED;
+          return false;
+        }
+        if (this.map !== null) {
+          data = this.map(data);
+          if (data === null) {
+            stream._duplexState &= READ_PUSHED;
+            return this.buffered < this.highWaterMark;
+          }
+        }
+        this.buffered += this.byteLength(data);
+        this.queue.push(data);
+        stream._duplexState = (stream._duplexState | READ_QUEUED) & READ_PUSHED;
+        return this.buffered < this.highWaterMark;
+      }
+      shift() {
+        const data = this.queue.shift();
+        this.buffered -= this.byteLength(data);
+        if (this.buffered === 0) this.stream._duplexState &= READ_NOT_QUEUED;
+        return data;
+      }
+      unshift(data) {
+        const pending = [this.map !== null ? this.map(data) : data];
+        while (this.buffered > 0) pending.push(this.shift());
+        for (let i = 0; i < pending.length - 1; i++) {
+          const data2 = pending[i];
+          this.buffered += this.byteLength(data2);
+          this.queue.push(data2);
+        }
+        this.push(pending[pending.length - 1]);
+      }
+      read() {
+        const stream = this.stream;
+        if ((stream._duplexState & READ_STATUS) === READ_QUEUED) {
+          const data = this.shift();
+          if (this.pipeTo !== null && this.pipeTo.write(data) === false)
+            stream._duplexState &= READ_PIPE_NOT_DRAINED;
+          if ((stream._duplexState & READ_EMIT_DATA) !== 0) stream.emit("data", data);
+          return data;
+        }
+        if (this.readAhead === false) {
+          stream._duplexState |= READ_READ_AHEAD;
+          this.updateNextTick();
+        }
+        return null;
+      }
+      drain() {
+        const stream = this.stream;
+        while ((stream._duplexState & READ_STATUS) === READ_QUEUED && (stream._duplexState & READ_FLOWING) !== 0) {
+          const data = this.shift();
+          if (this.pipeTo !== null && this.pipeTo.write(data) === false)
+            stream._duplexState &= READ_PIPE_NOT_DRAINED;
+          if ((stream._duplexState & READ_EMIT_DATA) !== 0) stream.emit("data", data);
+        }
+      }
+      update() {
+        const stream = this.stream;
+        stream._duplexState |= READ_UPDATING;
+        do {
+          this.drain();
+          while (this.buffered < this.highWaterMark && (stream._duplexState & SHOULD_NOT_READ) === READ_READ_AHEAD) {
+            stream._duplexState |= READ_ACTIVE_AND_NEEDS_PUSH;
+            stream._read(this.afterRead);
+            this.drain();
+          }
+          if ((stream._duplexState & READ_READABLE_STATUS) === READ_EMIT_READABLE_AND_QUEUED) {
+            stream._duplexState |= READ_EMITTED_READABLE;
+            stream.emit("readable");
+          }
+          if ((stream._duplexState & READ_PRIMARY_AND_ACTIVE) === 0) this.updateNonPrimary();
+        } while (this.continueUpdate() === true);
+        stream._duplexState &= READ_NOT_UPDATING;
+      }
+      updateNonPrimary() {
+        const stream = this.stream;
+        if ((stream._duplexState & READ_ENDING_STATUS) === READ_ENDING) {
+          stream._duplexState = (stream._duplexState | READ_DONE) & READ_NOT_ENDING;
+          stream.emit("end");
+          if ((stream._duplexState & AUTO_DESTROY) === DONE) stream._duplexState |= DESTROYING;
+          if (this.pipeTo !== null) this.pipeTo.end();
+        }
+        if ((stream._duplexState & DESTROY_STATUS) === DESTROYING) {
+          if ((stream._duplexState & ACTIVE_OR_TICKING) === 0) {
+            stream._duplexState |= ACTIVE;
+            stream._destroy(afterDestroy.bind(this));
+          }
+          return;
+        }
+        if ((stream._duplexState & IS_OPENING) === OPENING) {
+          stream._duplexState = (stream._duplexState | ACTIVE) & NOT_OPENING;
+          stream._open(afterOpen.bind(this));
+        }
+      }
+      continueUpdate() {
+        if ((this.stream._duplexState & READ_NEXT_TICK) === 0) return false;
+        this.stream._duplexState &= READ_NOT_NEXT_TICK;
+        return true;
+      }
+      updateCallback() {
+        if ((this.stream._duplexState & READ_UPDATE_SYNC_STATUS) === READ_PRIMARY) this.update();
+        else this.updateNextTick();
+      }
+      updateNextTickIfOpen() {
+        if ((this.stream._duplexState & READ_NEXT_TICK_OR_OPENING) !== 0) return;
+        this.stream._duplexState |= READ_NEXT_TICK;
+        if ((this.stream._duplexState & READ_UPDATING) === 0) qmt(this.afterUpdateNextTick);
+      }
+      updateNextTick() {
+        if ((this.stream._duplexState & READ_NEXT_TICK) !== 0) return;
+        this.stream._duplexState |= READ_NEXT_TICK;
+        if ((this.stream._duplexState & READ_UPDATING) === 0) qmt(this.afterUpdateNextTick);
+      }
+    };
+    var TransformState = class {
+      static {
+        __name(this, "TransformState");
+      }
+      constructor(stream) {
+        this.data = null;
+        this.afterTransform = afterTransform.bind(stream);
+        this.afterFinal = null;
+      }
+    };
+    var Pipeline = class {
+      static {
+        __name(this, "Pipeline");
+      }
+      constructor(src, dst, cb) {
+        this.from = src;
+        this.to = dst;
+        this.afterPipe = cb;
+        this.error = null;
+        this.pipeToFinished = false;
+      }
+      finished() {
+        this.pipeToFinished = true;
+      }
+      done(stream, err) {
+        if (err) this.error = err;
+        if (stream === this.to) {
+          this.to = null;
+          if (this.from !== null) {
+            if ((this.from._duplexState & READ_DONE) === 0 || !this.pipeToFinished) {
+              this.from.destroy(this.error || new Error("Writable stream closed prematurely"));
+            }
+            return;
+          }
+        }
+        if (stream === this.from) {
+          this.from = null;
+          if (this.to !== null) {
+            if ((stream._duplexState & READ_DONE) === 0) {
+              this.to.destroy(this.error || new Error("Readable stream closed before ending"));
+            }
+            return;
+          }
+        }
+        if (this.afterPipe !== null) this.afterPipe(this.error);
+        this.to = this.from = this.afterPipe = null;
+      }
+    };
+    function afterDrain() {
+      this.stream._duplexState |= READ_PIPE_DRAINED;
+      this.updateCallback();
+    }
+    __name(afterDrain, "afterDrain");
+    function afterFinal(err) {
+      const stream = this.stream;
+      if (err) stream.destroy(err);
+      if ((stream._duplexState & DESTROY_STATUS) === 0) {
+        stream._duplexState |= WRITE_DONE;
+        stream.emit("finish");
+      }
+      if ((stream._duplexState & AUTO_DESTROY) === DONE) {
+        stream._duplexState |= DESTROYING;
+      }
+      stream._duplexState &= WRITE_NOT_FINISHING;
+      if ((stream._duplexState & WRITE_UPDATING) === 0) this.update();
+      else this.updateNextTick();
+    }
+    __name(afterFinal, "afterFinal");
+    function afterDestroy(err) {
+      const stream = this.stream;
+      if (!err && this.error !== STREAM_DESTROYED) err = this.error;
+      if (err) stream.emit("error", err);
+      stream._duplexState |= DESTROYED;
+      stream.emit("close");
+      const rs = stream._readableState;
+      const ws = stream._writableState;
+      if (rs !== null && rs.pipeline !== null) rs.pipeline.done(stream, err);
+      if (ws !== null) {
+        while (ws.drains !== null && ws.drains.length > 0) ws.drains.shift().resolve(false);
+        if (ws.pipeline !== null) ws.pipeline.done(stream, err);
+      }
+    }
+    __name(afterDestroy, "afterDestroy");
+    function afterWrite(err) {
+      const stream = this.stream;
+      if (err) stream.destroy(err);
+      stream._duplexState &= WRITE_NOT_ACTIVE;
+      if (this.drains !== null) tickDrains(this.drains);
+      if ((stream._duplexState & WRITE_DRAIN_STATUS) === WRITE_UNDRAINED) {
+        stream._duplexState &= WRITE_DRAINED;
+        if ((stream._duplexState & WRITE_EMIT_DRAIN) === WRITE_EMIT_DRAIN) {
+          stream.emit("drain");
+        }
+      }
+      this.updateCallback();
+    }
+    __name(afterWrite, "afterWrite");
+    function afterRead(err) {
+      if (err) this.stream.destroy(err);
+      this.stream._duplexState &= READ_NOT_ACTIVE;
+      if (this.readAhead === false && (this.stream._duplexState & READ_RESUMED) === 0)
+        this.stream._duplexState &= READ_NO_READ_AHEAD;
+      this.updateCallback();
+    }
+    __name(afterRead, "afterRead");
+    function updateReadNT() {
+      if ((this.stream._duplexState & READ_UPDATING) === 0) {
+        this.stream._duplexState &= READ_NOT_NEXT_TICK;
+        this.update();
+      }
+    }
+    __name(updateReadNT, "updateReadNT");
+    function updateWriteNT() {
+      if ((this.stream._duplexState & WRITE_UPDATING) === 0) {
+        this.stream._duplexState &= WRITE_NOT_NEXT_TICK;
+        this.update();
+      }
+    }
+    __name(updateWriteNT, "updateWriteNT");
+    function tickDrains(drains) {
+      for (let i = 0; i < drains.length; i++) {
+        if (--drains[i].writes === 0) {
+          drains.shift().resolve(true);
+          i--;
+        }
+      }
+    }
+    __name(tickDrains, "tickDrains");
+    function afterOpen(err) {
+      const stream = this.stream;
+      if (err) stream.destroy(err);
+      if ((stream._duplexState & DESTROYING) === 0) {
+        if ((stream._duplexState & READ_PRIMARY_STATUS) === 0) stream._duplexState |= READ_PRIMARY;
+        if ((stream._duplexState & WRITE_PRIMARY_STATUS) === 0) stream._duplexState |= WRITE_PRIMARY;
+        stream.emit("open");
+      }
+      stream._duplexState &= NOT_ACTIVE;
+      if (stream._writableState !== null) {
+        stream._writableState.updateCallback();
+      }
+      if (stream._readableState !== null) {
+        stream._readableState.updateCallback();
+      }
+    }
+    __name(afterOpen, "afterOpen");
+    function afterTransform(err, data) {
+      if (data !== void 0 && data !== null) this.push(data);
+      this._writableState.afterWrite(err);
+    }
+    __name(afterTransform, "afterTransform");
+    function newListener(name) {
+      if (this._readableState !== null) {
+        if (name === "data") {
+          this._duplexState |= READ_EMIT_DATA | READ_RESUMED_READ_AHEAD;
+          this._readableState.updateNextTick();
+        }
+        if (name === "readable") {
+          this._duplexState |= READ_EMIT_READABLE;
+          this._readableState.updateNextTick();
+        }
+      }
+      if (this._writableState !== null) {
+        if (name === "drain") {
+          this._duplexState |= WRITE_EMIT_DRAIN;
+          this._writableState.updateNextTick();
+        }
+      }
+    }
+    __name(newListener, "newListener");
+    var Stream = class extends EventEmitter {
+      static {
+        __name(this, "Stream");
+      }
+      constructor(opts) {
+        super();
+        this._duplexState = 0;
+        this._readableState = null;
+        this._writableState = null;
+        if (opts) {
+          if (opts.open) this._open = opts.open;
+          if (opts.destroy) this._destroy = opts.destroy;
+          if (opts.predestroy) this._predestroy = opts.predestroy;
+          if (opts.signal) {
+            opts.signal.addEventListener("abort", abort.bind(this));
+          }
+        }
+        this.on("newListener", newListener);
+      }
+      _open(cb) {
+        cb(null);
+      }
+      _destroy(cb) {
+        cb(null);
+      }
+      _predestroy() {
+      }
+      get readable() {
+        return this._readableState !== null ? true : void 0;
+      }
+      get writable() {
+        return this._writableState !== null ? true : void 0;
+      }
+      get destroyed() {
+        return (this._duplexState & DESTROYED) !== 0;
+      }
+      get destroying() {
+        return (this._duplexState & DESTROY_STATUS) !== 0;
+      }
+      destroy(err) {
+        if ((this._duplexState & DESTROY_STATUS) === 0) {
+          if (!err) err = STREAM_DESTROYED;
+          this._duplexState = (this._duplexState | DESTROYING) & NON_PRIMARY;
+          if (this._readableState !== null) {
+            this._readableState.highWaterMark = 0;
+            this._readableState.error = err;
+          }
+          if (this._writableState !== null) {
+            this._writableState.highWaterMark = 0;
+            this._writableState.error = err;
+          }
+          this._duplexState |= PREDESTROYING;
+          this._predestroy();
+          this._duplexState &= NOT_PREDESTROYING;
+          if (this._readableState !== null) this._readableState.updateNextTick();
+          if (this._writableState !== null) this._writableState.updateNextTick();
+        }
+      }
+    };
+    var Readable = class _Readable extends Stream {
+      static {
+        __name(this, "Readable");
+      }
+      constructor(opts) {
+        super(opts);
+        this._duplexState |= OPENING | WRITE_DONE | READ_READ_AHEAD;
+        this._readableState = new ReadableState(this, opts);
+        if (opts) {
+          if (this._readableState.readAhead === false) this._duplexState &= READ_NO_READ_AHEAD;
+          if (opts.read) this._read = opts.read;
+          if (opts.eagerOpen) this._readableState.updateNextTick();
+          if (opts.encoding) this.setEncoding(opts.encoding);
+        }
+      }
+      setEncoding(encoding) {
+        const dec = new TextDecoder(encoding);
+        const map = this._readableState.map || echo;
+        this._readableState.map = mapOrSkip;
+        return this;
+        function mapOrSkip(data) {
+          const next = dec.push(data);
+          return next === "" && (data.byteLength !== 0 || dec.remaining > 0) ? null : map(next);
+        }
+        __name(mapOrSkip, "mapOrSkip");
+      }
+      _read(cb) {
+        cb(null);
+      }
+      pipe(dest, cb) {
+        this._readableState.updateNextTick();
+        this._readableState.pipe(dest, cb);
+        return dest;
+      }
+      read() {
+        this._readableState.updateNextTick();
+        return this._readableState.read();
+      }
+      push(data) {
+        this._readableState.updateNextTickIfOpen();
+        return this._readableState.push(data);
+      }
+      unshift(data) {
+        this._readableState.updateNextTickIfOpen();
+        return this._readableState.unshift(data);
+      }
+      resume() {
+        this._duplexState |= READ_RESUMED_READ_AHEAD;
+        this._readableState.updateNextTick();
+        return this;
+      }
+      pause() {
+        this._duplexState &= this._readableState.readAhead === false ? READ_PAUSED_NO_READ_AHEAD : READ_PAUSED;
+        return this;
+      }
+      static _fromAsyncIterator(ite, opts) {
+        let destroy;
+        const rs = new _Readable({
+          ...opts,
+          read(cb) {
+            ite.next().then(push).then(cb.bind(null, null)).catch(cb);
+          },
+          predestroy() {
+            destroy = ite.return();
+          },
+          destroy(cb) {
+            if (!destroy) return cb(null);
+            destroy.then(cb.bind(null, null)).catch(cb);
+          }
+        });
+        return rs;
+        function push(data) {
+          if (data.done) rs.push(null);
+          else rs.push(data.value);
+        }
+        __name(push, "push");
+      }
+      static from(data, opts) {
+        if (isReadStreamx(data)) return data;
+        if (data[asyncIterator]) return this._fromAsyncIterator(data[asyncIterator](), opts);
+        if (!Array.isArray(data)) data = data === void 0 ? [] : [data];
+        let i = 0;
+        return new _Readable({
+          ...opts,
+          read(cb) {
+            this.push(i === data.length ? null : data[i++]);
+            cb(null);
+          }
+        });
+      }
+      static isBackpressured(rs) {
+        return (rs._duplexState & READ_BACKPRESSURE_STATUS) !== 0 || rs._readableState.buffered >= rs._readableState.highWaterMark;
+      }
+      static isPaused(rs) {
+        return (rs._duplexState & READ_RESUMED) === 0;
+      }
+      [asyncIterator]() {
+        const stream = this;
+        let error = null;
+        let promiseResolve = null;
+        let promiseReject = null;
+        this.on("error", (err) => {
+          error = err;
+        });
+        this.on("readable", onreadable);
+        this.on("close", onclose);
+        return {
+          [asyncIterator]() {
+            return this;
+          },
+          next() {
+            return new Promise(function(resolve, reject) {
+              promiseResolve = resolve;
+              promiseReject = reject;
+              const data = stream.read();
+              if (data !== null) ondata(data);
+              else if ((stream._duplexState & DESTROYED) !== 0) ondata(null);
+            });
+          },
+          return() {
+            return destroy(null);
+          },
+          throw(err) {
+            return destroy(err);
+          }
+        };
+        function onreadable() {
+          if (promiseResolve !== null) ondata(stream.read());
+        }
+        __name(onreadable, "onreadable");
+        function onclose() {
+          if (promiseResolve !== null) ondata(null);
+        }
+        __name(onclose, "onclose");
+        function ondata(data) {
+          if (promiseReject === null) return;
+          if (error) promiseReject(error);
+          else if (data === null && (stream._duplexState & READ_DONE) === 0)
+            promiseReject(STREAM_DESTROYED);
+          else promiseResolve({ value: data, done: data === null });
+          promiseReject = promiseResolve = null;
+        }
+        __name(ondata, "ondata");
+        function destroy(err) {
+          stream.destroy(err);
+          return new Promise((resolve, reject) => {
+            if (stream._duplexState & DESTROYED) return resolve({ value: void 0, done: true });
+            stream.once("close", function() {
+              if (err) reject(err);
+              else resolve({ value: void 0, done: true });
+            });
+          });
+        }
+        __name(destroy, "destroy");
+      }
+    };
+    var Writable = class extends Stream {
+      static {
+        __name(this, "Writable");
+      }
+      constructor(opts) {
+        super(opts);
+        this._duplexState |= OPENING | READ_DONE;
+        this._writableState = new WritableState(this, opts);
+        if (opts) {
+          if (opts.writev) this._writev = opts.writev;
+          if (opts.write) this._write = opts.write;
+          if (opts.final) this._final = opts.final;
+          if (opts.eagerOpen) this._writableState.updateNextTick();
+        }
+      }
+      cork() {
+        this._duplexState |= WRITE_CORKED;
+      }
+      uncork() {
+        this._duplexState &= WRITE_NOT_CORKED;
+        this._writableState.updateNextTick();
+      }
+      _writev(batch, cb) {
+        cb(null);
+      }
+      _write(data, cb) {
+        this._writableState.autoBatch(data, cb);
+      }
+      _final(cb) {
+        cb(null);
+      }
+      static isBackpressured(ws) {
+        return (ws._duplexState & WRITE_BACKPRESSURE_STATUS) !== 0;
+      }
+      static drained(ws) {
+        if (ws.destroyed) return Promise.resolve(false);
+        const state = ws._writableState;
+        const pending = isWritev(ws) ? Math.min(1, state.queue.length) : state.queue.length;
+        const writes = pending + (ws._duplexState & WRITE_WRITING ? 1 : 0);
+        if (writes === 0) return Promise.resolve(true);
+        if (state.drains === null) state.drains = [];
+        return new Promise((resolve) => {
+          state.drains.push({ writes, resolve });
+        });
+      }
+      write(data) {
+        this._writableState.updateNextTick();
+        return this._writableState.push(data);
+      }
+      end(data) {
+        this._writableState.updateNextTick();
+        this._writableState.end(data);
+        return this;
+      }
+    };
+    var Duplex = class extends Readable {
+      static {
+        __name(this, "Duplex");
+      }
+      // and Writable
+      constructor(opts) {
+        super(opts);
+        this._duplexState = OPENING | this._duplexState & READ_READ_AHEAD;
+        this._writableState = new WritableState(this, opts);
+        if (opts) {
+          if (opts.writev) this._writev = opts.writev;
+          if (opts.write) this._write = opts.write;
+          if (opts.final) this._final = opts.final;
+        }
+      }
+      cork() {
+        this._duplexState |= WRITE_CORKED;
+      }
+      uncork() {
+        this._duplexState &= WRITE_NOT_CORKED;
+        this._writableState.updateNextTick();
+      }
+      _writev(batch, cb) {
+        cb(null);
+      }
+      _write(data, cb) {
+        this._writableState.autoBatch(data, cb);
+      }
+      _final(cb) {
+        cb(null);
+      }
+      write(data) {
+        this._writableState.updateNextTick();
+        return this._writableState.push(data);
+      }
+      end(data) {
+        this._writableState.updateNextTick();
+        this._writableState.end(data);
+        return this;
+      }
+    };
+    var Transform = class extends Duplex {
+      static {
+        __name(this, "Transform");
+      }
+      constructor(opts) {
+        super(opts);
+        this._transformState = new TransformState(this);
+        if (opts) {
+          if (opts.transform) this._transform = opts.transform;
+          if (opts.flush) this._flush = opts.flush;
+        }
+      }
+      _write(data, cb) {
+        if (this._readableState.buffered >= this._readableState.highWaterMark) {
+          this._transformState.data = data;
+        } else {
+          this._transform(data, this._transformState.afterTransform);
+        }
+      }
+      _read(cb) {
+        if (this._transformState.data !== null) {
+          const data = this._transformState.data;
+          this._transformState.data = null;
+          cb(null);
+          this._transform(data, this._transformState.afterTransform);
+        } else {
+          cb(null);
+        }
+      }
+      destroy(err) {
+        super.destroy(err);
+        if (this._transformState.data !== null) {
+          this._transformState.data = null;
+          this._transformState.afterTransform();
+        }
+      }
+      _transform(data, cb) {
+        cb(null, data);
+      }
+      _flush(cb) {
+        cb(null);
+      }
+      _final(cb) {
+        this._transformState.afterFinal = cb;
+        this._flush(transformAfterFlush.bind(this));
+      }
+    };
+    var PassThrough = class extends Transform {
+      static {
+        __name(this, "PassThrough");
+      }
+    };
+    function transformAfterFlush(err, data) {
+      const cb = this._transformState.afterFinal;
+      if (err) return cb(err);
+      if (data !== null && data !== void 0) this.push(data);
+      this.push(null);
+      cb(null);
+    }
+    __name(transformAfterFlush, "transformAfterFlush");
+    function pipelinePromise(...streams) {
+      return new Promise((resolve, reject) => {
+        return pipeline(...streams, (err) => {
+          if (err) return reject(err);
+          resolve();
+        });
+      });
+    }
+    __name(pipelinePromise, "pipelinePromise");
+    function pipeline(stream, ...streams) {
+      const all = Array.isArray(stream) ? [...stream, ...streams] : [stream, ...streams];
+      const done = all.length && typeof all[all.length - 1] === "function" ? all.pop() : null;
+      if (all.length < 2) throw new Error("Pipeline requires at least 2 streams");
+      let src = all[0];
+      let dest = null;
+      let error = null;
+      for (let i = 1; i < all.length; i++) {
+        dest = all[i];
+        if (isStreamx(src)) {
+          src.pipe(dest, onerror);
+        } else {
+          errorHandle(src, true, i > 1, onerror);
+          src.pipe(dest);
+        }
+        src = dest;
+      }
+      if (done) {
+        let fin = false;
+        const autoDestroy = isStreamx(dest) || !!(dest._writableState && dest._writableState.autoDestroy);
+        dest.on("error", (err) => {
+          if (error === null) error = err;
+        });
+        dest.on("finish", () => {
+          fin = true;
+          if (!autoDestroy) done(error);
+        });
+        if (autoDestroy) {
+          dest.on("close", () => done(error || (fin ? null : PREMATURE_CLOSE)));
+        }
+      }
+      return dest;
+      function errorHandle(s, rd, wr, onerror2) {
+        s.on("error", onerror2);
+        s.on("close", onclose);
+        function onclose() {
+          if (rd && s._readableState && !s._readableState.ended) return onerror2(PREMATURE_CLOSE);
+          if (wr && s._writableState && !s._writableState.ended) return onerror2(PREMATURE_CLOSE);
+        }
+        __name(onclose, "onclose");
+      }
+      __name(errorHandle, "errorHandle");
+      function onerror(err) {
+        if (!err || error) return;
+        error = err;
+        for (const s of all) {
+          s.destroy(err);
+        }
+      }
+      __name(onerror, "onerror");
+    }
+    __name(pipeline, "pipeline");
+    function echo(s) {
+      return s;
+    }
+    __name(echo, "echo");
+    function isStream(stream) {
+      return !!stream._readableState || !!stream._writableState;
+    }
+    __name(isStream, "isStream");
+    function isStreamx(stream) {
+      return typeof stream._duplexState === "number" && isStream(stream);
+    }
+    __name(isStreamx, "isStreamx");
+    function isEnding(stream) {
+      return !!stream._readableState && stream._readableState.ending;
+    }
+    __name(isEnding, "isEnding");
+    function isEnded(stream) {
+      return !!stream._readableState && stream._readableState.ended;
+    }
+    __name(isEnded, "isEnded");
+    function isFinishing(stream) {
+      return !!stream._writableState && stream._writableState.ending;
+    }
+    __name(isFinishing, "isFinishing");
+    function isFinished(stream) {
+      return !!stream._writableState && stream._writableState.ended;
+    }
+    __name(isFinished, "isFinished");
+    function getStreamError(stream, opts = {}) {
+      const err = stream._readableState && stream._readableState.error || stream._writableState && stream._writableState.error;
+      return !opts.all && err === STREAM_DESTROYED ? null : err;
+    }
+    __name(getStreamError, "getStreamError");
+    function isReadStreamx(stream) {
+      return isStreamx(stream) && stream.readable;
+    }
+    __name(isReadStreamx, "isReadStreamx");
+    function isDisturbed(stream) {
+      return (stream._duplexState & OPENING) !== OPENING || (stream._duplexState & DESTROYING) === DESTROYING || (stream._duplexState & ACTIVE_OR_TICKING) !== 0;
+    }
+    __name(isDisturbed, "isDisturbed");
+    function isTypedArray(data) {
+      return typeof data === "object" && data !== null && typeof data.byteLength === "number";
+    }
+    __name(isTypedArray, "isTypedArray");
+    function defaultByteLength(data) {
+      return isTypedArray(data) ? data.byteLength : 1024;
+    }
+    __name(defaultByteLength, "defaultByteLength");
+    function noop() {
+    }
+    __name(noop, "noop");
+    function abort() {
+      this.destroy(new Error("Stream aborted."));
+    }
+    __name(abort, "abort");
+    function isWritev(s) {
+      return s._writev !== Writable.prototype._writev && s._writev !== Duplex.prototype._writev;
+    }
+    __name(isWritev, "isWritev");
+    module2.exports = {
+      pipeline,
+      pipelinePromise,
+      isStream,
+      isStreamx,
+      isEnding,
+      isEnded,
+      isFinishing,
+      isFinished,
+      isDisturbed,
+      getStreamError,
+      Stream,
+      Writable,
+      Readable,
+      Duplex,
+      Transform,
+      // Export PassThrough for compatibility with Node.js core's stream module
+      PassThrough
+    };
+  }
+});
+
+// node_modules/.pnpm/tar-stream@3.1.8/node_modules/tar-stream/headers.js
+var require_headers = __commonJS({
+  "node_modules/.pnpm/tar-stream@3.1.8/node_modules/tar-stream/headers.js"(exports2) {
+    var b4a = require_b4a();
+    var ZEROS = "0000000000000000000";
+    var SEVENS = "7777777777777777777";
+    var ZERO_OFFSET = "0".charCodeAt(0);
+    var USTAR_MAGIC = b4a.from([117, 115, 116, 97, 114, 0]);
+    var USTAR_VER = b4a.from([ZERO_OFFSET, ZERO_OFFSET]);
+    var GNU_MAGIC = b4a.from([117, 115, 116, 97, 114, 32]);
+    var GNU_VER = b4a.from([32, 0]);
+    var MASK = 4095;
+    var MAGIC_OFFSET = 257;
+    var VERSION_OFFSET = 263;
+    exports2.decodeLongPath = /* @__PURE__ */ __name(function decodeLongPath(buf, encoding) {
+      return decodeStr(buf, 0, buf.length, encoding);
+    }, "decodeLongPath");
+    exports2.encodePax = /* @__PURE__ */ __name(function encodePax(opts) {
+      let result = "";
+      if (opts.name) result += addLength(" path=" + opts.name + "\n");
+      if (opts.linkname) result += addLength(" linkpath=" + opts.linkname + "\n");
+      const pax = opts.pax;
+      if (pax) {
+        for (const key in pax) {
+          result += addLength(" " + key + "=" + pax[key] + "\n");
+        }
+      }
+      return b4a.from(result);
+    }, "encodePax");
+    exports2.decodePax = /* @__PURE__ */ __name(function decodePax(buf) {
+      const result = {};
+      while (buf.length) {
+        let i = 0;
+        while (i < buf.length && buf[i] !== 32) i++;
+        const len = parseInt(b4a.toString(buf.subarray(0, i)), 10);
+        if (!len) return result;
+        const b = b4a.toString(buf.subarray(i + 1, len - 1));
+        const keyIndex = b.indexOf("=");
+        if (keyIndex === -1) return result;
+        result[b.slice(0, keyIndex)] = b.slice(keyIndex + 1);
+        buf = buf.subarray(len);
+      }
+      return result;
+    }, "decodePax");
+    exports2.encode = /* @__PURE__ */ __name(function encode(opts) {
+      const buf = b4a.alloc(512);
+      let name = opts.name;
+      let prefix = "";
+      if (opts.typeflag === 5 && name[name.length - 1] !== "/") name += "/";
+      if (b4a.byteLength(name) !== name.length) return null;
+      while (b4a.byteLength(name) > 100) {
+        const i = name.indexOf("/");
+        if (i === -1) return null;
+        prefix += prefix ? "/" + name.slice(0, i) : name.slice(0, i);
+        name = name.slice(i + 1);
+      }
+      if (b4a.byteLength(name) > 100 || b4a.byteLength(prefix) > 155) return null;
+      if (opts.linkname && b4a.byteLength(opts.linkname) > 100) return null;
+      b4a.write(buf, name);
+      b4a.write(buf, encodeOct(opts.mode & MASK, 6), 100);
+      b4a.write(buf, encodeOct(opts.uid, 6), 108);
+      b4a.write(buf, encodeOct(opts.gid, 6), 116);
+      encodeSize(opts.size, buf, 124);
+      b4a.write(buf, encodeOct(opts.mtime.getTime() / 1e3 | 0, 11), 136);
+      buf[156] = ZERO_OFFSET + toTypeflag(opts.type);
+      if (opts.linkname) b4a.write(buf, opts.linkname, 157);
+      b4a.copy(USTAR_MAGIC, buf, MAGIC_OFFSET);
+      b4a.copy(USTAR_VER, buf, VERSION_OFFSET);
+      if (opts.uname) b4a.write(buf, opts.uname, 265);
+      if (opts.gname) b4a.write(buf, opts.gname, 297);
+      b4a.write(buf, encodeOct(opts.devmajor || 0, 6), 329);
+      b4a.write(buf, encodeOct(opts.devminor || 0, 6), 337);
+      if (prefix) b4a.write(buf, prefix, 345);
+      b4a.write(buf, encodeOct(cksum(buf), 6), 148);
+      return buf;
+    }, "encode");
+    exports2.decode = /* @__PURE__ */ __name(function decode(buf, filenameEncoding, allowUnknownFormat) {
+      let typeflag = buf[156] === 0 ? 0 : buf[156] - ZERO_OFFSET;
+      let name = decodeStr(buf, 0, 100, filenameEncoding);
+      const mode = decodeOct(buf, 100, 8);
+      const uid = decodeOct(buf, 108, 8);
+      const gid = decodeOct(buf, 116, 8);
+      const size = decodeOct(buf, 124, 12);
+      const mtime = decodeOct(buf, 136, 12);
+      const type = toType(typeflag);
+      const linkname = buf[157] === 0 ? null : decodeStr(buf, 157, 100, filenameEncoding);
+      const uname = decodeStr(buf, 265, 32);
+      const gname = decodeStr(buf, 297, 32);
+      const devmajor = decodeOct(buf, 329, 8);
+      const devminor = decodeOct(buf, 337, 8);
+      const c = cksum(buf);
+      if (c === 8 * 32) return null;
+      if (c !== decodeOct(buf, 148, 8)) throw new Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");
+      if (isUSTAR(buf)) {
+        if (buf[345]) name = decodeStr(buf, 345, 155, filenameEncoding) + "/" + name;
+      } else if (isGNU(buf)) {
+      } else {
+        if (!allowUnknownFormat) {
+          throw new Error("Invalid tar header: unknown format.");
+        }
+      }
+      if (typeflag === 0 && name && name[name.length - 1] === "/") typeflag = 5;
+      return {
+        name,
+        mode,
+        uid,
+        gid,
+        size,
+        mtime: new Date(1e3 * mtime),
+        type,
+        linkname,
+        uname,
+        gname,
+        devmajor,
+        devminor,
+        pax: null
+      };
+    }, "decode");
+    function isUSTAR(buf) {
+      return b4a.equals(USTAR_MAGIC, buf.subarray(MAGIC_OFFSET, MAGIC_OFFSET + 6));
+    }
+    __name(isUSTAR, "isUSTAR");
+    function isGNU(buf) {
+      return b4a.equals(GNU_MAGIC, buf.subarray(MAGIC_OFFSET, MAGIC_OFFSET + 6)) && b4a.equals(GNU_VER, buf.subarray(VERSION_OFFSET, VERSION_OFFSET + 2));
+    }
+    __name(isGNU, "isGNU");
+    function clamp(index, len, defaultValue) {
+      if (typeof index !== "number") return defaultValue;
+      index = ~~index;
+      if (index >= len) return len;
+      if (index >= 0) return index;
+      index += len;
+      if (index >= 0) return index;
+      return 0;
+    }
+    __name(clamp, "clamp");
+    function toType(flag) {
+      switch (flag) {
+        case 0:
+          return "file";
+        case 1:
+          return "link";
+        case 2:
+          return "symlink";
+        case 3:
+          return "character-device";
+        case 4:
+          return "block-device";
+        case 5:
+          return "directory";
+        case 6:
+          return "fifo";
+        case 7:
+          return "contiguous-file";
+        case 72:
+          return "pax-header";
+        case 55:
+          return "pax-global-header";
+        case 27:
+          return "gnu-long-link-path";
+        case 28:
+        case 30:
+          return "gnu-long-path";
+      }
+      return null;
+    }
+    __name(toType, "toType");
+    function toTypeflag(flag) {
+      switch (flag) {
+        case "file":
+          return 0;
+        case "link":
+          return 1;
+        case "symlink":
+          return 2;
+        case "character-device":
+          return 3;
+        case "block-device":
+          return 4;
+        case "directory":
+          return 5;
+        case "fifo":
+          return 6;
+        case "contiguous-file":
+          return 7;
+        case "pax-header":
+          return 72;
+      }
+      return 0;
+    }
+    __name(toTypeflag, "toTypeflag");
+    function indexOf(block, num, offset, end) {
+      for (; offset < end; offset++) {
+        if (block[offset] === num) return offset;
+      }
+      return end;
+    }
+    __name(indexOf, "indexOf");
+    function cksum(block) {
+      let sum = 8 * 32;
+      for (let i = 0; i < 148; i++) sum += block[i];
+      for (let j = 156; j < 512; j++) sum += block[j];
+      return sum;
+    }
+    __name(cksum, "cksum");
+    function encodeOct(val, n) {
+      val = val.toString(8);
+      if (val.length > n) return SEVENS.slice(0, n) + " ";
+      return ZEROS.slice(0, n - val.length) + val + " ";
+    }
+    __name(encodeOct, "encodeOct");
+    function encodeSizeBin(num, buf, off) {
+      buf[off] = 128;
+      for (let i = 11; i > 0; i--) {
+        buf[off + i] = num & 255;
+        num = Math.floor(num / 256);
+      }
+    }
+    __name(encodeSizeBin, "encodeSizeBin");
+    function encodeSize(num, buf, off) {
+      if (num.toString(8).length > 11) {
+        encodeSizeBin(num, buf, off);
+      } else {
+        b4a.write(buf, encodeOct(num, 11), off);
+      }
+    }
+    __name(encodeSize, "encodeSize");
+    function parse256(buf) {
+      let positive;
+      if (buf[0] === 128) positive = true;
+      else if (buf[0] === 255) positive = false;
+      else return null;
+      const tuple = [];
+      let i;
+      for (i = buf.length - 1; i > 0; i--) {
+        const byte = buf[i];
+        if (positive) tuple.push(byte);
+        else tuple.push(255 - byte);
+      }
+      let sum = 0;
+      const l = tuple.length;
+      for (i = 0; i < l; i++) {
+        sum += tuple[i] * Math.pow(256, i);
+      }
+      return positive ? sum : -1 * sum;
+    }
+    __name(parse256, "parse256");
+    function decodeOct(val, offset, length) {
+      val = val.subarray(offset, offset + length);
+      offset = 0;
+      if (val[offset] & 128) {
+        return parse256(val);
+      } else {
+        while (offset < val.length && val[offset] === 32) offset++;
+        const end = clamp(indexOf(val, 32, offset, val.length), val.length, val.length);
+        while (offset < end && val[offset] === 0) offset++;
+        if (end === offset) return 0;
+        return parseInt(b4a.toString(val.subarray(offset, end)), 8);
+      }
+    }
+    __name(decodeOct, "decodeOct");
+    function decodeStr(val, offset, length, encoding) {
+      return b4a.toString(val.subarray(offset, indexOf(val, 0, offset, offset + length)), encoding);
+    }
+    __name(decodeStr, "decodeStr");
+    function addLength(str) {
+      const len = b4a.byteLength(str);
+      let digits = Math.floor(Math.log(len) / Math.log(10)) + 1;
+      if (len + digits >= Math.pow(10, digits)) digits++;
+      return len + digits + str;
+    }
+    __name(addLength, "addLength");
+  }
+});
+
+// node_modules/.pnpm/tar-stream@3.1.8/node_modules/tar-stream/extract.js
+var require_extract = __commonJS({
+  "node_modules/.pnpm/tar-stream@3.1.8/node_modules/tar-stream/extract.js"(exports2, module2) {
+    var { Writable, Readable, getStreamError } = require_streamx();
+    var FIFO = require_fast_fifo();
+    var b4a = require_b4a();
+    var headers = require_headers();
+    var EMPTY = b4a.alloc(0);
+    var BufferList = class {
+      static {
+        __name(this, "BufferList");
+      }
+      constructor() {
+        this.buffered = 0;
+        this.shifted = 0;
+        this.queue = new FIFO();
+        this._offset = 0;
+      }
+      push(buffer) {
+        this.buffered += buffer.byteLength;
+        this.queue.push(buffer);
+      }
+      shiftFirst(size) {
+        return this._buffered === 0 ? null : this._next(size);
+      }
+      shift(size) {
+        if (size > this.buffered) return null;
+        if (size === 0) return EMPTY;
+        let chunk = this._next(size);
+        if (size === chunk.byteLength) return chunk;
+        const chunks = [chunk];
+        while ((size -= chunk.byteLength) > 0) {
+          chunk = this._next(size);
+          chunks.push(chunk);
+        }
+        return b4a.concat(chunks);
+      }
+      _next(size) {
+        const buf = this.queue.peek();
+        const rem = buf.byteLength - this._offset;
+        if (size >= rem) {
+          const sub = this._offset ? buf.subarray(this._offset, buf.byteLength) : buf;
+          this.queue.shift();
+          this._offset = 0;
+          this.buffered -= rem;
+          this.shifted += rem;
+          return sub;
+        }
+        this.buffered -= size;
+        this.shifted += size;
+        return buf.subarray(this._offset, this._offset += size);
+      }
+    };
+    var Source = class extends Readable {
+      static {
+        __name(this, "Source");
+      }
+      constructor(self, header, offset) {
+        super();
+        this.header = header;
+        this.offset = offset;
+        this._parent = self;
+      }
+      _read(cb) {
+        if (this.header.size === 0) {
+          this.push(null);
+        }
+        if (this._parent._stream === this) {
+          this._parent._update();
+        }
+        cb(null);
+      }
+      _predestroy() {
+        this._parent.destroy(getStreamError(this));
+      }
+      _detach() {
+        if (this._parent._stream === this) {
+          this._parent._stream = null;
+          this._parent._missing = overflow(this.header.size);
+          this._parent._update();
+        }
+      }
+      _destroy(cb) {
+        this._detach();
+        cb(null);
+      }
+    };
+    var Extract = class extends Writable {
+      static {
+        __name(this, "Extract");
+      }
+      constructor(opts) {
+        super(opts);
+        if (!opts) opts = {};
+        this._buffer = new BufferList();
+        this._offset = 0;
+        this._header = null;
+        this._stream = null;
+        this._missing = 0;
+        this._longHeader = false;
+        this._callback = noop;
+        this._locked = false;
+        this._finished = false;
+        this._pax = null;
+        this._paxGlobal = null;
+        this._gnuLongPath = null;
+        this._gnuLongLinkPath = null;
+        this._filenameEncoding = opts.filenameEncoding || "utf-8";
+        this._allowUnknownFormat = !!opts.allowUnknownFormat;
+        this._unlockBound = this._unlock.bind(this);
+      }
+      _unlock(err) {
+        this._locked = false;
+        if (err) {
+          this.destroy(err);
+          this._continueWrite(err);
+          return;
+        }
+        this._update();
+      }
+      _consumeHeader() {
+        if (this._locked) return false;
+        this._offset = this._buffer.shifted;
+        try {
+          this._header = headers.decode(this._buffer.shift(512), this._filenameEncoding, this._allowUnknownFormat);
+        } catch (err) {
+          this._continueWrite(err);
+          return false;
+        }
+        if (!this._header) return true;
+        switch (this._header.type) {
+          case "gnu-long-path":
+          case "gnu-long-link-path":
+          case "pax-global-header":
+          case "pax-header":
+            this._longHeader = true;
+            this._missing = this._header.size;
+            return true;
+        }
+        this._locked = true;
+        this._applyLongHeaders();
+        if (this._header.size === 0 || this._header.type === "directory") {
+          this.emit("entry", this._header, this._createStream(), this._unlockBound);
+          return true;
+        }
+        this._stream = this._createStream();
+        this._missing = this._header.size;
+        this.emit("entry", this._header, this._stream, this._unlockBound);
+        return true;
+      }
+      _applyLongHeaders() {
+        if (this._gnuLongPath) {
+          this._header.name = this._gnuLongPath;
+          this._gnuLongPath = null;
+        }
+        if (this._gnuLongLinkPath) {
+          this._header.linkname = this._gnuLongLinkPath;
+          this._gnuLongLinkPath = null;
+        }
+        if (this._pax) {
+          if (this._pax.path) this._header.name = this._pax.path;
+          if (this._pax.linkpath) this._header.linkname = this._pax.linkpath;
+          if (this._pax.size) this._header.size = parseInt(this._pax.size, 10);
+          this._header.pax = this._pax;
+          this._pax = null;
+        }
+      }
+      _decodeLongHeader(buf) {
+        switch (this._header.type) {
+          case "gnu-long-path":
+            this._gnuLongPath = headers.decodeLongPath(buf, this._filenameEncoding);
+            break;
+          case "gnu-long-link-path":
+            this._gnuLongLinkPath = headers.decodeLongPath(buf, this._filenameEncoding);
+            break;
+          case "pax-global-header":
+            this._paxGlobal = headers.decodePax(buf);
+            break;
+          case "pax-header":
+            this._pax = this._paxGlobal === null ? headers.decodePax(buf) : Object.assign({}, this._paxGlobal, headers.decodePax(buf));
+            break;
+        }
+      }
+      _consumeLongHeader() {
+        this._longHeader = false;
+        this._missing = overflow(this._header.size);
+        const buf = this._buffer.shift(this._header.size);
+        try {
+          this._decodeLongHeader(buf);
+        } catch (err) {
+          this._continueWrite(err);
+          return false;
+        }
+        return true;
+      }
+      _consumeStream() {
+        const buf = this._buffer.shiftFirst(this._missing);
+        if (buf === null) return false;
+        this._missing -= buf.byteLength;
+        const drained = this._stream.push(buf);
+        if (this._missing === 0) {
+          this._stream.push(null);
+          if (drained) this._stream._detach();
+          return drained && this._locked === false;
+        }
+        return drained;
+      }
+      _createStream() {
+        return new Source(this, this._header, this._offset);
+      }
+      _update() {
+        while (this._buffer.buffered > 0 && !this.destroying) {
+          if (this._missing > 0) {
+            if (this._stream !== null) {
+              if (this._consumeStream() === false) return;
+              continue;
+            }
+            if (this._longHeader === true) {
+              if (this._missing > this._buffer.buffered) break;
+              if (this._consumeLongHeader() === false) return false;
+              continue;
+            }
+            const ignore = this._buffer.shiftFirst(this._missing);
+            if (ignore !== null) this._missing -= ignore.byteLength;
+            continue;
+          }
+          if (this._buffer.buffered < 512) break;
+          if (this._stream !== null || this._consumeHeader() === false) return;
+        }
+        this._continueWrite(null);
+      }
+      _continueWrite(err) {
+        const cb = this._callback;
+        this._callback = noop;
+        cb(err);
+      }
+      _write(data, cb) {
+        this._callback = cb;
+        this._buffer.push(data);
+        this._update();
+      }
+      _final(cb) {
+        this._finished = this._missing === 0 && this._buffer.buffered === 0;
+        cb(this._finished ? null : new Error("Unexpected end of data"));
+      }
+      _predestroy() {
+        this._continueWrite(null);
+      }
+      _destroy(cb) {
+        if (this._stream) this._stream.destroy(getStreamError(this));
+        cb(null);
+      }
+      [Symbol.asyncIterator]() {
+        let error = null;
+        let promiseResolve = null;
+        let promiseReject = null;
+        let entryStream = null;
+        let entryCallback = null;
+        const extract = this;
+        this.on("entry", onentry);
+        this.on("error", (err) => {
+          error = err;
+        });
+        this.on("close", onclose);
+        return {
+          [Symbol.asyncIterator]() {
+            return this;
+          },
+          next() {
+            return new Promise(onnext);
+          },
+          return() {
+            return destroy(null);
+          },
+          throw(err) {
+            return destroy(err);
+          }
+        };
+        function consumeCallback(err) {
+          if (!entryCallback) return;
+          const cb = entryCallback;
+          entryCallback = null;
+          cb(err);
+        }
+        __name(consumeCallback, "consumeCallback");
+        function onnext(resolve, reject) {
+          if (error) {
+            return reject(error);
+          }
+          if (entryStream) {
+            resolve({ value: entryStream, done: false });
+            entryStream = null;
+            return;
+          }
+          promiseResolve = resolve;
+          promiseReject = reject;
+          consumeCallback(null);
+          if (extract._finished && promiseResolve) {
+            promiseResolve({ value: void 0, done: true });
+            promiseResolve = promiseReject = null;
+          }
+        }
+        __name(onnext, "onnext");
+        function onentry(header, stream, callback) {
+          entryCallback = callback;
+          stream.on("error", noop);
+          if (promiseResolve) {
+            promiseResolve({ value: stream, done: false });
+            promiseResolve = promiseReject = null;
+          } else {
+            entryStream = stream;
+          }
+        }
+        __name(onentry, "onentry");
+        function onclose() {
+          consumeCallback(error);
+          if (!promiseResolve) return;
+          if (error) promiseReject(error);
+          else promiseResolve({ value: void 0, done: true });
+          promiseResolve = promiseReject = null;
+        }
+        __name(onclose, "onclose");
+        function destroy(err) {
+          extract.destroy(err);
+          consumeCallback(err);
+          return new Promise((resolve, reject) => {
+            if (extract.destroyed) return resolve({ value: void 0, done: true });
+            extract.once("close", function() {
+              if (err) reject(err);
+              else resolve({ value: void 0, done: true });
+            });
+          });
+        }
+        __name(destroy, "destroy");
+      }
+    };
+    module2.exports = /* @__PURE__ */ __name(function extract(opts) {
+      return new Extract(opts);
+    }, "extract");
+    function noop() {
+    }
+    __name(noop, "noop");
+    function overflow(size) {
+      size &= 511;
+      return size && 512 - size;
+    }
+    __name(overflow, "overflow");
+  }
+});
+
+// node_modules/.pnpm/tar-stream@3.1.8/node_modules/tar-stream/constants.js
+var require_constants = __commonJS({
+  "node_modules/.pnpm/tar-stream@3.1.8/node_modules/tar-stream/constants.js"(exports2, module2) {
+    var constants = {
+      // just for envs without fs
+      S_IFMT: 61440,
+      S_IFDIR: 16384,
+      S_IFCHR: 8192,
+      S_IFBLK: 24576,
+      S_IFIFO: 4096,
+      S_IFLNK: 40960
+    };
+    try {
+      module2.exports = require("fs").constants || constants;
+    } catch {
+      module2.exports = constants;
+    }
+  }
+});
+
+// node_modules/.pnpm/tar-stream@3.1.8/node_modules/tar-stream/pack.js
+var require_pack = __commonJS({
+  "node_modules/.pnpm/tar-stream@3.1.8/node_modules/tar-stream/pack.js"(exports2, module2) {
+    var { Readable, Writable, getStreamError } = require_streamx();
+    var b4a = require_b4a();
+    var constants = require_constants();
+    var headers = require_headers();
+    var DMODE = 493;
+    var FMODE = 420;
+    var END_OF_TAR = b4a.alloc(1024);
+    var Sink = class extends Writable {
+      static {
+        __name(this, "Sink");
+      }
+      constructor(pack, header, callback) {
+        super({ mapWritable, eagerOpen: true });
+        this.written = 0;
+        this.header = header;
+        this._callback = callback;
+        this._linkname = null;
+        this._isLinkname = header.type === "symlink" && !header.linkname;
+        this._isVoid = header.type !== "file" && header.type !== "contiguous-file";
+        this._finished = false;
+        this._pack = pack;
+        this._openCallback = null;
+        if (this._pack._stream === null) this._pack._stream = this;
+        else this._pack._pending.push(this);
+      }
+      _open(cb) {
+        this._openCallback = cb;
+        if (this._pack._stream === this) this._continueOpen();
+      }
+      _continuePack(err) {
+        if (this._callback === null) return;
+        const callback = this._callback;
+        this._callback = null;
+        callback(err);
+      }
+      _continueOpen() {
+        if (this._pack._stream === null) this._pack._stream = this;
+        const cb = this._openCallback;
+        this._openCallback = null;
+        if (cb === null) return;
+        if (this._pack.destroying) return cb(new Error("pack stream destroyed"));
+        if (this._pack._finalized) return cb(new Error("pack stream is already finalized"));
+        this._pack._stream = this;
+        if (!this._isLinkname) {
+          this._pack._encode(this.header);
+        }
+        if (this._isVoid) {
+          this._finish();
+          this._continuePack(null);
+        }
+        cb(null);
+      }
+      _write(data, cb) {
+        if (this._isLinkname) {
+          this._linkname = this._linkname ? b4a.concat([this._linkname, data]) : data;
+          return cb(null);
+        }
+        if (this._isVoid) {
+          if (data.byteLength > 0) {
+            return cb(new Error("No body allowed for this entry"));
+          }
+          return cb();
+        }
+        this.written += data.byteLength;
+        if (this._pack.push(data)) return cb();
+        this._pack._drain = cb;
+      }
+      _finish() {
+        if (this._finished) return;
+        this._finished = true;
+        if (this._isLinkname) {
+          this.header.linkname = this._linkname ? b4a.toString(this._linkname, "utf-8") : "";
+          this._pack._encode(this.header);
+        }
+        overflow(this._pack, this.header.size);
+        this._pack._done(this);
+      }
+      _final(cb) {
+        if (this.written !== this.header.size) {
+          return cb(new Error("Size mismatch"));
+        }
+        this._finish();
+        cb(null);
+      }
+      _getError() {
+        return getStreamError(this) || new Error("tar entry destroyed");
+      }
+      _predestroy() {
+        this._pack.destroy(this._getError());
+      }
+      _destroy(cb) {
+        this._pack._done(this);
+        this._continuePack(this._finished ? null : this._getError());
+        cb();
+      }
+    };
+    var Pack = class extends Readable {
+      static {
+        __name(this, "Pack");
+      }
+      constructor(opts) {
+        super(opts);
+        this._drain = noop;
+        this._finalized = false;
+        this._finalizing = false;
+        this._pending = [];
+        this._stream = null;
+      }
+      entry(header, buffer, callback) {
+        if (this._finalized || this.destroying) throw new Error("already finalized or destroyed");
+        if (typeof buffer === "function") {
+          callback = buffer;
+          buffer = null;
+        }
+        if (!callback) callback = noop;
+        if (!header.size || header.type === "symlink") header.size = 0;
+        if (!header.type) header.type = modeToType(header.mode);
+        if (!header.mode) header.mode = header.type === "directory" ? DMODE : FMODE;
+        if (!header.uid) header.uid = 0;
+        if (!header.gid) header.gid = 0;
+        if (!header.mtime) header.mtime = /* @__PURE__ */ new Date();
+        if (typeof buffer === "string") buffer = b4a.from(buffer);
+        const sink = new Sink(this, header, callback);
+        if (b4a.isBuffer(buffer)) {
+          header.size = buffer.byteLength;
+          sink.write(buffer);
+          sink.end();
+          return sink;
+        }
+        if (sink._isVoid) {
+          return sink;
+        }
+        return sink;
+      }
+      finalize() {
+        if (this._stream || this._pending.length > 0) {
+          this._finalizing = true;
+          return;
+        }
+        if (this._finalized) return;
+        this._finalized = true;
+        this.push(END_OF_TAR);
+        this.push(null);
+      }
+      _done(stream) {
+        if (stream !== this._stream) return;
+        this._stream = null;
+        if (this._finalizing) this.finalize();
+        if (this._pending.length) this._pending.shift()._continueOpen();
+      }
+      _encode(header) {
+        if (!header.pax) {
+          const buf = headers.encode(header);
+          if (buf) {
+            this.push(buf);
+            return;
+          }
+        }
+        this._encodePax(header);
+      }
+      _encodePax(header) {
+        const paxHeader = headers.encodePax({
+          name: header.name,
+          linkname: header.linkname,
+          pax: header.pax
+        });
+        const newHeader = {
+          name: "PaxHeader",
+          mode: header.mode,
+          uid: header.uid,
+          gid: header.gid,
+          size: paxHeader.byteLength,
+          mtime: header.mtime,
+          type: "pax-header",
+          linkname: header.linkname && "PaxHeader",
+          uname: header.uname,
+          gname: header.gname,
+          devmajor: header.devmajor,
+          devminor: header.devminor
+        };
+        this.push(headers.encode(newHeader));
+        this.push(paxHeader);
+        overflow(this, paxHeader.byteLength);
+        newHeader.size = header.size;
+        newHeader.type = header.type;
+        this.push(headers.encode(newHeader));
+      }
+      _doDrain() {
+        const drain = this._drain;
+        this._drain = noop;
+        drain();
+      }
+      _predestroy() {
+        const err = getStreamError(this);
+        if (this._stream) this._stream.destroy(err);
+        while (this._pending.length) {
+          const stream = this._pending.shift();
+          stream.destroy(err);
+          stream._continueOpen();
+        }
+        this._doDrain();
+      }
+      _read(cb) {
+        this._doDrain();
+        cb();
+      }
+    };
+    module2.exports = /* @__PURE__ */ __name(function pack(opts) {
+      return new Pack(opts);
+    }, "pack");
+    function modeToType(mode) {
+      switch (mode & constants.S_IFMT) {
+        case constants.S_IFBLK:
+          return "block-device";
+        case constants.S_IFCHR:
+          return "character-device";
+        case constants.S_IFDIR:
+          return "directory";
+        case constants.S_IFIFO:
+          return "fifo";
+        case constants.S_IFLNK:
+          return "symlink";
+      }
+      return "file";
+    }
+    __name(modeToType, "modeToType");
+    function noop() {
+    }
+    __name(noop, "noop");
+    function overflow(self, size) {
+      size &= 511;
+      if (size) self.push(END_OF_TAR.subarray(0, 512 - size));
+    }
+    __name(overflow, "overflow");
+    function mapWritable(buf) {
+      return b4a.isBuffer(buf) ? buf : b4a.from(buf);
+    }
+    __name(mapWritable, "mapWritable");
+  }
+});
+
+// node_modules/.pnpm/tar-stream@3.1.8/node_modules/tar-stream/index.js
+var require_tar_stream = __commonJS({
+  "node_modules/.pnpm/tar-stream@3.1.8/node_modules/tar-stream/index.js"(exports2) {
+    exports2.extract = require_extract();
+    exports2.pack = require_pack();
+  }
+});
+
+// node_modules/.pnpm/wrappy@1.0.2/node_modules/wrappy/wrappy.js
+var require_wrappy = __commonJS({
+  "node_modules/.pnpm/wrappy@1.0.2/node_modules/wrappy/wrappy.js"(exports2, module2) {
+    module2.exports = wrappy;
+    function wrappy(fn, cb) {
+      if (fn && cb) return wrappy(fn)(cb);
+      if (typeof fn !== "function")
+        throw new TypeError("need wrapper function");
+      Object.keys(fn).forEach(function(k) {
+        wrapper[k] = fn[k];
+      });
+      return wrapper;
+      function wrapper() {
+        var args = new Array(arguments.length);
+        for (var i = 0; i < args.length; i++) {
+          args[i] = arguments[i];
+        }
+        var ret = fn.apply(this, args);
+        var cb2 = args[args.length - 1];
+        if (typeof ret === "function" && ret !== cb2) {
+          Object.keys(cb2).forEach(function(k) {
+            ret[k] = cb2[k];
+          });
+        }
+        return ret;
+      }
+      __name(wrapper, "wrapper");
+    }
+    __name(wrappy, "wrappy");
+  }
+});
+
+// node_modules/.pnpm/once@1.4.0/node_modules/once/once.js
+var require_once = __commonJS({
+  "node_modules/.pnpm/once@1.4.0/node_modules/once/once.js"(exports2, module2) {
+    var wrappy = require_wrappy();
+    module2.exports = wrappy(once);
+    module2.exports.strict = wrappy(onceStrict);
+    once.proto = once(function() {
+      Object.defineProperty(Function.prototype, "once", {
+        value: /* @__PURE__ */ __name(function() {
+          return once(this);
+        }, "value"),
+        configurable: true
+      });
+      Object.defineProperty(Function.prototype, "onceStrict", {
+        value: /* @__PURE__ */ __name(function() {
+          return onceStrict(this);
+        }, "value"),
+        configurable: true
+      });
+    });
+    function once(fn) {
+      var f = /* @__PURE__ */ __name(function() {
+        if (f.called) return f.value;
+        f.called = true;
+        return f.value = fn.apply(this, arguments);
+      }, "f");
+      f.called = false;
+      return f;
+    }
+    __name(once, "once");
+    function onceStrict(fn) {
+      var f = /* @__PURE__ */ __name(function() {
+        if (f.called)
+          throw new Error(f.onceError);
+        f.called = true;
+        return f.value = fn.apply(this, arguments);
+      }, "f");
+      var name = fn.name || "Function wrapped with `once`";
+      f.onceError = name + " shouldn't be called more than once";
+      f.called = false;
+      return f;
+    }
+    __name(onceStrict, "onceStrict");
+  }
+});
+
+// node_modules/.pnpm/end-of-stream@1.4.5/node_modules/end-of-stream/index.js
+var require_end_of_stream = __commonJS({
+  "node_modules/.pnpm/end-of-stream@1.4.5/node_modules/end-of-stream/index.js"(exports2, module2) {
+    var once = require_once();
+    var noop = /* @__PURE__ */ __name(function() {
+    }, "noop");
+    var qnt = global.Bare ? queueMicrotask : process.nextTick.bind(process);
+    var isRequest = /* @__PURE__ */ __name(function(stream) {
+      return stream.setHeader && typeof stream.abort === "function";
+    }, "isRequest");
+    var isChildProcess = /* @__PURE__ */ __name(function(stream) {
+      return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3;
+    }, "isChildProcess");
+    var eos = /* @__PURE__ */ __name(function(stream, opts, callback) {
+      if (typeof opts === "function") return eos(stream, null, opts);
+      if (!opts) opts = {};
+      callback = once(callback || noop);
+      var ws = stream._writableState;
+      var rs = stream._readableState;
+      var readable = opts.readable || opts.readable !== false && stream.readable;
+      var writable = opts.writable || opts.writable !== false && stream.writable;
+      var cancelled = false;
+      var onlegacyfinish = /* @__PURE__ */ __name(function() {
+        if (!stream.writable) onfinish();
+      }, "onlegacyfinish");
+      var onfinish = /* @__PURE__ */ __name(function() {
+        writable = false;
+        if (!readable) callback.call(stream);
+      }, "onfinish");
+      var onend = /* @__PURE__ */ __name(function() {
+        readable = false;
+        if (!writable) callback.call(stream);
+      }, "onend");
+      var onexit = /* @__PURE__ */ __name(function(exitCode) {
+        callback.call(stream, exitCode ? new Error("exited with error code: " + exitCode) : null);
+      }, "onexit");
+      var onerror = /* @__PURE__ */ __name(function(err) {
+        callback.call(stream, err);
+      }, "onerror");
+      var onclose = /* @__PURE__ */ __name(function() {
+        qnt(onclosenexttick);
+      }, "onclose");
+      var onclosenexttick = /* @__PURE__ */ __name(function() {
+        if (cancelled) return;
+        if (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error("premature close"));
+        if (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error("premature close"));
+      }, "onclosenexttick");
+      var onrequest = /* @__PURE__ */ __name(function() {
+        stream.req.on("finish", onfinish);
+      }, "onrequest");
+      if (isRequest(stream)) {
+        stream.on("complete", onfinish);
+        stream.on("abort", onclose);
+        if (stream.req) onrequest();
+        else stream.on("request", onrequest);
+      } else if (writable && !ws) {
+        stream.on("end", onlegacyfinish);
+        stream.on("close", onlegacyfinish);
+      }
+      if (isChildProcess(stream)) stream.on("exit", onexit);
+      stream.on("end", onend);
+      stream.on("finish", onfinish);
+      if (opts.error !== false) stream.on("error", onerror);
+      stream.on("close", onclose);
+      return function() {
+        cancelled = true;
+        stream.removeListener("complete", onfinish);
+        stream.removeListener("abort", onclose);
+        stream.removeListener("request", onrequest);
+        if (stream.req) stream.req.removeListener("finish", onfinish);
+        stream.removeListener("end", onlegacyfinish);
+        stream.removeListener("close", onlegacyfinish);
+        stream.removeListener("finish", onfinish);
+        stream.removeListener("exit", onexit);
+        stream.removeListener("end", onend);
+        stream.removeListener("error", onerror);
+        stream.removeListener("close", onclose);
+      };
+    }, "eos");
+    module2.exports = eos;
+  }
+});
+
+// node_modules/.pnpm/pump@3.0.4/node_modules/pump/index.js
+var require_pump = __commonJS({
+  "node_modules/.pnpm/pump@3.0.4/node_modules/pump/index.js"(exports2, module2) {
+    var once = require_once();
+    var eos = require_end_of_stream();
+    var fs;
+    try {
+      fs = require("fs");
+    } catch (e) {
+    }
+    var noop = /* @__PURE__ */ __name(function() {
+    }, "noop");
+    var ancient = typeof process === "undefined" ? false : /^v?\.0/.test(process.version);
+    var isFn = /* @__PURE__ */ __name(function(fn) {
+      return typeof fn === "function";
+    }, "isFn");
+    var isFS = /* @__PURE__ */ __name(function(stream) {
+      if (!ancient) return false;
+      if (!fs) return false;
+      return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close);
+    }, "isFS");
+    var isRequest = /* @__PURE__ */ __name(function(stream) {
+      return stream.setHeader && isFn(stream.abort);
+    }, "isRequest");
+    var destroyer = /* @__PURE__ */ __name(function(stream, reading, writing, callback) {
+      callback = once(callback);
+      var closed = false;
+      stream.on("close", function() {
+        closed = true;
+      });
+      eos(stream, { readable: reading, writable: writing }, function(err) {
+        if (err) return callback(err);
+        closed = true;
+        callback();
+      });
+      var destroyed = false;
+      return function(err) {
+        if (closed) return;
+        if (destroyed) return;
+        destroyed = true;
+        if (isFS(stream)) return stream.close(noop);
+        if (isRequest(stream)) return stream.abort();
+        if (isFn(stream.destroy)) return stream.destroy();
+        callback(err || new Error("stream was destroyed"));
+      };
+    }, "destroyer");
+    var call = /* @__PURE__ */ __name(function(fn) {
+      fn();
+    }, "call");
+    var pipe = /* @__PURE__ */ __name(function(from, to) {
+      return from.pipe(to);
+    }, "pipe");
+    var pump = /* @__PURE__ */ __name(function() {
+      var streams = Array.prototype.slice.call(arguments);
+      var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop;
+      if (Array.isArray(streams[0])) streams = streams[0];
+      if (streams.length < 2) throw new Error("pump requires two streams per minimum");
+      var error;
+      var destroys = streams.map(function(stream, i) {
+        var reading = i < streams.length - 1;
+        var writing = i > 0;
+        return destroyer(stream, reading, writing, function(err) {
+          if (!error) error = err;
+          if (err) destroys.forEach(call);
+          if (reading) return;
+          destroys.forEach(call);
+          callback(error);
+        });
+      });
+      return streams.reduce(pipe);
+    }, "pump");
+    module2.exports = pump;
+  }
+});
+
+// node_modules/.pnpm/tar-fs@3.1.2/node_modules/tar-fs/index.js
+var require_tar_fs = __commonJS({
+  "node_modules/.pnpm/tar-fs@3.1.2/node_modules/tar-fs/index.js"(exports2) {
+    var tar = require_tar_stream();
+    var pump = require_pump();
+    var fs = require("fs");
+    var path = require("path");
+    var win32 = (global.Bare ? global.Bare.platform : process.platform) === "win32";
+    exports2.pack = /* @__PURE__ */ __name(function pack(cwd, opts) {
+      if (!cwd) cwd = ".";
+      if (!opts) opts = {};
+      const xfs = opts.fs || fs;
+      const ignore = opts.ignore || opts.filter || noop;
+      const mapStream = opts.mapStream || echo;
+      const statNext = statAll(xfs, opts.dereference ? xfs.stat : xfs.lstat, cwd, ignore, opts.entries, opts.sort);
+      const strict = opts.strict !== false;
+      const umask = typeof opts.umask === "number" ? ~opts.umask : ~processUmask();
+      const pack2 = opts.pack || tar.pack();
+      const finish = opts.finish || noop;
+      let map = opts.map || noop;
+      let dmode = typeof opts.dmode === "number" ? opts.dmode : 0;
+      let fmode = typeof opts.fmode === "number" ? opts.fmode : 0;
+      if (opts.strip) map = strip(map, opts.strip);
+      if (opts.readable) {
+        dmode |= parseInt(555, 8);
+        fmode |= parseInt(444, 8);
+      }
+      if (opts.writable) {
+        dmode |= parseInt(333, 8);
+        fmode |= parseInt(222, 8);
+      }
+      onnextentry();
+      function onsymlink(filename, header) {
+        xfs.readlink(path.join(cwd, filename), function(err, linkname) {
+          if (err) return pack2.destroy(err);
+          header.linkname = normalize(linkname);
+          pack2.entry(header, onnextentry);
+        });
+      }
+      __name(onsymlink, "onsymlink");
+      function onstat(err, filename, stat) {
+        if (pack2.destroyed) return;
+        if (err) return pack2.destroy(err);
+        if (!filename) {
+          if (opts.finalize !== false) pack2.finalize();
+          return finish(pack2);
+        }
+        if (stat.isSocket()) return onnextentry();
+        let header = {
+          name: normalize(filename),
+          mode: (stat.mode | (stat.isDirectory() ? dmode : fmode)) & umask,
+          mtime: stat.mtime,
+          size: stat.size,
+          type: "file",
+          uid: stat.uid,
+          gid: stat.gid
+        };
+        if (stat.isDirectory()) {
+          header.size = 0;
+          header.type = "directory";
+          header = map(header) || header;
+          return pack2.entry(header, onnextentry);
+        }
+        if (stat.isSymbolicLink()) {
+          header.size = 0;
+          header.type = "symlink";
+          header = map(header) || header;
+          return onsymlink(filename, header);
+        }
+        header = map(header) || header;
+        if (!stat.isFile()) {
+          if (strict) return pack2.destroy(new Error("unsupported type for " + filename));
+          return onnextentry();
+        }
+        const entry = pack2.entry(header, onnextentry);
+        const rs = mapStream(xfs.createReadStream(path.join(cwd, filename), { start: 0, end: header.size > 0 ? header.size - 1 : header.size }), header);
+        rs.on("error", function(err2) {
+          entry.destroy(err2);
+        });
+        pump(rs, entry);
+      }
+      __name(onstat, "onstat");
+      function onnextentry(err) {
+        if (err) return pack2.destroy(err);
+        statNext(onstat);
+      }
+      __name(onnextentry, "onnextentry");
+      return pack2;
+    }, "pack");
+    function head(list) {
+      return list.length ? list[list.length - 1] : null;
+    }
+    __name(head, "head");
+    function processGetuid() {
+      return !global.Bare && process.getuid ? process.getuid() : -1;
+    }
+    __name(processGetuid, "processGetuid");
+    function processUmask() {
+      return !global.Bare && process.umask ? process.umask() : 0;
+    }
+    __name(processUmask, "processUmask");
+    exports2.extract = /* @__PURE__ */ __name(function extract(cwd, opts) {
+      if (!cwd) cwd = ".";
+      if (!opts) opts = {};
+      cwd = path.resolve(cwd);
+      const xfs = opts.fs || fs;
+      const ignore = opts.ignore || opts.filter || noop;
+      const mapStream = opts.mapStream || echo;
+      const own = opts.chown !== false && !win32 && processGetuid() === 0;
+      const extract2 = opts.extract || tar.extract();
+      const stack = [];
+      const now = /* @__PURE__ */ new Date();
+      const umask = typeof opts.umask === "number" ? ~opts.umask : ~processUmask();
+      const strict = opts.strict !== false;
+      const validateSymLinks = opts.validateSymlinks !== false;
+      let map = opts.map || noop;
+      let dmode = typeof opts.dmode === "number" ? opts.dmode : 0;
+      let fmode = typeof opts.fmode === "number" ? opts.fmode : 0;
+      if (opts.strip) map = strip(map, opts.strip);
+      if (opts.readable) {
+        dmode |= parseInt(555, 8);
+        fmode |= parseInt(444, 8);
+      }
+      if (opts.writable) {
+        dmode |= parseInt(333, 8);
+        fmode |= parseInt(222, 8);
+      }
+      extract2.on("entry", onentry);
+      if (opts.finish) extract2.on("finish", opts.finish);
+      return extract2;
+      function onentry(header, stream, next) {
+        header = map(header) || header;
+        header.name = normalize(header.name);
+        const name = path.join(cwd, path.join("/", header.name));
+        if (ignore(name, header)) {
+          stream.resume();
+          return next();
+        }
+        const dir = path.join(name, ".") === path.join(cwd, ".") ? cwd : path.dirname(name);
+        validate(xfs, dir, path.join(cwd, "."), function(err, valid) {
+          if (err) return next(err);
+          if (!valid) return next(new Error(dir + " is not a valid path"));
+          if (header.type === "directory") {
+            stack.push([name, header.mtime]);
+            return mkdirfix(name, {
+              fs: xfs,
+              own,
+              uid: header.uid,
+              gid: header.gid,
+              mode: header.mode
+            }, stat);
+          }
+          mkdirfix(dir, {
+            fs: xfs,
+            own,
+            uid: header.uid,
+            gid: header.gid,
+            // normally, the folders with rights and owner should be part of the TAR file
+            // if this is not the case, create folder for same user as file and with
+            // standard permissions of 0o755 (rwxr-xr-x)
+            mode: 493
+          }, function(err2) {
+            if (err2) return next(err2);
+            switch (header.type) {
+              case "file":
+                return onfile();
+              case "link":
+                return onlink();
+              case "symlink":
+                return onsymlink();
+            }
+            if (strict) return next(new Error("unsupported type for " + name + " (" + header.type + ")"));
+            stream.resume();
+            next();
+          });
+        });
+        function stat(err) {
+          if (err) return next(err);
+          utimes(name, header, function(err2) {
+            if (err2) return next(err2);
+            if (win32) return next();
+            chperm(name, header, next);
+          });
+        }
+        __name(stat, "stat");
+        function onsymlink() {
+          if (win32) return next();
+          xfs.unlink(name, function() {
+            const dst = path.resolve(path.dirname(name), header.linkname);
+            if (!inCwd(dst) && validateSymLinks) return next(new Error(name + " is not a valid symlink"));
+            validateNotSymlink(xfs, dst, path.join(cwd, "."), function(err, valid) {
+              if (err) return next(err);
+              if (!valid && validateSymLinks) return next(new Error(name + " is not a valid symlink"));
+              xfs.symlink(header.linkname, name, stat);
+            });
+          });
+        }
+        __name(onsymlink, "onsymlink");
+        function onlink() {
+          if (win32) return next();
+          xfs.unlink(name, function() {
+            const link = path.join(cwd, path.join("/", header.linkname));
+            xfs.realpath(link, function(err, dst) {
+              if (err || !inCwd(dst)) return next(new Error(name + " is not a valid hardlink"));
+              xfs.link(dst, name, function(err2) {
+                if (err2 && err2.code === "EPERM" && opts.hardlinkAsFilesFallback) {
+                  stream = xfs.createReadStream(dst);
+                  return onfile();
+                }
+                stat(err2);
+              });
+            });
+          });
+        }
+        __name(onlink, "onlink");
+        function inCwd(dst) {
+          return dst === cwd || dst.startsWith(cwd + path.sep);
+        }
+        __name(inCwd, "inCwd");
+        function onfile() {
+          const ws = xfs.createWriteStream(name);
+          const rs = mapStream(stream, header);
+          ws.on("error", function(err) {
+            rs.destroy(err);
+          });
+          pump(rs, ws, function(err) {
+            if (err) return next(err);
+            ws.on("close", stat);
+          });
+        }
+        __name(onfile, "onfile");
+      }
+      __name(onentry, "onentry");
+      function utimesParent(name, cb) {
+        let top;
+        while ((top = head(stack)) && name.slice(0, top[0].length) !== top[0]) stack.pop();
+        if (!top) return cb();
+        xfs.utimes(top[0], now, top[1], cb);
+      }
+      __name(utimesParent, "utimesParent");
+      function utimes(name, header, cb) {
+        if (opts.utimes === false) return cb();
+        if (header.type === "directory") return xfs.utimes(name, now, header.mtime, cb);
+        if (header.type === "symlink") return utimesParent(name, cb);
+        xfs.utimes(name, now, header.mtime, function(err) {
+          if (err) return cb(err);
+          utimesParent(name, cb);
+        });
+      }
+      __name(utimes, "utimes");
+      function chperm(name, header, cb) {
+        const link = header.type === "symlink";
+        const chmod = link ? xfs.lchmod : xfs.chmod;
+        const chown = link ? xfs.lchown : xfs.chown;
+        if (!chmod) return cb();
+        const mode = (header.mode | (header.type === "directory" ? dmode : fmode)) & umask;
+        if (chown && own) chown.call(xfs, name, header.uid, header.gid, onchown);
+        else onchown(null);
+        function onchown(err) {
+          if (err) return cb(err);
+          if (!chmod) return cb();
+          chmod.call(xfs, name, mode, cb);
+        }
+        __name(onchown, "onchown");
+      }
+      __name(chperm, "chperm");
+      function mkdirfix(name, opts2, cb) {
+        xfs.stat(name, function(err) {
+          if (!err) return cb(null);
+          if (err.code !== "ENOENT") return cb(err);
+          xfs.mkdir(name, { mode: opts2.mode, recursive: true }, function(err2, made) {
+            if (err2) return cb(err2);
+            chperm(name, opts2, cb);
+          });
+        });
+      }
+      __name(mkdirfix, "mkdirfix");
+    }, "extract");
+    function validateNotSymlink(fs2, name, root, cb) {
+      if (name === root) return cb(null, true);
+      if (!name.startsWith(root + path.sep)) return cb(null, false);
+      fs2.lstat(name, function(err, st) {
+        if (err && err.code !== "ENOENT" && err.code !== "EPERM") return cb(err);
+        if (err || !st.isSymbolicLink()) return validateNotSymlink(fs2, path.join(name, ".."), root, cb);
+        cb(null, false);
+      });
+    }
+    __name(validateNotSymlink, "validateNotSymlink");
+    function validate(fs2, name, root, cb) {
+      if (name === root) return cb(null, true);
+      fs2.lstat(name, function(err, st) {
+        if (err && err.code !== "ENOENT" && err.code !== "EPERM") return cb(err);
+        if (err || st.isDirectory()) return validate(fs2, path.join(name, ".."), root, cb);
+        cb(null, false);
+      });
+    }
+    __name(validate, "validate");
+    function noop() {
+    }
+    __name(noop, "noop");
+    function echo(name) {
+      return name;
+    }
+    __name(echo, "echo");
+    function normalize(name) {
+      return win32 ? name.replace(/\\/g, "/").replace(/[:?<>|]/g, "_") : name;
+    }
+    __name(normalize, "normalize");
+    function statAll(fs2, stat, cwd, ignore, entries, sort) {
+      if (!entries) entries = ["."];
+      const queue = entries.slice(0);
+      return /* @__PURE__ */ __name(function loop(callback) {
+        if (!queue.length) return callback(null);
+        const next = queue.shift();
+        const nextAbs = path.join(cwd, next);
+        stat.call(fs2, nextAbs, function(err, stat2) {
+          if (err) return callback(entries.indexOf(next) === -1 && err.code === "ENOENT" ? null : err);
+          if (!stat2.isDirectory()) return callback(null, next, stat2);
+          fs2.readdir(nextAbs, function(err2, files) {
+            if (err2) return callback(err2);
+            if (sort) files.sort();
+            for (let i = 0; i < files.length; i++) {
+              if (!ignore(path.join(cwd, next, files[i]))) queue.push(path.join(next, files[i]));
+            }
+            callback(null, next, stat2);
+          });
+        });
+      }, "loop");
+    }
+    __name(statAll, "statAll");
+    function strip(map, level) {
+      return function(header) {
+        header.name = header.name.split("/").slice(level).join("/");
+        const linkname = header.linkname;
+        if (linkname && (header.type === "link" || path.isAbsolute(linkname))) {
+          header.linkname = linkname.split("/").slice(level).join("/");
+        }
+        return map(header);
+      };
+    }
+    __name(strip, "strip");
+  }
+});
+
+// src/external/tar-fs.js
+module.exports = require_tar_fs();
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/validate-npm-package-name.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/validate-npm-package-name.js
new file mode 100644
index 00000000..820e97d7
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/validate-npm-package-name.js
@@ -0,0 +1,5 @@
+'use strict'
+
+// Re-export from npm-pack bundle for better deduplication.
+const { validateNpmPackageName } = require('./npm-pack')
+module.exports = validateNpmPackageName
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/which.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/which.js
new file mode 100644
index 00000000..26fdba83
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/which.js
@@ -0,0 +1,263 @@
+"use strict";
+/**
+ * Bundled from which
+ * This is a zero-dependency bundle created by esbuild.
+ */
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+var __commonJS = (cb, mod) => function __require() {
+  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+
+// node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/posix.js
+var require_posix = __commonJS({
+  "node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/posix.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.sync = exports2.isexe = void 0;
+    var fs_1 = require("fs");
+    var promises_1 = require("fs/promises");
+    var isexe = /* @__PURE__ */ __name(async (path, options = {}) => {
+      const { ignoreErrors = false } = options;
+      try {
+        return checkStat(await (0, promises_1.stat)(path), options);
+      } catch (e) {
+        const er = e;
+        if (ignoreErrors || er.code === "EACCES")
+          return false;
+        throw er;
+      }
+    }, "isexe");
+    exports2.isexe = isexe;
+    var sync = /* @__PURE__ */ __name((path, options = {}) => {
+      const { ignoreErrors = false } = options;
+      try {
+        return checkStat((0, fs_1.statSync)(path), options);
+      } catch (e) {
+        const er = e;
+        if (ignoreErrors || er.code === "EACCES")
+          return false;
+        throw er;
+      }
+    }, "sync");
+    exports2.sync = sync;
+    var checkStat = /* @__PURE__ */ __name((stat, options) => stat.isFile() && checkMode(stat, options), "checkStat");
+    var checkMode = /* @__PURE__ */ __name((stat, options) => {
+      const myUid = options.uid ?? process.getuid?.();
+      const myGroups = options.groups ?? process.getgroups?.() ?? [];
+      const myGid = options.gid ?? process.getgid?.() ?? myGroups[0];
+      if (myUid === void 0 || myGid === void 0) {
+        throw new Error("cannot get uid or gid");
+      }
+      const groups = /* @__PURE__ */ new Set([myGid, ...myGroups]);
+      const mod = stat.mode;
+      const uid = stat.uid;
+      const gid = stat.gid;
+      const u = parseInt("100", 8);
+      const g = parseInt("010", 8);
+      const o = parseInt("001", 8);
+      const ug = u | g;
+      return !!(mod & o || mod & g && groups.has(gid) || mod & u && uid === myUid || mod & ug && myUid === 0);
+    }, "checkMode");
+  }
+});
+
+// node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/win32.js
+var require_win32 = __commonJS({
+  "node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/win32.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.sync = exports2.isexe = void 0;
+    var fs_1 = require("fs");
+    var promises_1 = require("fs/promises");
+    var isexe = /* @__PURE__ */ __name(async (path, options = {}) => {
+      const { ignoreErrors = false } = options;
+      try {
+        return checkStat(await (0, promises_1.stat)(path), path, options);
+      } catch (e) {
+        const er = e;
+        if (ignoreErrors || er.code === "EACCES")
+          return false;
+        throw er;
+      }
+    }, "isexe");
+    exports2.isexe = isexe;
+    var sync = /* @__PURE__ */ __name((path, options = {}) => {
+      const { ignoreErrors = false } = options;
+      try {
+        return checkStat((0, fs_1.statSync)(path), path, options);
+      } catch (e) {
+        const er = e;
+        if (ignoreErrors || er.code === "EACCES")
+          return false;
+        throw er;
+      }
+    }, "sync");
+    exports2.sync = sync;
+    var checkPathExt = /* @__PURE__ */ __name((path, options) => {
+      const { pathExt = process.env.PATHEXT || "" } = options;
+      const peSplit = pathExt.split(";");
+      if (peSplit.indexOf("") !== -1) {
+        return true;
+      }
+      for (let i = 0; i < peSplit.length; i++) {
+        const p = peSplit[i].toLowerCase();
+        const ext = path.substring(path.length - p.length).toLowerCase();
+        if (p && ext === p) {
+          return true;
+        }
+      }
+      return false;
+    }, "checkPathExt");
+    var checkStat = /* @__PURE__ */ __name((stat, path, options) => stat.isFile() && checkPathExt(path, options), "checkStat");
+  }
+});
+
+// node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/options.js
+var require_options = __commonJS({
+  "node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/options.js"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+  }
+});
+
+// node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/index.js
+var require_cjs = __commonJS({
+  "node_modules/.pnpm/isexe@3.1.1/node_modules/isexe/dist/cjs/index.js"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
+      for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.sync = exports2.isexe = exports2.posix = exports2.win32 = void 0;
+    var posix = __importStar(require_posix());
+    exports2.posix = posix;
+    var win32 = __importStar(require_win32());
+    exports2.win32 = win32;
+    __exportStar(require_options(), exports2);
+    var platform = process.env._ISEXE_TEST_PLATFORM_ || process.platform;
+    var impl = platform === "win32" ? win32 : posix;
+    exports2.isexe = impl.isexe;
+    exports2.sync = impl.sync;
+  }
+});
+
+// node_modules/.pnpm/which@5.0.0/node_modules/which/lib/index.js
+var require_lib = __commonJS({
+  "node_modules/.pnpm/which@5.0.0/node_modules/which/lib/index.js"(exports2, module2) {
+    var { isexe, sync: isexeSync } = require_cjs();
+    var { join, delimiter, sep, posix } = require("path");
+    var isWindows = process.platform === "win32";
+    var rSlash = new RegExp(`[${posix.sep}${sep === posix.sep ? "" : sep}]`.replace(/(\\)/g, "\\$1"));
+    var rRel = new RegExp(`^\\.${rSlash.source}`);
+    var getNotFoundError = /* @__PURE__ */ __name((cmd) => Object.assign(new Error(`not found: ${cmd}`), { code: "ENOENT" }), "getNotFoundError");
+    var getPathInfo = /* @__PURE__ */ __name((cmd, {
+      path: optPath = process.env.PATH,
+      pathExt: optPathExt = process.env.PATHEXT,
+      delimiter: optDelimiter = delimiter
+    }) => {
+      const pathEnv = cmd.match(rSlash) ? [""] : [
+        // windows always checks the cwd first
+        ...isWindows ? [process.cwd()] : [],
+        ...(optPath || /* istanbul ignore next: very unusual */
+        "").split(optDelimiter)
+      ];
+      if (isWindows) {
+        const pathExtExe = optPathExt || [".EXE", ".CMD", ".BAT", ".COM"].join(optDelimiter);
+        const pathExt = pathExtExe.split(optDelimiter).flatMap((item) => [item, item.toLowerCase()]);
+        if (cmd.includes(".") && pathExt[0] !== "") {
+          pathExt.unshift("");
+        }
+        return { pathEnv, pathExt, pathExtExe };
+      }
+      return { pathEnv, pathExt: [""] };
+    }, "getPathInfo");
+    var getPathPart = /* @__PURE__ */ __name((raw, cmd) => {
+      const pathPart = /^".*"$/.test(raw) ? raw.slice(1, -1) : raw;
+      const prefix = !pathPart && rRel.test(cmd) ? cmd.slice(0, 2) : "";
+      return prefix + join(pathPart, cmd);
+    }, "getPathPart");
+    var which = /* @__PURE__ */ __name(async (cmd, opt = {}) => {
+      const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt);
+      const found = [];
+      for (const envPart of pathEnv) {
+        const p = getPathPart(envPart, cmd);
+        for (const ext of pathExt) {
+          const withExt = p + ext;
+          const is = await isexe(withExt, { pathExt: pathExtExe, ignoreErrors: true });
+          if (is) {
+            if (!opt.all) {
+              return withExt;
+            }
+            found.push(withExt);
+          }
+        }
+      }
+      if (opt.all && found.length) {
+        return found;
+      }
+      if (opt.nothrow) {
+        return null;
+      }
+      throw getNotFoundError(cmd);
+    }, "which");
+    var whichSync = /* @__PURE__ */ __name((cmd, opt = {}) => {
+      const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt);
+      const found = [];
+      for (const pathEnvPart of pathEnv) {
+        const p = getPathPart(pathEnvPart, cmd);
+        for (const ext of pathExt) {
+          const withExt = p + ext;
+          const is = isexeSync(withExt, { pathExt: pathExtExe, ignoreErrors: true });
+          if (is) {
+            if (!opt.all) {
+              return withExt;
+            }
+            found.push(withExt);
+          }
+        }
+      }
+      if (opt.all && found.length) {
+        return found;
+      }
+      if (opt.nothrow) {
+        return null;
+      }
+      throw getNotFoundError(cmd);
+    }, "whichSync");
+    module2.exports = which;
+    which.sync = whichSync;
+  }
+});
+
+// src/external/which.js
+module.exports = require_lib();
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/yargs-parser.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/yargs-parser.js
new file mode 100644
index 00000000..10bf6380
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/yargs-parser.js
@@ -0,0 +1,1101 @@
+"use strict";
+/**
+ * Bundled from yargs-parser
+ * This is a zero-dependency bundle created by esbuild.
+ */
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+var __esm = (fn, res) => function __init() {
+  return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
+};
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// node_modules/.pnpm/yargs-parser@22.0.0/node_modules/yargs-parser/build/lib/string-utils.js
+function camelCase(str) {
+  const isCamelCase = str !== str.toLowerCase() && str !== str.toUpperCase();
+  if (!isCamelCase) {
+    str = str.toLowerCase();
+  }
+  if (str.indexOf("-") === -1 && str.indexOf("_") === -1) {
+    return str;
+  } else {
+    let camelcase = "";
+    let nextChrUpper = false;
+    const leadingHyphens = str.match(/^-+/);
+    for (let i = leadingHyphens ? leadingHyphens[0].length : 0; i < str.length; i++) {
+      let chr = str.charAt(i);
+      if (nextChrUpper) {
+        nextChrUpper = false;
+        chr = chr.toUpperCase();
+      }
+      if (i !== 0 && (chr === "-" || chr === "_")) {
+        nextChrUpper = true;
+      } else if (chr !== "-" && chr !== "_") {
+        camelcase += chr;
+      }
+    }
+    return camelcase;
+  }
+}
+function decamelize(str, joinString) {
+  const lowercase = str.toLowerCase();
+  joinString = joinString || "-";
+  let notCamelcase = "";
+  for (let i = 0; i < str.length; i++) {
+    const chrLower = lowercase.charAt(i);
+    const chrString = str.charAt(i);
+    if (chrLower !== chrString && i > 0) {
+      notCamelcase += `${joinString}${lowercase.charAt(i)}`;
+    } else {
+      notCamelcase += chrString;
+    }
+  }
+  return notCamelcase;
+}
+function looksLikeNumber(x) {
+  if (x === null || x === void 0)
+    return false;
+  if (typeof x === "number")
+    return true;
+  if (/^0x[0-9a-f]+$/i.test(x))
+    return true;
+  if (/^0[^.]/.test(x))
+    return false;
+  return /^[-]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x);
+}
+var init_string_utils = __esm({
+  "node_modules/.pnpm/yargs-parser@22.0.0/node_modules/yargs-parser/build/lib/string-utils.js"() {
+    __name(camelCase, "camelCase");
+    __name(decamelize, "decamelize");
+    __name(looksLikeNumber, "looksLikeNumber");
+  }
+});
+
+// node_modules/.pnpm/yargs-parser@22.0.0/node_modules/yargs-parser/build/lib/tokenize-arg-string.js
+function tokenizeArgString(argString) {
+  if (Array.isArray(argString)) {
+    return argString.map((e) => typeof e !== "string" ? e + "" : e);
+  }
+  argString = argString.trim();
+  let i = 0;
+  let prevC = null;
+  let c = null;
+  let opening = null;
+  const args = [];
+  for (let ii = 0; ii < argString.length; ii++) {
+    prevC = c;
+    c = argString.charAt(ii);
+    if (c === " " && !opening) {
+      if (!(prevC === " ")) {
+        i++;
+      }
+      continue;
+    }
+    if (c === opening) {
+      opening = null;
+    } else if ((c === "'" || c === '"') && !opening) {
+      opening = c;
+    }
+    if (!args[i])
+      args[i] = "";
+    args[i] += c;
+  }
+  return args;
+}
+var init_tokenize_arg_string = __esm({
+  "node_modules/.pnpm/yargs-parser@22.0.0/node_modules/yargs-parser/build/lib/tokenize-arg-string.js"() {
+    __name(tokenizeArgString, "tokenizeArgString");
+  }
+});
+
+// node_modules/.pnpm/yargs-parser@22.0.0/node_modules/yargs-parser/build/lib/yargs-parser-types.js
+var DefaultValuesForTypeKey;
+var init_yargs_parser_types = __esm({
+  "node_modules/.pnpm/yargs-parser@22.0.0/node_modules/yargs-parser/build/lib/yargs-parser-types.js"() {
+    (function(DefaultValuesForTypeKey2) {
+      DefaultValuesForTypeKey2["BOOLEAN"] = "boolean";
+      DefaultValuesForTypeKey2["STRING"] = "string";
+      DefaultValuesForTypeKey2["NUMBER"] = "number";
+      DefaultValuesForTypeKey2["ARRAY"] = "array";
+    })(DefaultValuesForTypeKey || (DefaultValuesForTypeKey = {}));
+  }
+});
+
+// node_modules/.pnpm/yargs-parser@22.0.0/node_modules/yargs-parser/build/lib/yargs-parser.js
+function combineAliases(aliases) {
+  const aliasArrays = [];
+  const combined = /* @__PURE__ */ Object.create(null);
+  let change = true;
+  Object.keys(aliases).forEach(function(key) {
+    aliasArrays.push([].concat(aliases[key], key));
+  });
+  while (change) {
+    change = false;
+    for (let i = 0; i < aliasArrays.length; i++) {
+      for (let ii = i + 1; ii < aliasArrays.length; ii++) {
+        const intersect = aliasArrays[i].filter(function(v) {
+          return aliasArrays[ii].indexOf(v) !== -1;
+        });
+        if (intersect.length) {
+          aliasArrays[i] = aliasArrays[i].concat(aliasArrays[ii]);
+          aliasArrays.splice(ii, 1);
+          change = true;
+          break;
+        }
+      }
+    }
+  }
+  aliasArrays.forEach(function(aliasArray) {
+    aliasArray = aliasArray.filter(function(v, i, self) {
+      return self.indexOf(v) === i;
+    });
+    const lastAlias = aliasArray.pop();
+    if (lastAlias !== void 0 && typeof lastAlias === "string") {
+      combined[lastAlias] = aliasArray;
+    }
+  });
+  return combined;
+}
+function increment(orig) {
+  return orig !== void 0 ? orig + 1 : 1;
+}
+function sanitizeKey(key) {
+  if (key === "__proto__")
+    return "___proto___";
+  return key;
+}
+function stripQuotes(val) {
+  return typeof val === "string" && (val[0] === "'" || val[0] === '"') && val[val.length - 1] === val[0] ? val.substring(1, val.length - 1) : val;
+}
+var mixin, YargsParser;
+var init_yargs_parser = __esm({
+  "node_modules/.pnpm/yargs-parser@22.0.0/node_modules/yargs-parser/build/lib/yargs-parser.js"() {
+    init_tokenize_arg_string();
+    init_yargs_parser_types();
+    init_string_utils();
+    YargsParser = class {
+      static {
+        __name(this, "YargsParser");
+      }
+      constructor(_mixin) {
+        mixin = _mixin;
+      }
+      parse(argsInput, options) {
+        const opts = Object.assign({
+          alias: void 0,
+          array: void 0,
+          boolean: void 0,
+          config: void 0,
+          configObjects: void 0,
+          configuration: void 0,
+          coerce: void 0,
+          count: void 0,
+          default: void 0,
+          envPrefix: void 0,
+          narg: void 0,
+          normalize: void 0,
+          string: void 0,
+          number: void 0,
+          __: void 0,
+          key: void 0
+        }, options);
+        const args = tokenizeArgString(argsInput);
+        const inputIsString = typeof argsInput === "string";
+        const aliases = combineAliases(Object.assign(/* @__PURE__ */ Object.create(null), opts.alias));
+        const configuration = Object.assign({
+          "boolean-negation": true,
+          "camel-case-expansion": true,
+          "combine-arrays": false,
+          "dot-notation": true,
+          "duplicate-arguments-array": true,
+          "flatten-duplicate-arrays": true,
+          "greedy-arrays": true,
+          "halt-at-non-option": false,
+          "nargs-eats-options": false,
+          "negation-prefix": "no-",
+          "parse-numbers": true,
+          "parse-positional-numbers": true,
+          "populate--": false,
+          "set-placeholder-key": false,
+          "short-option-groups": true,
+          "strip-aliased": false,
+          "strip-dashed": false,
+          "unknown-options-as-args": false
+        }, opts.configuration);
+        const defaults = Object.assign(/* @__PURE__ */ Object.create(null), opts.default);
+        const configObjects = opts.configObjects || [];
+        const envPrefix = opts.envPrefix;
+        const notFlagsOption = configuration["populate--"];
+        const notFlagsArgv = notFlagsOption ? "--" : "_";
+        const newAliases = /* @__PURE__ */ Object.create(null);
+        const defaulted = /* @__PURE__ */ Object.create(null);
+        const __ = opts.__ || mixin.format;
+        const flags = {
+          aliases: /* @__PURE__ */ Object.create(null),
+          arrays: /* @__PURE__ */ Object.create(null),
+          bools: /* @__PURE__ */ Object.create(null),
+          strings: /* @__PURE__ */ Object.create(null),
+          numbers: /* @__PURE__ */ Object.create(null),
+          counts: /* @__PURE__ */ Object.create(null),
+          normalize: /* @__PURE__ */ Object.create(null),
+          configs: /* @__PURE__ */ Object.create(null),
+          nargs: /* @__PURE__ */ Object.create(null),
+          coercions: /* @__PURE__ */ Object.create(null),
+          keys: []
+        };
+        const negative = /^-([0-9]+(\.[0-9]+)?|\.[0-9]+)$/;
+        const negatedBoolean = new RegExp("^--" + configuration["negation-prefix"] + "(.+)");
+        [].concat(opts.array || []).filter(Boolean).forEach(function(opt) {
+          const key = typeof opt === "object" ? opt.key : opt;
+          const assignment = Object.keys(opt).map(function(key2) {
+            const arrayFlagKeys = {
+              boolean: "bools",
+              string: "strings",
+              number: "numbers"
+            };
+            return arrayFlagKeys[key2];
+          }).filter(Boolean).pop();
+          if (assignment) {
+            flags[assignment][key] = true;
+          }
+          flags.arrays[key] = true;
+          flags.keys.push(key);
+        });
+        [].concat(opts.boolean || []).filter(Boolean).forEach(function(key) {
+          flags.bools[key] = true;
+          flags.keys.push(key);
+        });
+        [].concat(opts.string || []).filter(Boolean).forEach(function(key) {
+          flags.strings[key] = true;
+          flags.keys.push(key);
+        });
+        [].concat(opts.number || []).filter(Boolean).forEach(function(key) {
+          flags.numbers[key] = true;
+          flags.keys.push(key);
+        });
+        [].concat(opts.count || []).filter(Boolean).forEach(function(key) {
+          flags.counts[key] = true;
+          flags.keys.push(key);
+        });
+        [].concat(opts.normalize || []).filter(Boolean).forEach(function(key) {
+          flags.normalize[key] = true;
+          flags.keys.push(key);
+        });
+        if (typeof opts.narg === "object") {
+          Object.entries(opts.narg).forEach(([key, value]) => {
+            if (typeof value === "number") {
+              flags.nargs[key] = value;
+              flags.keys.push(key);
+            }
+          });
+        }
+        if (typeof opts.coerce === "object") {
+          Object.entries(opts.coerce).forEach(([key, value]) => {
+            if (typeof value === "function") {
+              flags.coercions[key] = value;
+              flags.keys.push(key);
+            }
+          });
+        }
+        if (typeof opts.config !== "undefined") {
+          if (Array.isArray(opts.config) || typeof opts.config === "string") {
+            ;
+            [].concat(opts.config).filter(Boolean).forEach(function(key) {
+              flags.configs[key] = true;
+            });
+          } else if (typeof opts.config === "object") {
+            Object.entries(opts.config).forEach(([key, value]) => {
+              if (typeof value === "boolean" || typeof value === "function") {
+                flags.configs[key] = value;
+              }
+            });
+          }
+        }
+        extendAliases(opts.key, aliases, opts.default, flags.arrays);
+        Object.keys(defaults).forEach(function(key) {
+          (flags.aliases[key] || []).forEach(function(alias) {
+            defaults[alias] = defaults[key];
+          });
+        });
+        let error = null;
+        checkConfiguration();
+        let notFlags = [];
+        const argv = Object.assign(/* @__PURE__ */ Object.create(null), { _: [] });
+        const argvReturn = {};
+        for (let i = 0; i < args.length; i++) {
+          const arg = args[i];
+          const truncatedArg = arg.replace(/^-{3,}/, "---");
+          let broken;
+          let key;
+          let letters;
+          let m;
+          let next;
+          let value;
+          if (arg !== "--" && /^-/.test(arg) && isUnknownOptionAsArg(arg)) {
+            pushPositional(arg);
+          } else if (truncatedArg.match(/^---+(=|$)/)) {
+            pushPositional(arg);
+            continue;
+          } else if (arg.match(/^--.+=/) || !configuration["short-option-groups"] && arg.match(/^-.+=/)) {
+            m = arg.match(/^--?([^=]+)=([\s\S]*)$/);
+            if (m !== null && Array.isArray(m) && m.length >= 3) {
+              if (checkAllAliases(m[1], flags.arrays)) {
+                i = eatArray(i, m[1], args, m[2]);
+              } else if (checkAllAliases(m[1], flags.nargs) !== false) {
+                i = eatNargs(i, m[1], args, m[2]);
+              } else {
+                setArg(m[1], m[2], true);
+              }
+            }
+          } else if (arg.match(negatedBoolean) && configuration["boolean-negation"]) {
+            m = arg.match(negatedBoolean);
+            if (m !== null && Array.isArray(m) && m.length >= 2) {
+              key = m[1];
+              setArg(key, checkAllAliases(key, flags.arrays) ? [false] : false);
+            }
+          } else if (arg.match(/^--.+/) || !configuration["short-option-groups"] && arg.match(/^-[^-]+/)) {
+            m = arg.match(/^--?(.+)/);
+            if (m !== null && Array.isArray(m) && m.length >= 2) {
+              key = m[1];
+              if (checkAllAliases(key, flags.arrays)) {
+                i = eatArray(i, key, args);
+              } else if (checkAllAliases(key, flags.nargs) !== false) {
+                i = eatNargs(i, key, args);
+              } else {
+                next = args[i + 1];
+                if (next !== void 0 && (!next.match(/^-/) || next.match(negative)) && !checkAllAliases(key, flags.bools) && !checkAllAliases(key, flags.counts)) {
+                  setArg(key, next);
+                  i++;
+                } else if (/^(true|false)$/.test(next)) {
+                  setArg(key, next);
+                  i++;
+                } else {
+                  setArg(key, defaultValue(key));
+                }
+              }
+            }
+          } else if (arg.match(/^-.\..+=/)) {
+            m = arg.match(/^-([^=]+)=([\s\S]*)$/);
+            if (m !== null && Array.isArray(m) && m.length >= 3) {
+              setArg(m[1], m[2]);
+            }
+          } else if (arg.match(/^-.\..+/) && !arg.match(negative)) {
+            next = args[i + 1];
+            m = arg.match(/^-(.\..+)/);
+            if (m !== null && Array.isArray(m) && m.length >= 2) {
+              key = m[1];
+              if (next !== void 0 && !next.match(/^-/) && !checkAllAliases(key, flags.bools) && !checkAllAliases(key, flags.counts)) {
+                setArg(key, next);
+                i++;
+              } else {
+                setArg(key, defaultValue(key));
+              }
+            }
+          } else if (arg.match(/^-[^-]+/) && !arg.match(negative)) {
+            letters = arg.slice(1, -1).split("");
+            broken = false;
+            for (let j = 0; j < letters.length; j++) {
+              next = arg.slice(j + 2);
+              if (letters[j + 1] && letters[j + 1] === "=") {
+                value = arg.slice(j + 3);
+                key = letters[j];
+                if (checkAllAliases(key, flags.arrays)) {
+                  i = eatArray(i, key, args, value);
+                } else if (checkAllAliases(key, flags.nargs) !== false) {
+                  i = eatNargs(i, key, args, value);
+                } else {
+                  setArg(key, value);
+                }
+                broken = true;
+                break;
+              }
+              if (next === "-") {
+                setArg(letters[j], next);
+                continue;
+              }
+              if (/[A-Za-z]/.test(letters[j]) && /^-?\d+(\.\d*)?(e-?\d+)?$/.test(next) && checkAllAliases(next, flags.bools) === false) {
+                setArg(letters[j], next);
+                broken = true;
+                break;
+              }
+              if (letters[j + 1] && letters[j + 1].match(/\W/)) {
+                setArg(letters[j], next);
+                broken = true;
+                break;
+              } else {
+                setArg(letters[j], defaultValue(letters[j]));
+              }
+            }
+            key = arg.slice(-1)[0];
+            if (!broken && key !== "-") {
+              if (checkAllAliases(key, flags.arrays)) {
+                i = eatArray(i, key, args);
+              } else if (checkAllAliases(key, flags.nargs) !== false) {
+                i = eatNargs(i, key, args);
+              } else {
+                next = args[i + 1];
+                if (next !== void 0 && (!/^(-|--)[^-]/.test(next) || next.match(negative)) && !checkAllAliases(key, flags.bools) && !checkAllAliases(key, flags.counts)) {
+                  setArg(key, next);
+                  i++;
+                } else if (/^(true|false)$/.test(next)) {
+                  setArg(key, next);
+                  i++;
+                } else {
+                  setArg(key, defaultValue(key));
+                }
+              }
+            }
+          } else if (arg.match(/^-[0-9]$/) && arg.match(negative) && checkAllAliases(arg.slice(1), flags.bools)) {
+            key = arg.slice(1);
+            setArg(key, defaultValue(key));
+          } else if (arg === "--") {
+            notFlags = args.slice(i + 1);
+            break;
+          } else if (configuration["halt-at-non-option"]) {
+            notFlags = args.slice(i);
+            break;
+          } else {
+            pushPositional(arg);
+          }
+        }
+        applyEnvVars(argv, true);
+        applyEnvVars(argv, false);
+        setConfig(argv);
+        setConfigObjects();
+        applyDefaultsAndAliases(argv, flags.aliases, defaults, true);
+        applyCoercions(argv);
+        if (configuration["set-placeholder-key"])
+          setPlaceholderKeys(argv);
+        Object.keys(flags.counts).forEach(function(key) {
+          if (!hasKey(argv, key.split(".")))
+            setArg(key, 0);
+        });
+        if (notFlagsOption && notFlags.length)
+          argv[notFlagsArgv] = [];
+        notFlags.forEach(function(key) {
+          argv[notFlagsArgv].push(key);
+        });
+        if (configuration["camel-case-expansion"] && configuration["strip-dashed"]) {
+          Object.keys(argv).filter((key) => key !== "--" && key.includes("-")).forEach((key) => {
+            delete argv[key];
+          });
+        }
+        if (configuration["strip-aliased"]) {
+          ;
+          [].concat(...Object.keys(aliases).map((k) => aliases[k])).forEach((alias) => {
+            if (configuration["camel-case-expansion"] && alias.includes("-")) {
+              delete argv[alias.split(".").map((prop) => camelCase(prop)).join(".")];
+            }
+            delete argv[alias];
+          });
+        }
+        function pushPositional(arg) {
+          const maybeCoercedNumber = maybeCoerceNumber("_", arg);
+          if (typeof maybeCoercedNumber === "string" || typeof maybeCoercedNumber === "number") {
+            argv._.push(maybeCoercedNumber);
+          }
+        }
+        __name(pushPositional, "pushPositional");
+        function eatNargs(i, key, args2, argAfterEqualSign) {
+          let ii;
+          let toEat = checkAllAliases(key, flags.nargs);
+          toEat = typeof toEat !== "number" || isNaN(toEat) ? 1 : toEat;
+          if (toEat === 0) {
+            if (!isUndefined(argAfterEqualSign)) {
+              error = Error(__("Argument unexpected for: %s", key));
+            }
+            setArg(key, defaultValue(key));
+            return i;
+          }
+          let available = isUndefined(argAfterEqualSign) ? 0 : 1;
+          if (configuration["nargs-eats-options"]) {
+            if (args2.length - (i + 1) + available < toEat) {
+              error = Error(__("Not enough arguments following: %s", key));
+            }
+            available = toEat;
+          } else {
+            for (ii = i + 1; ii < args2.length; ii++) {
+              if (!args2[ii].match(/^-[^0-9]/) || args2[ii].match(negative) || isUnknownOptionAsArg(args2[ii]))
+                available++;
+              else
+                break;
+            }
+            if (available < toEat)
+              error = Error(__("Not enough arguments following: %s", key));
+          }
+          let consumed = Math.min(available, toEat);
+          if (!isUndefined(argAfterEqualSign) && consumed > 0) {
+            setArg(key, argAfterEqualSign);
+            consumed--;
+          }
+          for (ii = i + 1; ii < consumed + i + 1; ii++) {
+            setArg(key, args2[ii]);
+          }
+          return i + consumed;
+        }
+        __name(eatNargs, "eatNargs");
+        function eatArray(i, key, args2, argAfterEqualSign) {
+          let argsToSet = [];
+          let next = argAfterEqualSign || args2[i + 1];
+          const nargsCount = checkAllAliases(key, flags.nargs);
+          if (checkAllAliases(key, flags.bools) && !/^(true|false)$/.test(next)) {
+            argsToSet.push(true);
+          } else if (isUndefined(next) || isUndefined(argAfterEqualSign) && /^-/.test(next) && !negative.test(next) && !isUnknownOptionAsArg(next)) {
+            if (defaults[key] !== void 0) {
+              const defVal = defaults[key];
+              argsToSet = Array.isArray(defVal) ? defVal : [defVal];
+            }
+          } else {
+            if (!isUndefined(argAfterEqualSign)) {
+              argsToSet.push(processValue(key, argAfterEqualSign, true));
+            }
+            for (let ii = i + 1; ii < args2.length; ii++) {
+              if (!configuration["greedy-arrays"] && argsToSet.length > 0 || nargsCount && typeof nargsCount === "number" && argsToSet.length >= nargsCount)
+                break;
+              next = args2[ii];
+              if (/^-/.test(next) && !negative.test(next) && !isUnknownOptionAsArg(next))
+                break;
+              i = ii;
+              argsToSet.push(processValue(key, next, inputIsString));
+            }
+          }
+          if (typeof nargsCount === "number" && (nargsCount && argsToSet.length < nargsCount || isNaN(nargsCount) && argsToSet.length === 0)) {
+            error = Error(__("Not enough arguments following: %s", key));
+          }
+          setArg(key, argsToSet);
+          return i;
+        }
+        __name(eatArray, "eatArray");
+        function setArg(key, val, shouldStripQuotes = inputIsString) {
+          if (/-/.test(key) && configuration["camel-case-expansion"]) {
+            const alias = key.split(".").map(function(prop) {
+              return camelCase(prop);
+            }).join(".");
+            addNewAlias(key, alias);
+          }
+          const value = processValue(key, val, shouldStripQuotes);
+          const splitKey = key.split(".");
+          setKey(argv, splitKey, value);
+          if (flags.aliases[key]) {
+            flags.aliases[key].forEach(function(x) {
+              const keyProperties = x.split(".");
+              setKey(argv, keyProperties, value);
+            });
+          }
+          if (splitKey.length > 1 && configuration["dot-notation"]) {
+            ;
+            (flags.aliases[splitKey[0]] || []).forEach(function(x) {
+              let keyProperties = x.split(".");
+              const a = [].concat(splitKey);
+              a.shift();
+              keyProperties = keyProperties.concat(a);
+              if (!(flags.aliases[key] || []).includes(keyProperties.join("."))) {
+                setKey(argv, keyProperties, value);
+              }
+            });
+          }
+          if (checkAllAliases(key, flags.normalize) && !checkAllAliases(key, flags.arrays)) {
+            const keys = [key].concat(flags.aliases[key] || []);
+            keys.forEach(function(key2) {
+              Object.defineProperty(argvReturn, key2, {
+                enumerable: true,
+                get() {
+                  return val;
+                },
+                set(value2) {
+                  val = typeof value2 === "string" ? mixin.normalize(value2) : value2;
+                }
+              });
+            });
+          }
+        }
+        __name(setArg, "setArg");
+        function addNewAlias(key, alias) {
+          if (!(flags.aliases[key] && flags.aliases[key].length)) {
+            flags.aliases[key] = [alias];
+            newAliases[alias] = true;
+          }
+          if (!(flags.aliases[alias] && flags.aliases[alias].length)) {
+            addNewAlias(alias, key);
+          }
+        }
+        __name(addNewAlias, "addNewAlias");
+        function processValue(key, val, shouldStripQuotes) {
+          if (shouldStripQuotes) {
+            val = stripQuotes(val);
+          }
+          if (checkAllAliases(key, flags.bools) || checkAllAliases(key, flags.counts)) {
+            if (typeof val === "string")
+              val = val === "true";
+          }
+          let value = Array.isArray(val) ? val.map(function(v) {
+            return maybeCoerceNumber(key, v);
+          }) : maybeCoerceNumber(key, val);
+          if (checkAllAliases(key, flags.counts) && (isUndefined(value) || typeof value === "boolean")) {
+            value = increment();
+          }
+          if (checkAllAliases(key, flags.normalize) && checkAllAliases(key, flags.arrays)) {
+            if (Array.isArray(val))
+              value = val.map((val2) => {
+                return mixin.normalize(val2);
+              });
+            else
+              value = mixin.normalize(val);
+          }
+          return value;
+        }
+        __name(processValue, "processValue");
+        function maybeCoerceNumber(key, value) {
+          if (!configuration["parse-positional-numbers"] && key === "_")
+            return value;
+          if (!checkAllAliases(key, flags.strings) && !checkAllAliases(key, flags.bools) && !Array.isArray(value)) {
+            const shouldCoerceNumber = looksLikeNumber(value) && configuration["parse-numbers"] && Number.isSafeInteger(Math.floor(parseFloat(`${value}`)));
+            if (shouldCoerceNumber || !isUndefined(value) && checkAllAliases(key, flags.numbers)) {
+              value = Number(value);
+            }
+          }
+          return value;
+        }
+        __name(maybeCoerceNumber, "maybeCoerceNumber");
+        function setConfig(argv2) {
+          const configLookup = /* @__PURE__ */ Object.create(null);
+          applyDefaultsAndAliases(configLookup, flags.aliases, defaults);
+          Object.keys(flags.configs).forEach(function(configKey) {
+            const configPath = argv2[configKey] || configLookup[configKey];
+            if (configPath) {
+              try {
+                let config = null;
+                const resolvedConfigPath = mixin.resolve(mixin.cwd(), configPath);
+                const resolveConfig = flags.configs[configKey];
+                if (typeof resolveConfig === "function") {
+                  try {
+                    config = resolveConfig(resolvedConfigPath);
+                  } catch (e) {
+                    config = e;
+                  }
+                  if (config instanceof Error) {
+                    error = config;
+                    return;
+                  }
+                } else {
+                  config = mixin.require(resolvedConfigPath);
+                }
+                setConfigObject(config);
+              } catch (ex) {
+                if (ex.name === "PermissionDenied")
+                  error = ex;
+                else if (argv2[configKey])
+                  error = Error(__("Invalid JSON config file: %s", configPath));
+              }
+            }
+          });
+        }
+        __name(setConfig, "setConfig");
+        function setConfigObject(config, prev) {
+          Object.keys(config).forEach(function(key) {
+            const value = config[key];
+            const fullKey = prev ? prev + "." + key : key;
+            if (typeof value === "object" && value !== null && !Array.isArray(value) && configuration["dot-notation"]) {
+              setConfigObject(value, fullKey);
+            } else {
+              if (!hasKey(argv, fullKey.split(".")) || checkAllAliases(fullKey, flags.arrays) && configuration["combine-arrays"]) {
+                setArg(fullKey, value);
+              }
+            }
+          });
+        }
+        __name(setConfigObject, "setConfigObject");
+        function setConfigObjects() {
+          if (typeof configObjects !== "undefined") {
+            configObjects.forEach(function(configObject) {
+              setConfigObject(configObject);
+            });
+          }
+        }
+        __name(setConfigObjects, "setConfigObjects");
+        function applyEnvVars(argv2, configOnly) {
+          if (typeof envPrefix === "undefined")
+            return;
+          const prefix = typeof envPrefix === "string" ? envPrefix : "";
+          const env2 = mixin.env();
+          Object.keys(env2).forEach(function(envVar) {
+            if (prefix === "" || envVar.lastIndexOf(prefix, 0) === 0) {
+              const keys = envVar.split("__").map(function(key, i) {
+                if (i === 0) {
+                  key = key.substring(prefix.length);
+                }
+                return camelCase(key);
+              });
+              if ((configOnly && flags.configs[keys.join(".")] || !configOnly) && !hasKey(argv2, keys)) {
+                setArg(keys.join("."), env2[envVar]);
+              }
+            }
+          });
+        }
+        __name(applyEnvVars, "applyEnvVars");
+        function applyCoercions(argv2) {
+          let coerce;
+          const applied = /* @__PURE__ */ new Set();
+          Object.keys(argv2).forEach(function(key) {
+            if (!applied.has(key)) {
+              coerce = checkAllAliases(key, flags.coercions);
+              if (typeof coerce === "function") {
+                try {
+                  const value = maybeCoerceNumber(key, coerce(argv2[key]));
+                  [].concat(flags.aliases[key] || [], key).forEach((ali) => {
+                    applied.add(ali);
+                    argv2[ali] = value;
+                  });
+                } catch (err) {
+                  error = err;
+                }
+              }
+            }
+          });
+        }
+        __name(applyCoercions, "applyCoercions");
+        function setPlaceholderKeys(argv2) {
+          flags.keys.forEach((key) => {
+            if (~key.indexOf("."))
+              return;
+            if (typeof argv2[key] === "undefined")
+              argv2[key] = void 0;
+          });
+          return argv2;
+        }
+        __name(setPlaceholderKeys, "setPlaceholderKeys");
+        function applyDefaultsAndAliases(obj, aliases2, defaults2, canLog = false) {
+          Object.keys(defaults2).forEach(function(key) {
+            if (!hasKey(obj, key.split("."))) {
+              setKey(obj, key.split("."), defaults2[key]);
+              if (canLog)
+                defaulted[key] = true;
+              (aliases2[key] || []).forEach(function(x) {
+                if (hasKey(obj, x.split(".")))
+                  return;
+                setKey(obj, x.split("."), defaults2[key]);
+              });
+            }
+          });
+        }
+        __name(applyDefaultsAndAliases, "applyDefaultsAndAliases");
+        function hasKey(obj, keys) {
+          let o = obj;
+          if (!configuration["dot-notation"])
+            keys = [keys.join(".")];
+          keys.slice(0, -1).forEach(function(key2) {
+            o = o[key2] || {};
+          });
+          const key = keys[keys.length - 1];
+          if (typeof o !== "object")
+            return false;
+          else
+            return key in o;
+        }
+        __name(hasKey, "hasKey");
+        function setKey(obj, keys, value) {
+          let o = obj;
+          if (!configuration["dot-notation"])
+            keys = [keys.join(".")];
+          keys.slice(0, -1).forEach(function(key2) {
+            key2 = sanitizeKey(key2);
+            if (typeof o === "object" && o[key2] === void 0) {
+              o[key2] = {};
+            }
+            if (typeof o[key2] !== "object" || Array.isArray(o[key2])) {
+              if (Array.isArray(o[key2])) {
+                o[key2].push({});
+              } else {
+                o[key2] = [o[key2], {}];
+              }
+              o = o[key2][o[key2].length - 1];
+            } else {
+              o = o[key2];
+            }
+          });
+          const key = sanitizeKey(keys[keys.length - 1]);
+          const isTypeArray = checkAllAliases(keys.join("."), flags.arrays);
+          const isValueArray = Array.isArray(value);
+          let duplicate = configuration["duplicate-arguments-array"];
+          if (!duplicate && checkAllAliases(key, flags.nargs)) {
+            duplicate = true;
+            if (!isUndefined(o[key]) && flags.nargs[key] === 1 || Array.isArray(o[key]) && o[key].length === flags.nargs[key]) {
+              o[key] = void 0;
+            }
+          }
+          if (value === increment()) {
+            o[key] = increment(o[key]);
+          } else if (Array.isArray(o[key])) {
+            if (duplicate && isTypeArray && isValueArray) {
+              o[key] = configuration["flatten-duplicate-arrays"] ? o[key].concat(value) : (Array.isArray(o[key][0]) ? o[key] : [o[key]]).concat([value]);
+            } else if (!duplicate && Boolean(isTypeArray) === Boolean(isValueArray)) {
+              o[key] = value;
+            } else {
+              o[key] = o[key].concat([value]);
+            }
+          } else if (o[key] === void 0 && isTypeArray) {
+            o[key] = isValueArray ? value : [value];
+          } else if (duplicate && !(o[key] === void 0 || checkAllAliases(key, flags.counts) || checkAllAliases(key, flags.bools))) {
+            o[key] = [o[key], value];
+          } else {
+            o[key] = value;
+          }
+        }
+        __name(setKey, "setKey");
+        function extendAliases(...args2) {
+          args2.forEach(function(obj) {
+            Object.keys(obj || {}).forEach(function(key) {
+              if (flags.aliases[key])
+                return;
+              flags.aliases[key] = [].concat(aliases[key] || []);
+              flags.aliases[key].concat(key).forEach(function(x) {
+                if (/-/.test(x) && configuration["camel-case-expansion"]) {
+                  const c = camelCase(x);
+                  if (c !== key && flags.aliases[key].indexOf(c) === -1) {
+                    flags.aliases[key].push(c);
+                    newAliases[c] = true;
+                  }
+                }
+              });
+              flags.aliases[key].concat(key).forEach(function(x) {
+                if (x.length > 1 && /[A-Z]/.test(x) && configuration["camel-case-expansion"]) {
+                  const c = decamelize(x, "-");
+                  if (c !== key && flags.aliases[key].indexOf(c) === -1) {
+                    flags.aliases[key].push(c);
+                    newAliases[c] = true;
+                  }
+                }
+              });
+              flags.aliases[key].forEach(function(x) {
+                flags.aliases[x] = [key].concat(flags.aliases[key].filter(function(y) {
+                  return x !== y;
+                }));
+              });
+            });
+          });
+        }
+        __name(extendAliases, "extendAliases");
+        function checkAllAliases(key, flag) {
+          const toCheck = [].concat(flags.aliases[key] || [], key);
+          const keys = Object.keys(flag);
+          const setAlias = toCheck.find((key2) => keys.includes(key2));
+          return setAlias ? flag[setAlias] : false;
+        }
+        __name(checkAllAliases, "checkAllAliases");
+        function hasAnyFlag(key) {
+          const flagsKeys = Object.keys(flags);
+          const toCheck = [].concat(flagsKeys.map((k) => flags[k]));
+          return toCheck.some(function(flag) {
+            return Array.isArray(flag) ? flag.includes(key) : flag[key];
+          });
+        }
+        __name(hasAnyFlag, "hasAnyFlag");
+        function hasFlagsMatching(arg, ...patterns) {
+          const toCheck = [].concat(...patterns);
+          return toCheck.some(function(pattern) {
+            const match = arg.match(pattern);
+            return match && hasAnyFlag(match[1]);
+          });
+        }
+        __name(hasFlagsMatching, "hasFlagsMatching");
+        function hasAllShortFlags(arg) {
+          if (arg.match(negative) || !arg.match(/^-[^-]+/)) {
+            return false;
+          }
+          let hasAllFlags = true;
+          let next;
+          const letters = arg.slice(1).split("");
+          for (let j = 0; j < letters.length; j++) {
+            next = arg.slice(j + 2);
+            if (!hasAnyFlag(letters[j])) {
+              hasAllFlags = false;
+              break;
+            }
+            if (letters[j + 1] && letters[j + 1] === "=" || next === "-" || /[A-Za-z]/.test(letters[j]) && /^-?\d+(\.\d*)?(e-?\d+)?$/.test(next) || letters[j + 1] && letters[j + 1].match(/\W/)) {
+              break;
+            }
+          }
+          return hasAllFlags;
+        }
+        __name(hasAllShortFlags, "hasAllShortFlags");
+        function isUnknownOptionAsArg(arg) {
+          return configuration["unknown-options-as-args"] && isUnknownOption(arg);
+        }
+        __name(isUnknownOptionAsArg, "isUnknownOptionAsArg");
+        function isUnknownOption(arg) {
+          arg = arg.replace(/^-{3,}/, "--");
+          if (arg.match(negative)) {
+            return false;
+          }
+          if (hasAllShortFlags(arg)) {
+            return false;
+          }
+          const flagWithEquals = /^-+([^=]+?)=[\s\S]*$/;
+          const normalFlag = /^-+([^=]+?)$/;
+          const flagEndingInHyphen = /^-+([^=]+?)-$/;
+          const flagEndingInDigits = /^-+([^=]+?\d+)$/;
+          const flagEndingInNonWordCharacters = /^-+([^=]+?)\W+.*$/;
+          return !hasFlagsMatching(arg, flagWithEquals, negatedBoolean, normalFlag, flagEndingInHyphen, flagEndingInDigits, flagEndingInNonWordCharacters);
+        }
+        __name(isUnknownOption, "isUnknownOption");
+        function defaultValue(key) {
+          if (!checkAllAliases(key, flags.bools) && !checkAllAliases(key, flags.counts) && `${key}` in defaults) {
+            return defaults[key];
+          } else {
+            return defaultForType(guessType(key));
+          }
+        }
+        __name(defaultValue, "defaultValue");
+        function defaultForType(type) {
+          const def = {
+            [DefaultValuesForTypeKey.BOOLEAN]: true,
+            [DefaultValuesForTypeKey.STRING]: "",
+            [DefaultValuesForTypeKey.NUMBER]: void 0,
+            [DefaultValuesForTypeKey.ARRAY]: []
+          };
+          return def[type];
+        }
+        __name(defaultForType, "defaultForType");
+        function guessType(key) {
+          let type = DefaultValuesForTypeKey.BOOLEAN;
+          if (checkAllAliases(key, flags.strings))
+            type = DefaultValuesForTypeKey.STRING;
+          else if (checkAllAliases(key, flags.numbers))
+            type = DefaultValuesForTypeKey.NUMBER;
+          else if (checkAllAliases(key, flags.bools))
+            type = DefaultValuesForTypeKey.BOOLEAN;
+          else if (checkAllAliases(key, flags.arrays))
+            type = DefaultValuesForTypeKey.ARRAY;
+          return type;
+        }
+        __name(guessType, "guessType");
+        function isUndefined(num) {
+          return num === void 0;
+        }
+        __name(isUndefined, "isUndefined");
+        function checkConfiguration() {
+          Object.keys(flags.counts).find((key) => {
+            if (checkAllAliases(key, flags.arrays)) {
+              error = Error(__("Invalid configuration: %s, opts.count excludes opts.array.", key));
+              return true;
+            } else if (checkAllAliases(key, flags.nargs)) {
+              error = Error(__("Invalid configuration: %s, opts.count excludes opts.narg.", key));
+              return true;
+            }
+            return false;
+          });
+        }
+        __name(checkConfiguration, "checkConfiguration");
+        return {
+          aliases: Object.assign({}, flags.aliases),
+          argv: Object.assign(argvReturn, argv),
+          configuration,
+          defaulted: Object.assign({}, defaulted),
+          error,
+          newAliases: Object.assign({}, newAliases)
+        };
+      }
+    };
+    __name(combineAliases, "combineAliases");
+    __name(increment, "increment");
+    __name(sanitizeKey, "sanitizeKey");
+    __name(stripQuotes, "stripQuotes");
+  }
+});
+
+// node_modules/.pnpm/yargs-parser@22.0.0/node_modules/yargs-parser/build/lib/index.js
+var lib_exports = {};
+__export(lib_exports, {
+  default: () => lib_default,
+  "module.exports": () => yargsParser
+});
+var import_util, import_path, import_fs, import_node_module, _a, _b, _c, minNodeVersion, nodeVersion, env, require2, parser, yargsParser, lib_default;
+var init_lib = __esm({
+  "node_modules/.pnpm/yargs-parser@22.0.0/node_modules/yargs-parser/build/lib/index.js"() {
+    import_util = require("util");
+    import_path = require("path");
+    init_string_utils();
+    init_yargs_parser();
+    import_fs = require("fs");
+    import_node_module = require("node:module");
+    minNodeVersion = process && process.env && process.env.YARGS_MIN_NODE_VERSION ? Number(process.env.YARGS_MIN_NODE_VERSION) : 20;
+    nodeVersion = (_b = (_a = process === null || process === void 0 ? void 0 : process.versions) === null || _a === void 0 ? void 0 : _a.node) !== null && _b !== void 0 ? _b : (_c = process === null || process === void 0 ? void 0 : process.version) === null || _c === void 0 ? void 0 : _c.slice(1);
+    if (nodeVersion) {
+      const major = Number(nodeVersion.match(/^([^.]+)/)[1]);
+      if (major < minNodeVersion) {
+        throw Error(`yargs parser supports a minimum Node.js version of ${minNodeVersion}. Read our version support policy: https://github.com/yargs/yargs-parser#supported-nodejs-versions`);
+      }
+    }
+    env = process ? process.env : {};
+    require2 = import_node_module.createRequire ? (0, import_node_module.createRequire)(__filename) : void 0;
+    parser = new YargsParser({
+      cwd: process.cwd,
+      env: /* @__PURE__ */ __name(() => {
+        return env;
+      }, "env"),
+      format: import_util.format,
+      normalize: import_path.normalize,
+      resolve: import_path.resolve,
+      require: /* @__PURE__ */ __name((path) => {
+        if (typeof require2 !== "undefined") {
+          return require2(path);
+        } else if (path.match(/\.json$/)) {
+          return JSON.parse((0, import_fs.readFileSync)(path, "utf8"));
+        } else {
+          throw Error("only .json config files are supported in ESM");
+        }
+      }, "require")
+    });
+    yargsParser = /* @__PURE__ */ __name(function Parser(args, opts) {
+      const result = parser.parse(args.slice(), opts);
+      return result.argv;
+    }, "Parser");
+    yargsParser.detailed = function(args, opts) {
+      return parser.parse(args.slice(), opts);
+    };
+    yargsParser.camelCase = camelCase;
+    yargsParser.decamelize = decamelize;
+    yargsParser.looksLikeNumber = looksLikeNumber;
+    lib_default = yargsParser;
+  }
+});
+
+// src/external/yargs-parser.js
+module.exports = (init_lib(), __toCommonJS(lib_exports));
+/*! Bundled license information:
+
+yargs-parser/build/lib/string-utils.js:
+yargs-parser/build/lib/tokenize-arg-string.js:
+yargs-parser/build/lib/yargs-parser-types.js:
+yargs-parser/build/lib/yargs-parser.js:
+  (**
+   * @license
+   * Copyright (c) 2016, Contributors
+   * SPDX-License-Identifier: ISC
+   *)
+
+yargs-parser/build/lib/index.js:
+  (**
+   * @fileoverview Main entrypoint for libraries using yargs-parser in Node.js
+   *
+   * @license
+   * Copyright (c) 2016, Contributors
+   * SPDX-License-Identifier: ISC
+   *)
+*/
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/yoctocolors-cjs.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/yoctocolors-cjs.js
new file mode 100644
index 00000000..9a30dec8
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/yoctocolors-cjs.js
@@ -0,0 +1,6 @@
+'use strict'
+
+// Re-export from external-pack bundle for better deduplication.
+const { yoctocolorsCjs } = require('./external-pack')
+module.exports = yoctocolorsCjs
+module.exports.default = yoctocolorsCjs
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/zod.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/zod.js
new file mode 100644
index 00000000..b839a1b9
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/external/zod.js
@@ -0,0 +1,15223 @@
+"use strict";
+/**
+ * Bundled from zod
+ * This is a zero-dependency bundle created by esbuild.
+ */
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
+var __commonJS = (cb, mod) => function __require() {
+  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/core.cjs
+var require_core = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/core.cjs"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.globalConfig = exports2.$ZodEncodeError = exports2.$ZodAsyncError = exports2.$brand = exports2.NEVER = void 0;
+    exports2.$constructor = $constructor;
+    exports2.config = config;
+    exports2.NEVER = Object.freeze({
+      status: "aborted"
+    });
+    function $constructor(name, initializer, params) {
+      function init(inst, def) {
+        var _a;
+        Object.defineProperty(inst, "_zod", {
+          value: inst._zod ?? {},
+          enumerable: false
+        });
+        (_a = inst._zod).traits ?? (_a.traits = /* @__PURE__ */ new Set());
+        inst._zod.traits.add(name);
+        initializer(inst, def);
+        for (const k in _.prototype) {
+          if (!(k in inst))
+            Object.defineProperty(inst, k, { value: _.prototype[k].bind(inst) });
+        }
+        inst._zod.constr = _;
+        inst._zod.def = def;
+      }
+      __name(init, "init");
+      const Parent = params?.Parent ?? Object;
+      class Definition extends Parent {
+        static {
+          __name(this, "Definition");
+        }
+      }
+      Object.defineProperty(Definition, "name", { value: name });
+      function _(def) {
+        var _a;
+        const inst = params?.Parent ? new Definition() : this;
+        init(inst, def);
+        (_a = inst._zod).deferred ?? (_a.deferred = []);
+        for (const fn of inst._zod.deferred) {
+          fn();
+        }
+        return inst;
+      }
+      __name(_, "_");
+      Object.defineProperty(_, "init", { value: init });
+      Object.defineProperty(_, Symbol.hasInstance, {
+        value: /* @__PURE__ */ __name((inst) => {
+          if (params?.Parent && inst instanceof params.Parent)
+            return true;
+          return inst?._zod?.traits?.has(name);
+        }, "value")
+      });
+      Object.defineProperty(_, "name", { value: name });
+      return _;
+    }
+    __name($constructor, "$constructor");
+    exports2.$brand = Symbol("zod_brand");
+    var $ZodAsyncError = class extends Error {
+      static {
+        __name(this, "$ZodAsyncError");
+      }
+      constructor() {
+        super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);
+      }
+    };
+    exports2.$ZodAsyncError = $ZodAsyncError;
+    var $ZodEncodeError = class extends Error {
+      static {
+        __name(this, "$ZodEncodeError");
+      }
+      constructor(name) {
+        super(`Encountered unidirectional transform during encode: ${name}`);
+        this.name = "ZodEncodeError";
+      }
+    };
+    exports2.$ZodEncodeError = $ZodEncodeError;
+    exports2.globalConfig = {};
+    function config(newConfig) {
+      if (newConfig)
+        Object.assign(exports2.globalConfig, newConfig);
+      return exports2.globalConfig;
+    }
+    __name(config, "config");
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/util.cjs
+var require_util = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/util.cjs"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Class = exports2.BIGINT_FORMAT_RANGES = exports2.NUMBER_FORMAT_RANGES = exports2.primitiveTypes = exports2.propertyKeyTypes = exports2.getParsedType = exports2.allowsEval = exports2.captureStackTrace = void 0;
+    exports2.assertEqual = assertEqual;
+    exports2.assertNotEqual = assertNotEqual;
+    exports2.assertIs = assertIs;
+    exports2.assertNever = assertNever;
+    exports2.assert = assert;
+    exports2.getEnumValues = getEnumValues;
+    exports2.joinValues = joinValues;
+    exports2.jsonStringifyReplacer = jsonStringifyReplacer;
+    exports2.cached = cached;
+    exports2.nullish = nullish;
+    exports2.cleanRegex = cleanRegex;
+    exports2.floatSafeRemainder = floatSafeRemainder;
+    exports2.defineLazy = defineLazy;
+    exports2.objectClone = objectClone;
+    exports2.assignProp = assignProp;
+    exports2.mergeDefs = mergeDefs;
+    exports2.cloneDef = cloneDef;
+    exports2.getElementAtPath = getElementAtPath;
+    exports2.promiseAllObject = promiseAllObject;
+    exports2.randomString = randomString;
+    exports2.esc = esc;
+    exports2.isObject = isObject;
+    exports2.isPlainObject = isPlainObject;
+    exports2.shallowClone = shallowClone;
+    exports2.numKeys = numKeys;
+    exports2.escapeRegex = escapeRegex;
+    exports2.clone = clone;
+    exports2.normalizeParams = normalizeParams;
+    exports2.createTransparentProxy = createTransparentProxy;
+    exports2.stringifyPrimitive = stringifyPrimitive;
+    exports2.optionalKeys = optionalKeys;
+    exports2.pick = pick;
+    exports2.omit = omit;
+    exports2.extend = extend;
+    exports2.safeExtend = safeExtend;
+    exports2.merge = merge;
+    exports2.partial = partial;
+    exports2.required = required;
+    exports2.aborted = aborted;
+    exports2.prefixIssues = prefixIssues;
+    exports2.unwrapMessage = unwrapMessage;
+    exports2.finalizeIssue = finalizeIssue;
+    exports2.getSizableOrigin = getSizableOrigin;
+    exports2.getLengthableOrigin = getLengthableOrigin;
+    exports2.issue = issue;
+    exports2.cleanEnum = cleanEnum;
+    exports2.base64ToUint8Array = base64ToUint8Array;
+    exports2.uint8ArrayToBase64 = uint8ArrayToBase64;
+    exports2.base64urlToUint8Array = base64urlToUint8Array;
+    exports2.uint8ArrayToBase64url = uint8ArrayToBase64url;
+    exports2.hexToUint8Array = hexToUint8Array;
+    exports2.uint8ArrayToHex = uint8ArrayToHex;
+    function assertEqual(val) {
+      return val;
+    }
+    __name(assertEqual, "assertEqual");
+    function assertNotEqual(val) {
+      return val;
+    }
+    __name(assertNotEqual, "assertNotEqual");
+    function assertIs(_arg) {
+    }
+    __name(assertIs, "assertIs");
+    function assertNever(_x) {
+      throw new Error();
+    }
+    __name(assertNever, "assertNever");
+    function assert(_) {
+    }
+    __name(assert, "assert");
+    function getEnumValues(entries) {
+      const numericValues = Object.values(entries).filter((v) => typeof v === "number");
+      const values = Object.entries(entries).filter(([k, _]) => numericValues.indexOf(+k) === -1).map(([_, v]) => v);
+      return values;
+    }
+    __name(getEnumValues, "getEnumValues");
+    function joinValues(array, separator = "|") {
+      return array.map((val) => stringifyPrimitive(val)).join(separator);
+    }
+    __name(joinValues, "joinValues");
+    function jsonStringifyReplacer(_, value) {
+      if (typeof value === "bigint")
+        return value.toString();
+      return value;
+    }
+    __name(jsonStringifyReplacer, "jsonStringifyReplacer");
+    function cached(getter) {
+      const set = false;
+      return {
+        get value() {
+          if (!set) {
+            const value = getter();
+            Object.defineProperty(this, "value", { value });
+            return value;
+          }
+          throw new Error("cached value already set");
+        }
+      };
+    }
+    __name(cached, "cached");
+    function nullish(input) {
+      return input === null || input === void 0;
+    }
+    __name(nullish, "nullish");
+    function cleanRegex(source) {
+      const start = source.startsWith("^") ? 1 : 0;
+      const end = source.endsWith("$") ? source.length - 1 : source.length;
+      return source.slice(start, end);
+    }
+    __name(cleanRegex, "cleanRegex");
+    function floatSafeRemainder(val, step) {
+      const valDecCount = (val.toString().split(".")[1] || "").length;
+      const stepString = step.toString();
+      let stepDecCount = (stepString.split(".")[1] || "").length;
+      if (stepDecCount === 0 && /\d?e-\d?/.test(stepString)) {
+        const match = stepString.match(/\d?e-(\d?)/);
+        if (match?.[1]) {
+          stepDecCount = Number.parseInt(match[1]);
+        }
+      }
+      const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;
+      const valInt = Number.parseInt(val.toFixed(decCount).replace(".", ""));
+      const stepInt = Number.parseInt(step.toFixed(decCount).replace(".", ""));
+      return valInt % stepInt / 10 ** decCount;
+    }
+    __name(floatSafeRemainder, "floatSafeRemainder");
+    var EVALUATING = Symbol("evaluating");
+    function defineLazy(object, key, getter) {
+      let value = void 0;
+      Object.defineProperty(object, key, {
+        get() {
+          if (value === EVALUATING) {
+            return void 0;
+          }
+          if (value === void 0) {
+            value = EVALUATING;
+            value = getter();
+          }
+          return value;
+        },
+        set(v) {
+          Object.defineProperty(object, key, {
+            value: v
+            // configurable: true,
+          });
+        },
+        configurable: true
+      });
+    }
+    __name(defineLazy, "defineLazy");
+    function objectClone(obj) {
+      return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));
+    }
+    __name(objectClone, "objectClone");
+    function assignProp(target, prop, value) {
+      Object.defineProperty(target, prop, {
+        value,
+        writable: true,
+        enumerable: true,
+        configurable: true
+      });
+    }
+    __name(assignProp, "assignProp");
+    function mergeDefs(...defs) {
+      const mergedDescriptors = {};
+      for (const def of defs) {
+        const descriptors = Object.getOwnPropertyDescriptors(def);
+        Object.assign(mergedDescriptors, descriptors);
+      }
+      return Object.defineProperties({}, mergedDescriptors);
+    }
+    __name(mergeDefs, "mergeDefs");
+    function cloneDef(schema) {
+      return mergeDefs(schema._zod.def);
+    }
+    __name(cloneDef, "cloneDef");
+    function getElementAtPath(obj, path) {
+      if (!path)
+        return obj;
+      return path.reduce((acc, key) => acc?.[key], obj);
+    }
+    __name(getElementAtPath, "getElementAtPath");
+    function promiseAllObject(promisesObj) {
+      const keys = Object.keys(promisesObj);
+      const promises = keys.map((key) => promisesObj[key]);
+      return Promise.all(promises).then((results) => {
+        const resolvedObj = {};
+        for (let i = 0; i < keys.length; i++) {
+          resolvedObj[keys[i]] = results[i];
+        }
+        return resolvedObj;
+      });
+    }
+    __name(promiseAllObject, "promiseAllObject");
+    function randomString(length = 10) {
+      const chars = "abcdefghijklmnopqrstuvwxyz";
+      let str = "";
+      for (let i = 0; i < length; i++) {
+        str += chars[Math.floor(Math.random() * chars.length)];
+      }
+      return str;
+    }
+    __name(randomString, "randomString");
+    function esc(str) {
+      return JSON.stringify(str);
+    }
+    __name(esc, "esc");
+    exports2.captureStackTrace = "captureStackTrace" in Error ? Error.captureStackTrace : (..._args) => {
+    };
+    function isObject(data) {
+      return typeof data === "object" && data !== null && !Array.isArray(data);
+    }
+    __name(isObject, "isObject");
+    exports2.allowsEval = cached(() => {
+      if (false) {
+        return false;
+      }
+      try {
+        const F = Function;
+        new F("");
+        return true;
+      } catch (_) {
+        return false;
+      }
+    });
+    function isPlainObject(o) {
+      if (isObject(o) === false)
+        return false;
+      const ctor = o.constructor;
+      if (ctor === void 0)
+        return true;
+      const prot = ctor.prototype;
+      if (isObject(prot) === false)
+        return false;
+      if (Object.prototype.hasOwnProperty.call(prot, "isPrototypeOf") === false) {
+        return false;
+      }
+      return true;
+    }
+    __name(isPlainObject, "isPlainObject");
+    function shallowClone(o) {
+      if (isPlainObject(o))
+        return { ...o };
+      if (Array.isArray(o))
+        return [...o];
+      return o;
+    }
+    __name(shallowClone, "shallowClone");
+    function numKeys(data) {
+      let keyCount = 0;
+      for (const key in data) {
+        if (Object.prototype.hasOwnProperty.call(data, key)) {
+          keyCount++;
+        }
+      }
+      return keyCount;
+    }
+    __name(numKeys, "numKeys");
+    var getParsedType = /* @__PURE__ */ __name((data) => {
+      const t = typeof data;
+      switch (t) {
+        case "undefined":
+          return "undefined";
+        case "string":
+          return "string";
+        case "number":
+          return Number.isNaN(data) ? "nan" : "number";
+        case "boolean":
+          return "boolean";
+        case "function":
+          return "function";
+        case "bigint":
+          return "bigint";
+        case "symbol":
+          return "symbol";
+        case "object":
+          if (Array.isArray(data)) {
+            return "array";
+          }
+          if (data === null) {
+            return "null";
+          }
+          if (data.then && typeof data.then === "function" && data.catch && typeof data.catch === "function") {
+            return "promise";
+          }
+          if (typeof Map !== "undefined" && data instanceof Map) {
+            return "map";
+          }
+          if (typeof Set !== "undefined" && data instanceof Set) {
+            return "set";
+          }
+          if (typeof Date !== "undefined" && data instanceof Date) {
+            return "date";
+          }
+          if (typeof File !== "undefined" && data instanceof File) {
+            return "file";
+          }
+          return "object";
+        default:
+          throw new Error(`Unknown data type: ${t}`);
+      }
+    }, "getParsedType");
+    exports2.getParsedType = getParsedType;
+    exports2.propertyKeyTypes = /* @__PURE__ */ new Set(["string", "number", "symbol"]);
+    exports2.primitiveTypes = /* @__PURE__ */ new Set(["string", "number", "bigint", "boolean", "symbol", "undefined"]);
+    function escapeRegex(str) {
+      return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
+    }
+    __name(escapeRegex, "escapeRegex");
+    function clone(inst, def, params) {
+      const cl = new inst._zod.constr(def ?? inst._zod.def);
+      if (!def || params?.parent)
+        cl._zod.parent = inst;
+      return cl;
+    }
+    __name(clone, "clone");
+    function normalizeParams(_params) {
+      const params = _params;
+      if (!params)
+        return {};
+      if (typeof params === "string")
+        return { error: /* @__PURE__ */ __name(() => params, "error") };
+      if (params?.message !== void 0) {
+        if (params?.error !== void 0)
+          throw new Error("Cannot specify both `message` and `error` params");
+        params.error = params.message;
+      }
+      delete params.message;
+      if (typeof params.error === "string")
+        return { ...params, error: /* @__PURE__ */ __name(() => params.error, "error") };
+      return params;
+    }
+    __name(normalizeParams, "normalizeParams");
+    function createTransparentProxy(getter) {
+      let target;
+      return new Proxy({}, {
+        get(_, prop, receiver) {
+          target ?? (target = getter());
+          return Reflect.get(target, prop, receiver);
+        },
+        set(_, prop, value, receiver) {
+          target ?? (target = getter());
+          return Reflect.set(target, prop, value, receiver);
+        },
+        has(_, prop) {
+          target ?? (target = getter());
+          return Reflect.has(target, prop);
+        },
+        deleteProperty(_, prop) {
+          target ?? (target = getter());
+          return Reflect.deleteProperty(target, prop);
+        },
+        ownKeys(_) {
+          target ?? (target = getter());
+          return Reflect.ownKeys(target);
+        },
+        getOwnPropertyDescriptor(_, prop) {
+          target ?? (target = getter());
+          return Reflect.getOwnPropertyDescriptor(target, prop);
+        },
+        defineProperty(_, prop, descriptor) {
+          target ?? (target = getter());
+          return Reflect.defineProperty(target, prop, descriptor);
+        }
+      });
+    }
+    __name(createTransparentProxy, "createTransparentProxy");
+    function stringifyPrimitive(value) {
+      if (typeof value === "bigint")
+        return value.toString() + "n";
+      if (typeof value === "string")
+        return `"${value}"`;
+      return `${value}`;
+    }
+    __name(stringifyPrimitive, "stringifyPrimitive");
+    function optionalKeys(shape) {
+      return Object.keys(shape).filter((k) => {
+        return shape[k]._zod.optin === "optional" && shape[k]._zod.optout === "optional";
+      });
+    }
+    __name(optionalKeys, "optionalKeys");
+    exports2.NUMBER_FORMAT_RANGES = {
+      safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],
+      int32: [-2147483648, 2147483647],
+      uint32: [0, 4294967295],
+      float32: [-34028234663852886e22, 34028234663852886e22],
+      float64: [-Number.MAX_VALUE, Number.MAX_VALUE]
+    };
+    exports2.BIGINT_FORMAT_RANGES = {
+      int64: [/* @__PURE__ */ BigInt("-9223372036854775808"), /* @__PURE__ */ BigInt("9223372036854775807")],
+      uint64: [/* @__PURE__ */ BigInt(0), /* @__PURE__ */ BigInt("18446744073709551615")]
+    };
+    function pick(schema, mask) {
+      const currDef = schema._zod.def;
+      const def = mergeDefs(schema._zod.def, {
+        get shape() {
+          const newShape = {};
+          for (const key in mask) {
+            if (!(key in currDef.shape)) {
+              throw new Error(`Unrecognized key: "${key}"`);
+            }
+            if (!mask[key])
+              continue;
+            newShape[key] = currDef.shape[key];
+          }
+          assignProp(this, "shape", newShape);
+          return newShape;
+        },
+        checks: []
+      });
+      return clone(schema, def);
+    }
+    __name(pick, "pick");
+    function omit(schema, mask) {
+      const currDef = schema._zod.def;
+      const def = mergeDefs(schema._zod.def, {
+        get shape() {
+          const newShape = { ...schema._zod.def.shape };
+          for (const key in mask) {
+            if (!(key in currDef.shape)) {
+              throw new Error(`Unrecognized key: "${key}"`);
+            }
+            if (!mask[key])
+              continue;
+            delete newShape[key];
+          }
+          assignProp(this, "shape", newShape);
+          return newShape;
+        },
+        checks: []
+      });
+      return clone(schema, def);
+    }
+    __name(omit, "omit");
+    function extend(schema, shape) {
+      if (!isPlainObject(shape)) {
+        throw new Error("Invalid input to extend: expected a plain object");
+      }
+      const checks = schema._zod.def.checks;
+      const hasChecks = checks && checks.length > 0;
+      if (hasChecks) {
+        throw new Error("Object schemas containing refinements cannot be extended. Use `.safeExtend()` instead.");
+      }
+      const def = mergeDefs(schema._zod.def, {
+        get shape() {
+          const _shape = { ...schema._zod.def.shape, ...shape };
+          assignProp(this, "shape", _shape);
+          return _shape;
+        },
+        checks: []
+      });
+      return clone(schema, def);
+    }
+    __name(extend, "extend");
+    function safeExtend(schema, shape) {
+      if (!isPlainObject(shape)) {
+        throw new Error("Invalid input to safeExtend: expected a plain object");
+      }
+      const def = {
+        ...schema._zod.def,
+        get shape() {
+          const _shape = { ...schema._zod.def.shape, ...shape };
+          assignProp(this, "shape", _shape);
+          return _shape;
+        },
+        checks: schema._zod.def.checks
+      };
+      return clone(schema, def);
+    }
+    __name(safeExtend, "safeExtend");
+    function merge(a, b) {
+      const def = mergeDefs(a._zod.def, {
+        get shape() {
+          const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };
+          assignProp(this, "shape", _shape);
+          return _shape;
+        },
+        get catchall() {
+          return b._zod.def.catchall;
+        },
+        checks: []
+        // delete existing checks
+      });
+      return clone(a, def);
+    }
+    __name(merge, "merge");
+    function partial(Class2, schema, mask) {
+      const def = mergeDefs(schema._zod.def, {
+        get shape() {
+          const oldShape = schema._zod.def.shape;
+          const shape = { ...oldShape };
+          if (mask) {
+            for (const key in mask) {
+              if (!(key in oldShape)) {
+                throw new Error(`Unrecognized key: "${key}"`);
+              }
+              if (!mask[key])
+                continue;
+              shape[key] = Class2 ? new Class2({
+                type: "optional",
+                innerType: oldShape[key]
+              }) : oldShape[key];
+            }
+          } else {
+            for (const key in oldShape) {
+              shape[key] = Class2 ? new Class2({
+                type: "optional",
+                innerType: oldShape[key]
+              }) : oldShape[key];
+            }
+          }
+          assignProp(this, "shape", shape);
+          return shape;
+        },
+        checks: []
+      });
+      return clone(schema, def);
+    }
+    __name(partial, "partial");
+    function required(Class2, schema, mask) {
+      const def = mergeDefs(schema._zod.def, {
+        get shape() {
+          const oldShape = schema._zod.def.shape;
+          const shape = { ...oldShape };
+          if (mask) {
+            for (const key in mask) {
+              if (!(key in shape)) {
+                throw new Error(`Unrecognized key: "${key}"`);
+              }
+              if (!mask[key])
+                continue;
+              shape[key] = new Class2({
+                type: "nonoptional",
+                innerType: oldShape[key]
+              });
+            }
+          } else {
+            for (const key in oldShape) {
+              shape[key] = new Class2({
+                type: "nonoptional",
+                innerType: oldShape[key]
+              });
+            }
+          }
+          assignProp(this, "shape", shape);
+          return shape;
+        },
+        checks: []
+      });
+      return clone(schema, def);
+    }
+    __name(required, "required");
+    function aborted(x, startIndex = 0) {
+      if (x.aborted === true)
+        return true;
+      for (let i = startIndex; i < x.issues.length; i++) {
+        if (x.issues[i]?.continue !== true) {
+          return true;
+        }
+      }
+      return false;
+    }
+    __name(aborted, "aborted");
+    function prefixIssues(path, issues) {
+      return issues.map((iss) => {
+        var _a;
+        (_a = iss).path ?? (_a.path = []);
+        iss.path.unshift(path);
+        return iss;
+      });
+    }
+    __name(prefixIssues, "prefixIssues");
+    function unwrapMessage(message) {
+      return typeof message === "string" ? message : message?.message;
+    }
+    __name(unwrapMessage, "unwrapMessage");
+    function finalizeIssue(iss, ctx, config) {
+      const full = { ...iss, path: iss.path ?? [] };
+      if (!iss.message) {
+        const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ?? unwrapMessage(ctx?.error?.(iss)) ?? unwrapMessage(config.customError?.(iss)) ?? unwrapMessage(config.localeError?.(iss)) ?? "Invalid input";
+        full.message = message;
+      }
+      delete full.inst;
+      delete full.continue;
+      if (!ctx?.reportInput) {
+        delete full.input;
+      }
+      return full;
+    }
+    __name(finalizeIssue, "finalizeIssue");
+    function getSizableOrigin(input) {
+      if (input instanceof Set)
+        return "set";
+      if (input instanceof Map)
+        return "map";
+      if (input instanceof File)
+        return "file";
+      return "unknown";
+    }
+    __name(getSizableOrigin, "getSizableOrigin");
+    function getLengthableOrigin(input) {
+      if (Array.isArray(input))
+        return "array";
+      if (typeof input === "string")
+        return "string";
+      return "unknown";
+    }
+    __name(getLengthableOrigin, "getLengthableOrigin");
+    function issue(...args) {
+      const [iss, input, inst] = args;
+      if (typeof iss === "string") {
+        return {
+          message: iss,
+          code: "custom",
+          input,
+          inst
+        };
+      }
+      return { ...iss };
+    }
+    __name(issue, "issue");
+    function cleanEnum(obj) {
+      return Object.entries(obj).filter(([k, _]) => {
+        return Number.isNaN(Number.parseInt(k, 10));
+      }).map((el) => el[1]);
+    }
+    __name(cleanEnum, "cleanEnum");
+    function base64ToUint8Array(base64) {
+      const binaryString = atob(base64);
+      const bytes = new Uint8Array(binaryString.length);
+      for (let i = 0; i < binaryString.length; i++) {
+        bytes[i] = binaryString.charCodeAt(i);
+      }
+      return bytes;
+    }
+    __name(base64ToUint8Array, "base64ToUint8Array");
+    function uint8ArrayToBase64(bytes) {
+      let binaryString = "";
+      for (let i = 0; i < bytes.length; i++) {
+        binaryString += String.fromCharCode(bytes[i]);
+      }
+      return btoa(binaryString);
+    }
+    __name(uint8ArrayToBase64, "uint8ArrayToBase64");
+    function base64urlToUint8Array(base64url) {
+      const base64 = base64url.replace(/-/g, "+").replace(/_/g, "/");
+      const padding = "=".repeat((4 - base64.length % 4) % 4);
+      return base64ToUint8Array(base64 + padding);
+    }
+    __name(base64urlToUint8Array, "base64urlToUint8Array");
+    function uint8ArrayToBase64url(bytes) {
+      return uint8ArrayToBase64(bytes).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
+    }
+    __name(uint8ArrayToBase64url, "uint8ArrayToBase64url");
+    function hexToUint8Array(hex) {
+      const cleanHex = hex.replace(/^0x/, "");
+      if (cleanHex.length % 2 !== 0) {
+        throw new Error("Invalid hex string length");
+      }
+      const bytes = new Uint8Array(cleanHex.length / 2);
+      for (let i = 0; i < cleanHex.length; i += 2) {
+        bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);
+      }
+      return bytes;
+    }
+    __name(hexToUint8Array, "hexToUint8Array");
+    function uint8ArrayToHex(bytes) {
+      return Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join("");
+    }
+    __name(uint8ArrayToHex, "uint8ArrayToHex");
+    var Class = class {
+      static {
+        __name(this, "Class");
+      }
+      constructor(..._args) {
+      }
+    };
+    exports2.Class = Class;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/errors.cjs
+var require_errors = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/errors.cjs"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.$ZodRealError = exports2.$ZodError = void 0;
+    exports2.flattenError = flattenError;
+    exports2.formatError = formatError;
+    exports2.treeifyError = treeifyError;
+    exports2.toDotPath = toDotPath;
+    exports2.prettifyError = prettifyError;
+    var core_js_1 = require_core();
+    var util = __importStar(require_util());
+    var initializer = /* @__PURE__ */ __name((inst, def) => {
+      inst.name = "$ZodError";
+      Object.defineProperty(inst, "_zod", {
+        value: inst._zod,
+        enumerable: false
+      });
+      Object.defineProperty(inst, "issues", {
+        value: def,
+        enumerable: false
+      });
+      inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);
+      Object.defineProperty(inst, "toString", {
+        value: /* @__PURE__ */ __name(() => inst.message, "value"),
+        enumerable: false
+      });
+    }, "initializer");
+    exports2.$ZodError = (0, core_js_1.$constructor)("$ZodError", initializer);
+    exports2.$ZodRealError = (0, core_js_1.$constructor)("$ZodError", initializer, { Parent: Error });
+    function flattenError(error, mapper = (issue) => issue.message) {
+      const fieldErrors = {};
+      const formErrors = [];
+      for (const sub of error.issues) {
+        if (sub.path.length > 0) {
+          fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];
+          fieldErrors[sub.path[0]].push(mapper(sub));
+        } else {
+          formErrors.push(mapper(sub));
+        }
+      }
+      return { formErrors, fieldErrors };
+    }
+    __name(flattenError, "flattenError");
+    function formatError(error, mapper = (issue) => issue.message) {
+      const fieldErrors = { _errors: [] };
+      const processError = /* @__PURE__ */ __name((error2) => {
+        for (const issue of error2.issues) {
+          if (issue.code === "invalid_union" && issue.errors.length) {
+            issue.errors.map((issues) => processError({ issues }));
+          } else if (issue.code === "invalid_key") {
+            processError({ issues: issue.issues });
+          } else if (issue.code === "invalid_element") {
+            processError({ issues: issue.issues });
+          } else if (issue.path.length === 0) {
+            fieldErrors._errors.push(mapper(issue));
+          } else {
+            let curr = fieldErrors;
+            let i = 0;
+            while (i < issue.path.length) {
+              const el = issue.path[i];
+              const terminal = i === issue.path.length - 1;
+              if (!terminal) {
+                curr[el] = curr[el] || { _errors: [] };
+              } else {
+                curr[el] = curr[el] || { _errors: [] };
+                curr[el]._errors.push(mapper(issue));
+              }
+              curr = curr[el];
+              i++;
+            }
+          }
+        }
+      }, "processError");
+      processError(error);
+      return fieldErrors;
+    }
+    __name(formatError, "formatError");
+    function treeifyError(error, mapper = (issue) => issue.message) {
+      const result = { errors: [] };
+      const processError = /* @__PURE__ */ __name((error2, path = []) => {
+        var _a, _b;
+        for (const issue of error2.issues) {
+          if (issue.code === "invalid_union" && issue.errors.length) {
+            issue.errors.map((issues) => processError({ issues }, issue.path));
+          } else if (issue.code === "invalid_key") {
+            processError({ issues: issue.issues }, issue.path);
+          } else if (issue.code === "invalid_element") {
+            processError({ issues: issue.issues }, issue.path);
+          } else {
+            const fullpath = [...path, ...issue.path];
+            if (fullpath.length === 0) {
+              result.errors.push(mapper(issue));
+              continue;
+            }
+            let curr = result;
+            let i = 0;
+            while (i < fullpath.length) {
+              const el = fullpath[i];
+              const terminal = i === fullpath.length - 1;
+              if (typeof el === "string") {
+                curr.properties ?? (curr.properties = {});
+                (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });
+                curr = curr.properties[el];
+              } else {
+                curr.items ?? (curr.items = []);
+                (_b = curr.items)[el] ?? (_b[el] = { errors: [] });
+                curr = curr.items[el];
+              }
+              if (terminal) {
+                curr.errors.push(mapper(issue));
+              }
+              i++;
+            }
+          }
+        }
+      }, "processError");
+      processError(error);
+      return result;
+    }
+    __name(treeifyError, "treeifyError");
+    function toDotPath(_path) {
+      const segs = [];
+      const path = _path.map((seg) => typeof seg === "object" ? seg.key : seg);
+      for (const seg of path) {
+        if (typeof seg === "number")
+          segs.push(`[${seg}]`);
+        else if (typeof seg === "symbol")
+          segs.push(`[${JSON.stringify(String(seg))}]`);
+        else if (/[^\w$]/.test(seg))
+          segs.push(`[${JSON.stringify(seg)}]`);
+        else {
+          if (segs.length)
+            segs.push(".");
+          segs.push(seg);
+        }
+      }
+      return segs.join("");
+    }
+    __name(toDotPath, "toDotPath");
+    function prettifyError(error) {
+      const lines = [];
+      const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);
+      for (const issue of issues) {
+        lines.push(`✖ ${issue.message}`);
+        if (issue.path?.length)
+          lines.push(`  → at ${toDotPath(issue.path)}`);
+      }
+      return lines.join("\n");
+    }
+    __name(prettifyError, "prettifyError");
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/parse.cjs
+var require_parse = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/parse.cjs"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.safeDecodeAsync = exports2._safeDecodeAsync = exports2.safeEncodeAsync = exports2._safeEncodeAsync = exports2.safeDecode = exports2._safeDecode = exports2.safeEncode = exports2._safeEncode = exports2.decodeAsync = exports2._decodeAsync = exports2.encodeAsync = exports2._encodeAsync = exports2.decode = exports2._decode = exports2.encode = exports2._encode = exports2.safeParseAsync = exports2._safeParseAsync = exports2.safeParse = exports2._safeParse = exports2.parseAsync = exports2._parseAsync = exports2.parse = exports2._parse = void 0;
+    var core = __importStar(require_core());
+    var errors = __importStar(require_errors());
+    var util = __importStar(require_util());
+    var _parse = /* @__PURE__ */ __name((_Err) => (schema, value, _ctx, _params) => {
+      const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };
+      const result = schema._zod.run({ value, issues: [] }, ctx);
+      if (result instanceof Promise) {
+        throw new core.$ZodAsyncError();
+      }
+      if (result.issues.length) {
+        const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));
+        util.captureStackTrace(e, _params?.callee);
+        throw e;
+      }
+      return result.value;
+    }, "_parse");
+    exports2._parse = _parse;
+    exports2.parse = (0, exports2._parse)(errors.$ZodRealError);
+    var _parseAsync = /* @__PURE__ */ __name((_Err) => async (schema, value, _ctx, params) => {
+      const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };
+      let result = schema._zod.run({ value, issues: [] }, ctx);
+      if (result instanceof Promise)
+        result = await result;
+      if (result.issues.length) {
+        const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));
+        util.captureStackTrace(e, params?.callee);
+        throw e;
+      }
+      return result.value;
+    }, "_parseAsync");
+    exports2._parseAsync = _parseAsync;
+    exports2.parseAsync = (0, exports2._parseAsync)(errors.$ZodRealError);
+    var _safeParse = /* @__PURE__ */ __name((_Err) => (schema, value, _ctx) => {
+      const ctx = _ctx ? { ..._ctx, async: false } : { async: false };
+      const result = schema._zod.run({ value, issues: [] }, ctx);
+      if (result instanceof Promise) {
+        throw new core.$ZodAsyncError();
+      }
+      return result.issues.length ? {
+        success: false,
+        error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())))
+      } : { success: true, data: result.value };
+    }, "_safeParse");
+    exports2._safeParse = _safeParse;
+    exports2.safeParse = (0, exports2._safeParse)(errors.$ZodRealError);
+    var _safeParseAsync = /* @__PURE__ */ __name((_Err) => async (schema, value, _ctx) => {
+      const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };
+      let result = schema._zod.run({ value, issues: [] }, ctx);
+      if (result instanceof Promise)
+        result = await result;
+      return result.issues.length ? {
+        success: false,
+        error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())))
+      } : { success: true, data: result.value };
+    }, "_safeParseAsync");
+    exports2._safeParseAsync = _safeParseAsync;
+    exports2.safeParseAsync = (0, exports2._safeParseAsync)(errors.$ZodRealError);
+    var _encode = /* @__PURE__ */ __name((_Err) => (schema, value, _ctx) => {
+      const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" };
+      return (0, exports2._parse)(_Err)(schema, value, ctx);
+    }, "_encode");
+    exports2._encode = _encode;
+    exports2.encode = (0, exports2._encode)(errors.$ZodRealError);
+    var _decode = /* @__PURE__ */ __name((_Err) => (schema, value, _ctx) => {
+      return (0, exports2._parse)(_Err)(schema, value, _ctx);
+    }, "_decode");
+    exports2._decode = _decode;
+    exports2.decode = (0, exports2._decode)(errors.$ZodRealError);
+    var _encodeAsync = /* @__PURE__ */ __name((_Err) => async (schema, value, _ctx) => {
+      const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" };
+      return (0, exports2._parseAsync)(_Err)(schema, value, ctx);
+    }, "_encodeAsync");
+    exports2._encodeAsync = _encodeAsync;
+    exports2.encodeAsync = (0, exports2._encodeAsync)(errors.$ZodRealError);
+    var _decodeAsync = /* @__PURE__ */ __name((_Err) => async (schema, value, _ctx) => {
+      return (0, exports2._parseAsync)(_Err)(schema, value, _ctx);
+    }, "_decodeAsync");
+    exports2._decodeAsync = _decodeAsync;
+    exports2.decodeAsync = (0, exports2._decodeAsync)(errors.$ZodRealError);
+    var _safeEncode = /* @__PURE__ */ __name((_Err) => (schema, value, _ctx) => {
+      const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" };
+      return (0, exports2._safeParse)(_Err)(schema, value, ctx);
+    }, "_safeEncode");
+    exports2._safeEncode = _safeEncode;
+    exports2.safeEncode = (0, exports2._safeEncode)(errors.$ZodRealError);
+    var _safeDecode = /* @__PURE__ */ __name((_Err) => (schema, value, _ctx) => {
+      return (0, exports2._safeParse)(_Err)(schema, value, _ctx);
+    }, "_safeDecode");
+    exports2._safeDecode = _safeDecode;
+    exports2.safeDecode = (0, exports2._safeDecode)(errors.$ZodRealError);
+    var _safeEncodeAsync = /* @__PURE__ */ __name((_Err) => async (schema, value, _ctx) => {
+      const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" };
+      return (0, exports2._safeParseAsync)(_Err)(schema, value, ctx);
+    }, "_safeEncodeAsync");
+    exports2._safeEncodeAsync = _safeEncodeAsync;
+    exports2.safeEncodeAsync = (0, exports2._safeEncodeAsync)(errors.$ZodRealError);
+    var _safeDecodeAsync = /* @__PURE__ */ __name((_Err) => async (schema, value, _ctx) => {
+      return (0, exports2._safeParseAsync)(_Err)(schema, value, _ctx);
+    }, "_safeDecodeAsync");
+    exports2._safeDecodeAsync = _safeDecodeAsync;
+    exports2.safeDecodeAsync = (0, exports2._safeDecodeAsync)(errors.$ZodRealError);
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/regexes.cjs
+var require_regexes = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/regexes.cjs"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.sha384_base64 = exports2.sha384_hex = exports2.sha256_base64url = exports2.sha256_base64 = exports2.sha256_hex = exports2.sha1_base64url = exports2.sha1_base64 = exports2.sha1_hex = exports2.md5_base64url = exports2.md5_base64 = exports2.md5_hex = exports2.hex = exports2.uppercase = exports2.lowercase = exports2.undefined = exports2.null = exports2.boolean = exports2.number = exports2.integer = exports2.bigint = exports2.string = exports2.date = exports2.e164 = exports2.domain = exports2.hostname = exports2.base64url = exports2.base64 = exports2.cidrv6 = exports2.cidrv4 = exports2.ipv6 = exports2.ipv4 = exports2.browserEmail = exports2.idnEmail = exports2.unicodeEmail = exports2.rfc5322Email = exports2.html5Email = exports2.email = exports2.uuid7 = exports2.uuid6 = exports2.uuid4 = exports2.uuid = exports2.guid = exports2.extendedDuration = exports2.duration = exports2.nanoid = exports2.ksuid = exports2.xid = exports2.ulid = exports2.cuid2 = exports2.cuid = void 0;
+    exports2.sha512_base64url = exports2.sha512_base64 = exports2.sha512_hex = exports2.sha384_base64url = void 0;
+    exports2.emoji = emoji;
+    exports2.time = time;
+    exports2.datetime = datetime;
+    exports2.cuid = /^[cC][^\s-]{8,}$/;
+    exports2.cuid2 = /^[0-9a-z]+$/;
+    exports2.ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;
+    exports2.xid = /^[0-9a-vA-V]{20}$/;
+    exports2.ksuid = /^[A-Za-z0-9]{27}$/;
+    exports2.nanoid = /^[a-zA-Z0-9_-]{21}$/;
+    exports2.duration = /^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/;
+    exports2.extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/;
+    exports2.guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;
+    var uuid = /* @__PURE__ */ __name((version) => {
+      if (!version)
+        return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;
+      return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);
+    }, "uuid");
+    exports2.uuid = uuid;
+    exports2.uuid4 = (0, exports2.uuid)(4);
+    exports2.uuid6 = (0, exports2.uuid)(6);
+    exports2.uuid7 = (0, exports2.uuid)(7);
+    exports2.email = /^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/;
+    exports2.html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
+    exports2.rfc5322Email = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
+    exports2.unicodeEmail = /^[^\s@"]{1,64}@[^\s@]{1,255}$/u;
+    exports2.idnEmail = exports2.unicodeEmail;
+    exports2.browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
+    var _emoji = `^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;
+    function emoji() {
+      return new RegExp(_emoji, "u");
+    }
+    __name(emoji, "emoji");
+    exports2.ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;
+    exports2.ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;
+    exports2.cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/;
+    exports2.cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;
+    exports2.base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;
+    exports2.base64url = /^[A-Za-z0-9_-]*$/;
+    exports2.hostname = /^(?=.{1,253}\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\.?$/;
+    exports2.domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/;
+    exports2.e164 = /^\+(?:[0-9]){6,14}[0-9]$/;
+    var dateSource = `(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`;
+    exports2.date = new RegExp(`^${dateSource}$`);
+    function timeSource(args) {
+      const hhmm = `(?:[01]\\d|2[0-3]):[0-5]\\d`;
+      const regex = typeof args.precision === "number" ? args.precision === -1 ? `${hhmm}` : args.precision === 0 ? `${hhmm}:[0-5]\\d` : `${hhmm}:[0-5]\\d\\.\\d{${args.precision}}` : `${hhmm}(?::[0-5]\\d(?:\\.\\d+)?)?`;
+      return regex;
+    }
+    __name(timeSource, "timeSource");
+    function time(args) {
+      return new RegExp(`^${timeSource(args)}$`);
+    }
+    __name(time, "time");
+    function datetime(args) {
+      const time2 = timeSource({ precision: args.precision });
+      const opts = ["Z"];
+      if (args.local)
+        opts.push("");
+      if (args.offset)
+        opts.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);
+      const timeRegex = `${time2}(?:${opts.join("|")})`;
+      return new RegExp(`^${dateSource}T(?:${timeRegex})$`);
+    }
+    __name(datetime, "datetime");
+    var string = /* @__PURE__ */ __name((params) => {
+      const regex = params ? `[\\s\\S]{${params?.minimum ?? 0},${params?.maximum ?? ""}}` : `[\\s\\S]*`;
+      return new RegExp(`^${regex}$`);
+    }, "string");
+    exports2.string = string;
+    exports2.bigint = /^-?\d+n?$/;
+    exports2.integer = /^-?\d+$/;
+    exports2.number = /^-?\d+(?:\.\d+)?/;
+    exports2.boolean = /^(?:true|false)$/i;
+    var _null = /^null$/i;
+    exports2.null = _null;
+    var _undefined = /^undefined$/i;
+    exports2.undefined = _undefined;
+    exports2.lowercase = /^[^A-Z]*$/;
+    exports2.uppercase = /^[^a-z]*$/;
+    exports2.hex = /^[0-9a-fA-F]*$/;
+    function fixedBase64(bodyLength, padding) {
+      return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);
+    }
+    __name(fixedBase64, "fixedBase64");
+    function fixedBase64url(length) {
+      return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);
+    }
+    __name(fixedBase64url, "fixedBase64url");
+    exports2.md5_hex = /^[0-9a-fA-F]{32}$/;
+    exports2.md5_base64 = fixedBase64(22, "==");
+    exports2.md5_base64url = fixedBase64url(22);
+    exports2.sha1_hex = /^[0-9a-fA-F]{40}$/;
+    exports2.sha1_base64 = fixedBase64(27, "=");
+    exports2.sha1_base64url = fixedBase64url(27);
+    exports2.sha256_hex = /^[0-9a-fA-F]{64}$/;
+    exports2.sha256_base64 = fixedBase64(43, "=");
+    exports2.sha256_base64url = fixedBase64url(43);
+    exports2.sha384_hex = /^[0-9a-fA-F]{96}$/;
+    exports2.sha384_base64 = fixedBase64(64, "");
+    exports2.sha384_base64url = fixedBase64url(64);
+    exports2.sha512_hex = /^[0-9a-fA-F]{128}$/;
+    exports2.sha512_base64 = fixedBase64(86, "==");
+    exports2.sha512_base64url = fixedBase64url(86);
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/checks.cjs
+var require_checks = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/checks.cjs"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.$ZodCheckOverwrite = exports2.$ZodCheckMimeType = exports2.$ZodCheckProperty = exports2.$ZodCheckEndsWith = exports2.$ZodCheckStartsWith = exports2.$ZodCheckIncludes = exports2.$ZodCheckUpperCase = exports2.$ZodCheckLowerCase = exports2.$ZodCheckRegex = exports2.$ZodCheckStringFormat = exports2.$ZodCheckLengthEquals = exports2.$ZodCheckMinLength = exports2.$ZodCheckMaxLength = exports2.$ZodCheckSizeEquals = exports2.$ZodCheckMinSize = exports2.$ZodCheckMaxSize = exports2.$ZodCheckBigIntFormat = exports2.$ZodCheckNumberFormat = exports2.$ZodCheckMultipleOf = exports2.$ZodCheckGreaterThan = exports2.$ZodCheckLessThan = exports2.$ZodCheck = void 0;
+    var core = __importStar(require_core());
+    var regexes = __importStar(require_regexes());
+    var util = __importStar(require_util());
+    exports2.$ZodCheck = core.$constructor("$ZodCheck", (inst, def) => {
+      var _a;
+      inst._zod ?? (inst._zod = {});
+      inst._zod.def = def;
+      (_a = inst._zod).onattach ?? (_a.onattach = []);
+    });
+    var numericOriginMap = {
+      number: "number",
+      bigint: "bigint",
+      object: "date"
+    };
+    exports2.$ZodCheckLessThan = core.$constructor("$ZodCheckLessThan", (inst, def) => {
+      exports2.$ZodCheck.init(inst, def);
+      const origin = numericOriginMap[typeof def.value];
+      inst._zod.onattach.push((inst2) => {
+        const bag = inst2._zod.bag;
+        const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;
+        if (def.value < curr) {
+          if (def.inclusive)
+            bag.maximum = def.value;
+          else
+            bag.exclusiveMaximum = def.value;
+        }
+      });
+      inst._zod.check = (payload) => {
+        if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {
+          return;
+        }
+        payload.issues.push({
+          origin,
+          code: "too_big",
+          maximum: def.value,
+          input: payload.value,
+          inclusive: def.inclusive,
+          inst,
+          continue: !def.abort
+        });
+      };
+    });
+    exports2.$ZodCheckGreaterThan = core.$constructor("$ZodCheckGreaterThan", (inst, def) => {
+      exports2.$ZodCheck.init(inst, def);
+      const origin = numericOriginMap[typeof def.value];
+      inst._zod.onattach.push((inst2) => {
+        const bag = inst2._zod.bag;
+        const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;
+        if (def.value > curr) {
+          if (def.inclusive)
+            bag.minimum = def.value;
+          else
+            bag.exclusiveMinimum = def.value;
+        }
+      });
+      inst._zod.check = (payload) => {
+        if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {
+          return;
+        }
+        payload.issues.push({
+          origin,
+          code: "too_small",
+          minimum: def.value,
+          input: payload.value,
+          inclusive: def.inclusive,
+          inst,
+          continue: !def.abort
+        });
+      };
+    });
+    exports2.$ZodCheckMultipleOf = /* @__PURE__ */ core.$constructor("$ZodCheckMultipleOf", (inst, def) => {
+      exports2.$ZodCheck.init(inst, def);
+      inst._zod.onattach.push((inst2) => {
+        var _a;
+        (_a = inst2._zod.bag).multipleOf ?? (_a.multipleOf = def.value);
+      });
+      inst._zod.check = (payload) => {
+        if (typeof payload.value !== typeof def.value)
+          throw new Error("Cannot mix number and bigint in multiple_of check.");
+        const isMultiple = typeof payload.value === "bigint" ? payload.value % def.value === BigInt(0) : util.floatSafeRemainder(payload.value, def.value) === 0;
+        if (isMultiple)
+          return;
+        payload.issues.push({
+          origin: typeof payload.value,
+          code: "not_multiple_of",
+          divisor: def.value,
+          input: payload.value,
+          inst,
+          continue: !def.abort
+        });
+      };
+    });
+    exports2.$ZodCheckNumberFormat = core.$constructor("$ZodCheckNumberFormat", (inst, def) => {
+      exports2.$ZodCheck.init(inst, def);
+      def.format = def.format || "float64";
+      const isInt = def.format?.includes("int");
+      const origin = isInt ? "int" : "number";
+      const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];
+      inst._zod.onattach.push((inst2) => {
+        const bag = inst2._zod.bag;
+        bag.format = def.format;
+        bag.minimum = minimum;
+        bag.maximum = maximum;
+        if (isInt)
+          bag.pattern = regexes.integer;
+      });
+      inst._zod.check = (payload) => {
+        const input = payload.value;
+        if (isInt) {
+          if (!Number.isInteger(input)) {
+            payload.issues.push({
+              expected: origin,
+              format: def.format,
+              code: "invalid_type",
+              continue: false,
+              input,
+              inst
+            });
+            return;
+          }
+          if (!Number.isSafeInteger(input)) {
+            if (input > 0) {
+              payload.issues.push({
+                input,
+                code: "too_big",
+                maximum: Number.MAX_SAFE_INTEGER,
+                note: "Integers must be within the safe integer range.",
+                inst,
+                origin,
+                continue: !def.abort
+              });
+            } else {
+              payload.issues.push({
+                input,
+                code: "too_small",
+                minimum: Number.MIN_SAFE_INTEGER,
+                note: "Integers must be within the safe integer range.",
+                inst,
+                origin,
+                continue: !def.abort
+              });
+            }
+            return;
+          }
+        }
+        if (input < minimum) {
+          payload.issues.push({
+            origin: "number",
+            input,
+            code: "too_small",
+            minimum,
+            inclusive: true,
+            inst,
+            continue: !def.abort
+          });
+        }
+        if (input > maximum) {
+          payload.issues.push({
+            origin: "number",
+            input,
+            code: "too_big",
+            maximum,
+            inst
+          });
+        }
+      };
+    });
+    exports2.$ZodCheckBigIntFormat = core.$constructor("$ZodCheckBigIntFormat", (inst, def) => {
+      exports2.$ZodCheck.init(inst, def);
+      const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];
+      inst._zod.onattach.push((inst2) => {
+        const bag = inst2._zod.bag;
+        bag.format = def.format;
+        bag.minimum = minimum;
+        bag.maximum = maximum;
+      });
+      inst._zod.check = (payload) => {
+        const input = payload.value;
+        if (input < minimum) {
+          payload.issues.push({
+            origin: "bigint",
+            input,
+            code: "too_small",
+            minimum,
+            inclusive: true,
+            inst,
+            continue: !def.abort
+          });
+        }
+        if (input > maximum) {
+          payload.issues.push({
+            origin: "bigint",
+            input,
+            code: "too_big",
+            maximum,
+            inst
+          });
+        }
+      };
+    });
+    exports2.$ZodCheckMaxSize = core.$constructor("$ZodCheckMaxSize", (inst, def) => {
+      var _a;
+      exports2.$ZodCheck.init(inst, def);
+      (_a = inst._zod.def).when ?? (_a.when = (payload) => {
+        const val = payload.value;
+        return !util.nullish(val) && val.size !== void 0;
+      });
+      inst._zod.onattach.push((inst2) => {
+        const curr = inst2._zod.bag.maximum ?? Number.POSITIVE_INFINITY;
+        if (def.maximum < curr)
+          inst2._zod.bag.maximum = def.maximum;
+      });
+      inst._zod.check = (payload) => {
+        const input = payload.value;
+        const size = input.size;
+        if (size <= def.maximum)
+          return;
+        payload.issues.push({
+          origin: util.getSizableOrigin(input),
+          code: "too_big",
+          maximum: def.maximum,
+          inclusive: true,
+          input,
+          inst,
+          continue: !def.abort
+        });
+      };
+    });
+    exports2.$ZodCheckMinSize = core.$constructor("$ZodCheckMinSize", (inst, def) => {
+      var _a;
+      exports2.$ZodCheck.init(inst, def);
+      (_a = inst._zod.def).when ?? (_a.when = (payload) => {
+        const val = payload.value;
+        return !util.nullish(val) && val.size !== void 0;
+      });
+      inst._zod.onattach.push((inst2) => {
+        const curr = inst2._zod.bag.minimum ?? Number.NEGATIVE_INFINITY;
+        if (def.minimum > curr)
+          inst2._zod.bag.minimum = def.minimum;
+      });
+      inst._zod.check = (payload) => {
+        const input = payload.value;
+        const size = input.size;
+        if (size >= def.minimum)
+          return;
+        payload.issues.push({
+          origin: util.getSizableOrigin(input),
+          code: "too_small",
+          minimum: def.minimum,
+          inclusive: true,
+          input,
+          inst,
+          continue: !def.abort
+        });
+      };
+    });
+    exports2.$ZodCheckSizeEquals = core.$constructor("$ZodCheckSizeEquals", (inst, def) => {
+      var _a;
+      exports2.$ZodCheck.init(inst, def);
+      (_a = inst._zod.def).when ?? (_a.when = (payload) => {
+        const val = payload.value;
+        return !util.nullish(val) && val.size !== void 0;
+      });
+      inst._zod.onattach.push((inst2) => {
+        const bag = inst2._zod.bag;
+        bag.minimum = def.size;
+        bag.maximum = def.size;
+        bag.size = def.size;
+      });
+      inst._zod.check = (payload) => {
+        const input = payload.value;
+        const size = input.size;
+        if (size === def.size)
+          return;
+        const tooBig = size > def.size;
+        payload.issues.push({
+          origin: util.getSizableOrigin(input),
+          ...tooBig ? { code: "too_big", maximum: def.size } : { code: "too_small", minimum: def.size },
+          inclusive: true,
+          exact: true,
+          input: payload.value,
+          inst,
+          continue: !def.abort
+        });
+      };
+    });
+    exports2.$ZodCheckMaxLength = core.$constructor("$ZodCheckMaxLength", (inst, def) => {
+      var _a;
+      exports2.$ZodCheck.init(inst, def);
+      (_a = inst._zod.def).when ?? (_a.when = (payload) => {
+        const val = payload.value;
+        return !util.nullish(val) && val.length !== void 0;
+      });
+      inst._zod.onattach.push((inst2) => {
+        const curr = inst2._zod.bag.maximum ?? Number.POSITIVE_INFINITY;
+        if (def.maximum < curr)
+          inst2._zod.bag.maximum = def.maximum;
+      });
+      inst._zod.check = (payload) => {
+        const input = payload.value;
+        const length = input.length;
+        if (length <= def.maximum)
+          return;
+        const origin = util.getLengthableOrigin(input);
+        payload.issues.push({
+          origin,
+          code: "too_big",
+          maximum: def.maximum,
+          inclusive: true,
+          input,
+          inst,
+          continue: !def.abort
+        });
+      };
+    });
+    exports2.$ZodCheckMinLength = core.$constructor("$ZodCheckMinLength", (inst, def) => {
+      var _a;
+      exports2.$ZodCheck.init(inst, def);
+      (_a = inst._zod.def).when ?? (_a.when = (payload) => {
+        const val = payload.value;
+        return !util.nullish(val) && val.length !== void 0;
+      });
+      inst._zod.onattach.push((inst2) => {
+        const curr = inst2._zod.bag.minimum ?? Number.NEGATIVE_INFINITY;
+        if (def.minimum > curr)
+          inst2._zod.bag.minimum = def.minimum;
+      });
+      inst._zod.check = (payload) => {
+        const input = payload.value;
+        const length = input.length;
+        if (length >= def.minimum)
+          return;
+        const origin = util.getLengthableOrigin(input);
+        payload.issues.push({
+          origin,
+          code: "too_small",
+          minimum: def.minimum,
+          inclusive: true,
+          input,
+          inst,
+          continue: !def.abort
+        });
+      };
+    });
+    exports2.$ZodCheckLengthEquals = core.$constructor("$ZodCheckLengthEquals", (inst, def) => {
+      var _a;
+      exports2.$ZodCheck.init(inst, def);
+      (_a = inst._zod.def).when ?? (_a.when = (payload) => {
+        const val = payload.value;
+        return !util.nullish(val) && val.length !== void 0;
+      });
+      inst._zod.onattach.push((inst2) => {
+        const bag = inst2._zod.bag;
+        bag.minimum = def.length;
+        bag.maximum = def.length;
+        bag.length = def.length;
+      });
+      inst._zod.check = (payload) => {
+        const input = payload.value;
+        const length = input.length;
+        if (length === def.length)
+          return;
+        const origin = util.getLengthableOrigin(input);
+        const tooBig = length > def.length;
+        payload.issues.push({
+          origin,
+          ...tooBig ? { code: "too_big", maximum: def.length } : { code: "too_small", minimum: def.length },
+          inclusive: true,
+          exact: true,
+          input: payload.value,
+          inst,
+          continue: !def.abort
+        });
+      };
+    });
+    exports2.$ZodCheckStringFormat = core.$constructor("$ZodCheckStringFormat", (inst, def) => {
+      var _a, _b;
+      exports2.$ZodCheck.init(inst, def);
+      inst._zod.onattach.push((inst2) => {
+        const bag = inst2._zod.bag;
+        bag.format = def.format;
+        if (def.pattern) {
+          bag.patterns ?? (bag.patterns = /* @__PURE__ */ new Set());
+          bag.patterns.add(def.pattern);
+        }
+      });
+      if (def.pattern)
+        (_a = inst._zod).check ?? (_a.check = (payload) => {
+          def.pattern.lastIndex = 0;
+          if (def.pattern.test(payload.value))
+            return;
+          payload.issues.push({
+            origin: "string",
+            code: "invalid_format",
+            format: def.format,
+            input: payload.value,
+            ...def.pattern ? { pattern: def.pattern.toString() } : {},
+            inst,
+            continue: !def.abort
+          });
+        });
+      else
+        (_b = inst._zod).check ?? (_b.check = () => {
+        });
+    });
+    exports2.$ZodCheckRegex = core.$constructor("$ZodCheckRegex", (inst, def) => {
+      exports2.$ZodCheckStringFormat.init(inst, def);
+      inst._zod.check = (payload) => {
+        def.pattern.lastIndex = 0;
+        if (def.pattern.test(payload.value))
+          return;
+        payload.issues.push({
+          origin: "string",
+          code: "invalid_format",
+          format: "regex",
+          input: payload.value,
+          pattern: def.pattern.toString(),
+          inst,
+          continue: !def.abort
+        });
+      };
+    });
+    exports2.$ZodCheckLowerCase = core.$constructor("$ZodCheckLowerCase", (inst, def) => {
+      def.pattern ?? (def.pattern = regexes.lowercase);
+      exports2.$ZodCheckStringFormat.init(inst, def);
+    });
+    exports2.$ZodCheckUpperCase = core.$constructor("$ZodCheckUpperCase", (inst, def) => {
+      def.pattern ?? (def.pattern = regexes.uppercase);
+      exports2.$ZodCheckStringFormat.init(inst, def);
+    });
+    exports2.$ZodCheckIncludes = core.$constructor("$ZodCheckIncludes", (inst, def) => {
+      exports2.$ZodCheck.init(inst, def);
+      const escapedRegex = util.escapeRegex(def.includes);
+      const pattern = new RegExp(typeof def.position === "number" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);
+      def.pattern = pattern;
+      inst._zod.onattach.push((inst2) => {
+        const bag = inst2._zod.bag;
+        bag.patterns ?? (bag.patterns = /* @__PURE__ */ new Set());
+        bag.patterns.add(pattern);
+      });
+      inst._zod.check = (payload) => {
+        if (payload.value.includes(def.includes, def.position))
+          return;
+        payload.issues.push({
+          origin: "string",
+          code: "invalid_format",
+          format: "includes",
+          includes: def.includes,
+          input: payload.value,
+          inst,
+          continue: !def.abort
+        });
+      };
+    });
+    exports2.$ZodCheckStartsWith = core.$constructor("$ZodCheckStartsWith", (inst, def) => {
+      exports2.$ZodCheck.init(inst, def);
+      const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);
+      def.pattern ?? (def.pattern = pattern);
+      inst._zod.onattach.push((inst2) => {
+        const bag = inst2._zod.bag;
+        bag.patterns ?? (bag.patterns = /* @__PURE__ */ new Set());
+        bag.patterns.add(pattern);
+      });
+      inst._zod.check = (payload) => {
+        if (payload.value.startsWith(def.prefix))
+          return;
+        payload.issues.push({
+          origin: "string",
+          code: "invalid_format",
+          format: "starts_with",
+          prefix: def.prefix,
+          input: payload.value,
+          inst,
+          continue: !def.abort
+        });
+      };
+    });
+    exports2.$ZodCheckEndsWith = core.$constructor("$ZodCheckEndsWith", (inst, def) => {
+      exports2.$ZodCheck.init(inst, def);
+      const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);
+      def.pattern ?? (def.pattern = pattern);
+      inst._zod.onattach.push((inst2) => {
+        const bag = inst2._zod.bag;
+        bag.patterns ?? (bag.patterns = /* @__PURE__ */ new Set());
+        bag.patterns.add(pattern);
+      });
+      inst._zod.check = (payload) => {
+        if (payload.value.endsWith(def.suffix))
+          return;
+        payload.issues.push({
+          origin: "string",
+          code: "invalid_format",
+          format: "ends_with",
+          suffix: def.suffix,
+          input: payload.value,
+          inst,
+          continue: !def.abort
+        });
+      };
+    });
+    function handleCheckPropertyResult(result, payload, property) {
+      if (result.issues.length) {
+        payload.issues.push(...util.prefixIssues(property, result.issues));
+      }
+    }
+    __name(handleCheckPropertyResult, "handleCheckPropertyResult");
+    exports2.$ZodCheckProperty = core.$constructor("$ZodCheckProperty", (inst, def) => {
+      exports2.$ZodCheck.init(inst, def);
+      inst._zod.check = (payload) => {
+        const result = def.schema._zod.run({
+          value: payload.value[def.property],
+          issues: []
+        }, {});
+        if (result instanceof Promise) {
+          return result.then((result2) => handleCheckPropertyResult(result2, payload, def.property));
+        }
+        handleCheckPropertyResult(result, payload, def.property);
+        return;
+      };
+    });
+    exports2.$ZodCheckMimeType = core.$constructor("$ZodCheckMimeType", (inst, def) => {
+      exports2.$ZodCheck.init(inst, def);
+      const mimeSet = new Set(def.mime);
+      inst._zod.onattach.push((inst2) => {
+        inst2._zod.bag.mime = def.mime;
+      });
+      inst._zod.check = (payload) => {
+        if (mimeSet.has(payload.value.type))
+          return;
+        payload.issues.push({
+          code: "invalid_value",
+          values: def.mime,
+          input: payload.value.type,
+          inst,
+          continue: !def.abort
+        });
+      };
+    });
+    exports2.$ZodCheckOverwrite = core.$constructor("$ZodCheckOverwrite", (inst, def) => {
+      exports2.$ZodCheck.init(inst, def);
+      inst._zod.check = (payload) => {
+        payload.value = def.tx(payload.value);
+      };
+    });
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/doc.cjs
+var require_doc = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/doc.cjs"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.Doc = void 0;
+    var Doc = class {
+      static {
+        __name(this, "Doc");
+      }
+      constructor(args = []) {
+        this.content = [];
+        this.indent = 0;
+        if (this)
+          this.args = args;
+      }
+      indented(fn) {
+        this.indent += 1;
+        fn(this);
+        this.indent -= 1;
+      }
+      write(arg) {
+        if (typeof arg === "function") {
+          arg(this, { execution: "sync" });
+          arg(this, { execution: "async" });
+          return;
+        }
+        const content = arg;
+        const lines = content.split("\n").filter((x) => x);
+        const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));
+        const dedented = lines.map((x) => x.slice(minIndent)).map((x) => " ".repeat(this.indent * 2) + x);
+        for (const line of dedented) {
+          this.content.push(line);
+        }
+      }
+      compile() {
+        const F = Function;
+        const args = this?.args;
+        const content = this?.content ?? [``];
+        const lines = [...content.map((x) => `  ${x}`)];
+        return new F(...args, lines.join("\n"));
+      }
+    };
+    exports2.Doc = Doc;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/versions.cjs
+var require_versions = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/versions.cjs"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.version = void 0;
+    exports2.version = {
+      major: 4,
+      minor: 1,
+      patch: 12
+    };
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/schemas.cjs
+var require_schemas = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/schemas.cjs"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.$ZodMap = exports2.$ZodRecord = exports2.$ZodTuple = exports2.$ZodIntersection = exports2.$ZodDiscriminatedUnion = exports2.$ZodUnion = exports2.$ZodObjectJIT = exports2.$ZodObject = exports2.$ZodArray = exports2.$ZodDate = exports2.$ZodVoid = exports2.$ZodNever = exports2.$ZodUnknown = exports2.$ZodAny = exports2.$ZodNull = exports2.$ZodUndefined = exports2.$ZodSymbol = exports2.$ZodBigIntFormat = exports2.$ZodBigInt = exports2.$ZodBoolean = exports2.$ZodNumberFormat = exports2.$ZodNumber = exports2.$ZodCustomStringFormat = exports2.$ZodJWT = exports2.$ZodE164 = exports2.$ZodBase64URL = exports2.$ZodBase64 = exports2.$ZodCIDRv6 = exports2.$ZodCIDRv4 = exports2.$ZodIPv6 = exports2.$ZodIPv4 = exports2.$ZodISODuration = exports2.$ZodISOTime = exports2.$ZodISODate = exports2.$ZodISODateTime = exports2.$ZodKSUID = exports2.$ZodXID = exports2.$ZodULID = exports2.$ZodCUID2 = exports2.$ZodCUID = exports2.$ZodNanoID = exports2.$ZodEmoji = exports2.$ZodURL = exports2.$ZodEmail = exports2.$ZodUUID = exports2.$ZodGUID = exports2.$ZodStringFormat = exports2.$ZodString = exports2.clone = exports2.$ZodType = void 0;
+    exports2.$ZodCustom = exports2.$ZodLazy = exports2.$ZodPromise = exports2.$ZodFunction = exports2.$ZodTemplateLiteral = exports2.$ZodReadonly = exports2.$ZodCodec = exports2.$ZodPipe = exports2.$ZodNaN = exports2.$ZodCatch = exports2.$ZodSuccess = exports2.$ZodNonOptional = exports2.$ZodPrefault = exports2.$ZodDefault = exports2.$ZodNullable = exports2.$ZodOptional = exports2.$ZodTransform = exports2.$ZodFile = exports2.$ZodLiteral = exports2.$ZodEnum = exports2.$ZodSet = void 0;
+    exports2.isValidBase64 = isValidBase64;
+    exports2.isValidBase64URL = isValidBase64URL;
+    exports2.isValidJWT = isValidJWT;
+    var checks = __importStar(require_checks());
+    var core = __importStar(require_core());
+    var doc_js_1 = require_doc();
+    var parse_js_1 = require_parse();
+    var regexes = __importStar(require_regexes());
+    var util = __importStar(require_util());
+    var versions_js_1 = require_versions();
+    exports2.$ZodType = core.$constructor("$ZodType", (inst, def) => {
+      var _a;
+      inst ?? (inst = {});
+      inst._zod.def = def;
+      inst._zod.bag = inst._zod.bag || {};
+      inst._zod.version = versions_js_1.version;
+      const checks2 = [...inst._zod.def.checks ?? []];
+      if (inst._zod.traits.has("$ZodCheck")) {
+        checks2.unshift(inst);
+      }
+      for (const ch of checks2) {
+        for (const fn of ch._zod.onattach) {
+          fn(inst);
+        }
+      }
+      if (checks2.length === 0) {
+        (_a = inst._zod).deferred ?? (_a.deferred = []);
+        inst._zod.deferred?.push(() => {
+          inst._zod.run = inst._zod.parse;
+        });
+      } else {
+        const runChecks = /* @__PURE__ */ __name((payload, checks3, ctx) => {
+          let isAborted = util.aborted(payload);
+          let asyncResult;
+          for (const ch of checks3) {
+            if (ch._zod.def.when) {
+              const shouldRun = ch._zod.def.when(payload);
+              if (!shouldRun)
+                continue;
+            } else if (isAborted) {
+              continue;
+            }
+            const currLen = payload.issues.length;
+            const _ = ch._zod.check(payload);
+            if (_ instanceof Promise && ctx?.async === false) {
+              throw new core.$ZodAsyncError();
+            }
+            if (asyncResult || _ instanceof Promise) {
+              asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {
+                await _;
+                const nextLen = payload.issues.length;
+                if (nextLen === currLen)
+                  return;
+                if (!isAborted)
+                  isAborted = util.aborted(payload, currLen);
+              });
+            } else {
+              const nextLen = payload.issues.length;
+              if (nextLen === currLen)
+                continue;
+              if (!isAborted)
+                isAborted = util.aborted(payload, currLen);
+            }
+          }
+          if (asyncResult) {
+            return asyncResult.then(() => {
+              return payload;
+            });
+          }
+          return payload;
+        }, "runChecks");
+        const handleCanaryResult = /* @__PURE__ */ __name((canary, payload, ctx) => {
+          if (util.aborted(canary)) {
+            canary.aborted = true;
+            return canary;
+          }
+          const checkResult = runChecks(payload, checks2, ctx);
+          if (checkResult instanceof Promise) {
+            if (ctx.async === false)
+              throw new core.$ZodAsyncError();
+            return checkResult.then((checkResult2) => inst._zod.parse(checkResult2, ctx));
+          }
+          return inst._zod.parse(checkResult, ctx);
+        }, "handleCanaryResult");
+        inst._zod.run = (payload, ctx) => {
+          if (ctx.skipChecks) {
+            return inst._zod.parse(payload, ctx);
+          }
+          if (ctx.direction === "backward") {
+            const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });
+            if (canary instanceof Promise) {
+              return canary.then((canary2) => {
+                return handleCanaryResult(canary2, payload, ctx);
+              });
+            }
+            return handleCanaryResult(canary, payload, ctx);
+          }
+          const result = inst._zod.parse(payload, ctx);
+          if (result instanceof Promise) {
+            if (ctx.async === false)
+              throw new core.$ZodAsyncError();
+            return result.then((result2) => runChecks(result2, checks2, ctx));
+          }
+          return runChecks(result, checks2, ctx);
+        };
+      }
+      inst["~standard"] = {
+        validate: /* @__PURE__ */ __name((value) => {
+          try {
+            const r = (0, parse_js_1.safeParse)(inst, value);
+            return r.success ? { value: r.data } : { issues: r.error?.issues };
+          } catch (_) {
+            return (0, parse_js_1.safeParseAsync)(inst, value).then((r) => r.success ? { value: r.data } : { issues: r.error?.issues });
+          }
+        }, "validate"),
+        vendor: "zod",
+        version: 1
+      };
+    });
+    var util_js_1 = require_util();
+    Object.defineProperty(exports2, "clone", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return util_js_1.clone;
+    }, "get") });
+    exports2.$ZodString = core.$constructor("$ZodString", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.pattern = [...inst?._zod.bag?.patterns ?? []].pop() ?? regexes.string(inst._zod.bag);
+      inst._zod.parse = (payload, _) => {
+        if (def.coerce)
+          try {
+            payload.value = String(payload.value);
+          } catch (_2) {
+          }
+        if (typeof payload.value === "string")
+          return payload;
+        payload.issues.push({
+          expected: "string",
+          code: "invalid_type",
+          input: payload.value,
+          inst
+        });
+        return payload;
+      };
+    });
+    exports2.$ZodStringFormat = core.$constructor("$ZodStringFormat", (inst, def) => {
+      checks.$ZodCheckStringFormat.init(inst, def);
+      exports2.$ZodString.init(inst, def);
+    });
+    exports2.$ZodGUID = core.$constructor("$ZodGUID", (inst, def) => {
+      def.pattern ?? (def.pattern = regexes.guid);
+      exports2.$ZodStringFormat.init(inst, def);
+    });
+    exports2.$ZodUUID = core.$constructor("$ZodUUID", (inst, def) => {
+      if (def.version) {
+        const versionMap = {
+          v1: 1,
+          v2: 2,
+          v3: 3,
+          v4: 4,
+          v5: 5,
+          v6: 6,
+          v7: 7,
+          v8: 8
+        };
+        const v = versionMap[def.version];
+        if (v === void 0)
+          throw new Error(`Invalid UUID version: "${def.version}"`);
+        def.pattern ?? (def.pattern = regexes.uuid(v));
+      } else
+        def.pattern ?? (def.pattern = regexes.uuid());
+      exports2.$ZodStringFormat.init(inst, def);
+    });
+    exports2.$ZodEmail = core.$constructor("$ZodEmail", (inst, def) => {
+      def.pattern ?? (def.pattern = regexes.email);
+      exports2.$ZodStringFormat.init(inst, def);
+    });
+    exports2.$ZodURL = core.$constructor("$ZodURL", (inst, def) => {
+      exports2.$ZodStringFormat.init(inst, def);
+      inst._zod.check = (payload) => {
+        try {
+          const trimmed = payload.value.trim();
+          const url = new URL(trimmed);
+          if (def.hostname) {
+            def.hostname.lastIndex = 0;
+            if (!def.hostname.test(url.hostname)) {
+              payload.issues.push({
+                code: "invalid_format",
+                format: "url",
+                note: "Invalid hostname",
+                pattern: regexes.hostname.source,
+                input: payload.value,
+                inst,
+                continue: !def.abort
+              });
+            }
+          }
+          if (def.protocol) {
+            def.protocol.lastIndex = 0;
+            if (!def.protocol.test(url.protocol.endsWith(":") ? url.protocol.slice(0, -1) : url.protocol)) {
+              payload.issues.push({
+                code: "invalid_format",
+                format: "url",
+                note: "Invalid protocol",
+                pattern: def.protocol.source,
+                input: payload.value,
+                inst,
+                continue: !def.abort
+              });
+            }
+          }
+          if (def.normalize) {
+            payload.value = url.href;
+          } else {
+            payload.value = trimmed;
+          }
+          return;
+        } catch (_) {
+          payload.issues.push({
+            code: "invalid_format",
+            format: "url",
+            input: payload.value,
+            inst,
+            continue: !def.abort
+          });
+        }
+      };
+    });
+    exports2.$ZodEmoji = core.$constructor("$ZodEmoji", (inst, def) => {
+      def.pattern ?? (def.pattern = regexes.emoji());
+      exports2.$ZodStringFormat.init(inst, def);
+    });
+    exports2.$ZodNanoID = core.$constructor("$ZodNanoID", (inst, def) => {
+      def.pattern ?? (def.pattern = regexes.nanoid);
+      exports2.$ZodStringFormat.init(inst, def);
+    });
+    exports2.$ZodCUID = core.$constructor("$ZodCUID", (inst, def) => {
+      def.pattern ?? (def.pattern = regexes.cuid);
+      exports2.$ZodStringFormat.init(inst, def);
+    });
+    exports2.$ZodCUID2 = core.$constructor("$ZodCUID2", (inst, def) => {
+      def.pattern ?? (def.pattern = regexes.cuid2);
+      exports2.$ZodStringFormat.init(inst, def);
+    });
+    exports2.$ZodULID = core.$constructor("$ZodULID", (inst, def) => {
+      def.pattern ?? (def.pattern = regexes.ulid);
+      exports2.$ZodStringFormat.init(inst, def);
+    });
+    exports2.$ZodXID = core.$constructor("$ZodXID", (inst, def) => {
+      def.pattern ?? (def.pattern = regexes.xid);
+      exports2.$ZodStringFormat.init(inst, def);
+    });
+    exports2.$ZodKSUID = core.$constructor("$ZodKSUID", (inst, def) => {
+      def.pattern ?? (def.pattern = regexes.ksuid);
+      exports2.$ZodStringFormat.init(inst, def);
+    });
+    exports2.$ZodISODateTime = core.$constructor("$ZodISODateTime", (inst, def) => {
+      def.pattern ?? (def.pattern = regexes.datetime(def));
+      exports2.$ZodStringFormat.init(inst, def);
+    });
+    exports2.$ZodISODate = core.$constructor("$ZodISODate", (inst, def) => {
+      def.pattern ?? (def.pattern = regexes.date);
+      exports2.$ZodStringFormat.init(inst, def);
+    });
+    exports2.$ZodISOTime = core.$constructor("$ZodISOTime", (inst, def) => {
+      def.pattern ?? (def.pattern = regexes.time(def));
+      exports2.$ZodStringFormat.init(inst, def);
+    });
+    exports2.$ZodISODuration = core.$constructor("$ZodISODuration", (inst, def) => {
+      def.pattern ?? (def.pattern = regexes.duration);
+      exports2.$ZodStringFormat.init(inst, def);
+    });
+    exports2.$ZodIPv4 = core.$constructor("$ZodIPv4", (inst, def) => {
+      def.pattern ?? (def.pattern = regexes.ipv4);
+      exports2.$ZodStringFormat.init(inst, def);
+      inst._zod.onattach.push((inst2) => {
+        const bag = inst2._zod.bag;
+        bag.format = `ipv4`;
+      });
+    });
+    exports2.$ZodIPv6 = core.$constructor("$ZodIPv6", (inst, def) => {
+      def.pattern ?? (def.pattern = regexes.ipv6);
+      exports2.$ZodStringFormat.init(inst, def);
+      inst._zod.onattach.push((inst2) => {
+        const bag = inst2._zod.bag;
+        bag.format = `ipv6`;
+      });
+      inst._zod.check = (payload) => {
+        try {
+          new URL(`http://[${payload.value}]`);
+        } catch {
+          payload.issues.push({
+            code: "invalid_format",
+            format: "ipv6",
+            input: payload.value,
+            inst,
+            continue: !def.abort
+          });
+        }
+      };
+    });
+    exports2.$ZodCIDRv4 = core.$constructor("$ZodCIDRv4", (inst, def) => {
+      def.pattern ?? (def.pattern = regexes.cidrv4);
+      exports2.$ZodStringFormat.init(inst, def);
+    });
+    exports2.$ZodCIDRv6 = core.$constructor("$ZodCIDRv6", (inst, def) => {
+      def.pattern ?? (def.pattern = regexes.cidrv6);
+      exports2.$ZodStringFormat.init(inst, def);
+      inst._zod.check = (payload) => {
+        const parts = payload.value.split("/");
+        try {
+          if (parts.length !== 2)
+            throw new Error();
+          const [address, prefix] = parts;
+          if (!prefix)
+            throw new Error();
+          const prefixNum = Number(prefix);
+          if (`${prefixNum}` !== prefix)
+            throw new Error();
+          if (prefixNum < 0 || prefixNum > 128)
+            throw new Error();
+          new URL(`http://[${address}]`);
+        } catch {
+          payload.issues.push({
+            code: "invalid_format",
+            format: "cidrv6",
+            input: payload.value,
+            inst,
+            continue: !def.abort
+          });
+        }
+      };
+    });
+    function isValidBase64(data) {
+      if (data === "")
+        return true;
+      if (data.length % 4 !== 0)
+        return false;
+      try {
+        atob(data);
+        return true;
+      } catch {
+        return false;
+      }
+    }
+    __name(isValidBase64, "isValidBase64");
+    exports2.$ZodBase64 = core.$constructor("$ZodBase64", (inst, def) => {
+      def.pattern ?? (def.pattern = regexes.base64);
+      exports2.$ZodStringFormat.init(inst, def);
+      inst._zod.onattach.push((inst2) => {
+        inst2._zod.bag.contentEncoding = "base64";
+      });
+      inst._zod.check = (payload) => {
+        if (isValidBase64(payload.value))
+          return;
+        payload.issues.push({
+          code: "invalid_format",
+          format: "base64",
+          input: payload.value,
+          inst,
+          continue: !def.abort
+        });
+      };
+    });
+    function isValidBase64URL(data) {
+      if (!regexes.base64url.test(data))
+        return false;
+      const base64 = data.replace(/[-_]/g, (c) => c === "-" ? "+" : "/");
+      const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, "=");
+      return isValidBase64(padded);
+    }
+    __name(isValidBase64URL, "isValidBase64URL");
+    exports2.$ZodBase64URL = core.$constructor("$ZodBase64URL", (inst, def) => {
+      def.pattern ?? (def.pattern = regexes.base64url);
+      exports2.$ZodStringFormat.init(inst, def);
+      inst._zod.onattach.push((inst2) => {
+        inst2._zod.bag.contentEncoding = "base64url";
+      });
+      inst._zod.check = (payload) => {
+        if (isValidBase64URL(payload.value))
+          return;
+        payload.issues.push({
+          code: "invalid_format",
+          format: "base64url",
+          input: payload.value,
+          inst,
+          continue: !def.abort
+        });
+      };
+    });
+    exports2.$ZodE164 = core.$constructor("$ZodE164", (inst, def) => {
+      def.pattern ?? (def.pattern = regexes.e164);
+      exports2.$ZodStringFormat.init(inst, def);
+    });
+    function isValidJWT(token, algorithm = null) {
+      try {
+        const tokensParts = token.split(".");
+        if (tokensParts.length !== 3)
+          return false;
+        const [header] = tokensParts;
+        if (!header)
+          return false;
+        const parsedHeader = JSON.parse(atob(header));
+        if ("typ" in parsedHeader && parsedHeader?.typ !== "JWT")
+          return false;
+        if (!parsedHeader.alg)
+          return false;
+        if (algorithm && (!("alg" in parsedHeader) || parsedHeader.alg !== algorithm))
+          return false;
+        return true;
+      } catch {
+        return false;
+      }
+    }
+    __name(isValidJWT, "isValidJWT");
+    exports2.$ZodJWT = core.$constructor("$ZodJWT", (inst, def) => {
+      exports2.$ZodStringFormat.init(inst, def);
+      inst._zod.check = (payload) => {
+        if (isValidJWT(payload.value, def.alg))
+          return;
+        payload.issues.push({
+          code: "invalid_format",
+          format: "jwt",
+          input: payload.value,
+          inst,
+          continue: !def.abort
+        });
+      };
+    });
+    exports2.$ZodCustomStringFormat = core.$constructor("$ZodCustomStringFormat", (inst, def) => {
+      exports2.$ZodStringFormat.init(inst, def);
+      inst._zod.check = (payload) => {
+        if (def.fn(payload.value))
+          return;
+        payload.issues.push({
+          code: "invalid_format",
+          format: def.format,
+          input: payload.value,
+          inst,
+          continue: !def.abort
+        });
+      };
+    });
+    exports2.$ZodNumber = core.$constructor("$ZodNumber", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;
+      inst._zod.parse = (payload, _ctx) => {
+        if (def.coerce)
+          try {
+            payload.value = Number(payload.value);
+          } catch (_) {
+          }
+        const input = payload.value;
+        if (typeof input === "number" && !Number.isNaN(input) && Number.isFinite(input)) {
+          return payload;
+        }
+        const received = typeof input === "number" ? Number.isNaN(input) ? "NaN" : !Number.isFinite(input) ? "Infinity" : void 0 : void 0;
+        payload.issues.push({
+          expected: "number",
+          code: "invalid_type",
+          input,
+          inst,
+          ...received ? { received } : {}
+        });
+        return payload;
+      };
+    });
+    exports2.$ZodNumberFormat = core.$constructor("$ZodNumber", (inst, def) => {
+      checks.$ZodCheckNumberFormat.init(inst, def);
+      exports2.$ZodNumber.init(inst, def);
+    });
+    exports2.$ZodBoolean = core.$constructor("$ZodBoolean", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.pattern = regexes.boolean;
+      inst._zod.parse = (payload, _ctx) => {
+        if (def.coerce)
+          try {
+            payload.value = Boolean(payload.value);
+          } catch (_) {
+          }
+        const input = payload.value;
+        if (typeof input === "boolean")
+          return payload;
+        payload.issues.push({
+          expected: "boolean",
+          code: "invalid_type",
+          input,
+          inst
+        });
+        return payload;
+      };
+    });
+    exports2.$ZodBigInt = core.$constructor("$ZodBigInt", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.pattern = regexes.bigint;
+      inst._zod.parse = (payload, _ctx) => {
+        if (def.coerce)
+          try {
+            payload.value = BigInt(payload.value);
+          } catch (_) {
+          }
+        if (typeof payload.value === "bigint")
+          return payload;
+        payload.issues.push({
+          expected: "bigint",
+          code: "invalid_type",
+          input: payload.value,
+          inst
+        });
+        return payload;
+      };
+    });
+    exports2.$ZodBigIntFormat = core.$constructor("$ZodBigInt", (inst, def) => {
+      checks.$ZodCheckBigIntFormat.init(inst, def);
+      exports2.$ZodBigInt.init(inst, def);
+    });
+    exports2.$ZodSymbol = core.$constructor("$ZodSymbol", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.parse = (payload, _ctx) => {
+        const input = payload.value;
+        if (typeof input === "symbol")
+          return payload;
+        payload.issues.push({
+          expected: "symbol",
+          code: "invalid_type",
+          input,
+          inst
+        });
+        return payload;
+      };
+    });
+    exports2.$ZodUndefined = core.$constructor("$ZodUndefined", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.pattern = regexes.undefined;
+      inst._zod.values = /* @__PURE__ */ new Set([void 0]);
+      inst._zod.optin = "optional";
+      inst._zod.optout = "optional";
+      inst._zod.parse = (payload, _ctx) => {
+        const input = payload.value;
+        if (typeof input === "undefined")
+          return payload;
+        payload.issues.push({
+          expected: "undefined",
+          code: "invalid_type",
+          input,
+          inst
+        });
+        return payload;
+      };
+    });
+    exports2.$ZodNull = core.$constructor("$ZodNull", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.pattern = regexes.null;
+      inst._zod.values = /* @__PURE__ */ new Set([null]);
+      inst._zod.parse = (payload, _ctx) => {
+        const input = payload.value;
+        if (input === null)
+          return payload;
+        payload.issues.push({
+          expected: "null",
+          code: "invalid_type",
+          input,
+          inst
+        });
+        return payload;
+      };
+    });
+    exports2.$ZodAny = core.$constructor("$ZodAny", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.parse = (payload) => payload;
+    });
+    exports2.$ZodUnknown = core.$constructor("$ZodUnknown", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.parse = (payload) => payload;
+    });
+    exports2.$ZodNever = core.$constructor("$ZodNever", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.parse = (payload, _ctx) => {
+        payload.issues.push({
+          expected: "never",
+          code: "invalid_type",
+          input: payload.value,
+          inst
+        });
+        return payload;
+      };
+    });
+    exports2.$ZodVoid = core.$constructor("$ZodVoid", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.parse = (payload, _ctx) => {
+        const input = payload.value;
+        if (typeof input === "undefined")
+          return payload;
+        payload.issues.push({
+          expected: "void",
+          code: "invalid_type",
+          input,
+          inst
+        });
+        return payload;
+      };
+    });
+    exports2.$ZodDate = core.$constructor("$ZodDate", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.parse = (payload, _ctx) => {
+        if (def.coerce) {
+          try {
+            payload.value = new Date(payload.value);
+          } catch (_err) {
+          }
+        }
+        const input = payload.value;
+        const isDate = input instanceof Date;
+        const isValidDate = isDate && !Number.isNaN(input.getTime());
+        if (isValidDate)
+          return payload;
+        payload.issues.push({
+          expected: "date",
+          code: "invalid_type",
+          input,
+          ...isDate ? { received: "Invalid Date" } : {},
+          inst
+        });
+        return payload;
+      };
+    });
+    function handleArrayResult(result, final, index) {
+      if (result.issues.length) {
+        final.issues.push(...util.prefixIssues(index, result.issues));
+      }
+      final.value[index] = result.value;
+    }
+    __name(handleArrayResult, "handleArrayResult");
+    exports2.$ZodArray = core.$constructor("$ZodArray", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.parse = (payload, ctx) => {
+        const input = payload.value;
+        if (!Array.isArray(input)) {
+          payload.issues.push({
+            expected: "array",
+            code: "invalid_type",
+            input,
+            inst
+          });
+          return payload;
+        }
+        payload.value = Array(input.length);
+        const proms = [];
+        for (let i = 0; i < input.length; i++) {
+          const item = input[i];
+          const result = def.element._zod.run({
+            value: item,
+            issues: []
+          }, ctx);
+          if (result instanceof Promise) {
+            proms.push(result.then((result2) => handleArrayResult(result2, payload, i)));
+          } else {
+            handleArrayResult(result, payload, i);
+          }
+        }
+        if (proms.length) {
+          return Promise.all(proms).then(() => payload);
+        }
+        return payload;
+      };
+    });
+    function handlePropertyResult(result, final, key, input) {
+      if (result.issues.length) {
+        final.issues.push(...util.prefixIssues(key, result.issues));
+      }
+      if (result.value === void 0) {
+        if (key in input) {
+          final.value[key] = void 0;
+        }
+      } else {
+        final.value[key] = result.value;
+      }
+    }
+    __name(handlePropertyResult, "handlePropertyResult");
+    function normalizeDef(def) {
+      const keys = Object.keys(def.shape);
+      for (const k of keys) {
+        if (!def.shape?.[k]?._zod?.traits?.has("$ZodType")) {
+          throw new Error(`Invalid element at key "${k}": expected a Zod schema`);
+        }
+      }
+      const okeys = util.optionalKeys(def.shape);
+      return {
+        ...def,
+        keys,
+        keySet: new Set(keys),
+        numKeys: keys.length,
+        optionalKeys: new Set(okeys)
+      };
+    }
+    __name(normalizeDef, "normalizeDef");
+    function handleCatchall(proms, input, payload, ctx, def, inst) {
+      const unrecognized = [];
+      const keySet = def.keySet;
+      const _catchall = def.catchall._zod;
+      const t = _catchall.def.type;
+      for (const key of Object.keys(input)) {
+        if (keySet.has(key))
+          continue;
+        if (t === "never") {
+          unrecognized.push(key);
+          continue;
+        }
+        const r = _catchall.run({ value: input[key], issues: [] }, ctx);
+        if (r instanceof Promise) {
+          proms.push(r.then((r2) => handlePropertyResult(r2, payload, key, input)));
+        } else {
+          handlePropertyResult(r, payload, key, input);
+        }
+      }
+      if (unrecognized.length) {
+        payload.issues.push({
+          code: "unrecognized_keys",
+          keys: unrecognized,
+          input,
+          inst
+        });
+      }
+      if (!proms.length)
+        return payload;
+      return Promise.all(proms).then(() => {
+        return payload;
+      });
+    }
+    __name(handleCatchall, "handleCatchall");
+    exports2.$ZodObject = core.$constructor("$ZodObject", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      const desc = Object.getOwnPropertyDescriptor(def, "shape");
+      if (!desc?.get) {
+        const sh = def.shape;
+        Object.defineProperty(def, "shape", {
+          get: /* @__PURE__ */ __name(() => {
+            const newSh = { ...sh };
+            Object.defineProperty(def, "shape", {
+              value: newSh
+            });
+            return newSh;
+          }, "get")
+        });
+      }
+      const _normalized = util.cached(() => normalizeDef(def));
+      util.defineLazy(inst._zod, "propValues", () => {
+        const shape = def.shape;
+        const propValues = {};
+        for (const key in shape) {
+          const field = shape[key]._zod;
+          if (field.values) {
+            propValues[key] ?? (propValues[key] = /* @__PURE__ */ new Set());
+            for (const v of field.values)
+              propValues[key].add(v);
+          }
+        }
+        return propValues;
+      });
+      const isObject = util.isObject;
+      const catchall = def.catchall;
+      let value;
+      inst._zod.parse = (payload, ctx) => {
+        value ?? (value = _normalized.value);
+        const input = payload.value;
+        if (!isObject(input)) {
+          payload.issues.push({
+            expected: "object",
+            code: "invalid_type",
+            input,
+            inst
+          });
+          return payload;
+        }
+        payload.value = {};
+        const proms = [];
+        const shape = value.shape;
+        for (const key of value.keys) {
+          const el = shape[key];
+          const r = el._zod.run({ value: input[key], issues: [] }, ctx);
+          if (r instanceof Promise) {
+            proms.push(r.then((r2) => handlePropertyResult(r2, payload, key, input)));
+          } else {
+            handlePropertyResult(r, payload, key, input);
+          }
+        }
+        if (!catchall) {
+          return proms.length ? Promise.all(proms).then(() => payload) : payload;
+        }
+        return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);
+      };
+    });
+    exports2.$ZodObjectJIT = core.$constructor("$ZodObjectJIT", (inst, def) => {
+      exports2.$ZodObject.init(inst, def);
+      const superParse = inst._zod.parse;
+      const _normalized = util.cached(() => normalizeDef(def));
+      const generateFastpass = /* @__PURE__ */ __name((shape) => {
+        const doc = new doc_js_1.Doc(["shape", "payload", "ctx"]);
+        const normalized = _normalized.value;
+        const parseStr = /* @__PURE__ */ __name((key) => {
+          const k = util.esc(key);
+          return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;
+        }, "parseStr");
+        doc.write(`const input = payload.value;`);
+        const ids = /* @__PURE__ */ Object.create(null);
+        let counter = 0;
+        for (const key of normalized.keys) {
+          ids[key] = `key_${counter++}`;
+        }
+        doc.write(`const newResult = {};`);
+        for (const key of normalized.keys) {
+          const id = ids[key];
+          const k = util.esc(key);
+          doc.write(`const ${id} = ${parseStr(key)};`);
+          doc.write(`
+        if (${id}.issues.length) {
+          payload.issues = payload.issues.concat(${id}.issues.map(iss => ({
+            ...iss,
+            path: iss.path ? [${k}, ...iss.path] : [${k}]
+          })));
+        }
+        
+        
+        if (${id}.value === undefined) {
+          if (${k} in input) {
+            newResult[${k}] = undefined;
+          }
+        } else {
+          newResult[${k}] = ${id}.value;
+        }
+        
+      `);
+        }
+        doc.write(`payload.value = newResult;`);
+        doc.write(`return payload;`);
+        const fn = doc.compile();
+        return (payload, ctx) => fn(shape, payload, ctx);
+      }, "generateFastpass");
+      let fastpass;
+      const isObject = util.isObject;
+      const jit = !core.globalConfig.jitless;
+      const allowsEval = util.allowsEval;
+      const fastEnabled = jit && allowsEval.value;
+      const catchall = def.catchall;
+      let value;
+      inst._zod.parse = (payload, ctx) => {
+        value ?? (value = _normalized.value);
+        const input = payload.value;
+        if (!isObject(input)) {
+          payload.issues.push({
+            expected: "object",
+            code: "invalid_type",
+            input,
+            inst
+          });
+          return payload;
+        }
+        if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {
+          if (!fastpass)
+            fastpass = generateFastpass(def.shape);
+          payload = fastpass(payload, ctx);
+          if (!catchall)
+            return payload;
+          return handleCatchall([], input, payload, ctx, value, inst);
+        }
+        return superParse(payload, ctx);
+      };
+    });
+    function handleUnionResults(results, final, inst, ctx) {
+      for (const result of results) {
+        if (result.issues.length === 0) {
+          final.value = result.value;
+          return final;
+        }
+      }
+      const nonaborted = results.filter((r) => !util.aborted(r));
+      if (nonaborted.length === 1) {
+        final.value = nonaborted[0].value;
+        return nonaborted[0];
+      }
+      final.issues.push({
+        code: "invalid_union",
+        input: final.value,
+        inst,
+        errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())))
+      });
+      return final;
+    }
+    __name(handleUnionResults, "handleUnionResults");
+    exports2.$ZodUnion = core.$constructor("$ZodUnion", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      util.defineLazy(inst._zod, "optin", () => def.options.some((o) => o._zod.optin === "optional") ? "optional" : void 0);
+      util.defineLazy(inst._zod, "optout", () => def.options.some((o) => o._zod.optout === "optional") ? "optional" : void 0);
+      util.defineLazy(inst._zod, "values", () => {
+        if (def.options.every((o) => o._zod.values)) {
+          return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));
+        }
+        return void 0;
+      });
+      util.defineLazy(inst._zod, "pattern", () => {
+        if (def.options.every((o) => o._zod.pattern)) {
+          const patterns = def.options.map((o) => o._zod.pattern);
+          return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join("|")})$`);
+        }
+        return void 0;
+      });
+      const single = def.options.length === 1;
+      const first = def.options[0]._zod.run;
+      inst._zod.parse = (payload, ctx) => {
+        if (single) {
+          return first(payload, ctx);
+        }
+        let async = false;
+        const results = [];
+        for (const option of def.options) {
+          const result = option._zod.run({
+            value: payload.value,
+            issues: []
+          }, ctx);
+          if (result instanceof Promise) {
+            results.push(result);
+            async = true;
+          } else {
+            if (result.issues.length === 0)
+              return result;
+            results.push(result);
+          }
+        }
+        if (!async)
+          return handleUnionResults(results, payload, inst, ctx);
+        return Promise.all(results).then((results2) => {
+          return handleUnionResults(results2, payload, inst, ctx);
+        });
+      };
+    });
+    exports2.$ZodDiscriminatedUnion = /* @__PURE__ */ core.$constructor("$ZodDiscriminatedUnion", (inst, def) => {
+      exports2.$ZodUnion.init(inst, def);
+      const _super = inst._zod.parse;
+      util.defineLazy(inst._zod, "propValues", () => {
+        const propValues = {};
+        for (const option of def.options) {
+          const pv = option._zod.propValues;
+          if (!pv || Object.keys(pv).length === 0)
+            throw new Error(`Invalid discriminated union option at index "${def.options.indexOf(option)}"`);
+          for (const [k, v] of Object.entries(pv)) {
+            if (!propValues[k])
+              propValues[k] = /* @__PURE__ */ new Set();
+            for (const val of v) {
+              propValues[k].add(val);
+            }
+          }
+        }
+        return propValues;
+      });
+      const disc = util.cached(() => {
+        const opts = def.options;
+        const map = /* @__PURE__ */ new Map();
+        for (const o of opts) {
+          const values = o._zod.propValues?.[def.discriminator];
+          if (!values || values.size === 0)
+            throw new Error(`Invalid discriminated union option at index "${def.options.indexOf(o)}"`);
+          for (const v of values) {
+            if (map.has(v)) {
+              throw new Error(`Duplicate discriminator value "${String(v)}"`);
+            }
+            map.set(v, o);
+          }
+        }
+        return map;
+      });
+      inst._zod.parse = (payload, ctx) => {
+        const input = payload.value;
+        if (!util.isObject(input)) {
+          payload.issues.push({
+            code: "invalid_type",
+            expected: "object",
+            input,
+            inst
+          });
+          return payload;
+        }
+        const opt = disc.value.get(input?.[def.discriminator]);
+        if (opt) {
+          return opt._zod.run(payload, ctx);
+        }
+        if (def.unionFallback) {
+          return _super(payload, ctx);
+        }
+        payload.issues.push({
+          code: "invalid_union",
+          errors: [],
+          note: "No matching discriminator",
+          discriminator: def.discriminator,
+          input,
+          path: [def.discriminator],
+          inst
+        });
+        return payload;
+      };
+    });
+    exports2.$ZodIntersection = core.$constructor("$ZodIntersection", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.parse = (payload, ctx) => {
+        const input = payload.value;
+        const left = def.left._zod.run({ value: input, issues: [] }, ctx);
+        const right = def.right._zod.run({ value: input, issues: [] }, ctx);
+        const async = left instanceof Promise || right instanceof Promise;
+        if (async) {
+          return Promise.all([left, right]).then(([left2, right2]) => {
+            return handleIntersectionResults(payload, left2, right2);
+          });
+        }
+        return handleIntersectionResults(payload, left, right);
+      };
+    });
+    function mergeValues(a, b) {
+      if (a === b) {
+        return { valid: true, data: a };
+      }
+      if (a instanceof Date && b instanceof Date && +a === +b) {
+        return { valid: true, data: a };
+      }
+      if (util.isPlainObject(a) && util.isPlainObject(b)) {
+        const bKeys = Object.keys(b);
+        const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);
+        const newObj = { ...a, ...b };
+        for (const key of sharedKeys) {
+          const sharedValue = mergeValues(a[key], b[key]);
+          if (!sharedValue.valid) {
+            return {
+              valid: false,
+              mergeErrorPath: [key, ...sharedValue.mergeErrorPath]
+            };
+          }
+          newObj[key] = sharedValue.data;
+        }
+        return { valid: true, data: newObj };
+      }
+      if (Array.isArray(a) && Array.isArray(b)) {
+        if (a.length !== b.length) {
+          return { valid: false, mergeErrorPath: [] };
+        }
+        const newArray = [];
+        for (let index = 0; index < a.length; index++) {
+          const itemA = a[index];
+          const itemB = b[index];
+          const sharedValue = mergeValues(itemA, itemB);
+          if (!sharedValue.valid) {
+            return {
+              valid: false,
+              mergeErrorPath: [index, ...sharedValue.mergeErrorPath]
+            };
+          }
+          newArray.push(sharedValue.data);
+        }
+        return { valid: true, data: newArray };
+      }
+      return { valid: false, mergeErrorPath: [] };
+    }
+    __name(mergeValues, "mergeValues");
+    function handleIntersectionResults(result, left, right) {
+      if (left.issues.length) {
+        result.issues.push(...left.issues);
+      }
+      if (right.issues.length) {
+        result.issues.push(...right.issues);
+      }
+      if (util.aborted(result))
+        return result;
+      const merged = mergeValues(left.value, right.value);
+      if (!merged.valid) {
+        throw new Error(`Unmergable intersection. Error path: ${JSON.stringify(merged.mergeErrorPath)}`);
+      }
+      result.value = merged.data;
+      return result;
+    }
+    __name(handleIntersectionResults, "handleIntersectionResults");
+    exports2.$ZodTuple = core.$constructor("$ZodTuple", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      const items = def.items;
+      const optStart = items.length - [...items].reverse().findIndex((item) => item._zod.optin !== "optional");
+      inst._zod.parse = (payload, ctx) => {
+        const input = payload.value;
+        if (!Array.isArray(input)) {
+          payload.issues.push({
+            input,
+            inst,
+            expected: "tuple",
+            code: "invalid_type"
+          });
+          return payload;
+        }
+        payload.value = [];
+        const proms = [];
+        if (!def.rest) {
+          const tooBig = input.length > items.length;
+          const tooSmall = input.length < optStart - 1;
+          if (tooBig || tooSmall) {
+            payload.issues.push({
+              ...tooBig ? { code: "too_big", maximum: items.length } : { code: "too_small", minimum: items.length },
+              input,
+              inst,
+              origin: "array"
+            });
+            return payload;
+          }
+        }
+        let i = -1;
+        for (const item of items) {
+          i++;
+          if (i >= input.length) {
+            if (i >= optStart)
+              continue;
+          }
+          const result = item._zod.run({
+            value: input[i],
+            issues: []
+          }, ctx);
+          if (result instanceof Promise) {
+            proms.push(result.then((result2) => handleTupleResult(result2, payload, i)));
+          } else {
+            handleTupleResult(result, payload, i);
+          }
+        }
+        if (def.rest) {
+          const rest = input.slice(items.length);
+          for (const el of rest) {
+            i++;
+            const result = def.rest._zod.run({
+              value: el,
+              issues: []
+            }, ctx);
+            if (result instanceof Promise) {
+              proms.push(result.then((result2) => handleTupleResult(result2, payload, i)));
+            } else {
+              handleTupleResult(result, payload, i);
+            }
+          }
+        }
+        if (proms.length)
+          return Promise.all(proms).then(() => payload);
+        return payload;
+      };
+    });
+    function handleTupleResult(result, final, index) {
+      if (result.issues.length) {
+        final.issues.push(...util.prefixIssues(index, result.issues));
+      }
+      final.value[index] = result.value;
+    }
+    __name(handleTupleResult, "handleTupleResult");
+    exports2.$ZodRecord = core.$constructor("$ZodRecord", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.parse = (payload, ctx) => {
+        const input = payload.value;
+        if (!util.isPlainObject(input)) {
+          payload.issues.push({
+            expected: "record",
+            code: "invalid_type",
+            input,
+            inst
+          });
+          return payload;
+        }
+        const proms = [];
+        if (def.keyType._zod.values) {
+          const values = def.keyType._zod.values;
+          payload.value = {};
+          for (const key of values) {
+            if (typeof key === "string" || typeof key === "number" || typeof key === "symbol") {
+              const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);
+              if (result instanceof Promise) {
+                proms.push(result.then((result2) => {
+                  if (result2.issues.length) {
+                    payload.issues.push(...util.prefixIssues(key, result2.issues));
+                  }
+                  payload.value[key] = result2.value;
+                }));
+              } else {
+                if (result.issues.length) {
+                  payload.issues.push(...util.prefixIssues(key, result.issues));
+                }
+                payload.value[key] = result.value;
+              }
+            }
+          }
+          let unrecognized;
+          for (const key in input) {
+            if (!values.has(key)) {
+              unrecognized = unrecognized ?? [];
+              unrecognized.push(key);
+            }
+          }
+          if (unrecognized && unrecognized.length > 0) {
+            payload.issues.push({
+              code: "unrecognized_keys",
+              input,
+              inst,
+              keys: unrecognized
+            });
+          }
+        } else {
+          payload.value = {};
+          for (const key of Reflect.ownKeys(input)) {
+            if (key === "__proto__")
+              continue;
+            const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);
+            if (keyResult instanceof Promise) {
+              throw new Error("Async schemas not supported in object keys currently");
+            }
+            if (keyResult.issues.length) {
+              payload.issues.push({
+                code: "invalid_key",
+                origin: "record",
+                issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),
+                input: key,
+                path: [key],
+                inst
+              });
+              payload.value[keyResult.value] = keyResult.value;
+              continue;
+            }
+            const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);
+            if (result instanceof Promise) {
+              proms.push(result.then((result2) => {
+                if (result2.issues.length) {
+                  payload.issues.push(...util.prefixIssues(key, result2.issues));
+                }
+                payload.value[keyResult.value] = result2.value;
+              }));
+            } else {
+              if (result.issues.length) {
+                payload.issues.push(...util.prefixIssues(key, result.issues));
+              }
+              payload.value[keyResult.value] = result.value;
+            }
+          }
+        }
+        if (proms.length) {
+          return Promise.all(proms).then(() => payload);
+        }
+        return payload;
+      };
+    });
+    exports2.$ZodMap = core.$constructor("$ZodMap", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.parse = (payload, ctx) => {
+        const input = payload.value;
+        if (!(input instanceof Map)) {
+          payload.issues.push({
+            expected: "map",
+            code: "invalid_type",
+            input,
+            inst
+          });
+          return payload;
+        }
+        const proms = [];
+        payload.value = /* @__PURE__ */ new Map();
+        for (const [key, value] of input) {
+          const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);
+          const valueResult = def.valueType._zod.run({ value, issues: [] }, ctx);
+          if (keyResult instanceof Promise || valueResult instanceof Promise) {
+            proms.push(Promise.all([keyResult, valueResult]).then(([keyResult2, valueResult2]) => {
+              handleMapResult(keyResult2, valueResult2, payload, key, input, inst, ctx);
+            }));
+          } else {
+            handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);
+          }
+        }
+        if (proms.length)
+          return Promise.all(proms).then(() => payload);
+        return payload;
+      };
+    });
+    function handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {
+      if (keyResult.issues.length) {
+        if (util.propertyKeyTypes.has(typeof key)) {
+          final.issues.push(...util.prefixIssues(key, keyResult.issues));
+        } else {
+          final.issues.push({
+            code: "invalid_key",
+            origin: "map",
+            input,
+            inst,
+            issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))
+          });
+        }
+      }
+      if (valueResult.issues.length) {
+        if (util.propertyKeyTypes.has(typeof key)) {
+          final.issues.push(...util.prefixIssues(key, valueResult.issues));
+        } else {
+          final.issues.push({
+            origin: "map",
+            code: "invalid_element",
+            input,
+            inst,
+            key,
+            issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))
+          });
+        }
+      }
+      final.value.set(keyResult.value, valueResult.value);
+    }
+    __name(handleMapResult, "handleMapResult");
+    exports2.$ZodSet = core.$constructor("$ZodSet", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.parse = (payload, ctx) => {
+        const input = payload.value;
+        if (!(input instanceof Set)) {
+          payload.issues.push({
+            input,
+            inst,
+            expected: "set",
+            code: "invalid_type"
+          });
+          return payload;
+        }
+        const proms = [];
+        payload.value = /* @__PURE__ */ new Set();
+        for (const item of input) {
+          const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);
+          if (result instanceof Promise) {
+            proms.push(result.then((result2) => handleSetResult(result2, payload)));
+          } else
+            handleSetResult(result, payload);
+        }
+        if (proms.length)
+          return Promise.all(proms).then(() => payload);
+        return payload;
+      };
+    });
+    function handleSetResult(result, final) {
+      if (result.issues.length) {
+        final.issues.push(...result.issues);
+      }
+      final.value.add(result.value);
+    }
+    __name(handleSetResult, "handleSetResult");
+    exports2.$ZodEnum = core.$constructor("$ZodEnum", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      const values = util.getEnumValues(def.entries);
+      const valuesSet = new Set(values);
+      inst._zod.values = valuesSet;
+      inst._zod.pattern = new RegExp(`^(${values.filter((k) => util.propertyKeyTypes.has(typeof k)).map((o) => typeof o === "string" ? util.escapeRegex(o) : o.toString()).join("|")})$`);
+      inst._zod.parse = (payload, _ctx) => {
+        const input = payload.value;
+        if (valuesSet.has(input)) {
+          return payload;
+        }
+        payload.issues.push({
+          code: "invalid_value",
+          values,
+          input,
+          inst
+        });
+        return payload;
+      };
+    });
+    exports2.$ZodLiteral = core.$constructor("$ZodLiteral", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      if (def.values.length === 0) {
+        throw new Error("Cannot create literal schema with no valid values");
+      }
+      inst._zod.values = new Set(def.values);
+      inst._zod.pattern = new RegExp(`^(${def.values.map((o) => typeof o === "string" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)).join("|")})$`);
+      inst._zod.parse = (payload, _ctx) => {
+        const input = payload.value;
+        if (inst._zod.values.has(input)) {
+          return payload;
+        }
+        payload.issues.push({
+          code: "invalid_value",
+          values: def.values,
+          input,
+          inst
+        });
+        return payload;
+      };
+    });
+    exports2.$ZodFile = core.$constructor("$ZodFile", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.parse = (payload, _ctx) => {
+        const input = payload.value;
+        if (input instanceof File)
+          return payload;
+        payload.issues.push({
+          expected: "file",
+          code: "invalid_type",
+          input,
+          inst
+        });
+        return payload;
+      };
+    });
+    exports2.$ZodTransform = core.$constructor("$ZodTransform", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.parse = (payload, ctx) => {
+        if (ctx.direction === "backward") {
+          throw new core.$ZodEncodeError(inst.constructor.name);
+        }
+        const _out = def.transform(payload.value, payload);
+        if (ctx.async) {
+          const output = _out instanceof Promise ? _out : Promise.resolve(_out);
+          return output.then((output2) => {
+            payload.value = output2;
+            return payload;
+          });
+        }
+        if (_out instanceof Promise) {
+          throw new core.$ZodAsyncError();
+        }
+        payload.value = _out;
+        return payload;
+      };
+    });
+    function handleOptionalResult(result, input) {
+      if (result.issues.length && input === void 0) {
+        return { issues: [], value: void 0 };
+      }
+      return result;
+    }
+    __name(handleOptionalResult, "handleOptionalResult");
+    exports2.$ZodOptional = core.$constructor("$ZodOptional", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.optin = "optional";
+      inst._zod.optout = "optional";
+      util.defineLazy(inst._zod, "values", () => {
+        return def.innerType._zod.values ? /* @__PURE__ */ new Set([...def.innerType._zod.values, void 0]) : void 0;
+      });
+      util.defineLazy(inst._zod, "pattern", () => {
+        const pattern = def.innerType._zod.pattern;
+        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : void 0;
+      });
+      inst._zod.parse = (payload, ctx) => {
+        if (def.innerType._zod.optin === "optional") {
+          const result = def.innerType._zod.run(payload, ctx);
+          if (result instanceof Promise)
+            return result.then((r) => handleOptionalResult(r, payload.value));
+          return handleOptionalResult(result, payload.value);
+        }
+        if (payload.value === void 0) {
+          return payload;
+        }
+        return def.innerType._zod.run(payload, ctx);
+      };
+    });
+    exports2.$ZodNullable = core.$constructor("$ZodNullable", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      util.defineLazy(inst._zod, "optin", () => def.innerType._zod.optin);
+      util.defineLazy(inst._zod, "optout", () => def.innerType._zod.optout);
+      util.defineLazy(inst._zod, "pattern", () => {
+        const pattern = def.innerType._zod.pattern;
+        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : void 0;
+      });
+      util.defineLazy(inst._zod, "values", () => {
+        return def.innerType._zod.values ? /* @__PURE__ */ new Set([...def.innerType._zod.values, null]) : void 0;
+      });
+      inst._zod.parse = (payload, ctx) => {
+        if (payload.value === null)
+          return payload;
+        return def.innerType._zod.run(payload, ctx);
+      };
+    });
+    exports2.$ZodDefault = core.$constructor("$ZodDefault", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.optin = "optional";
+      util.defineLazy(inst._zod, "values", () => def.innerType._zod.values);
+      inst._zod.parse = (payload, ctx) => {
+        if (ctx.direction === "backward") {
+          return def.innerType._zod.run(payload, ctx);
+        }
+        if (payload.value === void 0) {
+          payload.value = def.defaultValue;
+          return payload;
+        }
+        const result = def.innerType._zod.run(payload, ctx);
+        if (result instanceof Promise) {
+          return result.then((result2) => handleDefaultResult(result2, def));
+        }
+        return handleDefaultResult(result, def);
+      };
+    });
+    function handleDefaultResult(payload, def) {
+      if (payload.value === void 0) {
+        payload.value = def.defaultValue;
+      }
+      return payload;
+    }
+    __name(handleDefaultResult, "handleDefaultResult");
+    exports2.$ZodPrefault = core.$constructor("$ZodPrefault", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.optin = "optional";
+      util.defineLazy(inst._zod, "values", () => def.innerType._zod.values);
+      inst._zod.parse = (payload, ctx) => {
+        if (ctx.direction === "backward") {
+          return def.innerType._zod.run(payload, ctx);
+        }
+        if (payload.value === void 0) {
+          payload.value = def.defaultValue;
+        }
+        return def.innerType._zod.run(payload, ctx);
+      };
+    });
+    exports2.$ZodNonOptional = core.$constructor("$ZodNonOptional", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      util.defineLazy(inst._zod, "values", () => {
+        const v = def.innerType._zod.values;
+        return v ? new Set([...v].filter((x) => x !== void 0)) : void 0;
+      });
+      inst._zod.parse = (payload, ctx) => {
+        const result = def.innerType._zod.run(payload, ctx);
+        if (result instanceof Promise) {
+          return result.then((result2) => handleNonOptionalResult(result2, inst));
+        }
+        return handleNonOptionalResult(result, inst);
+      };
+    });
+    function handleNonOptionalResult(payload, inst) {
+      if (!payload.issues.length && payload.value === void 0) {
+        payload.issues.push({
+          code: "invalid_type",
+          expected: "nonoptional",
+          input: payload.value,
+          inst
+        });
+      }
+      return payload;
+    }
+    __name(handleNonOptionalResult, "handleNonOptionalResult");
+    exports2.$ZodSuccess = core.$constructor("$ZodSuccess", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.parse = (payload, ctx) => {
+        if (ctx.direction === "backward") {
+          throw new core.$ZodEncodeError("ZodSuccess");
+        }
+        const result = def.innerType._zod.run(payload, ctx);
+        if (result instanceof Promise) {
+          return result.then((result2) => {
+            payload.value = result2.issues.length === 0;
+            return payload;
+          });
+        }
+        payload.value = result.issues.length === 0;
+        return payload;
+      };
+    });
+    exports2.$ZodCatch = core.$constructor("$ZodCatch", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      util.defineLazy(inst._zod, "optin", () => def.innerType._zod.optin);
+      util.defineLazy(inst._zod, "optout", () => def.innerType._zod.optout);
+      util.defineLazy(inst._zod, "values", () => def.innerType._zod.values);
+      inst._zod.parse = (payload, ctx) => {
+        if (ctx.direction === "backward") {
+          return def.innerType._zod.run(payload, ctx);
+        }
+        const result = def.innerType._zod.run(payload, ctx);
+        if (result instanceof Promise) {
+          return result.then((result2) => {
+            payload.value = result2.value;
+            if (result2.issues.length) {
+              payload.value = def.catchValue({
+                ...payload,
+                error: {
+                  issues: result2.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))
+                },
+                input: payload.value
+              });
+              payload.issues = [];
+            }
+            return payload;
+          });
+        }
+        payload.value = result.value;
+        if (result.issues.length) {
+          payload.value = def.catchValue({
+            ...payload,
+            error: {
+              issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))
+            },
+            input: payload.value
+          });
+          payload.issues = [];
+        }
+        return payload;
+      };
+    });
+    exports2.$ZodNaN = core.$constructor("$ZodNaN", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.parse = (payload, _ctx) => {
+        if (typeof payload.value !== "number" || !Number.isNaN(payload.value)) {
+          payload.issues.push({
+            input: payload.value,
+            inst,
+            expected: "nan",
+            code: "invalid_type"
+          });
+          return payload;
+        }
+        return payload;
+      };
+    });
+    exports2.$ZodPipe = core.$constructor("$ZodPipe", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      util.defineLazy(inst._zod, "values", () => def.in._zod.values);
+      util.defineLazy(inst._zod, "optin", () => def.in._zod.optin);
+      util.defineLazy(inst._zod, "optout", () => def.out._zod.optout);
+      util.defineLazy(inst._zod, "propValues", () => def.in._zod.propValues);
+      inst._zod.parse = (payload, ctx) => {
+        if (ctx.direction === "backward") {
+          const right = def.out._zod.run(payload, ctx);
+          if (right instanceof Promise) {
+            return right.then((right2) => handlePipeResult(right2, def.in, ctx));
+          }
+          return handlePipeResult(right, def.in, ctx);
+        }
+        const left = def.in._zod.run(payload, ctx);
+        if (left instanceof Promise) {
+          return left.then((left2) => handlePipeResult(left2, def.out, ctx));
+        }
+        return handlePipeResult(left, def.out, ctx);
+      };
+    });
+    function handlePipeResult(left, next, ctx) {
+      if (left.issues.length) {
+        left.aborted = true;
+        return left;
+      }
+      return next._zod.run({ value: left.value, issues: left.issues }, ctx);
+    }
+    __name(handlePipeResult, "handlePipeResult");
+    exports2.$ZodCodec = core.$constructor("$ZodCodec", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      util.defineLazy(inst._zod, "values", () => def.in._zod.values);
+      util.defineLazy(inst._zod, "optin", () => def.in._zod.optin);
+      util.defineLazy(inst._zod, "optout", () => def.out._zod.optout);
+      util.defineLazy(inst._zod, "propValues", () => def.in._zod.propValues);
+      inst._zod.parse = (payload, ctx) => {
+        const direction = ctx.direction || "forward";
+        if (direction === "forward") {
+          const left = def.in._zod.run(payload, ctx);
+          if (left instanceof Promise) {
+            return left.then((left2) => handleCodecAResult(left2, def, ctx));
+          }
+          return handleCodecAResult(left, def, ctx);
+        } else {
+          const right = def.out._zod.run(payload, ctx);
+          if (right instanceof Promise) {
+            return right.then((right2) => handleCodecAResult(right2, def, ctx));
+          }
+          return handleCodecAResult(right, def, ctx);
+        }
+      };
+    });
+    function handleCodecAResult(result, def, ctx) {
+      if (result.issues.length) {
+        result.aborted = true;
+        return result;
+      }
+      const direction = ctx.direction || "forward";
+      if (direction === "forward") {
+        const transformed = def.transform(result.value, result);
+        if (transformed instanceof Promise) {
+          return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));
+        }
+        return handleCodecTxResult(result, transformed, def.out, ctx);
+      } else {
+        const transformed = def.reverseTransform(result.value, result);
+        if (transformed instanceof Promise) {
+          return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));
+        }
+        return handleCodecTxResult(result, transformed, def.in, ctx);
+      }
+    }
+    __name(handleCodecAResult, "handleCodecAResult");
+    function handleCodecTxResult(left, value, nextSchema, ctx) {
+      if (left.issues.length) {
+        left.aborted = true;
+        return left;
+      }
+      return nextSchema._zod.run({ value, issues: left.issues }, ctx);
+    }
+    __name(handleCodecTxResult, "handleCodecTxResult");
+    exports2.$ZodReadonly = core.$constructor("$ZodReadonly", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      util.defineLazy(inst._zod, "propValues", () => def.innerType._zod.propValues);
+      util.defineLazy(inst._zod, "values", () => def.innerType._zod.values);
+      util.defineLazy(inst._zod, "optin", () => def.innerType._zod.optin);
+      util.defineLazy(inst._zod, "optout", () => def.innerType._zod.optout);
+      inst._zod.parse = (payload, ctx) => {
+        if (ctx.direction === "backward") {
+          return def.innerType._zod.run(payload, ctx);
+        }
+        const result = def.innerType._zod.run(payload, ctx);
+        if (result instanceof Promise) {
+          return result.then(handleReadonlyResult);
+        }
+        return handleReadonlyResult(result);
+      };
+    });
+    function handleReadonlyResult(payload) {
+      payload.value = Object.freeze(payload.value);
+      return payload;
+    }
+    __name(handleReadonlyResult, "handleReadonlyResult");
+    exports2.$ZodTemplateLiteral = core.$constructor("$ZodTemplateLiteral", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      const regexParts = [];
+      for (const part of def.parts) {
+        if (typeof part === "object" && part !== null) {
+          if (!part._zod.pattern) {
+            throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);
+          }
+          const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;
+          if (!source)
+            throw new Error(`Invalid template literal part: ${part._zod.traits}`);
+          const start = source.startsWith("^") ? 1 : 0;
+          const end = source.endsWith("$") ? source.length - 1 : source.length;
+          regexParts.push(source.slice(start, end));
+        } else if (part === null || util.primitiveTypes.has(typeof part)) {
+          regexParts.push(util.escapeRegex(`${part}`));
+        } else {
+          throw new Error(`Invalid template literal part: ${part}`);
+        }
+      }
+      inst._zod.pattern = new RegExp(`^${regexParts.join("")}$`);
+      inst._zod.parse = (payload, _ctx) => {
+        if (typeof payload.value !== "string") {
+          payload.issues.push({
+            input: payload.value,
+            inst,
+            expected: "template_literal",
+            code: "invalid_type"
+          });
+          return payload;
+        }
+        inst._zod.pattern.lastIndex = 0;
+        if (!inst._zod.pattern.test(payload.value)) {
+          payload.issues.push({
+            input: payload.value,
+            inst,
+            code: "invalid_format",
+            format: def.format ?? "template_literal",
+            pattern: inst._zod.pattern.source
+          });
+          return payload;
+        }
+        return payload;
+      };
+    });
+    exports2.$ZodFunction = core.$constructor("$ZodFunction", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._def = def;
+      inst._zod.def = def;
+      inst.implement = (func) => {
+        if (typeof func !== "function") {
+          throw new Error("implement() must be called with a function");
+        }
+        return function(...args) {
+          const parsedArgs = inst._def.input ? (0, parse_js_1.parse)(inst._def.input, args) : args;
+          const result = Reflect.apply(func, this, parsedArgs);
+          if (inst._def.output) {
+            return (0, parse_js_1.parse)(inst._def.output, result);
+          }
+          return result;
+        };
+      };
+      inst.implementAsync = (func) => {
+        if (typeof func !== "function") {
+          throw new Error("implementAsync() must be called with a function");
+        }
+        return async function(...args) {
+          const parsedArgs = inst._def.input ? await (0, parse_js_1.parseAsync)(inst._def.input, args) : args;
+          const result = await Reflect.apply(func, this, parsedArgs);
+          if (inst._def.output) {
+            return await (0, parse_js_1.parseAsync)(inst._def.output, result);
+          }
+          return result;
+        };
+      };
+      inst._zod.parse = (payload, _ctx) => {
+        if (typeof payload.value !== "function") {
+          payload.issues.push({
+            code: "invalid_type",
+            expected: "function",
+            input: payload.value,
+            inst
+          });
+          return payload;
+        }
+        const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === "promise";
+        if (hasPromiseOutput) {
+          payload.value = inst.implementAsync(payload.value);
+        } else {
+          payload.value = inst.implement(payload.value);
+        }
+        return payload;
+      };
+      inst.input = (...args) => {
+        const F = inst.constructor;
+        if (Array.isArray(args[0])) {
+          return new F({
+            type: "function",
+            input: new exports2.$ZodTuple({
+              type: "tuple",
+              items: args[0],
+              rest: args[1]
+            }),
+            output: inst._def.output
+          });
+        }
+        return new F({
+          type: "function",
+          input: args[0],
+          output: inst._def.output
+        });
+      };
+      inst.output = (output) => {
+        const F = inst.constructor;
+        return new F({
+          type: "function",
+          input: inst._def.input,
+          output
+        });
+      };
+      return inst;
+    });
+    exports2.$ZodPromise = core.$constructor("$ZodPromise", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      inst._zod.parse = (payload, ctx) => {
+        return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));
+      };
+    });
+    exports2.$ZodLazy = core.$constructor("$ZodLazy", (inst, def) => {
+      exports2.$ZodType.init(inst, def);
+      util.defineLazy(inst._zod, "innerType", () => def.getter());
+      util.defineLazy(inst._zod, "pattern", () => inst._zod.innerType._zod.pattern);
+      util.defineLazy(inst._zod, "propValues", () => inst._zod.innerType._zod.propValues);
+      util.defineLazy(inst._zod, "optin", () => inst._zod.innerType._zod.optin ?? void 0);
+      util.defineLazy(inst._zod, "optout", () => inst._zod.innerType._zod.optout ?? void 0);
+      inst._zod.parse = (payload, ctx) => {
+        const inner = inst._zod.innerType;
+        return inner._zod.run(payload, ctx);
+      };
+    });
+    exports2.$ZodCustom = core.$constructor("$ZodCustom", (inst, def) => {
+      checks.$ZodCheck.init(inst, def);
+      exports2.$ZodType.init(inst, def);
+      inst._zod.parse = (payload, _) => {
+        return payload;
+      };
+      inst._zod.check = (payload) => {
+        const input = payload.value;
+        const r = def.fn(input);
+        if (r instanceof Promise) {
+          return r.then((r2) => handleRefineResult(r2, payload, input, inst));
+        }
+        handleRefineResult(r, payload, input, inst);
+        return;
+      };
+    });
+    function handleRefineResult(result, payload, input, inst) {
+      if (!result) {
+        const _iss = {
+          code: "custom",
+          input,
+          inst,
+          // incorporates params.error into issue reporting
+          path: [...inst._zod.def.path ?? []],
+          // incorporates params.error into issue reporting
+          continue: !inst._zod.def.abort
+          // params: inst._zod.def.params,
+        };
+        if (inst._zod.def.params)
+          _iss.params = inst._zod.def.params;
+        payload.issues.push(util.issue(_iss));
+      }
+    }
+    __name(handleRefineResult, "handleRefineResult");
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ar.cjs
+var require_ar = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ar.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "حرف", verb: "أن يحوي" },
+        file: { unit: "بايت", verb: "أن يحوي" },
+        array: { unit: "عنصر", verb: "أن يحوي" },
+        set: { unit: "عنصر", verb: "أن يحوي" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "number";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "array";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "مدخل",
+        email: "بريد إلكتروني",
+        url: "رابط",
+        emoji: "إيموجي",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "تاريخ ووقت بمعيار ISO",
+        date: "تاريخ بمعيار ISO",
+        time: "وقت بمعيار ISO",
+        duration: "مدة بمعيار ISO",
+        ipv4: "عنوان IPv4",
+        ipv6: "عنوان IPv6",
+        cidrv4: "مدى عناوين بصيغة IPv4",
+        cidrv6: "مدى عناوين بصيغة IPv6",
+        base64: "نَص بترميز base64-encoded",
+        base64url: "نَص بترميز base64url-encoded",
+        json_string: "نَص على هيئة JSON",
+        e164: "رقم هاتف بمعيار E.164",
+        jwt: "JWT",
+        template_literal: "مدخل"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `مدخلات غير مقبولة: يفترض إدخال ${issue.expected}، ولكن تم إدخال ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `مدخلات غير مقبولة: يفترض إدخال ${util.stringifyPrimitive(issue.values[0])}`;
+            return `اختيار غير مقبول: يتوقع انتقاء أحد هذه الخيارات: ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return ` أكبر من اللازم: يفترض أن تكون ${issue.origin ?? "القيمة"} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? "عنصر"}`;
+            return `أكبر من اللازم: يفترض أن تكون ${issue.origin ?? "القيمة"} ${adj} ${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `أصغر من اللازم: يفترض لـ ${issue.origin} أن يكون ${adj} ${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `أصغر من اللازم: يفترض لـ ${issue.origin} أن يكون ${adj} ${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `نَص غير مقبول: يجب أن يبدأ بـ "${issue.prefix}"`;
+            if (_issue.format === "ends_with")
+              return `نَص غير مقبول: يجب أن ينتهي بـ "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `نَص غير مقبول: يجب أن يتضمَّن "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `نَص غير مقبول: يجب أن يطابق النمط ${_issue.pattern}`;
+            return `${Nouns[_issue.format] ?? issue.format} غير مقبول`;
+          }
+          case "not_multiple_of":
+            return `رقم غير مقبول: يجب أن يكون من مضاعفات ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `معرف${issue.keys.length > 1 ? "ات" : ""} غريب${issue.keys.length > 1 ? "ة" : ""}: ${util.joinValues(issue.keys, "، ")}`;
+          case "invalid_key":
+            return `معرف غير مقبول في ${issue.origin}`;
+          case "invalid_union":
+            return "مدخل غير مقبول";
+          case "invalid_element":
+            return `مدخل غير مقبول في ${issue.origin}`;
+          default:
+            return "مدخل غير مقبول";
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/az.cjs
+var require_az = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/az.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "simvol", verb: "olmalıdır" },
+        file: { unit: "bayt", verb: "olmalıdır" },
+        array: { unit: "element", verb: "olmalıdır" },
+        set: { unit: "element", verb: "olmalıdır" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "number";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "array";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "input",
+        email: "email address",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO datetime",
+        date: "ISO date",
+        time: "ISO time",
+        duration: "ISO duration",
+        ipv4: "IPv4 address",
+        ipv6: "IPv6 address",
+        cidrv4: "IPv4 range",
+        cidrv6: "IPv6 range",
+        base64: "base64-encoded string",
+        base64url: "base64url-encoded string",
+        json_string: "JSON string",
+        e164: "E.164 number",
+        jwt: "JWT",
+        template_literal: "input"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Yanlış dəyər: gözlənilən ${issue.expected}, daxil olan ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Yanlış dəyər: gözlənilən ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Yanlış seçim: aşağıdakılardan biri olmalıdır: ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Çox böyük: gözlənilən ${issue.origin ?? "dəyər"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? "element"}`;
+            return `Çox böyük: gözlənilən ${issue.origin ?? "dəyər"} ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Çox kiçik: gözlənilən ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            return `Çox kiçik: gözlənilən ${issue.origin} ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `Yanlış mətn: "${_issue.prefix}" ilə başlamalıdır`;
+            if (_issue.format === "ends_with")
+              return `Yanlış mətn: "${_issue.suffix}" ilə bitməlidir`;
+            if (_issue.format === "includes")
+              return `Yanlış mətn: "${_issue.includes}" daxil olmalıdır`;
+            if (_issue.format === "regex")
+              return `Yanlış mətn: ${_issue.pattern} şablonuna uyğun olmalıdır`;
+            return `Yanlış ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Yanlış ədəd: ${issue.divisor} ilə bölünə bilən olmalıdır`;
+          case "unrecognized_keys":
+            return `Tanınmayan açar${issue.keys.length > 1 ? "lar" : ""}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `${issue.origin} daxilində yanlış açar`;
+          case "invalid_union":
+            return "Yanlış dəyər";
+          case "invalid_element":
+            return `${issue.origin} daxilində yanlış dəyər`;
+          default:
+            return `Yanlış dəyər`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/be.cjs
+var require_be = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/be.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    function getBelarusianPlural(count, one, few, many) {
+      const absCount = Math.abs(count);
+      const lastDigit = absCount % 10;
+      const lastTwoDigits = absCount % 100;
+      if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {
+        return many;
+      }
+      if (lastDigit === 1) {
+        return one;
+      }
+      if (lastDigit >= 2 && lastDigit <= 4) {
+        return few;
+      }
+      return many;
+    }
+    __name(getBelarusianPlural, "getBelarusianPlural");
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: {
+          unit: {
+            one: "сімвал",
+            few: "сімвалы",
+            many: "сімвалаў"
+          },
+          verb: "мець"
+        },
+        array: {
+          unit: {
+            one: "элемент",
+            few: "элементы",
+            many: "элементаў"
+          },
+          verb: "мець"
+        },
+        set: {
+          unit: {
+            one: "элемент",
+            few: "элементы",
+            many: "элементаў"
+          },
+          verb: "мець"
+        },
+        file: {
+          unit: {
+            one: "байт",
+            few: "байты",
+            many: "байтаў"
+          },
+          verb: "мець"
+        }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "лік";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "масіў";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "увод",
+        email: "email адрас",
+        url: "URL",
+        emoji: "эмодзі",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO дата і час",
+        date: "ISO дата",
+        time: "ISO час",
+        duration: "ISO працягласць",
+        ipv4: "IPv4 адрас",
+        ipv6: "IPv6 адрас",
+        cidrv4: "IPv4 дыяпазон",
+        cidrv6: "IPv6 дыяпазон",
+        base64: "радок у фармаце base64",
+        base64url: "радок у фармаце base64url",
+        json_string: "JSON радок",
+        e164: "нумар E.164",
+        jwt: "JWT",
+        template_literal: "увод"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Няправільны ўвод: чакаўся ${issue.expected}, атрымана ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Няправільны ўвод: чакалася ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Няправільны варыянт: чакаўся адзін з ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              const maxValue = Number(issue.maximum);
+              const unit = getBelarusianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);
+              return `Занадта вялікі: чакалася, што ${issue.origin ?? "значэнне"} павінна ${sizing.verb} ${adj}${issue.maximum.toString()} ${unit}`;
+            }
+            return `Занадта вялікі: чакалася, што ${issue.origin ?? "значэнне"} павінна быць ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              const minValue = Number(issue.minimum);
+              const unit = getBelarusianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);
+              return `Занадта малы: чакалася, што ${issue.origin} павінна ${sizing.verb} ${adj}${issue.minimum.toString()} ${unit}`;
+            }
+            return `Занадта малы: чакалася, што ${issue.origin} павінна быць ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `Няправільны радок: павінен пачынацца з "${_issue.prefix}"`;
+            if (_issue.format === "ends_with")
+              return `Няправільны радок: павінен заканчвацца на "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Няправільны радок: павінен змяшчаць "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Няправільны радок: павінен адпавядаць шаблону ${_issue.pattern}`;
+            return `Няправільны ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Няправільны лік: павінен быць кратным ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `Нераспазнаны ${issue.keys.length > 1 ? "ключы" : "ключ"}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Няправільны ключ у ${issue.origin}`;
+          case "invalid_union":
+            return "Няправільны ўвод";
+          case "invalid_element":
+            return `Няправільнае значэнне ў ${issue.origin}`;
+          default:
+            return `Няправільны ўвод`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/bg.cjs
+var require_bg = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/bg.cjs"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.parsedType = void 0;
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var parsedType = /* @__PURE__ */ __name((data) => {
+      const t = typeof data;
+      switch (t) {
+        case "number": {
+          return Number.isNaN(data) ? "NaN" : "число";
+        }
+        case "object": {
+          if (Array.isArray(data)) {
+            return "масив";
+          }
+          if (data === null) {
+            return "null";
+          }
+          if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+            return data.constructor.name;
+          }
+        }
+      }
+      return t;
+    }, "parsedType");
+    exports2.parsedType = parsedType;
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "символа", verb: "да съдържа" },
+        file: { unit: "байта", verb: "да съдържа" },
+        array: { unit: "елемента", verb: "да съдържа" },
+        set: { unit: "елемента", verb: "да съдържа" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const Nouns = {
+        regex: "вход",
+        email: "имейл адрес",
+        url: "URL",
+        emoji: "емоджи",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO време",
+        date: "ISO дата",
+        time: "ISO време",
+        duration: "ISO продължителност",
+        ipv4: "IPv4 адрес",
+        ipv6: "IPv6 адрес",
+        cidrv4: "IPv4 диапазон",
+        cidrv6: "IPv6 диапазон",
+        base64: "base64-кодиран низ",
+        base64url: "base64url-кодиран низ",
+        json_string: "JSON низ",
+        e164: "E.164 номер",
+        jwt: "JWT",
+        template_literal: "вход"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Невалиден вход: очакван ${issue.expected}, получен ${(0, exports2.parsedType)(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Невалиден вход: очакван ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Невалидна опция: очаквано едно от ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Твърде голямо: очаква се ${issue.origin ?? "стойност"} да съдържа ${adj}${issue.maximum.toString()} ${sizing.unit ?? "елемента"}`;
+            return `Твърде голямо: очаква се ${issue.origin ?? "стойност"} да бъде ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Твърде малко: очаква се ${issue.origin} да съдържа ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `Твърде малко: очаква се ${issue.origin} да бъде ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with") {
+              return `Невалиден низ: трябва да започва с "${_issue.prefix}"`;
+            }
+            if (_issue.format === "ends_with")
+              return `Невалиден низ: трябва да завършва с "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Невалиден низ: трябва да включва "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Невалиден низ: трябва да съвпада с ${_issue.pattern}`;
+            let invalid_adj = "Невалиден";
+            if (_issue.format === "emoji")
+              invalid_adj = "Невалидно";
+            if (_issue.format === "datetime")
+              invalid_adj = "Невалидно";
+            if (_issue.format === "date")
+              invalid_adj = "Невалидна";
+            if (_issue.format === "time")
+              invalid_adj = "Невалидно";
+            if (_issue.format === "duration")
+              invalid_adj = "Невалидна";
+            return `${invalid_adj} ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Невалидно число: трябва да бъде кратно на ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `Неразпознат${issue.keys.length > 1 ? "и" : ""} ключ${issue.keys.length > 1 ? "ове" : ""}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Невалиден ключ в ${issue.origin}`;
+          case "invalid_union":
+            return "Невалиден вход";
+          case "invalid_element":
+            return `Невалидна стойност в ${issue.origin}`;
+          default:
+            return `Невалиден вход`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ca.cjs
+var require_ca = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ca.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "caràcters", verb: "contenir" },
+        file: { unit: "bytes", verb: "contenir" },
+        array: { unit: "elements", verb: "contenir" },
+        set: { unit: "elements", verb: "contenir" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "number";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "array";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "entrada",
+        email: "adreça electrònica",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "data i hora ISO",
+        date: "data ISO",
+        time: "hora ISO",
+        duration: "durada ISO",
+        ipv4: "adreça IPv4",
+        ipv6: "adreça IPv6",
+        cidrv4: "rang IPv4",
+        cidrv6: "rang IPv6",
+        base64: "cadena codificada en base64",
+        base64url: "cadena codificada en base64url",
+        json_string: "cadena JSON",
+        e164: "número E.164",
+        jwt: "JWT",
+        template_literal: "entrada"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Tipus invàlid: s'esperava ${issue.expected}, s'ha rebut ${parsedType(issue.input)}`;
+          // return `Tipus invàlid: s'esperava ${issue.expected}, s'ha rebut ${util.getParsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Valor invàlid: s'esperava ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Opció invàlida: s'esperava una de ${util.joinValues(issue.values, " o ")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "com a màxim" : "menys de";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Massa gran: s'esperava que ${issue.origin ?? "el valor"} contingués ${adj} ${issue.maximum.toString()} ${sizing.unit ?? "elements"}`;
+            return `Massa gran: s'esperava que ${issue.origin ?? "el valor"} fos ${adj} ${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? "com a mínim" : "més de";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Massa petit: s'esperava que ${issue.origin} contingués ${adj} ${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `Massa petit: s'esperava que ${issue.origin} fos ${adj} ${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with") {
+              return `Format invàlid: ha de començar amb "${_issue.prefix}"`;
+            }
+            if (_issue.format === "ends_with")
+              return `Format invàlid: ha d'acabar amb "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Format invàlid: ha d'incloure "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Format invàlid: ha de coincidir amb el patró ${_issue.pattern}`;
+            return `Format invàlid per a ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Número invàlid: ha de ser múltiple de ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `Clau${issue.keys.length > 1 ? "s" : ""} no reconeguda${issue.keys.length > 1 ? "s" : ""}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Clau invàlida a ${issue.origin}`;
+          case "invalid_union":
+            return "Entrada invàlida";
+          // Could also be "Tipus d'unió invàlid" but "Entrada invàlida" is more general
+          case "invalid_element":
+            return `Element invàlid a ${issue.origin}`;
+          default:
+            return `Entrada invàlida`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/cs.cjs
+var require_cs = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/cs.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "znaků", verb: "mít" },
+        file: { unit: "bajtů", verb: "mít" },
+        array: { unit: "prvků", verb: "mít" },
+        set: { unit: "prvků", verb: "mít" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "číslo";
+          }
+          case "string": {
+            return "řetězec";
+          }
+          case "boolean": {
+            return "boolean";
+          }
+          case "bigint": {
+            return "bigint";
+          }
+          case "function": {
+            return "funkce";
+          }
+          case "symbol": {
+            return "symbol";
+          }
+          case "undefined": {
+            return "undefined";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "pole";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "regulární výraz",
+        email: "e-mailová adresa",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "datum a čas ve formátu ISO",
+        date: "datum ve formátu ISO",
+        time: "čas ve formátu ISO",
+        duration: "doba trvání ISO",
+        ipv4: "IPv4 adresa",
+        ipv6: "IPv6 adresa",
+        cidrv4: "rozsah IPv4",
+        cidrv6: "rozsah IPv6",
+        base64: "řetězec zakódovaný ve formátu base64",
+        base64url: "řetězec zakódovaný ve formátu base64url",
+        json_string: "řetězec ve formátu JSON",
+        e164: "číslo E.164",
+        jwt: "JWT",
+        template_literal: "vstup"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Neplatný vstup: očekáváno ${issue.expected}, obdrženo ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Neplatný vstup: očekáváno ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Neplatná možnost: očekávána jedna z hodnot ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Hodnota je příliš velká: ${issue.origin ?? "hodnota"} musí mít ${adj}${issue.maximum.toString()} ${sizing.unit ?? "prvků"}`;
+            }
+            return `Hodnota je příliš velká: ${issue.origin ?? "hodnota"} musí být ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Hodnota je příliš malá: ${issue.origin ?? "hodnota"} musí mít ${adj}${issue.minimum.toString()} ${sizing.unit ?? "prvků"}`;
+            }
+            return `Hodnota je příliš malá: ${issue.origin ?? "hodnota"} musí být ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `Neplatný řetězec: musí začínat na "${_issue.prefix}"`;
+            if (_issue.format === "ends_with")
+              return `Neplatný řetězec: musí končit na "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Neplatný řetězec: musí obsahovat "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Neplatný řetězec: musí odpovídat vzoru ${_issue.pattern}`;
+            return `Neplatný formát ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Neplatné číslo: musí být násobkem ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `Neznámé klíče: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Neplatný klíč v ${issue.origin}`;
+          case "invalid_union":
+            return "Neplatný vstup";
+          case "invalid_element":
+            return `Neplatná hodnota v ${issue.origin}`;
+          default:
+            return `Neplatný vstup`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/da.cjs
+var require_da = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/da.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "tegn", verb: "havde" },
+        file: { unit: "bytes", verb: "havde" },
+        array: { unit: "elementer", verb: "indeholdt" },
+        set: { unit: "elementer", verb: "indeholdt" }
+      };
+      const TypeNames = {
+        string: "streng",
+        number: "tal",
+        boolean: "boolean",
+        array: "liste",
+        object: "objekt",
+        set: "sæt",
+        file: "fil"
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      function getTypeName(type) {
+        return TypeNames[type] ?? type;
+      }
+      __name(getTypeName, "getTypeName");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "tal";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "liste";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+            return "objekt";
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "input",
+        email: "e-mailadresse",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO dato- og klokkeslæt",
+        date: "ISO-dato",
+        time: "ISO-klokkeslæt",
+        duration: "ISO-varighed",
+        ipv4: "IPv4-område",
+        ipv6: "IPv6-område",
+        cidrv4: "IPv4-spektrum",
+        cidrv6: "IPv6-spektrum",
+        base64: "base64-kodet streng",
+        base64url: "base64url-kodet streng",
+        json_string: "JSON-streng",
+        e164: "E.164-nummer",
+        jwt: "JWT",
+        template_literal: "input"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Ugyldigt input: forventede ${getTypeName(issue.expected)}, fik ${getTypeName(parsedType(issue.input))}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Ugyldig værdi: forventede ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Ugyldigt valg: forventede en af følgende ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            const origin = getTypeName(issue.origin);
+            if (sizing)
+              return `For stor: forventede ${origin ?? "value"} ${sizing.verb} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? "elementer"}`;
+            return `For stor: forventede ${origin ?? "value"} havde ${adj} ${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            const origin = getTypeName(issue.origin);
+            if (sizing) {
+              return `For lille: forventede ${origin} ${sizing.verb} ${adj} ${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `For lille: forventede ${origin} havde ${adj} ${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `Ugyldig streng: skal starte med "${_issue.prefix}"`;
+            if (_issue.format === "ends_with")
+              return `Ugyldig streng: skal ende med "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Ugyldig streng: skal indeholde "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Ugyldig streng: skal matche mønsteret ${_issue.pattern}`;
+            return `Ugyldig ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Ugyldigt tal: skal være deleligt med ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `${issue.keys.length > 1 ? "Ukendte nøgler" : "Ukendt nøgle"}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Ugyldig nøgle i ${issue.origin}`;
+          case "invalid_union":
+            return "Ugyldigt input: matcher ingen af de tilladte typer";
+          case "invalid_element":
+            return `Ugyldig værdi i ${issue.origin}`;
+          default:
+            return `Ugyldigt input`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/de.cjs
+var require_de = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/de.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "Zeichen", verb: "zu haben" },
+        file: { unit: "Bytes", verb: "zu haben" },
+        array: { unit: "Elemente", verb: "zu haben" },
+        set: { unit: "Elemente", verb: "zu haben" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "Zahl";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "Array";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "Eingabe",
+        email: "E-Mail-Adresse",
+        url: "URL",
+        emoji: "Emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO-Datum und -Uhrzeit",
+        date: "ISO-Datum",
+        time: "ISO-Uhrzeit",
+        duration: "ISO-Dauer",
+        ipv4: "IPv4-Adresse",
+        ipv6: "IPv6-Adresse",
+        cidrv4: "IPv4-Bereich",
+        cidrv6: "IPv6-Bereich",
+        base64: "Base64-codierter String",
+        base64url: "Base64-URL-codierter String",
+        json_string: "JSON-String",
+        e164: "E.164-Nummer",
+        jwt: "JWT",
+        template_literal: "Eingabe"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Ungültige Eingabe: erwartet ${issue.expected}, erhalten ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Ungültige Eingabe: erwartet ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Ungültige Option: erwartet eine von ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Zu groß: erwartet, dass ${issue.origin ?? "Wert"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? "Elemente"} hat`;
+            return `Zu groß: erwartet, dass ${issue.origin ?? "Wert"} ${adj}${issue.maximum.toString()} ist`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Zu klein: erwartet, dass ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} hat`;
+            }
+            return `Zu klein: erwartet, dass ${issue.origin} ${adj}${issue.minimum.toString()} ist`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `Ungültiger String: muss mit "${_issue.prefix}" beginnen`;
+            if (_issue.format === "ends_with")
+              return `Ungültiger String: muss mit "${_issue.suffix}" enden`;
+            if (_issue.format === "includes")
+              return `Ungültiger String: muss "${_issue.includes}" enthalten`;
+            if (_issue.format === "regex")
+              return `Ungültiger String: muss dem Muster ${_issue.pattern} entsprechen`;
+            return `Ungültig: ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Ungültige Zahl: muss ein Vielfaches von ${issue.divisor} sein`;
+          case "unrecognized_keys":
+            return `${issue.keys.length > 1 ? "Unbekannte Schlüssel" : "Unbekannter Schlüssel"}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Ungültiger Schlüssel in ${issue.origin}`;
+          case "invalid_union":
+            return "Ungültige Eingabe";
+          case "invalid_element":
+            return `Ungültiger Wert in ${issue.origin}`;
+          default:
+            return `Ungültige Eingabe`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/en.cjs
+var require_en = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/en.cjs"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.parsedType = void 0;
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var parsedType = /* @__PURE__ */ __name((data) => {
+      const t = typeof data;
+      switch (t) {
+        case "number": {
+          return Number.isNaN(data) ? "NaN" : "number";
+        }
+        case "object": {
+          if (Array.isArray(data)) {
+            return "array";
+          }
+          if (data === null) {
+            return "null";
+          }
+          if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+            return data.constructor.name;
+          }
+        }
+      }
+      return t;
+    }, "parsedType");
+    exports2.parsedType = parsedType;
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "characters", verb: "to have" },
+        file: { unit: "bytes", verb: "to have" },
+        array: { unit: "items", verb: "to have" },
+        set: { unit: "items", verb: "to have" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const Nouns = {
+        regex: "input",
+        email: "email address",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO datetime",
+        date: "ISO date",
+        time: "ISO time",
+        duration: "ISO duration",
+        ipv4: "IPv4 address",
+        ipv6: "IPv6 address",
+        cidrv4: "IPv4 range",
+        cidrv6: "IPv6 range",
+        base64: "base64-encoded string",
+        base64url: "base64url-encoded string",
+        json_string: "JSON string",
+        e164: "E.164 number",
+        jwt: "JWT",
+        template_literal: "input"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Invalid input: expected ${issue.expected}, received ${(0, exports2.parsedType)(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Invalid option: expected one of ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Too big: expected ${issue.origin ?? "value"} to have ${adj}${issue.maximum.toString()} ${sizing.unit ?? "elements"}`;
+            return `Too big: expected ${issue.origin ?? "value"} to be ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Too small: expected ${issue.origin} to have ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `Too small: expected ${issue.origin} to be ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with") {
+              return `Invalid string: must start with "${_issue.prefix}"`;
+            }
+            if (_issue.format === "ends_with")
+              return `Invalid string: must end with "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Invalid string: must include "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Invalid string: must match pattern ${_issue.pattern}`;
+            return `Invalid ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Invalid number: must be a multiple of ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `Unrecognized key${issue.keys.length > 1 ? "s" : ""}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Invalid key in ${issue.origin}`;
+          case "invalid_union":
+            return "Invalid input";
+          case "invalid_element":
+            return `Invalid value in ${issue.origin}`;
+          default:
+            return `Invalid input`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/eo.cjs
+var require_eo = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/eo.cjs"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.parsedType = void 0;
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var parsedType = /* @__PURE__ */ __name((data) => {
+      const t = typeof data;
+      switch (t) {
+        case "number": {
+          return Number.isNaN(data) ? "NaN" : "nombro";
+        }
+        case "object": {
+          if (Array.isArray(data)) {
+            return "tabelo";
+          }
+          if (data === null) {
+            return "senvalora";
+          }
+          if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+            return data.constructor.name;
+          }
+        }
+      }
+      return t;
+    }, "parsedType");
+    exports2.parsedType = parsedType;
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "karaktrojn", verb: "havi" },
+        file: { unit: "bajtojn", verb: "havi" },
+        array: { unit: "elementojn", verb: "havi" },
+        set: { unit: "elementojn", verb: "havi" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const Nouns = {
+        regex: "enigo",
+        email: "retadreso",
+        url: "URL",
+        emoji: "emoĝio",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO-datotempo",
+        date: "ISO-dato",
+        time: "ISO-tempo",
+        duration: "ISO-daŭro",
+        ipv4: "IPv4-adreso",
+        ipv6: "IPv6-adreso",
+        cidrv4: "IPv4-rango",
+        cidrv6: "IPv6-rango",
+        base64: "64-ume kodita karaktraro",
+        base64url: "URL-64-ume kodita karaktraro",
+        json_string: "JSON-karaktraro",
+        e164: "E.164-nombro",
+        jwt: "JWT",
+        template_literal: "enigo"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Nevalida enigo: atendiĝis ${issue.expected}, riceviĝis ${(0, exports2.parsedType)(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Nevalida enigo: atendiĝis ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Nevalida opcio: atendiĝis unu el ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Tro granda: atendiĝis ke ${issue.origin ?? "valoro"} havu ${adj}${issue.maximum.toString()} ${sizing.unit ?? "elementojn"}`;
+            return `Tro granda: atendiĝis ke ${issue.origin ?? "valoro"} havu ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Tro malgranda: atendiĝis ke ${issue.origin} havu ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `Tro malgranda: atendiĝis ke ${issue.origin} estu ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `Nevalida karaktraro: devas komenciĝi per "${_issue.prefix}"`;
+            if (_issue.format === "ends_with")
+              return `Nevalida karaktraro: devas finiĝi per "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Nevalida karaktraro: devas inkluzivi "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Nevalida karaktraro: devas kongrui kun la modelo ${_issue.pattern}`;
+            return `Nevalida ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Nevalida nombro: devas esti oblo de ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `Nekonata${issue.keys.length > 1 ? "j" : ""} ŝlosilo${issue.keys.length > 1 ? "j" : ""}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Nevalida ŝlosilo en ${issue.origin}`;
+          case "invalid_union":
+            return "Nevalida enigo";
+          case "invalid_element":
+            return `Nevalida valoro en ${issue.origin}`;
+          default:
+            return `Nevalida enigo`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/es.cjs
+var require_es = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/es.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "caracteres", verb: "tener" },
+        file: { unit: "bytes", verb: "tener" },
+        array: { unit: "elementos", verb: "tener" },
+        set: { unit: "elementos", verb: "tener" }
+      };
+      const TypeNames = {
+        string: "texto",
+        number: "número",
+        boolean: "booleano",
+        array: "arreglo",
+        object: "objeto",
+        set: "conjunto",
+        file: "archivo",
+        date: "fecha",
+        bigint: "número grande",
+        symbol: "símbolo",
+        undefined: "indefinido",
+        null: "nulo",
+        function: "función",
+        map: "mapa",
+        record: "registro",
+        tuple: "tupla",
+        enum: "enumeración",
+        union: "unión",
+        literal: "literal",
+        promise: "promesa",
+        void: "vacío",
+        never: "nunca",
+        unknown: "desconocido",
+        any: "cualquiera"
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      function getTypeName(type) {
+        return TypeNames[type] ?? type;
+      }
+      __name(getTypeName, "getTypeName");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "number";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "array";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype) {
+              return data.constructor.name;
+            }
+            return "object";
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "entrada",
+        email: "dirección de correo electrónico",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "fecha y hora ISO",
+        date: "fecha ISO",
+        time: "hora ISO",
+        duration: "duración ISO",
+        ipv4: "dirección IPv4",
+        ipv6: "dirección IPv6",
+        cidrv4: "rango IPv4",
+        cidrv6: "rango IPv6",
+        base64: "cadena codificada en base64",
+        base64url: "URL codificada en base64",
+        json_string: "cadena JSON",
+        e164: "número E.164",
+        jwt: "JWT",
+        template_literal: "entrada"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Entrada inválida: se esperaba ${getTypeName(issue.expected)}, recibido ${getTypeName(parsedType(issue.input))}`;
+          // return `Entrada inválida: se esperaba ${issue.expected}, recibido ${util.getParsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Entrada inválida: se esperaba ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Opción inválida: se esperaba una de ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            const origin = getTypeName(issue.origin);
+            if (sizing)
+              return `Demasiado grande: se esperaba que ${origin ?? "valor"} tuviera ${adj}${issue.maximum.toString()} ${sizing.unit ?? "elementos"}`;
+            return `Demasiado grande: se esperaba que ${origin ?? "valor"} fuera ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            const origin = getTypeName(issue.origin);
+            if (sizing) {
+              return `Demasiado pequeño: se esperaba que ${origin} tuviera ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `Demasiado pequeño: se esperaba que ${origin} fuera ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `Cadena inválida: debe comenzar con "${_issue.prefix}"`;
+            if (_issue.format === "ends_with")
+              return `Cadena inválida: debe terminar en "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Cadena inválida: debe incluir "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Cadena inválida: debe coincidir con el patrón ${_issue.pattern}`;
+            return `Inválido ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Número inválido: debe ser múltiplo de ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `Llave${issue.keys.length > 1 ? "s" : ""} desconocida${issue.keys.length > 1 ? "s" : ""}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Llave inválida en ${getTypeName(issue.origin)}`;
+          case "invalid_union":
+            return "Entrada inválida";
+          case "invalid_element":
+            return `Valor inválido en ${getTypeName(issue.origin)}`;
+          default:
+            return `Entrada inválida`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/fa.cjs
+var require_fa = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/fa.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "کاراکتر", verb: "داشته باشد" },
+        file: { unit: "بایت", verb: "داشته باشد" },
+        array: { unit: "آیتم", verb: "داشته باشد" },
+        set: { unit: "آیتم", verb: "داشته باشد" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "عدد";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "آرایه";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "ورودی",
+        email: "آدرس ایمیل",
+        url: "URL",
+        emoji: "ایموجی",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "تاریخ و زمان ایزو",
+        date: "تاریخ ایزو",
+        time: "زمان ایزو",
+        duration: "مدت زمان ایزو",
+        ipv4: "IPv4 آدرس",
+        ipv6: "IPv6 آدرس",
+        cidrv4: "IPv4 دامنه",
+        cidrv6: "IPv6 دامنه",
+        base64: "base64-encoded رشته",
+        base64url: "base64url-encoded رشته",
+        json_string: "JSON رشته",
+        e164: "E.164 عدد",
+        jwt: "JWT",
+        template_literal: "ورودی"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `ورودی نامعتبر: می‌بایست ${issue.expected} می‌بود، ${parsedType(issue.input)} دریافت شد`;
+          case "invalid_value":
+            if (issue.values.length === 1) {
+              return `ورودی نامعتبر: می‌بایست ${util.stringifyPrimitive(issue.values[0])} می‌بود`;
+            }
+            return `گزینه نامعتبر: می‌بایست یکی از ${util.joinValues(issue.values, "|")} می‌بود`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `خیلی بزرگ: ${issue.origin ?? "مقدار"} باید ${adj}${issue.maximum.toString()} ${sizing.unit ?? "عنصر"} باشد`;
+            }
+            return `خیلی بزرگ: ${issue.origin ?? "مقدار"} باید ${adj}${issue.maximum.toString()} باشد`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `خیلی کوچک: ${issue.origin} باید ${adj}${issue.minimum.toString()} ${sizing.unit} باشد`;
+            }
+            return `خیلی کوچک: ${issue.origin} باید ${adj}${issue.minimum.toString()} باشد`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with") {
+              return `رشته نامعتبر: باید با "${_issue.prefix}" شروع شود`;
+            }
+            if (_issue.format === "ends_with") {
+              return `رشته نامعتبر: باید با "${_issue.suffix}" تمام شود`;
+            }
+            if (_issue.format === "includes") {
+              return `رشته نامعتبر: باید شامل "${_issue.includes}" باشد`;
+            }
+            if (_issue.format === "regex") {
+              return `رشته نامعتبر: باید با الگوی ${_issue.pattern} مطابقت داشته باشد`;
+            }
+            return `${Nouns[_issue.format] ?? issue.format} نامعتبر`;
+          }
+          case "not_multiple_of":
+            return `عدد نامعتبر: باید مضرب ${issue.divisor} باشد`;
+          case "unrecognized_keys":
+            return `کلید${issue.keys.length > 1 ? "های" : ""} ناشناس: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `کلید ناشناس در ${issue.origin}`;
+          case "invalid_union":
+            return `ورودی نامعتبر`;
+          case "invalid_element":
+            return `مقدار نامعتبر در ${issue.origin}`;
+          default:
+            return `ورودی نامعتبر`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/fi.cjs
+var require_fi = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/fi.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "merkkiä", subject: "merkkijonon" },
+        file: { unit: "tavua", subject: "tiedoston" },
+        array: { unit: "alkiota", subject: "listan" },
+        set: { unit: "alkiota", subject: "joukon" },
+        number: { unit: "", subject: "luvun" },
+        bigint: { unit: "", subject: "suuren kokonaisluvun" },
+        int: { unit: "", subject: "kokonaisluvun" },
+        date: { unit: "", subject: "päivämäärän" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "number";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "array";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "säännöllinen lauseke",
+        email: "sähköpostiosoite",
+        url: "URL-osoite",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO-aikaleima",
+        date: "ISO-päivämäärä",
+        time: "ISO-aika",
+        duration: "ISO-kesto",
+        ipv4: "IPv4-osoite",
+        ipv6: "IPv6-osoite",
+        cidrv4: "IPv4-alue",
+        cidrv6: "IPv6-alue",
+        base64: "base64-koodattu merkkijono",
+        base64url: "base64url-koodattu merkkijono",
+        json_string: "JSON-merkkijono",
+        e164: "E.164-luku",
+        jwt: "JWT",
+        template_literal: "templaattimerkkijono"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Virheellinen tyyppi: odotettiin ${issue.expected}, oli ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Virheellinen syöte: täytyy olla ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Virheellinen valinta: täytyy olla yksi seuraavista: ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Liian suuri: ${sizing.subject} täytyy olla ${adj}${issue.maximum.toString()} ${sizing.unit}`.trim();
+            }
+            return `Liian suuri: arvon täytyy olla ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Liian pieni: ${sizing.subject} täytyy olla ${adj}${issue.minimum.toString()} ${sizing.unit}`.trim();
+            }
+            return `Liian pieni: arvon täytyy olla ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `Virheellinen syöte: täytyy alkaa "${_issue.prefix}"`;
+            if (_issue.format === "ends_with")
+              return `Virheellinen syöte: täytyy loppua "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Virheellinen syöte: täytyy sisältää "${_issue.includes}"`;
+            if (_issue.format === "regex") {
+              return `Virheellinen syöte: täytyy vastata säännöllistä lauseketta ${_issue.pattern}`;
+            }
+            return `Virheellinen ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Virheellinen luku: täytyy olla luvun ${issue.divisor} monikerta`;
+          case "unrecognized_keys":
+            return `${issue.keys.length > 1 ? "Tuntemattomat avaimet" : "Tuntematon avain"}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return "Virheellinen avain tietueessa";
+          case "invalid_union":
+            return "Virheellinen unioni";
+          case "invalid_element":
+            return "Virheellinen arvo joukossa";
+          default:
+            return `Virheellinen syöte`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/fr.cjs
+var require_fr = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/fr.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "caractères", verb: "avoir" },
+        file: { unit: "octets", verb: "avoir" },
+        array: { unit: "éléments", verb: "avoir" },
+        set: { unit: "éléments", verb: "avoir" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "nombre";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "tableau";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "entrée",
+        email: "adresse e-mail",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "date et heure ISO",
+        date: "date ISO",
+        time: "heure ISO",
+        duration: "durée ISO",
+        ipv4: "adresse IPv4",
+        ipv6: "adresse IPv6",
+        cidrv4: "plage IPv4",
+        cidrv6: "plage IPv6",
+        base64: "chaîne encodée en base64",
+        base64url: "chaîne encodée en base64url",
+        json_string: "chaîne JSON",
+        e164: "numéro E.164",
+        jwt: "JWT",
+        template_literal: "entrée"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Entrée invalide : ${issue.expected} attendu, ${parsedType(issue.input)} reçu`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Entrée invalide : ${util.stringifyPrimitive(issue.values[0])} attendu`;
+            return `Option invalide : une valeur parmi ${util.joinValues(issue.values, "|")} attendue`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Trop grand : ${issue.origin ?? "valeur"} doit ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? "élément(s)"}`;
+            return `Trop grand : ${issue.origin ?? "valeur"} doit être ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Trop petit : ${issue.origin} doit ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `Trop petit : ${issue.origin} doit être ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `Chaîne invalide : doit commencer par "${_issue.prefix}"`;
+            if (_issue.format === "ends_with")
+              return `Chaîne invalide : doit se terminer par "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Chaîne invalide : doit inclure "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Chaîne invalide : doit correspondre au modèle ${_issue.pattern}`;
+            return `${Nouns[_issue.format] ?? issue.format} invalide`;
+          }
+          case "not_multiple_of":
+            return `Nombre invalide : doit être un multiple de ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `Clé${issue.keys.length > 1 ? "s" : ""} non reconnue${issue.keys.length > 1 ? "s" : ""} : ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Clé invalide dans ${issue.origin}`;
+          case "invalid_union":
+            return "Entrée invalide";
+          case "invalid_element":
+            return `Valeur invalide dans ${issue.origin}`;
+          default:
+            return `Entrée invalide`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/fr-CA.cjs
+var require_fr_CA = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/fr-CA.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "caractères", verb: "avoir" },
+        file: { unit: "octets", verb: "avoir" },
+        array: { unit: "éléments", verb: "avoir" },
+        set: { unit: "éléments", verb: "avoir" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "number";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "array";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "entrée",
+        email: "adresse courriel",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "date-heure ISO",
+        date: "date ISO",
+        time: "heure ISO",
+        duration: "durée ISO",
+        ipv4: "adresse IPv4",
+        ipv6: "adresse IPv6",
+        cidrv4: "plage IPv4",
+        cidrv6: "plage IPv6",
+        base64: "chaîne encodée en base64",
+        base64url: "chaîne encodée en base64url",
+        json_string: "chaîne JSON",
+        e164: "numéro E.164",
+        jwt: "JWT",
+        template_literal: "entrée"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Entrée invalide : attendu ${issue.expected}, reçu ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Entrée invalide : attendu ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Option invalide : attendu l'une des valeurs suivantes ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "≤" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Trop grand : attendu que ${issue.origin ?? "la valeur"} ait ${adj}${issue.maximum.toString()} ${sizing.unit}`;
+            return `Trop grand : attendu que ${issue.origin ?? "la valeur"} soit ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? "≥" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Trop petit : attendu que ${issue.origin} ait ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `Trop petit : attendu que ${issue.origin} soit ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with") {
+              return `Chaîne invalide : doit commencer par "${_issue.prefix}"`;
+            }
+            if (_issue.format === "ends_with")
+              return `Chaîne invalide : doit se terminer par "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Chaîne invalide : doit inclure "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Chaîne invalide : doit correspondre au motif ${_issue.pattern}`;
+            return `${Nouns[_issue.format] ?? issue.format} invalide`;
+          }
+          case "not_multiple_of":
+            return `Nombre invalide : doit être un multiple de ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `Clé${issue.keys.length > 1 ? "s" : ""} non reconnue${issue.keys.length > 1 ? "s" : ""} : ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Clé invalide dans ${issue.origin}`;
+          case "invalid_union":
+            return "Entrée invalide";
+          case "invalid_element":
+            return `Valeur invalide dans ${issue.origin}`;
+          default:
+            return `Entrée invalide`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/he.cjs
+var require_he = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/he.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "אותיות", verb: "לכלול" },
+        file: { unit: "בייטים", verb: "לכלול" },
+        array: { unit: "פריטים", verb: "לכלול" },
+        set: { unit: "פריטים", verb: "לכלול" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "number";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "array";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "קלט",
+        email: "כתובת אימייל",
+        url: "כתובת רשת",
+        emoji: "אימוג'י",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "תאריך וזמן ISO",
+        date: "תאריך ISO",
+        time: "זמן ISO",
+        duration: "משך זמן ISO",
+        ipv4: "כתובת IPv4",
+        ipv6: "כתובת IPv6",
+        cidrv4: "טווח IPv4",
+        cidrv6: "טווח IPv6",
+        base64: "מחרוזת בבסיס 64",
+        base64url: "מחרוזת בבסיס 64 לכתובות רשת",
+        json_string: "מחרוזת JSON",
+        e164: "מספר E.164",
+        jwt: "JWT",
+        template_literal: "קלט"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `קלט לא תקין: צריך ${issue.expected}, התקבל ${parsedType(issue.input)}`;
+          // return `Invalid input: expected ${issue.expected}, received ${util.getParsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `קלט לא תקין: צריך ${util.stringifyPrimitive(issue.values[0])}`;
+            return `קלט לא תקין: צריך אחת מהאפשרויות  ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `גדול מדי: ${issue.origin ?? "value"} צריך להיות ${adj}${issue.maximum.toString()} ${sizing.unit ?? "elements"}`;
+            return `גדול מדי: ${issue.origin ?? "value"} צריך להיות ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `קטן מדי: ${issue.origin} צריך להיות ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `קטן מדי: ${issue.origin} צריך להיות ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `מחרוזת לא תקינה: חייבת להתחיל ב"${_issue.prefix}"`;
+            if (_issue.format === "ends_with")
+              return `מחרוזת לא תקינה: חייבת להסתיים ב "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `מחרוזת לא תקינה: חייבת לכלול "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `מחרוזת לא תקינה: חייבת להתאים לתבנית ${_issue.pattern}`;
+            return `${Nouns[_issue.format] ?? issue.format} לא תקין`;
+          }
+          case "not_multiple_of":
+            return `מספר לא תקין: חייב להיות מכפלה של ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `מפתח${issue.keys.length > 1 ? "ות" : ""} לא מזוה${issue.keys.length > 1 ? "ים" : "ה"}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `מפתח לא תקין ב${issue.origin}`;
+          case "invalid_union":
+            return "קלט לא תקין";
+          case "invalid_element":
+            return `ערך לא תקין ב${issue.origin}`;
+          default:
+            return `קלט לא תקין`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/hu.cjs
+var require_hu = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/hu.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "karakter", verb: "legyen" },
+        file: { unit: "byte", verb: "legyen" },
+        array: { unit: "elem", verb: "legyen" },
+        set: { unit: "elem", verb: "legyen" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "szám";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "tömb";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "bemenet",
+        email: "email cím",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO időbélyeg",
+        date: "ISO dátum",
+        time: "ISO idő",
+        duration: "ISO időintervallum",
+        ipv4: "IPv4 cím",
+        ipv6: "IPv6 cím",
+        cidrv4: "IPv4 tartomány",
+        cidrv6: "IPv6 tartomány",
+        base64: "base64-kódolt string",
+        base64url: "base64url-kódolt string",
+        json_string: "JSON string",
+        e164: "E.164 szám",
+        jwt: "JWT",
+        template_literal: "bemenet"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Érvénytelen bemenet: a várt érték ${issue.expected}, a kapott érték ${parsedType(issue.input)}`;
+          // return `Invalid input: expected ${issue.expected}, received ${util.getParsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Érvénytelen bemenet: a várt érték ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Érvénytelen opció: valamelyik érték várt ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Túl nagy: ${issue.origin ?? "érték"} mérete túl nagy ${adj}${issue.maximum.toString()} ${sizing.unit ?? "elem"}`;
+            return `Túl nagy: a bemeneti érték ${issue.origin ?? "érték"} túl nagy: ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Túl kicsi: a bemeneti érték ${issue.origin} mérete túl kicsi ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `Túl kicsi: a bemeneti érték ${issue.origin} túl kicsi ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `Érvénytelen string: "${_issue.prefix}" értékkel kell kezdődnie`;
+            if (_issue.format === "ends_with")
+              return `Érvénytelen string: "${_issue.suffix}" értékkel kell végződnie`;
+            if (_issue.format === "includes")
+              return `Érvénytelen string: "${_issue.includes}" értéket kell tartalmaznia`;
+            if (_issue.format === "regex")
+              return `Érvénytelen string: ${_issue.pattern} mintának kell megfelelnie`;
+            return `Érvénytelen ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Érvénytelen szám: ${issue.divisor} többszörösének kell lennie`;
+          case "unrecognized_keys":
+            return `Ismeretlen kulcs${issue.keys.length > 1 ? "s" : ""}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Érvénytelen kulcs ${issue.origin}`;
+          case "invalid_union":
+            return "Érvénytelen bemenet";
+          case "invalid_element":
+            return `Érvénytelen érték: ${issue.origin}`;
+          default:
+            return `Érvénytelen bemenet`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/id.cjs
+var require_id = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/id.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "karakter", verb: "memiliki" },
+        file: { unit: "byte", verb: "memiliki" },
+        array: { unit: "item", verb: "memiliki" },
+        set: { unit: "item", verb: "memiliki" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "number";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "array";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "input",
+        email: "alamat email",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "tanggal dan waktu format ISO",
+        date: "tanggal format ISO",
+        time: "jam format ISO",
+        duration: "durasi format ISO",
+        ipv4: "alamat IPv4",
+        ipv6: "alamat IPv6",
+        cidrv4: "rentang alamat IPv4",
+        cidrv6: "rentang alamat IPv6",
+        base64: "string dengan enkode base64",
+        base64url: "string dengan enkode base64url",
+        json_string: "string JSON",
+        e164: "angka E.164",
+        jwt: "JWT",
+        template_literal: "input"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Input tidak valid: diharapkan ${issue.expected}, diterima ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Input tidak valid: diharapkan ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Pilihan tidak valid: diharapkan salah satu dari ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Terlalu besar: diharapkan ${issue.origin ?? "value"} memiliki ${adj}${issue.maximum.toString()} ${sizing.unit ?? "elemen"}`;
+            return `Terlalu besar: diharapkan ${issue.origin ?? "value"} menjadi ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Terlalu kecil: diharapkan ${issue.origin} memiliki ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `Terlalu kecil: diharapkan ${issue.origin} menjadi ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `String tidak valid: harus dimulai dengan "${_issue.prefix}"`;
+            if (_issue.format === "ends_with")
+              return `String tidak valid: harus berakhir dengan "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `String tidak valid: harus menyertakan "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `String tidak valid: harus sesuai pola ${_issue.pattern}`;
+            return `${Nouns[_issue.format] ?? issue.format} tidak valid`;
+          }
+          case "not_multiple_of":
+            return `Angka tidak valid: harus kelipatan dari ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `Kunci tidak dikenali ${issue.keys.length > 1 ? "s" : ""}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Kunci tidak valid di ${issue.origin}`;
+          case "invalid_union":
+            return "Input tidak valid";
+          case "invalid_element":
+            return `Nilai tidak valid di ${issue.origin}`;
+          default:
+            return `Input tidak valid`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/is.cjs
+var require_is = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/is.cjs"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.parsedType = void 0;
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var parsedType = /* @__PURE__ */ __name((data) => {
+      const t = typeof data;
+      switch (t) {
+        case "number": {
+          return Number.isNaN(data) ? "NaN" : "númer";
+        }
+        case "object": {
+          if (Array.isArray(data)) {
+            return "fylki";
+          }
+          if (data === null) {
+            return "null";
+          }
+          if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+            return data.constructor.name;
+          }
+        }
+      }
+      return t;
+    }, "parsedType");
+    exports2.parsedType = parsedType;
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "stafi", verb: "að hafa" },
+        file: { unit: "bæti", verb: "að hafa" },
+        array: { unit: "hluti", verb: "að hafa" },
+        set: { unit: "hluti", verb: "að hafa" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const Nouns = {
+        regex: "gildi",
+        email: "netfang",
+        url: "vefslóð",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO dagsetning og tími",
+        date: "ISO dagsetning",
+        time: "ISO tími",
+        duration: "ISO tímalengd",
+        ipv4: "IPv4 address",
+        ipv6: "IPv6 address",
+        cidrv4: "IPv4 range",
+        cidrv6: "IPv6 range",
+        base64: "base64-encoded strengur",
+        base64url: "base64url-encoded strengur",
+        json_string: "JSON strengur",
+        e164: "E.164 tölugildi",
+        jwt: "JWT",
+        template_literal: "gildi"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Rangt gildi: Þú slóst inn ${(0, exports2.parsedType)(issue.input)} þar sem á að vera ${issue.expected}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Rangt gildi: gert ráð fyrir ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Ógilt val: má vera eitt af eftirfarandi ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Of stórt: gert er ráð fyrir að ${issue.origin ?? "gildi"} hafi ${adj}${issue.maximum.toString()} ${sizing.unit ?? "hluti"}`;
+            return `Of stórt: gert er ráð fyrir að ${issue.origin ?? "gildi"} sé ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Of lítið: gert er ráð fyrir að ${issue.origin} hafi ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `Of lítið: gert er ráð fyrir að ${issue.origin} sé ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with") {
+              return `Ógildur strengur: verður að byrja á "${_issue.prefix}"`;
+            }
+            if (_issue.format === "ends_with")
+              return `Ógildur strengur: verður að enda á "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Ógildur strengur: verður að innihalda "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Ógildur strengur: verður að fylgja mynstri ${_issue.pattern}`;
+            return `Rangt ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Röng tala: verður að vera margfeldi af ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `Óþekkt ${issue.keys.length > 1 ? "ir lyklar" : "ur lykill"}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Rangur lykill í ${issue.origin}`;
+          case "invalid_union":
+            return "Rangt gildi";
+          case "invalid_element":
+            return `Rangt gildi í ${issue.origin}`;
+          default:
+            return `Rangt gildi`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/it.cjs
+var require_it = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/it.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "caratteri", verb: "avere" },
+        file: { unit: "byte", verb: "avere" },
+        array: { unit: "elementi", verb: "avere" },
+        set: { unit: "elementi", verb: "avere" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "numero";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "vettore";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "input",
+        email: "indirizzo email",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "data e ora ISO",
+        date: "data ISO",
+        time: "ora ISO",
+        duration: "durata ISO",
+        ipv4: "indirizzo IPv4",
+        ipv6: "indirizzo IPv6",
+        cidrv4: "intervallo IPv4",
+        cidrv6: "intervallo IPv6",
+        base64: "stringa codificata in base64",
+        base64url: "URL codificata in base64",
+        json_string: "stringa JSON",
+        e164: "numero E.164",
+        jwt: "JWT",
+        template_literal: "input"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Input non valido: atteso ${issue.expected}, ricevuto ${parsedType(issue.input)}`;
+          // return `Input non valido: atteso ${issue.expected}, ricevuto ${util.getParsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Input non valido: atteso ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Opzione non valida: atteso uno tra ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Troppo grande: ${issue.origin ?? "valore"} deve avere ${adj}${issue.maximum.toString()} ${sizing.unit ?? "elementi"}`;
+            return `Troppo grande: ${issue.origin ?? "valore"} deve essere ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Troppo piccolo: ${issue.origin} deve avere ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `Troppo piccolo: ${issue.origin} deve essere ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `Stringa non valida: deve iniziare con "${_issue.prefix}"`;
+            if (_issue.format === "ends_with")
+              return `Stringa non valida: deve terminare con "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Stringa non valida: deve includere "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Stringa non valida: deve corrispondere al pattern ${_issue.pattern}`;
+            return `Invalid ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Numero non valido: deve essere un multiplo di ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `Chiav${issue.keys.length > 1 ? "i" : "e"} non riconosciut${issue.keys.length > 1 ? "e" : "a"}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Chiave non valida in ${issue.origin}`;
+          case "invalid_union":
+            return "Input non valido";
+          case "invalid_element":
+            return `Valore non valido in ${issue.origin}`;
+          default:
+            return `Input non valido`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ja.cjs
+var require_ja = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ja.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "文字", verb: "である" },
+        file: { unit: "バイト", verb: "である" },
+        array: { unit: "要素", verb: "である" },
+        set: { unit: "要素", verb: "である" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "数値";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "配列";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "入力値",
+        email: "メールアドレス",
+        url: "URL",
+        emoji: "絵文字",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO日時",
+        date: "ISO日付",
+        time: "ISO時刻",
+        duration: "ISO期間",
+        ipv4: "IPv4アドレス",
+        ipv6: "IPv6アドレス",
+        cidrv4: "IPv4範囲",
+        cidrv6: "IPv6範囲",
+        base64: "base64エンコード文字列",
+        base64url: "base64urlエンコード文字列",
+        json_string: "JSON文字列",
+        e164: "E.164番号",
+        jwt: "JWT",
+        template_literal: "入力値"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `無効な入力: ${issue.expected}が期待されましたが、${parsedType(issue.input)}が入力されました`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `無効な入力: ${util.stringifyPrimitive(issue.values[0])}が期待されました`;
+            return `無効な選択: ${util.joinValues(issue.values, "、")}のいずれかである必要があります`;
+          case "too_big": {
+            const adj = issue.inclusive ? "以下である" : "より小さい";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `大きすぎる値: ${issue.origin ?? "値"}は${issue.maximum.toString()}${sizing.unit ?? "要素"}${adj}必要があります`;
+            return `大きすぎる値: ${issue.origin ?? "値"}は${issue.maximum.toString()}${adj}必要があります`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? "以上である" : "より大きい";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `小さすぎる値: ${issue.origin}は${issue.minimum.toString()}${sizing.unit}${adj}必要があります`;
+            return `小さすぎる値: ${issue.origin}は${issue.minimum.toString()}${adj}必要があります`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `無効な文字列: "${_issue.prefix}"で始まる必要があります`;
+            if (_issue.format === "ends_with")
+              return `無効な文字列: "${_issue.suffix}"で終わる必要があります`;
+            if (_issue.format === "includes")
+              return `無効な文字列: "${_issue.includes}"を含む必要があります`;
+            if (_issue.format === "regex")
+              return `無効な文字列: パターン${_issue.pattern}に一致する必要があります`;
+            return `無効な${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `無効な数値: ${issue.divisor}の倍数である必要があります`;
+          case "unrecognized_keys":
+            return `認識されていないキー${issue.keys.length > 1 ? "群" : ""}: ${util.joinValues(issue.keys, "、")}`;
+          case "invalid_key":
+            return `${issue.origin}内の無効なキー`;
+          case "invalid_union":
+            return "無効な入力";
+          case "invalid_element":
+            return `${issue.origin}内の無効な値`;
+          default:
+            return `無効な入力`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ka.cjs
+var require_ka = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ka.cjs"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.parsedType = void 0;
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var parsedType = /* @__PURE__ */ __name((data) => {
+      const t = typeof data;
+      switch (t) {
+        case "number": {
+          return Number.isNaN(data) ? "NaN" : "რიცხვი";
+        }
+        case "object": {
+          if (Array.isArray(data)) {
+            return "მასივი";
+          }
+          if (data === null) {
+            return "null";
+          }
+          if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+            return data.constructor.name;
+          }
+        }
+      }
+      const typeMap = {
+        string: "სტრინგი",
+        boolean: "ბულეანი",
+        undefined: "undefined",
+        bigint: "bigint",
+        symbol: "symbol",
+        function: "ფუნქცია"
+      };
+      return typeMap[t] ?? t;
+    }, "parsedType");
+    exports2.parsedType = parsedType;
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "სიმბოლო", verb: "უნდა შეიცავდეს" },
+        file: { unit: "ბაიტი", verb: "უნდა შეიცავდეს" },
+        array: { unit: "ელემენტი", verb: "უნდა შეიცავდეს" },
+        set: { unit: "ელემენტი", verb: "უნდა შეიცავდეს" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const Nouns = {
+        regex: "შეყვანა",
+        email: "ელ-ფოსტის მისამართი",
+        url: "URL",
+        emoji: "ემოჯი",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "თარიღი-დრო",
+        date: "თარიღი",
+        time: "დრო",
+        duration: "ხანგრძლივობა",
+        ipv4: "IPv4 მისამართი",
+        ipv6: "IPv6 მისამართი",
+        cidrv4: "IPv4 დიაპაზონი",
+        cidrv6: "IPv6 დიაპაზონი",
+        base64: "base64-კოდირებული სტრინგი",
+        base64url: "base64url-კოდირებული სტრინგი",
+        json_string: "JSON სტრინგი",
+        e164: "E.164 ნომერი",
+        jwt: "JWT",
+        template_literal: "შეყვანა"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `არასწორი შეყვანა: მოსალოდნელი ${issue.expected}, მიღებული ${(0, exports2.parsedType)(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `არასწორი შეყვანა: მოსალოდნელი ${util.stringifyPrimitive(issue.values[0])}`;
+            return `არასწორი ვარიანტი: მოსალოდნელია ერთ-ერთი ${util.joinValues(issue.values, "|")}-დან`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `ზედმეტად დიდი: მოსალოდნელი ${issue.origin ?? "მნიშვნელობა"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit}`;
+            return `ზედმეტად დიდი: მოსალოდნელი ${issue.origin ?? "მნიშვნელობა"} იყოს ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `ზედმეტად პატარა: მოსალოდნელი ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `ზედმეტად პატარა: მოსალოდნელი ${issue.origin} იყოს ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with") {
+              return `არასწორი სტრინგი: უნდა იწყებოდეს "${_issue.prefix}"-ით`;
+            }
+            if (_issue.format === "ends_with")
+              return `არასწორი სტრინგი: უნდა მთავრდებოდეს "${_issue.suffix}"-ით`;
+            if (_issue.format === "includes")
+              return `არასწორი სტრინგი: უნდა შეიცავდეს "${_issue.includes}"-ს`;
+            if (_issue.format === "regex")
+              return `არასწორი სტრინგი: უნდა შეესაბამებოდეს შაბლონს ${_issue.pattern}`;
+            return `არასწორი ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `არასწორი რიცხვი: უნდა იყოს ${issue.divisor}-ის ჯერადი`;
+          case "unrecognized_keys":
+            return `უცნობი გასაღებ${issue.keys.length > 1 ? "ები" : "ი"}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `არასწორი გასაღები ${issue.origin}-ში`;
+          case "invalid_union":
+            return "არასწორი შეყვანა";
+          case "invalid_element":
+            return `არასწორი მნიშვნელობა ${issue.origin}-ში`;
+          default:
+            return `არასწორი შეყვანა`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/km.cjs
+var require_km = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/km.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "តួអក្សរ", verb: "គួរមាន" },
+        file: { unit: "បៃ", verb: "គួរមាន" },
+        array: { unit: "ធាតុ", verb: "គួរមាន" },
+        set: { unit: "ធាតុ", verb: "គួរមាន" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "មិនមែនជាលេខ (NaN)" : "លេខ";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "អារេ (Array)";
+            }
+            if (data === null) {
+              return "គ្មានតម្លៃ (null)";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "ទិន្នន័យបញ្ចូល",
+        email: "អាសយដ្ឋានអ៊ីមែល",
+        url: "URL",
+        emoji: "សញ្ញាអារម្មណ៍",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "កាលបរិច្ឆេទ និងម៉ោង ISO",
+        date: "កាលបរិច្ឆេទ ISO",
+        time: "ម៉ោង ISO",
+        duration: "រយៈពេល ISO",
+        ipv4: "អាសយដ្ឋាន IPv4",
+        ipv6: "អាសយដ្ឋាន IPv6",
+        cidrv4: "ដែនអាសយដ្ឋាន IPv4",
+        cidrv6: "ដែនអាសយដ្ឋាន IPv6",
+        base64: "ខ្សែអក្សរអ៊ិកូដ base64",
+        base64url: "ខ្សែអក្សរអ៊ិកូដ base64url",
+        json_string: "ខ្សែអក្សរ JSON",
+        e164: "លេខ E.164",
+        jwt: "JWT",
+        template_literal: "ទិន្នន័យបញ្ចូល"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `ទិន្នន័យបញ្ចូលមិនត្រឹមត្រូវ៖ ត្រូវការ ${issue.expected} ប៉ុន្តែទទួលបាន ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `ទិន្នន័យបញ្ចូលមិនត្រឹមត្រូវ៖ ត្រូវការ ${util.stringifyPrimitive(issue.values[0])}`;
+            return `ជម្រើសមិនត្រឹមត្រូវ៖ ត្រូវជាមួយក្នុងចំណោម ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `ធំពេក៖ ត្រូវការ ${issue.origin ?? "តម្លៃ"} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? "ធាតុ"}`;
+            return `ធំពេក៖ ត្រូវការ ${issue.origin ?? "តម្លៃ"} ${adj} ${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `តូចពេក៖ ត្រូវការ ${issue.origin} ${adj} ${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `តូចពេក៖ ត្រូវការ ${issue.origin} ${adj} ${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with") {
+              return `ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវចាប់ផ្តើមដោយ "${_issue.prefix}"`;
+            }
+            if (_issue.format === "ends_with")
+              return `ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវបញ្ចប់ដោយ "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវមាន "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវតែផ្គូផ្គងនឹងទម្រង់ដែលបានកំណត់ ${_issue.pattern}`;
+            return `មិនត្រឹមត្រូវ៖ ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `លេខមិនត្រឹមត្រូវ៖ ត្រូវតែជាពហុគុណនៃ ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `រកឃើញសោមិនស្គាល់៖ ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `សោមិនត្រឹមត្រូវនៅក្នុង ${issue.origin}`;
+          case "invalid_union":
+            return `ទិន្នន័យមិនត្រឹមត្រូវ`;
+          case "invalid_element":
+            return `ទិន្នន័យមិនត្រឹមត្រូវនៅក្នុង ${issue.origin}`;
+          default:
+            return `ទិន្នន័យមិនត្រឹមត្រូវ`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/kh.cjs
+var require_kh = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/kh.cjs"(exports2, module2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var km_js_1 = __importDefault(require_km());
+    function default_1() {
+      return (0, km_js_1.default)();
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ko.cjs
+var require_ko = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ko.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "문자", verb: "to have" },
+        file: { unit: "바이트", verb: "to have" },
+        array: { unit: "개", verb: "to have" },
+        set: { unit: "개", verb: "to have" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "number";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "array";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "입력",
+        email: "이메일 주소",
+        url: "URL",
+        emoji: "이모지",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO 날짜시간",
+        date: "ISO 날짜",
+        time: "ISO 시간",
+        duration: "ISO 기간",
+        ipv4: "IPv4 주소",
+        ipv6: "IPv6 주소",
+        cidrv4: "IPv4 범위",
+        cidrv6: "IPv6 범위",
+        base64: "base64 인코딩 문자열",
+        base64url: "base64url 인코딩 문자열",
+        json_string: "JSON 문자열",
+        e164: "E.164 번호",
+        jwt: "JWT",
+        template_literal: "입력"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `잘못된 입력: 예상 타입은 ${issue.expected}, 받은 타입은 ${parsedType(issue.input)}입니다`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `잘못된 입력: 값은 ${util.stringifyPrimitive(issue.values[0])} 이어야 합니다`;
+            return `잘못된 옵션: ${util.joinValues(issue.values, "또는 ")} 중 하나여야 합니다`;
+          case "too_big": {
+            const adj = issue.inclusive ? "이하" : "미만";
+            const suffix = adj === "미만" ? "이어야 합니다" : "여야 합니다";
+            const sizing = getSizing(issue.origin);
+            const unit = sizing?.unit ?? "요소";
+            if (sizing)
+              return `${issue.origin ?? "값"}이 너무 큽니다: ${issue.maximum.toString()}${unit} ${adj}${suffix}`;
+            return `${issue.origin ?? "값"}이 너무 큽니다: ${issue.maximum.toString()} ${adj}${suffix}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? "이상" : "초과";
+            const suffix = adj === "이상" ? "이어야 합니다" : "여야 합니다";
+            const sizing = getSizing(issue.origin);
+            const unit = sizing?.unit ?? "요소";
+            if (sizing) {
+              return `${issue.origin ?? "값"}이 너무 작습니다: ${issue.minimum.toString()}${unit} ${adj}${suffix}`;
+            }
+            return `${issue.origin ?? "값"}이 너무 작습니다: ${issue.minimum.toString()} ${adj}${suffix}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with") {
+              return `잘못된 문자열: "${_issue.prefix}"(으)로 시작해야 합니다`;
+            }
+            if (_issue.format === "ends_with")
+              return `잘못된 문자열: "${_issue.suffix}"(으)로 끝나야 합니다`;
+            if (_issue.format === "includes")
+              return `잘못된 문자열: "${_issue.includes}"을(를) 포함해야 합니다`;
+            if (_issue.format === "regex")
+              return `잘못된 문자열: 정규식 ${_issue.pattern} 패턴과 일치해야 합니다`;
+            return `잘못된 ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `잘못된 숫자: ${issue.divisor}의 배수여야 합니다`;
+          case "unrecognized_keys":
+            return `인식할 수 없는 키: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `잘못된 키: ${issue.origin}`;
+          case "invalid_union":
+            return `잘못된 입력`;
+          case "invalid_element":
+            return `잘못된 값: ${issue.origin}`;
+          default:
+            return `잘못된 입력`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/lt.cjs
+var require_lt = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/lt.cjs"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.parsedType = void 0;
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var parsedType = /* @__PURE__ */ __name((data) => {
+      const t = typeof data;
+      return parsedTypeFromType(t, data);
+    }, "parsedType");
+    exports2.parsedType = parsedType;
+    var parsedTypeFromType = /* @__PURE__ */ __name((t, data = void 0) => {
+      switch (t) {
+        case "number": {
+          return Number.isNaN(data) ? "NaN" : "skaičius";
+        }
+        case "bigint": {
+          return "sveikasis skaičius";
+        }
+        case "string": {
+          return "eilutė";
+        }
+        case "boolean": {
+          return "loginė reikšmė";
+        }
+        case "undefined":
+        case "void": {
+          return "neapibrėžta reikšmė";
+        }
+        case "function": {
+          return "funkcija";
+        }
+        case "symbol": {
+          return "simbolis";
+        }
+        case "object": {
+          if (data === void 0)
+            return "nežinomas objektas";
+          if (data === null)
+            return "nulinė reikšmė";
+          if (Array.isArray(data))
+            return "masyvas";
+          if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+            return data.constructor.name;
+          }
+          return "objektas";
+        }
+        //Zod types below
+        case "null": {
+          return "nulinė reikšmė";
+        }
+      }
+      return t;
+    }, "parsedTypeFromType");
+    var capitalizeFirstCharacter = /* @__PURE__ */ __name((text) => {
+      return text.charAt(0).toUpperCase() + text.slice(1);
+    }, "capitalizeFirstCharacter");
+    function getUnitTypeFromNumber(number) {
+      const abs = Math.abs(number);
+      const last = abs % 10;
+      const last2 = abs % 100;
+      if (last2 >= 11 && last2 <= 19 || last === 0)
+        return "many";
+      if (last === 1)
+        return "one";
+      return "few";
+    }
+    __name(getUnitTypeFromNumber, "getUnitTypeFromNumber");
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: {
+          unit: {
+            one: "simbolis",
+            few: "simboliai",
+            many: "simbolių"
+          },
+          verb: {
+            smaller: {
+              inclusive: "turi būti ne ilgesnė kaip",
+              notInclusive: "turi būti trumpesnė kaip"
+            },
+            bigger: {
+              inclusive: "turi būti ne trumpesnė kaip",
+              notInclusive: "turi būti ilgesnė kaip"
+            }
+          }
+        },
+        file: {
+          unit: {
+            one: "baitas",
+            few: "baitai",
+            many: "baitų"
+          },
+          verb: {
+            smaller: {
+              inclusive: "turi būti ne didesnis kaip",
+              notInclusive: "turi būti mažesnis kaip"
+            },
+            bigger: {
+              inclusive: "turi būti ne mažesnis kaip",
+              notInclusive: "turi būti didesnis kaip"
+            }
+          }
+        },
+        array: {
+          unit: {
+            one: "elementą",
+            few: "elementus",
+            many: "elementų"
+          },
+          verb: {
+            smaller: {
+              inclusive: "turi turėti ne daugiau kaip",
+              notInclusive: "turi turėti mažiau kaip"
+            },
+            bigger: {
+              inclusive: "turi turėti ne mažiau kaip",
+              notInclusive: "turi turėti daugiau kaip"
+            }
+          }
+        },
+        set: {
+          unit: {
+            one: "elementą",
+            few: "elementus",
+            many: "elementų"
+          },
+          verb: {
+            smaller: {
+              inclusive: "turi turėti ne daugiau kaip",
+              notInclusive: "turi turėti mažiau kaip"
+            },
+            bigger: {
+              inclusive: "turi turėti ne mažiau kaip",
+              notInclusive: "turi turėti daugiau kaip"
+            }
+          }
+        }
+      };
+      function getSizing(origin, unitType, inclusive, targetShouldBe) {
+        const result = Sizable[origin] ?? null;
+        if (result === null)
+          return result;
+        return {
+          unit: result.unit[unitType],
+          verb: result.verb[targetShouldBe][inclusive ? "inclusive" : "notInclusive"]
+        };
+      }
+      __name(getSizing, "getSizing");
+      const Nouns = {
+        regex: "įvestis",
+        email: "el. pašto adresas",
+        url: "URL",
+        emoji: "jaustukas",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO data ir laikas",
+        date: "ISO data",
+        time: "ISO laikas",
+        duration: "ISO trukmė",
+        ipv4: "IPv4 adresas",
+        ipv6: "IPv6 adresas",
+        cidrv4: "IPv4 tinklo prefiksas (CIDR)",
+        cidrv6: "IPv6 tinklo prefiksas (CIDR)",
+        base64: "base64 užkoduota eilutė",
+        base64url: "base64url užkoduota eilutė",
+        json_string: "JSON eilutė",
+        e164: "E.164 numeris",
+        jwt: "JWT",
+        template_literal: "įvestis"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Gautas tipas ${(0, exports2.parsedType)(issue.input)}, o tikėtasi - ${parsedTypeFromType(issue.expected)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Privalo būti ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Privalo būti vienas iš ${util.joinValues(issue.values, "|")} pasirinkimų`;
+          case "too_big": {
+            const origin = parsedTypeFromType(issue.origin);
+            const sizing = getSizing(issue.origin, getUnitTypeFromNumber(Number(issue.maximum)), issue.inclusive ?? false, "smaller");
+            if (sizing?.verb)
+              return `${capitalizeFirstCharacter(origin ?? issue.origin ?? "reikšmė")} ${sizing.verb} ${issue.maximum.toString()} ${sizing.unit ?? "elementų"}`;
+            const adj = issue.inclusive ? "ne didesnis kaip" : "mažesnis kaip";
+            return `${capitalizeFirstCharacter(origin ?? issue.origin ?? "reikšmė")} turi būti ${adj} ${issue.maximum.toString()} ${sizing?.unit}`;
+          }
+          case "too_small": {
+            const origin = parsedTypeFromType(issue.origin);
+            const sizing = getSizing(issue.origin, getUnitTypeFromNumber(Number(issue.minimum)), issue.inclusive ?? false, "bigger");
+            if (sizing?.verb)
+              return `${capitalizeFirstCharacter(origin ?? issue.origin ?? "reikšmė")} ${sizing.verb} ${issue.minimum.toString()} ${sizing.unit ?? "elementų"}`;
+            const adj = issue.inclusive ? "ne mažesnis kaip" : "didesnis kaip";
+            return `${capitalizeFirstCharacter(origin ?? issue.origin ?? "reikšmė")} turi būti ${adj} ${issue.minimum.toString()} ${sizing?.unit}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with") {
+              return `Eilutė privalo prasidėti "${_issue.prefix}"`;
+            }
+            if (_issue.format === "ends_with")
+              return `Eilutė privalo pasibaigti "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Eilutė privalo įtraukti "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Eilutė privalo atitikti ${_issue.pattern}`;
+            return `Neteisingas ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Skaičius privalo būti ${issue.divisor} kartotinis.`;
+          case "unrecognized_keys":
+            return `Neatpažint${issue.keys.length > 1 ? "i" : "as"} rakt${issue.keys.length > 1 ? "ai" : "as"}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return "Rastas klaidingas raktas";
+          case "invalid_union":
+            return "Klaidinga įvestis";
+          case "invalid_element": {
+            const origin = parsedTypeFromType(issue.origin);
+            return `${capitalizeFirstCharacter(origin ?? issue.origin ?? "reikšmė")} turi klaidingą įvestį`;
+          }
+          default:
+            return "Klaidinga įvestis";
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/mk.cjs
+var require_mk = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/mk.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "знаци", verb: "да имаат" },
+        file: { unit: "бајти", verb: "да имаат" },
+        array: { unit: "ставки", verb: "да имаат" },
+        set: { unit: "ставки", verb: "да имаат" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "број";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "низа";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "внес",
+        email: "адреса на е-пошта",
+        url: "URL",
+        emoji: "емоџи",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO датум и време",
+        date: "ISO датум",
+        time: "ISO време",
+        duration: "ISO времетраење",
+        ipv4: "IPv4 адреса",
+        ipv6: "IPv6 адреса",
+        cidrv4: "IPv4 опсег",
+        cidrv6: "IPv6 опсег",
+        base64: "base64-енкодирана низа",
+        base64url: "base64url-енкодирана низа",
+        json_string: "JSON низа",
+        e164: "E.164 број",
+        jwt: "JWT",
+        template_literal: "внес"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Грешен внес: се очекува ${issue.expected}, примено ${parsedType(issue.input)}`;
+          // return `Invalid input: expected ${issue.expected}, received ${util.getParsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Грешана опција: се очекува една ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Премногу голем: се очекува ${issue.origin ?? "вредноста"} да има ${adj}${issue.maximum.toString()} ${sizing.unit ?? "елементи"}`;
+            return `Премногу голем: се очекува ${issue.origin ?? "вредноста"} да биде ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Премногу мал: се очекува ${issue.origin} да има ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `Премногу мал: се очекува ${issue.origin} да биде ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with") {
+              return `Неважечка низа: мора да започнува со "${_issue.prefix}"`;
+            }
+            if (_issue.format === "ends_with")
+              return `Неважечка низа: мора да завршува со "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Неважечка низа: мора да вклучува "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Неважечка низа: мора да одгоара на патернот ${_issue.pattern}`;
+            return `Invalid ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Грешен број: мора да биде делив со ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `${issue.keys.length > 1 ? "Непрепознаени клучеви" : "Непрепознаен клуч"}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Грешен клуч во ${issue.origin}`;
+          case "invalid_union":
+            return "Грешен внес";
+          case "invalid_element":
+            return `Грешна вредност во ${issue.origin}`;
+          default:
+            return `Грешен внес`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ms.cjs
+var require_ms = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ms.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "aksara", verb: "mempunyai" },
+        file: { unit: "bait", verb: "mempunyai" },
+        array: { unit: "elemen", verb: "mempunyai" },
+        set: { unit: "elemen", verb: "mempunyai" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "nombor";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "array";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "input",
+        email: "alamat e-mel",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "tarikh masa ISO",
+        date: "tarikh ISO",
+        time: "masa ISO",
+        duration: "tempoh ISO",
+        ipv4: "alamat IPv4",
+        ipv6: "alamat IPv6",
+        cidrv4: "julat IPv4",
+        cidrv6: "julat IPv6",
+        base64: "string dikodkan base64",
+        base64url: "string dikodkan base64url",
+        json_string: "string JSON",
+        e164: "nombor E.164",
+        jwt: "JWT",
+        template_literal: "input"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Input tidak sah: dijangka ${issue.expected}, diterima ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Input tidak sah: dijangka ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Pilihan tidak sah: dijangka salah satu daripada ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Terlalu besar: dijangka ${issue.origin ?? "nilai"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? "elemen"}`;
+            return `Terlalu besar: dijangka ${issue.origin ?? "nilai"} adalah ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Terlalu kecil: dijangka ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `Terlalu kecil: dijangka ${issue.origin} adalah ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `String tidak sah: mesti bermula dengan "${_issue.prefix}"`;
+            if (_issue.format === "ends_with")
+              return `String tidak sah: mesti berakhir dengan "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `String tidak sah: mesti mengandungi "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `String tidak sah: mesti sepadan dengan corak ${_issue.pattern}`;
+            return `${Nouns[_issue.format] ?? issue.format} tidak sah`;
+          }
+          case "not_multiple_of":
+            return `Nombor tidak sah: perlu gandaan ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `Kunci tidak dikenali: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Kunci tidak sah dalam ${issue.origin}`;
+          case "invalid_union":
+            return "Input tidak sah";
+          case "invalid_element":
+            return `Nilai tidak sah dalam ${issue.origin}`;
+          default:
+            return `Input tidak sah`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/nl.cjs
+var require_nl = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/nl.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "tekens" },
+        file: { unit: "bytes" },
+        array: { unit: "elementen" },
+        set: { unit: "elementen" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "getal";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "array";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "invoer",
+        email: "emailadres",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO datum en tijd",
+        date: "ISO datum",
+        time: "ISO tijd",
+        duration: "ISO duur",
+        ipv4: "IPv4-adres",
+        ipv6: "IPv6-adres",
+        cidrv4: "IPv4-bereik",
+        cidrv6: "IPv6-bereik",
+        base64: "base64-gecodeerde tekst",
+        base64url: "base64 URL-gecodeerde tekst",
+        json_string: "JSON string",
+        e164: "E.164-nummer",
+        jwt: "JWT",
+        template_literal: "invoer"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Ongeldige invoer: verwacht ${issue.expected}, ontving ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Ongeldige invoer: verwacht ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Ongeldige optie: verwacht één van ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Te lang: verwacht dat ${issue.origin ?? "waarde"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? "elementen"} bevat`;
+            return `Te lang: verwacht dat ${issue.origin ?? "waarde"} ${adj}${issue.maximum.toString()} is`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Te kort: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} bevat`;
+            }
+            return `Te kort: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} is`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with") {
+              return `Ongeldige tekst: moet met "${_issue.prefix}" beginnen`;
+            }
+            if (_issue.format === "ends_with")
+              return `Ongeldige tekst: moet op "${_issue.suffix}" eindigen`;
+            if (_issue.format === "includes")
+              return `Ongeldige tekst: moet "${_issue.includes}" bevatten`;
+            if (_issue.format === "regex")
+              return `Ongeldige tekst: moet overeenkomen met patroon ${_issue.pattern}`;
+            return `Ongeldig: ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Ongeldig getal: moet een veelvoud van ${issue.divisor} zijn`;
+          case "unrecognized_keys":
+            return `Onbekende key${issue.keys.length > 1 ? "s" : ""}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Ongeldige key in ${issue.origin}`;
+          case "invalid_union":
+            return "Ongeldige invoer";
+          case "invalid_element":
+            return `Ongeldige waarde in ${issue.origin}`;
+          default:
+            return `Ongeldige invoer`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/no.cjs
+var require_no = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/no.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "tegn", verb: "å ha" },
+        file: { unit: "bytes", verb: "å ha" },
+        array: { unit: "elementer", verb: "å inneholde" },
+        set: { unit: "elementer", verb: "å inneholde" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "tall";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "liste";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "input",
+        email: "e-postadresse",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO dato- og klokkeslett",
+        date: "ISO-dato",
+        time: "ISO-klokkeslett",
+        duration: "ISO-varighet",
+        ipv4: "IPv4-område",
+        ipv6: "IPv6-område",
+        cidrv4: "IPv4-spekter",
+        cidrv6: "IPv6-spekter",
+        base64: "base64-enkodet streng",
+        base64url: "base64url-enkodet streng",
+        json_string: "JSON-streng",
+        e164: "E.164-nummer",
+        jwt: "JWT",
+        template_literal: "input"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Ugyldig input: forventet ${issue.expected}, fikk ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Ugyldig verdi: forventet ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Ugyldig valg: forventet en av ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `For stor(t): forventet ${issue.origin ?? "value"} til å ha ${adj}${issue.maximum.toString()} ${sizing.unit ?? "elementer"}`;
+            return `For stor(t): forventet ${issue.origin ?? "value"} til å ha ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `For lite(n): forventet ${issue.origin} til å ha ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `For lite(n): forventet ${issue.origin} til å ha ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `Ugyldig streng: må starte med "${_issue.prefix}"`;
+            if (_issue.format === "ends_with")
+              return `Ugyldig streng: må ende med "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Ugyldig streng: må inneholde "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Ugyldig streng: må matche mønsteret ${_issue.pattern}`;
+            return `Ugyldig ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Ugyldig tall: må være et multiplum av ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `${issue.keys.length > 1 ? "Ukjente nøkler" : "Ukjent nøkkel"}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Ugyldig nøkkel i ${issue.origin}`;
+          case "invalid_union":
+            return "Ugyldig input";
+          case "invalid_element":
+            return `Ugyldig verdi i ${issue.origin}`;
+          default:
+            return `Ugyldig input`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ota.cjs
+var require_ota = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ota.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "harf", verb: "olmalıdır" },
+        file: { unit: "bayt", verb: "olmalıdır" },
+        array: { unit: "unsur", verb: "olmalıdır" },
+        set: { unit: "unsur", verb: "olmalıdır" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "numara";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "saf";
+            }
+            if (data === null) {
+              return "gayb";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "giren",
+        email: "epostagâh",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO hengâmı",
+        date: "ISO tarihi",
+        time: "ISO zamanı",
+        duration: "ISO müddeti",
+        ipv4: "IPv4 nişânı",
+        ipv6: "IPv6 nişânı",
+        cidrv4: "IPv4 menzili",
+        cidrv6: "IPv6 menzili",
+        base64: "base64-şifreli metin",
+        base64url: "base64url-şifreli metin",
+        json_string: "JSON metin",
+        e164: "E.164 sayısı",
+        jwt: "JWT",
+        template_literal: "giren"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Fâsit giren: umulan ${issue.expected}, alınan ${parsedType(issue.input)}`;
+          // return `Fâsit giren: umulan ${issue.expected}, alınan ${util.getParsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Fâsit giren: umulan ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Fâsit tercih: mûteberler ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Fazla büyük: ${issue.origin ?? "value"}, ${adj}${issue.maximum.toString()} ${sizing.unit ?? "elements"} sahip olmalıydı.`;
+            return `Fazla büyük: ${issue.origin ?? "value"}, ${adj}${issue.maximum.toString()} olmalıydı.`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Fazla küçük: ${issue.origin}, ${adj}${issue.minimum.toString()} ${sizing.unit} sahip olmalıydı.`;
+            }
+            return `Fazla küçük: ${issue.origin}, ${adj}${issue.minimum.toString()} olmalıydı.`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `Fâsit metin: "${_issue.prefix}" ile başlamalı.`;
+            if (_issue.format === "ends_with")
+              return `Fâsit metin: "${_issue.suffix}" ile bitmeli.`;
+            if (_issue.format === "includes")
+              return `Fâsit metin: "${_issue.includes}" ihtivâ etmeli.`;
+            if (_issue.format === "regex")
+              return `Fâsit metin: ${_issue.pattern} nakşına uymalı.`;
+            return `Fâsit ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Fâsit sayı: ${issue.divisor} katı olmalıydı.`;
+          case "unrecognized_keys":
+            return `Tanınmayan anahtar ${issue.keys.length > 1 ? "s" : ""}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `${issue.origin} için tanınmayan anahtar var.`;
+          case "invalid_union":
+            return "Giren tanınamadı.";
+          case "invalid_element":
+            return `${issue.origin} için tanınmayan kıymet var.`;
+          default:
+            return `Kıymet tanınamadı.`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ps.cjs
+var require_ps = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ps.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "توکي", verb: "ولري" },
+        file: { unit: "بایټس", verb: "ولري" },
+        array: { unit: "توکي", verb: "ولري" },
+        set: { unit: "توکي", verb: "ولري" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "عدد";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "ارې";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "ورودي",
+        email: "بریښنالیک",
+        url: "یو آر ال",
+        emoji: "ایموجي",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "نیټه او وخت",
+        date: "نېټه",
+        time: "وخت",
+        duration: "موده",
+        ipv4: "د IPv4 پته",
+        ipv6: "د IPv6 پته",
+        cidrv4: "د IPv4 ساحه",
+        cidrv6: "د IPv6 ساحه",
+        base64: "base64-encoded متن",
+        base64url: "base64url-encoded متن",
+        json_string: "JSON متن",
+        e164: "د E.164 شمېره",
+        jwt: "JWT",
+        template_literal: "ورودي"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `ناسم ورودي: باید ${issue.expected} وای, مګر ${parsedType(issue.input)} ترلاسه شو`;
+          case "invalid_value":
+            if (issue.values.length === 1) {
+              return `ناسم ورودي: باید ${util.stringifyPrimitive(issue.values[0])} وای`;
+            }
+            return `ناسم انتخاب: باید یو له ${util.joinValues(issue.values, "|")} څخه وای`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `ډیر لوی: ${issue.origin ?? "ارزښت"} باید ${adj}${issue.maximum.toString()} ${sizing.unit ?? "عنصرونه"} ولري`;
+            }
+            return `ډیر لوی: ${issue.origin ?? "ارزښت"} باید ${adj}${issue.maximum.toString()} وي`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `ډیر کوچنی: ${issue.origin} باید ${adj}${issue.minimum.toString()} ${sizing.unit} ولري`;
+            }
+            return `ډیر کوچنی: ${issue.origin} باید ${adj}${issue.minimum.toString()} وي`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with") {
+              return `ناسم متن: باید د "${_issue.prefix}" سره پیل شي`;
+            }
+            if (_issue.format === "ends_with") {
+              return `ناسم متن: باید د "${_issue.suffix}" سره پای ته ورسيږي`;
+            }
+            if (_issue.format === "includes") {
+              return `ناسم متن: باید "${_issue.includes}" ولري`;
+            }
+            if (_issue.format === "regex") {
+              return `ناسم متن: باید د ${_issue.pattern} سره مطابقت ولري`;
+            }
+            return `${Nouns[_issue.format] ?? issue.format} ناسم دی`;
+          }
+          case "not_multiple_of":
+            return `ناسم عدد: باید د ${issue.divisor} مضرب وي`;
+          case "unrecognized_keys":
+            return `ناسم ${issue.keys.length > 1 ? "کلیډونه" : "کلیډ"}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `ناسم کلیډ په ${issue.origin} کې`;
+          case "invalid_union":
+            return `ناسمه ورودي`;
+          case "invalid_element":
+            return `ناسم عنصر په ${issue.origin} کې`;
+          default:
+            return `ناسمه ورودي`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/pl.cjs
+var require_pl = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/pl.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "znaków", verb: "mieć" },
+        file: { unit: "bajtów", verb: "mieć" },
+        array: { unit: "elementów", verb: "mieć" },
+        set: { unit: "elementów", verb: "mieć" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "liczba";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "tablica";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "wyrażenie",
+        email: "adres email",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "data i godzina w formacie ISO",
+        date: "data w formacie ISO",
+        time: "godzina w formacie ISO",
+        duration: "czas trwania ISO",
+        ipv4: "adres IPv4",
+        ipv6: "adres IPv6",
+        cidrv4: "zakres IPv4",
+        cidrv6: "zakres IPv6",
+        base64: "ciąg znaków zakodowany w formacie base64",
+        base64url: "ciąg znaków zakodowany w formacie base64url",
+        json_string: "ciąg znaków w formacie JSON",
+        e164: "liczba E.164",
+        jwt: "JWT",
+        template_literal: "wejście"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Nieprawidłowe dane wejściowe: oczekiwano ${issue.expected}, otrzymano ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Nieprawidłowe dane wejściowe: oczekiwano ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Nieprawidłowa opcja: oczekiwano jednej z wartości ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Za duża wartość: oczekiwano, że ${issue.origin ?? "wartość"} będzie mieć ${adj}${issue.maximum.toString()} ${sizing.unit ?? "elementów"}`;
+            }
+            return `Zbyt duż(y/a/e): oczekiwano, że ${issue.origin ?? "wartość"} będzie wynosić ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Za mała wartość: oczekiwano, że ${issue.origin ?? "wartość"} będzie mieć ${adj}${issue.minimum.toString()} ${sizing.unit ?? "elementów"}`;
+            }
+            return `Zbyt mał(y/a/e): oczekiwano, że ${issue.origin ?? "wartość"} będzie wynosić ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `Nieprawidłowy ciąg znaków: musi zaczynać się od "${_issue.prefix}"`;
+            if (_issue.format === "ends_with")
+              return `Nieprawidłowy ciąg znaków: musi kończyć się na "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Nieprawidłowy ciąg znaków: musi zawierać "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Nieprawidłowy ciąg znaków: musi odpowiadać wzorcowi ${_issue.pattern}`;
+            return `Nieprawidłow(y/a/e) ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Nieprawidłowa liczba: musi być wielokrotnością ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `Nierozpoznane klucze${issue.keys.length > 1 ? "s" : ""}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Nieprawidłowy klucz w ${issue.origin}`;
+          case "invalid_union":
+            return "Nieprawidłowe dane wejściowe";
+          case "invalid_element":
+            return `Nieprawidłowa wartość w ${issue.origin}`;
+          default:
+            return `Nieprawidłowe dane wejściowe`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/pt.cjs
+var require_pt = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/pt.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "caracteres", verb: "ter" },
+        file: { unit: "bytes", verb: "ter" },
+        array: { unit: "itens", verb: "ter" },
+        set: { unit: "itens", verb: "ter" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "número";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "array";
+            }
+            if (data === null) {
+              return "nulo";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "padrão",
+        email: "endereço de e-mail",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "data e hora ISO",
+        date: "data ISO",
+        time: "hora ISO",
+        duration: "duração ISO",
+        ipv4: "endereço IPv4",
+        ipv6: "endereço IPv6",
+        cidrv4: "faixa de IPv4",
+        cidrv6: "faixa de IPv6",
+        base64: "texto codificado em base64",
+        base64url: "URL codificada em base64",
+        json_string: "texto JSON",
+        e164: "número E.164",
+        jwt: "JWT",
+        template_literal: "entrada"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Tipo inválido: esperado ${issue.expected}, recebido ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Entrada inválida: esperado ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Opção inválida: esperada uma das ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Muito grande: esperado que ${issue.origin ?? "valor"} tivesse ${adj}${issue.maximum.toString()} ${sizing.unit ?? "elementos"}`;
+            return `Muito grande: esperado que ${issue.origin ?? "valor"} fosse ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Muito pequeno: esperado que ${issue.origin} tivesse ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `Muito pequeno: esperado que ${issue.origin} fosse ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `Texto inválido: deve começar com "${_issue.prefix}"`;
+            if (_issue.format === "ends_with")
+              return `Texto inválido: deve terminar com "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Texto inválido: deve incluir "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Texto inválido: deve corresponder ao padrão ${_issue.pattern}`;
+            return `${Nouns[_issue.format] ?? issue.format} inválido`;
+          }
+          case "not_multiple_of":
+            return `Número inválido: deve ser múltiplo de ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `Chave${issue.keys.length > 1 ? "s" : ""} desconhecida${issue.keys.length > 1 ? "s" : ""}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Chave inválida em ${issue.origin}`;
+          case "invalid_union":
+            return "Entrada inválida";
+          case "invalid_element":
+            return `Valor inválido em ${issue.origin}`;
+          default:
+            return `Campo inválido`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ru.cjs
+var require_ru = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ru.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    function getRussianPlural(count, one, few, many) {
+      const absCount = Math.abs(count);
+      const lastDigit = absCount % 10;
+      const lastTwoDigits = absCount % 100;
+      if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {
+        return many;
+      }
+      if (lastDigit === 1) {
+        return one;
+      }
+      if (lastDigit >= 2 && lastDigit <= 4) {
+        return few;
+      }
+      return many;
+    }
+    __name(getRussianPlural, "getRussianPlural");
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: {
+          unit: {
+            one: "символ",
+            few: "символа",
+            many: "символов"
+          },
+          verb: "иметь"
+        },
+        file: {
+          unit: {
+            one: "байт",
+            few: "байта",
+            many: "байт"
+          },
+          verb: "иметь"
+        },
+        array: {
+          unit: {
+            one: "элемент",
+            few: "элемента",
+            many: "элементов"
+          },
+          verb: "иметь"
+        },
+        set: {
+          unit: {
+            one: "элемент",
+            few: "элемента",
+            many: "элементов"
+          },
+          verb: "иметь"
+        }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "число";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "массив";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "ввод",
+        email: "email адрес",
+        url: "URL",
+        emoji: "эмодзи",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO дата и время",
+        date: "ISO дата",
+        time: "ISO время",
+        duration: "ISO длительность",
+        ipv4: "IPv4 адрес",
+        ipv6: "IPv6 адрес",
+        cidrv4: "IPv4 диапазон",
+        cidrv6: "IPv6 диапазон",
+        base64: "строка в формате base64",
+        base64url: "строка в формате base64url",
+        json_string: "JSON строка",
+        e164: "номер E.164",
+        jwt: "JWT",
+        template_literal: "ввод"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Неверный ввод: ожидалось ${issue.expected}, получено ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Неверный ввод: ожидалось ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Неверный вариант: ожидалось одно из ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              const maxValue = Number(issue.maximum);
+              const unit = getRussianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);
+              return `Слишком большое значение: ожидалось, что ${issue.origin ?? "значение"} будет иметь ${adj}${issue.maximum.toString()} ${unit}`;
+            }
+            return `Слишком большое значение: ожидалось, что ${issue.origin ?? "значение"} будет ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              const minValue = Number(issue.minimum);
+              const unit = getRussianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);
+              return `Слишком маленькое значение: ожидалось, что ${issue.origin} будет иметь ${adj}${issue.minimum.toString()} ${unit}`;
+            }
+            return `Слишком маленькое значение: ожидалось, что ${issue.origin} будет ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `Неверная строка: должна начинаться с "${_issue.prefix}"`;
+            if (_issue.format === "ends_with")
+              return `Неверная строка: должна заканчиваться на "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Неверная строка: должна содержать "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Неверная строка: должна соответствовать шаблону ${_issue.pattern}`;
+            return `Неверный ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Неверное число: должно быть кратным ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `Нераспознанн${issue.keys.length > 1 ? "ые" : "ый"} ключ${issue.keys.length > 1 ? "и" : ""}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Неверный ключ в ${issue.origin}`;
+          case "invalid_union":
+            return "Неверные входные данные";
+          case "invalid_element":
+            return `Неверное значение в ${issue.origin}`;
+          default:
+            return `Неверные входные данные`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/sl.cjs
+var require_sl = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/sl.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "znakov", verb: "imeti" },
+        file: { unit: "bajtov", verb: "imeti" },
+        array: { unit: "elementov", verb: "imeti" },
+        set: { unit: "elementov", verb: "imeti" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "število";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "tabela";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "vnos",
+        email: "e-poštni naslov",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO datum in čas",
+        date: "ISO datum",
+        time: "ISO čas",
+        duration: "ISO trajanje",
+        ipv4: "IPv4 naslov",
+        ipv6: "IPv6 naslov",
+        cidrv4: "obseg IPv4",
+        cidrv6: "obseg IPv6",
+        base64: "base64 kodiran niz",
+        base64url: "base64url kodiran niz",
+        json_string: "JSON niz",
+        e164: "E.164 številka",
+        jwt: "JWT",
+        template_literal: "vnos"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Neveljaven vnos: pričakovano ${issue.expected}, prejeto ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Neveljaven vnos: pričakovano ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Neveljavna možnost: pričakovano eno izmed ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Preveliko: pričakovano, da bo ${issue.origin ?? "vrednost"} imelo ${adj}${issue.maximum.toString()} ${sizing.unit ?? "elementov"}`;
+            return `Preveliko: pričakovano, da bo ${issue.origin ?? "vrednost"} ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Premajhno: pričakovano, da bo ${issue.origin} imelo ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `Premajhno: pričakovano, da bo ${issue.origin} ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with") {
+              return `Neveljaven niz: mora se začeti z "${_issue.prefix}"`;
+            }
+            if (_issue.format === "ends_with")
+              return `Neveljaven niz: mora se končati z "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Neveljaven niz: mora vsebovati "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Neveljaven niz: mora ustrezati vzorcu ${_issue.pattern}`;
+            return `Neveljaven ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Neveljavno število: mora biti večkratnik ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `Neprepoznan${issue.keys.length > 1 ? "i ključi" : " ključ"}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Neveljaven ključ v ${issue.origin}`;
+          case "invalid_union":
+            return "Neveljaven vnos";
+          case "invalid_element":
+            return `Neveljavna vrednost v ${issue.origin}`;
+          default:
+            return "Neveljaven vnos";
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/sv.cjs
+var require_sv = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/sv.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "tecken", verb: "att ha" },
+        file: { unit: "bytes", verb: "att ha" },
+        array: { unit: "objekt", verb: "att innehålla" },
+        set: { unit: "objekt", verb: "att innehålla" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "antal";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "lista";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "reguljärt uttryck",
+        email: "e-postadress",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO-datum och tid",
+        date: "ISO-datum",
+        time: "ISO-tid",
+        duration: "ISO-varaktighet",
+        ipv4: "IPv4-intervall",
+        ipv6: "IPv6-intervall",
+        cidrv4: "IPv4-spektrum",
+        cidrv6: "IPv6-spektrum",
+        base64: "base64-kodad sträng",
+        base64url: "base64url-kodad sträng",
+        json_string: "JSON-sträng",
+        e164: "E.164-nummer",
+        jwt: "JWT",
+        template_literal: "mall-literal"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Ogiltig inmatning: förväntat ${issue.expected}, fick ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Ogiltig inmatning: förväntat ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Ogiltigt val: förväntade en av ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `För stor(t): förväntade ${issue.origin ?? "värdet"} att ha ${adj}${issue.maximum.toString()} ${sizing.unit ?? "element"}`;
+            }
+            return `För stor(t): förväntat ${issue.origin ?? "värdet"} att ha ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `För lite(t): förväntade ${issue.origin ?? "värdet"} att ha ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `För lite(t): förväntade ${issue.origin ?? "värdet"} att ha ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with") {
+              return `Ogiltig sträng: måste börja med "${_issue.prefix}"`;
+            }
+            if (_issue.format === "ends_with")
+              return `Ogiltig sträng: måste sluta med "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Ogiltig sträng: måste innehålla "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Ogiltig sträng: måste matcha mönstret "${_issue.pattern}"`;
+            return `Ogiltig(t) ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Ogiltigt tal: måste vara en multipel av ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `${issue.keys.length > 1 ? "Okända nycklar" : "Okänd nyckel"}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Ogiltig nyckel i ${issue.origin ?? "värdet"}`;
+          case "invalid_union":
+            return "Ogiltig input";
+          case "invalid_element":
+            return `Ogiltigt värde i ${issue.origin ?? "värdet"}`;
+          default:
+            return `Ogiltig input`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ta.cjs
+var require_ta = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ta.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "எழுத்துக்கள்", verb: "கொண்டிருக்க வேண்டும்" },
+        file: { unit: "பைட்டுகள்", verb: "கொண்டிருக்க வேண்டும்" },
+        array: { unit: "உறுப்புகள்", verb: "கொண்டிருக்க வேண்டும்" },
+        set: { unit: "உறுப்புகள்", verb: "கொண்டிருக்க வேண்டும்" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "எண் அல்லாதது" : "எண்";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "அணி";
+            }
+            if (data === null) {
+              return "வெறுமை";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "உள்ளீடு",
+        email: "மின்னஞ்சல் முகவரி",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO தேதி நேரம்",
+        date: "ISO தேதி",
+        time: "ISO நேரம்",
+        duration: "ISO கால அளவு",
+        ipv4: "IPv4 முகவரி",
+        ipv6: "IPv6 முகவரி",
+        cidrv4: "IPv4 வரம்பு",
+        cidrv6: "IPv6 வரம்பு",
+        base64: "base64-encoded சரம்",
+        base64url: "base64url-encoded சரம்",
+        json_string: "JSON சரம்",
+        e164: "E.164 எண்",
+        jwt: "JWT",
+        template_literal: "input"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `தவறான உள்ளீடு: எதிர்பார்க்கப்பட்டது ${issue.expected}, பெறப்பட்டது ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `தவறான உள்ளீடு: எதிர்பார்க்கப்பட்டது ${util.stringifyPrimitive(issue.values[0])}`;
+            return `தவறான விருப்பம்: எதிர்பார்க்கப்பட்டது ${util.joinValues(issue.values, "|")} இல் ஒன்று`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `மிக பெரியது: எதிர்பார்க்கப்பட்டது ${issue.origin ?? "மதிப்பு"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? "உறுப்புகள்"} ஆக இருக்க வேண்டும்`;
+            }
+            return `மிக பெரியது: எதிர்பார்க்கப்பட்டது ${issue.origin ?? "மதிப்பு"} ${adj}${issue.maximum.toString()} ஆக இருக்க வேண்டும்`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `மிகச் சிறியது: எதிர்பார்க்கப்பட்டது ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} ஆக இருக்க வேண்டும்`;
+            }
+            return `மிகச் சிறியது: எதிர்பார்க்கப்பட்டது ${issue.origin} ${adj}${issue.minimum.toString()} ஆக இருக்க வேண்டும்`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `தவறான சரம்: "${_issue.prefix}" இல் தொடங்க வேண்டும்`;
+            if (_issue.format === "ends_with")
+              return `தவறான சரம்: "${_issue.suffix}" இல் முடிவடைய வேண்டும்`;
+            if (_issue.format === "includes")
+              return `தவறான சரம்: "${_issue.includes}" ஐ உள்ளடக்க வேண்டும்`;
+            if (_issue.format === "regex")
+              return `தவறான சரம்: ${_issue.pattern} முறைபாட்டுடன் பொருந்த வேண்டும்`;
+            return `தவறான ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `தவறான எண்: ${issue.divisor} இன் பலமாக இருக்க வேண்டும்`;
+          case "unrecognized_keys":
+            return `அடையாளம் தெரியாத விசை${issue.keys.length > 1 ? "கள்" : ""}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `${issue.origin} இல் தவறான விசை`;
+          case "invalid_union":
+            return "தவறான உள்ளீடு";
+          case "invalid_element":
+            return `${issue.origin} இல் தவறான மதிப்பு`;
+          default:
+            return `தவறான உள்ளீடு`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/th.cjs
+var require_th = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/th.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "ตัวอักษร", verb: "ควรมี" },
+        file: { unit: "ไบต์", verb: "ควรมี" },
+        array: { unit: "รายการ", verb: "ควรมี" },
+        set: { unit: "รายการ", verb: "ควรมี" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "ไม่ใช่ตัวเลข (NaN)" : "ตัวเลข";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "อาร์เรย์ (Array)";
+            }
+            if (data === null) {
+              return "ไม่มีค่า (null)";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "ข้อมูลที่ป้อน",
+        email: "ที่อยู่อีเมล",
+        url: "URL",
+        emoji: "อิโมจิ",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "วันที่เวลาแบบ ISO",
+        date: "วันที่แบบ ISO",
+        time: "เวลาแบบ ISO",
+        duration: "ช่วงเวลาแบบ ISO",
+        ipv4: "ที่อยู่ IPv4",
+        ipv6: "ที่อยู่ IPv6",
+        cidrv4: "ช่วง IP แบบ IPv4",
+        cidrv6: "ช่วง IP แบบ IPv6",
+        base64: "ข้อความแบบ Base64",
+        base64url: "ข้อความแบบ Base64 สำหรับ URL",
+        json_string: "ข้อความแบบ JSON",
+        e164: "เบอร์โทรศัพท์ระหว่างประเทศ (E.164)",
+        jwt: "โทเคน JWT",
+        template_literal: "ข้อมูลที่ป้อน"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `ประเภทข้อมูลไม่ถูกต้อง: ควรเป็น ${issue.expected} แต่ได้รับ ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `ค่าไม่ถูกต้อง: ควรเป็น ${util.stringifyPrimitive(issue.values[0])}`;
+            return `ตัวเลือกไม่ถูกต้อง: ควรเป็นหนึ่งใน ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "ไม่เกิน" : "น้อยกว่า";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `เกินกำหนด: ${issue.origin ?? "ค่า"} ควรมี${adj} ${issue.maximum.toString()} ${sizing.unit ?? "รายการ"}`;
+            return `เกินกำหนด: ${issue.origin ?? "ค่า"} ควรมี${adj} ${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? "อย่างน้อย" : "มากกว่า";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `น้อยกว่ากำหนด: ${issue.origin} ควรมี${adj} ${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `น้อยกว่ากำหนด: ${issue.origin} ควรมี${adj} ${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with") {
+              return `รูปแบบไม่ถูกต้อง: ข้อความต้องขึ้นต้นด้วย "${_issue.prefix}"`;
+            }
+            if (_issue.format === "ends_with")
+              return `รูปแบบไม่ถูกต้อง: ข้อความต้องลงท้ายด้วย "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `รูปแบบไม่ถูกต้อง: ข้อความต้องมี "${_issue.includes}" อยู่ในข้อความ`;
+            if (_issue.format === "regex")
+              return `รูปแบบไม่ถูกต้อง: ต้องตรงกับรูปแบบที่กำหนด ${_issue.pattern}`;
+            return `รูปแบบไม่ถูกต้อง: ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `ตัวเลขไม่ถูกต้อง: ต้องเป็นจำนวนที่หารด้วย ${issue.divisor} ได้ลงตัว`;
+          case "unrecognized_keys":
+            return `พบคีย์ที่ไม่รู้จัก: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `คีย์ไม่ถูกต้องใน ${issue.origin}`;
+          case "invalid_union":
+            return "ข้อมูลไม่ถูกต้อง: ไม่ตรงกับรูปแบบยูเนียนที่กำหนดไว้";
+          case "invalid_element":
+            return `ข้อมูลไม่ถูกต้องใน ${issue.origin}`;
+          default:
+            return `ข้อมูลไม่ถูกต้อง`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/tr.cjs
+var require_tr = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/tr.cjs"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.parsedType = void 0;
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var parsedType = /* @__PURE__ */ __name((data) => {
+      const t = typeof data;
+      switch (t) {
+        case "number": {
+          return Number.isNaN(data) ? "NaN" : "number";
+        }
+        case "object": {
+          if (Array.isArray(data)) {
+            return "array";
+          }
+          if (data === null) {
+            return "null";
+          }
+          if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+            return data.constructor.name;
+          }
+        }
+      }
+      return t;
+    }, "parsedType");
+    exports2.parsedType = parsedType;
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "karakter", verb: "olmalı" },
+        file: { unit: "bayt", verb: "olmalı" },
+        array: { unit: "öğe", verb: "olmalı" },
+        set: { unit: "öğe", verb: "olmalı" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const Nouns = {
+        regex: "girdi",
+        email: "e-posta adresi",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO tarih ve saat",
+        date: "ISO tarih",
+        time: "ISO saat",
+        duration: "ISO süre",
+        ipv4: "IPv4 adresi",
+        ipv6: "IPv6 adresi",
+        cidrv4: "IPv4 aralığı",
+        cidrv6: "IPv6 aralığı",
+        base64: "base64 ile şifrelenmiş metin",
+        base64url: "base64url ile şifrelenmiş metin",
+        json_string: "JSON dizesi",
+        e164: "E.164 sayısı",
+        jwt: "JWT",
+        template_literal: "Şablon dizesi"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Geçersiz değer: beklenen ${issue.expected}, alınan ${(0, exports2.parsedType)(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Geçersiz değer: beklenen ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Geçersiz seçenek: aşağıdakilerden biri olmalı: ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Çok büyük: beklenen ${issue.origin ?? "değer"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? "öğe"}`;
+            return `Çok büyük: beklenen ${issue.origin ?? "değer"} ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Çok küçük: beklenen ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            return `Çok küçük: beklenen ${issue.origin} ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `Geçersiz metin: "${_issue.prefix}" ile başlamalı`;
+            if (_issue.format === "ends_with")
+              return `Geçersiz metin: "${_issue.suffix}" ile bitmeli`;
+            if (_issue.format === "includes")
+              return `Geçersiz metin: "${_issue.includes}" içermeli`;
+            if (_issue.format === "regex")
+              return `Geçersiz metin: ${_issue.pattern} desenine uymalı`;
+            return `Geçersiz ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Geçersiz sayı: ${issue.divisor} ile tam bölünebilmeli`;
+          case "unrecognized_keys":
+            return `Tanınmayan anahtar${issue.keys.length > 1 ? "lar" : ""}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `${issue.origin} içinde geçersiz anahtar`;
+          case "invalid_union":
+            return "Geçersiz değer";
+          case "invalid_element":
+            return `${issue.origin} içinde geçersiz değer`;
+          default:
+            return `Geçersiz değer`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/uk.cjs
+var require_uk = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/uk.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "символів", verb: "матиме" },
+        file: { unit: "байтів", verb: "матиме" },
+        array: { unit: "елементів", verb: "матиме" },
+        set: { unit: "елементів", verb: "матиме" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "число";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "масив";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "вхідні дані",
+        email: "адреса електронної пошти",
+        url: "URL",
+        emoji: "емодзі",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "дата та час ISO",
+        date: "дата ISO",
+        time: "час ISO",
+        duration: "тривалість ISO",
+        ipv4: "адреса IPv4",
+        ipv6: "адреса IPv6",
+        cidrv4: "діапазон IPv4",
+        cidrv6: "діапазон IPv6",
+        base64: "рядок у кодуванні base64",
+        base64url: "рядок у кодуванні base64url",
+        json_string: "рядок JSON",
+        e164: "номер E.164",
+        jwt: "JWT",
+        template_literal: "вхідні дані"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Неправильні вхідні дані: очікується ${issue.expected}, отримано ${parsedType(issue.input)}`;
+          // return `Неправильні вхідні дані: очікується ${issue.expected}, отримано ${util.getParsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Неправильні вхідні дані: очікується ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Неправильна опція: очікується одне з ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Занадто велике: очікується, що ${issue.origin ?? "значення"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? "елементів"}`;
+            return `Занадто велике: очікується, що ${issue.origin ?? "значення"} буде ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Занадто мале: очікується, що ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `Занадто мале: очікується, що ${issue.origin} буде ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `Неправильний рядок: повинен починатися з "${_issue.prefix}"`;
+            if (_issue.format === "ends_with")
+              return `Неправильний рядок: повинен закінчуватися на "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Неправильний рядок: повинен містити "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Неправильний рядок: повинен відповідати шаблону ${_issue.pattern}`;
+            return `Неправильний ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Неправильне число: повинно бути кратним ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `Нерозпізнаний ключ${issue.keys.length > 1 ? "і" : ""}: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Неправильний ключ у ${issue.origin}`;
+          case "invalid_union":
+            return "Неправильні вхідні дані";
+          case "invalid_element":
+            return `Неправильне значення у ${issue.origin}`;
+          default:
+            return `Неправильні вхідні дані`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ua.cjs
+var require_ua = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ua.cjs"(exports2, module2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var uk_js_1 = __importDefault(require_uk());
+    function default_1() {
+      return (0, uk_js_1.default)();
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ur.cjs
+var require_ur = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/ur.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "حروف", verb: "ہونا" },
+        file: { unit: "بائٹس", verb: "ہونا" },
+        array: { unit: "آئٹمز", verb: "ہونا" },
+        set: { unit: "آئٹمز", verb: "ہونا" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "نمبر";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "آرے";
+            }
+            if (data === null) {
+              return "نل";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "ان پٹ",
+        email: "ای میل ایڈریس",
+        url: "یو آر ایل",
+        emoji: "ایموجی",
+        uuid: "یو یو آئی ڈی",
+        uuidv4: "یو یو آئی ڈی وی 4",
+        uuidv6: "یو یو آئی ڈی وی 6",
+        nanoid: "نینو آئی ڈی",
+        guid: "جی یو آئی ڈی",
+        cuid: "سی یو آئی ڈی",
+        cuid2: "سی یو آئی ڈی 2",
+        ulid: "یو ایل آئی ڈی",
+        xid: "ایکس آئی ڈی",
+        ksuid: "کے ایس یو آئی ڈی",
+        datetime: "آئی ایس او ڈیٹ ٹائم",
+        date: "آئی ایس او تاریخ",
+        time: "آئی ایس او وقت",
+        duration: "آئی ایس او مدت",
+        ipv4: "آئی پی وی 4 ایڈریس",
+        ipv6: "آئی پی وی 6 ایڈریس",
+        cidrv4: "آئی پی وی 4 رینج",
+        cidrv6: "آئی پی وی 6 رینج",
+        base64: "بیس 64 ان کوڈڈ سٹرنگ",
+        base64url: "بیس 64 یو آر ایل ان کوڈڈ سٹرنگ",
+        json_string: "جے ایس او این سٹرنگ",
+        e164: "ای 164 نمبر",
+        jwt: "جے ڈبلیو ٹی",
+        template_literal: "ان پٹ"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `غلط ان پٹ: ${issue.expected} متوقع تھا، ${parsedType(issue.input)} موصول ہوا`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `غلط ان پٹ: ${util.stringifyPrimitive(issue.values[0])} متوقع تھا`;
+            return `غلط آپشن: ${util.joinValues(issue.values, "|")} میں سے ایک متوقع تھا`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `بہت بڑا: ${issue.origin ?? "ویلیو"} کے ${adj}${issue.maximum.toString()} ${sizing.unit ?? "عناصر"} ہونے متوقع تھے`;
+            return `بہت بڑا: ${issue.origin ?? "ویلیو"} کا ${adj}${issue.maximum.toString()} ہونا متوقع تھا`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `بہت چھوٹا: ${issue.origin} کے ${adj}${issue.minimum.toString()} ${sizing.unit} ہونے متوقع تھے`;
+            }
+            return `بہت چھوٹا: ${issue.origin} کا ${adj}${issue.minimum.toString()} ہونا متوقع تھا`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with") {
+              return `غلط سٹرنگ: "${_issue.prefix}" سے شروع ہونا چاہیے`;
+            }
+            if (_issue.format === "ends_with")
+              return `غلط سٹرنگ: "${_issue.suffix}" پر ختم ہونا چاہیے`;
+            if (_issue.format === "includes")
+              return `غلط سٹرنگ: "${_issue.includes}" شامل ہونا چاہیے`;
+            if (_issue.format === "regex")
+              return `غلط سٹرنگ: پیٹرن ${_issue.pattern} سے میچ ہونا چاہیے`;
+            return `غلط ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `غلط نمبر: ${issue.divisor} کا مضاعف ہونا چاہیے`;
+          case "unrecognized_keys":
+            return `غیر تسلیم شدہ کی${issue.keys.length > 1 ? "ز" : ""}: ${util.joinValues(issue.keys, "، ")}`;
+          case "invalid_key":
+            return `${issue.origin} میں غلط کی`;
+          case "invalid_union":
+            return "غلط ان پٹ";
+          case "invalid_element":
+            return `${issue.origin} میں غلط ویلیو`;
+          default:
+            return `غلط ان پٹ`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/vi.cjs
+var require_vi = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/vi.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "ký tự", verb: "có" },
+        file: { unit: "byte", verb: "có" },
+        array: { unit: "phần tử", verb: "có" },
+        set: { unit: "phần tử", verb: "có" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "số";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "mảng";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "đầu vào",
+        email: "địa chỉ email",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ngày giờ ISO",
+        date: "ngày ISO",
+        time: "giờ ISO",
+        duration: "khoảng thời gian ISO",
+        ipv4: "địa chỉ IPv4",
+        ipv6: "địa chỉ IPv6",
+        cidrv4: "dải IPv4",
+        cidrv6: "dải IPv6",
+        base64: "chuỗi mã hóa base64",
+        base64url: "chuỗi mã hóa base64url",
+        json_string: "chuỗi JSON",
+        e164: "số E.164",
+        jwt: "JWT",
+        template_literal: "đầu vào"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Đầu vào không hợp lệ: mong đợi ${issue.expected}, nhận được ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Đầu vào không hợp lệ: mong đợi ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Tùy chọn không hợp lệ: mong đợi một trong các giá trị ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Quá lớn: mong đợi ${issue.origin ?? "giá trị"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? "phần tử"}`;
+            return `Quá lớn: mong đợi ${issue.origin ?? "giá trị"} ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `Quá nhỏ: mong đợi ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `Quá nhỏ: mong đợi ${issue.origin} ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `Chuỗi không hợp lệ: phải bắt đầu bằng "${_issue.prefix}"`;
+            if (_issue.format === "ends_with")
+              return `Chuỗi không hợp lệ: phải kết thúc bằng "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Chuỗi không hợp lệ: phải bao gồm "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Chuỗi không hợp lệ: phải khớp với mẫu ${_issue.pattern}`;
+            return `${Nouns[_issue.format] ?? issue.format} không hợp lệ`;
+          }
+          case "not_multiple_of":
+            return `Số không hợp lệ: phải là bội số của ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `Khóa không được nhận dạng: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Khóa không hợp lệ trong ${issue.origin}`;
+          case "invalid_union":
+            return "Đầu vào không hợp lệ";
+          case "invalid_element":
+            return `Giá trị không hợp lệ trong ${issue.origin}`;
+          default:
+            return `Đầu vào không hợp lệ`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/zh-CN.cjs
+var require_zh_CN = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/zh-CN.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "字符", verb: "包含" },
+        file: { unit: "字节", verb: "包含" },
+        array: { unit: "项", verb: "包含" },
+        set: { unit: "项", verb: "包含" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "非数字(NaN)" : "数字";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "数组";
+            }
+            if (data === null) {
+              return "空值(null)";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "输入",
+        email: "电子邮件",
+        url: "URL",
+        emoji: "表情符号",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO日期时间",
+        date: "ISO日期",
+        time: "ISO时间",
+        duration: "ISO时长",
+        ipv4: "IPv4地址",
+        ipv6: "IPv6地址",
+        cidrv4: "IPv4网段",
+        cidrv6: "IPv6网段",
+        base64: "base64编码字符串",
+        base64url: "base64url编码字符串",
+        json_string: "JSON字符串",
+        e164: "E.164号码",
+        jwt: "JWT",
+        template_literal: "输入"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `无效输入:期望 ${issue.expected},实际接收 ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `无效输入:期望 ${util.stringifyPrimitive(issue.values[0])}`;
+            return `无效选项:期望以下之一 ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `数值过大:期望 ${issue.origin ?? "值"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? "个元素"}`;
+            return `数值过大:期望 ${issue.origin ?? "值"} ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `数值过小:期望 ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `数值过小:期望 ${issue.origin} ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `无效字符串:必须以 "${_issue.prefix}" 开头`;
+            if (_issue.format === "ends_with")
+              return `无效字符串:必须以 "${_issue.suffix}" 结尾`;
+            if (_issue.format === "includes")
+              return `无效字符串:必须包含 "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `无效字符串:必须满足正则表达式 ${_issue.pattern}`;
+            return `无效${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `无效数字:必须是 ${issue.divisor} 的倍数`;
+          case "unrecognized_keys":
+            return `出现未知的键(key): ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `${issue.origin} 中的键(key)无效`;
+          case "invalid_union":
+            return "无效输入";
+          case "invalid_element":
+            return `${issue.origin} 中包含无效值(value)`;
+          default:
+            return `无效输入`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/zh-TW.cjs
+var require_zh_TW = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/zh-TW.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "字元", verb: "擁有" },
+        file: { unit: "位元組", verb: "擁有" },
+        array: { unit: "項目", verb: "擁有" },
+        set: { unit: "項目", verb: "擁有" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "number";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "array";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "輸入",
+        email: "郵件地址",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "ISO 日期時間",
+        date: "ISO 日期",
+        time: "ISO 時間",
+        duration: "ISO 期間",
+        ipv4: "IPv4 位址",
+        ipv6: "IPv6 位址",
+        cidrv4: "IPv4 範圍",
+        cidrv6: "IPv6 範圍",
+        base64: "base64 編碼字串",
+        base64url: "base64url 編碼字串",
+        json_string: "JSON 字串",
+        e164: "E.164 數值",
+        jwt: "JWT",
+        template_literal: "輸入"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `無效的輸入值:預期為 ${issue.expected},但收到 ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `無效的輸入值:預期為 ${util.stringifyPrimitive(issue.values[0])}`;
+            return `無效的選項:預期為以下其中之一 ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `數值過大:預期 ${issue.origin ?? "值"} 應為 ${adj}${issue.maximum.toString()} ${sizing.unit ?? "個元素"}`;
+            return `數值過大:預期 ${issue.origin ?? "值"} 應為 ${adj}${issue.maximum.toString()}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing) {
+              return `數值過小:預期 ${issue.origin} 應為 ${adj}${issue.minimum.toString()} ${sizing.unit}`;
+            }
+            return `數值過小:預期 ${issue.origin} 應為 ${adj}${issue.minimum.toString()}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with") {
+              return `無效的字串:必須以 "${_issue.prefix}" 開頭`;
+            }
+            if (_issue.format === "ends_with")
+              return `無效的字串:必須以 "${_issue.suffix}" 結尾`;
+            if (_issue.format === "includes")
+              return `無效的字串:必須包含 "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `無效的字串:必須符合格式 ${_issue.pattern}`;
+            return `無效的 ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `無效的數字:必須為 ${issue.divisor} 的倍數`;
+          case "unrecognized_keys":
+            return `無法識別的鍵值${issue.keys.length > 1 ? "們" : ""}:${util.joinValues(issue.keys, "、")}`;
+          case "invalid_key":
+            return `${issue.origin} 中有無效的鍵值`;
+          case "invalid_union":
+            return "無效的輸入值";
+          case "invalid_element":
+            return `${issue.origin} 中有無效的值`;
+          default:
+            return `無效的輸入值`;
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/yo.cjs
+var require_yo = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/yo.cjs"(exports2, module2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.default = default_1;
+    var util = __importStar(require_util());
+    var error = /* @__PURE__ */ __name(() => {
+      const Sizable = {
+        string: { unit: "àmi", verb: "ní" },
+        file: { unit: "bytes", verb: "ní" },
+        array: { unit: "nkan", verb: "ní" },
+        set: { unit: "nkan", verb: "ní" }
+      };
+      function getSizing(origin) {
+        return Sizable[origin] ?? null;
+      }
+      __name(getSizing, "getSizing");
+      const parsedType = /* @__PURE__ */ __name((data) => {
+        const t = typeof data;
+        switch (t) {
+          case "number": {
+            return Number.isNaN(data) ? "NaN" : "nọ́mbà";
+          }
+          case "object": {
+            if (Array.isArray(data)) {
+              return "akopọ";
+            }
+            if (data === null) {
+              return "null";
+            }
+            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
+              return data.constructor.name;
+            }
+          }
+        }
+        return t;
+      }, "parsedType");
+      const Nouns = {
+        regex: "ẹ̀rọ ìbáwọlé",
+        email: "àdírẹ́sì ìmẹ́lì",
+        url: "URL",
+        emoji: "emoji",
+        uuid: "UUID",
+        uuidv4: "UUIDv4",
+        uuidv6: "UUIDv6",
+        nanoid: "nanoid",
+        guid: "GUID",
+        cuid: "cuid",
+        cuid2: "cuid2",
+        ulid: "ULID",
+        xid: "XID",
+        ksuid: "KSUID",
+        datetime: "àkókò ISO",
+        date: "ọjọ́ ISO",
+        time: "àkókò ISO",
+        duration: "àkókò tó pé ISO",
+        ipv4: "àdírẹ́sì IPv4",
+        ipv6: "àdírẹ́sì IPv6",
+        cidrv4: "àgbègbè IPv4",
+        cidrv6: "àgbègbè IPv6",
+        base64: "ọ̀rọ̀ tí a kọ́ ní base64",
+        base64url: "ọ̀rọ̀ base64url",
+        json_string: "ọ̀rọ̀ JSON",
+        e164: "nọ́mbà E.164",
+        jwt: "JWT",
+        template_literal: "ẹ̀rọ ìbáwọlé"
+      };
+      return (issue) => {
+        switch (issue.code) {
+          case "invalid_type":
+            return `Ìbáwọlé aṣìṣe: a ní láti fi ${issue.expected}, àmọ̀ a rí ${parsedType(issue.input)}`;
+          case "invalid_value":
+            if (issue.values.length === 1)
+              return `Ìbáwọlé aṣìṣe: a ní láti fi ${util.stringifyPrimitive(issue.values[0])}`;
+            return `Àṣàyàn aṣìṣe: yan ọ̀kan lára ${util.joinValues(issue.values, "|")}`;
+          case "too_big": {
+            const adj = issue.inclusive ? "<=" : "<";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Tó pọ̀ jù: a ní láti jẹ́ pé ${issue.origin ?? "iye"} ${sizing.verb} ${adj}${issue.maximum} ${sizing.unit}`;
+            return `Tó pọ̀ jù: a ní láti jẹ́ ${adj}${issue.maximum}`;
+          }
+          case "too_small": {
+            const adj = issue.inclusive ? ">=" : ">";
+            const sizing = getSizing(issue.origin);
+            if (sizing)
+              return `Kéré ju: a ní láti jẹ́ pé ${issue.origin} ${sizing.verb} ${adj}${issue.minimum} ${sizing.unit}`;
+            return `Kéré ju: a ní láti jẹ́ ${adj}${issue.minimum}`;
+          }
+          case "invalid_format": {
+            const _issue = issue;
+            if (_issue.format === "starts_with")
+              return `Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ bẹ̀rẹ̀ pẹ̀lú "${_issue.prefix}"`;
+            if (_issue.format === "ends_with")
+              return `Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ parí pẹ̀lú "${_issue.suffix}"`;
+            if (_issue.format === "includes")
+              return `Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ ní "${_issue.includes}"`;
+            if (_issue.format === "regex")
+              return `Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ bá àpẹẹrẹ mu ${_issue.pattern}`;
+            return `Aṣìṣe: ${Nouns[_issue.format] ?? issue.format}`;
+          }
+          case "not_multiple_of":
+            return `Nọ́mbà aṣìṣe: gbọ́dọ̀ jẹ́ èyà pípín ti ${issue.divisor}`;
+          case "unrecognized_keys":
+            return `Bọtìnì àìmọ̀: ${util.joinValues(issue.keys, ", ")}`;
+          case "invalid_key":
+            return `Bọtìnì aṣìṣe nínú ${issue.origin}`;
+          case "invalid_union":
+            return "Ìbáwọlé aṣìṣe";
+          case "invalid_element":
+            return `Iye aṣìṣe nínú ${issue.origin}`;
+          default:
+            return "Ìbáwọlé aṣìṣe";
+        }
+      };
+    }, "error");
+    function default_1() {
+      return {
+        localeError: error()
+      };
+    }
+    __name(default_1, "default_1");
+    module2.exports = exports2.default;
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/index.cjs
+var require_locales = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/index.cjs"(exports2) {
+    "use strict";
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.yo = exports2.zhTW = exports2.zhCN = exports2.vi = exports2.ur = exports2.uk = exports2.ua = exports2.tr = exports2.th = exports2.ta = exports2.sv = exports2.sl = exports2.ru = exports2.pt = exports2.pl = exports2.ps = exports2.ota = exports2.no = exports2.nl = exports2.ms = exports2.mk = exports2.lt = exports2.ko = exports2.km = exports2.kh = exports2.ka = exports2.ja = exports2.it = exports2.is = exports2.id = exports2.hu = exports2.he = exports2.frCA = exports2.fr = exports2.fi = exports2.fa = exports2.es = exports2.eo = exports2.en = exports2.de = exports2.da = exports2.cs = exports2.ca = exports2.bg = exports2.be = exports2.az = exports2.ar = void 0;
+    var ar_js_1 = require_ar();
+    Object.defineProperty(exports2, "ar", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(ar_js_1).default;
+    }, "get") });
+    var az_js_1 = require_az();
+    Object.defineProperty(exports2, "az", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(az_js_1).default;
+    }, "get") });
+    var be_js_1 = require_be();
+    Object.defineProperty(exports2, "be", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(be_js_1).default;
+    }, "get") });
+    var bg_js_1 = require_bg();
+    Object.defineProperty(exports2, "bg", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(bg_js_1).default;
+    }, "get") });
+    var ca_js_1 = require_ca();
+    Object.defineProperty(exports2, "ca", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(ca_js_1).default;
+    }, "get") });
+    var cs_js_1 = require_cs();
+    Object.defineProperty(exports2, "cs", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(cs_js_1).default;
+    }, "get") });
+    var da_js_1 = require_da();
+    Object.defineProperty(exports2, "da", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(da_js_1).default;
+    }, "get") });
+    var de_js_1 = require_de();
+    Object.defineProperty(exports2, "de", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(de_js_1).default;
+    }, "get") });
+    var en_js_1 = require_en();
+    Object.defineProperty(exports2, "en", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(en_js_1).default;
+    }, "get") });
+    var eo_js_1 = require_eo();
+    Object.defineProperty(exports2, "eo", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(eo_js_1).default;
+    }, "get") });
+    var es_js_1 = require_es();
+    Object.defineProperty(exports2, "es", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(es_js_1).default;
+    }, "get") });
+    var fa_js_1 = require_fa();
+    Object.defineProperty(exports2, "fa", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(fa_js_1).default;
+    }, "get") });
+    var fi_js_1 = require_fi();
+    Object.defineProperty(exports2, "fi", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(fi_js_1).default;
+    }, "get") });
+    var fr_js_1 = require_fr();
+    Object.defineProperty(exports2, "fr", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(fr_js_1).default;
+    }, "get") });
+    var fr_CA_js_1 = require_fr_CA();
+    Object.defineProperty(exports2, "frCA", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(fr_CA_js_1).default;
+    }, "get") });
+    var he_js_1 = require_he();
+    Object.defineProperty(exports2, "he", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(he_js_1).default;
+    }, "get") });
+    var hu_js_1 = require_hu();
+    Object.defineProperty(exports2, "hu", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(hu_js_1).default;
+    }, "get") });
+    var id_js_1 = require_id();
+    Object.defineProperty(exports2, "id", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(id_js_1).default;
+    }, "get") });
+    var is_js_1 = require_is();
+    Object.defineProperty(exports2, "is", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(is_js_1).default;
+    }, "get") });
+    var it_js_1 = require_it();
+    Object.defineProperty(exports2, "it", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(it_js_1).default;
+    }, "get") });
+    var ja_js_1 = require_ja();
+    Object.defineProperty(exports2, "ja", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(ja_js_1).default;
+    }, "get") });
+    var ka_js_1 = require_ka();
+    Object.defineProperty(exports2, "ka", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(ka_js_1).default;
+    }, "get") });
+    var kh_js_1 = require_kh();
+    Object.defineProperty(exports2, "kh", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(kh_js_1).default;
+    }, "get") });
+    var km_js_1 = require_km();
+    Object.defineProperty(exports2, "km", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(km_js_1).default;
+    }, "get") });
+    var ko_js_1 = require_ko();
+    Object.defineProperty(exports2, "ko", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(ko_js_1).default;
+    }, "get") });
+    var lt_js_1 = require_lt();
+    Object.defineProperty(exports2, "lt", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(lt_js_1).default;
+    }, "get") });
+    var mk_js_1 = require_mk();
+    Object.defineProperty(exports2, "mk", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(mk_js_1).default;
+    }, "get") });
+    var ms_js_1 = require_ms();
+    Object.defineProperty(exports2, "ms", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(ms_js_1).default;
+    }, "get") });
+    var nl_js_1 = require_nl();
+    Object.defineProperty(exports2, "nl", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(nl_js_1).default;
+    }, "get") });
+    var no_js_1 = require_no();
+    Object.defineProperty(exports2, "no", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(no_js_1).default;
+    }, "get") });
+    var ota_js_1 = require_ota();
+    Object.defineProperty(exports2, "ota", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(ota_js_1).default;
+    }, "get") });
+    var ps_js_1 = require_ps();
+    Object.defineProperty(exports2, "ps", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(ps_js_1).default;
+    }, "get") });
+    var pl_js_1 = require_pl();
+    Object.defineProperty(exports2, "pl", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(pl_js_1).default;
+    }, "get") });
+    var pt_js_1 = require_pt();
+    Object.defineProperty(exports2, "pt", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(pt_js_1).default;
+    }, "get") });
+    var ru_js_1 = require_ru();
+    Object.defineProperty(exports2, "ru", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(ru_js_1).default;
+    }, "get") });
+    var sl_js_1 = require_sl();
+    Object.defineProperty(exports2, "sl", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(sl_js_1).default;
+    }, "get") });
+    var sv_js_1 = require_sv();
+    Object.defineProperty(exports2, "sv", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(sv_js_1).default;
+    }, "get") });
+    var ta_js_1 = require_ta();
+    Object.defineProperty(exports2, "ta", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(ta_js_1).default;
+    }, "get") });
+    var th_js_1 = require_th();
+    Object.defineProperty(exports2, "th", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(th_js_1).default;
+    }, "get") });
+    var tr_js_1 = require_tr();
+    Object.defineProperty(exports2, "tr", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(tr_js_1).default;
+    }, "get") });
+    var ua_js_1 = require_ua();
+    Object.defineProperty(exports2, "ua", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(ua_js_1).default;
+    }, "get") });
+    var uk_js_1 = require_uk();
+    Object.defineProperty(exports2, "uk", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(uk_js_1).default;
+    }, "get") });
+    var ur_js_1 = require_ur();
+    Object.defineProperty(exports2, "ur", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(ur_js_1).default;
+    }, "get") });
+    var vi_js_1 = require_vi();
+    Object.defineProperty(exports2, "vi", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(vi_js_1).default;
+    }, "get") });
+    var zh_CN_js_1 = require_zh_CN();
+    Object.defineProperty(exports2, "zhCN", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(zh_CN_js_1).default;
+    }, "get") });
+    var zh_TW_js_1 = require_zh_TW();
+    Object.defineProperty(exports2, "zhTW", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(zh_TW_js_1).default;
+    }, "get") });
+    var yo_js_1 = require_yo();
+    Object.defineProperty(exports2, "yo", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return __importDefault(yo_js_1).default;
+    }, "get") });
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/registries.cjs
+var require_registries = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/registries.cjs"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.globalRegistry = exports2.$ZodRegistry = exports2.$input = exports2.$output = void 0;
+    exports2.registry = registry;
+    exports2.$output = Symbol("ZodOutput");
+    exports2.$input = Symbol("ZodInput");
+    var $ZodRegistry = class {
+      static {
+        __name(this, "$ZodRegistry");
+      }
+      constructor() {
+        this._map = /* @__PURE__ */ new WeakMap();
+        this._idmap = /* @__PURE__ */ new Map();
+      }
+      add(schema, ..._meta) {
+        const meta = _meta[0];
+        this._map.set(schema, meta);
+        if (meta && typeof meta === "object" && "id" in meta) {
+          if (this._idmap.has(meta.id)) {
+            throw new Error(`ID ${meta.id} already exists in the registry`);
+          }
+          this._idmap.set(meta.id, schema);
+        }
+        return this;
+      }
+      clear() {
+        this._map = /* @__PURE__ */ new WeakMap();
+        this._idmap = /* @__PURE__ */ new Map();
+        return this;
+      }
+      remove(schema) {
+        const meta = this._map.get(schema);
+        if (meta && typeof meta === "object" && "id" in meta) {
+          this._idmap.delete(meta.id);
+        }
+        this._map.delete(schema);
+        return this;
+      }
+      get(schema) {
+        const p = schema._zod.parent;
+        if (p) {
+          const pm = { ...this.get(p) ?? {} };
+          delete pm.id;
+          const f = { ...pm, ...this._map.get(schema) };
+          return Object.keys(f).length ? f : void 0;
+        }
+        return this._map.get(schema);
+      }
+      has(schema) {
+        return this._map.has(schema);
+      }
+    };
+    exports2.$ZodRegistry = $ZodRegistry;
+    function registry() {
+      return new $ZodRegistry();
+    }
+    __name(registry, "registry");
+    exports2.globalRegistry = registry();
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/api.cjs
+var require_api = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/api.cjs"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.TimePrecision = void 0;
+    exports2._string = _string;
+    exports2._coercedString = _coercedString;
+    exports2._email = _email;
+    exports2._guid = _guid;
+    exports2._uuid = _uuid;
+    exports2._uuidv4 = _uuidv4;
+    exports2._uuidv6 = _uuidv6;
+    exports2._uuidv7 = _uuidv7;
+    exports2._url = _url;
+    exports2._emoji = _emoji;
+    exports2._nanoid = _nanoid;
+    exports2._cuid = _cuid;
+    exports2._cuid2 = _cuid2;
+    exports2._ulid = _ulid;
+    exports2._xid = _xid;
+    exports2._ksuid = _ksuid;
+    exports2._ipv4 = _ipv4;
+    exports2._ipv6 = _ipv6;
+    exports2._cidrv4 = _cidrv4;
+    exports2._cidrv6 = _cidrv6;
+    exports2._base64 = _base64;
+    exports2._base64url = _base64url;
+    exports2._e164 = _e164;
+    exports2._jwt = _jwt;
+    exports2._isoDateTime = _isoDateTime;
+    exports2._isoDate = _isoDate;
+    exports2._isoTime = _isoTime;
+    exports2._isoDuration = _isoDuration;
+    exports2._number = _number;
+    exports2._coercedNumber = _coercedNumber;
+    exports2._int = _int;
+    exports2._float32 = _float32;
+    exports2._float64 = _float64;
+    exports2._int32 = _int32;
+    exports2._uint32 = _uint32;
+    exports2._boolean = _boolean;
+    exports2._coercedBoolean = _coercedBoolean;
+    exports2._bigint = _bigint;
+    exports2._coercedBigint = _coercedBigint;
+    exports2._int64 = _int64;
+    exports2._uint64 = _uint64;
+    exports2._symbol = _symbol;
+    exports2._undefined = _undefined;
+    exports2._null = _null;
+    exports2._any = _any;
+    exports2._unknown = _unknown;
+    exports2._never = _never;
+    exports2._void = _void;
+    exports2._date = _date;
+    exports2._coercedDate = _coercedDate;
+    exports2._nan = _nan;
+    exports2._lt = _lt;
+    exports2._lte = _lte;
+    exports2._max = _lte;
+    exports2._lte = _lte;
+    exports2._max = _lte;
+    exports2._gt = _gt;
+    exports2._gte = _gte;
+    exports2._min = _gte;
+    exports2._gte = _gte;
+    exports2._min = _gte;
+    exports2._positive = _positive;
+    exports2._negative = _negative;
+    exports2._nonpositive = _nonpositive;
+    exports2._nonnegative = _nonnegative;
+    exports2._multipleOf = _multipleOf;
+    exports2._maxSize = _maxSize;
+    exports2._minSize = _minSize;
+    exports2._size = _size;
+    exports2._maxLength = _maxLength;
+    exports2._minLength = _minLength;
+    exports2._length = _length;
+    exports2._regex = _regex;
+    exports2._lowercase = _lowercase;
+    exports2._uppercase = _uppercase;
+    exports2._includes = _includes;
+    exports2._startsWith = _startsWith;
+    exports2._endsWith = _endsWith;
+    exports2._property = _property;
+    exports2._mime = _mime;
+    exports2._overwrite = _overwrite;
+    exports2._normalize = _normalize;
+    exports2._trim = _trim;
+    exports2._toLowerCase = _toLowerCase;
+    exports2._toUpperCase = _toUpperCase;
+    exports2._array = _array;
+    exports2._union = _union;
+    exports2._discriminatedUnion = _discriminatedUnion;
+    exports2._intersection = _intersection;
+    exports2._tuple = _tuple;
+    exports2._record = _record;
+    exports2._map = _map;
+    exports2._set = _set;
+    exports2._enum = _enum;
+    exports2._nativeEnum = _nativeEnum;
+    exports2._literal = _literal;
+    exports2._file = _file;
+    exports2._transform = _transform;
+    exports2._optional = _optional;
+    exports2._nullable = _nullable;
+    exports2._default = _default;
+    exports2._nonoptional = _nonoptional;
+    exports2._success = _success;
+    exports2._catch = _catch;
+    exports2._pipe = _pipe;
+    exports2._readonly = _readonly;
+    exports2._templateLiteral = _templateLiteral;
+    exports2._lazy = _lazy;
+    exports2._promise = _promise;
+    exports2._custom = _custom;
+    exports2._refine = _refine;
+    exports2._superRefine = _superRefine;
+    exports2._check = _check;
+    exports2._stringbool = _stringbool;
+    exports2._stringFormat = _stringFormat;
+    var checks = __importStar(require_checks());
+    var schemas = __importStar(require_schemas());
+    var util = __importStar(require_util());
+    function _string(Class, params) {
+      return new Class({
+        type: "string",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_string, "_string");
+    function _coercedString(Class, params) {
+      return new Class({
+        type: "string",
+        coerce: true,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_coercedString, "_coercedString");
+    function _email(Class, params) {
+      return new Class({
+        type: "string",
+        format: "email",
+        check: "string_format",
+        abort: false,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_email, "_email");
+    function _guid(Class, params) {
+      return new Class({
+        type: "string",
+        format: "guid",
+        check: "string_format",
+        abort: false,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_guid, "_guid");
+    function _uuid(Class, params) {
+      return new Class({
+        type: "string",
+        format: "uuid",
+        check: "string_format",
+        abort: false,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_uuid, "_uuid");
+    function _uuidv4(Class, params) {
+      return new Class({
+        type: "string",
+        format: "uuid",
+        check: "string_format",
+        abort: false,
+        version: "v4",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_uuidv4, "_uuidv4");
+    function _uuidv6(Class, params) {
+      return new Class({
+        type: "string",
+        format: "uuid",
+        check: "string_format",
+        abort: false,
+        version: "v6",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_uuidv6, "_uuidv6");
+    function _uuidv7(Class, params) {
+      return new Class({
+        type: "string",
+        format: "uuid",
+        check: "string_format",
+        abort: false,
+        version: "v7",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_uuidv7, "_uuidv7");
+    function _url(Class, params) {
+      return new Class({
+        type: "string",
+        format: "url",
+        check: "string_format",
+        abort: false,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_url, "_url");
+    function _emoji(Class, params) {
+      return new Class({
+        type: "string",
+        format: "emoji",
+        check: "string_format",
+        abort: false,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_emoji, "_emoji");
+    function _nanoid(Class, params) {
+      return new Class({
+        type: "string",
+        format: "nanoid",
+        check: "string_format",
+        abort: false,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_nanoid, "_nanoid");
+    function _cuid(Class, params) {
+      return new Class({
+        type: "string",
+        format: "cuid",
+        check: "string_format",
+        abort: false,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_cuid, "_cuid");
+    function _cuid2(Class, params) {
+      return new Class({
+        type: "string",
+        format: "cuid2",
+        check: "string_format",
+        abort: false,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_cuid2, "_cuid2");
+    function _ulid(Class, params) {
+      return new Class({
+        type: "string",
+        format: "ulid",
+        check: "string_format",
+        abort: false,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_ulid, "_ulid");
+    function _xid(Class, params) {
+      return new Class({
+        type: "string",
+        format: "xid",
+        check: "string_format",
+        abort: false,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_xid, "_xid");
+    function _ksuid(Class, params) {
+      return new Class({
+        type: "string",
+        format: "ksuid",
+        check: "string_format",
+        abort: false,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_ksuid, "_ksuid");
+    function _ipv4(Class, params) {
+      return new Class({
+        type: "string",
+        format: "ipv4",
+        check: "string_format",
+        abort: false,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_ipv4, "_ipv4");
+    function _ipv6(Class, params) {
+      return new Class({
+        type: "string",
+        format: "ipv6",
+        check: "string_format",
+        abort: false,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_ipv6, "_ipv6");
+    function _cidrv4(Class, params) {
+      return new Class({
+        type: "string",
+        format: "cidrv4",
+        check: "string_format",
+        abort: false,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_cidrv4, "_cidrv4");
+    function _cidrv6(Class, params) {
+      return new Class({
+        type: "string",
+        format: "cidrv6",
+        check: "string_format",
+        abort: false,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_cidrv6, "_cidrv6");
+    function _base64(Class, params) {
+      return new Class({
+        type: "string",
+        format: "base64",
+        check: "string_format",
+        abort: false,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_base64, "_base64");
+    function _base64url(Class, params) {
+      return new Class({
+        type: "string",
+        format: "base64url",
+        check: "string_format",
+        abort: false,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_base64url, "_base64url");
+    function _e164(Class, params) {
+      return new Class({
+        type: "string",
+        format: "e164",
+        check: "string_format",
+        abort: false,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_e164, "_e164");
+    function _jwt(Class, params) {
+      return new Class({
+        type: "string",
+        format: "jwt",
+        check: "string_format",
+        abort: false,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_jwt, "_jwt");
+    exports2.TimePrecision = {
+      Any: null,
+      Minute: -1,
+      Second: 0,
+      Millisecond: 3,
+      Microsecond: 6
+    };
+    function _isoDateTime(Class, params) {
+      return new Class({
+        type: "string",
+        format: "datetime",
+        check: "string_format",
+        offset: false,
+        local: false,
+        precision: null,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_isoDateTime, "_isoDateTime");
+    function _isoDate(Class, params) {
+      return new Class({
+        type: "string",
+        format: "date",
+        check: "string_format",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_isoDate, "_isoDate");
+    function _isoTime(Class, params) {
+      return new Class({
+        type: "string",
+        format: "time",
+        check: "string_format",
+        precision: null,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_isoTime, "_isoTime");
+    function _isoDuration(Class, params) {
+      return new Class({
+        type: "string",
+        format: "duration",
+        check: "string_format",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_isoDuration, "_isoDuration");
+    function _number(Class, params) {
+      return new Class({
+        type: "number",
+        checks: [],
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_number, "_number");
+    function _coercedNumber(Class, params) {
+      return new Class({
+        type: "number",
+        coerce: true,
+        checks: [],
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_coercedNumber, "_coercedNumber");
+    function _int(Class, params) {
+      return new Class({
+        type: "number",
+        check: "number_format",
+        abort: false,
+        format: "safeint",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_int, "_int");
+    function _float32(Class, params) {
+      return new Class({
+        type: "number",
+        check: "number_format",
+        abort: false,
+        format: "float32",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_float32, "_float32");
+    function _float64(Class, params) {
+      return new Class({
+        type: "number",
+        check: "number_format",
+        abort: false,
+        format: "float64",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_float64, "_float64");
+    function _int32(Class, params) {
+      return new Class({
+        type: "number",
+        check: "number_format",
+        abort: false,
+        format: "int32",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_int32, "_int32");
+    function _uint32(Class, params) {
+      return new Class({
+        type: "number",
+        check: "number_format",
+        abort: false,
+        format: "uint32",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_uint32, "_uint32");
+    function _boolean(Class, params) {
+      return new Class({
+        type: "boolean",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_boolean, "_boolean");
+    function _coercedBoolean(Class, params) {
+      return new Class({
+        type: "boolean",
+        coerce: true,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_coercedBoolean, "_coercedBoolean");
+    function _bigint(Class, params) {
+      return new Class({
+        type: "bigint",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_bigint, "_bigint");
+    function _coercedBigint(Class, params) {
+      return new Class({
+        type: "bigint",
+        coerce: true,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_coercedBigint, "_coercedBigint");
+    function _int64(Class, params) {
+      return new Class({
+        type: "bigint",
+        check: "bigint_format",
+        abort: false,
+        format: "int64",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_int64, "_int64");
+    function _uint64(Class, params) {
+      return new Class({
+        type: "bigint",
+        check: "bigint_format",
+        abort: false,
+        format: "uint64",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_uint64, "_uint64");
+    function _symbol(Class, params) {
+      return new Class({
+        type: "symbol",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_symbol, "_symbol");
+    function _undefined(Class, params) {
+      return new Class({
+        type: "undefined",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_undefined, "_undefined");
+    function _null(Class, params) {
+      return new Class({
+        type: "null",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_null, "_null");
+    function _any(Class) {
+      return new Class({
+        type: "any"
+      });
+    }
+    __name(_any, "_any");
+    function _unknown(Class) {
+      return new Class({
+        type: "unknown"
+      });
+    }
+    __name(_unknown, "_unknown");
+    function _never(Class, params) {
+      return new Class({
+        type: "never",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_never, "_never");
+    function _void(Class, params) {
+      return new Class({
+        type: "void",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_void, "_void");
+    function _date(Class, params) {
+      return new Class({
+        type: "date",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_date, "_date");
+    function _coercedDate(Class, params) {
+      return new Class({
+        type: "date",
+        coerce: true,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_coercedDate, "_coercedDate");
+    function _nan(Class, params) {
+      return new Class({
+        type: "nan",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_nan, "_nan");
+    function _lt(value, params) {
+      return new checks.$ZodCheckLessThan({
+        check: "less_than",
+        ...util.normalizeParams(params),
+        value,
+        inclusive: false
+      });
+    }
+    __name(_lt, "_lt");
+    function _lte(value, params) {
+      return new checks.$ZodCheckLessThan({
+        check: "less_than",
+        ...util.normalizeParams(params),
+        value,
+        inclusive: true
+      });
+    }
+    __name(_lte, "_lte");
+    function _gt(value, params) {
+      return new checks.$ZodCheckGreaterThan({
+        check: "greater_than",
+        ...util.normalizeParams(params),
+        value,
+        inclusive: false
+      });
+    }
+    __name(_gt, "_gt");
+    function _gte(value, params) {
+      return new checks.$ZodCheckGreaterThan({
+        check: "greater_than",
+        ...util.normalizeParams(params),
+        value,
+        inclusive: true
+      });
+    }
+    __name(_gte, "_gte");
+    function _positive(params) {
+      return _gt(0, params);
+    }
+    __name(_positive, "_positive");
+    function _negative(params) {
+      return _lt(0, params);
+    }
+    __name(_negative, "_negative");
+    function _nonpositive(params) {
+      return _lte(0, params);
+    }
+    __name(_nonpositive, "_nonpositive");
+    function _nonnegative(params) {
+      return _gte(0, params);
+    }
+    __name(_nonnegative, "_nonnegative");
+    function _multipleOf(value, params) {
+      return new checks.$ZodCheckMultipleOf({
+        check: "multiple_of",
+        ...util.normalizeParams(params),
+        value
+      });
+    }
+    __name(_multipleOf, "_multipleOf");
+    function _maxSize(maximum, params) {
+      return new checks.$ZodCheckMaxSize({
+        check: "max_size",
+        ...util.normalizeParams(params),
+        maximum
+      });
+    }
+    __name(_maxSize, "_maxSize");
+    function _minSize(minimum, params) {
+      return new checks.$ZodCheckMinSize({
+        check: "min_size",
+        ...util.normalizeParams(params),
+        minimum
+      });
+    }
+    __name(_minSize, "_minSize");
+    function _size(size, params) {
+      return new checks.$ZodCheckSizeEquals({
+        check: "size_equals",
+        ...util.normalizeParams(params),
+        size
+      });
+    }
+    __name(_size, "_size");
+    function _maxLength(maximum, params) {
+      const ch = new checks.$ZodCheckMaxLength({
+        check: "max_length",
+        ...util.normalizeParams(params),
+        maximum
+      });
+      return ch;
+    }
+    __name(_maxLength, "_maxLength");
+    function _minLength(minimum, params) {
+      return new checks.$ZodCheckMinLength({
+        check: "min_length",
+        ...util.normalizeParams(params),
+        minimum
+      });
+    }
+    __name(_minLength, "_minLength");
+    function _length(length, params) {
+      return new checks.$ZodCheckLengthEquals({
+        check: "length_equals",
+        ...util.normalizeParams(params),
+        length
+      });
+    }
+    __name(_length, "_length");
+    function _regex(pattern, params) {
+      return new checks.$ZodCheckRegex({
+        check: "string_format",
+        format: "regex",
+        ...util.normalizeParams(params),
+        pattern
+      });
+    }
+    __name(_regex, "_regex");
+    function _lowercase(params) {
+      return new checks.$ZodCheckLowerCase({
+        check: "string_format",
+        format: "lowercase",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_lowercase, "_lowercase");
+    function _uppercase(params) {
+      return new checks.$ZodCheckUpperCase({
+        check: "string_format",
+        format: "uppercase",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_uppercase, "_uppercase");
+    function _includes(includes, params) {
+      return new checks.$ZodCheckIncludes({
+        check: "string_format",
+        format: "includes",
+        ...util.normalizeParams(params),
+        includes
+      });
+    }
+    __name(_includes, "_includes");
+    function _startsWith(prefix, params) {
+      return new checks.$ZodCheckStartsWith({
+        check: "string_format",
+        format: "starts_with",
+        ...util.normalizeParams(params),
+        prefix
+      });
+    }
+    __name(_startsWith, "_startsWith");
+    function _endsWith(suffix, params) {
+      return new checks.$ZodCheckEndsWith({
+        check: "string_format",
+        format: "ends_with",
+        ...util.normalizeParams(params),
+        suffix
+      });
+    }
+    __name(_endsWith, "_endsWith");
+    function _property(property, schema, params) {
+      return new checks.$ZodCheckProperty({
+        check: "property",
+        property,
+        schema,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_property, "_property");
+    function _mime(types, params) {
+      return new checks.$ZodCheckMimeType({
+        check: "mime_type",
+        mime: types,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_mime, "_mime");
+    function _overwrite(tx) {
+      return new checks.$ZodCheckOverwrite({
+        check: "overwrite",
+        tx
+      });
+    }
+    __name(_overwrite, "_overwrite");
+    function _normalize(form) {
+      return _overwrite((input) => input.normalize(form));
+    }
+    __name(_normalize, "_normalize");
+    function _trim() {
+      return _overwrite((input) => input.trim());
+    }
+    __name(_trim, "_trim");
+    function _toLowerCase() {
+      return _overwrite((input) => input.toLowerCase());
+    }
+    __name(_toLowerCase, "_toLowerCase");
+    function _toUpperCase() {
+      return _overwrite((input) => input.toUpperCase());
+    }
+    __name(_toUpperCase, "_toUpperCase");
+    function _array(Class, element, params) {
+      return new Class({
+        type: "array",
+        element,
+        // get element() {
+        //   return element;
+        // },
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_array, "_array");
+    function _union(Class, options, params) {
+      return new Class({
+        type: "union",
+        options,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_union, "_union");
+    function _discriminatedUnion(Class, discriminator, options, params) {
+      return new Class({
+        type: "union",
+        options,
+        discriminator,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_discriminatedUnion, "_discriminatedUnion");
+    function _intersection(Class, left, right) {
+      return new Class({
+        type: "intersection",
+        left,
+        right
+      });
+    }
+    __name(_intersection, "_intersection");
+    function _tuple(Class, items, _paramsOrRest, _params) {
+      const hasRest = _paramsOrRest instanceof schemas.$ZodType;
+      const params = hasRest ? _params : _paramsOrRest;
+      const rest = hasRest ? _paramsOrRest : null;
+      return new Class({
+        type: "tuple",
+        items,
+        rest,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_tuple, "_tuple");
+    function _record(Class, keyType, valueType, params) {
+      return new Class({
+        type: "record",
+        keyType,
+        valueType,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_record, "_record");
+    function _map(Class, keyType, valueType, params) {
+      return new Class({
+        type: "map",
+        keyType,
+        valueType,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_map, "_map");
+    function _set(Class, valueType, params) {
+      return new Class({
+        type: "set",
+        valueType,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_set, "_set");
+    function _enum(Class, values, params) {
+      const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;
+      return new Class({
+        type: "enum",
+        entries,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_enum, "_enum");
+    function _nativeEnum(Class, entries, params) {
+      return new Class({
+        type: "enum",
+        entries,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_nativeEnum, "_nativeEnum");
+    function _literal(Class, value, params) {
+      return new Class({
+        type: "literal",
+        values: Array.isArray(value) ? value : [value],
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_literal, "_literal");
+    function _file(Class, params) {
+      return new Class({
+        type: "file",
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_file, "_file");
+    function _transform(Class, fn) {
+      return new Class({
+        type: "transform",
+        transform: fn
+      });
+    }
+    __name(_transform, "_transform");
+    function _optional(Class, innerType) {
+      return new Class({
+        type: "optional",
+        innerType
+      });
+    }
+    __name(_optional, "_optional");
+    function _nullable(Class, innerType) {
+      return new Class({
+        type: "nullable",
+        innerType
+      });
+    }
+    __name(_nullable, "_nullable");
+    function _default(Class, innerType, defaultValue) {
+      return new Class({
+        type: "default",
+        innerType,
+        get defaultValue() {
+          return typeof defaultValue === "function" ? defaultValue() : util.shallowClone(defaultValue);
+        }
+      });
+    }
+    __name(_default, "_default");
+    function _nonoptional(Class, innerType, params) {
+      return new Class({
+        type: "nonoptional",
+        innerType,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_nonoptional, "_nonoptional");
+    function _success(Class, innerType) {
+      return new Class({
+        type: "success",
+        innerType
+      });
+    }
+    __name(_success, "_success");
+    function _catch(Class, innerType, catchValue) {
+      return new Class({
+        type: "catch",
+        innerType,
+        catchValue: typeof catchValue === "function" ? catchValue : () => catchValue
+      });
+    }
+    __name(_catch, "_catch");
+    function _pipe(Class, in_, out) {
+      return new Class({
+        type: "pipe",
+        in: in_,
+        out
+      });
+    }
+    __name(_pipe, "_pipe");
+    function _readonly(Class, innerType) {
+      return new Class({
+        type: "readonly",
+        innerType
+      });
+    }
+    __name(_readonly, "_readonly");
+    function _templateLiteral(Class, parts, params) {
+      return new Class({
+        type: "template_literal",
+        parts,
+        ...util.normalizeParams(params)
+      });
+    }
+    __name(_templateLiteral, "_templateLiteral");
+    function _lazy(Class, getter) {
+      return new Class({
+        type: "lazy",
+        getter
+      });
+    }
+    __name(_lazy, "_lazy");
+    function _promise(Class, innerType) {
+      return new Class({
+        type: "promise",
+        innerType
+      });
+    }
+    __name(_promise, "_promise");
+    function _custom(Class, fn, _params) {
+      const norm = util.normalizeParams(_params);
+      norm.abort ?? (norm.abort = true);
+      const schema = new Class({
+        type: "custom",
+        check: "custom",
+        fn,
+        ...norm
+      });
+      return schema;
+    }
+    __name(_custom, "_custom");
+    function _refine(Class, fn, _params) {
+      const schema = new Class({
+        type: "custom",
+        check: "custom",
+        fn,
+        ...util.normalizeParams(_params)
+      });
+      return schema;
+    }
+    __name(_refine, "_refine");
+    function _superRefine(fn) {
+      const ch = _check((payload) => {
+        payload.addIssue = (issue) => {
+          if (typeof issue === "string") {
+            payload.issues.push(util.issue(issue, payload.value, ch._zod.def));
+          } else {
+            const _issue = issue;
+            if (_issue.fatal)
+              _issue.continue = false;
+            _issue.code ?? (_issue.code = "custom");
+            _issue.input ?? (_issue.input = payload.value);
+            _issue.inst ?? (_issue.inst = ch);
+            _issue.continue ?? (_issue.continue = !ch._zod.def.abort);
+            payload.issues.push(util.issue(_issue));
+          }
+        };
+        return fn(payload.value, payload);
+      });
+      return ch;
+    }
+    __name(_superRefine, "_superRefine");
+    function _check(fn, params) {
+      const ch = new checks.$ZodCheck({
+        check: "custom",
+        ...util.normalizeParams(params)
+      });
+      ch._zod.check = fn;
+      return ch;
+    }
+    __name(_check, "_check");
+    function _stringbool(Classes, _params) {
+      const params = util.normalizeParams(_params);
+      let truthyArray = params.truthy ?? ["true", "1", "yes", "on", "y", "enabled"];
+      let falsyArray = params.falsy ?? ["false", "0", "no", "off", "n", "disabled"];
+      if (params.case !== "sensitive") {
+        truthyArray = truthyArray.map((v) => typeof v === "string" ? v.toLowerCase() : v);
+        falsyArray = falsyArray.map((v) => typeof v === "string" ? v.toLowerCase() : v);
+      }
+      const truthySet = new Set(truthyArray);
+      const falsySet = new Set(falsyArray);
+      const _Codec = Classes.Codec ?? schemas.$ZodCodec;
+      const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;
+      const _String = Classes.String ?? schemas.$ZodString;
+      const stringSchema = new _String({ type: "string", error: params.error });
+      const booleanSchema = new _Boolean({ type: "boolean", error: params.error });
+      const codec = new _Codec({
+        type: "pipe",
+        in: stringSchema,
+        out: booleanSchema,
+        transform: /* @__PURE__ */ __name(((input, payload) => {
+          let data = input;
+          if (params.case !== "sensitive")
+            data = data.toLowerCase();
+          if (truthySet.has(data)) {
+            return true;
+          } else if (falsySet.has(data)) {
+            return false;
+          } else {
+            payload.issues.push({
+              code: "invalid_value",
+              expected: "stringbool",
+              values: [...truthySet, ...falsySet],
+              input: payload.value,
+              inst: codec,
+              continue: false
+            });
+            return {};
+          }
+        }), "transform"),
+        reverseTransform: /* @__PURE__ */ __name(((input, _payload) => {
+          if (input === true) {
+            return truthyArray[0] || "true";
+          } else {
+            return falsyArray[0] || "false";
+          }
+        }), "reverseTransform"),
+        error: params.error
+      });
+      return codec;
+    }
+    __name(_stringbool, "_stringbool");
+    function _stringFormat(Class, format, fnOrRegex, _params = {}) {
+      const params = util.normalizeParams(_params);
+      const def = {
+        ...util.normalizeParams(_params),
+        check: "string_format",
+        type: "string",
+        format,
+        fn: typeof fnOrRegex === "function" ? fnOrRegex : (val) => fnOrRegex.test(val),
+        ...params
+      };
+      if (fnOrRegex instanceof RegExp) {
+        def.pattern = fnOrRegex;
+      }
+      const inst = new Class(def);
+      return inst;
+    }
+    __name(_stringFormat, "_stringFormat");
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/to-json-schema.cjs
+var require_to_json_schema = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/to-json-schema.cjs"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.JSONSchemaGenerator = void 0;
+    exports2.toJSONSchema = toJSONSchema;
+    var registries_js_1 = require_registries();
+    var util_js_1 = require_util();
+    var JSONSchemaGenerator = class {
+      static {
+        __name(this, "JSONSchemaGenerator");
+      }
+      constructor(params) {
+        this.counter = 0;
+        this.metadataRegistry = params?.metadata ?? registries_js_1.globalRegistry;
+        this.target = params?.target ?? "draft-2020-12";
+        this.unrepresentable = params?.unrepresentable ?? "throw";
+        this.override = params?.override ?? (() => {
+        });
+        this.io = params?.io ?? "output";
+        this.seen = /* @__PURE__ */ new Map();
+      }
+      process(schema, _params = { path: [], schemaPath: [] }) {
+        var _a;
+        const def = schema._zod.def;
+        const formatMap = {
+          guid: "uuid",
+          url: "uri",
+          datetime: "date-time",
+          json_string: "json-string",
+          regex: ""
+          // do not set
+        };
+        const seen = this.seen.get(schema);
+        if (seen) {
+          seen.count++;
+          const isCycle = _params.schemaPath.includes(schema);
+          if (isCycle) {
+            seen.cycle = _params.path;
+          }
+          return seen.schema;
+        }
+        const result = { schema: {}, count: 1, cycle: void 0, path: _params.path };
+        this.seen.set(schema, result);
+        const overrideSchema = schema._zod.toJSONSchema?.();
+        if (overrideSchema) {
+          result.schema = overrideSchema;
+        } else {
+          const params = {
+            ..._params,
+            schemaPath: [..._params.schemaPath, schema],
+            path: _params.path
+          };
+          const parent = schema._zod.parent;
+          if (parent) {
+            result.ref = parent;
+            this.process(parent, params);
+            this.seen.get(parent).isParent = true;
+          } else {
+            const _json = result.schema;
+            switch (def.type) {
+              case "string": {
+                const json = _json;
+                json.type = "string";
+                const { minimum, maximum, format, patterns, contentEncoding } = schema._zod.bag;
+                if (typeof minimum === "number")
+                  json.minLength = minimum;
+                if (typeof maximum === "number")
+                  json.maxLength = maximum;
+                if (format) {
+                  json.format = formatMap[format] ?? format;
+                  if (json.format === "")
+                    delete json.format;
+                }
+                if (contentEncoding)
+                  json.contentEncoding = contentEncoding;
+                if (patterns && patterns.size > 0) {
+                  const regexes = [...patterns];
+                  if (regexes.length === 1)
+                    json.pattern = regexes[0].source;
+                  else if (regexes.length > 1) {
+                    result.schema.allOf = [
+                      ...regexes.map((regex) => ({
+                        ...this.target === "draft-7" || this.target === "draft-4" || this.target === "openapi-3.0" ? { type: "string" } : {},
+                        pattern: regex.source
+                      }))
+                    ];
+                  }
+                }
+                break;
+              }
+              case "number": {
+                const json = _json;
+                const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;
+                if (typeof format === "string" && format.includes("int"))
+                  json.type = "integer";
+                else
+                  json.type = "number";
+                if (typeof exclusiveMinimum === "number") {
+                  if (this.target === "draft-4" || this.target === "openapi-3.0") {
+                    json.minimum = exclusiveMinimum;
+                    json.exclusiveMinimum = true;
+                  } else {
+                    json.exclusiveMinimum = exclusiveMinimum;
+                  }
+                }
+                if (typeof minimum === "number") {
+                  json.minimum = minimum;
+                  if (typeof exclusiveMinimum === "number" && this.target !== "draft-4") {
+                    if (exclusiveMinimum >= minimum)
+                      delete json.minimum;
+                    else
+                      delete json.exclusiveMinimum;
+                  }
+                }
+                if (typeof exclusiveMaximum === "number") {
+                  if (this.target === "draft-4" || this.target === "openapi-3.0") {
+                    json.maximum = exclusiveMaximum;
+                    json.exclusiveMaximum = true;
+                  } else {
+                    json.exclusiveMaximum = exclusiveMaximum;
+                  }
+                }
+                if (typeof maximum === "number") {
+                  json.maximum = maximum;
+                  if (typeof exclusiveMaximum === "number" && this.target !== "draft-4") {
+                    if (exclusiveMaximum <= maximum)
+                      delete json.maximum;
+                    else
+                      delete json.exclusiveMaximum;
+                  }
+                }
+                if (typeof multipleOf === "number")
+                  json.multipleOf = multipleOf;
+                break;
+              }
+              case "boolean": {
+                const json = _json;
+                json.type = "boolean";
+                break;
+              }
+              case "bigint": {
+                if (this.unrepresentable === "throw") {
+                  throw new Error("BigInt cannot be represented in JSON Schema");
+                }
+                break;
+              }
+              case "symbol": {
+                if (this.unrepresentable === "throw") {
+                  throw new Error("Symbols cannot be represented in JSON Schema");
+                }
+                break;
+              }
+              case "null": {
+                if (this.target === "openapi-3.0") {
+                  _json.type = "string";
+                  _json.nullable = true;
+                  _json.enum = [null];
+                } else
+                  _json.type = "null";
+                break;
+              }
+              case "any": {
+                break;
+              }
+              case "unknown": {
+                break;
+              }
+              case "undefined": {
+                if (this.unrepresentable === "throw") {
+                  throw new Error("Undefined cannot be represented in JSON Schema");
+                }
+                break;
+              }
+              case "void": {
+                if (this.unrepresentable === "throw") {
+                  throw new Error("Void cannot be represented in JSON Schema");
+                }
+                break;
+              }
+              case "never": {
+                _json.not = {};
+                break;
+              }
+              case "date": {
+                if (this.unrepresentable === "throw") {
+                  throw new Error("Date cannot be represented in JSON Schema");
+                }
+                break;
+              }
+              case "array": {
+                const json = _json;
+                const { minimum, maximum } = schema._zod.bag;
+                if (typeof minimum === "number")
+                  json.minItems = minimum;
+                if (typeof maximum === "number")
+                  json.maxItems = maximum;
+                json.type = "array";
+                json.items = this.process(def.element, { ...params, path: [...params.path, "items"] });
+                break;
+              }
+              case "object": {
+                const json = _json;
+                json.type = "object";
+                json.properties = {};
+                const shape = def.shape;
+                for (const key in shape) {
+                  json.properties[key] = this.process(shape[key], {
+                    ...params,
+                    path: [...params.path, "properties", key]
+                  });
+                }
+                const allKeys = new Set(Object.keys(shape));
+                const requiredKeys = new Set([...allKeys].filter((key) => {
+                  const v = def.shape[key]._zod;
+                  if (this.io === "input") {
+                    return v.optin === void 0;
+                  } else {
+                    return v.optout === void 0;
+                  }
+                }));
+                if (requiredKeys.size > 0) {
+                  json.required = Array.from(requiredKeys);
+                }
+                if (def.catchall?._zod.def.type === "never") {
+                  json.additionalProperties = false;
+                } else if (!def.catchall) {
+                  if (this.io === "output")
+                    json.additionalProperties = false;
+                } else if (def.catchall) {
+                  json.additionalProperties = this.process(def.catchall, {
+                    ...params,
+                    path: [...params.path, "additionalProperties"]
+                  });
+                }
+                break;
+              }
+              case "union": {
+                const json = _json;
+                const options = def.options.map((x, i) => this.process(x, {
+                  ...params,
+                  path: [...params.path, "anyOf", i]
+                }));
+                json.anyOf = options;
+                break;
+              }
+              case "intersection": {
+                const json = _json;
+                const a = this.process(def.left, {
+                  ...params,
+                  path: [...params.path, "allOf", 0]
+                });
+                const b = this.process(def.right, {
+                  ...params,
+                  path: [...params.path, "allOf", 1]
+                });
+                const isSimpleIntersection = /* @__PURE__ */ __name((val) => "allOf" in val && Object.keys(val).length === 1, "isSimpleIntersection");
+                const allOf = [
+                  ...isSimpleIntersection(a) ? a.allOf : [a],
+                  ...isSimpleIntersection(b) ? b.allOf : [b]
+                ];
+                json.allOf = allOf;
+                break;
+              }
+              case "tuple": {
+                const json = _json;
+                json.type = "array";
+                const prefixPath = this.target === "draft-2020-12" ? "prefixItems" : "items";
+                const restPath = this.target === "draft-2020-12" ? "items" : this.target === "openapi-3.0" ? "items" : "additionalItems";
+                const prefixItems = def.items.map((x, i) => this.process(x, {
+                  ...params,
+                  path: [...params.path, prefixPath, i]
+                }));
+                const rest = def.rest ? this.process(def.rest, {
+                  ...params,
+                  path: [...params.path, restPath, ...this.target === "openapi-3.0" ? [def.items.length] : []]
+                }) : null;
+                if (this.target === "draft-2020-12") {
+                  json.prefixItems = prefixItems;
+                  if (rest) {
+                    json.items = rest;
+                  }
+                } else if (this.target === "openapi-3.0") {
+                  json.items = {
+                    anyOf: prefixItems
+                  };
+                  if (rest) {
+                    json.items.anyOf.push(rest);
+                  }
+                  json.minItems = prefixItems.length;
+                  if (!rest) {
+                    json.maxItems = prefixItems.length;
+                  }
+                } else {
+                  json.items = prefixItems;
+                  if (rest) {
+                    json.additionalItems = rest;
+                  }
+                }
+                const { minimum, maximum } = schema._zod.bag;
+                if (typeof minimum === "number")
+                  json.minItems = minimum;
+                if (typeof maximum === "number")
+                  json.maxItems = maximum;
+                break;
+              }
+              case "record": {
+                const json = _json;
+                json.type = "object";
+                if (this.target === "draft-7" || this.target === "draft-2020-12") {
+                  json.propertyNames = this.process(def.keyType, {
+                    ...params,
+                    path: [...params.path, "propertyNames"]
+                  });
+                }
+                json.additionalProperties = this.process(def.valueType, {
+                  ...params,
+                  path: [...params.path, "additionalProperties"]
+                });
+                break;
+              }
+              case "map": {
+                if (this.unrepresentable === "throw") {
+                  throw new Error("Map cannot be represented in JSON Schema");
+                }
+                break;
+              }
+              case "set": {
+                if (this.unrepresentable === "throw") {
+                  throw new Error("Set cannot be represented in JSON Schema");
+                }
+                break;
+              }
+              case "enum": {
+                const json = _json;
+                const values = (0, util_js_1.getEnumValues)(def.entries);
+                if (values.every((v) => typeof v === "number"))
+                  json.type = "number";
+                if (values.every((v) => typeof v === "string"))
+                  json.type = "string";
+                json.enum = values;
+                break;
+              }
+              case "literal": {
+                const json = _json;
+                const vals = [];
+                for (const val of def.values) {
+                  if (val === void 0) {
+                    if (this.unrepresentable === "throw") {
+                      throw new Error("Literal `undefined` cannot be represented in JSON Schema");
+                    } else {
+                    }
+                  } else if (typeof val === "bigint") {
+                    if (this.unrepresentable === "throw") {
+                      throw new Error("BigInt literals cannot be represented in JSON Schema");
+                    } else {
+                      vals.push(Number(val));
+                    }
+                  } else {
+                    vals.push(val);
+                  }
+                }
+                if (vals.length === 0) {
+                } else if (vals.length === 1) {
+                  const val = vals[0];
+                  json.type = val === null ? "null" : typeof val;
+                  if (this.target === "draft-4" || this.target === "openapi-3.0") {
+                    json.enum = [val];
+                  } else {
+                    json.const = val;
+                  }
+                } else {
+                  if (vals.every((v) => typeof v === "number"))
+                    json.type = "number";
+                  if (vals.every((v) => typeof v === "string"))
+                    json.type = "string";
+                  if (vals.every((v) => typeof v === "boolean"))
+                    json.type = "string";
+                  if (vals.every((v) => v === null))
+                    json.type = "null";
+                  json.enum = vals;
+                }
+                break;
+              }
+              case "file": {
+                const json = _json;
+                const file = {
+                  type: "string",
+                  format: "binary",
+                  contentEncoding: "binary"
+                };
+                const { minimum, maximum, mime } = schema._zod.bag;
+                if (minimum !== void 0)
+                  file.minLength = minimum;
+                if (maximum !== void 0)
+                  file.maxLength = maximum;
+                if (mime) {
+                  if (mime.length === 1) {
+                    file.contentMediaType = mime[0];
+                    Object.assign(json, file);
+                  } else {
+                    json.anyOf = mime.map((m) => {
+                      const mFile = { ...file, contentMediaType: m };
+                      return mFile;
+                    });
+                  }
+                } else {
+                  Object.assign(json, file);
+                }
+                break;
+              }
+              case "transform": {
+                if (this.unrepresentable === "throw") {
+                  throw new Error("Transforms cannot be represented in JSON Schema");
+                }
+                break;
+              }
+              case "nullable": {
+                const inner = this.process(def.innerType, params);
+                if (this.target === "openapi-3.0") {
+                  result.ref = def.innerType;
+                  _json.nullable = true;
+                } else {
+                  _json.anyOf = [inner, { type: "null" }];
+                }
+                break;
+              }
+              case "nonoptional": {
+                this.process(def.innerType, params);
+                result.ref = def.innerType;
+                break;
+              }
+              case "success": {
+                const json = _json;
+                json.type = "boolean";
+                break;
+              }
+              case "default": {
+                this.process(def.innerType, params);
+                result.ref = def.innerType;
+                _json.default = JSON.parse(JSON.stringify(def.defaultValue));
+                break;
+              }
+              case "prefault": {
+                this.process(def.innerType, params);
+                result.ref = def.innerType;
+                if (this.io === "input")
+                  _json._prefault = JSON.parse(JSON.stringify(def.defaultValue));
+                break;
+              }
+              case "catch": {
+                this.process(def.innerType, params);
+                result.ref = def.innerType;
+                let catchValue;
+                try {
+                  catchValue = def.catchValue(void 0);
+                } catch {
+                  throw new Error("Dynamic catch values are not supported in JSON Schema");
+                }
+                _json.default = catchValue;
+                break;
+              }
+              case "nan": {
+                if (this.unrepresentable === "throw") {
+                  throw new Error("NaN cannot be represented in JSON Schema");
+                }
+                break;
+              }
+              case "template_literal": {
+                const json = _json;
+                const pattern = schema._zod.pattern;
+                if (!pattern)
+                  throw new Error("Pattern not found in template literal");
+                json.type = "string";
+                json.pattern = pattern.source;
+                break;
+              }
+              case "pipe": {
+                const innerType = this.io === "input" ? def.in._zod.def.type === "transform" ? def.out : def.in : def.out;
+                this.process(innerType, params);
+                result.ref = innerType;
+                break;
+              }
+              case "readonly": {
+                this.process(def.innerType, params);
+                result.ref = def.innerType;
+                _json.readOnly = true;
+                break;
+              }
+              // passthrough types
+              case "promise": {
+                this.process(def.innerType, params);
+                result.ref = def.innerType;
+                break;
+              }
+              case "optional": {
+                this.process(def.innerType, params);
+                result.ref = def.innerType;
+                break;
+              }
+              case "lazy": {
+                const innerType = schema._zod.innerType;
+                this.process(innerType, params);
+                result.ref = innerType;
+                break;
+              }
+              case "custom": {
+                if (this.unrepresentable === "throw") {
+                  throw new Error("Custom types cannot be represented in JSON Schema");
+                }
+                break;
+              }
+              case "function": {
+                if (this.unrepresentable === "throw") {
+                  throw new Error("Function types cannot be represented in JSON Schema");
+                }
+                break;
+              }
+              default: {
+                def;
+              }
+            }
+          }
+        }
+        const meta = this.metadataRegistry.get(schema);
+        if (meta)
+          Object.assign(result.schema, meta);
+        if (this.io === "input" && isTransforming(schema)) {
+          delete result.schema.examples;
+          delete result.schema.default;
+        }
+        if (this.io === "input" && result.schema._prefault)
+          (_a = result.schema).default ?? (_a.default = result.schema._prefault);
+        delete result.schema._prefault;
+        const _result = this.seen.get(schema);
+        return _result.schema;
+      }
+      emit(schema, _params) {
+        const params = {
+          cycles: _params?.cycles ?? "ref",
+          reused: _params?.reused ?? "inline",
+          // unrepresentable: _params?.unrepresentable ?? "throw",
+          // uri: _params?.uri ?? ((id) => `${id}`),
+          external: _params?.external ?? void 0
+        };
+        const root = this.seen.get(schema);
+        if (!root)
+          throw new Error("Unprocessed schema. This is a bug in Zod.");
+        const makeURI = /* @__PURE__ */ __name((entry) => {
+          const defsSegment = this.target === "draft-2020-12" ? "$defs" : "definitions";
+          if (params.external) {
+            const externalId = params.external.registry.get(entry[0])?.id;
+            const uriGenerator = params.external.uri ?? ((id2) => id2);
+            if (externalId) {
+              return { ref: uriGenerator(externalId) };
+            }
+            const id = entry[1].defId ?? entry[1].schema.id ?? `schema${this.counter++}`;
+            entry[1].defId = id;
+            return { defId: id, ref: `${uriGenerator("__shared")}#/${defsSegment}/${id}` };
+          }
+          if (entry[1] === root) {
+            return { ref: "#" };
+          }
+          const uriPrefix = `#`;
+          const defUriPrefix = `${uriPrefix}/${defsSegment}/`;
+          const defId = entry[1].schema.id ?? `__schema${this.counter++}`;
+          return { defId, ref: defUriPrefix + defId };
+        }, "makeURI");
+        const extractToDef = /* @__PURE__ */ __name((entry) => {
+          if (entry[1].schema.$ref) {
+            return;
+          }
+          const seen = entry[1];
+          const { ref, defId } = makeURI(entry);
+          seen.def = { ...seen.schema };
+          if (defId)
+            seen.defId = defId;
+          const schema2 = seen.schema;
+          for (const key in schema2) {
+            delete schema2[key];
+          }
+          schema2.$ref = ref;
+        }, "extractToDef");
+        if (params.cycles === "throw") {
+          for (const entry of this.seen.entries()) {
+            const seen = entry[1];
+            if (seen.cycle) {
+              throw new Error(`Cycle detected: #/${seen.cycle?.join("/")}/
+
+Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`);
+            }
+          }
+        }
+        for (const entry of this.seen.entries()) {
+          const seen = entry[1];
+          if (schema === entry[0]) {
+            extractToDef(entry);
+            continue;
+          }
+          if (params.external) {
+            const ext = params.external.registry.get(entry[0])?.id;
+            if (schema !== entry[0] && ext) {
+              extractToDef(entry);
+              continue;
+            }
+          }
+          const id = this.metadataRegistry.get(entry[0])?.id;
+          if (id) {
+            extractToDef(entry);
+            continue;
+          }
+          if (seen.cycle) {
+            extractToDef(entry);
+            continue;
+          }
+          if (seen.count > 1) {
+            if (params.reused === "ref") {
+              extractToDef(entry);
+              continue;
+            }
+          }
+        }
+        const flattenRef = /* @__PURE__ */ __name((zodSchema, params2) => {
+          const seen = this.seen.get(zodSchema);
+          const schema2 = seen.def ?? seen.schema;
+          const _cached = { ...schema2 };
+          if (seen.ref === null) {
+            return;
+          }
+          const ref = seen.ref;
+          seen.ref = null;
+          if (ref) {
+            flattenRef(ref, params2);
+            const refSchema = this.seen.get(ref).schema;
+            if (refSchema.$ref && (params2.target === "draft-7" || params2.target === "draft-4" || params2.target === "openapi-3.0")) {
+              schema2.allOf = schema2.allOf ?? [];
+              schema2.allOf.push(refSchema);
+            } else {
+              Object.assign(schema2, refSchema);
+              Object.assign(schema2, _cached);
+            }
+          }
+          if (!seen.isParent)
+            this.override({
+              zodSchema,
+              jsonSchema: schema2,
+              path: seen.path ?? []
+            });
+        }, "flattenRef");
+        for (const entry of [...this.seen.entries()].reverse()) {
+          flattenRef(entry[0], { target: this.target });
+        }
+        const result = {};
+        if (this.target === "draft-2020-12") {
+          result.$schema = "https://json-schema.org/draft/2020-12/schema";
+        } else if (this.target === "draft-7") {
+          result.$schema = "http://json-schema.org/draft-07/schema#";
+        } else if (this.target === "draft-4") {
+          result.$schema = "http://json-schema.org/draft-04/schema#";
+        } else if (this.target === "openapi-3.0") {
+        } else {
+          /* @__PURE__ */ console.warn(`Invalid target: ${this.target}`);
+        }
+        if (params.external?.uri) {
+          const id = params.external.registry.get(schema)?.id;
+          if (!id)
+            throw new Error("Schema is missing an `id` property");
+          result.$id = params.external.uri(id);
+        }
+        Object.assign(result, root.def);
+        const defs = params.external?.defs ?? {};
+        for (const entry of this.seen.entries()) {
+          const seen = entry[1];
+          if (seen.def && seen.defId) {
+            defs[seen.defId] = seen.def;
+          }
+        }
+        if (params.external) {
+        } else {
+          if (Object.keys(defs).length > 0) {
+            if (this.target === "draft-2020-12") {
+              result.$defs = defs;
+            } else {
+              result.definitions = defs;
+            }
+          }
+        }
+        try {
+          return JSON.parse(JSON.stringify(result));
+        } catch (_err) {
+          throw new Error("Error converting schema to JSON.");
+        }
+      }
+    };
+    exports2.JSONSchemaGenerator = JSONSchemaGenerator;
+    function toJSONSchema(input, _params) {
+      if (input instanceof registries_js_1.$ZodRegistry) {
+        const gen2 = new JSONSchemaGenerator(_params);
+        const defs = {};
+        for (const entry of input._idmap.entries()) {
+          const [_, schema] = entry;
+          gen2.process(schema);
+        }
+        const schemas = {};
+        const external = {
+          registry: input,
+          uri: _params?.uri,
+          defs
+        };
+        for (const entry of input._idmap.entries()) {
+          const [key, schema] = entry;
+          schemas[key] = gen2.emit(schema, {
+            ..._params,
+            external
+          });
+        }
+        if (Object.keys(defs).length > 0) {
+          const defsSegment = gen2.target === "draft-2020-12" ? "$defs" : "definitions";
+          schemas.__shared = {
+            [defsSegment]: defs
+          };
+        }
+        return { schemas };
+      }
+      const gen = new JSONSchemaGenerator(_params);
+      gen.process(input);
+      return gen.emit(input, _params);
+    }
+    __name(toJSONSchema, "toJSONSchema");
+    function isTransforming(_schema, _ctx) {
+      const ctx = _ctx ?? { seen: /* @__PURE__ */ new Set() };
+      if (ctx.seen.has(_schema))
+        return false;
+      ctx.seen.add(_schema);
+      const schema = _schema;
+      const def = schema._zod.def;
+      switch (def.type) {
+        case "string":
+        case "number":
+        case "bigint":
+        case "boolean":
+        case "date":
+        case "symbol":
+        case "undefined":
+        case "null":
+        case "any":
+        case "unknown":
+        case "never":
+        case "void":
+        case "literal":
+        case "enum":
+        case "nan":
+        case "file":
+        case "template_literal":
+          return false;
+        case "array": {
+          return isTransforming(def.element, ctx);
+        }
+        case "object": {
+          for (const key in def.shape) {
+            if (isTransforming(def.shape[key], ctx))
+              return true;
+          }
+          return false;
+        }
+        case "union": {
+          for (const option of def.options) {
+            if (isTransforming(option, ctx))
+              return true;
+          }
+          return false;
+        }
+        case "intersection": {
+          return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);
+        }
+        case "tuple": {
+          for (const item of def.items) {
+            if (isTransforming(item, ctx))
+              return true;
+          }
+          if (def.rest && isTransforming(def.rest, ctx))
+            return true;
+          return false;
+        }
+        case "record": {
+          return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);
+        }
+        case "map": {
+          return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);
+        }
+        case "set": {
+          return isTransforming(def.valueType, ctx);
+        }
+        // inner types
+        case "promise":
+        case "optional":
+        case "nonoptional":
+        case "nullable":
+        case "readonly":
+          return isTransforming(def.innerType, ctx);
+        case "lazy":
+          return isTransforming(def.getter(), ctx);
+        case "default": {
+          return isTransforming(def.innerType, ctx);
+        }
+        case "prefault": {
+          return isTransforming(def.innerType, ctx);
+        }
+        case "custom": {
+          return false;
+        }
+        case "transform": {
+          return true;
+        }
+        case "pipe": {
+          return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);
+        }
+        case "success": {
+          return false;
+        }
+        case "catch": {
+          return false;
+        }
+        case "function": {
+          return false;
+        }
+        default:
+          def;
+      }
+      throw new Error(`Unknown schema type: ${def.type}`);
+    }
+    __name(isTransforming, "isTransforming");
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/json-schema.cjs
+var require_json_schema = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/json-schema.cjs"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/index.cjs
+var require_core2 = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/index.cjs"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
+      for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
+    };
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.JSONSchema = exports2.locales = exports2.regexes = exports2.util = void 0;
+    __exportStar(require_core(), exports2);
+    __exportStar(require_parse(), exports2);
+    __exportStar(require_errors(), exports2);
+    __exportStar(require_schemas(), exports2);
+    __exportStar(require_checks(), exports2);
+    __exportStar(require_versions(), exports2);
+    exports2.util = __importStar(require_util());
+    exports2.regexes = __importStar(require_regexes());
+    exports2.locales = __importStar(require_locales());
+    __exportStar(require_registries(), exports2);
+    __exportStar(require_doc(), exports2);
+    __exportStar(require_api(), exports2);
+    __exportStar(require_to_json_schema(), exports2);
+    exports2.JSONSchema = __importStar(require_json_schema());
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/checks.cjs
+var require_checks2 = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/checks.cjs"(exports2) {
+    "use strict";
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.toUpperCase = exports2.toLowerCase = exports2.trim = exports2.normalize = exports2.overwrite = exports2.mime = exports2.property = exports2.endsWith = exports2.startsWith = exports2.includes = exports2.uppercase = exports2.lowercase = exports2.regex = exports2.length = exports2.minLength = exports2.maxLength = exports2.size = exports2.minSize = exports2.maxSize = exports2.multipleOf = exports2.nonnegative = exports2.nonpositive = exports2.negative = exports2.positive = exports2.gte = exports2.gt = exports2.lte = exports2.lt = void 0;
+    var index_js_1 = require_core2();
+    Object.defineProperty(exports2, "lt", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._lt;
+    }, "get") });
+    Object.defineProperty(exports2, "lte", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._lte;
+    }, "get") });
+    Object.defineProperty(exports2, "gt", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._gt;
+    }, "get") });
+    Object.defineProperty(exports2, "gte", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._gte;
+    }, "get") });
+    Object.defineProperty(exports2, "positive", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._positive;
+    }, "get") });
+    Object.defineProperty(exports2, "negative", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._negative;
+    }, "get") });
+    Object.defineProperty(exports2, "nonpositive", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._nonpositive;
+    }, "get") });
+    Object.defineProperty(exports2, "nonnegative", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._nonnegative;
+    }, "get") });
+    Object.defineProperty(exports2, "multipleOf", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._multipleOf;
+    }, "get") });
+    Object.defineProperty(exports2, "maxSize", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._maxSize;
+    }, "get") });
+    Object.defineProperty(exports2, "minSize", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._minSize;
+    }, "get") });
+    Object.defineProperty(exports2, "size", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._size;
+    }, "get") });
+    Object.defineProperty(exports2, "maxLength", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._maxLength;
+    }, "get") });
+    Object.defineProperty(exports2, "minLength", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._minLength;
+    }, "get") });
+    Object.defineProperty(exports2, "length", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._length;
+    }, "get") });
+    Object.defineProperty(exports2, "regex", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._regex;
+    }, "get") });
+    Object.defineProperty(exports2, "lowercase", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._lowercase;
+    }, "get") });
+    Object.defineProperty(exports2, "uppercase", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._uppercase;
+    }, "get") });
+    Object.defineProperty(exports2, "includes", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._includes;
+    }, "get") });
+    Object.defineProperty(exports2, "startsWith", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._startsWith;
+    }, "get") });
+    Object.defineProperty(exports2, "endsWith", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._endsWith;
+    }, "get") });
+    Object.defineProperty(exports2, "property", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._property;
+    }, "get") });
+    Object.defineProperty(exports2, "mime", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._mime;
+    }, "get") });
+    Object.defineProperty(exports2, "overwrite", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._overwrite;
+    }, "get") });
+    Object.defineProperty(exports2, "normalize", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._normalize;
+    }, "get") });
+    Object.defineProperty(exports2, "trim", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._trim;
+    }, "get") });
+    Object.defineProperty(exports2, "toLowerCase", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._toLowerCase;
+    }, "get") });
+    Object.defineProperty(exports2, "toUpperCase", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1._toUpperCase;
+    }, "get") });
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/iso.cjs
+var require_iso = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/iso.cjs"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.ZodISODuration = exports2.ZodISOTime = exports2.ZodISODate = exports2.ZodISODateTime = void 0;
+    exports2.datetime = datetime;
+    exports2.date = date;
+    exports2.time = time;
+    exports2.duration = duration;
+    var core = __importStar(require_core2());
+    var schemas = __importStar(require_schemas2());
+    exports2.ZodISODateTime = core.$constructor("ZodISODateTime", (inst, def) => {
+      core.$ZodISODateTime.init(inst, def);
+      schemas.ZodStringFormat.init(inst, def);
+    });
+    function datetime(params) {
+      return core._isoDateTime(exports2.ZodISODateTime, params);
+    }
+    __name(datetime, "datetime");
+    exports2.ZodISODate = core.$constructor("ZodISODate", (inst, def) => {
+      core.$ZodISODate.init(inst, def);
+      schemas.ZodStringFormat.init(inst, def);
+    });
+    function date(params) {
+      return core._isoDate(exports2.ZodISODate, params);
+    }
+    __name(date, "date");
+    exports2.ZodISOTime = core.$constructor("ZodISOTime", (inst, def) => {
+      core.$ZodISOTime.init(inst, def);
+      schemas.ZodStringFormat.init(inst, def);
+    });
+    function time(params) {
+      return core._isoTime(exports2.ZodISOTime, params);
+    }
+    __name(time, "time");
+    exports2.ZodISODuration = core.$constructor("ZodISODuration", (inst, def) => {
+      core.$ZodISODuration.init(inst, def);
+      schemas.ZodStringFormat.init(inst, def);
+    });
+    function duration(params) {
+      return core._isoDuration(exports2.ZodISODuration, params);
+    }
+    __name(duration, "duration");
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/errors.cjs
+var require_errors2 = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/errors.cjs"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.ZodRealError = exports2.ZodError = void 0;
+    var core = __importStar(require_core2());
+    var index_js_1 = require_core2();
+    var util = __importStar(require_util());
+    var initializer = /* @__PURE__ */ __name((inst, issues) => {
+      index_js_1.$ZodError.init(inst, issues);
+      inst.name = "ZodError";
+      Object.defineProperties(inst, {
+        format: {
+          value: /* @__PURE__ */ __name((mapper) => core.formatError(inst, mapper), "value")
+          // enumerable: false,
+        },
+        flatten: {
+          value: /* @__PURE__ */ __name((mapper) => core.flattenError(inst, mapper), "value")
+          // enumerable: false,
+        },
+        addIssue: {
+          value: /* @__PURE__ */ __name((issue) => {
+            inst.issues.push(issue);
+            inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);
+          }, "value")
+          // enumerable: false,
+        },
+        addIssues: {
+          value: /* @__PURE__ */ __name((issues2) => {
+            inst.issues.push(...issues2);
+            inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);
+          }, "value")
+          // enumerable: false,
+        },
+        isEmpty: {
+          get() {
+            return inst.issues.length === 0;
+          }
+          // enumerable: false,
+        }
+      });
+    }, "initializer");
+    exports2.ZodError = core.$constructor("ZodError", initializer);
+    exports2.ZodRealError = core.$constructor("ZodError", initializer, {
+      Parent: Error
+    });
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/parse.cjs
+var require_parse2 = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/parse.cjs"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.safeDecodeAsync = exports2.safeEncodeAsync = exports2.safeDecode = exports2.safeEncode = exports2.decodeAsync = exports2.encodeAsync = exports2.decode = exports2.encode = exports2.safeParseAsync = exports2.safeParse = exports2.parseAsync = exports2.parse = void 0;
+    var core = __importStar(require_core2());
+    var errors_js_1 = require_errors2();
+    exports2.parse = core._parse(errors_js_1.ZodRealError);
+    exports2.parseAsync = core._parseAsync(errors_js_1.ZodRealError);
+    exports2.safeParse = core._safeParse(errors_js_1.ZodRealError);
+    exports2.safeParseAsync = core._safeParseAsync(errors_js_1.ZodRealError);
+    exports2.encode = core._encode(errors_js_1.ZodRealError);
+    exports2.decode = core._decode(errors_js_1.ZodRealError);
+    exports2.encodeAsync = core._encodeAsync(errors_js_1.ZodRealError);
+    exports2.decodeAsync = core._decodeAsync(errors_js_1.ZodRealError);
+    exports2.safeEncode = core._safeEncode(errors_js_1.ZodRealError);
+    exports2.safeDecode = core._safeDecode(errors_js_1.ZodRealError);
+    exports2.safeEncodeAsync = core._safeEncodeAsync(errors_js_1.ZodRealError);
+    exports2.safeDecodeAsync = core._safeDecodeAsync(errors_js_1.ZodRealError);
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/schemas.cjs
+var require_schemas2 = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/schemas.cjs"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.ZodTransform = exports2.ZodFile = exports2.ZodLiteral = exports2.ZodEnum = exports2.ZodSet = exports2.ZodMap = exports2.ZodRecord = exports2.ZodTuple = exports2.ZodIntersection = exports2.ZodDiscriminatedUnion = exports2.ZodUnion = exports2.ZodObject = exports2.ZodArray = exports2.ZodDate = exports2.ZodVoid = exports2.ZodNever = exports2.ZodUnknown = exports2.ZodAny = exports2.ZodNull = exports2.ZodUndefined = exports2.ZodSymbol = exports2.ZodBigIntFormat = exports2.ZodBigInt = exports2.ZodBoolean = exports2.ZodNumberFormat = exports2.ZodNumber = exports2.ZodCustomStringFormat = exports2.ZodJWT = exports2.ZodE164 = exports2.ZodBase64URL = exports2.ZodBase64 = exports2.ZodCIDRv6 = exports2.ZodCIDRv4 = exports2.ZodIPv6 = exports2.ZodIPv4 = exports2.ZodKSUID = exports2.ZodXID = exports2.ZodULID = exports2.ZodCUID2 = exports2.ZodCUID = exports2.ZodNanoID = exports2.ZodEmoji = exports2.ZodURL = exports2.ZodUUID = exports2.ZodGUID = exports2.ZodEmail = exports2.ZodStringFormat = exports2.ZodString = exports2._ZodString = exports2.ZodType = void 0;
+    exports2.stringbool = exports2.ZodCustom = exports2.ZodFunction = exports2.ZodPromise = exports2.ZodLazy = exports2.ZodTemplateLiteral = exports2.ZodReadonly = exports2.ZodCodec = exports2.ZodPipe = exports2.ZodNaN = exports2.ZodCatch = exports2.ZodSuccess = exports2.ZodNonOptional = exports2.ZodPrefault = exports2.ZodDefault = exports2.ZodNullable = exports2.ZodOptional = void 0;
+    exports2.string = string;
+    exports2.email = email;
+    exports2.guid = guid;
+    exports2.uuid = uuid;
+    exports2.uuidv4 = uuidv4;
+    exports2.uuidv6 = uuidv6;
+    exports2.uuidv7 = uuidv7;
+    exports2.url = url;
+    exports2.httpUrl = httpUrl;
+    exports2.emoji = emoji;
+    exports2.nanoid = nanoid;
+    exports2.cuid = cuid;
+    exports2.cuid2 = cuid2;
+    exports2.ulid = ulid;
+    exports2.xid = xid;
+    exports2.ksuid = ksuid;
+    exports2.ipv4 = ipv4;
+    exports2.ipv6 = ipv6;
+    exports2.cidrv4 = cidrv4;
+    exports2.cidrv6 = cidrv6;
+    exports2.base64 = base64;
+    exports2.base64url = base64url;
+    exports2.e164 = e164;
+    exports2.jwt = jwt;
+    exports2.stringFormat = stringFormat;
+    exports2.hostname = hostname;
+    exports2.hex = hex;
+    exports2.hash = hash;
+    exports2.number = number;
+    exports2.int = int;
+    exports2.float32 = float32;
+    exports2.float64 = float64;
+    exports2.int32 = int32;
+    exports2.uint32 = uint32;
+    exports2.boolean = boolean;
+    exports2.bigint = bigint;
+    exports2.int64 = int64;
+    exports2.uint64 = uint64;
+    exports2.symbol = symbol;
+    exports2.undefined = _undefined;
+    exports2.null = _null;
+    exports2.any = any;
+    exports2.unknown = unknown;
+    exports2.never = never;
+    exports2.void = _void;
+    exports2.date = date;
+    exports2.array = array;
+    exports2.keyof = keyof;
+    exports2.object = object;
+    exports2.strictObject = strictObject;
+    exports2.looseObject = looseObject;
+    exports2.union = union;
+    exports2.discriminatedUnion = discriminatedUnion;
+    exports2.intersection = intersection;
+    exports2.tuple = tuple;
+    exports2.record = record;
+    exports2.partialRecord = partialRecord;
+    exports2.map = map;
+    exports2.set = set;
+    exports2.enum = _enum;
+    exports2.nativeEnum = nativeEnum;
+    exports2.literal = literal;
+    exports2.file = file;
+    exports2.transform = transform;
+    exports2.optional = optional;
+    exports2.nullable = nullable;
+    exports2.nullish = nullish;
+    exports2._default = _default;
+    exports2.prefault = prefault;
+    exports2.nonoptional = nonoptional;
+    exports2.success = success;
+    exports2.catch = _catch;
+    exports2.nan = nan;
+    exports2.pipe = pipe;
+    exports2.codec = codec;
+    exports2.readonly = readonly;
+    exports2.templateLiteral = templateLiteral;
+    exports2.lazy = lazy;
+    exports2.promise = promise;
+    exports2._function = _function;
+    exports2.function = _function;
+    exports2._function = _function;
+    exports2.function = _function;
+    exports2.check = check;
+    exports2.custom = custom;
+    exports2.refine = refine;
+    exports2.superRefine = superRefine;
+    exports2.instanceof = _instanceof;
+    exports2.json = json;
+    exports2.preprocess = preprocess;
+    var core = __importStar(require_core2());
+    var index_js_1 = require_core2();
+    var checks = __importStar(require_checks2());
+    var iso = __importStar(require_iso());
+    var parse = __importStar(require_parse2());
+    exports2.ZodType = core.$constructor("ZodType", (inst, def) => {
+      core.$ZodType.init(inst, def);
+      inst.def = def;
+      inst.type = def.type;
+      Object.defineProperty(inst, "_def", { value: def });
+      inst.check = (...checks2) => {
+        return inst.clone(index_js_1.util.mergeDefs(def, {
+          checks: [
+            ...def.checks ?? [],
+            ...checks2.map((ch) => typeof ch === "function" ? { _zod: { check: ch, def: { check: "custom" }, onattach: [] } } : ch)
+          ]
+        }));
+      };
+      inst.clone = (def2, params) => core.clone(inst, def2, params);
+      inst.brand = () => inst;
+      inst.register = ((reg, meta) => {
+        reg.add(inst, meta);
+        return inst;
+      });
+      inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });
+      inst.safeParse = (data, params) => parse.safeParse(inst, data, params);
+      inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });
+      inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);
+      inst.spa = inst.safeParseAsync;
+      inst.encode = (data, params) => parse.encode(inst, data, params);
+      inst.decode = (data, params) => parse.decode(inst, data, params);
+      inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);
+      inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);
+      inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);
+      inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);
+      inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);
+      inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);
+      inst.refine = (check2, params) => inst.check(refine(check2, params));
+      inst.superRefine = (refinement) => inst.check(superRefine(refinement));
+      inst.overwrite = (fn) => inst.check(checks.overwrite(fn));
+      inst.optional = () => optional(inst);
+      inst.nullable = () => nullable(inst);
+      inst.nullish = () => optional(nullable(inst));
+      inst.nonoptional = (params) => nonoptional(inst, params);
+      inst.array = () => array(inst);
+      inst.or = (arg) => union([inst, arg]);
+      inst.and = (arg) => intersection(inst, arg);
+      inst.transform = (tx) => pipe(inst, transform(tx));
+      inst.default = (def2) => _default(inst, def2);
+      inst.prefault = (def2) => prefault(inst, def2);
+      inst.catch = (params) => _catch(inst, params);
+      inst.pipe = (target) => pipe(inst, target);
+      inst.readonly = () => readonly(inst);
+      inst.describe = (description) => {
+        const cl = inst.clone();
+        core.globalRegistry.add(cl, { description });
+        return cl;
+      };
+      Object.defineProperty(inst, "description", {
+        get() {
+          return core.globalRegistry.get(inst)?.description;
+        },
+        configurable: true
+      });
+      inst.meta = (...args) => {
+        if (args.length === 0) {
+          return core.globalRegistry.get(inst);
+        }
+        const cl = inst.clone();
+        core.globalRegistry.add(cl, args[0]);
+        return cl;
+      };
+      inst.isOptional = () => inst.safeParse(void 0).success;
+      inst.isNullable = () => inst.safeParse(null).success;
+      return inst;
+    });
+    exports2._ZodString = core.$constructor("_ZodString", (inst, def) => {
+      core.$ZodString.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      const bag = inst._zod.bag;
+      inst.format = bag.format ?? null;
+      inst.minLength = bag.minimum ?? null;
+      inst.maxLength = bag.maximum ?? null;
+      inst.regex = (...args) => inst.check(checks.regex(...args));
+      inst.includes = (...args) => inst.check(checks.includes(...args));
+      inst.startsWith = (...args) => inst.check(checks.startsWith(...args));
+      inst.endsWith = (...args) => inst.check(checks.endsWith(...args));
+      inst.min = (...args) => inst.check(checks.minLength(...args));
+      inst.max = (...args) => inst.check(checks.maxLength(...args));
+      inst.length = (...args) => inst.check(checks.length(...args));
+      inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));
+      inst.lowercase = (params) => inst.check(checks.lowercase(params));
+      inst.uppercase = (params) => inst.check(checks.uppercase(params));
+      inst.trim = () => inst.check(checks.trim());
+      inst.normalize = (...args) => inst.check(checks.normalize(...args));
+      inst.toLowerCase = () => inst.check(checks.toLowerCase());
+      inst.toUpperCase = () => inst.check(checks.toUpperCase());
+    });
+    exports2.ZodString = core.$constructor("ZodString", (inst, def) => {
+      core.$ZodString.init(inst, def);
+      exports2._ZodString.init(inst, def);
+      inst.email = (params) => inst.check(core._email(exports2.ZodEmail, params));
+      inst.url = (params) => inst.check(core._url(exports2.ZodURL, params));
+      inst.jwt = (params) => inst.check(core._jwt(exports2.ZodJWT, params));
+      inst.emoji = (params) => inst.check(core._emoji(exports2.ZodEmoji, params));
+      inst.guid = (params) => inst.check(core._guid(exports2.ZodGUID, params));
+      inst.uuid = (params) => inst.check(core._uuid(exports2.ZodUUID, params));
+      inst.uuidv4 = (params) => inst.check(core._uuidv4(exports2.ZodUUID, params));
+      inst.uuidv6 = (params) => inst.check(core._uuidv6(exports2.ZodUUID, params));
+      inst.uuidv7 = (params) => inst.check(core._uuidv7(exports2.ZodUUID, params));
+      inst.nanoid = (params) => inst.check(core._nanoid(exports2.ZodNanoID, params));
+      inst.guid = (params) => inst.check(core._guid(exports2.ZodGUID, params));
+      inst.cuid = (params) => inst.check(core._cuid(exports2.ZodCUID, params));
+      inst.cuid2 = (params) => inst.check(core._cuid2(exports2.ZodCUID2, params));
+      inst.ulid = (params) => inst.check(core._ulid(exports2.ZodULID, params));
+      inst.base64 = (params) => inst.check(core._base64(exports2.ZodBase64, params));
+      inst.base64url = (params) => inst.check(core._base64url(exports2.ZodBase64URL, params));
+      inst.xid = (params) => inst.check(core._xid(exports2.ZodXID, params));
+      inst.ksuid = (params) => inst.check(core._ksuid(exports2.ZodKSUID, params));
+      inst.ipv4 = (params) => inst.check(core._ipv4(exports2.ZodIPv4, params));
+      inst.ipv6 = (params) => inst.check(core._ipv6(exports2.ZodIPv6, params));
+      inst.cidrv4 = (params) => inst.check(core._cidrv4(exports2.ZodCIDRv4, params));
+      inst.cidrv6 = (params) => inst.check(core._cidrv6(exports2.ZodCIDRv6, params));
+      inst.e164 = (params) => inst.check(core._e164(exports2.ZodE164, params));
+      inst.datetime = (params) => inst.check(iso.datetime(params));
+      inst.date = (params) => inst.check(iso.date(params));
+      inst.time = (params) => inst.check(iso.time(params));
+      inst.duration = (params) => inst.check(iso.duration(params));
+    });
+    function string(params) {
+      return core._string(exports2.ZodString, params);
+    }
+    __name(string, "string");
+    exports2.ZodStringFormat = core.$constructor("ZodStringFormat", (inst, def) => {
+      core.$ZodStringFormat.init(inst, def);
+      exports2._ZodString.init(inst, def);
+    });
+    exports2.ZodEmail = core.$constructor("ZodEmail", (inst, def) => {
+      core.$ZodEmail.init(inst, def);
+      exports2.ZodStringFormat.init(inst, def);
+    });
+    function email(params) {
+      return core._email(exports2.ZodEmail, params);
+    }
+    __name(email, "email");
+    exports2.ZodGUID = core.$constructor("ZodGUID", (inst, def) => {
+      core.$ZodGUID.init(inst, def);
+      exports2.ZodStringFormat.init(inst, def);
+    });
+    function guid(params) {
+      return core._guid(exports2.ZodGUID, params);
+    }
+    __name(guid, "guid");
+    exports2.ZodUUID = core.$constructor("ZodUUID", (inst, def) => {
+      core.$ZodUUID.init(inst, def);
+      exports2.ZodStringFormat.init(inst, def);
+    });
+    function uuid(params) {
+      return core._uuid(exports2.ZodUUID, params);
+    }
+    __name(uuid, "uuid");
+    function uuidv4(params) {
+      return core._uuidv4(exports2.ZodUUID, params);
+    }
+    __name(uuidv4, "uuidv4");
+    function uuidv6(params) {
+      return core._uuidv6(exports2.ZodUUID, params);
+    }
+    __name(uuidv6, "uuidv6");
+    function uuidv7(params) {
+      return core._uuidv7(exports2.ZodUUID, params);
+    }
+    __name(uuidv7, "uuidv7");
+    exports2.ZodURL = core.$constructor("ZodURL", (inst, def) => {
+      core.$ZodURL.init(inst, def);
+      exports2.ZodStringFormat.init(inst, def);
+    });
+    function url(params) {
+      return core._url(exports2.ZodURL, params);
+    }
+    __name(url, "url");
+    function httpUrl(params) {
+      return core._url(exports2.ZodURL, {
+        protocol: /^https?$/,
+        hostname: core.regexes.domain,
+        ...index_js_1.util.normalizeParams(params)
+      });
+    }
+    __name(httpUrl, "httpUrl");
+    exports2.ZodEmoji = core.$constructor("ZodEmoji", (inst, def) => {
+      core.$ZodEmoji.init(inst, def);
+      exports2.ZodStringFormat.init(inst, def);
+    });
+    function emoji(params) {
+      return core._emoji(exports2.ZodEmoji, params);
+    }
+    __name(emoji, "emoji");
+    exports2.ZodNanoID = core.$constructor("ZodNanoID", (inst, def) => {
+      core.$ZodNanoID.init(inst, def);
+      exports2.ZodStringFormat.init(inst, def);
+    });
+    function nanoid(params) {
+      return core._nanoid(exports2.ZodNanoID, params);
+    }
+    __name(nanoid, "nanoid");
+    exports2.ZodCUID = core.$constructor("ZodCUID", (inst, def) => {
+      core.$ZodCUID.init(inst, def);
+      exports2.ZodStringFormat.init(inst, def);
+    });
+    function cuid(params) {
+      return core._cuid(exports2.ZodCUID, params);
+    }
+    __name(cuid, "cuid");
+    exports2.ZodCUID2 = core.$constructor("ZodCUID2", (inst, def) => {
+      core.$ZodCUID2.init(inst, def);
+      exports2.ZodStringFormat.init(inst, def);
+    });
+    function cuid2(params) {
+      return core._cuid2(exports2.ZodCUID2, params);
+    }
+    __name(cuid2, "cuid2");
+    exports2.ZodULID = core.$constructor("ZodULID", (inst, def) => {
+      core.$ZodULID.init(inst, def);
+      exports2.ZodStringFormat.init(inst, def);
+    });
+    function ulid(params) {
+      return core._ulid(exports2.ZodULID, params);
+    }
+    __name(ulid, "ulid");
+    exports2.ZodXID = core.$constructor("ZodXID", (inst, def) => {
+      core.$ZodXID.init(inst, def);
+      exports2.ZodStringFormat.init(inst, def);
+    });
+    function xid(params) {
+      return core._xid(exports2.ZodXID, params);
+    }
+    __name(xid, "xid");
+    exports2.ZodKSUID = core.$constructor("ZodKSUID", (inst, def) => {
+      core.$ZodKSUID.init(inst, def);
+      exports2.ZodStringFormat.init(inst, def);
+    });
+    function ksuid(params) {
+      return core._ksuid(exports2.ZodKSUID, params);
+    }
+    __name(ksuid, "ksuid");
+    exports2.ZodIPv4 = core.$constructor("ZodIPv4", (inst, def) => {
+      core.$ZodIPv4.init(inst, def);
+      exports2.ZodStringFormat.init(inst, def);
+    });
+    function ipv4(params) {
+      return core._ipv4(exports2.ZodIPv4, params);
+    }
+    __name(ipv4, "ipv4");
+    exports2.ZodIPv6 = core.$constructor("ZodIPv6", (inst, def) => {
+      core.$ZodIPv6.init(inst, def);
+      exports2.ZodStringFormat.init(inst, def);
+    });
+    function ipv6(params) {
+      return core._ipv6(exports2.ZodIPv6, params);
+    }
+    __name(ipv6, "ipv6");
+    exports2.ZodCIDRv4 = core.$constructor("ZodCIDRv4", (inst, def) => {
+      core.$ZodCIDRv4.init(inst, def);
+      exports2.ZodStringFormat.init(inst, def);
+    });
+    function cidrv4(params) {
+      return core._cidrv4(exports2.ZodCIDRv4, params);
+    }
+    __name(cidrv4, "cidrv4");
+    exports2.ZodCIDRv6 = core.$constructor("ZodCIDRv6", (inst, def) => {
+      core.$ZodCIDRv6.init(inst, def);
+      exports2.ZodStringFormat.init(inst, def);
+    });
+    function cidrv6(params) {
+      return core._cidrv6(exports2.ZodCIDRv6, params);
+    }
+    __name(cidrv6, "cidrv6");
+    exports2.ZodBase64 = core.$constructor("ZodBase64", (inst, def) => {
+      core.$ZodBase64.init(inst, def);
+      exports2.ZodStringFormat.init(inst, def);
+    });
+    function base64(params) {
+      return core._base64(exports2.ZodBase64, params);
+    }
+    __name(base64, "base64");
+    exports2.ZodBase64URL = core.$constructor("ZodBase64URL", (inst, def) => {
+      core.$ZodBase64URL.init(inst, def);
+      exports2.ZodStringFormat.init(inst, def);
+    });
+    function base64url(params) {
+      return core._base64url(exports2.ZodBase64URL, params);
+    }
+    __name(base64url, "base64url");
+    exports2.ZodE164 = core.$constructor("ZodE164", (inst, def) => {
+      core.$ZodE164.init(inst, def);
+      exports2.ZodStringFormat.init(inst, def);
+    });
+    function e164(params) {
+      return core._e164(exports2.ZodE164, params);
+    }
+    __name(e164, "e164");
+    exports2.ZodJWT = core.$constructor("ZodJWT", (inst, def) => {
+      core.$ZodJWT.init(inst, def);
+      exports2.ZodStringFormat.init(inst, def);
+    });
+    function jwt(params) {
+      return core._jwt(exports2.ZodJWT, params);
+    }
+    __name(jwt, "jwt");
+    exports2.ZodCustomStringFormat = core.$constructor("ZodCustomStringFormat", (inst, def) => {
+      core.$ZodCustomStringFormat.init(inst, def);
+      exports2.ZodStringFormat.init(inst, def);
+    });
+    function stringFormat(format, fnOrRegex, _params = {}) {
+      return core._stringFormat(exports2.ZodCustomStringFormat, format, fnOrRegex, _params);
+    }
+    __name(stringFormat, "stringFormat");
+    function hostname(_params) {
+      return core._stringFormat(exports2.ZodCustomStringFormat, "hostname", core.regexes.hostname, _params);
+    }
+    __name(hostname, "hostname");
+    function hex(_params) {
+      return core._stringFormat(exports2.ZodCustomStringFormat, "hex", core.regexes.hex, _params);
+    }
+    __name(hex, "hex");
+    function hash(alg, params) {
+      const enc = params?.enc ?? "hex";
+      const format = `${alg}_${enc}`;
+      const regex = core.regexes[format];
+      if (!regex)
+        throw new Error(`Unrecognized hash format: ${format}`);
+      return core._stringFormat(exports2.ZodCustomStringFormat, format, regex, params);
+    }
+    __name(hash, "hash");
+    exports2.ZodNumber = core.$constructor("ZodNumber", (inst, def) => {
+      core.$ZodNumber.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.gt = (value, params) => inst.check(checks.gt(value, params));
+      inst.gte = (value, params) => inst.check(checks.gte(value, params));
+      inst.min = (value, params) => inst.check(checks.gte(value, params));
+      inst.lt = (value, params) => inst.check(checks.lt(value, params));
+      inst.lte = (value, params) => inst.check(checks.lte(value, params));
+      inst.max = (value, params) => inst.check(checks.lte(value, params));
+      inst.int = (params) => inst.check(int(params));
+      inst.safe = (params) => inst.check(int(params));
+      inst.positive = (params) => inst.check(checks.gt(0, params));
+      inst.nonnegative = (params) => inst.check(checks.gte(0, params));
+      inst.negative = (params) => inst.check(checks.lt(0, params));
+      inst.nonpositive = (params) => inst.check(checks.lte(0, params));
+      inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));
+      inst.step = (value, params) => inst.check(checks.multipleOf(value, params));
+      inst.finite = () => inst;
+      const bag = inst._zod.bag;
+      inst.minValue = Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;
+      inst.maxValue = Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;
+      inst.isInt = (bag.format ?? "").includes("int") || Number.isSafeInteger(bag.multipleOf ?? 0.5);
+      inst.isFinite = true;
+      inst.format = bag.format ?? null;
+    });
+    function number(params) {
+      return core._number(exports2.ZodNumber, params);
+    }
+    __name(number, "number");
+    exports2.ZodNumberFormat = core.$constructor("ZodNumberFormat", (inst, def) => {
+      core.$ZodNumberFormat.init(inst, def);
+      exports2.ZodNumber.init(inst, def);
+    });
+    function int(params) {
+      return core._int(exports2.ZodNumberFormat, params);
+    }
+    __name(int, "int");
+    function float32(params) {
+      return core._float32(exports2.ZodNumberFormat, params);
+    }
+    __name(float32, "float32");
+    function float64(params) {
+      return core._float64(exports2.ZodNumberFormat, params);
+    }
+    __name(float64, "float64");
+    function int32(params) {
+      return core._int32(exports2.ZodNumberFormat, params);
+    }
+    __name(int32, "int32");
+    function uint32(params) {
+      return core._uint32(exports2.ZodNumberFormat, params);
+    }
+    __name(uint32, "uint32");
+    exports2.ZodBoolean = core.$constructor("ZodBoolean", (inst, def) => {
+      core.$ZodBoolean.init(inst, def);
+      exports2.ZodType.init(inst, def);
+    });
+    function boolean(params) {
+      return core._boolean(exports2.ZodBoolean, params);
+    }
+    __name(boolean, "boolean");
+    exports2.ZodBigInt = core.$constructor("ZodBigInt", (inst, def) => {
+      core.$ZodBigInt.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.gte = (value, params) => inst.check(checks.gte(value, params));
+      inst.min = (value, params) => inst.check(checks.gte(value, params));
+      inst.gt = (value, params) => inst.check(checks.gt(value, params));
+      inst.gte = (value, params) => inst.check(checks.gte(value, params));
+      inst.min = (value, params) => inst.check(checks.gte(value, params));
+      inst.lt = (value, params) => inst.check(checks.lt(value, params));
+      inst.lte = (value, params) => inst.check(checks.lte(value, params));
+      inst.max = (value, params) => inst.check(checks.lte(value, params));
+      inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));
+      inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));
+      inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));
+      inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));
+      inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));
+      const bag = inst._zod.bag;
+      inst.minValue = bag.minimum ?? null;
+      inst.maxValue = bag.maximum ?? null;
+      inst.format = bag.format ?? null;
+    });
+    function bigint(params) {
+      return core._bigint(exports2.ZodBigInt, params);
+    }
+    __name(bigint, "bigint");
+    exports2.ZodBigIntFormat = core.$constructor("ZodBigIntFormat", (inst, def) => {
+      core.$ZodBigIntFormat.init(inst, def);
+      exports2.ZodBigInt.init(inst, def);
+    });
+    function int64(params) {
+      return core._int64(exports2.ZodBigIntFormat, params);
+    }
+    __name(int64, "int64");
+    function uint64(params) {
+      return core._uint64(exports2.ZodBigIntFormat, params);
+    }
+    __name(uint64, "uint64");
+    exports2.ZodSymbol = core.$constructor("ZodSymbol", (inst, def) => {
+      core.$ZodSymbol.init(inst, def);
+      exports2.ZodType.init(inst, def);
+    });
+    function symbol(params) {
+      return core._symbol(exports2.ZodSymbol, params);
+    }
+    __name(symbol, "symbol");
+    exports2.ZodUndefined = core.$constructor("ZodUndefined", (inst, def) => {
+      core.$ZodUndefined.init(inst, def);
+      exports2.ZodType.init(inst, def);
+    });
+    function _undefined(params) {
+      return core._undefined(exports2.ZodUndefined, params);
+    }
+    __name(_undefined, "_undefined");
+    exports2.ZodNull = core.$constructor("ZodNull", (inst, def) => {
+      core.$ZodNull.init(inst, def);
+      exports2.ZodType.init(inst, def);
+    });
+    function _null(params) {
+      return core._null(exports2.ZodNull, params);
+    }
+    __name(_null, "_null");
+    exports2.ZodAny = core.$constructor("ZodAny", (inst, def) => {
+      core.$ZodAny.init(inst, def);
+      exports2.ZodType.init(inst, def);
+    });
+    function any() {
+      return core._any(exports2.ZodAny);
+    }
+    __name(any, "any");
+    exports2.ZodUnknown = core.$constructor("ZodUnknown", (inst, def) => {
+      core.$ZodUnknown.init(inst, def);
+      exports2.ZodType.init(inst, def);
+    });
+    function unknown() {
+      return core._unknown(exports2.ZodUnknown);
+    }
+    __name(unknown, "unknown");
+    exports2.ZodNever = core.$constructor("ZodNever", (inst, def) => {
+      core.$ZodNever.init(inst, def);
+      exports2.ZodType.init(inst, def);
+    });
+    function never(params) {
+      return core._never(exports2.ZodNever, params);
+    }
+    __name(never, "never");
+    exports2.ZodVoid = core.$constructor("ZodVoid", (inst, def) => {
+      core.$ZodVoid.init(inst, def);
+      exports2.ZodType.init(inst, def);
+    });
+    function _void(params) {
+      return core._void(exports2.ZodVoid, params);
+    }
+    __name(_void, "_void");
+    exports2.ZodDate = core.$constructor("ZodDate", (inst, def) => {
+      core.$ZodDate.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.min = (value, params) => inst.check(checks.gte(value, params));
+      inst.max = (value, params) => inst.check(checks.lte(value, params));
+      const c = inst._zod.bag;
+      inst.minDate = c.minimum ? new Date(c.minimum) : null;
+      inst.maxDate = c.maximum ? new Date(c.maximum) : null;
+    });
+    function date(params) {
+      return core._date(exports2.ZodDate, params);
+    }
+    __name(date, "date");
+    exports2.ZodArray = core.$constructor("ZodArray", (inst, def) => {
+      core.$ZodArray.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.element = def.element;
+      inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));
+      inst.nonempty = (params) => inst.check(checks.minLength(1, params));
+      inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));
+      inst.length = (len, params) => inst.check(checks.length(len, params));
+      inst.unwrap = () => inst.element;
+    });
+    function array(element, params) {
+      return core._array(exports2.ZodArray, element, params);
+    }
+    __name(array, "array");
+    function keyof(schema) {
+      const shape = schema._zod.def.shape;
+      return _enum(Object.keys(shape));
+    }
+    __name(keyof, "keyof");
+    exports2.ZodObject = core.$constructor("ZodObject", (inst, def) => {
+      core.$ZodObjectJIT.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      index_js_1.util.defineLazy(inst, "shape", () => {
+        return def.shape;
+      });
+      inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));
+      inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall });
+      inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });
+      inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });
+      inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });
+      inst.strip = () => inst.clone({ ...inst._zod.def, catchall: void 0 });
+      inst.extend = (incoming) => {
+        return index_js_1.util.extend(inst, incoming);
+      };
+      inst.safeExtend = (incoming) => {
+        return index_js_1.util.safeExtend(inst, incoming);
+      };
+      inst.merge = (other) => index_js_1.util.merge(inst, other);
+      inst.pick = (mask) => index_js_1.util.pick(inst, mask);
+      inst.omit = (mask) => index_js_1.util.omit(inst, mask);
+      inst.partial = (...args) => index_js_1.util.partial(exports2.ZodOptional, inst, args[0]);
+      inst.required = (...args) => index_js_1.util.required(exports2.ZodNonOptional, inst, args[0]);
+    });
+    function object(shape, params) {
+      const def = {
+        type: "object",
+        shape: shape ?? {},
+        ...index_js_1.util.normalizeParams(params)
+      };
+      return new exports2.ZodObject(def);
+    }
+    __name(object, "object");
+    function strictObject(shape, params) {
+      return new exports2.ZodObject({
+        type: "object",
+        shape,
+        catchall: never(),
+        ...index_js_1.util.normalizeParams(params)
+      });
+    }
+    __name(strictObject, "strictObject");
+    function looseObject(shape, params) {
+      return new exports2.ZodObject({
+        type: "object",
+        shape,
+        catchall: unknown(),
+        ...index_js_1.util.normalizeParams(params)
+      });
+    }
+    __name(looseObject, "looseObject");
+    exports2.ZodUnion = core.$constructor("ZodUnion", (inst, def) => {
+      core.$ZodUnion.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.options = def.options;
+    });
+    function union(options, params) {
+      return new exports2.ZodUnion({
+        type: "union",
+        options,
+        ...index_js_1.util.normalizeParams(params)
+      });
+    }
+    __name(union, "union");
+    exports2.ZodDiscriminatedUnion = core.$constructor("ZodDiscriminatedUnion", (inst, def) => {
+      exports2.ZodUnion.init(inst, def);
+      core.$ZodDiscriminatedUnion.init(inst, def);
+    });
+    function discriminatedUnion(discriminator, options, params) {
+      return new exports2.ZodDiscriminatedUnion({
+        type: "union",
+        options,
+        discriminator,
+        ...index_js_1.util.normalizeParams(params)
+      });
+    }
+    __name(discriminatedUnion, "discriminatedUnion");
+    exports2.ZodIntersection = core.$constructor("ZodIntersection", (inst, def) => {
+      core.$ZodIntersection.init(inst, def);
+      exports2.ZodType.init(inst, def);
+    });
+    function intersection(left, right) {
+      return new exports2.ZodIntersection({
+        type: "intersection",
+        left,
+        right
+      });
+    }
+    __name(intersection, "intersection");
+    exports2.ZodTuple = core.$constructor("ZodTuple", (inst, def) => {
+      core.$ZodTuple.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.rest = (rest) => inst.clone({
+        ...inst._zod.def,
+        rest
+      });
+    });
+    function tuple(items, _paramsOrRest, _params) {
+      const hasRest = _paramsOrRest instanceof core.$ZodType;
+      const params = hasRest ? _params : _paramsOrRest;
+      const rest = hasRest ? _paramsOrRest : null;
+      return new exports2.ZodTuple({
+        type: "tuple",
+        items,
+        rest,
+        ...index_js_1.util.normalizeParams(params)
+      });
+    }
+    __name(tuple, "tuple");
+    exports2.ZodRecord = core.$constructor("ZodRecord", (inst, def) => {
+      core.$ZodRecord.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.keyType = def.keyType;
+      inst.valueType = def.valueType;
+    });
+    function record(keyType, valueType, params) {
+      return new exports2.ZodRecord({
+        type: "record",
+        keyType,
+        valueType,
+        ...index_js_1.util.normalizeParams(params)
+      });
+    }
+    __name(record, "record");
+    function partialRecord(keyType, valueType, params) {
+      const k = core.clone(keyType);
+      k._zod.values = void 0;
+      return new exports2.ZodRecord({
+        type: "record",
+        keyType: k,
+        valueType,
+        ...index_js_1.util.normalizeParams(params)
+      });
+    }
+    __name(partialRecord, "partialRecord");
+    exports2.ZodMap = core.$constructor("ZodMap", (inst, def) => {
+      core.$ZodMap.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.keyType = def.keyType;
+      inst.valueType = def.valueType;
+    });
+    function map(keyType, valueType, params) {
+      return new exports2.ZodMap({
+        type: "map",
+        keyType,
+        valueType,
+        ...index_js_1.util.normalizeParams(params)
+      });
+    }
+    __name(map, "map");
+    exports2.ZodSet = core.$constructor("ZodSet", (inst, def) => {
+      core.$ZodSet.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.min = (...args) => inst.check(core._minSize(...args));
+      inst.nonempty = (params) => inst.check(core._minSize(1, params));
+      inst.max = (...args) => inst.check(core._maxSize(...args));
+      inst.size = (...args) => inst.check(core._size(...args));
+    });
+    function set(valueType, params) {
+      return new exports2.ZodSet({
+        type: "set",
+        valueType,
+        ...index_js_1.util.normalizeParams(params)
+      });
+    }
+    __name(set, "set");
+    exports2.ZodEnum = core.$constructor("ZodEnum", (inst, def) => {
+      core.$ZodEnum.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.enum = def.entries;
+      inst.options = Object.values(def.entries);
+      const keys = new Set(Object.keys(def.entries));
+      inst.extract = (values, params) => {
+        const newEntries = {};
+        for (const value of values) {
+          if (keys.has(value)) {
+            newEntries[value] = def.entries[value];
+          } else
+            throw new Error(`Key ${value} not found in enum`);
+        }
+        return new exports2.ZodEnum({
+          ...def,
+          checks: [],
+          ...index_js_1.util.normalizeParams(params),
+          entries: newEntries
+        });
+      };
+      inst.exclude = (values, params) => {
+        const newEntries = { ...def.entries };
+        for (const value of values) {
+          if (keys.has(value)) {
+            delete newEntries[value];
+          } else
+            throw new Error(`Key ${value} not found in enum`);
+        }
+        return new exports2.ZodEnum({
+          ...def,
+          checks: [],
+          ...index_js_1.util.normalizeParams(params),
+          entries: newEntries
+        });
+      };
+    });
+    function _enum(values, params) {
+      const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;
+      return new exports2.ZodEnum({
+        type: "enum",
+        entries,
+        ...index_js_1.util.normalizeParams(params)
+      });
+    }
+    __name(_enum, "_enum");
+    function nativeEnum(entries, params) {
+      return new exports2.ZodEnum({
+        type: "enum",
+        entries,
+        ...index_js_1.util.normalizeParams(params)
+      });
+    }
+    __name(nativeEnum, "nativeEnum");
+    exports2.ZodLiteral = core.$constructor("ZodLiteral", (inst, def) => {
+      core.$ZodLiteral.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.values = new Set(def.values);
+      Object.defineProperty(inst, "value", {
+        get() {
+          if (def.values.length > 1) {
+            throw new Error("This schema contains multiple valid literal values. Use `.values` instead.");
+          }
+          return def.values[0];
+        }
+      });
+    });
+    function literal(value, params) {
+      return new exports2.ZodLiteral({
+        type: "literal",
+        values: Array.isArray(value) ? value : [value],
+        ...index_js_1.util.normalizeParams(params)
+      });
+    }
+    __name(literal, "literal");
+    exports2.ZodFile = core.$constructor("ZodFile", (inst, def) => {
+      core.$ZodFile.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.min = (size, params) => inst.check(core._minSize(size, params));
+      inst.max = (size, params) => inst.check(core._maxSize(size, params));
+      inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));
+    });
+    function file(params) {
+      return core._file(exports2.ZodFile, params);
+    }
+    __name(file, "file");
+    exports2.ZodTransform = core.$constructor("ZodTransform", (inst, def) => {
+      core.$ZodTransform.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst._zod.parse = (payload, _ctx) => {
+        if (_ctx.direction === "backward") {
+          throw new core.$ZodEncodeError(inst.constructor.name);
+        }
+        payload.addIssue = (issue) => {
+          if (typeof issue === "string") {
+            payload.issues.push(index_js_1.util.issue(issue, payload.value, def));
+          } else {
+            const _issue = issue;
+            if (_issue.fatal)
+              _issue.continue = false;
+            _issue.code ?? (_issue.code = "custom");
+            _issue.input ?? (_issue.input = payload.value);
+            _issue.inst ?? (_issue.inst = inst);
+            payload.issues.push(index_js_1.util.issue(_issue));
+          }
+        };
+        const output = def.transform(payload.value, payload);
+        if (output instanceof Promise) {
+          return output.then((output2) => {
+            payload.value = output2;
+            return payload;
+          });
+        }
+        payload.value = output;
+        return payload;
+      };
+    });
+    function transform(fn) {
+      return new exports2.ZodTransform({
+        type: "transform",
+        transform: fn
+      });
+    }
+    __name(transform, "transform");
+    exports2.ZodOptional = core.$constructor("ZodOptional", (inst, def) => {
+      core.$ZodOptional.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.unwrap = () => inst._zod.def.innerType;
+    });
+    function optional(innerType) {
+      return new exports2.ZodOptional({
+        type: "optional",
+        innerType
+      });
+    }
+    __name(optional, "optional");
+    exports2.ZodNullable = core.$constructor("ZodNullable", (inst, def) => {
+      core.$ZodNullable.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.unwrap = () => inst._zod.def.innerType;
+    });
+    function nullable(innerType) {
+      return new exports2.ZodNullable({
+        type: "nullable",
+        innerType
+      });
+    }
+    __name(nullable, "nullable");
+    function nullish(innerType) {
+      return optional(nullable(innerType));
+    }
+    __name(nullish, "nullish");
+    exports2.ZodDefault = core.$constructor("ZodDefault", (inst, def) => {
+      core.$ZodDefault.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.unwrap = () => inst._zod.def.innerType;
+      inst.removeDefault = inst.unwrap;
+    });
+    function _default(innerType, defaultValue) {
+      return new exports2.ZodDefault({
+        type: "default",
+        innerType,
+        get defaultValue() {
+          return typeof defaultValue === "function" ? defaultValue() : index_js_1.util.shallowClone(defaultValue);
+        }
+      });
+    }
+    __name(_default, "_default");
+    exports2.ZodPrefault = core.$constructor("ZodPrefault", (inst, def) => {
+      core.$ZodPrefault.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.unwrap = () => inst._zod.def.innerType;
+    });
+    function prefault(innerType, defaultValue) {
+      return new exports2.ZodPrefault({
+        type: "prefault",
+        innerType,
+        get defaultValue() {
+          return typeof defaultValue === "function" ? defaultValue() : index_js_1.util.shallowClone(defaultValue);
+        }
+      });
+    }
+    __name(prefault, "prefault");
+    exports2.ZodNonOptional = core.$constructor("ZodNonOptional", (inst, def) => {
+      core.$ZodNonOptional.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.unwrap = () => inst._zod.def.innerType;
+    });
+    function nonoptional(innerType, params) {
+      return new exports2.ZodNonOptional({
+        type: "nonoptional",
+        innerType,
+        ...index_js_1.util.normalizeParams(params)
+      });
+    }
+    __name(nonoptional, "nonoptional");
+    exports2.ZodSuccess = core.$constructor("ZodSuccess", (inst, def) => {
+      core.$ZodSuccess.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.unwrap = () => inst._zod.def.innerType;
+    });
+    function success(innerType) {
+      return new exports2.ZodSuccess({
+        type: "success",
+        innerType
+      });
+    }
+    __name(success, "success");
+    exports2.ZodCatch = core.$constructor("ZodCatch", (inst, def) => {
+      core.$ZodCatch.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.unwrap = () => inst._zod.def.innerType;
+      inst.removeCatch = inst.unwrap;
+    });
+    function _catch(innerType, catchValue) {
+      return new exports2.ZodCatch({
+        type: "catch",
+        innerType,
+        catchValue: typeof catchValue === "function" ? catchValue : () => catchValue
+      });
+    }
+    __name(_catch, "_catch");
+    exports2.ZodNaN = core.$constructor("ZodNaN", (inst, def) => {
+      core.$ZodNaN.init(inst, def);
+      exports2.ZodType.init(inst, def);
+    });
+    function nan(params) {
+      return core._nan(exports2.ZodNaN, params);
+    }
+    __name(nan, "nan");
+    exports2.ZodPipe = core.$constructor("ZodPipe", (inst, def) => {
+      core.$ZodPipe.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.in = def.in;
+      inst.out = def.out;
+    });
+    function pipe(in_, out) {
+      return new exports2.ZodPipe({
+        type: "pipe",
+        in: in_,
+        out
+        // ...util.normalizeParams(params),
+      });
+    }
+    __name(pipe, "pipe");
+    exports2.ZodCodec = core.$constructor("ZodCodec", (inst, def) => {
+      exports2.ZodPipe.init(inst, def);
+      core.$ZodCodec.init(inst, def);
+    });
+    function codec(in_, out, params) {
+      return new exports2.ZodCodec({
+        type: "pipe",
+        in: in_,
+        out,
+        transform: params.decode,
+        reverseTransform: params.encode
+      });
+    }
+    __name(codec, "codec");
+    exports2.ZodReadonly = core.$constructor("ZodReadonly", (inst, def) => {
+      core.$ZodReadonly.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.unwrap = () => inst._zod.def.innerType;
+    });
+    function readonly(innerType) {
+      return new exports2.ZodReadonly({
+        type: "readonly",
+        innerType
+      });
+    }
+    __name(readonly, "readonly");
+    exports2.ZodTemplateLiteral = core.$constructor("ZodTemplateLiteral", (inst, def) => {
+      core.$ZodTemplateLiteral.init(inst, def);
+      exports2.ZodType.init(inst, def);
+    });
+    function templateLiteral(parts, params) {
+      return new exports2.ZodTemplateLiteral({
+        type: "template_literal",
+        parts,
+        ...index_js_1.util.normalizeParams(params)
+      });
+    }
+    __name(templateLiteral, "templateLiteral");
+    exports2.ZodLazy = core.$constructor("ZodLazy", (inst, def) => {
+      core.$ZodLazy.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.unwrap = () => inst._zod.def.getter();
+    });
+    function lazy(getter) {
+      return new exports2.ZodLazy({
+        type: "lazy",
+        getter
+      });
+    }
+    __name(lazy, "lazy");
+    exports2.ZodPromise = core.$constructor("ZodPromise", (inst, def) => {
+      core.$ZodPromise.init(inst, def);
+      exports2.ZodType.init(inst, def);
+      inst.unwrap = () => inst._zod.def.innerType;
+    });
+    function promise(innerType) {
+      return new exports2.ZodPromise({
+        type: "promise",
+        innerType
+      });
+    }
+    __name(promise, "promise");
+    exports2.ZodFunction = core.$constructor("ZodFunction", (inst, def) => {
+      core.$ZodFunction.init(inst, def);
+      exports2.ZodType.init(inst, def);
+    });
+    function _function(params) {
+      return new exports2.ZodFunction({
+        type: "function",
+        input: Array.isArray(params?.input) ? tuple(params?.input) : params?.input ?? array(unknown()),
+        output: params?.output ?? unknown()
+      });
+    }
+    __name(_function, "_function");
+    exports2.ZodCustom = core.$constructor("ZodCustom", (inst, def) => {
+      core.$ZodCustom.init(inst, def);
+      exports2.ZodType.init(inst, def);
+    });
+    function check(fn) {
+      const ch = new core.$ZodCheck({
+        check: "custom"
+        // ...util.normalizeParams(params),
+      });
+      ch._zod.check = fn;
+      return ch;
+    }
+    __name(check, "check");
+    function custom(fn, _params) {
+      return core._custom(exports2.ZodCustom, fn ?? (() => true), _params);
+    }
+    __name(custom, "custom");
+    function refine(fn, _params = {}) {
+      return core._refine(exports2.ZodCustom, fn, _params);
+    }
+    __name(refine, "refine");
+    function superRefine(fn) {
+      return core._superRefine(fn);
+    }
+    __name(superRefine, "superRefine");
+    function _instanceof(cls, params = {
+      error: `Input not instance of ${cls.name}`
+    }) {
+      const inst = new exports2.ZodCustom({
+        type: "custom",
+        check: "custom",
+        fn: /* @__PURE__ */ __name((data) => data instanceof cls, "fn"),
+        abort: true,
+        ...index_js_1.util.normalizeParams(params)
+      });
+      inst._zod.bag.Class = cls;
+      return inst;
+    }
+    __name(_instanceof, "_instanceof");
+    var stringbool = /* @__PURE__ */ __name((...args) => core._stringbool({
+      Codec: exports2.ZodCodec,
+      Boolean: exports2.ZodBoolean,
+      String: exports2.ZodString
+    }, ...args), "stringbool");
+    exports2.stringbool = stringbool;
+    function json(params) {
+      const jsonSchema = lazy(() => {
+        return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);
+      });
+      return jsonSchema;
+    }
+    __name(json, "json");
+    function preprocess(fn, schema) {
+      return pipe(transform(fn), schema);
+    }
+    __name(preprocess, "preprocess");
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/compat.cjs
+var require_compat = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/compat.cjs"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.ZodFirstPartyTypeKind = exports2.config = exports2.$brand = exports2.ZodIssueCode = void 0;
+    exports2.setErrorMap = setErrorMap;
+    exports2.getErrorMap = getErrorMap;
+    var core = __importStar(require_core2());
+    exports2.ZodIssueCode = {
+      invalid_type: "invalid_type",
+      too_big: "too_big",
+      too_small: "too_small",
+      invalid_format: "invalid_format",
+      not_multiple_of: "not_multiple_of",
+      unrecognized_keys: "unrecognized_keys",
+      invalid_union: "invalid_union",
+      invalid_key: "invalid_key",
+      invalid_element: "invalid_element",
+      invalid_value: "invalid_value",
+      custom: "custom"
+    };
+    var index_js_1 = require_core2();
+    Object.defineProperty(exports2, "$brand", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1.$brand;
+    }, "get") });
+    Object.defineProperty(exports2, "config", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_1.config;
+    }, "get") });
+    function setErrorMap(map) {
+      core.config({
+        customError: map
+      });
+    }
+    __name(setErrorMap, "setErrorMap");
+    function getErrorMap() {
+      return core.config().customError;
+    }
+    __name(getErrorMap, "getErrorMap");
+    var ZodFirstPartyTypeKind;
+    /* @__PURE__ */ (function(ZodFirstPartyTypeKind2) {
+    })(ZodFirstPartyTypeKind || (exports2.ZodFirstPartyTypeKind = ZodFirstPartyTypeKind = {}));
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/coerce.cjs
+var require_coerce = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/coerce.cjs"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.string = string;
+    exports2.number = number;
+    exports2.boolean = boolean;
+    exports2.bigint = bigint;
+    exports2.date = date;
+    var core = __importStar(require_core2());
+    var schemas = __importStar(require_schemas2());
+    function string(params) {
+      return core._coercedString(schemas.ZodString, params);
+    }
+    __name(string, "string");
+    function number(params) {
+      return core._coercedNumber(schemas.ZodNumber, params);
+    }
+    __name(number, "number");
+    function boolean(params) {
+      return core._coercedBoolean(schemas.ZodBoolean, params);
+    }
+    __name(boolean, "boolean");
+    function bigint(params) {
+      return core._coercedBigint(schemas.ZodBigInt, params);
+    }
+    __name(bigint, "bigint");
+    function date(params) {
+      return core._coercedDate(schemas.ZodDate, params);
+    }
+    __name(date, "date");
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/external.cjs
+var require_external = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/external.cjs"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
+      for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
+    };
+    var __importDefault = exports2 && exports2.__importDefault || function(mod) {
+      return mod && mod.__esModule ? mod : { "default": mod };
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.coerce = exports2.iso = exports2.ZodISODuration = exports2.ZodISOTime = exports2.ZodISODate = exports2.ZodISODateTime = exports2.locales = exports2.NEVER = exports2.util = exports2.TimePrecision = exports2.toJSONSchema = exports2.flattenError = exports2.formatError = exports2.prettifyError = exports2.treeifyError = exports2.regexes = exports2.clone = exports2.$brand = exports2.$input = exports2.$output = exports2.config = exports2.registry = exports2.globalRegistry = exports2.core = void 0;
+    exports2.core = __importStar(require_core2());
+    __exportStar(require_schemas2(), exports2);
+    __exportStar(require_checks2(), exports2);
+    __exportStar(require_errors2(), exports2);
+    __exportStar(require_parse2(), exports2);
+    __exportStar(require_compat(), exports2);
+    var index_js_1 = require_core2();
+    var en_js_1 = __importDefault(require_en());
+    (0, index_js_1.config)((0, en_js_1.default)());
+    var index_js_2 = require_core2();
+    Object.defineProperty(exports2, "globalRegistry", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_2.globalRegistry;
+    }, "get") });
+    Object.defineProperty(exports2, "registry", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_2.registry;
+    }, "get") });
+    Object.defineProperty(exports2, "config", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_2.config;
+    }, "get") });
+    Object.defineProperty(exports2, "$output", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_2.$output;
+    }, "get") });
+    Object.defineProperty(exports2, "$input", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_2.$input;
+    }, "get") });
+    Object.defineProperty(exports2, "$brand", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_2.$brand;
+    }, "get") });
+    Object.defineProperty(exports2, "clone", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_2.clone;
+    }, "get") });
+    Object.defineProperty(exports2, "regexes", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_2.regexes;
+    }, "get") });
+    Object.defineProperty(exports2, "treeifyError", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_2.treeifyError;
+    }, "get") });
+    Object.defineProperty(exports2, "prettifyError", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_2.prettifyError;
+    }, "get") });
+    Object.defineProperty(exports2, "formatError", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_2.formatError;
+    }, "get") });
+    Object.defineProperty(exports2, "flattenError", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_2.flattenError;
+    }, "get") });
+    Object.defineProperty(exports2, "toJSONSchema", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_2.toJSONSchema;
+    }, "get") });
+    Object.defineProperty(exports2, "TimePrecision", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_2.TimePrecision;
+    }, "get") });
+    Object.defineProperty(exports2, "util", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_2.util;
+    }, "get") });
+    Object.defineProperty(exports2, "NEVER", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return index_js_2.NEVER;
+    }, "get") });
+    exports2.locales = __importStar(require_locales());
+    var iso_js_1 = require_iso();
+    Object.defineProperty(exports2, "ZodISODateTime", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return iso_js_1.ZodISODateTime;
+    }, "get") });
+    Object.defineProperty(exports2, "ZodISODate", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return iso_js_1.ZodISODate;
+    }, "get") });
+    Object.defineProperty(exports2, "ZodISOTime", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return iso_js_1.ZodISOTime;
+    }, "get") });
+    Object.defineProperty(exports2, "ZodISODuration", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+      return iso_js_1.ZodISODuration;
+    }, "get") });
+    exports2.iso = __importStar(require_iso());
+    exports2.coerce = __importStar(require_coerce());
+  }
+});
+
+// node_modules/.pnpm/zod@4.1.12/node_modules/zod/index.cjs
+var require_zod = __commonJS({
+  "node_modules/.pnpm/zod@4.1.12/node_modules/zod/index.cjs"(exports2) {
+    "use strict";
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      var desc = Object.getOwnPropertyDescriptor(m, k);
+      if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return m[k];
+        }, "get") };
+      }
+      Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+      if (k2 === void 0) k2 = k;
+      o[k2] = m[k];
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
+      Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+      o["default"] = v;
+    });
+    var __importStar = exports2 && exports2.__importStar || function(mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) {
+        for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+      }
+      __setModuleDefault(result, mod);
+      return result;
+    };
+    var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
+      for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
+    };
+    Object.defineProperty(exports2, "__esModule", { value: true });
+    exports2.z = void 0;
+    var z2 = __importStar(require_external());
+    exports2.z = z2;
+    __exportStar(require_external(), exports2);
+    exports2.default = z2;
+  }
+});
+
+// src/external/zod.js
+var { z } = require_zod();
+module.exports = { z };
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/fs.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/fs.d.ts
new file mode 100644
index 00000000..0130770c
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/fs.d.ts
@@ -0,0 +1,937 @@
+import type { Abortable } from 'events';
+import type { MakeDirectoryOptions, ObjectEncodingOptions, OpenMode, PathLike } from 'fs';
+import type { JsonReviver } from './json/types';
+import { type Remap } from './objects';
+/**
+ * Supported text encodings for Node.js Buffers.
+ * Includes ASCII, UTF-8/16, base64, binary, and hexadecimal encodings.
+ */
+export type BufferEncoding = 'ascii' | 'utf8' | 'utf-8' | 'utf16le' | 'ucs2' | 'ucs-2' | 'base64' | 'base64url' | 'latin1' | 'binary' | 'hex';
+/**
+ * Represents any valid JSON content type.
+ */
+export type JsonContent = unknown;
+/**
+ * Options for asynchronous `findUp` operations.
+ */
+export interface FindUpOptions {
+    /**
+     * Starting directory for the search.
+     * @default process.cwd()
+     */
+    cwd?: string | undefined;
+    /**
+     * Only match directories, not files.
+     * @default false
+     */
+    onlyDirectories?: boolean | undefined;
+    /**
+     * Only match files, not directories.
+     * @default true
+     */
+    onlyFiles?: boolean | undefined;
+    /**
+     * Abort signal to cancel the search operation.
+     */
+    signal?: AbortSignal | undefined;
+}
+/**
+ * Options for synchronous `findUpSync` operations.
+ */
+export interface FindUpSyncOptions {
+    /**
+     * Starting directory for the search.
+     * @default process.cwd()
+     */
+    cwd?: string | undefined;
+    /**
+     * Directory to stop searching at (inclusive).
+     * When provided, search will stop at this directory even if the root hasn't been reached.
+     */
+    stopAt?: string | undefined;
+    /**
+     * Only match directories, not files.
+     * @default false
+     */
+    onlyDirectories?: boolean | undefined;
+    /**
+     * Only match files, not directories.
+     * @default true
+     */
+    onlyFiles?: boolean | undefined;
+}
+/**
+ * Options for checking if a directory is empty.
+ */
+export interface IsDirEmptyOptions {
+    /**
+     * Glob patterns for files to ignore when checking emptiness.
+     * Files matching these patterns are not counted.
+     * @default defaultIgnore
+     */
+    ignore?: string[] | readonly string[] | undefined;
+}
+/**
+ * Options for read operations with abort support.
+ */
+export interface ReadOptions extends Abortable {
+    /**
+     * Character encoding to use for reading.
+     * @default 'utf8'
+     */
+    encoding?: BufferEncoding | string | undefined;
+    /**
+     * File system flag for reading behavior.
+     * @default 'r'
+     */
+    flag?: string | undefined;
+}
+/**
+ * Options for reading directories with filtering and sorting.
+ */
+export interface ReadDirOptions {
+    /**
+     * Glob patterns for directories to ignore.
+     * @default undefined
+     */
+    ignore?: string[] | readonly string[] | undefined;
+    /**
+     * Include empty directories in results.
+     * When `false`, empty directories are filtered out.
+     * @default true
+     */
+    includeEmpty?: boolean | undefined;
+    /**
+     * Sort directory names alphabetically using natural sort order.
+     * @default true
+     */
+    sort?: boolean | undefined;
+}
+/**
+ * Options for reading files with encoding and abort support.
+ * Can be either an options object, an encoding string, or null.
+ */
+export type ReadFileOptions = Remap | BufferEncoding | null;
+/**
+ * Options for reading and parsing JSON files.
+ */
+export type ReadJsonOptions = Remap[1] | undefined;
+}>;
+/**
+ * Options for file/directory removal operations.
+ */
+export interface RemoveOptions {
+    /**
+     * Force deletion even outside normally safe directories.
+     * When `false`, prevents deletion outside temp, cacache, and ~/.socket.
+     * @default true for safe directories, false otherwise
+     */
+    force?: boolean | undefined;
+    /**
+     * Maximum number of retry attempts on failure.
+     * @default 3
+     */
+    maxRetries?: number | undefined;
+    /**
+     * Recursively delete directories and contents.
+     * @default true
+     */
+    recursive?: boolean | undefined;
+    /**
+     * Delay in milliseconds between retry attempts.
+     * @default 200
+     */
+    retryDelay?: number | undefined;
+    /**
+     * Abort signal to cancel the operation.
+     */
+    signal?: AbortSignal | undefined;
+}
+/**
+ * Options for safe read operations that don't throw on errors.
+ */
+export interface SafeReadOptions extends ReadOptions {
+    /**
+     * Default value to return on read failure.
+     * If not provided, `undefined` is returned on error.
+     */
+    defaultValue?: unknown | undefined;
+}
+/**
+ * Options for write operations with encoding and mode control.
+ */
+export interface WriteOptions extends Abortable {
+    /**
+     * Character encoding for writing.
+     * @default 'utf8'
+     */
+    encoding?: BufferEncoding | string | undefined;
+    /**
+     * File mode (permissions) to set.
+     * Uses standard Unix permission bits (e.g., 0o644).
+     * @default 0o666 (read/write for all, respecting umask)
+     */
+    mode?: number | undefined;
+    /**
+     * File system flag for write behavior.
+     * @default 'w' (create or truncate)
+     */
+    flag?: string | undefined;
+}
+/**
+ * Options for writing JSON files with formatting control.
+ */
+export interface WriteJsonOptions extends WriteOptions {
+    /**
+     * End-of-line sequence to use.
+     * @default '\n'
+     * @example
+     * ```ts
+     * // Windows-style line endings
+     * writeJson('data.json', data, { EOL: '\r\n' })
+     * ```
+     */
+    EOL?: string | undefined;
+    /**
+     * Whether to add a final newline at end of file.
+     * @default true
+     */
+    finalEOL?: boolean | undefined;
+    /**
+     * JSON replacer function to transform values during stringification.
+     * Same as the second parameter to `JSON.stringify()`.
+     */
+    replacer?: JsonReviver | undefined;
+    /**
+     * Number of spaces for indentation, or string to use for indentation.
+     * @default 2
+     * @example
+     * ```ts
+     * // Use tabs instead of spaces
+     * writeJson('data.json', data, { spaces: '\t' })
+     *
+     * // Use 4 spaces for indentation
+     * writeJson('data.json', data, { spaces: 4 })
+     * ```
+     */
+    spaces?: number | string | undefined;
+}
+/**
+ * Find a file or directory by traversing up parent directories.
+ * Searches from the starting directory upward to the filesystem root.
+ * Useful for finding configuration files or project roots.
+ *
+ * @param name - Filename(s) to search for
+ * @param options - Search options including cwd and type filters
+ * @returns Normalized absolute path if found, undefined otherwise
+ *
+ * @example
+ * ```ts
+ * // Find package.json starting from current directory
+ * const pkgPath = await findUp('package.json')
+ *
+ * // Find any of multiple config files
+ * const configPath = await findUp(['.config.js', '.config.json'])
+ *
+ * // Find a directory instead of file
+ * const nodeModules = await findUp('node_modules', { onlyDirectories: true })
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function findUp(name: string | string[] | readonly string[], options?: FindUpOptions | undefined): Promise;
+/**
+ * Synchronously find a file or directory by traversing up parent directories.
+ * Searches from the starting directory upward to the filesystem root or `stopAt` directory.
+ * Useful for finding configuration files or project roots in synchronous contexts.
+ *
+ * @param name - Filename(s) to search for
+ * @param options - Search options including cwd, stopAt, and type filters
+ * @returns Normalized absolute path if found, undefined otherwise
+ *
+ * @example
+ * ```ts
+ * // Find package.json starting from current directory
+ * const pkgPath = findUpSync('package.json')
+ *
+ * // Find .git directory but stop at home directory
+ * const gitPath = findUpSync('.git', {
+ *   onlyDirectories: true,
+ *   stopAt: process.env.HOME
+ * })
+ *
+ * // Find any of multiple config files
+ * const configPath = findUpSync(['.eslintrc.js', '.eslintrc.json'])
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function findUpSync(name: string | string[] | readonly string[], options?: FindUpSyncOptions | undefined): string;
+/**
+ * Invalidate the cached allowed directories.
+ * Called automatically by the paths/rewire module when paths are overridden in tests.
+ *
+ * @internal Used for test rewiring
+ *
+ * @example
+ * ```typescript
+ * invalidatePathCache()
+ * // Cached allowed directories are now cleared
+ * ```
+ */
+export declare function invalidatePathCache(): void;
+/**
+ * Check if a path is a directory asynchronously.
+ * Returns `true` for directories, `false` for files or non-existent paths.
+ *
+ * @param filepath - Path to check
+ * @returns `true` if path is a directory, `false` otherwise
+ *
+ * @example
+ * ```ts
+ * if (await isDir('./src')) {
+ *   console.log('src is a directory')
+ * }
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isDir(filepath: PathLike): Promise;
+/**
+ * Check if a path is a directory synchronously.
+ * Returns `true` for directories, `false` for files or non-existent paths.
+ *
+ * @param filepath - Path to check
+ * @returns `true` if path is a directory, `false` otherwise
+ *
+ * @example
+ * ```ts
+ * if (isDirSync('./src')) {
+ *   console.log('src is a directory')
+ * }
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isDirSync(filepath: PathLike): boolean;
+/**
+ * Check if a directory is empty synchronously.
+ * A directory is considered empty if it contains no files after applying ignore patterns.
+ * Uses glob patterns to filter ignored files.
+ *
+ * @param dirname - Directory path to check
+ * @param options - Options including ignore patterns
+ * @returns `true` if directory is empty (or doesn't exist), `false` otherwise
+ *
+ * @example
+ * ```ts
+ * // Check if directory is completely empty
+ * isDirEmptySync('./build')
+ *
+ * // Check if directory is empty, ignoring .DS_Store files
+ * isDirEmptySync('./cache', { ignore: ['.DS_Store'] })
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isDirEmptySync(dirname: PathLike, options?: IsDirEmptyOptions | undefined): boolean;
+/**
+ * Check if a path is a symbolic link synchronously.
+ * Uses `lstat` to check the link itself, not the target.
+ *
+ * @param filepath - Path to check
+ * @returns `true` if path is a symbolic link, `false` otherwise
+ *
+ * @example
+ * ```ts
+ * if (isSymLinkSync('./my-link')) {
+ *   console.log('Path is a symbolic link')
+ * }
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isSymLinkSync(filepath: PathLike): boolean;
+/**
+ * Normalize encoding string to canonical form.
+ * Handles common encodings inline for performance, delegates to slowCases for others.
+ *
+ * Based on Node.js internal/util.js normalizeEncoding implementation.
+ * @see https://github.com/nodejs/node/blob/ae62b36d442b7bf987e85ae6e0df0f02cc1bb17f/lib/internal/util.js#L247-L310
+ *
+ * @param enc - Encoding to normalize (can be null/undefined)
+ * @returns Normalized encoding string, defaults to 'utf8'
+ *
+ * @example
+ * ```ts
+ * normalizeEncoding('UTF-8') // Returns 'utf8'
+ * normalizeEncoding('binary') // Returns 'latin1'
+ * normalizeEncoding('ucs-2') // Returns 'utf16le'
+ * normalizeEncoding(null) // Returns 'utf8'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function normalizeEncoding(enc: BufferEncoding | string | null | undefined): BufferEncoding;
+/**
+ * Move the "slow cases" to a separate function to make sure this function gets
+ * inlined properly. That prioritizes the common case.
+ *
+ * Based on Node.js internal/util.js normalizeEncoding implementation.
+ * @see https://github.com/nodejs/node/blob/ae62b36d442b7bf987e85ae6e0df0f02cc1bb17f/lib/internal/util.js#L247-L310
+ *
+ * @param enc - Encoding to normalize
+ * @returns Normalized encoding string, defaults to 'utf8' for unknown encodings
+ *
+ * @example
+ * ```typescript
+ * normalizeEncodingSlow('ucs2')    // 'utf16le'
+ * normalizeEncodingSlow('LATIN1')  // 'latin1'
+ * normalizeEncodingSlow('binary')  // 'latin1'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function normalizeEncodingSlow(enc: string): BufferEncoding;
+/**
+ * Read directory names asynchronously with filtering and sorting.
+ * Returns only directory names (not files), with optional filtering for empty directories
+ * and glob-based ignore patterns. Results are naturally sorted by default.
+ *
+ * @param dirname - Directory path to read
+ * @param options - Options for filtering and sorting
+ * @returns Array of directory names, empty array on error
+ *
+ * @example
+ * ```ts
+ * // Get all subdirectories, sorted naturally
+ * const dirs = await readDirNames('./packages')
+ *
+ * // Get non-empty directories only
+ * const nonEmpty = await readDirNames('./cache', { includeEmpty: false })
+ *
+ * // Get directories without sorting
+ * const unsorted = await readDirNames('./src', { sort: false })
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function readDirNames(dirname: PathLike, options?: ReadDirOptions | undefined): Promise;
+/**
+ * Read directory names synchronously with filtering and sorting.
+ * Returns only directory names (not files), with optional filtering for empty directories
+ * and glob-based ignore patterns. Results are naturally sorted by default.
+ *
+ * @param dirname - Directory path to read
+ * @param options - Options for filtering and sorting
+ * @returns Array of directory names, empty array on error
+ *
+ * @example
+ * ```ts
+ * // Get all subdirectories, sorted naturally
+ * const dirs = readDirNamesSync('./packages')
+ *
+ * // Get non-empty directories only, ignoring node_modules
+ * const nonEmpty = readDirNamesSync('./src', {
+ *   includeEmpty: false,
+ *   ignore: ['node_modules']
+ * })
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function readDirNamesSync(dirname: PathLike, options?: ReadDirOptions): string[];
+/**
+ * Read a file as binary data asynchronously.
+ * Returns a Buffer without encoding the contents.
+ * Useful for reading images, archives, or other binary formats.
+ *
+ * @param filepath - Path to file
+ * @param options - Read options (encoding is forced to null for binary)
+ * @returns Promise resolving to Buffer containing file contents
+ *
+ * @example
+ * ```ts
+ * // Read an image file
+ * const imageBuffer = await readFileBinary('./image.png')
+ *
+ * // Read with abort signal
+ * const buffer = await readFileBinary('./data.bin', { signal: abortSignal })
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function readFileBinary(filepath: PathLike, options?: ReadFileOptions | undefined): Promise;
+/**
+ * Read a file as UTF-8 text asynchronously.
+ * Returns a string with the file contents decoded as UTF-8.
+ * This is the most common way to read text files.
+ *
+ * @param filepath - Path to file
+ * @param options - Read options including encoding and abort signal
+ * @returns Promise resolving to string containing file contents
+ *
+ * @example
+ * ```ts
+ * // Read a text file
+ * const content = await readFileUtf8('./README.md')
+ *
+ * // Read with custom encoding
+ * const content = await readFileUtf8('./data.txt', { encoding: 'utf-8' })
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function readFileUtf8(filepath: PathLike, options?: ReadFileOptions | undefined): Promise;
+/**
+ * Read a file as binary data synchronously.
+ * Returns a Buffer without encoding the contents.
+ * Useful for reading images, archives, or other binary formats.
+ *
+ * @param filepath - Path to file
+ * @param options - Read options (encoding is forced to null for binary)
+ * @returns Buffer containing file contents
+ *
+ * @example
+ * ```ts
+ * // Read an image file
+ * const imageBuffer = readFileBinarySync('./logo.png')
+ *
+ * // Read a compressed file
+ * const gzipData = readFileBinarySync('./archive.gz')
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function readFileBinarySync(filepath: PathLike, options?: ReadFileOptions | undefined): string | NonSharedBuffer;
+/**
+ * Read a file as UTF-8 text synchronously.
+ * Returns a string with the file contents decoded as UTF-8.
+ * This is the most common way to read text files synchronously.
+ *
+ * @param filepath - Path to file
+ * @param options - Read options including encoding
+ * @returns String containing file contents
+ *
+ * @example
+ * ```ts
+ * // Read a configuration file
+ * const config = readFileUtf8Sync('./config.txt')
+ *
+ * // Read with custom options
+ * const data = readFileUtf8Sync('./data.txt', { encoding: 'utf8' })
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function readFileUtf8Sync(filepath: PathLike, options?: ReadFileOptions | undefined): string | NonSharedBuffer;
+/**
+ * Read and parse a JSON file asynchronously.
+ * Reads the file as UTF-8 text and parses it as JSON.
+ * Optionally accepts a reviver function to transform parsed values.
+ *
+ * @param filepath - Path to JSON file
+ * @param options - Read and parse options
+ * @returns Promise resolving to parsed JSON value, or undefined if throws is false and an error occurs
+ *
+ * @example
+ * ```ts
+ * // Read and parse package.json
+ * const pkg = await readJson('./package.json')
+ *
+ * // Read JSON with custom reviver
+ * const data = await readJson('./data.json', {
+ *   reviver: (key, value) => {
+ *     if (key === 'date') return new Date(value)
+ *     return value
+ *   }
+ * })
+ *
+ * // Don't throw on parse errors
+ * const config = await readJson('./config.json', { throws: false })
+ * if (config === undefined) {
+ *   console.log('Failed to parse config')
+ * }
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function readJson(filepath: PathLike, options?: ReadJsonOptions | string | undefined): Promise;
+/**
+ * Read and parse a JSON file synchronously.
+ * Reads the file as UTF-8 text and parses it as JSON.
+ * Optionally accepts a reviver function to transform parsed values.
+ *
+ * @param filepath - Path to JSON file
+ * @param options - Read and parse options
+ * @returns Parsed JSON value, or undefined if throws is false and an error occurs
+ *
+ * @example
+ * ```ts
+ * // Read and parse tsconfig.json
+ * const tsconfig = readJsonSync('./tsconfig.json')
+ *
+ * // Read JSON with custom reviver
+ * const data = readJsonSync('./data.json', {
+ *   reviver: (key, value) => {
+ *     if (typeof value === 'string' && /^\d{4}-\d{2}-\d{2}/.test(value)) {
+ *       return new Date(value)
+ *     }
+ *     return value
+ *   }
+ * })
+ *
+ * // Don't throw on parse errors
+ * const config = readJsonSync('./config.json', { throws: false })
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function readJsonSync(filepath: PathLike, options?: ReadJsonOptions | string | undefined): import("./json/types").JsonValue;
+/**
+ * Safely delete a file or directory asynchronously with built-in protections.
+ *
+ * Uses [`del`](https://socket.dev/npm/package/del/overview/8.0.1) for safer deletion with these safety features:
+ * - By default, prevents deleting the current working directory (cwd) and above
+ * - Allows deleting within cwd (descendant paths) without force option
+ * - Automatically uses force: true for temp directory, cacache, and ~/.socket subdirectories
+ * - Protects against accidental deletion of parent directories via `../` paths
+ *
+ * @param filepath - Path or array of paths to delete (supports glob patterns)
+ * @param options - Deletion options including force, retries, and recursion
+ * @param options.force - Set to true to allow deleting cwd and above (use with caution)
+ * @throws {Error} When attempting to delete protected paths without force option
+ *
+ * @example
+ * ```ts
+ * // Delete files within cwd (safe by default)
+ * await safeDelete('./build')
+ * await safeDelete('./dist')
+ *
+ * // Delete with glob patterns
+ * await safeDelete(['./temp/**', '!./temp/keep.txt'])
+ *
+ * // Delete with custom retry settings
+ * await safeDelete('./flaky-dir', { maxRetries: 5, retryDelay: 500 })
+ *
+ * // Force delete cwd or above (requires explicit force: true)
+ * await safeDelete('../parent-dir', { force: true })
+ * ```
+ */
+export declare function safeDelete(filepath: PathLike | PathLike[], options?: RemoveOptions | undefined): Promise;
+/**
+ * Safely delete a file or directory synchronously with built-in protections.
+ *
+ * Uses [`del`](https://socket.dev/npm/package/del/overview/8.0.1) for safer deletion with these safety features:
+ * - By default, prevents deleting the current working directory (cwd) and above
+ * - Allows deleting within cwd (descendant paths) without force option
+ * - Automatically uses force: true for temp directory, cacache, and ~/.socket subdirectories
+ * - Protects against accidental deletion of parent directories via `../` paths
+ *
+ * @param filepath - Path or array of paths to delete (supports glob patterns)
+ * @param options - Deletion options including force, retries, and recursion
+ * @param options.force - Set to true to allow deleting cwd and above (use with caution)
+ * @throws {Error} When attempting to delete protected paths without force option
+ *
+ * @example
+ * ```ts
+ * // Delete files within cwd (safe by default)
+ * safeDeleteSync('./build')
+ * safeDeleteSync('./dist')
+ *
+ * // Delete with glob patterns
+ * safeDeleteSync(['./temp/**', '!./temp/keep.txt'])
+ *
+ * // Delete multiple paths
+ * safeDeleteSync(['./coverage', './reports'])
+ *
+ * // Force delete cwd or above (requires explicit force: true)
+ * safeDeleteSync('../parent-dir', { force: true })
+ * ```
+ */
+export declare function safeDeleteSync(filepath: PathLike | PathLike[], options?: RemoveOptions | undefined): void;
+/**
+ * Safely create a directory asynchronously, ignoring EEXIST errors.
+ * This function wraps fs.promises.mkdir and handles the race condition where
+ * the directory might already exist, which is common in concurrent code.
+ *
+ * Unlike fs.promises.mkdir with recursive:true, this function:
+ * - Silently ignores EEXIST errors (directory already exists)
+ * - Re-throws all other errors (permissions, invalid path, etc.)
+ * - Works reliably in multi-process/concurrent scenarios
+ * - Defaults to recursive: true for convenient nested directory creation
+ *
+ * @param path - Directory path to create
+ * @param options - Options including recursive (default: true) and mode settings
+ * @returns Promise that resolves when directory is created or already exists
+ *
+ * @example
+ * ```ts
+ * // Create a directory recursively by default, no error if it exists
+ * await safeMkdir('./config')
+ *
+ * // Create nested directories (recursive: true is the default)
+ * await safeMkdir('./data/cache/temp')
+ *
+ * // Create with specific permissions
+ * await safeMkdir('./secure', { mode: 0o700 })
+ *
+ * // Explicitly disable recursive behavior
+ * await safeMkdir('./single-level', { recursive: false })
+ * ```
+ */
+export declare function safeMkdir(path: PathLike, options?: MakeDirectoryOptions | undefined): Promise;
+/**
+ * Safely create a directory synchronously, ignoring EEXIST errors.
+ * This function wraps fs.mkdirSync and handles the race condition where
+ * the directory might already exist, which is common in concurrent code.
+ *
+ * Unlike fs.mkdirSync with recursive:true, this function:
+ * - Silently ignores EEXIST errors (directory already exists)
+ * - Re-throws all other errors (permissions, invalid path, etc.)
+ * - Works reliably in multi-process/concurrent scenarios
+ * - Defaults to recursive: true for convenient nested directory creation
+ *
+ * @param path - Directory path to create
+ * @param options - Options including recursive (default: true) and mode settings
+ *
+ * @example
+ * ```ts
+ * // Create a directory recursively by default, no error if it exists
+ * safeMkdirSync('./config')
+ *
+ * // Create nested directories (recursive: true is the default)
+ * safeMkdirSync('./data/cache/temp')
+ *
+ * // Create with specific permissions
+ * safeMkdirSync('./secure', { mode: 0o700 })
+ *
+ * // Explicitly disable recursive behavior
+ * safeMkdirSync('./single-level', { recursive: false })
+ * ```
+ */
+export declare function safeMkdirSync(path: PathLike, options?: MakeDirectoryOptions | undefined): void;
+/**
+ * Safely read a file asynchronously, returning undefined on error.
+ * Useful when you want to attempt reading a file without handling errors explicitly.
+ * Returns undefined for any error (file not found, permission denied, etc.).
+ * Defaults to UTF-8 encoding, returning a string unless encoding is explicitly set to null.
+ *
+ * @param filepath - Path to file
+ * @param options - Read options including encoding and default value
+ * @returns Promise resolving to file contents (string by default), or undefined on error
+ *
+ * @example
+ * ```ts
+ * // Try to read a file as UTF-8 string (default), get undefined if it doesn't exist
+ * const content = await safeReadFile('./optional-config.txt')
+ * if (content) {
+ *   console.log('Config found:', content)
+ * }
+ *
+ * // Read with specific encoding
+ * const data = await safeReadFile('./data.txt', { encoding: 'utf8' })
+ *
+ * // Read as Buffer by setting encoding to null
+ * const buffer = await safeReadFile('./binary.dat', { encoding: null })
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function safeReadFile(filepath: PathLike, options: SafeReadOptions & {
+    encoding: null;
+}): Promise;
+/*@__NO_SIDE_EFFECTS__*/
+export declare function safeReadFile(filepath: PathLike, options?: SafeReadOptions | undefined): Promise;
+/**
+ * Safely read a file synchronously, returning undefined on error.
+ * Useful when you want to attempt reading a file without handling errors explicitly.
+ * Returns undefined for any error (file not found, permission denied, etc.).
+ * Defaults to UTF-8 encoding, returning a string unless encoding is explicitly set to null.
+ *
+ * @param filepath - Path to file
+ * @param options - Read options including encoding and default value
+ * @returns File contents (string by default), or undefined on error
+ *
+ * @example
+ * ```ts
+ * // Try to read a config file as UTF-8 string (default)
+ * const config = safeReadFileSync('./config.txt')
+ * if (config) {
+ *   console.log('Config loaded successfully')
+ * }
+ *
+ * // Read with explicit encoding
+ * const data = safeReadFileSync('./data.txt', { encoding: 'utf8' })
+ *
+ * // Read binary file by setting encoding to null
+ * const buffer = safeReadFileSync('./image.png', { encoding: null })
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function safeReadFileSync(filepath: PathLike, options: SafeReadOptions & {
+    encoding: null;
+}): Buffer | undefined;
+/*@__NO_SIDE_EFFECTS__*/
+export declare function safeReadFileSync(filepath: PathLike, options?: SafeReadOptions | undefined): string | undefined;
+/**
+ * Safely get file stats asynchronously, returning undefined on error.
+ * Useful for checking file existence and properties without error handling.
+ * Returns undefined for any error (file not found, permission denied, etc.).
+ *
+ * @param filepath - Path to check
+ * @returns Promise resolving to Stats object, or undefined on error
+ *
+ * @example
+ * ```ts
+ * // Check if file exists and get its stats
+ * const stats = await safeStats('./file.txt')
+ * if (stats) {
+ *   console.log('File size:', stats.size)
+ *   console.log('Modified:', stats.mtime)
+ * }
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function safeStats(filepath: PathLike): Promise;
+/**
+ * Safely get file stats synchronously, returning undefined on error.
+ * Useful for checking file existence and properties without error handling.
+ * Returns undefined for any error (file not found, permission denied, etc.).
+ *
+ * @param filepath - Path to check
+ * @param options - Read options (currently unused but kept for API consistency)
+ * @returns Stats object, or undefined on error
+ *
+ * @example
+ * ```ts
+ * // Check if file exists and get its size
+ * const stats = safeStatsSync('./file.txt')
+ * if (stats) {
+ *   console.log('File size:', stats.size)
+ *   console.log('Is directory:', stats.isDirectory())
+ * }
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function safeStatsSync(filepath: PathLike, options?: ReadFileOptions | undefined): import("fs").BigIntStats | import("fs").Stats;
+/**
+ * Generate a unique filepath by adding number suffix if the path exists.
+ * Appends `-1`, `-2`, etc. before the file extension until a non-existent path is found.
+ * Useful for creating files without overwriting existing ones.
+ *
+ * @param filepath - Desired file path
+ * @returns Normalized unique filepath (original if it doesn't exist, or with number suffix)
+ *
+ * @example
+ * ```ts
+ * // If 'report.pdf' exists, returns 'report-1.pdf'
+ * const uniquePath = uniqueSync('./report.pdf')
+ *
+ * // If 'data.json' and 'data-1.json' exist, returns 'data-2.json'
+ * const path = uniqueSync('./data.json')
+ *
+ * // If 'backup' doesn't exist, returns 'backup' unchanged
+ * const backupPath = uniqueSync('./backup')
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function uniqueSync(filepath: PathLike): string;
+/**
+ * Result of file readability validation.
+ * Contains lists of valid and invalid file paths.
+ */
+export interface ValidateFilesResult {
+    /**
+     * File paths that passed validation and are readable.
+     */
+    validPaths: string[];
+    /**
+     * File paths that failed validation (unreadable, permission denied, or non-existent).
+     * Common with Yarn Berry PnP virtual filesystem, pnpm symlinks, or filesystem race conditions.
+     */
+    invalidPaths: string[];
+}
+/**
+ * Validate that file paths are readable before processing.
+ * Filters out files from glob results that cannot be accessed (common with
+ * Yarn Berry PnP virtual filesystem, pnpm content-addressable store symlinks,
+ * or filesystem race conditions in CI/CD environments).
+ *
+ * This defensive pattern prevents ENOENT errors when files exist in glob
+ * results but are not accessible via standard filesystem operations.
+ *
+ * @param filepaths - Array of file paths to validate
+ * @returns Object with `validPaths` (readable) and `invalidPaths` (unreadable)
+ *
+ * @example
+ * ```ts
+ * import { validateFiles } from '@socketsecurity/lib/fs'
+ *
+ * const files = ['package.json', '.pnp.cjs/virtual-file.json']
+ * const { validPaths, invalidPaths } = validateFiles(files)
+ *
+ * console.log(`Valid: ${validPaths.length}`)
+ * console.log(`Invalid: ${invalidPaths.length}`)
+ * ```
+ *
+ * @example
+ * ```ts
+ * // Typical usage in Socket CLI commands
+ * const packagePaths = await getPackageFilesForScan(targets)
+ * const { validPaths } = validateFiles(packagePaths)
+ * await sdk.uploadManifestFiles(orgSlug, validPaths)
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function validateFiles(filepaths: string[] | readonly string[]): ValidateFilesResult;
+/**
+ * Write JSON content to a file asynchronously with formatting.
+ * Stringifies the value with configurable indentation and line endings.
+ * Automatically adds a final newline by default for POSIX compliance.
+ *
+ * @param filepath - Path to write to
+ * @param jsonContent - Value to stringify and write
+ * @param options - Write options including formatting and encoding
+ * @returns Promise that resolves when write completes
+ *
+ * @example
+ * ```ts
+ * // Write formatted JSON with default 2-space indentation
+ * await writeJson('./data.json', { name: 'example', version: '1.0.0' })
+ *
+ * // Write with custom indentation
+ * await writeJson('./config.json', config, { spaces: 4 })
+ *
+ * // Write with tabs instead of spaces
+ * await writeJson('./data.json', data, { spaces: '\t' })
+ *
+ * // Write without final newline
+ * await writeJson('./inline.json', obj, { finalEOL: false })
+ *
+ * // Write with Windows line endings
+ * await writeJson('./win.json', data, { EOL: '\r\n' })
+ * ```
+ */
+export declare function writeJson(filepath: PathLike, jsonContent: unknown, options?: WriteJsonOptions | string): Promise;
+/**
+ * Write JSON content to a file synchronously with formatting.
+ * Stringifies the value with configurable indentation and line endings.
+ * Automatically adds a final newline by default for POSIX compliance.
+ *
+ * @param filepath - Path to write to
+ * @param jsonContent - Value to stringify and write
+ * @param options - Write options including formatting and encoding
+ *
+ * @example
+ * ```ts
+ * // Write formatted JSON with default 2-space indentation
+ * writeJsonSync('./package.json', pkg)
+ *
+ * // Write with custom indentation
+ * writeJsonSync('./tsconfig.json', tsconfig, { spaces: 4 })
+ *
+ * // Write with tabs for indentation
+ * writeJsonSync('./data.json', data, { spaces: '\t' })
+ *
+ * // Write compacted (no indentation)
+ * writeJsonSync('./compact.json', data, { spaces: 0 })
+ * ```
+ */
+export declare function writeJsonSync(filepath: PathLike, jsonContent: unknown, options?: WriteJsonOptions | string | undefined): void;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/fs.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/fs.js
new file mode 100644
index 00000000..98757b66
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/fs.js
@@ -0,0 +1,819 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var fs_exports = {};
+__export(fs_exports, {
+  findUp: () => findUp,
+  findUpSync: () => findUpSync,
+  invalidatePathCache: () => invalidatePathCache,
+  isDir: () => isDir,
+  isDirEmptySync: () => isDirEmptySync,
+  isDirSync: () => isDirSync,
+  isSymLinkSync: () => isSymLinkSync,
+  normalizeEncoding: () => normalizeEncoding,
+  normalizeEncodingSlow: () => normalizeEncodingSlow,
+  readDirNames: () => readDirNames,
+  readDirNamesSync: () => readDirNamesSync,
+  readFileBinary: () => readFileBinary,
+  readFileBinarySync: () => readFileBinarySync,
+  readFileUtf8: () => readFileUtf8,
+  readFileUtf8Sync: () => readFileUtf8Sync,
+  readJson: () => readJson,
+  readJsonSync: () => readJsonSync,
+  safeDelete: () => safeDelete,
+  safeDeleteSync: () => safeDeleteSync,
+  safeMkdir: () => safeMkdir,
+  safeMkdirSync: () => safeMkdirSync,
+  safeReadFile: () => safeReadFile,
+  safeReadFileSync: () => safeReadFileSync,
+  safeStats: () => safeStats,
+  safeStatsSync: () => safeStatsSync,
+  uniqueSync: () => uniqueSync,
+  validateFiles: () => validateFiles,
+  writeJson: () => writeJson,
+  writeJsonSync: () => writeJsonSync
+});
+module.exports = __toCommonJS(fs_exports);
+var import_node_process = __toESM(require("node:process"));
+var import_process = require("./constants/process");
+var import_arrays = require("./arrays");
+var import_promises = require("./promises");
+var import_globs = require("./globs");
+var import_parse = require("./json/parse");
+var import_objects = require("./objects");
+var import_normalize = require("./paths/normalize");
+var import_rewire = require("./paths/rewire");
+var import_socket = require("./paths/socket");
+var import_sorts = require("./sorts");
+let _del;
+// @__NO_SIDE_EFFECTS__
+function getDel() {
+  if (_del === void 0) {
+    _del = require("./external/del");
+  }
+  return _del;
+}
+const abortSignal = (0, import_process.getAbortSignal)();
+const defaultRemoveOptions = (0, import_objects.objectFreeze)({
+  __proto__: null,
+  force: true,
+  maxRetries: 3,
+  recursive: true,
+  retryDelay: 200
+});
+let _cachedAllowedDirs;
+function getAllowedDirectories() {
+  if (_cachedAllowedDirs === void 0) {
+    const path = /* @__PURE__ */ getPath();
+    _cachedAllowedDirs = [
+      path.resolve((0, import_socket.getOsTmpDir)()),
+      path.resolve((0, import_socket.getSocketCacacheDir)()),
+      path.resolve((0, import_socket.getSocketUserDir)())
+    ];
+  }
+  return _cachedAllowedDirs;
+}
+let _buffer;
+// @__NO_SIDE_EFFECTS__
+function getBuffer() {
+  if (_buffer === void 0) {
+    _buffer = require("buffer");
+  }
+  return _buffer;
+}
+let _fs;
+// @__NO_SIDE_EFFECTS__
+function getFs() {
+  if (_fs === void 0) {
+    _fs = require("fs");
+  }
+  return _fs;
+}
+let _path;
+// @__NO_SIDE_EFFECTS__
+function getPath() {
+  if (_path === void 0) {
+    _path = require("path");
+  }
+  return _path;
+}
+// @__NO_SIDE_EFFECTS__
+function innerReadDirNames(dirents, dirname, options) {
+  const {
+    ignore,
+    includeEmpty = true,
+    sort = true
+  } = { __proto__: null, ...options };
+  const path = /* @__PURE__ */ getPath();
+  const names = dirents.filter(
+    (d) => d.isDirectory() && (includeEmpty || !/* @__PURE__ */ isDirEmptySync(path.join(dirname || d.parentPath, d.name), {
+      ignore
+    }))
+  ).map((d) => d.name);
+  return sort ? names.sort(import_sorts.naturalCompare) : names;
+}
+// @__NO_SIDE_EFFECTS__
+function stringify(json, EOL, finalEOL, replacer, spaces = 2) {
+  const EOF = finalEOL ? EOL : "";
+  const str = JSON.stringify(json, replacer, spaces);
+  return `${str.replace(/\n/g, EOL)}${EOF}`;
+}
+// @__NO_SIDE_EFFECTS__
+async function findUp(name, options) {
+  const { cwd = import_node_process.default.cwd(), signal = abortSignal } = {
+    __proto__: null,
+    ...options
+  };
+  let { onlyDirectories = false, onlyFiles = true } = {
+    __proto__: null,
+    ...options
+  };
+  if (onlyDirectories) {
+    onlyFiles = false;
+  }
+  if (onlyFiles) {
+    onlyDirectories = false;
+  }
+  const fs = /* @__PURE__ */ getFs();
+  const path = /* @__PURE__ */ getPath();
+  let dir = path.resolve(cwd);
+  const { root } = path.parse(dir);
+  const names = (0, import_arrays.isArray)(name) ? name : [name];
+  while (dir && dir !== root) {
+    for (const n of names) {
+      if (signal?.aborted) {
+        return void 0;
+      }
+      const thePath = path.join(dir, n);
+      try {
+        const stats = await fs.promises.stat(thePath);
+        if (!onlyDirectories && stats.isFile()) {
+          return (0, import_normalize.normalizePath)(thePath);
+        }
+        if (!onlyFiles && stats.isDirectory()) {
+          return (0, import_normalize.normalizePath)(thePath);
+        }
+      } catch {
+      }
+    }
+    dir = path.dirname(dir);
+  }
+  return void 0;
+}
+// @__NO_SIDE_EFFECTS__
+function findUpSync(name, options) {
+  const { cwd = import_node_process.default.cwd(), stopAt } = {
+    __proto__: null,
+    ...options
+  };
+  let { onlyDirectories = false, onlyFiles = true } = {
+    __proto__: null,
+    ...options
+  };
+  if (onlyDirectories) {
+    onlyFiles = false;
+  }
+  if (onlyFiles) {
+    onlyDirectories = false;
+  }
+  const fs = /* @__PURE__ */ getFs();
+  const path = /* @__PURE__ */ getPath();
+  let dir = path.resolve(cwd);
+  const { root } = path.parse(dir);
+  const stopDir = stopAt ? path.resolve(stopAt) : void 0;
+  const names = (0, import_arrays.isArray)(name) ? name : [name];
+  while (dir && dir !== root) {
+    if (stopDir && dir === stopDir) {
+      for (const n of names) {
+        const thePath = path.join(dir, n);
+        try {
+          const stats = fs.statSync(thePath);
+          if (!onlyDirectories && stats.isFile()) {
+            return (0, import_normalize.normalizePath)(thePath);
+          }
+          if (!onlyFiles && stats.isDirectory()) {
+            return (0, import_normalize.normalizePath)(thePath);
+          }
+        } catch {
+        }
+      }
+      return void 0;
+    }
+    for (const n of names) {
+      const thePath = path.join(dir, n);
+      try {
+        const stats = fs.statSync(thePath);
+        if (!onlyDirectories && stats.isFile()) {
+          return (0, import_normalize.normalizePath)(thePath);
+        }
+        if (!onlyFiles && stats.isDirectory()) {
+          return (0, import_normalize.normalizePath)(thePath);
+        }
+      } catch {
+      }
+    }
+    dir = path.dirname(dir);
+  }
+  return void 0;
+}
+function invalidatePathCache() {
+  _cachedAllowedDirs = void 0;
+}
+(0, import_rewire.registerCacheInvalidation)(invalidatePathCache);
+// @__NO_SIDE_EFFECTS__
+async function isDir(filepath) {
+  return !!(await /* @__PURE__ */ safeStats(filepath))?.isDirectory();
+}
+// @__NO_SIDE_EFFECTS__
+function isDirSync(filepath) {
+  return !!(/* @__PURE__ */ safeStatsSync(filepath))?.isDirectory();
+}
+// @__NO_SIDE_EFFECTS__
+function isDirEmptySync(dirname, options) {
+  const { ignore = import_globs.defaultIgnore } = {
+    __proto__: null,
+    ...options
+  };
+  const fs = /* @__PURE__ */ getFs();
+  try {
+    const files = fs.readdirSync(dirname);
+    const { length } = files;
+    if (length === 0) {
+      return true;
+    }
+    const matcher = (0, import_globs.getGlobMatcher)(
+      ignore,
+      {
+        cwd: (0, import_normalize.pathLikeToString)(dirname)
+      }
+    );
+    let ignoredCount = 0;
+    for (let i = 0; i < length; i += 1) {
+      const file = files[i];
+      if (file && matcher(file)) {
+        ignoredCount += 1;
+      }
+    }
+    return ignoredCount === length;
+  } catch {
+    return false;
+  }
+}
+// @__NO_SIDE_EFFECTS__
+function isSymLinkSync(filepath) {
+  const fs = /* @__PURE__ */ getFs();
+  try {
+    return fs.lstatSync(filepath).isSymbolicLink();
+  } catch {
+  }
+  return false;
+}
+// @__NO_SIDE_EFFECTS__
+function normalizeEncoding(enc) {
+  return enc == null || enc === "utf8" || enc === "utf-8" ? "utf8" : /* @__PURE__ */ normalizeEncodingSlow(enc);
+}
+// @__NO_SIDE_EFFECTS__
+function normalizeEncodingSlow(enc) {
+  const { length } = enc;
+  if (length === 4) {
+    if (enc === "ucs2" || enc === "UCS2") {
+      return "utf16le";
+    }
+    if (enc.toLowerCase() === "ucs2") {
+      return "utf16le";
+    }
+  } else if (length === 3 && enc === "hex" || enc === "HEX" || enc.toLowerCase() === "hex") {
+    return "hex";
+  } else if (length === 5) {
+    if (enc === "ascii") {
+      return "ascii";
+    }
+    if (enc === "ucs-2") {
+      return "utf16le";
+    }
+    if (enc === "ASCII") {
+      return "ascii";
+    }
+    if (enc === "UCS-2") {
+      return "utf16le";
+    }
+    enc = enc.toLowerCase();
+    if (enc === "ascii") {
+      return "ascii";
+    }
+    if (enc === "ucs-2") {
+      return "utf16le";
+    }
+  } else if (length === 6) {
+    if (enc === "base64") {
+      return "base64";
+    }
+    if (enc === "latin1" || enc === "binary") {
+      return "latin1";
+    }
+    if (enc === "BASE64") {
+      return "base64";
+    }
+    if (enc === "LATIN1" || enc === "BINARY") {
+      return "latin1";
+    }
+    enc = enc.toLowerCase();
+    if (enc === "base64") {
+      return "base64";
+    }
+    if (enc === "latin1" || enc === "binary") {
+      return "latin1";
+    }
+  } else if (length === 7) {
+    if (enc === "utf16le" || enc === "UTF16LE" || enc.toLowerCase() === "utf16le") {
+      return "utf16le";
+    }
+  } else if (length === 8) {
+    if (enc === "utf-16le" || enc === "UTF-16LE" || enc.toLowerCase() === "utf-16le") {
+      return "utf16le";
+    }
+  } else if (length === 9) {
+    if (enc === "base64url" || enc === "BASE64URL" || enc.toLowerCase() === "base64url") {
+      return "base64url";
+    }
+  }
+  return "utf8";
+}
+// @__NO_SIDE_EFFECTS__
+async function readDirNames(dirname, options) {
+  const fs = /* @__PURE__ */ getFs();
+  try {
+    return /* @__PURE__ */ innerReadDirNames(
+      await fs.promises.readdir(dirname, {
+        __proto__: null,
+        encoding: "utf8",
+        withFileTypes: true
+      }),
+      String(dirname),
+      options
+    );
+  } catch {
+  }
+  return [];
+}
+// @__NO_SIDE_EFFECTS__
+function readDirNamesSync(dirname, options) {
+  const fs = /* @__PURE__ */ getFs();
+  try {
+    return /* @__PURE__ */ innerReadDirNames(
+      fs.readdirSync(dirname, {
+        __proto__: null,
+        encoding: "utf8",
+        withFileTypes: true
+      }),
+      String(dirname),
+      options
+    );
+  } catch {
+  }
+  return [];
+}
+// @__NO_SIDE_EFFECTS__
+async function readFileBinary(filepath, options) {
+  const opts = typeof options === "string" ? { encoding: options } : options;
+  const fs = /* @__PURE__ */ getFs();
+  return await fs.promises.readFile(filepath, {
+    signal: abortSignal,
+    ...opts,
+    encoding: null
+  });
+}
+// @__NO_SIDE_EFFECTS__
+async function readFileUtf8(filepath, options) {
+  const opts = typeof options === "string" ? { encoding: options } : options;
+  const fs = /* @__PURE__ */ getFs();
+  return await fs.promises.readFile(filepath, {
+    signal: abortSignal,
+    ...opts,
+    encoding: "utf8"
+  });
+}
+// @__NO_SIDE_EFFECTS__
+function readFileBinarySync(filepath, options) {
+  const opts = typeof options === "string" ? { encoding: options } : options;
+  const fs = /* @__PURE__ */ getFs();
+  return fs.readFileSync(filepath, {
+    ...opts,
+    encoding: null
+  });
+}
+// @__NO_SIDE_EFFECTS__
+function readFileUtf8Sync(filepath, options) {
+  const opts = typeof options === "string" ? { encoding: options } : options;
+  const fs = /* @__PURE__ */ getFs();
+  return fs.readFileSync(filepath, {
+    ...opts,
+    encoding: "utf8"
+  });
+}
+// @__NO_SIDE_EFFECTS__
+async function readJson(filepath, options) {
+  const opts = typeof options === "string" ? { encoding: options } : options;
+  const { reviver, throws, ...fsOptions } = {
+    __proto__: null,
+    ...opts
+  };
+  const shouldThrow = throws === void 0 || !!throws;
+  const fs = /* @__PURE__ */ getFs();
+  let content = "";
+  try {
+    content = await fs.promises.readFile(filepath, {
+      __proto__: null,
+      ...fsOptions,
+      encoding: "utf8"
+    });
+  } catch (e) {
+    if (shouldThrow) {
+      const code = e.code;
+      if (code === "ENOENT") {
+        throw new Error(
+          `JSON file not found: ${filepath}
+Ensure the file exists or create it with the expected structure.`,
+          { cause: e }
+        );
+      }
+      if (code === "EACCES" || code === "EPERM") {
+        throw new Error(
+          `Permission denied reading JSON file: ${filepath}
+Check file permissions or run with appropriate access.`,
+          { cause: e }
+        );
+      }
+      throw e;
+    }
+    return void 0;
+  }
+  return (0, import_parse.jsonParse)(content, {
+    filepath: String(filepath),
+    reviver,
+    throws: shouldThrow
+  });
+}
+// @__NO_SIDE_EFFECTS__
+function readJsonSync(filepath, options) {
+  const opts = typeof options === "string" ? { encoding: options } : options;
+  const { reviver, throws, ...fsOptions } = {
+    __proto__: null,
+    ...opts
+  };
+  const shouldThrow = throws === void 0 || !!throws;
+  const fs = /* @__PURE__ */ getFs();
+  let content = "";
+  try {
+    content = fs.readFileSync(filepath, {
+      __proto__: null,
+      ...fsOptions,
+      encoding: "utf8"
+    });
+  } catch (e) {
+    if (shouldThrow) {
+      const code = e.code;
+      if (code === "ENOENT") {
+        throw new Error(
+          `JSON file not found: ${filepath}
+Ensure the file exists or create it with the expected structure.`,
+          { cause: e }
+        );
+      }
+      if (code === "EACCES" || code === "EPERM") {
+        throw new Error(
+          `Permission denied reading JSON file: ${filepath}
+Check file permissions or run with appropriate access.`,
+          { cause: e }
+        );
+      }
+      throw e;
+    }
+    return void 0;
+  }
+  return (0, import_parse.jsonParse)(content, {
+    filepath: String(filepath),
+    reviver,
+    throws: shouldThrow
+  });
+}
+async function safeDelete(filepath, options) {
+  const opts = { __proto__: null, ...options };
+  const patterns = (0, import_arrays.isArray)(filepath) ? filepath.map(import_normalize.pathLikeToString) : [(0, import_normalize.pathLikeToString)(filepath)];
+  let shouldForce = opts.force !== false;
+  if (!shouldForce && patterns.length > 0) {
+    const path = /* @__PURE__ */ getPath();
+    const allowedDirs = getAllowedDirectories();
+    const allInAllowedDirs = patterns.every((pattern) => {
+      const resolvedPath = path.resolve(pattern);
+      for (const allowedDir of allowedDirs) {
+        const isInAllowedDir = resolvedPath.startsWith(allowedDir + path.sep) || resolvedPath === allowedDir;
+        const relativePath = path.relative(allowedDir, resolvedPath);
+        const isGoingBackward = relativePath.startsWith("..");
+        if (isInAllowedDir && !isGoingBackward) {
+          return true;
+        }
+      }
+      return false;
+    });
+    if (allInAllowedDirs) {
+      shouldForce = true;
+    }
+  }
+  const maxRetries = opts.maxRetries ?? defaultRemoveOptions.maxRetries;
+  const retryDelay = opts.retryDelay ?? defaultRemoveOptions.retryDelay;
+  const del = /* @__PURE__ */ getDel();
+  await (0, import_promises.pRetry)(
+    async () => {
+      await del.deleteAsync(patterns, {
+        dryRun: false,
+        force: shouldForce,
+        onlyFiles: false
+      });
+    },
+    {
+      retries: maxRetries,
+      baseDelayMs: retryDelay,
+      backoffFactor: 2,
+      signal: opts.signal
+    }
+  );
+}
+function safeDeleteSync(filepath, options) {
+  const opts = { __proto__: null, ...options };
+  const patterns = (0, import_arrays.isArray)(filepath) ? filepath.map(import_normalize.pathLikeToString) : [(0, import_normalize.pathLikeToString)(filepath)];
+  let shouldForce = opts.force !== false;
+  if (!shouldForce && patterns.length > 0) {
+    const path = /* @__PURE__ */ getPath();
+    const allowedDirs = getAllowedDirectories();
+    const allInAllowedDirs = patterns.every((pattern) => {
+      const resolvedPath = path.resolve(pattern);
+      for (const allowedDir of allowedDirs) {
+        const isInAllowedDir = resolvedPath.startsWith(allowedDir + path.sep) || resolvedPath === allowedDir;
+        const relativePath = path.relative(allowedDir, resolvedPath);
+        const isGoingBackward = relativePath.startsWith("..");
+        if (isInAllowedDir && !isGoingBackward) {
+          return true;
+        }
+      }
+      return false;
+    });
+    if (allInAllowedDirs) {
+      shouldForce = true;
+    }
+  }
+  const maxRetries = opts.maxRetries ?? defaultRemoveOptions.maxRetries;
+  const retryDelay = opts.retryDelay ?? defaultRemoveOptions.retryDelay;
+  const del = /* @__PURE__ */ getDel();
+  let lastError;
+  let delay = retryDelay;
+  for (let attempt = 0; attempt <= maxRetries; attempt++) {
+    try {
+      del.deleteSync(patterns, {
+        dryRun: false,
+        force: shouldForce,
+        onlyFiles: false
+      });
+      return;
+    } catch (error) {
+      lastError = error;
+      if (attempt < maxRetries) {
+        const waitMs = delay;
+        Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, waitMs);
+        delay *= 2;
+      }
+    }
+  }
+  if (lastError) {
+    throw lastError;
+  }
+}
+async function safeMkdir(path, options) {
+  const fs = /* @__PURE__ */ getFs();
+  const opts = { __proto__: null, recursive: true, ...options };
+  try {
+    await fs.promises.mkdir(path, opts);
+  } catch (e) {
+    if (typeof e === "object" && e !== null && "code" in e && e.code !== "EEXIST") {
+      throw e;
+    }
+  }
+}
+function safeMkdirSync(path, options) {
+  const fs = /* @__PURE__ */ getFs();
+  const opts = { __proto__: null, recursive: true, ...options };
+  try {
+    fs.mkdirSync(path, opts);
+  } catch (e) {
+    if (typeof e === "object" && e !== null && "code" in e && e.code !== "EEXIST") {
+      throw e;
+    }
+  }
+}
+// @__NO_SIDE_EFFECTS__
+async function safeReadFile(filepath, options) {
+  const opts = typeof options === "string" ? { __proto__: null, encoding: options } : { __proto__: null, ...options };
+  const { defaultValue, ...rawReadOpts } = opts;
+  const readOpts = { __proto__: null, ...rawReadOpts };
+  const shouldReturnBuffer = readOpts.encoding === null;
+  const encoding = shouldReturnBuffer ? null : /* @__PURE__ */ normalizeEncoding(readOpts.encoding);
+  const fs = /* @__PURE__ */ getFs();
+  try {
+    return await fs.promises.readFile(filepath, {
+      __proto__: null,
+      signal: abortSignal,
+      ...readOpts,
+      encoding
+    });
+  } catch {
+  }
+  if (defaultValue === void 0) {
+    return void 0;
+  }
+  if (shouldReturnBuffer) {
+    const { Buffer: Buffer2 } = /* @__PURE__ */ getBuffer();
+    return Buffer2.isBuffer(defaultValue) ? defaultValue : void 0;
+  }
+  return typeof defaultValue === "string" ? defaultValue : String(defaultValue);
+}
+// @__NO_SIDE_EFFECTS__
+function safeReadFileSync(filepath, options) {
+  const opts = typeof options === "string" ? { __proto__: null, encoding: options } : { __proto__: null, ...options };
+  const { defaultValue, ...rawReadOpts } = opts;
+  const readOpts = { __proto__: null, ...rawReadOpts };
+  const shouldReturnBuffer = readOpts.encoding === null;
+  const encoding = shouldReturnBuffer ? null : /* @__PURE__ */ normalizeEncoding(readOpts.encoding);
+  const fs = /* @__PURE__ */ getFs();
+  try {
+    return fs.readFileSync(filepath, {
+      __proto__: null,
+      ...readOpts,
+      encoding
+    });
+  } catch {
+  }
+  if (defaultValue === void 0) {
+    return void 0;
+  }
+  if (shouldReturnBuffer) {
+    const { Buffer: Buffer2 } = /* @__PURE__ */ getBuffer();
+    return Buffer2.isBuffer(defaultValue) ? defaultValue : void 0;
+  }
+  return typeof defaultValue === "string" ? defaultValue : String(defaultValue);
+}
+// @__NO_SIDE_EFFECTS__
+async function safeStats(filepath) {
+  const fs = /* @__PURE__ */ getFs();
+  try {
+    return await fs.promises.stat(filepath);
+  } catch {
+  }
+  return void 0;
+}
+// @__NO_SIDE_EFFECTS__
+function safeStatsSync(filepath, options) {
+  const opts = typeof options === "string" ? { encoding: options } : options;
+  const fs = /* @__PURE__ */ getFs();
+  try {
+    return fs.statSync(filepath, {
+      __proto__: null,
+      throwIfNoEntry: false,
+      ...opts
+    });
+  } catch {
+  }
+  return void 0;
+}
+// @__NO_SIDE_EFFECTS__
+function uniqueSync(filepath) {
+  const fs = /* @__PURE__ */ getFs();
+  const path = /* @__PURE__ */ getPath();
+  const filepathStr = String(filepath);
+  if (!fs.existsSync(filepathStr)) {
+    return (0, import_normalize.normalizePath)(filepathStr);
+  }
+  const dirname = path.dirname(filepathStr);
+  const ext = path.extname(filepathStr);
+  const basename = path.basename(filepathStr, ext);
+  let counter = 1;
+  let uniquePath;
+  do {
+    uniquePath = path.join(dirname, `${basename}-${counter}${ext}`);
+    counter++;
+  } while (fs.existsSync(uniquePath));
+  return (0, import_normalize.normalizePath)(uniquePath);
+}
+// @__NO_SIDE_EFFECTS__
+function validateFiles(filepaths) {
+  const fs = /* @__PURE__ */ getFs();
+  const validPaths = [];
+  const invalidPaths = [];
+  const { R_OK } = fs.constants;
+  for (const filepath of filepaths) {
+    try {
+      fs.accessSync(filepath, R_OK);
+      validPaths.push(filepath);
+    } catch {
+      invalidPaths.push(filepath);
+    }
+  }
+  return { __proto__: null, validPaths, invalidPaths };
+}
+async function writeJson(filepath, jsonContent, options) {
+  const opts = typeof options === "string" ? { encoding: options } : options;
+  const { EOL, finalEOL, replacer, spaces, ...fsOptions } = {
+    __proto__: null,
+    ...opts
+  };
+  const fs = /* @__PURE__ */ getFs();
+  const jsonString = /* @__PURE__ */ stringify(
+    jsonContent,
+    EOL || "\n",
+    finalEOL !== void 0 ? finalEOL : true,
+    replacer,
+    spaces
+  );
+  await fs.promises.writeFile(filepath, jsonString, {
+    encoding: "utf8",
+    ...fsOptions,
+    __proto__: null
+  });
+}
+function writeJsonSync(filepath, jsonContent, options) {
+  const opts = typeof options === "string" ? { encoding: options } : options;
+  const { EOL, finalEOL, replacer, spaces, ...fsOptions } = {
+    __proto__: null,
+    ...opts
+  };
+  const fs = /* @__PURE__ */ getFs();
+  const jsonString = /* @__PURE__ */ stringify(
+    jsonContent,
+    EOL || "\n",
+    finalEOL !== void 0 ? finalEOL : true,
+    replacer,
+    spaces
+  );
+  fs.writeFileSync(filepath, jsonString, {
+    encoding: "utf8",
+    ...fsOptions,
+    __proto__: null
+  });
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  findUp,
+  findUpSync,
+  invalidatePathCache,
+  isDir,
+  isDirEmptySync,
+  isDirSync,
+  isSymLinkSync,
+  normalizeEncoding,
+  normalizeEncodingSlow,
+  readDirNames,
+  readDirNamesSync,
+  readFileBinary,
+  readFileBinarySync,
+  readFileUtf8,
+  readFileUtf8Sync,
+  readJson,
+  readJsonSync,
+  safeDelete,
+  safeDeleteSync,
+  safeMkdir,
+  safeMkdirSync,
+  safeReadFile,
+  safeReadFileSync,
+  safeStats,
+  safeStatsSync,
+  uniqueSync,
+  validateFiles,
+  writeJson,
+  writeJsonSync
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/functions.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/functions.d.ts
new file mode 100644
index 00000000..1cbf892b
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/functions.d.ts
@@ -0,0 +1,57 @@
+/**
+ * @fileoverview Common function utilities for control flow and caching.
+ * Provides noop, once, and other foundational function helpers.
+ */
+// Type definitions
+export type AsyncFunction = (...args: TArgs) => Promise;
+export type AnyFunction = (...args: unknown[]) => unknown;
+/**
+ * A no-op function that does nothing.
+ *
+ * @example
+ * ```typescript
+ * const callback = noop
+ * callback()  // does nothing
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function noop(): void;
+/**
+ * Create a function that only executes once.
+ *
+ * @example
+ * ```typescript
+ * const init = once(() => Math.random())
+ * init()  // 0.456 (random value)
+ * init()  // 0.456 (same value, not recalculated)
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function once(fn: T): T;
+/**
+ * Wrap an async function to silently catch and ignore errors.
+ *
+ * @example
+ * ```typescript
+ * const safeFetch = silentWrapAsync(async (url: string) => {
+ *   const res = await fetch(url)
+ *   return res.json()
+ * })
+ * await safeFetch('https://example.com')  // result or undefined on error
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function silentWrapAsync(fn: AsyncFunction): (...args: TArgs) => Promise;
+/**
+ * Execute a function with tail call optimization via trampoline.
+ *
+ * @example
+ * ```typescript
+ * const factorial = trampoline((n: number, acc = 1): any =>
+ *   n <= 1 ? acc : () => factorial(n - 1, n * acc)
+ * )
+ * factorial(5)  // 120
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function trampoline(fn: T): T;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/functions.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/functions.js
new file mode 100644
index 00000000..90c4890c
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/functions.js
@@ -0,0 +1,70 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var functions_exports = {};
+__export(functions_exports, {
+  noop: () => noop,
+  once: () => once,
+  silentWrapAsync: () => silentWrapAsync,
+  trampoline: () => trampoline
+});
+module.exports = __toCommonJS(functions_exports);
+// @__NO_SIDE_EFFECTS__
+function noop() {
+}
+// @__NO_SIDE_EFFECTS__
+function once(fn) {
+  let called = false;
+  let result;
+  return function(...args) {
+    if (!called) {
+      called = true;
+      result = fn.apply(this, args);
+    }
+    return result;
+  };
+}
+// @__NO_SIDE_EFFECTS__
+function silentWrapAsync(fn) {
+  return async (...args) => {
+    try {
+      const result = await fn(...args);
+      return result === null ? void 0 : result;
+    } catch {
+    }
+    return void 0;
+  };
+}
+// @__NO_SIDE_EFFECTS__
+function trampoline(fn) {
+  return function(...args) {
+    let result = fn.apply(this, args);
+    while (typeof result === "function") {
+      result = result();
+    }
+    return result;
+  };
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  noop,
+  once,
+  silentWrapAsync,
+  trampoline
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/git.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/git.d.ts
new file mode 100644
index 00000000..0744d178
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/git.d.ts
@@ -0,0 +1,540 @@
+/**
+ * Options for git diff operations.
+ *
+ * Controls how git diff results are processed and returned.
+ *
+ * @example
+ * ```typescript
+ * // Get absolute file paths
+ * const files = await getChangedFiles({ absolute: true })
+ * // => ['/path/to/repo/src/file.ts']
+ *
+ * // Get relative paths with caching disabled
+ * const files = await getChangedFiles({ cache: false })
+ * // => ['src/file.ts']
+ *
+ * // Get files from specific directory
+ * const files = await getChangedFiles({ cwd: '/path/to/repo/src' })
+ * ```
+ */
+export interface GitDiffOptions {
+    /**
+     * Return absolute file paths instead of relative paths.
+     *
+     * @default false
+     */
+    absolute?: boolean | undefined;
+    /**
+     * Return results as a `Set` instead of an array.
+     *
+     * @default false
+     */
+    asSet?: boolean | undefined;
+    /**
+     * Cache git diff results to avoid repeated git subprocess calls.
+     *
+     * Caching is keyed by the git command and options used, so different
+     * option combinations maintain separate cache entries.
+     *
+     * @default true
+     */
+    cache?: boolean | undefined;
+    /**
+     * Working directory for git operations.
+     *
+     * Git operations will be run from this directory, and returned paths
+     * will be relative to the git repository root. Symlinks are resolved
+     * using `fs.realpathSync()`.
+     *
+     * @default process.cwd()
+     */
+    cwd?: string | undefined;
+    /**
+     * Parse git porcelain format output (status codes like `M`, `A`, `??`).
+     *
+     * When `true`, strips the two-character status code and space from the
+     * beginning of each line. Automatically enabled for `getChangedFiles()`.
+     *
+     * @default false
+     */
+    porcelain?: boolean | undefined;
+    /**
+     * Additional options passed to glob matcher.
+     *
+     * Supports options like `dot`, `ignore`, `nocase` for filtering results.
+     */
+    [key: string]: unknown;
+}
+/**
+ * Options for filtering packages by git changes.
+ *
+ * Used to determine which packages in a monorepo have changed files.
+ *
+ * @example
+ * ```typescript
+ * // Filter packages with changes
+ * const changed = filterPackagesByChanges(packages)
+ *
+ * // Force include all packages
+ * const all = filterPackagesByChanges(packages, { force: true })
+ *
+ * // Use custom package key
+ * const changed = filterPackagesByChanges(
+ *   packages,
+ *   { packageKey: 'directory' }
+ * )
+ * ```
+ */
+export interface FilterPackagesByChangesOptions {
+    /**
+     * Force include all packages regardless of changes.
+     *
+     * @default false
+     */
+    force?: boolean | undefined;
+    /**
+     * Key to access package path in package objects.
+     *
+     * @default 'path'
+     */
+    packageKey?: string | undefined;
+    /**
+     * Additional options for filtering.
+     */
+    [key: string]: unknown;
+}
+/**
+ * Find git repository root by walking up from the given directory.
+ *
+ * Searches for a `.git` directory or file by traversing parent directories
+ * upward until found or filesystem root is reached. Returns the original path
+ * if no git repository is found.
+ *
+ * This function is exported primarily for testing purposes.
+ *
+ * @param startPath - Directory path to start searching from.
+ * @returns Git repository root path, or `startPath` if not found.
+ *
+ * @example
+ * ```typescript
+ * const root = findGitRoot('/path/to/repo/src/subdir')
+ * // => '/path/to/repo'
+ *
+ * const notFound = findGitRoot('/not/a/repo')
+ * // => '/not/a/repo'
+ * ```
+ */
+export declare function findGitRoot(startPath: string): string;
+/**
+ * Get all changed files including staged, unstaged, and untracked files.
+ *
+ * Uses `git status --porcelain` which returns the full working tree status
+ * with status codes:
+ * - `M` - Modified
+ * - `A` - Added
+ * - `D` - Deleted
+ * - `??` - Untracked
+ * - `R` - Renamed
+ * - `C` - Copied
+ *
+ * This is the most comprehensive check - captures everything that differs
+ * from the last commit, including:
+ * - Files modified and staged with `git add`
+ * - Files modified but not staged
+ * - New files not yet tracked by git
+ *
+ * Status codes are automatically stripped from the output.
+ *
+ * @param options - Options controlling path format and filtering.
+ * @returns Promise resolving to array of changed file paths.
+ *
+ * @example
+ * ```typescript
+ * // Get all changed files as relative paths
+ * const files = await getChangedFiles()
+ * // => ['src/foo.ts', 'src/bar.ts', 'newfile.ts']
+ *
+ * // Get absolute paths
+ * const files = await getChangedFiles({ absolute: true })
+ * // => ['/path/to/repo/src/foo.ts', ...]
+ *
+ * // Get changed files in specific directory
+ * const files = await getChangedFiles({ cwd: '/path/to/repo/src' })
+ * // => ['foo.ts', 'bar.ts']
+ * ```
+ */
+export declare function getChangedFiles(options?: GitDiffOptions | undefined): Promise;
+/**
+ * Get all changed files including staged, unstaged, and untracked files.
+ *
+ * Synchronous version of `getChangedFiles()`. Uses `git status --porcelain`
+ * which returns the full working tree status with status codes:
+ * - `M` - Modified
+ * - `A` - Added
+ * - `D` - Deleted
+ * - `??` - Untracked
+ * - `R` - Renamed
+ * - `C` - Copied
+ *
+ * This is the most comprehensive check - captures everything that differs
+ * from the last commit, including:
+ * - Files modified and staged with `git add`
+ * - Files modified but not staged
+ * - New files not yet tracked by git
+ *
+ * Status codes are automatically stripped from the output.
+ *
+ * @param options - Options controlling path format and filtering.
+ * @returns Array of changed file paths.
+ *
+ * @example
+ * ```typescript
+ * // Get all changed files as relative paths
+ * const files = getChangedFilesSync()
+ * // => ['src/foo.ts', 'src/bar.ts', 'newfile.ts']
+ *
+ * // Get absolute paths
+ * const files = getChangedFilesSync({ absolute: true })
+ * // => ['/path/to/repo/src/foo.ts', ...]
+ *
+ * // Get changed files in specific directory
+ * const files = getChangedFilesSync({ cwd: '/path/to/repo/src' })
+ * // => ['foo.ts', 'bar.ts']
+ * ```
+ */
+export declare function getChangedFilesSync(options?: GitDiffOptions | undefined): string[];
+/**
+ * Get unstaged modified files (changes not yet staged for commit).
+ *
+ * Uses `git diff --name-only` which returns only unstaged modifications
+ * to tracked files. Does NOT include:
+ * - Untracked files (new files not added to git)
+ * - Staged changes (files added with `git add`)
+ *
+ * This is a focused check for uncommitted changes to existing tracked files.
+ * Useful for detecting work-in-progress modifications before staging.
+ *
+ * @param options - Options controlling path format and filtering.
+ * @returns Promise resolving to array of unstaged file paths.
+ *
+ * @example
+ * ```typescript
+ * // Get unstaged files
+ * const files = await getUnstagedFiles()
+ * // => ['src/foo.ts', 'src/bar.ts']
+ *
+ * // After staging some files
+ * await spawn('git', ['add', 'src/foo.ts'])
+ * const files = await getUnstagedFiles()
+ * // => ['src/bar.ts'] (foo.ts no longer included)
+ *
+ * // Get absolute paths
+ * const files = await getUnstagedFiles({ absolute: true })
+ * // => ['/path/to/repo/src/bar.ts']
+ * ```
+ */
+export declare function getUnstagedFiles(options?: GitDiffOptions | undefined): Promise;
+/**
+ * Get unstaged modified files (changes not yet staged for commit).
+ *
+ * Synchronous version of `getUnstagedFiles()`. Uses `git diff --name-only`
+ * which returns only unstaged modifications to tracked files. Does NOT include:
+ * - Untracked files (new files not added to git)
+ * - Staged changes (files added with `git add`)
+ *
+ * This is a focused check for uncommitted changes to existing tracked files.
+ * Useful for detecting work-in-progress modifications before staging.
+ *
+ * @param options - Options controlling path format and filtering.
+ * @returns Array of unstaged file paths.
+ *
+ * @example
+ * ```typescript
+ * // Get unstaged files
+ * const files = getUnstagedFilesSync()
+ * // => ['src/foo.ts', 'src/bar.ts']
+ *
+ * // After staging some files
+ * spawnSync('git', ['add', 'src/foo.ts'])
+ * const files = getUnstagedFilesSync()
+ * // => ['src/bar.ts'] (foo.ts no longer included)
+ *
+ * // Get absolute paths
+ * const files = getUnstagedFilesSync({ absolute: true })
+ * // => ['/path/to/repo/src/bar.ts']
+ * ```
+ */
+export declare function getUnstagedFilesSync(options?: GitDiffOptions | undefined): string[];
+/**
+ * Get staged files ready for commit (changes added with `git add`).
+ *
+ * Uses `git diff --cached --name-only` which returns only staged changes.
+ * Does NOT include:
+ * - Unstaged modifications (changes not added with `git add`)
+ * - Untracked files (new files not added to git)
+ *
+ * This is a focused check for what will be included in the next commit.
+ * Useful for validating changes before committing or running pre-commit hooks.
+ *
+ * @param options - Options controlling path format and filtering.
+ * @returns Promise resolving to array of staged file paths.
+ *
+ * @example
+ * ```typescript
+ * // Get currently staged files
+ * const files = await getStagedFiles()
+ * // => ['src/foo.ts']
+ *
+ * // Stage more files
+ * await spawn('git', ['add', 'src/bar.ts'])
+ * const files = await getStagedFiles()
+ * // => ['src/foo.ts', 'src/bar.ts']
+ *
+ * // Get absolute paths
+ * const files = await getStagedFiles({ absolute: true })
+ * // => ['/path/to/repo/src/foo.ts', ...]
+ * ```
+ */
+export declare function getStagedFiles(options?: GitDiffOptions | undefined): Promise;
+/**
+ * Get staged files ready for commit (changes added with `git add`).
+ *
+ * Synchronous version of `getStagedFiles()`. Uses `git diff --cached --name-only`
+ * which returns only staged changes. Does NOT include:
+ * - Unstaged modifications (changes not added with `git add`)
+ * - Untracked files (new files not added to git)
+ *
+ * This is a focused check for what will be included in the next commit.
+ * Useful for validating changes before committing or running pre-commit hooks.
+ *
+ * @param options - Options controlling path format and filtering.
+ * @returns Array of staged file paths.
+ *
+ * @example
+ * ```typescript
+ * // Get currently staged files
+ * const files = getStagedFilesSync()
+ * // => ['src/foo.ts']
+ *
+ * // Stage more files
+ * spawnSync('git', ['add', 'src/bar.ts'])
+ * const files = getStagedFilesSync()
+ * // => ['src/foo.ts', 'src/bar.ts']
+ *
+ * // Get absolute paths
+ * const files = getStagedFilesSync({ absolute: true })
+ * // => ['/path/to/repo/src/foo.ts', ...]
+ * ```
+ */
+export declare function getStagedFilesSync(options?: GitDiffOptions | undefined): string[];
+/**
+ * Check if a file or directory has any git changes.
+ *
+ * Checks if the given pathname has any changes including:
+ * - Staged modifications (added with `git add`)
+ * - Unstaged modifications (not yet staged)
+ * - Untracked status (new file/directory not in git)
+ *
+ * For directories, returns `true` if ANY file within the directory has changes.
+ *
+ * Symlinks in the pathname and cwd are automatically resolved using
+ * `fs.realpathSync()` before comparison.
+ *
+ * @param pathname - File or directory path to check.
+ * @param options - Options for the git status check.
+ * @returns Promise resolving to `true` if path has any changes, `false` otherwise.
+ *
+ * @example
+ * ```typescript
+ * // Check if file is changed
+ * const changed = await isChanged('src/foo.ts')
+ * // => true
+ *
+ * // Check if directory has any changes
+ * const changed = await isChanged('src/')
+ * // => true (if any file in src/ is changed)
+ *
+ * // Check from different cwd
+ * const changed = await isChanged(
+ *   '/path/to/repo/src/foo.ts',
+ *   { cwd: '/path/to/repo' }
+ * )
+ * ```
+ */
+export declare function isChanged(pathname: string, options?: GitDiffOptions | undefined): Promise;
+/**
+ * Check if a file or directory has any git changes.
+ *
+ * Synchronous version of `isChanged()`. Checks if the given pathname has
+ * any changes including:
+ * - Staged modifications (added with `git add`)
+ * - Unstaged modifications (not yet staged)
+ * - Untracked status (new file/directory not in git)
+ *
+ * For directories, returns `true` if ANY file within the directory has changes.
+ *
+ * Symlinks in the pathname and cwd are automatically resolved using
+ * `fs.realpathSync()` before comparison.
+ *
+ * @param pathname - File or directory path to check.
+ * @param options - Options for the git status check.
+ * @returns `true` if path has any changes, `false` otherwise.
+ *
+ * @example
+ * ```typescript
+ * // Check if file is changed
+ * const changed = isChangedSync('src/foo.ts')
+ * // => true
+ *
+ * // Check if directory has any changes
+ * const changed = isChangedSync('src/')
+ * // => true (if any file in src/ is changed)
+ *
+ * // Check from different cwd
+ * const changed = isChangedSync(
+ *   '/path/to/repo/src/foo.ts',
+ *   { cwd: '/path/to/repo' }
+ * )
+ * ```
+ */
+export declare function isChangedSync(pathname: string, options?: GitDiffOptions | undefined): boolean;
+/**
+ * Check if a file or directory has unstaged changes.
+ *
+ * Checks if the given pathname has modifications that are not yet staged
+ * for commit (changes not added with `git add`). Does NOT include:
+ * - Staged changes (already added with `git add`)
+ * - Untracked files (new files not in git)
+ *
+ * For directories, returns `true` if ANY file within the directory has
+ * unstaged changes.
+ *
+ * Symlinks in the pathname and cwd are automatically resolved using
+ * `fs.realpathSync()` before comparison.
+ *
+ * @param pathname - File or directory path to check.
+ * @param options - Options for the git diff check.
+ * @returns Promise resolving to `true` if path has unstaged changes, `false` otherwise.
+ *
+ * @example
+ * ```typescript
+ * // Check if file has unstaged changes
+ * const unstaged = await isUnstaged('src/foo.ts')
+ * // => true
+ *
+ * // After staging the file
+ * await spawn('git', ['add', 'src/foo.ts'])
+ * const unstaged = await isUnstaged('src/foo.ts')
+ * // => false
+ *
+ * // Check directory
+ * const unstaged = await isUnstaged('src/')
+ * // => true (if any file in src/ has unstaged changes)
+ * ```
+ */
+export declare function isUnstaged(pathname: string, options?: GitDiffOptions | undefined): Promise;
+/**
+ * Check if a file or directory has unstaged changes.
+ *
+ * Synchronous version of `isUnstaged()`. Checks if the given pathname has
+ * modifications that are not yet staged for commit (changes not added with
+ * `git add`). Does NOT include:
+ * - Staged changes (already added with `git add`)
+ * - Untracked files (new files not in git)
+ *
+ * For directories, returns `true` if ANY file within the directory has
+ * unstaged changes.
+ *
+ * Symlinks in the pathname and cwd are automatically resolved using
+ * `fs.realpathSync()` before comparison.
+ *
+ * @param pathname - File or directory path to check.
+ * @param options - Options for the git diff check.
+ * @returns `true` if path has unstaged changes, `false` otherwise.
+ *
+ * @example
+ * ```typescript
+ * // Check if file has unstaged changes
+ * const unstaged = isUnstagedSync('src/foo.ts')
+ * // => true
+ *
+ * // After staging the file
+ * spawnSync('git', ['add', 'src/foo.ts'])
+ * const unstaged = isUnstagedSync('src/foo.ts')
+ * // => false
+ *
+ * // Check directory
+ * const unstaged = isUnstagedSync('src/')
+ * // => true (if any file in src/ has unstaged changes)
+ * ```
+ */
+export declare function isUnstagedSync(pathname: string, options?: GitDiffOptions | undefined): boolean;
+/**
+ * Check if a file or directory is staged for commit.
+ *
+ * Checks if the given pathname has changes staged with `git add` that will
+ * be included in the next commit. Does NOT include:
+ * - Unstaged modifications (changes not added with `git add`)
+ * - Untracked files (new files not in git)
+ *
+ * For directories, returns `true` if ANY file within the directory is staged.
+ *
+ * Symlinks in the pathname and cwd are automatically resolved using
+ * `fs.realpathSync()` before comparison.
+ *
+ * @param pathname - File or directory path to check.
+ * @param options - Options for the git diff check.
+ * @returns Promise resolving to `true` if path is staged, `false` otherwise.
+ *
+ * @example
+ * ```typescript
+ * // Check if file is staged
+ * const staged = await isStaged('src/foo.ts')
+ * // => false
+ *
+ * // Stage the file
+ * await spawn('git', ['add', 'src/foo.ts'])
+ * const staged = await isStaged('src/foo.ts')
+ * // => true
+ *
+ * // Check directory
+ * const staged = await isStaged('src/')
+ * // => true (if any file in src/ is staged)
+ * ```
+ */
+export declare function isStaged(pathname: string, options?: GitDiffOptions | undefined): Promise;
+/**
+ * Check if a file or directory is staged for commit.
+ *
+ * Synchronous version of `isStaged()`. Checks if the given pathname has
+ * changes staged with `git add` that will be included in the next commit.
+ * Does NOT include:
+ * - Unstaged modifications (changes not added with `git add`)
+ * - Untracked files (new files not in git)
+ *
+ * For directories, returns `true` if ANY file within the directory is staged.
+ *
+ * Symlinks in the pathname and cwd are automatically resolved using
+ * `fs.realpathSync()` before comparison.
+ *
+ * @param pathname - File or directory path to check.
+ * @param options - Options for the git diff check.
+ * @returns `true` if path is staged, `false` otherwise.
+ *
+ * @example
+ * ```typescript
+ * // Check if file is staged
+ * const staged = isStagedSync('src/foo.ts')
+ * // => false
+ *
+ * // Stage the file
+ * spawnSync('git', ['add', 'src/foo.ts'])
+ * const staged = isStagedSync('src/foo.ts')
+ * // => true
+ *
+ * // Check directory
+ * const staged = isStagedSync('src/')
+ * // => true (if any file in src/ is staged)
+ * ```
+ */
+export declare function isStagedSync(pathname: string, options?: GitDiffOptions | undefined): boolean;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/git.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/git.js
new file mode 100644
index 00000000..d672ba61
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/git.js
@@ -0,0 +1,382 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var git_exports = {};
+__export(git_exports, {
+  findGitRoot: () => findGitRoot,
+  getChangedFiles: () => getChangedFiles,
+  getChangedFilesSync: () => getChangedFilesSync,
+  getStagedFiles: () => getStagedFiles,
+  getStagedFilesSync: () => getStagedFilesSync,
+  getUnstagedFiles: () => getUnstagedFiles,
+  getUnstagedFilesSync: () => getUnstagedFilesSync,
+  isChanged: () => isChanged,
+  isChangedSync: () => isChangedSync,
+  isStaged: () => isStaged,
+  isStagedSync: () => isStagedSync,
+  isUnstaged: () => isUnstaged,
+  isUnstagedSync: () => isUnstagedSync
+});
+module.exports = __toCommonJS(git_exports);
+var import_node_process = __toESM(require("node:process"));
+var import_bin = require("./bin");
+var import_debug = require("./debug");
+var import_globs = require("./globs");
+var import_normalize = require("./paths/normalize");
+var import_spawn = require("./spawn");
+var import_strings = require("./strings");
+let _fs;
+// @__NO_SIDE_EFFECTS__
+function getFs() {
+  if (_fs === void 0) {
+    _fs = require("fs");
+  }
+  return _fs;
+}
+let _path;
+// @__NO_SIDE_EFFECTS__
+function getPath() {
+  if (_path === void 0) {
+    _path = require("path");
+  }
+  return _path;
+}
+const gitDiffCache = /* @__PURE__ */ new Map();
+const gitDiffAccessOrder = [];
+const GIT_CACHE_MAX_SIZE = 100;
+function evictLRUGitCache() {
+  if (gitDiffCache.size >= GIT_CACHE_MAX_SIZE && gitDiffAccessOrder.length > 0) {
+    const oldest = gitDiffAccessOrder.shift();
+    if (oldest) {
+      gitDiffCache.delete(oldest);
+    }
+  }
+}
+let _gitPath;
+const realpathCache = /* @__PURE__ */ new Map();
+const gitRootCache = /* @__PURE__ */ new Map();
+function getCachedRealpath(pathname) {
+  const fs = /* @__PURE__ */ getFs();
+  const cached = realpathCache.get(pathname);
+  if (cached) {
+    if (fs.existsSync(cached)) {
+      return cached;
+    }
+    realpathCache.delete(pathname);
+  }
+  const resolved = fs.realpathSync(pathname);
+  realpathCache.set(pathname, resolved);
+  return resolved;
+}
+function getGitPath() {
+  if (_gitPath === void 0) {
+    const resolved = (0, import_bin.whichSync)("git", { nothrow: true });
+    _gitPath = typeof resolved === "string" ? resolved : "git";
+  }
+  return _gitPath;
+}
+function getCwd() {
+  return (/* @__PURE__ */ getFs()).realpathSync(import_node_process.default.cwd());
+}
+function getGitDiffSpawnArgs(cwd) {
+  const resolvedCwd = cwd ? (/* @__PURE__ */ getFs()).realpathSync(cwd) : getCwd();
+  return {
+    all: [
+      getGitPath(),
+      ["status", "--porcelain"],
+      {
+        cwd: resolvedCwd
+      }
+    ],
+    unstaged: [
+      getGitPath(),
+      ["diff", "--name-only"],
+      {
+        cwd: resolvedCwd
+      }
+    ],
+    staged: [
+      getGitPath(),
+      ["diff", "--cached", "--name-only"],
+      {
+        cwd: resolvedCwd
+      }
+    ]
+  };
+}
+async function innerDiff(args, options) {
+  const { cache = true, ...parseOptions } = { __proto__: null, ...options };
+  const cacheKey = cache ? JSON.stringify({ args, parseOptions }) : void 0;
+  if (cache && cacheKey) {
+    const result2 = gitDiffCache.get(cacheKey);
+    if (result2) {
+      return result2;
+    }
+  }
+  let result;
+  try {
+    const spawnResult = await (0, import_spawn.spawn)(args[0], args[1], {
+      ...args[2],
+      stdioString: false
+    });
+    const stdout = Buffer.isBuffer(spawnResult.stdout) ? spawnResult.stdout.toString("utf8") : String(spawnResult.stdout);
+    const spawnCwd = typeof args[2]["cwd"] === "string" ? args[2]["cwd"] : void 0;
+    result = parseGitDiffStdout(stdout, parseOptions, spawnCwd);
+  } catch (e) {
+    (0, import_debug.debugNs)(
+      "git",
+      `Git command failed (${args[0]} ${args[1].join(" ")}): ${e.message}`
+    );
+    return [];
+  }
+  if (cache && cacheKey) {
+    evictLRUGitCache();
+    gitDiffCache.set(cacheKey, result);
+    gitDiffAccessOrder.push(cacheKey);
+  }
+  return result;
+}
+function innerDiffSync(args, options) {
+  const { cache = true, ...parseOptions } = { __proto__: null, ...options };
+  const cacheKey = cache ? JSON.stringify({ args, parseOptions }) : void 0;
+  if (cache && cacheKey) {
+    const result2 = gitDiffCache.get(cacheKey);
+    if (result2) {
+      return result2;
+    }
+  }
+  let result;
+  try {
+    const spawnResult = (0, import_spawn.spawnSync)(args[0], args[1], {
+      ...args[2],
+      stdioString: false
+    });
+    const stdout = Buffer.isBuffer(spawnResult.stdout) ? spawnResult.stdout.toString("utf8") : String(spawnResult.stdout);
+    const spawnCwd = typeof args[2]["cwd"] === "string" ? args[2]["cwd"] : void 0;
+    result = parseGitDiffStdout(stdout, parseOptions, spawnCwd);
+  } catch (e) {
+    (0, import_debug.debugNs)(
+      "git",
+      `Git command failed (${args[0]} ${args[1].join(" ")}): ${e.message}`
+    );
+    return [];
+  }
+  if (cache && cacheKey) {
+    evictLRUGitCache();
+    gitDiffCache.set(cacheKey, result);
+    gitDiffAccessOrder.push(cacheKey);
+  }
+  return result;
+}
+function findGitRoot(startPath) {
+  const fs = /* @__PURE__ */ getFs();
+  const path = /* @__PURE__ */ getPath();
+  const cached = gitRootCache.get(startPath);
+  if (cached) {
+    if (fs.existsSync(path.join(cached, ".git"))) {
+      return cached;
+    }
+    gitRootCache.delete(startPath);
+  }
+  let currentPath = startPath;
+  while (true) {
+    try {
+      const gitPath = path.join(currentPath, ".git");
+      if (fs.existsSync(gitPath)) {
+        gitRootCache.set(startPath, currentPath);
+        return currentPath;
+      }
+    } catch {
+    }
+    const parentPath = path.dirname(currentPath);
+    if (parentPath === currentPath) {
+      return startPath;
+    }
+    currentPath = parentPath;
+  }
+}
+function parseGitDiffStdout(stdout, options, spawnCwd) {
+  const defaultRoot = spawnCwd ? findGitRoot(spawnCwd) : getCwd();
+  const {
+    absolute = false,
+    cwd: cwdOption = defaultRoot,
+    porcelain = false,
+    ...matcherOptions
+  } = { __proto__: null, ...options };
+  const path = /* @__PURE__ */ getPath();
+  const cwd = cwdOption === defaultRoot ? defaultRoot : getCachedRealpath(cwdOption);
+  const rootPath = defaultRoot;
+  let rawFiles = stdout ? (0, import_strings.stripAnsi)(stdout).split("\n").map((line) => line.trimEnd()).filter((line) => line) : [];
+  if (porcelain) {
+    rawFiles = rawFiles.map((line) => {
+      return line.length > 3 ? line.substring(3) : line;
+    });
+  }
+  const files = absolute ? rawFiles.map((relPath2) => (0, import_normalize.normalizePath)(path.join(rootPath, relPath2))) : rawFiles.map((relPath2) => (0, import_normalize.normalizePath)(relPath2));
+  if (cwd === rootPath) {
+    return files;
+  }
+  const relPath = (0, import_normalize.normalizePath)(path.relative(rootPath, cwd));
+  const matcher = (0, import_globs.getGlobMatcher)([`${relPath}/**`], {
+    ...matcherOptions,
+    absolute,
+    cwd: rootPath
+  });
+  const filtered = [];
+  for (const filepath of files) {
+    if (matcher(filepath)) {
+      filtered.push(filepath);
+    }
+  }
+  return filtered;
+}
+async function getChangedFiles(options) {
+  const args = getGitDiffSpawnArgs(options?.cwd).all;
+  return await innerDiff(args, {
+    __proto__: null,
+    ...options,
+    porcelain: true
+  });
+}
+function getChangedFilesSync(options) {
+  const args = getGitDiffSpawnArgs(options?.cwd).all;
+  return innerDiffSync(args, {
+    __proto__: null,
+    ...options,
+    porcelain: true
+  });
+}
+async function getUnstagedFiles(options) {
+  const args = getGitDiffSpawnArgs(options?.cwd).unstaged;
+  return await innerDiff(args, options);
+}
+function getUnstagedFilesSync(options) {
+  const args = getGitDiffSpawnArgs(options?.cwd).unstaged;
+  return innerDiffSync(args, options);
+}
+async function getStagedFiles(options) {
+  const args = getGitDiffSpawnArgs(options?.cwd).staged;
+  return await innerDiff(args, options);
+}
+function getStagedFilesSync(options) {
+  const args = getGitDiffSpawnArgs(options?.cwd).staged;
+  return innerDiffSync(args, options);
+}
+async function isChanged(pathname, options) {
+  const files = await getChangedFiles({
+    __proto__: null,
+    ...options,
+    absolute: false
+  });
+  const path = /* @__PURE__ */ getPath();
+  const resolvedPathname = getCachedRealpath(pathname);
+  const baseCwd = options?.cwd ? getCachedRealpath(options["cwd"]) : getCwd();
+  const relativePath = (0, import_normalize.normalizePath)(path.relative(baseCwd, resolvedPathname));
+  return files.includes(relativePath);
+}
+function isChangedSync(pathname, options) {
+  const files = getChangedFilesSync({
+    __proto__: null,
+    ...options,
+    absolute: false
+  });
+  const path = /* @__PURE__ */ getPath();
+  try {
+    const resolvedPathname = getCachedRealpath(pathname);
+    const baseCwd = options?.cwd ? getCachedRealpath(options["cwd"]) : getCwd();
+    const relativePath = (0, import_normalize.normalizePath)(path.relative(baseCwd, resolvedPathname));
+    return files.includes(relativePath);
+  } catch {
+    return false;
+  }
+}
+async function isUnstaged(pathname, options) {
+  const files = await getUnstagedFiles({
+    __proto__: null,
+    ...options,
+    absolute: false
+  });
+  const path = /* @__PURE__ */ getPath();
+  const resolvedPathname = getCachedRealpath(pathname);
+  const baseCwd = options?.cwd ? getCachedRealpath(options["cwd"]) : getCwd();
+  const relativePath = (0, import_normalize.normalizePath)(path.relative(baseCwd, resolvedPathname));
+  return files.includes(relativePath);
+}
+function isUnstagedSync(pathname, options) {
+  const files = getUnstagedFilesSync({
+    __proto__: null,
+    ...options,
+    absolute: false
+  });
+  const path = /* @__PURE__ */ getPath();
+  const resolvedPathname = getCachedRealpath(pathname);
+  const baseCwd = options?.cwd ? getCachedRealpath(options["cwd"]) : getCwd();
+  const relativePath = (0, import_normalize.normalizePath)(path.relative(baseCwd, resolvedPathname));
+  return files.includes(relativePath);
+}
+async function isStaged(pathname, options) {
+  const files = await getStagedFiles({
+    __proto__: null,
+    ...options,
+    absolute: false
+  });
+  const path = /* @__PURE__ */ getPath();
+  const resolvedPathname = getCachedRealpath(pathname);
+  const baseCwd = options?.cwd ? getCachedRealpath(options["cwd"]) : getCwd();
+  const relativePath = (0, import_normalize.normalizePath)(path.relative(baseCwd, resolvedPathname));
+  return files.includes(relativePath);
+}
+function isStagedSync(pathname, options) {
+  const files = getStagedFilesSync({
+    __proto__: null,
+    ...options,
+    absolute: false
+  });
+  const path = /* @__PURE__ */ getPath();
+  const resolvedPathname = getCachedRealpath(pathname);
+  const baseCwd = options?.cwd ? getCachedRealpath(options["cwd"]) : getCwd();
+  const relativePath = (0, import_normalize.normalizePath)(path.relative(baseCwd, resolvedPathname));
+  return files.includes(relativePath);
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  findGitRoot,
+  getChangedFiles,
+  getChangedFilesSync,
+  getStagedFiles,
+  getStagedFilesSync,
+  getUnstagedFiles,
+  getUnstagedFilesSync,
+  isChanged,
+  isChangedSync,
+  isStaged,
+  isStagedSync,
+  isUnstaged,
+  isUnstagedSync
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/github.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/github.d.ts
new file mode 100644
index 00000000..369ac251
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/github.d.ts
@@ -0,0 +1,470 @@
+import type { SpawnOptions } from './spawn';
+/**
+ * Options for GitHub API fetch requests.
+ */
+export interface GitHubFetchOptions {
+    /**
+     * GitHub authentication token.
+     * If not provided, will attempt to use token from environment variables.
+     */
+    token?: string | undefined;
+    /**
+     * Additional HTTP headers to include in the request.
+     * Will be merged with default headers (Accept, User-Agent, Authorization).
+     */
+    headers?: Record | undefined;
+}
+/**
+ * Error thrown when GitHub API rate limit is exceeded.
+ * Extends the standard Error with additional rate limit information.
+ */
+export interface GitHubRateLimitError extends Error {
+    /** HTTP status code (always 403 for rate limit errors) */
+    status: number;
+    /**
+     * Date when the rate limit will reset.
+     * Undefined if reset time is not available in response headers.
+     */
+    resetTime?: Date | undefined;
+}
+/**
+ * Get GitHub authentication token from environment variables.
+ * Checks multiple environment variable names in priority order.
+ *
+ * Environment variables checked (in order):
+ * 1. `GITHUB_TOKEN` - Standard GitHub token variable
+ * 2. `GH_TOKEN` - Alternative GitHub CLI token variable
+ * 3. `SOCKET_CLI_GITHUB_TOKEN` - Socket-specific token variable
+ *
+ * @returns The first available GitHub token, or `undefined` if none found
+ *
+ * @example
+ * ```ts
+ * const token = getGitHubToken()
+ * if (!token) {
+ *   console.warn('No GitHub token found')
+ * }
+ * ```
+ */
+export declare function getGitHubToken(): string | undefined;
+/**
+ * Fetch data from GitHub API with automatic authentication and rate limit handling.
+ * Makes authenticated requests to the GitHub REST API with proper error handling.
+ *
+ * Features:
+ * - Automatic token injection from environment if not provided
+ * - Rate limit detection with helpful error messages
+ * - Standard GitHub API headers (Accept, User-Agent)
+ * - JSON response parsing
+ *
+ * @template T - Expected response type (defaults to `unknown`)
+ * @param url - Full GitHub API URL (e.g., 'https://api.github.com/repos/owner/repo')
+ * @param options - Fetch options including token and custom headers
+ * @returns Parsed JSON response of type `T`
+ *
+ * @throws {GitHubRateLimitError} When API rate limit is exceeded (status 403)
+ * @throws {Error} For other API errors with status code and message
+ *
+ * @example
+ * ```ts
+ * // Fetch repository information
+ * interface Repo {
+ *   name: string
+ *   full_name: string
+ *   default_branch: string
+ * }
+ * const repo = await fetchGitHub(
+ *   'https://api.github.com/repos/owner/repo'
+ * )
+ * console.log(`Default branch: ${repo.default_branch}`)
+ * ```
+ *
+ * @example
+ * ```ts
+ * // With custom token and headers
+ * const data = await fetchGitHub(
+ *   'https://api.github.com/user',
+ *   {
+ *     token: 'ghp_customtoken',
+ *     headers: { 'X-Custom-Header': 'value' }
+ *   }
+ * )
+ * ```
+ *
+ * @example
+ * ```ts
+ * // Handle rate limit errors
+ * try {
+ *   await fetchGitHub('https://api.github.com/repos/owner/repo')
+ * } catch (error) {
+ *   if (error.status === 403 && error.resetTime) {
+ *     console.error(`Rate limited until ${error.resetTime}`)
+ *   }
+ * }
+ * ```
+ */
+export declare function fetchGitHub(url: string, options?: GitHubFetchOptions | undefined): Promise;
+/**
+ * GitHub ref object returned by the API.
+ * Represents a git reference (tag or branch).
+ */
+export interface GitHubRef {
+    /** The object this ref points to */
+    object: {
+        /** SHA of the commit or tag object */
+        sha: string;
+        /** Type of object ('commit' or 'tag') */
+        type: string;
+        /** API URL to fetch the full object details */
+        url: string;
+    };
+    /** Full ref path (e.g., 'refs/tags/v1.0.0' or 'refs/heads/main') */
+    ref: string;
+    /** API URL for this ref */
+    url: string;
+}
+/**
+ * GitHub annotated tag object returned by the API.
+ * Represents a git tag with metadata.
+ */
+export interface GitHubTag {
+    /** Tag annotation message */
+    message: string;
+    /** The commit this tag points to */
+    object: {
+        /** SHA of the commit */
+        sha: string;
+        /** Type of object (usually 'commit') */
+        type: string;
+        /** API URL to fetch the commit details */
+        url: string;
+    };
+    /** SHA of this tag object itself */
+    sha: string;
+    /** Tag name (e.g., 'v1.0.0') */
+    tag: string;
+    /**
+     * Information about who created the tag.
+     * Undefined for lightweight tags.
+     */
+    tagger?: {
+        /** Tag creation date in ISO 8601 format */
+        date: string;
+        /** Tagger's email address */
+        email: string;
+        /** Tagger's name */
+        name: string;
+    };
+    /** API URL for this tag object */
+    url: string;
+}
+/**
+ * GitHub commit object returned by the API.
+ * Represents a git commit with metadata.
+ */
+export interface GitHubCommit {
+    /** Full commit SHA */
+    sha: string;
+    /** API URL for this commit */
+    url: string;
+    /** Commit details */
+    commit: {
+        /** Commit message */
+        message: string;
+        /** Author information */
+        author: {
+            /** Commit author date in ISO 8601 format */
+            date: string;
+            /** Author's email address */
+            email: string;
+            /** Author's name */
+            name: string;
+        };
+    };
+}
+/**
+ * Options for resolving git refs to commit SHAs.
+ */
+export interface ResolveRefOptions {
+    /**
+     * GitHub authentication token.
+     * If not provided, will attempt to use token from environment variables.
+     */
+    token?: string | undefined;
+}
+/**
+ * Resolve a git ref (tag, branch, or commit SHA) to its full commit SHA.
+ * Handles tags (annotated and lightweight), branches, and commit SHAs.
+ * Results are cached in-memory and on disk (with TTL) to minimize API calls.
+ *
+ * Resolution strategy:
+ * 1. Try as a tag (refs/tags/{ref})
+ * 2. If tag is annotated, dereference to get the commit SHA
+ * 3. If not a tag, try as a branch (refs/heads/{ref})
+ * 4. If not a branch, try as a commit SHA directly
+ *
+ * Caching behavior:
+ * - In-memory cache (Map) for immediate lookups
+ * - Persistent disk cache (cacache) for durability across runs
+ * - Default TTL: 5 minutes
+ * - Disable caching with `DISABLE_GITHUB_CACHE` env var
+ *
+ * @param owner - Repository owner (user or organization name)
+ * @param repo - Repository name
+ * @param ref - Git reference to resolve (tag name, branch name, or commit SHA)
+ * @param options - Resolution options including authentication token
+ * @returns The full commit SHA (40-character hex string)
+ *
+ * @throws {Error} When ref cannot be resolved after trying all strategies
+ * @throws {GitHubRateLimitError} When API rate limit is exceeded
+ *
+ * @example
+ * ```ts
+ * // Resolve a tag to commit SHA
+ * const sha = await resolveRefToSha('owner', 'repo', 'v1.0.0')
+ * console.log(sha) // 'a1b2c3d4e5f6...'
+ * ```
+ *
+ * @example
+ * ```ts
+ * // Resolve a branch to latest commit SHA
+ * const sha = await resolveRefToSha('owner', 'repo', 'main')
+ * console.log(sha) // Latest commit on main branch
+ * ```
+ *
+ * @example
+ * ```ts
+ * // Resolve with custom token
+ * const sha = await resolveRefToSha(
+ *   'owner',
+ *   'repo',
+ *   'develop',
+ *   { token: 'ghp_customtoken' }
+ * )
+ * ```
+ *
+ * @example
+ * ```ts
+ * // Commit SHA passes through unchanged (but validates it exists)
+ * const sha = await resolveRefToSha('owner', 'repo', 'a1b2c3d4')
+ * console.log(sha) // Full 40-char SHA
+ * ```
+ */
+export declare function resolveRefToSha(owner: string, repo: string, ref: string, options?: ResolveRefOptions | undefined): Promise;
+/**
+ * Clear the ref resolution cache (in-memory only).
+ * Clears the in-memory memoization cache without affecting the persistent disk cache.
+ * Useful for testing or when you need fresh data from the API.
+ *
+ * Note: This only clears the in-memory cache. The persistent cacache storage
+ * remains intact and will be used to rebuild the in-memory cache on next access.
+ *
+ * @returns Promise that resolves when cache is cleared
+ *
+ * @example
+ * ```ts
+ * // Clear cache to force fresh API calls
+ * await clearRefCache()
+ * const sha = await resolveRefToSha('owner', 'repo', 'main')
+ * // This will hit the persistent cache or API, not in-memory cache
+ * ```
+ */
+export declare function clearRefCache(): Promise;
+/**
+ * Get GitHub authentication token from git config.
+ * Reads the `github.token` configuration value from git config.
+ * This is a fallback method when environment variables don't contain a token.
+ *
+ * @param options - Spawn options for git command execution
+ * @returns GitHub token from git config, or `undefined` if not configured
+ *
+ * @example
+ * ```ts
+ * const token = await getGitHubTokenFromGitConfig()
+ * if (token) {
+ *   console.log('Found token in git config')
+ * }
+ * ```
+ *
+ * @example
+ * ```ts
+ * // With custom working directory
+ * const token = await getGitHubTokenFromGitConfig({
+ *   cwd: '/path/to/repo'
+ * })
+ * ```
+ */
+export declare function getGitHubTokenFromGitConfig(options?: SpawnOptions | undefined): Promise;
+/**
+ * Get GitHub authentication token from all available sources.
+ * Checks environment variables first, then falls back to git config.
+ * This is the recommended way to get a GitHub token with maximum compatibility.
+ *
+ * Priority order:
+ * 1. Environment variables (GITHUB_TOKEN, GH_TOKEN, SOCKET_CLI_GITHUB_TOKEN)
+ * 2. Git config (github.token)
+ *
+ * @returns GitHub token from first available source, or `undefined` if none found
+ *
+ * @example
+ * ```ts
+ * const token = await getGitHubTokenWithFallback()
+ * if (!token) {
+ *   throw new Error('GitHub token required')
+ * }
+ * ```
+ */
+export declare function getGitHubTokenWithFallback(): Promise;
+/**
+ * GitHub Security Advisory (GHSA) details.
+ * Represents a complete security advisory from GitHub's database.
+ */
+export interface GhsaDetails {
+    /** GHSA identifier (e.g., 'GHSA-xxxx-yyyy-zzzz') */
+    ghsaId: string;
+    /** Short summary of the vulnerability */
+    summary: string;
+    /** Detailed description of the vulnerability */
+    details: string;
+    /** Severity level ('low', 'moderate', 'high', 'critical') */
+    severity: string;
+    /** Alternative identifiers (CVE IDs, etc.) */
+    aliases: string[];
+    /** ISO 8601 timestamp when advisory was published */
+    publishedAt: string;
+    /** ISO 8601 timestamp when advisory was last updated */
+    updatedAt: string;
+    /**
+     * ISO 8601 timestamp when advisory was withdrawn.
+     * `null` if advisory is still active.
+     */
+    withdrawnAt: string | null;
+    /** External reference URLs for more information */
+    references: Array<{
+        url: string;
+    }>;
+    /** Affected packages and version ranges */
+    vulnerabilities: Array<{
+        /** Package information */
+        package: {
+            /** Ecosystem (e.g., 'npm', 'pip', 'maven') */
+            ecosystem: string;
+            /** Package name */
+            name: string;
+        };
+        /** Version range expression for vulnerable versions */
+        vulnerableVersionRange: string;
+        /**
+         * First patched version that fixes the vulnerability.
+         * `null` if no patched version exists yet.
+         */
+        firstPatchedVersion: {
+            identifier: string;
+        } | null;
+    }>;
+    /**
+     * CVSS (Common Vulnerability Scoring System) information.
+     * `null` if CVSS score is not available.
+     */
+    cvss: {
+        /** CVSS score (0.0-10.0) */
+        score: number;
+        /** CVSS vector string describing the vulnerability characteristics */
+        vectorString: string;
+    } | null;
+    /** CWE (Common Weakness Enumeration) categories */
+    cwes: Array<{
+        /** CWE identifier (e.g., 'CWE-79') */
+        cweId: string;
+        /** Human-readable CWE name */
+        name: string;
+        /** Description of the weakness category */
+        description: string;
+    }>;
+}
+/**
+ * Generate GitHub Security Advisory URL from GHSA ID.
+ * Constructs the public advisory URL for a given GHSA identifier.
+ *
+ * @param ghsaId - GHSA identifier (e.g., 'GHSA-xxxx-yyyy-zzzz')
+ * @returns Full URL to the advisory page
+ *
+ * @example
+ * ```ts
+ * const url = getGhsaUrl('GHSA-1234-5678-90ab')
+ * console.log(url) // 'https://github.com/advisories/GHSA-1234-5678-90ab'
+ * ```
+ */
+export declare function getGhsaUrl(ghsaId: string): string;
+/**
+ * Fetch GitHub Security Advisory details from the API.
+ * Retrieves complete advisory information including severity, affected packages,
+ * CVSS scores, and CWE classifications.
+ *
+ * @param ghsaId - GHSA identifier to fetch (e.g., 'GHSA-xxxx-yyyy-zzzz')
+ * @param options - Fetch options including authentication token
+ * @returns Complete advisory details with normalized field names
+ *
+ * @throws {Error} If advisory cannot be found or API request fails
+ * @throws {GitHubRateLimitError} When API rate limit is exceeded
+ *
+ * @example
+ * ```ts
+ * const advisory = await fetchGhsaDetails('GHSA-1234-5678-90ab')
+ * console.log(`Severity: ${advisory.severity}`)
+ * console.log(`Affects: ${advisory.vulnerabilities.length} packages`)
+ * if (advisory.cvss) {
+ *   console.log(`CVSS Score: ${advisory.cvss.score}`)
+ * }
+ * ```
+ *
+ * @example
+ * ```ts
+ * // Check if vulnerability is patched
+ * const advisory = await fetchGhsaDetails('GHSA-xxxx-yyyy-zzzz')
+ * for (const vuln of advisory.vulnerabilities) {
+ *   if (vuln.firstPatchedVersion) {
+ *     console.log(
+ *       `Patched in ${vuln.package.name}@${vuln.firstPatchedVersion.identifier}`
+ *     )
+ *   }
+ * }
+ * ```
+ */
+export declare function fetchGhsaDetails(ghsaId: string, options?: GitHubFetchOptions | undefined): Promise;
+/**
+ * Fetch GitHub Security Advisory details with caching.
+ * Retrieves advisory information with two-tier caching (in-memory + persistent).
+ * Cached results are stored with the default TTL (5 minutes).
+ *
+ * Caching behavior:
+ * - Checks in-memory cache first for immediate response
+ * - Falls back to persistent disk cache if not in memory
+ * - Fetches from API only if not cached
+ * - Stores result in both cache tiers
+ * - Respects `DISABLE_GITHUB_CACHE` env var
+ *
+ * @param ghsaId - GHSA identifier to fetch
+ * @param options - Fetch options including authentication token
+ * @returns Complete advisory details
+ *
+ * @throws {Error} If advisory cannot be found or API request fails
+ * @throws {GitHubRateLimitError} When API rate limit is exceeded
+ *
+ * @example
+ * ```ts
+ * // First call hits API
+ * const advisory = await cacheFetchGhsa('GHSA-1234-5678-90ab')
+ *
+ * // Second call within 5 minutes returns cached data
+ * const cached = await cacheFetchGhsa('GHSA-1234-5678-90ab')
+ * ```
+ *
+ * @example
+ * ```ts
+ * // Disable caching for fresh data
+ * process.env.DISABLE_GITHUB_CACHE = '1'
+ * const advisory = await cacheFetchGhsa('GHSA-xxxx-yyyy-zzzz')
+ * ```
+ */
+export declare function cacheFetchGhsa(ghsaId: string, options?: GitHubFetchOptions | undefined): Promise;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/github.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/github.js
new file mode 100644
index 00000000..277174fa
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/github.js
@@ -0,0 +1,221 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var github_exports = {};
+__export(github_exports, {
+  cacheFetchGhsa: () => cacheFetchGhsa,
+  clearRefCache: () => clearRefCache,
+  fetchGhsaDetails: () => fetchGhsaDetails,
+  fetchGitHub: () => fetchGitHub,
+  getGhsaUrl: () => getGhsaUrl,
+  getGitHubToken: () => getGitHubToken,
+  getGitHubTokenFromGitConfig: () => getGitHubTokenFromGitConfig,
+  getGitHubTokenWithFallback: () => getGitHubTokenWithFallback,
+  resolveRefToSha: () => resolveRefToSha
+});
+module.exports = __toCommonJS(github_exports);
+var import_node_process = __toESM(require("node:process"));
+var import_cache_with_ttl = require("./cache-with-ttl");
+var import_github = require("./env/github");
+var import_socket_cli = require("./env/socket-cli");
+var import_http_request = require("./http-request");
+var import_spawn = require("./spawn");
+const GITHUB_API_BASE_URL = "https://api.github.com";
+const DEFAULT_CACHE_TTL_MS = 5 * 60 * 1e3;
+let _githubCache;
+function getGithubCache() {
+  if (_githubCache === void 0) {
+    _githubCache = (0, import_cache_with_ttl.createTtlCache)({
+      memoize: true,
+      prefix: "github-refs",
+      ttl: DEFAULT_CACHE_TTL_MS
+    });
+  }
+  return _githubCache;
+}
+function getGitHubToken() {
+  return (0, import_github.getGithubToken)() || (0, import_github.getGhToken)() || (0, import_socket_cli.getSocketCliGithubToken)() || void 0;
+}
+async function fetchGitHub(url, options) {
+  const opts = { __proto__: null, ...options };
+  const token = opts.token || getGitHubToken();
+  const headers = {
+    Accept: "application/vnd.github.v3+json",
+    "User-Agent": "socket-registry-github-client",
+    ...opts.headers
+  };
+  if (token) {
+    headers["Authorization"] = `Bearer ${token}`;
+  }
+  const response = await (0, import_http_request.httpRequest)(url, { headers });
+  if (!response.ok) {
+    if (response.status === 403) {
+      const rateLimit = response.headers["x-ratelimit-remaining"];
+      const rateLimitStr = typeof rateLimit === "string" ? rateLimit : rateLimit?.[0];
+      if (rateLimitStr === "0") {
+        const resetTime = response.headers["x-ratelimit-reset"];
+        const resetTimeStr = typeof resetTime === "string" ? resetTime : resetTime?.[0];
+        const resetDate = resetTimeStr ? new Date(Number(resetTimeStr) * 1e3) : void 0;
+        const error = new Error(
+          `GitHub API rate limit exceeded${resetDate ? `. Resets at ${resetDate.toLocaleString()}` : ""}. Use GITHUB_TOKEN environment variable to increase rate limit.`
+        );
+        error.status = 403;
+        error.resetTime = resetDate;
+        throw error;
+      }
+    }
+    throw new Error(
+      `GitHub API error ${response.status}: ${response.statusText}`
+    );
+  }
+  try {
+    return JSON.parse(response.body.toString("utf8"));
+  } catch (error) {
+    throw new Error(
+      `Failed to parse GitHub API response: ${error instanceof Error ? error.message : String(error)}
+URL: ${url}
+Response may be malformed or incomplete.`,
+      { cause: error }
+    );
+  }
+}
+async function resolveRefToSha(owner, repo, ref, options) {
+  const opts = {
+    __proto__: null,
+    ...options
+  };
+  const cacheKey = `${owner}/${repo}@${ref}`;
+  if (import_node_process.default.env["DISABLE_GITHUB_CACHE"]) {
+    return await fetchRefSha(owner, repo, ref, opts);
+  }
+  const cache = getGithubCache();
+  return await cache.getOrFetch(cacheKey, async () => {
+    return await fetchRefSha(owner, repo, ref, opts);
+  });
+}
+async function fetchRefSha(owner, repo, ref, options) {
+  const fetchOptions = {
+    token: options.token
+  };
+  try {
+    const tagUrl = `${GITHUB_API_BASE_URL}/repos/${owner}/${repo}/git/refs/tags/${ref}`;
+    const tagData = await fetchGitHub(tagUrl, fetchOptions);
+    if (tagData.object.type === "tag") {
+      const tagObject = await fetchGitHub(
+        tagData.object.url,
+        fetchOptions
+      );
+      return tagObject.object.sha;
+    }
+    return tagData.object.sha;
+  } catch {
+    try {
+      const branchUrl = `${GITHUB_API_BASE_URL}/repos/${owner}/${repo}/git/refs/heads/${ref}`;
+      const branchData = await fetchGitHub(branchUrl, fetchOptions);
+      return branchData.object.sha;
+    } catch {
+      try {
+        const commitUrl = `${GITHUB_API_BASE_URL}/repos/${owner}/${repo}/commits/${ref}`;
+        const commitData = await fetchGitHub(
+          commitUrl,
+          fetchOptions
+        );
+        return commitData.sha;
+      } catch (e) {
+        throw new Error(
+          `failed to resolve ref "${ref}" for ${owner}/${repo}: ${e instanceof Error ? e.message : String(e)}`
+        );
+      }
+    }
+  }
+}
+async function clearRefCache() {
+  if (_githubCache) {
+    await _githubCache.clear({ memoOnly: true });
+  }
+}
+async function getGitHubTokenFromGitConfig(options) {
+  try {
+    const result = await (0, import_spawn.spawn)("git", ["config", "github.token"], {
+      ...options,
+      stdio: "pipe"
+    });
+    if (result.code === 0 && result.stdout) {
+      return result.stdout.toString().trim();
+    }
+  } catch {
+  }
+  return void 0;
+}
+async function getGitHubTokenWithFallback() {
+  return getGitHubToken() || await getGitHubTokenFromGitConfig();
+}
+function getGhsaUrl(ghsaId) {
+  return `https://github.com/advisories/${ghsaId}`;
+}
+async function fetchGhsaDetails(ghsaId, options) {
+  const url = `https://api.github.com/advisories/${ghsaId}`;
+  const data = await fetchGitHub(url, options);
+  return {
+    ghsaId: data.ghsa_id,
+    summary: data.summary,
+    details: data.details,
+    severity: data.severity,
+    aliases: data.aliases || [],
+    publishedAt: data.published_at,
+    updatedAt: data.updated_at,
+    withdrawnAt: data.withdrawn_at,
+    references: data.references || [],
+    vulnerabilities: data.vulnerabilities || [],
+    cvss: data.cvss,
+    cwes: data.cwes || []
+  };
+}
+async function cacheFetchGhsa(ghsaId, options) {
+  const cache = getGithubCache();
+  const key = `ghsa:${ghsaId}`;
+  if (import_node_process.default.env["DISABLE_GITHUB_CACHE"]) {
+    return await fetchGhsaDetails(ghsaId, options);
+  }
+  return await cache.getOrFetch(key, async () => {
+    return await fetchGhsaDetails(ghsaId, options);
+  });
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  cacheFetchGhsa,
+  clearRefCache,
+  fetchGhsaDetails,
+  fetchGitHub,
+  getGhsaUrl,
+  getGitHubToken,
+  getGitHubTokenFromGitConfig,
+  getGitHubTokenWithFallback,
+  resolveRefToSha
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/globs.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/globs.d.ts
new file mode 100644
index 00000000..3e4f4aaa
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/globs.d.ts
@@ -0,0 +1,85 @@
+// Type definitions
+type Pattern = string;
+interface FastGlobOptions {
+    absolute?: boolean;
+    baseNameMatch?: boolean;
+    braceExpansion?: boolean;
+    caseSensitiveMatch?: boolean;
+    concurrency?: number;
+    cwd?: string;
+    deep?: number;
+    dot?: boolean;
+    extglob?: boolean;
+    followSymbolicLinks?: boolean;
+    fs?: unknown;
+    globstar?: boolean;
+    ignore?: string[];
+    ignoreFiles?: string[];
+    markDirectories?: boolean;
+    objectMode?: boolean;
+    onlyDirectories?: boolean;
+    onlyFiles?: boolean;
+    stats?: boolean;
+    suppressErrors?: boolean;
+    throwErrorOnBrokenSymbolicLink?: boolean;
+    unique?: boolean;
+}
+export interface GlobOptions extends FastGlobOptions {
+    ignoreOriginals?: boolean;
+    recursive?: boolean;
+}
+export type { Pattern, FastGlobOptions };
+export declare const defaultIgnore: readonly string[];
+/**
+ * Create a stream of license file paths matching glob patterns.
+ *
+ * @example
+ * ```typescript
+ * const stream = globStreamLicenses('/tmp/my-package')
+ * for await (const licensePath of stream) {
+ *   console.log(licensePath)
+ * }
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function globStreamLicenses(dirname: string, options?: GlobOptions): NodeJS.ReadableStream;
+/**
+ * Get a cached glob matcher function.
+ *
+ * @example
+ * ```typescript
+ * const isMatch = getGlobMatcher('*.ts')
+ * isMatch('index.ts')  // true
+ * isMatch('index.js')  // false
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function getGlobMatcher(glob: Pattern | Pattern[], options?: {
+    dot?: boolean;
+    nocase?: boolean;
+    ignore?: string[];
+}): (path: string) => boolean;
+/**
+ * Asynchronously find files matching glob patterns.
+ * Wrapper around fast-glob.
+ *
+ * @example
+ * ```typescript
+ * const files = await glob('src/*.ts', { cwd: '/tmp/project' })
+ * console.log(files) // ['src/index.ts', 'src/utils.ts']
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function glob(patterns: Pattern | Pattern[], options?: FastGlobOptions): Promise;
+/**
+ * Synchronously find files matching glob patterns.
+ * Wrapper around fast-glob.sync.
+ *
+ * @example
+ * ```typescript
+ * const files = globSync('*.json', { cwd: '/tmp/project' })
+ * console.log(files) // ['package.json', 'tsconfig.json']
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function globSync(patterns: Pattern | Pattern[], options?: FastGlobOptions): string[];
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/globs.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/globs.js
new file mode 100644
index 00000000..3f752501
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/globs.js
@@ -0,0 +1,176 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var globs_exports = {};
+__export(globs_exports, {
+  defaultIgnore: () => defaultIgnore,
+  getGlobMatcher: () => getGlobMatcher,
+  glob: () => glob,
+  globStreamLicenses: () => globStreamLicenses,
+  globSync: () => globSync
+});
+module.exports = __toCommonJS(globs_exports);
+var import_objects = require("./objects");
+var import_globs = require("./paths/globs");
+let _fastGlob;
+// @__NO_SIDE_EFFECTS__
+function getFastGlob() {
+  if (_fastGlob === void 0) {
+    _fastGlob = require("./external/fast-glob.js");
+  }
+  return _fastGlob;
+}
+let _picomatch;
+// @__NO_SIDE_EFFECTS__
+function getPicomatch() {
+  if (_picomatch === void 0) {
+    _picomatch = require("./external/picomatch.js");
+  }
+  return _picomatch;
+}
+const defaultIgnore = (0, import_objects.objectFreeze)([
+  // Most of these ignored files can be included specifically if included in the
+  // files globs. Exceptions to this are:
+  // https://docs.npmjs.com/cli/v10/configuring-npm/package-json#files
+  // These can NOT be included.
+  // https://github.com/npm/npm-packlist/blob/v10.0.0/lib/index.js#L280
+  "**/.git",
+  "**/.npmrc",
+  // '**/bun.lockb?',
+  "**/node_modules",
+  // '**/package-lock.json',
+  // '**/pnpm-lock.ya?ml',
+  // '**/yarn.lock',
+  // Include npm-packlist defaults:
+  // https://github.com/npm/npm-packlist/blob/v10.0.0/lib/index.js#L15-L38
+  "**/.DS_Store",
+  "**/.gitignore",
+  "**/.hg",
+  "**/.lock-wscript",
+  "**/.npmignore",
+  "**/.svn",
+  "**/.wafpickle-*",
+  "**/.*.swp",
+  "**/._*/**",
+  "**/archived-packages/**",
+  "**/build/config.gypi",
+  "**/CVS",
+  "**/npm-debug.log",
+  "**/*.orig",
+  // Inline generic socket-registry .gitignore entries.
+  "**/.env",
+  "**/.eslintcache",
+  "**/.nvm",
+  "**/.tap",
+  "**/.vscode",
+  "**/*.tsbuildinfo",
+  "**/Thumbs.db",
+  // Inline additional ignores.
+  "**/bower_components"
+]);
+// @__NO_SIDE_EFFECTS__
+function globStreamLicenses(dirname, options) {
+  const {
+    ignore: ignoreOpt,
+    ignoreOriginals,
+    recursive,
+    ...globOptions
+  } = { __proto__: null, ...options };
+  const ignore = [
+    ...Array.isArray(ignoreOpt) ? ignoreOpt : defaultIgnore,
+    "**/*.{cjs,cts,js,json,mjs,mts,ts}"
+  ];
+  if (ignoreOriginals) {
+    ignore.push(import_globs.LICENSE_ORIGINAL_GLOB_RECURSIVE);
+  }
+  const fastGlob = /* @__PURE__ */ getFastGlob();
+  return fastGlob.globStream(
+    [recursive ? import_globs.LICENSE_GLOB_RECURSIVE : import_globs.LICENSE_GLOB],
+    {
+      __proto__: null,
+      absolute: true,
+      caseSensitiveMatch: false,
+      cwd: dirname,
+      ...globOptions,
+      ...ignore ? { ignore } : {}
+    }
+  );
+}
+const MATCHER_CACHE_MAX_SIZE = 100;
+const matcherCache = /* @__PURE__ */ new Map();
+const matcherAccessOrder = [];
+function evictLRUMatcher() {
+  if (matcherCache.size >= MATCHER_CACHE_MAX_SIZE && matcherAccessOrder.length > 0) {
+    const oldest = matcherAccessOrder.shift();
+    if (oldest) {
+      matcherCache.delete(oldest);
+    }
+  }
+}
+// @__NO_SIDE_EFFECTS__
+function getGlobMatcher(glob2, options) {
+  const patterns = Array.isArray(glob2) ? glob2 : [glob2];
+  const sortedPatterns = [...patterns].sort();
+  const sortedOptions = options ? Object.keys(options).sort().map((k) => `${k}:${JSON.stringify(options[k])}`).join(",") : "";
+  const key = `${sortedPatterns.join("|")}:${sortedOptions}`;
+  let matcher = matcherCache.get(key);
+  if (matcher) {
+    const index = matcherAccessOrder.indexOf(key);
+    if (index !== -1) {
+      matcherAccessOrder.splice(index, 1);
+      matcherAccessOrder.push(key);
+    }
+    return matcher;
+  }
+  evictLRUMatcher();
+  const positivePatterns = patterns.filter((p) => !p.startsWith("!"));
+  const negativePatterns = patterns.filter((p) => p.startsWith("!")).map((p) => p.slice(1));
+  const matchOptions = {
+    dot: true,
+    nocase: true,
+    ...options,
+    ...negativePatterns.length > 0 ? { ignore: negativePatterns } : {}
+  };
+  const picomatch = /* @__PURE__ */ getPicomatch();
+  matcher = picomatch(
+    positivePatterns.length > 0 ? positivePatterns : patterns,
+    matchOptions
+  );
+  matcherCache.set(key, matcher);
+  matcherAccessOrder.push(key);
+  return matcher;
+}
+// @__NO_SIDE_EFFECTS__
+function glob(patterns, options) {
+  const fastGlob = /* @__PURE__ */ getFastGlob();
+  return fastGlob.glob(patterns, options);
+}
+// @__NO_SIDE_EFFECTS__
+function globSync(patterns, options) {
+  const fastGlob = /* @__PURE__ */ getFastGlob();
+  return fastGlob.globSync(patterns, options);
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  defaultIgnore,
+  getGlobMatcher,
+  glob,
+  globStreamLicenses,
+  globSync
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/http-request.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/http-request.d.ts
new file mode 100644
index 00000000..38a4bf88
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/http-request.d.ts
@@ -0,0 +1,975 @@
+/**
+ * @fileoverview HTTP/HTTPS request utilities using Node.js built-in modules with retry logic, redirects, and download support.
+ *
+ * This module provides a fetch-like API built on top of Node.js native `http` and `https` modules.
+ * It supports automatic retries with exponential backoff, redirect following, streaming downloads,
+ * and provides a familiar fetch-style response interface.
+ *
+ * Key Features:
+ * - Automatic retries with exponential backoff for failed requests.
+ * - Redirect following with configurable max redirects.
+ * - Streaming downloads with progress callbacks.
+ * - Fetch-like response interface (`.json()`, `.text()`, `.arrayBuffer()`).
+ * - Timeout support for all operations.
+ * - Zero dependencies on external HTTP libraries.
+ */
+import type { Readable } from 'node:stream';
+import type { IncomingHttpHeaders, IncomingMessage } from 'http';
+/** IncomingMessage received as a response to a client request (http.request callback). */
+export type IncomingResponse = IncomingMessage;
+/** IncomingMessage received as a request in a server handler (http.createServer callback). */
+export type IncomingRequest = IncomingMessage;
+import type { Logger } from './logger.js';
+/**
+ * Information passed to the onRequest hook before each request attempt.
+ */
+export interface HttpHookRequestInfo {
+    headers: Record;
+    method: string;
+    timeout: number;
+    url: string;
+}
+/**
+ * Information passed to the onResponse hook after each request attempt.
+ */
+export interface HttpHookResponseInfo {
+    duration: number;
+    error?: Error | undefined;
+    headers?: IncomingHttpHeaders | undefined;
+    method: string;
+    status?: number | undefined;
+    statusText?: string | undefined;
+    url: string;
+}
+/**
+ * Lifecycle hooks for observing HTTP request/response events.
+ * Hooks fire per-attempt (retries produce multiple hook calls).
+ */
+export interface HttpHooks {
+    onRequest?: ((info: HttpHookRequestInfo) => void) | undefined;
+    onResponse?: ((info: HttpHookResponseInfo) => void) | undefined;
+}
+/**
+ * Configuration options for HTTP/HTTPS requests.
+ */
+export interface HttpRequestOptions {
+    /**
+     * Request body to send.
+     * Can be a string, Buffer, or Readable stream.
+     *
+     * When a Readable stream is provided, it is piped directly to the request.
+     * If the stream has a `getHeaders()` method (duck-typed, e.g., the `form-data`
+     * npm package), its headers (Content-Type with boundary) are automatically
+     * merged into the request headers.
+     *
+     * **Note:** Streaming bodies are one-shot — they cannot be replayed. Using a
+     * Readable body with `retries > 0` throws an error. Buffer the body as a
+     * string/Buffer if retries are needed. Redirects are also disabled for
+     * streaming bodies since the stream is consumed on the first request.
+     *
+     * @example
+     * ```ts
+     * // Send JSON data
+     * await httpRequest('https://api.example.com/data', {
+     *   method: 'POST',
+     *   body: JSON.stringify({ name: 'Alice' }),
+     *   headers: { 'Content-Type': 'application/json' }
+     * })
+     *
+     * // Send binary data
+     * const buffer = Buffer.from([0x00, 0x01, 0x02])
+     * await httpRequest('https://api.example.com/upload', {
+     *   method: 'POST',
+     *   body: buffer
+     * })
+     *
+     * // Stream form-data (npm package, not native FormData)
+     * import FormData from 'form-data'
+     * const form = new FormData()
+     * form.append('file', createReadStream('data.json'))
+     * await httpRequest('https://api.example.com/upload', {
+     *   method: 'POST',
+     *   body: form  // auto-merges form.getHeaders()
+     * })
+     * ```
+     */
+    body?: Buffer | Readable | string | undefined;
+    /**
+     * Custom CA certificates for TLS connections.
+     * When provided, these certificates are combined with the default trust
+     * store via an HTTPS agent. Useful when SSL_CERT_FILE is set but
+     * NODE_EXTRA_CA_CERTS was not available at process startup.
+     *
+     * @example
+     * ```ts
+     * import { rootCertificates } from 'node:tls'
+     * import { readFileSync } from 'node:fs'
+     *
+     * const extraCerts = readFileSync('/path/to/cert.pem', 'utf-8')
+     * await httpRequest('https://api.example.com', {
+     *   ca: [...rootCertificates, extraCerts]
+     * })
+     * ```
+     */
+    ca?: string[] | undefined;
+    /**
+     * Whether to automatically follow HTTP redirects (3xx status codes).
+     *
+     * @default true
+     *
+     * @example
+     * ```ts
+     * // Follow redirects (default)
+     * await httpRequest('https://example.com/redirect')
+     *
+     * // Don't follow redirects
+     * const response = await httpRequest('https://example.com/redirect', {
+     *   followRedirects: false
+     * })
+     * console.log(response.status) // 301 or 302
+     * ```
+     */
+    followRedirects?: boolean | undefined;
+    /**
+     * Lifecycle hooks for observing request/response events.
+     * Hooks fire per-attempt — retries and redirects each trigger separate hook calls.
+     */
+    hooks?: HttpHooks | undefined;
+    /**
+     * HTTP headers to send with the request.
+     * A `User-Agent` header is automatically added if not provided.
+     *
+     * @example
+     * ```ts
+     * await httpRequest('https://api.example.com/data', {
+     *   headers: {
+     *     'Authorization': 'Bearer token123',
+     *     'Content-Type': 'application/json',
+     *     'Accept': 'application/json'
+     *   }
+     * })
+     * ```
+     */
+    headers?: Record | undefined;
+    /**
+     * Maximum number of redirects to follow before throwing an error.
+     * Only relevant when `followRedirects` is `true`.
+     *
+     * @default 5
+     *
+     * @example
+     * ```ts
+     * // Allow up to 10 redirects
+     * await httpRequest('https://example.com/many-redirects', {
+     *   maxRedirects: 10
+     * })
+     * ```
+     */
+    maxRedirects?: number | undefined;
+    /**
+     * Maximum response body size in bytes. Responses exceeding this limit
+     * will be rejected with an error. Prevents memory exhaustion from
+     * unexpectedly large responses.
+     *
+     * @default undefined (no limit)
+     */
+    maxResponseSize?: number | undefined;
+    /**
+     * HTTP method to use for the request.
+     *
+     * @default 'GET'
+     *
+     * @example
+     * ```ts
+     * // GET request (default)
+     * await httpRequest('https://api.example.com/data')
+     *
+     * // POST request
+     * await httpRequest('https://api.example.com/data', {
+     *   method: 'POST',
+     *   body: JSON.stringify({ name: 'Alice' })
+     * })
+     *
+     * // DELETE request
+     * await httpRequest('https://api.example.com/data/123', {
+     *   method: 'DELETE'
+     * })
+     * ```
+     */
+    method?: string | undefined;
+    /**
+     * Callback invoked before each retry attempt.
+     * Allows customizing retry behavior per-attempt (e.g., skip 4xx, honor Retry-After).
+     *
+     * @param attempt - Current retry attempt number (1-based)
+     * @param error - The error that triggered the retry (HttpResponseError for HTTP errors)
+     * @param delay - The calculated delay in ms before next retry
+     * @returns `false` to stop retrying and rethrow,
+     *          a `number` to override the delay (ms),
+     *          or `undefined` to use the calculated delay
+     *
+     * @example
+     * ```ts
+     * await httpRequest('https://api.example.com/data', {
+     *   retries: 3,
+     *   throwOnError: true,
+     *   onRetry: (attempt, error, delay) => {
+     *     // Don't retry client errors (except 429)
+     *     if (error instanceof HttpResponseError) {
+     *       if (error.response.status === 429) {
+     *         const retryAfter = parseRetryAfterHeader(error.response.headers['retry-after'])
+     *         return retryAfter ?? undefined
+     *       }
+     *       if (error.response.status >= 400 && error.response.status < 500) {
+     *         return false
+     *       }
+     *     }
+     *   }
+     * })
+     * ```
+     */
+    onRetry?: ((attempt: number, error: unknown, delay: number) => boolean | number | undefined) | undefined;
+    /**
+     * Number of retry attempts for failed requests.
+     * Uses exponential backoff: delay = `retryDelay` * 2^attempt.
+     *
+     * @default 0
+     *
+     * @example
+     * ```ts
+     * // Retry up to 3 times with exponential backoff
+     * await httpRequest('https://api.example.com/data', {
+     *   retries: 3,
+     *   retryDelay: 1000 // 1s, then 2s, then 4s
+     * })
+     * ```
+     */
+    retries?: number | undefined;
+    /**
+     * Initial delay in milliseconds before first retry.
+     * Subsequent retries use exponential backoff.
+     *
+     * @default 1000
+     *
+     * @example
+     * ```ts
+     * // Start with 2 second delay, then 4s, 8s, etc.
+     * await httpRequest('https://api.example.com/data', {
+     *   retries: 3,
+     *   retryDelay: 2000
+     * })
+     * ```
+     */
+    retryDelay?: number | undefined;
+    /**
+     * When true, non-2xx HTTP responses throw an `HttpResponseError` instead
+     * of resolving with `response.ok === false`. This makes HTTP error
+     * responses eligible for retry via the `retries` option.
+     *
+     * @default false
+     *
+     * @example
+     * ```ts
+     * // Throw on 4xx/5xx responses (enabling retry for 5xx)
+     * await httpRequest('https://api.example.com/data', {
+     *   throwOnError: true,
+     *   retries: 3
+     * })
+     * ```
+     */
+    /**
+     * When true, resolve with an HttpResponse whose body is NOT buffered.
+     * The `rawResponse` property contains the unconsumed IncomingResponse
+     * stream for piping to files or other destinations.
+     *
+     * `body`, `text()`, `json()`, and `arrayBuffer()` return empty/zero
+     * values since the stream has not been read.
+     *
+     * Incompatible with `maxResponseSize` (size enforcement requires
+     * reading the body).
+     *
+     * @default false
+     */
+    stream?: boolean | undefined;
+    throwOnError?: boolean | undefined;
+    /**
+     * Request timeout in milliseconds.
+     * If the request takes longer than this, it will be aborted.
+     *
+     * @default 30000
+     *
+     * @example
+     * ```ts
+     * // 60 second timeout
+     * await httpRequest('https://api.example.com/slow-endpoint', {
+     *   timeout: 60000
+     * })
+     * ```
+     */
+    timeout?: number | undefined;
+}
+/**
+ * HTTP response object with fetch-like interface.
+ * Provides multiple ways to access the response body.
+ */
+export interface HttpResponse {
+    /**
+     * Get response body as ArrayBuffer.
+     * Useful for binary data or when you need compatibility with browser APIs.
+     *
+     * @returns The response body as an ArrayBuffer
+     *
+     * @example
+     * ```ts
+     * const response = await httpRequest('https://example.com/image.png')
+     * const arrayBuffer = response.arrayBuffer()
+     * console.log(arrayBuffer.byteLength)
+     * ```
+     */
+    arrayBuffer(): ArrayBuffer;
+    /**
+     * Raw response body as Buffer.
+     * Direct access to the underlying Node.js Buffer.
+     *
+     * @example
+     * ```ts
+     * const response = await httpRequest('https://example.com/data')
+     * console.log(response.body.length) // Size in bytes
+     * console.log(response.body.toString('hex')) // View as hex
+     * ```
+     */
+    body: Buffer;
+    /**
+     * HTTP response headers.
+     * Keys are lowercase header names, values can be strings or string arrays.
+     *
+     * @example
+     * ```ts
+     * const response = await httpRequest('https://example.com')
+     * console.log(response.headers['content-type'])
+     * console.log(response.headers['set-cookie']) // May be string[]
+     * ```
+     */
+    headers: IncomingHttpHeaders;
+    /**
+     * Parse response body as JSON.
+     * Type parameter `T` allows specifying the expected JSON structure.
+     *
+     * @template T - Expected JSON type (defaults to `unknown`)
+     * @returns Parsed JSON data
+     * @throws {SyntaxError} When response body is not valid JSON
+     *
+     * @example
+     * ```ts
+     * interface User { name: string; id: number }
+     * const response = await httpRequest('https://api.example.com/user')
+     * const user = response.json()
+     * console.log(user.name, user.id)
+     * ```
+     */
+    json(): T;
+    /**
+     * Whether the request was successful (status code 200-299).
+     *
+     * @example
+     * ```ts
+     * const response = await httpRequest('https://example.com/data')
+     * if (response.ok) {
+     *   console.log('Success:', response.json())
+     * } else {
+     *   console.error('Failed:', response.status, response.statusText)
+     * }
+     * ```
+     */
+    ok: boolean;
+    /**
+     * HTTP status code (e.g., 200, 404, 500).
+     *
+     * @example
+     * ```ts
+     * const response = await httpRequest('https://example.com')
+     * console.log(response.status) // 200, 404, etc.
+     * ```
+     */
+    status: number;
+    /**
+     * HTTP status message (e.g., "OK", "Not Found", "Internal Server Error").
+     *
+     * @example
+     * ```ts
+     * const response = await httpRequest('https://example.com')
+     * console.log(response.statusText) // "OK"
+     * ```
+     */
+    statusText: string;
+    /**
+     * Get response body as UTF-8 text string.
+     *
+     * @returns The response body as a string
+     *
+     * @example
+     * ```ts
+     * const response = await httpRequest('https://example.com')
+     * const html = response.text()
+     * console.log(html.includes(''))
+     * ```
+     */
+    text(): string;
+    /**
+     * The underlying Node.js IncomingResponse for advanced use cases
+     * (e.g., streaming, custom header inspection). Only available when
+     * the response was not consumed by the convenience methods.
+     */
+    rawResponse?: IncomingResponse | undefined;
+}
+/**
+ * Read and buffer a client-side IncomingResponse into an HttpResponse.
+ *
+ * Useful when you have a raw response from code that bypasses
+ * `httpRequest()` (e.g., multipart form-data uploads via `http.request()`,
+ * or responses from third-party HTTP libraries) and need to convert it
+ * into the standard HttpResponse interface.
+ *
+ * @example
+ * ```typescript
+ * const raw = await makeRawRequest('https://example.com/api')
+ * const response = await readIncomingResponse(raw)
+ * console.log(response.status, response.body.toString('utf8'))
+ * ```
+ */
+export declare function readIncomingResponse(msg: IncomingResponse): Promise;
+/**
+ * Error thrown when an HTTP response has a non-2xx status code
+ * and `throwOnError` is enabled. Carries the full `HttpResponse`
+ * so callers can inspect status, headers, and body.
+ */
+export declare class HttpResponseError extends Error {
+    response: HttpResponse;
+    constructor(response: HttpResponse, message?: string | undefined);
+}
+/**
+ * Parse a `Retry-After` HTTP header value into milliseconds.
+ *
+ * Supports both formats defined in RFC 7231 §7.1.3:
+ * - **delay-seconds**: integer number of seconds (e.g., `"120"`)
+ * - **HTTP-date**: an absolute date/time (e.g., `"Fri, 31 Dec 2027 23:59:59 GMT"`)
+ *
+ * When the header is an array (multiple values), the first element is used.
+ *
+ * @param value - The raw Retry-After header value(s)
+ * @returns Delay in milliseconds, or `undefined` if the value cannot be parsed
+ *
+ * @example
+ * ```ts
+ * const delay = parseRetryAfterHeader(response.headers['retry-after'])
+ * if (delay !== undefined) {
+ *   await new Promise(resolve => setTimeout(resolve, delay))
+ * }
+ * ```
+ */
+export declare function parseRetryAfterHeader(value: string | string[] | undefined): number | undefined;
+/**
+ * Redact sensitive HTTP headers for safe logging and telemetry.
+ *
+ * Replaces values of sensitive headers (Authorization, Cookie, etc.)
+ * with `[REDACTED]`. Non-sensitive headers are passed through unchanged.
+ * Array values are joined with `', '`.
+ *
+ * @param headers - HTTP headers to sanitize
+ * @returns A new object with sensitive values redacted
+ *
+ * @example
+ * ```ts
+ * const safe = sanitizeHeaders({
+ *   'authorization': 'Bearer secret',
+ *   'content-type': 'application/json'
+ * })
+ * // { authorization: '[REDACTED]', 'content-type': 'application/json' }
+ * ```
+ */
+export declare function sanitizeHeaders(headers: Record | undefined): Record;
+/**
+ * Configuration options for file downloads.
+ */
+export interface HttpDownloadOptions {
+    /**
+     * Custom CA certificates for TLS connections.
+     * When provided, these certificates are used for the download request.
+     * See `HttpRequestOptions.ca` for details.
+     */
+    ca?: string[] | undefined;
+    /**
+     * Whether to automatically follow HTTP redirects (3xx status codes).
+     * This is essential for downloading from services that use CDN redirects,
+     * such as GitHub release assets which return HTTP 302 to their CDN.
+     *
+     * @default true
+     *
+     * @example
+     * ```ts
+     * // Follow redirects (default) - works with GitHub releases
+     * await httpDownload(
+     *   'https://github.com/org/repo/releases/download/v1.0.0/file.zip',
+     *   '/tmp/file.zip'
+     * )
+     *
+     * // Don't follow redirects
+     * await httpDownload('https://example.com/file.zip', '/tmp/file.zip', {
+     *   followRedirects: false
+     * })
+     * ```
+     */
+    followRedirects?: boolean | undefined;
+    /**
+     * HTTP headers to send with the download request.
+     * A `User-Agent` header is automatically added if not provided.
+     *
+     * @example
+     * ```ts
+     * await httpDownload('https://example.com/file.zip', '/tmp/file.zip', {
+     *   headers: {
+     *     'Authorization': 'Bearer token123'
+     *   }
+     * })
+     * ```
+     */
+    headers?: Record | undefined;
+    /**
+     * Logger instance for automatic progress logging.
+     * When provided with `progressInterval`, will automatically log download progress.
+     * If both `onProgress` and `logger` are provided, `onProgress` takes precedence.
+     *
+     * @example
+     * ```ts
+     * import { getDefaultLogger } from '@socketsecurity/lib/logger'
+     *
+     * const logger = getDefaultLogger()
+     * await httpDownload('https://example.com/file.zip', '/tmp/file.zip', {
+     *   logger,
+     *   progressInterval: 10  // Log every 10%
+     * })
+     * // Output:
+     * //   Progress: 10% (5.2 MB / 52.0 MB)
+     * //   Progress: 20% (10.4 MB / 52.0 MB)
+     * //   ...
+     * ```
+     */
+    logger?: Logger | undefined;
+    /**
+     * Maximum number of redirects to follow before throwing an error.
+     * Only relevant when `followRedirects` is `true`.
+     *
+     * @default 5
+     *
+     * @example
+     * ```ts
+     * // Allow up to 10 redirects
+     * await httpDownload('https://example.com/many-redirects/file.zip', '/tmp/file.zip', {
+     *   maxRedirects: 10
+     * })
+     * ```
+     */
+    maxRedirects?: number | undefined;
+    /**
+     * Callback for tracking download progress.
+     * Called periodically as data is received.
+     * Takes precedence over `logger` if both are provided.
+     *
+     * @param downloaded - Number of bytes downloaded so far
+     * @param total - Total file size in bytes (from Content-Length header)
+     *
+     * @example
+     * ```ts
+     * await httpDownload('https://example.com/large-file.zip', '/tmp/file.zip', {
+     *   onProgress: (downloaded, total) => {
+     *     const percent = ((downloaded / total) * 100).toFixed(1)
+     *     console.log(`Progress: ${percent}%`)
+     *   }
+     * })
+     * ```
+     */
+    onProgress?: ((downloaded: number, total: number) => void) | undefined;
+    /**
+     * Progress reporting interval as a percentage (0-100).
+     * Only used when `logger` is provided.
+     * Progress will be logged each time the download advances by this percentage.
+     *
+     * @default 10
+     *
+     * @example
+     * ```ts
+     * // Log every 10%
+     * await httpDownload('https://example.com/file.zip', '/tmp/file.zip', {
+     *   logger: getDefaultLogger(),
+     *   progressInterval: 10
+     * })
+     *
+     * // Log every 25%
+     * await httpDownload('https://example.com/file.zip', '/tmp/file.zip', {
+     *   logger: getDefaultLogger(),
+     *   progressInterval: 25
+     * })
+     * ```
+     */
+    progressInterval?: number | undefined;
+    /**
+     * Number of retry attempts for failed downloads.
+     * Uses exponential backoff: delay = `retryDelay` * 2^attempt.
+     *
+     * @default 0
+     *
+     * @example
+     * ```ts
+     * // Retry up to 3 times for unreliable connections
+     * await httpDownload('https://example.com/file.zip', '/tmp/file.zip', {
+     *   retries: 3,
+     *   retryDelay: 2000
+     * })
+     * ```
+     */
+    retries?: number | undefined;
+    /**
+     * Initial delay in milliseconds before first retry.
+     * Subsequent retries use exponential backoff.
+     *
+     * @default 1000
+     */
+    retryDelay?: number | undefined;
+    /**
+     * Download timeout in milliseconds.
+     * If the download takes longer than this, it will be aborted.
+     *
+     * @default 120000
+     *
+     * @example
+     * ```ts
+     * // 5 minute timeout for large files
+     * await httpDownload('https://example.com/huge-file.zip', '/tmp/file.zip', {
+     *   timeout: 300000
+     * })
+     * ```
+     */
+    timeout?: number | undefined;
+    /**
+     * Expected SHA256 hash of the downloaded file.
+     * If provided, the download will fail if the computed hash doesn't match.
+     * The hash should be a lowercase hex string (64 characters).
+     *
+     * Use `fetchChecksums()` to fetch hashes from a checksums URL, then pass
+     * the specific hash here.
+     *
+     * @example
+     * ```ts
+     * // Verify download integrity with direct hash
+     * await httpDownload('https://example.com/file.zip', '/tmp/file.zip', {
+     *   sha256: 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
+     * })
+     *
+     * // Verify using checksums from a URL
+     * const checksums = await fetchChecksums('https://example.com/checksums.txt')
+     * await httpDownload('https://example.com/file.zip', '/tmp/file.zip', {
+     *   sha256: checksums['file.zip']
+     * })
+     * ```
+     */
+    sha256?: string | undefined;
+}
+/**
+ * Result of a successful file download.
+ */
+export interface HttpDownloadResult {
+    /** HTTP response headers from the final response (after redirects). */
+    headers: IncomingHttpHeaders;
+    /** Whether the download succeeded (status 200-299). Always true on success (non-2xx throws). */
+    ok: true;
+    /** Absolute path where the file was saved. */
+    path: string;
+    /** Total size of downloaded file in bytes. */
+    size: number;
+    /** HTTP status code from the final response (after redirects). */
+    status: number;
+    /** HTTP status message from the final response (after redirects). */
+    statusText: string;
+}
+/**
+ * Map of filenames to their SHA256 hashes.
+ * Keys are filenames (not paths), values are lowercase hex-encoded SHA256 hashes.
+ *
+ * @example
+ * ```ts
+ * const checksums: Checksums = {
+ *   'file.zip': 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
+ *   'other.tar.gz': 'abc123...'
+ * }
+ * ```
+ */
+export type Checksums = Record;
+/**
+ * Parse a checksums file text into a filename-to-hash map.
+ *
+ * Supports standard checksums file formats:
+ * - BSD style: "SHA256 (filename) = hash"
+ * - GNU style: "hash  filename" (two spaces)
+ * - Simple style: "hash filename" (single space)
+ *
+ * Lines starting with '#' are treated as comments and ignored.
+ * Empty lines are ignored.
+ *
+ * @param text - Raw text content of a checksums file
+ * @returns Map of filenames to lowercase SHA256 hashes
+ *
+ * @example
+ * ```ts
+ * const text = `
+ * # SHA256 checksums
+ * e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  file.zip
+ * abc123def456...  other.tar.gz
+ * `
+ * const checksums = parseChecksums(text)
+ * console.log(checksums['file.zip']) // 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
+ * ```
+ */
+export declare function parseChecksums(text: string): Checksums;
+/**
+ * Options for fetching checksums from a URL.
+ */
+export interface FetchChecksumsOptions {
+    /**
+     * Custom CA certificates for TLS connections.
+     * See `HttpRequestOptions.ca` for details.
+     */
+    ca?: string[] | undefined;
+    /**
+     * HTTP headers to send with the request.
+     */
+    headers?: Record | undefined;
+    /**
+     * Request timeout in milliseconds.
+     * @default 30000
+     */
+    timeout?: number | undefined;
+}
+/**
+ * Fetch and parse a checksums file from a URL.
+ *
+ * This is useful for verifying downloads from GitHub releases which typically
+ * publish a checksums.txt file alongside release assets.
+ *
+ * @param url - URL to the checksums file
+ * @param options - Request options
+ * @returns Map of filenames to lowercase SHA256 hashes
+ * @throws {Error} When the checksums file cannot be fetched
+ *
+ * @example
+ * ```ts
+ * // Fetch checksums from GitHub release
+ * const checksums = await fetchChecksums(
+ *   'https://github.com/org/repo/releases/download/v1.0.0/checksums.txt'
+ * )
+ *
+ * // Use with httpDownload
+ * await httpDownload(
+ *   'https://github.com/org/repo/releases/download/v1.0.0/tool_linux.tar.gz',
+ *   '/tmp/tool.tar.gz',
+ *   { sha256: checksums['tool_linux.tar.gz'] }
+ * )
+ * ```
+ */
+export declare function fetchChecksums(url: string, options?: FetchChecksumsOptions | undefined): Promise;
+/**
+ * Build an enriched error message based on the error code.
+ * Generic guidance (no product-specific branding).
+ *
+ * @example
+ * ```typescript
+ * try {
+ *   await fetch('https://api.example.com')
+ * } catch (err) {
+ *   console.error(enrichErrorMessage('https://api.example.com', 'GET', err))
+ * }
+ * ```
+ */
+export declare function enrichErrorMessage(url: string, method: string, error: NodeJS.ErrnoException): string;
+/**
+ * Download a file from a URL to a local path with redirect support, retry logic, and progress callbacks.
+ * Uses streaming to avoid loading entire file in memory.
+ *
+ * The download is streamed directly to disk, making it memory-efficient even for
+ * large files. Progress callbacks allow for real-time download status updates.
+ *
+ * Automatically follows HTTP redirects (3xx status codes) by default, making it suitable
+ * for downloading from services like GitHub releases that redirect to CDN URLs.
+ *
+ * @param url - The URL to download from (must start with http:// or https://)
+ * @param destPath - Absolute path where the file should be saved
+ * @param options - Download configuration options
+ * @returns Promise resolving to download result with path and size
+ * @throws {Error} When all retries are exhausted, download fails, or file cannot be written
+ *
+ * @example
+ * ```ts
+ * // Simple download
+ * const result = await httpDownload(
+ *   'https://example.com/file.zip',
+ *   '/tmp/file.zip'
+ * )
+ * console.log(`Downloaded ${result.size} bytes to ${result.path}`)
+ *
+ * // Download from GitHub releases (handles 302 redirect automatically)
+ * await httpDownload(
+ *   'https://github.com/org/repo/releases/download/v1.0.0/binary.tar.gz',
+ *   '/tmp/binary.tar.gz'
+ * )
+ *
+ * // With progress tracking
+ * await httpDownload(
+ *   'https://example.com/large-file.zip',
+ *   '/tmp/file.zip',
+ *   {
+ *     onProgress: (downloaded, total) => {
+ *       const percent = ((downloaded / total) * 100).toFixed(1)
+ *       console.log(`Progress: ${percent}% (${downloaded}/${total} bytes)`)
+ *     }
+ *   }
+ * )
+ *
+ * // With retries and custom timeout
+ * await httpDownload(
+ *   'https://example.com/file.zip',
+ *   '/tmp/file.zip',
+ *   {
+ *     retries: 3,
+ *     retryDelay: 2000,
+ *     timeout: 300000, // 5 minutes
+ *     headers: { 'Authorization': 'Bearer token123' }
+ *   }
+ * )
+ * ```
+ */
+export declare function httpDownload(url: string, destPath: string, options?: HttpDownloadOptions | undefined): Promise;
+/**
+ * Perform an HTTP request and parse JSON response.
+ * Convenience wrapper around `httpRequest` for JSON API calls.
+ * Automatically sets appropriate headers for JSON requests:
+ * - `Accept: application/json` (always)
+ * - `Content-Type: application/json` (when body is present)
+ * User-provided headers override these defaults.
+ *
+ * @template T - Expected JSON response type (defaults to `unknown`)
+ * @param url - The URL to request (must start with http:// or https://)
+ * @param options - Request configuration options
+ * @returns Promise resolving to parsed JSON data
+ * @throws {Error} When request fails, response is not ok (status < 200 or >= 300), or JSON parsing fails
+ *
+ * @example
+ * ```ts
+ * // Simple JSON GET (automatically sets Accept: application/json)
+ * const data = await httpJson('https://api.example.com/data')
+ * console.log(data)
+ *
+ * // With type safety
+ * interface User { id: number; name: string; email: string }
+ * const user = await httpJson('https://api.example.com/user/123')
+ * console.log(user.name, user.email)
+ *
+ * // POST with JSON body (automatically sets Content-Type: application/json)
+ * const result = await httpJson('https://api.example.com/users', {
+ *   method: 'POST',
+ *   body: JSON.stringify({ name: 'Alice', email: 'alice@example.com' })
+ * })
+ *
+ * // With custom headers and retries
+ * const data = await httpJson('https://api.example.com/data', {
+ *   headers: {
+ *     'Authorization': 'Bearer token123'
+ *   },
+ *   retries: 3,
+ *   retryDelay: 1000
+ * })
+ * ```
+ */
+export declare function httpJson(url: string, options?: HttpRequestOptions | undefined): Promise;
+/**
+ * Make an HTTP/HTTPS request with retry logic and redirect support.
+ * Provides a fetch-like API using Node.js native http/https modules.
+ *
+ * This is the main entry point for making HTTP requests. It handles retries,
+ * redirects, timeouts, and provides a fetch-compatible response interface.
+ *
+ * @param url - The URL to request (must start with http:// or https://)
+ * @param options - Request configuration options
+ * @returns Promise resolving to response object with `.json()`, `.text()`, etc.
+ * @throws {Error} When all retries are exhausted, timeout occurs, or non-retryable error happens
+ *
+ * @example
+ * ```ts
+ * // Simple GET request
+ * const response = await httpRequest('https://api.example.com/data')
+ * const data = response.json()
+ *
+ * // POST with JSON body
+ * const response = await httpRequest('https://api.example.com/users', {
+ *   method: 'POST',
+ *   headers: { 'Content-Type': 'application/json' },
+ *   body: JSON.stringify({ name: 'Alice', email: 'alice@example.com' })
+ * })
+ *
+ * // With retries and timeout
+ * const response = await httpRequest('https://api.example.com/data', {
+ *   retries: 3,
+ *   retryDelay: 1000,
+ *   timeout: 60000
+ * })
+ *
+ * // Don't follow redirects
+ * const response = await httpRequest('https://example.com/redirect', {
+ *   followRedirects: false
+ * })
+ * console.log(response.status) // 301, 302, etc.
+ * ```
+ */
+export declare function httpRequest(url: string, options?: HttpRequestOptions | undefined): Promise;
+/**
+ * Perform an HTTP request and return text response.
+ * Convenience wrapper around `httpRequest` for fetching text content.
+ * Automatically sets appropriate headers for text requests:
+ * - `Accept: text/plain` (always)
+ * - `Content-Type: text/plain` (when body is present)
+ * User-provided headers override these defaults.
+ *
+ * @param url - The URL to request (must start with http:// or https://)
+ * @param options - Request configuration options
+ * @returns Promise resolving to response body as UTF-8 string
+ * @throws {Error} When request fails or response is not ok (status < 200 or >= 300)
+ *
+ * @example
+ * ```ts
+ * // Fetch HTML (automatically sets Accept: text/plain)
+ * const html = await httpText('https://example.com')
+ * console.log(html.includes(''))
+ *
+ * // Fetch plain text
+ * const text = await httpText('https://example.com/file.txt')
+ * console.log(text)
+ *
+ * // POST with text body (automatically sets Content-Type: text/plain)
+ * const result = await httpText('https://example.com/api', {
+ *   method: 'POST',
+ *   body: 'raw text data'
+ * })
+ *
+ * // With custom headers (override defaults)
+ * const text = await httpText('https://example.com/data.txt', {
+ *   headers: {
+ *     'Authorization': 'Bearer token123',
+ *     'Accept': 'text/html'  // Override default Accept header
+ *   }
+ * })
+ *
+ * // With timeout
+ * const text = await httpText('https://example.com/large-file.txt', {
+ *   timeout: 60000 // 1 minute
+ * })
+ * ```
+ */
+export declare function httpText(url: string, options?: HttpRequestOptions | undefined): Promise;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/http-request.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/http-request.js
new file mode 100644
index 00000000..cd7e97f7
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/http-request.js
@@ -0,0 +1,727 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var http_request_exports = {};
+__export(http_request_exports, {
+  HttpResponseError: () => HttpResponseError,
+  enrichErrorMessage: () => enrichErrorMessage,
+  fetchChecksums: () => fetchChecksums,
+  httpDownload: () => httpDownload,
+  httpJson: () => httpJson,
+  httpRequest: () => httpRequest,
+  httpText: () => httpText,
+  parseChecksums: () => parseChecksums,
+  parseRetryAfterHeader: () => parseRetryAfterHeader,
+  readIncomingResponse: () => readIncomingResponse,
+  sanitizeHeaders: () => sanitizeHeaders
+});
+module.exports = __toCommonJS(http_request_exports);
+var import_socket = require("./constants/socket");
+var import_fs = require("./fs.js");
+let _fs;
+// @__NO_SIDE_EFFECTS__
+function getFs() {
+  if (_fs === void 0) {
+    _fs = require("fs");
+  }
+  return _fs;
+}
+let _crypto;
+let _http;
+let _https;
+// @__NO_SIDE_EFFECTS__
+function getCrypto() {
+  if (_crypto === void 0) {
+    _crypto = require("crypto");
+  }
+  return _crypto;
+}
+// @__NO_SIDE_EFFECTS__
+function getHttp() {
+  if (_http === void 0) {
+    _http = require("http");
+  }
+  return _http;
+}
+// @__NO_SIDE_EFFECTS__
+function getHttps() {
+  if (_https === void 0) {
+    _https = require("https");
+  }
+  return _https;
+}
+async function readIncomingResponse(msg) {
+  const chunks = [];
+  for await (const chunk of msg) {
+    chunks.push(chunk);
+  }
+  const body = Buffer.concat(chunks);
+  const status = msg.statusCode ?? 0;
+  const statusText = msg.statusMessage ?? "";
+  return {
+    arrayBuffer: () => body.buffer.slice(
+      body.byteOffset,
+      body.byteOffset + body.byteLength
+    ),
+    body,
+    headers: msg.headers,
+    json: () => JSON.parse(body.toString("utf8")),
+    ok: status >= 200 && status < 300,
+    rawResponse: msg,
+    status,
+    statusText,
+    text: () => body.toString("utf8")
+  };
+}
+class HttpResponseError extends Error {
+  response;
+  constructor(response, message) {
+    const statusCode = response.status ?? "unknown";
+    const statusMessage = response.statusText || "No status message";
+    super(message ?? `HTTP ${statusCode}: ${statusMessage}`);
+    this.name = "HttpResponseError";
+    this.response = response;
+    Error.captureStackTrace(this, HttpResponseError);
+  }
+}
+function parseRetryAfterHeader(value) {
+  if (!value) {
+    return void 0;
+  }
+  const raw = Array.isArray(value) ? value[0] : value;
+  if (!raw) {
+    return void 0;
+  }
+  const trimmed = raw.trim();
+  if (/^\d+$/.test(trimmed)) {
+    const seconds = Number(trimmed);
+    return seconds * 1e3;
+  }
+  const date = new Date(raw);
+  if (!Number.isNaN(date.getTime())) {
+    const delayMs = date.getTime() - Date.now();
+    if (delayMs > 0) {
+      return delayMs;
+    }
+  }
+  return void 0;
+}
+function sanitizeHeaders(headers) {
+  if (!headers) {
+    return {};
+  }
+  const sensitiveHeaders = /* @__PURE__ */ new Set([
+    "authorization",
+    "cookie",
+    "proxy-authorization",
+    "proxy-authenticate",
+    "set-cookie",
+    "www-authenticate"
+  ]);
+  const result = { __proto__: null };
+  for (const key of Object.keys(headers)) {
+    const value = headers[key];
+    if (sensitiveHeaders.has(key.toLowerCase())) {
+      result[key] = "[REDACTED]";
+    } else if (Array.isArray(value)) {
+      result[key] = value.join(", ");
+    } else if (value !== void 0 && value !== null) {
+      result[key] = String(value);
+    }
+  }
+  return result;
+}
+function parseChecksums(text) {
+  const checksums = { __proto__: null };
+  for (const line of text.split("\n")) {
+    const trimmed = line.trim();
+    if (!trimmed || trimmed.startsWith("#")) {
+      continue;
+    }
+    const bsdMatch = trimmed.match(
+      /^SHA256\s+\((.+)\)\s+=\s+([a-fA-F0-9]{64})$/
+    );
+    if (bsdMatch) {
+      checksums[bsdMatch[1]] = bsdMatch[2].toLowerCase();
+      continue;
+    }
+    const gnuMatch = trimmed.match(/^([a-fA-F0-9]{64})\s+(.+)$/);
+    if (gnuMatch) {
+      checksums[gnuMatch[2]] = gnuMatch[1].toLowerCase();
+    }
+  }
+  return checksums;
+}
+async function fetchChecksums(url, options) {
+  const {
+    ca,
+    headers = {},
+    timeout = 3e4
+  } = {
+    __proto__: null,
+    ...options
+  };
+  const response = await httpRequest(url, { ca, headers, timeout });
+  if (!response.ok) {
+    throw new Error(
+      `Failed to fetch checksums from ${url}: ${response.status} ${response.statusText}`
+    );
+  }
+  return parseChecksums(response.body.toString("utf8"));
+}
+async function httpDownloadAttempt(url, destPath, options) {
+  const {
+    ca,
+    followRedirects = true,
+    headers = {},
+    maxRedirects = 5,
+    onProgress,
+    timeout = 12e4
+  } = { __proto__: null, ...options };
+  const response = await httpRequestAttempt(url, {
+    ca,
+    followRedirects,
+    headers,
+    maxRedirects,
+    method: "GET",
+    stream: true,
+    timeout
+  });
+  if (!response.ok) {
+    throw new Error(
+      `Download failed: HTTP ${response.status} ${response.statusText}`
+    );
+  }
+  const res = response.rawResponse;
+  if (!res) {
+    throw new Error("Stream response missing rawResponse");
+  }
+  const { createWriteStream } = /* @__PURE__ */ getFs();
+  const totalSize = Number.parseInt(
+    response.headers["content-length"] || "0",
+    10
+  );
+  return await new Promise((resolve, reject) => {
+    let downloadedSize = 0;
+    const fileStream = createWriteStream(destPath);
+    fileStream.on("error", (error) => {
+      fileStream.close();
+      reject(
+        new Error(`Failed to write file: ${error.message}`, { cause: error })
+      );
+    });
+    res.on("data", (chunk) => {
+      downloadedSize += chunk.length;
+      if (onProgress && totalSize > 0) {
+        onProgress(downloadedSize, totalSize);
+      }
+    });
+    res.on("end", () => {
+      fileStream.close(() => {
+        resolve({
+          headers: response.headers,
+          ok: true,
+          path: destPath,
+          size: downloadedSize,
+          status: response.status,
+          statusText: response.statusText
+        });
+      });
+    });
+    res.on("error", (error) => {
+      fileStream.close();
+      reject(error);
+    });
+    res.pipe(fileStream);
+  });
+}
+function enrichErrorMessage(url, method, error) {
+  const code = error.code;
+  let message = `${method} request failed: ${url}`;
+  if (code === "ECONNREFUSED") {
+    message += "\n\u2192 Connection refused. Server is unreachable.\n\u2192 Check: Network connectivity and firewall settings.";
+  } else if (code === "ENOTFOUND") {
+    message += "\n\u2192 DNS lookup failed. Cannot resolve hostname.\n\u2192 Check: Internet connection and DNS settings.";
+  } else if (code === "ETIMEDOUT") {
+    message += "\n\u2192 Connection timed out. Network or server issue.\n\u2192 Try: Check network connectivity and retry.";
+  } else if (code === "ECONNRESET") {
+    message += "\n\u2192 Connection reset by server. Possible network interruption.\n\u2192 Try: Retry the request.";
+  } else if (code === "EPIPE") {
+    message += "\n\u2192 Broken pipe. Server closed connection unexpectedly.\n\u2192 Check: Authentication credentials and permissions.";
+  } else if (code === "CERT_HAS_EXPIRED" || code === "UNABLE_TO_VERIFY_LEAF_SIGNATURE") {
+    message += "\n\u2192 SSL/TLS certificate error.\n\u2192 Check: System time and date are correct.\n\u2192 Try: Update CA certificates on your system.";
+  } else if (code) {
+    message += `
+\u2192 Error code: ${code}`;
+  }
+  return message;
+}
+async function httpRequestAttempt(url, options) {
+  const {
+    body,
+    ca,
+    followRedirects = true,
+    headers = {},
+    hooks,
+    maxRedirects = 5,
+    maxResponseSize,
+    method = "GET",
+    stream = false,
+    timeout = 3e4
+  } = { __proto__: null, ...options };
+  const startTime = Date.now();
+  const streamHeaders = body && typeof body === "object" && "getHeaders" in body && typeof body.getHeaders === "function" ? body.getHeaders() : void 0;
+  const mergedHeaders = {
+    "User-Agent": import_socket.SOCKET_LIB_USER_AGENT,
+    ...streamHeaders,
+    ...headers
+  };
+  hooks?.onRequest?.({ method, url, headers: mergedHeaders, timeout });
+  return await new Promise((resolve, reject) => {
+    let settled = false;
+    const resolveOnce = (response) => {
+      if (settled) {
+        return;
+      }
+      settled = true;
+      resolve(response);
+    };
+    const rejectOnce = (err) => {
+      if (settled) {
+        return;
+      }
+      settled = true;
+      if (body && typeof body === "object" && typeof body.destroy === "function") {
+        ;
+        body.destroy();
+      }
+      emitResponse({ error: err });
+      reject(err);
+    };
+    const parsedUrl = new URL(url);
+    const isHttps = parsedUrl.protocol === "https:";
+    const httpModule = isHttps ? /* @__PURE__ */ getHttps() : /* @__PURE__ */ getHttp();
+    const requestOptions = {
+      headers: mergedHeaders,
+      hostname: parsedUrl.hostname,
+      method,
+      path: parsedUrl.pathname + parsedUrl.search,
+      port: parsedUrl.port,
+      timeout
+    };
+    if (ca && isHttps) {
+      requestOptions["ca"] = ca;
+    }
+    const emitResponse = (info) => {
+      try {
+        hooks?.onResponse?.({
+          duration: Date.now() - startTime,
+          method,
+          url,
+          ...info
+        });
+      } catch {
+      }
+    };
+    const request = httpModule.request(
+      requestOptions,
+      (res) => {
+        if (followRedirects && res.statusCode && res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
+          res.resume();
+          emitResponse({
+            headers: res.headers,
+            status: res.statusCode,
+            statusText: res.statusMessage
+          });
+          if (maxRedirects <= 0) {
+            settled = true;
+            reject(
+              new Error(
+                `Too many redirects (exceeded maximum: ${maxRedirects})`
+              )
+            );
+            return;
+          }
+          const redirectUrl = res.headers.location.startsWith("http") ? res.headers.location : new URL(res.headers.location, url).toString();
+          const redirectParsed = new URL(redirectUrl);
+          if (isHttps && redirectParsed.protocol !== "https:") {
+            settled = true;
+            reject(
+              new Error(
+                `Redirect from HTTPS to HTTP is not allowed: ${redirectUrl}`
+              )
+            );
+            return;
+          }
+          settled = true;
+          resolve(
+            httpRequestAttempt(redirectUrl, {
+              body,
+              ca,
+              followRedirects,
+              headers,
+              hooks,
+              maxRedirects: maxRedirects - 1,
+              maxResponseSize,
+              method,
+              stream,
+              timeout
+            })
+          );
+          return;
+        }
+        if (stream) {
+          const status = res.statusCode || 0;
+          const statusText = res.statusMessage || "";
+          const ok = status >= 200 && status < 300;
+          emitResponse({
+            headers: res.headers,
+            status,
+            statusText
+          });
+          const emptyBody = Buffer.alloc(0);
+          resolveOnce({
+            arrayBuffer: () => emptyBody.buffer,
+            body: emptyBody,
+            headers: res.headers,
+            json: () => {
+              throw new Error("Cannot parse JSON from a streaming response");
+            },
+            ok,
+            rawResponse: res,
+            status,
+            statusText,
+            text: () => ""
+          });
+          return;
+        }
+        const chunks = [];
+        let totalBytes = 0;
+        res.on("data", (chunk) => {
+          totalBytes += chunk.length;
+          if (maxResponseSize && totalBytes > maxResponseSize) {
+            res.destroy();
+            request.destroy();
+            const sizeMB = (totalBytes / (1024 * 1024)).toFixed(2);
+            const maxMB = (maxResponseSize / (1024 * 1024)).toFixed(2);
+            rejectOnce(
+              new Error(
+                `Response exceeds maximum size limit (${sizeMB}MB > ${maxMB}MB)`
+              )
+            );
+            return;
+          }
+          chunks.push(chunk);
+        });
+        res.on("end", () => {
+          if (settled) {
+            return;
+          }
+          const responseBody = Buffer.concat(chunks);
+          const ok = res.statusCode !== void 0 && res.statusCode >= 200 && res.statusCode < 300;
+          const response = {
+            arrayBuffer() {
+              return responseBody.buffer.slice(
+                responseBody.byteOffset,
+                responseBody.byteOffset + responseBody.byteLength
+              );
+            },
+            body: responseBody,
+            headers: res.headers,
+            json() {
+              return JSON.parse(responseBody.toString("utf8"));
+            },
+            ok,
+            rawResponse: res,
+            status: res.statusCode || 0,
+            statusText: res.statusMessage || "",
+            text() {
+              return responseBody.toString("utf8");
+            }
+          };
+          emitResponse({
+            headers: res.headers,
+            status: res.statusCode,
+            statusText: res.statusMessage
+          });
+          resolveOnce(response);
+        });
+        res.on("error", (error) => {
+          rejectOnce(error);
+        });
+      }
+    );
+    request.on("error", (error) => {
+      const message = enrichErrorMessage(
+        url,
+        method,
+        error
+      );
+      rejectOnce(new Error(message, { cause: error }));
+    });
+    request.on("timeout", () => {
+      request.destroy();
+      rejectOnce(
+        new Error(
+          `${method} request timed out after ${timeout}ms: ${url}
+\u2192 Server did not respond in time.
+\u2192 Try: Increase timeout or check network connectivity.`
+        )
+      );
+    });
+    if (body) {
+      if (typeof body === "object" && typeof body.pipe === "function") {
+        const stream2 = body;
+        stream2.on("error", (err) => {
+          request.destroy();
+          rejectOnce(err);
+        });
+        stream2.pipe(request);
+        return;
+      }
+      request.write(body);
+      request.end();
+    } else {
+      request.end();
+    }
+  });
+}
+async function httpDownload(url, destPath, options) {
+  const {
+    ca,
+    followRedirects = true,
+    headers = {},
+    logger,
+    maxRedirects = 5,
+    onProgress,
+    progressInterval = 10,
+    retries = 0,
+    retryDelay = 1e3,
+    sha256,
+    timeout = 12e4
+  } = { __proto__: null, ...options };
+  let progressCallback;
+  if (onProgress) {
+    progressCallback = onProgress;
+  } else if (logger) {
+    let lastPercent = 0;
+    progressCallback = (downloaded, total) => {
+      const percent = total === 0 ? 0 : Math.floor(downloaded / total * 100);
+      if (percent >= lastPercent + progressInterval) {
+        logger.log(
+          `  Progress: ${percent}% (${(downloaded / 1024 / 1024).toFixed(1)} MB / ${(total / 1024 / 1024).toFixed(1)} MB)`
+        );
+        lastPercent = percent;
+      }
+    };
+  }
+  const crypto = /* @__PURE__ */ getCrypto();
+  const fs = /* @__PURE__ */ getFs();
+  const tempSuffix = crypto.randomBytes(6).toString("hex");
+  const tempPath = `${destPath}.${tempSuffix}.download`;
+  if (fs.existsSync(tempPath)) {
+    await (0, import_fs.safeDelete)(tempPath);
+  }
+  let lastError;
+  for (let attempt = 0; attempt <= retries; attempt++) {
+    try {
+      const result = await httpDownloadAttempt(url, tempPath, {
+        ca,
+        followRedirects,
+        headers,
+        maxRedirects,
+        onProgress: progressCallback,
+        timeout
+      });
+      if (sha256) {
+        const fileContent = await fs.promises.readFile(tempPath);
+        const computedHash = crypto.createHash("sha256").update(fileContent).digest("hex");
+        const expectedHash = sha256.toLowerCase();
+        if (computedHash.length !== expectedHash.length || !crypto.timingSafeEqual(
+          Buffer.from(computedHash),
+          Buffer.from(expectedHash)
+        )) {
+          await (0, import_fs.safeDelete)(tempPath);
+          throw new Error(
+            `Checksum verification failed for ${url}
+Expected: ${expectedHash}
+Computed: ${computedHash}`
+          );
+        }
+      }
+      await fs.promises.rename(tempPath, destPath);
+      return {
+        ...result,
+        path: destPath
+      };
+    } catch (e) {
+      lastError = e;
+      if (fs.existsSync(tempPath)) {
+        await (0, import_fs.safeDelete)(tempPath);
+      }
+      if (attempt === retries) {
+        break;
+      }
+      const delayMs = retryDelay * 2 ** attempt;
+      await new Promise((resolve) => setTimeout(resolve, delayMs));
+    }
+  }
+  throw lastError || new Error("Download failed after retries");
+}
+async function httpJson(url, options) {
+  const {
+    body,
+    headers = {},
+    ...restOptions
+  } = {
+    __proto__: null,
+    ...options
+  };
+  const defaultHeaders = {
+    Accept: "application/json"
+  };
+  if (body) {
+    defaultHeaders["Content-Type"] = "application/json";
+  }
+  const mergedHeaders = {
+    ...defaultHeaders,
+    ...headers
+  };
+  const response = await httpRequest(url, {
+    body,
+    headers: mergedHeaders,
+    ...restOptions
+  });
+  if (!response.ok) {
+    throw new Error(`HTTP ${response.status}: ${response.statusText}`);
+  }
+  try {
+    return response.json();
+  } catch (e) {
+    throw new Error("Failed to parse JSON response", { cause: e });
+  }
+}
+async function httpRequest(url, options) {
+  const {
+    body,
+    ca,
+    followRedirects = true,
+    headers = {},
+    hooks,
+    maxRedirects = 5,
+    maxResponseSize,
+    method = "GET",
+    onRetry,
+    retries = 0,
+    retryDelay = 1e3,
+    stream = false,
+    throwOnError = false,
+    timeout = 3e4
+  } = { __proto__: null, ...options };
+  const isStreamBody = body !== void 0 && typeof body === "object" && typeof body.pipe === "function";
+  if (isStreamBody && retries > 0) {
+    throw new Error(
+      "Streaming body (Readable/FormData) cannot be used with retries. Streams are consumed on first attempt and cannot be replayed. Set retries: 0 or buffer the body as a string/Buffer."
+    );
+  }
+  const attemptOpts = {
+    body,
+    ca,
+    // Disable redirect following for stream bodies — the stream is consumed
+    // on the first request and cannot be re-piped to the redirect target.
+    followRedirects: isStreamBody ? false : followRedirects,
+    headers,
+    hooks,
+    maxRedirects,
+    maxResponseSize,
+    method,
+    stream,
+    timeout
+  };
+  let lastError;
+  for (let attempt = 0; attempt <= retries; attempt++) {
+    try {
+      const response = await httpRequestAttempt(url, attemptOpts);
+      if (throwOnError && !response.ok) {
+        throw new HttpResponseError(response);
+      }
+      return response;
+    } catch (e) {
+      lastError = e;
+      if (attempt === retries) {
+        break;
+      }
+      const delayMs = retryDelay * 2 ** attempt;
+      if (onRetry) {
+        const retryResult = onRetry(attempt + 1, e, delayMs);
+        if (retryResult === false) {
+          break;
+        }
+        const actualDelay = typeof retryResult === "number" && !Number.isNaN(retryResult) ? Math.max(0, retryResult) : delayMs;
+        await new Promise((resolve) => setTimeout(resolve, actualDelay));
+      } else {
+        await new Promise((resolve) => setTimeout(resolve, delayMs));
+      }
+    }
+  }
+  throw lastError || new Error("Request failed after retries");
+}
+async function httpText(url, options) {
+  const {
+    body,
+    headers = {},
+    ...restOptions
+  } = {
+    __proto__: null,
+    ...options
+  };
+  const defaultHeaders = {
+    Accept: "text/plain"
+  };
+  if (body) {
+    defaultHeaders["Content-Type"] = "text/plain";
+  }
+  const mergedHeaders = {
+    ...defaultHeaders,
+    ...headers
+  };
+  const response = await httpRequest(url, {
+    body,
+    headers: mergedHeaders,
+    ...restOptions
+  });
+  if (!response.ok) {
+    throw new Error(`HTTP ${response.status}: ${response.statusText}`);
+  }
+  return response.text();
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  HttpResponseError,
+  enrichErrorMessage,
+  fetchChecksums,
+  httpDownload,
+  httpJson,
+  httpRequest,
+  httpText,
+  parseChecksums,
+  parseRetryAfterHeader,
+  readIncomingResponse,
+  sanitizeHeaders
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ipc.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ipc.d.ts
new file mode 100644
index 00000000..b31906fb
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ipc.d.ts
@@ -0,0 +1,366 @@
+import { z } from './zod';
+// Define BufferEncoding type for TypeScript compatibility.
+type BufferEncoding = globalThis.BufferEncoding;
+/**
+ * IPC handshake schema - used for initial connection establishment.
+ * The handshake includes version info and authentication tokens.
+ * @internal Exported for testing purposes.
+ */
+export declare const IpcHandshakeSchema: z.ZodObject<{
+    id: z.ZodString;
+    timestamp: z.ZodNumber;
+    type: z.ZodLiteral<"handshake">;
+    data: z.ZodObject<{
+        version: z.ZodString;
+        pid: z.ZodNumber;
+        apiToken: z.ZodOptional;
+        appName: z.ZodString;
+    }, z.core.$strip>;
+}, z.core.$strip>;
+/**
+ * TypeScript interfaces for IPC communication.
+ * These types ensure type consistency across the IPC module.
+ */
+/**
+ * Base IPC message interface.
+ * All IPC messages must conform to this structure.
+ */
+export interface IpcMessage {
+    /** Unique identifier for message tracking and response correlation. */
+    id: string;
+    /** Unix timestamp for freshness validation and replay prevention. */
+    timestamp: number;
+    /** Message type identifier for routing and handling. */
+    type: string;
+    /** Payload data - can be any JSON-serializable value. */
+    data: T;
+}
+/**
+ * IPC handshake message interface.
+ * Used for initial connection establishment.
+ */
+export interface IpcHandshake extends IpcMessage<{
+    /** Protocol version for compatibility checking. */
+    version: string;
+    /** Process ID for identification. */
+    pid: number;
+    /** Optional API token for authentication. */
+    apiToken?: string;
+    /** Application name for multi-app support. */
+    appName: string;
+}> {
+    type: 'handshake';
+}
+/**
+ * IPC stub file interface.
+ * Represents the structure of stub files used for filesystem-based IPC.
+ */
+export interface IpcStub {
+    /** The actual data payload. */
+    data: unknown;
+    /** Process ID that created the stub. */
+    pid: number;
+    /** Creation timestamp for age validation. */
+    timestamp: number;
+}
+/**
+ * Options for IPC communication
+ */
+export interface IpcOptions {
+    /** Text encoding for message serialization. */
+    encoding?: BufferEncoding;
+    /** Timeout in milliseconds for async operations. */
+    timeout?: number;
+}
+/**
+ * Create a unique IPC channel identifier for message correlation.
+ *
+ * Generates a unique identifier that combines:
+ * - A prefix for namespacing (defaults to 'socket')
+ * - The current process ID for process identification
+ * - A random hex string for uniqueness
+ *
+ * @param prefix - Optional prefix to namespace the channel ID
+ * @returns A unique channel identifier string
+ *
+ * @example
+ * ```typescript
+ * const channelId = createIpcChannelId('socket-cli')
+ * // Returns: 'socket-cli-12345-a1b2c3d4e5f6g7h8'
+ * ```
+ */
+export declare function createIpcChannelId(prefix?: string): string;
+/**
+ * Get the IPC stub path for a given application.
+ *
+ * This function generates a unique file path for IPC stub files that are used
+ * to pass data between processes. The stub files are stored in a hidden directory
+ * within the system's temporary folder.
+ *
+ * ## Path Structure:
+ * - Base: System temp directory (e.g., /tmp on Unix, %TEMP% on Windows)
+ * - Directory: `.socket-ipc/{appName}/`
+ * - Filename: `stub-{pid}.json`
+ *
+ * ## Security Features:
+ * - Files are isolated per application via appName parameter
+ * - Process ID in filename prevents collisions between concurrent processes
+ * - Temporary directory location ensures automatic cleanup on system restart
+ *
+ * @param appName - The application identifier (e.g., 'socket-cli', 'socket-dlx')
+ * @returns Full path to the IPC stub file
+ *
+ * @example
+ * ```typescript
+ * const stubPath = getIpcStubPath('socket-cli')
+ * // Returns: '/tmp/.socket-ipc/socket-cli/stub-12345.json' (Unix)
+ * // Returns: 'C:\\Users\\Name\\AppData\\Local\\Temp\\.socket-ipc\\socket-cli\\stub-12345.json' (Windows)
+ * ```
+ *
+ * @used Currently used by socket-cli for self-update and inter-process communication
+ */
+export declare function getIpcStubPath(appName: string): string;
+/**
+ * Write IPC data to a stub file for inter-process data transfer.
+ *
+ * This function creates a stub file containing data that needs to be passed
+ * between processes. The stub file includes metadata like process ID and
+ * timestamp for validation.
+ *
+ * ## File Structure:
+ * ```json
+ * {
+ *   "pid": 12345,
+ *   "timestamp": 1699564234567,
+ *   "data": { ... }
+ * }
+ * ```
+ *
+ * ## Use Cases:
+ * - Passing API tokens to child processes
+ * - Transferring configuration between Socket CLI components
+ * - Sharing large data that exceeds environment variable limits
+ *
+ * @param appName - The application identifier
+ * @param data - The data to write to the stub file
+ * @returns Promise resolving to the stub file path
+ *
+ * @example
+ * ```typescript
+ * const stubPath = await writeIpcStub('socket-cli', {
+ *   apiToken: 'secret-token',
+ *   config: { ... }
+ * })
+ * // Pass stubPath to child process for reading
+ * ```
+ */
+export declare function writeIpcStub(appName: string, data: unknown): Promise;
+/**
+ * Read IPC data from a stub file with automatic cleanup.
+ *
+ * This function reads data from an IPC stub file and validates its freshness.
+ * Stale files (older than 5 minutes) are automatically cleaned up to prevent
+ * accumulation of temporary files.
+ *
+ * ## Validation Steps:
+ * 1. Read and parse JSON file
+ * 2. Validate structure with Zod schema
+ * 3. Check timestamp freshness
+ * 4. Clean up if stale
+ * 5. Return data if valid
+ *
+ * @param stubPath - Path to the stub file to read
+ * @returns Promise resolving to the data or null if invalid/stale
+ *
+ * @example
+ * ```typescript
+ * const data = await readIpcStub('/tmp/.socket-ipc/socket-cli/stub-12345.json')
+ * if (data) {
+ *   console.log('Received:', data)
+ * }
+ * ```
+ *
+ * @unused Reserved for future implementation
+ */
+export declare function readIpcStub(stubPath: string): Promise;
+/**
+ * Clean up IPC stub files for an application.
+ *
+ * This maintenance function removes stale IPC stub files to prevent
+ * accumulation in the temporary directory. It's designed to be called
+ * periodically or on application startup.
+ *
+ * ## Cleanup Rules:
+ * - Files older than 5 minutes are removed (checked via both filesystem mtime and JSON timestamp)
+ * - Only stub files (stub-*.json) are processed
+ * - Errors are silently ignored (best-effort cleanup)
+ *
+ * @param appName - The application identifier
+ * @returns Promise that resolves when cleanup is complete
+ *
+ * @example
+ * ```typescript
+ * // Clean up on application startup
+ * await cleanupIpcStubs('socket-cli')
+ * ```
+ *
+ * @unused Reserved for future implementation
+ */
+export declare function cleanupIpcStubs(appName: string): Promise;
+/**
+ * Send data through Node.js IPC channel.
+ *
+ * This function sends structured messages through the Node.js IPC channel
+ * when available. The IPC channel must be established with stdio: ['pipe', 'pipe', 'pipe', 'ipc'].
+ *
+ * ## Requirements:
+ * - Process must have been spawned with IPC channel enabled
+ * - Message must be serializable to JSON
+ * - Process.send() must be available
+ *
+ * @param process - The process object with IPC channel
+ * @param message - The IPC message to send
+ * @returns true if message was sent, false otherwise
+ *
+ * @example
+ * ```typescript
+ * const message = createIpcMessage('handshake', { version: '1.0.0' })
+ * const sent = sendIpc(childProcess, message)
+ * ```
+ *
+ * @unused Reserved for bidirectional communication implementation
+ */
+export declare function sendIpc(process: NodeJS.Process | unknown, message: IpcMessage): boolean;
+/**
+ * Receive data through Node.js IPC channel.
+ *
+ * Sets up a listener for IPC messages with automatic validation and parsing.
+ * Returns a cleanup function to remove the listener when no longer needed.
+ *
+ * ## Message Flow:
+ * 1. Receive raw message from IPC channel
+ * 2. Validate with parseIpcMessage
+ * 3. Call handler if valid
+ * 4. Ignore invalid messages
+ *
+ * @param handler - Function to call with valid IPC messages
+ * @returns Cleanup function to remove the listener
+ *
+ * @example
+ * ```typescript
+ * const cleanup = onIpc((message) => {
+ *   console.log('Received:', message.type, message.data)
+ * })
+ * // Later...
+ * cleanup() // Remove listener
+ * ```
+ *
+ * @unused Reserved for bidirectional communication
+ */
+export declare function onIpc(handler: (message: IpcMessage) => void): () => void;
+/**
+ * Create a promise that resolves when a specific IPC message is received.
+ *
+ * This utility function provides async/await support for IPC communication,
+ * allowing you to wait for specific message types with timeout support.
+ *
+ * ## Features:
+ * - Automatic timeout handling
+ * - Type-safe message data
+ * - Resource cleanup on completion
+ * - Promise-based API
+ *
+ * @param messageType - The message type to wait for
+ * @param options - Options including timeout configuration
+ * @returns Promise resolving to the message data
+ *
+ * @example
+ * ```typescript
+ * try {
+ *   const response = await waitForIpc('config-response', {
+ *     timeout: 5000 // 5 seconds
+ *   })
+ *   console.log('Config received:', response)
+ * } catch (error) {
+ *   console.error('Timeout waiting for config')
+ * }
+ * ```
+ *
+ * @unused Reserved for request-response pattern implementation
+ */
+export declare function waitForIpc(messageType: string, options?: IpcOptions): Promise;
+/**
+ * Create an IPC message with proper structure and metadata.
+ *
+ * This factory function creates properly structured IPC messages with:
+ * - Unique ID for tracking
+ * - Timestamp for freshness
+ * - Type for routing
+ * - Data payload
+ *
+ * @param type - The message type identifier
+ * @param data - The message payload
+ * @returns A properly structured IPC message
+ *
+ * @example
+ * ```typescript
+ * const handshake = createIpcMessage('handshake', {
+ *   version: '1.0.0',
+ *   pid: process.pid,
+ *   appName: 'socket-cli'
+ * })
+ * ```
+ *
+ * @unused Reserved for future message creation needs
+ */
+export declare function createIpcMessage(type: string, data: T): IpcMessage;
+/**
+ * Check if process has IPC channel available.
+ *
+ * This utility checks whether a process object has the necessary
+ * properties for IPC communication. Used to determine if IPC
+ * messaging is possible before attempting to send.
+ *
+ * @param process - The process object to check
+ * @returns true if IPC is available, false otherwise
+ *
+ * @example
+ * ```typescript
+ * if (hasIpcChannel(childProcess)) {
+ *   sendIpc(childProcess, message)
+ * } else {
+ *   // Fall back to alternative communication method
+ * }
+ * ```
+ *
+ * @unused Reserved for IPC availability detection
+ */
+export declare function hasIpcChannel(process: unknown): boolean;
+/**
+ * Safely parse and validate IPC messages.
+ *
+ * This function performs runtime validation of incoming messages
+ * to ensure they conform to the IPC message structure. It uses
+ * Zod schemas for robust validation.
+ *
+ * ## Validation Steps:
+ * 1. Check if message is an object
+ * 2. Validate required fields exist
+ * 3. Validate field types
+ * 4. Return typed message or null
+ *
+ * @param message - The raw message to parse
+ * @returns Parsed IPC message or null if invalid
+ *
+ * @example
+ * ```typescript
+ * const parsed = parseIpcMessage(rawMessage)
+ * if (parsed) {
+ *   handleMessage(parsed)
+ * }
+ * ```
+ *
+ * @unused Reserved for message validation needs
+ */
+export declare function parseIpcMessage(message: unknown): IpcMessage | null;
+export {};
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ipc.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ipc.js
new file mode 100644
index 00000000..3b55c031
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ipc.js
@@ -0,0 +1,282 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var ipc_exports = {};
+__export(ipc_exports, {
+  IpcHandshakeSchema: () => IpcHandshakeSchema,
+  cleanupIpcStubs: () => cleanupIpcStubs,
+  createIpcChannelId: () => createIpcChannelId,
+  createIpcMessage: () => createIpcMessage,
+  getIpcStubPath: () => getIpcStubPath,
+  hasIpcChannel: () => hasIpcChannel,
+  onIpc: () => onIpc,
+  parseIpcMessage: () => parseIpcMessage,
+  readIpcStub: () => readIpcStub,
+  sendIpc: () => sendIpc,
+  waitForIpc: () => waitForIpc,
+  writeIpcStub: () => writeIpcStub
+});
+module.exports = __toCommonJS(ipc_exports);
+var import_node_process = __toESM(require("node:process"));
+var import_fs = require("./fs");
+var import_socket = require("./paths/socket");
+var import_zod = require("./zod");
+let _crypto;
+// @__NO_SIDE_EFFECTS__
+function getCrypto() {
+  if (_crypto === void 0) {
+    _crypto = require("crypto");
+  }
+  return _crypto;
+}
+let _fs;
+// @__NO_SIDE_EFFECTS__
+function getFs() {
+  if (_fs === void 0) {
+    _fs = require("fs");
+  }
+  return _fs;
+}
+let _path;
+// @__NO_SIDE_EFFECTS__
+function getPath() {
+  if (_path === void 0) {
+    _path = require("path");
+  }
+  return _path;
+}
+const IpcMessageSchema = import_zod.z.object({
+  /** Unique identifier for message tracking and response correlation. */
+  id: import_zod.z.string().min(1),
+  /** Unix timestamp for freshness validation and replay prevention. */
+  timestamp: import_zod.z.number().positive(),
+  /** Message type identifier for routing and handling. */
+  type: import_zod.z.string().min(1),
+  /** Payload data - can be any JSON-serializable value. */
+  data: import_zod.z.unknown()
+});
+const IpcHandshakeSchema = IpcMessageSchema.extend({
+  type: import_zod.z.literal("handshake"),
+  data: import_zod.z.object({
+    /** Protocol version for compatibility checking. */
+    version: import_zod.z.string(),
+    /** Process ID for identification. */
+    pid: import_zod.z.number().int().positive(),
+    /** Optional API token for authentication. */
+    apiToken: import_zod.z.string().optional(),
+    /** Application name for multi-app support. */
+    appName: import_zod.z.string()
+  })
+});
+const IpcStubSchema = import_zod.z.object({
+  /** Process ID that created the stub. */
+  pid: import_zod.z.number().int().positive(),
+  /** Creation timestamp for age validation. */
+  timestamp: import_zod.z.number().positive(),
+  /** The actual data payload. */
+  data: import_zod.z.unknown()
+});
+function createIpcChannelId(prefix = "socket") {
+  const crypto = /* @__PURE__ */ getCrypto();
+  return `${prefix}-${import_node_process.default.pid}-${crypto.randomBytes(8).toString("hex")}`;
+}
+function getIpcStubPath(appName) {
+  const tempDir = (0, import_socket.getOsTmpDir)();
+  const path = /* @__PURE__ */ getPath();
+  const stubDir = path.join(tempDir, ".socket-ipc", appName);
+  return path.join(stubDir, `stub-${import_node_process.default.pid}.json`);
+}
+async function ensureIpcDirectory(filePath) {
+  const fs = /* @__PURE__ */ getFs();
+  const path = /* @__PURE__ */ getPath();
+  const dir = path.dirname(filePath);
+  await fs.promises.mkdir(dir, { recursive: true, mode: 448 });
+}
+async function writeIpcStub(appName, data) {
+  const stubPath = getIpcStubPath(appName);
+  await ensureIpcDirectory(stubPath);
+  const ipcData = {
+    data,
+    pid: import_node_process.default.pid,
+    timestamp: Date.now()
+  };
+  const validated = IpcStubSchema.parse(ipcData);
+  const fs = /* @__PURE__ */ getFs();
+  await fs.promises.writeFile(stubPath, JSON.stringify(validated, null, 2), {
+    encoding: "utf8",
+    mode: 384
+  });
+  return stubPath;
+}
+async function readIpcStub(stubPath) {
+  try {
+    const fs = /* @__PURE__ */ getFs();
+    const content = await fs.promises.readFile(stubPath, "utf8");
+    const parsed = JSON.parse(content);
+    const validated = IpcStubSchema.parse(parsed);
+    const ageMs = Date.now() - validated.timestamp;
+    const maxAgeMs = 5 * 60 * 1e3;
+    if (ageMs > maxAgeMs) {
+      try {
+        (0, import_fs.safeDeleteSync)(stubPath, { force: true });
+      } catch {
+      }
+      return null;
+    }
+    return validated.data;
+  } catch {
+    return null;
+  }
+}
+async function cleanupIpcStubs(appName) {
+  const tempDir = (0, import_socket.getOsTmpDir)();
+  const fs = /* @__PURE__ */ getFs();
+  const path = /* @__PURE__ */ getPath();
+  const stubDir = path.join(tempDir, ".socket-ipc", appName);
+  try {
+    const files = await fs.promises.readdir(stubDir);
+    const now = Date.now();
+    const maxAgeMs = 5 * 60 * 1e3;
+    await Promise.allSettled(
+      files.map(async (file) => {
+        if (file.startsWith("stub-") && file.endsWith(".json")) {
+          const filePath = path.join(stubDir, file);
+          try {
+            const stats = await fs.promises.stat(filePath);
+            const mtimeAge = now - stats.mtimeMs;
+            let isStale = mtimeAge > maxAgeMs;
+            try {
+              const content = await fs.promises.readFile(filePath, "utf8");
+              const parsed = JSON.parse(content);
+              const validated = IpcStubSchema.parse(parsed);
+              const contentAge = now - validated.timestamp;
+              isStale = isStale || contentAge > maxAgeMs;
+            } catch {
+              isStale = true;
+            }
+            if (isStale) {
+              (0, import_fs.safeDeleteSync)(filePath, { force: true });
+            }
+          } catch {
+          }
+        }
+      })
+    );
+  } catch {
+  }
+}
+function sendIpc(process2, message) {
+  if (process2 && typeof process2 === "object" && "send" in process2 && typeof process2.send === "function") {
+    try {
+      const validated = IpcMessageSchema.parse(message);
+      return process2.send(validated);
+    } catch {
+      return false;
+    }
+  }
+  return false;
+}
+function onIpc(handler) {
+  const listener = (message) => {
+    const parsed = parseIpcMessage(message);
+    if (parsed) {
+      handler(parsed);
+    }
+  };
+  import_node_process.default.on("message", listener);
+  return () => {
+    import_node_process.default.off("message", listener);
+  };
+}
+function waitForIpc(messageType, options = {}) {
+  const { timeout = 3e4 } = options;
+  return new Promise((resolve, reject) => {
+    let cleanup = null;
+    let timeoutId = null;
+    const handleTimeout = () => {
+      if (cleanup) {
+        cleanup();
+      }
+      reject(new Error(`IPC timeout waiting for message type: ${messageType}`));
+    };
+    const handleMessage = (message) => {
+      if (message.type === messageType) {
+        if (timeoutId) {
+          clearTimeout(timeoutId);
+        }
+        if (cleanup) {
+          cleanup();
+        }
+        resolve(message.data);
+      }
+    };
+    cleanup = onIpc(handleMessage);
+    if (timeout > 0) {
+      timeoutId = setTimeout(handleTimeout, timeout);
+      timeoutId.unref();
+    }
+  });
+}
+function createIpcMessage(type, data) {
+  const crypto = /* @__PURE__ */ getCrypto();
+  return {
+    id: crypto.randomBytes(16).toString("hex"),
+    timestamp: Date.now(),
+    type,
+    data
+  };
+}
+function hasIpcChannel(process2) {
+  return Boolean(
+    process2 && typeof process2 === "object" && "send" in process2 && typeof process2.send === "function" && "channel" in process2 && process2.channel !== void 0
+  );
+}
+function parseIpcMessage(message) {
+  try {
+    const validated = IpcMessageSchema.parse(message);
+    return validated;
+  } catch {
+    return null;
+  }
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  IpcHandshakeSchema,
+  cleanupIpcStubs,
+  createIpcChannelId,
+  createIpcMessage,
+  getIpcStubPath,
+  hasIpcChannel,
+  onIpc,
+  parseIpcMessage,
+  readIpcStub,
+  sendIpc,
+  waitForIpc,
+  writeIpcStub
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/edit.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/edit.d.ts
new file mode 100644
index 00000000..ff11c452
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/edit.d.ts
@@ -0,0 +1,16 @@
+import type { EditableJsonConstructor } from './types';
+/**
+ * Get the EditableJson class for JSON file manipulation.
+ *
+ * @example
+ * ```ts
+ * import { getEditableJsonClass } from '@socketsecurity/lib/json'
+ *
+ * const EditableJson = getEditableJsonClass()
+ * const config = await EditableJson.load('./config.json')
+ * config.update({ someField: 'newValue' })
+ * await config.save({ sort: true })
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function getEditableJsonClass>(): EditableJsonConstructor;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/edit.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/edit.js
new file mode 100644
index 00000000..9abbe6af
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/edit.js
@@ -0,0 +1,259 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var edit_exports = {};
+__export(edit_exports, {
+  getEditableJsonClass: () => getEditableJsonClass
+});
+module.exports = __toCommonJS(edit_exports);
+var import_promises = require("node:timers/promises");
+var import_node_process = __toESM(require("node:process"));
+var import_format = require("./format");
+const identSymbol = import_format.INDENT_SYMBOL;
+const newlineSymbol = import_format.NEWLINE_SYMBOL;
+const JSONParse = JSON.parse;
+let _EditableJsonClass;
+let _fs;
+// @__NO_SIDE_EFFECTS__
+function getFs() {
+  if (_fs === void 0) {
+    _fs = require("fs");
+  }
+  return _fs;
+}
+async function retryWrite(filepath, content, retries = 3, baseDelay = 10) {
+  const { promises: fsPromises } = /* @__PURE__ */ getFs();
+  for (let attempt = 0; attempt <= retries; attempt++) {
+    try {
+      await fsPromises.writeFile(filepath, content);
+      if (import_node_process.default.platform === "win32") {
+        await (0, import_promises.setTimeout)(50);
+        let accessRetries = 0;
+        const maxAccessRetries = 5;
+        while (accessRetries < maxAccessRetries) {
+          try {
+            await fsPromises.access(filepath);
+            await (0, import_promises.setTimeout)(10);
+            break;
+          } catch {
+            const delay = 20 * (accessRetries + 1);
+            await (0, import_promises.setTimeout)(delay);
+            accessRetries++;
+          }
+        }
+      }
+      return;
+    } catch (err) {
+      const isLastAttempt = attempt === retries;
+      const isRetriableError = err instanceof Error && "code" in err && (err.code === "EPERM" || err.code === "EBUSY" || err.code === "ENOENT");
+      if (!isRetriableError || isLastAttempt) {
+        throw err;
+      }
+      const delay = baseDelay * 2 ** attempt;
+      await (0, import_promises.setTimeout)(delay);
+    }
+  }
+}
+function parseJson(content) {
+  return JSONParse(content);
+}
+async function readFile(filepath) {
+  const { promises: fsPromises } = /* @__PURE__ */ getFs();
+  const maxRetries = import_node_process.default.platform === "win32" ? 5 : 1;
+  for (let attempt = 0; attempt <= maxRetries; attempt++) {
+    try {
+      return await fsPromises.readFile(filepath, "utf8");
+    } catch (err) {
+      const isLastAttempt = attempt === maxRetries;
+      const isEnoent = err instanceof Error && "code" in err && err.code === "ENOENT";
+      if (!isEnoent || isLastAttempt) {
+        throw err;
+      }
+      const delay = import_node_process.default.platform === "win32" ? 50 * (attempt + 1) : 20;
+      await (0, import_promises.setTimeout)(delay);
+    }
+  }
+  throw new Error("Unreachable code");
+}
+// @__NO_SIDE_EFFECTS__
+function getEditableJsonClass() {
+  if (_EditableJsonClass === void 0) {
+    _EditableJsonClass = class EditableJson {
+      _canSave = true;
+      _content = {};
+      _path = void 0;
+      _readFileContent = "";
+      _readFileJson = void 0;
+      get content() {
+        return this._content;
+      }
+      get filename() {
+        const path = this._path;
+        if (!path) {
+          return "";
+        }
+        return path;
+      }
+      get path() {
+        return this._path;
+      }
+      static async create(path, opts = {}) {
+        const instance = new EditableJson();
+        instance.create(path);
+        return opts.data ? instance.update(opts.data) : instance;
+      }
+      static async load(path, opts = {}) {
+        const instance = new EditableJson();
+        if (!opts.create) {
+          return await instance.load(path);
+        }
+        try {
+          return await instance.load(path);
+        } catch (err) {
+          if (!err.message.includes("ENOENT") && !err.message.includes("no such file")) {
+            throw err;
+          }
+          return instance.create(path);
+        }
+      }
+      create(path) {
+        this._path = path;
+        this._content = {};
+        this._canSave = true;
+        return this;
+      }
+      fromContent(data) {
+        this._content = data;
+        this._canSave = false;
+        return this;
+      }
+      fromJSON(data) {
+        const parsed = parseJson(data);
+        const indent = (0, import_format.detectIndent)(data);
+        const newline = (0, import_format.detectNewline)(data);
+        parsed[identSymbol] = indent;
+        parsed[newlineSymbol] = newline;
+        this._content = parsed;
+        return this;
+      }
+      async load(path, create) {
+        this._path = path;
+        let parseErr;
+        try {
+          this._readFileContent = await readFile(this.filename);
+        } catch (err) {
+          if (!create) {
+            throw err;
+          }
+          parseErr = err;
+        }
+        if (parseErr) {
+          throw parseErr;
+        }
+        this.fromJSON(this._readFileContent);
+        this._readFileJson = parseJson(this._readFileContent);
+        return this;
+      }
+      update(content) {
+        this._content = {
+          ...this._content,
+          ...content
+        };
+        return this;
+      }
+      async save(options) {
+        if (!this._canSave || this.content === void 0) {
+          throw new Error("No file path to save to");
+        }
+        if (!(0, import_format.shouldSave)(
+          this.content,
+          this._readFileJson,
+          this._readFileContent,
+          options
+        )) {
+          return false;
+        }
+        const content = (0, import_format.stripFormattingSymbols)(
+          this.content
+        );
+        const sortedContent = options?.sort ? (0, import_format.sortKeys)(content) : content;
+        const formatting = (0, import_format.getFormattingFromContent)(
+          this.content
+        );
+        const fileContent = (0, import_format.stringifyWithFormatting)(sortedContent, formatting);
+        await retryWrite(this.filename, fileContent);
+        this._readFileContent = fileContent;
+        this._readFileJson = parseJson(fileContent);
+        return true;
+      }
+      saveSync(options) {
+        if (!this._canSave || this.content === void 0) {
+          throw new Error("No file path to save to");
+        }
+        if (!(0, import_format.shouldSave)(
+          this.content,
+          this._readFileJson,
+          this._readFileContent,
+          options
+        )) {
+          return false;
+        }
+        const content = (0, import_format.stripFormattingSymbols)(
+          this.content
+        );
+        const sortedContent = options?.sort ? (0, import_format.sortKeys)(content) : content;
+        const formatting = (0, import_format.getFormattingFromContent)(
+          this.content
+        );
+        const fileContent = (0, import_format.stringifyWithFormatting)(sortedContent, formatting);
+        const fs = /* @__PURE__ */ getFs();
+        fs.writeFileSync(this.filename, fileContent);
+        this._readFileContent = fileContent;
+        this._readFileJson = parseJson(fileContent);
+        return true;
+      }
+      willSave(options) {
+        if (!this._canSave || this.content === void 0) {
+          return false;
+        }
+        return (0, import_format.shouldSave)(
+          this.content,
+          this._readFileJson,
+          this._readFileContent,
+          options
+        );
+      }
+    };
+  }
+  return _EditableJsonClass;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  getEditableJsonClass
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/format.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/format.d.ts
new file mode 100644
index 00000000..cfb71cad
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/format.d.ts
@@ -0,0 +1,158 @@
+/**
+ * @fileoverview Shared utilities for JSON formatting preservation and manipulation.
+ * Provides functions for detecting and preserving indentation, line endings, and
+ * determining when JSON files should be saved based on content changes.
+ */
+/**
+ * Symbols used to store formatting metadata in JSON objects.
+ */
+export declare const INDENT_SYMBOL: unique symbol;
+export declare const NEWLINE_SYMBOL: unique symbol;
+/**
+ * Formatting metadata for JSON files.
+ */
+export interface JsonFormatting {
+    indent: string | number;
+    newline: string;
+}
+/**
+ * Options for determining if a save should occur.
+ */
+export interface ShouldSaveOptions {
+    ignoreWhitespace?: boolean;
+    sort?: boolean;
+    sortFn?: (obj: Record) => Record;
+}
+/**
+ * Detect indentation from a JSON string.
+ * Supports space-based indentation (returns count) or mixed indentation (returns string).
+ *
+ * @param json - JSON string to analyze
+ * @returns Number of spaces or indentation string, defaults to 2 if not detected
+ *
+ * @example
+ * ```ts
+ * detectIndent('{\n  "key": "value"\n}')  // => 2
+ * detectIndent('{\n    "key": "value"\n}')  // => 4
+ * detectIndent('{\n\t"key": "value"\n}')  // => '\t'
+ * ```
+ */
+export declare function detectIndent(json: string): string | number;
+/**
+ * Detect newline character(s) from a JSON string.
+ * Supports LF (\n) and CRLF (\r\n) line endings.
+ *
+ * @param json - JSON string to analyze
+ * @returns Line ending string ('\n' or '\r\n'), defaults to '\n' if not detected
+ *
+ * @example
+ * ```ts
+ * detectNewline('{\n  "key": "value"\n}')  // => '\n'
+ * detectNewline('{\r\n  "key": "value"\r\n}')  // => '\r\n'
+ * ```
+ */
+export declare function detectNewline(json: string): string;
+/**
+ * Extract formatting metadata from a JSON string.
+ *
+ * @param json - JSON string to analyze
+ * @returns Object containing indent and newline formatting
+ *
+ * @example
+ * ```ts
+ * const formatting = extractFormatting('{\n  "key": "value"\n}')
+ * // => { indent: 2, newline: '\n' }
+ * ```
+ */
+export declare function extractFormatting(json: string): JsonFormatting;
+/**
+ * Get default formatting for JSON files.
+ *
+ * @returns Default formatting (2 spaces, LF line endings)
+ *
+ * @example
+ * ```typescript
+ * const fmt = getDefaultFormatting()
+ * // { indent: 2, newline: '\n' }
+ * ```
+ */
+export declare function getDefaultFormatting(): JsonFormatting;
+/**
+ * Sort object keys alphabetically.
+ * Creates a new object with sorted keys (does not mutate input).
+ *
+ * @param obj - Object to sort
+ * @returns New object with alphabetically sorted keys
+ *
+ * @example
+ * ```ts
+ * sortKeys({ z: 3, a: 1, m: 2 })
+ * // => { a: 1, m: 2, z: 3 }
+ * ```
+ */
+export declare function sortKeys(obj: Record): Record;
+/**
+ * Stringify JSON with specific formatting.
+ * Applies indentation and line ending preferences.
+ *
+ * @param content - Object to stringify
+ * @param formatting - Formatting preferences (indent and newline)
+ * @returns Formatted JSON string with trailing newline
+ *
+ * @example
+ * ```ts
+ * stringifyWithFormatting(
+ *   { key: 'value' },
+ *   { indent: 4, newline: '\r\n' }
+ * )
+ * // => '{\r\n    "key": "value"\r\n}\r\n'
+ * ```
+ */
+export declare function stringifyWithFormatting(content: Record, formatting: JsonFormatting): string;
+/**
+ * Strip formatting symbols from content object.
+ * Removes Symbol.for('indent') and Symbol.for('newline') from the object.
+ *
+ * @param content - Content object with potential symbol properties
+ * @returns Object with symbols removed
+ *
+ * @example
+ * ```typescript
+ * const obj = { key: "value", [Symbol.for("indent")]: 2 }
+ * stripFormattingSymbols(obj)  // { key: "value" }
+ * ```
+ */
+export declare function stripFormattingSymbols(content: Record): Record;
+/**
+ * Extract formatting from content object that has symbol-based metadata.
+ *
+ * @param content - Content object with Symbol.for('indent') and Symbol.for('newline')
+ * @returns Formatting metadata, or defaults if symbols not present
+ *
+ * @example
+ * ```typescript
+ * const content = { [Symbol.for("indent")]: 4, [Symbol.for("newline")]: "\r\n" }
+ * getFormattingFromContent(content)  // { indent: 4, newline: "\r\n" }
+ * ```
+ */
+export declare function getFormattingFromContent(content: Record): JsonFormatting;
+/**
+ * Determine if content should be saved based on changes and options.
+ * Compares current content with original content and respects options like
+ * ignoreWhitespace and sort.
+ *
+ * @param currentContent - Current content object (may include formatting symbols)
+ * @param originalContent - Original content for comparison (may include formatting symbols)
+ * @param originalFileContent - Original file content as string (for whitespace comparison)
+ * @param options - Options controlling save behavior
+ * @returns true if content should be saved, false otherwise
+ *
+ * @example
+ * ```ts
+ * const current = { key: 'new-value', [Symbol.for('indent')]: 2 }
+ * const original = { key: 'old-value', [Symbol.for('indent')]: 2 }
+ * shouldSave(current, original, '{\n  "key": "old-value"\n}\n')
+ * // => true
+ * ```
+ */
+export declare function shouldSave(currentContent: Record, originalContent: Record | undefined, originalFileContent: string, options?: ShouldSaveOptions): boolean;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/format.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/format.js
new file mode 100644
index 00000000..459f4b30
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/format.js
@@ -0,0 +1,121 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var format_exports = {};
+__export(format_exports, {
+  INDENT_SYMBOL: () => INDENT_SYMBOL,
+  NEWLINE_SYMBOL: () => NEWLINE_SYMBOL,
+  detectIndent: () => detectIndent,
+  detectNewline: () => detectNewline,
+  extractFormatting: () => extractFormatting,
+  getDefaultFormatting: () => getDefaultFormatting,
+  getFormattingFromContent: () => getFormattingFromContent,
+  shouldSave: () => shouldSave,
+  sortKeys: () => sortKeys,
+  stringifyWithFormatting: () => stringifyWithFormatting,
+  stripFormattingSymbols: () => stripFormattingSymbols
+});
+module.exports = __toCommonJS(format_exports);
+const INDENT_SYMBOL = Symbol.for("indent");
+const NEWLINE_SYMBOL = Symbol.for("newline");
+function detectIndent(json) {
+  const match = json.match(/^[{[][\r\n]+(\s+)/m);
+  if (!match) {
+    return 2;
+  }
+  const indent = match[1];
+  if (/^ +$/.test(indent)) {
+    return indent.length;
+  }
+  return indent;
+}
+function detectNewline(json) {
+  const match = json.match(/\r?\n/);
+  return match ? match[0] : "\n";
+}
+function extractFormatting(json) {
+  return {
+    indent: detectIndent(json),
+    newline: detectNewline(json)
+  };
+}
+function getDefaultFormatting() {
+  return {
+    indent: 2,
+    newline: "\n"
+  };
+}
+function sortKeys(obj) {
+  const sorted = { __proto__: null };
+  const keys = Object.keys(obj).sort();
+  for (const key of keys) {
+    sorted[key] = obj[key];
+  }
+  return sorted;
+}
+function stringifyWithFormatting(content, formatting) {
+  const { indent, newline } = formatting;
+  const format = indent === void 0 || indent === null ? "  " : indent;
+  const eol = newline === void 0 || newline === null ? "\n" : newline;
+  return `${JSON.stringify(content, void 0, format)}
+`.replace(/\n/g, eol);
+}
+function stripFormattingSymbols(content) {
+  const {
+    [INDENT_SYMBOL]: _indent,
+    [NEWLINE_SYMBOL]: _newline,
+    ...rest
+  } = content;
+  return rest;
+}
+function getFormattingFromContent(content) {
+  const indent = content[INDENT_SYMBOL];
+  const newline = content[NEWLINE_SYMBOL];
+  return {
+    indent: indent === void 0 || indent === null ? 2 : indent,
+    newline: newline === void 0 || newline === null ? "\n" : newline
+  };
+}
+function shouldSave(currentContent, originalContent, originalFileContent, options = {}) {
+  const { ignoreWhitespace = false, sort = false, sortFn } = options;
+  const content = stripFormattingSymbols(currentContent);
+  const sortedContent = sortFn ? sortFn(content) : sort ? sortKeys(content) : content;
+  const origContent = originalContent ? stripFormattingSymbols(originalContent) : {};
+  if (ignoreWhitespace) {
+    const util = require("util");
+    return !util.isDeepStrictEqual(sortedContent, origContent);
+  }
+  const formatting = getFormattingFromContent(currentContent);
+  const newFileContent = stringifyWithFormatting(sortedContent, formatting);
+  return newFileContent.trim() !== originalFileContent.trim();
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  INDENT_SYMBOL,
+  NEWLINE_SYMBOL,
+  detectIndent,
+  detectNewline,
+  extractFormatting,
+  getDefaultFormatting,
+  getFormattingFromContent,
+  shouldSave,
+  sortKeys,
+  stringifyWithFormatting,
+  stripFormattingSymbols
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/parse.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/parse.d.ts
new file mode 100644
index 00000000..3232aa8b
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/parse.d.ts
@@ -0,0 +1,76 @@
+import type { JsonParseOptions, JsonPrimitive, JsonValue } from './types';
+/**
+ * Check if a value is a JSON primitive type.
+ * JSON primitives are: `null`, `boolean`, `number`, or `string`.
+ *
+ * @param value - Value to check
+ * @returns `true` if value is a JSON primitive, `false` otherwise
+ *
+ * @example
+ * ```ts
+ * isJsonPrimitive(null) // => true
+ * isJsonPrimitive(true) // => true
+ * isJsonPrimitive(42) // => true
+ * isJsonPrimitive('hello') // => true
+ * isJsonPrimitive({}) // => false
+ * isJsonPrimitive([]) // => false
+ * isJsonPrimitive(undefined) // => false
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isJsonPrimitive(value: unknown): value is JsonPrimitive;
+/**
+ * Parse JSON content with automatic Buffer handling and BOM stripping.
+ * Provides safer JSON parsing with helpful error messages and optional error suppression.
+ *
+ * Features:
+ * - Automatic UTF-8 Buffer conversion
+ * - BOM (Byte Order Mark) stripping for cross-platform compatibility
+ * - Enhanced error messages with filepath context
+ * - Optional error suppression (returns `undefined` instead of throwing)
+ * - Optional reviver for transforming parsed values
+ *
+ * @param content - JSON string or Buffer to parse
+ * @param options - Optional parsing configuration
+ * @returns Parsed JSON value, or `undefined` if parsing fails and `throws` is `false`
+ *
+ * @throws {SyntaxError} When JSON is invalid and `throws` is `true` (default)
+ *
+ * @example
+ * ```ts
+ * // Basic usage
+ * const data = jsonParse('{"name":"example"}')
+ * console.log(data.name) // => 'example'
+ *
+ * // Parse Buffer with UTF-8 BOM
+ * const buffer = Buffer.from('\uFEFF{"value":42}')
+ * const data = jsonParse(buffer)
+ * console.log(data.value) // => 42
+ *
+ * // Enhanced error messages with filepath
+ * try {
+ *   jsonParse('invalid', { filepath: 'config.json' })
+ * } catch (err) {
+ *   console.error(err.message)
+ *   // => "config.json: Unexpected token i in JSON at position 0"
+ * }
+ *
+ * // Suppress errors
+ * const result = jsonParse('invalid', { throws: false })
+ * console.log(result) // => undefined
+ *
+ * // Transform values with reviver
+ * const json = '{"created":"2024-01-15T10:30:00Z"}'
+ * const data = jsonParse(json, {
+ *   reviver: (key, value) => {
+ *     if (key === 'created' && typeof value === 'string') {
+ *       return new Date(value)
+ *     }
+ *     return value
+ *   }
+ * })
+ * console.log(data.created instanceof Date) // => true
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function jsonParse(content: string | Buffer, options?: JsonParseOptions | undefined): JsonValue | undefined;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/parse.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/parse.js
new file mode 100644
index 00000000..831de203
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/parse.js
@@ -0,0 +1,75 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var parse_exports = {};
+__export(parse_exports, {
+  isJsonPrimitive: () => isJsonPrimitive,
+  jsonParse: () => jsonParse
+});
+module.exports = __toCommonJS(parse_exports);
+var import_strings = require("../strings");
+const JSONParse = JSON.parse;
+// @__NO_SIDE_EFFECTS__
+function isBuffer(x) {
+  if (!x || typeof x !== "object") {
+    return false;
+  }
+  const obj = x;
+  if (typeof obj["length"] !== "number") {
+    return false;
+  }
+  if (typeof obj["copy"] !== "function" || typeof obj["slice"] !== "function") {
+    return false;
+  }
+  if (typeof obj["length"] === "number" && obj["length"] > 0 && typeof obj[0] !== "number") {
+    return false;
+  }
+  const Ctor = x.constructor;
+  return !!(typeof Ctor?.isBuffer === "function" && Ctor.isBuffer(x));
+}
+// @__NO_SIDE_EFFECTS__
+function isJsonPrimitive(value) {
+  return value === null || typeof value === "boolean" || typeof value === "number" || typeof value === "string";
+}
+// @__NO_SIDE_EFFECTS__
+function jsonParse(content, options) {
+  const { filepath, reviver, throws } = {
+    __proto__: null,
+    ...options
+  };
+  const shouldThrow = throws === void 0 || !!throws;
+  const jsonStr = /* @__PURE__ */ isBuffer(content) ? content.toString("utf8") : content;
+  try {
+    return JSONParse((0, import_strings.stripBom)(jsonStr), reviver);
+  } catch (e) {
+    if (shouldThrow) {
+      const error = e;
+      if (error && typeof filepath === "string") {
+        error.message = `${filepath}: ${error.message}`;
+      }
+      throw error;
+    }
+  }
+  return void 0;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  isJsonPrimitive,
+  jsonParse
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/types.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/types.d.ts
new file mode 100644
index 00000000..05b5eb0d
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/types.d.ts
@@ -0,0 +1,229 @@
+/**
+ * @fileoverview JSON type definitions and interfaces.
+ */
+/**
+ * JSON primitive types: `null`, `boolean`, `number`, or `string`.
+ *
+ * @example
+ * ```ts
+ * const primitives: JsonPrimitive[] = [null, true, 42, 'hello']
+ * ```
+ */
+export type JsonPrimitive = null | boolean | number | string;
+/**
+ * A JSON array containing JSON values.
+ *
+ * @example
+ * ```ts
+ * const arr: JsonArray = [1, 'two', { three: 3 }, [4, 5]]
+ * ```
+ */
+export interface JsonArray extends Array {
+}
+/**
+ * A JSON object with string keys and JSON values.
+ *
+ * @example
+ * ```ts
+ * const obj: JsonObject = {
+ *   name: 'example',
+ *   count: 42,
+ *   active: true,
+ *   nested: { key: 'value' }
+ * }
+ * ```
+ */
+export interface JsonObject {
+    [key: string]: JsonValue;
+}
+/**
+ * Any valid JSON value: primitive, object, or array.
+ *
+ * @example
+ * ```ts
+ * const values: JsonValue[] = [
+ *   null,
+ *   true,
+ *   42,
+ *   'hello',
+ *   { key: 'value' },
+ *   [1, 2, 3]
+ * ]
+ * ```
+ */
+export type JsonValue = JsonPrimitive | JsonObject | JsonArray;
+/**
+ * Reviver function for transforming parsed JSON values.
+ * Called for each key-value pair during parsing.
+ *
+ * @param key - The object key or array index being parsed
+ * @param value - The parsed value
+ * @returns The transformed value (or original if no transform needed)
+ *
+ * @example
+ * ```ts
+ * // Convert date strings to Date objects
+ * const reviver: JsonReviver = (key, value) => {
+ *   if (typeof value === 'string' && /^\d{4}-\d{2}-\d{2}/.test(value)) {
+ *     return new Date(value)
+ *   }
+ *   return value
+ * }
+ * ```
+ */
+export type JsonReviver = (key: string, value: unknown) => unknown;
+/**
+ * Options for JSON parsing operations.
+ */
+export interface JsonParseOptions {
+    /**
+     * Optional filepath for improved error messages.
+     * When provided, errors will be prefixed with the filepath.
+     *
+     * @example
+     * ```ts
+     * // Error message will be: "config.json: Unexpected token } in JSON"
+     * jsonParse('invalid', { filepath: 'config.json' })
+     * ```
+     */
+    filepath?: string | undefined;
+    /**
+     * Optional reviver function to transform parsed values.
+     * Called for each key-value pair during parsing.
+     *
+     * @example
+     * ```ts
+     * // Convert ISO date strings to Date objects
+     * const options = {
+     *   reviver: (key, value) => {
+     *     if (typeof value === 'string' && /^\d{4}-\d{2}-\d{2}/.test(value)) {
+     *       return new Date(value)
+     *     }
+     *     return value
+     *   }
+     * }
+     * ```
+     */
+    reviver?: JsonReviver | undefined;
+    /**
+     * Whether to throw on parse errors.
+     * When `false`, returns `undefined` instead of throwing.
+     *
+     * @default true
+     *
+     * @example
+     * ```ts
+     * // Throws error
+     * jsonParse('invalid', { throws: true })
+     *
+     * // Returns undefined
+     * const result = jsonParse('invalid', { throws: false })
+     * ```
+     */
+    throws?: boolean | undefined;
+}
+/**
+ * Options for saving editable JSON files.
+ */
+export interface EditableJsonSaveOptions {
+    /**
+     * Whether to ignore whitespace-only changes when determining if save is needed.
+     * @default false
+     */
+    ignoreWhitespace?: boolean | undefined;
+    /**
+     * Whether to sort object keys alphabetically before saving.
+     * @default false
+     */
+    sort?: boolean | undefined;
+}
+/**
+ * Options for creating or loading editable JSON instances.
+ */
+export interface EditableJsonOptions> {
+    /**
+     * File path for the JSON file (optional for in-memory instances).
+     */
+    path?: string | undefined;
+    /**
+     * Whether to create the file if it doesn't exist during load.
+     * @default false
+     */
+    create?: boolean | undefined;
+    /**
+     * Initial data to populate the instance with.
+     */
+    data?: T | undefined;
+}
+/**
+ * EditableJson instance interface for JSON file manipulation.
+ * Provides core functionality for loading, editing, and saving JSON files
+ * while preserving formatting (indentation and line endings).
+ */
+export interface EditableJsonInstance> {
+    /**
+     * The parsed JSON content as a readonly object.
+     * @readonly
+     */
+    content: Readonly;
+    /**
+     * Create a new JSON file at the specified path.
+     * @param path - The file path where JSON will be created
+     */
+    create(path: string): this;
+    /**
+     * Initialize the instance from a content object.
+     * Note: Disables saving when used (no file path associated).
+     * @param content - The JSON content object
+     */
+    fromContent(content: unknown): this;
+    /**
+     * Initialize the instance from a JSON string.
+     * @param json - The JSON content as a string
+     */
+    fromJSON(json: string): this;
+    /**
+     * Load a JSON file from the specified path.
+     * @param path - The file path to load
+     * @param create - Whether to create the file if it doesn't exist
+     */
+    load(path: string, create?: boolean): Promise;
+    /**
+     * Update the JSON content with new values.
+     * @param content - Partial object with fields to update
+     */
+    update(content: Partial): this;
+    /**
+     * Save the JSON file to disk.
+     * @param options - Save options for formatting and sorting
+     */
+    save(options?: EditableJsonSaveOptions): Promise;
+    /**
+     * Synchronously save the JSON file to disk.
+     * @param options - Save options for formatting and sorting
+     */
+    saveSync(options?: EditableJsonSaveOptions): boolean;
+    /**
+     * Check if the JSON will be saved based on current changes.
+     * @param options - Save options to evaluate
+     */
+    willSave(options?: EditableJsonSaveOptions): boolean;
+    /**
+     * The full path to the JSON file.
+     * @readonly
+     */
+    readonly filename: string;
+    /**
+     * The directory path containing the JSON file.
+     * @readonly
+     */
+    readonly path: string | undefined;
+}
+/**
+ * EditableJson constructor interface.
+ */
+export interface EditableJsonConstructor> {
+    new (): EditableJsonInstance;
+    create(path: string, opts?: EditableJsonOptions): Promise>;
+    load(path: string, opts?: EditableJsonOptions): Promise>;
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/types.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/types.js
new file mode 100644
index 00000000..4af3a3ea
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/json/types.js
@@ -0,0 +1,17 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var types_exports = {};
+module.exports = __toCommonJS(types_exports);
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/links/index.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/links/index.d.ts
new file mode 100644
index 00000000..a745f075
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/links/index.d.ts
@@ -0,0 +1,65 @@
+import type { Theme } from '../themes/types';
+import type { ThemeName } from '../themes/themes';
+/**
+ * Options for creating themed links.
+ */
+export type LinkOptions = {
+    /** Theme to use (overrides global) */
+    theme?: Theme | ThemeName | undefined;
+    /** Show URL as fallback if terminal doesn't support links */
+    fallback?: boolean | undefined;
+};
+/**
+ * Create a themed hyperlink for terminal output.
+ * The link text is colored using the theme's link color.
+ *
+ * Note: Most terminals support ANSI color codes but not clickable links.
+ * This function colors the text but does not create clickable hyperlinks.
+ * For clickable links, use a library like 'terminal-link' separately.
+ *
+ * @param text - Link text to display
+ * @param url - URL (included in fallback mode)
+ * @param options - Link configuration options
+ * @returns Colored link text
+ *
+ * @example
+ * ```ts
+ * import { link } from '@socketsecurity/lib/links'
+ *
+ * // Use current theme
+ * console.log(link('Documentation', 'https://socket.dev'))
+ *
+ * // Override theme
+ * console.log(link('API Docs', 'https://api.socket.dev', {
+ *   theme: 'coana'
+ * }))
+ *
+ * // Show URL as fallback
+ * console.log(link('GitHub', 'https://github.com', {
+ *   fallback: true
+ * }))
+ * // Output: "GitHub (https://github.com)"
+ * ```
+ */
+export declare function link(text: string, url: string, options?: LinkOptions): string;
+/**
+ * Create multiple themed links from an array of link specifications.
+ *
+ * @param links - Array of [text, url] pairs
+ * @param options - Link configuration options
+ * @returns Array of colored link texts
+ *
+ * @example
+ * ```ts
+ * import { links } from '@socketsecurity/lib/links'
+ *
+ * const formatted = links([
+ *   ['Documentation', 'https://socket.dev'],
+ *   ['API Reference', 'https://api.socket.dev'],
+ *   ['GitHub', 'https://github.com/SocketDev']
+ * ])
+ *
+ * formatted.forEach(link => console.log(link))
+ * ```
+ */
+export declare function links(linkSpecs: Array<[text: string, url: string]>, options?: LinkOptions): string[];
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/links/index.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/links/index.js
new file mode 100644
index 00000000..96084731
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/links/index.js
@@ -0,0 +1,63 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var links_exports = {};
+__export(links_exports, {
+  link: () => link,
+  links: () => links
+});
+module.exports = __toCommonJS(links_exports);
+var import_yoctocolors_cjs = __toESM(require("../external/yoctocolors-cjs"));
+var import_context = require("../themes/context");
+var import_themes = require("../themes/themes");
+var import_utils = require("../themes/utils");
+function link(text, url, options) {
+  const opts = { __proto__: null, fallback: false, ...options };
+  const theme = typeof opts.theme === "string" ? import_themes.THEMES[opts.theme] : opts.theme ?? (0, import_context.getTheme)();
+  const linkColor = (0, import_utils.resolveColor)(theme.colors.link, theme.colors);
+  const colors = import_yoctocolors_cjs.default;
+  let colored;
+  if (typeof linkColor === "string" && linkColor !== "inherit") {
+    const colorMethod = colors[linkColor];
+    colored = colorMethod ? colorMethod(text) : colors.cyan(text);
+  } else if (Array.isArray(linkColor)) {
+    colored = colors.cyan(text);
+  } else {
+    colored = colors.cyan(text);
+  }
+  return opts.fallback ? `${colored} (${url})` : colored;
+}
+function links(linkSpecs, options) {
+  return linkSpecs.map(([text, url]) => link(text, url, options));
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  link,
+  links
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/logger.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/logger.d.ts
new file mode 100644
index 00000000..e2aedb54
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/logger.d.ts
@@ -0,0 +1,995 @@
+/**
+ * Log symbols for terminal output with colored indicators.
+ *
+ * Each symbol provides visual feedback for different message types, with
+ * Unicode and ASCII fallback support.
+ *
+ * @example
+ * ```typescript
+ * import { LOG_SYMBOLS } from '@socketsecurity/lib'
+ *
+ * console.log(`${LOG_SYMBOLS.success} Operation completed`)
+ * console.log(`${LOG_SYMBOLS.fail} Operation failed`)
+ * console.log(`${LOG_SYMBOLS.warn} Warning message`)
+ * console.log(`${LOG_SYMBOLS.info} Information message`)
+ * console.log(`${LOG_SYMBOLS.step} Processing step`)
+ * console.log(`${LOG_SYMBOLS.progress} Working on task`)
+ * ```
+ */
+type LogSymbols = {
+    /** Red colored failure symbol (✖ or × in ASCII) */
+    fail: string;
+    /** Blue colored information symbol (ℹ or i in ASCII) */
+    info: string;
+    /** Cyan colored progress indicator symbol (∴ or :. in ASCII) */
+    progress: string;
+    /** Cyan colored skip symbol (↻ or @ in ASCII) */
+    skip: string;
+    /** Cyan colored step symbol (→ or > in ASCII) */
+    step: string;
+    /** Green colored success symbol (✔ or √ in ASCII) */
+    success: string;
+    /** Yellow colored warning symbol (⚠ or ‼ in ASCII) */
+    warn: string;
+};
+/**
+ * Type definition for logger methods that mirror console methods.
+ *
+ * All methods return the logger instance for method chaining.
+ */
+type LoggerMethods = {
+    [K in keyof typeof console]: (typeof console)[K] extends (...args: infer A) => any ? (...args: A) => Logger : (typeof console)[K];
+};
+/**
+ * A task that can be executed with automatic start/complete logging.
+ *
+ * @example
+ * ```typescript
+ * const task = logger.createTask('Database migration')
+ * task.run(() => {
+ *   // Migration logic here
+ * })
+ * // Logs: "Starting task: Database migration"
+ * // Logs: "Completed task: Database migration"
+ * ```
+ */
+interface Task {
+    /**
+     * Executes the task function with automatic logging.
+     *
+     * @template T - The return type of the task function
+     * @param f - The function to execute
+     * @returns The result of the task function
+     */
+    run(f: () => T): T;
+}
+export type { LogSymbols, LoggerMethods, Task };
+/**
+ * Log symbols for terminal output with colored indicators.
+ *
+ * Provides colored Unicode symbols (✖, ℹ, ∴, →, ✔, ⚠) with ASCII fallbacks (×, i, :., >, √, ‼)
+ * for terminals that don't support Unicode. Symbols are colored according to the active
+ * theme's color palette (error, info, reason, step, success, warning).
+ *
+ * The symbols are lazily initialized on first access and automatically update when the
+ * fallback theme changes (via setTheme()). Note that LOG_SYMBOLS reflect the global
+ * fallback theme, not async-local theme contexts from withTheme().
+ *
+ * @example
+ * ```typescript
+ * import { LOG_SYMBOLS } from '@socketsecurity/lib'
+ *
+ * console.log(`${LOG_SYMBOLS.fail} Build failed`)          // Theme error color ✖
+ * console.log(`${LOG_SYMBOLS.info} Starting process`)      // Theme info color ℹ
+ * console.log(`${LOG_SYMBOLS.progress} Working on task`)   // Theme step color ∴
+ * console.log(`${LOG_SYMBOLS.step} Processing files`)      // Theme step color →
+ * console.log(`${LOG_SYMBOLS.success} Build completed`)    // Theme success color ✔
+ * console.log(`${LOG_SYMBOLS.warn} Deprecated API used`)   // Theme warning color ⚠
+ * ```
+ */
+export declare const LOG_SYMBOLS: Record;
+/**
+ * Symbol for incrementing the internal log call counter.
+ *
+ * This is an internal symbol used to track the number of times logging
+ * methods have been called on a logger instance.
+ */
+export declare const incLogCallCountSymbol: unique symbol;
+/**
+ * Symbol for tracking whether the last logged line was blank.
+ *
+ * This is used internally to prevent multiple consecutive blank lines
+ * and to determine whether to add spacing before certain messages.
+ */
+export declare const lastWasBlankSymbol: unique symbol;
+/**
+ * Enhanced console logger with indentation, colored symbols, and stream management.
+ *
+ * Provides a fluent API for logging with automatic indentation tracking, colored
+ * status symbols, separate stderr/stdout management, and method chaining. All
+ * methods return `this` for easy chaining.
+ *
+ * Features:
+ * - Automatic line prefixing with indentation
+ * - Colored status symbols (success, fail, warn, info)
+ * - Separate indentation tracking for stderr and stdout
+ * - Stream-bound logger instances via `.stderr` and `.stdout`
+ * - Group/indentation management
+ * - Progress indicators with clearable lines
+ * - Task execution with automatic logging
+ *
+ * @example
+ * ```typescript
+ * import { logger } from '@socketsecurity/lib'
+ *
+ * // Basic logging with symbols
+ * logger.success('Build completed')
+ * logger.fail('Build failed')
+ * logger.warn('Deprecated API')
+ * logger.info('Starting process')
+ *
+ * // Indentation and grouping
+ * logger.log('Processing files:')
+ * logger.indent()
+ * logger.log('file1.js')
+ * logger.log('file2.js')
+ * logger.dedent()
+ *
+ * // Method chaining
+ * logger
+ *   .log('Step 1')
+ *   .indent()
+ *   .log('Substep 1.1')
+ *   .log('Substep 1.2')
+ *   .dedent()
+ *   .log('Step 2')
+ *
+ * // Stream-specific logging
+ * logger.stdout.log('Normal output')
+ * logger.stderr.error('Error message')
+ *
+ * // Progress indicators
+ * logger.progress('Processing...')
+ * // ... do work ...
+ * logger.clearLine()
+ * logger.success('Done')
+ *
+ * // Task execution
+ * const task = logger.createTask('Migration')
+ * task.run(() => {
+ *   // Migration logic
+ * })
+ * ```
+ */
+/*@__PURE__*/
+export declare class Logger {
+    #private;
+    /**
+     * Static reference to log symbols for convenience.
+     *
+     * @example
+     * ```typescript
+     * console.log(`${Logger.LOG_SYMBOLS.success} Done`)
+     * ```
+     */
+    static LOG_SYMBOLS: Record;
+    /**
+     * Creates a new Logger instance.
+     *
+     * When called without arguments, creates a logger using the default
+     * `process.stdout` and `process.stderr` streams. Can accept custom
+     * console constructor arguments for advanced use cases.
+     *
+     * @param args - Optional console constructor arguments
+     *
+     * @example
+     * ```typescript
+     * // Default logger
+     * const logger = new Logger()
+     *
+     * // Custom streams (advanced)
+     * const customLogger = new Logger({
+     *   stdout: customWritableStream,
+     *   stderr: customErrorStream
+     * })
+     * ```
+     */
+    constructor(...args: unknown[]);
+    /**
+     * Gets a logger instance bound exclusively to stderr.
+     *
+     * All logging operations on this instance will write to stderr only.
+     * Indentation is tracked separately from stdout. The instance is
+     * cached and reused on subsequent accesses.
+     *
+     * @returns A logger instance bound to stderr
+     *
+     * @example
+     * ```typescript
+     * // Write errors to stderr
+     * logger.stderr.error('Configuration invalid')
+     * logger.stderr.warn('Using fallback settings')
+     *
+     * // Indent only affects stderr
+     * logger.stderr.indent()
+     * logger.stderr.error('Nested error details')
+     * logger.stderr.dedent()
+     * ```
+     */
+    get stderr(): Logger;
+    /**
+     * Gets a logger instance bound exclusively to stdout.
+     *
+     * All logging operations on this instance will write to stdout only.
+     * Indentation is tracked separately from stderr. The instance is
+     * cached and reused on subsequent accesses.
+     *
+     * @returns A logger instance bound to stdout
+     *
+     * @example
+     * ```typescript
+     * // Write normal output to stdout
+     * logger.stdout.log('Processing started')
+     * logger.stdout.log('Items processed: 42')
+     *
+     * // Indent only affects stdout
+     * logger.stdout.indent()
+     * logger.stdout.log('Detailed output')
+     * logger.stdout.dedent()
+     * ```
+     */
+    get stdout(): Logger;
+    /**
+     * Gets the total number of log calls made on this logger instance.
+     *
+     * Tracks all logging method calls including `log()`, `error()`, `warn()`,
+     * `success()`, `fail()`, etc. Useful for testing and monitoring logging activity.
+     *
+     * @returns The number of times logging methods have been called
+     *
+     * @example
+     * ```typescript
+     * logger.log('Message 1')
+     * logger.error('Message 2')
+     * console.log(logger.logCallCount) // 2
+     * ```
+     */
+    get logCallCount(): number;
+    /**
+     * Increments the internal log call counter.
+     *
+     * This is called automatically by logging methods and should not
+     * be called directly in normal usage.
+     *
+     * @returns The logger instance for chaining
+     */
+    [incLogCallCountSymbol](): this;
+    /**
+     * Sets whether the last logged line was blank.
+     *
+     * Used internally to track blank lines and prevent duplicate spacing.
+     * This is called automatically by logging methods.
+     *
+     * @param value - Whether the last line was blank
+     * @param stream - Optional stream to update (defaults to both streams if not bound, or target stream if bound)
+     * @returns The logger instance for chaining
+     */
+    [lastWasBlankSymbol](value: unknown, stream?: 'stderr' | 'stdout'): this;
+    /**
+     * Logs an assertion failure message if the value is falsy.
+     *
+     * Works like `console.assert()` but returns the logger for chaining.
+     * If the value is truthy, nothing is logged. If falsy, logs an error
+     * message with an assertion failure.
+     *
+     * @param value - The value to test
+     * @param message - Optional message and additional arguments to log
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.assert(true, 'This will not log')
+     * logger.assert(false, 'Assertion failed: value is false')
+     * logger.assert(items.length > 0, 'No items found')
+     * ```
+     */
+    assert(value: unknown, ...message: unknown[]): this;
+    /**
+     * Clears the current line in the terminal.
+     *
+     * Moves the cursor to the beginning of the line and clears all content.
+     * Works in both TTY and non-TTY environments. Useful for clearing
+     * progress indicators created with `progress()`.
+     *
+     * The stream to clear (stderr or stdout) depends on whether the logger
+     * is stream-bound.
+     *
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.progress('Loading...')
+     * // ... do work ...
+     * logger.clearLine()
+     * logger.success('Loaded')
+     *
+     * // Clear multiple progress updates
+     * for (const file of files) {
+     *   logger.progress(`Processing ${file}`)
+     *   processFile(file)
+     *   logger.clearLine()
+     * }
+     * logger.success('All files processed')
+     * ```
+     */
+    clearLine(): this;
+    /**
+     * Clears the visible terminal screen.
+     *
+     * Only available on the main logger instance, not on stream-bound instances
+     * (`.stderr` or `.stdout`). Resets the log call count and blank line tracking
+     * if the output is a TTY.
+     *
+     * @returns The logger instance for chaining
+     * @throws {Error} If called on a stream-bound logger instance
+     *
+     * @example
+     * ```typescript
+     * logger.log('Some output')
+     * logger.clearVisible()  // Screen is now clear
+     *
+     * // Error: Can't call on stream-bound instance
+     * logger.stderr.clearVisible()  // throws
+     * ```
+     */
+    clearVisible(): this;
+    /**
+     * Increments and logs a counter for the given label.
+     *
+     * Each unique label maintains its own counter. Works like `console.count()`.
+     *
+     * @param label - Optional label for the counter
+     * @default 'default'
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.count('requests')  // requests: 1
+     * logger.count('requests')  // requests: 2
+     * logger.count('errors')    // errors: 1
+     * logger.count()            // default: 1
+     * ```
+     */
+    count(label?: string | undefined): this;
+    /**
+     * Creates a task that logs start and completion messages automatically.
+     *
+     * Returns a task object with a `run()` method that executes the provided
+     * function and logs "Starting task: {name}" before execution and
+     * "Completed task: {name}" after completion.
+     *
+     * @param name - The name of the task
+     * @returns A task object with a `run()` method
+     *
+     * @example
+     * ```typescript
+     * const task = logger.createTask('Database Migration')
+     * const result = task.run(() => {
+     *   // Logs: "Starting task: Database Migration"
+     *   migrateDatabase()
+     *   return 'success'
+     *   // Logs: "Completed task: Database Migration"
+     * })
+     * console.log(result)  // 'success'
+     * ```
+     */
+    createTask(name: string): Task;
+    /**
+     * Decreases the indentation level by removing spaces from the prefix.
+     *
+     * When called on the main logger, affects both stderr and stdout indentation.
+     * When called on a stream-bound logger (`.stderr` or `.stdout`), affects
+     * only that stream's indentation.
+     *
+     * @param spaces - Number of spaces to remove from indentation
+     * @default 2
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.indent()
+     * logger.log('Indented')
+     * logger.dedent()
+     * logger.log('Back to normal')
+     *
+     * // Remove custom amount
+     * logger.indent(4)
+     * logger.log('Four spaces')
+     * logger.dedent(4)
+     *
+     * // Stream-specific dedent
+     * logger.stdout.indent()
+     * logger.stdout.log('Indented stdout')
+     * logger.stdout.dedent()
+     * ```
+     */
+    dedent(spaces?: number): this;
+    /**
+     * Displays an object's properties in a formatted way.
+     *
+     * Works like `console.dir()` with customizable options for depth,
+     * colors, etc. Useful for inspecting complex objects.
+     *
+     * @param obj - The object to display
+     * @param options - Optional formatting options (Node.js inspect options)
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * const obj = { a: 1, b: { c: 2, d: { e: 3 } } }
+     * logger.dir(obj)
+     * logger.dir(obj, { depth: 1 })  // Limit nesting depth
+     * logger.dir(obj, { colors: true })  // Enable colors
+     * ```
+     */
+    dir(obj: unknown, options?: unknown | undefined): this;
+    /**
+     * Displays data as XML/HTML in a formatted way.
+     *
+     * Works like `console.dirxml()`. In Node.js, behaves the same as `dir()`.
+     *
+     * @param data - The data to display
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.dirxml(document.body)  // In browser environments
+     * logger.dirxml(xmlObject)       // In Node.js
+     * ```
+     */
+    dirxml(...data: unknown[]): this;
+    /**
+     * Logs a completion message with a success symbol (alias for `success()`).
+     *
+     * Provides semantic clarity when marking something as "done". Does NOT
+     * automatically clear the current line - call `clearLine()` first if
+     * needed after using `progress()`.
+     *
+     * @param args - Message and additional arguments to log
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.done('Task completed')
+     *
+     * // After progress indicator
+     * logger.progress('Processing...')
+     * // ... do work ...
+     * logger.clearLine()
+     * logger.done('Processing complete')
+     * ```
+     */
+    done(...args: unknown[]): this;
+    /**
+     * Logs an error message to stderr.
+     *
+     * Automatically applies current indentation. All arguments are formatted
+     * and logged like `console.error()`.
+     *
+     * @param args - Message and additional arguments to log
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.error('Build failed')
+     * logger.error('Error code:', 500)
+     * logger.error('Details:', { message: 'Not found' })
+     * ```
+     */
+    error(...args: unknown[]): this;
+    /**
+     * Logs a newline to stderr only if the last line wasn't already blank.
+     *
+     * Prevents multiple consecutive blank lines. Useful for adding spacing
+     * between sections without creating excessive whitespace.
+     *
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.error('Error message')
+     * logger.errorNewline()  // Adds blank line
+     * logger.errorNewline()  // Does nothing (already blank)
+     * logger.error('Next section')
+     * ```
+     */
+    errorNewline(): this;
+    /**
+     * Logs a failure message with a red colored fail symbol.
+     *
+     * Automatically prefixes the message with `LOG_SYMBOLS.fail` (red ✖).
+     * Always outputs to stderr. If the message starts with an existing
+     * symbol, it will be stripped and replaced.
+     *
+     * @param args - Message and additional arguments to log
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.fail('Build failed')
+     * logger.fail('Test suite failed:', { passed: 5, failed: 3 })
+     * ```
+     */
+    fail(...args: unknown[]): this;
+    /**
+     * Starts a new indented log group.
+     *
+     * If a label is provided, it's logged before increasing indentation.
+     * Groups can be nested. Each group increases indentation by the
+     * `kGroupIndentWidth` (default 2 spaces). Call `groupEnd()` to close.
+     *
+     * @param label - Optional label to display before the group
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.group('Processing files:')
+     * logger.log('file1.js')
+     * logger.log('file2.js')
+     * logger.groupEnd()
+     *
+     * // Nested groups
+     * logger.group('Outer')
+     * logger.log('Outer content')
+     * logger.group('Inner')
+     * logger.log('Inner content')
+     * logger.groupEnd()
+     * logger.groupEnd()
+     * ```
+     */
+    group(...label: unknown[]): this;
+    /**
+     * Starts a new collapsed log group (alias for `group()`).
+     *
+     * In browser consoles, this creates a collapsed group. In Node.js,
+     * it behaves identically to `group()`.
+     *
+     * @param label - Optional label to display before the group
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.groupCollapsed('Details')
+     * logger.log('Hidden by default in browsers')
+     * logger.groupEnd()
+     * ```
+     */
+    // groupCollapsed is an alias of group.
+    // https://nodejs.org/api/console.html#consolegroupcollapsed
+    groupCollapsed(...label: unknown[]): this;
+    /**
+     * Ends the current log group and decreases indentation.
+     *
+     * Must be called once for each `group()` or `groupCollapsed()` call
+     * to properly close the group and restore indentation.
+     *
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.group('Group 1')
+     * logger.log('Content')
+     * logger.groupEnd()  // Closes 'Group 1'
+     * ```
+     */
+    groupEnd(): this;
+    /**
+     * Increases the indentation level by adding spaces to the prefix.
+     *
+     * When called on the main logger, affects both stderr and stdout indentation.
+     * When called on a stream-bound logger (`.stderr` or `.stdout`), affects
+     * only that stream's indentation. Maximum indentation is 1000 spaces.
+     *
+     * @param spaces - Number of spaces to add to indentation
+     * @default 2
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.log('Level 0')
+     * logger.indent()
+     * logger.log('Level 1')
+     * logger.indent()
+     * logger.log('Level 2')
+     * logger.dedent()
+     * logger.dedent()
+     *
+     * // Custom indent amount
+     * logger.indent(4)
+     * logger.log('Indented 4 spaces')
+     * logger.dedent(4)
+     *
+     * // Stream-specific indent
+     * logger.stdout.indent()
+     * logger.stdout.log('Only stdout is indented')
+     * ```
+     */
+    indent(spaces?: number): this;
+    /**
+     * Logs an informational message with a blue colored info symbol.
+     *
+     * Automatically prefixes the message with `LOG_SYMBOLS.info` (blue ℹ).
+     * Always outputs to stderr. If the message starts with an existing
+     * symbol, it will be stripped and replaced.
+     *
+     * @param args - Message and additional arguments to log
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.info('Starting build process')
+     * logger.info('Configuration loaded:', config)
+     * logger.info('Using cache directory:', cacheDir)
+     * ```
+     */
+    info(...args: unknown[]): this;
+    /**
+     * Logs a message to stdout.
+     *
+     * Automatically applies current indentation. All arguments are formatted
+     * and logged like `console.log()`. This is the primary method for
+     * standard output.
+     *
+     * @param args - Message and additional arguments to log
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.log('Processing complete')
+     * logger.log('Items processed:', 42)
+     * logger.log('Results:', { success: true, count: 10 })
+     *
+     * // Method chaining
+     * logger.log('Step 1').log('Step 2').log('Step 3')
+     * ```
+     */
+    log(...args: unknown[]): this;
+    /**
+     * Logs a newline to stdout only if the last line wasn't already blank.
+     *
+     * Prevents multiple consecutive blank lines. Useful for adding spacing
+     * between sections without creating excessive whitespace.
+     *
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.log('Section 1')
+     * logger.logNewline()  // Adds blank line
+     * logger.logNewline()  // Does nothing (already blank)
+     * logger.log('Section 2')
+     * ```
+     */
+    logNewline(): this;
+    /**
+     * Shows a progress indicator that can be cleared with `clearLine()`.
+     *
+     * Displays a simple status message with a '∴' prefix. Does not include
+     * animation or spinner. Intended to be cleared once the operation completes.
+     * The output stream (stderr or stdout) depends on whether the logger is
+     * stream-bound.
+     *
+     * @param text - The progress message to display
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.progress('Processing files...')
+     * // ... do work ...
+     * logger.clearLine()
+     * logger.success('Files processed')
+     *
+     * // Stream-specific progress
+     * logger.stdout.progress('Loading...')
+     * // ... do work ...
+     * logger.stdout.clearLine()
+     * logger.stdout.log('Done')
+     * ```
+     */
+    progress(text: string): this;
+    /**
+     * Resets all indentation to zero.
+     *
+     * When called on the main logger, resets both stderr and stdout indentation.
+     * When called on a stream-bound logger (`.stderr` or `.stdout`), resets
+     * only that stream's indentation.
+     *
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.indent().indent().indent()
+     * logger.log('Very indented')
+     * logger.resetIndent()
+     * logger.log('Back to zero indentation')
+     *
+     * // Reset only stdout
+     * logger.stdout.resetIndent()
+     * ```
+     */
+    resetIndent(): this;
+    /**
+     * Logs a skip message with a cyan colored skip symbol.
+     *
+     * Automatically prefixes the message with `LOG_SYMBOLS.skip` (cyan ↻).
+     * Always outputs to stderr. If the message starts with an existing
+     * symbol, it will be stripped and replaced.
+     *
+     * @param args - Message and additional arguments to log
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.skip('Test skipped due to environment')
+     * logger.skip('Skipping optional step')
+     * logger.skip('Feature disabled, skipping')
+     * ```
+     */
+    skip(...args: unknown[]): this;
+    /**
+     * Logs a main step message with a cyan arrow symbol and blank line before it.
+     *
+     * Automatically prefixes the message with `LOG_SYMBOLS.step` (cyan →) and
+     * adds a blank line before the message unless the last line was already blank.
+     * Useful for marking major steps in a process with clear visual separation.
+     * Always outputs to stdout. If the message starts with an existing symbol,
+     * it will be stripped and replaced.
+     *
+     * @param msg - The step message to log
+     * @param extras - Additional arguments to log
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.step('Building project')
+     * logger.log('Compiling TypeScript...')
+     * logger.step('Running tests')
+     * logger.log('Running test suite...')
+     * // Output:
+     * // [blank line]
+     * // → Building project
+     * // Compiling TypeScript...
+     * // [blank line]
+     * // → Running tests
+     * // Running test suite...
+     * ```
+     */
+    step(msg: string, ...extras: unknown[]): this;
+    /**
+     * Logs an indented substep message (stateless).
+     *
+     * Adds a 2-space indent to the message without affecting the logger's
+     * indentation state. Useful for showing sub-items under a main step.
+     *
+     * @param msg - The substep message to log
+     * @param extras - Additional arguments to log
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.log('Installing dependencies:')
+     * logger.substep('Installing react')
+     * logger.substep('Installing typescript')
+     * logger.substep('Installing eslint')
+     * // Output:
+     * // Installing dependencies:
+     * //   Installing react
+     * //   Installing typescript
+     * //   Installing eslint
+     * ```
+     */
+    substep(msg: string, ...extras: unknown[]): this;
+    /**
+     * Logs a success message with a green colored success symbol.
+     *
+     * Automatically prefixes the message with `LOG_SYMBOLS.success` (green ✔).
+     * Always outputs to stderr. If the message starts with an existing
+     * symbol, it will be stripped and replaced.
+     *
+     * @param args - Message and additional arguments to log
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.success('Build completed')
+     * logger.success('Tests passed:', { total: 42, passed: 42 })
+     * logger.success('Deployment successful')
+     * ```
+     */
+    success(...args: unknown[]): this;
+    /**
+     * Displays data in a table format.
+     *
+     * Works like `console.table()`. Accepts arrays of objects or
+     * objects with nested objects. Optionally specify which properties
+     * to include in the table.
+     *
+     * @param tabularData - The data to display as a table
+     * @param properties - Optional array of property names to include
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * // Array of objects
+     * logger.table([
+     *   { name: 'Alice', age: 30 },
+     *   { name: 'Bob', age: 25 }
+     * ])
+     *
+     * // Specify properties to show
+     * logger.table(users, ['name', 'email'])
+     *
+     * // Object with nested objects
+     * logger.table({
+     *   user1: { name: 'Alice', age: 30 },
+     *   user2: { name: 'Bob', age: 25 }
+     * })
+     * ```
+     */
+    table(tabularData: unknown, properties?: readonly string[] | undefined): this;
+    /**
+     * Starts a timer for measuring elapsed time.
+     *
+     * Creates a timer with the given label. Use `timeEnd()` with the same
+     * label to stop the timer and log the elapsed time, or use `timeLog()`
+     * to check the time without stopping the timer.
+     *
+     * @param label - Optional label for the timer
+     * @default 'default'
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.time('operation')
+     * // ... do work ...
+     * logger.timeEnd('operation')
+     * // Logs: "operation: 123.456ms"
+     *
+     * logger.time()
+     * // ... do work ...
+     * logger.timeEnd()
+     * // Logs: "default: 123.456ms"
+     * ```
+     */
+    time(label?: string | undefined): this;
+    /**
+     * Ends a timer and logs the elapsed time.
+     *
+     * Logs the duration since `console.time()` or `logger.time()` was called
+     * with the same label. The timer is stopped and removed.
+     *
+     * @param label - Optional label for the timer
+     * @default 'default'
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.time('operation')
+     * // ... do work ...
+     * logger.timeEnd('operation')
+     * // Logs: "operation: 123.456ms"
+     *
+     * logger.time()
+     * // ... do work ...
+     * logger.timeEnd()
+     * // Logs: "default: 123.456ms"
+     * ```
+     */
+    timeEnd(label?: string | undefined): this;
+    /**
+     * Logs the current value of a timer without stopping it.
+     *
+     * Logs the duration since `console.time()` was called with the same
+     * label, but keeps the timer running. Can include additional data
+     * to log alongside the time.
+     *
+     * @param label - Optional label for the timer
+     * @param data - Additional data to log with the time
+     * @default 'default'
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * console.time('process')
+     * // ... partial work ...
+     * logger.timeLog('process', 'Checkpoint 1')
+     * // Logs: "process: 123.456ms Checkpoint 1"
+     * // ... more work ...
+     * logger.timeLog('process', 'Checkpoint 2')
+     * // Logs: "process: 234.567ms Checkpoint 2"
+     * console.timeEnd('process')
+     * ```
+     */
+    timeLog(label?: string | undefined, ...data: unknown[]): this;
+    /**
+     * Logs a stack trace to the console.
+     *
+     * Works like `console.trace()`. Shows the call stack leading to
+     * where this method was called. Useful for debugging.
+     *
+     * @param message - Optional message to display with the trace
+     * @param args - Additional arguments to log
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * function debugFunction() {
+     *   logger.trace('Debug point reached')
+     * }
+     *
+     * logger.trace('Trace from here')
+     * logger.trace('Error context:', { userId: 123 })
+     * ```
+     */
+    trace(message?: unknown | undefined, ...args: unknown[]): this;
+    /**
+     * Logs a warning message with a yellow colored warning symbol.
+     *
+     * Automatically prefixes the message with `LOG_SYMBOLS.warn` (yellow ⚠).
+     * Always outputs to stderr. If the message starts with an existing
+     * symbol, it will be stripped and replaced.
+     *
+     * @param args - Message and additional arguments to log
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.warn('Deprecated API used')
+     * logger.warn('Low memory:', { available: '100MB' })
+     * logger.warn('Missing optional configuration')
+     * ```
+     */
+    warn(...args: unknown[]): this;
+    /**
+     * Writes text directly to stdout without a newline or indentation.
+     *
+     * Useful for progress indicators or custom formatting where you need
+     * low-level control. Does not apply any indentation or formatting.
+     *
+     * @param text - The text to write
+     * @returns The logger instance for chaining
+     *
+     * @example
+     * ```typescript
+     * logger.write('Processing... ')
+     * // ... do work ...
+     * logger.write('done\n')
+     *
+     * // Build a line incrementally
+     * logger.write('Step 1')
+     * logger.write('... Step 2')
+     * logger.write('... Step 3\n')
+     * ```
+     */
+    write(text: string): this;
+}
+/**
+ * Get the default logger instance.
+ * Lazily creates the logger to avoid circular dependencies during module initialization.
+ * Reuses the same instance across calls.
+ *
+ * @returns Shared default logger instance
+ *
+ * @example
+ * ```ts
+ * import { getDefaultLogger } from '@socketsecurity/lib/logger'
+ *
+ * const logger = getDefaultLogger()
+ * logger.log('Application started')
+ * logger.success('Configuration loaded')
+ * ```
+ */
+export declare function getDefaultLogger(): Logger;
+// REMOVED: Deprecated `logger` export
+// Migration: Use getDefaultLogger() instead
+// See: getDefaultLogger() function above
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/logger.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/logger.js
new file mode 100644
index 00000000..3acbeb35
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/logger.js
@@ -0,0 +1,1484 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var logger_exports = {};
+__export(logger_exports, {
+  LOG_SYMBOLS: () => LOG_SYMBOLS,
+  Logger: () => Logger,
+  getDefaultLogger: () => getDefaultLogger,
+  incLogCallCountSymbol: () => incLogCallCountSymbol,
+  lastWasBlankSymbol: () => lastWasBlankSymbol
+});
+module.exports = __toCommonJS(logger_exports);
+var import_node_process = __toESM(require("node:process"));
+var import_is_unicode_supported = __toESM(require("./external/@socketregistry/is-unicode-supported"));
+var import_yoctocolors_cjs = __toESM(require("./external/yoctocolors-cjs"));
+var import_strings = require("./strings");
+var import_context = require("./themes/context");
+var import_themes = require("./themes/themes");
+const globalConsole = console;
+const ReflectApply = Reflect.apply;
+const ReflectConstruct = Reflect.construct;
+let _Console;
+// @__NO_SIDE_EFFECTS__
+function constructConsole(...args) {
+  if (_Console === void 0) {
+    const nodeConsole = require("console");
+    _Console = nodeConsole.Console;
+  }
+  return ReflectConstruct(
+    _Console,
+    // eslint-disable-line no-undef
+    args
+  );
+}
+// @__NO_SIDE_EFFECTS__
+function getYoctocolors() {
+  return import_yoctocolors_cjs.default;
+}
+// @__NO_SIDE_EFFECTS__
+function applyColor(text, color, colors) {
+  if (typeof color === "string") {
+    return colors[color](text);
+  }
+  const { 0: r, 1: g, 2: b } = color;
+  return `\x1B[38;2;${r};${g};${b}m${text}\x1B[39m`;
+}
+const LOG_SYMBOLS = /* @__PURE__ */ (() => {
+  const target = {
+    __proto__: null
+  };
+  let initialized = false;
+  const handler = {
+    __proto__: null
+  };
+  const updateSymbols = () => {
+    const supported = (0, import_is_unicode_supported.default)();
+    const colors = /* @__PURE__ */ getYoctocolors();
+    const theme = (0, import_context.getTheme)();
+    const successColor = theme.colors.success;
+    const errorColor = theme.colors.error;
+    const warningColor = theme.colors.warning;
+    const infoColor = theme.colors.info;
+    const stepColor = theme.colors.step;
+    target.fail = /* @__PURE__ */ applyColor(supported ? "\u2716" : "\xD7", errorColor, colors);
+    target.info = /* @__PURE__ */ applyColor(supported ? "\u2139" : "i", infoColor, colors);
+    target.progress = /* @__PURE__ */ applyColor(supported ? "\u2234" : ":.", stepColor, colors);
+    target.reason = colors.dim(
+      /* @__PURE__ */ applyColor(supported ? "\u2234" : ":.", warningColor, colors)
+    );
+    target.skip = /* @__PURE__ */ applyColor(supported ? "\u21BB" : "@", stepColor, colors);
+    target.step = /* @__PURE__ */ applyColor(supported ? "\u2192" : ">", stepColor, colors);
+    target.success = /* @__PURE__ */ applyColor(supported ? "\u2714" : "\u221A", successColor, colors);
+    target.warn = /* @__PURE__ */ applyColor(supported ? "\u26A0" : "\u203C", warningColor, colors);
+  };
+  const init = () => {
+    if (initialized) {
+      return;
+    }
+    updateSymbols();
+    initialized = true;
+    for (const trapName in handler) {
+      delete handler[trapName];
+    }
+  };
+  const reset = () => {
+    if (!initialized) {
+      return;
+    }
+    updateSymbols();
+  };
+  for (const trapName of Reflect.ownKeys(Reflect)) {
+    const fn = Reflect[trapName];
+    if (typeof fn === "function") {
+      ;
+      handler[trapName] = (...args) => {
+        init();
+        return fn(...args);
+      };
+    }
+  }
+  (0, import_context.onThemeChange)(() => {
+    reset();
+  });
+  return new Proxy(target, handler);
+})();
+const boundConsoleEntries = [
+  // Add bound properties from console[kBindProperties](ignoreErrors, colorMode, groupIndentation).
+  // https://github.com/nodejs/node/blob/v24.0.1/lib/internal/console/constructor.js#L230-L265
+  "_stderrErrorHandler",
+  "_stdoutErrorHandler",
+  // Add methods that need to be bound to function properly.
+  "assert",
+  "clear",
+  "count",
+  "countReset",
+  "createTask",
+  "debug",
+  "dir",
+  "dirxml",
+  "error",
+  // Skip group methods because in at least Node 20 with the Node --frozen-intrinsics
+  // flag it triggers a readonly property for Symbol(kGroupIndent). Instead, we
+  // implement these methods ourselves.
+  //'group',
+  //'groupCollapsed',
+  //'groupEnd',
+  "info",
+  "log",
+  "table",
+  "time",
+  "timeEnd",
+  "timeLog",
+  "trace",
+  "warn"
+].filter((n) => typeof globalConsole[n] === "function").map((n) => [n, globalConsole[n].bind(globalConsole)]);
+const consolePropAttributes = {
+  __proto__: null,
+  writable: true,
+  enumerable: false,
+  configurable: true
+};
+const maxIndentation = 1e3;
+const privateConsole = /* @__PURE__ */ new WeakMap();
+const privateConstructorArgs = /* @__PURE__ */ new WeakMap();
+let _consoleSymbols;
+function getConsoleSymbols() {
+  if (_consoleSymbols === void 0) {
+    _consoleSymbols = Object.getOwnPropertySymbols(globalConsole);
+  }
+  return _consoleSymbols;
+}
+const incLogCallCountSymbol = Symbol.for("logger.logCallCount++");
+let _kGroupIndentationWidthSymbol;
+function getKGroupIndentationWidthSymbol() {
+  if (_kGroupIndentationWidthSymbol === void 0) {
+    _kGroupIndentationWidthSymbol = getConsoleSymbols().find((s) => s.label === "kGroupIndentWidth") ?? Symbol("kGroupIndentWidth");
+  }
+  return _kGroupIndentationWidthSymbol;
+}
+const lastWasBlankSymbol = Symbol.for("logger.lastWasBlank");
+class Logger {
+  /**
+   * Static reference to log symbols for convenience.
+   *
+   * @example
+   * ```typescript
+   * console.log(`${Logger.LOG_SYMBOLS.success} Done`)
+   * ```
+   */
+  static LOG_SYMBOLS = LOG_SYMBOLS;
+  #parent;
+  #boundStream;
+  #stderrLogger;
+  #stdoutLogger;
+  #stderrIndention = "";
+  #stdoutIndention = "";
+  #stderrLastWasBlank = false;
+  #stdoutLastWasBlank = false;
+  #logCallCount = 0;
+  #options;
+  #originalStdout;
+  #theme;
+  /**
+   * Creates a new Logger instance.
+   *
+   * When called without arguments, creates a logger using the default
+   * `process.stdout` and `process.stderr` streams. Can accept custom
+   * console constructor arguments for advanced use cases.
+   *
+   * @param args - Optional console constructor arguments
+   *
+   * @example
+   * ```typescript
+   * // Default logger
+   * const logger = new Logger()
+   *
+   * // Custom streams (advanced)
+   * const customLogger = new Logger({
+   *   stdout: customWritableStream,
+   *   stderr: customErrorStream
+   * })
+   * ```
+   */
+  constructor(...args) {
+    privateConstructorArgs.set(this, args);
+    const options = args["0"];
+    if (typeof options === "object" && options !== null) {
+      this.#options = { __proto__: null, ...options };
+      this.#originalStdout = options.stdout;
+      const themeOption = options.theme;
+      if (themeOption) {
+        if (typeof themeOption === "string") {
+          this.#theme = import_themes.THEMES[themeOption];
+        } else {
+          this.#theme = themeOption;
+        }
+      }
+    } else {
+      this.#options = { __proto__: null };
+    }
+  }
+  /**
+   * Apply a console method with indentation.
+   * @private
+   */
+  #apply(methodName, args, stream) {
+    const con = this.#getConsole();
+    const text = args.at(0);
+    const hasText = typeof text === "string";
+    const targetStream = stream || (methodName === "log" ? "stdout" : "stderr");
+    const indent = this.#getIndent(targetStream);
+    const logArgs = hasText ? [(0, import_strings.applyLinePrefix)(text, { prefix: indent }), ...args.slice(1)] : args;
+    ReflectApply(
+      con[methodName],
+      con,
+      logArgs
+    );
+    this[lastWasBlankSymbol](hasText && (0, import_strings.isBlankString)(logArgs[0]), targetStream);
+    this[incLogCallCountSymbol]();
+    return this;
+  }
+  /**
+   * Get the Console instance for this logger, creating it lazily on first access.
+   *
+   * This lazy initialization allows the logger to be imported during early
+   * Node.js bootstrap before stdout is ready, avoiding Console initialization
+   * errors (ERR_CONSOLE_WRITABLE_STREAM).
+   *
+   * @private
+   */
+  #getConsole() {
+    ensurePrototypeInitialized();
+    let con = privateConsole.get(this);
+    if (!con) {
+      const ctorArgs = privateConstructorArgs.get(this) ?? [];
+      if (ctorArgs.length) {
+        con = /* @__PURE__ */ constructConsole(...ctorArgs);
+      } else {
+        con = /* @__PURE__ */ constructConsole({
+          stdout: import_node_process.default.stdout,
+          stderr: import_node_process.default.stderr
+        });
+        for (const { 0: key, 1: method } of boundConsoleEntries) {
+          con[key] = method;
+        }
+      }
+      privateConsole.set(this, con);
+      privateConstructorArgs.delete(this);
+    }
+    return con;
+  }
+  /**
+   * Get indentation for a specific stream.
+   * @private
+   */
+  #getIndent(stream) {
+    const root = this.#getRoot();
+    return stream === "stderr" ? root.#stderrIndention : root.#stdoutIndention;
+  }
+  /**
+   * Get lastWasBlank state for a specific stream.
+   * @private
+   */
+  #getLastWasBlank(stream) {
+    const root = this.#getRoot();
+    return stream === "stderr" ? root.#stderrLastWasBlank : root.#stdoutLastWasBlank;
+  }
+  /**
+   * Get the root logger (for accessing shared indentation state).
+   * @private
+   */
+  #getRoot() {
+    return this.#parent || this;
+  }
+  /**
+   * Get logger-specific symbols using the resolved theme.
+   * @private
+   */
+  #getSymbols() {
+    const theme = this.#getTheme();
+    const supported = (0, import_is_unicode_supported.default)();
+    const colors = /* @__PURE__ */ getYoctocolors();
+    return {
+      __proto__: null,
+      fail: /* @__PURE__ */ applyColor(supported ? "\u2716" : "\xD7", theme.colors.error, colors),
+      info: /* @__PURE__ */ applyColor(supported ? "\u2139" : "i", theme.colors.info, colors),
+      progress: /* @__PURE__ */ applyColor(supported ? "\u2234" : ":.", theme.colors.step, colors),
+      skip: /* @__PURE__ */ applyColor(supported ? "\u21BB" : "@", theme.colors.step, colors),
+      step: /* @__PURE__ */ applyColor(supported ? "\u2192" : ">", theme.colors.step, colors),
+      success: /* @__PURE__ */ applyColor(supported ? "\u2714" : "\u221A", theme.colors.success, colors),
+      warn: /* @__PURE__ */ applyColor(supported ? "\u26A0" : "\u203C", theme.colors.warning, colors)
+    };
+  }
+  /**
+   * Get the target stream for this logger instance.
+   * @private
+   */
+  #getTargetStream() {
+    return this.#boundStream || "stderr";
+  }
+  /**
+   * Get the resolved theme for this logger instance.
+   * Returns instance theme if set, otherwise falls back to context theme.
+   * @private
+   */
+  #getTheme() {
+    return this.#theme ?? (0, import_context.getTheme)();
+  }
+  /**
+   * Set indentation for a specific stream.
+   * @private
+   */
+  #setIndent(stream, value) {
+    const root = this.#getRoot();
+    if (stream === "stderr") {
+      root.#stderrIndention = value;
+    } else {
+      root.#stdoutIndention = value;
+    }
+  }
+  /**
+   * Set lastWasBlank state for a specific stream.
+   * @private
+   */
+  #setLastWasBlank(stream, value) {
+    const root = this.#getRoot();
+    if (stream === "stderr") {
+      root.#stderrLastWasBlank = value;
+    } else {
+      root.#stdoutLastWasBlank = value;
+    }
+  }
+  /**
+   * Strip log symbols from the start of text.
+   * @private
+   */
+  #stripSymbols(text) {
+    return text.replace(/^(?:[✖✗×⚠‼✔✓√ℹ→∴↻]|:.)[\uFE0F\s]*/u, "");
+  }
+  /**
+   * Apply a method with a symbol prefix.
+   * @private
+   */
+  #symbolApply(symbolType, args) {
+    const con = this.#getConsole();
+    let text = args.at(0);
+    let extras;
+    if (typeof text === "string") {
+      text = this.#stripSymbols(text);
+      extras = args.slice(1);
+    } else {
+      extras = args;
+      text = "";
+    }
+    const indent = this.#getIndent("stderr");
+    const symbols = this.#getSymbols();
+    con.error(
+      (0, import_strings.applyLinePrefix)(`${symbols[symbolType]} ${text}`, {
+        prefix: indent
+      }),
+      ...extras
+    );
+    this[lastWasBlankSymbol](false, "stderr");
+    this[incLogCallCountSymbol]();
+    return this;
+  }
+  /**
+   * Gets a logger instance bound exclusively to stderr.
+   *
+   * All logging operations on this instance will write to stderr only.
+   * Indentation is tracked separately from stdout. The instance is
+   * cached and reused on subsequent accesses.
+   *
+   * @returns A logger instance bound to stderr
+   *
+   * @example
+   * ```typescript
+   * // Write errors to stderr
+   * logger.stderr.error('Configuration invalid')
+   * logger.stderr.warn('Using fallback settings')
+   *
+   * // Indent only affects stderr
+   * logger.stderr.indent()
+   * logger.stderr.error('Nested error details')
+   * logger.stderr.dedent()
+   * ```
+   */
+  get stderr() {
+    if (!this.#stderrLogger) {
+      const ctorArgs = privateConstructorArgs.get(this) ?? [];
+      const instance = new Logger(...ctorArgs);
+      instance.#parent = this;
+      instance.#boundStream = "stderr";
+      instance.#options = { __proto__: null, ...this.#options };
+      instance.#theme = this.#theme;
+      this.#stderrLogger = instance;
+    }
+    return this.#stderrLogger;
+  }
+  /**
+   * Gets a logger instance bound exclusively to stdout.
+   *
+   * All logging operations on this instance will write to stdout only.
+   * Indentation is tracked separately from stderr. The instance is
+   * cached and reused on subsequent accesses.
+   *
+   * @returns A logger instance bound to stdout
+   *
+   * @example
+   * ```typescript
+   * // Write normal output to stdout
+   * logger.stdout.log('Processing started')
+   * logger.stdout.log('Items processed: 42')
+   *
+   * // Indent only affects stdout
+   * logger.stdout.indent()
+   * logger.stdout.log('Detailed output')
+   * logger.stdout.dedent()
+   * ```
+   */
+  get stdout() {
+    if (!this.#stdoutLogger) {
+      const ctorArgs = privateConstructorArgs.get(this) ?? [];
+      const instance = new Logger(...ctorArgs);
+      instance.#parent = this;
+      instance.#boundStream = "stdout";
+      instance.#options = { __proto__: null, ...this.#options };
+      instance.#theme = this.#theme;
+      this.#stdoutLogger = instance;
+    }
+    return this.#stdoutLogger;
+  }
+  /**
+   * Gets the total number of log calls made on this logger instance.
+   *
+   * Tracks all logging method calls including `log()`, `error()`, `warn()`,
+   * `success()`, `fail()`, etc. Useful for testing and monitoring logging activity.
+   *
+   * @returns The number of times logging methods have been called
+   *
+   * @example
+   * ```typescript
+   * logger.log('Message 1')
+   * logger.error('Message 2')
+   * console.log(logger.logCallCount) // 2
+   * ```
+   */
+  get logCallCount() {
+    const root = this.#getRoot();
+    return root.#logCallCount;
+  }
+  /**
+   * Increments the internal log call counter.
+   *
+   * This is called automatically by logging methods and should not
+   * be called directly in normal usage.
+   *
+   * @returns The logger instance for chaining
+   */
+  [incLogCallCountSymbol]() {
+    const root = this.#getRoot();
+    root.#logCallCount += 1;
+    return this;
+  }
+  /**
+   * Sets whether the last logged line was blank.
+   *
+   * Used internally to track blank lines and prevent duplicate spacing.
+   * This is called automatically by logging methods.
+   *
+   * @param value - Whether the last line was blank
+   * @param stream - Optional stream to update (defaults to both streams if not bound, or target stream if bound)
+   * @returns The logger instance for chaining
+   */
+  [lastWasBlankSymbol](value, stream) {
+    if (stream) {
+      this.#setLastWasBlank(stream, !!value);
+    } else if (this.#boundStream) {
+      this.#setLastWasBlank(this.#boundStream, !!value);
+    } else {
+      this.#setLastWasBlank("stderr", !!value);
+      this.#setLastWasBlank("stdout", !!value);
+    }
+    return this;
+  }
+  /**
+   * Logs an assertion failure message if the value is falsy.
+   *
+   * Works like `console.assert()` but returns the logger for chaining.
+   * If the value is truthy, nothing is logged. If falsy, logs an error
+   * message with an assertion failure.
+   *
+   * @param value - The value to test
+   * @param message - Optional message and additional arguments to log
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.assert(true, 'This will not log')
+   * logger.assert(false, 'Assertion failed: value is false')
+   * logger.assert(items.length > 0, 'No items found')
+   * ```
+   */
+  assert(value, ...message) {
+    const con = this.#getConsole();
+    con.assert(value, message[0], ...message.slice(1));
+    this[lastWasBlankSymbol](false);
+    return value ? this : this[incLogCallCountSymbol]();
+  }
+  /**
+   * Clears the current line in the terminal.
+   *
+   * Moves the cursor to the beginning of the line and clears all content.
+   * Works in both TTY and non-TTY environments. Useful for clearing
+   * progress indicators created with `progress()`.
+   *
+   * The stream to clear (stderr or stdout) depends on whether the logger
+   * is stream-bound.
+   *
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.progress('Loading...')
+   * // ... do work ...
+   * logger.clearLine()
+   * logger.success('Loaded')
+   *
+   * // Clear multiple progress updates
+   * for (const file of files) {
+   *   logger.progress(`Processing ${file}`)
+   *   processFile(file)
+   *   logger.clearLine()
+   * }
+   * logger.success('All files processed')
+   * ```
+   */
+  clearLine() {
+    const con = this.#getConsole();
+    const stream = this.#getTargetStream();
+    const streamObj = stream === "stderr" ? con._stderr : con._stdout;
+    if (streamObj.isTTY) {
+      streamObj.cursorTo(0);
+      streamObj.clearLine(0);
+    } else {
+      streamObj.write("\r\x1B[K");
+    }
+    return this;
+  }
+  /**
+   * Clears the visible terminal screen.
+   *
+   * Only available on the main logger instance, not on stream-bound instances
+   * (`.stderr` or `.stdout`). Resets the log call count and blank line tracking
+   * if the output is a TTY.
+   *
+   * @returns The logger instance for chaining
+   * @throws {Error} If called on a stream-bound logger instance
+   *
+   * @example
+   * ```typescript
+   * logger.log('Some output')
+   * logger.clearVisible()  // Screen is now clear
+   *
+   * // Error: Can't call on stream-bound instance
+   * logger.stderr.clearVisible()  // throws
+   * ```
+   */
+  clearVisible() {
+    if (this.#boundStream) {
+      throw new Error(
+        "clearVisible() is only available on the main logger instance, not on stream-bound instances"
+      );
+    }
+    const con = this.#getConsole();
+    con.clear();
+    if (con._stdout.isTTY) {
+      ;
+      this[lastWasBlankSymbol](true);
+      this.#logCallCount = 0;
+    }
+    return this;
+  }
+  /**
+   * Increments and logs a counter for the given label.
+   *
+   * Each unique label maintains its own counter. Works like `console.count()`.
+   *
+   * @param label - Optional label for the counter
+   * @default 'default'
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.count('requests')  // requests: 1
+   * logger.count('requests')  // requests: 2
+   * logger.count('errors')    // errors: 1
+   * logger.count()            // default: 1
+   * ```
+   */
+  count(label) {
+    const con = this.#getConsole();
+    con.count(label);
+    this[lastWasBlankSymbol](false);
+    return this[incLogCallCountSymbol]();
+  }
+  /**
+   * Creates a task that logs start and completion messages automatically.
+   *
+   * Returns a task object with a `run()` method that executes the provided
+   * function and logs "Starting task: {name}" before execution and
+   * "Completed task: {name}" after completion.
+   *
+   * @param name - The name of the task
+   * @returns A task object with a `run()` method
+   *
+   * @example
+   * ```typescript
+   * const task = logger.createTask('Database Migration')
+   * const result = task.run(() => {
+   *   // Logs: "Starting task: Database Migration"
+   *   migrateDatabase()
+   *   return 'success'
+   *   // Logs: "Completed task: Database Migration"
+   * })
+   * console.log(result)  // 'success'
+   * ```
+   */
+  createTask(name) {
+    return {
+      run: (f) => {
+        this.log(`Starting task: ${name}`);
+        const result = f();
+        this.log(`Completed task: ${name}`);
+        return result;
+      }
+    };
+  }
+  /**
+   * Decreases the indentation level by removing spaces from the prefix.
+   *
+   * When called on the main logger, affects both stderr and stdout indentation.
+   * When called on a stream-bound logger (`.stderr` or `.stdout`), affects
+   * only that stream's indentation.
+   *
+   * @param spaces - Number of spaces to remove from indentation
+   * @default 2
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.indent()
+   * logger.log('Indented')
+   * logger.dedent()
+   * logger.log('Back to normal')
+   *
+   * // Remove custom amount
+   * logger.indent(4)
+   * logger.log('Four spaces')
+   * logger.dedent(4)
+   *
+   * // Stream-specific dedent
+   * logger.stdout.indent()
+   * logger.stdout.log('Indented stdout')
+   * logger.stdout.dedent()
+   * ```
+   */
+  dedent(spaces = 2) {
+    if (this.#boundStream) {
+      const current = this.#getIndent(this.#boundStream);
+      this.#setIndent(this.#boundStream, current.slice(0, -spaces));
+    } else {
+      const stderrCurrent = this.#getIndent("stderr");
+      const stdoutCurrent = this.#getIndent("stdout");
+      this.#setIndent("stderr", stderrCurrent.slice(0, -spaces));
+      this.#setIndent("stdout", stdoutCurrent.slice(0, -spaces));
+    }
+    return this;
+  }
+  /**
+   * Displays an object's properties in a formatted way.
+   *
+   * Works like `console.dir()` with customizable options for depth,
+   * colors, etc. Useful for inspecting complex objects.
+   *
+   * @param obj - The object to display
+   * @param options - Optional formatting options (Node.js inspect options)
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * const obj = { a: 1, b: { c: 2, d: { e: 3 } } }
+   * logger.dir(obj)
+   * logger.dir(obj, { depth: 1 })  // Limit nesting depth
+   * logger.dir(obj, { colors: true })  // Enable colors
+   * ```
+   */
+  dir(obj, options) {
+    const con = this.#getConsole();
+    con.dir(obj, options);
+    this[lastWasBlankSymbol](false);
+    return this[incLogCallCountSymbol]();
+  }
+  /**
+   * Displays data as XML/HTML in a formatted way.
+   *
+   * Works like `console.dirxml()`. In Node.js, behaves the same as `dir()`.
+   *
+   * @param data - The data to display
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.dirxml(document.body)  // In browser environments
+   * logger.dirxml(xmlObject)       // In Node.js
+   * ```
+   */
+  dirxml(...data) {
+    const con = this.#getConsole();
+    con.dirxml(data);
+    this[lastWasBlankSymbol](false);
+    return this[incLogCallCountSymbol]();
+  }
+  /**
+   * Logs a completion message with a success symbol (alias for `success()`).
+   *
+   * Provides semantic clarity when marking something as "done". Does NOT
+   * automatically clear the current line - call `clearLine()` first if
+   * needed after using `progress()`.
+   *
+   * @param args - Message and additional arguments to log
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.done('Task completed')
+   *
+   * // After progress indicator
+   * logger.progress('Processing...')
+   * // ... do work ...
+   * logger.clearLine()
+   * logger.done('Processing complete')
+   * ```
+   */
+  done(...args) {
+    return this.#symbolApply("success", args);
+  }
+  /**
+   * Logs an error message to stderr.
+   *
+   * Automatically applies current indentation. All arguments are formatted
+   * and logged like `console.error()`.
+   *
+   * @param args - Message and additional arguments to log
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.error('Build failed')
+   * logger.error('Error code:', 500)
+   * logger.error('Details:', { message: 'Not found' })
+   * ```
+   */
+  error(...args) {
+    return this.#apply("error", args);
+  }
+  /**
+   * Logs a newline to stderr only if the last line wasn't already blank.
+   *
+   * Prevents multiple consecutive blank lines. Useful for adding spacing
+   * between sections without creating excessive whitespace.
+   *
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.error('Error message')
+   * logger.errorNewline()  // Adds blank line
+   * logger.errorNewline()  // Does nothing (already blank)
+   * logger.error('Next section')
+   * ```
+   */
+  errorNewline() {
+    return this.#getLastWasBlank("stderr") ? this : this.error("");
+  }
+  /**
+   * Logs a failure message with a red colored fail symbol.
+   *
+   * Automatically prefixes the message with `LOG_SYMBOLS.fail` (red ✖).
+   * Always outputs to stderr. If the message starts with an existing
+   * symbol, it will be stripped and replaced.
+   *
+   * @param args - Message and additional arguments to log
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.fail('Build failed')
+   * logger.fail('Test suite failed:', { passed: 5, failed: 3 })
+   * ```
+   */
+  fail(...args) {
+    return this.#symbolApply("fail", args);
+  }
+  /**
+   * Starts a new indented log group.
+   *
+   * If a label is provided, it's logged before increasing indentation.
+   * Groups can be nested. Each group increases indentation by the
+   * `kGroupIndentWidth` (default 2 spaces). Call `groupEnd()` to close.
+   *
+   * @param label - Optional label to display before the group
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.group('Processing files:')
+   * logger.log('file1.js')
+   * logger.log('file2.js')
+   * logger.groupEnd()
+   *
+   * // Nested groups
+   * logger.group('Outer')
+   * logger.log('Outer content')
+   * logger.group('Inner')
+   * logger.log('Inner content')
+   * logger.groupEnd()
+   * logger.groupEnd()
+   * ```
+   */
+  group(...label) {
+    const { length } = label;
+    if (length) {
+      ReflectApply(this.log, this, label);
+    }
+    this.indent(this[getKGroupIndentationWidthSymbol()]);
+    if (length) {
+      ;
+      this[lastWasBlankSymbol](false);
+      this[incLogCallCountSymbol]();
+    }
+    return this;
+  }
+  /**
+   * Starts a new collapsed log group (alias for `group()`).
+   *
+   * In browser consoles, this creates a collapsed group. In Node.js,
+   * it behaves identically to `group()`.
+   *
+   * @param label - Optional label to display before the group
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.groupCollapsed('Details')
+   * logger.log('Hidden by default in browsers')
+   * logger.groupEnd()
+   * ```
+   */
+  // groupCollapsed is an alias of group.
+  // https://nodejs.org/api/console.html#consolegroupcollapsed
+  groupCollapsed(...label) {
+    return ReflectApply(this.group, this, label);
+  }
+  /**
+   * Ends the current log group and decreases indentation.
+   *
+   * Must be called once for each `group()` or `groupCollapsed()` call
+   * to properly close the group and restore indentation.
+   *
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.group('Group 1')
+   * logger.log('Content')
+   * logger.groupEnd()  // Closes 'Group 1'
+   * ```
+   */
+  groupEnd() {
+    this.dedent(this[getKGroupIndentationWidthSymbol()]);
+    return this;
+  }
+  /**
+   * Increases the indentation level by adding spaces to the prefix.
+   *
+   * When called on the main logger, affects both stderr and stdout indentation.
+   * When called on a stream-bound logger (`.stderr` or `.stdout`), affects
+   * only that stream's indentation. Maximum indentation is 1000 spaces.
+   *
+   * @param spaces - Number of spaces to add to indentation
+   * @default 2
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.log('Level 0')
+   * logger.indent()
+   * logger.log('Level 1')
+   * logger.indent()
+   * logger.log('Level 2')
+   * logger.dedent()
+   * logger.dedent()
+   *
+   * // Custom indent amount
+   * logger.indent(4)
+   * logger.log('Indented 4 spaces')
+   * logger.dedent(4)
+   *
+   * // Stream-specific indent
+   * logger.stdout.indent()
+   * logger.stdout.log('Only stdout is indented')
+   * ```
+   */
+  indent(spaces = 2) {
+    const spacesToAdd = " ".repeat(Math.min(spaces, maxIndentation));
+    if (this.#boundStream) {
+      const current = this.#getIndent(this.#boundStream);
+      this.#setIndent(this.#boundStream, current + spacesToAdd);
+    } else {
+      const stderrCurrent = this.#getIndent("stderr");
+      const stdoutCurrent = this.#getIndent("stdout");
+      this.#setIndent("stderr", stderrCurrent + spacesToAdd);
+      this.#setIndent("stdout", stdoutCurrent + spacesToAdd);
+    }
+    return this;
+  }
+  /**
+   * Logs an informational message with a blue colored info symbol.
+   *
+   * Automatically prefixes the message with `LOG_SYMBOLS.info` (blue ℹ).
+   * Always outputs to stderr. If the message starts with an existing
+   * symbol, it will be stripped and replaced.
+   *
+   * @param args - Message and additional arguments to log
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.info('Starting build process')
+   * logger.info('Configuration loaded:', config)
+   * logger.info('Using cache directory:', cacheDir)
+   * ```
+   */
+  info(...args) {
+    return this.#symbolApply("info", args);
+  }
+  /**
+   * Logs a message to stdout.
+   *
+   * Automatically applies current indentation. All arguments are formatted
+   * and logged like `console.log()`. This is the primary method for
+   * standard output.
+   *
+   * @param args - Message and additional arguments to log
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.log('Processing complete')
+   * logger.log('Items processed:', 42)
+   * logger.log('Results:', { success: true, count: 10 })
+   *
+   * // Method chaining
+   * logger.log('Step 1').log('Step 2').log('Step 3')
+   * ```
+   */
+  log(...args) {
+    return this.#apply("log", args);
+  }
+  /**
+   * Logs a newline to stdout only if the last line wasn't already blank.
+   *
+   * Prevents multiple consecutive blank lines. Useful for adding spacing
+   * between sections without creating excessive whitespace.
+   *
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.log('Section 1')
+   * logger.logNewline()  // Adds blank line
+   * logger.logNewline()  // Does nothing (already blank)
+   * logger.log('Section 2')
+   * ```
+   */
+  logNewline() {
+    return this.#getLastWasBlank("stdout") ? this : this.log("");
+  }
+  /**
+   * Shows a progress indicator that can be cleared with `clearLine()`.
+   *
+   * Displays a simple status message with a '∴' prefix. Does not include
+   * animation or spinner. Intended to be cleared once the operation completes.
+   * The output stream (stderr or stdout) depends on whether the logger is
+   * stream-bound.
+   *
+   * @param text - The progress message to display
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.progress('Processing files...')
+   * // ... do work ...
+   * logger.clearLine()
+   * logger.success('Files processed')
+   *
+   * // Stream-specific progress
+   * logger.stdout.progress('Loading...')
+   * // ... do work ...
+   * logger.stdout.clearLine()
+   * logger.stdout.log('Done')
+   * ```
+   */
+  progress(text) {
+    const con = this.#getConsole();
+    const stream = this.#getTargetStream();
+    const streamObj = stream === "stderr" ? con._stderr : con._stdout;
+    const symbols = this.#getSymbols();
+    streamObj.write(`${symbols.progress} ${text}`);
+    this[lastWasBlankSymbol](false);
+    return this;
+  }
+  /**
+   * Resets all indentation to zero.
+   *
+   * When called on the main logger, resets both stderr and stdout indentation.
+   * When called on a stream-bound logger (`.stderr` or `.stdout`), resets
+   * only that stream's indentation.
+   *
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.indent().indent().indent()
+   * logger.log('Very indented')
+   * logger.resetIndent()
+   * logger.log('Back to zero indentation')
+   *
+   * // Reset only stdout
+   * logger.stdout.resetIndent()
+   * ```
+   */
+  resetIndent() {
+    if (this.#boundStream) {
+      this.#setIndent(this.#boundStream, "");
+    } else {
+      this.#setIndent("stderr", "");
+      this.#setIndent("stdout", "");
+    }
+    return this;
+  }
+  /**
+   * Logs a skip message with a cyan colored skip symbol.
+   *
+   * Automatically prefixes the message with `LOG_SYMBOLS.skip` (cyan ↻).
+   * Always outputs to stderr. If the message starts with an existing
+   * symbol, it will be stripped and replaced.
+   *
+   * @param args - Message and additional arguments to log
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.skip('Test skipped due to environment')
+   * logger.skip('Skipping optional step')
+   * logger.skip('Feature disabled, skipping')
+   * ```
+   */
+  skip(...args) {
+    return this.#symbolApply("skip", args);
+  }
+  /**
+   * Logs a main step message with a cyan arrow symbol and blank line before it.
+   *
+   * Automatically prefixes the message with `LOG_SYMBOLS.step` (cyan →) and
+   * adds a blank line before the message unless the last line was already blank.
+   * Useful for marking major steps in a process with clear visual separation.
+   * Always outputs to stdout. If the message starts with an existing symbol,
+   * it will be stripped and replaced.
+   *
+   * @param msg - The step message to log
+   * @param extras - Additional arguments to log
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.step('Building project')
+   * logger.log('Compiling TypeScript...')
+   * logger.step('Running tests')
+   * logger.log('Running test suite...')
+   * // Output:
+   * // [blank line]
+   * // → Building project
+   * // Compiling TypeScript...
+   * // [blank line]
+   * // → Running tests
+   * // Running test suite...
+   * ```
+   */
+  step(msg, ...extras) {
+    if (!this.#getLastWasBlank("stdout")) {
+      this.log("");
+    }
+    const text = this.#stripSymbols(msg);
+    const indent = this.#getIndent("stdout");
+    const symbols = this.#getSymbols();
+    const con = this.#getConsole();
+    con.log(
+      (0, import_strings.applyLinePrefix)(`${symbols.step} ${text}`, {
+        prefix: indent
+      }),
+      ...extras
+    );
+    this[lastWasBlankSymbol](false, "stdout");
+    this[incLogCallCountSymbol]();
+    return this;
+  }
+  /**
+   * Logs an indented substep message (stateless).
+   *
+   * Adds a 2-space indent to the message without affecting the logger's
+   * indentation state. Useful for showing sub-items under a main step.
+   *
+   * @param msg - The substep message to log
+   * @param extras - Additional arguments to log
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.log('Installing dependencies:')
+   * logger.substep('Installing react')
+   * logger.substep('Installing typescript')
+   * logger.substep('Installing eslint')
+   * // Output:
+   * // Installing dependencies:
+   * //   Installing react
+   * //   Installing typescript
+   * //   Installing eslint
+   * ```
+   */
+  substep(msg, ...extras) {
+    const indentedMsg = `  ${msg}`;
+    return this.log(indentedMsg, ...extras);
+  }
+  /**
+   * Logs a success message with a green colored success symbol.
+   *
+   * Automatically prefixes the message with `LOG_SYMBOLS.success` (green ✔).
+   * Always outputs to stderr. If the message starts with an existing
+   * symbol, it will be stripped and replaced.
+   *
+   * @param args - Message and additional arguments to log
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.success('Build completed')
+   * logger.success('Tests passed:', { total: 42, passed: 42 })
+   * logger.success('Deployment successful')
+   * ```
+   */
+  success(...args) {
+    return this.#symbolApply("success", args);
+  }
+  /**
+   * Displays data in a table format.
+   *
+   * Works like `console.table()`. Accepts arrays of objects or
+   * objects with nested objects. Optionally specify which properties
+   * to include in the table.
+   *
+   * @param tabularData - The data to display as a table
+   * @param properties - Optional array of property names to include
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * // Array of objects
+   * logger.table([
+   *   { name: 'Alice', age: 30 },
+   *   { name: 'Bob', age: 25 }
+   * ])
+   *
+   * // Specify properties to show
+   * logger.table(users, ['name', 'email'])
+   *
+   * // Object with nested objects
+   * logger.table({
+   *   user1: { name: 'Alice', age: 30 },
+   *   user2: { name: 'Bob', age: 25 }
+   * })
+   * ```
+   */
+  table(tabularData, properties) {
+    const con = this.#getConsole();
+    con.table(tabularData, properties);
+    this[lastWasBlankSymbol](false);
+    return this[incLogCallCountSymbol]();
+  }
+  /**
+   * Starts a timer for measuring elapsed time.
+   *
+   * Creates a timer with the given label. Use `timeEnd()` with the same
+   * label to stop the timer and log the elapsed time, or use `timeLog()`
+   * to check the time without stopping the timer.
+   *
+   * @param label - Optional label for the timer
+   * @default 'default'
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.time('operation')
+   * // ... do work ...
+   * logger.timeEnd('operation')
+   * // Logs: "operation: 123.456ms"
+   *
+   * logger.time()
+   * // ... do work ...
+   * logger.timeEnd()
+   * // Logs: "default: 123.456ms"
+   * ```
+   */
+  time(label) {
+    const con = this.#getConsole();
+    con.time(label);
+    return this;
+  }
+  /**
+   * Ends a timer and logs the elapsed time.
+   *
+   * Logs the duration since `console.time()` or `logger.time()` was called
+   * with the same label. The timer is stopped and removed.
+   *
+   * @param label - Optional label for the timer
+   * @default 'default'
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.time('operation')
+   * // ... do work ...
+   * logger.timeEnd('operation')
+   * // Logs: "operation: 123.456ms"
+   *
+   * logger.time()
+   * // ... do work ...
+   * logger.timeEnd()
+   * // Logs: "default: 123.456ms"
+   * ```
+   */
+  timeEnd(label) {
+    const con = this.#getConsole();
+    con.timeEnd(label);
+    this[lastWasBlankSymbol](false);
+    return this[incLogCallCountSymbol]();
+  }
+  /**
+   * Logs the current value of a timer without stopping it.
+   *
+   * Logs the duration since `console.time()` was called with the same
+   * label, but keeps the timer running. Can include additional data
+   * to log alongside the time.
+   *
+   * @param label - Optional label for the timer
+   * @param data - Additional data to log with the time
+   * @default 'default'
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * console.time('process')
+   * // ... partial work ...
+   * logger.timeLog('process', 'Checkpoint 1')
+   * // Logs: "process: 123.456ms Checkpoint 1"
+   * // ... more work ...
+   * logger.timeLog('process', 'Checkpoint 2')
+   * // Logs: "process: 234.567ms Checkpoint 2"
+   * console.timeEnd('process')
+   * ```
+   */
+  timeLog(label, ...data) {
+    const con = this.#getConsole();
+    con.timeLog(label, ...data);
+    this[lastWasBlankSymbol](false);
+    return this[incLogCallCountSymbol]();
+  }
+  /**
+   * Logs a stack trace to the console.
+   *
+   * Works like `console.trace()`. Shows the call stack leading to
+   * where this method was called. Useful for debugging.
+   *
+   * @param message - Optional message to display with the trace
+   * @param args - Additional arguments to log
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * function debugFunction() {
+   *   logger.trace('Debug point reached')
+   * }
+   *
+   * logger.trace('Trace from here')
+   * logger.trace('Error context:', { userId: 123 })
+   * ```
+   */
+  trace(message, ...args) {
+    const con = this.#getConsole();
+    con.trace(message, ...args);
+    this[lastWasBlankSymbol](false);
+    return this[incLogCallCountSymbol]();
+  }
+  /**
+   * Logs a warning message with a yellow colored warning symbol.
+   *
+   * Automatically prefixes the message with `LOG_SYMBOLS.warn` (yellow ⚠).
+   * Always outputs to stderr. If the message starts with an existing
+   * symbol, it will be stripped and replaced.
+   *
+   * @param args - Message and additional arguments to log
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.warn('Deprecated API used')
+   * logger.warn('Low memory:', { available: '100MB' })
+   * logger.warn('Missing optional configuration')
+   * ```
+   */
+  warn(...args) {
+    return this.#symbolApply("warn", args);
+  }
+  /**
+   * Writes text directly to stdout without a newline or indentation.
+   *
+   * Useful for progress indicators or custom formatting where you need
+   * low-level control. Does not apply any indentation or formatting.
+   *
+   * @param text - The text to write
+   * @returns The logger instance for chaining
+   *
+   * @example
+   * ```typescript
+   * logger.write('Processing... ')
+   * // ... do work ...
+   * logger.write('done\n')
+   *
+   * // Build a line incrementally
+   * logger.write('Step 1')
+   * logger.write('... Step 2')
+   * logger.write('... Step 3\n')
+   * ```
+   */
+  write(text) {
+    const con = this.#getConsole();
+    const ctorArgs = privateConstructorArgs.get(this) ?? [];
+    const stdout = this.#originalStdout || ctorArgs[0]?.stdout || con._stdout;
+    stdout.write(text);
+    this[lastWasBlankSymbol](false);
+    return this;
+  }
+}
+let _prototypeInitialized = false;
+function ensurePrototypeInitialized() {
+  if (_prototypeInitialized) {
+    return;
+  }
+  _prototypeInitialized = true;
+  const entries = [
+    [
+      getKGroupIndentationWidthSymbol(),
+      {
+        ...consolePropAttributes,
+        value: 2
+      }
+    ],
+    [
+      Symbol.toStringTag,
+      {
+        __proto__: null,
+        configurable: true,
+        value: "logger"
+      }
+    ]
+  ];
+  for (const { 0: key, 1: value } of Object.entries(globalConsole)) {
+    if (!Logger.prototype[key] && typeof value === "function") {
+      const { [key]: func } = {
+        [key](...args) {
+          let con = privateConsole.get(this);
+          if (con === void 0) {
+            const ctorArgs = privateConstructorArgs.get(this) ?? [];
+            privateConstructorArgs.delete(this);
+            if (ctorArgs.length) {
+              con = /* @__PURE__ */ constructConsole(...ctorArgs);
+            } else {
+              con = /* @__PURE__ */ constructConsole({
+                stdout: import_node_process.default.stdout,
+                stderr: import_node_process.default.stderr
+              });
+              for (const { 0: k, 1: method } of boundConsoleEntries) {
+                con[k] = method;
+              }
+            }
+            privateConsole.set(this, con);
+          }
+          const result = con[key](...args);
+          return result === void 0 || result === con ? this : result;
+        }
+      };
+      entries.push([
+        key,
+        {
+          ...consolePropAttributes,
+          value: func
+        }
+      ]);
+    }
+  }
+  Object.defineProperties(Logger.prototype, Object.fromEntries(entries));
+}
+let _logger;
+function getDefaultLogger() {
+  if (_logger === void 0) {
+    _logger = new Logger();
+  }
+  return _logger;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  LOG_SYMBOLS,
+  Logger,
+  getDefaultLogger,
+  incLogCallCountSymbol,
+  lastWasBlankSymbol
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/memoization.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/memoization.d.ts
new file mode 100644
index 00000000..3de106dd
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/memoization.d.ts
@@ -0,0 +1,147 @@
+/**
+ * Options for memoization behavior.
+ */
+type MemoizeOptions = {
+    /** Custom cache key generator (defaults to JSON.stringify) */
+    keyGen?: (...args: Args) => string;
+    /** Maximum cache size (LRU eviction when exceeded) */
+    maxSize?: number;
+    /** TTL in milliseconds (cache entries expire after this time) */
+    ttl?: number;
+    /** Cache name for debugging */
+    name?: string;
+    /** Weak cache for object keys (enables GC) */
+    weak?: boolean;
+    /** Custom equality check for cache hits */
+    equals?: (a: Args, b: Args) => boolean;
+};
+/**
+ * Memoize a function with configurable caching behavior.
+ * Caches function results to avoid repeated computation.
+ *
+ * @param fn - Function to memoize
+ * @param options - Memoization options
+ * @returns Memoized version of the function
+ *
+ * @example
+ * import { memoize } from '@socketsecurity/lib/memoization'
+ *
+ * const expensiveOperation = memoize((n: number) => {
+ *   // Heavy computation
+ *   return Array(n).fill(0).reduce((a, _, i) => a + i, 0)
+ * }, { maxSize: 100, ttl: 60000, name: 'sum' })
+ *
+ * expensiveOperation(1000) // Computed
+ * expensiveOperation(1000) // Cached
+ */
+export declare function memoize(fn: (...args: Args) => Result, options?: MemoizeOptions): (...args: Args) => Result;
+/**
+ * Memoize an async function.
+ * Similar to memoize() but handles promises properly.
+ *
+ * @param fn - Async function to memoize
+ * @param options - Memoization options
+ * @returns Memoized version of the async function
+ *
+ * @example
+ * import { memoizeAsync } from '@socketsecurity/lib/memoization'
+ *
+ * const fetchUser = memoizeAsync(async (id: string) => {
+ *   const response = await fetch(`/api/users/${id}`)
+ *   return response.json()
+ * }, { ttl: 300000, name: 'fetchUser' })
+ *
+ * await fetchUser('123') // Fetches from API
+ * await fetchUser('123') // Returns cached result
+ */
+export declare function memoizeAsync(fn: (...args: Args) => Promise, options?: MemoizeOptions): (...args: Args) => Promise;
+/**
+ * Create a memoized version of a method.
+ * Preserves 'this' context for class methods.
+ *
+ * @param target - Object containing the method
+ * @param propertyKey - Method name
+ * @param descriptor - Property descriptor
+ * @returns Modified descriptor with memoized method
+ *
+ * @example
+ * import { Memoize } from '@socketsecurity/lib/memoization'
+ *
+ * class Calculator {
+ *   @Memoize()
+ *   fibonacci(n: number): number {
+ *     if (n <= 1) return n
+ *     return this.fibonacci(n - 1) + this.fibonacci(n - 2)
+ *   }
+ * }
+ */
+export declare function Memoize(options?: MemoizeOptions): (_target: unknown, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
+/**
+ * Clear all memoization caches.
+ * Useful for testing or when you need to force recomputation.
+ *
+ * @example
+ * ```typescript
+ * clearAllMemoizationCaches()
+ * ```
+ */
+export declare function clearAllMemoizationCaches(): void;
+/**
+ * Memoize with WeakMap for object keys.
+ * Allows garbage collection when objects are no longer referenced.
+ * Only works when first argument is an object.
+ *
+ * @param fn - Function to memoize
+ * @returns Memoized version using WeakMap
+ *
+ * @example
+ * import { memoizeWeak } from '@socketsecurity/lib/memoization'
+ *
+ * const processConfig = memoizeWeak((config: Config) => {
+ *   return expensiveTransform(config)
+ * })
+ *
+ * processConfig(config1) // Computed
+ * processConfig(config1) // Cached
+ * // When config1 is no longer referenced, cache entry is GC'd
+ */
+export declare function memoizeWeak(fn: (key: K) => Result): (key: K) => Result;
+/**
+ * Simple once() implementation - caches single result forever.
+ * Useful for initialization functions that should only run once.
+ *
+ * @param fn - Function to run once
+ * @returns Memoized version that only executes once
+ *
+ * @example
+ * import { once } from '@socketsecurity/lib/memoization'
+ *
+ * const initialize = once(() => {
+ *   console.log('Initializing…')
+ *   return loadConfig()
+ * })
+ *
+ * initialize() // Logs "Initializing…" and returns config
+ * initialize() // Returns cached config (no log)
+ */
+export declare function once(fn: () => Result): () => Result;
+/**
+ * Create a debounced memoized function.
+ * Combines memoization with debouncing for expensive operations.
+ *
+ * @param fn - Function to memoize and debounce
+ * @param wait - Debounce wait time in milliseconds
+ * @param options - Memoization options
+ * @returns Debounced memoized function
+ *
+ * @example
+ * import { memoizeDebounced } from '@socketsecurity/lib/memoization'
+ *
+ * const search = memoizeDebounced(
+ *   (query: string) => performSearch(query),
+ *   300,
+ *   { name: 'search' }
+ * )
+ */
+export declare function memoizeDebounced(fn: (...args: Args) => Result, wait: number, options?: MemoizeOptions): (...args: Args) => Result;
+export {};
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/memoization.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/memoization.js
new file mode 100644
index 00000000..3a450b1a
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/memoization.js
@@ -0,0 +1,254 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var memoization_exports = {};
+__export(memoization_exports, {
+  Memoize: () => Memoize,
+  clearAllMemoizationCaches: () => clearAllMemoizationCaches,
+  memoize: () => memoize,
+  memoizeAsync: () => memoizeAsync,
+  memoizeDebounced: () => memoizeDebounced,
+  memoizeWeak: () => memoizeWeak,
+  once: () => once
+});
+module.exports = __toCommonJS(memoization_exports);
+var import_debug = require("./debug");
+const cacheRegistry = [];
+function memoize(fn, options = {}) {
+  const {
+    keyGen = (...args) => JSON.stringify(args),
+    maxSize = Number.POSITIVE_INFINITY,
+    name = fn.name || "anonymous",
+    ttl = Number.POSITIVE_INFINITY
+  } = options;
+  if (ttl < 0) {
+    throw new TypeError("TTL must be non-negative");
+  }
+  const cache = /* @__PURE__ */ new Map();
+  const accessOrder = [];
+  cacheRegistry.push(() => {
+    cache.clear();
+    accessOrder.length = 0;
+  });
+  function evictLRU() {
+    if (cache.size >= maxSize && accessOrder.length > 0) {
+      const oldest = accessOrder.shift();
+      if (oldest) {
+        cache.delete(oldest);
+        (0, import_debug.debugLog)(`[memoize:${name}] clear`, {
+          key: oldest,
+          reason: "LRU"
+        });
+      }
+    }
+  }
+  function isExpired(entry) {
+    if (ttl === Number.POSITIVE_INFINITY) {
+      return false;
+    }
+    return Date.now() - entry.timestamp > ttl;
+  }
+  return function memoized(...args) {
+    const key = keyGen(...args);
+    const cached = cache.get(key);
+    if (cached) {
+      if (!isExpired(cached)) {
+        cached.hits++;
+        const index2 = accessOrder.indexOf(key);
+        if (index2 !== -1) {
+          accessOrder.splice(index2, 1);
+        }
+        accessOrder.push(key);
+        (0, import_debug.debugLog)(`[memoize:${name}] hit`, { key, hits: cached.hits });
+        return cached.value;
+      }
+      cache.delete(key);
+      const index = accessOrder.indexOf(key);
+      if (index !== -1) {
+        accessOrder.splice(index, 1);
+      }
+    }
+    (0, import_debug.debugLog)(`[memoize:${name}] miss`, { key });
+    const value = fn(...args);
+    evictLRU();
+    cache.set(key, {
+      value,
+      timestamp: Date.now(),
+      hits: 0
+    });
+    accessOrder.push(key);
+    (0, import_debug.debugLog)(`[memoize:${name}] set`, { key, cacheSize: cache.size });
+    return value;
+  };
+}
+function memoizeAsync(fn, options = {}) {
+  const {
+    keyGen = (...args) => JSON.stringify(args),
+    maxSize = Number.POSITIVE_INFINITY,
+    name = fn.name || "anonymous",
+    ttl = Number.POSITIVE_INFINITY
+  } = options;
+  const cache = /* @__PURE__ */ new Map();
+  const accessOrder = [];
+  cacheRegistry.push(() => {
+    cache.clear();
+    accessOrder.length = 0;
+  });
+  function evictLRU() {
+    if (cache.size >= maxSize && accessOrder.length > 0) {
+      const oldest = accessOrder.shift();
+      if (oldest) {
+        cache.delete(oldest);
+        (0, import_debug.debugLog)(`[memoizeAsync:${name}] clear`, {
+          key: oldest,
+          reason: "LRU"
+        });
+      }
+    }
+  }
+  function isExpired(entry) {
+    if (ttl === Number.POSITIVE_INFINITY) {
+      return false;
+    }
+    return Date.now() - entry.timestamp > ttl;
+  }
+  const refreshing = /* @__PURE__ */ new Set();
+  return async function memoized(...args) {
+    const key = keyGen(...args);
+    const cached = cache.get(key);
+    if (cached) {
+      if (!isExpired(cached)) {
+        cached.hits++;
+        const index2 = accessOrder.indexOf(key);
+        if (index2 !== -1) {
+          accessOrder.splice(index2, 1);
+        }
+        accessOrder.push(key);
+        (0, import_debug.debugLog)(`[memoizeAsync:${name}] hit`, { key, hits: cached.hits });
+        return await cached.value;
+      }
+      if (refreshing.has(key)) {
+        (0, import_debug.debugLog)(`[memoizeAsync:${name}] stale-dedup`, { key });
+        return await cached.value;
+      }
+      cache.delete(key);
+      const index = accessOrder.indexOf(key);
+      if (index !== -1) {
+        accessOrder.splice(index, 1);
+      }
+    }
+    (0, import_debug.debugLog)(`[memoizeAsync:${name}] miss`, { key });
+    refreshing.add(key);
+    const promise = fn(...args).then(
+      (result) => {
+        refreshing.delete(key);
+        const entry = cache.get(key);
+        if (entry) {
+          entry.value = Promise.resolve(result);
+        }
+        return result;
+      },
+      (error) => {
+        refreshing.delete(key);
+        cache.delete(key);
+        const index = accessOrder.indexOf(key);
+        if (index !== -1) {
+          accessOrder.splice(index, 1);
+        }
+        (0, import_debug.debugLog)(`[memoizeAsync:${name}] error`, { key, error });
+        throw error;
+      }
+    );
+    evictLRU();
+    cache.set(key, {
+      value: promise,
+      timestamp: Date.now(),
+      hits: 0
+    });
+    accessOrder.push(key);
+    (0, import_debug.debugLog)(`[memoizeAsync:${name}] set`, { key, cacheSize: cache.size });
+    return await promise;
+  };
+}
+function Memoize(options = {}) {
+  return (_target, propertyKey, descriptor) => {
+    const originalMethod = descriptor.value;
+    descriptor.value = memoize(originalMethod, {
+      ...options,
+      name: options.name || propertyKey
+    });
+    return descriptor;
+  };
+}
+function clearAllMemoizationCaches() {
+  (0, import_debug.debugLog)("[memoize:all] clear", { action: "clear-all-caches" });
+  for (const clear of cacheRegistry) {
+    clear();
+  }
+}
+function memoizeWeak(fn) {
+  const cache = /* @__PURE__ */ new WeakMap();
+  return function memoized(key) {
+    if (cache.has(key)) {
+      (0, import_debug.debugLog)(`[memoizeWeak:${fn.name}] hit`);
+      return cache.get(key);
+    }
+    (0, import_debug.debugLog)(`[memoizeWeak:${fn.name}] miss`);
+    const result = fn(key);
+    cache.set(key, result);
+    return result;
+  };
+}
+function once(fn) {
+  let called = false;
+  let result;
+  return function memoized() {
+    if (!called) {
+      result = fn();
+      called = true;
+      (0, import_debug.debugLog)(`[once:${fn.name}] set`);
+    } else {
+      (0, import_debug.debugLog)(`[once:${fn.name}] hit`);
+    }
+    return result;
+  };
+}
+function memoizeDebounced(fn, wait, options = {}) {
+  const memoized = memoize(fn, options);
+  let timeoutId;
+  return function debounced(...args) {
+    if (timeoutId) {
+      clearTimeout(timeoutId);
+    }
+    timeoutId = setTimeout(() => {
+      memoized(...args);
+    }, wait);
+    return memoized(...args);
+  };
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  Memoize,
+  clearAllMemoizationCaches,
+  memoize,
+  memoizeAsync,
+  memoizeDebounced,
+  memoizeWeak,
+  once
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/objects.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/objects.d.ts
new file mode 100644
index 00000000..561a0b63
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/objects.d.ts
@@ -0,0 +1,519 @@
+// Type definitions
+/**
+ * Record of property keys mapped to getter functions.
+ * Used for defining lazy getters on objects.
+ */
+type GetterDefObj = {
+    [key: PropertyKey]: () => unknown;
+};
+/**
+ * Statistics tracking for lazy getter initialization.
+ * Keeps track of which lazy getters have been accessed and initialized.
+ */
+type LazyGetterStats = {
+    initialized?: Set | undefined;
+};
+/**
+ * Configuration options for creating constants objects.
+ */
+type ConstantsObjectOptions = {
+    /**
+     * Lazy getter definitions to attach to the object.
+     * @default undefined
+     */
+    getters?: GetterDefObj | undefined;
+    /**
+     * Internal properties to store under `kInternalsSymbol`.
+     * @default undefined
+     */
+    internals?: object | undefined;
+    /**
+     * Properties to mix into the object (lower priority than `props`).
+     * @default undefined
+     */
+    mixin?: object | undefined;
+};
+/**
+ * Type helper that creates a remapped type with fresh property mapping.
+ * Useful for flattening intersection types into a single object type.
+ */
+type Remap = {
+    [K in keyof T]: T[K];
+} extends infer O ? {
+    [K in keyof O]: O[K];
+} : never;
+/**
+ * Type for generic property bag.
+ */
+type PropertyBag = {
+    [key: PropertyKey]: unknown;
+};
+/**
+ * Type for generic sorted object entries.
+ */
+type SortedObject = {
+    [key: PropertyKey]: T;
+};
+export type { GetterDefObj, LazyGetterStats, ConstantsObjectOptions, Remap };
+/**
+ * Create a frozen constants object with lazy getters and internal properties.
+ *
+ * This function creates an immutable object with:
+ * - Regular properties from `props`
+ * - Lazy getters that compute values on first access
+ * - Internal properties accessible via `kInternalsSymbol`
+ * - Mixin properties (lower priority, won't override existing)
+ * - Alphabetically sorted keys for consistency
+ *
+ * The resulting object is deeply frozen and cannot be modified.
+ *
+ * @param props - Regular properties to include on the object
+ * @param options_ - Configuration options
+ * @returns A frozen object with all specified properties
+ *
+ * @example
+ * ```ts
+ * const config = createConstantsObject(
+ *   { apiUrl: 'https://api.example.com' },
+ *   {
+ *     getters: {
+ *       client: () => new APIClient(),
+ *       timestamp: () => Date.now()
+ *     },
+ *     internals: {
+ *       version: '1.0.0'
+ *     }
+ *   }
+ * )
+ *
+ * console.log(config.apiUrl) // 'https://api.example.com'
+ * console.log(config.client) // APIClient instance (computed on first access)
+ * console.log(config[kInternalsSymbol].version) // '1.0.0'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function createConstantsObject(props: object, options_?: ConstantsObjectOptions | undefined): Readonly;
+/**
+ * Create a lazy getter function that memoizes its result.
+ *
+ * The returned function will only call the getter once, caching the result
+ * for subsequent calls. This is useful for expensive computations or
+ * operations that should only happen when needed.
+ *
+ * @param name - The property key name for the getter (used for debugging and stats)
+ * @param getter - Function that computes the value on first access
+ * @param stats - Optional stats object to track initialization
+ * @returns A memoized getter function
+ *
+ * @example
+ * ```ts
+ * const stats = { initialized: new Set() }
+ * const getLargeData = createLazyGetter('data', () => {
+ *   console.log('Computing expensive data...')
+ *   return { large: 'dataset' }
+ * }, stats)
+ *
+ * getLargeData() // Logs "Computing expensive data..." and returns data
+ * getLargeData() // Returns cached data without logging
+ * console.log(stats.initialized.has('data')) // true
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function createLazyGetter(name: PropertyKey, getter: () => T, stats?: LazyGetterStats | undefined): () => T;
+/**
+ * Define a getter property on an object.
+ *
+ * The getter is non-enumerable and configurable, meaning it won't show up
+ * in `for...in` loops or `Object.keys()`, but can be redefined later.
+ *
+ * @param object - The object to define the getter on
+ * @param propKey - The property key for the getter
+ * @param getter - Function that computes the property value
+ * @returns The modified object (for chaining)
+ *
+ * @example
+ * ```ts
+ * const obj = {}
+ * defineGetter(obj, 'timestamp', () => Date.now())
+ * console.log(obj.timestamp) // Current timestamp
+ * console.log(obj.timestamp) // Different timestamp (computed each time)
+ * console.log(Object.keys(obj)) // [] (non-enumerable)
+ * ```
+ */
+export declare function defineGetter(object: object, propKey: PropertyKey, getter: () => T): object;
+/**
+ * Define a lazy getter property on an object.
+ *
+ * Unlike `defineGetter()`, this version memoizes the result so the getter
+ * function is only called once. Subsequent accesses return the cached value.
+ *
+ * @param object - The object to define the lazy getter on
+ * @param propKey - The property key for the lazy getter
+ * @param getter - Function that computes the value on first access
+ * @param stats - Optional stats object to track initialization
+ * @returns The modified object (for chaining)
+ *
+ * @example
+ * ```ts
+ * const obj = {}
+ * defineLazyGetter(obj, 'data', () => {
+ *   console.log('Loading data...')
+ *   return { expensive: 'computation' }
+ * })
+ * console.log(obj.data) // Logs "Loading data..." and returns data
+ * console.log(obj.data) // Returns same data without logging
+ * ```
+ */
+export declare function defineLazyGetter(object: object, propKey: PropertyKey, getter: () => T, stats?: LazyGetterStats | undefined): object;
+/**
+ * Define multiple lazy getter properties on an object.
+ *
+ * Each getter in the provided object will be converted to a lazy getter
+ * and attached to the target object. All getters share the same stats object
+ * for tracking initialization.
+ *
+ * @param object - The object to define lazy getters on
+ * @param getterDefObj - Object mapping property keys to getter functions
+ * @param stats - Optional stats object to track initialization
+ * @returns The modified object (for chaining)
+ *
+ * @example
+ * ```ts
+ * const obj = {}
+ * const stats = { initialized: new Set() }
+ * defineLazyGetters(obj, {
+ *   user: () => fetchUser(),
+ *   config: () => loadConfig(),
+ *   timestamp: () => Date.now()
+ * }, stats)
+ *
+ * console.log(obj.user) // Fetches user on first access
+ * console.log(obj.config) // Loads config on first access
+ * console.log(stats.initialized) // Set(['user', 'config'])
+ * ```
+ */
+export declare function defineLazyGetters(object: object, getterDefObj: GetterDefObj | undefined, stats?: LazyGetterStats | undefined): object;
+/**
+ * Compare two entry arrays by their keys for sorting.
+ *
+ * Used internally for alphabetically sorting object entries.
+ * String keys are compared directly, non-string keys are converted to strings first.
+ *
+ * @param a - First entry tuple [key, value]
+ * @param b - Second entry tuple [key, value]
+ * @returns Negative if a < b, positive if a > b, zero if equal
+ *
+ * @example
+ * ```ts
+ * const entries = [['zebra', 1], ['apple', 2], ['banana', 3]]
+ * entries.sort(entryKeyComparator)
+ * // [['apple', 2], ['banana', 3], ['zebra', 1]]
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function entryKeyComparator(a: [PropertyKey, unknown], b: [PropertyKey, unknown]): number;
+/**
+ * Get the enumerable own property keys of an object.
+ *
+ * This is a safe wrapper around `Object.keys()` that returns an empty array
+ * for non-object values instead of throwing an error.
+ *
+ * @param obj - The value to get keys from
+ * @returns Array of enumerable string keys, or empty array for non-objects
+ *
+ * @example
+ * ```ts
+ * getKeys({ a: 1, b: 2 }) // ['a', 'b']
+ * getKeys([10, 20, 30]) // ['0', '1', '2']
+ * getKeys(null) // []
+ * getKeys(undefined) // []
+ * getKeys('hello') // []
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function getKeys(obj: unknown): string[];
+/**
+ * Get an own property value from an object safely.
+ *
+ * Returns `undefined` if the value is null/undefined or if the property
+ * doesn't exist as an own property (not inherited). This avoids prototype
+ * chain lookups and prevents errors on null/undefined values.
+ *
+ * @param obj - The object to get the property from
+ * @param propKey - The property key to look up
+ * @returns The property value, or `undefined` if not found or obj is null/undefined
+ *
+ * @example
+ * ```ts
+ * const obj = { name: 'Alice', age: 30 }
+ * getOwn(obj, 'name') // 'Alice'
+ * getOwn(obj, 'missing') // undefined
+ * getOwn(obj, 'toString') // undefined (inherited, not own property)
+ * getOwn(null, 'name') // undefined
+ * getOwn(undefined, 'name') // undefined
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function getOwn(obj: unknown, propKey: PropertyKey): unknown;
+/**
+ * Get all own property values from an object.
+ *
+ * Returns values for all own properties (enumerable and non-enumerable),
+ * but not inherited properties. Returns an empty array for null/undefined.
+ *
+ * @param obj - The object to get values from
+ * @returns Array of all own property values, or empty array for null/undefined
+ *
+ * @example
+ * ```ts
+ * getOwnPropertyValues({ a: 1, b: 2, c: 3 }) // [1, 2, 3]
+ * getOwnPropertyValues([10, 20, 30]) // [10, 20, 30]
+ * getOwnPropertyValues(null) // []
+ * getOwnPropertyValues(undefined) // []
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function getOwnPropertyValues(obj: {
+    [key: PropertyKey]: T;
+} | null | undefined): T[];
+/**
+ * Check if an object has any enumerable own properties.
+ *
+ * Returns `true` if the object has at least one enumerable own property,
+ * `false` otherwise. Also returns `false` for null/undefined.
+ *
+ * @param obj - The value to check
+ * @returns `true` if obj has enumerable own properties, `false` otherwise
+ *
+ * @example
+ * ```ts
+ * hasKeys({ a: 1 }) // true
+ * hasKeys({}) // false
+ * hasKeys([]) // false
+ * hasKeys([1, 2]) // true
+ * hasKeys(null) // false
+ * hasKeys(undefined) // false
+ * hasKeys(Object.create({ inherited: true })) // false (inherited, not own)
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function hasKeys(obj: unknown): obj is PropertyBag;
+/**
+ * Check if an object has an own property.
+ *
+ * Type-safe wrapper around `Object.hasOwn()` that returns `false` for
+ * null/undefined instead of throwing. Only checks own properties, not
+ * inherited ones from the prototype chain.
+ *
+ * @param obj - The value to check
+ * @param propKey - The property key to look for
+ * @returns `true` if obj has the property as an own property, `false` otherwise
+ *
+ * @example
+ * ```ts
+ * const obj = { name: 'Alice' }
+ * hasOwn(obj, 'name') // true
+ * hasOwn(obj, 'age') // false
+ * hasOwn(obj, 'toString') // false (inherited from Object.prototype)
+ * hasOwn(null, 'name') // false
+ * hasOwn(undefined, 'name') // false
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function hasOwn(obj: unknown, propKey: PropertyKey): obj is object & PropertyBag;
+/**
+ * Check if a value is an object (including arrays).
+ *
+ * Returns `true` for any object type including arrays, functions, dates, etc.
+ * Returns `false` for primitives and `null`.
+ *
+ * @param value - The value to check
+ * @returns `true` if value is an object (including arrays), `false` otherwise
+ *
+ * @example
+ * ```ts
+ * isObject({}) // true
+ * isObject([]) // true
+ * isObject(new Date()) // true
+ * isObject(() => {}) // false (functions are not objects for typeof)
+ * isObject(null) // false
+ * isObject(undefined) // false
+ * isObject(42) // false
+ * isObject('string') // false
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isObject(value: unknown): value is {
+    [key: PropertyKey]: unknown;
+};
+/**
+ * Check if a value is a plain object (not an array, not a built-in).
+ *
+ * Returns `true` only for plain objects created with `{}` or `Object.create(null)`.
+ * Returns `false` for arrays, built-in objects (Date, RegExp, etc.), and primitives.
+ *
+ * @param value - The value to check
+ * @returns `true` if value is a plain object, `false` otherwise
+ *
+ * @example
+ * ```ts
+ * isObjectObject({}) // true
+ * isObjectObject({ a: 1 }) // true
+ * isObjectObject(Object.create(null)) // true
+ * isObjectObject([]) // false
+ * isObjectObject(new Date()) // false
+ * isObjectObject(null) // false
+ * isObjectObject(42) // false
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isObjectObject(value: unknown): value is {
+    [key: PropertyKey]: unknown;
+};
+// IMPORTANT: Do not use destructuring here - use direct assignment instead.
+// tsgo has a bug that incorrectly transpiles destructured exports, resulting in
+// `exports.SomeName = void 0;` which causes runtime errors.
+// See: https://github.com/SocketDev/socket-packageurl-js/issues/3
+/**
+ * Alias for native `Object.assign`.
+ *
+ * Copies all enumerable own properties from one or more source objects
+ * to a target object and returns the modified target object.
+ *
+ * @example
+ * ```ts
+ * const target = { a: 1 }
+ * const source = { b: 2, c: 3 }
+ * objectAssign(target, source) // { a: 1, b: 2, c: 3 }
+ * ```
+ */
+export declare const objectAssign: {
+    (target: T, source: U): T & U;
+    (target: T, source1: U, source2: V): T & U & V;
+    (target: T, source1: U, source2: V, source3: W): T & U & V & W;
+    (target: object, ...sources: any[]): any;
+};
+/**
+ * Deep merge source object into target object.
+ *
+ * Recursively merges properties from `source` into `target`. Arrays in source
+ * completely replace arrays in target (no element-wise merging). Objects are
+ * merged recursively. Includes infinite loop detection for safety.
+ *
+ * @param target - The object to merge into (will be modified)
+ * @param source - The object to merge from
+ * @returns The modified target object
+ *
+ * @example
+ * ```ts
+ * const target = { a: { x: 1 }, b: [1, 2] }
+ * const source = { a: { y: 2 }, b: [3, 4, 5], c: 3 }
+ * merge(target, source)
+ * // { a: { x: 1, y: 2 }, b: [3, 4, 5], c: 3 }
+ * ```
+ *
+ * @example
+ * ```ts
+ * // Arrays are replaced, not merged
+ * merge({ arr: [1, 2] }, { arr: [3] }) // { arr: [3] }
+ *
+ * // Deep object merging
+ * merge(
+ *   { config: { api: 'v1', timeout: 1000 } },
+ *   { config: { api: 'v2', retries: 3 } }
+ * )
+ * // { config: { api: 'v2', timeout: 1000, retries: 3 } }
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function merge(target: T, source: U): T & U;
+/**
+ * Get all own property entries (key-value pairs) from an object.
+ *
+ * Unlike `Object.entries()`, this includes non-enumerable properties and
+ * symbol keys. Returns an empty array for null/undefined.
+ *
+ * @param obj - The object to get entries from
+ * @returns Array of [key, value] tuples, or empty array for null/undefined
+ *
+ * @example
+ * ```ts
+ * objectEntries({ a: 1, b: 2 }) // [['a', 1], ['b', 2]]
+ * const sym = Symbol('key')
+ * objectEntries({ [sym]: 'value', x: 10 }) // [[Symbol(key), 'value'], ['x', 10]]
+ * objectEntries(null) // []
+ * objectEntries(undefined) // []
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function objectEntries(obj: unknown): Array<[PropertyKey, unknown]>;
+// IMPORTANT: Do not use destructuring here - use direct assignment instead.
+// tsgo has a bug that incorrectly transpiles destructured exports, resulting in
+// `exports.SomeName = void 0;` which causes runtime errors.
+// See: https://github.com/SocketDev/socket-packageurl-js/issues/3
+/**
+ * Alias for native `Object.freeze`.
+ *
+ * Freezes an object, preventing new properties from being added and existing
+ * properties from being removed or modified. Makes the object immutable.
+ *
+ * @example
+ * ```ts
+ * const obj = { a: 1 }
+ * objectFreeze(obj)
+ * obj.a = 2 // Silently fails in non-strict mode, throws in strict mode
+ * obj.b = 3 // Silently fails in non-strict mode, throws in strict mode
+ * ```
+ */
+export declare const objectFreeze: {
+    (f: T): T;
+    (o: T): Readonly;
+    (o: T): Readonly;
+};
+/**
+ * Convert an object to a new object with sorted keys.
+ *
+ * Creates a new object with the same properties as the input, but with keys
+ * sorted alphabetically. Symbol keys are sorted separately and placed first.
+ * This is useful for consistent key ordering in serialization or comparisons.
+ *
+ * @param obj - The object to sort
+ * @returns A new object with sorted keys
+ *
+ * @example
+ * ```ts
+ * toSortedObject({ z: 1, a: 2, m: 3 })
+ * // { a: 2, m: 3, z: 1 }
+ *
+ * const sym1 = Symbol('first')
+ * const sym2 = Symbol('second')
+ * toSortedObject({ z: 1, [sym2]: 2, a: 3, [sym1]: 4 })
+ * // { [Symbol(first)]: 4, [Symbol(second)]: 2, a: 3, z: 1 }
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function toSortedObject(obj: T): T;
+/**
+ * Create an object from entries with sorted keys.
+ *
+ * Takes an iterable of [key, value] entries and creates a new object with
+ * keys sorted alphabetically. Symbol keys are sorted separately and placed
+ * first in the resulting object.
+ *
+ * @param entries - Iterable of [key, value] tuples
+ * @returns A new object with sorted keys
+ *
+ * @example
+ * ```ts
+ * toSortedObjectFromEntries([['z', 1], ['a', 2], ['m', 3]])
+ * // { a: 2, m: 3, z: 1 }
+ *
+ * const entries = new Map([['beta', 2], ['alpha', 1], ['gamma', 3]])
+ * toSortedObjectFromEntries(entries)
+ * // { alpha: 1, beta: 2, gamma: 3 }
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function toSortedObjectFromEntries(entries: Iterable<[PropertyKey, T]>): SortedObject;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/objects.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/objects.js
new file mode 100644
index 00000000..c5592631
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/objects.js
@@ -0,0 +1,313 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var objects_exports = {};
+__export(objects_exports, {
+  createConstantsObject: () => createConstantsObject,
+  createLazyGetter: () => createLazyGetter,
+  defineGetter: () => defineGetter,
+  defineLazyGetter: () => defineLazyGetter,
+  defineLazyGetters: () => defineLazyGetters,
+  entryKeyComparator: () => entryKeyComparator,
+  getKeys: () => getKeys,
+  getOwn: () => getOwn,
+  getOwnPropertyValues: () => getOwnPropertyValues,
+  hasKeys: () => hasKeys,
+  hasOwn: () => hasOwn,
+  isObject: () => isObject,
+  isObjectObject: () => isObjectObject,
+  merge: () => merge,
+  objectAssign: () => objectAssign,
+  objectEntries: () => objectEntries,
+  objectFreeze: () => objectFreeze,
+  toSortedObject: () => toSortedObject,
+  toSortedObjectFromEntries: () => toSortedObjectFromEntries
+});
+module.exports = __toCommonJS(objects_exports);
+var import_core = require("./constants/core");
+var import_arrays = require("./arrays");
+var import_sorts = require("./sorts");
+const ObjectDefineProperties = Object.defineProperties;
+const ObjectDefineProperty = Object.defineProperty;
+const ObjectFreeze = Object.freeze;
+const ObjectFromEntries = Object.fromEntries;
+const ObjectGetOwnPropertyDescriptors = Object.getOwnPropertyDescriptors;
+const ObjectGetOwnPropertyNames = Object.getOwnPropertyNames;
+const ObjectGetPrototypeOf = Object.getPrototypeOf;
+const ObjectHasOwn = Object.hasOwn;
+const ObjectKeys = Object.keys;
+const ObjectPrototype = Object.prototype;
+const ObjectSetPrototypeOf = Object.setPrototypeOf;
+const ReflectOwnKeys = Reflect.ownKeys;
+// @__NO_SIDE_EFFECTS__
+function createConstantsObject(props, options_) {
+  const options = { __proto__: null, ...options_ };
+  const attributes = ObjectFreeze({
+    __proto__: null,
+    getters: options.getters ? ObjectFreeze(
+      ObjectSetPrototypeOf(/* @__PURE__ */ toSortedObject(options.getters), null)
+    ) : void 0,
+    internals: options.internals ? ObjectFreeze(
+      ObjectSetPrototypeOf(/* @__PURE__ */ toSortedObject(options.internals), null)
+    ) : void 0,
+    mixin: options.mixin ? ObjectFreeze(
+      ObjectDefineProperties(
+        { __proto__: null },
+        ObjectGetOwnPropertyDescriptors(options.mixin)
+      )
+    ) : void 0,
+    props: props ? ObjectFreeze(ObjectSetPrototypeOf(/* @__PURE__ */ toSortedObject(props), null)) : void 0
+  });
+  const lazyGetterStats = ObjectFreeze({
+    __proto__: null,
+    initialized: /* @__PURE__ */ new Set()
+  });
+  const object = defineLazyGetters(
+    {
+      __proto__: null,
+      [import_core.kInternalsSymbol]: ObjectFreeze({
+        __proto__: null,
+        get attributes() {
+          return attributes;
+        },
+        get lazyGetterStats() {
+          return lazyGetterStats;
+        },
+        ...attributes.internals
+      }),
+      kInternalsSymbol: import_core.kInternalsSymbol,
+      ...attributes.props
+    },
+    attributes.getters,
+    lazyGetterStats
+  );
+  if (attributes.mixin) {
+    ObjectDefineProperties(
+      object,
+      /* @__PURE__ */ toSortedObjectFromEntries(
+        (/* @__PURE__ */ objectEntries(ObjectGetOwnPropertyDescriptors(attributes.mixin))).filter(
+          (p) => !ObjectHasOwn(object, p[0])
+        )
+      )
+    );
+  }
+  return ObjectFreeze(object);
+}
+// @__NO_SIDE_EFFECTS__
+function createLazyGetter(name, getter, stats) {
+  let lazyValue = import_core.UNDEFINED_TOKEN;
+  const { [name]: lazyGetter } = {
+    [name]() {
+      if (lazyValue === import_core.UNDEFINED_TOKEN) {
+        stats?.initialized?.add(name);
+        lazyValue = getter();
+      }
+      return lazyValue;
+    }
+  };
+  return lazyGetter;
+}
+function defineGetter(object, propKey, getter) {
+  ObjectDefineProperty(object, propKey, {
+    get: getter,
+    enumerable: false,
+    configurable: true
+  });
+  return object;
+}
+function defineLazyGetter(object, propKey, getter, stats) {
+  return defineGetter(object, propKey, /* @__PURE__ */ createLazyGetter(propKey, getter, stats));
+}
+function defineLazyGetters(object, getterDefObj, stats) {
+  if (getterDefObj !== null && typeof getterDefObj === "object") {
+    const keys = ReflectOwnKeys(getterDefObj);
+    for (let i = 0, { length } = keys; i < length; i += 1) {
+      const key = keys[i];
+      defineLazyGetter(object, key, getterDefObj[key], stats);
+    }
+  }
+  return object;
+}
+// @__NO_SIDE_EFFECTS__
+function entryKeyComparator(a, b) {
+  const keyA = a[0];
+  const keyB = b[0];
+  const strKeyA = typeof keyA === "string" ? keyA : String(keyA);
+  const strKeyB = typeof keyB === "string" ? keyB : String(keyB);
+  return (0, import_sorts.localeCompare)(strKeyA, strKeyB);
+}
+// @__NO_SIDE_EFFECTS__
+function getKeys(obj) {
+  return /* @__PURE__ */ isObject(obj) ? ObjectKeys(obj) : [];
+}
+// @__NO_SIDE_EFFECTS__
+function getOwn(obj, propKey) {
+  if (obj === null || obj === void 0) {
+    return void 0;
+  }
+  return ObjectHasOwn(obj, propKey) ? obj[propKey] : void 0;
+}
+// @__NO_SIDE_EFFECTS__
+function getOwnPropertyValues(obj) {
+  if (obj === null || obj === void 0) {
+    return [];
+  }
+  const keys = ObjectGetOwnPropertyNames(obj);
+  const { length } = keys;
+  const values = Array(length);
+  for (let i = 0; i < length; i += 1) {
+    values[i] = obj[keys[i]];
+  }
+  return values;
+}
+// @__NO_SIDE_EFFECTS__
+function hasKeys(obj) {
+  if (obj === null || obj === void 0) {
+    return false;
+  }
+  for (const key in obj) {
+    if (ObjectHasOwn(obj, key)) {
+      return true;
+    }
+  }
+  return false;
+}
+// @__NO_SIDE_EFFECTS__
+function hasOwn(obj, propKey) {
+  if (obj === null || obj === void 0) {
+    return false;
+  }
+  return ObjectHasOwn(obj, propKey);
+}
+// @__NO_SIDE_EFFECTS__
+function isObject(value) {
+  return value !== null && typeof value === "object";
+}
+// @__NO_SIDE_EFFECTS__
+function isObjectObject(value) {
+  if (value === null || typeof value !== "object" || (0, import_arrays.isArray)(value)) {
+    return false;
+  }
+  const proto = ObjectGetPrototypeOf(value);
+  return proto === null || proto === ObjectPrototype;
+}
+const objectAssign = Object.assign;
+// @__NO_SIDE_EFFECTS__
+function merge(target, source) {
+  if (!/* @__PURE__ */ isObject(target) || !/* @__PURE__ */ isObject(source)) {
+    return target;
+  }
+  const queue = [[target, source]];
+  let pos = 0;
+  let { length: queueLength } = queue;
+  while (pos < queueLength) {
+    if (pos === import_core.LOOP_SENTINEL) {
+      throw new Error("Detected infinite loop in object crawl of merge");
+    }
+    const { 0: currentTarget, 1: currentSource } = queue[pos++];
+    if (!currentSource || !currentTarget) {
+      continue;
+    }
+    const isSourceArray = (0, import_arrays.isArray)(currentSource);
+    const isTargetArray = (0, import_arrays.isArray)(currentTarget);
+    if (isSourceArray || isTargetArray) {
+      continue;
+    }
+    const keys = ReflectOwnKeys(currentSource);
+    for (let i = 0, { length } = keys; i < length; i += 1) {
+      const key = keys[i];
+      const srcVal = currentSource[key];
+      const targetVal = currentTarget[key];
+      if ((0, import_arrays.isArray)(srcVal)) {
+        currentTarget[key] = srcVal;
+      } else if (/* @__PURE__ */ isObject(srcVal)) {
+        if (/* @__PURE__ */ isObject(targetVal) && !(0, import_arrays.isArray)(targetVal)) {
+          queue[queueLength++] = [targetVal, srcVal];
+        } else {
+          currentTarget[key] = srcVal;
+        }
+      } else {
+        currentTarget[key] = srcVal;
+      }
+    }
+  }
+  return target;
+}
+// @__NO_SIDE_EFFECTS__
+function objectEntries(obj) {
+  if (obj === null || obj === void 0) {
+    return [];
+  }
+  const keys = ReflectOwnKeys(obj);
+  const { length } = keys;
+  const entries = Array(length);
+  const record = obj;
+  for (let i = 0; i < length; i += 1) {
+    const key = keys[i];
+    entries[i] = [key, record[key]];
+  }
+  return entries;
+}
+const objectFreeze = Object.freeze;
+// @__NO_SIDE_EFFECTS__
+function toSortedObject(obj) {
+  return /* @__PURE__ */ toSortedObjectFromEntries(/* @__PURE__ */ objectEntries(obj));
+}
+// @__NO_SIDE_EFFECTS__
+function toSortedObjectFromEntries(entries) {
+  const otherEntries = [];
+  const symbolEntries = [];
+  for (const entry of entries) {
+    if (typeof entry[0] === "symbol") {
+      symbolEntries.push(entry);
+    } else {
+      otherEntries.push(entry);
+    }
+  }
+  if (!otherEntries.length && !symbolEntries.length) {
+    return {};
+  }
+  return ObjectFromEntries([
+    // The String constructor is safe to use with symbols.
+    ...symbolEntries.sort(entryKeyComparator),
+    ...otherEntries.sort(entryKeyComparator)
+  ]);
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  createConstantsObject,
+  createLazyGetter,
+  defineGetter,
+  defineLazyGetter,
+  defineLazyGetters,
+  entryKeyComparator,
+  getKeys,
+  getOwn,
+  getOwnPropertyValues,
+  hasKeys,
+  hasOwn,
+  isObject,
+  isObjectObject,
+  merge,
+  objectAssign,
+  objectEntries,
+  objectFreeze,
+  toSortedObject,
+  toSortedObjectFromEntries
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/package-extensions.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/package-extensions.d.ts
new file mode 100644
index 00000000..7bbf2aa9
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/package-extensions.d.ts
@@ -0,0 +1,3 @@
+type PackageExtension = readonly [string, Record];
+declare const packageExtensions: readonly PackageExtension[];
+export { packageExtensions };
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/package-extensions.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/package-extensions.js
new file mode 100644
index 00000000..63a6f663
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/package-extensions.js
@@ -0,0 +1,83 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var package_extensions_exports = {};
+__export(package_extensions_exports, {
+  packageExtensions: () => packageExtensions
+});
+module.exports = __toCommonJS(package_extensions_exports);
+var yarnPkgExtensions = __toESM(require("./external/@yarnpkg/extensions.js"));
+const { freeze: ObjectFreeze } = Object;
+const packageExtensions = ObjectFreeze(
+  [
+    /* c8 ignore next - External @yarnpkg/extensions data */
+    ...yarnPkgExtensions.packageExtensions,
+    [
+      "@yarnpkg/extensions@>=1.1.0",
+      {
+        // Properties with undefined values are omitted when saved as JSON.
+        peerDependencies: void 0
+      }
+    ],
+    [
+      "abab@>=2.0.0",
+      {
+        devDependencies: {
+          // Lower the Webpack from v4.x to one supported by abab's peers.
+          webpack: "^3.12.0"
+        }
+      }
+    ],
+    [
+      "is-generator-function@>=1.0.7",
+      {
+        scripts: {
+          // Make the script a silent no-op.
+          "test:uglified": ""
+        }
+      }
+    ]
+  ].sort((a_, b_) => {
+    const aIndex = a_[0].lastIndexOf("@");
+    const bIndex = b_[0].lastIndexOf("@");
+    const a = aIndex === -1 ? a_[0] : a_[0].slice(0, aIndex);
+    const b = bIndex === -1 ? b_[0] : b_[0].slice(0, bIndex);
+    if (a < b) {
+      return -1;
+    }
+    if (a > b) {
+      return 1;
+    }
+    return 0;
+  })
+);
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  packageExtensions
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages.d.ts
new file mode 100644
index 00000000..be925dd6
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages.d.ts
@@ -0,0 +1,154 @@
+/**
+ * @fileoverview Package registry management with Socket.dev specific utilities.
+ * Provides npm package analysis, dependency resolution, and registry operations.
+ */
+import type { CategoryString } from './types';
+import { getEditablePackageJsonClass, pkgJsonToEditable, toEditablePackageJson, toEditablePackageJsonSync } from './packages/edit';
+import { findTypesForSubpath, getExportFilePaths, getSubpaths, isConditionalExports, isSubpathExports, resolvePackageJsonEntryExports } from './packages/exports';
+import { isolatePackage } from './packages/isolation';
+import { collectIncompatibleLicenses, collectLicenseWarnings, createAstNode, createBinaryOperationNode, createLicenseNode, parseSpdxExp, resolvePackageLicenses, visitLicenses } from './packages/licenses';
+import { createPackageJson, fetchPackageManifest, fetchPackagePackument } from './packages/manifest';
+import { normalizePackageJson, resolveEscapedScope, resolveOriginalPackageName, unescapeScope } from './packages/normalize';
+import { extractPackage, findPackageExtensions, getReleaseTag, packPackage, readPackageJson, readPackageJsonSync, resolveGitHubTgzUrl, resolvePackageName, resolveRegistryPackageName } from './packages/operations';
+import { resolvePackageJsonDirname, resolvePackageJsonPath } from './paths/packages';
+import { fetchPackageProvenance, getProvenanceDetails } from './packages/provenance';
+import { getRepoUrlDetails, gitHubTagRefUrl, gitHubTgzUrl, isGitHubTgzSpec, isGitHubUrlSpec } from './packages/specs';
+import { isBlessedPackageName, isRegistryFetcherType, isValidPackageName } from './packages/validation';
+// Type for package.json exports field.
+type PackageExports = {
+    [path: string]: unknown;
+};
+// Re-export the EditablePackageJson instance type for convenient access
+export type EditablePackageJson = import('./packages/edit').EditablePackageJsonInstance;
+/**
+ * Extended PackageJson type based on NPMCliPackageJson.Content with Socket-specific additions.
+ * @extends NPMCliPackageJson.Content (from @npmcli/package-json)
+ * @property socket - Optional Socket.dev specific configuration
+ */
+export type PackageJson = {
+    // Core npm fields
+    [key: string]: unknown;
+    name?: string | undefined;
+    version?: string | undefined;
+    description?: string | undefined;
+    main?: string | undefined;
+    module?: string | undefined;
+    types?: string | undefined;
+    typings?: string | undefined;
+    bin?: string | Record | undefined;
+    // Author and contributors
+    author?: string | {
+        name?: string;
+        email?: string;
+        url?: string;
+    } | undefined;
+    contributors?: Array | undefined;
+    maintainers?: Array | undefined;
+    // Repository and URLs
+    repository?: string | {
+        type?: string;
+        url?: string;
+        directory?: string;
+    } | undefined;
+    homepage?: string | undefined;
+    bugs?: string | {
+        url?: string;
+        email?: string;
+    } | undefined;
+    // License
+    license?: string | undefined;
+    licenses?: Array<{
+        type?: string;
+        url?: string;
+    }> | undefined;
+    // Scripts
+    scripts?: Record | undefined;
+    // Dependencies
+    dependencies?: Record | undefined;
+    devDependencies?: Record | undefined;
+    peerDependencies?: Record | undefined;
+    optionalDependencies?: Record | undefined;
+    bundledDependencies?: string[] | undefined;
+    bundleDependencies?: string[] | undefined;
+    // Package managers specific
+    overrides?: Record | undefined;
+    resolutions?: Record | undefined;
+    pnpm?: Record | undefined;
+    // Module system
+    exports?: PackageExports | string | string[] | undefined;
+    imports?: Record | undefined;
+    type?: 'module' | 'commonjs' | undefined;
+    // Publishing
+    private?: boolean | undefined;
+    publishConfig?: Record | undefined;
+    files?: string[] | undefined;
+    // Engines and OS
+    engines?: Record | undefined;
+    os?: string[] | undefined;
+    cpu?: string[] | undefined;
+    // Package manager
+    packageManager?: string | undefined;
+    // Workspaces
+    workspaces?: string[] | {
+        packages?: string[];
+    } | undefined;
+    // Socket.dev specific
+    socket?: {
+        categories?: CategoryString | CategoryString[];
+        interop?: string | string[];
+        [key: string]: unknown;
+    } | undefined;
+};
+export type SaveOptions = {
+    ignoreWhitespace?: boolean | undefined;
+    sort?: boolean | undefined;
+};
+export type EditablePackageJsonOptions = {
+    normalize?: boolean | undefined;
+    path?: string | undefined;
+    preserve?: string[] | readonly string[] | undefined;
+    create?: boolean | undefined;
+    data?: PackageJson | undefined;
+};
+export type ExtractOptions = {
+    dest?: string | undefined;
+    tmpPrefix?: string | undefined;
+    signal?: AbortSignal | undefined;
+    packumentCache?: Map | undefined;
+    preferOffline?: boolean | undefined;
+};
+export type NormalizeOptions = {
+    preserve?: string[] | readonly string[] | undefined;
+};
+export type ReadPackageJsonOptions = NormalizeOptions & {
+    editable?: boolean | undefined;
+    normalize?: boolean | undefined;
+    throws?: boolean | undefined;
+};
+export type ProvenanceOptions = {
+    signal?: AbortSignal | undefined;
+    timeout?: number | undefined;
+};
+export type LicenseNode = {
+    license: string;
+    exception?: string | undefined;
+    inFile?: string | undefined;
+    plus?: boolean | undefined;
+};
+export type PacoteOptions = {
+    signal?: AbortSignal | undefined;
+    packumentCache?: Map | undefined;
+    preferOffline?: boolean | undefined;
+    fullMetadata?: boolean | undefined;
+};
+export type { IsolatePackageOptions, IsolatePackageResult, } from './packages/isolation';
+export type { InternalAstNode, InternalBinaryOperationNode, InternalLicenseNode, LicenseVisitor, SpdxAstNode, SpdxBinaryOperationNode, SpdxLicenseNode, } from './packages/licenses';
+export { collectIncompatibleLicenses, collectLicenseWarnings, createAstNode, createBinaryOperationNode, createLicenseNode, createPackageJson, extractPackage, fetchPackageManifest, fetchPackagePackument, fetchPackageProvenance, findPackageExtensions, findTypesForSubpath, getEditablePackageJsonClass, getExportFilePaths, getProvenanceDetails, getReleaseTag, getRepoUrlDetails, getSubpaths, gitHubTagRefUrl, gitHubTgzUrl, isBlessedPackageName, isConditionalExports, isGitHubTgzSpec, isGitHubUrlSpec, isolatePackage, isRegistryFetcherType, isSubpathExports, isValidPackageName, normalizePackageJson, packPackage, parseSpdxExp, pkgJsonToEditable, readPackageJson, readPackageJsonSync, resolveEscapedScope, resolveGitHubTgzUrl, resolveOriginalPackageName, resolvePackageName, resolvePackageJsonDirname, resolvePackageJsonPath, resolvePackageJsonEntryExports, resolvePackageLicenses, resolveRegistryPackageName, toEditablePackageJson, toEditablePackageJsonSync, unescapeScope, visitLicenses, };
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages.js
new file mode 100644
index 00000000..f09333ab
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages.js
@@ -0,0 +1,131 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var packages_exports = {};
+__export(packages_exports, {
+  collectIncompatibleLicenses: () => import_licenses.collectIncompatibleLicenses,
+  collectLicenseWarnings: () => import_licenses.collectLicenseWarnings,
+  createAstNode: () => import_licenses.createAstNode,
+  createBinaryOperationNode: () => import_licenses.createBinaryOperationNode,
+  createLicenseNode: () => import_licenses.createLicenseNode,
+  createPackageJson: () => import_manifest.createPackageJson,
+  extractPackage: () => import_operations.extractPackage,
+  fetchPackageManifest: () => import_manifest.fetchPackageManifest,
+  fetchPackagePackument: () => import_manifest.fetchPackagePackument,
+  fetchPackageProvenance: () => import_provenance.fetchPackageProvenance,
+  findPackageExtensions: () => import_operations.findPackageExtensions,
+  findTypesForSubpath: () => import_exports.findTypesForSubpath,
+  getEditablePackageJsonClass: () => import_edit.getEditablePackageJsonClass,
+  getExportFilePaths: () => import_exports.getExportFilePaths,
+  getProvenanceDetails: () => import_provenance.getProvenanceDetails,
+  getReleaseTag: () => import_operations.getReleaseTag,
+  getRepoUrlDetails: () => import_specs.getRepoUrlDetails,
+  getSubpaths: () => import_exports.getSubpaths,
+  gitHubTagRefUrl: () => import_specs.gitHubTagRefUrl,
+  gitHubTgzUrl: () => import_specs.gitHubTgzUrl,
+  isBlessedPackageName: () => import_validation.isBlessedPackageName,
+  isConditionalExports: () => import_exports.isConditionalExports,
+  isGitHubTgzSpec: () => import_specs.isGitHubTgzSpec,
+  isGitHubUrlSpec: () => import_specs.isGitHubUrlSpec,
+  isRegistryFetcherType: () => import_validation.isRegistryFetcherType,
+  isSubpathExports: () => import_exports.isSubpathExports,
+  isValidPackageName: () => import_validation.isValidPackageName,
+  isolatePackage: () => import_isolation.isolatePackage,
+  normalizePackageJson: () => import_normalize.normalizePackageJson,
+  packPackage: () => import_operations.packPackage,
+  parseSpdxExp: () => import_licenses.parseSpdxExp,
+  pkgJsonToEditable: () => import_edit.pkgJsonToEditable,
+  readPackageJson: () => import_operations.readPackageJson,
+  readPackageJsonSync: () => import_operations.readPackageJsonSync,
+  resolveEscapedScope: () => import_normalize.resolveEscapedScope,
+  resolveGitHubTgzUrl: () => import_operations.resolveGitHubTgzUrl,
+  resolveOriginalPackageName: () => import_normalize.resolveOriginalPackageName,
+  resolvePackageJsonDirname: () => import_packages.resolvePackageJsonDirname,
+  resolvePackageJsonEntryExports: () => import_exports.resolvePackageJsonEntryExports,
+  resolvePackageJsonPath: () => import_packages.resolvePackageJsonPath,
+  resolvePackageLicenses: () => import_licenses.resolvePackageLicenses,
+  resolvePackageName: () => import_operations.resolvePackageName,
+  resolveRegistryPackageName: () => import_operations.resolveRegistryPackageName,
+  toEditablePackageJson: () => import_edit.toEditablePackageJson,
+  toEditablePackageJsonSync: () => import_edit.toEditablePackageJsonSync,
+  unescapeScope: () => import_normalize.unescapeScope,
+  visitLicenses: () => import_licenses.visitLicenses
+});
+module.exports = __toCommonJS(packages_exports);
+var import_edit = require("./packages/edit");
+var import_exports = require("./packages/exports");
+var import_isolation = require("./packages/isolation");
+var import_licenses = require("./packages/licenses");
+var import_manifest = require("./packages/manifest");
+var import_normalize = require("./packages/normalize");
+var import_operations = require("./packages/operations");
+var import_packages = require("./paths/packages");
+var import_provenance = require("./packages/provenance");
+var import_specs = require("./packages/specs");
+var import_validation = require("./packages/validation");
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  collectIncompatibleLicenses,
+  collectLicenseWarnings,
+  createAstNode,
+  createBinaryOperationNode,
+  createLicenseNode,
+  createPackageJson,
+  extractPackage,
+  fetchPackageManifest,
+  fetchPackagePackument,
+  fetchPackageProvenance,
+  findPackageExtensions,
+  findTypesForSubpath,
+  getEditablePackageJsonClass,
+  getExportFilePaths,
+  getProvenanceDetails,
+  getReleaseTag,
+  getRepoUrlDetails,
+  getSubpaths,
+  gitHubTagRefUrl,
+  gitHubTgzUrl,
+  isBlessedPackageName,
+  isConditionalExports,
+  isGitHubTgzSpec,
+  isGitHubUrlSpec,
+  isRegistryFetcherType,
+  isSubpathExports,
+  isValidPackageName,
+  isolatePackage,
+  normalizePackageJson,
+  packPackage,
+  parseSpdxExp,
+  pkgJsonToEditable,
+  readPackageJson,
+  readPackageJsonSync,
+  resolveEscapedScope,
+  resolveGitHubTgzUrl,
+  resolveOriginalPackageName,
+  resolvePackageJsonDirname,
+  resolvePackageJsonEntryExports,
+  resolvePackageJsonPath,
+  resolvePackageLicenses,
+  resolvePackageName,
+  resolveRegistryPackageName,
+  toEditablePackageJson,
+  toEditablePackageJsonSync,
+  unescapeScope,
+  visitLicenses
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/edit.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/edit.d.ts
new file mode 100644
index 00000000..79ebcbf5
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/edit.d.ts
@@ -0,0 +1,132 @@
+import type { EditablePackageJsonOptions, NormalizeOptions, PackageJson, SaveOptions } from '../packages';
+// Define the interface for the dynamic class
+interface EditablePackageJsonConstructor {
+    new (): EditablePackageJsonInstance;
+    fixSteps: unknown[];
+    normalizeSteps: unknown[];
+    prepareSteps: unknown[];
+    create(path: string, opts?: EditablePackageJsonOptions): Promise;
+    fix(path: string, opts?: unknown): Promise;
+    load(path: string, opts?: EditablePackageJsonOptions): Promise;
+    normalize(path: string, opts?: NormalizeOptions): Promise;
+    prepare(path: string, opts?: unknown): Promise;
+}
+/**
+ * EditablePackageJson instance interface extending NPMCliPackageJson functionality.
+ * Provides enhanced package.json manipulation with Socket-specific features.
+ * @extends NPMCliPackageJson (from @npmcli/package-json)
+ */
+export interface EditablePackageJsonInstance {
+    /**
+     * The parsed package.json content as a readonly object.
+     * @readonly
+     */
+    content: Readonly;
+    /**
+     * Create a new package.json file at the specified path.
+     * @param path - The directory path where package.json will be created
+     */
+    create(path: string): this;
+    /**
+     * Apply automatic fixes to the package.json based on npm standards.
+     * @param opts - Optional fix configuration
+     */
+    fix(opts?: unknown | undefined): Promise;
+    /**
+     * Initialize the instance from a content object.
+     * @param content - The package.json content object
+     */
+    fromContent(content: unknown): this;
+    /**
+     * Initialize the instance from a JSON string.
+     * @param json - The package.json content as a JSON string
+     */
+    fromJSON(json: string): this;
+    /**
+     * Load a package.json file from the specified path.
+     * @param path - The directory containing the package.json
+     * @param create - Whether to create the file if it doesn't exist
+     */
+    load(path: string, create?: boolean): Promise;
+    /**
+     * Normalize the package.json content according to npm standards.
+     * @param opts - Normalization options
+     */
+    normalize(opts?: NormalizeOptions): Promise;
+    /**
+     * Prepare the package.json for publishing.
+     * @param opts - Preparation options
+     */
+    prepare(opts?: unknown): Promise;
+    /**
+     * Update the package.json content with new values.
+     * @param content - Partial package.json object with fields to update
+     * @override from NPMCliPackageJson
+     */
+    update(content: Partial): this;
+    /**
+     * Save the package.json file to disk.
+     * @param options - Save options for formatting and sorting
+     * @override from NPMCliPackageJson
+     */
+    save(options?: SaveOptions | undefined): Promise;
+    /**
+     * Synchronously save the package.json file to disk.
+     * @param options - Save options for formatting and sorting
+     */
+    saveSync(options?: SaveOptions | undefined): boolean;
+    /**
+     * Check if the package.json will be saved based on current changes.
+     * @param options - Save options to evaluate
+     */
+    willSave(options?: SaveOptions | undefined): boolean;
+}
+/**
+ * Get the EditablePackageJson class for package.json manipulation.
+ *
+ * @example
+ * ```typescript
+ * const EditablePackageJson = getEditablePackageJsonClass()
+ * const pkg = await EditablePackageJson.load('/tmp/my-project')
+ * console.log(pkg.content.name)
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function getEditablePackageJsonClass(): EditablePackageJsonConstructor;
+/**
+ * Convert a package.json object to an editable instance.
+ *
+ * @example
+ * ```typescript
+ * const editable = pkgJsonToEditable({ name: 'my-pkg', version: '1.0.0' })
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function pkgJsonToEditable(pkgJson: PackageJson, options?: EditablePackageJsonOptions): unknown;
+/**
+ * Convert package.json to editable instance with file persistence.
+ *
+ * @example
+ * ```typescript
+ * const editable = await toEditablePackageJson(
+ *   { name: 'my-pkg', version: '1.0.0' },
+ *   { path: '/tmp/my-project' }
+ * )
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function toEditablePackageJson(pkgJson: PackageJson, options?: EditablePackageJsonOptions): Promise;
+/**
+ * Convert package.json to editable instance with file persistence synchronously.
+ *
+ * @example
+ * ```typescript
+ * const editable = toEditablePackageJsonSync(
+ *   { name: 'my-pkg', version: '1.0.0' },
+ *   { path: '/tmp/my-project' }
+ * )
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function toEditablePackageJsonSync(pkgJson: PackageJson, options?: EditablePackageJsonOptions): unknown;
+export {};
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/edit.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/edit.js
new file mode 100644
index 00000000..09a934b7
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/edit.js
@@ -0,0 +1,354 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var edit_exports = {};
+__export(edit_exports, {
+  getEditablePackageJsonClass: () => getEditablePackageJsonClass,
+  pkgJsonToEditable: () => pkgJsonToEditable,
+  toEditablePackageJson: () => toEditablePackageJson,
+  toEditablePackageJsonSync: () => toEditablePackageJsonSync
+});
+module.exports = __toCommonJS(edit_exports);
+var import_package_json = __toESM(require("../external/@npmcli/package-json"));
+var import_read_package = require("../external/@npmcli/package-json/lib/read-package");
+var import_sort = require("../external/@npmcli/package-json/lib/sort");
+var import_format = require("../json/format");
+var import_normalize = require("../paths/normalize");
+var import_normalize2 = require("./normalize");
+var import_packages = require("../paths/packages");
+let _EditablePackageJsonClass;
+let _fs;
+// @__NO_SIDE_EFFECTS__
+function getFs() {
+  if (_fs === void 0) {
+    _fs = require("fs");
+  }
+  return _fs;
+}
+let _path;
+// @__NO_SIDE_EFFECTS__
+function getPath() {
+  if (_path === void 0) {
+    _path = require("path");
+  }
+  return _path;
+}
+let _util;
+// @__NO_SIDE_EFFECTS__
+function getUtil() {
+  if (_util === void 0) {
+    _util = require("util");
+  }
+  return _util;
+}
+// @__NO_SIDE_EFFECTS__
+function getEditablePackageJsonClass() {
+  if (_EditablePackageJsonClass === void 0) {
+    _EditablePackageJsonClass = class EditablePackageJson extends import_package_json.default {
+      static fixSteps = import_package_json.default.fixSteps;
+      static normalizeSteps = import_package_json.default.normalizeSteps;
+      static prepareSteps = import_package_json.default.prepareSteps;
+      _canSave = true;
+      _path = void 0;
+      _readFileContent = "";
+      _readFileJson = void 0;
+      get content() {
+        return super.content;
+      }
+      get filename() {
+        const path = this._path;
+        if (!path) {
+          return "";
+        }
+        if (path.endsWith("package.json")) {
+          return path;
+        }
+        const nodePath = /* @__PURE__ */ getPath();
+        return nodePath.join(path, "package.json");
+      }
+      static async create(path, opts = {}) {
+        const p = new _EditablePackageJsonClass();
+        await p.create(path);
+        return opts.data ? p.update(opts.data) : p;
+      }
+      static async fix(path, opts) {
+        const p = new _EditablePackageJsonClass();
+        await p.load(path, true);
+        return await p.fix(opts);
+      }
+      static async load(path, opts = {}) {
+        const p = new _EditablePackageJsonClass();
+        if (!opts.create) {
+          return await p.load(path);
+        }
+        try {
+          return await p.load(path);
+        } catch (err) {
+          if (!err.message.startsWith("Could not read package.json")) {
+            throw err;
+          }
+          return p.create(path);
+        }
+      }
+      static async normalize(path, opts) {
+        const p = new _EditablePackageJsonClass();
+        await p.load(path);
+        return await p.normalize(opts);
+      }
+      static async prepare(path, opts) {
+        const p = new _EditablePackageJsonClass();
+        await p.load(path, true);
+        return await p.prepare(opts);
+      }
+      create(path) {
+        super.create(path);
+        this._path = path;
+        return this;
+      }
+      async fix(opts = {}) {
+        await super.fix(opts);
+        return this;
+      }
+      fromContent(data) {
+        super.fromContent(data);
+        this._canSave = false;
+        return this;
+      }
+      fromJSON(data) {
+        super.fromJSON(data);
+        return this;
+      }
+      async load(path, create) {
+        this._path = path;
+        const { promises: fsPromises } = /* @__PURE__ */ getFs();
+        let parseErr;
+        try {
+          this._readFileContent = await (0, import_read_package.read)(this.filename);
+        } catch (err) {
+          if (!create) {
+            throw err;
+          }
+          parseErr = err;
+        }
+        if (parseErr) {
+          const nodePath = /* @__PURE__ */ getPath();
+          const indexFile = nodePath.resolve(this.path || "", "index.js");
+          let indexFileContent;
+          try {
+            indexFileContent = await fsPromises.readFile(indexFile, "utf8");
+          } catch {
+            throw parseErr;
+          }
+          try {
+            this.fromContent(indexFileContent);
+          } catch {
+            throw parseErr;
+          }
+          this._canSave = false;
+          return this;
+        }
+        this.fromJSON(this._readFileContent);
+        this._readFileJson = (0, import_read_package.parse)(this._readFileContent);
+        return this;
+      }
+      async normalize(opts = {}) {
+        await super.normalize(opts);
+        return this;
+      }
+      get path() {
+        return this._path;
+      }
+      async prepare(opts = {}) {
+        await super.prepare(opts);
+        return this;
+      }
+      async save(options) {
+        if (!this._canSave || this.content === void 0) {
+          throw new Error("No package.json to save to");
+        }
+        if (!(0, import_format.shouldSave)(
+          this.content,
+          this._readFileJson,
+          this._readFileContent,
+          { ...options, sortFn: options?.sort ? import_sort.packageSort : void 0 }
+        )) {
+          return false;
+        }
+        const content = (0, import_format.stripFormattingSymbols)(
+          this.content
+        );
+        const sortedContent = options?.sort ? (0, import_sort.packageSort)(content) : content;
+        const formatting = (0, import_format.getFormattingFromContent)(
+          this.content
+        );
+        const fileContent = (0, import_format.stringifyWithFormatting)(sortedContent, formatting);
+        const { promises: fsPromises } = /* @__PURE__ */ getFs();
+        await fsPromises.writeFile(this.filename, fileContent);
+        this._readFileContent = fileContent;
+        this._readFileJson = (0, import_read_package.parse)(fileContent);
+        return true;
+      }
+      saveSync(options) {
+        if (!this._canSave || this.content === void 0) {
+          throw new Error("No package.json to save to");
+        }
+        const { ignoreWhitespace = false, sort = false } = {
+          __proto__: null,
+          ...options
+        };
+        const {
+          [Symbol.for("indent")]: indent,
+          [Symbol.for("newline")]: newline,
+          ...rest
+        } = this.content;
+        const content = sort ? (0, import_sort.packageSort)(rest) : rest;
+        if (ignoreWhitespace && (/* @__PURE__ */ getUtil()).isDeepStrictEqual(content, this._readFileJson)) {
+          return false;
+        }
+        const format = indent === void 0 || indent === null ? "  " : indent;
+        const eol = newline === void 0 || newline === null ? "\n" : newline;
+        const fileContent = `${JSON.stringify(
+          content,
+          void 0,
+          format
+        )}
+`.replace(/\n/g, eol);
+        if (!ignoreWhitespace && fileContent.trim() === this._readFileContent.trim()) {
+          return false;
+        }
+        const fs = /* @__PURE__ */ getFs();
+        fs.writeFileSync(this.filename, fileContent);
+        this._readFileContent = fileContent;
+        this._readFileJson = (0, import_read_package.parse)(fileContent);
+        return true;
+      }
+      update(content) {
+        super.update(content);
+        return this;
+      }
+      willSave(options) {
+        const { ignoreWhitespace = false, sort = false } = {
+          __proto__: null,
+          ...options
+        };
+        if (!this._canSave || this.content === void 0) {
+          return false;
+        }
+        const {
+          [Symbol.for("indent")]: indent,
+          [Symbol.for("newline")]: newline,
+          ...rest
+        } = this.content;
+        const content = sort ? (0, import_sort.packageSort)(rest) : rest;
+        if (ignoreWhitespace && (/* @__PURE__ */ getUtil()).isDeepStrictEqual(content, this._readFileJson)) {
+          return false;
+        }
+        const format = indent === void 0 || indent === null ? "  " : indent;
+        const eol = newline === void 0 || newline === null ? "\n" : newline;
+        const fileContent = `${JSON.stringify(
+          content,
+          void 0,
+          format
+        )}
+`.replace(/\n/g, eol);
+        if (!ignoreWhitespace && fileContent.trim() === this._readFileContent.trim()) {
+          return false;
+        }
+        return true;
+      }
+    };
+  }
+  return _EditablePackageJsonClass;
+}
+// @__NO_SIDE_EFFECTS__
+function pkgJsonToEditable(pkgJson, options) {
+  const { normalize, ...normalizeOptions } = {
+    __proto__: null,
+    ...options
+  };
+  const EditablePackageJson = /* @__PURE__ */ getEditablePackageJsonClass();
+  return new EditablePackageJson().fromContent(
+    normalize ? (0, import_normalize2.normalizePackageJson)(pkgJson, normalizeOptions) : pkgJson
+  );
+}
+// @__NO_SIDE_EFFECTS__
+async function toEditablePackageJson(pkgJson, options) {
+  const { path: filepath, ...pkgJsonToEditableOptions } = {
+    __proto__: null,
+    ...options
+  };
+  const { normalize, ...normalizeOptions } = pkgJsonToEditableOptions;
+  if (typeof filepath !== "string") {
+    return /* @__PURE__ */ pkgJsonToEditable(pkgJson, pkgJsonToEditableOptions);
+  }
+  const EditablePackageJson = /* @__PURE__ */ getEditablePackageJsonClass();
+  const pkgJsonPath = (0, import_packages.resolvePackageJsonDirname)(filepath);
+  return (await EditablePackageJson.load(pkgJsonPath, { create: true })).fromJSON(
+    `${JSON.stringify(
+      normalize ? (0, import_normalize2.normalizePackageJson)(pkgJson, {
+        ...(0, import_normalize.isNodeModules)(pkgJsonPath) ? {} : { preserve: ["repository"] },
+        ...normalizeOptions
+      }) : pkgJson,
+      null,
+      2
+    )}
+`
+  );
+}
+// @__NO_SIDE_EFFECTS__
+function toEditablePackageJsonSync(pkgJson, options) {
+  const { path: filepath, ...pkgJsonToEditableOptions } = {
+    __proto__: null,
+    ...options
+  };
+  const { normalize, ...normalizeOptions } = pkgJsonToEditableOptions;
+  if (typeof filepath !== "string") {
+    return /* @__PURE__ */ pkgJsonToEditable(pkgJson, pkgJsonToEditableOptions);
+  }
+  const EditablePackageJson = /* @__PURE__ */ getEditablePackageJsonClass();
+  const pkgJsonPath = (0, import_packages.resolvePackageJsonDirname)(filepath);
+  return new EditablePackageJson().create(pkgJsonPath).fromJSON(
+    `${JSON.stringify(
+      normalize ? (0, import_normalize2.normalizePackageJson)(pkgJson, {
+        ...(0, import_normalize.isNodeModules)(pkgJsonPath) ? {} : { preserve: ["repository"] },
+        ...normalizeOptions
+      }) : pkgJson,
+      null,
+      2
+    )}
+`
+  );
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  getEditablePackageJsonClass,
+  pkgJsonToEditable,
+  toEditablePackageJson,
+  toEditablePackageJsonSync
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/exports.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/exports.d.ts
new file mode 100644
index 00000000..25c9c462
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/exports.d.ts
@@ -0,0 +1,70 @@
+/**
+ * Find types definition for a specific subpath in package exports.
+ *
+ * @example
+ * ```typescript
+ * const exports = { '.': { types: './dist/index.d.ts', import: './dist/index.js' } }
+ * const types = findTypesForSubpath(exports, './dist/index.js')
+ * // types === './dist/index.d.ts'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function findTypesForSubpath(entryExports: unknown, subpath: string): string | undefined;
+/**
+ * Get subpaths from package exports.
+ *
+ * @example
+ * ```typescript
+ * const exports = { '.': './index.js', './utils': './utils.js' }
+ * getSubpaths(exports) // ['.', './utils']
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function getSubpaths(entryExports: unknown): string[];
+/**
+ * Get file paths from package exports.
+ *
+ * @example
+ * ```typescript
+ * const exports = { '.': './dist/index.js', './utils': './dist/utils.js' }
+ * getExportFilePaths(exports) // ['./dist/index.js', './dist/utils.js']
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function getExportFilePaths(entryExports: unknown): string[];
+/**
+ * Check if package exports use conditional patterns (e.g., import/require).
+ *
+ * @example
+ * ```typescript
+ * isConditionalExports({ import: './index.mjs', require: './index.cjs' }) // true
+ * isConditionalExports({ '.': './index.js' })                            // false
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isConditionalExports(entryExports: unknown): boolean;
+/**
+ * Check if package exports use subpath patterns (keys starting with '.').
+ *
+ * @example
+ * ```typescript
+ * isSubpathExports({ '.': './index.js', './utils': './utils.js' }) // true
+ * isSubpathExports({ import: './index.mjs' })                     // false
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isSubpathExports(entryExports: unknown): boolean;
+/**
+ * Normalize package.json exports field to canonical format.
+ *
+ * @example
+ * ```typescript
+ * resolvePackageJsonEntryExports('./index.js')
+ * // { '.': './index.js' }
+ *
+ * resolvePackageJsonEntryExports({ '.': './index.js' })
+ * // { '.': './index.js' }
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function resolvePackageJsonEntryExports(entryExports: unknown): unknown;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/exports.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/exports.js
new file mode 100644
index 00000000..3765592c
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/exports.js
@@ -0,0 +1,164 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var exports_exports = {};
+__export(exports_exports, {
+  findTypesForSubpath: () => findTypesForSubpath,
+  getExportFilePaths: () => getExportFilePaths,
+  getSubpaths: () => getSubpaths,
+  isConditionalExports: () => isConditionalExports,
+  isSubpathExports: () => isSubpathExports,
+  resolvePackageJsonEntryExports: () => resolvePackageJsonEntryExports
+});
+module.exports = __toCommonJS(exports_exports);
+var import_core = require("../constants/core");
+var import_arrays = require("../arrays");
+var import_objects = require("../objects");
+// @__NO_SIDE_EFFECTS__
+function findTypesForSubpath(entryExports, subpath) {
+  const queue = [entryExports];
+  let pos = 0;
+  while (pos < queue.length) {
+    if (pos === import_core.LOOP_SENTINEL) {
+      throw new Error(
+        "Detected infinite loop in entry exports crawl of getTypesForSubpath"
+      );
+    }
+    const value = queue[pos++];
+    if ((0, import_arrays.isArray)(value)) {
+      for (let i = 0, { length } = value; i < length; i += 1) {
+        const item = value[i];
+        if (item === subpath) {
+          return value.types;
+        }
+        if ((0, import_objects.isObject)(item)) {
+          queue.push(item);
+        }
+      }
+    } else if ((0, import_objects.isObject)(value)) {
+      const keys = Object.getOwnPropertyNames(value);
+      for (let i = 0, { length } = keys; i < length; i += 1) {
+        const key = keys[i];
+        const item = value[key];
+        if (item === subpath) {
+          return value.types;
+        }
+        if ((0, import_objects.isObject)(item)) {
+          queue.push(item);
+        }
+      }
+    }
+  }
+  return void 0;
+}
+// @__NO_SIDE_EFFECTS__
+function getSubpaths(entryExports) {
+  if (!(0, import_objects.isObject)(entryExports)) {
+    return [];
+  }
+  return Object.getOwnPropertyNames(entryExports).filter(
+    (key) => key.startsWith(".")
+  );
+}
+// @__NO_SIDE_EFFECTS__
+function getExportFilePaths(entryExports) {
+  if (!(0, import_objects.isObject)(entryExports)) {
+    return [];
+  }
+  const paths = [];
+  for (const key of Object.getOwnPropertyNames(entryExports)) {
+    if (!key.startsWith(".")) {
+      continue;
+    }
+    const value = entryExports[key];
+    if (typeof value === "string") {
+      paths.push(value);
+    } else if ((0, import_objects.isObject)(value)) {
+      for (const subKey of Object.getOwnPropertyNames(value)) {
+        const subValue = value[subKey];
+        if (typeof subValue === "string") {
+          paths.push(subValue);
+        } else if ((0, import_arrays.isArray)(subValue)) {
+          for (const item of subValue) {
+            if (typeof item === "string") {
+              paths.push(item);
+            } else if ((0, import_objects.isObject)(item)) {
+              for (const nestedKey of Object.getOwnPropertyNames(item)) {
+                const nestedValue = item[nestedKey];
+                if (typeof nestedValue === "string") {
+                  paths.push(nestedValue);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  return [...new Set(paths)].filter((p) => p.startsWith("./"));
+}
+// @__NO_SIDE_EFFECTS__
+function isConditionalExports(entryExports) {
+  if (!(0, import_objects.isObjectObject)(entryExports)) {
+    return false;
+  }
+  const keys = Object.getOwnPropertyNames(entryExports);
+  const { length } = keys;
+  if (!length) {
+    return false;
+  }
+  for (let i = 0; i < length; i += 1) {
+    const key = keys[i];
+    if (key.length > 0 && key.charCodeAt(0) === 46) {
+      return false;
+    }
+  }
+  return true;
+}
+// @__NO_SIDE_EFFECTS__
+function isSubpathExports(entryExports) {
+  if ((0, import_objects.isObjectObject)(entryExports)) {
+    const keys = Object.getOwnPropertyNames(entryExports);
+    for (let i = 0, { length } = keys; i < length; i += 1) {
+      if (keys[i]?.charCodeAt(0) === 46) {
+        return true;
+      }
+    }
+  }
+  return false;
+}
+// @__NO_SIDE_EFFECTS__
+function resolvePackageJsonEntryExports(entryExports) {
+  if (typeof entryExports === "string" || (0, import_arrays.isArray)(entryExports)) {
+    return { ".": entryExports };
+  }
+  if (/* @__PURE__ */ isConditionalExports(entryExports)) {
+    return entryExports;
+  }
+  return (0, import_objects.isObject)(entryExports) ? entryExports : void 0;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  findTypesForSubpath,
+  getExportFilePaths,
+  getSubpaths,
+  isConditionalExports,
+  isSubpathExports,
+  resolvePackageJsonEntryExports
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/isolation.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/isolation.d.ts
new file mode 100644
index 00000000..b614e5a5
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/isolation.d.ts
@@ -0,0 +1,22 @@
+import type { PackageJson } from '../packages';
+export type IsolatePackageOptions = {
+    imports?: Record | undefined;
+    install?: ((cwd: string) => Promise) | undefined;
+    onPackageJson?: ((pkgJson: PackageJson) => PackageJson | Promise) | undefined;
+    sourcePath?: string | undefined;
+};
+export type IsolatePackageResult = {
+    exports?: Record | undefined;
+    tmpdir: string;
+};
+/**
+ * Isolates a package in a temporary test environment.
+ *
+ * Supports multiple input types:
+ * 1. File system path (absolute or relative)
+ * 2. Package name with optional version spec
+ * 3. npm package spec (parsed via npm-package-arg)
+ *
+ * @throws {Error} When package installation or setup fails.
+ */
+export declare function isolatePackage(packageSpec: string, options?: IsolatePackageOptions | undefined): Promise;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/isolation.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/isolation.js
new file mode 100644
index 00000000..1326591d
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/isolation.js
@@ -0,0 +1,217 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var isolation_exports = {};
+__export(isolation_exports, {
+  isolatePackage: () => isolatePackage
+});
+module.exports = __toCommonJS(isolation_exports);
+var import_platform = require("../constants/platform");
+var import_npm_package_arg = __toESM(require("../external/npm-package-arg"));
+var import_spawn = require("../spawn");
+var import_normalize = require("../paths/normalize");
+var import_operations = require("./operations");
+var import_socket = require("../paths/socket");
+let _fs;
+// @__NO_SIDE_EFFECTS__
+function getFs() {
+  if (_fs === void 0) {
+    _fs = require("fs");
+  }
+  return _fs;
+}
+let _path;
+// @__NO_SIDE_EFFECTS__
+function getPath() {
+  if (_path === void 0) {
+    _path = require("path");
+  }
+  return _path;
+}
+const FS_CP_OPTIONS = {
+  dereference: true,
+  errorOnExist: false,
+  filter: (src) => !src.includes("node_modules") && !src.endsWith(".DS_Store"),
+  force: true,
+  recursive: true,
+  ...import_platform.WIN32 ? { maxRetries: 3, retryDelay: 100 } : {}
+};
+async function resolveRealPath(pathStr) {
+  const fs = /* @__PURE__ */ getFs();
+  const path = /* @__PURE__ */ getPath();
+  return await fs.promises.realpath(pathStr).catch(() => path.resolve(pathStr));
+}
+async function mergePackageJson(pkgJsonPath, originalPkgJson) {
+  const fs = /* @__PURE__ */ getFs();
+  let pkgJson;
+  try {
+    pkgJson = JSON.parse(await fs.promises.readFile(pkgJsonPath, "utf8"));
+  } catch (error) {
+    throw new Error(
+      `Failed to parse ${pkgJsonPath}: ${error instanceof Error ? error.message : String(error)}`,
+      { cause: error }
+    );
+  }
+  const mergedPkgJson = originalPkgJson ? { ...originalPkgJson, ...pkgJson } : pkgJson;
+  return mergedPkgJson;
+}
+async function isolatePackage(packageSpec, options) {
+  const fs = /* @__PURE__ */ getFs();
+  const path = /* @__PURE__ */ getPath();
+  const opts = { __proto__: null, ...options };
+  const { imports, install, onPackageJson, sourcePath: optSourcePath } = opts;
+  let sourcePath = optSourcePath;
+  let packageName;
+  let spec;
+  if ((0, import_normalize.isPath)(packageSpec)) {
+    const trimmedPath = (0, import_normalize.trimLeadingDotSlash)(packageSpec);
+    const pathToResolve = (0, import_normalize.isAbsolute)(trimmedPath) ? trimmedPath : packageSpec;
+    sourcePath = path.resolve(pathToResolve);
+    if (!fs.existsSync(sourcePath)) {
+      throw new Error(`Source path does not exist: ${sourcePath}`);
+    }
+    const pkgJson = await (0, import_operations.readPackageJson)(sourcePath, { normalize: true });
+    if (!pkgJson) {
+      throw new Error(`Could not read package.json from: ${sourcePath}`);
+    }
+    packageName = pkgJson.name;
+  } else {
+    const parsed = (0, import_npm_package_arg.default)(packageSpec);
+    packageName = parsed.name;
+    if (parsed.type === "directory" || parsed.type === "file") {
+      sourcePath = parsed.fetchSpec;
+      if (!sourcePath || !fs.existsSync(sourcePath)) {
+        throw new Error(`Source path does not exist: ${sourcePath}`);
+      }
+      if (!packageName) {
+        const pkgJson = await (0, import_operations.readPackageJson)(sourcePath, { normalize: true });
+        if (!pkgJson) {
+          throw new Error(`Could not read package.json from: ${sourcePath}`);
+        }
+        packageName = pkgJson.name;
+      }
+    } else {
+      spec = parsed.fetchSpec || parsed.rawSpec;
+    }
+  }
+  if (!packageName) {
+    throw new Error(`Could not determine package name from: ${packageSpec}`);
+  }
+  const sanitizedName = packageName.replace(/[@/]/g, "-");
+  const tempDir = await fs.promises.mkdtemp(
+    path.join((0, import_socket.getOsTmpDir)(), `socket-test-${sanitizedName}-`)
+  );
+  const packageTempDir = path.join(tempDir, sanitizedName);
+  await fs.promises.mkdir(packageTempDir, { recursive: true });
+  let installedPath;
+  let originalPackageJson;
+  if (spec) {
+    await fs.promises.writeFile(
+      path.join(packageTempDir, "package.json"),
+      JSON.stringify(
+        {
+          name: "test-temp",
+          private: true,
+          version: "1.0.0"
+        },
+        null,
+        2
+      )
+    );
+    if (install) {
+      await install(packageTempDir);
+    } else {
+      const packageInstallSpec = spec.startsWith("https://") ? spec : `${packageName}@${spec}`;
+      await (0, import_spawn.spawn)("pnpm", ["add", packageInstallSpec], {
+        cwd: packageTempDir,
+        shell: import_platform.WIN32,
+        stdio: "pipe"
+      });
+    }
+    installedPath = path.join(packageTempDir, "node_modules", packageName);
+    originalPackageJson = await (0, import_operations.readPackageJson)(installedPath, {
+      normalize: true
+    });
+    if (sourcePath) {
+      const realInstalledPath = await resolveRealPath(installedPath);
+      const realSourcePath = await resolveRealPath(sourcePath);
+      if (realSourcePath !== realInstalledPath) {
+        await fs.promises.cp(sourcePath, installedPath, FS_CP_OPTIONS);
+      }
+    }
+  } else {
+    if (!sourcePath) {
+      throw new Error("sourcePath is required when no version spec provided");
+    }
+    const scopedPath = packageName.startsWith("@") ? path.join(
+      packageTempDir,
+      "node_modules",
+      packageName.split("/")[0] ?? ""
+    ) : path.join(packageTempDir, "node_modules");
+    await fs.promises.mkdir(scopedPath, { recursive: true });
+    installedPath = path.join(packageTempDir, "node_modules", packageName);
+    await fs.promises.cp(sourcePath, installedPath, FS_CP_OPTIONS);
+  }
+  if (onPackageJson || originalPackageJson) {
+    const pkgJsonPath = path.join(installedPath, "package.json");
+    const mergedPkgJson = await mergePackageJson(
+      pkgJsonPath,
+      originalPackageJson
+    );
+    const finalPkgJson = onPackageJson ? await onPackageJson(mergedPkgJson) : mergedPkgJson;
+    await fs.promises.writeFile(
+      pkgJsonPath,
+      JSON.stringify(finalPkgJson, null, 2)
+    );
+  }
+  if (install) {
+    await install(installedPath);
+  } else {
+    await (0, import_spawn.spawn)("pnpm", ["install"], {
+      cwd: installedPath,
+      shell: import_platform.WIN32,
+      stdio: "pipe"
+    });
+  }
+  const exports2 = imports ? { __proto__: null } : void 0;
+  if (imports) {
+    for (const { 0: key, 1: specifier } of Object.entries(imports)) {
+      const fullPath = path.join(installedPath, specifier);
+      exports2[key] = require(fullPath);
+    }
+  }
+  return {
+    exports: exports2,
+    tmpdir: installedPath
+  };
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  isolatePackage
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/licenses.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/licenses.d.ts
new file mode 100644
index 00000000..0732342e
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/licenses.d.ts
@@ -0,0 +1,127 @@
+import type { LicenseNode } from '../packages';
+// Duplicated from spdx-expression-parse - AST node types.
+export interface SpdxLicenseNode {
+    license: string;
+    plus?: boolean | undefined;
+    exception?: string | undefined;
+}
+export interface SpdxBinaryOperationNode {
+    left: SpdxLicenseNode | SpdxBinaryOperationNode;
+    conjunction: 'and' | 'or';
+    right: SpdxLicenseNode | SpdxBinaryOperationNode;
+}
+export type SpdxAstNode = SpdxLicenseNode | SpdxBinaryOperationNode;
+// Internal AST node types with type discriminator.
+export interface InternalLicenseNode extends SpdxLicenseNode {
+    type: 'License';
+}
+export interface InternalBinaryOperationNode {
+    type: 'BinaryOperation';
+    left: InternalLicenseNode | InternalBinaryOperationNode;
+    conjunction: 'and' | 'or';
+    right: InternalLicenseNode | InternalBinaryOperationNode;
+}
+export type InternalAstNode = InternalLicenseNode | InternalBinaryOperationNode;
+export interface LicenseVisitor {
+    License?: (node: InternalLicenseNode, parent?: InternalAstNode) => boolean | undefined;
+    BinaryOperation?: (node: InternalBinaryOperationNode, parent?: InternalAstNode) => boolean | undefined;
+}
+/**
+ * Collect licenses that are incompatible (copyleft).
+ *
+ * @example
+ * ```typescript
+ * const nodes = [{ license: 'MIT' }, { license: 'GPL-3.0' }]
+ * const incompatible = collectIncompatibleLicenses(nodes)
+ * // incompatible contains only the GPL-3.0 node
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function collectIncompatibleLicenses(licenseNodes: LicenseNode[]): LicenseNode[];
+/**
+ * Collect warnings from license nodes.
+ *
+ * @example
+ * ```typescript
+ * const nodes = [{ license: 'UNLICENSED' }]
+ * collectLicenseWarnings(nodes) // ['Package is unlicensed']
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function collectLicenseWarnings(licenseNodes: LicenseNode[]): string[];
+/**
+ * Create an AST node from a raw node.
+ *
+ * @example
+ * ```typescript
+ * const raw = { license: 'MIT' }
+ * const node = createAstNode(raw)
+ * // node.type === 'License'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function createAstNode(rawNode: SpdxAstNode): InternalAstNode;
+/**
+ * Create a binary operation AST node.
+ *
+ * @example
+ * ```typescript
+ * const raw = {
+ *   left: { license: 'MIT' },
+ *   conjunction: 'OR' as const,
+ *   right: { license: 'Apache-2.0' }
+ * }
+ * const node = createBinaryOperationNode(raw)
+ * // node.type === 'BinaryOperation'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function createBinaryOperationNode(rawNodeParam: SpdxBinaryOperationNode): InternalBinaryOperationNode;
+/**
+ * Create a license AST node.
+ *
+ * @example
+ * ```typescript
+ * const node = createLicenseNode({ license: 'MIT' })
+ * // node.type === 'License' && node.license === 'MIT'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function createLicenseNode(rawNode: SpdxLicenseNode): InternalLicenseNode;
+/**
+ * Parse an SPDX license expression into an AST.
+ *
+ * @example
+ * ```typescript
+ * const ast = parseSpdxExp('MIT OR Apache-2.0')
+ * // ast is a BinaryOperation node with MIT and Apache-2.0 leaves
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function parseSpdxExp(spdxExp: string): SpdxAstNode | undefined;
+/**
+ * Parse package license field into structured license nodes.
+ *
+ * @example
+ * ```typescript
+ * const nodes = resolvePackageLicenses('MIT', '/tmp/my-project')
+ * // [{ license: 'MIT' }]
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function resolvePackageLicenses(licenseFieldValue: string, where: string): LicenseNode[];
+/**
+ * Traverse SPDX license AST and invoke visitor callbacks for each node.
+ *
+ * @example
+ * ```typescript
+ * const ast = parseSpdxExp('MIT OR Apache-2.0')
+ * const licenses: string[] = []
+ * if (ast) {
+ *   visitLicenses(ast, { License(node) { licenses.push(node.license) } })
+ * }
+ * // licenses === ['MIT', 'Apache-2.0']
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function visitLicenses(ast: SpdxAstNode, visitor: LicenseVisitor): void;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/licenses.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/licenses.js
new file mode 100644
index 00000000..52503d84
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/licenses.js
@@ -0,0 +1,210 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var licenses_exports = {};
+__export(licenses_exports, {
+  collectIncompatibleLicenses: () => collectIncompatibleLicenses,
+  collectLicenseWarnings: () => collectLicenseWarnings,
+  createAstNode: () => createAstNode,
+  createBinaryOperationNode: () => createBinaryOperationNode,
+  createLicenseNode: () => createLicenseNode,
+  parseSpdxExp: () => parseSpdxExp,
+  resolvePackageLicenses: () => resolvePackageLicenses,
+  visitLicenses: () => visitLicenses
+});
+module.exports = __toCommonJS(licenses_exports);
+var import_core = require("../constants/core");
+var import_licenses = require("../constants/licenses");
+var import_spdx_correct = __toESM(require("../external/spdx-correct"));
+var import_spdx_expression_parse = __toESM(require("../external/spdx-expression-parse"));
+var import_objects = require("../objects");
+var import_normalize = require("../paths/normalize");
+const copyLeftLicenses = (0, import_licenses.getCopyLeftLicenses)();
+let _path;
+// @__NO_SIDE_EFFECTS__
+function getPath() {
+  if (_path === void 0) {
+    _path = require("path");
+  }
+  return _path;
+}
+const BINARY_OPERATION_NODE_TYPE = "BinaryOperation";
+const LICENSE_NODE_TYPE = "License";
+const fileReferenceRegExp = /^SEE LICEN[CS]E IN (.+)$/;
+// @__NO_SIDE_EFFECTS__
+function collectIncompatibleLicenses(licenseNodes) {
+  const result = [];
+  for (let i = 0, { length } = licenseNodes; i < length; i += 1) {
+    const node = licenseNodes[i];
+    if (node && copyLeftLicenses.has(node.license)) {
+      result.push(node);
+    }
+  }
+  return result;
+}
+// @__NO_SIDE_EFFECTS__
+function collectLicenseWarnings(licenseNodes) {
+  const warnings = /* @__PURE__ */ new Map();
+  for (let i = 0, { length } = licenseNodes; i < length; i += 1) {
+    const node = licenseNodes[i];
+    if (!node) {
+      continue;
+    }
+    const { license } = node;
+    if (license === "UNLICENSED") {
+      warnings.set("UNLICENSED", "Package is unlicensed");
+    } else if (node.inFile !== void 0) {
+      warnings.set("IN_FILE", `License terms specified in ${node.inFile}`);
+    }
+  }
+  return [...warnings.values()];
+}
+// @__NO_SIDE_EFFECTS__
+function createAstNode(rawNode) {
+  return (0, import_objects.hasOwn)(rawNode, "license") ? /* @__PURE__ */ createLicenseNode(rawNode) : /* @__PURE__ */ createBinaryOperationNode(rawNode);
+}
+// @__NO_SIDE_EFFECTS__
+function createBinaryOperationNode(rawNodeParam) {
+  let left;
+  let right;
+  let rawLeft = rawNodeParam.left;
+  let rawRight = rawNodeParam.right;
+  const { conjunction } = rawNodeParam;
+  return {
+    __proto__: null,
+    type: BINARY_OPERATION_NODE_TYPE,
+    get left() {
+      if (left === void 0) {
+        left = /* @__PURE__ */ createAstNode(rawLeft);
+        rawLeft = void 0;
+      }
+      return left;
+    },
+    conjunction,
+    get right() {
+      if (right === void 0) {
+        right = /* @__PURE__ */ createAstNode(rawRight);
+        rawRight = void 0;
+      }
+      return right;
+    }
+  };
+}
+// @__NO_SIDE_EFFECTS__
+function createLicenseNode(rawNode) {
+  return {
+    __proto__: null,
+    ...rawNode,
+    type: LICENSE_NODE_TYPE
+  };
+}
+// @__NO_SIDE_EFFECTS__
+function parseSpdxExp(spdxExp) {
+  try {
+    return (0, import_spdx_expression_parse.default)(spdxExp);
+  } catch {
+  }
+  const corrected = (0, import_spdx_correct.default)(spdxExp);
+  return corrected ? (0, import_spdx_expression_parse.default)(corrected) : void 0;
+}
+// @__NO_SIDE_EFFECTS__
+function resolvePackageLicenses(licenseFieldValue, where) {
+  if (licenseFieldValue === "UNLICENSED" || licenseFieldValue === "UNLICENCED") {
+    return [{ license: "UNLICENSED" }];
+  }
+  const match = fileReferenceRegExp.exec(licenseFieldValue);
+  if (match) {
+    const path = /* @__PURE__ */ getPath();
+    return [
+      {
+        license: licenseFieldValue,
+        inFile: (0, import_normalize.normalizePath)(path.relative(where, match[1] || ""))
+      }
+    ];
+  }
+  const licenseNodes = [];
+  const ast = /* @__PURE__ */ parseSpdxExp(licenseFieldValue);
+  if (ast) {
+    /* @__PURE__ */ visitLicenses(ast, {
+      License(node) {
+        const { license } = node;
+        if (license.startsWith("LicenseRef") || license.startsWith("DocumentRef")) {
+          licenseNodes.length = 0;
+          return false;
+        }
+        licenseNodes.push(node);
+      }
+    });
+  }
+  return licenseNodes;
+}
+// @__NO_SIDE_EFFECTS__
+function visitLicenses(ast, visitor) {
+  const queue = [
+    [/* @__PURE__ */ createAstNode(ast), void 0]
+  ];
+  let pos = 0;
+  let { length: queueLength } = queue;
+  while (pos < queueLength) {
+    if (pos === import_core.LOOP_SENTINEL) {
+      throw new Error("Detected infinite loop in ast crawl of visitLicenses");
+    }
+    const { 0: node, 1: parent } = queue[pos++];
+    const { type } = node;
+    const visitorRecord = visitor;
+    if (typeof visitorRecord[type] === "function" && (0, import_objects.hasOwn)(visitor, type)) {
+      if (type === LICENSE_NODE_TYPE) {
+        const licenseVisitor = visitorRecord["License"];
+        if (typeof licenseVisitor === "function" && licenseVisitor(node, parent) === false) {
+          break;
+        }
+      } else if (type === BINARY_OPERATION_NODE_TYPE) {
+        const binaryOpVisitor = visitorRecord["BinaryOperation"];
+        if (typeof binaryOpVisitor === "function" && binaryOpVisitor(node, parent) === false) {
+          break;
+        }
+      }
+    }
+    if (type === BINARY_OPERATION_NODE_TYPE) {
+      queue[queueLength++] = [node.left, node];
+      queue[queueLength++] = [node.right, node];
+    }
+  }
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  collectIncompatibleLicenses,
+  collectLicenseWarnings,
+  createAstNode,
+  createBinaryOperationNode,
+  createLicenseNode,
+  parseSpdxExp,
+  resolvePackageLicenses,
+  visitLicenses
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/manifest.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/manifest.d.ts
new file mode 100644
index 00000000..4a164d83
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/manifest.d.ts
@@ -0,0 +1,34 @@
+import type { PackageJson, PacoteOptions } from '../packages';
+/**
+ * Create a package.json object for a Socket registry package.
+ *
+ * @example
+ * ```typescript
+ * const pkgJson = createPackageJson('is-number', 'packages/npm/is-number', {
+ *   version: '1.0.0',
+ *   description: 'Check if a value is a number'
+ * })
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function createPackageJson(sockRegPkgName: string, directory: string, options?: PackageJson | undefined): PackageJson;
+/**
+ * Fetch the manifest for a package.
+ *
+ * @example
+ * ```typescript
+ * const manifest = await fetchPackageManifest('lodash@4.17.21')
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function fetchPackageManifest(pkgNameOrId: string, options?: PacoteOptions): Promise;
+/**
+ * Fetch the packument (package document) for a package.
+ *
+ * @example
+ * ```typescript
+ * const packument = await fetchPackagePackument('lodash')
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function fetchPackagePackument(pkgNameOrId: string, options?: PacoteOptions): Promise;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/manifest.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/manifest.js
new file mode 100644
index 00000000..e8e1527a
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/manifest.js
@@ -0,0 +1,177 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var manifest_exports = {};
+__export(manifest_exports, {
+  createPackageJson: () => createPackageJson,
+  fetchPackageManifest: () => fetchPackageManifest,
+  fetchPackagePackument: () => fetchPackagePackument
+});
+module.exports = __toCommonJS(manifest_exports);
+var import_packages = require("../constants/packages");
+var import_process = require("../constants/process");
+var import_socket = require("../constants/socket");
+var import_npm_package_arg = __toESM(require("../external/npm-package-arg"));
+var import_pacote = __toESM(require("../external/pacote"));
+var import_semver = __toESM(require("../external/semver"));
+var import_arrays = require("../arrays");
+var import_objects = require("../objects");
+var import_exports = require("./exports");
+var import_validation = require("./validation");
+const abortSignal = (0, import_process.getAbortSignal)();
+const packageDefaultNodeRange = (0, import_packages.getPackageDefaultNodeRange)();
+const PACKAGE_DEFAULT_SOCKET_CATEGORIES = (0, import_packages.getPackageDefaultSocketCategories)();
+const packumentCache = (0, import_packages.getPackumentCache)();
+const pkgScopePrefixRegExp = /^@socketregistry\//;
+// @__NO_SIDE_EFFECTS__
+function createPackageJson(sockRegPkgName, directory, options) {
+  const {
+    dependencies,
+    description,
+    engines,
+    exports: entryExportsRaw,
+    files,
+    keywords,
+    main,
+    overrides,
+    resolutions,
+    sideEffects,
+    socket,
+    type,
+    version
+  } = { __proto__: null, ...options };
+  const name = `@socketregistry/${sockRegPkgName.replace(pkgScopePrefixRegExp, "")}`;
+  const entryExports = (0, import_exports.resolvePackageJsonEntryExports)(entryExportsRaw);
+  const githubUrl = `https://github.com/${import_socket.SOCKET_GITHUB_ORG}/${import_socket.SOCKET_REGISTRY_REPO_NAME}`;
+  return {
+    __proto__: null,
+    name,
+    version,
+    license: "MIT",
+    description,
+    keywords,
+    homepage: `${githubUrl}/tree/main/${directory}`,
+    repository: {
+      type: "git",
+      url: `git+${githubUrl}.git`,
+      directory
+    },
+    ...type ? { type } : {},
+    ...(0, import_objects.isObjectObject)(entryExports) ? { exports: { ...entryExports } } : {},
+    ...entryExports ? {} : { main: `${main ?? "./index.js"}` },
+    sideEffects: sideEffects !== void 0 && !!sideEffects,
+    ...(0, import_objects.isObjectObject)(dependencies) ? { dependencies: { ...dependencies } } : {},
+    ...(0, import_objects.isObjectObject)(overrides) ? { overrides: { ...overrides } } : {},
+    ...(0, import_objects.isObjectObject)(resolutions) ? { resolutions: { ...resolutions } } : {},
+    ...(0, import_objects.isObjectObject)(engines) ? {
+      engines: Object.fromEntries(
+        (0, import_objects.objectEntries)(engines).map((pair) => {
+          const strKey = String(pair[0]);
+          const result = [strKey, pair[1]];
+          if (strKey === "node") {
+            const { 1: range } = result;
+            if (typeof range === "string" && range && packageDefaultNodeRange) {
+              const coercedRange = import_semver.default.coerce(range);
+              if (!import_semver.default.satisfies(
+                coercedRange?.version ?? "0.0.0",
+                packageDefaultNodeRange
+              )) {
+                result[1] = packageDefaultNodeRange;
+              }
+            }
+          }
+          return result;
+        })
+      )
+    } : { engines: { node: packageDefaultNodeRange } },
+    files: (0, import_arrays.isArray)(files) ? files.slice() : ["*.d.ts", "*.js"],
+    ...(0, import_objects.isObjectObject)(socket) ? { socket: { ...socket } } : {
+      socket: {
+        // Valid categories are: cleanup, levelup, speedup, tuneup
+        categories: PACKAGE_DEFAULT_SOCKET_CATEGORIES
+      }
+    }
+  };
+}
+// @__NO_SIDE_EFFECTS__
+async function fetchPackageManifest(pkgNameOrId, options) {
+  const pacoteOptions = {
+    __proto__: null,
+    signal: abortSignal,
+    ...options,
+    packumentCache,
+    preferOffline: true
+  };
+  const { signal } = pacoteOptions;
+  if (signal?.aborted) {
+    return void 0;
+  }
+  let result;
+  try {
+    result = await import_pacote.default.manifest(pkgNameOrId, pacoteOptions);
+  } catch {
+  }
+  if (signal?.aborted) {
+    return void 0;
+  }
+  if (result) {
+    const spec = (0, import_npm_package_arg.default)(pkgNameOrId, pacoteOptions.where);
+    if ((0, import_validation.isRegistryFetcherType)(spec.type)) {
+      return result;
+    }
+  }
+  if (result) {
+    const typedResult = result;
+    return await /* @__PURE__ */ fetchPackageManifest(
+      `${typedResult.name}@${typedResult.version}`,
+      pacoteOptions
+    );
+  }
+  return null;
+}
+// @__NO_SIDE_EFFECTS__
+async function fetchPackagePackument(pkgNameOrId, options) {
+  try {
+    return await import_pacote.default.packument(pkgNameOrId, {
+      __proto__: null,
+      signal: abortSignal,
+      ...options,
+      packumentCache,
+      preferOffline: true
+    });
+  } catch {
+  }
+  return void 0;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  createPackageJson,
+  fetchPackageManifest,
+  fetchPackagePackument
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/normalize.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/normalize.d.ts
new file mode 100644
index 00000000..f36ee62c
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/normalize.d.ts
@@ -0,0 +1,43 @@
+import type { NormalizeOptions, PackageJson } from '../packages';
+/**
+ * Normalize a package.json object with standard npm package normalization.
+ *
+ * @example
+ * ```typescript
+ * const pkgJson = { name: 'my-pkg', version: '1.0.0' }
+ * const normalized = normalizePackageJson(pkgJson)
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function normalizePackageJson(pkgJson: PackageJson, options?: NormalizeOptions): PackageJson;
+/**
+ * Extract escaped scope from a Socket registry package name.
+ *
+ * @example
+ * ```typescript
+ * resolveEscapedScope('babel__core') // 'babel__'
+ * resolveEscapedScope('lodash')      // undefined
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function resolveEscapedScope(sockRegPkgName: string): string | undefined;
+/**
+ * Resolve original package name from Socket registry package name.
+ *
+ * @example
+ * ```typescript
+ * resolveOriginalPackageName('@socketregistry/is-number') // 'is-number'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function resolveOriginalPackageName(sockRegPkgName: string): string;
+/**
+ * Convert escaped scope to standard npm scope format.
+ *
+ * @example
+ * ```typescript
+ * unescapeScope('babel__') // '@babel'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function unescapeScope(escapedScope: string): string;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/normalize.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/normalize.js
new file mode 100644
index 00000000..c2a28111
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/normalize.js
@@ -0,0 +1,105 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var normalize_exports = {};
+__export(normalize_exports, {
+  normalizePackageJson: () => normalizePackageJson,
+  resolveEscapedScope: () => resolveEscapedScope,
+  resolveOriginalPackageName: () => resolveOriginalPackageName,
+  unescapeScope: () => unescapeScope
+});
+module.exports = __toCommonJS(normalize_exports);
+var import_socket = require("../constants/socket");
+var import_regexps = require("../regexps");
+var import_normalize_package_data = __toESM(require("../external/normalize-package-data"));
+var import_objects = require("../objects");
+var import_operations = require("./operations");
+const ArrayIsArray = Array.isArray;
+const ObjectHasOwn = Object.hasOwn;
+function getEscapedScopeRegExp() {
+  const firstChar = import_socket.REGISTRY_SCOPE_DELIMITER[0];
+  return new RegExp(
+    `^[^${(0, import_regexps.escapeRegExp)(firstChar)}]+${(0, import_regexps.escapeRegExp)(import_socket.REGISTRY_SCOPE_DELIMITER)}(?!${(0, import_regexps.escapeRegExp)(firstChar)})`
+  );
+}
+// @__NO_SIDE_EFFECTS__
+function normalizePackageJson(pkgJson, options) {
+  const { preserve } = { __proto__: null, ...options };
+  if (!ObjectHasOwn(pkgJson, "version")) {
+    pkgJson.version = "0.0.0";
+  }
+  const preserved = [
+    ["_id", void 0],
+    ["readme", void 0],
+    ...ObjectHasOwn(pkgJson, "bugs") ? [] : [["bugs", void 0]],
+    ...ObjectHasOwn(pkgJson, "homepage") ? [] : [["homepage", void 0]],
+    ...ObjectHasOwn(pkgJson, "name") ? [] : [["name", void 0]],
+    ...ArrayIsArray(preserve) ? preserve.map((k) => [
+      k,
+      ObjectHasOwn(pkgJson, k) ? pkgJson[k] : void 0
+    ]) : []
+  ];
+  (0, import_normalize_package_data.default)(pkgJson);
+  if (pkgJson.name && pkgJson.version) {
+    const extensions = (0, import_operations.findPackageExtensions)(pkgJson.name, pkgJson.version);
+    if (extensions && typeof extensions === "object") {
+      (0, import_objects.merge)(pkgJson, extensions);
+    }
+  }
+  for (const { 0: key, 1: value } of preserved) {
+    pkgJson[key] = value;
+  }
+  return pkgJson;
+}
+// @__NO_SIDE_EFFECTS__
+function resolveEscapedScope(sockRegPkgName) {
+  const escapedScopeRegExp = getEscapedScopeRegExp();
+  const match = escapedScopeRegExp.exec(sockRegPkgName)?.[0];
+  return match || void 0;
+}
+// @__NO_SIDE_EFFECTS__
+function resolveOriginalPackageName(sockRegPkgName) {
+  const name = sockRegPkgName.startsWith(`${import_socket.SOCKET_REGISTRY_SCOPE}/`) ? sockRegPkgName.slice(import_socket.SOCKET_REGISTRY_SCOPE.length + 1) : sockRegPkgName;
+  const escapedScope = /* @__PURE__ */ resolveEscapedScope(name);
+  return escapedScope ? `${/* @__PURE__ */ unescapeScope(escapedScope)}/${name.slice(escapedScope.length)}` : name;
+}
+// @__NO_SIDE_EFFECTS__
+function unescapeScope(escapedScope) {
+  if (escapedScope.length < import_socket.REGISTRY_SCOPE_DELIMITER.length) {
+    return `@${escapedScope}`;
+  }
+  return `@${escapedScope.slice(0, -import_socket.REGISTRY_SCOPE_DELIMITER.length)}`;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  normalizePackageJson,
+  resolveEscapedScope,
+  resolveOriginalPackageName,
+  unescapeScope
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/operations.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/operations.d.ts
new file mode 100644
index 00000000..cb17a9a4
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/operations.d.ts
@@ -0,0 +1,105 @@
+import type { ExtractOptions, NormalizeOptions, PackageJson, PacoteOptions, ReadPackageJsonOptions } from '../packages';
+/**
+ * Extract a package to a destination directory.
+ *
+ * @example
+ * ```typescript
+ * await extractPackage('lodash@4.17.21', { dest: '/tmp/lodash' })
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function extractPackage(pkgNameOrId: string, options?: ExtractOptions, callback?: (destPath: string) => Promise): Promise;
+/**
+ * Find package extensions for a given package.
+ *
+ * @example
+ * ```typescript
+ * const extensions = findPackageExtensions('my-pkg', '1.0.0')
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function findPackageExtensions(pkgName: string, pkgVer: string): unknown;
+/**
+ * Get the release tag for a version.
+ *
+ * @example
+ * ```typescript
+ * getReleaseTag('lodash@latest')    // 'latest'
+ * getReleaseTag('@scope/pkg@beta')  // 'beta'
+ * getReleaseTag('lodash')           // ''
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function getReleaseTag(spec: string): string;
+/**
+ * Pack a package tarball using pacote.
+ *
+ * @example
+ * ```typescript
+ * const tarball = await packPackage('lodash@4.17.21')
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function packPackage(spec: string, options?: PacoteOptions): Promise;
+/**
+ * Read and parse a package.json file asynchronously.
+ *
+ * @example
+ * ```typescript
+ * const pkgJson = await readPackageJson('/tmp/my-project')
+ * console.log(pkgJson?.name)
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function readPackageJson(filepath: string, options?: ReadPackageJsonOptions): Promise;
+/**
+ * Read and parse package.json from a file path synchronously.
+ *
+ * @example
+ * ```typescript
+ * const pkgJson = readPackageJsonSync('/tmp/my-project')
+ * console.log(pkgJson?.name)
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function readPackageJsonSync(filepath: string, options?: NormalizeOptions & {
+    editable?: boolean;
+    throws?: boolean;
+}): PackageJson | undefined;
+/**
+ * Resolve GitHub tarball URL for a package specifier.
+ *
+ * @example
+ * ```typescript
+ * const url = await resolveGitHubTgzUrl('my-pkg@1.0.0', '/tmp/my-project')
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function resolveGitHubTgzUrl(pkgNameOrId: string, where?: unknown): Promise;
+/**
+ * Resolve full package name from a PURL object with custom delimiter.
+ *
+ * @example
+ * ```typescript
+ * resolvePackageName({ name: 'core', namespace: '@babel' })  // '@babel/core'
+ * resolvePackageName({ name: 'lodash' })                     // 'lodash'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function resolvePackageName(purlObj: {
+    name: string;
+    namespace?: string;
+}, delimiter?: string): string;
+/**
+ * Convert npm package name to Socket registry format with delimiter.
+ *
+ * @example
+ * ```typescript
+ * resolveRegistryPackageName('@babel/core') // 'babel__core'
+ * resolveRegistryPackageName('lodash')      // 'lodash'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function resolveRegistryPackageName(pkgName: string): string;
+// Re-export types from lib/packages.
+export type { PackageJson } from '../packages';
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/operations.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/operations.js
new file mode 100644
index 00000000..1a70ae8f
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/operations.js
@@ -0,0 +1,258 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var operations_exports = {};
+__export(operations_exports, {
+  extractPackage: () => extractPackage,
+  findPackageExtensions: () => findPackageExtensions,
+  getReleaseTag: () => getReleaseTag,
+  packPackage: () => packPackage,
+  readPackageJson: () => readPackageJson,
+  readPackageJsonSync: () => readPackageJsonSync,
+  resolveGitHubTgzUrl: () => resolveGitHubTgzUrl,
+  resolvePackageName: () => resolvePackageName,
+  resolveRegistryPackageName: () => resolveRegistryPackageName
+});
+module.exports = __toCommonJS(operations_exports);
+var import_packages = require("../constants/packages");
+var import_process = require("../constants/process");
+var import_socket = require("../constants/socket");
+var import_cacache = __toESM(require("../external/cacache"));
+var import_libnpmpack = __toESM(require("../external/libnpmpack"));
+var import_make_fetch_happen = __toESM(require("../external/make-fetch-happen"));
+var import_npm_package_arg = __toESM(require("../external/npm-package-arg"));
+var import_packageurl_js = require("../external/@socketregistry/packageurl-js");
+var import_pacote = __toESM(require("../external/pacote"));
+var semver = __toESM(require("../external/semver"));
+var import_fs = require("../fs");
+var import_objects = require("../objects");
+var import_normalize = require("./normalize");
+var import_packages2 = require("../paths/packages");
+var import_specs = require("./specs");
+var import_edit = require("./edit");
+const abortSignal = (0, import_process.getAbortSignal)();
+const packageExtensions = (0, import_packages.getPackageExtensions)();
+const packumentCache = (0, import_packages.getPackumentCache)();
+const pacoteCachePath = (0, import_packages.getPacoteCachePath)();
+const fetcher = import_make_fetch_happen.default.defaults({
+  cachePath: pacoteCachePath,
+  // Prefer-offline: Staleness checks for cached data will be bypassed, but
+  // missing data will be requested from the server.
+  // https://github.com/npm/make-fetch-happen?tab=readme-ov-file#--optscache
+  cache: "force-cache"
+});
+// @__NO_SIDE_EFFECTS__
+async function extractPackage(pkgNameOrId, options, callback) {
+  let actualCallback = callback;
+  let actualOptions = options;
+  if (arguments.length === 2 && typeof options === "function") {
+    actualCallback = options;
+    actualOptions = void 0;
+  }
+  const { dest, tmpPrefix, ...extractOptions_ } = {
+    __proto__: null,
+    ...actualOptions
+  };
+  const extractOptions = {
+    packumentCache,
+    preferOffline: true,
+    ...extractOptions_
+  };
+  if (typeof dest === "string") {
+    await import_pacote.default.extract(pkgNameOrId, dest, extractOptions);
+    if (typeof actualCallback === "function") {
+      await actualCallback(dest);
+    }
+  } else {
+    await import_cacache.default.tmp.withTmp(
+      pacoteCachePath,
+      { tmpPrefix },
+      async (tmpDirPath) => {
+        await import_pacote.default.extract(pkgNameOrId, tmpDirPath, extractOptions);
+        if (typeof actualCallback === "function") {
+          await actualCallback(tmpDirPath);
+        }
+      }
+    );
+  }
+}
+// @__NO_SIDE_EFFECTS__
+function findPackageExtensions(pkgName, pkgVer) {
+  let result;
+  for (const entry of packageExtensions) {
+    const selector = String(entry[0]);
+    const ext = entry[1];
+    const lastAtSignIndex = selector.lastIndexOf("@");
+    const name = selector.slice(0, lastAtSignIndex);
+    if (pkgName === name) {
+      const range = selector.slice(lastAtSignIndex + 1);
+      if (semver.satisfies(pkgVer, range)) {
+        if (result === void 0) {
+          result = {};
+        }
+        if (typeof ext === "object" && ext !== null) {
+          (0, import_objects.merge)(result, ext);
+        }
+      }
+    }
+  }
+  return result;
+}
+// @__NO_SIDE_EFFECTS__
+function getReleaseTag(spec) {
+  if (!spec) {
+    return "";
+  }
+  let atIndex = -1;
+  if (spec.startsWith("@")) {
+    atIndex = spec.indexOf("@", 1);
+  } else {
+    atIndex = spec.indexOf("@");
+  }
+  if (atIndex !== -1) {
+    return spec.slice(atIndex + 1);
+  }
+  return "";
+}
+// @__NO_SIDE_EFFECTS__
+async function packPackage(spec, options) {
+  return await (0, import_libnpmpack.default)(spec, {
+    __proto__: null,
+    signal: abortSignal,
+    ...options,
+    packumentCache,
+    preferOffline: true
+  });
+}
+// @__NO_SIDE_EFFECTS__
+async function readPackageJson(filepath, options) {
+  const { editable, normalize, throws, ...normalizeOptions } = {
+    __proto__: null,
+    ...options
+  };
+  const pkgJson = await (0, import_fs.readJson)((0, import_packages2.resolvePackageJsonPath)(filepath), {
+    throws
+  });
+  if (pkgJson) {
+    if (editable) {
+      return await (0, import_edit.toEditablePackageJson)(pkgJson, {
+        path: filepath,
+        normalize,
+        ...normalizeOptions
+      });
+    }
+    return normalize ? (0, import_normalize.normalizePackageJson)(pkgJson, normalizeOptions) : pkgJson;
+  }
+  return void 0;
+}
+// @__NO_SIDE_EFFECTS__
+function readPackageJsonSync(filepath, options) {
+  const { editable, normalize, throws, ...normalizeOptions } = {
+    __proto__: null,
+    ...options
+  };
+  const pkgJson = (0, import_fs.readJsonSync)((0, import_packages2.resolvePackageJsonPath)(filepath), { throws });
+  if (pkgJson) {
+    if (editable) {
+      return (0, import_edit.toEditablePackageJsonSync)(pkgJson, {
+        path: filepath,
+        normalize,
+        ...normalizeOptions
+      });
+    }
+    return normalize ? (0, import_normalize.normalizePackageJson)(pkgJson, normalizeOptions) : pkgJson;
+  }
+  return void 0;
+}
+// @__NO_SIDE_EFFECTS__
+async function resolveGitHubTgzUrl(pkgNameOrId, where) {
+  const whereIsPkgJson = (0, import_objects.isObjectObject)(where);
+  const pkgJson = whereIsPkgJson ? where : await /* @__PURE__ */ readPackageJson(where, { normalize: true });
+  if (!pkgJson) {
+    return "";
+  }
+  const { version } = pkgJson;
+  const parsedSpec = (0, import_npm_package_arg.default)(
+    pkgNameOrId,
+    whereIsPkgJson ? void 0 : where
+  );
+  const isTarballUrl = (0, import_specs.isGitHubTgzSpec)(parsedSpec);
+  if (isTarballUrl) {
+    return parsedSpec.saveSpec || "";
+  }
+  const isGitHubUrl = (0, import_specs.isGitHubUrlSpec)(parsedSpec);
+  const repository = pkgJson.repository;
+  const { project, user } = (isGitHubUrl ? parsedSpec.hosted : (0, import_specs.getRepoUrlDetails)(repository?.url)) || { project: "", user: "" };
+  if (user && project) {
+    let apiUrl = "";
+    if (isGitHubUrl) {
+      apiUrl = (0, import_specs.gitHubTagRefUrl)(user, project, parsedSpec.gitCommittish || "");
+    } else {
+      const versionStr = version;
+      apiUrl = (0, import_specs.gitHubTagRefUrl)(user, project, `v${versionStr}`);
+      if (!(await fetcher(apiUrl, { method: "head" })).ok) {
+        apiUrl = (0, import_specs.gitHubTagRefUrl)(user, project, versionStr);
+        if (!(await fetcher(apiUrl, { method: "head" })).ok) {
+          apiUrl = "";
+        }
+      }
+    }
+    if (apiUrl) {
+      const resp = await fetcher(apiUrl);
+      const json = await resp.json();
+      const sha = json?.object?.sha;
+      if (sha) {
+        return (0, import_specs.gitHubTgzUrl)(user, project, sha);
+      }
+    }
+  }
+  return "";
+}
+// @__NO_SIDE_EFFECTS__
+function resolvePackageName(purlObj, delimiter = "/") {
+  const { name, namespace } = purlObj;
+  return `${namespace ? `${namespace}${delimiter}` : ""}${name}`;
+}
+// @__NO_SIDE_EFFECTS__
+function resolveRegistryPackageName(pkgName) {
+  const purlObj = import_packageurl_js.PackageURL.fromString(`pkg:npm/${pkgName}`);
+  return purlObj.namespace ? `${purlObj.namespace.slice(1)}${import_socket.REGISTRY_SCOPE_DELIMITER}${purlObj.name}` : pkgName;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  extractPackage,
+  findPackageExtensions,
+  getReleaseTag,
+  packPackage,
+  readPackageJson,
+  readPackageJsonSync,
+  resolveGitHubTgzUrl,
+  resolvePackageName,
+  resolveRegistryPackageName
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/provenance.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/provenance.d.ts
new file mode 100644
index 00000000..0c17f291
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/provenance.d.ts
@@ -0,0 +1,21 @@
+import type { ProvenanceOptions } from '../packages';
+/**
+ * Convert raw attestation data to user-friendly provenance details.
+ *
+ * @example
+ * ```typescript
+ * const details = getProvenanceDetails(attestationData)
+ * // { level: 'trusted', repository: '...', commitSha: '...' }
+ * ```
+ */
+export declare function getProvenanceDetails(attestationData: unknown): unknown;
+/**
+ * Fetch package provenance information from npm registry.
+ *
+ * @example
+ * ```typescript
+ * const provenance = await fetchPackageProvenance('lodash', '4.17.21')
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function fetchPackageProvenance(pkgName: string, pkgVersion: string, options?: ProvenanceOptions): Promise;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/provenance.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/provenance.js
new file mode 100644
index 00000000..28758fe3
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/provenance.js
@@ -0,0 +1,190 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var provenance_exports = {};
+__export(provenance_exports, {
+  fetchPackageProvenance: () => fetchPackageProvenance,
+  getProvenanceDetails: () => getProvenanceDetails
+});
+module.exports = __toCommonJS(provenance_exports);
+var import_agents = require("../constants/agents");
+var import_packages = require("../constants/packages");
+var import_make_fetch_happen = __toESM(require("../external/make-fetch-happen"));
+var import_abort = require("../abort");
+var import_url = require("../url");
+const ArrayIsArray = Array.isArray;
+const SLSA_PROVENANCE_V0_2 = "https://slsa.dev/provenance/v0.2";
+const SLSA_PROVENANCE_V1_0 = "https://slsa.dev/provenance/v1";
+let _fetcher;
+// @__NO_SIDE_EFFECTS__
+function getFetcher() {
+  if (_fetcher === void 0) {
+    _fetcher = import_make_fetch_happen.default.defaults({
+      cachePath: (0, import_packages.getPacoteCachePath)(),
+      // Prefer-offline: Staleness checks for cached data will be bypassed, but
+      // missing data will be requested from the server.
+      // https://github.com/npm/make-fetch-happen?tab=readme-ov-file#--optscache
+      cache: "force-cache"
+    });
+  }
+  return _fetcher;
+}
+function getAttestations(attestationData) {
+  const data = attestationData;
+  if (!data.attestations || !ArrayIsArray(data.attestations)) {
+    return [];
+  }
+  return data.attestations.filter((attestation) => {
+    const att = attestation;
+    return att.predicateType === SLSA_PROVENANCE_V0_2 || att.predicateType === SLSA_PROVENANCE_V1_0;
+  });
+}
+function findProvenance(attestations) {
+  for (const attestation of attestations) {
+    const att = attestation;
+    try {
+      let predicate = att.predicate;
+      if (!predicate && att.bundle?.dsseEnvelope?.payload) {
+        try {
+          const decodedPayload = Buffer.from(
+            att.bundle.dsseEnvelope.payload,
+            "base64"
+          ).toString("utf8");
+          const statement = JSON.parse(decodedPayload);
+          predicate = statement.predicate;
+        } catch {
+          continue;
+        }
+      }
+      const predicateData = predicate;
+      if (predicateData?.buildDefinition?.externalParameters) {
+        return {
+          predicate,
+          externalParameters: predicateData.buildDefinition.externalParameters
+        };
+      }
+    } catch {
+    }
+  }
+  return void 0;
+}
+function isTrustedPublisher(value) {
+  if (typeof value !== "string" || !value) {
+    return false;
+  }
+  let url = (0, import_url.parseUrl)(value);
+  let hostname = url?.hostname;
+  if (!url && value.includes("@")) {
+    const firstPart = value.split("@")[0];
+    if (firstPart) {
+      url = (0, import_url.parseUrl)(firstPart);
+    }
+    if (url) {
+      hostname = url.hostname;
+    }
+  }
+  if (!url) {
+    const httpsUrl = (0, import_url.parseUrl)(`https://${value}`);
+    if (httpsUrl) {
+      hostname = httpsUrl.hostname;
+    }
+  }
+  if (hostname) {
+    return hostname === "github.com" || hostname.endsWith(".github.com") || hostname === "gitlab.com" || hostname.endsWith(".gitlab.com");
+  }
+  return value.includes("github") || value.includes("gitlab");
+}
+function getProvenanceDetails(attestationData) {
+  const attestations = getAttestations(attestationData);
+  if (!attestations.length) {
+    return void 0;
+  }
+  const provenance = findProvenance(attestations);
+  if (!provenance) {
+    return { level: "attested" };
+  }
+  const provenanceData = provenance;
+  const { externalParameters, predicate } = provenanceData;
+  const def = predicate?.buildDefinition;
+  const workflow = externalParameters?.workflow;
+  const workflowRef = workflow?.ref || externalParameters?.workflow_ref;
+  const workflowUrl = externalParameters?.context;
+  const workflowPlatform = def?.buildType;
+  const repository = workflow?.repository || externalParameters?.repository;
+  const gitRef = externalParameters?.ref || workflow?.ref;
+  const commitSha = externalParameters?.sha;
+  const workflowRunId = externalParameters?.run_id;
+  const trusted = isTrustedPublisher(workflowRef) || isTrustedPublisher(workflowUrl) || isTrustedPublisher(workflowPlatform) || isTrustedPublisher(repository);
+  return {
+    commitSha,
+    gitRef,
+    level: trusted ? "trusted" : "attested",
+    repository,
+    workflowRef,
+    workflowUrl,
+    workflowPlatform,
+    workflowRunId
+  };
+}
+// @__NO_SIDE_EFFECTS__
+async function fetchPackageProvenance(pkgName, pkgVersion, options) {
+  const { signal, timeout = 1e4 } = {
+    __proto__: null,
+    ...options
+  };
+  if (signal?.aborted) {
+    return void 0;
+  }
+  const timeoutSignal = (0, import_abort.createTimeoutSignal)(timeout);
+  const compositeSignal = (0, import_abort.createCompositeAbortSignal)(signal, timeoutSignal);
+  const fetcher = /* @__PURE__ */ getFetcher();
+  try {
+    const response = await fetcher(
+      // The npm registry attestations API endpoint.
+      `${import_agents.NPM_REGISTRY_URL}/-/npm/v1/attestations/${encodeURIComponent(pkgName)}@${encodeURIComponent(pkgVersion)}`,
+      {
+        method: "GET",
+        signal: compositeSignal,
+        headers: {
+          "User-Agent": "socket-registry"
+        }
+      }
+    );
+    if (response.ok) {
+      return getProvenanceDetails(await response.json());
+    }
+  } catch {
+  }
+  return void 0;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  fetchPackageProvenance,
+  getProvenanceDetails
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/specs.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/specs.d.ts
new file mode 100644
index 00000000..d5c733b4
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/specs.d.ts
@@ -0,0 +1,58 @@
+/**
+ * Extract user and project from GitHub repository URL.
+ *
+ * @example
+ * ```typescript
+ * getRepoUrlDetails('https://github.com/lodash/lodash.git')
+ * // { user: 'lodash', project: 'lodash' }
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function getRepoUrlDetails(repoUrl?: string): {
+    user: string;
+    project: string;
+};
+/**
+ * Generate GitHub API URL for a tag reference.
+ *
+ * @example
+ * ```typescript
+ * gitHubTagRefUrl('lodash', 'lodash', 'v4.17.21')
+ * // 'https://api.github.com/repos/lodash/lodash/git/ref/tags/v4.17.21'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function gitHubTagRefUrl(user: string, project: string, tag: string): string;
+/**
+ * Generate GitHub tarball download URL for a commit SHA.
+ *
+ * @example
+ * ```typescript
+ * gitHubTgzUrl('lodash', 'lodash', 'abc123')
+ * // 'https://github.com/lodash/lodash/archive/abc123.tar.gz'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function gitHubTgzUrl(user: string, project: string, sha: string): string;
+/**
+ * Check if a package specifier is a GitHub tarball URL.
+ *
+ * @example
+ * ```typescript
+ * isGitHubTgzSpec('https://github.com/user/repo/archive/abc123.tar.gz') // true
+ * isGitHubTgzSpec('lodash@4.17.21')                                     // false
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isGitHubTgzSpec(spec: unknown, where?: string): boolean;
+/**
+ * Check if a package specifier is a GitHub URL with committish.
+ *
+ * @example
+ * ```typescript
+ * isGitHubUrlSpec('github:user/repo#v1.0.0') // true
+ * isGitHubUrlSpec('lodash@4.17.21')           // false
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isGitHubUrlSpec(spec: unknown, where?: string): boolean;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/specs.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/specs.js
new file mode 100644
index 00000000..0a0602b2
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/specs.js
@@ -0,0 +1,86 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var specs_exports = {};
+__export(specs_exports, {
+  getRepoUrlDetails: () => getRepoUrlDetails,
+  gitHubTagRefUrl: () => gitHubTagRefUrl,
+  gitHubTgzUrl: () => gitHubTgzUrl,
+  isGitHubTgzSpec: () => isGitHubTgzSpec,
+  isGitHubUrlSpec: () => isGitHubUrlSpec
+});
+module.exports = __toCommonJS(specs_exports);
+var import_npm_package_arg = __toESM(require("../external/npm-package-arg"));
+var import_objects = require("../objects");
+var import_strings = require("../strings");
+// @__NO_SIDE_EFFECTS__
+function getRepoUrlDetails(repoUrl = "") {
+  const userAndRepo = repoUrl.replace(/^.+github.com\//, "").split("/");
+  const user = userAndRepo[0] || "";
+  const project = userAndRepo.length > 1 ? (userAndRepo[1]?.endsWith(".git") ? userAndRepo[1].slice(0, -4) : userAndRepo[1]) || "" : "";
+  return { user, project };
+}
+// @__NO_SIDE_EFFECTS__
+function gitHubTagRefUrl(user, project, tag) {
+  return `https://api.github.com/repos/${user}/${project}/git/ref/tags/${tag}`;
+}
+// @__NO_SIDE_EFFECTS__
+function gitHubTgzUrl(user, project, sha) {
+  return `https://github.com/${user}/${project}/archive/${sha}.tar.gz`;
+}
+// @__NO_SIDE_EFFECTS__
+function isGitHubTgzSpec(spec, where) {
+  let parsedSpec;
+  if ((0, import_objects.isObjectObject)(spec)) {
+    parsedSpec = spec;
+  } else {
+    parsedSpec = (0, import_npm_package_arg.default)(spec, where);
+  }
+  const typedSpec = parsedSpec;
+  return typedSpec.type === "remote" && !!typedSpec.saveSpec?.endsWith(".tar.gz");
+}
+// @__NO_SIDE_EFFECTS__
+function isGitHubUrlSpec(spec, where) {
+  let parsedSpec;
+  if ((0, import_objects.isObjectObject)(spec)) {
+    parsedSpec = spec;
+  } else {
+    parsedSpec = (0, import_npm_package_arg.default)(spec, where);
+  }
+  const typedSpec = parsedSpec;
+  return typedSpec.type === "git" && typedSpec.hosted?.domain === "github.com" && (0, import_strings.isNonEmptyString)(typedSpec.gitCommittish);
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  getRepoUrlDetails,
+  gitHubTagRefUrl,
+  gitHubTgzUrl,
+  isGitHubTgzSpec,
+  isGitHubUrlSpec
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/validation.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/validation.d.ts
new file mode 100644
index 00000000..6c5b462c
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/validation.d.ts
@@ -0,0 +1,33 @@
+/**
+ * Check if package name is a blessed Socket.dev package.
+ *
+ * @example
+ * ```typescript
+ * isBlessedPackageName('@socketregistry/is-number') // true
+ * isBlessedPackageName('lodash')                    // false
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isBlessedPackageName(name: unknown): boolean;
+/**
+ * Check if a type string represents a registry fetcher type.
+ *
+ * @example
+ * ```typescript
+ * isRegistryFetcherType('range')   // true
+ * isRegistryFetcherType('git')     // false
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isRegistryFetcherType(type: string): boolean;
+/**
+ * Check if a package name is valid according to npm naming rules.
+ *
+ * @example
+ * ```typescript
+ * isValidPackageName('my-package')   // true
+ * isValidPackageName('.invalid')     // false
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isValidPackageName(name: string): boolean;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/validation.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/validation.js
new file mode 100644
index 00000000..c5792cef
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/packages/validation.js
@@ -0,0 +1,55 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var validation_exports = {};
+__export(validation_exports, {
+  isBlessedPackageName: () => isBlessedPackageName,
+  isRegistryFetcherType: () => isRegistryFetcherType,
+  isValidPackageName: () => isValidPackageName
+});
+module.exports = __toCommonJS(validation_exports);
+var import_validate_npm_package_name = __toESM(require("../external/validate-npm-package-name"));
+// @__NO_SIDE_EFFECTS__
+function isBlessedPackageName(name) {
+  return typeof name === "string" && (name === "sfw" || name === "socket" || name.startsWith("@socketoverride/") || name.startsWith("@socketregistry/") || name.startsWith("@socketsecurity/"));
+}
+// @__NO_SIDE_EFFECTS__
+function isRegistryFetcherType(type) {
+  return type === "alias" || type === "range" || type === "tag" || type === "version";
+}
+// @__NO_SIDE_EFFECTS__
+function isValidPackageName(name) {
+  return (0, import_validate_npm_package_name.default)(name).validForOldPackages;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  isBlessedPackageName,
+  isRegistryFetcherType,
+  isValidPackageName
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/dirnames.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/dirnames.d.ts
new file mode 100644
index 00000000..6fd7a7aa
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/dirnames.d.ts
@@ -0,0 +1,13 @@
+/**
+ * @fileoverview Directory name and path pattern constants.
+ */
+// Directory names.
+export declare const NODE_MODULES = "node_modules";
+export declare const DOT_GIT_DIR = ".git";
+export declare const DOT_GITHUB = ".github";
+export declare const DOT_SOCKET_DIR = ".socket";
+export declare const CACHE_DIR = "cache";
+export declare const CACHE_TTL_DIR = "ttl";
+// Path patterns.
+export declare const NODE_MODULES_GLOB_RECURSIVE = "**/node_modules";
+export declare const SLASH_NODE_MODULES_SLASH = "/node_modules/";
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/dirnames.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/dirnames.js
new file mode 100644
index 00000000..3b230c38
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/dirnames.js
@@ -0,0 +1,50 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var dirnames_exports = {};
+__export(dirnames_exports, {
+  CACHE_DIR: () => CACHE_DIR,
+  CACHE_TTL_DIR: () => CACHE_TTL_DIR,
+  DOT_GITHUB: () => DOT_GITHUB,
+  DOT_GIT_DIR: () => DOT_GIT_DIR,
+  DOT_SOCKET_DIR: () => DOT_SOCKET_DIR,
+  NODE_MODULES: () => NODE_MODULES,
+  NODE_MODULES_GLOB_RECURSIVE: () => NODE_MODULES_GLOB_RECURSIVE,
+  SLASH_NODE_MODULES_SLASH: () => SLASH_NODE_MODULES_SLASH
+});
+module.exports = __toCommonJS(dirnames_exports);
+const NODE_MODULES = "node_modules";
+const DOT_GIT_DIR = ".git";
+const DOT_GITHUB = ".github";
+const DOT_SOCKET_DIR = ".socket";
+const CACHE_DIR = "cache";
+const CACHE_TTL_DIR = "ttl";
+const NODE_MODULES_GLOB_RECURSIVE = "**/node_modules";
+const SLASH_NODE_MODULES_SLASH = "/node_modules/";
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  CACHE_DIR,
+  CACHE_TTL_DIR,
+  DOT_GITHUB,
+  DOT_GIT_DIR,
+  DOT_SOCKET_DIR,
+  NODE_MODULES,
+  NODE_MODULES_GLOB_RECURSIVE,
+  SLASH_NODE_MODULES_SLASH
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/exts.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/exts.d.ts
new file mode 100644
index 00000000..efd9083e
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/exts.d.ts
@@ -0,0 +1,18 @@
+/**
+ * @fileoverview File extension constants.
+ */
+// File extensions.
+export declare const EXT_CJS = ".cjs";
+export declare const EXT_CMD = ".cmd";
+export declare const EXT_CTS = ".cts";
+export declare const EXT_DTS = ".d.ts";
+export declare const EXT_JS = ".js";
+export declare const EXT_JSON = ".json";
+export declare const EXT_LOCK = ".lock";
+export declare const EXT_LOCKB = ".lockb";
+export declare const EXT_MD = ".md";
+export declare const EXT_MJS = ".mjs";
+export declare const EXT_MTS = ".mts";
+export declare const EXT_PS1 = ".ps1";
+export declare const EXT_YAML = ".yaml";
+export declare const EXT_YML = ".yml";
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/exts.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/exts.js
new file mode 100644
index 00000000..58ccf90f
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/exts.js
@@ -0,0 +1,68 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var exts_exports = {};
+__export(exts_exports, {
+  EXT_CJS: () => EXT_CJS,
+  EXT_CMD: () => EXT_CMD,
+  EXT_CTS: () => EXT_CTS,
+  EXT_DTS: () => EXT_DTS,
+  EXT_JS: () => EXT_JS,
+  EXT_JSON: () => EXT_JSON,
+  EXT_LOCK: () => EXT_LOCK,
+  EXT_LOCKB: () => EXT_LOCKB,
+  EXT_MD: () => EXT_MD,
+  EXT_MJS: () => EXT_MJS,
+  EXT_MTS: () => EXT_MTS,
+  EXT_PS1: () => EXT_PS1,
+  EXT_YAML: () => EXT_YAML,
+  EXT_YML: () => EXT_YML
+});
+module.exports = __toCommonJS(exts_exports);
+const EXT_CJS = ".cjs";
+const EXT_CMD = ".cmd";
+const EXT_CTS = ".cts";
+const EXT_DTS = ".d.ts";
+const EXT_JS = ".js";
+const EXT_JSON = ".json";
+const EXT_LOCK = ".lock";
+const EXT_LOCKB = ".lockb";
+const EXT_MD = ".md";
+const EXT_MJS = ".mjs";
+const EXT_MTS = ".mts";
+const EXT_PS1 = ".ps1";
+const EXT_YAML = ".yaml";
+const EXT_YML = ".yml";
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  EXT_CJS,
+  EXT_CMD,
+  EXT_CTS,
+  EXT_DTS,
+  EXT_JS,
+  EXT_JSON,
+  EXT_LOCK,
+  EXT_LOCKB,
+  EXT_MD,
+  EXT_MJS,
+  EXT_MTS,
+  EXT_PS1,
+  EXT_YAML,
+  EXT_YML
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/filenames.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/filenames.d.ts
new file mode 100644
index 00000000..ebfcb09f
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/filenames.d.ts
@@ -0,0 +1,16 @@
+/**
+ * @fileoverview File name constants.
+ */
+// File names.
+export declare const PACKAGE_JSON = "package.json";
+export declare const TSCONFIG_JSON = "tsconfig.json";
+export declare const LICENSE = "LICENSE";
+export declare const LICENSE_MD = "LICENSE.md";
+export declare const LICENSE_ORIGINAL = "LICENSE.original";
+export declare const README_MD = "README.md";
+export declare const CHANGELOG_MD = "CHANGELOG.md";
+export declare const MANIFEST_JSON = "manifest.json";
+export declare const EXTENSIONS_JSON = "extensions.json";
+export declare const ESLINT_CONFIG_JS = "eslint.config.js";
+export declare const GITIGNORE = ".gitignore";
+export declare const DOT_PACKAGE_LOCK_JSON = ".package-lock.json";
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/filenames.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/filenames.js
new file mode 100644
index 00000000..9019b455
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/filenames.js
@@ -0,0 +1,62 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var filenames_exports = {};
+__export(filenames_exports, {
+  CHANGELOG_MD: () => CHANGELOG_MD,
+  DOT_PACKAGE_LOCK_JSON: () => DOT_PACKAGE_LOCK_JSON,
+  ESLINT_CONFIG_JS: () => ESLINT_CONFIG_JS,
+  EXTENSIONS_JSON: () => EXTENSIONS_JSON,
+  GITIGNORE: () => GITIGNORE,
+  LICENSE: () => LICENSE,
+  LICENSE_MD: () => LICENSE_MD,
+  LICENSE_ORIGINAL: () => LICENSE_ORIGINAL,
+  MANIFEST_JSON: () => MANIFEST_JSON,
+  PACKAGE_JSON: () => PACKAGE_JSON,
+  README_MD: () => README_MD,
+  TSCONFIG_JSON: () => TSCONFIG_JSON
+});
+module.exports = __toCommonJS(filenames_exports);
+const PACKAGE_JSON = "package.json";
+const TSCONFIG_JSON = "tsconfig.json";
+const LICENSE = "LICENSE";
+const LICENSE_MD = "LICENSE.md";
+const LICENSE_ORIGINAL = "LICENSE.original";
+const README_MD = "README.md";
+const CHANGELOG_MD = "CHANGELOG.md";
+const MANIFEST_JSON = "manifest.json";
+const EXTENSIONS_JSON = "extensions.json";
+const ESLINT_CONFIG_JS = "eslint.config.js";
+const GITIGNORE = ".gitignore";
+const DOT_PACKAGE_LOCK_JSON = ".package-lock.json";
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  CHANGELOG_MD,
+  DOT_PACKAGE_LOCK_JSON,
+  ESLINT_CONFIG_JS,
+  EXTENSIONS_JSON,
+  GITIGNORE,
+  LICENSE,
+  LICENSE_MD,
+  LICENSE_ORIGINAL,
+  MANIFEST_JSON,
+  PACKAGE_JSON,
+  README_MD,
+  TSCONFIG_JSON
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/globs.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/globs.d.ts
new file mode 100644
index 00000000..a02d3e31
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/globs.d.ts
@@ -0,0 +1,10 @@
+/**
+ * @fileoverview Glob pattern constants.
+ */
+// Glob patterns.
+export declare const LICENSE_GLOB = "LICEN[CS]E{[.-]*,}";
+export declare const LICENSE_GLOB_RECURSIVE = "**/LICEN[CS]E{[.-]*,}";
+export declare const LICENSE_ORIGINAL_GLOB = "*.original{.*,}";
+export declare const LICENSE_ORIGINAL_GLOB_RECURSIVE = "**/*.original{.*,}";
+export declare const README_GLOB = "README{.*,}";
+export declare const README_GLOB_RECURSIVE = "**/README{.*,}";
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/globs.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/globs.js
new file mode 100644
index 00000000..b0b6aa63
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/globs.js
@@ -0,0 +1,44 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var globs_exports = {};
+__export(globs_exports, {
+  LICENSE_GLOB: () => LICENSE_GLOB,
+  LICENSE_GLOB_RECURSIVE: () => LICENSE_GLOB_RECURSIVE,
+  LICENSE_ORIGINAL_GLOB: () => LICENSE_ORIGINAL_GLOB,
+  LICENSE_ORIGINAL_GLOB_RECURSIVE: () => LICENSE_ORIGINAL_GLOB_RECURSIVE,
+  README_GLOB: () => README_GLOB,
+  README_GLOB_RECURSIVE: () => README_GLOB_RECURSIVE
+});
+module.exports = __toCommonJS(globs_exports);
+const LICENSE_GLOB = "LICEN[CS]E{[.-]*,}";
+const LICENSE_GLOB_RECURSIVE = "**/LICEN[CS]E{[.-]*,}";
+const LICENSE_ORIGINAL_GLOB = "*.original{.*,}";
+const LICENSE_ORIGINAL_GLOB_RECURSIVE = "**/*.original{.*,}";
+const README_GLOB = "README{.*,}";
+const README_GLOB_RECURSIVE = "**/README{.*,}";
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  LICENSE_GLOB,
+  LICENSE_GLOB_RECURSIVE,
+  LICENSE_ORIGINAL_GLOB,
+  LICENSE_ORIGINAL_GLOB_RECURSIVE,
+  README_GLOB,
+  README_GLOB_RECURSIVE
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/normalize.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/normalize.d.ts
new file mode 100644
index 00000000..7567cfca
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/normalize.d.ts
@@ -0,0 +1,466 @@
+/**
+ * Check if a path contains node_modules directory.
+ *
+ * Detects whether a given path includes a `node_modules` directory segment.
+ * This is useful for identifying npm package dependencies and filtering
+ * dependency-related paths.
+ *
+ * The check matches `node_modules` appearing as a complete path segment,
+ * ensuring it is either at the start, end, or surrounded by path separators.
+ *
+ * @param {string | Buffer | URL} pathLike - The path to check
+ * @returns {boolean} `true` if the path contains `node_modules`, `false` otherwise
+ *
+ * @example
+ * ```typescript
+ * isNodeModules('/project/node_modules/package')    // true
+ * isNodeModules('node_modules/package/index.js')    // true
+ * isNodeModules('/src/my_node_modules_backup')      // false
+ * isNodeModules('/project/src/index.js')            // false
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isNodeModules(pathLike: string | Buffer | URL): boolean;
+/**
+ * Check if a path is absolute.
+ *
+ * An absolute path is one that specifies a location from the root of the file system.
+ * This function handles both POSIX and Windows path formats.
+ *
+ * POSIX absolute paths:
+ * - Start with forward slash '/'
+ * - Examples: '/home/user', '/usr/bin/node'
+ *
+ * Windows absolute paths (3 types):
+ * 1. Drive-letter paths: Start with drive letter + colon + separator
+ *    - Format: [A-Za-z]:[\\/]
+ *    - Examples: 'C:\Windows', 'D:/data', 'c:\Program Files'
+ *    - Reference: https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file#file-and-directory-names
+ *
+ * 2. UNC paths: Start with double backslash (handled by backslash check)
+ *    - Format: \\server\share
+ *    - Examples: '\\server\share\file', '\\?\C:\path'
+ *    - Reference: https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file#unc-names
+ *
+ * 3. Device paths: Start with backslash
+ *    - Examples: '\Windows', '\\.\device'
+ *    - Note: Single backslash paths are relative to current drive
+ *
+ * @param {string | Buffer | URL} pathLike - The path to check
+ * @returns {boolean} `true` if the path is absolute, `false` otherwise
+ *
+ * @example
+ * ```typescript
+ * // POSIX paths
+ * isAbsolute('/home/user')           // true
+ * isAbsolute('/usr/bin/node')        // true
+ *
+ * // Windows paths
+ * isAbsolute('C:\\Windows')          // true
+ * isAbsolute('D:/data')              // true
+ * isAbsolute('\\\\server\\share')    // true
+ *
+ * // Relative paths
+ * isAbsolute('../relative')          // false
+ * isAbsolute('relative/path')        // false
+ * isAbsolute('.')                    // false
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isAbsolute(pathLike: string | Buffer | URL): boolean;
+/**
+ * Check if a value is a valid file path (absolute or relative).
+ *
+ * Determines whether a given value represents a valid file system path.
+ * This function distinguishes between file paths and other string formats
+ * like package names, URLs, or bare module specifiers.
+ *
+ * Valid paths include:
+ * - Absolute paths (e.g., `/usr/bin`, `C:\Windows`)
+ * - Relative paths with separators (e.g., `./src`, `../lib`)
+ * - Special relative paths (`.`, `..`)
+ * - Paths starting with `@` that have subpaths (e.g., `@scope/name/file`)
+ *
+ * Not considered paths:
+ * - URLs with protocols (e.g., `http://`, `file://`, `git:`)
+ * - Bare package names (e.g., `lodash`, `react`)
+ * - Scoped package names without subpaths (e.g., `@scope/name`)
+ *
+ * @param {string | Buffer | URL} pathLike - The value to check
+ * @returns {boolean} `true` if the value is a valid file path, `false` otherwise
+ *
+ * @example
+ * ```typescript
+ * // Valid paths
+ * isPath('/absolute/path')           // true
+ * isPath('./relative/path')          // true
+ * isPath('../parent/dir')            // true
+ * isPath('.')                        // true
+ * isPath('..')                       // true
+ * isPath('@scope/name/subpath')      // true
+ * isPath('C:\\Windows')              // true (Windows)
+ *
+ * // Not paths
+ * isPath('lodash')                   // false - bare package name
+ * isPath('@scope/package')           // false - scoped package name
+ * isPath('http://example.com')       // false - URL
+ * isPath('file://path')              // false - file URL
+ * isPath('')                         // false - empty string
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isPath(pathLike: string | Buffer | URL): boolean;
+/**
+ * Check if a path is relative.
+ *
+ * Determines whether a given path is relative (i.e., not absolute). A path
+ * is considered relative if it does not specify a location from the root of
+ * the file system.
+ *
+ * Relative paths include:
+ * - Paths starting with `.` or `..` (e.g., `./src`, `../lib`)
+ * - Paths without leading separators (e.g., `src/file.js`)
+ * - Empty strings (treated as relative)
+ *
+ * @param {string | Buffer | URL} pathLike - The path to check
+ * @returns {boolean} `true` if the path is relative, `false` if absolute
+ *
+ * @example
+ * ```typescript
+ * // Relative paths
+ * isRelative('./src/index.js')       // true
+ * isRelative('../lib/util.js')       // true
+ * isRelative('src/file.js')          // true
+ * isRelative('')                     // true
+ *
+ * // Absolute paths
+ * isRelative('/home/user')           // false
+ * isRelative('C:\\Windows')          // false (Windows)
+ * isRelative('\\\\server\\share')    // false (Windows UNC)
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isRelative(pathLike: string | Buffer | URL): boolean;
+/**
+ * Check if a path uses MSYS/Git Bash Unix-style drive letter notation.
+ *
+ * Detects paths in the format `/c/...` where a single letter after the leading
+ * slash represents a Windows drive letter. These paths are produced by MSYS2,
+ * Git Bash, and `command -v` on Windows.
+ *
+ * Detection rules:
+ * - Must start with `/` followed by a single ASCII letter (a-z, A-Z)
+ * - The letter must be followed by `/` or be at the end of the string
+ * - Examples: `/c/tools/bin`, `/d/projects`, `/c`
+ * - Non-matches: `/tmp`, `/usr/local`, `C:/Windows`
+ *
+ * @param {string | Buffer | URL} pathLike - The path to check
+ * @returns {boolean} `true` if the path uses MSYS drive letter notation
+ *
+ * @example
+ * ```typescript
+ * // MSYS drive letter paths
+ * isUnixPath('/c/tools/bin')         // true
+ * isUnixPath('/d/projects/app')       // true
+ * isUnixPath('/c')                    // true
+ * isUnixPath('/C/Windows')            // true
+ *
+ * // Not MSYS drive paths
+ * isUnixPath('/tmp/build')            // false
+ * isUnixPath('/usr/local/bin')        // false
+ * isUnixPath('C:/Windows')            // false
+ * isUnixPath('./relative')            // false
+ * isUnixPath('')                      // false
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isUnixPath(pathLike: string | Buffer | URL): boolean;
+/**
+ * Convert Unix-style POSIX paths to native Windows paths.
+ *
+ * This is the inverse of {@link toUnixPath}. On Windows, MSYS-style paths use
+ * `/c/` notation for drive letters and forward slashes, which PowerShell and
+ * cmd.exe cannot resolve. This function converts them to native Windows format
+ * with backslashes and proper drive letters.
+ *
+ * Conversion rules:
+ * - On Windows: Converts drive notation and separators to native format
+ *   - `/c/path/to/file` becomes `C:\path\to\file`
+ *   - `/d/projects/app` becomes `D:\projects\app`
+ *   - Forward slashes become backslashes
+ *   - Drive letters are always uppercase in the output
+ * - On Unix: Returns the normalized path unchanged (forward slashes preserved)
+ *
+ * @param {string | Buffer | URL} pathLike - The MSYS/Unix-style path to convert
+ * @returns {string} Native Windows path (e.g., `C:\path\to\file`) or normalized Unix path
+ *
+ * @example
+ * ```typescript
+ * // MSYS drive letter paths (Windows)
+ * fromUnixPath('/c/projects/app/file.txt')    // 'C:\\projects\\app\\file.txt'
+ * fromUnixPath('/d/projects/foo/bar')         // 'D:\\projects\\foo\\bar'
+ * fromUnixPath('/c')                          // 'C:\\'
+ *
+ * // Forward-slash paths (Windows)
+ * fromUnixPath('C:/Windows/System32')         // 'C:\\Windows\\System32'
+ *
+ * // Unix (unchanged, forward slashes preserved)
+ * fromUnixPath('/tmp/build/output')           // '/tmp/build/output'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function fromUnixPath(pathLike: string | Buffer | URL): string;
+/**
+ * Normalize a path by converting backslashes to forward slashes and collapsing segments.
+ *
+ * This function performs several normalization operations:
+ * - Converts all backslashes (`\`) to forward slashes (`/`)
+ * - Collapses repeated slashes into single slashes
+ * - Resolves `.` (current directory) segments
+ * - Resolves `..` (parent directory) segments
+ * - Preserves UNC path prefixes (`//server/share`)
+ * - Preserves Windows namespace prefixes (`//./`, `//?/`)
+ * - Returns `.` for empty or collapsed paths
+ *
+ * Special handling:
+ * - MSYS drive letters (Windows only): `/c/path` becomes `C:/path`
+ * - UNC paths: Maintains double leading slashes for `//server/share` format
+ * - Windows namespaces: Preserves `//./` and `//?/` prefixes
+ * - Leading `..` segments: Preserved in relative paths without prefix
+ * - Trailing components: Properly handled when resolving `..`
+ *
+ * @param {string | Buffer | URL} pathLike - The path to normalize
+ * @returns {string} The normalized path with forward slashes and collapsed segments
+ *
+ * @security
+ * **WARNING**: This function resolves `..` patterns as part of normalization, which means
+ * paths like `/../etc/passwd` become `/etc/passwd`. When processing untrusted user input
+ * (HTTP requests, file uploads, URL parameters), you MUST validate for path traversal
+ * attacks BEFORE calling this function. Check for patterns like `..`, `%2e%2e`, `\..`,
+ * and other traversal encodings first.
+ *
+ * @example
+ * ```typescript
+ * // Basic normalization
+ * normalizePath('foo/bar//baz')              // 'foo/bar/baz'
+ * normalizePath('foo/./bar')                 // 'foo/bar'
+ * normalizePath('foo/bar/../baz')            // 'foo/baz'
+ *
+ * // Windows paths
+ * normalizePath('C:\\Users\\username\\file.txt') // 'C:/Users/username/file.txt'
+ * normalizePath('foo\\bar\\baz')                 // 'foo/bar/baz'
+ *
+ * // MSYS drive letters (Windows only)
+ * normalizePath('/c/projects/app')              // 'C:/projects/app' (on Windows)
+ * normalizePath('/d/tools/bin')                 // 'D:/tools/bin' (on Windows)
+ *
+ * // UNC paths
+ * normalizePath('\\\\server\\share\\file')   // '//server/share/file'
+ *
+ * // Edge cases
+ * normalizePath('')                          // '.'
+ * normalizePath('.')                         // '.'
+ * normalizePath('..')                        // '..'
+ * normalizePath('///foo///bar///')           // '/foo/bar'
+ * normalizePath('foo/../..')                 // '..'
+ *
+ * // Security: Path traversal is resolved (intended behavior for trusted paths)
+ * normalizePath('/../etc/passwd')            // '/etc/passwd' ⚠️
+ * normalizePath('/safe/../../unsafe')        // '/unsafe' ⚠️
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function normalizePath(pathLike: string | Buffer | URL): string;
+/**
+ * Convert a path-like value to a string.
+ *
+ * Converts various path-like types (string, Buffer, URL) into a normalized
+ * string representation. This function handles different input formats and
+ * provides consistent string output for path operations.
+ *
+ * Supported input types:
+ * - `string`: Returned as-is
+ * - `Buffer`: Decoded as UTF-8 string
+ * - `URL`: Converted using `fileURLToPath()`, with fallback for malformed URLs
+ * - `null` / `undefined`: Returns empty string
+ *
+ * URL handling:
+ * - Valid file URLs are converted via `url.fileURLToPath()`
+ * - Malformed URLs fall back to pathname extraction with decoding
+ * - Windows drive letters in URLs are handled specially
+ * - Percent-encoded characters are decoded (e.g., `%20` becomes space)
+ *
+ * @param {string | Buffer | URL | null | undefined} pathLike - The path-like value to convert
+ * @returns {string} The string representation of the path, or empty string for null/undefined
+ *
+ * @example
+ * ```typescript
+ * // String input
+ * pathLikeToString('/home/user')                        // '/home/user'
+ *
+ * // Buffer input
+ * pathLikeToString(Buffer.from('/tmp/file'))            // '/tmp/file'
+ *
+ * // URL input
+ * pathLikeToString(new URL('file:///home/user'))        // '/home/user'
+ * pathLikeToString(new URL('file:///C:/Windows'))       // 'C:/Windows' (Windows)
+ *
+ * // Null/undefined input
+ * pathLikeToString(null)                                // ''
+ * pathLikeToString(undefined)                           // ''
+ *
+ * // Percent-encoded URLs
+ * pathLikeToString(new URL('file:///path%20with%20spaces'))  // '/path with spaces'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function pathLikeToString(pathLike: string | Buffer | URL | null | undefined): string;
+/**
+ * Split a path into an array of segments.
+ *
+ * Divides a path into individual components by splitting on path separators
+ * (both forward slashes and backslashes). This is useful for path traversal,
+ * analysis, and manipulation.
+ *
+ * The function handles:
+ * - Forward slashes (`/`) on all platforms
+ * - Backslashes (`\`) on Windows
+ * - Mixed separators in a single path
+ * - Empty paths (returns empty array)
+ *
+ * Note: The resulting array may contain empty strings if the path has leading,
+ * trailing, or consecutive separators (e.g., `/foo//bar/` becomes `['', 'foo', '', 'bar', '']`).
+ *
+ * @param {string | Buffer | URL} pathLike - The path to split
+ * @returns {string[]} Array of path segments, or empty array for empty paths
+ *
+ * @example
+ * ```typescript
+ * // POSIX paths
+ * splitPath('/home/user/file.txt')      // ['', 'home', 'user', 'file.txt']
+ * splitPath('src/lib/util.js')          // ['src', 'lib', 'util.js']
+ *
+ * // Windows paths
+ * splitPath('C:\\Users\\John')          // ['C:', 'Users', 'John']
+ * splitPath('folder\\file.txt')         // ['folder', 'file.txt']
+ *
+ * // Mixed separators
+ * splitPath('path/to\\file')            // ['path', 'to', 'file']
+ *
+ * // Edge cases
+ * splitPath('')                         // []
+ * splitPath('/')                        // ['', '']
+ * splitPath('/foo//bar/')               // ['', 'foo', '', 'bar', '']
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function splitPath(pathLike: string | Buffer | URL): string[];
+/**
+ * Remove leading ./ or ../ from a path.
+ *
+ * Strips the `./` or `.\` prefix from relative paths. This is useful for
+ * normalizing paths when the current directory reference is implicit or
+ * unwanted.
+ *
+ * Note: This function only removes a single leading `./` or `.\`. It does
+ * not remove `../` prefixes or process the rest of the path.
+ *
+ * @param {string | Buffer | URL} pathLike - The path to process
+ * @returns {string} The path without leading `./` or `.\`, or unchanged if no such prefix
+ *
+ * @example
+ * ```typescript
+ * // Remove ./ prefix
+ * trimLeadingDotSlash('./src/index.js')     // 'src/index.js'
+ * trimLeadingDotSlash('.\\src\\file.txt')   // 'src\\file.txt'
+ *
+ * // Preserve ../ prefix
+ * trimLeadingDotSlash('../lib/util.js')     // '../lib/util.js'
+ *
+ * // No change for other paths
+ * trimLeadingDotSlash('/absolute/path')     // '/absolute/path'
+ * trimLeadingDotSlash('relative/path')      // 'relative/path'
+ * trimLeadingDotSlash('.')                  // '.'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function trimLeadingDotSlash(pathLike: string | Buffer | URL): string;
+/**
+ * Get the relative path from one path to another.
+ *
+ * Computes the relative path from `from` to `to` and normalizes the result.
+ * This is a convenience wrapper around the `relative()` function that adds
+ * path normalization (converting separators and collapsing segments).
+ *
+ * The function:
+ * 1. Calculates the relative path using `relative()`
+ * 2. Normalizes the result using `normalizePath()`
+ * 3. Preserves empty strings (same path) without converting to `.`
+ *
+ * @param {string} from - The source path (starting point)
+ * @param {string} to - The destination path (target)
+ * @returns {string} The normalized relative path from `from` to `to`, or empty string if paths are identical
+ *
+ * @example
+ * ```typescript
+ * // Basic usage
+ * relativeResolve('/foo/bar', '/foo/baz')         // '../baz'
+ * relativeResolve('/foo/bar/baz', '/foo')         // '../..'
+ * relativeResolve('/foo', '/foo/bar')             // 'bar'
+ *
+ * // Same paths
+ * relativeResolve('/foo/bar', '/foo/bar')         // ''
+ *
+ * // Windows paths (normalized)
+ * relativeResolve('C:\\foo\\bar', 'C:\\foo\\baz') // '../baz'
+ *
+ * // With normalization
+ * relativeResolve('/foo/./bar', '/foo/baz')       // '../baz'
+ * relativeResolve('/foo/bar/../baz', '/foo/qux')  // '../qux'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function relativeResolve(from: string, to: string): string;
+/**
+ * Convert Windows paths to MSYS/Unix-style POSIX paths for Git Bash tools.
+ *
+ * Git for Windows and MSYS2 tools (like tar, git, etc.) expect POSIX-style
+ * paths with forward slashes and Unix drive letter notation (/c/ instead of C:\).
+ * This function handles the conversion for cross-platform compatibility.
+ *
+ * This is the inverse of {@link fromUnixPath}.
+ *
+ * Conversion rules:
+ * - On Windows: Normalizes separators and converts drive letters
+ *   - `C:\path\to\file` becomes `/c/path/to/file`
+ *   - `D:/projects/app` becomes `/d/projects/app`
+ *   - Drive letters are always lowercase in the output
+ * - On Unix: Returns the path unchanged (passes through normalization)
+ *
+ * This is particularly important for:
+ * - MSYS2/Git Bash tools that interpret `D:\` as a remote hostname
+ * - Cross-platform build scripts using tar, git archive, etc.
+ * - CI/CD environments where Git for Windows is used
+ *
+ * @param {string | Buffer | URL} pathLike - The path to convert
+ * @returns {string} Unix-style POSIX path (e.g., `/c/path/to/file`)
+ *
+ * @example
+ * ```typescript
+ * // Windows drive letter paths
+ * toUnixPath('C:\\path\\to\\file.txt')     // '/c/path/to/file.txt'
+ * toUnixPath('D:/projects/foo/bar')        // '/d/projects/foo/bar'
+ *
+ * // Already forward slashes (still converts drive letter)
+ * toUnixPath('C:/Windows/System32')        // '/c/Windows/System32'
+ *
+ * // Unix paths (unchanged on Unix platforms)
+ * toUnixPath('/home/user/file')            // '/home/user/file'
+ * toUnixPath('/var/log/app.log')           // '/var/log/app.log'
+ *
+ * // UNC paths (Windows network shares)
+ * toUnixPath('\\\\server\\share\\file')    // '//server/share/file'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function toUnixPath(pathLike: string | Buffer | URL): string;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/normalize.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/normalize.js
new file mode 100644
index 00000000..40d51ba1
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/normalize.js
@@ -0,0 +1,488 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var normalize_exports = {};
+__export(normalize_exports, {
+  fromUnixPath: () => fromUnixPath,
+  isAbsolute: () => isAbsolute,
+  isNodeModules: () => isNodeModules,
+  isPath: () => isPath,
+  isRelative: () => isRelative,
+  isUnixPath: () => isUnixPath,
+  normalizePath: () => normalizePath,
+  pathLikeToString: () => pathLikeToString,
+  relativeResolve: () => relativeResolve,
+  splitPath: () => splitPath,
+  toUnixPath: () => toUnixPath,
+  trimLeadingDotSlash: () => trimLeadingDotSlash
+});
+module.exports = __toCommonJS(normalize_exports);
+var import_platform = require("../constants/platform");
+var import_strings = require("../strings");
+const CHAR_BACKWARD_SLASH = 92;
+const CHAR_COLON = 58;
+const CHAR_FORWARD_SLASH = 47;
+const CHAR_LOWERCASE_A = 97;
+const CHAR_LOWERCASE_Z = 122;
+const CHAR_UPPERCASE_A = 65;
+const CHAR_UPPERCASE_Z = 90;
+const msysDriveRegExp = /^\/([a-zA-Z])(\/|$)/;
+const slashRegExp = /[/\\]/;
+const nodeModulesPathRegExp = /(?:^|[/\\])node_modules(?:[/\\]|$)/;
+// @__NO_SIDE_EFFECTS__
+function isPathSeparator(code) {
+  return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
+}
+// @__NO_SIDE_EFFECTS__
+function isWindowsDeviceRoot(code) {
+  return code >= CHAR_UPPERCASE_A && code <= CHAR_UPPERCASE_Z || code >= CHAR_LOWERCASE_A && code <= CHAR_LOWERCASE_Z;
+}
+let _buffer;
+// @__NO_SIDE_EFFECTS__
+function getBuffer() {
+  if (_buffer === void 0) {
+    _buffer = require("buffer");
+  }
+  return _buffer;
+}
+let _url;
+// @__NO_SIDE_EFFECTS__
+function getUrl() {
+  if (_url === void 0) {
+    _url = require("url");
+  }
+  return _url;
+}
+function msysDriveToNative(normalized) {
+  if (import_platform.WIN32) {
+    return normalized.replace(
+      msysDriveRegExp,
+      (_, letter, sep) => `${letter.toUpperCase()}:${sep || "/"}`
+    );
+  }
+  return normalized;
+}
+// @__NO_SIDE_EFFECTS__
+function isNodeModules(pathLike) {
+  const filepath = /* @__PURE__ */ pathLikeToString(pathLike);
+  return nodeModulesPathRegExp.test(filepath);
+}
+// @__NO_SIDE_EFFECTS__
+function isAbsolute(pathLike) {
+  const filepath = /* @__PURE__ */ pathLikeToString(pathLike);
+  const { length } = filepath;
+  if (length === 0) {
+    return false;
+  }
+  const code = filepath.charCodeAt(0);
+  if (code === CHAR_FORWARD_SLASH) {
+    return true;
+  }
+  if (code === CHAR_BACKWARD_SLASH) {
+    return true;
+  }
+  if (import_platform.WIN32 && length > 2) {
+    if (/* @__PURE__ */ isWindowsDeviceRoot(code) && filepath.charCodeAt(1) === CHAR_COLON && /* @__PURE__ */ isPathSeparator(filepath.charCodeAt(2))) {
+      return true;
+    }
+  }
+  return false;
+}
+// @__NO_SIDE_EFFECTS__
+function isPath(pathLike) {
+  const filepath = /* @__PURE__ */ pathLikeToString(pathLike);
+  if (typeof filepath !== "string" || filepath.length === 0) {
+    return false;
+  }
+  if (/^[a-z][a-z0-9+.-]+:/i.test(filepath)) {
+    return false;
+  }
+  if (filepath === "." || filepath === "..") {
+    return true;
+  }
+  if (/* @__PURE__ */ isAbsolute(filepath)) {
+    return true;
+  }
+  if (filepath.includes("/") || filepath.includes("\\")) {
+    if (filepath.startsWith("@") && !filepath.startsWith("@/")) {
+      const parts = filepath.split("/");
+      if (parts.length <= 2 && !parts[1]?.includes("\\")) {
+        return false;
+      }
+    }
+    return true;
+  }
+  return false;
+}
+// @__NO_SIDE_EFFECTS__
+function isRelative(pathLike) {
+  const filepath = /* @__PURE__ */ pathLikeToString(pathLike);
+  if (typeof filepath !== "string") {
+    return false;
+  }
+  if (filepath.length === 0) {
+    return true;
+  }
+  return !/* @__PURE__ */ isAbsolute(filepath);
+}
+// @__NO_SIDE_EFFECTS__
+function isUnixPath(pathLike) {
+  const filepath = /* @__PURE__ */ pathLikeToString(pathLike);
+  return typeof filepath === "string" && msysDriveRegExp.test(filepath);
+}
+// @__NO_SIDE_EFFECTS__
+function fromUnixPath(pathLike) {
+  const normalized = /* @__PURE__ */ normalizePath(pathLike);
+  if (import_platform.WIN32) {
+    return normalized.replace(/\//g, "\\");
+  }
+  return normalized;
+}
+// @__NO_SIDE_EFFECTS__
+function normalizePath(pathLike) {
+  const filepath = /* @__PURE__ */ pathLikeToString(pathLike);
+  const { length } = filepath;
+  if (length === 0) {
+    return ".";
+  }
+  if (length < 2) {
+    return length === 1 && filepath.charCodeAt(0) === 92 ? "/" : filepath;
+  }
+  let code = 0;
+  let start = 0;
+  let prefix = "";
+  if (length > 4 && filepath.charCodeAt(3) === 92) {
+    const code2 = filepath.charCodeAt(2);
+    if ((code2 === 63 || code2 === 46) && filepath.charCodeAt(0) === 92 && filepath.charCodeAt(1) === 92) {
+      start = 2;
+      prefix = "//";
+    }
+  }
+  if (start === 0) {
+    if (length > 2 && (filepath.charCodeAt(0) === 92 && filepath.charCodeAt(1) === 92 && filepath.charCodeAt(2) !== 92 || filepath.charCodeAt(0) === 47 && filepath.charCodeAt(1) === 47 && filepath.charCodeAt(2) !== 47)) {
+      let firstSegmentEnd = -1;
+      let hasSecondSegment = false;
+      let i = 2;
+      while (i < length && (filepath.charCodeAt(i) === 47 || filepath.charCodeAt(i) === 92)) {
+        i++;
+      }
+      while (i < length) {
+        const char = filepath.charCodeAt(i);
+        if (char === 47 || char === 92) {
+          firstSegmentEnd = i;
+          break;
+        }
+        i++;
+      }
+      if (firstSegmentEnd > 2) {
+        i = firstSegmentEnd;
+        while (i < length && (filepath.charCodeAt(i) === 47 || filepath.charCodeAt(i) === 92)) {
+          i++;
+        }
+        if (i < length) {
+          hasSecondSegment = true;
+        }
+      }
+      if (firstSegmentEnd > 2 && hasSecondSegment) {
+        start = 2;
+        prefix = "//";
+      } else {
+        code = filepath.charCodeAt(start);
+        while (code === 47 || code === 92) {
+          start += 1;
+          code = filepath.charCodeAt(start);
+        }
+        if (start) {
+          prefix = "/";
+        }
+      }
+    } else {
+      code = filepath.charCodeAt(start);
+      while (code === 47 || code === 92) {
+        start += 1;
+        code = filepath.charCodeAt(start);
+      }
+      if (start) {
+        prefix = "/";
+      }
+    }
+  }
+  let nextIndex = (0, import_strings.search)(filepath, slashRegExp, { fromIndex: start });
+  if (nextIndex === -1) {
+    const segment = filepath.slice(start);
+    if (segment === "." || segment.length === 0) {
+      return prefix || ".";
+    }
+    if (segment === "..") {
+      return prefix ? prefix.slice(0, -1) || "/" : "..";
+    }
+    return msysDriveToNative(prefix + segment);
+  }
+  let collapsed = "";
+  let segmentCount = 0;
+  let leadingDotDots = 0;
+  while (nextIndex !== -1) {
+    const segment = filepath.slice(start, nextIndex);
+    if (segment.length > 0 && segment !== ".") {
+      if (segment === "..") {
+        if (segmentCount > 0) {
+          const lastSeparatorIndex = collapsed.lastIndexOf("/");
+          if (lastSeparatorIndex === -1) {
+            collapsed = "";
+            segmentCount = 0;
+            if (leadingDotDots > 0 && !prefix) {
+              collapsed = "..";
+              leadingDotDots = 1;
+            }
+          } else {
+            const lastSegmentStart = lastSeparatorIndex + 1;
+            const lastSegmentValue = collapsed.slice(lastSegmentStart);
+            if (lastSegmentValue === "..") {
+              collapsed = `${collapsed}/${segment}`;
+              leadingDotDots += 1;
+            } else {
+              collapsed = collapsed.slice(0, lastSeparatorIndex);
+              segmentCount -= 1;
+            }
+          }
+        } else if (!prefix) {
+          collapsed = collapsed + (collapsed.length === 0 ? "" : "/") + segment;
+          leadingDotDots += 1;
+        }
+      } else {
+        collapsed = collapsed + (collapsed.length === 0 ? "" : "/") + segment;
+        segmentCount += 1;
+      }
+    }
+    start = nextIndex + 1;
+    code = filepath.charCodeAt(start);
+    while (code === 47 || code === 92) {
+      start += 1;
+      code = filepath.charCodeAt(start);
+    }
+    nextIndex = (0, import_strings.search)(filepath, slashRegExp, { fromIndex: start });
+  }
+  const lastSegment = filepath.slice(start);
+  if (lastSegment.length > 0 && lastSegment !== ".") {
+    if (lastSegment === "..") {
+      if (segmentCount > 0) {
+        const lastSeparatorIndex = collapsed.lastIndexOf("/");
+        if (lastSeparatorIndex === -1) {
+          collapsed = "";
+          segmentCount = 0;
+          if (leadingDotDots > 0 && !prefix) {
+            collapsed = "..";
+            leadingDotDots = 1;
+          }
+        } else {
+          const lastSegmentStart = lastSeparatorIndex + 1;
+          const lastSegmentValue = collapsed.slice(lastSegmentStart);
+          if (lastSegmentValue === "..") {
+            collapsed = `${collapsed}/${lastSegment}`;
+            leadingDotDots += 1;
+          } else {
+            collapsed = collapsed.slice(0, lastSeparatorIndex);
+            segmentCount -= 1;
+          }
+        }
+      } else if (!prefix) {
+        collapsed = collapsed + (collapsed.length === 0 ? "" : "/") + lastSegment;
+        leadingDotDots += 1;
+      }
+    } else {
+      collapsed = collapsed + (collapsed.length === 0 ? "" : "/") + lastSegment;
+      segmentCount += 1;
+    }
+  }
+  if (collapsed.length === 0) {
+    return prefix || ".";
+  }
+  return msysDriveToNative(prefix + collapsed);
+}
+// @__NO_SIDE_EFFECTS__
+function pathLikeToString(pathLike) {
+  if (pathLike === null || pathLike === void 0) {
+    return "";
+  }
+  if (typeof pathLike === "string") {
+    return pathLike;
+  }
+  const { Buffer: Buffer2 } = /* @__PURE__ */ getBuffer();
+  if (Buffer2.isBuffer(pathLike)) {
+    return pathLike.toString("utf8");
+  }
+  const url = /* @__PURE__ */ getUrl();
+  if (pathLike instanceof URL) {
+    try {
+      return url.fileURLToPath(pathLike);
+    } catch {
+      const pathname = pathLike.pathname;
+      const decodedPathname = decodeURIComponent(pathname);
+      if (import_platform.WIN32 && decodedPathname.startsWith("/")) {
+        const letter = decodedPathname.charCodeAt(1) | 32;
+        const hasValidDriveLetter = decodedPathname.length >= 3 && letter >= 97 && // 'a' to 'z'
+        letter <= 122 && decodedPathname.charAt(2) === ":";
+        if (!hasValidDriveLetter) {
+          return decodedPathname;
+        }
+      }
+      return decodedPathname;
+    }
+  }
+  return String(pathLike);
+}
+// @__NO_SIDE_EFFECTS__
+function splitPath(pathLike) {
+  const filepath = /* @__PURE__ */ pathLikeToString(pathLike);
+  if (filepath === "") {
+    return [];
+  }
+  return filepath.split(slashRegExp);
+}
+// @__NO_SIDE_EFFECTS__
+function trimLeadingDotSlash(pathLike) {
+  const filepath = /* @__PURE__ */ pathLikeToString(pathLike);
+  if (filepath.startsWith("./") || filepath.startsWith(".\\")) {
+    return filepath.slice(2);
+  }
+  return filepath;
+}
+// @__NO_SIDE_EFFECTS__
+function resolve(...segments) {
+  let resolvedPath = "";
+  let resolvedAbsolute = false;
+  for (let i = segments.length - 1; i >= 0 && !resolvedAbsolute; i -= 1) {
+    const segment = segments[i];
+    if (typeof segment !== "string" || segment.length === 0) {
+      continue;
+    }
+    resolvedPath = segment + (resolvedPath.length === 0 ? "" : `/${resolvedPath}`);
+    resolvedAbsolute = /* @__PURE__ */ isAbsolute(segment);
+  }
+  if (!resolvedAbsolute) {
+    const cwd = /* @__PURE__ */ require("process").cwd();
+    resolvedPath = cwd + (resolvedPath.length === 0 ? "" : `/${resolvedPath}`);
+  }
+  return /* @__PURE__ */ normalizePath(resolvedPath);
+}
+// @__NO_SIDE_EFFECTS__
+function relative(from, to) {
+  if (from === to) {
+    return "";
+  }
+  const actualFrom = /* @__PURE__ */ resolve(from);
+  const actualTo = /* @__PURE__ */ resolve(to);
+  if (actualFrom === actualTo) {
+    return "";
+  }
+  if (import_platform.WIN32) {
+    const fromLower = actualFrom.toLowerCase();
+    const toLower = actualTo.toLowerCase();
+    if (fromLower === toLower) {
+      return "";
+    }
+  }
+  const fromStart = 1;
+  const fromEnd = actualFrom.length;
+  const fromLen = fromEnd - fromStart;
+  const toStart = 1;
+  const toEnd = actualTo.length;
+  const toLen = toEnd - toStart;
+  const length = fromLen < toLen ? fromLen : toLen;
+  let lastCommonSep = -1;
+  let i = 0;
+  for (; i < length; i += 1) {
+    let fromCode = actualFrom.charCodeAt(fromStart + i);
+    let toCode = actualTo.charCodeAt(toStart + i);
+    if (import_platform.WIN32) {
+      if (fromCode >= CHAR_UPPERCASE_A && fromCode <= CHAR_UPPERCASE_Z) {
+        fromCode += 32;
+      }
+      if (toCode >= CHAR_UPPERCASE_A && toCode <= CHAR_UPPERCASE_Z) {
+        toCode += 32;
+      }
+    }
+    if (fromCode !== toCode) {
+      break;
+    }
+    if (/* @__PURE__ */ isPathSeparator(actualFrom.charCodeAt(fromStart + i))) {
+      lastCommonSep = i;
+    }
+  }
+  if (i === length) {
+    if (toLen > length) {
+      const toCode = actualTo.charCodeAt(toStart + i);
+      if (/* @__PURE__ */ isPathSeparator(toCode)) {
+        return actualTo.slice(toStart + i + 1);
+      }
+      if (i === 0) {
+        return actualTo.slice(toStart + i);
+      }
+    } else if (fromLen > length) {
+      const fromCode = actualFrom.charCodeAt(fromStart + i);
+      if (/* @__PURE__ */ isPathSeparator(fromCode)) {
+        lastCommonSep = i;
+      } else if (i === 0) {
+        lastCommonSep = 0;
+      }
+    }
+  }
+  let out = "";
+  for (i = fromStart + lastCommonSep + 1; i <= fromEnd; i += 1) {
+    const code = actualFrom.charCodeAt(i);
+    if (i === fromEnd || /* @__PURE__ */ isPathSeparator(code)) {
+      out += out.length === 0 ? ".." : "/..";
+    }
+  }
+  return out + actualTo.slice(toStart + lastCommonSep);
+}
+// @__NO_SIDE_EFFECTS__
+function relativeResolve(from, to) {
+  const rel = /* @__PURE__ */ relative(from, to);
+  if (rel === "") {
+    return "";
+  }
+  return /* @__PURE__ */ normalizePath(rel);
+}
+// @__NO_SIDE_EFFECTS__
+function toUnixPath(pathLike) {
+  const normalized = /* @__PURE__ */ normalizePath(pathLike);
+  if (import_platform.WIN32) {
+    return normalized.replace(
+      /^([A-Z]):/i,
+      (_, letter) => `/${letter.toLowerCase()}`
+    );
+  }
+  return normalized;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  fromUnixPath,
+  isAbsolute,
+  isNodeModules,
+  isPath,
+  isRelative,
+  isUnixPath,
+  normalizePath,
+  pathLikeToString,
+  relativeResolve,
+  splitPath,
+  toUnixPath,
+  trimLeadingDotSlash
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/packages.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/packages.d.ts
new file mode 100644
index 00000000..718ed50e
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/packages.d.ts
@@ -0,0 +1,10 @@
+/**
+ * Resolve directory path from a package.json file path.
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function resolvePackageJsonDirname(filepath: string): string;
+/**
+ * Resolve full path to package.json from a directory or file path.
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function resolvePackageJsonPath(filepath: string): string;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/packages.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/packages.js
new file mode 100644
index 00000000..4adb12be
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/packages.js
@@ -0,0 +1,55 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var packages_exports = {};
+__export(packages_exports, {
+  resolvePackageJsonDirname: () => resolvePackageJsonDirname,
+  resolvePackageJsonPath: () => resolvePackageJsonPath
+});
+module.exports = __toCommonJS(packages_exports);
+var import_normalize = require("./normalize");
+let _path;
+// @__NO_SIDE_EFFECTS__
+function getPath() {
+  if (_path === void 0) {
+    _path = require("path");
+  }
+  return _path;
+}
+// @__NO_SIDE_EFFECTS__
+function resolvePackageJsonDirname(filepath) {
+  if (filepath.endsWith("package.json")) {
+    const path = /* @__PURE__ */ getPath();
+    return (0, import_normalize.normalizePath)(path.dirname(filepath));
+  }
+  return (0, import_normalize.normalizePath)(filepath);
+}
+// @__NO_SIDE_EFFECTS__
+function resolvePackageJsonPath(filepath) {
+  if (filepath.endsWith("package.json")) {
+    return (0, import_normalize.normalizePath)(filepath);
+  }
+  const path = /* @__PURE__ */ getPath();
+  return (0, import_normalize.normalizePath)(path.join(filepath, "package.json"));
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  resolvePackageJsonDirname,
+  resolvePackageJsonPath
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/rewire.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/rewire.d.ts
new file mode 100644
index 00000000..6052143e
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/rewire.d.ts
@@ -0,0 +1,71 @@
+/**
+ * Clear a specific path override.
+ */
+export declare function clearPath(key: string): void;
+/**
+ * Get a path value, checking overrides first.
+ *
+ * Resolution order:
+ * 1. Test overrides (set via setPath in beforeEach)
+ * 2. Cached value (for performance)
+ * 3. Original function call (cached for subsequent calls)
+ *
+ * @internal Used by path getters to support test rewiring
+ */
+export declare function getPathValue(key: string, originalFn: () => string): string;
+/**
+ * Check if a path has been overridden.
+ */
+export declare function hasOverride(key: string): boolean;
+/**
+ * Invalidate all cached paths.
+ * Called automatically when setPath/clearPath/resetPaths are used.
+ * Can also be called manually for advanced testing scenarios.
+ *
+ * @internal Primarily for internal use, but exported for advanced testing
+ */
+export declare function invalidateCaches(): void;
+/**
+ * Register a cache invalidation callback.
+ * Called by modules that need to clear their caches when paths change.
+ *
+ * @internal Used by paths.ts and fs.ts
+ */
+export declare function registerCacheInvalidation(callback: () => void): void;
+/**
+ * Clear all path overrides and reset caches.
+ * Useful in afterEach hooks to ensure clean test state.
+ *
+ * @example
+ * ```typescript
+ * import { resetPaths } from '#paths/rewire'
+ *
+ * afterEach(() => {
+ *   resetPaths()
+ * })
+ * ```
+ */
+export declare function resetPaths(): void;
+/**
+ * Set a path override for testing.
+ * This triggers cache invalidation for path-dependent modules.
+ *
+ * @example
+ * ```typescript
+ * import { setPath, resetPaths } from '#paths/rewire'
+ * import { getOsTmpDir } from './'
+ *
+ * beforeEach(() => {
+ *   setPath('tmpdir', '/custom/tmp')
+ * })
+ *
+ * afterEach(() => {
+ *   resetPaths()
+ * })
+ *
+ * it('should use custom temp directory', () => {
+ *   expect(getOsTmpDir()).toBe('/custom/tmp')
+ * })
+ * ```
+ */
+export declare function setPath(key: string, value: string | undefined): void;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/rewire.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/rewire.js
new file mode 100644
index 00000000..d54558bb
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/rewire.js
@@ -0,0 +1,90 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var rewire_exports = {};
+__export(rewire_exports, {
+  clearPath: () => clearPath,
+  getPathValue: () => getPathValue,
+  hasOverride: () => hasOverride,
+  invalidateCaches: () => invalidateCaches,
+  registerCacheInvalidation: () => registerCacheInvalidation,
+  resetPaths: () => resetPaths,
+  setPath: () => setPath
+});
+module.exports = __toCommonJS(rewire_exports);
+const stateSymbol = Symbol.for("@socketsecurity/lib/paths/rewire/state");
+if (!globalThis[stateSymbol]) {
+  globalThis[stateSymbol] = {
+    testOverrides: /* @__PURE__ */ new Map(),
+    valueCache: /* @__PURE__ */ new Map(),
+    cacheInvalidationCallbacks: []
+  };
+}
+const sharedState = globalThis[stateSymbol];
+const testOverrides = sharedState.testOverrides;
+const valueCache = sharedState.valueCache;
+const cacheInvalidationCallbacks = sharedState.cacheInvalidationCallbacks;
+function clearPath(key) {
+  testOverrides.delete(key);
+  invalidateCaches();
+}
+function getPathValue(key, originalFn) {
+  if (testOverrides.has(key)) {
+    return testOverrides.get(key);
+  }
+  if (valueCache.has(key)) {
+    return valueCache.get(key);
+  }
+  const value = originalFn();
+  valueCache.set(key, value);
+  return value;
+}
+function hasOverride(key) {
+  return testOverrides.has(key);
+}
+function invalidateCaches() {
+  valueCache.clear();
+  for (const callback of cacheInvalidationCallbacks) {
+    try {
+      callback();
+    } catch {
+    }
+  }
+}
+function registerCacheInvalidation(callback) {
+  cacheInvalidationCallbacks.push(callback);
+}
+function resetPaths() {
+  testOverrides.clear();
+  invalidateCaches();
+}
+function setPath(key, value) {
+  testOverrides.set(key, value);
+  invalidateCaches();
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  clearPath,
+  getPathValue,
+  hasOverride,
+  invalidateCaches,
+  registerCacheInvalidation,
+  resetPaths,
+  setPath
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/socket.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/socket.d.ts
new file mode 100644
index 00000000..16ee9ba2
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/socket.d.ts
@@ -0,0 +1,87 @@
+/**
+ * Get the OS home directory.
+ * Can be overridden in tests using setPath('homedir', ...) from paths/rewire.
+ */
+export declare function getOsHomeDir(): string;
+/**
+ * Get the OS temporary directory.
+ * Can be overridden in tests using setPath('tmpdir', ...) from paths/rewire.
+ */
+export declare function getOsTmpDir(): string;
+/**
+ * Get the Socket home directory (~/.socket).
+ * Alias for getSocketUserDir() for consistency across Socket projects.
+ */
+export declare function getSocketHomePath(): string;
+/**
+ * Get the Socket user directory (~/.socket).
+ * Can be overridden with SOCKET_HOME environment variable or via setPath() for testing.
+ * Result is cached via getPathValue for performance.
+ *
+ * Priority order:
+ *   1. Test override via setPath('socket-user-dir', ...)
+ *   2. SOCKET_HOME - Base directory override
+ *   3. Default: $HOME/.socket
+ *   4. Fallback: /tmp/.socket (Unix) or %TEMP%\.socket (Windows)
+ */
+export declare function getSocketUserDir(): string;
+/**
+ * Get a Socket app directory (~/.socket/_).
+ */
+export declare function getSocketAppDir(appName: string): string;
+/**
+ * Get the Socket cacache directory (~/.socket/_cacache).
+ * Can be overridden with SOCKET_CACACHE_DIR environment variable or via setPath() for testing.
+ * Result is cached via getPathValue for performance.
+ *
+ * Priority order:
+ *   1. Test override via setPath('socket-cacache-dir', ...)
+ *   2. SOCKET_CACACHE_DIR - Full override of cacache directory
+ *   3. Default: $SOCKET_HOME/_cacache or $HOME/.socket/_cacache
+ */
+export declare function getSocketCacacheDir(): string;
+/**
+ * Get the Socket DLX directory (~/.socket/_dlx).
+ * Can be overridden with SOCKET_DLX_DIR environment variable or via setPath() for testing.
+ * Result is cached via getPathValue for performance.
+ *
+ * Priority order:
+ *   1. Test override via setPath('socket-dlx-dir', ...)
+ *   2. SOCKET_DLX_DIR - Full override of DLX cache directory
+ *   3. SOCKET_HOME/_dlx - Base directory override (inherits from getSocketUserDir)
+ *   4. Default: $HOME/.socket/_dlx
+ *   5. Fallback: /tmp/.socket/_dlx (Unix) or %TEMP%\.socket\_dlx (Windows)
+ */
+export declare function getSocketDlxDir(): string;
+/**
+ * Get a Socket app cache directory (~/.socket/_/cache).
+ */
+export declare function getSocketAppCacheDir(appName: string): string;
+/**
+ * Get a Socket app TTL cache directory (~/.socket/_/cache/ttl).
+ */
+export declare function getSocketAppCacheTtlDir(appName: string): string;
+/**
+ * Get the Socket CLI directory (~/.socket/_socket).
+ */
+export declare function getSocketCliDir(): string;
+/**
+ * Get the Socket Registry directory (~/.socket/_registry).
+ */
+export declare function getSocketRegistryDir(): string;
+/**
+ * Get the Socket Registry GitHub cache directory (~/.socket/_registry/cache/ttl/github).
+ */
+export declare function getSocketRegistryGithubCacheDir(): string;
+/**
+ * Get the user's home directory.
+ * Uses environment variables directly to support test mocking.
+ * Falls back to temporary directory if home is not available.
+ *
+ * Priority order:
+ *   1. HOME environment variable (Unix)
+ *   2. USERPROFILE environment variable (Windows)
+ *   3. getOs().homedir()
+ *   4. Fallback: getOs().tmpdir() (rarely used, for restricted environments)
+ */
+export declare function getUserHomeDir(): string;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/socket.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/socket.js
new file mode 100644
index 00000000..f82a3301
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/paths/socket.js
@@ -0,0 +1,162 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var socket_exports = {};
+__export(socket_exports, {
+  getOsHomeDir: () => getOsHomeDir,
+  getOsTmpDir: () => getOsTmpDir,
+  getSocketAppCacheDir: () => getSocketAppCacheDir,
+  getSocketAppCacheTtlDir: () => getSocketAppCacheTtlDir,
+  getSocketAppDir: () => getSocketAppDir,
+  getSocketCacacheDir: () => getSocketCacacheDir,
+  getSocketCliDir: () => getSocketCliDir,
+  getSocketDlxDir: () => getSocketDlxDir,
+  getSocketHomePath: () => getSocketHomePath,
+  getSocketRegistryDir: () => getSocketRegistryDir,
+  getSocketRegistryGithubCacheDir: () => getSocketRegistryGithubCacheDir,
+  getSocketUserDir: () => getSocketUserDir,
+  getUserHomeDir: () => getUserHomeDir
+});
+module.exports = __toCommonJS(socket_exports);
+var import_github = require("../constants/github");
+var import_socket = require("../constants/socket");
+var import_home = require("../env/home");
+var import_socket2 = require("../env/socket");
+var import_windows = require("../env/windows");
+var import_dirnames = require("./dirnames");
+var import_normalize = require("./normalize");
+var import_rewire = require("./rewire");
+let _os;
+// @__NO_SIDE_EFFECTS__
+function getOs() {
+  if (_os === void 0) {
+    _os = require("os");
+  }
+  return _os;
+}
+let _path;
+// @__NO_SIDE_EFFECTS__
+function getPath() {
+  if (_path === void 0) {
+    _path = require("path");
+  }
+  return _path;
+}
+function getOsHomeDir() {
+  return (0, import_rewire.getPathValue)("homedir", () => (/* @__PURE__ */ getOs()).homedir());
+}
+function getOsTmpDir() {
+  return (0, import_rewire.getPathValue)("tmpdir", () => (/* @__PURE__ */ getOs()).tmpdir());
+}
+function getSocketHomePath() {
+  return getSocketUserDir();
+}
+function getSocketUserDir() {
+  return (0, import_rewire.getPathValue)("socket-user-dir", () => {
+    const socketHome = (0, import_socket2.getSocketHome)();
+    if (socketHome) {
+      return (0, import_normalize.normalizePath)(socketHome);
+    }
+    return (0, import_normalize.normalizePath)((/* @__PURE__ */ getPath()).join(getUserHomeDir(), import_dirnames.DOT_SOCKET_DIR));
+  });
+}
+function getSocketAppDir(appName) {
+  return (0, import_normalize.normalizePath)(
+    (/* @__PURE__ */ getPath()).join(getSocketUserDir(), `${import_socket.SOCKET_APP_PREFIX}${appName}`)
+  );
+}
+function getSocketCacacheDir() {
+  return (0, import_rewire.getPathValue)("socket-cacache-dir", () => {
+    if ((0, import_socket2.getSocketCacacheDir)()) {
+      return (0, import_normalize.normalizePath)((0, import_socket2.getSocketCacacheDir)());
+    }
+    return (0, import_normalize.normalizePath)(
+      (/* @__PURE__ */ getPath()).join(getSocketUserDir(), `${import_socket.SOCKET_APP_PREFIX}cacache`)
+    );
+  });
+}
+function getSocketDlxDir() {
+  return (0, import_rewire.getPathValue)("socket-dlx-dir", () => {
+    if ((0, import_socket2.getSocketDlxDirEnv)()) {
+      return (0, import_normalize.normalizePath)((0, import_socket2.getSocketDlxDirEnv)());
+    }
+    return (0, import_normalize.normalizePath)(
+      (/* @__PURE__ */ getPath()).join(
+        getSocketUserDir(),
+        `${import_socket.SOCKET_APP_PREFIX}${import_socket.SOCKET_DLX_APP_NAME}`
+      )
+    );
+  });
+}
+function getSocketAppCacheDir(appName) {
+  return (0, import_normalize.normalizePath)((/* @__PURE__ */ getPath()).join(getSocketAppDir(appName), import_dirnames.CACHE_DIR));
+}
+function getSocketAppCacheTtlDir(appName) {
+  return (0, import_normalize.normalizePath)(
+    (/* @__PURE__ */ getPath()).join(getSocketAppCacheDir(appName), import_dirnames.CACHE_TTL_DIR)
+  );
+}
+function getSocketCliDir() {
+  return getSocketAppDir(import_socket.SOCKET_CLI_APP_NAME);
+}
+function getSocketRegistryDir() {
+  return getSocketAppDir(import_socket.SOCKET_REGISTRY_APP_NAME);
+}
+function getSocketRegistryGithubCacheDir() {
+  return (0, import_normalize.normalizePath)(
+    (/* @__PURE__ */ getPath()).join(
+      getSocketAppCacheTtlDir(import_socket.SOCKET_REGISTRY_APP_NAME),
+      import_github.CACHE_GITHUB_DIR
+    )
+  );
+}
+function getUserHomeDir() {
+  const home = (0, import_home.getHome)();
+  if (home) {
+    return home;
+  }
+  const userProfile = (0, import_windows.getUserprofile)();
+  if (userProfile) {
+    return userProfile;
+  }
+  try {
+    const osHome = getOsHomeDir();
+    if (osHome) {
+      return osHome;
+    }
+  } catch {
+  }
+  return getOsTmpDir();
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  getOsHomeDir,
+  getOsTmpDir,
+  getSocketAppCacheDir,
+  getSocketAppCacheTtlDir,
+  getSocketAppDir,
+  getSocketCacacheDir,
+  getSocketCliDir,
+  getSocketDlxDir,
+  getSocketHomePath,
+  getSocketRegistryDir,
+  getSocketRegistryGithubCacheDir,
+  getSocketUserDir,
+  getUserHomeDir
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/performance.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/performance.d.ts
new file mode 100644
index 00000000..74cac999
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/performance.d.ts
@@ -0,0 +1,178 @@
+/**
+ * Performance metrics collected during execution.
+ */
+type PerformanceMetrics = {
+    operation: string;
+    duration: number;
+    timestamp: number;
+    metadata?: Record;
+};
+/**
+ * Start a performance timer for an operation.
+ * Returns a stop function that records the duration.
+ *
+ * @param operation - Name of the operation being timed
+ * @param metadata - Optional metadata to attach to the metric
+ * @returns Stop function that completes the timing
+ *
+ * @example
+ * import { perfTimer } from '@socketsecurity/lib/performance'
+ *
+ * const stop = perfTimer('api-call')
+ * await fetchData()
+ * stop({ endpoint: '/npm/lodash/score' })
+ */
+export declare function perfTimer(operation: string, metadata?: Record): (additionalMetadata?: Record) => void;
+/**
+ * Measure execution time of an async function.
+ *
+ * @param operation - Name of the operation
+ * @param fn - Async function to measure
+ * @param metadata - Optional metadata
+ * @returns Result of the function and duration
+ *
+ * @example
+ * import { measure } from '@socketsecurity/lib/performance'
+ *
+ * const { result, duration } = await measure('fetch-packages', async () => {
+ *   return await fetchPackages()
+ * })
+ * console.log(`Fetched packages in ${duration}ms`)
+ */
+export declare function measure(operation: string, fn: () => Promise, metadata?: Record): Promise<{
+    result: T;
+    duration: number;
+}>;
+/**
+ * Measure synchronous function execution time.
+ *
+ * @param operation - Name of the operation
+ * @param fn - Synchronous function to measure
+ * @param metadata - Optional metadata
+ * @returns Result of the function and duration
+ *
+ * @example
+ * import { measureSync } from '@socketsecurity/lib/performance'
+ *
+ * const { result, duration } = measureSync('parse-json', () => {
+ *   return JSON.parse(data)
+ * })
+ */
+export declare function measureSync(operation: string, fn: () => T, metadata?: Record): {
+    result: T;
+    duration: number;
+};
+/**
+ * Get all collected performance metrics.
+ * Only available when DEBUG=perf is enabled.
+ *
+ * @returns Array of performance metrics
+ *
+ * @example
+ * import { getPerformanceMetrics } from '@socketsecurity/lib/performance'
+ *
+ * const metrics = getPerformanceMetrics()
+ * console.log(metrics)
+ */
+export declare function getPerformanceMetrics(): PerformanceMetrics[];
+/**
+ * Clear all collected performance metrics.
+ *
+ * @example
+ * import { clearPerformanceMetrics } from '@socketsecurity/lib/performance'
+ *
+ * clearPerformanceMetrics()
+ */
+export declare function clearPerformanceMetrics(): void;
+/**
+ * Get performance summary statistics.
+ *
+ * @returns Summary of metrics grouped by operation
+ *
+ * @example
+ * import { getPerformanceSummary } from '@socketsecurity/lib/performance'
+ *
+ * const summary = getPerformanceSummary()
+ * console.log(summary)
+ * // {
+ * //   'api-call': { count: 5, total: 1234, avg: 246.8, min: 100, max: 500 },
+ * //   'file-read': { count: 10, total: 50, avg: 5, min: 2, max: 15 }
+ * // }
+ */
+export declare function getPerformanceSummary(): Record;
+/**
+ * Print performance summary to console.
+ * Only prints when DEBUG=perf is enabled.
+ *
+ * @example
+ * import { printPerformanceSummary } from '@socketsecurity/lib/performance'
+ *
+ * printPerformanceSummary()
+ * // Performance Summary:
+ * // api-call: 5 calls, avg 246.8ms (min 100ms, max 500ms, total 1234ms)
+ * // file-read: 10 calls, avg 5ms (min 2ms, max 15ms, total 50ms)
+ */
+export declare function printPerformanceSummary(): void;
+/**
+ * Mark a checkpoint in performance tracking.
+ * Useful for tracking progress through complex operations.
+ *
+ * @param checkpoint - Name of the checkpoint
+ * @param metadata - Optional metadata
+ *
+ * @example
+ * import { perfCheckpoint } from '@socketsecurity/lib/performance'
+ *
+ * perfCheckpoint('start-scan')
+ * // ... do work ...
+ * perfCheckpoint('fetch-packages', { count: 50 })
+ * // ... do work ...
+ * perfCheckpoint('analyze-issues', { issueCount: 10 })
+ * perfCheckpoint('end-scan')
+ */
+export declare function perfCheckpoint(checkpoint: string, metadata?: Record): void;
+/**
+ * Track memory usage at a specific point.
+ * Only available when DEBUG=perf is enabled.
+ *
+ * @param label - Label for this memory snapshot
+ * @returns Memory usage in MB
+ *
+ * @example
+ * import { trackMemory } from '@socketsecurity/lib/performance'
+ *
+ * const memBefore = trackMemory('before-operation')
+ * await heavyOperation()
+ * const memAfter = trackMemory('after-operation')
+ * console.log(`Memory increased by ${memAfter - memBefore}MB`)
+ */
+export declare function trackMemory(label: string): number;
+/**
+ * Create a performance report for the current execution.
+ * Only available when DEBUG=perf is enabled.
+ *
+ * @returns Formatted performance report
+ *
+ * @example
+ * import { generatePerformanceReport } from '@socketsecurity/lib/performance'
+ *
+ * console.log(generatePerformanceReport())
+ * // ╔═══════════════════════════════════════════════╗
+ * // ║         Performance Report                    ║
+ * // ╚═══════════════════════════════════════════════╝
+ * //
+ * // api-call:
+ * //   Calls: 5
+ * //   Avg:   246.8ms
+ * //   Min:   100ms
+ * //   Max:   500ms
+ * //   Total: 1234ms
+ */
+export declare function generatePerformanceReport(): string;
+export {};
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/performance.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/performance.js
new file mode 100644
index 00000000..164f4d61
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/performance.js
@@ -0,0 +1,230 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var performance_exports = {};
+__export(performance_exports, {
+  clearPerformanceMetrics: () => clearPerformanceMetrics,
+  generatePerformanceReport: () => generatePerformanceReport,
+  getPerformanceMetrics: () => getPerformanceMetrics,
+  getPerformanceSummary: () => getPerformanceSummary,
+  measure: () => measure,
+  measureSync: () => measureSync,
+  perfCheckpoint: () => perfCheckpoint,
+  perfTimer: () => perfTimer,
+  printPerformanceSummary: () => printPerformanceSummary,
+  trackMemory: () => trackMemory
+});
+module.exports = __toCommonJS(performance_exports);
+var import_node_process = __toESM(require("node:process"));
+var import_debug = require("./debug");
+const performanceMetrics = [];
+function isPerfEnabled() {
+  return import_node_process.default.env["DEBUG"]?.includes("perf") || false;
+}
+function perfTimer(operation, metadata) {
+  if (!isPerfEnabled()) {
+    return () => {
+    };
+  }
+  const start = performance.now();
+  (0, import_debug.debugLog)(`[perf] [START] ${operation}`);
+  return (additionalMetadata) => {
+    const duration = performance.now() - start;
+    const metric = {
+      operation,
+      // Round to 2 decimals
+      duration: Math.round(duration * 100) / 100,
+      timestamp: Date.now(),
+      metadata: { ...metadata, ...additionalMetadata }
+    };
+    performanceMetrics.push(metric);
+    (0, import_debug.debugLog)(`[perf] [END] ${operation} - ${metric.duration}ms`);
+  };
+}
+async function measure(operation, fn, metadata) {
+  const stop = perfTimer(operation, metadata);
+  try {
+    const result = await fn();
+    stop({ success: true });
+    const metric = performanceMetrics[performanceMetrics.length - 1];
+    return { result, duration: metric?.duration || 0 };
+  } catch (e) {
+    stop({
+      success: false,
+      error: e instanceof Error ? e.message : "Unknown"
+    });
+    throw e;
+  }
+}
+function measureSync(operation, fn, metadata) {
+  const stop = perfTimer(operation, metadata);
+  try {
+    const result = fn();
+    stop({ success: true });
+    const metric = performanceMetrics[performanceMetrics.length - 1];
+    return { result, duration: metric?.duration || 0 };
+  } catch (e) {
+    stop({
+      success: false,
+      error: e instanceof Error ? e.message : "Unknown"
+    });
+    throw e;
+  }
+}
+function getPerformanceMetrics() {
+  return [...performanceMetrics];
+}
+function clearPerformanceMetrics() {
+  performanceMetrics.length = 0;
+  (0, import_debug.debugLog)("[perf] Cleared performance metrics");
+}
+function getPerformanceSummary() {
+  const summary = /* @__PURE__ */ Object.create(null);
+  for (const metric of performanceMetrics) {
+    const { duration, operation } = metric;
+    if (!summary[operation]) {
+      summary[operation] = {
+        count: 0,
+        total: 0,
+        min: Number.POSITIVE_INFINITY,
+        max: Number.NEGATIVE_INFINITY
+      };
+    }
+    const stats = summary[operation];
+    stats.count++;
+    stats.total += duration;
+    stats.min = Math.min(stats.min, duration);
+    stats.max = Math.max(stats.max, duration);
+  }
+  const result = /* @__PURE__ */ Object.create(null);
+  for (const { 0: operation, 1: stats } of Object.entries(summary)) {
+    result[operation] = {
+      count: stats.count,
+      total: Math.round(stats.total * 100) / 100,
+      avg: Math.round(stats.total / stats.count * 100) / 100,
+      min: Math.round(stats.min * 100) / 100,
+      max: Math.round(stats.max * 100) / 100
+    };
+  }
+  return result;
+}
+function printPerformanceSummary() {
+  if (!isPerfEnabled() || performanceMetrics.length === 0) {
+    return;
+  }
+  const summary = getPerformanceSummary();
+  const operations = Object.keys(summary).sort();
+  (0, import_debug.debugLog)("[perf]\n=== Performance Summary ===");
+  for (const operation of operations) {
+    const stats = summary[operation];
+    (0, import_debug.debugLog)(
+      `[perf] ${operation}: ${stats.count} calls, avg ${stats.avg}ms (min ${stats.min}ms, max ${stats.max}ms, total ${stats.total}ms)`
+    );
+  }
+  (0, import_debug.debugLog)("[perf] =========================\n");
+}
+function perfCheckpoint(checkpoint, metadata) {
+  if (!isPerfEnabled()) {
+    return;
+  }
+  const metric = {
+    operation: `checkpoint:${checkpoint}`,
+    duration: 0,
+    timestamp: Date.now(),
+    ...metadata ? { metadata } : {}
+  };
+  performanceMetrics.push(metric);
+  (0, import_debug.debugLog)(`[perf] [CHECKPOINT] ${checkpoint}`);
+}
+function trackMemory(label) {
+  if (!isPerfEnabled()) {
+    return 0;
+  }
+  const usage = import_node_process.default.memoryUsage();
+  const heapUsedMB = Math.round(usage.heapUsed / 1024 / 1024 * 100) / 100;
+  (0, import_debug.debugLog)(`[perf] [MEMORY] ${label}: ${heapUsedMB}MB heap used`);
+  const metric = {
+    operation: `checkpoint:memory:${label}`,
+    duration: 0,
+    timestamp: Date.now(),
+    metadata: {
+      heapUsed: heapUsedMB,
+      heapTotal: Math.round(usage.heapTotal / 1024 / 1024 * 100) / 100,
+      external: Math.round(usage.external / 1024 / 1024 * 100) / 100
+    }
+  };
+  performanceMetrics.push(metric);
+  return heapUsedMB;
+}
+function generatePerformanceReport() {
+  if (!isPerfEnabled() || performanceMetrics.length === 0) {
+    return "(no performance data collected - enable with DEBUG=perf)";
+  }
+  const summary = getPerformanceSummary();
+  const operations = Object.keys(summary).sort();
+  let report = "\n\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\n";
+  report += "\u2551         Performance Report                    \u2551\n";
+  report += "\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D\n\n";
+  for (const operation of operations) {
+    const stats = summary[operation];
+    report += `${operation}:
+`;
+    report += `  Calls: ${stats.count}
+`;
+    report += `  Avg:   ${stats.avg}ms
+`;
+    report += `  Min:   ${stats.min}ms
+`;
+    report += `  Max:   ${stats.max}ms
+`;
+    report += `  Total: ${stats.total}ms
+
+`;
+  }
+  const totalDuration = Object.values(summary).reduce(
+    (sum, s) => sum + s.total,
+    0
+  );
+  report += `Total measured time: ${Math.round(totalDuration * 100) / 100}ms
+`;
+  return report;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  clearPerformanceMetrics,
+  generatePerformanceReport,
+  getPerformanceMetrics,
+  getPerformanceSummary,
+  measure,
+  measureSync,
+  perfCheckpoint,
+  perfTimer,
+  printPerformanceSummary,
+  trackMemory
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/process-lock.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/process-lock.d.ts
new file mode 100644
index 00000000..22def284
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/process-lock.d.ts
@@ -0,0 +1,140 @@
+/**
+ * Lock acquisition options.
+ */
+export interface ProcessLockOptions {
+    /**
+     * Maximum number of retry attempts.
+     * @default 3
+     */
+    retries?: number | undefined;
+    /**
+     * Base delay between retries in milliseconds.
+     * @default 100
+     */
+    baseDelayMs?: number | undefined;
+    /**
+     * Maximum delay between retries in milliseconds.
+     * @default 1000
+     */
+    maxDelayMs?: number | undefined;
+    /**
+     * Stale lock timeout in milliseconds.
+     * Locks older than this are considered abandoned and can be reclaimed.
+     * Aligned with npm's npx locking strategy (5 seconds).
+     * @default 5000 (5 seconds)
+     */
+    staleMs?: number | undefined;
+    /**
+     * Interval for touching lock file to keep it fresh in milliseconds.
+     * Set to 0 to disable periodic touching.
+     * @default 2000 (2 seconds)
+     */
+    touchIntervalMs?: number | undefined;
+}
+/**
+ * Process lock manager with stale detection and exit cleanup.
+ * Provides cross-platform inter-process synchronization using file-system
+ * based locks.
+ */
+declare class ProcessLockManager {
+    private activeLocks;
+    private touchTimers;
+    private exitHandlerRegistered;
+    /**
+     * Ensure process exit handler is registered for cleanup.
+     * Registers a handler that cleans up all active locks when the process exits.
+     */
+    private ensureExitHandler;
+    /**
+     * Touch a lock file to update its mtime.
+     * This prevents the lock from being detected as stale during long operations.
+     *
+     * @param lockPath - Path to the lock directory
+     */
+    private touchLock;
+    /**
+     * Start periodic touching of a lock file.
+     * Aligned with npm npx strategy to prevent false stale detection.
+     *
+     * @param lockPath - Path to the lock directory
+     * @param intervalMs - Touch interval in milliseconds
+     */
+    private startTouchTimer;
+    /**
+     * Stop periodic touching of a lock file.
+     *
+     * @param lockPath - Path to the lock directory
+     */
+    private stopTouchTimer;
+    /**
+     * Check if a lock is stale based on mtime.
+     * Uses second-level granularity to avoid APFS floating-point precision issues.
+     * Aligned with npm's npx locking strategy.
+     *
+     * @param lockPath - Path to the lock directory
+     * @param staleMs - Stale timeout in milliseconds
+     * @returns True if lock exists and is stale
+     */
+    private isStale;
+    /**
+     * Acquire a lock using mkdir for atomic operation.
+     * Handles stale locks and includes exit cleanup.
+     *
+     * This method attempts to create a lock directory atomically. If the lock
+     * already exists, it checks if it's stale and removes it before retrying.
+     * Uses exponential backoff with jitter for retry attempts.
+     *
+     * @param lockPath - Path to the lock directory
+     * @param options - Lock acquisition options
+     * @returns Release function to unlock
+     * @throws Error if lock cannot be acquired after all retries
+     *
+     * @example
+     * ```typescript
+     * const release = await processLock.acquire('/tmp/my-lock')
+     * try {
+     *   // Critical section
+     * } finally {
+     *   release()
+     * }
+     * ```
+     */
+    acquire(lockPath: string, options?: ProcessLockOptions): Promise<() => void>;
+    /**
+     * Release a lock and remove from tracking.
+     * Stops periodic touching and removes the lock directory.
+     *
+     * @param lockPath - Path to the lock directory
+     *
+     * @example
+     * ```typescript
+     * processLock.release('/tmp/my-lock')
+     * ```
+     */
+    release(lockPath: string): void;
+    /**
+     * Execute a function with exclusive lock protection.
+     * Automatically handles lock acquisition, execution, and cleanup.
+     *
+     * This is the recommended way to use process locks, as it guarantees
+     * cleanup even if the callback throws an error.
+     *
+     * @param lockPath - Path to the lock directory
+     * @param fn - Function to execute while holding the lock
+     * @param options - Lock acquisition options
+     * @returns Result of the callback function
+     * @throws Error from callback or lock acquisition failure
+     *
+     * @example
+     * ```typescript
+     * const result = await processLock.withLock('/tmp/my-lock', async () => {
+     *   // Critical section
+     *   return someValue
+     * })
+     * ```
+     */
+    withLock(lockPath: string, fn: () => Promise, options?: ProcessLockOptions): Promise;
+}
+// Export singleton instance.
+export declare const processLock: ProcessLockManager;
+export {};
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/process-lock.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/process-lock.js
new file mode 100644
index 00000000..46eb1d39
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/process-lock.js
@@ -0,0 +1,317 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var process_lock_exports = {};
+__export(process_lock_exports, {
+  processLock: () => processLock
+});
+module.exports = __toCommonJS(process_lock_exports);
+var import_fs = require("./fs");
+var import_logger = require("./logger");
+var import_promises = require("./promises");
+var import_signal_exit = require("./signal-exit");
+let _fs;
+// @__NO_SIDE_EFFECTS__
+function getFs() {
+  if (_fs === void 0) {
+    _fs = require("fs");
+  }
+  return _fs;
+}
+const fs = /* @__PURE__ */ getFs();
+const { existsSync, mkdirSync, statSync, utimesSync } = fs;
+const logger = (0, import_logger.getDefaultLogger)();
+class ProcessLockManager {
+  activeLocks = /* @__PURE__ */ new Set();
+  touchTimers = /* @__PURE__ */ new Map();
+  exitHandlerRegistered = false;
+  /**
+   * Ensure process exit handler is registered for cleanup.
+   * Registers a handler that cleans up all active locks when the process exits.
+   */
+  ensureExitHandler() {
+    if (this.exitHandlerRegistered) {
+      return;
+    }
+    (0, import_signal_exit.onExit)(() => {
+      for (const timer of this.touchTimers.values()) {
+        clearInterval(timer);
+      }
+      this.touchTimers.clear();
+      for (const lockPath of this.activeLocks) {
+        try {
+          if (existsSync(lockPath)) {
+            (0, import_fs.safeDeleteSync)(lockPath, { recursive: true });
+          }
+        } catch {
+        }
+      }
+    });
+    this.exitHandlerRegistered = true;
+  }
+  /**
+   * Touch a lock file to update its mtime.
+   * This prevents the lock from being detected as stale during long operations.
+   *
+   * @param lockPath - Path to the lock directory
+   */
+  touchLock(lockPath) {
+    try {
+      if (existsSync(lockPath)) {
+        const now = /* @__PURE__ */ new Date();
+        utimesSync(lockPath, now, now);
+      }
+    } catch (error) {
+      logger.warn(
+        `Failed to touch lock ${lockPath}: ${error instanceof Error ? error.message : String(error)}`
+      );
+    }
+  }
+  /**
+   * Start periodic touching of a lock file.
+   * Aligned with npm npx strategy to prevent false stale detection.
+   *
+   * @param lockPath - Path to the lock directory
+   * @param intervalMs - Touch interval in milliseconds
+   */
+  startTouchTimer(lockPath, intervalMs) {
+    if (intervalMs <= 0 || this.touchTimers.has(lockPath)) {
+      return;
+    }
+    const timer = setInterval(() => {
+      this.touchLock(lockPath);
+    }, intervalMs);
+    timer.unref();
+    this.touchTimers.set(lockPath, timer);
+  }
+  /**
+   * Stop periodic touching of a lock file.
+   *
+   * @param lockPath - Path to the lock directory
+   */
+  stopTouchTimer(lockPath) {
+    const timer = this.touchTimers.get(lockPath);
+    if (timer) {
+      clearInterval(timer);
+      this.touchTimers.delete(lockPath);
+    }
+  }
+  /**
+   * Check if a lock is stale based on mtime.
+   * Uses second-level granularity to avoid APFS floating-point precision issues.
+   * Aligned with npm's npx locking strategy.
+   *
+   * @param lockPath - Path to the lock directory
+   * @param staleMs - Stale timeout in milliseconds
+   * @returns True if lock exists and is stale
+   */
+  isStale(lockPath, staleMs) {
+    try {
+      const stats = statSync(lockPath, { throwIfNoEntry: false });
+      if (!stats) {
+        return false;
+      }
+      const ageSeconds = Math.floor((Date.now() - stats.mtime.getTime()) / 1e3);
+      const staleSeconds = Math.floor(staleMs / 1e3);
+      return ageSeconds > staleSeconds;
+    } catch {
+      return false;
+    }
+  }
+  /**
+   * Acquire a lock using mkdir for atomic operation.
+   * Handles stale locks and includes exit cleanup.
+   *
+   * This method attempts to create a lock directory atomically. If the lock
+   * already exists, it checks if it's stale and removes it before retrying.
+   * Uses exponential backoff with jitter for retry attempts.
+   *
+   * @param lockPath - Path to the lock directory
+   * @param options - Lock acquisition options
+   * @returns Release function to unlock
+   * @throws Error if lock cannot be acquired after all retries
+   *
+   * @example
+   * ```typescript
+   * const release = await processLock.acquire('/tmp/my-lock')
+   * try {
+   *   // Critical section
+   * } finally {
+   *   release()
+   * }
+   * ```
+   */
+  async acquire(lockPath, options = {}) {
+    const {
+      baseDelayMs = 100,
+      maxDelayMs = 1e3,
+      retries = 3,
+      staleMs = 5e3,
+      touchIntervalMs = 2e3
+    } = options;
+    this.ensureExitHandler();
+    return await (0, import_promises.pRetry)(
+      async () => {
+        try {
+          if (this.isStale(lockPath, staleMs)) {
+            logger.log(`Removing stale lock: ${lockPath}`);
+            try {
+              (0, import_fs.safeDeleteSync)(lockPath, { recursive: true });
+            } catch {
+            }
+          }
+          if (existsSync(lockPath)) {
+            throw new Error(`Lock already exists: ${lockPath}`);
+          }
+          const lastSlash = Math.max(
+            lockPath.lastIndexOf("/"),
+            lockPath.lastIndexOf("\\")
+          );
+          if (lastSlash > 0) {
+            mkdirSync(lockPath.slice(0, lastSlash), { recursive: true });
+          }
+          mkdirSync(lockPath);
+          this.activeLocks.add(lockPath);
+          this.startTouchTimer(lockPath, touchIntervalMs);
+          return () => this.release(lockPath);
+        } catch (error) {
+          const code = error.code;
+          if (code === "EEXIST") {
+            if (this.isStale(lockPath, staleMs)) {
+              throw new Error(`Stale lock detected: ${lockPath}`);
+            }
+            throw new Error(`Lock already exists: ${lockPath}`);
+          }
+          if (code === "EACCES" || code === "EPERM") {
+            throw new Error(
+              `Permission denied creating lock: ${lockPath}. Check directory permissions or run with appropriate access.`,
+              { cause: error }
+            );
+          }
+          if (code === "EROFS") {
+            throw new Error(
+              `Cannot create lock on read-only filesystem: ${lockPath}`,
+              { cause: error }
+            );
+          }
+          if (code === "ENOTDIR") {
+            const lastSlashIndex = Math.max(
+              lockPath.lastIndexOf("/"),
+              lockPath.lastIndexOf("\\")
+            );
+            const parentDir = lastSlashIndex === -1 ? "." : lockPath.slice(0, lastSlashIndex);
+            throw new Error(
+              `Cannot create lock directory: ${lockPath}
+A path component is a file when it should be a directory.
+Parent path: ${parentDir}
+To resolve:
+  1. Check if "${parentDir}" contains a file instead of a directory
+  2. Remove any conflicting files in the path
+  3. Ensure the full parent directory structure exists`,
+              { cause: error }
+            );
+          }
+          if (code === "ENOENT") {
+            const lastSlashIndex = Math.max(
+              lockPath.lastIndexOf("/"),
+              lockPath.lastIndexOf("\\")
+            );
+            const parentDir = lastSlashIndex === -1 ? "." : lockPath.slice(0, lastSlashIndex);
+            throw new Error(
+              `Cannot create lock directory: ${lockPath}
+Parent directory does not exist: ${parentDir}
+To resolve:
+  1. Ensure the parent directory "${parentDir}" exists
+  2. Create the directory structure: mkdir -p "${parentDir}"
+  3. Check filesystem permissions allow directory creation`,
+              { cause: error }
+            );
+          }
+          throw new Error(`Failed to acquire lock: ${lockPath}`, {
+            cause: error
+          });
+        }
+      },
+      {
+        retries,
+        baseDelayMs,
+        maxDelayMs,
+        jitter: true
+      }
+    );
+  }
+  /**
+   * Release a lock and remove from tracking.
+   * Stops periodic touching and removes the lock directory.
+   *
+   * @param lockPath - Path to the lock directory
+   *
+   * @example
+   * ```typescript
+   * processLock.release('/tmp/my-lock')
+   * ```
+   */
+  release(lockPath) {
+    this.stopTouchTimer(lockPath);
+    try {
+      if (existsSync(lockPath)) {
+        (0, import_fs.safeDeleteSync)(lockPath, { recursive: true });
+      }
+      this.activeLocks.delete(lockPath);
+    } catch (error) {
+      logger.warn(
+        `Failed to release lock ${lockPath}: ${error instanceof Error ? error.message : String(error)}`
+      );
+    }
+  }
+  /**
+   * Execute a function with exclusive lock protection.
+   * Automatically handles lock acquisition, execution, and cleanup.
+   *
+   * This is the recommended way to use process locks, as it guarantees
+   * cleanup even if the callback throws an error.
+   *
+   * @param lockPath - Path to the lock directory
+   * @param fn - Function to execute while holding the lock
+   * @param options - Lock acquisition options
+   * @returns Result of the callback function
+   * @throws Error from callback or lock acquisition failure
+   *
+   * @example
+   * ```typescript
+   * const result = await processLock.withLock('/tmp/my-lock', async () => {
+   *   // Critical section
+   *   return someValue
+   * })
+   * ```
+   */
+  async withLock(lockPath, fn, options) {
+    const release = await this.acquire(lockPath, options);
+    try {
+      return await fn();
+    } finally {
+      release();
+    }
+  }
+}
+const processLock = new ProcessLockManager();
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  processLock
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/promise-queue.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/promise-queue.d.ts
new file mode 100644
index 00000000..8fc9537e
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/promise-queue.d.ts
@@ -0,0 +1,37 @@
+export declare class PromiseQueue {
+    private queue;
+    private running;
+    private idleResolvers;
+    private readonly maxConcurrency;
+    private readonly maxQueueLength;
+    /**
+     * Creates a new PromiseQueue
+     * @param maxConcurrency - Maximum number of promises that can run concurrently
+     * @param maxQueueLength - Maximum queue size (older tasks are dropped if exceeded)
+     */
+    constructor(maxConcurrency: number, maxQueueLength?: number | undefined);
+    /**
+     * Add a task to the queue
+     * @param fn - Async function to execute
+     * @returns Promise that resolves with the function's result
+     */
+    add(fn: () => Promise): Promise;
+    private runNext;
+    private notifyIdleIfNeeded;
+    /**
+     * Wait for all queued and running tasks to complete
+     */
+    onIdle(): Promise;
+    /**
+     * Get the number of tasks currently running
+     */
+    get activeCount(): number;
+    /**
+     * Get the number of tasks waiting in the queue
+     */
+    get pendingCount(): number;
+    /**
+     * Clear all pending tasks from the queue (does not affect running tasks)
+     */
+    clear(): void;
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/promise-queue.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/promise-queue.js
new file mode 100644
index 00000000..44cc0ea2
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/promise-queue.js
@@ -0,0 +1,122 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var promise_queue_exports = {};
+__export(promise_queue_exports, {
+  PromiseQueue: () => PromiseQueue
+});
+module.exports = __toCommonJS(promise_queue_exports);
+class PromiseQueue {
+  queue = [];
+  running = 0;
+  idleResolvers = [];
+  maxConcurrency;
+  maxQueueLength;
+  /**
+   * Creates a new PromiseQueue
+   * @param maxConcurrency - Maximum number of promises that can run concurrently
+   * @param maxQueueLength - Maximum queue size (older tasks are dropped if exceeded)
+   */
+  constructor(maxConcurrency, maxQueueLength) {
+    this.maxConcurrency = maxConcurrency;
+    this.maxQueueLength = maxQueueLength;
+    if (maxConcurrency < 1) {
+      throw new Error("maxConcurrency must be at least 1");
+    }
+  }
+  /**
+   * Add a task to the queue
+   * @param fn - Async function to execute
+   * @returns Promise that resolves with the function's result
+   */
+  async add(fn) {
+    return await new Promise((resolve, reject) => {
+      const task = { fn, resolve, reject };
+      if (this.maxQueueLength !== void 0 && this.queue.length >= this.maxQueueLength) {
+        const droppedTask = this.queue.shift();
+        if (droppedTask) {
+          droppedTask.reject(new Error("Task dropped: queue length exceeded"));
+        }
+      }
+      this.queue.push(task);
+      this.runNext();
+    });
+  }
+  runNext() {
+    if (this.running >= this.maxConcurrency || this.queue.length === 0) {
+      this.notifyIdleIfNeeded();
+      return;
+    }
+    const task = this.queue.shift();
+    if (!task) {
+      return;
+    }
+    this.running++;
+    task.fn().then(task.resolve).catch(task.reject).finally(() => {
+      this.running--;
+      this.runNext();
+    });
+  }
+  notifyIdleIfNeeded() {
+    if (this.running === 0 && this.queue.length === 0) {
+      for (const resolve of this.idleResolvers) {
+        resolve();
+      }
+      this.idleResolvers = [];
+    }
+  }
+  /**
+   * Wait for all queued and running tasks to complete
+   */
+  async onIdle() {
+    if (this.running === 0 && this.queue.length === 0) {
+      return;
+    }
+    return await new Promise((resolve) => {
+      this.idleResolvers.push(resolve);
+    });
+  }
+  /**
+   * Get the number of tasks currently running
+   */
+  get activeCount() {
+    return this.running;
+  }
+  /**
+   * Get the number of tasks waiting in the queue
+   */
+  get pendingCount() {
+    return this.queue.length;
+  }
+  /**
+   * Clear all pending tasks from the queue (does not affect running tasks)
+   */
+  clear() {
+    const pending = this.queue;
+    this.queue = [];
+    for (const task of pending) {
+      task.reject(new Error("Task cancelled: queue cleared"));
+    }
+    this.notifyIdleIfNeeded();
+  }
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  PromiseQueue
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/promises.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/promises.d.ts
new file mode 100644
index 00000000..eda8f745
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/promises.d.ts
@@ -0,0 +1,457 @@
+/**
+ * Configuration options for retry behavior with exponential backoff.
+ *
+ * Controls how failed operations are retried, including timing, backoff strategy,
+ * and callback hooks for observing or modifying retry behavior.
+ */
+export interface RetryOptions {
+    /**
+     * Arguments to pass to the callback function on each attempt.
+     *
+     * @default []
+     */
+    args?: unknown[] | undefined;
+    /**
+     * Multiplier for exponential backoff (e.g., 2 doubles delay each retry).
+     * Each retry waits `baseDelayMs * (backoffFactor ** attemptNumber)`.
+     *
+     * @default 2
+     * @example
+     * // With backoffFactor: 2, baseDelayMs: 100
+     * // Retry 1: 100ms
+     * // Retry 2: 200ms
+     * // Retry 3: 400ms
+     */
+    backoffFactor?: number | undefined;
+    /**
+     * Initial delay before the first retry (in milliseconds).
+     * This is the base value for exponential backoff calculations.
+     *
+     * @default 200
+     */
+    baseDelayMs?: number | undefined;
+    // REMOVED: Deprecated `factor` option
+    // Migration: Use `backoffFactor` instead
+    /**
+     * Whether to apply randomness to spread out retries and avoid thundering herd.
+     * When `true`, adds random delay between 0 and current delay value.
+     *
+     * @default true
+     * @example
+     * // With jitter: true, delay: 100ms
+     * // Actual wait: 100ms + random(0-100ms) = 100-200ms
+     */
+    jitter?: boolean | undefined;
+    /**
+     * Upper limit for any backoff delay (in milliseconds).
+     * Prevents exponential backoff from growing unbounded.
+     *
+     * @default 10000
+     */
+    maxDelayMs?: number | undefined;
+    // REMOVED: Deprecated `maxTimeout` option
+    // Migration: Use `maxDelayMs` instead
+    // REMOVED: Deprecated `minTimeout` option
+    // Migration: Use `baseDelayMs` instead
+    /**
+     * Callback invoked on each retry attempt.
+     * Can observe errors, customize delays, or cancel retries.
+     *
+     * @param attempt - The current attempt number (1-based: 1, 2, 3, ...)
+     * @param error - The error that triggered this retry
+     * @param delay - The calculated delay in milliseconds before next retry
+     * @returns `false` to cancel retries (if `onRetryCancelOnFalse` is `true`),
+     *          a number to override the delay, or `undefined` to use calculated delay
+     *
+     * @example
+     * // Log each retry
+     * onRetry: (attempt, error, delay) => {
+     *   console.log(`Retry ${attempt} after ${delay}ms: ${error}`)
+     * }
+     *
+     * @example
+     * // Cancel retries for specific errors
+     * onRetry: (attempt, error) => {
+     *   if (error instanceof ValidationError) return false
+     * }
+     *
+     * @example
+     * // Use custom delay
+     * onRetry: (attempt) => attempt * 1000 // 1s, 2s, 3s, ...
+     */
+    onRetry?: ((attempt: number, error: unknown, delay: number) => boolean | number | undefined) | undefined;
+    /**
+     * Whether `onRetry` can cancel retries by returning `false`.
+     * When `true`, returning `false` from `onRetry` stops retry attempts.
+     *
+     * @default false
+     */
+    onRetryCancelOnFalse?: boolean | undefined;
+    /**
+     * Whether errors thrown by `onRetry` should propagate.
+     * When `true`, exceptions in `onRetry` terminate the retry loop.
+     * When `false`, exceptions in `onRetry` are silently caught.
+     *
+     * @default false
+     */
+    onRetryRethrow?: boolean | undefined;
+    /**
+     * Number of retry attempts (0 = no retries, only initial attempt).
+     * The callback is executed `retries + 1` times total (initial + retries).
+     *
+     * @default 0
+     * @example
+     * // retries: 0 -> 1 total attempt (no retries)
+     * // retries: 3 -> 4 total attempts (1 initial + 3 retries)
+     */
+    retries?: number | undefined;
+    /**
+     * AbortSignal to support cancellation of retry operations.
+     * When aborted, immediately stops retrying and returns `undefined`.
+     *
+     * @default process abort signal
+     * @example
+     * const controller = new AbortController()
+     * pRetry(fn, { signal: controller.signal })
+     * // Later: controller.abort() to cancel
+     */
+    signal?: AbortSignal | undefined;
+}
+/**
+ * Configuration options for iteration functions with concurrency control.
+ *
+ * Controls how array operations are parallelized and retried.
+ */
+export interface IterationOptions {
+    /**
+     * The number of concurrent executions performed at one time.
+     * Higher values increase parallelism but may overwhelm resources.
+     *
+     * @default 1
+     * @example
+     * // Process 5 items at a time
+     * await pEach(items, processItem, { concurrency: 5 })
+     */
+    concurrency?: number | undefined;
+    /**
+     * Retry configuration as a number (retry count) or full options object.
+     * Applied to each individual item's callback execution.
+     *
+     * @default 0 (no retries)
+     * @example
+     * // Simple: retry each item up to 3 times
+     * await pEach(items, fetchItem, { retries: 3 })
+     *
+     * @example
+     * // Advanced: custom backoff for each item
+     * await pEach(items, fetchItem, {
+     *   retries: {
+     *     retries: 3,
+     *     baseDelayMs: 1000,
+     *     backoffFactor: 2
+     *   }
+     * })
+     */
+    retries?: number | RetryOptions | undefined;
+    /**
+     * AbortSignal to support cancellation of the entire iteration.
+     * When aborted, stops processing remaining items.
+     *
+     * @default process abort signal
+     */
+    signal?: AbortSignal | undefined;
+}
+/**
+ * Normalize options for iteration functions.
+ *
+ * Converts various option formats into a consistent structure with defaults applied.
+ * Handles number shorthand for concurrency and ensures minimum values.
+ *
+ * @param options - Concurrency as number, or full options object, or undefined
+ * @returns Normalized options with concurrency, retries, and signal
+ *
+ * @example
+ * // Number shorthand for concurrency
+ * normalizeIterationOptions(5)
+ * // => { concurrency: 5, retries: {...}, signal: AbortSignal }
+ *
+ * @example
+ * // Full options
+ * normalizeIterationOptions({ concurrency: 3, retries: 2 })
+ * // => { concurrency: 3, retries: {...}, signal: AbortSignal }
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function normalizeIterationOptions(options?: number | IterationOptions | undefined): {
+    concurrency: number;
+    retries: RetryOptions;
+    signal: AbortSignal;
+};
+/**
+ * Normalize options for retry functionality.
+ *
+ * Converts various retry option formats into a complete configuration with all defaults.
+ * Handles legacy property names (`factor`, `minTimeout`, `maxTimeout`) and merges them
+ * with modern equivalents.
+ *
+ * @param options - Retry count as number, or full options object, or undefined
+ * @returns Normalized retry options with all properties set
+ *
+ * @example
+ * // Number shorthand
+ * normalizeRetryOptions(3)
+ * // => { retries: 3, baseDelayMs: 200, backoffFactor: 2, ... }
+ *
+ * @example
+ * // Full options with defaults filled in
+ * normalizeRetryOptions({ retries: 5, baseDelayMs: 500 })
+ * // => { retries: 5, baseDelayMs: 500, backoffFactor: 2, jitter: true, ... }
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function normalizeRetryOptions(options?: number | RetryOptions | undefined): RetryOptions;
+/**
+ * Execute an async function for each array element with concurrency control.
+ *
+ * Processes array items in parallel batches (chunks) with configurable concurrency.
+ * Each item's callback can be retried independently on failure. Similar to
+ * `Promise.all(array.map(fn))` but with controlled parallelism.
+ *
+ * @template T - The type of array elements
+ * @param array - The array to iterate over
+ * @param callbackFn - Async function to execute for each item
+ * @param options - Concurrency as number, or full iteration options, or undefined
+ * @returns Promise that resolves when all items are processed
+ *
+ * @example
+ * // Process items serially (concurrency: 1)
+ * await pEach(urls, async (url) => {
+ *   await fetch(url)
+ * })
+ *
+ * @example
+ * // Process 5 items at a time
+ * await pEach(files, async (file) => {
+ *   await processFile(file)
+ * }, 5)
+ *
+ * @example
+ * // With retries and cancellation
+ * const controller = new AbortController()
+ * await pEach(tasks, async (task) => {
+ *   await executeTask(task)
+ * }, {
+ *   concurrency: 3,
+ *   retries: 2,
+ *   signal: controller.signal
+ * })
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function pEach(array: T[], callbackFn: (item: T) => Promise, options?: number | IterationOptions | undefined): Promise;
+/**
+ * Filter an array asynchronously with concurrency control.
+ *
+ * Tests each element with an async predicate function, processing items in parallel
+ * batches. Returns a new array with only items that pass the test. Similar to
+ * `array.filter()` but for async predicates with controlled concurrency.
+ *
+ * @template T - The type of array elements
+ * @param array - The array to filter
+ * @param callbackFn - Async predicate function returning true to keep item
+ * @param options - Concurrency as number, or full iteration options, or undefined
+ * @returns Promise resolving to filtered array
+ *
+ * @example
+ * // Filter serially
+ * const activeUsers = await pFilter(users, async (user) => {
+ *   return await isUserActive(user.id)
+ * })
+ *
+ * @example
+ * // Filter with concurrency
+ * const validFiles = await pFilter(filePaths, async (path) => {
+ *   try {
+ *     await fs.access(path)
+ *     return true
+ *   } catch {
+ *     return false
+ *   }
+ * }, 10)
+ *
+ * @example
+ * // With retries for flaky checks
+ * const reachable = await pFilter(endpoints, async (url) => {
+ *   const response = await fetch(url)
+ *   return response.ok
+ * }, {
+ *   concurrency: 5,
+ *   retries: 2
+ * })
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function pFilter(array: T[], callbackFn: (item: T) => Promise, options?: number | IterationOptions | undefined): Promise;
+/**
+ * Process array in chunks with an async callback.
+ *
+ * Divides the array into fixed-size chunks and processes each chunk sequentially
+ * with the callback. Useful for batch operations like bulk database inserts or
+ * API calls with payload size limits.
+ *
+ * @template T - The type of array elements
+ * @param array - The array to process in chunks
+ * @param callbackFn - Async function to execute for each chunk
+ * @param options - Chunk size and retry options
+ * @returns Promise that resolves when all chunks are processed
+ *
+ * @example
+ * // Insert records in batches of 100
+ * await pEachChunk(records, async (chunk) => {
+ *   await db.batchInsert(chunk)
+ * }, { chunkSize: 100 })
+ *
+ * @example
+ * // Upload files in batches with retries
+ * await pEachChunk(files, async (batch) => {
+ *   await uploadBatch(batch)
+ * }, {
+ *   chunkSize: 50,
+ *   retries: 3,
+ *   baseDelayMs: 1000
+ * })
+ *
+ * @example
+ * // Process with cancellation support
+ * const controller = new AbortController()
+ * await pEachChunk(items, async (chunk) => {
+ *   await processChunk(chunk)
+ * }, {
+ *   chunkSize: 25,
+ *   signal: controller.signal
+ * })
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function pEachChunk(array: T[], callbackFn: (chunk: T[]) => Promise, options?: (RetryOptions & {
+    chunkSize?: number | undefined;
+}) | undefined): Promise;
+/**
+ * Filter chunked arrays with an async predicate.
+ *
+ * Internal helper for `pFilter`. Processes pre-chunked arrays, applying the
+ * predicate to each element within each chunk with retry support.
+ *
+ * @template T - The type of array elements
+ * @param chunks - Pre-chunked array (array of arrays)
+ * @param callbackFn - Async predicate function
+ * @param options - Retry count as number, or full retry options, or undefined
+ * @returns Promise resolving to array of filtered chunks
+ *
+ * @example
+ * const chunks = [[1, 2], [3, 4], [5, 6]]
+ * const filtered = await pFilterChunk(chunks, async (n) => n % 2 === 0)
+ * // => [[2], [4], [6]]
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function pFilterChunk(chunks: T[][], callbackFn: (value: T) => Promise, options?: number | RetryOptions | undefined): Promise;
+/**
+ * Retry an async function with exponential backoff.
+ *
+ * Attempts to execute a function multiple times with increasing delays between attempts.
+ * Implements exponential backoff with optional jitter to prevent thundering herd problems.
+ * Supports custom retry logic via `onRetry` callback.
+ *
+ * The delay calculation follows: `min(baseDelayMs * (backoffFactor ** attempt), maxDelayMs)`
+ * With jitter: adds random value between 0 and calculated delay.
+ *
+ * @template T - The return type of the callback function
+ * @param callbackFn - Async function to retry
+ * @param options - Retry count as number, or full retry options, or undefined
+ * @returns Promise resolving to callback result, or `undefined` if aborted
+ *
+ * @throws {Error} The last error if all retry attempts fail
+ *
+ * @example
+ * // Simple retry: 3 attempts with default backoff
+ * const data = await pRetry(async () => {
+ *   return await fetchData()
+ * }, 3)
+ *
+ * @example
+ * // Custom backoff strategy
+ * const result = await pRetry(async () => {
+ *   return await unreliableOperation()
+ * }, {
+ *   retries: 5,
+ *   baseDelayMs: 1000,    // Start at 1 second
+ *   backoffFactor: 2,      // Double each time
+ *   maxDelayMs: 30000,     // Cap at 30 seconds
+ *   jitter: true           // Add randomness
+ * })
+ * // Delays: ~1s, ~2s, ~4s, ~8s, ~16s (each ± random jitter)
+ *
+ * @example
+ * // With custom retry logic
+ * const data = await pRetry(async () => {
+ *   return await apiCall()
+ * }, {
+ *   retries: 3,
+ *   onRetry: (attempt, error, delay) => {
+ *     console.log(`Attempt ${attempt} failed: ${error}`)
+ *     console.log(`Waiting ${delay}ms before retry...`)
+ *
+ *     // Cancel retries for client errors (4xx)
+ *     if (error.statusCode >= 400 && error.statusCode < 500) {
+ *       return false
+ *     }
+ *
+ *     // Use longer delay for rate limit errors
+ *     if (error.statusCode === 429) {
+ *       return 60000 // Wait 1 minute
+ *     }
+ *   },
+ *   onRetryCancelOnFalse: true
+ * })
+ *
+ * @example
+ * // With cancellation support
+ * const controller = new AbortController()
+ * setTimeout(() => controller.abort(), 5000) // Cancel after 5s
+ *
+ * const result = await pRetry(async ({ signal }) => {
+ *   return await longRunningTask(signal)
+ * }, {
+ *   retries: 10,
+ *   signal: controller.signal
+ * })
+ * // Returns undefined if aborted
+ *
+ * @example
+ * // Pass arguments to callback
+ * const result = await pRetry(
+ *   async (url, options) => {
+ *     return await fetch(url, options)
+ *   },
+ *   {
+ *     retries: 3,
+ *     args: ['https://api.example.com', { method: 'POST' }]
+ *   }
+ * )
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function pRetry(callbackFn: (...args: unknown[]) => Promise, options?: number | RetryOptions | undefined): Promise;
+/**
+ * Resolve retry options from various input formats.
+ *
+ * Converts shorthand and partial options into a base configuration that can be
+ * further normalized. This is an internal helper for option processing.
+ *
+ * @param options - Retry count as number, or partial options object, or undefined
+ * @returns Resolved retry options with defaults for basic properties
+ *
+ * @example
+ * resolveRetryOptions(3)
+ * // => { retries: 3, minTimeout: 200, maxTimeout: 10000, factor: 2 }
+ *
+ * @example
+ * resolveRetryOptions({ retries: 5, maxTimeout: 5000 })
+ * // => { retries: 5, minTimeout: 200, maxTimeout: 5000, factor: 2 }
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function resolveRetryOptions(options?: number | RetryOptions | undefined): RetryOptions;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/promises.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/promises.js
new file mode 100644
index 00000000..f62f5c2a
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/promises.js
@@ -0,0 +1,270 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var promises_exports = {};
+__export(promises_exports, {
+  normalizeIterationOptions: () => normalizeIterationOptions,
+  normalizeRetryOptions: () => normalizeRetryOptions,
+  pEach: () => pEach,
+  pEachChunk: () => pEachChunk,
+  pFilter: () => pFilter,
+  pFilterChunk: () => pFilterChunk,
+  pRetry: () => pRetry,
+  resolveRetryOptions: () => resolveRetryOptions
+});
+module.exports = __toCommonJS(promises_exports);
+var import_core = require("./constants/core");
+var import_process = require("./constants/process");
+var import_arrays = require("./arrays");
+const abortSignal = (0, import_process.getAbortSignal)();
+let _timers;
+// @__NO_SIDE_EFFECTS__
+function getTimers() {
+  if (_timers === void 0) {
+    _timers = require("timers/promises");
+  }
+  return _timers;
+}
+// @__NO_SIDE_EFFECTS__
+function normalizeIterationOptions(options) {
+  const opts = typeof options === "number" ? { concurrency: options } : options;
+  const {
+    // The number of concurrent executions performed at one time.
+    concurrency = 1,
+    // Retries as a number or options object.
+    retries,
+    // AbortSignal used to support cancellation.
+    signal = abortSignal
+  } = { __proto__: null, ...opts };
+  const normalizedConcurrency = Math.max(1, concurrency);
+  const retryOpts = /* @__PURE__ */ resolveRetryOptions(retries);
+  return {
+    __proto__: null,
+    concurrency: normalizedConcurrency,
+    retries: /* @__PURE__ */ normalizeRetryOptions({ signal, ...retryOpts }),
+    signal
+  };
+}
+// @__NO_SIDE_EFFECTS__
+function normalizeRetryOptions(options) {
+  const resolved = /* @__PURE__ */ resolveRetryOptions(options);
+  const {
+    // Arguments to pass to the callback function.
+    args = [],
+    // Multiplier for exponential backoff (e.g., 2 doubles delay each retry).
+    backoffFactor = 2,
+    // Initial delay before the first retry (in milliseconds).
+    baseDelayMs = 200,
+    // Whether to apply randomness to spread out retries.
+    jitter = true,
+    // Upper limit for any backoff delay (in milliseconds).
+    maxDelayMs = 1e4,
+    // Optional callback invoked on each retry attempt:
+    // (attempt: number, error: unknown, delay: number) => void
+    onRetry,
+    // Whether onRetry can cancel retries by returning `false`.
+    onRetryCancelOnFalse = false,
+    // Whether onRetry will rethrow errors.
+    onRetryRethrow = false,
+    // Number of retry attempts (0 = no retries, only initial attempt).
+    retries = 0,
+    // AbortSignal used to support cancellation.
+    signal = abortSignal
+  } = resolved;
+  return {
+    args,
+    backoffFactor,
+    baseDelayMs,
+    jitter,
+    maxDelayMs,
+    onRetry,
+    onRetryCancelOnFalse,
+    onRetryRethrow,
+    retries,
+    signal
+  };
+}
+// @__NO_SIDE_EFFECTS__
+async function pEach(array, callbackFn, options) {
+  const iterOpts = /* @__PURE__ */ normalizeIterationOptions(options);
+  const { concurrency, retries, signal } = iterOpts;
+  const chunks = (0, import_arrays.arrayChunk)(array, concurrency);
+  for (const chunk of chunks) {
+    if (signal?.aborted) {
+      return;
+    }
+    await Promise.allSettled(
+      chunk.map(
+        (item) => /* @__PURE__ */ pRetry((...args) => callbackFn(args[0]), {
+          ...retries,
+          args: [item],
+          signal
+        })
+      )
+    );
+  }
+}
+// @__NO_SIDE_EFFECTS__
+async function pFilter(array, callbackFn, options) {
+  const iterOpts = /* @__PURE__ */ normalizeIterationOptions(options);
+  return (await /* @__PURE__ */ pFilterChunk(
+    (0, import_arrays.arrayChunk)(array, iterOpts.concurrency),
+    callbackFn,
+    iterOpts.retries
+  )).flat();
+}
+// @__NO_SIDE_EFFECTS__
+async function pEachChunk(array, callbackFn, options) {
+  const { chunkSize = 100, ...retryOpts } = options || {};
+  const chunks = (0, import_arrays.arrayChunk)(array, chunkSize);
+  const normalizedRetryOpts = /* @__PURE__ */ normalizeRetryOptions(retryOpts);
+  const { signal } = normalizedRetryOpts;
+  for (const chunk of chunks) {
+    if (signal?.aborted) {
+      return;
+    }
+    await /* @__PURE__ */ pRetry((...args) => callbackFn(args[0]), {
+      ...normalizedRetryOpts,
+      args: [chunk]
+    });
+  }
+}
+// @__NO_SIDE_EFFECTS__
+async function pFilterChunk(chunks, callbackFn, options) {
+  const retryOpts = /* @__PURE__ */ normalizeRetryOptions(options);
+  const { signal } = retryOpts;
+  const { length } = chunks;
+  const filteredChunks = Array(length);
+  for (let i = 0; i < length; i += 1) {
+    if (signal?.aborted) {
+      filteredChunks[i] = [];
+    } else {
+      const chunk = chunks[i];
+      const settled = await Promise.allSettled(
+        chunk.map(
+          (value) => /* @__PURE__ */ pRetry((...args) => callbackFn(args[0]), {
+            ...retryOpts,
+            args: [value]
+          })
+        )
+      );
+      const predicateResults = settled.map(
+        (r) => r.status === "fulfilled" ? r.value : false
+      );
+      filteredChunks[i] = chunk.filter((_v, i2) => predicateResults[i2]);
+    }
+  }
+  return filteredChunks;
+}
+// @__NO_SIDE_EFFECTS__
+async function pRetry(callbackFn, options) {
+  const {
+    args,
+    backoffFactor,
+    baseDelayMs,
+    jitter,
+    maxDelayMs,
+    onRetry,
+    onRetryCancelOnFalse,
+    onRetryRethrow,
+    retries,
+    signal
+  } = /* @__PURE__ */ normalizeRetryOptions(options);
+  if (signal?.aborted) {
+    return void 0;
+  }
+  if (retries === 0) {
+    return await callbackFn(...args || [], { signal });
+  }
+  const timers = /* @__PURE__ */ getTimers();
+  let attempts = retries;
+  let delay = baseDelayMs;
+  let error = import_core.UNDEFINED_TOKEN;
+  while (attempts-- >= 0) {
+    if (signal?.aborted) {
+      return void 0;
+    }
+    try {
+      return await callbackFn(...args || [], { signal });
+    } catch (e) {
+      error = e;
+      if (attempts < 0) {
+        break;
+      }
+      let waitTime = delay;
+      if (jitter) {
+        waitTime += Math.floor(Math.random() * delay);
+      }
+      waitTime = Math.min(waitTime, maxDelayMs);
+      if (typeof onRetry === "function") {
+        try {
+          const result = onRetry(retries - attempts, e, waitTime);
+          if (result === false && onRetryCancelOnFalse) {
+            break;
+          }
+          if (typeof result === "number" && result >= 0) {
+            waitTime = Math.min(result, maxDelayMs);
+          }
+        } catch (e2) {
+          if (onRetryRethrow) {
+            throw e2;
+          }
+        }
+      }
+      try {
+        await timers.setTimeout(waitTime, void 0, { signal });
+      } catch {
+        return void 0;
+      }
+      if (signal?.aborted) {
+        return void 0;
+      }
+      delay = Math.min(delay * backoffFactor, maxDelayMs);
+    }
+  }
+  if (error !== import_core.UNDEFINED_TOKEN) {
+    throw error;
+  }
+  return void 0;
+}
+// @__NO_SIDE_EFFECTS__
+function resolveRetryOptions(options) {
+  const defaults = {
+    __proto__: null,
+    retries: 0,
+    baseDelayMs: 200,
+    maxDelayMs: 1e4,
+    backoffFactor: 2
+  };
+  if (typeof options === "number") {
+    return { ...defaults, retries: options };
+  }
+  return options ? { ...defaults, ...options } : defaults;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  normalizeIterationOptions,
+  normalizeRetryOptions,
+  pEach,
+  pEachChunk,
+  pFilter,
+  pFilterChunk,
+  pRetry,
+  resolveRetryOptions
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/regexps.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/regexps.d.ts
new file mode 100644
index 00000000..8e68b0cf
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/regexps.d.ts
@@ -0,0 +1,20 @@
+/**
+ * @fileoverview Regular expression utilities including escape-string-regexp implementation.
+ * Provides regex escaping and pattern matching helpers.
+ */
+// Inlined escape-string-regexp:
+// https://socket.dev/npm/package/escape-string-regexp/overview/5.0.0
+// MIT License
+// Copyright (c) Sindre Sorhus  (https://sindresorhus.com)
+/**
+ * Escape special characters in a string for use in a regular expression.
+ *
+ * @example
+ * ```typescript
+ * escapeRegExp('foo.bar')     // 'foo\\.bar'
+ * escapeRegExp('a+b*c?')     // 'a\\+b\\*c\\?'
+ * new RegExp(escapeRegExp('[test]'))  // /\[test\]/
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function escapeRegExp(str: string): string;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/regexps.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/regexps.js
new file mode 100644
index 00000000..1a09ebcc
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/regexps.js
@@ -0,0 +1,32 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var regexps_exports = {};
+__export(regexps_exports, {
+  escapeRegExp: () => escapeRegExp
+});
+module.exports = __toCommonJS(regexps_exports);
+// @__NO_SIDE_EFFECTS__
+function escapeRegExp(str) {
+  return str.replace(/[\\|{}()[\]^$+*?.]/g, "\\$&");
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  escapeRegExp
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/releases/github.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/releases/github.d.ts
new file mode 100644
index 00000000..30d59643
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/releases/github.d.ts
@@ -0,0 +1,238 @@
+import { type ArchiveFormat } from '../archives.js';
+/**
+ * Pattern for matching release assets.
+ * Can be either:
+ * - A string with glob pattern syntax
+ * - A prefix/suffix pair for explicit matching (backward compatible)
+ * - A RegExp for complex patterns
+ *
+ * String patterns support full glob syntax via picomatch.
+ * Examples:
+ * - Simple wildcard: yoga-sync-*.mjs matches yoga-sync-abc123.mjs
+ * - Complex: models-*.tar.gz matches models-2024-01-15.tar.gz
+ * - Prefix wildcard: *-models.tar.gz matches foo-models.tar.gz
+ * - Suffix wildcard: yoga-* matches yoga-layout
+ * - Brace expansion: {yoga,models}-*.{mjs,js} matches yoga-abc.mjs or models-xyz.js
+ *
+ * For backward compatibility, prefix/suffix objects are still supported but glob patterns are recommended.
+ */
+export type AssetPattern = string | {
+    prefix: string;
+    suffix: string;
+} | RegExp;
+/**
+ * Configuration for downloading a GitHub release.
+ */
+export interface DownloadGitHubReleaseConfig {
+    /** Asset name on GitHub. */
+    assetName: string;
+    /** Binary filename (e.g., 'node', 'binject'). */
+    binaryName: string;
+    /** Working directory (defaults to process.cwd()). */
+    cwd?: string;
+    /** Download destination directory. @default 'build/downloaded' */
+    downloadDir?: string;
+    /** GitHub repository owner/organization. */
+    owner: string;
+    /** Platform-arch identifier (e.g., 'linux-x64-musl'). */
+    platformArch: string;
+    /** Suppress log messages. @default false */
+    quiet?: boolean;
+    /** Remove macOS quarantine attribute after download. @default true */
+    removeMacOSQuarantine?: boolean;
+    /** GitHub repository name. */
+    repo: string;
+    /** Specific release tag to download. */
+    tag?: string;
+    /** Tool name for directory structure. */
+    toolName: string;
+    /** Tool prefix for finding latest release. */
+    toolPrefix?: string;
+}
+/**
+ * Configuration for repository access.
+ */
+export interface RepoConfig {
+    /**
+     * GitHub repository owner/organization.
+     */
+    owner: string;
+    /**
+     * GitHub repository name.
+     */
+    repo: string;
+}
+/**
+ * Socket-btm GitHub repository configuration.
+ */
+export declare const SOCKET_BTM_REPO: {
+    readonly owner: "SocketDev";
+    readonly repo: "socket-btm";
+};
+/**
+ * Create a matcher function for a pattern using picomatch for glob patterns
+ * or simple prefix/suffix matching for object patterns.
+ *
+ * @param pattern - Pattern to match (string glob, prefix/suffix object, or RegExp)
+ * @returns Function that tests if a string matches the pattern
+ *
+ * @example
+ * ```typescript
+ * const isMatch = createAssetMatcher('tool-*-linux-x64')
+ * isMatch('tool-v1.0-linux-x64')  // true
+ * isMatch('tool-v1.0-darwin-arm64')  // false
+ * ```
+ */
+export declare function createAssetMatcher(pattern: string | {
+    prefix: string;
+    suffix: string;
+} | RegExp): (input: string) => boolean;
+/**
+ * Download a binary from any GitHub repository with version caching.
+ *
+ * @param config - Download configuration
+ * @returns Path to the downloaded binary
+ *
+ * @example
+ * ```typescript
+ * const binaryPath = await downloadGitHubRelease({
+ *   owner: 'SocketDev', repo: 'socket-btm',
+ *   toolName: 'lief', toolPrefix: 'lief-',
+ *   assetName: 'lief-linux-x64', binaryName: 'lief',
+ *   platformArch: 'linux-x64',
+ * })
+ * ```
+ */
+export declare function downloadGitHubRelease(config: DownloadGitHubReleaseConfig): Promise;
+/**
+ * Download a specific release asset.
+ * Supports pattern matching for dynamic asset discovery.
+ *
+ * @param tag - Release tag name
+ * @param assetPattern - Asset name or pattern (glob string, prefix/suffix object, or RegExp)
+ * @param outputPath - Path to write the downloaded file
+ * @param repoConfig - Repository configuration (owner/repo)
+ * @param options - Additional options
+ *
+ * @example
+ * ```typescript
+ * await downloadReleaseAsset(
+ *   'v1.0.0', 'tool-linux-x64', '/tmp/tool',
+ *   { owner: 'SocketDev', repo: 'socket-btm' },
+ * )
+ * ```
+ */
+export declare function downloadReleaseAsset(tag: string, assetPattern: string | AssetPattern, outputPath: string, repoConfig: RepoConfig, options?: {
+    quiet?: boolean;
+}): Promise;
+/**
+ * Get GitHub authentication headers if token is available.
+ * Checks GH_TOKEN or GITHUB_TOKEN environment variables.
+ *
+ * @returns Headers object with Authorization header if token exists.
+ *
+ * @example
+ * ```typescript
+ * const headers = getAuthHeaders()
+ * // { Accept: 'application/vnd.github+json', Authorization: 'Bearer ...' }
+ * ```
+ */
+export declare function getAuthHeaders(): Record;
+/**
+ * Get latest release tag matching a tool prefix.
+ * Optionally filter by releases containing a matching asset.
+ *
+ * @param toolPrefix - Tool name prefix to search for (e.g., 'node-smol-')
+ * @param repoConfig - Repository configuration (owner/repo)
+ * @param options - Additional options
+ * @param options.assetPattern - Optional pattern to filter releases by matching asset
+ * @returns Latest release tag or null if not found
+ *
+ * @example
+ * ```typescript
+ * const tag = await getLatestRelease('lief-', {
+ *   owner: 'SocketDev', repo: 'socket-btm',
+ * })
+ * console.log(tag) // 'lief-2025-01-15-abc1234'
+ * ```
+ */
+export declare function getLatestRelease(toolPrefix: string, repoConfig: RepoConfig, options?: {
+    assetPattern?: AssetPattern;
+    quiet?: boolean;
+}): Promise;
+/**
+ * Get download URL for a specific release asset.
+ * Supports pattern matching for dynamic asset discovery.
+ *
+ * @param tag - Release tag name
+ * @param assetPattern - Asset name or pattern (glob string, prefix/suffix object, or RegExp)
+ * @param repoConfig - Repository configuration (owner/repo)
+ * @param options - Additional options
+ * @returns Browser download URL for the asset
+ *
+ * @example
+ * ```typescript
+ * const url = await getReleaseAssetUrl(
+ *   'v1.0.0', 'tool-linux-x64',
+ *   { owner: 'SocketDev', repo: 'socket-btm' },
+ * )
+ * ```
+ */
+export declare function getReleaseAssetUrl(tag: string, assetPattern: string | AssetPattern, repoConfig: RepoConfig, options?: {
+    quiet?: boolean;
+}): Promise;
+/**
+ * Download and extract a zip file from a GitHub release.
+ * Automatically handles downloading, extracting, and cleanup.
+ *
+ * @param tag - Release tag name
+ * @param assetPattern - Asset name or pattern (glob string, prefix/suffix object, or RegExp)
+ * @param outputDir - Directory to extract the zip contents to
+ * @param repoConfig - Repository configuration (owner/repo)
+ * @param options - Additional options
+ * @param options.quiet - Suppress log messages
+ * @param options.cleanup - Remove downloaded zip file after extraction (default: true)
+ * @returns Path to the extraction directory
+ *
+ * @example
+ * ```typescript
+ * const outputDir = await downloadAndExtractZip(
+ *   'v1.0.0', 'models-*.zip', '/tmp/models',
+ *   { owner: 'SocketDev', repo: 'socket-btm' },
+ * )
+ * ```
+ */
+export declare function downloadAndExtractZip(tag: string, assetPattern: string | AssetPattern, outputDir: string, repoConfig: RepoConfig, options?: {
+    cleanup?: boolean;
+    quiet?: boolean;
+}): Promise;
+/**
+ * Download and extract an archive from a GitHub release.
+ * Supports zip, tar, tar.gz, and tgz formats.
+ * Automatically handles downloading, extracting, and cleanup.
+ *
+ * @param tag - Release tag name
+ * @param assetPattern - Asset name or pattern (glob string, prefix/suffix object, or RegExp)
+ * @param outputDir - Directory to extract the archive contents to
+ * @param repoConfig - Repository configuration (owner/repo)
+ * @param options - Additional options
+ * @param options.quiet - Suppress log messages
+ * @param options.cleanup - Remove downloaded archive after extraction (default: true)
+ * @param options.strip - Strip leading path components (like tar --strip-components)
+ * @param options.format - Archive format (auto-detected if not specified)
+ * @returns Path to the extraction directory
+ *
+ * @example
+ * ```typescript
+ * const outputDir = await downloadAndExtractArchive(
+ *   'v1.0.0', 'data-*.tar.gz', '/tmp/data',
+ *   { owner: 'SocketDev', repo: 'socket-btm' },
+ * )
+ * ```
+ */
+export declare function downloadAndExtractArchive(tag: string, assetPattern: string | AssetPattern, outputDir: string, repoConfig: RepoConfig, options?: {
+    cleanup?: boolean;
+    format?: ArchiveFormat;
+    quiet?: boolean;
+    strip?: number;
+}): Promise;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/releases/github.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/releases/github.js
new file mode 100644
index 00000000..dafb45f1
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/releases/github.js
@@ -0,0 +1,421 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var github_exports = {};
+__export(github_exports, {
+  SOCKET_BTM_REPO: () => SOCKET_BTM_REPO,
+  createAssetMatcher: () => createAssetMatcher,
+  downloadAndExtractArchive: () => downloadAndExtractArchive,
+  downloadAndExtractZip: () => downloadAndExtractZip,
+  downloadGitHubRelease: () => downloadGitHubRelease,
+  downloadReleaseAsset: () => downloadReleaseAsset,
+  getAuthHeaders: () => getAuthHeaders,
+  getLatestRelease: () => getLatestRelease,
+  getReleaseAssetUrl: () => getReleaseAssetUrl
+});
+module.exports = __toCommonJS(github_exports);
+var import_node_process = __toESM(require("node:process"));
+var import_picomatch = __toESM(require("../external/picomatch.js"));
+var import_archives = require("../archives.js");
+var import_fs = require("../fs.js");
+var import_http_request = require("../http-request.js");
+var import_logger = require("../logger.js");
+var import_promises = require("../promises.js");
+var import_spawn = require("../spawn.js");
+const RETRY_CONFIG = Object.freeze({
+  __proto__: null,
+  // Exponential backoff: delay doubles with each retry (5s, 10s, 20s).
+  backoffFactor: 2,
+  // Initial delay before first retry.
+  baseDelayMs: 5e3,
+  // Maximum number of retry attempts (excluding initial request).
+  retries: 2
+});
+const SOCKET_BTM_REPO = {
+  owner: "SocketDev",
+  repo: "socket-btm"
+};
+const logger = (0, import_logger.getDefaultLogger)();
+let _fs;
+let _path;
+// @__NO_SIDE_EFFECTS__
+function getFs() {
+  if (_fs === void 0) {
+    _fs = require("fs");
+  }
+  return _fs;
+}
+// @__NO_SIDE_EFFECTS__
+function getPath() {
+  if (_path === void 0) {
+    _path = require("path");
+  }
+  return _path;
+}
+function createAssetMatcher(pattern) {
+  if (typeof pattern === "string") {
+    const isMatch = (0, import_picomatch.default)(pattern);
+    return (input) => isMatch(input);
+  }
+  if (pattern instanceof RegExp) {
+    return (input) => pattern.test(input);
+  }
+  const { prefix, suffix } = pattern;
+  return (input) => input.startsWith(prefix) && input.endsWith(suffix);
+}
+async function downloadGitHubRelease(config) {
+  const {
+    assetName,
+    binaryName,
+    cwd = import_node_process.default.cwd(),
+    downloadDir = "build/downloaded",
+    owner,
+    platformArch,
+    quiet = false,
+    removeMacOSQuarantine = true,
+    repo,
+    tag: explicitTag,
+    toolName,
+    toolPrefix
+  } = config;
+  let tag;
+  if (explicitTag) {
+    tag = explicitTag;
+  } else if (toolPrefix) {
+    const latestTag = await getLatestRelease(
+      toolPrefix,
+      { owner, repo },
+      { quiet }
+    );
+    if (!latestTag) {
+      throw new Error(`No ${toolPrefix} release found in ${owner}/${repo}`);
+    }
+    tag = latestTag;
+  } else {
+    throw new Error("Either toolPrefix or tag must be provided");
+  }
+  const path = /* @__PURE__ */ getPath();
+  const resolvedDownloadDir = path.isAbsolute(downloadDir) ? downloadDir : path.join(cwd, downloadDir);
+  const binaryDir = resolvedDownloadDir;
+  const binaryPath = path.join(binaryDir, binaryName);
+  const versionPath = path.join(binaryDir, ".version");
+  const fs = /* @__PURE__ */ getFs();
+  if (fs.existsSync(versionPath) && fs.existsSync(binaryPath)) {
+    const cachedVersion = (await fs.promises.readFile(versionPath, "utf8")).trim();
+    if (cachedVersion === tag && fs.existsSync(binaryPath)) {
+      if (!quiet) {
+        logger.info(`Using cached ${toolName} (${platformArch}): ${binaryPath}`);
+      }
+      return binaryPath;
+    }
+  }
+  if (!quiet) {
+    logger.info(`Downloading ${toolName} for ${platformArch}...`);
+  }
+  await downloadReleaseAsset(
+    tag,
+    assetName,
+    binaryPath,
+    { owner, repo },
+    { quiet }
+  );
+  const isWindows = binaryName.endsWith(".exe");
+  if (!isWindows) {
+    fs.chmodSync(binaryPath, 493);
+    if (removeMacOSQuarantine && import_node_process.default.platform === "darwin" && platformArch.startsWith("darwin")) {
+      try {
+        await (0, import_spawn.spawn)("xattr", ["-d", "com.apple.quarantine", binaryPath], {
+          stdio: "ignore"
+        });
+      } catch {
+      }
+    }
+  }
+  await fs.promises.writeFile(versionPath, tag, "utf8");
+  if (!quiet) {
+    logger.info(`Downloaded ${toolName} to ${binaryPath}`);
+  }
+  return binaryPath;
+}
+async function downloadReleaseAsset(tag, assetPattern, outputPath, repoConfig, options = {}) {
+  const { owner, repo } = repoConfig;
+  const { quiet = false } = options;
+  const downloadUrl = await getReleaseAssetUrl(
+    tag,
+    assetPattern,
+    { owner, repo },
+    { quiet }
+  );
+  if (!downloadUrl) {
+    const patternDesc = typeof assetPattern === "string" ? assetPattern : "matching pattern";
+    throw new Error(`Asset ${patternDesc} not found in release ${tag}`);
+  }
+  const path = /* @__PURE__ */ getPath();
+  await (0, import_fs.safeMkdir)(path.dirname(outputPath));
+  await (0, import_http_request.httpDownload)(downloadUrl, outputPath, {
+    logger: quiet ? void 0 : logger,
+    progressInterval: 10,
+    retries: 2,
+    retryDelay: 5e3
+  });
+}
+function getAuthHeaders() {
+  const token = import_node_process.default.env["GH_TOKEN"] || import_node_process.default.env["GITHUB_TOKEN"];
+  const headers = {
+    Accept: "application/vnd.github+json",
+    "X-GitHub-Api-Version": "2022-11-28"
+  };
+  if (token) {
+    headers["Authorization"] = `Bearer ${token}`;
+  }
+  return headers;
+}
+async function getLatestRelease(toolPrefix, repoConfig, options = {}) {
+  const { assetPattern, quiet = false } = options;
+  const { owner, repo } = repoConfig;
+  const isMatch = assetPattern ? createAssetMatcher(assetPattern) : void 0;
+  return await (0, import_promises.pRetry)(
+    async () => {
+      const response = await (0, import_http_request.httpRequest)(
+        `https://api.github.com/repos/${owner}/${repo}/releases?per_page=100`,
+        {
+          headers: getAuthHeaders()
+        }
+      );
+      if (!response.ok) {
+        throw new Error(`Failed to fetch releases: ${response.status}`);
+      }
+      let releases;
+      try {
+        releases = JSON.parse(response.body.toString("utf8"));
+      } catch (cause) {
+        throw new Error(
+          `Failed to parse GitHub releases response from https://api.github.com/repos/${owner}/${repo}/releases`,
+          { cause }
+        );
+      }
+      const matchingReleases = releases.filter((release) => {
+        const { assets, tag_name: tag2 } = release;
+        if (!tag2.startsWith(toolPrefix)) {
+          return false;
+        }
+        if (!assets || assets.length === 0) {
+          return false;
+        }
+        if (isMatch) {
+          const hasMatchingAsset = assets.some(
+            (a) => isMatch(a.name)
+          );
+          if (!hasMatchingAsset) {
+            return false;
+          }
+        }
+        return true;
+      });
+      if (matchingReleases.length === 0) {
+        if (!quiet) {
+          logger.info(`No ${toolPrefix} release found in latest 100 releases`);
+        }
+        return null;
+      }
+      matchingReleases.sort(
+        (a, b) => new Date(b.published_at).getTime() - new Date(a.published_at).getTime()
+      );
+      const latestRelease = matchingReleases[0];
+      const tag = latestRelease.tag_name;
+      if (!quiet) {
+        logger.info(`Found release: ${tag}`);
+      }
+      return tag;
+    },
+    {
+      ...RETRY_CONFIG,
+      onRetry: (attempt, error) => {
+        if (!quiet) {
+          logger.info(
+            `Retry attempt ${attempt + 1}/${RETRY_CONFIG.retries + 1} for ${toolPrefix} release...`
+          );
+          logger.warn(
+            `Attempt ${attempt + 1}/${RETRY_CONFIG.retries + 1} failed: ${error instanceof Error ? error.message : String(error)}`
+          );
+        }
+        return void 0;
+      }
+    }
+  );
+}
+async function getReleaseAssetUrl(tag, assetPattern, repoConfig, options = {}) {
+  const { owner, repo } = repoConfig;
+  const { quiet = false } = options;
+  const isMatch = typeof assetPattern === "string" && !assetPattern.includes("*") && !assetPattern.includes("{") ? (input) => input === assetPattern : createAssetMatcher(assetPattern);
+  return await (0, import_promises.pRetry)(
+    async () => {
+      const response = await (0, import_http_request.httpRequest)(
+        `https://api.github.com/repos/${owner}/${repo}/releases/tags/${tag}`,
+        {
+          headers: getAuthHeaders()
+        }
+      );
+      if (!response.ok) {
+        throw new Error(`Failed to fetch release ${tag}: ${response.status}`);
+      }
+      let release;
+      try {
+        release = JSON.parse(response.body.toString("utf8"));
+      } catch (cause) {
+        throw new Error(
+          `Failed to parse GitHub release response for tag ${tag}`,
+          { cause }
+        );
+      }
+      const assets = release.assets;
+      if (!Array.isArray(assets)) {
+        throw new Error(`Release ${tag} has no assets`);
+      }
+      const asset = assets.find((a) => isMatch(a.name));
+      if (!asset) {
+        const patternDesc = typeof assetPattern === "string" ? assetPattern : "matching pattern";
+        throw new Error(`Asset ${patternDesc} not found in release ${tag}`);
+      }
+      if (!quiet) {
+        logger.info(`Found asset: ${asset.name}`);
+      }
+      return asset.browser_download_url;
+    },
+    {
+      ...RETRY_CONFIG,
+      onRetry: (attempt, error) => {
+        if (!quiet) {
+          logger.info(
+            `Retry attempt ${attempt + 1}/${RETRY_CONFIG.retries + 1} for asset URL...`
+          );
+          logger.warn(
+            `Attempt ${attempt + 1}/${RETRY_CONFIG.retries + 1} failed: ${error instanceof Error ? error.message : String(error)}`
+          );
+        }
+        return void 0;
+      }
+    }
+  );
+}
+async function downloadAndExtractZip(tag, assetPattern, outputDir, repoConfig, options = {}) {
+  const { cleanup = true, quiet = false } = options;
+  const path = /* @__PURE__ */ getPath();
+  const fs = /* @__PURE__ */ getFs();
+  await (0, import_fs.safeMkdir)(outputDir);
+  const zipPath = path.join(outputDir, "__temp_download__.zip");
+  if (!quiet) {
+    logger.info(`Downloading zip asset from release ${tag}...`);
+  }
+  await downloadReleaseAsset(tag, assetPattern, zipPath, repoConfig, { quiet });
+  if (!quiet) {
+    logger.info(`Extracting zip to ${outputDir}...`);
+  }
+  try {
+    await (0, import_archives.extractArchive)(zipPath, outputDir, { quiet });
+    if (!quiet) {
+      logger.info(`Extracted zip contents to ${outputDir}`);
+    }
+  } catch (cause) {
+    throw new Error(`Failed to extract zip file: ${zipPath}`, { cause });
+  } finally {
+    if (cleanup) {
+      try {
+        await fs.promises.unlink(zipPath);
+        if (!quiet) {
+          logger.info("Cleaned up temporary zip file");
+        }
+      } catch (error) {
+        if (!quiet) {
+          logger.warn(`Failed to cleanup zip file: ${error}`);
+        }
+      }
+    }
+  }
+  return outputDir;
+}
+async function downloadAndExtractArchive(tag, assetPattern, outputDir, repoConfig, options = {}) {
+  const { cleanup = true, format, quiet = false, strip } = options;
+  const path = /* @__PURE__ */ getPath();
+  const fs = /* @__PURE__ */ getFs();
+  await (0, import_fs.safeMkdir)(outputDir);
+  let ext = ".archive";
+  if (format) {
+    ext = format === "tar.gz" ? ".tar.gz" : `.${format}`;
+  } else if (typeof assetPattern === "string") {
+    const detectedFormat = (0, import_archives.detectArchiveFormat)(assetPattern);
+    if (detectedFormat) {
+      ext = detectedFormat === "tar.gz" ? ".tar.gz" : `.${detectedFormat}`;
+    }
+  }
+  const archivePath = path.join(outputDir, `__temp_download__${ext}`);
+  if (!quiet) {
+    logger.info(`Downloading archive from release ${tag}...`);
+  }
+  await downloadReleaseAsset(tag, assetPattern, archivePath, repoConfig, {
+    quiet
+  });
+  if (!quiet) {
+    logger.info(`Extracting archive to ${outputDir}...`);
+  }
+  try {
+    await (0, import_archives.extractArchive)(archivePath, outputDir, { quiet, strip });
+    if (!quiet) {
+      logger.info(`Extracted archive contents to ${outputDir}`);
+    }
+  } catch (cause) {
+    throw new Error(`Failed to extract archive: ${archivePath}`, { cause });
+  } finally {
+    if (cleanup) {
+      try {
+        await fs.promises.unlink(archivePath);
+        if (!quiet) {
+          logger.info("Cleaned up temporary archive file");
+        }
+      } catch (error) {
+        if (!quiet) {
+          logger.warn(`Failed to cleanup archive file: ${error}`);
+        }
+      }
+    }
+  }
+  return outputDir;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  SOCKET_BTM_REPO,
+  createAssetMatcher,
+  downloadAndExtractArchive,
+  downloadAndExtractZip,
+  downloadGitHubRelease,
+  downloadReleaseAsset,
+  getAuthHeaders,
+  getLatestRelease,
+  getReleaseAssetUrl
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/releases/socket-btm.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/releases/socket-btm.d.ts
new file mode 100644
index 00000000..9d55c82b
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/releases/socket-btm.d.ts
@@ -0,0 +1,136 @@
+/**
+ * @fileoverview Socket-btm release download utilities.
+ */
+import { type Arch, type Libc, type Platform } from '../constants/platform.js';
+import { type AssetPattern } from './github.js';
+export type { Arch, Libc, Platform };
+/**
+ * Configuration for downloading socket-btm generic assets.
+ */
+export interface SocketBtmAssetConfig {
+    /** Asset name or pattern on GitHub. */
+    asset: string | AssetPattern;
+    /** @internal Discriminator fields */
+    bin?: never;
+    /** Working directory (defaults to process.cwd()). */
+    cwd?: string | undefined;
+    /** Download destination directory. @default 'build/downloaded' */
+    downloadDir?: string | undefined;
+    /** @internal Discriminator fields */
+    libc?: never;
+    /** Output filename. @default resolved asset name */
+    output?: string | undefined;
+    /** Suppress log messages. @default false */
+    quiet?: boolean | undefined;
+    /** Remove macOS quarantine attribute after download. @default false */
+    removeMacOSQuarantine?: boolean | undefined;
+    /** Specific release tag to download. */
+    tag?: string | undefined;
+    /** @internal Discriminator fields */
+    targetArch?: never;
+    /** @internal Discriminator fields */
+    targetPlatform?: never;
+}
+/**
+ * Configuration for downloading socket-btm binary releases.
+ */
+export interface SocketBtmBinaryConfig {
+    /** @internal Discriminator field */
+    asset?: never;
+    /** Binary/executable name (without extension). @default tool */
+    bin?: string | undefined;
+    /** Working directory (defaults to process.cwd()). */
+    cwd?: string | undefined;
+    /** Download destination directory. @default 'build/downloaded' */
+    downloadDir?: string | undefined;
+    /** Linux libc variant. Auto-detected if not specified. */
+    libc?: Libc | undefined;
+    /** Suppress log messages. @default false */
+    quiet?: boolean | undefined;
+    /** Remove macOS quarantine attribute after download. @default true */
+    removeMacOSQuarantine?: boolean | undefined;
+    /** Specific release tag to download. */
+    tag?: string | undefined;
+    /** Target architecture (defaults to current arch). */
+    targetArch?: Arch | undefined;
+    /** Target platform (defaults to current platform). */
+    targetPlatform?: Platform | undefined;
+}
+/**
+ * Configuration for downloading socket-btm releases (binary or asset).
+ */
+export type SocketBtmReleaseConfig = SocketBtmBinaryConfig | SocketBtmAssetConfig;
+/**
+ * Detect the libc variant (musl or glibc) on Linux systems.
+ * Returns undefined for non-Linux platforms.
+ *
+ * @returns 'musl', 'glibc', or undefined (for non-Linux)
+ *
+ * @example
+ * ```typescript
+ * const libc = detectLibc()
+ * console.log(libc) // 'glibc', 'musl', or undefined
+ * ```
+ */
+export declare function detectLibc(): Libc | undefined;
+/**
+ * Download a release from socket-btm.
+ *
+ * @param tool - Tool/package name for release matching (e.g., 'lief', 'curl')
+ * @param options - Download configuration
+ * @returns Path to the downloaded file
+ *
+ * @example
+ * ```typescript
+ * const binPath = await downloadSocketBtmRelease('lief', {
+ *   downloadDir: '/tmp/build/downloaded',
+ * })
+ * ```
+ */
+export declare function downloadSocketBtmRelease(tool: string, options: SocketBtmReleaseConfig | undefined): Promise;
+/**
+ * Get asset name for a socket-btm binary.
+ *
+ * @param binaryBaseName - Binary basename (e.g., 'binject', 'node')
+ * @param platform - Target platform
+ * @param arch - Target architecture
+ * @param libc - Linux libc variant (optional)
+ * @returns Asset name (e.g., 'binject-darwin-arm64', 'node-linux-x64-musl')
+ *
+ * @example
+ * ```typescript
+ * getBinaryAssetName('lief', 'linux', 'x64', 'musl')
+ * // 'lief-linux-x64-musl'
+ * ```
+ */
+export declare function getBinaryAssetName(binaryBaseName: string, platform: Platform, arch: Arch, libc?: Libc | undefined): string;
+/**
+ * Get binary filename for output.
+ *
+ * @param binaryBaseName - Binary basename (e.g., 'node', 'binject')
+ * @param platform - Target platform
+ * @returns Binary filename (e.g., 'node', 'node.exe')
+ *
+ * @example
+ * ```typescript
+ * getBinaryName('node', 'win32')  // 'node.exe'
+ * getBinaryName('node', 'linux')  // 'node'
+ * ```
+ */
+export declare function getBinaryName(binaryBaseName: string, platform: Platform): string;
+/**
+ * Get platform-arch identifier for directory structure.
+ * Uses 'win' instead of 'win32' for file/folder names.
+ *
+ * @param platform - Target platform
+ * @param arch - Target architecture
+ * @param libc - Linux libc variant (optional)
+ * @returns Platform-arch identifier (e.g., 'darwin-arm64', 'linux-x64-musl', 'win-x64')
+ *
+ * @example
+ * ```typescript
+ * getPlatformArch('linux', 'x64', 'musl')  // 'linux-x64-musl'
+ * getPlatformArch('darwin', 'arm64')  // 'darwin-arm64'
+ * ```
+ */
+export declare function getPlatformArch(platform: Platform, arch: Arch, libc?: Libc | undefined): string;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/releases/socket-btm.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/releases/socket-btm.js
new file mode 100644
index 00000000..4eab86dc
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/releases/socket-btm.js
@@ -0,0 +1,208 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var socket_btm_exports = {};
+__export(socket_btm_exports, {
+  detectLibc: () => detectLibc,
+  downloadSocketBtmRelease: () => downloadSocketBtmRelease,
+  getBinaryAssetName: () => getBinaryAssetName,
+  getBinaryName: () => getBinaryName,
+  getPlatformArch: () => getPlatformArch
+});
+module.exports = __toCommonJS(socket_btm_exports);
+var import_platform = require("../constants/platform.js");
+var import_github = require("./github.js");
+const PLATFORM_MAP = {
+  __proto__: null,
+  darwin: "darwin",
+  linux: "linux",
+  win32: "win"
+};
+const ARCH_MAP = {
+  __proto__: null,
+  arm64: "arm64",
+  x64: "x64"
+};
+let _fs;
+// @__NO_SIDE_EFFECTS__
+function getFs() {
+  if (_fs === void 0) {
+    _fs = require("fs");
+  }
+  return _fs;
+}
+function detectLibc() {
+  if ((0, import_platform.getPlatform)() !== "linux") {
+    return void 0;
+  }
+  try {
+    const fs = /* @__PURE__ */ getFs();
+    const muslPaths = [
+      "/lib/ld-musl-x86_64.so.1",
+      "/lib/ld-musl-aarch64.so.1",
+      "/usr/lib/ld-musl-x86_64.so.1",
+      "/usr/lib/ld-musl-aarch64.so.1"
+    ];
+    for (const path of muslPaths) {
+      if (fs.existsSync(path)) {
+        return "musl";
+      }
+    }
+    return "glibc";
+  } catch {
+    return "glibc";
+  }
+}
+async function downloadSocketBtmRelease(tool, options) {
+  const config = Object.assign(/* @__PURE__ */ Object.create(null), options);
+  const { cwd, downloadDir, quiet = false, tag } = config;
+  const toolPrefix = `${tool}-`;
+  let downloadConfig;
+  if (options && "asset" in options) {
+    const assetConfig = Object.assign(
+      /* @__PURE__ */ Object.create(null),
+      options
+    );
+    const { asset, output, removeMacOSQuarantine = false } = assetConfig;
+    let resolvedAsset;
+    let resolvedTag = tag;
+    const isExactMatch = typeof asset === "string" && !asset.includes("*");
+    if (isExactMatch) {
+      resolvedAsset = asset;
+    } else {
+      if (tag) {
+        throw new Error(
+          "Cannot use asset pattern with explicit tag. Either provide exact asset name or omit tag."
+        );
+      }
+      resolvedTag = await (0, import_github.getLatestRelease)(toolPrefix, import_github.SOCKET_BTM_REPO, {
+        assetPattern: asset,
+        quiet
+      });
+      if (!resolvedTag) {
+        throw new Error(`No ${tool} release with matching asset pattern found`);
+      }
+      const assetUrl = await (0, import_github.getReleaseAssetUrl)(
+        resolvedTag,
+        asset,
+        import_github.SOCKET_BTM_REPO,
+        {
+          quiet
+        }
+      );
+      if (!assetUrl) {
+        throw new Error(`No matching asset found in release ${resolvedTag}`);
+      }
+      resolvedAsset = assetUrl.split("/").pop() || asset.toString();
+    }
+    const outputName = output || resolvedAsset;
+    const platformArch = "assets";
+    downloadConfig = {
+      owner: import_github.SOCKET_BTM_REPO.owner,
+      repo: import_github.SOCKET_BTM_REPO.repo,
+      cwd,
+      downloadDir,
+      toolName: tool,
+      platformArch,
+      binaryName: outputName,
+      assetName: resolvedAsset,
+      toolPrefix,
+      tag: resolvedTag,
+      quiet,
+      removeMacOSQuarantine
+    };
+  } else {
+    const binaryConfig = Object.assign(
+      /* @__PURE__ */ Object.create(null),
+      options
+    );
+    const {
+      bin,
+      libc = detectLibc(),
+      removeMacOSQuarantine = true,
+      targetArch = (0, import_platform.getArch)(),
+      targetPlatform = (0, import_platform.getPlatform)()
+    } = binaryConfig;
+    const baseName = bin || tool;
+    const assetName = getBinaryAssetName(
+      baseName,
+      targetPlatform,
+      targetArch,
+      libc
+    );
+    const platformArch = getPlatformArch(targetPlatform, targetArch, libc);
+    const binaryName = getBinaryName(baseName, targetPlatform);
+    downloadConfig = {
+      owner: import_github.SOCKET_BTM_REPO.owner,
+      repo: import_github.SOCKET_BTM_REPO.repo,
+      cwd,
+      downloadDir,
+      toolName: tool,
+      platformArch,
+      binaryName,
+      assetName,
+      toolPrefix,
+      tag,
+      quiet,
+      removeMacOSQuarantine
+    };
+  }
+  return await (0, import_github.downloadGitHubRelease)(downloadConfig);
+}
+function getBinaryAssetName(binaryBaseName, platform, arch, libc) {
+  const mappedArch = ARCH_MAP[arch];
+  if (!mappedArch) {
+    throw new Error(`Unsupported architecture: ${arch}`);
+  }
+  const muslSuffix = platform === "linux" && libc === "musl" ? "-musl" : "";
+  const ext = platform === "win32" ? ".exe" : "";
+  if (platform === "darwin") {
+    return `${binaryBaseName}-darwin-${mappedArch}${ext}`;
+  }
+  if (platform === "linux") {
+    return `${binaryBaseName}-linux-${mappedArch}${muslSuffix}${ext}`;
+  }
+  if (platform === "win32") {
+    return `${binaryBaseName}-win-${mappedArch}${ext}`;
+  }
+  throw new Error(`Unsupported platform: ${platform}`);
+}
+function getBinaryName(binaryBaseName, platform) {
+  return platform === "win32" ? `${binaryBaseName}.exe` : binaryBaseName;
+}
+function getPlatformArch(platform, arch, libc) {
+  const mappedPlatform = PLATFORM_MAP[platform];
+  if (!mappedPlatform) {
+    throw new Error(`Unsupported platform: ${platform}`);
+  }
+  const mappedArch = ARCH_MAP[arch];
+  if (!mappedArch) {
+    throw new Error(`Unsupported architecture: ${arch}`);
+  }
+  const muslSuffix = platform === "linux" && libc === "musl" ? "-musl" : "";
+  return `${mappedPlatform}-${mappedArch}${muslSuffix}`;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  detectLibc,
+  downloadSocketBtmRelease,
+  getBinaryAssetName,
+  getBinaryName,
+  getPlatformArch
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/sea.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/sea.d.ts
new file mode 100644
index 00000000..34d0eb9c
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/sea.d.ts
@@ -0,0 +1,25 @@
+/**
+ * Get the current SEA binary path.
+ * Only valid when running as a SEA binary.
+ *
+ * @example
+ * ```typescript
+ * const binPath = getSeaBinaryPath()
+ * if (binPath) {
+ *   console.log(`Running as SEA binary: ${binPath}`)
+ * }
+ * ```
+ */
+export declare function getSeaBinaryPath(): string | undefined;
+/**
+ * Detect if the current process is running as a SEA binary.
+ * Uses Node.js 24+ native API with caching for performance.
+ *
+ * @example
+ * ```typescript
+ * if (isSeaBinary()) {
+ *   console.log('Running as a Single Executable Application')
+ * }
+ * ```
+ */
+export declare function isSeaBinary(): boolean;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/sea.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/sea.js
new file mode 100644
index 00000000..52a3fbce
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/sea.js
@@ -0,0 +1,57 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var sea_exports = {};
+__export(sea_exports, {
+  getSeaBinaryPath: () => getSeaBinaryPath,
+  isSeaBinary: () => isSeaBinary
+});
+module.exports = __toCommonJS(sea_exports);
+var import_node_process = __toESM(require("node:process"));
+var import_normalize = require("./paths/normalize");
+let _isSea;
+function getSeaBinaryPath() {
+  return isSeaBinary() && import_node_process.default.argv[0] ? (0, import_normalize.normalizePath)(import_node_process.default.argv[0]) : void 0;
+}
+function isSeaBinary() {
+  if (_isSea === void 0) {
+    try {
+      const seaModule = require("node:sea");
+      _isSea = seaModule.isSea();
+    } catch {
+      _isSea = false;
+    }
+  }
+  return _isSea ?? false;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  getSeaBinaryPath,
+  isSeaBinary
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/shadow.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/shadow.d.ts
new file mode 100644
index 00000000..b8d02132
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/shadow.d.ts
@@ -0,0 +1,24 @@
+export interface ShadowInstallationOptions {
+    cwd?: string | undefined;
+    win32?: boolean | undefined;
+}
+/**
+ * Determines if shadow binaries should be installed.
+ * Shadows should NOT be installed when:
+ * - Running in a temporary execution context (exec/npx/dlx)
+ * - On Windows with an existing binary path (required for Windows to function)
+ *
+ * @param binPath - Path to the binary being shadowed
+ * @param options - Configuration options
+ * @param options.cwd - Current working directory path to check
+ * @param options.win32 - Whether running on Windows
+ * @returns true if shadow installation should be skipped
+ *
+ * @example
+ * ```typescript
+ * if (shouldSkipShadow(binPath, { cwd: process.cwd() })) {
+ *   console.log('Skipping shadow binary installation')
+ * }
+ * ```
+ */
+export declare function shouldSkipShadow(binPath: string, options?: ShadowInstallationOptions | undefined): boolean;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/shadow.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/shadow.js
new file mode 100644
index 00000000..a8daa77c
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/shadow.js
@@ -0,0 +1,71 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var shadow_exports = {};
+__export(shadow_exports, {
+  shouldSkipShadow: () => shouldSkipShadow
+});
+module.exports = __toCommonJS(shadow_exports);
+var import_node_process = __toESM(require("node:process"));
+var import_normalize = require("./paths/normalize");
+function shouldSkipShadow(binPath, options) {
+  const { cwd = import_node_process.default.cwd(), win32 = false } = {
+    __proto__: null,
+    ...options
+  };
+  if (win32 && binPath) {
+    return true;
+  }
+  const userAgent = import_node_process.default.env["npm_config_user_agent"];
+  if (userAgent?.includes("exec") || userAgent?.includes("npx") || userAgent?.includes("dlx")) {
+    return true;
+  }
+  const normalizedCwd = (0, import_normalize.normalizePath)(cwd);
+  const npmCache = import_node_process.default.env["npm_config_cache"];
+  if (npmCache && normalizedCwd.includes((0, import_normalize.normalizePath)(npmCache))) {
+    return true;
+  }
+  const tempPatterns = [
+    // npm's npx cache directory
+    "_npx",
+    // pnpm dlx temporary store
+    ".pnpm-store",
+    // Common dlx directory prefix
+    "dlx-",
+    // Yarn Berry PnP virtual packages.
+    ".yarn/$$",
+    // Yarn on Windows uses normalized forward slash paths.
+    "AppData/Local/Temp/xfs-"
+  ];
+  return tempPatterns.some((pattern) => normalizedCwd.includes(pattern));
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  shouldSkipShadow
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/signal-exit.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/signal-exit.d.ts
new file mode 100644
index 00000000..7f82696b
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/signal-exit.d.ts
@@ -0,0 +1,50 @@
+/**
+ * Load signal handlers and hook into process exit events.
+ *
+ * @example
+ * ```typescript
+ * load()
+ * // Signal handlers are now active
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function load(): void;
+export interface OnExitOptions {
+    alwaysLast?: boolean;
+}
+/**
+ * Register a callback to run on process exit or signal.
+ *
+ * @example
+ * ```typescript
+ * const remove = onExit((code, signal) => {
+ *   console.log(`Exiting with code ${code}, signal ${signal}`)
+ * })
+ * // Later, to unregister:
+ * remove()
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function onExit(cb: (code: number | null, signal: string | null) => void, options?: OnExitOptions | undefined): () => void;
+/**
+ * Get the list of signals that are currently being monitored.
+ *
+ * @example
+ * ```typescript
+ * const sigs = signals()
+ * console.log(sigs) // ['SIGABRT', 'SIGALRM', 'SIGHUP', ...]
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function signals(): string[];
+/**
+ * Unload signal handlers and restore original process behavior.
+ *
+ * @example
+ * ```typescript
+ * unload()
+ * // Signal handlers are now removed
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function unload(): void;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/signal-exit.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/signal-exit.js
new file mode 100644
index 00000000..b8747120
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/signal-exit.js
@@ -0,0 +1,246 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var signal_exit_exports = {};
+__export(signal_exit_exports, {
+  load: () => load,
+  onExit: () => onExit,
+  signals: () => signals,
+  unload: () => unload
+});
+module.exports = __toCommonJS(signal_exit_exports);
+const ReflectApply = Reflect.apply;
+const globalProcess = globalThis.process;
+const originalProcessEmit = globalProcess?.emit;
+const platform = globalProcess?.platform ?? "";
+const originalProcessReallyExit = globalProcess?.reallyExit;
+const WIN32 = platform === "win32";
+let _events;
+// @__NO_SIDE_EFFECTS__
+function getEvents() {
+  if (_events === void 0) {
+    _events = require("events");
+  }
+  return _events;
+}
+let _emitter;
+// @__NO_SIDE_EFFECTS__
+function getEmitter() {
+  if (_emitter === void 0) {
+    if (globalProcess?.__signal_exit_emitter__) {
+      _emitter = globalProcess.__signal_exit_emitter__;
+    } else if (globalProcess) {
+      const EventEmitter = (/* @__PURE__ */ getEvents()).EventEmitter;
+      _emitter = globalProcess.__signal_exit_emitter__ = new EventEmitter();
+      _emitter.count = 0;
+      _emitter.emitted = { __proto__: null };
+    }
+    if (_emitter && !_emitter.infinite) {
+      _emitter.setMaxListeners(Number.POSITIVE_INFINITY);
+      _emitter.infinite = true;
+    }
+  }
+  return _emitter;
+}
+let _sigListeners;
+// @__NO_SIDE_EFFECTS__
+function getSignalListeners() {
+  if (_sigListeners === void 0) {
+    _sigListeners = { __proto__: null };
+    const emitter = /* @__PURE__ */ getEmitter();
+    const sigs = /* @__PURE__ */ signals();
+    for (const sig of sigs) {
+      _sigListeners[sig] = function listener() {
+        const listeners = globalProcess?.listeners(sig) || [];
+        if (listeners.length === emitter.count) {
+          /* @__PURE__ */ unload();
+          /* @__PURE__ */ emit("exit", null, sig);
+          /* @__PURE__ */ emit("afterexit", null, sig);
+          const killSig = WIN32 && sig === "SIGHUP" ? "SIGINT" : sig;
+          globalProcess?.kill(globalProcess?.pid, killSig);
+        }
+      };
+    }
+  }
+  return _sigListeners;
+}
+// @__NO_SIDE_EFFECTS__
+function emit(event, code, signal) {
+  const emitter = /* @__PURE__ */ getEmitter();
+  if (emitter.emitted?.[event]) {
+    return;
+  }
+  if (emitter.emitted) {
+    emitter.emitted[event] = true;
+  }
+  emitter.emit(event, code, signal);
+}
+let loaded = false;
+// @__NO_SIDE_EFFECTS__
+function load() {
+  if (loaded || !globalProcess) {
+    return;
+  }
+  loaded = true;
+  const emitter = /* @__PURE__ */ getEmitter();
+  if (emitter.count !== void 0) {
+    emitter.count += 1;
+  }
+  const sigs = /* @__PURE__ */ signals();
+  const sigListeners = /* @__PURE__ */ getSignalListeners();
+  _signals = sigs.filter((sig) => {
+    try {
+      globalProcess.on(
+        sig,
+        sigListeners[sig]
+      );
+      return true;
+    } catch {
+    }
+    return false;
+  });
+  globalProcess.emit = processEmit;
+  globalProcess.reallyExit = processReallyExit;
+}
+// @__NO_SIDE_EFFECTS__
+function processEmit(eventName, exitCode, ...args) {
+  if (eventName === "exit") {
+    let actualExitCode = exitCode;
+    if (actualExitCode === void 0) {
+      const processExitCode = globalProcess?.exitCode;
+      actualExitCode = typeof processExitCode === "number" ? processExitCode : void 0;
+    } else if (globalProcess) {
+      globalProcess.exitCode = actualExitCode;
+    }
+    const result = ReflectApply(
+      originalProcessEmit,
+      this,
+      [eventName, actualExitCode, ...args]
+    );
+    const numExitCode = typeof actualExitCode === "number" ? actualExitCode : null;
+    /* @__PURE__ */ emit("exit", numExitCode, null);
+    /* @__PURE__ */ emit("afterexit", numExitCode, null);
+    return result;
+  }
+  return ReflectApply(
+    originalProcessEmit,
+    this,
+    [eventName, exitCode, ...args]
+  );
+}
+// @__NO_SIDE_EFFECTS__
+function processReallyExit(code) {
+  const exitCode = code || 0;
+  if (globalProcess) {
+    globalProcess.exitCode = exitCode;
+  }
+  /* @__PURE__ */ emit("exit", exitCode, null);
+  /* @__PURE__ */ emit("afterexit", exitCode, null);
+  ReflectApply(
+    originalProcessReallyExit,
+    globalProcess,
+    [exitCode]
+  );
+  throw new Error("processReallyExit should never return");
+}
+// @__NO_SIDE_EFFECTS__
+function onExit(cb, options) {
+  if (!globalProcess) {
+    return function remove() {
+    };
+  }
+  if (typeof cb !== "function") {
+    throw new TypeError("a callback must be provided for exit handler");
+  }
+  if (loaded === false) {
+    /* @__PURE__ */ load();
+  }
+  const { alwaysLast } = { __proto__: null, ...options };
+  let eventName = "exit";
+  if (alwaysLast) {
+    eventName = "afterexit";
+  }
+  const emitter = /* @__PURE__ */ getEmitter();
+  emitter.on(eventName, cb);
+  return function remove() {
+    emitter.removeListener(eventName, cb);
+    if (!emitter.listeners("exit").length && !emitter.listeners("afterexit").length) {
+      /* @__PURE__ */ unload();
+    }
+  };
+}
+let _signals;
+// @__NO_SIDE_EFFECTS__
+function signals() {
+  if (_signals === void 0) {
+    _signals = ["SIGABRT", "SIGALRM", "SIGHUP", "SIGINT", "SIGTERM"];
+    if (!WIN32) {
+      _signals.push(
+        "SIGVTALRM",
+        "SIGXCPU",
+        "SIGXFSZ",
+        "SIGUSR2",
+        "SIGTRAP",
+        "SIGSYS",
+        "SIGQUIT",
+        "SIGIOT"
+        // should detect profiler and enable/disable accordingly.
+        // see #21
+        // 'SIGPROF'
+      );
+    }
+    if (platform === "linux") {
+      _signals.push("SIGIO", "SIGPOLL", "SIGPWR", "SIGSTKFLT", "SIGUNUSED");
+    }
+  }
+  return _signals;
+}
+// @__NO_SIDE_EFFECTS__
+function unload() {
+  if (!loaded || !globalProcess) {
+    return;
+  }
+  loaded = false;
+  const sigs = /* @__PURE__ */ signals();
+  const sigListeners = /* @__PURE__ */ getSignalListeners();
+  for (const sig of sigs) {
+    try {
+      globalProcess.removeListener(
+        sig,
+        sigListeners[sig]
+      );
+    } catch {
+    }
+  }
+  globalProcess.emit = originalProcessEmit;
+  if (originalProcessReallyExit !== void 0) {
+    globalProcess.reallyExit = originalProcessReallyExit;
+  }
+  const emitter = /* @__PURE__ */ getEmitter();
+  if (emitter.count !== void 0) {
+    emitter.count -= 1;
+  }
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  load,
+  onExit,
+  signals,
+  unload
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/sorts.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/sorts.d.ts
new file mode 100644
index 00000000..4ba60e74
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/sorts.d.ts
@@ -0,0 +1,61 @@
+/**
+ * Compare semantic versions.
+ *
+ * @example
+ * ```typescript
+ * compareSemver('1.0.0', '2.0.0')  // -1
+ * compareSemver('2.0.0', '1.0.0')  // 1
+ * compareSemver('1.0.0', '1.0.0')  // 0
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function compareSemver(a: string, b: string): number;
+/**
+ * Simple string comparison.
+ *
+ * @example
+ * ```typescript
+ * compareStr('a', 'b')  // -1
+ * compareStr('b', 'a')  // 1
+ * compareStr('a', 'a')  // 0
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function compareStr(a: string, b: string): number;
+/**
+ * Compare two strings using locale-aware comparison.
+ *
+ * @example
+ * ```typescript
+ * localeCompare('a', 'b')  // -1
+ * localeCompare('b', 'a')  // 1
+ * localeCompare('a', 'a')  // 0
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function localeCompare(x: string, y: string): number;
+/**
+ * Compare two strings using natural sorting (numeric-aware, case-insensitive).
+ *
+ * @example
+ * ```typescript
+ * naturalCompare('file2', 'file10')  // negative (file2 before file10)
+ * naturalCompare('img10', 'img2')    // positive (img10 after img2)
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function naturalCompare(x: string, y: string): number;
+// Type for fast-sort sorter function.
+type FastSortFunction = ReturnType;
+/**
+ * Sort an array using natural comparison.
+ *
+ * @example
+ * ```typescript
+ * naturalSorter(['file10', 'file2', 'file1']).asc()
+ * // ['file1', 'file2', 'file10']
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function naturalSorter(arrayToSort: T[]): ReturnType;
+export {};
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/sorts.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/sorts.js
new file mode 100644
index 00000000..81fd3104
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/sorts.js
@@ -0,0 +1,110 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var sorts_exports = {};
+__export(sorts_exports, {
+  compareSemver: () => compareSemver,
+  compareStr: () => compareStr,
+  localeCompare: () => localeCompare,
+  naturalCompare: () => naturalCompare,
+  naturalSorter: () => naturalSorter
+});
+module.exports = __toCommonJS(sorts_exports);
+let _semver;
+function getSemver() {
+  if (_semver === void 0) {
+    _semver = require("./external/semver.js");
+  }
+  return _semver;
+}
+let _fastSort;
+function getFastSort() {
+  if (_fastSort === void 0) {
+    _fastSort = require("./external/fast-sort.js");
+  }
+  return _fastSort;
+}
+// @__NO_SIDE_EFFECTS__
+function compareSemver(a, b) {
+  const semver = getSemver();
+  const validA = semver.valid(a);
+  const validB = semver.valid(b);
+  if (!validA && !validB) {
+    return 0;
+  }
+  if (!validA) {
+    return -1;
+  }
+  if (!validB) {
+    return 1;
+  }
+  return semver.compare(a, b);
+}
+// @__NO_SIDE_EFFECTS__
+function compareStr(a, b) {
+  return a < b ? -1 : a > b ? 1 : 0;
+}
+let _localeCompare;
+// @__NO_SIDE_EFFECTS__
+function localeCompare(x, y) {
+  if (_localeCompare === void 0) {
+    _localeCompare = new Intl.Collator().compare;
+  }
+  return _localeCompare(x, y);
+}
+let _naturalCompare;
+// @__NO_SIDE_EFFECTS__
+function naturalCompare(x, y) {
+  if (_naturalCompare === void 0) {
+    _naturalCompare = new Intl.Collator(
+      // The `undefined` locale means it uses the default locale of the user's
+      // environment.
+      void 0,
+      {
+        // Enables numeric sorting: numbers in strings are compared by value,
+        // e.g. 'file2' comes before 'file10' as numbers and not 'file10' before
+        // 'file2' as plain text.
+        numeric: true,
+        // Makes the comparison case-insensitive and ignores diacritics, e.g.
+        // 'a', 'A', and 'á' are treated as equivalent.
+        sensitivity: "base"
+      }
+    ).compare;
+  }
+  return _naturalCompare(x, y);
+}
+let _naturalSorter;
+// @__NO_SIDE_EFFECTS__
+function naturalSorter(arrayToSort) {
+  if (_naturalSorter === void 0) {
+    const fastSort = getFastSort();
+    _naturalSorter = fastSort.createNewSortInstance({
+      comparer: naturalCompare
+    });
+  }
+  return _naturalSorter(arrayToSort);
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  compareSemver,
+  compareStr,
+  localeCompare,
+  naturalCompare,
+  naturalSorter
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/spawn.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/spawn.d.ts
new file mode 100644
index 00000000..33b3083e
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/spawn.d.ts
@@ -0,0 +1,435 @@
+import type { EventEmitter } from 'node:events';
+// Define BufferEncoding type for TypeScript compatibility.
+type BufferEncoding = globalThis.BufferEncoding;
+/**
+ * Options for spawning a child process with promise-based completion.
+ *
+ * @property {string | undefined} cwd - Current working directory for the process
+ * @property {NodeJS.ProcessEnv | undefined} env - Environment variables for the process
+ * @property {number | undefined} gid - Group identity of the process (POSIX only)
+ * @property {boolean | string | undefined} shell - Whether to run command in shell, or path to shell
+ * @property {AbortSignal | undefined} signal - Signal to abort the process
+ * @property {StdioType | undefined} stdio - Stdio configuration (`'pipe'`, `'ignore'`, `'inherit'`, or array)
+ * @property {boolean | undefined} stdioString - Convert stdio output to strings (default: `true`)
+ * @property {number | undefined} timeout - Maximum time in milliseconds before killing the process
+ * @property {number | undefined} uid - User identity of the process (POSIX only)
+ * @property {boolean | undefined} windowsVerbatimArguments - Don't quote or escape arguments on Windows (requires shell: true). Use when you need exact argument control. Default: false
+ */
+export type PromiseSpawnOptions = {
+    cwd?: string | undefined;
+    env?: NodeJS.ProcessEnv | undefined;
+    gid?: number | undefined;
+    shell?: boolean | string | undefined;
+    signal?: AbortSignal | undefined;
+    stdio?: StdioType | undefined;
+    stdioString?: boolean | undefined;
+    timeout?: number | undefined;
+    uid?: number | undefined;
+    windowsVerbatimArguments?: boolean | undefined;
+};
+/**
+ * Result returned by {@link spawn} when the child process completes.
+ * This is a Promise that resolves with process exit information and output,
+ * with additional properties for accessing the running process and stdin stream.
+ *
+ * @property {ChildProcess} process - The running child process instance
+ * @property {WritableStreamType | null} stdin - Writable stream for process stdin, or `null` if not piped
+ *
+ * @example
+ * const result = spawn('echo', ['hello'])
+ * result.stdin?.write('additional input\n')
+ * const { code, stdout } = await result
+ * console.log(stdout) // 'hello'
+ */
+export type PromiseSpawnResult = Promise<{
+    cmd: string;
+    args: string[] | readonly string[];
+    code: number;
+    signal: NodeJS.Signals | null;
+    stdout: string | Buffer;
+    stderr: string | Buffer;
+}> & {
+    process: ChildProcess;
+    stdin: WritableStreamType | null;
+};
+/**
+ * Error object thrown when a spawned process fails.
+ * Extends the standard Error with process-specific information including exit code,
+ * signal, command details, and captured output.
+ *
+ * @property {string[]} args - Arguments passed to the command
+ * @property {string} cmd - Command that was executed
+ * @property {number} code - Process exit code
+ * @property {string} name - Error name (typically `'Error'`)
+ * @property {string} message - Error message describing the failure
+ * @property {NodeJS.Signals | null} signal - Signal that terminated the process, if any
+ * @property {string} stack - Stack trace of the error
+ * @property {string | Buffer} stderr - Standard error output from the process
+ * @property {string | Buffer} stdout - Standard output from the process
+ *
+ * @example
+ * try {
+ *   await spawn('exit', ['1'])
+ * } catch (error) {
+ *   if (isSpawnError(error)) {
+ *     console.error(`Command failed with code ${error.code}`)
+ *     console.error(`stderr: ${error.stderr}`)
+ *   }
+ * }
+ */
+export type SpawnError = {
+    args: string[];
+    cmd: string;
+    code: number;
+    name: string;
+    message: string;
+    signal: NodeJS.Signals | null;
+    stack: string;
+    stderr: string | Buffer;
+    stdout: string | Buffer;
+};
+/**
+ * Spawn error variant where stdout and stderr are guaranteed to be strings.
+ * This type is used when `stdioString: true` is set in spawn options.
+ *
+ * @property {string} stdout - Standard output as a string
+ * @property {string} stderr - Standard error as a string
+ */
+export type SpawnErrorWithOutputString = SpawnError & {
+    stdout: string;
+    stderr: string;
+};
+/**
+ * Spawn error variant where stdout and stderr are guaranteed to be Buffers.
+ * This type is used when `stdioString: false` is set in spawn options.
+ *
+ * @property {Buffer} stdout - Standard output as a Buffer
+ * @property {Buffer} stderr - Standard error as a Buffer
+ */
+export type SpawnErrorWithOutputBuffer = SpawnError & {
+    stdout: Buffer;
+    stderr: Buffer;
+};
+/**
+ * Extra options passed to the underlying promise-spawn implementation.
+ * This is an open-ended object for passing additional metadata or configuration.
+ */
+export type SpawnExtra = Record;
+/**
+ * Valid values for individual stdio streams.
+ * - `'pipe'` - Creates a pipe between child and parent (default)
+ * - `'ignore'` - Ignores the stream
+ * - `'inherit'` - Uses parent's stream
+ * - `'overlapped'` - Windows-specific overlapped I/O
+ */
+export type IOType = 'pipe' | 'ignore' | 'inherit' | 'overlapped';
+/**
+ * Configuration for process stdio (stdin, stdout, stderr) streams.
+ * Can be a single value applied to all streams, or an array specifying each stream individually.
+ * - `'ipc'` - Creates an IPC channel for communication with the parent
+ *
+ * @example
+ * // All streams piped
+ * stdio: 'pipe'
+ *
+ * @example
+ * // Custom configuration per stream: [stdin, stdout, stderr]
+ * stdio: ['ignore', 'pipe', 'pipe']
+ */
+export type StdioType = IOType | 'ipc' | Array;
+/**
+ * Result object returned by {@link spawnSync} when the child process completes synchronously.
+ *
+ * @template T - Type of stdout/stderr (string or Buffer)
+ * @property {number} pid - Process ID of the spawned child
+ * @property {Array} output - Array containing stdout/stderr values
+ * @property {T} stdout - Standard output from the process
+ * @property {T} stderr - Standard error from the process
+ * @property {number | null} status - Exit code, or `null` if killed by signal
+ * @property {NodeJS.Signals | null} signal - Signal that terminated the process, or `null`
+ * @property {Error | undefined} error - Error object if the spawn failed
+ */
+export interface SpawnSyncReturns {
+    pid: number;
+    output: Array;
+    stdout: T;
+    stderr: T;
+    status: number | null;
+    signal: NodeJS.Signals | null;
+    error?: Error | undefined;
+}
+/**
+ * Enhances spawn error with better context.
+ * Converts generic "command failed" to detailed error with command, exit code, and stderr.
+ *
+ * @example
+ * ```typescript
+ * try {
+ *   await spawn('git', ['status'])
+ * } catch (err) {
+ *   throw enhanceSpawnError(err)
+ * }
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function enhanceSpawnError(error: unknown): unknown;
+/**
+ * Check if a value is a spawn error with expected error properties.
+ * Tests for common error properties from child process failures.
+ *
+ * @param {unknown} value - Value to check
+ * @returns {boolean} `true` if the value has spawn error properties
+ *
+ * @example
+ * try {
+ *   await spawn('nonexistent-command')
+ * } catch (error) {
+ *   if (isSpawnError(error)) {
+ *     console.error(`Spawn failed: ${error.code}`)
+ *   }
+ * }
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isSpawnError(value: unknown): value is SpawnError;
+/**
+ * Check if stdio configuration matches a specific type.
+ * When called with one argument, validates if it's a valid stdio type.
+ * When called with two arguments, checks if the stdio config matches the specified type.
+ *
+ * @param {string | string[]} stdio - Stdio configuration to check
+ * @param {StdioType | undefined} type - Expected stdio type (optional)
+ * @returns {boolean} `true` if stdio matches the type or is valid
+ *
+ * @example
+ * // Check if valid stdio type
+ * isStdioType('pipe') // true
+ * isStdioType('invalid') // false
+ *
+ * @example
+ * // Check if stdio matches specific type
+ * isStdioType('pipe', 'pipe') // true
+ * isStdioType(['pipe', 'pipe', 'pipe'], 'pipe') // true
+ * isStdioType('ignore', 'pipe') // false
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isStdioType(stdio: string | string[], type?: StdioType | undefined): boolean;
+/*@__NO_SIDE_EFFECTS__*/
+// Duplicated from Node.js child_process.SpawnOptions
+// These are the options passed to child_process.spawn()
+interface NodeSpawnOptions {
+    cwd?: string | URL | undefined;
+    env?: NodeJS.ProcessEnv | undefined;
+    argv0?: string | undefined;
+    stdio?: any;
+    detached?: boolean | undefined;
+    uid?: number | undefined;
+    gid?: number | undefined;
+    serialization?: 'json' | 'advanced' | undefined;
+    shell?: boolean | string | undefined;
+    windowsVerbatimArguments?: boolean | undefined;
+    windowsHide?: boolean | undefined;
+    signal?: AbortSignal | undefined;
+    timeout?: number | undefined;
+    killSignal?: NodeJS.Signals | number | undefined;
+}
+// Duplicated from Node.js child_process.ChildProcess
+// This represents a spawned child process
+interface ChildProcess extends EventEmitter {
+    stdin: NodeJS.WritableStream | null;
+    stdout: NodeJS.ReadableStream | null;
+    stderr: NodeJS.ReadableStream | null;
+    readonly channel?: any;
+    readonly stdio: [
+        NodeJS.WritableStream | null,
+        NodeJS.ReadableStream | null,
+        NodeJS.ReadableStream | null,
+        NodeJS.ReadableStream | NodeJS.WritableStream | null | undefined,
+        NodeJS.ReadableStream | NodeJS.WritableStream | null | undefined
+    ];
+    readonly killed: boolean;
+    readonly pid?: number | undefined;
+    readonly connected: boolean;
+    readonly exitCode: number | null;
+    readonly signalCode: NodeJS.Signals | null;
+    readonly spawnargs: string[];
+    readonly spawnfile: string;
+    kill(signal?: NodeJS.Signals | number): boolean;
+    send(message: any, callback?: (error: Error | null) => void): boolean;
+    send(message: any, sendHandle?: any | undefined, callback?: (error: Error | null) => void): boolean;
+    send(message: any, sendHandle?: any | undefined, options?: any | undefined, callback?: (error: Error | null) => void): boolean;
+    disconnect(): void;
+    unref(): void;
+    ref(): void;
+}
+// Duplicated from Node.js stream.Writable
+interface WritableStreamType {
+    writable: boolean;
+    writableEnded: boolean;
+    writableFinished: boolean;
+    writableHighWaterMark: number;
+    writableLength: number;
+    writableObjectMode: boolean;
+    writableCorked: number;
+    destroyed: boolean;
+    write(chunk: any, encoding?: BufferEncoding | undefined, callback?: (error?: Error | null) => void): boolean;
+    write(chunk: any, callback?: (error?: Error | null) => void): boolean;
+    end(cb?: () => void): this;
+    end(chunk: any, cb?: () => void): this;
+    end(chunk: any, encoding?: BufferEncoding | undefined, cb?: () => void): this;
+    cork(): void;
+    uncork(): void;
+    destroy(error?: Error | undefined): this;
+}
+/**
+ * Options for spawning a child process with {@link spawn}.
+ * Extends Node.js spawn options with additional Socket-specific functionality.
+ *
+ * @property {string | URL | undefined} cwd - Current working directory
+ * @property {NodeJS.ProcessEnv | undefined} env - Environment variables
+ * @property {number | undefined} gid - Group identity (POSIX)
+ * @property {boolean | string | undefined} shell - Run command in shell
+ * @property {AbortSignal | undefined} signal - Abort signal
+ * @property {import('./spinner').Spinner | undefined} spinner - Spinner instance to pause during execution
+ * @property {StdioType | undefined} stdio - Stdio configuration
+ * @property {boolean | undefined} stdioString - Convert output to strings (default: `true`)
+ * @property {boolean | undefined} stripAnsi - Remove ANSI codes from output (default: `true`)
+ * @property {number | undefined} timeout - Timeout in milliseconds
+ * @property {number | undefined} uid - User identity (POSIX)
+ * @property {boolean | undefined} windowsVerbatimArguments - Don't quote or escape arguments on Windows (requires shell: true). Use when you need exact argument control. Default: false
+ */
+export type SpawnOptions = import('./objects').Remap;
+export type SpawnResult = PromiseSpawnResult;
+/**
+ * Result object returned when a spawned process completes.
+ *
+ * @property {string} cmd - Command that was executed
+ * @property {string[] | readonly string[]} args - Arguments passed to the command
+ * @property {number} code - Process exit code
+ * @property {NodeJS.Signals | null} signal - Signal that terminated the process, if any
+ * @property {string | Buffer} stdout - Standard output (string if `stdioString: true`, Buffer otherwise)
+ * @property {string | Buffer} stderr - Standard error (string if `stdioString: true`, Buffer otherwise)
+ */
+export type SpawnStdioResult = {
+    cmd: string;
+    args: string[] | readonly string[];
+    code: number;
+    signal: NodeJS.Signals | null;
+    stdout: string | Buffer;
+    stderr: string | Buffer;
+};
+/**
+ * Spawn a child process and return a promise that resolves when it completes.
+ * Provides enhanced error handling, output capture, and cross-platform support.
+ *
+ * SECURITY: This function uses array-based arguments which prevent command injection.
+ * Arguments in the `args` array are passed directly to the OS without shell
+ * interpretation. Shell metacharacters (;|&$()`) are treated as literal strings,
+ * not as commands or operators. This is the PRIMARY SECURITY DEFENSE.
+ *
+ * Even when shell: true is used (on Windows for .cmd/.bat execution), the array-based
+ * approach remains secure because Node.js properly escapes each argument before passing
+ * to the shell.
+ *
+ * @param {string} cmd - Command to execute (not user-controlled)
+ * @param {string[] | readonly string[] | undefined} args - Array of arguments (safe even with user input)
+ * @param {SpawnOptions | undefined} options - Spawn options for process configuration
+ * @param {SpawnExtra | undefined} extra - Extra options for promise-spawn
+ * @returns {SpawnResult} Promise that resolves with process exit information
+ *
+ * @throws {SpawnError} When the process exits with non-zero code or is terminated by signal
+ *
+ * @example
+ * // Basic usage - spawn and wait for completion
+ * const result = await spawn('git', ['status'])
+ * console.log(result.stdout)
+ *
+ * @example
+ * // With options - set working directory and environment
+ * const result = await spawn('npm', ['install'], {
+ *   cwd: '/path/to/project',
+ *   env: { NODE_ENV: 'production' }
+ * })
+ *
+ * @example
+ * // ✔ DO THIS - Array-based arguments (safe)
+ * spawn('git', ['commit', '-m', userMessage])
+ * // Each argument is properly escaped, even if userMessage = "foo; rm -rf /"
+ *
+ * @example
+ * // ✖ NEVER DO THIS - String concatenation (vulnerable)
+ * spawn(`git commit -m "${userMessage}"`, { shell: true })
+ * // Vulnerable to injection if userMessage = '"; rm -rf / #'
+ *
+ * @example
+ * // Access stdin for interactive processes
+ * const result = spawn('cat', [])
+ * result.stdin?.write('Hello\n')
+ * result.stdin?.end()
+ * const { stdout } = await result
+ * console.log(stdout) // 'Hello'
+ *
+ * @example
+ * // Handle errors with exit codes
+ * try {
+ *   await spawn('exit', ['1'])
+ * } catch (error) {
+ *   if (isSpawnError(error)) {
+ *     console.error(`Failed with code ${error.code}`)
+ *     console.error(error.stderr)
+ *   }
+ * }
+ */
+export declare function spawn(cmd: string, args?: string[] | readonly string[], options?: SpawnOptions | undefined, extra?: SpawnExtra | undefined): SpawnResult;
+/*@__NO_SIDE_EFFECTS__*/
+/**
+ * Options for synchronously spawning a child process with {@link spawnSync}.
+ * Same as {@link SpawnOptions} but excludes the `spinner` property (not applicable for synchronous execution).
+ */
+export type SpawnSyncOptions = Omit;
+/**
+ * Synchronously spawn a child process and wait for it to complete.
+ * Blocks execution until the process exits, returning all output and exit information.
+ *
+ * WARNING: This function blocks the event loop. Use {@link spawn} for async operations.
+ *
+ * @param {string} cmd - Command to execute
+ * @param {string[] | readonly string[] | undefined} args - Array of arguments
+ * @param {SpawnSyncOptions | undefined} options - Spawn options for process configuration
+ * @returns {SpawnSyncReturns} Process result with exit code and captured output
+ *
+ * @example
+ * // Basic synchronous spawn
+ * const result = spawnSync('git', ['status'])
+ * console.log(result.stdout)
+ * console.log(result.status) // exit code
+ *
+ * @example
+ * // With options
+ * const result = spawnSync('npm', ['install'], {
+ *   cwd: '/path/to/project',
+ *   stdioString: true
+ * })
+ * if (result.status !== 0) {
+ *   console.error(result.stderr)
+ * }
+ *
+ * @example
+ * // Get raw buffer output
+ * const result = spawnSync('cat', ['binary-file'], {
+ *   stdioString: false
+ * })
+ * console.log(result.stdout) // Buffer
+ *
+ * @example
+ * // Handle process errors
+ * const result = spawnSync('nonexistent-command')
+ * if (result.error) {
+ *   console.error('Failed to spawn:', result.error)
+ * }
+ */
+export declare function spawnSync(cmd: string, args?: string[] | readonly string[], options?: SpawnSyncOptions | undefined): SpawnSyncReturns;
+export {};
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/spawn.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/spawn.js
new file mode 100644
index 00000000..186bed0d
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/spawn.js
@@ -0,0 +1,338 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var spawn_exports = {};
+__export(spawn_exports, {
+  enhanceSpawnError: () => enhanceSpawnError,
+  isSpawnError: () => isSpawnError,
+  isStdioType: () => isStdioType,
+  spawn: () => spawn,
+  spawnSync: () => spawnSync
+});
+module.exports = __toCommonJS(spawn_exports);
+var import_node_process = __toESM(require("node:process"));
+var import_process = require("./constants/process");
+var import_errors = require("./errors");
+var import_arrays = require("./arrays");
+var import_bin = require("./bin");
+var import_normalize = require("./paths/normalize");
+var import_objects = require("./objects");
+var import_spinner = require("./spinner");
+var import_strings = require("./strings");
+let _npmCliPromiseSpawn;
+// @__NO_SIDE_EFFECTS__
+function getNpmCliPromiseSpawn() {
+  if (_npmCliPromiseSpawn === void 0) {
+    _npmCliPromiseSpawn = require("./external/@npmcli/promise-spawn");
+  }
+  return _npmCliPromiseSpawn;
+}
+let _path;
+// @__NO_SIDE_EFFECTS__
+function getPath() {
+  if (_path === void 0) {
+    _path = require("path");
+  }
+  return _path;
+}
+let _fs;
+// @__NO_SIDE_EFFECTS__
+function getFs() {
+  if (_fs === void 0) {
+    _fs = require("fs");
+  }
+  return _fs;
+}
+const abortSignal = (0, import_process.getAbortSignal)();
+const spinner = (0, import_spinner.getDefaultSpinner)();
+const stackCache = /* @__PURE__ */ new WeakMap();
+const spawnBinPathCache = /* @__PURE__ */ new Map();
+const windowsScriptExtRegExp = /\.(?:cmd|bat|ps1)$/i;
+let _child_process;
+// @__NO_SIDE_EFFECTS__
+function getChildProcess() {
+  if (_child_process === void 0) {
+    _child_process = require("child_process");
+  }
+  return _child_process;
+}
+// @__NO_SIDE_EFFECTS__
+function enhanceSpawnError(error) {
+  if (error === null || typeof error !== "object") {
+    return error;
+  }
+  if (!/* @__PURE__ */ isSpawnError(error)) {
+    return error;
+  }
+  const err = error;
+  const { args, cmd, code, signal, stderr } = err;
+  const stderrText = typeof stderr === "string" ? stderr : stderr?.toString() ?? "";
+  let enhancedMessage = `Command failed: ${cmd}`;
+  if (args && args.length > 0) {
+    const argsStr = args.join(" ");
+    if (argsStr.length < 100) {
+      enhancedMessage += ` ${argsStr}`;
+    } else {
+      enhancedMessage += ` ${argsStr.slice(0, 97)}...`;
+    }
+  }
+  if (signal) {
+    enhancedMessage += ` (terminated by ${signal})`;
+  } else if (code !== void 0) {
+    enhancedMessage += ` (exit code ${code})`;
+  }
+  const trimmedStderr = stderrText.trim();
+  if (trimmedStderr) {
+    const firstLine = trimmedStderr.split("\n")[0] ?? "";
+    if (firstLine.length < 200) {
+      enhancedMessage += `
+${firstLine}`;
+    } else {
+      enhancedMessage += `
+${firstLine.slice(0, 197)}...`;
+    }
+  }
+  const isSynthetic = err.message === "command failed";
+  if (isSynthetic) {
+    Object.defineProperty(err, "message", {
+      __proto__: null,
+      value: enhancedMessage,
+      writable: true,
+      enumerable: false,
+      configurable: true
+    });
+    return err;
+  }
+  const enhancedError = new Error(enhancedMessage, {
+    cause: err
+  });
+  const descriptors = Object.getOwnPropertyDescriptors(err);
+  delete descriptors.message;
+  delete descriptors.stack;
+  Object.defineProperties(enhancedError, descriptors);
+  Object.defineProperty(enhancedError, "stack", {
+    __proto__: null,
+    configurable: true,
+    enumerable: false,
+    get() {
+      let stack = stackCache.get(enhancedError);
+      if (stack === void 0) {
+        try {
+          stack = (0, import_errors.stackWithCauses)(err);
+        } catch {
+          stack = err.stack ?? new Error().stack ?? "";
+        }
+        stackCache.set(enhancedError, stack);
+      }
+      return stack;
+    }
+  });
+  return enhancedError;
+}
+// @__NO_SIDE_EFFECTS__
+function isSpawnError(value) {
+  if (value === null || typeof value !== "object") {
+    return false;
+  }
+  const err = value;
+  return (0, import_objects.hasOwn)(err, "code") && typeof err["code"] !== "undefined" || (0, import_objects.hasOwn)(err, "errno") && typeof err["errno"] !== "undefined" || (0, import_objects.hasOwn)(err, "syscall") && typeof err["syscall"] === "string";
+}
+// @__NO_SIDE_EFFECTS__
+function isStdioType(stdio, type) {
+  if (arguments.length === 1) {
+    const validTypes = ["pipe", "ignore", "inherit", "overlapped"];
+    return typeof stdio === "string" && validTypes.includes(stdio);
+  }
+  return stdio === type || (stdio === null || stdio === void 0) && type === "pipe" || (0, import_arrays.isArray)(stdio) && stdio.length > 2 && stdio[0] === type && stdio[1] === type && stdio[2] === type;
+}
+// @__NO_SIDE_EFFECTS__
+function stripAnsiFromSpawnResult(result) {
+  const res = result;
+  const { stderr, stdout } = res;
+  if (typeof stdout === "string") {
+    res.stdout = (0, import_strings.stripAnsi)(stdout);
+  }
+  if (typeof stderr === "string") {
+    res.stderr = (0, import_strings.stripAnsi)(stderr);
+  }
+  return res;
+}
+function spawn(cmd, args, options, extra) {
+  const {
+    spinner: optionsSpinner = spinner,
+    stripAnsi: shouldStripAnsi = true,
+    ...rawSpawnOptions
+  } = { __proto__: null, ...options };
+  const spinnerInstance = optionsSpinner;
+  const spawnOptions = { __proto__: null, ...rawSpawnOptions };
+  const { env, shell, stdio, stdioString = true } = spawnOptions;
+  const cwd = spawnOptions.cwd ? String(spawnOptions.cwd) : void 0;
+  let actualCmd = cmd;
+  if (!(0, import_normalize.isPath)(cmd)) {
+    const fs = /* @__PURE__ */ getFs();
+    const cached = spawnBinPathCache.get(cmd);
+    if (cached) {
+      if (fs.existsSync(cached)) {
+        actualCmd = cached;
+      } else {
+        spawnBinPathCache.delete(cmd);
+      }
+    }
+    if (actualCmd === cmd) {
+      const resolved = (0, import_bin.whichSync)(cmd, { cwd, nothrow: true });
+      if (resolved && typeof resolved === "string") {
+        actualCmd = resolved;
+        spawnBinPathCache.set(cmd, resolved);
+      }
+    }
+  }
+  const WIN32 = import_node_process.default.platform === "win32";
+  if (WIN32 && shell && windowsScriptExtRegExp.test(actualCmd)) {
+    if (!(0, import_normalize.isPath)(actualCmd)) {
+      actualCmd = (/* @__PURE__ */ getPath()).basename(actualCmd, (/* @__PURE__ */ getPath()).extname(actualCmd));
+    }
+  }
+  const wasSpinning = !!spinnerInstance?.isSpinning;
+  const shouldStopSpinner = wasSpinning && !/* @__PURE__ */ isStdioType(stdio, "ignore") && !/* @__PURE__ */ isStdioType(stdio, "pipe");
+  const shouldRestartSpinner = shouldStopSpinner;
+  if (shouldStopSpinner) {
+    spinnerInstance.stop();
+  }
+  const envToUse = env ? {
+    __proto__: null,
+    ...import_node_process.default.env,
+    ...env
+  } : import_node_process.default.env;
+  const promiseSpawnOpts = {
+    __proto__: null,
+    cwd: typeof spawnOptions.cwd === "string" ? spawnOptions.cwd : void 0,
+    env: envToUse,
+    signal: abortSignal,
+    stdio: spawnOptions.stdio,
+    stdioString,
+    shell: spawnOptions.shell,
+    windowsVerbatimArguments: spawnOptions.windowsVerbatimArguments,
+    timeout: spawnOptions.timeout,
+    uid: spawnOptions.uid,
+    gid: spawnOptions.gid
+  };
+  const npmCliPromiseSpawn = /* @__PURE__ */ getNpmCliPromiseSpawn();
+  const spawnPromise = npmCliPromiseSpawn(
+    actualCmd,
+    args ? [...args] : [],
+    promiseSpawnOpts,
+    extra
+  );
+  const oldSpawnPromise = spawnPromise;
+  let newSpawnPromise;
+  if (shouldStripAnsi && stdioString) {
+    newSpawnPromise = spawnPromise.then((result) => {
+      const strippedResult = /* @__PURE__ */ stripAnsiFromSpawnResult(result);
+      if ("code" in strippedResult) {
+        ;
+        strippedResult.exitCode = strippedResult.code;
+      }
+      return strippedResult;
+    }).catch((error) => {
+      const strippedError = /* @__PURE__ */ stripAnsiFromSpawnResult(error);
+      const enhancedError = /* @__PURE__ */ enhanceSpawnError(strippedError);
+      throw enhancedError;
+    });
+  } else {
+    newSpawnPromise = spawnPromise.then((result) => {
+      if ("code" in result) {
+        const res = result;
+        res.exitCode = result.code;
+        return res;
+      }
+      return result;
+    }).catch((error) => {
+      const enhancedError = /* @__PURE__ */ enhanceSpawnError(error);
+      throw enhancedError;
+    });
+  }
+  if (shouldRestartSpinner) {
+    newSpawnPromise = newSpawnPromise.finally(() => {
+      spinnerInstance.start();
+    });
+  }
+  ;
+  newSpawnPromise.process = oldSpawnPromise.process;
+  newSpawnPromise.stdin = oldSpawnPromise.stdin;
+  return newSpawnPromise;
+}
+function spawnSync(cmd, args, options) {
+  let actualCmd = cmd;
+  if (!(0, import_normalize.isPath)(cmd)) {
+    const resolved = (0, import_bin.whichSync)(cmd, {
+      cwd: (0, import_objects.getOwn)(options, "cwd"),
+      nothrow: true
+    });
+    if (resolved && typeof resolved === "string") {
+      actualCmd = resolved;
+    }
+  }
+  const shell = (0, import_objects.getOwn)(options, "shell");
+  const WIN32 = import_node_process.default.platform === "win32";
+  if (WIN32 && shell && windowsScriptExtRegExp.test(actualCmd)) {
+    if (!(0, import_normalize.isPath)(actualCmd)) {
+      actualCmd = (/* @__PURE__ */ getPath()).basename(actualCmd, (/* @__PURE__ */ getPath()).extname(actualCmd));
+    }
+  }
+  const { stripAnsi: shouldStripAnsi = true, ...rawSpawnOptions } = {
+    __proto__: null,
+    ...options
+  };
+  const { stdioString: rawStdioString = true } = rawSpawnOptions;
+  const rawEncoding = rawStdioString ? "utf8" : "buffer";
+  const spawnOptions = {
+    encoding: rawEncoding,
+    ...rawSpawnOptions
+  };
+  const stdioString = spawnOptions.encoding !== "buffer";
+  const result = (/* @__PURE__ */ getChildProcess()).spawnSync(actualCmd, args, spawnOptions);
+  if (stdioString) {
+    const { stderr, stdout } = result;
+    if (stdout) {
+      result.stdout = stdout.toString().trim();
+    }
+    if (stderr) {
+      result.stderr = stderr.toString().trim();
+    }
+  }
+  return shouldStripAnsi && stdioString ? /* @__PURE__ */ stripAnsiFromSpawnResult(result) : result;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  enhanceSpawnError,
+  isSpawnError,
+  isStdioType,
+  spawn,
+  spawnSync
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/spinner.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/spinner.d.ts
new file mode 100644
index 00000000..a45433c5
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/spinner.d.ts
@@ -0,0 +1,438 @@
+import type { Writable } from 'stream';
+import type { ColorInherit, ColorRgb, ColorValue } from './colors';
+import type { ShimmerColorGradient, ShimmerConfig, ShimmerDirection, ShimmerState } from './effects/text-shimmer';
+/**
+ * Symbol types for status messages.
+ * Maps to log symbols: fail (✗), info (ℹ), skip (↻), success (✓), warn (⚠).
+ */
+export type SymbolType = 'fail' | 'info' | 'skip' | 'success' | 'warn';
+/**
+ * Progress tracking information for display in spinner.
+ * Used by `progress()` and `progressStep()` methods to show animated progress bars.
+ */
+export type ProgressInfo = {
+    /** Current progress value */
+    current: number;
+    /** Total/maximum progress value */
+    total: number;
+    /** Optional unit label displayed after the progress count (e.g., 'files', 'items') */
+    unit?: string | undefined;
+};
+/**
+ * Internal shimmer state with color configuration.
+ * Extends `ShimmerState` with additional color property that can be inherited from spinner.
+ */
+export type ShimmerInfo = ShimmerState & {
+    /** Color for shimmer effect - can inherit from spinner, use explicit color, or gradient */
+    color: ColorInherit | ColorValue | ShimmerColorGradient;
+};
+/**
+ * Spinner instance for displaying animated loading indicators.
+ * Provides methods for status updates, progress tracking, and text shimmer effects.
+ *
+ * KEY BEHAVIORS:
+ * - Methods WITHOUT "AndStop" keep the spinner running (e.g., `success()`, `fail()`)
+ * - Methods WITH "AndStop" auto-clear the spinner line (e.g., `successAndStop()`, `failAndStop()`)
+ * - Status messages (done, success, fail, info, warn, reason, step, substep) go to stderr
+ * - Data messages (`log()`) go to stdout
+ *
+ * @example
+ * ```ts
+ * import { Spinner } from '@socketsecurity/lib/spinner'
+ *
+ * const spinner = Spinner({ text: 'Loading…' })
+ * spinner.start()
+ *
+ * // Show success while continuing to spin
+ * spinner.success('Step 1 complete')
+ *
+ * // Stop the spinner with success message
+ * spinner.successAndStop('All done!')
+ * ```
+ */
+export type Spinner = {
+    /** Current spinner color as RGB tuple */
+    color: ColorRgb;
+    /** Current spinner animation style */
+    spinner: SpinnerStyle;
+    /** Whether spinner is currently animating */
+    get isSpinning(): boolean;
+    /** Get current shimmer state (enabled/disabled and configuration) */
+    get shimmerState(): ShimmerInfo | undefined;
+    /** Clear the current line without stopping the spinner */
+    clear(): Spinner;
+    /** Show debug message without stopping (only if debug mode enabled) */
+    debug(text?: string | undefined, ...extras: unknown[]): Spinner;
+    /** Show debug message and stop the spinner (only if debug mode enabled) */
+    debugAndStop(text?: string | undefined, ...extras: unknown[]): Spinner;
+    /** Decrease indentation by specified spaces (default: 2) */
+    dedent(spaces?: number | undefined): Spinner;
+    /** Disable shimmer effect (preserves config for later re-enable) */
+    disableShimmer(): Spinner;
+    /** Alias for `success()` - show success without stopping */
+    done(text?: string | undefined, ...extras: unknown[]): Spinner;
+    /** Alias for `successAndStop()` - show success and stop */
+    doneAndStop(text?: string | undefined, ...extras: unknown[]): Spinner;
+    /** Enable shimmer effect (restores saved config or uses defaults) */
+    enableShimmer(): Spinner;
+    /** Alias for `fail()` - show error without stopping */
+    error(text?: string | undefined, ...extras: unknown[]): Spinner;
+    /** Alias for `failAndStop()` - show error and stop */
+    errorAndStop(text?: string | undefined, ...extras: unknown[]): Spinner;
+    /** Show failure (✗) without stopping the spinner */
+    fail(text?: string | undefined, ...extras: unknown[]): Spinner;
+    /** Show failure (✗) and stop the spinner, auto-clearing the line */
+    failAndStop(text?: string | undefined, ...extras: unknown[]): Spinner;
+    /** Increase indentation by specified spaces (default: 2) */
+    indent(spaces?: number | undefined): Spinner;
+    /** Show info (ℹ) message without stopping the spinner */
+    info(text?: string | undefined, ...extras: unknown[]): Spinner;
+    /** Show info (ℹ) message and stop the spinner, auto-clearing the line */
+    infoAndStop(text?: string | undefined, ...extras: unknown[]): Spinner;
+    /** Log to stdout without stopping the spinner */
+    log(text?: string | undefined, ...extras: unknown[]): Spinner;
+    /** Log and stop the spinner, auto-clearing the line */
+    logAndStop(text?: string | undefined, ...extras: unknown[]): Spinner;
+    /** Update progress bar with current/total values and optional unit */
+    progress(current: number, total: number, unit?: string | undefined): Spinner;
+    /** Increment progress by specified amount (default: 1) */
+    progressStep(amount?: number): Spinner;
+    /** Set complete shimmer configuration */
+    setShimmer(config: ShimmerConfig): Spinner;
+    /** Show skip (↻) message without stopping the spinner */
+    skip(text?: string | undefined, ...extras: unknown[]): Spinner;
+    /** Show skip (↻) message and stop the spinner, auto-clearing the line */
+    skipAndStop(text?: string | undefined, ...extras: unknown[]): Spinner;
+    /** Start spinning with optional text */
+    start(text?: string | undefined): Spinner;
+    /** Show main step message to stderr without stopping */
+    step(text?: string | undefined, ...extras: unknown[]): Spinner;
+    /** Stop spinning and clear internal state, auto-clearing the line */
+    stop(text?: string | undefined): Spinner;
+    /** Stop and show final text without clearing the line */
+    stopAndPersist(text?: string | undefined): Spinner;
+    /** Show indented substep message to stderr without stopping */
+    substep(text?: string | undefined, ...extras: unknown[]): Spinner;
+    /** Show success (✓) without stopping the spinner */
+    success(text?: string | undefined, ...extras: unknown[]): Spinner;
+    /** Show success (✓) and stop the spinner, auto-clearing the line */
+    successAndStop(text?: string | undefined, ...extras: unknown[]): Spinner;
+    /** Get current spinner text (getter) or set new text (setter) */
+    text(value: string): Spinner;
+    text(): string;
+    /** Update partial shimmer configuration */
+    updateShimmer(config: Partial): Spinner;
+    /** Show warning (⚠) without stopping the spinner */
+    warn(text?: string | undefined, ...extras: unknown[]): Spinner;
+    /** Show warning (⚠) and stop the spinner, auto-clearing the line */
+    warnAndStop(text?: string | undefined, ...extras: unknown[]): Spinner;
+};
+/**
+ * Configuration options for creating a spinner instance.
+ */
+export type SpinnerOptions = {
+    /**
+     * Spinner color as RGB tuple or color name.
+     * @default [140, 82, 255] Socket purple
+     */
+    readonly color?: ColorValue | undefined;
+    /**
+     * Shimmer effect configuration or direction string.
+     * When enabled, text will have an animated shimmer effect.
+     * @default undefined No shimmer effect
+     */
+    readonly shimmer?: ShimmerConfig | ShimmerDirection | undefined;
+    /**
+     * Animation style with frames and timing.
+     * @default 'socket' Custom Socket animation in CLI, minimal in CI
+     */
+    readonly spinner?: SpinnerStyle | undefined;
+    /**
+     * Abort signal for cancelling the spinner.
+     * @default getAbortSignal() from process constants
+     */
+    readonly signal?: AbortSignal | undefined;
+    /**
+     * Output stream for spinner rendering.
+     * @default process.stderr
+     */
+    readonly stream?: Writable | undefined;
+    /**
+     * Initial text to display with the spinner.
+     * @default undefined No initial text
+     */
+    readonly text?: string | undefined;
+    /**
+     * Theme to use for spinner colors.
+     * Accepts theme name ('socket', 'sunset', etc.) or Theme object.
+     * @default Current theme from getTheme()
+     */
+    readonly theme?: import('./themes/types').Theme | import('./themes/themes').ThemeName | undefined;
+};
+/**
+ * Animation style definition for spinner frames.
+ * Defines the visual appearance and timing of the spinner animation.
+ */
+export type SpinnerStyle = {
+    /** Array of animation frames (strings to display sequentially) */
+    readonly frames: string[];
+    /**
+     * Milliseconds between frame changes.
+     * @default 80 Standard frame rate
+     */
+    readonly interval?: number | undefined;
+};
+/**
+ * Minimal spinner style for CI environments.
+ * Uses empty frame and max interval to effectively disable animation in CI.
+ */
+export declare const ciSpinner: SpinnerStyle;
+/**
+ * Get available CLI spinner styles or a specific style by name.
+ * Extends the standard cli-spinners collection with Socket custom spinners.
+ *
+ * Custom spinners:
+ * - `socket` (default): Socket pulse animation with sparkles and lightning
+ *
+ * @param styleName - Optional name of specific spinner style to retrieve
+ * @returns Specific spinner style if name provided, all styles if omitted, `undefined` if style not found
+ * @see https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json
+ *
+ * @example
+ * ```ts
+ * // Get all available spinner styles
+ * const allSpinners = getCliSpinners()
+ *
+ * // Get specific style
+ * const socketStyle = getCliSpinners('socket')
+ * const dotsStyle = getCliSpinners('dots')
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function getCliSpinners(styleName?: string | undefined): SpinnerStyle | Record | undefined;
+/**
+ * Create a spinner instance for displaying loading indicators.
+ * Provides an animated CLI spinner with status messages, progress tracking, and shimmer effects.
+ *
+ * AUTO-CLEAR BEHAVIOR:
+ * - All *AndStop() methods AUTO-CLEAR the spinner line via yocto-spinner.stop()
+ *   Examples: `doneAndStop()`, `successAndStop()`, `failAndStop()`, etc.
+ *
+ * - Methods WITHOUT "AndStop" do NOT clear (spinner keeps spinning)
+ *   Examples: `done()`, `success()`, `fail()`, etc.
+ *
+ * STREAM USAGE:
+ * - Spinner animation: stderr (yocto-spinner default)
+ * - Status methods (done, success, fail, info, warn, step, substep): stderr
+ * - Data methods (`log()`): stdout
+ *
+ * COMPARISON WITH LOGGER:
+ * - `logger.done()` does NOT auto-clear (requires manual `logger.clearLine()`)
+ * - `spinner.doneAndStop()` DOES auto-clear (built into yocto-spinner.stop())
+ * - Pattern: `logger.clearLine().done()` vs `spinner.doneAndStop()`
+ *
+ * @param options - Configuration options for the spinner
+ * @returns New spinner instance
+ *
+ * @example
+ * ```ts
+ * import { Spinner } from '@socketsecurity/lib/spinner'
+ *
+ * // Basic usage
+ * const spinner = Spinner({ text: 'Loading data…' })
+ * spinner.start()
+ * await fetchData()
+ * spinner.successAndStop('Data loaded!')
+ *
+ * // With custom color
+ * const spinner = Spinner({
+ *   text: 'Processing…',
+ *   color: [255, 0, 0] // Red
+ * })
+ *
+ * // With shimmer effect
+ * const spinner = Spinner({
+ *   text: 'Building…',
+ *   shimmer: { dir: 'ltr', speed: 0.5 }
+ * })
+ *
+ * // Show progress
+ * spinner.progress(5, 10, 'files')
+ * spinner.progressStep() // Increment by 1
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function Spinner(options?: SpinnerOptions | undefined): Spinner;
+/**
+ * Get the default spinner instance.
+ * Lazily creates the spinner to avoid circular dependencies during module initialization.
+ * Reuses the same instance across calls.
+ *
+ * @returns Shared default spinner instance
+ *
+ * @example
+ * ```ts
+ * import { getDefaultSpinner } from '@socketsecurity/lib/spinner'
+ *
+ * const spinner = getDefaultSpinner()
+ * spinner.start('Loading…')
+ * ```
+ */
+export declare function getDefaultSpinner(): ReturnType;
+// REMOVED: Deprecated `spinner` export
+// Migration: Use getDefaultSpinner() instead
+// See: getDefaultSpinner() function above
+/**
+ * Configuration options for `withSpinner()` helper.
+ * @template T - Return type of the async operation
+ */
+export type WithSpinnerOptions = {
+    /** Message to display while the spinner is running */
+    message: string;
+    /** Async function to execute while spinner is active */
+    operation: () => Promise;
+    /**
+     * Optional spinner instance to use.
+     * If not provided, operation runs without spinner.
+     */
+    spinner?: Spinner | undefined;
+    /**
+     * Optional spinner options to apply during the operation.
+     * These options will be pushed when the operation starts and popped when it completes.
+     * Supports color and shimmer configuration.
+     */
+    withOptions?: Partial> | undefined;
+};
+/**
+ * Execute an async operation with spinner lifecycle management.
+ * Ensures `spinner.stop()` is always called via try/finally, even if the operation throws.
+ * Provides safe cleanup and consistent spinner behavior.
+ *
+ * @template T - Return type of the operation
+ * @param options - Configuration object
+ * @param options.message - Message to display while spinner is running
+ * @param options.operation - Async function to execute
+ * @param options.spinner - Optional spinner instance (if not provided, no spinner is used)
+ * @returns Result of the operation
+ * @throws Re-throws any error from operation after stopping spinner
+ *
+ * @example
+ * ```ts
+ * import { Spinner, withSpinner } from '@socketsecurity/lib/spinner'
+ *
+ * const spinner = Spinner()
+ *
+ * // With spinner instance
+ * const result = await withSpinner({
+ *   message: 'Processing…',
+ *   operation: async () => {
+ *     return await processData()
+ *   },
+ *   spinner
+ * })
+ *
+ * // Without spinner instance (no-op, just runs operation)
+ * const result = await withSpinner({
+ *   message: 'Processing…',
+ *   operation: async () => {
+ *     return await processData()
+ *   }
+ * })
+ * ```
+ */
+export declare function withSpinner(options: WithSpinnerOptions): Promise;
+/**
+ * Configuration options for `withSpinnerRestore()` helper.
+ * @template T - Return type of the async operation
+ */
+export type WithSpinnerRestoreOptions = {
+    /** Async function to execute while spinner is stopped */
+    operation: () => Promise;
+    /** Optional spinner instance to restore after operation */
+    spinner?: Spinner | undefined;
+    /** Whether spinner was spinning before the operation (used to conditionally restart) */
+    wasSpinning: boolean;
+};
+/**
+ * Execute an async operation with conditional spinner restart.
+ * Useful when you need to temporarily stop a spinner for an operation,
+ * then restore it to its previous state (if it was spinning).
+ *
+ * @template T - Return type of the operation
+ * @param options - Configuration object
+ * @param options.operation - Async function to execute
+ * @param options.spinner - Optional spinner instance to manage
+ * @param options.wasSpinning - Whether spinner was spinning before the operation
+ * @returns Result of the operation
+ * @throws Re-throws any error from operation after restoring spinner state
+ *
+ * @example
+ * ```ts
+ * import { getDefaultSpinner, withSpinnerRestore } from '@socketsecurity/lib/spinner'
+ *
+ * const spinner = getDefaultSpinner()
+ * const wasSpinning = spinner.isSpinning
+ * spinner.stop()
+ *
+ * const result = await withSpinnerRestore({
+ *   operation: async () => {
+ *     // Do work without spinner
+ *     return await someOperation()
+ *   },
+ *   spinner,
+ *   wasSpinning
+ * })
+ * // Spinner is automatically restarted if wasSpinning was true
+ * ```
+ */
+export declare function withSpinnerRestore(options: WithSpinnerRestoreOptions): Promise;
+/**
+ * Configuration options for `withSpinnerSync()` helper.
+ * @template T - Return type of the sync operation
+ */
+export type WithSpinnerSyncOptions = {
+    /** Message to display while the spinner is running */
+    message: string;
+    /** Synchronous function to execute while spinner is active */
+    operation: () => T;
+    /**
+     * Optional spinner instance to use.
+     * If not provided, operation runs without spinner.
+     */
+    spinner?: Spinner | undefined;
+    /**
+     * Optional spinner options to apply during the operation.
+     * These options will be pushed when the operation starts and popped when it completes.
+     * Supports color and shimmer configuration.
+     */
+    withOptions?: Partial> | undefined;
+};
+/**
+ * Execute a synchronous operation with spinner lifecycle management.
+ * Ensures `spinner.stop()` is always called via try/finally, even if the operation throws.
+ * Provides safe cleanup and consistent spinner behavior for sync operations.
+ *
+ * @template T - Return type of the operation
+ * @param options - Configuration object
+ * @param options.message - Message to display while spinner is running
+ * @param options.operation - Synchronous function to execute
+ * @param options.spinner - Optional spinner instance (if not provided, no spinner is used)
+ * @returns Result of the operation
+ * @throws Re-throws any error from operation after stopping spinner
+ *
+ * @example
+ * ```ts
+ * import { Spinner, withSpinnerSync } from '@socketsecurity/lib/spinner'
+ *
+ * const spinner = Spinner()
+ *
+ * const result = withSpinnerSync({
+ *   message: 'Processing…',
+ *   operation: () => {
+ *     return processDataSync()
+ *   },
+ *   spinner
+ * })
+ * ```
+ */
+export declare function withSpinnerSync(options: WithSpinnerSyncOptions): T;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/spinner.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/spinner.js
new file mode 100644
index 00000000..83b78d54
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/spinner.js
@@ -0,0 +1,966 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc2) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc2 = __getOwnPropDesc(from, key)) || desc2.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var spinner_exports = {};
+__export(spinner_exports, {
+  Spinner: () => Spinner,
+  ciSpinner: () => ciSpinner,
+  getCliSpinners: () => getCliSpinners,
+  getDefaultSpinner: () => getDefaultSpinner,
+  withSpinner: () => withSpinner,
+  withSpinnerRestore: () => withSpinnerRestore,
+  withSpinnerSync: () => withSpinnerSync
+});
+module.exports = __toCommonJS(spinner_exports);
+var import_node_process = __toESM(require("node:process"));
+var import_yoctocolors_cjs = __toESM(require("./external/yoctocolors-cjs"));
+var import_colors = require("./colors");
+var import_process = require("./constants/process");
+var import_ci = require("./env/ci");
+var import_debug = require("./debug");
+var import_pulse_frames = require("./effects/pulse-frames");
+var import_text_shimmer = require("./effects/text-shimmer");
+var import_yocto_spinner = __toESM(require("./external/@socketregistry/yocto-spinner"));
+var import_logger = require("./logger");
+var import_objects = require("./objects");
+var import_strings = require("./strings");
+var import_context = require("./themes/context");
+var import_themes = require("./themes/themes");
+var import_utils = require("./themes/utils");
+const ciSpinner = {
+  frames: [""],
+  interval: 2147483647
+};
+function desc(value) {
+  return {
+    __proto__: null,
+    configurable: true,
+    value,
+    writable: true
+  };
+}
+function formatProgress(progress) {
+  const { current, total, unit } = progress;
+  const percentage = total === 0 ? 0 : Math.round(current / total * 100);
+  const bar = renderProgressBar(percentage);
+  const count = unit ? `${current}/${total} ${unit}` : `${current}/${total}`;
+  return `${bar} ${percentage}% (${count})`;
+}
+function normalizeText(value) {
+  return typeof value === "string" ? value.trimStart() : "";
+}
+function renderProgressBar(percentage, width = 20) {
+  const filled = Math.round(percentage / 100 * width);
+  const empty = width - filled;
+  const bar = "\u2588".repeat(filled) + "\u2591".repeat(empty);
+  return import_yoctocolors_cjs.default.cyan(bar);
+}
+let _cliSpinners;
+// @__NO_SIDE_EFFECTS__
+function getCliSpinners(styleName) {
+  if (_cliSpinners === void 0) {
+    const YoctoCtor = import_yocto_spinner.default;
+    const tempInstance = YoctoCtor({});
+    const YoctoSpinnerClass = tempInstance.constructor;
+    _cliSpinners = {
+      __proto__: null,
+      ...YoctoSpinnerClass.spinners,
+      socket: (0, import_pulse_frames.generateSocketSpinnerFrames)()
+    };
+  }
+  if (typeof styleName === "string" && _cliSpinners) {
+    return (0, import_objects.hasOwn)(_cliSpinners, styleName) ? _cliSpinners[styleName] : void 0;
+  }
+  return _cliSpinners;
+}
+let _Spinner;
+let _defaultSpinner;
+// @__NO_SIDE_EFFECTS__
+function Spinner(options) {
+  if (_Spinner === void 0) {
+    const YoctoCtor = import_yocto_spinner.default;
+    const tempInstance = YoctoCtor({});
+    const YoctoSpinnerClass = tempInstance.constructor;
+    const logger = (0, import_logger.getDefaultLogger)();
+    _Spinner = class SpinnerClass extends YoctoSpinnerClass {
+      #baseText = "";
+      #indentation = "";
+      #progress;
+      #shimmer;
+      #shimmerSavedConfig;
+      constructor(options2) {
+        const opts = { __proto__: null, ...options2 };
+        let theme = (0, import_context.getTheme)();
+        if (opts.theme) {
+          if (typeof opts.theme === "string") {
+            theme = import_themes.THEMES[opts.theme];
+          } else {
+            theme = opts.theme;
+          }
+        }
+        let defaultColor = theme.colors.primary;
+        if (theme.effects?.spinner?.color) {
+          const resolved = (0, import_utils.resolveColor)(
+            theme.effects.spinner.color,
+            theme.colors
+          );
+          if (resolved === "inherit" || Array.isArray(resolved[0])) {
+            defaultColor = theme.colors.primary;
+          } else {
+            defaultColor = resolved;
+          }
+        }
+        const spinnerColor = opts.color ?? defaultColor;
+        if ((0, import_colors.isRgbTuple)(spinnerColor) && (spinnerColor.length !== 3 || !spinnerColor.every(
+          (n) => typeof n === "number" && n >= 0 && n <= 255
+        ))) {
+          throw new TypeError(
+            "RGB color must be an array of 3 numbers between 0 and 255"
+          );
+        }
+        const spinnerColorRgb = (0, import_colors.toRgb)(spinnerColor);
+        let shimmerInfo;
+        if (opts.shimmer) {
+          let shimmerDir;
+          let shimmerColor;
+          let shimmerSpeed = 1 / 3;
+          if (typeof opts.shimmer === "string") {
+            shimmerDir = opts.shimmer;
+          } else {
+            const shimmerConfig = {
+              __proto__: null,
+              ...opts.shimmer
+            };
+            shimmerDir = shimmerConfig.dir ?? import_text_shimmer.DIR_LTR;
+            shimmerColor = shimmerConfig.color ?? import_text_shimmer.COLOR_INHERIT;
+            shimmerSpeed = shimmerConfig.speed ?? 1 / 3;
+          }
+          shimmerInfo = {
+            __proto__: null,
+            color: shimmerColor === void 0 ? import_text_shimmer.COLOR_INHERIT : shimmerColor,
+            currentDir: import_text_shimmer.DIR_LTR,
+            mode: shimmerDir,
+            speed: shimmerSpeed,
+            step: 0
+          };
+        }
+        super({
+          signal: (0, import_process.getAbortSignal)(),
+          ...opts,
+          // Pass RGB color directly to yocto-spinner (it now supports RGB).
+          color: spinnerColorRgb,
+          // onRenderFrame callback provides full control over frame + text layout.
+          // Calculates spacing based on frame width to prevent text jumping.
+          onRenderFrame: (frame, text, applyColor) => {
+            const width = (0, import_strings.stringWidth)(frame);
+            const spacing = width === 1 ? "  " : " ";
+            return frame ? `${applyColor(frame)}${spacing}${text}` : text;
+          },
+          // onFrameUpdate callback is called by yocto-spinner whenever a frame advances.
+          // This ensures shimmer updates are perfectly synchronized with animation beats.
+          onFrameUpdate: shimmerInfo ? () => {
+            if (this.#baseText) {
+              super.text = this.#buildDisplayText();
+            }
+          } : void 0
+        });
+        this.#shimmer = shimmerInfo;
+        this.#shimmerSavedConfig = shimmerInfo;
+      }
+      // Override color getter to ensure it's always RGB.
+      get color() {
+        const value = super.color;
+        return (0, import_colors.isRgbTuple)(value) ? value : (0, import_colors.toRgb)(value);
+      }
+      // Override color setter to always convert to RGB before passing to yocto-spinner.
+      set color(value) {
+        super.color = (0, import_colors.isRgbTuple)(value) ? value : (0, import_colors.toRgb)(value);
+      }
+      // Getter to expose current shimmer state.
+      get shimmerState() {
+        if (!this.#shimmer) {
+          return void 0;
+        }
+        return {
+          color: this.#shimmer.color,
+          currentDir: this.#shimmer.currentDir,
+          mode: this.#shimmer.mode,
+          speed: this.#shimmer.speed,
+          step: this.#shimmer.step
+        };
+      }
+      /**
+       * Apply a yocto-spinner method and update logger state.
+       * Handles text normalization, extra arguments, and logger tracking.
+       * @private
+       */
+      #apply(methodName, args) {
+        let extras;
+        let text = args.at(0);
+        if (typeof text === "string") {
+          extras = args.slice(1);
+        } else {
+          extras = args;
+          text = "";
+        }
+        const wasSpinning = this.isSpinning;
+        const normalized = normalizeText(text);
+        if (methodName === "stop" && !normalized) {
+          super[methodName]();
+        } else {
+          super[methodName](normalized);
+        }
+        if (methodName === "stop") {
+          if (wasSpinning && normalized) {
+            logger[import_logger.lastWasBlankSymbol]((0, import_strings.isBlankString)(normalized));
+            logger[import_logger.incLogCallCountSymbol]();
+          }
+        } else {
+          logger[import_logger.lastWasBlankSymbol](false);
+          logger[import_logger.incLogCallCountSymbol]();
+        }
+        if (extras.length) {
+          logger.log(...extras);
+          logger[import_logger.lastWasBlankSymbol](false);
+        }
+        return this;
+      }
+      /**
+       * Build the complete display text with progress, shimmer, and indentation.
+       * Combines base text, progress bar, shimmer effects, and indentation.
+       * @private
+       */
+      #buildDisplayText() {
+        let displayText = this.#baseText;
+        if (this.#progress) {
+          const progressText = formatProgress(this.#progress);
+          displayText = displayText ? `${displayText} ${progressText}` : progressText;
+        }
+        if (displayText && this.#shimmer) {
+          let shimmerColor;
+          if (this.#shimmer.color === import_text_shimmer.COLOR_INHERIT) {
+            shimmerColor = this.color;
+          } else if (Array.isArray(this.#shimmer.color[0])) {
+            shimmerColor = this.#shimmer.color;
+          } else {
+            shimmerColor = (0, import_colors.toRgb)(this.#shimmer.color);
+          }
+          displayText = (0, import_text_shimmer.applyShimmer)(displayText, this.#shimmer, {
+            color: shimmerColor,
+            direction: this.#shimmer.mode
+          });
+        }
+        if (this.#indentation && displayText) {
+          displayText = this.#indentation + displayText;
+        }
+        return displayText;
+      }
+      /**
+       * Show a status message without stopping the spinner.
+       * Outputs the symbol and message to stderr, then continues spinning.
+       * @private
+       */
+      #showStatusAndKeepSpinning(symbolType, args) {
+        let text = args.at(0);
+        let extras;
+        if (typeof text === "string") {
+          extras = args.slice(1);
+        } else {
+          extras = args;
+          text = "";
+        }
+        logger.error(`${import_logger.LOG_SYMBOLS[symbolType]} ${text}`, ...extras);
+        return this;
+      }
+      /**
+       * Update the spinner's displayed text.
+       * Rebuilds display text and triggers render.
+       * @private
+       */
+      #updateSpinnerText() {
+        super.text = this.#buildDisplayText();
+      }
+      /**
+       * Show a debug message (ℹ) without stopping the spinner.
+       * Only displays if debug mode is enabled via environment variable.
+       * Outputs to stderr and continues spinning.
+       *
+       * @param text - Debug message to display
+       * @param extras - Additional values to log
+       * @returns This spinner for chaining
+       */
+      debug(text, ...extras) {
+        if ((0, import_debug.isDebug)()) {
+          return this.#showStatusAndKeepSpinning("info", [text, ...extras]);
+        }
+        return this;
+      }
+      /**
+       * Show a debug message (ℹ) and stop the spinner.
+       * Only displays if debug mode is enabled via environment variable.
+       * Auto-clears the spinner line before displaying the message.
+       *
+       * @param text - Debug message to display
+       * @param extras - Additional values to log
+       * @returns This spinner for chaining
+       */
+      debugAndStop(text, ...extras) {
+        if ((0, import_debug.isDebug)()) {
+          return this.#apply("info", [text, ...extras]);
+        }
+        return this;
+      }
+      /**
+       * Decrease indentation level by removing spaces from the left.
+       * Pass 0 to reset indentation to zero completely.
+       *
+       * @param spaces - Number of spaces to remove
+       * @returns This spinner for chaining
+       * @default spaces=2
+       *
+       * @example
+       * ```ts
+       * spinner.dedent()    // Remove 2 spaces
+       * spinner.dedent(4)   // Remove 4 spaces
+       * spinner.dedent(0)   // Reset to zero indentation
+       * ```
+       */
+      dedent(spaces) {
+        if (spaces === 0) {
+          this.#indentation = "";
+        } else {
+          const amount = spaces ?? 2;
+          const newLength = Math.max(0, this.#indentation.length - amount);
+          this.#indentation = this.#indentation.slice(0, newLength);
+        }
+        this.#updateSpinnerText();
+        return this;
+      }
+      /**
+       * Disable shimmer effect.
+       * Preserves config for later re-enable via enableShimmer().
+       *
+       * @returns This spinner for chaining
+       *
+       * @example
+       * spinner.disableShimmer()
+       */
+      disableShimmer() {
+        this.#shimmer = void 0;
+        this.#updateSpinnerText();
+        return this;
+      }
+      /**
+       * Show a done/success message (✓) without stopping the spinner.
+       * Alias for `success()` with a shorter name.
+       *
+       * DESIGN DECISION: Unlike yocto-spinner, our `done()` does NOT stop the spinner.
+       * Use `doneAndStop()` if you want to stop the spinner.
+       *
+       * @param text - Message to display
+       * @param extras - Additional values to log
+       * @returns This spinner for chaining
+       */
+      done(text, ...extras) {
+        return this.#showStatusAndKeepSpinning("success", [text, ...extras]);
+      }
+      /**
+       * Show a done/success message (✓) and stop the spinner.
+       * Auto-clears the spinner line before displaying the success message.
+       *
+       * @param text - Message to display
+       * @param extras - Additional values to log
+       * @returns This spinner for chaining
+       */
+      doneAndStop(text, ...extras) {
+        return this.#apply("success", [text, ...extras]);
+      }
+      /**
+       * Enable shimmer effect.
+       * Restores saved config or uses defaults if no saved config exists.
+       *
+       * @returns This spinner for chaining
+       *
+       * @example
+       * spinner.enableShimmer()
+       */
+      enableShimmer() {
+        if (this.#shimmerSavedConfig) {
+          this.#shimmer = { ...this.#shimmerSavedConfig };
+        } else {
+          this.#shimmer = {
+            color: import_text_shimmer.COLOR_INHERIT,
+            currentDir: import_text_shimmer.DIR_LTR,
+            mode: import_text_shimmer.DIR_LTR,
+            speed: 1 / 3,
+            step: 0
+          };
+          this.#shimmerSavedConfig = this.#shimmer;
+        }
+        this.#updateSpinnerText();
+        return this;
+      }
+      /**
+       * Show a failure message (✗) without stopping the spinner.
+       * DESIGN DECISION: Unlike yocto-spinner, our `fail()` does NOT stop the spinner.
+       * This allows displaying errors while continuing to spin.
+       * Use `failAndStop()` if you want to stop the spinner.
+       *
+       * @param text - Error message to display
+       * @param extras - Additional values to log
+       * @returns This spinner for chaining
+       */
+      fail(text, ...extras) {
+        return this.#showStatusAndKeepSpinning("fail", [text, ...extras]);
+      }
+      /**
+       * Show a failure message (✗) and stop the spinner.
+       * Auto-clears the spinner line before displaying the error message.
+       *
+       * @param text - Error message to display
+       * @param extras - Additional values to log
+       * @returns This spinner for chaining
+       */
+      failAndStop(text, ...extras) {
+        return this.#apply("error", [text, ...extras]);
+      }
+      /**
+       * Increase indentation level by adding spaces to the left.
+       * Pass 0 to reset indentation to zero completely.
+       *
+       * @param spaces - Number of spaces to add
+       * @returns This spinner for chaining
+       * @default spaces=2
+       *
+       * @example
+       * ```ts
+       * spinner.indent()    // Add 2 spaces
+       * spinner.indent(4)   // Add 4 spaces
+       * spinner.indent(0)   // Reset to zero indentation
+       * ```
+       */
+      indent(spaces) {
+        if (spaces === 0) {
+          this.#indentation = "";
+        } else {
+          const amount = spaces ?? 2;
+          this.#indentation += " ".repeat(amount);
+        }
+        this.#updateSpinnerText();
+        return this;
+      }
+      /**
+       * Show an info message (ℹ) without stopping the spinner.
+       * Outputs to stderr and continues spinning.
+       *
+       * @param text - Info message to display
+       * @param extras - Additional values to log
+       * @returns This spinner for chaining
+       */
+      info(text, ...extras) {
+        return this.#showStatusAndKeepSpinning("info", [text, ...extras]);
+      }
+      /**
+       * Show an info message (ℹ) and stop the spinner.
+       * Auto-clears the spinner line before displaying the message.
+       *
+       * @param text - Info message to display
+       * @param extras - Additional values to log
+       * @returns This spinner for chaining
+       */
+      infoAndStop(text, ...extras) {
+        return this.#apply("info", [text, ...extras]);
+      }
+      /**
+       * Log a message to stdout without stopping the spinner.
+       * Unlike other status methods, this outputs to stdout for data logging.
+       *
+       * @param args - Values to log to stdout
+       * @returns This spinner for chaining
+       */
+      log(...args) {
+        logger.log(...args);
+        return this;
+      }
+      /**
+       * Log a message to stdout and stop the spinner.
+       * Auto-clears the spinner line before displaying the message.
+       *
+       * @param text - Message to display
+       * @param extras - Additional values to log
+       * @returns This spinner for chaining
+       */
+      logAndStop(text, ...extras) {
+        return this.#apply("stop", [text, ...extras]);
+      }
+      /**
+       * Update progress information displayed with the spinner.
+       * Shows a progress bar with percentage and optional unit label.
+       *
+       * @param current - Current progress value
+       * @param total - Total/maximum progress value
+       * @param unit - Optional unit label (e.g., 'files', 'items')
+       * @returns This spinner for chaining
+       *
+       * @example
+       * ```ts
+       * spinner.progress(5, 10)            // "███████░░░░░░░░░░░░░ 50% (5/10)"
+       * spinner.progress(7, 20, 'files')   // "███████░░░░░░░░░░░░░ 35% (7/20 files)"
+       * ```
+       */
+      progress = (current, total, unit) => {
+        this.#progress = {
+          __proto__: null,
+          current,
+          total,
+          ...unit ? { unit } : {}
+        };
+        this.#updateSpinnerText();
+        return this;
+      };
+      /**
+       * Increment progress by a specified amount.
+       * Updates the progress bar displayed with the spinner.
+       * Clamps the result between 0 and the total value.
+       *
+       * @param amount - Amount to increment by
+       * @returns This spinner for chaining
+       * @default amount=1
+       *
+       * @example
+       * ```ts
+       * spinner.progress(0, 10, 'files')
+       * spinner.progressStep()    // Progress: 1/10
+       * spinner.progressStep(3)   // Progress: 4/10
+       * ```
+       */
+      progressStep(amount = 1) {
+        if (this.#progress) {
+          const newCurrent = this.#progress.current + amount;
+          this.#progress = {
+            __proto__: null,
+            current: Math.max(0, Math.min(newCurrent, this.#progress.total)),
+            total: this.#progress.total,
+            ...this.#progress.unit ? { unit: this.#progress.unit } : {}
+          };
+          this.#updateSpinnerText();
+        }
+        return this;
+      }
+      /**
+       * Show a skip message (↻) without stopping the spinner.
+       * Outputs to stderr and continues spinning.
+       *
+       * @param text - Skip message to display
+       * @param extras - Additional values to log
+       * @returns This spinner for chaining
+       */
+      skip(text, ...extras) {
+        return this.#showStatusAndKeepSpinning("skip", [text, ...extras]);
+      }
+      /**
+       * Show a skip message (↻) and stop the spinner.
+       * Auto-clears the spinner line before displaying the message.
+       *
+       * Implementation note: Unlike other *AndStop methods (successAndStop, failAndStop, etc.),
+       * this method cannot use #apply() with a 'skip' method name because yocto-spinner doesn't
+       * have a built-in 'skip' method. Instead, we manually stop the spinner then log the message
+       * with the skip symbol.
+       *
+       * @param text - Skip message to display
+       * @param extras - Additional values to log
+       * @returns This spinner for chaining
+       */
+      skipAndStop(text, ...extras) {
+        this.#apply("stop", []);
+        const normalized = normalizeText(text);
+        if (normalized) {
+          logger.error(`${import_logger.LOG_SYMBOLS.skip} ${normalized}`, ...extras);
+        }
+        return this;
+      }
+      /**
+       * Set complete shimmer configuration.
+       * Replaces any existing shimmer config with the provided values.
+       * Undefined properties will use default values.
+       *
+       * @param config - Complete shimmer configuration
+       * @returns This spinner for chaining
+       *
+       * @example
+       * spinner.setShimmer({
+       *   color: [255, 0, 0],
+       *   dir: 'rtl',
+       *   speed: 0.5
+       * })
+       */
+      setShimmer(config) {
+        this.#shimmer = {
+          color: config.color ?? import_text_shimmer.COLOR_INHERIT,
+          currentDir: import_text_shimmer.DIR_LTR,
+          mode: config.dir ?? import_text_shimmer.DIR_LTR,
+          speed: config.speed ?? 1 / 3,
+          step: 0
+        };
+        this.#shimmerSavedConfig = this.#shimmer;
+        this.#updateSpinnerText();
+        return this;
+      }
+      /**
+       * Start the spinner animation with optional text.
+       * Begins displaying the animated spinner on stderr.
+       *
+       * @param text - Optional text to display with the spinner
+       * @returns This spinner for chaining
+       *
+       * @example
+       * ```ts
+       * spinner.start('Loading…')
+       * // Later:
+       * spinner.successAndStop('Done!')
+       * ```
+       */
+      start(...args) {
+        if (args.length) {
+          const text = args.at(0);
+          const normalized = normalizeText(text);
+          if (!normalized) {
+            this.#baseText = "";
+            super.text = "";
+          } else {
+            this.#baseText = normalized;
+          }
+        }
+        this.#updateSpinnerText();
+        return this.#apply("start", []);
+      }
+      /**
+       * Log a main step message to stderr without stopping the spinner.
+       * Adds a blank line before the message for visual separation.
+       * Aligns with `logger.step()` to use stderr for status messages.
+       *
+       * @param text - Step message to display
+       * @param extras - Additional values to log
+       * @returns This spinner for chaining
+       *
+       * @example
+       * ```ts
+       * spinner.step('Building application')
+       * spinner.substep('Compiling TypeScript')
+       * spinner.substep('Bundling assets')
+       * ```
+       */
+      step(text, ...extras) {
+        if (typeof text === "string") {
+          logger.error("");
+          logger.error(text, ...extras);
+        }
+        return this;
+      }
+      /**
+       * Stop the spinner animation and clear internal state.
+       * Auto-clears the spinner line via yocto-spinner.stop().
+       * Resets progress, shimmer, and text state.
+       *
+       * @param text - Optional final text to display after stopping
+       * @returns This spinner for chaining
+       *
+       * @example
+       * ```ts
+       * spinner.start('Processing…')
+       * // Do work
+       * spinner.stop() // Just stop, no message
+       * // or
+       * spinner.stop('Finished processing')
+       * ```
+       */
+      stop(...args) {
+        this.#baseText = "";
+        this.#progress = void 0;
+        this.#shimmer = void 0;
+        const result = this.#apply("stop", args);
+        return result;
+      }
+      /**
+       * Log an indented substep message to stderr without stopping the spinner.
+       * Adds 2-space indentation to the message.
+       * Aligns with `logger.substep()` to use stderr for status messages.
+       *
+       * @param text - Substep message to display
+       * @param extras - Additional values to log
+       * @returns This spinner for chaining
+       *
+       * @example
+       * ```ts
+       * spinner.step('Building application')
+       * spinner.substep('Compiling TypeScript')
+       * spinner.substep('Bundling assets')
+       * ```
+       */
+      substep(text, ...extras) {
+        if (typeof text === "string") {
+          logger.error(`  ${text}`, ...extras);
+        }
+        return this;
+      }
+      /**
+       * Show a success message (✓) without stopping the spinner.
+       * DESIGN DECISION: Unlike yocto-spinner, our `success()` does NOT stop the spinner.
+       * This allows displaying success messages while continuing to spin for multi-step operations.
+       * Use `successAndStop()` if you want to stop the spinner.
+       *
+       * @param text - Success message to display
+       * @param extras - Additional values to log
+       * @returns This spinner for chaining
+       */
+      success(text, ...extras) {
+        return this.#showStatusAndKeepSpinning("success", [text, ...extras]);
+      }
+      /**
+       * Show a success message (✓) and stop the spinner.
+       * Auto-clears the spinner line before displaying the success message.
+       *
+       * @param text - Success message to display
+       * @param extras - Additional values to log
+       * @returns This spinner for chaining
+       */
+      successAndStop(text, ...extras) {
+        return this.#apply("success", [text, ...extras]);
+      }
+      text(value) {
+        if (arguments.length === 0) {
+          return this.#baseText;
+        }
+        this.#baseText = value ?? "";
+        this.#updateSpinnerText();
+        return this;
+      }
+      /**
+       * Update partial shimmer configuration.
+       * Merges with existing config, enabling shimmer if currently disabled.
+       *
+       * @param config - Partial shimmer configuration to merge
+       * @returns This spinner for chaining
+       *
+       * @example
+       * // Update just the speed
+       * spinner.updateShimmer({ speed: 0.5 })
+       *
+       * // Update direction
+       * spinner.updateShimmer({ dir: 'rtl' })
+       *
+       * // Update multiple properties
+       * spinner.updateShimmer({ color: [255, 0, 0], speed: 0.8 })
+       */
+      updateShimmer(config) {
+        const partialConfig = {
+          __proto__: null,
+          ...config
+        };
+        if (this.#shimmer) {
+          this.#shimmer = {
+            ...this.#shimmer,
+            ...partialConfig.color !== void 0 ? { color: partialConfig.color } : {},
+            ...partialConfig.dir !== void 0 ? { mode: partialConfig.dir } : {},
+            ...partialConfig.speed !== void 0 ? { speed: partialConfig.speed } : {}
+          };
+          this.#shimmerSavedConfig = this.#shimmer;
+        } else if (this.#shimmerSavedConfig) {
+          this.#shimmer = {
+            ...this.#shimmerSavedConfig,
+            ...partialConfig.color !== void 0 ? { color: partialConfig.color } : {},
+            ...partialConfig.dir !== void 0 ? { mode: partialConfig.dir } : {},
+            ...partialConfig.speed !== void 0 ? { speed: partialConfig.speed } : {}
+          };
+          this.#shimmerSavedConfig = this.#shimmer;
+        } else {
+          this.#shimmer = {
+            color: partialConfig.color ?? import_text_shimmer.COLOR_INHERIT,
+            currentDir: import_text_shimmer.DIR_LTR,
+            mode: partialConfig.dir ?? import_text_shimmer.DIR_LTR,
+            speed: partialConfig.speed ?? 1 / 3,
+            step: 0
+          };
+          this.#shimmerSavedConfig = this.#shimmer;
+        }
+        this.#updateSpinnerText();
+        return this;
+      }
+      /**
+       * Show a warning message (⚠) without stopping the spinner.
+       * Outputs to stderr and continues spinning.
+       *
+       * @param text - Warning message to display
+       * @param extras - Additional values to log
+       * @returns This spinner for chaining
+       */
+      warn(text, ...extras) {
+        return this.#showStatusAndKeepSpinning("warn", [text, ...extras]);
+      }
+      /**
+       * Show a warning message (⚠) and stop the spinner.
+       * Auto-clears the spinner line before displaying the warning message.
+       *
+       * @param text - Warning message to display
+       * @param extras - Additional values to log
+       * @returns This spinner for chaining
+       */
+      warnAndStop(text, ...extras) {
+        return this.#apply("warning", [text, ...extras]);
+      }
+    };
+    Object.defineProperties(_Spinner.prototype, {
+      error: desc(_Spinner.prototype.fail),
+      errorAndStop: desc(_Spinner.prototype.failAndStop),
+      warning: desc(_Spinner.prototype.warn),
+      warningAndStop: desc(_Spinner.prototype.warnAndStop)
+    });
+    _defaultSpinner = (0, import_ci.getCI)() ? ciSpinner : /* @__PURE__ */ getCliSpinners("socket");
+  }
+  return new _Spinner({
+    spinner: _defaultSpinner,
+    ...options
+  });
+}
+let _spinner;
+function getDefaultSpinner() {
+  if (_spinner === void 0) {
+    _spinner = /* @__PURE__ */ Spinner();
+  }
+  return _spinner;
+}
+async function withSpinner(options) {
+  const { message, operation, spinner, withOptions } = {
+    __proto__: null,
+    ...options
+  };
+  if (!spinner) {
+    return await operation();
+  }
+  const savedColor = withOptions?.color !== void 0 ? spinner.color : void 0;
+  const savedShimmerState = withOptions?.shimmer !== void 0 ? spinner.shimmerState : void 0;
+  if (withOptions?.color !== void 0) {
+    spinner.color = (0, import_colors.toRgb)(withOptions.color);
+  }
+  if (withOptions?.shimmer !== void 0) {
+    if (typeof withOptions.shimmer === "string") {
+      spinner.updateShimmer({ dir: withOptions.shimmer });
+    } else {
+      spinner.setShimmer(withOptions.shimmer);
+    }
+  }
+  spinner.start(message);
+  try {
+    return await operation();
+  } finally {
+    const wasSpinning = spinner.isSpinning;
+    spinner.stop();
+    if (wasSpinning) {
+      import_node_process.default.stderr.write("\r\x1B[2K");
+    }
+    if (savedColor !== void 0) {
+      spinner.color = savedColor;
+    }
+    if (withOptions?.shimmer !== void 0) {
+      if (savedShimmerState) {
+        spinner.setShimmer({
+          color: savedShimmerState.color,
+          dir: savedShimmerState.mode,
+          speed: savedShimmerState.speed
+        });
+      } else {
+        spinner.disableShimmer();
+      }
+    }
+  }
+}
+async function withSpinnerRestore(options) {
+  const { operation, spinner, wasSpinning } = {
+    __proto__: null,
+    ...options
+  };
+  try {
+    return await operation();
+  } finally {
+    if (spinner && wasSpinning) {
+      spinner.start();
+    }
+  }
+}
+function withSpinnerSync(options) {
+  const { message, operation, spinner, withOptions } = {
+    __proto__: null,
+    ...options
+  };
+  if (!spinner) {
+    return operation();
+  }
+  const savedColor = withOptions?.color !== void 0 ? spinner.color : void 0;
+  const savedShimmerState = withOptions?.shimmer !== void 0 ? spinner.shimmerState : void 0;
+  if (withOptions?.color !== void 0) {
+    spinner.color = (0, import_colors.toRgb)(withOptions.color);
+  }
+  if (withOptions?.shimmer !== void 0) {
+    if (typeof withOptions.shimmer === "string") {
+      spinner.updateShimmer({ dir: withOptions.shimmer });
+    } else {
+      spinner.setShimmer(withOptions.shimmer);
+    }
+  }
+  spinner.start(message);
+  try {
+    return operation();
+  } finally {
+    spinner.stop();
+    if (savedColor !== void 0) {
+      spinner.color = savedColor;
+    }
+    if (withOptions?.shimmer !== void 0) {
+      if (savedShimmerState) {
+        spinner.setShimmer({
+          color: savedShimmerState.color,
+          dir: savedShimmerState.mode,
+          speed: savedShimmerState.speed
+        });
+      } else {
+        spinner.disableShimmer();
+      }
+    }
+  }
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  Spinner,
+  ciSpinner,
+  getCliSpinners,
+  getDefaultSpinner,
+  withSpinner,
+  withSpinnerRestore,
+  withSpinnerSync
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ssri.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ssri.d.ts
new file mode 100644
index 00000000..3c3529d2
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ssri.d.ts
@@ -0,0 +1,95 @@
+/**
+ * @fileoverview SSRI (Subresource Integrity) hash format utilities.
+ * Provides conversion and validation for SSRI and hex hash formats.
+ */
+/**
+ * Convert SSRI format hash to hex format.
+ *
+ * Takes a hash in SSRI format (e.g., "sha256-base64hash") and converts it to
+ * standard hex format (e.g., "hexstring").
+ *
+ * @param ssri - Hash in SSRI format (algorithm-base64)
+ * @returns Hex string representation of the hash
+ * @throws Error if SSRI format is invalid
+ *
+ * @example
+ * ```typescript
+ * const hex = ssriToHex('sha256-dmgqn8O75il1F24lQfOagWiHfYKNXK2LVkYfw2rCuFY=')
+ * // Returns: '76682a9fc3bbe62975176e2541f39a8168877d828d5cad8b56461fc36ac2b856'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function ssriToHex(ssri: string): string;
+/**
+ * Convert hex format hash to SSRI format.
+ *
+ * Takes a hash in hex format and converts it to SSRI format with the specified
+ * algorithm prefix (defaults to sha256).
+ *
+ * @param hex - Hash in hex format
+ * @param algorithm - Hash algorithm (default: 'sha256')
+ * @returns SSRI format hash (algorithm-base64)
+ * @throws Error if hex format is invalid
+ *
+ * @example
+ * ```typescript
+ * const ssri = hexToSsri('76682a9fc3bbe62975176e2541f39a8168877d828d5cad8b56461fc36ac2b856')
+ * // Returns: 'sha256-dmgqn8O75il1F24lQfOagWiHfYKNXK2LVkYfw2rCuFY='
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function hexToSsri(hex: string, algorithm?: string): string;
+/**
+ * Check if a string is valid SSRI format.
+ *
+ * Validates that a string matches the SSRI format pattern (algorithm-base64).
+ * Does not verify that the base64 encoding is valid.
+ *
+ * @param value - String to validate
+ * @returns True if string matches SSRI format
+ *
+ * @example
+ * ```typescript
+ * isValidSsri('sha256-dmgqn8O75il1F24lQfOagWiHfYKNXK2LVkYfw2rCuFY=') // true
+ * isValidSsri('76682a9f...') // false
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isValidSsri(value: string): boolean;
+/**
+ * Check if a string is valid hex format.
+ *
+ * Validates that a string contains only hexadecimal characters (0-9, a-f).
+ * Does not verify hash length or algorithm.
+ *
+ * @param value - String to validate
+ * @returns True if string is valid hex format
+ *
+ * @example
+ * ```typescript
+ * isValidHex('76682a9fc3bbe62975176e2541f39a8168877d828d5cad8b56461fc36ac2b856') // true
+ * isValidHex('sha256-dmgqn8O75il1F24lQfOagWiHfYKNXK2LVkYfw2rCuFY=') // false
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isValidHex(value: string): boolean;
+/**
+ * Parse SSRI format into components.
+ *
+ * Extracts the algorithm and base64 hash from an SSRI string.
+ *
+ * @param ssri - Hash in SSRI format
+ * @returns Object with algorithm and base64Hash properties
+ * @throws Error if SSRI format is invalid
+ *
+ * @example
+ * ```typescript
+ * const { algorithm, base64Hash } = parseSsri('sha256-dmgqn8O75il1F24lQfOagWiHfYKNXK2LVkYfw2rCuFY=')
+ * // Returns: { algorithm: 'sha256', base64Hash: 'dmgqn8O75il1F24lQfOagWiHfYKNXK2LVkYfw2rCuFY=' }
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function parseSsri(ssri: string): {
+    algorithm: string;
+    base64Hash: string;
+};
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ssri.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ssri.js
new file mode 100644
index 00000000..17018253
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/ssri.js
@@ -0,0 +1,73 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var ssri_exports = {};
+__export(ssri_exports, {
+  hexToSsri: () => hexToSsri,
+  isValidHex: () => isValidHex,
+  isValidSsri: () => isValidSsri,
+  parseSsri: () => parseSsri,
+  ssriToHex: () => ssriToHex
+});
+module.exports = __toCommonJS(ssri_exports);
+// @__NO_SIDE_EFFECTS__
+function ssriToHex(ssri) {
+  const match = /^([a-z0-9]+)-([A-Za-z0-9+/]+=*)$/i.exec(ssri);
+  if (!match || !match[2] || match[2].length < 2) {
+    throw new Error(`Invalid SSRI format: ${ssri}`);
+  }
+  const base64Hash = match[2];
+  const buffer = Buffer.from(base64Hash, "base64");
+  return buffer.toString("hex");
+}
+// @__NO_SIDE_EFFECTS__
+function hexToSsri(hex, algorithm = "sha256") {
+  if (!/^[a-f0-9]+$/i.test(hex)) {
+    throw new Error(`Invalid hex format: ${hex}`);
+  }
+  const buffer = Buffer.from(hex, "hex");
+  const base64Hash = buffer.toString("base64");
+  return `${algorithm}-${base64Hash}`;
+}
+// @__NO_SIDE_EFFECTS__
+function isValidSsri(value) {
+  return /^[a-z0-9]+-[A-Za-z0-9+/]{2,}=*$/i.test(value);
+}
+// @__NO_SIDE_EFFECTS__
+function isValidHex(value) {
+  return /^[a-f0-9]+$/i.test(value);
+}
+// @__NO_SIDE_EFFECTS__
+function parseSsri(ssri) {
+  const match = /^([a-z0-9]+)-([A-Za-z0-9+/]+=*)$/i.exec(ssri);
+  if (!match || !match[1] || !match[2] || match[2].length < 2) {
+    throw new Error(`Invalid SSRI format: ${ssri}`);
+  }
+  const algorithm = match[1];
+  const base64Hash = match[2];
+  return { algorithm, base64Hash };
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  hexToSsri,
+  isValidHex,
+  isValidSsri,
+  parseSsri,
+  ssriToHex
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/clear.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/clear.d.ts
new file mode 100644
index 00000000..5cf62bde
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/clear.d.ts
@@ -0,0 +1,140 @@
+export declare function clearLine(stream?: NodeJS.WriteStream): void;
+/**
+ * Clear multiple lines above the current cursor position.
+ * Useful for clearing multi-line output like progress bars or status messages.
+ *
+ * ANSI Sequences:
+ * - `\x1b[1A`: Move cursor up one line
+ * - `\x1b[2K`: Erase entire line
+ *
+ * @param count - Number of lines to clear
+ * @param stream - Output stream to clear
+ * @default stream process.stdout
+ *
+ * @example
+ * ```ts
+ * console.log('Line 1')
+ * console.log('Line 2')
+ * console.log('Line 3')
+ * clearLines(2) // Clears lines 2 and 3
+ * ```
+ */
+export declare function clearLines(count: number, stream?: NodeJS.WriteStream): void;
+/**
+ * Clear the entire screen and reset cursor to top-left.
+ * Only works in TTY environments.
+ *
+ * ANSI Sequence:
+ * - `\x1bc`: Full reset (clear screen and move cursor home)
+ *
+ * @param stream - Output stream to clear
+ * @default stream process.stdout
+ *
+ * @example
+ * ```ts
+ * clearScreen() // Clear entire terminal
+ * ```
+ */
+export declare function clearScreen(stream?: NodeJS.WriteStream): void;
+/**
+ * Clear the visible terminal screen.
+ * Alias for `clearScreen()`.
+ *
+ * @param stream - Output stream to clear
+ * @default stream process.stdout
+ *
+ * @example
+ * ```ts
+ * clearVisible() // Same as clearScreen()
+ * ```
+ */
+export declare function clearVisible(stream?: NodeJS.WriteStream): void;
+/**
+ * Move cursor to the beginning of the current line.
+ * Uses native TTY methods when available, falls back to carriage return.
+ *
+ * @param stream - Output stream to manipulate
+ * @default stream process.stdout
+ *
+ * @example
+ * ```ts
+ * process.stdout.write('Some text...')
+ * cursorToStart()
+ * process.stdout.write('New text') // Overwrites from start
+ * ```
+ */
+export declare function cursorToStart(stream?: NodeJS.WriteStream): void;
+/**
+ * Hide the terminal cursor.
+ * Useful for cleaner output during animations or progress indicators.
+ *
+ * ANSI Sequence:
+ * - `\x1b[?25l`: DECTCEM hide cursor
+ *
+ * @param stream - Output stream to manipulate
+ * @default stream process.stdout
+ *
+ * @example
+ * ```ts
+ * hideCursor()
+ * // ... show animation
+ * showCursor()
+ * ```
+ */
+export declare function hideCursor(stream?: NodeJS.WriteStream): void;
+/**
+ * Show the terminal cursor.
+ * Should be called after `hideCursor()` to restore normal cursor visibility.
+ *
+ * ANSI Sequence:
+ * - `\x1b[?25h`: DECTCEM show cursor
+ *
+ * @param stream - Output stream to manipulate
+ * @default stream process.stdout
+ *
+ * @example
+ * ```ts
+ * hideCursor()
+ * // ... show animation
+ * showCursor()
+ * ```
+ */
+export declare function showCursor(stream?: NodeJS.WriteStream): void;
+/**
+ * Save the current cursor position.
+ * Can be restored later with `restoreCursor()`.
+ *
+ * ANSI Sequence:
+ * - `\x1b7`: DECSC save cursor
+ *
+ * @param stream - Output stream to manipulate
+ * @default stream process.stdout
+ *
+ * @example
+ * ```ts
+ * saveCursor()
+ * console.log('Temporary text')
+ * restoreCursor()
+ * console.log('Back at saved position')
+ * ```
+ */
+export declare function saveCursor(stream?: NodeJS.WriteStream): void;
+/**
+ * Restore cursor to previously saved position.
+ * Must be called after `saveCursor()`.
+ *
+ * ANSI Sequence:
+ * - `\x1b8`: DECRC restore cursor
+ *
+ * @param stream - Output stream to manipulate
+ * @default stream process.stdout
+ *
+ * @example
+ * ```ts
+ * saveCursor()
+ * console.log('Temporary text')
+ * restoreCursor()
+ * console.log('Back at saved position')
+ * ```
+ */
+export declare function restoreCursor(stream?: NodeJS.WriteStream): void;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/clear.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/clear.js
new file mode 100644
index 00000000..b37cd303
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/clear.js
@@ -0,0 +1,95 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var clear_exports = {};
+__export(clear_exports, {
+  clearLine: () => clearLine,
+  clearLines: () => clearLines,
+  clearScreen: () => clearScreen,
+  clearVisible: () => clearVisible,
+  cursorToStart: () => cursorToStart,
+  hideCursor: () => hideCursor,
+  restoreCursor: () => restoreCursor,
+  saveCursor: () => saveCursor,
+  showCursor: () => showCursor
+});
+module.exports = __toCommonJS(clear_exports);
+var import_node_process = __toESM(require("node:process"));
+function clearLine(stream = import_node_process.default.stdout) {
+  if (stream.isTTY) {
+    stream.cursorTo(0);
+    stream.clearLine(0);
+  } else {
+    stream.write("\r\x1B[K");
+  }
+}
+function clearLines(count, stream = import_node_process.default.stdout) {
+  for (let i = 0; i < count; i++) {
+    stream.write("\x1B[1A\x1B[2K");
+  }
+}
+function clearScreen(stream = import_node_process.default.stdout) {
+  if (stream.isTTY) {
+    stream.write("\x1Bc");
+  }
+}
+function clearVisible(stream = import_node_process.default.stdout) {
+  clearScreen(stream);
+}
+function cursorToStart(stream = import_node_process.default.stdout) {
+  if (stream.isTTY) {
+    stream.cursorTo(0);
+  } else {
+    stream.write("\r");
+  }
+}
+function hideCursor(stream = import_node_process.default.stdout) {
+  stream.write("\x1B[?25l");
+}
+function showCursor(stream = import_node_process.default.stdout) {
+  stream.write("\x1B[?25h");
+}
+function saveCursor(stream = import_node_process.default.stdout) {
+  stream.write("\x1B7");
+}
+function restoreCursor(stream = import_node_process.default.stdout) {
+  stream.write("\x1B8");
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  clearLine,
+  clearLines,
+  clearScreen,
+  clearVisible,
+  cursorToStart,
+  hideCursor,
+  restoreCursor,
+  saveCursor,
+  showCursor
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/divider.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/divider.d.ts
new file mode 100644
index 00000000..1b52b1fd
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/divider.d.ts
@@ -0,0 +1,144 @@
+export interface DividerOptions {
+    /**
+     * Width of the divider line in characters.
+     * @default 55
+     */
+    width?: number | undefined;
+    /**
+     * Character to repeat for the divider line.
+     * @default '═'
+     */
+    char?: string | undefined;
+    /**
+     * Optional color function to apply to the divider.
+     * Accepts a function from `yoctocolors` or similar.
+     */
+    color?: ((text: string) => string) | undefined;
+}
+/**
+ * Create a divider line with custom character and width.
+ * Returns a string of repeated characters for visual separation.
+ *
+ * @param options - Divider formatting options
+ * @returns Divider string
+ *
+ * @example
+ * ```ts
+ * console.log(divider()) // Default: 55 '═' characters
+ * console.log(divider({ char: '-', width: 40 }))
+ * console.log(divider({ char: '·', width: 30 }))
+ * ```
+ */
+export declare function divider(options?: DividerOptions): string;
+/**
+ * Print a divider line directly to console.
+ *
+ * @param options - Divider formatting options
+ *
+ * @example
+ * ```ts
+ * printDivider() // Prints default divider
+ * printDivider({ char: '─', width: 60 })
+ * ```
+ */
+export declare function printDivider(options?: DividerOptions): void;
+/**
+ * Common divider style presets.
+ * Provides quick access to popular divider styles.
+ *
+ * @example
+ * ```ts
+ * console.log(dividers.thick()) // ═══════...
+ * console.log(dividers.thin())  // ───────...
+ * console.log(dividers.dotted()) // ·······...
+ * ```
+ */
+export declare const dividers: {
+    /** Thick double-line divider using `═` */
+    readonly thick: () => string;
+    /** Thin single-line divider using `─` */
+    readonly thin: () => string;
+    /** Double-line divider (alias for thick) */
+    readonly double: () => string;
+    /** Simple single dash divider using `-` */
+    readonly single: () => string;
+    /** Dotted divider using `·` */
+    readonly dotted: () => string;
+    /** Dashed divider using `╌` */
+    readonly dashed: () => string;
+    /** Wave divider using `~` */
+    readonly wave: () => string;
+    /** Star divider using `*` */
+    readonly star: () => string;
+    /** Diamond divider using `◆` */
+    readonly diamond: () => string;
+    /** Arrow divider using `→` */
+    readonly arrow: () => string;
+};
+/**
+ * Print a thick divider line (default style).
+ * Convenience function using `═` character.
+ *
+ * @example
+ * ```ts
+ * printThickDivider()
+ * // ═══════════════════════════════════════════════════
+ * ```
+ */
+export declare function printThickDivider(): void;
+/**
+ * Print a thin divider line.
+ * Convenience function using `─` character.
+ *
+ * @example
+ * ```ts
+ * printThinDivider()
+ * // ───────────────────────────────────────────────────
+ * ```
+ */
+export declare function printThinDivider(): void;
+/**
+ * Print a dotted divider line.
+ * Convenience function using `·` character.
+ *
+ * @example
+ * ```ts
+ * printDottedDivider()
+ * // ·······················································
+ * ```
+ */
+export declare function printDottedDivider(): void;
+/**
+ * Create a section break with blank lines before and after the divider.
+ * Useful for creating visual separation between major sections.
+ *
+ * @param options - Divider formatting options
+ * @returns Section break string with newlines
+ *
+ * @example
+ * ```ts
+ * console.log('Previous section')
+ * console.log(sectionBreak())
+ * console.log('Next section')
+ * // Output:
+ * // Previous section
+ * //
+ * // ═══════════════════════════════════════════════════
+ * //
+ * // Next section
+ * ```
+ */
+export declare function sectionBreak(options?: DividerOptions): string;
+/**
+ * Print a section break with spacing directly to console.
+ *
+ * @param options - Divider formatting options
+ *
+ * @example
+ * ```ts
+ * console.log('Previous section')
+ * printSectionBreak()
+ * console.log('Next section')
+ * ```
+ */
+export declare function printSectionBreak(options?: DividerOptions): void;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/divider.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/divider.js
new file mode 100644
index 00000000..7d6d666f
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/divider.js
@@ -0,0 +1,91 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var divider_exports = {};
+__export(divider_exports, {
+  divider: () => divider,
+  dividers: () => dividers,
+  printDivider: () => printDivider,
+  printDottedDivider: () => printDottedDivider,
+  printSectionBreak: () => printSectionBreak,
+  printThickDivider: () => printThickDivider,
+  printThinDivider: () => printThinDivider,
+  sectionBreak: () => sectionBreak
+});
+module.exports = __toCommonJS(divider_exports);
+var import_strings = require("../strings");
+function divider(options) {
+  const opts = { __proto__: null, ...options };
+  const { char = "\u2550", width = 55 } = opts;
+  return (0, import_strings.repeatString)(char, width);
+}
+function printDivider(options) {
+  console.log(divider(options));
+}
+const dividers = {
+  /** Thick double-line divider using `═` */
+  thick: () => divider({ char: "\u2550" }),
+  /** Thin single-line divider using `─` */
+  thin: () => divider({ char: "\u2500" }),
+  /** Double-line divider (alias for thick) */
+  double: () => divider({ char: "\u2550" }),
+  /** Simple single dash divider using `-` */
+  single: () => divider({ char: "-" }),
+  /** Dotted divider using `·` */
+  dotted: () => divider({ char: "\xB7" }),
+  /** Dashed divider using `╌` */
+  dashed: () => divider({ char: "\u254C" }),
+  /** Wave divider using `~` */
+  wave: () => divider({ char: "~" }),
+  /** Star divider using `*` */
+  star: () => divider({ char: "*" }),
+  /** Diamond divider using `◆` */
+  diamond: () => divider({ char: "\u25C6" }),
+  /** Arrow divider using `→` */
+  arrow: () => divider({ char: "\u2192" })
+};
+function printThickDivider() {
+  printDivider({ char: "\u2550" });
+}
+function printThinDivider() {
+  printDivider({ char: "\u2500" });
+}
+function printDottedDivider() {
+  printDivider({ char: "\xB7" });
+}
+function sectionBreak(options) {
+  const div = divider(options);
+  return `
+${div}
+`;
+}
+function printSectionBreak(options) {
+  console.log(sectionBreak(options));
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  divider,
+  dividers,
+  printDivider,
+  printDottedDivider,
+  printSectionBreak,
+  printThickDivider,
+  printThinDivider,
+  sectionBreak
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/footer.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/footer.d.ts
new file mode 100644
index 00000000..b8417df4
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/footer.d.ts
@@ -0,0 +1,92 @@
+export interface FooterOptions {
+    /**
+     * Width of the footer border in characters.
+     * @default 80
+     */
+    width?: number | undefined;
+    /**
+     * Character to use for the border line.
+     * @default '='
+     */
+    borderChar?: string | undefined;
+    /**
+     * Include ISO timestamp in footer.
+     * @default false
+     */
+    showTimestamp?: boolean | undefined;
+    /**
+     * Show duration since start time.
+     * @default false
+     */
+    showDuration?: boolean | undefined;
+    /**
+     * Start time in milliseconds (from Date.now()).
+     * Required when `showDuration` is true.
+     */
+    startTime?: number | undefined;
+    /**
+     * Color to apply to the footer message.
+     * @default 'gray'
+     */
+    color?: 'cyan' | 'green' | 'yellow' | 'blue' | 'magenta' | 'red' | 'gray' | undefined;
+}
+export interface SummaryStats {
+    /** Total number of items processed */
+    total?: number | undefined;
+    /** Number of successful items */
+    success?: number | undefined;
+    /** Number of failed items */
+    failed?: number | undefined;
+    /** Number of skipped items */
+    skipped?: number | undefined;
+    /** Number of warnings */
+    warnings?: number | undefined;
+    /** Number of errors */
+    errors?: number | undefined;
+    /** Duration in milliseconds (timestamp value, not elapsed time) */
+    duration?: number | undefined;
+}
+/**
+ * Create a formatted footer with optional message, timestamp, and duration.
+ * Useful for marking the end of CLI output or showing completion status.
+ *
+ * @param message - Optional message to display in footer
+ * @param options - Footer formatting options
+ * @returns Formatted footer string with border and optional info
+ *
+ * @example
+ * ```ts
+ * const startTime = Date.now()
+ * // ... do work
+ * console.log(createFooter('Build complete', {
+ *   width: 60,
+ *   color: 'green',
+ *   showDuration: true,
+ *   startTime
+ * }))
+ * ```
+ */
+export declare function createFooter(message?: string | undefined, options?: FooterOptions): string;
+/**
+ * Create a summary footer with statistics and colored status indicators.
+ * Automatically formats success/failure/warning counts with appropriate colors.
+ * Useful for test results, build summaries, or batch operation reports.
+ *
+ * @param stats - Statistics to display in the summary
+ * @param options - Footer formatting options
+ * @returns Formatted summary footer string with colored indicators
+ *
+ * @example
+ * ```ts
+ * console.log(createSummaryFooter({
+ *   total: 150,
+ *   success: 145,
+ *   failed: 3,
+ *   skipped: 2,
+ *   warnings: 5
+ * }))
+ * // Output: Total: 150 | ✓ 145 passed | ✗ 3 failed | ○ 2 skipped | ⚠ 5 warnings
+ * // ========================================
+ * ```
+ */
+export declare function createSummaryFooter(stats: SummaryStats, options?: FooterOptions): string;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/footer.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/footer.js
new file mode 100644
index 00000000..93423f64
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/footer.js
@@ -0,0 +1,96 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var footer_exports = {};
+__export(footer_exports, {
+  createFooter: () => createFooter,
+  createSummaryFooter: () => createSummaryFooter
+});
+module.exports = __toCommonJS(footer_exports);
+var import_yoctocolors_cjs = __toESM(require("../external/yoctocolors-cjs"));
+var import_strings = require("../strings");
+function createFooter(message, options) {
+  const {
+    borderChar = "=",
+    color = "gray",
+    showDuration = false,
+    showTimestamp = false,
+    startTime,
+    width = 80
+  } = { __proto__: null, ...options };
+  const border = (0, import_strings.repeatString)(borderChar, width);
+  const lines = [];
+  if (message) {
+    const colorFn = color && import_yoctocolors_cjs.default[color] ? import_yoctocolors_cjs.default[color] : (s) => s;
+    lines.push(colorFn(message));
+  }
+  if (showTimestamp) {
+    const timestamp = (/* @__PURE__ */ new Date()).toISOString();
+    lines.push(import_yoctocolors_cjs.default.gray(`Completed at: ${timestamp}`));
+  }
+  if (showDuration && startTime) {
+    const duration = Date.now() - startTime;
+    const seconds = (duration / 1e3).toFixed(2);
+    lines.push(import_yoctocolors_cjs.default.gray(`Duration: ${seconds}s`));
+  }
+  lines.push(border);
+  return lines.join("\n");
+}
+function createSummaryFooter(stats, options) {
+  const parts = [];
+  if (stats.total !== void 0) {
+    parts.push(`Total: ${stats.total}`);
+  }
+  if (stats.success !== void 0) {
+    parts.push(import_yoctocolors_cjs.default.green(`\u2713 ${stats.success} passed`));
+  }
+  if (stats.failed !== void 0 && stats.failed > 0) {
+    parts.push(import_yoctocolors_cjs.default.red(`\u2717 ${stats.failed} failed`));
+  }
+  if (stats.skipped !== void 0 && stats.skipped > 0) {
+    parts.push(import_yoctocolors_cjs.default.yellow(`\u25CB ${stats.skipped} skipped`));
+  }
+  if (stats.warnings !== void 0 && stats.warnings > 0) {
+    parts.push(import_yoctocolors_cjs.default.yellow(`\u26A0 ${stats.warnings} warnings`));
+  }
+  if (stats.errors !== void 0 && stats.errors > 0) {
+    parts.push(import_yoctocolors_cjs.default.red(`\u2717 ${stats.errors} errors`));
+  }
+  const message = parts.join(" | ");
+  return createFooter(message, {
+    ...options,
+    showDuration: stats.duration !== void 0,
+    ...stats.duration !== void 0 && { startTime: stats.duration }
+  });
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  createFooter,
+  createSummaryFooter
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/header.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/header.d.ts
new file mode 100644
index 00000000..9779948c
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/header.d.ts
@@ -0,0 +1,106 @@
+export interface HeaderOptions {
+    /**
+     * Width of the header in characters.
+     * @default 80
+     */
+    width?: number | undefined;
+    /**
+     * Character to use for border lines.
+     * @default '='
+     */
+    borderChar?: string | undefined;
+    /**
+     * Number of blank lines above and below title.
+     * @default 1
+     */
+    padding?: number | undefined;
+    /**
+     * Color to apply to the title text.
+     * @default 'cyan'
+     */
+    color?: 'cyan' | 'green' | 'yellow' | 'blue' | 'magenta' | 'red' | 'gray' | undefined;
+    /**
+     * Apply bold styling to title.
+     * @default true
+     */
+    bold?: boolean | undefined;
+}
+/**
+ * Create a formatted header/banner with borders and centered title.
+ * Useful for marking the start of CLI output or creating visual sections.
+ *
+ * @param title - Title text to display in header
+ * @param options - Header formatting options
+ * @returns Formatted header string with borders and centered title
+ *
+ * @example
+ * ```ts
+ * console.log(createHeader('Socket Security Analysis', {
+ *   width: 70,
+ *   color: 'cyan',
+ *   bold: true,
+ *   padding: 2
+ * }))
+ * // Output:
+ * // ======================================================================
+ * //
+ * //                    Socket Security Analysis
+ * //
+ * // ======================================================================
+ * ```
+ */
+export declare function createHeader(title: string, options?: HeaderOptions): string;
+/**
+ * Create a simple section header without padding.
+ * A lighter-weight alternative to `createHeader()` for subsections.
+ *
+ * @param title - Title text to display in header
+ * @param options - Header formatting options
+ * @returns Formatted section header string
+ *
+ * @example
+ * ```ts
+ * console.log(createSectionHeader('Dependencies', {
+ *   width: 50,
+ *   color: 'blue'
+ * }))
+ * // Output:
+ * // --------------------------------------------------
+ * //                   Dependencies
+ * // --------------------------------------------------
+ * ```
+ */
+export declare function createSectionHeader(title: string, options?: HeaderOptions): string;
+/**
+ * Print a header directly to stdout with standard formatting.
+ * Uses fixed width of 55 characters with `═` borders.
+ * Simpler alternative to `createHeader()` for quick headers.
+ *
+ * @param title - Title text to display
+ *
+ * @example
+ * ```ts
+ * printHeader('Package Analysis')
+ * // Output:
+ * // ═══════════════════════════════════════════════════
+ * //   Package Analysis
+ * // ═══════════════════════════════════════════════════
+ * ```
+ */
+export declare function printHeader(title: string): void;
+/**
+ * Print a footer with optional success message.
+ * Uses `─` border character for a lighter appearance.
+ * Fixed width of 55 characters to match `printHeader()`.
+ *
+ * @param message - Optional message to display (shown in green)
+ *
+ * @example
+ * ```ts
+ * printFooter('Analysis complete')
+ * // Output:
+ * // ───────────────────────────────────────────────────
+ * // Analysis complete (in green)
+ * ```
+ */
+export declare function printFooter(message?: string | undefined): void;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/header.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/header.js
new file mode 100644
index 00000000..a38fb30f
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/header.js
@@ -0,0 +1,102 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var header_exports = {};
+__export(header_exports, {
+  createHeader: () => createHeader,
+  createSectionHeader: () => createSectionHeader,
+  printFooter: () => printFooter,
+  printHeader: () => printHeader
+});
+module.exports = __toCommonJS(header_exports);
+var import_yoctocolors_cjs = __toESM(require("../external/yoctocolors-cjs"));
+var import_strings = require("../strings");
+function createHeader(title, options) {
+  const {
+    bold = true,
+    borderChar = "=",
+    color = "cyan",
+    padding = 1,
+    width = 80
+  } = { __proto__: null, ...options };
+  const border = (0, import_strings.repeatString)(borderChar, width);
+  let formattedTitle = title;
+  if (color && import_yoctocolors_cjs.default[color]) {
+    formattedTitle = import_yoctocolors_cjs.default[color](formattedTitle);
+  }
+  if (bold && import_yoctocolors_cjs.default.bold) {
+    formattedTitle = import_yoctocolors_cjs.default.bold(formattedTitle);
+  }
+  const centeredTitle = (0, import_strings.centerText)(formattedTitle, width);
+  const paddingLine = (0, import_strings.repeatString)(" ", width);
+  const lines = [border];
+  for (let i = 0; i < padding; i++) {
+    lines.push(paddingLine);
+  }
+  lines.push(centeredTitle);
+  for (let i = 0; i < padding; i++) {
+    lines.push(paddingLine);
+  }
+  lines.push(border);
+  return lines.join("\n");
+}
+function createSectionHeader(title, options) {
+  const {
+    borderChar = "-",
+    color = "blue",
+    width = 60
+  } = { __proto__: null, ...options };
+  return createHeader(title, {
+    width,
+    borderChar,
+    padding: 0,
+    color,
+    bold: false
+  });
+}
+function printHeader(title) {
+  const border = (0, import_strings.repeatString)("\u2550", 55);
+  console.log(border);
+  console.log(`  ${title}`);
+  console.log(border);
+}
+function printFooter(message) {
+  const border = (0, import_strings.repeatString)("\u2500", 55);
+  console.log(border);
+  if (message) {
+    console.log(import_yoctocolors_cjs.default.green(message));
+  }
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  createHeader,
+  createSectionHeader,
+  printFooter,
+  printHeader
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/mask.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/mask.d.ts
new file mode 100644
index 00000000..c8779d7a
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/mask.d.ts
@@ -0,0 +1,151 @@
+import type { ChildProcess, SpawnOptions } from 'child_process';
+export interface OutputMaskOptions {
+    /**
+     * Current working directory for spawned process.
+     * @default process.cwd()
+     */
+    cwd?: string | undefined;
+    /**
+     * Environment variables for spawned process.
+     * @default process.env
+     */
+    env?: NodeJS.ProcessEnv | undefined;
+    /**
+     * Filter output before displaying or buffering.
+     * Return `false` to skip the line, `true` to include it.
+     *
+     * Useful for filtering non-fatal warnings or noise from test runners.
+     * The filter runs on every chunk of output before display/buffering.
+     *
+     * @param text - The output text chunk (may include ANSI codes)
+     * @param stream - Whether this came from 'stdout' or 'stderr'
+     * @returns `true` to include this output, `false` to skip it
+     *
+     * @example
+     * ```ts
+     * filterOutput: (text, stream) => {
+     *   // Skip vitest worker termination errors
+     *   if (text.includes('Terminating worker thread')) return false
+     *   return true
+     * }
+     * ```
+     */
+    filterOutput?: ((text: string, stream: 'stdout' | 'stderr') => boolean) | undefined;
+    /**
+     * Progress message to display in spinner.
+     * @default 'Running…'
+     */
+    message?: string | undefined;
+    /**
+     * Override the exit code based on captured output.
+     *
+     * Useful for handling non-fatal errors that shouldn't fail the build.
+     * Called after the process exits with the original code and all captured output.
+     * Return a number to override the exit code, or `undefined` to keep original.
+     *
+     * @param code - Original exit code from the process
+     * @param stdout - All captured stdout (even filtered lines are captured)
+     * @param stderr - All captured stderr (even filtered lines are captured)
+     * @returns New exit code, or `undefined` to keep original
+     *
+     * @example
+     * ```ts
+     * overrideExitCode: (code, stdout, stderr) => {
+     *   // If only worker termination errors, treat as success
+     *   const output = stdout + stderr
+     *   const hasWorkerError = output.includes('Terminating worker thread')
+     *   const hasRealFailure = output.includes('FAIL')
+     *   if (code !== 0 && hasWorkerError && !hasRealFailure) {
+     *     return 0 // Override to success
+     *   }
+     *   return undefined // Keep original
+     * }
+     * ```
+     */
+    overrideExitCode?: ((code: number, stdout: string, stderr: string) => number | undefined) | undefined;
+    /**
+     * Start with output visible instead of masked.
+     * When `true`, output shows immediately without needing ctrl+o.
+     * @default false
+     */
+    showOutput?: boolean | undefined;
+    /**
+     * Text to show after "ctrl+o" in spinner message.
+     * @default 'to see full output'
+     */
+    toggleText?: string | undefined;
+}
+export interface OutputMask {
+    /** Whether spinner is currently active */
+    isSpinning: boolean;
+    /** Buffered output lines */
+    outputBuffer: string[];
+    /** All stderr captured (for exit code override) */
+    stderrCapture: string;
+    /** All stdout captured (for exit code override) */
+    stdoutCapture: string;
+    /** Whether output is currently visible */
+    verbose: boolean;
+}
+/**
+ * Create an output mask for controlling command output visibility.
+ * The mask tracks whether output should be shown or hidden (buffered).
+ * When hidden, output is buffered and a spinner is shown instead.
+ *
+ * @example
+ * ```typescript
+ * const mask = createOutputMask({ showOutput: false })
+ * console.log(mask.verbose)  // false
+ * ```
+ */
+export declare function createOutputMask(options?: OutputMaskOptions): OutputMask;
+/**
+ * Create a keyboard handler for toggling output visibility.
+ * Handles two key combinations:
+ * - ctrl+o: Toggle between showing and hiding output.
+ * - ctrl+c: Cancel the running process.
+ * The handler manipulates terminal state using ANSI escape sequences.
+ *
+ * @example
+ * ```typescript
+ * const handler = createKeyboardHandler(mask, childProcess, {
+ *   message: 'Testing...',
+ * })
+ * ```
+ */
+type ReadlineKey = {
+    ctrl?: boolean;
+    name?: string;
+};
+export declare function createKeyboardHandler(mask: OutputMask, child: ChildProcess, options?: OutputMaskOptions): (_str: string, key: ReadlineKey) => void;
+/**
+ * Attach output masking to a child process.
+ * Returns a promise that resolves with the exit code.
+ * This function:
+ * - Sets up keyboard input handling in raw mode for immediate key capture.
+ * - Buffers stdout/stderr when not in verbose mode.
+ * - Shows a spinner when output is masked.
+ * - Allows toggling between masked and unmasked output with ctrl+o.
+ *
+ * @example
+ * ```typescript
+ * const child = spawn("pnpm", ["test"], { stdio: ["inherit", "pipe", "pipe"] })
+ * const exitCode = await attachOutputMask(child, { message: 'Running tests' })
+ * ```
+ */
+export declare function attachOutputMask(child: ChildProcess, options?: OutputMaskOptions): Promise;
+/**
+ * Run a command with interactive output masking.
+ * Convenience wrapper around spawn + attachOutputMask.
+ * Spawns a child process and attaches the output masking system to it.
+ * stdin is inherited, stdout and stderr are piped for masking control.
+ *
+ * @example
+ * ```typescript
+ * const exitCode = await runWithMask('pnpm', ['test'], {
+ *   message: 'Running tests',
+ * })
+ * ```
+ */
+export declare function runWithMask(command: string, args?: string[], options?: OutputMaskOptions & SpawnOptions): Promise;
+export {};
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/mask.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/mask.js
new file mode 100644
index 00000000..0ae46a8b
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/mask.js
@@ -0,0 +1,224 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var mask_exports = {};
+__export(mask_exports, {
+  attachOutputMask: () => attachOutputMask,
+  createKeyboardHandler: () => createKeyboardHandler,
+  createOutputMask: () => createOutputMask,
+  runWithMask: () => runWithMask
+});
+module.exports = __toCommonJS(mask_exports);
+var import_node_process = __toESM(require("node:process"));
+var import_spinner = require("../spinner.js");
+var import_clear = require("./clear.js");
+var import_stdout = require("./stdout.js");
+let _child_process;
+// @__NO_SIDE_EFFECTS__
+function getChildProcess() {
+  if (_child_process === void 0) {
+    _child_process = require("child_process");
+  }
+  return _child_process;
+}
+let _readline;
+// @__NO_SIDE_EFFECTS__
+function getReadline() {
+  if (_readline === void 0) {
+    _readline = require("readline");
+  }
+  return _readline;
+}
+const spinner = (0, import_spinner.getDefaultSpinner)();
+function createOutputMask(options = {}) {
+  const { showOutput = false } = options;
+  return {
+    isSpinning: !showOutput,
+    outputBuffer: [],
+    stderrCapture: "",
+    stdoutCapture: "",
+    verbose: showOutput
+  };
+}
+function createKeyboardHandler(mask, child, options = {}) {
+  const { message = "Running\u2026", toggleText = "to see full output" } = options;
+  return (_str, key) => {
+    if (key?.ctrl && key.name === "o") {
+      mask.verbose = !mask.verbose;
+      if (mask.verbose) {
+        if (mask.isSpinning) {
+          spinner.stop();
+          mask.isSpinning = false;
+        }
+        (0, import_clear.clearLine)();
+        if (mask.outputBuffer.length > 0) {
+          console.log("--- Output (ctrl+o to hide) ---");
+          mask.outputBuffer.forEach((line) => {
+            (0, import_stdout.write)(line);
+          });
+        }
+      } else {
+        if (mask.outputBuffer.length > 0) {
+          const lineCount = mask.outputBuffer.join("").split("\n").length + 1;
+          for (let i = 0; i < lineCount; i += 1) {
+            import_node_process.default.stdout.write("\x1B[1A\x1B[2K");
+          }
+        }
+        (0, import_clear.clearLine)();
+        mask.outputBuffer = [];
+        if (!mask.isSpinning) {
+          spinner.start(`${message} (ctrl+o ${toggleText})`);
+          mask.isSpinning = true;
+        }
+      }
+    } else if (key?.ctrl && key.name === "c") {
+      child.kill("SIGTERM");
+      if (import_node_process.default.stdin.isTTY) {
+        import_node_process.default.stdin.setRawMode(false);
+      }
+      throw new Error("Process cancelled by user");
+    }
+  };
+}
+function attachOutputMask(child, options = {}) {
+  return new Promise((resolve, reject) => {
+    const { message = "Running\u2026" } = options;
+    const mask = createOutputMask(options);
+    if (mask.isSpinning && import_node_process.default.stdout.isTTY) {
+      spinner.start(
+        `${message} (ctrl+o ${options.toggleText || "to see full output"})`
+      );
+    }
+    if (import_node_process.default.stdin.isTTY) {
+      (/* @__PURE__ */ getReadline()).emitKeypressEvents(import_node_process.default.stdin);
+      import_node_process.default.stdin.setRawMode(true);
+      const keypressHandler = createKeyboardHandler(mask, child, options);
+      import_node_process.default.stdin.on("keypress", keypressHandler);
+      child.on("exit", () => {
+        if (import_node_process.default.stdin.isTTY) {
+          import_node_process.default.stdin.setRawMode(false);
+          import_node_process.default.stdin.removeListener("keypress", keypressHandler);
+        }
+      });
+    }
+    if (child.stdout) {
+      child.stdout.on("data", (data) => {
+        const text = data.toString();
+        mask.stdoutCapture += text;
+        if (options.filterOutput && !options.filterOutput(text, "stdout")) {
+          return void 0;
+        }
+        if (mask.verbose) {
+          (0, import_stdout.write)(text);
+        } else {
+          mask.outputBuffer.push(text);
+          const lines = mask.outputBuffer.join("").split("\n");
+          if (lines.length > 1e3) {
+            mask.outputBuffer = [lines.slice(-1e3).join("\n")];
+          }
+        }
+        return void 0;
+      });
+    }
+    if (child.stderr) {
+      child.stderr.on("data", (data) => {
+        const text = data.toString();
+        mask.stderrCapture += text;
+        if (options.filterOutput && !options.filterOutput(text, "stderr")) {
+          return void 0;
+        }
+        if (mask.verbose) {
+          import_node_process.default.stderr.write(text);
+        } else {
+          mask.outputBuffer.push(text);
+        }
+        return void 0;
+      });
+    }
+    child.on("exit", (code) => {
+      if (import_node_process.default.stdin.isTTY) {
+        import_node_process.default.stdin.setRawMode(false);
+      }
+      let finalCode = code || 0;
+      if (options.overrideExitCode) {
+        const overridden = options.overrideExitCode(
+          finalCode,
+          mask.stdoutCapture,
+          mask.stderrCapture
+        );
+        if (overridden !== void 0) {
+          finalCode = overridden;
+        }
+      }
+      if (mask.isSpinning) {
+        if (finalCode === 0) {
+          spinner.successAndStop(`${message} completed`);
+        } else {
+          spinner.failAndStop(`${message} failed`);
+          if (mask.outputBuffer.length > 0 && !mask.verbose) {
+            console.log("\n--- Output ---");
+            mask.outputBuffer.forEach((line) => {
+              (0, import_stdout.write)(line);
+            });
+          }
+        }
+      }
+      resolve(finalCode);
+    });
+    child.on("error", (error) => {
+      if (import_node_process.default.stdin.isTTY) {
+        import_node_process.default.stdin.setRawMode(false);
+      }
+      if (mask.isSpinning) {
+        spinner.failAndStop(`${message} error`);
+      }
+      reject(error);
+    });
+  });
+}
+async function runWithMask(command, args = [], options = {}) {
+  const {
+    message = "Running\u2026",
+    showOutput = false,
+    toggleText = "to see output",
+    ...spawnOptions
+  } = options;
+  const child = (/* @__PURE__ */ getChildProcess()).spawn(command, args, {
+    stdio: ["inherit", "pipe", "pipe"],
+    ...spawnOptions
+  });
+  return await attachOutputMask(child, { message, showOutput, toggleText });
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  attachOutputMask,
+  createKeyboardHandler,
+  createOutputMask,
+  runWithMask
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/progress.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/progress.d.ts
new file mode 100644
index 00000000..832805cf
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/progress.d.ts
@@ -0,0 +1,148 @@
+export interface ProgressBarOptions {
+    /**
+     * Width of the progress bar in characters.
+     * @default 40
+     */
+    width?: number | undefined;
+    /**
+     * Format template for progress bar display.
+     * Available tokens: `:bar`, `:percent`, `:current`, `:total`, `:elapsed`, `:eta`.
+     * Custom tokens can be passed via the `tokens` parameter in `update()` or `tick()`.
+     * @default ':bar :percent :current/:total'
+     * @example
+     * ```ts
+     * format: ':bar :percent :current/:total :eta'
+     * ```
+     */
+    format?: string | undefined;
+    /**
+     * Character(s) to use for completed portion of bar.
+     * @default '█'
+     */
+    complete?: string | undefined;
+    /**
+     * Character(s) to use for incomplete portion of bar.
+     * @default '░'
+     */
+    incomplete?: string | undefined;
+    /**
+     * Character(s) to use for the head of the progress bar.
+     * @default ''
+     */
+    head?: string | undefined;
+    /**
+     * Clear the progress bar when complete.
+     * @default false
+     */
+    clear?: boolean | undefined;
+    /**
+     * Minimum time between renders in milliseconds.
+     * ~60fps = 16ms throttle.
+     * @default 16
+     */
+    renderThrottle?: number | undefined;
+    /**
+     * Stream to write progress bar output to.
+     * @default process.stderr
+     */
+    stream?: NodeJS.WriteStream | undefined;
+    /**
+     * Color to apply to the completed portion of the bar.
+     * @default 'cyan'
+     */
+    color?: 'cyan' | 'green' | 'yellow' | 'blue' | 'magenta' | undefined;
+}
+export declare class ProgressBar {
+    private current;
+    private total;
+    private startTime;
+    private lastRender;
+    private stream;
+    private options;
+    private terminated;
+    private lastDrawnWidth;
+    /**
+     * Create a new progress bar instance.
+     *
+     * @param total - Total number of units for the progress bar
+     * @param options - Configuration options for the progress bar
+     *
+     * @example
+     * ```ts
+     * const bar = new ProgressBar(100, {
+     *   width: 50,
+     *   format: ':bar :percent :current/:total :eta',
+     *   color: 'green'
+     * })
+     * ```
+     */
+    constructor(total: number, options?: ProgressBarOptions);
+    /**
+     * Update progress to a specific value and redraw the bar.
+     * Updates are throttled to prevent excessive rendering (default ~60fps).
+     *
+     * @param current - Current progress value (will be clamped to total)
+     * @param tokens - Optional custom tokens to replace in format string
+     *
+     * @example
+     * ```ts
+     * bar.update(50)
+     * bar.update(75, { status: 'Processing...' })
+     * ```
+     */
+    update(current: number, tokens?: Record): void;
+    /**
+     * Increment progress by a specified amount.
+     * Convenience method for `update(current + amount)`.
+     *
+     * @param amount - Amount to increment by
+     * @param tokens - Optional custom tokens to replace in format string
+     * @default amount 1
+     *
+     * @example
+     * ```ts
+     * bar.tick() // Increment by 1
+     * bar.tick(5) // Increment by 5
+     * bar.tick(1, { file: 'data.json' })
+     * ```
+     */
+    tick(amount?: number, tokens?: Record): void;
+    /**
+     * Render the progress bar.
+     */
+    private render;
+    /**
+     * Clear the current line.
+     */
+    private clearLine;
+    /**
+     * Format time in seconds to human readable.
+     */
+    private formatTime;
+    /**
+     * Terminate the progress bar and optionally clear it.
+     * Called automatically when progress reaches 100%.
+     * If `clear` option is true, removes the bar from terminal.
+     * Otherwise, moves to next line to preserve the final state.
+     */
+    terminate(): void;
+}
+/**
+ * Create a simple progress indicator without a graphical bar.
+ * Returns a formatted string showing progress as percentage and fraction.
+ *
+ * @param current - Current progress value
+ * @param total - Total progress value
+ * @param label - Optional label prefix
+ * @returns Formatted progress indicator string
+ *
+ * @example
+ * ```ts
+ * createProgressIndicator(50, 100)
+ * // Returns: '[50%] 50/100'
+ *
+ * createProgressIndicator(3, 10, 'Files')
+ * // Returns: 'Files: [30%] 3/10'
+ * ```
+ */
+export declare function createProgressIndicator(current: number, total: number, label?: string | undefined): string;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/progress.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/progress.js
new file mode 100644
index 00000000..f1647e1b
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/progress.js
@@ -0,0 +1,212 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var progress_exports = {};
+__export(progress_exports, {
+  ProgressBar: () => ProgressBar,
+  createProgressIndicator: () => createProgressIndicator
+});
+module.exports = __toCommonJS(progress_exports);
+var import_node_process = __toESM(require("node:process"));
+var import_yoctocolors_cjs = __toESM(require("../external/yoctocolors-cjs"));
+var import_strings = require("../strings");
+class ProgressBar {
+  current = 0;
+  total;
+  startTime;
+  lastRender = 0;
+  stream;
+  options;
+  terminated = false;
+  lastDrawnWidth = 0;
+  /**
+   * Create a new progress bar instance.
+   *
+   * @param total - Total number of units for the progress bar
+   * @param options - Configuration options for the progress bar
+   *
+   * @example
+   * ```ts
+   * const bar = new ProgressBar(100, {
+   *   width: 50,
+   *   format: ':bar :percent :current/:total :eta',
+   *   color: 'green'
+   * })
+   * ```
+   */
+  constructor(total, options) {
+    this.total = total;
+    this.startTime = Date.now();
+    this.stream = options?.stream || import_node_process.default.stderr;
+    this.options = {
+      width: 40,
+      format: ":bar :percent :current/:total",
+      complete: "\u2588",
+      incomplete: "\u2591",
+      head: "",
+      clear: false,
+      // ~60fps.
+      renderThrottle: 16,
+      stream: this.stream,
+      color: "cyan",
+      ...options
+    };
+  }
+  /**
+   * Update progress to a specific value and redraw the bar.
+   * Updates are throttled to prevent excessive rendering (default ~60fps).
+   *
+   * @param current - Current progress value (will be clamped to total)
+   * @param tokens - Optional custom tokens to replace in format string
+   *
+   * @example
+   * ```ts
+   * bar.update(50)
+   * bar.update(75, { status: 'Processing...' })
+   * ```
+   */
+  update(current, tokens) {
+    if (this.terminated) {
+      return;
+    }
+    this.current = Math.min(current, this.total);
+    const now = Date.now();
+    if (now - this.lastRender < this.options.renderThrottle && this.current < this.total) {
+      return;
+    }
+    this.lastRender = now;
+    this.render(tokens);
+    if (this.current >= this.total) {
+      this.terminate();
+    }
+  }
+  /**
+   * Increment progress by a specified amount.
+   * Convenience method for `update(current + amount)`.
+   *
+   * @param amount - Amount to increment by
+   * @param tokens - Optional custom tokens to replace in format string
+   * @default amount 1
+   *
+   * @example
+   * ```ts
+   * bar.tick() // Increment by 1
+   * bar.tick(5) // Increment by 5
+   * bar.tick(1, { file: 'data.json' })
+   * ```
+   */
+  tick(amount = 1, tokens) {
+    this.update(this.current + amount, tokens);
+  }
+  /**
+   * Render the progress bar.
+   */
+  render(tokens) {
+    const colorFn = import_yoctocolors_cjs.default[this.options.color] || ((s) => s);
+    const percent = this.total === 0 ? 0 : Math.floor(this.current / this.total * 100);
+    const elapsed = Date.now() - this.startTime;
+    const eta = this.current === 0 ? 0 : elapsed / this.current * (this.total - this.current);
+    const availableWidth = this.options.width;
+    const filledWidth = this.total === 0 ? 0 : Math.floor(this.current / this.total * availableWidth);
+    const emptyWidth = availableWidth - filledWidth;
+    const filled = (0, import_strings.repeatString)(this.options.complete, filledWidth);
+    const empty = (0, import_strings.repeatString)(this.options.incomplete, emptyWidth);
+    const bar = colorFn(filled) + empty;
+    let output = this.options.format;
+    output = output.replace(":bar", bar);
+    output = output.replace(":percent", `${percent}%`);
+    output = output.replace(":current", String(this.current));
+    output = output.replace(":total", String(this.total));
+    output = output.replace(":elapsed", this.formatTime(elapsed));
+    output = output.replace(":eta", this.formatTime(eta));
+    if (tokens) {
+      for (const [key, value] of Object.entries(tokens)) {
+        output = output.replace(`:${key}`, String(value));
+      }
+    }
+    this.clearLine();
+    this.stream.write(output);
+    this.lastDrawnWidth = (0, import_strings.stripAnsi)(output).length;
+  }
+  /**
+   * Clear the current line.
+   */
+  clearLine() {
+    if (this.stream.isTTY) {
+      this.stream.cursorTo(0);
+      this.stream.clearLine(0);
+    } else if (this.lastDrawnWidth > 0) {
+      this.stream.write(`\r${(0, import_strings.repeatString)(" ", this.lastDrawnWidth)}\r`);
+    }
+  }
+  /**
+   * Format time in seconds to human readable.
+   */
+  formatTime(ms) {
+    const seconds = Math.round(ms / 1e3);
+    if (seconds < 60) {
+      return `${seconds}s`;
+    }
+    const minutes = Math.floor(seconds / 60);
+    const remainingSeconds = seconds % 60;
+    return `${minutes}m${remainingSeconds}s`;
+  }
+  /**
+   * Terminate the progress bar and optionally clear it.
+   * Called automatically when progress reaches 100%.
+   * If `clear` option is true, removes the bar from terminal.
+   * Otherwise, moves to next line to preserve the final state.
+   */
+  terminate() {
+    if (this.terminated) {
+      return;
+    }
+    this.terminated = true;
+    if (this.options.clear) {
+      this.clearLine();
+    } else {
+      this.stream.write("\n");
+    }
+  }
+}
+function createProgressIndicator(current, total, label) {
+  const percent = total === 0 ? 0 : Math.floor(current / total * 100);
+  const progress = `${current}/${total}`;
+  let output = "";
+  if (label) {
+    output += `${label}: `;
+  }
+  output += `${import_yoctocolors_cjs.default.cyan(`[${percent}%]`)} ${progress}`;
+  return output;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  ProgressBar,
+  createProgressIndicator
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/prompts.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/prompts.d.ts
new file mode 100644
index 00000000..dccc91df
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/prompts.d.ts
@@ -0,0 +1,195 @@
+import checkboxRaw from '../external/@inquirer/checkbox';
+import confirmRaw from '../external/@inquirer/confirm';
+import inputRaw from '../external/@inquirer/input';
+import passwordRaw from '../external/@inquirer/password';
+import { type ThemeName } from '../themes/themes';
+import type { Theme } from '../themes/types';
+// Modules imported at the top - extract default and Separator
+declare const searchRaw: any;
+declare const selectRaw: any;
+declare const ActualSeparator: any;
+// Type definitions
+/**
+ * Choice option for select and search prompts.
+ *
+ * @template Value - Type of the choice value
+ */
+export interface Choice {
+    /** The value returned when this choice is selected */
+    value: Value;
+    /** Display name for the choice (defaults to value.toString()) */
+    name?: string | undefined;
+    /** Additional description text shown below the choice */
+    description?: string | undefined;
+    /** Short text shown after selection (defaults to name) */
+    short?: string | undefined;
+    /** Whether this choice is disabled, or a reason string */
+    disabled?: boolean | string | undefined;
+}
+/**
+ * Context for inquirer prompts.
+ * Minimal context interface used by Inquirer prompts.
+ * Duplicated from `@inquirer/type` - InquirerContext.
+ */
+interface InquirerContext {
+    /** Abort signal for cancelling the prompt */
+    signal?: AbortSignal | undefined;
+    /** Input stream (defaults to process.stdin) */
+    input?: NodeJS.ReadableStream | undefined;
+    /** Output stream (defaults to process.stdout) */
+    output?: NodeJS.WritableStream | undefined;
+    /** Clear the prompt from terminal when done */
+    clearPromptOnDone?: boolean | undefined;
+}
+/**
+ * Extended context with spinner support.
+ * Allows passing a spinner instance to be managed during prompts.
+ */
+export type Context = import('../objects').Remap;
+/**
+ * Separator for visual grouping in select/checkbox prompts.
+ * Creates a non-selectable visual separator line.
+ * Duplicated from `@inquirer/select` - Separator.
+ * This type definition ensures the Separator type is available in published packages.
+ *
+ * @example
+ * import { Separator } from './prompts'
+ *
+ * const choices = [
+ *   { name: 'Option 1', value: 1 },
+ *   new Separator(),
+ *   { name: 'Option 2', value: 2 }
+ * ]
+ */
+declare class SeparatorType {
+    readonly separator: string;
+    readonly type: 'separator';
+    constructor(separator?: string);
+}
+export type Separator = SeparatorType;
+/**
+ * Convert Socket theme to @inquirer theme format.
+ * Maps our theme colors to inquirer's style functions.
+ * Handles theme names, Theme objects, and passes through @inquirer themes.
+ *
+ * @param theme - Socket theme name, Theme object, or @inquirer theme
+ * @returns @inquirer theme object
+ *
+ * @example
+ * ```ts
+ * // Socket theme name
+ * createInquirerTheme('sunset')
+ *
+ * // Socket Theme object
+ * createInquirerTheme(SUNSET_THEME)
+ *
+ * // @inquirer theme (passes through)
+ * createInquirerTheme({ style: {...}, icon: {...} })
+ * ```
+ */
+export declare function createInquirerTheme(theme: Theme | ThemeName | unknown): Record;
+/**
+ * Wrap an inquirer prompt with spinner handling, theme injection, and signal injection.
+ * Automatically stops/starts spinners during prompt display, injects the current theme,
+ * and injects abort signals. Trims string results and handles cancellation gracefully.
+ *
+ * @template T - Type of the prompt result
+ * @param inquirerPrompt - The inquirer prompt function to wrap
+ * @returns Wrapped prompt function with spinner, theme, and signal handling
+ *
+ * @example
+ * const myPrompt = wrapPrompt(rawInquirerPrompt)
+ * const result = await myPrompt({ message: 'Enter name:' })
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function wrapPrompt(inquirerPrompt: (...args: unknown[]) => Promise): (...args: unknown[]) => Promise;
+/**
+ * Prompt to select multiple items from a list of choices.
+ * Wrapped with spinner handling and abort signal support.
+ *
+ * @example
+ * const choices = await checkbox({
+ *   message: 'Select options:',
+ *   choices: [
+ *     { name: 'Option 1', value: 'opt1' },
+ *     { name: 'Option 2', value: 'opt2' },
+ *     { name: 'Option 3', value: 'opt3' }
+ *   ]
+ * })
+ */
+export declare const checkbox: typeof checkboxRaw;
+/**
+ * Prompt for a yes/no confirmation.
+ * Wrapped with spinner handling and abort signal support.
+ *
+ * @example
+ * const answer = await confirm({ message: 'Continue?' })
+ * if (answer) { // user confirmed }
+ */
+export declare const confirm: typeof confirmRaw;
+/**
+ * Prompt for text input.
+ * Wrapped with spinner handling and abort signal support.
+ * Result is automatically trimmed.
+ *
+ * @example
+ * const name = await input({ message: 'Enter your name:' })
+ */
+export declare const input: typeof inputRaw;
+/**
+ * Prompt for password input (hidden characters).
+ * Wrapped with spinner handling and abort signal support.
+ *
+ * @example
+ * const token = await password({ message: 'Enter API token:' })
+ */
+export declare const password: typeof passwordRaw;
+/**
+ * Prompt with searchable/filterable choices.
+ * Wrapped with spinner handling and abort signal support.
+ *
+ * @example
+ * const result = await search({
+ *   message: 'Select a package:',
+ *   source: async (input) => fetchPackages(input)
+ * })
+ */
+export declare const search: typeof searchRaw;
+/**
+ * Prompt to select from a list of choices.
+ * Wrapped with spinner handling and abort signal support.
+ *
+ * @example
+ * const choice = await select({
+ *   message: 'Choose an option:',
+ *   choices: [
+ *     { name: 'Option 1', value: 'opt1' },
+ *     { name: 'Option 2', value: 'opt2' }
+ *   ]
+ * })
+ */
+export declare const select: typeof selectRaw;
+export { ActualSeparator as Separator };
+/**
+ * Create a separator for select prompts.
+ * Creates a visual separator line in choice lists.
+ *
+ * @param text - Optional separator text (defaults to '───────')
+ * @returns Separator instance
+ *
+ * @example
+ * import { select, createSeparator } from '@socketsecurity/lib/stdio/prompts'
+ *
+ * const choice = await select({
+ *   message: 'Choose an option:',
+ *   choices: [
+ *     { name: 'Option 1', value: 1 },
+ *     createSeparator(),
+ *     { name: 'Option 2', value: 2 }
+ *   ]
+ * })
+ */
+export declare function createSeparator(text?: string): InstanceType;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/prompts.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/prompts.js
new file mode 100644
index 00000000..b7759ac3
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/prompts.js
@@ -0,0 +1,176 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var prompts_exports = {};
+__export(prompts_exports, {
+  Separator: () => ActualSeparator,
+  checkbox: () => checkbox,
+  confirm: () => confirm,
+  createInquirerTheme: () => createInquirerTheme,
+  createSeparator: () => createSeparator,
+  input: () => input,
+  password: () => password,
+  search: () => search,
+  select: () => select,
+  wrapPrompt: () => wrapPrompt
+});
+module.exports = __toCommonJS(prompts_exports);
+var import_process = require("../constants/process");
+var import_checkbox = __toESM(require("../external/@inquirer/checkbox"));
+var import_confirm = __toESM(require("../external/@inquirer/confirm"));
+var import_input = __toESM(require("../external/@inquirer/input"));
+var import_password = __toESM(require("../external/@inquirer/password"));
+var searchModule = __toESM(require("../external/@inquirer/search"));
+var selectModuleImport = __toESM(require("../external/@inquirer/select"));
+var import_yoctocolors_cjs = __toESM(require("../external/yoctocolors-cjs"));
+var import_spinner = require("../spinner");
+var import_context = require("../themes/context");
+var import_themes = require("../themes/themes");
+var import_utils = require("../themes/utils");
+const abortSignal = (0, import_process.getAbortSignal)();
+const spinner = (0, import_spinner.getDefaultSpinner)();
+const searchRaw = searchModule.default;
+const selectModule = selectModuleImport;
+const selectRaw = selectModule.default;
+const ActualSeparator = selectModule.Separator;
+function applyColor(text, color) {
+  if (typeof color === "string") {
+    return import_yoctocolors_cjs.default[color](text);
+  }
+  const { 0: r, 1: g, 2: b } = color;
+  return `\x1B[38;2;${r};${g};${b}m${text}\x1B[39m`;
+}
+function resolveTheme(theme) {
+  return typeof theme === "string" ? import_themes.THEMES[theme] : theme;
+}
+function isSocketTheme(value) {
+  return typeof value === "object" && value !== null && "name" in value && "colors" in value;
+}
+function createInquirerTheme(theme) {
+  if (typeof theme === "string" || isSocketTheme(theme)) {
+    const socketTheme = resolveTheme(theme);
+    const promptColor = (0, import_utils.resolveColor)(
+      socketTheme.colors.prompt,
+      socketTheme.colors
+    );
+    const textDimColor = (0, import_utils.resolveColor)(
+      socketTheme.colors.textDim,
+      socketTheme.colors
+    );
+    const errorColor = socketTheme.colors.error;
+    const successColor = socketTheme.colors.success;
+    const primaryColor = socketTheme.colors.primary;
+    return {
+      style: {
+        // Message text (uses colors.prompt)
+        message: (text) => applyColor(text, promptColor),
+        // Answer text (uses primary color)
+        answer: (text) => applyColor(text, primaryColor),
+        // Help text / descriptions (uses textDim)
+        help: (text) => applyColor(text, textDimColor),
+        description: (text) => applyColor(text, textDimColor),
+        // Disabled items (uses textDim)
+        disabled: (text) => applyColor(text, textDimColor),
+        // Error messages (uses error color)
+        error: (text) => applyColor(text, errorColor),
+        // Highlight/active (uses primary color)
+        highlight: (text) => applyColor(text, primaryColor)
+      },
+      icon: {
+        // Use success color for confirmed items
+        checked: applyColor("\u2713", successColor),
+        unchecked: " ",
+        // Cursor uses primary color
+        cursor: applyColor("\u276F", primaryColor)
+      }
+    };
+  }
+  return theme;
+}
+// @__NO_SIDE_EFFECTS__
+function wrapPrompt(inquirerPrompt) {
+  return async (...args) => {
+    const origContext = args.length > 1 ? args[1] : void 0;
+    const { spinner: contextSpinner, ...contextWithoutSpinner } = origContext ?? {};
+    const spinnerInstance = contextSpinner !== void 0 ? contextSpinner : spinner;
+    const signal = abortSignal;
+    const config = args[0];
+    if (config && typeof config === "object") {
+      if (!config.theme) {
+        config.theme = createInquirerTheme((0, import_context.getTheme)());
+      } else {
+        config.theme = createInquirerTheme(config.theme);
+      }
+    }
+    if (origContext) {
+      args[1] = {
+        signal,
+        ...contextWithoutSpinner
+      };
+    } else {
+      args[1] = { signal };
+    }
+    const wasSpinning = !!spinnerInstance?.isSpinning;
+    spinnerInstance?.stop();
+    let result;
+    try {
+      result = await inquirerPrompt(...args);
+    } catch (e) {
+      if (e instanceof TypeError) {
+        throw e;
+      }
+    }
+    if (wasSpinning) {
+      spinnerInstance.start();
+    }
+    return typeof result === "string" ? result.trim() : result;
+  };
+}
+const checkbox = /* @__PURE__ */ wrapPrompt(import_checkbox.default);
+const confirm = /* @__PURE__ */ wrapPrompt(import_confirm.default);
+const input = /* @__PURE__ */ wrapPrompt(import_input.default);
+const password = /* @__PURE__ */ wrapPrompt(import_password.default);
+const search = /* @__PURE__ */ wrapPrompt(searchRaw);
+const select = /* @__PURE__ */ wrapPrompt(selectRaw);
+function createSeparator(text) {
+  return new ActualSeparator(text);
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  Separator,
+  checkbox,
+  confirm,
+  createInquirerTheme,
+  createSeparator,
+  input,
+  password,
+  search,
+  select,
+  wrapPrompt
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/stderr.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/stderr.d.ts
new file mode 100644
index 00000000..7113418c
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/stderr.d.ts
@@ -0,0 +1,138 @@
+/**
+ * @fileoverview Standard error stream utilities.
+ * Provides utilities for writing to stderr with formatting and control.
+ */
+// Get the actual stderr stream
+declare const stderr: NodeJS.WriteStream;
+export declare function writeErrorLine(text?: string): void;
+/**
+ * Write text to stderr without adding a newline.
+ *
+ * @param text - Text to write
+ *
+ * @example
+ * ```ts
+ * writeError('Downloading...')
+ * // Later update progress
+ * ```
+ */
+export declare function writeError(text: string): void;
+/**
+ * Clear the current line on stderr.
+ * Only works in TTY environments.
+ *
+ * @example
+ * ```ts
+ * writeError('Processing...')
+ * clearLine()
+ * writeError('Done!')
+ * ```
+ */
+export declare function clearLine(): void;
+/**
+ * Move cursor to specific position on stderr.
+ * Only works in TTY environments.
+ *
+ * @param x - Column position (0-based)
+ * @param y - Row position (0-based, optional)
+ *
+ * @example
+ * ```ts
+ * cursorTo(0) // Move to start of line
+ * cursorTo(10, 5) // Move to column 10, row 5
+ * ```
+ */
+export declare function cursorTo(x: number, y?: number | undefined): void;
+/**
+ * Check if stderr is connected to a TTY (terminal).
+ *
+ * @returns `true` if stderr is a TTY, `false` if piped/redirected
+ *
+ * @example
+ * ```ts
+ * if (isTTY()) {
+ *   // Show colored error messages
+ * } else {
+ *   // Use plain text
+ * }
+ * ```
+ */
+export declare function isTTY(): boolean;
+/**
+ * Get the number of columns (width) in the terminal.
+ *
+ * @returns Terminal width in characters
+ * @default 80
+ *
+ * @example
+ * ```ts
+ * const width = getColumns()
+ * console.error(`Terminal is ${width} characters wide`)
+ * ```
+ */
+export declare function getColumns(): number;
+/**
+ * Get the number of rows (height) in the terminal.
+ *
+ * @returns Terminal height in lines
+ * @default 24
+ *
+ * @example
+ * ```ts
+ * const height = getRows()
+ * console.error(`Terminal is ${height} lines tall`)
+ * ```
+ */
+export declare function getRows(): number;
+/**
+ * Write a formatted warning message to stderr.
+ *
+ * @param message - Warning message text
+ * @param prefix - Prefix label for the warning
+ * @default prefix 'Warning'
+ *
+ * @example
+ * ```ts
+ * writeWarning('Deprecated API usage')
+ * // Output: 'Warning: Deprecated API usage'
+ *
+ * writeWarning('Invalid config', 'Config')
+ * // Output: 'Config: Invalid config'
+ * ```
+ */
+export declare function writeWarning(message: string, prefix?: string): void;
+/**
+ * Write a formatted error message to stderr.
+ *
+ * @param message - Error message text
+ * @param prefix - Prefix label for the error
+ * @default prefix 'Error'
+ *
+ * @example
+ * ```ts
+ * writeErrorFormatted('File not found')
+ * // Output: 'Error: File not found'
+ *
+ * writeErrorFormatted('Connection failed', 'Network')
+ * // Output: 'Network: Connection failed'
+ * ```
+ */
+export declare function writeErrorFormatted(message: string, prefix?: string): void;
+/**
+ * Write an error's stack trace to stderr.
+ * Falls back to formatted error message if no stack is available.
+ *
+ * @param error - Error object to write
+ *
+ * @example
+ * ```ts
+ * try {
+ *   throw new Error('Something went wrong')
+ * } catch (err) {
+ *   writeStackTrace(err as Error)
+ * }
+ * ```
+ */
+export declare function writeStackTrace(error: Error): void;
+// Export the raw stream for advanced usage
+export { stderr };
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/stderr.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/stderr.js
new file mode 100644
index 00000000..04416c0d
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/stderr.js
@@ -0,0 +1,102 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var stderr_exports = {};
+__export(stderr_exports, {
+  clearLine: () => clearLine,
+  cursorTo: () => cursorTo,
+  getColumns: () => getColumns,
+  getRows: () => getRows,
+  isTTY: () => isTTY,
+  stderr: () => stderr,
+  writeError: () => writeError,
+  writeErrorFormatted: () => writeErrorFormatted,
+  writeErrorLine: () => writeErrorLine,
+  writeStackTrace: () => writeStackTrace,
+  writeWarning: () => writeWarning
+});
+module.exports = __toCommonJS(stderr_exports);
+var import_node_process = __toESM(require("node:process"));
+const stderr = import_node_process.default.stderr;
+function writeErrorLine(text = "") {
+  stderr.write(`${text}
+`);
+}
+function writeError(text) {
+  stderr.write(text);
+}
+function clearLine() {
+  if (stderr.isTTY) {
+    stderr.cursorTo(0);
+    stderr.clearLine(0);
+  }
+}
+function cursorTo(x, y) {
+  if (stderr.isTTY) {
+    stderr.cursorTo(x, y);
+  }
+}
+function isTTY() {
+  return stderr.isTTY || false;
+}
+function getColumns() {
+  return stderr.columns || 80;
+}
+function getRows() {
+  return stderr.rows || 24;
+}
+function writeWarning(message, prefix = "Warning") {
+  const formatted = `${prefix}: ${message}`;
+  writeErrorLine(formatted);
+}
+function writeErrorFormatted(message, prefix = "Error") {
+  const formatted = `${prefix}: ${message}`;
+  writeErrorLine(formatted);
+}
+function writeStackTrace(error) {
+  if (error.stack) {
+    writeErrorLine(error.stack);
+  } else {
+    writeErrorFormatted(error.message);
+  }
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  clearLine,
+  cursorTo,
+  getColumns,
+  getRows,
+  isTTY,
+  stderr,
+  writeError,
+  writeErrorFormatted,
+  writeErrorLine,
+  writeStackTrace,
+  writeWarning
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/stdout.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/stdout.d.ts
new file mode 100644
index 00000000..792a50da
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/stdout.d.ts
@@ -0,0 +1,144 @@
+// Get the actual stdout stream
+declare const stdout: NodeJS.WriteStream;
+/**
+ * Write a line to stdout with trailing newline.
+ *
+ * @param text - Text to write
+ * @default text ''
+ *
+ * @example
+ * ```ts
+ * writeLine('Hello, world!')
+ * writeLine() // Write empty line
+ * ```
+ */
+export declare function writeLine(text?: string): void;
+/**
+ * Write text to stdout without adding a newline.
+ *
+ * @param text - Text to write
+ *
+ * @example
+ * ```ts
+ * write('Loading...')
+ * // Later: clear and update
+ * ```
+ */
+export declare function write(text: string): void;
+/**
+ * Clear the current line on stdout.
+ * Only works in TTY environments.
+ *
+ * @example
+ * ```ts
+ * write('Processing...')
+ * clearLine()
+ * write('Done!')
+ * ```
+ */
+export declare function clearLine(): void;
+/**
+ * Move cursor to specific position on stdout.
+ * Only works in TTY environments.
+ *
+ * @param x - Column position (0-based)
+ * @param y - Row position (0-based, optional)
+ *
+ * @example
+ * ```ts
+ * cursorTo(0) // Move to start of line
+ * cursorTo(10, 5) // Move to column 10, row 5
+ * ```
+ */
+export declare function cursorTo(x: number, y?: number | undefined): void;
+/**
+ * Clear screen from cursor position down to bottom.
+ * Only works in TTY environments.
+ *
+ * @example
+ * ```ts
+ * cursorTo(0, 5)
+ * clearScreenDown() // Clear from row 5 to bottom
+ * ```
+ */
+export declare function clearScreenDown(): void;
+/**
+ * Check if stdout is connected to a TTY (terminal).
+ *
+ * @returns `true` if stdout is a TTY, `false` if piped/redirected
+ *
+ * @example
+ * ```ts
+ * if (isTTY()) {
+ *   // Show interactive UI
+ * } else {
+ *   // Use simple text output
+ * }
+ * ```
+ */
+export declare function isTTY(): boolean;
+/**
+ * Get the number of columns (width) in the terminal.
+ *
+ * @returns Terminal width in characters
+ * @default 80
+ *
+ * @example
+ * ```ts
+ * const width = getColumns()
+ * console.log(`Terminal is ${width} characters wide`)
+ * ```
+ */
+export declare function getColumns(): number;
+/**
+ * Get the number of rows (height) in the terminal.
+ *
+ * @returns Terminal height in lines
+ * @default 24
+ *
+ * @example
+ * ```ts
+ * const height = getRows()
+ * console.log(`Terminal is ${height} lines tall`)
+ * ```
+ */
+export declare function getRows(): number;
+/**
+ * Hide the cursor on stdout.
+ * Useful for cleaner output during animations.
+ *
+ * @example
+ * ```ts
+ * hideCursor()
+ * // Show animation
+ * showCursor()
+ * ```
+ */
+export declare function hideCursor(): void;
+/**
+ * Show the cursor on stdout.
+ * Should be called after `hideCursor()`.
+ *
+ * @example
+ * ```ts
+ * hideCursor()
+ * // Show animation
+ * showCursor()
+ * ```
+ */
+export declare function showCursor(): void;
+/**
+ * Register handlers to ensure cursor is shown on process exit.
+ * Prevents hidden cursor after abnormal termination.
+ * Handles SIGINT (Ctrl+C) and SIGTERM signals.
+ *
+ * @example
+ * ```ts
+ * ensureCursorOnExit()
+ * hideCursor()
+ * // Even if process crashes, cursor will be restored
+ * ```
+ */
+export declare function ensureCursorOnExit(): void;
+// Export the raw stream for advanced usage
+export { stdout };
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/stdout.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/stdout.js
new file mode 100644
index 00000000..194fd51c
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/stdio/stdout.js
@@ -0,0 +1,116 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var stdout_exports = {};
+__export(stdout_exports, {
+  clearLine: () => clearLine,
+  clearScreenDown: () => clearScreenDown,
+  cursorTo: () => cursorTo,
+  ensureCursorOnExit: () => ensureCursorOnExit,
+  getColumns: () => getColumns,
+  getRows: () => getRows,
+  hideCursor: () => hideCursor,
+  isTTY: () => isTTY,
+  showCursor: () => showCursor,
+  stdout: () => stdout,
+  write: () => write,
+  writeLine: () => writeLine
+});
+module.exports = __toCommonJS(stdout_exports);
+var import_node_process = __toESM(require("node:process"));
+var import_tty = require("tty");
+const stdout = import_node_process.default.stdout;
+function writeLine(text = "") {
+  stdout.write(`${text}
+`);
+}
+function write(text) {
+  stdout.write(text);
+}
+function clearLine() {
+  if (stdout.isTTY) {
+    stdout.cursorTo(0);
+    stdout.clearLine(0);
+  }
+}
+function cursorTo(x, y) {
+  if (stdout.isTTY) {
+    stdout.cursorTo(x, y);
+  }
+}
+function clearScreenDown() {
+  if (stdout.isTTY) {
+    stdout.clearScreenDown();
+  }
+}
+function isTTY() {
+  return stdout.isTTY || false;
+}
+function getColumns() {
+  return stdout.columns || 80;
+}
+function getRows() {
+  return stdout.rows || 24;
+}
+function hideCursor() {
+  if (stdout.isTTY && stdout instanceof import_tty.WriteStream) {
+    stdout.write("\x1B[?25l");
+  }
+}
+function showCursor() {
+  if (stdout.isTTY && stdout instanceof import_tty.WriteStream) {
+    stdout.write("\x1B[?25h");
+  }
+}
+function ensureCursorOnExit() {
+  import_node_process.default.on("exit", showCursor);
+  import_node_process.default.on("SIGINT", () => {
+    showCursor();
+    import_node_process.default.exit(130);
+  });
+  import_node_process.default.on("SIGTERM", () => {
+    showCursor();
+    import_node_process.default.exit(143);
+  });
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  clearLine,
+  clearScreenDown,
+  cursorTo,
+  ensureCursorOnExit,
+  getColumns,
+  getRows,
+  hideCursor,
+  isTTY,
+  showCursor,
+  stdout,
+  write,
+  writeLine
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/streams.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/streams.d.ts
new file mode 100644
index 00000000..5f41fc56
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/streams.d.ts
@@ -0,0 +1,44 @@
+import type { IterationOptions } from './promises';
+/**
+ * Execute a function for each item in an iterable in parallel.
+ *
+ * @example
+ * ```typescript
+ * const urls = ['https://a.io', 'https://b.io']
+ * await parallelEach(urls, async (url) => {
+ *   await fetch(url)
+ * }, { concurrency: 4 })
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function parallelEach(iterable: Iterable | AsyncIterable, func: (item: T) => Promise, options?: number | IterationOptions): Promise;
+/**
+ * Map over an iterable in parallel with concurrency control.
+ *
+ * @example
+ * ```typescript
+ * const ids = [1, 2, 3]
+ * for await (const result of parallelMap(ids, async (id) => {
+ *   return await fetchData(id)
+ * }, 4)) {
+ *   console.log(result)
+ * }
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function parallelMap(iterable: Iterable | AsyncIterable, func: (item: T) => Promise, options?: number | IterationOptions): AsyncIterable;
+/**
+ * Transform an iterable with a function.
+ *
+ * @example
+ * ```typescript
+ * const lines = ['hello', 'world']
+ * for await (const upper of transform(lines, async (line) => {
+ *   return line.toUpperCase()
+ * })) {
+ *   console.log(upper)  // 'HELLO', 'WORLD'
+ * }
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function transform(iterable: Iterable | AsyncIterable, func: (item: T) => Promise, options?: number | IterationOptions): AsyncIterable;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/streams.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/streams.js
new file mode 100644
index 00000000..d91b95a5
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/streams.js
@@ -0,0 +1,71 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var streams_exports = {};
+__export(streams_exports, {
+  parallelEach: () => parallelEach,
+  parallelMap: () => parallelMap,
+  transform: () => transform
+});
+module.exports = __toCommonJS(streams_exports);
+var import_streaming_iterables = require("./external/streaming-iterables");
+var import_promises = require("./promises");
+// @__NO_SIDE_EFFECTS__
+async function parallelEach(iterable, func, options) {
+  for await (const _ of /* @__PURE__ */ parallelMap(iterable, func, options)) {
+  }
+}
+// @__NO_SIDE_EFFECTS__
+function parallelMap(iterable, func, options) {
+  const opts = (0, import_promises.normalizeIterationOptions)(options);
+  const result = (0, import_streaming_iterables.parallelMap)(
+    opts.concurrency,
+    async (item) => {
+      const result2 = await (0, import_promises.pRetry)((...args) => func(args[0]), {
+        ...opts.retries,
+        args: [item]
+      });
+      return result2;
+    },
+    iterable
+  );
+  return result;
+}
+// @__NO_SIDE_EFFECTS__
+function transform(iterable, func, options) {
+  const opts = (0, import_promises.normalizeIterationOptions)(options);
+  const result = (0, import_streaming_iterables.transform)(
+    opts.concurrency,
+    async (item) => {
+      const result2 = await (0, import_promises.pRetry)((...args) => func(args[0]), {
+        ...opts.retries,
+        args: [item]
+      });
+      return result2;
+    },
+    iterable
+  );
+  return result;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  parallelEach,
+  parallelMap,
+  transform
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/strings.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/strings.d.ts
new file mode 100644
index 00000000..7dec5e4a
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/strings.d.ts
@@ -0,0 +1,468 @@
+/**
+ * @fileoverview String manipulation utilities including ANSI code handling.
+ * Provides string processing, prefix application, and terminal output utilities.
+ */
+import { ansiRegex, stripAnsi } from './ansi';
+// Import get-east-asian-width from external wrapper.
+// This library implements Unicode Standard Annex #11 (East Asian Width).
+// https://www.unicode.org/reports/tr11/
+// Re-export ANSI utilities for backward compatibility.
+export { ansiRegex, stripAnsi };
+// Type definitions
+declare const BlankStringBrand: unique symbol;
+export type BlankString = string & {
+    [BlankStringBrand]: true;
+};
+declare const EmptyStringBrand: unique symbol;
+export type EmptyString = string & {
+    [EmptyStringBrand]: true;
+};
+// IMPORTANT: Do not use destructuring here - use direct assignment instead.
+// tsgo has a bug that incorrectly transpiles destructured exports, resulting in
+// `exports.SomeName = void 0;` which causes runtime errors.
+// See: https://github.com/SocketDev/socket-packageurl-js/issues/3
+export declare const fromCharCode: (...codes: number[]) => string;
+export interface ApplyLinePrefixOptions {
+    /**
+     * The prefix to add to each line.
+     * @default ''
+     */
+    prefix?: string | undefined;
+}
+/**
+ * Apply a prefix to each line of a string.
+ *
+ * Prepends the specified prefix to the beginning of each line in the input string.
+ * If the string contains newlines, the prefix is added after each newline as well.
+ * When no prefix is provided or prefix is empty, returns the original string unchanged.
+ *
+ * @param str - The string to add prefixes to
+ * @param options - Configuration options
+ * @returns The string with prefix applied to each line
+ *
+ * @example
+ * ```ts
+ * applyLinePrefix('hello\nworld', { prefix: '> ' })
+ * // Returns: '> hello\n> world'
+ *
+ * applyLinePrefix('single line', { prefix: '  ' })
+ * // Returns: '  single line'
+ *
+ * applyLinePrefix('no prefix')
+ * // Returns: 'no prefix'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function applyLinePrefix(str: string, options?: ApplyLinePrefixOptions | undefined): string;
+/**
+ * Convert a camelCase string to kebab-case.
+ *
+ * Transforms camelCase strings by converting uppercase letters to lowercase
+ * and inserting hyphens before uppercase sequences. Handles consecutive
+ * uppercase letters (like "XMLHttpRequest") by treating them as a single word.
+ * Returns empty string for empty input.
+ *
+ * Note: This function only handles camelCase. For mixed formats including
+ * snake_case, use `toKebabCase()` instead.
+ *
+ * @param str - The camelCase string to convert
+ * @returns The kebab-case string
+ *
+ * @example
+ * ```ts
+ * camelToKebab('helloWorld')
+ * // Returns: 'hello-world'
+ *
+ * camelToKebab('XMLHttpRequest')
+ * // Returns: 'xmlhttprequest'
+ *
+ * camelToKebab('iOS')
+ * // Returns: 'ios'
+ *
+ * camelToKebab('')
+ * // Returns: ''
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function camelToKebab(str: string): string;
+/**
+ * Center text within a given width.
+ *
+ * Adds spaces before and after the text to center it within the specified width.
+ * Distributes padding evenly on both sides. When the padding is odd, the extra
+ * space is added to the right side. Strips ANSI codes before calculating text
+ * length to ensure accurate centering of colored text.
+ *
+ * If the text is already wider than or equal to the target width, returns the
+ * original text unchanged (no truncation occurs).
+ *
+ * @param text - The text to center (may include ANSI codes)
+ * @param width - The target width in columns
+ * @returns The centered text with padding
+ *
+ * @example
+ * ```ts
+ * centerText('hello', 11)
+ * // Returns: '   hello   ' (3 spaces on each side)
+ *
+ * centerText('hi', 10)
+ * // Returns: '    hi    ' (4 spaces on each side)
+ *
+ * centerText('odd', 8)
+ * // Returns: '  odd   ' (2 left, 3 right)
+ *
+ * centerText('\x1b[31mred\x1b[0m', 7)
+ * // Returns: '  \x1b[31mred\x1b[0m  ' (ANSI codes preserved, 'red' centered)
+ *
+ * centerText('too long text', 5)
+ * // Returns: 'too long text' (no truncation, returned as-is)
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function centerText(text: string, width: number): string;
+export interface IndentStringOptions {
+    /**
+     * Number of spaces to indent each line.
+     * @default 1
+     */
+    count?: number | undefined;
+}
+/**
+ * Indent each line of a string with spaces.
+ *
+ * Adds the specified number of spaces to the beginning of each non-empty line
+ * in the input string. Empty lines (containing only whitespace) are not indented.
+ * Uses a regular expression to efficiently handle multi-line strings.
+ *
+ * @param str - The string to indent
+ * @param options - Configuration options
+ * @returns The indented string
+ *
+ * @example
+ * ```ts
+ * indentString('hello\nworld', { count: 2 })
+ * // Returns: '  hello\n  world'
+ *
+ * indentString('line1\n\nline3', { count: 4 })
+ * // Returns: '    line1\n\n    line3'
+ *
+ * indentString('single line')
+ * // Returns: ' single line' (default: 1 space)
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function indentString(str: string, options?: IndentStringOptions | undefined): string;
+/**
+ * Check if a value is a blank string (empty or only whitespace).
+ *
+ * A blank string is defined as a string that is either:
+ * - Completely empty (length 0)
+ * - Contains only whitespace characters (spaces, tabs, newlines, etc.)
+ *
+ * This is useful for validation when you need to ensure user input
+ * contains actual content, not just whitespace.
+ *
+ * @param value - The value to check
+ * @returns `true` if the value is a blank string, `false` otherwise
+ *
+ * @example
+ * ```ts
+ * isBlankString('')
+ * // Returns: true
+ *
+ * isBlankString('   ')
+ * // Returns: true
+ *
+ * isBlankString('\n\t  ')
+ * // Returns: true
+ *
+ * isBlankString('hello')
+ * // Returns: false
+ *
+ * isBlankString(null)
+ * // Returns: false
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isBlankString(value: unknown): value is BlankString;
+/**
+ * Check if a value is a non-empty string.
+ *
+ * Returns `true` only if the value is a string with at least one character.
+ * This includes strings containing only whitespace (use `isBlankString()` if
+ * you want to exclude those). Type guard ensures TypeScript knows the value
+ * is a string after this check.
+ *
+ * @param value - The value to check
+ * @returns `true` if the value is a non-empty string, `false` otherwise
+ *
+ * @example
+ * ```ts
+ * isNonEmptyString('hello')
+ * // Returns: true
+ *
+ * isNonEmptyString('   ')
+ * // Returns: true (contains whitespace)
+ *
+ * isNonEmptyString('')
+ * // Returns: false
+ *
+ * isNonEmptyString(null)
+ * // Returns: false
+ *
+ * isNonEmptyString(123)
+ * // Returns: false
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isNonEmptyString(value: unknown): value is Exclude;
+/**
+ * Repeat a string a specified number of times.
+ *
+ * Creates a new string by repeating the input string `count` times.
+ * Returns an empty string if count is 0 or negative.
+ *
+ * @param str - The string to repeat
+ * @param count - The number of times to repeat the string
+ * @returns The repeated string, or empty string if count <= 0
+ *
+ * @example
+ * ```ts
+ * repeatString('hello', 3)
+ * // Returns: 'hellohellohello'
+ *
+ * repeatString('x', 5)
+ * // Returns: 'xxxxx'
+ *
+ * repeatString('hello', 0)
+ * // Returns: ''
+ *
+ * repeatString('hello', -1)
+ * // Returns: ''
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function repeatString(str: string, count: number): string;
+export interface SearchOptions {
+    /**
+     * The position in the string to begin searching from.
+     * Negative values count back from the end of the string.
+     * @default 0
+     */
+    fromIndex?: number | undefined;
+}
+/**
+ * Search for a regular expression in a string starting from an index.
+ *
+ * Similar to `String.prototype.search()` but allows specifying a starting
+ * position. Returns the index of the first match at or after `fromIndex`,
+ * or -1 if no match is found. Negative `fromIndex` values count back from
+ * the end of the string.
+ *
+ * This is more efficient than using `str.slice(fromIndex).search()` when
+ * you need the absolute position in the original string, as it handles
+ * the offset calculation for you.
+ *
+ * @param str - The string to search in
+ * @param regexp - The regular expression to search for
+ * @param options - Configuration options
+ * @returns The index of the first match, or -1 if not found
+ *
+ * @example
+ * ```ts
+ * search('hello world hello', /hello/, { fromIndex: 0 })
+ * // Returns: 0 (first 'hello')
+ *
+ * search('hello world hello', /hello/, { fromIndex: 6 })
+ * // Returns: 12 (second 'hello')
+ *
+ * search('hello world', /goodbye/, { fromIndex: 0 })
+ * // Returns: -1 (not found)
+ *
+ * search('hello world', /hello/, { fromIndex: -5 })
+ * // Returns: -1 (starts searching from 'world', no match)
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function search(str: string, regexp: RegExp, options?: SearchOptions | undefined): number;
+/**
+ * Strip the Byte Order Mark (BOM) from the beginning of a string.
+ *
+ * The BOM (U+FEFF) is a Unicode character that can appear at the start of
+ * a text file to indicate byte order and encoding. In UTF-16 (JavaScript's
+ * internal string representation), it appears as 0xFEFF. This function
+ * removes it if present, leaving the rest of the string unchanged.
+ *
+ * Most text processing doesn't need to handle the BOM explicitly, but it
+ * can cause issues when parsing JSON, CSV, or other structured data formats
+ * that don't expect a leading invisible character.
+ *
+ * @param str - The string to strip BOM from
+ * @returns The string without BOM
+ *
+ * @example
+ * ```ts
+ * stripBom('\uFEFFhello world')
+ * // Returns: 'hello world'
+ *
+ * stripBom('hello world')
+ * // Returns: 'hello world' (no BOM to strip)
+ *
+ * stripBom('')
+ * // Returns: ''
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function stripBom(str: string): string;
+/* c8 ignore stop */
+/**
+ * Get the visual width of a string in terminal columns.
+ *
+ * Calculates how many columns a string will occupy when displayed in a terminal,
+ * accounting for:
+ * - ANSI escape codes (stripped before calculation)
+ * - Wide characters (CJK ideographs, fullwidth forms) that take 2 columns
+ * - Emoji (including complex sequences) that take 2 columns
+ * - Combining marks and zero-width characters (take 0 columns)
+ * - East Asian Width properties (Fullwidth, Wide, Halfwidth, Narrow, etc.)
+ *
+ * Based on string-width by Sindre Sorhus:
+ * https://socket.dev/npm/package/string-width/overview/7.2.0
+ * MIT License
+ * Copyright (c) Sindre Sorhus  (https://sindresorhus.com)
+ *
+ * Terminal emulators display characters in a grid of cells (columns).
+ * Most ASCII characters take 1 column, but some characters (especially
+ * emoji and CJK characters) take 2 columns. This function calculates
+ * the actual visual width, which is crucial for:
+ * - Aligning text properly in tables or columns
+ * - Preventing text from jumping when characters change
+ * - Calculating padding/spacing for spinners and progress bars
+ * - Wrapping text at the correct column width
+ *
+ * Algorithm Overview:
+ * 1. Strip ANSI escape codes (invisible in terminal)
+ * 2. Segment into grapheme clusters (user-perceived characters)
+ * 3. For each cluster:
+ *    - Skip zero-width/non-printing clusters (width = 0)
+ *    - RGI emoji clusters are double-width (width = 2)
+ *    - Otherwise use East Asian Width of first visible code point
+ *    - Add width for trailing Halfwidth/Fullwidth Forms
+ *
+ * East Asian Width Categories (Unicode Standard Annex #11):
+ * - F (Fullwidth): 2 columns - e.g., fullwidth Latin letters (A, B)
+ * - W (Wide): 2 columns - e.g., CJK ideographs (漢字), emoji (⚡, 😀)
+ * - H (Halfwidth): 1 column - e.g., halfwidth Katakana (ア, イ)
+ * - Na (Narrow): 1 column - e.g., ASCII (a-z, 0-9)
+ * - A (Ambiguous): Context-dependent, treated as 1 column by default
+ * - N (Neutral): 1 column - e.g., most symbols (✦, ✧, ⋆)
+ *
+ * Why This Matters for Socket:
+ * - Lightning bolt (⚡) takes 2 columns
+ * - Stars (✦, ✧, ⋆) take 1 column
+ * - Without proper width calculation, spinner text jumps between frames
+ * - This function enables consistent alignment by calculating padding
+ *
+ * @param text - The string to measure
+ * @returns The visual width in terminal columns
+ *
+ * @example
+ * ```ts
+ * stringWidth('hello')
+ * // Returns: 5 (5 ASCII chars = 5 columns)
+ *
+ * stringWidth('⚡')
+ * // Returns: 2 (lightning bolt is wide)
+ *
+ * stringWidth('✦')
+ * // Returns: 1 (star is narrow)
+ *
+ * stringWidth('漢字')
+ * // Returns: 4 (2 CJK characters × 2 columns each)
+ *
+ * stringWidth('\x1b[31mred\x1b[0m')
+ * // Returns: 3 (ANSI codes stripped, 'red' = 3)
+ *
+ * stringWidth('👍🏽')
+ * // Returns: 2 (emoji with skin tone = 1 grapheme cluster = 2 columns)
+ *
+ * stringWidth('é')
+ * // Returns: 1 (combining accent doesn't add width)
+ *
+ * stringWidth('')
+ * // Returns: 0
+ * ```
+ *
+ * @throws {TypeError} When input is not a string
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function stringWidth(text: string): number;
+/**
+ * Convert a string to kebab-case (handles camelCase and snake_case).
+ *
+ * Transforms strings from camelCase or snake_case to kebab-case by:
+ * - Converting uppercase letters to lowercase
+ * - Inserting hyphens before uppercase letters (for camelCase)
+ * - Replacing underscores with hyphens (for snake_case)
+ *
+ * This is more comprehensive than `camelToKebab()` as it handles mixed
+ * formats including snake_case. Returns empty string for empty input.
+ *
+ * @param str - The string to convert
+ * @returns The kebab-case string
+ *
+ * @example
+ * ```ts
+ * toKebabCase('helloWorld')
+ * // Returns: 'hello-world'
+ *
+ * toKebabCase('hello_world')
+ * // Returns: 'hello-world'
+ *
+ * toKebabCase('XMLHttpRequest')
+ * // Returns: 'xmlhttp-request'
+ *
+ * toKebabCase('iOS_Version')
+ * // Returns: 'io-s-version'
+ *
+ * toKebabCase('')
+ * // Returns: ''
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function toKebabCase(str: string): string;
+/**
+ * Trim newlines from the beginning and end of a string.
+ *
+ * Removes all leading and trailing newline characters (both `\n` and `\r`)
+ * from a string, while preserving any newlines in the middle. This is similar
+ * to `String.prototype.trim()` but specifically targets newlines instead of
+ * all whitespace.
+ *
+ * Optimized for performance by checking the first and last characters before
+ * doing any string manipulation. Returns the original string unchanged if no
+ * newlines are found at the edges.
+ *
+ * @param str - The string to trim
+ * @returns The string with leading and trailing newlines removed
+ *
+ * @example
+ * ```ts
+ * trimNewlines('\n\nhello\n\n')
+ * // Returns: 'hello'
+ *
+ * trimNewlines('\r\nworld\r\n')
+ * // Returns: 'world'
+ *
+ * trimNewlines('hello\nworld')
+ * // Returns: 'hello\nworld' (middle newline preserved)
+ *
+ * trimNewlines('  hello  ')
+ * // Returns: '  hello  ' (spaces not trimmed, only newlines)
+ *
+ * trimNewlines('hello')
+ * // Returns: 'hello'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function trimNewlines(str: string): string;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/strings.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/strings.js
new file mode 100644
index 00000000..214bb9c1
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/strings.js
@@ -0,0 +1,261 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var strings_exports = {};
+__export(strings_exports, {
+  ansiRegex: () => import_ansi.ansiRegex,
+  applyLinePrefix: () => applyLinePrefix,
+  camelToKebab: () => camelToKebab,
+  centerText: () => centerText,
+  fromCharCode: () => fromCharCode,
+  indentString: () => indentString,
+  isBlankString: () => isBlankString,
+  isNonEmptyString: () => isNonEmptyString,
+  repeatString: () => repeatString,
+  search: () => search,
+  stringWidth: () => stringWidth,
+  stripAnsi: () => import_ansi.stripAnsi,
+  stripBom: () => stripBom,
+  toKebabCase: () => toKebabCase,
+  trimNewlines: () => trimNewlines
+});
+module.exports = __toCommonJS(strings_exports);
+var import_ansi = require("./ansi");
+let _eastAsianWidth;
+// @__NO_SIDE_EFFECTS__
+function getEastAsianWidth() {
+  if (_eastAsianWidth === void 0) {
+    _eastAsianWidth = require("./external/get-east-asian-width").eastAsianWidth;
+  }
+  return _eastAsianWidth;
+}
+const fromCharCode = String.fromCharCode;
+// @__NO_SIDE_EFFECTS__
+function applyLinePrefix(str, options) {
+  const { prefix = "" } = {
+    __proto__: null,
+    ...options
+  };
+  return prefix.length ? `${prefix}${str.includes("\n") ? str.replace(/\n/g, `
+${prefix}`) : str}` : str;
+}
+// @__NO_SIDE_EFFECTS__
+function camelToKebab(str) {
+  const { length } = str;
+  if (!length) {
+    return "";
+  }
+  let result = "";
+  let i = 0;
+  while (i < length) {
+    const char = str[i];
+    if (!char) {
+      break;
+    }
+    const charCode = char.charCodeAt(0);
+    const isUpperCase = charCode >= 65 && charCode <= 90;
+    if (isUpperCase) {
+      if (result.length > 0) {
+        result += "-";
+      }
+      while (i < length) {
+        const currChar = str[i];
+        if (!currChar) {
+          break;
+        }
+        const currCharCode = currChar.charCodeAt(0);
+        const isCurrUpper = currCharCode >= 65 && currCharCode <= 90;
+        if (isCurrUpper) {
+          result += fromCharCode(
+            currCharCode + 32
+            /*'a'-'A'*/
+          );
+          i += 1;
+        } else {
+          break;
+        }
+      }
+    } else {
+      result += char;
+      i += 1;
+    }
+  }
+  return result;
+}
+// @__NO_SIDE_EFFECTS__
+function centerText(text, width) {
+  const textLength = (0, import_ansi.stripAnsi)(text).length;
+  if (textLength >= width) {
+    return text;
+  }
+  const padding = width - textLength;
+  const leftPad = Math.floor(padding / 2);
+  const rightPad = padding - leftPad;
+  return " ".repeat(leftPad) + text + " ".repeat(rightPad);
+}
+// @__NO_SIDE_EFFECTS__
+function indentString(str, options) {
+  const { count = 1 } = { __proto__: null, ...options };
+  return str.replace(/^(?!\s*$)/gm, " ".repeat(count));
+}
+// @__NO_SIDE_EFFECTS__
+function isBlankString(value) {
+  return typeof value === "string" && (!value.length || /^\s+$/.test(value));
+}
+// @__NO_SIDE_EFFECTS__
+function isNonEmptyString(value) {
+  return typeof value === "string" && value.length > 0;
+}
+// @__NO_SIDE_EFFECTS__
+function repeatString(str, count) {
+  if (count <= 0) {
+    return "";
+  }
+  return str.repeat(count);
+}
+// @__NO_SIDE_EFFECTS__
+function search(str, regexp, options) {
+  const { fromIndex = 0 } = { __proto__: null, ...options };
+  const { length } = str;
+  if (fromIndex >= length) {
+    return -1;
+  }
+  if (fromIndex === 0) {
+    return str.search(regexp);
+  }
+  const offset = fromIndex < 0 ? Math.max(length + fromIndex, 0) : fromIndex;
+  const result = str.slice(offset).search(regexp);
+  return result === -1 ? -1 : result + offset;
+}
+// @__NO_SIDE_EFFECTS__
+function stripBom(str) {
+  return str.length > 0 && str.charCodeAt(0) === 65279 ? str.slice(1) : str;
+}
+const segmenter = new Intl.Segmenter();
+let zeroWidthClusterRegex;
+let leadingNonPrintingRegex;
+let emojiRegex;
+try {
+  zeroWidthClusterRegex = new RegExp("^(?:\\p{Default_Ignorable_Code_Point}|\\p{Control}|\\p{Mark}|\\p{Surrogate})+$", "v");
+  leadingNonPrintingRegex = new RegExp("^[\\p{Default_Ignorable_Code_Point}\\p{Control}\\p{Format}\\p{Mark}\\p{Surrogate}]+", "v");
+  emojiRegex = new RegExp("^\\p{RGI_Emoji}$", "v");
+} catch {
+  zeroWidthClusterRegex = new RegExp("^(?:\\p{Default_Ignorable_Code_Point}|\\p{Control}|\\p{Mark})+$", "u");
+  leadingNonPrintingRegex = /^[\p{Default_Ignorable_Code_Point}\p{Control}\p{Format}\p{Mark}]+/u;
+  emojiRegex = new RegExp("^\\p{Extended_Pictographic}$", "u");
+}
+// @__NO_SIDE_EFFECTS__
+function stringWidth(text) {
+  if (typeof text !== "string" || !text.length) {
+    return 0;
+  }
+  const plainText = (0, import_ansi.stripAnsi)(text);
+  if (!plainText.length) {
+    return 0;
+  }
+  let width = 0;
+  const eastAsianWidthOptions = { ambiguousAsWide: false };
+  const eastAsianWidth = /* @__PURE__ */ getEastAsianWidth();
+  for (const { segment } of segmenter.segment(plainText)) {
+    if (zeroWidthClusterRegex.test(segment)) {
+      continue;
+    }
+    if (emojiRegex.test(segment)) {
+      width += 2;
+      continue;
+    }
+    const baseSegment = segment.replace(leadingNonPrintingRegex, "");
+    const codePoint = baseSegment.codePointAt(0);
+    if (codePoint === void 0) {
+      continue;
+    }
+    width += eastAsianWidth(codePoint, eastAsianWidthOptions);
+    if (segment.length > 1) {
+      for (const char of segment.slice(1)) {
+        const charCode = char.charCodeAt(0);
+        if (charCode >= 65280 && charCode <= 65519) {
+          const trailingCodePoint = char.codePointAt(0);
+          if (trailingCodePoint !== void 0) {
+            width += eastAsianWidth(trailingCodePoint, eastAsianWidthOptions);
+          }
+        }
+      }
+    }
+  }
+  return width;
+}
+// @__NO_SIDE_EFFECTS__
+function toKebabCase(str) {
+  if (!str.length) {
+    return str;
+  }
+  return str.replace(/([a-z]+[0-9]*)([A-Z])/g, "$1-$2").replace(/_/g, "-").toLowerCase();
+}
+// @__NO_SIDE_EFFECTS__
+function trimNewlines(str) {
+  const { length } = str;
+  if (length === 0) {
+    return str;
+  }
+  const first = str.charCodeAt(0);
+  const noFirstNewline = first !== 13 && first !== 10;
+  if (length === 1) {
+    return noFirstNewline ? str : "";
+  }
+  const last = str.charCodeAt(length - 1);
+  const noLastNewline = last !== 13 && last !== 10;
+  if (noFirstNewline && noLastNewline) {
+    return str;
+  }
+  let start = 0;
+  let end = length;
+  while (start < end) {
+    const code = str.charCodeAt(start);
+    if (code !== 13 && code !== 10) {
+      break;
+    }
+    start += 1;
+  }
+  while (end > start) {
+    const code = str.charCodeAt(end - 1);
+    if (code !== 13 && code !== 10) {
+      break;
+    }
+    end -= 1;
+  }
+  return start === 0 && end === length ? str : str.slice(start, end);
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  ansiRegex,
+  applyLinePrefix,
+  camelToKebab,
+  centerText,
+  fromCharCode,
+  indentString,
+  isBlankString,
+  isNonEmptyString,
+  repeatString,
+  search,
+  stringWidth,
+  stripAnsi,
+  stripBom,
+  toKebabCase,
+  trimNewlines
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/suppress-warnings.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/suppress-warnings.d.ts
new file mode 100644
index 00000000..c2b93bdf
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/suppress-warnings.d.ts
@@ -0,0 +1,64 @@
+export declare function suppressMaxListenersWarning(): void;
+/**
+ * Suppress all process warnings of a specific type.
+ *
+ * @param warningType - The warning type to suppress (e.g., 'DeprecationWarning', 'ExperimentalWarning')
+ *
+ * @example
+ * import { suppressWarningType } from '@socketsecurity/lib/suppress-warnings'
+ *
+ * suppressWarningType('ExperimentalWarning')
+ */
+export declare function suppressWarningType(warningType: string): void;
+/**
+ * Set max listeners on an EventTarget (like AbortSignal) to avoid TypeError.
+ *
+ * By manually setting `kMaxEventTargetListeners` on the target we avoid:
+ *   TypeError [ERR_INVALID_ARG_TYPE]: The "emitter" argument must be an
+ *   instance of EventEmitter or EventTarget. Received an instance of
+ *   AbortSignal
+ *
+ * in some patch releases of Node 18-23 when calling events.getMaxListeners().
+ * See https://github.com/nodejs/node/pull/56807.
+ *
+ * Instead of calling events.setMaxListeners(n, target) we set the symbol
+ * property directly to avoid depending on 'node:events' module.
+ *
+ * @param target - The EventTarget or AbortSignal to configure
+ * @param maxListeners - Maximum number of listeners (defaults to 10, the Node.js default)
+ *
+ * @example
+ * import { setMaxEventTargetListeners } from '@socketsecurity/lib/suppress-warnings'
+ *
+ * const controller = new AbortController()
+ * setMaxEventTargetListeners(controller.signal)
+ */
+export declare function setMaxEventTargetListeners(target: EventTarget | AbortSignal | undefined, maxListeners?: number): void;
+/**
+ * Restore the original process.emitWarning function.
+ * Call this to re-enable all warnings after suppressing them.
+ *
+ * @example
+ * ```typescript
+ * suppressMaxListenersWarning()
+ * // ... do work ...
+ * restoreWarnings() // Re-enable all warnings
+ * ```
+ */
+export declare function restoreWarnings(): void;
+/**
+ * Suppress warnings temporarily within a callback.
+ *
+ * @param warningType - The warning type to suppress
+ * @param callback - Function to execute with warnings suppressed
+ * @returns The result of the callback
+ *
+ * @example
+ * import { withSuppressedWarnings } from '@socketsecurity/lib/suppress-warnings'
+ *
+ * const result = await withSuppressedWarnings('ExperimentalWarning', async () => {
+ *   // Code that triggers experimental warnings
+ *   return someValue
+ * })
+ */
+export declare function withSuppressedWarnings(warningType: string, callback: () => T | Promise): Promise;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/suppress-warnings.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/suppress-warnings.js
new file mode 100644
index 00000000..adf80fae
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/suppress-warnings.js
@@ -0,0 +1,115 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var suppress_warnings_exports = {};
+__export(suppress_warnings_exports, {
+  restoreWarnings: () => restoreWarnings,
+  setMaxEventTargetListeners: () => setMaxEventTargetListeners,
+  suppressMaxListenersWarning: () => suppressMaxListenersWarning,
+  suppressWarningType: () => suppressWarningType,
+  withSuppressedWarnings: () => withSuppressedWarnings
+});
+module.exports = __toCommonJS(suppress_warnings_exports);
+var import_node_process = __toESM(require("node:process"));
+const { apply: ReflectApply } = Reflect;
+let originalEmitWarning;
+const suppressedWarnings = /* @__PURE__ */ new Set();
+function setupSuppression() {
+  if (!originalEmitWarning) {
+    originalEmitWarning = import_node_process.default.emitWarning;
+    import_node_process.default.emitWarning = (warning, ...args) => {
+      if (typeof warning === "string") {
+        for (const suppressedType of suppressedWarnings) {
+          if (warning.includes(suppressedType)) {
+            return;
+          }
+        }
+      } else if (warning && typeof warning === "object") {
+        const warningObj = warning;
+        if (warningObj.name && suppressedWarnings.has(warningObj.name)) {
+          return;
+        }
+      }
+      return ReflectApply(
+        originalEmitWarning,
+        import_node_process.default,
+        [warning, ...args]
+      );
+    };
+  }
+}
+function suppressMaxListenersWarning() {
+  suppressedWarnings.add("MaxListenersExceededWarning");
+  setupSuppression();
+}
+function suppressWarningType(warningType) {
+  suppressedWarnings.add(warningType);
+  setupSuppression();
+}
+function setMaxEventTargetListeners(target, maxListeners = 10) {
+  if (!target) {
+    return;
+  }
+  const symbols = Object.getOwnPropertySymbols(target);
+  const kMaxEventTargetListeners = symbols.find(
+    (s) => s.description === "events.maxEventTargetListeners"
+  );
+  if (kMaxEventTargetListeners) {
+    ;
+    target[kMaxEventTargetListeners] = maxListeners;
+  }
+}
+function restoreWarnings() {
+  if (originalEmitWarning) {
+    import_node_process.default.emitWarning = originalEmitWarning;
+    originalEmitWarning = void 0;
+    suppressedWarnings.clear();
+  }
+}
+async function withSuppressedWarnings(warningType, callback) {
+  const wasAlreadySuppressed = suppressedWarnings.has(warningType);
+  const original = import_node_process.default.emitWarning;
+  suppressWarningType(warningType);
+  try {
+    return await callback();
+  } finally {
+    if (!wasAlreadySuppressed) {
+      suppressedWarnings.delete(warningType);
+    }
+    import_node_process.default.emitWarning = original;
+  }
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  restoreWarnings,
+  setMaxEventTargetListeners,
+  suppressMaxListenersWarning,
+  suppressWarningType,
+  withSuppressedWarnings
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/tables.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/tables.d.ts
new file mode 100644
index 00000000..fdb8c37c
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/tables.d.ts
@@ -0,0 +1,69 @@
+export type ColumnAlignment = 'left' | 'right' | 'center';
+/**
+ * Table column configuration.
+ */
+export type TableColumn = {
+    key: string;
+    header: string;
+    align?: ColumnAlignment | undefined;
+    width?: number | undefined;
+    color?: ((value: string) => string) | undefined;
+};
+/**
+ * Format data as an ASCII table with borders.
+ *
+ * @param data - Array of data objects
+ * @param columns - Column configuration
+ * @returns Formatted table string
+ *
+ * @example
+ * import { formatTable } from '@socketsecurity/lib/tables'
+ * import colors from 'yoctocolors-cjs'
+ *
+ * const data = [
+ *   { name: 'lodash', version: '4.17.21', issues: 0 },
+ *   { name: 'react', version: '18.2.0', issues: 2 },
+ * ]
+ * const columns = [
+ *   { key: 'name', header: 'Package' },
+ *   { key: 'version', header: 'Version', align: 'center' },
+ *   { key: 'issues', header: 'Issues', align: 'right', color: (v) => v === '0' ? colors.green(v) : colors.red(v) },
+ * ]
+ * console.log(formatTable(data, columns))
+ * // Output:
+ * // ┌─────────┬─────────┬────────┐
+ * // │ Package │ Version │ Issues │
+ * // ├─────────┼─────────┼────────┤
+ * // │ lodash  │ 4.17.21 │      0 │
+ * // │ react   │ 18.2.0  │      2 │
+ * // └─────────┴─────────┴────────┘
+ */
+export declare function formatTable(data: Array>, columns: TableColumn[]): string;
+/**
+ * Format data as a simple table without borders.
+ * Lighter weight alternative to formatTable().
+ *
+ * @param data - Array of data objects
+ * @param columns - Column configuration
+ * @returns Formatted table string
+ *
+ * @example
+ * import { formatSimpleTable } from '@socketsecurity/lib/tables'
+ * import colors from 'yoctocolors-cjs'
+ *
+ * const data = [
+ *   { name: 'lodash', version: '4.17.21' },
+ *   { name: 'react', version: '18.2.0' },
+ * ]
+ * const columns = [
+ *   { key: 'name', header: 'Package' },
+ *   { key: 'version', header: 'Version' },
+ * ]
+ * console.log(formatSimpleTable(data, columns))
+ * // Output:
+ * // Package  Version
+ * // ───────  ───────
+ * // lodash   4.17.21
+ * // react    18.2.0
+ */
+export declare function formatSimpleTable(data: Array>, columns: TableColumn[]): string;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/tables.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/tables.js
new file mode 100644
index 00000000..4ffa2ae8
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/tables.js
@@ -0,0 +1,130 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var tables_exports = {};
+__export(tables_exports, {
+  formatSimpleTable: () => formatSimpleTable,
+  formatTable: () => formatTable
+});
+module.exports = __toCommonJS(tables_exports);
+var import_yoctocolors_cjs = __toESM(require("./external/yoctocolors-cjs"));
+var import_strings = require("./strings");
+function displayWidth(text) {
+  return (0, import_strings.stripAnsi)(text).length;
+}
+function padText(text, width, align = "left") {
+  const stripped = (0, import_strings.stripAnsi)(text);
+  const textWidth = stripped.length;
+  const padding = Math.max(0, width - textWidth);
+  switch (align) {
+    case "right":
+      return " ".repeat(padding) + text;
+    case "center": {
+      const leftPad = Math.floor(padding / 2);
+      const rightPad = padding - leftPad;
+      return " ".repeat(leftPad) + text + " ".repeat(rightPad);
+    }
+    default:
+      return text + " ".repeat(padding);
+  }
+}
+function formatTable(data, columns) {
+  if (data.length === 0) {
+    return "(no data)";
+  }
+  const widths = columns.map((col) => {
+    const headerWidth = displayWidth(col.header);
+    const maxDataWidth = Math.max(
+      ...data.map((row) => displayWidth(String(row[col.key] ?? "")))
+    );
+    return col.width ?? Math.max(headerWidth, maxDataWidth);
+  });
+  const lines = [];
+  const topBorder = `\u250C\u2500${widths.map((w) => "\u2500".repeat(w)).join("\u2500\u252C\u2500")}\u2500\u2510`;
+  lines.push(import_yoctocolors_cjs.default.dim(topBorder));
+  const headerCells = columns.map((col, i) => {
+    const text = import_yoctocolors_cjs.default.bold(col.header);
+    return padText(text, widths[i], col.align);
+  });
+  lines.push(
+    import_yoctocolors_cjs.default.dim("\u2502 ") + headerCells.join(import_yoctocolors_cjs.default.dim(" \u2502 ")) + import_yoctocolors_cjs.default.dim(" \u2502")
+  );
+  const headerSep = `\u251C\u2500${widths.map((w) => "\u2500".repeat(w)).join("\u2500\u253C\u2500")}\u2500\u2524`;
+  lines.push(import_yoctocolors_cjs.default.dim(headerSep));
+  for (const row of data) {
+    const cells = columns.map((col, i) => {
+      let value = String(row[col.key] ?? "");
+      if (col.color) {
+        value = col.color(value);
+      }
+      return padText(value, widths[i], col.align);
+    });
+    lines.push(
+      import_yoctocolors_cjs.default.dim("\u2502 ") + cells.join(import_yoctocolors_cjs.default.dim(" \u2502 ")) + import_yoctocolors_cjs.default.dim(" \u2502")
+    );
+  }
+  const bottomBorder = `\u2514\u2500${widths.map((w) => "\u2500".repeat(w)).join("\u2500\u2534\u2500")}\u2500\u2518`;
+  lines.push(import_yoctocolors_cjs.default.dim(bottomBorder));
+  return lines.join("\n");
+}
+function formatSimpleTable(data, columns) {
+  if (data.length === 0) {
+    return "(no data)";
+  }
+  const widths = columns.map((col) => {
+    const headerWidth = displayWidth(col.header);
+    const maxDataWidth = Math.max(
+      ...data.map((row) => displayWidth(String(row[col.key] ?? "")))
+    );
+    return col.width ?? Math.max(headerWidth, maxDataWidth);
+  });
+  const lines = [];
+  const headerCells = columns.map(
+    (col, i) => padText(import_yoctocolors_cjs.default.bold(col.header), widths[i], col.align)
+  );
+  lines.push(headerCells.join("  "));
+  const separators = widths.map((w) => import_yoctocolors_cjs.default.dim("\u2500".repeat(w)));
+  lines.push(separators.join("  "));
+  for (const row of data) {
+    const cells = columns.map((col, i) => {
+      let value = String(row[col.key] ?? "");
+      if (col.color) {
+        value = col.color(value);
+      }
+      return padText(value, widths[i], col.align);
+    });
+    lines.push(cells.join("  "));
+  }
+  return lines.join("\n");
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  formatSimpleTable,
+  formatTable
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/temporary-executor.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/temporary-executor.d.ts
new file mode 100644
index 00000000..37998bab
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/temporary-executor.d.ts
@@ -0,0 +1,16 @@
+/**
+ * Detects if the current process is running in a temporary package execution context
+ * such as npm exec, npx, pnpm dlx, or yarn dlx.
+ *
+ * When package managers run commands via exec/npx/dlx, they execute in temporary directories
+ * that are cleaned up after execution. Creating persistent shadows or modifying PATH
+ * in these contexts can break subsequent package manager commands.
+ *
+ * @example
+ * ```typescript
+ * if (isRunningInTemporaryExecutor()) {
+ *   console.log('Running in a temporary executor context')
+ * }
+ * ```
+ */
+export declare function isRunningInTemporaryExecutor(cwd?: string): boolean;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/temporary-executor.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/temporary-executor.js
new file mode 100644
index 00000000..1d65d30b
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/temporary-executor.js
@@ -0,0 +1,66 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var temporary_executor_exports = {};
+__export(temporary_executor_exports, {
+  isRunningInTemporaryExecutor: () => isRunningInTemporaryExecutor
+});
+module.exports = __toCommonJS(temporary_executor_exports);
+var import_node_process = __toESM(require("node:process"));
+var import_platform = require("./constants/platform");
+var import_normalize = require("./paths/normalize");
+function isRunningInTemporaryExecutor(cwd = import_node_process.default.cwd()) {
+  const userAgent = import_node_process.default.env["npm_config_user_agent"];
+  if (userAgent?.includes("exec") || userAgent?.includes("npx") || userAgent?.includes("dlx")) {
+    return true;
+  }
+  const normalizedCwd = (0, import_normalize.normalizePath)(cwd);
+  const npmCache = import_node_process.default.env["npm_config_cache"];
+  if (npmCache && normalizedCwd.includes((0, import_normalize.normalizePath)(npmCache))) {
+    return true;
+  }
+  const tempPatterns = [
+    // npm's npx cache directory
+    "_npx",
+    // pnpm dlx temporary store
+    ".pnpm-store",
+    // Common dlx directory prefix
+    "dlx-",
+    // Yarn Berry PnP virtual packages.
+    ".yarn/$$"
+  ];
+  if (import_platform.WIN32) {
+    tempPatterns.push("AppData/Local/Temp/xfs-");
+  }
+  return tempPatterns.some((pattern) => normalizedCwd.includes(pattern));
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  isRunningInTemporaryExecutor
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/context.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/context.d.ts
new file mode 100644
index 00000000..1364245b
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/context.d.ts
@@ -0,0 +1,80 @@
+import type { Theme } from './types';
+import { type ThemeName } from './themes';
+/**
+ * Theme change event listener signature.
+ */
+export type ThemeChangeListener = (theme: Theme) => void;
+/**
+ * Set the global fallback theme.
+ *
+ * @param theme - Theme name or object
+ *
+ * @example
+ * ```ts
+ * setTheme('socket-firewall')
+ * ```
+ */
+export declare function setTheme(theme: Theme | ThemeName): void;
+/**
+ * Get the active theme from context.
+ *
+ * @returns Current theme
+ *
+ * @example
+ * ```ts
+ * const theme = getTheme()
+ * console.log(theme.displayName)
+ * ```
+ */
+export declare function getTheme(): Theme;
+/**
+ * Execute async operation with scoped theme.
+ * Theme automatically restored on completion.
+ *
+ * @template T - Return type
+ * @param theme - Scoped theme
+ * @param fn - Async operation
+ * @returns Operation result
+ *
+ * @example
+ * ```ts
+ * await withTheme('ultra', async () => {
+ *   // Operations use Ultra theme
+ * })
+ * ```
+ */
+export declare function withTheme(theme: Theme | ThemeName, fn: () => Promise): Promise;
+/**
+ * Execute sync operation with scoped theme.
+ * Theme automatically restored on completion.
+ *
+ * @template T - Return type
+ * @param theme - Scoped theme
+ * @param fn - Sync operation
+ * @returns Operation result
+ *
+ * @example
+ * ```ts
+ * const result = withThemeSync('coana', () => {
+ *   return processData()
+ * })
+ * ```
+ */
+export declare function withThemeSync(theme: Theme | ThemeName, fn: () => T): T;
+/**
+ * Subscribe to theme change events.
+ *
+ * @param listener - Change handler
+ * @returns Unsubscribe function
+ *
+ * @example
+ * ```ts
+ * const unsubscribe = onThemeChange((theme) => {
+ *   console.log('Theme:', theme.displayName)
+ * })
+ *
+ * // Cleanup
+ * unsubscribe()
+ * ```
+ */
+export declare function onThemeChange(listener: ThemeChangeListener): () => void;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/context.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/context.js
new file mode 100644
index 00000000..a7490b0c
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/context.js
@@ -0,0 +1,81 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var context_exports = {};
+__export(context_exports, {
+  getTheme: () => getTheme,
+  onThemeChange: () => onThemeChange,
+  setTheme: () => setTheme,
+  withTheme: () => withTheme,
+  withThemeSync: () => withThemeSync
+});
+module.exports = __toCommonJS(context_exports);
+var import_themes = require("./themes");
+let _async_hooks;
+// @__NO_SIDE_EFFECTS__
+function getAsyncHooks() {
+  if (_async_hooks === void 0) {
+    _async_hooks = require("async_hooks");
+  }
+  return _async_hooks;
+}
+const { AsyncLocalStorage } = /* @__PURE__ */ getAsyncHooks();
+const themeStorage = new AsyncLocalStorage();
+let fallbackTheme = import_themes.SOCKET_THEME;
+const listeners = /* @__PURE__ */ new Set();
+function setTheme(theme) {
+  fallbackTheme = typeof theme === "string" ? import_themes.THEMES[theme] : theme;
+  emitThemeChange(fallbackTheme);
+}
+function getTheme() {
+  return themeStorage.getStore() ?? fallbackTheme;
+}
+async function withTheme(theme, fn) {
+  const resolvedTheme = typeof theme === "string" ? import_themes.THEMES[theme] : theme;
+  return await themeStorage.run(resolvedTheme, async () => {
+    emitThemeChange(resolvedTheme);
+    return await fn();
+  });
+}
+function withThemeSync(theme, fn) {
+  const resolvedTheme = typeof theme === "string" ? import_themes.THEMES[theme] : theme;
+  return themeStorage.run(resolvedTheme, () => {
+    emitThemeChange(resolvedTheme);
+    return fn();
+  });
+}
+function onThemeChange(listener) {
+  listeners.add(listener);
+  return () => {
+    listeners.delete(listener);
+  };
+}
+function emitThemeChange(theme) {
+  for (const listener of listeners) {
+    listener(theme);
+  }
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  getTheme,
+  onThemeChange,
+  setTheme,
+  withTheme,
+  withThemeSync
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/index.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/index.d.ts
new file mode 100644
index 00000000..cd58b118
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/index.d.ts
@@ -0,0 +1,53 @@
+/**
+ * @fileoverview Elegant theming system for Socket libraries.
+ * Unified visual language across spinners, loggers, prompts, and links.
+ *
+ * @example
+ * ```ts
+ * import { setTheme, THEMES } from '@socketsecurity/lib/themes'
+ *
+ * // Set global theme
+ * setTheme('terracotta')
+ * ```
+ *
+ * @example
+ * ```ts
+ * import { withTheme } from '@socketsecurity/lib/themes'
+ *
+ * // Scoped theme context
+ * await withTheme('ultra', async () => {
+ *   // All operations inherit Ultra theme
+ * })
+ * ```
+ *
+ * @example
+ * ```ts
+ * import { createTheme } from '@socketsecurity/lib/themes'
+ *
+ * // Custom theme creation
+ * const myTheme = createTheme({
+ *   name: 'custom',
+ *   displayName: 'Custom Theme',
+ *   colors: {
+ *     primary: [255, 100, 200],
+ *     success: 'greenBright',
+ *     error: 'redBright',
+ *     warning: 'yellowBright',
+ *     info: 'blueBright',
+ *     step: 'cyanBright',
+ *     text: 'white',
+ *     textDim: 'gray',
+ *     link: 'cyanBright',
+ *     prompt: 'primary'
+ *   }
+ * })
+ * ```
+ */
+// Type system
+export type { ColorReference, Theme, ThemeColors, ThemeEffects, ThemeMeta, } from './types';
+// Curated themes
+export { LUSH_THEME, SOCKET_THEME, SUNSET_THEME, TERRACOTTA_THEME, THEMES, ULTRA_THEME, type ThemeName, } from './themes';
+// Context management
+export { getTheme, onThemeChange, setTheme, withTheme, withThemeSync, type ThemeChangeListener, } from './context';
+// Composition utilities
+export { createTheme, extendTheme, resolveColor, resolveShimmerColor, } from './utils';
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/index.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/index.js
new file mode 100644
index 00000000..ca8e41ce
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/index.js
@@ -0,0 +1,59 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var themes_exports = {};
+__export(themes_exports, {
+  LUSH_THEME: () => import_themes.LUSH_THEME,
+  SOCKET_THEME: () => import_themes.SOCKET_THEME,
+  SUNSET_THEME: () => import_themes.SUNSET_THEME,
+  TERRACOTTA_THEME: () => import_themes.TERRACOTTA_THEME,
+  THEMES: () => import_themes.THEMES,
+  ULTRA_THEME: () => import_themes.ULTRA_THEME,
+  createTheme: () => import_utils.createTheme,
+  extendTheme: () => import_utils.extendTheme,
+  getTheme: () => import_context.getTheme,
+  onThemeChange: () => import_context.onThemeChange,
+  resolveColor: () => import_utils.resolveColor,
+  resolveShimmerColor: () => import_utils.resolveShimmerColor,
+  setTheme: () => import_context.setTheme,
+  withTheme: () => import_context.withTheme,
+  withThemeSync: () => import_context.withThemeSync
+});
+module.exports = __toCommonJS(themes_exports);
+var import_themes = require("./themes");
+var import_context = require("./context");
+var import_utils = require("./utils");
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  LUSH_THEME,
+  SOCKET_THEME,
+  SUNSET_THEME,
+  TERRACOTTA_THEME,
+  THEMES,
+  ULTRA_THEME,
+  createTheme,
+  extendTheme,
+  getTheme,
+  onThemeChange,
+  resolveColor,
+  resolveShimmerColor,
+  setTheme,
+  withTheme,
+  withThemeSync
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/themes.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/themes.d.ts
new file mode 100644
index 00000000..cc58172f
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/themes.d.ts
@@ -0,0 +1,49 @@
+/**
+ * @fileoverview Elegant theme definitions for Socket libraries.
+ * Sophisticated color palettes crafted for clarity and visual harmony.
+ *
+ * Philosophy: Every color choice serves a purpose. Bright variants ensure
+ * terminal legibility without compromising sophistication. Minimal emoji use,
+ * refined symbols with color—elegance in restraint.
+ */
+import type { Theme } from './types';
+/**
+ * Socket Security — The signature theme.
+ * Refined violet with subtle shimmer, designed for focus and elegance.
+ */
+export declare const SOCKET_THEME: Theme;
+/**
+ * Sunset — Vibrant twilight gradient.
+ * Warm sunset palette with orange and purple/pink tones.
+ */
+export declare const SUNSET_THEME: Theme;
+/**
+ * Terracotta — Solid warmth.
+ * Rich terracotta and ember tones for grounded confidence.
+ */
+export declare const TERRACOTTA_THEME: Theme;
+/**
+ * Lush — Steel elegance.
+ * Python-inspired steel blue with golden accents.
+ */
+export declare const LUSH_THEME: Theme;
+/**
+ * Ultra — Premium intensity.
+ * Prismatic shimmer for deep analysis, where complexity meets elegance.
+ */
+export declare const ULTRA_THEME: Theme;
+/**
+ * Theme registry — Curated palette collection.
+ */
+export declare const THEMES: {
+    readonly __proto__: any;
+    readonly socket: Theme;
+    readonly sunset: Theme;
+    readonly terracotta: Theme;
+    readonly lush: Theme;
+    readonly ultra: Theme;
+};
+/**
+ * Available theme identifiers.
+ */
+export type ThemeName = keyof typeof THEMES;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/themes.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/themes.js
new file mode 100644
index 00000000..aaa48dc9
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/themes.js
@@ -0,0 +1,206 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var themes_exports = {};
+__export(themes_exports, {
+  LUSH_THEME: () => LUSH_THEME,
+  SOCKET_THEME: () => SOCKET_THEME,
+  SUNSET_THEME: () => SUNSET_THEME,
+  TERRACOTTA_THEME: () => TERRACOTTA_THEME,
+  THEMES: () => THEMES,
+  ULTRA_THEME: () => ULTRA_THEME
+});
+module.exports = __toCommonJS(themes_exports);
+const SOCKET_THEME = {
+  name: "socket",
+  displayName: "Socket Security",
+  colors: {
+    primary: [140, 82, 255],
+    success: "greenBright",
+    error: "redBright",
+    warning: "yellowBright",
+    info: "blueBright",
+    step: "cyanBright",
+    text: "white",
+    textDim: "gray",
+    link: "cyanBright",
+    prompt: "primary"
+  },
+  effects: {
+    spinner: {
+      color: "primary",
+      style: "socket"
+    },
+    shimmer: {
+      enabled: true,
+      color: "inherit",
+      direction: "ltr",
+      speed: 0.33
+    }
+  },
+  meta: {
+    description: "Signature theme with refined violet and subtle shimmer",
+    version: "1.0.0"
+  }
+};
+const SUNSET_THEME = {
+  name: "sunset",
+  displayName: "Sunset",
+  colors: {
+    primary: [255, 140, 100],
+    secondary: [200, 100, 180],
+    success: "greenBright",
+    error: "redBright",
+    warning: "yellowBright",
+    info: "magentaBright",
+    step: "magentaBright",
+    text: "white",
+    textDim: "gray",
+    link: "primary",
+    prompt: "primary"
+  },
+  effects: {
+    spinner: {
+      color: "primary",
+      style: "dots"
+    },
+    shimmer: {
+      enabled: true,
+      color: [
+        [200, 100, 180],
+        [255, 140, 100]
+      ],
+      direction: "ltr",
+      speed: 0.4
+    }
+  },
+  meta: {
+    description: "Warm sunset theme with purple-to-orange gradient",
+    version: "2.0.0"
+  }
+};
+const TERRACOTTA_THEME = {
+  name: "terracotta",
+  displayName: "Terracotta",
+  colors: {
+    primary: [255, 100, 50],
+    secondary: [255, 150, 100],
+    success: "greenBright",
+    error: "redBright",
+    warning: "yellowBright",
+    info: "blueBright",
+    step: "cyanBright",
+    text: "white",
+    textDim: "gray",
+    link: "secondary",
+    prompt: "primary"
+  },
+  effects: {
+    spinner: {
+      color: "primary",
+      style: "socket"
+    },
+    shimmer: {
+      enabled: true,
+      color: "inherit",
+      direction: "ltr",
+      speed: 0.5
+    }
+  },
+  meta: {
+    description: "Solid theme with rich terracotta and ember warmth",
+    version: "1.0.0"
+  }
+};
+const LUSH_THEME = {
+  name: "lush",
+  displayName: "Lush",
+  colors: {
+    primary: [70, 130, 180],
+    secondary: [255, 215, 0],
+    success: "greenBright",
+    error: "redBright",
+    warning: "yellowBright",
+    info: "blueBright",
+    step: "cyanBright",
+    text: "white",
+    textDim: "gray",
+    link: "cyanBright",
+    prompt: "primary"
+  },
+  effects: {
+    spinner: {
+      color: "primary",
+      style: "dots"
+    }
+  },
+  meta: {
+    description: "Elegant theme with steel blue and golden harmony",
+    version: "1.0.0"
+  }
+};
+const ULTRA_THEME = {
+  name: "ultra",
+  displayName: "Ultra",
+  colors: {
+    primary: [140, 82, 255],
+    success: "greenBright",
+    error: "redBright",
+    warning: "yellowBright",
+    info: "cyanBright",
+    step: "magentaBright",
+    text: "whiteBright",
+    textDim: "gray",
+    link: "cyanBright",
+    prompt: "primary"
+  },
+  effects: {
+    spinner: {
+      color: "inherit",
+      style: "socket"
+    },
+    shimmer: {
+      enabled: true,
+      color: "rainbow",
+      direction: "bi",
+      speed: 0.5
+    }
+  },
+  meta: {
+    description: "Premium theme with prismatic shimmer for deep analysis",
+    version: "1.0.0"
+  }
+};
+const THEMES = {
+  __proto__: null,
+  socket: SOCKET_THEME,
+  sunset: SUNSET_THEME,
+  terracotta: TERRACOTTA_THEME,
+  lush: LUSH_THEME,
+  ultra: ULTRA_THEME
+};
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  LUSH_THEME,
+  SOCKET_THEME,
+  SUNSET_THEME,
+  TERRACOTTA_THEME,
+  THEMES,
+  ULTRA_THEME
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/types.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/types.d.ts
new file mode 100644
index 00000000..5b480e8f
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/types.d.ts
@@ -0,0 +1,93 @@
+/**
+ * @fileoverview Elegant theme type system.
+ * Type-safe theming for spinners, loggers, prompts, and links.
+ */
+import type { ColorValue } from '../colors';
+import type { SpinnerStyle } from '../spinner';
+import type { ShimmerDirection } from '../effects/text-shimmer';
+/**
+ * Color reference — direct value or semantic keyword.
+ * Keywords: 'primary', 'secondary', 'inherit', 'rainbow'
+ */
+export type ColorReference = ColorValue | 'primary' | 'secondary' | 'inherit' | 'rainbow';
+/**
+ * Theme color palette — semantic colors for visual harmony.
+ */
+export type ThemeColors = {
+    /** Primary brand identity */
+    primary: ColorValue;
+    /** Secondary accent (optional) */
+    secondary?: ColorValue | undefined;
+    /** Success indicator ✓ */
+    success: ColorValue;
+    /** Error indicator ✗ */
+    error: ColorValue;
+    /** Warning indicator ⚠ */
+    warning: ColorValue;
+    /** Information indicator ℹ */
+    info: ColorValue;
+    /** Progress indicator → */
+    step: ColorValue;
+    /** Primary text */
+    text: ColorValue;
+    /** Dimmed text */
+    textDim: ColorValue;
+    /** Hyperlinks */
+    link: ColorReference;
+    /** Interactive prompts */
+    prompt: ColorReference;
+};
+/**
+ * Theme effects — animations and visual enhancements.
+ */
+export type ThemeEffects = {
+    /** Spinner configuration */
+    spinner?: {
+        /** Color (supports theme references) */
+        color?: ColorReference | undefined;
+        /** Animation style */
+        style?: SpinnerStyle | string | undefined;
+    };
+    /** Shimmer configuration */
+    shimmer?: {
+        /** Enable shimmer */
+        enabled?: boolean | undefined;
+        /** Color (single, gradient, or keyword) */
+        color?: ColorReference | ColorValue[] | undefined;
+        /** Direction */
+        direction?: ShimmerDirection | undefined;
+        /** Speed (steps per frame) */
+        speed?: number | undefined;
+    };
+    /** Pulse configuration */
+    pulse?: {
+        /** Speed (milliseconds) */
+        speed?: number | undefined;
+    };
+};
+/**
+ * Theme metadata — descriptive information.
+ */
+export type ThemeMeta = {
+    /** Description */
+    description?: string | undefined;
+    /** Author */
+    author?: string | undefined;
+    /** Version */
+    version?: string | undefined;
+};
+/**
+ * Theme definition — complete visual identity.
+ */
+export type Theme = {
+    /** Unique identifier (kebab-case) */
+    name: string;
+    /** Display name */
+    displayName: string;
+    /** Color palette */
+    colors: ThemeColors;
+    /** Visual effects (optional) */
+    effects?: ThemeEffects | undefined;
+    /** Metadata (optional) */
+    meta?: ThemeMeta | undefined;
+};
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/types.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/types.js
new file mode 100644
index 00000000..4af3a3ea
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/types.js
@@ -0,0 +1,17 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var types_exports = {};
+module.exports = __toCommonJS(types_exports);
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/utils.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/utils.d.ts
new file mode 100644
index 00000000..21294f9f
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/utils.d.ts
@@ -0,0 +1,78 @@
+import type { ColorValue } from '../colors';
+import type { ShimmerColorGradient } from '../effects/text-shimmer';
+import type { Theme, ThemeColors, ColorReference } from './types';
+/**
+ * Resolve color reference to concrete value.
+ * Handles semantic keywords: 'primary', 'secondary', 'rainbow', 'inherit'
+ *
+ * @param value - Color reference
+ * @param colors - Theme palette
+ * @returns Resolved color
+ *
+ * @example
+ * ```ts
+ * resolveColor('primary', theme.colors)
+ * resolveColor([255, 0, 0], theme.colors)
+ * ```
+ */
+export declare function resolveColor(value: ColorReference | ColorValue, colors: ThemeColors): ColorValue | 'inherit' | ShimmerColorGradient;
+/**
+ * Resolve shimmer color with gradient support.
+ *
+ * @param value - Shimmer color
+ * @param theme - Theme context
+ * @returns Resolved color
+ *
+ * @example
+ * ```ts
+ * resolveShimmerColor('rainbow', theme)
+ * resolveShimmerColor('primary', theme)
+ * ```
+ */
+export declare function resolveShimmerColor(value: ColorReference | ColorValue[] | undefined, theme: Theme): ColorValue | ShimmerColorGradient | 'inherit';
+/**
+ * Extend existing theme with custom overrides.
+ * Deep merge of colors and effects.
+ *
+ * @param base - Base theme
+ * @param overrides - Custom overrides
+ * @returns Extended theme
+ *
+ * @example
+ * ```ts
+ * const custom = extendTheme(SOCKET_THEME, {
+ *   name: 'custom',
+ *   colors: { primary: [255, 100, 200] }
+ * })
+ * ```
+ */
+export declare function extendTheme(base: Theme, overrides: Partial> & {
+    colors?: Partial | undefined;
+}): Theme;
+/**
+ * Create new theme from complete specification.
+ *
+ * @param config - Theme configuration
+ * @returns Theme object
+ *
+ * @example
+ * ```ts
+ * const theme = createTheme({
+ *   name: 'custom',
+ *   displayName: 'Custom',
+ *   colors: {
+ *     primary: [255, 100, 200],
+ *     success: 'greenBright',
+ *     error: 'redBright',
+ *     warning: 'yellowBright',
+ *     info: 'blueBright',
+ *     step: 'cyanBright',
+ *     text: 'white',
+ *     textDim: 'gray',
+ *     link: 'cyanBright',
+ *     prompt: 'primary'
+ *   }
+ * })
+ * ```
+ */
+export declare function createTheme(config: Pick & Partial>): Theme;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/utils.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/utils.js
new file mode 100644
index 00000000..0ea1b03b
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/themes/utils.js
@@ -0,0 +1,118 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var utils_exports = {};
+__export(utils_exports, {
+  createTheme: () => createTheme,
+  extendTheme: () => extendTheme,
+  resolveColor: () => resolveColor,
+  resolveShimmerColor: () => resolveShimmerColor
+});
+module.exports = __toCommonJS(utils_exports);
+var import_ultra = require("../effects/ultra");
+function resolveColor(value, colors) {
+  if (typeof value === "string") {
+    if (value === "primary") {
+      return colors.primary;
+    }
+    if (value === "secondary") {
+      return colors.secondary ?? colors.primary;
+    }
+    if (value === "inherit") {
+      return "inherit";
+    }
+    if (value === "rainbow") {
+      return import_ultra.RAINBOW_GRADIENT;
+    }
+    return value;
+  }
+  return value;
+}
+function resolveShimmerColor(value, theme) {
+  if (!value) {
+    return "inherit";
+  }
+  if (value === "rainbow") {
+    return import_ultra.RAINBOW_GRADIENT;
+  }
+  if (value === "inherit") {
+    return "inherit";
+  }
+  if (Array.isArray(value)) {
+    if (value.length > 0 && Array.isArray(value[0])) {
+      return value;
+    }
+    return value;
+  }
+  return resolveColor(value, theme.colors);
+}
+function extendTheme(base, overrides) {
+  return {
+    __proto__: null,
+    ...base,
+    ...overrides,
+    colors: {
+      __proto__: null,
+      ...base.colors,
+      ...overrides.colors
+    },
+    effects: overrides.effects ? {
+      __proto__: null,
+      ...base.effects,
+      ...overrides.effects,
+      spinner: overrides.effects.spinner !== void 0 ? {
+        __proto__: null,
+        ...base.effects?.spinner,
+        ...overrides.effects.spinner
+      } : base.effects?.spinner,
+      shimmer: overrides.effects.shimmer !== void 0 ? {
+        __proto__: null,
+        ...base.effects?.shimmer,
+        ...overrides.effects.shimmer
+      } : base.effects?.shimmer,
+      pulse: overrides.effects.pulse !== void 0 ? {
+        __proto__: null,
+        ...base.effects?.pulse,
+        ...overrides.effects.pulse
+      } : base.effects?.pulse
+    } : base.effects,
+    meta: overrides.meta ? {
+      __proto__: null,
+      ...base.meta,
+      ...overrides.meta
+    } : base.meta
+  };
+}
+function createTheme(config) {
+  return {
+    __proto__: null,
+    name: config.name,
+    displayName: config.displayName,
+    colors: { __proto__: null, ...config.colors },
+    effects: config.effects ? { __proto__: null, ...config.effects } : void 0,
+    meta: config.meta ? { __proto__: null, ...config.meta } : void 0
+  };
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  createTheme,
+  extendTheme,
+  resolveColor,
+  resolveShimmerColor
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/types.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/types.d.ts
new file mode 100644
index 00000000..0e1317ec
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/types.d.ts
@@ -0,0 +1,67 @@
+/**
+ * @fileoverview Type definitions for Socket Registry.
+ */
+// Type definitions
+declare enum Categories {
+    CLEANUP = "cleanup",
+    LEVELUP = "levelup",
+    SPEEDUP = "speedup",
+    TUNEUP = "tuneup"
+}
+export type CategoryString = `${Categories}`;
+declare enum Interop {
+    BROWSERIFY = "browserify",
+    CJS = "cjs",
+    ESM = "esm"
+}
+export type InteropString = `${Interop}`;
+// Based on SocketPURL_Type from socket-sdk-js
+export declare enum PURL_Type {
+    ALPM = "alpm",
+    APK = "apk",
+    BITBUCKET = "bitbucket",
+    COCOAPODS = "cocoapods",
+    CARGO = "cargo",
+    CHROME = "chrome",
+    COMPOSER = "composer",
+    CONAN = "conan",
+    CONDA = "conda",
+    CRAN = "cran",
+    DEB = "deb",
+    DOCKER = "docker",
+    GEM = "gem",
+    GENERIC = "generic",
+    GITHUB = "github",
+    GOLANG = "golang",
+    HACKAGE = "hackage",
+    HEX = "hex",
+    HUGGINGFACE = "huggingface",
+    MAVEN = "maven",
+    MLFLOW = "mlflow",
+    NPM = "npm",
+    NUGET = "nuget",
+    OCI = "oci",
+    PUB = "pub",
+    PYPI = "pypi",
+    QPKG = "qpkg",
+    RPM = "rpm",
+    SWID = "swid",
+    SWIFT = "swift",
+    VCS = "vcs",
+    VSCODE = "vscode"
+}
+export type PURLString = `${PURL_Type}`;
+// Alias for backward compatibility and semantic clarity
+export type EcosystemString = PURLString;
+// Manifest types for Socket Registry
+export type ManifestEntryData = {
+    categories?: CategoryString[] | undefined;
+    interop?: InteropString | undefined;
+    license?: string | undefined;
+    name: string;
+    version: string;
+    [key: string]: unknown;
+};
+export type ManifestEntry = [packageName: string, data: ManifestEntryData];
+export type Manifest = Record;
+export {};
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/types.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/types.js
new file mode 100644
index 00000000..bb95c5f9
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/types.js
@@ -0,0 +1,63 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var types_exports = {};
+__export(types_exports, {
+  PURL_Type: () => PURL_Type
+});
+module.exports = __toCommonJS(types_exports);
+var PURL_Type = /* @__PURE__ */ ((PURL_Type2) => {
+  PURL_Type2["ALPM"] = "alpm";
+  PURL_Type2["APK"] = "apk";
+  PURL_Type2["BITBUCKET"] = "bitbucket";
+  PURL_Type2["COCOAPODS"] = "cocoapods";
+  PURL_Type2["CARGO"] = "cargo";
+  PURL_Type2["CHROME"] = "chrome";
+  PURL_Type2["COMPOSER"] = "composer";
+  PURL_Type2["CONAN"] = "conan";
+  PURL_Type2["CONDA"] = "conda";
+  PURL_Type2["CRAN"] = "cran";
+  PURL_Type2["DEB"] = "deb";
+  PURL_Type2["DOCKER"] = "docker";
+  PURL_Type2["GEM"] = "gem";
+  PURL_Type2["GENERIC"] = "generic";
+  PURL_Type2["GITHUB"] = "github";
+  PURL_Type2["GOLANG"] = "golang";
+  PURL_Type2["HACKAGE"] = "hackage";
+  PURL_Type2["HEX"] = "hex";
+  PURL_Type2["HUGGINGFACE"] = "huggingface";
+  PURL_Type2["MAVEN"] = "maven";
+  PURL_Type2["MLFLOW"] = "mlflow";
+  PURL_Type2["NPM"] = "npm";
+  PURL_Type2["NUGET"] = "nuget";
+  PURL_Type2["OCI"] = "oci";
+  PURL_Type2["PUB"] = "pub";
+  PURL_Type2["PYPI"] = "pypi";
+  PURL_Type2["QPKG"] = "qpkg";
+  PURL_Type2["RPM"] = "rpm";
+  PURL_Type2["SWID"] = "swid";
+  PURL_Type2["SWIFT"] = "swift";
+  PURL_Type2["VCS"] = "vcs";
+  PURL_Type2["VSCODE"] = "vscode";
+  return PURL_Type2;
+})(PURL_Type || {});
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  PURL_Type
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/url.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/url.d.ts
new file mode 100644
index 00000000..749b8020
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/url.d.ts
@@ -0,0 +1,119 @@
+/**
+ * Check if a value is a valid URL.
+ *
+ * @example
+ * ```typescript
+ * isUrl('https://example.com') // true
+ * isUrl('not a url')           // false
+ * isUrl(null)                  // false
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function isUrl(value: string | URL | null | undefined): boolean;
+/**
+ * Parse a value as a URL.
+ *
+ * @example
+ * ```typescript
+ * parseUrl('https://example.com')  // URL { href: 'https://example.com/' }
+ * parseUrl('invalid')              // undefined
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function parseUrl(value: string | URL): URL | undefined;
+/**
+ * Convert a URL search parameter to an array.
+ *
+ * @example
+ * ```typescript
+ * urlSearchParamAsArray('a, b, c') // ['a', 'b', 'c']
+ * urlSearchParamAsArray(null)      // []
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function urlSearchParamAsArray(value: string | null | undefined): string[];
+export interface UrlSearchParamAsBooleanOptions {
+    defaultValue?: boolean;
+}
+/**
+ * Convert a URL search parameter to a boolean.
+ *
+ * @example
+ * ```typescript
+ * urlSearchParamAsBoolean('true') // true
+ * urlSearchParamAsBoolean('0')    // false
+ * urlSearchParamAsBoolean(null)   // false
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function urlSearchParamAsBoolean(value: string | null | undefined, options?: UrlSearchParamAsBooleanOptions | undefined): boolean;
+/**
+ * Helper to get array from URLSearchParams.
+ *
+ * @example
+ * ```typescript
+ * const params = new URLSearchParams('tags=a,b,c')
+ * urlSearchParamsGetArray(params, 'tags') // ['a', 'b', 'c']
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function urlSearchParamsGetArray(params: URLSearchParams | null | undefined, key: string): string[];
+export interface UrlSearchParamsGetBooleanOptions {
+    defaultValue?: boolean;
+}
+/**
+ * Helper to get boolean from URLSearchParams.
+ *
+ * @example
+ * ```typescript
+ * const params = new URLSearchParams('debug=true')
+ * urlSearchParamsGetBoolean(params, 'debug') // true
+ * urlSearchParamsGetBoolean(params, 'other') // false
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function urlSearchParamsGetBoolean(params: URLSearchParams | null | undefined, key: string, options?: UrlSearchParamsGetBooleanOptions | undefined): boolean;
+export interface CreateRelativeUrlOptions {
+    base?: string;
+}
+/**
+ * Create a relative URL for testing.
+ *
+ * @example
+ * ```typescript
+ * createRelativeUrl('/api/test')                                    // 'api/test'
+ * createRelativeUrl('/api/test', { base: 'https://example.com' })  // 'https://example.com/api/test'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function createRelativeUrl(path: string, options?: CreateRelativeUrlOptions | undefined): string;
+export interface UrlSearchParamAsStringOptions {
+    defaultValue?: string;
+}
+/**
+ * Get string value from URLSearchParams with a default.
+ *
+ * @example
+ * ```typescript
+ * const params = new URLSearchParams('name=socket')
+ * urlSearchParamAsString(params, 'name')  // 'socket'
+ * urlSearchParamAsString(params, 'other') // ''
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function urlSearchParamAsString(params: URLSearchParams | null | undefined, key: string, options?: UrlSearchParamAsStringOptions | undefined): string;
+export interface UrlSearchParamAsNumberOptions {
+    defaultValue?: number;
+}
+/**
+ * Get number value from URLSearchParams with a default.
+ *
+ * @example
+ * ```typescript
+ * const params = new URLSearchParams('limit=10')
+ * urlSearchParamAsNumber(params, 'limit') // 10
+ * urlSearchParamAsNumber(params, 'other') // 0
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function urlSearchParamAsNumber(params: URLSearchParams | null | undefined, key: string, options?: UrlSearchParamAsNumberOptions | undefined): number;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/url.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/url.js
new file mode 100644
index 00000000..5276128d
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/url.js
@@ -0,0 +1,144 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var url_exports = {};
+__export(url_exports, {
+  createRelativeUrl: () => createRelativeUrl,
+  isUrl: () => isUrl,
+  parseUrl: () => parseUrl,
+  urlSearchParamAsArray: () => urlSearchParamAsArray,
+  urlSearchParamAsBoolean: () => urlSearchParamAsBoolean,
+  urlSearchParamAsNumber: () => urlSearchParamAsNumber,
+  urlSearchParamAsString: () => urlSearchParamAsString,
+  urlSearchParamsGetArray: () => urlSearchParamsGetArray,
+  urlSearchParamsGetBoolean: () => urlSearchParamsGetBoolean
+});
+module.exports = __toCommonJS(url_exports);
+const BooleanCtor = Boolean;
+const UrlCtor = URL;
+// @__NO_SIDE_EFFECTS__
+function isUrl(value) {
+  return (typeof value === "string" && value !== "" || value !== null && typeof value === "object") && !!/* @__PURE__ */ parseUrl(value);
+}
+// @__NO_SIDE_EFFECTS__
+function parseUrl(value) {
+  try {
+    return new UrlCtor(value);
+  } catch {
+  }
+  return void 0;
+}
+// @__NO_SIDE_EFFECTS__
+function urlSearchParamAsArray(value) {
+  return typeof value === "string" ? value.trim().split(/, */).map((v) => v.trim()).filter(BooleanCtor) : [];
+}
+// @__NO_SIDE_EFFECTS__
+function urlSearchParamAsBoolean(value, options) {
+  const { defaultValue = false } = {
+    __proto__: null,
+    ...options
+  };
+  if (typeof value === "string") {
+    const trimmed = value.trim();
+    return trimmed === "1" || trimmed.toLowerCase() === "true";
+  }
+  if (value === null || value === void 0) {
+    return !!defaultValue;
+  }
+  return !!value;
+}
+// @__NO_SIDE_EFFECTS__
+function urlSearchParamsGetArray(params, key) {
+  if (params && typeof params.getAll === "function") {
+    const values = params.getAll(key);
+    const firstValue = values[0];
+    if (values.length === 1 && firstValue && firstValue.includes(",")) {
+      return /* @__PURE__ */ urlSearchParamAsArray(firstValue);
+    }
+    return values;
+  }
+  return [];
+}
+// @__NO_SIDE_EFFECTS__
+function urlSearchParamsGetBoolean(params, key, options) {
+  const { defaultValue = false } = {
+    __proto__: null,
+    ...options
+  };
+  if (params && typeof params.get === "function") {
+    const value = params.get(key);
+    return value !== null ? /* @__PURE__ */ urlSearchParamAsBoolean(value, { defaultValue }) : defaultValue;
+  }
+  return defaultValue;
+}
+// @__NO_SIDE_EFFECTS__
+function createRelativeUrl(path, options) {
+  const { base = "" } = {
+    __proto__: null,
+    ...options
+  };
+  const relativePath = path.replace(/^\//, "");
+  if (base) {
+    let baseUrl = base;
+    if (!baseUrl.endsWith("/")) {
+      baseUrl += "/";
+    }
+    return baseUrl + relativePath;
+  }
+  return relativePath;
+}
+// @__NO_SIDE_EFFECTS__
+function urlSearchParamAsString(params, key, options) {
+  const { defaultValue = "" } = {
+    __proto__: null,
+    ...options
+  };
+  if (params && typeof params.get === "function") {
+    const value = params.get(key);
+    return value !== null ? value : defaultValue;
+  }
+  return defaultValue;
+}
+// @__NO_SIDE_EFFECTS__
+function urlSearchParamAsNumber(params, key, options) {
+  const { defaultValue = 0 } = {
+    __proto__: null,
+    ...options
+  };
+  if (params && typeof params.get === "function") {
+    const value = params.get(key);
+    if (value !== null) {
+      const num = Number(value);
+      return !Number.isNaN(num) ? num : defaultValue;
+    }
+  }
+  return defaultValue;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  createRelativeUrl,
+  isUrl,
+  parseUrl,
+  urlSearchParamAsArray,
+  urlSearchParamAsBoolean,
+  urlSearchParamAsNumber,
+  urlSearchParamAsString,
+  urlSearchParamsGetArray,
+  urlSearchParamsGetBoolean
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/utils/get-ipc.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/utils/get-ipc.d.ts
new file mode 100644
index 00000000..4d56fcab
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/utils/get-ipc.d.ts
@@ -0,0 +1,15 @@
+/**
+ * IPC (Inter-Process Communication) object getter.
+ * Handles communication between parent and child processes.
+ */
+export interface IpcObject {
+    SOCKET_CLI_FIX?: string | undefined;
+    SOCKET_CLI_OPTIMIZE?: boolean | undefined;
+    SOCKET_CLI_SHADOW_ACCEPT_RISKS?: boolean | undefined;
+    SOCKET_CLI_SHADOW_API_TOKEN?: string | undefined;
+    SOCKET_CLI_SHADOW_BIN?: string | undefined;
+    SOCKET_CLI_SHADOW_PROGRESS?: boolean | undefined;
+    SOCKET_CLI_SHADOW_SILENT?: boolean | undefined;
+}
+export declare function getIpc(): Promise;
+export declare function getIpc(key: K): Promise;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/utils/get-ipc.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/utils/get-ipc.js
new file mode 100644
index 00000000..728ec2b1
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/utils/get-ipc.js
@@ -0,0 +1,58 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var get_ipc_exports = {};
+__export(get_ipc_exports, {
+  getIpc: () => getIpc
+});
+module.exports = __toCommonJS(get_ipc_exports);
+let _ipcObject;
+async function getIpc(key) {
+  if (_ipcObject === void 0) {
+    _ipcObject = {};
+    const { env } = process;
+    if (env["SOCKET_CLI_FIX"]) {
+      _ipcObject.SOCKET_CLI_FIX = env["SOCKET_CLI_FIX"];
+    }
+    if (env["SOCKET_CLI_OPTIMIZE"]) {
+      _ipcObject.SOCKET_CLI_OPTIMIZE = env["SOCKET_CLI_OPTIMIZE"] === "true" || env["SOCKET_CLI_OPTIMIZE"] === "1";
+    }
+    if (env["SOCKET_CLI_SHADOW_ACCEPT_RISKS"]) {
+      _ipcObject.SOCKET_CLI_SHADOW_ACCEPT_RISKS = env["SOCKET_CLI_SHADOW_ACCEPT_RISKS"] === "true" || env["SOCKET_CLI_SHADOW_ACCEPT_RISKS"] === "1";
+    }
+    if (env["SOCKET_CLI_SHADOW_API_TOKEN"]) {
+      _ipcObject.SOCKET_CLI_SHADOW_API_TOKEN = env["SOCKET_CLI_SHADOW_API_TOKEN"];
+    }
+    if (env["SOCKET_CLI_SHADOW_BIN"]) {
+      _ipcObject.SOCKET_CLI_SHADOW_BIN = env["SOCKET_CLI_SHADOW_BIN"];
+    }
+    if (env["SOCKET_CLI_SHADOW_PROGRESS"]) {
+      _ipcObject.SOCKET_CLI_SHADOW_PROGRESS = env["SOCKET_CLI_SHADOW_PROGRESS"] === "true" || env["SOCKET_CLI_SHADOW_PROGRESS"] === "1";
+    }
+    if (env["SOCKET_CLI_SHADOW_SILENT"]) {
+      _ipcObject.SOCKET_CLI_SHADOW_SILENT = env["SOCKET_CLI_SHADOW_SILENT"] === "true" || env["SOCKET_CLI_SHADOW_SILENT"] === "1";
+    }
+    Object.freeze(_ipcObject);
+  }
+  return key ? _ipcObject[key] : _ipcObject;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  getIpc
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/validation/json-parser.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/validation/json-parser.d.ts
new file mode 100644
index 00000000..0de7dd36
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/validation/json-parser.d.ts
@@ -0,0 +1,229 @@
+/**
+ * @fileoverview Safe JSON parsing with validation and security controls.
+ * Provides protection against prototype pollution, size limits, and schema validation.
+ *
+ * Key Features:
+ * - Prototype pollution protection: Blocks `__proto__`, `constructor`, and `prototype` keys
+ * - Size limits: Configurable maximum JSON string size (default 10MB)
+ * - Schema validation: Optional Zod-compatible schema validation
+ * - NDJSON support: Parse newline-delimited JSON streams
+ * - Memory safety: Prevents memory exhaustion attacks
+ */
+import type { JsonParseOptions, JsonParseResult, Schema } from './types';
+/**
+ * Safely parse JSON with optional schema validation and security controls.
+ * Throws errors on parse failures, validation failures, or security violations.
+ *
+ * This is the recommended method for parsing untrusted JSON input as it provides
+ * multiple layers of security including prototype pollution protection and size limits.
+ *
+ * @template T - The expected type of the parsed data
+ * @param jsonString - The JSON string to parse
+ * @param schema - Optional Zod-compatible schema for validation
+ * @param options - Parsing options for security and behavior control
+ * @returns The parsed and validated data
+ *
+ * @throws {Error} When JSON string exceeds `maxSize`
+ * @throws {Error} When JSON parsing fails
+ * @throws {Error} When prototype pollution keys are detected (unless `allowPrototype` is `true`)
+ * @throws {Error} When schema validation fails
+ *
+ * @example
+ * ```ts
+ * // Basic parsing with type inference
+ * const data = safeJsonParse('{"name":"Alice","age":30}')
+ *
+ * // With schema validation
+ * import { z } from 'zod'
+ * const userSchema = z.object({
+ *   name: z.string(),
+ *   age: z.number()
+ * })
+ * const user = safeJsonParse('{"name":"Alice","age":30}', userSchema)
+ *
+ * // With size limit
+ * const data = safeJsonParse(jsonString, undefined, {
+ *   maxSize: 1024 * 1024 // 1MB
+ * })
+ *
+ * // Allow prototype keys (dangerous - only for trusted sources)
+ * const data = safeJsonParse(jsonString, undefined, {
+ *   allowPrototype: true
+ * })
+ * ```
+ */
+export declare function safeJsonParse(jsonString: string, schema?: Schema | undefined, options?: JsonParseOptions): T;
+/**
+ * Attempt to parse JSON, returning `undefined` on any error.
+ * This is a non-throwing wrapper around `safeJsonParse` for cases where
+ * you want to gracefully handle parse failures without try-catch blocks.
+ *
+ * Use this when parsing is optional or you have a fallback strategy.
+ * For critical parsing where you need error details, use `safeJsonParse` or `parseJsonWithResult`.
+ *
+ * @template T - The expected type of the parsed data
+ * @param jsonString - The JSON string to parse
+ * @param schema - Optional Zod-compatible schema for validation
+ * @param options - Parsing options for security and behavior control
+ * @returns The parsed data on success, or `undefined` on any error
+ *
+ * @example
+ * ```ts
+ * // Graceful fallback to default
+ * const config = tryJsonParse(jsonString) ?? defaultConfig
+ *
+ * // Optional parsing
+ * const data = tryJsonParse(possiblyInvalidJson)
+ * if (data) {
+ *   console.log('Parsed successfully:', data)
+ * }
+ *
+ * // With schema validation
+ * const user = tryJsonParse(jsonString, userSchema)
+ * ```
+ */
+export declare function tryJsonParse(jsonString: string, schema?: Schema | undefined, options?: JsonParseOptions | undefined): T | undefined;
+/**
+ * Parse JSON and return a discriminated union result.
+ * Never throws - always returns a result object with success/failure information.
+ *
+ * This is ideal when you need detailed error messages and type-safe result handling.
+ * The discriminated union allows TypeScript to narrow types based on the `success` flag.
+ *
+ * @template T - The expected type of the parsed data
+ * @param jsonString - The JSON string to parse
+ * @param schema - Optional Zod-compatible schema for validation
+ * @param options - Parsing options for security and behavior control
+ * @returns Result object with either `{success: true, data}` or `{success: false, error}`
+ *
+ * @example
+ * ```ts
+ * // Type-safe error handling
+ * const result = parseJsonWithResult(jsonString, userSchema)
+ *
+ * if (result.success) {
+ *   // TypeScript knows result.data is available
+ *   console.log(`User: ${result.data.name}`)
+ * } else {
+ *   // TypeScript knows result.error is available
+ *   console.error(`Parse failed: ${result.error}`)
+ * }
+ *
+ * // Early return pattern
+ * const result = parseJsonWithResult(jsonString)
+ * if (!result.success) {
+ *   logger.error(result.error)
+ *   return
+ * }
+ * processData(result.data)
+ * ```
+ */
+export declare function parseJsonWithResult(jsonString: string, schema?: Schema | undefined, options?: JsonParseOptions | undefined): JsonParseResult;
+/**
+ * Create a reusable JSON parser with pre-configured schema and options.
+ * Useful for parsing multiple JSON strings with the same validation rules.
+ *
+ * The returned parser function can accept per-call options that override the defaults.
+ * This factory pattern reduces repetition when parsing many similar JSON payloads.
+ *
+ * @template T - The expected type of the parsed data
+ * @param schema - Optional Zod-compatible schema for validation
+ * @param defaultOptions - Default parsing options applied to all parse calls
+ * @returns A parser function that accepts a JSON string and optional per-call options
+ *
+ * @example
+ * ```ts
+ * // Create a parser for API responses
+ * import { z } from 'zod'
+ * const apiResponseSchema = z.object({
+ *   status: z.string(),
+ *   data: z.unknown()
+ * })
+ *
+ * const parseApiResponse = createJsonParser(apiResponseSchema, {
+ *   maxSize: 5 * 1024 * 1024 // 5MB limit for API responses
+ * })
+ *
+ * // Use the parser multiple times
+ * const response1 = parseApiResponse(json1)
+ * const response2 = parseApiResponse(json2)
+ *
+ * // Override options for specific calls
+ * const response3 = parseApiResponse(json3, { maxSize: 10 * 1024 * 1024 })
+ * ```
+ */
+export declare function createJsonParser(schema?: Schema | undefined, defaultOptions?: JsonParseOptions | undefined): (jsonString: string, options?: JsonParseOptions) => T;
+/**
+ * Parse newline-delimited JSON (NDJSON) into an array.
+ * Each line is treated as a separate JSON object. Empty lines are skipped.
+ *
+ * NDJSON format is commonly used for streaming logs, bulk data transfers,
+ * and event streams where each line represents a complete JSON document.
+ *
+ * @template T - The expected type of each parsed JSON object
+ * @param ndjson - Newline-delimited JSON string (supports both `\n` and `\r\n`)
+ * @param schema - Optional Zod-compatible schema for validation of each line
+ * @param options - Parsing options applied to each line
+ * @returns Array of parsed objects, one per non-empty line
+ *
+ * @throws {Error} When any line fails to parse (includes line number in error message)
+ *
+ * @example
+ * ```ts
+ * // Parse NDJSON logs
+ * const ndjsonString = `
+ * {"level":"info","message":"Server started"}
+ * {"level":"error","message":"Connection failed"}
+ * {"level":"info","message":"Retrying..."}
+ * `
+ * const logs = parseNdjson(ndjsonString, logSchema)
+ * console.log(logs.length) // 3
+ *
+ * // Parse with size limits per line
+ * const entries = parseNdjson(ndjson, undefined, { maxSize: 1024 })
+ *
+ * // Empty lines are automatically skipped
+ * const data = parseNdjson('{"a":1}\n\n{"b":2}\n') // 2 objects
+ * ```
+ */
+export declare function parseNdjson(ndjson: string, schema?: Schema | undefined, options?: JsonParseOptions | undefined): T[];
+/**
+ * Stream-parse newline-delimited JSON (NDJSON) using a generator.
+ * Yields one parsed object at a time, enabling memory-efficient processing of large NDJSON files.
+ *
+ * Unlike `parseNdjson` which loads all results into memory, this generator allows
+ * processing each line individually, making it ideal for large datasets or streaming scenarios.
+ *
+ * @template T - The expected type of each parsed JSON object
+ * @param ndjson - Newline-delimited JSON string (supports both `\n` and `\r\n`)
+ * @param schema - Optional Zod-compatible schema for validation of each line
+ * @param options - Parsing options applied to each line
+ * @yields Parsed objects one at a time as the generator iterates
+ *
+ * @throws {Error} When any line fails to parse (includes line number in error message)
+ *
+ * @example
+ * ```ts
+ * // Memory-efficient processing of large NDJSON files
+ * const ndjsonString = readLargeFile('logs.ndjson')
+ *
+ * for (const log of streamNdjson(ndjsonString, logSchema)) {
+ *   if (log.level === 'error') {
+ *     console.error('Error found:', log.message)
+ *   }
+ * }
+ *
+ * // Collect filtered results without loading everything
+ * const errors = [...streamNdjson(ndjson)]
+ *   .filter(log => log.level === 'error')
+ *
+ * // Early termination when condition is met
+ * for (const entry of streamNdjson(ndjson)) {
+ *   if (entry.id === targetId) {
+ *     processEntry(entry)
+ *     break // Stop processing remaining lines
+ *   }
+ * }
+ * ```
+ */
+export declare function streamNdjson(ndjson: string, schema?: Schema | undefined, options?: JsonParseOptions | undefined): Generator;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/validation/json-parser.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/validation/json-parser.js
new file mode 100644
index 00000000..cb2e9148
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/validation/json-parser.js
@@ -0,0 +1,127 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var json_parser_exports = {};
+__export(json_parser_exports, {
+  createJsonParser: () => createJsonParser,
+  parseJsonWithResult: () => parseJsonWithResult,
+  parseNdjson: () => parseNdjson,
+  safeJsonParse: () => safeJsonParse,
+  streamNdjson: () => streamNdjson,
+  tryJsonParse: () => tryJsonParse
+});
+module.exports = __toCommonJS(json_parser_exports);
+const DANGEROUS_KEYS = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
+function prototypePollutionReviver(key, value) {
+  if (DANGEROUS_KEYS.has(key)) {
+    throw new Error(
+      "JSON contains potentially malicious prototype pollution keys"
+    );
+  }
+  return value;
+}
+function safeJsonParse(jsonString, schema, options = {}) {
+  const { allowPrototype = false, maxSize = 10 * 1024 * 1024 } = options;
+  const byteLength = Buffer.byteLength(jsonString, "utf8");
+  if (byteLength > maxSize) {
+    throw new Error(
+      `JSON string exceeds maximum size limit${maxSize !== 10 * 1024 * 1024 ? ` of ${maxSize} bytes` : ""}`
+    );
+  }
+  let parsed;
+  try {
+    parsed = allowPrototype ? JSON.parse(jsonString) : JSON.parse(jsonString, prototypePollutionReviver);
+  } catch (error) {
+    throw new Error(`Failed to parse JSON: ${error}`);
+  }
+  if (schema) {
+    const result = schema.safeParse(parsed);
+    if (!result.success) {
+      const errors = result.error.issues.map(
+        (issue) => `${issue.path.join(".")}: ${issue.message}`
+      ).join(", ");
+      throw new Error(`Validation failed: ${errors}`);
+    }
+    return result.data;
+  }
+  return parsed;
+}
+function tryJsonParse(jsonString, schema, options) {
+  try {
+    return safeJsonParse(jsonString, schema, options);
+  } catch {
+    return void 0;
+  }
+}
+function parseJsonWithResult(jsonString, schema, options) {
+  try {
+    const data = safeJsonParse(jsonString, schema, options);
+    return { success: true, data };
+  } catch (error) {
+    const message = error instanceof Error ? error.message : "Unknown error";
+    return { success: false, error: message };
+  }
+}
+function createJsonParser(schema, defaultOptions) {
+  return (jsonString, options) => {
+    return safeJsonParse(jsonString, schema, { ...defaultOptions, ...options });
+  };
+}
+function parseNdjson(ndjson, schema, options) {
+  const results = [];
+  const lines = ndjson.split(/\r?\n/);
+  for (let i = 0; i < lines.length; i++) {
+    const line = lines[i]?.trim();
+    if (!line || line === "") {
+      continue;
+    }
+    try {
+      const parsed = safeJsonParse(line, schema, options);
+      results.push(parsed);
+    } catch (error) {
+      const message = error instanceof Error ? error.message : String(error);
+      throw new Error(`Failed to parse NDJSON at line ${i + 1}: ${message}`);
+    }
+  }
+  return results;
+}
+function* streamNdjson(ndjson, schema, options) {
+  const lines = ndjson.split(/\r?\n/);
+  for (let i = 0; i < lines.length; i++) {
+    const line = lines[i]?.trim();
+    if (!line || line === "") {
+      continue;
+    }
+    try {
+      yield safeJsonParse(line, schema, options);
+    } catch (error) {
+      const message = error instanceof Error ? error.message : String(error);
+      throw new Error(`Failed to parse NDJSON at line ${i + 1}: ${message}`);
+    }
+  }
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  createJsonParser,
+  parseJsonWithResult,
+  parseNdjson,
+  safeJsonParse,
+  streamNdjson,
+  tryJsonParse
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/validation/types.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/validation/types.d.ts
new file mode 100644
index 00000000..e7af718c
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/validation/types.d.ts
@@ -0,0 +1,142 @@
+/**
+ * @fileoverview Validation type definitions.
+ * Provides core types for schema validation and JSON parsing with security features.
+ */
+/**
+ * Result of a schema validation operation.
+ * Contains either successful parsed data or error information.
+ *
+ * @template T - The expected type of the parsed data
+ *
+ * @example
+ * ```ts
+ * const result: ParseResult = schema.safeParse(data)
+ * if (result.success) {
+ *   console.log(result.data) // User object
+ * } else {
+ *   console.error(result.error) // Error details
+ * }
+ * ```
+ */
+export interface ParseResult {
+    /** Indicates whether parsing was successful */
+    success: boolean;
+    /** Parsed and validated data (only present when `success` is `true`) */
+    data?: T | undefined;
+    /** Error information (only present when `success` is `false`) */
+    error?: any;
+}
+/**
+ * Base schema interface compatible with Zod and similar validation libraries.
+ * Provides both safe and throwing parsing methods.
+ *
+ * @template T - The expected output type after validation
+ *
+ * @example
+ * ```ts
+ * import { z } from 'zod'
+ *
+ * const userSchema = z.object({
+ *   name: z.string(),
+ *   age: z.number()
+ * })
+ *
+ * // Schema satisfies this interface
+ * const schema: Schema = userSchema
+ * const result = schema.safeParse({ name: 'Alice', age: 30 })
+ * ```
+ */
+export interface Schema {
+    /**
+     * Safely parse data without throwing errors.
+     * Returns a result object indicating success or failure.
+     *
+     * @param data - The data to validate
+     * @returns Parse result with success flag and data or error
+     */
+    safeParse(data: any): ParseResult;
+    /**
+     * Parse data and throw an error if validation fails.
+     * Use this when you want to fail fast on invalid data.
+     *
+     * @param data - The data to validate
+     * @returns The validated and parsed data
+     * @throws {Error} When validation fails
+     */
+    parse(data: any): T;
+    /**
+     * Optional schema name for debugging and error messages.
+     * Useful for identifying which schema failed in complex validation chains.
+     */
+    _name?: string | undefined;
+}
+/**
+ * Options for configuring JSON parsing behavior with security controls.
+ *
+ * @example
+ * ```ts
+ * const options: JsonParseOptions = {
+ *   maxSize: 1024 * 1024, // 1MB limit
+ *   allowPrototype: false // Block prototype pollution
+ * }
+ * ```
+ */
+export interface JsonParseOptions {
+    /**
+     * Allow dangerous prototype pollution keys (`__proto__`, `constructor`, `prototype`).
+     * Set to `true` only if you trust the JSON source completely.
+     *
+     * @default false
+     *
+     * @example
+     * ```ts
+     * // Will throw error by default
+     * safeJsonParse('{"__proto__": {"polluted": true}}')
+     *
+     * // Allows the parse (dangerous!)
+     * safeJsonParse('{"__proto__": {"polluted": true}}', undefined, {
+     *   allowPrototype: true
+     * })
+     * ```
+     */
+    allowPrototype?: boolean | undefined;
+    /**
+     * Maximum allowed size of JSON string in bytes.
+     * Prevents memory exhaustion from extremely large payloads.
+     *
+     * @default 10_485_760 (10 MB)
+     *
+     * @example
+     * ```ts
+     * // Limit to 1KB
+     * safeJsonParse(jsonString, undefined, { maxSize: 1024 })
+     * ```
+     */
+    maxSize?: number | undefined;
+}
+/**
+ * Discriminated union type for JSON parsing results.
+ * Enables type-safe handling of success and failure cases.
+ *
+ * @template T - The expected type of the parsed data
+ *
+ * @example
+ * ```ts
+ * const result: JsonParseResult = parseJsonWithResult(jsonString)
+ *
+ * if (result.success) {
+ *   // TypeScript knows result.data is available
+ *   console.log(result.data.name)
+ * } else {
+ *   // TypeScript knows result.error is available
+ *   console.error(result.error)
+ * }
+ * ```
+ */
+export type JsonParseResult = {
+    success: true;
+    data: T;
+} | {
+    success: false;
+    error: string;
+};
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/validation/types.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/validation/types.js
new file mode 100644
index 00000000..4af3a3ea
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/validation/types.js
@@ -0,0 +1,17 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var types_exports = {};
+module.exports = __toCommonJS(types_exports);
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/versions.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/versions.d.ts
new file mode 100644
index 00000000..2ced9893
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/versions.d.ts
@@ -0,0 +1,206 @@
+/**
+ * Coerce a version string to valid semver format.
+ *
+ * @example
+ * ```typescript
+ * coerceVersion('1.2')   // '1.2.0'
+ * coerceVersion('v3')    // '3.0.0'
+ * coerceVersion('abc')   // undefined
+ * ```
+ */
+export declare function coerceVersion(version: string): string | undefined;
+/**
+ * Compare two semantic version strings.
+ * @returns -1 if v1 < v2, 0 if v1 === v2, 1 if v1 > v2, or undefined if invalid.
+ *
+ * @example
+ * ```typescript
+ * compareVersions('1.0.0', '2.0.0') // -1
+ * compareVersions('1.0.0', '1.0.0') // 0
+ * compareVersions('2.0.0', '1.0.0') // 1
+ * ```
+ */
+export declare function compareVersions(v1: string, v2: string): -1 | 0 | 1 | undefined;
+/**
+ * Get all versions from an array that satisfy a semver range.
+ *
+ * @example
+ * ```typescript
+ * filterVersions(['1.0.0', '1.5.0', '2.0.0'], '>=1.0.0 <2.0.0')
+ * // ['1.0.0', '1.5.0']
+ * ```
+ */
+export declare function filterVersions(versions: string[], range: string): string[];
+/**
+ * Get the major version number from a version string.
+ *
+ * @example
+ * ```typescript
+ * getMajorVersion('3.2.1') // 3
+ * ```
+ */
+export declare function getMajorVersion(version: string): number | undefined;
+/**
+ * Get the minor version number from a version string.
+ *
+ * @example
+ * ```typescript
+ * getMinorVersion('3.2.1') // 2
+ * ```
+ */
+export declare function getMinorVersion(version: string): number | undefined;
+/**
+ * Get the patch version number from a version string.
+ *
+ * @example
+ * ```typescript
+ * getPatchVersion('3.2.1') // 1
+ * ```
+ */
+export declare function getPatchVersion(version: string): number | undefined;
+/**
+ * Increment a version by the specified release type.
+ *
+ * @example
+ * ```typescript
+ * incrementVersion('1.2.3', 'patch') // '1.2.4'
+ * incrementVersion('1.2.3', 'minor') // '1.3.0'
+ * incrementVersion('1.2.3', 'major') // '2.0.0'
+ * ```
+ */
+export declare function incrementVersion(version: string, release: 'major' | 'minor' | 'patch' | 'premajor' | 'preminor' | 'prepatch' | 'prerelease', identifier?: string | undefined): string | undefined;
+/**
+ * Check if version1 equals version2.
+ *
+ * @example
+ * ```typescript
+ * isEqual('1.0.0', '1.0.0') // true
+ * isEqual('1.0.0', '2.0.0') // false
+ * ```
+ */
+export declare function isEqual(version1: string, version2: string): boolean;
+/**
+ * Check if version1 is greater than version2.
+ *
+ * @example
+ * ```typescript
+ * isGreaterThan('2.0.0', '1.0.0') // true
+ * isGreaterThan('1.0.0', '2.0.0') // false
+ * ```
+ */
+export declare function isGreaterThan(version1: string, version2: string): boolean;
+/**
+ * Check if version1 is greater than or equal to version2.
+ *
+ * @example
+ * ```typescript
+ * isGreaterThanOrEqual('2.0.0', '1.0.0') // true
+ * isGreaterThanOrEqual('1.0.0', '1.0.0') // true
+ * ```
+ */
+export declare function isGreaterThanOrEqual(version1: string, version2: string): boolean;
+/**
+ * Check if version1 is less than version2.
+ *
+ * @example
+ * ```typescript
+ * isLessThan('1.0.0', '2.0.0') // true
+ * isLessThan('2.0.0', '1.0.0') // false
+ * ```
+ */
+export declare function isLessThan(version1: string, version2: string): boolean;
+/**
+ * Check if version1 is less than or equal to version2.
+ *
+ * @example
+ * ```typescript
+ * isLessThanOrEqual('1.0.0', '2.0.0') // true
+ * isLessThanOrEqual('1.0.0', '1.0.0') // true
+ * ```
+ */
+export declare function isLessThanOrEqual(version1: string, version2: string): boolean;
+/**
+ * Validate if a string is a valid semantic version.
+ *
+ * @example
+ * ```typescript
+ * isValidVersion('1.2.3') // true
+ * isValidVersion('abc')   // false
+ * ```
+ */
+export declare function isValidVersion(version: string): boolean;
+/**
+ * Get the highest version from an array of versions.
+ *
+ * @example
+ * ```typescript
+ * maxVersion(['1.0.0', '2.0.0', '1.5.0']) // '2.0.0'
+ * ```
+ */
+export declare function maxVersion(versions: string[]): string | undefined;
+/**
+ * Get the lowest version from an array of versions.
+ *
+ * @example
+ * ```typescript
+ * minVersion(['1.0.0', '2.0.0', '1.5.0']) // '1.0.0'
+ * ```
+ */
+export declare function minVersion(versions: string[]): string | undefined;
+/**
+ * Parse a version string and return major, minor, patch components.
+ *
+ * @example
+ * ```typescript
+ * parseVersion('1.2.3')
+ * // { major: 1, minor: 2, patch: 3, prerelease: [], build: [] }
+ * ```
+ */
+export declare function parseVersion(version: string): {
+    major: number;
+    minor: number;
+    patch: number;
+    prerelease: ReadonlyArray;
+    build: readonly string[];
+} | undefined;
+/**
+ * Check if a version satisfies a semver range.
+ *
+ * @example
+ * ```typescript
+ * satisfiesVersion('1.5.0', '>=1.0.0 <2.0.0') // true
+ * satisfiesVersion('3.0.0', '>=1.0.0 <2.0.0') // false
+ * ```
+ */
+export declare function satisfiesVersion(version: string, range: string): boolean;
+/**
+ * Sort versions in ascending order.
+ *
+ * @example
+ * ```typescript
+ * sortVersions(['2.0.0', '1.0.0', '1.5.0'])
+ * // ['1.0.0', '1.5.0', '2.0.0']
+ * ```
+ */
+export declare function sortVersions(versions: string[]): string[];
+/**
+ * Sort versions in descending order.
+ *
+ * @example
+ * ```typescript
+ * sortVersionsDesc(['1.0.0', '2.0.0', '1.5.0'])
+ * // ['2.0.0', '1.5.0', '1.0.0']
+ * ```
+ */
+export declare function sortVersionsDesc(versions: string[]): string[];
+/**
+ * Get the difference between two versions.
+ *
+ * @example
+ * ```typescript
+ * versionDiff('1.0.0', '2.0.0') // 'major'
+ * versionDiff('1.0.0', '1.1.0') // 'minor'
+ * versionDiff('1.0.0', '1.0.1') // 'patch'
+ * ```
+ */
+export declare function versionDiff(version1: string, version2: string): 'major' | 'premajor' | 'minor' | 'preminor' | 'patch' | 'prepatch' | 'prerelease' | 'release' | undefined;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/versions.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/versions.js
new file mode 100644
index 00000000..f88c2785
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/versions.js
@@ -0,0 +1,175 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var versions_exports = {};
+__export(versions_exports, {
+  coerceVersion: () => coerceVersion,
+  compareVersions: () => compareVersions,
+  filterVersions: () => filterVersions,
+  getMajorVersion: () => getMajorVersion,
+  getMinorVersion: () => getMinorVersion,
+  getPatchVersion: () => getPatchVersion,
+  incrementVersion: () => incrementVersion,
+  isEqual: () => isEqual,
+  isGreaterThan: () => isGreaterThan,
+  isGreaterThanOrEqual: () => isGreaterThanOrEqual,
+  isLessThan: () => isLessThan,
+  isLessThanOrEqual: () => isLessThanOrEqual,
+  isValidVersion: () => isValidVersion,
+  maxVersion: () => maxVersion,
+  minVersion: () => minVersion,
+  parseVersion: () => parseVersion,
+  satisfiesVersion: () => satisfiesVersion,
+  sortVersions: () => sortVersions,
+  sortVersionsDesc: () => sortVersionsDesc,
+  versionDiff: () => versionDiff
+});
+module.exports = __toCommonJS(versions_exports);
+let _semver;
+function getSemver() {
+  if (_semver === void 0) {
+    _semver = require("./external/semver.js");
+  }
+  return _semver;
+}
+function coerceVersion(version) {
+  const semver = getSemver();
+  const coerced = semver.coerce(version);
+  return coerced?.version;
+}
+function compareVersions(v1, v2) {
+  try {
+    const semver = getSemver();
+    return semver.compare(v1, v2);
+  } catch {
+    return void 0;
+  }
+}
+function filterVersions(versions, range) {
+  const semver = getSemver();
+  return versions.filter((v) => semver.satisfies(v, range));
+}
+function getMajorVersion(version) {
+  const semver = getSemver();
+  const parsed = semver.parse(version);
+  return parsed?.major;
+}
+function getMinorVersion(version) {
+  const semver = getSemver();
+  const parsed = semver.parse(version);
+  return parsed?.minor;
+}
+function getPatchVersion(version) {
+  const semver = getSemver();
+  const parsed = semver.parse(version);
+  return parsed?.patch;
+}
+function incrementVersion(version, release, identifier) {
+  const semver = getSemver();
+  return semver.inc(version, release, identifier) || void 0;
+}
+function isEqual(version1, version2) {
+  const semver = getSemver();
+  return semver.eq(version1, version2);
+}
+function isGreaterThan(version1, version2) {
+  const semver = getSemver();
+  return semver.gt(version1, version2);
+}
+function isGreaterThanOrEqual(version1, version2) {
+  const semver = getSemver();
+  return semver.gte(version1, version2);
+}
+function isLessThan(version1, version2) {
+  const semver = getSemver();
+  return semver.lt(version1, version2);
+}
+function isLessThanOrEqual(version1, version2) {
+  const semver = getSemver();
+  return semver.lte(version1, version2);
+}
+function isValidVersion(version) {
+  const semver = getSemver();
+  return semver.valid(version) !== null;
+}
+function maxVersion(versions) {
+  const semver = getSemver();
+  return semver.maxSatisfying(versions, "*") || void 0;
+}
+function minVersion(versions) {
+  const semver = getSemver();
+  return semver.minSatisfying(versions, "*") || void 0;
+}
+function parseVersion(version) {
+  const semver = getSemver();
+  const parsed = semver.parse(version);
+  if (!parsed) {
+    return void 0;
+  }
+  return {
+    major: parsed.major,
+    minor: parsed.minor,
+    patch: parsed.patch,
+    prerelease: parsed.prerelease,
+    build: parsed.build
+  };
+}
+function satisfiesVersion(version, range) {
+  const semver = getSemver();
+  return semver.satisfies(version, range);
+}
+function sortVersions(versions) {
+  const semver = getSemver();
+  return semver.sort([...versions]);
+}
+function sortVersionsDesc(versions) {
+  const semver = getSemver();
+  return semver.rsort([...versions]);
+}
+function versionDiff(version1, version2) {
+  try {
+    const semver = getSemver();
+    return semver.diff(version1, version2) || void 0;
+  } catch {
+    return void 0;
+  }
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  coerceVersion,
+  compareVersions,
+  filterVersions,
+  getMajorVersion,
+  getMinorVersion,
+  getPatchVersion,
+  incrementVersion,
+  isEqual,
+  isGreaterThan,
+  isGreaterThanOrEqual,
+  isLessThan,
+  isLessThanOrEqual,
+  isValidVersion,
+  maxVersion,
+  minVersion,
+  parseVersion,
+  satisfiesVersion,
+  sortVersions,
+  sortVersionsDesc,
+  versionDiff
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/words.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/words.d.ts
new file mode 100644
index 00000000..e6ea2fdd
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/words.d.ts
@@ -0,0 +1,42 @@
+/**
+ * @fileoverview Word manipulation utilities for capitalization and formatting.
+ * Provides text transformation functions for consistent word processing.
+ */
+/**
+ * Capitalize the first letter of a word.
+ *
+ * @example
+ * ```typescript
+ * capitalize('hello')  // 'Hello'
+ * capitalize('WORLD')  // 'World'
+ * capitalize('')       // ''
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function capitalize(word: string): string;
+/**
+ * Determine the appropriate article (a/an) for a word.
+ *
+ * @example
+ * ```typescript
+ * determineArticle('apple')   // 'an'
+ * determineArticle('banana')  // 'a'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function determineArticle(word: string): string;
+export interface PluralizeOptions {
+    count?: number;
+}
+/**
+ * Pluralize a word based on count.
+ *
+ * @example
+ * ```typescript
+ * pluralize('file')               // 'file'
+ * pluralize('file', { count: 3 }) // 'files'
+ * pluralize('file', { count: 0 }) // 'files'
+ * ```
+ */
+/*@__NO_SIDE_EFFECTS__*/
+export declare function pluralize(word: string, options?: PluralizeOptions | undefined): string;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/words.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/words.js
new file mode 100644
index 00000000..59a94787
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/words.js
@@ -0,0 +1,52 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var words_exports = {};
+__export(words_exports, {
+  capitalize: () => capitalize,
+  determineArticle: () => determineArticle,
+  pluralize: () => pluralize
+});
+module.exports = __toCommonJS(words_exports);
+// @__NO_SIDE_EFFECTS__
+function capitalize(word) {
+  const { length } = word;
+  if (length === 0) {
+    return word;
+  }
+  if (length === 1) {
+    return word.toUpperCase();
+  }
+  return `${word.charAt(0).toUpperCase()}${word.slice(1).toLowerCase()}`;
+}
+// @__NO_SIDE_EFFECTS__
+function determineArticle(word) {
+  return /^[aeiou]/.test(word) ? "an" : "a";
+}
+// @__NO_SIDE_EFFECTS__
+function pluralize(word, options) {
+  const { count = 1 } = { __proto__: null, ...options };
+  return count === 1 ? word : `${word}s`;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  capitalize,
+  determineArticle,
+  pluralize
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/zod.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/zod.d.ts
new file mode 100644
index 00000000..d7b5bf6e
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/zod.d.ts
@@ -0,0 +1,5 @@
+/**
+ * @fileoverview Zod schema validation library wrapper for type-safe runtime validation.
+ * Provides access to zod's schema builder through the z object.
+ */
+export { z } from './external/zod';
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/zod.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/zod.js
new file mode 100644
index 00000000..f1fcda04
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/dist/zod.js
@@ -0,0 +1,29 @@
+"use strict";
+/* Socket Lib - Built with esbuild */
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var zod_exports = {};
+__export(zod_exports, {
+  z: () => import_zod.z
+});
+module.exports = __toCommonJS(zod_exports);
+var import_zod = require("./external/zod");
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  z
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/package.json b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/package.json
new file mode 100644
index 00000000..b9e602ba
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/lib/package.json
@@ -0,0 +1,798 @@
+{
+  "name": "@socketsecurity/lib",
+  "version": "5.18.2",
+  "packageManager": "pnpm@11.0.0-rc.0",
+  "license": "MIT",
+  "description": "Core utilities and infrastructure for Socket.dev security tools",
+  "keywords": [
+    "Socket.dev",
+    "security",
+    "utilities",
+    "infrastructure"
+  ],
+  "homepage": "https://github.com/SocketDev/socket-lib",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/SocketDev/socket-lib.git"
+  },
+  "author": {
+    "name": "Socket Inc",
+    "email": "eng@socket.dev",
+    "url": "https://socket.dev"
+  },
+  "browser": {
+    "_http_agent": false,
+    "_http_client": false,
+    "_http_common": false,
+    "_http_incoming": false,
+    "_http_outgoing": false,
+    "_http_server": false,
+    "_stream_duplex": false,
+    "_stream_passthrough": false,
+    "_stream_readable": false,
+    "_stream_transform": false,
+    "_stream_wrap": false,
+    "_stream_writable": false,
+    "_tls_common": false,
+    "_tls_wrap": false,
+    "assert": false,
+    "assert/strict": false,
+    "async_hooks": false,
+    "buffer": false,
+    "child_process": false,
+    "cluster": false,
+    "console": false,
+    "constants": false,
+    "crypto": false,
+    "dgram": false,
+    "diagnostics_channel": false,
+    "dns": false,
+    "dns/promises": false,
+    "domain": false,
+    "events": false,
+    "fs": false,
+    "fs/promises": false,
+    "http": false,
+    "http2": false,
+    "https": false,
+    "inspector": false,
+    "inspector/promises": false,
+    "module": false,
+    "net": false,
+    "os": false,
+    "path": false,
+    "path/posix": false,
+    "path/win32": false,
+    "perf_hooks": false,
+    "process": false,
+    "punycode": false,
+    "querystring": false,
+    "readline": false,
+    "readline/promises": false,
+    "repl": false,
+    "stream": false,
+    "stream/consumers": false,
+    "stream/promises": false,
+    "stream/web": false,
+    "string_decoder": false,
+    "sys": false,
+    "timers": false,
+    "timers/promises": false,
+    "tls": false,
+    "trace_events": false,
+    "tty": false,
+    "url": false,
+    "util": false,
+    "util/types": false,
+    "v8": false,
+    "vm": false,
+    "wasi": false,
+    "worker_threads": false,
+    "zlib": false
+  },
+  "exports": {
+    "./abort": {
+      "types": "./dist/abort.d.ts",
+      "default": "./dist/abort.js"
+    },
+    "./agent": {
+      "types": "./dist/agent.d.ts",
+      "default": "./dist/agent.js"
+    },
+    "./ansi": {
+      "types": "./dist/ansi.d.ts",
+      "default": "./dist/ansi.js"
+    },
+    "./archives": {
+      "types": "./dist/archives.d.ts",
+      "default": "./dist/archives.js"
+    },
+    "./argv/flags": {
+      "types": "./dist/argv/flags.d.ts",
+      "default": "./dist/argv/flags.js"
+    },
+    "./argv/parse": {
+      "types": "./dist/argv/parse.d.ts",
+      "default": "./dist/argv/parse.js"
+    },
+    "./arrays": {
+      "types": "./dist/arrays.d.ts",
+      "default": "./dist/arrays.js"
+    },
+    "./bin": {
+      "types": "./dist/bin.d.ts",
+      "default": "./dist/bin.js"
+    },
+    "./cacache": {
+      "types": "./dist/cacache.d.ts",
+      "default": "./dist/cacache.js"
+    },
+    "./cache-with-ttl": {
+      "types": "./dist/cache-with-ttl.d.ts",
+      "default": "./dist/cache-with-ttl.js"
+    },
+    "./colors": {
+      "types": "./dist/colors.d.ts",
+      "default": "./dist/colors.js"
+    },
+    "./constants/agents": {
+      "types": "./dist/constants/agents.d.ts",
+      "default": "./dist/constants/agents.js"
+    },
+    "./constants/core": {
+      "types": "./dist/constants/core.d.ts",
+      "default": "./dist/constants/core.js"
+    },
+    "./constants/encoding": {
+      "types": "./dist/constants/encoding.d.ts",
+      "default": "./dist/constants/encoding.js"
+    },
+    "./constants/github": {
+      "types": "./dist/constants/github.d.ts",
+      "default": "./dist/constants/github.js"
+    },
+    "./constants/licenses": {
+      "types": "./dist/constants/licenses.d.ts",
+      "default": "./dist/constants/licenses.js"
+    },
+    "./constants/lifecycle-script-names": {
+      "types": "./dist/constants/lifecycle-script-names.d.ts",
+      "default": "./dist/constants/lifecycle-script-names.js"
+    },
+    "./constants/maintained-node-versions": {
+      "types": "./dist/constants/maintained-node-versions.d.ts",
+      "default": "./dist/constants/maintained-node-versions.js"
+    },
+    "./constants/node": {
+      "types": "./dist/constants/node.d.ts",
+      "default": "./dist/constants/node.js"
+    },
+    "./constants/package-default-node-range": {
+      "types": "./dist/constants/package-default-node-range.d.ts",
+      "default": "./dist/constants/package-default-node-range.js"
+    },
+    "./constants/package-default-socket-categories": {
+      "types": "./dist/constants/package-default-socket-categories.d.ts",
+      "default": "./dist/constants/package-default-socket-categories.js"
+    },
+    "./constants/packages": {
+      "types": "./dist/constants/packages.d.ts",
+      "default": "./dist/constants/packages.js"
+    },
+    "./constants/platform": {
+      "types": "./dist/constants/platform.d.ts",
+      "default": "./dist/constants/platform.js"
+    },
+    "./constants/process": {
+      "types": "./dist/constants/process.d.ts",
+      "default": "./dist/constants/process.js"
+    },
+    "./constants/socket": {
+      "types": "./dist/constants/socket.d.ts",
+      "default": "./dist/constants/socket.js"
+    },
+    "./constants/testing": {
+      "types": "./dist/constants/testing.d.ts",
+      "default": "./dist/constants/testing.js"
+    },
+    "./constants/time": {
+      "types": "./dist/constants/time.d.ts",
+      "default": "./dist/constants/time.js"
+    },
+    "./constants/typescript": {
+      "types": "./dist/constants/typescript.d.ts",
+      "default": "./dist/constants/typescript.js"
+    },
+    "./cover/code": {
+      "types": "./dist/cover/code.d.ts",
+      "default": "./dist/cover/code.js"
+    },
+    "./cover/formatters": {
+      "types": "./dist/cover/formatters.d.ts",
+      "default": "./dist/cover/formatters.js"
+    },
+    "./cover/type": {
+      "types": "./dist/cover/type.d.ts",
+      "default": "./dist/cover/type.js"
+    },
+    "./cover/types": {
+      "types": "./dist/cover/types.d.ts",
+      "default": "./dist/cover/types.js"
+    },
+    "./debug": {
+      "types": "./dist/debug.d.ts",
+      "default": "./dist/debug.js"
+    },
+    "./dlx/binary": {
+      "types": "./dist/dlx/binary.d.ts",
+      "default": "./dist/dlx/binary.js"
+    },
+    "./dlx/cache": {
+      "types": "./dist/dlx/cache.d.ts",
+      "default": "./dist/dlx/cache.js"
+    },
+    "./dlx/detect": {
+      "types": "./dist/dlx/detect.d.ts",
+      "default": "./dist/dlx/detect.js"
+    },
+    "./dlx/dir": {
+      "types": "./dist/dlx/dir.d.ts",
+      "default": "./dist/dlx/dir.js"
+    },
+    "./dlx/manifest": {
+      "types": "./dist/dlx/manifest.d.ts",
+      "default": "./dist/dlx/manifest.js"
+    },
+    "./dlx/package": {
+      "types": "./dist/dlx/package.d.ts",
+      "default": "./dist/dlx/package.js"
+    },
+    "./dlx/packages": {
+      "types": "./dist/dlx/packages.d.ts",
+      "default": "./dist/dlx/packages.js"
+    },
+    "./dlx/paths": {
+      "types": "./dist/dlx/paths.d.ts",
+      "default": "./dist/dlx/paths.js"
+    },
+    "./effects/pulse-frames": {
+      "types": "./dist/effects/pulse-frames.d.ts",
+      "default": "./dist/effects/pulse-frames.js"
+    },
+    "./effects/text-shimmer": {
+      "types": "./dist/effects/text-shimmer.d.ts",
+      "default": "./dist/effects/text-shimmer.js"
+    },
+    "./effects/types": {
+      "types": "./dist/effects/types.d.ts",
+      "default": "./dist/effects/types.js"
+    },
+    "./effects/ultra": {
+      "types": "./dist/effects/ultra.d.ts",
+      "default": "./dist/effects/ultra.js"
+    },
+    "./env": {
+      "types": "./dist/env.d.ts",
+      "default": "./dist/env.js"
+    },
+    "./env/ci": {
+      "types": "./dist/env/ci.d.ts",
+      "default": "./dist/env/ci.js"
+    },
+    "./env/debug": {
+      "types": "./dist/env/debug.d.ts",
+      "default": "./dist/env/debug.js"
+    },
+    "./env/github": {
+      "types": "./dist/env/github.d.ts",
+      "default": "./dist/env/github.js"
+    },
+    "./env/helpers": {
+      "types": "./dist/env/helpers.d.ts",
+      "default": "./dist/env/helpers.js"
+    },
+    "./env/home": {
+      "types": "./dist/env/home.d.ts",
+      "default": "./dist/env/home.js"
+    },
+    "./env/locale": {
+      "types": "./dist/env/locale.d.ts",
+      "default": "./dist/env/locale.js"
+    },
+    "./env/node-auth-token": {
+      "types": "./dist/env/node-auth-token.d.ts",
+      "default": "./dist/env/node-auth-token.js"
+    },
+    "./env/node-env": {
+      "types": "./dist/env/node-env.d.ts",
+      "default": "./dist/env/node-env.js"
+    },
+    "./env/npm": {
+      "types": "./dist/env/npm.d.ts",
+      "default": "./dist/env/npm.js"
+    },
+    "./env/package-manager": {
+      "types": "./dist/env/package-manager.d.ts",
+      "default": "./dist/env/package-manager.js"
+    },
+    "./env/path": {
+      "types": "./dist/env/path.d.ts",
+      "default": "./dist/env/path.js"
+    },
+    "./env/pre-commit": {
+      "types": "./dist/env/pre-commit.d.ts",
+      "default": "./dist/env/pre-commit.js"
+    },
+    "./env/rewire": {
+      "types": "./dist/env/rewire.d.ts",
+      "default": "./dist/env/rewire.js"
+    },
+    "./env/shell": {
+      "types": "./dist/env/shell.d.ts",
+      "default": "./dist/env/shell.js"
+    },
+    "./env/socket": {
+      "types": "./dist/env/socket.d.ts",
+      "default": "./dist/env/socket.js"
+    },
+    "./env/socket-cli": {
+      "types": "./dist/env/socket-cli.d.ts",
+      "default": "./dist/env/socket-cli.js"
+    },
+    "./env/socket-cli-shadow": {
+      "types": "./dist/env/socket-cli-shadow.d.ts",
+      "default": "./dist/env/socket-cli-shadow.js"
+    },
+    "./env/temp-dir": {
+      "types": "./dist/env/temp-dir.d.ts",
+      "default": "./dist/env/temp-dir.js"
+    },
+    "./env/term": {
+      "types": "./dist/env/term.d.ts",
+      "default": "./dist/env/term.js"
+    },
+    "./env/test": {
+      "types": "./dist/env/test.d.ts",
+      "default": "./dist/env/test.js"
+    },
+    "./env/windows": {
+      "types": "./dist/env/windows.d.ts",
+      "default": "./dist/env/windows.js"
+    },
+    "./env/xdg": {
+      "types": "./dist/env/xdg.d.ts",
+      "default": "./dist/env/xdg.js"
+    },
+    "./errors": {
+      "types": "./dist/errors.d.ts",
+      "default": "./dist/errors.js"
+    },
+    "./fs": {
+      "types": "./dist/fs.d.ts",
+      "default": "./dist/fs.js"
+    },
+    "./functions": {
+      "types": "./dist/functions.d.ts",
+      "default": "./dist/functions.js"
+    },
+    "./git": {
+      "types": "./dist/git.d.ts",
+      "default": "./dist/git.js"
+    },
+    "./github": {
+      "types": "./dist/github.d.ts",
+      "default": "./dist/github.js"
+    },
+    "./globs": {
+      "types": "./dist/globs.d.ts",
+      "default": "./dist/globs.js"
+    },
+    "./http-request": {
+      "types": "./dist/http-request.d.ts",
+      "default": "./dist/http-request.js"
+    },
+    "./ipc": {
+      "types": "./dist/ipc.d.ts",
+      "default": "./dist/ipc.js"
+    },
+    "./json/edit": {
+      "types": "./dist/json/edit.d.ts",
+      "default": "./dist/json/edit.js"
+    },
+    "./json/format": {
+      "types": "./dist/json/format.d.ts",
+      "default": "./dist/json/format.js"
+    },
+    "./json/parse": {
+      "types": "./dist/json/parse.d.ts",
+      "default": "./dist/json/parse.js"
+    },
+    "./json/types": {
+      "types": "./dist/json/types.d.ts",
+      "default": "./dist/json/types.js"
+    },
+    "./links": {
+      "types": "./dist/links/index.d.ts",
+      "default": "./dist/links/index.js"
+    },
+    "./links/index": {
+      "types": "./dist/links/index.d.ts",
+      "default": "./dist/links/index.js"
+    },
+    "./logger": {
+      "types": "./dist/logger.d.ts",
+      "default": "./dist/logger.js"
+    },
+    "./memoization": {
+      "types": "./dist/memoization.d.ts",
+      "default": "./dist/memoization.js"
+    },
+    "./objects": {
+      "types": "./dist/objects.d.ts",
+      "default": "./dist/objects.js"
+    },
+    "./package-extensions": {
+      "types": "./dist/package-extensions.d.ts",
+      "default": "./dist/package-extensions.js"
+    },
+    "./packages": {
+      "types": "./dist/packages.d.ts",
+      "default": "./dist/packages.js"
+    },
+    "./packages/edit": {
+      "types": "./dist/packages/edit.d.ts",
+      "default": "./dist/packages/edit.js"
+    },
+    "./packages/exports": {
+      "types": "./dist/packages/exports.d.ts",
+      "default": "./dist/packages/exports.js"
+    },
+    "./packages/isolation": {
+      "types": "./dist/packages/isolation.d.ts",
+      "default": "./dist/packages/isolation.js"
+    },
+    "./packages/licenses": {
+      "types": "./dist/packages/licenses.d.ts",
+      "default": "./dist/packages/licenses.js"
+    },
+    "./packages/manifest": {
+      "types": "./dist/packages/manifest.d.ts",
+      "default": "./dist/packages/manifest.js"
+    },
+    "./packages/normalize": {
+      "types": "./dist/packages/normalize.d.ts",
+      "default": "./dist/packages/normalize.js"
+    },
+    "./packages/operations": {
+      "types": "./dist/packages/operations.d.ts",
+      "default": "./dist/packages/operations.js"
+    },
+    "./packages/provenance": {
+      "types": "./dist/packages/provenance.d.ts",
+      "default": "./dist/packages/provenance.js"
+    },
+    "./packages/specs": {
+      "types": "./dist/packages/specs.d.ts",
+      "default": "./dist/packages/specs.js"
+    },
+    "./packages/validation": {
+      "types": "./dist/packages/validation.d.ts",
+      "default": "./dist/packages/validation.js"
+    },
+    "./paths/dirnames": {
+      "types": "./dist/paths/dirnames.d.ts",
+      "default": "./dist/paths/dirnames.js"
+    },
+    "./paths/exts": {
+      "types": "./dist/paths/exts.d.ts",
+      "default": "./dist/paths/exts.js"
+    },
+    "./paths/filenames": {
+      "types": "./dist/paths/filenames.d.ts",
+      "default": "./dist/paths/filenames.js"
+    },
+    "./paths/globs": {
+      "types": "./dist/paths/globs.d.ts",
+      "default": "./dist/paths/globs.js"
+    },
+    "./paths/normalize": {
+      "types": "./dist/paths/normalize.d.ts",
+      "default": "./dist/paths/normalize.js"
+    },
+    "./paths/packages": {
+      "types": "./dist/paths/packages.d.ts",
+      "default": "./dist/paths/packages.js"
+    },
+    "./paths/rewire": {
+      "types": "./dist/paths/rewire.d.ts",
+      "default": "./dist/paths/rewire.js"
+    },
+    "./paths/socket": {
+      "types": "./dist/paths/socket.d.ts",
+      "default": "./dist/paths/socket.js"
+    },
+    "./performance": {
+      "types": "./dist/performance.d.ts",
+      "default": "./dist/performance.js"
+    },
+    "./process-lock": {
+      "types": "./dist/process-lock.d.ts",
+      "default": "./dist/process-lock.js"
+    },
+    "./promise-queue": {
+      "types": "./dist/promise-queue.d.ts",
+      "default": "./dist/promise-queue.js"
+    },
+    "./promises": {
+      "types": "./dist/promises.d.ts",
+      "default": "./dist/promises.js"
+    },
+    "./regexps": {
+      "types": "./dist/regexps.d.ts",
+      "default": "./dist/regexps.js"
+    },
+    "./releases/github": {
+      "types": "./dist/releases/github.d.ts",
+      "default": "./dist/releases/github.js"
+    },
+    "./releases/socket-btm": {
+      "types": "./dist/releases/socket-btm.d.ts",
+      "default": "./dist/releases/socket-btm.js"
+    },
+    "./sea": {
+      "types": "./dist/sea.d.ts",
+      "default": "./dist/sea.js"
+    },
+    "./shadow": {
+      "types": "./dist/shadow.d.ts",
+      "default": "./dist/shadow.js"
+    },
+    "./signal-exit": {
+      "types": "./dist/signal-exit.d.ts",
+      "default": "./dist/signal-exit.js"
+    },
+    "./sorts": {
+      "types": "./dist/sorts.d.ts",
+      "default": "./dist/sorts.js"
+    },
+    "./spawn": {
+      "types": "./dist/spawn.d.ts",
+      "default": "./dist/spawn.js"
+    },
+    "./spinner": {
+      "types": "./dist/spinner.d.ts",
+      "default": "./dist/spinner.js"
+    },
+    "./ssri": {
+      "types": "./dist/ssri.d.ts",
+      "default": "./dist/ssri.js"
+    },
+    "./stdio/clear": {
+      "types": "./dist/stdio/clear.d.ts",
+      "default": "./dist/stdio/clear.js"
+    },
+    "./stdio/divider": {
+      "types": "./dist/stdio/divider.d.ts",
+      "default": "./dist/stdio/divider.js"
+    },
+    "./stdio/footer": {
+      "types": "./dist/stdio/footer.d.ts",
+      "default": "./dist/stdio/footer.js"
+    },
+    "./stdio/header": {
+      "types": "./dist/stdio/header.d.ts",
+      "default": "./dist/stdio/header.js"
+    },
+    "./stdio/mask": {
+      "types": "./dist/stdio/mask.d.ts",
+      "default": "./dist/stdio/mask.js"
+    },
+    "./stdio/progress": {
+      "types": "./dist/stdio/progress.d.ts",
+      "default": "./dist/stdio/progress.js"
+    },
+    "./stdio/prompts": {
+      "types": "./dist/stdio/prompts.d.ts",
+      "default": "./dist/stdio/prompts.js"
+    },
+    "./stdio/stderr": {
+      "types": "./dist/stdio/stderr.d.ts",
+      "default": "./dist/stdio/stderr.js"
+    },
+    "./stdio/stdout": {
+      "types": "./dist/stdio/stdout.d.ts",
+      "default": "./dist/stdio/stdout.js"
+    },
+    "./streams": {
+      "types": "./dist/streams.d.ts",
+      "default": "./dist/streams.js"
+    },
+    "./strings": {
+      "types": "./dist/strings.d.ts",
+      "default": "./dist/strings.js"
+    },
+    "./suppress-warnings": {
+      "types": "./dist/suppress-warnings.d.ts",
+      "default": "./dist/suppress-warnings.js"
+    },
+    "./tables": {
+      "types": "./dist/tables.d.ts",
+      "default": "./dist/tables.js"
+    },
+    "./temporary-executor": {
+      "types": "./dist/temporary-executor.d.ts",
+      "default": "./dist/temporary-executor.js"
+    },
+    "./themes": {
+      "types": "./dist/themes/index.d.ts",
+      "default": "./dist/themes/index.js"
+    },
+    "./themes/context": {
+      "types": "./dist/themes/context.d.ts",
+      "default": "./dist/themes/context.js"
+    },
+    "./themes/index": {
+      "types": "./dist/themes/index.d.ts",
+      "default": "./dist/themes/index.js"
+    },
+    "./themes/themes": {
+      "types": "./dist/themes/themes.d.ts",
+      "default": "./dist/themes/themes.js"
+    },
+    "./themes/types": {
+      "types": "./dist/themes/types.d.ts",
+      "default": "./dist/themes/types.js"
+    },
+    "./themes/utils": {
+      "types": "./dist/themes/utils.d.ts",
+      "default": "./dist/themes/utils.js"
+    },
+    "./types": {
+      "types": "./dist/types.d.ts",
+      "default": "./dist/types.js"
+    },
+    "./url": {
+      "types": "./dist/url.d.ts",
+      "default": "./dist/url.js"
+    },
+    "./utils/get-ipc": {
+      "types": "./dist/utils/get-ipc.d.ts",
+      "default": "./dist/utils/get-ipc.js"
+    },
+    "./validation/json-parser": {
+      "types": "./dist/validation/json-parser.d.ts",
+      "default": "./dist/validation/json-parser.js"
+    },
+    "./validation/types": {
+      "types": "./dist/validation/types.d.ts",
+      "default": "./dist/validation/types.js"
+    },
+    "./versions": {
+      "types": "./dist/versions.d.ts",
+      "default": "./dist/versions.js"
+    },
+    "./words": {
+      "types": "./dist/words.d.ts",
+      "default": "./dist/words.js"
+    },
+    "./zod": {
+      "types": "./dist/zod.d.ts",
+      "default": "./dist/zod.js"
+    },
+    "./data/extensions.json": "./data/extensions.json",
+    "./package.json": "./package.json",
+    "./tsconfig.dts.json": "./tsconfig.dts.json",
+    "./tsconfig.json": "./tsconfig.json",
+    "./tsconfig.test.json": "./tsconfig.test.json"
+  },
+  "files": [
+    "dist",
+    "data/extensions.json",
+    "CHANGELOG.md"
+  ],
+  "engines": {
+    "node": ">=22",
+    "pnpm": ">=11.0.0-rc.0"
+  },
+  "sideEffects": false,
+  "scripts": {
+    "build": "node scripts/build/main.mjs",
+    "check": "node scripts/check.mjs",
+    "clean": "node scripts/build/clean.mjs",
+    "cover": "node scripts/test/cover.mjs",
+    "dev": "node scripts/build/main.mjs --watch",
+    "fix": "node scripts/fix.mjs",
+    "format": "oxfmt",
+    "format:check": "oxfmt --check",
+    "lint": "node scripts/lint.mjs",
+    "lint:oxlint": "oxlint .",
+    "lint:oxfmt": "oxfmt --check .",
+    "security": "agentshield scan && { command -v zizmor >/dev/null && zizmor .github/ || echo 'zizmor not installed — run pnpm run setup to install'; }",
+    "prepare": "husky",
+    "prepublishOnly": "pnpm run build",
+    "test": "node scripts/test/main.mjs",
+    "update": "node scripts/update.mjs"
+  },
+  "devDependencies": {
+    "@anthropic-ai/claude-code": "2.1.92",
+    "@babel/core": "7.28.4",
+    "@babel/parser": "7.28.4",
+    "@babel/traverse": "7.28.4",
+    "@babel/types": "7.28.4",
+    "ecc-agentshield": "1.4.0",
+    "@dotenvx/dotenvx": "1.49.0",
+    "@inquirer/checkbox": "4.3.1",
+    "@inquirer/confirm": "5.1.16",
+    "@inquirer/input": "4.2.2",
+    "@inquirer/password": "4.0.18",
+    "@inquirer/search": "3.1.1",
+    "@inquirer/select": "4.3.2",
+    "@npmcli/arborist": "9.1.4",
+    "@npmcli/package-json": "7.0.0",
+    "@npmcli/promise-spawn": "8.0.3",
+    "@socketregistry/is-unicode-supported": "1.0.5",
+    "@socketregistry/packageurl-js": "1.4.1",
+    "@socketregistry/yocto-spinner": "1.0.25",
+    "@socketsecurity/lib-stable": "npm:@socketsecurity/lib@5.18.1",
+    "@types/node": "24.9.2",
+    "@typescript/native-preview": "7.0.0-dev.20250920.1",
+    "@vitest/coverage-v8": "4.0.3",
+    "@vitest/ui": "4.0.3",
+    "@yarnpkg/core": "4.5.0",
+    "@yarnpkg/extensions": "2.0.6",
+    "adm-zip": "0.5.16",
+    "cacache": "20.0.1",
+    "debug": "4.4.3",
+    "del": "8.0.1",
+    "del-cli": "6.0.0",
+    "esbuild": "0.25.11",
+    "eslint-plugin-sort-destructure-keys": "2.0.0",
+    "fast-glob": "3.3.3",
+    "fast-sort": "3.4.1",
+    "get-east-asian-width": "1.3.0",
+    "globals": "16.4.0",
+    "has-flag": "5.0.1",
+    "husky": "9.1.7",
+    "libnpmexec": "10.2.3",
+    "libnpmpack": "9.0.9",
+    "lint-staged": "15.2.11",
+    "magic-string": "0.30.17",
+    "make-fetch-happen": "15.0.5",
+    "nock": "14.0.10",
+    "normalize-package-data": "8.0.0",
+    "npm-package-arg": "13.0.0",
+    "oxfmt": "^0.37.0",
+    "oxlint": "1.53.0",
+    "p-map": "7.0.4",
+    "pacote": "21.5.0",
+    "picomatch": "4.0.4",
+    "pony-cause": "2.1.11",
+    "semver": "7.7.2",
+    "signal-exit": "4.1.0",
+    "spdx-correct": "3.2.0",
+    "spdx-expression-parse": "4.0.0",
+    "streaming-iterables": "8.0.1",
+    "supports-color": "10.2.2",
+    "tar-fs": "3.1.2",
+    "tar-stream": "3.1.8",
+    "taze": "19.9.2",
+    "trash": "10.0.0",
+    "type-coverage": "2.29.7",
+    "typescript": "5.9.2",
+    "validate-npm-package-name": "6.0.2",
+    "vite-tsconfig-paths": "5.1.4",
+    "vitest": "4.0.3",
+    "which": "5.0.0",
+    "yargs-parser": "22.0.0",
+    "yoctocolors-cjs": "2.1.3",
+    "zod": "4.1.12"
+  },
+  "peerDependencies": {
+    "typescript": ">=5.0.0"
+  },
+  "peerDependenciesMeta": {
+    "typescript": {
+      "optional": true
+    }
+  }
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/CHANGELOG.md b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/CHANGELOG.md
new file mode 100644
index 00000000..30a50583
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/CHANGELOG.md
@@ -0,0 +1,899 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
+
+## [4.0.1](https://github.com/SocketDev/socket-sdk-js/releases/tag/v4.0.1) - 2026-04-14
+
+### Changed — build
+
+- Bundle `@socketsecurity/lib` and `form-data` into dist output, making the SDK a zero-runtime-dependency package
+- Stub heavy `@socketsecurity/lib` internals (npm-pack.js 2.5MB, pico-pack.js 260KB) and replace `mime-db` (212KB) with a minimal 3-entry lookup
+- dist/index.js: 3,897KB → 712KB (82% reduction)
+
+### Fixed
+
+- Strip `Authorization` header (case-insensitive) from public firewall API endpoint requests
+
+## [4.0.0](https://github.com/SocketDev/socket-sdk-js/releases/tag/v4.0.0) - 2026-04-06
+
+### Breaking Changes
+
+- **HTTP client refactored**: All HTTP methods (`createGetRequest`, `createDeleteRequest`, `createRequestWithJson`, `createUploadRequest`) now return `HttpResponse` from `@socketsecurity/lib/http-request` instead of Node.js `IncomingMessage`
+- **`ResponseError.response`**: Changed from `IncomingMessage` to `HttpResponse` — access status via `.status`/`.statusText` instead of `.statusCode`/`.statusMessage`
+- **Unified HTTP transport**: File uploads now use `httpRequest()` from `@socketsecurity/lib` — eliminated the dual `node:http`/`node:https` + `getResponse()` stack
+- **Trimmed public API surface**: Removed internal helpers from the main entry point:
+  - HTTP functions: `createDeleteRequest`, `createGetRequest`, `createRequestWithJson`, `getErrorResponseBody`, `getResponseJson`, `isResponseOk`, `reshapeArtifactForPublicPolicy`
+  - File upload functions: `createRequestBodyForFilepaths`, `createRequestBodyForJson`, `createUploadRequest`
+  - Utilities: `calculateWordSetSimilarity`, `filterRedundantCause`, `normalizeBaseUrl`, `promiseWithResolvers`, `queryToSearchParams`, `resolveAbsPaths`, `resolveBasePath`, `shouldOmitReason`
+  - Constants: `DEFAULT_USER_AGENT`, `httpAgentNames`, `publicPolicy`
+- **Removed exports**: `getHttpModule` and `getResponse` are fully removed (not just from index)
+- **Removed `PromiseQueue`**: The `PromiseQueue` class has been removed entirely
+- **Removed `getSupportedScanFiles()`**: Deprecated since 2023-01-15 — use `getSupportedFiles()` instead
+- **Removed `http2-wrapper` type dependency**: `Agent` type now uses `ClientHttp2Session` from native `node:http2`
+
+### Changed
+
+- Migrated HTTP internals to `@socketsecurity/lib/http-request` (`httpRequest`), reducing code duplication and consolidating response handling
+- Retry logic improved: all 4xx client errors now bail immediately (previously only 401/403)
+- New audit log action types: `CreateFirewallCustomRegistry`, `CreateFirewallDeploymentConfig`, `DeleteFirewallCustomRegistry`, `DeleteFirewallDeploymentConfig`, `UpdateFirewallCustomRegistry`, `UpdateFirewallDeploymentConfig`
+
+## [3.5.0](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.5.0) - 2026-04-03
+
+### Added
+
+- **checkMalware**: New API method for normalized malware detection across public and org tokens
+  - Public tokens use the firewall API with client-side `publicPolicy` filtering
+  - Org tokens use the batch PURL API with full server-assigned org policy
+  - Both paths return the same normalized `MalwareCheckResult` shape
+- New exported types: `MalwareCheckAlert`, `MalwareCheckPackage`, `MalwareCheckResult`, `MalwareCheckScore`
+- New audit log action types: `CreateTicket`, `DisconnectJiraIntegration`, `JiraIntegrationConnected`
+- New `alert-resolution` permission scope (list, create, read, delete)
+- New `workspace` parameter for `createOrgFullScan` package entries
+- New `SocketSBOMScore` schema for supply chain risk score breakdowns with formulas and components
+- New `skillPreExecution` alert type and policy action
+- Full scan `include_scores` and `include_scores_details` query parameters with `scores` ndjson event
+- Batch PURL `timeoutSec` parameter for scan result timeout control
+
+## [3.4.1](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.4.1) - 2026-03-12
+
+### Changed
+
+- Synced OpenAPI type definitions with latest API specification
+  - Improved documentation for Org Triage API query parameters and request fields
+- Updated `@socketsecurity/lib` to v5.8.1
+
+## [3.4.0](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.4.0) - 2026-03-11
+
+### Added
+
+- **listRepositories**: New `workspace` query parameter to filter repositories by workspace (when provided, only repos in that workspace are returned)
+- New audit log action types for OAuth refresh tokens and repository access rules:
+  - `CreateOauthRefreshToken` - Track OAuth refresh token creation
+  - `RotateOauthRefreshToken` - Track OAuth refresh token rotation
+  - `CreateRepoAccessRule` - Track repository access rule creation
+  - `UpdateRepoAccessRule` - Track repository access rule updates
+  - `DeleteRepoAccessRule` - Track repository access rule deletion
+
+### Changed
+
+- Synced OpenAPI type definitions with latest API specification
+
+## [3.3.1](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.3.1) - 2026-03-03
+
+### Changed
+
+- **createRepository**: Now requires `repoSlug` as second parameter with typed options including `workspace`, `visibility`, `homepage`, `archived`, `default_branch`, and `description`
+
+### Added
+
+- New API endpoints from OpenAPI sync: CSV/PDF export for full scans, delete triage alerts, new alert types
+
+## [3.3.0](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.3.0) - 2026-01-25
+
+### Added
+
+- New SDK convenience methods for OpenAPI v3.3.0 endpoints:
+  - `batchOrgPackageFetch(orgSlug, components, options)` - Organization-scoped PURL batch lookup with security policy label support
+  - `exportOpenVEX(orgSlug, id, options)` - Export vulnerability exploitability data as OpenVEX v0.2.0 documents (includes patch data and reachability analysis)
+  - `getOrgAlertFullScans(orgSlug, options)` - List full scans associated with specific alerts
+  - `rescanFullScan(orgSlug, fullScanId, options)` - Rescan existing full scans with shallow (policy reapplication) or deep (dependency resolution rerun) modes
+- Repository endpoints now support optional `workspace` parameter for workspace-scoped operations:
+  - `createRepository(orgSlug, params, { workspace })`
+  - `deleteRepository(orgSlug, repoSlug, { workspace })`
+  - `getRepository(orgSlug, repoSlug, { workspace })`
+  - `updateRepository(orgSlug, repoSlug, params, { workspace })`
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v5.5.3
+- TypeScript: Auto-generated strict types from OpenAPI schema for improved type safety
+- TypeScript: All optional properties now explicitly include `| undefined` for better null checking
+- Synced OpenAPI type definitions with latest API specification
+
+## [3.2.0](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.2.0) - 2025-12-08
+
+### Added
+
+- New API methods:
+  - `getOrgTelemetryConfig()` - Get organization telemetry configuration
+  - `updateOrgTelemetryConfig()` - Update organization telemetry configuration
+  - `getOrgWebhooksList()` - List organization webhooks
+  - `createOrgWebhook()` - Create organization webhook
+  - `getOrgWebhook()` - Get organization webhook details
+  - `updateOrgWebhook()` - Update organization webhook
+  - `deleteOrgWebhook()` - Delete organization webhook
+  - `getOrgAlertsList()` - List organization alerts
+  - `getOrgFixes()` - Get available vulnerability fixes for repositories or scans
+  - `createOrgFullScanFromArchive()` - Create full scan from archive file (.tar, .tar.gz/.tgz, or .zip)
+  - `downloadOrgFullScanFilesAsTar()` - Download full scan files as tarball to local filesystem
+- Per-endpoint TTL configuration: `cacheTtl` option accepts object with endpoint-specific TTL values (e.g., `{ default: 300_000, getIssues: 600_000 }`)
+- Request/response logging: `hooks` option with `onRequest(info)` and `onResponse(info)` callbacks for debugging and monitoring
+- PURL batch processing: `cachedResultsOnly` query parameter (return only cached results, skip new scans) and `summary` query parameter (include summary with counts of malformed, resolved, and not found PURLs) in `batchPackageFetch()` and `batchPackageStream()`
+- UTF-8 filename support: `uploadManifestFiles()`, `createFullScan()`, `createDependenciesSnapshot()`, and `createOrgFullScanFromArchive()` automatically handle international filenames (Japanese, Cyrillic, emoji, and other UTF-8 characters)
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v5.0.0
+- Synced with OpenAPI definition
+
+## [3.1.3](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.1.3) - 2025-11-04
+
+### Fixed
+
+- Updated OpenAPI type generation script to automatically preserve SDK v3 method name aliases during automated syncs
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v3.2.4
+
+## [3.1.2](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.1.2) - 2025-11-02
+
+### Fixed
+
+- Add type aliases in `operations` interface to map SDK v3 method names to OpenAPI operation names for TypeScript compatibility
+- Update `FileValidationCallback` to use `createFullScan` instead of `createOrgFullScan`
+
+## [3.1.1](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.1.1) - 2025-11-02
+
+### Fixed
+
+- Use standard `.js` extension for CommonJS output instead of `.mjs`
+- Remove `"type": "module"` from package.json to properly indicate CommonJS format
+
+## [3.1.0](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.1.0) - 2025-11-02
+
+### Fixed
+
+- Changed SDK output format from ESM to CJS to resolve Node.js built-in module bundling issues when bundling CJS dependencies into ESM output
+- SDK now correctly handles `@socketsecurity/lib` bundling without creating broken `__require()` wrappers that caused "Dynamic require of 'async_hooks' is not supported" errors in isolated environments
+
+## [3.0.31](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.31) - 2025-11-02
+
+### Added
+
+- Bundle dependencies validation to prevent `link:` dependencies in production
+
+### Fixed
+
+- Build process now correctly bundles `@socketsecurity/lib` instead of marking it as external
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v3.1.3
+- Updated `@socketregistry/packageurl-js` to v1.3.5
+
+## [3.0.30](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.30) - 2025-11-01
+
+### Added
+
+- Validation guard against `link:` dependencies in package.json
+- Pre-commit and pre-push hooks for development workflow
+
+### Fixed
+
+- Build output now uses relative paths instead of absolute paths for better portability
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v3.0.6
+- Updated `@socketregistry/packageurl-js` to v1.3.3
+
+## [3.0.29](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.29) - 2025-11-01
+
+### Changed
+
+- Moved `@socketsecurity/lib` and `@socketregistry/packageurl-js` to devDependencies (bundled SDK has no runtime dependencies)
+
+## [3.0.28](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.28) - 2025-11-01
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v3.0.3
+
+## [3.0.27](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.27) - 2025-10-31
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v2.10.4
+
+## [3.0.26](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.26) - 2025-10-31
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v2.10.3
+
+## [3.0.25](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.25) - 2025-10-31
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v2.10.2
+
+## [3.0.24](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.24) - 2025-10-31
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v2.10.1
+
+## [3.0.23](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.23) - 2025-10-30
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v2.10.0
+
+## [3.0.22](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.22) - 2025-10-30
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v2.9.1
+
+## [3.0.21](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.21) - 2025-10-30
+
+### Changed
+
+- Consolidated Socket.dev URL constants (`SOCKET_CONTACT_URL`, `SOCKET_DASHBOARD_URL`, `SOCKET_API_TOKENS_URL`) to use standardized exports from `@socketsecurity/lib` instead of duplicating them locally
+
+## [3.0.20](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.20) - 2025-10-30
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v2.9.0
+
+## [3.0.19](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.19) - 2025-10-30
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v2.8.4
+
+## [3.0.18](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.18) - 2025-10-30
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v2.8.3
+
+## [3.0.17](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.17) - 2025-10-29
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v2.8.2
+
+## [3.0.16](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.16) - 2025-10-29
+
+### Changed
+
+- Updated OpenAPI types with new alert filtering capabilities:
+  - Added `github_installation_id` query parameter to diff scan endpoints for GitHub installation-specific settings
+  - Added KEV (Known Exploited Vulnerability) filter support (`filters.alertKEV`)
+  - Added EPSS (Exploit Prediction Scoring System) severity filter support (`filters.alertEPSS`)
+  - Updated aggregation fields to include `alertKEV` and `alertEPSS` options
+
+## [3.0.15](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.15) - 2025-10-29
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v2.8.1
+
+## [3.0.14](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.14) - 2025-10-28
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v2.7.0
+
+## [3.0.13](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.13) - 2025-10-28
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v2.6.0
+
+## [3.0.12](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.12) - 2025-10-28
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v2.5.0
+
+## [3.0.11](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.11) - 2025-10-28
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v2.4.0
+
+## [3.0.10](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.10) - 2025-10-28
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v2.3.0
+
+## [3.0.9](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.9) - 2025-10-28
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v2.2.0
+
+## [3.0.8](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.8) - 2025-10-28
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v2.1.0
+
+## [3.0.7](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.7) - 2025-10-27
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v2.0.0
+- Added comprehensive getting started guide
+
+## [3.0.6](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.6) - 2025-10-24
+
+### Fixed
+
+- Externalized `@socketsecurity/lib` dependency to prevent dynamic require errors in bundled applications
+
+### Changed
+
+- Updated `@socketsecurity/lib` to v1.3.3
+
+## [3.0.5](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.5) - 2025-10-24
+
+### Fixed
+
+- Cleanup package.json files entries
+
+## [3.0.4](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.4) - 2025-10-24
+
+### Fixed
+
+- Include `.mjs` files in published npm package to fix import errors
+
+## [3.0.3](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.3) - 2025-10-24
+
+### Fixed
+
+- Updated `@socketsecurity/lib` to v1.3.2 to fix broken v1.3.1 release
+
+## [3.0.2](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.2) - 2025-10-24
+
+### Fixed
+
+- Upgraded `@socketsecurity/lib` to v1.3.1 to resolve dependency compatibility issue
+
+## [3.0.1](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.1) - 2025-10-23
+
+### Fixed
+
+- Export `FileValidationCallback` and `FileValidationResult` types for consumers implementing file validation callbacks
+
+## [3.0.0](https://github.com/SocketDev/socket-sdk-js/releases/tag/v3.0.0) - 2025-10-23
+
+### ⚠️ BREAKING CHANGES
+
+#### Removed Deprecated Methods
+
+The following methods mapped to deprecated `/report/*` backend endpoints and have been removed:
+
+- **`createScan()`** - Use `createFullScan()` instead
+- **`deleteScan()`** - Use `deleteFullScan()` instead
+- **`getScan()`** - Use `getFullScan()` instead
+- **`listScans()`** - Use `listFullScans()` instead
+
+#### Method Renames (Following REST Conventions)
+
+**Full Scans (Modern API):**
+
+- `getOrgFullScanList()` → `listFullScans()` with `ListFullScansOptions`
+- `createOrgFullScan()` → `createFullScan()` with `CreateFullScanOptions`
+- `getOrgFullScanBuffered()` → `getFullScan()`
+- `deleteOrgFullScan()` → `deleteFullScan()`
+- `streamOrgFullScan()` → `streamFullScan()` with `StreamFullScanOptions`
+- `getOrgFullScanMetadata()` → `getFullScanMetadata()`
+
+**Organizations:**
+
+- `getOrganizations()` → `listOrganizations()`
+
+**Repositories:**
+
+- `getOrgRepoList()` → `listRepositories()` with `ListRepositoriesOptions`
+- `getOrgRepo()` → `getRepository()`
+- `createOrgRepo()` → `createRepository()`
+- `updateOrgRepo()` → `updateRepository()`
+- `deleteOrgRepo()` → `deleteRepository()`
+
+#### Type System Improvements
+
+Strict types now mark guaranteed API fields as required instead of optional, improving IntelliSense autocomplete.
+
+### Added
+
+- **File Validation Callback:** New `onFileValidation` option in `SocketSdkOptions` allows customizing error handling when unreadable files are detected. File-upload methods (`uploadManifestFiles()`, `createFullScan()`, `createDependenciesSnapshot()`) now automatically validate file readability, preventing ENOENT errors from Yarn Berry PnP virtual filesystems and pnpm symlink issues.
+
+### Changed
+
+- File-upload methods automatically skip unreadable files with warnings instead of failing
+
+## [2.0.7](https://github.com/SocketDev/socket-sdk-js/releases/tag/v2.0.7) - 2025-10-22
+
+### Changed
+
+- Sync with openapi definition
+
+## [2.0.6](https://github.com/SocketDev/socket-sdk-js/releases/tag/v2.0.6) - 2025-10-22
+
+### Fixed
+
+- TypeScript lint compliance for array type syntax in `SocketSdkArrayElement` type helper
+
+## [2.0.5](https://github.com/SocketDev/socket-sdk-js/releases/tag/v2.0.5) - 2025-10-22
+
+### Added
+
+- `SocketSdkData` type helper for extracting data from SDK operation results
+- `SocketSdkArrayElement` type helper for extracting array element types from SDK operations
+
+## [2.0.4](https://github.com/SocketDev/socket-sdk-js/releases/tag/v2.0.4) - 2025-10-22
+
+### Added
+
+- Support for `Retry-After` header in rate limit responses (HTTP 429)
+  - Automatically respects server-specified retry delays
+  - Parses both delay-seconds (numeric) and HTTP-date formats
+  - Uses server delay instead of exponential backoff when available
+
+## [2.0.3](https://github.com/SocketDev/socket-sdk-js/releases/tag/v2.0.3) - 2025-10-22
+
+### Fixed
+
+- Improved TypeScript module resolution with explicit type exports instead of wildcard re-exports
+
+## [2.0.2](https://github.com/SocketDev/socket-sdk-js/releases/tag/v2.0.2) - 2025-10-22
+
+### Fixed
+
+- Ensured expected dist/ files are produced and refined package.json exports
+
+## [2.0.1](https://github.com/SocketDev/socket-sdk-js/releases/tag/v2.0.1) - 2025-10-21
+
+### Changed
+
+- Use `@socketsecurity/lib` under the hood
+- Synced OpenAPI type definitions with latest API specification
+  - Added documentation for `scan_type` query parameter on manifest upload endpoint (used for categorizing multiple SBOM heads per repository branch)
+  - Improved TypeScript helper types (`OpReturnType`, `OpErrorType`) for better type inference and error handling
+
+## [2.0.0](https://github.com/SocketDev/socket-sdk-js/releases/tag/v2.0.0) - 2025-10-10
+
+### Changed
+
+- **BREAKING**: Migrated to ESM-only module format
+  - Package is now ESM-only (`"type": "module"` in package.json)
+  - All output files use `.mjs` extension for JavaScript
+  - TypeScript declaration files use `.d.mts` extension
+  - CommonJS (`require()`) is no longer supported
+- Simplified build process for ESM-only output
+- Updated TypeScript configuration to use ESM module resolution
+- Improved code splitting for better tree-shaking with ESM
+
+### Removed
+
+- **BREAKING**: Removed CommonJS support and exports
+- Removed CommonJS-specific build configurations
+
+### Migration Guide
+
+To migrate from v1.x to v2.0:
+
+1. Ensure your project supports ESM modules (Node.js 14+ with `"type": "module"` or `.mjs` extensions)
+2. Update imports from CommonJS `require()` to ESM `import` statements:
+
+   ```javascript
+   // Before (v1.x)
+   const { SocketSdk } = require('@socketsecurity/sdk')
+
+   // After (v2.0)
+   import { SocketSdk } from '@socketsecurity/sdk'
+   ```
+
+3. If your project still requires CommonJS, consider staying on v1.x or using a transpiler
+
+## [1.11.2](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.11.2) - 2025-10-07
+
+### Fixed
+
+- Fixed typos in requirements.json
+- Updated @socketsecurity/registry to fix bugs related to inlined runtime-dependent expressions
+
+## [1.11.1](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.11.1) - 2025-10-06
+
+### Added
+
+- Performance optimizations with memoization for `normalizeBaseUrl` and quota utility functions
+- Performance tracking to HTTP client functions
+- Comprehensive error handling tests for SDK methods across organization, scanning, and batch APIs
+- Reusable assertion helpers for SDK tests
+
+### Changed
+
+- Improved test coverage and reliability with additional test cases
+- Streamlined documentation (README, TESTING.md, QUOTA.md, EXAMPLES.md) for better clarity and discoverability
+
+## [1.11.0](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.11.0) - 2025-10-04
+
+### Added
+
+- Optional TTL caching for API responses with configurable cache duration
+- New `cache` option (default: false) to enable response caching
+- New `cacheTtl` option (default: 5 minutes) to customize cache duration
+
+## [1.10.1](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.10.1) - 2025-10-04
+
+### Added
+
+- Automatic retry with exponential backoff to all HTTP API calls for improved reliability on transient failures
+
+## [1.10.0](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.10.0) - 2025-10-04
+
+### Added
+
+- Added `PromiseQueue` utility for controlled concurrency in async operations
+- HTTP retry logic with exponential backoff for improved reliability on transient failures
+- Added option type interfaces: `CreateDependenciesSnapshotOptions`, `CreateOrgFullScanOptions`, `CreateScanFromFilepathsOptions`, `StreamOrgFullScanOptions`, `UploadManifestFilesOptions`
+
+### Changed
+
+- **BREAKING**: Refactored SDK methods to use options objects instead of positional parameters for better API clarity:
+  - `createDependenciesSnapshot(filepaths, options)` - replaced `repo` and `branch` positional parameters with options object
+  - `createOrgFullScan(orgSlug, filepaths, options)` - replaced positional parameters with options object
+  - `createScanFromFilepaths(filepaths, options)` - replaced positional parameters with options object
+  - `streamOrgFullScan(orgSlug, fullScanId, options)` - replaced positional parameters with options object
+  - `uploadManifestFiles(orgSlug, filepaths, options)` - replaced positional parameters with options object
+- Improved type safety by replacing `any` types with `unknown` or `never` where appropriate
+- Enhanced code style with numeric separators for better readability of large numbers
+- Improved coverage reporting accuracy with c8 ignore comments
+- Updated `@socketsecurity/registry` dependency to 1.4.0
+
+### Fixed
+
+- Fixed import assertion syntax for JSON imports to use standard import syntax
+- Fixed HTTP retry test mocks to correctly match PUT method requests
+- Fixed critical issues in type handling and URL search parameter conversions
+
+## [1.9.2](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.9.2) - 2025-10-04
+
+### Changed
+
+- Improved TypeScript type definitions - All optional properties now include explicit `| undefined` type annotations for better type narrowing and null safety
+
+## [1.9.1](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.9.1) - 2025-10-03
+
+### Changed
+
+- Disabled TypeScript declaration map generation to reduce package size
+
+## [1.9.0](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.9.0) - 2025-10-03
+
+### Changed
+
+- **BREAKING**: Improved `SocketSdkResult` type compatibility - success and error results now have symmetric properties (`data`, `error`, `cause`) with explicit `undefined` types for better TypeScript narrowing
+- **BREAKING**: Removed `CResult` type (CLI-specific) in favor of SDK-appropriate `SocketSdkGenericResult` type for `getApi()` and `sendApi()` methods
+- Updated `getApi()` and `sendApi()` to use `SocketSdkGenericResult` with consistent HTTP status codes instead of CLI exit codes
+- All result types now use `success` discriminant with `status` (HTTP code), `data`, `error`, and `cause` properties on both branches
+
+### Migration Guide
+
+- If using `getApi()` or `sendApi()` with `throws: false`, update from `CResult` to `SocketSdkGenericResult`
+- Change `.ok` checks to `.success`
+- Change `.code` to `.status` (now contains HTTP status code)
+- Change `.message` to `.error`
+- Both success and error branches now have all properties - check discriminant first with `if (result.success)`
+
+## [1.8.6](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.8.6) - 2025-10-02
+
+### Changed
+
+- Reduced package size by excluding source map files (.js.map) from published package
+
+## [1.8.5](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.8.5) - 2025-10-02
+
+### Changed
+
+- Synced with OpenAPI definition
+- Added new `/openapi.json` endpoint for retrieving API specification in JSON format
+- Updated repo label filter descriptions to document empty string ("") usage for repositories with no labels
+- Added 'dual' threat category type
+
+## [1.8.4](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.8.4) - 2025-10-01
+
+### Fixed
+
+- Fixed registry constant import paths to use correct casing (SOCKET_PUBLIC_API_TOKEN, UNKNOWN_ERROR)
+
+## [1.8.3](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.8.3) - 2025-09-30
+
+### Changed
+
+- Synced with OpenAPI definition
+
+## [1.8.2](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.8.2) - 2025-09-29
+
+### Fixed
+
+- Fixed publishing workflow to ensure dist folder is built before npm publish
+- Changed prepublishOnly script to prevent accidental local publishing
+
+## [1.8.1](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.8.1) - 2025-09-29
+
+### Changed
+
+- Update test infrastructure and build configuration
+
+## [1.8.0](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.8.0) - 2025-09-27
+
+### Added
+
+- Quota utility functions for API cost management in `quota-utils.ts`
+- New exported functions: `checkQuota`, `formatQuotaReport`, `getEstimatedCost`, `getMethodCost`, `getQuotaSummary`, `isWithinQuota`
+- Example files demonstrating quota usage patterns
+
+### Changed
+
+- Improved error handling for quota utilities
+
+## [1.7.0](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.7.0) - 2025-09-26
+
+### Added
+
+- `getApi` method for raw GET requests with configurable response handling
+- `sendApi` method for POST/PUT requests with JSON body support
+- `CResult` type pattern for non-throwing API operations
+- `CustomResponseType` type export for response type options
+- Support for custom response types (`response`, `text`, `json`) in `getApi`
+- Enhanced error handling with detailed error context from `error.details` field
+- Socket API `error.details` parsing for richer error information
+- `getEntitlements` method for retrieving organization entitlements
+- `getEnabledEntitlements` method for getting enabled entitlement keys
+- `viewPatch` method for retrieving patch details by UUID
+- `streamPatchesFromScan` method for streaming patches from scan results
+- `Entitlement` and `EntitlementsResponse` types for entitlements API
+- `PatchFile`, `Vulnerability`, `SecurityAlert`, `PatchRecord`, `PatchViewResponse`, and `ArtifactPatches` types for patches API
+- Support for NDJSON streaming responses in patches API
+- Comprehensive test coverage improvements (484 total tests, 99.92% line coverage, 99.39% branch coverage)
+- Enhanced error handling tests for JSON parsing edge cases in streaming
+- Additional coverage tests for invalid JSON line handling in NDJSON streams
+
+### Changed
+
+- Improved error message formatting and JSON parsing error handling
+- Enhanced type safety with better generic constraints
+- Renamed option types to `GetOptions` and `SendOptions` for consistency
+- Reorganized test files into focused, functionality-based modules
+- Raised coverage thresholds to match achieved levels (100% statements, functions, lines)
+- Removed duplicate tests while maintaining coverage integrity
+- Renamed `getIssuesByNPMPackage` to `getIssuesByNpmPackage` for consistent naming convention
+- Improved method alphabetical ordering in source code
+- Enhanced test coverage from 99.77% to 99.92% line coverage
+- Improved branch coverage from 99.08% to 99.39%
+
+## [1.6.1](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.6.1) - 2025-09-24
+
+### Changed
+
+- Updated to use trusted publisher for npm package provenance
+
+## [1.6.0](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.6.0) - 2025-09-24
+
+### Changed
+
+- **BREAKING:** Converted to single CommonJS export type, removing dual ESM/CJS support
+
+## [1.5.1](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.5.1) - 2025-09-24
+
+### Fixed
+
+- Added missing setup-script to provenance workflow
+
+## [1.5.0](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.5.0) - 2025-09-23
+
+### Added
+
+- `getOrgFullScanBuffered` method for buffered full scan retrieval
+
+### Changed
+
+- **BREAKING:** Renamed `getOrgFullScan` to `streamOrgFullScan` for clarity
+
+### Fixed
+
+- Added missing `getResponseJson` call to `createScanFromFilepaths`
+- Improved handling of empty response bodies
+
+## [1.4.93](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.4.93) - 2025-09-15
+
+### Fixed
+
+- Fixed malformed part header issue for upload of manifest files
+
+## [1.4.91](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.4.91) - 2025-09-11
+
+### Changed
+
+- Improved URL handling
+
+## [1.4.90](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.4.90) - 2025-09-11
+
+### Fixed
+
+- Improved error handling
+
+## [1.4.84](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.4.84) - 2025-09-03
+
+### Added
+
+- Filter alerts by action
+
+### Changed
+
+- Improved JSON parsing
+
+## [1.4.82](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.4.82) - 2025-09-02
+
+### Changed
+
+- Improved public policy handling
+
+## [1.4.81](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.4.81) - 2025-09-02
+
+### Added
+
+- Add public security policy support
+
+## [1.4.79](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.4.79) - 2025-08-27
+
+### Fixed
+
+- Fixed ESM module compatibility
+
+## [1.4.77](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.4.77) - 2025-08-25
+
+### Added
+
+- Add timeout option for API requests
+
+## [1.4.73](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.4.73) - 2025-08-08
+
+### Fixed
+
+- Fixed crates ecosystem support
+
+## [1.4.72](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.4.72) - 2025-08-08
+
+### Fixed
+
+- Fixed rubygems ecosystem support
+
+## [1.4.71](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.4.71) - 2025-08-08
+
+### Added
+
+- Support for crate and rubygem ecosystems
+
+## [1.4.68](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.4.68) - 2025-08-02
+
+### Changed
+
+- Improved type definitions
+- Memory usage optimizations
+
+## [1.4.66](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.4.66) - 2025-07-29
+
+### Fixed
+
+- Fixed file upload timing issue
+- Fixed multipart form data formatting
+
+## [1.4.64](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.4.64) - 2025-07-22
+
+### Changed
+
+- Improved method signatures
+
+## [1.4.62](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.4.62) - 2025-07-21
+
+### Fixed
+
+- Fixed query parameter handling for empty values
+
+## [1.4.61](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.4.61) - 2025-07-21
+
+### Changed
+
+- Improved query parameter normalization
+
+## [1.4.60](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.4.60) - 2025-07-21
+
+### Changed
+
+- Renamed result type for clarity
+
+## [1.4.59](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.4.59) - 2025-07-20
+
+### Added
+
+- Add alias types for improved developer experience
+
+## [1.4.0](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.4.0) - 2025-05-01
+
+### Added
+
+- Full scans feature support
+- Audit log and repos features
+- Organization security policy support (getOrgSecurityPolicy)
+
+### Changed
+
+- Improved TypeScript type exports
+- Enhanced ESM and CJS dual package support
+
+## [1.3.0](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.3.0) - 2025-03-01
+
+### Added
+
+- Support for multiple ecosystem types
+- Enhanced error handling and reporting
+
+### Changed
+
+- Improved API client architecture
+- Better TypeScript type definitions
+
+## [1.2.0](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.2.0) - 2025-01-15
+
+### Added
+
+- File upload support for manifest files
+- Request body creation for file paths
+
+### Changed
+
+- Enhanced multipart form data handling
+- Improved streaming support
+
+## [1.1.0](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.1.0) - 2024-11-01
+
+### Added
+
+- Query parameter normalization
+- Enhanced search parameter handling
+
+### Changed
+
+- Improved URL parsing and handling
+- Better error messages
+
+## [1.0.0](https://github.com/SocketDev/socket-sdk-js/releases/tag/v1.0.0) - 2024-09-01
+
+### Added
+
+- Initial release of Socket SDK for JavaScript
+- Full Socket API client implementation
+- TypeScript support with comprehensive type definitions
+- Dual ESM/CJS package support
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/LICENSE b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/LICENSE
new file mode 100644
index 00000000..e4c00a21
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2022 Socket Inc
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/README.md b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/README.md
new file mode 100644
index 00000000..a876260e
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/README.md
@@ -0,0 +1,59 @@
+# @socketsecurity/sdk
+
+[![Socket Badge](https://socket.dev/api/badge/npm/package/@socketsecurity/sdk)](https://socket.dev/npm/package/@socketsecurity/sdk)
+[![CI](https://github.com/SocketDev/socket-sdk-js/actions/workflows/ci.yml/badge.svg)](https://github.com/SocketDev/socket-sdk-js/actions/workflows/ci.yml)
+![Coverage](https://img.shields.io/badge/coverage-96%25-brightgreen)
+
+[![Follow @SocketSecurity](https://img.shields.io/twitter/follow/SocketSecurity?style=social)](https://twitter.com/SocketSecurity)
+[![Follow @socket.dev on Bluesky](https://img.shields.io/badge/Follow-@socket.dev-1DA1F2?style=social&logo=bluesky)](https://bsky.app/profile/socket.dev)
+
+JavaScript SDK for [Socket.dev](https://socket.dev/) API.
+
+## Install
+
+```bash
+pnpm add @socketsecurity/sdk
+```
+
+## Usage
+
+```typescript
+import { SocketSdk } from '@socketsecurity/sdk'
+
+const client = new SocketSdk('your-api-key', {
+  retries: 3, // Retry failed requests up to 3 times
+  retryDelay: 1000, // Start with 1s delay, exponential backoff
+  timeout: 30000, // 30 second timeout
+})
+
+// Check your quota
+const quota = await client.getQuota()
+if (quota.success) {
+  console.log(`Available quota: ${quota.data.quota} units`)
+}
+
+// Analyze a package
+const result = await client.getScoreByNpmPackage('express', '4.18.0')
+if (result.success) {
+  console.log(`Dependency Score: ${result.data.depscore}`)
+}
+
+// Batch analyze multiple packages
+const batchResult = await client.batchPackageFetch({
+  components: [
+    { purl: 'pkg:npm/express@4.18.0' },
+    { purl: 'pkg:npm/react@18.0.0' },
+  ],
+})
+```
+
+## Documentation
+
+| Guide                                              | Description                         |
+| -------------------------------------------------- | ----------------------------------- |
+| **[API Reference](./docs/api-reference.md)**       | Complete API method documentation   |
+| **[Quota Management](./docs/quota-management.md)** | Cost tiers (0/10/100) and utilities |
+
+## License
+
+MIT
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/data/api-method-quota-and-permissions.json b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/data/api-method-quota-and-permissions.json
new file mode 100644
index 00000000..d0081be9
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/data/api-method-quota-and-permissions.json
@@ -0,0 +1,252 @@
+{
+  "api": {
+    "batchPackageFetch": {
+      "quota": 100,
+      "permissions": ["packages:list"]
+    },
+    "batchPackageStream": {
+      "quota": 100,
+      "permissions": ["packages:list"]
+    },
+    "createDependenciesSnapshot": {
+      "quota": 100,
+      "permissions": ["report:write"]
+    },
+    "createFullScan": {
+      "quota": 0,
+      "permissions": ["full-scans:create"]
+    },
+    "createOrgFullScan": {
+      "quota": 0,
+      "permissions": ["full-scans:create"]
+    },
+    "createOrgRepo": {
+      "quota": 0,
+      "permissions": ["repo:create"]
+    },
+    "createScanFromFilepaths": {
+      "quota": 100,
+      "permissions": ["report:write"]
+    },
+    "deleteOrgFullScan": {
+      "quota": 0,
+      "permissions": ["full-scans:delete"]
+    },
+    "deleteOrgRepo": {
+      "quota": 0,
+      "permissions": ["repo:delete"]
+    },
+    "getAuditLogEvents": {
+      "quota": 10,
+      "permissions": ["audit-log:list"]
+    },
+    "getEnabledEntitlements": {
+      "quota": 0,
+      "permissions": []
+    },
+    "getEntitlements": {
+      "quota": 0,
+      "permissions": []
+    },
+    "getIssuesByNpmPackage": {
+      "quota": 10,
+      "permissions": []
+    },
+    "getOrgAnalytics": {
+      "quota": 10,
+      "permissions": ["report:write"]
+    },
+    "getOrganizations": {
+      "quota": 0,
+      "permissions": []
+    },
+    "streamOrgFullScan": {
+      "quota": 0,
+      "permissions": ["full-scans:list"]
+    },
+    "streamPatchesFromScan": {
+      "quota": 0,
+      "permissions": ["patches:list"]
+    },
+    "getOrgFullScanBuffered": {
+      "quota": 0,
+      "permissions": ["full-scans:list"]
+    },
+    "getOrgFullScanList": {
+      "quota": 0,
+      "permissions": ["full-scans:list"]
+    },
+    "getOrgFullScanMetadata": {
+      "quota": 0,
+      "permissions": ["full-scans:list"]
+    },
+    "getOrgLicensePolicy": {
+      "quota": 0,
+      "permissions": ["settings:read"]
+    },
+    "getOrgRepo": {
+      "quota": 0,
+      "permissions": ["repo:list"]
+    },
+    "getOrgRepoList": {
+      "quota": 0,
+      "permissions": ["repo:list"]
+    },
+    "getOrgSecurityPolicy": {
+      "quota": 0,
+      "permissions": ["settings:read"]
+    },
+    "getQuota": {
+      "quota": 0,
+      "permissions": []
+    },
+    "getRepoAnalytics": {
+      "quota": 10,
+      "permissions": ["report:write"]
+    },
+    "getScan": {
+      "quota": 0,
+      "permissions": ["report:read"]
+    },
+    "getScanList": {
+      "quota": 0,
+      "permissions": ["report:read"]
+    },
+    "getSupportedScanFiles": {
+      "quota": 0,
+      "permissions": ["report:read"]
+    },
+    "getScoreByNpmPackage": {
+      "quota": 10,
+      "permissions": []
+    },
+    "postSettings": {
+      "quota": 0,
+      "permissions": []
+    },
+    "searchDependencies": {
+      "quota": 100,
+      "permissions": []
+    },
+    "updateOrgRepo": {
+      "quota": 0,
+      "permissions": ["repo:update"]
+    },
+    "uploadManifestFiles": {
+      "quota": 100,
+      "permissions": ["packages:upload"]
+    },
+    "viewPatch": {
+      "quota": 0,
+      "permissions": ["patches:view"]
+    },
+    "deleteReport": {
+      "quota": 0,
+      "permissions": ["report:delete"]
+    },
+    "exportCDX": {
+      "quota": 0,
+      "permissions": ["report:read"]
+    },
+    "exportSPDX": {
+      "quota": 0,
+      "permissions": ["report:read"]
+    },
+    "getAPITokens": {
+      "quota": 10,
+      "permissions": ["api-token:list"]
+    },
+    "postAPIToken": {
+      "quota": 10,
+      "permissions": ["api-token:create"]
+    },
+    "postAPITokenUpdate": {
+      "quota": 10,
+      "permissions": ["api-token:update"]
+    },
+    "postAPITokensRotate": {
+      "quota": 10,
+      "permissions": ["api-token:rotate"]
+    },
+    "postAPITokensRevoke": {
+      "quota": 10,
+      "permissions": ["api-token:revoke"]
+    },
+    "updateOrgSecurityPolicy": {
+      "quota": 0,
+      "permissions": ["settings:write"]
+    },
+    "updateOrgLicensePolicy": {
+      "quota": 0,
+      "permissions": ["settings:write"]
+    },
+    "getOrgTriage": {
+      "quota": 0,
+      "permissions": ["triage:alerts-list"]
+    },
+    "updateOrgAlertTriage": {
+      "quota": 0,
+      "permissions": ["triage:alerts-update"]
+    },
+    "getOrgRepoLabelList": {
+      "quota": 0,
+      "permissions": ["repo-label:list"]
+    },
+    "createOrgRepoLabel": {
+      "quota": 0,
+      "permissions": ["repo-label:create"]
+    },
+    "getOrgRepoLabel": {
+      "quota": 0,
+      "permissions": ["repo-label:list"]
+    },
+    "updateOrgRepoLabel": {
+      "quota": 0,
+      "permissions": ["repo-label:update"]
+    },
+    "deleteOrgRepoLabel": {
+      "quota": 0,
+      "permissions": ["repo-label:delete"]
+    },
+    "getDiffScanById": {
+      "quota": 0,
+      "permissions": ["diff-scans:list"]
+    },
+    "createOrgDiffScanFromIds": {
+      "quota": 0,
+      "permissions": ["diff-scans:create"]
+    },
+    "listOrgDiffScans": {
+      "quota": 0,
+      "permissions": ["diff-scans:list"]
+    },
+    "deleteOrgDiffScan": {
+      "quota": 0,
+      "permissions": ["diff-scans:delete"]
+    },
+    "getApi": {
+      "quota": 0,
+      "permissions": []
+    },
+    "sendApi": {
+      "quota": 0,
+      "permissions": []
+    },
+    "batchOrgPackageFetch": {
+      "quota": 100,
+      "permissions": ["packages:list"]
+    },
+    "exportOpenVEX": {
+      "quota": 0,
+      "permissions": ["report:read"]
+    },
+    "getOrgAlertFullScans": {
+      "quota": 10,
+      "permissions": ["alerts:list"]
+    },
+    "rescanFullScan": {
+      "quota": 0,
+      "permissions": ["full-scans:create"]
+    }
+  }
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/constants.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/constants.d.ts
new file mode 100644
index 00000000..06968cb4
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/constants.d.ts
@@ -0,0 +1,18 @@
+import type { ALERT_ACTION } from './types';
+export { SOCKET_API_TOKENS_URL, SOCKET_CONTACT_URL, SOCKET_DASHBOARD_URL, } from '@socketsecurity/lib/constants/socket';
+export declare const DEFAULT_USER_AGENT: string;
+export declare const DEFAULT_HTTP_TIMEOUT = 30000;
+export declare const DEFAULT_RETRIES = 3;
+export declare const DEFAULT_RETRY_DELAY = 1000;
+export declare const DEFAULT_CACHE_TTL: number;
+export declare const RECOMMENDED_CACHE_TTL_ORGANIZATIONS: number;
+export declare const RECOMMENDED_CACHE_TTL_QUOTA: number;
+export declare const MAX_HTTP_TIMEOUT: number;
+export declare const MIN_HTTP_TIMEOUT = 5000;
+export declare const MAX_RESPONSE_SIZE: number;
+export declare const MAX_STREAM_SIZE: number;
+export declare const SOCKET_PUBLIC_BLOB_STORE_URL = "https://socketusercontent.com";
+export declare const MAX_FIREWALL_COMPONENTS = 8;
+export declare const SOCKET_FIREWALL_API_URL = "https://firewall-api.socket.dev/purl";
+export declare const httpAgentNames: Set;
+export declare const publicPolicy: Map<"ambiguousClassifier" | "badEncoding" | "badSemver" | "badSemverDependency" | "bidi" | "binScriptConfusion" | "chromeContentScript" | "chromeHostPermission" | "chromePermission" | "chromeWildcardHostPermission" | "chronoAnomaly" | "compromisedSSHKey" | "copyleftLicense" | "criticalCVE" | "cve" | "debugAccess" | "deprecated" | "deprecatedException" | "deprecatedLicense" | "didYouMean" | "dynamicRequire" | "emptyPackage" | "envVars" | "explicitlyUnlicensedItem" | "extraneousDependency" | "fileDependency" | "filesystemAccess" | "floatingDependency" | "generic" | "ghaArgToEnv" | "ghaArgToOutput" | "ghaArgToSink" | "ghaContextToEnv" | "ghaContextToOutput" | "ghaContextToSink" | "ghaEnvToSink" | "gitDependency" | "gitHubDependency" | "gptAnomaly" | "gptDidYouMean" | "gptMalware" | "gptSecurity" | "hasNativeCode" | "highEntropyStrings" | "homoglyphs" | "httpDependency" | "installScripts" | "invalidPackageJSON" | "invisibleChars" | "licenseChange" | "licenseException" | "licenseSpdxDisj" | "longStrings" | "majorRefactor" | "malware" | "manifestConfusion" | "mediumCVE" | "mildCVE" | "minifiedFile" | "miscLicenseIssues" | "missingAuthor" | "missingDependency" | "missingLicense" | "missingTarball" | "mixedLicense" | "modifiedException" | "modifiedLicense" | "networkAccess" | "newAuthor" | "noAuthorData" | "noBugTracker" | "noLicenseFound" | "noREADME" | "noRepository" | "noTests" | "noV1" | "noWebsite" | "nonOSILicense" | "nonSPDXLicense" | "nonpermissiveLicense" | "notice" | "obfuscatedFile" | "obfuscatedRequire" | "peerDependency" | "potentialVulnerability" | "recentlyPublished" | "semverAnomaly" | "shellAccess" | "shellScriptOverride" | "shrinkwrap" | "skillAutonomyAbuse" | "skillCommandInjection" | "skillDataExfiltration" | "skillDiscoveryAbuse" | "skillHardcodedSecrets" | "skillObfuscation" | "skillPreExecution" | "skillPromptInjection" | "skillResourceAbuse" | "skillSupplyChain" | "skillToolAbuse" | "skillToolChaining" | "skillTransitiveTrust" | "socketUpgradeAvailable" | "suspiciousStarActivity" | "suspiciousString" | "telemetry" | "tooManyFiles" | "trivialPackage" | "troll" | "typeModuleCompatibility" | "uncaughtOptionalDependency" | "unclearLicense" | "unidentifiedLicense" | "unmaintained" | "unpopularPackage" | "unpublished" | "unresolvedRequire" | "unsafeCopyright" | "unstableOwnership" | "unusedDependency" | "urlStrings" | "usesEval" | "vsxActivationWildcard" | "vsxDebuggerContribution" | "vsxExtensionDependency" | "vsxExtensionPack" | "vsxProposedApiUsage" | "vsxUntrustedWorkspaceSupported" | "vsxVirtualWorkspaceSupported" | "vsxWebviewContribution" | "vsxWorkspaceContainsActivation" | "zeroWidth", ALERT_ACTION>;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/file-upload.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/file-upload.d.ts
new file mode 100644
index 00000000..01dfd31d
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/file-upload.d.ts
@@ -0,0 +1,5 @@
+import FormData from 'form-data';
+import type { RequestOptionsWithHooks } from './types';
+import type { HttpResponse } from '@socketsecurity/lib/http-request';
+export declare function createRequestBodyForFilepaths(filepaths: string[], basePath: string): FormData;
+export declare function createUploadRequest(baseUrl: string, urlPath: string, form: FormData, options?: RequestOptionsWithHooks | undefined): Promise;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/http-client.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/http-client.d.ts
new file mode 100644
index 00000000..9e61a55c
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/http-client.d.ts
@@ -0,0 +1,14 @@
+import type { RequestOptionsWithHooks, SendMethod } from './types';
+import type { HttpResponse } from '@socketsecurity/lib/http-request';
+import type { JsonValue } from '@socketsecurity/lib/json/types';
+export declare class ResponseError extends Error {
+    response: HttpResponse;
+    url?: string | undefined;
+    constructor(response: HttpResponse, message?: string, url?: string | undefined);
+}
+export declare function createDeleteRequest(baseUrl: string, urlPath: string, options?: RequestOptionsWithHooks | undefined): Promise;
+export declare function createGetRequest(baseUrl: string, urlPath: string, options?: RequestOptionsWithHooks | undefined): Promise;
+export declare function createRequestWithJson(method: SendMethod, baseUrl: string, urlPath: string, json: unknown, options?: RequestOptionsWithHooks | undefined): Promise;
+export declare function getResponseJson(response: HttpResponse, method?: string | undefined, url?: string | undefined): Promise;
+export declare function isResponseOk(response: HttpResponse): boolean;
+export declare function reshapeArtifactForPublicPolicy>(data: T, isAuthenticated: boolean, actions?: string | undefined, policy?: Map | undefined): T;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/index.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/index.d.ts
new file mode 100644
index 00000000..bea1ed96
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/index.d.ts
@@ -0,0 +1,10 @@
+/**
+ * @fileoverview Main entry point for the Socket SDK.
+ * Provides the SocketSdk class and utility functions for Socket security analysis API interactions.
+ */
+export { ResponseError } from './http-client';
+export { calculateTotalQuotaCost, getAllMethodRequirements, getMethodRequirements, getMethodsByPermissions, getMethodsByQuotaCost, getQuotaCost, getQuotaUsageSummary, getRequiredPermissions, hasQuotaForMethods, } from './quota-utils';
+export { SocketSdk } from './socket-sdk-class';
+export type { ALERT_ACTION, ALERT_TYPE, Agent, ArtifactPatches, BatchPackageFetchResultType, BatchPackageStreamOptions, CompactSocketArtifact, CompactSocketArtifactAlert, CreateDependenciesSnapshotOptions, CustomResponseType, Entitlement, EntitlementsResponse, FileValidationCallback, FileValidationResult, GetOptions, GotOptions, HeadersRecord, MalwareCheckAlert, MalwareCheckPackage, MalwareCheckResult, MalwareCheckScore, PatchFile, PatchRecord, PatchViewResponse, TelemetryConfig, PostOrgTelemetryPayload, PostOrgTelemetryResponse, QueryParams, RequestInfo, RequestOptions, RequestOptionsWithHooks, ResponseInfo, SecurityAlert, SendMethod, SendOptions, SocketArtifact, SocketArtifactAlert, SocketArtifactWithExtras, SocketId, SocketMetricSchema, SocketSdkArrayElement, SocketSdkData, SocketSdkErrorResult, SocketSdkGenericResult, SocketSdkOperations, SocketSdkOptions, SocketSdkResult, SocketSdkSuccessResult, StreamOrgFullScanOptions, UploadManifestFilesError, UploadManifestFilesOptions, UploadManifestFilesResponse, UploadManifestFilesReturnType, Vulnerability, } from './types';
+export type { CreateFullScanOptions, DeleteRepositoryLabelResult, DeleteResult, FullScanItem, FullScanListData, FullScanListResult, FullScanResult, GetRepositoryOptions, ListFullScansOptions, ListRepositoriesOptions, OrganizationItem, OrganizationsResult, RepositoriesListData, RepositoriesListResult, RepositoryItem, RepositoryLabelItem, RepositoryLabelResult, RepositoryLabelsListData, RepositoryLabelsListResult, RepositoryListItem, RepositoryResult, StreamFullScanOptions, StrictErrorResult, StrictResult, } from './types-strict';
+export { createUserAgentFromPkgJson } from './user-agent';
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/index.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/index.js
new file mode 100644
index 00000000..ee5f11d8
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/index.js
@@ -0,0 +1,19685 @@
+"use strict";
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __commonJS = (cb, mod) => function __require() {
+  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// @socketsecurity/lib/dist/constants/core.js
+var require_core = __commonJS({
+  "@socketsecurity/lib/dist/constants/core.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var core_exports = {};
+    __export2(core_exports, {
+      COLUMN_LIMIT: () => COLUMN_LIMIT,
+      EMPTY_FILE: () => EMPTY_FILE,
+      EMPTY_VALUE: () => EMPTY_VALUE,
+      LOOP_SENTINEL: () => LOOP_SENTINEL,
+      NODE_AUTH_TOKEN: () => NODE_AUTH_TOKEN,
+      NODE_ENV: () => NODE_ENV,
+      UNDEFINED_TOKEN: () => UNDEFINED_TOKEN,
+      UNKNOWN_ERROR: () => UNKNOWN_ERROR2,
+      UNKNOWN_VALUE: () => UNKNOWN_VALUE,
+      V: () => V,
+      kInternalsSymbol: () => kInternalsSymbol
+    });
+    module2.exports = __toCommonJS2(core_exports);
+    var kInternalsSymbol = Symbol("@socketregistry.constants.internals");
+    var LOOP_SENTINEL = 1e6;
+    var UNKNOWN_ERROR2 = "Unknown error";
+    var UNKNOWN_VALUE = "";
+    var EMPTY_FILE = "/* empty */\n";
+    var EMPTY_VALUE = "";
+    var UNDEFINED_TOKEN = void 0;
+    var V = "v";
+    var COLUMN_LIMIT = 80;
+    var NODE_AUTH_TOKEN = "NODE_AUTH_TOKEN";
+    var NODE_ENV = "NODE_ENV";
+  }
+});
+
+// @socketsecurity/lib/dist/arrays.js
+var require_arrays = __commonJS({
+  "@socketsecurity/lib/dist/arrays.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var arrays_exports = {};
+    __export2(arrays_exports, {
+      arrayChunk: () => arrayChunk,
+      arrayUnique: () => arrayUnique,
+      isArray: () => isArray,
+      joinAnd: () => joinAnd,
+      joinOr: () => joinOr
+    });
+    module2.exports = __toCommonJS2(arrays_exports);
+    var _conjunctionFormatter;
+    // @__NO_SIDE_EFFECTS__
+    function getConjunctionFormatter() {
+      if (_conjunctionFormatter === void 0) {
+        _conjunctionFormatter = new Intl.ListFormat("en", {
+          style: "long",
+          // "and" lists.
+          type: "conjunction"
+        });
+      }
+      return _conjunctionFormatter;
+    }
+    var _disjunctionFormatter;
+    // @__NO_SIDE_EFFECTS__
+    function getDisjunctionFormatter() {
+      if (_disjunctionFormatter === void 0) {
+        _disjunctionFormatter = new Intl.ListFormat("en", {
+          style: "long",
+          // "or" lists.
+          type: "disjunction"
+        });
+      }
+      return _disjunctionFormatter;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function arrayChunk(arr, size) {
+      const chunkSize = size ?? 2;
+      if (chunkSize <= 0) {
+        throw new Error("Chunk size must be greater than 0");
+      }
+      const { length } = arr;
+      const chunks = [];
+      for (let i = 0; i < length; i += chunkSize) {
+        chunks.push(arr.slice(i, i + chunkSize));
+      }
+      return chunks;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function arrayUnique(arr) {
+      return [...new Set(arr)];
+    }
+    var isArray = Array.isArray;
+    // @__NO_SIDE_EFFECTS__
+    function joinAnd(arr) {
+      return (/* @__PURE__ */ getConjunctionFormatter()).format(arr);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function joinOr(arr) {
+      return (/* @__PURE__ */ getDisjunctionFormatter()).format(arr);
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/sorts.js
+var require_sorts = __commonJS({
+  "@socketsecurity/lib/dist/sorts.js"(exports2, module2) {
+    "use strict";
+    module2.exports = {};
+  }
+});
+
+// @socketsecurity/lib/dist/objects.js
+var require_objects = __commonJS({
+  "@socketsecurity/lib/dist/objects.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var objects_exports = {};
+    __export2(objects_exports, {
+      createConstantsObject: () => createConstantsObject,
+      createLazyGetter: () => createLazyGetter,
+      defineGetter: () => defineGetter,
+      defineLazyGetter: () => defineLazyGetter,
+      defineLazyGetters: () => defineLazyGetters,
+      entryKeyComparator: () => entryKeyComparator,
+      getKeys: () => getKeys,
+      getOwn: () => getOwn2,
+      getOwnPropertyValues: () => getOwnPropertyValues,
+      hasKeys: () => hasKeys,
+      hasOwn: () => hasOwn,
+      isObject: () => isObject,
+      isObjectObject: () => isObjectObject2,
+      merge: () => merge,
+      objectAssign: () => objectAssign,
+      objectEntries: () => objectEntries,
+      objectFreeze: () => objectFreeze,
+      toSortedObject: () => toSortedObject,
+      toSortedObjectFromEntries: () => toSortedObjectFromEntries
+    });
+    module2.exports = __toCommonJS2(objects_exports);
+    var import_core2 = require_core();
+    var import_arrays = require_arrays();
+    var import_sorts = require_sorts();
+    var ObjectDefineProperties = Object.defineProperties;
+    var ObjectDefineProperty = Object.defineProperty;
+    var ObjectFreeze = Object.freeze;
+    var ObjectFromEntries = Object.fromEntries;
+    var ObjectGetOwnPropertyDescriptors = Object.getOwnPropertyDescriptors;
+    var ObjectGetOwnPropertyNames = Object.getOwnPropertyNames;
+    var ObjectGetPrototypeOf = Object.getPrototypeOf;
+    var ObjectHasOwn = Object.hasOwn;
+    var ObjectKeys = Object.keys;
+    var ObjectPrototype = Object.prototype;
+    var ObjectSetPrototypeOf = Object.setPrototypeOf;
+    var ReflectOwnKeys = Reflect.ownKeys;
+    // @__NO_SIDE_EFFECTS__
+    function createConstantsObject(props, options_) {
+      const options = { __proto__: null, ...options_ };
+      const attributes = ObjectFreeze({
+        __proto__: null,
+        getters: options.getters ? ObjectFreeze(
+          ObjectSetPrototypeOf(/* @__PURE__ */ toSortedObject(options.getters), null)
+        ) : void 0,
+        internals: options.internals ? ObjectFreeze(
+          ObjectSetPrototypeOf(/* @__PURE__ */ toSortedObject(options.internals), null)
+        ) : void 0,
+        mixin: options.mixin ? ObjectFreeze(
+          ObjectDefineProperties(
+            { __proto__: null },
+            ObjectGetOwnPropertyDescriptors(options.mixin)
+          )
+        ) : void 0,
+        props: props ? ObjectFreeze(ObjectSetPrototypeOf(/* @__PURE__ */ toSortedObject(props), null)) : void 0
+      });
+      const lazyGetterStats = ObjectFreeze({
+        __proto__: null,
+        initialized: /* @__PURE__ */ new Set()
+      });
+      const object = defineLazyGetters(
+        {
+          __proto__: null,
+          [import_core2.kInternalsSymbol]: ObjectFreeze({
+            __proto__: null,
+            get attributes() {
+              return attributes;
+            },
+            get lazyGetterStats() {
+              return lazyGetterStats;
+            },
+            ...attributes.internals
+          }),
+          kInternalsSymbol: import_core2.kInternalsSymbol,
+          ...attributes.props
+        },
+        attributes.getters,
+        lazyGetterStats
+      );
+      if (attributes.mixin) {
+        ObjectDefineProperties(
+          object,
+          /* @__PURE__ */ toSortedObjectFromEntries(
+            (/* @__PURE__ */ objectEntries(ObjectGetOwnPropertyDescriptors(attributes.mixin))).filter(
+              (p) => !ObjectHasOwn(object, p[0])
+            )
+          )
+        );
+      }
+      return ObjectFreeze(object);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function createLazyGetter(name, getter, stats) {
+      let lazyValue = import_core2.UNDEFINED_TOKEN;
+      const { [name]: lazyGetter } = {
+        [name]() {
+          if (lazyValue === import_core2.UNDEFINED_TOKEN) {
+            stats?.initialized?.add(name);
+            lazyValue = getter();
+          }
+          return lazyValue;
+        }
+      };
+      return lazyGetter;
+    }
+    function defineGetter(object, propKey, getter) {
+      ObjectDefineProperty(object, propKey, {
+        get: getter,
+        enumerable: false,
+        configurable: true
+      });
+      return object;
+    }
+    function defineLazyGetter(object, propKey, getter, stats) {
+      return defineGetter(object, propKey, /* @__PURE__ */ createLazyGetter(propKey, getter, stats));
+    }
+    function defineLazyGetters(object, getterDefObj, stats) {
+      if (getterDefObj !== null && typeof getterDefObj === "object") {
+        const keys = ReflectOwnKeys(getterDefObj);
+        for (let i = 0, { length } = keys; i < length; i += 1) {
+          const key = keys[i];
+          defineLazyGetter(object, key, getterDefObj[key], stats);
+        }
+      }
+      return object;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function entryKeyComparator(a, b) {
+      const keyA = a[0];
+      const keyB = b[0];
+      const strKeyA = typeof keyA === "string" ? keyA : String(keyA);
+      const strKeyB = typeof keyB === "string" ? keyB : String(keyB);
+      return (0, import_sorts.localeCompare)(strKeyA, strKeyB);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getKeys(obj) {
+      return /* @__PURE__ */ isObject(obj) ? ObjectKeys(obj) : [];
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getOwn2(obj, propKey) {
+      if (obj === null || obj === void 0) {
+        return void 0;
+      }
+      return ObjectHasOwn(obj, propKey) ? obj[propKey] : void 0;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getOwnPropertyValues(obj) {
+      if (obj === null || obj === void 0) {
+        return [];
+      }
+      const keys = ObjectGetOwnPropertyNames(obj);
+      const { length } = keys;
+      const values = Array(length);
+      for (let i = 0; i < length; i += 1) {
+        values[i] = obj[keys[i]];
+      }
+      return values;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function hasKeys(obj) {
+      if (obj === null || obj === void 0) {
+        return false;
+      }
+      for (const key in obj) {
+        if (ObjectHasOwn(obj, key)) {
+          return true;
+        }
+      }
+      return false;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function hasOwn(obj, propKey) {
+      if (obj === null || obj === void 0) {
+        return false;
+      }
+      return ObjectHasOwn(obj, propKey);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function isObject(value) {
+      return value !== null && typeof value === "object";
+    }
+    // @__NO_SIDE_EFFECTS__
+    function isObjectObject2(value) {
+      if (value === null || typeof value !== "object" || (0, import_arrays.isArray)(value)) {
+        return false;
+      }
+      const proto = ObjectGetPrototypeOf(value);
+      return proto === null || proto === ObjectPrototype;
+    }
+    var objectAssign = Object.assign;
+    // @__NO_SIDE_EFFECTS__
+    function merge(target, source) {
+      if (!/* @__PURE__ */ isObject(target) || !/* @__PURE__ */ isObject(source)) {
+        return target;
+      }
+      const queue = [[target, source]];
+      let pos = 0;
+      let { length: queueLength } = queue;
+      while (pos < queueLength) {
+        if (pos === import_core2.LOOP_SENTINEL) {
+          throw new Error("Detected infinite loop in object crawl of merge");
+        }
+        const { 0: currentTarget, 1: currentSource } = queue[pos++];
+        if (!currentSource || !currentTarget) {
+          continue;
+        }
+        const isSourceArray = (0, import_arrays.isArray)(currentSource);
+        const isTargetArray = (0, import_arrays.isArray)(currentTarget);
+        if (isSourceArray || isTargetArray) {
+          continue;
+        }
+        const keys = ReflectOwnKeys(currentSource);
+        for (let i = 0, { length } = keys; i < length; i += 1) {
+          const key = keys[i];
+          const srcVal = currentSource[key];
+          const targetVal = currentTarget[key];
+          if ((0, import_arrays.isArray)(srcVal)) {
+            currentTarget[key] = srcVal;
+          } else if (/* @__PURE__ */ isObject(srcVal)) {
+            if (/* @__PURE__ */ isObject(targetVal) && !(0, import_arrays.isArray)(targetVal)) {
+              queue[queueLength++] = [targetVal, srcVal];
+            } else {
+              currentTarget[key] = srcVal;
+            }
+          } else {
+            currentTarget[key] = srcVal;
+          }
+        }
+      }
+      return target;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function objectEntries(obj) {
+      if (obj === null || obj === void 0) {
+        return [];
+      }
+      const keys = ReflectOwnKeys(obj);
+      const { length } = keys;
+      const entries = Array(length);
+      const record = obj;
+      for (let i = 0; i < length; i += 1) {
+        const key = keys[i];
+        entries[i] = [key, record[key]];
+      }
+      return entries;
+    }
+    var objectFreeze = Object.freeze;
+    // @__NO_SIDE_EFFECTS__
+    function toSortedObject(obj) {
+      return /* @__PURE__ */ toSortedObjectFromEntries(/* @__PURE__ */ objectEntries(obj));
+    }
+    // @__NO_SIDE_EFFECTS__
+    function toSortedObjectFromEntries(entries) {
+      const otherEntries = [];
+      const symbolEntries = [];
+      for (const entry of entries) {
+        if (typeof entry[0] === "symbol") {
+          symbolEntries.push(entry);
+        } else {
+          otherEntries.push(entry);
+        }
+      }
+      if (!otherEntries.length && !symbolEntries.length) {
+        return {};
+      }
+      return ObjectFromEntries([
+        // The String constructor is safe to use with symbols.
+        ...symbolEntries.sort(entryKeyComparator),
+        ...otherEntries.sort(entryKeyComparator)
+      ]);
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/env/helpers.js
+var require_helpers = __commonJS({
+  "@socketsecurity/lib/dist/env/helpers.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var helpers_exports = {};
+    __export2(helpers_exports, {
+      envAsBoolean: () => envAsBoolean,
+      envAsNumber: () => envAsNumber,
+      envAsString: () => envAsString
+    });
+    module2.exports = __toCommonJS2(helpers_exports);
+    // @__NO_SIDE_EFFECTS__
+    function envAsBoolean(value) {
+      if (!value) {
+        return false;
+      }
+      const lower = value.toLowerCase();
+      return lower === "true" || lower === "1" || lower === "yes";
+    }
+    // @__NO_SIDE_EFFECTS__
+    function envAsNumber(value) {
+      if (!value) {
+        return 0;
+      }
+      const num = Number(value);
+      return Number.isNaN(num) ? 0 : num;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function envAsString(value) {
+      return value || "";
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/env/rewire.js
+var require_rewire = __commonJS({
+  "@socketsecurity/lib/dist/env/rewire.js"(exports2, module2) {
+    "use strict";
+    var __create2 = Object.create;
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __getProtoOf2 = Object.getPrototypeOf;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2(
+      // If the importer is in node compatibility mode or this is not an ESM
+      // file that has been converted to a CommonJS file using a Babel-
+      // compatible transform (i.e. "__esModule" has not been set), then set
+      // "default" to the CommonJS "module.exports" for node compatibility.
+      isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target,
+      mod
+    ));
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var rewire_exports = {};
+    __export2(rewire_exports, {
+      clearEnv: () => clearEnv,
+      getEnvValue: () => getEnvValue,
+      hasOverride: () => hasOverride,
+      isInEnv: () => isInEnv,
+      resetEnv: () => resetEnv,
+      setEnv: () => setEnv,
+      withEnv: () => withEnv,
+      withEnvSync: () => withEnvSync
+    });
+    module2.exports = __toCommonJS2(rewire_exports);
+    var import_node_process3 = __toESM2(require("node:process"));
+    var import_objects2 = require_objects();
+    var import_helpers = require_helpers();
+    var _async_hooks;
+    // @__NO_SIDE_EFFECTS__
+    function getAsyncHooks() {
+      if (_async_hooks === void 0) {
+        _async_hooks = require("node:async_hooks");
+      }
+      return _async_hooks;
+    }
+    var { AsyncLocalStorage } = /* @__PURE__ */ getAsyncHooks();
+    var isolatedOverridesStorage = new AsyncLocalStorage();
+    var sharedOverridesSymbol = Symbol.for(
+      "@socketsecurity/lib/env/rewire/test-overrides"
+    );
+    var isVitestEnv = (0, import_helpers.envAsBoolean)(import_node_process3.default.env.VITEST);
+    if (isVitestEnv && !globalThis[sharedOverridesSymbol]) {
+      globalThis[sharedOverridesSymbol] = /* @__PURE__ */ new Map();
+    }
+    var sharedOverrides = globalThis[sharedOverridesSymbol];
+    function clearEnv(key) {
+      sharedOverrides?.delete(key);
+    }
+    function getEnvValue(key) {
+      const isolatedOverrides = isolatedOverridesStorage.getStore();
+      if (isolatedOverrides?.has(key)) {
+        return isolatedOverrides.get(key);
+      }
+      if (sharedOverrides?.has(key)) {
+        return sharedOverrides.get(key);
+      }
+      return import_node_process3.default.env[key];
+    }
+    function hasOverride(key) {
+      const isolatedOverrides = isolatedOverridesStorage.getStore();
+      return !!(isolatedOverrides?.has(key) || sharedOverrides?.has(key));
+    }
+    function isInEnv(key) {
+      const isolatedOverrides = isolatedOverridesStorage.getStore();
+      if (isolatedOverrides?.has(key)) {
+        return true;
+      }
+      if (sharedOverrides?.has(key)) {
+        return true;
+      }
+      return (0, import_objects2.hasOwn)(import_node_process3.default.env, key);
+    }
+    function resetEnv() {
+      sharedOverrides?.clear();
+    }
+    function setEnv(key, value) {
+      sharedOverrides?.set(key, value);
+    }
+    async function withEnv(overrides, fn) {
+      const map = new Map(Object.entries(overrides));
+      return await isolatedOverridesStorage.run(map, fn);
+    }
+    function withEnvSync(overrides, fn) {
+      const map = new Map(Object.entries(overrides));
+      return isolatedOverridesStorage.run(map, fn);
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/env/debug.js
+var require_debug = __commonJS({
+  "@socketsecurity/lib/dist/env/debug.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var debug_exports = {};
+    __export2(debug_exports, {
+      getDebug: () => getDebug
+    });
+    module2.exports = __toCommonJS2(debug_exports);
+    var import_rewire = require_rewire();
+    // @__NO_SIDE_EFFECTS__
+    function getDebug() {
+      return (0, import_rewire.getEnvValue)("DEBUG");
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/env/socket.js
+var require_socket = __commonJS({
+  "@socketsecurity/lib/dist/env/socket.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var socket_exports = {};
+    __export2(socket_exports, {
+      getSocketAcceptRisks: () => getSocketAcceptRisks,
+      getSocketApiBaseUrl: () => getSocketApiBaseUrl,
+      getSocketApiProxy: () => getSocketApiProxy,
+      getSocketApiTimeout: () => getSocketApiTimeout,
+      getSocketApiToken: () => getSocketApiToken,
+      getSocketCacacheDir: () => getSocketCacacheDir,
+      getSocketConfig: () => getSocketConfig,
+      getSocketDebug: () => getSocketDebug,
+      getSocketDlxDirEnv: () => getSocketDlxDirEnv,
+      getSocketHome: () => getSocketHome,
+      getSocketNoApiToken: () => getSocketNoApiToken,
+      getSocketNpmRegistry: () => getSocketNpmRegistry,
+      getSocketOrgSlug: () => getSocketOrgSlug,
+      getSocketRegistryUrl: () => getSocketRegistryUrl,
+      getSocketViewAllRisks: () => getSocketViewAllRisks
+    });
+    module2.exports = __toCommonJS2(socket_exports);
+    var import_helpers = require_helpers();
+    var import_rewire = require_rewire();
+    // @__NO_SIDE_EFFECTS__
+    function getSocketAcceptRisks() {
+      return (0, import_helpers.envAsBoolean)((0, import_rewire.getEnvValue)("SOCKET_ACCEPT_RISKS"));
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getSocketApiBaseUrl() {
+      return (0, import_rewire.getEnvValue)("SOCKET_API_BASE_URL");
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getSocketApiProxy() {
+      return (0, import_rewire.getEnvValue)("SOCKET_API_PROXY");
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getSocketApiTimeout() {
+      return (0, import_helpers.envAsNumber)((0, import_rewire.getEnvValue)("SOCKET_API_TIMEOUT"));
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getSocketApiToken() {
+      return (0, import_rewire.getEnvValue)("SOCKET_API_TOKEN");
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getSocketCacacheDir() {
+      return (0, import_rewire.getEnvValue)("SOCKET_CACACHE_DIR");
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getSocketConfig() {
+      return (0, import_rewire.getEnvValue)("SOCKET_CONFIG");
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getSocketDebug() {
+      return (0, import_rewire.getEnvValue)("SOCKET_DEBUG");
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getSocketDlxDirEnv() {
+      return (0, import_rewire.getEnvValue)("SOCKET_DLX_DIR");
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getSocketHome() {
+      return (0, import_rewire.getEnvValue)("SOCKET_HOME");
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getSocketNoApiToken() {
+      return (0, import_helpers.envAsBoolean)((0, import_rewire.getEnvValue)("SOCKET_NO_API_TOKEN"));
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getSocketNpmRegistry() {
+      return (0, import_rewire.getEnvValue)("SOCKET_NPM_REGISTRY");
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getSocketOrgSlug() {
+      return (0, import_rewire.getEnvValue)("SOCKET_ORG_SLUG");
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getSocketRegistryUrl() {
+      return (0, import_rewire.getEnvValue)("SOCKET_REGISTRY_URL");
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getSocketViewAllRisks() {
+      return (0, import_helpers.envAsBoolean)((0, import_rewire.getEnvValue)("SOCKET_VIEW_ALL_RISKS"));
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/external/@socketregistry/is-unicode-supported.js
+var require_is_unicode_supported = __commonJS({
+  "@socketsecurity/lib/dist/external/@socketregistry/is-unicode-supported.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __name = (target, value) => __defProp2(target, "name", { value, configurable: true });
+    var __commonJS2 = (cb, mod) => function __require() {
+      return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+    };
+    var require_is_unicode_supported2 = __commonJS2({
+      "@socketregistry/is-unicode-supported/index.cjs"(exports22, module22) {
+        "use strict";
+        var _process;
+        function getProcess() {
+          if (_process === void 0) {
+            _process = require("node:process");
+          }
+          return _process;
+        }
+        __name(getProcess, "getProcess");
+        module22.exports = /* @__PURE__ */ __name(function isUnicodeSupported() {
+          const process4 = getProcess();
+          if (process4.platform !== "win32") {
+            return process4.env.TERM !== "linux";
+          }
+          const { env } = process4;
+          if (
+            // Windows Terminal.
+            env.WT_SESSION || // Terminus (<0.2.27).
+            env.TERMINUS_SUBLIME || // ConEmu and cmder.
+            env.ConEmuTask === "{cmd::Cmder}"
+          ) {
+            return true;
+          }
+          const { TERM, TERM_PROGRAM } = env;
+          return TERM_PROGRAM === "Terminus-Sublime" || TERM_PROGRAM === "vscode" || TERM === "xterm-256color" || TERM === "alacritty" || TERM === "rxvt-unicode" || TERM === "rxvt-unicode-256color" || env.TERMINAL_EMULATOR === "JetBrains-JediTerm";
+        }, "isUnicodeSupported");
+      }
+    });
+    module2.exports = require_is_unicode_supported2();
+  }
+});
+
+// @socketsecurity/lib/dist/external/debug.js
+var require_debug2 = __commonJS({
+  "@socketsecurity/lib/dist/external/debug.js"(exports2, module2) {
+    "use strict";
+    var __create2 = Object.create;
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __getProtoOf2 = Object.getPrototypeOf;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __name = (target, value) => __defProp2(target, "name", { value, configurable: true });
+    var __esm = (fn, res) => function __init() {
+      return fn && (res = (0, fn[__getOwnPropNames2(fn)[0]])(fn = 0)), res;
+    };
+    var __commonJS2 = (cb, mod) => function __require() {
+      return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+    };
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2(
+      // If the importer is in node compatibility mode or this is not an ESM
+      // file that has been converted to a CommonJS file using a Babel-
+      // compatible transform (i.e. "__esModule" has not been set), then set
+      // "default" to the CommonJS "module.exports" for node compatibility.
+      isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target,
+      mod
+    ));
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var require_ms = __commonJS2({
+      "ms/index.js"(exports22, module22) {
+        var s = 1e3;
+        var m = s * 60;
+        var h = m * 60;
+        var d = h * 24;
+        var w = d * 7;
+        var y = d * 365.25;
+        module22.exports = function(val, options) {
+          options = options || {};
+          var type = typeof val;
+          if (type === "string" && val.length > 0) {
+            return parse(val);
+          } else if (type === "number" && isFinite(val)) {
+            return options.long ? fmtLong(val) : fmtShort(val);
+          }
+          throw new Error(
+            "val is not a non-empty string or a valid number. val=" + JSON.stringify(val)
+          );
+        };
+        function parse(str) {
+          str = String(str);
+          if (str.length > 100) {
+            return;
+          }
+          var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
+            str
+          );
+          if (!match) {
+            return;
+          }
+          var n = parseFloat(match[1]);
+          var type = (match[2] || "ms").toLowerCase();
+          switch (type) {
+            case "years":
+            case "year":
+            case "yrs":
+            case "yr":
+            case "y":
+              return n * y;
+            case "weeks":
+            case "week":
+            case "w":
+              return n * w;
+            case "days":
+            case "day":
+            case "d":
+              return n * d;
+            case "hours":
+            case "hour":
+            case "hrs":
+            case "hr":
+            case "h":
+              return n * h;
+            case "minutes":
+            case "minute":
+            case "mins":
+            case "min":
+            case "m":
+              return n * m;
+            case "seconds":
+            case "second":
+            case "secs":
+            case "sec":
+            case "s":
+              return n * s;
+            case "milliseconds":
+            case "millisecond":
+            case "msecs":
+            case "msec":
+            case "ms":
+              return n;
+            default:
+              return void 0;
+          }
+        }
+        __name(parse, "parse");
+        function fmtShort(ms) {
+          var msAbs = Math.abs(ms);
+          if (msAbs >= d) {
+            return Math.round(ms / d) + "d";
+          }
+          if (msAbs >= h) {
+            return Math.round(ms / h) + "h";
+          }
+          if (msAbs >= m) {
+            return Math.round(ms / m) + "m";
+          }
+          if (msAbs >= s) {
+            return Math.round(ms / s) + "s";
+          }
+          return ms + "ms";
+        }
+        __name(fmtShort, "fmtShort");
+        function fmtLong(ms) {
+          var msAbs = Math.abs(ms);
+          if (msAbs >= d) {
+            return plural(ms, msAbs, d, "day");
+          }
+          if (msAbs >= h) {
+            return plural(ms, msAbs, h, "hour");
+          }
+          if (msAbs >= m) {
+            return plural(ms, msAbs, m, "minute");
+          }
+          if (msAbs >= s) {
+            return plural(ms, msAbs, s, "second");
+          }
+          return ms + " ms";
+        }
+        __name(fmtLong, "fmtLong");
+        function plural(ms, msAbs, n, name) {
+          var isPlural = msAbs >= n * 1.5;
+          return Math.round(ms / n) + " " + name + (isPlural ? "s" : "");
+        }
+        __name(plural, "plural");
+      }
+    });
+    var require_common = __commonJS2({
+      "debug/src/common.js"(exports22, module22) {
+        function setup(env2) {
+          createDebug.debug = createDebug;
+          createDebug.default = createDebug;
+          createDebug.coerce = coerce;
+          createDebug.disable = disable;
+          createDebug.enable = enable;
+          createDebug.enabled = enabled;
+          createDebug.humanize = require_ms();
+          createDebug.destroy = destroy;
+          Object.keys(env2).forEach((key) => {
+            createDebug[key] = env2[key];
+          });
+          createDebug.names = [];
+          createDebug.skips = [];
+          createDebug.formatters = {};
+          function selectColor(namespace) {
+            let hash = 0;
+            for (let i = 0; i < namespace.length; i++) {
+              hash = (hash << 5) - hash + namespace.charCodeAt(i);
+              hash |= 0;
+            }
+            return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
+          }
+          __name(selectColor, "selectColor");
+          createDebug.selectColor = selectColor;
+          function createDebug(namespace) {
+            let prevTime;
+            let enableOverride = null;
+            let namespacesCache;
+            let enabledCache;
+            function debug(...args) {
+              if (!debug.enabled) {
+                return;
+              }
+              const self = debug;
+              const curr = Number(/* @__PURE__ */ new Date());
+              const ms = curr - (prevTime || curr);
+              self.diff = ms;
+              self.prev = prevTime;
+              self.curr = curr;
+              prevTime = curr;
+              args[0] = createDebug.coerce(args[0]);
+              if (typeof args[0] !== "string") {
+                args.unshift("%O");
+              }
+              let index = 0;
+              args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
+                if (match === "%%") {
+                  return "%";
+                }
+                index++;
+                const formatter = createDebug.formatters[format];
+                if (typeof formatter === "function") {
+                  const val = args[index];
+                  match = formatter.call(self, val);
+                  args.splice(index, 1);
+                  index--;
+                }
+                return match;
+              });
+              createDebug.formatArgs.call(self, args);
+              const logFn = self.log || createDebug.log;
+              logFn.apply(self, args);
+            }
+            __name(debug, "debug");
+            debug.namespace = namespace;
+            debug.useColors = createDebug.useColors();
+            debug.color = createDebug.selectColor(namespace);
+            debug.extend = extend;
+            debug.destroy = createDebug.destroy;
+            Object.defineProperty(debug, "enabled", {
+              enumerable: true,
+              configurable: false,
+              get: /* @__PURE__ */ __name(() => {
+                if (enableOverride !== null) {
+                  return enableOverride;
+                }
+                if (namespacesCache !== createDebug.namespaces) {
+                  namespacesCache = createDebug.namespaces;
+                  enabledCache = createDebug.enabled(namespace);
+                }
+                return enabledCache;
+              }, "get"),
+              set: /* @__PURE__ */ __name((v) => {
+                enableOverride = v;
+              }, "set")
+            });
+            if (typeof createDebug.init === "function") {
+              createDebug.init(debug);
+            }
+            return debug;
+          }
+          __name(createDebug, "createDebug");
+          function extend(namespace, delimiter) {
+            const newDebug = createDebug(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace);
+            newDebug.log = this.log;
+            return newDebug;
+          }
+          __name(extend, "extend");
+          function enable(namespaces) {
+            createDebug.save(namespaces);
+            createDebug.namespaces = namespaces;
+            createDebug.names = [];
+            createDebug.skips = [];
+            const split = (typeof namespaces === "string" ? namespaces : "").trim().replace(/\s+/g, ",").split(",").filter(Boolean);
+            for (const ns of split) {
+              if (ns[0] === "-") {
+                createDebug.skips.push(ns.slice(1));
+              } else {
+                createDebug.names.push(ns);
+              }
+            }
+          }
+          __name(enable, "enable");
+          function matchesTemplate(search, template) {
+            let searchIndex = 0;
+            let templateIndex = 0;
+            let starIndex = -1;
+            let matchIndex = 0;
+            while (searchIndex < search.length) {
+              if (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === "*")) {
+                if (template[templateIndex] === "*") {
+                  starIndex = templateIndex;
+                  matchIndex = searchIndex;
+                  templateIndex++;
+                } else {
+                  searchIndex++;
+                  templateIndex++;
+                }
+              } else if (starIndex !== -1) {
+                templateIndex = starIndex + 1;
+                matchIndex++;
+                searchIndex = matchIndex;
+              } else {
+                return false;
+              }
+            }
+            while (templateIndex < template.length && template[templateIndex] === "*") {
+              templateIndex++;
+            }
+            return templateIndex === template.length;
+          }
+          __name(matchesTemplate, "matchesTemplate");
+          function disable() {
+            const namespaces = [
+              ...createDebug.names,
+              ...createDebug.skips.map((namespace) => "-" + namespace)
+            ].join(",");
+            createDebug.enable("");
+            return namespaces;
+          }
+          __name(disable, "disable");
+          function enabled(name) {
+            for (const skip of createDebug.skips) {
+              if (matchesTemplate(name, skip)) {
+                return false;
+              }
+            }
+            for (const ns of createDebug.names) {
+              if (matchesTemplate(name, ns)) {
+                return true;
+              }
+            }
+            return false;
+          }
+          __name(enabled, "enabled");
+          function coerce(val) {
+            if (val instanceof Error) {
+              return val.stack || val.message;
+            }
+            return val;
+          }
+          __name(coerce, "coerce");
+          function destroy() {
+            /* @__PURE__ */ console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
+          }
+          __name(destroy, "destroy");
+          createDebug.enable(createDebug.load());
+          return createDebug;
+        }
+        __name(setup, "setup");
+        module22.exports = setup;
+      }
+    });
+    var require_browser = __commonJS2({
+      "debug/src/browser.js"(exports22, module22) {
+        exports22.formatArgs = formatArgs;
+        exports22.save = save;
+        exports22.load = load;
+        exports22.useColors = useColors;
+        exports22.storage = localstorage();
+        exports22.destroy = /* @__PURE__ */ (() => {
+          let warned = false;
+          return () => {
+            if (!warned) {
+              warned = true;
+              /* @__PURE__ */ console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
+            }
+          };
+        })();
+        exports22.colors = [
+          "#0000CC",
+          "#0000FF",
+          "#0033CC",
+          "#0033FF",
+          "#0066CC",
+          "#0066FF",
+          "#0099CC",
+          "#0099FF",
+          "#00CC00",
+          "#00CC33",
+          "#00CC66",
+          "#00CC99",
+          "#00CCCC",
+          "#00CCFF",
+          "#3300CC",
+          "#3300FF",
+          "#3333CC",
+          "#3333FF",
+          "#3366CC",
+          "#3366FF",
+          "#3399CC",
+          "#3399FF",
+          "#33CC00",
+          "#33CC33",
+          "#33CC66",
+          "#33CC99",
+          "#33CCCC",
+          "#33CCFF",
+          "#6600CC",
+          "#6600FF",
+          "#6633CC",
+          "#6633FF",
+          "#66CC00",
+          "#66CC33",
+          "#9900CC",
+          "#9900FF",
+          "#9933CC",
+          "#9933FF",
+          "#99CC00",
+          "#99CC33",
+          "#CC0000",
+          "#CC0033",
+          "#CC0066",
+          "#CC0099",
+          "#CC00CC",
+          "#CC00FF",
+          "#CC3300",
+          "#CC3333",
+          "#CC3366",
+          "#CC3399",
+          "#CC33CC",
+          "#CC33FF",
+          "#CC6600",
+          "#CC6633",
+          "#CC9900",
+          "#CC9933",
+          "#CCCC00",
+          "#CCCC33",
+          "#FF0000",
+          "#FF0033",
+          "#FF0066",
+          "#FF0099",
+          "#FF00CC",
+          "#FF00FF",
+          "#FF3300",
+          "#FF3333",
+          "#FF3366",
+          "#FF3399",
+          "#FF33CC",
+          "#FF33FF",
+          "#FF6600",
+          "#FF6633",
+          "#FF9900",
+          "#FF9933",
+          "#FFCC00",
+          "#FFCC33"
+        ];
+        function useColors() {
+          if (false) {
+            return true;
+          }
+          if (false) {
+            return false;
+          }
+          let m;
+          return (
+            // Double check webkit in userAgent just in case we are in a worker
+            false
+          );
+        }
+        __name(useColors, "useColors");
+        function formatArgs(args) {
+          args[0] = (this.useColors ? "%c" : "") + this.namespace + (this.useColors ? " %c" : " ") + args[0] + (this.useColors ? "%c " : " ") + "+" + module22.exports.humanize(this.diff);
+          if (!this.useColors) {
+            return;
+          }
+          const c = "color: " + this.color;
+          args.splice(1, 0, c, "color: inherit");
+          let index = 0;
+          let lastC = 0;
+          args[0].replace(/%[a-zA-Z%]/g, (match) => {
+            if (match === "%%") {
+              return;
+            }
+            index++;
+            if (match === "%c") {
+              lastC = index;
+            }
+          });
+          args.splice(lastC, 0, c);
+        }
+        __name(formatArgs, "formatArgs");
+        exports22.log = console.debug || console.log || (() => {
+        });
+        function save(namespaces) {
+          try {
+            if (namespaces) {
+              exports22.storage.setItem("debug", namespaces);
+            } else {
+              exports22.storage.removeItem("debug");
+            }
+          } catch (error) {
+          }
+        }
+        __name(save, "save");
+        function load() {
+          let r;
+          try {
+            r = exports22.storage.getItem("debug") || exports22.storage.getItem("DEBUG");
+          } catch (error) {
+          }
+          if (!r && typeof process !== "undefined" && "env" in process) {
+            r = void 0;
+          }
+          return r;
+        }
+        __name(load, "load");
+        function localstorage() {
+          try {
+            return void 0;
+          } catch (error) {
+          }
+        }
+        __name(localstorage, "localstorage");
+        module22.exports = require_common()(exports22);
+        var { formatters } = module22.exports;
+        formatters.j = function(v) {
+          try {
+            return JSON.stringify(v);
+          } catch (error) {
+            return "[UnexpectedJSONParseError]: " + error.message;
+          }
+        };
+      }
+    });
+    var supports_color_exports = {};
+    __export2(supports_color_exports, {
+      createSupportsColor: () => createSupportsColor,
+      default: () => supports_color_default
+    });
+    function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : import_node_process3.default.argv) {
+      const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
+      const position = argv.indexOf(prefix + flag);
+      const terminatorPosition = argv.indexOf("--");
+      return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
+    }
+    function envForceColor() {
+      if (!("FORCE_COLOR" in env)) {
+        return;
+      }
+      if (env.FORCE_COLOR === "true") {
+        return 1;
+      }
+      if (env.FORCE_COLOR === "false") {
+        return 0;
+      }
+      if (env.FORCE_COLOR.length === 0) {
+        return 1;
+      }
+      const level = Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);
+      if (![0, 1, 2, 3].includes(level)) {
+        return;
+      }
+      return level;
+    }
+    function translateLevel(level) {
+      if (level === 0) {
+        return false;
+      }
+      return {
+        level,
+        hasBasic: true,
+        has256: level >= 2,
+        has16m: level >= 3
+      };
+    }
+    function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
+      const noFlagForceColor = envForceColor();
+      if (noFlagForceColor !== void 0) {
+        flagForceColor = noFlagForceColor;
+      }
+      const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
+      if (forceColor === 0) {
+        return 0;
+      }
+      if (sniffFlags) {
+        if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) {
+          return 3;
+        }
+        if (hasFlag("color=256")) {
+          return 2;
+        }
+      }
+      if ("TF_BUILD" in env && "AGENT_NAME" in env) {
+        return 1;
+      }
+      if (haveStream && !streamIsTTY && forceColor === void 0) {
+        return 0;
+      }
+      const min = forceColor || 0;
+      if (env.TERM === "dumb") {
+        return min;
+      }
+      if (import_node_process3.default.platform === "win32") {
+        const osRelease = import_node_os.default.release().split(".");
+        if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
+          return Number(osRelease[2]) >= 14931 ? 3 : 2;
+        }
+        return 1;
+      }
+      if ("CI" in env) {
+        if (["GITHUB_ACTIONS", "GITEA_ACTIONS", "CIRCLECI"].some((key) => key in env)) {
+          return 3;
+        }
+        if (["TRAVIS", "APPVEYOR", "GITLAB_CI", "BUILDKITE", "DRONE"].some((sign) => sign in env) || env.CI_NAME === "codeship") {
+          return 1;
+        }
+        return min;
+      }
+      if ("TEAMCITY_VERSION" in env) {
+        return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
+      }
+      if (env.COLORTERM === "truecolor") {
+        return 3;
+      }
+      if (env.TERM === "xterm-kitty") {
+        return 3;
+      }
+      if (env.TERM === "xterm-ghostty") {
+        return 3;
+      }
+      if (env.TERM === "wezterm") {
+        return 3;
+      }
+      if ("TERM_PROGRAM" in env) {
+        const version = Number.parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
+        switch (env.TERM_PROGRAM) {
+          case "iTerm.app": {
+            return version >= 3 ? 3 : 2;
+          }
+          case "Apple_Terminal": {
+            return 2;
+          }
+        }
+      }
+      if (/-256(color)?$/i.test(env.TERM)) {
+        return 2;
+      }
+      if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
+        return 1;
+      }
+      if ("COLORTERM" in env) {
+        return 1;
+      }
+      return min;
+    }
+    function createSupportsColor(stream, options = {}) {
+      const level = _supportsColor(stream, {
+        streamIsTTY: stream && stream.isTTY,
+        ...options
+      });
+      return translateLevel(level);
+    }
+    var import_node_process3;
+    var import_node_os;
+    var import_node_tty;
+    var env;
+    var flagForceColor;
+    var supportsColor;
+    var supports_color_default;
+    var init_supports_color = __esm({
+      "supports-color/index.js"() {
+        import_node_process3 = __toESM2(require("node:process"), 1);
+        import_node_os = __toESM2(require("node:os"), 1);
+        import_node_tty = __toESM2(require("node:tty"), 1);
+        __name(hasFlag, "hasFlag");
+        ({ env } = import_node_process3.default);
+        if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) {
+          flagForceColor = 0;
+        } else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) {
+          flagForceColor = 1;
+        }
+        __name(envForceColor, "envForceColor");
+        __name(translateLevel, "translateLevel");
+        __name(_supportsColor, "_supportsColor");
+        __name(createSupportsColor, "createSupportsColor");
+        supportsColor = {
+          stdout: createSupportsColor({ isTTY: import_node_tty.default.isatty(1) }),
+          stderr: createSupportsColor({ isTTY: import_node_tty.default.isatty(2) })
+        };
+        supports_color_default = supportsColor;
+      }
+    });
+    var require_node = __commonJS2({
+      "debug/src/node.js"(exports22, module22) {
+        var tty2 = require("node:tty");
+        var util = require("node:util");
+        exports22.init = init;
+        exports22.log = log;
+        exports22.formatArgs = formatArgs;
+        exports22.save = save;
+        exports22.load = load;
+        exports22.useColors = useColors;
+        exports22.destroy = util.deprecate(
+          () => {
+          },
+          "Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."
+        );
+        exports22.colors = [6, 2, 3, 4, 5, 1];
+        try {
+          const supportsColor2 = (init_supports_color(), __toCommonJS2(supports_color_exports));
+          if (supportsColor2 && (supportsColor2.stderr || supportsColor2).level >= 2) {
+            exports22.colors = [
+              20,
+              21,
+              26,
+              27,
+              32,
+              33,
+              38,
+              39,
+              40,
+              41,
+              42,
+              43,
+              44,
+              45,
+              56,
+              57,
+              62,
+              63,
+              68,
+              69,
+              74,
+              75,
+              76,
+              77,
+              78,
+              79,
+              80,
+              81,
+              92,
+              93,
+              98,
+              99,
+              112,
+              113,
+              128,
+              129,
+              134,
+              135,
+              148,
+              149,
+              160,
+              161,
+              162,
+              163,
+              164,
+              165,
+              166,
+              167,
+              168,
+              169,
+              170,
+              171,
+              172,
+              173,
+              178,
+              179,
+              184,
+              185,
+              196,
+              197,
+              198,
+              199,
+              200,
+              201,
+              202,
+              203,
+              204,
+              205,
+              206,
+              207,
+              208,
+              209,
+              214,
+              215,
+              220,
+              221
+            ];
+          }
+        } catch (error) {
+        }
+        exports22.inspectOpts = Object.keys(process.env).filter((key) => {
+          return /^debug_/i.test(key);
+        }).reduce((obj, key) => {
+          const prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, (_, k) => {
+            return k.toUpperCase();
+          });
+          let val = process.env[key];
+          if (/^(yes|on|true|enabled)$/i.test(val)) {
+            val = true;
+          } else if (/^(no|off|false|disabled)$/i.test(val)) {
+            val = false;
+          } else if (val === "null") {
+            val = null;
+          } else {
+            val = Number(val);
+          }
+          obj[prop] = val;
+          return obj;
+        }, {});
+        function useColors() {
+          return "colors" in exports22.inspectOpts ? Boolean(exports22.inspectOpts.colors) : tty2.isatty(process.stderr.fd);
+        }
+        __name(useColors, "useColors");
+        function formatArgs(args) {
+          const { namespace: name, useColors: useColors2 } = this;
+          if (useColors2) {
+            const c = this.color;
+            const colorCode = "\x1B[3" + (c < 8 ? c : "8;5;" + c);
+            const prefix = `  ${colorCode};1m${name} \x1B[0m`;
+            args[0] = prefix + args[0].split("\n").join("\n" + prefix);
+            args.push(colorCode + "m+" + module22.exports.humanize(this.diff) + "\x1B[0m");
+          } else {
+            args[0] = getDate() + name + " " + args[0];
+          }
+        }
+        __name(formatArgs, "formatArgs");
+        function getDate() {
+          if (exports22.inspectOpts.hideDate) {
+            return "";
+          }
+          return (/* @__PURE__ */ new Date()).toISOString() + " ";
+        }
+        __name(getDate, "getDate");
+        function log(...args) {
+          return process.stderr.write(util.formatWithOptions(exports22.inspectOpts, ...args) + "\n");
+        }
+        __name(log, "log");
+        function save(namespaces) {
+          if (namespaces) {
+            process.env.DEBUG = namespaces;
+          } else {
+            delete void 0;
+          }
+        }
+        __name(save, "save");
+        function load() {
+          return void 0;
+        }
+        __name(load, "load");
+        function init(debug) {
+          debug.inspectOpts = {};
+          const keys = Object.keys(exports22.inspectOpts);
+          for (let i = 0; i < keys.length; i++) {
+            debug.inspectOpts[keys[i]] = exports22.inspectOpts[keys[i]];
+          }
+        }
+        __name(init, "init");
+        module22.exports = require_common()(exports22);
+        var { formatters } = module22.exports;
+        formatters.o = function(v) {
+          this.inspectOpts.colors = this.useColors;
+          return util.inspect(v, this.inspectOpts).split("\n").map((str) => str.trim()).join(" ");
+        };
+        formatters.O = function(v) {
+          this.inspectOpts.colors = this.useColors;
+          return util.inspect(v, this.inspectOpts);
+        };
+      }
+    });
+    var require_src = __commonJS2({
+      "debug/src/index.js"(exports22, module22) {
+        if (typeof process === "undefined" || process.type === "renderer" || false || process.__nwjs) {
+          module22.exports = require_browser();
+        } else {
+          module22.exports = require_node();
+        }
+      }
+    });
+    module2.exports = require_src();
+  }
+});
+
+// @socketsecurity/lib/dist/external/external-pack.js
+var require_external_pack = __commonJS({
+  "@socketsecurity/lib/dist/external/external-pack.js"(exports2, module2) {
+    "use strict";
+    var __create2 = Object.create;
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __getProtoOf2 = Object.getPrototypeOf;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __name = (target, value) => __defProp2(target, "name", { value, configurable: true });
+    var __esm = (fn, res) => function __init() {
+      return fn && (res = (0, fn[__getOwnPropNames2(fn)[0]])(fn = 0)), res;
+    };
+    var __commonJS2 = (cb, mod) => function __require() {
+      return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+    };
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2(
+      // If the importer is in node compatibility mode or this is not an ESM
+      // file that has been converted to a CommonJS file using a Babel-
+      // compatible transform (i.e. "__esModule" has not been set), then set
+      // "default" to the CommonJS "module.exports" for node compatibility.
+      isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target,
+      mod
+    ));
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var require_signals = __commonJS2({
+      "signal-exit/dist/cjs/signals.js"(exports22) {
+        "use strict";
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.signals = void 0;
+        exports22.signals = [];
+        exports22.signals.push("SIGHUP", "SIGINT", "SIGTERM");
+        if (process.platform !== "win32") {
+          exports22.signals.push(
+            "SIGALRM",
+            "SIGABRT",
+            "SIGVTALRM",
+            "SIGXCPU",
+            "SIGXFSZ",
+            "SIGUSR2",
+            "SIGTRAP",
+            "SIGSYS",
+            "SIGQUIT",
+            "SIGIOT"
+            // should detect profiler and enable/disable accordingly.
+            // see #21
+            // 'SIGPROF'
+          );
+        }
+        if (process.platform === "linux") {
+          exports22.signals.push("SIGIO", "SIGPOLL", "SIGPWR", "SIGSTKFLT");
+        }
+      }
+    });
+    var require_cjs = __commonJS2({
+      "signal-exit/dist/cjs/index.js"(exports22) {
+        "use strict";
+        var _a;
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.unload = exports22.load = exports22.onExit = exports22.signals = void 0;
+        var signals_js_1 = require_signals();
+        Object.defineProperty(exports22, "signals", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return signals_js_1.signals;
+        }, "get") });
+        var processOk = /* @__PURE__ */ __name((process5) => !!process5 && typeof process5 === "object" && typeof process5.removeListener === "function" && typeof process5.emit === "function" && typeof process5.reallyExit === "function" && typeof process5.listeners === "function" && typeof process5.kill === "function" && typeof process5.pid === "number" && typeof process5.on === "function", "processOk");
+        var kExitEmitter = Symbol.for("signal-exit emitter");
+        var global = globalThis;
+        var ObjectDefineProperty = Object.defineProperty.bind(Object);
+        var Emitter = class {
+          static {
+            __name(this, "Emitter");
+          }
+          emitted = {
+            afterExit: false,
+            exit: false
+          };
+          listeners = {
+            afterExit: [],
+            exit: []
+          };
+          count = 0;
+          id = Math.random();
+          constructor() {
+            if (global[kExitEmitter]) {
+              return global[kExitEmitter];
+            }
+            ObjectDefineProperty(global, kExitEmitter, {
+              value: this,
+              writable: false,
+              enumerable: false,
+              configurable: false
+            });
+          }
+          on(ev, fn) {
+            this.listeners[ev].push(fn);
+          }
+          removeListener(ev, fn) {
+            const list = this.listeners[ev];
+            const i = list.indexOf(fn);
+            if (i === -1) {
+              return;
+            }
+            if (i === 0 && list.length === 1) {
+              list.length = 0;
+            } else {
+              list.splice(i, 1);
+            }
+          }
+          emit(ev, code, signal) {
+            if (this.emitted[ev]) {
+              return false;
+            }
+            this.emitted[ev] = true;
+            let ret = false;
+            for (const fn of this.listeners[ev]) {
+              ret = fn(code, signal) === true || ret;
+            }
+            if (ev === "exit") {
+              ret = this.emit("afterExit", code, signal) || ret;
+            }
+            return ret;
+          }
+        };
+        var SignalExitBase = class {
+          static {
+            __name(this, "SignalExitBase");
+          }
+        };
+        var signalExitWrap = /* @__PURE__ */ __name((handler) => {
+          return {
+            onExit(cb, opts) {
+              return handler.onExit(cb, opts);
+            },
+            load() {
+              return handler.load();
+            },
+            unload() {
+              return handler.unload();
+            }
+          };
+        }, "signalExitWrap");
+        var SignalExitFallback = class extends SignalExitBase {
+          static {
+            __name(this, "SignalExitFallback");
+          }
+          onExit() {
+            return () => {
+            };
+          }
+          load() {
+          }
+          unload() {
+          }
+        };
+        var SignalExit = class extends SignalExitBase {
+          static {
+            __name(this, "SignalExit");
+          }
+          // "SIGHUP" throws an `ENOSYS` error on Windows,
+          // so use a supported signal instead
+          /* c8 ignore start */
+          #hupSig = process4.platform === "win32" ? "SIGINT" : "SIGHUP";
+          /* c8 ignore stop */
+          #emitter = new Emitter();
+          #process;
+          #originalProcessEmit;
+          #originalProcessReallyExit;
+          #sigListeners = {};
+          #loaded = false;
+          constructor(process5) {
+            super();
+            this.#process = process5;
+            this.#sigListeners = {};
+            for (const sig of signals_js_1.signals) {
+              this.#sigListeners[sig] = () => {
+                const listeners = this.#process.listeners(sig);
+                let { count } = this.#emitter;
+                const p = process5;
+                if (typeof p.__signal_exit_emitter__ === "object" && typeof p.__signal_exit_emitter__.count === "number") {
+                  count += p.__signal_exit_emitter__.count;
+                }
+                if (listeners.length === count) {
+                  this.unload();
+                  const ret = this.#emitter.emit("exit", null, sig);
+                  const s = sig === "SIGHUP" ? this.#hupSig : sig;
+                  if (!ret)
+                    process5.kill(process5.pid, s);
+                }
+              };
+            }
+            this.#originalProcessReallyExit = process5.reallyExit;
+            this.#originalProcessEmit = process5.emit;
+          }
+          onExit(cb, opts) {
+            if (!processOk(this.#process)) {
+              return () => {
+              };
+            }
+            if (this.#loaded === false) {
+              this.load();
+            }
+            const ev = opts?.alwaysLast ? "afterExit" : "exit";
+            this.#emitter.on(ev, cb);
+            return () => {
+              this.#emitter.removeListener(ev, cb);
+              if (this.#emitter.listeners["exit"].length === 0 && this.#emitter.listeners["afterExit"].length === 0) {
+                this.unload();
+              }
+            };
+          }
+          load() {
+            if (this.#loaded) {
+              return;
+            }
+            this.#loaded = true;
+            this.#emitter.count += 1;
+            for (const sig of signals_js_1.signals) {
+              try {
+                const fn = this.#sigListeners[sig];
+                if (fn)
+                  this.#process.on(sig, fn);
+              } catch (_) {
+              }
+            }
+            this.#process.emit = (ev, ...a) => {
+              return this.#processEmit(ev, ...a);
+            };
+            this.#process.reallyExit = (code) => {
+              return this.#processReallyExit(code);
+            };
+          }
+          unload() {
+            if (!this.#loaded) {
+              return;
+            }
+            this.#loaded = false;
+            signals_js_1.signals.forEach((sig) => {
+              const listener = this.#sigListeners[sig];
+              if (!listener) {
+                throw new Error("Listener not defined for signal: " + sig);
+              }
+              try {
+                this.#process.removeListener(sig, listener);
+              } catch (_) {
+              }
+            });
+            this.#process.emit = this.#originalProcessEmit;
+            this.#process.reallyExit = this.#originalProcessReallyExit;
+            this.#emitter.count -= 1;
+          }
+          #processReallyExit(code) {
+            if (!processOk(this.#process)) {
+              return 0;
+            }
+            this.#process.exitCode = code || 0;
+            this.#emitter.emit("exit", this.#process.exitCode, null);
+            return this.#originalProcessReallyExit.call(this.#process, this.#process.exitCode);
+          }
+          #processEmit(ev, ...args) {
+            const og = this.#originalProcessEmit;
+            if (ev === "exit" && processOk(this.#process)) {
+              if (typeof args[0] === "number") {
+                this.#process.exitCode = args[0];
+              }
+              const ret = og.call(this.#process, ev, ...args);
+              this.#emitter.emit("exit", this.#process.exitCode, null);
+              return ret;
+            } else {
+              return og.call(this.#process, ev, ...args);
+            }
+          }
+        };
+        var process4 = globalThis.process;
+        _a = signalExitWrap(processOk(process4) ? new SignalExit(process4) : new SignalExitFallback()), /**
+        * Called when the process is exiting, whether via signal, explicit
+        * exit, or running out of stuff to do.
+        *
+        * If the global process object is not suitable for instrumentation,
+        * then this will be a no-op.
+        *
+        * Returns a function that may be used to unload signal-exit.
+        */
+        exports22.onExit = _a.onExit, /**
+        * Load the listeners.  Likely you never need to call this, unless
+        * doing a rather deep integration with signal-exit functionality.
+        * Mostly exposed for the benefit of testing.
+        *
+        * @internal
+        */
+        exports22.load = _a.load, /**
+        * Unload the listeners.  Likely you never need to call this, unless
+        * doing a rather deep integration with signal-exit functionality.
+        * Mostly exposed for the benefit of testing.
+        *
+        * @internal
+        */
+        exports22.unload = _a.unload;
+      }
+    });
+    var supports_color_exports = {};
+    __export2(supports_color_exports, {
+      createSupportsColor: () => createSupportsColor,
+      default: () => supports_color_default
+    });
+    function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : import_node_process3.default.argv) {
+      const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
+      const position = argv.indexOf(prefix + flag);
+      const terminatorPosition = argv.indexOf("--");
+      return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
+    }
+    function envForceColor() {
+      if (!("FORCE_COLOR" in env)) {
+        return;
+      }
+      if (env.FORCE_COLOR === "true") {
+        return 1;
+      }
+      if (env.FORCE_COLOR === "false") {
+        return 0;
+      }
+      if (env.FORCE_COLOR.length === 0) {
+        return 1;
+      }
+      const level = Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);
+      if (![0, 1, 2, 3].includes(level)) {
+        return;
+      }
+      return level;
+    }
+    function translateLevel(level) {
+      if (level === 0) {
+        return false;
+      }
+      return {
+        level,
+        hasBasic: true,
+        has256: level >= 2,
+        has16m: level >= 3
+      };
+    }
+    function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
+      const noFlagForceColor = envForceColor();
+      if (noFlagForceColor !== void 0) {
+        flagForceColor = noFlagForceColor;
+      }
+      const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
+      if (forceColor === 0) {
+        return 0;
+      }
+      if (sniffFlags) {
+        if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) {
+          return 3;
+        }
+        if (hasFlag("color=256")) {
+          return 2;
+        }
+      }
+      if ("TF_BUILD" in env && "AGENT_NAME" in env) {
+        return 1;
+      }
+      if (haveStream && !streamIsTTY && forceColor === void 0) {
+        return 0;
+      }
+      const min = forceColor || 0;
+      if (env.TERM === "dumb") {
+        return min;
+      }
+      if (import_node_process3.default.platform === "win32") {
+        const osRelease = import_node_os.default.release().split(".");
+        if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
+          return Number(osRelease[2]) >= 14931 ? 3 : 2;
+        }
+        return 1;
+      }
+      if ("CI" in env) {
+        if (["GITHUB_ACTIONS", "GITEA_ACTIONS", "CIRCLECI"].some((key) => key in env)) {
+          return 3;
+        }
+        if (["TRAVIS", "APPVEYOR", "GITLAB_CI", "BUILDKITE", "DRONE"].some((sign) => sign in env) || env.CI_NAME === "codeship") {
+          return 1;
+        }
+        return min;
+      }
+      if ("TEAMCITY_VERSION" in env) {
+        return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
+      }
+      if (env.COLORTERM === "truecolor") {
+        return 3;
+      }
+      if (env.TERM === "xterm-kitty") {
+        return 3;
+      }
+      if (env.TERM === "xterm-ghostty") {
+        return 3;
+      }
+      if (env.TERM === "wezterm") {
+        return 3;
+      }
+      if ("TERM_PROGRAM" in env) {
+        const version = Number.parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
+        switch (env.TERM_PROGRAM) {
+          case "iTerm.app": {
+            return version >= 3 ? 3 : 2;
+          }
+          case "Apple_Terminal": {
+            return 2;
+          }
+        }
+      }
+      if (/-256(color)?$/i.test(env.TERM)) {
+        return 2;
+      }
+      if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
+        return 1;
+      }
+      if ("COLORTERM" in env) {
+        return 1;
+      }
+      return min;
+    }
+    function createSupportsColor(stream, options = {}) {
+      const level = _supportsColor(stream, {
+        streamIsTTY: stream && stream.isTTY,
+        ...options
+      });
+      return translateLevel(level);
+    }
+    var import_node_process3;
+    var import_node_os;
+    var import_node_tty;
+    var env;
+    var flagForceColor;
+    var supportsColor;
+    var supports_color_default;
+    var init_supports_color = __esm({
+      "supports-color/index.js"() {
+        import_node_process3 = __toESM2(require("node:process"), 1);
+        import_node_os = __toESM2(require("node:os"), 1);
+        import_node_tty = __toESM2(require("node:tty"), 1);
+        __name(hasFlag, "hasFlag");
+        ({ env } = import_node_process3.default);
+        if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) {
+          flagForceColor = 0;
+        } else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) {
+          flagForceColor = 1;
+        }
+        __name(envForceColor, "envForceColor");
+        __name(translateLevel, "translateLevel");
+        __name(_supportsColor, "_supportsColor");
+        __name(createSupportsColor, "createSupportsColor");
+        supportsColor = {
+          stdout: createSupportsColor({ isTTY: import_node_tty.default.isatty(1) }),
+          stderr: createSupportsColor({ isTTY: import_node_tty.default.isatty(2) })
+        };
+        supports_color_default = supportsColor;
+      }
+    });
+    var has_flag_exports = {};
+    __export2(has_flag_exports, {
+      default: () => hasFlag2
+    });
+    function hasFlag2(flag, argv = import_process2.default.argv) {
+      const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
+      const position = argv.indexOf(prefix + flag);
+      const terminatorPosition = argv.indexOf("--");
+      return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
+    }
+    var import_process2;
+    var init_has_flag = __esm({
+      "has-flag/index.js"() {
+        import_process2 = __toESM2(require("node:process"), 1);
+        __name(hasFlag2, "hasFlag");
+      }
+    });
+    var require_yoctocolors_cjs2 = __commonJS2({
+      "yoctocolors-cjs/index.js"(exports22, module22) {
+        var tty2 = require("node:tty");
+        var hasColors = tty2?.WriteStream?.prototype?.hasColors?.() ?? false;
+        var format = /* @__PURE__ */ __name((open, close) => {
+          if (!hasColors) {
+            return (input2) => input2;
+          }
+          const openCode = `\x1B[${open}m`;
+          const closeCode = `\x1B[${close}m`;
+          return (input2) => {
+            const string = input2 + "";
+            let index = string.indexOf(closeCode);
+            if (index === -1) {
+              return openCode + string + closeCode;
+            }
+            let result = openCode;
+            let lastIndex = 0;
+            const reopenOnNestedClose = close === 22;
+            const replaceCode = (reopenOnNestedClose ? closeCode : "") + openCode;
+            while (index !== -1) {
+              result += string.slice(lastIndex, index) + replaceCode;
+              lastIndex = index + closeCode.length;
+              index = string.indexOf(closeCode, lastIndex);
+            }
+            result += string.slice(lastIndex) + closeCode;
+            return result;
+          };
+        }, "format");
+        var colors = {};
+        colors.reset = format(0, 0);
+        colors.bold = format(1, 22);
+        colors.dim = format(2, 22);
+        colors.italic = format(3, 23);
+        colors.underline = format(4, 24);
+        colors.overline = format(53, 55);
+        colors.inverse = format(7, 27);
+        colors.hidden = format(8, 28);
+        colors.strikethrough = format(9, 29);
+        colors.black = format(30, 39);
+        colors.red = format(31, 39);
+        colors.green = format(32, 39);
+        colors.yellow = format(33, 39);
+        colors.blue = format(34, 39);
+        colors.magenta = format(35, 39);
+        colors.cyan = format(36, 39);
+        colors.white = format(37, 39);
+        colors.gray = format(90, 39);
+        colors.bgBlack = format(40, 49);
+        colors.bgRed = format(41, 49);
+        colors.bgGreen = format(42, 49);
+        colors.bgYellow = format(43, 49);
+        colors.bgBlue = format(44, 49);
+        colors.bgMagenta = format(45, 49);
+        colors.bgCyan = format(46, 49);
+        colors.bgWhite = format(47, 49);
+        colors.bgGray = format(100, 49);
+        colors.redBright = format(91, 39);
+        colors.greenBright = format(92, 39);
+        colors.yellowBright = format(93, 39);
+        colors.blueBright = format(94, 39);
+        colors.magentaBright = format(95, 39);
+        colors.cyanBright = format(96, 39);
+        colors.whiteBright = format(97, 39);
+        colors.bgRedBright = format(101, 49);
+        colors.bgGreenBright = format(102, 49);
+        colors.bgYellowBright = format(103, 49);
+        colors.bgBlueBright = format(104, 49);
+        colors.bgMagentaBright = format(105, 49);
+        colors.bgCyanBright = format(106, 49);
+        colors.bgWhiteBright = format(107, 49);
+        module22.exports = colors;
+      }
+    });
+    var require_key = __commonJS2({
+      "@inquirer/core/dist/commonjs/lib/key.js"(exports22) {
+        "use strict";
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.isEnterKey = exports22.isNumberKey = exports22.isTabKey = exports22.isBackspaceKey = exports22.isSpaceKey = exports22.isDownKey = exports22.isUpKey = void 0;
+        var isUpKey = /* @__PURE__ */ __name((key, keybindings = []) => (
+          // The up key
+          key.name === "up" || // Vim keybinding: hjkl keys map to left/down/up/right
+          keybindings.includes("vim") && key.name === "k" || // Emacs keybinding: Ctrl+P means "previous" in Emacs navigation conventions
+          keybindings.includes("emacs") && key.ctrl && key.name === "p"
+        ), "isUpKey");
+        exports22.isUpKey = isUpKey;
+        var isDownKey = /* @__PURE__ */ __name((key, keybindings = []) => (
+          // The down key
+          key.name === "down" || // Vim keybinding: hjkl keys map to left/down/up/right
+          keybindings.includes("vim") && key.name === "j" || // Emacs keybinding: Ctrl+N means "next" in Emacs navigation conventions
+          keybindings.includes("emacs") && key.ctrl && key.name === "n"
+        ), "isDownKey");
+        exports22.isDownKey = isDownKey;
+        var isSpaceKey = /* @__PURE__ */ __name((key) => key.name === "space", "isSpaceKey");
+        exports22.isSpaceKey = isSpaceKey;
+        var isBackspaceKey = /* @__PURE__ */ __name((key) => key.name === "backspace", "isBackspaceKey");
+        exports22.isBackspaceKey = isBackspaceKey;
+        var isTabKey = /* @__PURE__ */ __name((key) => key.name === "tab", "isTabKey");
+        exports22.isTabKey = isTabKey;
+        var isNumberKey = /* @__PURE__ */ __name((key) => "1234567890".includes(key.name), "isNumberKey");
+        exports22.isNumberKey = isNumberKey;
+        var isEnterKey = /* @__PURE__ */ __name((key) => key.name === "enter" || key.name === "return", "isEnterKey");
+        exports22.isEnterKey = isEnterKey;
+      }
+    });
+    var require_errors = __commonJS2({
+      "@inquirer/core/dist/commonjs/lib/errors.js"(exports22) {
+        "use strict";
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.ValidationError = exports22.HookError = exports22.ExitPromptError = exports22.CancelPromptError = exports22.AbortPromptError = void 0;
+        var AbortPromptError = class extends Error {
+          static {
+            __name(this, "AbortPromptError");
+          }
+          name = "AbortPromptError";
+          message = "Prompt was aborted";
+          constructor(options) {
+            super();
+            this.cause = options?.cause;
+          }
+        };
+        exports22.AbortPromptError = AbortPromptError;
+        var CancelPromptError = class extends Error {
+          static {
+            __name(this, "CancelPromptError");
+          }
+          name = "CancelPromptError";
+          message = "Prompt was canceled";
+        };
+        exports22.CancelPromptError = CancelPromptError;
+        var ExitPromptError = class extends Error {
+          static {
+            __name(this, "ExitPromptError");
+          }
+          name = "ExitPromptError";
+        };
+        exports22.ExitPromptError = ExitPromptError;
+        var HookError = class extends Error {
+          static {
+            __name(this, "HookError");
+          }
+          name = "HookError";
+        };
+        exports22.HookError = HookError;
+        var ValidationError = class extends Error {
+          static {
+            __name(this, "ValidationError");
+          }
+          name = "ValidationError";
+        };
+        exports22.ValidationError = ValidationError;
+      }
+    });
+    var require_hook_engine = __commonJS2({
+      "@inquirer/core/dist/commonjs/lib/hook-engine.js"(exports22) {
+        "use strict";
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.effectScheduler = void 0;
+        exports22.withHooks = withHooks;
+        exports22.readline = readline;
+        exports22.withUpdates = withUpdates;
+        exports22.withPointer = withPointer;
+        exports22.handleChange = handleChange;
+        var node_async_hooks_1 = require("node:async_hooks");
+        var errors_ts_1 = require_errors();
+        var hookStorage = new node_async_hooks_1.AsyncLocalStorage();
+        function createStore(rl) {
+          const store = {
+            rl,
+            hooks: [],
+            hooksCleanup: [],
+            hooksEffect: [],
+            index: 0,
+            handleChange() {
+            }
+          };
+          return store;
+        }
+        __name(createStore, "createStore");
+        function withHooks(rl, cb) {
+          const store = createStore(rl);
+          return hookStorage.run(store, () => {
+            function cycle(render) {
+              store.handleChange = () => {
+                store.index = 0;
+                render();
+              };
+              store.handleChange();
+            }
+            __name(cycle, "cycle");
+            return cb(cycle);
+          });
+        }
+        __name(withHooks, "withHooks");
+        function getStore() {
+          const store = hookStorage.getStore();
+          if (!store) {
+            throw new errors_ts_1.HookError("[Inquirer] Hook functions can only be called from within a prompt");
+          }
+          return store;
+        }
+        __name(getStore, "getStore");
+        function readline() {
+          return getStore().rl;
+        }
+        __name(readline, "readline");
+        function withUpdates(fn) {
+          const wrapped = /* @__PURE__ */ __name((...args) => {
+            const store = getStore();
+            let shouldUpdate = false;
+            const oldHandleChange = store.handleChange;
+            store.handleChange = () => {
+              shouldUpdate = true;
+            };
+            const returnValue = fn(...args);
+            if (shouldUpdate) {
+              oldHandleChange();
+            }
+            store.handleChange = oldHandleChange;
+            return returnValue;
+          }, "wrapped");
+          return node_async_hooks_1.AsyncResource.bind(wrapped);
+        }
+        __name(withUpdates, "withUpdates");
+        function withPointer(cb) {
+          const store = getStore();
+          const { index } = store;
+          const pointer = {
+            get() {
+              return store.hooks[index];
+            },
+            set(value) {
+              store.hooks[index] = value;
+            },
+            initialized: index in store.hooks
+          };
+          const returnValue = cb(pointer);
+          store.index++;
+          return returnValue;
+        }
+        __name(withPointer, "withPointer");
+        function handleChange() {
+          getStore().handleChange();
+        }
+        __name(handleChange, "handleChange");
+        exports22.effectScheduler = {
+          queue(cb) {
+            const store = getStore();
+            const { index } = store;
+            store.hooksEffect.push(() => {
+              store.hooksCleanup[index]?.();
+              const cleanFn = cb(readline());
+              if (cleanFn != null && typeof cleanFn !== "function") {
+                throw new errors_ts_1.ValidationError("useEffect return value must be a cleanup function or nothing.");
+              }
+              store.hooksCleanup[index] = cleanFn;
+            });
+          },
+          run() {
+            const store = getStore();
+            withUpdates(() => {
+              store.hooksEffect.forEach((effect) => {
+                effect();
+              });
+              store.hooksEffect.length = 0;
+            })();
+          },
+          clearAll() {
+            const store = getStore();
+            store.hooksCleanup.forEach((cleanFn) => {
+              cleanFn?.();
+            });
+            store.hooksEffect.length = 0;
+            store.hooksCleanup.length = 0;
+          }
+        };
+      }
+    });
+    var require_use_state = __commonJS2({
+      "@inquirer/core/dist/commonjs/lib/use-state.js"(exports22) {
+        "use strict";
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.useState = useState;
+        var node_async_hooks_1 = require("node:async_hooks");
+        var hook_engine_ts_1 = require_hook_engine();
+        function useState(defaultValue) {
+          return (0, hook_engine_ts_1.withPointer)((pointer) => {
+            const setState = node_async_hooks_1.AsyncResource.bind(/* @__PURE__ */ __name(function setState2(newValue) {
+              if (pointer.get() !== newValue) {
+                pointer.set(newValue);
+                (0, hook_engine_ts_1.handleChange)();
+              }
+            }, "setState"));
+            if (pointer.initialized) {
+              return [pointer.get(), setState];
+            }
+            const value = typeof defaultValue === "function" ? defaultValue() : defaultValue;
+            pointer.set(value);
+            return [value, setState];
+          });
+        }
+        __name(useState, "useState");
+      }
+    });
+    var require_use_effect = __commonJS2({
+      "@inquirer/core/dist/commonjs/lib/use-effect.js"(exports22) {
+        "use strict";
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.useEffect = useEffect;
+        var hook_engine_ts_1 = require_hook_engine();
+        function useEffect(cb, depArray) {
+          (0, hook_engine_ts_1.withPointer)((pointer) => {
+            const oldDeps = pointer.get();
+            const hasChanged = !Array.isArray(oldDeps) || depArray.some((dep, i) => !Object.is(dep, oldDeps[i]));
+            if (hasChanged) {
+              hook_engine_ts_1.effectScheduler.queue(cb);
+            }
+            pointer.set(depArray);
+          });
+        }
+        __name(useEffect, "useEffect");
+      }
+    });
+    var require_commonjs = __commonJS2({
+      "@inquirer/figures/dist/commonjs/index.js"(exports22) {
+        "use strict";
+        var __importDefault = exports22 && exports22.__importDefault || function(mod) {
+          return mod && mod.__esModule ? mod : { "default": mod };
+        };
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.replaceSymbols = exports22.fallbackSymbols = exports22.mainSymbols = void 0;
+        var node_process_1 = __importDefault(require("node:process"));
+        function isUnicodeSupported() {
+          if (node_process_1.default.platform !== "win32") {
+            return node_process_1.default.env["TERM"] !== "linux";
+          }
+          return Boolean(node_process_1.default.env["WT_SESSION"]) || // Windows Terminal
+          Boolean(node_process_1.default.env["TERMINUS_SUBLIME"]) || // Terminus (<0.2.27)
+          node_process_1.default.env["ConEmuTask"] === "{cmd::Cmder}" || // ConEmu and cmder
+          node_process_1.default.env["TERM_PROGRAM"] === "Terminus-Sublime" || node_process_1.default.env["TERM_PROGRAM"] === "vscode" || node_process_1.default.env["TERM"] === "xterm-256color" || node_process_1.default.env["TERM"] === "alacritty" || node_process_1.default.env["TERMINAL_EMULATOR"] === "JetBrains-JediTerm";
+        }
+        __name(isUnicodeSupported, "isUnicodeSupported");
+        var common = {
+          circleQuestionMark: "(?)",
+          questionMarkPrefix: "(?)",
+          square: "\u2588",
+          squareDarkShade: "\u2593",
+          squareMediumShade: "\u2592",
+          squareLightShade: "\u2591",
+          squareTop: "\u2580",
+          squareBottom: "\u2584",
+          squareLeft: "\u258C",
+          squareRight: "\u2590",
+          squareCenter: "\u25A0",
+          bullet: "\u25CF",
+          dot: "\u2024",
+          ellipsis: "\u2026",
+          pointerSmall: "\u203A",
+          triangleUp: "\u25B2",
+          triangleUpSmall: "\u25B4",
+          triangleDown: "\u25BC",
+          triangleDownSmall: "\u25BE",
+          triangleLeftSmall: "\u25C2",
+          triangleRightSmall: "\u25B8",
+          home: "\u2302",
+          heart: "\u2665",
+          musicNote: "\u266A",
+          musicNoteBeamed: "\u266B",
+          arrowUp: "\u2191",
+          arrowDown: "\u2193",
+          arrowLeft: "\u2190",
+          arrowRight: "\u2192",
+          arrowLeftRight: "\u2194",
+          arrowUpDown: "\u2195",
+          almostEqual: "\u2248",
+          notEqual: "\u2260",
+          lessOrEqual: "\u2264",
+          greaterOrEqual: "\u2265",
+          identical: "\u2261",
+          infinity: "\u221E",
+          subscriptZero: "\u2080",
+          subscriptOne: "\u2081",
+          subscriptTwo: "\u2082",
+          subscriptThree: "\u2083",
+          subscriptFour: "\u2084",
+          subscriptFive: "\u2085",
+          subscriptSix: "\u2086",
+          subscriptSeven: "\u2087",
+          subscriptEight: "\u2088",
+          subscriptNine: "\u2089",
+          oneHalf: "\xBD",
+          oneThird: "\u2153",
+          oneQuarter: "\xBC",
+          oneFifth: "\u2155",
+          oneSixth: "\u2159",
+          oneEighth: "\u215B",
+          twoThirds: "\u2154",
+          twoFifths: "\u2156",
+          threeQuarters: "\xBE",
+          threeFifths: "\u2157",
+          threeEighths: "\u215C",
+          fourFifths: "\u2158",
+          fiveSixths: "\u215A",
+          fiveEighths: "\u215D",
+          sevenEighths: "\u215E",
+          line: "\u2500",
+          lineBold: "\u2501",
+          lineDouble: "\u2550",
+          lineDashed0: "\u2504",
+          lineDashed1: "\u2505",
+          lineDashed2: "\u2508",
+          lineDashed3: "\u2509",
+          lineDashed4: "\u254C",
+          lineDashed5: "\u254D",
+          lineDashed6: "\u2574",
+          lineDashed7: "\u2576",
+          lineDashed8: "\u2578",
+          lineDashed9: "\u257A",
+          lineDashed10: "\u257C",
+          lineDashed11: "\u257E",
+          lineDashed12: "\u2212",
+          lineDashed13: "\u2013",
+          lineDashed14: "\u2010",
+          lineDashed15: "\u2043",
+          lineVertical: "\u2502",
+          lineVerticalBold: "\u2503",
+          lineVerticalDouble: "\u2551",
+          lineVerticalDashed0: "\u2506",
+          lineVerticalDashed1: "\u2507",
+          lineVerticalDashed2: "\u250A",
+          lineVerticalDashed3: "\u250B",
+          lineVerticalDashed4: "\u254E",
+          lineVerticalDashed5: "\u254F",
+          lineVerticalDashed6: "\u2575",
+          lineVerticalDashed7: "\u2577",
+          lineVerticalDashed8: "\u2579",
+          lineVerticalDashed9: "\u257B",
+          lineVerticalDashed10: "\u257D",
+          lineVerticalDashed11: "\u257F",
+          lineDownLeft: "\u2510",
+          lineDownLeftArc: "\u256E",
+          lineDownBoldLeftBold: "\u2513",
+          lineDownBoldLeft: "\u2512",
+          lineDownLeftBold: "\u2511",
+          lineDownDoubleLeftDouble: "\u2557",
+          lineDownDoubleLeft: "\u2556",
+          lineDownLeftDouble: "\u2555",
+          lineDownRight: "\u250C",
+          lineDownRightArc: "\u256D",
+          lineDownBoldRightBold: "\u250F",
+          lineDownBoldRight: "\u250E",
+          lineDownRightBold: "\u250D",
+          lineDownDoubleRightDouble: "\u2554",
+          lineDownDoubleRight: "\u2553",
+          lineDownRightDouble: "\u2552",
+          lineUpLeft: "\u2518",
+          lineUpLeftArc: "\u256F",
+          lineUpBoldLeftBold: "\u251B",
+          lineUpBoldLeft: "\u251A",
+          lineUpLeftBold: "\u2519",
+          lineUpDoubleLeftDouble: "\u255D",
+          lineUpDoubleLeft: "\u255C",
+          lineUpLeftDouble: "\u255B",
+          lineUpRight: "\u2514",
+          lineUpRightArc: "\u2570",
+          lineUpBoldRightBold: "\u2517",
+          lineUpBoldRight: "\u2516",
+          lineUpRightBold: "\u2515",
+          lineUpDoubleRightDouble: "\u255A",
+          lineUpDoubleRight: "\u2559",
+          lineUpRightDouble: "\u2558",
+          lineUpDownLeft: "\u2524",
+          lineUpBoldDownBoldLeftBold: "\u252B",
+          lineUpBoldDownBoldLeft: "\u2528",
+          lineUpDownLeftBold: "\u2525",
+          lineUpBoldDownLeftBold: "\u2529",
+          lineUpDownBoldLeftBold: "\u252A",
+          lineUpDownBoldLeft: "\u2527",
+          lineUpBoldDownLeft: "\u2526",
+          lineUpDoubleDownDoubleLeftDouble: "\u2563",
+          lineUpDoubleDownDoubleLeft: "\u2562",
+          lineUpDownLeftDouble: "\u2561",
+          lineUpDownRight: "\u251C",
+          lineUpBoldDownBoldRightBold: "\u2523",
+          lineUpBoldDownBoldRight: "\u2520",
+          lineUpDownRightBold: "\u251D",
+          lineUpBoldDownRightBold: "\u2521",
+          lineUpDownBoldRightBold: "\u2522",
+          lineUpDownBoldRight: "\u251F",
+          lineUpBoldDownRight: "\u251E",
+          lineUpDoubleDownDoubleRightDouble: "\u2560",
+          lineUpDoubleDownDoubleRight: "\u255F",
+          lineUpDownRightDouble: "\u255E",
+          lineDownLeftRight: "\u252C",
+          lineDownBoldLeftBoldRightBold: "\u2533",
+          lineDownLeftBoldRightBold: "\u252F",
+          lineDownBoldLeftRight: "\u2530",
+          lineDownBoldLeftBoldRight: "\u2531",
+          lineDownBoldLeftRightBold: "\u2532",
+          lineDownLeftRightBold: "\u252E",
+          lineDownLeftBoldRight: "\u252D",
+          lineDownDoubleLeftDoubleRightDouble: "\u2566",
+          lineDownDoubleLeftRight: "\u2565",
+          lineDownLeftDoubleRightDouble: "\u2564",
+          lineUpLeftRight: "\u2534",
+          lineUpBoldLeftBoldRightBold: "\u253B",
+          lineUpLeftBoldRightBold: "\u2537",
+          lineUpBoldLeftRight: "\u2538",
+          lineUpBoldLeftBoldRight: "\u2539",
+          lineUpBoldLeftRightBold: "\u253A",
+          lineUpLeftRightBold: "\u2536",
+          lineUpLeftBoldRight: "\u2535",
+          lineUpDoubleLeftDoubleRightDouble: "\u2569",
+          lineUpDoubleLeftRight: "\u2568",
+          lineUpLeftDoubleRightDouble: "\u2567",
+          lineUpDownLeftRight: "\u253C",
+          lineUpBoldDownBoldLeftBoldRightBold: "\u254B",
+          lineUpDownBoldLeftBoldRightBold: "\u2548",
+          lineUpBoldDownLeftBoldRightBold: "\u2547",
+          lineUpBoldDownBoldLeftRightBold: "\u254A",
+          lineUpBoldDownBoldLeftBoldRight: "\u2549",
+          lineUpBoldDownLeftRight: "\u2540",
+          lineUpDownBoldLeftRight: "\u2541",
+          lineUpDownLeftBoldRight: "\u253D",
+          lineUpDownLeftRightBold: "\u253E",
+          lineUpBoldDownBoldLeftRight: "\u2542",
+          lineUpDownLeftBoldRightBold: "\u253F",
+          lineUpBoldDownLeftBoldRight: "\u2543",
+          lineUpBoldDownLeftRightBold: "\u2544",
+          lineUpDownBoldLeftBoldRight: "\u2545",
+          lineUpDownBoldLeftRightBold: "\u2546",
+          lineUpDoubleDownDoubleLeftDoubleRightDouble: "\u256C",
+          lineUpDoubleDownDoubleLeftRight: "\u256B",
+          lineUpDownLeftDoubleRightDouble: "\u256A",
+          lineCross: "\u2573",
+          lineBackslash: "\u2572",
+          lineSlash: "\u2571"
+        };
+        var specialMainSymbols = {
+          tick: "\u2714",
+          info: "\u2139",
+          warning: "\u26A0",
+          cross: "\u2718",
+          squareSmall: "\u25FB",
+          squareSmallFilled: "\u25FC",
+          circle: "\u25EF",
+          circleFilled: "\u25C9",
+          circleDotted: "\u25CC",
+          circleDouble: "\u25CE",
+          circleCircle: "\u24DE",
+          circleCross: "\u24E7",
+          circlePipe: "\u24BE",
+          radioOn: "\u25C9",
+          radioOff: "\u25EF",
+          checkboxOn: "\u2612",
+          checkboxOff: "\u2610",
+          checkboxCircleOn: "\u24E7",
+          checkboxCircleOff: "\u24BE",
+          pointer: "\u276F",
+          triangleUpOutline: "\u25B3",
+          triangleLeft: "\u25C0",
+          triangleRight: "\u25B6",
+          lozenge: "\u25C6",
+          lozengeOutline: "\u25C7",
+          hamburger: "\u2630",
+          smiley: "\u32E1",
+          mustache: "\u0DF4",
+          star: "\u2605",
+          play: "\u25B6",
+          nodejs: "\u2B22",
+          oneSeventh: "\u2150",
+          oneNinth: "\u2151",
+          oneTenth: "\u2152"
+        };
+        var specialFallbackSymbols = {
+          tick: "\u221A",
+          info: "i",
+          warning: "\u203C",
+          cross: "\xD7",
+          squareSmall: "\u25A1",
+          squareSmallFilled: "\u25A0",
+          circle: "( )",
+          circleFilled: "(*)",
+          circleDotted: "( )",
+          circleDouble: "( )",
+          circleCircle: "(\u25CB)",
+          circleCross: "(\xD7)",
+          circlePipe: "(\u2502)",
+          radioOn: "(*)",
+          radioOff: "( )",
+          checkboxOn: "[\xD7]",
+          checkboxOff: "[ ]",
+          checkboxCircleOn: "(\xD7)",
+          checkboxCircleOff: "( )",
+          pointer: ">",
+          triangleUpOutline: "\u2206",
+          triangleLeft: "\u25C4",
+          triangleRight: "\u25BA",
+          lozenge: "\u2666",
+          lozengeOutline: "\u25CA",
+          hamburger: "\u2261",
+          smiley: "\u263A",
+          mustache: "\u250C\u2500\u2510",
+          star: "\u2736",
+          play: "\u25BA",
+          nodejs: "\u2666",
+          oneSeventh: "1/7",
+          oneNinth: "1/9",
+          oneTenth: "1/10"
+        };
+        exports22.mainSymbols = {
+          ...common,
+          ...specialMainSymbols
+        };
+        exports22.fallbackSymbols = {
+          ...common,
+          ...specialFallbackSymbols
+        };
+        var shouldUseMain = isUnicodeSupported();
+        var figures = shouldUseMain ? exports22.mainSymbols : exports22.fallbackSymbols;
+        exports22.default = figures;
+        var replacements = Object.entries(specialMainSymbols);
+        var replaceSymbols = /* @__PURE__ */ __name((string, { useFallback = !shouldUseMain } = {}) => {
+          if (useFallback) {
+            for (const [key, mainSymbol] of replacements) {
+              const fallbackSymbol = exports22.fallbackSymbols[key];
+              if (!fallbackSymbol) {
+                throw new Error(`Unable to find fallback for ${key}`);
+              }
+              string = string.replaceAll(mainSymbol, fallbackSymbol);
+            }
+          }
+          return string;
+        }, "replaceSymbols");
+        exports22.replaceSymbols = replaceSymbols;
+      }
+    });
+    var require_theme = __commonJS2({
+      "@inquirer/core/dist/commonjs/lib/theme.js"(exports22) {
+        "use strict";
+        var __importDefault = exports22 && exports22.__importDefault || function(mod) {
+          return mod && mod.__esModule ? mod : { "default": mod };
+        };
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.defaultTheme = void 0;
+        var yoctocolors_cjs_1 = __importDefault(require_yoctocolors_cjs2());
+        var figures_1 = __importDefault(require_commonjs());
+        exports22.defaultTheme = {
+          prefix: {
+            idle: yoctocolors_cjs_1.default.blue("?"),
+            done: yoctocolors_cjs_1.default.green(figures_1.default.tick)
+          },
+          spinner: {
+            interval: 80,
+            frames: ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827", "\u2807", "\u280F"].map((frame) => yoctocolors_cjs_1.default.yellow(frame))
+          },
+          style: {
+            answer: yoctocolors_cjs_1.default.cyan,
+            message: yoctocolors_cjs_1.default.bold,
+            error: /* @__PURE__ */ __name((text) => yoctocolors_cjs_1.default.red(`> ${text}`), "error"),
+            defaultAnswer: /* @__PURE__ */ __name((text) => yoctocolors_cjs_1.default.dim(`(${text})`), "defaultAnswer"),
+            help: yoctocolors_cjs_1.default.dim,
+            highlight: yoctocolors_cjs_1.default.cyan,
+            key: /* @__PURE__ */ __name((text) => yoctocolors_cjs_1.default.cyan(yoctocolors_cjs_1.default.bold(`<${text}>`)), "key")
+          }
+        };
+      }
+    });
+    var require_make_theme = __commonJS2({
+      "@inquirer/core/dist/commonjs/lib/make-theme.js"(exports22) {
+        "use strict";
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.makeTheme = makeTheme;
+        var theme_ts_1 = require_theme();
+        function isPlainObject(value) {
+          if (typeof value !== "object" || value === null)
+            return false;
+          let proto = value;
+          while (Object.getPrototypeOf(proto) !== null) {
+            proto = Object.getPrototypeOf(proto);
+          }
+          return Object.getPrototypeOf(value) === proto;
+        }
+        __name(isPlainObject, "isPlainObject");
+        function deepMerge(...objects) {
+          const output = {};
+          for (const obj of objects) {
+            for (const [key, value] of Object.entries(obj)) {
+              const prevValue = output[key];
+              output[key] = isPlainObject(prevValue) && isPlainObject(value) ? deepMerge(prevValue, value) : value;
+            }
+          }
+          return output;
+        }
+        __name(deepMerge, "deepMerge");
+        function makeTheme(...themes) {
+          const themesToMerge = [
+            theme_ts_1.defaultTheme,
+            ...themes.filter((theme) => theme != null)
+          ];
+          return deepMerge(...themesToMerge);
+        }
+        __name(makeTheme, "makeTheme");
+      }
+    });
+    var require_use_prefix = __commonJS2({
+      "@inquirer/core/dist/commonjs/lib/use-prefix.js"(exports22) {
+        "use strict";
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.usePrefix = usePrefix;
+        var use_state_ts_1 = require_use_state();
+        var use_effect_ts_1 = require_use_effect();
+        var make_theme_ts_1 = require_make_theme();
+        function usePrefix({ status = "idle", theme }) {
+          const [showLoader, setShowLoader] = (0, use_state_ts_1.useState)(false);
+          const [tick, setTick] = (0, use_state_ts_1.useState)(0);
+          const { prefix, spinner } = (0, make_theme_ts_1.makeTheme)(theme);
+          (0, use_effect_ts_1.useEffect)(() => {
+            if (status === "loading") {
+              let tickInterval;
+              let inc = -1;
+              const delayTimeout = setTimeout(() => {
+                setShowLoader(true);
+                tickInterval = setInterval(() => {
+                  inc = inc + 1;
+                  setTick(inc % spinner.frames.length);
+                }, spinner.interval);
+              }, 300);
+              return () => {
+                clearTimeout(delayTimeout);
+                clearInterval(tickInterval);
+              };
+            } else {
+              setShowLoader(false);
+            }
+          }, [status]);
+          if (showLoader) {
+            return spinner.frames[tick];
+          }
+          const iconName = status === "loading" ? "idle" : status;
+          return typeof prefix === "string" ? prefix : prefix[iconName] ?? prefix["idle"];
+        }
+        __name(usePrefix, "usePrefix");
+      }
+    });
+    var require_use_memo = __commonJS2({
+      "@inquirer/core/dist/commonjs/lib/use-memo.js"(exports22) {
+        "use strict";
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.useMemo = useMemo;
+        var hook_engine_ts_1 = require_hook_engine();
+        function useMemo(fn, dependencies) {
+          return (0, hook_engine_ts_1.withPointer)((pointer) => {
+            const prev = pointer.get();
+            if (!prev || prev.dependencies.length !== dependencies.length || prev.dependencies.some((dep, i) => dep !== dependencies[i])) {
+              const value = fn();
+              pointer.set({ value, dependencies });
+              return value;
+            }
+            return prev.value;
+          });
+        }
+        __name(useMemo, "useMemo");
+      }
+    });
+    var require_use_ref = __commonJS2({
+      "@inquirer/core/dist/commonjs/lib/use-ref.js"(exports22) {
+        "use strict";
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.useRef = useRef;
+        var use_state_ts_1 = require_use_state();
+        function useRef(val) {
+          return (0, use_state_ts_1.useState)({ current: val })[0];
+        }
+        __name(useRef, "useRef");
+      }
+    });
+    var require_use_keypress = __commonJS2({
+      "@inquirer/core/dist/commonjs/lib/use-keypress.js"(exports22) {
+        "use strict";
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.useKeypress = useKeypress;
+        var use_ref_ts_1 = require_use_ref();
+        var use_effect_ts_1 = require_use_effect();
+        var hook_engine_ts_1 = require_hook_engine();
+        function useKeypress(userHandler) {
+          const signal = (0, use_ref_ts_1.useRef)(userHandler);
+          signal.current = userHandler;
+          (0, use_effect_ts_1.useEffect)((rl) => {
+            let ignore = false;
+            const handler = (0, hook_engine_ts_1.withUpdates)((_input, event) => {
+              if (ignore)
+                return;
+              void signal.current(event, rl);
+            });
+            rl.input.on("keypress", handler);
+            return () => {
+              ignore = true;
+              rl.input.removeListener("keypress", handler);
+            };
+          }, []);
+        }
+        __name(useKeypress, "useKeypress");
+      }
+    });
+    var require_cli_width = __commonJS2({
+      "cli-width/index.js"(exports22, module22) {
+        "use strict";
+        module22.exports = cliWidth;
+        function normalizeOpts(options) {
+          const defaultOpts = {
+            defaultWidth: 0,
+            output: process.stdout,
+            tty: require("node:tty")
+          };
+          if (!options) {
+            return defaultOpts;
+          }
+          Object.keys(defaultOpts).forEach(function(key) {
+            if (!options[key]) {
+              options[key] = defaultOpts[key];
+            }
+          });
+          return options;
+        }
+        __name(normalizeOpts, "normalizeOpts");
+        function cliWidth(options) {
+          const opts = normalizeOpts(options);
+          if (opts.output.getWindowSize) {
+            return opts.output.getWindowSize()[0] || opts.defaultWidth;
+          }
+          if (opts.tty.getWindowSize) {
+            return opts.tty.getWindowSize()[1] || opts.defaultWidth;
+          }
+          if (opts.output.columns) {
+            return opts.output.columns;
+          }
+          if (process.env.CLI_WIDTH) {
+            const width = parseInt(process.env.CLI_WIDTH, 10);
+            if (!isNaN(width) && width !== 0) {
+              return width;
+            }
+          }
+          return opts.defaultWidth;
+        }
+        __name(cliWidth, "cliWidth");
+      }
+    });
+    function ansiRegex2({ onlyFirst = false } = {}) {
+      const ST = "(?:\\u0007|\\u001B\\u005C|\\u009C)";
+      const osc = `(?:\\u001B\\][\\s\\S]*?${ST})`;
+      const csi = "[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]";
+      const pattern = `${osc}|${csi}`;
+      return new RegExp(pattern, onlyFirst ? void 0 : "g");
+    }
+    var init_ansi_regex = __esm({
+      "ansi-regex/index.js"() {
+        __name(ansiRegex2, "ansiRegex");
+      }
+    });
+    function stripAnsi2(string) {
+      if (typeof string !== "string") {
+        throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
+      }
+      return string.replace(regex, "");
+    }
+    var regex;
+    var init_strip_ansi = __esm({
+      "strip-ansi/index.js"() {
+        init_ansi_regex();
+        regex = ansiRegex2();
+        __name(stripAnsi2, "stripAnsi");
+      }
+    });
+    function isAmbiguous(x) {
+      return x === 161 || x === 164 || x === 167 || x === 168 || x === 170 || x === 173 || x === 174 || x >= 176 && x <= 180 || x >= 182 && x <= 186 || x >= 188 && x <= 191 || x === 198 || x === 208 || x === 215 || x === 216 || x >= 222 && x <= 225 || x === 230 || x >= 232 && x <= 234 || x === 236 || x === 237 || x === 240 || x === 242 || x === 243 || x >= 247 && x <= 250 || x === 252 || x === 254 || x === 257 || x === 273 || x === 275 || x === 283 || x === 294 || x === 295 || x === 299 || x >= 305 && x <= 307 || x === 312 || x >= 319 && x <= 322 || x === 324 || x >= 328 && x <= 331 || x === 333 || x === 338 || x === 339 || x === 358 || x === 359 || x === 363 || x === 462 || x === 464 || x === 466 || x === 468 || x === 470 || x === 472 || x === 474 || x === 476 || x === 593 || x === 609 || x === 708 || x === 711 || x >= 713 && x <= 715 || x === 717 || x === 720 || x >= 728 && x <= 731 || x === 733 || x === 735 || x >= 768 && x <= 879 || x >= 913 && x <= 929 || x >= 931 && x <= 937 || x >= 945 && x <= 961 || x >= 963 && x <= 969 || x === 1025 || x >= 1040 && x <= 1103 || x === 1105 || x === 8208 || x >= 8211 && x <= 8214 || x === 8216 || x === 8217 || x === 8220 || x === 8221 || x >= 8224 && x <= 8226 || x >= 8228 && x <= 8231 || x === 8240 || x === 8242 || x === 8243 || x === 8245 || x === 8251 || x === 8254 || x === 8308 || x === 8319 || x >= 8321 && x <= 8324 || x === 8364 || x === 8451 || x === 8453 || x === 8457 || x === 8467 || x === 8470 || x === 8481 || x === 8482 || x === 8486 || x === 8491 || x === 8531 || x === 8532 || x >= 8539 && x <= 8542 || x >= 8544 && x <= 8555 || x >= 8560 && x <= 8569 || x === 8585 || x >= 8592 && x <= 8601 || x === 8632 || x === 8633 || x === 8658 || x === 8660 || x === 8679 || x === 8704 || x === 8706 || x === 8707 || x === 8711 || x === 8712 || x === 8715 || x === 8719 || x === 8721 || x === 8725 || x === 8730 || x >= 8733 && x <= 8736 || x === 8739 || x === 8741 || x >= 8743 && x <= 8748 || x === 8750 || x >= 8756 && x <= 8759 || x === 8764 || x === 8765 || x === 8776 || x === 8780 || x === 8786 || x === 8800 || x === 8801 || x >= 8804 && x <= 8807 || x === 8810 || x === 8811 || x === 8814 || x === 8815 || x === 8834 || x === 8835 || x === 8838 || x === 8839 || x === 8853 || x === 8857 || x === 8869 || x === 8895 || x === 8978 || x >= 9312 && x <= 9449 || x >= 9451 && x <= 9547 || x >= 9552 && x <= 9587 || x >= 9600 && x <= 9615 || x >= 9618 && x <= 9621 || x === 9632 || x === 9633 || x >= 9635 && x <= 9641 || x === 9650 || x === 9651 || x === 9654 || x === 9655 || x === 9660 || x === 9661 || x === 9664 || x === 9665 || x >= 9670 && x <= 9672 || x === 9675 || x >= 9678 && x <= 9681 || x >= 9698 && x <= 9701 || x === 9711 || x === 9733 || x === 9734 || x === 9737 || x === 9742 || x === 9743 || x === 9756 || x === 9758 || x === 9792 || x === 9794 || x === 9824 || x === 9825 || x >= 9827 && x <= 9829 || x >= 9831 && x <= 9834 || x === 9836 || x === 9837 || x === 9839 || x === 9886 || x === 9887 || x === 9919 || x >= 9926 && x <= 9933 || x >= 9935 && x <= 9939 || x >= 9941 && x <= 9953 || x === 9955 || x === 9960 || x === 9961 || x >= 9963 && x <= 9969 || x === 9972 || x >= 9974 && x <= 9977 || x === 9979 || x === 9980 || x === 9982 || x === 9983 || x === 10045 || x >= 10102 && x <= 10111 || x >= 11094 && x <= 11097 || x >= 12872 && x <= 12879 || x >= 57344 && x <= 63743 || x >= 65024 && x <= 65039 || x === 65533 || x >= 127232 && x <= 127242 || x >= 127248 && x <= 127277 || x >= 127280 && x <= 127337 || x >= 127344 && x <= 127373 || x === 127375 || x === 127376 || x >= 127387 && x <= 127404 || x >= 917760 && x <= 917999 || x >= 983040 && x <= 1048573 || x >= 1048576 && x <= 1114109;
+    }
+    function isFullWidth(x) {
+      return x === 12288 || x >= 65281 && x <= 65376 || x >= 65504 && x <= 65510;
+    }
+    function isWide(x) {
+      return x >= 4352 && x <= 4447 || x === 8986 || x === 8987 || x === 9001 || x === 9002 || x >= 9193 && x <= 9196 || x === 9200 || x === 9203 || x === 9725 || x === 9726 || x === 9748 || x === 9749 || x >= 9776 && x <= 9783 || x >= 9800 && x <= 9811 || x === 9855 || x >= 9866 && x <= 9871 || x === 9875 || x === 9889 || x === 9898 || x === 9899 || x === 9917 || x === 9918 || x === 9924 || x === 9925 || x === 9934 || x === 9940 || x === 9962 || x === 9970 || x === 9971 || x === 9973 || x === 9978 || x === 9981 || x === 9989 || x === 9994 || x === 9995 || x === 10024 || x === 10060 || x === 10062 || x >= 10067 && x <= 10069 || x === 10071 || x >= 10133 && x <= 10135 || x === 10160 || x === 10175 || x === 11035 || x === 11036 || x === 11088 || x === 11093 || x >= 11904 && x <= 11929 || x >= 11931 && x <= 12019 || x >= 12032 && x <= 12245 || x >= 12272 && x <= 12287 || x >= 12289 && x <= 12350 || x >= 12353 && x <= 12438 || x >= 12441 && x <= 12543 || x >= 12549 && x <= 12591 || x >= 12593 && x <= 12686 || x >= 12688 && x <= 12773 || x >= 12783 && x <= 12830 || x >= 12832 && x <= 12871 || x >= 12880 && x <= 42124 || x >= 42128 && x <= 42182 || x >= 43360 && x <= 43388 || x >= 44032 && x <= 55203 || x >= 63744 && x <= 64255 || x >= 65040 && x <= 65049 || x >= 65072 && x <= 65106 || x >= 65108 && x <= 65126 || x >= 65128 && x <= 65131 || x >= 94176 && x <= 94180 || x === 94192 || x === 94193 || x >= 94208 && x <= 100343 || x >= 100352 && x <= 101589 || x >= 101631 && x <= 101640 || x >= 110576 && x <= 110579 || x >= 110581 && x <= 110587 || x === 110589 || x === 110590 || x >= 110592 && x <= 110882 || x === 110898 || x >= 110928 && x <= 110930 || x === 110933 || x >= 110948 && x <= 110951 || x >= 110960 && x <= 111355 || x >= 119552 && x <= 119638 || x >= 119648 && x <= 119670 || x === 126980 || x === 127183 || x === 127374 || x >= 127377 && x <= 127386 || x >= 127488 && x <= 127490 || x >= 127504 && x <= 127547 || x >= 127552 && x <= 127560 || x === 127568 || x === 127569 || x >= 127584 && x <= 127589 || x >= 127744 && x <= 127776 || x >= 127789 && x <= 127797 || x >= 127799 && x <= 127868 || x >= 127870 && x <= 127891 || x >= 127904 && x <= 127946 || x >= 127951 && x <= 127955 || x >= 127968 && x <= 127984 || x === 127988 || x >= 127992 && x <= 128062 || x === 128064 || x >= 128066 && x <= 128252 || x >= 128255 && x <= 128317 || x >= 128331 && x <= 128334 || x >= 128336 && x <= 128359 || x === 128378 || x === 128405 || x === 128406 || x === 128420 || x >= 128507 && x <= 128591 || x >= 128640 && x <= 128709 || x === 128716 || x >= 128720 && x <= 128722 || x >= 128725 && x <= 128727 || x >= 128732 && x <= 128735 || x === 128747 || x === 128748 || x >= 128756 && x <= 128764 || x >= 128992 && x <= 129003 || x === 129008 || x >= 129292 && x <= 129338 || x >= 129340 && x <= 129349 || x >= 129351 && x <= 129535 || x >= 129648 && x <= 129660 || x >= 129664 && x <= 129673 || x >= 129679 && x <= 129734 || x >= 129742 && x <= 129756 || x >= 129759 && x <= 129769 || x >= 129776 && x <= 129784 || x >= 131072 && x <= 196605 || x >= 196608 && x <= 262141;
+    }
+    var init_lookup = __esm({
+      "get-east-asian-width/lookup.js"() {
+        __name(isAmbiguous, "isAmbiguous");
+        __name(isFullWidth, "isFullWidth");
+        __name(isWide, "isWide");
+      }
+    });
+    function validate(codePoint) {
+      if (!Number.isSafeInteger(codePoint)) {
+        throw new TypeError(`Expected a code point, got \`${typeof codePoint}\`.`);
+      }
+    }
+    function eastAsianWidth(codePoint, { ambiguousAsWide = false } = {}) {
+      validate(codePoint);
+      if (isFullWidth(codePoint) || isWide(codePoint) || ambiguousAsWide && isAmbiguous(codePoint)) {
+        return 2;
+      }
+      return 1;
+    }
+    var init_get_east_asian_width = __esm({
+      "get-east-asian-width/index.js"() {
+        init_lookup();
+        __name(validate, "validate");
+        __name(eastAsianWidth, "eastAsianWidth");
+      }
+    });
+    function baseVisible(segment) {
+      return segment.replace(leadingNonPrintingRegex, "");
+    }
+    function isZeroWidthCluster(segment) {
+      return zeroWidthClusterRegex.test(segment);
+    }
+    function trailingHalfwidthWidth(segment, eastAsianWidthOptions) {
+      let extra = 0;
+      if (segment.length > 1) {
+        for (const char of segment.slice(1)) {
+          if (char >= "\uFF00" && char <= "\uFFEF") {
+            extra += eastAsianWidth(char.codePointAt(0), eastAsianWidthOptions);
+          }
+        }
+      }
+      return extra;
+    }
+    function stringWidth(input2, options = {}) {
+      if (typeof input2 !== "string" || input2.length === 0) {
+        return 0;
+      }
+      const {
+        ambiguousIsNarrow = true,
+        countAnsiEscapeCodes = false
+      } = options;
+      let string = input2;
+      if (!countAnsiEscapeCodes) {
+        string = stripAnsi2(string);
+      }
+      if (string.length === 0) {
+        return 0;
+      }
+      let width = 0;
+      const eastAsianWidthOptions = { ambiguousAsWide: !ambiguousIsNarrow };
+      for (const { segment } of segmenter.segment(string)) {
+        if (isZeroWidthCluster(segment)) {
+          continue;
+        }
+        if (rgiEmojiRegex.test(segment)) {
+          width += 2;
+          continue;
+        }
+        const codePoint = baseVisible(segment).codePointAt(0);
+        width += eastAsianWidth(codePoint, eastAsianWidthOptions);
+        width += trailingHalfwidthWidth(segment, eastAsianWidthOptions);
+      }
+      return width;
+    }
+    var segmenter;
+    var zeroWidthClusterRegex;
+    var leadingNonPrintingRegex;
+    var rgiEmojiRegex;
+    var init_string_width = __esm({
+      "string-width/index.js"() {
+        init_strip_ansi();
+        init_get_east_asian_width();
+        segmenter = new Intl.Segmenter();
+        zeroWidthClusterRegex = new RegExp("^(?:\\p{Default_Ignorable_Code_Point}|\\p{Control}|\\p{Mark}|\\p{Surrogate})+$", "v");
+        leadingNonPrintingRegex = new RegExp("^[\\p{Default_Ignorable_Code_Point}\\p{Control}\\p{Format}\\p{Mark}\\p{Surrogate}]+", "v");
+        rgiEmojiRegex = new RegExp("^\\p{RGI_Emoji}$", "v");
+        __name(baseVisible, "baseVisible");
+        __name(isZeroWidthCluster, "isZeroWidthCluster");
+        __name(trailingHalfwidthWidth, "trailingHalfwidthWidth");
+        __name(stringWidth, "stringWidth");
+      }
+    });
+    function assembleStyles() {
+      const codes = /* @__PURE__ */ new Map();
+      for (const [groupName, group] of Object.entries(styles)) {
+        for (const [styleName, style] of Object.entries(group)) {
+          styles[styleName] = {
+            open: `\x1B[${style[0]}m`,
+            close: `\x1B[${style[1]}m`
+          };
+          group[styleName] = styles[styleName];
+          codes.set(style[0], style[1]);
+        }
+        Object.defineProperty(styles, groupName, {
+          value: group,
+          enumerable: false
+        });
+      }
+      Object.defineProperty(styles, "codes", {
+        value: codes,
+        enumerable: false
+      });
+      styles.color.close = "\x1B[39m";
+      styles.bgColor.close = "\x1B[49m";
+      styles.color.ansi = wrapAnsi16();
+      styles.color.ansi256 = wrapAnsi256();
+      styles.color.ansi16m = wrapAnsi16m();
+      styles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);
+      styles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);
+      styles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);
+      Object.defineProperties(styles, {
+        rgbToAnsi256: {
+          value(red, green, blue) {
+            if (red === green && green === blue) {
+              if (red < 8) {
+                return 16;
+              }
+              if (red > 248) {
+                return 231;
+              }
+              return Math.round((red - 8) / 247 * 24) + 232;
+            }
+            return 16 + 36 * Math.round(red / 255 * 5) + 6 * Math.round(green / 255 * 5) + Math.round(blue / 255 * 5);
+          },
+          enumerable: false
+        },
+        hexToRgb: {
+          value(hex) {
+            const matches = /[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16));
+            if (!matches) {
+              return [0, 0, 0];
+            }
+            let [colorString] = matches;
+            if (colorString.length === 3) {
+              colorString = [...colorString].map((character) => character + character).join("");
+            }
+            const integer = Number.parseInt(colorString, 16);
+            return [
+              /* eslint-disable no-bitwise */
+              integer >> 16 & 255,
+              integer >> 8 & 255,
+              integer & 255
+              /* eslint-enable no-bitwise */
+            ];
+          },
+          enumerable: false
+        },
+        hexToAnsi256: {
+          value: /* @__PURE__ */ __name((hex) => styles.rgbToAnsi256(...styles.hexToRgb(hex)), "value"),
+          enumerable: false
+        },
+        ansi256ToAnsi: {
+          value(code) {
+            if (code < 8) {
+              return 30 + code;
+            }
+            if (code < 16) {
+              return 90 + (code - 8);
+            }
+            let red;
+            let green;
+            let blue;
+            if (code >= 232) {
+              red = ((code - 232) * 10 + 8) / 255;
+              green = red;
+              blue = red;
+            } else {
+              code -= 16;
+              const remainder = code % 36;
+              red = Math.floor(code / 36) / 5;
+              green = Math.floor(remainder / 6) / 5;
+              blue = remainder % 6 / 5;
+            }
+            const value = Math.max(red, green, blue) * 2;
+            if (value === 0) {
+              return 30;
+            }
+            let result = 30 + (Math.round(blue) << 2 | Math.round(green) << 1 | Math.round(red));
+            if (value === 2) {
+              result += 60;
+            }
+            return result;
+          },
+          enumerable: false
+        },
+        rgbToAnsi: {
+          value: /* @__PURE__ */ __name((red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)), "value"),
+          enumerable: false
+        },
+        hexToAnsi: {
+          value: /* @__PURE__ */ __name((hex) => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)), "value"),
+          enumerable: false
+        }
+      });
+      return styles;
+    }
+    var ANSI_BACKGROUND_OFFSET;
+    var wrapAnsi16;
+    var wrapAnsi256;
+    var wrapAnsi16m;
+    var styles;
+    var modifierNames;
+    var foregroundColorNames;
+    var backgroundColorNames;
+    var colorNames;
+    var ansiStyles;
+    var ansi_styles_default;
+    var init_ansi_styles = __esm({
+      "ansi-styles/index.js"() {
+        ANSI_BACKGROUND_OFFSET = 10;
+        wrapAnsi16 = /* @__PURE__ */ __name((offset = 0) => (code) => `\x1B[${code + offset}m`, "wrapAnsi16");
+        wrapAnsi256 = /* @__PURE__ */ __name((offset = 0) => (code) => `\x1B[${38 + offset};5;${code}m`, "wrapAnsi256");
+        wrapAnsi16m = /* @__PURE__ */ __name((offset = 0) => (red, green, blue) => `\x1B[${38 + offset};2;${red};${green};${blue}m`, "wrapAnsi16m");
+        styles = {
+          modifier: {
+            reset: [0, 0],
+            // 21 isn't widely supported and 22 does the same thing
+            bold: [1, 22],
+            dim: [2, 22],
+            italic: [3, 23],
+            underline: [4, 24],
+            overline: [53, 55],
+            inverse: [7, 27],
+            hidden: [8, 28],
+            strikethrough: [9, 29]
+          },
+          color: {
+            black: [30, 39],
+            red: [31, 39],
+            green: [32, 39],
+            yellow: [33, 39],
+            blue: [34, 39],
+            magenta: [35, 39],
+            cyan: [36, 39],
+            white: [37, 39],
+            // Bright color
+            blackBright: [90, 39],
+            gray: [90, 39],
+            // Alias of `blackBright`
+            grey: [90, 39],
+            // Alias of `blackBright`
+            redBright: [91, 39],
+            greenBright: [92, 39],
+            yellowBright: [93, 39],
+            blueBright: [94, 39],
+            magentaBright: [95, 39],
+            cyanBright: [96, 39],
+            whiteBright: [97, 39]
+          },
+          bgColor: {
+            bgBlack: [40, 49],
+            bgRed: [41, 49],
+            bgGreen: [42, 49],
+            bgYellow: [43, 49],
+            bgBlue: [44, 49],
+            bgMagenta: [45, 49],
+            bgCyan: [46, 49],
+            bgWhite: [47, 49],
+            // Bright color
+            bgBlackBright: [100, 49],
+            bgGray: [100, 49],
+            // Alias of `bgBlackBright`
+            bgGrey: [100, 49],
+            // Alias of `bgBlackBright`
+            bgRedBright: [101, 49],
+            bgGreenBright: [102, 49],
+            bgYellowBright: [103, 49],
+            bgBlueBright: [104, 49],
+            bgMagentaBright: [105, 49],
+            bgCyanBright: [106, 49],
+            bgWhiteBright: [107, 49]
+          }
+        };
+        modifierNames = Object.keys(styles.modifier);
+        foregroundColorNames = Object.keys(styles.color);
+        backgroundColorNames = Object.keys(styles.bgColor);
+        colorNames = [...foregroundColorNames, ...backgroundColorNames];
+        __name(assembleStyles, "assembleStyles");
+        ansiStyles = assembleStyles();
+        ansi_styles_default = ansiStyles;
+      }
+    });
+    var wrap_ansi_exports = {};
+    __export2(wrap_ansi_exports, {
+      default: () => wrapAnsi
+    });
+    function wrapAnsi(string, columns, options) {
+      return String(string).normalize().replaceAll("\r\n", "\n").split("\n").map((line) => exec(line, columns, options)).join("\n");
+    }
+    var ESCAPES;
+    var END_CODE;
+    var ANSI_ESCAPE_BELL;
+    var ANSI_CSI;
+    var ANSI_OSC;
+    var ANSI_SGR_TERMINATOR;
+    var ANSI_ESCAPE_LINK;
+    var wrapAnsiCode;
+    var wrapAnsiHyperlink;
+    var wordLengths;
+    var wrapWord;
+    var stringVisibleTrimSpacesRight;
+    var exec;
+    var init_wrap_ansi = __esm({
+      "wrap-ansi/index.js"() {
+        init_string_width();
+        init_strip_ansi();
+        init_ansi_styles();
+        ESCAPES = /* @__PURE__ */ new Set([
+          "\x1B",
+          "\x9B"
+        ]);
+        END_CODE = 39;
+        ANSI_ESCAPE_BELL = "\x07";
+        ANSI_CSI = "[";
+        ANSI_OSC = "]";
+        ANSI_SGR_TERMINATOR = "m";
+        ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;
+        wrapAnsiCode = /* @__PURE__ */ __name((code) => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`, "wrapAnsiCode");
+        wrapAnsiHyperlink = /* @__PURE__ */ __name((url) => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${url}${ANSI_ESCAPE_BELL}`, "wrapAnsiHyperlink");
+        wordLengths = /* @__PURE__ */ __name((string) => string.split(" ").map((character) => stringWidth(character)), "wordLengths");
+        wrapWord = /* @__PURE__ */ __name((rows, word, columns) => {
+          const characters = [...word];
+          let isInsideEscape = false;
+          let isInsideLinkEscape = false;
+          let visible = stringWidth(stripAnsi2(rows.at(-1)));
+          for (const [index, character] of characters.entries()) {
+            const characterLength = stringWidth(character);
+            if (visible + characterLength <= columns) {
+              rows[rows.length - 1] += character;
+            } else {
+              rows.push(character);
+              visible = 0;
+            }
+            if (ESCAPES.has(character)) {
+              isInsideEscape = true;
+              const ansiEscapeLinkCandidate = characters.slice(index + 1, index + 1 + ANSI_ESCAPE_LINK.length).join("");
+              isInsideLinkEscape = ansiEscapeLinkCandidate === ANSI_ESCAPE_LINK;
+            }
+            if (isInsideEscape) {
+              if (isInsideLinkEscape) {
+                if (character === ANSI_ESCAPE_BELL) {
+                  isInsideEscape = false;
+                  isInsideLinkEscape = false;
+                }
+              } else if (character === ANSI_SGR_TERMINATOR) {
+                isInsideEscape = false;
+              }
+              continue;
+            }
+            visible += characterLength;
+            if (visible === columns && index < characters.length - 1) {
+              rows.push("");
+              visible = 0;
+            }
+          }
+          if (!visible && rows.at(-1).length > 0 && rows.length > 1) {
+            rows[rows.length - 2] += rows.pop();
+          }
+        }, "wrapWord");
+        stringVisibleTrimSpacesRight = /* @__PURE__ */ __name((string) => {
+          const words = string.split(" ");
+          let last = words.length;
+          while (last > 0) {
+            if (stringWidth(words[last - 1]) > 0) {
+              break;
+            }
+            last--;
+          }
+          if (last === words.length) {
+            return string;
+          }
+          return words.slice(0, last).join(" ") + words.slice(last).join("");
+        }, "stringVisibleTrimSpacesRight");
+        exec = /* @__PURE__ */ __name((string, columns, options = {}) => {
+          if (options.trim !== false && string.trim() === "") {
+            return "";
+          }
+          let returnValue = "";
+          let escapeCode;
+          let escapeUrl;
+          const lengths = wordLengths(string);
+          let rows = [""];
+          for (const [index, word] of string.split(" ").entries()) {
+            if (options.trim !== false) {
+              rows[rows.length - 1] = rows.at(-1).trimStart();
+            }
+            let rowLength = stringWidth(rows.at(-1));
+            if (index !== 0) {
+              if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {
+                rows.push("");
+                rowLength = 0;
+              }
+              if (rowLength > 0 || options.trim === false) {
+                rows[rows.length - 1] += " ";
+                rowLength++;
+              }
+            }
+            if (options.hard && lengths[index] > columns) {
+              const remainingColumns = columns - rowLength;
+              const breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);
+              const breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);
+              if (breaksStartingNextLine < breaksStartingThisLine) {
+                rows.push("");
+              }
+              wrapWord(rows, word, columns);
+              continue;
+            }
+            if (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {
+              if (options.wordWrap === false && rowLength < columns) {
+                wrapWord(rows, word, columns);
+                continue;
+              }
+              rows.push("");
+            }
+            if (rowLength + lengths[index] > columns && options.wordWrap === false) {
+              wrapWord(rows, word, columns);
+              continue;
+            }
+            rows[rows.length - 1] += word;
+          }
+          if (options.trim !== false) {
+            rows = rows.map((row) => stringVisibleTrimSpacesRight(row));
+          }
+          const preString = rows.join("\n");
+          const pre = [...preString];
+          let preStringIndex = 0;
+          for (const [index, character] of pre.entries()) {
+            returnValue += character;
+            if (ESCAPES.has(character)) {
+              const { groups } = new RegExp(`(?:\\${ANSI_CSI}(?\\d+)m|\\${ANSI_ESCAPE_LINK}(?.*)${ANSI_ESCAPE_BELL})`).exec(preString.slice(preStringIndex)) || { groups: {} };
+              if (groups.code !== void 0) {
+                const code2 = Number.parseFloat(groups.code);
+                escapeCode = code2 === END_CODE ? void 0 : code2;
+              } else if (groups.uri !== void 0) {
+                escapeUrl = groups.uri.length === 0 ? void 0 : groups.uri;
+              }
+            }
+            const code = ansi_styles_default.codes.get(Number(escapeCode));
+            if (pre[index + 1] === "\n") {
+              if (escapeUrl) {
+                returnValue += wrapAnsiHyperlink("");
+              }
+              if (escapeCode && code) {
+                returnValue += wrapAnsiCode(code);
+              }
+            } else if (character === "\n") {
+              if (escapeCode && code) {
+                returnValue += wrapAnsiCode(escapeCode);
+              }
+              if (escapeUrl) {
+                returnValue += wrapAnsiHyperlink(escapeUrl);
+              }
+            }
+            preStringIndex += character.length;
+          }
+          return returnValue;
+        }, "exec");
+        __name(wrapAnsi, "wrapAnsi");
+      }
+    });
+    var require_utils2 = __commonJS2({
+      "@inquirer/core/dist/commonjs/lib/utils.js"(exports22) {
+        "use strict";
+        var __importDefault = exports22 && exports22.__importDefault || function(mod) {
+          return mod && mod.__esModule ? mod : { "default": mod };
+        };
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.breakLines = breakLines;
+        exports22.readlineWidth = readlineWidth;
+        var cli_width_1 = __importDefault(require_cli_width());
+        var wrap_ansi_1 = __importDefault((init_wrap_ansi(), __toCommonJS2(wrap_ansi_exports)));
+        var hook_engine_ts_1 = require_hook_engine();
+        function breakLines(content, width) {
+          return content.split("\n").flatMap((line) => (0, wrap_ansi_1.default)(line, width, { trim: false, hard: true }).split("\n").map((str) => str.trimEnd())).join("\n");
+        }
+        __name(breakLines, "breakLines");
+        function readlineWidth() {
+          return (0, cli_width_1.default)({ defaultWidth: 80, output: (0, hook_engine_ts_1.readline)().output });
+        }
+        __name(readlineWidth, "readlineWidth");
+      }
+    });
+    var require_use_pagination = __commonJS2({
+      "@inquirer/core/dist/commonjs/lib/pagination/use-pagination.js"(exports22) {
+        "use strict";
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.usePagination = usePagination;
+        var use_ref_ts_1 = require_use_ref();
+        var utils_ts_1 = require_utils2();
+        function usePointerPosition({ active, renderedItems, pageSize, loop }) {
+          const state = (0, use_ref_ts_1.useRef)({
+            lastPointer: active,
+            lastActive: void 0
+          });
+          const { lastPointer, lastActive } = state.current;
+          const middle = Math.floor(pageSize / 2);
+          const renderedLength = renderedItems.reduce((acc, item) => acc + item.length, 0);
+          const defaultPointerPosition = renderedItems.slice(0, active).reduce((acc, item) => acc + item.length, 0);
+          let pointer = defaultPointerPosition;
+          if (renderedLength > pageSize) {
+            if (loop) {
+              pointer = lastPointer;
+              if (
+                // First render, skip this logic.
+                lastActive != null && // Only move the pointer down when the user moves down.
+                lastActive < active && // Check user didn't move up across page boundary.
+                active - lastActive < pageSize
+              ) {
+                pointer = Math.min(
+                  // Furthest allowed position for the pointer is the middle of the list
+                  middle,
+                  Math.abs(active - lastActive) === 1 ? Math.min(
+                    // Move the pointer at most the height of the last active item.
+                    lastPointer + (renderedItems[lastActive]?.length ?? 0),
+                    // If the user moved by one item, move the pointer to the natural position of the active item as
+                    // long as it doesn't move the cursor up.
+                    Math.max(defaultPointerPosition, lastPointer)
+                  ) : (
+                    // Otherwise, move the pointer down by the difference between the active and last active item.
+                    lastPointer + active - lastActive
+                  )
+                );
+              }
+            } else {
+              const spaceUnderActive = renderedItems.slice(active).reduce((acc, item) => acc + item.length, 0);
+              pointer = spaceUnderActive < pageSize - middle ? (
+                // If the active item is near the end of the list, progressively move the cursor towards the end.
+                pageSize - spaceUnderActive
+              ) : (
+                // Otherwise, progressively move the pointer to the middle of the list.
+                Math.min(defaultPointerPosition, middle)
+              );
+            }
+          }
+          state.current.lastPointer = pointer;
+          state.current.lastActive = active;
+          return pointer;
+        }
+        __name(usePointerPosition, "usePointerPosition");
+        function usePagination({ items, active, renderItem, pageSize, loop = true }) {
+          const width = (0, utils_ts_1.readlineWidth)();
+          const bound = /* @__PURE__ */ __name((num) => (num % items.length + items.length) % items.length, "bound");
+          const renderedItems = items.map((item, index) => {
+            if (item == null)
+              return [];
+            return (0, utils_ts_1.breakLines)(renderItem({ item, index, isActive: index === active }), width).split("\n");
+          });
+          const renderedLength = renderedItems.reduce((acc, item) => acc + item.length, 0);
+          const renderItemAtIndex = /* @__PURE__ */ __name((index) => renderedItems[index] ?? [], "renderItemAtIndex");
+          const pointer = usePointerPosition({ active, renderedItems, pageSize, loop });
+          const activeItem = renderItemAtIndex(active).slice(0, pageSize);
+          const activeItemPosition = pointer + activeItem.length <= pageSize ? pointer : pageSize - activeItem.length;
+          const pageBuffer = Array.from({ length: pageSize });
+          pageBuffer.splice(activeItemPosition, activeItem.length, ...activeItem);
+          const itemVisited = /* @__PURE__ */ new Set([active]);
+          let bufferPointer = activeItemPosition + activeItem.length;
+          let itemPointer = bound(active + 1);
+          while (bufferPointer < pageSize && !itemVisited.has(itemPointer) && (loop && renderedLength > pageSize ? itemPointer !== active : itemPointer > active)) {
+            const lines = renderItemAtIndex(itemPointer);
+            const linesToAdd = lines.slice(0, pageSize - bufferPointer);
+            pageBuffer.splice(bufferPointer, linesToAdd.length, ...linesToAdd);
+            itemVisited.add(itemPointer);
+            bufferPointer += linesToAdd.length;
+            itemPointer = bound(itemPointer + 1);
+          }
+          bufferPointer = activeItemPosition - 1;
+          itemPointer = bound(active - 1);
+          while (bufferPointer >= 0 && !itemVisited.has(itemPointer) && (loop && renderedLength > pageSize ? itemPointer !== active : itemPointer < active)) {
+            const lines = renderItemAtIndex(itemPointer);
+            const linesToAdd = lines.slice(Math.max(0, lines.length - bufferPointer - 1));
+            pageBuffer.splice(bufferPointer - linesToAdd.length + 1, linesToAdd.length, ...linesToAdd);
+            itemVisited.add(itemPointer);
+            bufferPointer -= linesToAdd.length;
+            itemPointer = bound(itemPointer - 1);
+          }
+          return pageBuffer.filter((line) => typeof line === "string").join("\n");
+        }
+        __name(usePagination, "usePagination");
+      }
+    });
+    var require_lib = __commonJS2({
+      "mute-stream/lib/index.js"(exports22, module22) {
+        var Stream = require("node:stream");
+        var MuteStream = class extends Stream {
+          static {
+            __name(this, "MuteStream");
+          }
+          #isTTY = null;
+          constructor(opts = {}) {
+            super(opts);
+            this.writable = this.readable = true;
+            this.muted = false;
+            this.on("pipe", this._onpipe);
+            this.replace = opts.replace;
+            this._prompt = opts.prompt || null;
+            this._hadControl = false;
+          }
+          #destSrc(key, def) {
+            if (this._dest) {
+              return this._dest[key];
+            }
+            if (this._src) {
+              return this._src[key];
+            }
+            return def;
+          }
+          #proxy(method, ...args) {
+            if (typeof this._dest?.[method] === "function") {
+              this._dest[method](...args);
+            }
+            if (typeof this._src?.[method] === "function") {
+              this._src[method](...args);
+            }
+          }
+          get isTTY() {
+            if (this.#isTTY !== null) {
+              return this.#isTTY;
+            }
+            return this.#destSrc("isTTY", false);
+          }
+          // basically just get replace the getter/setter with a regular value
+          set isTTY(val) {
+            this.#isTTY = val;
+          }
+          get rows() {
+            return this.#destSrc("rows");
+          }
+          get columns() {
+            return this.#destSrc("columns");
+          }
+          mute() {
+            this.muted = true;
+          }
+          unmute() {
+            this.muted = false;
+          }
+          _onpipe(src) {
+            this._src = src;
+          }
+          pipe(dest, options) {
+            this._dest = dest;
+            return super.pipe(dest, options);
+          }
+          pause() {
+            if (this._src) {
+              return this._src.pause();
+            }
+          }
+          resume() {
+            if (this._src) {
+              return this._src.resume();
+            }
+          }
+          write(c) {
+            if (this.muted) {
+              if (!this.replace) {
+                return true;
+              }
+              if (c.match(/^\u001b/)) {
+                if (c.indexOf(this._prompt) === 0) {
+                  c = c.slice(this._prompt.length);
+                  c = c.replace(/./g, this.replace);
+                  c = this._prompt + c;
+                }
+                this._hadControl = true;
+                return this.emit("data", c);
+              } else {
+                if (this._prompt && this._hadControl && c.indexOf(this._prompt) === 0) {
+                  this._hadControl = false;
+                  this.emit("data", this._prompt);
+                  c = c.slice(this._prompt.length);
+                }
+                c = c.toString().replace(/./g, this.replace);
+              }
+            }
+            this.emit("data", c);
+          }
+          end(c) {
+            if (this.muted) {
+              if (c && this.replace) {
+                c = c.toString().replace(/./g, this.replace);
+              } else {
+                c = null;
+              }
+            }
+            if (c) {
+              this.emit("data", c);
+            }
+            this.emit("end");
+          }
+          destroy(...args) {
+            return this.#proxy("destroy", ...args);
+          }
+          destroySoon(...args) {
+            return this.#proxy("destroySoon", ...args);
+          }
+          close(...args) {
+            return this.#proxy("close", ...args);
+          }
+        };
+        module22.exports = MuteStream;
+      }
+    });
+    var require_commonjs2 = __commonJS2({
+      "@inquirer/ansi/dist/commonjs/index.js"(exports22) {
+        "use strict";
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.eraseLines = exports22.cursorTo = exports22.cursorDown = exports22.cursorUp = exports22.cursorShow = exports22.cursorHide = exports22.cursorLeft = void 0;
+        var ESC = "\x1B[";
+        exports22.cursorLeft = ESC + "G";
+        exports22.cursorHide = ESC + "?25l";
+        exports22.cursorShow = ESC + "?25h";
+        var cursorUp = /* @__PURE__ */ __name((rows = 1) => rows > 0 ? `${ESC}${rows}A` : "", "cursorUp");
+        exports22.cursorUp = cursorUp;
+        var cursorDown = /* @__PURE__ */ __name((rows = 1) => rows > 0 ? `${ESC}${rows}B` : "", "cursorDown");
+        exports22.cursorDown = cursorDown;
+        var cursorTo = /* @__PURE__ */ __name((x, y) => {
+          if (typeof y === "number" && !Number.isNaN(y)) {
+            return `${ESC}${y + 1};${x + 1}H`;
+          }
+          return `${ESC}${x + 1}G`;
+        }, "cursorTo");
+        exports22.cursorTo = cursorTo;
+        var eraseLine = ESC + "2K";
+        var eraseLines = /* @__PURE__ */ __name((lines) => lines > 0 ? (eraseLine + (0, exports22.cursorUp)(1)).repeat(lines - 1) + eraseLine + exports22.cursorLeft : "", "eraseLines");
+        exports22.eraseLines = eraseLines;
+      }
+    });
+    var require_screen_manager = __commonJS2({
+      "@inquirer/core/dist/commonjs/lib/screen-manager.js"(exports22) {
+        "use strict";
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        var node_util_1 = require("node:util");
+        var utils_ts_1 = require_utils2();
+        var ansi_1 = require_commonjs2();
+        var height = /* @__PURE__ */ __name((content) => content.split("\n").length, "height");
+        var lastLine = /* @__PURE__ */ __name((content) => content.split("\n").pop() ?? "", "lastLine");
+        var ScreenManager = class {
+          static {
+            __name(this, "ScreenManager");
+          }
+          // These variables are keeping information to allow correct prompt re-rendering
+          height = 0;
+          extraLinesUnderPrompt = 0;
+          cursorPos;
+          rl;
+          constructor(rl) {
+            this.rl = rl;
+            this.cursorPos = rl.getCursorPos();
+          }
+          write(content) {
+            this.rl.output.unmute();
+            this.rl.output.write(content);
+            this.rl.output.mute();
+          }
+          render(content, bottomContent = "") {
+            const promptLine = lastLine(content);
+            const rawPromptLine = (0, node_util_1.stripVTControlCharacters)(promptLine);
+            let prompt = rawPromptLine;
+            if (this.rl.line.length > 0) {
+              prompt = prompt.slice(0, -this.rl.line.length);
+            }
+            this.rl.setPrompt(prompt);
+            this.cursorPos = this.rl.getCursorPos();
+            const width = (0, utils_ts_1.readlineWidth)();
+            content = (0, utils_ts_1.breakLines)(content, width);
+            bottomContent = (0, utils_ts_1.breakLines)(bottomContent, width);
+            if (rawPromptLine.length % width === 0) {
+              content += "\n";
+            }
+            let output = content + (bottomContent ? "\n" + bottomContent : "");
+            const promptLineUpDiff = Math.floor(rawPromptLine.length / width) - this.cursorPos.rows;
+            const bottomContentHeight = promptLineUpDiff + (bottomContent ? height(bottomContent) : 0);
+            if (bottomContentHeight > 0)
+              output += (0, ansi_1.cursorUp)(bottomContentHeight);
+            output += (0, ansi_1.cursorTo)(this.cursorPos.cols);
+            this.write((0, ansi_1.cursorDown)(this.extraLinesUnderPrompt) + (0, ansi_1.eraseLines)(this.height) + output);
+            this.extraLinesUnderPrompt = bottomContentHeight;
+            this.height = height(output);
+          }
+          checkCursorPos() {
+            const cursorPos = this.rl.getCursorPos();
+            if (cursorPos.cols !== this.cursorPos.cols) {
+              this.write((0, ansi_1.cursorTo)(cursorPos.cols));
+              this.cursorPos = cursorPos;
+            }
+          }
+          done({ clearContent }) {
+            this.rl.setPrompt("");
+            let output = (0, ansi_1.cursorDown)(this.extraLinesUnderPrompt);
+            output += clearContent ? (0, ansi_1.eraseLines)(this.height) : "\n";
+            output += ansi_1.cursorShow;
+            this.write(output);
+            this.rl.close();
+          }
+        };
+        exports22.default = ScreenManager;
+      }
+    });
+    var require_promise_polyfill = __commonJS2({
+      "@inquirer/core/dist/commonjs/lib/promise-polyfill.js"(exports22) {
+        "use strict";
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.PromisePolyfill = void 0;
+        var PromisePolyfill = class extends Promise {
+          static {
+            __name(this, "PromisePolyfill");
+          }
+          // Available starting from Node 22
+          // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolvers
+          static withResolver() {
+            let resolve;
+            let reject;
+            const promise = new Promise((res, rej) => {
+              resolve = res;
+              reject = rej;
+            });
+            return { promise, resolve, reject };
+          }
+        };
+        exports22.PromisePolyfill = PromisePolyfill;
+      }
+    });
+    var require_create_prompt = __commonJS2({
+      "@inquirer/core/dist/commonjs/lib/create-prompt.js"(exports22) {
+        "use strict";
+        var __createBinding = exports22 && exports22.__createBinding || (Object.create ? (function(o, m, k, k2) {
+          if (k2 === void 0) k2 = k;
+          var desc = Object.getOwnPropertyDescriptor(m, k);
+          if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+            desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+              return m[k];
+            }, "get") };
+          }
+          Object.defineProperty(o, k2, desc);
+        }) : (function(o, m, k, k2) {
+          if (k2 === void 0) k2 = k;
+          o[k2] = m[k];
+        }));
+        var __setModuleDefault = exports22 && exports22.__setModuleDefault || (Object.create ? (function(o, v) {
+          Object.defineProperty(o, "default", { enumerable: true, value: v });
+        }) : function(o, v) {
+          o["default"] = v;
+        });
+        var __importStar = exports22 && exports22.__importStar || /* @__PURE__ */ (function() {
+          var ownKeys = /* @__PURE__ */ __name(function(o) {
+            ownKeys = Object.getOwnPropertyNames || function(o2) {
+              var ar = [];
+              for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
+              return ar;
+            };
+            return ownKeys(o);
+          }, "ownKeys");
+          return function(mod) {
+            if (mod && mod.__esModule) return mod;
+            var result = {};
+            if (mod != null) {
+              for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+            }
+            __setModuleDefault(result, mod);
+            return result;
+          };
+        })();
+        var __importDefault = exports22 && exports22.__importDefault || function(mod) {
+          return mod && mod.__esModule ? mod : { "default": mod };
+        };
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.createPrompt = createPrompt;
+        var readline = __importStar(require("node:readline"));
+        var node_async_hooks_1 = require("node:async_hooks");
+        var mute_stream_1 = __importDefault(require_lib());
+        var signal_exit_1 = require_cjs();
+        var screen_manager_ts_1 = __importDefault(require_screen_manager());
+        var promise_polyfill_ts_1 = require_promise_polyfill();
+        var hook_engine_ts_1 = require_hook_engine();
+        var errors_ts_1 = require_errors();
+        function getCallSites() {
+          const _prepareStackTrace = Error.prepareStackTrace;
+          let result = [];
+          try {
+            Error.prepareStackTrace = (_, callSites) => {
+              const callSitesWithoutCurrent = callSites.slice(1);
+              result = callSitesWithoutCurrent;
+              return callSitesWithoutCurrent;
+            };
+            new Error().stack;
+          } catch {
+            return result;
+          }
+          Error.prepareStackTrace = _prepareStackTrace;
+          return result;
+        }
+        __name(getCallSites, "getCallSites");
+        function createPrompt(view) {
+          const callSites = getCallSites();
+          const prompt = /* @__PURE__ */ __name((config, context = {}) => {
+            const { input: input2 = process.stdin, signal } = context;
+            const cleanups = /* @__PURE__ */ new Set();
+            const output = new mute_stream_1.default();
+            output.pipe(context.output ?? process.stdout);
+            const rl = readline.createInterface({
+              terminal: true,
+              input: input2,
+              output
+            });
+            const screen = new screen_manager_ts_1.default(rl);
+            const { promise, resolve, reject } = promise_polyfill_ts_1.PromisePolyfill.withResolver();
+            const cancel = /* @__PURE__ */ __name(() => reject(new errors_ts_1.CancelPromptError()), "cancel");
+            if (signal) {
+              const abort = /* @__PURE__ */ __name(() => reject(new errors_ts_1.AbortPromptError({ cause: signal.reason })), "abort");
+              if (signal.aborted) {
+                abort();
+                return Object.assign(promise, { cancel });
+              }
+              signal.addEventListener("abort", abort);
+              cleanups.add(() => signal.removeEventListener("abort", abort));
+            }
+            cleanups.add((0, signal_exit_1.onExit)((code, signal2) => {
+              reject(new errors_ts_1.ExitPromptError(`User force closed the prompt with ${code} ${signal2}`));
+            }));
+            const sigint = /* @__PURE__ */ __name(() => reject(new errors_ts_1.ExitPromptError(`User force closed the prompt with SIGINT`)), "sigint");
+            rl.on("SIGINT", sigint);
+            cleanups.add(() => rl.removeListener("SIGINT", sigint));
+            const checkCursorPos = /* @__PURE__ */ __name(() => screen.checkCursorPos(), "checkCursorPos");
+            rl.input.on("keypress", checkCursorPos);
+            cleanups.add(() => rl.input.removeListener("keypress", checkCursorPos));
+            return (0, hook_engine_ts_1.withHooks)(rl, (cycle) => {
+              const hooksCleanup = node_async_hooks_1.AsyncResource.bind(() => hook_engine_ts_1.effectScheduler.clearAll());
+              rl.on("close", hooksCleanup);
+              cleanups.add(() => rl.removeListener("close", hooksCleanup));
+              cycle(() => {
+                try {
+                  const nextView = view(config, (value) => {
+                    setImmediate(() => resolve(value));
+                  });
+                  if (nextView === void 0) {
+                    const callerFilename = callSites[1]?.getFileName();
+                    throw new Error(`Prompt functions must return a string.
+    at ${callerFilename}`);
+                  }
+                  const [content, bottomContent] = typeof nextView === "string" ? [nextView] : nextView;
+                  screen.render(content, bottomContent);
+                  hook_engine_ts_1.effectScheduler.run();
+                } catch (error) {
+                  reject(error);
+                }
+              });
+              return Object.assign(promise.then((answer) => {
+                hook_engine_ts_1.effectScheduler.clearAll();
+                return answer;
+              }, (error) => {
+                hook_engine_ts_1.effectScheduler.clearAll();
+                throw error;
+              }).finally(() => {
+                cleanups.forEach((cleanup) => cleanup());
+                screen.done({ clearContent: Boolean(context.clearPromptOnDone) });
+                output.end();
+              }).then(() => promise), { cancel });
+            });
+          }, "prompt");
+          return prompt;
+        }
+        __name(createPrompt, "createPrompt");
+      }
+    });
+    var require_Separator = __commonJS2({
+      "@inquirer/core/dist/commonjs/lib/Separator.js"(exports22) {
+        "use strict";
+        var __importDefault = exports22 && exports22.__importDefault || function(mod) {
+          return mod && mod.__esModule ? mod : { "default": mod };
+        };
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.Separator = void 0;
+        var yoctocolors_cjs_1 = __importDefault(require_yoctocolors_cjs2());
+        var figures_1 = __importDefault(require_commonjs());
+        var Separator = class {
+          static {
+            __name(this, "Separator");
+          }
+          separator = yoctocolors_cjs_1.default.dim(Array.from({ length: 15 }).join(figures_1.default.line));
+          type = "separator";
+          constructor(separator) {
+            if (separator) {
+              this.separator = separator;
+            }
+          }
+          static isSeparator(choice) {
+            return Boolean(choice && typeof choice === "object" && "type" in choice && choice.type === "separator");
+          }
+        };
+        exports22.Separator = Separator;
+      }
+    });
+    var require_commonjs3 = __commonJS2({
+      "@inquirer/core/dist/commonjs/index.js"(exports22) {
+        "use strict";
+        var __createBinding = exports22 && exports22.__createBinding || (Object.create ? (function(o, m, k, k2) {
+          if (k2 === void 0) k2 = k;
+          var desc = Object.getOwnPropertyDescriptor(m, k);
+          if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+            desc = { enumerable: true, get: /* @__PURE__ */ __name(function() {
+              return m[k];
+            }, "get") };
+          }
+          Object.defineProperty(o, k2, desc);
+        }) : (function(o, m, k, k2) {
+          if (k2 === void 0) k2 = k;
+          o[k2] = m[k];
+        }));
+        var __exportStar = exports22 && exports22.__exportStar || function(m, exports3) {
+          for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
+        };
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.Separator = exports22.createPrompt = exports22.usePagination = exports22.makeTheme = exports22.useKeypress = exports22.useRef = exports22.useMemo = exports22.useEffect = exports22.useState = exports22.usePrefix = exports22.isEnterKey = exports22.isNumberKey = exports22.isTabKey = exports22.isBackspaceKey = exports22.isSpaceKey = exports22.isDownKey = exports22.isUpKey = void 0;
+        var key_ts_1 = require_key();
+        Object.defineProperty(exports22, "isUpKey", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return key_ts_1.isUpKey;
+        }, "get") });
+        Object.defineProperty(exports22, "isDownKey", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return key_ts_1.isDownKey;
+        }, "get") });
+        Object.defineProperty(exports22, "isSpaceKey", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return key_ts_1.isSpaceKey;
+        }, "get") });
+        Object.defineProperty(exports22, "isBackspaceKey", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return key_ts_1.isBackspaceKey;
+        }, "get") });
+        Object.defineProperty(exports22, "isTabKey", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return key_ts_1.isTabKey;
+        }, "get") });
+        Object.defineProperty(exports22, "isNumberKey", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return key_ts_1.isNumberKey;
+        }, "get") });
+        Object.defineProperty(exports22, "isEnterKey", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return key_ts_1.isEnterKey;
+        }, "get") });
+        __exportStar(require_errors(), exports22);
+        var use_prefix_ts_1 = require_use_prefix();
+        Object.defineProperty(exports22, "usePrefix", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return use_prefix_ts_1.usePrefix;
+        }, "get") });
+        var use_state_ts_1 = require_use_state();
+        Object.defineProperty(exports22, "useState", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return use_state_ts_1.useState;
+        }, "get") });
+        var use_effect_ts_1 = require_use_effect();
+        Object.defineProperty(exports22, "useEffect", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return use_effect_ts_1.useEffect;
+        }, "get") });
+        var use_memo_ts_1 = require_use_memo();
+        Object.defineProperty(exports22, "useMemo", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return use_memo_ts_1.useMemo;
+        }, "get") });
+        var use_ref_ts_1 = require_use_ref();
+        Object.defineProperty(exports22, "useRef", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return use_ref_ts_1.useRef;
+        }, "get") });
+        var use_keypress_ts_1 = require_use_keypress();
+        Object.defineProperty(exports22, "useKeypress", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return use_keypress_ts_1.useKeypress;
+        }, "get") });
+        var make_theme_ts_1 = require_make_theme();
+        Object.defineProperty(exports22, "makeTheme", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return make_theme_ts_1.makeTheme;
+        }, "get") });
+        var use_pagination_ts_1 = require_use_pagination();
+        Object.defineProperty(exports22, "usePagination", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return use_pagination_ts_1.usePagination;
+        }, "get") });
+        var create_prompt_ts_1 = require_create_prompt();
+        Object.defineProperty(exports22, "createPrompt", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return create_prompt_ts_1.createPrompt;
+        }, "get") });
+        var Separator_ts_1 = require_Separator();
+        Object.defineProperty(exports22, "Separator", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return Separator_ts_1.Separator;
+        }, "get") });
+      }
+    });
+    var require_commonjs4 = __commonJS2({
+      "@inquirer/checkbox/dist/commonjs/index.js"(exports22) {
+        "use strict";
+        var __importDefault = exports22 && exports22.__importDefault || function(mod) {
+          return mod && mod.__esModule ? mod : { "default": mod };
+        };
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.Separator = void 0;
+        var core_1 = require_commonjs3();
+        var ansi_1 = require_commonjs2();
+        var yoctocolors_cjs_1 = __importDefault(require_yoctocolors_cjs2());
+        var figures_1 = __importDefault(require_commonjs());
+        var checkboxTheme = {
+          icon: {
+            checked: yoctocolors_cjs_1.default.green(figures_1.default.circleFilled),
+            unchecked: figures_1.default.circle,
+            cursor: figures_1.default.pointer
+          },
+          style: {
+            disabledChoice: /* @__PURE__ */ __name((text) => yoctocolors_cjs_1.default.dim(`- ${text}`), "disabledChoice"),
+            renderSelectedChoices: /* @__PURE__ */ __name((selectedChoices) => selectedChoices.map((choice) => choice.short).join(", "), "renderSelectedChoices"),
+            description: /* @__PURE__ */ __name((text) => yoctocolors_cjs_1.default.cyan(text), "description"),
+            keysHelpTip: /* @__PURE__ */ __name((keys) => keys.map(([key, action]) => `${yoctocolors_cjs_1.default.bold(key)} ${yoctocolors_cjs_1.default.dim(action)}`).join(yoctocolors_cjs_1.default.dim(" \u2022 ")), "keysHelpTip")
+          },
+          helpMode: "always",
+          keybindings: []
+        };
+        function isSelectable(item) {
+          return !core_1.Separator.isSeparator(item) && !item.disabled;
+        }
+        __name(isSelectable, "isSelectable");
+        function isChecked(item) {
+          return isSelectable(item) && item.checked;
+        }
+        __name(isChecked, "isChecked");
+        function toggle(item) {
+          return isSelectable(item) ? { ...item, checked: !item.checked } : item;
+        }
+        __name(toggle, "toggle");
+        function check(checked) {
+          return function(item) {
+            return isSelectable(item) ? { ...item, checked } : item;
+          };
+        }
+        __name(check, "check");
+        function normalizeChoices(choices) {
+          return choices.map((choice) => {
+            if (core_1.Separator.isSeparator(choice))
+              return choice;
+            if (typeof choice === "string") {
+              return {
+                value: choice,
+                name: choice,
+                short: choice,
+                checkedName: choice,
+                disabled: false,
+                checked: false
+              };
+            }
+            const name = choice.name ?? String(choice.value);
+            const normalizedChoice = {
+              value: choice.value,
+              name,
+              short: choice.short ?? name,
+              checkedName: choice.checkedName ?? name,
+              disabled: choice.disabled ?? false,
+              checked: choice.checked ?? false
+            };
+            if (choice.description) {
+              normalizedChoice.description = choice.description;
+            }
+            return normalizedChoice;
+          });
+        }
+        __name(normalizeChoices, "normalizeChoices");
+        exports22.default = (0, core_1.createPrompt)((config, done) => {
+          const {
+            // eslint-disable-next-line @typescript-eslint/no-deprecated
+            instructions,
+            pageSize = 7,
+            loop = true,
+            required,
+            validate: validate2 = /* @__PURE__ */ __name(() => true, "validate")
+          } = config;
+          const shortcuts = { all: "a", invert: "i", ...config.shortcuts };
+          const theme = (0, core_1.makeTheme)(checkboxTheme, config.theme);
+          const { keybindings } = theme;
+          const [status, setStatus] = (0, core_1.useState)("idle");
+          const prefix = (0, core_1.usePrefix)({ status, theme });
+          const [items, setItems] = (0, core_1.useState)(normalizeChoices(config.choices));
+          const bounds = (0, core_1.useMemo)(() => {
+            const first = items.findIndex(isSelectable);
+            const last = items.findLastIndex(isSelectable);
+            if (first === -1) {
+              throw new core_1.ValidationError("[checkbox prompt] No selectable choices. All choices are disabled.");
+            }
+            return { first, last };
+          }, [items]);
+          const [active, setActive] = (0, core_1.useState)(bounds.first);
+          const [errorMsg, setError] = (0, core_1.useState)();
+          (0, core_1.useKeypress)(async (key) => {
+            if ((0, core_1.isEnterKey)(key)) {
+              const selection = items.filter(isChecked);
+              const isValid = await validate2([...selection]);
+              if (required && !items.some(isChecked)) {
+                setError("At least one choice must be selected");
+              } else if (isValid === true) {
+                setStatus("done");
+                done(selection.map((choice) => choice.value));
+              } else {
+                setError(isValid || "You must select a valid value");
+              }
+            } else if ((0, core_1.isUpKey)(key, keybindings) || (0, core_1.isDownKey)(key, keybindings)) {
+              if (loop || (0, core_1.isUpKey)(key, keybindings) && active !== bounds.first || (0, core_1.isDownKey)(key, keybindings) && active !== bounds.last) {
+                const offset = (0, core_1.isUpKey)(key, keybindings) ? -1 : 1;
+                let next = active;
+                do {
+                  next = (next + offset + items.length) % items.length;
+                } while (!isSelectable(items[next]));
+                setActive(next);
+              }
+            } else if ((0, core_1.isSpaceKey)(key)) {
+              setError(void 0);
+              setItems(items.map((choice, i) => i === active ? toggle(choice) : choice));
+            } else if (key.name === shortcuts.all) {
+              const selectAll = items.some((choice) => isSelectable(choice) && !choice.checked);
+              setItems(items.map(check(selectAll)));
+            } else if (key.name === shortcuts.invert) {
+              setItems(items.map(toggle));
+            } else if ((0, core_1.isNumberKey)(key)) {
+              const selectedIndex = Number(key.name) - 1;
+              let selectableIndex = -1;
+              const position = items.findIndex((item) => {
+                if (core_1.Separator.isSeparator(item))
+                  return false;
+                selectableIndex++;
+                return selectableIndex === selectedIndex;
+              });
+              const selectedItem = items[position];
+              if (selectedItem && isSelectable(selectedItem)) {
+                setActive(position);
+                setItems(items.map((choice, i) => i === position ? toggle(choice) : choice));
+              }
+            }
+          });
+          const message = theme.style.message(config.message, status);
+          let description;
+          const page = (0, core_1.usePagination)({
+            items,
+            active,
+            renderItem({ item, isActive }) {
+              if (core_1.Separator.isSeparator(item)) {
+                return ` ${item.separator}`;
+              }
+              if (item.disabled) {
+                const disabledLabel = typeof item.disabled === "string" ? item.disabled : "(disabled)";
+                return theme.style.disabledChoice(`${item.name} ${disabledLabel}`);
+              }
+              if (isActive) {
+                description = item.description;
+              }
+              const checkbox2 = item.checked ? theme.icon.checked : theme.icon.unchecked;
+              const name = item.checked ? item.checkedName : item.name;
+              const color = isActive ? theme.style.highlight : (x) => x;
+              const cursor = isActive ? theme.icon.cursor : " ";
+              return color(`${cursor}${checkbox2} ${name}`);
+            },
+            pageSize,
+            loop
+          });
+          if (status === "done") {
+            const selection = items.filter(isChecked);
+            const answer = theme.style.answer(theme.style.renderSelectedChoices(selection, items));
+            return [prefix, message, answer].filter(Boolean).join(" ");
+          }
+          let helpLine;
+          if (theme.helpMode !== "never" && instructions !== false) {
+            if (typeof instructions === "string") {
+              helpLine = instructions;
+            } else {
+              const keys = [
+                ["\u2191\u2193", "navigate"],
+                ["space", "select"]
+              ];
+              if (shortcuts.all)
+                keys.push([shortcuts.all, "all"]);
+              if (shortcuts.invert)
+                keys.push([shortcuts.invert, "invert"]);
+              keys.push(["\u23CE", "submit"]);
+              helpLine = theme.style.keysHelpTip(keys);
+            }
+          }
+          const lines = [
+            [prefix, message].filter(Boolean).join(" "),
+            page,
+            " ",
+            description ? theme.style.description(description) : "",
+            errorMsg ? theme.style.error(errorMsg) : "",
+            helpLine
+          ].filter(Boolean).join("\n").trimEnd();
+          return `${lines}${ansi_1.cursorHide}`;
+        });
+        var core_2 = require_commonjs3();
+        Object.defineProperty(exports22, "Separator", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return core_2.Separator;
+        }, "get") });
+      }
+    });
+    var require_commonjs5 = __commonJS2({
+      "@inquirer/confirm/dist/commonjs/index.js"(exports22) {
+        "use strict";
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        var core_1 = require_commonjs3();
+        function getBooleanValue(value, defaultValue) {
+          let answer = defaultValue !== false;
+          if (/^(y|yes)/i.test(value))
+            answer = true;
+          else if (/^(n|no)/i.test(value))
+            answer = false;
+          return answer;
+        }
+        __name(getBooleanValue, "getBooleanValue");
+        function boolToString(value) {
+          return value ? "Yes" : "No";
+        }
+        __name(boolToString, "boolToString");
+        exports22.default = (0, core_1.createPrompt)((config, done) => {
+          const { transformer = boolToString } = config;
+          const [status, setStatus] = (0, core_1.useState)("idle");
+          const [value, setValue] = (0, core_1.useState)("");
+          const theme = (0, core_1.makeTheme)(config.theme);
+          const prefix = (0, core_1.usePrefix)({ status, theme });
+          (0, core_1.useKeypress)((key, rl) => {
+            if (status !== "idle")
+              return;
+            if ((0, core_1.isEnterKey)(key)) {
+              const answer = getBooleanValue(value, config.default);
+              setValue(transformer(answer));
+              setStatus("done");
+              done(answer);
+            } else if ((0, core_1.isTabKey)(key)) {
+              const answer = boolToString(!getBooleanValue(value, config.default));
+              rl.clearLine(0);
+              rl.write(answer);
+              setValue(answer);
+            } else {
+              setValue(rl.line);
+            }
+          });
+          let formattedValue = value;
+          let defaultValue = "";
+          if (status === "done") {
+            formattedValue = theme.style.answer(value);
+          } else {
+            defaultValue = ` ${theme.style.defaultAnswer(config.default === false ? "y/N" : "Y/n")}`;
+          }
+          const message = theme.style.message(config.message, status);
+          return `${prefix} ${message}${defaultValue} ${formattedValue}`;
+        });
+      }
+    });
+    var require_commonjs6 = __commonJS2({
+      "@inquirer/input/dist/commonjs/index.js"(exports22) {
+        "use strict";
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        var core_1 = require_commonjs3();
+        var inputTheme = {
+          validationFailureMode: "keep"
+        };
+        exports22.default = (0, core_1.createPrompt)((config, done) => {
+          const { required, validate: validate2 = /* @__PURE__ */ __name(() => true, "validate"), prefill = "tab" } = config;
+          const theme = (0, core_1.makeTheme)(inputTheme, config.theme);
+          const [status, setStatus] = (0, core_1.useState)("idle");
+          const [defaultValue = "", setDefaultValue] = (0, core_1.useState)(config.default);
+          const [errorMsg, setError] = (0, core_1.useState)();
+          const [value, setValue] = (0, core_1.useState)("");
+          const prefix = (0, core_1.usePrefix)({ status, theme });
+          (0, core_1.useKeypress)(async (key, rl) => {
+            if (status !== "idle") {
+              return;
+            }
+            if ((0, core_1.isEnterKey)(key)) {
+              const answer = value || defaultValue;
+              setStatus("loading");
+              const isValid = required && !answer ? "You must provide a value" : await validate2(answer);
+              if (isValid === true) {
+                setValue(answer);
+                setStatus("done");
+                done(answer);
+              } else {
+                if (theme.validationFailureMode === "clear") {
+                  setValue("");
+                } else {
+                  rl.write(value);
+                }
+                setError(isValid || "You must provide a valid value");
+                setStatus("idle");
+              }
+            } else if ((0, core_1.isBackspaceKey)(key) && !value) {
+              setDefaultValue(void 0);
+            } else if ((0, core_1.isTabKey)(key) && !value) {
+              setDefaultValue(void 0);
+              rl.clearLine(0);
+              rl.write(defaultValue);
+              setValue(defaultValue);
+            } else {
+              setValue(rl.line);
+              setError(void 0);
+            }
+          });
+          (0, core_1.useEffect)((rl) => {
+            if (prefill === "editable" && defaultValue) {
+              rl.write(defaultValue);
+              setValue(defaultValue);
+            }
+          }, []);
+          const message = theme.style.message(config.message, status);
+          let formattedValue = value;
+          if (typeof config.transformer === "function") {
+            formattedValue = config.transformer(value, { isFinal: status === "done" });
+          } else if (status === "done") {
+            formattedValue = theme.style.answer(value);
+          }
+          let defaultStr;
+          if (defaultValue && status !== "done" && !value) {
+            defaultStr = theme.style.defaultAnswer(defaultValue);
+          }
+          let error = "";
+          if (errorMsg) {
+            error = theme.style.error(errorMsg);
+          }
+          return [
+            [prefix, message, defaultStr, formattedValue].filter((v) => v !== void 0).join(" "),
+            error
+          ];
+        });
+      }
+    });
+    var require_ansi_escapes = __commonJS2({
+      "ansi-escapes/index.js"(exports22, module22) {
+        "use strict";
+        var ansiEscapes = module22.exports;
+        module22.exports.default = ansiEscapes;
+        var ESC = "\x1B[";
+        var OSC = "\x1B]";
+        var BEL = "\x07";
+        var SEP = ";";
+        var isTerminalApp = process.env.TERM_PROGRAM === "Apple_Terminal";
+        ansiEscapes.cursorTo = (x, y) => {
+          if (typeof x !== "number") {
+            throw new TypeError("The `x` argument is required");
+          }
+          if (typeof y !== "number") {
+            return ESC + (x + 1) + "G";
+          }
+          return ESC + (y + 1) + ";" + (x + 1) + "H";
+        };
+        ansiEscapes.cursorMove = (x, y) => {
+          if (typeof x !== "number") {
+            throw new TypeError("The `x` argument is required");
+          }
+          let ret = "";
+          if (x < 0) {
+            ret += ESC + -x + "D";
+          } else if (x > 0) {
+            ret += ESC + x + "C";
+          }
+          if (y < 0) {
+            ret += ESC + -y + "A";
+          } else if (y > 0) {
+            ret += ESC + y + "B";
+          }
+          return ret;
+        };
+        ansiEscapes.cursorUp = (count = 1) => ESC + count + "A";
+        ansiEscapes.cursorDown = (count = 1) => ESC + count + "B";
+        ansiEscapes.cursorForward = (count = 1) => ESC + count + "C";
+        ansiEscapes.cursorBackward = (count = 1) => ESC + count + "D";
+        ansiEscapes.cursorLeft = ESC + "G";
+        ansiEscapes.cursorSavePosition = isTerminalApp ? "\x1B7" : ESC + "s";
+        ansiEscapes.cursorRestorePosition = isTerminalApp ? "\x1B8" : ESC + "u";
+        ansiEscapes.cursorGetPosition = ESC + "6n";
+        ansiEscapes.cursorNextLine = ESC + "E";
+        ansiEscapes.cursorPrevLine = ESC + "F";
+        ansiEscapes.cursorHide = ESC + "?25l";
+        ansiEscapes.cursorShow = ESC + "?25h";
+        ansiEscapes.eraseLines = (count) => {
+          let clear = "";
+          for (let i = 0; i < count; i++) {
+            clear += ansiEscapes.eraseLine + (i < count - 1 ? ansiEscapes.cursorUp() : "");
+          }
+          if (count) {
+            clear += ansiEscapes.cursorLeft;
+          }
+          return clear;
+        };
+        ansiEscapes.eraseEndLine = ESC + "K";
+        ansiEscapes.eraseStartLine = ESC + "1K";
+        ansiEscapes.eraseLine = ESC + "2K";
+        ansiEscapes.eraseDown = ESC + "J";
+        ansiEscapes.eraseUp = ESC + "1J";
+        ansiEscapes.eraseScreen = ESC + "2J";
+        ansiEscapes.scrollUp = ESC + "S";
+        ansiEscapes.scrollDown = ESC + "T";
+        ansiEscapes.clearScreen = "\x1Bc";
+        ansiEscapes.clearTerminal = process.platform === "win32" ? `${ansiEscapes.eraseScreen}${ESC}0f` : (
+          // 1. Erases the screen (Only done in case `2` is not supported)
+          // 2. Erases the whole screen including scrollback buffer
+          // 3. Moves cursor to the top-left position
+          // More info: https://www.real-world-systems.com/docs/ANSIcode.html
+          `${ansiEscapes.eraseScreen}${ESC}3J${ESC}H`
+        );
+        ansiEscapes.beep = BEL;
+        ansiEscapes.link = (text, url) => {
+          return [
+            OSC,
+            "8",
+            SEP,
+            SEP,
+            url,
+            BEL,
+            text,
+            OSC,
+            "8",
+            SEP,
+            SEP,
+            BEL
+          ].join("");
+        };
+        ansiEscapes.image = (buffer, options = {}) => {
+          let ret = `${OSC}1337;File=inline=1`;
+          if (options.width) {
+            ret += `;width=${options.width}`;
+          }
+          if (options.height) {
+            ret += `;height=${options.height}`;
+          }
+          if (options.preserveAspectRatio === false) {
+            ret += ";preserveAspectRatio=0";
+          }
+          return ret + ":" + buffer.toString("base64") + BEL;
+        };
+        ansiEscapes.iTerm = {
+          setCwd: /* @__PURE__ */ __name((cwd = process.cwd()) => `${OSC}50;CurrentDir=${cwd}${BEL}`, "setCwd"),
+          annotation: /* @__PURE__ */ __name((message, options = {}) => {
+            let ret = `${OSC}1337;`;
+            const hasX = typeof options.x !== "undefined";
+            const hasY = typeof options.y !== "undefined";
+            if ((hasX || hasY) && !(hasX && hasY && typeof options.length !== "undefined")) {
+              throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");
+            }
+            message = message.replace(/\|/g, "");
+            ret += options.isHidden ? "AddHiddenAnnotation=" : "AddAnnotation=";
+            if (options.length > 0) {
+              ret += (hasX ? [message, options.length, options.x, options.y] : [options.length, message]).join("|");
+            } else {
+              ret += message;
+            }
+            return ret + BEL;
+          }, "annotation")
+        };
+      }
+    });
+    var require_commonjs7 = __commonJS2({
+      "@inquirer/password/dist/commonjs/index.js"(exports22) {
+        "use strict";
+        var __importDefault = exports22 && exports22.__importDefault || function(mod) {
+          return mod && mod.__esModule ? mod : { "default": mod };
+        };
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        var core_1 = require_commonjs3();
+        var ansi_escapes_1 = __importDefault(require_ansi_escapes());
+        exports22.default = (0, core_1.createPrompt)((config, done) => {
+          const { validate: validate2 = /* @__PURE__ */ __name(() => true, "validate") } = config;
+          const theme = (0, core_1.makeTheme)(config.theme);
+          const [status, setStatus] = (0, core_1.useState)("idle");
+          const [errorMsg, setError] = (0, core_1.useState)();
+          const [value, setValue] = (0, core_1.useState)("");
+          const prefix = (0, core_1.usePrefix)({ status, theme });
+          (0, core_1.useKeypress)(async (key, rl) => {
+            if (status !== "idle") {
+              return;
+            }
+            if ((0, core_1.isEnterKey)(key)) {
+              const answer = value;
+              setStatus("loading");
+              const isValid = await validate2(answer);
+              if (isValid === true) {
+                setValue(answer);
+                setStatus("done");
+                done(answer);
+              } else {
+                rl.write(value);
+                setError(isValid || "You must provide a valid value");
+                setStatus("idle");
+              }
+            } else {
+              setValue(rl.line);
+              setError(void 0);
+            }
+          });
+          const message = theme.style.message(config.message, status);
+          let formattedValue = "";
+          let helpTip;
+          if (config.mask) {
+            const maskChar = typeof config.mask === "string" ? config.mask : "*";
+            formattedValue = maskChar.repeat(value.length);
+          } else if (status !== "done") {
+            helpTip = `${theme.style.help("[input is masked]")}${ansi_escapes_1.default.cursorHide}`;
+          }
+          if (status === "done") {
+            formattedValue = theme.style.answer(formattedValue);
+          }
+          let error = "";
+          if (errorMsg) {
+            error = theme.style.error(errorMsg);
+          }
+          return [[prefix, message, config.mask ? formattedValue : helpTip].join(" "), error];
+        });
+      }
+    });
+    var require_commonjs8 = __commonJS2({
+      "@inquirer/search/dist/commonjs/index.js"(exports22) {
+        "use strict";
+        var __importDefault = exports22 && exports22.__importDefault || function(mod) {
+          return mod && mod.__esModule ? mod : { "default": mod };
+        };
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.Separator = void 0;
+        var core_1 = require_commonjs3();
+        var yoctocolors_cjs_1 = __importDefault(require_yoctocolors_cjs2());
+        var figures_1 = __importDefault(require_commonjs());
+        var searchTheme = {
+          icon: { cursor: figures_1.default.pointer },
+          style: {
+            disabled: /* @__PURE__ */ __name((text) => yoctocolors_cjs_1.default.dim(`- ${text}`), "disabled"),
+            searchTerm: /* @__PURE__ */ __name((text) => yoctocolors_cjs_1.default.cyan(text), "searchTerm"),
+            description: /* @__PURE__ */ __name((text) => yoctocolors_cjs_1.default.cyan(text), "description")
+          },
+          helpMode: "auto"
+        };
+        function isSelectable(item) {
+          return !core_1.Separator.isSeparator(item) && !item.disabled;
+        }
+        __name(isSelectable, "isSelectable");
+        function normalizeChoices(choices) {
+          return choices.map((choice) => {
+            if (core_1.Separator.isSeparator(choice))
+              return choice;
+            if (typeof choice === "string") {
+              return {
+                value: choice,
+                name: choice,
+                short: choice,
+                disabled: false
+              };
+            }
+            const name = choice.name ?? String(choice.value);
+            const normalizedChoice = {
+              value: choice.value,
+              name,
+              short: choice.short ?? name,
+              disabled: choice.disabled ?? false
+            };
+            if (choice.description) {
+              normalizedChoice.description = choice.description;
+            }
+            return normalizedChoice;
+          });
+        }
+        __name(normalizeChoices, "normalizeChoices");
+        exports22.default = (0, core_1.createPrompt)((config, done) => {
+          const { pageSize = 7, validate: validate2 = /* @__PURE__ */ __name(() => true, "validate") } = config;
+          const theme = (0, core_1.makeTheme)(searchTheme, config.theme);
+          const firstRender = (0, core_1.useRef)(true);
+          const [status, setStatus] = (0, core_1.useState)("loading");
+          const [searchTerm, setSearchTerm] = (0, core_1.useState)("");
+          const [searchResults, setSearchResults] = (0, core_1.useState)([]);
+          const [searchError, setSearchError] = (0, core_1.useState)();
+          const prefix = (0, core_1.usePrefix)({ status, theme });
+          const bounds = (0, core_1.useMemo)(() => {
+            const first = searchResults.findIndex(isSelectable);
+            const last = searchResults.findLastIndex(isSelectable);
+            return { first, last };
+          }, [searchResults]);
+          const [active = bounds.first, setActive] = (0, core_1.useState)();
+          (0, core_1.useEffect)(() => {
+            const controller = new AbortController();
+            setStatus("loading");
+            setSearchError(void 0);
+            const fetchResults = /* @__PURE__ */ __name(async () => {
+              try {
+                const results = await config.source(searchTerm || void 0, {
+                  signal: controller.signal
+                });
+                if (!controller.signal.aborted) {
+                  setActive(void 0);
+                  setSearchError(void 0);
+                  setSearchResults(normalizeChoices(results));
+                  setStatus("idle");
+                }
+              } catch (error2) {
+                if (!controller.signal.aborted && error2 instanceof Error) {
+                  setSearchError(error2.message);
+                }
+              }
+            }, "fetchResults");
+            void fetchResults();
+            return () => {
+              controller.abort();
+            };
+          }, [searchTerm]);
+          const selectedChoice = searchResults[active];
+          (0, core_1.useKeypress)(async (key, rl) => {
+            if ((0, core_1.isEnterKey)(key)) {
+              if (selectedChoice) {
+                setStatus("loading");
+                const isValid = await validate2(selectedChoice.value);
+                setStatus("idle");
+                if (isValid === true) {
+                  setStatus("done");
+                  done(selectedChoice.value);
+                } else if (selectedChoice.name === searchTerm) {
+                  setSearchError(isValid || "You must provide a valid value");
+                } else {
+                  rl.write(selectedChoice.name);
+                  setSearchTerm(selectedChoice.name);
+                }
+              } else {
+                rl.write(searchTerm);
+              }
+            } else if ((0, core_1.isTabKey)(key) && selectedChoice) {
+              rl.clearLine(0);
+              rl.write(selectedChoice.name);
+              setSearchTerm(selectedChoice.name);
+            } else if (status !== "loading" && ((0, core_1.isUpKey)(key) || (0, core_1.isDownKey)(key))) {
+              rl.clearLine(0);
+              if ((0, core_1.isUpKey)(key) && active !== bounds.first || (0, core_1.isDownKey)(key) && active !== bounds.last) {
+                const offset = (0, core_1.isUpKey)(key) ? -1 : 1;
+                let next = active;
+                do {
+                  next = (next + offset + searchResults.length) % searchResults.length;
+                } while (!isSelectable(searchResults[next]));
+                setActive(next);
+              }
+            } else {
+              setSearchTerm(rl.line);
+            }
+          });
+          const message = theme.style.message(config.message, status);
+          if (active > 0) {
+            firstRender.current = false;
+          }
+          let helpTip = "";
+          if (searchResults.length > 1 && (theme.helpMode === "always" || theme.helpMode === "auto" && firstRender.current)) {
+            helpTip = searchResults.length > pageSize ? `
+${theme.style.help(`(${config.instructions?.pager ?? "Use arrow keys to reveal more choices"})`)}` : `
+${theme.style.help(`(${config.instructions?.navigation ?? "Use arrow keys"})`)}`;
+          }
+          const page = (0, core_1.usePagination)({
+            items: searchResults,
+            active,
+            renderItem({ item, isActive }) {
+              if (core_1.Separator.isSeparator(item)) {
+                return ` ${item.separator}`;
+              }
+              if (item.disabled) {
+                const disabledLabel = typeof item.disabled === "string" ? item.disabled : "(disabled)";
+                return theme.style.disabled(`${item.name} ${disabledLabel}`);
+              }
+              const color = isActive ? theme.style.highlight : (x) => x;
+              const cursor = isActive ? theme.icon.cursor : ` `;
+              return color(`${cursor} ${item.name}`);
+            },
+            pageSize,
+            loop: false
+          });
+          let error;
+          if (searchError) {
+            error = theme.style.error(searchError);
+          } else if (searchResults.length === 0 && searchTerm !== "" && status === "idle") {
+            error = theme.style.error("No results found");
+          }
+          let searchStr;
+          if (status === "done" && selectedChoice) {
+            const answer = selectedChoice.short;
+            return `${prefix} ${message} ${theme.style.answer(answer)}`;
+          } else {
+            searchStr = theme.style.searchTerm(searchTerm);
+          }
+          const choiceDescription = selectedChoice?.description ? `
+${theme.style.description(selectedChoice.description)}` : ``;
+          return [
+            [prefix, message, searchStr].filter(Boolean).join(" "),
+            `${error ?? page}${helpTip}${choiceDescription}`
+          ];
+        });
+        var core_2 = require_commonjs3();
+        Object.defineProperty(exports22, "Separator", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return core_2.Separator;
+        }, "get") });
+      }
+    });
+    var require_commonjs9 = __commonJS2({
+      "@inquirer/select/dist/commonjs/index.js"(exports22) {
+        "use strict";
+        var __importDefault = exports22 && exports22.__importDefault || function(mod) {
+          return mod && mod.__esModule ? mod : { "default": mod };
+        };
+        Object.defineProperty(exports22, "__esModule", { value: true });
+        exports22.Separator = void 0;
+        var core_1 = require_commonjs3();
+        var yoctocolors_cjs_1 = __importDefault(require_yoctocolors_cjs2());
+        var figures_1 = __importDefault(require_commonjs());
+        var ansi_escapes_1 = __importDefault(require_ansi_escapes());
+        var selectTheme = {
+          icon: { cursor: figures_1.default.pointer },
+          style: {
+            disabled: /* @__PURE__ */ __name((text) => yoctocolors_cjs_1.default.dim(`- ${text}`), "disabled"),
+            description: /* @__PURE__ */ __name((text) => yoctocolors_cjs_1.default.cyan(text), "description")
+          },
+          helpMode: "auto",
+          indexMode: "hidden"
+        };
+        function isSelectable(item) {
+          return !core_1.Separator.isSeparator(item) && !item.disabled;
+        }
+        __name(isSelectable, "isSelectable");
+        function normalizeChoices(choices) {
+          return choices.map((choice) => {
+            if (core_1.Separator.isSeparator(choice))
+              return choice;
+            if (typeof choice === "string") {
+              return {
+                value: choice,
+                name: choice,
+                short: choice,
+                disabled: false
+              };
+            }
+            const name = choice.name ?? String(choice.value);
+            const normalizedChoice = {
+              value: choice.value,
+              name,
+              short: choice.short ?? name,
+              disabled: choice.disabled ?? false
+            };
+            if (choice.description) {
+              normalizedChoice.description = choice.description;
+            }
+            return normalizedChoice;
+          });
+        }
+        __name(normalizeChoices, "normalizeChoices");
+        exports22.default = (0, core_1.createPrompt)((config, done) => {
+          const { loop = true, pageSize = 7 } = config;
+          const firstRender = (0, core_1.useRef)(true);
+          const theme = (0, core_1.makeTheme)(selectTheme, config.theme);
+          const [status, setStatus] = (0, core_1.useState)("idle");
+          const prefix = (0, core_1.usePrefix)({ status, theme });
+          const searchTimeoutRef = (0, core_1.useRef)();
+          const items = (0, core_1.useMemo)(() => normalizeChoices(config.choices), [config.choices]);
+          const bounds = (0, core_1.useMemo)(() => {
+            const first = items.findIndex(isSelectable);
+            const last = items.findLastIndex(isSelectable);
+            if (first === -1) {
+              throw new core_1.ValidationError("[select prompt] No selectable choices. All choices are disabled.");
+            }
+            return { first, last };
+          }, [items]);
+          const defaultItemIndex = (0, core_1.useMemo)(() => {
+            if (!("default" in config))
+              return -1;
+            return items.findIndex((item) => isSelectable(item) && item.value === config.default);
+          }, [config.default, items]);
+          const [active, setActive] = (0, core_1.useState)(defaultItemIndex === -1 ? bounds.first : defaultItemIndex);
+          const selectedChoice = items[active];
+          (0, core_1.useKeypress)((key, rl) => {
+            clearTimeout(searchTimeoutRef.current);
+            if ((0, core_1.isEnterKey)(key)) {
+              setStatus("done");
+              done(selectedChoice.value);
+            } else if ((0, core_1.isUpKey)(key) || (0, core_1.isDownKey)(key)) {
+              rl.clearLine(0);
+              if (loop || (0, core_1.isUpKey)(key) && active !== bounds.first || (0, core_1.isDownKey)(key) && active !== bounds.last) {
+                const offset = (0, core_1.isUpKey)(key) ? -1 : 1;
+                let next = active;
+                do {
+                  next = (next + offset + items.length) % items.length;
+                } while (!isSelectable(items[next]));
+                setActive(next);
+              }
+            } else if ((0, core_1.isNumberKey)(key) && !Number.isNaN(Number(rl.line))) {
+              const selectedIndex = Number(rl.line) - 1;
+              let selectableIndex = -1;
+              const position = items.findIndex((item2) => {
+                if (core_1.Separator.isSeparator(item2))
+                  return false;
+                selectableIndex++;
+                return selectableIndex === selectedIndex;
+              });
+              const item = items[position];
+              if (item != null && isSelectable(item)) {
+                setActive(position);
+              }
+              searchTimeoutRef.current = setTimeout(() => {
+                rl.clearLine(0);
+              }, 700);
+            } else if ((0, core_1.isBackspaceKey)(key)) {
+              rl.clearLine(0);
+            } else {
+              const searchTerm = rl.line.toLowerCase();
+              const matchIndex = items.findIndex((item) => {
+                if (core_1.Separator.isSeparator(item) || !isSelectable(item))
+                  return false;
+                return item.name.toLowerCase().startsWith(searchTerm);
+              });
+              if (matchIndex !== -1) {
+                setActive(matchIndex);
+              }
+              searchTimeoutRef.current = setTimeout(() => {
+                rl.clearLine(0);
+              }, 700);
+            }
+          });
+          (0, core_1.useEffect)(() => () => {
+            clearTimeout(searchTimeoutRef.current);
+          }, []);
+          const message = theme.style.message(config.message, status);
+          let helpTipTop = "";
+          let helpTipBottom = "";
+          if (theme.helpMode === "always" || theme.helpMode === "auto" && firstRender.current) {
+            firstRender.current = false;
+            if (items.length > pageSize) {
+              helpTipBottom = `
+${theme.style.help(`(${config.instructions?.pager ?? "Use arrow keys to reveal more choices"})`)}`;
+            } else {
+              helpTipTop = theme.style.help(`(${config.instructions?.navigation ?? "Use arrow keys"})`);
+            }
+          }
+          let separatorCount = 0;
+          const page = (0, core_1.usePagination)({
+            items,
+            active,
+            renderItem({ item, isActive, index }) {
+              if (core_1.Separator.isSeparator(item)) {
+                separatorCount++;
+                return ` ${item.separator}`;
+              }
+              const indexLabel = theme.indexMode === "number" ? `${index + 1 - separatorCount}. ` : "";
+              if (item.disabled) {
+                const disabledLabel = typeof item.disabled === "string" ? item.disabled : "(disabled)";
+                return theme.style.disabled(`${indexLabel}${item.name} ${disabledLabel}`);
+              }
+              const color = isActive ? theme.style.highlight : (x) => x;
+              const cursor = isActive ? theme.icon.cursor : ` `;
+              return color(`${cursor} ${indexLabel}${item.name}`);
+            },
+            pageSize,
+            loop
+          });
+          if (status === "done") {
+            return `${prefix} ${message} ${theme.style.answer(selectedChoice.short)}`;
+          }
+          const choiceDescription = selectedChoice.description ? `
+${theme.style.description(selectedChoice.description)}` : ``;
+          return `${[prefix, message, helpTipTop].filter(Boolean).join(" ")}
+${page}${helpTipBottom}${choiceDescription}${ansi_escapes_1.default.cursorHide}`;
+        });
+        var core_2 = require_commonjs3();
+        Object.defineProperty(exports22, "Separator", { enumerable: true, get: /* @__PURE__ */ __name(function() {
+          return core_2.Separator;
+        }, "get") });
+      }
+    });
+    var signalExit = require_cjs();
+    var supportsColor2 = (init_supports_color(), __toCommonJS2(supports_color_exports));
+    var hasFlag3 = (init_has_flag(), __toCommonJS2(has_flag_exports));
+    var yoctocolorsCjs = require_yoctocolors_cjs2();
+    var checkbox = require_commonjs4();
+    var confirm = require_commonjs5();
+    var input = require_commonjs6();
+    var password = require_commonjs7();
+    var search = require_commonjs8();
+    var select = require_commonjs9();
+    module2.exports = {
+      checkbox,
+      confirm,
+      hasFlag: hasFlag3,
+      input,
+      password,
+      search,
+      select,
+      signalExit,
+      supportsColor: supportsColor2,
+      yoctocolorsCjs
+    };
+  }
+});
+
+// @socketsecurity/lib/dist/external/yoctocolors-cjs.js
+var require_yoctocolors_cjs = __commonJS({
+  "@socketsecurity/lib/dist/external/yoctocolors-cjs.js"(exports2, module2) {
+    "use strict";
+    var { yoctocolorsCjs } = require_external_pack();
+    module2.exports = yoctocolorsCjs;
+    module2.exports.default = yoctocolorsCjs;
+  }
+});
+
+// @socketsecurity/lib/dist/ansi.js
+var require_ansi = __commonJS({
+  "@socketsecurity/lib/dist/ansi.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var ansi_exports = {};
+    __export2(ansi_exports, {
+      ANSI_BOLD: () => ANSI_BOLD,
+      ANSI_DIM: () => ANSI_DIM,
+      ANSI_ITALIC: () => ANSI_ITALIC,
+      ANSI_RESET: () => ANSI_RESET,
+      ANSI_STRIKETHROUGH: () => ANSI_STRIKETHROUGH,
+      ANSI_UNDERLINE: () => ANSI_UNDERLINE,
+      ansiRegex: () => ansiRegex2,
+      stripAnsi: () => stripAnsi2
+    });
+    module2.exports = __toCommonJS2(ansi_exports);
+    var ANSI_RESET = "\x1B[0m";
+    var ANSI_BOLD = "\x1B[1m";
+    var ANSI_DIM = "\x1B[2m";
+    var ANSI_ITALIC = "\x1B[3m";
+    var ANSI_UNDERLINE = "\x1B[4m";
+    var ANSI_STRIKETHROUGH = "\x1B[9m";
+    var ANSI_REGEX = /\x1b\[[0-9;]*m/g;
+    // @__NO_SIDE_EFFECTS__
+    function ansiRegex2(options) {
+      const { onlyFirst } = options ?? {};
+      const ST = "(?:\\u0007|\\u001B\\u005C|\\u009C)";
+      const osc = `(?:\\u001B\\][\\s\\S]*?${ST})`;
+      const csi = "[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]";
+      const pattern = `${osc}|${csi}`;
+      return new RegExp(pattern, onlyFirst ? void 0 : "g");
+    }
+    // @__NO_SIDE_EFFECTS__
+    function stripAnsi2(text) {
+      return text.replace(ANSI_REGEX, "");
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/external/get-east-asian-width.js
+var require_get_east_asian_width = __commonJS({
+  "@socketsecurity/lib/dist/external/get-east-asian-width.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __name = (target, value) => __defProp2(target, "name", { value, configurable: true });
+    var __esm = (fn, res) => function __init() {
+      return fn && (res = (0, fn[__getOwnPropNames2(fn)[0]])(fn = 0)), res;
+    };
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    function isAmbiguous(x) {
+      return x === 161 || x === 164 || x === 167 || x === 168 || x === 170 || x === 173 || x === 174 || x >= 176 && x <= 180 || x >= 182 && x <= 186 || x >= 188 && x <= 191 || x === 198 || x === 208 || x === 215 || x === 216 || x >= 222 && x <= 225 || x === 230 || x >= 232 && x <= 234 || x === 236 || x === 237 || x === 240 || x === 242 || x === 243 || x >= 247 && x <= 250 || x === 252 || x === 254 || x === 257 || x === 273 || x === 275 || x === 283 || x === 294 || x === 295 || x === 299 || x >= 305 && x <= 307 || x === 312 || x >= 319 && x <= 322 || x === 324 || x >= 328 && x <= 331 || x === 333 || x === 338 || x === 339 || x === 358 || x === 359 || x === 363 || x === 462 || x === 464 || x === 466 || x === 468 || x === 470 || x === 472 || x === 474 || x === 476 || x === 593 || x === 609 || x === 708 || x === 711 || x >= 713 && x <= 715 || x === 717 || x === 720 || x >= 728 && x <= 731 || x === 733 || x === 735 || x >= 768 && x <= 879 || x >= 913 && x <= 929 || x >= 931 && x <= 937 || x >= 945 && x <= 961 || x >= 963 && x <= 969 || x === 1025 || x >= 1040 && x <= 1103 || x === 1105 || x === 8208 || x >= 8211 && x <= 8214 || x === 8216 || x === 8217 || x === 8220 || x === 8221 || x >= 8224 && x <= 8226 || x >= 8228 && x <= 8231 || x === 8240 || x === 8242 || x === 8243 || x === 8245 || x === 8251 || x === 8254 || x === 8308 || x === 8319 || x >= 8321 && x <= 8324 || x === 8364 || x === 8451 || x === 8453 || x === 8457 || x === 8467 || x === 8470 || x === 8481 || x === 8482 || x === 8486 || x === 8491 || x === 8531 || x === 8532 || x >= 8539 && x <= 8542 || x >= 8544 && x <= 8555 || x >= 8560 && x <= 8569 || x === 8585 || x >= 8592 && x <= 8601 || x === 8632 || x === 8633 || x === 8658 || x === 8660 || x === 8679 || x === 8704 || x === 8706 || x === 8707 || x === 8711 || x === 8712 || x === 8715 || x === 8719 || x === 8721 || x === 8725 || x === 8730 || x >= 8733 && x <= 8736 || x === 8739 || x === 8741 || x >= 8743 && x <= 8748 || x === 8750 || x >= 8756 && x <= 8759 || x === 8764 || x === 8765 || x === 8776 || x === 8780 || x === 8786 || x === 8800 || x === 8801 || x >= 8804 && x <= 8807 || x === 8810 || x === 8811 || x === 8814 || x === 8815 || x === 8834 || x === 8835 || x === 8838 || x === 8839 || x === 8853 || x === 8857 || x === 8869 || x === 8895 || x === 8978 || x >= 9312 && x <= 9449 || x >= 9451 && x <= 9547 || x >= 9552 && x <= 9587 || x >= 9600 && x <= 9615 || x >= 9618 && x <= 9621 || x === 9632 || x === 9633 || x >= 9635 && x <= 9641 || x === 9650 || x === 9651 || x === 9654 || x === 9655 || x === 9660 || x === 9661 || x === 9664 || x === 9665 || x >= 9670 && x <= 9672 || x === 9675 || x >= 9678 && x <= 9681 || x >= 9698 && x <= 9701 || x === 9711 || x === 9733 || x === 9734 || x === 9737 || x === 9742 || x === 9743 || x === 9756 || x === 9758 || x === 9792 || x === 9794 || x === 9824 || x === 9825 || x >= 9827 && x <= 9829 || x >= 9831 && x <= 9834 || x === 9836 || x === 9837 || x === 9839 || x === 9886 || x === 9887 || x === 9919 || x >= 9926 && x <= 9933 || x >= 9935 && x <= 9939 || x >= 9941 && x <= 9953 || x === 9955 || x === 9960 || x === 9961 || x >= 9963 && x <= 9969 || x === 9972 || x >= 9974 && x <= 9977 || x === 9979 || x === 9980 || x === 9982 || x === 9983 || x === 10045 || x >= 10102 && x <= 10111 || x >= 11094 && x <= 11097 || x >= 12872 && x <= 12879 || x >= 57344 && x <= 63743 || x >= 65024 && x <= 65039 || x === 65533 || x >= 127232 && x <= 127242 || x >= 127248 && x <= 127277 || x >= 127280 && x <= 127337 || x >= 127344 && x <= 127373 || x === 127375 || x === 127376 || x >= 127387 && x <= 127404 || x >= 917760 && x <= 917999 || x >= 983040 && x <= 1048573 || x >= 1048576 && x <= 1114109;
+    }
+    function isFullWidth(x) {
+      return x === 12288 || x >= 65281 && x <= 65376 || x >= 65504 && x <= 65510;
+    }
+    function isWide(x) {
+      return x >= 4352 && x <= 4447 || x === 8986 || x === 8987 || x === 9001 || x === 9002 || x >= 9193 && x <= 9196 || x === 9200 || x === 9203 || x === 9725 || x === 9726 || x === 9748 || x === 9749 || x >= 9776 && x <= 9783 || x >= 9800 && x <= 9811 || x === 9855 || x >= 9866 && x <= 9871 || x === 9875 || x === 9889 || x === 9898 || x === 9899 || x === 9917 || x === 9918 || x === 9924 || x === 9925 || x === 9934 || x === 9940 || x === 9962 || x === 9970 || x === 9971 || x === 9973 || x === 9978 || x === 9981 || x === 9989 || x === 9994 || x === 9995 || x === 10024 || x === 10060 || x === 10062 || x >= 10067 && x <= 10069 || x === 10071 || x >= 10133 && x <= 10135 || x === 10160 || x === 10175 || x === 11035 || x === 11036 || x === 11088 || x === 11093 || x >= 11904 && x <= 11929 || x >= 11931 && x <= 12019 || x >= 12032 && x <= 12245 || x >= 12272 && x <= 12287 || x >= 12289 && x <= 12350 || x >= 12353 && x <= 12438 || x >= 12441 && x <= 12543 || x >= 12549 && x <= 12591 || x >= 12593 && x <= 12686 || x >= 12688 && x <= 12773 || x >= 12783 && x <= 12830 || x >= 12832 && x <= 12871 || x >= 12880 && x <= 42124 || x >= 42128 && x <= 42182 || x >= 43360 && x <= 43388 || x >= 44032 && x <= 55203 || x >= 63744 && x <= 64255 || x >= 65040 && x <= 65049 || x >= 65072 && x <= 65106 || x >= 65108 && x <= 65126 || x >= 65128 && x <= 65131 || x >= 94176 && x <= 94180 || x === 94192 || x === 94193 || x >= 94208 && x <= 100343 || x >= 100352 && x <= 101589 || x >= 101631 && x <= 101640 || x >= 110576 && x <= 110579 || x >= 110581 && x <= 110587 || x === 110589 || x === 110590 || x >= 110592 && x <= 110882 || x === 110898 || x >= 110928 && x <= 110930 || x === 110933 || x >= 110948 && x <= 110951 || x >= 110960 && x <= 111355 || x >= 119552 && x <= 119638 || x >= 119648 && x <= 119670 || x === 126980 || x === 127183 || x === 127374 || x >= 127377 && x <= 127386 || x >= 127488 && x <= 127490 || x >= 127504 && x <= 127547 || x >= 127552 && x <= 127560 || x === 127568 || x === 127569 || x >= 127584 && x <= 127589 || x >= 127744 && x <= 127776 || x >= 127789 && x <= 127797 || x >= 127799 && x <= 127868 || x >= 127870 && x <= 127891 || x >= 127904 && x <= 127946 || x >= 127951 && x <= 127955 || x >= 127968 && x <= 127984 || x === 127988 || x >= 127992 && x <= 128062 || x === 128064 || x >= 128066 && x <= 128252 || x >= 128255 && x <= 128317 || x >= 128331 && x <= 128334 || x >= 128336 && x <= 128359 || x === 128378 || x === 128405 || x === 128406 || x === 128420 || x >= 128507 && x <= 128591 || x >= 128640 && x <= 128709 || x === 128716 || x >= 128720 && x <= 128722 || x >= 128725 && x <= 128727 || x >= 128732 && x <= 128735 || x === 128747 || x === 128748 || x >= 128756 && x <= 128764 || x >= 128992 && x <= 129003 || x === 129008 || x >= 129292 && x <= 129338 || x >= 129340 && x <= 129349 || x >= 129351 && x <= 129535 || x >= 129648 && x <= 129660 || x >= 129664 && x <= 129673 || x >= 129679 && x <= 129734 || x >= 129742 && x <= 129756 || x >= 129759 && x <= 129769 || x >= 129776 && x <= 129784 || x >= 131072 && x <= 196605 || x >= 196608 && x <= 262141;
+    }
+    function getCategory(x) {
+      if (isAmbiguous(x)) return "ambiguous";
+      if (isFullWidth(x)) return "fullwidth";
+      if (x === 8361 || x >= 65377 && x <= 65470 || x >= 65474 && x <= 65479 || x >= 65482 && x <= 65487 || x >= 65490 && x <= 65495 || x >= 65498 && x <= 65500 || x >= 65512 && x <= 65518) {
+        return "halfwidth";
+      }
+      if (x >= 32 && x <= 126 || x === 162 || x === 163 || x === 165 || x === 166 || x === 172 || x === 175 || x >= 10214 && x <= 10221 || x === 10629 || x === 10630) {
+        return "narrow";
+      }
+      if (isWide(x)) return "wide";
+      return "neutral";
+    }
+    var init_lookup = __esm({
+      "get-east-asian-width/lookup.js"() {
+        __name(isAmbiguous, "isAmbiguous");
+        __name(isFullWidth, "isFullWidth");
+        __name(isWide, "isWide");
+        __name(getCategory, "getCategory");
+      }
+    });
+    var get_east_asian_width_exports = {};
+    __export2(get_east_asian_width_exports, {
+      _isNarrowWidth: () => _isNarrowWidth,
+      eastAsianWidth: () => eastAsianWidth,
+      eastAsianWidthType: () => eastAsianWidthType
+    });
+    function validate(codePoint) {
+      if (!Number.isSafeInteger(codePoint)) {
+        throw new TypeError(`Expected a code point, got \`${typeof codePoint}\`.`);
+      }
+    }
+    function eastAsianWidthType(codePoint) {
+      validate(codePoint);
+      return getCategory(codePoint);
+    }
+    function eastAsianWidth(codePoint, { ambiguousAsWide = false } = {}) {
+      validate(codePoint);
+      if (isFullWidth(codePoint) || isWide(codePoint) || ambiguousAsWide && isAmbiguous(codePoint)) {
+        return 2;
+      }
+      return 1;
+    }
+    var _isNarrowWidth;
+    var init_get_east_asian_width = __esm({
+      "get-east-asian-width/index.js"() {
+        init_lookup();
+        __name(validate, "validate");
+        __name(eastAsianWidthType, "eastAsianWidthType");
+        __name(eastAsianWidth, "eastAsianWidth");
+        _isNarrowWidth = /* @__PURE__ */ __name((codePoint) => !(isFullWidth(codePoint) || isWide(codePoint)), "_isNarrowWidth");
+      }
+    });
+    module2.exports = (init_get_east_asian_width(), __toCommonJS2(get_east_asian_width_exports));
+  }
+});
+
+// @socketsecurity/lib/dist/strings.js
+var require_strings = __commonJS({
+  "@socketsecurity/lib/dist/strings.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var strings_exports = {};
+    __export2(strings_exports, {
+      ansiRegex: () => import_ansi.ansiRegex,
+      applyLinePrefix: () => applyLinePrefix,
+      camelToKebab: () => camelToKebab,
+      centerText: () => centerText,
+      fromCharCode: () => fromCharCode,
+      indentString: () => indentString,
+      isBlankString: () => isBlankString,
+      isNonEmptyString: () => isNonEmptyString,
+      repeatString: () => repeatString,
+      search: () => search,
+      stringWidth: () => stringWidth,
+      stripAnsi: () => import_ansi.stripAnsi,
+      stripBom: () => stripBom,
+      toKebabCase: () => toKebabCase,
+      trimNewlines: () => trimNewlines
+    });
+    module2.exports = __toCommonJS2(strings_exports);
+    var import_ansi = require_ansi();
+    var _eastAsianWidth;
+    // @__NO_SIDE_EFFECTS__
+    function getEastAsianWidth() {
+      if (_eastAsianWidth === void 0) {
+        _eastAsianWidth = require_get_east_asian_width().eastAsianWidth;
+      }
+      return _eastAsianWidth;
+    }
+    var fromCharCode = String.fromCharCode;
+    // @__NO_SIDE_EFFECTS__
+    function applyLinePrefix(str, options) {
+      const { prefix = "" } = {
+        __proto__: null,
+        ...options
+      };
+      return prefix.length ? `${prefix}${str.includes("\n") ? str.replace(/\n/g, `
+${prefix}`) : str}` : str;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function camelToKebab(str) {
+      const { length } = str;
+      if (!length) {
+        return "";
+      }
+      let result = "";
+      let i = 0;
+      while (i < length) {
+        const char = str[i];
+        if (!char) {
+          break;
+        }
+        const charCode = char.charCodeAt(0);
+        const isUpperCase = charCode >= 65 && charCode <= 90;
+        if (isUpperCase) {
+          if (result.length > 0) {
+            result += "-";
+          }
+          while (i < length) {
+            const currChar = str[i];
+            if (!currChar) {
+              break;
+            }
+            const currCharCode = currChar.charCodeAt(0);
+            const isCurrUpper = currCharCode >= 65 && currCharCode <= 90;
+            if (isCurrUpper) {
+              result += fromCharCode(
+                currCharCode + 32
+                /*'a'-'A'*/
+              );
+              i += 1;
+            } else {
+              break;
+            }
+          }
+        } else {
+          result += char;
+          i += 1;
+        }
+      }
+      return result;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function centerText(text, width) {
+      const textLength = (0, import_ansi.stripAnsi)(text).length;
+      if (textLength >= width) {
+        return text;
+      }
+      const padding = width - textLength;
+      const leftPad = Math.floor(padding / 2);
+      const rightPad = padding - leftPad;
+      return " ".repeat(leftPad) + text + " ".repeat(rightPad);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function indentString(str, options) {
+      const { count = 1 } = { __proto__: null, ...options };
+      return str.replace(/^(?!\s*$)/gm, " ".repeat(count));
+    }
+    // @__NO_SIDE_EFFECTS__
+    function isBlankString(value) {
+      return typeof value === "string" && (!value.length || /^\s+$/.test(value));
+    }
+    // @__NO_SIDE_EFFECTS__
+    function isNonEmptyString(value) {
+      return typeof value === "string" && value.length > 0;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function repeatString(str, count) {
+      if (count <= 0) {
+        return "";
+      }
+      return str.repeat(count);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function search(str, regexp, options) {
+      const { fromIndex = 0 } = { __proto__: null, ...options };
+      const { length } = str;
+      if (fromIndex >= length) {
+        return -1;
+      }
+      if (fromIndex === 0) {
+        return str.search(regexp);
+      }
+      const offset = fromIndex < 0 ? Math.max(length + fromIndex, 0) : fromIndex;
+      const result = str.slice(offset).search(regexp);
+      return result === -1 ? -1 : result + offset;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function stripBom(str) {
+      return str.length > 0 && str.charCodeAt(0) === 65279 ? str.slice(1) : str;
+    }
+    var segmenter = new Intl.Segmenter();
+    var zeroWidthClusterRegex;
+    var leadingNonPrintingRegex;
+    var emojiRegex;
+    try {
+      zeroWidthClusterRegex = new RegExp("^(?:\\p{Default_Ignorable_Code_Point}|\\p{Control}|\\p{Mark}|\\p{Surrogate})+$", "v");
+      leadingNonPrintingRegex = new RegExp("^[\\p{Default_Ignorable_Code_Point}\\p{Control}\\p{Format}\\p{Mark}\\p{Surrogate}]+", "v");
+      emojiRegex = new RegExp("^\\p{RGI_Emoji}$", "v");
+    } catch {
+      zeroWidthClusterRegex = new RegExp("^(?:\\p{Default_Ignorable_Code_Point}|\\p{Control}|\\p{Mark})+$", "u");
+      leadingNonPrintingRegex = /^[\p{Default_Ignorable_Code_Point}\p{Control}\p{Format}\p{Mark}]+/u;
+      emojiRegex = new RegExp("^\\p{Extended_Pictographic}$", "u");
+    }
+    // @__NO_SIDE_EFFECTS__
+    function stringWidth(text) {
+      if (typeof text !== "string" || !text.length) {
+        return 0;
+      }
+      const plainText = (0, import_ansi.stripAnsi)(text);
+      if (!plainText.length) {
+        return 0;
+      }
+      let width = 0;
+      const eastAsianWidthOptions = { ambiguousAsWide: false };
+      const eastAsianWidth = /* @__PURE__ */ getEastAsianWidth();
+      for (const { segment } of segmenter.segment(plainText)) {
+        if (zeroWidthClusterRegex.test(segment)) {
+          continue;
+        }
+        if (emojiRegex.test(segment)) {
+          width += 2;
+          continue;
+        }
+        const baseSegment = segment.replace(leadingNonPrintingRegex, "");
+        const codePoint = baseSegment.codePointAt(0);
+        if (codePoint === void 0) {
+          continue;
+        }
+        width += eastAsianWidth(codePoint, eastAsianWidthOptions);
+        if (segment.length > 1) {
+          for (const char of segment.slice(1)) {
+            const charCode = char.charCodeAt(0);
+            if (charCode >= 65280 && charCode <= 65519) {
+              const trailingCodePoint = char.codePointAt(0);
+              if (trailingCodePoint !== void 0) {
+                width += eastAsianWidth(trailingCodePoint, eastAsianWidthOptions);
+              }
+            }
+          }
+        }
+      }
+      return width;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function toKebabCase(str) {
+      if (!str.length) {
+        return str;
+      }
+      return str.replace(/([a-z]+[0-9]*)([A-Z])/g, "$1-$2").replace(/_/g, "-").toLowerCase();
+    }
+    // @__NO_SIDE_EFFECTS__
+    function trimNewlines(str) {
+      const { length } = str;
+      if (length === 0) {
+        return str;
+      }
+      const first = str.charCodeAt(0);
+      const noFirstNewline = first !== 13 && first !== 10;
+      if (length === 1) {
+        return noFirstNewline ? str : "";
+      }
+      const last = str.charCodeAt(length - 1);
+      const noLastNewline = last !== 13 && last !== 10;
+      if (noFirstNewline && noLastNewline) {
+        return str;
+      }
+      let start = 0;
+      let end = length;
+      while (start < end) {
+        const code = str.charCodeAt(start);
+        if (code !== 13 && code !== 10) {
+          break;
+        }
+        start += 1;
+      }
+      while (end > start) {
+        const code = str.charCodeAt(end - 1);
+        if (code !== 13 && code !== 10) {
+          break;
+        }
+        end -= 1;
+      }
+      return start === 0 && end === length ? str : str.slice(start, end);
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/themes/themes.js
+var require_themes = __commonJS({
+  "@socketsecurity/lib/dist/themes/themes.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var themes_exports = {};
+    __export2(themes_exports, {
+      LUSH_THEME: () => LUSH_THEME,
+      SOCKET_THEME: () => SOCKET_THEME,
+      SUNSET_THEME: () => SUNSET_THEME,
+      TERRACOTTA_THEME: () => TERRACOTTA_THEME,
+      THEMES: () => THEMES,
+      ULTRA_THEME: () => ULTRA_THEME
+    });
+    module2.exports = __toCommonJS2(themes_exports);
+    var SOCKET_THEME = {
+      name: "socket",
+      displayName: "Socket Security",
+      colors: {
+        primary: [140, 82, 255],
+        success: "greenBright",
+        error: "redBright",
+        warning: "yellowBright",
+        info: "blueBright",
+        step: "cyanBright",
+        text: "white",
+        textDim: "gray",
+        link: "cyanBright",
+        prompt: "primary"
+      },
+      effects: {
+        spinner: {
+          color: "primary",
+          style: "socket"
+        },
+        shimmer: {
+          enabled: true,
+          color: "inherit",
+          direction: "ltr",
+          speed: 0.33
+        }
+      },
+      meta: {
+        description: "Signature theme with refined violet and subtle shimmer",
+        version: "1.0.0"
+      }
+    };
+    var SUNSET_THEME = {
+      name: "sunset",
+      displayName: "Sunset",
+      colors: {
+        primary: [255, 140, 100],
+        secondary: [200, 100, 180],
+        success: "greenBright",
+        error: "redBright",
+        warning: "yellowBright",
+        info: "magentaBright",
+        step: "magentaBright",
+        text: "white",
+        textDim: "gray",
+        link: "primary",
+        prompt: "primary"
+      },
+      effects: {
+        spinner: {
+          color: "primary",
+          style: "dots"
+        },
+        shimmer: {
+          enabled: true,
+          color: [
+            [200, 100, 180],
+            [255, 140, 100]
+          ],
+          direction: "ltr",
+          speed: 0.4
+        }
+      },
+      meta: {
+        description: "Warm sunset theme with purple-to-orange gradient",
+        version: "2.0.0"
+      }
+    };
+    var TERRACOTTA_THEME = {
+      name: "terracotta",
+      displayName: "Terracotta",
+      colors: {
+        primary: [255, 100, 50],
+        secondary: [255, 150, 100],
+        success: "greenBright",
+        error: "redBright",
+        warning: "yellowBright",
+        info: "blueBright",
+        step: "cyanBright",
+        text: "white",
+        textDim: "gray",
+        link: "secondary",
+        prompt: "primary"
+      },
+      effects: {
+        spinner: {
+          color: "primary",
+          style: "socket"
+        },
+        shimmer: {
+          enabled: true,
+          color: "inherit",
+          direction: "ltr",
+          speed: 0.5
+        }
+      },
+      meta: {
+        description: "Solid theme with rich terracotta and ember warmth",
+        version: "1.0.0"
+      }
+    };
+    var LUSH_THEME = {
+      name: "lush",
+      displayName: "Lush",
+      colors: {
+        primary: [70, 130, 180],
+        secondary: [255, 215, 0],
+        success: "greenBright",
+        error: "redBright",
+        warning: "yellowBright",
+        info: "blueBright",
+        step: "cyanBright",
+        text: "white",
+        textDim: "gray",
+        link: "cyanBright",
+        prompt: "primary"
+      },
+      effects: {
+        spinner: {
+          color: "primary",
+          style: "dots"
+        }
+      },
+      meta: {
+        description: "Elegant theme with steel blue and golden harmony",
+        version: "1.0.0"
+      }
+    };
+    var ULTRA_THEME = {
+      name: "ultra",
+      displayName: "Ultra",
+      colors: {
+        primary: [140, 82, 255],
+        success: "greenBright",
+        error: "redBright",
+        warning: "yellowBright",
+        info: "cyanBright",
+        step: "magentaBright",
+        text: "whiteBright",
+        textDim: "gray",
+        link: "cyanBright",
+        prompt: "primary"
+      },
+      effects: {
+        spinner: {
+          color: "inherit",
+          style: "socket"
+        },
+        shimmer: {
+          enabled: true,
+          color: "rainbow",
+          direction: "bi",
+          speed: 0.5
+        }
+      },
+      meta: {
+        description: "Premium theme with prismatic shimmer for deep analysis",
+        version: "1.0.0"
+      }
+    };
+    var THEMES = {
+      __proto__: null,
+      socket: SOCKET_THEME,
+      sunset: SUNSET_THEME,
+      terracotta: TERRACOTTA_THEME,
+      lush: LUSH_THEME,
+      ultra: ULTRA_THEME
+    };
+  }
+});
+
+// @socketsecurity/lib/dist/themes/context.js
+var require_context = __commonJS({
+  "@socketsecurity/lib/dist/themes/context.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var context_exports = {};
+    __export2(context_exports, {
+      getTheme: () => getTheme,
+      onThemeChange: () => onThemeChange,
+      setTheme: () => setTheme,
+      withTheme: () => withTheme,
+      withThemeSync: () => withThemeSync
+    });
+    module2.exports = __toCommonJS2(context_exports);
+    var import_themes = require_themes();
+    var _async_hooks;
+    // @__NO_SIDE_EFFECTS__
+    function getAsyncHooks() {
+      if (_async_hooks === void 0) {
+        _async_hooks = require("node:async_hooks");
+      }
+      return _async_hooks;
+    }
+    var { AsyncLocalStorage } = /* @__PURE__ */ getAsyncHooks();
+    var themeStorage = new AsyncLocalStorage();
+    var fallbackTheme = import_themes.SOCKET_THEME;
+    var listeners = /* @__PURE__ */ new Set();
+    function setTheme(theme) {
+      fallbackTheme = typeof theme === "string" ? import_themes.THEMES[theme] : theme;
+      emitThemeChange(fallbackTheme);
+    }
+    function getTheme() {
+      return themeStorage.getStore() ?? fallbackTheme;
+    }
+    async function withTheme(theme, fn) {
+      const resolvedTheme = typeof theme === "string" ? import_themes.THEMES[theme] : theme;
+      return await themeStorage.run(resolvedTheme, async () => {
+        emitThemeChange(resolvedTheme);
+        return await fn();
+      });
+    }
+    function withThemeSync(theme, fn) {
+      const resolvedTheme = typeof theme === "string" ? import_themes.THEMES[theme] : theme;
+      return themeStorage.run(resolvedTheme, () => {
+        emitThemeChange(resolvedTheme);
+        return fn();
+      });
+    }
+    function onThemeChange(listener) {
+      listeners.add(listener);
+      return () => {
+        listeners.delete(listener);
+      };
+    }
+    function emitThemeChange(theme) {
+      for (const listener of listeners) {
+        listener(theme);
+      }
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/logger.js
+var require_logger = __commonJS({
+  "@socketsecurity/lib/dist/logger.js"(exports2, module2) {
+    "use strict";
+    var __create2 = Object.create;
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __getProtoOf2 = Object.getPrototypeOf;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2(
+      // If the importer is in node compatibility mode or this is not an ESM
+      // file that has been converted to a CommonJS file using a Babel-
+      // compatible transform (i.e. "__esModule" has not been set), then set
+      // "default" to the CommonJS "module.exports" for node compatibility.
+      isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target,
+      mod
+    ));
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var logger_exports = {};
+    __export2(logger_exports, {
+      LOG_SYMBOLS: () => LOG_SYMBOLS,
+      Logger: () => Logger,
+      getDefaultLogger: () => getDefaultLogger,
+      incLogCallCountSymbol: () => incLogCallCountSymbol,
+      lastWasBlankSymbol: () => lastWasBlankSymbol
+    });
+    module2.exports = __toCommonJS2(logger_exports);
+    var import_node_process3 = __toESM2(require("node:process"));
+    var import_is_unicode_supported = __toESM2(require_is_unicode_supported());
+    var import_yoctocolors_cjs = __toESM2(require_yoctocolors_cjs());
+    var import_strings = require_strings();
+    var import_context = require_context();
+    var import_themes = require_themes();
+    var globalConsole = console;
+    var ReflectApply = Reflect.apply;
+    var ReflectConstruct = Reflect.construct;
+    var _Console;
+    // @__NO_SIDE_EFFECTS__
+    function constructConsole(...args) {
+      if (_Console === void 0) {
+        const nodeConsole = require("node:console");
+        _Console = nodeConsole.Console;
+      }
+      return ReflectConstruct(
+        _Console,
+        // eslint-disable-line no-undef
+        args
+      );
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getYoctocolors() {
+      return import_yoctocolors_cjs.default;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function applyColor(text, color, colors) {
+      if (typeof color === "string") {
+        return colors[color](text);
+      }
+      const { 0: r, 1: g, 2: b } = color;
+      return `\x1B[38;2;${r};${g};${b}m${text}\x1B[39m`;
+    }
+    var LOG_SYMBOLS = /* @__PURE__ */ (() => {
+      const target = {
+        __proto__: null
+      };
+      let initialized = false;
+      const handler = {
+        __proto__: null
+      };
+      const updateSymbols = () => {
+        const supported = (0, import_is_unicode_supported.default)();
+        const colors = /* @__PURE__ */ getYoctocolors();
+        const theme = (0, import_context.getTheme)();
+        const successColor = theme.colors.success;
+        const errorColor = theme.colors.error;
+        const warningColor = theme.colors.warning;
+        const infoColor = theme.colors.info;
+        const stepColor = theme.colors.step;
+        target.fail = /* @__PURE__ */ applyColor(supported ? "\u2716" : "\xD7", errorColor, colors);
+        target.info = /* @__PURE__ */ applyColor(supported ? "\u2139" : "i", infoColor, colors);
+        target.progress = /* @__PURE__ */ applyColor(supported ? "\u2234" : ":.", stepColor, colors);
+        target.reason = colors.dim(
+          /* @__PURE__ */ applyColor(supported ? "\u2234" : ":.", warningColor, colors)
+        );
+        target.skip = /* @__PURE__ */ applyColor(supported ? "\u21BB" : "@", stepColor, colors);
+        target.step = /* @__PURE__ */ applyColor(supported ? "\u2192" : ">", stepColor, colors);
+        target.success = /* @__PURE__ */ applyColor(supported ? "\u2714" : "\u221A", successColor, colors);
+        target.warn = /* @__PURE__ */ applyColor(supported ? "\u26A0" : "\u203C", warningColor, colors);
+      };
+      const init = () => {
+        if (initialized) {
+          return;
+        }
+        updateSymbols();
+        initialized = true;
+        for (const trapName in handler) {
+          delete handler[trapName];
+        }
+      };
+      const reset = () => {
+        if (!initialized) {
+          return;
+        }
+        updateSymbols();
+      };
+      for (const trapName of Reflect.ownKeys(Reflect)) {
+        const fn = Reflect[trapName];
+        if (typeof fn === "function") {
+          ;
+          handler[trapName] = (...args) => {
+            init();
+            return fn(...args);
+          };
+        }
+      }
+      (0, import_context.onThemeChange)(() => {
+        reset();
+      });
+      return new Proxy(target, handler);
+    })();
+    var boundConsoleEntries = [
+      // Add bound properties from console[kBindProperties](ignoreErrors, colorMode, groupIndentation).
+      // https://github.com/nodejs/node/blob/v24.0.1/lib/internal/console/constructor.js#L230-L265
+      "_stderrErrorHandler",
+      "_stdoutErrorHandler",
+      // Add methods that need to be bound to function properly.
+      "assert",
+      "clear",
+      "count",
+      "countReset",
+      "createTask",
+      "debug",
+      "dir",
+      "dirxml",
+      "error",
+      // Skip group methods because in at least Node 20 with the Node --frozen-intrinsics
+      // flag it triggers a readonly property for Symbol(kGroupIndent). Instead, we
+      // implement these methods ourselves.
+      //'group',
+      //'groupCollapsed',
+      //'groupEnd',
+      "info",
+      "log",
+      "table",
+      "time",
+      "timeEnd",
+      "timeLog",
+      "trace",
+      "warn"
+    ].filter((n) => typeof globalConsole[n] === "function").map((n) => [n, globalConsole[n].bind(globalConsole)]);
+    var consolePropAttributes = {
+      __proto__: null,
+      writable: true,
+      enumerable: false,
+      configurable: true
+    };
+    var maxIndentation = 1e3;
+    var privateConsole = /* @__PURE__ */ new WeakMap();
+    var privateConstructorArgs = /* @__PURE__ */ new WeakMap();
+    var _consoleSymbols;
+    function getConsoleSymbols() {
+      if (_consoleSymbols === void 0) {
+        _consoleSymbols = Object.getOwnPropertySymbols(globalConsole);
+      }
+      return _consoleSymbols;
+    }
+    var incLogCallCountSymbol = Symbol.for("logger.logCallCount++");
+    var _kGroupIndentationWidthSymbol;
+    function getKGroupIndentationWidthSymbol() {
+      if (_kGroupIndentationWidthSymbol === void 0) {
+        _kGroupIndentationWidthSymbol = getConsoleSymbols().find((s) => s.label === "kGroupIndentWidth") ?? Symbol("kGroupIndentWidth");
+      }
+      return _kGroupIndentationWidthSymbol;
+    }
+    var lastWasBlankSymbol = Symbol.for("logger.lastWasBlank");
+    var Logger = class _Logger {
+      /**
+       * Static reference to log symbols for convenience.
+       *
+       * @example
+       * ```typescript
+       * console.log(`${Logger.LOG_SYMBOLS.success} Done`)
+       * ```
+       */
+      static LOG_SYMBOLS = LOG_SYMBOLS;
+      #parent;
+      #boundStream;
+      #stderrLogger;
+      #stdoutLogger;
+      #stderrIndention = "";
+      #stdoutIndention = "";
+      #stderrLastWasBlank = false;
+      #stdoutLastWasBlank = false;
+      #logCallCount = 0;
+      #options;
+      #originalStdout;
+      #theme;
+      /**
+       * Creates a new Logger instance.
+       *
+       * When called without arguments, creates a logger using the default
+       * `process.stdout` and `process.stderr` streams. Can accept custom
+       * console constructor arguments for advanced use cases.
+       *
+       * @param args - Optional console constructor arguments
+       *
+       * @example
+       * ```typescript
+       * // Default logger
+       * const logger = new Logger()
+       *
+       * // Custom streams (advanced)
+       * const customLogger = new Logger({
+       *   stdout: customWritableStream,
+       *   stderr: customErrorStream
+       * })
+       * ```
+       */
+      constructor(...args) {
+        privateConstructorArgs.set(this, args);
+        const options = args["0"];
+        if (typeof options === "object" && options !== null) {
+          this.#options = { __proto__: null, ...options };
+          this.#originalStdout = options.stdout;
+          const themeOption = options.theme;
+          if (themeOption) {
+            if (typeof themeOption === "string") {
+              this.#theme = import_themes.THEMES[themeOption];
+            } else {
+              this.#theme = themeOption;
+            }
+          }
+        } else {
+          this.#options = { __proto__: null };
+        }
+      }
+      /**
+       * Apply a console method with indentation.
+       * @private
+       */
+      #apply(methodName, args, stream) {
+        const con = this.#getConsole();
+        const text = args.at(0);
+        const hasText = typeof text === "string";
+        const targetStream = stream || (methodName === "log" ? "stdout" : "stderr");
+        const indent = this.#getIndent(targetStream);
+        const logArgs = hasText ? [(0, import_strings.applyLinePrefix)(text, { prefix: indent }), ...args.slice(1)] : args;
+        ReflectApply(
+          con[methodName],
+          con,
+          logArgs
+        );
+        this[lastWasBlankSymbol](hasText && (0, import_strings.isBlankString)(logArgs[0]), targetStream);
+        this[incLogCallCountSymbol]();
+        return this;
+      }
+      /**
+       * Get the Console instance for this logger, creating it lazily on first access.
+       *
+       * This lazy initialization allows the logger to be imported during early
+       * Node.js bootstrap before stdout is ready, avoiding Console initialization
+       * errors (ERR_CONSOLE_WRITABLE_STREAM).
+       *
+       * @private
+       */
+      #getConsole() {
+        ensurePrototypeInitialized();
+        let con = privateConsole.get(this);
+        if (!con) {
+          const ctorArgs = privateConstructorArgs.get(this) ?? [];
+          if (ctorArgs.length) {
+            con = /* @__PURE__ */ constructConsole(...ctorArgs);
+          } else {
+            con = /* @__PURE__ */ constructConsole({
+              stdout: import_node_process3.default.stdout,
+              stderr: import_node_process3.default.stderr
+            });
+            for (const { 0: key, 1: method } of boundConsoleEntries) {
+              con[key] = method;
+            }
+          }
+          privateConsole.set(this, con);
+          privateConstructorArgs.delete(this);
+        }
+        return con;
+      }
+      /**
+       * Get indentation for a specific stream.
+       * @private
+       */
+      #getIndent(stream) {
+        const root = this.#getRoot();
+        return stream === "stderr" ? root.#stderrIndention : root.#stdoutIndention;
+      }
+      /**
+       * Get lastWasBlank state for a specific stream.
+       * @private
+       */
+      #getLastWasBlank(stream) {
+        const root = this.#getRoot();
+        return stream === "stderr" ? root.#stderrLastWasBlank : root.#stdoutLastWasBlank;
+      }
+      /**
+       * Get the root logger (for accessing shared indentation state).
+       * @private
+       */
+      #getRoot() {
+        return this.#parent || this;
+      }
+      /**
+       * Get logger-specific symbols using the resolved theme.
+       * @private
+       */
+      #getSymbols() {
+        const theme = this.#getTheme();
+        const supported = (0, import_is_unicode_supported.default)();
+        const colors = /* @__PURE__ */ getYoctocolors();
+        return {
+          __proto__: null,
+          fail: /* @__PURE__ */ applyColor(supported ? "\u2716" : "\xD7", theme.colors.error, colors),
+          info: /* @__PURE__ */ applyColor(supported ? "\u2139" : "i", theme.colors.info, colors),
+          progress: /* @__PURE__ */ applyColor(supported ? "\u2234" : ":.", theme.colors.step, colors),
+          skip: /* @__PURE__ */ applyColor(supported ? "\u21BB" : "@", theme.colors.step, colors),
+          step: /* @__PURE__ */ applyColor(supported ? "\u2192" : ">", theme.colors.step, colors),
+          success: /* @__PURE__ */ applyColor(supported ? "\u2714" : "\u221A", theme.colors.success, colors),
+          warn: /* @__PURE__ */ applyColor(supported ? "\u26A0" : "\u203C", theme.colors.warning, colors)
+        };
+      }
+      /**
+       * Get the target stream for this logger instance.
+       * @private
+       */
+      #getTargetStream() {
+        return this.#boundStream || "stderr";
+      }
+      /**
+       * Get the resolved theme for this logger instance.
+       * Returns instance theme if set, otherwise falls back to context theme.
+       * @private
+       */
+      #getTheme() {
+        return this.#theme ?? (0, import_context.getTheme)();
+      }
+      /**
+       * Set indentation for a specific stream.
+       * @private
+       */
+      #setIndent(stream, value) {
+        const root = this.#getRoot();
+        if (stream === "stderr") {
+          root.#stderrIndention = value;
+        } else {
+          root.#stdoutIndention = value;
+        }
+      }
+      /**
+       * Set lastWasBlank state for a specific stream.
+       * @private
+       */
+      #setLastWasBlank(stream, value) {
+        const root = this.#getRoot();
+        if (stream === "stderr") {
+          root.#stderrLastWasBlank = value;
+        } else {
+          root.#stdoutLastWasBlank = value;
+        }
+      }
+      /**
+       * Strip log symbols from the start of text.
+       * @private
+       */
+      #stripSymbols(text) {
+        return text.replace(/^(?:[✖✗×⚠‼✔✓√ℹ→∴↻]|:.)[\uFE0F\s]*/u, "");
+      }
+      /**
+       * Apply a method with a symbol prefix.
+       * @private
+       */
+      #symbolApply(symbolType, args) {
+        const con = this.#getConsole();
+        let text = args.at(0);
+        let extras;
+        if (typeof text === "string") {
+          text = this.#stripSymbols(text);
+          extras = args.slice(1);
+        } else {
+          extras = args;
+          text = "";
+        }
+        const indent = this.#getIndent("stderr");
+        const symbols = this.#getSymbols();
+        con.error(
+          (0, import_strings.applyLinePrefix)(`${symbols[symbolType]} ${text}`, {
+            prefix: indent
+          }),
+          ...extras
+        );
+        this[lastWasBlankSymbol](false, "stderr");
+        this[incLogCallCountSymbol]();
+        return this;
+      }
+      /**
+       * Gets a logger instance bound exclusively to stderr.
+       *
+       * All logging operations on this instance will write to stderr only.
+       * Indentation is tracked separately from stdout. The instance is
+       * cached and reused on subsequent accesses.
+       *
+       * @returns A logger instance bound to stderr
+       *
+       * @example
+       * ```typescript
+       * // Write errors to stderr
+       * logger.stderr.error('Configuration invalid')
+       * logger.stderr.warn('Using fallback settings')
+       *
+       * // Indent only affects stderr
+       * logger.stderr.indent()
+       * logger.stderr.error('Nested error details')
+       * logger.stderr.dedent()
+       * ```
+       */
+      get stderr() {
+        if (!this.#stderrLogger) {
+          const ctorArgs = privateConstructorArgs.get(this) ?? [];
+          const instance = new _Logger(...ctorArgs);
+          instance.#parent = this;
+          instance.#boundStream = "stderr";
+          instance.#options = { __proto__: null, ...this.#options };
+          instance.#theme = this.#theme;
+          this.#stderrLogger = instance;
+        }
+        return this.#stderrLogger;
+      }
+      /**
+       * Gets a logger instance bound exclusively to stdout.
+       *
+       * All logging operations on this instance will write to stdout only.
+       * Indentation is tracked separately from stderr. The instance is
+       * cached and reused on subsequent accesses.
+       *
+       * @returns A logger instance bound to stdout
+       *
+       * @example
+       * ```typescript
+       * // Write normal output to stdout
+       * logger.stdout.log('Processing started')
+       * logger.stdout.log('Items processed: 42')
+       *
+       * // Indent only affects stdout
+       * logger.stdout.indent()
+       * logger.stdout.log('Detailed output')
+       * logger.stdout.dedent()
+       * ```
+       */
+      get stdout() {
+        if (!this.#stdoutLogger) {
+          const ctorArgs = privateConstructorArgs.get(this) ?? [];
+          const instance = new _Logger(...ctorArgs);
+          instance.#parent = this;
+          instance.#boundStream = "stdout";
+          instance.#options = { __proto__: null, ...this.#options };
+          instance.#theme = this.#theme;
+          this.#stdoutLogger = instance;
+        }
+        return this.#stdoutLogger;
+      }
+      /**
+       * Gets the total number of log calls made on this logger instance.
+       *
+       * Tracks all logging method calls including `log()`, `error()`, `warn()`,
+       * `success()`, `fail()`, etc. Useful for testing and monitoring logging activity.
+       *
+       * @returns The number of times logging methods have been called
+       *
+       * @example
+       * ```typescript
+       * logger.log('Message 1')
+       * logger.error('Message 2')
+       * console.log(logger.logCallCount) // 2
+       * ```
+       */
+      get logCallCount() {
+        const root = this.#getRoot();
+        return root.#logCallCount;
+      }
+      /**
+       * Increments the internal log call counter.
+       *
+       * This is called automatically by logging methods and should not
+       * be called directly in normal usage.
+       *
+       * @returns The logger instance for chaining
+       */
+      [incLogCallCountSymbol]() {
+        const root = this.#getRoot();
+        root.#logCallCount += 1;
+        return this;
+      }
+      /**
+       * Sets whether the last logged line was blank.
+       *
+       * Used internally to track blank lines and prevent duplicate spacing.
+       * This is called automatically by logging methods.
+       *
+       * @param value - Whether the last line was blank
+       * @param stream - Optional stream to update (defaults to both streams if not bound, or target stream if bound)
+       * @returns The logger instance for chaining
+       */
+      [lastWasBlankSymbol](value, stream) {
+        if (stream) {
+          this.#setLastWasBlank(stream, !!value);
+        } else if (this.#boundStream) {
+          this.#setLastWasBlank(this.#boundStream, !!value);
+        } else {
+          this.#setLastWasBlank("stderr", !!value);
+          this.#setLastWasBlank("stdout", !!value);
+        }
+        return this;
+      }
+      /**
+       * Logs an assertion failure message if the value is falsy.
+       *
+       * Works like `console.assert()` but returns the logger for chaining.
+       * If the value is truthy, nothing is logged. If falsy, logs an error
+       * message with an assertion failure.
+       *
+       * @param value - The value to test
+       * @param message - Optional message and additional arguments to log
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.assert(true, 'This will not log')
+       * logger.assert(false, 'Assertion failed: value is false')
+       * logger.assert(items.length > 0, 'No items found')
+       * ```
+       */
+      assert(value, ...message) {
+        const con = this.#getConsole();
+        con.assert(value, message[0], ...message.slice(1));
+        this[lastWasBlankSymbol](false);
+        return value ? this : this[incLogCallCountSymbol]();
+      }
+      /**
+       * Clears the current line in the terminal.
+       *
+       * Moves the cursor to the beginning of the line and clears all content.
+       * Works in both TTY and non-TTY environments. Useful for clearing
+       * progress indicators created with `progress()`.
+       *
+       * The stream to clear (stderr or stdout) depends on whether the logger
+       * is stream-bound.
+       *
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.progress('Loading...')
+       * // ... do work ...
+       * logger.clearLine()
+       * logger.success('Loaded')
+       *
+       * // Clear multiple progress updates
+       * for (const file of files) {
+       *   logger.progress(`Processing ${file}`)
+       *   processFile(file)
+       *   logger.clearLine()
+       * }
+       * logger.success('All files processed')
+       * ```
+       */
+      clearLine() {
+        const con = this.#getConsole();
+        const stream = this.#getTargetStream();
+        const streamObj = stream === "stderr" ? con._stderr : con._stdout;
+        if (streamObj.isTTY) {
+          streamObj.cursorTo(0);
+          streamObj.clearLine(0);
+        } else {
+          streamObj.write("\r\x1B[K");
+        }
+        return this;
+      }
+      /**
+       * Clears the visible terminal screen.
+       *
+       * Only available on the main logger instance, not on stream-bound instances
+       * (`.stderr` or `.stdout`). Resets the log call count and blank line tracking
+       * if the output is a TTY.
+       *
+       * @returns The logger instance for chaining
+       * @throws {Error} If called on a stream-bound logger instance
+       *
+       * @example
+       * ```typescript
+       * logger.log('Some output')
+       * logger.clearVisible()  // Screen is now clear
+       *
+       * // Error: Can't call on stream-bound instance
+       * logger.stderr.clearVisible()  // throws
+       * ```
+       */
+      clearVisible() {
+        if (this.#boundStream) {
+          throw new Error(
+            "clearVisible() is only available on the main logger instance, not on stream-bound instances"
+          );
+        }
+        const con = this.#getConsole();
+        con.clear();
+        if (con._stdout.isTTY) {
+          ;
+          this[lastWasBlankSymbol](true);
+          this.#logCallCount = 0;
+        }
+        return this;
+      }
+      /**
+       * Increments and logs a counter for the given label.
+       *
+       * Each unique label maintains its own counter. Works like `console.count()`.
+       *
+       * @param label - Optional label for the counter
+       * @default 'default'
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.count('requests')  // requests: 1
+       * logger.count('requests')  // requests: 2
+       * logger.count('errors')    // errors: 1
+       * logger.count()            // default: 1
+       * ```
+       */
+      count(label) {
+        const con = this.#getConsole();
+        con.count(label);
+        this[lastWasBlankSymbol](false);
+        return this[incLogCallCountSymbol]();
+      }
+      /**
+       * Creates a task that logs start and completion messages automatically.
+       *
+       * Returns a task object with a `run()` method that executes the provided
+       * function and logs "Starting task: {name}" before execution and
+       * "Completed task: {name}" after completion.
+       *
+       * @param name - The name of the task
+       * @returns A task object with a `run()` method
+       *
+       * @example
+       * ```typescript
+       * const task = logger.createTask('Database Migration')
+       * const result = task.run(() => {
+       *   // Logs: "Starting task: Database Migration"
+       *   migrateDatabase()
+       *   return 'success'
+       *   // Logs: "Completed task: Database Migration"
+       * })
+       * console.log(result)  // 'success'
+       * ```
+       */
+      createTask(name) {
+        return {
+          run: (f) => {
+            this.log(`Starting task: ${name}`);
+            const result = f();
+            this.log(`Completed task: ${name}`);
+            return result;
+          }
+        };
+      }
+      /**
+       * Decreases the indentation level by removing spaces from the prefix.
+       *
+       * When called on the main logger, affects both stderr and stdout indentation.
+       * When called on a stream-bound logger (`.stderr` or `.stdout`), affects
+       * only that stream's indentation.
+       *
+       * @param spaces - Number of spaces to remove from indentation
+       * @default 2
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.indent()
+       * logger.log('Indented')
+       * logger.dedent()
+       * logger.log('Back to normal')
+       *
+       * // Remove custom amount
+       * logger.indent(4)
+       * logger.log('Four spaces')
+       * logger.dedent(4)
+       *
+       * // Stream-specific dedent
+       * logger.stdout.indent()
+       * logger.stdout.log('Indented stdout')
+       * logger.stdout.dedent()
+       * ```
+       */
+      dedent(spaces = 2) {
+        if (this.#boundStream) {
+          const current = this.#getIndent(this.#boundStream);
+          this.#setIndent(this.#boundStream, current.slice(0, -spaces));
+        } else {
+          const stderrCurrent = this.#getIndent("stderr");
+          const stdoutCurrent = this.#getIndent("stdout");
+          this.#setIndent("stderr", stderrCurrent.slice(0, -spaces));
+          this.#setIndent("stdout", stdoutCurrent.slice(0, -spaces));
+        }
+        return this;
+      }
+      /**
+       * Displays an object's properties in a formatted way.
+       *
+       * Works like `console.dir()` with customizable options for depth,
+       * colors, etc. Useful for inspecting complex objects.
+       *
+       * @param obj - The object to display
+       * @param options - Optional formatting options (Node.js inspect options)
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * const obj = { a: 1, b: { c: 2, d: { e: 3 } } }
+       * logger.dir(obj)
+       * logger.dir(obj, { depth: 1 })  // Limit nesting depth
+       * logger.dir(obj, { colors: true })  // Enable colors
+       * ```
+       */
+      dir(obj, options) {
+        const con = this.#getConsole();
+        con.dir(obj, options);
+        this[lastWasBlankSymbol](false);
+        return this[incLogCallCountSymbol]();
+      }
+      /**
+       * Displays data as XML/HTML in a formatted way.
+       *
+       * Works like `console.dirxml()`. In Node.js, behaves the same as `dir()`.
+       *
+       * @param data - The data to display
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.dirxml(document.body)  // In browser environments
+       * logger.dirxml(xmlObject)       // In Node.js
+       * ```
+       */
+      dirxml(...data) {
+        const con = this.#getConsole();
+        con.dirxml(data);
+        this[lastWasBlankSymbol](false);
+        return this[incLogCallCountSymbol]();
+      }
+      /**
+       * Logs a completion message with a success symbol (alias for `success()`).
+       *
+       * Provides semantic clarity when marking something as "done". Does NOT
+       * automatically clear the current line - call `clearLine()` first if
+       * needed after using `progress()`.
+       *
+       * @param args - Message and additional arguments to log
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.done('Task completed')
+       *
+       * // After progress indicator
+       * logger.progress('Processing...')
+       * // ... do work ...
+       * logger.clearLine()
+       * logger.done('Processing complete')
+       * ```
+       */
+      done(...args) {
+        return this.#symbolApply("success", args);
+      }
+      /**
+       * Logs an error message to stderr.
+       *
+       * Automatically applies current indentation. All arguments are formatted
+       * and logged like `console.error()`.
+       *
+       * @param args - Message and additional arguments to log
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.error('Build failed')
+       * logger.error('Error code:', 500)
+       * logger.error('Details:', { message: 'Not found' })
+       * ```
+       */
+      error(...args) {
+        return this.#apply("error", args);
+      }
+      /**
+       * Logs a newline to stderr only if the last line wasn't already blank.
+       *
+       * Prevents multiple consecutive blank lines. Useful for adding spacing
+       * between sections without creating excessive whitespace.
+       *
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.error('Error message')
+       * logger.errorNewline()  // Adds blank line
+       * logger.errorNewline()  // Does nothing (already blank)
+       * logger.error('Next section')
+       * ```
+       */
+      errorNewline() {
+        return this.#getLastWasBlank("stderr") ? this : this.error("");
+      }
+      /**
+       * Logs a failure message with a red colored fail symbol.
+       *
+       * Automatically prefixes the message with `LOG_SYMBOLS.fail` (red ✖).
+       * Always outputs to stderr. If the message starts with an existing
+       * symbol, it will be stripped and replaced.
+       *
+       * @param args - Message and additional arguments to log
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.fail('Build failed')
+       * logger.fail('Test suite failed:', { passed: 5, failed: 3 })
+       * ```
+       */
+      fail(...args) {
+        return this.#symbolApply("fail", args);
+      }
+      /**
+       * Starts a new indented log group.
+       *
+       * If a label is provided, it's logged before increasing indentation.
+       * Groups can be nested. Each group increases indentation by the
+       * `kGroupIndentWidth` (default 2 spaces). Call `groupEnd()` to close.
+       *
+       * @param label - Optional label to display before the group
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.group('Processing files:')
+       * logger.log('file1.js')
+       * logger.log('file2.js')
+       * logger.groupEnd()
+       *
+       * // Nested groups
+       * logger.group('Outer')
+       * logger.log('Outer content')
+       * logger.group('Inner')
+       * logger.log('Inner content')
+       * logger.groupEnd()
+       * logger.groupEnd()
+       * ```
+       */
+      group(...label) {
+        const { length } = label;
+        if (length) {
+          ReflectApply(this.log, this, label);
+        }
+        this.indent(this[getKGroupIndentationWidthSymbol()]);
+        if (length) {
+          ;
+          this[lastWasBlankSymbol](false);
+          this[incLogCallCountSymbol]();
+        }
+        return this;
+      }
+      /**
+       * Starts a new collapsed log group (alias for `group()`).
+       *
+       * In browser consoles, this creates a collapsed group. In Node.js,
+       * it behaves identically to `group()`.
+       *
+       * @param label - Optional label to display before the group
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.groupCollapsed('Details')
+       * logger.log('Hidden by default in browsers')
+       * logger.groupEnd()
+       * ```
+       */
+      // groupCollapsed is an alias of group.
+      // https://nodejs.org/api/console.html#consolegroupcollapsed
+      groupCollapsed(...label) {
+        return ReflectApply(this.group, this, label);
+      }
+      /**
+       * Ends the current log group and decreases indentation.
+       *
+       * Must be called once for each `group()` or `groupCollapsed()` call
+       * to properly close the group and restore indentation.
+       *
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.group('Group 1')
+       * logger.log('Content')
+       * logger.groupEnd()  // Closes 'Group 1'
+       * ```
+       */
+      groupEnd() {
+        this.dedent(this[getKGroupIndentationWidthSymbol()]);
+        return this;
+      }
+      /**
+       * Increases the indentation level by adding spaces to the prefix.
+       *
+       * When called on the main logger, affects both stderr and stdout indentation.
+       * When called on a stream-bound logger (`.stderr` or `.stdout`), affects
+       * only that stream's indentation. Maximum indentation is 1000 spaces.
+       *
+       * @param spaces - Number of spaces to add to indentation
+       * @default 2
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.log('Level 0')
+       * logger.indent()
+       * logger.log('Level 1')
+       * logger.indent()
+       * logger.log('Level 2')
+       * logger.dedent()
+       * logger.dedent()
+       *
+       * // Custom indent amount
+       * logger.indent(4)
+       * logger.log('Indented 4 spaces')
+       * logger.dedent(4)
+       *
+       * // Stream-specific indent
+       * logger.stdout.indent()
+       * logger.stdout.log('Only stdout is indented')
+       * ```
+       */
+      indent(spaces = 2) {
+        const spacesToAdd = " ".repeat(Math.min(spaces, maxIndentation));
+        if (this.#boundStream) {
+          const current = this.#getIndent(this.#boundStream);
+          this.#setIndent(this.#boundStream, current + spacesToAdd);
+        } else {
+          const stderrCurrent = this.#getIndent("stderr");
+          const stdoutCurrent = this.#getIndent("stdout");
+          this.#setIndent("stderr", stderrCurrent + spacesToAdd);
+          this.#setIndent("stdout", stdoutCurrent + spacesToAdd);
+        }
+        return this;
+      }
+      /**
+       * Logs an informational message with a blue colored info symbol.
+       *
+       * Automatically prefixes the message with `LOG_SYMBOLS.info` (blue ℹ).
+       * Always outputs to stderr. If the message starts with an existing
+       * symbol, it will be stripped and replaced.
+       *
+       * @param args - Message and additional arguments to log
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.info('Starting build process')
+       * logger.info('Configuration loaded:', config)
+       * logger.info('Using cache directory:', cacheDir)
+       * ```
+       */
+      info(...args) {
+        return this.#symbolApply("info", args);
+      }
+      /**
+       * Logs a message to stdout.
+       *
+       * Automatically applies current indentation. All arguments are formatted
+       * and logged like `console.log()`. This is the primary method for
+       * standard output.
+       *
+       * @param args - Message and additional arguments to log
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.log('Processing complete')
+       * logger.log('Items processed:', 42)
+       * logger.log('Results:', { success: true, count: 10 })
+       *
+       * // Method chaining
+       * logger.log('Step 1').log('Step 2').log('Step 3')
+       * ```
+       */
+      log(...args) {
+        return this.#apply("log", args);
+      }
+      /**
+       * Logs a newline to stdout only if the last line wasn't already blank.
+       *
+       * Prevents multiple consecutive blank lines. Useful for adding spacing
+       * between sections without creating excessive whitespace.
+       *
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.log('Section 1')
+       * logger.logNewline()  // Adds blank line
+       * logger.logNewline()  // Does nothing (already blank)
+       * logger.log('Section 2')
+       * ```
+       */
+      logNewline() {
+        return this.#getLastWasBlank("stdout") ? this : this.log("");
+      }
+      /**
+       * Shows a progress indicator that can be cleared with `clearLine()`.
+       *
+       * Displays a simple status message with a '∴' prefix. Does not include
+       * animation or spinner. Intended to be cleared once the operation completes.
+       * The output stream (stderr or stdout) depends on whether the logger is
+       * stream-bound.
+       *
+       * @param text - The progress message to display
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.progress('Processing files...')
+       * // ... do work ...
+       * logger.clearLine()
+       * logger.success('Files processed')
+       *
+       * // Stream-specific progress
+       * logger.stdout.progress('Loading...')
+       * // ... do work ...
+       * logger.stdout.clearLine()
+       * logger.stdout.log('Done')
+       * ```
+       */
+      progress(text) {
+        const con = this.#getConsole();
+        const stream = this.#getTargetStream();
+        const streamObj = stream === "stderr" ? con._stderr : con._stdout;
+        const symbols = this.#getSymbols();
+        streamObj.write(`${symbols.progress} ${text}`);
+        this[lastWasBlankSymbol](false);
+        return this;
+      }
+      /**
+       * Resets all indentation to zero.
+       *
+       * When called on the main logger, resets both stderr and stdout indentation.
+       * When called on a stream-bound logger (`.stderr` or `.stdout`), resets
+       * only that stream's indentation.
+       *
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.indent().indent().indent()
+       * logger.log('Very indented')
+       * logger.resetIndent()
+       * logger.log('Back to zero indentation')
+       *
+       * // Reset only stdout
+       * logger.stdout.resetIndent()
+       * ```
+       */
+      resetIndent() {
+        if (this.#boundStream) {
+          this.#setIndent(this.#boundStream, "");
+        } else {
+          this.#setIndent("stderr", "");
+          this.#setIndent("stdout", "");
+        }
+        return this;
+      }
+      /**
+       * Logs a skip message with a cyan colored skip symbol.
+       *
+       * Automatically prefixes the message with `LOG_SYMBOLS.skip` (cyan ↻).
+       * Always outputs to stderr. If the message starts with an existing
+       * symbol, it will be stripped and replaced.
+       *
+       * @param args - Message and additional arguments to log
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.skip('Test skipped due to environment')
+       * logger.skip('Skipping optional step')
+       * logger.skip('Feature disabled, skipping')
+       * ```
+       */
+      skip(...args) {
+        return this.#symbolApply("skip", args);
+      }
+      /**
+       * Logs a main step message with a cyan arrow symbol and blank line before it.
+       *
+       * Automatically prefixes the message with `LOG_SYMBOLS.step` (cyan →) and
+       * adds a blank line before the message unless the last line was already blank.
+       * Useful for marking major steps in a process with clear visual separation.
+       * Always outputs to stdout. If the message starts with an existing symbol,
+       * it will be stripped and replaced.
+       *
+       * @param msg - The step message to log
+       * @param extras - Additional arguments to log
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.step('Building project')
+       * logger.log('Compiling TypeScript...')
+       * logger.step('Running tests')
+       * logger.log('Running test suite...')
+       * // Output:
+       * // [blank line]
+       * // → Building project
+       * // Compiling TypeScript...
+       * // [blank line]
+       * // → Running tests
+       * // Running test suite...
+       * ```
+       */
+      step(msg, ...extras) {
+        if (!this.#getLastWasBlank("stdout")) {
+          this.log("");
+        }
+        const text = this.#stripSymbols(msg);
+        const indent = this.#getIndent("stdout");
+        const symbols = this.#getSymbols();
+        const con = this.#getConsole();
+        con.log(
+          (0, import_strings.applyLinePrefix)(`${symbols.step} ${text}`, {
+            prefix: indent
+          }),
+          ...extras
+        );
+        this[lastWasBlankSymbol](false, "stdout");
+        this[incLogCallCountSymbol]();
+        return this;
+      }
+      /**
+       * Logs an indented substep message (stateless).
+       *
+       * Adds a 2-space indent to the message without affecting the logger's
+       * indentation state. Useful for showing sub-items under a main step.
+       *
+       * @param msg - The substep message to log
+       * @param extras - Additional arguments to log
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.log('Installing dependencies:')
+       * logger.substep('Installing react')
+       * logger.substep('Installing typescript')
+       * logger.substep('Installing eslint')
+       * // Output:
+       * // Installing dependencies:
+       * //   Installing react
+       * //   Installing typescript
+       * //   Installing eslint
+       * ```
+       */
+      substep(msg, ...extras) {
+        const indentedMsg = `  ${msg}`;
+        return this.log(indentedMsg, ...extras);
+      }
+      /**
+       * Logs a success message with a green colored success symbol.
+       *
+       * Automatically prefixes the message with `LOG_SYMBOLS.success` (green ✔).
+       * Always outputs to stderr. If the message starts with an existing
+       * symbol, it will be stripped and replaced.
+       *
+       * @param args - Message and additional arguments to log
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.success('Build completed')
+       * logger.success('Tests passed:', { total: 42, passed: 42 })
+       * logger.success('Deployment successful')
+       * ```
+       */
+      success(...args) {
+        return this.#symbolApply("success", args);
+      }
+      /**
+       * Displays data in a table format.
+       *
+       * Works like `console.table()`. Accepts arrays of objects or
+       * objects with nested objects. Optionally specify which properties
+       * to include in the table.
+       *
+       * @param tabularData - The data to display as a table
+       * @param properties - Optional array of property names to include
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * // Array of objects
+       * logger.table([
+       *   { name: 'Alice', age: 30 },
+       *   { name: 'Bob', age: 25 }
+       * ])
+       *
+       * // Specify properties to show
+       * logger.table(users, ['name', 'email'])
+       *
+       * // Object with nested objects
+       * logger.table({
+       *   user1: { name: 'Alice', age: 30 },
+       *   user2: { name: 'Bob', age: 25 }
+       * })
+       * ```
+       */
+      table(tabularData, properties) {
+        const con = this.#getConsole();
+        con.table(tabularData, properties);
+        this[lastWasBlankSymbol](false);
+        return this[incLogCallCountSymbol]();
+      }
+      /**
+       * Starts a timer for measuring elapsed time.
+       *
+       * Creates a timer with the given label. Use `timeEnd()` with the same
+       * label to stop the timer and log the elapsed time, or use `timeLog()`
+       * to check the time without stopping the timer.
+       *
+       * @param label - Optional label for the timer
+       * @default 'default'
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.time('operation')
+       * // ... do work ...
+       * logger.timeEnd('operation')
+       * // Logs: "operation: 123.456ms"
+       *
+       * logger.time()
+       * // ... do work ...
+       * logger.timeEnd()
+       * // Logs: "default: 123.456ms"
+       * ```
+       */
+      time(label) {
+        const con = this.#getConsole();
+        con.time(label);
+        return this;
+      }
+      /**
+       * Ends a timer and logs the elapsed time.
+       *
+       * Logs the duration since `console.time()` or `logger.time()` was called
+       * with the same label. The timer is stopped and removed.
+       *
+       * @param label - Optional label for the timer
+       * @default 'default'
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.time('operation')
+       * // ... do work ...
+       * logger.timeEnd('operation')
+       * // Logs: "operation: 123.456ms"
+       *
+       * logger.time()
+       * // ... do work ...
+       * logger.timeEnd()
+       * // Logs: "default: 123.456ms"
+       * ```
+       */
+      timeEnd(label) {
+        const con = this.#getConsole();
+        con.timeEnd(label);
+        this[lastWasBlankSymbol](false);
+        return this[incLogCallCountSymbol]();
+      }
+      /**
+       * Logs the current value of a timer without stopping it.
+       *
+       * Logs the duration since `console.time()` was called with the same
+       * label, but keeps the timer running. Can include additional data
+       * to log alongside the time.
+       *
+       * @param label - Optional label for the timer
+       * @param data - Additional data to log with the time
+       * @default 'default'
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * console.time('process')
+       * // ... partial work ...
+       * logger.timeLog('process', 'Checkpoint 1')
+       * // Logs: "process: 123.456ms Checkpoint 1"
+       * // ... more work ...
+       * logger.timeLog('process', 'Checkpoint 2')
+       * // Logs: "process: 234.567ms Checkpoint 2"
+       * console.timeEnd('process')
+       * ```
+       */
+      timeLog(label, ...data) {
+        const con = this.#getConsole();
+        con.timeLog(label, ...data);
+        this[lastWasBlankSymbol](false);
+        return this[incLogCallCountSymbol]();
+      }
+      /**
+       * Logs a stack trace to the console.
+       *
+       * Works like `console.trace()`. Shows the call stack leading to
+       * where this method was called. Useful for debugging.
+       *
+       * @param message - Optional message to display with the trace
+       * @param args - Additional arguments to log
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * function debugFunction() {
+       *   logger.trace('Debug point reached')
+       * }
+       *
+       * logger.trace('Trace from here')
+       * logger.trace('Error context:', { userId: 123 })
+       * ```
+       */
+      trace(message, ...args) {
+        const con = this.#getConsole();
+        con.trace(message, ...args);
+        this[lastWasBlankSymbol](false);
+        return this[incLogCallCountSymbol]();
+      }
+      /**
+       * Logs a warning message with a yellow colored warning symbol.
+       *
+       * Automatically prefixes the message with `LOG_SYMBOLS.warn` (yellow ⚠).
+       * Always outputs to stderr. If the message starts with an existing
+       * symbol, it will be stripped and replaced.
+       *
+       * @param args - Message and additional arguments to log
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.warn('Deprecated API used')
+       * logger.warn('Low memory:', { available: '100MB' })
+       * logger.warn('Missing optional configuration')
+       * ```
+       */
+      warn(...args) {
+        return this.#symbolApply("warn", args);
+      }
+      /**
+       * Writes text directly to stdout without a newline or indentation.
+       *
+       * Useful for progress indicators or custom formatting where you need
+       * low-level control. Does not apply any indentation or formatting.
+       *
+       * @param text - The text to write
+       * @returns The logger instance for chaining
+       *
+       * @example
+       * ```typescript
+       * logger.write('Processing... ')
+       * // ... do work ...
+       * logger.write('done\n')
+       *
+       * // Build a line incrementally
+       * logger.write('Step 1')
+       * logger.write('... Step 2')
+       * logger.write('... Step 3\n')
+       * ```
+       */
+      write(text) {
+        const con = this.#getConsole();
+        const ctorArgs = privateConstructorArgs.get(this) ?? [];
+        const stdout = this.#originalStdout || ctorArgs[0]?.stdout || con._stdout;
+        stdout.write(text);
+        this[lastWasBlankSymbol](false);
+        return this;
+      }
+    };
+    var _prototypeInitialized = false;
+    function ensurePrototypeInitialized() {
+      if (_prototypeInitialized) {
+        return;
+      }
+      _prototypeInitialized = true;
+      const entries = [
+        [
+          getKGroupIndentationWidthSymbol(),
+          {
+            ...consolePropAttributes,
+            value: 2
+          }
+        ],
+        [
+          Symbol.toStringTag,
+          {
+            __proto__: null,
+            configurable: true,
+            value: "logger"
+          }
+        ]
+      ];
+      for (const { 0: key, 1: value } of Object.entries(globalConsole)) {
+        if (!Logger.prototype[key] && typeof value === "function") {
+          const { [key]: func } = {
+            [key](...args) {
+              let con = privateConsole.get(this);
+              if (con === void 0) {
+                const ctorArgs = privateConstructorArgs.get(this) ?? [];
+                privateConstructorArgs.delete(this);
+                if (ctorArgs.length) {
+                  con = /* @__PURE__ */ constructConsole(...ctorArgs);
+                } else {
+                  con = /* @__PURE__ */ constructConsole({
+                    stdout: import_node_process3.default.stdout,
+                    stderr: import_node_process3.default.stderr
+                  });
+                  for (const { 0: k, 1: method } of boundConsoleEntries) {
+                    con[k] = method;
+                  }
+                }
+                privateConsole.set(this, con);
+              }
+              const result = con[key](...args);
+              return result === void 0 || result === con ? this : result;
+            }
+          };
+          entries.push([
+            key,
+            {
+              ...consolePropAttributes,
+              value: func
+            }
+          ]);
+        }
+      }
+      Object.defineProperties(Logger.prototype, Object.fromEntries(entries));
+    }
+    var _logger;
+    function getDefaultLogger() {
+      if (_logger === void 0) {
+        _logger = new Logger();
+      }
+      return _logger;
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/colors.js
+var require_colors = __commonJS({
+  "@socketsecurity/lib/dist/colors.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var colors_exports = {};
+    __export2(colors_exports, {
+      isRgbTuple: () => isRgbTuple,
+      toRgb: () => toRgb
+    });
+    module2.exports = __toCommonJS2(colors_exports);
+    var colorToRgb = {
+      __proto__: null,
+      black: [0, 0, 0],
+      blue: [0, 0, 255],
+      blueBright: [100, 149, 237],
+      cyan: [0, 255, 255],
+      cyanBright: [0, 255, 255],
+      gray: [128, 128, 128],
+      green: [0, 128, 0],
+      greenBright: [0, 255, 0],
+      magenta: [255, 0, 255],
+      magentaBright: [255, 105, 180],
+      red: [255, 0, 0],
+      redBright: [255, 69, 0],
+      white: [255, 255, 255],
+      whiteBright: [255, 255, 255],
+      yellow: [255, 255, 0],
+      yellowBright: [255, 255, 153]
+    };
+    function isRgbTuple(value) {
+      return Array.isArray(value);
+    }
+    function toRgb(color) {
+      if (isRgbTuple(color)) {
+        return color;
+      }
+      return colorToRgb[color];
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/constants/process.js
+var require_process = __commonJS({
+  "@socketsecurity/lib/dist/constants/process.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var process_exports = {};
+    __export2(process_exports, {
+      getAbortController: () => getAbortController,
+      getAbortSignal: () => getAbortSignal2
+    });
+    module2.exports = __toCommonJS2(process_exports);
+    var _abortController;
+    function getAbortController() {
+      if (_abortController === void 0) {
+        _abortController = new AbortController();
+      }
+      return _abortController;
+    }
+    function getAbortSignal2() {
+      return getAbortController().signal;
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/env/ci.js
+var require_ci = __commonJS({
+  "@socketsecurity/lib/dist/env/ci.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var ci_exports = {};
+    __export2(ci_exports, {
+      getCI: () => getCI
+    });
+    module2.exports = __toCommonJS2(ci_exports);
+    var import_rewire = require_rewire();
+    // @__NO_SIDE_EFFECTS__
+    function getCI() {
+      return (0, import_rewire.isInEnv)("CI");
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/effects/pulse-frames.js
+var require_pulse_frames = __commonJS({
+  "@socketsecurity/lib/dist/effects/pulse-frames.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var pulse_frames_exports = {};
+    __export2(pulse_frames_exports, {
+      generateSocketSpinnerFrames: () => generateSocketSpinnerFrames
+    });
+    module2.exports = __toCommonJS2(pulse_frames_exports);
+    function generateSocketSpinnerFrames(options) {
+      const opts = { __proto__: null, ...options };
+      const interval = opts.interval ?? 50;
+      const bold = "\x1B[1m";
+      const dim = "\x1B[2m";
+      const reset = "\x1B[0m";
+      const lightning = "\u26A1\uFE0E";
+      const starFilled = "\u2726\uFE0E ";
+      const starOutline = "\u2727\uFE0E ";
+      const starTiny = "\u22C6\uFE0E ";
+      const frames = [
+        // Build up from dim to bright
+        `${dim}${starOutline}${reset}`,
+        `${dim}${starOutline}${reset}`,
+        `${dim}${starTiny}${reset}`,
+        `${starFilled}${reset}`,
+        `${starFilled}${reset}`,
+        `${bold}${starFilled}${reset}`,
+        `${bold}${starFilled}${reset}`,
+        `${bold}${lightning}${reset}`,
+        `${bold}${lightning}${reset}`,
+        `${bold}${lightning}${reset}`,
+        // Fade down
+        `${bold}${lightning}${reset}`,
+        `${bold}${lightning}${reset}`,
+        `${bold}${starFilled}${reset}`,
+        `${bold}${starFilled}${reset}`,
+        `${starFilled}${reset}`,
+        `${starFilled}${reset}`,
+        `${dim}${starTiny}${reset}`,
+        `${dim}${starOutline}${reset}`
+      ];
+      return {
+        __proto__: null,
+        frames,
+        interval
+      };
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/effects/ultra.js
+var require_ultra = __commonJS({
+  "@socketsecurity/lib/dist/effects/ultra.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var ultra_exports = {};
+    __export2(ultra_exports, {
+      RAINBOW_GRADIENT: () => RAINBOW_GRADIENT,
+      generateRainbowGradient: () => generateRainbowGradient
+    });
+    module2.exports = __toCommonJS2(ultra_exports);
+    var RAINBOW_GRADIENT = [
+      // Red/pink.
+      [255, 100, 120],
+      // Orange.
+      [255, 140, 80],
+      // Yellow/gold.
+      [255, 180, 60],
+      // Yellow/green.
+      [220, 200, 80],
+      // Green.
+      [120, 200, 100],
+      // Cyan/turquoise.
+      [80, 200, 180],
+      // Blue.
+      [80, 160, 220],
+      // Purple/violet.
+      [140, 120, 220],
+      // Pink/magenta.
+      [200, 100, 200],
+      // Red/pink.
+      [255, 100, 140]
+    ];
+    function generateRainbowGradient(textLength) {
+      const colors = [];
+      for (let i = 0; i < textLength; i += 1) {
+        const colorIndex = i % RAINBOW_GRADIENT.length;
+        const color = RAINBOW_GRADIENT[colorIndex];
+        if (color) {
+          colors.push(color);
+        }
+      }
+      return colors;
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/themes/utils.js
+var require_utils = __commonJS({
+  "@socketsecurity/lib/dist/themes/utils.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var utils_exports = {};
+    __export2(utils_exports, {
+      createTheme: () => createTheme,
+      extendTheme: () => extendTheme,
+      resolveColor: () => resolveColor,
+      resolveShimmerColor: () => resolveShimmerColor
+    });
+    module2.exports = __toCommonJS2(utils_exports);
+    var import_ultra = require_ultra();
+    function resolveColor(value, colors) {
+      if (typeof value === "string") {
+        if (value === "primary") {
+          return colors.primary;
+        }
+        if (value === "secondary") {
+          return colors.secondary ?? colors.primary;
+        }
+        if (value === "inherit") {
+          return "inherit";
+        }
+        if (value === "rainbow") {
+          return import_ultra.RAINBOW_GRADIENT;
+        }
+        return value;
+      }
+      return value;
+    }
+    function resolveShimmerColor(value, theme) {
+      if (!value) {
+        return "inherit";
+      }
+      if (value === "rainbow") {
+        return import_ultra.RAINBOW_GRADIENT;
+      }
+      if (value === "inherit") {
+        return "inherit";
+      }
+      if (Array.isArray(value)) {
+        if (value.length > 0 && Array.isArray(value[0])) {
+          return value;
+        }
+        return value;
+      }
+      return resolveColor(value, theme.colors);
+    }
+    function extendTheme(base, overrides) {
+      return {
+        __proto__: null,
+        ...base,
+        ...overrides,
+        colors: {
+          __proto__: null,
+          ...base.colors,
+          ...overrides.colors
+        },
+        effects: overrides.effects ? {
+          __proto__: null,
+          ...base.effects,
+          ...overrides.effects,
+          spinner: overrides.effects.spinner !== void 0 ? {
+            __proto__: null,
+            ...base.effects?.spinner,
+            ...overrides.effects.spinner
+          } : base.effects?.spinner,
+          shimmer: overrides.effects.shimmer !== void 0 ? {
+            __proto__: null,
+            ...base.effects?.shimmer,
+            ...overrides.effects.shimmer
+          } : base.effects?.shimmer,
+          pulse: overrides.effects.pulse !== void 0 ? {
+            __proto__: null,
+            ...base.effects?.pulse,
+            ...overrides.effects.pulse
+          } : base.effects?.pulse
+        } : base.effects,
+        meta: overrides.meta ? {
+          __proto__: null,
+          ...base.meta,
+          ...overrides.meta
+        } : base.meta
+      };
+    }
+    function createTheme(config) {
+      return {
+        __proto__: null,
+        name: config.name,
+        displayName: config.displayName,
+        colors: { __proto__: null, ...config.colors },
+        effects: config.effects ? { __proto__: null, ...config.effects } : void 0,
+        meta: config.meta ? { __proto__: null, ...config.meta } : void 0
+      };
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/effects/text-shimmer.js
+var require_text_shimmer = __commonJS({
+  "@socketsecurity/lib/dist/effects/text-shimmer.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var text_shimmer_exports = {};
+    __export2(text_shimmer_exports, {
+      COLOR_INHERIT: () => COLOR_INHERIT,
+      DIR_LTR: () => DIR_LTR,
+      DIR_NONE: () => DIR_NONE,
+      DIR_RANDOM: () => DIR_RANDOM,
+      DIR_RTL: () => DIR_RTL,
+      MODE_BI: () => MODE_BI,
+      applyShimmer: () => applyShimmer
+    });
+    module2.exports = __toCommonJS2(text_shimmer_exports);
+    var import_ansi = require_ansi();
+    var import_arrays = require_arrays();
+    var import_ci = require_ci();
+    var import_utils2 = require_utils();
+    var import_themes = require_themes();
+    function detectStyles(text) {
+      return {
+        __proto__: null,
+        // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape sequence detection.
+        bold: /\x1b\[1m/.test(text),
+        // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape sequence detection.
+        dim: /\x1b\[2m/.test(text),
+        // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape sequence detection.
+        italic: /\x1b\[3m/.test(text),
+        // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape sequence detection.
+        strikethrough: /\x1b\[9m/.test(text),
+        // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape sequence detection.
+        underline: /\x1b\[4m/.test(text)
+      };
+    }
+    function stylesToAnsi(styles) {
+      let codes = "";
+      if (styles.bold) {
+        codes += "\x1B[1m";
+      }
+      if (styles.dim) {
+        codes += "\x1B[2m";
+      }
+      if (styles.italic) {
+        codes += "\x1B[3m";
+      }
+      if (styles.underline) {
+        codes += "\x1B[4m";
+      }
+      if (styles.strikethrough) {
+        codes += "\x1B[9m";
+      }
+      return codes;
+    }
+    var COLOR_INHERIT = "inherit";
+    var DIR_LTR = "ltr";
+    var DIR_NONE = "none";
+    var DIR_RANDOM = "random";
+    var DIR_RTL = "rtl";
+    var MODE_BI = "bi";
+    function shimmerIntensity(distance, shimmerWidth = 2.5) {
+      if (distance > shimmerWidth) {
+        return 0;
+      }
+      const normalized = distance / shimmerWidth;
+      return (1 - normalized) ** 2.5;
+    }
+    function blendColors(color1, color2, factor) {
+      const r = Math.round(color1[0] + (color2[0] - color1[0]) * factor);
+      const g = Math.round(color1[1] + (color2[1] - color1[1]) * factor);
+      const b = Math.round(color1[2] + (color2[2] - color1[2]) * factor);
+      return [r, g, b];
+    }
+    function renderChar(char, index, shimmerPos, baseColor, styles) {
+      const distance = Math.abs(index - shimmerPos);
+      const intensity = shimmerIntensity(distance);
+      const styleCode = stylesToAnsi(styles);
+      const charColor = (0, import_arrays.isArray)(baseColor[0]) ? baseColor[index % baseColor.length] ?? [
+        140,
+        82,
+        255
+      ] : baseColor;
+      if (intensity === 0) {
+        const base = `\x1B[38;2;${charColor[0]};${charColor[1]};${charColor[2]}m`;
+        return `${styleCode}${base}${char}${import_ansi.ANSI_RESET}`;
+      }
+      const white = [255, 255, 255];
+      const blended = blendColors(charColor, white, intensity);
+      const color = `\x1B[38;2;${blended[0]};${blended[1]};${blended[2]}m`;
+      return `${styleCode}${color}${char}${import_ansi.ANSI_RESET}`;
+    }
+    function getShimmerPos(textLength, step, currentDir, shimmerWidth = 2.5) {
+      const totalSteps = textLength + shimmerWidth + 2;
+      if (currentDir === DIR_RTL) {
+        return textLength - step % totalSteps;
+      }
+      return step % totalSteps;
+    }
+    function pickDirection(direction) {
+      if (direction === DIR_RANDOM) {
+        return Math.random() < 0.5 ? DIR_LTR : DIR_RTL;
+      }
+      if (direction === DIR_RTL) {
+        return DIR_RTL;
+      }
+      return DIR_LTR;
+    }
+    function applyShimmer(text, state, options) {
+      const opts = { __proto__: null, ...options };
+      const direction = opts.direction ?? DIR_NONE;
+      const shimmerWidth = opts.shimmerWidth ?? 2.5;
+      let color;
+      if (opts.theme) {
+        const theme = typeof opts.theme === "string" ? import_themes.THEMES[opts.theme] : opts.theme;
+        const themeColor = (0, import_utils2.resolveColor)(
+          theme.colors.primary,
+          theme.colors
+        );
+        color = typeof themeColor === "string" ? [140, 82, 255] : themeColor;
+      } else {
+        color = opts.color ?? [140, 82, 255];
+      }
+      const styles = opts.styles ?? detectStyles(text);
+      const plainText = (0, import_ansi.stripAnsi)(text);
+      if ((0, import_ci.getCI)() || !plainText || direction === DIR_NONE) {
+        const styleCode = stylesToAnsi(styles);
+        const isGradient = (0, import_arrays.isArray)(color[0]);
+        return plainText.split("").map((char, i) => {
+          const charColor = isGradient ? color[i % color.length] ?? [
+            140,
+            82,
+            255
+          ] : color;
+          const base = `\x1B[38;2;${charColor[0]};${charColor[1]};${charColor[2]}m`;
+          return `${styleCode}${base}${char}${import_ansi.ANSI_RESET}`;
+        }).join("");
+      }
+      const shimmerPos = getShimmerPos(
+        plainText.length,
+        state.step,
+        state.currentDir,
+        shimmerWidth
+      );
+      const result = plainText.split("").map((char, i) => renderChar(char, i, shimmerPos, color, styles)).join("");
+      state.step += state.speed;
+      const totalSteps = plainText.length + shimmerWidth + 2;
+      if (state.mode === MODE_BI) {
+        if (state.step >= totalSteps) {
+          state.step = 0;
+          state.currentDir = state.currentDir === DIR_LTR ? DIR_RTL : DIR_LTR;
+        }
+      } else if (state.mode === DIR_RANDOM) {
+        if (state.step >= totalSteps) {
+          state.step = 0;
+          state.currentDir = pickDirection(DIR_RANDOM);
+        }
+      } else {
+        if (state.step >= totalSteps) {
+          state.step = 0;
+        }
+      }
+      return result;
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/external/@socketregistry/yocto-spinner.js
+var require_yocto_spinner = __commonJS({
+  "@socketsecurity/lib/dist/external/@socketregistry/yocto-spinner.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __name = (target, value) => __defProp2(target, "name", { value, configurable: true });
+    var __commonJS2 = (cb, mod) => function __require() {
+      return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+    };
+    var require_yoctocolors_cjs2 = __commonJS2({
+      "yoctocolors-cjs/index.js"(exports22, module22) {
+        var tty = require("node:tty");
+        var hasColors = tty?.WriteStream?.prototype?.hasColors?.() ?? false;
+        var format = /* @__PURE__ */ __name((open, close) => {
+          if (!hasColors) {
+            return (input) => input;
+          }
+          const openCode = `\x1B[${open}m`;
+          const closeCode = `\x1B[${close}m`;
+          return (input) => {
+            const string = input + "";
+            let index = string.indexOf(closeCode);
+            if (index === -1) {
+              return openCode + string + closeCode;
+            }
+            let result = openCode;
+            let lastIndex = 0;
+            const reopenOnNestedClose = close === 22;
+            const replaceCode = (reopenOnNestedClose ? closeCode : "") + openCode;
+            while (index !== -1) {
+              result += string.slice(lastIndex, index) + replaceCode;
+              lastIndex = index + closeCode.length;
+              index = string.indexOf(closeCode, lastIndex);
+            }
+            result += string.slice(lastIndex) + closeCode;
+            return result;
+          };
+        }, "format");
+        var colors = {};
+        colors.reset = format(0, 0);
+        colors.bold = format(1, 22);
+        colors.dim = format(2, 22);
+        colors.italic = format(3, 23);
+        colors.underline = format(4, 24);
+        colors.overline = format(53, 55);
+        colors.inverse = format(7, 27);
+        colors.hidden = format(8, 28);
+        colors.strikethrough = format(9, 29);
+        colors.black = format(30, 39);
+        colors.red = format(31, 39);
+        colors.green = format(32, 39);
+        colors.yellow = format(33, 39);
+        colors.blue = format(34, 39);
+        colors.magenta = format(35, 39);
+        colors.cyan = format(36, 39);
+        colors.white = format(37, 39);
+        colors.gray = format(90, 39);
+        colors.bgBlack = format(40, 49);
+        colors.bgRed = format(41, 49);
+        colors.bgGreen = format(42, 49);
+        colors.bgYellow = format(43, 49);
+        colors.bgBlue = format(44, 49);
+        colors.bgMagenta = format(45, 49);
+        colors.bgCyan = format(46, 49);
+        colors.bgWhite = format(47, 49);
+        colors.bgGray = format(100, 49);
+        colors.redBright = format(91, 39);
+        colors.greenBright = format(92, 39);
+        colors.yellowBright = format(93, 39);
+        colors.blueBright = format(94, 39);
+        colors.magentaBright = format(95, 39);
+        colors.cyanBright = format(96, 39);
+        colors.whiteBright = format(97, 39);
+        colors.bgRedBright = format(101, 49);
+        colors.bgGreenBright = format(102, 49);
+        colors.bgYellowBright = format(103, 49);
+        colors.bgBlueBright = format(104, 49);
+        colors.bgMagentaBright = format(105, 49);
+        colors.bgCyanBright = format(106, 49);
+        colors.bgWhiteBright = format(107, 49);
+        module22.exports = colors;
+      }
+    });
+    var require_yocto_spinner2 = __commonJS2({
+      "@socketregistry/yocto-spinner/index.cjs"(exports22, module22) {
+        "use strict";
+        var { isArray: ArrayIsArray } = Array;
+        var { defineProperty: ObjectDefineProperty } = Object;
+        var defaultTtyColumns = 80;
+        var _defaultSpinner;
+        function getDefaultSpinner() {
+          if (_defaultSpinner === void 0) {
+            _defaultSpinner = {
+              frames: isUnicodeSupported() ? ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827", "\u2807", "\u280F"] : ["-", "\\", "|", "/"],
+              interval: 80
+            };
+          }
+          return _defaultSpinner;
+        }
+        __name(getDefaultSpinner, "getDefaultSpinner");
+        var _logSymbols;
+        function getLogSymbols() {
+          if (_logSymbols === void 0) {
+            const supported = isUnicodeSupported();
+            const colors = getYoctocolors();
+            _logSymbols = {
+              error: colors.red(supported ? "\u2716" : "\xD7"),
+              info: colors.blue(supported ? "\u2139" : "i"),
+              success: colors.green(supported ? "\u2714" : "\u221A"),
+              warning: colors.yellow(supported ? "\u26A0" : "\u203C")
+            };
+          }
+          return _logSymbols;
+        }
+        __name(getLogSymbols, "getLogSymbols");
+        var _process;
+        function getProcess() {
+          if (_process === void 0) {
+            _process = require("node:process");
+          }
+          return _process;
+        }
+        __name(getProcess, "getProcess");
+        var _yoctocolors;
+        function getYoctocolors() {
+          if (_yoctocolors === void 0) {
+            _yoctocolors = { ...require_yoctocolors_cjs2() };
+          }
+          return _yoctocolors;
+        }
+        __name(getYoctocolors, "getYoctocolors");
+        var _processInteractive;
+        function isProcessInteractive() {
+          if (_processInteractive === void 0) {
+            const { env } = getProcess();
+            _processInteractive = env.TERM !== "dumb" && !("CI" in env);
+          }
+          return _processInteractive;
+        }
+        __name(isProcessInteractive, "isProcessInteractive");
+        var _unicodeSupported;
+        function isUnicodeSupported() {
+          if (_unicodeSupported === void 0) {
+            const process22 = getProcess();
+            if (process22.platform !== "win32") {
+              _unicodeSupported = process22.env.TERM !== "linux";
+              return _unicodeSupported;
+            }
+            const { env } = process22;
+            if (
+              // Windows Terminal.
+              env.WT_SESSION || // Terminus (<0.2.27).
+              env.TERMINUS_SUBLIME || // ConEmu and cmder.
+              env.ConEmuTask === "{cmd::Cmder}"
+            ) {
+              _unicodeSupported = true;
+              return _unicodeSupported;
+            }
+            const { TERM, TERM_PROGRAM } = env;
+            _unicodeSupported = TERM_PROGRAM === "Terminus-Sublime" || TERM_PROGRAM === "vscode" || TERM === "xterm-256color" || TERM === "alacritty" || TERM === "rxvt-unicode" || TERM === "rxvt-unicode-256color" || env.TERMINAL_EMULATOR === "JetBrains-JediTerm";
+          }
+          return _unicodeSupported;
+        }
+        __name(isUnicodeSupported, "isUnicodeSupported");
+        var _stripVTControlCharacters;
+        function stripVTControlCharacters(string) {
+          if (_stripVTControlCharacters === void 0) {
+            const nodeUtil = require("node:util");
+            _stripVTControlCharacters = nodeUtil.stripVTControlCharacters;
+          }
+          return _stripVTControlCharacters(string);
+        }
+        __name(stripVTControlCharacters, "stripVTControlCharacters");
+        function getFrame(spinner, index) {
+          const { frames } = spinner;
+          const length = frames?.length ?? 0;
+          return index > -1 && index < length ? frames[index] : "";
+        }
+        __name(getFrame, "getFrame");
+        function getFrameCount(spinner) {
+          const { frames } = spinner;
+          const length = frames?.length ?? 0;
+          return length < 1 ? 1 : length;
+        }
+        __name(getFrameCount, "getFrameCount");
+        function normalizeText(value) {
+          return typeof value === "string" ? value.trimStart() : "";
+        }
+        __name(normalizeText, "normalizeText");
+        var YoctoSpinner2 = class _YoctoSpinner {
+          static {
+            __name(this, "YoctoSpinner");
+          }
+          #color;
+          #currentFrame = -1;
+          #exitHandlerBound;
+          #indention = "";
+          #isInteractive;
+          #isSpinning = false;
+          #lastSpinnerFrameTime = 0;
+          #lines = 0;
+          #onFrameUpdate;
+          #onRenderFrame;
+          #skipRender = false;
+          #spinner;
+          #stream;
+          #text;
+          #timer;
+          static spinners = {
+            get default() {
+              return getDefaultSpinner();
+            },
+            set default(spinner) {
+              ObjectDefineProperty(this, "default", {
+                __proto__: null,
+                configurable: true,
+                enumerable: true,
+                value: spinner,
+                writable: true
+              });
+            },
+            ci: {
+              frames: [""],
+              // The delay argument is converted to a signed 32-bit integer. This effectively
+              // limits delay to 2147483647 ms, roughly 24.8 days, since it's specified as a
+              // signed integer in the IDL.
+              // https://developer.mozilla.org/en-US/docs/Web/API/Window/setInterval?utm_source=chatgpt.com#return_value
+              interval: 2147483647
+            }
+          };
+          constructor(options = {}) {
+            const opts = { __proto__: null, ...options };
+            const stream = opts.stream ?? getProcess().stderr;
+            this.#spinner = opts.spinner ?? _YoctoSpinner.spinners.default ?? getDefaultSpinner();
+            this.#text = normalizeText(options.text);
+            this.#stream = stream ?? process.stderr;
+            const color = options.color ?? "cyan";
+            if (ArrayIsArray(color) && (color.length !== 3 || !color.every((n) => typeof n === "number" && n >= 0 && n <= 255))) {
+              throw new TypeError(
+                "RGB color must be an array of 3 numbers between 0 and 255"
+              );
+            }
+            this.#color = color;
+            this.#isInteractive = !!stream.isTTY && isProcessInteractive();
+            this.#exitHandlerBound = this.#exitHandler.bind(this);
+            this.#onFrameUpdate = options.onFrameUpdate;
+            this.#onRenderFrame = options.onRenderFrame;
+          }
+          #exitHandler(signal) {
+            if (this.isSpinning) {
+              this.stop();
+            }
+            const exitCode = signal === "SIGINT" ? 130 : signal === "SIGTERM" ? 143 : 1;
+            process.exit(exitCode);
+          }
+          #hideCursor() {
+            if (this.#isInteractive) {
+              this.#write("\x1B[?25l");
+            }
+          }
+          #lineCount(text) {
+            const width = this.#stream.columns ?? defaultTtyColumns;
+            const lines = stripVTControlCharacters(text).split("\n");
+            let lineCount = 0;
+            for (const line of lines) {
+              lineCount += Math.max(1, Math.ceil(line.length / width));
+            }
+            return lineCount;
+          }
+          #render() {
+            if (!this.#isSpinning) {
+              return;
+            }
+            const now = Date.now();
+            let frameAdvanced = false;
+            if (this.#currentFrame === -1 || now - this.#lastSpinnerFrameTime >= this.#spinner.interval) {
+              frameAdvanced = true;
+              this.#currentFrame = ++this.#currentFrame % getFrameCount(this.#spinner);
+              this.#lastSpinnerFrameTime = now;
+            }
+            if (frameAdvanced && typeof this.#onFrameUpdate === "function") {
+              this.#skipRender = true;
+              try {
+                this.#onFrameUpdate();
+              } finally {
+                this.#skipRender = false;
+              }
+            }
+            const colors = getYoctocolors();
+            const applyColor = ArrayIsArray(this.#color) ? (text) => `\x1B[38;2;${this.#color[0]};${this.#color[1]};${this.#color[2]}m${text}\x1B[39m` : colors[this.#color] ?? colors.cyan;
+            const frame = getFrame(this.#spinner, this.#currentFrame);
+            let string;
+            if (typeof this.#onRenderFrame === "function") {
+              string = this.#onRenderFrame(frame, this.#text, applyColor);
+            } else {
+              string = `${frame ? `${applyColor(frame)} ` : ""}${this.#text}`;
+            }
+            if (string) {
+              if (this.#indention.length) {
+                string = `${this.#indention}${string}`;
+              }
+              if (!this.#isInteractive) {
+                string += "\n";
+              }
+            }
+            if (this.#isInteractive) {
+              this.clear();
+            }
+            if (string) {
+              this.#write(string);
+            }
+            if (this.#isInteractive) {
+              this.#lines = this.#lineCount(string);
+            }
+          }
+          #showCursor() {
+            if (this.#isInteractive) {
+              this.#write("\x1B[?25h");
+            }
+          }
+          #subscribeToProcessEvents() {
+            process.once("SIGINT", this.#exitHandlerBound);
+            process.once("SIGTERM", this.#exitHandlerBound);
+          }
+          #symbolStop(symbolType, text) {
+            const symbols = getLogSymbols();
+            return this.stop(`${symbols[symbolType]}  ${text ?? this.#text}`);
+          }
+          #write(text) {
+            this.#stream.write(text);
+          }
+          #unsubscribeFromProcessEvents() {
+            process.off("SIGINT", this.#exitHandlerBound);
+            process.off("SIGTERM", this.#exitHandlerBound);
+          }
+          get color() {
+            return this.#color;
+          }
+          set color(value) {
+            this.#color = value;
+            this.#render();
+          }
+          get isSpinning() {
+            return this.#isSpinning;
+          }
+          get spinner() {
+            return this.#spinner;
+          }
+          set spinner(spinner) {
+            this.#spinner = spinner;
+          }
+          get text() {
+            if (this._textMethod) {
+              return this._textMethod;
+            }
+            return this.#text;
+          }
+          set text(value) {
+            if (this._textMethod && !this._inTextSetter) {
+              this._inTextSetter = true;
+              try {
+                this._textMethod(value);
+              } finally {
+                this._inTextSetter = false;
+              }
+              return;
+            }
+            this.#text = normalizeText(value);
+            if (!this.#skipRender) {
+              this.#render();
+            }
+          }
+          clear() {
+            if (!this.#isInteractive) {
+              return this;
+            }
+            this.#stream.cursorTo(0);
+            for (let index = 0; index < this.#lines; index += 1) {
+              if (index > 0) {
+                this.#stream.moveCursor(0, -1);
+              }
+              this.#stream.clearLine(1);
+            }
+            this.#lines = 0;
+            return this;
+          }
+          dedent(spaces = 2) {
+            this.#indention = this.#indention.slice(0, -spaces);
+            return this;
+          }
+          error(text) {
+            return this.#symbolStop("error", text);
+          }
+          indent(spaces = 2) {
+            this.#indention += " ".repeat(spaces);
+            return this;
+          }
+          info(text) {
+            return this.#symbolStop("info", text);
+          }
+          resetIndent() {
+            this.#indention = "";
+            return this;
+          }
+          start(text) {
+            const normalized = normalizeText(text);
+            if (normalized) {
+              this.#text = normalized;
+            }
+            if (this.isSpinning) {
+              return this;
+            }
+            this.#isSpinning = true;
+            this.#hideCursor();
+            this.#render();
+            this.#subscribeToProcessEvents();
+            if (this.#isInteractive) {
+              this.#timer = setInterval(() => {
+                this.#render();
+              }, this.#spinner.interval);
+            }
+            return this;
+          }
+          stop(finalText) {
+            if (!this.isSpinning) {
+              return this;
+            }
+            if (this.#timer) {
+              clearInterval(this.#timer);
+              this.#timer = void 0;
+            }
+            this.#isSpinning = false;
+            this.#showCursor();
+            this.clear();
+            this.#unsubscribeFromProcessEvents();
+            if (finalText) {
+              this.#write(`${this.#indention}${finalText}
+`);
+            }
+            return this;
+          }
+          success(text) {
+            return this.#symbolStop("success", text);
+          }
+          warning(text) {
+            return this.#symbolStop("warning", text);
+          }
+        };
+        module22.exports = /* @__PURE__ */ __name(function yoctoSpinner(options) {
+          return new YoctoSpinner2(options);
+        }, "yoctoSpinner");
+      }
+    });
+    var YoctoSpinner = require_yocto_spinner2();
+    module2.exports = YoctoSpinner;
+    module2.exports.default = YoctoSpinner;
+  }
+});
+
+// @socketsecurity/lib/dist/spinner.js
+var require_spinner = __commonJS({
+  "@socketsecurity/lib/dist/spinner.js"(exports2, module2) {
+    "use strict";
+    var __create2 = Object.create;
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __getProtoOf2 = Object.getPrototypeOf;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc2) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc2 = __getOwnPropDesc2(from, key)) || desc2.enumerable });
+      }
+      return to;
+    };
+    var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2(
+      // If the importer is in node compatibility mode or this is not an ESM
+      // file that has been converted to a CommonJS file using a Babel-
+      // compatible transform (i.e. "__esModule" has not been set), then set
+      // "default" to the CommonJS "module.exports" for node compatibility.
+      isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target,
+      mod
+    ));
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var spinner_exports = {};
+    __export2(spinner_exports, {
+      Spinner: () => Spinner,
+      ciSpinner: () => ciSpinner,
+      getCliSpinners: () => getCliSpinners,
+      getDefaultSpinner: () => getDefaultSpinner,
+      withSpinner: () => withSpinner,
+      withSpinnerRestore: () => withSpinnerRestore,
+      withSpinnerSync: () => withSpinnerSync
+    });
+    module2.exports = __toCommonJS2(spinner_exports);
+    var import_node_process3 = __toESM2(require("node:process"));
+    var import_yoctocolors_cjs = __toESM2(require_yoctocolors_cjs());
+    var import_colors = require_colors();
+    var import_process2 = require_process();
+    var import_ci = require_ci();
+    var import_debug3 = require_debug3();
+    var import_pulse_frames = require_pulse_frames();
+    var import_text_shimmer = require_text_shimmer();
+    var import_yocto_spinner = __toESM2(require_yocto_spinner());
+    var import_logger = require_logger();
+    var import_objects2 = require_objects();
+    var import_strings = require_strings();
+    var import_context = require_context();
+    var import_themes = require_themes();
+    var import_utils2 = require_utils();
+    var ciSpinner = {
+      frames: [""],
+      interval: 2147483647
+    };
+    function desc(value) {
+      return {
+        __proto__: null,
+        configurable: true,
+        value,
+        writable: true
+      };
+    }
+    function formatProgress(progress) {
+      const { current, total, unit } = progress;
+      const percentage = total === 0 ? 0 : Math.round(current / total * 100);
+      const bar = renderProgressBar(percentage);
+      const count = unit ? `${current}/${total} ${unit}` : `${current}/${total}`;
+      return `${bar} ${percentage}% (${count})`;
+    }
+    function normalizeText(value) {
+      return typeof value === "string" ? value.trimStart() : "";
+    }
+    function renderProgressBar(percentage, width = 20) {
+      const filled = Math.round(percentage / 100 * width);
+      const empty = width - filled;
+      const bar = "\u2588".repeat(filled) + "\u2591".repeat(empty);
+      return import_yoctocolors_cjs.default.cyan(bar);
+    }
+    var _cliSpinners;
+    // @__NO_SIDE_EFFECTS__
+    function getCliSpinners(styleName) {
+      if (_cliSpinners === void 0) {
+        const YoctoCtor = import_yocto_spinner.default;
+        const tempInstance = YoctoCtor({});
+        const YoctoSpinnerClass = tempInstance.constructor;
+        _cliSpinners = {
+          __proto__: null,
+          ...YoctoSpinnerClass.spinners,
+          socket: (0, import_pulse_frames.generateSocketSpinnerFrames)()
+        };
+      }
+      if (typeof styleName === "string" && _cliSpinners) {
+        return (0, import_objects2.hasOwn)(_cliSpinners, styleName) ? _cliSpinners[styleName] : void 0;
+      }
+      return _cliSpinners;
+    }
+    var _Spinner;
+    var _defaultSpinner;
+    // @__NO_SIDE_EFFECTS__
+    function Spinner(options) {
+      if (_Spinner === void 0) {
+        const YoctoCtor = import_yocto_spinner.default;
+        const tempInstance = YoctoCtor({});
+        const YoctoSpinnerClass = tempInstance.constructor;
+        const logger = (0, import_logger.getDefaultLogger)();
+        _Spinner = class SpinnerClass extends YoctoSpinnerClass {
+          #baseText = "";
+          #indentation = "";
+          #progress;
+          #shimmer;
+          #shimmerSavedConfig;
+          constructor(options2) {
+            const opts = { __proto__: null, ...options2 };
+            let theme = (0, import_context.getTheme)();
+            if (opts.theme) {
+              if (typeof opts.theme === "string") {
+                theme = import_themes.THEMES[opts.theme];
+              } else {
+                theme = opts.theme;
+              }
+            }
+            let defaultColor = theme.colors.primary;
+            if (theme.effects?.spinner?.color) {
+              const resolved = (0, import_utils2.resolveColor)(
+                theme.effects.spinner.color,
+                theme.colors
+              );
+              if (resolved === "inherit" || Array.isArray(resolved[0])) {
+                defaultColor = theme.colors.primary;
+              } else {
+                defaultColor = resolved;
+              }
+            }
+            const spinnerColor = opts.color ?? defaultColor;
+            if ((0, import_colors.isRgbTuple)(spinnerColor) && (spinnerColor.length !== 3 || !spinnerColor.every(
+              (n) => typeof n === "number" && n >= 0 && n <= 255
+            ))) {
+              throw new TypeError(
+                "RGB color must be an array of 3 numbers between 0 and 255"
+              );
+            }
+            const spinnerColorRgb = (0, import_colors.toRgb)(spinnerColor);
+            let shimmerInfo;
+            if (opts.shimmer) {
+              let shimmerDir;
+              let shimmerColor;
+              let shimmerSpeed = 1 / 3;
+              if (typeof opts.shimmer === "string") {
+                shimmerDir = opts.shimmer;
+              } else {
+                const shimmerConfig = {
+                  __proto__: null,
+                  ...opts.shimmer
+                };
+                shimmerDir = shimmerConfig.dir ?? import_text_shimmer.DIR_LTR;
+                shimmerColor = shimmerConfig.color ?? import_text_shimmer.COLOR_INHERIT;
+                shimmerSpeed = shimmerConfig.speed ?? 1 / 3;
+              }
+              shimmerInfo = {
+                __proto__: null,
+                color: shimmerColor === void 0 ? import_text_shimmer.COLOR_INHERIT : shimmerColor,
+                currentDir: import_text_shimmer.DIR_LTR,
+                mode: shimmerDir,
+                speed: shimmerSpeed,
+                step: 0
+              };
+            }
+            super({
+              signal: (0, import_process2.getAbortSignal)(),
+              ...opts,
+              // Pass RGB color directly to yocto-spinner (it now supports RGB).
+              color: spinnerColorRgb,
+              // onRenderFrame callback provides full control over frame + text layout.
+              // Calculates spacing based on frame width to prevent text jumping.
+              onRenderFrame: (frame, text, applyColor) => {
+                const width = (0, import_strings.stringWidth)(frame);
+                const spacing = width === 1 ? "  " : " ";
+                return frame ? `${applyColor(frame)}${spacing}${text}` : text;
+              },
+              // onFrameUpdate callback is called by yocto-spinner whenever a frame advances.
+              // This ensures shimmer updates are perfectly synchronized with animation beats.
+              onFrameUpdate: shimmerInfo ? () => {
+                if (this.#baseText) {
+                  super.text = this.#buildDisplayText();
+                }
+              } : void 0
+            });
+            this.#shimmer = shimmerInfo;
+            this.#shimmerSavedConfig = shimmerInfo;
+          }
+          // Override color getter to ensure it's always RGB.
+          get color() {
+            const value = super.color;
+            return (0, import_colors.isRgbTuple)(value) ? value : (0, import_colors.toRgb)(value);
+          }
+          // Override color setter to always convert to RGB before passing to yocto-spinner.
+          set color(value) {
+            super.color = (0, import_colors.isRgbTuple)(value) ? value : (0, import_colors.toRgb)(value);
+          }
+          // Getter to expose current shimmer state.
+          get shimmerState() {
+            if (!this.#shimmer) {
+              return void 0;
+            }
+            return {
+              color: this.#shimmer.color,
+              currentDir: this.#shimmer.currentDir,
+              mode: this.#shimmer.mode,
+              speed: this.#shimmer.speed,
+              step: this.#shimmer.step
+            };
+          }
+          /**
+           * Apply a yocto-spinner method and update logger state.
+           * Handles text normalization, extra arguments, and logger tracking.
+           * @private
+           */
+          #apply(methodName, args) {
+            let extras;
+            let text = args.at(0);
+            if (typeof text === "string") {
+              extras = args.slice(1);
+            } else {
+              extras = args;
+              text = "";
+            }
+            const wasSpinning = this.isSpinning;
+            const normalized = normalizeText(text);
+            if (methodName === "stop" && !normalized) {
+              super[methodName]();
+            } else {
+              super[methodName](normalized);
+            }
+            if (methodName === "stop") {
+              if (wasSpinning && normalized) {
+                logger[import_logger.lastWasBlankSymbol]((0, import_strings.isBlankString)(normalized));
+                logger[import_logger.incLogCallCountSymbol]();
+              }
+            } else {
+              logger[import_logger.lastWasBlankSymbol](false);
+              logger[import_logger.incLogCallCountSymbol]();
+            }
+            if (extras.length) {
+              logger.log(...extras);
+              logger[import_logger.lastWasBlankSymbol](false);
+            }
+            return this;
+          }
+          /**
+           * Build the complete display text with progress, shimmer, and indentation.
+           * Combines base text, progress bar, shimmer effects, and indentation.
+           * @private
+           */
+          #buildDisplayText() {
+            let displayText = this.#baseText;
+            if (this.#progress) {
+              const progressText = formatProgress(this.#progress);
+              displayText = displayText ? `${displayText} ${progressText}` : progressText;
+            }
+            if (displayText && this.#shimmer) {
+              let shimmerColor;
+              if (this.#shimmer.color === import_text_shimmer.COLOR_INHERIT) {
+                shimmerColor = this.color;
+              } else if (Array.isArray(this.#shimmer.color[0])) {
+                shimmerColor = this.#shimmer.color;
+              } else {
+                shimmerColor = (0, import_colors.toRgb)(this.#shimmer.color);
+              }
+              displayText = (0, import_text_shimmer.applyShimmer)(displayText, this.#shimmer, {
+                color: shimmerColor,
+                direction: this.#shimmer.mode
+              });
+            }
+            if (this.#indentation && displayText) {
+              displayText = this.#indentation + displayText;
+            }
+            return displayText;
+          }
+          /**
+           * Show a status message without stopping the spinner.
+           * Outputs the symbol and message to stderr, then continues spinning.
+           * @private
+           */
+          #showStatusAndKeepSpinning(symbolType, args) {
+            let text = args.at(0);
+            let extras;
+            if (typeof text === "string") {
+              extras = args.slice(1);
+            } else {
+              extras = args;
+              text = "";
+            }
+            logger.error(`${import_logger.LOG_SYMBOLS[symbolType]} ${text}`, ...extras);
+            return this;
+          }
+          /**
+           * Update the spinner's displayed text.
+           * Rebuilds display text and triggers render.
+           * @private
+           */
+          #updateSpinnerText() {
+            super.text = this.#buildDisplayText();
+          }
+          /**
+           * Show a debug message (ℹ) without stopping the spinner.
+           * Only displays if debug mode is enabled via environment variable.
+           * Outputs to stderr and continues spinning.
+           *
+           * @param text - Debug message to display
+           * @param extras - Additional values to log
+           * @returns This spinner for chaining
+           */
+          debug(text, ...extras) {
+            if ((0, import_debug3.isDebug)()) {
+              return this.#showStatusAndKeepSpinning("info", [text, ...extras]);
+            }
+            return this;
+          }
+          /**
+           * Show a debug message (ℹ) and stop the spinner.
+           * Only displays if debug mode is enabled via environment variable.
+           * Auto-clears the spinner line before displaying the message.
+           *
+           * @param text - Debug message to display
+           * @param extras - Additional values to log
+           * @returns This spinner for chaining
+           */
+          debugAndStop(text, ...extras) {
+            if ((0, import_debug3.isDebug)()) {
+              return this.#apply("info", [text, ...extras]);
+            }
+            return this;
+          }
+          /**
+           * Decrease indentation level by removing spaces from the left.
+           * Pass 0 to reset indentation to zero completely.
+           *
+           * @param spaces - Number of spaces to remove
+           * @returns This spinner for chaining
+           * @default spaces=2
+           *
+           * @example
+           * ```ts
+           * spinner.dedent()    // Remove 2 spaces
+           * spinner.dedent(4)   // Remove 4 spaces
+           * spinner.dedent(0)   // Reset to zero indentation
+           * ```
+           */
+          dedent(spaces) {
+            if (spaces === 0) {
+              this.#indentation = "";
+            } else {
+              const amount = spaces ?? 2;
+              const newLength = Math.max(0, this.#indentation.length - amount);
+              this.#indentation = this.#indentation.slice(0, newLength);
+            }
+            this.#updateSpinnerText();
+            return this;
+          }
+          /**
+           * Disable shimmer effect.
+           * Preserves config for later re-enable via enableShimmer().
+           *
+           * @returns This spinner for chaining
+           *
+           * @example
+           * spinner.disableShimmer()
+           */
+          disableShimmer() {
+            this.#shimmer = void 0;
+            this.#updateSpinnerText();
+            return this;
+          }
+          /**
+           * Show a done/success message (✓) without stopping the spinner.
+           * Alias for `success()` with a shorter name.
+           *
+           * DESIGN DECISION: Unlike yocto-spinner, our `done()` does NOT stop the spinner.
+           * Use `doneAndStop()` if you want to stop the spinner.
+           *
+           * @param text - Message to display
+           * @param extras - Additional values to log
+           * @returns This spinner for chaining
+           */
+          done(text, ...extras) {
+            return this.#showStatusAndKeepSpinning("success", [text, ...extras]);
+          }
+          /**
+           * Show a done/success message (✓) and stop the spinner.
+           * Auto-clears the spinner line before displaying the success message.
+           *
+           * @param text - Message to display
+           * @param extras - Additional values to log
+           * @returns This spinner for chaining
+           */
+          doneAndStop(text, ...extras) {
+            return this.#apply("success", [text, ...extras]);
+          }
+          /**
+           * Enable shimmer effect.
+           * Restores saved config or uses defaults if no saved config exists.
+           *
+           * @returns This spinner for chaining
+           *
+           * @example
+           * spinner.enableShimmer()
+           */
+          enableShimmer() {
+            if (this.#shimmerSavedConfig) {
+              this.#shimmer = { ...this.#shimmerSavedConfig };
+            } else {
+              this.#shimmer = {
+                color: import_text_shimmer.COLOR_INHERIT,
+                currentDir: import_text_shimmer.DIR_LTR,
+                mode: import_text_shimmer.DIR_LTR,
+                speed: 1 / 3,
+                step: 0
+              };
+              this.#shimmerSavedConfig = this.#shimmer;
+            }
+            this.#updateSpinnerText();
+            return this;
+          }
+          /**
+           * Show a failure message (✗) without stopping the spinner.
+           * DESIGN DECISION: Unlike yocto-spinner, our `fail()` does NOT stop the spinner.
+           * This allows displaying errors while continuing to spin.
+           * Use `failAndStop()` if you want to stop the spinner.
+           *
+           * @param text - Error message to display
+           * @param extras - Additional values to log
+           * @returns This spinner for chaining
+           */
+          fail(text, ...extras) {
+            return this.#showStatusAndKeepSpinning("fail", [text, ...extras]);
+          }
+          /**
+           * Show a failure message (✗) and stop the spinner.
+           * Auto-clears the spinner line before displaying the error message.
+           *
+           * @param text - Error message to display
+           * @param extras - Additional values to log
+           * @returns This spinner for chaining
+           */
+          failAndStop(text, ...extras) {
+            return this.#apply("error", [text, ...extras]);
+          }
+          /**
+           * Increase indentation level by adding spaces to the left.
+           * Pass 0 to reset indentation to zero completely.
+           *
+           * @param spaces - Number of spaces to add
+           * @returns This spinner for chaining
+           * @default spaces=2
+           *
+           * @example
+           * ```ts
+           * spinner.indent()    // Add 2 spaces
+           * spinner.indent(4)   // Add 4 spaces
+           * spinner.indent(0)   // Reset to zero indentation
+           * ```
+           */
+          indent(spaces) {
+            if (spaces === 0) {
+              this.#indentation = "";
+            } else {
+              const amount = spaces ?? 2;
+              this.#indentation += " ".repeat(amount);
+            }
+            this.#updateSpinnerText();
+            return this;
+          }
+          /**
+           * Show an info message (ℹ) without stopping the spinner.
+           * Outputs to stderr and continues spinning.
+           *
+           * @param text - Info message to display
+           * @param extras - Additional values to log
+           * @returns This spinner for chaining
+           */
+          info(text, ...extras) {
+            return this.#showStatusAndKeepSpinning("info", [text, ...extras]);
+          }
+          /**
+           * Show an info message (ℹ) and stop the spinner.
+           * Auto-clears the spinner line before displaying the message.
+           *
+           * @param text - Info message to display
+           * @param extras - Additional values to log
+           * @returns This spinner for chaining
+           */
+          infoAndStop(text, ...extras) {
+            return this.#apply("info", [text, ...extras]);
+          }
+          /**
+           * Log a message to stdout without stopping the spinner.
+           * Unlike other status methods, this outputs to stdout for data logging.
+           *
+           * @param args - Values to log to stdout
+           * @returns This spinner for chaining
+           */
+          log(...args) {
+            logger.log(...args);
+            return this;
+          }
+          /**
+           * Log a message to stdout and stop the spinner.
+           * Auto-clears the spinner line before displaying the message.
+           *
+           * @param text - Message to display
+           * @param extras - Additional values to log
+           * @returns This spinner for chaining
+           */
+          logAndStop(text, ...extras) {
+            return this.#apply("stop", [text, ...extras]);
+          }
+          /**
+           * Update progress information displayed with the spinner.
+           * Shows a progress bar with percentage and optional unit label.
+           *
+           * @param current - Current progress value
+           * @param total - Total/maximum progress value
+           * @param unit - Optional unit label (e.g., 'files', 'items')
+           * @returns This spinner for chaining
+           *
+           * @example
+           * ```ts
+           * spinner.progress(5, 10)            // "███████░░░░░░░░░░░░░ 50% (5/10)"
+           * spinner.progress(7, 20, 'files')   // "███████░░░░░░░░░░░░░ 35% (7/20 files)"
+           * ```
+           */
+          progress = (current, total, unit) => {
+            this.#progress = {
+              __proto__: null,
+              current,
+              total,
+              ...unit ? { unit } : {}
+            };
+            this.#updateSpinnerText();
+            return this;
+          };
+          /**
+           * Increment progress by a specified amount.
+           * Updates the progress bar displayed with the spinner.
+           * Clamps the result between 0 and the total value.
+           *
+           * @param amount - Amount to increment by
+           * @returns This spinner for chaining
+           * @default amount=1
+           *
+           * @example
+           * ```ts
+           * spinner.progress(0, 10, 'files')
+           * spinner.progressStep()    // Progress: 1/10
+           * spinner.progressStep(3)   // Progress: 4/10
+           * ```
+           */
+          progressStep(amount = 1) {
+            if (this.#progress) {
+              const newCurrent = this.#progress.current + amount;
+              this.#progress = {
+                __proto__: null,
+                current: Math.max(0, Math.min(newCurrent, this.#progress.total)),
+                total: this.#progress.total,
+                ...this.#progress.unit ? { unit: this.#progress.unit } : {}
+              };
+              this.#updateSpinnerText();
+            }
+            return this;
+          }
+          /**
+           * Show a skip message (↻) without stopping the spinner.
+           * Outputs to stderr and continues spinning.
+           *
+           * @param text - Skip message to display
+           * @param extras - Additional values to log
+           * @returns This spinner for chaining
+           */
+          skip(text, ...extras) {
+            return this.#showStatusAndKeepSpinning("skip", [text, ...extras]);
+          }
+          /**
+           * Show a skip message (↻) and stop the spinner.
+           * Auto-clears the spinner line before displaying the message.
+           *
+           * Implementation note: Unlike other *AndStop methods (successAndStop, failAndStop, etc.),
+           * this method cannot use #apply() with a 'skip' method name because yocto-spinner doesn't
+           * have a built-in 'skip' method. Instead, we manually stop the spinner then log the message
+           * with the skip symbol.
+           *
+           * @param text - Skip message to display
+           * @param extras - Additional values to log
+           * @returns This spinner for chaining
+           */
+          skipAndStop(text, ...extras) {
+            this.#apply("stop", []);
+            const normalized = normalizeText(text);
+            if (normalized) {
+              logger.error(`${import_logger.LOG_SYMBOLS.skip} ${normalized}`, ...extras);
+            }
+            return this;
+          }
+          /**
+           * Set complete shimmer configuration.
+           * Replaces any existing shimmer config with the provided values.
+           * Undefined properties will use default values.
+           *
+           * @param config - Complete shimmer configuration
+           * @returns This spinner for chaining
+           *
+           * @example
+           * spinner.setShimmer({
+           *   color: [255, 0, 0],
+           *   dir: 'rtl',
+           *   speed: 0.5
+           * })
+           */
+          setShimmer(config) {
+            this.#shimmer = {
+              color: config.color ?? import_text_shimmer.COLOR_INHERIT,
+              currentDir: import_text_shimmer.DIR_LTR,
+              mode: config.dir ?? import_text_shimmer.DIR_LTR,
+              speed: config.speed ?? 1 / 3,
+              step: 0
+            };
+            this.#shimmerSavedConfig = this.#shimmer;
+            this.#updateSpinnerText();
+            return this;
+          }
+          /**
+           * Start the spinner animation with optional text.
+           * Begins displaying the animated spinner on stderr.
+           *
+           * @param text - Optional text to display with the spinner
+           * @returns This spinner for chaining
+           *
+           * @example
+           * ```ts
+           * spinner.start('Loading…')
+           * // Later:
+           * spinner.successAndStop('Done!')
+           * ```
+           */
+          start(...args) {
+            if (args.length) {
+              const text = args.at(0);
+              const normalized = normalizeText(text);
+              if (!normalized) {
+                this.#baseText = "";
+                super.text = "";
+              } else {
+                this.#baseText = normalized;
+              }
+            }
+            this.#updateSpinnerText();
+            return this.#apply("start", []);
+          }
+          /**
+           * Log a main step message to stderr without stopping the spinner.
+           * Adds a blank line before the message for visual separation.
+           * Aligns with `logger.step()` to use stderr for status messages.
+           *
+           * @param text - Step message to display
+           * @param extras - Additional values to log
+           * @returns This spinner for chaining
+           *
+           * @example
+           * ```ts
+           * spinner.step('Building application')
+           * spinner.substep('Compiling TypeScript')
+           * spinner.substep('Bundling assets')
+           * ```
+           */
+          step(text, ...extras) {
+            if (typeof text === "string") {
+              logger.error("");
+              logger.error(text, ...extras);
+            }
+            return this;
+          }
+          /**
+           * Stop the spinner animation and clear internal state.
+           * Auto-clears the spinner line via yocto-spinner.stop().
+           * Resets progress, shimmer, and text state.
+           *
+           * @param text - Optional final text to display after stopping
+           * @returns This spinner for chaining
+           *
+           * @example
+           * ```ts
+           * spinner.start('Processing…')
+           * // Do work
+           * spinner.stop() // Just stop, no message
+           * // or
+           * spinner.stop('Finished processing')
+           * ```
+           */
+          stop(...args) {
+            this.#baseText = "";
+            this.#progress = void 0;
+            this.#shimmer = void 0;
+            const result = this.#apply("stop", args);
+            return result;
+          }
+          /**
+           * Log an indented substep message to stderr without stopping the spinner.
+           * Adds 2-space indentation to the message.
+           * Aligns with `logger.substep()` to use stderr for status messages.
+           *
+           * @param text - Substep message to display
+           * @param extras - Additional values to log
+           * @returns This spinner for chaining
+           *
+           * @example
+           * ```ts
+           * spinner.step('Building application')
+           * spinner.substep('Compiling TypeScript')
+           * spinner.substep('Bundling assets')
+           * ```
+           */
+          substep(text, ...extras) {
+            if (typeof text === "string") {
+              logger.error(`  ${text}`, ...extras);
+            }
+            return this;
+          }
+          /**
+           * Show a success message (✓) without stopping the spinner.
+           * DESIGN DECISION: Unlike yocto-spinner, our `success()` does NOT stop the spinner.
+           * This allows displaying success messages while continuing to spin for multi-step operations.
+           * Use `successAndStop()` if you want to stop the spinner.
+           *
+           * @param text - Success message to display
+           * @param extras - Additional values to log
+           * @returns This spinner for chaining
+           */
+          success(text, ...extras) {
+            return this.#showStatusAndKeepSpinning("success", [text, ...extras]);
+          }
+          /**
+           * Show a success message (✓) and stop the spinner.
+           * Auto-clears the spinner line before displaying the success message.
+           *
+           * @param text - Success message to display
+           * @param extras - Additional values to log
+           * @returns This spinner for chaining
+           */
+          successAndStop(text, ...extras) {
+            return this.#apply("success", [text, ...extras]);
+          }
+          text(value) {
+            if (arguments.length === 0) {
+              return this.#baseText;
+            }
+            this.#baseText = value ?? "";
+            this.#updateSpinnerText();
+            return this;
+          }
+          /**
+           * Update partial shimmer configuration.
+           * Merges with existing config, enabling shimmer if currently disabled.
+           *
+           * @param config - Partial shimmer configuration to merge
+           * @returns This spinner for chaining
+           *
+           * @example
+           * // Update just the speed
+           * spinner.updateShimmer({ speed: 0.5 })
+           *
+           * // Update direction
+           * spinner.updateShimmer({ dir: 'rtl' })
+           *
+           * // Update multiple properties
+           * spinner.updateShimmer({ color: [255, 0, 0], speed: 0.8 })
+           */
+          updateShimmer(config) {
+            const partialConfig = {
+              __proto__: null,
+              ...config
+            };
+            if (this.#shimmer) {
+              this.#shimmer = {
+                ...this.#shimmer,
+                ...partialConfig.color !== void 0 ? { color: partialConfig.color } : {},
+                ...partialConfig.dir !== void 0 ? { mode: partialConfig.dir } : {},
+                ...partialConfig.speed !== void 0 ? { speed: partialConfig.speed } : {}
+              };
+              this.#shimmerSavedConfig = this.#shimmer;
+            } else if (this.#shimmerSavedConfig) {
+              this.#shimmer = {
+                ...this.#shimmerSavedConfig,
+                ...partialConfig.color !== void 0 ? { color: partialConfig.color } : {},
+                ...partialConfig.dir !== void 0 ? { mode: partialConfig.dir } : {},
+                ...partialConfig.speed !== void 0 ? { speed: partialConfig.speed } : {}
+              };
+              this.#shimmerSavedConfig = this.#shimmer;
+            } else {
+              this.#shimmer = {
+                color: partialConfig.color ?? import_text_shimmer.COLOR_INHERIT,
+                currentDir: import_text_shimmer.DIR_LTR,
+                mode: partialConfig.dir ?? import_text_shimmer.DIR_LTR,
+                speed: partialConfig.speed ?? 1 / 3,
+                step: 0
+              };
+              this.#shimmerSavedConfig = this.#shimmer;
+            }
+            this.#updateSpinnerText();
+            return this;
+          }
+          /**
+           * Show a warning message (⚠) without stopping the spinner.
+           * Outputs to stderr and continues spinning.
+           *
+           * @param text - Warning message to display
+           * @param extras - Additional values to log
+           * @returns This spinner for chaining
+           */
+          warn(text, ...extras) {
+            return this.#showStatusAndKeepSpinning("warn", [text, ...extras]);
+          }
+          /**
+           * Show a warning message (⚠) and stop the spinner.
+           * Auto-clears the spinner line before displaying the warning message.
+           *
+           * @param text - Warning message to display
+           * @param extras - Additional values to log
+           * @returns This spinner for chaining
+           */
+          warnAndStop(text, ...extras) {
+            return this.#apply("warning", [text, ...extras]);
+          }
+        };
+        Object.defineProperties(_Spinner.prototype, {
+          error: desc(_Spinner.prototype.fail),
+          errorAndStop: desc(_Spinner.prototype.failAndStop),
+          warning: desc(_Spinner.prototype.warn),
+          warningAndStop: desc(_Spinner.prototype.warnAndStop)
+        });
+        _defaultSpinner = (0, import_ci.getCI)() ? ciSpinner : /* @__PURE__ */ getCliSpinners("socket");
+      }
+      return new _Spinner({
+        spinner: _defaultSpinner,
+        ...options
+      });
+    }
+    var _spinner;
+    function getDefaultSpinner() {
+      if (_spinner === void 0) {
+        _spinner = /* @__PURE__ */ Spinner();
+      }
+      return _spinner;
+    }
+    async function withSpinner(options) {
+      const { message, operation, spinner, withOptions } = {
+        __proto__: null,
+        ...options
+      };
+      if (!spinner) {
+        return await operation();
+      }
+      const savedColor = withOptions?.color !== void 0 ? spinner.color : void 0;
+      const savedShimmerState = withOptions?.shimmer !== void 0 ? spinner.shimmerState : void 0;
+      if (withOptions?.color !== void 0) {
+        spinner.color = (0, import_colors.toRgb)(withOptions.color);
+      }
+      if (withOptions?.shimmer !== void 0) {
+        if (typeof withOptions.shimmer === "string") {
+          spinner.updateShimmer({ dir: withOptions.shimmer });
+        } else {
+          spinner.setShimmer(withOptions.shimmer);
+        }
+      }
+      spinner.start(message);
+      try {
+        return await operation();
+      } finally {
+        const wasSpinning = spinner.isSpinning;
+        spinner.stop();
+        if (wasSpinning) {
+          import_node_process3.default.stderr.write("\r\x1B[2K");
+        }
+        if (savedColor !== void 0) {
+          spinner.color = savedColor;
+        }
+        if (withOptions?.shimmer !== void 0) {
+          if (savedShimmerState) {
+            spinner.setShimmer({
+              color: savedShimmerState.color,
+              dir: savedShimmerState.mode,
+              speed: savedShimmerState.speed
+            });
+          } else {
+            spinner.disableShimmer();
+          }
+        }
+      }
+    }
+    async function withSpinnerRestore(options) {
+      const { operation, spinner, wasSpinning } = {
+        __proto__: null,
+        ...options
+      };
+      try {
+        return await operation();
+      } finally {
+        if (spinner && wasSpinning) {
+          spinner.start();
+        }
+      }
+    }
+    function withSpinnerSync(options) {
+      const { message, operation, spinner, withOptions } = {
+        __proto__: null,
+        ...options
+      };
+      if (!spinner) {
+        return operation();
+      }
+      const savedColor = withOptions?.color !== void 0 ? spinner.color : void 0;
+      const savedShimmerState = withOptions?.shimmer !== void 0 ? spinner.shimmerState : void 0;
+      if (withOptions?.color !== void 0) {
+        spinner.color = (0, import_colors.toRgb)(withOptions.color);
+      }
+      if (withOptions?.shimmer !== void 0) {
+        if (typeof withOptions.shimmer === "string") {
+          spinner.updateShimmer({ dir: withOptions.shimmer });
+        } else {
+          spinner.setShimmer(withOptions.shimmer);
+        }
+      }
+      spinner.start(message);
+      try {
+        return operation();
+      } finally {
+        spinner.stop();
+        if (savedColor !== void 0) {
+          spinner.color = savedColor;
+        }
+        if (withOptions?.shimmer !== void 0) {
+          if (savedShimmerState) {
+            spinner.setShimmer({
+              color: savedShimmerState.color,
+              dir: savedShimmerState.mode,
+              speed: savedShimmerState.speed
+            });
+          } else {
+            spinner.disableShimmer();
+          }
+        }
+      }
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/debug.js
+var require_debug3 = __commonJS({
+  "@socketsecurity/lib/dist/debug.js"(exports2, module2) {
+    "use strict";
+    var __create2 = Object.create;
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __getProtoOf2 = Object.getPrototypeOf;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2(
+      // If the importer is in node compatibility mode or this is not an ESM
+      // file that has been converted to a CommonJS file using a Babel-
+      // compatible transform (i.e. "__esModule" has not been set), then set
+      // "default" to the CommonJS "module.exports" for node compatibility.
+      isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target,
+      mod
+    ));
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var debug_exports = {};
+    __export2(debug_exports, {
+      debug: () => debug,
+      debugCache: () => debugCache,
+      debugCacheNs: () => debugCacheNs,
+      debugDir: () => debugDir,
+      debugDirNs: () => debugDirNs,
+      debugLog: () => debugLog3,
+      debugLogNs: () => debugLogNs,
+      debugNs: () => debugNs,
+      debuglog: () => debuglog,
+      debugtime: () => debugtime,
+      isDebug: () => isDebug,
+      isDebugNs: () => isDebugNs2
+    });
+    module2.exports = __toCommonJS2(debug_exports);
+    var import_debug3 = require_debug();
+    var import_socket3 = require_socket();
+    var import_is_unicode_supported = __toESM2(require_is_unicode_supported());
+    var import_debug22 = __toESM2(require_debug2());
+    var import_logger = require_logger();
+    var import_objects2 = require_objects();
+    var import_spinner = require_spinner();
+    var import_strings = require_strings();
+    var ReflectApply = Reflect.apply;
+    var logger = (0, import_logger.getDefaultLogger)();
+    var debugByNamespace = /* @__PURE__ */ new Map();
+    // @__NO_SIDE_EFFECTS__
+    function getDebugJsInstance(namespace) {
+      let inst = debugByNamespace.get(namespace);
+      if (inst) {
+        return inst;
+      }
+      if (!(0, import_debug3.getDebug)() && (0, import_socket3.getSocketDebug)() && (namespace === "error" || namespace === "notice")) {
+        import_debug22.default.enable(namespace);
+      }
+      inst = (0, import_debug22.default)(namespace);
+      inst.log = customLog;
+      debugByNamespace.set(namespace, inst);
+      return inst;
+    }
+    var _util;
+    // @__NO_SIDE_EFFECTS__
+    function getUtil() {
+      if (_util === void 0) {
+        _util = require("node:util");
+      }
+      return _util;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getCallerInfo(stackOffset = 3) {
+      let name = "";
+      const captureStackTrace = Error.captureStackTrace;
+      if (typeof captureStackTrace === "function") {
+        const obj = {};
+        captureStackTrace(obj, getCallerInfo);
+        const stack = obj.stack;
+        if (typeof stack === "string") {
+          let lineCount = 0;
+          let lineStart = 0;
+          for (let i = 0, { length } = stack; i < length; i += 1) {
+            if (stack[i] === "\n") {
+              lineCount += 1;
+              if (lineCount < stackOffset) {
+                lineStart = i + 1;
+              } else {
+                const line = stack.slice(lineStart, i).trimStart();
+                const match = /(?<=^at\s+).*?(?=\s+\(|$)/.exec(line)?.[0];
+                if (match) {
+                  name = match.replace(/^(?:async|bound|get|new|set)\s+/, "");
+                  if (name.startsWith("Object.")) {
+                    const afterDot = name.slice(
+                      7
+                      /*'Object.'.length*/
+                    );
+                    if (!(0, import_objects2.hasOwn)(Object, afterDot)) {
+                      name = afterDot;
+                    }
+                  }
+                }
+                break;
+              }
+            }
+          }
+        }
+      }
+      return name;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function customLog(...args) {
+      const util = /* @__PURE__ */ getUtil();
+      const inspectOpts = import_debug22.default.inspectOpts ? {
+        ...import_debug22.default.inspectOpts,
+        showHidden: import_debug22.default.inspectOpts.showHidden === null ? void 0 : import_debug22.default.inspectOpts.showHidden,
+        depth: import_debug22.default.inspectOpts.depth === null || typeof import_debug22.default.inspectOpts.depth === "boolean" ? void 0 : import_debug22.default.inspectOpts.depth
+      } : {};
+      ReflectApply(logger.info, logger, [
+        util.formatWithOptions(inspectOpts, ...args)
+      ]);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function extractOptions(namespaces) {
+      return namespaces !== null && typeof namespaces === "object" ? { __proto__: null, ...namespaces } : { __proto__: null, namespaces };
+    }
+    // @__NO_SIDE_EFFECTS__
+    function isEnabled(namespaces) {
+      if (!(0, import_socket3.getSocketDebug)()) {
+        return false;
+      }
+      if (typeof namespaces !== "string" || !namespaces || namespaces === "*") {
+        return true;
+      }
+      const split = namespaces.trim().replace(/\s+/g, ",").split(",").filter(Boolean);
+      const names = [];
+      const skips = [];
+      for (const ns of split) {
+        if (ns.startsWith("-")) {
+          skips.push(ns.slice(1));
+        } else {
+          names.push(ns);
+        }
+      }
+      if (names.length && !names.some((ns) => (/* @__PURE__ */ getDebugJsInstance(ns)).enabled)) {
+        return false;
+      }
+      return skips.every((ns) => !(/* @__PURE__ */ getDebugJsInstance(ns)).enabled);
+    }
+    function debugDirNs(namespacesOrOpts, obj, inspectOpts) {
+      const options = /* @__PURE__ */ extractOptions(namespacesOrOpts);
+      const { namespaces } = options;
+      if (!/* @__PURE__ */ isEnabled(namespaces)) {
+        return;
+      }
+      const callerName = /* @__PURE__ */ getCallerInfo(4) || "anonymous";
+      if (pointingTriangle === void 0) {
+        const supported = (0, import_is_unicode_supported.default)();
+        pointingTriangle = supported ? "\u25B8" : ">";
+      }
+      let opts = inspectOpts;
+      if (opts === void 0) {
+        const debugOpts = import_debug22.default.inspectOpts;
+        if (debugOpts) {
+          opts = {
+            ...debugOpts,
+            showHidden: debugOpts.showHidden === null ? void 0 : debugOpts.showHidden,
+            depth: debugOpts.depth === null || typeof debugOpts.depth === "boolean" ? null : debugOpts.depth
+          };
+        }
+      }
+      const spinnerInstance = options.spinner || (0, import_spinner.getDefaultSpinner)();
+      const wasSpinning = spinnerInstance?.isSpinning;
+      spinnerInstance?.stop();
+      logger.info(`[DEBUG] ${callerName} ${pointingTriangle} object inspection:`);
+      logger.dir(obj, inspectOpts);
+      if (wasSpinning) {
+        spinnerInstance?.start();
+      }
+    }
+    var pointingTriangle;
+    function debugNs(namespacesOrOpts, ...args) {
+      const options = /* @__PURE__ */ extractOptions(namespacesOrOpts);
+      const { namespaces } = options;
+      if (!/* @__PURE__ */ isEnabled(namespaces)) {
+        return;
+      }
+      const name = /* @__PURE__ */ getCallerInfo(4) || "anonymous";
+      if (pointingTriangle === void 0) {
+        const supported = (0, import_is_unicode_supported.default)();
+        pointingTriangle = supported ? "\u25B8" : ">";
+      }
+      const text = args.at(0);
+      const logArgs = typeof text === "string" ? [
+        (0, import_strings.applyLinePrefix)(
+          `${name ? `${name} ${pointingTriangle} ` : ""}${text}`,
+          { prefix: "[DEBUG] " }
+        ),
+        ...args.slice(1)
+      ] : args;
+      const spinnerInstance = options.spinner || (0, import_spinner.getDefaultSpinner)();
+      const wasSpinning = spinnerInstance?.isSpinning;
+      spinnerInstance?.stop();
+      ReflectApply(logger.info, logger, logArgs);
+      if (wasSpinning) {
+        spinnerInstance?.start();
+      }
+    }
+    function debugLogNs(namespacesOrOpts, ...args) {
+      const options = /* @__PURE__ */ extractOptions(namespacesOrOpts);
+      const { namespaces } = options;
+      if (!/* @__PURE__ */ isEnabled(namespaces)) {
+        return;
+      }
+      const callerName = /* @__PURE__ */ getCallerInfo(4) || "anonymous";
+      if (pointingTriangle === void 0) {
+        const supported = (0, import_is_unicode_supported.default)();
+        pointingTriangle = supported ? "\u25B8" : ">";
+      }
+      const text = args.at(0);
+      const logArgs = typeof text === "string" ? [
+        (0, import_strings.applyLinePrefix)(
+          `${callerName ? `${callerName} ${pointingTriangle} ` : ""}${text}`,
+          { prefix: "[DEBUG] " }
+        ),
+        ...args.slice(1)
+      ] : [`[DEBUG] ${callerName} ${pointingTriangle}`, ...args];
+      const spinnerInstance = options.spinner || (0, import_spinner.getDefaultSpinner)();
+      const wasSpinning = spinnerInstance?.isSpinning;
+      spinnerInstance?.stop();
+      ReflectApply(logger.info, logger, logArgs);
+      if (wasSpinning) {
+        spinnerInstance?.start();
+      }
+    }
+    function debugCacheNs(namespacesOrOpts, operation, key, meta) {
+      const options = /* @__PURE__ */ extractOptions(namespacesOrOpts);
+      const { namespaces } = options;
+      if (!/* @__PURE__ */ isEnabled(namespaces)) {
+        return;
+      }
+      const callerName = /* @__PURE__ */ getCallerInfo(4) || "cache";
+      if (pointingTriangle === void 0) {
+        const supported = (0, import_is_unicode_supported.default)();
+        pointingTriangle = supported ? "\u25B8" : ">";
+      }
+      const prefix = `[CACHE] ${callerName} ${pointingTriangle} ${operation}: ${key}`;
+      const logArgs = meta !== void 0 ? [prefix, meta] : [prefix];
+      const spinnerInstance = options.spinner || (0, import_spinner.getDefaultSpinner)();
+      const wasSpinning = spinnerInstance?.isSpinning;
+      spinnerInstance?.stop();
+      ReflectApply(logger.info, logger, logArgs);
+      if (wasSpinning) {
+        spinnerInstance?.start();
+      }
+    }
+    // @__NO_SIDE_EFFECTS__
+    function debugCache(operation, key, meta) {
+      if (!(0, import_socket3.getSocketDebug)()) {
+        return;
+      }
+      const callerName = /* @__PURE__ */ getCallerInfo(3) || "cache";
+      if (pointingTriangle === void 0) {
+        const supported = (0, import_is_unicode_supported.default)();
+        pointingTriangle = supported ? "\u25B8" : ">";
+      }
+      const prefix = `[CACHE] ${callerName} ${pointingTriangle} ${operation}: ${key}`;
+      const args = meta !== void 0 ? [prefix, meta] : [prefix];
+      console.log(...args);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function isDebugNs2(namespaces) {
+      return !!(0, import_socket3.getSocketDebug)() && /* @__PURE__ */ isEnabled(namespaces);
+    }
+    function debug(...args) {
+      debugNs("*", ...args);
+    }
+    function debugDir(obj, inspectOpts) {
+      debugDirNs("*", obj, inspectOpts);
+    }
+    function debugLog3(...args) {
+      debugLogNs("*", ...args);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function isDebug() {
+      return !!(0, import_socket3.getSocketDebug)();
+    }
+    // @__NO_SIDE_EFFECTS__
+    function debuglog(section) {
+      const util = /* @__PURE__ */ getUtil();
+      return util.debuglog(section);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function debugtime(label) {
+      const util = /* @__PURE__ */ getUtil();
+      let startTime;
+      const impl = () => {
+        if (startTime === void 0) {
+          startTime = Date.now();
+        } else {
+          const duration = Date.now() - startTime;
+          util.debuglog("time")(`${label}: ${duration}ms`);
+          startTime = void 0;
+        }
+      };
+      impl.start = () => {
+        startTime = Date.now();
+      };
+      impl.end = () => {
+        if (startTime !== void 0) {
+          const duration = Date.now() - startTime;
+          util.debuglog("time")(`${label}: ${duration}ms`);
+          startTime = void 0;
+        }
+      };
+      return impl;
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/constants/socket.js
+var require_socket2 = __commonJS({
+  "@socketsecurity/lib/dist/constants/socket.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var socket_exports = {};
+    __export2(socket_exports, {
+      CACHE_SOCKET_API_DIR: () => CACHE_SOCKET_API_DIR,
+      REGISTRY: () => REGISTRY,
+      REGISTRY_SCOPE_DELIMITER: () => REGISTRY_SCOPE_DELIMITER,
+      SOCKET_API_BASE_URL: () => SOCKET_API_BASE_URL,
+      SOCKET_API_TOKENS_URL: () => SOCKET_API_TOKENS_URL2,
+      SOCKET_APP_PREFIX: () => SOCKET_APP_PREFIX,
+      SOCKET_CLI_APP_NAME: () => SOCKET_CLI_APP_NAME,
+      SOCKET_CONTACT_URL: () => SOCKET_CONTACT_URL2,
+      SOCKET_DASHBOARD_URL: () => SOCKET_DASHBOARD_URL2,
+      SOCKET_DLX_APP_NAME: () => SOCKET_DLX_APP_NAME,
+      SOCKET_DOCS_CONTACT_URL: () => SOCKET_DOCS_CONTACT_URL,
+      SOCKET_DOCS_URL: () => SOCKET_DOCS_URL,
+      SOCKET_FIREWALL_APP_NAME: () => SOCKET_FIREWALL_APP_NAME,
+      SOCKET_GITHUB_ORG: () => SOCKET_GITHUB_ORG,
+      SOCKET_IPC_HANDSHAKE: () => SOCKET_IPC_HANDSHAKE,
+      SOCKET_LIB_NAME: () => SOCKET_LIB_NAME,
+      SOCKET_LIB_URL: () => SOCKET_LIB_URL,
+      SOCKET_LIB_USER_AGENT: () => SOCKET_LIB_USER_AGENT,
+      SOCKET_LIB_VERSION: () => SOCKET_LIB_VERSION,
+      SOCKET_OVERRIDE_SCOPE: () => SOCKET_OVERRIDE_SCOPE,
+      SOCKET_PRICING_URL: () => SOCKET_PRICING_URL,
+      SOCKET_PUBLIC_API_KEY: () => SOCKET_PUBLIC_API_KEY,
+      SOCKET_PUBLIC_API_TOKEN: () => SOCKET_PUBLIC_API_TOKEN2,
+      SOCKET_REGISTRY_APP_NAME: () => SOCKET_REGISTRY_APP_NAME,
+      SOCKET_REGISTRY_NPM_ORG: () => SOCKET_REGISTRY_NPM_ORG,
+      SOCKET_REGISTRY_PACKAGE_NAME: () => SOCKET_REGISTRY_PACKAGE_NAME,
+      SOCKET_REGISTRY_REPO_NAME: () => SOCKET_REGISTRY_REPO_NAME,
+      SOCKET_REGISTRY_SCOPE: () => SOCKET_REGISTRY_SCOPE,
+      SOCKET_SECURITY_SCOPE: () => SOCKET_SECURITY_SCOPE,
+      SOCKET_STATUS_URL: () => SOCKET_STATUS_URL,
+      SOCKET_WEBSITE_URL: () => SOCKET_WEBSITE_URL
+    });
+    module2.exports = __toCommonJS2(socket_exports);
+    var SOCKET_API_BASE_URL = "https://api.socket.dev/v0";
+    var SOCKET_PUBLIC_API_KEY = "sktsec_t_--RAN5U4ivauy4w37-6aoKyYPDt5ZbaT5JBVMqiwKo_api";
+    var SOCKET_PUBLIC_API_TOKEN2 = SOCKET_PUBLIC_API_KEY;
+    var SOCKET_WEBSITE_URL = "https://socket.dev";
+    var SOCKET_CONTACT_URL2 = "https://socket.dev/contact";
+    var SOCKET_DASHBOARD_URL2 = "https://socket.dev/dashboard";
+    var SOCKET_API_TOKENS_URL2 = "https://socket.dev/dashboard/settings/api-tokens";
+    var SOCKET_PRICING_URL = "https://socket.dev/pricing";
+    var SOCKET_STATUS_URL = "https://status.socket.dev";
+    var SOCKET_DOCS_URL = "https://docs.socket.dev";
+    var SOCKET_DOCS_CONTACT_URL = "https://docs.socket.dev/docs/contact-support";
+    var SOCKET_REGISTRY_SCOPE = "@socketregistry";
+    var SOCKET_SECURITY_SCOPE = "@socketsecurity";
+    var SOCKET_OVERRIDE_SCOPE = "@socketoverride";
+    var SOCKET_GITHUB_ORG = "SocketDev";
+    var SOCKET_REGISTRY_REPO_NAME = "socket-registry";
+    var SOCKET_REGISTRY_PACKAGE_NAME = "@socketsecurity/registry";
+    var SOCKET_REGISTRY_NPM_ORG = "socketregistry";
+    var SOCKET_CLI_APP_NAME = "socket";
+    var SOCKET_DLX_APP_NAME = "dlx";
+    var SOCKET_FIREWALL_APP_NAME = "sfw";
+    var SOCKET_REGISTRY_APP_NAME = "registry";
+    var SOCKET_APP_PREFIX = "_";
+    var SOCKET_LIB_NAME = "@socketsecurity/lib";
+    var SOCKET_LIB_VERSION = "5.18.2";
+    var SOCKET_LIB_URL = "https://github.com/SocketDev/socket-lib";
+    var SOCKET_LIB_USER_AGENT = `socketsecurity-lib/${SOCKET_LIB_VERSION} (${SOCKET_LIB_URL})`;
+    var SOCKET_IPC_HANDSHAKE = "SOCKET_IPC_HANDSHAKE";
+    var CACHE_SOCKET_API_DIR = "socket-api";
+    var REGISTRY = "registry";
+    var REGISTRY_SCOPE_DELIMITER = "__";
+  }
+});
+
+// @socketsecurity/lib/dist/promises.js
+var require_promises = __commonJS({
+  "@socketsecurity/lib/dist/promises.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var promises_exports = {};
+    __export2(promises_exports, {
+      normalizeIterationOptions: () => normalizeIterationOptions,
+      normalizeRetryOptions: () => normalizeRetryOptions,
+      pEach: () => pEach,
+      pEachChunk: () => pEachChunk,
+      pFilter: () => pFilter,
+      pFilterChunk: () => pFilterChunk,
+      pRetry: () => pRetry2,
+      resolveRetryOptions: () => resolveRetryOptions
+    });
+    module2.exports = __toCommonJS2(promises_exports);
+    var import_core2 = require_core();
+    var import_process2 = require_process();
+    var import_arrays = require_arrays();
+    var abortSignal2 = (0, import_process2.getAbortSignal)();
+    var _timers;
+    // @__NO_SIDE_EFFECTS__
+    function getTimers() {
+      if (_timers === void 0) {
+        _timers = require("node:timers/promises");
+      }
+      return _timers;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function normalizeIterationOptions(options) {
+      const opts = typeof options === "number" ? { concurrency: options } : options;
+      const {
+        // The number of concurrent executions performed at one time.
+        concurrency = 1,
+        // Retries as a number or options object.
+        retries,
+        // AbortSignal used to support cancellation.
+        signal = abortSignal2
+      } = { __proto__: null, ...opts };
+      const normalizedConcurrency = Math.max(1, concurrency);
+      const retryOpts = /* @__PURE__ */ resolveRetryOptions(retries);
+      return {
+        __proto__: null,
+        concurrency: normalizedConcurrency,
+        retries: /* @__PURE__ */ normalizeRetryOptions({ signal, ...retryOpts }),
+        signal
+      };
+    }
+    // @__NO_SIDE_EFFECTS__
+    function normalizeRetryOptions(options) {
+      const resolved = /* @__PURE__ */ resolveRetryOptions(options);
+      const {
+        // Arguments to pass to the callback function.
+        args = [],
+        // Multiplier for exponential backoff (e.g., 2 doubles delay each retry).
+        backoffFactor = 2,
+        // Initial delay before the first retry (in milliseconds).
+        baseDelayMs = 200,
+        // Whether to apply randomness to spread out retries.
+        jitter = true,
+        // Upper limit for any backoff delay (in milliseconds).
+        maxDelayMs = 1e4,
+        // Optional callback invoked on each retry attempt:
+        // (attempt: number, error: unknown, delay: number) => void
+        onRetry,
+        // Whether onRetry can cancel retries by returning `false`.
+        onRetryCancelOnFalse = false,
+        // Whether onRetry will rethrow errors.
+        onRetryRethrow = false,
+        // Number of retry attempts (0 = no retries, only initial attempt).
+        retries = 0,
+        // AbortSignal used to support cancellation.
+        signal = abortSignal2
+      } = resolved;
+      return {
+        args,
+        backoffFactor,
+        baseDelayMs,
+        jitter,
+        maxDelayMs,
+        onRetry,
+        onRetryCancelOnFalse,
+        onRetryRethrow,
+        retries,
+        signal
+      };
+    }
+    // @__NO_SIDE_EFFECTS__
+    async function pEach(array, callbackFn, options) {
+      const iterOpts = /* @__PURE__ */ normalizeIterationOptions(options);
+      const { concurrency, retries, signal } = iterOpts;
+      const chunks = (0, import_arrays.arrayChunk)(array, concurrency);
+      for (const chunk of chunks) {
+        if (signal?.aborted) {
+          return;
+        }
+        await Promise.allSettled(
+          chunk.map(
+            (item) => /* @__PURE__ */ pRetry2((...args) => callbackFn(args[0]), {
+              ...retries,
+              args: [item],
+              signal
+            })
+          )
+        );
+      }
+    }
+    // @__NO_SIDE_EFFECTS__
+    async function pFilter(array, callbackFn, options) {
+      const iterOpts = /* @__PURE__ */ normalizeIterationOptions(options);
+      return (await /* @__PURE__ */ pFilterChunk(
+        (0, import_arrays.arrayChunk)(array, iterOpts.concurrency),
+        callbackFn,
+        iterOpts.retries
+      )).flat();
+    }
+    // @__NO_SIDE_EFFECTS__
+    async function pEachChunk(array, callbackFn, options) {
+      const { chunkSize = 100, ...retryOpts } = options || {};
+      const chunks = (0, import_arrays.arrayChunk)(array, chunkSize);
+      const normalizedRetryOpts = /* @__PURE__ */ normalizeRetryOptions(retryOpts);
+      const { signal } = normalizedRetryOpts;
+      for (const chunk of chunks) {
+        if (signal?.aborted) {
+          return;
+        }
+        await /* @__PURE__ */ pRetry2((...args) => callbackFn(args[0]), {
+          ...normalizedRetryOpts,
+          args: [chunk]
+        });
+      }
+    }
+    // @__NO_SIDE_EFFECTS__
+    async function pFilterChunk(chunks, callbackFn, options) {
+      const retryOpts = /* @__PURE__ */ normalizeRetryOptions(options);
+      const { signal } = retryOpts;
+      const { length } = chunks;
+      const filteredChunks = Array(length);
+      for (let i = 0; i < length; i += 1) {
+        if (signal?.aborted) {
+          filteredChunks[i] = [];
+        } else {
+          const chunk = chunks[i];
+          const settled = await Promise.allSettled(
+            chunk.map(
+              (value) => /* @__PURE__ */ pRetry2((...args) => callbackFn(args[0]), {
+                ...retryOpts,
+                args: [value]
+              })
+            )
+          );
+          const predicateResults = settled.map(
+            (r) => r.status === "fulfilled" ? r.value : false
+          );
+          filteredChunks[i] = chunk.filter((_v, i2) => predicateResults[i2]);
+        }
+      }
+      return filteredChunks;
+    }
+    // @__NO_SIDE_EFFECTS__
+    async function pRetry2(callbackFn, options) {
+      const {
+        args,
+        backoffFactor,
+        baseDelayMs,
+        jitter,
+        maxDelayMs,
+        onRetry,
+        onRetryCancelOnFalse,
+        onRetryRethrow,
+        retries,
+        signal
+      } = /* @__PURE__ */ normalizeRetryOptions(options);
+      if (signal?.aborted) {
+        return void 0;
+      }
+      if (retries === 0) {
+        return await callbackFn(...args || [], { signal });
+      }
+      const timers = /* @__PURE__ */ getTimers();
+      let attempts = retries;
+      let delay = baseDelayMs;
+      let error = import_core2.UNDEFINED_TOKEN;
+      while (attempts-- >= 0) {
+        if (signal?.aborted) {
+          return void 0;
+        }
+        try {
+          return await callbackFn(...args || [], { signal });
+        } catch (e) {
+          error = e;
+          if (attempts < 0) {
+            break;
+          }
+          let waitTime = delay;
+          if (jitter) {
+            waitTime += Math.floor(Math.random() * delay);
+          }
+          waitTime = Math.min(waitTime, maxDelayMs);
+          if (typeof onRetry === "function") {
+            try {
+              const result = onRetry(retries - attempts, e, waitTime);
+              if (result === false && onRetryCancelOnFalse) {
+                break;
+              }
+              if (typeof result === "number" && result >= 0) {
+                waitTime = Math.min(result, maxDelayMs);
+              }
+            } catch (e2) {
+              if (onRetryRethrow) {
+                throw e2;
+              }
+            }
+          }
+          try {
+            await timers.setTimeout(waitTime, void 0, { signal });
+          } catch {
+            return void 0;
+          }
+          if (signal?.aborted) {
+            return void 0;
+          }
+          delay = Math.min(delay * backoffFactor, maxDelayMs);
+        }
+      }
+      if (error !== import_core2.UNDEFINED_TOKEN) {
+        throw error;
+      }
+      return void 0;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function resolveRetryOptions(options) {
+      const defaults = {
+        __proto__: null,
+        retries: 0,
+        baseDelayMs: 200,
+        maxDelayMs: 1e4,
+        backoffFactor: 2
+      };
+      if (typeof options === "number") {
+        return { ...defaults, retries: options };
+      }
+      return options ? { ...defaults, ...options } : defaults;
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/globs.js
+var require_globs = __commonJS({
+  "@socketsecurity/lib/dist/globs.js"(exports2, module2) {
+    "use strict";
+    module2.exports = {};
+  }
+});
+
+// @socketsecurity/lib/dist/json/parse.js
+var require_parse = __commonJS({
+  "@socketsecurity/lib/dist/json/parse.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var parse_exports = {};
+    __export2(parse_exports, {
+      isJsonPrimitive: () => isJsonPrimitive,
+      jsonParse: () => jsonParse3
+    });
+    module2.exports = __toCommonJS2(parse_exports);
+    var import_strings = require_strings();
+    var JSONParse = JSON.parse;
+    // @__NO_SIDE_EFFECTS__
+    function isBuffer(x) {
+      if (!x || typeof x !== "object") {
+        return false;
+      }
+      const obj = x;
+      if (typeof obj["length"] !== "number") {
+        return false;
+      }
+      if (typeof obj["copy"] !== "function" || typeof obj["slice"] !== "function") {
+        return false;
+      }
+      if (typeof obj["length"] === "number" && obj["length"] > 0 && typeof obj[0] !== "number") {
+        return false;
+      }
+      const Ctor = x.constructor;
+      return !!(typeof Ctor?.isBuffer === "function" && Ctor.isBuffer(x));
+    }
+    // @__NO_SIDE_EFFECTS__
+    function isJsonPrimitive(value) {
+      return value === null || typeof value === "boolean" || typeof value === "number" || typeof value === "string";
+    }
+    // @__NO_SIDE_EFFECTS__
+    function jsonParse3(content, options) {
+      const { filepath, reviver, throws } = {
+        __proto__: null,
+        ...options
+      };
+      const shouldThrow = throws === void 0 || !!throws;
+      const jsonStr = /* @__PURE__ */ isBuffer(content) ? content.toString("utf8") : content;
+      try {
+        return JSONParse((0, import_strings.stripBom)(jsonStr), reviver);
+      } catch (e) {
+        if (shouldThrow) {
+          const error = e;
+          if (error && typeof filepath === "string") {
+            error.message = `${filepath}: ${error.message}`;
+          }
+          throw error;
+        }
+      }
+      return void 0;
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/constants/platform.js
+var require_platform = __commonJS({
+  "@socketsecurity/lib/dist/constants/platform.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var platform_exports = {};
+    __export2(platform_exports, {
+      DARWIN: () => DARWIN,
+      S_IXGRP: () => S_IXGRP,
+      S_IXOTH: () => S_IXOTH,
+      S_IXUSR: () => S_IXUSR,
+      WIN32: () => WIN32,
+      getArch: () => getArch,
+      getPlatform: () => getPlatform
+    });
+    module2.exports = __toCommonJS2(platform_exports);
+    var _os;
+    // @__NO_SIDE_EFFECTS__
+    function getOs() {
+      if (_os === void 0) {
+        _os = require("node:os");
+      }
+      return _os;
+    }
+    var _arch;
+    function getArch() {
+      if (_arch === void 0) {
+        _arch = (/* @__PURE__ */ getOs()).arch();
+      }
+      return _arch;
+    }
+    var _platform;
+    function getPlatform() {
+      if (_platform === void 0) {
+        _platform = (/* @__PURE__ */ getOs()).platform();
+      }
+      return _platform;
+    }
+    var DARWIN = getPlatform() === "darwin";
+    var WIN32 = getPlatform() === "win32";
+    var S_IXUSR = 64;
+    var S_IXGRP = 8;
+    var S_IXOTH = 1;
+  }
+});
+
+// @socketsecurity/lib/dist/paths/normalize.js
+var require_normalize = __commonJS({
+  "@socketsecurity/lib/dist/paths/normalize.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var normalize_exports = {};
+    __export2(normalize_exports, {
+      fromUnixPath: () => fromUnixPath,
+      isAbsolute: () => isAbsolute,
+      isNodeModules: () => isNodeModules,
+      isPath: () => isPath,
+      isRelative: () => isRelative,
+      isUnixPath: () => isUnixPath,
+      normalizePath: () => normalizePath3,
+      pathLikeToString: () => pathLikeToString,
+      relativeResolve: () => relativeResolve,
+      splitPath: () => splitPath,
+      toUnixPath: () => toUnixPath,
+      trimLeadingDotSlash: () => trimLeadingDotSlash
+    });
+    module2.exports = __toCommonJS2(normalize_exports);
+    var import_platform = require_platform();
+    var import_strings = require_strings();
+    var CHAR_BACKWARD_SLASH = 92;
+    var CHAR_COLON = 58;
+    var CHAR_FORWARD_SLASH = 47;
+    var CHAR_LOWERCASE_A = 97;
+    var CHAR_LOWERCASE_Z = 122;
+    var CHAR_UPPERCASE_A = 65;
+    var CHAR_UPPERCASE_Z = 90;
+    var msysDriveRegExp = /^\/([a-zA-Z])(\/|$)/;
+    var slashRegExp = /[/\\]/;
+    var nodeModulesPathRegExp = /(?:^|[/\\])node_modules(?:[/\\]|$)/;
+    // @__NO_SIDE_EFFECTS__
+    function isPathSeparator(code) {
+      return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function isWindowsDeviceRoot(code) {
+      return code >= CHAR_UPPERCASE_A && code <= CHAR_UPPERCASE_Z || code >= CHAR_LOWERCASE_A && code <= CHAR_LOWERCASE_Z;
+    }
+    var _buffer;
+    // @__NO_SIDE_EFFECTS__
+    function getBuffer() {
+      if (_buffer === void 0) {
+        _buffer = require("node:buffer");
+      }
+      return _buffer;
+    }
+    var _url;
+    // @__NO_SIDE_EFFECTS__
+    function getUrl() {
+      if (_url === void 0) {
+        _url = require("node:url");
+      }
+      return _url;
+    }
+    function msysDriveToNative(normalized) {
+      if (import_platform.WIN32) {
+        return normalized.replace(
+          msysDriveRegExp,
+          (_, letter, sep) => `${letter.toUpperCase()}:${sep || "/"}`
+        );
+      }
+      return normalized;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function isNodeModules(pathLike) {
+      const filepath = /* @__PURE__ */ pathLikeToString(pathLike);
+      return nodeModulesPathRegExp.test(filepath);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function isAbsolute(pathLike) {
+      const filepath = /* @__PURE__ */ pathLikeToString(pathLike);
+      const { length } = filepath;
+      if (length === 0) {
+        return false;
+      }
+      const code = filepath.charCodeAt(0);
+      if (code === CHAR_FORWARD_SLASH) {
+        return true;
+      }
+      if (code === CHAR_BACKWARD_SLASH) {
+        return true;
+      }
+      if (import_platform.WIN32 && length > 2) {
+        if (/* @__PURE__ */ isWindowsDeviceRoot(code) && filepath.charCodeAt(1) === CHAR_COLON && /* @__PURE__ */ isPathSeparator(filepath.charCodeAt(2))) {
+          return true;
+        }
+      }
+      return false;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function isPath(pathLike) {
+      const filepath = /* @__PURE__ */ pathLikeToString(pathLike);
+      if (typeof filepath !== "string" || filepath.length === 0) {
+        return false;
+      }
+      if (/^[a-z][a-z0-9+.-]+:/i.test(filepath)) {
+        return false;
+      }
+      if (filepath === "." || filepath === "..") {
+        return true;
+      }
+      if (/* @__PURE__ */ isAbsolute(filepath)) {
+        return true;
+      }
+      if (filepath.includes("/") || filepath.includes("\\")) {
+        if (filepath.startsWith("@") && !filepath.startsWith("@/")) {
+          const parts = filepath.split("/");
+          if (parts.length <= 2 && !parts[1]?.includes("\\")) {
+            return false;
+          }
+        }
+        return true;
+      }
+      return false;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function isRelative(pathLike) {
+      const filepath = /* @__PURE__ */ pathLikeToString(pathLike);
+      if (typeof filepath !== "string") {
+        return false;
+      }
+      if (filepath.length === 0) {
+        return true;
+      }
+      return !/* @__PURE__ */ isAbsolute(filepath);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function isUnixPath(pathLike) {
+      const filepath = /* @__PURE__ */ pathLikeToString(pathLike);
+      return typeof filepath === "string" && msysDriveRegExp.test(filepath);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function fromUnixPath(pathLike) {
+      const normalized = /* @__PURE__ */ normalizePath3(pathLike);
+      if (import_platform.WIN32) {
+        return normalized.replace(/\//g, "\\");
+      }
+      return normalized;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function normalizePath3(pathLike) {
+      const filepath = /* @__PURE__ */ pathLikeToString(pathLike);
+      const { length } = filepath;
+      if (length === 0) {
+        return ".";
+      }
+      if (length < 2) {
+        return length === 1 && filepath.charCodeAt(0) === 92 ? "/" : filepath;
+      }
+      let code = 0;
+      let start = 0;
+      let prefix = "";
+      if (length > 4 && filepath.charCodeAt(3) === 92) {
+        const code2 = filepath.charCodeAt(2);
+        if ((code2 === 63 || code2 === 46) && filepath.charCodeAt(0) === 92 && filepath.charCodeAt(1) === 92) {
+          start = 2;
+          prefix = "//";
+        }
+      }
+      if (start === 0) {
+        if (length > 2 && (filepath.charCodeAt(0) === 92 && filepath.charCodeAt(1) === 92 && filepath.charCodeAt(2) !== 92 || filepath.charCodeAt(0) === 47 && filepath.charCodeAt(1) === 47 && filepath.charCodeAt(2) !== 47)) {
+          let firstSegmentEnd = -1;
+          let hasSecondSegment = false;
+          let i = 2;
+          while (i < length && (filepath.charCodeAt(i) === 47 || filepath.charCodeAt(i) === 92)) {
+            i++;
+          }
+          while (i < length) {
+            const char = filepath.charCodeAt(i);
+            if (char === 47 || char === 92) {
+              firstSegmentEnd = i;
+              break;
+            }
+            i++;
+          }
+          if (firstSegmentEnd > 2) {
+            i = firstSegmentEnd;
+            while (i < length && (filepath.charCodeAt(i) === 47 || filepath.charCodeAt(i) === 92)) {
+              i++;
+            }
+            if (i < length) {
+              hasSecondSegment = true;
+            }
+          }
+          if (firstSegmentEnd > 2 && hasSecondSegment) {
+            start = 2;
+            prefix = "//";
+          } else {
+            code = filepath.charCodeAt(start);
+            while (code === 47 || code === 92) {
+              start += 1;
+              code = filepath.charCodeAt(start);
+            }
+            if (start) {
+              prefix = "/";
+            }
+          }
+        } else {
+          code = filepath.charCodeAt(start);
+          while (code === 47 || code === 92) {
+            start += 1;
+            code = filepath.charCodeAt(start);
+          }
+          if (start) {
+            prefix = "/";
+          }
+        }
+      }
+      let nextIndex = (0, import_strings.search)(filepath, slashRegExp, { fromIndex: start });
+      if (nextIndex === -1) {
+        const segment = filepath.slice(start);
+        if (segment === "." || segment.length === 0) {
+          return prefix || ".";
+        }
+        if (segment === "..") {
+          return prefix ? prefix.slice(0, -1) || "/" : "..";
+        }
+        return msysDriveToNative(prefix + segment);
+      }
+      let collapsed = "";
+      let segmentCount = 0;
+      let leadingDotDots = 0;
+      while (nextIndex !== -1) {
+        const segment = filepath.slice(start, nextIndex);
+        if (segment.length > 0 && segment !== ".") {
+          if (segment === "..") {
+            if (segmentCount > 0) {
+              const lastSeparatorIndex = collapsed.lastIndexOf("/");
+              if (lastSeparatorIndex === -1) {
+                collapsed = "";
+                segmentCount = 0;
+                if (leadingDotDots > 0 && !prefix) {
+                  collapsed = "..";
+                  leadingDotDots = 1;
+                }
+              } else {
+                const lastSegmentStart = lastSeparatorIndex + 1;
+                const lastSegmentValue = collapsed.slice(lastSegmentStart);
+                if (lastSegmentValue === "..") {
+                  collapsed = `${collapsed}/${segment}`;
+                  leadingDotDots += 1;
+                } else {
+                  collapsed = collapsed.slice(0, lastSeparatorIndex);
+                  segmentCount -= 1;
+                }
+              }
+            } else if (!prefix) {
+              collapsed = collapsed + (collapsed.length === 0 ? "" : "/") + segment;
+              leadingDotDots += 1;
+            }
+          } else {
+            collapsed = collapsed + (collapsed.length === 0 ? "" : "/") + segment;
+            segmentCount += 1;
+          }
+        }
+        start = nextIndex + 1;
+        code = filepath.charCodeAt(start);
+        while (code === 47 || code === 92) {
+          start += 1;
+          code = filepath.charCodeAt(start);
+        }
+        nextIndex = (0, import_strings.search)(filepath, slashRegExp, { fromIndex: start });
+      }
+      const lastSegment = filepath.slice(start);
+      if (lastSegment.length > 0 && lastSegment !== ".") {
+        if (lastSegment === "..") {
+          if (segmentCount > 0) {
+            const lastSeparatorIndex = collapsed.lastIndexOf("/");
+            if (lastSeparatorIndex === -1) {
+              collapsed = "";
+              segmentCount = 0;
+              if (leadingDotDots > 0 && !prefix) {
+                collapsed = "..";
+                leadingDotDots = 1;
+              }
+            } else {
+              const lastSegmentStart = lastSeparatorIndex + 1;
+              const lastSegmentValue = collapsed.slice(lastSegmentStart);
+              if (lastSegmentValue === "..") {
+                collapsed = `${collapsed}/${lastSegment}`;
+                leadingDotDots += 1;
+              } else {
+                collapsed = collapsed.slice(0, lastSeparatorIndex);
+                segmentCount -= 1;
+              }
+            }
+          } else if (!prefix) {
+            collapsed = collapsed + (collapsed.length === 0 ? "" : "/") + lastSegment;
+            leadingDotDots += 1;
+          }
+        } else {
+          collapsed = collapsed + (collapsed.length === 0 ? "" : "/") + lastSegment;
+          segmentCount += 1;
+        }
+      }
+      if (collapsed.length === 0) {
+        return prefix || ".";
+      }
+      return msysDriveToNative(prefix + collapsed);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function pathLikeToString(pathLike) {
+      if (pathLike === null || pathLike === void 0) {
+        return "";
+      }
+      if (typeof pathLike === "string") {
+        return pathLike;
+      }
+      const { Buffer: Buffer2 } = /* @__PURE__ */ getBuffer();
+      if (Buffer2.isBuffer(pathLike)) {
+        return pathLike.toString("utf8");
+      }
+      const url = /* @__PURE__ */ getUrl();
+      if (pathLike instanceof URL) {
+        try {
+          return url.fileURLToPath(pathLike);
+        } catch {
+          const pathname = pathLike.pathname;
+          const decodedPathname = decodeURIComponent(pathname);
+          if (import_platform.WIN32 && decodedPathname.startsWith("/")) {
+            const letter = decodedPathname.charCodeAt(1) | 32;
+            const hasValidDriveLetter = decodedPathname.length >= 3 && letter >= 97 && // 'a' to 'z'
+            letter <= 122 && decodedPathname.charAt(2) === ":";
+            if (!hasValidDriveLetter) {
+              return decodedPathname;
+            }
+          }
+          return decodedPathname;
+        }
+      }
+      return String(pathLike);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function splitPath(pathLike) {
+      const filepath = /* @__PURE__ */ pathLikeToString(pathLike);
+      if (filepath === "") {
+        return [];
+      }
+      return filepath.split(slashRegExp);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function trimLeadingDotSlash(pathLike) {
+      const filepath = /* @__PURE__ */ pathLikeToString(pathLike);
+      if (filepath.startsWith("./") || filepath.startsWith(".\\")) {
+        return filepath.slice(2);
+      }
+      return filepath;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function resolve(...segments) {
+      let resolvedPath = "";
+      let resolvedAbsolute = false;
+      for (let i = segments.length - 1; i >= 0 && !resolvedAbsolute; i -= 1) {
+        const segment = segments[i];
+        if (typeof segment !== "string" || segment.length === 0) {
+          continue;
+        }
+        resolvedPath = segment + (resolvedPath.length === 0 ? "" : `/${resolvedPath}`);
+        resolvedAbsolute = /* @__PURE__ */ isAbsolute(segment);
+      }
+      if (!resolvedAbsolute) {
+        const cwd = /* @__PURE__ */ require("node:process").cwd();
+        resolvedPath = cwd + (resolvedPath.length === 0 ? "" : `/${resolvedPath}`);
+      }
+      return /* @__PURE__ */ normalizePath3(resolvedPath);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function relative(from, to) {
+      if (from === to) {
+        return "";
+      }
+      const actualFrom = /* @__PURE__ */ resolve(from);
+      const actualTo = /* @__PURE__ */ resolve(to);
+      if (actualFrom === actualTo) {
+        return "";
+      }
+      if (import_platform.WIN32) {
+        const fromLower = actualFrom.toLowerCase();
+        const toLower = actualTo.toLowerCase();
+        if (fromLower === toLower) {
+          return "";
+        }
+      }
+      const fromStart = 1;
+      const fromEnd = actualFrom.length;
+      const fromLen = fromEnd - fromStart;
+      const toStart = 1;
+      const toEnd = actualTo.length;
+      const toLen = toEnd - toStart;
+      const length = fromLen < toLen ? fromLen : toLen;
+      let lastCommonSep = -1;
+      let i = 0;
+      for (; i < length; i += 1) {
+        let fromCode = actualFrom.charCodeAt(fromStart + i);
+        let toCode = actualTo.charCodeAt(toStart + i);
+        if (import_platform.WIN32) {
+          if (fromCode >= CHAR_UPPERCASE_A && fromCode <= CHAR_UPPERCASE_Z) {
+            fromCode += 32;
+          }
+          if (toCode >= CHAR_UPPERCASE_A && toCode <= CHAR_UPPERCASE_Z) {
+            toCode += 32;
+          }
+        }
+        if (fromCode !== toCode) {
+          break;
+        }
+        if (/* @__PURE__ */ isPathSeparator(actualFrom.charCodeAt(fromStart + i))) {
+          lastCommonSep = i;
+        }
+      }
+      if (i === length) {
+        if (toLen > length) {
+          const toCode = actualTo.charCodeAt(toStart + i);
+          if (/* @__PURE__ */ isPathSeparator(toCode)) {
+            return actualTo.slice(toStart + i + 1);
+          }
+          if (i === 0) {
+            return actualTo.slice(toStart + i);
+          }
+        } else if (fromLen > length) {
+          const fromCode = actualFrom.charCodeAt(fromStart + i);
+          if (/* @__PURE__ */ isPathSeparator(fromCode)) {
+            lastCommonSep = i;
+          } else if (i === 0) {
+            lastCommonSep = 0;
+          }
+        }
+      }
+      let out = "";
+      for (i = fromStart + lastCommonSep + 1; i <= fromEnd; i += 1) {
+        const code = actualFrom.charCodeAt(i);
+        if (i === fromEnd || /* @__PURE__ */ isPathSeparator(code)) {
+          out += out.length === 0 ? ".." : "/..";
+        }
+      }
+      return out + actualTo.slice(toStart + lastCommonSep);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function relativeResolve(from, to) {
+      const rel = /* @__PURE__ */ relative(from, to);
+      if (rel === "") {
+        return "";
+      }
+      return /* @__PURE__ */ normalizePath3(rel);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function toUnixPath(pathLike) {
+      const normalized = /* @__PURE__ */ normalizePath3(pathLike);
+      if (import_platform.WIN32) {
+        return normalized.replace(
+          /^([A-Z]):/i,
+          (_, letter) => `/${letter.toLowerCase()}`
+        );
+      }
+      return normalized;
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/paths/rewire.js
+var require_rewire2 = __commonJS({
+  "@socketsecurity/lib/dist/paths/rewire.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var rewire_exports = {};
+    __export2(rewire_exports, {
+      clearPath: () => clearPath,
+      getPathValue: () => getPathValue,
+      hasOverride: () => hasOverride,
+      invalidateCaches: () => invalidateCaches,
+      registerCacheInvalidation: () => registerCacheInvalidation,
+      resetPaths: () => resetPaths,
+      setPath: () => setPath
+    });
+    module2.exports = __toCommonJS2(rewire_exports);
+    var stateSymbol = Symbol.for("@socketsecurity/lib/paths/rewire/state");
+    if (!globalThis[stateSymbol]) {
+      globalThis[stateSymbol] = {
+        testOverrides: /* @__PURE__ */ new Map(),
+        valueCache: /* @__PURE__ */ new Map(),
+        cacheInvalidationCallbacks: []
+      };
+    }
+    var sharedState = globalThis[stateSymbol];
+    var testOverrides = sharedState.testOverrides;
+    var valueCache = sharedState.valueCache;
+    var cacheInvalidationCallbacks = sharedState.cacheInvalidationCallbacks;
+    function clearPath(key) {
+      testOverrides.delete(key);
+      invalidateCaches();
+    }
+    function getPathValue(key, originalFn) {
+      if (testOverrides.has(key)) {
+        return testOverrides.get(key);
+      }
+      if (valueCache.has(key)) {
+        return valueCache.get(key);
+      }
+      const value = originalFn();
+      valueCache.set(key, value);
+      return value;
+    }
+    function hasOverride(key) {
+      return testOverrides.has(key);
+    }
+    function invalidateCaches() {
+      valueCache.clear();
+      for (const callback of cacheInvalidationCallbacks) {
+        try {
+          callback();
+        } catch {
+        }
+      }
+    }
+    function registerCacheInvalidation(callback) {
+      cacheInvalidationCallbacks.push(callback);
+    }
+    function resetPaths() {
+      testOverrides.clear();
+      invalidateCaches();
+    }
+    function setPath(key, value) {
+      testOverrides.set(key, value);
+      invalidateCaches();
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/constants/github.js
+var require_github = __commonJS({
+  "@socketsecurity/lib/dist/constants/github.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var github_exports = {};
+    __export2(github_exports, {
+      CACHE_GITHUB_DIR: () => CACHE_GITHUB_DIR,
+      GITHUB_API_BASE_URL: () => GITHUB_API_BASE_URL
+    });
+    module2.exports = __toCommonJS2(github_exports);
+    var GITHUB_API_BASE_URL = "https://api.github.com";
+    var CACHE_GITHUB_DIR = "github";
+  }
+});
+
+// @socketsecurity/lib/dist/env/home.js
+var require_home = __commonJS({
+  "@socketsecurity/lib/dist/env/home.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var home_exports = {};
+    __export2(home_exports, {
+      getHome: () => getHome
+    });
+    module2.exports = __toCommonJS2(home_exports);
+    var import_rewire = require_rewire();
+    // @__NO_SIDE_EFFECTS__
+    function getHome() {
+      return (0, import_rewire.getEnvValue)("HOME");
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/env/windows.js
+var require_windows = __commonJS({
+  "@socketsecurity/lib/dist/env/windows.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var windows_exports = {};
+    __export2(windows_exports, {
+      getAppdata: () => getAppdata,
+      getComspec: () => getComspec,
+      getLocalappdata: () => getLocalappdata,
+      getUserprofile: () => getUserprofile
+    });
+    module2.exports = __toCommonJS2(windows_exports);
+    var import_rewire = require_rewire();
+    // @__NO_SIDE_EFFECTS__
+    function getAppdata() {
+      return (0, import_rewire.getEnvValue)("APPDATA");
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getComspec() {
+      return (0, import_rewire.getEnvValue)("COMSPEC");
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getLocalappdata() {
+      return (0, import_rewire.getEnvValue)("LOCALAPPDATA");
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getUserprofile() {
+      return (0, import_rewire.getEnvValue)("USERPROFILE");
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/paths/dirnames.js
+var require_dirnames = __commonJS({
+  "@socketsecurity/lib/dist/paths/dirnames.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var dirnames_exports = {};
+    __export2(dirnames_exports, {
+      CACHE_DIR: () => CACHE_DIR,
+      CACHE_TTL_DIR: () => CACHE_TTL_DIR,
+      DOT_GITHUB: () => DOT_GITHUB,
+      DOT_GIT_DIR: () => DOT_GIT_DIR,
+      DOT_SOCKET_DIR: () => DOT_SOCKET_DIR,
+      NODE_MODULES: () => NODE_MODULES,
+      NODE_MODULES_GLOB_RECURSIVE: () => NODE_MODULES_GLOB_RECURSIVE,
+      SLASH_NODE_MODULES_SLASH: () => SLASH_NODE_MODULES_SLASH
+    });
+    module2.exports = __toCommonJS2(dirnames_exports);
+    var NODE_MODULES = "node_modules";
+    var DOT_GIT_DIR = ".git";
+    var DOT_GITHUB = ".github";
+    var DOT_SOCKET_DIR = ".socket";
+    var CACHE_DIR = "cache";
+    var CACHE_TTL_DIR = "ttl";
+    var NODE_MODULES_GLOB_RECURSIVE = "**/node_modules";
+    var SLASH_NODE_MODULES_SLASH = "/node_modules/";
+  }
+});
+
+// @socketsecurity/lib/dist/paths/socket.js
+var require_socket3 = __commonJS({
+  "@socketsecurity/lib/dist/paths/socket.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var socket_exports = {};
+    __export2(socket_exports, {
+      getOsHomeDir: () => getOsHomeDir,
+      getOsTmpDir: () => getOsTmpDir,
+      getSocketAppCacheDir: () => getSocketAppCacheDir,
+      getSocketAppCacheTtlDir: () => getSocketAppCacheTtlDir,
+      getSocketAppDir: () => getSocketAppDir,
+      getSocketCacacheDir: () => getSocketCacacheDir,
+      getSocketCliDir: () => getSocketCliDir,
+      getSocketDlxDir: () => getSocketDlxDir,
+      getSocketHomePath: () => getSocketHomePath,
+      getSocketRegistryDir: () => getSocketRegistryDir,
+      getSocketRegistryGithubCacheDir: () => getSocketRegistryGithubCacheDir,
+      getSocketUserDir: () => getSocketUserDir,
+      getUserHomeDir: () => getUserHomeDir
+    });
+    module2.exports = __toCommonJS2(socket_exports);
+    var import_github = require_github();
+    var import_socket3 = require_socket2();
+    var import_home = require_home();
+    var import_socket22 = require_socket();
+    var import_windows = require_windows();
+    var import_dirnames = require_dirnames();
+    var import_normalize3 = require_normalize();
+    var import_rewire = require_rewire2();
+    var _os;
+    // @__NO_SIDE_EFFECTS__
+    function getOs() {
+      if (_os === void 0) {
+        _os = require("node:os");
+      }
+      return _os;
+    }
+    var _path;
+    // @__NO_SIDE_EFFECTS__
+    function getPath() {
+      if (_path === void 0) {
+        _path = require("node:path");
+      }
+      return _path;
+    }
+    function getOsHomeDir() {
+      return (0, import_rewire.getPathValue)("homedir", () => (/* @__PURE__ */ getOs()).homedir());
+    }
+    function getOsTmpDir() {
+      return (0, import_rewire.getPathValue)("tmpdir", () => (/* @__PURE__ */ getOs()).tmpdir());
+    }
+    function getSocketHomePath() {
+      return getSocketUserDir();
+    }
+    function getSocketUserDir() {
+      return (0, import_rewire.getPathValue)("socket-user-dir", () => {
+        const socketHome = (0, import_socket22.getSocketHome)();
+        if (socketHome) {
+          return (0, import_normalize3.normalizePath)(socketHome);
+        }
+        return (0, import_normalize3.normalizePath)((/* @__PURE__ */ getPath()).join(getUserHomeDir(), import_dirnames.DOT_SOCKET_DIR));
+      });
+    }
+    function getSocketAppDir(appName) {
+      return (0, import_normalize3.normalizePath)(
+        (/* @__PURE__ */ getPath()).join(getSocketUserDir(), `${import_socket3.SOCKET_APP_PREFIX}${appName}`)
+      );
+    }
+    function getSocketCacacheDir() {
+      return (0, import_rewire.getPathValue)("socket-cacache-dir", () => {
+        if ((0, import_socket22.getSocketCacacheDir)()) {
+          return (0, import_normalize3.normalizePath)((0, import_socket22.getSocketCacacheDir)());
+        }
+        return (0, import_normalize3.normalizePath)(
+          (/* @__PURE__ */ getPath()).join(getSocketUserDir(), `${import_socket3.SOCKET_APP_PREFIX}cacache`)
+        );
+      });
+    }
+    function getSocketDlxDir() {
+      return (0, import_rewire.getPathValue)("socket-dlx-dir", () => {
+        if ((0, import_socket22.getSocketDlxDirEnv)()) {
+          return (0, import_normalize3.normalizePath)((0, import_socket22.getSocketDlxDirEnv)());
+        }
+        return (0, import_normalize3.normalizePath)(
+          (/* @__PURE__ */ getPath()).join(
+            getSocketUserDir(),
+            `${import_socket3.SOCKET_APP_PREFIX}${import_socket3.SOCKET_DLX_APP_NAME}`
+          )
+        );
+      });
+    }
+    function getSocketAppCacheDir(appName) {
+      return (0, import_normalize3.normalizePath)((/* @__PURE__ */ getPath()).join(getSocketAppDir(appName), import_dirnames.CACHE_DIR));
+    }
+    function getSocketAppCacheTtlDir(appName) {
+      return (0, import_normalize3.normalizePath)(
+        (/* @__PURE__ */ getPath()).join(getSocketAppCacheDir(appName), import_dirnames.CACHE_TTL_DIR)
+      );
+    }
+    function getSocketCliDir() {
+      return getSocketAppDir(import_socket3.SOCKET_CLI_APP_NAME);
+    }
+    function getSocketRegistryDir() {
+      return getSocketAppDir(import_socket3.SOCKET_REGISTRY_APP_NAME);
+    }
+    function getSocketRegistryGithubCacheDir() {
+      return (0, import_normalize3.normalizePath)(
+        (/* @__PURE__ */ getPath()).join(
+          getSocketAppCacheTtlDir(import_socket3.SOCKET_REGISTRY_APP_NAME),
+          import_github.CACHE_GITHUB_DIR
+        )
+      );
+    }
+    function getUserHomeDir() {
+      const home = (0, import_home.getHome)();
+      if (home) {
+        return home;
+      }
+      const userProfile = (0, import_windows.getUserprofile)();
+      if (userProfile) {
+        return userProfile;
+      }
+      try {
+        const osHome = getOsHomeDir();
+        if (osHome) {
+          return osHome;
+        }
+      } catch {
+      }
+      return getOsTmpDir();
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/external/pico-pack.js
+var require_pico_pack = __commonJS({
+  "@socketsecurity/lib/dist/external/pico-pack.js"(exports2, module2) {
+    "use strict";
+    module2.exports = {};
+  }
+});
+
+// @socketsecurity/lib/dist/external/del.js
+var require_del = __commonJS({
+  "@socketsecurity/lib/dist/external/del.js"(exports2, module2) {
+    "use strict";
+    var { del } = require_pico_pack();
+    module2.exports = del;
+  }
+});
+
+// @socketsecurity/lib/dist/fs.js
+var require_fs = __commonJS({
+  "@socketsecurity/lib/dist/fs.js"(exports2, module2) {
+    "use strict";
+    var __create2 = Object.create;
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __getProtoOf2 = Object.getPrototypeOf;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2(
+      // If the importer is in node compatibility mode or this is not an ESM
+      // file that has been converted to a CommonJS file using a Babel-
+      // compatible transform (i.e. "__esModule" has not been set), then set
+      // "default" to the CommonJS "module.exports" for node compatibility.
+      isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target,
+      mod
+    ));
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var fs_exports = {};
+    __export2(fs_exports, {
+      findUp: () => findUp,
+      findUpSync: () => findUpSync,
+      invalidatePathCache: () => invalidatePathCache,
+      isDir: () => isDir,
+      isDirEmptySync: () => isDirEmptySync,
+      isDirSync: () => isDirSync,
+      isSymLinkSync: () => isSymLinkSync,
+      normalizeEncoding: () => normalizeEncoding,
+      normalizeEncodingSlow: () => normalizeEncodingSlow,
+      readDirNames: () => readDirNames,
+      readDirNamesSync: () => readDirNamesSync,
+      readFileBinary: () => readFileBinary,
+      readFileBinarySync: () => readFileBinarySync,
+      readFileUtf8: () => readFileUtf8,
+      readFileUtf8Sync: () => readFileUtf8Sync,
+      readJson: () => readJson,
+      readJsonSync: () => readJsonSync,
+      safeDelete: () => safeDelete,
+      safeDeleteSync: () => safeDeleteSync,
+      safeMkdir: () => safeMkdir,
+      safeMkdirSync: () => safeMkdirSync,
+      safeReadFile: () => safeReadFile,
+      safeReadFileSync: () => safeReadFileSync,
+      safeStats: () => safeStats,
+      safeStatsSync: () => safeStatsSync,
+      uniqueSync: () => uniqueSync,
+      validateFiles: () => validateFiles2,
+      writeJson: () => writeJson,
+      writeJsonSync: () => writeJsonSync
+    });
+    module2.exports = __toCommonJS2(fs_exports);
+    var import_node_process3 = __toESM2(require("node:process"));
+    var import_process2 = require_process();
+    var import_arrays = require_arrays();
+    var import_promises2 = require_promises();
+    var import_globs = require_globs();
+    var import_parse3 = require_parse();
+    var import_objects2 = require_objects();
+    var import_normalize3 = require_normalize();
+    var import_rewire = require_rewire2();
+    var import_socket3 = require_socket3();
+    var import_sorts = require_sorts();
+    var _del;
+    // @__NO_SIDE_EFFECTS__
+    function getDel() {
+      if (_del === void 0) {
+        _del = require_del();
+      }
+      return _del;
+    }
+    var abortSignal2 = (0, import_process2.getAbortSignal)();
+    var defaultRemoveOptions = (0, import_objects2.objectFreeze)({
+      __proto__: null,
+      force: true,
+      maxRetries: 3,
+      recursive: true,
+      retryDelay: 200
+    });
+    var _cachedAllowedDirs;
+    function getAllowedDirectories() {
+      if (_cachedAllowedDirs === void 0) {
+        const path4 = /* @__PURE__ */ getPath();
+        _cachedAllowedDirs = [
+          path4.resolve((0, import_socket3.getOsTmpDir)()),
+          path4.resolve((0, import_socket3.getSocketCacacheDir)()),
+          path4.resolve((0, import_socket3.getSocketUserDir)())
+        ];
+      }
+      return _cachedAllowedDirs;
+    }
+    var _buffer;
+    // @__NO_SIDE_EFFECTS__
+    function getBuffer() {
+      if (_buffer === void 0) {
+        _buffer = require("node:buffer");
+      }
+      return _buffer;
+    }
+    var _fs;
+    // @__NO_SIDE_EFFECTS__
+    function getFs() {
+      if (_fs === void 0) {
+        _fs = require("node:fs");
+      }
+      return _fs;
+    }
+    var _path;
+    // @__NO_SIDE_EFFECTS__
+    function getPath() {
+      if (_path === void 0) {
+        _path = require("node:path");
+      }
+      return _path;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function innerReadDirNames(dirents, dirname, options) {
+      const {
+        ignore,
+        includeEmpty = true,
+        sort = true
+      } = { __proto__: null, ...options };
+      const path4 = /* @__PURE__ */ getPath();
+      const names = dirents.filter(
+        (d) => d.isDirectory() && (includeEmpty || !/* @__PURE__ */ isDirEmptySync(path4.join(dirname || d.parentPath, d.name), {
+          ignore
+        }))
+      ).map((d) => d.name);
+      return sort ? names.sort(import_sorts.naturalCompare) : names;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function stringify(json, EOL, finalEOL, replacer, spaces = 2) {
+      const EOF = finalEOL ? EOL : "";
+      const str = JSON.stringify(json, replacer, spaces);
+      return `${str.replace(/\n/g, EOL)}${EOF}`;
+    }
+    // @__NO_SIDE_EFFECTS__
+    async function findUp(name, options) {
+      const { cwd = import_node_process3.default.cwd(), signal = abortSignal2 } = {
+        __proto__: null,
+        ...options
+      };
+      let { onlyDirectories = false, onlyFiles = true } = {
+        __proto__: null,
+        ...options
+      };
+      if (onlyDirectories) {
+        onlyFiles = false;
+      }
+      if (onlyFiles) {
+        onlyDirectories = false;
+      }
+      const fs = /* @__PURE__ */ getFs();
+      const path4 = /* @__PURE__ */ getPath();
+      let dir = path4.resolve(cwd);
+      const { root } = path4.parse(dir);
+      const names = (0, import_arrays.isArray)(name) ? name : [name];
+      while (dir && dir !== root) {
+        for (const n of names) {
+          if (signal?.aborted) {
+            return void 0;
+          }
+          const thePath = path4.join(dir, n);
+          try {
+            const stats = await fs.promises.stat(thePath);
+            if (!onlyDirectories && stats.isFile()) {
+              return (0, import_normalize3.normalizePath)(thePath);
+            }
+            if (!onlyFiles && stats.isDirectory()) {
+              return (0, import_normalize3.normalizePath)(thePath);
+            }
+          } catch {
+          }
+        }
+        dir = path4.dirname(dir);
+      }
+      return void 0;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function findUpSync(name, options) {
+      const { cwd = import_node_process3.default.cwd(), stopAt } = {
+        __proto__: null,
+        ...options
+      };
+      let { onlyDirectories = false, onlyFiles = true } = {
+        __proto__: null,
+        ...options
+      };
+      if (onlyDirectories) {
+        onlyFiles = false;
+      }
+      if (onlyFiles) {
+        onlyDirectories = false;
+      }
+      const fs = /* @__PURE__ */ getFs();
+      const path4 = /* @__PURE__ */ getPath();
+      let dir = path4.resolve(cwd);
+      const { root } = path4.parse(dir);
+      const stopDir = stopAt ? path4.resolve(stopAt) : void 0;
+      const names = (0, import_arrays.isArray)(name) ? name : [name];
+      while (dir && dir !== root) {
+        if (stopDir && dir === stopDir) {
+          for (const n of names) {
+            const thePath = path4.join(dir, n);
+            try {
+              const stats = fs.statSync(thePath);
+              if (!onlyDirectories && stats.isFile()) {
+                return (0, import_normalize3.normalizePath)(thePath);
+              }
+              if (!onlyFiles && stats.isDirectory()) {
+                return (0, import_normalize3.normalizePath)(thePath);
+              }
+            } catch {
+            }
+          }
+          return void 0;
+        }
+        for (const n of names) {
+          const thePath = path4.join(dir, n);
+          try {
+            const stats = fs.statSync(thePath);
+            if (!onlyDirectories && stats.isFile()) {
+              return (0, import_normalize3.normalizePath)(thePath);
+            }
+            if (!onlyFiles && stats.isDirectory()) {
+              return (0, import_normalize3.normalizePath)(thePath);
+            }
+          } catch {
+          }
+        }
+        dir = path4.dirname(dir);
+      }
+      return void 0;
+    }
+    function invalidatePathCache() {
+      _cachedAllowedDirs = void 0;
+    }
+    (0, import_rewire.registerCacheInvalidation)(invalidatePathCache);
+    // @__NO_SIDE_EFFECTS__
+    async function isDir(filepath) {
+      return !!(await /* @__PURE__ */ safeStats(filepath))?.isDirectory();
+    }
+    // @__NO_SIDE_EFFECTS__
+    function isDirSync(filepath) {
+      return !!(/* @__PURE__ */ safeStatsSync(filepath))?.isDirectory();
+    }
+    // @__NO_SIDE_EFFECTS__
+    function isDirEmptySync(dirname, options) {
+      const { ignore = import_globs.defaultIgnore } = {
+        __proto__: null,
+        ...options
+      };
+      const fs = /* @__PURE__ */ getFs();
+      try {
+        const files = fs.readdirSync(dirname);
+        const { length } = files;
+        if (length === 0) {
+          return true;
+        }
+        const matcher = (0, import_globs.getGlobMatcher)(
+          ignore,
+          {
+            cwd: (0, import_normalize3.pathLikeToString)(dirname)
+          }
+        );
+        let ignoredCount = 0;
+        for (let i = 0; i < length; i += 1) {
+          const file = files[i];
+          if (file && matcher(file)) {
+            ignoredCount += 1;
+          }
+        }
+        return ignoredCount === length;
+      } catch {
+        return false;
+      }
+    }
+    // @__NO_SIDE_EFFECTS__
+    function isSymLinkSync(filepath) {
+      const fs = /* @__PURE__ */ getFs();
+      try {
+        return fs.lstatSync(filepath).isSymbolicLink();
+      } catch {
+      }
+      return false;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function normalizeEncoding(enc) {
+      return enc == null || enc === "utf8" || enc === "utf-8" ? "utf8" : /* @__PURE__ */ normalizeEncodingSlow(enc);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function normalizeEncodingSlow(enc) {
+      const { length } = enc;
+      if (length === 4) {
+        if (enc === "ucs2" || enc === "UCS2") {
+          return "utf16le";
+        }
+        if (enc.toLowerCase() === "ucs2") {
+          return "utf16le";
+        }
+      } else if (length === 3 && enc === "hex" || enc === "HEX" || enc.toLowerCase() === "hex") {
+        return "hex";
+      } else if (length === 5) {
+        if (enc === "ascii") {
+          return "ascii";
+        }
+        if (enc === "ucs-2") {
+          return "utf16le";
+        }
+        if (enc === "ASCII") {
+          return "ascii";
+        }
+        if (enc === "UCS-2") {
+          return "utf16le";
+        }
+        enc = enc.toLowerCase();
+        if (enc === "ascii") {
+          return "ascii";
+        }
+        if (enc === "ucs-2") {
+          return "utf16le";
+        }
+      } else if (length === 6) {
+        if (enc === "base64") {
+          return "base64";
+        }
+        if (enc === "latin1" || enc === "binary") {
+          return "latin1";
+        }
+        if (enc === "BASE64") {
+          return "base64";
+        }
+        if (enc === "LATIN1" || enc === "BINARY") {
+          return "latin1";
+        }
+        enc = enc.toLowerCase();
+        if (enc === "base64") {
+          return "base64";
+        }
+        if (enc === "latin1" || enc === "binary") {
+          return "latin1";
+        }
+      } else if (length === 7) {
+        if (enc === "utf16le" || enc === "UTF16LE" || enc.toLowerCase() === "utf16le") {
+          return "utf16le";
+        }
+      } else if (length === 8) {
+        if (enc === "utf-16le" || enc === "UTF-16LE" || enc.toLowerCase() === "utf-16le") {
+          return "utf16le";
+        }
+      } else if (length === 9) {
+        if (enc === "base64url" || enc === "BASE64URL" || enc.toLowerCase() === "base64url") {
+          return "base64url";
+        }
+      }
+      return "utf8";
+    }
+    // @__NO_SIDE_EFFECTS__
+    async function readDirNames(dirname, options) {
+      const fs = /* @__PURE__ */ getFs();
+      try {
+        return /* @__PURE__ */ innerReadDirNames(
+          await fs.promises.readdir(dirname, {
+            __proto__: null,
+            encoding: "utf8",
+            withFileTypes: true
+          }),
+          String(dirname),
+          options
+        );
+      } catch {
+      }
+      return [];
+    }
+    // @__NO_SIDE_EFFECTS__
+    function readDirNamesSync(dirname, options) {
+      const fs = /* @__PURE__ */ getFs();
+      try {
+        return /* @__PURE__ */ innerReadDirNames(
+          fs.readdirSync(dirname, {
+            __proto__: null,
+            encoding: "utf8",
+            withFileTypes: true
+          }),
+          String(dirname),
+          options
+        );
+      } catch {
+      }
+      return [];
+    }
+    // @__NO_SIDE_EFFECTS__
+    async function readFileBinary(filepath, options) {
+      const opts = typeof options === "string" ? { encoding: options } : options;
+      const fs = /* @__PURE__ */ getFs();
+      return await fs.promises.readFile(filepath, {
+        signal: abortSignal2,
+        ...opts,
+        encoding: null
+      });
+    }
+    // @__NO_SIDE_EFFECTS__
+    async function readFileUtf8(filepath, options) {
+      const opts = typeof options === "string" ? { encoding: options } : options;
+      const fs = /* @__PURE__ */ getFs();
+      return await fs.promises.readFile(filepath, {
+        signal: abortSignal2,
+        ...opts,
+        encoding: "utf8"
+      });
+    }
+    // @__NO_SIDE_EFFECTS__
+    function readFileBinarySync(filepath, options) {
+      const opts = typeof options === "string" ? { encoding: options } : options;
+      const fs = /* @__PURE__ */ getFs();
+      return fs.readFileSync(filepath, {
+        ...opts,
+        encoding: null
+      });
+    }
+    // @__NO_SIDE_EFFECTS__
+    function readFileUtf8Sync(filepath, options) {
+      const opts = typeof options === "string" ? { encoding: options } : options;
+      const fs = /* @__PURE__ */ getFs();
+      return fs.readFileSync(filepath, {
+        ...opts,
+        encoding: "utf8"
+      });
+    }
+    // @__NO_SIDE_EFFECTS__
+    async function readJson(filepath, options) {
+      const opts = typeof options === "string" ? { encoding: options } : options;
+      const { reviver, throws, ...fsOptions } = {
+        __proto__: null,
+        ...opts
+      };
+      const shouldThrow = throws === void 0 || !!throws;
+      const fs = /* @__PURE__ */ getFs();
+      let content = "";
+      try {
+        content = await fs.promises.readFile(filepath, {
+          __proto__: null,
+          ...fsOptions,
+          encoding: "utf8"
+        });
+      } catch (e) {
+        if (shouldThrow) {
+          const code = e.code;
+          if (code === "ENOENT") {
+            throw new Error(
+              `JSON file not found: ${filepath}
+Ensure the file exists or create it with the expected structure.`,
+              { cause: e }
+            );
+          }
+          if (code === "EACCES" || code === "EPERM") {
+            throw new Error(
+              `Permission denied reading JSON file: ${filepath}
+Check file permissions or run with appropriate access.`,
+              { cause: e }
+            );
+          }
+          throw e;
+        }
+        return void 0;
+      }
+      return (0, import_parse3.jsonParse)(content, {
+        filepath: String(filepath),
+        reviver,
+        throws: shouldThrow
+      });
+    }
+    // @__NO_SIDE_EFFECTS__
+    function readJsonSync(filepath, options) {
+      const opts = typeof options === "string" ? { encoding: options } : options;
+      const { reviver, throws, ...fsOptions } = {
+        __proto__: null,
+        ...opts
+      };
+      const shouldThrow = throws === void 0 || !!throws;
+      const fs = /* @__PURE__ */ getFs();
+      let content = "";
+      try {
+        content = fs.readFileSync(filepath, {
+          __proto__: null,
+          ...fsOptions,
+          encoding: "utf8"
+        });
+      } catch (e) {
+        if (shouldThrow) {
+          const code = e.code;
+          if (code === "ENOENT") {
+            throw new Error(
+              `JSON file not found: ${filepath}
+Ensure the file exists or create it with the expected structure.`,
+              { cause: e }
+            );
+          }
+          if (code === "EACCES" || code === "EPERM") {
+            throw new Error(
+              `Permission denied reading JSON file: ${filepath}
+Check file permissions or run with appropriate access.`,
+              { cause: e }
+            );
+          }
+          throw e;
+        }
+        return void 0;
+      }
+      return (0, import_parse3.jsonParse)(content, {
+        filepath: String(filepath),
+        reviver,
+        throws: shouldThrow
+      });
+    }
+    async function safeDelete(filepath, options) {
+      const opts = { __proto__: null, ...options };
+      const patterns = (0, import_arrays.isArray)(filepath) ? filepath.map(import_normalize3.pathLikeToString) : [(0, import_normalize3.pathLikeToString)(filepath)];
+      let shouldForce = opts.force !== false;
+      if (!shouldForce && patterns.length > 0) {
+        const path4 = /* @__PURE__ */ getPath();
+        const allowedDirs = getAllowedDirectories();
+        const allInAllowedDirs = patterns.every((pattern) => {
+          const resolvedPath = path4.resolve(pattern);
+          for (const allowedDir of allowedDirs) {
+            const isInAllowedDir = resolvedPath.startsWith(allowedDir + path4.sep) || resolvedPath === allowedDir;
+            const relativePath = path4.relative(allowedDir, resolvedPath);
+            const isGoingBackward = relativePath.startsWith("..");
+            if (isInAllowedDir && !isGoingBackward) {
+              return true;
+            }
+          }
+          return false;
+        });
+        if (allInAllowedDirs) {
+          shouldForce = true;
+        }
+      }
+      const maxRetries = opts.maxRetries ?? defaultRemoveOptions.maxRetries;
+      const retryDelay = opts.retryDelay ?? defaultRemoveOptions.retryDelay;
+      const del = /* @__PURE__ */ getDel();
+      await (0, import_promises2.pRetry)(
+        async () => {
+          await del.deleteAsync(patterns, {
+            dryRun: false,
+            force: shouldForce,
+            onlyFiles: false
+          });
+        },
+        {
+          retries: maxRetries,
+          baseDelayMs: retryDelay,
+          backoffFactor: 2,
+          signal: opts.signal
+        }
+      );
+    }
+    function safeDeleteSync(filepath, options) {
+      const opts = { __proto__: null, ...options };
+      const patterns = (0, import_arrays.isArray)(filepath) ? filepath.map(import_normalize3.pathLikeToString) : [(0, import_normalize3.pathLikeToString)(filepath)];
+      let shouldForce = opts.force !== false;
+      if (!shouldForce && patterns.length > 0) {
+        const path4 = /* @__PURE__ */ getPath();
+        const allowedDirs = getAllowedDirectories();
+        const allInAllowedDirs = patterns.every((pattern) => {
+          const resolvedPath = path4.resolve(pattern);
+          for (const allowedDir of allowedDirs) {
+            const isInAllowedDir = resolvedPath.startsWith(allowedDir + path4.sep) || resolvedPath === allowedDir;
+            const relativePath = path4.relative(allowedDir, resolvedPath);
+            const isGoingBackward = relativePath.startsWith("..");
+            if (isInAllowedDir && !isGoingBackward) {
+              return true;
+            }
+          }
+          return false;
+        });
+        if (allInAllowedDirs) {
+          shouldForce = true;
+        }
+      }
+      const maxRetries = opts.maxRetries ?? defaultRemoveOptions.maxRetries;
+      const retryDelay = opts.retryDelay ?? defaultRemoveOptions.retryDelay;
+      const del = /* @__PURE__ */ getDel();
+      let lastError;
+      let delay = retryDelay;
+      for (let attempt = 0; attempt <= maxRetries; attempt++) {
+        try {
+          del.deleteSync(patterns, {
+            dryRun: false,
+            force: shouldForce,
+            onlyFiles: false
+          });
+          return;
+        } catch (error) {
+          lastError = error;
+          if (attempt < maxRetries) {
+            const waitMs = delay;
+            Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, waitMs);
+            delay *= 2;
+          }
+        }
+      }
+      if (lastError) {
+        throw lastError;
+      }
+    }
+    async function safeMkdir(path4, options) {
+      const fs = /* @__PURE__ */ getFs();
+      const opts = { __proto__: null, recursive: true, ...options };
+      try {
+        await fs.promises.mkdir(path4, opts);
+      } catch (e) {
+        if (typeof e === "object" && e !== null && "code" in e && e.code !== "EEXIST") {
+          throw e;
+        }
+      }
+    }
+    function safeMkdirSync(path4, options) {
+      const fs = /* @__PURE__ */ getFs();
+      const opts = { __proto__: null, recursive: true, ...options };
+      try {
+        fs.mkdirSync(path4, opts);
+      } catch (e) {
+        if (typeof e === "object" && e !== null && "code" in e && e.code !== "EEXIST") {
+          throw e;
+        }
+      }
+    }
+    // @__NO_SIDE_EFFECTS__
+    async function safeReadFile(filepath, options) {
+      const opts = typeof options === "string" ? { __proto__: null, encoding: options } : { __proto__: null, ...options };
+      const { defaultValue, ...rawReadOpts } = opts;
+      const readOpts = { __proto__: null, ...rawReadOpts };
+      const shouldReturnBuffer = readOpts.encoding === null;
+      const encoding = shouldReturnBuffer ? null : /* @__PURE__ */ normalizeEncoding(readOpts.encoding);
+      const fs = /* @__PURE__ */ getFs();
+      try {
+        return await fs.promises.readFile(filepath, {
+          __proto__: null,
+          signal: abortSignal2,
+          ...readOpts,
+          encoding
+        });
+      } catch {
+      }
+      if (defaultValue === void 0) {
+        return void 0;
+      }
+      if (shouldReturnBuffer) {
+        const { Buffer: Buffer2 } = /* @__PURE__ */ getBuffer();
+        return Buffer2.isBuffer(defaultValue) ? defaultValue : void 0;
+      }
+      return typeof defaultValue === "string" ? defaultValue : String(defaultValue);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function safeReadFileSync(filepath, options) {
+      const opts = typeof options === "string" ? { __proto__: null, encoding: options } : { __proto__: null, ...options };
+      const { defaultValue, ...rawReadOpts } = opts;
+      const readOpts = { __proto__: null, ...rawReadOpts };
+      const shouldReturnBuffer = readOpts.encoding === null;
+      const encoding = shouldReturnBuffer ? null : /* @__PURE__ */ normalizeEncoding(readOpts.encoding);
+      const fs = /* @__PURE__ */ getFs();
+      try {
+        return fs.readFileSync(filepath, {
+          __proto__: null,
+          ...readOpts,
+          encoding
+        });
+      } catch {
+      }
+      if (defaultValue === void 0) {
+        return void 0;
+      }
+      if (shouldReturnBuffer) {
+        const { Buffer: Buffer2 } = /* @__PURE__ */ getBuffer();
+        return Buffer2.isBuffer(defaultValue) ? defaultValue : void 0;
+      }
+      return typeof defaultValue === "string" ? defaultValue : String(defaultValue);
+    }
+    // @__NO_SIDE_EFFECTS__
+    async function safeStats(filepath) {
+      const fs = /* @__PURE__ */ getFs();
+      try {
+        return await fs.promises.stat(filepath);
+      } catch {
+      }
+      return void 0;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function safeStatsSync(filepath, options) {
+      const opts = typeof options === "string" ? { encoding: options } : options;
+      const fs = /* @__PURE__ */ getFs();
+      try {
+        return fs.statSync(filepath, {
+          __proto__: null,
+          throwIfNoEntry: false,
+          ...opts
+        });
+      } catch {
+      }
+      return void 0;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function uniqueSync(filepath) {
+      const fs = /* @__PURE__ */ getFs();
+      const path4 = /* @__PURE__ */ getPath();
+      const filepathStr = String(filepath);
+      if (!fs.existsSync(filepathStr)) {
+        return (0, import_normalize3.normalizePath)(filepathStr);
+      }
+      const dirname = path4.dirname(filepathStr);
+      const ext = path4.extname(filepathStr);
+      const basename = path4.basename(filepathStr, ext);
+      let counter = 1;
+      let uniquePath;
+      do {
+        uniquePath = path4.join(dirname, `${basename}-${counter}${ext}`);
+        counter++;
+      } while (fs.existsSync(uniquePath));
+      return (0, import_normalize3.normalizePath)(uniquePath);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function validateFiles2(filepaths) {
+      const fs = /* @__PURE__ */ getFs();
+      const validPaths = [];
+      const invalidPaths = [];
+      const { R_OK } = fs.constants;
+      for (const filepath of filepaths) {
+        try {
+          fs.accessSync(filepath, R_OK);
+          validPaths.push(filepath);
+        } catch {
+          invalidPaths.push(filepath);
+        }
+      }
+      return { __proto__: null, validPaths, invalidPaths };
+    }
+    async function writeJson(filepath, jsonContent, options) {
+      const opts = typeof options === "string" ? { encoding: options } : options;
+      const { EOL, finalEOL, replacer, spaces, ...fsOptions } = {
+        __proto__: null,
+        ...opts
+      };
+      const fs = /* @__PURE__ */ getFs();
+      const jsonString = /* @__PURE__ */ stringify(
+        jsonContent,
+        EOL || "\n",
+        finalEOL !== void 0 ? finalEOL : true,
+        replacer,
+        spaces
+      );
+      await fs.promises.writeFile(filepath, jsonString, {
+        encoding: "utf8",
+        ...fsOptions,
+        __proto__: null
+      });
+    }
+    function writeJsonSync(filepath, jsonContent, options) {
+      const opts = typeof options === "string" ? { encoding: options } : options;
+      const { EOL, finalEOL, replacer, spaces, ...fsOptions } = {
+        __proto__: null,
+        ...opts
+      };
+      const fs = /* @__PURE__ */ getFs();
+      const jsonString = /* @__PURE__ */ stringify(
+        jsonContent,
+        EOL || "\n",
+        finalEOL !== void 0 ? finalEOL : true,
+        replacer,
+        spaces
+      );
+      fs.writeFileSync(filepath, jsonString, {
+        encoding: "utf8",
+        ...fsOptions,
+        __proto__: null
+      });
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/http-request.js
+var require_http_request = __commonJS({
+  "@socketsecurity/lib/dist/http-request.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var http_request_exports = {};
+    __export2(http_request_exports, {
+      HttpResponseError: () => HttpResponseError,
+      enrichErrorMessage: () => enrichErrorMessage,
+      fetchChecksums: () => fetchChecksums,
+      httpDownload: () => httpDownload,
+      httpJson: () => httpJson,
+      httpRequest: () => httpRequest4,
+      httpText: () => httpText,
+      parseChecksums: () => parseChecksums,
+      parseRetryAfterHeader: () => parseRetryAfterHeader,
+      readIncomingResponse: () => readIncomingResponse,
+      sanitizeHeaders: () => sanitizeHeaders2
+    });
+    module2.exports = __toCommonJS2(http_request_exports);
+    var import_socket3 = require_socket2();
+    var import_fs2 = require_fs();
+    var _fs;
+    // @__NO_SIDE_EFFECTS__
+    function getFs() {
+      if (_fs === void 0) {
+        _fs = require("node:fs");
+      }
+      return _fs;
+    }
+    var _crypto;
+    var _http;
+    var _https;
+    // @__NO_SIDE_EFFECTS__
+    function getCrypto() {
+      if (_crypto === void 0) {
+        _crypto = require("node:crypto");
+      }
+      return _crypto;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getHttp() {
+      if (_http === void 0) {
+        _http = require("node:http");
+      }
+      return _http;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function getHttps() {
+      if (_https === void 0) {
+        _https = require("node:https");
+      }
+      return _https;
+    }
+    async function readIncomingResponse(msg) {
+      const chunks = [];
+      for await (const chunk of msg) {
+        chunks.push(chunk);
+      }
+      const body = Buffer.concat(chunks);
+      const status = msg.statusCode ?? 0;
+      const statusText = msg.statusMessage ?? "";
+      return {
+        arrayBuffer: () => body.buffer.slice(
+          body.byteOffset,
+          body.byteOffset + body.byteLength
+        ),
+        body,
+        headers: msg.headers,
+        json: () => JSON.parse(body.toString("utf8")),
+        ok: status >= 200 && status < 300,
+        rawResponse: msg,
+        status,
+        statusText,
+        text: () => body.toString("utf8")
+      };
+    }
+    var HttpResponseError = class _HttpResponseError extends Error {
+      response;
+      constructor(response, message) {
+        const statusCode = response.status ?? "unknown";
+        const statusMessage = response.statusText || "No status message";
+        super(message ?? `HTTP ${statusCode}: ${statusMessage}`);
+        this.name = "HttpResponseError";
+        this.response = response;
+        Error.captureStackTrace(this, _HttpResponseError);
+      }
+    };
+    function parseRetryAfterHeader(value) {
+      if (!value) {
+        return void 0;
+      }
+      const raw = Array.isArray(value) ? value[0] : value;
+      if (!raw) {
+        return void 0;
+      }
+      const trimmed = raw.trim();
+      if (/^\d+$/.test(trimmed)) {
+        const seconds = Number(trimmed);
+        return seconds * 1e3;
+      }
+      const date = new Date(raw);
+      if (!Number.isNaN(date.getTime())) {
+        const delayMs = date.getTime() - Date.now();
+        if (delayMs > 0) {
+          return delayMs;
+        }
+      }
+      return void 0;
+    }
+    function sanitizeHeaders2(headers) {
+      if (!headers) {
+        return {};
+      }
+      const sensitiveHeaders = /* @__PURE__ */ new Set([
+        "authorization",
+        "cookie",
+        "proxy-authorization",
+        "proxy-authenticate",
+        "set-cookie",
+        "www-authenticate"
+      ]);
+      const result = { __proto__: null };
+      for (const key of Object.keys(headers)) {
+        const value = headers[key];
+        if (sensitiveHeaders.has(key.toLowerCase())) {
+          result[key] = "[REDACTED]";
+        } else if (Array.isArray(value)) {
+          result[key] = value.join(", ");
+        } else if (value !== void 0 && value !== null) {
+          result[key] = String(value);
+        }
+      }
+      return result;
+    }
+    function parseChecksums(text) {
+      const checksums = { __proto__: null };
+      for (const line of text.split("\n")) {
+        const trimmed = line.trim();
+        if (!trimmed || trimmed.startsWith("#")) {
+          continue;
+        }
+        const bsdMatch = trimmed.match(
+          /^SHA256\s+\((.+)\)\s+=\s+([a-fA-F0-9]{64})$/
+        );
+        if (bsdMatch) {
+          checksums[bsdMatch[1]] = bsdMatch[2].toLowerCase();
+          continue;
+        }
+        const gnuMatch = trimmed.match(/^([a-fA-F0-9]{64})\s+(.+)$/);
+        if (gnuMatch) {
+          checksums[gnuMatch[2]] = gnuMatch[1].toLowerCase();
+        }
+      }
+      return checksums;
+    }
+    async function fetchChecksums(url, options) {
+      const {
+        ca,
+        headers = {},
+        timeout = 3e4
+      } = {
+        __proto__: null,
+        ...options
+      };
+      const response = await httpRequest4(url, { ca, headers, timeout });
+      if (!response.ok) {
+        throw new Error(
+          `Failed to fetch checksums from ${url}: ${response.status} ${response.statusText}`
+        );
+      }
+      return parseChecksums(response.body.toString("utf8"));
+    }
+    async function httpDownloadAttempt(url, destPath, options) {
+      const {
+        ca,
+        followRedirects = true,
+        headers = {},
+        maxRedirects = 5,
+        onProgress,
+        timeout = 12e4
+      } = { __proto__: null, ...options };
+      const response = await httpRequestAttempt(url, {
+        ca,
+        followRedirects,
+        headers,
+        maxRedirects,
+        method: "GET",
+        stream: true,
+        timeout
+      });
+      if (!response.ok) {
+        throw new Error(
+          `Download failed: HTTP ${response.status} ${response.statusText}`
+        );
+      }
+      const res = response.rawResponse;
+      if (!res) {
+        throw new Error("Stream response missing rawResponse");
+      }
+      const { createWriteStream } = /* @__PURE__ */ getFs();
+      const totalSize = Number.parseInt(
+        response.headers["content-length"] || "0",
+        10
+      );
+      return await new Promise((resolve, reject) => {
+        let downloadedSize = 0;
+        const fileStream = createWriteStream(destPath);
+        fileStream.on("error", (error) => {
+          fileStream.close();
+          reject(
+            new Error(`Failed to write file: ${error.message}`, { cause: error })
+          );
+        });
+        res.on("data", (chunk) => {
+          downloadedSize += chunk.length;
+          if (onProgress && totalSize > 0) {
+            onProgress(downloadedSize, totalSize);
+          }
+        });
+        res.on("end", () => {
+          fileStream.close(() => {
+            resolve({
+              headers: response.headers,
+              ok: true,
+              path: destPath,
+              size: downloadedSize,
+              status: response.status,
+              statusText: response.statusText
+            });
+          });
+        });
+        res.on("error", (error) => {
+          fileStream.close();
+          reject(error);
+        });
+        res.pipe(fileStream);
+      });
+    }
+    function enrichErrorMessage(url, method, error) {
+      const code = error.code;
+      let message = `${method} request failed: ${url}`;
+      if (code === "ECONNREFUSED") {
+        message += "\n\u2192 Connection refused. Server is unreachable.\n\u2192 Check: Network connectivity and firewall settings.";
+      } else if (code === "ENOTFOUND") {
+        message += "\n\u2192 DNS lookup failed. Cannot resolve hostname.\n\u2192 Check: Internet connection and DNS settings.";
+      } else if (code === "ETIMEDOUT") {
+        message += "\n\u2192 Connection timed out. Network or server issue.\n\u2192 Try: Check network connectivity and retry.";
+      } else if (code === "ECONNRESET") {
+        message += "\n\u2192 Connection reset by server. Possible network interruption.\n\u2192 Try: Retry the request.";
+      } else if (code === "EPIPE") {
+        message += "\n\u2192 Broken pipe. Server closed connection unexpectedly.\n\u2192 Check: Authentication credentials and permissions.";
+      } else if (code === "CERT_HAS_EXPIRED" || code === "UNABLE_TO_VERIFY_LEAF_SIGNATURE") {
+        message += "\n\u2192 SSL/TLS certificate error.\n\u2192 Check: System time and date are correct.\n\u2192 Try: Update CA certificates on your system.";
+      } else if (code) {
+        message += `
+\u2192 Error code: ${code}`;
+      }
+      return message;
+    }
+    async function httpRequestAttempt(url, options) {
+      const {
+        body,
+        ca,
+        followRedirects = true,
+        headers = {},
+        hooks,
+        maxRedirects = 5,
+        maxResponseSize,
+        method = "GET",
+        stream = false,
+        timeout = 3e4
+      } = { __proto__: null, ...options };
+      const startTime = Date.now();
+      const streamHeaders = body && typeof body === "object" && "getHeaders" in body && typeof body.getHeaders === "function" ? body.getHeaders() : void 0;
+      const mergedHeaders = {
+        "User-Agent": import_socket3.SOCKET_LIB_USER_AGENT,
+        ...streamHeaders,
+        ...headers
+      };
+      hooks?.onRequest?.({ method, url, headers: mergedHeaders, timeout });
+      return await new Promise((resolve, reject) => {
+        let settled = false;
+        const resolveOnce = (response) => {
+          if (settled) {
+            return;
+          }
+          settled = true;
+          resolve(response);
+        };
+        const rejectOnce = (err) => {
+          if (settled) {
+            return;
+          }
+          settled = true;
+          if (body && typeof body === "object" && typeof body.destroy === "function") {
+            ;
+            body.destroy();
+          }
+          emitResponse({ error: err });
+          reject(err);
+        };
+        const parsedUrl = new URL(url);
+        const isHttps = parsedUrl.protocol === "https:";
+        const httpModule = isHttps ? /* @__PURE__ */ getHttps() : /* @__PURE__ */ getHttp();
+        const requestOptions = {
+          headers: mergedHeaders,
+          hostname: parsedUrl.hostname,
+          method,
+          path: parsedUrl.pathname + parsedUrl.search,
+          port: parsedUrl.port,
+          timeout
+        };
+        if (ca && isHttps) {
+          requestOptions["ca"] = ca;
+        }
+        const emitResponse = (info) => {
+          try {
+            hooks?.onResponse?.({
+              duration: Date.now() - startTime,
+              method,
+              url,
+              ...info
+            });
+          } catch {
+          }
+        };
+        const request = httpModule.request(
+          requestOptions,
+          (res) => {
+            if (followRedirects && res.statusCode && res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
+              res.resume();
+              emitResponse({
+                headers: res.headers,
+                status: res.statusCode,
+                statusText: res.statusMessage
+              });
+              if (maxRedirects <= 0) {
+                settled = true;
+                reject(
+                  new Error(
+                    `Too many redirects (exceeded maximum: ${maxRedirects})`
+                  )
+                );
+                return;
+              }
+              const redirectUrl = res.headers.location.startsWith("http") ? res.headers.location : new URL(res.headers.location, url).toString();
+              const redirectParsed = new URL(redirectUrl);
+              if (isHttps && redirectParsed.protocol !== "https:") {
+                settled = true;
+                reject(
+                  new Error(
+                    `Redirect from HTTPS to HTTP is not allowed: ${redirectUrl}`
+                  )
+                );
+                return;
+              }
+              settled = true;
+              resolve(
+                httpRequestAttempt(redirectUrl, {
+                  body,
+                  ca,
+                  followRedirects,
+                  headers,
+                  hooks,
+                  maxRedirects: maxRedirects - 1,
+                  maxResponseSize,
+                  method,
+                  stream,
+                  timeout
+                })
+              );
+              return;
+            }
+            if (stream) {
+              const status = res.statusCode || 0;
+              const statusText = res.statusMessage || "";
+              const ok = status >= 200 && status < 300;
+              emitResponse({
+                headers: res.headers,
+                status,
+                statusText
+              });
+              const emptyBody = Buffer.alloc(0);
+              resolveOnce({
+                arrayBuffer: () => emptyBody.buffer,
+                body: emptyBody,
+                headers: res.headers,
+                json: () => {
+                  throw new Error("Cannot parse JSON from a streaming response");
+                },
+                ok,
+                rawResponse: res,
+                status,
+                statusText,
+                text: () => ""
+              });
+              return;
+            }
+            const chunks = [];
+            let totalBytes = 0;
+            res.on("data", (chunk) => {
+              totalBytes += chunk.length;
+              if (maxResponseSize && totalBytes > maxResponseSize) {
+                res.destroy();
+                request.destroy();
+                const sizeMB = (totalBytes / (1024 * 1024)).toFixed(2);
+                const maxMB = (maxResponseSize / (1024 * 1024)).toFixed(2);
+                rejectOnce(
+                  new Error(
+                    `Response exceeds maximum size limit (${sizeMB}MB > ${maxMB}MB)`
+                  )
+                );
+                return;
+              }
+              chunks.push(chunk);
+            });
+            res.on("end", () => {
+              if (settled) {
+                return;
+              }
+              const responseBody = Buffer.concat(chunks);
+              const ok = res.statusCode !== void 0 && res.statusCode >= 200 && res.statusCode < 300;
+              const response = {
+                arrayBuffer() {
+                  return responseBody.buffer.slice(
+                    responseBody.byteOffset,
+                    responseBody.byteOffset + responseBody.byteLength
+                  );
+                },
+                body: responseBody,
+                headers: res.headers,
+                json() {
+                  return JSON.parse(responseBody.toString("utf8"));
+                },
+                ok,
+                rawResponse: res,
+                status: res.statusCode || 0,
+                statusText: res.statusMessage || "",
+                text() {
+                  return responseBody.toString("utf8");
+                }
+              };
+              emitResponse({
+                headers: res.headers,
+                status: res.statusCode,
+                statusText: res.statusMessage
+              });
+              resolveOnce(response);
+            });
+            res.on("error", (error) => {
+              rejectOnce(error);
+            });
+          }
+        );
+        request.on("error", (error) => {
+          const message = enrichErrorMessage(
+            url,
+            method,
+            error
+          );
+          rejectOnce(new Error(message, { cause: error }));
+        });
+        request.on("timeout", () => {
+          request.destroy();
+          rejectOnce(
+            new Error(
+              `${method} request timed out after ${timeout}ms: ${url}
+\u2192 Server did not respond in time.
+\u2192 Try: Increase timeout or check network connectivity.`
+            )
+          );
+        });
+        if (body) {
+          if (typeof body === "object" && typeof body.pipe === "function") {
+            const stream2 = body;
+            stream2.on("error", (err) => {
+              request.destroy();
+              rejectOnce(err);
+            });
+            stream2.pipe(request);
+            return;
+          }
+          request.write(body);
+          request.end();
+        } else {
+          request.end();
+        }
+      });
+    }
+    async function httpDownload(url, destPath, options) {
+      const {
+        ca,
+        followRedirects = true,
+        headers = {},
+        logger,
+        maxRedirects = 5,
+        onProgress,
+        progressInterval = 10,
+        retries = 0,
+        retryDelay = 1e3,
+        sha256,
+        timeout = 12e4
+      } = { __proto__: null, ...options };
+      let progressCallback;
+      if (onProgress) {
+        progressCallback = onProgress;
+      } else if (logger) {
+        let lastPercent = 0;
+        progressCallback = (downloaded, total) => {
+          const percent = total === 0 ? 0 : Math.floor(downloaded / total * 100);
+          if (percent >= lastPercent + progressInterval) {
+            logger.log(
+              `  Progress: ${percent}% (${(downloaded / 1024 / 1024).toFixed(1)} MB / ${(total / 1024 / 1024).toFixed(1)} MB)`
+            );
+            lastPercent = percent;
+          }
+        };
+      }
+      const crypto = /* @__PURE__ */ getCrypto();
+      const fs = /* @__PURE__ */ getFs();
+      const tempSuffix = crypto.randomBytes(6).toString("hex");
+      const tempPath = `${destPath}.${tempSuffix}.download`;
+      if (fs.existsSync(tempPath)) {
+        await (0, import_fs2.safeDelete)(tempPath);
+      }
+      let lastError;
+      for (let attempt = 0; attempt <= retries; attempt++) {
+        try {
+          const result = await httpDownloadAttempt(url, tempPath, {
+            ca,
+            followRedirects,
+            headers,
+            maxRedirects,
+            onProgress: progressCallback,
+            timeout
+          });
+          if (sha256) {
+            const fileContent = await fs.promises.readFile(tempPath);
+            const computedHash = crypto.createHash("sha256").update(fileContent).digest("hex");
+            const expectedHash = sha256.toLowerCase();
+            if (computedHash.length !== expectedHash.length || !crypto.timingSafeEqual(
+              Buffer.from(computedHash),
+              Buffer.from(expectedHash)
+            )) {
+              await (0, import_fs2.safeDelete)(tempPath);
+              throw new Error(
+                `Checksum verification failed for ${url}
+Expected: ${expectedHash}
+Computed: ${computedHash}`
+              );
+            }
+          }
+          await fs.promises.rename(tempPath, destPath);
+          return {
+            ...result,
+            path: destPath
+          };
+        } catch (e) {
+          lastError = e;
+          if (fs.existsSync(tempPath)) {
+            await (0, import_fs2.safeDelete)(tempPath);
+          }
+          if (attempt === retries) {
+            break;
+          }
+          const delayMs = retryDelay * 2 ** attempt;
+          await new Promise((resolve) => setTimeout(resolve, delayMs));
+        }
+      }
+      throw lastError || new Error("Download failed after retries");
+    }
+    async function httpJson(url, options) {
+      const {
+        body,
+        headers = {},
+        ...restOptions
+      } = {
+        __proto__: null,
+        ...options
+      };
+      const defaultHeaders = {
+        Accept: "application/json"
+      };
+      if (body) {
+        defaultHeaders["Content-Type"] = "application/json";
+      }
+      const mergedHeaders = {
+        ...defaultHeaders,
+        ...headers
+      };
+      const response = await httpRequest4(url, {
+        body,
+        headers: mergedHeaders,
+        ...restOptions
+      });
+      if (!response.ok) {
+        throw new Error(`HTTP ${response.status}: ${response.statusText}`);
+      }
+      try {
+        return response.json();
+      } catch (e) {
+        throw new Error("Failed to parse JSON response", { cause: e });
+      }
+    }
+    async function httpRequest4(url, options) {
+      const {
+        body,
+        ca,
+        followRedirects = true,
+        headers = {},
+        hooks,
+        maxRedirects = 5,
+        maxResponseSize,
+        method = "GET",
+        onRetry,
+        retries = 0,
+        retryDelay = 1e3,
+        stream = false,
+        throwOnError = false,
+        timeout = 3e4
+      } = { __proto__: null, ...options };
+      const isStreamBody = body !== void 0 && typeof body === "object" && typeof body.pipe === "function";
+      if (isStreamBody && retries > 0) {
+        throw new Error(
+          "Streaming body (Readable/FormData) cannot be used with retries. Streams are consumed on first attempt and cannot be replayed. Set retries: 0 or buffer the body as a string/Buffer."
+        );
+      }
+      const attemptOpts = {
+        body,
+        ca,
+        // Disable redirect following for stream bodies — the stream is consumed
+        // on the first request and cannot be re-piped to the redirect target.
+        followRedirects: isStreamBody ? false : followRedirects,
+        headers,
+        hooks,
+        maxRedirects,
+        maxResponseSize,
+        method,
+        stream,
+        timeout
+      };
+      let lastError;
+      for (let attempt = 0; attempt <= retries; attempt++) {
+        try {
+          const response = await httpRequestAttempt(url, attemptOpts);
+          if (throwOnError && !response.ok) {
+            throw new HttpResponseError(response);
+          }
+          return response;
+        } catch (e) {
+          lastError = e;
+          if (attempt === retries) {
+            break;
+          }
+          const delayMs = retryDelay * 2 ** attempt;
+          if (onRetry) {
+            const retryResult = onRetry(attempt + 1, e, delayMs);
+            if (retryResult === false) {
+              break;
+            }
+            const actualDelay = typeof retryResult === "number" && !Number.isNaN(retryResult) ? Math.max(0, retryResult) : delayMs;
+            await new Promise((resolve) => setTimeout(resolve, actualDelay));
+          } else {
+            await new Promise((resolve) => setTimeout(resolve, delayMs));
+          }
+        }
+      }
+      throw lastError || new Error("Request failed after retries");
+    }
+    async function httpText(url, options) {
+      const {
+        body,
+        headers = {},
+        ...restOptions
+      } = {
+        __proto__: null,
+        ...options
+      };
+      const defaultHeaders = {
+        Accept: "text/plain"
+      };
+      if (body) {
+        defaultHeaders["Content-Type"] = "text/plain";
+      }
+      const mergedHeaders = {
+        ...defaultHeaders,
+        ...headers
+      };
+      const response = await httpRequest4(url, {
+        body,
+        headers: mergedHeaders,
+        ...restOptions
+      });
+      if (!response.ok) {
+        throw new Error(`HTTP ${response.status}: ${response.statusText}`);
+      }
+      return response.text();
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/performance.js
+var require_performance = __commonJS({
+  "@socketsecurity/lib/dist/performance.js"(exports2, module2) {
+    "use strict";
+    var __create2 = Object.create;
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __getProtoOf2 = Object.getPrototypeOf;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2(
+      // If the importer is in node compatibility mode or this is not an ESM
+      // file that has been converted to a CommonJS file using a Babel-
+      // compatible transform (i.e. "__esModule" has not been set), then set
+      // "default" to the CommonJS "module.exports" for node compatibility.
+      isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target,
+      mod
+    ));
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var performance_exports = {};
+    __export2(performance_exports, {
+      clearPerformanceMetrics: () => clearPerformanceMetrics,
+      generatePerformanceReport: () => generatePerformanceReport,
+      getPerformanceMetrics: () => getPerformanceMetrics,
+      getPerformanceSummary: () => getPerformanceSummary,
+      measure: () => measure,
+      measureSync: () => measureSync,
+      perfCheckpoint: () => perfCheckpoint,
+      perfTimer: () => perfTimer2,
+      printPerformanceSummary: () => printPerformanceSummary,
+      trackMemory: () => trackMemory
+    });
+    module2.exports = __toCommonJS2(performance_exports);
+    var import_node_process3 = __toESM2(require("node:process"));
+    var import_debug3 = require_debug3();
+    var performanceMetrics = [];
+    function isPerfEnabled() {
+      return import_node_process3.default.env["DEBUG"]?.includes("perf") || false;
+    }
+    function perfTimer2(operation, metadata) {
+      if (!isPerfEnabled()) {
+        return () => {
+        };
+      }
+      const start = performance.now();
+      (0, import_debug3.debugLog)(`[perf] [START] ${operation}`);
+      return (additionalMetadata) => {
+        const duration = performance.now() - start;
+        const metric = {
+          operation,
+          // Round to 2 decimals
+          duration: Math.round(duration * 100) / 100,
+          timestamp: Date.now(),
+          metadata: { ...metadata, ...additionalMetadata }
+        };
+        performanceMetrics.push(metric);
+        (0, import_debug3.debugLog)(`[perf] [END] ${operation} - ${metric.duration}ms`);
+      };
+    }
+    async function measure(operation, fn, metadata) {
+      const stop = perfTimer2(operation, metadata);
+      try {
+        const result = await fn();
+        stop({ success: true });
+        const metric = performanceMetrics[performanceMetrics.length - 1];
+        return { result, duration: metric?.duration || 0 };
+      } catch (e) {
+        stop({
+          success: false,
+          error: e instanceof Error ? e.message : "Unknown"
+        });
+        throw e;
+      }
+    }
+    function measureSync(operation, fn, metadata) {
+      const stop = perfTimer2(operation, metadata);
+      try {
+        const result = fn();
+        stop({ success: true });
+        const metric = performanceMetrics[performanceMetrics.length - 1];
+        return { result, duration: metric?.duration || 0 };
+      } catch (e) {
+        stop({
+          success: false,
+          error: e instanceof Error ? e.message : "Unknown"
+        });
+        throw e;
+      }
+    }
+    function getPerformanceMetrics() {
+      return [...performanceMetrics];
+    }
+    function clearPerformanceMetrics() {
+      performanceMetrics.length = 0;
+      (0, import_debug3.debugLog)("[perf] Cleared performance metrics");
+    }
+    function getPerformanceSummary() {
+      const summary = /* @__PURE__ */ Object.create(null);
+      for (const metric of performanceMetrics) {
+        const { duration, operation } = metric;
+        if (!summary[operation]) {
+          summary[operation] = {
+            count: 0,
+            total: 0,
+            min: Number.POSITIVE_INFINITY,
+            max: Number.NEGATIVE_INFINITY
+          };
+        }
+        const stats = summary[operation];
+        stats.count++;
+        stats.total += duration;
+        stats.min = Math.min(stats.min, duration);
+        stats.max = Math.max(stats.max, duration);
+      }
+      const result = /* @__PURE__ */ Object.create(null);
+      for (const { 0: operation, 1: stats } of Object.entries(summary)) {
+        result[operation] = {
+          count: stats.count,
+          total: Math.round(stats.total * 100) / 100,
+          avg: Math.round(stats.total / stats.count * 100) / 100,
+          min: Math.round(stats.min * 100) / 100,
+          max: Math.round(stats.max * 100) / 100
+        };
+      }
+      return result;
+    }
+    function printPerformanceSummary() {
+      if (!isPerfEnabled() || performanceMetrics.length === 0) {
+        return;
+      }
+      const summary = getPerformanceSummary();
+      const operations = Object.keys(summary).sort();
+      (0, import_debug3.debugLog)("[perf]\n=== Performance Summary ===");
+      for (const operation of operations) {
+        const stats = summary[operation];
+        (0, import_debug3.debugLog)(
+          `[perf] ${operation}: ${stats.count} calls, avg ${stats.avg}ms (min ${stats.min}ms, max ${stats.max}ms, total ${stats.total}ms)`
+        );
+      }
+      (0, import_debug3.debugLog)("[perf] =========================\n");
+    }
+    function perfCheckpoint(checkpoint, metadata) {
+      if (!isPerfEnabled()) {
+        return;
+      }
+      const metric = {
+        operation: `checkpoint:${checkpoint}`,
+        duration: 0,
+        timestamp: Date.now(),
+        ...metadata ? { metadata } : {}
+      };
+      performanceMetrics.push(metric);
+      (0, import_debug3.debugLog)(`[perf] [CHECKPOINT] ${checkpoint}`);
+    }
+    function trackMemory(label) {
+      if (!isPerfEnabled()) {
+        return 0;
+      }
+      const usage = import_node_process3.default.memoryUsage();
+      const heapUsedMB = Math.round(usage.heapUsed / 1024 / 1024 * 100) / 100;
+      (0, import_debug3.debugLog)(`[perf] [MEMORY] ${label}: ${heapUsedMB}MB heap used`);
+      const metric = {
+        operation: `checkpoint:memory:${label}`,
+        duration: 0,
+        timestamp: Date.now(),
+        metadata: {
+          heapUsed: heapUsedMB,
+          heapTotal: Math.round(usage.heapTotal / 1024 / 1024 * 100) / 100,
+          external: Math.round(usage.external / 1024 / 1024 * 100) / 100
+        }
+      };
+      performanceMetrics.push(metric);
+      return heapUsedMB;
+    }
+    function generatePerformanceReport() {
+      if (!isPerfEnabled() || performanceMetrics.length === 0) {
+        return "(no performance data collected - enable with DEBUG=perf)";
+      }
+      const summary = getPerformanceSummary();
+      const operations = Object.keys(summary).sort();
+      let report = "\n\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\n";
+      report += "\u2551         Performance Report                    \u2551\n";
+      report += "\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D\n\n";
+      for (const operation of operations) {
+        const stats = summary[operation];
+        report += `${operation}:
+`;
+        report += `  Calls: ${stats.count}
+`;
+        report += `  Avg:   ${stats.avg}ms
+`;
+        report += `  Min:   ${stats.min}ms
+`;
+        report += `  Max:   ${stats.max}ms
+`;
+        report += `  Total: ${stats.total}ms
+
+`;
+      }
+      const totalDuration = Object.values(summary).reduce(
+        (sum, s) => sum + s.total,
+        0
+      );
+      report += `Total measured time: ${Math.round(totalDuration * 100) / 100}ms
+`;
+      return report;
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/memoization.js
+var require_memoization = __commonJS({
+  "@socketsecurity/lib/dist/memoization.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var memoization_exports = {};
+    __export2(memoization_exports, {
+      Memoize: () => Memoize,
+      clearAllMemoizationCaches: () => clearAllMemoizationCaches,
+      memoize: () => memoize3,
+      memoizeAsync: () => memoizeAsync,
+      memoizeDebounced: () => memoizeDebounced,
+      memoizeWeak: () => memoizeWeak,
+      once: () => once2
+    });
+    module2.exports = __toCommonJS2(memoization_exports);
+    var import_debug3 = require_debug3();
+    var cacheRegistry = [];
+    function memoize3(fn, options = {}) {
+      const {
+        keyGen = (...args) => JSON.stringify(args),
+        maxSize = Number.POSITIVE_INFINITY,
+        name = fn.name || "anonymous",
+        ttl = Number.POSITIVE_INFINITY
+      } = options;
+      if (ttl < 0) {
+        throw new TypeError("TTL must be non-negative");
+      }
+      const cache = /* @__PURE__ */ new Map();
+      const accessOrder = [];
+      cacheRegistry.push(() => {
+        cache.clear();
+        accessOrder.length = 0;
+      });
+      function evictLRU() {
+        if (cache.size >= maxSize && accessOrder.length > 0) {
+          const oldest = accessOrder.shift();
+          if (oldest) {
+            cache.delete(oldest);
+            (0, import_debug3.debugLog)(`[memoize:${name}] clear`, {
+              key: oldest,
+              reason: "LRU"
+            });
+          }
+        }
+      }
+      function isExpired(entry) {
+        if (ttl === Number.POSITIVE_INFINITY) {
+          return false;
+        }
+        return Date.now() - entry.timestamp > ttl;
+      }
+      return function memoized(...args) {
+        const key = keyGen(...args);
+        const cached = cache.get(key);
+        if (cached) {
+          if (!isExpired(cached)) {
+            cached.hits++;
+            const index2 = accessOrder.indexOf(key);
+            if (index2 !== -1) {
+              accessOrder.splice(index2, 1);
+            }
+            accessOrder.push(key);
+            (0, import_debug3.debugLog)(`[memoize:${name}] hit`, { key, hits: cached.hits });
+            return cached.value;
+          }
+          cache.delete(key);
+          const index = accessOrder.indexOf(key);
+          if (index !== -1) {
+            accessOrder.splice(index, 1);
+          }
+        }
+        (0, import_debug3.debugLog)(`[memoize:${name}] miss`, { key });
+        const value = fn(...args);
+        evictLRU();
+        cache.set(key, {
+          value,
+          timestamp: Date.now(),
+          hits: 0
+        });
+        accessOrder.push(key);
+        (0, import_debug3.debugLog)(`[memoize:${name}] set`, { key, cacheSize: cache.size });
+        return value;
+      };
+    }
+    function memoizeAsync(fn, options = {}) {
+      const {
+        keyGen = (...args) => JSON.stringify(args),
+        maxSize = Number.POSITIVE_INFINITY,
+        name = fn.name || "anonymous",
+        ttl = Number.POSITIVE_INFINITY
+      } = options;
+      const cache = /* @__PURE__ */ new Map();
+      const accessOrder = [];
+      cacheRegistry.push(() => {
+        cache.clear();
+        accessOrder.length = 0;
+      });
+      function evictLRU() {
+        if (cache.size >= maxSize && accessOrder.length > 0) {
+          const oldest = accessOrder.shift();
+          if (oldest) {
+            cache.delete(oldest);
+            (0, import_debug3.debugLog)(`[memoizeAsync:${name}] clear`, {
+              key: oldest,
+              reason: "LRU"
+            });
+          }
+        }
+      }
+      function isExpired(entry) {
+        if (ttl === Number.POSITIVE_INFINITY) {
+          return false;
+        }
+        return Date.now() - entry.timestamp > ttl;
+      }
+      const refreshing = /* @__PURE__ */ new Set();
+      return async function memoized(...args) {
+        const key = keyGen(...args);
+        const cached = cache.get(key);
+        if (cached) {
+          if (!isExpired(cached)) {
+            cached.hits++;
+            const index2 = accessOrder.indexOf(key);
+            if (index2 !== -1) {
+              accessOrder.splice(index2, 1);
+            }
+            accessOrder.push(key);
+            (0, import_debug3.debugLog)(`[memoizeAsync:${name}] hit`, { key, hits: cached.hits });
+            return await cached.value;
+          }
+          if (refreshing.has(key)) {
+            (0, import_debug3.debugLog)(`[memoizeAsync:${name}] stale-dedup`, { key });
+            return await cached.value;
+          }
+          cache.delete(key);
+          const index = accessOrder.indexOf(key);
+          if (index !== -1) {
+            accessOrder.splice(index, 1);
+          }
+        }
+        (0, import_debug3.debugLog)(`[memoizeAsync:${name}] miss`, { key });
+        refreshing.add(key);
+        const promise = fn(...args).then(
+          (result) => {
+            refreshing.delete(key);
+            const entry = cache.get(key);
+            if (entry) {
+              entry.value = Promise.resolve(result);
+            }
+            return result;
+          },
+          (error) => {
+            refreshing.delete(key);
+            cache.delete(key);
+            const index = accessOrder.indexOf(key);
+            if (index !== -1) {
+              accessOrder.splice(index, 1);
+            }
+            (0, import_debug3.debugLog)(`[memoizeAsync:${name}] error`, { key, error });
+            throw error;
+          }
+        );
+        evictLRU();
+        cache.set(key, {
+          value: promise,
+          timestamp: Date.now(),
+          hits: 0
+        });
+        accessOrder.push(key);
+        (0, import_debug3.debugLog)(`[memoizeAsync:${name}] set`, { key, cacheSize: cache.size });
+        return await promise;
+      };
+    }
+    function Memoize(options = {}) {
+      return (_target, propertyKey, descriptor) => {
+        const originalMethod = descriptor.value;
+        descriptor.value = memoize3(originalMethod, {
+          ...options,
+          name: options.name || propertyKey
+        });
+        return descriptor;
+      };
+    }
+    function clearAllMemoizationCaches() {
+      (0, import_debug3.debugLog)("[memoize:all] clear", { action: "clear-all-caches" });
+      for (const clear of cacheRegistry) {
+        clear();
+      }
+    }
+    function memoizeWeak(fn) {
+      const cache = /* @__PURE__ */ new WeakMap();
+      return function memoized(key) {
+        if (cache.has(key)) {
+          (0, import_debug3.debugLog)(`[memoizeWeak:${fn.name}] hit`);
+          return cache.get(key);
+        }
+        (0, import_debug3.debugLog)(`[memoizeWeak:${fn.name}] miss`);
+        const result = fn(key);
+        cache.set(key, result);
+        return result;
+      };
+    }
+    function once2(fn) {
+      let called = false;
+      let result;
+      return function memoized() {
+        if (!called) {
+          result = fn();
+          called = true;
+          (0, import_debug3.debugLog)(`[once:${fn.name}] set`);
+        } else {
+          (0, import_debug3.debugLog)(`[once:${fn.name}] hit`);
+        }
+        return result;
+      };
+    }
+    function memoizeDebounced(fn, wait, options = {}) {
+      const memoized = memoize3(fn, options);
+      let timeoutId;
+      return function debounced(...args) {
+        if (timeoutId) {
+          clearTimeout(timeoutId);
+        }
+        timeoutId = setTimeout(() => {
+          memoized(...args);
+        }, wait);
+        return memoized(...args);
+      };
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/external/npm-pack.js
+var require_npm_pack = __commonJS({
+  "@socketsecurity/lib/dist/external/npm-pack.js"(exports2, module2) {
+    "use strict";
+    module2.exports = {};
+  }
+});
+
+// @socketsecurity/lib/dist/external/cacache.js
+var require_cacache = __commonJS({
+  "@socketsecurity/lib/dist/external/cacache.js"(exports2, module2) {
+    "use strict";
+    var { cacache } = require_npm_pack();
+    module2.exports = cacache;
+  }
+});
+
+// @socketsecurity/lib/dist/cacache.js
+var require_cacache2 = __commonJS({
+  "@socketsecurity/lib/dist/cacache.js"(exports2, module2) {
+    "use strict";
+    var __create2 = Object.create;
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __getProtoOf2 = Object.getPrototypeOf;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2(
+      // If the importer is in node compatibility mode or this is not an ESM
+      // file that has been converted to a CommonJS file using a Babel-
+      // compatible transform (i.e. "__esModule" has not been set), then set
+      // "default" to the CommonJS "module.exports" for node compatibility.
+      isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target,
+      mod
+    ));
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var cacache_exports = {};
+    __export2(cacache_exports, {
+      clear: () => clear,
+      get: () => get,
+      getCacache: () => getCacache,
+      put: () => put,
+      remove: () => remove,
+      safeGet: () => safeGet,
+      withTmp: () => withTmp
+    });
+    module2.exports = __toCommonJS2(cacache_exports);
+    var import_cacache = __toESM2(require_cacache());
+    var import_socket3 = require_socket3();
+    function getCacache() {
+      return import_cacache.default;
+    }
+    function patternToRegex(pattern) {
+      const escaped = pattern.replaceAll(/[.+?^${}()|[\]\\]/g, "\\$&");
+      const regexPattern = escaped.replaceAll("*", ".*");
+      return new RegExp(`^${regexPattern}`);
+    }
+    function matchesPattern(key, pattern) {
+      if (!pattern.includes("*")) {
+        return key.startsWith(pattern);
+      }
+      const regex = patternToRegex(pattern);
+      return regex.test(key);
+    }
+    async function clear(options) {
+      const opts = { __proto__: null, ...options };
+      const cacache2 = getCacache();
+      const cacheDir = (0, import_socket3.getSocketCacacheDir)();
+      if (!opts.prefix) {
+        try {
+          await cacache2.rm.all(cacheDir);
+          return;
+        } catch (e) {
+          if (e?.code !== "ENOTEMPTY") {
+            throw e;
+          }
+          return;
+        }
+      }
+      const hasWildcard = opts.prefix.includes("*");
+      if (!hasWildcard) {
+        let removed2 = 0;
+        const stream2 = cacache2.ls.stream(cacheDir);
+        for await (const entry of stream2) {
+          if (entry.key.startsWith(opts.prefix)) {
+            try {
+              await cacache2.rm.entry(cacheDir, entry.key);
+              removed2++;
+            } catch {
+            }
+          }
+        }
+        return removed2;
+      }
+      let removed = 0;
+      const stream = cacache2.ls.stream(cacheDir);
+      for await (const entry of stream) {
+        if (matchesPattern(entry.key, opts.prefix)) {
+          try {
+            await cacache2.rm.entry(cacheDir, entry.key);
+            removed++;
+          } catch {
+          }
+        }
+      }
+      return removed;
+    }
+    async function get(key, options) {
+      if (key.includes("*")) {
+        throw new TypeError(
+          'Cache key cannot contain wildcards (*). Wildcards are only supported in clear({ prefix: "pattern*" }).'
+        );
+      }
+      const cacache2 = getCacache();
+      return await cacache2.get((0, import_socket3.getSocketCacacheDir)(), key, options);
+    }
+    async function put(key, data, options) {
+      if (key.includes("*")) {
+        throw new TypeError(
+          'Cache key cannot contain wildcards (*). Wildcards are only supported in clear({ prefix: "pattern*" }).'
+        );
+      }
+      const cacache2 = getCacache();
+      return await cacache2.put((0, import_socket3.getSocketCacacheDir)(), key, data, options);
+    }
+    async function remove(key) {
+      if (key.includes("*")) {
+        throw new TypeError(
+          'Cache key cannot contain wildcards (*). Use clear({ prefix: "pattern*" }) to remove multiple entries.'
+        );
+      }
+      const cacache2 = getCacache();
+      return await cacache2.rm.entry((0, import_socket3.getSocketCacacheDir)(), key);
+    }
+    async function safeGet(key, options) {
+      try {
+        return await get(key, options);
+      } catch {
+        return void 0;
+      }
+    }
+    async function withTmp(callback) {
+      const cacache2 = getCacache();
+      return await cacache2.tmp.withTmp(
+        (0, import_socket3.getSocketCacacheDir)(),
+        {},
+        callback
+      );
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/cache-with-ttl.js
+var require_cache_with_ttl = __commonJS({
+  "@socketsecurity/lib/dist/cache-with-ttl.js"(exports2, module2) {
+    "use strict";
+    var __create2 = Object.create;
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __getProtoOf2 = Object.getPrototypeOf;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2(
+      // If the importer is in node compatibility mode or this is not an ESM
+      // file that has been converted to a CommonJS file using a Babel-
+      // compatible transform (i.e. "__esModule" has not been set), then set
+      // "default" to the CommonJS "module.exports" for node compatibility.
+      isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target,
+      mod
+    ));
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var cache_with_ttl_exports = {};
+    __export2(cache_with_ttl_exports, {
+      createTtlCache: () => createTtlCache2
+    });
+    module2.exports = __toCommonJS2(cache_with_ttl_exports);
+    var cacache = __toESM2(require_cacache2());
+    var DEFAULT_TTL_MS = 5 * 60 * 1e3;
+    var DEFAULT_PREFIX = "ttl-cache";
+    function createTtlCache2(options) {
+      const opts = {
+        __proto__: null,
+        memoize: true,
+        prefix: DEFAULT_PREFIX,
+        ttl: DEFAULT_TTL_MS,
+        ...options
+      };
+      if (opts.prefix?.includes("*")) {
+        throw new TypeError(
+          'Cache prefix cannot contain wildcards (*). Use clear({ prefix: "pattern*" }) for wildcard matching.'
+        );
+      }
+      const memoCache = /* @__PURE__ */ new Map();
+      const ttl = opts.ttl ?? DEFAULT_TTL_MS;
+      function buildKey(key) {
+        return `${opts.prefix}:${key}`;
+      }
+      function isExpired(entry) {
+        const now = Date.now();
+        const maxFutureMs = 1e4;
+        if (entry.expiresAt > now + ttl + maxFutureMs) {
+          return true;
+        }
+        return now > entry.expiresAt;
+      }
+      function createMatcher(pattern) {
+        const fullPattern = buildKey(pattern);
+        const hasWildcard = pattern.includes("*");
+        if (!hasWildcard) {
+          return (key) => key.startsWith(fullPattern);
+        }
+        const escaped = fullPattern.replaceAll(/[.+?^${}()|[\]\\]/g, "\\$&");
+        const regexPattern = escaped.replaceAll("*", ".*");
+        const regex = new RegExp(`^${regexPattern}`);
+        return (key) => regex.test(key);
+      }
+      async function get(key) {
+        if (key.includes("*")) {
+          throw new TypeError(
+            "Cache key cannot contain wildcards (*). Use getAll(pattern) to retrieve multiple entries."
+          );
+        }
+        const fullKey = buildKey(key);
+        if (opts.memoize) {
+          const memoEntry = memoCache.get(fullKey);
+          if (memoEntry && !isExpired(memoEntry)) {
+            return memoEntry.data;
+          }
+          if (memoEntry) {
+            memoCache.delete(fullKey);
+          }
+        }
+        const cacheEntry = await cacache.safeGet(fullKey);
+        if (cacheEntry) {
+          let entry;
+          try {
+            entry = JSON.parse(cacheEntry.data.toString("utf8"));
+          } catch {
+            try {
+              await cacache.remove(fullKey);
+            } catch {
+            }
+            return void 0;
+          }
+          if (!isExpired(entry)) {
+            if (opts.memoize) {
+              memoCache.set(fullKey, entry);
+            }
+            return entry.data;
+          }
+          try {
+            await cacache.remove(fullKey);
+          } catch {
+          }
+        }
+        return void 0;
+      }
+      async function getAll(pattern) {
+        const results = /* @__PURE__ */ new Map();
+        const matches = createMatcher(pattern);
+        if (opts.memoize) {
+          for (const [key, entry] of memoCache.entries()) {
+            if (!matches(key)) {
+              continue;
+            }
+            if (isExpired(entry)) {
+              memoCache.delete(key);
+              continue;
+            }
+            const originalKey = opts.prefix ? key.slice(opts.prefix.length + 1) : key;
+            results.set(originalKey, entry.data);
+          }
+        }
+        const cacheDir = (await Promise.resolve().then(() => __toESM(require_socket3()))).getSocketCacacheDir();
+        const cacacheModule = await Promise.resolve().then(() => __toESM(require_cacache2()));
+        const stream = cacacheModule.getCacache().ls.stream(cacheDir);
+        for await (const cacheEntry of stream) {
+          if (!cacheEntry.key.startsWith(`${opts.prefix}:`)) {
+            continue;
+          }
+          if (!matches(cacheEntry.key)) {
+            continue;
+          }
+          const originalKey = opts.prefix ? cacheEntry.key.slice(opts.prefix.length + 1) : cacheEntry.key;
+          if (results.has(originalKey)) {
+            continue;
+          }
+          try {
+            const entry = await cacache.safeGet(cacheEntry.key);
+            if (!entry) {
+              continue;
+            }
+            const parsed = JSON.parse(
+              entry.data.toString("utf8")
+            );
+            if (isExpired(parsed)) {
+              await cacache.remove(cacheEntry.key);
+              continue;
+            }
+            results.set(originalKey, parsed.data);
+            if (opts.memoize) {
+              memoCache.set(cacheEntry.key, parsed);
+            }
+          } catch {
+          }
+        }
+        return results;
+      }
+      async function set(key, data) {
+        if (key.includes("*")) {
+          throw new TypeError(
+            'Cache key cannot contain wildcards (*). Wildcards are only supported in clear({ prefix: "pattern*" }).'
+          );
+        }
+        const fullKey = buildKey(key);
+        const entry = {
+          data,
+          expiresAt: Date.now() + ttl
+        };
+        if (opts.memoize) {
+          memoCache.set(fullKey, entry);
+        }
+        try {
+          await cacache.put(fullKey, JSON.stringify(entry), {
+            metadata: { expiresAt: entry.expiresAt }
+          });
+        } catch {
+        }
+      }
+      const inflightRequests = /* @__PURE__ */ new Map();
+      async function getOrFetch(key, fetcher) {
+        const cached = await get(key);
+        if (cached !== void 0) {
+          return cached;
+        }
+        const fullKey = buildKey(key);
+        const existing = inflightRequests.get(fullKey);
+        if (existing) {
+          return await existing;
+        }
+        const promise = (async () => {
+          try {
+            const data = await fetcher();
+            await set(key, data);
+            return data;
+          } finally {
+            inflightRequests.delete(fullKey);
+          }
+        })();
+        inflightRequests.set(fullKey, promise);
+        return await promise;
+      }
+      async function deleteEntry(key) {
+        if (key.includes("*")) {
+          throw new TypeError(
+            "Cache key cannot contain wildcards (*). Use deleteAll(pattern) to remove multiple entries."
+          );
+        }
+        const fullKey = buildKey(key);
+        memoCache.delete(fullKey);
+        try {
+          await cacache.remove(fullKey);
+        } catch {
+        }
+      }
+      async function deleteAll(pattern) {
+        const fullPrefix = pattern ? `${opts.prefix}:${pattern}` : opts.prefix;
+        if (!pattern) {
+          memoCache.clear();
+        } else {
+          const matches = createMatcher(pattern);
+          for (const key of memoCache.keys()) {
+            if (matches(key)) {
+              memoCache.delete(key);
+            }
+          }
+        }
+        const removed = await cacache.clear({ prefix: fullPrefix });
+        return removed ?? 0;
+      }
+      async function clear(options2) {
+        const opts2 = { __proto__: null, ...options2 };
+        memoCache.clear();
+        if (opts2.memoOnly) {
+          return;
+        }
+        await deleteAll();
+      }
+      return {
+        clear,
+        delete: deleteEntry,
+        deleteAll,
+        get,
+        getAll,
+        getOrFetch,
+        set
+      };
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/suppress-warnings.js
+var require_suppress_warnings = __commonJS({
+  "@socketsecurity/lib/dist/suppress-warnings.js"(exports2, module2) {
+    "use strict";
+    var __create2 = Object.create;
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __getProtoOf2 = Object.getPrototypeOf;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2(
+      // If the importer is in node compatibility mode or this is not an ESM
+      // file that has been converted to a CommonJS file using a Babel-
+      // compatible transform (i.e. "__esModule" has not been set), then set
+      // "default" to the CommonJS "module.exports" for node compatibility.
+      isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target,
+      mod
+    ));
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var suppress_warnings_exports = {};
+    __export2(suppress_warnings_exports, {
+      restoreWarnings: () => restoreWarnings,
+      setMaxEventTargetListeners: () => setMaxEventTargetListeners2,
+      suppressMaxListenersWarning: () => suppressMaxListenersWarning,
+      suppressWarningType: () => suppressWarningType,
+      withSuppressedWarnings: () => withSuppressedWarnings
+    });
+    module2.exports = __toCommonJS2(suppress_warnings_exports);
+    var import_node_process3 = __toESM2(require("node:process"));
+    var { apply: ReflectApply } = Reflect;
+    var originalEmitWarning;
+    var suppressedWarnings = /* @__PURE__ */ new Set();
+    function setupSuppression() {
+      if (!originalEmitWarning) {
+        originalEmitWarning = import_node_process3.default.emitWarning;
+        import_node_process3.default.emitWarning = (warning, ...args) => {
+          if (typeof warning === "string") {
+            for (const suppressedType of suppressedWarnings) {
+              if (warning.includes(suppressedType)) {
+                return;
+              }
+            }
+          } else if (warning && typeof warning === "object") {
+            const warningObj = warning;
+            if (warningObj.name && suppressedWarnings.has(warningObj.name)) {
+              return;
+            }
+          }
+          return ReflectApply(
+            originalEmitWarning,
+            import_node_process3.default,
+            [warning, ...args]
+          );
+        };
+      }
+    }
+    function suppressMaxListenersWarning() {
+      suppressedWarnings.add("MaxListenersExceededWarning");
+      setupSuppression();
+    }
+    function suppressWarningType(warningType) {
+      suppressedWarnings.add(warningType);
+      setupSuppression();
+    }
+    function setMaxEventTargetListeners2(target, maxListeners = 10) {
+      if (!target) {
+        return;
+      }
+      const symbols = Object.getOwnPropertySymbols(target);
+      const kMaxEventTargetListeners = symbols.find(
+        (s) => s.description === "events.maxEventTargetListeners"
+      );
+      if (kMaxEventTargetListeners) {
+        ;
+        target[kMaxEventTargetListeners] = maxListeners;
+      }
+    }
+    function restoreWarnings() {
+      if (originalEmitWarning) {
+        import_node_process3.default.emitWarning = originalEmitWarning;
+        originalEmitWarning = void 0;
+        suppressedWarnings.clear();
+      }
+    }
+    async function withSuppressedWarnings(warningType, callback) {
+      const wasAlreadySuppressed = suppressedWarnings.has(warningType);
+      const original = import_node_process3.default.emitWarning;
+      suppressWarningType(warningType);
+      try {
+        return await callback();
+      } finally {
+        if (!wasAlreadySuppressed) {
+          suppressedWarnings.delete(warningType);
+        }
+        import_node_process3.default.emitWarning = original;
+      }
+    }
+  }
+});
+
+// @socketsecurity/lib/dist/url.js
+var require_url = __commonJS({
+  "@socketsecurity/lib/dist/url.js"(exports2, module2) {
+    "use strict";
+    var __defProp2 = Object.defineProperty;
+    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+    var __getOwnPropNames2 = Object.getOwnPropertyNames;
+    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+    var __export2 = (target, all) => {
+      for (var name in all)
+        __defProp2(target, name, { get: all[name], enumerable: true });
+    };
+    var __copyProps2 = (to, from, except, desc) => {
+      if (from && typeof from === "object" || typeof from === "function") {
+        for (let key of __getOwnPropNames2(from))
+          if (!__hasOwnProp2.call(to, key) && key !== except)
+            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+      }
+      return to;
+    };
+    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+    var url_exports = {};
+    __export2(url_exports, {
+      createRelativeUrl: () => createRelativeUrl,
+      isUrl: () => isUrl,
+      parseUrl: () => parseUrl,
+      urlSearchParamAsArray: () => urlSearchParamAsArray,
+      urlSearchParamAsBoolean: () => urlSearchParamAsBoolean2,
+      urlSearchParamAsNumber: () => urlSearchParamAsNumber,
+      urlSearchParamAsString: () => urlSearchParamAsString,
+      urlSearchParamsGetArray: () => urlSearchParamsGetArray,
+      urlSearchParamsGetBoolean: () => urlSearchParamsGetBoolean
+    });
+    module2.exports = __toCommonJS2(url_exports);
+    var BooleanCtor = Boolean;
+    var UrlCtor = URL;
+    // @__NO_SIDE_EFFECTS__
+    function isUrl(value) {
+      return (typeof value === "string" && value !== "" || value !== null && typeof value === "object") && !!/* @__PURE__ */ parseUrl(value);
+    }
+    // @__NO_SIDE_EFFECTS__
+    function parseUrl(value) {
+      try {
+        return new UrlCtor(value);
+      } catch {
+      }
+      return void 0;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function urlSearchParamAsArray(value) {
+      return typeof value === "string" ? value.trim().split(/, */).map((v) => v.trim()).filter(BooleanCtor) : [];
+    }
+    // @__NO_SIDE_EFFECTS__
+    function urlSearchParamAsBoolean2(value, options) {
+      const { defaultValue = false } = {
+        __proto__: null,
+        ...options
+      };
+      if (typeof value === "string") {
+        const trimmed = value.trim();
+        return trimmed === "1" || trimmed.toLowerCase() === "true";
+      }
+      if (value === null || value === void 0) {
+        return !!defaultValue;
+      }
+      return !!value;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function urlSearchParamsGetArray(params, key) {
+      if (params && typeof params.getAll === "function") {
+        const values = params.getAll(key);
+        const firstValue = values[0];
+        if (values.length === 1 && firstValue && firstValue.includes(",")) {
+          return /* @__PURE__ */ urlSearchParamAsArray(firstValue);
+        }
+        return values;
+      }
+      return [];
+    }
+    // @__NO_SIDE_EFFECTS__
+    function urlSearchParamsGetBoolean(params, key, options) {
+      const { defaultValue = false } = {
+        __proto__: null,
+        ...options
+      };
+      if (params && typeof params.get === "function") {
+        const value = params.get(key);
+        return value !== null ? /* @__PURE__ */ urlSearchParamAsBoolean2(value, { defaultValue }) : defaultValue;
+      }
+      return defaultValue;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function createRelativeUrl(path4, options) {
+      const { base = "" } = {
+        __proto__: null,
+        ...options
+      };
+      const relativePath = path4.replace(/^\//, "");
+      if (base) {
+        let baseUrl = base;
+        if (!baseUrl.endsWith("/")) {
+          baseUrl += "/";
+        }
+        return baseUrl + relativePath;
+      }
+      return relativePath;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function urlSearchParamAsString(params, key, options) {
+      const { defaultValue = "" } = {
+        __proto__: null,
+        ...options
+      };
+      if (params && typeof params.get === "function") {
+        const value = params.get(key);
+        return value !== null ? value : defaultValue;
+      }
+      return defaultValue;
+    }
+    // @__NO_SIDE_EFFECTS__
+    function urlSearchParamAsNumber(params, key, options) {
+      const { defaultValue = 0 } = {
+        __proto__: null,
+        ...options
+      };
+      if (params && typeof params.get === "function") {
+        const value = params.get(key);
+        if (value !== null) {
+          const num = Number(value);
+          return !Number.isNaN(num) ? num : defaultValue;
+        }
+      }
+      return defaultValue;
+    }
+  }
+});
+
+// delayed-stream/lib/delayed_stream.js
+var require_delayed_stream = __commonJS({
+  "delayed-stream/lib/delayed_stream.js"(exports2, module2) {
+    "use strict";
+    var Stream = require("node:stream").Stream;
+    var util = require("node:util");
+    module2.exports = DelayedStream;
+    function DelayedStream() {
+      this.source = null;
+      this.dataSize = 0;
+      this.maxDataSize = 1024 * 1024;
+      this.pauseStream = true;
+      this._maxDataSizeExceeded = false;
+      this._released = false;
+      this._bufferedEvents = [];
+    }
+    util.inherits(DelayedStream, Stream);
+    DelayedStream.create = function(source, options) {
+      var delayedStream = new this();
+      options = options || {};
+      for (var option in options) {
+        delayedStream[option] = options[option];
+      }
+      delayedStream.source = source;
+      var realEmit = source.emit;
+      source.emit = function() {
+        delayedStream._handleEmit(arguments);
+        return realEmit.apply(source, arguments);
+      };
+      source.on("error", function() {
+      });
+      if (delayedStream.pauseStream) {
+        source.pause();
+      }
+      return delayedStream;
+    };
+    Object.defineProperty(DelayedStream.prototype, "readable", {
+      configurable: true,
+      enumerable: true,
+      get: function() {
+        return this.source.readable;
+      }
+    });
+    DelayedStream.prototype.setEncoding = function() {
+      return this.source.setEncoding.apply(this.source, arguments);
+    };
+    DelayedStream.prototype.resume = function() {
+      if (!this._released) {
+        this.release();
+      }
+      this.source.resume();
+    };
+    DelayedStream.prototype.pause = function() {
+      this.source.pause();
+    };
+    DelayedStream.prototype.release = function() {
+      this._released = true;
+      this._bufferedEvents.forEach(function(args) {
+        this.emit.apply(this, args);
+      }.bind(this));
+      this._bufferedEvents = [];
+    };
+    DelayedStream.prototype.pipe = function() {
+      var r = Stream.prototype.pipe.apply(this, arguments);
+      this.resume();
+      return r;
+    };
+    DelayedStream.prototype._handleEmit = function(args) {
+      if (this._released) {
+        this.emit.apply(this, args);
+        return;
+      }
+      if (args[0] === "data") {
+        this.dataSize += args[1].length;
+        this._checkIfMaxDataSizeExceeded();
+      }
+      this._bufferedEvents.push(args);
+    };
+    DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {
+      if (this._maxDataSizeExceeded) {
+        return;
+      }
+      if (this.dataSize <= this.maxDataSize) {
+        return;
+      }
+      this._maxDataSizeExceeded = true;
+      var message = "DelayedStream#maxDataSize of " + this.maxDataSize + " bytes exceeded.";
+      this.emit("error", new Error(message));
+    };
+  }
+});
+
+// combined-stream/lib/combined_stream.js
+var require_combined_stream = __commonJS({
+  "combined-stream/lib/combined_stream.js"(exports2, module2) {
+    "use strict";
+    var util = require("node:util");
+    var Stream = require("node:stream").Stream;
+    var DelayedStream = require_delayed_stream();
+    module2.exports = CombinedStream;
+    function CombinedStream() {
+      this.writable = false;
+      this.readable = true;
+      this.dataSize = 0;
+      this.maxDataSize = 2 * 1024 * 1024;
+      this.pauseStreams = true;
+      this._released = false;
+      this._streams = [];
+      this._currentStream = null;
+      this._insideLoop = false;
+      this._pendingNext = false;
+    }
+    util.inherits(CombinedStream, Stream);
+    CombinedStream.create = function(options) {
+      var combinedStream = new this();
+      options = options || {};
+      for (var option in options) {
+        combinedStream[option] = options[option];
+      }
+      return combinedStream;
+    };
+    CombinedStream.isStreamLike = function(stream) {
+      return typeof stream !== "function" && typeof stream !== "string" && typeof stream !== "boolean" && typeof stream !== "number" && !Buffer.isBuffer(stream);
+    };
+    CombinedStream.prototype.append = function(stream) {
+      var isStreamLike = CombinedStream.isStreamLike(stream);
+      if (isStreamLike) {
+        if (!(stream instanceof DelayedStream)) {
+          var newStream = DelayedStream.create(stream, {
+            maxDataSize: Infinity,
+            pauseStream: this.pauseStreams
+          });
+          stream.on("data", this._checkDataSize.bind(this));
+          stream = newStream;
+        }
+        this._handleErrors(stream);
+        if (this.pauseStreams) {
+          stream.pause();
+        }
+      }
+      this._streams.push(stream);
+      return this;
+    };
+    CombinedStream.prototype.pipe = function(dest, options) {
+      Stream.prototype.pipe.call(this, dest, options);
+      this.resume();
+      return dest;
+    };
+    CombinedStream.prototype._getNext = function() {
+      this._currentStream = null;
+      if (this._insideLoop) {
+        this._pendingNext = true;
+        return;
+      }
+      this._insideLoop = true;
+      try {
+        do {
+          this._pendingNext = false;
+          this._realGetNext();
+        } while (this._pendingNext);
+      } finally {
+        this._insideLoop = false;
+      }
+    };
+    CombinedStream.prototype._realGetNext = function() {
+      var stream = this._streams.shift();
+      if (typeof stream == "undefined") {
+        this.end();
+        return;
+      }
+      if (typeof stream !== "function") {
+        this._pipeNext(stream);
+        return;
+      }
+      var getStream = stream;
+      getStream(function(stream2) {
+        var isStreamLike = CombinedStream.isStreamLike(stream2);
+        if (isStreamLike) {
+          stream2.on("data", this._checkDataSize.bind(this));
+          this._handleErrors(stream2);
+        }
+        this._pipeNext(stream2);
+      }.bind(this));
+    };
+    CombinedStream.prototype._pipeNext = function(stream) {
+      this._currentStream = stream;
+      var isStreamLike = CombinedStream.isStreamLike(stream);
+      if (isStreamLike) {
+        stream.on("end", this._getNext.bind(this));
+        stream.pipe(this, { end: false });
+        return;
+      }
+      var value = stream;
+      this.write(value);
+      this._getNext();
+    };
+    CombinedStream.prototype._handleErrors = function(stream) {
+      var self = this;
+      stream.on("error", function(err) {
+        self._emitError(err);
+      });
+    };
+    CombinedStream.prototype.write = function(data) {
+      this.emit("data", data);
+    };
+    CombinedStream.prototype.pause = function() {
+      if (!this.pauseStreams) {
+        return;
+      }
+      if (this.pauseStreams && this._currentStream && typeof this._currentStream.pause == "function") this._currentStream.pause();
+      this.emit("pause");
+    };
+    CombinedStream.prototype.resume = function() {
+      if (!this._released) {
+        this._released = true;
+        this.writable = true;
+        this._getNext();
+      }
+      if (this.pauseStreams && this._currentStream && typeof this._currentStream.resume == "function") this._currentStream.resume();
+      this.emit("resume");
+    };
+    CombinedStream.prototype.end = function() {
+      this._reset();
+      this.emit("end");
+    };
+    CombinedStream.prototype.destroy = function() {
+      this._reset();
+      this.emit("close");
+    };
+    CombinedStream.prototype._reset = function() {
+      this.writable = false;
+      this._streams = [];
+      this._currentStream = null;
+    };
+    CombinedStream.prototype._checkDataSize = function() {
+      this._updateDataSize();
+      if (this.dataSize <= this.maxDataSize) {
+        return;
+      }
+      var message = "DelayedStream#maxDataSize of " + this.maxDataSize + " bytes exceeded.";
+      this._emitError(new Error(message));
+    };
+    CombinedStream.prototype._updateDataSize = function() {
+      this.dataSize = 0;
+      var self = this;
+      this._streams.forEach(function(stream) {
+        if (!stream.dataSize) {
+          return;
+        }
+        self.dataSize += stream.dataSize;
+      });
+      if (this._currentStream && this._currentStream.dataSize) {
+        this.dataSize += this._currentStream.dataSize;
+      }
+    };
+    CombinedStream.prototype._emitError = function(err) {
+      this._reset();
+      this.emit("error", err);
+    };
+  }
+});
+
+// mime-db/db.json
+var require_db = __commonJS({
+  "mime-db/db.json"(exports2, module2) {
+    "use strict";
+    module2.exports = {
+      "application/json": { source: "iana", charset: "UTF-8", compressible: true },
+      "application/octet-stream": { source: "iana", compressible: false },
+      "multipart/form-data": { source: "iana" }
+    };
+  }
+});
+
+// mime-db/index.js
+var require_mime_db = __commonJS({
+  "mime-db/index.js"(exports2, module2) {
+    "use strict";
+    module2.exports = require_db();
+  }
+});
+
+// mime-types/index.js
+var require_mime_types = __commonJS({
+  "mime-types/index.js"(exports2) {
+    "use strict";
+    var db = require_mime_db();
+    var extname = require("node:path").extname;
+    var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/;
+    var TEXT_TYPE_REGEXP = /^text\//i;
+    exports2.charset = charset;
+    exports2.charsets = { lookup: charset };
+    exports2.contentType = contentType;
+    exports2.extension = extension;
+    exports2.extensions = /* @__PURE__ */ Object.create(null);
+    exports2.lookup = lookup;
+    exports2.types = /* @__PURE__ */ Object.create(null);
+    populateMaps(exports2.extensions, exports2.types);
+    function charset(type) {
+      if (!type || typeof type !== "string") {
+        return false;
+      }
+      var match = EXTRACT_TYPE_REGEXP.exec(type);
+      var mime = match && db[match[1].toLowerCase()];
+      if (mime && mime.charset) {
+        return mime.charset;
+      }
+      if (match && TEXT_TYPE_REGEXP.test(match[1])) {
+        return "UTF-8";
+      }
+      return false;
+    }
+    function contentType(str) {
+      if (!str || typeof str !== "string") {
+        return false;
+      }
+      var mime = str.indexOf("/") === -1 ? exports2.lookup(str) : str;
+      if (!mime) {
+        return false;
+      }
+      if (mime.indexOf("charset") === -1) {
+        var charset2 = exports2.charset(mime);
+        if (charset2) mime += "; charset=" + charset2.toLowerCase();
+      }
+      return mime;
+    }
+    function extension(type) {
+      if (!type || typeof type !== "string") {
+        return false;
+      }
+      var match = EXTRACT_TYPE_REGEXP.exec(type);
+      var exts = match && exports2.extensions[match[1].toLowerCase()];
+      if (!exts || !exts.length) {
+        return false;
+      }
+      return exts[0];
+    }
+    function lookup(path4) {
+      if (!path4 || typeof path4 !== "string") {
+        return false;
+      }
+      var extension2 = extname("x." + path4).toLowerCase().substr(1);
+      if (!extension2) {
+        return false;
+      }
+      return exports2.types[extension2] || false;
+    }
+    function populateMaps(extensions, types) {
+      var preference = ["nginx", "apache", void 0, "iana"];
+      Object.keys(db).forEach(function forEachMimeType(type) {
+        var mime = db[type];
+        var exts = mime.extensions;
+        if (!exts || !exts.length) {
+          return;
+        }
+        extensions[type] = exts;
+        for (var i = 0; i < exts.length; i++) {
+          var extension2 = exts[i];
+          if (types[extension2]) {
+            var from = preference.indexOf(db[types[extension2]].source);
+            var to = preference.indexOf(mime.source);
+            if (types[extension2] !== "application/octet-stream" && (from > to || from === to && types[extension2].substr(0, 12) === "application/")) {
+              continue;
+            }
+          }
+          types[extension2] = type;
+        }
+      });
+    }
+  }
+});
+
+// asynckit/lib/defer.js
+var require_defer = __commonJS({
+  "asynckit/lib/defer.js"(exports2, module2) {
+    "use strict";
+    module2.exports = defer;
+    function defer(fn) {
+      var nextTick = typeof setImmediate == "function" ? setImmediate : typeof process == "object" && typeof process.nextTick == "function" ? process.nextTick : null;
+      if (nextTick) {
+        nextTick(fn);
+      } else {
+        setTimeout(fn, 0);
+      }
+    }
+  }
+});
+
+// asynckit/lib/async.js
+var require_async = __commonJS({
+  "asynckit/lib/async.js"(exports2, module2) {
+    "use strict";
+    var defer = require_defer();
+    module2.exports = async;
+    function async(callback) {
+      var isAsync = false;
+      defer(function() {
+        isAsync = true;
+      });
+      return function async_callback(err, result) {
+        if (isAsync) {
+          callback(err, result);
+        } else {
+          defer(function nextTick_callback() {
+            callback(err, result);
+          });
+        }
+      };
+    }
+  }
+});
+
+// asynckit/lib/abort.js
+var require_abort = __commonJS({
+  "asynckit/lib/abort.js"(exports2, module2) {
+    "use strict";
+    module2.exports = abort;
+    function abort(state) {
+      Object.keys(state.jobs).forEach(clean.bind(state));
+      state.jobs = {};
+    }
+    function clean(key) {
+      if (typeof this.jobs[key] == "function") {
+        this.jobs[key]();
+      }
+    }
+  }
+});
+
+// asynckit/lib/iterate.js
+var require_iterate = __commonJS({
+  "asynckit/lib/iterate.js"(exports2, module2) {
+    "use strict";
+    var async = require_async();
+    var abort = require_abort();
+    module2.exports = iterate;
+    function iterate(list, iterator, state, callback) {
+      var key = state["keyedList"] ? state["keyedList"][state.index] : state.index;
+      state.jobs[key] = runJob(iterator, key, list[key], function(error, output) {
+        if (!(key in state.jobs)) {
+          return;
+        }
+        delete state.jobs[key];
+        if (error) {
+          abort(state);
+        } else {
+          state.results[key] = output;
+        }
+        callback(error, state.results);
+      });
+    }
+    function runJob(iterator, key, item, callback) {
+      var aborter;
+      if (iterator.length == 2) {
+        aborter = iterator(item, async(callback));
+      } else {
+        aborter = iterator(item, key, async(callback));
+      }
+      return aborter;
+    }
+  }
+});
+
+// asynckit/lib/state.js
+var require_state = __commonJS({
+  "asynckit/lib/state.js"(exports2, module2) {
+    "use strict";
+    module2.exports = state;
+    function state(list, sortMethod) {
+      var isNamedList = !Array.isArray(list), initState = {
+        index: 0,
+        keyedList: isNamedList || sortMethod ? Object.keys(list) : null,
+        jobs: {},
+        results: isNamedList ? {} : [],
+        size: isNamedList ? Object.keys(list).length : list.length
+      };
+      if (sortMethod) {
+        initState.keyedList.sort(isNamedList ? sortMethod : function(a, b) {
+          return sortMethod(list[a], list[b]);
+        });
+      }
+      return initState;
+    }
+  }
+});
+
+// asynckit/lib/terminator.js
+var require_terminator = __commonJS({
+  "asynckit/lib/terminator.js"(exports2, module2) {
+    "use strict";
+    var abort = require_abort();
+    var async = require_async();
+    module2.exports = terminator;
+    function terminator(callback) {
+      if (!Object.keys(this.jobs).length) {
+        return;
+      }
+      this.index = this.size;
+      abort(this);
+      async(callback)(null, this.results);
+    }
+  }
+});
+
+// asynckit/parallel.js
+var require_parallel = __commonJS({
+  "asynckit/parallel.js"(exports2, module2) {
+    "use strict";
+    var iterate = require_iterate();
+    var initState = require_state();
+    var terminator = require_terminator();
+    module2.exports = parallel;
+    function parallel(list, iterator, callback) {
+      var state = initState(list);
+      while (state.index < (state["keyedList"] || list).length) {
+        iterate(list, iterator, state, function(error, result) {
+          if (error) {
+            callback(error, result);
+            return;
+          }
+          if (Object.keys(state.jobs).length === 0) {
+            callback(null, state.results);
+            return;
+          }
+        });
+        state.index++;
+      }
+      return terminator.bind(state, callback);
+    }
+  }
+});
+
+// asynckit/serialOrdered.js
+var require_serialOrdered = __commonJS({
+  "asynckit/serialOrdered.js"(exports2, module2) {
+    "use strict";
+    var iterate = require_iterate();
+    var initState = require_state();
+    var terminator = require_terminator();
+    module2.exports = serialOrdered;
+    module2.exports.ascending = ascending;
+    module2.exports.descending = descending;
+    function serialOrdered(list, iterator, sortMethod, callback) {
+      var state = initState(list, sortMethod);
+      iterate(list, iterator, state, function iteratorHandler(error, result) {
+        if (error) {
+          callback(error, result);
+          return;
+        }
+        state.index++;
+        if (state.index < (state["keyedList"] || list).length) {
+          iterate(list, iterator, state, iteratorHandler);
+          return;
+        }
+        callback(null, state.results);
+      });
+      return terminator.bind(state, callback);
+    }
+    function ascending(a, b) {
+      return a < b ? -1 : a > b ? 1 : 0;
+    }
+    function descending(a, b) {
+      return -1 * ascending(a, b);
+    }
+  }
+});
+
+// asynckit/serial.js
+var require_serial = __commonJS({
+  "asynckit/serial.js"(exports2, module2) {
+    "use strict";
+    var serialOrdered = require_serialOrdered();
+    module2.exports = serial;
+    function serial(list, iterator, callback) {
+      return serialOrdered(list, iterator, null, callback);
+    }
+  }
+});
+
+// asynckit/index.js
+var require_asynckit = __commonJS({
+  "asynckit/index.js"(exports2, module2) {
+    "use strict";
+    module2.exports = {
+      parallel: require_parallel(),
+      serial: require_serial(),
+      serialOrdered: require_serialOrdered()
+    };
+  }
+});
+
+// es-object-atoms/index.js
+var require_es_object_atoms = __commonJS({
+  "es-object-atoms/index.js"(exports2, module2) {
+    "use strict";
+    module2.exports = Object;
+  }
+});
+
+// es-errors/index.js
+var require_es_errors = __commonJS({
+  "es-errors/index.js"(exports2, module2) {
+    "use strict";
+    module2.exports = Error;
+  }
+});
+
+// es-errors/eval.js
+var require_eval = __commonJS({
+  "es-errors/eval.js"(exports2, module2) {
+    "use strict";
+    module2.exports = EvalError;
+  }
+});
+
+// es-errors/range.js
+var require_range = __commonJS({
+  "es-errors/range.js"(exports2, module2) {
+    "use strict";
+    module2.exports = RangeError;
+  }
+});
+
+// es-errors/ref.js
+var require_ref = __commonJS({
+  "es-errors/ref.js"(exports2, module2) {
+    "use strict";
+    module2.exports = ReferenceError;
+  }
+});
+
+// es-errors/syntax.js
+var require_syntax = __commonJS({
+  "es-errors/syntax.js"(exports2, module2) {
+    "use strict";
+    module2.exports = SyntaxError;
+  }
+});
+
+// es-errors/type.js
+var require_type = __commonJS({
+  "es-errors/type.js"(exports2, module2) {
+    "use strict";
+    module2.exports = TypeError;
+  }
+});
+
+// es-errors/uri.js
+var require_uri = __commonJS({
+  "es-errors/uri.js"(exports2, module2) {
+    "use strict";
+    module2.exports = URIError;
+  }
+});
+
+// math-intrinsics/abs.js
+var require_abs = __commonJS({
+  "math-intrinsics/abs.js"(exports2, module2) {
+    "use strict";
+    module2.exports = Math.abs;
+  }
+});
+
+// math-intrinsics/floor.js
+var require_floor = __commonJS({
+  "math-intrinsics/floor.js"(exports2, module2) {
+    "use strict";
+    module2.exports = Math.floor;
+  }
+});
+
+// math-intrinsics/max.js
+var require_max = __commonJS({
+  "math-intrinsics/max.js"(exports2, module2) {
+    "use strict";
+    module2.exports = Math.max;
+  }
+});
+
+// math-intrinsics/min.js
+var require_min = __commonJS({
+  "math-intrinsics/min.js"(exports2, module2) {
+    "use strict";
+    module2.exports = Math.min;
+  }
+});
+
+// math-intrinsics/pow.js
+var require_pow = __commonJS({
+  "math-intrinsics/pow.js"(exports2, module2) {
+    "use strict";
+    module2.exports = Math.pow;
+  }
+});
+
+// math-intrinsics/round.js
+var require_round = __commonJS({
+  "math-intrinsics/round.js"(exports2, module2) {
+    "use strict";
+    module2.exports = Math.round;
+  }
+});
+
+// math-intrinsics/isNaN.js
+var require_isNaN = __commonJS({
+  "math-intrinsics/isNaN.js"(exports2, module2) {
+    "use strict";
+    module2.exports = Number.isNaN || function isNaN2(a) {
+      return a !== a;
+    };
+  }
+});
+
+// math-intrinsics/sign.js
+var require_sign = __commonJS({
+  "math-intrinsics/sign.js"(exports2, module2) {
+    "use strict";
+    var $isNaN = require_isNaN();
+    module2.exports = function sign(number) {
+      if ($isNaN(number) || number === 0) {
+        return number;
+      }
+      return number < 0 ? -1 : 1;
+    };
+  }
+});
+
+// gopd/gOPD.js
+var require_gOPD = __commonJS({
+  "gopd/gOPD.js"(exports2, module2) {
+    "use strict";
+    module2.exports = Object.getOwnPropertyDescriptor;
+  }
+});
+
+// gopd/index.js
+var require_gopd = __commonJS({
+  "gopd/index.js"(exports2, module2) {
+    "use strict";
+    var $gOPD = require_gOPD();
+    if ($gOPD) {
+      try {
+        $gOPD([], "length");
+      } catch (e) {
+        $gOPD = null;
+      }
+    }
+    module2.exports = $gOPD;
+  }
+});
+
+// es-define-property/index.js
+var require_es_define_property = __commonJS({
+  "es-define-property/index.js"(exports2, module2) {
+    "use strict";
+    var $defineProperty = Object.defineProperty || false;
+    if ($defineProperty) {
+      try {
+        $defineProperty({}, "a", { value: 1 });
+      } catch (e) {
+        $defineProperty = false;
+      }
+    }
+    module2.exports = $defineProperty;
+  }
+});
+
+// has-symbols/shams.js
+var require_shams = __commonJS({
+  "has-symbols/shams.js"(exports2, module2) {
+    "use strict";
+    module2.exports = function hasSymbols() {
+      if (typeof Symbol !== "function" || typeof Object.getOwnPropertySymbols !== "function") {
+        return false;
+      }
+      if (typeof Symbol.iterator === "symbol") {
+        return true;
+      }
+      var obj = {};
+      var sym = Symbol("test");
+      var symObj = Object(sym);
+      if (typeof sym === "string") {
+        return false;
+      }
+      if (Object.prototype.toString.call(sym) !== "[object Symbol]") {
+        return false;
+      }
+      if (Object.prototype.toString.call(symObj) !== "[object Symbol]") {
+        return false;
+      }
+      var symVal = 42;
+      obj[sym] = symVal;
+      for (var _ in obj) {
+        return false;
+      }
+      if (typeof Object.keys === "function" && Object.keys(obj).length !== 0) {
+        return false;
+      }
+      if (typeof Object.getOwnPropertyNames === "function" && Object.getOwnPropertyNames(obj).length !== 0) {
+        return false;
+      }
+      var syms = Object.getOwnPropertySymbols(obj);
+      if (syms.length !== 1 || syms[0] !== sym) {
+        return false;
+      }
+      if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) {
+        return false;
+      }
+      if (typeof Object.getOwnPropertyDescriptor === "function") {
+        var descriptor = (
+          /** @type {PropertyDescriptor} */
+          Object.getOwnPropertyDescriptor(obj, sym)
+        );
+        if (descriptor.value !== symVal || descriptor.enumerable !== true) {
+          return false;
+        }
+      }
+      return true;
+    };
+  }
+});
+
+// has-symbols/index.js
+var require_has_symbols = __commonJS({
+  "has-symbols/index.js"(exports2, module2) {
+    "use strict";
+    var origSymbol = typeof Symbol !== "undefined" && Symbol;
+    var hasSymbolSham = require_shams();
+    module2.exports = function hasNativeSymbols() {
+      if (typeof origSymbol !== "function") {
+        return false;
+      }
+      if (typeof Symbol !== "function") {
+        return false;
+      }
+      if (typeof origSymbol("foo") !== "symbol") {
+        return false;
+      }
+      if (typeof Symbol("bar") !== "symbol") {
+        return false;
+      }
+      return hasSymbolSham();
+    };
+  }
+});
+
+// get-proto/Reflect.getPrototypeOf.js
+var require_Reflect_getPrototypeOf = __commonJS({
+  "get-proto/Reflect.getPrototypeOf.js"(exports2, module2) {
+    "use strict";
+    module2.exports = typeof Reflect !== "undefined" && Reflect.getPrototypeOf || null;
+  }
+});
+
+// get-proto/Object.getPrototypeOf.js
+var require_Object_getPrototypeOf = __commonJS({
+  "get-proto/Object.getPrototypeOf.js"(exports2, module2) {
+    "use strict";
+    var $Object = require_es_object_atoms();
+    module2.exports = $Object.getPrototypeOf || null;
+  }
+});
+
+// function-bind/implementation.js
+var require_implementation = __commonJS({
+  "function-bind/implementation.js"(exports2, module2) {
+    "use strict";
+    var ERROR_MESSAGE = "Function.prototype.bind called on incompatible ";
+    var toStr = Object.prototype.toString;
+    var max = Math.max;
+    var funcType = "[object Function]";
+    var concatty = function concatty2(a, b) {
+      var arr = [];
+      for (var i = 0; i < a.length; i += 1) {
+        arr[i] = a[i];
+      }
+      for (var j = 0; j < b.length; j += 1) {
+        arr[j + a.length] = b[j];
+      }
+      return arr;
+    };
+    var slicy = function slicy2(arrLike, offset) {
+      var arr = [];
+      for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {
+        arr[j] = arrLike[i];
+      }
+      return arr;
+    };
+    var joiny = function(arr, joiner) {
+      var str = "";
+      for (var i = 0; i < arr.length; i += 1) {
+        str += arr[i];
+        if (i + 1 < arr.length) {
+          str += joiner;
+        }
+      }
+      return str;
+    };
+    module2.exports = function bind(that) {
+      var target = this;
+      if (typeof target !== "function" || toStr.apply(target) !== funcType) {
+        throw new TypeError(ERROR_MESSAGE + target);
+      }
+      var args = slicy(arguments, 1);
+      var bound;
+      var binder = function() {
+        if (this instanceof bound) {
+          var result = target.apply(
+            this,
+            concatty(args, arguments)
+          );
+          if (Object(result) === result) {
+            return result;
+          }
+          return this;
+        }
+        return target.apply(
+          that,
+          concatty(args, arguments)
+        );
+      };
+      var boundLength = max(0, target.length - args.length);
+      var boundArgs = [];
+      for (var i = 0; i < boundLength; i++) {
+        boundArgs[i] = "$" + i;
+      }
+      bound = Function("binder", "return function (" + joiny(boundArgs, ",") + "){ return binder.apply(this,arguments); }")(binder);
+      if (target.prototype) {
+        var Empty = function Empty2() {
+        };
+        Empty.prototype = target.prototype;
+        bound.prototype = new Empty();
+        Empty.prototype = null;
+      }
+      return bound;
+    };
+  }
+});
+
+// function-bind/index.js
+var require_function_bind = __commonJS({
+  "function-bind/index.js"(exports2, module2) {
+    "use strict";
+    var implementation = require_implementation();
+    module2.exports = Function.prototype.bind || implementation;
+  }
+});
+
+// call-bind-apply-helpers/functionCall.js
+var require_functionCall = __commonJS({
+  "call-bind-apply-helpers/functionCall.js"(exports2, module2) {
+    "use strict";
+    module2.exports = Function.prototype.call;
+  }
+});
+
+// call-bind-apply-helpers/functionApply.js
+var require_functionApply = __commonJS({
+  "call-bind-apply-helpers/functionApply.js"(exports2, module2) {
+    "use strict";
+    module2.exports = Function.prototype.apply;
+  }
+});
+
+// call-bind-apply-helpers/reflectApply.js
+var require_reflectApply = __commonJS({
+  "call-bind-apply-helpers/reflectApply.js"(exports2, module2) {
+    "use strict";
+    module2.exports = typeof Reflect !== "undefined" && Reflect && Reflect.apply;
+  }
+});
+
+// call-bind-apply-helpers/actualApply.js
+var require_actualApply = __commonJS({
+  "call-bind-apply-helpers/actualApply.js"(exports2, module2) {
+    "use strict";
+    var bind = require_function_bind();
+    var $apply = require_functionApply();
+    var $call = require_functionCall();
+    var $reflectApply = require_reflectApply();
+    module2.exports = $reflectApply || bind.call($call, $apply);
+  }
+});
+
+// call-bind-apply-helpers/index.js
+var require_call_bind_apply_helpers = __commonJS({
+  "call-bind-apply-helpers/index.js"(exports2, module2) {
+    "use strict";
+    var bind = require_function_bind();
+    var $TypeError = require_type();
+    var $call = require_functionCall();
+    var $actualApply = require_actualApply();
+    module2.exports = function callBindBasic(args) {
+      if (args.length < 1 || typeof args[0] !== "function") {
+        throw new $TypeError("a function is required");
+      }
+      return $actualApply(bind, $call, args);
+    };
+  }
+});
+
+// dunder-proto/get.js
+var require_get = __commonJS({
+  "dunder-proto/get.js"(exports2, module2) {
+    "use strict";
+    var callBind = require_call_bind_apply_helpers();
+    var gOPD = require_gopd();
+    var hasProtoAccessor;
+    try {
+      hasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */
+      [].__proto__ === Array.prototype;
+    } catch (e) {
+      if (!e || typeof e !== "object" || !("code" in e) || e.code !== "ERR_PROTO_ACCESS") {
+        throw e;
+      }
+    }
+    var desc = !!hasProtoAccessor && gOPD && gOPD(
+      Object.prototype,
+      /** @type {keyof typeof Object.prototype} */
+      "__proto__"
+    );
+    var $Object = Object;
+    var $getPrototypeOf = $Object.getPrototypeOf;
+    module2.exports = desc && typeof desc.get === "function" ? callBind([desc.get]) : typeof $getPrototypeOf === "function" ? (
+      /** @type {import('./get')} */
+      function getDunder(value) {
+        return $getPrototypeOf(value == null ? value : $Object(value));
+      }
+    ) : false;
+  }
+});
+
+// get-proto/index.js
+var require_get_proto = __commonJS({
+  "get-proto/index.js"(exports2, module2) {
+    "use strict";
+    var reflectGetProto = require_Reflect_getPrototypeOf();
+    var originalGetProto = require_Object_getPrototypeOf();
+    var getDunderProto = require_get();
+    module2.exports = reflectGetProto ? function getProto(O) {
+      return reflectGetProto(O);
+    } : originalGetProto ? function getProto(O) {
+      if (!O || typeof O !== "object" && typeof O !== "function") {
+        throw new TypeError("getProto: not an object");
+      }
+      return originalGetProto(O);
+    } : getDunderProto ? function getProto(O) {
+      return getDunderProto(O);
+    } : null;
+  }
+});
+
+// hasown/index.js
+var require_hasown = __commonJS({
+  "hasown/index.js"(exports2, module2) {
+    "use strict";
+    var call = Function.prototype.call;
+    var $hasOwn = Object.prototype.hasOwnProperty;
+    var bind = require_function_bind();
+    module2.exports = bind.call(call, $hasOwn);
+  }
+});
+
+// get-intrinsic/index.js
+var require_get_intrinsic = __commonJS({
+  "get-intrinsic/index.js"(exports2, module2) {
+    "use strict";
+    var undefined2;
+    var $Object = require_es_object_atoms();
+    var $Error = require_es_errors();
+    var $EvalError = require_eval();
+    var $RangeError = require_range();
+    var $ReferenceError = require_ref();
+    var $SyntaxError = require_syntax();
+    var $TypeError = require_type();
+    var $URIError = require_uri();
+    var abs = require_abs();
+    var floor = require_floor();
+    var max = require_max();
+    var min = require_min();
+    var pow = require_pow();
+    var round = require_round();
+    var sign = require_sign();
+    var $Function = Function;
+    var getEvalledConstructor = function(expressionSyntax) {
+      try {
+        return $Function('"use strict"; return (' + expressionSyntax + ").constructor;")();
+      } catch (e) {
+      }
+    };
+    var $gOPD = require_gopd();
+    var $defineProperty = require_es_define_property();
+    var throwTypeError = function() {
+      throw new $TypeError();
+    };
+    var ThrowTypeError = $gOPD ? (function() {
+      try {
+        arguments.callee;
+        return throwTypeError;
+      } catch (calleeThrows) {
+        try {
+          return $gOPD(arguments, "callee").get;
+        } catch (gOPDthrows) {
+          return throwTypeError;
+        }
+      }
+    })() : throwTypeError;
+    var hasSymbols = require_has_symbols()();
+    var getProto = require_get_proto();
+    var $ObjectGPO = require_Object_getPrototypeOf();
+    var $ReflectGPO = require_Reflect_getPrototypeOf();
+    var $apply = require_functionApply();
+    var $call = require_functionCall();
+    var needsEval = {};
+    var TypedArray = typeof Uint8Array === "undefined" || !getProto ? undefined2 : getProto(Uint8Array);
+    var INTRINSICS = {
+      __proto__: null,
+      "%AggregateError%": typeof AggregateError === "undefined" ? undefined2 : AggregateError,
+      "%Array%": Array,
+      "%ArrayBuffer%": typeof ArrayBuffer === "undefined" ? undefined2 : ArrayBuffer,
+      "%ArrayIteratorPrototype%": hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined2,
+      "%AsyncFromSyncIteratorPrototype%": undefined2,
+      "%AsyncFunction%": needsEval,
+      "%AsyncGenerator%": needsEval,
+      "%AsyncGeneratorFunction%": needsEval,
+      "%AsyncIteratorPrototype%": needsEval,
+      "%Atomics%": typeof Atomics === "undefined" ? undefined2 : Atomics,
+      "%BigInt%": typeof BigInt === "undefined" ? undefined2 : BigInt,
+      "%BigInt64Array%": typeof BigInt64Array === "undefined" ? undefined2 : BigInt64Array,
+      "%BigUint64Array%": typeof BigUint64Array === "undefined" ? undefined2 : BigUint64Array,
+      "%Boolean%": Boolean,
+      "%DataView%": typeof DataView === "undefined" ? undefined2 : DataView,
+      "%Date%": Date,
+      "%decodeURI%": decodeURI,
+      "%decodeURIComponent%": decodeURIComponent,
+      "%encodeURI%": encodeURI,
+      "%encodeURIComponent%": encodeURIComponent,
+      "%Error%": $Error,
+      "%eval%": eval,
+      // eslint-disable-line no-eval
+      "%EvalError%": $EvalError,
+      "%Float16Array%": typeof Float16Array === "undefined" ? undefined2 : Float16Array,
+      "%Float32Array%": typeof Float32Array === "undefined" ? undefined2 : Float32Array,
+      "%Float64Array%": typeof Float64Array === "undefined" ? undefined2 : Float64Array,
+      "%FinalizationRegistry%": typeof FinalizationRegistry === "undefined" ? undefined2 : FinalizationRegistry,
+      "%Function%": $Function,
+      "%GeneratorFunction%": needsEval,
+      "%Int8Array%": typeof Int8Array === "undefined" ? undefined2 : Int8Array,
+      "%Int16Array%": typeof Int16Array === "undefined" ? undefined2 : Int16Array,
+      "%Int32Array%": typeof Int32Array === "undefined" ? undefined2 : Int32Array,
+      "%isFinite%": isFinite,
+      "%isNaN%": isNaN,
+      "%IteratorPrototype%": hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined2,
+      "%JSON%": typeof JSON === "object" ? JSON : undefined2,
+      "%Map%": typeof Map === "undefined" ? undefined2 : Map,
+      "%MapIteratorPrototype%": typeof Map === "undefined" || !hasSymbols || !getProto ? undefined2 : getProto((/* @__PURE__ */ new Map())[Symbol.iterator]()),
+      "%Math%": Math,
+      "%Number%": Number,
+      "%Object%": $Object,
+      "%Object.getOwnPropertyDescriptor%": $gOPD,
+      "%parseFloat%": parseFloat,
+      "%parseInt%": parseInt,
+      "%Promise%": typeof Promise === "undefined" ? undefined2 : Promise,
+      "%Proxy%": typeof Proxy === "undefined" ? undefined2 : Proxy,
+      "%RangeError%": $RangeError,
+      "%ReferenceError%": $ReferenceError,
+      "%Reflect%": typeof Reflect === "undefined" ? undefined2 : Reflect,
+      "%RegExp%": RegExp,
+      "%Set%": typeof Set === "undefined" ? undefined2 : Set,
+      "%SetIteratorPrototype%": typeof Set === "undefined" || !hasSymbols || !getProto ? undefined2 : getProto((/* @__PURE__ */ new Set())[Symbol.iterator]()),
+      "%SharedArrayBuffer%": typeof SharedArrayBuffer === "undefined" ? undefined2 : SharedArrayBuffer,
+      "%String%": String,
+      "%StringIteratorPrototype%": hasSymbols && getProto ? getProto(""[Symbol.iterator]()) : undefined2,
+      "%Symbol%": hasSymbols ? Symbol : undefined2,
+      "%SyntaxError%": $SyntaxError,
+      "%ThrowTypeError%": ThrowTypeError,
+      "%TypedArray%": TypedArray,
+      "%TypeError%": $TypeError,
+      "%Uint8Array%": typeof Uint8Array === "undefined" ? undefined2 : Uint8Array,
+      "%Uint8ClampedArray%": typeof Uint8ClampedArray === "undefined" ? undefined2 : Uint8ClampedArray,
+      "%Uint16Array%": typeof Uint16Array === "undefined" ? undefined2 : Uint16Array,
+      "%Uint32Array%": typeof Uint32Array === "undefined" ? undefined2 : Uint32Array,
+      "%URIError%": $URIError,
+      "%WeakMap%": typeof WeakMap === "undefined" ? undefined2 : WeakMap,
+      "%WeakRef%": typeof WeakRef === "undefined" ? undefined2 : WeakRef,
+      "%WeakSet%": typeof WeakSet === "undefined" ? undefined2 : WeakSet,
+      "%Function.prototype.call%": $call,
+      "%Function.prototype.apply%": $apply,
+      "%Object.defineProperty%": $defineProperty,
+      "%Object.getPrototypeOf%": $ObjectGPO,
+      "%Math.abs%": abs,
+      "%Math.floor%": floor,
+      "%Math.max%": max,
+      "%Math.min%": min,
+      "%Math.pow%": pow,
+      "%Math.round%": round,
+      "%Math.sign%": sign,
+      "%Reflect.getPrototypeOf%": $ReflectGPO
+    };
+    if (getProto) {
+      try {
+        null.error;
+      } catch (e) {
+        errorProto = getProto(getProto(e));
+        INTRINSICS["%Error.prototype%"] = errorProto;
+      }
+    }
+    var errorProto;
+    var doEval = function doEval2(name) {
+      var value;
+      if (name === "%AsyncFunction%") {
+        value = getEvalledConstructor("async function () {}");
+      } else if (name === "%GeneratorFunction%") {
+        value = getEvalledConstructor("function* () {}");
+      } else if (name === "%AsyncGeneratorFunction%") {
+        value = getEvalledConstructor("async function* () {}");
+      } else if (name === "%AsyncGenerator%") {
+        var fn = doEval2("%AsyncGeneratorFunction%");
+        if (fn) {
+          value = fn.prototype;
+        }
+      } else if (name === "%AsyncIteratorPrototype%") {
+        var gen = doEval2("%AsyncGenerator%");
+        if (gen && getProto) {
+          value = getProto(gen.prototype);
+        }
+      }
+      INTRINSICS[name] = value;
+      return value;
+    };
+    var LEGACY_ALIASES = {
+      __proto__: null,
+      "%ArrayBufferPrototype%": ["ArrayBuffer", "prototype"],
+      "%ArrayPrototype%": ["Array", "prototype"],
+      "%ArrayProto_entries%": ["Array", "prototype", "entries"],
+      "%ArrayProto_forEach%": ["Array", "prototype", "forEach"],
+      "%ArrayProto_keys%": ["Array", "prototype", "keys"],
+      "%ArrayProto_values%": ["Array", "prototype", "values"],
+      "%AsyncFunctionPrototype%": ["AsyncFunction", "prototype"],
+      "%AsyncGenerator%": ["AsyncGeneratorFunction", "prototype"],
+      "%AsyncGeneratorPrototype%": ["AsyncGeneratorFunction", "prototype", "prototype"],
+      "%BooleanPrototype%": ["Boolean", "prototype"],
+      "%DataViewPrototype%": ["DataView", "prototype"],
+      "%DatePrototype%": ["Date", "prototype"],
+      "%ErrorPrototype%": ["Error", "prototype"],
+      "%EvalErrorPrototype%": ["EvalError", "prototype"],
+      "%Float32ArrayPrototype%": ["Float32Array", "prototype"],
+      "%Float64ArrayPrototype%": ["Float64Array", "prototype"],
+      "%FunctionPrototype%": ["Function", "prototype"],
+      "%Generator%": ["GeneratorFunction", "prototype"],
+      "%GeneratorPrototype%": ["GeneratorFunction", "prototype", "prototype"],
+      "%Int8ArrayPrototype%": ["Int8Array", "prototype"],
+      "%Int16ArrayPrototype%": ["Int16Array", "prototype"],
+      "%Int32ArrayPrototype%": ["Int32Array", "prototype"],
+      "%JSONParse%": ["JSON", "parse"],
+      "%JSONStringify%": ["JSON", "stringify"],
+      "%MapPrototype%": ["Map", "prototype"],
+      "%NumberPrototype%": ["Number", "prototype"],
+      "%ObjectPrototype%": ["Object", "prototype"],
+      "%ObjProto_toString%": ["Object", "prototype", "toString"],
+      "%ObjProto_valueOf%": ["Object", "prototype", "valueOf"],
+      "%PromisePrototype%": ["Promise", "prototype"],
+      "%PromiseProto_then%": ["Promise", "prototype", "then"],
+      "%Promise_all%": ["Promise", "all"],
+      "%Promise_reject%": ["Promise", "reject"],
+      "%Promise_resolve%": ["Promise", "resolve"],
+      "%RangeErrorPrototype%": ["RangeError", "prototype"],
+      "%ReferenceErrorPrototype%": ["ReferenceError", "prototype"],
+      "%RegExpPrototype%": ["RegExp", "prototype"],
+      "%SetPrototype%": ["Set", "prototype"],
+      "%SharedArrayBufferPrototype%": ["SharedArrayBuffer", "prototype"],
+      "%StringPrototype%": ["String", "prototype"],
+      "%SymbolPrototype%": ["Symbol", "prototype"],
+      "%SyntaxErrorPrototype%": ["SyntaxError", "prototype"],
+      "%TypedArrayPrototype%": ["TypedArray", "prototype"],
+      "%TypeErrorPrototype%": ["TypeError", "prototype"],
+      "%Uint8ArrayPrototype%": ["Uint8Array", "prototype"],
+      "%Uint8ClampedArrayPrototype%": ["Uint8ClampedArray", "prototype"],
+      "%Uint16ArrayPrototype%": ["Uint16Array", "prototype"],
+      "%Uint32ArrayPrototype%": ["Uint32Array", "prototype"],
+      "%URIErrorPrototype%": ["URIError", "prototype"],
+      "%WeakMapPrototype%": ["WeakMap", "prototype"],
+      "%WeakSetPrototype%": ["WeakSet", "prototype"]
+    };
+    var bind = require_function_bind();
+    var hasOwn = require_hasown();
+    var $concat = bind.call($call, Array.prototype.concat);
+    var $spliceApply = bind.call($apply, Array.prototype.splice);
+    var $replace = bind.call($call, String.prototype.replace);
+    var $strSlice = bind.call($call, String.prototype.slice);
+    var $exec = bind.call($call, RegExp.prototype.exec);
+    var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g;
+    var reEscapeChar = /\\(\\)?/g;
+    var stringToPath = function stringToPath2(string) {
+      var first = $strSlice(string, 0, 1);
+      var last = $strSlice(string, -1);
+      if (first === "%" && last !== "%") {
+        throw new $SyntaxError("invalid intrinsic syntax, expected closing `%`");
+      } else if (last === "%" && first !== "%") {
+        throw new $SyntaxError("invalid intrinsic syntax, expected opening `%`");
+      }
+      var result = [];
+      $replace(string, rePropName, function(match, number, quote, subString) {
+        result[result.length] = quote ? $replace(subString, reEscapeChar, "$1") : number || match;
+      });
+      return result;
+    };
+    var getBaseIntrinsic = function getBaseIntrinsic2(name, allowMissing) {
+      var intrinsicName = name;
+      var alias;
+      if (hasOwn(LEGACY_ALIASES, intrinsicName)) {
+        alias = LEGACY_ALIASES[intrinsicName];
+        intrinsicName = "%" + alias[0] + "%";
+      }
+      if (hasOwn(INTRINSICS, intrinsicName)) {
+        var value = INTRINSICS[intrinsicName];
+        if (value === needsEval) {
+          value = doEval(intrinsicName);
+        }
+        if (typeof value === "undefined" && !allowMissing) {
+          throw new $TypeError("intrinsic " + name + " exists, but is not available. Please file an issue!");
+        }
+        return {
+          alias,
+          name: intrinsicName,
+          value
+        };
+      }
+      throw new $SyntaxError("intrinsic " + name + " does not exist!");
+    };
+    module2.exports = function GetIntrinsic(name, allowMissing) {
+      if (typeof name !== "string" || name.length === 0) {
+        throw new $TypeError("intrinsic name must be a non-empty string");
+      }
+      if (arguments.length > 1 && typeof allowMissing !== "boolean") {
+        throw new $TypeError('"allowMissing" argument must be a boolean');
+      }
+      if ($exec(/^%?[^%]*%?$/, name) === null) {
+        throw new $SyntaxError("`%` may not be present anywhere but at the beginning and end of the intrinsic name");
+      }
+      var parts = stringToPath(name);
+      var intrinsicBaseName = parts.length > 0 ? parts[0] : "";
+      var intrinsic = getBaseIntrinsic("%" + intrinsicBaseName + "%", allowMissing);
+      var intrinsicRealName = intrinsic.name;
+      var value = intrinsic.value;
+      var skipFurtherCaching = false;
+      var alias = intrinsic.alias;
+      if (alias) {
+        intrinsicBaseName = alias[0];
+        $spliceApply(parts, $concat([0, 1], alias));
+      }
+      for (var i = 1, isOwn = true; i < parts.length; i += 1) {
+        var part = parts[i];
+        var first = $strSlice(part, 0, 1);
+        var last = $strSlice(part, -1);
+        if ((first === '"' || first === "'" || first === "`" || (last === '"' || last === "'" || last === "`")) && first !== last) {
+          throw new $SyntaxError("property names with quotes must have matching quotes");
+        }
+        if (part === "constructor" || !isOwn) {
+          skipFurtherCaching = true;
+        }
+        intrinsicBaseName += "." + part;
+        intrinsicRealName = "%" + intrinsicBaseName + "%";
+        if (hasOwn(INTRINSICS, intrinsicRealName)) {
+          value = INTRINSICS[intrinsicRealName];
+        } else if (value != null) {
+          if (!(part in value)) {
+            if (!allowMissing) {
+              throw new $TypeError("base intrinsic for " + name + " exists, but the property is not available.");
+            }
+            return void undefined2;
+          }
+          if ($gOPD && i + 1 >= parts.length) {
+            var desc = $gOPD(value, part);
+            isOwn = !!desc;
+            if (isOwn && "get" in desc && !("originalValue" in desc.get)) {
+              value = desc.get;
+            } else {
+              value = value[part];
+            }
+          } else {
+            isOwn = hasOwn(value, part);
+            value = value[part];
+          }
+          if (isOwn && !skipFurtherCaching) {
+            INTRINSICS[intrinsicRealName] = value;
+          }
+        }
+      }
+      return value;
+    };
+  }
+});
+
+// has-tostringtag/shams.js
+var require_shams2 = __commonJS({
+  "has-tostringtag/shams.js"(exports2, module2) {
+    "use strict";
+    var hasSymbols = require_shams();
+    module2.exports = function hasToStringTagShams() {
+      return hasSymbols() && !!Symbol.toStringTag;
+    };
+  }
+});
+
+// es-set-tostringtag/index.js
+var require_es_set_tostringtag = __commonJS({
+  "es-set-tostringtag/index.js"(exports2, module2) {
+    "use strict";
+    var GetIntrinsic = require_get_intrinsic();
+    var $defineProperty = GetIntrinsic("%Object.defineProperty%", true);
+    var hasToStringTag = require_shams2()();
+    var hasOwn = require_hasown();
+    var $TypeError = require_type();
+    var toStringTag = hasToStringTag ? Symbol.toStringTag : null;
+    module2.exports = function setToStringTag(object, value) {
+      var overrideIfSet = arguments.length > 2 && !!arguments[2] && arguments[2].force;
+      var nonConfigurable = arguments.length > 2 && !!arguments[2] && arguments[2].nonConfigurable;
+      if (typeof overrideIfSet !== "undefined" && typeof overrideIfSet !== "boolean" || typeof nonConfigurable !== "undefined" && typeof nonConfigurable !== "boolean") {
+        throw new $TypeError("if provided, the `overrideIfSet` and `nonConfigurable` options must be booleans");
+      }
+      if (toStringTag && (overrideIfSet || !hasOwn(object, toStringTag))) {
+        if ($defineProperty) {
+          $defineProperty(object, toStringTag, {
+            configurable: !nonConfigurable,
+            enumerable: false,
+            value,
+            writable: false
+          });
+        } else {
+          object[toStringTag] = value;
+        }
+      }
+    };
+  }
+});
+
+// form-data/lib/populate.js
+var require_populate = __commonJS({
+  "form-data/lib/populate.js"(exports2, module2) {
+    "use strict";
+    module2.exports = function(dst, src) {
+      Object.keys(src).forEach(function(prop) {
+        dst[prop] = dst[prop] || src[prop];
+      });
+      return dst;
+    };
+  }
+});
+
+// form-data/lib/form_data.js
+var require_form_data = __commonJS({
+  "form-data/lib/form_data.js"(exports2, module2) {
+    "use strict";
+    var CombinedStream = require_combined_stream();
+    var util = require("node:util");
+    var path4 = require("node:path");
+    var http = require("node:http");
+    var https = require("node:https");
+    var parseUrl = require("node:url").parse;
+    var fs = require("node:fs");
+    var Stream = require("node:stream").Stream;
+    var crypto = require("node:crypto");
+    var mime = require_mime_types();
+    var asynckit = require_asynckit();
+    var setToStringTag = require_es_set_tostringtag();
+    var hasOwn = require_hasown();
+    var populate = require_populate();
+    function FormData2(options) {
+      if (!(this instanceof FormData2)) {
+        return new FormData2(options);
+      }
+      this._overheadLength = 0;
+      this._valueLength = 0;
+      this._valuesToMeasure = [];
+      CombinedStream.call(this);
+      options = options || {};
+      for (var option in options) {
+        this[option] = options[option];
+      }
+    }
+    util.inherits(FormData2, CombinedStream);
+    FormData2.LINE_BREAK = "\r\n";
+    FormData2.DEFAULT_CONTENT_TYPE = "application/octet-stream";
+    FormData2.prototype.append = function(field, value, options) {
+      options = options || {};
+      if (typeof options === "string") {
+        options = { filename: options };
+      }
+      var append = CombinedStream.prototype.append.bind(this);
+      if (typeof value === "number" || value == null) {
+        value = String(value);
+      }
+      if (Array.isArray(value)) {
+        this._error(new Error("Arrays are not supported."));
+        return;
+      }
+      var header = this._multiPartHeader(field, value, options);
+      var footer = this._multiPartFooter();
+      append(header);
+      append(value);
+      append(footer);
+      this._trackLength(header, value, options);
+    };
+    FormData2.prototype._trackLength = function(header, value, options) {
+      var valueLength = 0;
+      if (options.knownLength != null) {
+        valueLength += Number(options.knownLength);
+      } else if (Buffer.isBuffer(value)) {
+        valueLength = value.length;
+      } else if (typeof value === "string") {
+        valueLength = Buffer.byteLength(value);
+      }
+      this._valueLength += valueLength;
+      this._overheadLength += Buffer.byteLength(header) + FormData2.LINE_BREAK.length;
+      if (!value || !value.path && !(value.readable && hasOwn(value, "httpVersion")) && !(value instanceof Stream)) {
+        return;
+      }
+      if (!options.knownLength) {
+        this._valuesToMeasure.push(value);
+      }
+    };
+    FormData2.prototype._lengthRetriever = function(value, callback) {
+      if (hasOwn(value, "fd")) {
+        if (value.end != void 0 && value.end != Infinity && value.start != void 0) {
+          callback(null, value.end + 1 - (value.start ? value.start : 0));
+        } else {
+          fs.stat(value.path, function(err, stat) {
+            if (err) {
+              callback(err);
+              return;
+            }
+            var fileSize = stat.size - (value.start ? value.start : 0);
+            callback(null, fileSize);
+          });
+        }
+      } else if (hasOwn(value, "httpVersion")) {
+        callback(null, Number(value.headers["content-length"]));
+      } else if (hasOwn(value, "httpModule")) {
+        value.on("response", function(response) {
+          value.pause();
+          callback(null, Number(response.headers["content-length"]));
+        });
+        value.resume();
+      } else {
+        callback("Unknown stream");
+      }
+    };
+    FormData2.prototype._multiPartHeader = function(field, value, options) {
+      if (typeof options.header === "string") {
+        return options.header;
+      }
+      var contentDisposition = this._getContentDisposition(value, options);
+      var contentType = this._getContentType(value, options);
+      var contents = "";
+      var headers = {
+        // add custom disposition as third element or keep it two elements if not
+        "Content-Disposition": ["form-data", 'name="' + field + '"'].concat(contentDisposition || []),
+        // if no content type. allow it to be empty array
+        "Content-Type": [].concat(contentType || [])
+      };
+      if (typeof options.header === "object") {
+        populate(headers, options.header);
+      }
+      var header;
+      for (var prop in headers) {
+        if (hasOwn(headers, prop)) {
+          header = headers[prop];
+          if (header == null) {
+            continue;
+          }
+          if (!Array.isArray(header)) {
+            header = [header];
+          }
+          if (header.length) {
+            contents += prop + ": " + header.join("; ") + FormData2.LINE_BREAK;
+          }
+        }
+      }
+      return "--" + this.getBoundary() + FormData2.LINE_BREAK + contents + FormData2.LINE_BREAK;
+    };
+    FormData2.prototype._getContentDisposition = function(value, options) {
+      var filename;
+      if (typeof options.filepath === "string") {
+        filename = path4.normalize(options.filepath).replace(/\\/g, "/");
+      } else if (options.filename || value && (value.name || value.path)) {
+        filename = path4.basename(options.filename || value && (value.name || value.path));
+      } else if (value && value.readable && hasOwn(value, "httpVersion")) {
+        filename = path4.basename(value.client._httpMessage.path || "");
+      }
+      if (filename) {
+        return 'filename="' + filename + '"';
+      }
+    };
+    FormData2.prototype._getContentType = function(value, options) {
+      var contentType = options.contentType;
+      if (!contentType && value && value.name) {
+        contentType = mime.lookup(value.name);
+      }
+      if (!contentType && value && value.path) {
+        contentType = mime.lookup(value.path);
+      }
+      if (!contentType && value && value.readable && hasOwn(value, "httpVersion")) {
+        contentType = value.headers["content-type"];
+      }
+      if (!contentType && (options.filepath || options.filename)) {
+        contentType = mime.lookup(options.filepath || options.filename);
+      }
+      if (!contentType && value && typeof value === "object") {
+        contentType = FormData2.DEFAULT_CONTENT_TYPE;
+      }
+      return contentType;
+    };
+    FormData2.prototype._multiPartFooter = function() {
+      return function(next) {
+        var footer = FormData2.LINE_BREAK;
+        var lastPart = this._streams.length === 0;
+        if (lastPart) {
+          footer += this._lastBoundary();
+        }
+        next(footer);
+      }.bind(this);
+    };
+    FormData2.prototype._lastBoundary = function() {
+      return "--" + this.getBoundary() + "--" + FormData2.LINE_BREAK;
+    };
+    FormData2.prototype.getHeaders = function(userHeaders) {
+      var header;
+      var formHeaders = {
+        "content-type": "multipart/form-data; boundary=" + this.getBoundary()
+      };
+      for (header in userHeaders) {
+        if (hasOwn(userHeaders, header)) {
+          formHeaders[header.toLowerCase()] = userHeaders[header];
+        }
+      }
+      return formHeaders;
+    };
+    FormData2.prototype.setBoundary = function(boundary) {
+      if (typeof boundary !== "string") {
+        throw new TypeError("FormData boundary must be a string");
+      }
+      this._boundary = boundary;
+    };
+    FormData2.prototype.getBoundary = function() {
+      if (!this._boundary) {
+        this._generateBoundary();
+      }
+      return this._boundary;
+    };
+    FormData2.prototype.getBuffer = function() {
+      var dataBuffer = new Buffer.alloc(0);
+      var boundary = this.getBoundary();
+      for (var i = 0, len = this._streams.length; i < len; i++) {
+        if (typeof this._streams[i] !== "function") {
+          if (Buffer.isBuffer(this._streams[i])) {
+            dataBuffer = Buffer.concat([dataBuffer, this._streams[i]]);
+          } else {
+            dataBuffer = Buffer.concat([dataBuffer, Buffer.from(this._streams[i])]);
+          }
+          if (typeof this._streams[i] !== "string" || this._streams[i].substring(2, boundary.length + 2) !== boundary) {
+            dataBuffer = Buffer.concat([dataBuffer, Buffer.from(FormData2.LINE_BREAK)]);
+          }
+        }
+      }
+      return Buffer.concat([dataBuffer, Buffer.from(this._lastBoundary())]);
+    };
+    FormData2.prototype._generateBoundary = function() {
+      this._boundary = "--------------------------" + crypto.randomBytes(12).toString("hex");
+    };
+    FormData2.prototype.getLengthSync = function() {
+      var knownLength = this._overheadLength + this._valueLength;
+      if (this._streams.length) {
+        knownLength += this._lastBoundary().length;
+      }
+      if (!this.hasKnownLength()) {
+        this._error(new Error("Cannot calculate proper length in synchronous way."));
+      }
+      return knownLength;
+    };
+    FormData2.prototype.hasKnownLength = function() {
+      var hasKnownLength = true;
+      if (this._valuesToMeasure.length) {
+        hasKnownLength = false;
+      }
+      return hasKnownLength;
+    };
+    FormData2.prototype.getLength = function(cb) {
+      var knownLength = this._overheadLength + this._valueLength;
+      if (this._streams.length) {
+        knownLength += this._lastBoundary().length;
+      }
+      if (!this._valuesToMeasure.length) {
+        process.nextTick(cb.bind(this, null, knownLength));
+        return;
+      }
+      asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {
+        if (err) {
+          cb(err);
+          return;
+        }
+        values.forEach(function(length) {
+          knownLength += length;
+        });
+        cb(null, knownLength);
+      });
+    };
+    FormData2.prototype.submit = function(params, cb) {
+      var request;
+      var options;
+      var defaults = { method: "post" };
+      if (typeof params === "string") {
+        params = parseUrl(params);
+        options = populate({
+          port: params.port,
+          path: params.pathname,
+          host: params.hostname,
+          protocol: params.protocol
+        }, defaults);
+      } else {
+        options = populate(params, defaults);
+        if (!options.port) {
+          options.port = options.protocol === "https:" ? 443 : 80;
+        }
+      }
+      options.headers = this.getHeaders(params.headers);
+      if (options.protocol === "https:") {
+        request = https.request(options);
+      } else {
+        request = http.request(options);
+      }
+      this.getLength(function(err, length) {
+        if (err && err !== "Unknown stream") {
+          this._error(err);
+          return;
+        }
+        if (length) {
+          request.setHeader("Content-Length", length);
+        }
+        this.pipe(request);
+        if (cb) {
+          var onResponse;
+          var callback = function(error, responce) {
+            request.removeListener("error", callback);
+            request.removeListener("response", onResponse);
+            return cb.call(this, error, responce);
+          };
+          onResponse = callback.bind(this, null);
+          request.on("error", callback);
+          request.on("response", onResponse);
+        }
+      }.bind(this));
+      return request;
+    };
+    FormData2.prototype._error = function(err) {
+      if (!this.error) {
+        this.error = err;
+        this.pause();
+        this.emit("error", err);
+      }
+    };
+    FormData2.prototype.toString = function() {
+      return "[object FormData]";
+    };
+    setToStringTag(FormData2.prototype, "FormData");
+    module2.exports = FormData2;
+  }
+});
+
+// src/index.ts
+var index_exports = {};
+__export(index_exports, {
+  ResponseError: () => ResponseError,
+  SocketSdk: () => SocketSdk,
+  calculateTotalQuotaCost: () => calculateTotalQuotaCost,
+  createUserAgentFromPkgJson: () => createUserAgentFromPkgJson,
+  getAllMethodRequirements: () => getAllMethodRequirements,
+  getMethodRequirements: () => getMethodRequirements,
+  getMethodsByPermissions: () => getMethodsByPermissions,
+  getMethodsByQuotaCost: () => getMethodsByQuotaCost,
+  getQuotaCost: () => getQuotaCost,
+  getQuotaUsageSummary: () => getQuotaUsageSummary,
+  getRequiredPermissions: () => getRequiredPermissions,
+  hasQuotaForMethods: () => hasQuotaForMethods
+});
+module.exports = __toCommonJS(index_exports);
+
+// src/http-client.ts
+var import_debug = __toESM(require_debug3());
+var import_http_request = __toESM(require_http_request());
+var import_parse = __toESM(require_parse());
+var import_performance = __toESM(require_performance());
+
+// package.json
+var package_default = {
+  name: "@socketsecurity/sdk",
+  version: "4.0.1",
+  description: "SDK for the Socket API client",
+  homepage: "https://github.com/SocketDev/socket-sdk-js",
+  license: "MIT",
+  author: {
+    name: "Socket Inc",
+    email: "eng@socket.dev",
+    url: "https://socket.dev"
+  },
+  repository: {
+    type: "git",
+    url: "git://github.com/SocketDev/socket-sdk-js.git"
+  },
+  files: [
+    "CHANGELOG.md",
+    "data/*.json",
+    "dist/*.d.ts",
+    "dist/*.js",
+    "types/*.d.ts"
+  ],
+  main: "./dist/index.js",
+  types: "./dist/index.d.ts",
+  exports: {
+    ".": {
+      types: "./dist/index.d.ts",
+      default: "./dist/index.js"
+    },
+    "./package.json": "./package.json",
+    "./testing": {
+      types: "./dist/testing.d.ts",
+      default: "./dist/testing.js"
+    },
+    "./types/api": {
+      types: "./types/api.d.ts",
+      default: "./types/api.d.ts"
+    },
+    "./types/api-helpers": {
+      types: "./types/api-helpers.d.ts",
+      default: "./types/api-helpers.d.ts"
+    }
+  },
+  scripts: {
+    build: "node scripts/build.mjs",
+    bump: "node scripts/bump.mjs",
+    check: "node scripts/check.mjs",
+    clean: "node scripts/clean.mjs",
+    cover: "node scripts/cover.mjs",
+    fix: "node scripts/fix.mjs",
+    format: "oxfmt --write .",
+    "format:check": "oxfmt --check .",
+    "generate-sdk": "node scripts/generate-sdk.mjs",
+    lint: "node scripts/lint.mjs",
+    precommit: "pnpm run check --lint --staged",
+    prepare: "husky",
+    "ci:validate": "node scripts/ci-validate.mjs",
+    prepublishOnly: "echo 'ERROR: Use GitHub Actions workflow for publishing' && exit 1",
+    publish: "node scripts/publish.mjs",
+    "publish:ci": "node scripts/publish.mjs --tag ${DIST_TAG:-latest}",
+    claude: "node scripts/claude.mjs",
+    security: "agentshield scan && { command -v zizmor >/dev/null && zizmor .github/ || echo 'zizmor not installed \u2014 run pnpm run setup to install'; }",
+    test: "node scripts/test.mjs",
+    type: "tsgo --noEmit -p .config/tsconfig.check.json",
+    update: "node scripts/update.mjs"
+  },
+  devDependencies: {
+    "@anthropic-ai/claude-code": "2.1.92",
+    "@socketsecurity/lib": "5.18.2",
+    "@babel/generator": "7.28.5",
+    "@babel/parser": "7.26.3",
+    "@babel/traverse": "7.26.4",
+    "@babel/types": "7.26.3",
+    "@dotenvx/dotenvx": "1.54.1",
+    "@oxlint/migrate": "1.52.0",
+    "@sveltejs/acorn-typescript": "1.0.8",
+    "@types/babel__traverse": "7.28.0",
+    "@types/node": "24.9.2",
+    "@typescript/native-preview": "7.0.0-dev.20250926.1",
+    "@vitest/coverage-v8": "4.0.3",
+    acorn: "8.15.0",
+    del: "8.0.1",
+    "dev-null-cli": "2.0.0",
+    "ecc-agentshield": "1.4.0",
+    esbuild: "0.25.11",
+    "fast-glob": "3.3.3",
+    "form-data": "4.0.5",
+    husky: "9.1.7",
+    "magic-string": "0.30.14",
+    nock: "14.0.10",
+    "openapi-typescript": "6.7.6",
+    oxfmt: "0.37.0",
+    oxlint: "1.52.0",
+    semver: "7.7.2",
+    taze: "19.9.2",
+    "type-coverage": "2.29.7",
+    vitest: "4.0.3"
+  },
+  typeCoverage: {
+    atLeast: 99,
+    cache: true,
+    "ignore-files": "test/*",
+    "ignore-non-null-assertion": true,
+    "ignore-type-assertion": true,
+    ignoreAsAssertion: true,
+    ignoreCatch: true,
+    ignoreEmptyType: true,
+    strict: true
+  },
+  engines: {
+    node: ">=18.20.8",
+    pnpm: ">=11.0.0-rc.0"
+  },
+  packageManager: "pnpm@11.0.0-rc.0"
+};
+
+// src/user-agent.ts
+function createUserAgentFromPkgJson(pkgData) {
+  const { homepage } = pkgData;
+  const name = pkgData.name.replace("@", "").replace("/", "-");
+  return `${name}/${pkgData.version}${homepage ? ` (${homepage})` : ""}`;
+}
+
+// src/constants.ts
+var import_socket = __toESM(require_socket2());
+var DEFAULT_USER_AGENT = createUserAgentFromPkgJson(package_default);
+var DEFAULT_HTTP_TIMEOUT = 3e4;
+var DEFAULT_RETRIES = 3;
+var DEFAULT_RETRY_DELAY = 1e3;
+var DEFAULT_CACHE_TTL = 5 * 60 * 1e3;
+var RECOMMENDED_CACHE_TTL_ORGANIZATIONS = 30 * 60 * 1e3;
+var RECOMMENDED_CACHE_TTL_QUOTA = 10 * 60 * 1e3;
+var MAX_HTTP_TIMEOUT = 5 * 60 * 1e3;
+var MIN_HTTP_TIMEOUT = 5e3;
+var MAX_RESPONSE_SIZE = 10 * 1024 * 1024;
+var MAX_STREAM_SIZE = 100 * 1024 * 1024;
+var SOCKET_PUBLIC_BLOB_STORE_URL = "https://socketusercontent.com";
+var MAX_FIREWALL_COMPONENTS = 8;
+var SOCKET_FIREWALL_API_URL = "https://firewall-api.socket.dev/purl";
+var httpAgentNames = /* @__PURE__ */ new Set(["http", "https", "http2"]);
+var publicPolicy = /* @__PURE__ */ new Map([
+  // error (1):
+  ["malware", "error"],
+  // warn (7):
+  ["criticalCVE", "warn"],
+  ["didYouMean", "warn"],
+  ["gitDependency", "warn"],
+  ["httpDependency", "warn"],
+  ["licenseSpdxDisj", "warn"],
+  ["obfuscatedFile", "warn"],
+  ["troll", "warn"],
+  // monitor (7):
+  ["deprecated", "monitor"],
+  ["mediumCVE", "monitor"],
+  ["mildCVE", "monitor"],
+  ["shrinkwrap", "monitor"],
+  ["telemetry", "monitor"],
+  ["unpopularPackage", "monitor"],
+  ["unstableOwnership", "monitor"],
+  // ignore (85):
+  ["ambiguousClassifier", "ignore"],
+  ["badEncoding", "ignore"],
+  ["badSemver", "ignore"],
+  ["badSemverDependency", "ignore"],
+  ["bidi", "ignore"],
+  ["binScriptConfusion", "ignore"],
+  ["chromeContentScript", "ignore"],
+  ["chromeHostPermission", "ignore"],
+  ["chromePermission", "ignore"],
+  ["chromeWildcardHostPermission", "ignore"],
+  ["chronoAnomaly", "ignore"],
+  ["compromisedSSHKey", "ignore"],
+  ["copyleftLicense", "ignore"],
+  ["cve", "ignore"],
+  ["debugAccess", "ignore"],
+  ["deprecatedLicense", "ignore"],
+  ["deprecatedException", "ignore"],
+  ["dynamicRequire", "ignore"],
+  ["emptyPackage", "ignore"],
+  ["envVars", "ignore"],
+  ["explicitlyUnlicensedItem", "ignore"],
+  ["extraneousDependency", "ignore"],
+  ["fileDependency", "ignore"],
+  ["filesystemAccess", "ignore"],
+  ["floatingDependency", "ignore"],
+  ["gitHubDependency", "ignore"],
+  ["gptAnomaly", "ignore"],
+  ["gptDidYouMean", "ignore"],
+  ["gptMalware", "ignore"],
+  ["gptSecurity", "ignore"],
+  ["hasNativeCode", "ignore"],
+  ["highEntropyStrings", "ignore"],
+  ["homoglyphs", "ignore"],
+  ["installScripts", "ignore"],
+  ["invalidPackageJSON", "ignore"],
+  ["invisibleChars", "ignore"],
+  ["licenseChange", "ignore"],
+  ["licenseException", "ignore"],
+  ["longStrings", "ignore"],
+  ["majorRefactor", "ignore"],
+  ["manifestConfusion", "ignore"],
+  ["minifiedFile", "ignore"],
+  ["miscLicenseIssues", "ignore"],
+  ["missingAuthor", "ignore"],
+  ["missingDependency", "ignore"],
+  ["missingLicense", "ignore"],
+  ["missingTarball", "ignore"],
+  ["mixedLicense", "ignore"],
+  ["modifiedException", "ignore"],
+  ["modifiedLicense", "ignore"],
+  ["networkAccess", "ignore"],
+  ["newAuthor", "ignore"],
+  ["noAuthorData", "ignore"],
+  ["noBugTracker", "ignore"],
+  ["noLicenseFound", "ignore"],
+  ["noREADME", "ignore"],
+  ["noRepository", "ignore"],
+  ["noTests", "ignore"],
+  ["noV1", "ignore"],
+  ["noWebsite", "ignore"],
+  ["nonOSILicense", "ignore"],
+  ["nonSPDXLicense", "ignore"],
+  ["nonpermissiveLicense", "ignore"],
+  ["notice", "ignore"],
+  ["obfuscatedRequire", "ignore"],
+  ["peerDependency", "ignore"],
+  ["potentialVulnerability", "ignore"],
+  ["semverAnomaly", "ignore"],
+  ["shellAccess", "ignore"],
+  ["shellScriptOverride", "ignore"],
+  ["socketUpgradeAvailable", "ignore"],
+  ["suspiciousStarActivity", "ignore"],
+  ["suspiciousString", "ignore"],
+  ["trivialPackage", "ignore"],
+  ["typeModuleCompatibility", "ignore"],
+  ["uncaughtOptionalDependency", "ignore"],
+  ["unclearLicense", "ignore"],
+  ["unidentifiedLicense", "ignore"],
+  ["unmaintained", "ignore"],
+  ["unpublished", "ignore"],
+  ["unresolvedRequire", "ignore"],
+  ["unsafeCopyright", "ignore"],
+  ["unusedDependency", "ignore"],
+  ["urlStrings", "ignore"],
+  ["usesEval", "ignore"],
+  ["zeroWidth", "ignore"]
+]);
+
+// src/utils/header-sanitization.ts
+var SENSITIVE_HEADERS = [
+  "authorization",
+  "cookie",
+  "set-cookie",
+  "proxy-authorization",
+  "www-authenticate",
+  "proxy-authenticate"
+];
+function sanitizeHeaders(headers) {
+  if (!headers) {
+    return void 0;
+  }
+  if (Array.isArray(headers)) {
+    return { headers: headers.join(", ") };
+  }
+  const sanitized = {};
+  for (const [key, value] of Object.entries(headers)) {
+    const keyLower = key.toLowerCase();
+    if (SENSITIVE_HEADERS.includes(keyLower)) {
+      sanitized[key] = "[REDACTED]";
+    } else {
+      sanitized[key] = Array.isArray(value) ? value.join(", ") : String(value);
+    }
+  }
+  return sanitized;
+}
+
+// src/http-client.ts
+var ResponseError = class _ResponseError extends Error {
+  response;
+  url;
+  constructor(response, message = "", url) {
+    const statusCode = response.status ?? "unknown";
+    const statusMessage = response.statusText || "No status message";
+    super(
+      /* c8 ignore next - fallback empty message if not provided */
+      `Socket API ${message || "Request failed"} (${statusCode}): ${statusMessage}`
+    );
+    this.name = "ResponseError";
+    this.response = response;
+    this.url = url;
+    Error.captureStackTrace(this, _ResponseError);
+  }
+};
+async function createDeleteRequest(baseUrl, urlPath, options) {
+  const startTime = Date.now();
+  const url = `${baseUrl}${urlPath}`;
+  const method = "DELETE";
+  const { hooks, ...rawOpts } = {
+    __proto__: null,
+    ...options
+  };
+  const opts = { __proto__: null, ...rawOpts };
+  if (hooks?.onRequest) {
+    hooks.onRequest({
+      method,
+      url,
+      headers: sanitizeHeaders(opts.headers),
+      timeout: opts.timeout
+    });
+  }
+  try {
+    const response = await (0, import_http_request.httpRequest)(url, {
+      method,
+      headers: opts.headers,
+      timeout: opts.timeout,
+      maxResponseSize: MAX_RESPONSE_SIZE
+    });
+    if (hooks?.onResponse) {
+      hooks.onResponse({
+        method,
+        url,
+        duration: Date.now() - startTime,
+        status: response.status,
+        statusText: response.statusText,
+        headers: sanitizeHeaders(response.headers)
+      });
+    }
+    return response;
+  } catch (error) {
+    if (hooks?.onResponse) {
+      hooks.onResponse({
+        method,
+        url,
+        duration: Date.now() - startTime,
+        error
+      });
+    }
+    throw error;
+  }
+}
+async function createGetRequest(baseUrl, urlPath, options) {
+  const startTime = Date.now();
+  const url = `${baseUrl}${urlPath}`;
+  const method = "GET";
+  const stopTimer = (0, import_performance.perfTimer)("http:get", { urlPath });
+  const { hooks, ...rawOpts } = {
+    __proto__: null,
+    ...options
+  };
+  const opts = { __proto__: null, ...rawOpts };
+  if (hooks?.onRequest) {
+    hooks.onRequest({
+      method,
+      url,
+      headers: sanitizeHeaders(opts.headers),
+      timeout: opts.timeout
+    });
+  }
+  try {
+    const response = await (0, import_http_request.httpRequest)(url, {
+      method,
+      headers: opts.headers,
+      timeout: opts.timeout,
+      maxResponseSize: MAX_RESPONSE_SIZE
+    });
+    stopTimer({ statusCode: response.status });
+    if (hooks?.onResponse) {
+      hooks.onResponse({
+        method,
+        url,
+        duration: Date.now() - startTime,
+        status: response.status,
+        statusText: response.statusText,
+        headers: sanitizeHeaders(response.headers)
+      });
+    }
+    return response;
+  } catch (error) {
+    stopTimer({ error: true });
+    if (hooks?.onResponse) {
+      hooks.onResponse({
+        method,
+        url,
+        duration: Date.now() - startTime,
+        error
+      });
+    }
+    throw error;
+  }
+}
+async function createRequestWithJson(method, baseUrl, urlPath, json, options) {
+  const startTime = Date.now();
+  const url = `${baseUrl}${urlPath}`;
+  const stopTimer = (0, import_performance.perfTimer)(`http:${method.toLowerCase()}`, {
+    urlPath
+  });
+  const { hooks, ...rawOpts } = {
+    __proto__: null,
+    ...options
+  };
+  const opts = { __proto__: null, ...rawOpts };
+  const body = JSON.stringify(json);
+  const headers = {
+    ...opts.headers,
+    "Content-Type": "application/json"
+  };
+  if (hooks?.onRequest) {
+    hooks.onRequest({
+      method,
+      url,
+      headers: sanitizeHeaders(headers),
+      timeout: opts.timeout
+    });
+  }
+  try {
+    const response = await (0, import_http_request.httpRequest)(url, {
+      method,
+      body,
+      headers,
+      timeout: opts.timeout,
+      maxResponseSize: MAX_RESPONSE_SIZE
+    });
+    stopTimer({ statusCode: response.status });
+    if (hooks?.onResponse) {
+      hooks.onResponse({
+        method,
+        url,
+        duration: Date.now() - startTime,
+        status: response.status,
+        statusText: response.statusText,
+        headers: sanitizeHeaders(response.headers)
+      });
+    }
+    return response;
+  } catch (error) {
+    stopTimer({ error: true });
+    if (hooks?.onResponse) {
+      hooks.onResponse({
+        method,
+        url,
+        duration: Date.now() - startTime,
+        error
+      });
+    }
+    throw error;
+  }
+}
+async function getResponseJson(response, method, url) {
+  const stopTimer = (0, import_performance.perfTimer)("http:parse-json");
+  try {
+    if (!isResponseOk(response)) {
+      throw new ResponseError(
+        response,
+        method ? `${method} Request failed` : void 0,
+        url
+      );
+    }
+    const responseBody = response.text();
+    if (responseBody === "") {
+      (0, import_debug.debugLog)("API response: empty response treated as {}");
+      stopTimer({ success: true });
+      return {};
+    }
+    try {
+      const responseJson = (0, import_parse.jsonParse)(responseBody);
+      (0, import_debug.debugLog)("API response:", responseJson);
+      stopTimer({ success: true });
+      return responseJson;
+    } catch (e) {
+      stopTimer({ error: true });
+      if (e instanceof SyntaxError) {
+        const contentType = response.headers["content-type"];
+        const preview = responseBody.length > 200 ? `${responseBody.slice(0, 200)}...` : responseBody;
+        const messageParts = [
+          "Socket API returned invalid JSON response",
+          `\u2192 Response preview: ${preview}`,
+          `\u2192 Parse error: ${e.message}`
+        ];
+        if (contentType && !contentType.includes("application/json")) {
+          messageParts.push(
+            `\u2192 Unexpected Content-Type: ${contentType} (expected application/json)`,
+            "\u2192 The API may have returned an error page instead of JSON."
+          );
+        } else if (responseBody.startsWith("<")) {
+          messageParts.push(
+            "\u2192 Response appears to be HTML, not JSON.",
+            "\u2192 This may indicate an API endpoint error or network interception."
+          );
+        } else if (responseBody.length === 0) {
+          messageParts.push("\u2192 Response body is empty when JSON was expected.");
+        } else if (responseBody.includes("502 Bad Gateway") || responseBody.includes("503 Service")) {
+          messageParts.push(
+            "\u2192 Response indicates a server error.",
+            "\u2192 The Socket API may be temporarily unavailable."
+          );
+        }
+        const enhancedError = new Error(messageParts.join("\n"), {
+          cause: e
+        });
+        enhancedError.name = "SyntaxError";
+        enhancedError.originalResponse = responseBody;
+        Object.setPrototypeOf(enhancedError, SyntaxError.prototype);
+        throw enhancedError;
+      }
+      if (e instanceof Error) {
+        throw e;
+      }
+      const unknownError = new Error("Unknown JSON parsing error", {
+        cause: e
+      });
+      unknownError.name = "SyntaxError";
+      unknownError.originalResponse = responseBody;
+      Object.setPrototypeOf(unknownError, SyntaxError.prototype);
+      throw unknownError;
+    }
+  } catch (error) {
+    stopTimer({ error: true });
+    throw error;
+  }
+}
+function isResponseOk(response) {
+  return response.ok;
+}
+function reshapeArtifactForPublicPolicy(data, isAuthenticated, actions, policy) {
+  if (!isAuthenticated) {
+    const allowedActions = actions?.trim() ? new Set(actions.split(",")) : void 0;
+    const resolvedPolicy = policy ?? publicPolicy;
+    const reshapeArtifact = (artifact) => ({
+      name: artifact.name,
+      version: artifact.version,
+      size: artifact.size,
+      author: artifact.author,
+      type: artifact.type,
+      supplyChainRisk: artifact.supplyChainRisk,
+      scorecards: artifact.scorecards,
+      topLevelAncestors: artifact.topLevelAncestors,
+      alerts: artifact.alerts?.reduce((acc, alert) => {
+        if (alert.severity === "low") {
+          return acc;
+        }
+        const action = resolvedPolicy.get(alert.type);
+        if (allowedActions && action && !allowedActions.has(action)) {
+          return acc;
+        }
+        acc.push({
+          action,
+          key: alert.key,
+          severity: alert.severity,
+          type: alert.type
+        });
+        return acc;
+      }, [])
+    });
+    if (data["artifacts"]) {
+      const artifacts = data["artifacts"];
+      return {
+        ...data,
+        artifacts: Array.isArray(artifacts) ? artifacts.map(reshapeArtifact) : artifacts
+      };
+    }
+    if (data["alerts"]) {
+      return reshapeArtifact(
+        data
+      );
+    }
+  }
+  return data;
+}
+
+// src/quota-utils.ts
+var import_node_fs = require("node:fs");
+var import_node_path = require("node:path");
+var import_memoization = __toESM(require_memoization());
+var loadRequirements = (0, import_memoization.once)(() => {
+  try {
+    const requirementsPath = (0, import_node_path.join)(
+      __dirname,
+      "..",
+      "data",
+      "api-method-quota-and-permissions.json"
+    );
+    if (!(0, import_node_fs.existsSync)(requirementsPath)) {
+      throw new Error(`Requirements file not found at: ${requirementsPath}`);
+    }
+    const data = (0, import_node_fs.readFileSync)(requirementsPath, "utf8");
+    return JSON.parse(data);
+  } catch (e) {
+    throw new Error("Failed to load SDK method requirements", { cause: e });
+  }
+});
+function calculateTotalQuotaCost(methodNames) {
+  return methodNames.reduce((total, methodName) => {
+    return total + getQuotaCost(methodName);
+  }, 0);
+}
+function getAllMethodRequirements() {
+  const reqs = loadRequirements();
+  const result = {};
+  Object.entries(reqs.api).forEach(([methodName, requirement]) => {
+    result[methodName] = {
+      permissions: [...requirement.permissions],
+      quota: requirement.quota
+    };
+  });
+  return result;
+}
+var getMethodRequirements = (0, import_memoization.memoize)(
+  (methodName) => {
+    const reqs = loadRequirements();
+    const requirement = reqs.api[methodName];
+    if (!requirement) {
+      throw new Error(`Unknown SDK method: "${String(methodName)}"`);
+    }
+    return {
+      permissions: [...requirement.permissions],
+      quota: requirement.quota
+    };
+  },
+  { name: "getMethodRequirements" }
+);
+var getMethodsByPermissions = (0, import_memoization.memoize)(
+  (permissions) => {
+    const reqs = loadRequirements();
+    return Object.entries(reqs.api).filter(([, requirement]) => {
+      return permissions.some(
+        (permission) => requirement.permissions.includes(permission)
+      );
+    }).map(([methodName]) => methodName).sort();
+  },
+  { name: "getMethodsByPermissions" }
+);
+var getMethodsByQuotaCost = (0, import_memoization.memoize)(
+  (quotaCost) => {
+    const reqs = loadRequirements();
+    return Object.entries(reqs.api).filter(([, requirement]) => requirement.quota === quotaCost).map(([methodName]) => methodName).sort();
+  },
+  { name: "getMethodsByQuotaCost" }
+);
+var getQuotaCost = (0, import_memoization.memoize)(
+  (methodName) => {
+    const reqs = loadRequirements();
+    const requirement = reqs.api[methodName];
+    if (!requirement) {
+      throw new Error(`Unknown SDK method: "${String(methodName)}"`);
+    }
+    return requirement.quota;
+  },
+  { name: "getQuotaCost" }
+);
+var getQuotaUsageSummary = (0, import_memoization.memoize)(
+  () => {
+    const reqs = loadRequirements();
+    const summary = {};
+    Object.entries(reqs.api).forEach(([methodName, requirement]) => {
+      const costKey = `${requirement.quota} units`;
+      if (!summary[costKey]) {
+        summary[costKey] = [];
+      }
+      summary[costKey].push(methodName);
+    });
+    Object.keys(summary).forEach((costKey) => {
+      summary[costKey]?.sort();
+    });
+    return summary;
+  },
+  { name: "getQuotaUsageSummary" }
+);
+var getRequiredPermissions = (0, import_memoization.memoize)(
+  (methodName) => {
+    const reqs = loadRequirements();
+    const requirement = reqs.api[methodName];
+    if (!requirement) {
+      throw new Error(`Unknown SDK method: "${String(methodName)}"`);
+    }
+    return [...requirement.permissions];
+  },
+  { name: "getRequiredPermissions" }
+);
+function hasQuotaForMethods(availableQuota, methodNames) {
+  const totalCost = calculateTotalQuotaCost(methodNames);
+  return availableQuota >= totalCost;
+}
+
+// src/socket-sdk-class.ts
+var import_node_path4 = __toESM(require("node:path"));
+var import_node_process2 = __toESM(require("node:process"));
+var import_cache_with_ttl = __toESM(require_cache_with_ttl());
+var import_core = __toESM(require_core());
+var import_process = __toESM(require_process());
+var import_socket2 = __toESM(require_socket2());
+var import_debug2 = __toESM(require_debug3());
+var import_fs = __toESM(require_fs());
+var import_parse2 = __toESM(require_parse());
+var import_objects = __toESM(require_objects());
+var import_promises = __toESM(require_promises());
+var import_suppress_warnings = __toESM(require_suppress_warnings());
+var import_url = __toESM(require_url());
+var import_http_request3 = __toESM(require_http_request());
+
+// src/file-upload.ts
+var import_node_fs2 = require("node:fs");
+var import_node_path2 = __toESM(require("node:path"));
+var import_form_data = __toESM(require_form_data());
+var import_http_request2 = __toESM(require_http_request());
+var import_normalize = __toESM(require_normalize());
+function createRequestBodyForFilepaths(filepaths, basePath) {
+  const form = new import_form_data.default();
+  for (const absPath of filepaths) {
+    const relPath = (0, import_normalize.normalizePath)(import_node_path2.default.relative(basePath, absPath));
+    const filename = import_node_path2.default.basename(absPath);
+    let stream;
+    try {
+      stream = (0, import_node_fs2.createReadStream)(absPath, { highWaterMark: 1024 * 1024 });
+    } catch (error) {
+      const err = error;
+      let message = `Failed to read file: ${absPath}`;
+      if (err.code === "ENOENT") {
+        message += "\n\u2192 File does not exist. Check the file path and try again.";
+      } else if (err.code === "EACCES") {
+        message += `
+\u2192 Permission denied. Run: chmod +r "${absPath}"`;
+      } else if (err.code === "EISDIR") {
+        message += "\n\u2192 Expected a file but found a directory.";
+      } else if (err.code) {
+        message += `
+\u2192 Error code: ${err.code}`;
+      }
+      throw new Error(message, { cause: error });
+    }
+    form.append(relPath, stream, {
+      contentType: "application/octet-stream",
+      filename
+    });
+  }
+  return form;
+}
+async function createUploadRequest(baseUrl, urlPath, form, options) {
+  const { hooks, ...rawOpts } = {
+    __proto__: null,
+    ...options
+  };
+  const opts = { __proto__: null, ...rawOpts };
+  const url = new URL(urlPath, baseUrl).toString();
+  const method = "POST";
+  const startTime = Date.now();
+  const headers = {
+    ...opts.headers
+  };
+  if (hooks?.onRequest) {
+    hooks.onRequest({
+      method,
+      url,
+      headers: sanitizeHeaders(headers),
+      timeout: opts.timeout
+    });
+  }
+  try {
+    const response = await (0, import_http_request2.httpRequest)(url, {
+      method,
+      body: form,
+      headers,
+      maxResponseSize: MAX_RESPONSE_SIZE,
+      timeout: opts.timeout
+    });
+    if (hooks?.onResponse) {
+      hooks.onResponse({
+        method,
+        url,
+        duration: Date.now() - startTime,
+        status: response.status,
+        statusText: response.statusText,
+        headers: sanitizeHeaders(response.headers)
+      });
+    }
+    return response;
+  } catch (error) {
+    if (hooks?.onResponse) {
+      hooks.onResponse({
+        method,
+        url,
+        duration: Date.now() - startTime,
+        error
+      });
+    }
+    throw error;
+  }
+}
+
+// src/utils.ts
+var import_node_path3 = __toESM(require("node:path"));
+var import_node_process = __toESM(require("node:process"));
+var import_memoization2 = __toESM(require_memoization());
+var import_normalize2 = __toESM(require_normalize());
+function normalizeToWordSet(s) {
+  const words = s.toLowerCase().match(/\w+/g);
+  return new Set(words ?? []);
+}
+function calculateWordSetSimilarity(str1, str2) {
+  const set1 = normalizeToWordSet(str1);
+  const set2 = normalizeToWordSet(str2);
+  if (set1.size === 0 && set2.size === 0) {
+    return 1;
+  }
+  if (set1.size === 0 || set2.size === 0) {
+    return 0;
+  }
+  let intersectionSize = 0;
+  for (const word of set1) {
+    if (set2.has(word)) {
+      intersectionSize++;
+    }
+  }
+  const unionSize = set1.size + set2.size - intersectionSize;
+  return intersectionSize / unionSize;
+}
+function filterRedundantCause(errorMessage, errorCause, threshold = 0.6) {
+  if (!errorCause || !errorCause.trim()) {
+    return void 0;
+  }
+  const messageParts = errorMessage.split(":").map((part) => part.trim());
+  for (const part of messageParts) {
+    if (part && shouldOmitReason(part, errorCause, threshold)) {
+      return void 0;
+    }
+  }
+  return errorCause;
+}
+var normalizeBaseUrl = (0, import_memoization2.memoize)(
+  (baseUrl) => {
+    return baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
+  },
+  { name: "normalizeBaseUrl" }
+);
+function promiseWithResolvers() {
+  if (Promise.withResolvers) {
+    return Promise.withResolvers();
+  }
+  const obj = {};
+  obj.promise = new Promise((resolver, reject) => {
+    obj.resolve = resolver;
+    obj.reject = reject;
+  });
+  return obj;
+}
+function queryToSearchParams(init) {
+  const params = new URLSearchParams(
+    init
+  );
+  let needsNormalization = false;
+  let hasEmpty = false;
+  for (const [key, value] of params) {
+    if (key === "defaultBranch" || key === "perPage") {
+      needsNormalization = true;
+      break;
+    }
+    if (!value) {
+      hasEmpty = true;
+    }
+  }
+  if (!needsNormalization && !hasEmpty) {
+    return params;
+  }
+  const normalized = new URLSearchParams();
+  for (const [key, value] of params) {
+    if (!value) {
+      continue;
+    }
+    if (key === "defaultBranch") {
+      normalized.set("default_branch", value);
+    } else if (key === "perPage") {
+      normalized.set("per_page", value);
+    } else {
+      normalized.set(key, value);
+    }
+  }
+  return normalized;
+}
+function resolveAbsPaths(filepaths, pathsRelativeTo) {
+  const basePath = resolveBasePath(pathsRelativeTo);
+  return filepaths.map((p) => (0, import_normalize2.normalizePath)(import_node_path3.default.resolve(basePath, p)));
+}
+function resolveBasePath(pathsRelativeTo = ".") {
+  return (0, import_normalize2.normalizePath)(import_node_path3.default.resolve(import_node_process.default.cwd(), pathsRelativeTo));
+}
+function shouldOmitReason(errorMessage, reason, threshold = 0.6) {
+  if (!reason || !reason.trim()) {
+    return true;
+  }
+  const similarity = calculateWordSetSimilarity(errorMessage, reason);
+  return similarity >= threshold;
+}
+
+// src/socket-sdk-class.ts
+var abortSignal = (0, import_process.getAbortSignal)();
+var SocketSdk = class _SocketSdk {
+  #apiToken;
+  #baseUrl;
+  #cache;
+  #cacheByTtl;
+  #cacheTtlConfig;
+  #hooks;
+  #onFileValidation;
+  #reqOptions;
+  #reqOptionsWithHooks;
+  #retries;
+  #retryDelay;
+  /**
+   * Initialize Socket SDK with API token and configuration options.
+   * Sets up authentication, base URL, HTTP client options, retry behavior, and caching.
+   */
+  constructor(apiToken, options) {
+    const MAX_API_TOKEN_LENGTH = 1024;
+    if (typeof apiToken !== "string") {
+      throw new TypeError('"apiToken" is required and must be a string');
+    }
+    const trimmedToken = apiToken.trim();
+    if (!trimmedToken) {
+      throw new Error('"apiToken" cannot be empty or whitespace-only');
+    }
+    if (trimmedToken.length > MAX_API_TOKEN_LENGTH) {
+      throw new Error(
+        `"apiToken" exceeds maximum length of ${MAX_API_TOKEN_LENGTH} characters`
+      );
+    }
+    const {
+      agent: agentOrObj,
+      baseUrl = "https://api.socket.dev/v0/",
+      cache = false,
+      cacheTtl,
+      hooks,
+      onFileValidation,
+      retries = DEFAULT_RETRIES,
+      retryDelay = DEFAULT_RETRY_DELAY,
+      timeout = DEFAULT_HTTP_TIMEOUT,
+      userAgent
+    } = { __proto__: null, ...options };
+    if (timeout !== void 0) {
+      if (typeof timeout !== "number" || Number.isNaN(timeout) || timeout < MIN_HTTP_TIMEOUT || timeout > MAX_HTTP_TIMEOUT) {
+        throw new TypeError(
+          `"timeout" must be a number between ${MIN_HTTP_TIMEOUT} and ${MAX_HTTP_TIMEOUT} milliseconds`
+        );
+      }
+    }
+    const agentKeys = agentOrObj ? Object.keys(agentOrObj) : [];
+    const agentAsGotOptions = agentOrObj;
+    const agent = agentKeys.length && agentKeys.every((k) => httpAgentNames.has(k)) ? (
+      /* c8 ignore next 3 - Got-style agent options compatibility layer */
+      agentAsGotOptions.https || agentAsGotOptions.http || agentAsGotOptions.http2
+    ) : agentOrObj;
+    this.#apiToken = trimmedToken;
+    this.#baseUrl = normalizeBaseUrl(baseUrl);
+    this.#cacheTtlConfig = cacheTtl;
+    const defaultTtl = typeof cacheTtl === "number" ? cacheTtl : cacheTtl?.default ?? DEFAULT_CACHE_TTL;
+    this.#cache = cache ? (0, import_cache_with_ttl.createTtlCache)({
+      memoize: true,
+      prefix: "socket-sdk",
+      ttl: defaultTtl
+    }) : (
+      /* c8 ignore next - cache disabled by default */
+      void 0
+    );
+    this.#cacheByTtl = /* @__PURE__ */ new Map();
+    this.#hooks = hooks;
+    this.#onFileValidation = onFileValidation;
+    this.#retries = retries;
+    this.#retryDelay = retryDelay;
+    this.#reqOptions = {
+      ...agent ? { agent } : {},
+      headers: {
+        Authorization: `Basic ${btoa(`${trimmedToken}:`)}`,
+        "User-Agent": userAgent ?? DEFAULT_USER_AGENT
+      },
+      signal: abortSignal,
+      /* c8 ignore next - Optional timeout parameter, tested implicitly through method calls */
+      ...timeout ? { timeout } : {}
+    };
+    this.#reqOptionsWithHooks = {
+      ...this.#reqOptions,
+      hooks: this.#hooks
+    };
+  }
+  /**
+   * Create async generator for streaming batch package URL processing.
+   * Internal method for handling chunked PURL responses with error handling.
+   */
+  async *#createBatchPurlGenerator(componentsObj, queryParams) {
+    let res;
+    try {
+      res = await this.#executeWithRetry(
+        () => this.#createBatchPurlRequest(componentsObj, queryParams)
+      );
+    } catch (e) {
+      yield await this.#handleApiError(e);
+      return;
+    }
+    if (!res) {
+      throw new Error("Failed to get response from batch PURL request");
+    }
+    const isPublicToken = this.#apiToken === import_socket2.SOCKET_PUBLIC_API_TOKEN;
+    const text = res.text();
+    let start = 0;
+    for (let i = 0; i <= text.length; i++) {
+      if (i === text.length || text.charCodeAt(i) === 10) {
+        if (i > start) {
+          const line = text.slice(start, i);
+          const artifact = (0, import_parse2.jsonParse)(line, {
+            throws: false
+          });
+          if ((0, import_objects.isObjectObject)(artifact)) {
+            yield this.#handleApiSuccess(
+              /* c8 ignore next 8 - Public token artifact reshaping branch for policy compliance. */
+              isPublicToken ? reshapeArtifactForPublicPolicy(
+                artifact,
+                false,
+                queryParams?.["actions"],
+                publicPolicy
+              ) : artifact
+            );
+          }
+        }
+        start = i + 1;
+      }
+    }
+  }
+  /**
+   * Create HTTP request for batch package URL processing.
+   * Internal method for handling PURL batch API calls with retry logic.
+   */
+  async #createBatchPurlRequest(componentsObj, queryParams) {
+    const url = `${this.#baseUrl}purl?${queryToSearchParams(queryParams)}`;
+    const response = await (0, import_http_request3.httpRequest)(url, {
+      method: "POST",
+      body: JSON.stringify(componentsObj),
+      headers: this.#reqOptions.headers,
+      timeout: this.#reqOptions.timeout,
+      maxResponseSize: MAX_RESPONSE_SIZE
+    });
+    if (!isResponseOk(response)) {
+      throw new ResponseError(response, "", url);
+    }
+    return response;
+  }
+  /**
+   * Create standardized error result from query operation exceptions.
+   * Internal error handling for non-throwing query API methods.
+   */
+  #createQueryErrorResult(e) {
+    if (e instanceof SyntaxError) {
+      const enhancedError = e;
+      let responseText = enhancedError.originalResponse || "";
+      if (!responseText) {
+        const match = e.message.match(/Invalid JSON response:\n([\s\S]*?)\n→/);
+        responseText = match?.[1] || "";
+      }
+      const preview = responseText.slice(0, 100) || "";
+      return {
+        cause: `Please report this. JSON.parse threw an error over the following response: \`${preview.trim()}${responseText.length > 100 ? "\u2026" : ""}\``,
+        data: void 0,
+        error: "Server returned invalid JSON",
+        status: 0,
+        success: false
+      };
+    }
+    const errStr = e ? String(e).trim() : "";
+    return {
+      cause: errStr || import_core.UNKNOWN_ERROR,
+      data: void 0,
+      error: "API request failed",
+      status: 0,
+      success: false
+    };
+  }
+  /**
+   * Execute an HTTP request with retry logic.
+   * Internal method for wrapping HTTP operations with exponential backoff.
+   */
+  async #executeWithRetry(operation) {
+    const result = await (0, import_promises.pRetry)(operation, {
+      baseDelayMs: this.#retryDelay,
+      onRetry: (_attempt, error, _delay) => {
+        if (!(error instanceof ResponseError)) {
+          return void 0;
+        }
+        const { status } = error.response;
+        if (status === 429) {
+          const retryAfter = this.#parseRetryAfter(
+            error.response.headers["retry-after"]
+          );
+          if (retryAfter !== void 0) {
+            return retryAfter;
+          }
+          return void 0;
+        }
+        if (status >= 400 && status < 500) {
+          throw error;
+        }
+        return void 0;
+      },
+      onRetryRethrow: true,
+      retries: this.#retries
+    });
+    if (result === void 0) {
+      throw new Error("Request aborted");
+    }
+    return result;
+  }
+  /**
+   * Get the TTL for a specific endpoint.
+   * Returns endpoint-specific TTL if configured, otherwise returns default TTL.
+   */
+  #getTtlForEndpoint(endpoint) {
+    const cacheTtl = this.#cacheTtlConfig;
+    if (typeof cacheTtl === "number") {
+      return cacheTtl;
+    }
+    if (cacheTtl && typeof cacheTtl === "object") {
+      const endpointTtl = cacheTtl[endpoint];
+      if (typeof endpointTtl === "number") {
+        return endpointTtl;
+      }
+      return cacheTtl.default;
+    }
+    return void 0;
+  }
+  /**
+   * Get or create a cache instance with the specified TTL.
+   * Reuses existing cache instances to avoid creating duplicates.
+   */
+  #getCacheForTtl(ttl) {
+    let cache = this.#cacheByTtl.get(ttl);
+    if (!cache) {
+      cache = (0, import_cache_with_ttl.createTtlCache)({
+        memoize: true,
+        prefix: "socket-sdk",
+        ttl
+      });
+      this.#cacheByTtl.set(ttl, cache);
+    }
+    return cache;
+  }
+  /**
+   * Execute a GET request with optional caching.
+   * Internal method for handling cached GET requests with retry logic.
+   * Supports per-endpoint TTL configuration.
+   */
+  async #getCached(cacheKey, fetcher, endpointName) {
+    if (!this.#cache) {
+      return await this.#executeWithRetry(fetcher);
+    }
+    const endpointTtl = endpointName ? this.#getTtlForEndpoint(endpointName) : void 0;
+    const cacheToUse = endpointTtl !== void 0 ? this.#getCacheForTtl(endpointTtl) : this.#cache;
+    return await cacheToUse.getOrFetch(cacheKey, async () => {
+      return await this.#executeWithRetry(fetcher);
+    });
+  }
+  /**
+   * Handle API error responses and convert to standardized error result.
+   * Internal error handling with status code analysis and message formatting.
+   */
+  async #handleApiError(error) {
+    if (error instanceof SyntaxError) {
+      return {
+        success: false,
+        error: error.message,
+        // Response was HTTP 200 but body was not valid JSON
+        status: 200
+      };
+    }
+    if (!(error instanceof ResponseError)) {
+      throw new Error("Unexpected Socket API error", {
+        cause: error
+      });
+    }
+    const { status: statusCode } = error.response;
+    if (statusCode && statusCode >= 500) {
+      throw new Error(`Socket API server error (${statusCode})`, {
+        cause: error
+      });
+    }
+    const bodyStr = error.response.text();
+    let body;
+    try {
+      const parsed = JSON.parse(bodyStr);
+      if (typeof parsed?.error?.message === "string") {
+        body = parsed.error.message;
+        if (parsed.error.details) {
+          const detailsStr = typeof parsed.error.details === "string" ? parsed.error.details : JSON.stringify(parsed.error.details);
+          body = `${body} - Details: ${detailsStr}`;
+        }
+      }
+    } catch {
+      body = bodyStr;
+    }
+    let errorMessage = error.message ?? /* c8 ignore next - fallback for missing error message */
+    import_core.UNKNOWN_ERROR;
+    const trimmedBody = body?.trim();
+    if (trimmedBody && !errorMessage.includes(trimmedBody)) {
+      const statusMessage = error.response?.statusText;
+      if (statusMessage && errorMessage.includes(statusMessage)) {
+        errorMessage = errorMessage.replace(statusMessage, trimmedBody);
+      } else {
+        errorMessage = `${errorMessage}: ${trimmedBody}`;
+      }
+    }
+    let actionableGuidance;
+    if (statusCode === 401) {
+      actionableGuidance = [
+        "\u2192 Authentication failed. API token is invalid or expired.",
+        "\u2192 Check: Your API token is correct and active.",
+        `\u2192 Generate a new token at: ${import_socket.SOCKET_API_TOKENS_URL}`
+      ].join("\n");
+    } else if (statusCode === 403) {
+      actionableGuidance = [
+        "\u2192 Authorization failed. Insufficient permissions.",
+        "\u2192 Check: Your API token has required permissions for this operation.",
+        "\u2192 Check: You have access to the specified organization/repository.",
+        `\u2192 Verify: Organization settings at ${import_socket.SOCKET_DASHBOARD_URL}`
+      ].join("\n");
+    } else if (statusCode === 404) {
+      actionableGuidance = [
+        "\u2192 Resource not found.",
+        "\u2192 Verify: Package name, version, or resource ID is correct.",
+        "\u2192 Check: Organization or repository exists and is accessible."
+      ].join("\n");
+    } else if (statusCode === 429) {
+      const retryAfter = error.response.headers["retry-after"];
+      const retryMsg = retryAfter ? `Retry after ${retryAfter} seconds.` : "Wait before retrying.";
+      actionableGuidance = [
+        "\u2192 Rate limit exceeded. Too many requests.",
+        `\u2192 ${retryMsg}`,
+        "\u2192 Try: Implement exponential backoff or enable SDK retry option.",
+        `\u2192 Contact support to increase rate limits: ${import_socket.SOCKET_CONTACT_URL}`
+      ].join("\n");
+    } else if (statusCode === 400) {
+      actionableGuidance = [
+        "\u2192 Bad request. Invalid parameters or request body.",
+        "\u2192 Check: All required parameters are provided and correctly formatted.",
+        "\u2192 Verify: Package URLs (PURLs) follow correct format."
+      ].join("\n");
+    } else if (statusCode === 413) {
+      actionableGuidance = [
+        "\u2192 Payload too large. Request exceeds size limits.",
+        "\u2192 Try: Reduce the number of files or packages in a single request.",
+        "\u2192 Try: Use batch operations with smaller chunks."
+      ].join("\n");
+    }
+    const causeWithGuidance = actionableGuidance ? [trimmedBody, "", actionableGuidance].filter(Boolean).join("\n") : body;
+    const finalCause = filterRedundantCause(errorMessage, causeWithGuidance);
+    return {
+      cause: finalCause,
+      data: void 0,
+      error: errorMessage,
+      /* c8 ignore next - fallback for missing status code in edge cases. */
+      status: statusCode ?? 0,
+      success: false,
+      url: error.url
+    };
+  }
+  /**
+   * Handle successful API responses and convert to standardized success result.
+   * Internal success handling with consistent response formatting.
+   */
+  #handleApiSuccess(data) {
+    return {
+      cause: void 0,
+      data,
+      error: void 0,
+      // Use generic 200 OK status for all successful API responses.
+      status: 200,
+      success: true
+    };
+  }
+  /**
+   * Handle query API response data based on requested response type.
+   * Internal method for processing different response formats (json, text, response).
+   */
+  async #handleQueryResponseData(response, responseType) {
+    if (responseType === "response") {
+      return response;
+    }
+    if (responseType === "text") {
+      return response.text();
+    }
+    if (responseType === "json") {
+      return await getResponseJson(response);
+    }
+    return response;
+  }
+  /**
+   * Parse Retry-After header value and return delay in milliseconds.
+   * Supports both delay-seconds (integer) and HTTP-date formats.
+   */
+  #parseRetryAfter(retryAfterValue) {
+    if (!retryAfterValue) {
+      return void 0;
+    }
+    const value = Array.isArray(retryAfterValue) ? retryAfterValue[0] : retryAfterValue;
+    if (!value) {
+      return void 0;
+    }
+    const seconds = Number.parseInt(value, 10);
+    if (!Number.isNaN(seconds) && seconds >= 0) {
+      return seconds * 1e3;
+    }
+    const date = new Date(value);
+    if (!Number.isNaN(date.getTime())) {
+      const delayMs = date.getTime() - Date.now();
+      if (delayMs > 0) {
+        return delayMs;
+      }
+    }
+    return void 0;
+  }
+  /**
+   * Get package metadata and alerts by PURL strings for a specific organization.
+   * Organization-scoped version of batchPackageFetch with security policy label support.
+   *
+   * @param orgSlug - Organization identifier
+   * @param componentsObj - Object containing array of components with PURL strings
+   * @param queryParams - Optional query parameters including labels, alerts, compact, etc.
+   * @returns Package metadata and alerts for the requested PURLs
+   *
+   * @example
+   * ```typescript
+   * const result = await sdk.batchOrgPackageFetch('my-org',
+   *   {
+   *     components: [
+   *       { purl: 'pkg:npm/express@4.19.2' },
+   *       { purl: 'pkg:pypi/django@5.0.6' }
+   *     ]
+   *   },
+   *   { labels: ['production'], alerts: true }
+   * )
+   *
+   * if (result.success) {
+   *   for (const artifact of result.data) {
+   *     console.log(`${artifact.name}@${artifact.version}`)
+   *   }
+   * }
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/batchpackagefetchbyorg
+   * @apiEndpoint POST /orgs/{org_slug}/purl
+   * @quota 100 units
+   * @scopes packages:list
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async batchOrgPackageFetch(orgSlug, componentsObj, queryParams) {
+    const url = `${this.#baseUrl}orgs/${encodeURIComponent(orgSlug)}/purl?${queryToSearchParams(queryParams)}`;
+    let res;
+    try {
+      res = await this.#executeWithRetry(async () => {
+        const response = await (0, import_http_request3.httpRequest)(url, {
+          method: "POST",
+          body: JSON.stringify(componentsObj),
+          headers: this.#reqOptions.headers,
+          timeout: this.#reqOptions.timeout,
+          maxResponseSize: MAX_RESPONSE_SIZE
+        });
+        if (!isResponseOk(response)) {
+          throw new ResponseError(response, "POST Request failed", url);
+        }
+        return response;
+      });
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+    if (!res) {
+      throw new Error("Failed to get response from batch PURL request");
+    }
+    const results = [];
+    const text = res.text();
+    let start = 0;
+    for (let i = 0; i <= text.length; i++) {
+      if (i === text.length || text.charCodeAt(i) === 10) {
+        if (i > start) {
+          const line = text.slice(start, i);
+          const artifact = (0, import_parse2.jsonParse)(line, {
+            throws: false
+          });
+          if ((0, import_objects.isObjectObject)(artifact)) {
+            results.push(artifact);
+          }
+        }
+        start = i + 1;
+      }
+    }
+    const compact = (0, import_url.urlSearchParamAsBoolean)(
+      (0, import_objects.getOwn)(queryParams, "compact")
+    );
+    return this.#handleApiSuccess(
+      compact ? results : results
+    );
+  }
+  /**
+   * Fetch package analysis data for multiple packages in a single batch request.
+   * Returns all results at once after processing is complete.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async batchPackageFetch(componentsObj, queryParams) {
+    let res;
+    try {
+      res = await this.#createBatchPurlRequest(componentsObj, queryParams);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+    if (!res) {
+      throw new Error("Failed to get response from batch PURL request");
+    }
+    const isPublicToken = this.#apiToken === import_socket2.SOCKET_PUBLIC_API_TOKEN;
+    const results = [];
+    const text = res.text();
+    let start = 0;
+    for (let i = 0; i <= text.length; i++) {
+      if (i === text.length || text.charCodeAt(i) === 10) {
+        if (i > start) {
+          const line = text.slice(start, i);
+          const artifact = (0, import_parse2.jsonParse)(line, {
+            throws: false
+          });
+          if ((0, import_objects.isObjectObject)(artifact)) {
+            results.push(
+              /* c8 ignore next 8 - Public token artifact reshaping for policy compliance. */
+              isPublicToken ? reshapeArtifactForPublicPolicy(
+                artifact,
+                false,
+                queryParams?.["actions"],
+                publicPolicy
+              ) : artifact
+            );
+          }
+        }
+        start = i + 1;
+      }
+    }
+    const compact = (0, import_url.urlSearchParamAsBoolean)(
+      (0, import_objects.getOwn)(queryParams, "compact")
+    );
+    return this.#handleApiSuccess(
+      compact ? results : results
+    );
+  }
+  /**
+   * Stream package analysis data for multiple packages with chunked processing and concurrency control.
+   * Returns results as they become available via async generator.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async *batchPackageStream(componentsObj, options) {
+    const {
+      chunkSize = 100,
+      concurrencyLimit = 10,
+      queryParams
+    } = {
+      __proto__: null,
+      ...options
+    };
+    const neededMaxListeners = concurrencyLimit * 2;
+    (0, import_suppress_warnings.setMaxEventTargetListeners)(abortSignal, neededMaxListeners);
+    const { components } = componentsObj;
+    const { length: componentsCount } = components;
+    const running = /* @__PURE__ */ new Map();
+    let index = 0;
+    const enqueueGen = () => {
+      if (index >= componentsCount) {
+        return;
+      }
+      const generator = this.#createBatchPurlGenerator(
+        {
+          components: components.slice(index, index + chunkSize)
+        },
+        queryParams
+      );
+      continueGen(generator);
+      index += chunkSize;
+    };
+    const continueGen = (generator) => {
+      const {
+        promise,
+        reject: rejectFn,
+        resolve: resolveFn
+      } = promiseWithResolvers();
+      running.set(generator, promise);
+      void generator.next().then(
+        (iteratorResult) => resolveFn({ generator, iteratorResult }),
+        rejectFn
+      );
+    };
+    while (running.size < concurrencyLimit && index < componentsCount) {
+      enqueueGen();
+    }
+    while (running.size > 0) {
+      const { generator, iteratorResult } = await Promise.race(
+        running.values()
+      );
+      running.delete(generator);
+      if (iteratorResult.value) {
+        yield iteratorResult.value;
+      }
+      if (iteratorResult.done) {
+        enqueueGen();
+      } else {
+        continueGen(generator);
+      }
+    }
+  }
+  /**
+   * Check packages for malware and security alerts.
+   *
+   * For small sets (≤ MAX_FIREWALL_COMPONENTS), uses parallel firewall API
+   * requests which return full artifact data including score and alert details.
+   *
+   * For larger sets, uses the batch PURL API for efficiency.
+   *
+   * Both paths normalize alerts through publicPolicy and only return
+   * malware-relevant results.
+   *
+   * @param components - Array of package URLs to check
+   * @returns Normalized results with policy-filtered alerts per package
+   */
+  async checkMalware(components) {
+    if (components.length <= MAX_FIREWALL_COMPONENTS) {
+      return this.#checkMalwareFirewall(components);
+    }
+    return this.#checkMalwareBatch(components);
+  }
+  // Small-set path: parallel firewall API requests per PURL.
+  // Returns full artifact data (score, alert props, categories, fix info).
+  async #checkMalwareFirewall(components) {
+    const packages = [];
+    const results = await Promise.allSettled(
+      components.map(async ({ purl }) => {
+        const urlPath = `/${encodeURIComponent(purl)}`;
+        const publicHeaders = {
+          __proto__: null
+        };
+        const srcHeaders = this.#reqOptions.headers;
+        if (srcHeaders) {
+          const keys = Object.keys(srcHeaders);
+          for (let i = 0, { length } = keys; i < length; i += 1) {
+            const key = keys[i];
+            if (key.toLowerCase() !== "authorization") {
+              publicHeaders[key] = srcHeaders[key];
+            }
+          }
+        }
+        const response = await createGetRequest(
+          SOCKET_FIREWALL_API_URL,
+          urlPath,
+          { ...this.#reqOptions, headers: publicHeaders }
+        );
+        if (!isResponseOk(response)) return void 0;
+        const json = await getResponseJson(response);
+        return json;
+      })
+    );
+    for (const settled of results) {
+      if (settled.status === "rejected" || !settled.value) continue;
+      packages.push(_SocketSdk.#normalizeArtifact(settled.value, publicPolicy));
+    }
+    return {
+      cause: void 0,
+      data: packages,
+      error: void 0,
+      status: 200,
+      success: true
+    };
+  }
+  // Multi-component path: batch PURL API request, normalized to publicPolicy.
+  async #checkMalwareBatch(components) {
+    const result = await this.batchPackageFetch(
+      { components },
+      { alerts: true, cachedResultsOnly: true }
+    );
+    if (!result.success) {
+      return {
+        cause: result.cause,
+        data: void 0,
+        error: result.error,
+        status: result.status,
+        success: false
+      };
+    }
+    const packages = [];
+    for (const artifact of result.data) {
+      packages.push(_SocketSdk.#normalizeArtifact(artifact, publicPolicy));
+    }
+    return {
+      cause: void 0,
+      data: packages,
+      error: void 0,
+      status: 200,
+      success: true
+    };
+  }
+  // Normalize an artifact into MalwareCheckPackage.
+  // When policy is provided, derive action from the map.
+  // When policy is undefined, use server-assigned alert.action.
+  static #normalizeArtifact(artifact, policy) {
+    const alerts = [];
+    if (artifact.alerts) {
+      for (const alert of artifact.alerts) {
+        const action = policy ? policy.get(alert.type) ?? "ignore" : alert.action ?? "ignore";
+        if (action === "error" || action === "warn") {
+          alerts.push({
+            category: alert.category,
+            fix: alert.fix ? { description: alert.fix.description, type: alert.fix.type } : void 0,
+            key: alert.key,
+            props: alert.props,
+            severity: alert.severity,
+            type: alert.type
+          });
+        }
+      }
+    }
+    return {
+      alerts,
+      name: artifact.name,
+      namespace: artifact.namespace,
+      score: artifact.score,
+      type: artifact.type,
+      version: artifact.version
+    };
+  }
+  /**
+   * Create a snapshot of project dependencies by uploading manifest files.
+   * Analyzes dependency files to generate a comprehensive security report.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async createDependenciesSnapshot(filepaths, options) {
+    const { pathsRelativeTo = ".", queryParams } = {
+      __proto__: null,
+      ...options
+    };
+    const basePath = resolveBasePath(pathsRelativeTo);
+    const absFilepaths = resolveAbsPaths(filepaths, basePath);
+    const { invalidPaths, validPaths } = (0, import_fs.validateFiles)(absFilepaths);
+    if (this.#onFileValidation && invalidPaths.length > 0) {
+      const result = await this.#onFileValidation(validPaths, invalidPaths, {
+        operation: "createDependenciesSnapshot"
+      });
+      if (!result.shouldContinue) {
+        const errorMsg = result.errorMessage ?? "File validation failed";
+        return {
+          cause: filterRedundantCause(errorMsg, result.errorCause),
+          data: void 0,
+          error: errorMsg,
+          status: 400,
+          success: false
+        };
+      }
+    }
+    if (!this.#onFileValidation && invalidPaths.length > 0) {
+      const samplePaths = invalidPaths.slice(0, 3).join("\n  - ");
+      const remaining = invalidPaths.length > 3 ? `
+  ... and ${invalidPaths.length - 3} more` : "";
+      console.warn(
+        `Warning: ${invalidPaths.length} files skipped (unreadable):
+  - ${samplePaths}${remaining}
+\u2192 This may occur with Yarn Berry PnP or pnpm symlinks.
+\u2192 Try: Run installation command to ensure files are accessible.`
+      );
+    }
+    if (validPaths.length === 0) {
+      const samplePaths = invalidPaths.slice(0, 5).join("\n  - ");
+      const remaining = invalidPaths.length > 5 ? `
+  ... and ${invalidPaths.length - 5} more` : "";
+      return {
+        cause: [
+          `All ${invalidPaths.length} files failed validation:`,
+          `  - ${samplePaths}${remaining}`,
+          "",
+          "\u2192 Common causes:",
+          "  \xB7Yarn Berry PnP virtual filesystem (files are not on disk)",
+          "  \xB7pnpm symlinks pointing to inaccessible locations",
+          "  \xB7Incorrect file permissions",
+          "  \xB7Files were deleted after discovery",
+          "",
+          "\u2192 Solutions:",
+          "  \xB7Yarn Berry: Use `nodeLinker: node-modules` in .yarnrc.yml",
+          "  \xB7pnpm: Use `node-linker=hoisted` in .npmrc",
+          "  \xB7Check file permissions with: ls -la ",
+          "  \xB7Run package manager install command"
+        ].join("\n"),
+        data: void 0,
+        error: "No readable manifest files found",
+        status: 400,
+        success: false
+      };
+    }
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createUploadRequest(
+            this.#baseUrl,
+            `dependencies/upload?${queryToSearchParams(queryParams)}`,
+            createRequestBodyForFilepaths(validPaths, basePath),
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Create a full security scan for an organization.
+   *
+   * Uploads project manifest files and initiates full security analysis.
+   * Returns scan metadata with guaranteed required fields.
+   *
+   * @param orgSlug - Organization identifier
+   * @param filepaths - Array of file paths to upload (package.json, package-lock.json, etc.)
+   * @param options - Scan configuration including repository, branch, and commit details
+   * @returns Full scan metadata including ID and URLs
+   *
+   * @example
+   * ```typescript
+   * const result = await sdk.createFullScan('my-org',
+   *   ['package.json', 'package-lock.json'],
+   *   {
+   *     repo: 'my-repo',
+   *     branch: 'main',
+   *     commit_message: 'Update dependencies',
+   *     commit_hash: 'abc123',
+   *     pathsRelativeTo: './my-project'
+   *   }
+   * )
+   *
+   * if (result.success) {
+   *   console.log('Scan ID:', result.data.id)
+   *   console.log('Report URL:', result.data.html_report_url)
+   * }
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/createorgfullscan
+   * @apiEndpoint POST /orgs/{org_slug}/full-scans
+   * @quota 0 units
+   * @scopes full-scans:create
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async createFullScan(orgSlug, filepaths, options) {
+    const { pathsRelativeTo = ".", ...queryParams } = {
+      __proto__: null,
+      ...options
+    };
+    const basePath = resolveBasePath(pathsRelativeTo);
+    const absFilepaths = resolveAbsPaths(filepaths, basePath);
+    const { invalidPaths, validPaths } = (0, import_fs.validateFiles)(absFilepaths);
+    if (this.#onFileValidation && invalidPaths.length > 0) {
+      const result = await this.#onFileValidation(validPaths, invalidPaths, {
+        operation: "createFullScan",
+        orgSlug
+      });
+      if (!result.shouldContinue) {
+        const errorMsg = result.errorMessage ?? "File validation failed";
+        return {
+          cause: filterRedundantCause(errorMsg, result.errorCause),
+          data: void 0,
+          error: errorMsg,
+          status: 400,
+          success: false
+        };
+      }
+    }
+    if (!this.#onFileValidation && invalidPaths.length > 0) {
+      const samplePaths = invalidPaths.slice(0, 3).join("\n  - ");
+      const remaining = invalidPaths.length > 3 ? `
+  ... and ${invalidPaths.length - 3} more` : "";
+      console.warn(
+        `Warning: ${invalidPaths.length} files skipped (unreadable):
+  - ${samplePaths}${remaining}
+\u2192 This may occur with Yarn Berry PnP or pnpm symlinks.
+\u2192 Try: Run installation command to ensure files are accessible.`
+      );
+    }
+    if (validPaths.length === 0) {
+      const samplePaths = invalidPaths.slice(0, 5).join("\n  - ");
+      const remaining = invalidPaths.length > 5 ? `
+  ... and ${invalidPaths.length - 5} more` : "";
+      return {
+        cause: [
+          `All ${invalidPaths.length} files failed validation:`,
+          `  - ${samplePaths}${remaining}`,
+          "",
+          "\u2192 Common causes:",
+          "  \xB7Yarn Berry PnP virtual filesystem (files are not on disk)",
+          "  \xB7pnpm symlinks pointing to inaccessible locations",
+          "  \xB7Incorrect file permissions",
+          "  \xB7Files were deleted after discovery",
+          "",
+          "\u2192 Solutions:",
+          "  \xB7Yarn Berry: Use `nodeLinker: node-modules` in .yarnrc.yml",
+          "  \xB7pnpm: Use `node-linker=hoisted` in .npmrc",
+          "  \xB7Check file permissions with: ls -la ",
+          "  \xB7Run package manager install command"
+        ].join("\n"),
+        data: void 0,
+        error: "No readable manifest files found",
+        status: 400,
+        success: false
+      };
+    }
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createUploadRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/full-scans?${queryToSearchParams(queryParams)}`,
+            createRequestBodyForFilepaths(validPaths, basePath),
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return {
+        cause: void 0,
+        data,
+        error: void 0,
+        status: 200,
+        success: true
+      };
+    } catch (e) {
+      const errorResult = await this.#handleApiError(e);
+      return {
+        cause: errorResult.cause,
+        data: void 0,
+        error: errorResult.error,
+        status: errorResult.status,
+        success: false
+      };
+    }
+  }
+  /**
+   * Create a diff scan from two full scan IDs.
+   * Compares two existing full scans to identify changes.
+   *
+   * @param orgSlug - Organization identifier
+   * @param options - Diff scan creation options
+   * @param options.after - ID of the after/head full scan (newer)
+   * @param options.before - ID of the before/base full scan (older)
+   * @param options.description - Description of the diff scan
+   * @param options.external_href - External URL to associate with the diff scan
+   * @param options.merge - Set true for merged commits, false for open PR diffs
+   * @returns Diff scan details
+   *
+   * @example
+   * ```typescript
+   * const result = await sdk.createOrgDiffScanFromIds('my-org', {
+   *   before: 'scan-id-1',
+   *   after: 'scan-id-2',
+   *   description: 'Compare versions',
+   *   merge: false
+   * })
+   *
+   * if (result.success) {
+   *   console.log('Diff scan created:', result.data.diff_scan.id)
+   * }
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/createorgdiffscanfromids
+   * @apiEndpoint POST /orgs/{org_slug}/diff-scans/from-ids
+   * @quota 0 units
+   * @scopes diff-scans:create, full-scans:list
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async createOrgDiffScanFromIds(orgSlug, options) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createRequestWithJson(
+            "POST",
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/diff-scans/from-ids?${queryToSearchParams(options)}`,
+            {},
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Create a full scan from an archive file (.tar, .tar.gz/.tgz, or .zip).
+   * Uploads and scans a compressed archive of project files.
+   *
+   * @param orgSlug - Organization identifier
+   * @param archivePath - Path to the archive file to upload
+   * @param options - Scan configuration options including repo, branch, and metadata
+   * @returns Created full scan details with scan ID and status
+   *
+   * @throws {Error} When server returns 5xx status codes or file cannot be read
+   */
+  async createOrgFullScanFromArchive(orgSlug, archivePath, options) {
+    const basePath = import_node_path4.default.dirname(archivePath);
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createUploadRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/full-scans/archive?${queryToSearchParams(options)}`,
+            createRequestBodyForFilepaths([archivePath], basePath),
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Create a new webhook for an organization.
+   * Webhooks allow you to receive HTTP POST notifications when specific events occur.
+   *
+   * @param orgSlug - Organization identifier
+   * @param webhookData - Webhook configuration including name, URL, secret, and events
+   * @returns Created webhook details including webhook ID
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async createOrgWebhook(orgSlug, webhookData) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createRequestWithJson(
+            "POST",
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/webhooks`,
+            webhookData,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Create a new repository in an organization.
+   *
+   * Registers a repository for monitoring and security scanning.
+   *
+   * @param orgSlug - Organization identifier
+   * @param repoSlug - Repository name/slug
+   * @param params - Additional repository configuration
+   * @param params.archived - Whether the repository is archived
+   * @param params.default_branch - Default branch of the repository
+   * @param params.description - Description of the repository
+   * @param params.homepage - Homepage URL of the repository
+   * @param params.visibility - Visibility setting ('public' or 'private')
+   * @param params.workspace - Workspace of the repository
+   * @returns Created repository details
+   *
+   * @example
+   * ```typescript
+   * const result = await sdk.createRepository('my-org', 'my-repo', {
+   *   description: 'My project repository',
+   *   homepage: 'https://example.com',
+   *   visibility: 'private'
+   * })
+   *
+   * if (result.success) {
+   *   console.log('Repository created:', result.data.id)
+   * }
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/createorgrepo
+   * @apiEndpoint POST /orgs/{org_slug}/repos
+   * @quota 0 units
+   * @scopes repo:write
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async createRepository(orgSlug, repoSlug, params) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createRequestWithJson(
+            "POST",
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/repos`,
+            { ...params, name: repoSlug },
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return {
+        cause: void 0,
+        data,
+        error: void 0,
+        status: 200,
+        success: true
+      };
+    } catch (e) {
+      const errorResult = await this.#handleApiError(e);
+      return {
+        cause: errorResult.cause,
+        data: void 0,
+        error: errorResult.error,
+        status: errorResult.status,
+        success: false
+      };
+    }
+  }
+  /**
+   * Create a new repository label for an organization.
+   *
+   * Labels can be used to group and organize repositories and apply security/license policies.
+   *
+   * @param orgSlug - Organization identifier
+   * @param labelData - Label configuration (must include name property)
+   * @returns Created label with guaranteed id and name fields
+   *
+   * @example
+   * ```typescript
+   * const result = await sdk.createRepositoryLabel('my-org', { name: 'production' })
+   *
+   * if (result.success) {
+   *   console.log('Label created:', result.data.id)
+   *   console.log('Label name:', result.data.name)
+   * }
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/createorgrepolabel
+   * @apiEndpoint POST /orgs/{org_slug}/repos/labels
+   * @quota 0 units
+   * @scopes repo-label:create
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async createRepositoryLabel(orgSlug, labelData) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createRequestWithJson(
+            "POST",
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/repos/labels`,
+            labelData,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return {
+        cause: void 0,
+        data,
+        error: void 0,
+        status: 201,
+        success: true
+      };
+    } catch (e) {
+      const errorResult = await this.#handleApiError(e);
+      return {
+        cause: errorResult.cause,
+        data: void 0,
+        error: errorResult.error,
+        status: errorResult.status,
+        success: false
+      };
+    }
+  }
+  /**
+   * Delete a full scan from an organization.
+   *
+   * Permanently removes scan data and results.
+   *
+   * @param orgSlug - Organization identifier
+   * @param scanId - Full scan identifier to delete
+   * @returns Success confirmation
+   *
+   * @example
+   * ```typescript
+   * const result = await sdk.deleteFullScan('my-org', 'scan_123')
+   *
+   * if (result.success) {
+   *   console.log('Scan deleted successfully')
+   * }
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/deleteorgfullscan
+   * @apiEndpoint DELETE /orgs/{org_slug}/full-scans/{full_scan_id}
+   * @quota 0 units
+   * @scopes full-scans:delete
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async deleteFullScan(orgSlug, scanId) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createDeleteRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/full-scans/${encodeURIComponent(scanId)}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return {
+        cause: void 0,
+        data,
+        error: void 0,
+        status: 200,
+        success: true
+      };
+    } catch (e) {
+      const errorResult = await this.#handleApiError(e);
+      return {
+        cause: errorResult.cause,
+        data: void 0,
+        error: errorResult.error,
+        status: errorResult.status,
+        success: false
+      };
+    }
+  }
+  /**
+   * Delete a diff scan from an organization.
+   * Permanently removes diff scan data and results.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async deleteOrgDiffScan(orgSlug, diffScanId) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createDeleteRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/diff-scans/${encodeURIComponent(diffScanId)}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Delete a webhook from an organization.
+   * This will stop all future webhook deliveries to the webhook URL.
+   *
+   * @param orgSlug - Organization identifier
+   * @param webhookId - Webhook ID to delete
+   * @returns Success status
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async deleteOrgWebhook(orgSlug, webhookId) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createDeleteRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/webhooks/${encodeURIComponent(webhookId)}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Delete a repository from an organization.
+   *
+   * Removes repository monitoring and associated scan data.
+   *
+   * @param orgSlug - Organization identifier
+   * @param repoSlug - Repository slug/name to delete
+   * @param options - Optional parameters including workspace
+   * @returns Success confirmation
+   *
+   * @example
+   * ```typescript
+   * const result = await sdk.deleteRepository('my-org', 'old-repo')
+   *
+   * if (result.success) {
+   *   console.log('Repository deleted')
+   * }
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/deleteorgrepo
+   * @apiEndpoint DELETE /orgs/{org_slug}/repos/{repo_slug}
+   * @quota 0 units
+   * @scopes repo:write
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async deleteRepository(orgSlug, repoSlug, options) {
+    const { workspace } = {
+      __proto__: null,
+      ...options
+    };
+    const queryString = workspace ? `?${queryToSearchParams({ workspace })}` : "";
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createDeleteRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/repos/${encodeURIComponent(repoSlug)}${queryString}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return {
+        cause: void 0,
+        data,
+        error: void 0,
+        status: 200,
+        success: true
+      };
+    } catch (e) {
+      const errorResult = await this.#handleApiError(e);
+      return {
+        cause: errorResult.cause,
+        data: void 0,
+        error: errorResult.error,
+        status: errorResult.status,
+        success: false
+      };
+    }
+  }
+  /**
+   * Delete a repository label from an organization.
+   *
+   * Removes label and all its associations (repositories, security policy, license policy, etc.).
+   *
+   * @param orgSlug - Organization identifier
+   * @param labelId - Label identifier
+   * @returns Deletion confirmation
+   *
+   * @example
+   * ```typescript
+   * const result = await sdk.deleteRepositoryLabel('my-org', 'label-id-123')
+   *
+   * if (result.success) {
+   *   console.log('Label deleted:', result.data.status)
+   * }
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/deleteorgrepolabel
+   * @apiEndpoint DELETE /orgs/{org_slug}/repos/labels/{label_id}
+   * @quota 0 units
+   * @scopes repo-label:delete
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async deleteRepositoryLabel(orgSlug, labelId) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createDeleteRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/repos/labels/${encodeURIComponent(labelId)}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return {
+        cause: void 0,
+        data,
+        error: void 0,
+        status: 200,
+        success: true
+      };
+    } catch (e) {
+      const errorResult = await this.#handleApiError(e);
+      return {
+        cause: errorResult.cause,
+        data: void 0,
+        error: errorResult.error,
+        status: errorResult.status,
+        success: false
+      };
+    }
+  }
+  /**
+   * Download full scan files as a tar archive.
+   *
+   * Streams the full scan file contents to the specified output path as a tar file.
+   * Includes size limit enforcement to prevent excessive disk usage.
+   *
+   * @param orgSlug - Organization identifier
+   * @param fullScanId - Full scan identifier
+   * @param outputPath - Local file path to write the tar archive
+   * @returns Download result with success/error status
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async downloadOrgFullScanFilesAsTar(orgSlug, fullScanId, outputPath) {
+    const url = `${this.#baseUrl}orgs/${encodeURIComponent(orgSlug)}/full-scans/${encodeURIComponent(fullScanId)}/files.tar`;
+    try {
+      const res = await this.#executeWithRetry(async () => {
+        const response = await (0, import_http_request3.httpRequest)(url, {
+          method: "GET",
+          headers: this.#reqOptions.headers,
+          stream: true,
+          timeout: this.#reqOptions.timeout
+        });
+        if (!isResponseOk(response)) {
+          throw new ResponseError(response, "", url);
+        }
+        return response;
+      });
+      const { createWriteStream } = await import("node:fs");
+      await new Promise((resolve, reject) => {
+        const ws = createWriteStream(outputPath);
+        ws.on("error", reject);
+        ws.on("close", resolve);
+        res.rawResponse.pipe(ws);
+      });
+      return this.#handleApiSuccess(res);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Download patch file content from Socket blob storage.
+   * Retrieves patched file contents using SSRI hash or hex hash.
+   *
+   * This is a low-level utility method - you'll typically use this after calling
+   * `viewPatch()` to get patch metadata, then download individual patched files.
+   *
+   * @param hash - The blob hash in SSRI (sha256-base64) or hex format
+   * @param options - Optional configuration
+   * @param options.baseUrl - Override blob store URL (for testing)
+   * @returns Promise - The patch file content as UTF-8 string
+   * @throws Error if blob not found (404) or download fails
+   *
+   * @example
+   * ```typescript
+   * const sdk = new SocketSdk('your-api-token')
+   * // First get patch metadata
+   * const patch = await sdk.viewPatch('my-org', 'patch-uuid')
+   * // Then download the actual patched file
+   * const fileContent = await sdk.downloadPatch(patch.files['index.js'].socketBlob)
+   * ```
+   */
+  async downloadPatch(hash, options) {
+    const blobPath = `/blob/${encodeURIComponent(hash)}`;
+    const blobBaseUrl = options?.baseUrl || SOCKET_PUBLIC_BLOB_STORE_URL;
+    const url = `${blobBaseUrl}${blobPath}`;
+    const MAX_PATCH_SIZE = 50 * 1024 * 1024;
+    const res = await (0, import_http_request3.httpRequest)(url, {
+      maxResponseSize: MAX_PATCH_SIZE
+    });
+    if (res.status === 404) {
+      const message = [
+        `Blob not found: ${hash}`,
+        `\u2192 URL: ${url}`,
+        "\u2192 The patch file may have expired or the hash is incorrect.",
+        "\u2192 Verify: The blob hash is correct.",
+        "\u2192 Note: Blob URLs may expire after a certain time period."
+      ].join("\n");
+      throw new Error(message);
+    }
+    if (res.status !== 200) {
+      const message = [
+        `Failed to download blob: ${res.status} ${res.statusText}`,
+        `\u2192 Hash: ${hash}`,
+        `\u2192 URL: ${url}`,
+        "\u2192 The blob storage service may be temporarily unavailable.",
+        res.status >= 500 ? "\u2192 Try: Retry the download after a short delay." : "\u2192 Verify: The blob hash and URL are correct."
+      ].join("\n");
+      throw new Error(message);
+    }
+    return res.text();
+  }
+  /**
+   * Export scan results in CycloneDX SBOM format.
+   * Returns Software Bill of Materials compliant with CycloneDX standard.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async exportCDX(orgSlug, fullScanId) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/full-scans/${encodeURIComponent(fullScanId)}/sbom/export/cdx`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Export vulnerability exploitability data as an OpenVEX v0.2.0 document.
+   * Includes patch data and reachability analysis for vulnerability assessment.
+   *
+   * @param orgSlug - Organization identifier
+   * @param id - Full scan or SBOM report ID
+   * @param options - Optional parameters including author, role, and document_id
+   * @returns OpenVEX document with vulnerability exploitability information
+   *
+   * @example
+   * ```typescript
+   * const result = await sdk.exportOpenVEX('my-org', 'scan-id', {
+   *   author: 'Security Team',
+   *   role: 'VEX Generator'
+   * })
+   *
+   * if (result.success) {
+   *   console.log('VEX Version:', result.data.version)
+   *   console.log('Statements:', result.data.statements.length)
+   * }
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/exportopenvex
+   * @apiEndpoint GET /orgs/{org_slug}/export/openvex/{id}
+   * @quota 0 units
+   * @scopes report:read
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async exportOpenVEX(orgSlug, id, options) {
+    const queryString = options ? `?${queryToSearchParams(options)}` : "";
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/export/openvex/${encodeURIComponent(id)}${queryString}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Export scan results in SPDX SBOM format.
+   * Returns Software Bill of Materials compliant with SPDX standard.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async exportSPDX(orgSlug, fullScanId) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/full-scans/${encodeURIComponent(fullScanId)}/sbom/export/spdx`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Execute a raw GET request to any API endpoint with configurable response type.
+   * Supports both throwing (default) and non-throwing modes.
+   * @param urlPath - API endpoint path (e.g., 'organizations')
+   * @param options - Request options including responseType and throws behavior
+   * @returns Raw response, parsed data, or SocketSdkGenericResult based on options
+   */
+  async getApi(urlPath, options) {
+    const { responseType = "response", throws = true } = {
+      __proto__: null,
+      ...options
+    };
+    const url = `${this.#baseUrl}${urlPath}`;
+    try {
+      const response = await this.#executeWithRetry(async () => {
+        const res = await createGetRequest(
+          this.#baseUrl,
+          urlPath,
+          this.#reqOptionsWithHooks
+        );
+        if (!isResponseOk(res)) {
+          throw new ResponseError(res, "", url);
+        }
+        return res;
+      });
+      const data = await this.#handleQueryResponseData(
+        response,
+        responseType
+      );
+      if (throws) {
+        return data;
+      }
+      return {
+        cause: void 0,
+        data,
+        error: void 0,
+        status: response.status,
+        success: true
+      };
+    } catch (e) {
+      if (throws) {
+        throw e;
+      }
+      if (e instanceof ResponseError) {
+        const errorResult = await this.#handleApiError(e);
+        return {
+          cause: errorResult.cause,
+          data: void 0,
+          error: errorResult.error,
+          status: errorResult.status,
+          success: false,
+          url: errorResult.url
+        };
+      }
+      return this.#createQueryErrorResult(e);
+    }
+  }
+  /**
+   * Get list of API tokens for an organization.
+   * Returns organization API tokens with metadata and permissions.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getAPITokens(orgSlug) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/tokens`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Retrieve audit log events for an organization.
+   * Returns chronological log of security and administrative actions.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getAuditLogEvents(orgSlug, queryParams) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/audit-log?${queryToSearchParams(queryParams)}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Get details for a specific diff scan.
+   * Returns comparison between two full scans with artifact changes.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getDiffScanById(orgSlug, diffScanId) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/diff-scans/${encodeURIComponent(diffScanId)}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Get GitHub-flavored markdown comments for a diff scan.
+   * Returns dependency overview and alert comments suitable for pull requests.
+   *
+   * @param orgSlug - Organization identifier
+   * @param diffScanId - Diff scan identifier
+   * @param options - Optional query parameters
+   * @param options.github_installation_id - GitHub installation ID for settings
+   * @returns Diff scan metadata with formatted markdown comments
+   *
+   * @example
+   * ```typescript
+   * const result = await sdk.getDiffScanGfm('my-org', 'diff-scan-id')
+   *
+   * if (result.success) {
+   *   console.log(result.data.dependency_overview_comment)
+   *   console.log(result.data.dependency_alert_comment)
+   * }
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/getdiffscangfm
+   * @apiEndpoint GET /orgs/{org_slug}/diff-scans/{diff_scan_id}/gfm
+   * @quota 0 units
+   * @scopes diff-scans:list
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getDiffScanGfm(orgSlug, diffScanId, options) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/diff-scans/${encodeURIComponent(diffScanId)}/gfm${options ? `?${queryToSearchParams(options)}` : ""}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Retrieve the enabled entitlements for an organization.
+   *
+   * This method fetches the organization's entitlements and filters for only the enabled ones, returning their keys. Entitlements represent Socket
+   * Products that the organization has access to use.
+   */
+  async getEnabledEntitlements(orgSlug) {
+    const data = await this.#executeWithRetry(
+      async () => await getResponseJson(
+        await createGetRequest(
+          this.#baseUrl,
+          `orgs/${encodeURIComponent(orgSlug)}/entitlements`,
+          this.#reqOptionsWithHooks
+        )
+      )
+    );
+    const items = data?.items || [];
+    return items.filter((item) => item && item.enabled === true && item.key).map((item) => item.key);
+  }
+  /**
+   * Retrieve all entitlements for an organization.
+   *
+   * This method fetches all entitlements (both enabled and disabled) for
+   * an organization, returning the complete list with their status.
+   */
+  async getEntitlements(orgSlug) {
+    const data = await this.#executeWithRetry(
+      async () => await getResponseJson(
+        await createGetRequest(
+          this.#baseUrl,
+          `orgs/${encodeURIComponent(orgSlug)}/entitlements`,
+          this.#reqOptionsWithHooks
+        )
+      )
+    );
+    return data?.items || [];
+  }
+  /**
+   * Get complete full scan results buffered in memory.
+   *
+   * Returns entire scan data as JSON for programmatic processing.
+   * For large scans, consider using streamFullScan() instead.
+   *
+   * @param orgSlug - Organization identifier
+   * @param scanId - Full scan identifier
+   * @returns Complete full scan data including all artifacts
+   *
+   * @example
+   * ```typescript
+   * const result = await sdk.getFullScan('my-org', 'scan_123')
+   *
+   * if (result.success) {
+   *   console.log('Scan status:', result.data.scan_state)
+   *   console.log('Repository:', result.data.repository_slug)
+   * }
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/getorgfullscan
+   * @apiEndpoint GET /orgs/{org_slug}/full-scans/{full_scan_id}
+   * @quota 0 units
+   * @scopes full-scans:list
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getFullScan(orgSlug, scanId) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/full-scans/${encodeURIComponent(scanId)}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return {
+        cause: void 0,
+        data,
+        error: void 0,
+        status: 200,
+        success: true
+      };
+    } catch (e) {
+      const errorResult = await this.#handleApiError(e);
+      return {
+        cause: errorResult.cause,
+        data: void 0,
+        error: errorResult.error,
+        status: errorResult.status,
+        success: false
+      };
+    }
+  }
+  /**
+   * Get metadata for a specific full scan.
+   *
+   * Returns scan configuration, status, and summary information without full artifact data.
+   * Useful for checking scan status without downloading complete results.
+   *
+   * @param orgSlug - Organization identifier
+   * @param scanId - Full scan identifier
+   * @returns Scan metadata including status and configuration
+   *
+   * @example
+   * ```typescript
+   * const result = await sdk.getFullScanMetadata('my-org', 'scan_123')
+   *
+   * if (result.success) {
+   *   console.log('Scan state:', result.data.scan_state)
+   *   console.log('Branch:', result.data.branch)
+   * }
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/getorgfullscanmetadata
+   * @apiEndpoint GET /orgs/{org_slug}/full-scans/{full_scan_id}/metadata
+   * @quota 0 units
+   * @scopes full-scans:list
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getFullScanMetadata(orgSlug, scanId) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/full-scans/${encodeURIComponent(scanId)}/metadata`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return {
+        cause: void 0,
+        data,
+        error: void 0,
+        status: 200,
+        success: true
+      };
+    } catch (e) {
+      const errorResult = await this.#handleApiError(e);
+      return {
+        cause: errorResult.cause,
+        data: void 0,
+        error: errorResult.error,
+        status: errorResult.status,
+        success: false
+      };
+    }
+  }
+  /**
+   * Get security issues for a specific npm package and version.
+   * Returns detailed vulnerability and security alert information.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getIssuesByNpmPackage(pkgName, version) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `npm/${encodeURIComponent(pkgName)}/${encodeURIComponent(version)}/issues`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * List full scans associated with a specific alert.
+   * Returns paginated full scan references for alert investigation.
+   *
+   * @param orgSlug - Organization identifier
+   * @param options - Query parameters including alertKey, range, pagination
+   * @returns Paginated array of full scans associated with the alert
+   *
+   * @example
+   * ```typescript
+   * const result = await sdk.getOrgAlertFullScans('my-org', {
+   *   alertKey: 'npm/lodash/cve-2021-23337',
+   *   range: '-7d',
+   *   per_page: 50
+   * })
+   *
+   * if (result.success) {
+   *   for (const item of result.data.items) {
+   *     console.log('Full Scan ID:', item.fullScanId)
+   *   }
+   * }
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/alertfullscans
+   * @apiEndpoint GET /orgs/{org_slug}/alert-full-scan-search
+   * @quota 10 units
+   * @scopes alerts:list
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getOrgAlertFullScans(orgSlug, options) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/alert-full-scan-search?${queryToSearchParams(options)}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * List latest alerts for an organization (Beta).
+   * Returns paginated alerts with comprehensive filtering options.
+   *
+   * @param orgSlug - Organization identifier
+   * @param options - Optional query parameters for pagination and filtering
+   * @returns Paginated list of alerts with cursor-based pagination
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getOrgAlertsList(orgSlug, options) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/alerts?${queryToSearchParams(options)}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Get analytics data for organization usage patterns and security metrics.
+   * Returns statistical analysis for specified time period.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getOrgAnalytics(time) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `analytics/org/${encodeURIComponent(time)}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Fetch available fixes for vulnerabilities in a repository or scan.
+   * Returns fix recommendations including version upgrades and update types.
+   *
+   * @param orgSlug - Organization identifier
+   * @param options - Fix query options including repo_slug or full_scan_id, vulnerability IDs, and preferences
+   * @returns Fix details for requested vulnerabilities with upgrade recommendations
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getOrgFixes(orgSlug, options) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/fixes?${queryToSearchParams(options)}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Get organization's license policy configuration.
+   * Returns allowed, restricted, and monitored license types.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getOrgLicensePolicy(orgSlug) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/settings/license-policy`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Get organization's security policy configuration.
+   * Returns alert rules, severity thresholds, and enforcement settings.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getOrgSecurityPolicy(orgSlug) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/settings/security-policy`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Get organization's telemetry configuration.
+   * Returns whether telemetry is enabled for the organization.
+   *
+   * @param orgSlug - Organization identifier
+   * @returns Telemetry configuration with enabled status
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getOrgTelemetryConfig(orgSlug) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/telemetry/config`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Get organization triage settings and status.
+   * Returns alert triage configuration and current state.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getOrgTriage(orgSlug) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/triage`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Get details of a specific webhook.
+   * Returns webhook configuration including events, URL, and filters.
+   *
+   * @param orgSlug - Organization identifier
+   * @param webhookId - Webhook ID to retrieve
+   * @returns Webhook details
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getOrgWebhook(orgSlug, webhookId) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/webhooks/${encodeURIComponent(webhookId)}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * List all webhooks for an organization.
+   * Supports pagination and sorting options.
+   *
+   * @param orgSlug - Organization identifier
+   * @param options - Optional query parameters for pagination and sorting
+   * @returns List of webhooks with pagination info
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getOrgWebhooksList(orgSlug, options) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/webhooks?${queryToSearchParams(options)}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Get current API quota usage and limits.
+   * Returns remaining requests, rate limits, and quota reset times.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getQuota() {
+    try {
+      const data = await this.#getCached(
+        "quota",
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            "quota",
+            this.#reqOptionsWithHooks
+          )
+        ),
+        "quota"
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Get analytics data for a specific repository.
+   * Returns security metrics, dependency trends, and vulnerability statistics.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getRepoAnalytics(repo, time) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `analytics/repo/${encodeURIComponent(repo)}/${encodeURIComponent(time)}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Get details for a specific repository.
+   *
+   * Returns repository configuration, monitoring status, and metadata.
+   *
+   * @param orgSlug - Organization identifier
+   * @param repoSlug - Repository slug/name
+   * @param options - Optional parameters including workspace
+   * @returns Repository details with configuration
+   *
+   * @example
+   * ```typescript
+   * const result = await sdk.getRepository('my-org', 'my-repo')
+   *
+   * if (result.success) {
+   *   console.log('Repository:', result.data.name)
+   *   console.log('Visibility:', result.data.visibility)
+   *   console.log('Default branch:', result.data.default_branch)
+   * }
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/getorgrepo
+   * @apiEndpoint GET /orgs/{org_slug}/repos/{repo_slug}
+   * @quota 0 units
+   * @scopes repo:read
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getRepository(orgSlug, repoSlug, options) {
+    const orgSlugParam = encodeURIComponent(orgSlug);
+    const repoSlugParam = encodeURIComponent(repoSlug);
+    const { workspace } = {
+      __proto__: null,
+      ...options
+    };
+    const queryString = workspace ? `?${queryToSearchParams({ workspace })}` : "";
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${orgSlugParam}/repos/${repoSlugParam}${queryString}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return {
+        cause: void 0,
+        data,
+        error: void 0,
+        status: 200,
+        success: true
+      };
+    } catch (e) {
+      const errorResult = await this.#handleApiError(e);
+      return {
+        cause: errorResult.cause,
+        data: void 0,
+        error: errorResult.error,
+        status: errorResult.status,
+        success: false
+      };
+    }
+  }
+  /**
+   * Get details for a specific repository label.
+   *
+   * Returns label configuration, associated repositories, and policy settings.
+   *
+   * @param orgSlug - Organization identifier
+   * @param labelId - Label identifier
+   * @returns Label details with guaranteed id and name fields
+   *
+   * @example
+   * ```typescript
+   * const result = await sdk.getRepositoryLabel('my-org', 'label-id-123')
+   *
+   * if (result.success) {
+   *   console.log('Label name:', result.data.name)
+   *   console.log('Associated repos:', result.data.repository_ids)
+   *   console.log('Has security policy:', result.data.has_security_policy)
+   * }
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/getorgrepolabel
+   * @apiEndpoint GET /orgs/{org_slug}/repos/labels/{label_id}
+   * @quota 0 units
+   * @scopes repo-label:list
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getRepositoryLabel(orgSlug, labelId) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/repos/labels/${encodeURIComponent(labelId)}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return {
+        cause: void 0,
+        data,
+        error: void 0,
+        status: 200,
+        success: true
+      };
+    } catch (e) {
+      const errorResult = await this.#handleApiError(e);
+      return {
+        cause: errorResult.cause,
+        data: void 0,
+        error: errorResult.error,
+        status: errorResult.status,
+        success: false
+      };
+    }
+  }
+  /**
+   * Get security score for a specific npm package and version.
+   * Returns numerical security rating and scoring breakdown.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getScoreByNpmPackage(pkgName, version) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `npm/${encodeURIComponent(pkgName)}/${encodeURIComponent(version)}/score`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Get list of supported file types for full scan generation.
+   * Returns glob patterns for supported manifest files, lockfiles, and configuration formats.
+   *
+   * Files whose names match the patterns returned by this endpoint can be uploaded
+   * for report generation. Examples include `package.json`, `package-lock.json`, and `yarn.lock`.
+   *
+   * @param orgSlug - Organization identifier
+   * @returns Nested object with environment and file type patterns
+   *
+   * @example
+   * ```typescript
+   * const result = await sdk.getSupportedFiles('my-org')
+   *
+   * if (result.success) {
+   *   console.log('NPM patterns:', result.data.NPM)
+   *   console.log('PyPI patterns:', result.data.PyPI)
+   * }
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/getsupportedfiles
+   * @apiEndpoint GET /orgs/{org_slug}/supported-files
+   * @quota 0 units
+   * @scopes No scopes required, but authentication is required
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async getSupportedFiles(orgSlug) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/supported-files`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * List all full scans for an organization.
+   *
+   * Returns paginated list of full scan metadata with guaranteed required fields
+   * for improved TypeScript autocomplete.
+   *
+   * @param orgSlug - Organization identifier
+   * @param options - Filtering and pagination options
+   * @returns List of full scans with metadata
+   *
+   * @example
+   * ```typescript
+   * const result = await sdk.listFullScans('my-org', {
+   *   branch: 'main',
+   *   per_page: 50,
+   *   use_cursor: true
+   * })
+   *
+   * if (result.success) {
+   *   result.data.results.forEach(scan => {
+   *     console.log(scan.id, scan.created_at)  // Guaranteed fields
+   *   })
+   * }
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/getorgfullscanlist
+   * @apiEndpoint GET /orgs/{org_slug}/full-scans
+   * @quota 0 units
+   * @scopes full-scans:list
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async listFullScans(orgSlug, options) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/full-scans?${queryToSearchParams(options)}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return {
+        cause: void 0,
+        data,
+        error: void 0,
+        status: 200,
+        success: true
+      };
+    } catch (e) {
+      const errorResult = await this.#handleApiError(e);
+      return {
+        cause: errorResult.cause,
+        data: void 0,
+        error: errorResult.error,
+        status: errorResult.status,
+        success: false
+      };
+    }
+  }
+  /**
+   * List all organizations accessible to the current user.
+   *
+   * Returns organization details and access permissions with guaranteed required fields.
+   *
+   * @returns List of organizations with metadata
+   *
+   * @example
+   * ```typescript
+   * const result = await sdk.listOrganizations()
+   *
+   * if (result.success) {
+   *   result.data.organizations.forEach(org => {
+   *     console.log(org.name, org.slug)  // Guaranteed fields
+   *   })
+   * }
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/getorganizations
+   * @apiEndpoint GET /organizations
+   * @quota 0 units
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async listOrganizations() {
+    try {
+      const data = await this.#getCached(
+        "organizations",
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            "organizations",
+            this.#reqOptionsWithHooks
+          )
+        ),
+        "organizations"
+      );
+      return {
+        cause: void 0,
+        data,
+        error: void 0,
+        status: 200,
+        success: true
+      };
+    } catch (e) {
+      const errorResult = await this.#handleApiError(e);
+      return {
+        cause: errorResult.cause,
+        data: void 0,
+        error: errorResult.error,
+        status: errorResult.status,
+        success: false
+      };
+    }
+  }
+  /**
+   * List all diff scans for an organization.
+   * Returns paginated list of diff scan metadata and status.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async listOrgDiffScans(orgSlug) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/diff-scans`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * List all repositories in an organization.
+   *
+   * Returns paginated list of repository metadata with guaranteed required fields.
+   *
+   * @param orgSlug - Organization identifier
+   * @param options - Pagination and filtering options
+   * @returns List of repositories with metadata
+   *
+   * @example
+   * ```typescript
+   * const result = await sdk.listRepositories('my-org', {
+   *   per_page: 50,
+   *   sort: 'name',
+   *   direction: 'asc'
+   * })
+   *
+   * if (result.success) {
+   *   result.data.results.forEach(repo => {
+   *     console.log(repo.name, repo.visibility)
+   *   })
+   * }
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/getorgrepolist
+   * @apiEndpoint GET /orgs/{org_slug}/repos
+   * @quota 0 units
+   * @scopes repo:list
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async listRepositories(orgSlug, options) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/repos?${queryToSearchParams(options)}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return {
+        cause: void 0,
+        data,
+        error: void 0,
+        status: 200,
+        success: true
+      };
+    } catch (e) {
+      const errorResult = await this.#handleApiError(e);
+      return {
+        cause: errorResult.cause,
+        data: void 0,
+        error: errorResult.error,
+        status: errorResult.status,
+        success: false
+      };
+    }
+  }
+  /**
+   * List all repository labels for an organization.
+   *
+   * Returns paginated list of labels configured for repository organization and policy management.
+   *
+   * @param orgSlug - Organization identifier
+   * @param options - Pagination options
+   * @returns List of labels with guaranteed id and name fields
+   *
+   * @example
+   * ```typescript
+   * const result = await sdk.listRepositoryLabels('my-org', { per_page: 50, page: 1 })
+   *
+   * if (result.success) {
+   *   result.data.results.forEach(label => {
+   *     console.log('Label:', label.name)
+   *     console.log('Associated repos:', label.repository_ids?.length || 0)
+   *   })
+   * }
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/getorgrepolabellist
+   * @apiEndpoint GET /orgs/{org_slug}/repos/labels
+   * @quota 0 units
+   * @scopes repo-label:list
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async listRepositoryLabels(orgSlug, options) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/repos/labels?${queryToSearchParams(options)}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return {
+        cause: void 0,
+        data,
+        error: void 0,
+        status: 200,
+        success: true
+      };
+    } catch (e) {
+      const errorResult = await this.#handleApiError(e);
+      return {
+        cause: errorResult.cause,
+        data: void 0,
+        error: errorResult.error,
+        status: errorResult.status,
+        success: false
+      };
+    }
+  }
+  /**
+   * Create a new API token for an organization.
+   * Generates API token with specified scopes and metadata.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async postAPIToken(orgSlug, tokenData) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createRequestWithJson(
+            "POST",
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/tokens`,
+            tokenData,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Revoke an API token for an organization.
+   * Permanently disables the token and removes access.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async postAPITokensRevoke(orgSlug, tokenId) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createRequestWithJson(
+            "POST",
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/tokens/${encodeURIComponent(tokenId)}/revoke`,
+            {},
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Rotate an API token for an organization.
+   * Generates new token value while preserving token metadata.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async postAPITokensRotate(orgSlug, tokenId) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createRequestWithJson(
+            "POST",
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/tokens/${encodeURIComponent(tokenId)}/rotate`,
+            {},
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Update an existing API token for an organization.
+   * Modifies token metadata, scopes, or other properties.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async postAPITokenUpdate(orgSlug, tokenId, updateData) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createRequestWithJson(
+            "POST",
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/tokens/${encodeURIComponent(tokenId)}/update`,
+            updateData,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Post telemetry data for an organization.
+   * Sends telemetry events and analytics data for monitoring and analysis.
+   *
+   * @param orgSlug - Organization identifier
+   * @param telemetryData - Telemetry payload containing events and metrics
+   * @returns Empty object on successful submission
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async postOrgTelemetry(orgSlug, telemetryData) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createRequestWithJson(
+            "POST",
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/telemetry`,
+            telemetryData,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return {
+        cause: void 0,
+        data,
+        error: void 0,
+        status: 200,
+        success: true
+      };
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Update user or organization settings.
+   * Configures preferences, notifications, and security policies.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async postSettings(selectors) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createRequestWithJson(
+            "POST",
+            this.#baseUrl,
+            "settings",
+            { json: selectors },
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Create a new full scan by rescanning an existing scan.
+   * Supports shallow (policy reapplication) and deep (dependency resolution rerun) modes.
+   *
+   * @param orgSlug - Organization identifier
+   * @param fullScanId - Full scan ID to rescan
+   * @param options - Rescan options including mode (shallow or deep)
+   * @returns New scan ID and status
+   *
+   * @example
+   * ```typescript
+   * // Shallow rescan (reapply policies to cached data)
+   * const result = await sdk.rescanFullScan('my-org', 'scan_123', {
+   *   mode: 'shallow'
+   * })
+   *
+   * if (result.success) {
+   *   console.log('New Scan ID:', result.data.id)
+   *   console.log('Status:', result.data.status)
+   * }
+   *
+   * // Deep rescan (rerun dependency resolution)
+   * const deepResult = await sdk.rescanFullScan('my-org', 'scan_123', {
+   *   mode: 'deep'
+   * })
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/rescanorgfullscan
+   * @apiEndpoint POST /orgs/{org_slug}/full-scans/{full_scan_id}/rescan
+   * @quota 0 units
+   * @scopes full-scans:create
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async rescanFullScan(orgSlug, fullScanId, options) {
+    const queryString = options ? `?${queryToSearchParams(options)}` : "";
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createRequestWithJson(
+            "POST",
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/full-scans/${encodeURIComponent(fullScanId)}/rescan${queryString}`,
+            {},
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Search for dependencies across monitored projects.
+   * Returns matching packages with security information and usage patterns.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async searchDependencies(queryParams) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createRequestWithJson(
+            "POST",
+            this.#baseUrl,
+            "dependencies/search",
+            queryParams,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Send POST or PUT request with JSON body and return parsed JSON response.
+   * Supports both throwing (default) and non-throwing modes.
+   * @param urlPath - API endpoint path (e.g., 'organizations')
+   * @param options - Request options including method, body, and throws behavior
+   * @returns Parsed JSON response or SocketSdkGenericResult based on options
+   */
+  async sendApi(urlPath, options) {
+    const {
+      body,
+      // Default to POST method for JSON API requests.
+      method = "POST",
+      throws = true
+    } = { __proto__: null, ...options };
+    const url = `${this.#baseUrl}${urlPath}`;
+    try {
+      const response = await this.#executeWithRetry(async () => {
+        const res = await createRequestWithJson(
+          method,
+          this.#baseUrl,
+          urlPath,
+          body,
+          this.#reqOptionsWithHooks
+        );
+        if (!isResponseOk(res)) {
+          throw new ResponseError(res, "", url);
+        }
+        return res;
+      });
+      const data = await getResponseJson(response);
+      if (throws) {
+        return data;
+      }
+      return {
+        cause: void 0,
+        data,
+        error: void 0,
+        status: response.status,
+        success: true
+      };
+    } catch (e) {
+      if (throws) {
+        throw e;
+      }
+      if (e instanceof ResponseError) {
+        const errorResult = await this.#handleApiError(e);
+        return {
+          cause: errorResult.cause,
+          data: void 0,
+          error: errorResult.error,
+          status: errorResult.status,
+          success: false,
+          url: errorResult.url
+        };
+      }
+      return this.#createQueryErrorResult(e);
+    }
+  }
+  /**
+   * Stream a full scan's results to file or stdout.
+   *
+   * Provides efficient streaming for large scan datasets without loading
+   * entire response into memory. Useful for processing large SBOMs.
+   *
+   * @param orgSlug - Organization identifier
+   * @param scanId - Full scan identifier
+   * @param options - Streaming options (output file path, stdout, or buffered)
+   * @returns Scan result with streaming response
+   *
+   * @example
+   * ```typescript
+   * // Stream to file
+   * await sdk.streamFullScan('my-org', 'scan_123', {
+   *   output: './scan-results.json'
+   * })
+   *
+   * // Stream to stdout
+   * await sdk.streamFullScan('my-org', 'scan_123', {
+   *   output: true
+   * })
+   *
+   * // Get buffered response
+   * const result = await sdk.streamFullScan('my-org', 'scan_123')
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/getorgfullscan
+   * @apiEndpoint GET /orgs/{org_slug}/full-scans/{full_scan_id}
+   * @quota 0 units
+   * @scopes full-scans:list
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async streamFullScan(orgSlug, scanId, options) {
+    const { output } = {
+      __proto__: null,
+      ...options
+    };
+    const url = `${this.#baseUrl}orgs/${encodeURIComponent(orgSlug)}/full-scans/${encodeURIComponent(scanId)}`;
+    try {
+      const needsStream = typeof output === "string" || output === true;
+      const res = await this.#executeWithRetry(async () => {
+        const response = await (0, import_http_request3.httpRequest)(url, {
+          method: "GET",
+          headers: this.#reqOptions.headers,
+          stream: needsStream,
+          timeout: this.#reqOptions.timeout,
+          ...!needsStream && { maxResponseSize: MAX_RESPONSE_SIZE }
+        });
+        if (!isResponseOk(response)) {
+          throw new ResponseError(response, "", url);
+        }
+        return response;
+      });
+      if (typeof output === "string") {
+        const { createWriteStream } = await import("node:fs");
+        await new Promise((resolve, reject) => {
+          const ws = createWriteStream(output);
+          ws.on("error", reject);
+          ws.on("close", resolve);
+          res.rawResponse.pipe(ws);
+        });
+      } else if (output === true) {
+        await new Promise((resolve, reject) => {
+          res.rawResponse.on("error", reject);
+          res.rawResponse.on("end", resolve);
+          res.rawResponse.pipe(import_node_process2.default.stdout);
+        });
+      }
+      return this.#handleApiSuccess(res);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Stream patches for artifacts in a scan report.
+   *
+   * This method streams all available patches for artifacts in a scan.
+   * Free tier users will only receive free patches.
+   *
+   * Note: This method returns a ReadableStream for processing large datasets.
+   */
+  async streamPatchesFromScan(orgSlug, scanId) {
+    const urlPath = `orgs/${encodeURIComponent(orgSlug)}/patches/scan?scan_id=${encodeURIComponent(scanId)}`;
+    const url = `${this.#baseUrl}${urlPath}`;
+    const response = await this.#executeWithRetry(
+      async () => await createGetRequest(
+        this.#baseUrl,
+        urlPath,
+        this.#reqOptionsWithHooks
+      )
+    );
+    if (!isResponseOk(response)) {
+      throw new ResponseError(response, "GET Request failed", url);
+    }
+    const text = response.text();
+    return new ReadableStream({
+      start(controller) {
+        let start = 0;
+        for (let i = 0; i <= text.length; i++) {
+          if (i === text.length || text.charCodeAt(i) === 10) {
+            if (i > start) {
+              const line = text.slice(start, i);
+              try {
+                const data = JSON.parse(line);
+                controller.enqueue(data);
+              } catch (e) {
+                (0, import_debug2.debugLog)("streamPatchesFromScan", `Failed to parse line: ${e}`);
+              }
+            }
+            start = i + 1;
+          }
+        }
+        controller.close();
+      }
+    });
+  }
+  /**
+   * Update alert triage status for an organization.
+   * Modifies alert resolution status and triage decisions.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async updateOrgAlertTriage(orgSlug, alertId, triageData) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createRequestWithJson(
+            "PUT",
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/triage/${encodeURIComponent(alertId)}`,
+            triageData,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Update organization's license policy configuration.
+   * Modifies allowed, restricted, and monitored license types.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async updateOrgLicensePolicy(orgSlug, policyData, queryParams) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createRequestWithJson(
+            "POST",
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/settings/license-policy?${queryToSearchParams(queryParams)}`,
+            policyData,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Update organization's security policy configuration.
+   * Modifies alert rules, severity thresholds, and enforcement settings.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async updateOrgSecurityPolicy(orgSlug, policyData) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createRequestWithJson(
+            "POST",
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/settings/security-policy`,
+            policyData,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Update organization's telemetry configuration.
+   * Enables or disables telemetry for the organization.
+   *
+   * @param orgSlug - Organization identifier
+   * @param telemetryData - Telemetry configuration with enabled flag
+   * @returns Updated telemetry configuration
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async updateOrgTelemetryConfig(orgSlug, telemetryData) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createRequestWithJson(
+            "PUT",
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/telemetry/config`,
+            telemetryData,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Update an existing webhook's configuration.
+   * All fields are optional - only provided fields will be updated.
+   *
+   * @param orgSlug - Organization identifier
+   * @param webhookId - Webhook ID to update
+   * @param webhookData - Updated webhook configuration
+   * @returns Updated webhook details
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async updateOrgWebhook(orgSlug, webhookId, webhookData) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createRequestWithJson(
+            "PUT",
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/webhooks/${encodeURIComponent(webhookId)}`,
+            webhookData,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(data);
+    } catch (e) {
+      return await this.#handleApiError(e);
+    }
+  }
+  /**
+   * Update configuration for a repository.
+   *
+   * Modifies monitoring settings, branch configuration, and scan preferences.
+   *
+   * @param orgSlug - Organization identifier
+   * @param repoSlug - Repository slug/name
+   * @param params - Configuration updates (description, homepage, default_branch, etc.)
+   * @param options - Optional parameters including workspace
+   * @returns Updated repository details
+   *
+   * @example
+   * ```typescript
+   * const result = await sdk.updateRepository('my-org', 'my-repo', {
+   *   description: 'Updated description',
+   *   default_branch: 'develop'
+   * })
+   *
+   * if (result.success) {
+   *   console.log('Repository updated:', result.data.name)
+   * }
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/updateorgrepo
+   * @apiEndpoint POST /orgs/{org_slug}/repos/{repo_slug}
+   * @quota 0 units
+   * @scopes repo:write
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async updateRepository(orgSlug, repoSlug, params, options) {
+    const { workspace } = {
+      __proto__: null,
+      ...options
+    };
+    const queryString = workspace ? `?${queryToSearchParams({ workspace })}` : "";
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createRequestWithJson(
+            "POST",
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/repos/${encodeURIComponent(repoSlug)}${queryString}`,
+            params,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return {
+        cause: void 0,
+        data,
+        error: void 0,
+        status: 200,
+        success: true
+      };
+    } catch (e) {
+      const errorResult = await this.#handleApiError(e);
+      return {
+        cause: errorResult.cause,
+        data: void 0,
+        error: errorResult.error,
+        status: errorResult.status,
+        success: false
+      };
+    }
+  }
+  /**
+   * Update a repository label for an organization.
+   *
+   * Modifies label properties like name. Label names must be non-empty and less than 1000 characters.
+   *
+   * @param orgSlug - Organization identifier
+   * @param labelId - Label identifier
+   * @param labelData - Label updates (typically name property)
+   * @returns Updated label with guaranteed id and name fields
+   *
+   * @example
+   * ```typescript
+   * const result = await sdk.updateRepositoryLabel('my-org', 'label-id-123', { name: 'staging' })
+   *
+   * if (result.success) {
+   *   console.log('Label updated:', result.data.name)
+   *   console.log('Label ID:', result.data.id)
+   * }
+   * ```
+   *
+   * @see https://docs.socket.dev/reference/updateorgrepolabel
+   * @apiEndpoint PUT /orgs/{org_slug}/repos/labels/{label_id}
+   * @quota 0 units
+   * @scopes repo-label:update
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async updateRepositoryLabel(orgSlug, labelId, labelData) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createRequestWithJson(
+            "PUT",
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/repos/labels/${encodeURIComponent(labelId)}`,
+            labelData,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return {
+        cause: void 0,
+        data,
+        error: void 0,
+        status: 200,
+        success: true
+      };
+    } catch (e) {
+      const errorResult = await this.#handleApiError(e);
+      return {
+        cause: errorResult.cause,
+        data: void 0,
+        error: errorResult.error,
+        status: errorResult.status,
+        success: false
+      };
+    }
+  }
+  /**
+   * Upload manifest files for dependency analysis.
+   * Processes package files to create dependency snapshots and security analysis.
+   *
+   * @throws {Error} When server returns 5xx status codes
+   */
+  async uploadManifestFiles(orgSlug, filepaths, options) {
+    const { pathsRelativeTo = "." } = {
+      __proto__: null,
+      ...options
+    };
+    const basePath = resolveBasePath(pathsRelativeTo);
+    const absFilepaths = resolveAbsPaths(filepaths, basePath);
+    const { invalidPaths, validPaths } = (0, import_fs.validateFiles)(absFilepaths);
+    if (this.#onFileValidation && invalidPaths.length > 0) {
+      const result = await this.#onFileValidation(validPaths, invalidPaths, {
+        operation: "uploadManifestFiles",
+        orgSlug
+      });
+      if (!result.shouldContinue) {
+        const errorMsg = result.errorMessage ?? "File validation failed";
+        const finalCause = filterRedundantCause(errorMsg, result.errorCause);
+        return {
+          error: errorMsg,
+          status: 400,
+          success: false,
+          ...finalCause ? { cause: finalCause } : {}
+        };
+      }
+    }
+    if (!this.#onFileValidation && invalidPaths.length > 0) {
+      const samplePaths = invalidPaths.slice(0, 3).join("\n  - ");
+      const remaining = invalidPaths.length > 3 ? `
+  ... and ${invalidPaths.length - 3} more` : "";
+      console.warn(
+        `Warning: ${invalidPaths.length} files skipped (unreadable):
+  - ${samplePaths}${remaining}
+\u2192 This may occur with Yarn Berry PnP or pnpm symlinks.
+\u2192 Try: Run installation command to ensure files are accessible.`
+      );
+    }
+    if (validPaths.length === 0) {
+      const samplePaths = invalidPaths.slice(0, 5).join("\n  - ");
+      const remaining = invalidPaths.length > 5 ? `
+  ... and ${invalidPaths.length - 5} more` : "";
+      return {
+        cause: [
+          `All ${invalidPaths.length} files failed validation:`,
+          `  - ${samplePaths}${remaining}`,
+          "",
+          "\u2192 Common causes:",
+          "  \xB7Yarn Berry PnP virtual filesystem (files are not on disk)",
+          "  \xB7pnpm symlinks pointing to inaccessible locations",
+          "  \xB7Incorrect file permissions",
+          "  \xB7Files were deleted after discovery",
+          "",
+          "\u2192 Solutions:",
+          "  \xB7Yarn Berry: Use `nodeLinker: node-modules` in .yarnrc.yml",
+          "  \xB7pnpm: Use `node-linker=hoisted` in .npmrc",
+          "  \xB7Check file permissions with: ls -la ",
+          "  \xB7Run package manager install command"
+        ].join("\n"),
+        error: "No readable manifest files found",
+        status: 400,
+        success: false
+      };
+    }
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createUploadRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/upload-manifest-files`,
+            createRequestBodyForFilepaths(validPaths, basePath),
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return this.#handleApiSuccess(
+        data
+      );
+    } catch (e) {
+      return await this.#handleApiError(
+        e
+      );
+    }
+  }
+  /**
+   * View detailed information about a specific patch by its UUID.
+   *
+   * This method retrieves comprehensive patch details including files,
+   * vulnerabilities, description, license, and tier information.
+   */
+  async viewPatch(orgSlug, uuid) {
+    try {
+      const data = await this.#executeWithRetry(
+        async () => await getResponseJson(
+          await createGetRequest(
+            this.#baseUrl,
+            `orgs/${encodeURIComponent(orgSlug)}/patches/view/${encodeURIComponent(uuid)}`,
+            this.#reqOptionsWithHooks
+          )
+        )
+      );
+      return data;
+    } catch (e) {
+      const result = await this.#handleApiError(e);
+      throw new Error(result.error, { cause: result.cause });
+    }
+  }
+};
+if ((0, import_debug2.isDebugNs)("heap")) {
+  const used = import_node_process2.default.memoryUsage();
+  (0, import_debug2.debugLog)("heap", `heap used: ${Math.round(used.heapUsed / 1024 / 1024)}MB`);
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  ResponseError,
+  SocketSdk,
+  calculateTotalQuotaCost,
+  createUserAgentFromPkgJson,
+  getAllMethodRequirements,
+  getMethodRequirements,
+  getMethodsByPermissions,
+  getMethodsByQuotaCost,
+  getQuotaCost,
+  getQuotaUsageSummary,
+  getRequiredPermissions,
+  hasQuotaForMethods
+});
+/*! Bundled license information:
+
+mime-db/index.js:
+  (*!
+   * mime-db
+   * Copyright(c) 2014 Jonathan Ong
+   * Copyright(c) 2015-2022 Douglas Christopher Wilson
+   * MIT Licensed
+   *)
+
+mime-types/index.js:
+  (*!
+   * mime-types
+   * Copyright(c) 2014 Jonathan Ong
+   * Copyright(c) 2015 Douglas Christopher Wilson
+   * MIT Licensed
+   *)
+*/
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/quota-utils.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/quota-utils.d.ts
new file mode 100644
index 00000000..01448c2d
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/quota-utils.d.ts
@@ -0,0 +1,58 @@
+import type { SocketSdkOperations } from './types';
+interface ApiRequirement {
+    quota: number;
+    permissions: string[];
+}
+/**
+ * Calculate total quota cost for multiple SDK method calls.
+ * Returns sum of quota units for all specified methods.
+ */
+export declare function calculateTotalQuotaCost(methodNames: Array): number;
+/**
+ * Get all available SDK methods with their requirements.
+ * Returns complete mapping of methods to quota and permissions.
+ * Creates a fresh deep copy each time to prevent external mutations.
+ */
+export declare function getAllMethodRequirements(): Record;
+/**
+ * Get complete requirement information for a SDK method.
+ * Returns both quota cost and required permissions.
+ * Memoized to avoid repeated lookups for the same method.
+ */
+export declare const getMethodRequirements: (methodName: string) => ApiRequirement;
+/**
+ * Get all methods that require specific permissions.
+ * Returns methods that need any of the specified permissions.
+ * Memoized since the same permission queries are often repeated.
+ */
+export declare const getMethodsByPermissions: (permissions: string[]) => string[];
+/**
+ * Get all methods that consume a specific quota amount.
+ * Useful for finding high-cost or free operations.
+ * Memoized to cache results for commonly queried quota costs.
+ */
+export declare const getMethodsByQuotaCost: (quotaCost: number) => string[];
+/**
+ * Get quota cost for a specific SDK method.
+ * Returns the number of quota units consumed by the method.
+ * Memoized since quota costs are frequently queried.
+ */
+export declare const getQuotaCost: (methodName: string) => number;
+/**
+ * Get quota usage summary grouped by cost levels.
+ * Returns methods categorized by their quota consumption.
+ * Memoized since the summary structure is immutable after load.
+ */
+export declare const getQuotaUsageSummary: () => Record;
+/**
+ * Get required permissions for a specific SDK method.
+ * Returns array of permission strings needed to call the method.
+ * Memoized to cache permission lookups per method.
+ */
+export declare const getRequiredPermissions: (methodName: string) => string[];
+/**
+ * Check if user has sufficient quota for method calls.
+ * Returns true if available quota covers the total cost.
+ */
+export declare function hasQuotaForMethods(availableQuota: number, methodNames: Array): boolean;
+export {};
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/socket-sdk-class.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/socket-sdk-class.d.ts
new file mode 100644
index 00000000..d04327dc
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/socket-sdk-class.d.ts
@@ -0,0 +1,1271 @@
+import type { ArtifactPatches, BatchPackageFetchResultType, BatchPackageStreamOptions, CreateDependenciesSnapshotOptions, Entitlement, GetOptions, MalwareCheckResult, PatchViewResponse, PostOrgTelemetryPayload, PostOrgTelemetryResponse, QueryParams, SendOptions, SocketSdkGenericResult, SocketSdkOptions, SocketSdkResult, StreamOrgFullScanOptions, UploadManifestFilesError, UploadManifestFilesOptions, UploadManifestFilesReturnType } from './types';
+import type { CreateFullScanOptions, DeleteRepositoryLabelResult, DeleteResult, FullScanListResult, FullScanResult, GetRepositoryOptions, ListFullScansOptions, ListRepositoriesOptions, OrganizationsResult, RepositoriesListResult, RepositoryLabelResult, RepositoryLabelsListResult, RepositoryResult, StrictErrorResult } from './types-strict';
+import type { HttpResponse } from '@socketsecurity/lib/http-request';
+/**
+ * Socket SDK for programmatic access to Socket.dev security analysis APIs.
+ * Provides methods for package scanning, organization management, and security analysis.
+ */
+export declare class SocketSdk {
+    #private;
+    /**
+     * Initialize Socket SDK with API token and configuration options.
+     * Sets up authentication, base URL, HTTP client options, retry behavior, and caching.
+     */
+    constructor(apiToken: string, options?: SocketSdkOptions | undefined);
+    /**
+     * Get package metadata and alerts by PURL strings for a specific organization.
+     * Organization-scoped version of batchPackageFetch with security policy label support.
+     *
+     * @param orgSlug - Organization identifier
+     * @param componentsObj - Object containing array of components with PURL strings
+     * @param queryParams - Optional query parameters including labels, alerts, compact, etc.
+     * @returns Package metadata and alerts for the requested PURLs
+     *
+     * @example
+     * ```typescript
+     * const result = await sdk.batchOrgPackageFetch('my-org',
+     *   {
+     *     components: [
+     *       { purl: 'pkg:npm/express@4.19.2' },
+     *       { purl: 'pkg:pypi/django@5.0.6' }
+     *     ]
+     *   },
+     *   { labels: ['production'], alerts: true }
+     * )
+     *
+     * if (result.success) {
+     *   for (const artifact of result.data) {
+     *     console.log(`${artifact.name}@${artifact.version}`)
+     *   }
+     * }
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/batchpackagefetchbyorg
+     * @apiEndpoint POST /orgs/{org_slug}/purl
+     * @quota 100 units
+     * @scopes packages:list
+     * @throws {Error} When server returns 5xx status codes
+     */
+    batchOrgPackageFetch(orgSlug: string, componentsObj: {
+        components: Array<{
+            purl: string;
+        }>;
+    }, queryParams?: QueryParams | undefined): Promise>;
+    /**
+     * Fetch package analysis data for multiple packages in a single batch request.
+     * Returns all results at once after processing is complete.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    batchPackageFetch(componentsObj: {
+        components: Array<{
+            purl: string;
+        }>;
+    }, queryParams?: QueryParams | undefined): Promise;
+    /**
+     * Stream package analysis data for multiple packages with chunked processing and concurrency control.
+     * Returns results as they become available via async generator.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    batchPackageStream(componentsObj: {
+        components: Array<{
+            purl: string;
+        }>;
+    }, options?: BatchPackageStreamOptions | undefined): AsyncGenerator;
+    /**
+     * Check packages for malware and security alerts.
+     *
+     * For small sets (≤ MAX_FIREWALL_COMPONENTS), uses parallel firewall API
+     * requests which return full artifact data including score and alert details.
+     *
+     * For larger sets, uses the batch PURL API for efficiency.
+     *
+     * Both paths normalize alerts through publicPolicy and only return
+     * malware-relevant results.
+     *
+     * @param components - Array of package URLs to check
+     * @returns Normalized results with policy-filtered alerts per package
+     */
+    checkMalware(components: Array<{
+        purl: string;
+    }>): Promise>;
+    /**
+     * Create a snapshot of project dependencies by uploading manifest files.
+     * Analyzes dependency files to generate a comprehensive security report.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    createDependenciesSnapshot(filepaths: string[], options?: CreateDependenciesSnapshotOptions | undefined): Promise>;
+    /**
+     * Create a full security scan for an organization.
+     *
+     * Uploads project manifest files and initiates full security analysis.
+     * Returns scan metadata with guaranteed required fields.
+     *
+     * @param orgSlug - Organization identifier
+     * @param filepaths - Array of file paths to upload (package.json, package-lock.json, etc.)
+     * @param options - Scan configuration including repository, branch, and commit details
+     * @returns Full scan metadata including ID and URLs
+     *
+     * @example
+     * ```typescript
+     * const result = await sdk.createFullScan('my-org',
+     *   ['package.json', 'package-lock.json'],
+     *   {
+     *     repo: 'my-repo',
+     *     branch: 'main',
+     *     commit_message: 'Update dependencies',
+     *     commit_hash: 'abc123',
+     *     pathsRelativeTo: './my-project'
+     *   }
+     * )
+     *
+     * if (result.success) {
+     *   console.log('Scan ID:', result.data.id)
+     *   console.log('Report URL:', result.data.html_report_url)
+     * }
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/createorgfullscan
+     * @apiEndpoint POST /orgs/{org_slug}/full-scans
+     * @quota 0 units
+     * @scopes full-scans:create
+     * @throws {Error} When server returns 5xx status codes
+     */
+    createFullScan(orgSlug: string, filepaths: string[], options: CreateFullScanOptions): Promise;
+    /**
+     * Create a diff scan from two full scan IDs.
+     * Compares two existing full scans to identify changes.
+     *
+     * @param orgSlug - Organization identifier
+     * @param options - Diff scan creation options
+     * @param options.after - ID of the after/head full scan (newer)
+     * @param options.before - ID of the before/base full scan (older)
+     * @param options.description - Description of the diff scan
+     * @param options.external_href - External URL to associate with the diff scan
+     * @param options.merge - Set true for merged commits, false for open PR diffs
+     * @returns Diff scan details
+     *
+     * @example
+     * ```typescript
+     * const result = await sdk.createOrgDiffScanFromIds('my-org', {
+     *   before: 'scan-id-1',
+     *   after: 'scan-id-2',
+     *   description: 'Compare versions',
+     *   merge: false
+     * })
+     *
+     * if (result.success) {
+     *   console.log('Diff scan created:', result.data.diff_scan.id)
+     * }
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/createorgdiffscanfromids
+     * @apiEndpoint POST /orgs/{org_slug}/diff-scans/from-ids
+     * @quota 0 units
+     * @scopes diff-scans:create, full-scans:list
+     * @throws {Error} When server returns 5xx status codes
+     */
+    createOrgDiffScanFromIds(orgSlug: string, options: {
+        after: string;
+        before: string;
+        description?: string | undefined;
+        external_href?: string | undefined;
+        merge?: boolean | undefined;
+    }): Promise>;
+    /**
+     * Create a full scan from an archive file (.tar, .tar.gz/.tgz, or .zip).
+     * Uploads and scans a compressed archive of project files.
+     *
+     * @param orgSlug - Organization identifier
+     * @param archivePath - Path to the archive file to upload
+     * @param options - Scan configuration options including repo, branch, and metadata
+     * @returns Created full scan details with scan ID and status
+     *
+     * @throws {Error} When server returns 5xx status codes or file cannot be read
+     */
+    createOrgFullScanFromArchive(orgSlug: string, archivePath: string, options: {
+        branch?: string | undefined;
+        commit_hash?: string | undefined;
+        commit_message?: string | undefined;
+        committers?: string | undefined;
+        integration_org_slug?: string | undefined;
+        integration_type?: 'api' | 'azure' | 'bitbucket' | 'github' | 'gitlab' | 'web' | undefined;
+        make_default_branch?: boolean | undefined;
+        pull_request?: number | undefined;
+        repo: string;
+        scan_type?: string | undefined;
+        set_as_pending_head?: boolean | undefined;
+        tmp?: boolean | undefined;
+        workspace?: string | undefined;
+    }): Promise>;
+    /**
+     * Create a new webhook for an organization.
+     * Webhooks allow you to receive HTTP POST notifications when specific events occur.
+     *
+     * @param orgSlug - Organization identifier
+     * @param webhookData - Webhook configuration including name, URL, secret, and events
+     * @returns Created webhook details including webhook ID
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    createOrgWebhook(orgSlug: string, webhookData: {
+        description?: null | string | undefined;
+        events: string[];
+        filters?: {
+            repositoryIds: null | string[];
+        } | null | undefined;
+        headers?: null | Record | undefined;
+        name: string;
+        secret: string;
+        url: string;
+    }): Promise>;
+    /**
+     * Create a new repository in an organization.
+     *
+     * Registers a repository for monitoring and security scanning.
+     *
+     * @param orgSlug - Organization identifier
+     * @param repoSlug - Repository name/slug
+     * @param params - Additional repository configuration
+     * @param params.archived - Whether the repository is archived
+     * @param params.default_branch - Default branch of the repository
+     * @param params.description - Description of the repository
+     * @param params.homepage - Homepage URL of the repository
+     * @param params.visibility - Visibility setting ('public' or 'private')
+     * @param params.workspace - Workspace of the repository
+     * @returns Created repository details
+     *
+     * @example
+     * ```typescript
+     * const result = await sdk.createRepository('my-org', 'my-repo', {
+     *   description: 'My project repository',
+     *   homepage: 'https://example.com',
+     *   visibility: 'private'
+     * })
+     *
+     * if (result.success) {
+     *   console.log('Repository created:', result.data.id)
+     * }
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/createorgrepo
+     * @apiEndpoint POST /orgs/{org_slug}/repos
+     * @quota 0 units
+     * @scopes repo:write
+     * @throws {Error} When server returns 5xx status codes
+     */
+    createRepository(orgSlug: string, repoSlug: string, params?: {
+        archived?: boolean | undefined;
+        default_branch?: null | string | undefined;
+        description?: null | string | undefined;
+        homepage?: null | string | undefined;
+        visibility?: 'private' | 'public' | undefined;
+        workspace?: string | undefined;
+    } | undefined): Promise;
+    /**
+     * Create a new repository label for an organization.
+     *
+     * Labels can be used to group and organize repositories and apply security/license policies.
+     *
+     * @param orgSlug - Organization identifier
+     * @param labelData - Label configuration (must include name property)
+     * @returns Created label with guaranteed id and name fields
+     *
+     * @example
+     * ```typescript
+     * const result = await sdk.createRepositoryLabel('my-org', { name: 'production' })
+     *
+     * if (result.success) {
+     *   console.log('Label created:', result.data.id)
+     *   console.log('Label name:', result.data.name)
+     * }
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/createorgrepolabel
+     * @apiEndpoint POST /orgs/{org_slug}/repos/labels
+     * @quota 0 units
+     * @scopes repo-label:create
+     * @throws {Error} When server returns 5xx status codes
+     */
+    createRepositoryLabel(orgSlug: string, labelData: QueryParams): Promise;
+    /**
+     * Delete a full scan from an organization.
+     *
+     * Permanently removes scan data and results.
+     *
+     * @param orgSlug - Organization identifier
+     * @param scanId - Full scan identifier to delete
+     * @returns Success confirmation
+     *
+     * @example
+     * ```typescript
+     * const result = await sdk.deleteFullScan('my-org', 'scan_123')
+     *
+     * if (result.success) {
+     *   console.log('Scan deleted successfully')
+     * }
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/deleteorgfullscan
+     * @apiEndpoint DELETE /orgs/{org_slug}/full-scans/{full_scan_id}
+     * @quota 0 units
+     * @scopes full-scans:delete
+     * @throws {Error} When server returns 5xx status codes
+     */
+    deleteFullScan(orgSlug: string, scanId: string): Promise;
+    /**
+     * Delete a diff scan from an organization.
+     * Permanently removes diff scan data and results.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    deleteOrgDiffScan(orgSlug: string, diffScanId: string): Promise>;
+    /**
+     * Delete a webhook from an organization.
+     * This will stop all future webhook deliveries to the webhook URL.
+     *
+     * @param orgSlug - Organization identifier
+     * @param webhookId - Webhook ID to delete
+     * @returns Success status
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    deleteOrgWebhook(orgSlug: string, webhookId: string): Promise>;
+    /**
+     * Delete a repository from an organization.
+     *
+     * Removes repository monitoring and associated scan data.
+     *
+     * @param orgSlug - Organization identifier
+     * @param repoSlug - Repository slug/name to delete
+     * @param options - Optional parameters including workspace
+     * @returns Success confirmation
+     *
+     * @example
+     * ```typescript
+     * const result = await sdk.deleteRepository('my-org', 'old-repo')
+     *
+     * if (result.success) {
+     *   console.log('Repository deleted')
+     * }
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/deleteorgrepo
+     * @apiEndpoint DELETE /orgs/{org_slug}/repos/{repo_slug}
+     * @quota 0 units
+     * @scopes repo:write
+     * @throws {Error} When server returns 5xx status codes
+     */
+    deleteRepository(orgSlug: string, repoSlug: string, options?: GetRepositoryOptions | undefined): Promise;
+    /**
+     * Delete a repository label from an organization.
+     *
+     * Removes label and all its associations (repositories, security policy, license policy, etc.).
+     *
+     * @param orgSlug - Organization identifier
+     * @param labelId - Label identifier
+     * @returns Deletion confirmation
+     *
+     * @example
+     * ```typescript
+     * const result = await sdk.deleteRepositoryLabel('my-org', 'label-id-123')
+     *
+     * if (result.success) {
+     *   console.log('Label deleted:', result.data.status)
+     * }
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/deleteorgrepolabel
+     * @apiEndpoint DELETE /orgs/{org_slug}/repos/labels/{label_id}
+     * @quota 0 units
+     * @scopes repo-label:delete
+     * @throws {Error} When server returns 5xx status codes
+     */
+    deleteRepositoryLabel(orgSlug: string, labelId: string): Promise;
+    /**
+     * Download full scan files as a tar archive.
+     *
+     * Streams the full scan file contents to the specified output path as a tar file.
+     * Includes size limit enforcement to prevent excessive disk usage.
+     *
+     * @param orgSlug - Organization identifier
+     * @param fullScanId - Full scan identifier
+     * @param outputPath - Local file path to write the tar archive
+     * @returns Download result with success/error status
+     * @throws {Error} When server returns 5xx status codes
+     */
+    downloadOrgFullScanFilesAsTar(orgSlug: string, fullScanId: string, outputPath: string): Promise>;
+    /**
+     * Download patch file content from Socket blob storage.
+     * Retrieves patched file contents using SSRI hash or hex hash.
+     *
+     * This is a low-level utility method - you'll typically use this after calling
+     * `viewPatch()` to get patch metadata, then download individual patched files.
+     *
+     * @param hash - The blob hash in SSRI (sha256-base64) or hex format
+     * @param options - Optional configuration
+     * @param options.baseUrl - Override blob store URL (for testing)
+     * @returns Promise - The patch file content as UTF-8 string
+     * @throws Error if blob not found (404) or download fails
+     *
+     * @example
+     * ```typescript
+     * const sdk = new SocketSdk('your-api-token')
+     * // First get patch metadata
+     * const patch = await sdk.viewPatch('my-org', 'patch-uuid')
+     * // Then download the actual patched file
+     * const fileContent = await sdk.downloadPatch(patch.files['index.js'].socketBlob)
+     * ```
+     */
+    downloadPatch(hash: string, options?: {
+        baseUrl?: string | undefined;
+    } | undefined): Promise;
+    /**
+     * Export scan results in CycloneDX SBOM format.
+     * Returns Software Bill of Materials compliant with CycloneDX standard.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    exportCDX(orgSlug: string, fullScanId: string): Promise>;
+    /**
+     * Export vulnerability exploitability data as an OpenVEX v0.2.0 document.
+     * Includes patch data and reachability analysis for vulnerability assessment.
+     *
+     * @param orgSlug - Organization identifier
+     * @param id - Full scan or SBOM report ID
+     * @param options - Optional parameters including author, role, and document_id
+     * @returns OpenVEX document with vulnerability exploitability information
+     *
+     * @example
+     * ```typescript
+     * const result = await sdk.exportOpenVEX('my-org', 'scan-id', {
+     *   author: 'Security Team',
+     *   role: 'VEX Generator'
+     * })
+     *
+     * if (result.success) {
+     *   console.log('VEX Version:', result.data.version)
+     *   console.log('Statements:', result.data.statements.length)
+     * }
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/exportopenvex
+     * @apiEndpoint GET /orgs/{org_slug}/export/openvex/{id}
+     * @quota 0 units
+     * @scopes report:read
+     * @throws {Error} When server returns 5xx status codes
+     */
+    exportOpenVEX(orgSlug: string, id: string, options?: {
+        author?: string | undefined;
+        document_id?: string | undefined;
+        role?: string | undefined;
+    } | undefined): Promise>;
+    /**
+     * Export scan results in SPDX SBOM format.
+     * Returns Software Bill of Materials compliant with SPDX standard.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    exportSPDX(orgSlug: string, fullScanId: string): Promise>;
+    /**
+     * Execute a raw GET request to any API endpoint with configurable response type.
+     * Supports both throwing (default) and non-throwing modes.
+     * @param urlPath - API endpoint path (e.g., 'organizations')
+     * @param options - Request options including responseType and throws behavior
+     * @returns Raw response, parsed data, or SocketSdkGenericResult based on options
+     */
+    getApi(urlPath: string, options?: GetOptions | undefined): Promise>;
+    /**
+     * Get list of API tokens for an organization.
+     * Returns organization API tokens with metadata and permissions.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getAPITokens(orgSlug: string): Promise>;
+    /**
+     * Retrieve audit log events for an organization.
+     * Returns chronological log of security and administrative actions.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getAuditLogEvents(orgSlug: string, queryParams?: QueryParams | undefined): Promise>;
+    /**
+     * Get details for a specific diff scan.
+     * Returns comparison between two full scans with artifact changes.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getDiffScanById(orgSlug: string, diffScanId: string): Promise>;
+    /**
+     * Get GitHub-flavored markdown comments for a diff scan.
+     * Returns dependency overview and alert comments suitable for pull requests.
+     *
+     * @param orgSlug - Organization identifier
+     * @param diffScanId - Diff scan identifier
+     * @param options - Optional query parameters
+     * @param options.github_installation_id - GitHub installation ID for settings
+     * @returns Diff scan metadata with formatted markdown comments
+     *
+     * @example
+     * ```typescript
+     * const result = await sdk.getDiffScanGfm('my-org', 'diff-scan-id')
+     *
+     * if (result.success) {
+     *   console.log(result.data.dependency_overview_comment)
+     *   console.log(result.data.dependency_alert_comment)
+     * }
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/getdiffscangfm
+     * @apiEndpoint GET /orgs/{org_slug}/diff-scans/{diff_scan_id}/gfm
+     * @quota 0 units
+     * @scopes diff-scans:list
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getDiffScanGfm(orgSlug: string, diffScanId: string, options?: {
+        github_installation_id?: string | undefined;
+    } | undefined): Promise>;
+    /**
+     * Retrieve the enabled entitlements for an organization.
+     *
+     * This method fetches the organization's entitlements and filters for only the enabled ones, returning their keys. Entitlements represent Socket
+     * Products that the organization has access to use.
+     */
+    getEnabledEntitlements(orgSlug: string): Promise;
+    /**
+     * Retrieve all entitlements for an organization.
+     *
+     * This method fetches all entitlements (both enabled and disabled) for
+     * an organization, returning the complete list with their status.
+     */
+    getEntitlements(orgSlug: string): Promise;
+    /**
+     * Get complete full scan results buffered in memory.
+     *
+     * Returns entire scan data as JSON for programmatic processing.
+     * For large scans, consider using streamFullScan() instead.
+     *
+     * @param orgSlug - Organization identifier
+     * @param scanId - Full scan identifier
+     * @returns Complete full scan data including all artifacts
+     *
+     * @example
+     * ```typescript
+     * const result = await sdk.getFullScan('my-org', 'scan_123')
+     *
+     * if (result.success) {
+     *   console.log('Scan status:', result.data.scan_state)
+     *   console.log('Repository:', result.data.repository_slug)
+     * }
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/getorgfullscan
+     * @apiEndpoint GET /orgs/{org_slug}/full-scans/{full_scan_id}
+     * @quota 0 units
+     * @scopes full-scans:list
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getFullScan(orgSlug: string, scanId: string): Promise;
+    /**
+     * Get metadata for a specific full scan.
+     *
+     * Returns scan configuration, status, and summary information without full artifact data.
+     * Useful for checking scan status without downloading complete results.
+     *
+     * @param orgSlug - Organization identifier
+     * @param scanId - Full scan identifier
+     * @returns Scan metadata including status and configuration
+     *
+     * @example
+     * ```typescript
+     * const result = await sdk.getFullScanMetadata('my-org', 'scan_123')
+     *
+     * if (result.success) {
+     *   console.log('Scan state:', result.data.scan_state)
+     *   console.log('Branch:', result.data.branch)
+     * }
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/getorgfullscanmetadata
+     * @apiEndpoint GET /orgs/{org_slug}/full-scans/{full_scan_id}/metadata
+     * @quota 0 units
+     * @scopes full-scans:list
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getFullScanMetadata(orgSlug: string, scanId: string): Promise;
+    /**
+     * Get security issues for a specific npm package and version.
+     * Returns detailed vulnerability and security alert information.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getIssuesByNpmPackage(pkgName: string, version: string): Promise>;
+    /**
+     * List full scans associated with a specific alert.
+     * Returns paginated full scan references for alert investigation.
+     *
+     * @param orgSlug - Organization identifier
+     * @param options - Query parameters including alertKey, range, pagination
+     * @returns Paginated array of full scans associated with the alert
+     *
+     * @example
+     * ```typescript
+     * const result = await sdk.getOrgAlertFullScans('my-org', {
+     *   alertKey: 'npm/lodash/cve-2021-23337',
+     *   range: '-7d',
+     *   per_page: 50
+     * })
+     *
+     * if (result.success) {
+     *   for (const item of result.data.items) {
+     *     console.log('Full Scan ID:', item.fullScanId)
+     *   }
+     * }
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/alertfullscans
+     * @apiEndpoint GET /orgs/{org_slug}/alert-full-scan-search
+     * @quota 10 units
+     * @scopes alerts:list
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getOrgAlertFullScans(orgSlug: string, options: {
+        alertKey: string;
+        per_page?: number | undefined;
+        range?: string | undefined;
+        startAfterCursor?: string | undefined;
+    }): Promise>;
+    /**
+     * List latest alerts for an organization (Beta).
+     * Returns paginated alerts with comprehensive filtering options.
+     *
+     * @param orgSlug - Organization identifier
+     * @param options - Optional query parameters for pagination and filtering
+     * @returns Paginated list of alerts with cursor-based pagination
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getOrgAlertsList(orgSlug: string, options?: {
+        'filters.alertAction'?: string | undefined;
+        'filters.alertAction.notIn'?: string | undefined;
+        'filters.alertCategory'?: string | undefined;
+        'filters.alertCategory.notIn'?: string | undefined;
+        'filters.alertCveId'?: string | undefined;
+        'filters.alertCveId.notIn'?: string | undefined;
+        'filters.alertCveTitle'?: string | undefined;
+        'filters.alertCveTitle.notIn'?: string | undefined;
+        'filters.alertCweId'?: string | undefined;
+        'filters.alertCweId.notIn'?: string | undefined;
+        'filters.alertCweName'?: string | undefined;
+        'filters.alertCweName.notIn'?: string | undefined;
+        'filters.alertEPSS'?: string | undefined;
+        'filters.alertEPSS.notIn'?: string | undefined;
+        'filters.alertFixType'?: string | undefined;
+        'filters.alertFixType.notIn'?: string | undefined;
+        'filters.alertKEV'?: boolean | undefined;
+        'filters.alertKEV.notIn'?: boolean | undefined;
+        'filters.alertPriority'?: string | undefined;
+        'filters.alertPriority.notIn'?: string | undefined;
+        'filters.alertReachabilityType'?: string | undefined;
+        'filters.alertReachabilityType.notIn'?: string | undefined;
+        'filters.alertSeverity'?: string | undefined;
+        'filters.alertSeverity.notIn'?: string | undefined;
+        'filters.alertStatus'?: string | undefined;
+        'filters.alertStatus.notIn'?: string | undefined;
+        'filters.alertType'?: string | undefined;
+        'filters.alertType.notIn'?: string | undefined;
+        'filters.alertUpdatedAt.eq'?: string | undefined;
+        'filters.alertUpdatedAt.gt'?: string | undefined;
+        'filters.alertUpdatedAt.gte'?: string | undefined;
+        'filters.alertUpdatedAt.lt'?: string | undefined;
+        'filters.alertUpdatedAt.lte'?: string | undefined;
+        'filters.repoFullName'?: string | undefined;
+        'filters.repoFullName.notIn'?: string | undefined;
+        'filters.repoLabels'?: string | undefined;
+        'filters.repoLabels.notIn'?: string | undefined;
+        'filters.repoSlug'?: string | undefined;
+        'filters.repoSlug.notIn'?: string | undefined;
+        per_page?: number | undefined;
+        startAfterCursor?: string | undefined;
+    } | undefined): Promise>;
+    /**
+     * Get analytics data for organization usage patterns and security metrics.
+     * Returns statistical analysis for specified time period.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getOrgAnalytics(time: string): Promise>;
+    /**
+     * Fetch available fixes for vulnerabilities in a repository or scan.
+     * Returns fix recommendations including version upgrades and update types.
+     *
+     * @param orgSlug - Organization identifier
+     * @param options - Fix query options including repo_slug or full_scan_id, vulnerability IDs, and preferences
+     * @returns Fix details for requested vulnerabilities with upgrade recommendations
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getOrgFixes(orgSlug: string, options: {
+        allow_major_updates: boolean;
+        full_scan_id?: string | undefined;
+        include_details?: boolean | undefined;
+        include_responsible_direct_dependencies?: boolean | undefined;
+        minimum_release_age?: string | undefined;
+        repo_slug?: string | undefined;
+        vulnerability_ids: string;
+    }): Promise>;
+    /**
+     * Get organization's license policy configuration.
+     * Returns allowed, restricted, and monitored license types.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getOrgLicensePolicy(orgSlug: string): Promise>;
+    /**
+     * Get organization's security policy configuration.
+     * Returns alert rules, severity thresholds, and enforcement settings.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getOrgSecurityPolicy(orgSlug: string): Promise>;
+    /**
+     * Get organization's telemetry configuration.
+     * Returns whether telemetry is enabled for the organization.
+     *
+     * @param orgSlug - Organization identifier
+     * @returns Telemetry configuration with enabled status
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getOrgTelemetryConfig(orgSlug: string): Promise>;
+    /**
+     * Get organization triage settings and status.
+     * Returns alert triage configuration and current state.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getOrgTriage(orgSlug: string): Promise>;
+    /**
+     * Get details of a specific webhook.
+     * Returns webhook configuration including events, URL, and filters.
+     *
+     * @param orgSlug - Organization identifier
+     * @param webhookId - Webhook ID to retrieve
+     * @returns Webhook details
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getOrgWebhook(orgSlug: string, webhookId: string): Promise>;
+    /**
+     * List all webhooks for an organization.
+     * Supports pagination and sorting options.
+     *
+     * @param orgSlug - Organization identifier
+     * @param options - Optional query parameters for pagination and sorting
+     * @returns List of webhooks with pagination info
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getOrgWebhooksList(orgSlug: string, options?: {
+        direction?: string | undefined;
+        page?: number | undefined;
+        per_page?: number | undefined;
+        sort?: string | undefined;
+    } | undefined): Promise>;
+    /**
+     * Get current API quota usage and limits.
+     * Returns remaining requests, rate limits, and quota reset times.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getQuota(): Promise>;
+    /**
+     * Get analytics data for a specific repository.
+     * Returns security metrics, dependency trends, and vulnerability statistics.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getRepoAnalytics(repo: string, time: string): Promise>;
+    /**
+     * Get details for a specific repository.
+     *
+     * Returns repository configuration, monitoring status, and metadata.
+     *
+     * @param orgSlug - Organization identifier
+     * @param repoSlug - Repository slug/name
+     * @param options - Optional parameters including workspace
+     * @returns Repository details with configuration
+     *
+     * @example
+     * ```typescript
+     * const result = await sdk.getRepository('my-org', 'my-repo')
+     *
+     * if (result.success) {
+     *   console.log('Repository:', result.data.name)
+     *   console.log('Visibility:', result.data.visibility)
+     *   console.log('Default branch:', result.data.default_branch)
+     * }
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/getorgrepo
+     * @apiEndpoint GET /orgs/{org_slug}/repos/{repo_slug}
+     * @quota 0 units
+     * @scopes repo:read
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getRepository(orgSlug: string, repoSlug: string, options?: GetRepositoryOptions | undefined): Promise;
+    /**
+     * Get details for a specific repository label.
+     *
+     * Returns label configuration, associated repositories, and policy settings.
+     *
+     * @param orgSlug - Organization identifier
+     * @param labelId - Label identifier
+     * @returns Label details with guaranteed id and name fields
+     *
+     * @example
+     * ```typescript
+     * const result = await sdk.getRepositoryLabel('my-org', 'label-id-123')
+     *
+     * if (result.success) {
+     *   console.log('Label name:', result.data.name)
+     *   console.log('Associated repos:', result.data.repository_ids)
+     *   console.log('Has security policy:', result.data.has_security_policy)
+     * }
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/getorgrepolabel
+     * @apiEndpoint GET /orgs/{org_slug}/repos/labels/{label_id}
+     * @quota 0 units
+     * @scopes repo-label:list
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getRepositoryLabel(orgSlug: string, labelId: string): Promise;
+    /**
+     * Get security score for a specific npm package and version.
+     * Returns numerical security rating and scoring breakdown.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getScoreByNpmPackage(pkgName: string, version: string): Promise>;
+    /**
+     * Get list of supported file types for full scan generation.
+     * Returns glob patterns for supported manifest files, lockfiles, and configuration formats.
+     *
+     * Files whose names match the patterns returned by this endpoint can be uploaded
+     * for report generation. Examples include `package.json`, `package-lock.json`, and `yarn.lock`.
+     *
+     * @param orgSlug - Organization identifier
+     * @returns Nested object with environment and file type patterns
+     *
+     * @example
+     * ```typescript
+     * const result = await sdk.getSupportedFiles('my-org')
+     *
+     * if (result.success) {
+     *   console.log('NPM patterns:', result.data.NPM)
+     *   console.log('PyPI patterns:', result.data.PyPI)
+     * }
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/getsupportedfiles
+     * @apiEndpoint GET /orgs/{org_slug}/supported-files
+     * @quota 0 units
+     * @scopes No scopes required, but authentication is required
+     * @throws {Error} When server returns 5xx status codes
+     */
+    getSupportedFiles(orgSlug: string): Promise>;
+    /**
+     * List all full scans for an organization.
+     *
+     * Returns paginated list of full scan metadata with guaranteed required fields
+     * for improved TypeScript autocomplete.
+     *
+     * @param orgSlug - Organization identifier
+     * @param options - Filtering and pagination options
+     * @returns List of full scans with metadata
+     *
+     * @example
+     * ```typescript
+     * const result = await sdk.listFullScans('my-org', {
+     *   branch: 'main',
+     *   per_page: 50,
+     *   use_cursor: true
+     * })
+     *
+     * if (result.success) {
+     *   result.data.results.forEach(scan => {
+     *     console.log(scan.id, scan.created_at)  // Guaranteed fields
+     *   })
+     * }
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/getorgfullscanlist
+     * @apiEndpoint GET /orgs/{org_slug}/full-scans
+     * @quota 0 units
+     * @scopes full-scans:list
+     * @throws {Error} When server returns 5xx status codes
+     */
+    listFullScans(orgSlug: string, options?: ListFullScansOptions | undefined): Promise;
+    /**
+     * List all organizations accessible to the current user.
+     *
+     * Returns organization details and access permissions with guaranteed required fields.
+     *
+     * @returns List of organizations with metadata
+     *
+     * @example
+     * ```typescript
+     * const result = await sdk.listOrganizations()
+     *
+     * if (result.success) {
+     *   result.data.organizations.forEach(org => {
+     *     console.log(org.name, org.slug)  // Guaranteed fields
+     *   })
+     * }
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/getorganizations
+     * @apiEndpoint GET /organizations
+     * @quota 0 units
+     * @throws {Error} When server returns 5xx status codes
+     */
+    listOrganizations(): Promise;
+    /**
+     * List all diff scans for an organization.
+     * Returns paginated list of diff scan metadata and status.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    listOrgDiffScans(orgSlug: string): Promise>;
+    /**
+     * List all repositories in an organization.
+     *
+     * Returns paginated list of repository metadata with guaranteed required fields.
+     *
+     * @param orgSlug - Organization identifier
+     * @param options - Pagination and filtering options
+     * @returns List of repositories with metadata
+     *
+     * @example
+     * ```typescript
+     * const result = await sdk.listRepositories('my-org', {
+     *   per_page: 50,
+     *   sort: 'name',
+     *   direction: 'asc'
+     * })
+     *
+     * if (result.success) {
+     *   result.data.results.forEach(repo => {
+     *     console.log(repo.name, repo.visibility)
+     *   })
+     * }
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/getorgrepolist
+     * @apiEndpoint GET /orgs/{org_slug}/repos
+     * @quota 0 units
+     * @scopes repo:list
+     * @throws {Error} When server returns 5xx status codes
+     */
+    listRepositories(orgSlug: string, options?: ListRepositoriesOptions | undefined): Promise;
+    /**
+     * List all repository labels for an organization.
+     *
+     * Returns paginated list of labels configured for repository organization and policy management.
+     *
+     * @param orgSlug - Organization identifier
+     * @param options - Pagination options
+     * @returns List of labels with guaranteed id and name fields
+     *
+     * @example
+     * ```typescript
+     * const result = await sdk.listRepositoryLabels('my-org', { per_page: 50, page: 1 })
+     *
+     * if (result.success) {
+     *   result.data.results.forEach(label => {
+     *     console.log('Label:', label.name)
+     *     console.log('Associated repos:', label.repository_ids?.length || 0)
+     *   })
+     * }
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/getorgrepolabellist
+     * @apiEndpoint GET /orgs/{org_slug}/repos/labels
+     * @quota 0 units
+     * @scopes repo-label:list
+     * @throws {Error} When server returns 5xx status codes
+     */
+    listRepositoryLabels(orgSlug: string, options?: QueryParams | undefined): Promise;
+    /**
+     * Create a new API token for an organization.
+     * Generates API token with specified scopes and metadata.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    postAPIToken(orgSlug: string, tokenData: QueryParams): Promise>;
+    /**
+     * Revoke an API token for an organization.
+     * Permanently disables the token and removes access.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    postAPITokensRevoke(orgSlug: string, tokenId: string): Promise>;
+    /**
+     * Rotate an API token for an organization.
+     * Generates new token value while preserving token metadata.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    postAPITokensRotate(orgSlug: string, tokenId: string): Promise>;
+    /**
+     * Update an existing API token for an organization.
+     * Modifies token metadata, scopes, or other properties.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    postAPITokenUpdate(orgSlug: string, tokenId: string, updateData: QueryParams): Promise>;
+    /**
+     * Post telemetry data for an organization.
+     * Sends telemetry events and analytics data for monitoring and analysis.
+     *
+     * @param orgSlug - Organization identifier
+     * @param telemetryData - Telemetry payload containing events and metrics
+     * @returns Empty object on successful submission
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    postOrgTelemetry(orgSlug: string, telemetryData: PostOrgTelemetryPayload): Promise>;
+    /**
+     * Update user or organization settings.
+     * Configures preferences, notifications, and security policies.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    postSettings(selectors: Array<{
+        organization?: string | undefined;
+    }>): Promise>;
+    /**
+     * Create a new full scan by rescanning an existing scan.
+     * Supports shallow (policy reapplication) and deep (dependency resolution rerun) modes.
+     *
+     * @param orgSlug - Organization identifier
+     * @param fullScanId - Full scan ID to rescan
+     * @param options - Rescan options including mode (shallow or deep)
+     * @returns New scan ID and status
+     *
+     * @example
+     * ```typescript
+     * // Shallow rescan (reapply policies to cached data)
+     * const result = await sdk.rescanFullScan('my-org', 'scan_123', {
+     *   mode: 'shallow'
+     * })
+     *
+     * if (result.success) {
+     *   console.log('New Scan ID:', result.data.id)
+     *   console.log('Status:', result.data.status)
+     * }
+     *
+     * // Deep rescan (rerun dependency resolution)
+     * const deepResult = await sdk.rescanFullScan('my-org', 'scan_123', {
+     *   mode: 'deep'
+     * })
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/rescanorgfullscan
+     * @apiEndpoint POST /orgs/{org_slug}/full-scans/{full_scan_id}/rescan
+     * @quota 0 units
+     * @scopes full-scans:create
+     * @throws {Error} When server returns 5xx status codes
+     */
+    rescanFullScan(orgSlug: string, fullScanId: string, options?: {
+        mode?: 'shallow' | 'deep' | undefined;
+    } | undefined): Promise>;
+    /**
+     * Search for dependencies across monitored projects.
+     * Returns matching packages with security information and usage patterns.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    searchDependencies(queryParams?: QueryParams | undefined): Promise>;
+    /**
+     * Send POST or PUT request with JSON body and return parsed JSON response.
+     * Supports both throwing (default) and non-throwing modes.
+     * @param urlPath - API endpoint path (e.g., 'organizations')
+     * @param options - Request options including method, body, and throws behavior
+     * @returns Parsed JSON response or SocketSdkGenericResult based on options
+     */
+    sendApi(urlPath: string, options?: SendOptions | undefined): Promise>;
+    /**
+     * Stream a full scan's results to file or stdout.
+     *
+     * Provides efficient streaming for large scan datasets without loading
+     * entire response into memory. Useful for processing large SBOMs.
+     *
+     * @param orgSlug - Organization identifier
+     * @param scanId - Full scan identifier
+     * @param options - Streaming options (output file path, stdout, or buffered)
+     * @returns Scan result with streaming response
+     *
+     * @example
+     * ```typescript
+     * // Stream to file
+     * await sdk.streamFullScan('my-org', 'scan_123', {
+     *   output: './scan-results.json'
+     * })
+     *
+     * // Stream to stdout
+     * await sdk.streamFullScan('my-org', 'scan_123', {
+     *   output: true
+     * })
+     *
+     * // Get buffered response
+     * const result = await sdk.streamFullScan('my-org', 'scan_123')
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/getorgfullscan
+     * @apiEndpoint GET /orgs/{org_slug}/full-scans/{full_scan_id}
+     * @quota 0 units
+     * @scopes full-scans:list
+     * @throws {Error} When server returns 5xx status codes
+     */
+    streamFullScan(orgSlug: string, scanId: string, options?: StreamOrgFullScanOptions | undefined): Promise>;
+    /**
+     * Stream patches for artifacts in a scan report.
+     *
+     * This method streams all available patches for artifacts in a scan.
+     * Free tier users will only receive free patches.
+     *
+     * Note: This method returns a ReadableStream for processing large datasets.
+     */
+    streamPatchesFromScan(orgSlug: string, scanId: string): Promise>;
+    /**
+     * Update alert triage status for an organization.
+     * Modifies alert resolution status and triage decisions.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    updateOrgAlertTriage(orgSlug: string, alertId: string, triageData: QueryParams): Promise>;
+    /**
+     * Update organization's license policy configuration.
+     * Modifies allowed, restricted, and monitored license types.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    updateOrgLicensePolicy(orgSlug: string, policyData: QueryParams, queryParams?: QueryParams | undefined): Promise>;
+    /**
+     * Update organization's security policy configuration.
+     * Modifies alert rules, severity thresholds, and enforcement settings.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    updateOrgSecurityPolicy(orgSlug: string, policyData: QueryParams): Promise>;
+    /**
+     * Update organization's telemetry configuration.
+     * Enables or disables telemetry for the organization.
+     *
+     * @param orgSlug - Organization identifier
+     * @param telemetryData - Telemetry configuration with enabled flag
+     * @returns Updated telemetry configuration
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    updateOrgTelemetryConfig(orgSlug: string, telemetryData: {
+        enabled?: boolean | undefined;
+    }): Promise>;
+    /**
+     * Update an existing webhook's configuration.
+     * All fields are optional - only provided fields will be updated.
+     *
+     * @param orgSlug - Organization identifier
+     * @param webhookId - Webhook ID to update
+     * @param webhookData - Updated webhook configuration
+     * @returns Updated webhook details
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    updateOrgWebhook(orgSlug: string, webhookId: string, webhookData: {
+        description?: null | string | undefined;
+        events?: string[] | undefined;
+        filters?: {
+            repositoryIds: null | string[];
+        } | null | undefined;
+        headers?: null | Record | undefined;
+        name?: string | undefined;
+        secret?: null | string | undefined;
+        url?: string | undefined;
+    }): Promise>;
+    /**
+     * Update configuration for a repository.
+     *
+     * Modifies monitoring settings, branch configuration, and scan preferences.
+     *
+     * @param orgSlug - Organization identifier
+     * @param repoSlug - Repository slug/name
+     * @param params - Configuration updates (description, homepage, default_branch, etc.)
+     * @param options - Optional parameters including workspace
+     * @returns Updated repository details
+     *
+     * @example
+     * ```typescript
+     * const result = await sdk.updateRepository('my-org', 'my-repo', {
+     *   description: 'Updated description',
+     *   default_branch: 'develop'
+     * })
+     *
+     * if (result.success) {
+     *   console.log('Repository updated:', result.data.name)
+     * }
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/updateorgrepo
+     * @apiEndpoint POST /orgs/{org_slug}/repos/{repo_slug}
+     * @quota 0 units
+     * @scopes repo:write
+     * @throws {Error} When server returns 5xx status codes
+     */
+    updateRepository(orgSlug: string, repoSlug: string, params?: QueryParams | undefined, options?: GetRepositoryOptions | undefined): Promise;
+    /**
+     * Update a repository label for an organization.
+     *
+     * Modifies label properties like name. Label names must be non-empty and less than 1000 characters.
+     *
+     * @param orgSlug - Organization identifier
+     * @param labelId - Label identifier
+     * @param labelData - Label updates (typically name property)
+     * @returns Updated label with guaranteed id and name fields
+     *
+     * @example
+     * ```typescript
+     * const result = await sdk.updateRepositoryLabel('my-org', 'label-id-123', { name: 'staging' })
+     *
+     * if (result.success) {
+     *   console.log('Label updated:', result.data.name)
+     *   console.log('Label ID:', result.data.id)
+     * }
+     * ```
+     *
+     * @see https://docs.socket.dev/reference/updateorgrepolabel
+     * @apiEndpoint PUT /orgs/{org_slug}/repos/labels/{label_id}
+     * @quota 0 units
+     * @scopes repo-label:update
+     * @throws {Error} When server returns 5xx status codes
+     */
+    updateRepositoryLabel(orgSlug: string, labelId: string, labelData: QueryParams): Promise;
+    /**
+     * Upload manifest files for dependency analysis.
+     * Processes package files to create dependency snapshots and security analysis.
+     *
+     * @throws {Error} When server returns 5xx status codes
+     */
+    uploadManifestFiles(orgSlug: string, filepaths: string[], options?: UploadManifestFilesOptions | undefined): Promise;
+    /**
+     * View detailed information about a specific patch by its UUID.
+     *
+     * This method retrieves comprehensive patch details including files,
+     * vulnerabilities, description, license, and tier information.
+     */
+    viewPatch(orgSlug: string, uuid: string): Promise;
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/testing.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/testing.d.ts
new file mode 100644
index 00000000..898b3e20
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/testing.d.ts
@@ -0,0 +1,453 @@
+/**
+ * @fileoverview Testing utilities for Socket SDK.
+ * Provides mock factories, response builders, and test helpers for easier SDK testing.
+ */
+import type { SocketSdkErrorResult, SocketSdkGenericResult, SocketSdkOperations, SocketSdkSuccessResult } from './types';
+/**
+ * Create a successful SDK response.
+ *
+ * @template T - The data type
+ * @param data - The response data
+ * @param status - HTTP status code (default: 200)
+ * @returns A successful SDK result
+ *
+ * @example
+ * ```ts
+ * const response = mockSuccessResponse({ id: '123', name: 'test' })
+ * expect(response.success).toBe(true)
+ * ```
+ */
+export declare function mockSuccessResponse(data: T, status?: number): SocketSdkGenericResult;
+/**
+ * Create an error SDK response.
+ *
+ * @template T - The data type (unused in error responses)
+ * @param error - The error message
+ * @param status - HTTP status code (default: 500)
+ * @param cause - Optional error cause
+ * @returns An error SDK result
+ *
+ * @example
+ * ```ts
+ * const response = mockErrorResponse('Not found', 404)
+ * expect(response.success).toBe(false)
+ * ```
+ */
+export declare function mockErrorResponse(error: string, status?: number, cause?: string | undefined): SocketSdkGenericResult;
+/**
+ * Create a mock Socket API error response body.
+ *
+ * @param message - Error message
+ * @param details - Optional error details
+ * @returns Socket API error response structure
+ *
+ * @example
+ * ```ts
+ * nock('https://api.socket.dev')
+ *   .get('/v0/repo/org/repo')
+ *   .reply(404, mockApiErrorBody('Repository not found'))
+ * ```
+ */
+export declare function mockApiErrorBody(message: string, details?: Record | undefined): {
+    error: {
+        message: string;
+        details?: Record | undefined;
+    };
+};
+/**
+ * Common fixture data for organization responses.
+ */
+export declare const organizationFixtures: {
+    /**
+     * Basic organization with minimal data.
+     */
+    readonly basic: {
+        readonly id: "org_123";
+        readonly name: "test-org";
+        readonly plan: "free";
+    };
+    /**
+     * Organization with full details.
+     */
+    readonly full: {
+        readonly id: "org_123";
+        readonly name: "test-org";
+        readonly plan: "enterprise";
+        readonly created_at: "2024-01-01T00:00:00Z";
+        readonly updated_at: "2024-01-02T00:00:00Z";
+    };
+};
+/**
+ * Common fixture data for repository responses.
+ */
+export declare const repositoryFixtures: {
+    /**
+     * Basic repository with minimal data.
+     */
+    readonly basic: {
+        readonly id: "repo_123";
+        readonly name: "test-repo";
+        readonly archived: false;
+        readonly default_branch: "main";
+    };
+    /**
+     * Archived repository.
+     */
+    readonly archived: {
+        readonly id: "repo_456";
+        readonly name: "old-repo";
+        readonly archived: true;
+        readonly default_branch: "master";
+    };
+    /**
+     * Repository with full details.
+     */
+    readonly full: {
+        readonly id: "repo_123";
+        readonly name: "test-repo";
+        readonly archived: false;
+        readonly default_branch: "main";
+        readonly homepage: "https://example.com";
+        readonly visibility: "public";
+        readonly created_at: "2024-01-01T00:00:00Z";
+        readonly updated_at: "2024-01-02T00:00:00Z";
+    };
+};
+/**
+ * Common fixture data for scan responses.
+ */
+export declare const scanFixtures: {
+    /**
+     * Pending scan.
+     */
+    readonly pending: {
+        readonly id: "scan_pending";
+        readonly status: "pending";
+        readonly created_at: "2024-01-01T00:00:00Z";
+    };
+    /**
+     * Completed scan with no issues.
+     */
+    readonly completed: {
+        readonly id: "scan_completed";
+        readonly status: "completed";
+        readonly created_at: "2024-01-01T00:00:00Z";
+        readonly completed_at: "2024-01-01T00:01:00Z";
+        readonly issues_found: 0;
+    };
+    /**
+     * Completed scan with issues.
+     */
+    readonly withIssues: {
+        readonly id: "scan_with_issues";
+        readonly status: "completed";
+        readonly created_at: "2024-01-01T00:00:00Z";
+        readonly completed_at: "2024-01-01T00:01:00Z";
+        readonly issues_found: 3;
+    };
+    /**
+     * Failed scan.
+     */
+    readonly failed: {
+        readonly id: "scan_failed";
+        readonly status: "failed";
+        readonly created_at: "2024-01-01T00:00:00Z";
+        readonly error: "Scan timeout";
+    };
+};
+/**
+ * Common fixture data for package/artifact responses.
+ */
+export declare const packageFixtures: {
+    /**
+     * Safe package with high score.
+     */
+    readonly safe: {
+        readonly id: "pkg_safe";
+        readonly name: "safe-package";
+        readonly version: "1.0.0";
+        readonly score: 95;
+    };
+    /**
+     * Package with vulnerabilities.
+     */
+    readonly vulnerable: {
+        readonly id: "pkg_vuln";
+        readonly name: "vulnerable-package";
+        readonly version: "2.0.0";
+        readonly score: 45;
+        readonly issues: readonly ["vulnerability"];
+    };
+    /**
+     * Package with malware alert.
+     */
+    readonly malware: {
+        readonly id: "pkg_malware";
+        readonly name: "malware-package";
+        readonly version: "3.0.0";
+        readonly score: 0;
+        readonly issues: readonly ["malware"];
+    };
+};
+/**
+ * Common fixture data for issue/alert responses.
+ */
+export declare const issueFixtures: {
+    /**
+     * Vulnerability issue.
+     */
+    readonly vulnerability: {
+        readonly type: "vulnerability";
+        readonly severity: "high";
+        readonly key: "CVE-2024-1234";
+        readonly description: "SQL Injection vulnerability";
+    };
+    /**
+     * Malware issue.
+     */
+    readonly malware: {
+        readonly type: "malware";
+        readonly severity: "critical";
+        readonly key: "malware-detected";
+        readonly description: "Malicious code detected";
+    };
+    /**
+     * License issue.
+     */
+    readonly license: {
+        readonly type: "license";
+        readonly severity: "medium";
+        readonly key: "license-incompatible";
+        readonly description: "License incompatible with project";
+    };
+};
+/**
+ * All fixture categories in one object.
+ */
+export declare const fixtures: {
+    readonly issues: {
+        /**
+         * Vulnerability issue.
+         */
+        readonly vulnerability: {
+            readonly type: "vulnerability";
+            readonly severity: "high";
+            readonly key: "CVE-2024-1234";
+            readonly description: "SQL Injection vulnerability";
+        };
+        /**
+         * Malware issue.
+         */
+        readonly malware: {
+            readonly type: "malware";
+            readonly severity: "critical";
+            readonly key: "malware-detected";
+            readonly description: "Malicious code detected";
+        };
+        /**
+         * License issue.
+         */
+        readonly license: {
+            readonly type: "license";
+            readonly severity: "medium";
+            readonly key: "license-incompatible";
+            readonly description: "License incompatible with project";
+        };
+    };
+    readonly organizations: {
+        /**
+         * Basic organization with minimal data.
+         */
+        readonly basic: {
+            readonly id: "org_123";
+            readonly name: "test-org";
+            readonly plan: "free";
+        };
+        /**
+         * Organization with full details.
+         */
+        readonly full: {
+            readonly id: "org_123";
+            readonly name: "test-org";
+            readonly plan: "enterprise";
+            readonly created_at: "2024-01-01T00:00:00Z";
+            readonly updated_at: "2024-01-02T00:00:00Z";
+        };
+    };
+    readonly packages: {
+        /**
+         * Safe package with high score.
+         */
+        readonly safe: {
+            readonly id: "pkg_safe";
+            readonly name: "safe-package";
+            readonly version: "1.0.0";
+            readonly score: 95;
+        };
+        /**
+         * Package with vulnerabilities.
+         */
+        readonly vulnerable: {
+            readonly id: "pkg_vuln";
+            readonly name: "vulnerable-package";
+            readonly version: "2.0.0";
+            readonly score: 45;
+            readonly issues: readonly ["vulnerability"];
+        };
+        /**
+         * Package with malware alert.
+         */
+        readonly malware: {
+            readonly id: "pkg_malware";
+            readonly name: "malware-package";
+            readonly version: "3.0.0";
+            readonly score: 0;
+            readonly issues: readonly ["malware"];
+        };
+    };
+    readonly repositories: {
+        /**
+         * Basic repository with minimal data.
+         */
+        readonly basic: {
+            readonly id: "repo_123";
+            readonly name: "test-repo";
+            readonly archived: false;
+            readonly default_branch: "main";
+        };
+        /**
+         * Archived repository.
+         */
+        readonly archived: {
+            readonly id: "repo_456";
+            readonly name: "old-repo";
+            readonly archived: true;
+            readonly default_branch: "master";
+        };
+        /**
+         * Repository with full details.
+         */
+        readonly full: {
+            readonly id: "repo_123";
+            readonly name: "test-repo";
+            readonly archived: false;
+            readonly default_branch: "main";
+            readonly homepage: "https://example.com";
+            readonly visibility: "public";
+            readonly created_at: "2024-01-01T00:00:00Z";
+            readonly updated_at: "2024-01-02T00:00:00Z";
+        };
+    };
+    readonly scans: {
+        /**
+         * Pending scan.
+         */
+        readonly pending: {
+            readonly id: "scan_pending";
+            readonly status: "pending";
+            readonly created_at: "2024-01-01T00:00:00Z";
+        };
+        /**
+         * Completed scan with no issues.
+         */
+        readonly completed: {
+            readonly id: "scan_completed";
+            readonly status: "completed";
+            readonly created_at: "2024-01-01T00:00:00Z";
+            readonly completed_at: "2024-01-01T00:01:00Z";
+            readonly issues_found: 0;
+        };
+        /**
+         * Completed scan with issues.
+         */
+        readonly withIssues: {
+            readonly id: "scan_with_issues";
+            readonly status: "completed";
+            readonly created_at: "2024-01-01T00:00:00Z";
+            readonly completed_at: "2024-01-01T00:01:00Z";
+            readonly issues_found: 3;
+        };
+        /**
+         * Failed scan.
+         */
+        readonly failed: {
+            readonly id: "scan_failed";
+            readonly status: "failed";
+            readonly created_at: "2024-01-01T00:00:00Z";
+            readonly error: "Scan timeout";
+        };
+    };
+};
+/**
+ * Mock SDK method result with proper typing.
+ *
+ * @template T - The operation type
+ * @param success - Whether the operation succeeded
+ * @param data - Success data or error details
+ * @returns Properly typed SDK result
+ *
+ * @example
+ * ```ts
+ * const mockGet = vi.fn().mockResolvedValue(
+ *   mockSdkResult<'getRepo'>(true, { id: '123', name: 'repo' })
+ * )
+ * ```
+ */
+export declare function mockSdkResult(success: true, data: SocketSdkSuccessResult['data'], status?: number | undefined): SocketSdkSuccessResult;
+export declare function mockSdkResult(success: false, error: string, status?: number | undefined, cause?: string | undefined): SocketSdkErrorResult;
+/**
+ * Create a mock SDK error with proper structure.
+ *
+ * @param type - Error type ('NOT_FOUND', 'UNAUTHORIZED', etc.)
+ * @param options - Error options
+ * @returns Error response matching SDK structure
+ *
+ * @example
+ * ```ts
+ * const mockMethod = vi.fn().mockRejectedValue(
+ *   mockSdkError('NOT_FOUND', { status: 404, message: 'Repository not found' })
+ * )
+ * ```
+ */
+export declare function mockSdkError(type: 'NOT_FOUND' | 'UNAUTHORIZED' | 'FORBIDDEN' | 'SERVER_ERROR' | 'TIMEOUT', options?: {
+    cause?: string | undefined;
+    message?: string | undefined;
+    status?: number | undefined;
+}): Error & {
+    status: number;
+    cause?: string | undefined;
+};
+/**
+ * Type guard to check if SDK result is successful.
+ *
+ * @param result - SDK result to check
+ * @returns True if result is successful
+ *
+ * @example
+ * ```ts
+ * const result = await sdk.getRepo('org', 'repo')
+ * if (isSuccessResult(result)) {
+ *   console.log(result.data.name) // Type-safe access
+ * }
+ * ```
+ */
+export declare function isSuccessResult(result: SocketSdkGenericResult): result is Extract, {
+    success: true;
+}>;
+/**
+ * Type guard to check if SDK result is an error.
+ *
+ * @param result - SDK result to check
+ * @returns True if result is an error
+ *
+ * @example
+ * ```ts
+ * const result = await sdk.getRepo('org', 'repo')
+ * if (isErrorResult(result)) {
+ *   console.error(result.error) // Type-safe access
+ * }
+ * ```
+ */
+export declare function isErrorResult(result: SocketSdkGenericResult): result is Extract, {
+    success: false;
+}>;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/testing.js b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/testing.js
new file mode 100644
index 00000000..c42370ac
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/testing.js
@@ -0,0 +1,286 @@
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// src/testing.ts
+var testing_exports = {};
+__export(testing_exports, {
+  fixtures: () => fixtures,
+  isErrorResult: () => isErrorResult,
+  isSuccessResult: () => isSuccessResult,
+  issueFixtures: () => issueFixtures,
+  mockApiErrorBody: () => mockApiErrorBody,
+  mockErrorResponse: () => mockErrorResponse,
+  mockSdkError: () => mockSdkError,
+  mockSdkResult: () => mockSdkResult,
+  mockSuccessResponse: () => mockSuccessResponse,
+  organizationFixtures: () => organizationFixtures,
+  packageFixtures: () => packageFixtures,
+  repositoryFixtures: () => repositoryFixtures,
+  scanFixtures: () => scanFixtures
+});
+module.exports = __toCommonJS(testing_exports);
+function mockSuccessResponse(data, status = 200) {
+  return {
+    cause: void 0,
+    data,
+    error: void 0,
+    status,
+    success: true
+  };
+}
+function mockErrorResponse(error, status = 500, cause) {
+  return {
+    cause,
+    data: void 0,
+    error,
+    status,
+    success: false
+  };
+}
+function mockApiErrorBody(message, details) {
+  return {
+    error: {
+      message,
+      ...details ? { details } : {}
+    }
+  };
+}
+var organizationFixtures = {
+  /**
+   * Basic organization with minimal data.
+   */
+  basic: {
+    id: "org_123",
+    name: "test-org",
+    plan: "free"
+  },
+  /**
+   * Organization with full details.
+   */
+  full: {
+    id: "org_123",
+    name: "test-org",
+    plan: "enterprise",
+    created_at: "2024-01-01T00:00:00Z",
+    updated_at: "2024-01-02T00:00:00Z"
+  }
+};
+var repositoryFixtures = {
+  /**
+   * Basic repository with minimal data.
+   */
+  basic: {
+    id: "repo_123",
+    name: "test-repo",
+    archived: false,
+    default_branch: "main"
+  },
+  /**
+   * Archived repository.
+   */
+  archived: {
+    id: "repo_456",
+    name: "old-repo",
+    archived: true,
+    default_branch: "master"
+  },
+  /**
+   * Repository with full details.
+   */
+  full: {
+    id: "repo_123",
+    name: "test-repo",
+    archived: false,
+    default_branch: "main",
+    homepage: "https://example.com",
+    visibility: "public",
+    created_at: "2024-01-01T00:00:00Z",
+    updated_at: "2024-01-02T00:00:00Z"
+  }
+};
+var scanFixtures = {
+  /**
+   * Pending scan.
+   */
+  pending: {
+    id: "scan_pending",
+    status: "pending",
+    created_at: "2024-01-01T00:00:00Z"
+  },
+  /**
+   * Completed scan with no issues.
+   */
+  completed: {
+    id: "scan_completed",
+    status: "completed",
+    created_at: "2024-01-01T00:00:00Z",
+    completed_at: "2024-01-01T00:01:00Z",
+    issues_found: 0
+  },
+  /**
+   * Completed scan with issues.
+   */
+  withIssues: {
+    id: "scan_with_issues",
+    status: "completed",
+    created_at: "2024-01-01T00:00:00Z",
+    completed_at: "2024-01-01T00:01:00Z",
+    issues_found: 3
+  },
+  /**
+   * Failed scan.
+   */
+  failed: {
+    id: "scan_failed",
+    status: "failed",
+    created_at: "2024-01-01T00:00:00Z",
+    error: "Scan timeout"
+  }
+};
+var packageFixtures = {
+  /**
+   * Safe package with high score.
+   */
+  safe: {
+    id: "pkg_safe",
+    name: "safe-package",
+    version: "1.0.0",
+    score: 95
+  },
+  /**
+   * Package with vulnerabilities.
+   */
+  vulnerable: {
+    id: "pkg_vuln",
+    name: "vulnerable-package",
+    version: "2.0.0",
+    score: 45,
+    issues: ["vulnerability"]
+  },
+  /**
+   * Package with malware alert.
+   */
+  malware: {
+    id: "pkg_malware",
+    name: "malware-package",
+    version: "3.0.0",
+    score: 0,
+    issues: ["malware"]
+  }
+};
+var issueFixtures = {
+  /**
+   * Vulnerability issue.
+   */
+  vulnerability: {
+    type: "vulnerability",
+    severity: "high",
+    key: "CVE-2024-1234",
+    description: "SQL Injection vulnerability"
+  },
+  /**
+   * Malware issue.
+   */
+  malware: {
+    type: "malware",
+    severity: "critical",
+    key: "malware-detected",
+    description: "Malicious code detected"
+  },
+  /**
+   * License issue.
+   */
+  license: {
+    type: "license",
+    severity: "medium",
+    key: "license-incompatible",
+    description: "License incompatible with project"
+  }
+};
+var fixtures = {
+  issues: issueFixtures,
+  organizations: organizationFixtures,
+  packages: packageFixtures,
+  repositories: repositoryFixtures,
+  scans: scanFixtures
+};
+function mockSdkResult(success, dataOrError, status = success ? 200 : 500, cause) {
+  if (success) {
+    return {
+      cause: void 0,
+      data: dataOrError,
+      error: void 0,
+      status,
+      success: true
+    };
+  }
+  return {
+    cause,
+    data: void 0,
+    error: dataOrError,
+    status,
+    success: false
+  };
+}
+function mockSdkError(type, options = {}) {
+  const statusMap = {
+    FORBIDDEN: 403,
+    NOT_FOUND: 404,
+    SERVER_ERROR: 500,
+    TIMEOUT: 408,
+    UNAUTHORIZED: 401
+  };
+  const messageMap = {
+    FORBIDDEN: "Access forbidden",
+    NOT_FOUND: "Resource not found",
+    SERVER_ERROR: "Internal server error",
+    TIMEOUT: "Request timeout",
+    UNAUTHORIZED: "Unauthorized"
+  };
+  const status = options.status ?? statusMap[type];
+  const message = options.message ?? messageMap[type];
+  const error = new Error(message);
+  error.status = status;
+  if (options.cause) {
+    error.cause = options.cause;
+  }
+  return error;
+}
+function isSuccessResult(result) {
+  return result.success === true;
+}
+function isErrorResult(result) {
+  return result.success === false;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  fixtures,
+  isErrorResult,
+  isSuccessResult,
+  issueFixtures,
+  mockApiErrorBody,
+  mockErrorResponse,
+  mockSdkError,
+  mockSdkResult,
+  mockSuccessResponse,
+  organizationFixtures,
+  packageFixtures,
+  repositoryFixtures,
+  scanFixtures
+});
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/types-strict.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/types-strict.d.ts
new file mode 100644
index 00000000..259f0965
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/types-strict.d.ts
@@ -0,0 +1,342 @@
+/**
+ * @fileoverview Strict type definitions for Socket SDK v3.
+ * AUTO-GENERATED from OpenAPI definitions using AST parsing - DO NOT EDIT MANUALLY.
+ * These types provide better TypeScript DX by marking guaranteed fields as required
+ * and only keeping truly optional fields as optional.
+ *
+ * Generated by: scripts/generate-strict-types.mjs
+ */
+/**
+ * Options for create full scan.
+ */
+export type CreateFullScanOptions = {
+    branch?: string | undefined;
+    commit_hash?: string | undefined;
+    commit_message?: string | undefined;
+    committers?: string | undefined;
+    integration_org_slug?: string | undefined;
+    integration_type?: 'api' | 'github' | 'gitlab' | 'bitbucket' | 'azure' | 'web' | undefined;
+    make_default_branch?: boolean | undefined;
+    pathsRelativeTo?: string | undefined;
+    pull_request?: number | undefined;
+    repo: string;
+    scan_type?: string | undefined;
+    set_as_pending_head?: boolean | undefined;
+    tmp?: boolean | undefined;
+    workspace?: string | undefined;
+};
+/**
+ * Strict type for full scan item.
+ */
+export type FullScanItem = {
+    api_url: string | null;
+    branch?: string | null | undefined;
+    commit_hash?: string | null | undefined;
+    commit_message?: string | null | undefined;
+    committers?: string[] | undefined;
+    created_at: string;
+    html_report_url: string;
+    html_url?: string | null | undefined;
+    id: string;
+    integration_branch_url?: string | null | undefined;
+    integration_commit_url?: string | null | undefined;
+    integration_pull_request_url?: string | null | undefined;
+    integration_repo_url: string;
+    integration_type: string | null;
+    organization_id: string;
+    organization_slug: string;
+    pull_request?: number | null | undefined;
+    repo: string;
+    repository_id: string;
+    repository_slug: string;
+    scan_state?: 'pending' | 'precrawl' | 'resolve' | 'scan' | null | undefined;
+    scan_type?: string | null | undefined;
+    updated_at: string;
+    workspace?: string | undefined;
+};
+/**
+ * Strict type for full scan list data.
+ */
+export type FullScanListData = {
+    nextPage?: number | null | undefined;
+    nextPageCursor?: string | null | undefined;
+    results: FullScanItem[];
+};
+/**
+ * Options for get repository.
+ */
+export type GetRepositoryOptions = {
+    workspace?: string | undefined;
+};
+/**
+ * Options for list full scans.
+ */
+export type ListFullScansOptions = {
+    branch?: string | undefined;
+    commit_hash?: string | undefined;
+    direction?: 'asc' | 'desc' | undefined;
+    from?: string | undefined;
+    page?: number | undefined;
+    per_page?: number | undefined;
+    pull_request?: string | undefined;
+    repo?: string | undefined;
+    scan_type?: string | undefined;
+    sort?: 'name' | 'created_at' | undefined;
+    startAfterCursor?: string | undefined;
+    use_cursor?: boolean | undefined;
+    workspace?: string | undefined;
+};
+/**
+ * Options for list repositories.
+ */
+export type ListRepositoriesOptions = {
+    direction?: string | undefined;
+    include_archived?: boolean | undefined;
+    page?: number | undefined;
+    per_page?: number | undefined;
+    sort?: string | undefined;
+    workspace?: string | undefined;
+};
+/**
+ * Strict type for organization item.
+ */
+export type OrganizationItem = {
+    id: string;
+    image?: string | null | undefined;
+    name?: string | null | undefined;
+    plan: string;
+    slug: string;
+};
+/**
+ * Strict type for repositories list data.
+ */
+export type RepositoriesListData = {
+    nextPage?: number | null | undefined;
+    results: RepositoryListItem[];
+};
+/**
+ * Strict type for repository list item.
+ */
+export type RepositoryListItem = {
+    archived: boolean;
+    created_at: string;
+    default_branch: string | null;
+    description: string | null;
+    head_full_scan_id: string | null;
+    homepage: string | null;
+    id: string;
+    integration_meta?: {
+        /** @enum {string} */
+        type?: 'github';
+        value?: {
+            /**
+             * @description The GitHub installation_id of the active associated Socket GitHub App
+             * @default
+             */
+            installation_id: string;
+            /**
+             * @description The GitHub login name that the active Socket GitHub App installation is installed to
+             * @default
+             */
+            installation_login: string;
+            /**
+             * @description The name of the associated GitHub repo.
+             * @default
+             */
+            repo_name: string | null;
+            /**
+             * @description The id of the associated GitHub repo.
+             * @default
+             */
+            repo_id: string | null;
+        };
+    } | null | undefined;
+    name: string;
+    slug: string;
+    updated_at: string;
+    visibility: 'public' | 'private';
+    workspace: string;
+};
+/**
+ * Strict type for repository item.
+ */
+export type RepositoryItem = {
+    archived: boolean;
+    created_at: string;
+    default_branch: string | null;
+    description: string | null;
+    head_full_scan_id: string | null;
+    homepage: string | null;
+    id: string;
+    integration_meta: {
+        /** @enum {string} */
+        type?: 'github';
+        value?: {
+            /**
+             * @description The GitHub installation_id of the active associated Socket GitHub App
+             * @default
+             */
+            installation_id: string;
+            /**
+             * @description The GitHub login name that the active Socket GitHub App installation is installed to
+             * @default
+             */
+            installation_login: string;
+            /**
+             * @description The name of the associated GitHub repo.
+             * @default
+             */
+            repo_name: string | null;
+            /**
+             * @description The id of the associated GitHub repo.
+             * @default
+             */
+            repo_id: string | null;
+        };
+    } | null;
+    name: string;
+    slig: string;
+    slug: string;
+    updated_at: string;
+    visibility: 'public' | 'private';
+    workspace: string;
+};
+/**
+ * Strict type for repository label item.
+ */
+export type RepositoryLabelItem = {
+    has_license_policy?: boolean | undefined;
+    has_security_policy?: boolean | undefined;
+    id: string;
+    name: string;
+    repository_ids?: string[] | undefined;
+};
+/**
+ * Strict type for repository labels list data.
+ */
+export type RepositoryLabelsListData = {
+    nextPage?: number | null | undefined;
+    results: RepositoryLabelItem[];
+};
+/**
+ * Error result type for all SDK operations.
+ */
+export type StrictErrorResult = {
+    cause?: string | undefined;
+    data?: undefined | undefined;
+    error: string;
+    status: number;
+    success: false;
+};
+/**
+ * Generic strict result type combining success and error.
+ */
+export type StrictResult = {
+    cause?: undefined | undefined;
+    data: T;
+    error?: undefined | undefined;
+    status: number;
+    success: true;
+} | StrictErrorResult;
+/**
+ * Strict type for full scan list result.
+ */
+export type FullScanListResult = {
+    cause?: undefined | undefined;
+    data: FullScanListData;
+    error?: undefined | undefined;
+    status: number;
+    success: true;
+};
+/**
+ * Strict type for single full scan result.
+ */
+export type FullScanResult = {
+    cause?: undefined | undefined;
+    data: FullScanItem;
+    error?: undefined | undefined;
+    status: number;
+    success: true;
+};
+/**
+ * Options for streaming a full scan.
+ */
+export type StreamFullScanOptions = {
+    output?: boolean | string | undefined;
+};
+/**
+ * Strict type for organizations list result.
+ */
+export type OrganizationsResult = {
+    cause?: undefined | undefined;
+    data: {
+        organizations: OrganizationItem[];
+    };
+    error?: undefined | undefined;
+    status: number;
+    success: true;
+};
+/**
+ * Strict type for repositories list result.
+ */
+export type RepositoriesListResult = {
+    cause?: undefined | undefined;
+    data: RepositoriesListData;
+    error?: undefined | undefined;
+    status: number;
+    success: true;
+};
+/**
+ * Strict type for delete operation result.
+ */
+export type DeleteResult = {
+    cause?: undefined | undefined;
+    data: {
+        success: boolean;
+    };
+    error?: undefined | undefined;
+    status: number;
+    success: true;
+};
+/**
+ * Strict type for single repository result.
+ */
+export type RepositoryResult = {
+    cause?: undefined | undefined;
+    data: RepositoryItem;
+    error?: undefined | undefined;
+    status: number;
+    success: true;
+};
+/**
+ * Strict type for repository labels list result.
+ */
+export type RepositoryLabelsListResult = {
+    cause?: undefined | undefined;
+    data: RepositoryLabelsListData;
+    error?: undefined | undefined;
+    status: number;
+    success: true;
+};
+/**
+ * Strict type for single repository label result.
+ */
+export type RepositoryLabelResult = {
+    cause?: undefined | undefined;
+    data: RepositoryLabelItem;
+    error?: undefined | undefined;
+    status: number;
+    success: true;
+};
+/**
+ * Strict type for delete repository label result.
+ */
+export type DeleteRepositoryLabelResult = {
+    cause?: undefined | undefined;
+    data: {
+        status: string;
+    };
+    error?: undefined | undefined;
+    status: number;
+    success: true;
+};
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/types.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/types.d.ts
new file mode 100644
index 00000000..d535b6f3
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/types.d.ts
@@ -0,0 +1,358 @@
+/**
+ * @fileoverview Type definitions and interfaces for Socket SDK.
+ * Provides TypeScript types for API requests, responses, and internal SDK functionality.
+ */
+import type { components, operations } from '../types/api';
+import type { OpReturnType } from '../types/api-helpers';
+import type { Remap } from '@socketsecurity/lib/objects';
+import type { Agent as HttpAgent, RequestOptions as HttpRequestOptions } from 'node:http';
+import type { ClientHttp2Session, ClientSessionRequestOptions } from 'node:http2';
+import type { Agent as HttpsAgent, RequestOptions as HttpsRequestOptions } from 'node:https';
+export type ALERT_ACTION = 'error' | 'monitor' | 'warn' | 'ignore';
+export type ALERT_TYPE = keyof NonNullable;
+export type Entitlement = {
+    enabled: boolean;
+    key: string;
+};
+export type EntitlementsResponse = {
+    items: Entitlement[];
+};
+export type PatchFile = {
+    afterHash?: string | undefined;
+    beforeHash?: string | undefined;
+    socketBlob?: string | null;
+};
+export type Vulnerability = {
+    cves: string[];
+    description: string;
+    severity: string;
+    summary: string;
+};
+export type SecurityAlert = {
+    description: string;
+    severity: string;
+    summary: string;
+    cveId?: string | null;
+    ghsaId?: string | null;
+};
+export type PatchRecord = {
+    description: string;
+    license: string;
+    publishedAt: string;
+    securityAlerts: SecurityAlert[];
+    tier: 'free' | 'paid';
+    uuid: string;
+};
+export type PatchViewResponse = {
+    description: string;
+    files: Record;
+    license: string;
+    publishedAt: string;
+    purl: string;
+    tier: 'free' | 'paid';
+    uuid: string;
+    vulnerabilities: Record;
+};
+export type ArtifactPatches = {
+    artifactId: string;
+    patches: PatchRecord[];
+};
+export type Agent = HttpsAgent | HttpAgent | ClientHttp2Session;
+export interface RequestInfo {
+    method: string;
+    url: string;
+    headers?: Record | undefined;
+    timeout?: number | undefined;
+}
+export interface ResponseInfo {
+    method: string;
+    url: string;
+    duration: number;
+    status?: number | undefined;
+    statusText?: string | undefined;
+    headers?: Record | undefined;
+    error?: Error | undefined;
+}
+export type CompactSocketArtifactAlert = Remap>;
+export type CompactSocketArtifact = Remap & {
+    alerts: CompactSocketArtifactAlert[];
+}>;
+export type CustomResponseType = 'response' | 'text' | 'json';
+export type GetOptions = {
+    responseType?: CustomResponseType | undefined;
+    throws?: boolean | undefined;
+};
+export type GotOptions = {
+    http2?: ClientHttp2Session | undefined;
+    http?: HttpAgent | undefined;
+    https?: HttpsAgent | undefined;
+};
+export type QueryParams = Record;
+export type HeadersRecord = Record | undefined;
+export type SocketMetricSchema = components['schemas']['SocketMetricSchema'];
+export type SocketId = components['schemas']['SocketId'];
+export type SocketArtifactWithExtras = SocketArtifact & {
+    scorecards?: unknown | undefined;
+    supplyChainRisk?: SocketMetricSchema | undefined;
+    topLevelAncestors?: SocketId[] | undefined;
+};
+export type RequestOptions = ((HttpsRequestOptions & {
+    headers?: HeadersRecord | undefined;
+}) | (HttpRequestOptions & {
+    headers?: HeadersRecord | undefined;
+}) | (ClientSessionRequestOptions & {
+    headers?: HeadersRecord | undefined;
+})) & {
+    timeout?: number | undefined;
+};
+export type RequestOptionsWithHooks = RequestOptions & {
+    hooks?: {
+        onRequest?: ((info: RequestInfo) => void) | undefined;
+        onResponse?: ((info: ResponseInfo) => void) | undefined;
+    } | undefined;
+};
+export type SendMethod = 'POST' | 'PUT';
+export type SendOptions = {
+    body?: unknown | undefined;
+    method?: SendMethod | undefined;
+    throws?: boolean | undefined;
+};
+export type SocketArtifact = Remap & {
+    alerts?: SocketArtifactAlert[] | undefined;
+}>;
+export type SocketArtifactAlert = Remap & {
+    type: ALERT_TYPE;
+    action?: ALERT_ACTION | undefined;
+    props?: Record | undefined;
+}>;
+export type SocketSdkOperations = keyof operations;
+export type SocketSdkSuccessResult = {
+    cause?: undefined | undefined;
+    data: OpReturnType;
+    error?: undefined | undefined;
+    status: number;
+    success: true;
+};
+export type SocketSdkErrorResult = {
+    cause?: string | undefined;
+    data?: undefined | undefined;
+    error: string;
+    status: number;
+    success: false;
+    url?: string | undefined;
+    _operation?: T | undefined;
+};
+export type SocketSdkResult = SocketSdkSuccessResult | SocketSdkErrorResult;
+/**
+ * Helper type to extract the data from a successful SDK operation result.
+ * @example
+ * type RepoData = SocketSdkData<'getOrgRepoList'>
+ */
+export type SocketSdkData = OpReturnType;
+/**
+ * Helper type to extract array element type from SDK operation results.
+ * Useful for typing items from paginated results.
+ * @example
+ * type RepoItem = SocketSdkArrayElement<'getOrgRepoList', 'results'>
+ */
+export type SocketSdkArrayElement> = SocketSdkData[K] extends Array ? U : never;
+export type SocketSdkGenericResult = {
+    cause?: undefined | undefined;
+    data: T;
+    error?: undefined | undefined;
+    status: number;
+    success: true;
+} | {
+    cause?: string | undefined;
+    data?: undefined | undefined;
+    error: string;
+    status: number;
+    success: false;
+    url?: string | undefined;
+};
+export type MalwareCheckAlert = {
+    category?: string | undefined;
+    fix?: {
+        description: string;
+        type: string;
+    } | undefined;
+    key: string;
+    props?: Record | undefined;
+    severity?: string | undefined;
+    type: ALERT_TYPE;
+};
+export type MalwareCheckPackage = {
+    alerts: MalwareCheckAlert[];
+    name?: string | undefined;
+    namespace?: string | undefined;
+    score?: MalwareCheckScore | undefined;
+    type: string;
+    version?: string | undefined;
+};
+export type MalwareCheckResult = MalwareCheckPackage[];
+export type MalwareCheckScore = {
+    license: number;
+    maintenance: number;
+    overall: number;
+    quality: number;
+    supplyChain: number;
+    vulnerability: number;
+};
+/**
+ * Result from file validation callback.
+ * Allows consumers to customize error handling and logging.
+ *
+ * @since v3.0.0
+ */
+export interface FileValidationResult {
+    /**
+     * Whether to continue with the operation using valid files.
+     * If false, the SDK operation will fail with the provided error message.
+     */
+    shouldContinue: boolean;
+    /**
+     * Optional custom error message if shouldContinue is false.
+     * If not provided, SDK will use default error message.
+     */
+    errorMessage?: string | undefined;
+    /**
+     * Optional cause/reason for the error.
+     */
+    errorCause?: string | undefined;
+}
+/**
+ * Callback invoked when file validation detects unreadable files.
+ * Gives consumers control over error messages and logging.
+ *
+ * @param validPaths - Files that passed validation (readable)
+ * @param invalidPaths - Files that failed validation (unreadable)
+ * @param context - Context about the operation (method name, orgSlug, etc.)
+ * @returns Decision on whether to continue and optional custom error messages
+ *
+ * @since v3.0.0
+ */
+export type FileValidationCallback = (validPaths: string[], invalidPaths: string[], context: {
+    operation: 'createDependenciesSnapshot' | 'createFullScan' | 'uploadManifestFiles';
+    orgSlug?: string | undefined;
+    [key: string]: unknown;
+}) => FileValidationResult | Promise;
+/**
+ * Configuration options for SocketSdk.
+ */
+export interface SocketSdkOptions {
+    /** HTTP agent for connection pooling and proxy support */
+    agent?: Agent | GotOptions | undefined;
+    /** Base URL for Socket API (default: 'https://api.socket.dev/v0/') */
+    baseUrl?: string | undefined;
+    /**
+     * Enable TTL caching for API responses (default: false).
+     * When enabled, GET requests are cached with configurable TTLs.
+     * Only applies to listOrganizations() and getQuota() methods.
+     */
+    cache?: boolean | undefined;
+    /**
+     * Cache TTL in milliseconds (default: 300_000 = 5 minutes).
+     * Only used when cache is enabled.
+     * Can be a single number for all endpoints or an object for per-endpoint TTLs.
+     *
+     * Recommended TTLs by endpoint:
+     * - organizations: 30 minutes (rarely changes)
+     * - quota: 10 minutes (changes incrementally)
+     *
+     * @example
+     * // Single TTL for all endpoints.
+     * cacheTtl: 15 * 60 * 1000  // 15 minutes
+     *
+     * @example
+     * // Per-endpoint TTLs with recommended values.
+     * cacheTtl: {
+     *   default: 5 * 60 * 1000,        // 5 minutes default
+     *   organizations: 30 * 60 * 1000, // 30 minutes (recommended)
+     *   quota: 10 * 60 * 1000          // 10 minutes (recommended)
+     * }
+     */
+    cacheTtl?: number | {
+        default?: number | undefined;
+        organizations?: number | undefined;
+        quota?: number | undefined;
+    } | undefined;
+    /**
+     * Callback for file validation events.
+     * Called when any file-upload method detects unreadable files:
+     * - createDependenciesSnapshot
+     * - createFullScan (formerly createOrgFullScan)
+     * - uploadManifestFiles
+     *
+     * Default behavior (if not provided):
+     * - Warns about invalid files (console.warn)
+     * - Continues with valid files if any exist
+     * - Throws error if all files are invalid
+     *
+     * @since v3.0.0
+     */
+    onFileValidation?: FileValidationCallback | undefined;
+    /** Request/response logging hooks */
+    hooks?: {
+        onRequest?: ((info: RequestInfo) => void) | undefined;
+        onResponse?: ((info: ResponseInfo) => void) | undefined;
+    } | undefined;
+    /**
+     * Number of retry attempts on failure (default: 3).
+     * Uses exponential backoff between retries.
+     */
+    retries?: number | undefined;
+    /**
+     * Initial delay in milliseconds between retries (default: 1000).
+     * Uses exponential backoff: 1000ms, 2000ms, 4000ms, etc.
+     */
+    retryDelay?: number | undefined;
+    /** Request timeout in milliseconds */
+    timeout?: number | undefined;
+    /** Custom User-Agent header */
+    userAgent?: string | undefined;
+}
+export type UploadManifestFilesResponse = {
+    tarHash: string;
+    unmatchedFiles: string[];
+};
+export type UploadManifestFilesReturnType = {
+    cause?: undefined | undefined;
+    data: UploadManifestFilesResponse;
+    error?: undefined | undefined;
+    status: 200;
+    success: true;
+};
+export type UploadManifestFilesError = {
+    cause?: string | undefined;
+    data?: undefined | undefined;
+    error: string;
+    status: number;
+    success: false;
+};
+export type BatchPackageFetchResultType = SocketSdkResult<'batchPackageFetch'>;
+export type BatchPackageStreamOptions = {
+    chunkSize?: number | undefined;
+    concurrencyLimit?: number | undefined;
+    queryParams?: QueryParams | undefined;
+};
+export type CreateDependenciesSnapshotOptions = {
+    pathsRelativeTo?: string | undefined;
+    queryParams?: QueryParams | undefined;
+};
+export type StreamOrgFullScanOptions = {
+    output?: boolean | string | undefined;
+};
+export type PostOrgTelemetryPayload = Record;
+export type PostOrgTelemetryResponse = Record;
+/**
+ * Configuration for telemetry collection.
+ * Controls whether telemetry is enabled and how events are collected.
+ */
+export interface TelemetryConfig {
+    telemetry: {
+        enabled: boolean;
+    };
+}
+export type UploadManifestFilesOptions = {
+    pathsRelativeTo?: string | undefined;
+};
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/user-agent.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/user-agent.d.ts
new file mode 100644
index 00000000..0f88adc2
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/user-agent.d.ts
@@ -0,0 +1,13 @@
+/**
+ * @fileoverview User-Agent string generation utilities.
+ * Creates standardized User-Agent headers from package.json data for API requests.
+ */
+/**
+ * Generate a User-Agent string from package.json data.
+ * Creates standardized User-Agent format with optional homepage URL.
+ */
+export declare function createUserAgentFromPkgJson(pkgData: {
+    name: string;
+    version: string;
+    homepage?: string | undefined;
+}): string;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/utils.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/utils.d.ts
new file mode 100644
index 00000000..72423c91
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/dist/utils.d.ts
@@ -0,0 +1,88 @@
+import type { QueryParams } from './types';
+/**
+ * Calculate Jaccard similarity coefficient between two strings based on word sets.
+ * Returns a value between 0 (no overlap) and 1 (identical word sets).
+ *
+ * Formula: |A ∩ B| / |A ∪ B|
+ *
+ * @param str1 - First string to compare
+ * @param str2 - Second string to compare
+ * @returns Similarity coefficient (0-1)
+ *
+ * @example
+ * ```typescript
+ * calculateWordSetSimilarity('hello world', 'world hello') // 1.0 (same words)
+ * calculateWordSetSimilarity('hello world', 'goodbye world') // 0.33 (1/3 overlap)
+ * calculateWordSetSimilarity('hello', 'goodbye') // 0 (no overlap)
+ * ```
+ */
+export declare function calculateWordSetSimilarity(str1: string, str2: string): number;
+/**
+ * Filter error cause based on similarity to error message.
+ * Returns undefined if the cause should be omitted due to redundancy.
+ *
+ * Intelligently handles common error message patterns by:
+ * - Comparing full messages
+ * - Splitting on colons and comparing each part
+ * - Finding the highest similarity among all parts
+ *
+ * Examples:
+ * - "Socket API Request failed (400): Bad Request" vs "Bad Request"
+ * - "Error: Authentication: Token expired" vs "Token expired"
+ *
+ * @param errorMessage - Main error message
+ * @param errorCause - Detailed error cause/reason
+ * @param threshold - Similarity threshold (0-1), defaults to 0.6
+ * @returns The error cause if it should be kept, undefined otherwise
+ *
+ * @example
+ * ```typescript
+ * filterRedundantCause('Invalid token', 'The token is invalid') // undefined
+ * filterRedundantCause('Request failed', 'Rate limit exceeded') // 'Rate limit exceeded'
+ * filterRedundantCause('API Request failed (400): Bad Request', 'Bad Request') // undefined
+ * filterRedundantCause('Error: Auth: Token expired', 'Token expired') // undefined
+ * ```
+ */
+export declare function filterRedundantCause(errorMessage: string, errorCause: string | undefined, threshold?: number): string | undefined;
+/**
+ * Normalize base URL by ensuring it ends with a trailing slash.
+ * Required for proper URL joining with relative paths.
+ * Memoized for performance since base URLs are typically reused.
+ */
+export declare const normalizeBaseUrl: (baseUrl: string) => string;
+/**
+ * Create a promise with externally accessible resolve/reject functions.
+ * Polyfill for Promise.withResolvers() on older Node.js versions.
+ */
+export declare function promiseWithResolvers(): ReturnType>;
+/**
+ * Convert query parameters to URLSearchParams with API-compatible key normalization.
+ * Transforms camelCase keys to snake_case and filters out empty values.
+ */
+export declare function queryToSearchParams(init?: URLSearchParams | string | QueryParams | Iterable<[string, unknown]> | ReadonlyArray<[string, unknown]> | null | undefined): URLSearchParams;
+/**
+ * Convert relative file paths to absolute paths.
+ * Resolves paths relative to specified base directory or current working directory.
+ */
+export declare function resolveAbsPaths(filepaths: string[], pathsRelativeTo?: string | undefined): string[];
+/**
+ * Resolve base path to an absolute directory path.
+ * Converts relative paths to absolute using current working directory as reference.
+ */
+export declare function resolveBasePath(pathsRelativeTo?: string): string;
+/**
+ * Determine if a "reason" string should be omitted due to high similarity with error message.
+ * Uses Jaccard similarity to detect redundant phrasing.
+ *
+ * @param errorMessage - Main error message
+ * @param reason - Detailed reason/cause string
+ * @param threshold - Similarity threshold (0-1), defaults to 0.6
+ * @returns true if reason should be omitted (too similar)
+ *
+ * @example
+ * ```typescript
+ * shouldOmitReason('Invalid token', 'The token is invalid') // true (high overlap)
+ * shouldOmitReason('Request failed', 'Rate limit exceeded') // false (low overlap)
+ * ```
+ */
+export declare function shouldOmitReason(errorMessage: string, reason: string | undefined, threshold?: number): boolean;
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/package.json b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/package.json
new file mode 100644
index 00000000..50e2d957
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/package.json
@@ -0,0 +1,115 @@
+{
+  "name": "@socketsecurity/sdk",
+  "version": "4.0.1",
+  "description": "SDK for the Socket API client",
+  "homepage": "https://github.com/SocketDev/socket-sdk-js",
+  "license": "MIT",
+  "author": {
+    "name": "Socket Inc",
+    "email": "eng@socket.dev",
+    "url": "https://socket.dev"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/SocketDev/socket-sdk-js.git"
+  },
+  "files": [
+    "CHANGELOG.md",
+    "data/*.json",
+    "dist/*.d.ts",
+    "dist/*.js",
+    "types/*.d.ts"
+  ],
+  "main": "./dist/index.js",
+  "types": "./dist/index.d.ts",
+  "exports": {
+    ".": {
+      "types": "./dist/index.d.ts",
+      "default": "./dist/index.js"
+    },
+    "./package.json": "./package.json",
+    "./testing": {
+      "types": "./dist/testing.d.ts",
+      "default": "./dist/testing.js"
+    },
+    "./types/api": {
+      "types": "./types/api.d.ts",
+      "default": "./types/api.d.ts"
+    },
+    "./types/api-helpers": {
+      "types": "./types/api-helpers.d.ts",
+      "default": "./types/api-helpers.d.ts"
+    }
+  },
+  "scripts": {
+    "build": "node scripts/build.mjs",
+    "bump": "node scripts/bump.mjs",
+    "check": "node scripts/check.mjs",
+    "clean": "node scripts/clean.mjs",
+    "cover": "node scripts/cover.mjs",
+    "fix": "node scripts/fix.mjs",
+    "format": "oxfmt --write .",
+    "format:check": "oxfmt --check .",
+    "generate-sdk": "node scripts/generate-sdk.mjs",
+    "lint": "node scripts/lint.mjs",
+    "precommit": "pnpm run check --lint --staged",
+    "prepare": "husky",
+    "ci:validate": "node scripts/ci-validate.mjs",
+    "prepublishOnly": "echo 'ERROR: Use GitHub Actions workflow for publishing' && exit 1",
+    "publish": "node scripts/publish.mjs",
+    "publish:ci": "node scripts/publish.mjs --tag ${DIST_TAG:-latest}",
+    "claude": "node scripts/claude.mjs",
+    "security": "agentshield scan && { command -v zizmor >/dev/null && zizmor .github/ || echo 'zizmor not installed — run pnpm run setup to install'; }",
+    "test": "node scripts/test.mjs",
+    "type": "tsgo --noEmit -p .config/tsconfig.check.json",
+    "update": "node scripts/update.mjs"
+  },
+  "devDependencies": {
+    "@anthropic-ai/claude-code": "2.1.92",
+    "@socketsecurity/lib": "5.18.2",
+    "@babel/generator": "7.28.5",
+    "@babel/parser": "7.26.3",
+    "@babel/traverse": "7.26.4",
+    "@babel/types": "7.26.3",
+    "@dotenvx/dotenvx": "1.54.1",
+    "@oxlint/migrate": "1.52.0",
+    "@sveltejs/acorn-typescript": "1.0.8",
+    "@types/babel__traverse": "7.28.0",
+    "@types/node": "24.9.2",
+    "@typescript/native-preview": "7.0.0-dev.20250926.1",
+    "@vitest/coverage-v8": "4.0.3",
+    "acorn": "8.15.0",
+    "del": "8.0.1",
+    "dev-null-cli": "2.0.0",
+    "ecc-agentshield": "1.4.0",
+    "esbuild": "0.25.11",
+    "fast-glob": "3.3.3",
+    "form-data": "4.0.5",
+    "husky": "9.1.7",
+    "magic-string": "0.30.14",
+    "nock": "14.0.10",
+    "openapi-typescript": "6.7.6",
+    "oxfmt": "0.37.0",
+    "oxlint": "1.52.0",
+    "semver": "7.7.2",
+    "taze": "19.9.2",
+    "type-coverage": "2.29.7",
+    "vitest": "4.0.3"
+  },
+  "typeCoverage": {
+    "atLeast": 99,
+    "cache": true,
+    "ignore-files": "test/*",
+    "ignore-non-null-assertion": true,
+    "ignore-type-assertion": true,
+    "ignoreAsAssertion": true,
+    "ignoreCatch": true,
+    "ignoreEmptyType": true,
+    "strict": true
+  },
+  "engines": {
+    "node": ">=18.20.8",
+    "pnpm": ">=11.0.0-rc.0"
+  },
+  "packageManager": "pnpm@11.0.0-rc.0"
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/types/api-helpers.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/types/api-helpers.d.ts
new file mode 100644
index 00000000..26134aa5
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/types/api-helpers.d.ts
@@ -0,0 +1,69 @@
+/**
+ * @fileoverview Helper types for working with generated OpenAPI types.
+ */
+
+/**
+ * Extract the successful response type from an operation.
+ * Maps to the data property of the success result.
+ */
+export type OpReturnType = T extends {
+  responses: {
+    200?: { content?: { 'application/json': infer U } }
+  }
+}
+  ? U
+  : T extends {
+        responses: {
+          201?: { content?: { 'application/json': infer U } }
+        }
+      }
+    ? U
+    : T extends {
+          responses: {
+            204?: unknown
+          }
+        }
+      ? undefined
+      : unknown
+
+/**
+ * Extract the error response type from an operation.
+ * Maps to the error structure of the error result.
+ */
+export type OpErrorType = T extends {
+  responses: infer R
+}
+  ? R extends Record
+    ? {
+        [K in keyof R as K extends
+          | 400
+          | 401
+          | 403
+          | 404
+          | 409
+          | 422
+          | 429
+          | 500
+          | 502
+          | 503
+          ? K
+          : never]: R[K]
+      }[keyof {
+        [K in keyof R as K extends
+          | 400
+          | 401
+          | 403
+          | 404
+          | 409
+          | 422
+          | 429
+          | 500
+          | 502
+          | 503
+          ? K
+          : never]: R[K]
+      }] extends { content?: { 'application/json': infer E } }
+      ? E
+      : { error?: string }
+    : { error?: string }
+  : { error?: string }
diff --git a/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/types/api.d.ts b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/types/api.d.ts
new file mode 100644
index 00000000..221f70be
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@socketsecurity/sdk/types/api.d.ts
@@ -0,0 +1,19055 @@
+/**
+ * This file was auto-generated by openapi-typescript.
+ * Do not make direct changes to the file.
+ */
+
+export interface paths {
+  '/purl': {
+    /**
+     * Get Packages by PURL
+     * @deprecated
+     * @description **This endpoint is deprecated.** Deprecated since 2026-01-05.
+     *
+     * Batch retrieval of package metadata and alerts by PURL strings. Compatible with CycloneDX reports.
+     *
+     * Package URLs (PURLs) are an ecosystem agnostic way to identify packages.
+     * CycloneDX SBOMs use the purl format to identify components.
+     * This endpoint supports fetching metadata and alerts for multiple packages at once by passing an array of purl strings, or by passing an entire CycloneDX report.
+     *
+     * **Note:** This endpoint has a batch size limit (default: 1024 PURLs per request). Requests exceeding this limit will return a 400 Bad Request error.
+     *
+     * More information on purl and CycloneDX:
+     *
+     * - [`purl` Spec](https://github.com/package-url/purl-spec)
+     * - [CycloneDX Spec](https://cyclonedx.org/specification/overview/#components)
+     *
+     * This endpoint returns the latest available alert data for artifacts in the batch (stale while revalidate).
+     * Actively running analysis will be returned when available on subsequent runs.
+     *
+     * ## Examples:
+     *
+     * ### Looking up an npm package:
+     *
+     * ```json
+     * {
+     *   "components": [
+     *     {
+     *       "purl": "pkg:npm/express@4.19.2"
+     *     }
+     *   ]
+     * }
+     * ```
+     *
+     * ### Looking up an PyPi package:
+     *
+     * ```json
+     * {
+     *   "components": [
+     *     {
+     *       "purl": "pkg:pypi/django@5.0.6"
+     *     }
+     *   ]
+     * }
+     * ```
+     *
+     * ### Looking up a Maven package:
+     *
+     * ```json
+     * {
+     *   "components": [
+     *     {
+     *       "purl": "pkg:maven/log4j/log4j@1.2.17"
+     *     }
+     *   ]
+     * }
+     * ```
+     *
+     * ### Batch lookup
+     *
+     * ```json
+     * {
+     *   "components": [
+     *     {
+     *       "purl": "pkg:npm/express@4.19.2"
+     *     },
+     *     {
+     *       "purl": "pkg:pypi/django@5.0.6"
+     *     },
+     *     {
+     *       "purl": "pkg:maven/log4j/log4j@1.2.17"
+     *     }
+     *   ]
+     * }
+     * ```
+     *
+     * This endpoint consumes 100 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - packages:list
+     */
+    post: operations['batchPackageFetch']
+  }
+  '/dependencies/search': {
+    /**
+     * Search dependencies
+     * @description Search for any dependency that is being used in your organization.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - No Scopes Required, but authentication is required
+     */
+    post: operations['searchDependencies']
+  }
+  '/dependencies/upload': {
+    /**
+     * Create a snapshot of all dependencies from manifest information
+     * @deprecated
+     * @description **This endpoint is deprecated.**
+     *
+     * Upload a set of manifest or lockfiles to get your dependency tree analyzed by Socket.
+     * You can upload multiple lockfiles in the same request, but each filename must be unique.
+     *
+     * The name of the file must be in the supported list.
+     *
+     * For example, these are valid filenames: "requirements.txt", "package.json", "folder/package.json", and "deep/nested/folder/package.json".
+     *
+     * This endpoint consumes 100 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - report:write
+     */
+    post: operations['createDependenciesSnapshot']
+  }
+  '/orgs/{org_slug}/full-scans': {
+    /**
+     * List full scans
+     * @description Returns a paginated list of all full scans in an org, excluding SBOM artifacts.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - full-scans:list
+     */
+    get: operations['getOrgFullScanList']
+    /**
+     * Create full scan
+     * @description Create a full scan from a set of package manifest files. Returns a full scan including all SBOM artifacts.
+     *
+     * To get a list of supported filetypes that can be uploaded in a full-scan, see the [Get supported file types](/reference/getsupportedfiles) endpoint.
+     *
+     * The maximum number of files you can upload at a time is 5000 and each file can be no bigger than 268 MB.
+     *
+     * **Query Parameters:**
+     * - `scan_type` (optional): The type of scan to perform. Defaults to 'socket'. Must be 32 characters or less. Used for categorizing multiple SBOM heads per repository branch.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - full-scans:create
+     */
+    post: operations['CreateOrgFullScan']
+  }
+  '/orgs/{org_slug}/full-scans/{full_scan_id}': {
+    /**
+     * Stream full scan
+     * @description Stream all SBOM artifacts for a full scan.
+     *
+     * This endpoint returns the latest, available alert data for artifacts in the full scan (stale while revalidate).
+     * Actively running analysis will be returned when available on subsequent runs.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - full-scans:list
+     */
+    get: operations['getOrgFullScan']
+    /**
+     * Delete full scan
+     * @description Delete an existing full scan.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - full-scans:delete
+     */
+    delete: operations['deleteOrgFullScan']
+  }
+  '/orgs/{org_slug}/full-scans/{full_scan_id}/metadata': {
+    /**
+     * Get full scan metadata
+     * @description Get metadata for a single full scan
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - full-scans:list
+     */
+    get: operations['getOrgFullScanMetadata']
+  }
+  '/orgs/{org_slug}/full-scans/diff': {
+    /**
+     * Diff Full Scans
+     * @deprecated
+     * @description **This endpoint is deprecated.**
+     *
+     * Get the difference between two existing Full Scans. The results are not persisted.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - full-scans:list
+     */
+    get: operations['GetOrgDiffScan']
+  }
+  '/orgs/{org_slug}/full-scans/diff/gfm': {
+    /**
+     * SCM Comment for Scan Diff
+     * @deprecated
+     * @description **This endpoint is deprecated.**
+     *
+     * Get the dependency overview and dependency alert comments in GitHub flavored markdown between the diff between two existing full scans.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - full-scans:list
+     */
+    get: operations['GetOrgFullScanDiffGfm']
+  }
+  '/orgs/{org_slug}/full-scans/{full_scan_id}/files/tar': {
+    /**
+     * Download full scan files as tarball
+     * @description Download all files associated with a full scan in tar format.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - full-scans:list
+     */
+    get: operations['downloadOrgFullScanFilesAsTar']
+  }
+  '/orgs/{org_slug}/full-scans/archive': {
+    /**
+     * Create full scan from archive
+     * @description Create a full scan by uploading one or more archives. Supported archive formats include **.tar**, **.tar.gz/.tgz**, and **.zip**.
+     *
+     * Each uploaded archive is extracted server-side and any supported manifest files (like package.json, package-lock.json, pnpm-lock.yaml, etc.) are ingested for the scan. If you upload multiple archives in a single request, the manifests from every archive are merged into one full scan. The response includes any files that were ignored.
+     *
+     * The maximum combined number of files extracted from your upload is 5000 and each extracted file can be no bigger than 268 MB.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - full-scans:create
+     */
+    post: operations['CreateOrgFullScanArchive']
+  }
+  '/orgs/{org_slug}/full-scans/{full_scan_id}/rescan': {
+    /**
+     * Rescan full scan
+     * @description Create a new full scan by rescanning an existing scan. A "shallow" rescan reapplies the latest policies to the previously cached dependency resolution results. A "deep" rescan reruns dependency resolution and applies the latest policies to the results.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - full-scans:create
+     */
+    post: operations['rescanOrgFullScan']
+  }
+  '/orgs/{org_slug}/full-scans/{full_scan_id}/format/csv': {
+    /**
+     * Export CSV of alerts for full scan
+     * @description Export a CSV file containing all alerts from a full scan.
+     *
+     * The CSV includes details about each alert and the affected packages.
+     * You can optionally filter using the request body "filters" array. Supported filter IDs include:
+     * - alert.action (error|warn|monitor|ignore)
+     * - alert.type
+     * - alert.category
+     * - alert.severity (low|medium|middle|high|critical or 0-3)
+     * - artifact.type (purl type, e.g. npm, pypi)
+     * - dependency.type (direct|transitive)
+     * - dependency.scope (dev|normal)
+     * - dependency.usage (used|unused)
+     * - manifest.file
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - full-scans:list
+     */
+    post: operations['getOrgFullScanCsv']
+  }
+  '/orgs/{org_slug}/full-scans/{full_scan_id}/format/pdf': {
+    /**
+     * Generate PDF report for full scan
+     * @description Generate a PDF report for all alerts in a full scan.
+     *
+     * This endpoint streams a PDF document containing all alerts found in the full scan,
+     * with optional filtering and grouping options.
+     *
+     * Supported request body filter IDs include:
+     * - alert.action (error|warn|monitor|ignore)
+     * - alert.type
+     * - alert.category
+     * - alert.severity (low|medium|middle|high|critical or 0-3)
+     * - artifact.type (purl type, e.g. npm, pypi)
+     * - dependency.type (direct|transitive)
+     * - dependency.scope (dev|normal)
+     * - dependency.usage (used|unused)
+     * - manifest.file
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - full-scans:list
+     */
+    post: operations['getOrgFullScanPdf']
+  }
+  '/orgs/{org_slug}/export/cdx/{id}': {
+    /**
+     * Export CycloneDX SBOM (Beta)
+     * @description Export a Socket SBOM as a CycloneDX SBOM
+     *
+     * Supported ecosystems:
+     *
+     * - crates
+     * - go
+     * - maven
+     * - npm
+     * - nuget
+     * - pypi
+     * - rubygems
+     * - spdx
+     * - cdx
+     *
+     * Unsupported ecosystems are filtered from the export.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - report:read
+     */
+    get: operations['exportCDX']
+  }
+  '/orgs/{org_slug}/export/openvex/{id}': {
+    /**
+     * Export OpenVEX Document (Beta)
+     * @description Export vulnerability exploitability data as an OpenVEX v0.2.0 document.
+     *
+     * OpenVEX (Vulnerability Exploitability eXchange) documents communicate the
+     * exploitability status of vulnerabilities in software products. This export
+     * includes:
+     *
+     * - **Patch data**: Vulnerabilities fixed by applied Socket patches are marked as "fixed"
+     * - **Reachability analysis**: Code reachability determines if vulnerable code is exploitable:
+     * - Unreachable code → "not_affected" with justification
+     * - Reachable code → "affected"
+     * - Unknown/pending → "under_investigation"
+     *
+     * Each statement in the document represents a single artifact-vulnerability pair
+     * for granular reachability information.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - report:read
+     */
+    get: operations['exportOpenVEX']
+  }
+  '/orgs/{org_slug}/export/spdx/{id}': {
+    /**
+     * Export SPDX SBOM (Beta)
+     * @description Export a Socket SBOM as a SPDX SBOM
+     *
+     * Supported ecosystems:
+     *
+     * - crates
+     * - go
+     * - maven
+     * - npm
+     * - nuget
+     * - pypi
+     * - rubygems
+     * - spdx
+     * - cdx
+     *
+     * Unsupported ecosystems are filtered from the export.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - report:read
+     */
+    get: operations['exportSPDX']
+  }
+  '/orgs/{org_slug}/diff-scans': {
+    /**
+     * List diff scans
+     * @description Returns a paginated list of all diff scans in an organization.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - diff-scans:list
+     */
+    get: operations['listOrgDiffScans']
+  }
+  '/orgs/{org_slug}/diff-scans/{diff_scan_id}': {
+    /**
+     * Get diff scan
+     * @description Get the difference between two full scans from an existing diff scan resource.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - diff-scans:list
+     */
+    get: operations['getDiffScanById']
+    /**
+     * Delete diff scan
+     * @description Delete an existing diff scan.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - diff-scans:delete
+     */
+    delete: operations['deleteOrgDiffScan']
+  }
+  '/orgs/{org_slug}/diff-scans/{diff_scan_id}/gfm': {
+    /**
+     * SCM Comment for Diff Scan
+     * @description Get the dependency overview and dependency alert comments in GitHub flavored markdown for an existing diff scan.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - diff-scans:list
+     */
+    get: operations['GetDiffScanGfm']
+  }
+  '/orgs/{org_slug}/diff-scans/from-repo/{repo_slug}': {
+    /**
+     * Create diff scan from repository HEAD full-scan
+     * @description Create a diff scan between the repository's current HEAD full scan and a new full scan from uploaded manifest files.
+     * Returns metadata about the diff scan. Once the diff scan is created, fetch the diff scan from
+     * the [api_url](/reference/getDiffScanById) URL to get the contents of the diff.
+     *
+     * The maximum number of files you can upload at a time is 5000 and each file can be no bigger than 268 MB.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     *       - repo:list
+     * - diff-scans:create
+     * - full-scans:create
+     */
+    post: operations['createOrgRepoDiff']
+  }
+  '/orgs/{org_slug}/diff-scans/from-ids': {
+    /**
+     * Create diff scan from full scan IDs
+     * @description Create a diff scan from two existing full scan IDs. The full scans must be in the same repository.
+     * Returns metadata about the diff scan. Once the diff scan is created, fetch the diff scan from
+     * the [api_url](/reference/getDiffScanById) URL to get the contents of the diff.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     *       - diff-scans:create
+     * - full-scans:list
+     */
+    post: operations['createOrgDiffScanFromIds']
+  }
+  '/orgs/{org_slug}/triage/alerts': {
+    /**
+     * List Org Alert Triage
+     * @description List triage actions for an organization. Results are paginated and can be sorted by created_at or updated_at.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - triage:alerts-list
+     */
+    get: operations['getOrgTriage']
+    /**
+     * Create/Update Org Alert Triage
+     * @description Create or update triage actions on organization alerts. Accepts a batch of triage entries. Omit `uuid` to create a new entry; provide an existing `uuid` to update it. Use `?force=true` for broad triages that lack a specific `alertKey` or granular package information.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - triage:alerts-update
+     */
+    post: operations['updateOrgAlertTriage']
+  }
+  '/orgs/{org_slug}/triage/alerts/{uuid}': {
+    /**
+     * Delete Org Alert Triage
+     * @description Delete a specific triage rule by UUID.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - triage:alerts-update
+     */
+    delete: operations['deleteOrgAlertTriage']
+  }
+  '/orgs/{org_slug}/repos': {
+    /**
+     * List repositories
+     * @description Lists repositories for the specified organization.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - repo:list
+     */
+    get: operations['getOrgRepoList']
+    /**
+     * Create repository
+     * @description Create a repository.
+     *
+     * Repos collect Full scans and Diff scans and are typically associated with a git repo.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - repo:create
+     */
+    post: operations['createOrgRepo']
+  }
+  '/orgs/{org_slug}/repos/{repo_slug}': {
+    /**
+     * Get repository
+     * @description Retrieve a repository associated with an organization.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - repo:list
+     */
+    get: operations['getOrgRepo']
+    /**
+     * Update repository
+     * @description Update details of an existing repository.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - repo:update
+     */
+    post: operations['updateOrgRepo']
+    /**
+     * Delete repository
+     * @description Delete a single repository and all of its associated Full scans and Diff scans.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - repo:delete
+     */
+    delete: operations['deleteOrgRepo']
+  }
+  '/orgs/{org_slug}/repos/labels/{label_id}/associate': {
+    /**
+     * Associate repository label (beta)
+     * @description Associate a repository label with a repository.
+     *
+     * Labels can be used to group and organize repositories and to apply security/license policies.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - repo-label:update
+     */
+    post: operations['associateOrgRepoLabel']
+  }
+  '/orgs/{org_slug}/repos/labels': {
+    /**
+     * List repository labels (beta)
+     * @description Lists repository labels for the specified organization.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - repo-label:list
+     */
+    get: operations['getOrgRepoLabelList']
+    /**
+     * Create repository label (beta)
+     * @description Create a repository label.
+     *
+     * Labels can be used to group and organize repositories and to apply security/license policies.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - repo-label:create
+     */
+    post: operations['createOrgRepoLabel']
+  }
+  '/orgs/{org_slug}/repos/labels/{label_id}': {
+    /**
+     * Get repository label (beta)
+     * @description Retrieve a repository label associated with an organization and label ID.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - repo-label:list
+     */
+    get: operations['getOrgRepoLabel']
+    /**
+     * Update repository label (beta)
+     * @description Update a repository label name.
+     *
+     * Labels can be used to group and organize repositories and to apply security/license policies.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - repo-label:update
+     */
+    put: operations['updateOrgRepoLabel']
+    /**
+     * Delete repository label (beta)
+     * @description Delete a repository label and all of its associations (repositories, security policy, license policy, etc.).
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - repo-label:delete
+     */
+    delete: operations['deleteOrgRepoLabel']
+  }
+  '/orgs/{org_slug}/repos/labels/{label_id}/label-setting': {
+    /**
+     * Get repository label setting (beta)
+     * @description Retrieve the setting (e.g. security/license policy) for a repository label.
+     *
+     *
+     * Note that repository label settings currently only support `issueRules`
+     * and `issueRulesPolicyDefault`. A policy is considered "active" for
+     * a given repository label if the `issueRulesPolicyDefault` is set,
+     * and inactive when not set. `issueRules` can be used to further
+     * refine the alert triage strategy.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - repo-label:list
+     */
+    get: operations['getOrgRepoLabelSetting']
+    /**
+     * Update repository label setting (beta)
+     * @description Update the setting (e.g. security/license policy) for a repository label.
+     *
+     *
+     * Note that repository label settings currently only support `issueRules`
+     * and `issueRulesPolicyDefault`. A policy is considered "active" for
+     * a given repository label if the `issueRulesPolicyDefault` is set,
+     * and inactive when not set. `issueRules` can be used to further
+     * refine the alert triage strategy.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - repo-label:update
+     */
+    put: operations['updateOrgRepoLabelSetting']
+    /**
+     * Delete repository label setting (beta)
+     * @description Delete the setting (e.g. security/license policy) for a repository label.
+     *
+     *
+     * Note that repository label settings currently only support `issueRules`
+     * and `issueRulesPolicyDefault`. A policy is considered "active" for
+     * a given repository label if the `issueRulesPolicyDefault` is set,
+     * and inactive when not set. `issueRules` can be used to further
+     * refine the alert triage strategy.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - repo-label:update
+     */
+    delete: operations['deleteOrgRepoLabelSetting']
+  }
+  '/orgs/{org_slug}/repos/labels/{label_id}/disassociate': {
+    /**
+     * Disassociate repository label (beta)
+     * @description Disassociate a repository label from a repository.
+     *
+     * Labels can be used to group and organize repositories and to apply security/license policies.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - repo-label:update
+     */
+    post: operations['disassociateOrgRepoLabel']
+  }
+  '/orgs/{org_slug}/settings/integrations/{integration_id}/events': {
+    /**
+     * Get integration events
+     * @description This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - integration:list
+     */
+    get: operations['getIntegrationEvents']
+  }
+  '/orgs/{org_slug}/settings/security-policy': {
+    /**
+     * Get Organization Security Policy
+     * @description Retrieve the security policy of an organization.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - security-policy:read
+     */
+    get: operations['getOrgSecurityPolicy']
+    /**
+     * Update Security Policy
+     * @description Update the security policy of an organization.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - security-policy:update
+     */
+    post: operations['updateOrgSecurityPolicy']
+  }
+  '/orgs/{org_slug}/settings/license-policy': {
+    /**
+     * Get Organization License Policy
+     * @deprecated
+     * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference/viewlicensepolicy) instead.
+     *
+     * Retrieve the license policy of an organization.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - license-policy:read
+     */
+    get: operations['getOrgLicensePolicy']
+    /**
+     * Update License Policy
+     * @description Set the organization's license policy
+     *
+     *       ## License policy schema
+     *
+     * ```json
+     * {
+     *   allow?: Array
+     *   warn?: Array
+     *   options?: Array
+     * }
+     * ```
+     *
+     * Elements of the `allow` and `warn` arrays strings representing items which should be allowed, or which should trigger a warning; license data found in package which not present in either array will produce a license violation (effectively a "hard" error). For example, to allow Apache-2.0 and MIT to the allow list, simply add the strings "Apache-2.0" and "MIT" to the `allow` array. Strings appearing in these arrays are generally "what you see is what you get", with two important exceptions: strings which are recognized as license classes and strings which are recognized as PURLs are handled differently to allow for more flexible license policy creation.
+     *
+     * ## License Classes
+     *
+     * Strings which are license classes will expand to a list of licenses known to be in that particular license class. Recognized license classes are:
+     *   'permissive',
+     *   'permissive (model)',
+     *   'permissive (gold)',
+     *   'permissive (silver)',
+     *   'permissive (bronze)',
+     *   'permissive (lead)',
+     *   'copyleft',
+     *   'maximal copyleft',
+     *   'network copyleft',
+     *   'strong copyleft',
+     *   'weak copyleft',
+     *   'contributor license agreement',
+     *   'public domain',
+     *   'proprietary free',
+     *   'source available',
+     *   'proprietary',
+     *   'commercial',
+     *   'patent'
+     *
+     * Users can learn more about [copyleft tiers](https://blueoakcouncil.org/copyleft) and [permissive tiers](https://blueoakcouncil.org/list) by reading the linked resources.
+     *
+     *
+     * ## PURLs
+     *
+     * Users may also modify their license policy's allow and warn lists by using [package URLs](https://github.com/package-url/purl-spec) (aka PURLs), which support glob patterns to allow a range of versions, files and directories, etc.
+     *
+     * purl qualifiers which support globs are `filename`, `version_glob`, `artifact_id` and `license_provenance` (primarily used for allowing data from registry metadata).
+     *
+     * ### Examples:
+     * Allow all license data found in a specific version of a package 4.14.1: `pkg:npm/lodash@4.14.1`
+     * Allow all license data found in a version range of a package: `pkg:npm/lodash?version_glob=15.*`
+     * Allow all license data in the test directory of a given package for certain version ranges: `pkg:npm/lodash@15.*.*?file_name=lodash/test/*`
+     * Allow all license data taken from the package registry for a package and version range: `pkg:npm/lodash?version_glob=*&license_provenance=registry_metadata`
+     *
+     * ## Available options
+     *
+     * `toplevelOnly`: only apply the license policy to "top level" license data in a package, which includes registry metadata, LICENSE files, and manifest files which are closest to the root of the package.
+     *
+     * `applyToUnidentified`: Apply license policy to found but unidentified license data. If enabled, the license policy will be applied to license data which could not be affirmatively identified as a known license (this will effectively merge the license policy violation and unidentified license alerts). If disabled, license policy alerts will only be shown for license data which is positively identified as something not allowed or set to warn by the license policy.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - license-policy:update
+     */
+    post: operations['updateOrgLicensePolicy']
+  }
+  '/orgs/{org_slug}/settings/license-policy/view': {
+    /**
+     * Get License Policy (Beta)
+     * @description Returns an organization's license policy including allow, warn, monitor, and deny categories.
+     * The deny category contains all licenses that are not explicitly categorized as allow, warn, or monitor.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - license-policy:read
+     */
+    get: operations['viewLicensePolicy']
+  }
+  '/orgs/{org_slug}/settings/socket-basics': {
+    /**
+     * Get Socket Basics configuration, including toggles for the various tools it supports.
+     * @description Socket Basics is a CI/CD security scanning suite that runs on your source code, designed to complement Socket SCA and provide full coverage.
+     *
+     * - **SAST** - Find issues and risks with your code via static analysis using best in class Open Source tools
+     * - **Secret Scanning** - Detected potentially leaked secrets and credentials within your code
+     * - **Container Security** - Docker image and Dockerfile vulnerability scanning
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - socket-basics:read
+     */
+    get: operations['getSocketBasicsConfig']
+  }
+  '/orgs/{org_slug}/historical/alerts': {
+    /**
+     * List historical alerts (Beta)
+     * @description List historical alerts.
+     *
+     * This endpoint consumes 10 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - historical:alerts-list
+     */
+    get: operations['historicalAlertsList']
+  }
+  '/orgs/{org_slug}/historical/alerts/trend': {
+    /**
+     * Trend of historical alerts (Beta)
+     * @description Trend analytics of historical alerts.
+     *
+     * This endpoint consumes 10 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - historical:alerts-trend
+     */
+    get: operations['historicalAlertsTrend']
+  }
+  '/orgs/{org_slug}/historical/dependencies/trend': {
+    /**
+     * Trend of historical dependencies (Beta)
+     * @description Trend analytics of historical dependencies.
+     *
+     * This endpoint consumes 10 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - historical:dependencies-trend
+     */
+    get: operations['historicalDependenciesTrend']
+  }
+  '/orgs/{org_slug}/historical/snapshots': {
+    /**
+     * List details of periodic historical data snapshots (Beta)
+     * @description This API endpoint is used to list the details of historical snapshots.
+     * Snapshots of organization data are taken periodically, and each historical snapshot record contains high-level overview metrics about the data that was collected.
+     * Other [Historical Data Endpoints](/reference/historical-data-endpoints) can be used to fetch the raw data associated with each snapshot.
+     *
+     * Historical snapshots contain details and raw data for the following resources:
+     *
+     * - Repositories
+     * - Alerts
+     * - Dependencies
+     * - Artifacts
+     * - Users
+     * - Settings
+     *
+     * Daily snapshot data is bucketed to the nearest day which is described in more detail at: [Historical Data Endpoints](/reference/historical-data-endpoints)
+     *
+     * This endpoint consumes 10 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - historical:snapshots-list
+     */
+    get: operations['historicalSnapshotsList']
+    /**
+     * Start historical data snapshot job (Beta)
+     * @description This API endpoint is used to start a historical snapshot job.
+     * While snapshots are typically taken multiple times a day for paid plans and once a day for free plans, this endpoint can be used to start an "on demand" snapshot job to ensure the latest data is collected and stored for historical purposes.
+     *
+     * An historical snapshot will contain details and raw data for the following resources:
+     *
+     * - Repositories
+     * - Alerts
+     * - Dependencies
+     * - Artifacts
+     * - Users
+     * - Settings
+     *
+     * Historical snapshot data is bucketed to the nearest day which is described in more detail at: [Historical Data Endpoints](/reference/historical-data-endpoints)
+     *
+     * This endpoint consumes 10 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - historical:snapshots-start
+     */
+    post: operations['historicalSnapshotsStart']
+  }
+  '/orgs/{org_slug}/audit-log': {
+    /**
+     * Get Audit Log Events
+     * @description Paginated list of audit log events.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - audit-log:list
+     */
+    get: operations['getAuditLogEvents']
+  }
+  '/orgs/{org_slug}/api-tokens': {
+    /**
+     * List API Tokens
+     * @description List all API Tokens.
+     *
+     * This endpoint consumes 10 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - api-tokens:list
+     */
+    get: operations['getAPITokens']
+    /**
+     * Create API Token
+     * @description Create an API Token. The API Token created must use a subset of permissions the API token creating them.
+     *
+     * This endpoint consumes 10 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - api-tokens:create
+     */
+    post: operations['postAPIToken']
+  }
+  '/orgs/{org_slug}/api-tokens/update': {
+    /**
+     * Update API Token
+     * @description Update an API Token. The API Token created must use a subset of permissions the API token creating them.
+     *
+     * This endpoint consumes 10 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - api-tokens:create
+     */
+    post: operations['postAPITokenUpdate']
+  }
+  '/orgs/{org_slug}/api-tokens/rotate': {
+    /**
+     * Rotate API Token
+     * @description Rotate an API Token
+     *
+     * This endpoint consumes 10 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - api-tokens:rotate
+     */
+    post: operations['postAPITokensRotate']
+  }
+  '/orgs/{org_slug}/api-tokens/revoke': {
+    /**
+     * Revoke API Token
+     * @description Revoke an API Token
+     *
+     * This endpoint consumes 10 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - api-tokens:revoke
+     */
+    post: operations['postAPITokensRevoke']
+  }
+  '/orgs/{org_slug}/supported-files': {
+    /**
+     * Get supported file types
+     * @description Get a list of supported files for full scan generation.
+     * Files are categorized first by environment (e.g. NPM or PyPI), then by name.
+     *
+     * Files whose names match the patterns returned by this endpoint can be uploaded for report generation.
+     * Examples of supported filenames include `package.json`, `package-lock.json`, and `yarn.lock`.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - No Scopes Required, but authentication is required
+     */
+    get: operations['getSupportedFiles']
+  }
+  '/threat-feed': {
+    /**
+     * Get Threat Feed Items (Deprecated)
+     * @deprecated
+     * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference/getorgthreatfeeditems) instead.
+     *
+     * Paginated list of threat feed items.
+     *
+     * This endpoint requires an Enterprise Plan with Threat Feed add-on. [Contact](https://socket.dev/demo?utm_source=api-docs&utm_medium=referral&utm_campaign=tracking) our sales team for more details.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - threat-feed:list
+     */
+    get: operations['getThreatFeedItems']
+  }
+  '/orgs/{org_slug}/threat-feed': {
+    /**
+     * Get Threat Feed Items (Beta)
+     * @description Paginated list of threats, sorted by updated_at by default. Set updated_after to the unix timestamp of your last sync while sorting by updated_at to synchronize all new or updated threats in the feed.
+     *
+     * This endpoint requires an Enterprise Plan with Threat Feed add-on. [Contact](https://socket.dev/demo?utm_source=api-docs&utm_medium=referral&utm_campaign=tracking) our sales team for more details.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - threat-feed:list
+     */
+    get: operations['getOrgThreatFeedItems']
+  }
+  '/orgs/{org_slug}/purl': {
+    /**
+     * Get Packages by PURL (Org Scoped)
+     * @description Batch retrieval of package metadata and alerts by PURL strings for a specific organization. Compatible with CycloneDX reports.
+     *
+     * Package URLs (PURLs) are an ecosystem agnostic way to identify packages.
+     * CycloneDX SBOMs use the purl format to identify components.
+     * This endpoint supports fetching metadata and alerts for multiple packages at once by passing an array of purl strings, or by passing an entire CycloneDX report.
+     *
+     * **Note:** This endpoint has a batch size limit (default: 1024 PURLs per request). Requests exceeding this limit will return a 400 Bad Request error.
+     *
+     * More information on purl and CycloneDX:
+     *
+     * - [`purl` Spec](https://github.com/package-url/purl-spec)
+     * - [CycloneDX Spec](https://cyclonedx.org/specification/overview/#components)
+     *
+     * This endpoint returns the latest available alert data for artifacts in the batch (stale while revalidate).
+     * Actively running analysis will be returned when available on subsequent runs.
+     *
+     * ## Query Parameters
+     *
+     * This endpoint supports all query parameters from `POST /v0/purl` including: `alerts`, `actions`, `compact`, `fixable`, `licenseattrib`, `licensedetails`, `purlErrors`, `cachedResultsOnly`, and `summary`.
+     *
+     * Additionally, you may provide a `labels` query parameter to apply a repository label's security policies. Pass the label slug as the value (e.g., `?labels=production`). Only one label is currently supported.
+     *
+     * ## Examples:
+     *
+     * ### Looking up an npm package:
+     *
+     * ```json
+     * {
+     *   "components": [
+     *     {
+     *       "purl": "pkg:npm/express@4.19.2"
+     *     }
+     *   ]
+     * }
+     * ```
+     *
+     * ### Looking up a PyPi package:
+     *
+     * ```json
+     * {
+     *   "components": [
+     *     {
+     *       "purl": "pkg:pypi/django@5.0.6"
+     *     }
+     *   ]
+     * }
+     * ```
+     *
+     * ### Looking up a Maven package:
+     *
+     * ```json
+     * {
+     *   "components": [
+     *     {
+     *       "purl": "pkg:maven/log4j/log4j@1.2.17"
+     *     }
+     *   ]
+     * }
+     * ```
+     *
+     * ### Batch lookup
+     *
+     * ```json
+     * {
+     *   "components": [
+     *     {
+     *       "purl": "pkg:npm/express@4.19.2"
+     *     },
+     *     {
+     *       "purl": "pkg:pypi/django@5.0.6"
+     *     },
+     *     {
+     *       "purl": "pkg:maven/log4j/log4j@1.2.17"
+     *     }
+     *   ]
+     * }
+     * ```
+     *
+     * ### With label and options (query parameters):
+     *
+     * ```
+     * POST /v0/orgs/{org_slug}/purl?labels=production&alerts=true&compact=true
+     * {
+     *   "components": [
+     *     {
+     *       "purl": "pkg:npm/express@4.19.2"
+     *     }
+     *   ]
+     * }
+     * ```
+     *
+     * This endpoint consumes 100 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - packages:list
+     */
+    post: operations['batchPackageFetchByOrg']
+  }
+  '/orgs/{org_slug}/fixes': {
+    /**
+     * Fetch fixes for vulnerabilities in a repository or scan
+     * @description Fetches available fixes for vulnerabilities in a repository or scan.
+     * Requires either repo_slug or full_scan_id as well as vulnerability_ids to be provided.
+     * vulnerability_ids can be a comma-separated list of GHSA or CVE IDs, or "*" for all vulnerabilities.
+     *
+     * ## Response Structure
+     *
+     * The response contains a `fixDetails` object where each key is a vulnerability ID (GHSA or CVE) and the value is a discriminated union based on the `type` field.
+     *
+     * ### Common Fields
+     *
+     * All response variants include:
+     * - `type`: Discriminator field (one of: "fixFound", "partialFixFound", "noFixAvailable", "fixNotApplicable", "errorComputingFix")
+     * - `value`: Object containing the variant-specific data
+     *
+     * The `value` object always contains:
+     * - `ghsa`: string | null - The GHSA ID
+     * - `cve`: string | null - The CVE ID (if available)
+     * - `advisoryDetails`: object | null - Advisory details (only if include_details=true)
+     *
+     * ### Response Variants
+     *
+     * **fixFound**: A complete fix is available for all vulnerable packages
+     * - `value.fixDetails.fixes`: Array of fix objects, each containing:
+     *   - `purl`: Package URL to upgrade
+     *   - `fixedVersion`: Version to upgrade to
+     *   - `manifestFiles`: Array of manifest files containing the package
+     *   - `updateType`: "patch" | "minor" | "major" | "unknown"
+     * - `value.fixDetails.responsibleDirectDependencies`: (optional) Map of direct dependencies responsible for the vulnerability
+     *
+     * **partialFixFound**: Fixes available for some but not all vulnerable packages
+     * - Same as fixFound, plus:
+     * - `value.fixDetails.unfixablePurls`: Array of packages that cannot be fixed, each containing:
+     *   - `purl`: Package URL
+     *   - `manifestFiles`: Array of manifest files
+     *
+     * **noFixAvailable**: No fix exists for this vulnerability (no patched version published)
+     *
+     * **fixNotApplicable**: A fix exists but cannot be applied due to version constraints
+     * - `value.vulnerableArtifacts`: Array of vulnerable packages with their manifest files
+     *
+     * **errorComputingFix**: An error occurred while computing fixes
+     * - `value.message`: Error description
+     *
+     * ### Advisory Details (when include_details=true)
+     *
+     * - `title`: string | null
+     * - `description`: string | null
+     * - `cwes`: string[] - CWE identifiers
+     * - `severity`: "LOW" | "MODERATE" | "HIGH" | "CRITICAL"
+     * - `cvssVector`: string | null
+     * - `publishedAt`: string (ISO date)
+     * - `kev`: boolean - Whether it's a Known Exploited Vulnerability
+     * - `epss`: number | null - Exploit Prediction Scoring System score
+     * - `affectedPurls`: Array of affected packages with version ranges
+     *
+     * This endpoint consumes 10 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - fixes:list
+     */
+    get: operations['fetch-fixes']
+  }
+  '/orgs/{org_slug}/telemetry/config': {
+    /**
+     * Get Organization Telemetry Config
+     * @description Retrieve the telemetry config of an organization.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     */
+    get: operations['getOrgTelemetryConfig']
+    /**
+     * Update Telemetry Config
+     * @description Update the telemetry config of an organization.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - telemetry-policy:update
+     */
+    put: operations['updateOrgTelemetryConfig']
+  }
+  '/orgs/{org_slug}/webhooks': {
+    /**
+     * List all webhooks
+     * @description List all webhooks in the specified organization.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - webhooks:list
+     */
+    get: operations['getOrgWebhooksList']
+    /**
+     * Create a webhook
+     * @description Create a new webhook. Returns the created webhook details.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - webhooks:create
+     */
+    post: operations['createOrgWebhook']
+  }
+  '/orgs/{org_slug}/webhooks/{webhook_id}': {
+    /**
+     * Get webhook
+     * @description Get a webhook for the specified organization.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - webhooks:list
+     */
+    get: operations['getOrgWebhook']
+    /**
+     * Update webhook
+     * @description Update details of an existing webhook.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - webhooks:update
+     */
+    put: operations['updateOrgWebhook']
+    /**
+     * Delete webhook
+     * @description Delete a webhook. This will stop all future webhook deliveries to the webhook URL.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - webhooks:delete
+     */
+    delete: operations['deleteOrgWebhook']
+  }
+  '/orgs/{org_slug}/alerts': {
+    /**
+     * List latest alerts (Beta)
+     * @description List latest alerts.
+     *
+     * This endpoint consumes 10 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - alerts:list
+     */
+    get: operations['alertsList']
+  }
+  '/orgs/{org_slug}/alert-full-scan-search': {
+    /**
+     * List full scans associated with alert (Beta)
+     * @description List full scans associated with alert.
+     *
+     * This endpoint consumes 10 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - alerts:list
+     */
+    get: operations['alertFullScans']
+  }
+  '/license-policy': {
+    /**
+     * License Policy (Beta)
+     * @description Compare the license data found for a list of packages (given as PURL strings) with the contents of a configurable license policy,
+     *     returning information about license data which does not comply with the license allow list.
+     *
+     *     ## Example request body:
+     *
+     *     ```json
+     *     {
+     *       "components": [
+     *         {
+     *           "purl": "pkg:npm/lodash@4.17.21"
+     *         },
+     *         {
+     *           "purl": "pkg:npm/lodash@4.14.1"
+     *         }
+     *       ],
+     *       "allow": [
+     *         "permissive",
+     *         "pkg:npm/lodash?file_name=foo/test/*&version_glob=4.17.*"
+     *       ],
+     *       "warn": [
+     *         "copyleft",
+     *         "pkg:npm/lodash?file_name=foo/prod/*&version_glob=4.14.*"
+     *       ],
+     *       "options": ["toplevelOnly"]
+     *     }
+     *     ```
+     *
+     *
+     *     ## Return value
+     *
+     *     For each requested PURL, an array is returned. Each array contains a list of license policy violations
+     *     detected for the requested PURL.
+     *
+     *     Violations are accompanied by a string identifying the offending license data as `spdxAtomOrExtraData`,
+     *     a message describing why the license data is believed to be incompatible with the license policy, and a list
+     *     of locations (by filepath or other provenance information) where the offending license data may be found.
+     *
+     *     ```json
+     *     Array<
+     *       Array<{
+     *         filepathOrProvenance: Array,
+     *         level: "warning" | "violation",
+     *         purl: string,
+     *         spdxAtomOrExtraData: string,
+     *         violationExplanation: string
+     *       }>
+     *     >
+     *     ```
+     *
+     *     ## License policy schema
+     *
+     * ```json
+     * {
+     *   allow?: Array
+     *   warn?: Array
+     *   options?: Array
+     * }
+     * ```
+     *
+     * Elements of the `allow` and `warn` arrays strings representing items which should be allowed, or which should trigger a warning; license data found in package which not present in either array will produce a license violation (effectively a "hard" error). For example, to allow Apache-2.0 and MIT to the allow list, simply add the strings "Apache-2.0" and "MIT" to the `allow` array. Strings appearing in these arrays are generally "what you see is what you get", with two important exceptions: strings which are recognized as license classes and strings which are recognized as PURLs are handled differently to allow for more flexible license policy creation.
+     *
+     * ## License Classes
+     *
+     * Strings which are license classes will expand to a list of licenses known to be in that particular license class. Recognized license classes are:
+     *   'permissive',
+     *   'permissive (model)',
+     *   'permissive (gold)',
+     *   'permissive (silver)',
+     *   'permissive (bronze)',
+     *   'permissive (lead)',
+     *   'copyleft',
+     *   'maximal copyleft',
+     *   'network copyleft',
+     *   'strong copyleft',
+     *   'weak copyleft',
+     *   'contributor license agreement',
+     *   'public domain',
+     *   'proprietary free',
+     *   'source available',
+     *   'proprietary',
+     *   'commercial',
+     *   'patent'
+     *
+     * Users can learn more about [copyleft tiers](https://blueoakcouncil.org/copyleft) and [permissive tiers](https://blueoakcouncil.org/list) by reading the linked resources.
+     *
+     *
+     * ## PURLs
+     *
+     * Users may also modify their license policy's allow and warn lists by using [package URLs](https://github.com/package-url/purl-spec) (aka PURLs), which support glob patterns to allow a range of versions, files and directories, etc.
+     *
+     * purl qualifiers which support globs are `filename`, `version_glob`, `artifact_id` and `license_provenance` (primarily used for allowing data from registry metadata).
+     *
+     * ### Examples:
+     * Allow all license data found in a specific version of a package 4.14.1: `pkg:npm/lodash@4.14.1`
+     * Allow all license data found in a version range of a package: `pkg:npm/lodash?version_glob=15.*`
+     * Allow all license data in the test directory of a given package for certain version ranges: `pkg:npm/lodash@15.*.*?file_name=lodash/test/*`
+     * Allow all license data taken from the package registry for a package and version range: `pkg:npm/lodash?version_glob=*&license_provenance=registry_metadata`
+     *
+     * ## Available options
+     *
+     * `toplevelOnly`: only apply the license policy to "top level" license data in a package, which includes registry metadata, LICENSE files, and manifest files which are closest to the root of the package.
+     *
+     * `applyToUnidentified`: Apply license policy to found but unidentified license data. If enabled, the license policy will be applied to license data which could not be affirmatively identified as a known license (this will effectively merge the license policy violation and unidentified license alerts). If disabled, license policy alerts will only be shown for license data which is positively identified as something not allowed or set to warn by the license policy.
+     *
+     * This endpoint consumes 100 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     *       - packages:list
+     * - license-policy:read
+     */
+    post: operations['licensePolicy']
+  }
+  '/saturate-license-policy': {
+    /**
+     * Saturate License Policy (Legacy)
+     * @deprecated
+     * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference/updateorglicensepolicy) instead.
+     *
+     * Get the "saturated" version of a license policy's allow list, filling in the entire set of allowed
+     * license data. For example, the saturated form of a license allow list which only specifies that
+     * licenses in the tier "maximal copyleft" are allowed is shown below (note the expanded `allowedStrings` property):
+     *
+     * ```json
+     * {
+     *   "allowedApprovalSources": [],
+     *   "allowedFamilies": [],
+     *   "allowedTiers": [
+     *     "maximal copyleft"
+     *   ],
+     *   "allowedStrings": [
+     *     "Parity-6.0.0",
+     *     "QPL-1.0-INRIA-2004",
+     *     "QPL-1.0",
+     *     "RPL-1.1",
+     *     "RPL-1.5"
+     *   ],
+     *   "allowedPURLs": [],
+     *   "focusAlertsHere": false
+     * }
+     * ```
+     *
+     * This may be helpful for users who want to compose more complex sets of allowed license data via
+     * the "allowedStrings" property, or for users who want to know more about the contents of a particular
+     * license group (family, tier, or approval source).
+     *
+     * ## Allow List Schema
+     *
+     * ```json
+     * ```
+     *
+     * where
+     *
+     * PermissiveTier ::= "model permissive" | "gold" | "silver" | "bronze" | "lead"
+     * CopyleftTier ::= "maximal copyleft" | "network copyleft" | "strong copyleft" | "weak copyleft"
+     *
+     * ## Return Value
+     *
+     * The returned value has the same shape as a license allow list:
+     *
+     * ```json
+     * {
+     *   allowedApprovalSources?: Array<"fsf" | "osi">,
+     *   allowedFamilies?: Array<"copyleft" | "permissive">,
+     *   allowedTiers?: Array,
+     *   allowedStrings?: Array
+     *   allowedPURLs?: Array
+     *   focusAlertsHere?: boolean
+     * }
+     * ```
+     *
+     * where
+     *
+     * PermissiveTier ::= "model permissive" | "gold" | "silver" | "bronze" | "lead"
+     * CopyleftTier ::= "maximal copyleft" | "network copyleft" | "strong copyleft" | "weak copyleft"
+     *
+     * readers can learn more about [copyleft tiers](https://blueoakcouncil.org/copyleft) and [permissive tiers](https://blueoakcouncil.org/list) by reading the linked resources.
+     *
+     * ### Example request bodies:
+     * ```json
+     * {
+     *   "allowedApprovalSources": ["fsf"],
+     *   "allowedPURLs": [],
+     *   "allowedFamilies": ["copyleft"],
+     *   "allowedTiers": ["model permissive"],
+     *   "allowedStrings": ["License :: OSI Approved :: BSD License"],
+     *   "focusAlertsHere": false
+     * }
+     * ```
+     *
+     * This endpoint consumes 100 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - packages:list
+     */
+    post: operations['saturateLicensePolicy']
+  }
+  '/license-metadata': {
+    /**
+     * License Metadata
+     * @description For an array of license identifiers or names (short form SPDX identifiers, or long form license names),
+     *     returns an array of metadata for the corresponding license, if the license is recognized. If the query
+     *     parameter `includetext=true` is set, the returned metadata will also include the license text.
+     *
+     *
+     *     ## Example request body:
+     *
+     *     ```json
+     *     [
+     *       "Apache-2.0",
+     *       "BSD Zero Clause License"
+     *     ]
+     *     ```
+     *
+     *
+     *     ## Return value
+     *
+     *     ```json
+     *     // Response schema:
+     *     Array<{
+     *       licenseId: string,
+     *       name?: string,
+     *       deprecated?: string,
+     *       crossref?: string
+     *       classes: Array
+     *       text?: string
+     *     }>
+     *
+     *     // Example response:
+     *     [
+     *       {
+     *         "licenseId": "Apache-2.0",
+     *         "name": "Apache License 2.0",
+     *         "deprecated": false,
+     *         "crossref": "https://spdx.org/licenses/Apache-2.0.html",
+     *         "classes": [
+     *           "fsf libre",
+     *           "osi approved",
+     *           "permissive (silver)"
+     *         ]
+     *       },
+     *       {
+     *         "licenseId": "0BSD",
+     *         "name": "BSD Zero Clause License",
+     *         "deprecated": false,
+     *         "crossref": "https://spdx.org/licenses/0BSD.html",
+     *         "classes": [
+     *           "osi approved",
+     *           "permissive (bronze)"
+     *         ]
+     *       }
+     *     ]
+     *     ```
+     *
+     *     ## License policy schema
+     *
+     * ```json
+     * {
+     *   allow?: Array
+     *   warn?: Array
+     *   options?: Array
+     * }
+     * ```
+     *
+     * Elements of the `allow` and `warn` arrays strings representing items which should be allowed, or which should trigger a warning; license data found in package which not present in either array will produce a license violation (effectively a "hard" error). For example, to allow Apache-2.0 and MIT to the allow list, simply add the strings "Apache-2.0" and "MIT" to the `allow` array. Strings appearing in these arrays are generally "what you see is what you get", with two important exceptions: strings which are recognized as license classes and strings which are recognized as PURLs are handled differently to allow for more flexible license policy creation.
+     *
+     * ## License Classes
+     *
+     * Strings which are license classes will expand to a list of licenses known to be in that particular license class. Recognized license classes are:
+     *   'permissive',
+     *   'permissive (model)',
+     *   'permissive (gold)',
+     *   'permissive (silver)',
+     *   'permissive (bronze)',
+     *   'permissive (lead)',
+     *   'copyleft',
+     *   'maximal copyleft',
+     *   'network copyleft',
+     *   'strong copyleft',
+     *   'weak copyleft',
+     *   'contributor license agreement',
+     *   'public domain',
+     *   'proprietary free',
+     *   'source available',
+     *   'proprietary',
+     *   'commercial',
+     *   'patent'
+     *
+     * Users can learn more about [copyleft tiers](https://blueoakcouncil.org/copyleft) and [permissive tiers](https://blueoakcouncil.org/list) by reading the linked resources.
+     *
+     *
+     * ## PURLs
+     *
+     * Users may also modify their license policy's allow and warn lists by using [package URLs](https://github.com/package-url/purl-spec) (aka PURLs), which support glob patterns to allow a range of versions, files and directories, etc.
+     *
+     * purl qualifiers which support globs are `filename`, `version_glob`, `artifact_id` and `license_provenance` (primarily used for allowing data from registry metadata).
+     *
+     * ### Examples:
+     * Allow all license data found in a specific version of a package 4.14.1: `pkg:npm/lodash@4.14.1`
+     * Allow all license data found in a version range of a package: `pkg:npm/lodash?version_glob=15.*`
+     * Allow all license data in the test directory of a given package for certain version ranges: `pkg:npm/lodash@15.*.*?file_name=lodash/test/*`
+     * Allow all license data taken from the package registry for a package and version range: `pkg:npm/lodash?version_glob=*&license_provenance=registry_metadata`
+     *
+     * ## Available options
+     *
+     * `toplevelOnly`: only apply the license policy to "top level" license data in a package, which includes registry metadata, LICENSE files, and manifest files which are closest to the root of the package.
+     *
+     * `applyToUnidentified`: Apply license policy to found but unidentified license data. If enabled, the license policy will be applied to license data which could not be affirmatively identified as a known license (this will effectively merge the license policy violation and unidentified license alerts). If disabled, license policy alerts will only be shown for license data which is positively identified as something not allowed or set to warn by the license policy.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     */
+    post: operations['licenseMetadata']
+  }
+  '/alert-types': {
+    /**
+     * Alert Types Metadata
+     * @description For an array of alert type identifiers, returns metadata for each alert type. Optionally, specify a language via the 'language' query parameter.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     */
+    post: operations['alertTypes']
+  }
+  '/openapi': {
+    /**
+     * Returns the OpenAPI definition
+     * @description Retrieve the API specification in an Openapi JSON format.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     */
+    get: operations['getOpenAPI']
+  }
+  '/openapi.json': {
+    /**
+     * Returns the OpenAPI definition
+     * @description Retrieve the API specification in an Openapi JSON format.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     */
+    get: operations['getOpenAPIJSON']
+  }
+  '/quota': {
+    /**
+     * Get quota
+     * @description Get your current API quota. You can use this endpoint to prevent doing requests that might spend all your quota.
+     *
+     * This endpoint consumes 0 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - No Scopes Required, but authentication is required
+     */
+    get: operations['getQuota']
+  }
+  '/organizations': {
+    /**
+     * List organizations
+     * @description Get information on the current organizations associated with the API token.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - No Scopes Required, but authentication is required
+     */
+    get: operations['getOrganizations']
+  }
+  '/settings': {
+    /**
+     * Calculate settings
+     * @deprecated
+     * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference/updateorgsecuritypolicy) instead.
+     *
+     * Get current settings for the requested organizations and default settings to allow deferrals.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - No Scopes Required, but authentication is required
+     */
+    post: operations['postSettings']
+  }
+  '/report/supported': {
+    /**
+     * Get supported files for report
+     * @deprecated
+     * @description **This endpoint is deprecated.** Deprecated since 2023-01-15. Use the [successor version](https://docs.socket.dev/reference/getsupportedfiles) instead.
+     *
+     * This route has been moved to the `orgs/{org_slug}/supported-files` endpoint.
+     *
+     * Get a list of supported files for project report generation.
+     * Files are categorized first by environment (e.g. NPM or PyPI), then by name.
+     *
+     * Files whose names match the patterns returned by this endpoint can be uploaded for report generation.
+     * Examples of supported filenames include `package.json`, `package-lock.json`, and `yarn.lock`.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     */
+    get: operations['getReportSupportedFiles']
+  }
+  '/report/delete/{id}': {
+    /**
+     * Delete a report
+     * @deprecated
+     * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference) instead.
+     *
+     * Deprecated: Use `/orgs/{org_slug}/full-scans` instead. Delete a specific project report generated with the GitHub app.
+     *
+     * This endpoint consumes 10 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - report:write
+     */
+    delete: operations['deleteReport']
+  }
+  '/report/list': {
+    /**
+     * Get list of reports
+     * @deprecated
+     * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference) instead.
+     *
+     * Deprecated: Use `/orgs/{org_slug}/full-scans` instead. Get all your project reports generated with the GitHub app.
+     *
+     * This endpoint consumes 10 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - report:list
+     */
+    get: operations['getReportList']
+  }
+  '/report/upload': {
+    /**
+     * Create a report
+     * @deprecated
+     * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference/createorgfullscan) instead.
+     *
+     * Deprecated: Use `/orgs/{org_slug}/full-scans` instead.
+     *
+     * Upload a lockfile to get your project analyzed by Socket.
+     * You can upload multiple lockfiles in the same request, but each filename must be unique.
+     *
+     * The name of the file must be in the supported list.
+     *
+     * For example, these are valid filenames: `package.json`, `folder/package.json` and `deep/nested/folder/package.json`.
+     *
+     * This endpoint consumes 100 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - report:write
+     */
+    put: operations['createReport']
+  }
+  '/report/view/{id}': {
+    /**
+     * View a report
+     * @deprecated
+     * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference/getorgfullscan) instead.
+     *
+     * Deprecated: Use `/orgs/{org_slug}/full-scans` instead. Get all the issues, packages, and scores related to an specific project report.
+     *
+     * This endpoint consumes 10 units of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - report:read
+     */
+    get: operations['getReport']
+  }
+  '/repo/list': {
+    /**
+     * List GitHub repositories
+     * @deprecated
+     * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference/getorgrepolist) instead.
+     *
+     * Deprecated: Use `/orgs/{org_slug}/repos` instead. Get all GitHub repositories associated with a Socket org.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - repo:list
+     */
+    get: operations['getRepoList']
+  }
+  '/npm/{package}/{version}/issues': {
+    /**
+     * Get issues by package
+     * @deprecated
+     * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference) instead.
+     *
+     * Get all the issues related with a particular npm package version.
+     * This endpoint returns the issue type, location, and additional details related to each issue in the `props` attribute.
+     *
+     * You can [see here](https://socket.dev/alerts) the full list of issues.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - No Scopes Required, but authentication is required
+     */
+    get: operations['getIssuesByNPMPackage']
+  }
+  '/npm/{package}/{version}/score': {
+    /**
+     * Get score by package
+     * @deprecated
+     * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference/batchpackagefetch) instead.
+     *
+     * Get all the scores and metrics by category that are used to evaluate the package version.
+     *
+     * - depscore: The average of all score factors. (0-1)
+     * - supplyChainRisk: Score factors relating to supply chain security (0-1)
+     * - downloadCount: The number of downloads for the package. Higher downloads contribute to a higher score.
+     * - supplyChainRiskIssueLow/Mid/High/Critical: The number of supply chain risk issues of varying severity. Lower numbers contribute to a higher score.
+     * - dependencyCount: The number of production dependencies. Lower count contributes to a higher score.
+     * - devDependencyCount: The number of development dependencies. Lower count contributes to a higher score.
+     * - transitiveDependencyCount: The number of transitive dependencies. Lower count contributes to a higher score.
+     * - totalDependencyCount: The total number of dependencies (production + development + transitive). Lower count contributes to a higher score.
+     * - quality: Score factors relating to code quality (0-1)
+     * - qualityIssueLow/Mid/High/Critical: The number of code quality issues of varying severity. Lower numbers contribute to a higher score.
+     * - linesOfCode: The number of lines of code in the package. Lower count contributes to a higher score.
+     * - readmeLength: The length of the package's README file. Longer READMEs contribute to a higher score.
+     * - maintenance: Score factors relating to package maintenance (0-1)
+     * - maintainerCount: The number of maintainers for the package. More maintainers contribute to a higher score.
+     * - versionsLastWeek/Month/TwoMonths/Year: The number of versions released in different time periods. More recent releases contribute to a higher score.
+     * - versionCount: The total number of versions released. Higher count contributes to a higher score.
+     * - maintenanceIssueLow/Mid/High/Critical: The number of maintenance issues of varying severity. Lower numbers contribute to a higher score.
+     * - vulnerability: Score factors relating to package vulnerabilities (0-1)
+     * - vulnerabilityIssueLow/Mid/High/Critical: The number of vulnerability issues of varying severity. Lower numbers contribute to a higher score.
+     * - dependencyVulnerabilityCount: The number of vulnerabilities in the package's dependencies. Lower count contributes to a higher score.
+     * - vulnerabilityCount: The number of vulnerabilities in the package itself. Lower count contributes to a higher score.
+     * - license: Score factors relating to package licensing (0-1)
+     * - licenseIssueLow/Mid/High/Critical: The number of license issues of varying severity. Lower numbers contribute to a higher score.
+     * - licenseQuality: A score indicating the quality/permissiveness of the package's license. Higher quality contributes to a higher score.
+     * - miscellaneous: Miscellaneous metadata about the package version.
+     * - versionAuthorName/Email: The name and email of the version author.
+     * - fileCount: The number of files in the package.
+     * - byteCount: The total size in bytes of the package.
+     * - typeModule: Whether the package declares a "type": "module" field.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - No Scopes Required, but authentication is required
+     */
+    get: operations['getScoreByNPMPackage']
+  }
+  '/analytics/org/{filter}': {
+    /**
+     * Get organization analytics (unstable)
+     * @deprecated
+     * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference/historicalalertstrend) instead.
+     *
+     * Please implement against the [Historical dependencies](/reference/historicaldependenciestrend) or [Historical alerts](/reference/historicalalertstrend) endpoints.
+     *
+     * Get analytics data regarding the number of alerts found across all active repositories.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - report:write
+     */
+    get: operations['getOrgAnalytics']
+  }
+  '/analytics/repo/{name}/{filter}': {
+    /**
+     * Get repository analytics
+     * @deprecated
+     * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference/historicalalertstrend) instead.
+     *
+     * Please implement against the [Historical dependencies](/reference/historicaldependenciestrend) or [Historical alerts](/reference/historicalalertstrend) endpoints.
+     *
+     * Get analytics data regarding the number of alerts found in a single repository.
+     *
+     * This endpoint consumes 1 unit of your quota.
+     *
+     * This endpoint requires the following org token scopes:
+     * - report:write
+     */
+    get: operations['getRepoAnalytics']
+  }
+}
+
+export type webhooks = Record
+
+export interface components {
+  schemas: {
+    BatchPurlStreamSchema:
+      | components['schemas']['SocketArtifact']
+      | {
+          /** @enum {string} */
+          _type: 'purlError'
+          value: components['schemas']['PurlErrorSchema']
+        }
+      | {
+          /** @enum {string} */
+          _type: 'summary'
+          value: components['schemas']['PurlSummarySchema']
+        }
+    SocketOrgBatchPURLFetch: {
+      components: Array
+    }
+    SocketArtifact: components['schemas']['SocketPURL'] &
+      components['schemas']['SocketArtifactLink'] & {
+        id?: components['schemas']['SocketId']
+        /** @description List of package authors or maintainers */
+        author?: string[]
+        /**
+         * @description Total size of the package artifact in bytes
+         * @default 0
+         */
+        size?: number
+        /**
+         * @description Hugging Face model, dataset, or space type
+         * @default
+         */
+        repositoryType?: string
+        alerts?: Array
+        score?: components['schemas']['SocketScore']
+        patch?: components['schemas']['SocketArtifactPatch']
+        /**
+         * @description Original unmodified PURL input string before normalization
+         * @default
+         */
+        inputPurl?: string
+        /**
+         * @description Deprecated: Always 0. Previously used for batch ordering but replaced by inputPurl for better tracking.
+         * @default 0
+         */
+        batchIndex?: number
+        /** @default */
+        license?: string
+        licenseDetails?: components['schemas']['LicenseDetails']
+        licenseAttrib?: components['schemas']['SAttrib1_N']
+      }
+    /** @description Mapping of supply chain risk alert types to their computed score contributions and formulas used for calculation. This allows for detailed breakdowns of how each alert type impacts the overall supply chain security score, with the ability to include custom formulas and components for each alert type. */
+    SocketSBOMScore: {
+      [key: string]: {
+        value: {
+          /**
+           * @description Score from 0.0 to 1.0 for the scanned repository, computed from supply chain risk alerts using weighted exponential decay per direct dependency
+           * @default 0
+           */
+          result: number
+          /** @description Components used to compute result of the formula */
+          components?: {
+            [key: string]: number
+          }
+          /**
+           * @description Formula used to compute the supply chain security score
+           * @default
+           */
+          formula?: string
+        }
+      }
+    }
+    SocketDiffArtifact: components['schemas']['SocketPURL'] & {
+      diffType: components['schemas']['SocketDiffArtifactType']
+      id?: components['schemas']['SocketId']
+      /** @description List of package authors or maintainers */
+      author?: string[]
+      /** @description Artifact links from the base/before state */
+      base?: Array
+      capabilities?: components['schemas']['Capabilities']
+      /** @description Artifact links from the head/after state */
+      head?: Array
+      qualifiers?: components['schemas']['Qualifiers']
+      /**
+       * @description Total size of the package artifact in bytes
+       * @default 0
+       */
+      size?: number
+      /** @default */
+      license?: string
+      licenseDetails?: components['schemas']['LicenseDetails']
+      licenseAttrib?: components['schemas']['SAttrib1_N']
+      score?: components['schemas']['SocketScore']
+      alerts?: Array
+    }
+    CDXManifestSchema: {
+      /** @default CycloneDX */
+      bomFormat: string
+      /** @default 1.5 */
+      specVersion: string
+      /** @default */
+      serialNumber: string
+      /** @default 0 */
+      version: number
+      metadata: {
+        /** @default */
+        timestamp: string
+        tools: {
+          components: Array<
+            components['schemas']['CDXComponentSchema'] & {
+              /** @default Socket */
+              author?: string
+              authors?: string[]
+              /** @default Socket */
+              publisher?: string
+            }
+          >
+        }
+        authors: Array<{
+          /** @default Socket */
+          name: string
+        }>
+        /** @default */
+        supplier?: string
+        lifecycles: Array<{
+          /** @default build */
+          phase: string
+        }>
+        component: components['schemas']['CDXComponentSchema']
+        properties?: Array<{
+          /** @default */
+          name: string
+          /** @default */
+          value: string
+        }>
+      }
+      components: Array
+      dependencies: Array<{
+        /** @default */
+        ref: string
+        dependsOn?: string[]
+      }>
+      vulnerabilities?: Array<{
+        /** @default */
+        id: string
+        /** @default */
+        ref?: string
+        source?: {
+          /** @default */
+          name?: string
+          /** @default */
+          url?: string
+        }
+        ratings?: {
+          source?: {
+            /** @default */
+            name?: string
+            /** @default */
+            url?: string
+          }
+          /** @default 0 */
+          score?: number
+          /** @default */
+          severity?: string
+          /** @default */
+          method?: string
+          /** @default */
+          vector?: string
+        }[]
+        cwes?: number[]
+        /** @default */
+        description?: string
+        /** @default */
+        detail?: string
+        /** @default */
+        recommendation?: string
+        advisories?: {
+          /** @default */
+          url: string
+          /** @default */
+          title?: string
+        }[]
+        /** @default */
+        created?: string
+        /** @default */
+        published?: string
+        /** @default */
+        updated?: string
+        affects?: {
+          /** @default */
+          ref: string
+          versions?: {
+            /** @default */
+            version?: string
+            /** @default */
+            status?: string
+          }[]
+        }[]
+        analysis?: {
+          /** @default */
+          state?: string
+          /** @default */
+          justification?: string
+          response?: string[]
+          /** @default */
+          detail?: string
+          /** @default */
+          firstIssued?: string
+          /** @default */
+          lastUpdated?: string
+        }
+      }>
+    }
+    OpenVEXDocumentSchema: {
+      /** @default https://openvex.dev/ns/v0.2.0 */
+      '@context': string
+      /** @default */
+      '@id': string
+      /** @default Socket Security */
+      author: string
+      /** @default */
+      timestamp: string
+      /** @default 1 */
+      version: number
+      statements: Array
+      /** @default VEX Generator */
+      role?: string
+      /** @default */
+      last_updated?: string
+      /** @default Socket Security VEX Generator */
+      tooling?: string
+    }
+    SPDXManifestSchema: {
+      /** @default SPDX-2.3 */
+      spdxVersion: string
+      /** @default CC0-1.0 */
+      dataLicense: string
+      /** @default SPDXRef-DOCUMENT */
+      SPDXID: string
+      /** @default */
+      name: string
+      /** @default */
+      documentNamespace: string
+      creationInfo: {
+        /** @default */
+        created: string
+        creators: string[]
+      }
+      documentDescribes: string[]
+      packages: Array<{
+        /** @default */
+        name: string
+        /** @default */
+        SPDXID: string
+        /** @default */
+        versionInfo: string
+        /** @default */
+        packageFileName: string
+        /** @default */
+        description?: string
+        /** @default */
+        primaryPackagePurpose?: string
+        /** @default */
+        downloadLocation?: string
+        /** @default false */
+        filesAnalyzed: boolean
+        /** @default NOASSERTION */
+        homepage: string
+        /** @default NOASSERTION */
+        licenseDeclared: string
+        externalRefs: {
+          /** @default PACKAGE-MANAGER */
+          referenceCategory: string
+          /** @default purl */
+          referenceType: string
+          /** @default */
+          referenceLocator: string
+        }[]
+        checksums?: {
+          /** @default */
+          algorithm: string
+          /** @default */
+          checksumValue: string
+        }[]
+      }>
+      relationships: Array<{
+        /** @default SPDXRef-DOCUMENT */
+        spdxElementId: string
+        /** @default */
+        relatedSpdxElement: string
+        /** @default DESCRIBES */
+        relationshipType: string
+      }>
+    }
+    /** @default null */
+    LicenseAllowListRequest: Record
+    SStoredLicensePolicy: {
+      allow: string[] | null
+      warn: string[] | null
+      monitor: string[] | null
+      deny: string[] | null
+      options: string[] | null
+    }
+    Capabilities: {
+      /**
+       * @description Package can read or modify environment variables
+       * @default false
+       */
+      env: boolean
+      /**
+       * @description Package uses dynamic code evaluation (eval, Function constructor, etc.)
+       * @default false
+       */
+      eval: boolean
+      /**
+       * @description Package can read or write to the file system
+       * @default false
+       */
+      fs: boolean
+      /**
+       * @description Package can make network requests or create servers
+       * @default false
+       */
+      net: boolean
+      /**
+       * @description Package can execute shell commands or spawn processes
+       * @default false
+       */
+      shell: boolean
+      /**
+       * @description Package uses unsafe or dangerous operations that could compromise security
+       * @default false
+       */
+      unsafe: boolean
+      /**
+       * @description Package contains remote URL(s) in the source code
+       * @default false
+       */
+      url: boolean
+    }
+    Qualifiers: unknown
+    SocketScore: {
+      /**
+       * @description Score from 0.0 to 1.0 evaluating license permissiveness and compatibility
+       * @default 0
+       */
+      license: number
+      /**
+       * @description Score from 0.0 to 1.0 evaluating project maintenance health and activity
+       * @default 0
+       */
+      maintenance: number
+      /**
+       * @description Combined score from 0.0 to 1.0 representing overall package health and safety
+       * @default 0
+       */
+      overall: number
+      /**
+       * @description Score from 0.0 to 1.0 evaluating code quality, testing, and documentation
+       * @default 0
+       */
+      quality: number
+      /**
+       * @description Score from 0.0 to 1.0 evaluating supply chain security and provenance
+       * @default 0
+       */
+      supplyChain: number
+      /**
+       * @description Score from 0.0 to 1.0 based on known vulnerabilities and their severity
+       * @default 0
+       */
+      vulnerability: number
+    }
+    SocketManifestReference: {
+      /**
+       * @description Path to the manifest file (e.g., package.json, pom.xml)
+       * @default
+       */
+      file: string
+      /**
+       * @description Starting line or position in the manifest file
+       * @default 0
+       */
+      start?: number
+      /**
+       * @description Ending line or position in the manifest file
+       * @default 0
+       */
+      end?: number
+    }
+    /** @default */
+    SocketId: string
+    LicensePolicy: {
+      allow: components['schemas']['LicenseAllowListElabbed']
+      warn: components['schemas']['LicenseAllowListElabbed']
+      monitor: components['schemas']['LicenseAllowListElabbed']
+    }
+    LicenseAllowList: {
+      strings: string[]
+    }
+    /** @default null */
+    SLicenseMetaRes: Record
+    /** @default null */
+    SLicenseMetaReq: Record
+    SocketReport: {
+      /** @default */
+      id: string
+      /** @default false */
+      healthy: boolean
+      issues: components['schemas']['SocketIssueList']
+      score: {
+        /** @default 0 */
+        avgSupplyChainRisk: number
+        /** @default 0 */
+        avgQuality: number
+        /** @default 0 */
+        avgMaintenance: number
+        /** @default 0 */
+        avgVulnerability: number
+        /** @default 0 */
+        avgLicense: number
+      }
+      /** @default */
+      url: string
+    }
+    SocketIssueList: Array
+    SocketPackageScore: {
+      supplyChainRisk: components['schemas']['SocketMetricSchema']
+      quality: components['schemas']['SocketMetricSchema']
+      maintenance: components['schemas']['SocketMetricSchema']
+      vulnerability: components['schemas']['SocketMetricSchema']
+      license: components['schemas']['SocketMetricSchema']
+      miscellaneous: components['schemas']['SocketMetricSchema']
+      /** @default 0 */
+      depscore: number
+    }
+    PurlErrorSchema: {
+      /** @default */
+      error: string
+      /** @default */
+      inputPurl: string
+    }
+    PurlSummarySchema: {
+      /** @default 0 */
+      purl_input: number
+      /** @default 0 */
+      resolved: number
+      errors: {
+        /** @default 0 */
+        purl_malformed: number
+        /** @default 0 */
+        package_not_found: number
+      }
+    }
+    SocketBatchPURLRequest: {
+      /** @default */
+      purl: string
+    }
+    SocketPURL: {
+      type: components['schemas']['SocketPURL_Type']
+      /**
+       * @description Package namespace or scope, such as npm organizations (@angular), Maven groupIds, or Docker image owners
+       * @default
+       */
+      namespace?: string
+      /**
+       * @description Package name within its ecosystem
+       * @default
+       */
+      name?: string
+      /**
+       * @description Package version string
+       * @default
+       */
+      version?: string
+      /**
+       * @description Path within the package to a specific file or directory, used to reference nested components
+       * @default
+       */
+      subpath?: string
+      /**
+       * @description Package-specific release identifier, such as PyPI's artifact ID or the specific build/release version
+       * @default
+       */
+      release?: string
+    }
+    SocketAlert: {
+      /**
+       * @description Unique identifier for this alert instance, used for deduplication and tracking across scans
+       * @default
+       */
+      key: string
+      /**
+       * @description Alert type identifier referencing the alert type definition
+       * @default
+       */
+      type: string
+      severity?: components['schemas']['SocketIssueSeverity']
+      category?: components['schemas']['SocketCategory']
+      /**
+       * @description File path where this alert was detected
+       * @default
+       */
+      file?: string
+      /**
+       * @description Starting position of the alert in the file
+       * @default 0
+       */
+      start?: number
+      /**
+       * @description Ending position of the alert in the file
+       * @default 0
+       */
+      end?: number
+      /**
+       * @description Additional alert-specific properties and metadata that vary by alert type
+       * @default null
+       */
+      props?: Record
+      /**
+       * @description Action to take for this alert (e.g., error, warn, ignore)
+       * @default
+       */
+      action?: string
+      actionSource?: {
+        /**
+         * @description Type of action source (e.g., policy, override)
+         * @default
+         */
+        type: string
+        candidates: Array<{
+          /**
+           * @description Type of action candidate
+           * @default
+           */
+          type: string
+          /**
+           * @description Proposed action for this candidate
+           * @default
+           */
+          action: string
+          /**
+           * @description Index of the policy rule for this candidate
+           * @default 0
+           */
+          actionPolicyIndex: number
+          /**
+           * @description Repository label ID associated with this candidate
+           * @default
+           */
+          repoLabelId: string
+        }>
+      }
+      /**
+       * @description Index of the policy rule that triggered this action, for traceability to security policies
+       * @default 0
+       */
+      actionPolicyIndex?: number
+      fix?: {
+        /**
+         * @description Type of fix available (e.g., upgrade, remove, cve)
+         * @default
+         */
+        type: string
+        /**
+         * @description Human-readable description of how to fix this issue
+         * @default
+         */
+        description: string
+        /** @description Patches available to fix this specific alert */
+        patch?: Array<{
+          /**
+           * @description Unique identifier for this patch
+           * @default
+           */
+          uuid: string
+          /**
+           * @description Access tier required for this patch (free or paid)
+           * @default free
+           * @enum {string}
+           */
+          tier: 'free' | 'paid'
+          /**
+           * @description Indicates if this patch is deprecated and should not be used
+           * @default false
+           */
+          deprecated?: boolean
+        }>
+      }
+      patch?: components['schemas']['SocketPatch']
+      reachability?: {
+        head?: components['schemas']['ReachabilityResult']
+        base?: components['schemas']['ReachabilityResult']
+      }
+      /**
+       * @description Generic alert sub-type
+       * @default
+       */
+      subType?: string
+    }
+    SocketArtifactPatch: {
+      appliedPatch?: components['schemas']['SocketPatch']
+      /** @description List of available patches that can be applied to fix vulnerabilities */
+      availablePatches?: Array
+    }
+    LicenseDetails: Array<{
+      /**
+       * @description SPDX license expression in disjunctive normal form (e.g., '(MIT OR Apache-2.0)')
+       * @default
+       */
+      spdxDisj: string
+      /** @description List of authors found in the license text */
+      authors: string[]
+      /**
+       * @description Error details if license parsing failed
+       * @default
+       */
+      errorData: string
+      /**
+       * @description Source where this license information was detected (e.g., 'package.json', 'LICENSE file', 'README')
+       * @default
+       */
+      provenance: string
+      /**
+       * @description Path to the file containing this license information
+       * @default
+       */
+      filepath: string
+      /**
+       * @description Confidence score from 0.0 to 1.0 indicating how well the detected license matches the source text
+       * @default 0
+       */
+      match_strength: number
+    }>
+    SAttrib1_N: Array<{
+      /**
+       * @description Full text of the license attribution or copyright notice found in the package
+       * @default
+       */
+      attribText: string
+      attribData: {
+        /**
+         * @description Package URL this attribution applies to
+         * @default
+         */
+        purl: string
+        /**
+         * @description File path where this attribution was found
+         * @default
+         */
+        foundInFilepath: string
+        /**
+         * @description SPDX license expression parsed from the attribution text
+         * @default
+         */
+        spdxExpr: string
+        /** @description Authors mentioned in this attribution */
+        foundAuthors: string[]
+      }[]
+    }>
+    SocketArtifactLink: {
+      /**
+       * @description Indicates if this is a direct dependency (not transitive)
+       * @default false
+       */
+      direct?: boolean
+      /**
+       * @description Indicates if this is a development-only dependency not used in production
+       * @default false
+       */
+      dev?: boolean
+      /**
+       * @description Indicates if this package is deprecated, abandoned, or no longer maintained
+       * @default false
+       */
+      dead?: boolean
+      manifestFiles?: Array
+      /** @description IDs of the root-level packages in the dependency tree that depend on this package */
+      topLevelAncestors?: Array
+      /** @description IDs of packages that this package directly depends on */
+      dependencies?: Array
+      /** @description Computed priority scores for each alert type based on severity, reachability, and fixability factors */
+      alertPriorities?: {
+        [key: string]: {
+          /**
+           * @description Computed priority score for this alert
+           * @default 0
+           */
+          result: number
+          components?: {
+            isFixable: {
+              /**
+               * @description Contribution of fixability to the priority score
+               * @default 0
+               */
+              result: number
+              /**
+               * @description Whether a fix is available for this alert
+               * @default false
+               */
+              value: boolean
+            }
+            isReachable: {
+              /**
+               * @description Contribution of reachability to the priority score
+               * @default 0
+               */
+              result: number
+              /**
+               * @description Whether the vulnerable code is reachable
+               * @default false
+               */
+              value: boolean
+              /**
+               * @description Specific reachability type value such as 'unreachable', 'maybe_reachable', or 'reachable'
+               * @default
+               */
+              specificValue: string
+            }
+            severity: {
+              /**
+               * @description Contribution of severity to the priority score
+               * @default 0
+               */
+              result: number
+              /**
+               * @description Numeric severity level
+               * @default 0
+               */
+              value: number
+            }
+          }
+          /**
+           * @description Formula used to calculate the priority score
+           * @default
+           */
+          formula?: string
+        }
+      }
+      artifact?: components['schemas']['SocketPURL'] & {
+        id: components['schemas']['SocketId']
+      }
+      /** @description Deprecated: mapping of alert keys to arrays of reachability types found across different manifest files or code locations. This field is derived from alertKeysToReachabilitySummaries for backward compatibility; use that property instead. */
+      alertKeysToReachabilityTypes?: {
+        [key: string]: string[]
+      }
+      /** @description Mapping of alert keys to arrays of reachability summaries. Each summary contains a reachability type indicating the result of reachability analysis for the corresponding vulnerability alert. */
+      alertKeysToReachabilitySummaries?: {
+        [key: string]: Array<{
+          /** @default */
+          type: string
+        }>
+      }
+    }
+    /**
+     * @description Type of change detected for this artifact in the diff
+     * @default unchanged
+     * @enum {string}
+     */
+    SocketDiffArtifactType:
+      | 'added'
+      | 'removed'
+      | 'updated'
+      | 'replaced'
+      | 'unchanged'
+    CDXComponentSchema: {
+      /** @default */
+      author?: string
+      /** @default */
+      publisher?: string
+      /** @default */
+      group: string
+      /** @default */
+      name: string
+      /** @default */
+      version: string
+      /** @default */
+      description?: string
+      /** @default */
+      scope?: string
+      hashes?: Array<{
+        /** @default */
+        alg: string
+        /** @default */
+        content: string
+      }>
+      licenses?: Array<{
+        /** @default */
+        expression?: string
+        license?: {
+          /** @default */
+          id?: string
+          /** @default */
+          name?: string
+          /** @default */
+          url?: string
+        }
+      }>
+      /** @default */
+      purl: string
+      externalReferences?: Array<{
+        /** @default */
+        type: string
+        /** @default */
+        url: string
+      }>
+      /** @default application */
+      type: string
+      /** @default */
+      'bom-ref': string
+      evidence?: {
+        identity: {
+          /** @default */
+          field: string
+          /** @default 0 */
+          confidence: number
+          methods: Array<{
+            /** @default */
+            technique: string
+            /** @default 0 */
+            confidence: number
+            /** @default */
+            value: string
+          }>
+        }
+        occurrences?: Array<{
+          /** @default */
+          location: string
+        }>
+      }
+      tags?: string[]
+      properties?: Array<{
+        /** @default */
+        name: string
+        /** @default */
+        value: string
+      }>
+      cryptoProperties?: Array<{
+        /** @default */
+        assetType: string
+        algorithmProperties: {
+          /** @default */
+          executionEnvironment: string
+          /** @default */
+          implementationPlatform: string
+        }
+      }>
+      components?: Array
+    }
+    OpenVEXStatementSchema: {
+      vulnerability: components['schemas']['OpenVEXVulnerabilitySchema']
+      products: Array
+      /** @default affected */
+      status: string
+      /** @default */
+      '@id'?: string
+      /** @default 0 */
+      version?: number
+      /** @default */
+      timestamp?: string
+      /** @default */
+      last_updated?: string
+      /** @default */
+      supplier?: string
+      /** @default */
+      status_notes?: string
+      /** @default */
+      justification?: string
+      /** @default */
+      impact_statement?: string
+      /** @default */
+      action_statement?: string
+      /** @default */
+      action_statement_timestamp?: string
+    }
+    LicenseAllowListElabbed: {
+      strings: string[]
+      classes: string[]
+      packageURLs: string[]
+      disjs: string[]
+    }
+    SocketIssue:
+      | {
+          /** @enum {string} */
+          type?: 'gptSecurity'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              notes: string
+              /** @default 0 */
+              confidence: number
+              /** @default 0 */
+              severity: number
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'gptAnomaly'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              notes: string
+              /** @default 0 */
+              confidence: number
+              /** @default 0 */
+              severity: number
+              /**
+               * @default medium
+               * @enum {string}
+               */
+              risk: 'low' | 'medium' | 'high'
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'gptMalware'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              notes: string
+              /** @default 0 */
+              confidence: number
+              /** @default 0 */
+              severity: number
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'filesystemAccess'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default fs */
+              module: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'networkAccess'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default net */
+              module: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'shellAccess'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default child_process */
+              module: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'debugAccess'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default vm */
+              module: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'chromePermission'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              permission: string
+              /** @default */
+              permissionType: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'chromeHostPermission'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              host: string
+              /** @default */
+              permissionType: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'chromeWildcardHostPermission'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              host: string
+              /** @default */
+              permissionType: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'chromeContentScript'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              scriptFile: string
+              /** @default */
+              matches: string
+              /** @default */
+              runAt: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'criticalCVE'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /**
+               * @description Common Vulnerabilities and Exposures identifier (e.g., CVE-2021-44228)
+               * @default
+               */
+              cveId: string
+              cwes: Array<{
+                /** @default */
+                description: string
+                /**
+                 * @description Common Weakness Enumeration identifier (e.g., CWE-79)
+                 * @default
+                 */
+                id: string
+                /** @default */
+                name: string
+              }>
+              /** @description Common Vulnerability Scoring System metrics */
+              cvss: {
+                /**
+                 * @description CVSS base score ranging from 0.0 to 10.0
+                 * @default 0
+                 */
+                score: number
+                /**
+                 * @description CVSS vector string (e.g., CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
+                 * @default
+                 */
+                vectorString: string
+              }
+              /** @default */
+              description: string
+              /**
+               * @description The first version that includes a patch for this vulnerability
+               * @default
+               */
+              firstPatchedVersionIdentifier: string
+              /**
+               * @description GitHub Security Advisory identifier (e.g., GHSA-1234-5678-9abc)
+               * @default
+               */
+              ghsaId: string
+              /** @default critical */
+              severity: string
+              /** @default */
+              title: string
+              /** @default */
+              url: string
+              /**
+               * @description Version range affected by this vulnerability (e.g., >= 2.0.0, < 2.17.1)
+               * @default
+               */
+              vulnerableVersionRange: string
+              kevs: Array<{
+                /** @default */
+                vulnerabilityName: string
+                /** @default */
+                shortDescription: string | null
+                /** @default */
+                requiredAction: string | null
+                /**
+                 * @description Date when added to CISA KEV catalog (ISO 8601 format)
+                 * @default
+                 */
+                dateAdded: string
+                /**
+                 * @description Remediation deadline for federal agencies (ISO 8601 format)
+                 * @default
+                 */
+                dueDate: string | null
+                /**
+                 * @description Known, Unknown, or specific ransomware campaign names
+                 * @default
+                 */
+                knownRansomwareCampaignUse: string | null
+                /** @default */
+                notes: string | null
+                /** @default */
+                vendorProject: string
+                /** @default */
+                product: string
+              }> | null
+              /** @description Exploit Prediction Scoring System https://www.first.org/epss/ */
+              epss: {
+                /** @default 0 */
+                score: number
+                /** @default 0 */
+                percentile: number
+              } | null
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'cve'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /**
+               * @description Common Vulnerabilities and Exposures identifier (e.g., CVE-2021-44228)
+               * @default
+               */
+              cveId: string
+              cwes: Array<{
+                /** @default */
+                description: string
+                /**
+                 * @description Common Weakness Enumeration identifier (e.g., CWE-79)
+                 * @default
+                 */
+                id: string
+                /** @default */
+                name: string
+              }>
+              /** @description Common Vulnerability Scoring System metrics */
+              cvss: {
+                /**
+                 * @description CVSS base score ranging from 0.0 to 10.0
+                 * @default 0
+                 */
+                score: number
+                /**
+                 * @description CVSS vector string (e.g., CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
+                 * @default
+                 */
+                vectorString: string
+              }
+              /** @default */
+              description: string
+              /**
+               * @description The first version that includes a patch for this vulnerability
+               * @default
+               */
+              firstPatchedVersionIdentifier: string
+              /**
+               * @description GitHub Security Advisory identifier (e.g., GHSA-1234-5678-9abc)
+               * @default
+               */
+              ghsaId: string
+              /** @default critical */
+              severity: string
+              /** @default */
+              title: string
+              /** @default */
+              url: string
+              /**
+               * @description Version range affected by this vulnerability (e.g., >= 2.0.0, < 2.17.1)
+               * @default
+               */
+              vulnerableVersionRange: string
+              kevs: Array<{
+                /** @default */
+                vulnerabilityName: string
+                /** @default */
+                shortDescription: string | null
+                /** @default */
+                requiredAction: string | null
+                /**
+                 * @description Date when added to CISA KEV catalog (ISO 8601 format)
+                 * @default
+                 */
+                dateAdded: string
+                /**
+                 * @description Remediation deadline for federal agencies (ISO 8601 format)
+                 * @default
+                 */
+                dueDate: string | null
+                /**
+                 * @description Known, Unknown, or specific ransomware campaign names
+                 * @default
+                 */
+                knownRansomwareCampaignUse: string | null
+                /** @default */
+                notes: string | null
+                /** @default */
+                vendorProject: string
+                /** @default */
+                product: string
+              }> | null
+              /** @description Exploit Prediction Scoring System https://www.first.org/epss/ */
+              epss: {
+                /** @default 0 */
+                score: number
+                /** @default 0 */
+                percentile: number
+              } | null
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'mediumCVE'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /**
+               * @description Common Vulnerabilities and Exposures identifier (e.g., CVE-2021-44228)
+               * @default
+               */
+              cveId: string
+              cwes: Array<{
+                /** @default */
+                description: string
+                /**
+                 * @description Common Weakness Enumeration identifier (e.g., CWE-79)
+                 * @default
+                 */
+                id: string
+                /** @default */
+                name: string
+              }>
+              /** @description Common Vulnerability Scoring System metrics */
+              cvss: {
+                /**
+                 * @description CVSS base score ranging from 0.0 to 10.0
+                 * @default 0
+                 */
+                score: number
+                /**
+                 * @description CVSS vector string (e.g., CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
+                 * @default
+                 */
+                vectorString: string
+              }
+              /** @default */
+              description: string
+              /**
+               * @description The first version that includes a patch for this vulnerability
+               * @default
+               */
+              firstPatchedVersionIdentifier: string
+              /**
+               * @description GitHub Security Advisory identifier (e.g., GHSA-1234-5678-9abc)
+               * @default
+               */
+              ghsaId: string
+              /** @default critical */
+              severity: string
+              /** @default */
+              title: string
+              /** @default */
+              url: string
+              /**
+               * @description Version range affected by this vulnerability (e.g., >= 2.0.0, < 2.17.1)
+               * @default
+               */
+              vulnerableVersionRange: string
+              kevs: Array<{
+                /** @default */
+                vulnerabilityName: string
+                /** @default */
+                shortDescription: string | null
+                /** @default */
+                requiredAction: string | null
+                /**
+                 * @description Date when added to CISA KEV catalog (ISO 8601 format)
+                 * @default
+                 */
+                dateAdded: string
+                /**
+                 * @description Remediation deadline for federal agencies (ISO 8601 format)
+                 * @default
+                 */
+                dueDate: string | null
+                /**
+                 * @description Known, Unknown, or specific ransomware campaign names
+                 * @default
+                 */
+                knownRansomwareCampaignUse: string | null
+                /** @default */
+                notes: string | null
+                /** @default */
+                vendorProject: string
+                /** @default */
+                product: string
+              }> | null
+              /** @description Exploit Prediction Scoring System https://www.first.org/epss/ */
+              epss: {
+                /** @default 0 */
+                score: number
+                /** @default 0 */
+                percentile: number
+              } | null
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'mildCVE'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /**
+               * @description Common Vulnerabilities and Exposures identifier (e.g., CVE-2021-44228)
+               * @default
+               */
+              cveId: string
+              cwes: Array<{
+                /** @default */
+                description: string
+                /**
+                 * @description Common Weakness Enumeration identifier (e.g., CWE-79)
+                 * @default
+                 */
+                id: string
+                /** @default */
+                name: string
+              }>
+              /** @description Common Vulnerability Scoring System metrics */
+              cvss: {
+                /**
+                 * @description CVSS base score ranging from 0.0 to 10.0
+                 * @default 0
+                 */
+                score: number
+                /**
+                 * @description CVSS vector string (e.g., CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
+                 * @default
+                 */
+                vectorString: string
+              }
+              /** @default */
+              description: string
+              /**
+               * @description The first version that includes a patch for this vulnerability
+               * @default
+               */
+              firstPatchedVersionIdentifier: string
+              /**
+               * @description GitHub Security Advisory identifier (e.g., GHSA-1234-5678-9abc)
+               * @default
+               */
+              ghsaId: string
+              /** @default critical */
+              severity: string
+              /** @default */
+              title: string
+              /** @default */
+              url: string
+              /**
+               * @description Version range affected by this vulnerability (e.g., >= 2.0.0, < 2.17.1)
+               * @default
+               */
+              vulnerableVersionRange: string
+              kevs: Array<{
+                /** @default */
+                vulnerabilityName: string
+                /** @default */
+                shortDescription: string | null
+                /** @default */
+                requiredAction: string | null
+                /**
+                 * @description Date when added to CISA KEV catalog (ISO 8601 format)
+                 * @default
+                 */
+                dateAdded: string
+                /**
+                 * @description Remediation deadline for federal agencies (ISO 8601 format)
+                 * @default
+                 */
+                dueDate: string | null
+                /**
+                 * @description Known, Unknown, or specific ransomware campaign names
+                 * @default
+                 */
+                knownRansomwareCampaignUse: string | null
+                /** @default */
+                notes: string | null
+                /** @default */
+                vendorProject: string
+                /** @default */
+                product: string
+              }> | null
+              /** @description Exploit Prediction Scoring System https://www.first.org/epss/ */
+              epss: {
+                /** @default 0 */
+                score: number
+                /** @default 0 */
+                percentile: number
+              } | null
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'emptyPackage'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'trivialPackage'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default 0 */
+              linesOfCode: number
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'noREADME'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'shrinkwrap'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'tooManyFiles'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default 0 */
+              fileCount: number
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'generic'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              title: string
+              /** @default */
+              description: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'ghaArgToSink'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              message: string
+              /** @default null */
+              sourceLocation: Record
+              sinkLocations: Array>
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'ghaEnvToSink'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              message: string
+              /** @default null */
+              sourceLocation: Record
+              sinkLocations: Array>
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'ghaContextToSink'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              message: string
+              /** @default null */
+              sourceLocation: Record
+              sinkLocations: Array>
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'ghaArgToOutput'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              message: string
+              /** @default null */
+              sourceLocation: Record
+              sinkLocations: Array>
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'ghaArgToEnv'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              message: string
+              /** @default null */
+              sourceLocation: Record
+              sinkLocations: Array>
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'ghaContextToOutput'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              message: string
+              /** @default null */
+              sourceLocation: Record
+              sinkLocations: Array>
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'ghaContextToEnv'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              message: string
+              /** @default null */
+              sourceLocation: Record
+              sinkLocations: Array>
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'recentlyPublished'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              publishedAt: string
+              /** @default */
+              checkedAt: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'licenseSpdxDisj'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              spdxDisj: string
+              /** @default */
+              licenseScanResult: string
+              violationData: Array>
+              warnData: Array>
+              monitorData: Array>
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'unsafeCopyright'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'licenseChange'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              prevLicenseId: string
+              /** @default */
+              newLicenseId: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'nonOSILicense'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              licenseId: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'deprecatedLicense'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              licenseId: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'missingLicense'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'nonSPDXLicense'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'unclearLicense'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              possibleLicenseId: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'mixedLicense'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              licenseId: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'notice'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'modifiedLicense'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              licenseId: string
+              /** @default 0 */
+              similarity: number
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'modifiedException'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              exceptionId: string
+              /** @default 0 */
+              similarity: number
+              /** @default */
+              comments: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'licenseException'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              exceptionId: string
+              /** @default */
+              comments: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'deprecatedException'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              exceptionId: string
+              /** @default */
+              comments: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'miscLicenseIssues'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              description: string
+              /** @default */
+              location: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'unidentifiedLicense'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              location: string
+              /** @default {} */
+              maybeByteSpan: Record
+              /** @default */
+              maybeTruncatedSource: string
+              /** @default 0 */
+              match_strength: number
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'noLicenseFound'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'explicitlyUnlicensedItem'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              location: string
+              /** @default {} */
+              maybeByteSpan: Record
+              /** @default */
+              maybeTruncatedSource: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'copyleftLicense'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              licenseId: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'nonpermissiveLicense'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              licenseId: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'ambiguousClassifier'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              classifier: string
+              /** @default */
+              filepathOrProvenance: string
+              /** @default {} */
+              maybeByteSpan: Record
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'invalidPackageJSON'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'httpDependency'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              packageName: string
+              /** @default */
+              url: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'gitDependency'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              packageName: string
+              /** @default */
+              url: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'gitHubDependency'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              packageName: string
+              /** @default */
+              githubUser: string
+              /** @default */
+              githubRepo: string
+              /** @default */
+              commitsh: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'fileDependency'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              packageName: string
+              /** @default */
+              filePath: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'noTests'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'noRepository'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'badSemver'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'badSemverDependency'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              packageName: string
+              /** @default */
+              packageVersion: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'noV1'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'noWebsite'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'noBugTracker'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'noAuthorData'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'typeModuleCompatibility'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'floatingDependency'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              dependency: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'manifestConfusion'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              key: string
+              /** @default */
+              description: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'malware'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default 0 */
+              id: number
+              /** @default */
+              note: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'telemetry'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default 0 */
+              id: number
+              /** @default */
+              note: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'troll'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default 0 */
+              id: number
+              /** @default */
+              note: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'deprecated'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default This package is deprecated */
+              reason: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'chronoAnomaly'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              prevChronoDate: string
+              /** @default */
+              prevChronoVersion: string
+              /** @default */
+              prevSemverDate: string
+              /** @default */
+              prevSemverVersion: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'compromisedSSHKey'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              fingerprint: string
+              /** @default */
+              sshKey: string
+              /** @default */
+              username: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'semverAnomaly'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              prevVersion: string
+              /** @default */
+              newVersion: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'newAuthor'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              prevAuthor: string
+              /** @default */
+              newAuthor: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'unstableOwnership'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              author: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'missingAuthor'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'unmaintained'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              lastPublish: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'unpublished'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              version: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'majorRefactor'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default 0 */
+              linesChanged: number
+              /** @default 0 */
+              prevSize: number
+              /** @default 0 */
+              curSize: number
+              /** @default 0 */
+              changedPercent: number
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'missingTarball'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'suspiciousStarActivity'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default 0 */
+              percentageSuspiciousStars: number
+              /** @default */
+              repository: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'unpopularPackage'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'skillAutonomyAbuse'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              notes: string
+              /** @default 0 */
+              confidence: number
+              /** @default 0 */
+              severity: number
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'skillCommandInjection'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              notes: string
+              /** @default 0 */
+              confidence: number
+              /** @default 0 */
+              severity: number
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'skillDataExfiltration'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              notes: string
+              /** @default 0 */
+              confidence: number
+              /** @default 0 */
+              severity: number
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'skillDiscoveryAbuse'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              notes: string
+              /** @default 0 */
+              confidence: number
+              /** @default 0 */
+              severity: number
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'skillHardcodedSecrets'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              notes: string
+              /** @default 0 */
+              confidence: number
+              /** @default 0 */
+              severity: number
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'skillObfuscation'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              notes: string
+              /** @default 0 */
+              confidence: number
+              /** @default 0 */
+              severity: number
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'skillPreExecution'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              notes: string
+              /** @default 0 */
+              confidence: number
+              /** @default 0 */
+              severity: number
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'skillPromptInjection'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              notes: string
+              /** @default 0 */
+              confidence: number
+              /** @default 0 */
+              severity: number
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'skillResourceAbuse'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              notes: string
+              /** @default 0 */
+              confidence: number
+              /** @default 0 */
+              severity: number
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'skillSupplyChain'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              notes: string
+              /** @default 0 */
+              confidence: number
+              /** @default 0 */
+              severity: number
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'skillToolAbuse'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              notes: string
+              /** @default 0 */
+              confidence: number
+              /** @default 0 */
+              severity: number
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'skillToolChaining'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              notes: string
+              /** @default 0 */
+              confidence: number
+              /** @default 0 */
+              severity: number
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'skillTransitiveTrust'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              notes: string
+              /** @default 0 */
+              confidence: number
+              /** @default 0 */
+              severity: number
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'socketUpgradeAvailable'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              categories: string[]
+              /** @default false */
+              deprecated: boolean
+              interop: string[]
+              /** @default */
+              replacementPURL: string
+              /** @default */
+              version: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'longStrings'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'highEntropyStrings'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'urlStrings'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              urls: string[]
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'usesEval'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default eval */
+              evalType: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'dynamicRequire'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'envVars'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              envVars: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'missingDependency'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              name: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'unusedDependency'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              name: string
+              /** @default */
+              version: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'peerDependency'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              name: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'uncaughtOptionalDependency'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              name: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'unresolvedRequire'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'extraneousDependency'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'obfuscatedRequire'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'obfuscatedFile'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default 0 */
+              confidence: number
+              /** @default */
+              notes: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'minifiedFile'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default 0 */
+              confidence: number
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'installScripts'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              script: string
+              /** @default */
+              source: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'hasNativeCode'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'binScriptConfusion'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              binScript: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'shellScriptOverride'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              binScript: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'didYouMean'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              alternatePackage: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'gptDidYouMean'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              alternatePackage: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'bidi'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'zeroWidth'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'badEncoding'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default utf8 */
+              encoding: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'homoglyphs'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'invisibleChars'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'suspiciousString'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              pattern: string
+              /** @default */
+              explanation: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'potentialVulnerability'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              note: string
+              /**
+               * @default medium
+               * @enum {string}
+               */
+              risk: 'low' | 'medium' | 'high'
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'vsxProposedApiUsage'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              proposals: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'vsxActivationWildcard'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              event: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'vsxWorkspaceContainsActivation'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              pattern: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'vsxUntrustedWorkspaceSupported'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              supported: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'vsxVirtualWorkspaceSupported'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              supported: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'vsxWebviewContribution'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'vsxDebuggerContribution'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: Record
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'vsxExtensionDependency'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              extension: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+      | {
+          /** @enum {string} */
+          type?: 'vsxExtensionPack'
+          value?: components['schemas']['SocketIssueBasics'] & {
+            /** @default */
+            description: string
+            props: {
+              /** @default */
+              count: string
+            }
+            usage?: components['schemas']['SocketUsageRef']
+          }
+        }
+    SocketMetricSchema: {
+      /** @default 0 */
+      score: number
+      components: {
+        [key: string]: components['schemas']['SocketMetricComponent']
+      }
+      /** @default 0 */
+      limit?: number
+      /** @default */
+      limitingMetric?: string
+    }
+    /**
+     * @description Package ecosystem type identifier based on the PURL specification
+     * @default unknown
+     * @enum {string}
+     */
+    SocketPURL_Type:
+      | 'alpm'
+      | 'apk'
+      | 'bitbucket'
+      | 'cocoapods'
+      | 'cargo'
+      | 'chrome'
+      | 'clawhub'
+      | 'composer'
+      | 'conan'
+      | 'conda'
+      | 'cran'
+      | 'deb'
+      | 'docker'
+      | 'gem'
+      | 'generic'
+      | 'github'
+      | 'golang'
+      | 'hackage'
+      | 'hex'
+      | 'huggingface'
+      | 'maven'
+      | 'mlflow'
+      | 'npm'
+      | 'nuget'
+      | 'qpkg'
+      | 'oci'
+      | 'pub'
+      | 'pypi'
+      | 'rpm'
+      | 'socket'
+      | 'swid'
+      | 'swift'
+      | 'vscode'
+      | 'unknown'
+    /**
+     * @default low
+     * @enum {string}
+     */
+    SocketIssueSeverity: 'low' | 'middle' | 'high' | 'critical'
+    /**
+     * @default other
+     * @enum {string}
+     */
+    SocketCategory:
+      | 'supplyChainRisk'
+      | 'quality'
+      | 'maintenance'
+      | 'vulnerability'
+      | 'license'
+      | 'other'
+    SocketPatch: {
+      /**
+       * @description Unique identifier for this patch
+       * @default
+       */
+      uuid: string
+      /**
+       * @description Access tier required for this patch (free or paid)
+       * @default free
+       * @enum {string}
+       */
+      tier: 'free' | 'paid'
+      /**
+       * @description Indicates if this patch is deprecated and should not be used
+       * @default false
+       */
+      deprecated?: boolean
+    }
+    ReachabilityResult: {
+      /**
+       * @description Type of reachability analysis performed
+       * @default precomputed
+       * @enum {string}
+       */
+      type: 'precomputed' | 'full-scan'
+      /** @description Reachability analysis results for each vulnerability */
+      results: Array
+    }
+    OpenVEXVulnerabilitySchema: {
+      /** @default */
+      name: string
+      /** @default */
+      '@id'?: string
+      /** @default */
+      description?: string
+      aliases?: string[]
+    }
+    OpenVEXProductSchema: {
+      /** @default */
+      '@id': string
+      identifiers?: components['schemas']['OpenVEXIdentifiersSchema']
+      hashes?: components['schemas']['OpenVEXHashesSchema']
+      subcomponents?: Array
+    }
+    SocketIssueBasics: {
+      severity: components['schemas']['SocketIssueSeverity']
+      category: components['schemas']['SocketCategory']
+      locations: components['schemas']['SocketRefList']
+      /** @default */
+      label: string
+    }
+    SocketUsageRef: {
+      file: components['schemas']['SocketRefFile']
+      dependencies: components['schemas']['SocketRefList']
+    }
+    SocketMetricComponent: {
+      /** @default 0 */
+      score: number
+      /** @default 0 */
+      maxScore: number
+      /** @default 0 */
+      limit: number
+      /** @default null */
+      value: Record
+    }
+    ReachabilityResultItem: {
+      type: components['schemas']['ReachabilityType']
+      /**
+       * @description Indicates if the reachability analysis was stopped early due to depth or complexity limits
+       * @default false
+       */
+      truncated?: boolean
+      /**
+       * @description Error message if reachability analysis failed
+       * @default
+       */
+      error?: string
+      matches?:
+        | {
+            /** @enum {string} */
+            type?: 'function-level'
+            value?: Array
+          }
+        | {
+            /** @enum {string} */
+            type?: 'class-level'
+            value?: Array
+          }
+      /**
+       * @description Path to the workspace root for multi-workspace projects
+       * @default
+       */
+      workspacePath?: string
+      /**
+       * @description Path to the subproject within the workspace
+       * @default
+       */
+      subprojectPath?: string
+    }
+    OpenVEXIdentifiersSchema: {
+      /** @default */
+      purl?: string
+      /** @default */
+      cpe23?: string
+      /** @default */
+      cpe22?: string
+    }
+    OpenVEXHashesSchema: {
+      /** @default */
+      md5?: string
+      /** @default */
+      sha1?: string
+      /** @default */
+      'sha-256'?: string
+      /** @default */
+      'sha-384'?: string
+      /** @default */
+      'sha-512'?: string
+      /** @default */
+      'sha3-224'?: string
+      /** @default */
+      'sha3-256'?: string
+      /** @default */
+      'sha3-384'?: string
+      /** @default */
+      'sha3-512'?: string
+      /** @default */
+      'blake2s-256'?: string
+      /** @default */
+      'blake2b-256'?: string
+      /** @default */
+      'blake2b-512'?: string
+    }
+    OpenVEXComponentSchema: {
+      /** @default */
+      '@id'?: string
+      identifiers?: components['schemas']['OpenVEXIdentifiersSchema']
+      hashes?: components['schemas']['OpenVEXHashesSchema']
+    }
+    SocketRefList: Array
+    SocketRefFile: {
+      /** @default */
+      path: string
+      range?: components['schemas']['SocketRefTextRange']
+      bytes?: components['schemas']['SocketRefByteRange']
+    }
+    /**
+     * @description Status of reachability analysis for vulnerable code paths
+     * @default unknown
+     * @enum {string}
+     */
+    ReachabilityType:
+      | 'missing_support'
+      | 'undeterminable_reachability'
+      | 'pending'
+      | 'unreachable'
+      | 'unknown'
+      | 'direct_dependency'
+      | 'error'
+      | 'maybe_reachable'
+      | 'reachable'
+    CallStackItem: {
+      /**
+       * @description Package URL (PURL) of the dependency containing this code
+       * @default
+       */
+      purl?: string
+      sourceLocation?: components['schemas']['SourceLocation']
+      /**
+       * @description Confidence score from 0.0 to 1.0 indicating how certain the reachability analysis is about this result
+       * @default 0
+       */
+      confidence?: number
+    }
+    ClassStackItem: {
+      /**
+       * @description Package URL (PURL) of the dependency containing this class
+       * @default
+       */
+      purl?: string
+      /**
+       * @description Name of the class in the dependency
+       * @default
+       */
+      class?: string
+      /**
+       * @description Confidence score from 0.0 to 1.0 indicating how certain the reachability analysis is about this result
+       * @default 0
+       */
+      confidence?: number
+    }
+    SocketRef:
+      | {
+          /** @enum {string} */
+          type?: 'unknown'
+          value?: Record
+        }
+      | {
+          /** @enum {string} */
+          type?: 'npm'
+          value?: components['schemas']['SocketRefNPM']
+        }
+      | {
+          /** @enum {string} */
+          type?: 'git'
+          value?: components['schemas']['SocketRefGit']
+        }
+      | {
+          /** @enum {string} */
+          type?: 'web'
+          value?: components['schemas']['SocketRefWeb']
+        }
+      | {
+          /** @enum {string} */
+          type?: 'pypi'
+          value?: components['schemas']['SocketRefPyPI']
+        }
+      | {
+          /** @enum {string} */
+          type?: 'go'
+          value?: components['schemas']['SocketRefGo']
+        }
+    SocketRefTextRange: {
+      /** @default 0 */
+      startLine: number
+      /** @default 0 */
+      startColumn: number
+      /** @default 0 */
+      endLine: number
+      /** @default 0 */
+      endColumn: number
+    }
+    SocketRefByteRange: {
+      /** @default 0 */
+      start: number
+      /** @default 0 */
+      end: number
+    }
+    SourceLocation: {
+      start: {
+        /**
+         * @description Line number in the source file
+         * @default 0
+         */
+        line: number
+        /**
+         * @description Column number in the source file
+         * @default 0
+         */
+        column: number
+        /**
+         * @description Absolute byte position from the beginning of the file, used for precise location tracking
+         * @default 0
+         */
+        byteOffset: number
+      }
+      end: {
+        /**
+         * @description Line number in the source file
+         * @default 0
+         */
+        line?: number
+        /**
+         * @description Column number in the source file
+         * @default 0
+         */
+        column?: number
+        /**
+         * @description Absolute byte position from the beginning of the file, used for precise location tracking
+         * @default 0
+         */
+        byteOffset?: number
+      }
+      /**
+       * @description Path to the source file
+       * @default
+       */
+      filename: string
+      /**
+       * @description Hash of the source file for integrity verification
+       * @default
+       */
+      fileHash: string
+    }
+    SocketRefNPM: {
+      /** @default */
+      package: string
+      /** @default */
+      version?: string
+      file?: components['schemas']['SocketRefFile']
+    }
+    SocketRefGit: {
+      /** @default */
+      url: string
+      /** @default */
+      commit?: string
+      /** @default */
+      tag?: string
+      file?: components['schemas']['SocketRefFile']
+    }
+    SocketRefWeb: {
+      /** @default */
+      url: string
+      file?: components['schemas']['SocketRefFile']
+    }
+    SocketRefPyPI: {
+      /** @default */
+      package: string
+      /** @default */
+      version?: string
+      /** @default */
+      artifact?: string
+      file?: components['schemas']['SocketRefFile']
+    }
+    SocketRefGo: {
+      /** @default */
+      package: string
+      /** @default */
+      version?: string
+      file?: components['schemas']['SocketRefFile']
+    }
+  }
+  responses: {
+    /** @description Bad request */
+    SocketBadRequest: {
+      content: {
+        'application/json': {
+          error: {
+            /** @default */
+            message: string
+            /** @default null */
+            details: Record | null
+          }
+        }
+      }
+    }
+    /** @description Unauthorized */
+    SocketUnauthorized: {
+      content: {
+        'application/json': {
+          error: {
+            /** @default */
+            message: string
+            /** @default null */
+            details: Record | null
+          }
+        }
+      }
+    }
+    /** @description Insufficient max_quota for API method */
+    SocketForbidden: {
+      content: {
+        'application/json': {
+          error: {
+            /** @default */
+            message: string
+            /** @default null */
+            details: Record | null
+          }
+        }
+      }
+    }
+    /** @description Resource not found */
+    SocketNotFoundResponse: {
+      content: {
+        'application/json': {
+          error: {
+            /** @default */
+            message: string
+            /** @default null */
+            details: Record | null
+          }
+        }
+      }
+    }
+    /** @description Insufficient quota for API route */
+    SocketTooManyRequestsResponse: {
+      headers: {
+        /**
+         * @description Retry contacting the endpoint *at least* after seconds.
+         * See https://tools.ietf.org/html/rfc7231#section-7.1.3
+         */
+        'Retry-After'?: number
+      }
+      content: {
+        'application/json': {
+          error: {
+            /** @default */
+            message: string
+            /** @default null */
+            details: Record | null
+          }
+        }
+      }
+    }
+    /** @description Internal server error */
+    SocketInternalServerError: {
+      content: {
+        'application/json': {
+          error: {
+            /** @default */
+            message: string
+            /** @default null */
+            details: Record | null
+          }
+        }
+      }
+    }
+    /** @description Resource already exists */
+    SocketConflict: {
+      content: {
+        'application/json': {
+          error: {
+            /** @default */
+            message: string
+            /** @default null */
+            details: Record | null
+          }
+        }
+      }
+    }
+    /** @description Gone */
+    SocketGone: {
+      content: {
+        'application/json': {
+          error: {
+            /** @default */
+            message: string
+            /** @default null */
+            details: Record | null
+          }
+        }
+      }
+    }
+  }
+  parameters: never
+  requestBodies: {}
+  headers: never
+  pathItems: never
+}
+
+export type $defs = Record
+
+export type external = Record
+
+export interface operations {
+  /**
+   * Get Packages by PURL
+   * @deprecated
+   * @description **This endpoint is deprecated.** Deprecated since 2026-01-05.
+   *
+   * Batch retrieval of package metadata and alerts by PURL strings. Compatible with CycloneDX reports.
+   *
+   * Package URLs (PURLs) are an ecosystem agnostic way to identify packages.
+   * CycloneDX SBOMs use the purl format to identify components.
+   * This endpoint supports fetching metadata and alerts for multiple packages at once by passing an array of purl strings, or by passing an entire CycloneDX report.
+   *
+   * **Note:** This endpoint has a batch size limit (default: 1024 PURLs per request). Requests exceeding this limit will return a 400 Bad Request error.
+   *
+   * More information on purl and CycloneDX:
+   *
+   * - [`purl` Spec](https://github.com/package-url/purl-spec)
+   * - [CycloneDX Spec](https://cyclonedx.org/specification/overview/#components)
+   *
+   * This endpoint returns the latest available alert data for artifacts in the batch (stale while revalidate).
+   * Actively running analysis will be returned when available on subsequent runs.
+   *
+   * ## Examples:
+   *
+   * ### Looking up an npm package:
+   *
+   * ```json
+   * {
+   *   "components": [
+   *     {
+   *       "purl": "pkg:npm/express@4.19.2"
+   *     }
+   *   ]
+   * }
+   * ```
+   *
+   * ### Looking up an PyPi package:
+   *
+   * ```json
+   * {
+   *   "components": [
+   *     {
+   *       "purl": "pkg:pypi/django@5.0.6"
+   *     }
+   *   ]
+   * }
+   * ```
+   *
+   * ### Looking up a Maven package:
+   *
+   * ```json
+   * {
+   *   "components": [
+   *     {
+   *       "purl": "pkg:maven/log4j/log4j@1.2.17"
+   *     }
+   *   ]
+   * }
+   * ```
+   *
+   * ### Batch lookup
+   *
+   * ```json
+   * {
+   *   "components": [
+   *     {
+   *       "purl": "pkg:npm/express@4.19.2"
+   *     },
+   *     {
+   *       "purl": "pkg:pypi/django@5.0.6"
+   *     },
+   *     {
+   *       "purl": "pkg:maven/log4j/log4j@1.2.17"
+   *     }
+   *   ]
+   * }
+   * ```
+   *
+   * This endpoint consumes 100 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - packages:list
+   */
+  batchPackageFetch: {
+    parameters: {
+      query?: {
+        /** @description Include alert metadata. */
+        alerts?: boolean
+        /** @description Include only alerts with comma separated actions defined by security policy. */
+        actions?: Array<'error' | 'monitor' | 'warn' | 'ignore'>
+        /** @description Compact metadata. When enabled, excludes metadata fields like author, scores, size, dependencies, and manifest files. Always includes: id, type, name, version, release, namespace, subpath, alerts, and alertPriorities. */
+        compact?: boolean
+        /** @description Include only fixable alerts. */
+        fixable?: boolean
+        /** @description Include license attribution data, including license text and author information. Maps attribution/license text to a list of data objects to which that attribution info applies. */
+        licenseattrib?: boolean
+        /** @description Include detailed license information, including location and match strength, for each license datum. */
+        licensedetails?: boolean
+        /** @description Return errors found with handling PURLs as error objects in the stream. */
+        purlErrors?: boolean
+        /** @description Return only cached results, do not attempt to scan new artifacts or rescan stale results. */
+        cachedResultsOnly?: boolean
+        /** @description Include a summary object at the end of the stream with counts of malformed, resolved, and not found PURLs. */
+        summary?: boolean
+        /** @description Maximum time in seconds to wait for scan results. PURLs that have not completed processing when the timeout is reached will be returned as errors (when purlErrors is enabled). Omit for no timeout. */
+        timeoutSec?: number
+      }
+    }
+    requestBody?: {
+      content: {
+        'application/json': components['schemas']['SocketOrgBatchPURLFetch']
+      }
+    }
+    responses: {
+      /** @description Socket issue lists and scores for all packages, and optional metadata objects */
+      200: {
+        content: {
+          'application/x-ndjson': components['schemas']['BatchPurlStreamSchema']
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Search dependencies
+   * @description Search for any dependency that is being used in your organization.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - No Scopes Required, but authentication is required
+   */
+  searchDependencies: {
+    requestBody?: {
+      content: {
+        'application/json': {
+          /** @default 50 */
+          limit: number
+          /** @default 0 */
+          offset: number
+          purls?: string[]
+        }
+      }
+    }
+    responses: {
+      /** @description Search dependencies response */
+      200: {
+        content: {
+          'application/json': {
+            /** @default false */
+            end: boolean
+            /** @default 1000 */
+            limit: number
+            /** @default 0 */
+            offset: number
+            purlFilters: {
+              valid: string[]
+              invalid: string[]
+            }
+            rows: Array<{
+              /** @default */
+              branch: string
+              /** @default false */
+              direct: boolean
+              /** @default */
+              id: string
+              /** @default */
+              name: string
+              /** @default */
+              repository: string
+              /** @default */
+              type: string
+              /** @default */
+              namespace?: string
+              /** @default */
+              version?: string
+              /** @default */
+              release?: string
+              /** @default */
+              workspace?: string
+            }>
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Create a snapshot of all dependencies from manifest information
+   * @deprecated
+   * @description **This endpoint is deprecated.**
+   *
+   * Upload a set of manifest or lockfiles to get your dependency tree analyzed by Socket.
+   * You can upload multiple lockfiles in the same request, but each filename must be unique.
+   *
+   * The name of the file must be in the supported list.
+   *
+   * For example, these are valid filenames: "requirements.txt", "package.json", "folder/package.json", and "deep/nested/folder/package.json".
+   *
+   * This endpoint consumes 100 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - report:write
+   */
+  createDependenciesSnapshot: {
+    parameters: {
+      query?: {
+        repository?: string
+        branch?: string
+      }
+    }
+    requestBody?: {
+      content: {
+        'multipart/form-data': {
+          /** @default */
+          repository?: string
+          /** @default */
+          branch?: string
+          [key: string]: undefined
+        }
+      }
+    }
+    responses: {
+      /** @description ID of the dependencies snapshot */
+      200: {
+        content: {
+          'application/json': Record
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      429: components['responses']['SocketTooManyRequestsResponse']
+      500: components['responses']['SocketInternalServerError']
+    }
+  }
+  /**
+   * List full scans
+   * @description Returns a paginated list of all full scans in an org, excluding SBOM artifacts.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - full-scans:list
+   */
+  getOrgFullScanList: {
+    parameters: {
+      query?: {
+        /** @description Specify Sort order. */
+        sort?: 'name' | 'created_at'
+        /** @description Specify sort direction. */
+        direction?: 'asc' | 'desc'
+        /** @description Specify the maximum number of results to return per page. */
+        per_page?: number
+        /** @description The page number to return when using offset-style pagination. Ignored when cursor pagination is used. */
+        page?: number
+        /** @description Cursor token for pagination. Pass the returned nextPageCursor from previous responses to fetch the next set of results. */
+        startAfterCursor?: string
+        /** @description Set to true on the first request to opt into cursor-based pagination. */
+        use_cursor?: boolean
+        /** @description A Unix timestamp in seconds that filters full-scans prior to the date. */
+        from?: string
+        /** @description A repository workspace to filter full-scans by. */
+        workspace?: string
+        /** @description A repository slug to filter full-scans by. */
+        repo?: string
+        /** @description A branch name to filter full-scans by. */
+        branch?: string
+        /** @description A PR number to filter full-scans by. */
+        pull_request?: string
+        /** @description A commit hash to filter full-scans by. */
+        commit_hash?: string
+        /** @description A scan type to filter full-scans by (e.g. socket, socket_tier1, socket_basics). */
+        scan_type?: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description Lists repositories for the specified organization. The authenticated user must be a member of the organization. */
+      200: {
+        content: {
+          'application/json': {
+            results: Array<{
+              /** @default */
+              id?: string
+              /** @default */
+              created_at?: string
+              /** @default */
+              updated_at?: string
+              /** @default */
+              organization_id?: string
+              /** @default */
+              organization_slug?: string
+              /** @default */
+              repository_id?: string
+              /** @default */
+              repository_slug?: string
+              /** @default */
+              branch?: string | null
+              /** @default */
+              commit_message?: string | null
+              /** @default */
+              commit_hash?: string | null
+              /** @default 0 */
+              pull_request?: number | null
+              committers?: string[]
+              /** @default */
+              html_url?: string | null
+              /** @default */
+              api_url?: string | null
+              /** @default */
+              workspace?: string
+              /** @default */
+              repo?: string
+              /** @default */
+              html_report_url?: string
+              /** @default */
+              integration_type?: string | null
+              /** @default */
+              integration_repo_url?: string
+              /** @default */
+              integration_branch_url?: string | null
+              /** @default */
+              integration_commit_url?: string | null
+              /** @default */
+              integration_pull_request_url?: string | null
+              /** @default */
+              scan_type?: string | null
+              /**
+               * @description The current processing status of the SBOM
+               * @default pending
+               * @enum {string|null}
+               */
+              scan_state?: 'pending' | 'precrawl' | 'resolve' | 'scan' | null
+            }>
+            /** @default */
+            nextPageCursor: string | null
+            /** @default 0 */
+            nextPage: number | null
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Create full scan
+   * @description Create a full scan from a set of package manifest files. Returns a full scan including all SBOM artifacts.
+   *
+   * To get a list of supported filetypes that can be uploaded in a full-scan, see the [Get supported file types](/reference/getsupportedfiles) endpoint.
+   *
+   * The maximum number of files you can upload at a time is 5000 and each file can be no bigger than 268 MB.
+   *
+   * **Query Parameters:**
+   * - `scan_type` (optional): The type of scan to perform. Defaults to 'socket'. Must be 32 characters or less. Used for categorizing multiple SBOM heads per repository branch.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - full-scans:create
+   */
+  CreateOrgFullScan: {
+    parameters: {
+      query: {
+        /** @description The slug of the repository to associate the full-scan with. */
+        repo: string
+        /** @description The workspace of the repository to associate the full-scan with. */
+        workspace?: string
+        /** @description The branch name to associate the full-scan with. Branch names must follow Git branch name rules: be 1–255 characters long; cannot be exactly @;  cannot begin or end with /, ., or .lock; cannot contain "//", "..", or "@{"; and cannot include control characters, spaces, or any of ~^:?*[. */
+        branch?: string
+        /** @description The commit message to associate the full-scan with. */
+        commit_message?: string
+        /** @description The commit hash to associate the full-scan with. */
+        commit_hash?: string
+        /** @description The pull request number to associate the full-scan with. */
+        pull_request?: number
+        /** @description The committers to associate with the full-scan. Set query more than once to set multiple. */
+        committers?: string
+        /** @description The integration type to associate the full-scan with. Defaults to "Api" if omitted. */
+        integration_type?:
+          | 'api'
+          | 'github'
+          | 'gitlab'
+          | 'bitbucket'
+          | 'azure'
+          | 'web'
+        /** @description The integration org slug to associate the full-scan with. If omitted, the Socket org name will be used. This is used to generate links and badges. */
+        integration_org_slug?: string
+        /** @description Set the default branch of the repository to the branch of this full-scan. A branch name is required with this option. */
+        make_default_branch?: boolean
+        /** @description Designate this full-scan as the latest scan of a given branch. Default branch head scans are included in org alerts. This is only supported on the default branch. A branch name is required with this option. */
+        set_as_pending_head?: boolean
+        /** @description Create a temporary full-scan that is not listed in the reports dashboard. Cannot be used when set_as_pending_head=true. */
+        tmp?: boolean
+        /** @description The type of scan to perform. Defaults to 'socket'. Must be 32 characters or less. Used for categorizing multiple SBOM heads per repository branch. */
+        scan_type?: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    requestBody?: {
+      content: {
+        'multipart/form-data': {
+          [key: string]: never
+        }
+      }
+    }
+    responses: {
+      /** @description The details of the created full scan. */
+      201: {
+        content: {
+          'application/json': {
+            /** @default */
+            id?: string
+            /** @default */
+            created_at?: string
+            /** @default */
+            updated_at?: string
+            /** @default */
+            organization_id?: string
+            /** @default */
+            organization_slug?: string
+            /** @default */
+            repository_id?: string
+            /** @default */
+            repository_slug?: string
+            /** @default */
+            branch?: string | null
+            /** @default */
+            commit_message?: string | null
+            /** @default */
+            commit_hash?: string | null
+            /** @default 0 */
+            pull_request?: number | null
+            committers?: string[]
+            /** @default */
+            html_url?: string | null
+            /** @default */
+            api_url?: string | null
+            /** @default */
+            workspace?: string
+            /** @default */
+            repo?: string
+            /** @default */
+            html_report_url?: string
+            /** @default */
+            integration_type?: string | null
+            /** @default */
+            integration_repo_url?: string
+            /** @default */
+            integration_branch_url?: string | null
+            /** @default */
+            integration_commit_url?: string | null
+            /** @default */
+            integration_pull_request_url?: string | null
+            /** @default */
+            scan_type?: string | null
+            /**
+             * @description The current processing status of the SBOM
+             * @default pending
+             * @enum {string|null}
+             */
+            scan_state?: 'pending' | 'precrawl' | 'resolve' | 'scan' | null
+            unmatchedFiles?: string[]
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Stream full scan
+   * @description Stream all SBOM artifacts for a full scan.
+   *
+   * This endpoint returns the latest, available alert data for artifacts in the full scan (stale while revalidate).
+   * Actively running analysis will be returned when available on subsequent runs.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - full-scans:list
+   */
+  getOrgFullScan: {
+    parameters: {
+      query: {
+        /** @description Control which alert priority fields to include in the response. Set to "true" to include all fields, "false" to exclude all fields, or specify individual fields like "components,formula" to include only those fields. */
+        include_alert_priority_details?:
+          | boolean
+          | Array<'component' | 'formula'>
+        /** @description Include scores event in the response. include_scores_details implies this flag */
+        include_scores: boolean
+        /** @description Control which score detail fields to include in the scores event. Set to "true" to include all fields, "false" to exclude all fields, or specify individual fields like "components,formula" to include only those fields. */
+        include_scores_details?: boolean | Array<'components' | 'formula'>
+        /** @description Include license details in the response. This can increase the response size significantly. */
+        include_license_details: boolean
+        /** @description Return cached immutable scan results. When enabled and results are cached, returns the pre-computed scan. When results are not yet cached, returns 202 Accepted and enqueues a background job. */
+        cached?: boolean
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The ID of the full scan */
+        full_scan_id: string
+      }
+    }
+    responses: {
+      /** @description Socket issue lists and scores for all packages, followed by a final scores event */
+      200: {
+        content: {
+          'application/x-ndjson':
+            | components['schemas']['SocketArtifact']
+            | {
+                /** @enum {string} */
+                _type: 'scores'
+                value: components['schemas']['SocketSBOMScore']
+              }
+        }
+      }
+      /** @description Scan is being processed. Poll again later to retrieve results. */
+      202: {
+        content: {
+          'application/json': {
+            /** @default processing */
+            status: string
+            /** @default */
+            id: string
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Delete full scan
+   * @description Delete an existing full scan.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - full-scans:delete
+   */
+  deleteOrgFullScan: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The ID of the full scan */
+        full_scan_id: string
+      }
+    }
+    responses: {
+      /** @description Success */
+      200: {
+        content: {
+          'application/json': {
+            /** @default ok */
+            status: string
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get full scan metadata
+   * @description Get metadata for a single full scan
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - full-scans:list
+   */
+  getOrgFullScanMetadata: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The ID of the full scan */
+        full_scan_id: string
+      }
+    }
+    responses: {
+      /** @description The data from the full scan */
+      200: {
+        content: {
+          'application/json': {
+            /** @default */
+            id?: string
+            /** @default */
+            created_at?: string
+            /** @default */
+            updated_at?: string
+            /** @default */
+            organization_id?: string
+            /** @default */
+            organization_slug?: string
+            /** @default */
+            repository_id?: string
+            /** @default */
+            repository_slug?: string
+            /** @default */
+            branch?: string | null
+            /** @default */
+            commit_message?: string | null
+            /** @default */
+            commit_hash?: string | null
+            /** @default 0 */
+            pull_request?: number | null
+            committers?: string[]
+            /** @default */
+            html_url?: string | null
+            /** @default */
+            api_url?: string | null
+            /** @default */
+            workspace?: string
+            /** @default */
+            repo?: string
+            /** @default */
+            html_report_url?: string
+            /** @default */
+            integration_type?: string | null
+            /** @default */
+            integration_repo_url?: string
+            /** @default */
+            integration_branch_url?: string | null
+            /** @default */
+            integration_commit_url?: string | null
+            /** @default */
+            integration_pull_request_url?: string | null
+            /** @default */
+            scan_type?: string | null
+            /**
+             * @description The current processing status of the SBOM
+             * @default pending
+             * @enum {string|null}
+             */
+            scan_state?: 'pending' | 'precrawl' | 'resolve' | 'scan' | null
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Diff Full Scans
+   * @deprecated
+   * @description **This endpoint is deprecated.**
+   *
+   * Get the difference between two existing Full Scans. The results are not persisted.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - full-scans:list
+   */
+  GetOrgDiffScan: {
+    parameters: {
+      query: {
+        /** @description The full scan ID of the base/target of the diff (older) */
+        after: string
+        /** @description The full scan ID of the head/changed side of the diff (newer) */
+        before: string
+        /** @description Include license details in the response. This can increase the response size significantly. */
+        include_license_details?: boolean
+        /** @description Omit unchanged artifacts from the response. When set to true, the unchanged field will be set to null. */
+        omit_unchanged?: boolean
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description The difference between the two provided Full Scans. */
+      200: {
+        content: {
+          'application/json': {
+            before: {
+              /** @default */
+              id: string
+              /** @default */
+              created_at: string
+              /** @default */
+              updated_at: string
+              /** @default */
+              organization_id: string
+              /** @default */
+              organization_slug: string
+              /** @default */
+              repository_id: string
+              /** @default */
+              repository_slug: string
+              /** @default */
+              branch: string | null
+              /** @default */
+              commit_message: string | null
+              /** @default */
+              commit_hash: string | null
+              /** @default 0 */
+              pull_request: number | null
+              committers: string[]
+              /** @default */
+              html_url: string | null
+              /** @default */
+              api_url: string | null
+            }
+            after: {
+              /** @default */
+              id: string
+              /** @default */
+              created_at: string
+              /** @default */
+              updated_at: string
+              /** @default */
+              organization_id: string
+              /** @default */
+              organization_slug: string
+              /** @default */
+              repository_id: string
+              /** @default */
+              repository_slug: string
+              /** @default */
+              branch: string | null
+              /** @default */
+              commit_message: string | null
+              /** @default */
+              commit_hash: string | null
+              /** @default 0 */
+              pull_request: number | null
+              committers: string[]
+              /** @default */
+              html_url: string | null
+              /** @default */
+              api_url: string | null
+            }
+            artifacts: {
+              added: Array
+              removed: Array
+              unchanged: Array<
+                components['schemas']['SocketDiffArtifact']
+              > | null
+              replaced: Array
+              updated: Array
+            }
+            /** @default false */
+            directDependenciesChanged: boolean
+            /** @default */
+            diff_report_url: string | null
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * SCM Comment for Scan Diff
+   * @deprecated
+   * @description **This endpoint is deprecated.**
+   *
+   * Get the dependency overview and dependency alert comments in GitHub flavored markdown between the diff between two existing full scans.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - full-scans:list
+   */
+  GetOrgFullScanDiffGfm: {
+    parameters: {
+      query: {
+        /** @description The head full scan ID (newer) */
+        after: string
+        /** @description The base full scan ID (older) */
+        before: string
+        /** @description The ID of the GitHub installation. This will be used to get the GitHub installation settings. If not provided, the default GitHub installation settings will be used. */
+        github_installation_id?: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description Metadata about the full scans and the dependency overview and dependency alert comment. Can be used in a pull request context. */
+      200: {
+        content: {
+          'application/json': {
+            before: {
+              /** @default */
+              id: string
+              /** @default */
+              created_at: string
+              /** @default */
+              updated_at: string
+              /** @default */
+              organization_id: string
+              /** @default */
+              organization_slug: string
+              /** @default */
+              repository_id: string
+              /** @default */
+              repository_slug: string
+              /** @default */
+              branch: string | null
+              /** @default */
+              commit_message: string | null
+              /** @default */
+              commit_hash: string | null
+              /** @default 0 */
+              pull_request: number | null
+              committers: string[]
+              /** @default */
+              html_url: string | null
+              /** @default */
+              api_url: string | null
+            }
+            after: {
+              /** @default */
+              id: string
+              /** @default */
+              created_at: string
+              /** @default */
+              updated_at: string
+              /** @default */
+              organization_id: string
+              /** @default */
+              organization_slug: string
+              /** @default */
+              repository_id: string
+              /** @default */
+              repository_slug: string
+              /** @default */
+              branch: string | null
+              /** @default */
+              commit_message: string | null
+              /** @default */
+              commit_hash: string | null
+              /** @default 0 */
+              pull_request: number | null
+              committers: string[]
+              /** @default */
+              html_url: string | null
+              /** @default */
+              api_url: string | null
+            }
+            comments: {
+              /** @default */
+              overview: string
+              /** @default */
+              alerts: string
+            }
+            /** @default false */
+            directDependenciesChanged: boolean
+            /** @default */
+            diff_report_url: string | null
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Download full scan files as tarball
+   * @description Download all files associated with a full scan in tar format.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - full-scans:list
+   */
+  downloadOrgFullScanFilesAsTar: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The ID of the full scan */
+        full_scan_id: string
+      }
+    }
+    responses: {
+      /** @description Tar archive of full scan files */
+      200: {
+        content: {
+          'application/x-tar': unknown
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Create full scan from archive
+   * @description Create a full scan by uploading one or more archives. Supported archive formats include **.tar**, **.tar.gz/.tgz**, and **.zip**.
+   *
+   * Each uploaded archive is extracted server-side and any supported manifest files (like package.json, package-lock.json, pnpm-lock.yaml, etc.) are ingested for the scan. If you upload multiple archives in a single request, the manifests from every archive are merged into one full scan. The response includes any files that were ignored.
+   *
+   * The maximum combined number of files extracted from your upload is 5000 and each extracted file can be no bigger than 268 MB.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - full-scans:create
+   */
+  CreateOrgFullScanArchive: {
+    parameters: {
+      query: {
+        /** @description The slug of the repository to associate the full-scan with. */
+        repo: string
+        /** @description The workspace of the repository to associate the full-scan with. */
+        workspace?: string
+        /** @description The branch name to associate the full-scan with. Branch names must follow Git branch name rules: be 1–255 characters long; cannot be exactly @;  cannot begin or end with /, ., or .lock; cannot contain "//", "..", or "@{"; and cannot include control characters, spaces, or any of ~^:?*[. */
+        branch?: string
+        /** @description The commit message to associate the full-scan with. */
+        commit_message?: string
+        /** @description The commit hash to associate the full-scan with. */
+        commit_hash?: string
+        /** @description The pull request number to associate the full-scan with. */
+        pull_request?: number
+        /** @description The committers to associate with the full-scan. Set query more than once to set multiple. */
+        committers?: string
+        /** @description The integration type to associate the full-scan with. Defaults to "Api" if omitted. */
+        integration_type?:
+          | 'api'
+          | 'github'
+          | 'gitlab'
+          | 'bitbucket'
+          | 'azure'
+          | 'web'
+        /** @description The integration org slug to associate the full-scan with. If omitted, the Socket org name will be used. This is used to generate links and badges. */
+        integration_org_slug?: string
+        /** @description Set the default branch of the repository to the branch of this full-scan. A branch name is required with this option. */
+        make_default_branch?: boolean
+        /** @description Designate this full-scan as the latest scan of a given branch. Default branch head scans are included in org alerts. This is only supported on the default branch. A branch name is required with this option. */
+        set_as_pending_head?: boolean
+        /** @description Create a temporary full-scan that is not listed in the reports dashboard. Cannot be used when set_as_pending_head=true. */
+        tmp?: boolean
+        /** @description The type of scan to perform. Defaults to 'socket'. Must be 32 characters or less. Used for categorizing multiple SBOM heads per repository branch. */
+        scan_type?: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    requestBody?: {
+      content: {
+        'multipart/form-data': {
+          [key: string]: never
+        }
+      }
+    }
+    responses: {
+      /** @description The details of the created full scan. */
+      201: {
+        content: {
+          'application/json': {
+            /** @default */
+            id?: string
+            /** @default */
+            created_at?: string
+            /** @default */
+            updated_at?: string
+            /** @default */
+            organization_id?: string
+            /** @default */
+            organization_slug?: string
+            /** @default */
+            repository_id?: string
+            /** @default */
+            repository_slug?: string
+            /** @default */
+            branch?: string | null
+            /** @default */
+            commit_message?: string | null
+            /** @default */
+            commit_hash?: string | null
+            /** @default 0 */
+            pull_request?: number | null
+            committers?: string[]
+            /** @default */
+            html_url?: string | null
+            /** @default */
+            api_url?: string | null
+            /** @default */
+            workspace?: string
+            /** @default */
+            repo?: string
+            /** @default */
+            html_report_url?: string
+            /** @default */
+            integration_type?: string | null
+            /** @default */
+            integration_repo_url?: string
+            /** @default */
+            integration_branch_url?: string | null
+            /** @default */
+            integration_commit_url?: string | null
+            /** @default */
+            integration_pull_request_url?: string | null
+            /** @default */
+            scan_type?: string | null
+            /**
+             * @description The current processing status of the SBOM
+             * @default pending
+             * @enum {string|null}
+             */
+            scan_state?: 'pending' | 'precrawl' | 'resolve' | 'scan' | null
+            unmatchedFiles?: string[]
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Rescan full scan
+   * @description Create a new full scan by rescanning an existing scan. A "shallow" rescan reapplies the latest policies to the previously cached dependency resolution results. A "deep" rescan reruns dependency resolution and applies the latest policies to the results.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - full-scans:create
+   */
+  rescanOrgFullScan: {
+    parameters: {
+      query?: {
+        /** @description The rescan mode: "shallow" (default) re-applies policies to cached data, "deep" re-fetches the SBOM stream. */
+        mode?: 'shallow' | 'deep'
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The ID of the full scan to rescan */
+        full_scan_id: string
+      }
+    }
+    responses: {
+      /** @description Rescan initiated successfully */
+      201: {
+        content: {
+          'application/json': {
+            /** @default The ID of the newly created full scan */
+            id: string
+            /** @default The status of the new scan */
+            status: string
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Export CSV of alerts for full scan
+   * @description Export a CSV file containing all alerts from a full scan.
+   *
+   * The CSV includes details about each alert and the affected packages.
+   * You can optionally filter using the request body "filters" array. Supported filter IDs include:
+   * - alert.action (error|warn|monitor|ignore)
+   * - alert.type
+   * - alert.category
+   * - alert.severity (low|medium|middle|high|critical or 0-3)
+   * - artifact.type (purl type, e.g. npm, pypi)
+   * - dependency.type (direct|transitive)
+   * - dependency.scope (dev|normal)
+   * - dependency.usage (used|unused)
+   * - manifest.file
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - full-scans:list
+   */
+  getOrgFullScanCsv: {
+    parameters: {
+      query: {
+        /** @description Control which alert priority fields to include in the response. Set to "true" to include all fields, "false" to exclude all fields, or specify individual fields like "components,formula" to include only those fields. */
+        include_alert_priority_details?:
+          | boolean
+          | Array<'component' | 'formula'>
+        /** @description Include license details in the response. */
+        include_license_details: boolean
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The ID of the full scan */
+        full_scan_id: string
+      }
+    }
+    requestBody?: {
+      content: {
+        'application/json': {
+          filters?: Array<{
+            /** @default */
+            id: string
+            value: string[]
+          }>
+        }
+      }
+    }
+    responses: {
+      /** @description CSV export of alerts */
+      200: {
+        content: {
+          'text/csv': unknown
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Generate PDF report for full scan
+   * @description Generate a PDF report for all alerts in a full scan.
+   *
+   * This endpoint streams a PDF document containing all alerts found in the full scan,
+   * with optional filtering and grouping options.
+   *
+   * Supported request body filter IDs include:
+   * - alert.action (error|warn|monitor|ignore)
+   * - alert.type
+   * - alert.category
+   * - alert.severity (low|medium|middle|high|critical or 0-3)
+   * - artifact.type (purl type, e.g. npm, pypi)
+   * - dependency.type (direct|transitive)
+   * - dependency.scope (dev|normal)
+   * - dependency.usage (used|unused)
+   * - manifest.file
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - full-scans:list
+   */
+  getOrgFullScanPdf: {
+    parameters: {
+      query: {
+        /** @description Control which alert priority fields to include in the response. Set to "true" to include all fields, "false" to exclude all fields, or specify individual fields like "components,formula" to include only those fields. */
+        include_alert_priority_details?:
+          | boolean
+          | Array<'component' | 'formula'>
+        /** @description Include license details in the response. */
+        include_license_details: boolean
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The ID of the full scan */
+        full_scan_id: string
+      }
+    }
+    requestBody?: {
+      content: {
+        'application/json': {
+          filters?: Array<{
+            /** @default */
+            id: string
+            value: string[]
+          }>
+          /** @default */
+          groupBy?: string
+          /** @default */
+          additionalInformation?: string
+        }
+      }
+    }
+    responses: {
+      /** @description PDF report of alerts */
+      200: {
+        content: {
+          'application/pdf': unknown
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Export CycloneDX SBOM (Beta)
+   * @description Export a Socket SBOM as a CycloneDX SBOM
+   *
+   * Supported ecosystems:
+   *
+   * - crates
+   * - go
+   * - maven
+   * - npm
+   * - nuget
+   * - pypi
+   * - rubygems
+   * - spdx
+   * - cdx
+   *
+   * Unsupported ecosystems are filtered from the export.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - report:read
+   */
+  exportCDX: {
+    parameters: {
+      query?: {
+        /**
+         * @description The person(s) who created the BOM.
+         * Set this value if you're intending the modify the BOM and claim authorship.
+         */
+        author?: string
+        /** @description Dependency track project group */
+        project_group?: string
+        /** @description Dependency track project name. Default use the directory name */
+        project_name?: string
+        /** @description Dependency track project version */
+        project_version?: string
+        /** @description Dependency track project id. Either provide the id or the project name and version together */
+        project_id?: string
+        /** @description Include vulnerability information in the SBOM. Also includes reachability/VEX if available */
+        include_vulnerabilities?: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The full scan OR sbom report ID */
+        id: string
+      }
+    }
+    responses: {
+      /** @description CycloneDX SBOM */
+      200: {
+        content: {
+          'application/json': components['schemas']['CDXManifestSchema']
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Export OpenVEX Document (Beta)
+   * @description Export vulnerability exploitability data as an OpenVEX v0.2.0 document.
+   *
+   * OpenVEX (Vulnerability Exploitability eXchange) documents communicate the
+   * exploitability status of vulnerabilities in software products. This export
+   * includes:
+   *
+   * - **Patch data**: Vulnerabilities fixed by applied Socket patches are marked as "fixed"
+   * - **Reachability analysis**: Code reachability determines if vulnerable code is exploitable:
+   * - Unreachable code → "not_affected" with justification
+   * - Reachable code → "affected"
+   * - Unknown/pending → "under_investigation"
+   *
+   * Each statement in the document represents a single artifact-vulnerability pair
+   * for granular reachability information.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - report:read
+   */
+  exportOpenVEX: {
+    parameters: {
+      query?: {
+        /** @description The author of the VEX document. Should be an individual or organization. */
+        author?: string
+        /** @description The role of the document author (e.g., "VEX Generator", "Security Team"). */
+        role?: string
+        /** @description Custom IRI for the VEX document. If not provided, a default IRI will be generated. */
+        document_id?: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The full scan OR sbom report ID */
+        id: string
+      }
+    }
+    responses: {
+      /** @description OpenVEX v0.2.0 document */
+      200: {
+        content: {
+          'application/json': components['schemas']['OpenVEXDocumentSchema']
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Export SPDX SBOM (Beta)
+   * @description Export a Socket SBOM as a SPDX SBOM
+   *
+   * Supported ecosystems:
+   *
+   * - crates
+   * - go
+   * - maven
+   * - npm
+   * - nuget
+   * - pypi
+   * - rubygems
+   * - spdx
+   * - cdx
+   *
+   * Unsupported ecosystems are filtered from the export.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - report:read
+   */
+  exportSPDX: {
+    parameters: {
+      query?: {
+        /**
+         * @description The person(s) who created the BOM.
+         * Set this value if you're intending the modify the BOM and claim authorship.
+         */
+        author?: string
+        /** @description Dependency track project group */
+        project_group?: string
+        /** @description Dependency track project name. Default use the directory name */
+        project_name?: string
+        /** @description Dependency track project version */
+        project_version?: string
+        /** @description Dependency track project id. Either provide the id or the project name and version together */
+        project_id?: string
+        /** @description Include vulnerability information in the SBOM. Also includes reachability/VEX if available */
+        include_vulnerabilities?: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The full scan OR sbom report ID */
+        id: string
+      }
+    }
+    responses: {
+      /** @description SPDX SBOM */
+      200: {
+        content: {
+          'application/json': components['schemas']['SPDXManifestSchema']
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * List diff scans
+   * @description Returns a paginated list of all diff scans in an organization.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - diff-scans:list
+   */
+  listOrgDiffScans: {
+    parameters: {
+      query?: {
+        /** @description Specify sort field. */
+        sort?: 'created_at' | 'updated_at'
+        /** @description Specify sort direction. */
+        direction?: 'asc' | 'desc'
+        /** @description Specify the maximum number of results to return per page. */
+        per_page?: number
+        /** @description Cursor for pagination. Use the next_cursor or prev_cursor from previous responses. */
+        cursor?: string
+        /** @description Filter by repository ID. */
+        repository_id?: string
+        /** @description Filter by before full scan ID. */
+        before_full_scan_id?: string
+        /** @description Filter by after full scan ID. */
+        after_full_scan_id?: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description Lists diff scans for the specified organization. */
+      200: {
+        content: {
+          'application/json': {
+            results: Array<{
+              /** @default */
+              id: string
+              /** @default */
+              organization_id: string
+              /** @default */
+              repository_id: string
+              /** @default */
+              created_at: string
+              /** @default */
+              updated_at: string
+              /** @default */
+              before_full_scan_id: string
+              /** @default */
+              after_full_scan_id: string
+              /** @default */
+              description: string | null
+              /** @default */
+              external_href: string | null
+              /** @default false */
+              merge: boolean
+              /** @default */
+              html_url: string | null
+              /** @default */
+              api_url: string | null
+            }>
+            /** @default */
+            next_page_href: string | null
+            /** @default */
+            next_cursor: string | null
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get diff scan
+   * @description Get the difference between two full scans from an existing diff scan resource.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - diff-scans:list
+   */
+  getDiffScanById: {
+    parameters: {
+      query?: {
+        /** @description Omit license details in the response. This can reduce the size of the response significantly, but will not include license information for the artifacts. */
+        omit_license_details?: boolean
+        /** @description Omit unchanged artifacts from the response. When set to true, the unchanged field will be set to null. */
+        omit_unchanged?: boolean
+        /** @description Return cached immutable scan results. When enabled and results are cached, returns the pre-computed scan. When results are not yet cached, returns 202 Accepted and enqueues a background job. Note: When cached=true, the omit_license_details parameter is ignored as cached results always includes license details. */
+        cached?: boolean
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The ID of the diff scan */
+        diff_scan_id: string
+      }
+    }
+    responses: {
+      /** @description The difference between the two Full Scans in the diff scan. */
+      200: {
+        content: {
+          'application/json': {
+            diff_scan: {
+              /** @default */
+              id: string
+              /** @default */
+              organization_id: string
+              /** @default */
+              repository_id: string
+              /** @default */
+              created_at: string
+              /** @default */
+              updated_at: string
+              before_full_scan: {
+                /** @default */
+                id: string
+                /** @default */
+                created_at: string
+                /** @default */
+                updated_at: string
+                /** @default */
+                organization_id: string
+                /** @default */
+                organization_slug: string
+                /** @default */
+                repository_id: string
+                /** @default */
+                repository_slug: string
+                /** @default */
+                branch: string | null
+                /** @default */
+                commit_message: string | null
+                /** @default */
+                commit_hash: string | null
+                /** @default 0 */
+                pull_request: number | null
+                committers: string[]
+                /** @default */
+                html_url: string | null
+                /** @default */
+                api_url: string | null
+              }
+              after_full_scan: {
+                /** @default */
+                id: string
+                /** @default */
+                created_at: string
+                /** @default */
+                updated_at: string
+                /** @default */
+                organization_id: string
+                /** @default */
+                organization_slug: string
+                /** @default */
+                repository_id: string
+                /** @default */
+                repository_slug: string
+                /** @default */
+                branch: string | null
+                /** @default */
+                commit_message: string | null
+                /** @default */
+                commit_hash: string | null
+                /** @default 0 */
+                pull_request: number | null
+                committers: string[]
+                /** @default */
+                html_url: string | null
+                /** @default */
+                api_url: string | null
+              }
+              /** @default */
+              description: string | null
+              /** @default */
+              external_href: string | null
+              /** @default false */
+              merge: boolean
+              /** @default */
+              html_url: string | null
+              /** @default */
+              api_url: string | null
+              artifacts: {
+                added: Array
+                removed: Array
+                unchanged: Array<
+                  components['schemas']['SocketDiffArtifact']
+                > | null
+                replaced: Array
+                updated: Array
+              }
+            }
+          }
+        }
+      }
+      /** @description Scan is being processed. Poll again later to retrieve results. */
+      202: {
+        content: {
+          'application/json': {
+            /** @default processing */
+            status: string
+            /** @default */
+            id: string
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Delete diff scan
+   * @description Delete an existing diff scan.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - diff-scans:delete
+   */
+  deleteOrgDiffScan: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The ID of the diff scan */
+        diff_scan_id: string
+      }
+    }
+    responses: {
+      /** @description Success */
+      200: {
+        content: {
+          'application/json': {
+            /** @default ok */
+            status: string
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * SCM Comment for Diff Scan
+   * @description Get the dependency overview and dependency alert comments in GitHub flavored markdown for an existing diff scan.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - diff-scans:list
+   */
+  GetDiffScanGfm: {
+    parameters: {
+      query?: {
+        /** @description The ID of the GitHub installation. This will be used to get the GitHub installation settings. If not provided, the default GitHub installation settings will be used. */
+        github_installation_id?: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The ID of the diff scan */
+        diff_scan_id: string
+      }
+    }
+    responses: {
+      /** @description Metadata about the full scans and the dependency overview and dependency alert comment. Can be used in a pull request context. */
+      200: {
+        content: {
+          'application/json': {
+            diff_scan: {
+              /** @default */
+              id: string
+              /** @default */
+              organization_id: string
+              /** @default */
+              repository_id: string
+              /** @default */
+              created_at: string
+              /** @default */
+              updated_at: string
+              before_full_scan: {
+                /** @default */
+                id: string
+                /** @default */
+                created_at: string
+                /** @default */
+                updated_at: string
+                /** @default */
+                organization_id: string
+                /** @default */
+                organization_slug: string
+                /** @default */
+                repository_id: string
+                /** @default */
+                repository_slug: string
+                /** @default */
+                branch: string | null
+                /** @default */
+                commit_message: string | null
+                /** @default */
+                commit_hash: string | null
+                /** @default 0 */
+                pull_request: number | null
+                committers: string[]
+                /** @default */
+                html_url: string | null
+                /** @default */
+                api_url: string | null
+              }
+              after_full_scan: {
+                /** @default */
+                id: string
+                /** @default */
+                created_at: string
+                /** @default */
+                updated_at: string
+                /** @default */
+                organization_id: string
+                /** @default */
+                organization_slug: string
+                /** @default */
+                repository_id: string
+                /** @default */
+                repository_slug: string
+                /** @default */
+                branch: string | null
+                /** @default */
+                commit_message: string | null
+                /** @default */
+                commit_hash: string | null
+                /** @default 0 */
+                pull_request: number | null
+                committers: string[]
+                /** @default */
+                html_url: string | null
+                /** @default */
+                api_url: string | null
+              }
+              /** @default */
+              description: string | null
+              /** @default */
+              external_href: string | null
+              /** @default false */
+              merge: boolean
+              /** @default */
+              html_url: string | null
+              /** @default */
+              api_url: string | null
+              gfm: {
+                /** @default */
+                overview: string
+                /** @default */
+                alerts: string
+              }
+            }
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Create diff scan from repository HEAD full-scan
+   * @description Create a diff scan between the repository's current HEAD full scan and a new full scan from uploaded manifest files.
+   * Returns metadata about the diff scan. Once the diff scan is created, fetch the diff scan from
+   * the [api_url](/reference/getDiffScanById) URL to get the contents of the diff.
+   *
+   * The maximum number of files you can upload at a time is 5000 and each file can be no bigger than 268 MB.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   *       - repo:list
+   * - diff-scans:create
+   * - full-scans:create
+   */
+  createOrgRepoDiff: {
+    parameters: {
+      query?: {
+        /** @description A description of the diff scan. This will be used in the diff report and can be used to provide context for the changes made. */
+        description?: string
+        /** @description An external URL to associate with the diff scan. This can be a link to a pull request, issue, or any other relevant resource. */
+        external_href?: string
+        /** @description The branch name to associate the new full-scan with. Branch names must follow Git branch name rules: be 1–255 characters long; cannot be exactly @;  cannot begin or end with /, ., or .lock; cannot contain "//", "..", or "@{"; and cannot include control characters, spaces, or any of ~^:?*[. */
+        branch?: string
+        /** @description The commit message to associate the new full-scan with. */
+        commit_message?: string
+        /** @description The commit hash to associate the full-scan with. */
+        commit_hash?: string
+        /** @description The pull request number to associate the new full-scan with. */
+        pull_request?: number
+        /** @description The committers to associate the new full-scan with. Set query more than once to set multiple committers. */
+        committers?: string
+        /** @description The integration type to associate the new full-scan with. Defaults to "api" if omitted. */
+        integration_type?:
+          | 'api'
+          | 'github'
+          | 'gitlab'
+          | 'bitbucket'
+          | 'azure'
+          | 'web'
+        /** @description The integration org slug to associate the new full-scan with. If omitted, the Socket org name will be used. This is used to generate links and badges. */
+        integration_org_slug?: string
+        /** @description Set to true when running a diff between a merged commit and its parent commit in the same branch. Set to false when running diffs in an open PR between unmerged commits. */
+        merge?: boolean
+        /** @description The workspace of the repository. */
+        workspace?: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The slug of the repository */
+        repo_slug: string
+      }
+    }
+    requestBody?: {
+      content: {
+        'multipart/form-data': {
+          [key: string]: never
+        }
+      }
+    }
+    responses: {
+      /** @description The details of the new full scan and diff scan between the two scans. */
+      201: {
+        content: {
+          'application/json': {
+            diff_scan: {
+              /** @default */
+              id: string
+              /** @default */
+              organization_id: string
+              /** @default */
+              repository_id: string
+              /** @default */
+              created_at: string
+              /** @default */
+              updated_at: string
+              before_full_scan: {
+                /** @default */
+                id: string
+                /** @default */
+                created_at: string
+                /** @default */
+                updated_at: string
+                /** @default */
+                organization_id: string
+                /** @default */
+                organization_slug: string
+                /** @default */
+                repository_id: string
+                /** @default */
+                repository_slug: string
+                /** @default */
+                branch: string | null
+                /** @default */
+                commit_message: string | null
+                /** @default */
+                commit_hash: string | null
+                /** @default 0 */
+                pull_request: number | null
+                committers: string[]
+                /** @default */
+                html_url: string | null
+                /** @default */
+                api_url: string | null
+              }
+              after_full_scan: {
+                /** @default */
+                id: string
+                /** @default */
+                created_at: string
+                /** @default */
+                updated_at: string
+                /** @default */
+                organization_id: string
+                /** @default */
+                organization_slug: string
+                /** @default */
+                repository_id: string
+                /** @default */
+                repository_slug: string
+                /** @default */
+                branch: string | null
+                /** @default */
+                commit_message: string | null
+                /** @default */
+                commit_hash: string | null
+                /** @default 0 */
+                pull_request: number | null
+                committers: string[]
+                /** @default */
+                html_url: string | null
+                /** @default */
+                api_url: string | null
+              }
+              /** @default */
+              description: string | null
+              /** @default */
+              external_href: string | null
+              /** @default false */
+              merge: boolean
+              /** @default */
+              html_url: string | null
+              /** @default */
+              api_url: string | null
+            }
+            unmatchedAfterFiles: string[]
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      409: components['responses']['SocketConflict']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Create diff scan from full scan IDs
+   * @description Create a diff scan from two existing full scan IDs. The full scans must be in the same repository.
+   * Returns metadata about the diff scan. Once the diff scan is created, fetch the diff scan from
+   * the [api_url](/reference/getDiffScanById) URL to get the contents of the diff.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   *       - diff-scans:create
+   * - full-scans:list
+   */
+  createOrgDiffScanFromIds: {
+    parameters: {
+      query: {
+        /** @description The ID of the before/base full scan (older) */
+        before: string
+        /** @description The ID of the after/head full scan (newer) */
+        after: string
+        /** @description A description of the diff scan. This will be used in the diff report and can be used to provide context for the changes made. */
+        description?: string
+        /** @description An external URL to associate with the diff scan. This can be a link to a pull request, issue, or any other relevant resource. */
+        external_href?: string
+        /** @description Set to true when running a diff between a merged commit and its parent commit in the same branch. Set to false when running diffs in an open PR between unmerged commits. */
+        merge?: boolean
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description The details of the created diff scan. */
+      201: {
+        content: {
+          'application/json': {
+            diff_scan: {
+              /** @default */
+              id: string
+              /** @default */
+              organization_id: string
+              /** @default */
+              repository_id: string
+              /** @default */
+              created_at: string
+              /** @default */
+              updated_at: string
+              before_full_scan: {
+                /** @default */
+                id: string
+                /** @default */
+                created_at: string
+                /** @default */
+                updated_at: string
+                /** @default */
+                organization_id: string
+                /** @default */
+                organization_slug: string
+                /** @default */
+                repository_id: string
+                /** @default */
+                repository_slug: string
+                /** @default */
+                branch: string | null
+                /** @default */
+                commit_message: string | null
+                /** @default */
+                commit_hash: string | null
+                /** @default 0 */
+                pull_request: number | null
+                committers: string[]
+                /** @default */
+                html_url: string | null
+                /** @default */
+                api_url: string | null
+              }
+              after_full_scan: {
+                /** @default */
+                id: string
+                /** @default */
+                created_at: string
+                /** @default */
+                updated_at: string
+                /** @default */
+                organization_id: string
+                /** @default */
+                organization_slug: string
+                /** @default */
+                repository_id: string
+                /** @default */
+                repository_slug: string
+                /** @default */
+                branch: string | null
+                /** @default */
+                commit_message: string | null
+                /** @default */
+                commit_hash: string | null
+                /** @default 0 */
+                pull_request: number | null
+                committers: string[]
+                /** @default */
+                html_url: string | null
+                /** @default */
+                api_url: string | null
+              }
+              /** @default */
+              description: string | null
+              /** @default */
+              external_href: string | null
+              /** @default false */
+              merge: boolean
+              /** @default */
+              html_url: string | null
+              /** @default */
+              api_url: string | null
+            }
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      409: components['responses']['SocketConflict']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * List Org Alert Triage
+   * @description List triage actions for an organization. Results are paginated and can be sorted by created_at or updated_at.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - triage:alerts-list
+   */
+  getOrgTriage: {
+    parameters: {
+      query?: {
+        /** @description Field to sort by. One of: created_at, updated_at. */
+        sort?: string
+        /** @description Sort direction. One of: asc, desc. */
+        direction?: string
+        /** @description Number of results per page (1–100, default 30). */
+        per_page?: number
+        /** @description Page number (1-based). */
+        page?: number
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description Lists triage actions for the specified organization. */
+      200: {
+        content: {
+          'application/json': {
+            results: Array<{
+              /**
+               * @description The uuid of the triage action
+               * @default
+               */
+              uuid?: string | null
+              /**
+               * @description The package type associated with the triage state
+               * @default
+               */
+              package_type?: string | null
+              /**
+               * @description The package namespace associated with the triage state
+               * @default
+               */
+              package_namespace?: string | null
+              /**
+               * @description The package name associated with the triage state
+               * @default
+               */
+              package_name?: string | null
+              /**
+               * @description The package version associated with the triage state, it can contain a * suffix for wildcard matching
+               * @default
+               */
+              package_version?: string | null
+              /**
+               * @description The alert_key associated with the triage state
+               * @default
+               */
+              alert_key?: string | null
+              /**
+               * @description The alert type (e.g., criticalCVE, highCVE) associated with the triage state
+               * @default
+               */
+              alert_type?: string | null
+              /**
+               * @description Whether a fix must be available, unavailable, or * for any
+               * @default *
+               * @enum {string|null}
+               */
+              fix_available?: 'available' | 'unavailable' | '*' | null
+              /**
+               * @description Whether a patch must be available, unavailable, or * for any
+               * @default *
+               * @enum {string|null}
+               */
+              patch_available?: 'available' | 'unavailable' | '*' | null
+              /**
+               * @description CVSS score comparison (e.g., >=7.5, >5.0, ==8.0)
+               * @default
+               */
+              cvss_score_cmp?: string | null
+              /**
+               * @description The creation date of the triage action
+               * @default
+               */
+              created_at?: string
+              /**
+               * @description The last update date of the triage action
+               * @default
+               */
+              updated_at?: string
+              /**
+               * @description The note associated with the triage action
+               * @default
+               */
+              note?: string
+              /**
+               * @description The organization id associated with the triage action
+               * @default
+               */
+              organization_id?: string
+              /**
+               * @description The triage state of the alert
+               * @default inherit
+               * @enum {string}
+               */
+              state?: 'block' | 'ignore' | 'inherit' | 'monitor' | 'warn'
+              /**
+               * @description CVE or GHSA ID associated with the triage state
+               * @default
+               */
+              cve_or_ghsa_id?: string | null
+              /**
+               * @description The reachability of the alert, can be reachable, unreachable, other, or * for any
+               * @default *
+               * @enum {string|null}
+               */
+              reachability?: 'reachable' | 'unreachable' | 'other' | '*' | null
+              /**
+               * @description Whether the alert has a CISA KEV (Known Exploited Vulnerability), can be exist, none, or * for any
+               * @default *
+               * @enum {string|null}
+               */
+              kevs?: 'exist' | 'none' | '*' | null
+            }>
+            /** @default 0 */
+            nextPage: number | null
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Create/Update Org Alert Triage
+   * @description Create or update triage actions on organization alerts. Accepts a batch of triage entries. Omit `uuid` to create a new entry; provide an existing `uuid` to update it. Use `?force=true` for broad triages that lack a specific `alertKey` or granular package information.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - triage:alerts-update
+   */
+  updateOrgAlertTriage: {
+    parameters: {
+      query?: {
+        /** @description Set to true to force broad triage updates, these are triages lacking a specific alertKey or granular artifact information which may have limited introspection to see what they apply to. */
+        force?: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    requestBody?: {
+      content: {
+        'application/json': {
+          alertTriage: Array<{
+            /**
+             * @description The UUID of the triage entry. Omit to create a new entry; provide to update an existing one.
+             * @default
+             */
+            uuid?: string | null
+            /**
+             * @description The package ecosystem type (e.g., npm, pypi). Use null or "*" for wildcard.
+             * @default
+             */
+            packageType?: string | null
+            /**
+             * @description The package namespace or scope. Use null or "*" for wildcard.
+             * @default
+             */
+            packageNamespace?: string | null
+            /**
+             * @description The package name. Use null or "*" for wildcard.
+             * @default
+             */
+            packageName?: string | null
+            /**
+             * @description The package version. Supports a "*" suffix for wildcard prefix matching. Use null for any version.
+             * @default
+             */
+            packageVersion?: string | null
+            /**
+             * @description The specific alert key to target.
+             * @default
+             */
+            alertKey?: string | null
+            /**
+             * @description The alert type (e.g., criticalCVE, highCVE).
+             * @default
+             */
+            alertType?: string | null
+            /**
+             * @description Whether a fix is available, unavailable, or * for any
+             * @enum {string}
+             */
+            fixAvailable?: 'available' | 'unavailable' | '*'
+            /**
+             * @description Whether a patch is available, unavailable, or * for any
+             * @enum {string}
+             */
+            patchAvailable?: 'available' | 'unavailable' | '*'
+            /**
+             * @description Whether the alert has a CISA KEV, can be exist, none, or * for any
+             * @enum {string}
+             */
+            kevs?: 'exist' | 'none' | '*'
+            /**
+             * @description CVE or GHSA ID to match against.
+             * @default
+             */
+            cveOrGhsaId?: string | null
+            /**
+             * @description The reachability of the alert, can be reachable, unreachable, other, or * for any
+             * @enum {string}
+             */
+            reachability?: 'reachable' | 'unreachable' | 'other' | '*'
+            /**
+             * @description CVSS score comparison operator and value (e.g., >=7.5, >5.0, ==8.0).
+             * @default
+             */
+            cvssScoreCmp?: string | null
+            /**
+             * @description A note or comment for the triage action.
+             * @default
+             */
+            note?: string
+            /**
+             * @description The triage state of the alert
+             * @enum {string}
+             */
+            state?: 'block' | 'ignore' | 'inherit' | 'monitor' | 'warn'
+          }>
+        }
+      }
+    }
+    responses: {
+      /** @description Updated Alert Triage */
+      200: {
+        content: {
+          'application/json': {
+            /** @default */
+            result: string
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Delete Org Alert Triage
+   * @description Delete a specific triage rule by UUID.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - triage:alerts-update
+   */
+  deleteOrgAlertTriage: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The UUID of the alert triage entry to delete */
+        uuid: string
+      }
+    }
+    responses: {
+      /** @description Deleted Alert Triage */
+      200: {
+        content: {
+          'application/json': {
+            /** @default */
+            result: string
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * List repositories
+   * @description Lists repositories for the specified organization.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - repo:list
+   */
+  getOrgRepoList: {
+    parameters: {
+      query?: {
+        sort?: string
+        direction?: string
+        per_page?: number
+        page?: number
+        /** @description Include archived repositories in the results */
+        include_archived?: boolean
+        /** @description Filter repositories by workspace. When provided (including empty string), only repos in that workspace are returned. */
+        workspace?: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description Lists repositories for the specified organization. The authenticated user must be a member of the organization. */
+      200: {
+        content: {
+          'application/json': {
+            results: Array<{
+              /**
+               * @description The ID of the repository
+               * @default
+               */
+              id?: string
+              /**
+               * @description The creation date of the repository
+               * @default
+               */
+              created_at?: string
+              /**
+               * @description The last update date of the repository
+               * @default
+               */
+              updated_at?: string
+              /**
+               * @description The slug of the repository
+               * @default
+               */
+              slug?: string
+              /**
+               * @description The ID of the head full scan of the repository
+               * @default
+               */
+              head_full_scan_id?: string | null
+              integration_meta?: {
+                /** @enum {string} */
+                type?: 'github'
+                value?: {
+                  /**
+                   * @description The GitHub installation_id of the active associated Socket GitHub App
+                   * @default
+                   */
+                  installation_id: string
+                  /**
+                   * @description The GitHub login name that the active Socket GitHub App installation is installed to
+                   * @default
+                   */
+                  installation_login: string
+                  /**
+                   * @description The name of the associated GitHub repo.
+                   * @default
+                   */
+                  repo_name: string | null
+                  /**
+                   * @description The id of the associated GitHub repo.
+                   * @default
+                   */
+                  repo_id: string | null
+                }
+              } | null
+              /**
+               * @description The name of the repository
+               * @default
+               */
+              name?: string
+              /**
+               * @description The description of the repository
+               * @default
+               */
+              description?: string | null
+              /**
+               * @description The homepage URL of the repository
+               * @default
+               */
+              homepage?: string | null
+              /**
+               * @description The visibility of the repository
+               * @default private
+               * @enum {string}
+               */
+              visibility?: 'public' | 'private'
+              /**
+               * @description Whether the repository is archived or not
+               * @default false
+               */
+              archived?: boolean
+              /**
+               * @description The default branch of the repository
+               * @default main
+               */
+              default_branch?: string | null
+              /**
+               * @description The workspace of the repository
+               * @default
+               */
+              workspace?: string
+            }>
+            /** @default 0 */
+            nextPage: number | null
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Create repository
+   * @description Create a repository.
+   *
+   * Repos collect Full scans and Diff scans and are typically associated with a git repo.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - repo:create
+   */
+  createOrgRepo: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    requestBody?: {
+      content: {
+        'application/json': {
+          /**
+           * @description The name of the repository
+           * @default
+           */
+          name?: string
+          /**
+           * @description The description of the repository
+           * @default
+           */
+          description?: string | null
+          /**
+           * @description The homepage URL of the repository
+           * @default
+           */
+          homepage?: string | null
+          /**
+           * @description The visibility of the repository
+           * @default private
+           * @enum {string}
+           */
+          visibility?: 'public' | 'private'
+          /**
+           * @description Whether the repository is archived or not
+           * @default false
+           */
+          archived?: boolean
+          /**
+           * @description The default branch of the repository
+           * @default main
+           */
+          default_branch?: string | null
+          /**
+           * @description The workspace of the repository
+           * @default
+           */
+          workspace?: string
+        }
+      }
+    }
+    responses: {
+      /** @description Lists repositories for the specified organization. The authenticated user must be a member of the organization. */
+      201: {
+        content: {
+          'application/json': {
+            /**
+             * @description The ID of the repository
+             * @default
+             */
+            id?: string
+            /**
+             * @description The creation date of the repository
+             * @default
+             */
+            created_at?: string
+            /**
+             * @description The last update date of the repository
+             * @default
+             */
+            updated_at?: string
+            /**
+             * @description The slug of the repository
+             * @default
+             */
+            slug?: string
+            /**
+             * @description The ID of the head full scan of the repository
+             * @default
+             */
+            head_full_scan_id?: string | null
+            integration_meta?: {
+              /** @enum {string} */
+              type?: 'github'
+              value?: {
+                /**
+                 * @description The GitHub installation_id of the active associated Socket GitHub App
+                 * @default
+                 */
+                installation_id: string
+                /**
+                 * @description The GitHub login name that the active Socket GitHub App installation is installed to
+                 * @default
+                 */
+                installation_login: string
+                /**
+                 * @description The name of the associated GitHub repo.
+                 * @default
+                 */
+                repo_name: string | null
+                /**
+                 * @description The id of the associated GitHub repo.
+                 * @default
+                 */
+                repo_id: string | null
+              }
+            } | null
+            /**
+             * @description The name of the repository
+             * @default
+             */
+            name?: string
+            /**
+             * @description The description of the repository
+             * @default
+             */
+            description?: string | null
+            /**
+             * @description The homepage URL of the repository
+             * @default
+             */
+            homepage?: string | null
+            /**
+             * @description The visibility of the repository
+             * @default private
+             * @enum {string}
+             */
+            visibility?: 'public' | 'private'
+            /**
+             * @description Whether the repository is archived or not
+             * @default false
+             */
+            archived?: boolean
+            /**
+             * @description The default branch of the repository
+             * @default main
+             */
+            default_branch?: string | null
+            /**
+             * @description The workspace of the repository
+             * @default
+             */
+            workspace?: string
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get repository
+   * @description Retrieve a repository associated with an organization.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - repo:list
+   */
+  getOrgRepo: {
+    parameters: {
+      query?: {
+        /** @description The workspace of the repository */
+        workspace?: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The slug of the repository */
+        repo_slug: string
+      }
+    }
+    responses: {
+      /** @description Lists repositories for the specified organization. The authenticated user must be a member of the organization. */
+      200: {
+        content: {
+          'application/json': {
+            /**
+             * @description The ID of the repository
+             * @default
+             */
+            id: string
+            /**
+             * @description The creation date of the repository
+             * @default
+             */
+            created_at: string
+            /**
+             * @description The last update date of the repository
+             * @default
+             */
+            updated_at: string
+            /**
+             * @description The slug of the repository
+             * @default
+             */
+            slug: string
+            /**
+             * @description The ID of the head full scan of the repository
+             * @default
+             */
+            head_full_scan_id: string | null
+            integration_meta: {
+              /** @enum {string} */
+              type?: 'github'
+              value?: {
+                /**
+                 * @description The GitHub installation_id of the active associated Socket GitHub App
+                 * @default
+                 */
+                installation_id: string
+                /**
+                 * @description The GitHub login name that the active Socket GitHub App installation is installed to
+                 * @default
+                 */
+                installation_login: string
+                /**
+                 * @description The name of the associated GitHub repo.
+                 * @default
+                 */
+                repo_name: string | null
+                /**
+                 * @description The id of the associated GitHub repo.
+                 * @default
+                 */
+                repo_id: string | null
+              }
+            } | null
+            /**
+             * @description The name of the repository
+             * @default
+             */
+            name: string
+            /**
+             * @description The description of the repository
+             * @default
+             */
+            description: string | null
+            /**
+             * @description The homepage URL of the repository
+             * @default
+             */
+            homepage: string | null
+            /**
+             * @description The visibility of the repository
+             * @default private
+             * @enum {string}
+             */
+            visibility: 'public' | 'private'
+            /**
+             * @description Whether the repository is archived or not
+             * @default false
+             */
+            archived: boolean
+            /**
+             * @description The default branch of the repository
+             * @default main
+             */
+            default_branch: string | null
+            /**
+             * @description The workspace of the repository
+             * @default
+             */
+            workspace: string
+            /**
+             * @description The slug of the repository. This typo is intentionally preserved for backwards compatibility reasons.
+             * @default
+             */
+            slig: string
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Update repository
+   * @description Update details of an existing repository.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - repo:update
+   */
+  updateOrgRepo: {
+    parameters: {
+      query?: {
+        /** @description The workspace of the repository */
+        workspace?: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The slug of the repository */
+        repo_slug: string
+      }
+    }
+    requestBody?: {
+      content: {
+        'application/json': {
+          /**
+           * @description The name of the repository
+           * @default
+           */
+          name?: string
+          /**
+           * @description The description of the repository
+           * @default
+           */
+          description?: string | null
+          /**
+           * @description The homepage URL of the repository
+           * @default
+           */
+          homepage?: string | null
+          /**
+           * @description The visibility of the repository
+           * @default private
+           * @enum {string}
+           */
+          visibility?: 'public' | 'private'
+          /**
+           * @description Whether the repository is archived or not
+           * @default false
+           */
+          archived?: boolean
+          /**
+           * @description The default branch of the repository
+           * @default main
+           */
+          default_branch?: string | null
+          /**
+           * @description The workspace of the repository
+           * @default
+           */
+          workspace?: string
+        }
+      }
+    }
+    responses: {
+      /** @description Updated repository details */
+      200: {
+        content: {
+          'application/json': {
+            /**
+             * @description The ID of the repository
+             * @default
+             */
+            id?: string
+            /**
+             * @description The creation date of the repository
+             * @default
+             */
+            created_at?: string
+            /**
+             * @description The last update date of the repository
+             * @default
+             */
+            updated_at?: string
+            /**
+             * @description The slug of the repository
+             * @default
+             */
+            slug?: string
+            /**
+             * @description The ID of the head full scan of the repository
+             * @default
+             */
+            head_full_scan_id?: string | null
+            integration_meta?: {
+              /** @enum {string} */
+              type?: 'github'
+              value?: {
+                /**
+                 * @description The GitHub installation_id of the active associated Socket GitHub App
+                 * @default
+                 */
+                installation_id: string
+                /**
+                 * @description The GitHub login name that the active Socket GitHub App installation is installed to
+                 * @default
+                 */
+                installation_login: string
+                /**
+                 * @description The name of the associated GitHub repo.
+                 * @default
+                 */
+                repo_name: string | null
+                /**
+                 * @description The id of the associated GitHub repo.
+                 * @default
+                 */
+                repo_id: string | null
+              }
+            } | null
+            /**
+             * @description The name of the repository
+             * @default
+             */
+            name?: string
+            /**
+             * @description The description of the repository
+             * @default
+             */
+            description?: string | null
+            /**
+             * @description The homepage URL of the repository
+             * @default
+             */
+            homepage?: string | null
+            /**
+             * @description The visibility of the repository
+             * @default private
+             * @enum {string}
+             */
+            visibility?: 'public' | 'private'
+            /**
+             * @description Whether the repository is archived or not
+             * @default false
+             */
+            archived?: boolean
+            /**
+             * @description The default branch of the repository
+             * @default main
+             */
+            default_branch?: string | null
+            /**
+             * @description The workspace of the repository
+             * @default
+             */
+            workspace?: string
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Delete repository
+   * @description Delete a single repository and all of its associated Full scans and Diff scans.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - repo:delete
+   */
+  deleteOrgRepo: {
+    parameters: {
+      query?: {
+        /** @description The workspace of the repository */
+        workspace?: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The slug of the repository */
+        repo_slug: string
+      }
+    }
+    responses: {
+      /** @description Success */
+      200: {
+        content: {
+          'application/json': {
+            /** @default ok */
+            status: string
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Associate repository label (beta)
+   * @description Associate a repository label with a repository.
+   *
+   * Labels can be used to group and organize repositories and to apply security/license policies.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - repo-label:update
+   */
+  associateOrgRepoLabel: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The ID of the label */
+        label_id: string
+      }
+    }
+    requestBody?: {
+      content: {
+        'application/json': {
+          /**
+           * @description The ID of the repository to associate with the label
+           * @default
+           */
+          repository_id?: string
+        }
+      }
+    }
+    responses: {
+      /** @description Associates a repository label with the specified repository. The authenticated user must be a member of the organization. */
+      200: {
+        content: {
+          'application/json': {
+            /**
+             * @description Status of the operation
+             * @default
+             */
+            status?: string
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * List repository labels (beta)
+   * @description Lists repository labels for the specified organization.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - repo-label:list
+   */
+  getOrgRepoLabelList: {
+    parameters: {
+      query?: {
+        per_page?: number
+        page?: number
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description Lists repository labels for the specified organization. The authenticated user must be a member of the organization. */
+      200: {
+        content: {
+          'application/json': {
+            results: Array<{
+              /**
+               * @description The ID of the label
+               * @default
+               */
+              id?: string
+              /**
+               * @description The name of the label
+               * @default
+               */
+              name?: string
+              /** @description The IDs of repositories this label is associated with */
+              repository_ids?: string[]
+              /**
+               * @description Whether the label has a security policy
+               * @default false
+               */
+              has_security_policy?: boolean
+              /**
+               * @description Whether the label has a license policy
+               * @default false
+               */
+              has_license_policy?: boolean
+            }>
+            /** @default 0 */
+            nextPage: number | null
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Create repository label (beta)
+   * @description Create a repository label.
+   *
+   * Labels can be used to group and organize repositories and to apply security/license policies.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - repo-label:create
+   */
+  createOrgRepoLabel: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    requestBody: {
+      content: {
+        'application/json': {
+          /**
+           * @description The name of the label
+           * @default
+           */
+          name: string
+        }
+      }
+    }
+    responses: {
+      /** @description Creates a new repository label for the specified organization. The authenticated user must be a member of the organization. Label names must be non-empty and less than 1000 characters. */
+      201: {
+        content: {
+          'application/json': {
+            /**
+             * @description The ID of the label
+             * @default
+             */
+            id?: string
+            /**
+             * @description The name of the label
+             * @default
+             */
+            name?: string
+            /** @description The IDs of repositories this label is associated with */
+            repository_ids?: string[]
+            /**
+             * @description Whether the label has a security policy
+             * @default false
+             */
+            has_security_policy?: boolean
+            /**
+             * @description Whether the label has a license policy
+             * @default false
+             */
+            has_license_policy?: boolean
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      /** @description Conflict */
+      409: {
+        content: {
+          'application/json': {
+            error: {
+              /** @default */
+              message: string
+              /** @default null */
+              details: Record | null
+            }
+          }
+        }
+      }
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get repository label (beta)
+   * @description Retrieve a repository label associated with an organization and label ID.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - repo-label:list
+   */
+  getOrgRepoLabel: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The ID of the label */
+        label_id: string
+      }
+    }
+    responses: {
+      /** @description Returns a specific repository label for the specified organization. The authenticated user must be a member of the organization. */
+      200: {
+        content: {
+          'application/json': {
+            /**
+             * @description The ID of the label
+             * @default
+             */
+            id?: string
+            /**
+             * @description The name of the label
+             * @default
+             */
+            name?: string
+            /** @description The IDs of repositories this label is associated with */
+            repository_ids?: string[]
+            /**
+             * @description Whether the label has a security policy
+             * @default false
+             */
+            has_security_policy?: boolean
+            /**
+             * @description Whether the label has a license policy
+             * @default false
+             */
+            has_license_policy?: boolean
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Update repository label (beta)
+   * @description Update a repository label name.
+   *
+   * Labels can be used to group and organize repositories and to apply security/license policies.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - repo-label:update
+   */
+  updateOrgRepoLabel: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The ID of the label */
+        label_id: string
+      }
+    }
+    requestBody: {
+      content: {
+        'application/json': {
+          /**
+           * @description The name of the label
+           * @default
+           */
+          name: string
+        }
+      }
+    }
+    responses: {
+      /** @description Updates an existing repository label for the specified organization. The authenticated user must be a member of the organization. Label names must be non-empty and less than 1000 characters. */
+      200: {
+        content: {
+          'application/json': {
+            /**
+             * @description The ID of the label
+             * @default
+             */
+            id?: string
+            /**
+             * @description The name of the label
+             * @default
+             */
+            name?: string
+            /** @description The IDs of repositories this label is associated with */
+            repository_ids?: string[]
+            /**
+             * @description Whether the label has a security policy
+             * @default false
+             */
+            has_security_policy?: boolean
+            /**
+             * @description Whether the label has a license policy
+             * @default false
+             */
+            has_license_policy?: boolean
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      /** @description Conflict */
+      409: {
+        content: {
+          'application/json': {
+            error: {
+              /** @default */
+              message: string
+              /** @default null */
+              details: Record | null
+            }
+          }
+        }
+      }
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Delete repository label (beta)
+   * @description Delete a repository label and all of its associations (repositories, security policy, license policy, etc.).
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - repo-label:delete
+   */
+  deleteOrgRepoLabel: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The ID of the label */
+        label_id: string
+      }
+    }
+    responses: {
+      /** @description Success */
+      200: {
+        content: {
+          'application/json': {
+            /** @default ok */
+            status: string
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get repository label setting (beta)
+   * @description Retrieve the setting (e.g. security/license policy) for a repository label.
+   *
+   *
+   * Note that repository label settings currently only support `issueRules`
+   * and `issueRulesPolicyDefault`. A policy is considered "active" for
+   * a given repository label if the `issueRulesPolicyDefault` is set,
+   * and inactive when not set. `issueRules` can be used to further
+   * refine the alert triage strategy.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - repo-label:list
+   */
+  getOrgRepoLabelSetting: {
+    parameters: {
+      query: {
+        /** @description Setting key to query for in the repository label. Valid values include issueRules, issueRulesPolicyDefault, and licensePolicy */
+        setting_key: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The ID of the label */
+        label_id: string
+      }
+    }
+    responses: {
+      /** @description Returns the setting for the specified repository label. The authenticated user must be a member of the organization. */
+      200: {
+        content: {
+          'application/json': {
+            issueRules?: {
+              gptSecurity?: {
+                /**
+                 * @description The action to take for gptSecurity issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              gptAnomaly?: {
+                /**
+                 * @description The action to take for gptAnomaly issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              gptMalware?: {
+                /**
+                 * @description The action to take for gptMalware issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              filesystemAccess?: {
+                /**
+                 * @description The action to take for filesystemAccess issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              networkAccess?: {
+                /**
+                 * @description The action to take for networkAccess issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              shellAccess?: {
+                /**
+                 * @description The action to take for shellAccess issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              debugAccess?: {
+                /**
+                 * @description The action to take for debugAccess issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              chromePermission?: {
+                /**
+                 * @description The action to take for chromePermission issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              chromeHostPermission?: {
+                /**
+                 * @description The action to take for chromeHostPermission issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              chromeWildcardHostPermission?: {
+                /**
+                 * @description The action to take for chromeWildcardHostPermission issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              chromeContentScript?: {
+                /**
+                 * @description The action to take for chromeContentScript issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              criticalCVE?: {
+                /**
+                 * @description The action to take for criticalCVE issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              cve?: {
+                /**
+                 * @description The action to take for cve issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              mediumCVE?: {
+                /**
+                 * @description The action to take for mediumCVE issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              mildCVE?: {
+                /**
+                 * @description The action to take for mildCVE issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              emptyPackage?: {
+                /**
+                 * @description The action to take for emptyPackage issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              trivialPackage?: {
+                /**
+                 * @description The action to take for trivialPackage issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noREADME?: {
+                /**
+                 * @description The action to take for noREADME issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              shrinkwrap?: {
+                /**
+                 * @description The action to take for shrinkwrap issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              tooManyFiles?: {
+                /**
+                 * @description The action to take for tooManyFiles issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              generic?: {
+                /**
+                 * @description The action to take for generic issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ghaArgToSink?: {
+                /**
+                 * @description The action to take for ghaArgToSink issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ghaEnvToSink?: {
+                /**
+                 * @description The action to take for ghaEnvToSink issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ghaContextToSink?: {
+                /**
+                 * @description The action to take for ghaContextToSink issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ghaArgToOutput?: {
+                /**
+                 * @description The action to take for ghaArgToOutput issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ghaArgToEnv?: {
+                /**
+                 * @description The action to take for ghaArgToEnv issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ghaContextToOutput?: {
+                /**
+                 * @description The action to take for ghaContextToOutput issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ghaContextToEnv?: {
+                /**
+                 * @description The action to take for ghaContextToEnv issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              recentlyPublished?: {
+                /**
+                 * @description The action to take for recentlyPublished issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              licenseSpdxDisj?: {
+                /**
+                 * @description The action to take for licenseSpdxDisj issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unsafeCopyright?: {
+                /**
+                 * @description The action to take for unsafeCopyright issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              licenseChange?: {
+                /**
+                 * @description The action to take for licenseChange issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              nonOSILicense?: {
+                /**
+                 * @description The action to take for nonOSILicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              deprecatedLicense?: {
+                /**
+                 * @description The action to take for deprecatedLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              missingLicense?: {
+                /**
+                 * @description The action to take for missingLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              nonSPDXLicense?: {
+                /**
+                 * @description The action to take for nonSPDXLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unclearLicense?: {
+                /**
+                 * @description The action to take for unclearLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              mixedLicense?: {
+                /**
+                 * @description The action to take for mixedLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              notice?: {
+                /**
+                 * @description The action to take for notice issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              modifiedLicense?: {
+                /**
+                 * @description The action to take for modifiedLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              modifiedException?: {
+                /**
+                 * @description The action to take for modifiedException issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              licenseException?: {
+                /**
+                 * @description The action to take for licenseException issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              deprecatedException?: {
+                /**
+                 * @description The action to take for deprecatedException issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              miscLicenseIssues?: {
+                /**
+                 * @description The action to take for miscLicenseIssues issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unidentifiedLicense?: {
+                /**
+                 * @description The action to take for unidentifiedLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noLicenseFound?: {
+                /**
+                 * @description The action to take for noLicenseFound issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              explicitlyUnlicensedItem?: {
+                /**
+                 * @description The action to take for explicitlyUnlicensedItem issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              copyleftLicense?: {
+                /**
+                 * @description The action to take for copyleftLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              nonpermissiveLicense?: {
+                /**
+                 * @description The action to take for nonpermissiveLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ambiguousClassifier?: {
+                /**
+                 * @description The action to take for ambiguousClassifier issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              invalidPackageJSON?: {
+                /**
+                 * @description The action to take for invalidPackageJSON issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              httpDependency?: {
+                /**
+                 * @description The action to take for httpDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              gitDependency?: {
+                /**
+                 * @description The action to take for gitDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              gitHubDependency?: {
+                /**
+                 * @description The action to take for gitHubDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              fileDependency?: {
+                /**
+                 * @description The action to take for fileDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noTests?: {
+                /**
+                 * @description The action to take for noTests issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noRepository?: {
+                /**
+                 * @description The action to take for noRepository issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              badSemver?: {
+                /**
+                 * @description The action to take for badSemver issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              badSemverDependency?: {
+                /**
+                 * @description The action to take for badSemverDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noV1?: {
+                /**
+                 * @description The action to take for noV1 issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noWebsite?: {
+                /**
+                 * @description The action to take for noWebsite issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noBugTracker?: {
+                /**
+                 * @description The action to take for noBugTracker issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noAuthorData?: {
+                /**
+                 * @description The action to take for noAuthorData issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              typeModuleCompatibility?: {
+                /**
+                 * @description The action to take for typeModuleCompatibility issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              floatingDependency?: {
+                /**
+                 * @description The action to take for floatingDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              manifestConfusion?: {
+                /**
+                 * @description The action to take for manifestConfusion issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              malware?: {
+                /**
+                 * @description The action to take for malware issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              telemetry?: {
+                /**
+                 * @description The action to take for telemetry issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              troll?: {
+                /**
+                 * @description The action to take for troll issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              deprecated?: {
+                /**
+                 * @description The action to take for deprecated issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              chronoAnomaly?: {
+                /**
+                 * @description The action to take for chronoAnomaly issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              compromisedSSHKey?: {
+                /**
+                 * @description The action to take for compromisedSSHKey issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              semverAnomaly?: {
+                /**
+                 * @description The action to take for semverAnomaly issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              newAuthor?: {
+                /**
+                 * @description The action to take for newAuthor issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unstableOwnership?: {
+                /**
+                 * @description The action to take for unstableOwnership issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              missingAuthor?: {
+                /**
+                 * @description The action to take for missingAuthor issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unmaintained?: {
+                /**
+                 * @description The action to take for unmaintained issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unpublished?: {
+                /**
+                 * @description The action to take for unpublished issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              majorRefactor?: {
+                /**
+                 * @description The action to take for majorRefactor issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              missingTarball?: {
+                /**
+                 * @description The action to take for missingTarball issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              suspiciousStarActivity?: {
+                /**
+                 * @description The action to take for suspiciousStarActivity issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unpopularPackage?: {
+                /**
+                 * @description The action to take for unpopularPackage issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillAutonomyAbuse?: {
+                /**
+                 * @description The action to take for skillAutonomyAbuse issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillCommandInjection?: {
+                /**
+                 * @description The action to take for skillCommandInjection issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillDataExfiltration?: {
+                /**
+                 * @description The action to take for skillDataExfiltration issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillDiscoveryAbuse?: {
+                /**
+                 * @description The action to take for skillDiscoveryAbuse issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillHardcodedSecrets?: {
+                /**
+                 * @description The action to take for skillHardcodedSecrets issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillObfuscation?: {
+                /**
+                 * @description The action to take for skillObfuscation issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillPreExecution?: {
+                /**
+                 * @description The action to take for skillPreExecution issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillPromptInjection?: {
+                /**
+                 * @description The action to take for skillPromptInjection issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillResourceAbuse?: {
+                /**
+                 * @description The action to take for skillResourceAbuse issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillSupplyChain?: {
+                /**
+                 * @description The action to take for skillSupplyChain issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillToolAbuse?: {
+                /**
+                 * @description The action to take for skillToolAbuse issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillToolChaining?: {
+                /**
+                 * @description The action to take for skillToolChaining issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillTransitiveTrust?: {
+                /**
+                 * @description The action to take for skillTransitiveTrust issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              socketUpgradeAvailable?: {
+                /**
+                 * @description The action to take for socketUpgradeAvailable issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              longStrings?: {
+                /**
+                 * @description The action to take for longStrings issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              highEntropyStrings?: {
+                /**
+                 * @description The action to take for highEntropyStrings issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              urlStrings?: {
+                /**
+                 * @description The action to take for urlStrings issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              usesEval?: {
+                /**
+                 * @description The action to take for usesEval issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              dynamicRequire?: {
+                /**
+                 * @description The action to take for dynamicRequire issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              envVars?: {
+                /**
+                 * @description The action to take for envVars issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              missingDependency?: {
+                /**
+                 * @description The action to take for missingDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unusedDependency?: {
+                /**
+                 * @description The action to take for unusedDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              peerDependency?: {
+                /**
+                 * @description The action to take for peerDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              uncaughtOptionalDependency?: {
+                /**
+                 * @description The action to take for uncaughtOptionalDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unresolvedRequire?: {
+                /**
+                 * @description The action to take for unresolvedRequire issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              extraneousDependency?: {
+                /**
+                 * @description The action to take for extraneousDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              obfuscatedRequire?: {
+                /**
+                 * @description The action to take for obfuscatedRequire issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              obfuscatedFile?: {
+                /**
+                 * @description The action to take for obfuscatedFile issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              minifiedFile?: {
+                /**
+                 * @description The action to take for minifiedFile issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              installScripts?: {
+                /**
+                 * @description The action to take for installScripts issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              hasNativeCode?: {
+                /**
+                 * @description The action to take for hasNativeCode issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              binScriptConfusion?: {
+                /**
+                 * @description The action to take for binScriptConfusion issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              shellScriptOverride?: {
+                /**
+                 * @description The action to take for shellScriptOverride issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              didYouMean?: {
+                /**
+                 * @description The action to take for didYouMean issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              gptDidYouMean?: {
+                /**
+                 * @description The action to take for gptDidYouMean issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              bidi?: {
+                /**
+                 * @description The action to take for bidi issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              zeroWidth?: {
+                /**
+                 * @description The action to take for zeroWidth issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              badEncoding?: {
+                /**
+                 * @description The action to take for badEncoding issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              homoglyphs?: {
+                /**
+                 * @description The action to take for homoglyphs issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              invisibleChars?: {
+                /**
+                 * @description The action to take for invisibleChars issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              suspiciousString?: {
+                /**
+                 * @description The action to take for suspiciousString issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              potentialVulnerability?: {
+                /**
+                 * @description The action to take for potentialVulnerability issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxProposedApiUsage?: {
+                /**
+                 * @description The action to take for vsxProposedApiUsage issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxActivationWildcard?: {
+                /**
+                 * @description The action to take for vsxActivationWildcard issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxWorkspaceContainsActivation?: {
+                /**
+                 * @description The action to take for vsxWorkspaceContainsActivation issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxUntrustedWorkspaceSupported?: {
+                /**
+                 * @description The action to take for vsxUntrustedWorkspaceSupported issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxVirtualWorkspaceSupported?: {
+                /**
+                 * @description The action to take for vsxVirtualWorkspaceSupported issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxWebviewContribution?: {
+                /**
+                 * @description The action to take for vsxWebviewContribution issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxDebuggerContribution?: {
+                /**
+                 * @description The action to take for vsxDebuggerContribution issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxExtensionDependency?: {
+                /**
+                 * @description The action to take for vsxExtensionDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxExtensionPack?: {
+                /**
+                 * @description The action to take for vsxExtensionPack issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+            } | null
+            /**
+             * @description The default security policy for the repository label
+             * @default medium
+             * @enum {string|null}
+             */
+            issueRulesPolicyDefault?:
+              | 'default'
+              | 'low'
+              | 'medium'
+              | 'high'
+              | null
+            /** @default null */
+            licensePolicy?: Record | null
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Update repository label setting (beta)
+   * @description Update the setting (e.g. security/license policy) for a repository label.
+   *
+   *
+   * Note that repository label settings currently only support `issueRules`
+   * and `issueRulesPolicyDefault`. A policy is considered "active" for
+   * a given repository label if the `issueRulesPolicyDefault` is set,
+   * and inactive when not set. `issueRules` can be used to further
+   * refine the alert triage strategy.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - repo-label:update
+   */
+  updateOrgRepoLabelSetting: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The ID of the label */
+        label_id: string
+      }
+    }
+    requestBody?: {
+      content: {
+        'application/json': {
+          issueRules?: {
+            gptSecurity?: {
+              /**
+               * @description The action to take for gptSecurity issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            gptAnomaly?: {
+              /**
+               * @description The action to take for gptAnomaly issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            gptMalware?: {
+              /**
+               * @description The action to take for gptMalware issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            filesystemAccess?: {
+              /**
+               * @description The action to take for filesystemAccess issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            networkAccess?: {
+              /**
+               * @description The action to take for networkAccess issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            shellAccess?: {
+              /**
+               * @description The action to take for shellAccess issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            debugAccess?: {
+              /**
+               * @description The action to take for debugAccess issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            chromePermission?: {
+              /**
+               * @description The action to take for chromePermission issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            chromeHostPermission?: {
+              /**
+               * @description The action to take for chromeHostPermission issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            chromeWildcardHostPermission?: {
+              /**
+               * @description The action to take for chromeWildcardHostPermission issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            chromeContentScript?: {
+              /**
+               * @description The action to take for chromeContentScript issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            criticalCVE?: {
+              /**
+               * @description The action to take for criticalCVE issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            cve?: {
+              /**
+               * @description The action to take for cve issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            mediumCVE?: {
+              /**
+               * @description The action to take for mediumCVE issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            mildCVE?: {
+              /**
+               * @description The action to take for mildCVE issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            emptyPackage?: {
+              /**
+               * @description The action to take for emptyPackage issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            trivialPackage?: {
+              /**
+               * @description The action to take for trivialPackage issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            noREADME?: {
+              /**
+               * @description The action to take for noREADME issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            shrinkwrap?: {
+              /**
+               * @description The action to take for shrinkwrap issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            tooManyFiles?: {
+              /**
+               * @description The action to take for tooManyFiles issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            generic?: {
+              /**
+               * @description The action to take for generic issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            ghaArgToSink?: {
+              /**
+               * @description The action to take for ghaArgToSink issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            ghaEnvToSink?: {
+              /**
+               * @description The action to take for ghaEnvToSink issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            ghaContextToSink?: {
+              /**
+               * @description The action to take for ghaContextToSink issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            ghaArgToOutput?: {
+              /**
+               * @description The action to take for ghaArgToOutput issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            ghaArgToEnv?: {
+              /**
+               * @description The action to take for ghaArgToEnv issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            ghaContextToOutput?: {
+              /**
+               * @description The action to take for ghaContextToOutput issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            ghaContextToEnv?: {
+              /**
+               * @description The action to take for ghaContextToEnv issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            recentlyPublished?: {
+              /**
+               * @description The action to take for recentlyPublished issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            licenseSpdxDisj?: {
+              /**
+               * @description The action to take for licenseSpdxDisj issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            unsafeCopyright?: {
+              /**
+               * @description The action to take for unsafeCopyright issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            licenseChange?: {
+              /**
+               * @description The action to take for licenseChange issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            nonOSILicense?: {
+              /**
+               * @description The action to take for nonOSILicense issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            deprecatedLicense?: {
+              /**
+               * @description The action to take for deprecatedLicense issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            missingLicense?: {
+              /**
+               * @description The action to take for missingLicense issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            nonSPDXLicense?: {
+              /**
+               * @description The action to take for nonSPDXLicense issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            unclearLicense?: {
+              /**
+               * @description The action to take for unclearLicense issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            mixedLicense?: {
+              /**
+               * @description The action to take for mixedLicense issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            notice?: {
+              /**
+               * @description The action to take for notice issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            modifiedLicense?: {
+              /**
+               * @description The action to take for modifiedLicense issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            modifiedException?: {
+              /**
+               * @description The action to take for modifiedException issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            licenseException?: {
+              /**
+               * @description The action to take for licenseException issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            deprecatedException?: {
+              /**
+               * @description The action to take for deprecatedException issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            miscLicenseIssues?: {
+              /**
+               * @description The action to take for miscLicenseIssues issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            unidentifiedLicense?: {
+              /**
+               * @description The action to take for unidentifiedLicense issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            noLicenseFound?: {
+              /**
+               * @description The action to take for noLicenseFound issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            explicitlyUnlicensedItem?: {
+              /**
+               * @description The action to take for explicitlyUnlicensedItem issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            copyleftLicense?: {
+              /**
+               * @description The action to take for copyleftLicense issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            nonpermissiveLicense?: {
+              /**
+               * @description The action to take for nonpermissiveLicense issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            ambiguousClassifier?: {
+              /**
+               * @description The action to take for ambiguousClassifier issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            invalidPackageJSON?: {
+              /**
+               * @description The action to take for invalidPackageJSON issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            httpDependency?: {
+              /**
+               * @description The action to take for httpDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            gitDependency?: {
+              /**
+               * @description The action to take for gitDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            gitHubDependency?: {
+              /**
+               * @description The action to take for gitHubDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            fileDependency?: {
+              /**
+               * @description The action to take for fileDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            noTests?: {
+              /**
+               * @description The action to take for noTests issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            noRepository?: {
+              /**
+               * @description The action to take for noRepository issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            badSemver?: {
+              /**
+               * @description The action to take for badSemver issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            badSemverDependency?: {
+              /**
+               * @description The action to take for badSemverDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            noV1?: {
+              /**
+               * @description The action to take for noV1 issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            noWebsite?: {
+              /**
+               * @description The action to take for noWebsite issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            noBugTracker?: {
+              /**
+               * @description The action to take for noBugTracker issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            noAuthorData?: {
+              /**
+               * @description The action to take for noAuthorData issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            typeModuleCompatibility?: {
+              /**
+               * @description The action to take for typeModuleCompatibility issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            floatingDependency?: {
+              /**
+               * @description The action to take for floatingDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            manifestConfusion?: {
+              /**
+               * @description The action to take for manifestConfusion issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            malware?: {
+              /**
+               * @description The action to take for malware issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            telemetry?: {
+              /**
+               * @description The action to take for telemetry issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            troll?: {
+              /**
+               * @description The action to take for troll issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            deprecated?: {
+              /**
+               * @description The action to take for deprecated issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            chronoAnomaly?: {
+              /**
+               * @description The action to take for chronoAnomaly issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            compromisedSSHKey?: {
+              /**
+               * @description The action to take for compromisedSSHKey issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            semverAnomaly?: {
+              /**
+               * @description The action to take for semverAnomaly issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            newAuthor?: {
+              /**
+               * @description The action to take for newAuthor issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            unstableOwnership?: {
+              /**
+               * @description The action to take for unstableOwnership issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            missingAuthor?: {
+              /**
+               * @description The action to take for missingAuthor issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            unmaintained?: {
+              /**
+               * @description The action to take for unmaintained issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            unpublished?: {
+              /**
+               * @description The action to take for unpublished issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            majorRefactor?: {
+              /**
+               * @description The action to take for majorRefactor issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            missingTarball?: {
+              /**
+               * @description The action to take for missingTarball issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            suspiciousStarActivity?: {
+              /**
+               * @description The action to take for suspiciousStarActivity issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            unpopularPackage?: {
+              /**
+               * @description The action to take for unpopularPackage issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillAutonomyAbuse?: {
+              /**
+               * @description The action to take for skillAutonomyAbuse issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillCommandInjection?: {
+              /**
+               * @description The action to take for skillCommandInjection issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillDataExfiltration?: {
+              /**
+               * @description The action to take for skillDataExfiltration issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillDiscoveryAbuse?: {
+              /**
+               * @description The action to take for skillDiscoveryAbuse issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillHardcodedSecrets?: {
+              /**
+               * @description The action to take for skillHardcodedSecrets issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillObfuscation?: {
+              /**
+               * @description The action to take for skillObfuscation issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillPreExecution?: {
+              /**
+               * @description The action to take for skillPreExecution issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillPromptInjection?: {
+              /**
+               * @description The action to take for skillPromptInjection issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillResourceAbuse?: {
+              /**
+               * @description The action to take for skillResourceAbuse issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillSupplyChain?: {
+              /**
+               * @description The action to take for skillSupplyChain issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillToolAbuse?: {
+              /**
+               * @description The action to take for skillToolAbuse issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillToolChaining?: {
+              /**
+               * @description The action to take for skillToolChaining issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillTransitiveTrust?: {
+              /**
+               * @description The action to take for skillTransitiveTrust issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            socketUpgradeAvailable?: {
+              /**
+               * @description The action to take for socketUpgradeAvailable issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            longStrings?: {
+              /**
+               * @description The action to take for longStrings issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            highEntropyStrings?: {
+              /**
+               * @description The action to take for highEntropyStrings issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            urlStrings?: {
+              /**
+               * @description The action to take for urlStrings issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            usesEval?: {
+              /**
+               * @description The action to take for usesEval issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            dynamicRequire?: {
+              /**
+               * @description The action to take for dynamicRequire issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            envVars?: {
+              /**
+               * @description The action to take for envVars issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            missingDependency?: {
+              /**
+               * @description The action to take for missingDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            unusedDependency?: {
+              /**
+               * @description The action to take for unusedDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            peerDependency?: {
+              /**
+               * @description The action to take for peerDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            uncaughtOptionalDependency?: {
+              /**
+               * @description The action to take for uncaughtOptionalDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            unresolvedRequire?: {
+              /**
+               * @description The action to take for unresolvedRequire issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            extraneousDependency?: {
+              /**
+               * @description The action to take for extraneousDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            obfuscatedRequire?: {
+              /**
+               * @description The action to take for obfuscatedRequire issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            obfuscatedFile?: {
+              /**
+               * @description The action to take for obfuscatedFile issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            minifiedFile?: {
+              /**
+               * @description The action to take for minifiedFile issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            installScripts?: {
+              /**
+               * @description The action to take for installScripts issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            hasNativeCode?: {
+              /**
+               * @description The action to take for hasNativeCode issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            binScriptConfusion?: {
+              /**
+               * @description The action to take for binScriptConfusion issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            shellScriptOverride?: {
+              /**
+               * @description The action to take for shellScriptOverride issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            didYouMean?: {
+              /**
+               * @description The action to take for didYouMean issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            gptDidYouMean?: {
+              /**
+               * @description The action to take for gptDidYouMean issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            bidi?: {
+              /**
+               * @description The action to take for bidi issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            zeroWidth?: {
+              /**
+               * @description The action to take for zeroWidth issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            badEncoding?: {
+              /**
+               * @description The action to take for badEncoding issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            homoglyphs?: {
+              /**
+               * @description The action to take for homoglyphs issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            invisibleChars?: {
+              /**
+               * @description The action to take for invisibleChars issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            suspiciousString?: {
+              /**
+               * @description The action to take for suspiciousString issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            potentialVulnerability?: {
+              /**
+               * @description The action to take for potentialVulnerability issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            vsxProposedApiUsage?: {
+              /**
+               * @description The action to take for vsxProposedApiUsage issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            vsxActivationWildcard?: {
+              /**
+               * @description The action to take for vsxActivationWildcard issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            vsxWorkspaceContainsActivation?: {
+              /**
+               * @description The action to take for vsxWorkspaceContainsActivation issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            vsxUntrustedWorkspaceSupported?: {
+              /**
+               * @description The action to take for vsxUntrustedWorkspaceSupported issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            vsxVirtualWorkspaceSupported?: {
+              /**
+               * @description The action to take for vsxVirtualWorkspaceSupported issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            vsxWebviewContribution?: {
+              /**
+               * @description The action to take for vsxWebviewContribution issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            vsxDebuggerContribution?: {
+              /**
+               * @description The action to take for vsxDebuggerContribution issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            vsxExtensionDependency?: {
+              /**
+               * @description The action to take for vsxExtensionDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            vsxExtensionPack?: {
+              /**
+               * @description The action to take for vsxExtensionPack issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+          }
+          /**
+           * @description The default security policy for the repository label
+           * @default medium
+           * @enum {string}
+           */
+          issueRulesPolicyDefault?: 'default' | 'low' | 'medium' | 'high'
+          licensePolicy?: components['schemas']['LicenseAllowListRequest']
+        }
+      }
+    }
+    responses: {
+      /** @description Success */
+      200: {
+        content: {
+          'application/json': {
+            /** @default ok */
+            status: string
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Delete repository label setting (beta)
+   * @description Delete the setting (e.g. security/license policy) for a repository label.
+   *
+   *
+   * Note that repository label settings currently only support `issueRules`
+   * and `issueRulesPolicyDefault`. A policy is considered "active" for
+   * a given repository label if the `issueRulesPolicyDefault` is set,
+   * and inactive when not set. `issueRules` can be used to further
+   * refine the alert triage strategy.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - repo-label:update
+   */
+  deleteOrgRepoLabelSetting: {
+    parameters: {
+      query: {
+        /** @description Setting key to delete from the repository label. Valid values include issueRules, issueRulesPolicyDefault, and licensePolicy */
+        setting_key: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The ID of the label */
+        label_id: string
+      }
+    }
+    responses: {
+      /** @description Success */
+      200: {
+        content: {
+          'application/json': {
+            /** @default ok */
+            status: string
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Disassociate repository label (beta)
+   * @description Disassociate a repository label from a repository.
+   *
+   * Labels can be used to group and organize repositories and to apply security/license policies.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - repo-label:update
+   */
+  disassociateOrgRepoLabel: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The ID of the label */
+        label_id: string
+      }
+    }
+    requestBody?: {
+      content: {
+        'application/json': {
+          /**
+           * @description The ID of the repository to disassociate from the label
+           * @default
+           */
+          repository_id?: string
+        }
+      }
+    }
+    responses: {
+      /** @description Disassociates a repository label from the specified repository. The authenticated user must be a member of the organization. */
+      200: {
+        content: {
+          'application/json': {
+            /**
+             * @description Status of the operation
+             * @default
+             */
+            status?: string
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get integration events
+   * @description This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - integration:list
+   */
+  getIntegrationEvents: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The id of the integration */
+        integration_id: string
+      }
+    }
+    responses: {
+      /** @description Lists events for the specified integration. The authenticated user must be a member of the organization. */
+      200: {
+        content: {
+          'application/json': Array<{
+            /** @default */
+            id: string
+            /** @default */
+            integration_id: string
+            /** @default */
+            type: string
+            payload: Record
+            /** @default 0 */
+            status_code: number
+            /** @default */
+            error: string
+            /** @default */
+            sent_at: string
+            retry_info: {
+              /** @default 0 */
+              status_code: number
+              /** @default */
+              error: string
+              /** @default */
+              sent_at: string
+            }[]
+            /** @default */
+            created_at: string
+            /** @default */
+            updated_at: string
+          }>
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get Organization Security Policy
+   * @description Retrieve the security policy of an organization.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - security-policy:read
+   */
+  getOrgSecurityPolicy: {
+    parameters: {
+      query?: {
+        /** @description Return only customized security policy rules. */
+        custom_rules_only?: boolean
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description Retrieved security policy details */
+      200: {
+        content: {
+          'application/json': {
+            securityPolicyRules?: {
+              gptSecurity?: {
+                /**
+                 * @description The action to take for gptSecurity issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              gptAnomaly?: {
+                /**
+                 * @description The action to take for gptAnomaly issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              gptMalware?: {
+                /**
+                 * @description The action to take for gptMalware issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              filesystemAccess?: {
+                /**
+                 * @description The action to take for filesystemAccess issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              networkAccess?: {
+                /**
+                 * @description The action to take for networkAccess issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              shellAccess?: {
+                /**
+                 * @description The action to take for shellAccess issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              debugAccess?: {
+                /**
+                 * @description The action to take for debugAccess issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              chromePermission?: {
+                /**
+                 * @description The action to take for chromePermission issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              chromeHostPermission?: {
+                /**
+                 * @description The action to take for chromeHostPermission issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              chromeWildcardHostPermission?: {
+                /**
+                 * @description The action to take for chromeWildcardHostPermission issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              chromeContentScript?: {
+                /**
+                 * @description The action to take for chromeContentScript issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              criticalCVE?: {
+                /**
+                 * @description The action to take for criticalCVE issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              cve?: {
+                /**
+                 * @description The action to take for cve issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              mediumCVE?: {
+                /**
+                 * @description The action to take for mediumCVE issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              mildCVE?: {
+                /**
+                 * @description The action to take for mildCVE issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              emptyPackage?: {
+                /**
+                 * @description The action to take for emptyPackage issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              trivialPackage?: {
+                /**
+                 * @description The action to take for trivialPackage issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noREADME?: {
+                /**
+                 * @description The action to take for noREADME issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              shrinkwrap?: {
+                /**
+                 * @description The action to take for shrinkwrap issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              tooManyFiles?: {
+                /**
+                 * @description The action to take for tooManyFiles issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              generic?: {
+                /**
+                 * @description The action to take for generic issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ghaArgToSink?: {
+                /**
+                 * @description The action to take for ghaArgToSink issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ghaEnvToSink?: {
+                /**
+                 * @description The action to take for ghaEnvToSink issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ghaContextToSink?: {
+                /**
+                 * @description The action to take for ghaContextToSink issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ghaArgToOutput?: {
+                /**
+                 * @description The action to take for ghaArgToOutput issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ghaArgToEnv?: {
+                /**
+                 * @description The action to take for ghaArgToEnv issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ghaContextToOutput?: {
+                /**
+                 * @description The action to take for ghaContextToOutput issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ghaContextToEnv?: {
+                /**
+                 * @description The action to take for ghaContextToEnv issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              recentlyPublished?: {
+                /**
+                 * @description The action to take for recentlyPublished issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              licenseSpdxDisj?: {
+                /**
+                 * @description The action to take for licenseSpdxDisj issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unsafeCopyright?: {
+                /**
+                 * @description The action to take for unsafeCopyright issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              licenseChange?: {
+                /**
+                 * @description The action to take for licenseChange issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              nonOSILicense?: {
+                /**
+                 * @description The action to take for nonOSILicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              deprecatedLicense?: {
+                /**
+                 * @description The action to take for deprecatedLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              missingLicense?: {
+                /**
+                 * @description The action to take for missingLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              nonSPDXLicense?: {
+                /**
+                 * @description The action to take for nonSPDXLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unclearLicense?: {
+                /**
+                 * @description The action to take for unclearLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              mixedLicense?: {
+                /**
+                 * @description The action to take for mixedLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              notice?: {
+                /**
+                 * @description The action to take for notice issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              modifiedLicense?: {
+                /**
+                 * @description The action to take for modifiedLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              modifiedException?: {
+                /**
+                 * @description The action to take for modifiedException issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              licenseException?: {
+                /**
+                 * @description The action to take for licenseException issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              deprecatedException?: {
+                /**
+                 * @description The action to take for deprecatedException issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              miscLicenseIssues?: {
+                /**
+                 * @description The action to take for miscLicenseIssues issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unidentifiedLicense?: {
+                /**
+                 * @description The action to take for unidentifiedLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noLicenseFound?: {
+                /**
+                 * @description The action to take for noLicenseFound issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              explicitlyUnlicensedItem?: {
+                /**
+                 * @description The action to take for explicitlyUnlicensedItem issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              copyleftLicense?: {
+                /**
+                 * @description The action to take for copyleftLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              nonpermissiveLicense?: {
+                /**
+                 * @description The action to take for nonpermissiveLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ambiguousClassifier?: {
+                /**
+                 * @description The action to take for ambiguousClassifier issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              invalidPackageJSON?: {
+                /**
+                 * @description The action to take for invalidPackageJSON issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              httpDependency?: {
+                /**
+                 * @description The action to take for httpDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              gitDependency?: {
+                /**
+                 * @description The action to take for gitDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              gitHubDependency?: {
+                /**
+                 * @description The action to take for gitHubDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              fileDependency?: {
+                /**
+                 * @description The action to take for fileDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noTests?: {
+                /**
+                 * @description The action to take for noTests issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noRepository?: {
+                /**
+                 * @description The action to take for noRepository issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              badSemver?: {
+                /**
+                 * @description The action to take for badSemver issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              badSemverDependency?: {
+                /**
+                 * @description The action to take for badSemverDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noV1?: {
+                /**
+                 * @description The action to take for noV1 issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noWebsite?: {
+                /**
+                 * @description The action to take for noWebsite issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noBugTracker?: {
+                /**
+                 * @description The action to take for noBugTracker issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noAuthorData?: {
+                /**
+                 * @description The action to take for noAuthorData issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              typeModuleCompatibility?: {
+                /**
+                 * @description The action to take for typeModuleCompatibility issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              floatingDependency?: {
+                /**
+                 * @description The action to take for floatingDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              manifestConfusion?: {
+                /**
+                 * @description The action to take for manifestConfusion issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              malware?: {
+                /**
+                 * @description The action to take for malware issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              telemetry?: {
+                /**
+                 * @description The action to take for telemetry issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              troll?: {
+                /**
+                 * @description The action to take for troll issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              deprecated?: {
+                /**
+                 * @description The action to take for deprecated issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              chronoAnomaly?: {
+                /**
+                 * @description The action to take for chronoAnomaly issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              compromisedSSHKey?: {
+                /**
+                 * @description The action to take for compromisedSSHKey issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              semverAnomaly?: {
+                /**
+                 * @description The action to take for semverAnomaly issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              newAuthor?: {
+                /**
+                 * @description The action to take for newAuthor issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unstableOwnership?: {
+                /**
+                 * @description The action to take for unstableOwnership issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              missingAuthor?: {
+                /**
+                 * @description The action to take for missingAuthor issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unmaintained?: {
+                /**
+                 * @description The action to take for unmaintained issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unpublished?: {
+                /**
+                 * @description The action to take for unpublished issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              majorRefactor?: {
+                /**
+                 * @description The action to take for majorRefactor issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              missingTarball?: {
+                /**
+                 * @description The action to take for missingTarball issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              suspiciousStarActivity?: {
+                /**
+                 * @description The action to take for suspiciousStarActivity issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unpopularPackage?: {
+                /**
+                 * @description The action to take for unpopularPackage issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillAutonomyAbuse?: {
+                /**
+                 * @description The action to take for skillAutonomyAbuse issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillCommandInjection?: {
+                /**
+                 * @description The action to take for skillCommandInjection issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillDataExfiltration?: {
+                /**
+                 * @description The action to take for skillDataExfiltration issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillDiscoveryAbuse?: {
+                /**
+                 * @description The action to take for skillDiscoveryAbuse issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillHardcodedSecrets?: {
+                /**
+                 * @description The action to take for skillHardcodedSecrets issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillObfuscation?: {
+                /**
+                 * @description The action to take for skillObfuscation issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillPreExecution?: {
+                /**
+                 * @description The action to take for skillPreExecution issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillPromptInjection?: {
+                /**
+                 * @description The action to take for skillPromptInjection issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillResourceAbuse?: {
+                /**
+                 * @description The action to take for skillResourceAbuse issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillSupplyChain?: {
+                /**
+                 * @description The action to take for skillSupplyChain issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillToolAbuse?: {
+                /**
+                 * @description The action to take for skillToolAbuse issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillToolChaining?: {
+                /**
+                 * @description The action to take for skillToolChaining issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillTransitiveTrust?: {
+                /**
+                 * @description The action to take for skillTransitiveTrust issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              socketUpgradeAvailable?: {
+                /**
+                 * @description The action to take for socketUpgradeAvailable issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              longStrings?: {
+                /**
+                 * @description The action to take for longStrings issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              highEntropyStrings?: {
+                /**
+                 * @description The action to take for highEntropyStrings issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              urlStrings?: {
+                /**
+                 * @description The action to take for urlStrings issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              usesEval?: {
+                /**
+                 * @description The action to take for usesEval issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              dynamicRequire?: {
+                /**
+                 * @description The action to take for dynamicRequire issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              envVars?: {
+                /**
+                 * @description The action to take for envVars issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              missingDependency?: {
+                /**
+                 * @description The action to take for missingDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unusedDependency?: {
+                /**
+                 * @description The action to take for unusedDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              peerDependency?: {
+                /**
+                 * @description The action to take for peerDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              uncaughtOptionalDependency?: {
+                /**
+                 * @description The action to take for uncaughtOptionalDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unresolvedRequire?: {
+                /**
+                 * @description The action to take for unresolvedRequire issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              extraneousDependency?: {
+                /**
+                 * @description The action to take for extraneousDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              obfuscatedRequire?: {
+                /**
+                 * @description The action to take for obfuscatedRequire issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              obfuscatedFile?: {
+                /**
+                 * @description The action to take for obfuscatedFile issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              minifiedFile?: {
+                /**
+                 * @description The action to take for minifiedFile issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              installScripts?: {
+                /**
+                 * @description The action to take for installScripts issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              hasNativeCode?: {
+                /**
+                 * @description The action to take for hasNativeCode issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              binScriptConfusion?: {
+                /**
+                 * @description The action to take for binScriptConfusion issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              shellScriptOverride?: {
+                /**
+                 * @description The action to take for shellScriptOverride issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              didYouMean?: {
+                /**
+                 * @description The action to take for didYouMean issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              gptDidYouMean?: {
+                /**
+                 * @description The action to take for gptDidYouMean issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              bidi?: {
+                /**
+                 * @description The action to take for bidi issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              zeroWidth?: {
+                /**
+                 * @description The action to take for zeroWidth issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              badEncoding?: {
+                /**
+                 * @description The action to take for badEncoding issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              homoglyphs?: {
+                /**
+                 * @description The action to take for homoglyphs issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              invisibleChars?: {
+                /**
+                 * @description The action to take for invisibleChars issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              suspiciousString?: {
+                /**
+                 * @description The action to take for suspiciousString issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              potentialVulnerability?: {
+                /**
+                 * @description The action to take for potentialVulnerability issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxProposedApiUsage?: {
+                /**
+                 * @description The action to take for vsxProposedApiUsage issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxActivationWildcard?: {
+                /**
+                 * @description The action to take for vsxActivationWildcard issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxWorkspaceContainsActivation?: {
+                /**
+                 * @description The action to take for vsxWorkspaceContainsActivation issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxUntrustedWorkspaceSupported?: {
+                /**
+                 * @description The action to take for vsxUntrustedWorkspaceSupported issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxVirtualWorkspaceSupported?: {
+                /**
+                 * @description The action to take for vsxVirtualWorkspaceSupported issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxWebviewContribution?: {
+                /**
+                 * @description The action to take for vsxWebviewContribution issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxDebuggerContribution?: {
+                /**
+                 * @description The action to take for vsxDebuggerContribution issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxExtensionDependency?: {
+                /**
+                 * @description The action to take for vsxExtensionDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxExtensionPack?: {
+                /**
+                 * @description The action to take for vsxExtensionPack issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+            }
+            /**
+             * @description The default security policy for the organization
+             * @default default
+             * @enum {string}
+             */
+            securityPolicyDefault?: 'default' | 'low' | 'medium' | 'high'
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Update Security Policy
+   * @description Update the security policy of an organization.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - security-policy:update
+   */
+  updateOrgSecurityPolicy: {
+    parameters: {
+      query?: {
+        /** @description Return only customized security policy rules in the response. */
+        custom_rules_only?: boolean
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    requestBody?: {
+      content: {
+        'application/json': {
+          /**
+           * @description The default security policy for the organization
+           * @enum {string}
+           */
+          policyDefault?: 'default' | 'low' | 'medium' | 'high'
+          policyRules?: {
+            gptSecurity?: {
+              /**
+               * @description The action to take for gptSecurity issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            gptAnomaly?: {
+              /**
+               * @description The action to take for gptAnomaly issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            gptMalware?: {
+              /**
+               * @description The action to take for gptMalware issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            filesystemAccess?: {
+              /**
+               * @description The action to take for filesystemAccess issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            networkAccess?: {
+              /**
+               * @description The action to take for networkAccess issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            shellAccess?: {
+              /**
+               * @description The action to take for shellAccess issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            debugAccess?: {
+              /**
+               * @description The action to take for debugAccess issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            chromePermission?: {
+              /**
+               * @description The action to take for chromePermission issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            chromeHostPermission?: {
+              /**
+               * @description The action to take for chromeHostPermission issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            chromeWildcardHostPermission?: {
+              /**
+               * @description The action to take for chromeWildcardHostPermission issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            chromeContentScript?: {
+              /**
+               * @description The action to take for chromeContentScript issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            criticalCVE?: {
+              /**
+               * @description The action to take for criticalCVE issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            cve?: {
+              /**
+               * @description The action to take for cve issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            mediumCVE?: {
+              /**
+               * @description The action to take for mediumCVE issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            mildCVE?: {
+              /**
+               * @description The action to take for mildCVE issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            emptyPackage?: {
+              /**
+               * @description The action to take for emptyPackage issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            trivialPackage?: {
+              /**
+               * @description The action to take for trivialPackage issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            noREADME?: {
+              /**
+               * @description The action to take for noREADME issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            shrinkwrap?: {
+              /**
+               * @description The action to take for shrinkwrap issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            tooManyFiles?: {
+              /**
+               * @description The action to take for tooManyFiles issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            generic?: {
+              /**
+               * @description The action to take for generic issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            ghaArgToSink?: {
+              /**
+               * @description The action to take for ghaArgToSink issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            ghaEnvToSink?: {
+              /**
+               * @description The action to take for ghaEnvToSink issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            ghaContextToSink?: {
+              /**
+               * @description The action to take for ghaContextToSink issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            ghaArgToOutput?: {
+              /**
+               * @description The action to take for ghaArgToOutput issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            ghaArgToEnv?: {
+              /**
+               * @description The action to take for ghaArgToEnv issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            ghaContextToOutput?: {
+              /**
+               * @description The action to take for ghaContextToOutput issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            ghaContextToEnv?: {
+              /**
+               * @description The action to take for ghaContextToEnv issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            recentlyPublished?: {
+              /**
+               * @description The action to take for recentlyPublished issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            licenseSpdxDisj?: {
+              /**
+               * @description The action to take for licenseSpdxDisj issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            unsafeCopyright?: {
+              /**
+               * @description The action to take for unsafeCopyright issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            licenseChange?: {
+              /**
+               * @description The action to take for licenseChange issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            nonOSILicense?: {
+              /**
+               * @description The action to take for nonOSILicense issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            deprecatedLicense?: {
+              /**
+               * @description The action to take for deprecatedLicense issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            missingLicense?: {
+              /**
+               * @description The action to take for missingLicense issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            nonSPDXLicense?: {
+              /**
+               * @description The action to take for nonSPDXLicense issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            unclearLicense?: {
+              /**
+               * @description The action to take for unclearLicense issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            mixedLicense?: {
+              /**
+               * @description The action to take for mixedLicense issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            notice?: {
+              /**
+               * @description The action to take for notice issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            modifiedLicense?: {
+              /**
+               * @description The action to take for modifiedLicense issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            modifiedException?: {
+              /**
+               * @description The action to take for modifiedException issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            licenseException?: {
+              /**
+               * @description The action to take for licenseException issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            deprecatedException?: {
+              /**
+               * @description The action to take for deprecatedException issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            miscLicenseIssues?: {
+              /**
+               * @description The action to take for miscLicenseIssues issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            unidentifiedLicense?: {
+              /**
+               * @description The action to take for unidentifiedLicense issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            noLicenseFound?: {
+              /**
+               * @description The action to take for noLicenseFound issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            explicitlyUnlicensedItem?: {
+              /**
+               * @description The action to take for explicitlyUnlicensedItem issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            copyleftLicense?: {
+              /**
+               * @description The action to take for copyleftLicense issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            nonpermissiveLicense?: {
+              /**
+               * @description The action to take for nonpermissiveLicense issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            ambiguousClassifier?: {
+              /**
+               * @description The action to take for ambiguousClassifier issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            invalidPackageJSON?: {
+              /**
+               * @description The action to take for invalidPackageJSON issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            httpDependency?: {
+              /**
+               * @description The action to take for httpDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            gitDependency?: {
+              /**
+               * @description The action to take for gitDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            gitHubDependency?: {
+              /**
+               * @description The action to take for gitHubDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            fileDependency?: {
+              /**
+               * @description The action to take for fileDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            noTests?: {
+              /**
+               * @description The action to take for noTests issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            noRepository?: {
+              /**
+               * @description The action to take for noRepository issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            badSemver?: {
+              /**
+               * @description The action to take for badSemver issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            badSemverDependency?: {
+              /**
+               * @description The action to take for badSemverDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            noV1?: {
+              /**
+               * @description The action to take for noV1 issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            noWebsite?: {
+              /**
+               * @description The action to take for noWebsite issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            noBugTracker?: {
+              /**
+               * @description The action to take for noBugTracker issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            noAuthorData?: {
+              /**
+               * @description The action to take for noAuthorData issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            typeModuleCompatibility?: {
+              /**
+               * @description The action to take for typeModuleCompatibility issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            floatingDependency?: {
+              /**
+               * @description The action to take for floatingDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            manifestConfusion?: {
+              /**
+               * @description The action to take for manifestConfusion issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            malware?: {
+              /**
+               * @description The action to take for malware issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            telemetry?: {
+              /**
+               * @description The action to take for telemetry issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            troll?: {
+              /**
+               * @description The action to take for troll issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            deprecated?: {
+              /**
+               * @description The action to take for deprecated issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            chronoAnomaly?: {
+              /**
+               * @description The action to take for chronoAnomaly issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            compromisedSSHKey?: {
+              /**
+               * @description The action to take for compromisedSSHKey issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            semverAnomaly?: {
+              /**
+               * @description The action to take for semverAnomaly issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            newAuthor?: {
+              /**
+               * @description The action to take for newAuthor issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            unstableOwnership?: {
+              /**
+               * @description The action to take for unstableOwnership issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            missingAuthor?: {
+              /**
+               * @description The action to take for missingAuthor issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            unmaintained?: {
+              /**
+               * @description The action to take for unmaintained issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            unpublished?: {
+              /**
+               * @description The action to take for unpublished issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            majorRefactor?: {
+              /**
+               * @description The action to take for majorRefactor issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            missingTarball?: {
+              /**
+               * @description The action to take for missingTarball issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            suspiciousStarActivity?: {
+              /**
+               * @description The action to take for suspiciousStarActivity issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            unpopularPackage?: {
+              /**
+               * @description The action to take for unpopularPackage issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillAutonomyAbuse?: {
+              /**
+               * @description The action to take for skillAutonomyAbuse issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillCommandInjection?: {
+              /**
+               * @description The action to take for skillCommandInjection issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillDataExfiltration?: {
+              /**
+               * @description The action to take for skillDataExfiltration issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillDiscoveryAbuse?: {
+              /**
+               * @description The action to take for skillDiscoveryAbuse issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillHardcodedSecrets?: {
+              /**
+               * @description The action to take for skillHardcodedSecrets issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillObfuscation?: {
+              /**
+               * @description The action to take for skillObfuscation issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillPreExecution?: {
+              /**
+               * @description The action to take for skillPreExecution issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillPromptInjection?: {
+              /**
+               * @description The action to take for skillPromptInjection issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillResourceAbuse?: {
+              /**
+               * @description The action to take for skillResourceAbuse issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillSupplyChain?: {
+              /**
+               * @description The action to take for skillSupplyChain issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillToolAbuse?: {
+              /**
+               * @description The action to take for skillToolAbuse issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillToolChaining?: {
+              /**
+               * @description The action to take for skillToolChaining issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            skillTransitiveTrust?: {
+              /**
+               * @description The action to take for skillTransitiveTrust issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            socketUpgradeAvailable?: {
+              /**
+               * @description The action to take for socketUpgradeAvailable issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            longStrings?: {
+              /**
+               * @description The action to take for longStrings issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            highEntropyStrings?: {
+              /**
+               * @description The action to take for highEntropyStrings issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            urlStrings?: {
+              /**
+               * @description The action to take for urlStrings issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            usesEval?: {
+              /**
+               * @description The action to take for usesEval issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            dynamicRequire?: {
+              /**
+               * @description The action to take for dynamicRequire issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            envVars?: {
+              /**
+               * @description The action to take for envVars issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            missingDependency?: {
+              /**
+               * @description The action to take for missingDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            unusedDependency?: {
+              /**
+               * @description The action to take for unusedDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            peerDependency?: {
+              /**
+               * @description The action to take for peerDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            uncaughtOptionalDependency?: {
+              /**
+               * @description The action to take for uncaughtOptionalDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            unresolvedRequire?: {
+              /**
+               * @description The action to take for unresolvedRequire issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            extraneousDependency?: {
+              /**
+               * @description The action to take for extraneousDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            obfuscatedRequire?: {
+              /**
+               * @description The action to take for obfuscatedRequire issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            obfuscatedFile?: {
+              /**
+               * @description The action to take for obfuscatedFile issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            minifiedFile?: {
+              /**
+               * @description The action to take for minifiedFile issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            installScripts?: {
+              /**
+               * @description The action to take for installScripts issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            hasNativeCode?: {
+              /**
+               * @description The action to take for hasNativeCode issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            binScriptConfusion?: {
+              /**
+               * @description The action to take for binScriptConfusion issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            shellScriptOverride?: {
+              /**
+               * @description The action to take for shellScriptOverride issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            didYouMean?: {
+              /**
+               * @description The action to take for didYouMean issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            gptDidYouMean?: {
+              /**
+               * @description The action to take for gptDidYouMean issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            bidi?: {
+              /**
+               * @description The action to take for bidi issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            zeroWidth?: {
+              /**
+               * @description The action to take for zeroWidth issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            badEncoding?: {
+              /**
+               * @description The action to take for badEncoding issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            homoglyphs?: {
+              /**
+               * @description The action to take for homoglyphs issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            invisibleChars?: {
+              /**
+               * @description The action to take for invisibleChars issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            suspiciousString?: {
+              /**
+               * @description The action to take for suspiciousString issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            potentialVulnerability?: {
+              /**
+               * @description The action to take for potentialVulnerability issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            vsxProposedApiUsage?: {
+              /**
+               * @description The action to take for vsxProposedApiUsage issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            vsxActivationWildcard?: {
+              /**
+               * @description The action to take for vsxActivationWildcard issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            vsxWorkspaceContainsActivation?: {
+              /**
+               * @description The action to take for vsxWorkspaceContainsActivation issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            vsxUntrustedWorkspaceSupported?: {
+              /**
+               * @description The action to take for vsxUntrustedWorkspaceSupported issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            vsxVirtualWorkspaceSupported?: {
+              /**
+               * @description The action to take for vsxVirtualWorkspaceSupported issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            vsxWebviewContribution?: {
+              /**
+               * @description The action to take for vsxWebviewContribution issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            vsxDebuggerContribution?: {
+              /**
+               * @description The action to take for vsxDebuggerContribution issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            vsxExtensionDependency?: {
+              /**
+               * @description The action to take for vsxExtensionDependency issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+            vsxExtensionPack?: {
+              /**
+               * @description The action to take for vsxExtensionPack issues.
+               * @enum {string}
+               */
+              action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+            }
+          }
+          /**
+           * @description Reset the policy rules to the default. When set to true, do not include any policyRules updates.
+           * @default false
+           */
+          resetPolicyRules?: boolean
+        }
+      }
+    }
+    responses: {
+      /** @description Updated repository details */
+      200: {
+        content: {
+          'application/json': {
+            securityPolicyRules?: {
+              gptSecurity?: {
+                /**
+                 * @description The action to take for gptSecurity issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              gptAnomaly?: {
+                /**
+                 * @description The action to take for gptAnomaly issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              gptMalware?: {
+                /**
+                 * @description The action to take for gptMalware issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              filesystemAccess?: {
+                /**
+                 * @description The action to take for filesystemAccess issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              networkAccess?: {
+                /**
+                 * @description The action to take for networkAccess issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              shellAccess?: {
+                /**
+                 * @description The action to take for shellAccess issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              debugAccess?: {
+                /**
+                 * @description The action to take for debugAccess issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              chromePermission?: {
+                /**
+                 * @description The action to take for chromePermission issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              chromeHostPermission?: {
+                /**
+                 * @description The action to take for chromeHostPermission issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              chromeWildcardHostPermission?: {
+                /**
+                 * @description The action to take for chromeWildcardHostPermission issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              chromeContentScript?: {
+                /**
+                 * @description The action to take for chromeContentScript issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              criticalCVE?: {
+                /**
+                 * @description The action to take for criticalCVE issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              cve?: {
+                /**
+                 * @description The action to take for cve issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              mediumCVE?: {
+                /**
+                 * @description The action to take for mediumCVE issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              mildCVE?: {
+                /**
+                 * @description The action to take for mildCVE issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              emptyPackage?: {
+                /**
+                 * @description The action to take for emptyPackage issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              trivialPackage?: {
+                /**
+                 * @description The action to take for trivialPackage issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noREADME?: {
+                /**
+                 * @description The action to take for noREADME issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              shrinkwrap?: {
+                /**
+                 * @description The action to take for shrinkwrap issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              tooManyFiles?: {
+                /**
+                 * @description The action to take for tooManyFiles issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              generic?: {
+                /**
+                 * @description The action to take for generic issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ghaArgToSink?: {
+                /**
+                 * @description The action to take for ghaArgToSink issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ghaEnvToSink?: {
+                /**
+                 * @description The action to take for ghaEnvToSink issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ghaContextToSink?: {
+                /**
+                 * @description The action to take for ghaContextToSink issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ghaArgToOutput?: {
+                /**
+                 * @description The action to take for ghaArgToOutput issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ghaArgToEnv?: {
+                /**
+                 * @description The action to take for ghaArgToEnv issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ghaContextToOutput?: {
+                /**
+                 * @description The action to take for ghaContextToOutput issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ghaContextToEnv?: {
+                /**
+                 * @description The action to take for ghaContextToEnv issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              recentlyPublished?: {
+                /**
+                 * @description The action to take for recentlyPublished issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              licenseSpdxDisj?: {
+                /**
+                 * @description The action to take for licenseSpdxDisj issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unsafeCopyright?: {
+                /**
+                 * @description The action to take for unsafeCopyright issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              licenseChange?: {
+                /**
+                 * @description The action to take for licenseChange issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              nonOSILicense?: {
+                /**
+                 * @description The action to take for nonOSILicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              deprecatedLicense?: {
+                /**
+                 * @description The action to take for deprecatedLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              missingLicense?: {
+                /**
+                 * @description The action to take for missingLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              nonSPDXLicense?: {
+                /**
+                 * @description The action to take for nonSPDXLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unclearLicense?: {
+                /**
+                 * @description The action to take for unclearLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              mixedLicense?: {
+                /**
+                 * @description The action to take for mixedLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              notice?: {
+                /**
+                 * @description The action to take for notice issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              modifiedLicense?: {
+                /**
+                 * @description The action to take for modifiedLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              modifiedException?: {
+                /**
+                 * @description The action to take for modifiedException issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              licenseException?: {
+                /**
+                 * @description The action to take for licenseException issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              deprecatedException?: {
+                /**
+                 * @description The action to take for deprecatedException issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              miscLicenseIssues?: {
+                /**
+                 * @description The action to take for miscLicenseIssues issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unidentifiedLicense?: {
+                /**
+                 * @description The action to take for unidentifiedLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noLicenseFound?: {
+                /**
+                 * @description The action to take for noLicenseFound issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              explicitlyUnlicensedItem?: {
+                /**
+                 * @description The action to take for explicitlyUnlicensedItem issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              copyleftLicense?: {
+                /**
+                 * @description The action to take for copyleftLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              nonpermissiveLicense?: {
+                /**
+                 * @description The action to take for nonpermissiveLicense issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              ambiguousClassifier?: {
+                /**
+                 * @description The action to take for ambiguousClassifier issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              invalidPackageJSON?: {
+                /**
+                 * @description The action to take for invalidPackageJSON issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              httpDependency?: {
+                /**
+                 * @description The action to take for httpDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              gitDependency?: {
+                /**
+                 * @description The action to take for gitDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              gitHubDependency?: {
+                /**
+                 * @description The action to take for gitHubDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              fileDependency?: {
+                /**
+                 * @description The action to take for fileDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noTests?: {
+                /**
+                 * @description The action to take for noTests issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noRepository?: {
+                /**
+                 * @description The action to take for noRepository issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              badSemver?: {
+                /**
+                 * @description The action to take for badSemver issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              badSemverDependency?: {
+                /**
+                 * @description The action to take for badSemverDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noV1?: {
+                /**
+                 * @description The action to take for noV1 issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noWebsite?: {
+                /**
+                 * @description The action to take for noWebsite issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noBugTracker?: {
+                /**
+                 * @description The action to take for noBugTracker issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              noAuthorData?: {
+                /**
+                 * @description The action to take for noAuthorData issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              typeModuleCompatibility?: {
+                /**
+                 * @description The action to take for typeModuleCompatibility issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              floatingDependency?: {
+                /**
+                 * @description The action to take for floatingDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              manifestConfusion?: {
+                /**
+                 * @description The action to take for manifestConfusion issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              malware?: {
+                /**
+                 * @description The action to take for malware issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              telemetry?: {
+                /**
+                 * @description The action to take for telemetry issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              troll?: {
+                /**
+                 * @description The action to take for troll issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              deprecated?: {
+                /**
+                 * @description The action to take for deprecated issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              chronoAnomaly?: {
+                /**
+                 * @description The action to take for chronoAnomaly issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              compromisedSSHKey?: {
+                /**
+                 * @description The action to take for compromisedSSHKey issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              semverAnomaly?: {
+                /**
+                 * @description The action to take for semverAnomaly issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              newAuthor?: {
+                /**
+                 * @description The action to take for newAuthor issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unstableOwnership?: {
+                /**
+                 * @description The action to take for unstableOwnership issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              missingAuthor?: {
+                /**
+                 * @description The action to take for missingAuthor issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unmaintained?: {
+                /**
+                 * @description The action to take for unmaintained issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unpublished?: {
+                /**
+                 * @description The action to take for unpublished issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              majorRefactor?: {
+                /**
+                 * @description The action to take for majorRefactor issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              missingTarball?: {
+                /**
+                 * @description The action to take for missingTarball issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              suspiciousStarActivity?: {
+                /**
+                 * @description The action to take for suspiciousStarActivity issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unpopularPackage?: {
+                /**
+                 * @description The action to take for unpopularPackage issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillAutonomyAbuse?: {
+                /**
+                 * @description The action to take for skillAutonomyAbuse issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillCommandInjection?: {
+                /**
+                 * @description The action to take for skillCommandInjection issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillDataExfiltration?: {
+                /**
+                 * @description The action to take for skillDataExfiltration issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillDiscoveryAbuse?: {
+                /**
+                 * @description The action to take for skillDiscoveryAbuse issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillHardcodedSecrets?: {
+                /**
+                 * @description The action to take for skillHardcodedSecrets issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillObfuscation?: {
+                /**
+                 * @description The action to take for skillObfuscation issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillPreExecution?: {
+                /**
+                 * @description The action to take for skillPreExecution issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillPromptInjection?: {
+                /**
+                 * @description The action to take for skillPromptInjection issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillResourceAbuse?: {
+                /**
+                 * @description The action to take for skillResourceAbuse issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillSupplyChain?: {
+                /**
+                 * @description The action to take for skillSupplyChain issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillToolAbuse?: {
+                /**
+                 * @description The action to take for skillToolAbuse issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillToolChaining?: {
+                /**
+                 * @description The action to take for skillToolChaining issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              skillTransitiveTrust?: {
+                /**
+                 * @description The action to take for skillTransitiveTrust issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              socketUpgradeAvailable?: {
+                /**
+                 * @description The action to take for socketUpgradeAvailable issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              longStrings?: {
+                /**
+                 * @description The action to take for longStrings issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              highEntropyStrings?: {
+                /**
+                 * @description The action to take for highEntropyStrings issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              urlStrings?: {
+                /**
+                 * @description The action to take for urlStrings issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              usesEval?: {
+                /**
+                 * @description The action to take for usesEval issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              dynamicRequire?: {
+                /**
+                 * @description The action to take for dynamicRequire issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              envVars?: {
+                /**
+                 * @description The action to take for envVars issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              missingDependency?: {
+                /**
+                 * @description The action to take for missingDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unusedDependency?: {
+                /**
+                 * @description The action to take for unusedDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              peerDependency?: {
+                /**
+                 * @description The action to take for peerDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              uncaughtOptionalDependency?: {
+                /**
+                 * @description The action to take for uncaughtOptionalDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              unresolvedRequire?: {
+                /**
+                 * @description The action to take for unresolvedRequire issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              extraneousDependency?: {
+                /**
+                 * @description The action to take for extraneousDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              obfuscatedRequire?: {
+                /**
+                 * @description The action to take for obfuscatedRequire issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              obfuscatedFile?: {
+                /**
+                 * @description The action to take for obfuscatedFile issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              minifiedFile?: {
+                /**
+                 * @description The action to take for minifiedFile issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              installScripts?: {
+                /**
+                 * @description The action to take for installScripts issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              hasNativeCode?: {
+                /**
+                 * @description The action to take for hasNativeCode issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              binScriptConfusion?: {
+                /**
+                 * @description The action to take for binScriptConfusion issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              shellScriptOverride?: {
+                /**
+                 * @description The action to take for shellScriptOverride issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              didYouMean?: {
+                /**
+                 * @description The action to take for didYouMean issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              gptDidYouMean?: {
+                /**
+                 * @description The action to take for gptDidYouMean issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              bidi?: {
+                /**
+                 * @description The action to take for bidi issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              zeroWidth?: {
+                /**
+                 * @description The action to take for zeroWidth issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              badEncoding?: {
+                /**
+                 * @description The action to take for badEncoding issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              homoglyphs?: {
+                /**
+                 * @description The action to take for homoglyphs issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              invisibleChars?: {
+                /**
+                 * @description The action to take for invisibleChars issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              suspiciousString?: {
+                /**
+                 * @description The action to take for suspiciousString issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              potentialVulnerability?: {
+                /**
+                 * @description The action to take for potentialVulnerability issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxProposedApiUsage?: {
+                /**
+                 * @description The action to take for vsxProposedApiUsage issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxActivationWildcard?: {
+                /**
+                 * @description The action to take for vsxActivationWildcard issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxWorkspaceContainsActivation?: {
+                /**
+                 * @description The action to take for vsxWorkspaceContainsActivation issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxUntrustedWorkspaceSupported?: {
+                /**
+                 * @description The action to take for vsxUntrustedWorkspaceSupported issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxVirtualWorkspaceSupported?: {
+                /**
+                 * @description The action to take for vsxVirtualWorkspaceSupported issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxWebviewContribution?: {
+                /**
+                 * @description The action to take for vsxWebviewContribution issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxDebuggerContribution?: {
+                /**
+                 * @description The action to take for vsxDebuggerContribution issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxExtensionDependency?: {
+                /**
+                 * @description The action to take for vsxExtensionDependency issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+              vsxExtensionPack?: {
+                /**
+                 * @description The action to take for vsxExtensionPack issues.
+                 * @enum {string}
+                 */
+                action: 'defer' | 'error' | 'warn' | 'monitor' | 'ignore'
+              }
+            }
+            /**
+             * @description The default security policy for the organization
+             * @default default
+             * @enum {string}
+             */
+            securityPolicyDefault?: 'default' | 'low' | 'medium' | 'high'
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get Organization License Policy
+   * @deprecated
+   * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference/viewlicensepolicy) instead.
+   *
+   * Retrieve the license policy of an organization.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - license-policy:read
+   */
+  getOrgLicensePolicy: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description Retrieved license policy details */
+      200: {
+        content: {
+          'application/json': Record
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Update License Policy
+   * @description Set the organization's license policy
+   *
+   *       ## License policy schema
+   *
+   * ```json
+   * {
+   *   allow?: Array
+   *   warn?: Array
+   *   options?: Array
+   * }
+   * ```
+   *
+   * Elements of the `allow` and `warn` arrays strings representing items which should be allowed, or which should trigger a warning; license data found in package which not present in either array will produce a license violation (effectively a "hard" error). For example, to allow Apache-2.0 and MIT to the allow list, simply add the strings "Apache-2.0" and "MIT" to the `allow` array. Strings appearing in these arrays are generally "what you see is what you get", with two important exceptions: strings which are recognized as license classes and strings which are recognized as PURLs are handled differently to allow for more flexible license policy creation.
+   *
+   * ## License Classes
+   *
+   * Strings which are license classes will expand to a list of licenses known to be in that particular license class. Recognized license classes are:
+   *   'permissive',
+   *   'permissive (model)',
+   *   'permissive (gold)',
+   *   'permissive (silver)',
+   *   'permissive (bronze)',
+   *   'permissive (lead)',
+   *   'copyleft',
+   *   'maximal copyleft',
+   *   'network copyleft',
+   *   'strong copyleft',
+   *   'weak copyleft',
+   *   'contributor license agreement',
+   *   'public domain',
+   *   'proprietary free',
+   *   'source available',
+   *   'proprietary',
+   *   'commercial',
+   *   'patent'
+   *
+   * Users can learn more about [copyleft tiers](https://blueoakcouncil.org/copyleft) and [permissive tiers](https://blueoakcouncil.org/list) by reading the linked resources.
+   *
+   *
+   * ## PURLs
+   *
+   * Users may also modify their license policy's allow and warn lists by using [package URLs](https://github.com/package-url/purl-spec) (aka PURLs), which support glob patterns to allow a range of versions, files and directories, etc.
+   *
+   * purl qualifiers which support globs are `filename`, `version_glob`, `artifact_id` and `license_provenance` (primarily used for allowing data from registry metadata).
+   *
+   * ### Examples:
+   * Allow all license data found in a specific version of a package 4.14.1: `pkg:npm/lodash@4.14.1`
+   * Allow all license data found in a version range of a package: `pkg:npm/lodash?version_glob=15.*`
+   * Allow all license data in the test directory of a given package for certain version ranges: `pkg:npm/lodash@15.*.*?file_name=lodash/test/*`
+   * Allow all license data taken from the package registry for a package and version range: `pkg:npm/lodash?version_glob=*&license_provenance=registry_metadata`
+   *
+   * ## Available options
+   *
+   * `toplevelOnly`: only apply the license policy to "top level" license data in a package, which includes registry metadata, LICENSE files, and manifest files which are closest to the root of the package.
+   *
+   * `applyToUnidentified`: Apply license policy to found but unidentified license data. If enabled, the license policy will be applied to license data which could not be affirmatively identified as a known license (this will effectively merge the license policy violation and unidentified license alerts). If disabled, license policy alerts will only be shown for license data which is positively identified as something not allowed or set to warn by the license policy.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - license-policy:update
+   */
+  updateOrgLicensePolicy: {
+    parameters: {
+      query: {
+        /** @description Merge the policy update with the existing policy. Default is true. If false, the existing policy will be replaced with the new policy. */
+        merge_update: boolean
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    requestBody?: {
+      content: {
+        'application/json': Record
+      }
+    }
+    responses: {
+      /** @description Updated repository details */
+      200: {
+        content: {
+          'application/json': Record
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get License Policy (Beta)
+   * @description Returns an organization's license policy including allow, warn, monitor, and deny categories.
+   * The deny category contains all licenses that are not explicitly categorized as allow, warn, or monitor.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - license-policy:read
+   */
+  viewLicensePolicy: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description Saturated License Allow List */
+      200: {
+        content: {
+          'application/json': components['schemas']['SStoredLicensePolicy']
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+      500: components['responses']['SocketInternalServerError']
+    }
+  }
+  /**
+   * Get Socket Basics configuration, including toggles for the various tools it supports.
+   * @description Socket Basics is a CI/CD security scanning suite that runs on your source code, designed to complement Socket SCA and provide full coverage.
+   *
+   * - **SAST** - Find issues and risks with your code via static analysis using best in class Open Source tools
+   * - **Secret Scanning** - Detected potentially leaked secrets and credentials within your code
+   * - **Container Security** - Docker image and Dockerfile vulnerability scanning
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - socket-basics:read
+   */
+  getSocketBasicsConfig: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description Socket Basics settings */
+      200: {
+        content: {
+          'application/json': {
+            /**
+             * @description Enable tabular console output
+             * @default false
+             */
+            consoleTabularEnabled?: boolean
+            /**
+             * @description Enable JSON console output
+             * @default false
+             */
+            consoleJsonEnabled?: boolean
+            /**
+             * @description Enable verbose logging
+             * @default false
+             */
+            verbose?: boolean
+            /**
+             * @description Enable all language SAST scanning
+             * @default false
+             */
+            allLanguagesEnabled?: boolean
+            /**
+             * @description Run Python SAST scanning
+             * @default false
+             */
+            pythonSastEnabled?: boolean
+            /**
+             * @description Run JavaScript SAST scanning
+             * @default false
+             */
+            javascriptSastEnabled?: boolean
+            /**
+             * @description Run Go SAST scanning
+             * @default false
+             */
+            goSastEnabled?: boolean
+            /**
+             * @description Run Golang SAST scanning
+             * @default false
+             */
+            golangSastEnabled?: boolean
+            /**
+             * @description Run Java SAST scanning
+             * @default false
+             */
+            javaSastEnabled?: boolean
+            /**
+             * @description Run PHP SAST scanning
+             * @default false
+             */
+            phpSastEnabled?: boolean
+            /**
+             * @description Run Ruby SAST scanning
+             * @default false
+             */
+            rubySastEnabled?: boolean
+            /**
+             * @description Run C# SAST scanning
+             * @default false
+             */
+            csharpSastEnabled?: boolean
+            /**
+             * @description Run .NET SAST scanning
+             * @default false
+             */
+            dotnetSastEnabled?: boolean
+            /**
+             * @description Run C SAST scanning
+             * @default false
+             */
+            cSastEnabled?: boolean
+            /**
+             * @description Run C++ SAST scanning
+             * @default false
+             */
+            cppSastEnabled?: boolean
+            /**
+             * @description Run Kotlin SAST scanning
+             * @default false
+             */
+            kotlinSastEnabled?: boolean
+            /**
+             * @description Run Scala SAST scanning
+             * @default false
+             */
+            scalaSastEnabled?: boolean
+            /**
+             * @description Run Swift SAST scanning
+             * @default false
+             */
+            swiftSastEnabled?: boolean
+            /**
+             * @description Run Rust SAST scanning
+             * @default false
+             */
+            rustSastEnabled?: boolean
+            /**
+             * @description Run Elixir SAST scanning
+             * @default false
+             */
+            elixirSastEnabled?: boolean
+            /**
+             * @description Enable all SAST rules
+             * @default false
+             */
+            allRulesEnabled?: boolean
+            /**
+             * @description Comma-separated list of enabled Python SAST rules
+             * @default
+             */
+            pythonEnabledRules?: string
+            /**
+             * @description Comma-separated list of disabled Python SAST rules
+             * @default
+             */
+            pythonDisabledRules?: string
+            /**
+             * @description Comma-separated list of enabled JavaScript SAST rules
+             * @default
+             */
+            javascriptEnabledRules?: string
+            /**
+             * @description Comma-separated list of disabled JavaScript SAST rules
+             * @default
+             */
+            javascriptDisabledRules?: string
+            /**
+             * @description Comma-separated list of enabled Go SAST rules
+             * @default
+             */
+            goEnabledRules?: string
+            /**
+             * @description Comma-separated list of disabled Go SAST rules
+             * @default
+             */
+            goDisabledRules?: string
+            /**
+             * @description Comma-separated list of enabled Java SAST rules
+             * @default
+             */
+            javaEnabledRules?: string
+            /**
+             * @description Comma-separated list of disabled Java SAST rules
+             * @default
+             */
+            javaDisabledRules?: string
+            /**
+             * @description Comma-separated list of enabled Kotlin SAST rules
+             * @default
+             */
+            kotlinEnabledRules?: string
+            /**
+             * @description Comma-separated list of disabled Kotlin SAST rules
+             * @default
+             */
+            kotlinDisabledRules?: string
+            /**
+             * @description Comma-separated list of enabled Scala SAST rules
+             * @default
+             */
+            scalaEnabledRules?: string
+            /**
+             * @description Comma-separated list of disabled Scala SAST rules
+             * @default
+             */
+            scalaDisabledRules?: string
+            /**
+             * @description Comma-separated list of enabled PHP SAST rules
+             * @default
+             */
+            phpEnabledRules?: string
+            /**
+             * @description Comma-separated list of disabled PHP SAST rules
+             * @default
+             */
+            phpDisabledRules?: string
+            /**
+             * @description Comma-separated list of enabled Ruby SAST rules
+             * @default
+             */
+            rubyEnabledRules?: string
+            /**
+             * @description Comma-separated list of disabled Ruby SAST rules
+             * @default
+             */
+            rubyDisabledRules?: string
+            /**
+             * @description Comma-separated list of enabled C# SAST rules
+             * @default
+             */
+            csharpEnabledRules?: string
+            /**
+             * @description Comma-separated list of disabled C# SAST rules
+             * @default
+             */
+            csharpDisabledRules?: string
+            /**
+             * @description Comma-separated list of enabled .NET SAST rules
+             * @default
+             */
+            dotnetEnabledRules?: string
+            /**
+             * @description Comma-separated list of disabled .NET SAST rules
+             * @default
+             */
+            dotnetDisabledRules?: string
+            /**
+             * @description Comma-separated list of enabled C SAST rules
+             * @default
+             */
+            cEnabledRules?: string
+            /**
+             * @description Comma-separated list of disabled C SAST rules
+             * @default
+             */
+            cDisabledRules?: string
+            /**
+             * @description Comma-separated list of enabled C++ SAST rules
+             * @default
+             */
+            cppEnabledRules?: string
+            /**
+             * @description Comma-separated list of disabled C++ SAST rules
+             * @default
+             */
+            cppDisabledRules?: string
+            /**
+             * @description Comma-separated list of enabled Swift SAST rules
+             * @default
+             */
+            swiftEnabledRules?: string
+            /**
+             * @description Comma-separated list of disabled Swift SAST rules
+             * @default
+             */
+            swiftDisabledRules?: string
+            /**
+             * @description Comma-separated list of enabled Rust SAST rules
+             * @default
+             */
+            rustEnabledRules?: string
+            /**
+             * @description Comma-separated list of disabled Rust SAST rules
+             * @default
+             */
+            rustDisabledRules?: string
+            /**
+             * @description Comma-separated list of enabled Elixir SAST rules
+             * @default
+             */
+            elixirEnabledRules?: string
+            /**
+             * @description Comma-separated list of disabled Elixir SAST rules
+             * @default
+             */
+            elixirDisabledRules?: string
+            /**
+             * @description Notification method for OpenGrep
+             * @default
+             */
+            openGrepNotificationMethod?: string
+            /**
+             * @description Enable Socket Tier 1 reachability analysis
+             * @default false
+             */
+            socketTier1Enabled?: boolean
+            /**
+             * @description Additional parameters for Socket SCA
+             * @default
+             */
+            socketAdditionalParams?: string
+            /**
+             * @description Enable secret scanning
+             * @default false
+             */
+            secretScanningEnabled?: boolean
+            /**
+             * @description Directories to exclude from Trufflehog scanning
+             * @default
+             */
+            trufflehogExcludeDir?: string
+            /**
+             * @description Show unverified secrets in Trufflehog results
+             * @default false
+             */
+            trufflehogShowUnverified?: boolean
+            /**
+             * @description Notification method for Trufflehog
+             * @default
+             */
+            trufflehogNotificationMethod?: string
+            /**
+             * @description Comma-separated list of container images to scan
+             * @default
+             */
+            containerImagesToScan?: string
+            /**
+             * @description Comma-separated list of Dockerfiles to scan
+             * @default
+             */
+            dockerfiles?: string
+            /**
+             * @description Enable Trivy image scanning
+             * @default false
+             */
+            trivyImageEnabled?: boolean
+            /**
+             * @description Enable Trivy Dockerfile scanning
+             * @default false
+             */
+            trivyDockerfileEnabled?: boolean
+            /**
+             * @description Notification method for Trivy
+             * @default
+             */
+            trivyNotificationMethod?: string
+            /**
+             * @description Comma-separated list of disabled Trivy rules
+             * @default
+             */
+            trivyDisabledRules?: string
+            /**
+             * @description Disable Trivy image scanning
+             * @default false
+             */
+            trivyImageScanningDisabled?: boolean
+            /**
+             * @description Slack webhook URL for notifications
+             * @default
+             */
+            slackWebhookUrl?: string
+            /**
+             * @description Generic webhook URL for notifications
+             * @default
+             */
+            webhookUrl?: string
+            /**
+             * @description Microsoft Sentinel workspace ID
+             * @default
+             */
+            msSentinelWorkspaceId?: string
+            /**
+             * @description Microsoft Sentinel key
+             * @default
+             */
+            msSentinelKey?: string
+            /**
+             * @description Sumo Logic endpoint URL
+             * @default
+             */
+            sumologicEndpoint?: string
+            /**
+             * @description Jira server URL
+             * @default
+             */
+            jiraUrl?: string
+            /**
+             * @description Jira project key
+             * @default
+             */
+            jiraProject?: string
+            /**
+             * @description Jira user email
+             * @default
+             */
+            jiraEmail?: string
+            /**
+             * @description Jira API token
+             * @default
+             */
+            jiraApiToken?: string
+            /**
+             * @description GitHub API token
+             * @default
+             */
+            githubToken?: string
+            /**
+             * @description GitHub API URL
+             * @default
+             */
+            githubApiUrl?: string
+            /**
+             * @description Microsoft Teams webhook URL
+             * @default
+             */
+            msteamsWebhookUrl?: string
+            /**
+             * @description Enable S3 upload for scan results
+             * @default false
+             */
+            s3Enabled?: boolean
+            /**
+             * @description S3 bucket name
+             * @default
+             */
+            s3Bucket?: string
+            /**
+             * @description S3 access key
+             * @default
+             */
+            s3AccessKey?: string
+            /**
+             * @description S3 secret key
+             * @default
+             */
+            s3SecretKey?: string
+            /**
+             * @description S3 endpoint URL
+             * @default
+             */
+            s3Endpoint?: string
+            /**
+             * @description S3 region
+             * @default
+             */
+            s3Region?: string
+            /**
+             * @description Enable external CVE scanning
+             * @default false
+             */
+            externalCveScanningEnabled?: boolean
+            /**
+             * @description Enable Socket dependency scanning (legacy)
+             * @default false
+             */
+            socketScanningEnabled?: boolean
+            /**
+             * @description Enable Socket SCA scanning (legacy)
+             * @default false
+             */
+            socketScaEnabled?: boolean
+            /**
+             * @description Additional configuration parameters (legacy)
+             * @default
+             */
+            additionalParameters?: string
+          }
+        }
+      }
+      403: components['responses']['SocketForbidden']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * List historical alerts (Beta)
+   * @description List historical alerts.
+   *
+   * This endpoint consumes 10 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - historical:alerts-list
+   */
+  historicalAlertsList: {
+    parameters: {
+      query?: {
+        /** @description The UTC date in YYYY-MM-DD format for which to fetch alerts */
+        date?: string
+        /** @description The number of days of data to fetch as an offset from input date (e.g. "-7d" or "7d") or use "latest" to query for latest alerts for each repo */
+        range?: string
+        /** @description Specify the maximum number of results to return per page (intermediate pages may have fewer than this limit and callers should always check "endCursor" in response body to know if there are more pages) */
+        per_page?: number
+        /** @description The pagination cursor that was returned as the "endCursor" property in previous request */
+        startAfterCursor?: string
+        /** @description Comma-separated list of alert actions ("error", "warn", "monitor", or "ignore) that should be included */
+        'filters.alertAction'?: string
+        /** @description Comma-separated list of alert actions ("error", "warn", "monitor", or "ignore) that should be excluded */
+        'filters.alertAction.notIn'?: string
+        /** @description Comma-separated list of alert action source types ("fallback", "injected-alert", "org-policy", "reachability", "repo-label-policy", "socket-yml", or "triage") that should be included */
+        'filters.alertActionSourceType'?: string
+        /** @description Comma-separated list of alert action source types ("fallback", "injected-alert", "org-policy", "reachability", "repo-label-policy", "socket-yml", or "triage") that should be excluded */
+        'filters.alertActionSourceType.notIn'?: string
+        /** @description Comma-separated list of alert categories ("supplyChainRisk", "maintenance", "quality", "license", or "vulnerability") that should be included */
+        'filters.alertCategory'?: string
+        /** @description Comma-separated list of alert categories ("supplyChainRisk", "maintenance", "quality", "license", or "vulnerability") that should be excluded */
+        'filters.alertCategory.notIn'?: string
+        /** @description CVE ID */
+        'filters.alertCveId'?: string
+        /** @description CVE ID */
+        'filters.alertCveId.notIn'?: string
+        /** @description CVE title */
+        'filters.alertCveTitle'?: string
+        /** @description CVE title */
+        'filters.alertCveTitle.notIn'?: string
+        /** @description CWE ID */
+        'filters.alertCweId'?: string
+        /** @description CWE ID */
+        'filters.alertCweId.notIn'?: string
+        /** @description CWE name */
+        'filters.alertCweName'?: string
+        /** @description CWE name */
+        'filters.alertCweName.notIn'?: string
+        /** @description Alert EPSS ("low", "medium", "high", "critical") */
+        'filters.alertEPSS'?: string
+        /** @description Alert EPSS ("low", "medium", "high", "critical") */
+        'filters.alertEPSS.notIn'?: string
+        /** @description Comma-separated list of alert fix types ("upgrade", "cve", or "remove") that should be included */
+        'filters.alertFixType'?: string
+        /** @description Comma-separated list of alert fix types ("upgrade", "cve", or "remove") that should be excluded */
+        'filters.alertFixType.notIn'?: string
+        /** @description Alert KEV (Known Exploited Vulnerability) filter flag */
+        'filters.alertKEV'?: boolean
+        /** @description Alert KEV (Known Exploited Vulnerability) filter flag */
+        'filters.alertKEV.notIn'?: boolean
+        /** @description Alert priority ("low", "medium", "high", or "critical") */
+        'filters.alertPriority'?: string
+        /** @description Alert priority ("low", "medium", "high", or "critical") */
+        'filters.alertPriority.notIn'?: string
+        /** @description Comma-separated list of alert CVE reachability analysis types ("full-scan" or "precomputed") that should be included */
+        'filters.alertReachabilityAnalysisType'?: string
+        /** @description Comma-separated list of alert CVE reachability analysis types ("full-scan" or "precomputed") that should be excluded */
+        'filters.alertReachabilityAnalysisType.notIn'?: string
+        /** @description Comma-separated list of alert CVE reachability types ("direct_dependency", "error", "maybe_reachable", "missing_support", "pending", "reachable", "undeterminable_reachability", "unknown", or "unreachable") that should be included */
+        'filters.alertReachabilityType'?: string
+        /** @description Comma-separated list of alert CVE reachability types ("direct_dependency", "error", "maybe_reachable", "missing_support", "pending", "reachable", "undeterminable_reachability", "unknown", or "unreachable") that should be excluded */
+        'filters.alertReachabilityType.notIn'?: string
+        /** @description Comma-separated list of alert severities ("low", "medium", "high", or "critical") that should be included */
+        'filters.alertSeverity'?: string
+        /** @description Comma-separated list of alert severities ("low", "medium", "high", or "critical") that should be excluded */
+        'filters.alertSeverity.notIn'?: string
+        /** @description Comma-separated list of alert types (e.g. "usesEval", "unmaintained", etc.) that should be included */
+        'filters.alertType'?: string
+        /** @description Comma-separated list of alert types (e.g. "usesEval", "unmaintained", etc.) that should be excluded */
+        'filters.alertType.notIn'?: string
+        /** @description Name of artifact */
+        'filters.artifactName'?: string
+        /** @description Name of artifact */
+        'filters.artifactName.notIn'?: string
+        /** @description Comma-separated list of artifact types (e.g. "npm", "pypi", "gem", "maven", "golang", etc.) that should be included */
+        'filters.artifactType'?: string
+        /** @description Comma-separated list of artifact types (e.g. "npm", "pypi", "gem", "maven", "golang", etc.) that should be excluded */
+        'filters.artifactType.notIn'?: string
+        /** @description Comma-separated list of branch names that should be included */
+        'filters.branch'?: string
+        /** @description Comma-separated list of branch names that should be excluded */
+        'filters.branch.notIn'?: string
+        /** @description Comma-separated list of patch statuses ("patch_unavailable", "patch_available", or "patch_applied") that should be included */
+        'filters.cvePatchStatus'?: string
+        /** @description Comma-separated list of patch statuses ("patch_unavailable", "patch_available", or "patch_applied") that should be excluded */
+        'filters.cvePatchStatus.notIn'?: string
+        /** @description Dead/reachable dependency filter flag */
+        'filters.dependencyDead'?: boolean
+        /** @description Dead/reachable dependency filter flag */
+        'filters.dependencyDead.notIn'?: boolean
+        /** @description Development/production dependency filter flag */
+        'filters.dependencyDev'?: boolean
+        /** @description Development/production dependency filter flag */
+        'filters.dependencyDev.notIn'?: boolean
+        /** @description Direct/transitive dependency filter flag */
+        'filters.dependencyDirect'?: boolean
+        /** @description Direct/transitive dependency filter flag */
+        'filters.dependencyDirect.notIn'?: boolean
+        /** @description Comma-separated list of repo full names that should be included */
+        'filters.repoFullName'?: string
+        /** @description Comma-separated list of repo full names that should be excluded */
+        'filters.repoFullName.notIn'?: string
+        /** @description Comma-separated list of repo labels that should be included. Use "" to filter for repositories with no labels. */
+        'filters.repoLabels'?: string
+        /** @description Comma-separated list of repo labels that should be excluded. Use "" to filter for repositories with no labels. */
+        'filters.repoLabels.notIn'?: string
+        /** @description Comma-separated list of repo slugs that should be included */
+        'filters.repoSlug'?: string
+        /** @description Comma-separated list of repo slugs that should be excluded */
+        'filters.repoSlug.notIn'?: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description The paginated array of API tokens for the organization, and related metadata. */
+      200: {
+        content: {
+          'application/json': {
+            /** @default */
+            endCursor: string | null
+            items: Array<{
+              /** @default */
+              repoFullName: string
+              /** @default */
+              repoId: string | null
+              /** @default */
+              repoSlug: string
+              repoLabels: string[]
+              repoLabelIds: string[]
+              /** @default */
+              branch: string
+              /** @default false */
+              defaultBranch: boolean
+              /** @default */
+              fullScanId: string
+              /** @default */
+              scannedAt: string
+              artifact: {
+                /** @default */
+                id: string | null
+                /** @default */
+                license: string | null
+                /** @default */
+                name: string
+                /** @default */
+                namespace: string | null
+                /** @default */
+                type: string
+                /** @default */
+                version: string
+                /** @default */
+                artifact_id?: string
+                /** @default */
+                artifactId?: string
+                /** @default */
+                author?: string
+                capabilities?: components['schemas']['Capabilities']
+                qualifiers?: components['schemas']['Qualifiers']
+                scores?: components['schemas']['SocketScore']
+                /** @default 0 */
+                size?: number
+                /** @default */
+                subpath?: string
+              }
+              alert: {
+                /** @default */
+                key: string
+                /** @default */
+                type: string
+                /** @default 0 */
+                severity: number
+                /** @default */
+                severityName: string
+                /** @default */
+                action: string
+                /** @default */
+                category: string
+                /** @default */
+                file?: string | null
+                /** @default null */
+                props?: Record | null
+                /** @default 0 */
+                start?: number | null
+                /** @default 0 */
+                end?: number | null
+                fix?: {
+                  /** @default */
+                  type: string
+                  /** @default */
+                  description: string
+                } | null
+              }
+              dependency: {
+                /** @default false */
+                direct: boolean
+                /** @default false */
+                dev: boolean
+                /** @default false */
+                dead: boolean
+                manifestFiles?: components['schemas']['SocketManifestReference'][]
+                topLevelAncestors?: components['schemas']['SocketId'][]
+                dependencies?: components['schemas']['SocketId'][]
+              }
+            }>
+            meta: {
+              /** @default */
+              organizationId: string
+              /** @default 0 */
+              queryStartTimestamp: number
+              /** @default */
+              startDateInclusive: string
+              /** @default */
+              endDateInclusive: string
+              /** @default false */
+              includeLatestAlertsOnly: boolean
+              filters: {
+                /** @description Comma-separated list of alert actions ("error", "warn", "monitor", or "ignore) that should be included */
+                alertAction?: string[]
+                /** @description Comma-separated list of alert actions ("error", "warn", "monitor", or "ignore) that should be excluded */
+                'alertAction.notIn'?: string[]
+                /** @description Comma-separated list of alert action source types ("fallback", "injected-alert", "org-policy", "reachability", "repo-label-policy", "socket-yml", or "triage") that should be included */
+                alertActionSourceType?: string[]
+                /** @description Comma-separated list of alert action source types ("fallback", "injected-alert", "org-policy", "reachability", "repo-label-policy", "socket-yml", or "triage") that should be excluded */
+                'alertActionSourceType.notIn'?: string[]
+                /** @description Comma-separated list of alert categories ("supplyChainRisk", "maintenance", "quality", "license", or "vulnerability") that should be included */
+                alertCategory?: string[]
+                /** @description Comma-separated list of alert categories ("supplyChainRisk", "maintenance", "quality", "license", or "vulnerability") that should be excluded */
+                'alertCategory.notIn'?: string[]
+                /** @description CVE ID */
+                alertCveId?: string[]
+                /** @description CVE ID */
+                'alertCveId.notIn'?: string[]
+                /** @description CVE title */
+                alertCveTitle?: string[]
+                /** @description CVE title */
+                'alertCveTitle.notIn'?: string[]
+                /** @description CWE ID */
+                alertCweId?: string[]
+                /** @description CWE ID */
+                'alertCweId.notIn'?: string[]
+                /** @description CWE name */
+                alertCweName?: string[]
+                /** @description CWE name */
+                'alertCweName.notIn'?: string[]
+                /** @description Alert EPSS ("low", "medium", "high", "critical") */
+                alertEPSS?: string[]
+                /** @description Alert EPSS ("low", "medium", "high", "critical") */
+                'alertEPSS.notIn'?: string[]
+                /** @description Comma-separated list of alert fix types ("upgrade", "cve", or "remove") that should be included */
+                alertFixType?: string[]
+                /** @description Comma-separated list of alert fix types ("upgrade", "cve", or "remove") that should be excluded */
+                'alertFixType.notIn'?: string[]
+                /** @description Alert KEV (Known Exploited Vulnerability) filter flag */
+                alertKEV?: boolean[]
+                /** @description Alert priority ("low", "medium", "high", or "critical") */
+                alertPriority?: string[]
+                /** @description Alert priority ("low", "medium", "high", or "critical") */
+                'alertPriority.notIn'?: string[]
+                /** @description Comma-separated list of alert CVE reachability analysis types ("full-scan" or "precomputed") that should be included */
+                alertReachabilityAnalysisType?: string[]
+                /** @description Comma-separated list of alert CVE reachability analysis types ("full-scan" or "precomputed") that should be excluded */
+                'alertReachabilityAnalysisType.notIn'?: string[]
+                /** @description Comma-separated list of alert CVE reachability types ("direct_dependency", "error", "maybe_reachable", "missing_support", "pending", "reachable", "undeterminable_reachability", "unknown", or "unreachable") that should be included */
+                alertReachabilityType?: string[]
+                /** @description Comma-separated list of alert CVE reachability types ("direct_dependency", "error", "maybe_reachable", "missing_support", "pending", "reachable", "undeterminable_reachability", "unknown", or "unreachable") that should be excluded */
+                'alertReachabilityType.notIn'?: string[]
+                /** @description Comma-separated list of alert severities ("low", "medium", "high", or "critical") that should be included */
+                alertSeverity?: string[]
+                /** @description Comma-separated list of alert severities ("low", "medium", "high", or "critical") that should be excluded */
+                'alertSeverity.notIn'?: string[]
+                /** @description Comma-separated list of alert types (e.g. "usesEval", "unmaintained", etc.) that should be included */
+                alertType?: string[]
+                /** @description Comma-separated list of alert types (e.g. "usesEval", "unmaintained", etc.) that should be excluded */
+                'alertType.notIn'?: string[]
+                /** @description Name of artifact */
+                artifactName?: string[]
+                /** @description Name of artifact */
+                'artifactName.notIn'?: string[]
+                /** @description Comma-separated list of artifact types (e.g. "npm", "pypi", "gem", "maven", "golang", etc.) that should be included */
+                artifactType?: string[]
+                /** @description Comma-separated list of artifact types (e.g. "npm", "pypi", "gem", "maven", "golang", etc.) that should be excluded */
+                'artifactType.notIn'?: string[]
+                /** @description Comma-separated list of branch names that should be included */
+                branch?: string[]
+                /** @description Comma-separated list of branch names that should be excluded */
+                'branch.notIn'?: string[]
+                /** @description Comma-separated list of patch statuses ("patch_unavailable", "patch_available", or "patch_applied") that should be included */
+                cvePatchStatus?: string[]
+                /** @description Comma-separated list of patch statuses ("patch_unavailable", "patch_available", or "patch_applied") that should be excluded */
+                'cvePatchStatus.notIn'?: string[]
+                /** @description Dead/reachable dependency filter flag */
+                dependencyDead?: boolean[]
+                /** @description Development/production dependency filter flag */
+                dependencyDev?: boolean[]
+                /** @description Direct/transitive dependency filter flag */
+                dependencyDirect?: boolean[]
+                /** @description Comma-separated list of repo full names that should be included */
+                repoFullName?: string[]
+                /** @description Comma-separated list of repo full names that should be excluded */
+                'repoFullName.notIn'?: string[]
+                /** @description Comma-separated list of repo labels that should be included. Use "" to filter for repositories with no labels. */
+                repoLabels?: string[]
+                /** @description Comma-separated list of repo labels that should be excluded. Use "" to filter for repositories with no labels. */
+                'repoLabels.notIn'?: string[]
+                /** @description Comma-separated list of repo slugs that should be included */
+                repoSlug?: string[]
+                /** @description Comma-separated list of repo slugs that should be excluded */
+                'repoSlug.notIn'?: string[]
+              }
+            }
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Trend of historical alerts (Beta)
+   * @description Trend analytics of historical alerts.
+   *
+   * This endpoint consumes 10 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - historical:alerts-trend
+   */
+  historicalAlertsTrend: {
+    parameters: {
+      query?: {
+        /** @description The UTC date in YYYY-MM-DD format for which to fetch alerts */
+        date?: string
+        /** @description The number of days of data to fetch as an offset from input date */
+        range?: string
+        /** @description Comma-separated list of fields that should be used for count aggregation (allowed: alertSeverity,repoSlug,repoFullName,branch,repoLabels,alertType,artifactType,alertAction,alertActionSourceType,alertFixType,alertCategory,alertCveId,alertCveTitle,alertCweId,alertCweName,alertReachabilityType,cvePatchStatus,alertReachabilityAnalysisType,alertPriority,alertKEV,alertEPSS,dependencyDirect,dependencyDev,dependencyDead) */
+        'aggregation.fields'?: string
+        /** @description Comma-separated list of alert actions ("error", "warn", "monitor", or "ignore) that should be included */
+        'filters.alertAction'?: string
+        /** @description Comma-separated list of alert actions ("error", "warn", "monitor", or "ignore) that should be excluded */
+        'filters.alertAction.notIn'?: string
+        /** @description Comma-separated list of alert action source types ("fallback", "injected-alert", "org-policy", "reachability", "repo-label-policy", "socket-yml", or "triage") that should be included */
+        'filters.alertActionSourceType'?: string
+        /** @description Comma-separated list of alert action source types ("fallback", "injected-alert", "org-policy", "reachability", "repo-label-policy", "socket-yml", or "triage") that should be excluded */
+        'filters.alertActionSourceType.notIn'?: string
+        /** @description Comma-separated list of alert categories ("supplyChainRisk", "maintenance", "quality", "license", or "vulnerability") that should be included */
+        'filters.alertCategory'?: string
+        /** @description Comma-separated list of alert categories ("supplyChainRisk", "maintenance", "quality", "license", or "vulnerability") that should be excluded */
+        'filters.alertCategory.notIn'?: string
+        /** @description CVE ID */
+        'filters.alertCveId'?: string
+        /** @description CVE ID */
+        'filters.alertCveId.notIn'?: string
+        /** @description CVE title */
+        'filters.alertCveTitle'?: string
+        /** @description CVE title */
+        'filters.alertCveTitle.notIn'?: string
+        /** @description CWE ID */
+        'filters.alertCweId'?: string
+        /** @description CWE ID */
+        'filters.alertCweId.notIn'?: string
+        /** @description CWE name */
+        'filters.alertCweName'?: string
+        /** @description CWE name */
+        'filters.alertCweName.notIn'?: string
+        /** @description Alert EPSS ("low", "medium", "high", "critical") */
+        'filters.alertEPSS'?: string
+        /** @description Alert EPSS ("low", "medium", "high", "critical") */
+        'filters.alertEPSS.notIn'?: string
+        /** @description Comma-separated list of alert fix types ("upgrade", "cve", or "remove") that should be included */
+        'filters.alertFixType'?: string
+        /** @description Comma-separated list of alert fix types ("upgrade", "cve", or "remove") that should be excluded */
+        'filters.alertFixType.notIn'?: string
+        /** @description Alert KEV (Known Exploited Vulnerability) filter flag */
+        'filters.alertKEV'?: boolean
+        /** @description Alert KEV (Known Exploited Vulnerability) filter flag */
+        'filters.alertKEV.notIn'?: boolean
+        /** @description Alert priority ("low", "medium", "high", or "critical") */
+        'filters.alertPriority'?: string
+        /** @description Alert priority ("low", "medium", "high", or "critical") */
+        'filters.alertPriority.notIn'?: string
+        /** @description Comma-separated list of alert CVE reachability analysis types ("full-scan" or "precomputed") that should be included */
+        'filters.alertReachabilityAnalysisType'?: string
+        /** @description Comma-separated list of alert CVE reachability analysis types ("full-scan" or "precomputed") that should be excluded */
+        'filters.alertReachabilityAnalysisType.notIn'?: string
+        /** @description Comma-separated list of alert CVE reachability types ("direct_dependency", "error", "maybe_reachable", "missing_support", "pending", "reachable", "undeterminable_reachability", "unknown", or "unreachable") that should be included */
+        'filters.alertReachabilityType'?: string
+        /** @description Comma-separated list of alert CVE reachability types ("direct_dependency", "error", "maybe_reachable", "missing_support", "pending", "reachable", "undeterminable_reachability", "unknown", or "unreachable") that should be excluded */
+        'filters.alertReachabilityType.notIn'?: string
+        /** @description Comma-separated list of alert severities ("low", "medium", "high", or "critical") that should be included */
+        'filters.alertSeverity'?: string
+        /** @description Comma-separated list of alert severities ("low", "medium", "high", or "critical") that should be excluded */
+        'filters.alertSeverity.notIn'?: string
+        /** @description Comma-separated list of alert types (e.g. "usesEval", "unmaintained", etc.) that should be included */
+        'filters.alertType'?: string
+        /** @description Comma-separated list of alert types (e.g. "usesEval", "unmaintained", etc.) that should be excluded */
+        'filters.alertType.notIn'?: string
+        /** @description Name of artifact */
+        'filters.artifactName'?: string
+        /** @description Name of artifact */
+        'filters.artifactName.notIn'?: string
+        /** @description Comma-separated list of artifact types (e.g. "npm", "pypi", "gem", "maven", "golang", etc.) that should be included */
+        'filters.artifactType'?: string
+        /** @description Comma-separated list of artifact types (e.g. "npm", "pypi", "gem", "maven", "golang", etc.) that should be excluded */
+        'filters.artifactType.notIn'?: string
+        /** @description Comma-separated list of branch names that should be included */
+        'filters.branch'?: string
+        /** @description Comma-separated list of branch names that should be excluded */
+        'filters.branch.notIn'?: string
+        /** @description Comma-separated list of patch statuses ("patch_unavailable", "patch_available", or "patch_applied") that should be included */
+        'filters.cvePatchStatus'?: string
+        /** @description Comma-separated list of patch statuses ("patch_unavailable", "patch_available", or "patch_applied") that should be excluded */
+        'filters.cvePatchStatus.notIn'?: string
+        /** @description Dead/reachable dependency filter flag */
+        'filters.dependencyDead'?: boolean
+        /** @description Dead/reachable dependency filter flag */
+        'filters.dependencyDead.notIn'?: boolean
+        /** @description Development/production dependency filter flag */
+        'filters.dependencyDev'?: boolean
+        /** @description Development/production dependency filter flag */
+        'filters.dependencyDev.notIn'?: boolean
+        /** @description Direct/transitive dependency filter flag */
+        'filters.dependencyDirect'?: boolean
+        /** @description Direct/transitive dependency filter flag */
+        'filters.dependencyDirect.notIn'?: boolean
+        /** @description Comma-separated list of repo full names that should be included */
+        'filters.repoFullName'?: string
+        /** @description Comma-separated list of repo full names that should be excluded */
+        'filters.repoFullName.notIn'?: string
+        /** @description Comma-separated list of repo labels that should be included. Use "" to filter for repositories with no labels. */
+        'filters.repoLabels'?: string
+        /** @description Comma-separated list of repo labels that should be excluded. Use "" to filter for repositories with no labels. */
+        'filters.repoLabels.notIn'?: string
+        /** @description Comma-separated list of repo slugs that should be included */
+        'filters.repoSlug'?: string
+        /** @description Comma-separated list of repo slugs that should be excluded */
+        'filters.repoSlug.notIn'?: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description The trend data */
+      200: {
+        content: {
+          'application/json': {
+            meta: {
+              /** @default */
+              organizationId: string
+              /** @default */
+              startDateInclusive: string
+              /** @default */
+              endDateInclusive: string
+              /** @default */
+              interval: string
+              aggregation: {
+                fields: string[]
+                groups: string[][]
+              }
+              filters: {
+                /** @description Comma-separated list of alert actions ("error", "warn", "monitor", or "ignore) that should be included */
+                alertAction?: string[]
+                /** @description Comma-separated list of alert actions ("error", "warn", "monitor", or "ignore) that should be excluded */
+                'alertAction.notIn'?: string[]
+                /** @description Comma-separated list of alert action source types ("fallback", "injected-alert", "org-policy", "reachability", "repo-label-policy", "socket-yml", or "triage") that should be included */
+                alertActionSourceType?: string[]
+                /** @description Comma-separated list of alert action source types ("fallback", "injected-alert", "org-policy", "reachability", "repo-label-policy", "socket-yml", or "triage") that should be excluded */
+                'alertActionSourceType.notIn'?: string[]
+                /** @description Comma-separated list of alert categories ("supplyChainRisk", "maintenance", "quality", "license", or "vulnerability") that should be included */
+                alertCategory?: string[]
+                /** @description Comma-separated list of alert categories ("supplyChainRisk", "maintenance", "quality", "license", or "vulnerability") that should be excluded */
+                'alertCategory.notIn'?: string[]
+                /** @description CVE ID */
+                alertCveId?: string[]
+                /** @description CVE ID */
+                'alertCveId.notIn'?: string[]
+                /** @description CVE title */
+                alertCveTitle?: string[]
+                /** @description CVE title */
+                'alertCveTitle.notIn'?: string[]
+                /** @description CWE ID */
+                alertCweId?: string[]
+                /** @description CWE ID */
+                'alertCweId.notIn'?: string[]
+                /** @description CWE name */
+                alertCweName?: string[]
+                /** @description CWE name */
+                'alertCweName.notIn'?: string[]
+                /** @description Alert EPSS ("low", "medium", "high", "critical") */
+                alertEPSS?: string[]
+                /** @description Alert EPSS ("low", "medium", "high", "critical") */
+                'alertEPSS.notIn'?: string[]
+                /** @description Comma-separated list of alert fix types ("upgrade", "cve", or "remove") that should be included */
+                alertFixType?: string[]
+                /** @description Comma-separated list of alert fix types ("upgrade", "cve", or "remove") that should be excluded */
+                'alertFixType.notIn'?: string[]
+                /** @description Alert KEV (Known Exploited Vulnerability) filter flag */
+                alertKEV?: boolean[]
+                /** @description Alert priority ("low", "medium", "high", or "critical") */
+                alertPriority?: string[]
+                /** @description Alert priority ("low", "medium", "high", or "critical") */
+                'alertPriority.notIn'?: string[]
+                /** @description Comma-separated list of alert CVE reachability analysis types ("full-scan" or "precomputed") that should be included */
+                alertReachabilityAnalysisType?: string[]
+                /** @description Comma-separated list of alert CVE reachability analysis types ("full-scan" or "precomputed") that should be excluded */
+                'alertReachabilityAnalysisType.notIn'?: string[]
+                /** @description Comma-separated list of alert CVE reachability types ("direct_dependency", "error", "maybe_reachable", "missing_support", "pending", "reachable", "undeterminable_reachability", "unknown", or "unreachable") that should be included */
+                alertReachabilityType?: string[]
+                /** @description Comma-separated list of alert CVE reachability types ("direct_dependency", "error", "maybe_reachable", "missing_support", "pending", "reachable", "undeterminable_reachability", "unknown", or "unreachable") that should be excluded */
+                'alertReachabilityType.notIn'?: string[]
+                /** @description Comma-separated list of alert severities ("low", "medium", "high", or "critical") that should be included */
+                alertSeverity?: string[]
+                /** @description Comma-separated list of alert severities ("low", "medium", "high", or "critical") that should be excluded */
+                'alertSeverity.notIn'?: string[]
+                /** @description Comma-separated list of alert types (e.g. "usesEval", "unmaintained", etc.) that should be included */
+                alertType?: string[]
+                /** @description Comma-separated list of alert types (e.g. "usesEval", "unmaintained", etc.) that should be excluded */
+                'alertType.notIn'?: string[]
+                /** @description Name of artifact */
+                artifactName?: string[]
+                /** @description Name of artifact */
+                'artifactName.notIn'?: string[]
+                /** @description Comma-separated list of artifact types (e.g. "npm", "pypi", "gem", "maven", "golang", etc.) that should be included */
+                artifactType?: string[]
+                /** @description Comma-separated list of artifact types (e.g. "npm", "pypi", "gem", "maven", "golang", etc.) that should be excluded */
+                'artifactType.notIn'?: string[]
+                /** @description Comma-separated list of branch names that should be included */
+                branch?: string[]
+                /** @description Comma-separated list of branch names that should be excluded */
+                'branch.notIn'?: string[]
+                /** @description Comma-separated list of patch statuses ("patch_unavailable", "patch_available", or "patch_applied") that should be included */
+                cvePatchStatus?: string[]
+                /** @description Comma-separated list of patch statuses ("patch_unavailable", "patch_available", or "patch_applied") that should be excluded */
+                'cvePatchStatus.notIn'?: string[]
+                /** @description Dead/reachable dependency filter flag */
+                dependencyDead?: boolean[]
+                /** @description Development/production dependency filter flag */
+                dependencyDev?: boolean[]
+                /** @description Direct/transitive dependency filter flag */
+                dependencyDirect?: boolean[]
+                /** @description Comma-separated list of repo full names that should be included */
+                repoFullName?: string[]
+                /** @description Comma-separated list of repo full names that should be excluded */
+                'repoFullName.notIn'?: string[]
+                /** @description Comma-separated list of repo labels that should be included. Use "" to filter for repositories with no labels. */
+                repoLabels?: string[]
+                /** @description Comma-separated list of repo labels that should be excluded. Use "" to filter for repositories with no labels. */
+                'repoLabels.notIn'?: string[]
+                /** @description Comma-separated list of repo slugs that should be included */
+                repoSlug?: string[]
+                /** @description Comma-separated list of repo slugs that should be excluded */
+                'repoSlug.notIn'?: string[]
+              }
+            }
+            items: Array<{
+              /** @default */
+              date: string
+              /** @default 0 */
+              startOfDayTimestamp: number
+              dataPoints: {
+                aggregationGroup: string[]
+                /** @default 0 */
+                count: number
+                /** @default 0 */
+                countDelta: number
+              }[]
+            }>
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Trend of historical dependencies (Beta)
+   * @description Trend analytics of historical dependencies.
+   *
+   * This endpoint consumes 10 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - historical:dependencies-trend
+   */
+  historicalDependenciesTrend: {
+    parameters: {
+      query?: {
+        /** @description The UTC date in YYYY-MM-DD format for which to fetch dependencies */
+        date?: string
+        /** @description The number of days of data to fetch as an offset from input date */
+        range?: string
+        /** @description Comma-separated list of repo full names that should be included */
+        repoFullName?: string
+        /** @description Comma-separated list of repo slugs that should be included */
+        repoSlug?: string
+        /** @description Comma-separated list of repo labels that should be included */
+        repoLabels?: string
+        /** @description Comma-separated list of artifact types (e.g. "npm", "pypi", "gem", "maven", "golang", etc.) that should be included */
+        artifactType?: string
+        /** @description Direct/transitive dependency filter flag */
+        dependencyDirect?: boolean
+        /** @description Development/production dependency filter flag */
+        dependencyDev?: boolean
+        /** @description Dead/reachable dependency filter flag */
+        dependencyDead?: boolean
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description The trend data */
+      200: {
+        content: {
+          'application/json': {
+            meta: {
+              /** @default */
+              organizationId: string
+              /** @default */
+              startDateInclusive: string
+              /** @default */
+              endDateInclusive: string
+              /** @default */
+              interval: string
+              aggregation: {
+                fields: string[]
+                groups: string[][]
+              }
+              filters: {
+                /** @description Comma-separated list of repo full names that should be included */
+                repoFullName?: string[]
+                /** @description Comma-separated list of repo slugs that should be included */
+                repoSlug?: string[]
+                /** @description Comma-separated list of repo labels that should be included */
+                repoLabels?: string[]
+                /** @description Comma-separated list of artifact types (e.g. "npm", "pypi", "gem", "maven", "golang", etc.) that should be included */
+                artifactType?: string[]
+                /** @description Direct/transitive dependency filter flag */
+                dependencyDirect?: boolean[]
+                /** @description Development/production dependency filter flag */
+                dependencyDev?: boolean[]
+                /** @description Dead/reachable dependency filter flag */
+                dependencyDead?: boolean[]
+              }
+            }
+            items: Array<{
+              /** @default */
+              date: string
+              /** @default 0 */
+              startOfDayTimestamp: number
+              dataPoints: {
+                aggregationGroup: string[]
+                /** @default 0 */
+                count: number
+                /** @default 0 */
+                countDelta: number
+                /** @default 0 */
+                countDirect: number
+                /** @default 0 */
+                countDirectDelta: number
+                /** @default 0 */
+                countIndirect: number
+                /** @default 0 */
+                countIndirectDelta: number
+                countsBySeverity: {
+                  low: {
+                    /** @default 0 */
+                    count: number
+                    /** @default 0 */
+                    countDelta: number
+                    /** @default 0 */
+                    countDirect: number
+                    /** @default 0 */
+                    countDirectDelta: number
+                    /** @default 0 */
+                    countIndirect: number
+                    /** @default 0 */
+                    countIndirectDelta: number
+                  }
+                  medium: {
+                    /** @default 0 */
+                    count: number
+                    /** @default 0 */
+                    countDelta: number
+                    /** @default 0 */
+                    countDirect: number
+                    /** @default 0 */
+                    countDirectDelta: number
+                    /** @default 0 */
+                    countIndirect: number
+                    /** @default 0 */
+                    countIndirectDelta: number
+                  }
+                  high: {
+                    /** @default 0 */
+                    count: number
+                    /** @default 0 */
+                    countDelta: number
+                    /** @default 0 */
+                    countDirect: number
+                    /** @default 0 */
+                    countDirectDelta: number
+                    /** @default 0 */
+                    countIndirect: number
+                    /** @default 0 */
+                    countIndirectDelta: number
+                  }
+                  critical: {
+                    /** @default 0 */
+                    count: number
+                    /** @default 0 */
+                    countDelta: number
+                    /** @default 0 */
+                    countDirect: number
+                    /** @default 0 */
+                    countDirectDelta: number
+                    /** @default 0 */
+                    countIndirect: number
+                    /** @default 0 */
+                    countIndirectDelta: number
+                  }
+                }
+              }[]
+            }>
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * List details of periodic historical data snapshots (Beta)
+   * @description This API endpoint is used to list the details of historical snapshots.
+   * Snapshots of organization data are taken periodically, and each historical snapshot record contains high-level overview metrics about the data that was collected.
+   * Other [Historical Data Endpoints](/reference/historical-data-endpoints) can be used to fetch the raw data associated with each snapshot.
+   *
+   * Historical snapshots contain details and raw data for the following resources:
+   *
+   * - Repositories
+   * - Alerts
+   * - Dependencies
+   * - Artifacts
+   * - Users
+   * - Settings
+   *
+   * Daily snapshot data is bucketed to the nearest day which is described in more detail at: [Historical Data Endpoints](/reference/historical-data-endpoints)
+   *
+   * This endpoint consumes 10 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - historical:snapshots-list
+   */
+  historicalSnapshotsList: {
+    parameters: {
+      query?: {
+        /** @description The UTC date in YYYY-MM-DD format for which to fetch snapshots */
+        date?: string
+        /** @description The number of days of data to fetch as an offset from input date (e.g. "-7d" or "7d") or use "latest" to query for latest snapshots for each repo */
+        range?: string
+        /** @description Specify the maximum number of results to return per page (intermediate pages may have fewer than this limit and callers should always check "endCursor" in response body to know if there are more pages) */
+        per_page?: number
+        /** @description The pagination cursor that was returned as the "endCursor" property in previous request */
+        startAfterCursor?: string
+        /** @description Comma-separated list of historical snapshot statuses that should be included (allowed: "in-progress", "success", "failure", "timeout", "skipped") */
+        'filters.status'?: string
+        /** @description Comma-separated list of requestId values that were used to start the historical snapshot job */
+        'filters.requestId'?: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description The historical snapshots. */
+      200: {
+        content: {
+          'application/json': {
+            meta: {
+              /** @default */
+              organizationId: string
+              /** @default 0 */
+              queryStartTimestamp: number
+              /** @default */
+              startDateInclusive: string
+              /** @default */
+              endDateInclusive: string
+              filters: {
+                status?: string[]
+                requestId?: string[]
+              }
+            }
+            items: Array<{
+              /** @default */
+              id: string
+              /** @default */
+              requestId: string
+              /** @default */
+              requestedBy: string
+              /** @default */
+              requestedAt: string
+              /** @default */
+              startedAt: string
+              /** @default */
+              finishedAt: string | null
+              /** @default 0 */
+              durationMs: number
+              /** @default */
+              status: string
+              /** @default 0 */
+              numReposScanned: number
+              /** @default 0 */
+              numSbomsScanned: number
+              /** @default 0 */
+              numLowAlerts: number
+              /** @default 0 */
+              numHighAlerts: number
+              /** @default 0 */
+              numMediumAlerts: number
+              /** @default 0 */
+              numCriticalAlerts: number
+              /** @default 0 */
+              numIgnoredLowAlerts: number
+              /** @default 0 */
+              numIgnoredHighAlerts: number
+              /** @default 0 */
+              numIgnoredMediumAlerts: number
+              /** @default 0 */
+              numIgnoredCriticalAlerts: number
+            }>
+            /** @default */
+            endCursor: string | null
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Start historical data snapshot job (Beta)
+   * @description This API endpoint is used to start a historical snapshot job.
+   * While snapshots are typically taken multiple times a day for paid plans and once a day for free plans, this endpoint can be used to start an "on demand" snapshot job to ensure the latest data is collected and stored for historical purposes.
+   *
+   * An historical snapshot will contain details and raw data for the following resources:
+   *
+   * - Repositories
+   * - Alerts
+   * - Dependencies
+   * - Artifacts
+   * - Users
+   * - Settings
+   *
+   * Historical snapshot data is bucketed to the nearest day which is described in more detail at: [Historical Data Endpoints](/reference/historical-data-endpoints)
+   *
+   * This endpoint consumes 10 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - historical:snapshots-start
+   */
+  historicalSnapshotsStart: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description The details of the snapshot job request. */
+      200: {
+        content: {
+          'application/json': {
+            /** @default */
+            requestId: string
+            /** @default */
+            requestedBy: string
+            /** @default */
+            requestedAt: string
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get Audit Log Events
+   * @description Paginated list of audit log events.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - audit-log:list
+   */
+  getAuditLogEvents: {
+    parameters: {
+      query?: {
+        /** @description Filter audit log events by type. Omit for all types. */
+        type?:
+          | 'AddLicenseOverlayNote'
+          | 'AssociateLabel'
+          | 'CancelInvitation'
+          | 'ChangeMemberRole'
+          | 'ChangePlanSubscriptionSeats'
+          | 'CreateApiToken'
+          | 'CreateArtifact'
+          | 'CreateFirewallCustomRegistry'
+          | 'CreateFirewallDeploymentConfig'
+          | 'CreateLabel'
+          | 'CreateOauthRefreshToken'
+          | 'CreateRepoAccessRule'
+          | 'CreateUserWithPassword'
+          | 'CreateWebhook'
+          | 'CreateTicket'
+          | 'DeleteAlertTriage'
+          | 'DeleteApiToken'
+          | 'DeleteFirewallCustomRegistry'
+          | 'DeleteFirewallDeploymentConfig'
+          | 'DeleteFullScan'
+          | 'DeleteLabel'
+          | 'DeleteLabelSetting'
+          | 'DeleteRepoAccessRule'
+          | 'DeleteReport'
+          | 'DeleteRepository'
+          | 'DeleteWebhook'
+          | 'DisassociateLabel'
+          | 'DisconnectJiraIntegration'
+          | 'DowngradeOrganizationPlan'
+          | 'JoinOrganization'
+          | 'JiraIntegrationConnected'
+          | 'MemberAdded'
+          | 'MemberRemoved'
+          | 'MemberRoleChanged'
+          | 'RemoveLicenseOverlay'
+          | 'RemoveMember'
+          | 'ResetInvitationLink'
+          | 'ResetOrganizationSettingToDefault'
+          | 'RevokeOauthToken'
+          | 'RotateOauthRefreshToken'
+          | 'RevokeApiToken'
+          | 'RotateApiToken'
+          | 'SendInvitation'
+          | 'SetLabelSettingToDefault'
+          | 'SSOEmailVerificationCompleted'
+          | 'SSOLoginCompleted'
+          | 'SyncOrganization'
+          | 'TransferOwnership'
+          | 'UpdateAlertTriage'
+          | 'UpdateApiTokenCommitter'
+          | 'UpdateApiTokenMaxQuota'
+          | 'UpdateApiTokenName'
+          | 'UpdateApiTokenScopes'
+          | 'UpdateApiTokenVisibility'
+          | 'UpdateAutopatchCurated'
+          | 'UpdateFirewallCustomRegistry'
+          | 'UpdateFirewallDeploymentConfig'
+          | 'UpdateLabel'
+          | 'UpdateLabelSetting'
+          | 'UpdateLicenseOverlay'
+          | 'UpdateOrganizationSetting'
+          | 'UpdateRepoAccessRule'
+          | 'UpdateWebhook'
+          | 'UpgradeOrganizationPlan'
+          | 'UserSignedIn'
+          | 'UserSignedOut'
+        /** @description Number of events per page */
+        per_page?: number
+        /** @description Page token */
+        page?: string
+        /** @description A Unix timestamp in seconds to filter results prior to this date. */
+        from?: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description The paginated list of events in an organizations audit log and the next page querystring token. */
+      200: {
+        content: {
+          'application/json': {
+            results: Array<{
+              /** @default */
+              event_id?: string
+              /** @default */
+              created_at?: string
+              /** @default */
+              updated_at?: string
+              /** @default */
+              country_code?: string | null
+              /** @default */
+              organization_id?: string | null
+              /** @default */
+              ip_address?: string | null
+              /** @default null */
+              payload?: Record | null
+              /** @default 0 */
+              status_code?: number | null
+              /** @default */
+              type?: string
+              /** @default */
+              user_agent?: string | null
+              /** @default */
+              user_id?: string | null
+              /** @default */
+              user_email?: string
+              /** @default */
+              user_image?: string
+              /** @default */
+              organization_name?: string
+            }>
+            /** @default */
+            nextPage: string | null
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * List API Tokens
+   * @description List all API Tokens.
+   *
+   * This endpoint consumes 10 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - api-tokens:list
+   */
+  getAPITokens: {
+    parameters: {
+      query?: {
+        /** @description Specify Sort order. */
+        sort?: 'created_at'
+        /** @description Specify sort direction. */
+        direction?: 'asc' | 'desc'
+        /** @description Specify the maximum number of results to return per page. */
+        per_page?: number
+        /** @description The token specifying which page to return. */
+        page?: number
+        /** @description Whether to include token values in response. Use "omit" to exclude tokens entirely. */
+        token_values?: 'include' | 'omit'
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description The paginated array of API tokens for the organization, and related metadata. */
+      200: {
+        content: {
+          'application/json': {
+            tokens: Array<{
+              /** @description List of committers associated with this API Token */
+              committers: {
+                /**
+                 * @description Email address of the committer
+                 * @default
+                 */
+                email?: string
+                /**
+                 * @description The source control provider for the committer
+                 * @default api
+                 * @enum {string}
+                 */
+                provider?: 'api' | 'azure' | 'bitbucket' | 'github' | 'gitlab'
+                /**
+                 * @description Login name on the provider platform
+                 * @default
+                 */
+                providerLoginName?: string
+                /**
+                 * @description User ID on the provider platform
+                 * @default
+                 */
+                providerUserId?: string
+              }[]
+              /**
+               * Format: uuid
+               * @description ID of the Socket user who created the API Token
+               * @default
+               */
+              created_by: string | null
+              /**
+               * Format: date
+               * @description Timestamp when the API Token was created
+               * @default
+               */
+              created_at: string
+              /**
+               * Format: uuid
+               * @description The stable group UUID that remains constant across token rotations
+               * @default
+               */
+              group_uuid: string
+              /**
+               * @description SRI-format hash of the token (e.g., sha512-base64hash). Null for tokens created before hash column was added.
+               * @default
+               */
+              hash: string | null
+              /**
+               * @description The ID of the API Token
+               * @default
+               */
+              id: string
+              /**
+               * Format: date
+               * @description Timestamp when the API Token was last used
+               * @default
+               */
+              last_used_at: string
+              /**
+               * @description Maximum number of API calls allowed per month
+               * @default 1000
+               */
+              max_quota: number
+              /**
+               * @description Name for the API Token
+               * @default api token
+               */
+              name: string | null
+              /** @description List of scopes granted to the API Token */
+              scopes: (
+                | 'alerts'
+                | 'alerts:list'
+                | 'alerts:trend'
+                | 'alert-resolution'
+                | 'alert-resolution:list'
+                | 'alert-resolution:create'
+                | 'alert-resolution:read'
+                | 'alert-resolution:delete'
+                | 'api-tokens'
+                | 'api-tokens:create'
+                | 'api-tokens:update'
+                | 'api-tokens:revoke'
+                | 'api-tokens:rotate'
+                | 'api-tokens:list'
+                | 'audit-log'
+                | 'audit-log:list'
+                | 'dependencies'
+                | 'dependencies:list'
+                | 'dependencies:trend'
+                | 'fixes'
+                | 'fixes:list'
+                | 'full-scans'
+                | 'full-scans:list'
+                | 'full-scans:create'
+                | 'full-scans:delete'
+                | 'diff-scans'
+                | 'diff-scans:list'
+                | 'diff-scans:create'
+                | 'diff-scans:delete'
+                | 'entitlements'
+                | 'entitlements:list'
+                | 'historical'
+                | 'historical:snapshots-list'
+                | 'historical:snapshots-start'
+                | 'historical:alerts-list'
+                | 'historical:alerts-trend'
+                | 'historical:dependencies-list'
+                | 'historical:dependencies-trend'
+                | 'integration'
+                | 'integration:list'
+                | 'integration:create'
+                | 'integration:update'
+                | 'integration:delete'
+                | 'license-policy'
+                | 'license-policy:update'
+                | 'license-policy:read'
+                | 'packages'
+                | 'packages:list'
+                | 'report'
+                | 'report:list'
+                | 'report:read'
+                | 'report:write'
+                | 'repo'
+                | 'repo:list'
+                | 'repo:create'
+                | 'repo:update'
+                | 'repo:delete'
+                | 'repo-label'
+                | 'repo-label:list'
+                | 'repo-label:create'
+                | 'repo-label:update'
+                | 'repo-label:delete'
+                | 'security-policy'
+                | 'security-policy:update'
+                | 'security-policy:read'
+                | 'socket-basics'
+                | 'socket-basics:read'
+                | 'telemetry-policy'
+                | 'telemetry-policy:update'
+                | 'telemetry-events'
+                | 'telemetry-events:list'
+                | 'threat-feed'
+                | 'threat-feed:list'
+                | 'triage'
+                | 'triage:alerts-list'
+                | 'triage:alerts-update'
+                | 'uploaded-artifacts'
+                | 'uploaded-artifacts:create'
+                | 'uploaded-artifacts:list'
+                | 'webhooks'
+                | 'webhooks:create'
+                | 'webhooks:list'
+                | 'webhooks:update'
+                | 'webhooks:delete'
+                | '*'
+              )[]
+              /**
+               * @description The token of the API Token (redacted or omitted)
+               * @default
+               */
+              token: string | null
+              /**
+               * @description The visibility of the API Token. Warning: this field is deprecated and will be removed in the future.
+               * @default organization
+               * @enum {string}
+               */
+              visibility: 'admin' | 'organization'
+            }>
+            /** @default 0 */
+            nextPage: number | null
+          }
+        }
+      }
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Create API Token
+   * @description Create an API Token. The API Token created must use a subset of permissions the API token creating them.
+   *
+   * This endpoint consumes 10 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - api-tokens:create
+   */
+  postAPIToken: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    /** @description The settings to create the api token with. */
+    requestBody?: {
+      content: {
+        'application/json': {
+          /**
+           * @description Maximum number of API calls allowed per month
+           * @default 1000
+           */
+          max_quota: number
+          /** @description List of scopes granted to the API Token */
+          scopes: Array<
+            | 'alerts'
+            | 'alerts:list'
+            | 'alerts:trend'
+            | 'alert-resolution'
+            | 'alert-resolution:list'
+            | 'alert-resolution:create'
+            | 'alert-resolution:read'
+            | 'alert-resolution:delete'
+            | 'api-tokens'
+            | 'api-tokens:create'
+            | 'api-tokens:update'
+            | 'api-tokens:revoke'
+            | 'api-tokens:rotate'
+            | 'api-tokens:list'
+            | 'audit-log'
+            | 'audit-log:list'
+            | 'dependencies'
+            | 'dependencies:list'
+            | 'dependencies:trend'
+            | 'fixes'
+            | 'fixes:list'
+            | 'full-scans'
+            | 'full-scans:list'
+            | 'full-scans:create'
+            | 'full-scans:delete'
+            | 'diff-scans'
+            | 'diff-scans:list'
+            | 'diff-scans:create'
+            | 'diff-scans:delete'
+            | 'entitlements'
+            | 'entitlements:list'
+            | 'historical'
+            | 'historical:snapshots-list'
+            | 'historical:snapshots-start'
+            | 'historical:alerts-list'
+            | 'historical:alerts-trend'
+            | 'historical:dependencies-list'
+            | 'historical:dependencies-trend'
+            | 'integration'
+            | 'integration:list'
+            | 'integration:create'
+            | 'integration:update'
+            | 'integration:delete'
+            | 'license-policy'
+            | 'license-policy:update'
+            | 'license-policy:read'
+            | 'packages'
+            | 'packages:list'
+            | 'report'
+            | 'report:list'
+            | 'report:read'
+            | 'report:write'
+            | 'repo'
+            | 'repo:list'
+            | 'repo:create'
+            | 'repo:update'
+            | 'repo:delete'
+            | 'repo-label'
+            | 'repo-label:list'
+            | 'repo-label:create'
+            | 'repo-label:update'
+            | 'repo-label:delete'
+            | 'security-policy'
+            | 'security-policy:update'
+            | 'security-policy:read'
+            | 'socket-basics'
+            | 'socket-basics:read'
+            | 'telemetry-policy'
+            | 'telemetry-policy:update'
+            | 'telemetry-events'
+            | 'telemetry-events:list'
+            | 'threat-feed'
+            | 'threat-feed:list'
+            | 'triage'
+            | 'triage:alerts-list'
+            | 'triage:alerts-update'
+            | 'uploaded-artifacts'
+            | 'uploaded-artifacts:create'
+            | 'uploaded-artifacts:list'
+            | 'webhooks'
+            | 'webhooks:create'
+            | 'webhooks:list'
+            | 'webhooks:update'
+            | 'webhooks:delete'
+            | '*'
+          >
+          /**
+           * @description The visibility of the API Token. Warning: this field is deprecated and will be removed in the future.
+           * @default organization
+           * @enum {string}
+           */
+          visibility: 'admin' | 'organization'
+          /** @description Committer information to associate with the API Token */
+          committer: {
+            /**
+             * @description Email address of the committer
+             * @default
+             */
+            email?: string
+            /**
+             * @description The source control provider for the committer
+             * @default api
+             * @enum {string}
+             */
+            provider?: 'api' | 'azure' | 'bitbucket' | 'github' | 'gitlab'
+            /**
+             * @description Login name on the provider platform
+             * @default
+             */
+            providerLoginName?: string
+            /**
+             * @description User ID on the provider platform
+             * @default
+             */
+            providerUserId?: string
+          }
+          /**
+           * @description Name for the API Token
+           * @default api token
+           */
+          name?: string
+          /** @description List of resources this API Token can access. Tokens with resource grants can only access a subset of routes that support this feature. */
+          resources?: Array<{
+            /**
+             * @description Slug of the organization to grant access to
+             * @default
+             */
+            organizationSlug: string
+            /**
+             * @description Slug of the repository to grant access to
+             * @default
+             */
+            repositorySlug: string
+            /**
+             * @description Workspace slug containing the specified repo
+             * @default
+             */
+            workspace?: string
+          }>
+        }
+      }
+    }
+    responses: {
+      /** @description The newly created api token with its stable UUID and hash. */
+      200: {
+        content: {
+          'application/json': {
+            /**
+             * Format: uuid
+             * @description ID of the Socket user who created the API Token
+             * @default
+             */
+            created_by: string | null
+            /**
+             * Format: uuid
+             * @description The stable group UUID that remains constant across token rotations
+             * @default
+             */
+            group_uuid: string
+            /** @default */
+            token: string
+            /** @default */
+            hash: string
+          }
+        }
+      }
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Update API Token
+   * @description Update an API Token. The API Token created must use a subset of permissions the API token creating them.
+   *
+   * This endpoint consumes 10 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - api-tokens:create
+   */
+  postAPITokenUpdate: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    /** @description The token and properties to update on the token. */
+    requestBody?: {
+      content: {
+        'application/json': {
+          /**
+           * @description Maximum number of API calls allowed per hour
+           * @default 1000
+           */
+          max_quota: number
+          /** @description List of scopes granted to the API Token */
+          scopes: Array<
+            | 'alerts'
+            | 'alerts:list'
+            | 'alerts:trend'
+            | 'alert-resolution'
+            | 'alert-resolution:list'
+            | 'alert-resolution:create'
+            | 'alert-resolution:read'
+            | 'alert-resolution:delete'
+            | 'api-tokens'
+            | 'api-tokens:create'
+            | 'api-tokens:update'
+            | 'api-tokens:revoke'
+            | 'api-tokens:rotate'
+            | 'api-tokens:list'
+            | 'audit-log'
+            | 'audit-log:list'
+            | 'dependencies'
+            | 'dependencies:list'
+            | 'dependencies:trend'
+            | 'fixes'
+            | 'fixes:list'
+            | 'full-scans'
+            | 'full-scans:list'
+            | 'full-scans:create'
+            | 'full-scans:delete'
+            | 'diff-scans'
+            | 'diff-scans:list'
+            | 'diff-scans:create'
+            | 'diff-scans:delete'
+            | 'entitlements'
+            | 'entitlements:list'
+            | 'historical'
+            | 'historical:snapshots-list'
+            | 'historical:snapshots-start'
+            | 'historical:alerts-list'
+            | 'historical:alerts-trend'
+            | 'historical:dependencies-list'
+            | 'historical:dependencies-trend'
+            | 'integration'
+            | 'integration:list'
+            | 'integration:create'
+            | 'integration:update'
+            | 'integration:delete'
+            | 'license-policy'
+            | 'license-policy:update'
+            | 'license-policy:read'
+            | 'packages'
+            | 'packages:list'
+            | 'report'
+            | 'report:list'
+            | 'report:read'
+            | 'report:write'
+            | 'repo'
+            | 'repo:list'
+            | 'repo:create'
+            | 'repo:update'
+            | 'repo:delete'
+            | 'repo-label'
+            | 'repo-label:list'
+            | 'repo-label:create'
+            | 'repo-label:update'
+            | 'repo-label:delete'
+            | 'security-policy'
+            | 'security-policy:update'
+            | 'security-policy:read'
+            | 'socket-basics'
+            | 'socket-basics:read'
+            | 'telemetry-policy'
+            | 'telemetry-policy:update'
+            | 'telemetry-events'
+            | 'telemetry-events:list'
+            | 'threat-feed'
+            | 'threat-feed:list'
+            | 'triage'
+            | 'triage:alerts-list'
+            | 'triage:alerts-update'
+            | 'uploaded-artifacts'
+            | 'uploaded-artifacts:create'
+            | 'uploaded-artifacts:list'
+            | 'webhooks'
+            | 'webhooks:create'
+            | 'webhooks:list'
+            | 'webhooks:update'
+            | 'webhooks:delete'
+            | '*'
+          >
+          /**
+           * @description The visibility of the API Token. Warning: this field is deprecated and will be removed in the future.
+           * @default organization
+           * @enum {string}
+           */
+          visibility: 'admin' | 'organization'
+          /** @description Committer information to associate with the API Token */
+          committer: {
+            /**
+             * @description Email address of the committer
+             * @default
+             */
+            email?: string
+            /**
+             * @description The source control provider for the committer
+             * @default api
+             * @enum {string}
+             */
+            provider?: 'api' | 'azure' | 'bitbucket' | 'github' | 'gitlab'
+            /**
+             * @description Login name on the provider platform
+             * @default
+             */
+            providerLoginName?: string
+            /**
+             * @description User ID on the provider platform
+             * @default
+             */
+            providerUserId?: string
+          }
+          /**
+           * @description Name for the API Token
+           * @default api token
+           */
+          name?: string
+          /**
+           * Format: uuid
+           * @description The stable group UUID to update (provide uuid, id, token, or hash. May provide uuid+hash together for validation)
+           * @default
+           */
+          uuid?: string
+          /**
+           * @description The API token ID to update (provide uuid, id, token, or hash)
+           * @default
+           */
+          id?: string
+          /**
+           * @description The API token to update (provide uuid, id, token, or hash)
+           * @default
+           */
+          token?: string
+          /**
+           * @description The API token hash to update (provide uuid, id, token, or hash)
+           * @default
+           */
+          hash?: string
+        }
+      }
+    }
+    responses: {
+      /** @description The updated token. */
+      200: {
+        content: {
+          'application/json': {
+            /**
+             * @description SRI-format hash of the API token (e.g., sha512-base64hash)
+             * @default
+             */
+            hash: string
+          }
+        }
+      }
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Rotate API Token
+   * @description Rotate an API Token
+   *
+   * This endpoint consumes 10 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - api-tokens:rotate
+   */
+  postAPITokensRotate: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    /** @description The API Token identifier to rotate. Provide uuid (recommended), token, or hash. May provide uuid+hash together for validation. */
+    requestBody?: {
+      content: {
+        'application/json': {
+          /**
+           * Format: uuid
+           * @description The stable group UUID of the API token to rotate
+           * @default
+           */
+          uuid?: string
+          /** @default */
+          token?: string
+          /** @default */
+          hash?: string
+        }
+      }
+    }
+    responses: {
+      /** @description The replacement API Token with its stable UUID, new token value, and hash */
+      200: {
+        content: {
+          'application/json': {
+            /**
+             * @description The database ID of the new API token
+             * @default
+             */
+            id: string
+            /**
+             * Format: uuid
+             * @description The stable group UUID (unchanged after rotation)
+             * @default
+             */
+            group_uuid: string
+            /**
+             * Format: uuid
+             * @description ID of the Socket user who created the API Token
+             * @default
+             */
+            created_by: string | null
+            /** @default */
+            token: string
+            /** @default */
+            hash: string
+          }
+        }
+      }
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Revoke API Token
+   * @description Revoke an API Token
+   *
+   * This endpoint consumes 10 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - api-tokens:revoke
+   */
+  postAPITokensRevoke: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    /** @description The API token identifier to revoke. Provide uuid (recommended), token, or hash. May provide uuid+hash together for validation. */
+    requestBody?: {
+      content: {
+        'application/json': {
+          /**
+           * Format: uuid
+           * @description The stable group UUID of the API token to revoke
+           * @default
+           */
+          uuid?: string
+          /** @default */
+          token?: string
+          /** @default */
+          hash?: string
+        }
+      }
+    }
+    responses: {
+      /** @description Response body */
+      200: {
+        content: {
+          'application/json': {
+            /**
+             * @description The status of the token
+             * @default revoked
+             */
+            status: string
+          }
+        }
+      }
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get supported file types
+   * @description Get a list of supported files for full scan generation.
+   * Files are categorized first by environment (e.g. NPM or PyPI), then by name.
+   *
+   * Files whose names match the patterns returned by this endpoint can be uploaded for report generation.
+   * Examples of supported filenames include `package.json`, `package-lock.json`, and `yarn.lock`.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - No Scopes Required, but authentication is required
+   */
+  getSupportedFiles: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description Glob patterns used to match supported files */
+      200: {
+        content: {
+          'application/json': {
+            [key: string]: {
+              [key: string]: {
+                /** @default */
+                pattern: string
+              }
+            }
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get Threat Feed Items (Deprecated)
+   * @deprecated
+   * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference/getorgthreatfeeditems) instead.
+   *
+   * Paginated list of threat feed items.
+   *
+   * This endpoint requires an Enterprise Plan with Threat Feed add-on. [Contact](https://socket.dev/demo?utm_source=api-docs&utm_medium=referral&utm_campaign=tracking) our sales team for more details.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - threat-feed:list
+   */
+  getThreatFeedItems: {
+    parameters: {
+      query?: {
+        /** @description Number of threats per page */
+        per_page?: number
+        /** @description Page token */
+        page?: string
+        /** @description Sort sort the threat feed by ID or createdAt attribute. */
+        sort?: 'id' | 'created_at'
+        /** @description Filter results by discovery period */
+        discovery_period?: '1h' | '6h' | '1d' | '7d' | '30d' | '90d' | '365d'
+        /** @description Ordering direction of the sort attribute */
+        direction?: 'desc' | 'asc'
+        /** @description Filter by threat classification. Supported values: `mal` (malware, including possible malware), `vuln` (vulnerability), `typo` (typosquat, including possible typosquat), `anom` (anomaly), `spy` (telemetry), `obf` (obfuscated code), `dual` (dual-use tool), `joke` (protestware or joke package), `tp` (all confirmed true positives), `fp` (false positive), `u` (unreviewed), `c` (classified, i.e. anything except unreviewed). */
+        filter?:
+          | 'u'
+          | 'c'
+          | 'fp'
+          | 'tp'
+          | 'mal'
+          | 'vuln'
+          | 'anom'
+          | 'joke'
+          | 'spy'
+          | 'typo'
+          | 'obf'
+          | 'dual'
+        /** @description Filter threats by package name */
+        name?: string
+        /** @description Filter threats by package version */
+        version?: string
+        /** @description Only return threats which have been human-reviewed */
+        is_human_reviewed?: boolean
+        /** @description Filter threats by package ecosystem. */
+        ecosystem?:
+          | 'github'
+          | 'cargo'
+          | 'clawhub'
+          | 'composer'
+          | 'chrome'
+          | 'golang'
+          | 'huggingface'
+          | 'maven'
+          | 'npm'
+          | 'nuget'
+          | 'vscode'
+          | 'pypi'
+          | 'gem'
+          | 'swift'
+      }
+    }
+    responses: {
+      /** @description The paginated list of threats in the feed and the next page querystring token. */
+      200: {
+        content: {
+          'application/json': {
+            results: Array<{
+              /**
+               * Format: date-time
+               * @description ISO 8601 timestamp of when the threat in the package artifact was first discovered
+               * @default
+               */
+              createdAt?: string
+              /**
+               * Format: date-time
+               * @description ISO 8601 timestamp of when the threat record for the package artifact was last updated (e.g., classification changed, package removed from registry, etc.)
+               * @default
+               */
+              updatedAt?: string
+              /**
+               * Format: date-time
+               * @description ISO 8601 timestamp of when the package artifact was published to the respective registry
+               * @default
+               */
+              publishedAt?: string | null
+              /**
+               * @description Detailed description of the underlying threat
+               * @default
+               */
+              description?: string
+              /**
+               * @description Unique identifier of the threat feed entry
+               * @default 0
+               */
+              id?: number
+              /**
+               * Format: uri
+               * @description URL to the threat details page on Socket
+               * @default
+               */
+              locationHtmlUrl?: string
+              /**
+               * Format: uri
+               * @description URL to the affected package page on Socket
+               * @default
+               */
+              packageHtmlUrl?: string
+              /**
+               * @description Package URL (PURL) of the affected package artifact
+               * @default
+               */
+              purl?: string
+              /**
+               * Format: date-time
+               * @description ISO 8601 timestamp of when the package artifact was removed from the respective registry, or null if the package is still available on the registry
+               * @default
+               */
+              removedAt?: string | null
+              /**
+               * @description Threat classification. Possible values: `malware` (known malware), `possible_malware` (AI-detected potential malware), `vulnerability` (potential vulnerability), `typosquat` (human-reviewed typosquat), `possible_typosquat` (AI-detected potential typosquat), `anomaly` (anomalous behavior), `telemetry` (telemetry), `obfuscated` (obfuscated code), `dual_use` (dual-use tool), `troll` (protestware or joke package), `unreviewed` (not yet reviewed), `false_positive` (confirmed false positive).
+               * @default
+               */
+              threatType?: string
+              /**
+               * @description Whether the threat still is in need of human review by the threat research team
+               * @default false
+               */
+              needsHumanReview?: boolean
+              /**
+               * @description Unique threat instance identifier across artifacts
+               * @default 0
+               */
+              threatInstanceId?: number
+            }>
+            /** @default */
+            nextPage: string | null
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get Threat Feed Items (Beta)
+   * @description Paginated list of threats, sorted by updated_at by default. Set updated_after to the unix timestamp of your last sync while sorting by updated_at to synchronize all new or updated threats in the feed.
+   *
+   * This endpoint requires an Enterprise Plan with Threat Feed add-on. [Contact](https://socket.dev/demo?utm_source=api-docs&utm_medium=referral&utm_campaign=tracking) our sales team for more details.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - threat-feed:list
+   */
+  getOrgThreatFeedItems: {
+    parameters: {
+      query?: {
+        /** @description Number of threats per page */
+        per_page?: number
+        /** @description Page cursor token. Pass the returned nextPageCursor to this query string to fetch the next page of the threat feed. */
+        page_cursor?: string
+        /** @description Set the sort order for the threat feed items. Default is descending order by updated_at, which includes all new and updated threat feed items. */
+        sort?: 'id' | 'created_at' | 'updated_at'
+        /** @description A Unix timestamp in seconds that filters results to items only updated after the timestamp. */
+        updated_after?: string
+        /** @description A Unix timestamp in seconds that filters results to items only created after the date. */
+        created_after?: string
+        /** @description Order direction of the provided sort field. */
+        direction?: 'desc' | 'asc'
+        /** @description Filter by threat classification. Supported values: `mal` (malware, including possible malware), `vuln` (vulnerability), `typo` (typosquat, including possible typosquat), `anom` (anomaly), `spy` (telemetry), `obf` (obfuscated code), `dual` (dual-use tool), `joke` (protestware or joke package), `tp` (all confirmed true positives), `fp` (false positive), `u` (unreviewed), `c` (classified, i.e. anything except unreviewed). */
+        filter?:
+          | 'u'
+          | 'c'
+          | 'fp'
+          | 'tp'
+          | 'mal'
+          | 'vuln'
+          | 'anom'
+          | 'joke'
+          | 'spy'
+          | 'typo'
+          | 'obf'
+          | 'dual'
+        /** @description Filter threats by package name */
+        name?: string
+        /** @description Filter threats by package version. */
+        version?: string
+        /** @description Only return threats which have been human-reviewed */
+        is_human_reviewed?: boolean
+        /** @description Filter threats by package ecosystem. */
+        ecosystem?:
+          | 'github'
+          | 'cargo'
+          | 'clawhub'
+          | 'composer'
+          | 'chrome'
+          | 'golang'
+          | 'huggingface'
+          | 'maven'
+          | 'npm'
+          | 'nuget'
+          | 'vscode'
+          | 'pypi'
+          | 'gem'
+          | 'swift'
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description The paginated list of items in the threat feed and the next page cursor. */
+      200: {
+        content: {
+          'application/json': {
+            results: Array<{
+              /**
+               * Format: date-time
+               * @description ISO 8601 timestamp of when the threat in the package artifact was first discovered
+               * @default
+               */
+              createdAt?: string
+              /**
+               * Format: date-time
+               * @description ISO 8601 timestamp of when the threat record for the package artifact was last updated (e.g., classification changed, package removed from registry, etc.)
+               * @default
+               */
+              updatedAt?: string
+              /**
+               * Format: date-time
+               * @description ISO 8601 timestamp of when the package artifact was published to the respective registry
+               * @default
+               */
+              publishedAt?: string | null
+              /**
+               * @description Detailed description of the underlying threat
+               * @default
+               */
+              description?: string
+              /**
+               * @description Unique identifier of the threat feed entry
+               * @default 0
+               */
+              id?: number
+              /**
+               * Format: uri
+               * @description URL to the threat details page on Socket
+               * @default
+               */
+              locationHtmlUrl?: string
+              /**
+               * Format: uri
+               * @description URL to the affected package page on Socket
+               * @default
+               */
+              packageHtmlUrl?: string
+              /**
+               * @description Package URL (PURL) of the affected package artifact
+               * @default
+               */
+              purl?: string
+              /**
+               * Format: date-time
+               * @description ISO 8601 timestamp of when the package artifact was removed from the respective registry, or null if the package is still available on the registry
+               * @default
+               */
+              removedAt?: string | null
+              /**
+               * @description Threat classification. Possible values: `malware` (known malware), `possible_malware` (AI-detected potential malware), `vulnerability` (potential vulnerability), `typosquat` (human-reviewed typosquat), `possible_typosquat` (AI-detected potential typosquat), `anomaly` (anomalous behavior), `telemetry` (telemetry), `obfuscated` (obfuscated code), `dual_use` (dual-use tool), `troll` (protestware or joke package), `unreviewed` (not yet reviewed), `false_positive` (confirmed false positive).
+               * @default
+               */
+              threatType?: string
+              /**
+               * @description Whether the threat still is in need of human review by the threat research team
+               * @default false
+               */
+              needsHumanReview?: boolean
+              /**
+               * @description Unique threat instance identifier across artifacts
+               * @default 0
+               */
+              threatInstanceId?: number
+            }>
+            /** @default */
+            nextPageCursor: string | null
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get Packages by PURL (Org Scoped)
+   * @description Batch retrieval of package metadata and alerts by PURL strings for a specific organization. Compatible with CycloneDX reports.
+   *
+   * Package URLs (PURLs) are an ecosystem agnostic way to identify packages.
+   * CycloneDX SBOMs use the purl format to identify components.
+   * This endpoint supports fetching metadata and alerts for multiple packages at once by passing an array of purl strings, or by passing an entire CycloneDX report.
+   *
+   * **Note:** This endpoint has a batch size limit (default: 1024 PURLs per request). Requests exceeding this limit will return a 400 Bad Request error.
+   *
+   * More information on purl and CycloneDX:
+   *
+   * - [`purl` Spec](https://github.com/package-url/purl-spec)
+   * - [CycloneDX Spec](https://cyclonedx.org/specification/overview/#components)
+   *
+   * This endpoint returns the latest available alert data for artifacts in the batch (stale while revalidate).
+   * Actively running analysis will be returned when available on subsequent runs.
+   *
+   * ## Query Parameters
+   *
+   * This endpoint supports all query parameters from `POST /v0/purl` including: `alerts`, `actions`, `compact`, `fixable`, `licenseattrib`, `licensedetails`, `purlErrors`, `cachedResultsOnly`, and `summary`.
+   *
+   * Additionally, you may provide a `labels` query parameter to apply a repository label's security policies. Pass the label slug as the value (e.g., `?labels=production`). Only one label is currently supported.
+   *
+   * ## Examples:
+   *
+   * ### Looking up an npm package:
+   *
+   * ```json
+   * {
+   *   "components": [
+   *     {
+   *       "purl": "pkg:npm/express@4.19.2"
+   *     }
+   *   ]
+   * }
+   * ```
+   *
+   * ### Looking up a PyPi package:
+   *
+   * ```json
+   * {
+   *   "components": [
+   *     {
+   *       "purl": "pkg:pypi/django@5.0.6"
+   *     }
+   *   ]
+   * }
+   * ```
+   *
+   * ### Looking up a Maven package:
+   *
+   * ```json
+   * {
+   *   "components": [
+   *     {
+   *       "purl": "pkg:maven/log4j/log4j@1.2.17"
+   *     }
+   *   ]
+   * }
+   * ```
+   *
+   * ### Batch lookup
+   *
+   * ```json
+   * {
+   *   "components": [
+   *     {
+   *       "purl": "pkg:npm/express@4.19.2"
+   *     },
+   *     {
+   *       "purl": "pkg:pypi/django@5.0.6"
+   *     },
+   *     {
+   *       "purl": "pkg:maven/log4j/log4j@1.2.17"
+   *     }
+   *   ]
+   * }
+   * ```
+   *
+   * ### With label and options (query parameters):
+   *
+   * ```
+   * POST /v0/orgs/{org_slug}/purl?labels=production&alerts=true&compact=true
+   * {
+   *   "components": [
+   *     {
+   *       "purl": "pkg:npm/express@4.19.2"
+   *     }
+   *   ]
+   * }
+   * ```
+   *
+   * This endpoint consumes 100 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - packages:list
+   */
+  batchPackageFetchByOrg: {
+    parameters: {
+      query?: {
+        /** @description Repository label slugs to apply policies. Only one label is supported currently; the parameter is an array to allow future support for multiple labels. */
+        labels?: string[]
+        /** @description Include alert metadata. */
+        alerts?: boolean
+        /** @description Include only alerts with comma separated actions defined by security policy. */
+        actions?: Array<'error' | 'monitor' | 'warn' | 'ignore'>
+        /** @description Compact metadata. When enabled, excludes metadata fields like author, scores, size, dependencies, and manifest files. Always includes: id, type, name, version, release, namespace, subpath, alerts, and alertPriorities. */
+        compact?: boolean
+        /** @description Include only fixable alerts. */
+        fixable?: boolean
+        /** @description Include license attribution data, including license text and author information. Maps attribution/license text to a list of data objects to which that attribution info applies. */
+        licenseattrib?: boolean
+        /** @description Include detailed license information, including location and match strength, for each license datum. */
+        licensedetails?: boolean
+        /** @description Return errors found with handling PURLs as error objects in the stream. */
+        purlErrors?: boolean
+        /** @description Return only cached results, do not attempt to scan new artifacts or rescan stale results. */
+        cachedResultsOnly?: boolean
+        /** @description Include a summary object at the end of the stream with counts of malformed, resolved, and not found PURLs. */
+        summary?: boolean
+        /** @description Maximum time in seconds to wait for scan results. PURLs that have not completed processing when the timeout is reached will be returned as errors (when purlErrors is enabled). Omit for no timeout, unless a default timeout is configured for the organization. */
+        timeoutSec?: number
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    requestBody?: {
+      content: {
+        'application/json': components['schemas']['SocketOrgBatchPURLFetch']
+      }
+    }
+    responses: {
+      /** @description Socket issue lists and scores for all packages, and optional metadata objects */
+      200: {
+        content: {
+          'application/x-ndjson': components['schemas']['BatchPurlStreamSchema']
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Fetch fixes for vulnerabilities in a repository or scan
+   * @description Fetches available fixes for vulnerabilities in a repository or scan.
+   * Requires either repo_slug or full_scan_id as well as vulnerability_ids to be provided.
+   * vulnerability_ids can be a comma-separated list of GHSA or CVE IDs, or "*" for all vulnerabilities.
+   *
+   * ## Response Structure
+   *
+   * The response contains a `fixDetails` object where each key is a vulnerability ID (GHSA or CVE) and the value is a discriminated union based on the `type` field.
+   *
+   * ### Common Fields
+   *
+   * All response variants include:
+   * - `type`: Discriminator field (one of: "fixFound", "partialFixFound", "noFixAvailable", "fixNotApplicable", "errorComputingFix")
+   * - `value`: Object containing the variant-specific data
+   *
+   * The `value` object always contains:
+   * - `ghsa`: string | null - The GHSA ID
+   * - `cve`: string | null - The CVE ID (if available)
+   * - `advisoryDetails`: object | null - Advisory details (only if include_details=true)
+   *
+   * ### Response Variants
+   *
+   * **fixFound**: A complete fix is available for all vulnerable packages
+   * - `value.fixDetails.fixes`: Array of fix objects, each containing:
+   *   - `purl`: Package URL to upgrade
+   *   - `fixedVersion`: Version to upgrade to
+   *   - `manifestFiles`: Array of manifest files containing the package
+   *   - `updateType`: "patch" | "minor" | "major" | "unknown"
+   * - `value.fixDetails.responsibleDirectDependencies`: (optional) Map of direct dependencies responsible for the vulnerability
+   *
+   * **partialFixFound**: Fixes available for some but not all vulnerable packages
+   * - Same as fixFound, plus:
+   * - `value.fixDetails.unfixablePurls`: Array of packages that cannot be fixed, each containing:
+   *   - `purl`: Package URL
+   *   - `manifestFiles`: Array of manifest files
+   *
+   * **noFixAvailable**: No fix exists for this vulnerability (no patched version published)
+   *
+   * **fixNotApplicable**: A fix exists but cannot be applied due to version constraints
+   * - `value.vulnerableArtifacts`: Array of vulnerable packages with their manifest files
+   *
+   * **errorComputingFix**: An error occurred while computing fixes
+   * - `value.message`: Error description
+   *
+   * ### Advisory Details (when include_details=true)
+   *
+   * - `title`: string | null
+   * - `description`: string | null
+   * - `cwes`: string[] - CWE identifiers
+   * - `severity`: "LOW" | "MODERATE" | "HIGH" | "CRITICAL"
+   * - `cvssVector`: string | null
+   * - `publishedAt`: string (ISO date)
+   * - `kev`: boolean - Whether it's a Known Exploited Vulnerability
+   * - `epss`: number | null - Exploit Prediction Scoring System score
+   * - `affectedPurls`: Array of affected packages with version ranges
+   *
+   * This endpoint consumes 10 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - fixes:list
+   */
+  'fetch-fixes': {
+    parameters: {
+      query: {
+        /** @description The slug of the repository to fetch fixes for (e.g. "my-repo" or "my-org/my-repo"). Use the full org/repo path to disambiguate when multiple GitHub orgs share the same repo name. Computes fixes based on the latest scan on the default branch */
+        repo_slug?: string
+        /** @description The ID of the scan to fetch fixes for */
+        full_scan_id?: string
+        /** @description Comma-separated list of GHSA or CVE IDs, or "*" for all vulnerabilities */
+        vulnerability_ids: string
+        /** @description Whether to allow major version updates in fixes */
+        allow_major_updates: boolean
+        /** @description Minimum release age for fixes packages (e.g., "1h", "2d", "1w"). Higher values reduces risk of installing recently released untested package versions. */
+        minimum_release_age?: string
+        /** @description Whether to include advisory details in the response */
+        include_details?: boolean
+        /** @description Set to include the direct dependencies responsible for introducing the dependency or dependencies with the vulnerability in the response */
+        include_responsible_direct_dependencies?: boolean
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description Fix details for requested vulnerabilities */
+      200: {
+        content: {
+          'application/json': {
+            fixDetails: {
+              [key: string]: Record
+            }
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get Organization Telemetry Config
+   * @description Retrieve the telemetry config of an organization.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   */
+  getOrgTelemetryConfig: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description Retrieved telemetry config details */
+      200: {
+        content: {
+          'application/json': {
+            /** @description Telemetry configuration */
+            telemetry: {
+              /**
+               * @description Telemetry enabled
+               * @default false
+               */
+              enabled: boolean
+            }
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Update Telemetry Config
+   * @description Update the telemetry config of an organization.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - telemetry-policy:update
+   */
+  updateOrgTelemetryConfig: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    requestBody?: {
+      content: {
+        'application/json': {
+          /**
+           * @description Telemetry enabled
+           * @default false
+           */
+          enabled?: boolean
+        }
+      }
+    }
+    responses: {
+      /** @description Updated telemetry config details */
+      200: {
+        content: {
+          'application/json': {
+            /** @description Telemetry configuration */
+            telemetry: {
+              /**
+               * @description Telemetry enabled
+               * @default false
+               */
+              enabled: boolean
+            }
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * List all webhooks
+   * @description List all webhooks in the specified organization.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - webhooks:list
+   */
+  getOrgWebhooksList: {
+    parameters: {
+      query?: {
+        sort?: string
+        direction?: string
+        per_page?: number
+        page?: number
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description List of webhooks */
+      200: {
+        content: {
+          'application/json': {
+            results: Array<{
+              /**
+               * @description The ID of the webhook
+               * @default
+               */
+              id: string
+              /**
+               * @description The creation date of the webhook
+               * @default
+               */
+              created_at: string
+              /**
+               * @description The last update date of the webhook
+               * @default
+               */
+              updated_at: string
+              /**
+               * @description The name of the webhook
+               * @default
+               */
+              name: string
+              /**
+               * @description The description of the webhook
+               * @default
+               */
+              description: string | null
+              /**
+               * @description The URL where webhook events will be sent
+               * @default
+               */
+              url: string
+              /**
+               * @description The signing key used to sign webhook payloads
+               * @default
+               */
+              secret: string | null
+              /** @description Array of event names */
+              events: string[]
+              /**
+               * @description Custom headers to include in webhook requests
+               * @default null
+               */
+              headers: Record | null
+              filters: {
+                /** @description Array of repository IDs */
+                repositoryIds: string[] | null
+              } | null
+            }>
+            /** @default 0 */
+            nextPage: number | null
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Create a webhook
+   * @description Create a new webhook. Returns the created webhook details.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - webhooks:create
+   */
+  createOrgWebhook: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    requestBody?: {
+      content: {
+        'application/json': {
+          /**
+           * @description The name of the webhook
+           * @default
+           */
+          name: string
+          /**
+           * @description The URL where webhook events will be sent
+           * @default
+           */
+          url: string
+          /**
+           * @description The signing key used to sign webhook payloads
+           * @default
+           */
+          secret: string
+          /** @description Array of event names */
+          events: string[]
+          /**
+           * @description The description of the webhook
+           * @default
+           */
+          description?: string | null
+          /**
+           * @description Custom headers to include in webhook requests
+           * @default null
+           */
+          headers?: Record | null
+          filters?: {
+            /** @description Array of repository IDs */
+            repositoryIds: string[] | null
+          } | null
+        }
+      }
+    }
+    responses: {
+      /** @description The created webhook */
+      201: {
+        content: {
+          'application/json': {
+            /**
+             * @description The ID of the webhook
+             * @default
+             */
+            id: string
+            /**
+             * @description The creation date of the webhook
+             * @default
+             */
+            created_at: string
+            /**
+             * @description The last update date of the webhook
+             * @default
+             */
+            updated_at: string
+            /**
+             * @description The name of the webhook
+             * @default
+             */
+            name: string
+            /**
+             * @description The description of the webhook
+             * @default
+             */
+            description: string | null
+            /**
+             * @description The URL where webhook events will be sent
+             * @default
+             */
+            url: string
+            /**
+             * @description The signing key used to sign webhook payloads
+             * @default
+             */
+            secret: string | null
+            /** @description Array of event names */
+            events: string[]
+            /**
+             * @description Custom headers to include in webhook requests
+             * @default null
+             */
+            headers: Record | null
+            filters: {
+              /** @description Array of repository IDs */
+              repositoryIds: string[] | null
+            } | null
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get webhook
+   * @description Get a webhook for the specified organization.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - webhooks:list
+   */
+  getOrgWebhook: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The ID of the webhook */
+        webhook_id: string
+      }
+    }
+    responses: {
+      /** @description Webhook details */
+      200: {
+        content: {
+          'application/json': {
+            /**
+             * @description The ID of the webhook
+             * @default
+             */
+            id: string
+            /**
+             * @description The creation date of the webhook
+             * @default
+             */
+            created_at: string
+            /**
+             * @description The last update date of the webhook
+             * @default
+             */
+            updated_at: string
+            /**
+             * @description The name of the webhook
+             * @default
+             */
+            name: string
+            /**
+             * @description The description of the webhook
+             * @default
+             */
+            description: string | null
+            /**
+             * @description The URL where webhook events will be sent
+             * @default
+             */
+            url: string
+            /**
+             * @description The signing key used to sign webhook payloads
+             * @default
+             */
+            secret: string | null
+            /** @description Array of event names */
+            events: string[]
+            /**
+             * @description Custom headers to include in webhook requests
+             * @default null
+             */
+            headers: Record | null
+            filters: {
+              /** @description Array of repository IDs */
+              repositoryIds: string[] | null
+            } | null
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Update webhook
+   * @description Update details of an existing webhook.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - webhooks:update
+   */
+  updateOrgWebhook: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The ID of the webhook */
+        webhook_id: string
+      }
+    }
+    requestBody?: {
+      content: {
+        'application/json': {
+          /**
+           * @description The name of the webhook
+           * @default
+           */
+          name?: string
+          /**
+           * @description The description of the webhook
+           * @default
+           */
+          description?: string | null
+          /**
+           * @description The URL where webhook events will be sent
+           * @default
+           */
+          url?: string
+          /**
+           * @description The signing key used to sign webhook payloads
+           * @default
+           */
+          secret?: string | null
+          /** @description Array of event names */
+          events?: string[]
+          /**
+           * @description Custom headers to include in webhook requests
+           * @default null
+           */
+          headers?: Record | null
+          filters?: {
+            /** @description Array of repository IDs */
+            repositoryIds: string[] | null
+          } | null
+        }
+      }
+    }
+    responses: {
+      /** @description Updated webhook details */
+      200: {
+        content: {
+          'application/json': {
+            /**
+             * @description The ID of the webhook
+             * @default
+             */
+            id: string
+            /**
+             * @description The creation date of the webhook
+             * @default
+             */
+            created_at: string
+            /**
+             * @description The last update date of the webhook
+             * @default
+             */
+            updated_at: string
+            /**
+             * @description The name of the webhook
+             * @default
+             */
+            name: string
+            /**
+             * @description The description of the webhook
+             * @default
+             */
+            description: string | null
+            /**
+             * @description The URL where webhook events will be sent
+             * @default
+             */
+            url: string
+            /**
+             * @description The signing key used to sign webhook payloads
+             * @default
+             */
+            secret: string | null
+            /** @description Array of event names */
+            events: string[]
+            /**
+             * @description Custom headers to include in webhook requests
+             * @default null
+             */
+            headers: Record | null
+            filters: {
+              /** @description Array of repository IDs */
+              repositoryIds: string[] | null
+            } | null
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Delete webhook
+   * @description Delete a webhook. This will stop all future webhook deliveries to the webhook URL.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - webhooks:delete
+   */
+  deleteOrgWebhook: {
+    parameters: {
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+        /** @description The ID of the webhook */
+        webhook_id: string
+      }
+    }
+    responses: {
+      /** @description Success */
+      200: {
+        content: {
+          'application/json': {
+            /** @default ok */
+            status: string
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * List latest alerts (Beta)
+   * @description List latest alerts.
+   *
+   * This endpoint consumes 10 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - alerts:list
+   */
+  alertsList: {
+    parameters: {
+      query?: {
+        /** @description Specify the maximum number of results to return per page (intermediate pages may have fewer than this limit and callers should always check "endCursor" in response body to know if there are more pages) */
+        per_page?: number
+        /** @description The pagination cursor that was returned as the "endCursor" property in previous request */
+        startAfterCursor?: string
+        /** @description Comma-separated list of alert actions ("error", "warn", "monitor", or "ignore) that should be included */
+        'filters.alertAction'?: string
+        /** @description Comma-separated list of alert actions ("error", "warn", "monitor", or "ignore) that should be excluded */
+        'filters.alertAction.notIn'?: string
+        /** @description Comma-separated list of alert action source types ("fallback", "injected-alert", "org-policy", "reachability", "repo-label-policy", "socket-yml", or "triage") that should be included */
+        'filters.alertActionSourceType'?: string
+        /** @description Comma-separated list of alert action source types ("fallback", "injected-alert", "org-policy", "reachability", "repo-label-policy", "socket-yml", or "triage") that should be excluded */
+        'filters.alertActionSourceType.notIn'?: string
+        /** @description Comma-separated list of alert categories ("supplyChainRisk", "maintenance", "quality", "license", or "vulnerability") that should be included */
+        'filters.alertCategory'?: string
+        /** @description Comma-separated list of alert categories ("supplyChainRisk", "maintenance", "quality", "license", or "vulnerability") that should be excluded */
+        'filters.alertCategory.notIn'?: string
+        /** @description Alert cleared at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+        'filters.alertClearedAt.eq'?: string
+        /** @description Alert cleared at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+        'filters.alertClearedAt.lt'?: string
+        /** @description Alert cleared at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+        'filters.alertClearedAt.lte'?: string
+        /** @description Alert cleared at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+        'filters.alertClearedAt.gt'?: string
+        /** @description Alert cleared at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+        'filters.alertClearedAt.gte'?: string
+        /** @description Alert created at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+        'filters.alertCreatedAt.eq'?: string
+        /** @description Alert created at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+        'filters.alertCreatedAt.lt'?: string
+        /** @description Alert created at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+        'filters.alertCreatedAt.lte'?: string
+        /** @description Alert created at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+        'filters.alertCreatedAt.gt'?: string
+        /** @description Alert created at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+        'filters.alertCreatedAt.gte'?: string
+        /** @description CVE ID */
+        'filters.alertCveId'?: string
+        /** @description CVE ID */
+        'filters.alertCveId.notIn'?: string
+        /** @description CVE title */
+        'filters.alertCveTitle'?: string
+        /** @description CVE title */
+        'filters.alertCveTitle.notIn'?: string
+        /** @description CWE ID */
+        'filters.alertCweId'?: string
+        /** @description CWE ID */
+        'filters.alertCweId.notIn'?: string
+        /** @description CWE name */
+        'filters.alertCweName'?: string
+        /** @description CWE name */
+        'filters.alertCweName.notIn'?: string
+        /** @description Alert EPSS ("low", "medium", "high", "critical") */
+        'filters.alertEPSS'?: string
+        /** @description Alert EPSS ("low", "medium", "high", "critical") */
+        'filters.alertEPSS.notIn'?: string
+        /** @description Comma-separated list of alert fix types ("upgrade", "cve", or "remove") that should be included */
+        'filters.alertFixType'?: string
+        /** @description Comma-separated list of alert fix types ("upgrade", "cve", or "remove") that should be excluded */
+        'filters.alertFixType.notIn'?: string
+        /** @description Alert KEV (Known Exploited Vulnerability) filter flag */
+        'filters.alertKEV'?: boolean
+        /** @description Alert KEV (Known Exploited Vulnerability) filter flag */
+        'filters.alertKEV.notIn'?: boolean
+        /** @description Alert priority ("low", "medium", "high", or "critical") */
+        'filters.alertPriority'?: string
+        /** @description Alert priority ("low", "medium", "high", or "critical") */
+        'filters.alertPriority.notIn'?: string
+        /** @description Comma-separated list of alert CVE reachability analysis types ("full-scan" or "precomputed") that should be included */
+        'filters.alertReachabilityAnalysisType'?: string
+        /** @description Comma-separated list of alert CVE reachability analysis types ("full-scan" or "precomputed") that should be excluded */
+        'filters.alertReachabilityAnalysisType.notIn'?: string
+        /** @description Comma-separated list of alert CVE reachability types ("direct_dependency", "error", "maybe_reachable", "missing_support", "pending", "reachable", "undeterminable_reachability", "unknown", or "unreachable") that should be included */
+        'filters.alertReachabilityType'?: string
+        /** @description Comma-separated list of alert CVE reachability types ("direct_dependency", "error", "maybe_reachable", "missing_support", "pending", "reachable", "undeterminable_reachability", "unknown", or "unreachable") that should be excluded */
+        'filters.alertReachabilityType.notIn'?: string
+        /** @description Comma-separated list of alert severities ("low", "medium", "high", or "critical") that should be included */
+        'filters.alertSeverity'?: string
+        /** @description Comma-separated list of alert severities ("low", "medium", "high", or "critical") that should be excluded */
+        'filters.alertSeverity.notIn'?: string
+        /** @description A single alert status ("open" or "cleared") */
+        'filters.alertStatus'?: string
+        /** @description A single alert status ("open" or "cleared") */
+        'filters.alertStatus.notIn'?: string
+        /** @description Comma-separated list of alert types (e.g. "usesEval", "unmaintained", etc.) that should be included */
+        'filters.alertType'?: string
+        /** @description Comma-separated list of alert types (e.g. "usesEval", "unmaintained", etc.) that should be excluded */
+        'filters.alertType.notIn'?: string
+        /** @description Alert updated at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+        'filters.alertUpdatedAt.eq'?: string
+        /** @description Alert updated at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+        'filters.alertUpdatedAt.lt'?: string
+        /** @description Alert updated at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+        'filters.alertUpdatedAt.lte'?: string
+        /** @description Alert updated at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+        'filters.alertUpdatedAt.gt'?: string
+        /** @description Alert updated at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+        'filters.alertUpdatedAt.gte'?: string
+        /** @description Name of artifact */
+        'filters.artifactName'?: string
+        /** @description Name of artifact */
+        'filters.artifactName.notIn'?: string
+        /** @description Comma-separated list of artifact types (e.g. "npm", "pypi", "gem", "maven", "golang", etc.) that should be included */
+        'filters.artifactType'?: string
+        /** @description Comma-separated list of artifact types (e.g. "npm", "pypi", "gem", "maven", "golang", etc.) that should be excluded */
+        'filters.artifactType.notIn'?: string
+        /** @description Comma-separated list of branch names that should be included */
+        'filters.branch'?: string
+        /** @description Comma-separated list of branch names that should be excluded */
+        'filters.branch.notIn'?: string
+        /** @description Comma-separated list of patch statuses ("patch_unavailable", "patch_available", or "patch_applied") that should be included */
+        'filters.cvePatchStatus'?: string
+        /** @description Comma-separated list of patch statuses ("patch_unavailable", "patch_available", or "patch_applied") that should be excluded */
+        'filters.cvePatchStatus.notIn'?: string
+        /** @description Dead/reachable dependency filter flag */
+        'filters.dependencyDead'?: boolean
+        /** @description Dead/reachable dependency filter flag */
+        'filters.dependencyDead.notIn'?: boolean
+        /** @description Development/production dependency filter flag */
+        'filters.dependencyDev'?: boolean
+        /** @description Development/production dependency filter flag */
+        'filters.dependencyDev.notIn'?: boolean
+        /** @description Direct/transitive dependency filter flag */
+        'filters.dependencyDirect'?: boolean
+        /** @description Direct/transitive dependency filter flag */
+        'filters.dependencyDirect.notIn'?: boolean
+        /** @description Comma-separated list of repo full names that should be included */
+        'filters.repoFullName'?: string
+        /** @description Comma-separated list of repo full names that should be excluded */
+        'filters.repoFullName.notIn'?: string
+        /** @description Comma-separated list of repo labels that should be included. Use "" to filter for repositories with no labels. */
+        'filters.repoLabels'?: string
+        /** @description Comma-separated list of repo labels that should be excluded. Use "" to filter for repositories with no labels. */
+        'filters.repoLabels.notIn'?: string
+        /** @description Comma-separated list of repo slugs that should be included */
+        'filters.repoSlug'?: string
+        /** @description Comma-separated list of repo slugs that should be excluded */
+        'filters.repoSlug.notIn'?: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description The paginated array of alert items for the organization and related metadata. */
+      200: {
+        content: {
+          'application/json': {
+            /** @default */
+            endCursor: string | null
+            items: Array<{
+              /** @default */
+              key: string
+              /** @default */
+              type: string
+              /** @default */
+              category: string
+              /** @default */
+              description: string | null
+              fix: {
+                /** @default */
+                type: string
+                /** @default */
+                description: string | null
+              } | null
+              vulnerability: {
+                /** @default */
+                cveId: string | null
+                /** @default */
+                cveTitle: string | null
+                /** @default */
+                cveDescription: string | null
+                /** @default 0 */
+                cvssScore: number
+                /** @default */
+                cvssVectorString: string | null
+                cweIds: string[] | null
+                cweNames: string[] | null
+                ghsaIds: string[] | null
+                /** @default 0 */
+                epssScore: number
+                /** @default 0 */
+                epssPercentile: number
+                /** @default false */
+                isKev: boolean
+                /** @default */
+                firstPatchedVersionIdentifier: string | null
+                /** @default */
+                url: string | null
+              } | null
+              /** @default */
+              id: string
+              /** @default 0 */
+              version: number
+              /**
+               * @default open
+               * @enum {string}
+               */
+              status: 'open' | 'cleared'
+              /** @default */
+              createdAt: string
+              /** @default */
+              updatedAt: string
+              /** @default */
+              clearedAt: string | null
+              /** @default */
+              dashboardUrl: string
+              /** @default */
+              title: string
+              /**
+               * @default low
+               * @enum {string}
+               */
+              severity: 'low' | 'medium' | 'high' | 'critical'
+              locations: {
+                /** @default */
+                action: string
+                /** @default */
+                actionSourceType: string
+                reachability: {
+                  /** @default */
+                  type: string
+                  /** @default */
+                  analysisType: string | null
+                }
+                licenseViolation: {
+                  violationData: {
+                    /** @default */
+                    purl: string | null
+                    /** @default */
+                    spdxAtomOrExtraData: string
+                  }[]
+                } | null
+                prioritization: {
+                  /** @default 0 */
+                  overallScore: number
+                  /** @default 0 */
+                  fixableScore: number
+                  /** @default 0 */
+                  reachableScore: number
+                  /** @default 0 */
+                  severityScore: number
+                }
+                repository: {
+                  /** @default */
+                  fullName: string | null
+                  /** @default */
+                  id: string | null
+                  /** @default */
+                  slug: string | null
+                  /** @default */
+                  workspace: string | null
+                  labels: string[]
+                  labelIds: string[]
+                } | null
+                branch: {
+                  /** @default */
+                  name: string
+                  /** @default */
+                  type: string | null
+                } | null
+                patch: {
+                  /** @default */
+                  uuid: string | null
+                  /**
+                   * @default patch_unavailable
+                   * @enum {string}
+                   */
+                  status:
+                    | 'patch_unavailable'
+                    | 'patch_available'
+                    | 'patch_applied'
+                  /** @default false */
+                  deprecated: boolean
+                }
+                dependency: {
+                  /** @default false */
+                  direct: boolean
+                  /** @default false */
+                  dev: boolean
+                  /** @default false */
+                  dead: boolean
+                  manifestFiles: components['schemas']['SocketManifestReference'][]
+                }
+                artifact: {
+                  /** @default */
+                  type: string
+                  /** @default */
+                  namespace: string | null
+                  /** @default */
+                  name: string
+                  /** @default */
+                  id: string
+                  /** @default */
+                  version: string
+                  /** @default */
+                  author: string | null
+                  /** @default */
+                  license: string | null
+                  scores: components['schemas']['SocketScore']
+                  /** @default */
+                  artifactId: string | null
+                  capabilities: {
+                    /**
+                     * @description Package can read or modify environment variables
+                     * @default false
+                     */
+                    env: boolean
+                    /**
+                     * @description Package uses dynamic code evaluation (eval, Function constructor, etc.)
+                     * @default false
+                     */
+                    eval: boolean
+                    /**
+                     * @description Package can read or write to the file system
+                     * @default false
+                     */
+                    fs: boolean
+                    /**
+                     * @description Package can make network requests or create servers
+                     * @default false
+                     */
+                    net: boolean
+                    /**
+                     * @description Package can execute shell commands or spawn processes
+                     * @default false
+                     */
+                    shell: boolean
+                    /**
+                     * @description Package uses unsafe or dangerous operations that could compromise security
+                     * @default false
+                     */
+                    unsafe: boolean
+                    /**
+                     * @description Package contains remote URL(s) in the source code
+                     * @default false
+                     */
+                    url: boolean
+                  } | null
+                }
+              }[]
+            }>
+            meta: {
+              /** @default */
+              organizationId: string
+              /** @default 0 */
+              queryStartTimestamp: number
+              filters: {
+                /** @description Comma-separated list of alert actions ("error", "warn", "monitor", or "ignore) that should be included */
+                alertAction?: string[]
+                /** @description Comma-separated list of alert actions ("error", "warn", "monitor", or "ignore) that should be excluded */
+                'alertAction.notIn'?: string[]
+                /** @description Comma-separated list of alert action source types ("fallback", "injected-alert", "org-policy", "reachability", "repo-label-policy", "socket-yml", or "triage") that should be included */
+                alertActionSourceType?: string[]
+                /** @description Comma-separated list of alert action source types ("fallback", "injected-alert", "org-policy", "reachability", "repo-label-policy", "socket-yml", or "triage") that should be excluded */
+                'alertActionSourceType.notIn'?: string[]
+                /** @description Comma-separated list of alert categories ("supplyChainRisk", "maintenance", "quality", "license", or "vulnerability") that should be included */
+                alertCategory?: string[]
+                /** @description Comma-separated list of alert categories ("supplyChainRisk", "maintenance", "quality", "license", or "vulnerability") that should be excluded */
+                'alertCategory.notIn'?: string[]
+                /** @description Alert cleared at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+                'alertClearedAt.eq'?: string[]
+                /** @description Alert cleared at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+                'alertClearedAt.lt'?: string[]
+                /** @description Alert cleared at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+                'alertClearedAt.lte'?: string[]
+                /** @description Alert cleared at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+                'alertClearedAt.gt'?: string[]
+                /** @description Alert cleared at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+                'alertClearedAt.gte'?: string[]
+                /** @description Alert created at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+                'alertCreatedAt.eq'?: string[]
+                /** @description Alert created at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+                'alertCreatedAt.lt'?: string[]
+                /** @description Alert created at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+                'alertCreatedAt.lte'?: string[]
+                /** @description Alert created at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+                'alertCreatedAt.gt'?: string[]
+                /** @description Alert created at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+                'alertCreatedAt.gte'?: string[]
+                /** @description CVE ID */
+                alertCveId?: string[]
+                /** @description CVE ID */
+                'alertCveId.notIn'?: string[]
+                /** @description CVE title */
+                alertCveTitle?: string[]
+                /** @description CVE title */
+                'alertCveTitle.notIn'?: string[]
+                /** @description CWE ID */
+                alertCweId?: string[]
+                /** @description CWE ID */
+                'alertCweId.notIn'?: string[]
+                /** @description CWE name */
+                alertCweName?: string[]
+                /** @description CWE name */
+                'alertCweName.notIn'?: string[]
+                /** @description Alert EPSS ("low", "medium", "high", "critical") */
+                alertEPSS?: string[]
+                /** @description Alert EPSS ("low", "medium", "high", "critical") */
+                'alertEPSS.notIn'?: string[]
+                /** @description Comma-separated list of alert fix types ("upgrade", "cve", or "remove") that should be included */
+                alertFixType?: string[]
+                /** @description Comma-separated list of alert fix types ("upgrade", "cve", or "remove") that should be excluded */
+                'alertFixType.notIn'?: string[]
+                /** @description Alert KEV (Known Exploited Vulnerability) filter flag */
+                alertKEV?: boolean[]
+                /** @description Alert priority ("low", "medium", "high", or "critical") */
+                alertPriority?: string[]
+                /** @description Alert priority ("low", "medium", "high", or "critical") */
+                'alertPriority.notIn'?: string[]
+                /** @description Comma-separated list of alert CVE reachability analysis types ("full-scan" or "precomputed") that should be included */
+                alertReachabilityAnalysisType?: string[]
+                /** @description Comma-separated list of alert CVE reachability analysis types ("full-scan" or "precomputed") that should be excluded */
+                'alertReachabilityAnalysisType.notIn'?: string[]
+                /** @description Comma-separated list of alert CVE reachability types ("direct_dependency", "error", "maybe_reachable", "missing_support", "pending", "reachable", "undeterminable_reachability", "unknown", or "unreachable") that should be included */
+                alertReachabilityType?: string[]
+                /** @description Comma-separated list of alert CVE reachability types ("direct_dependency", "error", "maybe_reachable", "missing_support", "pending", "reachable", "undeterminable_reachability", "unknown", or "unreachable") that should be excluded */
+                'alertReachabilityType.notIn'?: string[]
+                /** @description Comma-separated list of alert severities ("low", "medium", "high", or "critical") that should be included */
+                alertSeverity?: string[]
+                /** @description Comma-separated list of alert severities ("low", "medium", "high", or "critical") that should be excluded */
+                'alertSeverity.notIn'?: string[]
+                /** @description A single alert status ("open" or "cleared") */
+                alertStatus?: string[]
+                /** @description A single alert status ("open" or "cleared") */
+                'alertStatus.notIn'?: string[]
+                /** @description Comma-separated list of alert types (e.g. "usesEval", "unmaintained", etc.) that should be included */
+                alertType?: string[]
+                /** @description Comma-separated list of alert types (e.g. "usesEval", "unmaintained", etc.) that should be excluded */
+                'alertType.notIn'?: string[]
+                /** @description Alert updated at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+                'alertUpdatedAt.eq'?: string[]
+                /** @description Alert updated at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+                'alertUpdatedAt.lt'?: string[]
+                /** @description Alert updated at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+                'alertUpdatedAt.lte'?: string[]
+                /** @description Alert updated at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+                'alertUpdatedAt.gt'?: string[]
+                /** @description Alert updated at (YYYY-MM-DD HH:MM:SS in UTC time zone) */
+                'alertUpdatedAt.gte'?: string[]
+                /** @description Name of artifact */
+                artifactName?: string[]
+                /** @description Name of artifact */
+                'artifactName.notIn'?: string[]
+                /** @description Comma-separated list of artifact types (e.g. "npm", "pypi", "gem", "maven", "golang", etc.) that should be included */
+                artifactType?: string[]
+                /** @description Comma-separated list of artifact types (e.g. "npm", "pypi", "gem", "maven", "golang", etc.) that should be excluded */
+                'artifactType.notIn'?: string[]
+                /** @description Comma-separated list of branch names that should be included */
+                branch?: string[]
+                /** @description Comma-separated list of branch names that should be excluded */
+                'branch.notIn'?: string[]
+                /** @description Comma-separated list of patch statuses ("patch_unavailable", "patch_available", or "patch_applied") that should be included */
+                cvePatchStatus?: string[]
+                /** @description Comma-separated list of patch statuses ("patch_unavailable", "patch_available", or "patch_applied") that should be excluded */
+                'cvePatchStatus.notIn'?: string[]
+                /** @description Dead/reachable dependency filter flag */
+                dependencyDead?: boolean[]
+                /** @description Development/production dependency filter flag */
+                dependencyDev?: boolean[]
+                /** @description Direct/transitive dependency filter flag */
+                dependencyDirect?: boolean[]
+                /** @description Comma-separated list of repo full names that should be included */
+                repoFullName?: string[]
+                /** @description Comma-separated list of repo full names that should be excluded */
+                'repoFullName.notIn'?: string[]
+                /** @description Comma-separated list of repo labels that should be included. Use "" to filter for repositories with no labels. */
+                repoLabels?: string[]
+                /** @description Comma-separated list of repo labels that should be excluded. Use "" to filter for repositories with no labels. */
+                'repoLabels.notIn'?: string[]
+                /** @description Comma-separated list of repo slugs that should be included */
+                repoSlug?: string[]
+                /** @description Comma-separated list of repo slugs that should be excluded */
+                'repoSlug.notIn'?: string[]
+              }
+            }
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * List full scans associated with alert (Beta)
+   * @description List full scans associated with alert.
+   *
+   * This endpoint consumes 10 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - alerts:list
+   */
+  alertFullScans: {
+    parameters: {
+      query: {
+        /** @description Specify the maximum number of items to return per page (intermediate pages may have fewer than this limit and callers should always check "endCursor" in response body to know if there are more pages) */
+        per_page?: number
+        /** @description The pagination cursor that was returned as the "endCursor" property in previous request */
+        startAfterCursor?: string
+        /** @description One or more alert keys for which to find associated full scans */
+        alertKey: string
+        /** @description The number of days of data to fetch as an offset from current date (e.g. "-7d" for past 7 days) */
+        range?: string
+      }
+      path: {
+        /** @description The slug of the organization */
+        org_slug: string
+      }
+    }
+    responses: {
+      /** @description The paginated array of full scans associated with alert for the organization and related metadata. */
+      200: {
+        content: {
+          'application/json': {
+            /** @default */
+            endCursor: string | null
+            items: Array<{
+              /**
+               * @description ID of full scan
+               * @default
+               */
+              fullScanId: string
+              /** @default */
+              branchName: string | null
+              /**
+               * @description Type of branch that was scanned
+               * @default
+               * @enum {string}
+               */
+              branchType:
+                | 'default'
+                | 'non-default'
+                | 'tracked'
+                | 'untracked'
+                | ''
+              /**
+               * @description Full name of repo which contains repo workspace and repo slug
+               * @default
+               */
+              repoFullName: string | null
+              /**
+               * @description ISO date when SBOM was created
+               * @default
+               */
+              sbomCreatedAt: string
+              /**
+               * @description ISO date when SBOM was scanned
+               * @default
+               */
+              scannedAt: string
+              alertKeys: string[]
+            }>
+            meta: {
+              /** @default */
+              organizationId: string
+              alertKeys: string[]
+              /** @default 0 */
+              queryStartTimestamp: number
+              /** @default */
+              startDateInclusive: string
+              /** @default */
+              endDateInclusive: string
+            }
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * License Policy (Beta)
+   * @description Compare the license data found for a list of packages (given as PURL strings) with the contents of a configurable license policy,
+   *     returning information about license data which does not comply with the license allow list.
+   *
+   *     ## Example request body:
+   *
+   *     ```json
+   *     {
+   *       "components": [
+   *         {
+   *           "purl": "pkg:npm/lodash@4.17.21"
+   *         },
+   *         {
+   *           "purl": "pkg:npm/lodash@4.14.1"
+   *         }
+   *       ],
+   *       "allow": [
+   *         "permissive",
+   *         "pkg:npm/lodash?file_name=foo/test/*&version_glob=4.17.*"
+   *       ],
+   *       "warn": [
+   *         "copyleft",
+   *         "pkg:npm/lodash?file_name=foo/prod/*&version_glob=4.14.*"
+   *       ],
+   *       "options": ["toplevelOnly"]
+   *     }
+   *     ```
+   *
+   *
+   *     ## Return value
+   *
+   *     For each requested PURL, an array is returned. Each array contains a list of license policy violations
+   *     detected for the requested PURL.
+   *
+   *     Violations are accompanied by a string identifying the offending license data as `spdxAtomOrExtraData`,
+   *     a message describing why the license data is believed to be incompatible with the license policy, and a list
+   *     of locations (by filepath or other provenance information) where the offending license data may be found.
+   *
+   *     ```json
+   *     Array<
+   *       Array<{
+   *         filepathOrProvenance: Array,
+   *         level: "warning" | "violation",
+   *         purl: string,
+   *         spdxAtomOrExtraData: string,
+   *         violationExplanation: string
+   *       }>
+   *     >
+   *     ```
+   *
+   *     ## License policy schema
+   *
+   * ```json
+   * {
+   *   allow?: Array
+   *   warn?: Array
+   *   options?: Array
+   * }
+   * ```
+   *
+   * Elements of the `allow` and `warn` arrays strings representing items which should be allowed, or which should trigger a warning; license data found in package which not present in either array will produce a license violation (effectively a "hard" error). For example, to allow Apache-2.0 and MIT to the allow list, simply add the strings "Apache-2.0" and "MIT" to the `allow` array. Strings appearing in these arrays are generally "what you see is what you get", with two important exceptions: strings which are recognized as license classes and strings which are recognized as PURLs are handled differently to allow for more flexible license policy creation.
+   *
+   * ## License Classes
+   *
+   * Strings which are license classes will expand to a list of licenses known to be in that particular license class. Recognized license classes are:
+   *   'permissive',
+   *   'permissive (model)',
+   *   'permissive (gold)',
+   *   'permissive (silver)',
+   *   'permissive (bronze)',
+   *   'permissive (lead)',
+   *   'copyleft',
+   *   'maximal copyleft',
+   *   'network copyleft',
+   *   'strong copyleft',
+   *   'weak copyleft',
+   *   'contributor license agreement',
+   *   'public domain',
+   *   'proprietary free',
+   *   'source available',
+   *   'proprietary',
+   *   'commercial',
+   *   'patent'
+   *
+   * Users can learn more about [copyleft tiers](https://blueoakcouncil.org/copyleft) and [permissive tiers](https://blueoakcouncil.org/list) by reading the linked resources.
+   *
+   *
+   * ## PURLs
+   *
+   * Users may also modify their license policy's allow and warn lists by using [package URLs](https://github.com/package-url/purl-spec) (aka PURLs), which support glob patterns to allow a range of versions, files and directories, etc.
+   *
+   * purl qualifiers which support globs are `filename`, `version_glob`, `artifact_id` and `license_provenance` (primarily used for allowing data from registry metadata).
+   *
+   * ### Examples:
+   * Allow all license data found in a specific version of a package 4.14.1: `pkg:npm/lodash@4.14.1`
+   * Allow all license data found in a version range of a package: `pkg:npm/lodash?version_glob=15.*`
+   * Allow all license data in the test directory of a given package for certain version ranges: `pkg:npm/lodash@15.*.*?file_name=lodash/test/*`
+   * Allow all license data taken from the package registry for a package and version range: `pkg:npm/lodash?version_glob=*&license_provenance=registry_metadata`
+   *
+   * ## Available options
+   *
+   * `toplevelOnly`: only apply the license policy to "top level" license data in a package, which includes registry metadata, LICENSE files, and manifest files which are closest to the root of the package.
+   *
+   * `applyToUnidentified`: Apply license policy to found but unidentified license data. If enabled, the license policy will be applied to license data which could not be affirmatively identified as a known license (this will effectively merge the license policy violation and unidentified license alerts). If disabled, license policy alerts will only be shown for license data which is positively identified as something not allowed or set to warn by the license policy.
+   *
+   * This endpoint consumes 100 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   *       - packages:list
+   * - license-policy:read
+   */
+  licensePolicy: {
+    requestBody?: {
+      content: {
+        'application/json': components['schemas']['LicenseAllowListRequest']
+      }
+    }
+    responses: {
+      /** @description Data about license policy violations, if any exist */
+      200: {
+        content: {
+          'application/x-ndjson': Array<{
+            filepathOrProvenance: string[]
+            /** @default */
+            level: string
+            /** @default */
+            purl: string
+            /** @default */
+            spdxAtomOrExtraData: string
+            /** @default */
+            violationExplanation: string
+          }>
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+      500: components['responses']['SocketInternalServerError']
+    }
+  }
+  /**
+   * Saturate License Policy (Legacy)
+   * @deprecated
+   * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference/updateorglicensepolicy) instead.
+   *
+   * Get the "saturated" version of a license policy's allow list, filling in the entire set of allowed
+   * license data. For example, the saturated form of a license allow list which only specifies that
+   * licenses in the tier "maximal copyleft" are allowed is shown below (note the expanded `allowedStrings` property):
+   *
+   * ```json
+   * {
+   *   "allowedApprovalSources": [],
+   *   "allowedFamilies": [],
+   *   "allowedTiers": [
+   *     "maximal copyleft"
+   *   ],
+   *   "allowedStrings": [
+   *     "Parity-6.0.0",
+   *     "QPL-1.0-INRIA-2004",
+   *     "QPL-1.0",
+   *     "RPL-1.1",
+   *     "RPL-1.5"
+   *   ],
+   *   "allowedPURLs": [],
+   *   "focusAlertsHere": false
+   * }
+   * ```
+   *
+   * This may be helpful for users who want to compose more complex sets of allowed license data via
+   * the "allowedStrings" property, or for users who want to know more about the contents of a particular
+   * license group (family, tier, or approval source).
+   *
+   * ## Allow List Schema
+   *
+   * ```json
+   * ```
+   *
+   * where
+   *
+   * PermissiveTier ::= "model permissive" | "gold" | "silver" | "bronze" | "lead"
+   * CopyleftTier ::= "maximal copyleft" | "network copyleft" | "strong copyleft" | "weak copyleft"
+   *
+   * ## Return Value
+   *
+   * The returned value has the same shape as a license allow list:
+   *
+   * ```json
+   * {
+   *   allowedApprovalSources?: Array<"fsf" | "osi">,
+   *   allowedFamilies?: Array<"copyleft" | "permissive">,
+   *   allowedTiers?: Array,
+   *   allowedStrings?: Array
+   *   allowedPURLs?: Array
+   *   focusAlertsHere?: boolean
+   * }
+   * ```
+   *
+   * where
+   *
+   * PermissiveTier ::= "model permissive" | "gold" | "silver" | "bronze" | "lead"
+   * CopyleftTier ::= "maximal copyleft" | "network copyleft" | "strong copyleft" | "weak copyleft"
+   *
+   * readers can learn more about [copyleft tiers](https://blueoakcouncil.org/copyleft) and [permissive tiers](https://blueoakcouncil.org/list) by reading the linked resources.
+   *
+   * ### Example request bodies:
+   * ```json
+   * {
+   *   "allowedApprovalSources": ["fsf"],
+   *   "allowedPURLs": [],
+   *   "allowedFamilies": ["copyleft"],
+   *   "allowedTiers": ["model permissive"],
+   *   "allowedStrings": ["License :: OSI Approved :: BSD License"],
+   *   "focusAlertsHere": false
+   * }
+   * ```
+   *
+   * This endpoint consumes 100 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - packages:list
+   */
+  saturateLicensePolicy: {
+    requestBody?: {
+      content: {
+        'application/json': {
+          allow: components['schemas']['LicenseAllowList']
+          warn: components['schemas']['LicenseAllowList']
+          monitor: components['schemas']['LicenseAllowList']
+          allowedApprovalSources: string[] | null
+          allowedFamilies: string[] | null
+          allowedTiers: string[] | null
+          allowedStrings: string[] | null
+          allowedPURLs: string[] | null
+          /** @default false */
+          focusAlertsHere: boolean | null
+        }
+      }
+    }
+    responses: {
+      /** @description Saturated License Allow List */
+      200: {
+        content: {
+          'application/json': components['schemas']['LicensePolicy']
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+      500: components['responses']['SocketInternalServerError']
+    }
+  }
+  /**
+   * License Metadata
+   * @description For an array of license identifiers or names (short form SPDX identifiers, or long form license names),
+   *     returns an array of metadata for the corresponding license, if the license is recognized. If the query
+   *     parameter `includetext=true` is set, the returned metadata will also include the license text.
+   *
+   *
+   *     ## Example request body:
+   *
+   *     ```json
+   *     [
+   *       "Apache-2.0",
+   *       "BSD Zero Clause License"
+   *     ]
+   *     ```
+   *
+   *
+   *     ## Return value
+   *
+   *     ```json
+   *     // Response schema:
+   *     Array<{
+   *       licenseId: string,
+   *       name?: string,
+   *       deprecated?: string,
+   *       crossref?: string
+   *       classes: Array
+   *       text?: string
+   *     }>
+   *
+   *     // Example response:
+   *     [
+   *       {
+   *         "licenseId": "Apache-2.0",
+   *         "name": "Apache License 2.0",
+   *         "deprecated": false,
+   *         "crossref": "https://spdx.org/licenses/Apache-2.0.html",
+   *         "classes": [
+   *           "fsf libre",
+   *           "osi approved",
+   *           "permissive (silver)"
+   *         ]
+   *       },
+   *       {
+   *         "licenseId": "0BSD",
+   *         "name": "BSD Zero Clause License",
+   *         "deprecated": false,
+   *         "crossref": "https://spdx.org/licenses/0BSD.html",
+   *         "classes": [
+   *           "osi approved",
+   *           "permissive (bronze)"
+   *         ]
+   *       }
+   *     ]
+   *     ```
+   *
+   *     ## License policy schema
+   *
+   * ```json
+   * {
+   *   allow?: Array
+   *   warn?: Array
+   *   options?: Array
+   * }
+   * ```
+   *
+   * Elements of the `allow` and `warn` arrays strings representing items which should be allowed, or which should trigger a warning; license data found in package which not present in either array will produce a license violation (effectively a "hard" error). For example, to allow Apache-2.0 and MIT to the allow list, simply add the strings "Apache-2.0" and "MIT" to the `allow` array. Strings appearing in these arrays are generally "what you see is what you get", with two important exceptions: strings which are recognized as license classes and strings which are recognized as PURLs are handled differently to allow for more flexible license policy creation.
+   *
+   * ## License Classes
+   *
+   * Strings which are license classes will expand to a list of licenses known to be in that particular license class. Recognized license classes are:
+   *   'permissive',
+   *   'permissive (model)',
+   *   'permissive (gold)',
+   *   'permissive (silver)',
+   *   'permissive (bronze)',
+   *   'permissive (lead)',
+   *   'copyleft',
+   *   'maximal copyleft',
+   *   'network copyleft',
+   *   'strong copyleft',
+   *   'weak copyleft',
+   *   'contributor license agreement',
+   *   'public domain',
+   *   'proprietary free',
+   *   'source available',
+   *   'proprietary',
+   *   'commercial',
+   *   'patent'
+   *
+   * Users can learn more about [copyleft tiers](https://blueoakcouncil.org/copyleft) and [permissive tiers](https://blueoakcouncil.org/list) by reading the linked resources.
+   *
+   *
+   * ## PURLs
+   *
+   * Users may also modify their license policy's allow and warn lists by using [package URLs](https://github.com/package-url/purl-spec) (aka PURLs), which support glob patterns to allow a range of versions, files and directories, etc.
+   *
+   * purl qualifiers which support globs are `filename`, `version_glob`, `artifact_id` and `license_provenance` (primarily used for allowing data from registry metadata).
+   *
+   * ### Examples:
+   * Allow all license data found in a specific version of a package 4.14.1: `pkg:npm/lodash@4.14.1`
+   * Allow all license data found in a version range of a package: `pkg:npm/lodash?version_glob=15.*`
+   * Allow all license data in the test directory of a given package for certain version ranges: `pkg:npm/lodash@15.*.*?file_name=lodash/test/*`
+   * Allow all license data taken from the package registry for a package and version range: `pkg:npm/lodash?version_glob=*&license_provenance=registry_metadata`
+   *
+   * ## Available options
+   *
+   * `toplevelOnly`: only apply the license policy to "top level" license data in a package, which includes registry metadata, LICENSE files, and manifest files which are closest to the root of the package.
+   *
+   * `applyToUnidentified`: Apply license policy to found but unidentified license data. If enabled, the license policy will be applied to license data which could not be affirmatively identified as a known license (this will effectively merge the license policy violation and unidentified license alerts). If disabled, license policy alerts will only be shown for license data which is positively identified as something not allowed or set to warn by the license policy.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   */
+  licenseMetadata: {
+    parameters: {
+      query?: {
+        /** @description If `true`, the response will include the full text of the requested licenses */
+        includetext?: boolean
+      }
+    }
+    requestBody?: {
+      content: {
+        'application/json': components['schemas']['SLicenseMetaReq']
+      }
+    }
+    responses: {
+      /** @description Metadata for the requested licenses */
+      200: {
+        content: {
+          'application/json': components['schemas']['SLicenseMetaRes']
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+    }
+  }
+  /**
+   * Alert Types Metadata
+   * @description For an array of alert type identifiers, returns metadata for each alert type. Optionally, specify a language via the 'language' query parameter.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   */
+  alertTypes: {
+    parameters: {
+      query?: {
+        /** @description Language for alert metadata */
+        language?: 'ach-UG' | 'de-DE' | 'en-US' | 'es-ES' | 'fr-FR' | 'it-IT'
+      }
+    }
+    requestBody?: {
+      content: {
+        'application/json': string[]
+      }
+    }
+    responses: {
+      /** @description Metadata for the requested alert types */
+      200: {
+        content: {
+          'application/json': Array<{
+            /** @default */
+            type: string
+            /** @default */
+            title: string
+            /** @default */
+            description: string
+            /** @default */
+            suggestion: string
+            /** @default */
+            emoji: string
+            /** @default */
+            nextStepTitle: string
+            props: {
+              [key: string]: string
+            } | null
+          }>
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+    }
+  }
+  /**
+   * Returns the OpenAPI definition
+   * @description Retrieve the API specification in an Openapi JSON format.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   */
+  getOpenAPI: {
+    responses: {
+      /** @description OpenAPI specification */
+      200: {
+        content: {
+          'application/json': unknown
+        }
+      }
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Returns the OpenAPI definition
+   * @description Retrieve the API specification in an Openapi JSON format.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   */
+  getOpenAPIJSON: {
+    responses: {
+      /** @description OpenAPI specification */
+      200: {
+        content: {
+          'application/json': unknown
+        }
+      }
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get quota
+   * @description Get your current API quota. You can use this endpoint to prevent doing requests that might spend all your quota.
+   *
+   * This endpoint consumes 0 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - No Scopes Required, but authentication is required
+   */
+  getQuota: {
+    responses: {
+      /** @description Quota information */
+      200: {
+        content: {
+          'application/json': {
+            /** @default 0 */
+            quota: number
+            /** @default 0 */
+            maxQuota: number
+            /** @default */
+            nextWindowRefresh: string | null
+          }
+        }
+      }
+      401: components['responses']['SocketUnauthorized']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * List organizations
+   * @description Get information on the current organizations associated with the API token.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - No Scopes Required, but authentication is required
+   */
+  getOrganizations: {
+    responses: {
+      /** @description Organizations information */
+      200: {
+        content: {
+          'application/json': {
+            organizations: {
+              [key: string]: {
+                /** @default */
+                id: string
+                /** @default */
+                name: string | null
+                /** @default */
+                image: string | null
+                /** @default */
+                plan: string
+                /** @default */
+                slug: string
+              }
+            }
+          }
+        }
+      }
+      401: components['responses']['SocketUnauthorized']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Calculate settings
+   * @deprecated
+   * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference/updateorgsecuritypolicy) instead.
+   *
+   * Get current settings for the requested organizations and default settings to allow deferrals.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - No Scopes Required, but authentication is required
+   */
+  postSettings: {
+    /** @description Array of organization selector objects (with `organization` field holding the organization ID) to get settings for */
+    requestBody?: {
+      content: {
+        'application/json': Array<{
+          /** @default */
+          organization?: string
+        }>
+      }
+    }
+    responses: {
+      /** @description Organization settings. Returned object contains default issue rules and an array of entries, with each entry representing an organization's settings. */
+      200: {
+        content: {
+          'application/json': {
+            defaults: {
+              issueRules: {
+                [key: string]: {
+                  /** @enum {string} */
+                  action?: 'error' | 'ignore' | 'warn'
+                }
+              }
+            }
+            entries: Array<{
+              /** @default */
+              start: string | null
+              settings: {
+                [key: string]: {
+                  deferTo: string | null
+                  issueRules: {
+                    [key: string]: {
+                      /** @enum {string} */
+                      action: 'defer' | 'error' | 'ignore' | 'warn' | 'monitor'
+                    }
+                  }
+                }
+              }
+            }>
+          }
+        }
+      }
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get supported files for report
+   * @deprecated
+   * @description **This endpoint is deprecated.** Deprecated since 2023-01-15. Use the [successor version](https://docs.socket.dev/reference/getsupportedfiles) instead.
+   *
+   * This route has been moved to the `orgs/{org_slug}/supported-files` endpoint.
+   *
+   * Get a list of supported files for project report generation.
+   * Files are categorized first by environment (e.g. NPM or PyPI), then by name.
+   *
+   * Files whose names match the patterns returned by this endpoint can be uploaded for report generation.
+   * Examples of supported filenames include `package.json`, `package-lock.json`, and `yarn.lock`.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   */
+  getReportSupportedFiles: {
+    responses: {
+      /** @description Glob patterns used to match supported files */
+      200: {
+        content: {
+          'application/json': {
+            [key: string]: {
+              [key: string]: {
+                /** @default */
+                pattern: string
+              }
+            }
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Delete a report
+   * @deprecated
+   * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference) instead.
+   *
+   * Deprecated: Use `/orgs/{org_slug}/full-scans` instead. Delete a specific project report generated with the GitHub app.
+   *
+   * This endpoint consumes 10 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - report:write
+   */
+  deleteReport: {
+    parameters: {
+      path: {
+        id: string
+      }
+    }
+    responses: {
+      /** @description Success */
+      200: {
+        content: {
+          'application/json': {
+            /** @default ok */
+            status: string
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get list of reports
+   * @deprecated
+   * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference) instead.
+   *
+   * Deprecated: Use `/orgs/{org_slug}/full-scans` instead. Get all your project reports generated with the GitHub app.
+   *
+   * This endpoint consumes 10 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - report:list
+   */
+  getReportList: {
+    parameters: {
+      query?: {
+        /** @description A Unix timestamp in seconds to filter results prior to this date. */
+        from?: string
+        /** @description When defined, returns only reports for the associated repository slug. */
+        repo?: string
+      }
+    }
+    responses: {
+      /** @description List of project reports */
+      200: {
+        content: {
+          'application/json': Array<{
+            /** @default */
+            id: string
+            /** @default */
+            url: string
+            /** @default */
+            repo: string
+            /** @default */
+            branch: string
+            /** @default null */
+            pull_requests: Record
+            /** @default */
+            commit: string
+            /** @default */
+            owner: string
+            /** @default */
+            created_at: string
+          }>
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Create a report
+   * @deprecated
+   * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference/createorgfullscan) instead.
+   *
+   * Deprecated: Use `/orgs/{org_slug}/full-scans` instead.
+   *
+   * Upload a lockfile to get your project analyzed by Socket.
+   * You can upload multiple lockfiles in the same request, but each filename must be unique.
+   *
+   * The name of the file must be in the supported list.
+   *
+   * For example, these are valid filenames: `package.json`, `folder/package.json` and `deep/nested/folder/package.json`.
+   *
+   * This endpoint consumes 100 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - report:write
+   */
+  createReport: {
+    parameters: {
+      query?: {
+        /** @description The workspace of the repository to associate the full-scan with. */
+        workspace?: string
+      }
+    }
+    requestBody?: {
+      content: {
+        'multipart/form-data': {
+          issueRules?: {
+            [key: string]: boolean
+          }
+          [key: string]: undefined
+        }
+      }
+    }
+    responses: {
+      /** @description ID and URL of the project report */
+      200: {
+        content: {
+          'application/json': {
+            /** @default */
+            id: string
+            /** @default */
+            url: string
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * View a report
+   * @deprecated
+   * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference/getorgfullscan) instead.
+   *
+   * Deprecated: Use `/orgs/{org_slug}/full-scans` instead. Get all the issues, packages, and scores related to an specific project report.
+   *
+   * This endpoint consumes 10 units of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - report:read
+   */
+  getReport: {
+    parameters: {
+      path: {
+        id: string
+      }
+    }
+    responses: {
+      /** @description Socket report */
+      200: {
+        content: {
+          'application/json': components['schemas']['SocketReport']
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      410: components['responses']['SocketGone']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * List GitHub repositories
+   * @deprecated
+   * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference/getorgrepolist) instead.
+   *
+   * Deprecated: Use `/orgs/{org_slug}/repos` instead. Get all GitHub repositories associated with a Socket org.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - repo:list
+   */
+  getRepoList: {
+    parameters: {
+      query?: {
+        pageToken?: string
+      }
+    }
+    responses: {
+      /** @description List of GitHub repositories associated with the organization. */
+      200: {
+        content: {
+          'application/json': {
+            results: Array<{
+              /** @default */
+              id: string
+              /** @default */
+              created_at: string
+              /** @default */
+              updated_at: string
+              /** @default */
+              github_install_id: string
+              /** @default */
+              github_repo_id: string
+              /** @default */
+              name: string
+              /** @default */
+              github_full_name: string
+              /** @default */
+              organization_id: string | null
+              /** @default */
+              workspace: string
+              latest_project_report?: {
+                /** @default */
+                id: string
+                /** @default */
+                created_at: string
+              }
+            }>
+          }
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get issues by package
+   * @deprecated
+   * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference) instead.
+   *
+   * Get all the issues related with a particular npm package version.
+   * This endpoint returns the issue type, location, and additional details related to each issue in the `props` attribute.
+   *
+   * You can [see here](https://socket.dev/alerts) the full list of issues.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - No Scopes Required, but authentication is required
+   */
+  getIssuesByNPMPackage: {
+    parameters: {
+      path: {
+        package: string
+        version: string
+      }
+    }
+    responses: {
+      /** @description Socket issue lists */
+      200: {
+        content: {
+          'application/json': components['schemas']['SocketIssueList']
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get score by package
+   * @deprecated
+   * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference/batchpackagefetch) instead.
+   *
+   * Get all the scores and metrics by category that are used to evaluate the package version.
+   *
+   * - depscore: The average of all score factors. (0-1)
+   * - supplyChainRisk: Score factors relating to supply chain security (0-1)
+   * - downloadCount: The number of downloads for the package. Higher downloads contribute to a higher score.
+   * - supplyChainRiskIssueLow/Mid/High/Critical: The number of supply chain risk issues of varying severity. Lower numbers contribute to a higher score.
+   * - dependencyCount: The number of production dependencies. Lower count contributes to a higher score.
+   * - devDependencyCount: The number of development dependencies. Lower count contributes to a higher score.
+   * - transitiveDependencyCount: The number of transitive dependencies. Lower count contributes to a higher score.
+   * - totalDependencyCount: The total number of dependencies (production + development + transitive). Lower count contributes to a higher score.
+   * - quality: Score factors relating to code quality (0-1)
+   * - qualityIssueLow/Mid/High/Critical: The number of code quality issues of varying severity. Lower numbers contribute to a higher score.
+   * - linesOfCode: The number of lines of code in the package. Lower count contributes to a higher score.
+   * - readmeLength: The length of the package's README file. Longer READMEs contribute to a higher score.
+   * - maintenance: Score factors relating to package maintenance (0-1)
+   * - maintainerCount: The number of maintainers for the package. More maintainers contribute to a higher score.
+   * - versionsLastWeek/Month/TwoMonths/Year: The number of versions released in different time periods. More recent releases contribute to a higher score.
+   * - versionCount: The total number of versions released. Higher count contributes to a higher score.
+   * - maintenanceIssueLow/Mid/High/Critical: The number of maintenance issues of varying severity. Lower numbers contribute to a higher score.
+   * - vulnerability: Score factors relating to package vulnerabilities (0-1)
+   * - vulnerabilityIssueLow/Mid/High/Critical: The number of vulnerability issues of varying severity. Lower numbers contribute to a higher score.
+   * - dependencyVulnerabilityCount: The number of vulnerabilities in the package's dependencies. Lower count contributes to a higher score.
+   * - vulnerabilityCount: The number of vulnerabilities in the package itself. Lower count contributes to a higher score.
+   * - license: Score factors relating to package licensing (0-1)
+   * - licenseIssueLow/Mid/High/Critical: The number of license issues of varying severity. Lower numbers contribute to a higher score.
+   * - licenseQuality: A score indicating the quality/permissiveness of the package's license. Higher quality contributes to a higher score.
+   * - miscellaneous: Miscellaneous metadata about the package version.
+   * - versionAuthorName/Email: The name and email of the version author.
+   * - fileCount: The number of files in the package.
+   * - byteCount: The total size in bytes of the package.
+   * - typeModule: Whether the package declares a "type": "module" field.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - No Scopes Required, but authentication is required
+   */
+  getScoreByNPMPackage: {
+    parameters: {
+      path: {
+        package: string
+        version: string
+      }
+    }
+    responses: {
+      /** @description Socket package scores */
+      200: {
+        content: {
+          'application/json': components['schemas']['SocketPackageScore']
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get organization analytics (unstable)
+   * @deprecated
+   * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference/historicalalertstrend) instead.
+   *
+   * Please implement against the [Historical dependencies](/reference/historicaldependenciestrend) or [Historical alerts](/reference/historicalalertstrend) endpoints.
+   *
+   * Get analytics data regarding the number of alerts found across all active repositories.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - report:write
+   */
+  getOrgAnalytics: {
+    parameters: {
+      path: {
+        filter: string
+      }
+    }
+    responses: {
+      /** @description Socket analytics - organization-level data */
+      200: {
+        content: {
+          'application/json': Array<{
+            /** @default 0 */
+            id: number
+            /** @default */
+            created_at: string
+            /** @default */
+            repository_id: string
+            /** @default 0 */
+            organization_id: number
+            /** @default */
+            repository_name: string
+            /** @default 0 */
+            total_critical_alerts: number
+            /** @default 0 */
+            total_high_alerts: number
+            /** @default 0 */
+            total_medium_alerts: number
+            /** @default 0 */
+            total_low_alerts: number
+            /** @default 0 */
+            total_critical_added: number
+            /** @default 0 */
+            total_high_added: number
+            /** @default 0 */
+            total_medium_added: number
+            /** @default 0 */
+            total_low_added: number
+            /** @default 0 */
+            total_critical_prevented: number
+            /** @default 0 */
+            total_high_prevented: number
+            /** @default 0 */
+            total_medium_prevented: number
+            /** @default 0 */
+            total_low_prevented: number
+            /** @default {} */
+            top_five_alert_types: Record
+          }>
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  }
+  /**
+   * Get repository analytics
+   * @deprecated
+   * @description **This endpoint is deprecated.** Use the [successor version](https://docs.socket.dev/reference/historicalalertstrend) instead.
+   *
+   * Please implement against the [Historical dependencies](/reference/historicaldependenciestrend) or [Historical alerts](/reference/historicalalertstrend) endpoints.
+   *
+   * Get analytics data regarding the number of alerts found in a single repository.
+   *
+   * This endpoint consumes 1 unit of your quota.
+   *
+   * This endpoint requires the following org token scopes:
+   * - report:write
+   */
+  getRepoAnalytics: {
+    parameters: {
+      path: {
+        name: string
+        filter: string
+      }
+    }
+    responses: {
+      /** @description Socket analytics - repo-level data */
+      200: {
+        content: {
+          'application/json': Array<{
+            /** @default 0 */
+            id: number
+            /** @default */
+            repository_id: string
+            /** @default */
+            created_at: string
+            /** @default 0 */
+            organization_id: number
+            /** @default */
+            repository_name: string
+            /** @default 0 */
+            total_critical_alerts: number
+            /** @default 0 */
+            total_high_alerts: number
+            /** @default 0 */
+            total_medium_alerts: number
+            /** @default 0 */
+            total_low_alerts: number
+            /** @default 0 */
+            total_critical_added: number
+            /** @default 0 */
+            total_high_added: number
+            /** @default 0 */
+            total_medium_added: number
+            /** @default 0 */
+            total_low_added: number
+            /** @default 0 */
+            total_critical_prevented: number
+            /** @default 0 */
+            total_high_prevented: number
+            /** @default 0 */
+            total_medium_prevented: number
+            /** @default 0 */
+            total_low_prevented: number
+            /** @default {} */
+            top_five_alert_types: Record
+          }>
+        }
+      }
+      400: components['responses']['SocketBadRequest']
+      401: components['responses']['SocketUnauthorized']
+      403: components['responses']['SocketForbidden']
+      404: components['responses']['SocketNotFoundResponse']
+      429: components['responses']['SocketTooManyRequestsResponse']
+    }
+  } // SDK v3 method name aliases for TypeScript compatibility.
+  // These map the new SDK method names to their underlying OpenAPI operation names.
+  listOrganizations: operations['getOrganizations']
+  listRepositories: operations['getOrgRepoList']
+  createRepository: operations['createOrgRepo']
+  deleteRepository: operations['deleteOrgRepo']
+  updateRepository: operations['updateOrgRepo']
+  getRepository: operations['getOrgRepo']
+  listFullScans: operations['getOrgFullScanList']
+  createFullScan: operations['CreateOrgFullScan']
+  getFullScan: operations['getOrgFullScan']
+  streamFullScan: operations['getOrgFullScan']
+  deleteFullScan: operations['deleteOrgFullScan']
+  getFullScanMetadata: operations['getOrgFullScanMetadata']
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/LICENSE b/.claude/hooks/check-new-deps/node_modules/@types/node/LICENSE
new file mode 100644
index 00000000..9e841e7a
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/LICENSE
@@ -0,0 +1,21 @@
+    MIT License
+
+    Copyright (c) Microsoft Corporation.
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/README.md b/.claude/hooks/check-new-deps/node_modules/@types/node/README.md
new file mode 100644
index 00000000..9cb3fef0
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/README.md
@@ -0,0 +1,15 @@
+# Installation
+> `npm install --save @types/node`
+
+# Summary
+This package contains type definitions for node (https://nodejs.org/).
+
+# Details
+Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node.
+
+### Additional Details
+ * Last updated: Tue, 28 Oct 2025 17:37:26 GMT
+ * Dependencies: [undici-types](https://npmjs.com/package/undici-types)
+
+# Credits
+These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [Alberto Schiabel](https://github.com/jkomyno), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [David Junger](https://github.com/touffy), [Mohsen Azimi](https://github.com/mohsen1), [Nikita Galkin](https://github.com/galkin), [Sebastian Silbermann](https://github.com/eps1lon), [Wilco Bakker](https://github.com/WilcoBakker), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), [ExE Boss](https://github.com/ExE-Boss), [Piotr Błażejewicz](https://github.com/peterblazejewicz), [Anna Henningsen](https://github.com/addaleax), [Victor Perin](https://github.com/victorperin), [NodeJS Contributors](https://github.com/NodeJS), [Linus Unnebäck](https://github.com/LinusU), [wafuwafu13](https://github.com/wafuwafu13), [Matteo Collina](https://github.com/mcollina), [Dmitry Semigradsky](https://github.com/Semigradsky), [René](https://github.com/Renegade334), and [Yagiz Nizipli](https://github.com/anonrig).
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/assert.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/assert.d.ts
new file mode 100644
index 00000000..cd6d6df9
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/assert.d.ts
@@ -0,0 +1,1115 @@
+/**
+ * The `node:assert` module provides a set of assertion functions for verifying
+ * invariants.
+ * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/assert.js)
+ */
+declare module "assert" {
+    import strict = require("assert/strict");
+    /**
+     * An alias of {@link assert.ok}.
+     * @since v0.5.9
+     * @param value The input that is checked for being truthy.
+     */
+    function assert(value: unknown, message?: string | Error): asserts value;
+    const kOptions: unique symbol;
+    namespace assert {
+        type AssertMethodNames =
+            | "deepEqual"
+            | "deepStrictEqual"
+            | "doesNotMatch"
+            | "doesNotReject"
+            | "doesNotThrow"
+            | "equal"
+            | "fail"
+            | "ifError"
+            | "match"
+            | "notDeepEqual"
+            | "notDeepStrictEqual"
+            | "notEqual"
+            | "notStrictEqual"
+            | "ok"
+            | "partialDeepStrictEqual"
+            | "rejects"
+            | "strictEqual"
+            | "throws";
+        interface AssertOptions {
+            /**
+             * If set to `'full'`, shows the full diff in assertion errors.
+             * @default 'simple'
+             */
+            diff?: "simple" | "full" | undefined;
+            /**
+             * If set to `true`, non-strict methods behave like their
+             * corresponding strict methods.
+             * @default true
+             */
+            strict?: boolean | undefined;
+            /**
+             * If set to `true`, skips prototype and constructor
+             * comparison in deep equality checks.
+             * @since v24.9.0
+             * @default false
+             */
+            skipPrototype?: boolean | undefined;
+        }
+        interface Assert extends Pick {
+            readonly [kOptions]: AssertOptions & { strict: false };
+        }
+        interface AssertStrict extends Pick {
+            readonly [kOptions]: AssertOptions & { strict: true };
+        }
+        /**
+         * The `Assert` class allows creating independent assertion instances with custom options.
+         * @since v24.6.0
+         */
+        var Assert: {
+            /**
+             * Creates a new assertion instance. The `diff` option controls the verbosity of diffs in assertion error messages.
+             *
+             * ```js
+             * const { Assert } = require('node:assert');
+             * const assertInstance = new Assert({ diff: 'full' });
+             * assertInstance.deepStrictEqual({ a: 1 }, { a: 2 });
+             * // Shows a full diff in the error message.
+             * ```
+             *
+             * **Important**: When destructuring assertion methods from an `Assert` instance,
+             * the methods lose their connection to the instance's configuration options (such
+             * as `diff`, `strict`, and `skipPrototype` settings).
+             * The destructured methods will fall back to default behavior instead.
+             *
+             * ```js
+             * const myAssert = new Assert({ diff: 'full' });
+             *
+             * // This works as expected - uses 'full' diff
+             * myAssert.strictEqual({ a: 1 }, { b: { c: 1 } });
+             *
+             * // This loses the 'full' diff setting - falls back to default 'simple' diff
+             * const { strictEqual } = myAssert;
+             * strictEqual({ a: 1 }, { b: { c: 1 } });
+             * ```
+             *
+             * The `skipPrototype` option affects all deep equality methods:
+             *
+             * ```js
+             * class Foo {
+             *   constructor(a) {
+             *     this.a = a;
+             *   }
+             * }
+             *
+             * class Bar {
+             *   constructor(a) {
+             *     this.a = a;
+             *   }
+             * }
+             *
+             * const foo = new Foo(1);
+             * const bar = new Bar(1);
+             *
+             * // Default behavior - fails due to different constructors
+             * const assert1 = new Assert();
+             * assert1.deepStrictEqual(foo, bar); // AssertionError
+             *
+             * // Skip prototype comparison - passes if properties are equal
+             * const assert2 = new Assert({ skipPrototype: true });
+             * assert2.deepStrictEqual(foo, bar); // OK
+             * ```
+             *
+             * When destructured, methods lose access to the instance's `this` context and revert to default assertion behavior
+             * (diff: 'simple', non-strict mode).
+             * To maintain custom options when using destructured methods, avoid
+             * destructuring and call methods directly on the instance.
+             * @since v24.6.0
+             */
+            new(
+                options?: AssertOptions & { strict?: true | undefined },
+            ): AssertStrict;
+            new(
+                options: AssertOptions,
+            ): Assert;
+        };
+        interface AssertionErrorOptions {
+            /**
+             * If provided, the error message is set to this value.
+             */
+            message?: string | undefined;
+            /**
+             * The `actual` property on the error instance.
+             */
+            actual?: unknown;
+            /**
+             * The `expected` property on the error instance.
+             */
+            expected?: unknown;
+            /**
+             * The `operator` property on the error instance.
+             */
+            operator?: string | undefined;
+            /**
+             * If provided, the generated stack trace omits frames before this function.
+             */
+            stackStartFn?: Function | undefined;
+            /**
+             * If set to `'full'`, shows the full diff in assertion errors.
+             * @default 'simple'
+             */
+            diff?: "simple" | "full" | undefined;
+        }
+        /**
+         * Indicates the failure of an assertion. All errors thrown by the `node:assert` module will be instances of the `AssertionError` class.
+         */
+        class AssertionError extends Error {
+            constructor(options: AssertionErrorOptions);
+            /**
+             * Set to the `actual` argument for methods such as {@link assert.strictEqual()}.
+             */
+            actual: unknown;
+            /**
+             * Set to the `expected` argument for methods such as {@link assert.strictEqual()}.
+             */
+            expected: unknown;
+            /**
+             * Indicates if the message was auto-generated (`true`) or not.
+             */
+            generatedMessage: boolean;
+            /**
+             * Value is always `ERR_ASSERTION` to show that the error is an assertion error.
+             */
+            code: "ERR_ASSERTION";
+            /**
+             * Set to the passed in operator value.
+             */
+            operator: string;
+        }
+        /**
+         * This feature is deprecated and will be removed in a future version.
+         * Please consider using alternatives such as the `mock` helper function.
+         * @since v14.2.0, v12.19.0
+         * @deprecated Deprecated
+         */
+        class CallTracker {
+            /**
+             * The wrapper function is expected to be called exactly `exact` times. If the
+             * function has not been called exactly `exact` times when `tracker.verify()` is called, then `tracker.verify()` will throw an
+             * error.
+             *
+             * ```js
+             * import assert from 'node:assert';
+             *
+             * // Creates call tracker.
+             * const tracker = new assert.CallTracker();
+             *
+             * function func() {}
+             *
+             * // Returns a function that wraps func() that must be called exact times
+             * // before tracker.verify().
+             * const callsfunc = tracker.calls(func);
+             * ```
+             * @since v14.2.0, v12.19.0
+             * @param [fn='A no-op function']
+             * @param [exact=1]
+             * @return A function that wraps `fn`.
+             */
+            calls(exact?: number): () => void;
+            calls(fn: undefined, exact?: number): () => void;
+            calls any>(fn: Func, exact?: number): Func;
+            calls any>(fn?: Func, exact?: number): Func | (() => void);
+            /**
+             * Example:
+             *
+             * ```js
+             * import assert from 'node:assert';
+             *
+             * const tracker = new assert.CallTracker();
+             *
+             * function func() {}
+             * const callsfunc = tracker.calls(func);
+             * callsfunc(1, 2, 3);
+             *
+             * assert.deepStrictEqual(tracker.getCalls(callsfunc),
+             *                        [{ thisArg: undefined, arguments: [1, 2, 3] }]);
+             * ```
+             * @since v18.8.0, v16.18.0
+             * @return An array with all the calls to a tracked function.
+             */
+            getCalls(fn: Function): CallTrackerCall[];
+            /**
+             * The arrays contains information about the expected and actual number of calls of
+             * the functions that have not been called the expected number of times.
+             *
+             * ```js
+             * import assert from 'node:assert';
+             *
+             * // Creates call tracker.
+             * const tracker = new assert.CallTracker();
+             *
+             * function func() {}
+             *
+             * // Returns a function that wraps func() that must be called exact times
+             * // before tracker.verify().
+             * const callsfunc = tracker.calls(func, 2);
+             *
+             * // Returns an array containing information on callsfunc()
+             * console.log(tracker.report());
+             * // [
+             * //  {
+             * //    message: 'Expected the func function to be executed 2 time(s) but was
+             * //    executed 0 time(s).',
+             * //    actual: 0,
+             * //    expected: 2,
+             * //    operator: 'func',
+             * //    stack: stack trace
+             * //  }
+             * // ]
+             * ```
+             * @since v14.2.0, v12.19.0
+             * @return An array of objects containing information about the wrapper functions returned by {@link tracker.calls()}.
+             */
+            report(): CallTrackerReportInformation[];
+            /**
+             * Reset calls of the call tracker. If a tracked function is passed as an argument, the calls will be reset for it.
+             * If no arguments are passed, all tracked functions will be reset.
+             *
+             * ```js
+             * import assert from 'node:assert';
+             *
+             * const tracker = new assert.CallTracker();
+             *
+             * function func() {}
+             * const callsfunc = tracker.calls(func);
+             *
+             * callsfunc();
+             * // Tracker was called once
+             * assert.strictEqual(tracker.getCalls(callsfunc).length, 1);
+             *
+             * tracker.reset(callsfunc);
+             * assert.strictEqual(tracker.getCalls(callsfunc).length, 0);
+             * ```
+             * @since v18.8.0, v16.18.0
+             * @param fn a tracked function to reset.
+             */
+            reset(fn?: Function): void;
+            /**
+             * Iterates through the list of functions passed to {@link tracker.calls()} and will throw an error for functions that
+             * have not been called the expected number of times.
+             *
+             * ```js
+             * import assert from 'node:assert';
+             *
+             * // Creates call tracker.
+             * const tracker = new assert.CallTracker();
+             *
+             * function func() {}
+             *
+             * // Returns a function that wraps func() that must be called exact times
+             * // before tracker.verify().
+             * const callsfunc = tracker.calls(func, 2);
+             *
+             * callsfunc();
+             *
+             * // Will throw an error since callsfunc() was only called once.
+             * tracker.verify();
+             * ```
+             * @since v14.2.0, v12.19.0
+             */
+            verify(): void;
+        }
+        interface CallTrackerCall {
+            thisArg: object;
+            arguments: unknown[];
+        }
+        interface CallTrackerReportInformation {
+            message: string;
+            /** The actual number of times the function was called. */
+            actual: number;
+            /** The number of times the function was expected to be called. */
+            expected: number;
+            /** The name of the function that is wrapped. */
+            operator: string;
+            /** A stack trace of the function. */
+            stack: object;
+        }
+        type AssertPredicate = RegExp | (new() => object) | ((thrown: unknown) => boolean) | object | Error;
+        /**
+         * Throws an `AssertionError` with the provided error message or a default
+         * error message. If the `message` parameter is an instance of an `Error` then
+         * it will be thrown instead of the `AssertionError`.
+         *
+         * ```js
+         * import assert from 'node:assert/strict';
+         *
+         * assert.fail();
+         * // AssertionError [ERR_ASSERTION]: Failed
+         *
+         * assert.fail('boom');
+         * // AssertionError [ERR_ASSERTION]: boom
+         *
+         * assert.fail(new TypeError('need array'));
+         * // TypeError: need array
+         * ```
+         *
+         * Using `assert.fail()` with more than two arguments is possible but deprecated.
+         * See below for further details.
+         * @since v0.1.21
+         * @param [message='Failed']
+         */
+        function fail(message?: string | Error): never;
+        /** @deprecated since v10.0.0 - use fail([message]) or other assert functions instead. */
+        function fail(
+            actual: unknown,
+            expected: unknown,
+            message?: string | Error,
+            operator?: string,
+            // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
+            stackStartFn?: Function,
+        ): never;
+        /**
+         * Tests if `value` is truthy. It is equivalent to `assert.equal(!!value, true, message)`.
+         *
+         * If `value` is not truthy, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is `undefined`, a default
+         * error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown instead of the `AssertionError`.
+         * If no arguments are passed in at all `message` will be set to the string:`` 'No value argument passed to `assert.ok()`' ``.
+         *
+         * Be aware that in the `repl` the error message will be different to the one
+         * thrown in a file! See below for further details.
+         *
+         * ```js
+         * import assert from 'node:assert/strict';
+         *
+         * assert.ok(true);
+         * // OK
+         * assert.ok(1);
+         * // OK
+         *
+         * assert.ok();
+         * // AssertionError: No value argument passed to `assert.ok()`
+         *
+         * assert.ok(false, 'it\'s false');
+         * // AssertionError: it's false
+         *
+         * // In the repl:
+         * assert.ok(typeof 123 === 'string');
+         * // AssertionError: false == true
+         *
+         * // In a file (e.g. test.js):
+         * assert.ok(typeof 123 === 'string');
+         * // AssertionError: The expression evaluated to a falsy value:
+         * //
+         * //   assert.ok(typeof 123 === 'string')
+         *
+         * assert.ok(false);
+         * // AssertionError: The expression evaluated to a falsy value:
+         * //
+         * //   assert.ok(false)
+         *
+         * assert.ok(0);
+         * // AssertionError: The expression evaluated to a falsy value:
+         * //
+         * //   assert.ok(0)
+         * ```
+         *
+         * ```js
+         * import assert from 'node:assert/strict';
+         *
+         * // Using `assert()` works the same:
+         * assert(0);
+         * // AssertionError: The expression evaluated to a falsy value:
+         * //
+         * //   assert(0)
+         * ```
+         * @since v0.1.21
+         */
+        function ok(value: unknown, message?: string | Error): asserts value;
+        /**
+         * **Strict assertion mode**
+         *
+         * An alias of {@link strictEqual}.
+         *
+         * **Legacy assertion mode**
+         *
+         * > Stability: 3 - Legacy: Use {@link strictEqual} instead.
+         *
+         * Tests shallow, coercive equality between the `actual` and `expected` parameters
+         * using the [`==` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Equality). `NaN` is specially handled
+         * and treated as being identical if both sides are `NaN`.
+         *
+         * ```js
+         * import assert from 'node:assert';
+         *
+         * assert.equal(1, 1);
+         * // OK, 1 == 1
+         * assert.equal(1, '1');
+         * // OK, 1 == '1'
+         * assert.equal(NaN, NaN);
+         * // OK
+         *
+         * assert.equal(1, 2);
+         * // AssertionError: 1 == 2
+         * assert.equal({ a: { b: 1 } }, { a: { b: 1 } });
+         * // AssertionError: { a: { b: 1 } } == { a: { b: 1 } }
+         * ```
+         *
+         * If the values are not equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a default
+         * error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown instead of the `AssertionError`.
+         * @since v0.1.21
+         */
+        function equal(actual: unknown, expected: unknown, message?: string | Error): void;
+        /**
+         * **Strict assertion mode**
+         *
+         * An alias of {@link notStrictEqual}.
+         *
+         * **Legacy assertion mode**
+         *
+         * > Stability: 3 - Legacy: Use {@link notStrictEqual} instead.
+         *
+         * Tests shallow, coercive inequality with the [`!=` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Inequality). `NaN` is
+         * specially handled and treated as being identical if both sides are `NaN`.
+         *
+         * ```js
+         * import assert from 'node:assert';
+         *
+         * assert.notEqual(1, 2);
+         * // OK
+         *
+         * assert.notEqual(1, 1);
+         * // AssertionError: 1 != 1
+         *
+         * assert.notEqual(1, '1');
+         * // AssertionError: 1 != '1'
+         * ```
+         *
+         * If the values are equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a default error
+         * message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown instead of the `AssertionError`.
+         * @since v0.1.21
+         */
+        function notEqual(actual: unknown, expected: unknown, message?: string | Error): void;
+        /**
+         * **Strict assertion mode**
+         *
+         * An alias of {@link deepStrictEqual}.
+         *
+         * **Legacy assertion mode**
+         *
+         * > Stability: 3 - Legacy: Use {@link deepStrictEqual} instead.
+         *
+         * Tests for deep equality between the `actual` and `expected` parameters. Consider
+         * using {@link deepStrictEqual} instead. {@link deepEqual} can have
+         * surprising results.
+         *
+         * _Deep equality_ means that the enumerable "own" properties of child objects
+         * are also recursively evaluated by the following rules.
+         * @since v0.1.21
+         */
+        function deepEqual(actual: unknown, expected: unknown, message?: string | Error): void;
+        /**
+         * **Strict assertion mode**
+         *
+         * An alias of {@link notDeepStrictEqual}.
+         *
+         * **Legacy assertion mode**
+         *
+         * > Stability: 3 - Legacy: Use {@link notDeepStrictEqual} instead.
+         *
+         * Tests for any deep inequality. Opposite of {@link deepEqual}.
+         *
+         * ```js
+         * import assert from 'node:assert';
+         *
+         * const obj1 = {
+         *   a: {
+         *     b: 1,
+         *   },
+         * };
+         * const obj2 = {
+         *   a: {
+         *     b: 2,
+         *   },
+         * };
+         * const obj3 = {
+         *   a: {
+         *     b: 1,
+         *   },
+         * };
+         * const obj4 = { __proto__: obj1 };
+         *
+         * assert.notDeepEqual(obj1, obj1);
+         * // AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } }
+         *
+         * assert.notDeepEqual(obj1, obj2);
+         * // OK
+         *
+         * assert.notDeepEqual(obj1, obj3);
+         * // AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } }
+         *
+         * assert.notDeepEqual(obj1, obj4);
+         * // OK
+         * ```
+         *
+         * If the values are deeply equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a default
+         * error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown
+         * instead of the `AssertionError`.
+         * @since v0.1.21
+         */
+        function notDeepEqual(actual: unknown, expected: unknown, message?: string | Error): void;
+        /**
+         * Tests strict equality between the `actual` and `expected` parameters as
+         * determined by [`Object.is()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is).
+         *
+         * ```js
+         * import assert from 'node:assert/strict';
+         *
+         * assert.strictEqual(1, 2);
+         * // AssertionError [ERR_ASSERTION]: Expected inputs to be strictly equal:
+         * //
+         * // 1 !== 2
+         *
+         * assert.strictEqual(1, 1);
+         * // OK
+         *
+         * assert.strictEqual('Hello foobar', 'Hello World!');
+         * // AssertionError [ERR_ASSERTION]: Expected inputs to be strictly equal:
+         * // + actual - expected
+         * //
+         * // + 'Hello foobar'
+         * // - 'Hello World!'
+         * //          ^
+         *
+         * const apples = 1;
+         * const oranges = 2;
+         * assert.strictEqual(apples, oranges, `apples ${apples} !== oranges ${oranges}`);
+         * // AssertionError [ERR_ASSERTION]: apples 1 !== oranges 2
+         *
+         * assert.strictEqual(1, '1', new TypeError('Inputs are not identical'));
+         * // TypeError: Inputs are not identical
+         * ```
+         *
+         * If the values are not strictly equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a
+         * default error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown
+         * instead of the `AssertionError`.
+         * @since v0.1.21
+         */
+        function strictEqual(actual: unknown, expected: T, message?: string | Error): asserts actual is T;
+        /**
+         * Tests strict inequality between the `actual` and `expected` parameters as
+         * determined by [`Object.is()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is).
+         *
+         * ```js
+         * import assert from 'node:assert/strict';
+         *
+         * assert.notStrictEqual(1, 2);
+         * // OK
+         *
+         * assert.notStrictEqual(1, 1);
+         * // AssertionError [ERR_ASSERTION]: Expected "actual" to be strictly unequal to:
+         * //
+         * // 1
+         *
+         * assert.notStrictEqual(1, '1');
+         * // OK
+         * ```
+         *
+         * If the values are strictly equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a
+         * default error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown
+         * instead of the `AssertionError`.
+         * @since v0.1.21
+         */
+        function notStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void;
+        /**
+         * Tests for deep equality between the `actual` and `expected` parameters.
+         * "Deep" equality means that the enumerable "own" properties of child objects
+         * are recursively evaluated also by the following rules.
+         * @since v1.2.0
+         */
+        function deepStrictEqual(actual: unknown, expected: T, message?: string | Error): asserts actual is T;
+        /**
+         * Tests for deep strict inequality. Opposite of {@link deepStrictEqual}.
+         *
+         * ```js
+         * import assert from 'node:assert/strict';
+         *
+         * assert.notDeepStrictEqual({ a: 1 }, { a: '1' });
+         * // OK
+         * ```
+         *
+         * If the values are deeply and strictly equal, an `AssertionError` is thrown
+         * with a `message` property set equal to the value of the `message` parameter. If
+         * the `message` parameter is undefined, a default error message is assigned. If
+         * the `message` parameter is an instance of an `Error` then it will be thrown
+         * instead of the `AssertionError`.
+         * @since v1.2.0
+         */
+        function notDeepStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void;
+        /**
+         * Expects the function `fn` to throw an error.
+         *
+         * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
+         * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), a validation function,
+         * a validation object where each property will be tested for strict deep equality,
+         * or an instance of error where each property will be tested for strict deep
+         * equality including the non-enumerable `message` and `name` properties. When
+         * using an object, it is also possible to use a regular expression, when
+         * validating against a string property. See below for examples.
+         *
+         * If specified, `message` will be appended to the message provided by the `AssertionError` if the `fn` call fails to throw or in case the error validation
+         * fails.
+         *
+         * Custom validation object/error instance:
+         *
+         * ```js
+         * import assert from 'node:assert/strict';
+         *
+         * const err = new TypeError('Wrong value');
+         * err.code = 404;
+         * err.foo = 'bar';
+         * err.info = {
+         *   nested: true,
+         *   baz: 'text',
+         * };
+         * err.reg = /abc/i;
+         *
+         * assert.throws(
+         *   () => {
+         *     throw err;
+         *   },
+         *   {
+         *     name: 'TypeError',
+         *     message: 'Wrong value',
+         *     info: {
+         *       nested: true,
+         *       baz: 'text',
+         *     },
+         *     // Only properties on the validation object will be tested for.
+         *     // Using nested objects requires all properties to be present. Otherwise
+         *     // the validation is going to fail.
+         *   },
+         * );
+         *
+         * // Using regular expressions to validate error properties:
+         * assert.throws(
+         *   () => {
+         *     throw err;
+         *   },
+         *   {
+         *     // The `name` and `message` properties are strings and using regular
+         *     // expressions on those will match against the string. If they fail, an
+         *     // error is thrown.
+         *     name: /^TypeError$/,
+         *     message: /Wrong/,
+         *     foo: 'bar',
+         *     info: {
+         *       nested: true,
+         *       // It is not possible to use regular expressions for nested properties!
+         *       baz: 'text',
+         *     },
+         *     // The `reg` property contains a regular expression and only if the
+         *     // validation object contains an identical regular expression, it is going
+         *     // to pass.
+         *     reg: /abc/i,
+         *   },
+         * );
+         *
+         * // Fails due to the different `message` and `name` properties:
+         * assert.throws(
+         *   () => {
+         *     const otherErr = new Error('Not found');
+         *     // Copy all enumerable properties from `err` to `otherErr`.
+         *     for (const [key, value] of Object.entries(err)) {
+         *       otherErr[key] = value;
+         *     }
+         *     throw otherErr;
+         *   },
+         *   // The error's `message` and `name` properties will also be checked when using
+         *   // an error as validation object.
+         *   err,
+         * );
+         * ```
+         *
+         * Validate instanceof using constructor:
+         *
+         * ```js
+         * import assert from 'node:assert/strict';
+         *
+         * assert.throws(
+         *   () => {
+         *     throw new Error('Wrong value');
+         *   },
+         *   Error,
+         * );
+         * ```
+         *
+         * Validate error message using [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions):
+         *
+         * Using a regular expression runs `.toString` on the error object, and will
+         * therefore also include the error name.
+         *
+         * ```js
+         * import assert from 'node:assert/strict';
+         *
+         * assert.throws(
+         *   () => {
+         *     throw new Error('Wrong value');
+         *   },
+         *   /^Error: Wrong value$/,
+         * );
+         * ```
+         *
+         * Custom error validation:
+         *
+         * The function must return `true` to indicate all internal validations passed.
+         * It will otherwise fail with an `AssertionError`.
+         *
+         * ```js
+         * import assert from 'node:assert/strict';
+         *
+         * assert.throws(
+         *   () => {
+         *     throw new Error('Wrong value');
+         *   },
+         *   (err) => {
+         *     assert(err instanceof Error);
+         *     assert(/value/.test(err));
+         *     // Avoid returning anything from validation functions besides `true`.
+         *     // Otherwise, it's not clear what part of the validation failed. Instead,
+         *     // throw an error about the specific validation that failed (as done in this
+         *     // example) and add as much helpful debugging information to that error as
+         *     // possible.
+         *     return true;
+         *   },
+         *   'unexpected error',
+         * );
+         * ```
+         *
+         * `error` cannot be a string. If a string is provided as the second
+         * argument, then `error` is assumed to be omitted and the string will be used for `message` instead. This can lead to easy-to-miss mistakes. Using the same
+         * message as the thrown error message is going to result in an `ERR_AMBIGUOUS_ARGUMENT` error. Please read the example below carefully if using
+         * a string as the second argument gets considered:
+         *
+         * ```js
+         * import assert from 'node:assert/strict';
+         *
+         * function throwingFirst() {
+         *   throw new Error('First');
+         * }
+         *
+         * function throwingSecond() {
+         *   throw new Error('Second');
+         * }
+         *
+         * function notThrowing() {}
+         *
+         * // The second argument is a string and the input function threw an Error.
+         * // The first case will not throw as it does not match for the error message
+         * // thrown by the input function!
+         * assert.throws(throwingFirst, 'Second');
+         * // In the next example the message has no benefit over the message from the
+         * // error and since it is not clear if the user intended to actually match
+         * // against the error message, Node.js throws an `ERR_AMBIGUOUS_ARGUMENT` error.
+         * assert.throws(throwingSecond, 'Second');
+         * // TypeError [ERR_AMBIGUOUS_ARGUMENT]
+         *
+         * // The string is only used (as message) in case the function does not throw:
+         * assert.throws(notThrowing, 'Second');
+         * // AssertionError [ERR_ASSERTION]: Missing expected exception: Second
+         *
+         * // If it was intended to match for the error message do this instead:
+         * // It does not throw because the error messages match.
+         * assert.throws(throwingSecond, /Second$/);
+         *
+         * // If the error message does not match, an AssertionError is thrown.
+         * assert.throws(throwingFirst, /Second$/);
+         * // AssertionError [ERR_ASSERTION]
+         * ```
+         *
+         * Due to the confusing error-prone notation, avoid a string as the second
+         * argument.
+         * @since v0.1.21
+         */
+        function throws(block: () => unknown, message?: string | Error): void;
+        function throws(block: () => unknown, error: AssertPredicate, message?: string | Error): void;
+        /**
+         * Asserts that the function `fn` does not throw an error.
+         *
+         * Using `assert.doesNotThrow()` is actually not useful because there
+         * is no benefit in catching an error and then rethrowing it. Instead, consider
+         * adding a comment next to the specific code path that should not throw and keep
+         * error messages as expressive as possible.
+         *
+         * When `assert.doesNotThrow()` is called, it will immediately call the `fn` function.
+         *
+         * If an error is thrown and it is the same type as that specified by the `error` parameter, then an `AssertionError` is thrown. If the error is of a
+         * different type, or if the `error` parameter is undefined, the error is
+         * propagated back to the caller.
+         *
+         * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
+         * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), or a validation
+         * function. See {@link throws} for more details.
+         *
+         * The following, for instance, will throw the `TypeError` because there is no
+         * matching error type in the assertion:
+         *
+         * ```js
+         * import assert from 'node:assert/strict';
+         *
+         * assert.doesNotThrow(
+         *   () => {
+         *     throw new TypeError('Wrong value');
+         *   },
+         *   SyntaxError,
+         * );
+         * ```
+         *
+         * However, the following will result in an `AssertionError` with the message
+         * 'Got unwanted exception...':
+         *
+         * ```js
+         * import assert from 'node:assert/strict';
+         *
+         * assert.doesNotThrow(
+         *   () => {
+         *     throw new TypeError('Wrong value');
+         *   },
+         *   TypeError,
+         * );
+         * ```
+         *
+         * If an `AssertionError` is thrown and a value is provided for the `message` parameter, the value of `message` will be appended to the `AssertionError` message:
+         *
+         * ```js
+         * import assert from 'node:assert/strict';
+         *
+         * assert.doesNotThrow(
+         *   () => {
+         *     throw new TypeError('Wrong value');
+         *   },
+         *   /Wrong value/,
+         *   'Whoops',
+         * );
+         * // Throws: AssertionError: Got unwanted exception: Whoops
+         * ```
+         * @since v0.1.21
+         */
+        function doesNotThrow(block: () => unknown, message?: string | Error): void;
+        function doesNotThrow(block: () => unknown, error: AssertPredicate, message?: string | Error): void;
+        /**
+         * Throws `value` if `value` is not `undefined` or `null`. This is useful when
+         * testing the `error` argument in callbacks. The stack trace contains all frames
+         * from the error passed to `ifError()` including the potential new frames for `ifError()` itself.
+         *
+         * ```js
+         * import assert from 'node:assert/strict';
+         *
+         * assert.ifError(null);
+         * // OK
+         * assert.ifError(0);
+         * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 0
+         * assert.ifError('error');
+         * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 'error'
+         * assert.ifError(new Error());
+         * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: Error
+         *
+         * // Create some random error frames.
+         * let err;
+         * (function errorFrame() {
+         *   err = new Error('test error');
+         * })();
+         *
+         * (function ifErrorFrame() {
+         *   assert.ifError(err);
+         * })();
+         * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: test error
+         * //     at ifErrorFrame
+         * //     at errorFrame
+         * ```
+         * @since v0.1.97
+         */
+        function ifError(value: unknown): asserts value is null | undefined;
+        /**
+         * Awaits the `asyncFn` promise or, if `asyncFn` is a function, immediately
+         * calls the function and awaits the returned promise to complete. It will then
+         * check that the promise is rejected.
+         *
+         * If `asyncFn` is a function and it throws an error synchronously, `assert.rejects()` will return a rejected `Promise` with that error. If the
+         * function does not return a promise, `assert.rejects()` will return a rejected `Promise` with an [ERR_INVALID_RETURN_VALUE](https://nodejs.org/docs/latest-v24.x/api/errors.html#err_invalid_return_value)
+         * error. In both cases the error handler is skipped.
+         *
+         * Besides the async nature to await the completion behaves identically to {@link throws}.
+         *
+         * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
+         * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), a validation function,
+         * an object where each property will be tested for, or an instance of error where
+         * each property will be tested for including the non-enumerable `message` and `name` properties.
+         *
+         * If specified, `message` will be the message provided by the `{@link AssertionError}` if the `asyncFn` fails to reject.
+         *
+         * ```js
+         * import assert from 'node:assert/strict';
+         *
+         * await assert.rejects(
+         *   async () => {
+         *     throw new TypeError('Wrong value');
+         *   },
+         *   {
+         *     name: 'TypeError',
+         *     message: 'Wrong value',
+         *   },
+         * );
+         * ```
+         *
+         * ```js
+         * import assert from 'node:assert/strict';
+         *
+         * await assert.rejects(
+         *   async () => {
+         *     throw new TypeError('Wrong value');
+         *   },
+         *   (err) => {
+         *     assert.strictEqual(err.name, 'TypeError');
+         *     assert.strictEqual(err.message, 'Wrong value');
+         *     return true;
+         *   },
+         * );
+         * ```
+         *
+         * ```js
+         * import assert from 'node:assert/strict';
+         *
+         * assert.rejects(
+         *   Promise.reject(new Error('Wrong value')),
+         *   Error,
+         * ).then(() => {
+         *   // ...
+         * });
+         * ```
+         *
+         * `error` cannot be a string. If a string is provided as the second argument, then `error` is assumed to
+         * be omitted and the string will be used for `message` instead. This can lead to easy-to-miss mistakes. Please read the
+         * example in {@link throws} carefully if using a string as the second argument gets considered.
+         * @since v10.0.0
+         */
+        function rejects(block: (() => Promise) | Promise, message?: string | Error): Promise;
+        function rejects(
+            block: (() => Promise) | Promise,
+            error: AssertPredicate,
+            message?: string | Error,
+        ): Promise;
+        /**
+         * Awaits the `asyncFn` promise or, if `asyncFn` is a function, immediately
+         * calls the function and awaits the returned promise to complete. It will then
+         * check that the promise is not rejected.
+         *
+         * If `asyncFn` is a function and it throws an error synchronously, `assert.doesNotReject()` will return a rejected `Promise` with that error. If
+         * the function does not return a promise, `assert.doesNotReject()` will return a
+         * rejected `Promise` with an [ERR_INVALID_RETURN_VALUE](https://nodejs.org/docs/latest-v24.x/api/errors.html#err_invalid_return_value) error. In both cases
+         * the error handler is skipped.
+         *
+         * Using `assert.doesNotReject()` is actually not useful because there is little
+         * benefit in catching a rejection and then rejecting it again. Instead, consider
+         * adding a comment next to the specific code path that should not reject and keep
+         * error messages as expressive as possible.
+         *
+         * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
+         * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), or a validation
+         * function. See {@link throws} for more details.
+         *
+         * Besides the async nature to await the completion behaves identically to {@link doesNotThrow}.
+         *
+         * ```js
+         * import assert from 'node:assert/strict';
+         *
+         * await assert.doesNotReject(
+         *   async () => {
+         *     throw new TypeError('Wrong value');
+         *   },
+         *   SyntaxError,
+         * );
+         * ```
+         *
+         * ```js
+         * import assert from 'node:assert/strict';
+         *
+         * assert.doesNotReject(Promise.reject(new TypeError('Wrong value')))
+         *   .then(() => {
+         *     // ...
+         *   });
+         * ```
+         * @since v10.0.0
+         */
+        function doesNotReject(
+            block: (() => Promise) | Promise,
+            message?: string | Error,
+        ): Promise;
+        function doesNotReject(
+            block: (() => Promise) | Promise,
+            error: AssertPredicate,
+            message?: string | Error,
+        ): Promise;
+        /**
+         * Expects the `string` input to match the regular expression.
+         *
+         * ```js
+         * import assert from 'node:assert/strict';
+         *
+         * assert.match('I will fail', /pass/);
+         * // AssertionError [ERR_ASSERTION]: The input did not match the regular ...
+         *
+         * assert.match(123, /pass/);
+         * // AssertionError [ERR_ASSERTION]: The "string" argument must be of type string.
+         *
+         * assert.match('I will pass', /pass/);
+         * // OK
+         * ```
+         *
+         * If the values do not match, or if the `string` argument is of another type than `string`, an `{@link AssertionError}` is thrown with a `message` property set equal
+         * to the value of the `message` parameter. If the `message` parameter is
+         * undefined, a default error message is assigned. If the `message` parameter is an
+         * instance of an [Error](https://nodejs.org/docs/latest-v24.x/api/errors.html#class-error) then it will be thrown instead of the `{@link AssertionError}`.
+         * @since v13.6.0, v12.16.0
+         */
+        function match(value: string, regExp: RegExp, message?: string | Error): void;
+        /**
+         * Expects the `string` input not to match the regular expression.
+         *
+         * ```js
+         * import assert from 'node:assert/strict';
+         *
+         * assert.doesNotMatch('I will fail', /fail/);
+         * // AssertionError [ERR_ASSERTION]: The input was expected to not match the ...
+         *
+         * assert.doesNotMatch(123, /pass/);
+         * // AssertionError [ERR_ASSERTION]: The "string" argument must be of type string.
+         *
+         * assert.doesNotMatch('I will pass', /different/);
+         * // OK
+         * ```
+         *
+         * If the values do match, or if the `string` argument is of another type than `string`, an `{@link AssertionError}` is thrown with a `message` property set equal
+         * to the value of the `message` parameter. If the `message` parameter is
+         * undefined, a default error message is assigned. If the `message` parameter is an
+         * instance of an [Error](https://nodejs.org/docs/latest-v24.x/api/errors.html#class-error) then it will be thrown instead of the `{@link AssertionError}`.
+         * @since v13.6.0, v12.16.0
+         */
+        function doesNotMatch(value: string, regExp: RegExp, message?: string | Error): void;
+        /**
+         * Tests for partial deep equality between the `actual` and `expected` parameters.
+         * "Deep" equality means that the enumerable "own" properties of child objects
+         * are recursively evaluated also by the following rules. "Partial" equality means
+         * that only properties that exist on the `expected` parameter are going to be
+         * compared.
+         *
+         * This method always passes the same test cases as `assert.deepStrictEqual()`,
+         * behaving as a super set of it.
+         * @since v22.13.0
+         */
+        function partialDeepStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void;
+    }
+    namespace assert {
+        export { strict };
+    }
+    export = assert;
+}
+declare module "node:assert" {
+    import assert = require("assert");
+    export = assert;
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/assert/strict.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/assert/strict.d.ts
new file mode 100644
index 00000000..4ed7395a
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/assert/strict.d.ts
@@ -0,0 +1,111 @@
+/**
+ * In strict assertion mode, non-strict methods behave like their corresponding
+ * strict methods. For example, `assert.deepEqual()` will behave like
+ * `assert.deepStrictEqual()`.
+ *
+ * In strict assertion mode, error messages for objects display a diff. In legacy
+ * assertion mode, error messages for objects display the objects, often truncated.
+ *
+ * To use strict assertion mode:
+ *
+ * ```js
+ * import { strict as assert } from 'node:assert';
+ * ```
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ * ```
+ *
+ * Example error diff:
+ *
+ * ```js
+ * import { strict as assert } from 'node:assert';
+ *
+ * assert.deepEqual([[[1, 2, 3]], 4, 5], [[[1, 2, '3']], 4, 5]);
+ * // AssertionError: Expected inputs to be strictly deep-equal:
+ * // + actual - expected ... Lines skipped
+ * //
+ * //   [
+ * //     [
+ * // ...
+ * //       2,
+ * // +     3
+ * // -     '3'
+ * //     ],
+ * // ...
+ * //     5
+ * //   ]
+ * ```
+ *
+ * To deactivate the colors, use the `NO_COLOR` or `NODE_DISABLE_COLORS`
+ * environment variables. This will also deactivate the colors in the REPL. For
+ * more on color support in terminal environments, read the tty
+ * [`getColorDepth()`](https://nodejs.org/docs/latest-v24.x/api/tty.html#writestreamgetcolordepthenv) documentation.
+ * @since v15.0.0
+ * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/assert/strict.js)
+ */
+declare module "assert/strict" {
+    import {
+        Assert,
+        AssertionError,
+        AssertionErrorOptions,
+        AssertOptions,
+        AssertPredicate,
+        AssertStrict,
+        CallTracker,
+        CallTrackerCall,
+        CallTrackerReportInformation,
+        deepStrictEqual,
+        doesNotMatch,
+        doesNotReject,
+        doesNotThrow,
+        fail,
+        ifError,
+        match,
+        notDeepStrictEqual,
+        notStrictEqual,
+        ok,
+        partialDeepStrictEqual,
+        rejects,
+        strictEqual,
+        throws,
+    } from "node:assert";
+    function strict(value: unknown, message?: string | Error): asserts value;
+    namespace strict {
+        export {
+            Assert,
+            AssertionError,
+            AssertionErrorOptions,
+            AssertOptions,
+            AssertPredicate,
+            AssertStrict,
+            CallTracker,
+            CallTrackerCall,
+            CallTrackerReportInformation,
+            deepStrictEqual,
+            deepStrictEqual as deepEqual,
+            doesNotMatch,
+            doesNotReject,
+            doesNotThrow,
+            fail,
+            ifError,
+            match,
+            notDeepStrictEqual,
+            notDeepStrictEqual as notDeepEqual,
+            notStrictEqual,
+            notStrictEqual as notEqual,
+            ok,
+            partialDeepStrictEqual,
+            rejects,
+            strict,
+            strictEqual,
+            strictEqual as equal,
+            throws,
+        };
+    }
+    export = strict;
+}
+declare module "node:assert/strict" {
+    import strict = require("assert/strict");
+    export = strict;
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/async_hooks.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/async_hooks.d.ts
new file mode 100644
index 00000000..2377689f
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/async_hooks.d.ts
@@ -0,0 +1,623 @@
+/**
+ * We strongly discourage the use of the `async_hooks` API.
+ * Other APIs that can cover most of its use cases include:
+ *
+ * * [`AsyncLocalStorage`](https://nodejs.org/docs/latest-v24.x/api/async_context.html#class-asynclocalstorage) tracks async context
+ * * [`process.getActiveResourcesInfo()`](https://nodejs.org/docs/latest-v24.x/api/process.html#processgetactiveresourcesinfo) tracks active resources
+ *
+ * The `node:async_hooks` module provides an API to track asynchronous resources.
+ * It can be accessed using:
+ *
+ * ```js
+ * import async_hooks from 'node:async_hooks';
+ * ```
+ * @experimental
+ * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/async_hooks.js)
+ */
+declare module "async_hooks" {
+    /**
+     * ```js
+     * import { executionAsyncId } from 'node:async_hooks';
+     * import fs from 'node:fs';
+     *
+     * console.log(executionAsyncId());  // 1 - bootstrap
+     * const path = '.';
+     * fs.open(path, 'r', (err, fd) => {
+     *   console.log(executionAsyncId());  // 6 - open()
+     * });
+     * ```
+     *
+     * The ID returned from `executionAsyncId()` is related to execution timing, not
+     * causality (which is covered by `triggerAsyncId()`):
+     *
+     * ```js
+     * const server = net.createServer((conn) => {
+     *   // Returns the ID of the server, not of the new connection, because the
+     *   // callback runs in the execution scope of the server's MakeCallback().
+     *   async_hooks.executionAsyncId();
+     *
+     * }).listen(port, () => {
+     *   // Returns the ID of a TickObject (process.nextTick()) because all
+     *   // callbacks passed to .listen() are wrapped in a nextTick().
+     *   async_hooks.executionAsyncId();
+     * });
+     * ```
+     *
+     * Promise contexts may not get precise `executionAsyncIds` by default.
+     * See the section on [promise execution tracking](https://nodejs.org/docs/latest-v24.x/api/async_hooks.html#promise-execution-tracking).
+     * @since v8.1.0
+     * @return The `asyncId` of the current execution context. Useful to track when something calls.
+     */
+    function executionAsyncId(): number;
+    /**
+     * Resource objects returned by `executionAsyncResource()` are most often internal
+     * Node.js handle objects with undocumented APIs. Using any functions or properties
+     * on the object is likely to crash your application and should be avoided.
+     *
+     * Using `executionAsyncResource()` in the top-level execution context will
+     * return an empty object as there is no handle or request object to use,
+     * but having an object representing the top-level can be helpful.
+     *
+     * ```js
+     * import { open } from 'node:fs';
+     * import { executionAsyncId, executionAsyncResource } from 'node:async_hooks';
+     *
+     * console.log(executionAsyncId(), executionAsyncResource());  // 1 {}
+     * open(new URL(import.meta.url), 'r', (err, fd) => {
+     *   console.log(executionAsyncId(), executionAsyncResource());  // 7 FSReqWrap
+     * });
+     * ```
+     *
+     * This can be used to implement continuation local storage without the
+     * use of a tracking `Map` to store the metadata:
+     *
+     * ```js
+     * import { createServer } from 'node:http';
+     * import {
+     *   executionAsyncId,
+     *   executionAsyncResource,
+     *   createHook,
+     * } from 'node:async_hooks';
+     * const sym = Symbol('state'); // Private symbol to avoid pollution
+     *
+     * createHook({
+     *   init(asyncId, type, triggerAsyncId, resource) {
+     *     const cr = executionAsyncResource();
+     *     if (cr) {
+     *       resource[sym] = cr[sym];
+     *     }
+     *   },
+     * }).enable();
+     *
+     * const server = createServer((req, res) => {
+     *   executionAsyncResource()[sym] = { state: req.url };
+     *   setTimeout(function() {
+     *     res.end(JSON.stringify(executionAsyncResource()[sym]));
+     *   }, 100);
+     * }).listen(3000);
+     * ```
+     * @since v13.9.0, v12.17.0
+     * @return The resource representing the current execution. Useful to store data within the resource.
+     */
+    function executionAsyncResource(): object;
+    /**
+     * ```js
+     * const server = net.createServer((conn) => {
+     *   // The resource that caused (or triggered) this callback to be called
+     *   // was that of the new connection. Thus the return value of triggerAsyncId()
+     *   // is the asyncId of "conn".
+     *   async_hooks.triggerAsyncId();
+     *
+     * }).listen(port, () => {
+     *   // Even though all callbacks passed to .listen() are wrapped in a nextTick()
+     *   // the callback itself exists because the call to the server's .listen()
+     *   // was made. So the return value would be the ID of the server.
+     *   async_hooks.triggerAsyncId();
+     * });
+     * ```
+     *
+     * Promise contexts may not get valid `triggerAsyncId`s by default. See
+     * the section on [promise execution tracking](https://nodejs.org/docs/latest-v24.x/api/async_hooks.html#promise-execution-tracking).
+     * @return The ID of the resource responsible for calling the callback that is currently being executed.
+     */
+    function triggerAsyncId(): number;
+    interface HookCallbacks {
+        /**
+         * Called when a class is constructed that has the possibility to emit an asynchronous event.
+         * @param asyncId A unique ID for the async resource
+         * @param type The type of the async resource
+         * @param triggerAsyncId The unique ID of the async resource in whose execution context this async resource was created
+         * @param resource Reference to the resource representing the async operation, needs to be released during destroy
+         */
+        init?(asyncId: number, type: string, triggerAsyncId: number, resource: object): void;
+        /**
+         * When an asynchronous operation is initiated or completes a callback is called to notify the user.
+         * The before callback is called just before said callback is executed.
+         * @param asyncId the unique identifier assigned to the resource about to execute the callback.
+         */
+        before?(asyncId: number): void;
+        /**
+         * Called immediately after the callback specified in `before` is completed.
+         *
+         * If an uncaught exception occurs during execution of the callback, then `after` will run after the `'uncaughtException'` event is emitted or a `domain`'s handler runs.
+         * @param asyncId the unique identifier assigned to the resource which has executed the callback.
+         */
+        after?(asyncId: number): void;
+        /**
+         * Called when a promise has resolve() called. This may not be in the same execution id
+         * as the promise itself.
+         * @param asyncId the unique id for the promise that was resolve()d.
+         */
+        promiseResolve?(asyncId: number): void;
+        /**
+         * Called after the resource corresponding to asyncId is destroyed
+         * @param asyncId a unique ID for the async resource
+         */
+        destroy?(asyncId: number): void;
+    }
+    interface AsyncHook {
+        /**
+         * Enable the callbacks for a given AsyncHook instance. If no callbacks are provided enabling is a noop.
+         */
+        enable(): this;
+        /**
+         * Disable the callbacks for a given AsyncHook instance from the global pool of AsyncHook callbacks to be executed. Once a hook has been disabled it will not be called again until enabled.
+         */
+        disable(): this;
+    }
+    /**
+     * Registers functions to be called for different lifetime events of each async
+     * operation.
+     *
+     * The callbacks `init()`/`before()`/`after()`/`destroy()` are called for the
+     * respective asynchronous event during a resource's lifetime.
+     *
+     * All callbacks are optional. For example, if only resource cleanup needs to
+     * be tracked, then only the `destroy` callback needs to be passed. The
+     * specifics of all functions that can be passed to `callbacks` is in the `Hook Callbacks` section.
+     *
+     * ```js
+     * import { createHook } from 'node:async_hooks';
+     *
+     * const asyncHook = createHook({
+     *   init(asyncId, type, triggerAsyncId, resource) { },
+     *   destroy(asyncId) { },
+     * });
+     * ```
+     *
+     * The callbacks will be inherited via the prototype chain:
+     *
+     * ```js
+     * class MyAsyncCallbacks {
+     *   init(asyncId, type, triggerAsyncId, resource) { }
+     *   destroy(asyncId) {}
+     * }
+     *
+     * class MyAddedCallbacks extends MyAsyncCallbacks {
+     *   before(asyncId) { }
+     *   after(asyncId) { }
+     * }
+     *
+     * const asyncHook = async_hooks.createHook(new MyAddedCallbacks());
+     * ```
+     *
+     * Because promises are asynchronous resources whose lifecycle is tracked
+     * via the async hooks mechanism, the `init()`, `before()`, `after()`, and`destroy()` callbacks _must not_ be async functions that return promises.
+     * @since v8.1.0
+     * @param callbacks The `Hook Callbacks` to register
+     * @return Instance used for disabling and enabling hooks
+     */
+    function createHook(callbacks: HookCallbacks): AsyncHook;
+    interface AsyncResourceOptions {
+        /**
+         * The ID of the execution context that created this async event.
+         * @default executionAsyncId()
+         */
+        triggerAsyncId?: number | undefined;
+        /**
+         * Disables automatic `emitDestroy` when the object is garbage collected.
+         * This usually does not need to be set (even if `emitDestroy` is called
+         * manually), unless the resource's `asyncId` is retrieved and the
+         * sensitive API's `emitDestroy` is called with it.
+         * @default false
+         */
+        requireManualDestroy?: boolean | undefined;
+    }
+    /**
+     * The class `AsyncResource` is designed to be extended by the embedder's async
+     * resources. Using this, users can easily trigger the lifetime events of their
+     * own resources.
+     *
+     * The `init` hook will trigger when an `AsyncResource` is instantiated.
+     *
+     * The following is an overview of the `AsyncResource` API.
+     *
+     * ```js
+     * import { AsyncResource, executionAsyncId } from 'node:async_hooks';
+     *
+     * // AsyncResource() is meant to be extended. Instantiating a
+     * // new AsyncResource() also triggers init. If triggerAsyncId is omitted then
+     * // async_hook.executionAsyncId() is used.
+     * const asyncResource = new AsyncResource(
+     *   type, { triggerAsyncId: executionAsyncId(), requireManualDestroy: false },
+     * );
+     *
+     * // Run a function in the execution context of the resource. This will
+     * // * establish the context of the resource
+     * // * trigger the AsyncHooks before callbacks
+     * // * call the provided function `fn` with the supplied arguments
+     * // * trigger the AsyncHooks after callbacks
+     * // * restore the original execution context
+     * asyncResource.runInAsyncScope(fn, thisArg, ...args);
+     *
+     * // Call AsyncHooks destroy callbacks.
+     * asyncResource.emitDestroy();
+     *
+     * // Return the unique ID assigned to the AsyncResource instance.
+     * asyncResource.asyncId();
+     *
+     * // Return the trigger ID for the AsyncResource instance.
+     * asyncResource.triggerAsyncId();
+     * ```
+     */
+    class AsyncResource {
+        /**
+         * AsyncResource() is meant to be extended. Instantiating a
+         * new AsyncResource() also triggers init. If triggerAsyncId is omitted then
+         * async_hook.executionAsyncId() is used.
+         * @param type The type of async event.
+         * @param triggerAsyncId The ID of the execution context that created
+         *   this async event (default: `executionAsyncId()`), or an
+         *   AsyncResourceOptions object (since v9.3.0)
+         */
+        constructor(type: string, triggerAsyncId?: number | AsyncResourceOptions);
+        /**
+         * Binds the given function to the current execution context.
+         * @since v14.8.0, v12.19.0
+         * @param fn The function to bind to the current execution context.
+         * @param type An optional name to associate with the underlying `AsyncResource`.
+         */
+        static bind any, ThisArg>(
+            fn: Func,
+            type?: string,
+            thisArg?: ThisArg,
+        ): Func;
+        /**
+         * Binds the given function to execute to this `AsyncResource`'s scope.
+         * @since v14.8.0, v12.19.0
+         * @param fn The function to bind to the current `AsyncResource`.
+         */
+        bind any>(fn: Func): Func;
+        /**
+         * Call the provided function with the provided arguments in the execution context
+         * of the async resource. This will establish the context, trigger the AsyncHooks
+         * before callbacks, call the function, trigger the AsyncHooks after callbacks, and
+         * then restore the original execution context.
+         * @since v9.6.0
+         * @param fn The function to call in the execution context of this async resource.
+         * @param thisArg The receiver to be used for the function call.
+         * @param args Optional arguments to pass to the function.
+         */
+        runInAsyncScope(
+            fn: (this: This, ...args: any[]) => Result,
+            thisArg?: This,
+            ...args: any[]
+        ): Result;
+        /**
+         * Call all `destroy` hooks. This should only ever be called once. An error will
+         * be thrown if it is called more than once. This **must** be manually called. If
+         * the resource is left to be collected by the GC then the `destroy` hooks will
+         * never be called.
+         * @return A reference to `asyncResource`.
+         */
+        emitDestroy(): this;
+        /**
+         * @return The unique `asyncId` assigned to the resource.
+         */
+        asyncId(): number;
+        /**
+         * @return The same `triggerAsyncId` that is passed to the `AsyncResource` constructor.
+         */
+        triggerAsyncId(): number;
+    }
+    interface AsyncLocalStorageOptions {
+        /**
+         * The default value to be used when no store is provided.
+         */
+        defaultValue?: any;
+        /**
+         * A name for the `AsyncLocalStorage` value.
+         */
+        name?: string | undefined;
+    }
+    /**
+     * This class creates stores that stay coherent through asynchronous operations.
+     *
+     * While you can create your own implementation on top of the `node:async_hooks` module, `AsyncLocalStorage` should be preferred as it is a performant and memory
+     * safe implementation that involves significant optimizations that are non-obvious
+     * to implement.
+     *
+     * The following example uses `AsyncLocalStorage` to build a simple logger
+     * that assigns IDs to incoming HTTP requests and includes them in messages
+     * logged within each request.
+     *
+     * ```js
+     * import http from 'node:http';
+     * import { AsyncLocalStorage } from 'node:async_hooks';
+     *
+     * const asyncLocalStorage = new AsyncLocalStorage();
+     *
+     * function logWithId(msg) {
+     *   const id = asyncLocalStorage.getStore();
+     *   console.log(`${id !== undefined ? id : '-'}:`, msg);
+     * }
+     *
+     * let idSeq = 0;
+     * http.createServer((req, res) => {
+     *   asyncLocalStorage.run(idSeq++, () => {
+     *     logWithId('start');
+     *     // Imagine any chain of async operations here
+     *     setImmediate(() => {
+     *       logWithId('finish');
+     *       res.end();
+     *     });
+     *   });
+     * }).listen(8080);
+     *
+     * http.get('http://localhost:8080');
+     * http.get('http://localhost:8080');
+     * // Prints:
+     * //   0: start
+     * //   0: finish
+     * //   1: start
+     * //   1: finish
+     * ```
+     *
+     * Each instance of `AsyncLocalStorage` maintains an independent storage context.
+     * Multiple instances can safely exist simultaneously without risk of interfering
+     * with each other's data.
+     * @since v13.10.0, v12.17.0
+     */
+    class AsyncLocalStorage {
+        /**
+         * Creates a new instance of `AsyncLocalStorage`. Store is only provided within a
+         * `run()` call or after an `enterWith()` call.
+         */
+        constructor(options?: AsyncLocalStorageOptions);
+        /**
+         * Binds the given function to the current execution context.
+         * @since v19.8.0
+         * @param fn The function to bind to the current execution context.
+         * @return A new function that calls `fn` within the captured execution context.
+         */
+        static bind any>(fn: Func): Func;
+        /**
+         * Captures the current execution context and returns a function that accepts a
+         * function as an argument. Whenever the returned function is called, it
+         * calls the function passed to it within the captured context.
+         *
+         * ```js
+         * const asyncLocalStorage = new AsyncLocalStorage();
+         * const runInAsyncScope = asyncLocalStorage.run(123, () => AsyncLocalStorage.snapshot());
+         * const result = asyncLocalStorage.run(321, () => runInAsyncScope(() => asyncLocalStorage.getStore()));
+         * console.log(result);  // returns 123
+         * ```
+         *
+         * AsyncLocalStorage.snapshot() can replace the use of AsyncResource for simple
+         * async context tracking purposes, for example:
+         *
+         * ```js
+         * class Foo {
+         *   #runInAsyncScope = AsyncLocalStorage.snapshot();
+         *
+         *   get() { return this.#runInAsyncScope(() => asyncLocalStorage.getStore()); }
+         * }
+         *
+         * const foo = asyncLocalStorage.run(123, () => new Foo());
+         * console.log(asyncLocalStorage.run(321, () => foo.get())); // returns 123
+         * ```
+         * @since v19.8.0
+         * @return A new function with the signature `(fn: (...args) : R, ...args) : R`.
+         */
+        static snapshot(): (fn: (...args: TArgs) => R, ...args: TArgs) => R;
+        /**
+         * Disables the instance of `AsyncLocalStorage`. All subsequent calls
+         * to `asyncLocalStorage.getStore()` will return `undefined` until `asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()` is called again.
+         *
+         * When calling `asyncLocalStorage.disable()`, all current contexts linked to the
+         * instance will be exited.
+         *
+         * Calling `asyncLocalStorage.disable()` is required before the `asyncLocalStorage` can be garbage collected. This does not apply to stores
+         * provided by the `asyncLocalStorage`, as those objects are garbage collected
+         * along with the corresponding async resources.
+         *
+         * Use this method when the `asyncLocalStorage` is not in use anymore
+         * in the current process.
+         * @since v13.10.0, v12.17.0
+         * @experimental
+         */
+        disable(): void;
+        /**
+         * Returns the current store.
+         * If called outside of an asynchronous context initialized by
+         * calling `asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()`, it
+         * returns `undefined`.
+         * @since v13.10.0, v12.17.0
+         */
+        getStore(): T | undefined;
+        /**
+         * The name of the `AsyncLocalStorage` instance if provided.
+         * @since v24.0.0
+         */
+        readonly name: string;
+        /**
+         * Runs a function synchronously within a context and returns its
+         * return value. The store is not accessible outside of the callback function.
+         * The store is accessible to any asynchronous operations created within the
+         * callback.
+         *
+         * The optional `args` are passed to the callback function.
+         *
+         * If the callback function throws an error, the error is thrown by `run()` too.
+         * The stacktrace is not impacted by this call and the context is exited.
+         *
+         * Example:
+         *
+         * ```js
+         * const store = { id: 2 };
+         * try {
+         *   asyncLocalStorage.run(store, () => {
+         *     asyncLocalStorage.getStore(); // Returns the store object
+         *     setTimeout(() => {
+         *       asyncLocalStorage.getStore(); // Returns the store object
+         *     }, 200);
+         *     throw new Error();
+         *   });
+         * } catch (e) {
+         *   asyncLocalStorage.getStore(); // Returns undefined
+         *   // The error will be caught here
+         * }
+         * ```
+         * @since v13.10.0, v12.17.0
+         */
+        run(store: T, callback: () => R): R;
+        run(store: T, callback: (...args: TArgs) => R, ...args: TArgs): R;
+        /**
+         * Runs a function synchronously outside of a context and returns its
+         * return value. The store is not accessible within the callback function or
+         * the asynchronous operations created within the callback. Any `getStore()` call done within the callback function will always return `undefined`.
+         *
+         * The optional `args` are passed to the callback function.
+         *
+         * If the callback function throws an error, the error is thrown by `exit()` too.
+         * The stacktrace is not impacted by this call and the context is re-entered.
+         *
+         * Example:
+         *
+         * ```js
+         * // Within a call to run
+         * try {
+         *   asyncLocalStorage.getStore(); // Returns the store object or value
+         *   asyncLocalStorage.exit(() => {
+         *     asyncLocalStorage.getStore(); // Returns undefined
+         *     throw new Error();
+         *   });
+         * } catch (e) {
+         *   asyncLocalStorage.getStore(); // Returns the same object or value
+         *   // The error will be caught here
+         * }
+         * ```
+         * @since v13.10.0, v12.17.0
+         * @experimental
+         */
+        exit(callback: (...args: TArgs) => R, ...args: TArgs): R;
+        /**
+         * Transitions into the context for the remainder of the current
+         * synchronous execution and then persists the store through any following
+         * asynchronous calls.
+         *
+         * Example:
+         *
+         * ```js
+         * const store = { id: 1 };
+         * // Replaces previous store with the given store object
+         * asyncLocalStorage.enterWith(store);
+         * asyncLocalStorage.getStore(); // Returns the store object
+         * someAsyncOperation(() => {
+         *   asyncLocalStorage.getStore(); // Returns the same object
+         * });
+         * ```
+         *
+         * This transition will continue for the _entire_ synchronous execution.
+         * This means that if, for example, the context is entered within an event
+         * handler subsequent event handlers will also run within that context unless
+         * specifically bound to another context with an `AsyncResource`. That is why `run()` should be preferred over `enterWith()` unless there are strong reasons
+         * to use the latter method.
+         *
+         * ```js
+         * const store = { id: 1 };
+         *
+         * emitter.on('my-event', () => {
+         *   asyncLocalStorage.enterWith(store);
+         * });
+         * emitter.on('my-event', () => {
+         *   asyncLocalStorage.getStore(); // Returns the same object
+         * });
+         *
+         * asyncLocalStorage.getStore(); // Returns undefined
+         * emitter.emit('my-event');
+         * asyncLocalStorage.getStore(); // Returns the same object
+         * ```
+         * @since v13.11.0, v12.17.0
+         * @experimental
+         */
+        enterWith(store: T): void;
+    }
+    /**
+     * @since v17.2.0, v16.14.0
+     * @return A map of provider types to the corresponding numeric id.
+     * This map contains all the event types that might be emitted by the `async_hooks.init()` event.
+     */
+    namespace asyncWrapProviders {
+        const NONE: number;
+        const DIRHANDLE: number;
+        const DNSCHANNEL: number;
+        const ELDHISTOGRAM: number;
+        const FILEHANDLE: number;
+        const FILEHANDLECLOSEREQ: number;
+        const FIXEDSIZEBLOBCOPY: number;
+        const FSEVENTWRAP: number;
+        const FSREQCALLBACK: number;
+        const FSREQPROMISE: number;
+        const GETADDRINFOREQWRAP: number;
+        const GETNAMEINFOREQWRAP: number;
+        const HEAPSNAPSHOT: number;
+        const HTTP2SESSION: number;
+        const HTTP2STREAM: number;
+        const HTTP2PING: number;
+        const HTTP2SETTINGS: number;
+        const HTTPINCOMINGMESSAGE: number;
+        const HTTPCLIENTREQUEST: number;
+        const JSSTREAM: number;
+        const JSUDPWRAP: number;
+        const MESSAGEPORT: number;
+        const PIPECONNECTWRAP: number;
+        const PIPESERVERWRAP: number;
+        const PIPEWRAP: number;
+        const PROCESSWRAP: number;
+        const PROMISE: number;
+        const QUERYWRAP: number;
+        const SHUTDOWNWRAP: number;
+        const SIGNALWRAP: number;
+        const STATWATCHER: number;
+        const STREAMPIPE: number;
+        const TCPCONNECTWRAP: number;
+        const TCPSERVERWRAP: number;
+        const TCPWRAP: number;
+        const TTYWRAP: number;
+        const UDPSENDWRAP: number;
+        const UDPWRAP: number;
+        const SIGINTWATCHDOG: number;
+        const WORKER: number;
+        const WORKERHEAPSNAPSHOT: number;
+        const WRITEWRAP: number;
+        const ZLIB: number;
+        const CHECKPRIMEREQUEST: number;
+        const PBKDF2REQUEST: number;
+        const KEYPAIRGENREQUEST: number;
+        const KEYGENREQUEST: number;
+        const KEYEXPORTREQUEST: number;
+        const CIPHERREQUEST: number;
+        const DERIVEBITSREQUEST: number;
+        const HASHREQUEST: number;
+        const RANDOMBYTESREQUEST: number;
+        const RANDOMPRIMEREQUEST: number;
+        const SCRYPTREQUEST: number;
+        const SIGNREQUEST: number;
+        const TLSWRAP: number;
+        const VERIFYREQUEST: number;
+    }
+}
+declare module "node:async_hooks" {
+    export * from "async_hooks";
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/buffer.buffer.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/buffer.buffer.d.ts
new file mode 100644
index 00000000..8823deeb
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/buffer.buffer.d.ts
@@ -0,0 +1,472 @@
+declare module "buffer" {
+    type ImplicitArrayBuffer> = T extends
+        { valueOf(): infer V extends ArrayBufferLike } ? V : T;
+    global {
+        interface BufferConstructor {
+            // see buffer.d.ts for implementation shared with all TypeScript versions
+
+            /**
+             * Allocates a new buffer containing the given {str}.
+             *
+             * @param str String to store in buffer.
+             * @param encoding encoding to use, optional.  Default is 'utf8'
+             * @deprecated since v10.0.0 - Use `Buffer.from(string[, encoding])` instead.
+             */
+            new(str: string, encoding?: BufferEncoding): Buffer;
+            /**
+             * Allocates a new buffer of {size} octets.
+             *
+             * @param size count of octets to allocate.
+             * @deprecated since v10.0.0 - Use `Buffer.alloc()` instead (also see `Buffer.allocUnsafe()`).
+             */
+            new(size: number): Buffer;
+            /**
+             * Allocates a new buffer containing the given {array} of octets.
+             *
+             * @param array The octets to store.
+             * @deprecated since v10.0.0 - Use `Buffer.from(array)` instead.
+             */
+            new(array: ArrayLike): Buffer;
+            /**
+             * Produces a Buffer backed by the same allocated memory as
+             * the given {ArrayBuffer}/{SharedArrayBuffer}.
+             *
+             * @param arrayBuffer The ArrayBuffer with which to share memory.
+             * @deprecated since v10.0.0 - Use `Buffer.from(arrayBuffer[, byteOffset[, length]])` instead.
+             */
+            new(arrayBuffer: TArrayBuffer): Buffer;
+            /**
+             * Allocates a new `Buffer` using an `array` of bytes in the range `0` – `255`.
+             * Array entries outside that range will be truncated to fit into it.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * // Creates a new Buffer containing the UTF-8 bytes of the string 'buffer'.
+             * const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);
+             * ```
+             *
+             * If `array` is an `Array`-like object (that is, one with a `length` property of
+             * type `number`), it is treated as if it is an array, unless it is a `Buffer` or
+             * a `Uint8Array`. This means all other `TypedArray` variants get treated as an
+             * `Array`. To create a `Buffer` from the bytes backing a `TypedArray`, use
+             * `Buffer.copyBytesFrom()`.
+             *
+             * A `TypeError` will be thrown if `array` is not an `Array` or another type
+             * appropriate for `Buffer.from()` variants.
+             *
+             * `Buffer.from(array)` and `Buffer.from(string)` may also use the internal
+             * `Buffer` pool like `Buffer.allocUnsafe()` does.
+             * @since v5.10.0
+             */
+            from(array: WithImplicitCoercion>): Buffer;
+            /**
+             * This creates a view of the `ArrayBuffer` without copying the underlying
+             * memory. For example, when passed a reference to the `.buffer` property of a
+             * `TypedArray` instance, the newly created `Buffer` will share the same
+             * allocated memory as the `TypedArray`'s underlying `ArrayBuffer`.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const arr = new Uint16Array(2);
+             *
+             * arr[0] = 5000;
+             * arr[1] = 4000;
+             *
+             * // Shares memory with `arr`.
+             * const buf = Buffer.from(arr.buffer);
+             *
+             * console.log(buf);
+             * // Prints: 
+             *
+             * // Changing the original Uint16Array changes the Buffer also.
+             * arr[1] = 6000;
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             *
+             * The optional `byteOffset` and `length` arguments specify a memory range within
+             * the `arrayBuffer` that will be shared by the `Buffer`.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const ab = new ArrayBuffer(10);
+             * const buf = Buffer.from(ab, 0, 2);
+             *
+             * console.log(buf.length);
+             * // Prints: 2
+             * ```
+             *
+             * A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer` or a
+             * `SharedArrayBuffer` or another type appropriate for `Buffer.from()`
+             * variants.
+             *
+             * It is important to remember that a backing `ArrayBuffer` can cover a range
+             * of memory that extends beyond the bounds of a `TypedArray` view. A new
+             * `Buffer` created using the `buffer` property of a `TypedArray` may extend
+             * beyond the range of the `TypedArray`:
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const arrA = Uint8Array.from([0x63, 0x64, 0x65, 0x66]); // 4 elements
+             * const arrB = new Uint8Array(arrA.buffer, 1, 2); // 2 elements
+             * console.log(arrA.buffer === arrB.buffer); // true
+             *
+             * const buf = Buffer.from(arrB.buffer);
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             * @since v5.10.0
+             * @param arrayBuffer An `ArrayBuffer`, `SharedArrayBuffer`, for example the
+             * `.buffer` property of a `TypedArray`.
+             * @param byteOffset Index of first byte to expose. **Default:** `0`.
+             * @param length Number of bytes to expose. **Default:**
+             * `arrayBuffer.byteLength - byteOffset`.
+             */
+            from>(
+                arrayBuffer: TArrayBuffer,
+                byteOffset?: number,
+                length?: number,
+            ): Buffer>;
+            /**
+             * Creates a new `Buffer` containing `string`. The `encoding` parameter identifies
+             * the character encoding to be used when converting `string` into bytes.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf1 = Buffer.from('this is a tést');
+             * const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex');
+             *
+             * console.log(buf1.toString());
+             * // Prints: this is a tést
+             * console.log(buf2.toString());
+             * // Prints: this is a tést
+             * console.log(buf1.toString('latin1'));
+             * // Prints: this is a tést
+             * ```
+             *
+             * A `TypeError` will be thrown if `string` is not a string or another type
+             * appropriate for `Buffer.from()` variants.
+             *
+             * `Buffer.from(string)` may also use the internal `Buffer` pool like
+             * `Buffer.allocUnsafe()` does.
+             * @since v5.10.0
+             * @param string A string to encode.
+             * @param encoding The encoding of `string`. **Default:** `'utf8'`.
+             */
+            from(string: WithImplicitCoercion, encoding?: BufferEncoding): Buffer;
+            from(arrayOrString: WithImplicitCoercion | string>): Buffer;
+            /**
+             * Creates a new Buffer using the passed {data}
+             * @param values to create a new Buffer
+             */
+            of(...items: number[]): Buffer;
+            /**
+             * Returns a new `Buffer` which is the result of concatenating all the `Buffer` instances in the `list` together.
+             *
+             * If the list has no items, or if the `totalLength` is 0, then a new zero-length `Buffer` is returned.
+             *
+             * If `totalLength` is not provided, it is calculated from the `Buffer` instances
+             * in `list` by adding their lengths.
+             *
+             * If `totalLength` is provided, it is coerced to an unsigned integer. If the
+             * combined length of the `Buffer`s in `list` exceeds `totalLength`, the result is
+             * truncated to `totalLength`. If the combined length of the `Buffer`s in `list` is
+             * less than `totalLength`, the remaining space is filled with zeros.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * // Create a single `Buffer` from a list of three `Buffer` instances.
+             *
+             * const buf1 = Buffer.alloc(10);
+             * const buf2 = Buffer.alloc(14);
+             * const buf3 = Buffer.alloc(18);
+             * const totalLength = buf1.length + buf2.length + buf3.length;
+             *
+             * console.log(totalLength);
+             * // Prints: 42
+             *
+             * const bufA = Buffer.concat([buf1, buf2, buf3], totalLength);
+             *
+             * console.log(bufA);
+             * // Prints: 
+             * console.log(bufA.length);
+             * // Prints: 42
+             * ```
+             *
+             * `Buffer.concat()` may also use the internal `Buffer` pool like `Buffer.allocUnsafe()` does.
+             * @since v0.7.11
+             * @param list List of `Buffer` or {@link Uint8Array} instances to concatenate.
+             * @param totalLength Total length of the `Buffer` instances in `list` when concatenated.
+             */
+            concat(list: readonly Uint8Array[], totalLength?: number): Buffer;
+            /**
+             * Copies the underlying memory of `view` into a new `Buffer`.
+             *
+             * ```js
+             * const u16 = new Uint16Array([0, 0xffff]);
+             * const buf = Buffer.copyBytesFrom(u16, 1, 1);
+             * u16[1] = 0;
+             * console.log(buf.length); // 2
+             * console.log(buf[0]); // 255
+             * console.log(buf[1]); // 255
+             * ```
+             * @since v19.8.0
+             * @param view The {TypedArray} to copy.
+             * @param [offset=0] The starting offset within `view`.
+             * @param [length=view.length - offset] The number of elements from `view` to copy.
+             */
+            copyBytesFrom(view: NodeJS.TypedArray, offset?: number, length?: number): Buffer;
+            /**
+             * Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the`Buffer` will be zero-filled.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.alloc(5);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             *
+             * If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown.
+             *
+             * If `fill` is specified, the allocated `Buffer` will be initialized by calling `buf.fill(fill)`.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.alloc(5, 'a');
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             *
+             * If both `fill` and `encoding` are specified, the allocated `Buffer` will be
+             * initialized by calling `buf.fill(fill, encoding)`.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64');
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             *
+             * Calling `Buffer.alloc()` can be measurably slower than the alternative `Buffer.allocUnsafe()` but ensures that the newly created `Buffer` instance
+             * contents will never contain sensitive data from previous allocations, including
+             * data that might not have been allocated for `Buffer`s.
+             *
+             * A `TypeError` will be thrown if `size` is not a number.
+             * @since v5.10.0
+             * @param size The desired length of the new `Buffer`.
+             * @param [fill=0] A value to pre-fill the new `Buffer` with.
+             * @param [encoding='utf8'] If `fill` is a string, this is its encoding.
+             */
+            alloc(size: number, fill?: string | Uint8Array | number, encoding?: BufferEncoding): Buffer;
+            /**
+             * Allocates a new `Buffer` of `size` bytes. If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown.
+             *
+             * The underlying memory for `Buffer` instances created in this way is _not_
+             * _initialized_. The contents of the newly created `Buffer` are unknown and _may contain sensitive data_. Use `Buffer.alloc()` instead to initialize`Buffer` instances with zeroes.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(10);
+             *
+             * console.log(buf);
+             * // Prints (contents may vary): 
+             *
+             * buf.fill(0);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             *
+             * A `TypeError` will be thrown if `size` is not a number.
+             *
+             * The `Buffer` module pre-allocates an internal `Buffer` instance of
+             * size `Buffer.poolSize` that is used as a pool for the fast allocation of new `Buffer` instances created using `Buffer.allocUnsafe()`, `Buffer.from(array)`,
+             * and `Buffer.concat()` only when `size` is less than `Buffer.poolSize >>> 1` (floor of `Buffer.poolSize` divided by two).
+             *
+             * Use of this pre-allocated internal memory pool is a key difference between
+             * calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`.
+             * Specifically, `Buffer.alloc(size, fill)` will _never_ use the internal `Buffer`pool, while `Buffer.allocUnsafe(size).fill(fill)`_will_ use the internal`Buffer` pool if `size` is less
+             * than or equal to half `Buffer.poolSize`. The
+             * difference is subtle but can be important when an application requires the
+             * additional performance that `Buffer.allocUnsafe()` provides.
+             * @since v5.10.0
+             * @param size The desired length of the new `Buffer`.
+             */
+            allocUnsafe(size: number): Buffer;
+            /**
+             * Allocates a new `Buffer` of `size` bytes. If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown. A zero-length `Buffer` is created if
+             * `size` is 0.
+             *
+             * The underlying memory for `Buffer` instances created in this way is _not_
+             * _initialized_. The contents of the newly created `Buffer` are unknown and _may contain sensitive data_. Use `buf.fill(0)` to initialize
+             * such `Buffer` instances with zeroes.
+             *
+             * When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances,
+             * allocations under 4 KiB are sliced from a single pre-allocated `Buffer`. This
+             * allows applications to avoid the garbage collection overhead of creating many
+             * individually allocated `Buffer` instances. This approach improves both
+             * performance and memory usage by eliminating the need to track and clean up as
+             * many individual `ArrayBuffer` objects.
+             *
+             * However, in the case where a developer may need to retain a small chunk of
+             * memory from a pool for an indeterminate amount of time, it may be appropriate
+             * to create an un-pooled `Buffer` instance using `Buffer.allocUnsafeSlow()` and
+             * then copying out the relevant bits.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * // Need to keep around a few small chunks of memory.
+             * const store = [];
+             *
+             * socket.on('readable', () => {
+             *   let data;
+             *   while (null !== (data = readable.read())) {
+             *     // Allocate for retained data.
+             *     const sb = Buffer.allocUnsafeSlow(10);
+             *
+             *     // Copy the data into the new allocation.
+             *     data.copy(sb, 0, 0, 10);
+             *
+             *     store.push(sb);
+             *   }
+             * });
+             * ```
+             *
+             * A `TypeError` will be thrown if `size` is not a number.
+             * @since v5.12.0
+             * @param size The desired length of the new `Buffer`.
+             */
+            allocUnsafeSlow(size: number): Buffer;
+        }
+        interface Buffer extends Uint8Array {
+            // see buffer.d.ts for implementation shared with all TypeScript versions
+
+            /**
+             * Returns a new `Buffer` that references the same memory as the original, but
+             * offset and cropped by the `start` and `end` indices.
+             *
+             * This method is not compatible with the `Uint8Array.prototype.slice()`,
+             * which is a superclass of `Buffer`. To copy the slice, use`Uint8Array.prototype.slice()`.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from('buffer');
+             *
+             * const copiedBuf = Uint8Array.prototype.slice.call(buf);
+             * copiedBuf[0]++;
+             * console.log(copiedBuf.toString());
+             * // Prints: cuffer
+             *
+             * console.log(buf.toString());
+             * // Prints: buffer
+             *
+             * // With buf.slice(), the original buffer is modified.
+             * const notReallyCopiedBuf = buf.slice();
+             * notReallyCopiedBuf[0]++;
+             * console.log(notReallyCopiedBuf.toString());
+             * // Prints: cuffer
+             * console.log(buf.toString());
+             * // Also prints: cuffer (!)
+             * ```
+             * @since v0.3.0
+             * @deprecated Use `subarray` instead.
+             * @param [start=0] Where the new `Buffer` will start.
+             * @param [end=buf.length] Where the new `Buffer` will end (not inclusive).
+             */
+            slice(start?: number, end?: number): Buffer;
+            /**
+             * Returns a new `Buffer` that references the same memory as the original, but
+             * offset and cropped by the `start` and `end` indices.
+             *
+             * Specifying `end` greater than `buf.length` will return the same result as
+             * that of `end` equal to `buf.length`.
+             *
+             * This method is inherited from [`TypedArray.prototype.subarray()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray).
+             *
+             * Modifying the new `Buffer` slice will modify the memory in the original `Buffer`because the allocated memory of the two objects overlap.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * // Create a `Buffer` with the ASCII alphabet, take a slice, and modify one byte
+             * // from the original `Buffer`.
+             *
+             * const buf1 = Buffer.allocUnsafe(26);
+             *
+             * for (let i = 0; i < 26; i++) {
+             *   // 97 is the decimal ASCII value for 'a'.
+             *   buf1[i] = i + 97;
+             * }
+             *
+             * const buf2 = buf1.subarray(0, 3);
+             *
+             * console.log(buf2.toString('ascii', 0, buf2.length));
+             * // Prints: abc
+             *
+             * buf1[0] = 33;
+             *
+             * console.log(buf2.toString('ascii', 0, buf2.length));
+             * // Prints: !bc
+             * ```
+             *
+             * Specifying negative indexes causes the slice to be generated relative to the
+             * end of `buf` rather than the beginning.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from('buffer');
+             *
+             * console.log(buf.subarray(-6, -1).toString());
+             * // Prints: buffe
+             * // (Equivalent to buf.subarray(0, 5).)
+             *
+             * console.log(buf.subarray(-6, -2).toString());
+             * // Prints: buff
+             * // (Equivalent to buf.subarray(0, 4).)
+             *
+             * console.log(buf.subarray(-5, -2).toString());
+             * // Prints: uff
+             * // (Equivalent to buf.subarray(1, 4).)
+             * ```
+             * @since v3.0.0
+             * @param [start=0] Where the new `Buffer` will start.
+             * @param [end=buf.length] Where the new `Buffer` will end (not inclusive).
+             */
+            subarray(start?: number, end?: number): Buffer;
+        }
+        // TODO: remove globals in future version
+        /**
+         * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports
+         * TypeScript versions earlier than 5.7.
+         */
+        type NonSharedBuffer = Buffer;
+        /**
+         * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports
+         * TypeScript versions earlier than 5.7.
+         */
+        type AllowSharedBuffer = Buffer;
+    }
+    /** @deprecated Use `Buffer.allocUnsafeSlow()` instead. */
+    var SlowBuffer: {
+        /** @deprecated Use `Buffer.allocUnsafeSlow()` instead. */
+        new(size: number): Buffer;
+        prototype: Buffer;
+    };
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/buffer.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/buffer.d.ts
new file mode 100644
index 00000000..9a62ccf9
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/buffer.d.ts
@@ -0,0 +1,1934 @@
+// If lib.dom.d.ts or lib.webworker.d.ts is loaded, then use the global types.
+// Otherwise, use the types from node.
+type _Blob = typeof globalThis extends { onmessage: any; Blob: any } ? {} : import("buffer").Blob;
+type _File = typeof globalThis extends { onmessage: any; File: any } ? {} : import("buffer").File;
+
+/**
+ * `Buffer` objects are used to represent a fixed-length sequence of bytes. Many
+ * Node.js APIs support `Buffer`s.
+ *
+ * The `Buffer` class is a subclass of JavaScript's [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) class and
+ * extends it with methods that cover additional use cases. Node.js APIs accept
+ * plain [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) s wherever `Buffer`s are supported as well.
+ *
+ * While the `Buffer` class is available within the global scope, it is still
+ * recommended to explicitly reference it via an import or require statement.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * // Creates a zero-filled Buffer of length 10.
+ * const buf1 = Buffer.alloc(10);
+ *
+ * // Creates a Buffer of length 10,
+ * // filled with bytes which all have the value `1`.
+ * const buf2 = Buffer.alloc(10, 1);
+ *
+ * // Creates an uninitialized buffer of length 10.
+ * // This is faster than calling Buffer.alloc() but the returned
+ * // Buffer instance might contain old data that needs to be
+ * // overwritten using fill(), write(), or other functions that fill the Buffer's
+ * // contents.
+ * const buf3 = Buffer.allocUnsafe(10);
+ *
+ * // Creates a Buffer containing the bytes [1, 2, 3].
+ * const buf4 = Buffer.from([1, 2, 3]);
+ *
+ * // Creates a Buffer containing the bytes [1, 1, 1, 1] – the entries
+ * // are all truncated using `(value & 255)` to fit into the range 0–255.
+ * const buf5 = Buffer.from([257, 257.5, -255, '1']);
+ *
+ * // Creates a Buffer containing the UTF-8-encoded bytes for the string 'tést':
+ * // [0x74, 0xc3, 0xa9, 0x73, 0x74] (in hexadecimal notation)
+ * // [116, 195, 169, 115, 116] (in decimal notation)
+ * const buf6 = Buffer.from('tést');
+ *
+ * // Creates a Buffer containing the Latin-1 bytes [0x74, 0xe9, 0x73, 0x74].
+ * const buf7 = Buffer.from('tést', 'latin1');
+ * ```
+ * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/buffer.js)
+ */
+declare module "buffer" {
+    import { BinaryLike } from "node:crypto";
+    import { ReadableStream as WebReadableStream } from "node:stream/web";
+    /**
+     * This function returns `true` if `input` contains only valid UTF-8-encoded data,
+     * including the case in which `input` is empty.
+     *
+     * Throws if the `input` is a detached array buffer.
+     * @since v19.4.0, v18.14.0
+     * @param input The input to validate.
+     */
+    export function isUtf8(input: ArrayBuffer | NodeJS.TypedArray): boolean;
+    /**
+     * This function returns `true` if `input` contains only valid ASCII-encoded data,
+     * including the case in which `input` is empty.
+     *
+     * Throws if the `input` is a detached array buffer.
+     * @since v19.6.0, v18.15.0
+     * @param input The input to validate.
+     */
+    export function isAscii(input: ArrayBuffer | NodeJS.TypedArray): boolean;
+    export let INSPECT_MAX_BYTES: number;
+    export const kMaxLength: number;
+    export const kStringMaxLength: number;
+    export const constants: {
+        MAX_LENGTH: number;
+        MAX_STRING_LENGTH: number;
+    };
+    export type TranscodeEncoding =
+        | "ascii"
+        | "utf8"
+        | "utf-8"
+        | "utf16le"
+        | "utf-16le"
+        | "ucs2"
+        | "ucs-2"
+        | "latin1"
+        | "binary";
+    /**
+     * Re-encodes the given `Buffer` or `Uint8Array` instance from one character
+     * encoding to another. Returns a new `Buffer` instance.
+     *
+     * Throws if the `fromEnc` or `toEnc` specify invalid character encodings or if
+     * conversion from `fromEnc` to `toEnc` is not permitted.
+     *
+     * Encodings supported by `buffer.transcode()` are: `'ascii'`, `'utf8'`, `'utf16le'`, `'ucs2'`, `'latin1'`, and `'binary'`.
+     *
+     * The transcoding process will use substitution characters if a given byte
+     * sequence cannot be adequately represented in the target encoding. For instance:
+     *
+     * ```js
+     * import { Buffer, transcode } from 'node:buffer';
+     *
+     * const newBuf = transcode(Buffer.from('€'), 'utf8', 'ascii');
+     * console.log(newBuf.toString('ascii'));
+     * // Prints: '?'
+     * ```
+     *
+     * Because the Euro (`€`) sign is not representable in US-ASCII, it is replaced
+     * with `?` in the transcoded `Buffer`.
+     * @since v7.1.0
+     * @param source A `Buffer` or `Uint8Array` instance.
+     * @param fromEnc The current encoding.
+     * @param toEnc To target encoding.
+     */
+    export function transcode(
+        source: Uint8Array,
+        fromEnc: TranscodeEncoding,
+        toEnc: TranscodeEncoding,
+    ): NonSharedBuffer;
+    /**
+     * Resolves a `'blob:nodedata:...'` an associated `Blob` object registered using
+     * a prior call to `URL.createObjectURL()`.
+     * @since v16.7.0
+     * @param id A `'blob:nodedata:...` URL string returned by a prior call to `URL.createObjectURL()`.
+     */
+    export function resolveObjectURL(id: string): Blob | undefined;
+    export { type AllowSharedBuffer, Buffer, type NonSharedBuffer };
+    /**
+     * @experimental
+     */
+    export interface BlobOptions {
+        /**
+         * One of either `'transparent'` or `'native'`. When set to `'native'`, line endings in string source parts
+         * will be converted to the platform native line-ending as specified by `import { EOL } from 'node:os'`.
+         */
+        endings?: "transparent" | "native";
+        /**
+         * The Blob content-type. The intent is for `type` to convey
+         * the MIME media type of the data, however no validation of the type format
+         * is performed.
+         */
+        type?: string | undefined;
+    }
+    /**
+     * A `Blob` encapsulates immutable, raw data that can be safely shared across
+     * multiple worker threads.
+     * @since v15.7.0, v14.18.0
+     */
+    export class Blob {
+        /**
+         * The total size of the `Blob` in bytes.
+         * @since v15.7.0, v14.18.0
+         */
+        readonly size: number;
+        /**
+         * The content-type of the `Blob`.
+         * @since v15.7.0, v14.18.0
+         */
+        readonly type: string;
+        /**
+         * Creates a new `Blob` object containing a concatenation of the given sources.
+         *
+         * {ArrayBuffer}, {TypedArray}, {DataView}, and {Buffer} sources are copied into
+         * the 'Blob' and can therefore be safely modified after the 'Blob' is created.
+         *
+         * String sources are also copied into the `Blob`.
+         */
+        constructor(sources: Array, options?: BlobOptions);
+        /**
+         * Returns a promise that fulfills with an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) containing a copy of
+         * the `Blob` data.
+         * @since v15.7.0, v14.18.0
+         */
+        arrayBuffer(): Promise;
+        /**
+         * The `blob.bytes()` method returns the byte of the `Blob` object as a `Promise`.
+         *
+         * ```js
+         * const blob = new Blob(['hello']);
+         * blob.bytes().then((bytes) => {
+         *   console.log(bytes); // Outputs: Uint8Array(5) [ 104, 101, 108, 108, 111 ]
+         * });
+         * ```
+         */
+        bytes(): Promise;
+        /**
+         * Creates and returns a new `Blob` containing a subset of this `Blob` objects
+         * data. The original `Blob` is not altered.
+         * @since v15.7.0, v14.18.0
+         * @param start The starting index.
+         * @param end The ending index.
+         * @param type The content-type for the new `Blob`
+         */
+        slice(start?: number, end?: number, type?: string): Blob;
+        /**
+         * Returns a promise that fulfills with the contents of the `Blob` decoded as a
+         * UTF-8 string.
+         * @since v15.7.0, v14.18.0
+         */
+        text(): Promise;
+        /**
+         * Returns a new `ReadableStream` that allows the content of the `Blob` to be read.
+         * @since v16.7.0
+         */
+        stream(): WebReadableStream;
+    }
+    export interface FileOptions {
+        /**
+         * One of either `'transparent'` or `'native'`. When set to `'native'`, line endings in string source parts will be
+         * converted to the platform native line-ending as specified by `import { EOL } from 'node:os'`.
+         */
+        endings?: "native" | "transparent";
+        /** The File content-type. */
+        type?: string;
+        /** The last modified date of the file. `Default`: Date.now(). */
+        lastModified?: number;
+    }
+    /**
+     * A [`File`](https://developer.mozilla.org/en-US/docs/Web/API/File) provides information about files.
+     * @since v19.2.0, v18.13.0
+     */
+    export class File extends Blob {
+        constructor(sources: Array, fileName: string, options?: FileOptions);
+        /**
+         * The name of the `File`.
+         * @since v19.2.0, v18.13.0
+         */
+        readonly name: string;
+        /**
+         * The last modified date of the `File`.
+         * @since v19.2.0, v18.13.0
+         */
+        readonly lastModified: number;
+    }
+    export import atob = globalThis.atob;
+    export import btoa = globalThis.btoa;
+    export type WithImplicitCoercion =
+        | T
+        | { valueOf(): T }
+        | (T extends string ? { [Symbol.toPrimitive](hint: "string"): T } : never);
+    global {
+        namespace NodeJS {
+            export { BufferEncoding };
+        }
+        // Buffer class
+        type BufferEncoding =
+            | "ascii"
+            | "utf8"
+            | "utf-8"
+            | "utf16le"
+            | "utf-16le"
+            | "ucs2"
+            | "ucs-2"
+            | "base64"
+            | "base64url"
+            | "latin1"
+            | "binary"
+            | "hex";
+        /**
+         * Raw data is stored in instances of the Buffer class.
+         * A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap.  A Buffer cannot be resized.
+         * Valid string encodings: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'base64url'|'binary'(deprecated)|'hex'
+         */
+        interface BufferConstructor {
+            // see buffer.buffer.d.ts for implementation specific to TypeScript 5.7 and later
+            // see ts5.6/buffer.buffer.d.ts for implementation specific to TypeScript 5.6 and earlier
+
+            /**
+             * Returns `true` if `obj` is a `Buffer`, `false` otherwise.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * Buffer.isBuffer(Buffer.alloc(10)); // true
+             * Buffer.isBuffer(Buffer.from('foo')); // true
+             * Buffer.isBuffer('a string'); // false
+             * Buffer.isBuffer([]); // false
+             * Buffer.isBuffer(new Uint8Array(1024)); // false
+             * ```
+             * @since v0.1.101
+             */
+            isBuffer(obj: any): obj is Buffer;
+            /**
+             * Returns `true` if `encoding` is the name of a supported character encoding,
+             * or `false` otherwise.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * console.log(Buffer.isEncoding('utf8'));
+             * // Prints: true
+             *
+             * console.log(Buffer.isEncoding('hex'));
+             * // Prints: true
+             *
+             * console.log(Buffer.isEncoding('utf/8'));
+             * // Prints: false
+             *
+             * console.log(Buffer.isEncoding(''));
+             * // Prints: false
+             * ```
+             * @since v0.9.1
+             * @param encoding A character encoding name to check.
+             */
+            isEncoding(encoding: string): encoding is BufferEncoding;
+            /**
+             * Returns the byte length of a string when encoded using `encoding`.
+             * This is not the same as [`String.prototype.length`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length), which does not account
+             * for the encoding that is used to convert the string into bytes.
+             *
+             * For `'base64'`, `'base64url'`, and `'hex'`, this function assumes valid input.
+             * For strings that contain non-base64/hex-encoded data (e.g. whitespace), the
+             * return value might be greater than the length of a `Buffer` created from the
+             * string.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const str = '\u00bd + \u00bc = \u00be';
+             *
+             * console.log(`${str}: ${str.length} characters, ` +
+             *             `${Buffer.byteLength(str, 'utf8')} bytes`);
+             * // Prints: ½ + ¼ = ¾: 9 characters, 12 bytes
+             * ```
+             *
+             * When `string` is a
+             * `Buffer`/[`DataView`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView)/[`TypedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/-
+             * Reference/Global_Objects/TypedArray)/[`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer)/[`SharedArrayBuffer`](https://develop-
+             * er.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer), the byte length as reported by `.byteLength`is returned.
+             * @since v0.1.90
+             * @param string A value to calculate the length of.
+             * @param [encoding='utf8'] If `string` is a string, this is its encoding.
+             * @return The number of bytes contained within `string`.
+             */
+            byteLength(
+                string: string | NodeJS.ArrayBufferView | ArrayBufferLike,
+                encoding?: BufferEncoding,
+            ): number;
+            /**
+             * Compares `buf1` to `buf2`, typically for the purpose of sorting arrays of `Buffer` instances. This is equivalent to calling `buf1.compare(buf2)`.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf1 = Buffer.from('1234');
+             * const buf2 = Buffer.from('0123');
+             * const arr = [buf1, buf2];
+             *
+             * console.log(arr.sort(Buffer.compare));
+             * // Prints: [ ,  ]
+             * // (This result is equal to: [buf2, buf1].)
+             * ```
+             * @since v0.11.13
+             * @return Either `-1`, `0`, or `1`, depending on the result of the comparison. See `compare` for details.
+             */
+            compare(buf1: Uint8Array, buf2: Uint8Array): -1 | 0 | 1;
+            /**
+             * This is the size (in bytes) of pre-allocated internal `Buffer` instances used
+             * for pooling. This value may be modified.
+             * @since v0.11.3
+             */
+            poolSize: number;
+        }
+        interface Buffer {
+            // see buffer.buffer.d.ts for implementation specific to TypeScript 5.7 and later
+            // see ts5.6/buffer.buffer.d.ts for implementation specific to TypeScript 5.6 and earlier
+
+            /**
+             * Writes `string` to `buf` at `offset` according to the character encoding in`encoding`. The `length` parameter is the number of bytes to write. If `buf` did
+             * not contain enough space to fit the entire string, only part of `string` will be
+             * written. However, partially encoded characters will not be written.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.alloc(256);
+             *
+             * const len = buf.write('\u00bd + \u00bc = \u00be', 0);
+             *
+             * console.log(`${len} bytes: ${buf.toString('utf8', 0, len)}`);
+             * // Prints: 12 bytes: ½ + ¼ = ¾
+             *
+             * const buffer = Buffer.alloc(10);
+             *
+             * const length = buffer.write('abcd', 8);
+             *
+             * console.log(`${length} bytes: ${buffer.toString('utf8', 8, 10)}`);
+             * // Prints: 2 bytes : ab
+             * ```
+             * @since v0.1.90
+             * @param string String to write to `buf`.
+             * @param [offset=0] Number of bytes to skip before starting to write `string`.
+             * @param [length=buf.length - offset] Maximum number of bytes to write (written bytes will not exceed `buf.length - offset`).
+             * @param [encoding='utf8'] The character encoding of `string`.
+             * @return Number of bytes written.
+             */
+            write(string: string, encoding?: BufferEncoding): number;
+            write(string: string, offset: number, encoding?: BufferEncoding): number;
+            write(string: string, offset: number, length: number, encoding?: BufferEncoding): number;
+            /**
+             * Decodes `buf` to a string according to the specified character encoding in`encoding`. `start` and `end` may be passed to decode only a subset of `buf`.
+             *
+             * If `encoding` is `'utf8'` and a byte sequence in the input is not valid UTF-8,
+             * then each invalid byte is replaced with the replacement character `U+FFFD`.
+             *
+             * The maximum length of a string instance (in UTF-16 code units) is available
+             * as {@link constants.MAX_STRING_LENGTH}.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf1 = Buffer.allocUnsafe(26);
+             *
+             * for (let i = 0; i < 26; i++) {
+             *   // 97 is the decimal ASCII value for 'a'.
+             *   buf1[i] = i + 97;
+             * }
+             *
+             * console.log(buf1.toString('utf8'));
+             * // Prints: abcdefghijklmnopqrstuvwxyz
+             * console.log(buf1.toString('utf8', 0, 5));
+             * // Prints: abcde
+             *
+             * const buf2 = Buffer.from('tést');
+             *
+             * console.log(buf2.toString('hex'));
+             * // Prints: 74c3a97374
+             * console.log(buf2.toString('utf8', 0, 3));
+             * // Prints: té
+             * console.log(buf2.toString(undefined, 0, 3));
+             * // Prints: té
+             * ```
+             * @since v0.1.90
+             * @param [encoding='utf8'] The character encoding to use.
+             * @param [start=0] The byte offset to start decoding at.
+             * @param [end=buf.length] The byte offset to stop decoding at (not inclusive).
+             */
+            toString(encoding?: BufferEncoding, start?: number, end?: number): string;
+            /**
+             * Returns a JSON representation of `buf`. [`JSON.stringify()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) implicitly calls
+             * this function when stringifying a `Buffer` instance.
+             *
+             * `Buffer.from()` accepts objects in the format returned from this method.
+             * In particular, `Buffer.from(buf.toJSON())` works like `Buffer.from(buf)`.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]);
+             * const json = JSON.stringify(buf);
+             *
+             * console.log(json);
+             * // Prints: {"type":"Buffer","data":[1,2,3,4,5]}
+             *
+             * const copy = JSON.parse(json, (key, value) => {
+             *   return value && value.type === 'Buffer' ?
+             *     Buffer.from(value) :
+             *     value;
+             * });
+             *
+             * console.log(copy);
+             * // Prints: 
+             * ```
+             * @since v0.9.2
+             */
+            toJSON(): {
+                type: "Buffer";
+                data: number[];
+            };
+            /**
+             * Returns `true` if both `buf` and `otherBuffer` have exactly the same bytes,`false` otherwise. Equivalent to `buf.compare(otherBuffer) === 0`.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf1 = Buffer.from('ABC');
+             * const buf2 = Buffer.from('414243', 'hex');
+             * const buf3 = Buffer.from('ABCD');
+             *
+             * console.log(buf1.equals(buf2));
+             * // Prints: true
+             * console.log(buf1.equals(buf3));
+             * // Prints: false
+             * ```
+             * @since v0.11.13
+             * @param otherBuffer A `Buffer` or {@link Uint8Array} with which to compare `buf`.
+             */
+            equals(otherBuffer: Uint8Array): boolean;
+            /**
+             * Compares `buf` with `target` and returns a number indicating whether `buf`comes before, after, or is the same as `target` in sort order.
+             * Comparison is based on the actual sequence of bytes in each `Buffer`.
+             *
+             * * `0` is returned if `target` is the same as `buf`
+             * * `1` is returned if `target` should come _before_`buf` when sorted.
+             * * `-1` is returned if `target` should come _after_`buf` when sorted.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf1 = Buffer.from('ABC');
+             * const buf2 = Buffer.from('BCD');
+             * const buf3 = Buffer.from('ABCD');
+             *
+             * console.log(buf1.compare(buf1));
+             * // Prints: 0
+             * console.log(buf1.compare(buf2));
+             * // Prints: -1
+             * console.log(buf1.compare(buf3));
+             * // Prints: -1
+             * console.log(buf2.compare(buf1));
+             * // Prints: 1
+             * console.log(buf2.compare(buf3));
+             * // Prints: 1
+             * console.log([buf1, buf2, buf3].sort(Buffer.compare));
+             * // Prints: [ , ,  ]
+             * // (This result is equal to: [buf1, buf3, buf2].)
+             * ```
+             *
+             * The optional `targetStart`, `targetEnd`, `sourceStart`, and `sourceEnd` arguments can be used to limit the comparison to specific ranges within `target` and `buf` respectively.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf1 = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8, 9]);
+             * const buf2 = Buffer.from([5, 6, 7, 8, 9, 1, 2, 3, 4]);
+             *
+             * console.log(buf1.compare(buf2, 5, 9, 0, 4));
+             * // Prints: 0
+             * console.log(buf1.compare(buf2, 0, 6, 4));
+             * // Prints: -1
+             * console.log(buf1.compare(buf2, 5, 6, 5));
+             * // Prints: 1
+             * ```
+             *
+             * `ERR_OUT_OF_RANGE` is thrown if `targetStart < 0`, `sourceStart < 0`, `targetEnd > target.byteLength`, or `sourceEnd > source.byteLength`.
+             * @since v0.11.13
+             * @param target A `Buffer` or {@link Uint8Array} with which to compare `buf`.
+             * @param [targetStart=0] The offset within `target` at which to begin comparison.
+             * @param [targetEnd=target.length] The offset within `target` at which to end comparison (not inclusive).
+             * @param [sourceStart=0] The offset within `buf` at which to begin comparison.
+             * @param [sourceEnd=buf.length] The offset within `buf` at which to end comparison (not inclusive).
+             */
+            compare(
+                target: Uint8Array,
+                targetStart?: number,
+                targetEnd?: number,
+                sourceStart?: number,
+                sourceEnd?: number,
+            ): -1 | 0 | 1;
+            /**
+             * Copies data from a region of `buf` to a region in `target`, even if the `target`memory region overlaps with `buf`.
+             *
+             * [`TypedArray.prototype.set()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set) performs the same operation, and is available
+             * for all TypedArrays, including Node.js `Buffer`s, although it takes
+             * different function arguments.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * // Create two `Buffer` instances.
+             * const buf1 = Buffer.allocUnsafe(26);
+             * const buf2 = Buffer.allocUnsafe(26).fill('!');
+             *
+             * for (let i = 0; i < 26; i++) {
+             *   // 97 is the decimal ASCII value for 'a'.
+             *   buf1[i] = i + 97;
+             * }
+             *
+             * // Copy `buf1` bytes 16 through 19 into `buf2` starting at byte 8 of `buf2`.
+             * buf1.copy(buf2, 8, 16, 20);
+             * // This is equivalent to:
+             * // buf2.set(buf1.subarray(16, 20), 8);
+             *
+             * console.log(buf2.toString('ascii', 0, 25));
+             * // Prints: !!!!!!!!qrst!!!!!!!!!!!!!
+             * ```
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * // Create a `Buffer` and copy data from one region to an overlapping region
+             * // within the same `Buffer`.
+             *
+             * const buf = Buffer.allocUnsafe(26);
+             *
+             * for (let i = 0; i < 26; i++) {
+             *   // 97 is the decimal ASCII value for 'a'.
+             *   buf[i] = i + 97;
+             * }
+             *
+             * buf.copy(buf, 0, 4, 10);
+             *
+             * console.log(buf.toString());
+             * // Prints: efghijghijklmnopqrstuvwxyz
+             * ```
+             * @since v0.1.90
+             * @param target A `Buffer` or {@link Uint8Array} to copy into.
+             * @param [targetStart=0] The offset within `target` at which to begin writing.
+             * @param [sourceStart=0] The offset within `buf` from which to begin copying.
+             * @param [sourceEnd=buf.length] The offset within `buf` at which to stop copying (not inclusive).
+             * @return The number of bytes copied.
+             */
+            copy(target: Uint8Array, targetStart?: number, sourceStart?: number, sourceEnd?: number): number;
+            /**
+             * Writes `value` to `buf` at the specified `offset` as big-endian.
+             *
+             * `value` is interpreted and written as a two's complement signed integer.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(8);
+             *
+             * buf.writeBigInt64BE(0x0102030405060708n, 0);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             * @since v12.0.0, v10.20.0
+             * @param value Number to be written to `buf`.
+             * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`.
+             * @return `offset` plus the number of bytes written.
+             */
+            writeBigInt64BE(value: bigint, offset?: number): number;
+            /**
+             * Writes `value` to `buf` at the specified `offset` as little-endian.
+             *
+             * `value` is interpreted and written as a two's complement signed integer.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(8);
+             *
+             * buf.writeBigInt64LE(0x0102030405060708n, 0);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             * @since v12.0.0, v10.20.0
+             * @param value Number to be written to `buf`.
+             * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`.
+             * @return `offset` plus the number of bytes written.
+             */
+            writeBigInt64LE(value: bigint, offset?: number): number;
+            /**
+             * Writes `value` to `buf` at the specified `offset` as big-endian.
+             *
+             * This function is also available under the `writeBigUint64BE` alias.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(8);
+             *
+             * buf.writeBigUInt64BE(0xdecafafecacefaden, 0);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             * @since v12.0.0, v10.20.0
+             * @param value Number to be written to `buf`.
+             * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`.
+             * @return `offset` plus the number of bytes written.
+             */
+            writeBigUInt64BE(value: bigint, offset?: number): number;
+            /**
+             * @alias Buffer.writeBigUInt64BE
+             * @since v14.10.0, v12.19.0
+             */
+            writeBigUint64BE(value: bigint, offset?: number): number;
+            /**
+             * Writes `value` to `buf` at the specified `offset` as little-endian
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(8);
+             *
+             * buf.writeBigUInt64LE(0xdecafafecacefaden, 0);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             *
+             * This function is also available under the `writeBigUint64LE` alias.
+             * @since v12.0.0, v10.20.0
+             * @param value Number to be written to `buf`.
+             * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`.
+             * @return `offset` plus the number of bytes written.
+             */
+            writeBigUInt64LE(value: bigint, offset?: number): number;
+            /**
+             * @alias Buffer.writeBigUInt64LE
+             * @since v14.10.0, v12.19.0
+             */
+            writeBigUint64LE(value: bigint, offset?: number): number;
+            /**
+             * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as little-endian. Supports up to 48 bits of accuracy. Behavior is undefined
+             * when `value` is anything other than an unsigned integer.
+             *
+             * This function is also available under the `writeUintLE` alias.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(6);
+             *
+             * buf.writeUIntLE(0x1234567890ab, 0, 6);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             * @since v0.5.5
+             * @param value Number to be written to `buf`.
+             * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`.
+             * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`.
+             * @return `offset` plus the number of bytes written.
+             */
+            writeUIntLE(value: number, offset: number, byteLength: number): number;
+            /**
+             * @alias Buffer.writeUIntLE
+             * @since v14.9.0, v12.19.0
+             */
+            writeUintLE(value: number, offset: number, byteLength: number): number;
+            /**
+             * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as big-endian. Supports up to 48 bits of accuracy. Behavior is undefined
+             * when `value` is anything other than an unsigned integer.
+             *
+             * This function is also available under the `writeUintBE` alias.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(6);
+             *
+             * buf.writeUIntBE(0x1234567890ab, 0, 6);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             * @since v0.5.5
+             * @param value Number to be written to `buf`.
+             * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`.
+             * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`.
+             * @return `offset` plus the number of bytes written.
+             */
+            writeUIntBE(value: number, offset: number, byteLength: number): number;
+            /**
+             * @alias Buffer.writeUIntBE
+             * @since v14.9.0, v12.19.0
+             */
+            writeUintBE(value: number, offset: number, byteLength: number): number;
+            /**
+             * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as little-endian. Supports up to 48 bits of accuracy. Behavior is undefined
+             * when `value` is anything other than a signed integer.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(6);
+             *
+             * buf.writeIntLE(0x1234567890ab, 0, 6);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             * @since v0.11.15
+             * @param value Number to be written to `buf`.
+             * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`.
+             * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`.
+             * @return `offset` plus the number of bytes written.
+             */
+            writeIntLE(value: number, offset: number, byteLength: number): number;
+            /**
+             * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as big-endian. Supports up to 48 bits of accuracy. Behavior is undefined when`value` is anything other than a
+             * signed integer.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(6);
+             *
+             * buf.writeIntBE(0x1234567890ab, 0, 6);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             * @since v0.11.15
+             * @param value Number to be written to `buf`.
+             * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`.
+             * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`.
+             * @return `offset` plus the number of bytes written.
+             */
+            writeIntBE(value: number, offset: number, byteLength: number): number;
+            /**
+             * Reads an unsigned, big-endian 64-bit integer from `buf` at the specified`offset`.
+             *
+             * This function is also available under the `readBigUint64BE` alias.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);
+             *
+             * console.log(buf.readBigUInt64BE(0));
+             * // Prints: 4294967295n
+             * ```
+             * @since v12.0.0, v10.20.0
+             * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`.
+             */
+            readBigUInt64BE(offset?: number): bigint;
+            /**
+             * @alias Buffer.readBigUInt64BE
+             * @since v14.10.0, v12.19.0
+             */
+            readBigUint64BE(offset?: number): bigint;
+            /**
+             * Reads an unsigned, little-endian 64-bit integer from `buf` at the specified`offset`.
+             *
+             * This function is also available under the `readBigUint64LE` alias.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);
+             *
+             * console.log(buf.readBigUInt64LE(0));
+             * // Prints: 18446744069414584320n
+             * ```
+             * @since v12.0.0, v10.20.0
+             * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`.
+             */
+            readBigUInt64LE(offset?: number): bigint;
+            /**
+             * @alias Buffer.readBigUInt64LE
+             * @since v14.10.0, v12.19.0
+             */
+            readBigUint64LE(offset?: number): bigint;
+            /**
+             * Reads a signed, big-endian 64-bit integer from `buf` at the specified `offset`.
+             *
+             * Integers read from a `Buffer` are interpreted as two's complement signed
+             * values.
+             * @since v12.0.0, v10.20.0
+             * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`.
+             */
+            readBigInt64BE(offset?: number): bigint;
+            /**
+             * Reads a signed, little-endian 64-bit integer from `buf` at the specified`offset`.
+             *
+             * Integers read from a `Buffer` are interpreted as two's complement signed
+             * values.
+             * @since v12.0.0, v10.20.0
+             * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`.
+             */
+            readBigInt64LE(offset?: number): bigint;
+            /**
+             * Reads `byteLength` number of bytes from `buf` at the specified `offset` and interprets the result as an unsigned, little-endian integer supporting
+             * up to 48 bits of accuracy.
+             *
+             * This function is also available under the `readUintLE` alias.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
+             *
+             * console.log(buf.readUIntLE(0, 6).toString(16));
+             * // Prints: ab9078563412
+             * ```
+             * @since v0.11.15
+             * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`.
+             * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`.
+             */
+            readUIntLE(offset: number, byteLength: number): number;
+            /**
+             * @alias Buffer.readUIntLE
+             * @since v14.9.0, v12.19.0
+             */
+            readUintLE(offset: number, byteLength: number): number;
+            /**
+             * Reads `byteLength` number of bytes from `buf` at the specified `offset` and interprets the result as an unsigned big-endian integer supporting
+             * up to 48 bits of accuracy.
+             *
+             * This function is also available under the `readUintBE` alias.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
+             *
+             * console.log(buf.readUIntBE(0, 6).toString(16));
+             * // Prints: 1234567890ab
+             * console.log(buf.readUIntBE(1, 6).toString(16));
+             * // Throws ERR_OUT_OF_RANGE.
+             * ```
+             * @since v0.11.15
+             * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`.
+             * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`.
+             */
+            readUIntBE(offset: number, byteLength: number): number;
+            /**
+             * @alias Buffer.readUIntBE
+             * @since v14.9.0, v12.19.0
+             */
+            readUintBE(offset: number, byteLength: number): number;
+            /**
+             * Reads `byteLength` number of bytes from `buf` at the specified `offset` and interprets the result as a little-endian, two's complement signed value
+             * supporting up to 48 bits of accuracy.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
+             *
+             * console.log(buf.readIntLE(0, 6).toString(16));
+             * // Prints: -546f87a9cbee
+             * ```
+             * @since v0.11.15
+             * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`.
+             * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`.
+             */
+            readIntLE(offset: number, byteLength: number): number;
+            /**
+             * Reads `byteLength` number of bytes from `buf` at the specified `offset` and interprets the result as a big-endian, two's complement signed value
+             * supporting up to 48 bits of accuracy.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
+             *
+             * console.log(buf.readIntBE(0, 6).toString(16));
+             * // Prints: 1234567890ab
+             * console.log(buf.readIntBE(1, 6).toString(16));
+             * // Throws ERR_OUT_OF_RANGE.
+             * console.log(buf.readIntBE(1, 0).toString(16));
+             * // Throws ERR_OUT_OF_RANGE.
+             * ```
+             * @since v0.11.15
+             * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`.
+             * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`.
+             */
+            readIntBE(offset: number, byteLength: number): number;
+            /**
+             * Reads an unsigned 8-bit integer from `buf` at the specified `offset`.
+             *
+             * This function is also available under the `readUint8` alias.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from([1, -2]);
+             *
+             * console.log(buf.readUInt8(0));
+             * // Prints: 1
+             * console.log(buf.readUInt8(1));
+             * // Prints: 254
+             * console.log(buf.readUInt8(2));
+             * // Throws ERR_OUT_OF_RANGE.
+             * ```
+             * @since v0.5.0
+             * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 1`.
+             */
+            readUInt8(offset?: number): number;
+            /**
+             * @alias Buffer.readUInt8
+             * @since v14.9.0, v12.19.0
+             */
+            readUint8(offset?: number): number;
+            /**
+             * Reads an unsigned, little-endian 16-bit integer from `buf` at the specified `offset`.
+             *
+             * This function is also available under the `readUint16LE` alias.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from([0x12, 0x34, 0x56]);
+             *
+             * console.log(buf.readUInt16LE(0).toString(16));
+             * // Prints: 3412
+             * console.log(buf.readUInt16LE(1).toString(16));
+             * // Prints: 5634
+             * console.log(buf.readUInt16LE(2).toString(16));
+             * // Throws ERR_OUT_OF_RANGE.
+             * ```
+             * @since v0.5.5
+             * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`.
+             */
+            readUInt16LE(offset?: number): number;
+            /**
+             * @alias Buffer.readUInt16LE
+             * @since v14.9.0, v12.19.0
+             */
+            readUint16LE(offset?: number): number;
+            /**
+             * Reads an unsigned, big-endian 16-bit integer from `buf` at the specified`offset`.
+             *
+             * This function is also available under the `readUint16BE` alias.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from([0x12, 0x34, 0x56]);
+             *
+             * console.log(buf.readUInt16BE(0).toString(16));
+             * // Prints: 1234
+             * console.log(buf.readUInt16BE(1).toString(16));
+             * // Prints: 3456
+             * ```
+             * @since v0.5.5
+             * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`.
+             */
+            readUInt16BE(offset?: number): number;
+            /**
+             * @alias Buffer.readUInt16BE
+             * @since v14.9.0, v12.19.0
+             */
+            readUint16BE(offset?: number): number;
+            /**
+             * Reads an unsigned, little-endian 32-bit integer from `buf` at the specified`offset`.
+             *
+             * This function is also available under the `readUint32LE` alias.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);
+             *
+             * console.log(buf.readUInt32LE(0).toString(16));
+             * // Prints: 78563412
+             * console.log(buf.readUInt32LE(1).toString(16));
+             * // Throws ERR_OUT_OF_RANGE.
+             * ```
+             * @since v0.5.5
+             * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`.
+             */
+            readUInt32LE(offset?: number): number;
+            /**
+             * @alias Buffer.readUInt32LE
+             * @since v14.9.0, v12.19.0
+             */
+            readUint32LE(offset?: number): number;
+            /**
+             * Reads an unsigned, big-endian 32-bit integer from `buf` at the specified`offset`.
+             *
+             * This function is also available under the `readUint32BE` alias.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);
+             *
+             * console.log(buf.readUInt32BE(0).toString(16));
+             * // Prints: 12345678
+             * ```
+             * @since v0.5.5
+             * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`.
+             */
+            readUInt32BE(offset?: number): number;
+            /**
+             * @alias Buffer.readUInt32BE
+             * @since v14.9.0, v12.19.0
+             */
+            readUint32BE(offset?: number): number;
+            /**
+             * Reads a signed 8-bit integer from `buf` at the specified `offset`.
+             *
+             * Integers read from a `Buffer` are interpreted as two's complement signed values.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from([-1, 5]);
+             *
+             * console.log(buf.readInt8(0));
+             * // Prints: -1
+             * console.log(buf.readInt8(1));
+             * // Prints: 5
+             * console.log(buf.readInt8(2));
+             * // Throws ERR_OUT_OF_RANGE.
+             * ```
+             * @since v0.5.0
+             * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 1`.
+             */
+            readInt8(offset?: number): number;
+            /**
+             * Reads a signed, little-endian 16-bit integer from `buf` at the specified`offset`.
+             *
+             * Integers read from a `Buffer` are interpreted as two's complement signed values.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from([0, 5]);
+             *
+             * console.log(buf.readInt16LE(0));
+             * // Prints: 1280
+             * console.log(buf.readInt16LE(1));
+             * // Throws ERR_OUT_OF_RANGE.
+             * ```
+             * @since v0.5.5
+             * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`.
+             */
+            readInt16LE(offset?: number): number;
+            /**
+             * Reads a signed, big-endian 16-bit integer from `buf` at the specified `offset`.
+             *
+             * Integers read from a `Buffer` are interpreted as two's complement signed values.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from([0, 5]);
+             *
+             * console.log(buf.readInt16BE(0));
+             * // Prints: 5
+             * ```
+             * @since v0.5.5
+             * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`.
+             */
+            readInt16BE(offset?: number): number;
+            /**
+             * Reads a signed, little-endian 32-bit integer from `buf` at the specified`offset`.
+             *
+             * Integers read from a `Buffer` are interpreted as two's complement signed values.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from([0, 0, 0, 5]);
+             *
+             * console.log(buf.readInt32LE(0));
+             * // Prints: 83886080
+             * console.log(buf.readInt32LE(1));
+             * // Throws ERR_OUT_OF_RANGE.
+             * ```
+             * @since v0.5.5
+             * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`.
+             */
+            readInt32LE(offset?: number): number;
+            /**
+             * Reads a signed, big-endian 32-bit integer from `buf` at the specified `offset`.
+             *
+             * Integers read from a `Buffer` are interpreted as two's complement signed values.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from([0, 0, 0, 5]);
+             *
+             * console.log(buf.readInt32BE(0));
+             * // Prints: 5
+             * ```
+             * @since v0.5.5
+             * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`.
+             */
+            readInt32BE(offset?: number): number;
+            /**
+             * Reads a 32-bit, little-endian float from `buf` at the specified `offset`.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from([1, 2, 3, 4]);
+             *
+             * console.log(buf.readFloatLE(0));
+             * // Prints: 1.539989614439558e-36
+             * console.log(buf.readFloatLE(1));
+             * // Throws ERR_OUT_OF_RANGE.
+             * ```
+             * @since v0.11.15
+             * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`.
+             */
+            readFloatLE(offset?: number): number;
+            /**
+             * Reads a 32-bit, big-endian float from `buf` at the specified `offset`.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from([1, 2, 3, 4]);
+             *
+             * console.log(buf.readFloatBE(0));
+             * // Prints: 2.387939260590663e-38
+             * ```
+             * @since v0.11.15
+             * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`.
+             */
+            readFloatBE(offset?: number): number;
+            /**
+             * Reads a 64-bit, little-endian double from `buf` at the specified `offset`.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);
+             *
+             * console.log(buf.readDoubleLE(0));
+             * // Prints: 5.447603722011605e-270
+             * console.log(buf.readDoubleLE(1));
+             * // Throws ERR_OUT_OF_RANGE.
+             * ```
+             * @since v0.11.15
+             * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 8`.
+             */
+            readDoubleLE(offset?: number): number;
+            /**
+             * Reads a 64-bit, big-endian double from `buf` at the specified `offset`.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);
+             *
+             * console.log(buf.readDoubleBE(0));
+             * // Prints: 8.20788039913184e-304
+             * ```
+             * @since v0.11.15
+             * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 8`.
+             */
+            readDoubleBE(offset?: number): number;
+            reverse(): this;
+            /**
+             * Interprets `buf` as an array of unsigned 16-bit integers and swaps the
+             * byte order _in-place_. Throws `ERR_INVALID_BUFFER_SIZE` if `buf.length` is not a multiple of 2.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);
+             *
+             * console.log(buf1);
+             * // Prints: 
+             *
+             * buf1.swap16();
+             *
+             * console.log(buf1);
+             * // Prints: 
+             *
+             * const buf2 = Buffer.from([0x1, 0x2, 0x3]);
+             *
+             * buf2.swap16();
+             * // Throws ERR_INVALID_BUFFER_SIZE.
+             * ```
+             *
+             * One convenient use of `buf.swap16()` is to perform a fast in-place conversion
+             * between UTF-16 little-endian and UTF-16 big-endian:
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from('This is little-endian UTF-16', 'utf16le');
+             * buf.swap16(); // Convert to big-endian UTF-16 text.
+             * ```
+             * @since v5.10.0
+             * @return A reference to `buf`.
+             */
+            swap16(): this;
+            /**
+             * Interprets `buf` as an array of unsigned 32-bit integers and swaps the
+             * byte order _in-place_. Throws `ERR_INVALID_BUFFER_SIZE` if `buf.length` is not a multiple of 4.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);
+             *
+             * console.log(buf1);
+             * // Prints: 
+             *
+             * buf1.swap32();
+             *
+             * console.log(buf1);
+             * // Prints: 
+             *
+             * const buf2 = Buffer.from([0x1, 0x2, 0x3]);
+             *
+             * buf2.swap32();
+             * // Throws ERR_INVALID_BUFFER_SIZE.
+             * ```
+             * @since v5.10.0
+             * @return A reference to `buf`.
+             */
+            swap32(): this;
+            /**
+             * Interprets `buf` as an array of 64-bit numbers and swaps byte order _in-place_.
+             * Throws `ERR_INVALID_BUFFER_SIZE` if `buf.length` is not a multiple of 8.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);
+             *
+             * console.log(buf1);
+             * // Prints: 
+             *
+             * buf1.swap64();
+             *
+             * console.log(buf1);
+             * // Prints: 
+             *
+             * const buf2 = Buffer.from([0x1, 0x2, 0x3]);
+             *
+             * buf2.swap64();
+             * // Throws ERR_INVALID_BUFFER_SIZE.
+             * ```
+             * @since v6.3.0
+             * @return A reference to `buf`.
+             */
+            swap64(): this;
+            /**
+             * Writes `value` to `buf` at the specified `offset`. `value` must be a
+             * valid unsigned 8-bit integer. Behavior is undefined when `value` is anything
+             * other than an unsigned 8-bit integer.
+             *
+             * This function is also available under the `writeUint8` alias.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(4);
+             *
+             * buf.writeUInt8(0x3, 0);
+             * buf.writeUInt8(0x4, 1);
+             * buf.writeUInt8(0x23, 2);
+             * buf.writeUInt8(0x42, 3);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             * @since v0.5.0
+             * @param value Number to be written to `buf`.
+             * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 1`.
+             * @return `offset` plus the number of bytes written.
+             */
+            writeUInt8(value: number, offset?: number): number;
+            /**
+             * @alias Buffer.writeUInt8
+             * @since v14.9.0, v12.19.0
+             */
+            writeUint8(value: number, offset?: number): number;
+            /**
+             * Writes `value` to `buf` at the specified `offset` as little-endian. The `value` must be a valid unsigned 16-bit integer. Behavior is undefined when `value` is
+             * anything other than an unsigned 16-bit integer.
+             *
+             * This function is also available under the `writeUint16LE` alias.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(4);
+             *
+             * buf.writeUInt16LE(0xdead, 0);
+             * buf.writeUInt16LE(0xbeef, 2);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             * @since v0.5.5
+             * @param value Number to be written to `buf`.
+             * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`.
+             * @return `offset` plus the number of bytes written.
+             */
+            writeUInt16LE(value: number, offset?: number): number;
+            /**
+             * @alias Buffer.writeUInt16LE
+             * @since v14.9.0, v12.19.0
+             */
+            writeUint16LE(value: number, offset?: number): number;
+            /**
+             * Writes `value` to `buf` at the specified `offset` as big-endian. The `value` must be a valid unsigned 16-bit integer. Behavior is undefined when `value`is anything other than an
+             * unsigned 16-bit integer.
+             *
+             * This function is also available under the `writeUint16BE` alias.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(4);
+             *
+             * buf.writeUInt16BE(0xdead, 0);
+             * buf.writeUInt16BE(0xbeef, 2);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             * @since v0.5.5
+             * @param value Number to be written to `buf`.
+             * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`.
+             * @return `offset` plus the number of bytes written.
+             */
+            writeUInt16BE(value: number, offset?: number): number;
+            /**
+             * @alias Buffer.writeUInt16BE
+             * @since v14.9.0, v12.19.0
+             */
+            writeUint16BE(value: number, offset?: number): number;
+            /**
+             * Writes `value` to `buf` at the specified `offset` as little-endian. The `value` must be a valid unsigned 32-bit integer. Behavior is undefined when `value` is
+             * anything other than an unsigned 32-bit integer.
+             *
+             * This function is also available under the `writeUint32LE` alias.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(4);
+             *
+             * buf.writeUInt32LE(0xfeedface, 0);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             * @since v0.5.5
+             * @param value Number to be written to `buf`.
+             * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`.
+             * @return `offset` plus the number of bytes written.
+             */
+            writeUInt32LE(value: number, offset?: number): number;
+            /**
+             * @alias Buffer.writeUInt32LE
+             * @since v14.9.0, v12.19.0
+             */
+            writeUint32LE(value: number, offset?: number): number;
+            /**
+             * Writes `value` to `buf` at the specified `offset` as big-endian. The `value` must be a valid unsigned 32-bit integer. Behavior is undefined when `value`is anything other than an
+             * unsigned 32-bit integer.
+             *
+             * This function is also available under the `writeUint32BE` alias.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(4);
+             *
+             * buf.writeUInt32BE(0xfeedface, 0);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             * @since v0.5.5
+             * @param value Number to be written to `buf`.
+             * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`.
+             * @return `offset` plus the number of bytes written.
+             */
+            writeUInt32BE(value: number, offset?: number): number;
+            /**
+             * @alias Buffer.writeUInt32BE
+             * @since v14.9.0, v12.19.0
+             */
+            writeUint32BE(value: number, offset?: number): number;
+            /**
+             * Writes `value` to `buf` at the specified `offset`. `value` must be a valid
+             * signed 8-bit integer. Behavior is undefined when `value` is anything other than
+             * a signed 8-bit integer.
+             *
+             * `value` is interpreted and written as a two's complement signed integer.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(2);
+             *
+             * buf.writeInt8(2, 0);
+             * buf.writeInt8(-2, 1);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             * @since v0.5.0
+             * @param value Number to be written to `buf`.
+             * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 1`.
+             * @return `offset` plus the number of bytes written.
+             */
+            writeInt8(value: number, offset?: number): number;
+            /**
+             * Writes `value` to `buf` at the specified `offset` as little-endian.  The `value` must be a valid signed 16-bit integer. Behavior is undefined when `value` is
+             * anything other than a signed 16-bit integer.
+             *
+             * The `value` is interpreted and written as a two's complement signed integer.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(2);
+             *
+             * buf.writeInt16LE(0x0304, 0);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             * @since v0.5.5
+             * @param value Number to be written to `buf`.
+             * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`.
+             * @return `offset` plus the number of bytes written.
+             */
+            writeInt16LE(value: number, offset?: number): number;
+            /**
+             * Writes `value` to `buf` at the specified `offset` as big-endian.  The `value` must be a valid signed 16-bit integer. Behavior is undefined when `value` is
+             * anything other than a signed 16-bit integer.
+             *
+             * The `value` is interpreted and written as a two's complement signed integer.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(2);
+             *
+             * buf.writeInt16BE(0x0102, 0);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             * @since v0.5.5
+             * @param value Number to be written to `buf`.
+             * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`.
+             * @return `offset` plus the number of bytes written.
+             */
+            writeInt16BE(value: number, offset?: number): number;
+            /**
+             * Writes `value` to `buf` at the specified `offset` as little-endian. The `value` must be a valid signed 32-bit integer. Behavior is undefined when `value` is
+             * anything other than a signed 32-bit integer.
+             *
+             * The `value` is interpreted and written as a two's complement signed integer.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(4);
+             *
+             * buf.writeInt32LE(0x05060708, 0);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             * @since v0.5.5
+             * @param value Number to be written to `buf`.
+             * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`.
+             * @return `offset` plus the number of bytes written.
+             */
+            writeInt32LE(value: number, offset?: number): number;
+            /**
+             * Writes `value` to `buf` at the specified `offset` as big-endian. The `value` must be a valid signed 32-bit integer. Behavior is undefined when `value` is
+             * anything other than a signed 32-bit integer.
+             *
+             * The `value` is interpreted and written as a two's complement signed integer.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(4);
+             *
+             * buf.writeInt32BE(0x01020304, 0);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             * @since v0.5.5
+             * @param value Number to be written to `buf`.
+             * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`.
+             * @return `offset` plus the number of bytes written.
+             */
+            writeInt32BE(value: number, offset?: number): number;
+            /**
+             * Writes `value` to `buf` at the specified `offset` as little-endian. Behavior is
+             * undefined when `value` is anything other than a JavaScript number.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(4);
+             *
+             * buf.writeFloatLE(0xcafebabe, 0);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             * @since v0.11.15
+             * @param value Number to be written to `buf`.
+             * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`.
+             * @return `offset` plus the number of bytes written.
+             */
+            writeFloatLE(value: number, offset?: number): number;
+            /**
+             * Writes `value` to `buf` at the specified `offset` as big-endian. Behavior is
+             * undefined when `value` is anything other than a JavaScript number.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(4);
+             *
+             * buf.writeFloatBE(0xcafebabe, 0);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             * @since v0.11.15
+             * @param value Number to be written to `buf`.
+             * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`.
+             * @return `offset` plus the number of bytes written.
+             */
+            writeFloatBE(value: number, offset?: number): number;
+            /**
+             * Writes `value` to `buf` at the specified `offset` as little-endian. The `value` must be a JavaScript number. Behavior is undefined when `value` is anything
+             * other than a JavaScript number.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(8);
+             *
+             * buf.writeDoubleLE(123.456, 0);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             * @since v0.11.15
+             * @param value Number to be written to `buf`.
+             * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 8`.
+             * @return `offset` plus the number of bytes written.
+             */
+            writeDoubleLE(value: number, offset?: number): number;
+            /**
+             * Writes `value` to `buf` at the specified `offset` as big-endian. The `value` must be a JavaScript number. Behavior is undefined when `value` is anything
+             * other than a JavaScript number.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(8);
+             *
+             * buf.writeDoubleBE(123.456, 0);
+             *
+             * console.log(buf);
+             * // Prints: 
+             * ```
+             * @since v0.11.15
+             * @param value Number to be written to `buf`.
+             * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 8`.
+             * @return `offset` plus the number of bytes written.
+             */
+            writeDoubleBE(value: number, offset?: number): number;
+            /**
+             * Fills `buf` with the specified `value`. If the `offset` and `end` are not given,
+             * the entire `buf` will be filled:
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * // Fill a `Buffer` with the ASCII character 'h'.
+             *
+             * const b = Buffer.allocUnsafe(50).fill('h');
+             *
+             * console.log(b.toString());
+             * // Prints: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
+             *
+             * // Fill a buffer with empty string
+             * const c = Buffer.allocUnsafe(5).fill('');
+             *
+             * console.log(c.fill(''));
+             * // Prints: 
+             * ```
+             *
+             * `value` is coerced to a `uint32` value if it is not a string, `Buffer`, or
+             * integer. If the resulting integer is greater than `255` (decimal), `buf` will be
+             * filled with `value & 255`.
+             *
+             * If the final write of a `fill()` operation falls on a multi-byte character,
+             * then only the bytes of that character that fit into `buf` are written:
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * // Fill a `Buffer` with character that takes up two bytes in UTF-8.
+             *
+             * console.log(Buffer.allocUnsafe(5).fill('\u0222'));
+             * // Prints: 
+             * ```
+             *
+             * If `value` contains invalid characters, it is truncated; if no valid
+             * fill data remains, an exception is thrown:
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.allocUnsafe(5);
+             *
+             * console.log(buf.fill('a'));
+             * // Prints: 
+             * console.log(buf.fill('aazz', 'hex'));
+             * // Prints: 
+             * console.log(buf.fill('zz', 'hex'));
+             * // Throws an exception.
+             * ```
+             * @since v0.5.0
+             * @param value The value with which to fill `buf`. Empty value (string, Uint8Array, Buffer) is coerced to `0`.
+             * @param [offset=0] Number of bytes to skip before starting to fill `buf`.
+             * @param [end=buf.length] Where to stop filling `buf` (not inclusive).
+             * @param [encoding='utf8'] The encoding for `value` if `value` is a string.
+             * @return A reference to `buf`.
+             */
+            fill(value: string | Uint8Array | number, offset?: number, end?: number, encoding?: BufferEncoding): this;
+            fill(value: string | Uint8Array | number, offset: number, encoding: BufferEncoding): this;
+            fill(value: string | Uint8Array | number, encoding: BufferEncoding): this;
+            /**
+             * If `value` is:
+             *
+             * * a string, `value` is interpreted according to the character encoding in `encoding`.
+             * * a `Buffer` or [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array), `value` will be used in its entirety.
+             * To compare a partial `Buffer`, use `buf.subarray`.
+             * * a number, `value` will be interpreted as an unsigned 8-bit integer
+             * value between `0` and `255`.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from('this is a buffer');
+             *
+             * console.log(buf.indexOf('this'));
+             * // Prints: 0
+             * console.log(buf.indexOf('is'));
+             * // Prints: 2
+             * console.log(buf.indexOf(Buffer.from('a buffer')));
+             * // Prints: 8
+             * console.log(buf.indexOf(97));
+             * // Prints: 8 (97 is the decimal ASCII value for 'a')
+             * console.log(buf.indexOf(Buffer.from('a buffer example')));
+             * // Prints: -1
+             * console.log(buf.indexOf(Buffer.from('a buffer example').slice(0, 8)));
+             * // Prints: 8
+             *
+             * const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');
+             *
+             * console.log(utf16Buffer.indexOf('\u03a3', 0, 'utf16le'));
+             * // Prints: 4
+             * console.log(utf16Buffer.indexOf('\u03a3', -4, 'utf16le'));
+             * // Prints: 6
+             * ```
+             *
+             * If `value` is not a string, number, or `Buffer`, this method will throw a `TypeError`. If `value` is a number, it will be coerced to a valid byte value,
+             * an integer between 0 and 255.
+             *
+             * If `byteOffset` is not a number, it will be coerced to a number. If the result
+             * of coercion is `NaN` or `0`, then the entire buffer will be searched. This
+             * behavior matches [`String.prototype.indexOf()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf).
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const b = Buffer.from('abcdef');
+             *
+             * // Passing a value that's a number, but not a valid byte.
+             * // Prints: 2, equivalent to searching for 99 or 'c'.
+             * console.log(b.indexOf(99.9));
+             * console.log(b.indexOf(256 + 99));
+             *
+             * // Passing a byteOffset that coerces to NaN or 0.
+             * // Prints: 1, searching the whole buffer.
+             * console.log(b.indexOf('b', undefined));
+             * console.log(b.indexOf('b', {}));
+             * console.log(b.indexOf('b', null));
+             * console.log(b.indexOf('b', []));
+             * ```
+             *
+             * If `value` is an empty string or empty `Buffer` and `byteOffset` is less
+             * than `buf.length`, `byteOffset` will be returned. If `value` is empty and`byteOffset` is at least `buf.length`, `buf.length` will be returned.
+             * @since v1.5.0
+             * @param value What to search for.
+             * @param [byteOffset=0] Where to begin searching in `buf`. If negative, then offset is calculated from the end of `buf`.
+             * @param [encoding='utf8'] If `value` is a string, this is the encoding used to determine the binary representation of the string that will be searched for in `buf`.
+             * @return The index of the first occurrence of `value` in `buf`, or `-1` if `buf` does not contain `value`.
+             */
+            indexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: BufferEncoding): number;
+            indexOf(value: string | number | Uint8Array, encoding: BufferEncoding): number;
+            /**
+             * Identical to `buf.indexOf()`, except the last occurrence of `value` is found
+             * rather than the first occurrence.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from('this buffer is a buffer');
+             *
+             * console.log(buf.lastIndexOf('this'));
+             * // Prints: 0
+             * console.log(buf.lastIndexOf('buffer'));
+             * // Prints: 17
+             * console.log(buf.lastIndexOf(Buffer.from('buffer')));
+             * // Prints: 17
+             * console.log(buf.lastIndexOf(97));
+             * // Prints: 15 (97 is the decimal ASCII value for 'a')
+             * console.log(buf.lastIndexOf(Buffer.from('yolo')));
+             * // Prints: -1
+             * console.log(buf.lastIndexOf('buffer', 5));
+             * // Prints: 5
+             * console.log(buf.lastIndexOf('buffer', 4));
+             * // Prints: -1
+             *
+             * const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');
+             *
+             * console.log(utf16Buffer.lastIndexOf('\u03a3', undefined, 'utf16le'));
+             * // Prints: 6
+             * console.log(utf16Buffer.lastIndexOf('\u03a3', -5, 'utf16le'));
+             * // Prints: 4
+             * ```
+             *
+             * If `value` is not a string, number, or `Buffer`, this method will throw a `TypeError`. If `value` is a number, it will be coerced to a valid byte value,
+             * an integer between 0 and 255.
+             *
+             * If `byteOffset` is not a number, it will be coerced to a number. Any arguments
+             * that coerce to `NaN`, like `{}` or `undefined`, will search the whole buffer.
+             * This behavior matches [`String.prototype.lastIndexOf()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf).
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const b = Buffer.from('abcdef');
+             *
+             * // Passing a value that's a number, but not a valid byte.
+             * // Prints: 2, equivalent to searching for 99 or 'c'.
+             * console.log(b.lastIndexOf(99.9));
+             * console.log(b.lastIndexOf(256 + 99));
+             *
+             * // Passing a byteOffset that coerces to NaN.
+             * // Prints: 1, searching the whole buffer.
+             * console.log(b.lastIndexOf('b', undefined));
+             * console.log(b.lastIndexOf('b', {}));
+             *
+             * // Passing a byteOffset that coerces to 0.
+             * // Prints: -1, equivalent to passing 0.
+             * console.log(b.lastIndexOf('b', null));
+             * console.log(b.lastIndexOf('b', []));
+             * ```
+             *
+             * If `value` is an empty string or empty `Buffer`, `byteOffset` will be returned.
+             * @since v6.0.0
+             * @param value What to search for.
+             * @param [byteOffset=buf.length - 1] Where to begin searching in `buf`. If negative, then offset is calculated from the end of `buf`.
+             * @param [encoding='utf8'] If `value` is a string, this is the encoding used to determine the binary representation of the string that will be searched for in `buf`.
+             * @return The index of the last occurrence of `value` in `buf`, or `-1` if `buf` does not contain `value`.
+             */
+            lastIndexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: BufferEncoding): number;
+            lastIndexOf(value: string | number | Uint8Array, encoding: BufferEncoding): number;
+            /**
+             * Equivalent to `buf.indexOf() !== -1`.
+             *
+             * ```js
+             * import { Buffer } from 'node:buffer';
+             *
+             * const buf = Buffer.from('this is a buffer');
+             *
+             * console.log(buf.includes('this'));
+             * // Prints: true
+             * console.log(buf.includes('is'));
+             * // Prints: true
+             * console.log(buf.includes(Buffer.from('a buffer')));
+             * // Prints: true
+             * console.log(buf.includes(97));
+             * // Prints: true (97 is the decimal ASCII value for 'a')
+             * console.log(buf.includes(Buffer.from('a buffer example')));
+             * // Prints: false
+             * console.log(buf.includes(Buffer.from('a buffer example').slice(0, 8)));
+             * // Prints: true
+             * console.log(buf.includes('this', 4));
+             * // Prints: false
+             * ```
+             * @since v5.3.0
+             * @param value What to search for.
+             * @param [byteOffset=0] Where to begin searching in `buf`. If negative, then offset is calculated from the end of `buf`.
+             * @param [encoding='utf8'] If `value` is a string, this is its encoding.
+             * @return `true` if `value` was found in `buf`, `false` otherwise.
+             */
+            includes(value: string | number | Buffer, byteOffset?: number, encoding?: BufferEncoding): boolean;
+            includes(value: string | number | Buffer, encoding: BufferEncoding): boolean;
+        }
+        var Buffer: BufferConstructor;
+        /**
+         * Decodes a string of Base64-encoded data into bytes, and encodes those bytes
+         * into a string using Latin-1 (ISO-8859-1).
+         *
+         * The `data` may be any JavaScript-value that can be coerced into a string.
+         *
+         * **This function is only provided for compatibility with legacy web platform APIs**
+         * **and should never be used in new code, because they use strings to represent**
+         * **binary data and predate the introduction of typed arrays in JavaScript.**
+         * **For code running using Node.js APIs, converting between base64-encoded strings**
+         * **and binary data should be performed using `Buffer.from(str, 'base64')` and `buf.toString('base64')`.**
+         * @since v15.13.0, v14.17.0
+         * @legacy Use `Buffer.from(data, 'base64')` instead.
+         * @param data The Base64-encoded input string.
+         */
+        function atob(data: string): string;
+        /**
+         * Decodes a string into bytes using Latin-1 (ISO-8859), and encodes those bytes
+         * into a string using Base64.
+         *
+         * The `data` may be any JavaScript-value that can be coerced into a string.
+         *
+         * **This function is only provided for compatibility with legacy web platform APIs**
+         * **and should never be used in new code, because they use strings to represent**
+         * **binary data and predate the introduction of typed arrays in JavaScript.**
+         * **For code running using Node.js APIs, converting between base64-encoded strings**
+         * **and binary data should be performed using `Buffer.from(str, 'base64')` and `buf.toString('base64')`.**
+         * @since v15.13.0, v14.17.0
+         * @legacy Use `buf.toString('base64')` instead.
+         * @param data An ASCII (Latin1) string.
+         */
+        function btoa(data: string): string;
+        interface Blob extends _Blob {}
+        /**
+         * `Blob` class is a global reference for `import { Blob } from 'node:buffer'`
+         * https://nodejs.org/api/buffer.html#class-blob
+         * @since v18.0.0
+         */
+        var Blob: typeof globalThis extends { onmessage: any; Blob: infer T } ? T
+            : typeof import("buffer").Blob;
+        interface File extends _File {}
+        /**
+         * `File` class is a global reference for `import { File } from 'node:buffer'`
+         * https://nodejs.org/api/buffer.html#class-file
+         * @since v20.0.0
+         */
+        var File: typeof globalThis extends { onmessage: any; File: infer T } ? T
+            : typeof import("buffer").File;
+    }
+}
+declare module "node:buffer" {
+    export * from "buffer";
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/child_process.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/child_process.d.ts
new file mode 100644
index 00000000..ecad7d8e
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/child_process.d.ts
@@ -0,0 +1,1476 @@
+/**
+ * The `node:child_process` module provides the ability to spawn subprocesses in
+ * a manner that is similar, but not identical, to [`popen(3)`](http://man7.org/linux/man-pages/man3/popen.3.html). This capability
+ * is primarily provided by the {@link spawn} function:
+ *
+ * ```js
+ * import { spawn } from 'node:child_process';
+ * const ls = spawn('ls', ['-lh', '/usr']);
+ *
+ * ls.stdout.on('data', (data) => {
+ *   console.log(`stdout: ${data}`);
+ * });
+ *
+ * ls.stderr.on('data', (data) => {
+ *   console.error(`stderr: ${data}`);
+ * });
+ *
+ * ls.on('close', (code) => {
+ *   console.log(`child process exited with code ${code}`);
+ * });
+ * ```
+ *
+ * By default, pipes for `stdin`, `stdout`, and `stderr` are established between
+ * the parent Node.js process and the spawned subprocess. These pipes have
+ * limited (and platform-specific) capacity. If the subprocess writes to
+ * stdout in excess of that limit without the output being captured, the
+ * subprocess blocks, waiting for the pipe buffer to accept more data. This is
+ * identical to the behavior of pipes in the shell. Use the `{ stdio: 'ignore' }` option if the output will not be consumed.
+ *
+ * The command lookup is performed using the `options.env.PATH` environment
+ * variable if `env` is in the `options` object. Otherwise, `process.env.PATH` is
+ * used. If `options.env` is set without `PATH`, lookup on Unix is performed
+ * on a default search path search of `/usr/bin:/bin` (see your operating system's
+ * manual for execvpe/execvp), on Windows the current processes environment
+ * variable `PATH` is used.
+ *
+ * On Windows, environment variables are case-insensitive. Node.js
+ * lexicographically sorts the `env` keys and uses the first one that
+ * case-insensitively matches. Only first (in lexicographic order) entry will be
+ * passed to the subprocess. This might lead to issues on Windows when passing
+ * objects to the `env` option that have multiple variants of the same key, such as `PATH` and `Path`.
+ *
+ * The {@link spawn} method spawns the child process asynchronously,
+ * without blocking the Node.js event loop. The {@link spawnSync} function provides equivalent functionality in a synchronous manner that blocks
+ * the event loop until the spawned process either exits or is terminated.
+ *
+ * For convenience, the `node:child_process` module provides a handful of
+ * synchronous and asynchronous alternatives to {@link spawn} and {@link spawnSync}. Each of these alternatives are implemented on
+ * top of {@link spawn} or {@link spawnSync}.
+ *
+ * * {@link exec}: spawns a shell and runs a command within that
+ * shell, passing the `stdout` and `stderr` to a callback function when
+ * complete.
+ * * {@link execFile}: similar to {@link exec} except
+ * that it spawns the command directly without first spawning a shell by
+ * default.
+ * * {@link fork}: spawns a new Node.js process and invokes a
+ * specified module with an IPC communication channel established that allows
+ * sending messages between parent and child.
+ * * {@link execSync}: a synchronous version of {@link exec} that will block the Node.js event loop.
+ * * {@link execFileSync}: a synchronous version of {@link execFile} that will block the Node.js event loop.
+ *
+ * For certain use cases, such as automating shell scripts, the `synchronous counterparts` may be more convenient. In many cases, however,
+ * the synchronous methods can have significant impact on performance due to
+ * stalling the event loop while spawned processes complete.
+ * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/child_process.js)
+ */
+declare module "child_process" {
+    import { NonSharedBuffer } from "node:buffer";
+    import { Abortable, EventEmitter } from "node:events";
+    import * as dgram from "node:dgram";
+    import * as net from "node:net";
+    import { Readable, Stream, Writable } from "node:stream";
+    import { URL } from "node:url";
+    type Serializable = string | object | number | boolean | bigint;
+    type SendHandle = net.Socket | net.Server | dgram.Socket | undefined;
+    /**
+     * Instances of the `ChildProcess` represent spawned child processes.
+     *
+     * Instances of `ChildProcess` are not intended to be created directly. Rather,
+     * use the {@link spawn}, {@link exec},{@link execFile}, or {@link fork} methods to create
+     * instances of `ChildProcess`.
+     * @since v2.2.0
+     */
+    class ChildProcess extends EventEmitter {
+        /**
+         * A `Writable Stream` that represents the child process's `stdin`.
+         *
+         * If a child process waits to read all of its input, the child will not continue
+         * until this stream has been closed via `end()`.
+         *
+         * If the child was spawned with `stdio[0]` set to anything other than `'pipe'`,
+         * then this will be `null`.
+         *
+         * `subprocess.stdin` is an alias for `subprocess.stdio[0]`. Both properties will
+         * refer to the same value.
+         *
+         * The `subprocess.stdin` property can be `null` or `undefined` if the child process could not be successfully spawned.
+         * @since v0.1.90
+         */
+        stdin: Writable | null;
+        /**
+         * A `Readable Stream` that represents the child process's `stdout`.
+         *
+         * If the child was spawned with `stdio[1]` set to anything other than `'pipe'`,
+         * then this will be `null`.
+         *
+         * `subprocess.stdout` is an alias for `subprocess.stdio[1]`. Both properties will
+         * refer to the same value.
+         *
+         * ```js
+         * import { spawn } from 'node:child_process';
+         *
+         * const subprocess = spawn('ls');
+         *
+         * subprocess.stdout.on('data', (data) => {
+         *   console.log(`Received chunk ${data}`);
+         * });
+         * ```
+         *
+         * The `subprocess.stdout` property can be `null` or `undefined` if the child process could not be successfully spawned.
+         * @since v0.1.90
+         */
+        stdout: Readable | null;
+        /**
+         * A `Readable Stream` that represents the child process's `stderr`.
+         *
+         * If the child was spawned with `stdio[2]` set to anything other than `'pipe'`,
+         * then this will be `null`.
+         *
+         * `subprocess.stderr` is an alias for `subprocess.stdio[2]`. Both properties will
+         * refer to the same value.
+         *
+         * The `subprocess.stderr` property can be `null` or `undefined` if the child process could not be successfully spawned.
+         * @since v0.1.90
+         */
+        stderr: Readable | null;
+        /**
+         * The `subprocess.channel` property is a reference to the child's IPC channel. If
+         * no IPC channel exists, this property is `undefined`.
+         * @since v7.1.0
+         */
+        readonly channel?: Control | null;
+        /**
+         * A sparse array of pipes to the child process, corresponding with positions in
+         * the `stdio` option passed to {@link spawn} that have been set
+         * to the value `'pipe'`. `subprocess.stdio[0]`, `subprocess.stdio[1]`, and `subprocess.stdio[2]` are also available as `subprocess.stdin`, `subprocess.stdout`, and `subprocess.stderr`,
+         * respectively.
+         *
+         * In the following example, only the child's fd `1` (stdout) is configured as a
+         * pipe, so only the parent's `subprocess.stdio[1]` is a stream, all other values
+         * in the array are `null`.
+         *
+         * ```js
+         * import assert from 'node:assert';
+         * import fs from 'node:fs';
+         * import child_process from 'node:child_process';
+         *
+         * const subprocess = child_process.spawn('ls', {
+         *   stdio: [
+         *     0, // Use parent's stdin for child.
+         *     'pipe', // Pipe child's stdout to parent.
+         *     fs.openSync('err.out', 'w'), // Direct child's stderr to a file.
+         *   ],
+         * });
+         *
+         * assert.strictEqual(subprocess.stdio[0], null);
+         * assert.strictEqual(subprocess.stdio[0], subprocess.stdin);
+         *
+         * assert(subprocess.stdout);
+         * assert.strictEqual(subprocess.stdio[1], subprocess.stdout);
+         *
+         * assert.strictEqual(subprocess.stdio[2], null);
+         * assert.strictEqual(subprocess.stdio[2], subprocess.stderr);
+         * ```
+         *
+         * The `subprocess.stdio` property can be `undefined` if the child process could
+         * not be successfully spawned.
+         * @since v0.7.10
+         */
+        readonly stdio: [
+            Writable | null,
+            // stdin
+            Readable | null,
+            // stdout
+            Readable | null,
+            // stderr
+            Readable | Writable | null | undefined,
+            // extra
+            Readable | Writable | null | undefined, // extra
+        ];
+        /**
+         * The `subprocess.killed` property indicates whether the child process
+         * successfully received a signal from `subprocess.kill()`. The `killed` property
+         * does not indicate that the child process has been terminated.
+         * @since v0.5.10
+         */
+        readonly killed: boolean;
+        /**
+         * Returns the process identifier (PID) of the child process. If the child process
+         * fails to spawn due to errors, then the value is `undefined` and `error` is
+         * emitted.
+         *
+         * ```js
+         * import { spawn } from 'node:child_process';
+         * const grep = spawn('grep', ['ssh']);
+         *
+         * console.log(`Spawned child pid: ${grep.pid}`);
+         * grep.stdin.end();
+         * ```
+         * @since v0.1.90
+         */
+        readonly pid?: number | undefined;
+        /**
+         * The `subprocess.connected` property indicates whether it is still possible to
+         * send and receive messages from a child process. When `subprocess.connected` is `false`, it is no longer possible to send or receive messages.
+         * @since v0.7.2
+         */
+        readonly connected: boolean;
+        /**
+         * The `subprocess.exitCode` property indicates the exit code of the child process.
+         * If the child process is still running, the field will be `null`.
+         */
+        readonly exitCode: number | null;
+        /**
+         * The `subprocess.signalCode` property indicates the signal received by
+         * the child process if any, else `null`.
+         */
+        readonly signalCode: NodeJS.Signals | null;
+        /**
+         * The `subprocess.spawnargs` property represents the full list of command-line
+         * arguments the child process was launched with.
+         */
+        readonly spawnargs: string[];
+        /**
+         * The `subprocess.spawnfile` property indicates the executable file name of
+         * the child process that is launched.
+         *
+         * For {@link fork}, its value will be equal to `process.execPath`.
+         * For {@link spawn}, its value will be the name of
+         * the executable file.
+         * For {@link exec},  its value will be the name of the shell
+         * in which the child process is launched.
+         */
+        readonly spawnfile: string;
+        /**
+         * The `subprocess.kill()` method sends a signal to the child process. If no
+         * argument is given, the process will be sent the `'SIGTERM'` signal. See [`signal(7)`](http://man7.org/linux/man-pages/man7/signal.7.html) for a list of available signals. This function
+         * returns `true` if [`kill(2)`](http://man7.org/linux/man-pages/man2/kill.2.html) succeeds, and `false` otherwise.
+         *
+         * ```js
+         * import { spawn } from 'node:child_process';
+         * const grep = spawn('grep', ['ssh']);
+         *
+         * grep.on('close', (code, signal) => {
+         *   console.log(
+         *     `child process terminated due to receipt of signal ${signal}`);
+         * });
+         *
+         * // Send SIGHUP to process.
+         * grep.kill('SIGHUP');
+         * ```
+         *
+         * The `ChildProcess` object may emit an `'error'` event if the signal
+         * cannot be delivered. Sending a signal to a child process that has already exited
+         * is not an error but may have unforeseen consequences. Specifically, if the
+         * process identifier (PID) has been reassigned to another process, the signal will
+         * be delivered to that process instead which can have unexpected results.
+         *
+         * While the function is called `kill`, the signal delivered to the child process
+         * may not actually terminate the process.
+         *
+         * See [`kill(2)`](http://man7.org/linux/man-pages/man2/kill.2.html) for reference.
+         *
+         * On Windows, where POSIX signals do not exist, the `signal` argument will be
+         * ignored, and the process will be killed forcefully and abruptly (similar to `'SIGKILL'`).
+         * See `Signal Events` for more details.
+         *
+         * On Linux, child processes of child processes will not be terminated
+         * when attempting to kill their parent. This is likely to happen when running a
+         * new process in a shell or with the use of the `shell` option of `ChildProcess`:
+         *
+         * ```js
+         * 'use strict';
+         * import { spawn } from 'node:child_process';
+         *
+         * const subprocess = spawn(
+         *   'sh',
+         *   [
+         *     '-c',
+         *     `node -e "setInterval(() => {
+         *       console.log(process.pid, 'is alive')
+         *     }, 500);"`,
+         *   ], {
+         *     stdio: ['inherit', 'inherit', 'inherit'],
+         *   },
+         * );
+         *
+         * setTimeout(() => {
+         *   subprocess.kill(); // Does not terminate the Node.js process in the shell.
+         * }, 2000);
+         * ```
+         * @since v0.1.90
+         */
+        kill(signal?: NodeJS.Signals | number): boolean;
+        /**
+         * Calls {@link ChildProcess.kill} with `'SIGTERM'`.
+         * @since v20.5.0
+         */
+        [Symbol.dispose](): void;
+        /**
+         * When an IPC channel has been established between the parent and child (
+         * i.e. when using {@link fork}), the `subprocess.send()` method can
+         * be used to send messages to the child process. When the child process is a
+         * Node.js instance, these messages can be received via the `'message'` event.
+         *
+         * The message goes through serialization and parsing. The resulting
+         * message might not be the same as what is originally sent.
+         *
+         * For example, in the parent script:
+         *
+         * ```js
+         * import cp from 'node:child_process';
+         * const n = cp.fork(`${__dirname}/sub.js`);
+         *
+         * n.on('message', (m) => {
+         *   console.log('PARENT got message:', m);
+         * });
+         *
+         * // Causes the child to print: CHILD got message: { hello: 'world' }
+         * n.send({ hello: 'world' });
+         * ```
+         *
+         * And then the child script, `'sub.js'` might look like this:
+         *
+         * ```js
+         * process.on('message', (m) => {
+         *   console.log('CHILD got message:', m);
+         * });
+         *
+         * // Causes the parent to print: PARENT got message: { foo: 'bar', baz: null }
+         * process.send({ foo: 'bar', baz: NaN });
+         * ```
+         *
+         * Child Node.js processes will have a `process.send()` method of their own
+         * that allows the child to send messages back to the parent.
+         *
+         * There is a special case when sending a `{cmd: 'NODE_foo'}` message. Messages
+         * containing a `NODE_` prefix in the `cmd` property are reserved for use within
+         * Node.js core and will not be emitted in the child's `'message'` event. Rather, such messages are emitted using the `'internalMessage'` event and are consumed internally by Node.js.
+         * Applications should avoid using such messages or listening for `'internalMessage'` events as it is subject to change without notice.
+         *
+         * The optional `sendHandle` argument that may be passed to `subprocess.send()` is
+         * for passing a TCP server or socket object to the child process. The child will
+         * receive the object as the second argument passed to the callback function
+         * registered on the `'message'` event. Any data that is received and buffered in
+         * the socket will not be sent to the child. Sending IPC sockets is not supported on Windows.
+         *
+         * The optional `callback` is a function that is invoked after the message is
+         * sent but before the child may have received it. The function is called with a
+         * single argument: `null` on success, or an `Error` object on failure.
+         *
+         * If no `callback` function is provided and the message cannot be sent, an `'error'` event will be emitted by the `ChildProcess` object. This can
+         * happen, for instance, when the child process has already exited.
+         *
+         * `subprocess.send()` will return `false` if the channel has closed or when the
+         * backlog of unsent messages exceeds a threshold that makes it unwise to send
+         * more. Otherwise, the method returns `true`. The `callback` function can be
+         * used to implement flow control.
+         *
+         * #### Example: sending a server object
+         *
+         * The `sendHandle` argument can be used, for instance, to pass the handle of
+         * a TCP server object to the child process as illustrated in the example below:
+         *
+         * ```js
+         * import { createServer } from 'node:net';
+         * import { fork } from 'node:child_process';
+         * const subprocess = fork('subprocess.js');
+         *
+         * // Open up the server object and send the handle.
+         * const server = createServer();
+         * server.on('connection', (socket) => {
+         *   socket.end('handled by parent');
+         * });
+         * server.listen(1337, () => {
+         *   subprocess.send('server', server);
+         * });
+         * ```
+         *
+         * The child would then receive the server object as:
+         *
+         * ```js
+         * process.on('message', (m, server) => {
+         *   if (m === 'server') {
+         *     server.on('connection', (socket) => {
+         *       socket.end('handled by child');
+         *     });
+         *   }
+         * });
+         * ```
+         *
+         * Once the server is now shared between the parent and child, some connections
+         * can be handled by the parent and some by the child.
+         *
+         * While the example above uses a server created using the `node:net` module, `node:dgram` module servers use exactly the same workflow with the exceptions of
+         * listening on a `'message'` event instead of `'connection'` and using `server.bind()` instead of `server.listen()`. This is, however, only
+         * supported on Unix platforms.
+         *
+         * #### Example: sending a socket object
+         *
+         * Similarly, the `sendHandler` argument can be used to pass the handle of a
+         * socket to the child process. The example below spawns two children that each
+         * handle connections with "normal" or "special" priority:
+         *
+         * ```js
+         * import { createServer } from 'node:net';
+         * import { fork } from 'node:child_process';
+         * const normal = fork('subprocess.js', ['normal']);
+         * const special = fork('subprocess.js', ['special']);
+         *
+         * // Open up the server and send sockets to child. Use pauseOnConnect to prevent
+         * // the sockets from being read before they are sent to the child process.
+         * const server = createServer({ pauseOnConnect: true });
+         * server.on('connection', (socket) => {
+         *
+         *   // If this is special priority...
+         *   if (socket.remoteAddress === '74.125.127.100') {
+         *     special.send('socket', socket);
+         *     return;
+         *   }
+         *   // This is normal priority.
+         *   normal.send('socket', socket);
+         * });
+         * server.listen(1337);
+         * ```
+         *
+         * The `subprocess.js` would receive the socket handle as the second argument
+         * passed to the event callback function:
+         *
+         * ```js
+         * process.on('message', (m, socket) => {
+         *   if (m === 'socket') {
+         *     if (socket) {
+         *       // Check that the client socket exists.
+         *       // It is possible for the socket to be closed between the time it is
+         *       // sent and the time it is received in the child process.
+         *       socket.end(`Request handled with ${process.argv[2]} priority`);
+         *     }
+         *   }
+         * });
+         * ```
+         *
+         * Do not use `.maxConnections` on a socket that has been passed to a subprocess.
+         * The parent cannot track when the socket is destroyed.
+         *
+         * Any `'message'` handlers in the subprocess should verify that `socket` exists,
+         * as the connection may have been closed during the time it takes to send the
+         * connection to the child.
+         * @since v0.5.9
+         * @param sendHandle `undefined`, or a [`net.Socket`](https://nodejs.org/docs/latest-v24.x/api/net.html#class-netsocket), [`net.Server`](https://nodejs.org/docs/latest-v24.x/api/net.html#class-netserver), or [`dgram.Socket`](https://nodejs.org/docs/latest-v24.x/api/dgram.html#class-dgramsocket) object.
+         * @param options The `options` argument, if present, is an object used to parameterize the sending of certain types of handles. `options` supports the following properties:
+         */
+        send(message: Serializable, callback?: (error: Error | null) => void): boolean;
+        send(message: Serializable, sendHandle?: SendHandle, callback?: (error: Error | null) => void): boolean;
+        send(
+            message: Serializable,
+            sendHandle?: SendHandle,
+            options?: MessageOptions,
+            callback?: (error: Error | null) => void,
+        ): boolean;
+        /**
+         * Closes the IPC channel between parent and child, allowing the child to exit
+         * gracefully once there are no other connections keeping it alive. After calling
+         * this method the `subprocess.connected` and `process.connected` properties in
+         * both the parent and child (respectively) will be set to `false`, and it will be
+         * no longer possible to pass messages between the processes.
+         *
+         * The `'disconnect'` event will be emitted when there are no messages in the
+         * process of being received. This will most often be triggered immediately after
+         * calling `subprocess.disconnect()`.
+         *
+         * When the child process is a Node.js instance (e.g. spawned using {@link fork}), the `process.disconnect()` method can be invoked
+         * within the child process to close the IPC channel as well.
+         * @since v0.7.2
+         */
+        disconnect(): void;
+        /**
+         * By default, the parent will wait for the detached child to exit. To prevent the
+         * parent from waiting for a given `subprocess` to exit, use the `subprocess.unref()` method. Doing so will cause the parent's event loop to not
+         * include the child in its reference count, allowing the parent to exit
+         * independently of the child, unless there is an established IPC channel between
+         * the child and the parent.
+         *
+         * ```js
+         * import { spawn } from 'node:child_process';
+         *
+         * const subprocess = spawn(process.argv[0], ['child_program.js'], {
+         *   detached: true,
+         *   stdio: 'ignore',
+         * });
+         *
+         * subprocess.unref();
+         * ```
+         * @since v0.7.10
+         */
+        unref(): void;
+        /**
+         * Calling `subprocess.ref()` after making a call to `subprocess.unref()` will
+         * restore the removed reference count for the child process, forcing the parent
+         * to wait for the child to exit before exiting itself.
+         *
+         * ```js
+         * import { spawn } from 'node:child_process';
+         *
+         * const subprocess = spawn(process.argv[0], ['child_program.js'], {
+         *   detached: true,
+         *   stdio: 'ignore',
+         * });
+         *
+         * subprocess.unref();
+         * subprocess.ref();
+         * ```
+         * @since v0.7.10
+         */
+        ref(): void;
+        /**
+         * events.EventEmitter
+         * 1. close
+         * 2. disconnect
+         * 3. error
+         * 4. exit
+         * 5. message
+         * 6. spawn
+         */
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        addListener(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+        addListener(event: "disconnect", listener: () => void): this;
+        addListener(event: "error", listener: (err: Error) => void): this;
+        addListener(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+        addListener(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this;
+        addListener(event: "spawn", listener: () => void): this;
+        emit(event: string | symbol, ...args: any[]): boolean;
+        emit(event: "close", code: number | null, signal: NodeJS.Signals | null): boolean;
+        emit(event: "disconnect"): boolean;
+        emit(event: "error", err: Error): boolean;
+        emit(event: "exit", code: number | null, signal: NodeJS.Signals | null): boolean;
+        emit(event: "message", message: Serializable, sendHandle: SendHandle): boolean;
+        emit(event: "spawn", listener: () => void): boolean;
+        on(event: string, listener: (...args: any[]) => void): this;
+        on(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+        on(event: "disconnect", listener: () => void): this;
+        on(event: "error", listener: (err: Error) => void): this;
+        on(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+        on(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this;
+        on(event: "spawn", listener: () => void): this;
+        once(event: string, listener: (...args: any[]) => void): this;
+        once(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+        once(event: "disconnect", listener: () => void): this;
+        once(event: "error", listener: (err: Error) => void): this;
+        once(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+        once(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this;
+        once(event: "spawn", listener: () => void): this;
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependListener(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+        prependListener(event: "disconnect", listener: () => void): this;
+        prependListener(event: "error", listener: (err: Error) => void): this;
+        prependListener(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+        prependListener(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this;
+        prependListener(event: "spawn", listener: () => void): this;
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(
+            event: "close",
+            listener: (code: number | null, signal: NodeJS.Signals | null) => void,
+        ): this;
+        prependOnceListener(event: "disconnect", listener: () => void): this;
+        prependOnceListener(event: "error", listener: (err: Error) => void): this;
+        prependOnceListener(
+            event: "exit",
+            listener: (code: number | null, signal: NodeJS.Signals | null) => void,
+        ): this;
+        prependOnceListener(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this;
+        prependOnceListener(event: "spawn", listener: () => void): this;
+    }
+    // return this object when stdio option is undefined or not specified
+    interface ChildProcessWithoutNullStreams extends ChildProcess {
+        stdin: Writable;
+        stdout: Readable;
+        stderr: Readable;
+        readonly stdio: [
+            Writable,
+            Readable,
+            Readable,
+            // stderr
+            Readable | Writable | null | undefined,
+            // extra, no modification
+            Readable | Writable | null | undefined, // extra, no modification
+        ];
+    }
+    // return this object when stdio option is a tuple of 3
+    interface ChildProcessByStdio
+        extends ChildProcess
+    {
+        stdin: I;
+        stdout: O;
+        stderr: E;
+        readonly stdio: [
+            I,
+            O,
+            E,
+            Readable | Writable | null | undefined,
+            // extra, no modification
+            Readable | Writable | null | undefined, // extra, no modification
+        ];
+    }
+    interface Control extends EventEmitter {
+        ref(): void;
+        unref(): void;
+    }
+    interface MessageOptions {
+        keepOpen?: boolean | undefined;
+    }
+    type IOType = "overlapped" | "pipe" | "ignore" | "inherit";
+    type StdioOptions = IOType | Array;
+    type SerializationType = "json" | "advanced";
+    interface MessagingOptions extends Abortable {
+        /**
+         * Specify the kind of serialization used for sending messages between processes.
+         * @default 'json'
+         */
+        serialization?: SerializationType | undefined;
+        /**
+         * The signal value to be used when the spawned process will be killed by the abort signal.
+         * @default 'SIGTERM'
+         */
+        killSignal?: NodeJS.Signals | number | undefined;
+        /**
+         * In milliseconds the maximum amount of time the process is allowed to run.
+         */
+        timeout?: number | undefined;
+    }
+    interface ProcessEnvOptions {
+        uid?: number | undefined;
+        gid?: number | undefined;
+        cwd?: string | URL | undefined;
+        env?: NodeJS.ProcessEnv | undefined;
+    }
+    interface CommonOptions extends ProcessEnvOptions {
+        /**
+         * @default false
+         */
+        windowsHide?: boolean | undefined;
+        /**
+         * @default 0
+         */
+        timeout?: number | undefined;
+    }
+    interface CommonSpawnOptions extends CommonOptions, MessagingOptions, Abortable {
+        argv0?: string | undefined;
+        /**
+         * Can be set to 'pipe', 'inherit', 'overlapped', or 'ignore', or an array of these strings.
+         * If passed as an array, the first element is used for `stdin`, the second for
+         * `stdout`, and the third for `stderr`. A fourth element can be used to
+         * specify the `stdio` behavior beyond the standard streams. See
+         * {@link ChildProcess.stdio} for more information.
+         *
+         * @default 'pipe'
+         */
+        stdio?: StdioOptions | undefined;
+        shell?: boolean | string | undefined;
+        windowsVerbatimArguments?: boolean | undefined;
+    }
+    interface SpawnOptions extends CommonSpawnOptions {
+        detached?: boolean | undefined;
+    }
+    interface SpawnOptionsWithoutStdio extends SpawnOptions {
+        stdio?: StdioPipeNamed | StdioPipe[] | undefined;
+    }
+    type StdioNull = "inherit" | "ignore" | Stream;
+    type StdioPipeNamed = "pipe" | "overlapped";
+    type StdioPipe = undefined | null | StdioPipeNamed;
+    interface SpawnOptionsWithStdioTuple<
+        Stdin extends StdioNull | StdioPipe,
+        Stdout extends StdioNull | StdioPipe,
+        Stderr extends StdioNull | StdioPipe,
+    > extends SpawnOptions {
+        stdio: [Stdin, Stdout, Stderr];
+    }
+    /**
+     * The `child_process.spawn()` method spawns a new process using the given `command`, with command-line arguments in `args`. If omitted, `args` defaults
+     * to an empty array.
+     *
+     * **If the `shell` option is enabled, do not pass unsanitized user input to this**
+     * **function. Any input containing shell metacharacters may be used to trigger**
+     * **arbitrary command execution.**
+     *
+     * A third argument may be used to specify additional options, with these defaults:
+     *
+     * ```js
+     * const defaults = {
+     *   cwd: undefined,
+     *   env: process.env,
+     * };
+     * ```
+     *
+     * Use `cwd` to specify the working directory from which the process is spawned.
+     * If not given, the default is to inherit the current working directory. If given,
+     * but the path does not exist, the child process emits an `ENOENT` error
+     * and exits immediately. `ENOENT` is also emitted when the command
+     * does not exist.
+     *
+     * Use `env` to specify environment variables that will be visible to the new
+     * process, the default is `process.env`.
+     *
+     * `undefined` values in `env` will be ignored.
+     *
+     * Example of running `ls -lh /usr`, capturing `stdout`, `stderr`, and the
+     * exit code:
+     *
+     * ```js
+     * import { spawn } from 'node:child_process';
+     * const ls = spawn('ls', ['-lh', '/usr']);
+     *
+     * ls.stdout.on('data', (data) => {
+     *   console.log(`stdout: ${data}`);
+     * });
+     *
+     * ls.stderr.on('data', (data) => {
+     *   console.error(`stderr: ${data}`);
+     * });
+     *
+     * ls.on('close', (code) => {
+     *   console.log(`child process exited with code ${code}`);
+     * });
+     * ```
+     *
+     * Example: A very elaborate way to run `ps ax | grep ssh`
+     *
+     * ```js
+     * import { spawn } from 'node:child_process';
+     * const ps = spawn('ps', ['ax']);
+     * const grep = spawn('grep', ['ssh']);
+     *
+     * ps.stdout.on('data', (data) => {
+     *   grep.stdin.write(data);
+     * });
+     *
+     * ps.stderr.on('data', (data) => {
+     *   console.error(`ps stderr: ${data}`);
+     * });
+     *
+     * ps.on('close', (code) => {
+     *   if (code !== 0) {
+     *     console.log(`ps process exited with code ${code}`);
+     *   }
+     *   grep.stdin.end();
+     * });
+     *
+     * grep.stdout.on('data', (data) => {
+     *   console.log(data.toString());
+     * });
+     *
+     * grep.stderr.on('data', (data) => {
+     *   console.error(`grep stderr: ${data}`);
+     * });
+     *
+     * grep.on('close', (code) => {
+     *   if (code !== 0) {
+     *     console.log(`grep process exited with code ${code}`);
+     *   }
+     * });
+     * ```
+     *
+     * Example of checking for failed `spawn`:
+     *
+     * ```js
+     * import { spawn } from 'node:child_process';
+     * const subprocess = spawn('bad_command');
+     *
+     * subprocess.on('error', (err) => {
+     *   console.error('Failed to start subprocess.');
+     * });
+     * ```
+     *
+     * Certain platforms (macOS, Linux) will use the value of `argv[0]` for the process
+     * title while others (Windows, SunOS) will use `command`.
+     *
+     * Node.js overwrites `argv[0]` with `process.execPath` on startup, so `process.argv[0]` in a Node.js child process will not match the `argv0` parameter passed to `spawn` from the parent. Retrieve
+     * it with the `process.argv0` property instead.
+     *
+     * If the `signal` option is enabled, calling `.abort()` on the corresponding `AbortController` is similar to calling `.kill()` on the child process except
+     * the error passed to the callback will be an `AbortError`:
+     *
+     * ```js
+     * import { spawn } from 'node:child_process';
+     * const controller = new AbortController();
+     * const { signal } = controller;
+     * const grep = spawn('grep', ['ssh'], { signal });
+     * grep.on('error', (err) => {
+     *   // This will be called with err being an AbortError if the controller aborts
+     * });
+     * controller.abort(); // Stops the child process
+     * ```
+     * @since v0.1.90
+     * @param command The command to run.
+     * @param args List of string arguments.
+     */
+    function spawn(command: string, options?: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams;
+    function spawn(
+        command: string,
+        options: SpawnOptionsWithStdioTuple,
+    ): ChildProcessByStdio;
+    function spawn(
+        command: string,
+        options: SpawnOptionsWithStdioTuple,
+    ): ChildProcessByStdio;
+    function spawn(
+        command: string,
+        options: SpawnOptionsWithStdioTuple,
+    ): ChildProcessByStdio;
+    function spawn(
+        command: string,
+        options: SpawnOptionsWithStdioTuple,
+    ): ChildProcessByStdio;
+    function spawn(
+        command: string,
+        options: SpawnOptionsWithStdioTuple,
+    ): ChildProcessByStdio;
+    function spawn(
+        command: string,
+        options: SpawnOptionsWithStdioTuple,
+    ): ChildProcessByStdio;
+    function spawn(
+        command: string,
+        options: SpawnOptionsWithStdioTuple,
+    ): ChildProcessByStdio;
+    function spawn(
+        command: string,
+        options: SpawnOptionsWithStdioTuple,
+    ): ChildProcessByStdio;
+    function spawn(command: string, options: SpawnOptions): ChildProcess;
+    // overloads of spawn with 'args'
+    function spawn(
+        command: string,
+        args?: readonly string[],
+        options?: SpawnOptionsWithoutStdio,
+    ): ChildProcessWithoutNullStreams;
+    function spawn(
+        command: string,
+        args: readonly string[],
+        options: SpawnOptionsWithStdioTuple,
+    ): ChildProcessByStdio;
+    function spawn(
+        command: string,
+        args: readonly string[],
+        options: SpawnOptionsWithStdioTuple,
+    ): ChildProcessByStdio;
+    function spawn(
+        command: string,
+        args: readonly string[],
+        options: SpawnOptionsWithStdioTuple,
+    ): ChildProcessByStdio;
+    function spawn(
+        command: string,
+        args: readonly string[],
+        options: SpawnOptionsWithStdioTuple,
+    ): ChildProcessByStdio;
+    function spawn(
+        command: string,
+        args: readonly string[],
+        options: SpawnOptionsWithStdioTuple,
+    ): ChildProcessByStdio;
+    function spawn(
+        command: string,
+        args: readonly string[],
+        options: SpawnOptionsWithStdioTuple,
+    ): ChildProcessByStdio;
+    function spawn(
+        command: string,
+        args: readonly string[],
+        options: SpawnOptionsWithStdioTuple,
+    ): ChildProcessByStdio;
+    function spawn(
+        command: string,
+        args: readonly string[],
+        options: SpawnOptionsWithStdioTuple,
+    ): ChildProcessByStdio;
+    function spawn(command: string, args: readonly string[], options: SpawnOptions): ChildProcess;
+    interface ExecOptions extends CommonOptions {
+        shell?: string | undefined;
+        signal?: AbortSignal | undefined;
+        maxBuffer?: number | undefined;
+        killSignal?: NodeJS.Signals | number | undefined;
+        encoding?: string | null | undefined;
+    }
+    interface ExecOptionsWithStringEncoding extends ExecOptions {
+        encoding?: BufferEncoding | undefined;
+    }
+    interface ExecOptionsWithBufferEncoding extends ExecOptions {
+        encoding: "buffer" | null; // specify `null`.
+    }
+    // TODO: Just Plain Wrong™ (see also nodejs/node#57392)
+    interface ExecException extends Error {
+        cmd?: string;
+        killed?: boolean;
+        code?: number;
+        signal?: NodeJS.Signals;
+        stdout?: string;
+        stderr?: string;
+    }
+    /**
+     * Spawns a shell then executes the `command` within that shell, buffering any
+     * generated output. The `command` string passed to the exec function is processed
+     * directly by the shell and special characters (vary based on [shell](https://en.wikipedia.org/wiki/List_of_command-line_interpreters))
+     * need to be dealt with accordingly:
+     *
+     * ```js
+     * import { exec } from 'node:child_process';
+     *
+     * exec('"/path/to/test file/test.sh" arg1 arg2');
+     * // Double quotes are used so that the space in the path is not interpreted as
+     * // a delimiter of multiple arguments.
+     *
+     * exec('echo "The \\$HOME variable is $HOME"');
+     * // The $HOME variable is escaped in the first instance, but not in the second.
+     * ```
+     *
+     * **Never pass unsanitized user input to this function. Any input containing shell**
+     * **metacharacters may be used to trigger arbitrary command execution.**
+     *
+     * If a `callback` function is provided, it is called with the arguments `(error, stdout, stderr)`. On success, `error` will be `null`. On error, `error` will be an instance of `Error`. The
+     * `error.code` property will be
+     * the exit code of the process. By convention, any exit code other than `0` indicates an error. `error.signal` will be the signal that terminated the
+     * process.
+     *
+     * The `stdout` and `stderr` arguments passed to the callback will contain the
+     * stdout and stderr output of the child process. By default, Node.js will decode
+     * the output as UTF-8 and pass strings to the callback. The `encoding` option
+     * can be used to specify the character encoding used to decode the stdout and
+     * stderr output. If `encoding` is `'buffer'`, or an unrecognized character
+     * encoding, `Buffer` objects will be passed to the callback instead.
+     *
+     * ```js
+     * import { exec } from 'node:child_process';
+     * exec('cat *.js missing_file | wc -l', (error, stdout, stderr) => {
+     *   if (error) {
+     *     console.error(`exec error: ${error}`);
+     *     return;
+     *   }
+     *   console.log(`stdout: ${stdout}`);
+     *   console.error(`stderr: ${stderr}`);
+     * });
+     * ```
+     *
+     * If `timeout` is greater than `0`, the parent will send the signal
+     * identified by the `killSignal` property (the default is `'SIGTERM'`) if the
+     * child runs longer than `timeout` milliseconds.
+     *
+     * Unlike the [`exec(3)`](http://man7.org/linux/man-pages/man3/exec.3.html) POSIX system call, `child_process.exec()` does not replace
+     * the existing process and uses a shell to execute the command.
+     *
+     * If this method is invoked as its `util.promisify()` ed version, it returns
+     * a `Promise` for an `Object` with `stdout` and `stderr` properties. The returned `ChildProcess` instance is attached to the `Promise` as a `child` property. In
+     * case of an error (including any error resulting in an exit code other than 0), a
+     * rejected promise is returned, with the same `error` object given in the
+     * callback, but with two additional properties `stdout` and `stderr`.
+     *
+     * ```js
+     * import util from 'node:util';
+     * import child_process from 'node:child_process';
+     * const exec = util.promisify(child_process.exec);
+     *
+     * async function lsExample() {
+     *   const { stdout, stderr } = await exec('ls');
+     *   console.log('stdout:', stdout);
+     *   console.error('stderr:', stderr);
+     * }
+     * lsExample();
+     * ```
+     *
+     * If the `signal` option is enabled, calling `.abort()` on the corresponding `AbortController` is similar to calling `.kill()` on the child process except
+     * the error passed to the callback will be an `AbortError`:
+     *
+     * ```js
+     * import { exec } from 'node:child_process';
+     * const controller = new AbortController();
+     * const { signal } = controller;
+     * const child = exec('grep ssh', { signal }, (error) => {
+     *   console.error(error); // an AbortError
+     * });
+     * controller.abort();
+     * ```
+     * @since v0.1.90
+     * @param command The command to run, with space-separated arguments.
+     * @param callback called with the output when process terminates.
+     */
+    function exec(
+        command: string,
+        callback?: (error: ExecException | null, stdout: string, stderr: string) => void,
+    ): ChildProcess;
+    // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`.
+    function exec(
+        command: string,
+        options: ExecOptionsWithBufferEncoding,
+        callback?: (error: ExecException | null, stdout: NonSharedBuffer, stderr: NonSharedBuffer) => void,
+    ): ChildProcess;
+    // `options` with well-known or absent `encoding` means stdout/stderr are definitely `string`.
+    function exec(
+        command: string,
+        options: ExecOptionsWithStringEncoding,
+        callback?: (error: ExecException | null, stdout: string, stderr: string) => void,
+    ): ChildProcess;
+    // fallback if nothing else matches. Worst case is always `string | Buffer`.
+    function exec(
+        command: string,
+        options: ExecOptions | undefined | null,
+        callback?: (
+            error: ExecException | null,
+            stdout: string | NonSharedBuffer,
+            stderr: string | NonSharedBuffer,
+        ) => void,
+    ): ChildProcess;
+    interface PromiseWithChild extends Promise {
+        child: ChildProcess;
+    }
+    namespace exec {
+        function __promisify__(command: string): PromiseWithChild<{
+            stdout: string;
+            stderr: string;
+        }>;
+        function __promisify__(
+            command: string,
+            options: ExecOptionsWithBufferEncoding,
+        ): PromiseWithChild<{
+            stdout: NonSharedBuffer;
+            stderr: NonSharedBuffer;
+        }>;
+        function __promisify__(
+            command: string,
+            options: ExecOptionsWithStringEncoding,
+        ): PromiseWithChild<{
+            stdout: string;
+            stderr: string;
+        }>;
+        function __promisify__(
+            command: string,
+            options: ExecOptions | undefined | null,
+        ): PromiseWithChild<{
+            stdout: string | NonSharedBuffer;
+            stderr: string | NonSharedBuffer;
+        }>;
+    }
+    interface ExecFileOptions extends CommonOptions, Abortable {
+        maxBuffer?: number | undefined;
+        killSignal?: NodeJS.Signals | number | undefined;
+        windowsVerbatimArguments?: boolean | undefined;
+        shell?: boolean | string | undefined;
+        signal?: AbortSignal | undefined;
+        encoding?: string | null | undefined;
+    }
+    interface ExecFileOptionsWithStringEncoding extends ExecFileOptions {
+        encoding?: BufferEncoding | undefined;
+    }
+    interface ExecFileOptionsWithBufferEncoding extends ExecFileOptions {
+        encoding: "buffer" | null;
+    }
+    /** @deprecated Use `ExecFileOptions` instead. */
+    interface ExecFileOptionsWithOtherEncoding extends ExecFileOptions {}
+    // TODO: execFile exceptions can take many forms... this accurately describes none of them
+    type ExecFileException =
+        & Omit
+        & Omit
+        & { code?: string | number | null };
+    /**
+     * The `child_process.execFile()` function is similar to {@link exec} except that it does not spawn a shell by default. Rather, the specified
+     * executable `file` is spawned directly as a new process making it slightly more
+     * efficient than {@link exec}.
+     *
+     * The same options as {@link exec} are supported. Since a shell is
+     * not spawned, behaviors such as I/O redirection and file globbing are not
+     * supported.
+     *
+     * ```js
+     * import { execFile } from 'node:child_process';
+     * const child = execFile('node', ['--version'], (error, stdout, stderr) => {
+     *   if (error) {
+     *     throw error;
+     *   }
+     *   console.log(stdout);
+     * });
+     * ```
+     *
+     * The `stdout` and `stderr` arguments passed to the callback will contain the
+     * stdout and stderr output of the child process. By default, Node.js will decode
+     * the output as UTF-8 and pass strings to the callback. The `encoding` option
+     * can be used to specify the character encoding used to decode the stdout and
+     * stderr output. If `encoding` is `'buffer'`, or an unrecognized character
+     * encoding, `Buffer` objects will be passed to the callback instead.
+     *
+     * If this method is invoked as its `util.promisify()` ed version, it returns
+     * a `Promise` for an `Object` with `stdout` and `stderr` properties. The returned `ChildProcess` instance is attached to the `Promise` as a `child` property. In
+     * case of an error (including any error resulting in an exit code other than 0), a
+     * rejected promise is returned, with the same `error` object given in the
+     * callback, but with two additional properties `stdout` and `stderr`.
+     *
+     * ```js
+     * import util from 'node:util';
+     * import child_process from 'node:child_process';
+     * const execFile = util.promisify(child_process.execFile);
+     * async function getVersion() {
+     *   const { stdout } = await execFile('node', ['--version']);
+     *   console.log(stdout);
+     * }
+     * getVersion();
+     * ```
+     *
+     * **If the `shell` option is enabled, do not pass unsanitized user input to this**
+     * **function. Any input containing shell metacharacters may be used to trigger**
+     * **arbitrary command execution.**
+     *
+     * If the `signal` option is enabled, calling `.abort()` on the corresponding `AbortController` is similar to calling `.kill()` on the child process except
+     * the error passed to the callback will be an `AbortError`:
+     *
+     * ```js
+     * import { execFile } from 'node:child_process';
+     * const controller = new AbortController();
+     * const { signal } = controller;
+     * const child = execFile('node', ['--version'], { signal }, (error) => {
+     *   console.error(error); // an AbortError
+     * });
+     * controller.abort();
+     * ```
+     * @since v0.1.91
+     * @param file The name or path of the executable file to run.
+     * @param args List of string arguments.
+     * @param callback Called with the output when process terminates.
+     */
+    // no `options` definitely means stdout/stderr are `string`.
+    function execFile(
+        file: string,
+        callback?: (error: ExecFileException | null, stdout: string, stderr: string) => void,
+    ): ChildProcess;
+    function execFile(
+        file: string,
+        args: readonly string[] | undefined | null,
+        callback?: (error: ExecFileException | null, stdout: string, stderr: string) => void,
+    ): ChildProcess;
+    // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`.
+    function execFile(
+        file: string,
+        options: ExecFileOptionsWithBufferEncoding,
+        callback?: (error: ExecFileException | null, stdout: NonSharedBuffer, stderr: NonSharedBuffer) => void,
+    ): ChildProcess;
+    function execFile(
+        file: string,
+        args: readonly string[] | undefined | null,
+        options: ExecFileOptionsWithBufferEncoding,
+        callback?: (error: ExecFileException | null, stdout: NonSharedBuffer, stderr: NonSharedBuffer) => void,
+    ): ChildProcess;
+    // `options` with well-known or absent `encoding` means stdout/stderr are definitely `string`.
+    function execFile(
+        file: string,
+        options: ExecFileOptionsWithStringEncoding,
+        callback?: (error: ExecFileException | null, stdout: string, stderr: string) => void,
+    ): ChildProcess;
+    function execFile(
+        file: string,
+        args: readonly string[] | undefined | null,
+        options: ExecFileOptionsWithStringEncoding,
+        callback?: (error: ExecFileException | null, stdout: string, stderr: string) => void,
+    ): ChildProcess;
+    // fallback if nothing else matches. Worst case is always `string | Buffer`.
+    function execFile(
+        file: string,
+        options: ExecFileOptions | undefined | null,
+        callback:
+            | ((
+                error: ExecFileException | null,
+                stdout: string | NonSharedBuffer,
+                stderr: string | NonSharedBuffer,
+            ) => void)
+            | undefined
+            | null,
+    ): ChildProcess;
+    function execFile(
+        file: string,
+        args: readonly string[] | undefined | null,
+        options: ExecFileOptions | undefined | null,
+        callback:
+            | ((
+                error: ExecFileException | null,
+                stdout: string | NonSharedBuffer,
+                stderr: string | NonSharedBuffer,
+            ) => void)
+            | undefined
+            | null,
+    ): ChildProcess;
+    namespace execFile {
+        function __promisify__(file: string): PromiseWithChild<{
+            stdout: string;
+            stderr: string;
+        }>;
+        function __promisify__(
+            file: string,
+            args: readonly string[] | undefined | null,
+        ): PromiseWithChild<{
+            stdout: string;
+            stderr: string;
+        }>;
+        function __promisify__(
+            file: string,
+            options: ExecFileOptionsWithBufferEncoding,
+        ): PromiseWithChild<{
+            stdout: NonSharedBuffer;
+            stderr: NonSharedBuffer;
+        }>;
+        function __promisify__(
+            file: string,
+            args: readonly string[] | undefined | null,
+            options: ExecFileOptionsWithBufferEncoding,
+        ): PromiseWithChild<{
+            stdout: NonSharedBuffer;
+            stderr: NonSharedBuffer;
+        }>;
+        function __promisify__(
+            file: string,
+            options: ExecFileOptionsWithStringEncoding,
+        ): PromiseWithChild<{
+            stdout: string;
+            stderr: string;
+        }>;
+        function __promisify__(
+            file: string,
+            args: readonly string[] | undefined | null,
+            options: ExecFileOptionsWithStringEncoding,
+        ): PromiseWithChild<{
+            stdout: string;
+            stderr: string;
+        }>;
+        function __promisify__(
+            file: string,
+            options: ExecFileOptions | undefined | null,
+        ): PromiseWithChild<{
+            stdout: string | NonSharedBuffer;
+            stderr: string | NonSharedBuffer;
+        }>;
+        function __promisify__(
+            file: string,
+            args: readonly string[] | undefined | null,
+            options: ExecFileOptions | undefined | null,
+        ): PromiseWithChild<{
+            stdout: string | NonSharedBuffer;
+            stderr: string | NonSharedBuffer;
+        }>;
+    }
+    interface ForkOptions extends ProcessEnvOptions, MessagingOptions, Abortable {
+        execPath?: string | undefined;
+        execArgv?: string[] | undefined;
+        silent?: boolean | undefined;
+        /**
+         * Can be set to 'pipe', 'inherit', 'overlapped', or 'ignore', or an array of these strings.
+         * If passed as an array, the first element is used for `stdin`, the second for
+         * `stdout`, and the third for `stderr`. A fourth element can be used to
+         * specify the `stdio` behavior beyond the standard streams. See
+         * {@link ChildProcess.stdio} for more information.
+         *
+         * @default 'pipe'
+         */
+        stdio?: StdioOptions | undefined;
+        detached?: boolean | undefined;
+        windowsVerbatimArguments?: boolean | undefined;
+    }
+    /**
+     * The `child_process.fork()` method is a special case of {@link spawn} used specifically to spawn new Node.js processes.
+     * Like {@link spawn}, a `ChildProcess` object is returned. The
+     * returned `ChildProcess` will have an additional communication channel
+     * built-in that allows messages to be passed back and forth between the parent and
+     * child. See `subprocess.send()` for details.
+     *
+     * Keep in mind that spawned Node.js child processes are
+     * independent of the parent with exception of the IPC communication channel
+     * that is established between the two. Each process has its own memory, with
+     * their own V8 instances. Because of the additional resource allocations
+     * required, spawning a large number of child Node.js processes is not
+     * recommended.
+     *
+     * By default, `child_process.fork()` will spawn new Node.js instances using the `process.execPath` of the parent process. The `execPath` property in the `options` object allows for an alternative
+     * execution path to be used.
+     *
+     * Node.js processes launched with a custom `execPath` will communicate with the
+     * parent process using the file descriptor (fd) identified using the
+     * environment variable `NODE_CHANNEL_FD` on the child process.
+     *
+     * Unlike the [`fork(2)`](http://man7.org/linux/man-pages/man2/fork.2.html) POSIX system call, `child_process.fork()` does not clone the
+     * current process.
+     *
+     * The `shell` option available in {@link spawn} is not supported by `child_process.fork()` and will be ignored if set.
+     *
+     * If the `signal` option is enabled, calling `.abort()` on the corresponding `AbortController` is similar to calling `.kill()` on the child process except
+     * the error passed to the callback will be an `AbortError`:
+     *
+     * ```js
+     * if (process.argv[2] === 'child') {
+     *   setTimeout(() => {
+     *     console.log(`Hello from ${process.argv[2]}!`);
+     *   }, 1_000);
+     * } else {
+     *   import { fork } from 'node:child_process';
+     *   const controller = new AbortController();
+     *   const { signal } = controller;
+     *   const child = fork(__filename, ['child'], { signal });
+     *   child.on('error', (err) => {
+     *     // This will be called with err being an AbortError if the controller aborts
+     *   });
+     *   controller.abort(); // Stops the child process
+     * }
+     * ```
+     * @since v0.5.0
+     * @param modulePath The module to run in the child.
+     * @param args List of string arguments.
+     */
+    function fork(modulePath: string | URL, options?: ForkOptions): ChildProcess;
+    function fork(modulePath: string | URL, args?: readonly string[], options?: ForkOptions): ChildProcess;
+    interface SpawnSyncOptions extends CommonSpawnOptions {
+        input?: string | NodeJS.ArrayBufferView | undefined;
+        maxBuffer?: number | undefined;
+        encoding?: BufferEncoding | "buffer" | null | undefined;
+    }
+    interface SpawnSyncOptionsWithStringEncoding extends SpawnSyncOptions {
+        encoding: BufferEncoding;
+    }
+    interface SpawnSyncOptionsWithBufferEncoding extends SpawnSyncOptions {
+        encoding?: "buffer" | null | undefined;
+    }
+    interface SpawnSyncReturns {
+        pid: number;
+        output: Array;
+        stdout: T;
+        stderr: T;
+        status: number | null;
+        signal: NodeJS.Signals | null;
+        error?: Error;
+    }
+    /**
+     * The `child_process.spawnSync()` method is generally identical to {@link spawn} with the exception that the function will not return
+     * until the child process has fully closed. When a timeout has been encountered
+     * and `killSignal` is sent, the method won't return until the process has
+     * completely exited. If the process intercepts and handles the `SIGTERM` signal
+     * and doesn't exit, the parent process will wait until the child process has
+     * exited.
+     *
+     * **If the `shell` option is enabled, do not pass unsanitized user input to this**
+     * **function. Any input containing shell metacharacters may be used to trigger**
+     * **arbitrary command execution.**
+     * @since v0.11.12
+     * @param command The command to run.
+     * @param args List of string arguments.
+     */
+    function spawnSync(command: string): SpawnSyncReturns;
+    function spawnSync(command: string, options: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns;
+    function spawnSync(command: string, options: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns;
+    function spawnSync(command: string, options?: SpawnSyncOptions): SpawnSyncReturns;
+    function spawnSync(command: string, args: readonly string[]): SpawnSyncReturns;
+    function spawnSync(
+        command: string,
+        args: readonly string[],
+        options: SpawnSyncOptionsWithStringEncoding,
+    ): SpawnSyncReturns;
+    function spawnSync(
+        command: string,
+        args: readonly string[],
+        options: SpawnSyncOptionsWithBufferEncoding,
+    ): SpawnSyncReturns;
+    function spawnSync(
+        command: string,
+        args?: readonly string[],
+        options?: SpawnSyncOptions,
+    ): SpawnSyncReturns;
+    interface CommonExecOptions extends CommonOptions {
+        input?: string | NodeJS.ArrayBufferView | undefined;
+        /**
+         * Can be set to 'pipe', 'inherit, or 'ignore', or an array of these strings.
+         * If passed as an array, the first element is used for `stdin`, the second for
+         * `stdout`, and the third for `stderr`. A fourth element can be used to
+         * specify the `stdio` behavior beyond the standard streams. See
+         * {@link ChildProcess.stdio} for more information.
+         *
+         * @default 'pipe'
+         */
+        stdio?: StdioOptions | undefined;
+        killSignal?: NodeJS.Signals | number | undefined;
+        maxBuffer?: number | undefined;
+        encoding?: BufferEncoding | "buffer" | null | undefined;
+    }
+    interface ExecSyncOptions extends CommonExecOptions {
+        shell?: string | undefined;
+    }
+    interface ExecSyncOptionsWithStringEncoding extends ExecSyncOptions {
+        encoding: BufferEncoding;
+    }
+    interface ExecSyncOptionsWithBufferEncoding extends ExecSyncOptions {
+        encoding?: "buffer" | null | undefined;
+    }
+    /**
+     * The `child_process.execSync()` method is generally identical to {@link exec} with the exception that the method will not return
+     * until the child process has fully closed. When a timeout has been encountered
+     * and `killSignal` is sent, the method won't return until the process has
+     * completely exited. If the child process intercepts and handles the `SIGTERM` signal and doesn't exit, the parent process will wait until the child process
+     * has exited.
+     *
+     * If the process times out or has a non-zero exit code, this method will throw.
+     * The `Error` object will contain the entire result from {@link spawnSync}.
+     *
+     * **Never pass unsanitized user input to this function. Any input containing shell**
+     * **metacharacters may be used to trigger arbitrary command execution.**
+     * @since v0.11.12
+     * @param command The command to run.
+     * @return The stdout from the command.
+     */
+    function execSync(command: string): NonSharedBuffer;
+    function execSync(command: string, options: ExecSyncOptionsWithStringEncoding): string;
+    function execSync(command: string, options: ExecSyncOptionsWithBufferEncoding): NonSharedBuffer;
+    function execSync(command: string, options?: ExecSyncOptions): string | NonSharedBuffer;
+    interface ExecFileSyncOptions extends CommonExecOptions {
+        shell?: boolean | string | undefined;
+    }
+    interface ExecFileSyncOptionsWithStringEncoding extends ExecFileSyncOptions {
+        encoding: BufferEncoding;
+    }
+    interface ExecFileSyncOptionsWithBufferEncoding extends ExecFileSyncOptions {
+        encoding?: "buffer" | null | undefined; // specify `null`.
+    }
+    /**
+     * The `child_process.execFileSync()` method is generally identical to {@link execFile} with the exception that the method will not
+     * return until the child process has fully closed. When a timeout has been
+     * encountered and `killSignal` is sent, the method won't return until the process
+     * has completely exited.
+     *
+     * If the child process intercepts and handles the `SIGTERM` signal and
+     * does not exit, the parent process will still wait until the child process has
+     * exited.
+     *
+     * If the process times out or has a non-zero exit code, this method will throw an `Error` that will include the full result of the underlying {@link spawnSync}.
+     *
+     * **If the `shell` option is enabled, do not pass unsanitized user input to this**
+     * **function. Any input containing shell metacharacters may be used to trigger**
+     * **arbitrary command execution.**
+     * @since v0.11.12
+     * @param file The name or path of the executable file to run.
+     * @param args List of string arguments.
+     * @return The stdout from the command.
+     */
+    function execFileSync(file: string): NonSharedBuffer;
+    function execFileSync(file: string, options: ExecFileSyncOptionsWithStringEncoding): string;
+    function execFileSync(file: string, options: ExecFileSyncOptionsWithBufferEncoding): NonSharedBuffer;
+    function execFileSync(file: string, options?: ExecFileSyncOptions): string | NonSharedBuffer;
+    function execFileSync(file: string, args: readonly string[]): NonSharedBuffer;
+    function execFileSync(
+        file: string,
+        args: readonly string[],
+        options: ExecFileSyncOptionsWithStringEncoding,
+    ): string;
+    function execFileSync(
+        file: string,
+        args: readonly string[],
+        options: ExecFileSyncOptionsWithBufferEncoding,
+    ): NonSharedBuffer;
+    function execFileSync(
+        file: string,
+        args?: readonly string[],
+        options?: ExecFileSyncOptions,
+    ): string | NonSharedBuffer;
+}
+declare module "node:child_process" {
+    export * from "child_process";
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/cluster.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/cluster.d.ts
new file mode 100644
index 00000000..cdbc2190
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/cluster.d.ts
@@ -0,0 +1,578 @@
+/**
+ * Clusters of Node.js processes can be used to run multiple instances of Node.js
+ * that can distribute workloads among their application threads. When process isolation
+ * is not needed, use the [`worker_threads`](https://nodejs.org/docs/latest-v24.x/api/worker_threads.html)
+ * module instead, which allows running multiple application threads within a single Node.js instance.
+ *
+ * The cluster module allows easy creation of child processes that all share
+ * server ports.
+ *
+ * ```js
+ * import cluster from 'node:cluster';
+ * import http from 'node:http';
+ * import { availableParallelism } from 'node:os';
+ * import process from 'node:process';
+ *
+ * const numCPUs = availableParallelism();
+ *
+ * if (cluster.isPrimary) {
+ *   console.log(`Primary ${process.pid} is running`);
+ *
+ *   // Fork workers.
+ *   for (let i = 0; i < numCPUs; i++) {
+ *     cluster.fork();
+ *   }
+ *
+ *   cluster.on('exit', (worker, code, signal) => {
+ *     console.log(`worker ${worker.process.pid} died`);
+ *   });
+ * } else {
+ *   // Workers can share any TCP connection
+ *   // In this case it is an HTTP server
+ *   http.createServer((req, res) => {
+ *     res.writeHead(200);
+ *     res.end('hello world\n');
+ *   }).listen(8000);
+ *
+ *   console.log(`Worker ${process.pid} started`);
+ * }
+ * ```
+ *
+ * Running Node.js will now share port 8000 between the workers:
+ *
+ * ```console
+ * $ node server.js
+ * Primary 3596 is running
+ * Worker 4324 started
+ * Worker 4520 started
+ * Worker 6056 started
+ * Worker 5644 started
+ * ```
+ *
+ * On Windows, it is not yet possible to set up a named pipe server in a worker.
+ * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/cluster.js)
+ */
+declare module "cluster" {
+    import * as child from "node:child_process";
+    import EventEmitter = require("node:events");
+    import * as net from "node:net";
+    type SerializationType = "json" | "advanced";
+    export interface ClusterSettings {
+        /**
+         * List of string arguments passed to the Node.js executable.
+         * @default process.execArgv
+         */
+        execArgv?: string[] | undefined;
+        /**
+         * File path to worker file.
+         * @default process.argv[1]
+         */
+        exec?: string | undefined;
+        /**
+         * String arguments passed to worker.
+         * @default process.argv.slice(2)
+         */
+        args?: readonly string[] | undefined;
+        /**
+         * Whether or not to send output to parent's stdio.
+         * @default false
+         */
+        silent?: boolean | undefined;
+        /**
+         * Configures the stdio of forked processes. Because the cluster module relies on IPC to function, this configuration must
+         * contain an `'ipc'` entry. When this option is provided, it overrides `silent`. See [`child_prcess.spawn()`](https://nodejs.org/docs/latest-v24.x/api/child_process.html#child_processspawncommand-args-options)'s
+         * [`stdio`](https://nodejs.org/docs/latest-v24.x/api/child_process.html#optionsstdio).
+         */
+        stdio?: any[] | undefined;
+        /**
+         * Sets the user identity of the process. (See [`setuid(2)`](https://man7.org/linux/man-pages/man2/setuid.2.html).)
+         */
+        uid?: number | undefined;
+        /**
+         * Sets the group identity of the process. (See [`setgid(2)`](https://man7.org/linux/man-pages/man2/setgid.2.html).)
+         */
+        gid?: number | undefined;
+        /**
+         * Sets inspector port of worker. This can be a number, or a function that takes no arguments and returns a number.
+         * By default each worker gets its own port, incremented from the primary's `process.debugPort`.
+         */
+        inspectPort?: number | (() => number) | undefined;
+        /**
+         * Specify the kind of serialization used for sending messages between processes. Possible values are `'json'` and `'advanced'`.
+         * See [Advanced serialization for `child_process`](https://nodejs.org/docs/latest-v24.x/api/child_process.html#advanced-serialization) for more details.
+         * @default false
+         */
+        serialization?: SerializationType | undefined;
+        /**
+         * Current working directory of the worker process.
+         * @default undefined (inherits from parent process)
+         */
+        cwd?: string | undefined;
+        /**
+         * Hide the forked processes console window that would normally be created on Windows systems.
+         * @default false
+         */
+        windowsHide?: boolean | undefined;
+    }
+    export interface Address {
+        address: string;
+        port: number;
+        /**
+         * The `addressType` is one of:
+         *
+         * * `4` (TCPv4)
+         * * `6` (TCPv6)
+         * * `-1` (Unix domain socket)
+         * * `'udp4'` or `'udp6'` (UDPv4 or UDPv6)
+         */
+        addressType: 4 | 6 | -1 | "udp4" | "udp6";
+    }
+    /**
+     * A `Worker` object contains all public information and method about a worker.
+     * In the primary it can be obtained using `cluster.workers`. In a worker
+     * it can be obtained using `cluster.worker`.
+     * @since v0.7.0
+     */
+    export class Worker extends EventEmitter {
+        /**
+         * Each new worker is given its own unique id, this id is stored in the `id`.
+         *
+         * While a worker is alive, this is the key that indexes it in `cluster.workers`.
+         * @since v0.8.0
+         */
+        id: number;
+        /**
+         * All workers are created using [`child_process.fork()`](https://nodejs.org/docs/latest-v24.x/api/child_process.html#child_processforkmodulepath-args-options), the returned object
+         * from this function is stored as `.process`. In a worker, the global `process` is stored.
+         *
+         * See: [Child Process module](https://nodejs.org/docs/latest-v24.x/api/child_process.html#child_processforkmodulepath-args-options).
+         *
+         * Workers will call `process.exit(0)` if the `'disconnect'` event occurs
+         * on `process` and `.exitedAfterDisconnect` is not `true`. This protects against
+         * accidental disconnection.
+         * @since v0.7.0
+         */
+        process: child.ChildProcess;
+        /**
+         * Send a message to a worker or primary, optionally with a handle.
+         *
+         * In the primary, this sends a message to a specific worker. It is identical to [`ChildProcess.send()`](https://nodejs.org/docs/latest-v24.x/api/child_process.html#subprocesssendmessage-sendhandle-options-callback).
+         *
+         * In a worker, this sends a message to the primary. It is identical to `process.send()`.
+         *
+         * This example will echo back all messages from the primary:
+         *
+         * ```js
+         * if (cluster.isPrimary) {
+         *   const worker = cluster.fork();
+         *   worker.send('hi there');
+         *
+         * } else if (cluster.isWorker) {
+         *   process.on('message', (msg) => {
+         *     process.send(msg);
+         *   });
+         * }
+         * ```
+         * @since v0.7.0
+         * @param options The `options` argument, if present, is an object used to parameterize the sending of certain types of handles.
+         */
+        send(message: child.Serializable, callback?: (error: Error | null) => void): boolean;
+        send(
+            message: child.Serializable,
+            sendHandle: child.SendHandle,
+            callback?: (error: Error | null) => void,
+        ): boolean;
+        send(
+            message: child.Serializable,
+            sendHandle: child.SendHandle,
+            options?: child.MessageOptions,
+            callback?: (error: Error | null) => void,
+        ): boolean;
+        /**
+         * This function will kill the worker. In the primary worker, it does this by
+         * disconnecting the `worker.process`, and once disconnected, killing with `signal`. In the worker, it does it by killing the process with `signal`.
+         *
+         * The `kill()` function kills the worker process without waiting for a graceful
+         * disconnect, it has the same behavior as `worker.process.kill()`.
+         *
+         * This method is aliased as `worker.destroy()` for backwards compatibility.
+         *
+         * In a worker, `process.kill()` exists, but it is not this function;
+         * it is [`kill()`](https://nodejs.org/docs/latest-v24.x/api/process.html#processkillpid-signal).
+         * @since v0.9.12
+         * @param [signal='SIGTERM'] Name of the kill signal to send to the worker process.
+         */
+        kill(signal?: string): void;
+        destroy(signal?: string): void;
+        /**
+         * In a worker, this function will close all servers, wait for the `'close'` event
+         * on those servers, and then disconnect the IPC channel.
+         *
+         * In the primary, an internal message is sent to the worker causing it to call `.disconnect()` on itself.
+         *
+         * Causes `.exitedAfterDisconnect` to be set.
+         *
+         * After a server is closed, it will no longer accept new connections,
+         * but connections may be accepted by any other listening worker. Existing
+         * connections will be allowed to close as usual. When no more connections exist,
+         * see `server.close()`, the IPC channel to the worker will close allowing it
+         * to die gracefully.
+         *
+         * The above applies _only_ to server connections, client connections are not
+         * automatically closed by workers, and disconnect does not wait for them to close
+         * before exiting.
+         *
+         * In a worker, `process.disconnect` exists, but it is not this function;
+         * it is `disconnect()`.
+         *
+         * Because long living server connections may block workers from disconnecting, it
+         * may be useful to send a message, so application specific actions may be taken to
+         * close them. It also may be useful to implement a timeout, killing a worker if
+         * the `'disconnect'` event has not been emitted after some time.
+         *
+         * ```js
+         * import net from 'node:net';
+         *
+         * if (cluster.isPrimary) {
+         *   const worker = cluster.fork();
+         *   let timeout;
+         *
+         *   worker.on('listening', (address) => {
+         *     worker.send('shutdown');
+         *     worker.disconnect();
+         *     timeout = setTimeout(() => {
+         *       worker.kill();
+         *     }, 2000);
+         *   });
+         *
+         *   worker.on('disconnect', () => {
+         *     clearTimeout(timeout);
+         *   });
+         *
+         * } else if (cluster.isWorker) {
+         *   const server = net.createServer((socket) => {
+         *     // Connections never end
+         *   });
+         *
+         *   server.listen(8000);
+         *
+         *   process.on('message', (msg) => {
+         *     if (msg === 'shutdown') {
+         *       // Initiate graceful close of any connections to server
+         *     }
+         *   });
+         * }
+         * ```
+         * @since v0.7.7
+         * @return A reference to `worker`.
+         */
+        disconnect(): this;
+        /**
+         * This function returns `true` if the worker is connected to its primary via its
+         * IPC channel, `false` otherwise. A worker is connected to its primary after it
+         * has been created. It is disconnected after the `'disconnect'` event is emitted.
+         * @since v0.11.14
+         */
+        isConnected(): boolean;
+        /**
+         * This function returns `true` if the worker's process has terminated (either
+         * because of exiting or being signaled). Otherwise, it returns `false`.
+         *
+         * ```js
+         * import cluster from 'node:cluster';
+         * import http from 'node:http';
+         * import { availableParallelism } from 'node:os';
+         * import process from 'node:process';
+         *
+         * const numCPUs = availableParallelism();
+         *
+         * if (cluster.isPrimary) {
+         *   console.log(`Primary ${process.pid} is running`);
+         *
+         *   // Fork workers.
+         *   for (let i = 0; i < numCPUs; i++) {
+         *     cluster.fork();
+         *   }
+         *
+         *   cluster.on('fork', (worker) => {
+         *     console.log('worker is dead:', worker.isDead());
+         *   });
+         *
+         *   cluster.on('exit', (worker, code, signal) => {
+         *     console.log('worker is dead:', worker.isDead());
+         *   });
+         * } else {
+         *   // Workers can share any TCP connection. In this case, it is an HTTP server.
+         *   http.createServer((req, res) => {
+         *     res.writeHead(200);
+         *     res.end(`Current process\n ${process.pid}`);
+         *     process.kill(process.pid);
+         *   }).listen(8000);
+         * }
+         * ```
+         * @since v0.11.14
+         */
+        isDead(): boolean;
+        /**
+         * This property is `true` if the worker exited due to `.disconnect()`.
+         * If the worker exited any other way, it is `false`. If the
+         * worker has not exited, it is `undefined`.
+         *
+         * The boolean `worker.exitedAfterDisconnect` allows distinguishing between
+         * voluntary and accidental exit, the primary may choose not to respawn a worker
+         * based on this value.
+         *
+         * ```js
+         * cluster.on('exit', (worker, code, signal) => {
+         *   if (worker.exitedAfterDisconnect === true) {
+         *     console.log('Oh, it was just voluntary – no need to worry');
+         *   }
+         * });
+         *
+         * // kill worker
+         * worker.kill();
+         * ```
+         * @since v6.0.0
+         */
+        exitedAfterDisconnect: boolean;
+        /**
+         * events.EventEmitter
+         *   1. disconnect
+         *   2. error
+         *   3. exit
+         *   4. listening
+         *   5. message
+         *   6. online
+         */
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        addListener(event: "disconnect", listener: () => void): this;
+        addListener(event: "error", listener: (error: Error) => void): this;
+        addListener(event: "exit", listener: (code: number, signal: string) => void): this;
+        addListener(event: "listening", listener: (address: Address) => void): this;
+        addListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+        addListener(event: "online", listener: () => void): this;
+        emit(event: string | symbol, ...args: any[]): boolean;
+        emit(event: "disconnect"): boolean;
+        emit(event: "error", error: Error): boolean;
+        emit(event: "exit", code: number, signal: string): boolean;
+        emit(event: "listening", address: Address): boolean;
+        emit(event: "message", message: any, handle: net.Socket | net.Server): boolean;
+        emit(event: "online"): boolean;
+        on(event: string, listener: (...args: any[]) => void): this;
+        on(event: "disconnect", listener: () => void): this;
+        on(event: "error", listener: (error: Error) => void): this;
+        on(event: "exit", listener: (code: number, signal: string) => void): this;
+        on(event: "listening", listener: (address: Address) => void): this;
+        on(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+        on(event: "online", listener: () => void): this;
+        once(event: string, listener: (...args: any[]) => void): this;
+        once(event: "disconnect", listener: () => void): this;
+        once(event: "error", listener: (error: Error) => void): this;
+        once(event: "exit", listener: (code: number, signal: string) => void): this;
+        once(event: "listening", listener: (address: Address) => void): this;
+        once(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+        once(event: "online", listener: () => void): this;
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependListener(event: "disconnect", listener: () => void): this;
+        prependListener(event: "error", listener: (error: Error) => void): this;
+        prependListener(event: "exit", listener: (code: number, signal: string) => void): this;
+        prependListener(event: "listening", listener: (address: Address) => void): this;
+        prependListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+        prependListener(event: "online", listener: () => void): this;
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "disconnect", listener: () => void): this;
+        prependOnceListener(event: "error", listener: (error: Error) => void): this;
+        prependOnceListener(event: "exit", listener: (code: number, signal: string) => void): this;
+        prependOnceListener(event: "listening", listener: (address: Address) => void): this;
+        prependOnceListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+        prependOnceListener(event: "online", listener: () => void): this;
+    }
+    export interface Cluster extends EventEmitter {
+        disconnect(callback?: () => void): void;
+        /**
+         * Spawn a new worker process.
+         *
+         * This can only be called from the primary process.
+         * @param env Key/value pairs to add to worker process environment.
+         * @since v0.6.0
+         */
+        fork(env?: any): Worker;
+        /** @deprecated since v16.0.0 - use isPrimary. */
+        readonly isMaster: boolean;
+        /**
+         * True if the process is a primary. This is determined by the `process.env.NODE_UNIQUE_ID`. If `process.env.NODE_UNIQUE_ID`
+         * is undefined, then `isPrimary` is `true`.
+         * @since v16.0.0
+         */
+        readonly isPrimary: boolean;
+        /**
+         * True if the process is not a primary (it is the negation of `cluster.isPrimary`).
+         * @since v0.6.0
+         */
+        readonly isWorker: boolean;
+        /**
+         * The scheduling policy, either `cluster.SCHED_RR` for round-robin or `cluster.SCHED_NONE` to leave it to the operating system. This is a
+         * global setting and effectively frozen once either the first worker is spawned, or [`.setupPrimary()`](https://nodejs.org/docs/latest-v24.x/api/cluster.html#clustersetupprimarysettings)
+         * is called, whichever comes first.
+         *
+         * `SCHED_RR` is the default on all operating systems except Windows. Windows will change to `SCHED_RR` once libuv is able to effectively distribute
+         * IOCP handles without incurring a large performance hit.
+         *
+         * `cluster.schedulingPolicy` can also be set through the `NODE_CLUSTER_SCHED_POLICY` environment variable. Valid values are `'rr'` and `'none'`.
+         * @since v0.11.2
+         */
+        schedulingPolicy: number;
+        /**
+         * After calling [`.setupPrimary()`](https://nodejs.org/docs/latest-v24.x/api/cluster.html#clustersetupprimarysettings)
+         * (or [`.fork()`](https://nodejs.org/docs/latest-v24.x/api/cluster.html#clusterforkenv)) this settings object will contain
+         * the settings, including the default values.
+         *
+         * This object is not intended to be changed or set manually.
+         * @since v0.7.1
+         */
+        readonly settings: ClusterSettings;
+        /** @deprecated since v16.0.0 - use [`.setupPrimary()`](https://nodejs.org/docs/latest-v24.x/api/cluster.html#clustersetupprimarysettings) instead. */
+        setupMaster(settings?: ClusterSettings): void;
+        /**
+         * `setupPrimary` is used to change the default 'fork' behavior. Once called, the settings will be present in `cluster.settings`.
+         *
+         * Any settings changes only affect future calls to [`.fork()`](https://nodejs.org/docs/latest-v24.x/api/cluster.html#clusterforkenv)
+         * and have no effect on workers that are already running.
+         *
+         * The only attribute of a worker that cannot be set via `.setupPrimary()` is the `env` passed to
+         * [`.fork()`](https://nodejs.org/docs/latest-v24.x/api/cluster.html#clusterforkenv).
+         *
+         * The defaults above apply to the first call only; the defaults for later calls are the current values at the time of
+         * `cluster.setupPrimary()` is called.
+         *
+         * ```js
+         * import cluster from 'node:cluster';
+         *
+         * cluster.setupPrimary({
+         *   exec: 'worker.js',
+         *   args: ['--use', 'https'],
+         *   silent: true,
+         * });
+         * cluster.fork(); // https worker
+         * cluster.setupPrimary({
+         *   exec: 'worker.js',
+         *   args: ['--use', 'http'],
+         * });
+         * cluster.fork(); // http worker
+         * ```
+         *
+         * This can only be called from the primary process.
+         * @since v16.0.0
+         */
+        setupPrimary(settings?: ClusterSettings): void;
+        /**
+         * A reference to the current worker object. Not available in the primary process.
+         *
+         * ```js
+         * import cluster from 'node:cluster';
+         *
+         * if (cluster.isPrimary) {
+         *   console.log('I am primary');
+         *   cluster.fork();
+         *   cluster.fork();
+         * } else if (cluster.isWorker) {
+         *   console.log(`I am worker #${cluster.worker.id}`);
+         * }
+         * ```
+         * @since v0.7.0
+         */
+        readonly worker?: Worker;
+        /**
+         * A hash that stores the active worker objects, keyed by `id` field. This makes it easy to loop through all the workers. It is only available in the primary process.
+         *
+         * A worker is removed from `cluster.workers` after the worker has disconnected _and_ exited. The order between these two events cannot be determined in advance. However, it
+         * is guaranteed that the removal from the `cluster.workers` list happens before the last `'disconnect'` or `'exit'` event is emitted.
+         *
+         * ```js
+         * import cluster from 'node:cluster';
+         *
+         * for (const worker of Object.values(cluster.workers)) {
+         *   worker.send('big announcement to all workers');
+         * }
+         * ```
+         * @since v0.7.0
+         */
+        readonly workers?: NodeJS.Dict;
+        readonly SCHED_NONE: number;
+        readonly SCHED_RR: number;
+        /**
+         * events.EventEmitter
+         *   1. disconnect
+         *   2. exit
+         *   3. fork
+         *   4. listening
+         *   5. message
+         *   6. online
+         *   7. setup
+         */
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        addListener(event: "disconnect", listener: (worker: Worker) => void): this;
+        addListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+        addListener(event: "fork", listener: (worker: Worker) => void): this;
+        addListener(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+        addListener(
+            event: "message",
+            listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void,
+        ): this; // the handle is a net.Socket or net.Server object, or undefined.
+        addListener(event: "online", listener: (worker: Worker) => void): this;
+        addListener(event: "setup", listener: (settings: ClusterSettings) => void): this;
+        emit(event: string | symbol, ...args: any[]): boolean;
+        emit(event: "disconnect", worker: Worker): boolean;
+        emit(event: "exit", worker: Worker, code: number, signal: string): boolean;
+        emit(event: "fork", worker: Worker): boolean;
+        emit(event: "listening", worker: Worker, address: Address): boolean;
+        emit(event: "message", worker: Worker, message: any, handle: net.Socket | net.Server): boolean;
+        emit(event: "online", worker: Worker): boolean;
+        emit(event: "setup", settings: ClusterSettings): boolean;
+        on(event: string, listener: (...args: any[]) => void): this;
+        on(event: "disconnect", listener: (worker: Worker) => void): this;
+        on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+        on(event: "fork", listener: (worker: Worker) => void): this;
+        on(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+        on(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+        on(event: "online", listener: (worker: Worker) => void): this;
+        on(event: "setup", listener: (settings: ClusterSettings) => void): this;
+        once(event: string, listener: (...args: any[]) => void): this;
+        once(event: "disconnect", listener: (worker: Worker) => void): this;
+        once(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+        once(event: "fork", listener: (worker: Worker) => void): this;
+        once(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+        once(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+        once(event: "online", listener: (worker: Worker) => void): this;
+        once(event: "setup", listener: (settings: ClusterSettings) => void): this;
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependListener(event: "disconnect", listener: (worker: Worker) => void): this;
+        prependListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+        prependListener(event: "fork", listener: (worker: Worker) => void): this;
+        prependListener(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+        prependListener(
+            event: "message",
+            listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void,
+        ): this;
+        prependListener(event: "online", listener: (worker: Worker) => void): this;
+        prependListener(event: "setup", listener: (settings: ClusterSettings) => void): this;
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "disconnect", listener: (worker: Worker) => void): this;
+        prependOnceListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+        prependOnceListener(event: "fork", listener: (worker: Worker) => void): this;
+        prependOnceListener(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+        // the handle is a net.Socket or net.Server object, or undefined.
+        prependOnceListener(
+            event: "message",
+            listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void,
+        ): this;
+        prependOnceListener(event: "online", listener: (worker: Worker) => void): this;
+        prependOnceListener(event: "setup", listener: (settings: ClusterSettings) => void): this;
+    }
+    const cluster: Cluster;
+    export default cluster;
+}
+declare module "node:cluster" {
+    export * from "cluster";
+    export { default as default } from "cluster";
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/compatibility/iterators.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/compatibility/iterators.d.ts
new file mode 100644
index 00000000..156e7856
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/compatibility/iterators.d.ts
@@ -0,0 +1,21 @@
+// Backwards-compatible iterator interfaces, augmented with iterator helper methods by lib.esnext.iterator in TypeScript 5.6.
+// The IterableIterator interface does not contain these methods, which creates assignability issues in places where IteratorObjects
+// are expected (eg. DOM-compatible APIs) if lib.esnext.iterator is loaded.
+// Also ensures that iterators returned by the Node API, which inherit from Iterator.prototype, correctly expose the iterator helper methods
+// if lib.esnext.iterator is loaded.
+// TODO: remove once this package no longer supports TS 5.5, and replace NodeJS.BuiltinIteratorReturn with BuiltinIteratorReturn.
+
+// Placeholders for TS <5.6
+interface IteratorObject {}
+interface AsyncIteratorObject {}
+
+declare namespace NodeJS {
+    // Populate iterator methods for TS <5.6
+    interface Iterator extends globalThis.Iterator {}
+    interface AsyncIterator extends globalThis.AsyncIterator {}
+
+    // Polyfill for TS 5.6's instrinsic BuiltinIteratorReturn type, required for DOM-compatible iterators
+    type BuiltinIteratorReturn = ReturnType extends
+        globalThis.Iterator ? TReturn
+        : any;
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/console.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/console.d.ts
new file mode 100644
index 00000000..c923bd0a
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/console.d.ts
@@ -0,0 +1,452 @@
+/**
+ * The `node:console` module provides a simple debugging console that is similar to
+ * the JavaScript console mechanism provided by web browsers.
+ *
+ * The module exports two specific components:
+ *
+ * * A `Console` class with methods such as `console.log()`, `console.error()`, and `console.warn()` that can be used to write to any Node.js stream.
+ * * A global `console` instance configured to write to [`process.stdout`](https://nodejs.org/docs/latest-v24.x/api/process.html#processstdout) and
+ * [`process.stderr`](https://nodejs.org/docs/latest-v24.x/api/process.html#processstderr). The global `console` can be used without importing the `node:console` module.
+ *
+ * _**Warning**_: The global console object's methods are neither consistently
+ * synchronous like the browser APIs they resemble, nor are they consistently
+ * asynchronous like all other Node.js streams. See the [`note on process I/O`](https://nodejs.org/docs/latest-v24.x/api/process.html#a-note-on-process-io) for
+ * more information.
+ *
+ * Example using the global `console`:
+ *
+ * ```js
+ * console.log('hello world');
+ * // Prints: hello world, to stdout
+ * console.log('hello %s', 'world');
+ * // Prints: hello world, to stdout
+ * console.error(new Error('Whoops, something bad happened'));
+ * // Prints error message and stack trace to stderr:
+ * //   Error: Whoops, something bad happened
+ * //     at [eval]:5:15
+ * //     at Script.runInThisContext (node:vm:132:18)
+ * //     at Object.runInThisContext (node:vm:309:38)
+ * //     at node:internal/process/execution:77:19
+ * //     at [eval]-wrapper:6:22
+ * //     at evalScript (node:internal/process/execution:76:60)
+ * //     at node:internal/main/eval_string:23:3
+ *
+ * const name = 'Will Robinson';
+ * console.warn(`Danger ${name}! Danger!`);
+ * // Prints: Danger Will Robinson! Danger!, to stderr
+ * ```
+ *
+ * Example using the `Console` class:
+ *
+ * ```js
+ * const out = getStreamSomehow();
+ * const err = getStreamSomehow();
+ * const myConsole = new console.Console(out, err);
+ *
+ * myConsole.log('hello world');
+ * // Prints: hello world, to out
+ * myConsole.log('hello %s', 'world');
+ * // Prints: hello world, to out
+ * myConsole.error(new Error('Whoops, something bad happened'));
+ * // Prints: [Error: Whoops, something bad happened], to err
+ *
+ * const name = 'Will Robinson';
+ * myConsole.warn(`Danger ${name}! Danger!`);
+ * // Prints: Danger Will Robinson! Danger!, to err
+ * ```
+ * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/console.js)
+ */
+declare module "console" {
+    import console = require("node:console");
+    export = console;
+}
+declare module "node:console" {
+    import { InspectOptions } from "node:util";
+    global {
+        // This needs to be global to avoid TS2403 in case lib.dom.d.ts is present in the same build
+        interface Console {
+            Console: console.ConsoleConstructor;
+            /**
+             * `console.assert()` writes a message if `value` is [falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) or omitted. It only
+             * writes a message and does not otherwise affect execution. The output always
+             * starts with `"Assertion failed"`. If provided, `message` is formatted using
+             * [`util.format()`](https://nodejs.org/docs/latest-v24.x/api/util.html#utilformatformat-args).
+             *
+             * If `value` is [truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy), nothing happens.
+             *
+             * ```js
+             * console.assert(true, 'does nothing');
+             *
+             * console.assert(false, 'Whoops %s work', 'didn\'t');
+             * // Assertion failed: Whoops didn't work
+             *
+             * console.assert();
+             * // Assertion failed
+             * ```
+             * @since v0.1.101
+             * @param value The value tested for being truthy.
+             * @param message All arguments besides `value` are used as error message.
+             */
+            assert(value: any, message?: string, ...optionalParams: any[]): void;
+            /**
+             * When `stdout` is a TTY, calling `console.clear()` will attempt to clear the
+             * TTY. When `stdout` is not a TTY, this method does nothing.
+             *
+             * The specific operation of `console.clear()` can vary across operating systems
+             * and terminal types. For most Linux operating systems, `console.clear()` operates similarly to the `clear` shell command. On Windows, `console.clear()` will clear only the output in the
+             * current terminal viewport for the Node.js
+             * binary.
+             * @since v8.3.0
+             */
+            clear(): void;
+            /**
+             * Maintains an internal counter specific to `label` and outputs to `stdout` the
+             * number of times `console.count()` has been called with the given `label`.
+             *
+             * ```js
+             * > console.count()
+             * default: 1
+             * undefined
+             * > console.count('default')
+             * default: 2
+             * undefined
+             * > console.count('abc')
+             * abc: 1
+             * undefined
+             * > console.count('xyz')
+             * xyz: 1
+             * undefined
+             * > console.count('abc')
+             * abc: 2
+             * undefined
+             * > console.count()
+             * default: 3
+             * undefined
+             * >
+             * ```
+             * @since v8.3.0
+             * @param [label='default'] The display label for the counter.
+             */
+            count(label?: string): void;
+            /**
+             * Resets the internal counter specific to `label`.
+             *
+             * ```js
+             * > console.count('abc');
+             * abc: 1
+             * undefined
+             * > console.countReset('abc');
+             * undefined
+             * > console.count('abc');
+             * abc: 1
+             * undefined
+             * >
+             * ```
+             * @since v8.3.0
+             * @param [label='default'] The display label for the counter.
+             */
+            countReset(label?: string): void;
+            /**
+             * The `console.debug()` function is an alias for {@link log}.
+             * @since v8.0.0
+             */
+            debug(message?: any, ...optionalParams: any[]): void;
+            /**
+             * Uses [`util.inspect()`](https://nodejs.org/docs/latest-v24.x/api/util.html#utilinspectobject-options) on `obj` and prints the resulting string to `stdout`.
+             * This function bypasses any custom `inspect()` function defined on `obj`.
+             * @since v0.1.101
+             */
+            dir(obj: any, options?: InspectOptions): void;
+            /**
+             * This method calls `console.log()` passing it the arguments received.
+             * This method does not produce any XML formatting.
+             * @since v8.0.0
+             */
+            dirxml(...data: any[]): void;
+            /**
+             * Prints to `stderr` with newline. Multiple arguments can be passed, with the
+             * first used as the primary message and all additional used as substitution
+             * values similar to [`printf(3)`](http://man7.org/linux/man-pages/man3/printf.3.html)
+             * (the arguments are all passed to [`util.format()`](https://nodejs.org/docs/latest-v24.x/api/util.html#utilformatformat-args)).
+             *
+             * ```js
+             * const code = 5;
+             * console.error('error #%d', code);
+             * // Prints: error #5, to stderr
+             * console.error('error', code);
+             * // Prints: error 5, to stderr
+             * ```
+             *
+             * If formatting elements (e.g. `%d`) are not found in the first string then
+             * [`util.inspect()`](https://nodejs.org/docs/latest-v24.x/api/util.html#utilinspectobject-options) is called on each argument and the
+             * resulting string values are concatenated. See [`util.format()`](https://nodejs.org/docs/latest-v24.x/api/util.html#utilformatformat-args)
+             * for more information.
+             * @since v0.1.100
+             */
+            error(message?: any, ...optionalParams: any[]): void;
+            /**
+             * Increases indentation of subsequent lines by spaces for `groupIndentation` length.
+             *
+             * If one or more `label`s are provided, those are printed first without the
+             * additional indentation.
+             * @since v8.5.0
+             */
+            group(...label: any[]): void;
+            /**
+             * An alias for {@link group}.
+             * @since v8.5.0
+             */
+            groupCollapsed(...label: any[]): void;
+            /**
+             * Decreases indentation of subsequent lines by spaces for `groupIndentation` length.
+             * @since v8.5.0
+             */
+            groupEnd(): void;
+            /**
+             * The `console.info()` function is an alias for {@link log}.
+             * @since v0.1.100
+             */
+            info(message?: any, ...optionalParams: any[]): void;
+            /**
+             * Prints to `stdout` with newline. Multiple arguments can be passed, with the
+             * first used as the primary message and all additional used as substitution
+             * values similar to [`printf(3)`](http://man7.org/linux/man-pages/man3/printf.3.html)
+             * (the arguments are all passed to [`util.format()`](https://nodejs.org/docs/latest-v24.x/api/util.html#utilformatformat-args)).
+             *
+             * ```js
+             * const count = 5;
+             * console.log('count: %d', count);
+             * // Prints: count: 5, to stdout
+             * console.log('count:', count);
+             * // Prints: count: 5, to stdout
+             * ```
+             *
+             * See [`util.format()`](https://nodejs.org/docs/latest-v24.x/api/util.html#utilformatformat-args) for more information.
+             * @since v0.1.100
+             */
+            log(message?: any, ...optionalParams: any[]): void;
+            /**
+             * Try to construct a table with the columns of the properties of `tabularData` (or use `properties`) and rows of `tabularData` and log it. Falls back to just
+             * logging the argument if it can't be parsed as tabular.
+             *
+             * ```js
+             * // These can't be parsed as tabular data
+             * console.table(Symbol());
+             * // Symbol()
+             *
+             * console.table(undefined);
+             * // undefined
+             *
+             * console.table([{ a: 1, b: 'Y' }, { a: 'Z', b: 2 }]);
+             * // ┌─────────┬─────┬─────┐
+             * // │ (index) │  a  │  b  │
+             * // ├─────────┼─────┼─────┤
+             * // │    0    │  1  │ 'Y' │
+             * // │    1    │ 'Z' │  2  │
+             * // └─────────┴─────┴─────┘
+             *
+             * console.table([{ a: 1, b: 'Y' }, { a: 'Z', b: 2 }], ['a']);
+             * // ┌─────────┬─────┐
+             * // │ (index) │  a  │
+             * // ├─────────┼─────┤
+             * // │    0    │  1  │
+             * // │    1    │ 'Z' │
+             * // └─────────┴─────┘
+             * ```
+             * @since v10.0.0
+             * @param properties Alternate properties for constructing the table.
+             */
+            table(tabularData: any, properties?: readonly string[]): void;
+            /**
+             * Starts a timer that can be used to compute the duration of an operation. Timers
+             * are identified by a unique `label`. Use the same `label` when calling {@link timeEnd} to stop the timer and output the elapsed time in
+             * suitable time units to `stdout`. For example, if the elapsed
+             * time is 3869ms, `console.timeEnd()` displays "3.869s".
+             * @since v0.1.104
+             * @param [label='default']
+             */
+            time(label?: string): void;
+            /**
+             * Stops a timer that was previously started by calling {@link time} and
+             * prints the result to `stdout`:
+             *
+             * ```js
+             * console.time('bunch-of-stuff');
+             * // Do a bunch of stuff.
+             * console.timeEnd('bunch-of-stuff');
+             * // Prints: bunch-of-stuff: 225.438ms
+             * ```
+             * @since v0.1.104
+             * @param [label='default']
+             */
+            timeEnd(label?: string): void;
+            /**
+             * For a timer that was previously started by calling {@link time}, prints
+             * the elapsed time and other `data` arguments to `stdout`:
+             *
+             * ```js
+             * console.time('process');
+             * const value = expensiveProcess1(); // Returns 42
+             * console.timeLog('process', value);
+             * // Prints "process: 365.227ms 42".
+             * doExpensiveProcess2(value);
+             * console.timeEnd('process');
+             * ```
+             * @since v10.7.0
+             * @param [label='default']
+             */
+            timeLog(label?: string, ...data: any[]): void;
+            /**
+             * Prints to `stderr` the string `'Trace: '`, followed by the [`util.format()`](https://nodejs.org/docs/latest-v24.x/api/util.html#utilformatformat-args)
+             * formatted message and stack trace to the current position in the code.
+             *
+             * ```js
+             * console.trace('Show me');
+             * // Prints: (stack trace will vary based on where trace is called)
+             * //  Trace: Show me
+             * //    at repl:2:9
+             * //    at REPLServer.defaultEval (repl.js:248:27)
+             * //    at bound (domain.js:287:14)
+             * //    at REPLServer.runBound [as eval] (domain.js:300:12)
+             * //    at REPLServer. (repl.js:412:12)
+             * //    at emitOne (events.js:82:20)
+             * //    at REPLServer.emit (events.js:169:7)
+             * //    at REPLServer.Interface._onLine (readline.js:210:10)
+             * //    at REPLServer.Interface._line (readline.js:549:8)
+             * //    at REPLServer.Interface._ttyWrite (readline.js:826:14)
+             * ```
+             * @since v0.1.104
+             */
+            trace(message?: any, ...optionalParams: any[]): void;
+            /**
+             * The `console.warn()` function is an alias for {@link error}.
+             * @since v0.1.100
+             */
+            warn(message?: any, ...optionalParams: any[]): void;
+            // --- Inspector mode only ---
+            /**
+             * This method does not display anything unless used in the inspector. The `console.profile()`
+             * method starts a JavaScript CPU profile with an optional label until {@link profileEnd}
+             * is called. The profile is then added to the Profile panel of the inspector.
+             *
+             * ```js
+             * console.profile('MyLabel');
+             * // Some code
+             * console.profileEnd('MyLabel');
+             * // Adds the profile 'MyLabel' to the Profiles panel of the inspector.
+             * ```
+             * @since v8.0.0
+             */
+            profile(label?: string): void;
+            /**
+             * This method does not display anything unless used in the inspector. Stops the current
+             * JavaScript CPU profiling session if one has been started and prints the report to the
+             * Profiles panel of the inspector. See {@link profile} for an example.
+             *
+             * If this method is called without a label, the most recently started profile is stopped.
+             * @since v8.0.0
+             */
+            profileEnd(label?: string): void;
+            /**
+             * This method does not display anything unless used in the inspector. The `console.timeStamp()`
+             * method adds an event with the label `'label'` to the Timeline panel of the inspector.
+             * @since v8.0.0
+             */
+            timeStamp(label?: string): void;
+        }
+        /**
+         * The `console` module provides a simple debugging console that is similar to the
+         * JavaScript console mechanism provided by web browsers.
+         *
+         * The module exports two specific components:
+         *
+         * * A `Console` class with methods such as `console.log()`, `console.error()` and `console.warn()` that can be used to write to any Node.js stream.
+         * * A global `console` instance configured to write to [`process.stdout`](https://nodejs.org/docs/latest-v24.x/api/process.html#processstdout) and
+         * [`process.stderr`](https://nodejs.org/docs/latest-v24.x/api/process.html#processstderr). The global `console` can be used without importing the `node:console` module.
+         *
+         * _**Warning**_: The global console object's methods are neither consistently
+         * synchronous like the browser APIs they resemble, nor are they consistently
+         * asynchronous like all other Node.js streams. See the [`note on process I/O`](https://nodejs.org/docs/latest-v24.x/api/process.html#a-note-on-process-io) for
+         * more information.
+         *
+         * Example using the global `console`:
+         *
+         * ```js
+         * console.log('hello world');
+         * // Prints: hello world, to stdout
+         * console.log('hello %s', 'world');
+         * // Prints: hello world, to stdout
+         * console.error(new Error('Whoops, something bad happened'));
+         * // Prints error message and stack trace to stderr:
+         * //   Error: Whoops, something bad happened
+         * //     at [eval]:5:15
+         * //     at Script.runInThisContext (node:vm:132:18)
+         * //     at Object.runInThisContext (node:vm:309:38)
+         * //     at node:internal/process/execution:77:19
+         * //     at [eval]-wrapper:6:22
+         * //     at evalScript (node:internal/process/execution:76:60)
+         * //     at node:internal/main/eval_string:23:3
+         *
+         * const name = 'Will Robinson';
+         * console.warn(`Danger ${name}! Danger!`);
+         * // Prints: Danger Will Robinson! Danger!, to stderr
+         * ```
+         *
+         * Example using the `Console` class:
+         *
+         * ```js
+         * const out = getStreamSomehow();
+         * const err = getStreamSomehow();
+         * const myConsole = new console.Console(out, err);
+         *
+         * myConsole.log('hello world');
+         * // Prints: hello world, to out
+         * myConsole.log('hello %s', 'world');
+         * // Prints: hello world, to out
+         * myConsole.error(new Error('Whoops, something bad happened'));
+         * // Prints: [Error: Whoops, something bad happened], to err
+         *
+         * const name = 'Will Robinson';
+         * myConsole.warn(`Danger ${name}! Danger!`);
+         * // Prints: Danger Will Robinson! Danger!, to err
+         * ```
+         * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/console.js)
+         */
+        namespace console {
+            interface ConsoleConstructorOptions {
+                stdout: NodeJS.WritableStream;
+                stderr?: NodeJS.WritableStream | undefined;
+                /**
+                 * Ignore errors when writing to the underlying streams.
+                 * @default true
+                 */
+                ignoreErrors?: boolean | undefined;
+                /**
+                 * Set color support for this `Console` instance. Setting to true enables coloring while inspecting
+                 * values. Setting to `false` disables coloring while inspecting values. Setting to `'auto'` makes color
+                 * support depend on the value of the `isTTY` property and the value returned by `getColorDepth()` on the
+                 * respective stream. This option can not be used, if `inspectOptions.colors` is set as well.
+                 * @default auto
+                 */
+                colorMode?: boolean | "auto" | undefined;
+                /**
+                 * Specifies options that are passed along to
+                 * [`util.inspect()`](https://nodejs.org/docs/latest-v24.x/api/util.html#utilinspectobject-options).
+                 */
+                inspectOptions?: InspectOptions | undefined;
+                /**
+                 * Set group indentation.
+                 * @default 2
+                 */
+                groupIndentation?: number | undefined;
+            }
+            interface ConsoleConstructor {
+                prototype: Console;
+                new(stdout: NodeJS.WritableStream, stderr?: NodeJS.WritableStream, ignoreErrors?: boolean): Console;
+                new(options: ConsoleConstructorOptions): Console;
+            }
+        }
+        var console: Console;
+    }
+    export = globalThis.console;
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/constants.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/constants.d.ts
new file mode 100644
index 00000000..5685a9df
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/constants.d.ts
@@ -0,0 +1,21 @@
+/**
+ * @deprecated The `node:constants` module is deprecated. When requiring access to constants
+ * relevant to specific Node.js builtin modules, developers should instead refer
+ * to the `constants` property exposed by the relevant module. For instance,
+ * `require('node:fs').constants` and `require('node:os').constants`.
+ */
+declare module "constants" {
+    const constants:
+        & typeof import("node:os").constants.dlopen
+        & typeof import("node:os").constants.errno
+        & typeof import("node:os").constants.priority
+        & typeof import("node:os").constants.signals
+        & typeof import("node:fs").constants
+        & typeof import("node:crypto").constants;
+    export = constants;
+}
+
+declare module "node:constants" {
+    import constants = require("constants");
+    export = constants;
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/crypto.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/crypto.d.ts
new file mode 100644
index 00000000..d975cafc
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/crypto.d.ts
@@ -0,0 +1,5417 @@
+/**
+ * The `node:crypto` module provides cryptographic functionality that includes a
+ * set of wrappers for OpenSSL's hash, HMAC, cipher, decipher, sign, and verify
+ * functions.
+ *
+ * ```js
+ * const { createHmac } = await import('node:crypto');
+ *
+ * const secret = 'abcdefg';
+ * const hash = createHmac('sha256', secret)
+ *                .update('I love cupcakes')
+ *                .digest('hex');
+ * console.log(hash);
+ * // Prints:
+ * //   c0fa1bc00531bd78ef38c628449c5102aeabd49b5dc3a2a516ea6ea959d6658e
+ * ```
+ * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/crypto.js)
+ */
+declare module "crypto" {
+    import { NonSharedBuffer } from "node:buffer";
+    import * as stream from "node:stream";
+    import { PeerCertificate } from "node:tls";
+    /**
+     * SPKAC is a Certificate Signing Request mechanism originally implemented by
+     * Netscape and was specified formally as part of HTML5's `keygen` element.
+     *
+     * `` is deprecated since [HTML 5.2](https://www.w3.org/TR/html52/changes.html#features-removed) and new projects
+     * should not use this element anymore.
+     *
+     * The `node:crypto` module provides the `Certificate` class for working with SPKAC
+     * data. The most common usage is handling output generated by the HTML5 `` element. Node.js uses [OpenSSL's SPKAC
+     * implementation](https://www.openssl.org/docs/man3.0/man1/openssl-spkac.html) internally.
+     * @since v0.11.8
+     */
+    class Certificate {
+        /**
+         * ```js
+         * const { Certificate } = await import('node:crypto');
+         * const spkac = getSpkacSomehow();
+         * const challenge = Certificate.exportChallenge(spkac);
+         * console.log(challenge.toString('utf8'));
+         * // Prints: the challenge as a UTF8 string
+         * ```
+         * @since v9.0.0
+         * @param encoding The `encoding` of the `spkac` string.
+         * @return The challenge component of the `spkac` data structure, which includes a public key and a challenge.
+         */
+        static exportChallenge(spkac: BinaryLike): NonSharedBuffer;
+        /**
+         * ```js
+         * const { Certificate } = await import('node:crypto');
+         * const spkac = getSpkacSomehow();
+         * const publicKey = Certificate.exportPublicKey(spkac);
+         * console.log(publicKey);
+         * // Prints: the public key as 
+         * ```
+         * @since v9.0.0
+         * @param encoding The `encoding` of the `spkac` string.
+         * @return The public key component of the `spkac` data structure, which includes a public key and a challenge.
+         */
+        static exportPublicKey(spkac: BinaryLike, encoding?: string): NonSharedBuffer;
+        /**
+         * ```js
+         * import { Buffer } from 'node:buffer';
+         * const { Certificate } = await import('node:crypto');
+         *
+         * const spkac = getSpkacSomehow();
+         * console.log(Certificate.verifySpkac(Buffer.from(spkac)));
+         * // Prints: true or false
+         * ```
+         * @since v9.0.0
+         * @param encoding The `encoding` of the `spkac` string.
+         * @return `true` if the given `spkac` data structure is valid, `false` otherwise.
+         */
+        static verifySpkac(spkac: NodeJS.ArrayBufferView): boolean;
+        /**
+         * @deprecated
+         * @param spkac
+         * @returns The challenge component of the `spkac` data structure,
+         * which includes a public key and a challenge.
+         */
+        exportChallenge(spkac: BinaryLike): NonSharedBuffer;
+        /**
+         * @deprecated
+         * @param spkac
+         * @param encoding The encoding of the spkac string.
+         * @returns The public key component of the `spkac` data structure,
+         * which includes a public key and a challenge.
+         */
+        exportPublicKey(spkac: BinaryLike, encoding?: string): NonSharedBuffer;
+        /**
+         * @deprecated
+         * @param spkac
+         * @returns `true` if the given `spkac` data structure is valid,
+         * `false` otherwise.
+         */
+        verifySpkac(spkac: NodeJS.ArrayBufferView): boolean;
+    }
+    namespace constants {
+        // https://nodejs.org/dist/latest-v24.x/docs/api/crypto.html#crypto-constants
+        const OPENSSL_VERSION_NUMBER: number;
+        /** Applies multiple bug workarounds within OpenSSL. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html for detail. */
+        const SSL_OP_ALL: number;
+        /** Instructs OpenSSL to allow a non-[EC]DHE-based key exchange mode for TLS v1.3 */
+        const SSL_OP_ALLOW_NO_DHE_KEX: number;
+        /** Allows legacy insecure renegotiation between OpenSSL and unpatched clients or servers. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */
+        const SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION: number;
+        /** Attempts to use the server's preferences instead of the client's when selecting a cipher. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */
+        const SSL_OP_CIPHER_SERVER_PREFERENCE: number;
+        /** Instructs OpenSSL to use Cisco's version identifier of DTLS_BAD_VER. */
+        const SSL_OP_CISCO_ANYCONNECT: number;
+        /** Instructs OpenSSL to turn on cookie exchange. */
+        const SSL_OP_COOKIE_EXCHANGE: number;
+        /** Instructs OpenSSL to add server-hello extension from an early version of the cryptopro draft. */
+        const SSL_OP_CRYPTOPRO_TLSEXT_BUG: number;
+        /** Instructs OpenSSL to disable a SSL 3.0/TLS 1.0 vulnerability workaround added in OpenSSL 0.9.6d. */
+        const SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS: number;
+        /** Allows initial connection to servers that do not support RI. */
+        const SSL_OP_LEGACY_SERVER_CONNECT: number;
+        /** Instructs OpenSSL to disable support for SSL/TLS compression. */
+        const SSL_OP_NO_COMPRESSION: number;
+        /** Instructs OpenSSL to disable encrypt-then-MAC. */
+        const SSL_OP_NO_ENCRYPT_THEN_MAC: number;
+        const SSL_OP_NO_QUERY_MTU: number;
+        /** Instructs OpenSSL to disable renegotiation. */
+        const SSL_OP_NO_RENEGOTIATION: number;
+        /** Instructs OpenSSL to always start a new session when performing renegotiation. */
+        const SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION: number;
+        /** Instructs OpenSSL to turn off SSL v2 */
+        const SSL_OP_NO_SSLv2: number;
+        /** Instructs OpenSSL to turn off SSL v3 */
+        const SSL_OP_NO_SSLv3: number;
+        /** Instructs OpenSSL to disable use of RFC4507bis tickets. */
+        const SSL_OP_NO_TICKET: number;
+        /** Instructs OpenSSL to turn off TLS v1 */
+        const SSL_OP_NO_TLSv1: number;
+        /** Instructs OpenSSL to turn off TLS v1.1 */
+        const SSL_OP_NO_TLSv1_1: number;
+        /** Instructs OpenSSL to turn off TLS v1.2 */
+        const SSL_OP_NO_TLSv1_2: number;
+        /** Instructs OpenSSL to turn off TLS v1.3 */
+        const SSL_OP_NO_TLSv1_3: number;
+        /** Instructs OpenSSL server to prioritize ChaCha20-Poly1305 when the client does. This option has no effect if `SSL_OP_CIPHER_SERVER_PREFERENCE` is not enabled. */
+        const SSL_OP_PRIORITIZE_CHACHA: number;
+        /** Instructs OpenSSL to disable version rollback attack detection. */
+        const SSL_OP_TLS_ROLLBACK_BUG: number;
+        const ENGINE_METHOD_RSA: number;
+        const ENGINE_METHOD_DSA: number;
+        const ENGINE_METHOD_DH: number;
+        const ENGINE_METHOD_RAND: number;
+        const ENGINE_METHOD_EC: number;
+        const ENGINE_METHOD_CIPHERS: number;
+        const ENGINE_METHOD_DIGESTS: number;
+        const ENGINE_METHOD_PKEY_METHS: number;
+        const ENGINE_METHOD_PKEY_ASN1_METHS: number;
+        const ENGINE_METHOD_ALL: number;
+        const ENGINE_METHOD_NONE: number;
+        const DH_CHECK_P_NOT_SAFE_PRIME: number;
+        const DH_CHECK_P_NOT_PRIME: number;
+        const DH_UNABLE_TO_CHECK_GENERATOR: number;
+        const DH_NOT_SUITABLE_GENERATOR: number;
+        const RSA_PKCS1_PADDING: number;
+        const RSA_SSLV23_PADDING: number;
+        const RSA_NO_PADDING: number;
+        const RSA_PKCS1_OAEP_PADDING: number;
+        const RSA_X931_PADDING: number;
+        const RSA_PKCS1_PSS_PADDING: number;
+        /** Sets the salt length for RSA_PKCS1_PSS_PADDING to the digest size when signing or verifying. */
+        const RSA_PSS_SALTLEN_DIGEST: number;
+        /** Sets the salt length for RSA_PKCS1_PSS_PADDING to the maximum permissible value when signing data. */
+        const RSA_PSS_SALTLEN_MAX_SIGN: number;
+        /** Causes the salt length for RSA_PKCS1_PSS_PADDING to be determined automatically when verifying a signature. */
+        const RSA_PSS_SALTLEN_AUTO: number;
+        const POINT_CONVERSION_COMPRESSED: number;
+        const POINT_CONVERSION_UNCOMPRESSED: number;
+        const POINT_CONVERSION_HYBRID: number;
+        /** Specifies the built-in default cipher list used by Node.js (colon-separated values). */
+        const defaultCoreCipherList: string;
+        /** Specifies the active default cipher list used by the current Node.js process  (colon-separated values). */
+        const defaultCipherList: string;
+    }
+    interface HashOptions extends stream.TransformOptions {
+        /**
+         * For XOF hash functions such as `shake256`, the
+         * outputLength option can be used to specify the desired output length in bytes.
+         */
+        outputLength?: number | undefined;
+    }
+    /** @deprecated since v10.0.0 */
+    const fips: boolean;
+    /**
+     * Creates and returns a `Hash` object that can be used to generate hash digests
+     * using the given `algorithm`. Optional `options` argument controls stream
+     * behavior. For XOF hash functions such as `'shake256'`, the `outputLength` option
+     * can be used to specify the desired output length in bytes.
+     *
+     * The `algorithm` is dependent on the available algorithms supported by the
+     * version of OpenSSL on the platform. Examples are `'sha256'`, `'sha512'`, etc.
+     * On recent releases of OpenSSL, `openssl list -digest-algorithms` will
+     * display the available digest algorithms.
+     *
+     * Example: generating the sha256 sum of a file
+     *
+     * ```js
+     * import {
+     *   createReadStream,
+     * } from 'node:fs';
+     * import { argv } from 'node:process';
+     * const {
+     *   createHash,
+     * } = await import('node:crypto');
+     *
+     * const filename = argv[2];
+     *
+     * const hash = createHash('sha256');
+     *
+     * const input = createReadStream(filename);
+     * input.on('readable', () => {
+     *   // Only one element is going to be produced by the
+     *   // hash stream.
+     *   const data = input.read();
+     *   if (data)
+     *     hash.update(data);
+     *   else {
+     *     console.log(`${hash.digest('hex')} ${filename}`);
+     *   }
+     * });
+     * ```
+     * @since v0.1.92
+     * @param options `stream.transform` options
+     */
+    function createHash(algorithm: string, options?: HashOptions): Hash;
+    /**
+     * Creates and returns an `Hmac` object that uses the given `algorithm` and `key`.
+     * Optional `options` argument controls stream behavior.
+     *
+     * The `algorithm` is dependent on the available algorithms supported by the
+     * version of OpenSSL on the platform. Examples are `'sha256'`, `'sha512'`, etc.
+     * On recent releases of OpenSSL, `openssl list -digest-algorithms` will
+     * display the available digest algorithms.
+     *
+     * The `key` is the HMAC key used to generate the cryptographic HMAC hash. If it is
+     * a `KeyObject`, its type must be `secret`. If it is a string, please consider `caveats when using strings as inputs to cryptographic APIs`. If it was
+     * obtained from a cryptographically secure source of entropy, such as {@link randomBytes} or {@link generateKey}, its length should not
+     * exceed the block size of `algorithm` (e.g., 512 bits for SHA-256).
+     *
+     * Example: generating the sha256 HMAC of a file
+     *
+     * ```js
+     * import {
+     *   createReadStream,
+     * } from 'node:fs';
+     * import { argv } from 'node:process';
+     * const {
+     *   createHmac,
+     * } = await import('node:crypto');
+     *
+     * const filename = argv[2];
+     *
+     * const hmac = createHmac('sha256', 'a secret');
+     *
+     * const input = createReadStream(filename);
+     * input.on('readable', () => {
+     *   // Only one element is going to be produced by the
+     *   // hash stream.
+     *   const data = input.read();
+     *   if (data)
+     *     hmac.update(data);
+     *   else {
+     *     console.log(`${hmac.digest('hex')} ${filename}`);
+     *   }
+     * });
+     * ```
+     * @since v0.1.94
+     * @param options `stream.transform` options
+     */
+    function createHmac(algorithm: string, key: BinaryLike | KeyObject, options?: stream.TransformOptions): Hmac;
+    // https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings
+    type BinaryToTextEncoding = "base64" | "base64url" | "hex" | "binary";
+    type CharacterEncoding = "utf8" | "utf-8" | "utf16le" | "utf-16le" | "latin1";
+    type LegacyCharacterEncoding = "ascii" | "binary" | "ucs2" | "ucs-2";
+    type Encoding = BinaryToTextEncoding | CharacterEncoding | LegacyCharacterEncoding;
+    type ECDHKeyFormat = "compressed" | "uncompressed" | "hybrid";
+    /**
+     * The `Hash` class is a utility for creating hash digests of data. It can be
+     * used in one of two ways:
+     *
+     * * As a `stream` that is both readable and writable, where data is written
+     * to produce a computed hash digest on the readable side, or
+     * * Using the `hash.update()` and `hash.digest()` methods to produce the
+     * computed hash.
+     *
+     * The {@link createHash} method is used to create `Hash` instances. `Hash`objects are not to be created directly using the `new` keyword.
+     *
+     * Example: Using `Hash` objects as streams:
+     *
+     * ```js
+     * const {
+     *   createHash,
+     * } = await import('node:crypto');
+     *
+     * const hash = createHash('sha256');
+     *
+     * hash.on('readable', () => {
+     *   // Only one element is going to be produced by the
+     *   // hash stream.
+     *   const data = hash.read();
+     *   if (data) {
+     *     console.log(data.toString('hex'));
+     *     // Prints:
+     *     //   6a2da20943931e9834fc12cfe5bb47bbd9ae43489a30726962b576f4e3993e50
+     *   }
+     * });
+     *
+     * hash.write('some data to hash');
+     * hash.end();
+     * ```
+     *
+     * Example: Using `Hash` and piped streams:
+     *
+     * ```js
+     * import { createReadStream } from 'node:fs';
+     * import { stdout } from 'node:process';
+     * const { createHash } = await import('node:crypto');
+     *
+     * const hash = createHash('sha256');
+     *
+     * const input = createReadStream('test.js');
+     * input.pipe(hash).setEncoding('hex').pipe(stdout);
+     * ```
+     *
+     * Example: Using the `hash.update()` and `hash.digest()` methods:
+     *
+     * ```js
+     * const {
+     *   createHash,
+     * } = await import('node:crypto');
+     *
+     * const hash = createHash('sha256');
+     *
+     * hash.update('some data to hash');
+     * console.log(hash.digest('hex'));
+     * // Prints:
+     * //   6a2da20943931e9834fc12cfe5bb47bbd9ae43489a30726962b576f4e3993e50
+     * ```
+     * @since v0.1.92
+     */
+    class Hash extends stream.Transform {
+        private constructor();
+        /**
+         * Creates a new `Hash` object that contains a deep copy of the internal state
+         * of the current `Hash` object.
+         *
+         * The optional `options` argument controls stream behavior. For XOF hash
+         * functions such as `'shake256'`, the `outputLength` option can be used to
+         * specify the desired output length in bytes.
+         *
+         * An error is thrown when an attempt is made to copy the `Hash` object after
+         * its `hash.digest()` method has been called.
+         *
+         * ```js
+         * // Calculate a rolling hash.
+         * const {
+         *   createHash,
+         * } = await import('node:crypto');
+         *
+         * const hash = createHash('sha256');
+         *
+         * hash.update('one');
+         * console.log(hash.copy().digest('hex'));
+         *
+         * hash.update('two');
+         * console.log(hash.copy().digest('hex'));
+         *
+         * hash.update('three');
+         * console.log(hash.copy().digest('hex'));
+         *
+         * // Etc.
+         * ```
+         * @since v13.1.0
+         * @param options `stream.transform` options
+         */
+        copy(options?: HashOptions): Hash;
+        /**
+         * Updates the hash content with the given `data`, the encoding of which
+         * is given in `inputEncoding`.
+         * If `encoding` is not provided, and the `data` is a string, an
+         * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored.
+         *
+         * This can be called many times with new data as it is streamed.
+         * @since v0.1.92
+         * @param inputEncoding The `encoding` of the `data` string.
+         */
+        update(data: BinaryLike): Hash;
+        update(data: string, inputEncoding: Encoding): Hash;
+        /**
+         * Calculates the digest of all of the data passed to be hashed (using the `hash.update()` method).
+         * If `encoding` is provided a string will be returned; otherwise
+         * a `Buffer` is returned.
+         *
+         * The `Hash` object can not be used again after `hash.digest()` method has been
+         * called. Multiple calls will cause an error to be thrown.
+         * @since v0.1.92
+         * @param encoding The `encoding` of the return value.
+         */
+        digest(): NonSharedBuffer;
+        digest(encoding: BinaryToTextEncoding): string;
+    }
+    /**
+     * The `Hmac` class is a utility for creating cryptographic HMAC digests. It can
+     * be used in one of two ways:
+     *
+     * * As a `stream` that is both readable and writable, where data is written
+     * to produce a computed HMAC digest on the readable side, or
+     * * Using the `hmac.update()` and `hmac.digest()` methods to produce the
+     * computed HMAC digest.
+     *
+     * The {@link createHmac} method is used to create `Hmac` instances. `Hmac`objects are not to be created directly using the `new` keyword.
+     *
+     * Example: Using `Hmac` objects as streams:
+     *
+     * ```js
+     * const {
+     *   createHmac,
+     * } = await import('node:crypto');
+     *
+     * const hmac = createHmac('sha256', 'a secret');
+     *
+     * hmac.on('readable', () => {
+     *   // Only one element is going to be produced by the
+     *   // hash stream.
+     *   const data = hmac.read();
+     *   if (data) {
+     *     console.log(data.toString('hex'));
+     *     // Prints:
+     *     //   7fd04df92f636fd450bc841c9418e5825c17f33ad9c87c518115a45971f7f77e
+     *   }
+     * });
+     *
+     * hmac.write('some data to hash');
+     * hmac.end();
+     * ```
+     *
+     * Example: Using `Hmac` and piped streams:
+     *
+     * ```js
+     * import { createReadStream } from 'node:fs';
+     * import { stdout } from 'node:process';
+     * const {
+     *   createHmac,
+     * } = await import('node:crypto');
+     *
+     * const hmac = createHmac('sha256', 'a secret');
+     *
+     * const input = createReadStream('test.js');
+     * input.pipe(hmac).pipe(stdout);
+     * ```
+     *
+     * Example: Using the `hmac.update()` and `hmac.digest()` methods:
+     *
+     * ```js
+     * const {
+     *   createHmac,
+     * } = await import('node:crypto');
+     *
+     * const hmac = createHmac('sha256', 'a secret');
+     *
+     * hmac.update('some data to hash');
+     * console.log(hmac.digest('hex'));
+     * // Prints:
+     * //   7fd04df92f636fd450bc841c9418e5825c17f33ad9c87c518115a45971f7f77e
+     * ```
+     * @since v0.1.94
+     * @deprecated Since v20.13.0 Calling `Hmac` class directly with `Hmac()` or `new Hmac()` is deprecated due to being internals, not intended for public use. Please use the {@link createHmac} method to create Hmac instances.
+     */
+    class Hmac extends stream.Transform {
+        private constructor();
+        /**
+         * Updates the `Hmac` content with the given `data`, the encoding of which
+         * is given in `inputEncoding`.
+         * If `encoding` is not provided, and the `data` is a string, an
+         * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored.
+         *
+         * This can be called many times with new data as it is streamed.
+         * @since v0.1.94
+         * @param inputEncoding The `encoding` of the `data` string.
+         */
+        update(data: BinaryLike): Hmac;
+        update(data: string, inputEncoding: Encoding): Hmac;
+        /**
+         * Calculates the HMAC digest of all of the data passed using `hmac.update()`.
+         * If `encoding` is
+         * provided a string is returned; otherwise a `Buffer` is returned;
+         *
+         * The `Hmac` object can not be used again after `hmac.digest()` has been
+         * called. Multiple calls to `hmac.digest()` will result in an error being thrown.
+         * @since v0.1.94
+         * @param encoding The `encoding` of the return value.
+         */
+        digest(): NonSharedBuffer;
+        digest(encoding: BinaryToTextEncoding): string;
+    }
+    type KeyObjectType = "secret" | "public" | "private";
+    interface KeyExportOptions {
+        type: "pkcs1" | "spki" | "pkcs8" | "sec1";
+        format: T;
+        cipher?: string | undefined;
+        passphrase?: string | Buffer | undefined;
+    }
+    interface JwkKeyExportOptions {
+        format: "jwk";
+    }
+    interface JsonWebKey {
+        crv?: string;
+        d?: string;
+        dp?: string;
+        dq?: string;
+        e?: string;
+        k?: string;
+        kty?: string;
+        n?: string;
+        p?: string;
+        q?: string;
+        qi?: string;
+        x?: string;
+        y?: string;
+        [key: string]: unknown;
+    }
+    interface AsymmetricKeyDetails {
+        /**
+         * Key size in bits (RSA, DSA).
+         */
+        modulusLength?: number;
+        /**
+         * Public exponent (RSA).
+         */
+        publicExponent?: bigint;
+        /**
+         * Name of the message digest (RSA-PSS).
+         */
+        hashAlgorithm?: string;
+        /**
+         * Name of the message digest used by MGF1 (RSA-PSS).
+         */
+        mgf1HashAlgorithm?: string;
+        /**
+         * Minimal salt length in bytes (RSA-PSS).
+         */
+        saltLength?: number;
+        /**
+         * Size of q in bits (DSA).
+         */
+        divisorLength?: number;
+        /**
+         * Name of the curve (EC).
+         */
+        namedCurve?: string;
+    }
+    /**
+     * Node.js uses a `KeyObject` class to represent a symmetric or asymmetric key,
+     * and each kind of key exposes different functions. The {@link createSecretKey}, {@link createPublicKey} and {@link createPrivateKey} methods are used to create `KeyObject`instances. `KeyObject`
+     * objects are not to be created directly using the `new`keyword.
+     *
+     * Most applications should consider using the new `KeyObject` API instead of
+     * passing keys as strings or `Buffer`s due to improved security features.
+     *
+     * `KeyObject` instances can be passed to other threads via `postMessage()`.
+     * The receiver obtains a cloned `KeyObject`, and the `KeyObject` does not need to
+     * be listed in the `transferList` argument.
+     * @since v11.6.0
+     */
+    class KeyObject {
+        private constructor();
+        /**
+         * Example: Converting a `CryptoKey` instance to a `KeyObject`:
+         *
+         * ```js
+         * const { KeyObject } = await import('node:crypto');
+         * const { subtle } = globalThis.crypto;
+         *
+         * const key = await subtle.generateKey({
+         *   name: 'HMAC',
+         *   hash: 'SHA-256',
+         *   length: 256,
+         * }, true, ['sign', 'verify']);
+         *
+         * const keyObject = KeyObject.from(key);
+         * console.log(keyObject.symmetricKeySize);
+         * // Prints: 32 (symmetric key size in bytes)
+         * ```
+         * @since v15.0.0
+         */
+        static from(key: webcrypto.CryptoKey): KeyObject;
+        /**
+         * For asymmetric keys, this property represents the type of the key. See the
+         * supported [asymmetric key types](https://nodejs.org/docs/latest-v24.x/api/crypto.html#asymmetric-key-types).
+         *
+         * This property is `undefined` for unrecognized `KeyObject` types and symmetric
+         * keys.
+         * @since v11.6.0
+         */
+        asymmetricKeyType?: KeyType;
+        /**
+         * This property exists only on asymmetric keys. Depending on the type of the key,
+         * this object contains information about the key. None of the information obtained
+         * through this property can be used to uniquely identify a key or to compromise
+         * the security of the key.
+         *
+         * For RSA-PSS keys, if the key material contains a `RSASSA-PSS-params` sequence,
+         * the `hashAlgorithm`, `mgf1HashAlgorithm`, and `saltLength` properties will be
+         * set.
+         *
+         * Other key details might be exposed via this API using additional attributes.
+         * @since v15.7.0
+         */
+        asymmetricKeyDetails?: AsymmetricKeyDetails;
+        /**
+         * For symmetric keys, the following encoding options can be used:
+         *
+         * For public keys, the following encoding options can be used:
+         *
+         * For private keys, the following encoding options can be used:
+         *
+         * The result type depends on the selected encoding format, when PEM the
+         * result is a string, when DER it will be a buffer containing the data
+         * encoded as DER, when [JWK](https://tools.ietf.org/html/rfc7517) it will be an object.
+         *
+         * When [JWK](https://tools.ietf.org/html/rfc7517) encoding format was selected, all other encoding options are
+         * ignored.
+         *
+         * PKCS#1, SEC1, and PKCS#8 type keys can be encrypted by using a combination of
+         * the `cipher` and `format` options. The PKCS#8 `type` can be used with any`format` to encrypt any key algorithm (RSA, EC, or DH) by specifying a`cipher`. PKCS#1 and SEC1 can only be
+         * encrypted by specifying a `cipher`when the PEM `format` is used. For maximum compatibility, use PKCS#8 for
+         * encrypted private keys. Since PKCS#8 defines its own
+         * encryption mechanism, PEM-level encryption is not supported when encrypting
+         * a PKCS#8 key. See [RFC 5208](https://www.rfc-editor.org/rfc/rfc5208.txt) for PKCS#8 encryption and [RFC 1421](https://www.rfc-editor.org/rfc/rfc1421.txt) for
+         * PKCS#1 and SEC1 encryption.
+         * @since v11.6.0
+         */
+        export(options: KeyExportOptions<"pem">): string | NonSharedBuffer;
+        export(options?: KeyExportOptions<"der">): NonSharedBuffer;
+        export(options?: JwkKeyExportOptions): JsonWebKey;
+        /**
+         * Returns `true` or `false` depending on whether the keys have exactly the same
+         * type, value, and parameters. This method is not [constant time](https://en.wikipedia.org/wiki/Timing_attack).
+         * @since v17.7.0, v16.15.0
+         * @param otherKeyObject A `KeyObject` with which to compare `keyObject`.
+         */
+        equals(otherKeyObject: KeyObject): boolean;
+        /**
+         * For secret keys, this property represents the size of the key in bytes. This
+         * property is `undefined` for asymmetric keys.
+         * @since v11.6.0
+         */
+        symmetricKeySize?: number;
+        /**
+         * Converts a `KeyObject` instance to a `CryptoKey`.
+         * @since 22.10.0
+         */
+        toCryptoKey(
+            algorithm:
+                | webcrypto.AlgorithmIdentifier
+                | webcrypto.RsaHashedImportParams
+                | webcrypto.EcKeyImportParams
+                | webcrypto.HmacImportParams,
+            extractable: boolean,
+            keyUsages: readonly webcrypto.KeyUsage[],
+        ): webcrypto.CryptoKey;
+        /**
+         * Depending on the type of this `KeyObject`, this property is either`'secret'` for secret (symmetric) keys, `'public'` for public (asymmetric) keys
+         * or `'private'` for private (asymmetric) keys.
+         * @since v11.6.0
+         */
+        type: KeyObjectType;
+    }
+    type CipherCCMTypes = "aes-128-ccm" | "aes-192-ccm" | "aes-256-ccm";
+    type CipherGCMTypes = "aes-128-gcm" | "aes-192-gcm" | "aes-256-gcm";
+    type CipherOCBTypes = "aes-128-ocb" | "aes-192-ocb" | "aes-256-ocb";
+    type CipherChaCha20Poly1305Types = "chacha20-poly1305";
+    type BinaryLike = string | NodeJS.ArrayBufferView;
+    type CipherKey = BinaryLike | KeyObject;
+    interface CipherCCMOptions extends stream.TransformOptions {
+        authTagLength: number;
+    }
+    interface CipherGCMOptions extends stream.TransformOptions {
+        authTagLength?: number | undefined;
+    }
+    interface CipherOCBOptions extends stream.TransformOptions {
+        authTagLength: number;
+    }
+    interface CipherChaCha20Poly1305Options extends stream.TransformOptions {
+        /** @default 16 */
+        authTagLength?: number | undefined;
+    }
+    /**
+     * Creates and returns a `Cipher` object, with the given `algorithm`, `key` and
+     * initialization vector (`iv`).
+     *
+     * The `options` argument controls stream behavior and is optional except when a
+     * cipher in CCM or OCB mode (e.g. `'aes-128-ccm'`) is used. In that case, the`authTagLength` option is required and specifies the length of the
+     * authentication tag in bytes, see `CCM mode`. In GCM mode, the `authTagLength`option is not required but can be used to set the length of the authentication
+     * tag that will be returned by `getAuthTag()` and defaults to 16 bytes.
+     * For `chacha20-poly1305`, the `authTagLength` option defaults to 16 bytes.
+     *
+     * The `algorithm` is dependent on OpenSSL, examples are `'aes192'`, etc. On
+     * recent OpenSSL releases, `openssl list -cipher-algorithms` will
+     * display the available cipher algorithms.
+     *
+     * The `key` is the raw key used by the `algorithm` and `iv` is an [initialization vector](https://en.wikipedia.org/wiki/Initialization_vector). Both arguments must be `'utf8'` encoded
+     * strings,`Buffers`, `TypedArray`, or `DataView`s. The `key` may optionally be
+     * a `KeyObject` of type `secret`. If the cipher does not need
+     * an initialization vector, `iv` may be `null`.
+     *
+     * When passing strings for `key` or `iv`, please consider `caveats when using strings as inputs to cryptographic APIs`.
+     *
+     * Initialization vectors should be unpredictable and unique; ideally, they will be
+     * cryptographically random. They do not have to be secret: IVs are typically just
+     * added to ciphertext messages unencrypted. It may sound contradictory that
+     * something has to be unpredictable and unique, but does not have to be secret;
+     * remember that an attacker must not be able to predict ahead of time what a
+     * given IV will be.
+     * @since v0.1.94
+     * @param options `stream.transform` options
+     */
+    function createCipheriv(
+        algorithm: CipherCCMTypes,
+        key: CipherKey,
+        iv: BinaryLike,
+        options: CipherCCMOptions,
+    ): CipherCCM;
+    function createCipheriv(
+        algorithm: CipherOCBTypes,
+        key: CipherKey,
+        iv: BinaryLike,
+        options: CipherOCBOptions,
+    ): CipherOCB;
+    function createCipheriv(
+        algorithm: CipherGCMTypes,
+        key: CipherKey,
+        iv: BinaryLike,
+        options?: CipherGCMOptions,
+    ): CipherGCM;
+    function createCipheriv(
+        algorithm: CipherChaCha20Poly1305Types,
+        key: CipherKey,
+        iv: BinaryLike,
+        options?: CipherChaCha20Poly1305Options,
+    ): CipherChaCha20Poly1305;
+    function createCipheriv(
+        algorithm: string,
+        key: CipherKey,
+        iv: BinaryLike | null,
+        options?: stream.TransformOptions,
+    ): Cipheriv;
+    /**
+     * Instances of the `Cipheriv` class are used to encrypt data. The class can be
+     * used in one of two ways:
+     *
+     * * As a `stream` that is both readable and writable, where plain unencrypted
+     * data is written to produce encrypted data on the readable side, or
+     * * Using the `cipher.update()` and `cipher.final()` methods to produce
+     * the encrypted data.
+     *
+     * The {@link createCipheriv} method is
+     * used to create `Cipheriv` instances. `Cipheriv` objects are not to be created
+     * directly using the `new` keyword.
+     *
+     * Example: Using `Cipheriv` objects as streams:
+     *
+     * ```js
+     * const {
+     *   scrypt,
+     *   randomFill,
+     *   createCipheriv,
+     * } = await import('node:crypto');
+     *
+     * const algorithm = 'aes-192-cbc';
+     * const password = 'Password used to generate key';
+     *
+     * // First, we'll generate the key. The key length is dependent on the algorithm.
+     * // In this case for aes192, it is 24 bytes (192 bits).
+     * scrypt(password, 'salt', 24, (err, key) => {
+     *   if (err) throw err;
+     *   // Then, we'll generate a random initialization vector
+     *   randomFill(new Uint8Array(16), (err, iv) => {
+     *     if (err) throw err;
+     *
+     *     // Once we have the key and iv, we can create and use the cipher...
+     *     const cipher = createCipheriv(algorithm, key, iv);
+     *
+     *     let encrypted = '';
+     *     cipher.setEncoding('hex');
+     *
+     *     cipher.on('data', (chunk) => encrypted += chunk);
+     *     cipher.on('end', () => console.log(encrypted));
+     *
+     *     cipher.write('some clear text data');
+     *     cipher.end();
+     *   });
+     * });
+     * ```
+     *
+     * Example: Using `Cipheriv` and piped streams:
+     *
+     * ```js
+     * import {
+     *   createReadStream,
+     *   createWriteStream,
+     * } from 'node:fs';
+     *
+     * import {
+     *   pipeline,
+     * } from 'node:stream';
+     *
+     * const {
+     *   scrypt,
+     *   randomFill,
+     *   createCipheriv,
+     * } = await import('node:crypto');
+     *
+     * const algorithm = 'aes-192-cbc';
+     * const password = 'Password used to generate key';
+     *
+     * // First, we'll generate the key. The key length is dependent on the algorithm.
+     * // In this case for aes192, it is 24 bytes (192 bits).
+     * scrypt(password, 'salt', 24, (err, key) => {
+     *   if (err) throw err;
+     *   // Then, we'll generate a random initialization vector
+     *   randomFill(new Uint8Array(16), (err, iv) => {
+     *     if (err) throw err;
+     *
+     *     const cipher = createCipheriv(algorithm, key, iv);
+     *
+     *     const input = createReadStream('test.js');
+     *     const output = createWriteStream('test.enc');
+     *
+     *     pipeline(input, cipher, output, (err) => {
+     *       if (err) throw err;
+     *     });
+     *   });
+     * });
+     * ```
+     *
+     * Example: Using the `cipher.update()` and `cipher.final()` methods:
+     *
+     * ```js
+     * const {
+     *   scrypt,
+     *   randomFill,
+     *   createCipheriv,
+     * } = await import('node:crypto');
+     *
+     * const algorithm = 'aes-192-cbc';
+     * const password = 'Password used to generate key';
+     *
+     * // First, we'll generate the key. The key length is dependent on the algorithm.
+     * // In this case for aes192, it is 24 bytes (192 bits).
+     * scrypt(password, 'salt', 24, (err, key) => {
+     *   if (err) throw err;
+     *   // Then, we'll generate a random initialization vector
+     *   randomFill(new Uint8Array(16), (err, iv) => {
+     *     if (err) throw err;
+     *
+     *     const cipher = createCipheriv(algorithm, key, iv);
+     *
+     *     let encrypted = cipher.update('some clear text data', 'utf8', 'hex');
+     *     encrypted += cipher.final('hex');
+     *     console.log(encrypted);
+     *   });
+     * });
+     * ```
+     * @since v0.1.94
+     */
+    class Cipheriv extends stream.Transform {
+        private constructor();
+        /**
+         * Updates the cipher with `data`. If the `inputEncoding` argument is given,
+         * the `data`argument is a string using the specified encoding. If the `inputEncoding`argument is not given, `data` must be a `Buffer`, `TypedArray`, or `DataView`. If `data` is a `Buffer`,
+         * `TypedArray`, or `DataView`, then `inputEncoding` is ignored.
+         *
+         * The `outputEncoding` specifies the output format of the enciphered
+         * data. If the `outputEncoding`is specified, a string using the specified encoding is returned. If no`outputEncoding` is provided, a `Buffer` is returned.
+         *
+         * The `cipher.update()` method can be called multiple times with new data until `cipher.final()` is called. Calling `cipher.update()` after `cipher.final()` will result in an error being
+         * thrown.
+         * @since v0.1.94
+         * @param inputEncoding The `encoding` of the data.
+         * @param outputEncoding The `encoding` of the return value.
+         */
+        update(data: BinaryLike): NonSharedBuffer;
+        update(data: string, inputEncoding: Encoding): NonSharedBuffer;
+        update(data: NodeJS.ArrayBufferView, inputEncoding: undefined, outputEncoding: Encoding): string;
+        update(data: string, inputEncoding: Encoding | undefined, outputEncoding: Encoding): string;
+        /**
+         * Once the `cipher.final()` method has been called, the `Cipheriv` object can no
+         * longer be used to encrypt data. Attempts to call `cipher.final()` more than
+         * once will result in an error being thrown.
+         * @since v0.1.94
+         * @param outputEncoding The `encoding` of the return value.
+         * @return Any remaining enciphered contents. If `outputEncoding` is specified, a string is returned. If an `outputEncoding` is not provided, a {@link Buffer} is returned.
+         */
+        final(): NonSharedBuffer;
+        final(outputEncoding: BufferEncoding): string;
+        /**
+         * When using block encryption algorithms, the `Cipheriv` class will automatically
+         * add padding to the input data to the appropriate block size. To disable the
+         * default padding call `cipher.setAutoPadding(false)`.
+         *
+         * When `autoPadding` is `false`, the length of the entire input data must be a
+         * multiple of the cipher's block size or `cipher.final()` will throw an error.
+         * Disabling automatic padding is useful for non-standard padding, for instance
+         * using `0x0` instead of PKCS padding.
+         *
+         * The `cipher.setAutoPadding()` method must be called before `cipher.final()`.
+         * @since v0.7.1
+         * @param [autoPadding=true]
+         * @return for method chaining.
+         */
+        setAutoPadding(autoPadding?: boolean): this;
+    }
+    interface CipherCCM extends Cipheriv {
+        setAAD(
+            buffer: NodeJS.ArrayBufferView,
+            options: {
+                plaintextLength: number;
+            },
+        ): this;
+        getAuthTag(): NonSharedBuffer;
+    }
+    interface CipherGCM extends Cipheriv {
+        setAAD(
+            buffer: NodeJS.ArrayBufferView,
+            options?: {
+                plaintextLength: number;
+            },
+        ): this;
+        getAuthTag(): NonSharedBuffer;
+    }
+    interface CipherOCB extends Cipheriv {
+        setAAD(
+            buffer: NodeJS.ArrayBufferView,
+            options?: {
+                plaintextLength: number;
+            },
+        ): this;
+        getAuthTag(): NonSharedBuffer;
+    }
+    interface CipherChaCha20Poly1305 extends Cipheriv {
+        setAAD(
+            buffer: NodeJS.ArrayBufferView,
+            options: {
+                plaintextLength: number;
+            },
+        ): this;
+        getAuthTag(): NonSharedBuffer;
+    }
+    /**
+     * Creates and returns a `Decipheriv` object that uses the given `algorithm`, `key` and initialization vector (`iv`).
+     *
+     * The `options` argument controls stream behavior and is optional except when a
+     * cipher in CCM or OCB mode (e.g. `'aes-128-ccm'`) is used. In that case, the `authTagLength` option is required and specifies the length of the
+     * authentication tag in bytes, see `CCM mode`. In GCM mode, the `authTagLength` option is not required but can be used to restrict accepted authentication tags
+     * to those with the specified length.
+     * For `chacha20-poly1305`, the `authTagLength` option defaults to 16 bytes.
+     *
+     * The `algorithm` is dependent on OpenSSL, examples are `'aes192'`, etc. On
+     * recent OpenSSL releases, `openssl list -cipher-algorithms` will
+     * display the available cipher algorithms.
+     *
+     * The `key` is the raw key used by the `algorithm` and `iv` is an [initialization vector](https://en.wikipedia.org/wiki/Initialization_vector). Both arguments must be `'utf8'` encoded
+     * strings,`Buffers`, `TypedArray`, or `DataView`s. The `key` may optionally be
+     * a `KeyObject` of type `secret`. If the cipher does not need
+     * an initialization vector, `iv` may be `null`.
+     *
+     * When passing strings for `key` or `iv`, please consider `caveats when using strings as inputs to cryptographic APIs`.
+     *
+     * Initialization vectors should be unpredictable and unique; ideally, they will be
+     * cryptographically random. They do not have to be secret: IVs are typically just
+     * added to ciphertext messages unencrypted. It may sound contradictory that
+     * something has to be unpredictable and unique, but does not have to be secret;
+     * remember that an attacker must not be able to predict ahead of time what a given
+     * IV will be.
+     * @since v0.1.94
+     * @param options `stream.transform` options
+     */
+    function createDecipheriv(
+        algorithm: CipherCCMTypes,
+        key: CipherKey,
+        iv: BinaryLike,
+        options: CipherCCMOptions,
+    ): DecipherCCM;
+    function createDecipheriv(
+        algorithm: CipherOCBTypes,
+        key: CipherKey,
+        iv: BinaryLike,
+        options: CipherOCBOptions,
+    ): DecipherOCB;
+    function createDecipheriv(
+        algorithm: CipherGCMTypes,
+        key: CipherKey,
+        iv: BinaryLike,
+        options?: CipherGCMOptions,
+    ): DecipherGCM;
+    function createDecipheriv(
+        algorithm: CipherChaCha20Poly1305Types,
+        key: CipherKey,
+        iv: BinaryLike,
+        options?: CipherChaCha20Poly1305Options,
+    ): DecipherChaCha20Poly1305;
+    function createDecipheriv(
+        algorithm: string,
+        key: CipherKey,
+        iv: BinaryLike | null,
+        options?: stream.TransformOptions,
+    ): Decipheriv;
+    /**
+     * Instances of the `Decipheriv` class are used to decrypt data. The class can be
+     * used in one of two ways:
+     *
+     * * As a `stream` that is both readable and writable, where plain encrypted
+     * data is written to produce unencrypted data on the readable side, or
+     * * Using the `decipher.update()` and `decipher.final()` methods to
+     * produce the unencrypted data.
+     *
+     * The {@link createDecipheriv} method is
+     * used to create `Decipheriv` instances. `Decipheriv` objects are not to be created
+     * directly using the `new` keyword.
+     *
+     * Example: Using `Decipheriv` objects as streams:
+     *
+     * ```js
+     * import { Buffer } from 'node:buffer';
+     * const {
+     *   scryptSync,
+     *   createDecipheriv,
+     * } = await import('node:crypto');
+     *
+     * const algorithm = 'aes-192-cbc';
+     * const password = 'Password used to generate key';
+     * // Key length is dependent on the algorithm. In this case for aes192, it is
+     * // 24 bytes (192 bits).
+     * // Use the async `crypto.scrypt()` instead.
+     * const key = scryptSync(password, 'salt', 24);
+     * // The IV is usually passed along with the ciphertext.
+     * const iv = Buffer.alloc(16, 0); // Initialization vector.
+     *
+     * const decipher = createDecipheriv(algorithm, key, iv);
+     *
+     * let decrypted = '';
+     * decipher.on('readable', () => {
+     *   let chunk;
+     *   while (null !== (chunk = decipher.read())) {
+     *     decrypted += chunk.toString('utf8');
+     *   }
+     * });
+     * decipher.on('end', () => {
+     *   console.log(decrypted);
+     *   // Prints: some clear text data
+     * });
+     *
+     * // Encrypted with same algorithm, key and iv.
+     * const encrypted =
+     *   'e5f79c5915c02171eec6b212d5520d44480993d7d622a7c4c2da32f6efda0ffa';
+     * decipher.write(encrypted, 'hex');
+     * decipher.end();
+     * ```
+     *
+     * Example: Using `Decipheriv` and piped streams:
+     *
+     * ```js
+     * import {
+     *   createReadStream,
+     *   createWriteStream,
+     * } from 'node:fs';
+     * import { Buffer } from 'node:buffer';
+     * const {
+     *   scryptSync,
+     *   createDecipheriv,
+     * } = await import('node:crypto');
+     *
+     * const algorithm = 'aes-192-cbc';
+     * const password = 'Password used to generate key';
+     * // Use the async `crypto.scrypt()` instead.
+     * const key = scryptSync(password, 'salt', 24);
+     * // The IV is usually passed along with the ciphertext.
+     * const iv = Buffer.alloc(16, 0); // Initialization vector.
+     *
+     * const decipher = createDecipheriv(algorithm, key, iv);
+     *
+     * const input = createReadStream('test.enc');
+     * const output = createWriteStream('test.js');
+     *
+     * input.pipe(decipher).pipe(output);
+     * ```
+     *
+     * Example: Using the `decipher.update()` and `decipher.final()` methods:
+     *
+     * ```js
+     * import { Buffer } from 'node:buffer';
+     * const {
+     *   scryptSync,
+     *   createDecipheriv,
+     * } = await import('node:crypto');
+     *
+     * const algorithm = 'aes-192-cbc';
+     * const password = 'Password used to generate key';
+     * // Use the async `crypto.scrypt()` instead.
+     * const key = scryptSync(password, 'salt', 24);
+     * // The IV is usually passed along with the ciphertext.
+     * const iv = Buffer.alloc(16, 0); // Initialization vector.
+     *
+     * const decipher = createDecipheriv(algorithm, key, iv);
+     *
+     * // Encrypted using same algorithm, key and iv.
+     * const encrypted =
+     *   'e5f79c5915c02171eec6b212d5520d44480993d7d622a7c4c2da32f6efda0ffa';
+     * let decrypted = decipher.update(encrypted, 'hex', 'utf8');
+     * decrypted += decipher.final('utf8');
+     * console.log(decrypted);
+     * // Prints: some clear text data
+     * ```
+     * @since v0.1.94
+     */
+    class Decipheriv extends stream.Transform {
+        private constructor();
+        /**
+         * Updates the decipher with `data`. If the `inputEncoding` argument is given,
+         * the `data` argument is a string using the specified encoding. If the `inputEncoding` argument is not given, `data` must be a `Buffer`. If `data` is a `Buffer` then `inputEncoding` is
+         * ignored.
+         *
+         * The `outputEncoding` specifies the output format of the enciphered
+         * data. If the `outputEncoding` is specified, a string using the specified encoding is returned. If no `outputEncoding` is provided, a `Buffer` is returned.
+         *
+         * The `decipher.update()` method can be called multiple times with new data until `decipher.final()` is called. Calling `decipher.update()` after `decipher.final()` will result in an error
+         * being thrown.
+         * @since v0.1.94
+         * @param inputEncoding The `encoding` of the `data` string.
+         * @param outputEncoding The `encoding` of the return value.
+         */
+        update(data: NodeJS.ArrayBufferView): NonSharedBuffer;
+        update(data: string, inputEncoding: Encoding): NonSharedBuffer;
+        update(data: NodeJS.ArrayBufferView, inputEncoding: undefined, outputEncoding: Encoding): string;
+        update(data: string, inputEncoding: Encoding | undefined, outputEncoding: Encoding): string;
+        /**
+         * Once the `decipher.final()` method has been called, the `Decipheriv` object can
+         * no longer be used to decrypt data. Attempts to call `decipher.final()` more
+         * than once will result in an error being thrown.
+         * @since v0.1.94
+         * @param outputEncoding The `encoding` of the return value.
+         * @return Any remaining deciphered contents. If `outputEncoding` is specified, a string is returned. If an `outputEncoding` is not provided, a {@link Buffer} is returned.
+         */
+        final(): NonSharedBuffer;
+        final(outputEncoding: BufferEncoding): string;
+        /**
+         * When data has been encrypted without standard block padding, calling `decipher.setAutoPadding(false)` will disable automatic padding to prevent `decipher.final()` from checking for and
+         * removing padding.
+         *
+         * Turning auto padding off will only work if the input data's length is a
+         * multiple of the ciphers block size.
+         *
+         * The `decipher.setAutoPadding()` method must be called before `decipher.final()`.
+         * @since v0.7.1
+         * @param [autoPadding=true]
+         * @return for method chaining.
+         */
+        setAutoPadding(auto_padding?: boolean): this;
+    }
+    interface DecipherCCM extends Decipheriv {
+        setAuthTag(buffer: NodeJS.ArrayBufferView): this;
+        setAAD(
+            buffer: NodeJS.ArrayBufferView,
+            options: {
+                plaintextLength: number;
+            },
+        ): this;
+    }
+    interface DecipherGCM extends Decipheriv {
+        setAuthTag(buffer: NodeJS.ArrayBufferView): this;
+        setAAD(
+            buffer: NodeJS.ArrayBufferView,
+            options?: {
+                plaintextLength: number;
+            },
+        ): this;
+    }
+    interface DecipherOCB extends Decipheriv {
+        setAuthTag(buffer: NodeJS.ArrayBufferView): this;
+        setAAD(
+            buffer: NodeJS.ArrayBufferView,
+            options?: {
+                plaintextLength: number;
+            },
+        ): this;
+    }
+    interface DecipherChaCha20Poly1305 extends Decipheriv {
+        setAuthTag(buffer: NodeJS.ArrayBufferView): this;
+        setAAD(
+            buffer: NodeJS.ArrayBufferView,
+            options: {
+                plaintextLength: number;
+            },
+        ): this;
+    }
+    interface PrivateKeyInput {
+        key: string | Buffer;
+        format?: KeyFormat | undefined;
+        type?: "pkcs1" | "pkcs8" | "sec1" | undefined;
+        passphrase?: string | Buffer | undefined;
+        encoding?: string | undefined;
+    }
+    interface PublicKeyInput {
+        key: string | Buffer;
+        format?: KeyFormat | undefined;
+        type?: "pkcs1" | "spki" | undefined;
+        encoding?: string | undefined;
+    }
+    /**
+     * Asynchronously generates a new random secret key of the given `length`. The `type` will determine which validations will be performed on the `length`.
+     *
+     * ```js
+     * const {
+     *   generateKey,
+     * } = await import('node:crypto');
+     *
+     * generateKey('hmac', { length: 512 }, (err, key) => {
+     *   if (err) throw err;
+     *   console.log(key.export().toString('hex'));  // 46e..........620
+     * });
+     * ```
+     *
+     * The size of a generated HMAC key should not exceed the block size of the
+     * underlying hash function. See {@link createHmac} for more information.
+     * @since v15.0.0
+     * @param type The intended use of the generated secret key. Currently accepted values are `'hmac'` and `'aes'`.
+     */
+    function generateKey(
+        type: "hmac" | "aes",
+        options: {
+            length: number;
+        },
+        callback: (err: Error | null, key: KeyObject) => void,
+    ): void;
+    /**
+     * Synchronously generates a new random secret key of the given `length`. The `type` will determine which validations will be performed on the `length`.
+     *
+     * ```js
+     * const {
+     *   generateKeySync,
+     * } = await import('node:crypto');
+     *
+     * const key = generateKeySync('hmac', { length: 512 });
+     * console.log(key.export().toString('hex'));  // e89..........41e
+     * ```
+     *
+     * The size of a generated HMAC key should not exceed the block size of the
+     * underlying hash function. See {@link createHmac} for more information.
+     * @since v15.0.0
+     * @param type The intended use of the generated secret key. Currently accepted values are `'hmac'` and `'aes'`.
+     */
+    function generateKeySync(
+        type: "hmac" | "aes",
+        options: {
+            length: number;
+        },
+    ): KeyObject;
+    interface JsonWebKeyInput {
+        key: JsonWebKey;
+        format: "jwk";
+    }
+    /**
+     * Creates and returns a new key object containing a private key. If `key` is a
+     * string or `Buffer`, `format` is assumed to be `'pem'`; otherwise, `key` must be an object with the properties described above.
+     *
+     * If the private key is encrypted, a `passphrase` must be specified. The length
+     * of the passphrase is limited to 1024 bytes.
+     * @since v11.6.0
+     */
+    function createPrivateKey(key: PrivateKeyInput | string | Buffer | JsonWebKeyInput): KeyObject;
+    /**
+     * Creates and returns a new key object containing a public key. If `key` is a
+     * string or `Buffer`, `format` is assumed to be `'pem'`; if `key` is a `KeyObject` with type `'private'`, the public key is derived from the given private key;
+     * otherwise, `key` must be an object with the properties described above.
+     *
+     * If the format is `'pem'`, the `'key'` may also be an X.509 certificate.
+     *
+     * Because public keys can be derived from private keys, a private key may be
+     * passed instead of a public key. In that case, this function behaves as if {@link createPrivateKey} had been called, except that the type of the
+     * returned `KeyObject` will be `'public'` and that the private key cannot be
+     * extracted from the returned `KeyObject`. Similarly, if a `KeyObject` with type `'private'` is given, a new `KeyObject` with type `'public'` will be returned
+     * and it will be impossible to extract the private key from the returned object.
+     * @since v11.6.0
+     */
+    function createPublicKey(key: PublicKeyInput | string | Buffer | KeyObject | JsonWebKeyInput): KeyObject;
+    /**
+     * Creates and returns a new key object containing a secret key for symmetric
+     * encryption or `Hmac`.
+     * @since v11.6.0
+     * @param encoding The string encoding when `key` is a string.
+     */
+    function createSecretKey(key: NodeJS.ArrayBufferView): KeyObject;
+    function createSecretKey(key: string, encoding: BufferEncoding): KeyObject;
+    /**
+     * Creates and returns a `Sign` object that uses the given `algorithm`. Use {@link getHashes} to obtain the names of the available digest algorithms.
+     * Optional `options` argument controls the `stream.Writable` behavior.
+     *
+     * In some cases, a `Sign` instance can be created using the name of a signature
+     * algorithm, such as `'RSA-SHA256'`, instead of a digest algorithm. This will use
+     * the corresponding digest algorithm. This does not work for all signature
+     * algorithms, such as `'ecdsa-with-SHA256'`, so it is best to always use digest
+     * algorithm names.
+     * @since v0.1.92
+     * @param options `stream.Writable` options
+     */
+    // TODO: signing algorithm type
+    function createSign(algorithm: string, options?: stream.WritableOptions): Sign;
+    type DSAEncoding = "der" | "ieee-p1363";
+    interface SigningOptions {
+        /**
+         * @see crypto.constants.RSA_PKCS1_PADDING
+         */
+        padding?: number | undefined;
+        saltLength?: number | undefined;
+        dsaEncoding?: DSAEncoding | undefined;
+        context?: ArrayBuffer | NodeJS.ArrayBufferView | undefined;
+    }
+    interface SignPrivateKeyInput extends PrivateKeyInput, SigningOptions {}
+    interface SignKeyObjectInput extends SigningOptions {
+        key: KeyObject;
+    }
+    interface SignJsonWebKeyInput extends JsonWebKeyInput, SigningOptions {}
+    interface VerifyPublicKeyInput extends PublicKeyInput, SigningOptions {}
+    interface VerifyKeyObjectInput extends SigningOptions {
+        key: KeyObject;
+    }
+    interface VerifyJsonWebKeyInput extends JsonWebKeyInput, SigningOptions {}
+    type KeyLike = string | Buffer | KeyObject;
+    /**
+     * The `Sign` class is a utility for generating signatures. It can be used in one
+     * of two ways:
+     *
+     * * As a writable `stream`, where data to be signed is written and the `sign.sign()` method is used to generate and return the signature, or
+     * * Using the `sign.update()` and `sign.sign()` methods to produce the
+     * signature.
+     *
+     * The {@link createSign} method is used to create `Sign` instances. The
+     * argument is the string name of the hash function to use. `Sign` objects are not
+     * to be created directly using the `new` keyword.
+     *
+     * Example: Using `Sign` and `Verify` objects as streams:
+     *
+     * ```js
+     * const {
+     *   generateKeyPairSync,
+     *   createSign,
+     *   createVerify,
+     * } = await import('node:crypto');
+     *
+     * const { privateKey, publicKey } = generateKeyPairSync('ec', {
+     *   namedCurve: 'sect239k1',
+     * });
+     *
+     * const sign = createSign('SHA256');
+     * sign.write('some data to sign');
+     * sign.end();
+     * const signature = sign.sign(privateKey, 'hex');
+     *
+     * const verify = createVerify('SHA256');
+     * verify.write('some data to sign');
+     * verify.end();
+     * console.log(verify.verify(publicKey, signature, 'hex'));
+     * // Prints: true
+     * ```
+     *
+     * Example: Using the `sign.update()` and `verify.update()` methods:
+     *
+     * ```js
+     * const {
+     *   generateKeyPairSync,
+     *   createSign,
+     *   createVerify,
+     * } = await import('node:crypto');
+     *
+     * const { privateKey, publicKey } = generateKeyPairSync('rsa', {
+     *   modulusLength: 2048,
+     * });
+     *
+     * const sign = createSign('SHA256');
+     * sign.update('some data to sign');
+     * sign.end();
+     * const signature = sign.sign(privateKey);
+     *
+     * const verify = createVerify('SHA256');
+     * verify.update('some data to sign');
+     * verify.end();
+     * console.log(verify.verify(publicKey, signature));
+     * // Prints: true
+     * ```
+     * @since v0.1.92
+     */
+    class Sign extends stream.Writable {
+        private constructor();
+        /**
+         * Updates the `Sign` content with the given `data`, the encoding of which
+         * is given in `inputEncoding`.
+         * If `encoding` is not provided, and the `data` is a string, an
+         * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored.
+         *
+         * This can be called many times with new data as it is streamed.
+         * @since v0.1.92
+         * @param inputEncoding The `encoding` of the `data` string.
+         */
+        update(data: BinaryLike): this;
+        update(data: string, inputEncoding: Encoding): this;
+        /**
+         * Calculates the signature on all the data passed through using either `sign.update()` or `sign.write()`.
+         *
+         * If `privateKey` is not a `KeyObject`, this function behaves as if `privateKey` had been passed to {@link createPrivateKey}. If it is an
+         * object, the following additional properties can be passed:
+         *
+         * If `outputEncoding` is provided a string is returned; otherwise a `Buffer` is returned.
+         *
+         * The `Sign` object can not be again used after `sign.sign()` method has been
+         * called. Multiple calls to `sign.sign()` will result in an error being thrown.
+         * @since v0.1.92
+         */
+        sign(privateKey: KeyLike | SignKeyObjectInput | SignPrivateKeyInput | SignJsonWebKeyInput): NonSharedBuffer;
+        sign(
+            privateKey: KeyLike | SignKeyObjectInput | SignPrivateKeyInput | SignJsonWebKeyInput,
+            outputFormat: BinaryToTextEncoding,
+        ): string;
+    }
+    /**
+     * Creates and returns a `Verify` object that uses the given algorithm.
+     * Use {@link getHashes} to obtain an array of names of the available
+     * signing algorithms. Optional `options` argument controls the `stream.Writable` behavior.
+     *
+     * In some cases, a `Verify` instance can be created using the name of a signature
+     * algorithm, such as `'RSA-SHA256'`, instead of a digest algorithm. This will use
+     * the corresponding digest algorithm. This does not work for all signature
+     * algorithms, such as `'ecdsa-with-SHA256'`, so it is best to always use digest
+     * algorithm names.
+     * @since v0.1.92
+     * @param options `stream.Writable` options
+     */
+    function createVerify(algorithm: string, options?: stream.WritableOptions): Verify;
+    /**
+     * The `Verify` class is a utility for verifying signatures. It can be used in one
+     * of two ways:
+     *
+     * * As a writable `stream` where written data is used to validate against the
+     * supplied signature, or
+     * * Using the `verify.update()` and `verify.verify()` methods to verify
+     * the signature.
+     *
+     * The {@link createVerify} method is used to create `Verify` instances. `Verify` objects are not to be created directly using the `new` keyword.
+     *
+     * See `Sign` for examples.
+     * @since v0.1.92
+     */
+    class Verify extends stream.Writable {
+        private constructor();
+        /**
+         * Updates the `Verify` content with the given `data`, the encoding of which
+         * is given in `inputEncoding`.
+         * If `inputEncoding` is not provided, and the `data` is a string, an
+         * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or `DataView`, then `inputEncoding` is ignored.
+         *
+         * This can be called many times with new data as it is streamed.
+         * @since v0.1.92
+         * @param inputEncoding The `encoding` of the `data` string.
+         */
+        update(data: BinaryLike): Verify;
+        update(data: string, inputEncoding: Encoding): Verify;
+        /**
+         * Verifies the provided data using the given `object` and `signature`.
+         *
+         * If `object` is not a `KeyObject`, this function behaves as if `object` had been passed to {@link createPublicKey}. If it is an
+         * object, the following additional properties can be passed:
+         *
+         * The `signature` argument is the previously calculated signature for the data, in
+         * the `signatureEncoding`.
+         * If a `signatureEncoding` is specified, the `signature` is expected to be a
+         * string; otherwise `signature` is expected to be a `Buffer`, `TypedArray`, or `DataView`.
+         *
+         * The `verify` object can not be used again after `verify.verify()` has been
+         * called. Multiple calls to `verify.verify()` will result in an error being
+         * thrown.
+         *
+         * Because public keys can be derived from private keys, a private key may
+         * be passed instead of a public key.
+         * @since v0.1.92
+         */
+        verify(
+            object: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput | VerifyJsonWebKeyInput,
+            signature: NodeJS.ArrayBufferView,
+        ): boolean;
+        verify(
+            object: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput | VerifyJsonWebKeyInput,
+            signature: string,
+            signature_format?: BinaryToTextEncoding,
+        ): boolean;
+    }
+    /**
+     * Creates a `DiffieHellman` key exchange object using the supplied `prime` and an
+     * optional specific `generator`.
+     *
+     * The `generator` argument can be a number, string, or `Buffer`. If `generator` is not specified, the value `2` is used.
+     *
+     * If `primeEncoding` is specified, `prime` is expected to be a string; otherwise
+     * a `Buffer`, `TypedArray`, or `DataView` is expected.
+     *
+     * If `generatorEncoding` is specified, `generator` is expected to be a string;
+     * otherwise a number, `Buffer`, `TypedArray`, or `DataView` is expected.
+     * @since v0.11.12
+     * @param primeEncoding The `encoding` of the `prime` string.
+     * @param [generator=2]
+     * @param generatorEncoding The `encoding` of the `generator` string.
+     */
+    function createDiffieHellman(primeLength: number, generator?: number): DiffieHellman;
+    function createDiffieHellman(
+        prime: ArrayBuffer | NodeJS.ArrayBufferView,
+        generator?: number | ArrayBuffer | NodeJS.ArrayBufferView,
+    ): DiffieHellman;
+    function createDiffieHellman(
+        prime: ArrayBuffer | NodeJS.ArrayBufferView,
+        generator: string,
+        generatorEncoding: BinaryToTextEncoding,
+    ): DiffieHellman;
+    function createDiffieHellman(
+        prime: string,
+        primeEncoding: BinaryToTextEncoding,
+        generator?: number | ArrayBuffer | NodeJS.ArrayBufferView,
+    ): DiffieHellman;
+    function createDiffieHellman(
+        prime: string,
+        primeEncoding: BinaryToTextEncoding,
+        generator: string,
+        generatorEncoding: BinaryToTextEncoding,
+    ): DiffieHellman;
+    /**
+     * The `DiffieHellman` class is a utility for creating Diffie-Hellman key
+     * exchanges.
+     *
+     * Instances of the `DiffieHellman` class can be created using the {@link createDiffieHellman} function.
+     *
+     * ```js
+     * import assert from 'node:assert';
+     *
+     * const {
+     *   createDiffieHellman,
+     * } = await import('node:crypto');
+     *
+     * // Generate Alice's keys...
+     * const alice = createDiffieHellman(2048);
+     * const aliceKey = alice.generateKeys();
+     *
+     * // Generate Bob's keys...
+     * const bob = createDiffieHellman(alice.getPrime(), alice.getGenerator());
+     * const bobKey = bob.generateKeys();
+     *
+     * // Exchange and generate the secret...
+     * const aliceSecret = alice.computeSecret(bobKey);
+     * const bobSecret = bob.computeSecret(aliceKey);
+     *
+     * // OK
+     * assert.strictEqual(aliceSecret.toString('hex'), bobSecret.toString('hex'));
+     * ```
+     * @since v0.5.0
+     */
+    class DiffieHellman {
+        private constructor();
+        /**
+         * Generates private and public Diffie-Hellman key values unless they have been
+         * generated or computed already, and returns
+         * the public key in the specified `encoding`. This key should be
+         * transferred to the other party.
+         * If `encoding` is provided a string is returned; otherwise a `Buffer` is returned.
+         *
+         * This function is a thin wrapper around [`DH_generate_key()`](https://www.openssl.org/docs/man3.0/man3/DH_generate_key.html). In particular,
+         * once a private key has been generated or set, calling this function only updates
+         * the public key but does not generate a new private key.
+         * @since v0.5.0
+         * @param encoding The `encoding` of the return value.
+         */
+        generateKeys(): NonSharedBuffer;
+        generateKeys(encoding: BinaryToTextEncoding): string;
+        /**
+         * Computes the shared secret using `otherPublicKey` as the other
+         * party's public key and returns the computed shared secret. The supplied
+         * key is interpreted using the specified `inputEncoding`, and secret is
+         * encoded using specified `outputEncoding`.
+         * If the `inputEncoding` is not
+         * provided, `otherPublicKey` is expected to be a `Buffer`, `TypedArray`, or `DataView`.
+         *
+         * If `outputEncoding` is given a string is returned; otherwise, a `Buffer` is returned.
+         * @since v0.5.0
+         * @param inputEncoding The `encoding` of an `otherPublicKey` string.
+         * @param outputEncoding The `encoding` of the return value.
+         */
+        computeSecret(
+            otherPublicKey: NodeJS.ArrayBufferView,
+            inputEncoding?: null,
+            outputEncoding?: null,
+        ): NonSharedBuffer;
+        computeSecret(
+            otherPublicKey: string,
+            inputEncoding: BinaryToTextEncoding,
+            outputEncoding?: null,
+        ): NonSharedBuffer;
+        computeSecret(
+            otherPublicKey: NodeJS.ArrayBufferView,
+            inputEncoding: null,
+            outputEncoding: BinaryToTextEncoding,
+        ): string;
+        computeSecret(
+            otherPublicKey: string,
+            inputEncoding: BinaryToTextEncoding,
+            outputEncoding: BinaryToTextEncoding,
+        ): string;
+        /**
+         * Returns the Diffie-Hellman prime in the specified `encoding`.
+         * If `encoding` is provided a string is
+         * returned; otherwise a `Buffer` is returned.
+         * @since v0.5.0
+         * @param encoding The `encoding` of the return value.
+         */
+        getPrime(): NonSharedBuffer;
+        getPrime(encoding: BinaryToTextEncoding): string;
+        /**
+         * Returns the Diffie-Hellman generator in the specified `encoding`.
+         * If `encoding` is provided a string is
+         * returned; otherwise a `Buffer` is returned.
+         * @since v0.5.0
+         * @param encoding The `encoding` of the return value.
+         */
+        getGenerator(): NonSharedBuffer;
+        getGenerator(encoding: BinaryToTextEncoding): string;
+        /**
+         * Returns the Diffie-Hellman public key in the specified `encoding`.
+         * If `encoding` is provided a
+         * string is returned; otherwise a `Buffer` is returned.
+         * @since v0.5.0
+         * @param encoding The `encoding` of the return value.
+         */
+        getPublicKey(): NonSharedBuffer;
+        getPublicKey(encoding: BinaryToTextEncoding): string;
+        /**
+         * Returns the Diffie-Hellman private key in the specified `encoding`.
+         * If `encoding` is provided a
+         * string is returned; otherwise a `Buffer` is returned.
+         * @since v0.5.0
+         * @param encoding The `encoding` of the return value.
+         */
+        getPrivateKey(): NonSharedBuffer;
+        getPrivateKey(encoding: BinaryToTextEncoding): string;
+        /**
+         * Sets the Diffie-Hellman public key. If the `encoding` argument is provided, `publicKey` is expected
+         * to be a string. If no `encoding` is provided, `publicKey` is expected
+         * to be a `Buffer`, `TypedArray`, or `DataView`.
+         * @since v0.5.0
+         * @param encoding The `encoding` of the `publicKey` string.
+         */
+        setPublicKey(publicKey: NodeJS.ArrayBufferView): void;
+        setPublicKey(publicKey: string, encoding: BufferEncoding): void;
+        /**
+         * Sets the Diffie-Hellman private key. If the `encoding` argument is provided,`privateKey` is expected
+         * to be a string. If no `encoding` is provided, `privateKey` is expected
+         * to be a `Buffer`, `TypedArray`, or `DataView`.
+         *
+         * This function does not automatically compute the associated public key. Either `diffieHellman.setPublicKey()` or `diffieHellman.generateKeys()` can be
+         * used to manually provide the public key or to automatically derive it.
+         * @since v0.5.0
+         * @param encoding The `encoding` of the `privateKey` string.
+         */
+        setPrivateKey(privateKey: NodeJS.ArrayBufferView): void;
+        setPrivateKey(privateKey: string, encoding: BufferEncoding): void;
+        /**
+         * A bit field containing any warnings and/or errors resulting from a check
+         * performed during initialization of the `DiffieHellman` object.
+         *
+         * The following values are valid for this property (as defined in `node:constants` module):
+         *
+         * * `DH_CHECK_P_NOT_SAFE_PRIME`
+         * * `DH_CHECK_P_NOT_PRIME`
+         * * `DH_UNABLE_TO_CHECK_GENERATOR`
+         * * `DH_NOT_SUITABLE_GENERATOR`
+         * @since v0.11.12
+         */
+        verifyError: number;
+    }
+    /**
+     * The `DiffieHellmanGroup` class takes a well-known modp group as its argument.
+     * It works the same as `DiffieHellman`, except that it does not allow changing its keys after creation.
+     * In other words, it does not implement `setPublicKey()` or `setPrivateKey()` methods.
+     *
+     * ```js
+     * const { createDiffieHellmanGroup } = await import('node:crypto');
+     * const dh = createDiffieHellmanGroup('modp1');
+     * ```
+     * The name (e.g. `'modp1'`) is taken from [RFC 2412](https://www.rfc-editor.org/rfc/rfc2412.txt) (modp1 and 2) and [RFC 3526](https://www.rfc-editor.org/rfc/rfc3526.txt):
+     * ```bash
+     * $ perl -ne 'print "$1\n" if /"(modp\d+)"/' src/node_crypto_groups.h
+     * modp1  #  768 bits
+     * modp2  # 1024 bits
+     * modp5  # 1536 bits
+     * modp14 # 2048 bits
+     * modp15 # etc.
+     * modp16
+     * modp17
+     * modp18
+     * ```
+     * @since v0.7.5
+     */
+    const DiffieHellmanGroup: DiffieHellmanGroupConstructor;
+    interface DiffieHellmanGroupConstructor {
+        new(name: string): DiffieHellmanGroup;
+        (name: string): DiffieHellmanGroup;
+        readonly prototype: DiffieHellmanGroup;
+    }
+    type DiffieHellmanGroup = Omit;
+    /**
+     * Creates a predefined `DiffieHellmanGroup` key exchange object. The
+     * supported groups are listed in the documentation for `DiffieHellmanGroup`.
+     *
+     * The returned object mimics the interface of objects created by {@link createDiffieHellman}, but will not allow changing
+     * the keys (with `diffieHellman.setPublicKey()`, for example). The
+     * advantage of using this method is that the parties do not have to
+     * generate nor exchange a group modulus beforehand, saving both processor
+     * and communication time.
+     *
+     * Example (obtaining a shared secret):
+     *
+     * ```js
+     * const {
+     *   getDiffieHellman,
+     * } = await import('node:crypto');
+     * const alice = getDiffieHellman('modp14');
+     * const bob = getDiffieHellman('modp14');
+     *
+     * alice.generateKeys();
+     * bob.generateKeys();
+     *
+     * const aliceSecret = alice.computeSecret(bob.getPublicKey(), null, 'hex');
+     * const bobSecret = bob.computeSecret(alice.getPublicKey(), null, 'hex');
+     *
+     * // aliceSecret and bobSecret should be the same
+     * console.log(aliceSecret === bobSecret);
+     * ```
+     * @since v0.7.5
+     */
+    function getDiffieHellman(groupName: string): DiffieHellmanGroup;
+    /**
+     * An alias for {@link getDiffieHellman}
+     * @since v0.9.3
+     */
+    function createDiffieHellmanGroup(name: string): DiffieHellmanGroup;
+    /**
+     * Provides an asynchronous Password-Based Key Derivation Function 2 (PBKDF2)
+     * implementation. A selected HMAC digest algorithm specified by `digest` is
+     * applied to derive a key of the requested byte length (`keylen`) from the `password`, `salt` and `iterations`.
+     *
+     * The supplied `callback` function is called with two arguments: `err` and `derivedKey`. If an error occurs while deriving the key, `err` will be set;
+     * otherwise `err` will be `null`. By default, the successfully generated `derivedKey` will be passed to the callback as a `Buffer`. An error will be
+     * thrown if any of the input arguments specify invalid values or types.
+     *
+     * The `iterations` argument must be a number set as high as possible. The
+     * higher the number of iterations, the more secure the derived key will be,
+     * but will take a longer amount of time to complete.
+     *
+     * The `salt` should be as unique as possible. It is recommended that a salt is
+     * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details.
+     *
+     * When passing strings for `password` or `salt`, please consider `caveats when using strings as inputs to cryptographic APIs`.
+     *
+     * ```js
+     * const {
+     *   pbkdf2,
+     * } = await import('node:crypto');
+     *
+     * pbkdf2('secret', 'salt', 100000, 64, 'sha512', (err, derivedKey) => {
+     *   if (err) throw err;
+     *   console.log(derivedKey.toString('hex'));  // '3745e48...08d59ae'
+     * });
+     * ```
+     *
+     * An array of supported digest functions can be retrieved using {@link getHashes}.
+     *
+     * This API uses libuv's threadpool, which can have surprising and
+     * negative performance implications for some applications; see the `UV_THREADPOOL_SIZE` documentation for more information.
+     * @since v0.5.5
+     */
+    function pbkdf2(
+        password: BinaryLike,
+        salt: BinaryLike,
+        iterations: number,
+        keylen: number,
+        digest: string,
+        callback: (err: Error | null, derivedKey: NonSharedBuffer) => void,
+    ): void;
+    /**
+     * Provides a synchronous Password-Based Key Derivation Function 2 (PBKDF2)
+     * implementation. A selected HMAC digest algorithm specified by `digest` is
+     * applied to derive a key of the requested byte length (`keylen`) from the `password`, `salt` and `iterations`.
+     *
+     * If an error occurs an `Error` will be thrown, otherwise the derived key will be
+     * returned as a `Buffer`.
+     *
+     * The `iterations` argument must be a number set as high as possible. The
+     * higher the number of iterations, the more secure the derived key will be,
+     * but will take a longer amount of time to complete.
+     *
+     * The `salt` should be as unique as possible. It is recommended that a salt is
+     * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details.
+     *
+     * When passing strings for `password` or `salt`, please consider `caveats when using strings as inputs to cryptographic APIs`.
+     *
+     * ```js
+     * const {
+     *   pbkdf2Sync,
+     * } = await import('node:crypto');
+     *
+     * const key = pbkdf2Sync('secret', 'salt', 100000, 64, 'sha512');
+     * console.log(key.toString('hex'));  // '3745e48...08d59ae'
+     * ```
+     *
+     * An array of supported digest functions can be retrieved using {@link getHashes}.
+     * @since v0.9.3
+     */
+    function pbkdf2Sync(
+        password: BinaryLike,
+        salt: BinaryLike,
+        iterations: number,
+        keylen: number,
+        digest: string,
+    ): NonSharedBuffer;
+    /**
+     * Generates cryptographically strong pseudorandom data. The `size` argument
+     * is a number indicating the number of bytes to generate.
+     *
+     * If a `callback` function is provided, the bytes are generated asynchronously
+     * and the `callback` function is invoked with two arguments: `err` and `buf`.
+     * If an error occurs, `err` will be an `Error` object; otherwise it is `null`. The `buf` argument is a `Buffer` containing the generated bytes.
+     *
+     * ```js
+     * // Asynchronous
+     * const {
+     *   randomBytes,
+     * } = await import('node:crypto');
+     *
+     * randomBytes(256, (err, buf) => {
+     *   if (err) throw err;
+     *   console.log(`${buf.length} bytes of random data: ${buf.toString('hex')}`);
+     * });
+     * ```
+     *
+     * If the `callback` function is not provided, the random bytes are generated
+     * synchronously and returned as a `Buffer`. An error will be thrown if
+     * there is a problem generating the bytes.
+     *
+     * ```js
+     * // Synchronous
+     * const {
+     *   randomBytes,
+     * } = await import('node:crypto');
+     *
+     * const buf = randomBytes(256);
+     * console.log(
+     *   `${buf.length} bytes of random data: ${buf.toString('hex')}`);
+     * ```
+     *
+     * The `crypto.randomBytes()` method will not complete until there is
+     * sufficient entropy available.
+     * This should normally never take longer than a few milliseconds. The only time
+     * when generating the random bytes may conceivably block for a longer period of
+     * time is right after boot, when the whole system is still low on entropy.
+     *
+     * This API uses libuv's threadpool, which can have surprising and
+     * negative performance implications for some applications; see the `UV_THREADPOOL_SIZE` documentation for more information.
+     *
+     * The asynchronous version of `crypto.randomBytes()` is carried out in a single
+     * threadpool request. To minimize threadpool task length variation, partition
+     * large `randomBytes` requests when doing so as part of fulfilling a client
+     * request.
+     * @since v0.5.8
+     * @param size The number of bytes to generate. The `size` must not be larger than `2**31 - 1`.
+     * @return if the `callback` function is not provided.
+     */
+    function randomBytes(size: number): NonSharedBuffer;
+    function randomBytes(size: number, callback: (err: Error | null, buf: NonSharedBuffer) => void): void;
+    function pseudoRandomBytes(size: number): NonSharedBuffer;
+    function pseudoRandomBytes(size: number, callback: (err: Error | null, buf: NonSharedBuffer) => void): void;
+    /**
+     * Return a random integer `n` such that `min <= n < max`.  This
+     * implementation avoids [modulo bias](https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#Modulo_bias).
+     *
+     * The range (`max - min`) must be less than 2**48. `min` and `max` must
+     * be [safe integers](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger).
+     *
+     * If the `callback` function is not provided, the random integer is
+     * generated synchronously.
+     *
+     * ```js
+     * // Asynchronous
+     * const {
+     *   randomInt,
+     * } = await import('node:crypto');
+     *
+     * randomInt(3, (err, n) => {
+     *   if (err) throw err;
+     *   console.log(`Random number chosen from (0, 1, 2): ${n}`);
+     * });
+     * ```
+     *
+     * ```js
+     * // Synchronous
+     * const {
+     *   randomInt,
+     * } = await import('node:crypto');
+     *
+     * const n = randomInt(3);
+     * console.log(`Random number chosen from (0, 1, 2): ${n}`);
+     * ```
+     *
+     * ```js
+     * // With `min` argument
+     * const {
+     *   randomInt,
+     * } = await import('node:crypto');
+     *
+     * const n = randomInt(1, 7);
+     * console.log(`The dice rolled: ${n}`);
+     * ```
+     * @since v14.10.0, v12.19.0
+     * @param [min=0] Start of random range (inclusive).
+     * @param max End of random range (exclusive).
+     * @param callback `function(err, n) {}`.
+     */
+    function randomInt(max: number): number;
+    function randomInt(min: number, max: number): number;
+    function randomInt(max: number, callback: (err: Error | null, value: number) => void): void;
+    function randomInt(min: number, max: number, callback: (err: Error | null, value: number) => void): void;
+    /**
+     * Synchronous version of {@link randomFill}.
+     *
+     * ```js
+     * import { Buffer } from 'node:buffer';
+     * const { randomFillSync } = await import('node:crypto');
+     *
+     * const buf = Buffer.alloc(10);
+     * console.log(randomFillSync(buf).toString('hex'));
+     *
+     * randomFillSync(buf, 5);
+     * console.log(buf.toString('hex'));
+     *
+     * // The above is equivalent to the following:
+     * randomFillSync(buf, 5, 5);
+     * console.log(buf.toString('hex'));
+     * ```
+     *
+     * Any `ArrayBuffer`, `TypedArray` or `DataView` instance may be passed as`buffer`.
+     *
+     * ```js
+     * import { Buffer } from 'node:buffer';
+     * const { randomFillSync } = await import('node:crypto');
+     *
+     * const a = new Uint32Array(10);
+     * console.log(Buffer.from(randomFillSync(a).buffer,
+     *                         a.byteOffset, a.byteLength).toString('hex'));
+     *
+     * const b = new DataView(new ArrayBuffer(10));
+     * console.log(Buffer.from(randomFillSync(b).buffer,
+     *                         b.byteOffset, b.byteLength).toString('hex'));
+     *
+     * const c = new ArrayBuffer(10);
+     * console.log(Buffer.from(randomFillSync(c)).toString('hex'));
+     * ```
+     * @since v7.10.0, v6.13.0
+     * @param buffer Must be supplied. The size of the provided `buffer` must not be larger than `2**31 - 1`.
+     * @param [offset=0]
+     * @param [size=buffer.length - offset]
+     * @return The object passed as `buffer` argument.
+     */
+    function randomFillSync(buffer: T, offset?: number, size?: number): T;
+    /**
+     * This function is similar to {@link randomBytes} but requires the first
+     * argument to be a `Buffer` that will be filled. It also
+     * requires that a callback is passed in.
+     *
+     * If the `callback` function is not provided, an error will be thrown.
+     *
+     * ```js
+     * import { Buffer } from 'node:buffer';
+     * const { randomFill } = await import('node:crypto');
+     *
+     * const buf = Buffer.alloc(10);
+     * randomFill(buf, (err, buf) => {
+     *   if (err) throw err;
+     *   console.log(buf.toString('hex'));
+     * });
+     *
+     * randomFill(buf, 5, (err, buf) => {
+     *   if (err) throw err;
+     *   console.log(buf.toString('hex'));
+     * });
+     *
+     * // The above is equivalent to the following:
+     * randomFill(buf, 5, 5, (err, buf) => {
+     *   if (err) throw err;
+     *   console.log(buf.toString('hex'));
+     * });
+     * ```
+     *
+     * Any `ArrayBuffer`, `TypedArray`, or `DataView` instance may be passed as `buffer`.
+     *
+     * While this includes instances of `Float32Array` and `Float64Array`, this
+     * function should not be used to generate random floating-point numbers. The
+     * result may contain `+Infinity`, `-Infinity`, and `NaN`, and even if the array
+     * contains finite numbers only, they are not drawn from a uniform random
+     * distribution and have no meaningful lower or upper bounds.
+     *
+     * ```js
+     * import { Buffer } from 'node:buffer';
+     * const { randomFill } = await import('node:crypto');
+     *
+     * const a = new Uint32Array(10);
+     * randomFill(a, (err, buf) => {
+     *   if (err) throw err;
+     *   console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength)
+     *     .toString('hex'));
+     * });
+     *
+     * const b = new DataView(new ArrayBuffer(10));
+     * randomFill(b, (err, buf) => {
+     *   if (err) throw err;
+     *   console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength)
+     *     .toString('hex'));
+     * });
+     *
+     * const c = new ArrayBuffer(10);
+     * randomFill(c, (err, buf) => {
+     *   if (err) throw err;
+     *   console.log(Buffer.from(buf).toString('hex'));
+     * });
+     * ```
+     *
+     * This API uses libuv's threadpool, which can have surprising and
+     * negative performance implications for some applications; see the `UV_THREADPOOL_SIZE` documentation for more information.
+     *
+     * The asynchronous version of `crypto.randomFill()` is carried out in a single
+     * threadpool request. To minimize threadpool task length variation, partition
+     * large `randomFill` requests when doing so as part of fulfilling a client
+     * request.
+     * @since v7.10.0, v6.13.0
+     * @param buffer Must be supplied. The size of the provided `buffer` must not be larger than `2**31 - 1`.
+     * @param [offset=0]
+     * @param [size=buffer.length - offset]
+     * @param callback `function(err, buf) {}`.
+     */
+    function randomFill(
+        buffer: T,
+        callback: (err: Error | null, buf: T) => void,
+    ): void;
+    function randomFill(
+        buffer: T,
+        offset: number,
+        callback: (err: Error | null, buf: T) => void,
+    ): void;
+    function randomFill(
+        buffer: T,
+        offset: number,
+        size: number,
+        callback: (err: Error | null, buf: T) => void,
+    ): void;
+    interface ScryptOptions {
+        cost?: number | undefined;
+        blockSize?: number | undefined;
+        parallelization?: number | undefined;
+        N?: number | undefined;
+        r?: number | undefined;
+        p?: number | undefined;
+        maxmem?: number | undefined;
+    }
+    /**
+     * Provides an asynchronous [scrypt](https://en.wikipedia.org/wiki/Scrypt) implementation. Scrypt is a password-based
+     * key derivation function that is designed to be expensive computationally and
+     * memory-wise in order to make brute-force attacks unrewarding.
+     *
+     * The `salt` should be as unique as possible. It is recommended that a salt is
+     * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details.
+     *
+     * When passing strings for `password` or `salt`, please consider `caveats when using strings as inputs to cryptographic APIs`.
+     *
+     * The `callback` function is called with two arguments: `err` and `derivedKey`. `err` is an exception object when key derivation fails, otherwise `err` is `null`. `derivedKey` is passed to the
+     * callback as a `Buffer`.
+     *
+     * An exception is thrown when any of the input arguments specify invalid values
+     * or types.
+     *
+     * ```js
+     * const {
+     *   scrypt,
+     * } = await import('node:crypto');
+     *
+     * // Using the factory defaults.
+     * scrypt('password', 'salt', 64, (err, derivedKey) => {
+     *   if (err) throw err;
+     *   console.log(derivedKey.toString('hex'));  // '3745e48...08d59ae'
+     * });
+     * // Using a custom N parameter. Must be a power of two.
+     * scrypt('password', 'salt', 64, { N: 1024 }, (err, derivedKey) => {
+     *   if (err) throw err;
+     *   console.log(derivedKey.toString('hex'));  // '3745e48...aa39b34'
+     * });
+     * ```
+     * @since v10.5.0
+     */
+    function scrypt(
+        password: BinaryLike,
+        salt: BinaryLike,
+        keylen: number,
+        callback: (err: Error | null, derivedKey: NonSharedBuffer) => void,
+    ): void;
+    function scrypt(
+        password: BinaryLike,
+        salt: BinaryLike,
+        keylen: number,
+        options: ScryptOptions,
+        callback: (err: Error | null, derivedKey: NonSharedBuffer) => void,
+    ): void;
+    /**
+     * Provides a synchronous [scrypt](https://en.wikipedia.org/wiki/Scrypt) implementation. Scrypt is a password-based
+     * key derivation function that is designed to be expensive computationally and
+     * memory-wise in order to make brute-force attacks unrewarding.
+     *
+     * The `salt` should be as unique as possible. It is recommended that a salt is
+     * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details.
+     *
+     * When passing strings for `password` or `salt`, please consider `caveats when using strings as inputs to cryptographic APIs`.
+     *
+     * An exception is thrown when key derivation fails, otherwise the derived key is
+     * returned as a `Buffer`.
+     *
+     * An exception is thrown when any of the input arguments specify invalid values
+     * or types.
+     *
+     * ```js
+     * const {
+     *   scryptSync,
+     * } = await import('node:crypto');
+     * // Using the factory defaults.
+     *
+     * const key1 = scryptSync('password', 'salt', 64);
+     * console.log(key1.toString('hex'));  // '3745e48...08d59ae'
+     * // Using a custom N parameter. Must be a power of two.
+     * const key2 = scryptSync('password', 'salt', 64, { N: 1024 });
+     * console.log(key2.toString('hex'));  // '3745e48...aa39b34'
+     * ```
+     * @since v10.5.0
+     */
+    function scryptSync(
+        password: BinaryLike,
+        salt: BinaryLike,
+        keylen: number,
+        options?: ScryptOptions,
+    ): NonSharedBuffer;
+    interface RsaPublicKey {
+        key: KeyLike;
+        padding?: number | undefined;
+    }
+    interface RsaPrivateKey {
+        key: KeyLike;
+        passphrase?: string | undefined;
+        /**
+         * @default 'sha1'
+         */
+        oaepHash?: string | undefined;
+        oaepLabel?: NodeJS.TypedArray | undefined;
+        padding?: number | undefined;
+    }
+    /**
+     * Encrypts the content of `buffer` with `key` and returns a new `Buffer` with encrypted content. The returned data can be decrypted using
+     * the corresponding private key, for example using {@link privateDecrypt}.
+     *
+     * If `key` is not a `KeyObject`, this function behaves as if `key` had been passed to {@link createPublicKey}. If it is an
+     * object, the `padding` property can be passed. Otherwise, this function uses `RSA_PKCS1_OAEP_PADDING`.
+     *
+     * Because RSA public keys can be derived from private keys, a private key may
+     * be passed instead of a public key.
+     * @since v0.11.14
+     */
+    function publicEncrypt(
+        key: RsaPublicKey | RsaPrivateKey | KeyLike,
+        buffer: NodeJS.ArrayBufferView | string,
+    ): NonSharedBuffer;
+    /**
+     * Decrypts `buffer` with `key`.`buffer` was previously encrypted using
+     * the corresponding private key, for example using {@link privateEncrypt}.
+     *
+     * If `key` is not a `KeyObject`, this function behaves as if `key` had been passed to {@link createPublicKey}. If it is an
+     * object, the `padding` property can be passed. Otherwise, this function uses `RSA_PKCS1_PADDING`.
+     *
+     * Because RSA public keys can be derived from private keys, a private key may
+     * be passed instead of a public key.
+     * @since v1.1.0
+     */
+    function publicDecrypt(
+        key: RsaPublicKey | RsaPrivateKey | KeyLike,
+        buffer: NodeJS.ArrayBufferView | string,
+    ): NonSharedBuffer;
+    /**
+     * Decrypts `buffer` with `privateKey`. `buffer` was previously encrypted using
+     * the corresponding public key, for example using {@link publicEncrypt}.
+     *
+     * If `privateKey` is not a `KeyObject`, this function behaves as if `privateKey` had been passed to {@link createPrivateKey}. If it is an
+     * object, the `padding` property can be passed. Otherwise, this function uses `RSA_PKCS1_OAEP_PADDING`.
+     * @since v0.11.14
+     */
+    function privateDecrypt(
+        privateKey: RsaPrivateKey | KeyLike,
+        buffer: NodeJS.ArrayBufferView | string,
+    ): NonSharedBuffer;
+    /**
+     * Encrypts `buffer` with `privateKey`. The returned data can be decrypted using
+     * the corresponding public key, for example using {@link publicDecrypt}.
+     *
+     * If `privateKey` is not a `KeyObject`, this function behaves as if `privateKey` had been passed to {@link createPrivateKey}. If it is an
+     * object, the `padding` property can be passed. Otherwise, this function uses `RSA_PKCS1_PADDING`.
+     * @since v1.1.0
+     */
+    function privateEncrypt(
+        privateKey: RsaPrivateKey | KeyLike,
+        buffer: NodeJS.ArrayBufferView | string,
+    ): NonSharedBuffer;
+    /**
+     * ```js
+     * const {
+     *   getCiphers,
+     * } = await import('node:crypto');
+     *
+     * console.log(getCiphers()); // ['aes-128-cbc', 'aes-128-ccm', ...]
+     * ```
+     * @since v0.9.3
+     * @return An array with the names of the supported cipher algorithms.
+     */
+    function getCiphers(): string[];
+    /**
+     * ```js
+     * const {
+     *   getCurves,
+     * } = await import('node:crypto');
+     *
+     * console.log(getCurves()); // ['Oakley-EC2N-3', 'Oakley-EC2N-4', ...]
+     * ```
+     * @since v2.3.0
+     * @return An array with the names of the supported elliptic curves.
+     */
+    function getCurves(): string[];
+    /**
+     * @since v10.0.0
+     * @return `1` if and only if a FIPS compliant crypto provider is currently in use, `0` otherwise. A future semver-major release may change the return type of this API to a {boolean}.
+     */
+    function getFips(): 1 | 0;
+    /**
+     * Enables the FIPS compliant crypto provider in a FIPS-enabled Node.js build.
+     * Throws an error if FIPS mode is not available.
+     * @since v10.0.0
+     * @param bool `true` to enable FIPS mode.
+     */
+    function setFips(bool: boolean): void;
+    /**
+     * ```js
+     * const {
+     *   getHashes,
+     * } = await import('node:crypto');
+     *
+     * console.log(getHashes()); // ['DSA', 'DSA-SHA', 'DSA-SHA1', ...]
+     * ```
+     * @since v0.9.3
+     * @return An array of the names of the supported hash algorithms, such as `'RSA-SHA256'`. Hash algorithms are also called "digest" algorithms.
+     */
+    function getHashes(): string[];
+    /**
+     * The `ECDH` class is a utility for creating Elliptic Curve Diffie-Hellman (ECDH)
+     * key exchanges.
+     *
+     * Instances of the `ECDH` class can be created using the {@link createECDH} function.
+     *
+     * ```js
+     * import assert from 'node:assert';
+     *
+     * const {
+     *   createECDH,
+     * } = await import('node:crypto');
+     *
+     * // Generate Alice's keys...
+     * const alice = createECDH('secp521r1');
+     * const aliceKey = alice.generateKeys();
+     *
+     * // Generate Bob's keys...
+     * const bob = createECDH('secp521r1');
+     * const bobKey = bob.generateKeys();
+     *
+     * // Exchange and generate the secret...
+     * const aliceSecret = alice.computeSecret(bobKey);
+     * const bobSecret = bob.computeSecret(aliceKey);
+     *
+     * assert.strictEqual(aliceSecret.toString('hex'), bobSecret.toString('hex'));
+     * // OK
+     * ```
+     * @since v0.11.14
+     */
+    class ECDH {
+        private constructor();
+        /**
+         * Converts the EC Diffie-Hellman public key specified by `key` and `curve` to the
+         * format specified by `format`. The `format` argument specifies point encoding
+         * and can be `'compressed'`, `'uncompressed'` or `'hybrid'`. The supplied key is
+         * interpreted using the specified `inputEncoding`, and the returned key is encoded
+         * using the specified `outputEncoding`.
+         *
+         * Use {@link getCurves} to obtain a list of available curve names.
+         * On recent OpenSSL releases, `openssl ecparam -list_curves` will also display
+         * the name and description of each available elliptic curve.
+         *
+         * If `format` is not specified the point will be returned in `'uncompressed'` format.
+         *
+         * If the `inputEncoding` is not provided, `key` is expected to be a `Buffer`, `TypedArray`, or `DataView`.
+         *
+         * Example (uncompressing a key):
+         *
+         * ```js
+         * const {
+         *   createECDH,
+         *   ECDH,
+         * } = await import('node:crypto');
+         *
+         * const ecdh = createECDH('secp256k1');
+         * ecdh.generateKeys();
+         *
+         * const compressedKey = ecdh.getPublicKey('hex', 'compressed');
+         *
+         * const uncompressedKey = ECDH.convertKey(compressedKey,
+         *                                         'secp256k1',
+         *                                         'hex',
+         *                                         'hex',
+         *                                         'uncompressed');
+         *
+         * // The converted key and the uncompressed public key should be the same
+         * console.log(uncompressedKey === ecdh.getPublicKey('hex'));
+         * ```
+         * @since v10.0.0
+         * @param inputEncoding The `encoding` of the `key` string.
+         * @param outputEncoding The `encoding` of the return value.
+         * @param [format='uncompressed']
+         */
+        static convertKey(
+            key: BinaryLike,
+            curve: string,
+            inputEncoding?: BinaryToTextEncoding,
+            outputEncoding?: "latin1" | "hex" | "base64" | "base64url",
+            format?: "uncompressed" | "compressed" | "hybrid",
+        ): NonSharedBuffer | string;
+        /**
+         * Generates private and public EC Diffie-Hellman key values, and returns
+         * the public key in the specified `format` and `encoding`. This key should be
+         * transferred to the other party.
+         *
+         * The `format` argument specifies point encoding and can be `'compressed'` or `'uncompressed'`. If `format` is not specified, the point will be returned in`'uncompressed'` format.
+         *
+         * If `encoding` is provided a string is returned; otherwise a `Buffer` is returned.
+         * @since v0.11.14
+         * @param encoding The `encoding` of the return value.
+         * @param [format='uncompressed']
+         */
+        generateKeys(): NonSharedBuffer;
+        generateKeys(encoding: BinaryToTextEncoding, format?: ECDHKeyFormat): string;
+        /**
+         * Computes the shared secret using `otherPublicKey` as the other
+         * party's public key and returns the computed shared secret. The supplied
+         * key is interpreted using specified `inputEncoding`, and the returned secret
+         * is encoded using the specified `outputEncoding`.
+         * If the `inputEncoding` is not
+         * provided, `otherPublicKey` is expected to be a `Buffer`, `TypedArray`, or `DataView`.
+         *
+         * If `outputEncoding` is given a string will be returned; otherwise a `Buffer` is returned.
+         *
+         * `ecdh.computeSecret` will throw an`ERR_CRYPTO_ECDH_INVALID_PUBLIC_KEY` error when `otherPublicKey` lies outside of the elliptic curve. Since `otherPublicKey` is
+         * usually supplied from a remote user over an insecure network,
+         * be sure to handle this exception accordingly.
+         * @since v0.11.14
+         * @param inputEncoding The `encoding` of the `otherPublicKey` string.
+         * @param outputEncoding The `encoding` of the return value.
+         */
+        computeSecret(otherPublicKey: NodeJS.ArrayBufferView): NonSharedBuffer;
+        computeSecret(otherPublicKey: string, inputEncoding: BinaryToTextEncoding): NonSharedBuffer;
+        computeSecret(otherPublicKey: NodeJS.ArrayBufferView, outputEncoding: BinaryToTextEncoding): string;
+        computeSecret(
+            otherPublicKey: string,
+            inputEncoding: BinaryToTextEncoding,
+            outputEncoding: BinaryToTextEncoding,
+        ): string;
+        /**
+         * If `encoding` is specified, a string is returned; otherwise a `Buffer` is
+         * returned.
+         * @since v0.11.14
+         * @param encoding The `encoding` of the return value.
+         * @return The EC Diffie-Hellman in the specified `encoding`.
+         */
+        getPrivateKey(): NonSharedBuffer;
+        getPrivateKey(encoding: BinaryToTextEncoding): string;
+        /**
+         * The `format` argument specifies point encoding and can be `'compressed'` or `'uncompressed'`. If `format` is not specified the point will be returned in`'uncompressed'` format.
+         *
+         * If `encoding` is specified, a string is returned; otherwise a `Buffer` is
+         * returned.
+         * @since v0.11.14
+         * @param encoding The `encoding` of the return value.
+         * @param [format='uncompressed']
+         * @return The EC Diffie-Hellman public key in the specified `encoding` and `format`.
+         */
+        getPublicKey(encoding?: null, format?: ECDHKeyFormat): NonSharedBuffer;
+        getPublicKey(encoding: BinaryToTextEncoding, format?: ECDHKeyFormat): string;
+        /**
+         * Sets the EC Diffie-Hellman private key.
+         * If `encoding` is provided, `privateKey` is expected
+         * to be a string; otherwise `privateKey` is expected to be a `Buffer`, `TypedArray`, or `DataView`.
+         *
+         * If `privateKey` is not valid for the curve specified when the `ECDH` object was
+         * created, an error is thrown. Upon setting the private key, the associated
+         * public point (key) is also generated and set in the `ECDH` object.
+         * @since v0.11.14
+         * @param encoding The `encoding` of the `privateKey` string.
+         */
+        setPrivateKey(privateKey: NodeJS.ArrayBufferView): void;
+        setPrivateKey(privateKey: string, encoding: BinaryToTextEncoding): void;
+    }
+    /**
+     * Creates an Elliptic Curve Diffie-Hellman (`ECDH`) key exchange object using a
+     * predefined curve specified by the `curveName` string. Use {@link getCurves} to obtain a list of available curve names. On recent
+     * OpenSSL releases, `openssl ecparam -list_curves` will also display the name
+     * and description of each available elliptic curve.
+     * @since v0.11.14
+     */
+    function createECDH(curveName: string): ECDH;
+    /**
+     * This function compares the underlying bytes that represent the given `ArrayBuffer`, `TypedArray`, or `DataView` instances using a constant-time
+     * algorithm.
+     *
+     * This function does not leak timing information that
+     * would allow an attacker to guess one of the values. This is suitable for
+     * comparing HMAC digests or secret values like authentication cookies or [capability urls](https://www.w3.org/TR/capability-urls/).
+     *
+     * `a` and `b` must both be `Buffer`s, `TypedArray`s, or `DataView`s, and they
+     * must have the same byte length. An error is thrown if `a` and `b` have
+     * different byte lengths.
+     *
+     * If at least one of `a` and `b` is a `TypedArray` with more than one byte per
+     * entry, such as `Uint16Array`, the result will be computed using the platform
+     * byte order.
+     *
+     * **When both of the inputs are `Float32Array`s or `Float64Array`s, this function might return unexpected results due to IEEE 754**
+     * **encoding of floating-point numbers. In particular, neither `x === y` nor `Object.is(x, y)` implies that the byte representations of two floating-point**
+     * **numbers `x` and `y` are equal.**
+     *
+     * Use of `crypto.timingSafeEqual` does not guarantee that the _surrounding_ code
+     * is timing-safe. Care should be taken to ensure that the surrounding code does
+     * not introduce timing vulnerabilities.
+     * @since v6.6.0
+     */
+    function timingSafeEqual(a: NodeJS.ArrayBufferView, b: NodeJS.ArrayBufferView): boolean;
+    type KeyType =
+        | "dh"
+        | "dsa"
+        | "ec"
+        | "ed25519"
+        | "ed448"
+        | "ml-dsa-44"
+        | "ml-dsa-65"
+        | "ml-dsa-87"
+        | "ml-kem-1024"
+        | "ml-kem-512"
+        | "ml-kem-768"
+        | "rsa-pss"
+        | "rsa"
+        | "slh-dsa-sha2-128f"
+        | "slh-dsa-sha2-128s"
+        | "slh-dsa-sha2-192f"
+        | "slh-dsa-sha2-192s"
+        | "slh-dsa-sha2-256f"
+        | "slh-dsa-sha2-256s"
+        | "slh-dsa-shake-128f"
+        | "slh-dsa-shake-128s"
+        | "slh-dsa-shake-192f"
+        | "slh-dsa-shake-192s"
+        | "slh-dsa-shake-256f"
+        | "slh-dsa-shake-256s"
+        | "x25519"
+        | "x448";
+    type KeyFormat = "pem" | "der" | "jwk";
+    interface BasePrivateKeyEncodingOptions {
+        format: T;
+        cipher?: string | undefined;
+        passphrase?: string | undefined;
+    }
+    interface KeyPairKeyObjectResult {
+        publicKey: KeyObject;
+        privateKey: KeyObject;
+    }
+    interface ED25519KeyPairKeyObjectOptions {}
+    interface ED448KeyPairKeyObjectOptions {}
+    interface X25519KeyPairKeyObjectOptions {}
+    interface X448KeyPairKeyObjectOptions {}
+    interface MLDSAKeyPairKeyObjectOptions {}
+    interface MLKEMKeyPairKeyObjectOptions {}
+    interface SLHDSAKeyPairKeyObjectOptions {}
+    interface ECKeyPairKeyObjectOptions {
+        /**
+         * Name of the curve to use
+         */
+        namedCurve: string;
+        /**
+         * Must be `'named'` or `'explicit'`. Default: `'named'`.
+         */
+        paramEncoding?: "explicit" | "named" | undefined;
+    }
+    interface RSAKeyPairKeyObjectOptions {
+        /**
+         * Key size in bits
+         */
+        modulusLength: number;
+        /**
+         * Public exponent
+         * @default 0x10001
+         */
+        publicExponent?: number | undefined;
+    }
+    interface RSAPSSKeyPairKeyObjectOptions {
+        /**
+         * Key size in bits
+         */
+        modulusLength: number;
+        /**
+         * Public exponent
+         * @default 0x10001
+         */
+        publicExponent?: number | undefined;
+        /**
+         * Name of the message digest
+         */
+        hashAlgorithm?: string | undefined;
+        /**
+         * Name of the message digest used by MGF1
+         */
+        mgf1HashAlgorithm?: string | undefined;
+        /**
+         * Minimal salt length in bytes
+         */
+        saltLength?: string | undefined;
+    }
+    interface DSAKeyPairKeyObjectOptions {
+        /**
+         * Key size in bits
+         */
+        modulusLength: number;
+        /**
+         * Size of q in bits
+         */
+        divisorLength: number;
+    }
+    interface RSAKeyPairOptions {
+        /**
+         * Key size in bits
+         */
+        modulusLength: number;
+        /**
+         * Public exponent
+         * @default 0x10001
+         */
+        publicExponent?: number | undefined;
+        publicKeyEncoding: {
+            type: "pkcs1" | "spki";
+            format: PubF;
+        };
+        privateKeyEncoding: BasePrivateKeyEncodingOptions & {
+            type: "pkcs1" | "pkcs8";
+        };
+    }
+    interface RSAPSSKeyPairOptions {
+        /**
+         * Key size in bits
+         */
+        modulusLength: number;
+        /**
+         * Public exponent
+         * @default 0x10001
+         */
+        publicExponent?: number | undefined;
+        /**
+         * Name of the message digest
+         */
+        hashAlgorithm?: string | undefined;
+        /**
+         * Name of the message digest used by MGF1
+         */
+        mgf1HashAlgorithm?: string | undefined;
+        /**
+         * Minimal salt length in bytes
+         */
+        saltLength?: string | undefined;
+        publicKeyEncoding: {
+            type: "spki";
+            format: PubF;
+        };
+        privateKeyEncoding: BasePrivateKeyEncodingOptions & {
+            type: "pkcs8";
+        };
+    }
+    interface DSAKeyPairOptions {
+        /**
+         * Key size in bits
+         */
+        modulusLength: number;
+        /**
+         * Size of q in bits
+         */
+        divisorLength: number;
+        publicKeyEncoding: {
+            type: "spki";
+            format: PubF;
+        };
+        privateKeyEncoding: BasePrivateKeyEncodingOptions & {
+            type: "pkcs8";
+        };
+    }
+    interface ECKeyPairOptions extends ECKeyPairKeyObjectOptions {
+        publicKeyEncoding: {
+            type: "pkcs1" | "spki";
+            format: PubF;
+        };
+        privateKeyEncoding: BasePrivateKeyEncodingOptions & {
+            type: "sec1" | "pkcs8";
+        };
+    }
+    interface ED25519KeyPairOptions {
+        publicKeyEncoding: {
+            type: "spki";
+            format: PubF;
+        };
+        privateKeyEncoding: BasePrivateKeyEncodingOptions & {
+            type: "pkcs8";
+        };
+    }
+    interface ED448KeyPairOptions {
+        publicKeyEncoding: {
+            type: "spki";
+            format: PubF;
+        };
+        privateKeyEncoding: BasePrivateKeyEncodingOptions & {
+            type: "pkcs8";
+        };
+    }
+    interface X25519KeyPairOptions {
+        publicKeyEncoding: {
+            type: "spki";
+            format: PubF;
+        };
+        privateKeyEncoding: BasePrivateKeyEncodingOptions & {
+            type: "pkcs8";
+        };
+    }
+    interface X448KeyPairOptions {
+        publicKeyEncoding: {
+            type: "spki";
+            format: PubF;
+        };
+        privateKeyEncoding: BasePrivateKeyEncodingOptions & {
+            type: "pkcs8";
+        };
+    }
+    interface MLDSAKeyPairOptions {
+        publicKeyEncoding: {
+            type: "spki";
+            format: PubF;
+        };
+        privateKeyEncoding: BasePrivateKeyEncodingOptions & {
+            type: "pkcs8";
+        };
+    }
+    interface MLKEMKeyPairOptions {
+        publicKeyEncoding: {
+            type: "spki";
+            format: PubF;
+        };
+        privateKeyEncoding: BasePrivateKeyEncodingOptions & {
+            type: "pkcs8";
+        };
+    }
+    interface SLHDSAKeyPairOptions {
+        publicKeyEncoding: {
+            type: "spki";
+            format: PubF;
+        };
+        privateKeyEncoding: BasePrivateKeyEncodingOptions & {
+            type: "pkcs8";
+        };
+    }
+    interface KeyPairSyncResult {
+        publicKey: T1;
+        privateKey: T2;
+    }
+    /**
+     * Generates a new asymmetric key pair of the given `type`. RSA, RSA-PSS, DSA, EC,
+     * Ed25519, Ed448, X25519, X448, DH, and ML-DSA are currently supported.
+     *
+     * If a `publicKeyEncoding` or `privateKeyEncoding` was specified, this function
+     * behaves as if `keyObject.export()` had been called on its result. Otherwise,
+     * the respective part of the key is returned as a `KeyObject`.
+     *
+     * When encoding public keys, it is recommended to use `'spki'`. When encoding
+     * private keys, it is recommended to use `'pkcs8'` with a strong passphrase,
+     * and to keep the passphrase confidential.
+     *
+     * ```js
+     * const {
+     *   generateKeyPairSync,
+     * } = await import('node:crypto');
+     *
+     * const {
+     *   publicKey,
+     *   privateKey,
+     * } = generateKeyPairSync('rsa', {
+     *   modulusLength: 4096,
+     *   publicKeyEncoding: {
+     *     type: 'spki',
+     *     format: 'pem',
+     *   },
+     *   privateKeyEncoding: {
+     *     type: 'pkcs8',
+     *     format: 'pem',
+     *     cipher: 'aes-256-cbc',
+     *     passphrase: 'top secret',
+     *   },
+     * });
+     * ```
+     *
+     * The return value `{ publicKey, privateKey }` represents the generated key pair.
+     * When PEM encoding was selected, the respective key will be a string, otherwise
+     * it will be a buffer containing the data encoded as DER.
+     * @since v10.12.0
+     * @param type The asymmetric key type to generate. See the
+     * supported [asymmetric key types](https://nodejs.org/docs/latest-v24.x/api/crypto.html#asymmetric-key-types).
+     */
+    function generateKeyPairSync(
+        type: "rsa",
+        options: RSAKeyPairOptions<"pem", "pem">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "rsa",
+        options: RSAKeyPairOptions<"pem", "der">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "rsa",
+        options: RSAKeyPairOptions<"der", "pem">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "rsa",
+        options: RSAKeyPairOptions<"der", "der">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(type: "rsa", options: RSAKeyPairKeyObjectOptions): KeyPairKeyObjectResult;
+    function generateKeyPairSync(
+        type: "rsa-pss",
+        options: RSAPSSKeyPairOptions<"pem", "pem">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "rsa-pss",
+        options: RSAPSSKeyPairOptions<"pem", "der">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "rsa-pss",
+        options: RSAPSSKeyPairOptions<"der", "pem">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "rsa-pss",
+        options: RSAPSSKeyPairOptions<"der", "der">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(type: "rsa-pss", options: RSAPSSKeyPairKeyObjectOptions): KeyPairKeyObjectResult;
+    function generateKeyPairSync(
+        type: "dsa",
+        options: DSAKeyPairOptions<"pem", "pem">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "dsa",
+        options: DSAKeyPairOptions<"pem", "der">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "dsa",
+        options: DSAKeyPairOptions<"der", "pem">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "dsa",
+        options: DSAKeyPairOptions<"der", "der">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(type: "dsa", options: DSAKeyPairKeyObjectOptions): KeyPairKeyObjectResult;
+    function generateKeyPairSync(
+        type: "ec",
+        options: ECKeyPairOptions<"pem", "pem">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "ec",
+        options: ECKeyPairOptions<"pem", "der">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "ec",
+        options: ECKeyPairOptions<"der", "pem">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "ec",
+        options: ECKeyPairOptions<"der", "der">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(type: "ec", options: ECKeyPairKeyObjectOptions): KeyPairKeyObjectResult;
+    function generateKeyPairSync(
+        type: "ed25519",
+        options: ED25519KeyPairOptions<"pem", "pem">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "ed25519",
+        options: ED25519KeyPairOptions<"pem", "der">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "ed25519",
+        options: ED25519KeyPairOptions<"der", "pem">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "ed25519",
+        options: ED25519KeyPairOptions<"der", "der">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(type: "ed25519", options?: ED25519KeyPairKeyObjectOptions): KeyPairKeyObjectResult;
+    function generateKeyPairSync(
+        type: "ed448",
+        options: ED448KeyPairOptions<"pem", "pem">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "ed448",
+        options: ED448KeyPairOptions<"pem", "der">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "ed448",
+        options: ED448KeyPairOptions<"der", "pem">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "ed448",
+        options: ED448KeyPairOptions<"der", "der">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(type: "ed448", options?: ED448KeyPairKeyObjectOptions): KeyPairKeyObjectResult;
+    function generateKeyPairSync(
+        type: "x25519",
+        options: X25519KeyPairOptions<"pem", "pem">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "x25519",
+        options: X25519KeyPairOptions<"pem", "der">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "x25519",
+        options: X25519KeyPairOptions<"der", "pem">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "x25519",
+        options: X25519KeyPairOptions<"der", "der">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(type: "x25519", options?: X25519KeyPairKeyObjectOptions): KeyPairKeyObjectResult;
+    function generateKeyPairSync(
+        type: "x448",
+        options: X448KeyPairOptions<"pem", "pem">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "x448",
+        options: X448KeyPairOptions<"pem", "der">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "x448",
+        options: X448KeyPairOptions<"der", "pem">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "x448",
+        options: X448KeyPairOptions<"der", "der">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(type: "x448", options?: X448KeyPairKeyObjectOptions): KeyPairKeyObjectResult;
+    function generateKeyPairSync(
+        type: "ml-dsa-44" | "ml-dsa-65" | "ml-dsa-87",
+        options: MLDSAKeyPairOptions<"pem", "pem">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "ml-dsa-44" | "ml-dsa-65" | "ml-dsa-87",
+        options: MLDSAKeyPairOptions<"pem", "der">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "ml-dsa-44" | "ml-dsa-65" | "ml-dsa-87",
+        options: MLDSAKeyPairOptions<"der", "pem">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "ml-dsa-44" | "ml-dsa-65" | "ml-dsa-87",
+        options: MLDSAKeyPairOptions<"der", "der">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "ml-dsa-44" | "ml-dsa-65" | "ml-dsa-87",
+        options?: MLDSAKeyPairKeyObjectOptions,
+    ): KeyPairKeyObjectResult;
+    function generateKeyPairSync(
+        type: "ml-kem-1024" | "ml-kem-512" | "ml-kem-768",
+        options: MLKEMKeyPairOptions<"pem", "pem">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "ml-kem-1024" | "ml-kem-512" | "ml-kem-768",
+        options: MLKEMKeyPairOptions<"pem", "der">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "ml-kem-1024" | "ml-kem-512" | "ml-kem-768",
+        options: MLKEMKeyPairOptions<"der", "pem">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "ml-kem-1024" | "ml-kem-512" | "ml-kem-768",
+        options: MLKEMKeyPairOptions<"der", "der">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type: "ml-kem-1024" | "ml-kem-512" | "ml-kem-768",
+        options?: MLKEMKeyPairKeyObjectOptions,
+    ): KeyPairKeyObjectResult;
+    function generateKeyPairSync(
+        type:
+            | "slh-dsa-sha2-128f"
+            | "slh-dsa-sha2-128s"
+            | "slh-dsa-sha2-192f"
+            | "slh-dsa-sha2-192s"
+            | "slh-dsa-sha2-256f"
+            | "slh-dsa-sha2-256s"
+            | "slh-dsa-shake-128f"
+            | "slh-dsa-shake-128s"
+            | "slh-dsa-shake-192f"
+            | "slh-dsa-shake-192s"
+            | "slh-dsa-shake-256f"
+            | "slh-dsa-shake-256s",
+        options: SLHDSAKeyPairOptions<"pem", "pem">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type:
+            | "slh-dsa-sha2-128f"
+            | "slh-dsa-sha2-128s"
+            | "slh-dsa-sha2-192f"
+            | "slh-dsa-sha2-192s"
+            | "slh-dsa-sha2-256f"
+            | "slh-dsa-sha2-256s"
+            | "slh-dsa-shake-128f"
+            | "slh-dsa-shake-128s"
+            | "slh-dsa-shake-192f"
+            | "slh-dsa-shake-192s"
+            | "slh-dsa-shake-256f"
+            | "slh-dsa-shake-256s",
+        options: SLHDSAKeyPairOptions<"pem", "der">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type:
+            | "slh-dsa-sha2-128f"
+            | "slh-dsa-sha2-128s"
+            | "slh-dsa-sha2-192f"
+            | "slh-dsa-sha2-192s"
+            | "slh-dsa-sha2-256f"
+            | "slh-dsa-sha2-256s"
+            | "slh-dsa-shake-128f"
+            | "slh-dsa-shake-128s"
+            | "slh-dsa-shake-192f"
+            | "slh-dsa-shake-192s"
+            | "slh-dsa-shake-256f"
+            | "slh-dsa-shake-256s",
+        options: SLHDSAKeyPairOptions<"der", "pem">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type:
+            | "slh-dsa-sha2-128f"
+            | "slh-dsa-sha2-128s"
+            | "slh-dsa-sha2-192f"
+            | "slh-dsa-sha2-192s"
+            | "slh-dsa-sha2-256f"
+            | "slh-dsa-sha2-256s"
+            | "slh-dsa-shake-128f"
+            | "slh-dsa-shake-128s"
+            | "slh-dsa-shake-192f"
+            | "slh-dsa-shake-192s"
+            | "slh-dsa-shake-256f"
+            | "slh-dsa-shake-256s",
+        options: SLHDSAKeyPairOptions<"der", "der">,
+    ): KeyPairSyncResult;
+    function generateKeyPairSync(
+        type:
+            | "slh-dsa-sha2-128f"
+            | "slh-dsa-sha2-128s"
+            | "slh-dsa-sha2-192f"
+            | "slh-dsa-sha2-192s"
+            | "slh-dsa-sha2-256f"
+            | "slh-dsa-sha2-256s"
+            | "slh-dsa-shake-128f"
+            | "slh-dsa-shake-128s"
+            | "slh-dsa-shake-192f"
+            | "slh-dsa-shake-192s"
+            | "slh-dsa-shake-256f"
+            | "slh-dsa-shake-256s",
+        options?: SLHDSAKeyPairKeyObjectOptions,
+    ): KeyPairKeyObjectResult;
+    /**
+     * Generates a new asymmetric key pair of the given `type`. RSA, RSA-PSS, DSA, EC,
+     * Ed25519, Ed448, X25519, X448, and DH are currently supported.
+     *
+     * If a `publicKeyEncoding` or `privateKeyEncoding` was specified, this function
+     * behaves as if `keyObject.export()` had been called on its result. Otherwise,
+     * the respective part of the key is returned as a `KeyObject`.
+     *
+     * It is recommended to encode public keys as `'spki'` and private keys as `'pkcs8'` with encryption for long-term storage:
+     *
+     * ```js
+     * const {
+     *   generateKeyPair,
+     * } = await import('node:crypto');
+     *
+     * generateKeyPair('rsa', {
+     *   modulusLength: 4096,
+     *   publicKeyEncoding: {
+     *     type: 'spki',
+     *     format: 'pem',
+     *   },
+     *   privateKeyEncoding: {
+     *     type: 'pkcs8',
+     *     format: 'pem',
+     *     cipher: 'aes-256-cbc',
+     *     passphrase: 'top secret',
+     *   },
+     * }, (err, publicKey, privateKey) => {
+     *   // Handle errors and use the generated key pair.
+     * });
+     * ```
+     *
+     * On completion, `callback` will be called with `err` set to `undefined` and `publicKey` / `privateKey` representing the generated key pair.
+     *
+     * If this method is invoked as its `util.promisify()` ed version, it returns
+     * a `Promise` for an `Object` with `publicKey` and `privateKey` properties.
+     * @since v10.12.0
+     * @param type The asymmetric key type to generate. See the
+     * supported [asymmetric key types](https://nodejs.org/docs/latest-v24.x/api/crypto.html#asymmetric-key-types).
+     */
+    function generateKeyPair(
+        type: "rsa",
+        options: RSAKeyPairOptions<"pem", "pem">,
+        callback: (err: Error | null, publicKey: string, privateKey: string) => void,
+    ): void;
+    function generateKeyPair(
+        type: "rsa",
+        options: RSAKeyPairOptions<"pem", "der">,
+        callback: (err: Error | null, publicKey: string, privateKey: NonSharedBuffer) => void,
+    ): void;
+    function generateKeyPair(
+        type: "rsa",
+        options: RSAKeyPairOptions<"der", "pem">,
+        callback: (err: Error | null, publicKey: NonSharedBuffer, privateKey: string) => void,
+    ): void;
+    function generateKeyPair(
+        type: "rsa",
+        options: RSAKeyPairOptions<"der", "der">,
+        callback: (err: Error | null, publicKey: NonSharedBuffer, privateKey: NonSharedBuffer) => void,
+    ): void;
+    function generateKeyPair(
+        type: "rsa",
+        options: RSAKeyPairKeyObjectOptions,
+        callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void,
+    ): void;
+    function generateKeyPair(
+        type: "rsa-pss",
+        options: RSAPSSKeyPairOptions<"pem", "pem">,
+        callback: (err: Error | null, publicKey: string, privateKey: string) => void,
+    ): void;
+    function generateKeyPair(
+        type: "rsa-pss",
+        options: RSAPSSKeyPairOptions<"pem", "der">,
+        callback: (err: Error | null, publicKey: string, privateKey: NonSharedBuffer) => void,
+    ): void;
+    function generateKeyPair(
+        type: "rsa-pss",
+        options: RSAPSSKeyPairOptions<"der", "pem">,
+        callback: (err: Error | null, publicKey: NonSharedBuffer, privateKey: string) => void,
+    ): void;
+    function generateKeyPair(
+        type: "rsa-pss",
+        options: RSAPSSKeyPairOptions<"der", "der">,
+        callback: (err: Error | null, publicKey: NonSharedBuffer, privateKey: NonSharedBuffer) => void,
+    ): void;
+    function generateKeyPair(
+        type: "rsa-pss",
+        options: RSAPSSKeyPairKeyObjectOptions,
+        callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void,
+    ): void;
+    function generateKeyPair(
+        type: "dsa",
+        options: DSAKeyPairOptions<"pem", "pem">,
+        callback: (err: Error | null, publicKey: string, privateKey: string) => void,
+    ): void;
+    function generateKeyPair(
+        type: "dsa",
+        options: DSAKeyPairOptions<"pem", "der">,
+        callback: (err: Error | null, publicKey: string, privateKey: NonSharedBuffer) => void,
+    ): void;
+    function generateKeyPair(
+        type: "dsa",
+        options: DSAKeyPairOptions<"der", "pem">,
+        callback: (err: Error | null, publicKey: NonSharedBuffer, privateKey: string) => void,
+    ): void;
+    function generateKeyPair(
+        type: "dsa",
+        options: DSAKeyPairOptions<"der", "der">,
+        callback: (err: Error | null, publicKey: NonSharedBuffer, privateKey: NonSharedBuffer) => void,
+    ): void;
+    function generateKeyPair(
+        type: "dsa",
+        options: DSAKeyPairKeyObjectOptions,
+        callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ec",
+        options: ECKeyPairOptions<"pem", "pem">,
+        callback: (err: Error | null, publicKey: string, privateKey: string) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ec",
+        options: ECKeyPairOptions<"pem", "der">,
+        callback: (err: Error | null, publicKey: string, privateKey: NonSharedBuffer) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ec",
+        options: ECKeyPairOptions<"der", "pem">,
+        callback: (err: Error | null, publicKey: NonSharedBuffer, privateKey: string) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ec",
+        options: ECKeyPairOptions<"der", "der">,
+        callback: (err: Error | null, publicKey: NonSharedBuffer, privateKey: NonSharedBuffer) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ec",
+        options: ECKeyPairKeyObjectOptions,
+        callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ed25519",
+        options: ED25519KeyPairOptions<"pem", "pem">,
+        callback: (err: Error | null, publicKey: string, privateKey: string) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ed25519",
+        options: ED25519KeyPairOptions<"pem", "der">,
+        callback: (err: Error | null, publicKey: string, privateKey: NonSharedBuffer) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ed25519",
+        options: ED25519KeyPairOptions<"der", "pem">,
+        callback: (err: Error | null, publicKey: NonSharedBuffer, privateKey: string) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ed25519",
+        options: ED25519KeyPairOptions<"der", "der">,
+        callback: (err: Error | null, publicKey: NonSharedBuffer, privateKey: NonSharedBuffer) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ed25519",
+        options: ED25519KeyPairKeyObjectOptions | undefined,
+        callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ed448",
+        options: ED448KeyPairOptions<"pem", "pem">,
+        callback: (err: Error | null, publicKey: string, privateKey: string) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ed448",
+        options: ED448KeyPairOptions<"pem", "der">,
+        callback: (err: Error | null, publicKey: string, privateKey: NonSharedBuffer) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ed448",
+        options: ED448KeyPairOptions<"der", "pem">,
+        callback: (err: Error | null, publicKey: NonSharedBuffer, privateKey: string) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ed448",
+        options: ED448KeyPairOptions<"der", "der">,
+        callback: (err: Error | null, publicKey: NonSharedBuffer, privateKey: NonSharedBuffer) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ed448",
+        options: ED448KeyPairKeyObjectOptions | undefined,
+        callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void,
+    ): void;
+    function generateKeyPair(
+        type: "x25519",
+        options: X25519KeyPairOptions<"pem", "pem">,
+        callback: (err: Error | null, publicKey: string, privateKey: string) => void,
+    ): void;
+    function generateKeyPair(
+        type: "x25519",
+        options: X25519KeyPairOptions<"pem", "der">,
+        callback: (err: Error | null, publicKey: string, privateKey: NonSharedBuffer) => void,
+    ): void;
+    function generateKeyPair(
+        type: "x25519",
+        options: X25519KeyPairOptions<"der", "pem">,
+        callback: (err: Error | null, publicKey: NonSharedBuffer, privateKey: string) => void,
+    ): void;
+    function generateKeyPair(
+        type: "x25519",
+        options: X25519KeyPairOptions<"der", "der">,
+        callback: (err: Error | null, publicKey: NonSharedBuffer, privateKey: NonSharedBuffer) => void,
+    ): void;
+    function generateKeyPair(
+        type: "x25519",
+        options: X25519KeyPairKeyObjectOptions | undefined,
+        callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void,
+    ): void;
+    function generateKeyPair(
+        type: "x448",
+        options: X448KeyPairOptions<"pem", "pem">,
+        callback: (err: Error | null, publicKey: string, privateKey: string) => void,
+    ): void;
+    function generateKeyPair(
+        type: "x448",
+        options: X448KeyPairOptions<"pem", "der">,
+        callback: (err: Error | null, publicKey: string, privateKey: NonSharedBuffer) => void,
+    ): void;
+    function generateKeyPair(
+        type: "x448",
+        options: X448KeyPairOptions<"der", "pem">,
+        callback: (err: Error | null, publicKey: NonSharedBuffer, privateKey: string) => void,
+    ): void;
+    function generateKeyPair(
+        type: "x448",
+        options: X448KeyPairOptions<"der", "der">,
+        callback: (err: Error | null, publicKey: NonSharedBuffer, privateKey: NonSharedBuffer) => void,
+    ): void;
+    function generateKeyPair(
+        type: "x448",
+        options: X448KeyPairKeyObjectOptions | undefined,
+        callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ml-dsa-44" | "ml-dsa-65" | "ml-dsa-87",
+        options: MLDSAKeyPairOptions<"pem", "pem">,
+        callback: (err: Error | null, publicKey: string, privateKey: string) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ml-dsa-44" | "ml-dsa-65" | "ml-dsa-87",
+        options: MLDSAKeyPairOptions<"pem", "der">,
+        callback: (err: Error | null, publicKey: string, privateKey: NonSharedBuffer) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ml-dsa-44" | "ml-dsa-65" | "ml-dsa-87",
+        options: MLDSAKeyPairOptions<"der", "pem">,
+        callback: (err: Error | null, publicKey: NonSharedBuffer, privateKey: string) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ml-dsa-44" | "ml-dsa-65" | "ml-dsa-87",
+        options: MLDSAKeyPairOptions<"der", "der">,
+        callback: (err: Error | null, publicKey: NonSharedBuffer, privateKey: NonSharedBuffer) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ml-dsa-44" | "ml-dsa-65" | "ml-dsa-87",
+        options: MLDSAKeyPairKeyObjectOptions | undefined,
+        callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ml-kem-1024" | "ml-kem-512" | "ml-kem-768",
+        options: MLKEMKeyPairOptions<"pem", "pem">,
+        callback: (err: Error | null, publicKey: string, privateKey: string) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ml-kem-1024" | "ml-kem-512" | "ml-kem-768",
+        options: MLKEMKeyPairOptions<"pem", "der">,
+        callback: (err: Error | null, publicKey: string, privateKey: NonSharedBuffer) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ml-kem-1024" | "ml-kem-512" | "ml-kem-768",
+        options: MLKEMKeyPairOptions<"der", "pem">,
+        callback: (err: Error | null, publicKey: NonSharedBuffer, privateKey: string) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ml-kem-1024" | "ml-kem-512" | "ml-kem-768",
+        options: MLKEMKeyPairOptions<"der", "der">,
+        callback: (err: Error | null, publicKey: NonSharedBuffer, privateKey: NonSharedBuffer) => void,
+    ): void;
+    function generateKeyPair(
+        type: "ml-kem-1024" | "ml-kem-512" | "ml-kem-768",
+        options: MLKEMKeyPairKeyObjectOptions | undefined,
+        callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void,
+    ): void;
+    function generateKeyPair(
+        type:
+            | "slh-dsa-sha2-128f"
+            | "slh-dsa-sha2-128s"
+            | "slh-dsa-sha2-192f"
+            | "slh-dsa-sha2-192s"
+            | "slh-dsa-sha2-256f"
+            | "slh-dsa-sha2-256s"
+            | "slh-dsa-shake-128f"
+            | "slh-dsa-shake-128s"
+            | "slh-dsa-shake-192f"
+            | "slh-dsa-shake-192s"
+            | "slh-dsa-shake-256f"
+            | "slh-dsa-shake-256s",
+        options: SLHDSAKeyPairOptions<"pem", "pem">,
+        callback: (err: Error | null, publicKey: string, privateKey: string) => void,
+    ): void;
+    function generateKeyPair(
+        type:
+            | "slh-dsa-sha2-128f"
+            | "slh-dsa-sha2-128s"
+            | "slh-dsa-sha2-192f"
+            | "slh-dsa-sha2-192s"
+            | "slh-dsa-sha2-256f"
+            | "slh-dsa-sha2-256s"
+            | "slh-dsa-shake-128f"
+            | "slh-dsa-shake-128s"
+            | "slh-dsa-shake-192f"
+            | "slh-dsa-shake-192s"
+            | "slh-dsa-shake-256f"
+            | "slh-dsa-shake-256s",
+        options: SLHDSAKeyPairOptions<"pem", "der">,
+        callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void,
+    ): void;
+    function generateKeyPair(
+        type:
+            | "slh-dsa-sha2-128f"
+            | "slh-dsa-sha2-128s"
+            | "slh-dsa-sha2-192f"
+            | "slh-dsa-sha2-192s"
+            | "slh-dsa-sha2-256f"
+            | "slh-dsa-sha2-256s"
+            | "slh-dsa-shake-128f"
+            | "slh-dsa-shake-128s"
+            | "slh-dsa-shake-192f"
+            | "slh-dsa-shake-192s"
+            | "slh-dsa-shake-256f"
+            | "slh-dsa-shake-256s",
+        options: SLHDSAKeyPairOptions<"der", "pem">,
+        callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void,
+    ): void;
+    function generateKeyPair(
+        type:
+            | "slh-dsa-sha2-128f"
+            | "slh-dsa-sha2-128s"
+            | "slh-dsa-sha2-192f"
+            | "slh-dsa-sha2-192s"
+            | "slh-dsa-sha2-256f"
+            | "slh-dsa-sha2-256s"
+            | "slh-dsa-shake-128f"
+            | "slh-dsa-shake-128s"
+            | "slh-dsa-shake-192f"
+            | "slh-dsa-shake-192s"
+            | "slh-dsa-shake-256f"
+            | "slh-dsa-shake-256s",
+        options: SLHDSAKeyPairOptions<"der", "der">,
+        callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void,
+    ): void;
+    function generateKeyPair(
+        type:
+            | "slh-dsa-sha2-128f"
+            | "slh-dsa-sha2-128s"
+            | "slh-dsa-sha2-192f"
+            | "slh-dsa-sha2-192s"
+            | "slh-dsa-sha2-256f"
+            | "slh-dsa-sha2-256s"
+            | "slh-dsa-shake-128f"
+            | "slh-dsa-shake-128s"
+            | "slh-dsa-shake-192f"
+            | "slh-dsa-shake-192s"
+            | "slh-dsa-shake-256f"
+            | "slh-dsa-shake-256s",
+        options: SLHDSAKeyPairKeyObjectOptions | undefined,
+        callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void,
+    ): void;
+    namespace generateKeyPair {
+        function __promisify__(
+            type: "rsa",
+            options: RSAKeyPairOptions<"pem", "pem">,
+        ): Promise<{
+            publicKey: string;
+            privateKey: string;
+        }>;
+        function __promisify__(
+            type: "rsa",
+            options: RSAKeyPairOptions<"pem", "der">,
+        ): Promise<{
+            publicKey: string;
+            privateKey: NonSharedBuffer;
+        }>;
+        function __promisify__(
+            type: "rsa",
+            options: RSAKeyPairOptions<"der", "pem">,
+        ): Promise<{
+            publicKey: NonSharedBuffer;
+            privateKey: string;
+        }>;
+        function __promisify__(
+            type: "rsa",
+            options: RSAKeyPairOptions<"der", "der">,
+        ): Promise<{
+            publicKey: NonSharedBuffer;
+            privateKey: NonSharedBuffer;
+        }>;
+        function __promisify__(type: "rsa", options: RSAKeyPairKeyObjectOptions): Promise;
+        function __promisify__(
+            type: "rsa-pss",
+            options: RSAPSSKeyPairOptions<"pem", "pem">,
+        ): Promise<{
+            publicKey: string;
+            privateKey: string;
+        }>;
+        function __promisify__(
+            type: "rsa-pss",
+            options: RSAPSSKeyPairOptions<"pem", "der">,
+        ): Promise<{
+            publicKey: string;
+            privateKey: NonSharedBuffer;
+        }>;
+        function __promisify__(
+            type: "rsa-pss",
+            options: RSAPSSKeyPairOptions<"der", "pem">,
+        ): Promise<{
+            publicKey: NonSharedBuffer;
+            privateKey: string;
+        }>;
+        function __promisify__(
+            type: "rsa-pss",
+            options: RSAPSSKeyPairOptions<"der", "der">,
+        ): Promise<{
+            publicKey: NonSharedBuffer;
+            privateKey: NonSharedBuffer;
+        }>;
+        function __promisify__(
+            type: "rsa-pss",
+            options: RSAPSSKeyPairKeyObjectOptions,
+        ): Promise;
+        function __promisify__(
+            type: "dsa",
+            options: DSAKeyPairOptions<"pem", "pem">,
+        ): Promise<{
+            publicKey: string;
+            privateKey: string;
+        }>;
+        function __promisify__(
+            type: "dsa",
+            options: DSAKeyPairOptions<"pem", "der">,
+        ): Promise<{
+            publicKey: string;
+            privateKey: NonSharedBuffer;
+        }>;
+        function __promisify__(
+            type: "dsa",
+            options: DSAKeyPairOptions<"der", "pem">,
+        ): Promise<{
+            publicKey: NonSharedBuffer;
+            privateKey: string;
+        }>;
+        function __promisify__(
+            type: "dsa",
+            options: DSAKeyPairOptions<"der", "der">,
+        ): Promise<{
+            publicKey: NonSharedBuffer;
+            privateKey: NonSharedBuffer;
+        }>;
+        function __promisify__(type: "dsa", options: DSAKeyPairKeyObjectOptions): Promise;
+        function __promisify__(
+            type: "ec",
+            options: ECKeyPairOptions<"pem", "pem">,
+        ): Promise<{
+            publicKey: string;
+            privateKey: string;
+        }>;
+        function __promisify__(
+            type: "ec",
+            options: ECKeyPairOptions<"pem", "der">,
+        ): Promise<{
+            publicKey: string;
+            privateKey: NonSharedBuffer;
+        }>;
+        function __promisify__(
+            type: "ec",
+            options: ECKeyPairOptions<"der", "pem">,
+        ): Promise<{
+            publicKey: NonSharedBuffer;
+            privateKey: string;
+        }>;
+        function __promisify__(
+            type: "ec",
+            options: ECKeyPairOptions<"der", "der">,
+        ): Promise<{
+            publicKey: NonSharedBuffer;
+            privateKey: NonSharedBuffer;
+        }>;
+        function __promisify__(type: "ec", options: ECKeyPairKeyObjectOptions): Promise;
+        function __promisify__(
+            type: "ed25519",
+            options: ED25519KeyPairOptions<"pem", "pem">,
+        ): Promise<{
+            publicKey: string;
+            privateKey: string;
+        }>;
+        function __promisify__(
+            type: "ed25519",
+            options: ED25519KeyPairOptions<"pem", "der">,
+        ): Promise<{
+            publicKey: string;
+            privateKey: NonSharedBuffer;
+        }>;
+        function __promisify__(
+            type: "ed25519",
+            options: ED25519KeyPairOptions<"der", "pem">,
+        ): Promise<{
+            publicKey: NonSharedBuffer;
+            privateKey: string;
+        }>;
+        function __promisify__(
+            type: "ed25519",
+            options: ED25519KeyPairOptions<"der", "der">,
+        ): Promise<{
+            publicKey: NonSharedBuffer;
+            privateKey: NonSharedBuffer;
+        }>;
+        function __promisify__(
+            type: "ed25519",
+            options?: ED25519KeyPairKeyObjectOptions,
+        ): Promise;
+        function __promisify__(
+            type: "ed448",
+            options: ED448KeyPairOptions<"pem", "pem">,
+        ): Promise<{
+            publicKey: string;
+            privateKey: string;
+        }>;
+        function __promisify__(
+            type: "ed448",
+            options: ED448KeyPairOptions<"pem", "der">,
+        ): Promise<{
+            publicKey: string;
+            privateKey: NonSharedBuffer;
+        }>;
+        function __promisify__(
+            type: "ed448",
+            options: ED448KeyPairOptions<"der", "pem">,
+        ): Promise<{
+            publicKey: NonSharedBuffer;
+            privateKey: string;
+        }>;
+        function __promisify__(
+            type: "ed448",
+            options: ED448KeyPairOptions<"der", "der">,
+        ): Promise<{
+            publicKey: NonSharedBuffer;
+            privateKey: NonSharedBuffer;
+        }>;
+        function __promisify__(type: "ed448", options?: ED448KeyPairKeyObjectOptions): Promise;
+        function __promisify__(
+            type: "x25519",
+            options: X25519KeyPairOptions<"pem", "pem">,
+        ): Promise<{
+            publicKey: string;
+            privateKey: string;
+        }>;
+        function __promisify__(
+            type: "x25519",
+            options: X25519KeyPairOptions<"pem", "der">,
+        ): Promise<{
+            publicKey: string;
+            privateKey: NonSharedBuffer;
+        }>;
+        function __promisify__(
+            type: "x25519",
+            options: X25519KeyPairOptions<"der", "pem">,
+        ): Promise<{
+            publicKey: NonSharedBuffer;
+            privateKey: string;
+        }>;
+        function __promisify__(
+            type: "x25519",
+            options: X25519KeyPairOptions<"der", "der">,
+        ): Promise<{
+            publicKey: NonSharedBuffer;
+            privateKey: NonSharedBuffer;
+        }>;
+        function __promisify__(
+            type: "x25519",
+            options?: X25519KeyPairKeyObjectOptions,
+        ): Promise;
+        function __promisify__(
+            type: "x448",
+            options: X448KeyPairOptions<"pem", "pem">,
+        ): Promise<{
+            publicKey: string;
+            privateKey: string;
+        }>;
+        function __promisify__(
+            type: "x448",
+            options: X448KeyPairOptions<"pem", "der">,
+        ): Promise<{
+            publicKey: string;
+            privateKey: NonSharedBuffer;
+        }>;
+        function __promisify__(
+            type: "x448",
+            options: X448KeyPairOptions<"der", "pem">,
+        ): Promise<{
+            publicKey: NonSharedBuffer;
+            privateKey: string;
+        }>;
+        function __promisify__(
+            type: "x448",
+            options: X448KeyPairOptions<"der", "der">,
+        ): Promise<{
+            publicKey: NonSharedBuffer;
+            privateKey: NonSharedBuffer;
+        }>;
+        function __promisify__(type: "x448", options?: X448KeyPairKeyObjectOptions): Promise;
+        function __promisify__(
+            type: "ml-dsa-44" | "ml-dsa-65" | "ml-dsa-87",
+            options: MLDSAKeyPairOptions<"pem", "pem">,
+        ): Promise<{
+            publicKey: string;
+            privateKey: string;
+        }>;
+        function __promisify__(
+            type: "ml-dsa-44" | "ml-dsa-65" | "ml-dsa-87",
+            options: MLDSAKeyPairOptions<"pem", "der">,
+        ): Promise<{
+            publicKey: string;
+            privateKey: NonSharedBuffer;
+        }>;
+        function __promisify__(
+            type: "ml-dsa-44" | "ml-dsa-65" | "ml-dsa-87",
+            options: MLDSAKeyPairOptions<"der", "pem">,
+        ): Promise<{
+            publicKey: NonSharedBuffer;
+            privateKey: string;
+        }>;
+        function __promisify__(
+            type: "ml-dsa-44" | "ml-dsa-65" | "ml-dsa-87",
+            options: MLDSAKeyPairOptions<"der", "der">,
+        ): Promise<{
+            publicKey: NonSharedBuffer;
+            privateKey: NonSharedBuffer;
+        }>;
+        function __promisify__(
+            type: "ml-dsa-44" | "ml-dsa-65" | "ml-dsa-87",
+            options?: MLDSAKeyPairKeyObjectOptions,
+        ): Promise;
+        function __promisify__(
+            type: "ml-kem-1024" | "ml-kem-512" | "ml-kem-768",
+            options: MLKEMKeyPairOptions<"pem", "pem">,
+        ): Promise<{
+            publicKey: string;
+            privateKey: string;
+        }>;
+        function __promisify__(
+            type: "ml-kem-1024" | "ml-kem-512" | "ml-kem-768",
+            options: MLKEMKeyPairOptions<"pem", "der">,
+        ): Promise<{
+            publicKey: string;
+            privateKey: NonSharedBuffer;
+        }>;
+        function __promisify__(
+            type: "ml-kem-1024" | "ml-kem-512" | "ml-kem-768",
+            options: MLKEMKeyPairOptions<"der", "pem">,
+        ): Promise<{
+            publicKey: NonSharedBuffer;
+            privateKey: string;
+        }>;
+        function __promisify__(
+            type: "ml-kem-1024" | "ml-kem-512" | "ml-kem-768",
+            options: MLKEMKeyPairOptions<"der", "der">,
+        ): Promise<{
+            publicKey: NonSharedBuffer;
+            privateKey: NonSharedBuffer;
+        }>;
+        function __promisify__(
+            type: "ml-kem-1024" | "ml-kem-512" | "ml-kem-768",
+            options?: MLKEMKeyPairKeyObjectOptions,
+        ): Promise;
+        function __promisify__(
+            type:
+                | "slh-dsa-sha2-128f"
+                | "slh-dsa-sha2-128s"
+                | "slh-dsa-sha2-192f"
+                | "slh-dsa-sha2-192s"
+                | "slh-dsa-sha2-256f"
+                | "slh-dsa-sha2-256s"
+                | "slh-dsa-shake-128f"
+                | "slh-dsa-shake-128s"
+                | "slh-dsa-shake-192f"
+                | "slh-dsa-shake-192s"
+                | "slh-dsa-shake-256f"
+                | "slh-dsa-shake-256s",
+            options: SLHDSAKeyPairOptions<"pem", "pem">,
+        ): Promise<{
+            publicKey: string;
+            privateKey: string;
+        }>;
+        function __promisify__(
+            type:
+                | "slh-dsa-sha2-128f"
+                | "slh-dsa-sha2-128s"
+                | "slh-dsa-sha2-192f"
+                | "slh-dsa-sha2-192s"
+                | "slh-dsa-sha2-256f"
+                | "slh-dsa-sha2-256s"
+                | "slh-dsa-shake-128f"
+                | "slh-dsa-shake-128s"
+                | "slh-dsa-shake-192f"
+                | "slh-dsa-shake-192s"
+                | "slh-dsa-shake-256f"
+                | "slh-dsa-shake-256s",
+            options: SLHDSAKeyPairOptions<"pem", "der">,
+        ): Promise<{
+            publicKey: string;
+            privateKey: Buffer;
+        }>;
+        function __promisify__(
+            type:
+                | "slh-dsa-sha2-128f"
+                | "slh-dsa-sha2-128s"
+                | "slh-dsa-sha2-192f"
+                | "slh-dsa-sha2-192s"
+                | "slh-dsa-sha2-256f"
+                | "slh-dsa-sha2-256s"
+                | "slh-dsa-shake-128f"
+                | "slh-dsa-shake-128s"
+                | "slh-dsa-shake-192f"
+                | "slh-dsa-shake-192s"
+                | "slh-dsa-shake-256f"
+                | "slh-dsa-shake-256s",
+            options: SLHDSAKeyPairOptions<"der", "pem">,
+        ): Promise<{
+            publicKey: Buffer;
+            privateKey: string;
+        }>;
+        function __promisify__(
+            type:
+                | "slh-dsa-sha2-128f"
+                | "slh-dsa-sha2-128s"
+                | "slh-dsa-sha2-192f"
+                | "slh-dsa-sha2-192s"
+                | "slh-dsa-sha2-256f"
+                | "slh-dsa-sha2-256s"
+                | "slh-dsa-shake-128f"
+                | "slh-dsa-shake-128s"
+                | "slh-dsa-shake-192f"
+                | "slh-dsa-shake-192s"
+                | "slh-dsa-shake-256f"
+                | "slh-dsa-shake-256s",
+            options: SLHDSAKeyPairOptions<"der", "der">,
+        ): Promise<{
+            publicKey: Buffer;
+            privateKey: Buffer;
+        }>;
+        function __promisify__(
+            type:
+                | "slh-dsa-sha2-128f"
+                | "slh-dsa-sha2-128s"
+                | "slh-dsa-sha2-192f"
+                | "slh-dsa-sha2-192s"
+                | "slh-dsa-sha2-256f"
+                | "slh-dsa-sha2-256s"
+                | "slh-dsa-shake-128f"
+                | "slh-dsa-shake-128s"
+                | "slh-dsa-shake-192f"
+                | "slh-dsa-shake-192s"
+                | "slh-dsa-shake-256f"
+                | "slh-dsa-shake-256s",
+            options?: SLHDSAKeyPairKeyObjectOptions,
+        ): Promise;
+    }
+    /**
+     * Calculates and returns the signature for `data` using the given private key and
+     * algorithm. If `algorithm` is `null` or `undefined`, then the algorithm is
+     * dependent upon the key type.
+     *
+     * `algorithm` is required to be `null` or `undefined` for Ed25519, Ed448, and
+     * ML-DSA.
+     *
+     * If `key` is not a `KeyObject`, this function behaves as if `key` had been
+     * passed to {@link createPrivateKey}. If it is an object, the following
+     * additional properties can be passed:
+     *
+     * If the `callback` function is provided this function uses libuv's threadpool.
+     * @since v12.0.0
+     */
+    function sign(
+        algorithm: string | null | undefined,
+        data: NodeJS.ArrayBufferView,
+        key: KeyLike | SignKeyObjectInput | SignPrivateKeyInput | SignJsonWebKeyInput,
+    ): NonSharedBuffer;
+    function sign(
+        algorithm: string | null | undefined,
+        data: NodeJS.ArrayBufferView,
+        key: KeyLike | SignKeyObjectInput | SignPrivateKeyInput | SignJsonWebKeyInput,
+        callback: (error: Error | null, data: NonSharedBuffer) => void,
+    ): void;
+    /**
+     * Verifies the given signature for `data` using the given key and algorithm. If
+     * `algorithm` is `null` or `undefined`, then the algorithm is dependent upon the
+     * key type.
+     *
+     * `algorithm` is required to be `null` or `undefined` for Ed25519, Ed448, and
+     * ML-DSA.
+     *
+     * If `key` is not a `KeyObject`, this function behaves as if `key` had been
+     * passed to {@link createPublicKey}. If it is an object, the following
+     * additional properties can be passed:
+     *
+     * The `signature` argument is the previously calculated signature for the `data`.
+     *
+     * Because public keys can be derived from private keys, a private key or a public
+     * key may be passed for `key`.
+     *
+     * If the `callback` function is provided this function uses libuv's threadpool.
+     * @since v12.0.0
+     */
+    function verify(
+        algorithm: string | null | undefined,
+        data: NodeJS.ArrayBufferView,
+        key: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput | VerifyJsonWebKeyInput,
+        signature: NodeJS.ArrayBufferView,
+    ): boolean;
+    function verify(
+        algorithm: string | null | undefined,
+        data: NodeJS.ArrayBufferView,
+        key: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput | VerifyJsonWebKeyInput,
+        signature: NodeJS.ArrayBufferView,
+        callback: (error: Error | null, result: boolean) => void,
+    ): void;
+    /**
+     * Key decapsulation using a KEM algorithm with a private key.
+     *
+     * Supported key types and their KEM algorithms are:
+     *
+     * * `'rsa'` RSA Secret Value Encapsulation
+     * * `'ec'` DHKEM(P-256, HKDF-SHA256), DHKEM(P-384, HKDF-SHA256), DHKEM(P-521, HKDF-SHA256)
+     * * `'x25519'` DHKEM(X25519, HKDF-SHA256)
+     * * `'x448'` DHKEM(X448, HKDF-SHA512)
+     * * `'ml-kem-512'` ML-KEM
+     * * `'ml-kem-768'` ML-KEM
+     * * `'ml-kem-1024'` ML-KEM
+     *
+     * If `key` is not a {@link KeyObject}, this function behaves as if `key` had been
+     * passed to `crypto.createPrivateKey()`.
+     *
+     * If the `callback` function is provided this function uses libuv's threadpool.
+     * @since v24.7.0
+     */
+    function decapsulate(
+        key: KeyLike | PrivateKeyInput | JsonWebKeyInput,
+        ciphertext: ArrayBuffer | NodeJS.ArrayBufferView,
+    ): NonSharedBuffer;
+    function decapsulate(
+        key: KeyLike | PrivateKeyInput | JsonWebKeyInput,
+        ciphertext: ArrayBuffer | NodeJS.ArrayBufferView,
+        callback: (err: Error, sharedKey: NonSharedBuffer) => void,
+    ): void;
+    /**
+     * Computes the Diffie-Hellman shared secret based on a `privateKey` and a `publicKey`.
+     * Both keys must have the same `asymmetricKeyType` and must support either the DH or
+     * ECDH operation.
+     *
+     * If the `callback` function is provided this function uses libuv's threadpool.
+     * @since v13.9.0, v12.17.0
+     */
+    function diffieHellman(options: { privateKey: KeyObject; publicKey: KeyObject }): NonSharedBuffer;
+    function diffieHellman(
+        options: { privateKey: KeyObject; publicKey: KeyObject },
+        callback: (err: Error | null, secret: NonSharedBuffer) => void,
+    ): void;
+    /**
+     * Key encapsulation using a KEM algorithm with a public key.
+     *
+     * Supported key types and their KEM algorithms are:
+     *
+     * * `'rsa'` RSA Secret Value Encapsulation
+     * * `'ec'` DHKEM(P-256, HKDF-SHA256), DHKEM(P-384, HKDF-SHA256), DHKEM(P-521, HKDF-SHA256)
+     * * `'x25519'` DHKEM(X25519, HKDF-SHA256)
+     * * `'x448'` DHKEM(X448, HKDF-SHA512)
+     * * `'ml-kem-512'` ML-KEM
+     * * `'ml-kem-768'` ML-KEM
+     * * `'ml-kem-1024'` ML-KEM
+     *
+     * If `key` is not a {@link KeyObject}, this function behaves as if `key` had been
+     * passed to `crypto.createPublicKey()`.
+     *
+     * If the `callback` function is provided this function uses libuv's threadpool.
+     * @since v24.7.0
+     */
+    function encapsulate(
+        key: KeyLike | PublicKeyInput | JsonWebKeyInput,
+    ): { sharedKey: NonSharedBuffer; ciphertext: NonSharedBuffer };
+    function encapsulate(
+        key: KeyLike | PublicKeyInput | JsonWebKeyInput,
+        callback: (err: Error, result: { sharedKey: NonSharedBuffer; ciphertext: NonSharedBuffer }) => void,
+    ): void;
+    interface OneShotDigestOptions {
+        /**
+         * Encoding used to encode the returned digest.
+         * @default 'hex'
+         */
+        outputEncoding?: BinaryToTextEncoding | "buffer" | undefined;
+        /**
+         * For XOF hash functions such as 'shake256', the outputLength option
+         * can be used to specify the desired output length in bytes.
+         */
+        outputLength?: number | undefined;
+    }
+    interface OneShotDigestOptionsWithStringEncoding extends OneShotDigestOptions {
+        outputEncoding?: BinaryToTextEncoding | undefined;
+    }
+    interface OneShotDigestOptionsWithBufferEncoding extends OneShotDigestOptions {
+        outputEncoding: "buffer";
+    }
+    /**
+     * A utility for creating one-shot hash digests of data. It can be faster than
+     * the object-based `crypto.createHash()` when hashing a smaller amount of data
+     * (<= 5MB) that's readily available. If the data can be big or if it is streamed,
+     * it's still recommended to use `crypto.createHash()` instead.
+     *
+     * The `algorithm` is dependent on the available algorithms supported by the
+     * version of OpenSSL on the platform. Examples are `'sha256'`, `'sha512'`, etc.
+     * On recent releases of OpenSSL, `openssl list -digest-algorithms` will
+     * display the available digest algorithms.
+     *
+     * If `options` is a string, then it specifies the `outputEncoding`.
+     *
+     * Example:
+     *
+     * ```js
+     * import crypto from 'node:crypto';
+     * import { Buffer } from 'node:buffer';
+     *
+     * // Hashing a string and return the result as a hex-encoded string.
+     * const string = 'Node.js';
+     * // 10b3493287f831e81a438811a1ffba01f8cec4b7
+     * console.log(crypto.hash('sha1', string));
+     *
+     * // Encode a base64-encoded string into a Buffer, hash it and return
+     * // the result as a buffer.
+     * const base64 = 'Tm9kZS5qcw==';
+     * // 
+     * console.log(crypto.hash('sha1', Buffer.from(base64, 'base64'), 'buffer'));
+     * ```
+     * @since v21.7.0, v20.12.0
+     * @param data When `data` is a string, it will be encoded as UTF-8 before being hashed. If a different
+     * input encoding is desired for a string input, user could encode the string
+     * into a `TypedArray` using either `TextEncoder` or `Buffer.from()` and passing
+     * the encoded `TypedArray` into this API instead.
+     */
+    function hash(
+        algorithm: string,
+        data: BinaryLike,
+        options?: OneShotDigestOptionsWithStringEncoding | BinaryToTextEncoding,
+    ): string;
+    function hash(
+        algorithm: string,
+        data: BinaryLike,
+        options: OneShotDigestOptionsWithBufferEncoding | "buffer",
+    ): NonSharedBuffer;
+    function hash(
+        algorithm: string,
+        data: BinaryLike,
+        options: OneShotDigestOptions | BinaryToTextEncoding | "buffer",
+    ): string | NonSharedBuffer;
+    type CipherMode = "cbc" | "ccm" | "cfb" | "ctr" | "ecb" | "gcm" | "ocb" | "ofb" | "stream" | "wrap" | "xts";
+    interface CipherInfoOptions {
+        /**
+         * A test key length.
+         */
+        keyLength?: number | undefined;
+        /**
+         * A test IV length.
+         */
+        ivLength?: number | undefined;
+    }
+    interface CipherInfo {
+        /**
+         * The name of the cipher.
+         */
+        name: string;
+        /**
+         * The nid of the cipher.
+         */
+        nid: number;
+        /**
+         * The block size of the cipher in bytes.
+         * This property is omitted when mode is 'stream'.
+         */
+        blockSize?: number | undefined;
+        /**
+         * The expected or default initialization vector length in bytes.
+         * This property is omitted if the cipher does not use an initialization vector.
+         */
+        ivLength?: number | undefined;
+        /**
+         * The expected or default key length in bytes.
+         */
+        keyLength: number;
+        /**
+         * The cipher mode.
+         */
+        mode: CipherMode;
+    }
+    /**
+     * Returns information about a given cipher.
+     *
+     * Some ciphers accept variable length keys and initialization vectors. By default,
+     * the `crypto.getCipherInfo()` method will return the default values for these
+     * ciphers. To test if a given key length or iv length is acceptable for given
+     * cipher, use the `keyLength` and `ivLength` options. If the given values are
+     * unacceptable, `undefined` will be returned.
+     * @since v15.0.0
+     * @param nameOrNid The name or nid of the cipher to query.
+     */
+    function getCipherInfo(nameOrNid: string | number, options?: CipherInfoOptions): CipherInfo | undefined;
+    /**
+     * HKDF is a simple key derivation function defined in RFC 5869\. The given `ikm`, `salt` and `info` are used with the `digest` to derive a key of `keylen` bytes.
+     *
+     * The supplied `callback` function is called with two arguments: `err` and `derivedKey`. If an errors occurs while deriving the key, `err` will be set;
+     * otherwise `err` will be `null`. The successfully generated `derivedKey` will
+     * be passed to the callback as an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). An error will be thrown if any
+     * of the input arguments specify invalid values or types.
+     *
+     * ```js
+     * import { Buffer } from 'node:buffer';
+     * const {
+     *   hkdf,
+     * } = await import('node:crypto');
+     *
+     * hkdf('sha512', 'key', 'salt', 'info', 64, (err, derivedKey) => {
+     *   if (err) throw err;
+     *   console.log(Buffer.from(derivedKey).toString('hex'));  // '24156e2...5391653'
+     * });
+     * ```
+     * @since v15.0.0
+     * @param digest The digest algorithm to use.
+     * @param ikm The input keying material. Must be provided but can be zero-length.
+     * @param salt The salt value. Must be provided but can be zero-length.
+     * @param info Additional info value. Must be provided but can be zero-length, and cannot be more than 1024 bytes.
+     * @param keylen The length of the key to generate. Must be greater than 0. The maximum allowable value is `255` times the number of bytes produced by the selected digest function (e.g. `sha512`
+     * generates 64-byte hashes, making the maximum HKDF output 16320 bytes).
+     */
+    function hkdf(
+        digest: string,
+        irm: BinaryLike | KeyObject,
+        salt: BinaryLike,
+        info: BinaryLike,
+        keylen: number,
+        callback: (err: Error | null, derivedKey: ArrayBuffer) => void,
+    ): void;
+    /**
+     * Provides a synchronous HKDF key derivation function as defined in RFC 5869\. The
+     * given `ikm`, `salt` and `info` are used with the `digest` to derive a key of `keylen` bytes.
+     *
+     * The successfully generated `derivedKey` will be returned as an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer).
+     *
+     * An error will be thrown if any of the input arguments specify invalid values or
+     * types, or if the derived key cannot be generated.
+     *
+     * ```js
+     * import { Buffer } from 'node:buffer';
+     * const {
+     *   hkdfSync,
+     * } = await import('node:crypto');
+     *
+     * const derivedKey = hkdfSync('sha512', 'key', 'salt', 'info', 64);
+     * console.log(Buffer.from(derivedKey).toString('hex'));  // '24156e2...5391653'
+     * ```
+     * @since v15.0.0
+     * @param digest The digest algorithm to use.
+     * @param ikm The input keying material. Must be provided but can be zero-length.
+     * @param salt The salt value. Must be provided but can be zero-length.
+     * @param info Additional info value. Must be provided but can be zero-length, and cannot be more than 1024 bytes.
+     * @param keylen The length of the key to generate. Must be greater than 0. The maximum allowable value is `255` times the number of bytes produced by the selected digest function (e.g. `sha512`
+     * generates 64-byte hashes, making the maximum HKDF output 16320 bytes).
+     */
+    function hkdfSync(
+        digest: string,
+        ikm: BinaryLike | KeyObject,
+        salt: BinaryLike,
+        info: BinaryLike,
+        keylen: number,
+    ): ArrayBuffer;
+    interface SecureHeapUsage {
+        /**
+         * The total allocated secure heap size as specified using the `--secure-heap=n` command-line flag.
+         */
+        total: number;
+        /**
+         * The minimum allocation from the secure heap as specified using the `--secure-heap-min` command-line flag.
+         */
+        min: number;
+        /**
+         * The total number of bytes currently allocated from the secure heap.
+         */
+        used: number;
+        /**
+         * The calculated ratio of `used` to `total` allocated bytes.
+         */
+        utilization: number;
+    }
+    /**
+     * @since v15.6.0
+     */
+    function secureHeapUsed(): SecureHeapUsage;
+    interface RandomUUIDOptions {
+        /**
+         * By default, to improve performance,
+         * Node.js will pre-emptively generate and persistently cache enough
+         * random data to generate up to 128 random UUIDs. To generate a UUID
+         * without using the cache, set `disableEntropyCache` to `true`.
+         *
+         * @default `false`
+         */
+        disableEntropyCache?: boolean | undefined;
+    }
+    type UUID = `${string}-${string}-${string}-${string}-${string}`;
+    /**
+     * Generates a random [RFC 4122](https://www.rfc-editor.org/rfc/rfc4122.txt) version 4 UUID. The UUID is generated using a
+     * cryptographic pseudorandom number generator.
+     * @since v15.6.0, v14.17.0
+     */
+    function randomUUID(options?: RandomUUIDOptions): UUID;
+    interface X509CheckOptions {
+        /**
+         * @default 'always'
+         */
+        subject?: "always" | "default" | "never" | undefined;
+        /**
+         * @default true
+         */
+        wildcards?: boolean | undefined;
+        /**
+         * @default true
+         */
+        partialWildcards?: boolean | undefined;
+        /**
+         * @default false
+         */
+        multiLabelWildcards?: boolean | undefined;
+        /**
+         * @default false
+         */
+        singleLabelSubdomains?: boolean | undefined;
+    }
+    /**
+     * Encapsulates an X509 certificate and provides read-only access to
+     * its information.
+     *
+     * ```js
+     * const { X509Certificate } = await import('node:crypto');
+     *
+     * const x509 = new X509Certificate('{... pem encoded cert ...}');
+     *
+     * console.log(x509.subject);
+     * ```
+     * @since v15.6.0
+     */
+    class X509Certificate {
+        /**
+         * Will be \`true\` if this is a Certificate Authority (CA) certificate.
+         * @since v15.6.0
+         */
+        readonly ca: boolean;
+        /**
+         * The SHA-1 fingerprint of this certificate.
+         *
+         * Because SHA-1 is cryptographically broken and because the security of SHA-1 is
+         * significantly worse than that of algorithms that are commonly used to sign
+         * certificates, consider using `x509.fingerprint256` instead.
+         * @since v15.6.0
+         */
+        readonly fingerprint: string;
+        /**
+         * The SHA-256 fingerprint of this certificate.
+         * @since v15.6.0
+         */
+        readonly fingerprint256: string;
+        /**
+         * The SHA-512 fingerprint of this certificate.
+         *
+         * Because computing the SHA-256 fingerprint is usually faster and because it is
+         * only half the size of the SHA-512 fingerprint, `x509.fingerprint256` may be
+         * a better choice. While SHA-512 presumably provides a higher level of security in
+         * general, the security of SHA-256 matches that of most algorithms that are
+         * commonly used to sign certificates.
+         * @since v17.2.0, v16.14.0
+         */
+        readonly fingerprint512: string;
+        /**
+         * The complete subject of this certificate.
+         * @since v15.6.0
+         */
+        readonly subject: string;
+        /**
+         * The subject alternative name specified for this certificate.
+         *
+         * This is a comma-separated list of subject alternative names. Each entry begins
+         * with a string identifying the kind of the subject alternative name followed by
+         * a colon and the value associated with the entry.
+         *
+         * Earlier versions of Node.js incorrectly assumed that it is safe to split this
+         * property at the two-character sequence `', '` (see [CVE-2021-44532](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44532)). However,
+         * both malicious and legitimate certificates can contain subject alternative names
+         * that include this sequence when represented as a string.
+         *
+         * After the prefix denoting the type of the entry, the remainder of each entry
+         * might be enclosed in quotes to indicate that the value is a JSON string literal.
+         * For backward compatibility, Node.js only uses JSON string literals within this
+         * property when necessary to avoid ambiguity. Third-party code should be prepared
+         * to handle both possible entry formats.
+         * @since v15.6.0
+         */
+        readonly subjectAltName: string | undefined;
+        /**
+         * A textual representation of the certificate's authority information access
+         * extension.
+         *
+         * This is a line feed separated list of access descriptions. Each line begins with
+         * the access method and the kind of the access location, followed by a colon and
+         * the value associated with the access location.
+         *
+         * After the prefix denoting the access method and the kind of the access location,
+         * the remainder of each line might be enclosed in quotes to indicate that the
+         * value is a JSON string literal. For backward compatibility, Node.js only uses
+         * JSON string literals within this property when necessary to avoid ambiguity.
+         * Third-party code should be prepared to handle both possible entry formats.
+         * @since v15.6.0
+         */
+        readonly infoAccess: string | undefined;
+        /**
+         * An array detailing the key usages for this certificate.
+         * @since v15.6.0
+         */
+        readonly keyUsage: string[];
+        /**
+         * The issuer identification included in this certificate.
+         * @since v15.6.0
+         */
+        readonly issuer: string;
+        /**
+         * The issuer certificate or `undefined` if the issuer certificate is not
+         * available.
+         * @since v15.9.0
+         */
+        readonly issuerCertificate: X509Certificate | undefined;
+        /**
+         * The public key `KeyObject` for this certificate.
+         * @since v15.6.0
+         */
+        readonly publicKey: KeyObject;
+        /**
+         * A `Buffer` containing the DER encoding of this certificate.
+         * @since v15.6.0
+         */
+        readonly raw: NonSharedBuffer;
+        /**
+         * The serial number of this certificate.
+         *
+         * Serial numbers are assigned by certificate authorities and do not uniquely
+         * identify certificates. Consider using `x509.fingerprint256` as a unique
+         * identifier instead.
+         * @since v15.6.0
+         */
+        readonly serialNumber: string;
+        /**
+         * The algorithm used to sign the certificate or `undefined` if the signature algorithm is unknown by OpenSSL.
+         * @since v24.9.0
+         */
+        readonly signatureAlgorithm: string | undefined;
+        /**
+         * The OID of the algorithm used to sign the certificate.
+         * @since v24.9.0
+         */
+        readonly signatureAlgorithmOid: string;
+        /**
+         * The date/time from which this certificate is considered valid.
+         * @since v15.6.0
+         */
+        readonly validFrom: string;
+        /**
+         * The date/time from which this certificate is valid, encapsulated in a `Date` object.
+         * @since v22.10.0
+         */
+        readonly validFromDate: Date;
+        /**
+         * The date/time until which this certificate is considered valid.
+         * @since v15.6.0
+         */
+        readonly validTo: string;
+        /**
+         * The date/time until which this certificate is valid, encapsulated in a `Date` object.
+         * @since v22.10.0
+         */
+        readonly validToDate: Date;
+        constructor(buffer: BinaryLike);
+        /**
+         * Checks whether the certificate matches the given email address.
+         *
+         * If the `'subject'` option is undefined or set to `'default'`, the certificate
+         * subject is only considered if the subject alternative name extension either does
+         * not exist or does not contain any email addresses.
+         *
+         * If the `'subject'` option is set to `'always'` and if the subject alternative
+         * name extension either does not exist or does not contain a matching email
+         * address, the certificate subject is considered.
+         *
+         * If the `'subject'` option is set to `'never'`, the certificate subject is never
+         * considered, even if the certificate contains no subject alternative names.
+         * @since v15.6.0
+         * @return Returns `email` if the certificate matches, `undefined` if it does not.
+         */
+        checkEmail(email: string, options?: Pick): string | undefined;
+        /**
+         * Checks whether the certificate matches the given host name.
+         *
+         * If the certificate matches the given host name, the matching subject name is
+         * returned. The returned name might be an exact match (e.g., `foo.example.com`)
+         * or it might contain wildcards (e.g., `*.example.com`). Because host name
+         * comparisons are case-insensitive, the returned subject name might also differ
+         * from the given `name` in capitalization.
+         *
+         * If the `'subject'` option is undefined or set to `'default'`, the certificate
+         * subject is only considered if the subject alternative name extension either does
+         * not exist or does not contain any DNS names. This behavior is consistent with [RFC 2818](https://www.rfc-editor.org/rfc/rfc2818.txt) ("HTTP Over TLS").
+         *
+         * If the `'subject'` option is set to `'always'` and if the subject alternative
+         * name extension either does not exist or does not contain a matching DNS name,
+         * the certificate subject is considered.
+         *
+         * If the `'subject'` option is set to `'never'`, the certificate subject is never
+         * considered, even if the certificate contains no subject alternative names.
+         * @since v15.6.0
+         * @return Returns a subject name that matches `name`, or `undefined` if no subject name matches `name`.
+         */
+        checkHost(name: string, options?: X509CheckOptions): string | undefined;
+        /**
+         * Checks whether the certificate matches the given IP address (IPv4 or IPv6).
+         *
+         * Only [RFC 5280](https://www.rfc-editor.org/rfc/rfc5280.txt) `iPAddress` subject alternative names are considered, and they
+         * must match the given `ip` address exactly. Other subject alternative names as
+         * well as the subject field of the certificate are ignored.
+         * @since v15.6.0
+         * @return Returns `ip` if the certificate matches, `undefined` if it does not.
+         */
+        checkIP(ip: string): string | undefined;
+        /**
+         * Checks whether this certificate was potentially issued by the given `otherCert`
+         * by comparing the certificate metadata.
+         *
+         * This is useful for pruning a list of possible issuer certificates which have been
+         * selected using a more rudimentary filtering routine, i.e. just based on subject
+         * and issuer names.
+         *
+         * Finally, to verify that this certificate's signature was produced by a private key
+         * corresponding to `otherCert`'s public key use `x509.verify(publicKey)`
+         * with `otherCert`'s public key represented as a `KeyObject`
+         * like so
+         *
+         * ```js
+         * if (!x509.verify(otherCert.publicKey)) {
+         *   throw new Error('otherCert did not issue x509');
+         * }
+         * ```
+         * @since v15.6.0
+         */
+        checkIssued(otherCert: X509Certificate): boolean;
+        /**
+         * Checks whether the public key for this certificate is consistent with
+         * the given private key.
+         * @since v15.6.0
+         * @param privateKey A private key.
+         */
+        checkPrivateKey(privateKey: KeyObject): boolean;
+        /**
+         * There is no standard JSON encoding for X509 certificates. The`toJSON()` method returns a string containing the PEM encoded
+         * certificate.
+         * @since v15.6.0
+         */
+        toJSON(): string;
+        /**
+         * Returns information about this certificate using the legacy `certificate object` encoding.
+         * @since v15.6.0
+         */
+        toLegacyObject(): PeerCertificate;
+        /**
+         * Returns the PEM-encoded certificate.
+         * @since v15.6.0
+         */
+        toString(): string;
+        /**
+         * Verifies that this certificate was signed by the given public key.
+         * Does not perform any other validation checks on the certificate.
+         * @since v15.6.0
+         * @param publicKey A public key.
+         */
+        verify(publicKey: KeyObject): boolean;
+    }
+    type LargeNumberLike = NodeJS.ArrayBufferView | SharedArrayBuffer | ArrayBuffer | bigint;
+    interface GeneratePrimeOptions {
+        add?: LargeNumberLike | undefined;
+        rem?: LargeNumberLike | undefined;
+        /**
+         * @default false
+         */
+        safe?: boolean | undefined;
+        bigint?: boolean | undefined;
+    }
+    interface GeneratePrimeOptionsBigInt extends GeneratePrimeOptions {
+        bigint: true;
+    }
+    interface GeneratePrimeOptionsArrayBuffer extends GeneratePrimeOptions {
+        bigint?: false | undefined;
+    }
+    /**
+     * Generates a pseudorandom prime of `size` bits.
+     *
+     * If `options.safe` is `true`, the prime will be a safe prime -- that is, `(prime - 1) / 2` will also be a prime.
+     *
+     * The `options.add` and `options.rem` parameters can be used to enforce additional
+     * requirements, e.g., for Diffie-Hellman:
+     *
+     * * If `options.add` and `options.rem` are both set, the prime will satisfy the
+     * condition that `prime % add = rem`.
+     * * If only `options.add` is set and `options.safe` is not `true`, the prime will
+     * satisfy the condition that `prime % add = 1`.
+     * * If only `options.add` is set and `options.safe` is set to `true`, the prime
+     * will instead satisfy the condition that `prime % add = 3`. This is necessary
+     * because `prime % add = 1` for `options.add > 2` would contradict the condition
+     * enforced by `options.safe`.
+     * * `options.rem` is ignored if `options.add` is not given.
+     *
+     * Both `options.add` and `options.rem` must be encoded as big-endian sequences
+     * if given as an `ArrayBuffer`, `SharedArrayBuffer`, `TypedArray`, `Buffer`, or `DataView`.
+     *
+     * By default, the prime is encoded as a big-endian sequence of octets
+     * in an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). If the `bigint` option is `true`, then a
+     * [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) is provided.
+     * @since v15.8.0
+     * @param size The size (in bits) of the prime to generate.
+     */
+    function generatePrime(size: number, callback: (err: Error | null, prime: ArrayBuffer) => void): void;
+    function generatePrime(
+        size: number,
+        options: GeneratePrimeOptionsBigInt,
+        callback: (err: Error | null, prime: bigint) => void,
+    ): void;
+    function generatePrime(
+        size: number,
+        options: GeneratePrimeOptionsArrayBuffer,
+        callback: (err: Error | null, prime: ArrayBuffer) => void,
+    ): void;
+    function generatePrime(
+        size: number,
+        options: GeneratePrimeOptions,
+        callback: (err: Error | null, prime: ArrayBuffer | bigint) => void,
+    ): void;
+    /**
+     * Generates a pseudorandom prime of `size` bits.
+     *
+     * If `options.safe` is `true`, the prime will be a safe prime -- that is, `(prime - 1) / 2` will also be a prime.
+     *
+     * The `options.add` and `options.rem` parameters can be used to enforce additional
+     * requirements, e.g., for Diffie-Hellman:
+     *
+     * * If `options.add` and `options.rem` are both set, the prime will satisfy the
+     * condition that `prime % add = rem`.
+     * * If only `options.add` is set and `options.safe` is not `true`, the prime will
+     * satisfy the condition that `prime % add = 1`.
+     * * If only `options.add` is set and `options.safe` is set to `true`, the prime
+     * will instead satisfy the condition that `prime % add = 3`. This is necessary
+     * because `prime % add = 1` for `options.add > 2` would contradict the condition
+     * enforced by `options.safe`.
+     * * `options.rem` is ignored if `options.add` is not given.
+     *
+     * Both `options.add` and `options.rem` must be encoded as big-endian sequences
+     * if given as an `ArrayBuffer`, `SharedArrayBuffer`, `TypedArray`, `Buffer`, or `DataView`.
+     *
+     * By default, the prime is encoded as a big-endian sequence of octets
+     * in an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). If the `bigint` option is `true`, then a
+     * [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) is provided.
+     * @since v15.8.0
+     * @param size The size (in bits) of the prime to generate.
+     */
+    function generatePrimeSync(size: number): ArrayBuffer;
+    function generatePrimeSync(size: number, options: GeneratePrimeOptionsBigInt): bigint;
+    function generatePrimeSync(size: number, options: GeneratePrimeOptionsArrayBuffer): ArrayBuffer;
+    function generatePrimeSync(size: number, options: GeneratePrimeOptions): ArrayBuffer | bigint;
+    interface CheckPrimeOptions {
+        /**
+         * The number of Miller-Rabin probabilistic primality iterations to perform.
+         * When the value is 0 (zero), a number of checks is used that yields a false positive rate of at most `2**-64` for random input.
+         * Care must be used when selecting a number of checks.
+         * Refer to the OpenSSL documentation for the BN_is_prime_ex function nchecks options for more details.
+         *
+         * @default 0
+         */
+        checks?: number | undefined;
+    }
+    /**
+     * Checks the primality of the `candidate`.
+     * @since v15.8.0
+     * @param candidate A possible prime encoded as a sequence of big endian octets of arbitrary length.
+     */
+    function checkPrime(value: LargeNumberLike, callback: (err: Error | null, result: boolean) => void): void;
+    function checkPrime(
+        value: LargeNumberLike,
+        options: CheckPrimeOptions,
+        callback: (err: Error | null, result: boolean) => void,
+    ): void;
+    /**
+     * Checks the primality of the `candidate`.
+     * @since v15.8.0
+     * @param candidate A possible prime encoded as a sequence of big endian octets of arbitrary length.
+     * @return `true` if the candidate is a prime with an error probability less than `0.25 ** options.checks`.
+     */
+    function checkPrimeSync(candidate: LargeNumberLike, options?: CheckPrimeOptions): boolean;
+    /**
+     * Load and set the `engine` for some or all OpenSSL functions (selected by flags).
+     *
+     * `engine` could be either an id or a path to the engine's shared library.
+     *
+     * The optional `flags` argument uses `ENGINE_METHOD_ALL` by default. The `flags` is a bit field taking one of or a mix of the following flags (defined in `crypto.constants`):
+     *
+     * * `crypto.constants.ENGINE_METHOD_RSA`
+     * * `crypto.constants.ENGINE_METHOD_DSA`
+     * * `crypto.constants.ENGINE_METHOD_DH`
+     * * `crypto.constants.ENGINE_METHOD_RAND`
+     * * `crypto.constants.ENGINE_METHOD_EC`
+     * * `crypto.constants.ENGINE_METHOD_CIPHERS`
+     * * `crypto.constants.ENGINE_METHOD_DIGESTS`
+     * * `crypto.constants.ENGINE_METHOD_PKEY_METHS`
+     * * `crypto.constants.ENGINE_METHOD_PKEY_ASN1_METHS`
+     * * `crypto.constants.ENGINE_METHOD_ALL`
+     * * `crypto.constants.ENGINE_METHOD_NONE`
+     * @since v0.11.11
+     * @param flags
+     */
+    function setEngine(engine: string, flags?: number): void;
+    /**
+     * A convenient alias for {@link webcrypto.getRandomValues}. This
+     * implementation is not compliant with the Web Crypto spec, to write
+     * web-compatible code use {@link webcrypto.getRandomValues} instead.
+     * @since v17.4.0
+     * @return Returns `typedArray`.
+     */
+    function getRandomValues(typedArray: T): T;
+    type Argon2Algorithm = "argon2d" | "argon2i" | "argon2id";
+    interface Argon2Parameters {
+        /**
+         * REQUIRED, this is the password for password hashing applications of Argon2.
+         */
+        message: string | ArrayBuffer | NodeJS.ArrayBufferView;
+        /**
+         * REQUIRED, must be at least 8 bytes long. This is the salt for password hashing applications of Argon2.
+         */
+        nonce: string | ArrayBuffer | NodeJS.ArrayBufferView;
+        /**
+         * REQUIRED, degree of parallelism determines how many computational chains (lanes)
+         * can be run. Must be greater than 1 and less than `2**24-1`.
+         */
+        parallelism: number;
+        /**
+         * REQUIRED, the length of the key to generate. Must be greater than 4 and
+         * less than `2**32-1`.
+         */
+        tagLength: number;
+        /**
+         * REQUIRED, memory cost in 1KiB blocks. Must be greater than
+         * `8 * parallelism` and less than `2**32-1`. The actual number of blocks is rounded
+         * down to the nearest multiple of `4 * parallelism`.
+         */
+        memory: number;
+        /**
+         * REQUIRED, number of passes (iterations). Must be greater than 1 and less
+         * than `2**32-1`.
+         */
+        passes: number;
+        /**
+         * OPTIONAL, Random additional input,
+         * similar to the salt, that should **NOT** be stored with the derived key. This is known as pepper in
+         * password hashing applications. If used, must have a length not greater than `2**32-1` bytes.
+         */
+        secret?: string | ArrayBuffer | NodeJS.ArrayBufferView | undefined;
+        /**
+         * OPTIONAL, Additional data to
+         * be added to the hash, functionally equivalent to salt or secret, but meant for
+         * non-random data. If used, must have a length not greater than `2**32-1` bytes.
+         */
+        associatedData?: string | ArrayBuffer | NodeJS.ArrayBufferView | undefined;
+    }
+    /**
+     * Provides an asynchronous [Argon2](https://www.rfc-editor.org/rfc/rfc9106.html) implementation. Argon2 is a password-based
+     * key derivation function that is designed to be expensive computationally and
+     * memory-wise in order to make brute-force attacks unrewarding.
+     *
+     * The `nonce` should be as unique as possible. It is recommended that a nonce is
+     * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details.
+     *
+     * When passing strings for `message`, `nonce`, `secret` or `associatedData`, please
+     * consider [caveats when using strings as inputs to cryptographic APIs](https://nodejs.org/docs/latest-v24.x/api/crypto.html#using-strings-as-inputs-to-cryptographic-apis).
+     *
+     * The `callback` function is called with two arguments: `err` and `derivedKey`.
+     * `err` is an exception object when key derivation fails, otherwise `err` is
+     * `null`. `derivedKey` is passed to the callback as a `Buffer`.
+     *
+     * An exception is thrown when any of the input arguments specify invalid values
+     * or types.
+     *
+     * ```js
+     * const { argon2, randomBytes } = await import('node:crypto');
+     *
+     * const parameters = {
+     *   message: 'password',
+     *   nonce: randomBytes(16),
+     *   parallelism: 4,
+     *   tagLength: 64,
+     *   memory: 65536,
+     *   passes: 3,
+     * };
+     *
+     * argon2('argon2id', parameters, (err, derivedKey) => {
+     *   if (err) throw err;
+     *   console.log(derivedKey.toString('hex'));  // 'af91dad...9520f15'
+     * });
+     * ```
+     * @since v24.7.0
+     * @param algorithm Variant of Argon2, one of `"argon2d"`, `"argon2i"` or `"argon2id"`.
+     * @experimental
+     */
+    function argon2(
+        algorithm: Argon2Algorithm,
+        parameters: Argon2Parameters,
+        callback: (err: Error | null, derivedKey: NonSharedBuffer) => void,
+    ): void;
+    /**
+     * Provides a synchronous [Argon2][] implementation. Argon2 is a password-based
+     * key derivation function that is designed to be expensive computationally and
+     * memory-wise in order to make brute-force attacks unrewarding.
+     *
+     * The `nonce` should be as unique as possible. It is recommended that a nonce is
+     * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details.
+     *
+     * When passing strings for `message`, `nonce`, `secret` or `associatedData`, please
+     * consider [caveats when using strings as inputs to cryptographic APIs](https://nodejs.org/docs/latest-v24.x/api/crypto.html#using-strings-as-inputs-to-cryptographic-apis).
+     *
+     * An exception is thrown when key derivation fails, otherwise the derived key is
+     * returned as a `Buffer`.
+     *
+     * An exception is thrown when any of the input arguments specify invalid values
+     * or types.
+     *
+     * ```js
+     * const { argon2Sync, randomBytes } = await import('node:crypto');
+     *
+     * const parameters = {
+     *   message: 'password',
+     *   nonce: randomBytes(16),
+     *   parallelism: 4,
+     *   tagLength: 64,
+     *   memory: 65536,
+     *   passes: 3,
+     * };
+     *
+     * const derivedKey = argon2Sync('argon2id', parameters);
+     * console.log(derivedKey.toString('hex'));  // 'af91dad...9520f15'
+     * ```
+     * @since v24.7.0
+     * @experimental
+     */
+    function argon2Sync(algorithm: Argon2Algorithm, parameters: Argon2Parameters): NonSharedBuffer;
+    /**
+     * A convenient alias for `crypto.webcrypto.subtle`.
+     * @since v17.4.0
+     */
+    const subtle: webcrypto.SubtleCrypto;
+    /**
+     * An implementation of the Web Crypto API standard.
+     *
+     * See the {@link https://nodejs.org/docs/latest/api/webcrypto.html Web Crypto API documentation} for details.
+     * @since v15.0.0
+     */
+    const webcrypto: webcrypto.Crypto;
+    namespace webcrypto {
+        type BufferSource = ArrayBufferView | ArrayBuffer;
+        type KeyFormat = "jwk" | "pkcs8" | "raw" | "raw-public" | "raw-secret" | "raw-seed" | "spki";
+        type KeyType = "private" | "public" | "secret";
+        type KeyUsage =
+            | "encrypt"
+            | "decrypt"
+            | "sign"
+            | "verify"
+            | "deriveKey"
+            | "deriveBits"
+            | "encapsulateBits"
+            | "decapsulateBits"
+            | "encapsulateKey"
+            | "decapsulateKey"
+            | "wrapKey"
+            | "unwrapKey";
+        type AlgorithmIdentifier = Algorithm | string;
+        type HashAlgorithmIdentifier = AlgorithmIdentifier;
+        type NamedCurve = string;
+        type BigInteger = Uint8Array;
+        interface AeadParams extends Algorithm {
+            additionalData?: BufferSource;
+            iv: BufferSource;
+            tagLength: number;
+        }
+        interface AesCbcParams extends Algorithm {
+            iv: BufferSource;
+        }
+        interface AesCtrParams extends Algorithm {
+            counter: BufferSource;
+            length: number;
+        }
+        interface AesDerivedKeyParams extends Algorithm {
+            length: number;
+        }
+        // TODO: remove in next major
+        /** @deprecated Replaced by `AeadParams`. */
+        interface AesGcmParams extends Algorithm {
+            additionalData?: BufferSource;
+            iv: BufferSource;
+            tagLength?: number;
+        }
+        interface AesKeyAlgorithm extends KeyAlgorithm {
+            length: number;
+        }
+        interface AesKeyGenParams extends Algorithm {
+            length: number;
+        }
+        interface Algorithm {
+            name: string;
+        }
+        interface Argon2Params extends Algorithm {
+            associatedData?: BufferSource;
+            memory: number;
+            nonce: BufferSource;
+            parallelism: number;
+            passes: number;
+            secretValue?: BufferSource;
+            version?: number;
+        }
+        interface CShakeParams extends Algorithm {
+            customization?: BufferSource;
+            functionName?: BufferSource;
+            length: number;
+        }
+        interface ContextParams extends Algorithm {
+            context?: BufferSource;
+        }
+        interface EcKeyAlgorithm extends KeyAlgorithm {
+            namedCurve: NamedCurve;
+        }
+        interface EcKeyGenParams extends Algorithm {
+            namedCurve: NamedCurve;
+        }
+        interface EcKeyImportParams extends Algorithm {
+            namedCurve: NamedCurve;
+        }
+        interface EcdhKeyDeriveParams extends Algorithm {
+            public: CryptoKey;
+        }
+        interface EcdsaParams extends Algorithm {
+            hash: HashAlgorithmIdentifier;
+        }
+        interface HkdfParams extends Algorithm {
+            hash: HashAlgorithmIdentifier;
+            info: BufferSource;
+            salt: BufferSource;
+        }
+        interface HmacImportParams extends Algorithm {
+            hash: HashAlgorithmIdentifier;
+            length?: number;
+        }
+        interface HmacKeyAlgorithm extends KeyAlgorithm {
+            hash: KeyAlgorithm;
+            length: number;
+        }
+        interface HmacKeyGenParams extends Algorithm {
+            hash: HashAlgorithmIdentifier;
+            length?: number;
+        }
+        interface JsonWebKey {
+            alg?: string;
+            crv?: string;
+            d?: string;
+            dp?: string;
+            dq?: string;
+            e?: string;
+            ext?: boolean;
+            k?: string;
+            key_ops?: string[];
+            kty?: string;
+            n?: string;
+            oth?: RsaOtherPrimesInfo[];
+            p?: string;
+            q?: string;
+            qi?: string;
+            use?: string;
+            x?: string;
+            y?: string;
+        }
+        interface KeyAlgorithm {
+            name: string;
+        }
+        interface KmacImportParams extends Algorithm {
+            length?: number;
+        }
+        interface KmacKeyAlgorithm extends KeyAlgorithm {
+            length: number;
+        }
+        interface KmacKeyGenParams extends Algorithm {
+            length?: number;
+        }
+        interface KmacParams extends Algorithm {
+            customization?: BufferSource;
+            length: number;
+        }
+        interface Pbkdf2Params extends Algorithm {
+            hash: HashAlgorithmIdentifier;
+            iterations: number;
+            salt: BufferSource;
+        }
+        interface RsaHashedImportParams extends Algorithm {
+            hash: HashAlgorithmIdentifier;
+        }
+        interface RsaHashedKeyAlgorithm extends RsaKeyAlgorithm {
+            hash: KeyAlgorithm;
+        }
+        interface RsaHashedKeyGenParams extends RsaKeyGenParams {
+            hash: HashAlgorithmIdentifier;
+        }
+        interface RsaKeyAlgorithm extends KeyAlgorithm {
+            modulusLength: number;
+            publicExponent: BigInteger;
+        }
+        interface RsaKeyGenParams extends Algorithm {
+            modulusLength: number;
+            publicExponent: BigInteger;
+        }
+        interface RsaOaepParams extends Algorithm {
+            label?: BufferSource;
+        }
+        interface RsaOtherPrimesInfo {
+            d?: string;
+            r?: string;
+            t?: string;
+        }
+        interface RsaPssParams extends Algorithm {
+            saltLength: number;
+        }
+        /**
+         * Importing the `webcrypto` object (`import { webcrypto } from 'node:crypto'`) gives an instance of the `Crypto` class.
+         * `Crypto` is a singleton that provides access to the remainder of the crypto API.
+         * @since v15.0.0
+         */
+        interface Crypto {
+            /**
+             * Provides access to the `SubtleCrypto` API.
+             * @since v15.0.0
+             */
+            readonly subtle: SubtleCrypto;
+            /**
+             * Generates cryptographically strong random values.
+             * The given `typedArray` is filled with random values, and a reference to `typedArray` is returned.
+             *
+             * The given `typedArray` must be an integer-based instance of {@link NodeJS.TypedArray}, i.e. `Float32Array` and `Float64Array` are not accepted.
+             *
+             * An error will be thrown if the given `typedArray` is larger than 65,536 bytes.
+             * @since v15.0.0
+             */
+            getRandomValues>(
+                typedArray: T,
+            ): T;
+            /**
+             * Generates a random {@link https://www.rfc-editor.org/rfc/rfc4122.txt RFC 4122} version 4 UUID.
+             * The UUID is generated using a cryptographic pseudorandom number generator.
+             * @since v16.7.0
+             */
+            randomUUID(): UUID;
+        }
+        /**
+         * @since v15.0.0
+         */
+        interface CryptoKey {
+            /**
+             * An object detailing the algorithm for which the key can be used along with additional algorithm-specific parameters.
+             * @since v15.0.0
+             */
+            readonly algorithm: KeyAlgorithm;
+            /**
+             * When `true`, the {@link CryptoKey} can be extracted using either `subtleCrypto.exportKey()` or `subtleCrypto.wrapKey()`.
+             * @since v15.0.0
+             */
+            readonly extractable: boolean;
+            /**
+             * A string identifying whether the key is a symmetric (`'secret'`) or asymmetric (`'private'` or `'public'`) key.
+             * @since v15.0.0
+             */
+            readonly type: KeyType;
+            /**
+             * An array of strings identifying the operations for which the key may be used.
+             *
+             * The possible usages are:
+             * - `'encrypt'` - The key may be used to encrypt data.
+             * - `'decrypt'` - The key may be used to decrypt data.
+             * - `'sign'` - The key may be used to generate digital signatures.
+             * - `'verify'` - The key may be used to verify digital signatures.
+             * - `'deriveKey'` - The key may be used to derive a new key.
+             * - `'deriveBits'` - The key may be used to derive bits.
+             * - `'wrapKey'` - The key may be used to wrap another key.
+             * - `'unwrapKey'` - The key may be used to unwrap another key.
+             *
+             * Valid key usages depend on the key algorithm (identified by `cryptokey.algorithm.name`).
+             * @since v15.0.0
+             */
+            readonly usages: KeyUsage[];
+        }
+        /**
+         * The `CryptoKeyPair` is a simple dictionary object with `publicKey` and `privateKey` properties, representing an asymmetric key pair.
+         * @since v15.0.0
+         */
+        interface CryptoKeyPair {
+            /**
+             * A {@link CryptoKey} whose type will be `'private'`.
+             * @since v15.0.0
+             */
+            privateKey: CryptoKey;
+            /**
+             * A {@link CryptoKey} whose type will be `'public'`.
+             * @since v15.0.0
+             */
+            publicKey: CryptoKey;
+        }
+        interface EncapsulatedBits {
+            sharedKey: ArrayBuffer;
+            ciphertext: ArrayBuffer;
+        }
+        interface EncapsulatedKey {
+            sharedKey: CryptoKey;
+            ciphertext: ArrayBuffer;
+        }
+        /**
+         * @since v15.0.0
+         */
+        interface SubtleCrypto {
+            /**
+             * A message recipient uses their asymmetric private key to decrypt an
+             * "encapsulated key" (ciphertext), thereby recovering a temporary symmetric
+             * key (represented as `ArrayBuffer`) which is then used to decrypt a message.
+             *
+             * The algorithms currently supported include:
+             *
+             * * `'ML-KEM-512'`
+             * * `'ML-KEM-768'`
+             * * `'ML-KEM-1024'`
+             * @since v24.7.0
+             * @returns Fulfills with `ArrayBuffer` upon success.
+             */
+            decapsulateBits(
+                decapsulationAlgorithm: AlgorithmIdentifier,
+                decapsulationKey: CryptoKey,
+                ciphertext: BufferSource,
+            ): Promise;
+            /**
+             * A message recipient uses their asymmetric private key to decrypt an
+             * "encapsulated key" (ciphertext), thereby recovering a temporary symmetric
+             * key (represented as `CryptoKey`) which is then used to decrypt a message.
+             *
+             * The algorithms currently supported include:
+             *
+             * * `'ML-KEM-512'`
+             * * `'ML-KEM-768'`
+             * * `'ML-KEM-1024'`
+             * @since v24.7.0
+             * @param usages See [Key usages](https://nodejs.org/docs/latest-v24.x/api/webcrypto.html#cryptokeyusages).
+             * @returns Fulfills with `CryptoKey` upon success.
+             */
+            decapsulateKey(
+                decapsulationAlgorithm: AlgorithmIdentifier,
+                decapsulationKey: CryptoKey,
+                ciphertext: BufferSource,
+                sharedKeyAlgorithm: AlgorithmIdentifier | HmacImportParams | AesDerivedKeyParams | KmacImportParams,
+                extractable: boolean,
+                usages: KeyUsage[],
+            ): Promise;
+            /**
+             * Using the method and parameters specified in `algorithm` and the keying material provided by `key`,
+             * this method attempts to decipher the provided `data`. If successful,
+             * the returned promise will be resolved with an `` containing the plaintext result.
+             *
+             * The algorithms currently supported include:
+             *
+             * * `'AES-CBC'`
+             * * `'AES-CTR'`
+             * * `'AES-GCM'`
+             * * `'AES-OCB'`
+             * * `'ChaCha20-Poly1305'`
+             * * `'RSA-OAEP'`
+             * @since v15.0.0
+             */
+            decrypt(
+                algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AeadParams,
+                key: CryptoKey,
+                data: BufferSource,
+            ): Promise;
+            /**
+             * Using the method and parameters specified in `algorithm` and the keying material provided by `baseKey`,
+             * this method attempts to generate `length` bits.
+             * The Node.js implementation requires that when `length` is a number it must be multiple of `8`.
+             * When `length` is `null` the maximum number of bits for a given algorithm is generated. This is allowed
+             * for the `'ECDH'`, `'X25519'`, and `'X448'` algorithms.
+             * If successful, the returned promise will be resolved with an `` containing the generated data.
+             *
+             * The algorithms currently supported include:
+             *
+             * * `'Argon2d'`
+             * * `'Argon2i'`
+             * * `'Argon2id'`
+             * * `'ECDH'`
+             * * `'HKDF'`
+             * * `'PBKDF2'`
+             * * `'X25519'`
+             * * `'X448'`
+             * @since v15.0.0
+             */
+            deriveBits(
+                algorithm: EcdhKeyDeriveParams,
+                baseKey: CryptoKey,
+                length?: number | null,
+            ): Promise;
+            deriveBits(
+                algorithm: EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params | Argon2Params,
+                baseKey: CryptoKey,
+                length: number,
+            ): Promise;
+            /**
+             * Using the method and parameters specified in `algorithm`, and the keying material provided by `baseKey`,
+             * this method attempts to generate a new ` based on the method and parameters in `derivedKeyAlgorithm`.
+             *
+             * Calling `subtle.deriveKey()` is equivalent to calling `subtle.deriveBits()` to generate raw keying material,
+             * then passing the result into the `subtle.importKey()` method using the `deriveKeyAlgorithm`, `extractable`, and `keyUsages` parameters as input.
+             *
+             * The algorithms currently supported include:
+             *
+             * * `'Argon2d'`
+             * * `'Argon2i'`
+             * * `'Argon2id'`
+             * * `'ECDH'`
+             * * `'HKDF'`
+             * * `'PBKDF2'`
+             * * `'X25519'`
+             * * `'X448'`
+             * @param keyUsages See {@link https://nodejs.org/docs/latest/api/webcrypto.html#cryptokeyusages Key usages}.
+             * @since v15.0.0
+             */
+            deriveKey(
+                algorithm: EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params | Argon2Params,
+                baseKey: CryptoKey,
+                derivedKeyAlgorithm: AlgorithmIdentifier | HmacImportParams | AesDerivedKeyParams | KmacImportParams,
+                extractable: boolean,
+                keyUsages: readonly KeyUsage[],
+            ): Promise;
+            /**
+             * Using the method identified by `algorithm`, `subtle.digest()` attempts to generate a digest of `data`.
+             * If successful, the returned promise is resolved with an `` containing the computed digest.
+             *
+             * If `algorithm` is provided as a ``, it must be one of:
+             *
+             * * `'cSHAKE128'`
+             * * `'cSHAKE256'`
+             * * `'SHA-1'`
+             * * `'SHA-256'`
+             * * `'SHA-384'`
+             * * `'SHA-512'`
+             * * `'SHA3-256'`
+             * * `'SHA3-384'`
+             * * `'SHA3-512'`
+             *
+             * If `algorithm` is provided as an ``, it must have a `name` property whose value is one of the above.
+             * @since v15.0.0
+             */
+            digest(algorithm: AlgorithmIdentifier | CShakeParams, data: BufferSource): Promise;
+            /**
+             * Uses a message recipient's asymmetric public key to encrypt a temporary symmetric key.
+             * This encrypted key is the "encapsulated key" represented as `EncapsulatedBits`.
+             *
+             * The algorithms currently supported include:
+             *
+             * * `'ML-KEM-512'`
+             * * `'ML-KEM-768'`
+             * * `'ML-KEM-1024'`
+             * @since v24.7.0
+             * @returns Fulfills with `EncapsulatedBits` upon success.
+             */
+            encapsulateBits(
+                encapsulationAlgorithm: AlgorithmIdentifier,
+                encapsulationKey: CryptoKey,
+            ): Promise;
+            /**
+             * Uses a message recipient's asymmetric public key to encrypt a temporary symmetric key.
+             * This encrypted key is the "encapsulated key" represented as `EncapsulatedKey`.
+             *
+             * The algorithms currently supported include:
+             *
+             * * `'ML-KEM-512'`
+             * * `'ML-KEM-768'`
+             * * `'ML-KEM-1024'`
+             * @since v24.7.0
+             * @param usages See [Key usages](https://nodejs.org/docs/latest-v24.x/api/webcrypto.html#cryptokeyusages).
+             * @returns Fulfills with `EncapsulatedKey` upon success.
+             */
+            encapsulateKey(
+                encapsulationAlgorithm: AlgorithmIdentifier,
+                encapsulationKey: CryptoKey,
+                sharedKeyAlgorithm: AlgorithmIdentifier | HmacImportParams | AesDerivedKeyParams | KmacImportParams,
+                extractable: boolean,
+                usages: KeyUsage[],
+            ): Promise;
+            /**
+             * Using the method and parameters specified by `algorithm` and the keying material provided by `key`,
+             * this method attempts to encipher `data`. If successful,
+             * the returned promise is resolved with an `` containing the encrypted result.
+             *
+             * The algorithms currently supported include:
+             *
+             * * `'AES-CBC'`
+             * * `'AES-CTR'`
+             * * `'AES-GCM'`
+             * * `'AES-OCB'`
+             * * `'ChaCha20-Poly1305'`
+             * * `'RSA-OAEP'`
+             * @since v15.0.0
+             */
+            encrypt(
+                algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AeadParams,
+                key: CryptoKey,
+                data: BufferSource,
+            ): Promise;
+            /**
+             * Exports the given key into the specified format, if supported.
+             *
+             * If the `` is not extractable, the returned promise will reject.
+             *
+             * When `format` is either `'pkcs8'` or `'spki'` and the export is successful,
+             * the returned promise will be resolved with an `` containing the exported key data.
+             *
+             * When `format` is `'jwk'` and the export is successful, the returned promise will be resolved with a
+             * JavaScript object conforming to the {@link https://tools.ietf.org/html/rfc7517 JSON Web Key} specification.
+             * @param format Must be one of `'raw'`, `'pkcs8'`, `'spki'`, `'jwk'`, `'raw-secret'`,
+             * `'raw-public'`, or `'raw-seed'`.
+             * @returns `` containing ``.
+             * @since v15.0.0
+             */
+            exportKey(format: "jwk", key: CryptoKey): Promise;
+            exportKey(format: Exclude, key: CryptoKey): Promise;
+            /**
+             * Using the parameters provided in `algorithm`, this method
+             * attempts to generate new keying material. Depending on the algorithm used
+             * either a single `CryptoKey` or a `CryptoKeyPair` is generated.
+             *
+             * The `CryptoKeyPair` (public and private key) generating algorithms supported
+             * include:
+             *
+             * * `'ECDH'`
+             * * `'ECDSA'`
+             * * `'Ed25519'`
+             * * `'Ed448'`
+             * * `'ML-DSA-44'`
+             * * `'ML-DSA-65'`
+             * * `'ML-DSA-87'`
+             * * `'ML-KEM-512'`
+             * * `'ML-KEM-768'`
+             * * `'ML-KEM-1024'`
+             * * `'RSA-OAEP'`
+             * * `'RSA-PSS'`
+             * * `'RSASSA-PKCS1-v1_5'`
+             * * `'X25519'`
+             * * `'X448'`
+             *
+             * The `CryptoKey` (secret key) generating algorithms supported include:
+             * * `'AES-CBC'`
+             * * `'AES-CTR'`
+             * * `'AES-GCM'`
+             * * `'AES-KW'`
+             * * `'AES-OCB'`
+             * * `'ChaCha20-Poly1305'`
+             * * `'HMAC'`
+             * * `'KMAC128'`
+             * * `'KMAC256'`
+             * @param keyUsages See {@link https://nodejs.org/docs/latest/api/webcrypto.html#cryptokeyusages Key usages}.
+             * @since v15.0.0
+             */
+            generateKey(
+                algorithm: RsaHashedKeyGenParams | EcKeyGenParams,
+                extractable: boolean,
+                keyUsages: readonly KeyUsage[],
+            ): Promise;
+            generateKey(
+                algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params | KmacKeyGenParams,
+                extractable: boolean,
+                keyUsages: readonly KeyUsage[],
+            ): Promise;
+            generateKey(
+                algorithm: AlgorithmIdentifier,
+                extractable: boolean,
+                keyUsages: KeyUsage[],
+            ): Promise;
+            /**
+             * Derives the public key from a given private key.
+             * @since v24.7.0
+             * @param key A private key from which to derive the corresponding public key.
+             * @param keyUsages See [Key usages](https://nodejs.org/docs/latest-v24.x/api/webcrypto.html#cryptokeyusages).
+             * @returns Fulfills with a `CryptoKey` upon success.
+             */
+            getPublicKey(key: CryptoKey, keyUsages: KeyUsage[]): Promise;
+            /**
+             * This method attempts to interpret the provided `keyData`
+             * as the given `format` to create a `CryptoKey` instance using the provided
+             * `algorithm`, `extractable`, and `keyUsages` arguments. If the import is
+             * successful, the returned promise will be resolved with a {CryptoKey}
+             * representation of the key material.
+             *
+             * If importing KDF algorithm keys, `extractable` must be `false`.
+             * @param format Must be one of `'raw'`, `'pkcs8'`, `'spki'`, `'jwk'`, `'raw-secret'`,
+             * `'raw-public'`, or `'raw-seed'`.
+             * @param keyUsages See {@link https://nodejs.org/docs/latest/api/webcrypto.html#cryptokeyusages Key usages}.
+             * @since v15.0.0
+             */
+            importKey(
+                format: "jwk",
+                keyData: JsonWebKey,
+                algorithm:
+                    | AlgorithmIdentifier
+                    | RsaHashedImportParams
+                    | EcKeyImportParams
+                    | HmacImportParams
+                    | AesKeyAlgorithm
+                    | KmacImportParams,
+                extractable: boolean,
+                keyUsages: readonly KeyUsage[],
+            ): Promise;
+            importKey(
+                format: Exclude,
+                keyData: BufferSource,
+                algorithm:
+                    | AlgorithmIdentifier
+                    | RsaHashedImportParams
+                    | EcKeyImportParams
+                    | HmacImportParams
+                    | AesKeyAlgorithm
+                    | KmacImportParams,
+                extractable: boolean,
+                keyUsages: KeyUsage[],
+            ): Promise;
+            /**
+             * Using the method and parameters given by `algorithm` and the keying material provided by `key`,
+             * this method attempts to generate a cryptographic signature of `data`. If successful,
+             * the returned promise is resolved with an `` containing the generated signature.
+             *
+             * The algorithms currently supported include:
+             *
+             * * `'ECDSA'`
+             * * `'Ed25519'`
+             * * `'Ed448'`
+             * * `'HMAC'`
+             * * `'KMAC128'`
+             * * `'KMAC256'`
+             * * `'ML-DSA-44'`
+             * * `'ML-DSA-65'`
+             * * `'ML-DSA-87'`
+             * * `'RSA-PSS'`
+             * * `'RSASSA-PKCS1-v1_5'`
+             * @since v15.0.0
+             */
+            sign(
+                algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams | ContextParams | KmacParams,
+                key: CryptoKey,
+                data: BufferSource,
+            ): Promise;
+            /**
+             * In cryptography, "wrapping a key" refers to exporting and then encrypting the keying material.
+             * This method attempts to decrypt a wrapped key and create a `` instance.
+             * It is equivalent to calling `subtle.decrypt()` first on the encrypted key data (using the `wrappedKey`, `unwrapAlgo`, and `unwrappingKey` arguments as input)
+             * then passing the results in to the `subtle.importKey()` method using the `unwrappedKeyAlgo`, `extractable`, and `keyUsages` arguments as inputs.
+             * If successful, the returned promise is resolved with a `` object.
+             *
+             * The wrapping algorithms currently supported include:
+             *
+             * * `'AES-CBC'`
+             * * `'AES-CTR'`
+             * * `'AES-GCM'`
+             * * `'AES-KW'`
+             * * `'AES-OCB'`
+             * * `'ChaCha20-Poly1305'`
+             * * `'RSA-OAEP'`
+             *
+             * The unwrapped key algorithms supported include:
+             *
+             * * `'AES-CBC'`
+             * * `'AES-CTR'`
+             * * `'AES-GCM'`
+             * * `'AES-KW'`
+             * * `'AES-OCB'`
+             * * `'ChaCha20-Poly1305'`
+             * * `'ECDH'`
+             * * `'ECDSA'`
+             * * `'Ed25519'`
+             * * `'Ed448'`
+             * * `'HMAC'`
+             * * `'KMAC128'`
+             * * `'KMAC256'`
+             * * `'ML-DSA-44'`
+             * * `'ML-DSA-65'`
+             * * `'ML-DSA-87'`
+             * * `'ML-KEM-512'`
+             * * `'ML-KEM-768'`
+             * * `'ML-KEM-1024'`
+             * * `'RSA-OAEP'`
+             * * `'RSA-PSS'`
+             * * `'RSASSA-PKCS1-v1_5'`
+             * * `'X25519'`
+             * * `'X448'`
+             * @param format Must be one of `'raw'`, `'pkcs8'`, `'spki'`, `'jwk'`, `'raw-secret'`,
+             * `'raw-public'`, or `'raw-seed'`.
+             * @param keyUsages See {@link https://nodejs.org/docs/latest/api/webcrypto.html#cryptokeyusages Key usages}.
+             * @since v15.0.0
+             */
+            unwrapKey(
+                format: KeyFormat,
+                wrappedKey: BufferSource,
+                unwrappingKey: CryptoKey,
+                unwrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AeadParams,
+                unwrappedKeyAlgorithm:
+                    | AlgorithmIdentifier
+                    | RsaHashedImportParams
+                    | EcKeyImportParams
+                    | HmacImportParams
+                    | AesKeyAlgorithm
+                    | KmacImportParams,
+                extractable: boolean,
+                keyUsages: KeyUsage[],
+            ): Promise;
+            /**
+             * Using the method and parameters given in `algorithm` and the keying material provided by `key`,
+             * This method attempts to verify that `signature` is a valid cryptographic signature of `data`.
+             * The returned promise is resolved with either `true` or `false`.
+             *
+             * The algorithms currently supported include:
+             *
+             * * `'ECDSA'`
+             * * `'Ed25519'`
+             * * `'Ed448'`
+             * * `'HMAC'`
+             * * `'KMAC128'`
+             * * `'KMAC256'`
+             * * `'ML-DSA-44'`
+             * * `'ML-DSA-65'`
+             * * `'ML-DSA-87'`
+             * * `'RSA-PSS'`
+             * * `'RSASSA-PKCS1-v1_5'`
+             * @since v15.0.0
+             */
+            verify(
+                algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams | ContextParams | KmacParams,
+                key: CryptoKey,
+                signature: BufferSource,
+                data: BufferSource,
+            ): Promise;
+            /**
+             * In cryptography, "wrapping a key" refers to exporting and then encrypting the keying material.
+             * This method exports the keying material into the format identified by `format`,
+             * then encrypts it using the method and parameters specified by `wrapAlgo` and the keying material provided by `wrappingKey`.
+             * It is the equivalent to calling `subtle.exportKey()` using `format` and `key` as the arguments,
+             * then passing the result to the `subtle.encrypt()` method using `wrappingKey` and `wrapAlgo` as inputs.
+             * If successful, the returned promise will be resolved with an `` containing the encrypted key data.
+             *
+             * The wrapping algorithms currently supported include:
+             *
+             * * `'AES-CBC'`
+             * * `'AES-CTR'`
+             * * `'AES-GCM'`
+             * * `'AES-KW'`
+             * * `'AES-OCB'`
+             * * `'ChaCha20-Poly1305'`
+             * * `'RSA-OAEP'`
+             * @param format Must be one of `'raw'`, `'pkcs8'`, `'spki'`, `'jwk'`, `'raw-secret'`,
+             * `'raw-public'`, or `'raw-seed'`.
+             * @since v15.0.0
+             */
+            wrapKey(
+                format: KeyFormat,
+                key: CryptoKey,
+                wrappingKey: CryptoKey,
+                wrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AeadParams,
+            ): Promise;
+        }
+    }
+}
+declare module "node:crypto" {
+    export * from "crypto";
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/dgram.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/dgram.d.ts
new file mode 100644
index 00000000..bc69f0b4
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/dgram.d.ts
@@ -0,0 +1,600 @@
+/**
+ * The `node:dgram` module provides an implementation of UDP datagram sockets.
+ *
+ * ```js
+ * import dgram from 'node:dgram';
+ *
+ * const server = dgram.createSocket('udp4');
+ *
+ * server.on('error', (err) => {
+ *   console.error(`server error:\n${err.stack}`);
+ *   server.close();
+ * });
+ *
+ * server.on('message', (msg, rinfo) => {
+ *   console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
+ * });
+ *
+ * server.on('listening', () => {
+ *   const address = server.address();
+ *   console.log(`server listening ${address.address}:${address.port}`);
+ * });
+ *
+ * server.bind(41234);
+ * // Prints: server listening 0.0.0.0:41234
+ * ```
+ * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/dgram.js)
+ */
+declare module "dgram" {
+    import { NonSharedBuffer } from "node:buffer";
+    import { AddressInfo, BlockList } from "node:net";
+    import * as dns from "node:dns";
+    import { Abortable, EventEmitter } from "node:events";
+    interface RemoteInfo {
+        address: string;
+        family: "IPv4" | "IPv6";
+        port: number;
+        size: number;
+    }
+    interface BindOptions {
+        port?: number | undefined;
+        address?: string | undefined;
+        exclusive?: boolean | undefined;
+        fd?: number | undefined;
+    }
+    type SocketType = "udp4" | "udp6";
+    interface SocketOptions extends Abortable {
+        type: SocketType;
+        reuseAddr?: boolean | undefined;
+        reusePort?: boolean | undefined;
+        /**
+         * @default false
+         */
+        ipv6Only?: boolean | undefined;
+        recvBufferSize?: number | undefined;
+        sendBufferSize?: number | undefined;
+        lookup?:
+            | ((
+                hostname: string,
+                options: dns.LookupOneOptions,
+                callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void,
+            ) => void)
+            | undefined;
+        receiveBlockList?: BlockList | undefined;
+        sendBlockList?: BlockList | undefined;
+    }
+    /**
+     * Creates a `dgram.Socket` object. Once the socket is created, calling `socket.bind()` will instruct the socket to begin listening for datagram
+     * messages. When `address` and `port` are not passed to `socket.bind()` the
+     * method will bind the socket to the "all interfaces" address on a random port
+     * (it does the right thing for both `udp4` and `udp6` sockets). The bound address
+     * and port can be retrieved using `socket.address().address` and `socket.address().port`.
+     *
+     * If the `signal` option is enabled, calling `.abort()` on the corresponding `AbortController` is similar to calling `.close()` on the socket:
+     *
+     * ```js
+     * const controller = new AbortController();
+     * const { signal } = controller;
+     * const server = dgram.createSocket({ type: 'udp4', signal });
+     * server.on('message', (msg, rinfo) => {
+     *   console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
+     * });
+     * // Later, when you want to close the server.
+     * controller.abort();
+     * ```
+     * @since v0.11.13
+     * @param options Available options are:
+     * @param callback Attached as a listener for `'message'` events. Optional.
+     */
+    function createSocket(type: SocketType, callback?: (msg: NonSharedBuffer, rinfo: RemoteInfo) => void): Socket;
+    function createSocket(options: SocketOptions, callback?: (msg: NonSharedBuffer, rinfo: RemoteInfo) => void): Socket;
+    /**
+     * Encapsulates the datagram functionality.
+     *
+     * New instances of `dgram.Socket` are created using {@link createSocket}.
+     * The `new` keyword is not to be used to create `dgram.Socket` instances.
+     * @since v0.1.99
+     */
+    class Socket extends EventEmitter {
+        /**
+         * Tells the kernel to join a multicast group at the given `multicastAddress` and `multicastInterface` using the `IP_ADD_MEMBERSHIP` socket option. If the `multicastInterface` argument is not
+         * specified, the operating system will choose
+         * one interface and will add membership to it. To add membership to every
+         * available interface, call `addMembership` multiple times, once per interface.
+         *
+         * When called on an unbound socket, this method will implicitly bind to a random
+         * port, listening on all interfaces.
+         *
+         * When sharing a UDP socket across multiple `cluster` workers, the`socket.addMembership()` function must be called only once or an`EADDRINUSE` error will occur:
+         *
+         * ```js
+         * import cluster from 'node:cluster';
+         * import dgram from 'node:dgram';
+         *
+         * if (cluster.isPrimary) {
+         *   cluster.fork(); // Works ok.
+         *   cluster.fork(); // Fails with EADDRINUSE.
+         * } else {
+         *   const s = dgram.createSocket('udp4');
+         *   s.bind(1234, () => {
+         *     s.addMembership('224.0.0.114');
+         *   });
+         * }
+         * ```
+         * @since v0.6.9
+         */
+        addMembership(multicastAddress: string, multicastInterface?: string): void;
+        /**
+         * Returns an object containing the address information for a socket.
+         * For UDP sockets, this object will contain `address`, `family`, and `port` properties.
+         *
+         * This method throws `EBADF` if called on an unbound socket.
+         * @since v0.1.99
+         */
+        address(): AddressInfo;
+        /**
+         * For UDP sockets, causes the `dgram.Socket` to listen for datagram
+         * messages on a named `port` and optional `address`. If `port` is not
+         * specified or is `0`, the operating system will attempt to bind to a
+         * random port. If `address` is not specified, the operating system will
+         * attempt to listen on all addresses. Once binding is complete, a `'listening'` event is emitted and the optional `callback` function is
+         * called.
+         *
+         * Specifying both a `'listening'` event listener and passing a `callback` to the `socket.bind()` method is not harmful but not very
+         * useful.
+         *
+         * A bound datagram socket keeps the Node.js process running to receive
+         * datagram messages.
+         *
+         * If binding fails, an `'error'` event is generated. In rare case (e.g.
+         * attempting to bind with a closed socket), an `Error` may be thrown.
+         *
+         * Example of a UDP server listening on port 41234:
+         *
+         * ```js
+         * import dgram from 'node:dgram';
+         *
+         * const server = dgram.createSocket('udp4');
+         *
+         * server.on('error', (err) => {
+         *   console.error(`server error:\n${err.stack}`);
+         *   server.close();
+         * });
+         *
+         * server.on('message', (msg, rinfo) => {
+         *   console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
+         * });
+         *
+         * server.on('listening', () => {
+         *   const address = server.address();
+         *   console.log(`server listening ${address.address}:${address.port}`);
+         * });
+         *
+         * server.bind(41234);
+         * // Prints: server listening 0.0.0.0:41234
+         * ```
+         * @since v0.1.99
+         * @param callback with no parameters. Called when binding is complete.
+         */
+        bind(port?: number, address?: string, callback?: () => void): this;
+        bind(port?: number, callback?: () => void): this;
+        bind(callback?: () => void): this;
+        bind(options: BindOptions, callback?: () => void): this;
+        /**
+         * Close the underlying socket and stop listening for data on it. If a callback is
+         * provided, it is added as a listener for the `'close'` event.
+         * @since v0.1.99
+         * @param callback Called when the socket has been closed.
+         */
+        close(callback?: () => void): this;
+        /**
+         * Associates the `dgram.Socket` to a remote address and port. Every
+         * message sent by this handle is automatically sent to that destination. Also,
+         * the socket will only receive messages from that remote peer.
+         * Trying to call `connect()` on an already connected socket will result
+         * in an `ERR_SOCKET_DGRAM_IS_CONNECTED` exception. If `address` is not
+         * provided, `'127.0.0.1'` (for `udp4` sockets) or `'::1'` (for `udp6` sockets)
+         * will be used by default. Once the connection is complete, a `'connect'` event
+         * is emitted and the optional `callback` function is called. In case of failure,
+         * the `callback` is called or, failing this, an `'error'` event is emitted.
+         * @since v12.0.0
+         * @param callback Called when the connection is completed or on error.
+         */
+        connect(port: number, address?: string, callback?: () => void): void;
+        connect(port: number, callback: () => void): void;
+        /**
+         * A synchronous function that disassociates a connected `dgram.Socket` from
+         * its remote address. Trying to call `disconnect()` on an unbound or already
+         * disconnected socket will result in an `ERR_SOCKET_DGRAM_NOT_CONNECTED` exception.
+         * @since v12.0.0
+         */
+        disconnect(): void;
+        /**
+         * Instructs the kernel to leave a multicast group at `multicastAddress` using the `IP_DROP_MEMBERSHIP` socket option. This method is automatically called by the
+         * kernel when the socket is closed or the process terminates, so most apps will
+         * never have reason to call this.
+         *
+         * If `multicastInterface` is not specified, the operating system will attempt to
+         * drop membership on all valid interfaces.
+         * @since v0.6.9
+         */
+        dropMembership(multicastAddress: string, multicastInterface?: string): void;
+        /**
+         * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket.
+         * @since v8.7.0
+         * @return the `SO_RCVBUF` socket receive buffer size in bytes.
+         */
+        getRecvBufferSize(): number;
+        /**
+         * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket.
+         * @since v8.7.0
+         * @return the `SO_SNDBUF` socket send buffer size in bytes.
+         */
+        getSendBufferSize(): number;
+        /**
+         * @since v18.8.0, v16.19.0
+         * @return Number of bytes queued for sending.
+         */
+        getSendQueueSize(): number;
+        /**
+         * @since v18.8.0, v16.19.0
+         * @return Number of send requests currently in the queue awaiting to be processed.
+         */
+        getSendQueueCount(): number;
+        /**
+         * By default, binding a socket will cause it to block the Node.js process from
+         * exiting as long as the socket is open. The `socket.unref()` method can be used
+         * to exclude the socket from the reference counting that keeps the Node.js
+         * process active. The `socket.ref()` method adds the socket back to the reference
+         * counting and restores the default behavior.
+         *
+         * Calling `socket.ref()` multiples times will have no additional effect.
+         *
+         * The `socket.ref()` method returns a reference to the socket so calls can be
+         * chained.
+         * @since v0.9.1
+         */
+        ref(): this;
+        /**
+         * Returns an object containing the `address`, `family`, and `port` of the remote
+         * endpoint. This method throws an `ERR_SOCKET_DGRAM_NOT_CONNECTED` exception
+         * if the socket is not connected.
+         * @since v12.0.0
+         */
+        remoteAddress(): AddressInfo;
+        /**
+         * Broadcasts a datagram on the socket.
+         * For connectionless sockets, the destination `port` and `address` must be
+         * specified. Connected sockets, on the other hand, will use their associated
+         * remote endpoint, so the `port` and `address` arguments must not be set.
+         *
+         * The `msg` argument contains the message to be sent.
+         * Depending on its type, different behavior can apply. If `msg` is a `Buffer`,
+         * any `TypedArray` or a `DataView`,
+         * the `offset` and `length` specify the offset within the `Buffer` where the
+         * message begins and the number of bytes in the message, respectively.
+         * If `msg` is a `String`, then it is automatically converted to a `Buffer` with `'utf8'` encoding. With messages that
+         * contain multi-byte characters, `offset` and `length` will be calculated with
+         * respect to `byte length` and not the character position.
+         * If `msg` is an array, `offset` and `length` must not be specified.
+         *
+         * The `address` argument is a string. If the value of `address` is a host name,
+         * DNS will be used to resolve the address of the host. If `address` is not
+         * provided or otherwise nullish, `'127.0.0.1'` (for `udp4` sockets) or `'::1'` (for `udp6` sockets) will be used by default.
+         *
+         * If the socket has not been previously bound with a call to `bind`, the socket
+         * is assigned a random port number and is bound to the "all interfaces" address
+         * (`'0.0.0.0'` for `udp4` sockets, `'::0'` for `udp6` sockets.)
+         *
+         * An optional `callback` function may be specified to as a way of reporting
+         * DNS errors or for determining when it is safe to reuse the `buf` object.
+         * DNS lookups delay the time to send for at least one tick of the
+         * Node.js event loop.
+         *
+         * The only way to know for sure that the datagram has been sent is by using a `callback`. If an error occurs and a `callback` is given, the error will be
+         * passed as the first argument to the `callback`. If a `callback` is not given,
+         * the error is emitted as an `'error'` event on the `socket` object.
+         *
+         * Offset and length are optional but both _must_ be set if either are used.
+         * They are supported only when the first argument is a `Buffer`, a `TypedArray`,
+         * or a `DataView`.
+         *
+         * This method throws `ERR_SOCKET_BAD_PORT` if called on an unbound socket.
+         *
+         * Example of sending a UDP packet to a port on `localhost`;
+         *
+         * ```js
+         * import dgram from 'node:dgram';
+         * import { Buffer } from 'node:buffer';
+         *
+         * const message = Buffer.from('Some bytes');
+         * const client = dgram.createSocket('udp4');
+         * client.send(message, 41234, 'localhost', (err) => {
+         *   client.close();
+         * });
+         * ```
+         *
+         * Example of sending a UDP packet composed of multiple buffers to a port on`127.0.0.1`;
+         *
+         * ```js
+         * import dgram from 'node:dgram';
+         * import { Buffer } from 'node:buffer';
+         *
+         * const buf1 = Buffer.from('Some ');
+         * const buf2 = Buffer.from('bytes');
+         * const client = dgram.createSocket('udp4');
+         * client.send([buf1, buf2], 41234, (err) => {
+         *   client.close();
+         * });
+         * ```
+         *
+         * Sending multiple buffers might be faster or slower depending on the
+         * application and operating system. Run benchmarks to
+         * determine the optimal strategy on a case-by-case basis. Generally speaking,
+         * however, sending multiple buffers is faster.
+         *
+         * Example of sending a UDP packet using a socket connected to a port on `localhost`:
+         *
+         * ```js
+         * import dgram from 'node:dgram';
+         * import { Buffer } from 'node:buffer';
+         *
+         * const message = Buffer.from('Some bytes');
+         * const client = dgram.createSocket('udp4');
+         * client.connect(41234, 'localhost', (err) => {
+         *   client.send(message, (err) => {
+         *     client.close();
+         *   });
+         * });
+         * ```
+         * @since v0.1.99
+         * @param msg Message to be sent.
+         * @param offset Offset in the buffer where the message starts.
+         * @param length Number of bytes in the message.
+         * @param port Destination port.
+         * @param address Destination host name or IP address.
+         * @param callback Called when the message has been sent.
+         */
+        send(
+            msg: string | NodeJS.ArrayBufferView | readonly any[],
+            port?: number,
+            address?: string,
+            callback?: (error: Error | null, bytes: number) => void,
+        ): void;
+        send(
+            msg: string | NodeJS.ArrayBufferView | readonly any[],
+            port?: number,
+            callback?: (error: Error | null, bytes: number) => void,
+        ): void;
+        send(
+            msg: string | NodeJS.ArrayBufferView | readonly any[],
+            callback?: (error: Error | null, bytes: number) => void,
+        ): void;
+        send(
+            msg: string | NodeJS.ArrayBufferView,
+            offset: number,
+            length: number,
+            port?: number,
+            address?: string,
+            callback?: (error: Error | null, bytes: number) => void,
+        ): void;
+        send(
+            msg: string | NodeJS.ArrayBufferView,
+            offset: number,
+            length: number,
+            port?: number,
+            callback?: (error: Error | null, bytes: number) => void,
+        ): void;
+        send(
+            msg: string | NodeJS.ArrayBufferView,
+            offset: number,
+            length: number,
+            callback?: (error: Error | null, bytes: number) => void,
+        ): void;
+        /**
+         * Sets or clears the `SO_BROADCAST` socket option. When set to `true`, UDP
+         * packets may be sent to a local interface's broadcast address.
+         *
+         * This method throws `EBADF` if called on an unbound socket.
+         * @since v0.6.9
+         */
+        setBroadcast(flag: boolean): void;
+        /**
+         * _All references to scope in this section are referring to [IPv6 Zone Indices](https://en.wikipedia.org/wiki/IPv6_address#Scoped_literal_IPv6_addresses), which are defined by [RFC
+         * 4007](https://tools.ietf.org/html/rfc4007). In string form, an IP_
+         * _with a scope index is written as `'IP%scope'` where scope is an interface name_
+         * _or interface number._
+         *
+         * Sets the default outgoing multicast interface of the socket to a chosen
+         * interface or back to system interface selection. The `multicastInterface` must
+         * be a valid string representation of an IP from the socket's family.
+         *
+         * For IPv4 sockets, this should be the IP configured for the desired physical
+         * interface. All packets sent to multicast on the socket will be sent on the
+         * interface determined by the most recent successful use of this call.
+         *
+         * For IPv6 sockets, `multicastInterface` should include a scope to indicate the
+         * interface as in the examples that follow. In IPv6, individual `send` calls can
+         * also use explicit scope in addresses, so only packets sent to a multicast
+         * address without specifying an explicit scope are affected by the most recent
+         * successful use of this call.
+         *
+         * This method throws `EBADF` if called on an unbound socket.
+         *
+         * #### Example: IPv6 outgoing multicast interface
+         *
+         * On most systems, where scope format uses the interface name:
+         *
+         * ```js
+         * const socket = dgram.createSocket('udp6');
+         *
+         * socket.bind(1234, () => {
+         *   socket.setMulticastInterface('::%eth1');
+         * });
+         * ```
+         *
+         * On Windows, where scope format uses an interface number:
+         *
+         * ```js
+         * const socket = dgram.createSocket('udp6');
+         *
+         * socket.bind(1234, () => {
+         *   socket.setMulticastInterface('::%2');
+         * });
+         * ```
+         *
+         * #### Example: IPv4 outgoing multicast interface
+         *
+         * All systems use an IP of the host on the desired physical interface:
+         *
+         * ```js
+         * const socket = dgram.createSocket('udp4');
+         *
+         * socket.bind(1234, () => {
+         *   socket.setMulticastInterface('10.0.0.2');
+         * });
+         * ```
+         * @since v8.6.0
+         */
+        setMulticastInterface(multicastInterface: string): void;
+        /**
+         * Sets or clears the `IP_MULTICAST_LOOP` socket option. When set to `true`,
+         * multicast packets will also be received on the local interface.
+         *
+         * This method throws `EBADF` if called on an unbound socket.
+         * @since v0.3.8
+         */
+        setMulticastLoopback(flag: boolean): boolean;
+        /**
+         * Sets the `IP_MULTICAST_TTL` socket option. While TTL generally stands for
+         * "Time to Live", in this context it specifies the number of IP hops that a
+         * packet is allowed to travel through, specifically for multicast traffic. Each
+         * router or gateway that forwards a packet decrements the TTL. If the TTL is
+         * decremented to 0 by a router, it will not be forwarded.
+         *
+         * The `ttl` argument may be between 0 and 255\. The default on most systems is `1`.
+         *
+         * This method throws `EBADF` if called on an unbound socket.
+         * @since v0.3.8
+         */
+        setMulticastTTL(ttl: number): number;
+        /**
+         * Sets the `SO_RCVBUF` socket option. Sets the maximum socket receive buffer
+         * in bytes.
+         *
+         * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket.
+         * @since v8.7.0
+         */
+        setRecvBufferSize(size: number): void;
+        /**
+         * Sets the `SO_SNDBUF` socket option. Sets the maximum socket send buffer
+         * in bytes.
+         *
+         * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket.
+         * @since v8.7.0
+         */
+        setSendBufferSize(size: number): void;
+        /**
+         * Sets the `IP_TTL` socket option. While TTL generally stands for "Time to Live",
+         * in this context it specifies the number of IP hops that a packet is allowed to
+         * travel through. Each router or gateway that forwards a packet decrements the
+         * TTL. If the TTL is decremented to 0 by a router, it will not be forwarded.
+         * Changing TTL values is typically done for network probes or when multicasting.
+         *
+         * The `ttl` argument may be between 1 and 255\. The default on most systems
+         * is 64.
+         *
+         * This method throws `EBADF` if called on an unbound socket.
+         * @since v0.1.101
+         */
+        setTTL(ttl: number): number;
+        /**
+         * By default, binding a socket will cause it to block the Node.js process from
+         * exiting as long as the socket is open. The `socket.unref()` method can be used
+         * to exclude the socket from the reference counting that keeps the Node.js
+         * process active, allowing the process to exit even if the socket is still
+         * listening.
+         *
+         * Calling `socket.unref()` multiple times will have no additional effect.
+         *
+         * The `socket.unref()` method returns a reference to the socket so calls can be
+         * chained.
+         * @since v0.9.1
+         */
+        unref(): this;
+        /**
+         * Tells the kernel to join a source-specific multicast channel at the given `sourceAddress` and `groupAddress`, using the `multicastInterface` with the `IP_ADD_SOURCE_MEMBERSHIP` socket
+         * option. If the `multicastInterface` argument
+         * is not specified, the operating system will choose one interface and will add
+         * membership to it. To add membership to every available interface, call `socket.addSourceSpecificMembership()` multiple times, once per interface.
+         *
+         * When called on an unbound socket, this method will implicitly bind to a random
+         * port, listening on all interfaces.
+         * @since v13.1.0, v12.16.0
+         */
+        addSourceSpecificMembership(sourceAddress: string, groupAddress: string, multicastInterface?: string): void;
+        /**
+         * Instructs the kernel to leave a source-specific multicast channel at the given `sourceAddress` and `groupAddress` using the `IP_DROP_SOURCE_MEMBERSHIP` socket option. This method is
+         * automatically called by the kernel when the
+         * socket is closed or the process terminates, so most apps will never have
+         * reason to call this.
+         *
+         * If `multicastInterface` is not specified, the operating system will attempt to
+         * drop membership on all valid interfaces.
+         * @since v13.1.0, v12.16.0
+         */
+        dropSourceSpecificMembership(sourceAddress: string, groupAddress: string, multicastInterface?: string): void;
+        /**
+         * events.EventEmitter
+         * 1. close
+         * 2. connect
+         * 3. error
+         * 4. listening
+         * 5. message
+         */
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        addListener(event: "close", listener: () => void): this;
+        addListener(event: "connect", listener: () => void): this;
+        addListener(event: "error", listener: (err: Error) => void): this;
+        addListener(event: "listening", listener: () => void): this;
+        addListener(event: "message", listener: (msg: NonSharedBuffer, rinfo: RemoteInfo) => void): this;
+        emit(event: string | symbol, ...args: any[]): boolean;
+        emit(event: "close"): boolean;
+        emit(event: "connect"): boolean;
+        emit(event: "error", err: Error): boolean;
+        emit(event: "listening"): boolean;
+        emit(event: "message", msg: NonSharedBuffer, rinfo: RemoteInfo): boolean;
+        on(event: string, listener: (...args: any[]) => void): this;
+        on(event: "close", listener: () => void): this;
+        on(event: "connect", listener: () => void): this;
+        on(event: "error", listener: (err: Error) => void): this;
+        on(event: "listening", listener: () => void): this;
+        on(event: "message", listener: (msg: NonSharedBuffer, rinfo: RemoteInfo) => void): this;
+        once(event: string, listener: (...args: any[]) => void): this;
+        once(event: "close", listener: () => void): this;
+        once(event: "connect", listener: () => void): this;
+        once(event: "error", listener: (err: Error) => void): this;
+        once(event: "listening", listener: () => void): this;
+        once(event: "message", listener: (msg: NonSharedBuffer, rinfo: RemoteInfo) => void): this;
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependListener(event: "close", listener: () => void): this;
+        prependListener(event: "connect", listener: () => void): this;
+        prependListener(event: "error", listener: (err: Error) => void): this;
+        prependListener(event: "listening", listener: () => void): this;
+        prependListener(event: "message", listener: (msg: NonSharedBuffer, rinfo: RemoteInfo) => void): this;
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "close", listener: () => void): this;
+        prependOnceListener(event: "connect", listener: () => void): this;
+        prependOnceListener(event: "error", listener: (err: Error) => void): this;
+        prependOnceListener(event: "listening", listener: () => void): this;
+        prependOnceListener(event: "message", listener: (msg: NonSharedBuffer, rinfo: RemoteInfo) => void): this;
+        /**
+         * Calls `socket.close()` and returns a promise that fulfills when the socket has closed.
+         * @since v20.5.0
+         */
+        [Symbol.asyncDispose](): Promise;
+    }
+}
+declare module "node:dgram" {
+    export * from "dgram";
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/diagnostics_channel.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/diagnostics_channel.d.ts
new file mode 100644
index 00000000..025847de
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/diagnostics_channel.d.ts
@@ -0,0 +1,576 @@
+/**
+ * The `node:diagnostics_channel` module provides an API to create named channels
+ * to report arbitrary message data for diagnostics purposes.
+ *
+ * It can be accessed using:
+ *
+ * ```js
+ * import diagnostics_channel from 'node:diagnostics_channel';
+ * ```
+ *
+ * It is intended that a module writer wanting to report diagnostics messages
+ * will create one or many top-level channels to report messages through.
+ * Channels may also be acquired at runtime but it is not encouraged
+ * due to the additional overhead of doing so. Channels may be exported for
+ * convenience, but as long as the name is known it can be acquired anywhere.
+ *
+ * If you intend for your module to produce diagnostics data for others to
+ * consume it is recommended that you include documentation of what named
+ * channels are used along with the shape of the message data. Channel names
+ * should generally include the module name to avoid collisions with data from
+ * other modules.
+ * @since v15.1.0, v14.17.0
+ * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/diagnostics_channel.js)
+ */
+declare module "diagnostics_channel" {
+    import { AsyncLocalStorage } from "node:async_hooks";
+    /**
+     * Check if there are active subscribers to the named channel. This is helpful if
+     * the message you want to send might be expensive to prepare.
+     *
+     * This API is optional but helpful when trying to publish messages from very
+     * performance-sensitive code.
+     *
+     * ```js
+     * import diagnostics_channel from 'node:diagnostics_channel';
+     *
+     * if (diagnostics_channel.hasSubscribers('my-channel')) {
+     *   // There are subscribers, prepare and publish message
+     * }
+     * ```
+     * @since v15.1.0, v14.17.0
+     * @param name The channel name
+     * @return If there are active subscribers
+     */
+    function hasSubscribers(name: string | symbol): boolean;
+    /**
+     * This is the primary entry-point for anyone wanting to publish to a named
+     * channel. It produces a channel object which is optimized to reduce overhead at
+     * publish time as much as possible.
+     *
+     * ```js
+     * import diagnostics_channel from 'node:diagnostics_channel';
+     *
+     * const channel = diagnostics_channel.channel('my-channel');
+     * ```
+     * @since v15.1.0, v14.17.0
+     * @param name The channel name
+     * @return The named channel object
+     */
+    function channel(name: string | symbol): Channel;
+    type ChannelListener = (message: unknown, name: string | symbol) => void;
+    /**
+     * Register a message handler to subscribe to this channel. This message handler
+     * will be run synchronously whenever a message is published to the channel. Any
+     * errors thrown in the message handler will trigger an `'uncaughtException'`.
+     *
+     * ```js
+     * import diagnostics_channel from 'node:diagnostics_channel';
+     *
+     * diagnostics_channel.subscribe('my-channel', (message, name) => {
+     *   // Received data
+     * });
+     * ```
+     * @since v18.7.0, v16.17.0
+     * @param name The channel name
+     * @param onMessage The handler to receive channel messages
+     */
+    function subscribe(name: string | symbol, onMessage: ChannelListener): void;
+    /**
+     * Remove a message handler previously registered to this channel with {@link subscribe}.
+     *
+     * ```js
+     * import diagnostics_channel from 'node:diagnostics_channel';
+     *
+     * function onMessage(message, name) {
+     *   // Received data
+     * }
+     *
+     * diagnostics_channel.subscribe('my-channel', onMessage);
+     *
+     * diagnostics_channel.unsubscribe('my-channel', onMessage);
+     * ```
+     * @since v18.7.0, v16.17.0
+     * @param name The channel name
+     * @param onMessage The previous subscribed handler to remove
+     * @return `true` if the handler was found, `false` otherwise.
+     */
+    function unsubscribe(name: string | symbol, onMessage: ChannelListener): boolean;
+    /**
+     * Creates a `TracingChannel` wrapper for the given `TracingChannel Channels`. If a name is given, the corresponding tracing
+     * channels will be created in the form of `tracing:${name}:${eventType}` where `eventType` corresponds to the types of `TracingChannel Channels`.
+     *
+     * ```js
+     * import diagnostics_channel from 'node:diagnostics_channel';
+     *
+     * const channelsByName = diagnostics_channel.tracingChannel('my-channel');
+     *
+     * // or...
+     *
+     * const channelsByCollection = diagnostics_channel.tracingChannel({
+     *   start: diagnostics_channel.channel('tracing:my-channel:start'),
+     *   end: diagnostics_channel.channel('tracing:my-channel:end'),
+     *   asyncStart: diagnostics_channel.channel('tracing:my-channel:asyncStart'),
+     *   asyncEnd: diagnostics_channel.channel('tracing:my-channel:asyncEnd'),
+     *   error: diagnostics_channel.channel('tracing:my-channel:error'),
+     * });
+     * ```
+     * @since v19.9.0
+     * @experimental
+     * @param nameOrChannels Channel name or object containing all the `TracingChannel Channels`
+     * @return Collection of channels to trace with
+     */
+    function tracingChannel<
+        StoreType = unknown,
+        ContextType extends object = StoreType extends object ? StoreType : object,
+    >(
+        nameOrChannels: string | TracingChannelCollection,
+    ): TracingChannel;
+    /**
+     * The class `Channel` represents an individual named channel within the data
+     * pipeline. It is used to track subscribers and to publish messages when there
+     * are subscribers present. It exists as a separate object to avoid channel
+     * lookups at publish time, enabling very fast publish speeds and allowing
+     * for heavy use while incurring very minimal cost. Channels are created with {@link channel}, constructing a channel directly
+     * with `new Channel(name)` is not supported.
+     * @since v15.1.0, v14.17.0
+     */
+    class Channel {
+        readonly name: string | symbol;
+        /**
+         * Check if there are active subscribers to this channel. This is helpful if
+         * the message you want to send might be expensive to prepare.
+         *
+         * This API is optional but helpful when trying to publish messages from very
+         * performance-sensitive code.
+         *
+         * ```js
+         * import diagnostics_channel from 'node:diagnostics_channel';
+         *
+         * const channel = diagnostics_channel.channel('my-channel');
+         *
+         * if (channel.hasSubscribers) {
+         *   // There are subscribers, prepare and publish message
+         * }
+         * ```
+         * @since v15.1.0, v14.17.0
+         */
+        readonly hasSubscribers: boolean;
+        private constructor(name: string | symbol);
+        /**
+         * Publish a message to any subscribers to the channel. This will trigger
+         * message handlers synchronously so they will execute within the same context.
+         *
+         * ```js
+         * import diagnostics_channel from 'node:diagnostics_channel';
+         *
+         * const channel = diagnostics_channel.channel('my-channel');
+         *
+         * channel.publish({
+         *   some: 'message',
+         * });
+         * ```
+         * @since v15.1.0, v14.17.0
+         * @param message The message to send to the channel subscribers
+         */
+        publish(message: unknown): void;
+        /**
+         * Register a message handler to subscribe to this channel. This message handler
+         * will be run synchronously whenever a message is published to the channel. Any
+         * errors thrown in the message handler will trigger an `'uncaughtException'`.
+         *
+         * ```js
+         * import diagnostics_channel from 'node:diagnostics_channel';
+         *
+         * const channel = diagnostics_channel.channel('my-channel');
+         *
+         * channel.subscribe((message, name) => {
+         *   // Received data
+         * });
+         * ```
+         * @since v15.1.0, v14.17.0
+         * @param onMessage The handler to receive channel messages
+         */
+        subscribe(onMessage: ChannelListener): void;
+        /**
+         * Remove a message handler previously registered to this channel with `channel.subscribe(onMessage)`.
+         *
+         * ```js
+         * import diagnostics_channel from 'node:diagnostics_channel';
+         *
+         * const channel = diagnostics_channel.channel('my-channel');
+         *
+         * function onMessage(message, name) {
+         *   // Received data
+         * }
+         *
+         * channel.subscribe(onMessage);
+         *
+         * channel.unsubscribe(onMessage);
+         * ```
+         * @since v15.1.0, v14.17.0
+         * @param onMessage The previous subscribed handler to remove
+         * @return `true` if the handler was found, `false` otherwise.
+         */
+        unsubscribe(onMessage: ChannelListener): void;
+        /**
+         * When `channel.runStores(context, ...)` is called, the given context data
+         * will be applied to any store bound to the channel. If the store has already been
+         * bound the previous `transform` function will be replaced with the new one.
+         * The `transform` function may be omitted to set the given context data as the
+         * context directly.
+         *
+         * ```js
+         * import diagnostics_channel from 'node:diagnostics_channel';
+         * import { AsyncLocalStorage } from 'node:async_hooks';
+         *
+         * const store = new AsyncLocalStorage();
+         *
+         * const channel = diagnostics_channel.channel('my-channel');
+         *
+         * channel.bindStore(store, (data) => {
+         *   return { data };
+         * });
+         * ```
+         * @since v19.9.0
+         * @experimental
+         * @param store The store to which to bind the context data
+         * @param transform Transform context data before setting the store context
+         */
+        bindStore(store: AsyncLocalStorage, transform?: (context: ContextType) => StoreType): void;
+        /**
+         * Remove a message handler previously registered to this channel with `channel.bindStore(store)`.
+         *
+         * ```js
+         * import diagnostics_channel from 'node:diagnostics_channel';
+         * import { AsyncLocalStorage } from 'node:async_hooks';
+         *
+         * const store = new AsyncLocalStorage();
+         *
+         * const channel = diagnostics_channel.channel('my-channel');
+         *
+         * channel.bindStore(store);
+         * channel.unbindStore(store);
+         * ```
+         * @since v19.9.0
+         * @experimental
+         * @param store The store to unbind from the channel.
+         * @return `true` if the store was found, `false` otherwise.
+         */
+        unbindStore(store: AsyncLocalStorage): boolean;
+        /**
+         * Applies the given data to any AsyncLocalStorage instances bound to the channel
+         * for the duration of the given function, then publishes to the channel within
+         * the scope of that data is applied to the stores.
+         *
+         * If a transform function was given to `channel.bindStore(store)` it will be
+         * applied to transform the message data before it becomes the context value for
+         * the store. The prior storage context is accessible from within the transform
+         * function in cases where context linking is required.
+         *
+         * The context applied to the store should be accessible in any async code which
+         * continues from execution which began during the given function, however
+         * there are some situations in which `context loss` may occur.
+         *
+         * ```js
+         * import diagnostics_channel from 'node:diagnostics_channel';
+         * import { AsyncLocalStorage } from 'node:async_hooks';
+         *
+         * const store = new AsyncLocalStorage();
+         *
+         * const channel = diagnostics_channel.channel('my-channel');
+         *
+         * channel.bindStore(store, (message) => {
+         *   const parent = store.getStore();
+         *   return new Span(message, parent);
+         * });
+         * channel.runStores({ some: 'message' }, () => {
+         *   store.getStore(); // Span({ some: 'message' })
+         * });
+         * ```
+         * @since v19.9.0
+         * @experimental
+         * @param context Message to send to subscribers and bind to stores
+         * @param fn Handler to run within the entered storage context
+         * @param thisArg The receiver to be used for the function call.
+         * @param args Optional arguments to pass to the function.
+         */
+        runStores(
+            context: ContextType,
+            fn: (this: ThisArg, ...args: Args) => Result,
+            thisArg?: ThisArg,
+            ...args: Args
+        ): Result;
+    }
+    interface TracingChannelSubscribers {
+        start: (message: ContextType) => void;
+        end: (
+            message: ContextType & {
+                error?: unknown;
+                result?: unknown;
+            },
+        ) => void;
+        asyncStart: (
+            message: ContextType & {
+                error?: unknown;
+                result?: unknown;
+            },
+        ) => void;
+        asyncEnd: (
+            message: ContextType & {
+                error?: unknown;
+                result?: unknown;
+            },
+        ) => void;
+        error: (
+            message: ContextType & {
+                error: unknown;
+            },
+        ) => void;
+    }
+    interface TracingChannelCollection {
+        start: Channel;
+        end: Channel;
+        asyncStart: Channel;
+        asyncEnd: Channel;
+        error: Channel;
+    }
+    /**
+     * The class `TracingChannel` is a collection of `TracingChannel Channels` which
+     * together express a single traceable action. It is used to formalize and
+     * simplify the process of producing events for tracing application flow. {@link tracingChannel} is used to construct a `TracingChannel`. As with `Channel` it is recommended to create and reuse a
+     * single `TracingChannel` at the top-level of the file rather than creating them
+     * dynamically.
+     * @since v19.9.0
+     * @experimental
+     */
+    class TracingChannel implements TracingChannelCollection {
+        start: Channel;
+        end: Channel;
+        asyncStart: Channel;
+        asyncEnd: Channel;
+        error: Channel;
+        /**
+         * Helper to subscribe a collection of functions to the corresponding channels.
+         * This is the same as calling `channel.subscribe(onMessage)` on each channel
+         * individually.
+         *
+         * ```js
+         * import diagnostics_channel from 'node:diagnostics_channel';
+         *
+         * const channels = diagnostics_channel.tracingChannel('my-channel');
+         *
+         * channels.subscribe({
+         *   start(message) {
+         *     // Handle start message
+         *   },
+         *   end(message) {
+         *     // Handle end message
+         *   },
+         *   asyncStart(message) {
+         *     // Handle asyncStart message
+         *   },
+         *   asyncEnd(message) {
+         *     // Handle asyncEnd message
+         *   },
+         *   error(message) {
+         *     // Handle error message
+         *   },
+         * });
+         * ```
+         * @since v19.9.0
+         * @experimental
+         * @param subscribers Set of `TracingChannel Channels` subscribers
+         */
+        subscribe(subscribers: TracingChannelSubscribers): void;
+        /**
+         * Helper to unsubscribe a collection of functions from the corresponding channels.
+         * This is the same as calling `channel.unsubscribe(onMessage)` on each channel
+         * individually.
+         *
+         * ```js
+         * import diagnostics_channel from 'node:diagnostics_channel';
+         *
+         * const channels = diagnostics_channel.tracingChannel('my-channel');
+         *
+         * channels.unsubscribe({
+         *   start(message) {
+         *     // Handle start message
+         *   },
+         *   end(message) {
+         *     // Handle end message
+         *   },
+         *   asyncStart(message) {
+         *     // Handle asyncStart message
+         *   },
+         *   asyncEnd(message) {
+         *     // Handle asyncEnd message
+         *   },
+         *   error(message) {
+         *     // Handle error message
+         *   },
+         * });
+         * ```
+         * @since v19.9.0
+         * @experimental
+         * @param subscribers Set of `TracingChannel Channels` subscribers
+         * @return `true` if all handlers were successfully unsubscribed, and `false` otherwise.
+         */
+        unsubscribe(subscribers: TracingChannelSubscribers): void;
+        /**
+         * Trace a synchronous function call. This will always produce a `start event` and `end event` around the execution and may produce an `error event` if the given function throws an error.
+         * This will run the given function using `channel.runStores(context, ...)` on the `start` channel which ensures all
+         * events should have any bound stores set to match this trace context.
+         *
+         * To ensure only correct trace graphs are formed, events will only be published if subscribers are present prior to starting the trace. Subscriptions
+         * which are added after the trace begins will not receive future events from that trace, only future traces will be seen.
+         *
+         * ```js
+         * import diagnostics_channel from 'node:diagnostics_channel';
+         *
+         * const channels = diagnostics_channel.tracingChannel('my-channel');
+         *
+         * channels.traceSync(() => {
+         *   // Do something
+         * }, {
+         *   some: 'thing',
+         * });
+         * ```
+         * @since v19.9.0
+         * @experimental
+         * @param fn Function to wrap a trace around
+         * @param context Shared object to correlate events through
+         * @param thisArg The receiver to be used for the function call
+         * @param args Optional arguments to pass to the function
+         * @return The return value of the given function
+         */
+        traceSync(
+            fn: (this: ThisArg, ...args: Args) => Result,
+            context?: ContextType,
+            thisArg?: ThisArg,
+            ...args: Args
+        ): Result;
+        /**
+         * Trace a promise-returning function call. This will always produce a `start event` and `end event` around the synchronous portion of the
+         * function execution, and will produce an `asyncStart event` and `asyncEnd event` when a promise continuation is reached. It may also
+         * produce an `error event` if the given function throws an error or the
+         * returned promise rejects. This will run the given function using `channel.runStores(context, ...)` on the `start` channel which ensures all
+         * events should have any bound stores set to match this trace context.
+         *
+         * To ensure only correct trace graphs are formed, events will only be published if subscribers are present prior to starting the trace. Subscriptions
+         * which are added after the trace begins will not receive future events from that trace, only future traces will be seen.
+         *
+         * ```js
+         * import diagnostics_channel from 'node:diagnostics_channel';
+         *
+         * const channels = diagnostics_channel.tracingChannel('my-channel');
+         *
+         * channels.tracePromise(async () => {
+         *   // Do something
+         * }, {
+         *   some: 'thing',
+         * });
+         * ```
+         * @since v19.9.0
+         * @experimental
+         * @param fn Promise-returning function to wrap a trace around
+         * @param context Shared object to correlate trace events through
+         * @param thisArg The receiver to be used for the function call
+         * @param args Optional arguments to pass to the function
+         * @return Chained from promise returned by the given function
+         */
+        tracePromise(
+            fn: (this: ThisArg, ...args: Args) => Promise,
+            context?: ContextType,
+            thisArg?: ThisArg,
+            ...args: Args
+        ): Promise;
+        /**
+         * Trace a callback-receiving function call. This will always produce a `start event` and `end event` around the synchronous portion of the
+         * function execution, and will produce a `asyncStart event` and `asyncEnd event` around the callback execution. It may also produce an `error event` if the given function throws an error or
+         * the returned
+         * promise rejects. This will run the given function using `channel.runStores(context, ...)` on the `start` channel which ensures all
+         * events should have any bound stores set to match this trace context.
+         *
+         * The `position` will be -1 by default to indicate the final argument should
+         * be used as the callback.
+         *
+         * ```js
+         * import diagnostics_channel from 'node:diagnostics_channel';
+         *
+         * const channels = diagnostics_channel.tracingChannel('my-channel');
+         *
+         * channels.traceCallback((arg1, callback) => {
+         *   // Do something
+         *   callback(null, 'result');
+         * }, 1, {
+         *   some: 'thing',
+         * }, thisArg, arg1, callback);
+         * ```
+         *
+         * The callback will also be run with `channel.runStores(context, ...)` which
+         * enables context loss recovery in some cases.
+         *
+         * To ensure only correct trace graphs are formed, events will only be published if subscribers are present prior to starting the trace. Subscriptions
+         * which are added after the trace begins will not receive future events from that trace, only future traces will be seen.
+         *
+         * ```js
+         * import diagnostics_channel from 'node:diagnostics_channel';
+         * import { AsyncLocalStorage } from 'node:async_hooks';
+         *
+         * const channels = diagnostics_channel.tracingChannel('my-channel');
+         * const myStore = new AsyncLocalStorage();
+         *
+         * // The start channel sets the initial store data to something
+         * // and stores that store data value on the trace context object
+         * channels.start.bindStore(myStore, (data) => {
+         *   const span = new Span(data);
+         *   data.span = span;
+         *   return span;
+         * });
+         *
+         * // Then asyncStart can restore from that data it stored previously
+         * channels.asyncStart.bindStore(myStore, (data) => {
+         *   return data.span;
+         * });
+         * ```
+         * @since v19.9.0
+         * @experimental
+         * @param fn callback using function to wrap a trace around
+         * @param position Zero-indexed argument position of expected callback
+         * @param context Shared object to correlate trace events through
+         * @param thisArg The receiver to be used for the function call
+         * @param args Optional arguments to pass to the function
+         * @return The return value of the given function
+         */
+        traceCallback(
+            fn: (this: ThisArg, ...args: Args) => Result,
+            position?: number,
+            context?: ContextType,
+            thisArg?: ThisArg,
+            ...args: Args
+        ): Result;
+        /**
+         * `true` if any of the individual channels has a subscriber, `false` if not.
+         *
+         * This is a helper method available on a {@link TracingChannel} instance to check
+         * if any of the [TracingChannel Channels](https://nodejs.org/api/diagnostics_channel.html#tracingchannel-channels) have subscribers.
+         * A `true` is returned if any of them have at least one subscriber, a `false` is returned otherwise.
+         *
+         * ```js
+         * const diagnostics_channel = require('node:diagnostics_channel');
+         *
+         * const channels = diagnostics_channel.tracingChannel('my-channel');
+         *
+         * if (channels.hasSubscribers) {
+         *   // Do something
+         * }
+         * ```
+         * @since v22.0.0, v20.13.0
+         */
+        readonly hasSubscribers: boolean;
+    }
+}
+declare module "node:diagnostics_channel" {
+    export * from "diagnostics_channel";
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/dns.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/dns.d.ts
new file mode 100644
index 00000000..ba0d1221
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/dns.d.ts
@@ -0,0 +1,923 @@
+/**
+ * The `node:dns` module enables name resolution. For example, use it to look up IP
+ * addresses of host names.
+ *
+ * Although named for the [Domain Name System (DNS)](https://en.wikipedia.org/wiki/Domain_Name_System), it does not always use the
+ * DNS protocol for lookups. {@link lookup} uses the operating system
+ * facilities to perform name resolution. It may not need to perform any network
+ * communication. To perform name resolution the way other applications on the same
+ * system do, use {@link lookup}.
+ *
+ * ```js
+ * import dns from 'node:dns';
+ *
+ * dns.lookup('example.org', (err, address, family) => {
+ *   console.log('address: %j family: IPv%s', address, family);
+ * });
+ * // address: "93.184.216.34" family: IPv4
+ * ```
+ *
+ * All other functions in the `node:dns` module connect to an actual DNS server to
+ * perform name resolution. They will always use the network to perform DNS
+ * queries. These functions do not use the same set of configuration files used by {@link lookup} (e.g. `/etc/hosts`). Use these functions to always perform
+ * DNS queries, bypassing other name-resolution facilities.
+ *
+ * ```js
+ * import dns from 'node:dns';
+ *
+ * dns.resolve4('archive.org', (err, addresses) => {
+ *   if (err) throw err;
+ *
+ *   console.log(`addresses: ${JSON.stringify(addresses)}`);
+ *
+ *   addresses.forEach((a) => {
+ *     dns.reverse(a, (err, hostnames) => {
+ *       if (err) {
+ *         throw err;
+ *       }
+ *       console.log(`reverse for ${a}: ${JSON.stringify(hostnames)}`);
+ *     });
+ *   });
+ * });
+ * ```
+ *
+ * See the [Implementation considerations section](https://nodejs.org/docs/latest-v24.x/api/dns.html#implementation-considerations) for more information.
+ * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/dns.js)
+ */
+declare module "dns" {
+    import * as dnsPromises from "node:dns/promises";
+    // Supported getaddrinfo flags.
+    /**
+     * Limits returned address types to the types of non-loopback addresses configured on the system. For example, IPv4 addresses are
+     * only returned if the current system has at least one IPv4 address configured.
+     */
+    export const ADDRCONFIG: number;
+    /**
+     * If the IPv6 family was specified, but no IPv6 addresses were found, then return IPv4 mapped IPv6 addresses. It is not supported
+     * on some operating systems (e.g. FreeBSD 10.1).
+     */
+    export const V4MAPPED: number;
+    /**
+     * If `dns.V4MAPPED` is specified, return resolved IPv6 addresses as
+     * well as IPv4 mapped IPv6 addresses.
+     */
+    export const ALL: number;
+    export interface LookupOptions {
+        /**
+         * The record family. Must be `4`, `6`, or `0`. For backward compatibility reasons, `'IPv4'` and `'IPv6'` are interpreted
+         * as `4` and `6` respectively. The value 0 indicates that either an IPv4 or IPv6 address is returned. If the value `0` is used
+         * with `{ all: true } (see below)`, both IPv4 and IPv6 addresses are returned.
+         * @default 0
+         */
+        family?: number | "IPv4" | "IPv6" | undefined;
+        /**
+         * One or more [supported `getaddrinfo`](https://nodejs.org/docs/latest-v24.x/api/dns.html#supported-getaddrinfo-flags) flags. Multiple flags may be
+         * passed by bitwise `OR`ing their values.
+         */
+        hints?: number | undefined;
+        /**
+         * When `true`, the callback returns all resolved addresses in an array. Otherwise, returns a single address.
+         * @default false
+         */
+        all?: boolean | undefined;
+        /**
+         * When `verbatim`, the resolved addresses are return unsorted. When `ipv4first`, the resolved addresses are sorted
+         * by placing IPv4 addresses before IPv6 addresses. When `ipv6first`, the resolved addresses are sorted by placing IPv6
+         * addresses before IPv4 addresses. Default value is configurable using
+         * {@link setDefaultResultOrder} or [`--dns-result-order`](https://nodejs.org/docs/latest-v24.x/api/cli.html#--dns-result-orderorder).
+         * @default `verbatim` (addresses are not reordered)
+         * @since v22.1.0
+         */
+        order?: "ipv4first" | "ipv6first" | "verbatim" | undefined;
+        /**
+         * When `true`, the callback receives IPv4 and IPv6 addresses in the order the DNS resolver returned them. When `false`, IPv4
+         * addresses are placed before IPv6 addresses. This option will be deprecated in favor of `order`. When both are specified,
+         * `order` has higher precedence. New code should only use `order`. Default value is configurable using {@link setDefaultResultOrder}
+         * @default true (addresses are not reordered)
+         * @deprecated Please use `order` option
+         */
+        verbatim?: boolean | undefined;
+    }
+    export interface LookupOneOptions extends LookupOptions {
+        all?: false | undefined;
+    }
+    export interface LookupAllOptions extends LookupOptions {
+        all: true;
+    }
+    export interface LookupAddress {
+        /**
+         * A string representation of an IPv4 or IPv6 address.
+         */
+        address: string;
+        /**
+         * `4` or `6`, denoting the family of `address`, or `0` if the address is not an IPv4 or IPv6 address. `0` is a likely indicator of a
+         * bug in the name resolution service used by the operating system.
+         */
+        family: number;
+    }
+    /**
+     * Resolves a host name (e.g. `'nodejs.org'`) into the first found A (IPv4) or
+     * AAAA (IPv6) record. All `option` properties are optional. If `options` is an
+     * integer, then it must be `4` or `6` – if `options` is `0` or not provided, then
+     * IPv4 and IPv6 addresses are both returned if found.
+     *
+     * With the `all` option set to `true`, the arguments for `callback` change to `(err, addresses)`, with `addresses` being an array of objects with the
+     * properties `address` and `family`.
+     *
+     * On error, `err` is an `Error` object, where `err.code` is the error code.
+     * Keep in mind that `err.code` will be set to `'ENOTFOUND'` not only when
+     * the host name does not exist but also when the lookup fails in other ways
+     * such as no available file descriptors.
+     *
+     * `dns.lookup()` does not necessarily have anything to do with the DNS protocol.
+     * The implementation uses an operating system facility that can associate names
+     * with addresses and vice versa. This implementation can have subtle but
+     * important consequences on the behavior of any Node.js program. Please take some
+     * time to consult the [Implementation considerations section](https://nodejs.org/docs/latest-v24.x/api/dns.html#implementation-considerations)
+     * before using `dns.lookup()`.
+     *
+     * Example usage:
+     *
+     * ```js
+     * import dns from 'node:dns';
+     * const options = {
+     *   family: 6,
+     *   hints: dns.ADDRCONFIG | dns.V4MAPPED,
+     * };
+     * dns.lookup('example.com', options, (err, address, family) =>
+     *   console.log('address: %j family: IPv%s', address, family));
+     * // address: "2606:2800:220:1:248:1893:25c8:1946" family: IPv6
+     *
+     * // When options.all is true, the result will be an Array.
+     * options.all = true;
+     * dns.lookup('example.com', options, (err, addresses) =>
+     *   console.log('addresses: %j', addresses));
+     * // addresses: [{"address":"2606:2800:220:1:248:1893:25c8:1946","family":6}]
+     * ```
+     *
+     * If this method is invoked as its [util.promisify()](https://nodejs.org/docs/latest-v24.x/api/util.html#utilpromisifyoriginal) ed
+     * version, and `all` is not set to `true`, it returns a `Promise` for an `Object` with `address` and `family` properties.
+     * @since v0.1.90
+     */
+    export function lookup(
+        hostname: string,
+        family: number,
+        callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void,
+    ): void;
+    export function lookup(
+        hostname: string,
+        options: LookupOneOptions,
+        callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void,
+    ): void;
+    export function lookup(
+        hostname: string,
+        options: LookupAllOptions,
+        callback: (err: NodeJS.ErrnoException | null, addresses: LookupAddress[]) => void,
+    ): void;
+    export function lookup(
+        hostname: string,
+        options: LookupOptions,
+        callback: (err: NodeJS.ErrnoException | null, address: string | LookupAddress[], family: number) => void,
+    ): void;
+    export function lookup(
+        hostname: string,
+        callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void,
+    ): void;
+    export namespace lookup {
+        function __promisify__(hostname: string, options: LookupAllOptions): Promise;
+        function __promisify__(hostname: string, options?: LookupOneOptions | number): Promise;
+        function __promisify__(hostname: string, options: LookupOptions): Promise;
+    }
+    /**
+     * Resolves the given `address` and `port` into a host name and service using
+     * the operating system's underlying `getnameinfo` implementation.
+     *
+     * If `address` is not a valid IP address, a `TypeError` will be thrown.
+     * The `port` will be coerced to a number. If it is not a legal port, a `TypeError` will be thrown.
+     *
+     * On an error, `err` is an [`Error`](https://nodejs.org/docs/latest-v24.x/api/errors.html#class-error) object,
+     * where `err.code` is the error code.
+     *
+     * ```js
+     * import dns from 'node:dns';
+     * dns.lookupService('127.0.0.1', 22, (err, hostname, service) => {
+     *   console.log(hostname, service);
+     *   // Prints: localhost ssh
+     * });
+     * ```
+     *
+     * If this method is invoked as its [util.promisify()](https://nodejs.org/docs/latest-v24.x/api/util.html#utilpromisifyoriginal) ed
+     * version, it returns a `Promise` for an `Object` with `hostname` and `service` properties.
+     * @since v0.11.14
+     */
+    export function lookupService(
+        address: string,
+        port: number,
+        callback: (err: NodeJS.ErrnoException | null, hostname: string, service: string) => void,
+    ): void;
+    export namespace lookupService {
+        function __promisify__(
+            address: string,
+            port: number,
+        ): Promise<{
+            hostname: string;
+            service: string;
+        }>;
+    }
+    export interface ResolveOptions {
+        ttl: boolean;
+    }
+    export interface ResolveWithTtlOptions extends ResolveOptions {
+        ttl: true;
+    }
+    export interface RecordWithTtl {
+        address: string;
+        ttl: number;
+    }
+    /** @deprecated Use `AnyARecord` or `AnyAaaaRecord` instead. */
+    export type AnyRecordWithTtl = AnyARecord | AnyAaaaRecord;
+    export interface AnyARecord extends RecordWithTtl {
+        type: "A";
+    }
+    export interface AnyAaaaRecord extends RecordWithTtl {
+        type: "AAAA";
+    }
+    export interface CaaRecord {
+        critical: number;
+        issue?: string | undefined;
+        issuewild?: string | undefined;
+        iodef?: string | undefined;
+        contactemail?: string | undefined;
+        contactphone?: string | undefined;
+    }
+    export interface AnyCaaRecord extends CaaRecord {
+        type: "CAA";
+    }
+    export interface MxRecord {
+        priority: number;
+        exchange: string;
+    }
+    export interface AnyMxRecord extends MxRecord {
+        type: "MX";
+    }
+    export interface NaptrRecord {
+        flags: string;
+        service: string;
+        regexp: string;
+        replacement: string;
+        order: number;
+        preference: number;
+    }
+    export interface AnyNaptrRecord extends NaptrRecord {
+        type: "NAPTR";
+    }
+    export interface SoaRecord {
+        nsname: string;
+        hostmaster: string;
+        serial: number;
+        refresh: number;
+        retry: number;
+        expire: number;
+        minttl: number;
+    }
+    export interface AnySoaRecord extends SoaRecord {
+        type: "SOA";
+    }
+    export interface SrvRecord {
+        priority: number;
+        weight: number;
+        port: number;
+        name: string;
+    }
+    export interface AnySrvRecord extends SrvRecord {
+        type: "SRV";
+    }
+    export interface TlsaRecord {
+        certUsage: number;
+        selector: number;
+        match: number;
+        data: ArrayBuffer;
+    }
+    export interface AnyTlsaRecord extends TlsaRecord {
+        type: "TLSA";
+    }
+    export interface AnyTxtRecord {
+        type: "TXT";
+        entries: string[];
+    }
+    export interface AnyNsRecord {
+        type: "NS";
+        value: string;
+    }
+    export interface AnyPtrRecord {
+        type: "PTR";
+        value: string;
+    }
+    export interface AnyCnameRecord {
+        type: "CNAME";
+        value: string;
+    }
+    export type AnyRecord =
+        | AnyARecord
+        | AnyAaaaRecord
+        | AnyCaaRecord
+        | AnyCnameRecord
+        | AnyMxRecord
+        | AnyNaptrRecord
+        | AnyNsRecord
+        | AnyPtrRecord
+        | AnySoaRecord
+        | AnySrvRecord
+        | AnyTlsaRecord
+        | AnyTxtRecord;
+    /**
+     * Uses the DNS protocol to resolve a host name (e.g. `'nodejs.org'`) into an array
+     * of the resource records. The `callback` function has arguments `(err, records)`. When successful, `records` will be an array of resource
+     * records. The type and structure of individual results varies based on `rrtype`:
+     *
+     * 
+     *
+     * On error, `err` is an [`Error`](https://nodejs.org/docs/latest-v24.x/api/errors.html#class-error) object,
+     * where `err.code` is one of the `DNS error codes`.
+     * @since v0.1.27
+     * @param hostname Host name to resolve.
+     * @param [rrtype='A'] Resource record type.
+     */
+    export function resolve(
+        hostname: string,
+        callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void,
+    ): void;
+    export function resolve(
+        hostname: string,
+        rrtype: "A" | "AAAA" | "CNAME" | "NS" | "PTR",
+        callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void,
+    ): void;
+    export function resolve(
+        hostname: string,
+        rrtype: "ANY",
+        callback: (err: NodeJS.ErrnoException | null, addresses: AnyRecord[]) => void,
+    ): void;
+    export function resolve(
+        hostname: string,
+        rrtype: "CAA",
+        callback: (err: NodeJS.ErrnoException | null, address: CaaRecord[]) => void,
+    ): void;
+    export function resolve(
+        hostname: string,
+        rrtype: "MX",
+        callback: (err: NodeJS.ErrnoException | null, addresses: MxRecord[]) => void,
+    ): void;
+    export function resolve(
+        hostname: string,
+        rrtype: "NAPTR",
+        callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void,
+    ): void;
+    export function resolve(
+        hostname: string,
+        rrtype: "SOA",
+        callback: (err: NodeJS.ErrnoException | null, addresses: SoaRecord) => void,
+    ): void;
+    export function resolve(
+        hostname: string,
+        rrtype: "SRV",
+        callback: (err: NodeJS.ErrnoException | null, addresses: SrvRecord[]) => void,
+    ): void;
+    export function resolve(
+        hostname: string,
+        rrtype: "TLSA",
+        callback: (err: NodeJS.ErrnoException | null, addresses: TlsaRecord[]) => void,
+    ): void;
+    export function resolve(
+        hostname: string,
+        rrtype: "TXT",
+        callback: (err: NodeJS.ErrnoException | null, addresses: string[][]) => void,
+    ): void;
+    export function resolve(
+        hostname: string,
+        rrtype: string,
+        callback: (
+            err: NodeJS.ErrnoException | null,
+            addresses:
+                | string[]
+                | CaaRecord[]
+                | MxRecord[]
+                | NaptrRecord[]
+                | SoaRecord
+                | SrvRecord[]
+                | TlsaRecord[]
+                | string[][]
+                | AnyRecord[],
+        ) => void,
+    ): void;
+    export namespace resolve {
+        function __promisify__(hostname: string, rrtype?: "A" | "AAAA" | "CNAME" | "NS" | "PTR"): Promise;
+        function __promisify__(hostname: string, rrtype: "ANY"): Promise;
+        function __promisify__(hostname: string, rrtype: "CAA"): Promise;
+        function __promisify__(hostname: string, rrtype: "MX"): Promise;
+        function __promisify__(hostname: string, rrtype: "NAPTR"): Promise;
+        function __promisify__(hostname: string, rrtype: "SOA"): Promise;
+        function __promisify__(hostname: string, rrtype: "SRV"): Promise;
+        function __promisify__(hostname: string, rrtype: "TLSA"): Promise;
+        function __promisify__(hostname: string, rrtype: "TXT"): Promise;
+        function __promisify__(
+            hostname: string,
+            rrtype: string,
+        ): Promise<
+            | string[]
+            | CaaRecord[]
+            | MxRecord[]
+            | NaptrRecord[]
+            | SoaRecord
+            | SrvRecord[]
+            | TlsaRecord[]
+            | string[][]
+            | AnyRecord[]
+        >;
+    }
+    /**
+     * Uses the DNS protocol to resolve a IPv4 addresses (`A` records) for the `hostname`. The `addresses` argument passed to the `callback` function
+     * will contain an array of IPv4 addresses (e.g.`['74.125.79.104', '74.125.79.105', '74.125.79.106']`).
+     * @since v0.1.16
+     * @param hostname Host name to resolve.
+     */
+    export function resolve4(
+        hostname: string,
+        callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void,
+    ): void;
+    export function resolve4(
+        hostname: string,
+        options: ResolveWithTtlOptions,
+        callback: (err: NodeJS.ErrnoException | null, addresses: RecordWithTtl[]) => void,
+    ): void;
+    export function resolve4(
+        hostname: string,
+        options: ResolveOptions,
+        callback: (err: NodeJS.ErrnoException | null, addresses: string[] | RecordWithTtl[]) => void,
+    ): void;
+    export namespace resolve4 {
+        function __promisify__(hostname: string): Promise;
+        function __promisify__(hostname: string, options: ResolveWithTtlOptions): Promise;
+        function __promisify__(hostname: string, options?: ResolveOptions): Promise;
+    }
+    /**
+     * Uses the DNS protocol to resolve IPv6 addresses (`AAAA` records) for the `hostname`. The `addresses` argument passed to the `callback` function
+     * will contain an array of IPv6 addresses.
+     * @since v0.1.16
+     * @param hostname Host name to resolve.
+     */
+    export function resolve6(
+        hostname: string,
+        callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void,
+    ): void;
+    export function resolve6(
+        hostname: string,
+        options: ResolveWithTtlOptions,
+        callback: (err: NodeJS.ErrnoException | null, addresses: RecordWithTtl[]) => void,
+    ): void;
+    export function resolve6(
+        hostname: string,
+        options: ResolveOptions,
+        callback: (err: NodeJS.ErrnoException | null, addresses: string[] | RecordWithTtl[]) => void,
+    ): void;
+    export namespace resolve6 {
+        function __promisify__(hostname: string): Promise;
+        function __promisify__(hostname: string, options: ResolveWithTtlOptions): Promise;
+        function __promisify__(hostname: string, options?: ResolveOptions): Promise;
+    }
+    /**
+     * Uses the DNS protocol to resolve `CNAME` records for the `hostname`. The `addresses` argument passed to the `callback` function
+     * will contain an array of canonical name records available for the `hostname` (e.g. `['bar.example.com']`).
+     * @since v0.3.2
+     */
+    export function resolveCname(
+        hostname: string,
+        callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void,
+    ): void;
+    export namespace resolveCname {
+        function __promisify__(hostname: string): Promise;
+    }
+    /**
+     * Uses the DNS protocol to resolve `CAA` records for the `hostname`. The `addresses` argument passed to the `callback` function
+     * will contain an array of certification authority authorization records
+     * available for the `hostname` (e.g. `[{critical: 0, iodef: 'mailto:pki@example.com'}, {critical: 128, issue: 'pki.example.com'}]`).
+     * @since v15.0.0, v14.17.0
+     */
+    export function resolveCaa(
+        hostname: string,
+        callback: (err: NodeJS.ErrnoException | null, records: CaaRecord[]) => void,
+    ): void;
+    export namespace resolveCaa {
+        function __promisify__(hostname: string): Promise;
+    }
+    /**
+     * Uses the DNS protocol to resolve mail exchange records (`MX` records) for the `hostname`. The `addresses` argument passed to the `callback` function will
+     * contain an array of objects containing both a `priority` and `exchange` property (e.g. `[{priority: 10, exchange: 'mx.example.com'}, ...]`).
+     * @since v0.1.27
+     */
+    export function resolveMx(
+        hostname: string,
+        callback: (err: NodeJS.ErrnoException | null, addresses: MxRecord[]) => void,
+    ): void;
+    export namespace resolveMx {
+        function __promisify__(hostname: string): Promise;
+    }
+    /**
+     * Uses the DNS protocol to resolve regular expression-based records (`NAPTR` records) for the `hostname`. The `addresses` argument passed to the `callback` function will contain an array of
+     * objects with the following properties:
+     *
+     * * `flags`
+     * * `service`
+     * * `regexp`
+     * * `replacement`
+     * * `order`
+     * * `preference`
+     *
+     * ```js
+     * {
+     *   flags: 's',
+     *   service: 'SIP+D2U',
+     *   regexp: '',
+     *   replacement: '_sip._udp.example.com',
+     *   order: 30,
+     *   preference: 100
+     * }
+     * ```
+     * @since v0.9.12
+     */
+    export function resolveNaptr(
+        hostname: string,
+        callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void,
+    ): void;
+    export namespace resolveNaptr {
+        function __promisify__(hostname: string): Promise;
+    }
+    /**
+     * Uses the DNS protocol to resolve name server records (`NS` records) for the `hostname`. The `addresses` argument passed to the `callback` function will
+     * contain an array of name server records available for `hostname` (e.g. `['ns1.example.com', 'ns2.example.com']`).
+     * @since v0.1.90
+     */
+    export function resolveNs(
+        hostname: string,
+        callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void,
+    ): void;
+    export namespace resolveNs {
+        function __promisify__(hostname: string): Promise;
+    }
+    /**
+     * Uses the DNS protocol to resolve pointer records (`PTR` records) for the `hostname`. The `addresses` argument passed to the `callback` function will
+     * be an array of strings containing the reply records.
+     * @since v6.0.0
+     */
+    export function resolvePtr(
+        hostname: string,
+        callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void,
+    ): void;
+    export namespace resolvePtr {
+        function __promisify__(hostname: string): Promise;
+    }
+    /**
+     * Uses the DNS protocol to resolve a start of authority record (`SOA` record) for
+     * the `hostname`. The `address` argument passed to the `callback` function will
+     * be an object with the following properties:
+     *
+     * * `nsname`
+     * * `hostmaster`
+     * * `serial`
+     * * `refresh`
+     * * `retry`
+     * * `expire`
+     * * `minttl`
+     *
+     * ```js
+     * {
+     *   nsname: 'ns.example.com',
+     *   hostmaster: 'root.example.com',
+     *   serial: 2013101809,
+     *   refresh: 10000,
+     *   retry: 2400,
+     *   expire: 604800,
+     *   minttl: 3600
+     * }
+     * ```
+     * @since v0.11.10
+     */
+    export function resolveSoa(
+        hostname: string,
+        callback: (err: NodeJS.ErrnoException | null, address: SoaRecord) => void,
+    ): void;
+    export namespace resolveSoa {
+        function __promisify__(hostname: string): Promise;
+    }
+    /**
+     * Uses the DNS protocol to resolve service records (`SRV` records) for the `hostname`. The `addresses` argument passed to the `callback` function will
+     * be an array of objects with the following properties:
+     *
+     * * `priority`
+     * * `weight`
+     * * `port`
+     * * `name`
+     *
+     * ```js
+     * {
+     *   priority: 10,
+     *   weight: 5,
+     *   port: 21223,
+     *   name: 'service.example.com'
+     * }
+     * ```
+     * @since v0.1.27
+     */
+    export function resolveSrv(
+        hostname: string,
+        callback: (err: NodeJS.ErrnoException | null, addresses: SrvRecord[]) => void,
+    ): void;
+    export namespace resolveSrv {
+        function __promisify__(hostname: string): Promise;
+    }
+    /**
+     * Uses the DNS protocol to resolve certificate associations (`TLSA` records) for
+     * the `hostname`. The `records` argument passed to the `callback` function is an
+     * array of objects with these properties:
+     *
+     * * `certUsage`
+     * * `selector`
+     * * `match`
+     * * `data`
+     *
+     * ```js
+     * {
+     *   certUsage: 3,
+     *   selector: 1,
+     *   match: 1,
+     *   data: [ArrayBuffer]
+     * }
+     * ```
+     * @since v23.9.0, v22.15.0
+     */
+    export function resolveTlsa(
+        hostname: string,
+        callback: (err: NodeJS.ErrnoException | null, addresses: TlsaRecord[]) => void,
+    ): void;
+    export namespace resolveTlsa {
+        function __promisify__(hostname: string): Promise;
+    }
+    /**
+     * Uses the DNS protocol to resolve text queries (`TXT` records) for the `hostname`. The `records` argument passed to the `callback` function is a
+     * two-dimensional array of the text records available for `hostname` (e.g.`[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]`). Each sub-array contains TXT chunks of
+     * one record. Depending on the use case, these could be either joined together or
+     * treated separately.
+     * @since v0.1.27
+     */
+    export function resolveTxt(
+        hostname: string,
+        callback: (err: NodeJS.ErrnoException | null, addresses: string[][]) => void,
+    ): void;
+    export namespace resolveTxt {
+        function __promisify__(hostname: string): Promise;
+    }
+    /**
+     * Uses the DNS protocol to resolve all records (also known as `ANY` or `*` query).
+     * The `ret` argument passed to the `callback` function will be an array containing
+     * various types of records. Each object has a property `type` that indicates the
+     * type of the current record. And depending on the `type`, additional properties
+     * will be present on the object:
+     *
+     * 
+     *
+     * Here is an example of the `ret` object passed to the callback:
+     *
+     * ```js
+     * [ { type: 'A', address: '127.0.0.1', ttl: 299 },
+     *   { type: 'CNAME', value: 'example.com' },
+     *   { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 },
+     *   { type: 'NS', value: 'ns1.example.com' },
+     *   { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] },
+     *   { type: 'SOA',
+     *     nsname: 'ns1.example.com',
+     *     hostmaster: 'admin.example.com',
+     *     serial: 156696742,
+     *     refresh: 900,
+     *     retry: 900,
+     *     expire: 1800,
+     *     minttl: 60 } ]
+     * ```
+     *
+     * DNS server operators may choose not to respond to `ANY` queries. It may be better to call individual methods like {@link resolve4}, {@link resolveMx}, and so on. For more details, see
+     * [RFC 8482](https://tools.ietf.org/html/rfc8482).
+     */
+    export function resolveAny(
+        hostname: string,
+        callback: (err: NodeJS.ErrnoException | null, addresses: AnyRecord[]) => void,
+    ): void;
+    export namespace resolveAny {
+        function __promisify__(hostname: string): Promise;
+    }
+    /**
+     * Performs a reverse DNS query that resolves an IPv4 or IPv6 address to an
+     * array of host names.
+     *
+     * On error, `err` is an [`Error`](https://nodejs.org/docs/latest-v24.x/api/errors.html#class-error) object, where `err.code` is
+     * one of the [DNS error codes](https://nodejs.org/docs/latest-v24.x/api/dns.html#error-codes).
+     * @since v0.1.16
+     */
+    export function reverse(
+        ip: string,
+        callback: (err: NodeJS.ErrnoException | null, hostnames: string[]) => void,
+    ): void;
+    /**
+     * Get the default value for `order` in {@link lookup} and [`dnsPromises.lookup()`](https://nodejs.org/docs/latest-v24.x/api/dns.html#dnspromiseslookuphostname-options).
+     * The value could be:
+     *
+     * * `ipv4first`: for `order` defaulting to `ipv4first`.
+     * * `ipv6first`: for `order` defaulting to `ipv6first`.
+     * * `verbatim`: for `order` defaulting to `verbatim`.
+     * @since v18.17.0
+     */
+    export function getDefaultResultOrder(): "ipv4first" | "ipv6first" | "verbatim";
+    /**
+     * Sets the IP address and port of servers to be used when performing DNS
+     * resolution. The `servers` argument is an array of [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6) formatted
+     * addresses. If the port is the IANA default DNS port (53) it can be omitted.
+     *
+     * ```js
+     * dns.setServers([
+     *   '4.4.4.4',
+     *   '[2001:4860:4860::8888]',
+     *   '4.4.4.4:1053',
+     *   '[2001:4860:4860::8888]:1053',
+     * ]);
+     * ```
+     *
+     * An error will be thrown if an invalid address is provided.
+     *
+     * The `dns.setServers()` method must not be called while a DNS query is in
+     * progress.
+     *
+     * The {@link setServers} method affects only {@link resolve}, `dns.resolve*()` and {@link reverse} (and specifically _not_ {@link lookup}).
+     *
+     * This method works much like [resolve.conf](https://man7.org/linux/man-pages/man5/resolv.conf.5.html).
+     * That is, if attempting to resolve with the first server provided results in a `NOTFOUND` error, the `resolve()` method will _not_ attempt to resolve with
+     * subsequent servers provided. Fallback DNS servers will only be used if the
+     * earlier ones time out or result in some other error.
+     * @since v0.11.3
+     * @param servers array of [RFC 5952](https://datatracker.ietf.org/doc/html/rfc5952#section-6) formatted addresses
+     */
+    export function setServers(servers: readonly string[]): void;
+    /**
+     * Returns an array of IP address strings, formatted according to [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6),
+     * that are currently configured for DNS resolution. A string will include a port
+     * section if a custom port is used.
+     *
+     * ```js
+     * [
+     *   '4.4.4.4',
+     *   '2001:4860:4860::8888',
+     *   '4.4.4.4:1053',
+     *   '[2001:4860:4860::8888]:1053',
+     * ]
+     * ```
+     * @since v0.11.3
+     */
+    export function getServers(): string[];
+    /**
+     * Set the default value of `order` in {@link lookup} and [`dnsPromises.lookup()`](https://nodejs.org/docs/latest-v24.x/api/dns.html#dnspromiseslookuphostname-options).
+     * The value could be:
+     *
+     * * `ipv4first`: sets default `order` to `ipv4first`.
+     * * `ipv6first`: sets default `order` to `ipv6first`.
+     * * `verbatim`: sets default `order` to `verbatim`.
+     *
+     * The default is `verbatim` and {@link setDefaultResultOrder} have higher
+     * priority than [`--dns-result-order`](https://nodejs.org/docs/latest-v24.x/api/cli.html#--dns-result-orderorder). When using
+     * [worker threads](https://nodejs.org/docs/latest-v24.x/api/worker_threads.html), {@link setDefaultResultOrder} from the main
+     * thread won't affect the default dns orders in workers.
+     * @since v16.4.0, v14.18.0
+     * @param order must be `'ipv4first'`, `'ipv6first'` or `'verbatim'`.
+     */
+    export function setDefaultResultOrder(order: "ipv4first" | "ipv6first" | "verbatim"): void;
+    // Error codes
+    export const NODATA: "ENODATA";
+    export const FORMERR: "EFORMERR";
+    export const SERVFAIL: "ESERVFAIL";
+    export const NOTFOUND: "ENOTFOUND";
+    export const NOTIMP: "ENOTIMP";
+    export const REFUSED: "EREFUSED";
+    export const BADQUERY: "EBADQUERY";
+    export const BADNAME: "EBADNAME";
+    export const BADFAMILY: "EBADFAMILY";
+    export const BADRESP: "EBADRESP";
+    export const CONNREFUSED: "ECONNREFUSED";
+    export const TIMEOUT: "ETIMEOUT";
+    export const EOF: "EOF";
+    export const FILE: "EFILE";
+    export const NOMEM: "ENOMEM";
+    export const DESTRUCTION: "EDESTRUCTION";
+    export const BADSTR: "EBADSTR";
+    export const BADFLAGS: "EBADFLAGS";
+    export const NONAME: "ENONAME";
+    export const BADHINTS: "EBADHINTS";
+    export const NOTINITIALIZED: "ENOTINITIALIZED";
+    export const LOADIPHLPAPI: "ELOADIPHLPAPI";
+    export const ADDRGETNETWORKPARAMS: "EADDRGETNETWORKPARAMS";
+    export const CANCELLED: "ECANCELLED";
+    export interface ResolverOptions {
+        /**
+         * Query timeout in milliseconds, or `-1` to use the default timeout.
+         */
+        timeout?: number | undefined;
+        /**
+         * The number of tries the resolver will try contacting each name server before giving up.
+         * @default 4
+         */
+        tries?: number | undefined;
+        /**
+         * The max retry timeout, in milliseconds.
+         * @default 0
+         */
+        maxTimeout?: number | undefined;
+    }
+    /**
+     * An independent resolver for DNS requests.
+     *
+     * Creating a new resolver uses the default server settings. Setting
+     * the servers used for a resolver using [`resolver.setServers()`](https://nodejs.org/docs/latest-v24.x/api/dns.html#dnssetserversservers) does not affect
+     * other resolvers:
+     *
+     * ```js
+     * import { Resolver } from 'node:dns';
+     * const resolver = new Resolver();
+     * resolver.setServers(['4.4.4.4']);
+     *
+     * // This request will use the server at 4.4.4.4, independent of global settings.
+     * resolver.resolve4('example.org', (err, addresses) => {
+     *   // ...
+     * });
+     * ```
+     *
+     * The following methods from the `node:dns` module are available:
+     *
+     * * `resolver.getServers()`
+     * * `resolver.resolve()`
+     * * `resolver.resolve4()`
+     * * `resolver.resolve6()`
+     * * `resolver.resolveAny()`
+     * * `resolver.resolveCaa()`
+     * * `resolver.resolveCname()`
+     * * `resolver.resolveMx()`
+     * * `resolver.resolveNaptr()`
+     * * `resolver.resolveNs()`
+     * * `resolver.resolvePtr()`
+     * * `resolver.resolveSoa()`
+     * * `resolver.resolveSrv()`
+     * * `resolver.resolveTxt()`
+     * * `resolver.reverse()`
+     * * `resolver.setServers()`
+     * @since v8.3.0
+     */
+    export class Resolver {
+        constructor(options?: ResolverOptions);
+        /**
+         * Cancel all outstanding DNS queries made by this resolver. The corresponding
+         * callbacks will be called with an error with code `ECANCELLED`.
+         * @since v8.3.0
+         */
+        cancel(): void;
+        getServers: typeof getServers;
+        resolve: typeof resolve;
+        resolve4: typeof resolve4;
+        resolve6: typeof resolve6;
+        resolveAny: typeof resolveAny;
+        resolveCaa: typeof resolveCaa;
+        resolveCname: typeof resolveCname;
+        resolveMx: typeof resolveMx;
+        resolveNaptr: typeof resolveNaptr;
+        resolveNs: typeof resolveNs;
+        resolvePtr: typeof resolvePtr;
+        resolveSoa: typeof resolveSoa;
+        resolveSrv: typeof resolveSrv;
+        resolveTlsa: typeof resolveTlsa;
+        resolveTxt: typeof resolveTxt;
+        reverse: typeof reverse;
+        /**
+         * The resolver instance will send its requests from the specified IP address.
+         * This allows programs to specify outbound interfaces when used on multi-homed
+         * systems.
+         *
+         * If a v4 or v6 address is not specified, it is set to the default and the
+         * operating system will choose a local address automatically.
+         *
+         * The resolver will use the v4 local address when making requests to IPv4 DNS
+         * servers, and the v6 local address when making requests to IPv6 DNS servers.
+         * The `rrtype` of resolution requests has no impact on the local address used.
+         * @since v15.1.0, v14.17.0
+         * @param [ipv4='0.0.0.0'] A string representation of an IPv4 address.
+         * @param [ipv6='::0'] A string representation of an IPv6 address.
+         */
+        setLocalAddress(ipv4?: string, ipv6?: string): void;
+        setServers: typeof setServers;
+    }
+    export { dnsPromises as promises };
+}
+declare module "node:dns" {
+    export * from "dns";
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/dns/promises.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/dns/promises.d.ts
new file mode 100644
index 00000000..efb9fbfd
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/dns/promises.d.ts
@@ -0,0 +1,503 @@
+/**
+ * The `dns.promises` API provides an alternative set of asynchronous DNS methods
+ * that return `Promise` objects rather than using callbacks. The API is accessible
+ * via `import { promises as dnsPromises } from 'node:dns'` or `import dnsPromises from 'node:dns/promises'`.
+ * @since v10.6.0
+ */
+declare module "dns/promises" {
+    import {
+        AnyRecord,
+        CaaRecord,
+        LookupAddress,
+        LookupAllOptions,
+        LookupOneOptions,
+        LookupOptions,
+        MxRecord,
+        NaptrRecord,
+        RecordWithTtl,
+        ResolveOptions,
+        ResolverOptions,
+        ResolveWithTtlOptions,
+        SoaRecord,
+        SrvRecord,
+        TlsaRecord,
+    } from "node:dns";
+    /**
+     * Returns an array of IP address strings, formatted according to [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6),
+     * that are currently configured for DNS resolution. A string will include a port
+     * section if a custom port is used.
+     *
+     * ```js
+     * [
+     *   '4.4.4.4',
+     *   '2001:4860:4860::8888',
+     *   '4.4.4.4:1053',
+     *   '[2001:4860:4860::8888]:1053',
+     * ]
+     * ```
+     * @since v10.6.0
+     */
+    function getServers(): string[];
+    /**
+     * Resolves a host name (e.g. `'nodejs.org'`) into the first found A (IPv4) or
+     * AAAA (IPv6) record. All `option` properties are optional. If `options` is an
+     * integer, then it must be `4` or `6` – if `options` is not provided, then IPv4
+     * and IPv6 addresses are both returned if found.
+     *
+     * With the `all` option set to `true`, the `Promise` is resolved with `addresses` being an array of objects with the properties `address` and `family`.
+     *
+     * On error, the `Promise` is rejected with an [`Error`](https://nodejs.org/docs/latest-v20.x/api/errors.html#class-error) object, where `err.code` is the error code.
+     * Keep in mind that `err.code` will be set to `'ENOTFOUND'` not only when
+     * the host name does not exist but also when the lookup fails in other ways
+     * such as no available file descriptors.
+     *
+     * [`dnsPromises.lookup()`](https://nodejs.org/docs/latest-v20.x/api/dns.html#dnspromiseslookuphostname-options) does not necessarily have anything to do with the DNS
+     * protocol. The implementation uses an operating system facility that can
+     * associate names with addresses and vice versa. This implementation can have
+     * subtle but important consequences on the behavior of any Node.js program. Please
+     * take some time to consult the [Implementation considerations section](https://nodejs.org/docs/latest-v20.x/api/dns.html#implementation-considerations) before
+     * using `dnsPromises.lookup()`.
+     *
+     * Example usage:
+     *
+     * ```js
+     * import dns from 'node:dns';
+     * const dnsPromises = dns.promises;
+     * const options = {
+     *   family: 6,
+     *   hints: dns.ADDRCONFIG | dns.V4MAPPED,
+     * };
+     *
+     * dnsPromises.lookup('example.com', options).then((result) => {
+     *   console.log('address: %j family: IPv%s', result.address, result.family);
+     *   // address: "2606:2800:220:1:248:1893:25c8:1946" family: IPv6
+     * });
+     *
+     * // When options.all is true, the result will be an Array.
+     * options.all = true;
+     * dnsPromises.lookup('example.com', options).then((result) => {
+     *   console.log('addresses: %j', result);
+     *   // addresses: [{"address":"2606:2800:220:1:248:1893:25c8:1946","family":6}]
+     * });
+     * ```
+     * @since v10.6.0
+     */
+    function lookup(hostname: string, family: number): Promise;
+    function lookup(hostname: string, options: LookupOneOptions): Promise;
+    function lookup(hostname: string, options: LookupAllOptions): Promise;
+    function lookup(hostname: string, options: LookupOptions): Promise;
+    function lookup(hostname: string): Promise;
+    /**
+     * Resolves the given `address` and `port` into a host name and service using
+     * the operating system's underlying `getnameinfo` implementation.
+     *
+     * If `address` is not a valid IP address, a `TypeError` will be thrown.
+     * The `port` will be coerced to a number. If it is not a legal port, a `TypeError` will be thrown.
+     *
+     * On error, the `Promise` is rejected with an [`Error`](https://nodejs.org/docs/latest-v20.x/api/errors.html#class-error) object, where `err.code` is the error code.
+     *
+     * ```js
+     * import dnsPromises from 'node:dns';
+     * dnsPromises.lookupService('127.0.0.1', 22).then((result) => {
+     *   console.log(result.hostname, result.service);
+     *   // Prints: localhost ssh
+     * });
+     * ```
+     * @since v10.6.0
+     */
+    function lookupService(
+        address: string,
+        port: number,
+    ): Promise<{
+        hostname: string;
+        service: string;
+    }>;
+    /**
+     * Uses the DNS protocol to resolve a host name (e.g. `'nodejs.org'`) into an array
+     * of the resource records. When successful, the `Promise` is resolved with an
+     * array of resource records. The type and structure of individual results vary
+     * based on `rrtype`:
+     *
+     * 
+     *
+     * On error, the `Promise` is rejected with an [`Error`](https://nodejs.org/docs/latest-v20.x/api/errors.html#class-error) object, where `err.code`
+     * is one of the [DNS error codes](https://nodejs.org/docs/latest-v20.x/api/dns.html#error-codes).
+     * @since v10.6.0
+     * @param hostname Host name to resolve.
+     * @param [rrtype='A'] Resource record type.
+     */
+    function resolve(hostname: string): Promise;
+    function resolve(hostname: string, rrtype: "A" | "AAAA" | "CNAME" | "NS" | "PTR"): Promise;
+    function resolve(hostname: string, rrtype: "ANY"): Promise;
+    function resolve(hostname: string, rrtype: "CAA"): Promise;
+    function resolve(hostname: string, rrtype: "MX"): Promise;
+    function resolve(hostname: string, rrtype: "NAPTR"): Promise;
+    function resolve(hostname: string, rrtype: "SOA"): Promise;
+    function resolve(hostname: string, rrtype: "SRV"): Promise;
+    function resolve(hostname: string, rrtype: "TLSA"): Promise;
+    function resolve(hostname: string, rrtype: "TXT"): Promise;
+    function resolve(hostname: string, rrtype: string): Promise<
+        | string[]
+        | CaaRecord[]
+        | MxRecord[]
+        | NaptrRecord[]
+        | SoaRecord
+        | SrvRecord[]
+        | TlsaRecord[]
+        | string[][]
+        | AnyRecord[]
+    >;
+    /**
+     * Uses the DNS protocol to resolve IPv4 addresses (`A` records) for the `hostname`. On success, the `Promise` is resolved with an array of IPv4
+     * addresses (e.g. `['74.125.79.104', '74.125.79.105', '74.125.79.106']`).
+     * @since v10.6.0
+     * @param hostname Host name to resolve.
+     */
+    function resolve4(hostname: string): Promise;
+    function resolve4(hostname: string, options: ResolveWithTtlOptions): Promise;
+    function resolve4(hostname: string, options: ResolveOptions): Promise;
+    /**
+     * Uses the DNS protocol to resolve IPv6 addresses (`AAAA` records) for the `hostname`. On success, the `Promise` is resolved with an array of IPv6
+     * addresses.
+     * @since v10.6.0
+     * @param hostname Host name to resolve.
+     */
+    function resolve6(hostname: string): Promise;
+    function resolve6(hostname: string, options: ResolveWithTtlOptions): Promise;
+    function resolve6(hostname: string, options: ResolveOptions): Promise;
+    /**
+     * Uses the DNS protocol to resolve all records (also known as `ANY` or `*` query).
+     * On success, the `Promise` is resolved with an array containing various types of
+     * records. Each object has a property `type` that indicates the type of the
+     * current record. And depending on the `type`, additional properties will be
+     * present on the object:
+     *
+     * 
+     *
+     * Here is an example of the result object:
+     *
+     * ```js
+     * [ { type: 'A', address: '127.0.0.1', ttl: 299 },
+     *   { type: 'CNAME', value: 'example.com' },
+     *   { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 },
+     *   { type: 'NS', value: 'ns1.example.com' },
+     *   { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] },
+     *   { type: 'SOA',
+     *     nsname: 'ns1.example.com',
+     *     hostmaster: 'admin.example.com',
+     *     serial: 156696742,
+     *     refresh: 900,
+     *     retry: 900,
+     *     expire: 1800,
+     *     minttl: 60 } ]
+     * ```
+     * @since v10.6.0
+     */
+    function resolveAny(hostname: string): Promise;
+    /**
+     * Uses the DNS protocol to resolve `CAA` records for the `hostname`. On success,
+     * the `Promise` is resolved with an array of objects containing available
+     * certification authority authorization records available for the `hostname` (e.g. `[{critical: 0, iodef: 'mailto:pki@example.com'},{critical: 128, issue: 'pki.example.com'}]`).
+     * @since v15.0.0, v14.17.0
+     */
+    function resolveCaa(hostname: string): Promise;
+    /**
+     * Uses the DNS protocol to resolve `CNAME` records for the `hostname`. On success,
+     * the `Promise` is resolved with an array of canonical name records available for
+     * the `hostname` (e.g. `['bar.example.com']`).
+     * @since v10.6.0
+     */
+    function resolveCname(hostname: string): Promise;
+    /**
+     * Uses the DNS protocol to resolve mail exchange records (`MX` records) for the `hostname`. On success, the `Promise` is resolved with an array of objects
+     * containing both a `priority` and `exchange` property (e.g.`[{priority: 10, exchange: 'mx.example.com'}, ...]`).
+     * @since v10.6.0
+     */
+    function resolveMx(hostname: string): Promise;
+    /**
+     * Uses the DNS protocol to resolve regular expression-based records (`NAPTR` records) for the `hostname`. On success, the `Promise` is resolved with an array
+     * of objects with the following properties:
+     *
+     * * `flags`
+     * * `service`
+     * * `regexp`
+     * * `replacement`
+     * * `order`
+     * * `preference`
+     *
+     * ```js
+     * {
+     *   flags: 's',
+     *   service: 'SIP+D2U',
+     *   regexp: '',
+     *   replacement: '_sip._udp.example.com',
+     *   order: 30,
+     *   preference: 100
+     * }
+     * ```
+     * @since v10.6.0
+     */
+    function resolveNaptr(hostname: string): Promise;
+    /**
+     * Uses the DNS protocol to resolve name server records (`NS` records) for the `hostname`. On success, the `Promise` is resolved with an array of name server
+     * records available for `hostname` (e.g.`['ns1.example.com', 'ns2.example.com']`).
+     * @since v10.6.0
+     */
+    function resolveNs(hostname: string): Promise;
+    /**
+     * Uses the DNS protocol to resolve pointer records (`PTR` records) for the `hostname`. On success, the `Promise` is resolved with an array of strings
+     * containing the reply records.
+     * @since v10.6.0
+     */
+    function resolvePtr(hostname: string): Promise;
+    /**
+     * Uses the DNS protocol to resolve a start of authority record (`SOA` record) for
+     * the `hostname`. On success, the `Promise` is resolved with an object with the
+     * following properties:
+     *
+     * * `nsname`
+     * * `hostmaster`
+     * * `serial`
+     * * `refresh`
+     * * `retry`
+     * * `expire`
+     * * `minttl`
+     *
+     * ```js
+     * {
+     *   nsname: 'ns.example.com',
+     *   hostmaster: 'root.example.com',
+     *   serial: 2013101809,
+     *   refresh: 10000,
+     *   retry: 2400,
+     *   expire: 604800,
+     *   minttl: 3600
+     * }
+     * ```
+     * @since v10.6.0
+     */
+    function resolveSoa(hostname: string): Promise;
+    /**
+     * Uses the DNS protocol to resolve service records (`SRV` records) for the `hostname`. On success, the `Promise` is resolved with an array of objects with
+     * the following properties:
+     *
+     * * `priority`
+     * * `weight`
+     * * `port`
+     * * `name`
+     *
+     * ```js
+     * {
+     *   priority: 10,
+     *   weight: 5,
+     *   port: 21223,
+     *   name: 'service.example.com'
+     * }
+     * ```
+     * @since v10.6.0
+     */
+    function resolveSrv(hostname: string): Promise;
+    /**
+     * Uses the DNS protocol to resolve certificate associations (`TLSA` records) for
+     * the `hostname`. On success, the `Promise` is resolved with an array of objectsAdd commentMore actions
+     * with these properties:
+     *
+     * * `certUsage`
+     * * `selector`
+     * * `match`
+     * * `data`
+     *
+     * ```js
+     * {
+     *   certUsage: 3,
+     *   selector: 1,
+     *   match: 1,
+     *   data: [ArrayBuffer]
+     * }
+     * ```
+     * @since v23.9.0, v22.15.0
+     */
+    function resolveTlsa(hostname: string): Promise;
+    /**
+     * Uses the DNS protocol to resolve text queries (`TXT` records) for the `hostname`. On success, the `Promise` is resolved with a two-dimensional array
+     * of the text records available for `hostname` (e.g.`[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]`). Each sub-array contains TXT chunks of
+     * one record. Depending on the use case, these could be either joined together or
+     * treated separately.
+     * @since v10.6.0
+     */
+    function resolveTxt(hostname: string): Promise;
+    /**
+     * Performs a reverse DNS query that resolves an IPv4 or IPv6 address to an
+     * array of host names.
+     *
+     * On error, the `Promise` is rejected with an [`Error`](https://nodejs.org/docs/latest-v20.x/api/errors.html#class-error) object, where `err.code`
+     * is one of the [DNS error codes](https://nodejs.org/docs/latest-v20.x/api/dns.html#error-codes).
+     * @since v10.6.0
+     */
+    function reverse(ip: string): Promise;
+    /**
+     * Get the default value for `verbatim` in {@link lookup} and [dnsPromises.lookup()](https://nodejs.org/docs/latest-v20.x/api/dns.html#dnspromiseslookuphostname-options).
+     * The value could be:
+     *
+     * * `ipv4first`: for `verbatim` defaulting to `false`.
+     * * `verbatim`: for `verbatim` defaulting to `true`.
+     * @since v20.1.0
+     */
+    function getDefaultResultOrder(): "ipv4first" | "verbatim";
+    /**
+     * Sets the IP address and port of servers to be used when performing DNS
+     * resolution. The `servers` argument is an array of [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6) formatted
+     * addresses. If the port is the IANA default DNS port (53) it can be omitted.
+     *
+     * ```js
+     * dnsPromises.setServers([
+     *   '4.4.4.4',
+     *   '[2001:4860:4860::8888]',
+     *   '4.4.4.4:1053',
+     *   '[2001:4860:4860::8888]:1053',
+     * ]);
+     * ```
+     *
+     * An error will be thrown if an invalid address is provided.
+     *
+     * The `dnsPromises.setServers()` method must not be called while a DNS query is in
+     * progress.
+     *
+     * This method works much like [resolve.conf](https://man7.org/linux/man-pages/man5/resolv.conf.5.html).
+     * That is, if attempting to resolve with the first server provided results in a `NOTFOUND` error, the `resolve()` method will _not_ attempt to resolve with
+     * subsequent servers provided. Fallback DNS servers will only be used if the
+     * earlier ones time out or result in some other error.
+     * @since v10.6.0
+     * @param servers array of `RFC 5952` formatted addresses
+     */
+    function setServers(servers: readonly string[]): void;
+    /**
+     * Set the default value of `order` in `dns.lookup()` and `{@link lookup}`. The value could be:
+     *
+     * * `ipv4first`: sets default `order` to `ipv4first`.
+     * * `ipv6first`: sets default `order` to `ipv6first`.
+     * * `verbatim`: sets default `order` to `verbatim`.
+     *
+     * The default is `verbatim` and [dnsPromises.setDefaultResultOrder()](https://nodejs.org/docs/latest-v20.x/api/dns.html#dnspromisessetdefaultresultorderorder)
+     * have higher priority than [`--dns-result-order`](https://nodejs.org/docs/latest-v20.x/api/cli.html#--dns-result-orderorder).
+     * When using [worker threads](https://nodejs.org/docs/latest-v20.x/api/worker_threads.html), [`dnsPromises.setDefaultResultOrder()`](https://nodejs.org/docs/latest-v20.x/api/dns.html#dnspromisessetdefaultresultorderorder)
+     * from the main thread won't affect the default dns orders in workers.
+     * @since v16.4.0, v14.18.0
+     * @param order must be `'ipv4first'`, `'ipv6first'` or `'verbatim'`.
+     */
+    function setDefaultResultOrder(order: "ipv4first" | "ipv6first" | "verbatim"): void;
+    // Error codes
+    const NODATA: "ENODATA";
+    const FORMERR: "EFORMERR";
+    const SERVFAIL: "ESERVFAIL";
+    const NOTFOUND: "ENOTFOUND";
+    const NOTIMP: "ENOTIMP";
+    const REFUSED: "EREFUSED";
+    const BADQUERY: "EBADQUERY";
+    const BADNAME: "EBADNAME";
+    const BADFAMILY: "EBADFAMILY";
+    const BADRESP: "EBADRESP";
+    const CONNREFUSED: "ECONNREFUSED";
+    const TIMEOUT: "ETIMEOUT";
+    const EOF: "EOF";
+    const FILE: "EFILE";
+    const NOMEM: "ENOMEM";
+    const DESTRUCTION: "EDESTRUCTION";
+    const BADSTR: "EBADSTR";
+    const BADFLAGS: "EBADFLAGS";
+    const NONAME: "ENONAME";
+    const BADHINTS: "EBADHINTS";
+    const NOTINITIALIZED: "ENOTINITIALIZED";
+    const LOADIPHLPAPI: "ELOADIPHLPAPI";
+    const ADDRGETNETWORKPARAMS: "EADDRGETNETWORKPARAMS";
+    const CANCELLED: "ECANCELLED";
+
+    /**
+     * An independent resolver for DNS requests.
+     *
+     * Creating a new resolver uses the default server settings. Setting
+     * the servers used for a resolver using [`resolver.setServers()`](https://nodejs.org/docs/latest-v20.x/api/dns.html#dnspromisessetserversservers) does not affect
+     * other resolvers:
+     *
+     * ```js
+     * import { promises } from 'node:dns';
+     * const resolver = new promises.Resolver();
+     * resolver.setServers(['4.4.4.4']);
+     *
+     * // This request will use the server at 4.4.4.4, independent of global settings.
+     * resolver.resolve4('example.org').then((addresses) => {
+     *   // ...
+     * });
+     *
+     * // Alternatively, the same code can be written using async-await style.
+     * (async function() {
+     *   const addresses = await resolver.resolve4('example.org');
+     * })();
+     * ```
+     *
+     * The following methods from the `dnsPromises` API are available:
+     *
+     * * `resolver.getServers()`
+     * * `resolver.resolve()`
+     * * `resolver.resolve4()`
+     * * `resolver.resolve6()`
+     * * `resolver.resolveAny()`
+     * * `resolver.resolveCaa()`
+     * * `resolver.resolveCname()`
+     * * `resolver.resolveMx()`
+     * * `resolver.resolveNaptr()`
+     * * `resolver.resolveNs()`
+     * * `resolver.resolvePtr()`
+     * * `resolver.resolveSoa()`
+     * * `resolver.resolveSrv()`
+     * * `resolver.resolveTxt()`
+     * * `resolver.reverse()`
+     * * `resolver.setServers()`
+     * @since v10.6.0
+     */
+    class Resolver {
+        constructor(options?: ResolverOptions);
+        /**
+         * Cancel all outstanding DNS queries made by this resolver. The corresponding
+         * callbacks will be called with an error with code `ECANCELLED`.
+         * @since v8.3.0
+         */
+        cancel(): void;
+        getServers: typeof getServers;
+        resolve: typeof resolve;
+        resolve4: typeof resolve4;
+        resolve6: typeof resolve6;
+        resolveAny: typeof resolveAny;
+        resolveCaa: typeof resolveCaa;
+        resolveCname: typeof resolveCname;
+        resolveMx: typeof resolveMx;
+        resolveNaptr: typeof resolveNaptr;
+        resolveNs: typeof resolveNs;
+        resolvePtr: typeof resolvePtr;
+        resolveSoa: typeof resolveSoa;
+        resolveSrv: typeof resolveSrv;
+        resolveTlsa: typeof resolveTlsa;
+        resolveTxt: typeof resolveTxt;
+        reverse: typeof reverse;
+        /**
+         * The resolver instance will send its requests from the specified IP address.
+         * This allows programs to specify outbound interfaces when used on multi-homed
+         * systems.
+         *
+         * If a v4 or v6 address is not specified, it is set to the default and the
+         * operating system will choose a local address automatically.
+         *
+         * The resolver will use the v4 local address when making requests to IPv4 DNS
+         * servers, and the v6 local address when making requests to IPv6 DNS servers.
+         * The `rrtype` of resolution requests has no impact on the local address used.
+         * @since v15.1.0, v14.17.0
+         * @param [ipv4='0.0.0.0'] A string representation of an IPv4 address.
+         * @param [ipv6='::0'] A string representation of an IPv6 address.
+         */
+        setLocalAddress(ipv4?: string, ipv6?: string): void;
+        setServers: typeof setServers;
+    }
+}
+declare module "node:dns/promises" {
+    export * from "dns/promises";
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/domain.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/domain.d.ts
new file mode 100644
index 00000000..4c641153
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/domain.d.ts
@@ -0,0 +1,170 @@
+/**
+ * **This module is pending deprecation.** Once a replacement API has been
+ * finalized, this module will be fully deprecated. Most developers should
+ * **not** have cause to use this module. Users who absolutely must have
+ * the functionality that domains provide may rely on it for the time being
+ * but should expect to have to migrate to a different solution
+ * in the future.
+ *
+ * Domains provide a way to handle multiple different IO operations as a
+ * single group. If any of the event emitters or callbacks registered to a
+ * domain emit an `'error'` event, or throw an error, then the domain object
+ * will be notified, rather than losing the context of the error in the `process.on('uncaughtException')` handler, or causing the program to
+ * exit immediately with an error code.
+ * @deprecated Since v1.4.2 - Deprecated
+ * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/domain.js)
+ */
+declare module "domain" {
+    import EventEmitter = require("node:events");
+    /**
+     * The `Domain` class encapsulates the functionality of routing errors and
+     * uncaught exceptions to the active `Domain` object.
+     *
+     * To handle the errors that it catches, listen to its `'error'` event.
+     */
+    class Domain extends EventEmitter {
+        /**
+         * An array of timers and event emitters that have been explicitly added
+         * to the domain.
+         */
+        members: Array;
+        /**
+         * The `enter()` method is plumbing used by the `run()`, `bind()`, and `intercept()` methods to set the active domain. It sets `domain.active` and `process.domain` to the domain, and implicitly
+         * pushes the domain onto the domain
+         * stack managed by the domain module (see {@link exit} for details on the
+         * domain stack). The call to `enter()` delimits the beginning of a chain of
+         * asynchronous calls and I/O operations bound to a domain.
+         *
+         * Calling `enter()` changes only the active domain, and does not alter the domain
+         * itself. `enter()` and `exit()` can be called an arbitrary number of times on a
+         * single domain.
+         */
+        enter(): void;
+        /**
+         * The `exit()` method exits the current domain, popping it off the domain stack.
+         * Any time execution is going to switch to the context of a different chain of
+         * asynchronous calls, it's important to ensure that the current domain is exited.
+         * The call to `exit()` delimits either the end of or an interruption to the chain
+         * of asynchronous calls and I/O operations bound to a domain.
+         *
+         * If there are multiple, nested domains bound to the current execution context, `exit()` will exit any domains nested within this domain.
+         *
+         * Calling `exit()` changes only the active domain, and does not alter the domain
+         * itself. `enter()` and `exit()` can be called an arbitrary number of times on a
+         * single domain.
+         */
+        exit(): void;
+        /**
+         * Run the supplied function in the context of the domain, implicitly
+         * binding all event emitters, timers, and low-level requests that are
+         * created in that context. Optionally, arguments can be passed to
+         * the function.
+         *
+         * This is the most basic way to use a domain.
+         *
+         * ```js
+         * import domain from 'node:domain';
+         * import fs from 'node:fs';
+         * const d = domain.create();
+         * d.on('error', (er) => {
+         *   console.error('Caught error!', er);
+         * });
+         * d.run(() => {
+         *   process.nextTick(() => {
+         *     setTimeout(() => { // Simulating some various async stuff
+         *       fs.open('non-existent file', 'r', (er, fd) => {
+         *         if (er) throw er;
+         *         // proceed...
+         *       });
+         *     }, 100);
+         *   });
+         * });
+         * ```
+         *
+         * In this example, the `d.on('error')` handler will be triggered, rather
+         * than crashing the program.
+         */
+        run(fn: (...args: any[]) => T, ...args: any[]): T;
+        /**
+         * Explicitly adds an emitter to the domain. If any event handlers called by
+         * the emitter throw an error, or if the emitter emits an `'error'` event, it
+         * will be routed to the domain's `'error'` event, just like with implicit
+         * binding.
+         *
+         * This also works with timers that are returned from `setInterval()` and `setTimeout()`. If their callback function throws, it will be caught by
+         * the domain `'error'` handler.
+         *
+         * If the Timer or `EventEmitter` was already bound to a domain, it is removed
+         * from that one, and bound to this one instead.
+         * @param emitter emitter or timer to be added to the domain
+         */
+        add(emitter: EventEmitter | NodeJS.Timer): void;
+        /**
+         * The opposite of {@link add}. Removes domain handling from the
+         * specified emitter.
+         * @param emitter emitter or timer to be removed from the domain
+         */
+        remove(emitter: EventEmitter | NodeJS.Timer): void;
+        /**
+         * The returned function will be a wrapper around the supplied callback
+         * function. When the returned function is called, any errors that are
+         * thrown will be routed to the domain's `'error'` event.
+         *
+         * ```js
+         * const d = domain.create();
+         *
+         * function readSomeFile(filename, cb) {
+         *   fs.readFile(filename, 'utf8', d.bind((er, data) => {
+         *     // If this throws, it will also be passed to the domain.
+         *     return cb(er, data ? JSON.parse(data) : null);
+         *   }));
+         * }
+         *
+         * d.on('error', (er) => {
+         *   // An error occurred somewhere. If we throw it now, it will crash the program
+         *   // with the normal line number and stack message.
+         * });
+         * ```
+         * @param callback The callback function
+         * @return The bound function
+         */
+        bind(callback: T): T;
+        /**
+         * This method is almost identical to {@link bind}. However, in
+         * addition to catching thrown errors, it will also intercept `Error` objects sent as the first argument to the function.
+         *
+         * In this way, the common `if (err) return callback(err);` pattern can be replaced
+         * with a single error handler in a single place.
+         *
+         * ```js
+         * const d = domain.create();
+         *
+         * function readSomeFile(filename, cb) {
+         *   fs.readFile(filename, 'utf8', d.intercept((data) => {
+         *     // Note, the first argument is never passed to the
+         *     // callback since it is assumed to be the 'Error' argument
+         *     // and thus intercepted by the domain.
+         *
+         *     // If this throws, it will also be passed to the domain
+         *     // so the error-handling logic can be moved to the 'error'
+         *     // event on the domain instead of being repeated throughout
+         *     // the program.
+         *     return cb(null, JSON.parse(data));
+         *   }));
+         * }
+         *
+         * d.on('error', (er) => {
+         *   // An error occurred somewhere. If we throw it now, it will crash the program
+         *   // with the normal line number and stack message.
+         * });
+         * ```
+         * @param callback The callback function
+         * @return The intercepted function
+         */
+        intercept(callback: T): T;
+    }
+    function create(): Domain;
+}
+declare module "node:domain" {
+    export * from "domain";
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/events.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/events.d.ts
new file mode 100644
index 00000000..023348e0
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/events.d.ts
@@ -0,0 +1,976 @@
+/**
+ * Much of the Node.js core API is built around an idiomatic asynchronous
+ * event-driven architecture in which certain kinds of objects (called "emitters")
+ * emit named events that cause `Function` objects ("listeners") to be called.
+ *
+ * For instance: a `net.Server` object emits an event each time a peer
+ * connects to it; a `fs.ReadStream` emits an event when the file is opened;
+ * a `stream` emits an event whenever data is available to be read.
+ *
+ * All objects that emit events are instances of the `EventEmitter` class. These
+ * objects expose an `eventEmitter.on()` function that allows one or more
+ * functions to be attached to named events emitted by the object. Typically,
+ * event names are camel-cased strings but any valid JavaScript property key
+ * can be used.
+ *
+ * When the `EventEmitter` object emits an event, all of the functions attached
+ * to that specific event are called _synchronously_. Any values returned by the
+ * called listeners are _ignored_ and discarded.
+ *
+ * The following example shows a simple `EventEmitter` instance with a single
+ * listener. The `eventEmitter.on()` method is used to register listeners, while
+ * the `eventEmitter.emit()` method is used to trigger the event.
+ *
+ * ```js
+ * import { EventEmitter } from 'node:events';
+ *
+ * class MyEmitter extends EventEmitter {}
+ *
+ * const myEmitter = new MyEmitter();
+ * myEmitter.on('event', () => {
+ *   console.log('an event occurred!');
+ * });
+ * myEmitter.emit('event');
+ * ```
+ * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/events.js)
+ */
+declare module "events" {
+    import { AsyncResource, AsyncResourceOptions } from "node:async_hooks";
+    interface EventEmitterOptions {
+        /**
+         * Enables automatic capturing of promise rejection.
+         */
+        captureRejections?: boolean | undefined;
+    }
+    interface StaticEventEmitterOptions {
+        /**
+         * Can be used to cancel awaiting events.
+         */
+        signal?: AbortSignal | undefined;
+    }
+    interface StaticEventEmitterIteratorOptions extends StaticEventEmitterOptions {
+        /**
+         * Names of events that will end the iteration.
+         */
+        close?: string[] | undefined;
+        /**
+         * The high watermark. The emitter is paused every time the size of events being buffered is higher than it.
+         * Supported only on emitters implementing `pause()` and `resume()` methods.
+         * @default Number.MAX_SAFE_INTEGER
+         */
+        highWaterMark?: number | undefined;
+        /**
+         * The low watermark. The emitter is resumed every time the size of events being buffered is lower than it.
+         * Supported only on emitters implementing `pause()` and `resume()` methods.
+         * @default 1
+         */
+        lowWaterMark?: number | undefined;
+    }
+    interface EventEmitter = DefaultEventMap> extends NodeJS.EventEmitter {}
+    type EventMap = Record | DefaultEventMap;
+    type DefaultEventMap = [never];
+    type AnyRest = [...args: any[]];
+    type Args = T extends DefaultEventMap ? AnyRest : (
+        K extends keyof T ? T[K] : never
+    );
+    type Key = T extends DefaultEventMap ? string | symbol : K | keyof T;
+    type Key2 = T extends DefaultEventMap ? string | symbol : K & keyof T;
+    type Listener = T extends DefaultEventMap ? F : (
+        K extends keyof T ? (
+                T[K] extends unknown[] ? (...args: T[K]) => void : never
+            )
+            : never
+    );
+    type Listener1 = Listener void>;
+    type Listener2 = Listener;
+
+    /**
+     * The `EventEmitter` class is defined and exposed by the `node:events` module:
+     *
+     * ```js
+     * import { EventEmitter } from 'node:events';
+     * ```
+     *
+     * All `EventEmitter`s emit the event `'newListener'` when new listeners are
+     * added and `'removeListener'` when existing listeners are removed.
+     *
+     * It supports the following option:
+     * @since v0.1.26
+     */
+    class EventEmitter = DefaultEventMap> {
+        constructor(options?: EventEmitterOptions);
+
+        [EventEmitter.captureRejectionSymbol]?(error: Error, event: Key, ...args: Args): void;
+
+        /**
+         * Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given
+         * event or that is rejected if the `EventEmitter` emits `'error'` while waiting.
+         * The `Promise` will resolve with an array of all the arguments emitted to the
+         * given event.
+         *
+         * This method is intentionally generic and works with the web platform [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) interface, which has no special`'error'` event
+         * semantics and does not listen to the `'error'` event.
+         *
+         * ```js
+         * import { once, EventEmitter } from 'node:events';
+         * import process from 'node:process';
+         *
+         * const ee = new EventEmitter();
+         *
+         * process.nextTick(() => {
+         *   ee.emit('myevent', 42);
+         * });
+         *
+         * const [value] = await once(ee, 'myevent');
+         * console.log(value);
+         *
+         * const err = new Error('kaboom');
+         * process.nextTick(() => {
+         *   ee.emit('error', err);
+         * });
+         *
+         * try {
+         *   await once(ee, 'myevent');
+         * } catch (err) {
+         *   console.error('error happened', err);
+         * }
+         * ```
+         *
+         * The special handling of the `'error'` event is only used when `events.once()` is used to wait for another event. If `events.once()` is used to wait for the
+         * '`error'` event itself, then it is treated as any other kind of event without
+         * special handling:
+         *
+         * ```js
+         * import { EventEmitter, once } from 'node:events';
+         *
+         * const ee = new EventEmitter();
+         *
+         * once(ee, 'error')
+         *   .then(([err]) => console.log('ok', err.message))
+         *   .catch((err) => console.error('error', err.message));
+         *
+         * ee.emit('error', new Error('boom'));
+         *
+         * // Prints: ok boom
+         * ```
+         *
+         * An `AbortSignal` can be used to cancel waiting for the event:
+         *
+         * ```js
+         * import { EventEmitter, once } from 'node:events';
+         *
+         * const ee = new EventEmitter();
+         * const ac = new AbortController();
+         *
+         * async function foo(emitter, event, signal) {
+         *   try {
+         *     await once(emitter, event, { signal });
+         *     console.log('event emitted!');
+         *   } catch (error) {
+         *     if (error.name === 'AbortError') {
+         *       console.error('Waiting for the event was canceled!');
+         *     } else {
+         *       console.error('There was an error', error.message);
+         *     }
+         *   }
+         * }
+         *
+         * foo(ee, 'foo', ac.signal);
+         * ac.abort(); // Abort waiting for the event
+         * ee.emit('foo'); // Prints: Waiting for the event was canceled!
+         * ```
+         * @since v11.13.0, v10.16.0
+         */
+        static once(
+            emitter: NodeJS.EventEmitter,
+            eventName: string | symbol,
+            options?: StaticEventEmitterOptions,
+        ): Promise;
+        static once(emitter: EventTarget, eventName: string, options?: StaticEventEmitterOptions): Promise;
+        /**
+         * ```js
+         * import { on, EventEmitter } from 'node:events';
+         * import process from 'node:process';
+         *
+         * const ee = new EventEmitter();
+         *
+         * // Emit later on
+         * process.nextTick(() => {
+         *   ee.emit('foo', 'bar');
+         *   ee.emit('foo', 42);
+         * });
+         *
+         * for await (const event of on(ee, 'foo')) {
+         *   // The execution of this inner block is synchronous and it
+         *   // processes one event at a time (even with await). Do not use
+         *   // if concurrent execution is required.
+         *   console.log(event); // prints ['bar'] [42]
+         * }
+         * // Unreachable here
+         * ```
+         *
+         * Returns an `AsyncIterator` that iterates `eventName` events. It will throw
+         * if the `EventEmitter` emits `'error'`. It removes all listeners when
+         * exiting the loop. The `value` returned by each iteration is an array
+         * composed of the emitted event arguments.
+         *
+         * An `AbortSignal` can be used to cancel waiting on events:
+         *
+         * ```js
+         * import { on, EventEmitter } from 'node:events';
+         * import process from 'node:process';
+         *
+         * const ac = new AbortController();
+         *
+         * (async () => {
+         *   const ee = new EventEmitter();
+         *
+         *   // Emit later on
+         *   process.nextTick(() => {
+         *     ee.emit('foo', 'bar');
+         *     ee.emit('foo', 42);
+         *   });
+         *
+         *   for await (const event of on(ee, 'foo', { signal: ac.signal })) {
+         *     // The execution of this inner block is synchronous and it
+         *     // processes one event at a time (even with await). Do not use
+         *     // if concurrent execution is required.
+         *     console.log(event); // prints ['bar'] [42]
+         *   }
+         *   // Unreachable here
+         * })();
+         *
+         * process.nextTick(() => ac.abort());
+         * ```
+         *
+         * Use the `close` option to specify an array of event names that will end the iteration:
+         *
+         * ```js
+         * import { on, EventEmitter } from 'node:events';
+         * import process from 'node:process';
+         *
+         * const ee = new EventEmitter();
+         *
+         * // Emit later on
+         * process.nextTick(() => {
+         *   ee.emit('foo', 'bar');
+         *   ee.emit('foo', 42);
+         *   ee.emit('close');
+         * });
+         *
+         * for await (const event of on(ee, 'foo', { close: ['close'] })) {
+         *   console.log(event); // prints ['bar'] [42]
+         * }
+         * // the loop will exit after 'close' is emitted
+         * console.log('done'); // prints 'done'
+         * ```
+         * @since v13.6.0, v12.16.0
+         * @return An `AsyncIterator` that iterates `eventName` events emitted by the `emitter`
+         */
+        static on(
+            emitter: NodeJS.EventEmitter,
+            eventName: string | symbol,
+            options?: StaticEventEmitterIteratorOptions,
+        ): NodeJS.AsyncIterator;
+        static on(
+            emitter: EventTarget,
+            eventName: string,
+            options?: StaticEventEmitterIteratorOptions,
+        ): NodeJS.AsyncIterator;
+        /**
+         * A class method that returns the number of listeners for the given `eventName` registered on the given `emitter`.
+         *
+         * ```js
+         * import { EventEmitter, listenerCount } from 'node:events';
+         *
+         * const myEmitter = new EventEmitter();
+         * myEmitter.on('event', () => {});
+         * myEmitter.on('event', () => {});
+         * console.log(listenerCount(myEmitter, 'event'));
+         * // Prints: 2
+         * ```
+         * @since v0.9.12
+         * @deprecated Since v3.2.0 - Use `listenerCount` instead.
+         * @param emitter The emitter to query
+         * @param eventName The event name
+         */
+        static listenerCount(emitter: NodeJS.EventEmitter, eventName: string | symbol): number;
+        /**
+         * Returns a copy of the array of listeners for the event named `eventName`.
+         *
+         * For `EventEmitter`s this behaves exactly the same as calling `.listeners` on
+         * the emitter.
+         *
+         * For `EventTarget`s this is the only way to get the event listeners for the
+         * event target. This is useful for debugging and diagnostic purposes.
+         *
+         * ```js
+         * import { getEventListeners, EventEmitter } from 'node:events';
+         *
+         * {
+         *   const ee = new EventEmitter();
+         *   const listener = () => console.log('Events are fun');
+         *   ee.on('foo', listener);
+         *   console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ]
+         * }
+         * {
+         *   const et = new EventTarget();
+         *   const listener = () => console.log('Events are fun');
+         *   et.addEventListener('foo', listener);
+         *   console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ]
+         * }
+         * ```
+         * @since v15.2.0, v14.17.0
+         */
+        static getEventListeners(emitter: EventTarget | NodeJS.EventEmitter, name: string | symbol): Function[];
+        /**
+         * Returns the currently set max amount of listeners.
+         *
+         * For `EventEmitter`s this behaves exactly the same as calling `.getMaxListeners` on
+         * the emitter.
+         *
+         * For `EventTarget`s this is the only way to get the max event listeners for the
+         * event target. If the number of event handlers on a single EventTarget exceeds
+         * the max set, the EventTarget will print a warning.
+         *
+         * ```js
+         * import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';
+         *
+         * {
+         *   const ee = new EventEmitter();
+         *   console.log(getMaxListeners(ee)); // 10
+         *   setMaxListeners(11, ee);
+         *   console.log(getMaxListeners(ee)); // 11
+         * }
+         * {
+         *   const et = new EventTarget();
+         *   console.log(getMaxListeners(et)); // 10
+         *   setMaxListeners(11, et);
+         *   console.log(getMaxListeners(et)); // 11
+         * }
+         * ```
+         * @since v19.9.0
+         */
+        static getMaxListeners(emitter: EventTarget | NodeJS.EventEmitter): number;
+        /**
+         * ```js
+         * import { setMaxListeners, EventEmitter } from 'node:events';
+         *
+         * const target = new EventTarget();
+         * const emitter = new EventEmitter();
+         *
+         * setMaxListeners(5, target, emitter);
+         * ```
+         * @since v15.4.0
+         * @param n A non-negative number. The maximum number of listeners per `EventTarget` event.
+         * @param eventTargets Zero or more {EventTarget} or {EventEmitter} instances. If none are specified, `n` is set as the default max for all newly created {EventTarget} and {EventEmitter}
+         * objects.
+         */
+        static setMaxListeners(n?: number, ...eventTargets: Array): void;
+        /**
+         * Listens once to the `abort` event on the provided `signal`.
+         *
+         * Listening to the `abort` event on abort signals is unsafe and may
+         * lead to resource leaks since another third party with the signal can
+         * call `e.stopImmediatePropagation()`. Unfortunately Node.js cannot change
+         * this since it would violate the web standard. Additionally, the original
+         * API makes it easy to forget to remove listeners.
+         *
+         * This API allows safely using `AbortSignal`s in Node.js APIs by solving these
+         * two issues by listening to the event such that `stopImmediatePropagation` does
+         * not prevent the listener from running.
+         *
+         * Returns a disposable so that it may be unsubscribed from more easily.
+         *
+         * ```js
+         * import { addAbortListener } from 'node:events';
+         *
+         * function example(signal) {
+         *   let disposable;
+         *   try {
+         *     signal.addEventListener('abort', (e) => e.stopImmediatePropagation());
+         *     disposable = addAbortListener(signal, (e) => {
+         *       // Do something when signal is aborted.
+         *     });
+         *   } finally {
+         *     disposable?.[Symbol.dispose]();
+         *   }
+         * }
+         * ```
+         * @since v20.5.0
+         * @return Disposable that removes the `abort` listener.
+         */
+        static addAbortListener(signal: AbortSignal, resource: (event: Event) => void): Disposable;
+        /**
+         * This symbol shall be used to install a listener for only monitoring `'error'` events. Listeners installed using this symbol are called before the regular `'error'` listeners are called.
+         *
+         * Installing a listener using this symbol does not change the behavior once an `'error'` event is emitted. Therefore, the process will still crash if no
+         * regular `'error'` listener is installed.
+         * @since v13.6.0, v12.17.0
+         */
+        static readonly errorMonitor: unique symbol;
+        /**
+         * Value: `Symbol.for('nodejs.rejection')`
+         *
+         * See how to write a custom `rejection handler`.
+         * @since v13.4.0, v12.16.0
+         */
+        static readonly captureRejectionSymbol: unique symbol;
+        /**
+         * Value: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type)
+         *
+         * Change the default `captureRejections` option on all new `EventEmitter` objects.
+         * @since v13.4.0, v12.16.0
+         */
+        static captureRejections: boolean;
+        /**
+         * By default, a maximum of `10` listeners can be registered for any single
+         * event. This limit can be changed for individual `EventEmitter` instances
+         * using the `emitter.setMaxListeners(n)` method. To change the default
+         * for _all_`EventEmitter` instances, the `events.defaultMaxListeners` property
+         * can be used. If this value is not a positive number, a `RangeError` is thrown.
+         *
+         * Take caution when setting the `events.defaultMaxListeners` because the
+         * change affects _all_ `EventEmitter` instances, including those created before
+         * the change is made. However, calling `emitter.setMaxListeners(n)` still has
+         * precedence over `events.defaultMaxListeners`.
+         *
+         * This is not a hard limit. The `EventEmitter` instance will allow
+         * more listeners to be added but will output a trace warning to stderr indicating
+         * that a "possible EventEmitter memory leak" has been detected. For any single
+         * `EventEmitter`, the `emitter.getMaxListeners()` and `emitter.setMaxListeners()` methods can be used to
+         * temporarily avoid this warning:
+         *
+         * ```js
+         * import { EventEmitter } from 'node:events';
+         * const emitter = new EventEmitter();
+         * emitter.setMaxListeners(emitter.getMaxListeners() + 1);
+         * emitter.once('event', () => {
+         *   // do stuff
+         *   emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0));
+         * });
+         * ```
+         *
+         * The `--trace-warnings` command-line flag can be used to display the
+         * stack trace for such warnings.
+         *
+         * The emitted warning can be inspected with `process.on('warning')` and will
+         * have the additional `emitter`, `type`, and `count` properties, referring to
+         * the event emitter instance, the event's name and the number of attached
+         * listeners, respectively.
+         * Its `name` property is set to `'MaxListenersExceededWarning'`.
+         * @since v0.11.2
+         */
+        static defaultMaxListeners: number;
+    }
+    import internal = require("node:events");
+    namespace EventEmitter {
+        // Should just be `export { EventEmitter }`, but that doesn't work in TypeScript 3.4
+        export { internal as EventEmitter };
+        export interface Abortable {
+            /**
+             * When provided the corresponding `AbortController` can be used to cancel an asynchronous action.
+             */
+            signal?: AbortSignal | undefined;
+        }
+
+        export interface EventEmitterReferencingAsyncResource extends AsyncResource {
+            readonly eventEmitter: EventEmitterAsyncResource;
+        }
+
+        export interface EventEmitterAsyncResourceOptions extends AsyncResourceOptions, EventEmitterOptions {
+            /**
+             * The type of async event, this is required when instantiating `EventEmitterAsyncResource`
+             * directly rather than as a child class.
+             * @default new.target.name if instantiated as a child class.
+             */
+            name?: string | undefined;
+        }
+
+        /**
+         * Integrates `EventEmitter` with `AsyncResource` for `EventEmitter`s that
+         * require manual async tracking. Specifically, all events emitted by instances
+         * of `events.EventEmitterAsyncResource` will run within its `async context`.
+         *
+         * ```js
+         * import { EventEmitterAsyncResource, EventEmitter } from 'node:events';
+         * import { notStrictEqual, strictEqual } from 'node:assert';
+         * import { executionAsyncId, triggerAsyncId } from 'node:async_hooks';
+         *
+         * // Async tracking tooling will identify this as 'Q'.
+         * const ee1 = new EventEmitterAsyncResource({ name: 'Q' });
+         *
+         * // 'foo' listeners will run in the EventEmitters async context.
+         * ee1.on('foo', () => {
+         *   strictEqual(executionAsyncId(), ee1.asyncId);
+         *   strictEqual(triggerAsyncId(), ee1.triggerAsyncId);
+         * });
+         *
+         * const ee2 = new EventEmitter();
+         *
+         * // 'foo' listeners on ordinary EventEmitters that do not track async
+         * // context, however, run in the same async context as the emit().
+         * ee2.on('foo', () => {
+         *   notStrictEqual(executionAsyncId(), ee2.asyncId);
+         *   notStrictEqual(triggerAsyncId(), ee2.triggerAsyncId);
+         * });
+         *
+         * Promise.resolve().then(() => {
+         *   ee1.emit('foo');
+         *   ee2.emit('foo');
+         * });
+         * ```
+         *
+         * The `EventEmitterAsyncResource` class has the same methods and takes the
+         * same options as `EventEmitter` and `AsyncResource` themselves.
+         * @since v17.4.0, v16.14.0
+         */
+        export class EventEmitterAsyncResource extends EventEmitter {
+            /**
+             * @param options Only optional in child class.
+             */
+            constructor(options?: EventEmitterAsyncResourceOptions);
+            /**
+             * Call all `destroy` hooks. This should only ever be called once. An error will
+             * be thrown if it is called more than once. This **must** be manually called. If
+             * the resource is left to be collected by the GC then the `destroy` hooks will
+             * never be called.
+             */
+            emitDestroy(): void;
+            /**
+             * The unique `asyncId` assigned to the resource.
+             */
+            readonly asyncId: number;
+            /**
+             * The same triggerAsyncId that is passed to the AsyncResource constructor.
+             */
+            readonly triggerAsyncId: number;
+            /**
+             * The returned `AsyncResource` object has an additional `eventEmitter` property
+             * that provides a reference to this `EventEmitterAsyncResource`.
+             */
+            readonly asyncResource: EventEmitterReferencingAsyncResource;
+        }
+        /**
+         * The `NodeEventTarget` is a Node.js-specific extension to `EventTarget`
+         * that emulates a subset of the `EventEmitter` API.
+         * @since v14.5.0
+         */
+        export interface NodeEventTarget extends EventTarget {
+            /**
+             * Node.js-specific extension to the `EventTarget` class that emulates the
+             * equivalent `EventEmitter` API. The only difference between `addListener()` and
+             * `addEventListener()` is that `addListener()` will return a reference to the
+             * `EventTarget`.
+             * @since v14.5.0
+             */
+            addListener(type: string, listener: (arg: any) => void): this;
+            /**
+             * Node.js-specific extension to the `EventTarget` class that dispatches the
+             * `arg` to the list of handlers for `type`.
+             * @since v15.2.0
+             * @returns `true` if event listeners registered for the `type` exist,
+             * otherwise `false`.
+             */
+            emit(type: string, arg: any): boolean;
+            /**
+             * Node.js-specific extension to the `EventTarget` class that returns an array
+             * of event `type` names for which event listeners are registered.
+             * @since 14.5.0
+             */
+            eventNames(): string[];
+            /**
+             * Node.js-specific extension to the `EventTarget` class that returns the number
+             * of event listeners registered for the `type`.
+             * @since v14.5.0
+             */
+            listenerCount(type: string): number;
+            /**
+             * Node.js-specific extension to the `EventTarget` class that sets the number
+             * of max event listeners as `n`.
+             * @since v14.5.0
+             */
+            setMaxListeners(n: number): void;
+            /**
+             * Node.js-specific extension to the `EventTarget` class that returns the number
+             * of max event listeners.
+             * @since v14.5.0
+             */
+            getMaxListeners(): number;
+            /**
+             * Node.js-specific alias for `eventTarget.removeEventListener()`.
+             * @since v14.5.0
+             */
+            off(type: string, listener: (arg: any) => void, options?: EventListenerOptions): this;
+            /**
+             * Node.js-specific alias for `eventTarget.addEventListener()`.
+             * @since v14.5.0
+             */
+            on(type: string, listener: (arg: any) => void): this;
+            /**
+             * Node.js-specific extension to the `EventTarget` class that adds a `once`
+             * listener for the given event `type`. This is equivalent to calling `on`
+             * with the `once` option set to `true`.
+             * @since v14.5.0
+             */
+            once(type: string, listener: (arg: any) => void): this;
+            /**
+             * Node.js-specific extension to the `EventTarget` class. If `type` is specified,
+             * removes all registered listeners for `type`, otherwise removes all registered
+             * listeners.
+             * @since v14.5.0
+             */
+            removeAllListeners(type?: string): this;
+            /**
+             * Node.js-specific extension to the `EventTarget` class that removes the
+             * `listener` for the given `type`. The only difference between `removeListener()`
+             * and `removeEventListener()` is that `removeListener()` will return a reference
+             * to the `EventTarget`.
+             * @since v14.5.0
+             */
+            removeListener(type: string, listener: (arg: any) => void, options?: EventListenerOptions): this;
+        }
+    }
+    global {
+        namespace NodeJS {
+            interface EventEmitter = DefaultEventMap> {
+                [EventEmitter.captureRejectionSymbol]?(error: Error, event: Key, ...args: Args): void;
+                /**
+                 * Alias for `emitter.on(eventName, listener)`.
+                 * @since v0.1.26
+                 */
+                addListener(eventName: Key, listener: Listener1): this;
+                /**
+                 * Adds the `listener` function to the end of the listeners array for the event
+                 * named `eventName`. No checks are made to see if the `listener` has already
+                 * been added. Multiple calls passing the same combination of `eventName` and
+                 * `listener` will result in the `listener` being added, and called, multiple times.
+                 *
+                 * ```js
+                 * server.on('connection', (stream) => {
+                 *   console.log('someone connected!');
+                 * });
+                 * ```
+                 *
+                 * Returns a reference to the `EventEmitter`, so that calls can be chained.
+                 *
+                 * By default, event listeners are invoked in the order they are added. The `emitter.prependListener()` method can be used as an alternative to add the
+                 * event listener to the beginning of the listeners array.
+                 *
+                 * ```js
+                 * import { EventEmitter } from 'node:events';
+                 * const myEE = new EventEmitter();
+                 * myEE.on('foo', () => console.log('a'));
+                 * myEE.prependListener('foo', () => console.log('b'));
+                 * myEE.emit('foo');
+                 * // Prints:
+                 * //   b
+                 * //   a
+                 * ```
+                 * @since v0.1.101
+                 * @param eventName The name of the event.
+                 * @param listener The callback function
+                 */
+                on(eventName: Key, listener: Listener1): this;
+                /**
+                 * Adds a **one-time** `listener` function for the event named `eventName`. The
+                 * next time `eventName` is triggered, this listener is removed and then invoked.
+                 *
+                 * ```js
+                 * server.once('connection', (stream) => {
+                 *   console.log('Ah, we have our first user!');
+                 * });
+                 * ```
+                 *
+                 * Returns a reference to the `EventEmitter`, so that calls can be chained.
+                 *
+                 * By default, event listeners are invoked in the order they are added. The `emitter.prependOnceListener()` method can be used as an alternative to add the
+                 * event listener to the beginning of the listeners array.
+                 *
+                 * ```js
+                 * import { EventEmitter } from 'node:events';
+                 * const myEE = new EventEmitter();
+                 * myEE.once('foo', () => console.log('a'));
+                 * myEE.prependOnceListener('foo', () => console.log('b'));
+                 * myEE.emit('foo');
+                 * // Prints:
+                 * //   b
+                 * //   a
+                 * ```
+                 * @since v0.3.0
+                 * @param eventName The name of the event.
+                 * @param listener The callback function
+                 */
+                once(eventName: Key, listener: Listener1): this;
+                /**
+                 * Removes the specified `listener` from the listener array for the event named `eventName`.
+                 *
+                 * ```js
+                 * const callback = (stream) => {
+                 *   console.log('someone connected!');
+                 * };
+                 * server.on('connection', callback);
+                 * // ...
+                 * server.removeListener('connection', callback);
+                 * ```
+                 *
+                 * `removeListener()` will remove, at most, one instance of a listener from the
+                 * listener array. If any single listener has been added multiple times to the
+                 * listener array for the specified `eventName`, then `removeListener()` must be
+                 * called multiple times to remove each instance.
+                 *
+                 * Once an event is emitted, all listeners attached to it at the
+                 * time of emitting are called in order. This implies that any `removeListener()` or `removeAllListeners()` calls _after_ emitting and _before_ the last listener finishes execution
+                 * will not remove them from`emit()` in progress. Subsequent events behave as expected.
+                 *
+                 * ```js
+                 * import { EventEmitter } from 'node:events';
+                 * class MyEmitter extends EventEmitter {}
+                 * const myEmitter = new MyEmitter();
+                 *
+                 * const callbackA = () => {
+                 *   console.log('A');
+                 *   myEmitter.removeListener('event', callbackB);
+                 * };
+                 *
+                 * const callbackB = () => {
+                 *   console.log('B');
+                 * };
+                 *
+                 * myEmitter.on('event', callbackA);
+                 *
+                 * myEmitter.on('event', callbackB);
+                 *
+                 * // callbackA removes listener callbackB but it will still be called.
+                 * // Internal listener array at time of emit [callbackA, callbackB]
+                 * myEmitter.emit('event');
+                 * // Prints:
+                 * //   A
+                 * //   B
+                 *
+                 * // callbackB is now removed.
+                 * // Internal listener array [callbackA]
+                 * myEmitter.emit('event');
+                 * // Prints:
+                 * //   A
+                 * ```
+                 *
+                 * Because listeners are managed using an internal array, calling this will
+                 * change the position indices of any listener registered _after_ the listener
+                 * being removed. This will not impact the order in which listeners are called,
+                 * but it means that any copies of the listener array as returned by
+                 * the `emitter.listeners()` method will need to be recreated.
+                 *
+                 * When a single function has been added as a handler multiple times for a single
+                 * event (as in the example below), `removeListener()` will remove the most
+                 * recently added instance. In the example the `once('ping')` listener is removed:
+                 *
+                 * ```js
+                 * import { EventEmitter } from 'node:events';
+                 * const ee = new EventEmitter();
+                 *
+                 * function pong() {
+                 *   console.log('pong');
+                 * }
+                 *
+                 * ee.on('ping', pong);
+                 * ee.once('ping', pong);
+                 * ee.removeListener('ping', pong);
+                 *
+                 * ee.emit('ping');
+                 * ee.emit('ping');
+                 * ```
+                 *
+                 * Returns a reference to the `EventEmitter`, so that calls can be chained.
+                 * @since v0.1.26
+                 */
+                removeListener(eventName: Key, listener: Listener1): this;
+                /**
+                 * Alias for `emitter.removeListener()`.
+                 * @since v10.0.0
+                 */
+                off(eventName: Key, listener: Listener1): this;
+                /**
+                 * Removes all listeners, or those of the specified `eventName`.
+                 *
+                 * It is bad practice to remove listeners added elsewhere in the code,
+                 * particularly when the `EventEmitter` instance was created by some other
+                 * component or module (e.g. sockets or file streams).
+                 *
+                 * Returns a reference to the `EventEmitter`, so that calls can be chained.
+                 * @since v0.1.26
+                 */
+                removeAllListeners(eventName?: Key): this;
+                /**
+                 * By default `EventEmitter`s will print a warning if more than `10` listeners are
+                 * added for a particular event. This is a useful default that helps finding
+                 * memory leaks. The `emitter.setMaxListeners()` method allows the limit to be
+                 * modified for this specific `EventEmitter` instance. The value can be set to `Infinity` (or `0`) to indicate an unlimited number of listeners.
+                 *
+                 * Returns a reference to the `EventEmitter`, so that calls can be chained.
+                 * @since v0.3.5
+                 */
+                setMaxListeners(n: number): this;
+                /**
+                 * Returns the current max listener value for the `EventEmitter` which is either
+                 * set by `emitter.setMaxListeners(n)` or defaults to {@link EventEmitter.defaultMaxListeners}.
+                 * @since v1.0.0
+                 */
+                getMaxListeners(): number;
+                /**
+                 * Returns a copy of the array of listeners for the event named `eventName`.
+                 *
+                 * ```js
+                 * server.on('connection', (stream) => {
+                 *   console.log('someone connected!');
+                 * });
+                 * console.log(util.inspect(server.listeners('connection')));
+                 * // Prints: [ [Function] ]
+                 * ```
+                 * @since v0.1.26
+                 */
+                listeners(eventName: Key): Array>;
+                /**
+                 * Returns a copy of the array of listeners for the event named `eventName`,
+                 * including any wrappers (such as those created by `.once()`).
+                 *
+                 * ```js
+                 * import { EventEmitter } from 'node:events';
+                 * const emitter = new EventEmitter();
+                 * emitter.once('log', () => console.log('log once'));
+                 *
+                 * // Returns a new Array with a function `onceWrapper` which has a property
+                 * // `listener` which contains the original listener bound above
+                 * const listeners = emitter.rawListeners('log');
+                 * const logFnWrapper = listeners[0];
+                 *
+                 * // Logs "log once" to the console and does not unbind the `once` event
+                 * logFnWrapper.listener();
+                 *
+                 * // Logs "log once" to the console and removes the listener
+                 * logFnWrapper();
+                 *
+                 * emitter.on('log', () => console.log('log persistently'));
+                 * // Will return a new Array with a single function bound by `.on()` above
+                 * const newListeners = emitter.rawListeners('log');
+                 *
+                 * // Logs "log persistently" twice
+                 * newListeners[0]();
+                 * emitter.emit('log');
+                 * ```
+                 * @since v9.4.0
+                 */
+                rawListeners(eventName: Key): Array>;
+                /**
+                 * Synchronously calls each of the listeners registered for the event named `eventName`, in the order they were registered, passing the supplied arguments
+                 * to each.
+                 *
+                 * Returns `true` if the event had listeners, `false` otherwise.
+                 *
+                 * ```js
+                 * import { EventEmitter } from 'node:events';
+                 * const myEmitter = new EventEmitter();
+                 *
+                 * // First listener
+                 * myEmitter.on('event', function firstListener() {
+                 *   console.log('Helloooo! first listener');
+                 * });
+                 * // Second listener
+                 * myEmitter.on('event', function secondListener(arg1, arg2) {
+                 *   console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
+                 * });
+                 * // Third listener
+                 * myEmitter.on('event', function thirdListener(...args) {
+                 *   const parameters = args.join(', ');
+                 *   console.log(`event with parameters ${parameters} in third listener`);
+                 * });
+                 *
+                 * console.log(myEmitter.listeners('event'));
+                 *
+                 * myEmitter.emit('event', 1, 2, 3, 4, 5);
+                 *
+                 * // Prints:
+                 * // [
+                 * //   [Function: firstListener],
+                 * //   [Function: secondListener],
+                 * //   [Function: thirdListener]
+                 * // ]
+                 * // Helloooo! first listener
+                 * // event with parameters 1, 2 in second listener
+                 * // event with parameters 1, 2, 3, 4, 5 in third listener
+                 * ```
+                 * @since v0.1.26
+                 */
+                emit(eventName: Key, ...args: Args): boolean;
+                /**
+                 * Returns the number of listeners listening for the event named `eventName`.
+                 * If `listener` is provided, it will return how many times the listener is found
+                 * in the list of the listeners of the event.
+                 * @since v3.2.0
+                 * @param eventName The name of the event being listened for
+                 * @param listener The event handler function
+                 */
+                listenerCount(eventName: Key, listener?: Listener2): number;
+                /**
+                 * Adds the `listener` function to the _beginning_ of the listeners array for the
+                 * event named `eventName`. No checks are made to see if the `listener` has
+                 * already been added. Multiple calls passing the same combination of `eventName`
+                 * and `listener` will result in the `listener` being added, and called, multiple times.
+                 *
+                 * ```js
+                 * server.prependListener('connection', (stream) => {
+                 *   console.log('someone connected!');
+                 * });
+                 * ```
+                 *
+                 * Returns a reference to the `EventEmitter`, so that calls can be chained.
+                 * @since v6.0.0
+                 * @param eventName The name of the event.
+                 * @param listener The callback function
+                 */
+                prependListener(eventName: Key, listener: Listener1): this;
+                /**
+                 * Adds a **one-time**`listener` function for the event named `eventName` to the _beginning_ of the listeners array. The next time `eventName` is triggered, this
+                 * listener is removed, and then invoked.
+                 *
+                 * ```js
+                 * server.prependOnceListener('connection', (stream) => {
+                 *   console.log('Ah, we have our first user!');
+                 * });
+                 * ```
+                 *
+                 * Returns a reference to the `EventEmitter`, so that calls can be chained.
+                 * @since v6.0.0
+                 * @param eventName The name of the event.
+                 * @param listener The callback function
+                 */
+                prependOnceListener(eventName: Key, listener: Listener1): this;
+                /**
+                 * Returns an array listing the events for which the emitter has registered
+                 * listeners. The values in the array are strings or `Symbol`s.
+                 *
+                 * ```js
+                 * import { EventEmitter } from 'node:events';
+                 *
+                 * const myEE = new EventEmitter();
+                 * myEE.on('foo', () => {});
+                 * myEE.on('bar', () => {});
+                 *
+                 * const sym = Symbol('symbol');
+                 * myEE.on(sym, () => {});
+                 *
+                 * console.log(myEE.eventNames());
+                 * // Prints: [ 'foo', 'bar', Symbol(symbol) ]
+                 * ```
+                 * @since v6.0.0
+                 */
+                eventNames(): Array<(string | symbol) & Key2>;
+            }
+        }
+    }
+    export = EventEmitter;
+}
+declare module "node:events" {
+    import events = require("events");
+    export = events;
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/fs.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/fs.d.ts
new file mode 100644
index 00000000..b300ca45
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/fs.d.ts
@@ -0,0 +1,4714 @@
+/**
+ * The `node:fs` module enables interacting with the file system in a
+ * way modeled on standard POSIX functions.
+ *
+ * To use the promise-based APIs:
+ *
+ * ```js
+ * import * as fs from 'node:fs/promises';
+ * ```
+ *
+ * To use the callback and sync APIs:
+ *
+ * ```js
+ * import * as fs from 'node:fs';
+ * ```
+ *
+ * All file system operations have synchronous, callback, and promise-based
+ * forms, and are accessible using both CommonJS syntax and ES6 Modules (ESM).
+ * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/fs.js)
+ */
+declare module "fs" {
+    import { NonSharedBuffer } from "node:buffer";
+    import * as stream from "node:stream";
+    import { Abortable, EventEmitter } from "node:events";
+    import { URL } from "node:url";
+    import * as promises from "node:fs/promises";
+    export { promises };
+    /**
+     * Valid types for path values in "fs".
+     */
+    export type PathLike = string | Buffer | URL;
+    export type PathOrFileDescriptor = PathLike | number;
+    export type TimeLike = string | number | Date;
+    export type NoParamCallback = (err: NodeJS.ErrnoException | null) => void;
+    export type BufferEncodingOption =
+        | "buffer"
+        | {
+            encoding: "buffer";
+        };
+    export interface ObjectEncodingOptions {
+        encoding?: BufferEncoding | null | undefined;
+    }
+    export type EncodingOption = ObjectEncodingOptions | BufferEncoding | undefined | null;
+    export type OpenMode = number | string;
+    export type Mode = number | string;
+    export interface StatsBase {
+        isFile(): boolean;
+        isDirectory(): boolean;
+        isBlockDevice(): boolean;
+        isCharacterDevice(): boolean;
+        isSymbolicLink(): boolean;
+        isFIFO(): boolean;
+        isSocket(): boolean;
+        dev: T;
+        ino: T;
+        mode: T;
+        nlink: T;
+        uid: T;
+        gid: T;
+        rdev: T;
+        size: T;
+        blksize: T;
+        blocks: T;
+        atimeMs: T;
+        mtimeMs: T;
+        ctimeMs: T;
+        birthtimeMs: T;
+        atime: Date;
+        mtime: Date;
+        ctime: Date;
+        birthtime: Date;
+    }
+    export interface Stats extends StatsBase {}
+    /**
+     * A `fs.Stats` object provides information about a file.
+     *
+     * Objects returned from {@link stat}, {@link lstat}, {@link fstat}, and
+     * their synchronous counterparts are of this type.
+     * If `bigint` in the `options` passed to those methods is true, the numeric values
+     * will be `bigint` instead of `number`, and the object will contain additional
+     * nanosecond-precision properties suffixed with `Ns`. `Stat` objects are not to be created directly using the `new` keyword.
+     *
+     * ```console
+     * Stats {
+     *   dev: 2114,
+     *   ino: 48064969,
+     *   mode: 33188,
+     *   nlink: 1,
+     *   uid: 85,
+     *   gid: 100,
+     *   rdev: 0,
+     *   size: 527,
+     *   blksize: 4096,
+     *   blocks: 8,
+     *   atimeMs: 1318289051000.1,
+     *   mtimeMs: 1318289051000.1,
+     *   ctimeMs: 1318289051000.1,
+     *   birthtimeMs: 1318289051000.1,
+     *   atime: Mon, 10 Oct 2011 23:24:11 GMT,
+     *   mtime: Mon, 10 Oct 2011 23:24:11 GMT,
+     *   ctime: Mon, 10 Oct 2011 23:24:11 GMT,
+     *   birthtime: Mon, 10 Oct 2011 23:24:11 GMT }
+     * ```
+     *
+     * `bigint` version:
+     *
+     * ```console
+     * BigIntStats {
+     *   dev: 2114n,
+     *   ino: 48064969n,
+     *   mode: 33188n,
+     *   nlink: 1n,
+     *   uid: 85n,
+     *   gid: 100n,
+     *   rdev: 0n,
+     *   size: 527n,
+     *   blksize: 4096n,
+     *   blocks: 8n,
+     *   atimeMs: 1318289051000n,
+     *   mtimeMs: 1318289051000n,
+     *   ctimeMs: 1318289051000n,
+     *   birthtimeMs: 1318289051000n,
+     *   atimeNs: 1318289051000000000n,
+     *   mtimeNs: 1318289051000000000n,
+     *   ctimeNs: 1318289051000000000n,
+     *   birthtimeNs: 1318289051000000000n,
+     *   atime: Mon, 10 Oct 2011 23:24:11 GMT,
+     *   mtime: Mon, 10 Oct 2011 23:24:11 GMT,
+     *   ctime: Mon, 10 Oct 2011 23:24:11 GMT,
+     *   birthtime: Mon, 10 Oct 2011 23:24:11 GMT }
+     * ```
+     * @since v0.1.21
+     */
+    export class Stats {
+        private constructor();
+    }
+    export interface StatsFsBase {
+        /** Type of file system. */
+        type: T;
+        /**  Optimal transfer block size. */
+        bsize: T;
+        /**  Total data blocks in file system. */
+        blocks: T;
+        /** Free blocks in file system. */
+        bfree: T;
+        /** Available blocks for unprivileged users */
+        bavail: T;
+        /** Total file nodes in file system. */
+        files: T;
+        /** Free file nodes in file system. */
+        ffree: T;
+    }
+    export interface StatsFs extends StatsFsBase {}
+    /**
+     * Provides information about a mounted file system.
+     *
+     * Objects returned from {@link statfs} and its synchronous counterpart are of
+     * this type. If `bigint` in the `options` passed to those methods is `true`, the
+     * numeric values will be `bigint` instead of `number`.
+     *
+     * ```console
+     * StatFs {
+     *   type: 1397114950,
+     *   bsize: 4096,
+     *   blocks: 121938943,
+     *   bfree: 61058895,
+     *   bavail: 61058895,
+     *   files: 999,
+     *   ffree: 1000000
+     * }
+     * ```
+     *
+     * `bigint` version:
+     *
+     * ```console
+     * StatFs {
+     *   type: 1397114950n,
+     *   bsize: 4096n,
+     *   blocks: 121938943n,
+     *   bfree: 61058895n,
+     *   bavail: 61058895n,
+     *   files: 999n,
+     *   ffree: 1000000n
+     * }
+     * ```
+     * @since v19.6.0, v18.15.0
+     */
+    export class StatsFs {}
+    export interface BigIntStatsFs extends StatsFsBase {}
+    export interface StatFsOptions {
+        bigint?: boolean | undefined;
+    }
+    /**
+     * A representation of a directory entry, which can be a file or a subdirectory
+     * within the directory, as returned by reading from an `fs.Dir`. The
+     * directory entry is a combination of the file name and file type pairs.
+     *
+     * Additionally, when {@link readdir} or {@link readdirSync} is called with
+     * the `withFileTypes` option set to `true`, the resulting array is filled with `fs.Dirent` objects, rather than strings or `Buffer` s.
+     * @since v10.10.0
+     */
+    export class Dirent {
+        /**
+         * Returns `true` if the `fs.Dirent` object describes a regular file.
+         * @since v10.10.0
+         */
+        isFile(): boolean;
+        /**
+         * Returns `true` if the `fs.Dirent` object describes a file system
+         * directory.
+         * @since v10.10.0
+         */
+        isDirectory(): boolean;
+        /**
+         * Returns `true` if the `fs.Dirent` object describes a block device.
+         * @since v10.10.0
+         */
+        isBlockDevice(): boolean;
+        /**
+         * Returns `true` if the `fs.Dirent` object describes a character device.
+         * @since v10.10.0
+         */
+        isCharacterDevice(): boolean;
+        /**
+         * Returns `true` if the `fs.Dirent` object describes a symbolic link.
+         * @since v10.10.0
+         */
+        isSymbolicLink(): boolean;
+        /**
+         * Returns `true` if the `fs.Dirent` object describes a first-in-first-out
+         * (FIFO) pipe.
+         * @since v10.10.0
+         */
+        isFIFO(): boolean;
+        /**
+         * Returns `true` if the `fs.Dirent` object describes a socket.
+         * @since v10.10.0
+         */
+        isSocket(): boolean;
+        /**
+         * The file name that this `fs.Dirent` object refers to. The type of this
+         * value is determined by the `options.encoding` passed to {@link readdir} or {@link readdirSync}.
+         * @since v10.10.0
+         */
+        name: Name;
+        /**
+         * The path to the parent directory of the file this `fs.Dirent` object refers to.
+         * @since v20.12.0, v18.20.0
+         */
+        parentPath: string;
+    }
+    /**
+     * A class representing a directory stream.
+     *
+     * Created by {@link opendir}, {@link opendirSync}, or `fsPromises.opendir()`.
+     *
+     * ```js
+     * import { opendir } from 'node:fs/promises';
+     *
+     * try {
+     *   const dir = await opendir('./');
+     *   for await (const dirent of dir)
+     *     console.log(dirent.name);
+     * } catch (err) {
+     *   console.error(err);
+     * }
+     * ```
+     *
+     * When using the async iterator, the `fs.Dir` object will be automatically
+     * closed after the iterator exits.
+     * @since v12.12.0
+     */
+    export class Dir implements AsyncIterable {
+        /**
+         * The read-only path of this directory as was provided to {@link opendir},{@link opendirSync}, or `fsPromises.opendir()`.
+         * @since v12.12.0
+         */
+        readonly path: string;
+        /**
+         * Asynchronously iterates over the directory via `readdir(3)` until all entries have been read.
+         */
+        [Symbol.asyncIterator](): NodeJS.AsyncIterator;
+        /**
+         * Asynchronously close the directory's underlying resource handle.
+         * Subsequent reads will result in errors.
+         *
+         * A promise is returned that will be fulfilled after the resource has been
+         * closed.
+         * @since v12.12.0
+         */
+        close(): Promise;
+        close(cb: NoParamCallback): void;
+        /**
+         * Synchronously close the directory's underlying resource handle.
+         * Subsequent reads will result in errors.
+         * @since v12.12.0
+         */
+        closeSync(): void;
+        /**
+         * Asynchronously read the next directory entry via [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) as an `fs.Dirent`.
+         *
+         * A promise is returned that will be fulfilled with an `fs.Dirent`, or `null` if there are no more directory entries to read.
+         *
+         * Directory entries returned by this function are in no particular order as
+         * provided by the operating system's underlying directory mechanisms.
+         * Entries added or removed while iterating over the directory might not be
+         * included in the iteration results.
+         * @since v12.12.0
+         * @return containing {fs.Dirent|null}
+         */
+        read(): Promise;
+        read(cb: (err: NodeJS.ErrnoException | null, dirEnt: Dirent | null) => void): void;
+        /**
+         * Synchronously read the next directory entry as an `fs.Dirent`. See the
+         * POSIX [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) documentation for more detail.
+         *
+         * If there are no more directory entries to read, `null` will be returned.
+         *
+         * Directory entries returned by this function are in no particular order as
+         * provided by the operating system's underlying directory mechanisms.
+         * Entries added or removed while iterating over the directory might not be
+         * included in the iteration results.
+         * @since v12.12.0
+         */
+        readSync(): Dirent | null;
+        /**
+         * Calls `dir.close()` if the directory handle is open, and returns a promise that
+         * fulfills when disposal is complete.
+         * @since v24.1.0
+         */
+        [Symbol.asyncDispose](): Promise;
+        /**
+         * Calls `dir.closeSync()` if the directory handle is open, and returns
+         * `undefined`.
+         * @since v24.1.0
+         */
+        [Symbol.dispose](): void;
+    }
+    /**
+     * Class: fs.StatWatcher
+     * @since v14.3.0, v12.20.0
+     * Extends `EventEmitter`
+     * A successful call to {@link watchFile} method will return a new fs.StatWatcher object.
+     */
+    export interface StatWatcher extends EventEmitter {
+        /**
+         * When called, requests that the Node.js event loop _not_ exit so long as the `fs.StatWatcher` is active. Calling `watcher.ref()` multiple times will have
+         * no effect.
+         *
+         * By default, all `fs.StatWatcher` objects are "ref'ed", making it normally
+         * unnecessary to call `watcher.ref()` unless `watcher.unref()` had been
+         * called previously.
+         * @since v14.3.0, v12.20.0
+         */
+        ref(): this;
+        /**
+         * When called, the active `fs.StatWatcher` object will not require the Node.js
+         * event loop to remain active. If there is no other activity keeping the
+         * event loop running, the process may exit before the `fs.StatWatcher` object's
+         * callback is invoked. Calling `watcher.unref()` multiple times will have
+         * no effect.
+         * @since v14.3.0, v12.20.0
+         */
+        unref(): this;
+    }
+    export interface FSWatcher extends EventEmitter {
+        /**
+         * Stop watching for changes on the given `fs.FSWatcher`. Once stopped, the `fs.FSWatcher` object is no longer usable.
+         * @since v0.5.8
+         */
+        close(): void;
+        /**
+         * When called, requests that the Node.js event loop _not_ exit so long as the `fs.FSWatcher` is active. Calling `watcher.ref()` multiple times will have
+         * no effect.
+         *
+         * By default, all `fs.FSWatcher` objects are "ref'ed", making it normally
+         * unnecessary to call `watcher.ref()` unless `watcher.unref()` had been
+         * called previously.
+         * @since v14.3.0, v12.20.0
+         */
+        ref(): this;
+        /**
+         * When called, the active `fs.FSWatcher` object will not require the Node.js
+         * event loop to remain active. If there is no other activity keeping the
+         * event loop running, the process may exit before the `fs.FSWatcher` object's
+         * callback is invoked. Calling `watcher.unref()` multiple times will have
+         * no effect.
+         * @since v14.3.0, v12.20.0
+         */
+        unref(): this;
+        /**
+         * events.EventEmitter
+         *   1. change
+         *   2. close
+         *   3. error
+         */
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        addListener(event: "change", listener: (eventType: string, filename: string | NonSharedBuffer) => void): this;
+        addListener(event: "close", listener: () => void): this;
+        addListener(event: "error", listener: (error: Error) => void): this;
+        on(event: string, listener: (...args: any[]) => void): this;
+        on(event: "change", listener: (eventType: string, filename: string | NonSharedBuffer) => void): this;
+        on(event: "close", listener: () => void): this;
+        on(event: "error", listener: (error: Error) => void): this;
+        once(event: string, listener: (...args: any[]) => void): this;
+        once(event: "change", listener: (eventType: string, filename: string | NonSharedBuffer) => void): this;
+        once(event: "close", listener: () => void): this;
+        once(event: "error", listener: (error: Error) => void): this;
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependListener(
+            event: "change",
+            listener: (eventType: string, filename: string | NonSharedBuffer) => void,
+        ): this;
+        prependListener(event: "close", listener: () => void): this;
+        prependListener(event: "error", listener: (error: Error) => void): this;
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(
+            event: "change",
+            listener: (eventType: string, filename: string | NonSharedBuffer) => void,
+        ): this;
+        prependOnceListener(event: "close", listener: () => void): this;
+        prependOnceListener(event: "error", listener: (error: Error) => void): this;
+    }
+    /**
+     * Instances of `fs.ReadStream` are created and returned using the {@link createReadStream} function.
+     * @since v0.1.93
+     */
+    export class ReadStream extends stream.Readable {
+        close(callback?: (err?: NodeJS.ErrnoException | null) => void): void;
+        /**
+         * The number of bytes that have been read so far.
+         * @since v6.4.0
+         */
+        bytesRead: number;
+        /**
+         * The path to the file the stream is reading from as specified in the first
+         * argument to `fs.createReadStream()`. If `path` is passed as a string, then`readStream.path` will be a string. If `path` is passed as a `Buffer`, then`readStream.path` will be a
+         * `Buffer`. If `fd` is specified, then`readStream.path` will be `undefined`.
+         * @since v0.1.93
+         */
+        path: string | Buffer;
+        /**
+         * This property is `true` if the underlying file has not been opened yet,
+         * i.e. before the `'ready'` event is emitted.
+         * @since v11.2.0, v10.16.0
+         */
+        pending: boolean;
+        /**
+         * events.EventEmitter
+         *   1. open
+         *   2. close
+         *   3. ready
+         */
+        addListener(event: K, listener: ReadStreamEvents[K]): this;
+        on(event: K, listener: ReadStreamEvents[K]): this;
+        once(event: K, listener: ReadStreamEvents[K]): this;
+        prependListener(event: K, listener: ReadStreamEvents[K]): this;
+        prependOnceListener(event: K, listener: ReadStreamEvents[K]): this;
+    }
+    export interface Utf8StreamOptions {
+        /**
+         * Appends writes to dest file instead of truncating it.
+         * @default true
+         */
+        append?: boolean | undefined;
+        /**
+         * Which type of data you can send to the write
+         * function, supported values are `'utf8'` or `'buffer'`.
+         * @default 'utf8'
+         */
+        contentMode?: "utf8" | "buffer" | undefined;
+        /**
+         * A path to a file to be written to (mode controlled by the
+         * append option).
+         */
+        dest?: string | undefined;
+        /**
+         * A file descriptor, something that is returned by `fs.open()`
+         * or `fs.openSync()`.
+         */
+        fd?: number | undefined;
+        /**
+         * An object that has the same API as the `fs` module, useful
+         * for mocking, testing, or customizing the behavior of the stream.
+         */
+        fs?: object | undefined;
+        /**
+         * Perform a `fs.fsyncSync()` every time a write is
+         * completed.
+         */
+        fsync?: boolean | undefined;
+        /**
+         * The maximum length of the internal buffer. If a write
+         * operation would cause the buffer to exceed `maxLength`, the data written is
+         * dropped and a drop event is emitted with the dropped data
+         */
+        maxLength?: number | undefined;
+        /**
+         * The maximum number of bytes that can be written;
+         * @default 16384
+         */
+        maxWrite?: number | undefined;
+        /**
+         * The minimum length of the internal buffer that is
+         * required to be full before flushing.
+         */
+        minLength?: number | undefined;
+        /**
+         * Ensure directory for `dest` file exists when true.
+         * @default false
+         */
+        mkdir?: boolean | undefined;
+        /**
+         * Specify the creating file mode (see `fs.open()`).
+         */
+        mode?: number | string | undefined;
+        /**
+         * Calls flush every `periodicFlush` milliseconds.
+         */
+        periodicFlush?: number | undefined;
+        /**
+         * A function that will be called when `write()`,
+         * `writeSync()`, or `flushSync()` encounters an `EAGAIN` or `EBUSY` error.
+         * If the return value is `true` the operation will be retried, otherwise it
+         * will bubble the error. The `err` is the error that caused this function to
+         * be called, `writeBufferLen` is the length of the buffer that was written,
+         * and `remainingBufferLen` is the length of the remaining buffer that the
+         * stream did not try to write.
+         */
+        retryEAGAIN?: ((err: Error | null, writeBufferLen: number, remainingBufferLen: number) => boolean) | undefined;
+        /**
+         * Perform writes synchronously.
+         */
+        sync?: boolean | undefined;
+    }
+    /**
+     * An optimized UTF-8 stream writer that allows for flushing all the internal
+     * buffering on demand. It handles `EAGAIN` errors correctly, allowing for
+     * customization, for example, by dropping content if the disk is busy.
+     * @since v24.6.0
+     * @experimental
+     */
+    export class Utf8Stream extends EventEmitter {
+        constructor(options: Utf8StreamOptions);
+        /**
+         * Whether the stream is appending to the file or truncating it.
+         */
+        readonly append: boolean;
+        /**
+         * The type of data that can be written to the stream. Supported
+         * values are `'utf8'` or `'buffer'`.
+         * @default 'utf8'
+         */
+        readonly contentMode: "utf8" | "buffer";
+        /**
+         * Close the stream immediately, without flushing the internal buffer.
+         */
+        destroy(): void;
+        /**
+         * Close the stream gracefully, flushing the internal buffer before closing.
+         */
+        end(): void;
+        /**
+         * The file descriptor that is being written to.
+         */
+        readonly fd: number;
+        /**
+         * The file that is being written to.
+         */
+        readonly file: string;
+        /**
+         * Writes the current buffer to the file if a write was not in progress. Do
+         * nothing if `minLength` is zero or if it is already writing.
+         */
+        flush(callback: (err: Error | null) => void): void;
+        /**
+         * Flushes the buffered data synchronously. This is a costly operation.
+         */
+        flushSync(): void;
+        /**
+         * Whether the stream is performing a `fs.fsyncSync()` after every
+         * write operation.
+         */
+        readonly fsync: boolean;
+        /**
+         * The maximum length of the internal buffer. If a write
+         * operation would cause the buffer to exceed `maxLength`, the data written is
+         * dropped and a drop event is emitted with the dropped data.
+         */
+        readonly maxLength: number;
+        /**
+         * The minimum length of the internal buffer that is required to be
+         * full before flushing.
+         */
+        readonly minLength: number;
+        /**
+         * Whether the stream should ensure that the directory for the
+         * `dest` file exists. If `true`, it will create the directory if it does not
+         * exist.
+         * @default false
+         */
+        readonly mkdir: boolean;
+        /**
+         * The mode of the file that is being written to.
+         */
+        readonly mode: number | string;
+        /**
+         * The number of milliseconds between flushes. If set to `0`, no
+         * periodic flushes will be performed.
+         */
+        readonly periodicFlush: number;
+        /**
+         * Reopen the file in place, useful for log rotation.
+         * @param file A path to a file to be written to (mode
+         * controlled by the append option).
+         */
+        reopen(file: PathLike): void;
+        /**
+         * Whether the stream is writing synchronously or asynchronously.
+         */
+        readonly sync: boolean;
+        /**
+         * When the `options.contentMode` is set to `'utf8'` when the stream is created,
+         * the `data` argument must be a string. If the `contentMode` is set to `'buffer'`,
+         * the `data` argument must be a `Buffer`.
+         * @param data The data to write.
+         */
+        write(data: string | Buffer): boolean;
+        /**
+         * Whether the stream is currently writing data to the file.
+         */
+        readonly writing: boolean;
+        /**
+         * Calls `utf8Stream.destroy()`.
+         */
+        [Symbol.dispose](): void;
+        /**
+         * events.EventEmitter
+         *   1. change
+         *   2. close
+         *   3. error
+         */
+        addListener(event: "close", listener: () => void): this;
+        addListener(event: "drain", listener: () => void): this;
+        addListener(event: "drop", listener: (data: string | Buffer) => void): this;
+        addListener(event: "error", listener: (error: Error) => void): this;
+        addListener(event: "finish", listener: () => void): this;
+        addListener(event: "ready", listener: () => void): this;
+        addListener(event: "write", listener: (n: number) => void): this;
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        on(event: "close", listener: () => void): this;
+        on(event: "drain", listener: () => void): this;
+        on(event: "drop", listener: (data: string | Buffer) => void): this;
+        on(event: "error", listener: (error: Error) => void): this;
+        on(event: "finish", listener: () => void): this;
+        on(event: "ready", listener: () => void): this;
+        on(event: "write", listener: (n: number) => void): this;
+        on(event: string, listener: (...args: any[]) => void): this;
+        once(event: "close", listener: () => void): this;
+        once(event: "drain", listener: () => void): this;
+        once(event: "drop", listener: (data: string | Buffer) => void): this;
+        once(event: "error", listener: (error: Error) => void): this;
+        once(event: "finish", listener: () => void): this;
+        once(event: "ready", listener: () => void): this;
+        once(event: "write", listener: (n: number) => void): this;
+        once(event: string, listener: (...args: any[]) => void): this;
+        prependListener(event: "close", listener: () => void): this;
+        prependListener(event: "drain", listener: () => void): this;
+        prependListener(event: "drop", listener: (data: string | Buffer) => void): this;
+        prependListener(event: "error", listener: (error: Error) => void): this;
+        prependListener(event: "finish", listener: () => void): this;
+        prependListener(event: "ready", listener: () => void): this;
+        prependListener(event: "write", listener: (n: number) => void): this;
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "close", listener: () => void): this;
+        prependOnceListener(event: "drain", listener: () => void): this;
+        prependOnceListener(event: "drop", listener: (data: string | Buffer) => void): this;
+        prependOnceListener(event: "error", listener: (error: Error) => void): this;
+        prependOnceListener(event: "finish", listener: () => void): this;
+        prependOnceListener(event: "ready", listener: () => void): this;
+        prependOnceListener(event: "write", listener: (n: number) => void): this;
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+    }
+
+    /**
+     * The Keys are events of the ReadStream and the values are the functions that are called when the event is emitted.
+     */
+    type ReadStreamEvents = {
+        close: () => void;
+        data: (chunk: Buffer | string) => void;
+        end: () => void;
+        error: (err: Error) => void;
+        open: (fd: number) => void;
+        pause: () => void;
+        readable: () => void;
+        ready: () => void;
+        resume: () => void;
+    } & CustomEvents;
+
+    /**
+     * string & {} allows to allow any kind of strings for the event
+     * but still allows to have auto completion for the normal events.
+     */
+    type CustomEvents = { [Key in string & {} | symbol]: (...args: any[]) => void };
+
+    /**
+     * The Keys are events of the WriteStream and the values are the functions that are called when the event is emitted.
+     */
+    type WriteStreamEvents = {
+        close: () => void;
+        drain: () => void;
+        error: (err: Error) => void;
+        finish: () => void;
+        open: (fd: number) => void;
+        pipe: (src: stream.Readable) => void;
+        ready: () => void;
+        unpipe: (src: stream.Readable) => void;
+    } & CustomEvents;
+    /**
+     * * Extends `stream.Writable`
+     *
+     * Instances of `fs.WriteStream` are created and returned using the {@link createWriteStream} function.
+     * @since v0.1.93
+     */
+    export class WriteStream extends stream.Writable {
+        /**
+         * Closes `writeStream`. Optionally accepts a
+         * callback that will be executed once the `writeStream`is closed.
+         * @since v0.9.4
+         */
+        close(callback?: (err?: NodeJS.ErrnoException | null) => void): void;
+        /**
+         * The number of bytes written so far. Does not include data that is still queued
+         * for writing.
+         * @since v0.4.7
+         */
+        bytesWritten: number;
+        /**
+         * The path to the file the stream is writing to as specified in the first
+         * argument to {@link createWriteStream}. If `path` is passed as a string, then`writeStream.path` will be a string. If `path` is passed as a `Buffer`, then`writeStream.path` will be a
+         * `Buffer`.
+         * @since v0.1.93
+         */
+        path: string | Buffer;
+        /**
+         * This property is `true` if the underlying file has not been opened yet,
+         * i.e. before the `'ready'` event is emitted.
+         * @since v11.2.0
+         */
+        pending: boolean;
+        /**
+         * events.EventEmitter
+         *   1. open
+         *   2. close
+         *   3. ready
+         */
+        addListener(event: K, listener: WriteStreamEvents[K]): this;
+        on(event: K, listener: WriteStreamEvents[K]): this;
+        once(event: K, listener: WriteStreamEvents[K]): this;
+        prependListener(event: K, listener: WriteStreamEvents[K]): this;
+        prependOnceListener(event: K, listener: WriteStreamEvents[K]): this;
+    }
+    /**
+     * Asynchronously rename file at `oldPath` to the pathname provided
+     * as `newPath`. In the case that `newPath` already exists, it will
+     * be overwritten. If there is a directory at `newPath`, an error will
+     * be raised instead. No arguments other than a possible exception are
+     * given to the completion callback.
+     *
+     * See also: [`rename(2)`](http://man7.org/linux/man-pages/man2/rename.2.html).
+     *
+     * ```js
+     * import { rename } from 'node:fs';
+     *
+     * rename('oldFile.txt', 'newFile.txt', (err) => {
+     *   if (err) throw err;
+     *   console.log('Rename complete!');
+     * });
+     * ```
+     * @since v0.0.2
+     */
+    export function rename(oldPath: PathLike, newPath: PathLike, callback: NoParamCallback): void;
+    export namespace rename {
+        /**
+         * Asynchronous rename(2) - Change the name or location of a file or directory.
+         * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * URL support is _experimental_.
+         * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * URL support is _experimental_.
+         */
+        function __promisify__(oldPath: PathLike, newPath: PathLike): Promise;
+    }
+    /**
+     * Renames the file from `oldPath` to `newPath`. Returns `undefined`.
+     *
+     * See the POSIX [`rename(2)`](http://man7.org/linux/man-pages/man2/rename.2.html) documentation for more details.
+     * @since v0.1.21
+     */
+    export function renameSync(oldPath: PathLike, newPath: PathLike): void;
+    /**
+     * Truncates the file. No arguments other than a possible exception are
+     * given to the completion callback. A file descriptor can also be passed as the
+     * first argument. In this case, `fs.ftruncate()` is called.
+     *
+     * ```js
+     * import { truncate } from 'node:fs';
+     * // Assuming that 'path/file.txt' is a regular file.
+     * truncate('path/file.txt', (err) => {
+     *   if (err) throw err;
+     *   console.log('path/file.txt was truncated');
+     * });
+     * ```
+     *
+     * Passing a file descriptor is deprecated and may result in an error being thrown
+     * in the future.
+     *
+     * See the POSIX [`truncate(2)`](http://man7.org/linux/man-pages/man2/truncate.2.html) documentation for more details.
+     * @since v0.8.6
+     * @param [len=0]
+     */
+    export function truncate(path: PathLike, len: number | undefined, callback: NoParamCallback): void;
+    /**
+     * Asynchronous truncate(2) - Truncate a file to a specified length.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    export function truncate(path: PathLike, callback: NoParamCallback): void;
+    export namespace truncate {
+        /**
+         * Asynchronous truncate(2) - Truncate a file to a specified length.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param len If not specified, defaults to `0`.
+         */
+        function __promisify__(path: PathLike, len?: number): Promise;
+    }
+    /**
+     * Truncates the file. Returns `undefined`. A file descriptor can also be
+     * passed as the first argument. In this case, `fs.ftruncateSync()` is called.
+     *
+     * Passing a file descriptor is deprecated and may result in an error being thrown
+     * in the future.
+     * @since v0.8.6
+     * @param [len=0]
+     */
+    export function truncateSync(path: PathLike, len?: number): void;
+    /**
+     * Truncates the file descriptor. No arguments other than a possible exception are
+     * given to the completion callback.
+     *
+     * See the POSIX [`ftruncate(2)`](http://man7.org/linux/man-pages/man2/ftruncate.2.html) documentation for more detail.
+     *
+     * If the file referred to by the file descriptor was larger than `len` bytes, only
+     * the first `len` bytes will be retained in the file.
+     *
+     * For example, the following program retains only the first four bytes of the
+     * file:
+     *
+     * ```js
+     * import { open, close, ftruncate } from 'node:fs';
+     *
+     * function closeFd(fd) {
+     *   close(fd, (err) => {
+     *     if (err) throw err;
+     *   });
+     * }
+     *
+     * open('temp.txt', 'r+', (err, fd) => {
+     *   if (err) throw err;
+     *
+     *   try {
+     *     ftruncate(fd, 4, (err) => {
+     *       closeFd(fd);
+     *       if (err) throw err;
+     *     });
+     *   } catch (err) {
+     *     closeFd(fd);
+     *     if (err) throw err;
+     *   }
+     * });
+     * ```
+     *
+     * If the file previously was shorter than `len` bytes, it is extended, and the
+     * extended part is filled with null bytes (`'\0'`):
+     *
+     * If `len` is negative then `0` will be used.
+     * @since v0.8.6
+     * @param [len=0]
+     */
+    export function ftruncate(fd: number, len: number | undefined, callback: NoParamCallback): void;
+    /**
+     * Asynchronous ftruncate(2) - Truncate a file to a specified length.
+     * @param fd A file descriptor.
+     */
+    export function ftruncate(fd: number, callback: NoParamCallback): void;
+    export namespace ftruncate {
+        /**
+         * Asynchronous ftruncate(2) - Truncate a file to a specified length.
+         * @param fd A file descriptor.
+         * @param len If not specified, defaults to `0`.
+         */
+        function __promisify__(fd: number, len?: number): Promise;
+    }
+    /**
+     * Truncates the file descriptor. Returns `undefined`.
+     *
+     * For detailed information, see the documentation of the asynchronous version of
+     * this API: {@link ftruncate}.
+     * @since v0.8.6
+     * @param [len=0]
+     */
+    export function ftruncateSync(fd: number, len?: number): void;
+    /**
+     * Asynchronously changes owner and group of a file. No arguments other than a
+     * possible exception are given to the completion callback.
+     *
+     * See the POSIX [`chown(2)`](http://man7.org/linux/man-pages/man2/chown.2.html) documentation for more detail.
+     * @since v0.1.97
+     */
+    export function chown(path: PathLike, uid: number, gid: number, callback: NoParamCallback): void;
+    export namespace chown {
+        /**
+         * Asynchronous chown(2) - Change ownership of a file.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         */
+        function __promisify__(path: PathLike, uid: number, gid: number): Promise;
+    }
+    /**
+     * Synchronously changes owner and group of a file. Returns `undefined`.
+     * This is the synchronous version of {@link chown}.
+     *
+     * See the POSIX [`chown(2)`](http://man7.org/linux/man-pages/man2/chown.2.html) documentation for more detail.
+     * @since v0.1.97
+     */
+    export function chownSync(path: PathLike, uid: number, gid: number): void;
+    /**
+     * Sets the owner of the file. No arguments other than a possible exception are
+     * given to the completion callback.
+     *
+     * See the POSIX [`fchown(2)`](http://man7.org/linux/man-pages/man2/fchown.2.html) documentation for more detail.
+     * @since v0.4.7
+     */
+    export function fchown(fd: number, uid: number, gid: number, callback: NoParamCallback): void;
+    export namespace fchown {
+        /**
+         * Asynchronous fchown(2) - Change ownership of a file.
+         * @param fd A file descriptor.
+         */
+        function __promisify__(fd: number, uid: number, gid: number): Promise;
+    }
+    /**
+     * Sets the owner of the file. Returns `undefined`.
+     *
+     * See the POSIX [`fchown(2)`](http://man7.org/linux/man-pages/man2/fchown.2.html) documentation for more detail.
+     * @since v0.4.7
+     * @param uid The file's new owner's user id.
+     * @param gid The file's new group's group id.
+     */
+    export function fchownSync(fd: number, uid: number, gid: number): void;
+    /**
+     * Set the owner of the symbolic link. No arguments other than a possible
+     * exception are given to the completion callback.
+     *
+     * See the POSIX [`lchown(2)`](http://man7.org/linux/man-pages/man2/lchown.2.html) documentation for more detail.
+     */
+    export function lchown(path: PathLike, uid: number, gid: number, callback: NoParamCallback): void;
+    export namespace lchown {
+        /**
+         * Asynchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         */
+        function __promisify__(path: PathLike, uid: number, gid: number): Promise;
+    }
+    /**
+     * Set the owner for the path. Returns `undefined`.
+     *
+     * See the POSIX [`lchown(2)`](http://man7.org/linux/man-pages/man2/lchown.2.html) documentation for more details.
+     * @param uid The file's new owner's user id.
+     * @param gid The file's new group's group id.
+     */
+    export function lchownSync(path: PathLike, uid: number, gid: number): void;
+    /**
+     * Changes the access and modification times of a file in the same way as {@link utimes}, with the difference that if the path refers to a symbolic
+     * link, then the link is not dereferenced: instead, the timestamps of the
+     * symbolic link itself are changed.
+     *
+     * No arguments other than a possible exception are given to the completion
+     * callback.
+     * @since v14.5.0, v12.19.0
+     */
+    export function lutimes(path: PathLike, atime: TimeLike, mtime: TimeLike, callback: NoParamCallback): void;
+    export namespace lutimes {
+        /**
+         * Changes the access and modification times of a file in the same way as `fsPromises.utimes()`,
+         * with the difference that if the path refers to a symbolic link, then the link is not
+         * dereferenced: instead, the timestamps of the symbolic link itself are changed.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param atime The last access time. If a string is provided, it will be coerced to number.
+         * @param mtime The last modified time. If a string is provided, it will be coerced to number.
+         */
+        function __promisify__(path: PathLike, atime: TimeLike, mtime: TimeLike): Promise;
+    }
+    /**
+     * Change the file system timestamps of the symbolic link referenced by `path`.
+     * Returns `undefined`, or throws an exception when parameters are incorrect or
+     * the operation fails. This is the synchronous version of {@link lutimes}.
+     * @since v14.5.0, v12.19.0
+     */
+    export function lutimesSync(path: PathLike, atime: TimeLike, mtime: TimeLike): void;
+    /**
+     * Asynchronously changes the permissions of a file. No arguments other than a
+     * possible exception are given to the completion callback.
+     *
+     * See the POSIX [`chmod(2)`](http://man7.org/linux/man-pages/man2/chmod.2.html) documentation for more detail.
+     *
+     * ```js
+     * import { chmod } from 'node:fs';
+     *
+     * chmod('my_file.txt', 0o775, (err) => {
+     *   if (err) throw err;
+     *   console.log('The permissions for file "my_file.txt" have been changed!');
+     * });
+     * ```
+     * @since v0.1.30
+     */
+    export function chmod(path: PathLike, mode: Mode, callback: NoParamCallback): void;
+    export namespace chmod {
+        /**
+         * Asynchronous chmod(2) - Change permissions of a file.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+         */
+        function __promisify__(path: PathLike, mode: Mode): Promise;
+    }
+    /**
+     * For detailed information, see the documentation of the asynchronous version of
+     * this API: {@link chmod}.
+     *
+     * See the POSIX [`chmod(2)`](http://man7.org/linux/man-pages/man2/chmod.2.html) documentation for more detail.
+     * @since v0.6.7
+     */
+    export function chmodSync(path: PathLike, mode: Mode): void;
+    /**
+     * Sets the permissions on the file. No arguments other than a possible exception
+     * are given to the completion callback.
+     *
+     * See the POSIX [`fchmod(2)`](http://man7.org/linux/man-pages/man2/fchmod.2.html) documentation for more detail.
+     * @since v0.4.7
+     */
+    export function fchmod(fd: number, mode: Mode, callback: NoParamCallback): void;
+    export namespace fchmod {
+        /**
+         * Asynchronous fchmod(2) - Change permissions of a file.
+         * @param fd A file descriptor.
+         * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+         */
+        function __promisify__(fd: number, mode: Mode): Promise;
+    }
+    /**
+     * Sets the permissions on the file. Returns `undefined`.
+     *
+     * See the POSIX [`fchmod(2)`](http://man7.org/linux/man-pages/man2/fchmod.2.html) documentation for more detail.
+     * @since v0.4.7
+     */
+    export function fchmodSync(fd: number, mode: Mode): void;
+    /**
+     * Changes the permissions on a symbolic link. No arguments other than a possible
+     * exception are given to the completion callback.
+     *
+     * This method is only implemented on macOS.
+     *
+     * See the POSIX [`lchmod(2)`](https://www.freebsd.org/cgi/man.cgi?query=lchmod&sektion=2) documentation for more detail.
+     * @deprecated Since v0.4.7
+     */
+    export function lchmod(path: PathLike, mode: Mode, callback: NoParamCallback): void;
+    /** @deprecated */
+    export namespace lchmod {
+        /**
+         * Asynchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+         */
+        function __promisify__(path: PathLike, mode: Mode): Promise;
+    }
+    /**
+     * Changes the permissions on a symbolic link. Returns `undefined`.
+     *
+     * This method is only implemented on macOS.
+     *
+     * See the POSIX [`lchmod(2)`](https://www.freebsd.org/cgi/man.cgi?query=lchmod&sektion=2) documentation for more detail.
+     * @deprecated Since v0.4.7
+     */
+    export function lchmodSync(path: PathLike, mode: Mode): void;
+    /**
+     * Asynchronous [`stat(2)`](http://man7.org/linux/man-pages/man2/stat.2.html). The callback gets two arguments `(err, stats)` where`stats` is an `fs.Stats` object.
+     *
+     * In case of an error, the `err.code` will be one of `Common System Errors`.
+     *
+     * {@link stat} follows symbolic links. Use {@link lstat} to look at the
+     * links themselves.
+     *
+     * Using `fs.stat()` to check for the existence of a file before calling`fs.open()`, `fs.readFile()`, or `fs.writeFile()` is not recommended.
+     * Instead, user code should open/read/write the file directly and handle the
+     * error raised if the file is not available.
+     *
+     * To check if a file exists without manipulating it afterwards, {@link access} is recommended.
+     *
+     * For example, given the following directory structure:
+     *
+     * ```text
+     * - txtDir
+     * -- file.txt
+     * - app.js
+     * ```
+     *
+     * The next program will check for the stats of the given paths:
+     *
+     * ```js
+     * import { stat } from 'node:fs';
+     *
+     * const pathsToCheck = ['./txtDir', './txtDir/file.txt'];
+     *
+     * for (let i = 0; i < pathsToCheck.length; i++) {
+     *   stat(pathsToCheck[i], (err, stats) => {
+     *     console.log(stats.isDirectory());
+     *     console.log(stats);
+     *   });
+     * }
+     * ```
+     *
+     * The resulting output will resemble:
+     *
+     * ```console
+     * true
+     * Stats {
+     *   dev: 16777220,
+     *   mode: 16877,
+     *   nlink: 3,
+     *   uid: 501,
+     *   gid: 20,
+     *   rdev: 0,
+     *   blksize: 4096,
+     *   ino: 14214262,
+     *   size: 96,
+     *   blocks: 0,
+     *   atimeMs: 1561174653071.963,
+     *   mtimeMs: 1561174614583.3518,
+     *   ctimeMs: 1561174626623.5366,
+     *   birthtimeMs: 1561174126937.2893,
+     *   atime: 2019-06-22T03:37:33.072Z,
+     *   mtime: 2019-06-22T03:36:54.583Z,
+     *   ctime: 2019-06-22T03:37:06.624Z,
+     *   birthtime: 2019-06-22T03:28:46.937Z
+     * }
+     * false
+     * Stats {
+     *   dev: 16777220,
+     *   mode: 33188,
+     *   nlink: 1,
+     *   uid: 501,
+     *   gid: 20,
+     *   rdev: 0,
+     *   blksize: 4096,
+     *   ino: 14214074,
+     *   size: 8,
+     *   blocks: 8,
+     *   atimeMs: 1561174616618.8555,
+     *   mtimeMs: 1561174614584,
+     *   ctimeMs: 1561174614583.8145,
+     *   birthtimeMs: 1561174007710.7478,
+     *   atime: 2019-06-22T03:36:56.619Z,
+     *   mtime: 2019-06-22T03:36:54.584Z,
+     *   ctime: 2019-06-22T03:36:54.584Z,
+     *   birthtime: 2019-06-22T03:26:47.711Z
+     * }
+     * ```
+     * @since v0.0.2
+     */
+    export function stat(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void;
+    export function stat(
+        path: PathLike,
+        options:
+            | (StatOptions & {
+                bigint?: false | undefined;
+            })
+            | undefined,
+        callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void,
+    ): void;
+    export function stat(
+        path: PathLike,
+        options: StatOptions & {
+            bigint: true;
+        },
+        callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void,
+    ): void;
+    export function stat(
+        path: PathLike,
+        options: StatOptions | undefined,
+        callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void,
+    ): void;
+    export namespace stat {
+        /**
+         * Asynchronous stat(2) - Get file status.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         */
+        function __promisify__(
+            path: PathLike,
+            options?: StatOptions & {
+                bigint?: false | undefined;
+            },
+        ): Promise;
+        function __promisify__(
+            path: PathLike,
+            options: StatOptions & {
+                bigint: true;
+            },
+        ): Promise;
+        function __promisify__(path: PathLike, options?: StatOptions): Promise;
+    }
+    export interface StatSyncFn extends Function {
+        (path: PathLike, options?: undefined): Stats;
+        (
+            path: PathLike,
+            options?: StatSyncOptions & {
+                bigint?: false | undefined;
+                throwIfNoEntry: false;
+            },
+        ): Stats | undefined;
+        (
+            path: PathLike,
+            options: StatSyncOptions & {
+                bigint: true;
+                throwIfNoEntry: false;
+            },
+        ): BigIntStats | undefined;
+        (
+            path: PathLike,
+            options?: StatSyncOptions & {
+                bigint?: false | undefined;
+            },
+        ): Stats;
+        (
+            path: PathLike,
+            options: StatSyncOptions & {
+                bigint: true;
+            },
+        ): BigIntStats;
+        (
+            path: PathLike,
+            options: StatSyncOptions & {
+                bigint: boolean;
+                throwIfNoEntry?: false | undefined;
+            },
+        ): Stats | BigIntStats;
+        (path: PathLike, options?: StatSyncOptions): Stats | BigIntStats | undefined;
+    }
+    /**
+     * Synchronous stat(2) - Get file status.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    export const statSync: StatSyncFn;
+    /**
+     * Invokes the callback with the `fs.Stats` for the file descriptor.
+     *
+     * See the POSIX [`fstat(2)`](http://man7.org/linux/man-pages/man2/fstat.2.html) documentation for more detail.
+     * @since v0.1.95
+     */
+    export function fstat(fd: number, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void;
+    export function fstat(
+        fd: number,
+        options:
+            | (StatOptions & {
+                bigint?: false | undefined;
+            })
+            | undefined,
+        callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void,
+    ): void;
+    export function fstat(
+        fd: number,
+        options: StatOptions & {
+            bigint: true;
+        },
+        callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void,
+    ): void;
+    export function fstat(
+        fd: number,
+        options: StatOptions | undefined,
+        callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void,
+    ): void;
+    export namespace fstat {
+        /**
+         * Asynchronous fstat(2) - Get file status.
+         * @param fd A file descriptor.
+         */
+        function __promisify__(
+            fd: number,
+            options?: StatOptions & {
+                bigint?: false | undefined;
+            },
+        ): Promise;
+        function __promisify__(
+            fd: number,
+            options: StatOptions & {
+                bigint: true;
+            },
+        ): Promise;
+        function __promisify__(fd: number, options?: StatOptions): Promise;
+    }
+    /**
+     * Retrieves the `fs.Stats` for the file descriptor.
+     *
+     * See the POSIX [`fstat(2)`](http://man7.org/linux/man-pages/man2/fstat.2.html) documentation for more detail.
+     * @since v0.1.95
+     */
+    export function fstatSync(
+        fd: number,
+        options?: StatOptions & {
+            bigint?: false | undefined;
+        },
+    ): Stats;
+    export function fstatSync(
+        fd: number,
+        options: StatOptions & {
+            bigint: true;
+        },
+    ): BigIntStats;
+    export function fstatSync(fd: number, options?: StatOptions): Stats | BigIntStats;
+    /**
+     * Retrieves the `fs.Stats` for the symbolic link referred to by the path.
+     * The callback gets two arguments `(err, stats)` where `stats` is a `fs.Stats` object. `lstat()` is identical to `stat()`, except that if `path` is a symbolic
+     * link, then the link itself is stat-ed, not the file that it refers to.
+     *
+     * See the POSIX [`lstat(2)`](http://man7.org/linux/man-pages/man2/lstat.2.html) documentation for more details.
+     * @since v0.1.30
+     */
+    export function lstat(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void;
+    export function lstat(
+        path: PathLike,
+        options:
+            | (StatOptions & {
+                bigint?: false | undefined;
+            })
+            | undefined,
+        callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void,
+    ): void;
+    export function lstat(
+        path: PathLike,
+        options: StatOptions & {
+            bigint: true;
+        },
+        callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void,
+    ): void;
+    export function lstat(
+        path: PathLike,
+        options: StatOptions | undefined,
+        callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void,
+    ): void;
+    export namespace lstat {
+        /**
+         * Asynchronous lstat(2) - Get file status. Does not dereference symbolic links.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         */
+        function __promisify__(
+            path: PathLike,
+            options?: StatOptions & {
+                bigint?: false | undefined;
+            },
+        ): Promise;
+        function __promisify__(
+            path: PathLike,
+            options: StatOptions & {
+                bigint: true;
+            },
+        ): Promise;
+        function __promisify__(path: PathLike, options?: StatOptions): Promise;
+    }
+    /**
+     * Asynchronous [`statfs(2)`](http://man7.org/linux/man-pages/man2/statfs.2.html). Returns information about the mounted file system which
+     * contains `path`. The callback gets two arguments `(err, stats)` where `stats`is an `fs.StatFs` object.
+     *
+     * In case of an error, the `err.code` will be one of `Common System Errors`.
+     * @since v19.6.0, v18.15.0
+     * @param path A path to an existing file or directory on the file system to be queried.
+     */
+    export function statfs(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: StatsFs) => void): void;
+    export function statfs(
+        path: PathLike,
+        options:
+            | (StatFsOptions & {
+                bigint?: false | undefined;
+            })
+            | undefined,
+        callback: (err: NodeJS.ErrnoException | null, stats: StatsFs) => void,
+    ): void;
+    export function statfs(
+        path: PathLike,
+        options: StatFsOptions & {
+            bigint: true;
+        },
+        callback: (err: NodeJS.ErrnoException | null, stats: BigIntStatsFs) => void,
+    ): void;
+    export function statfs(
+        path: PathLike,
+        options: StatFsOptions | undefined,
+        callback: (err: NodeJS.ErrnoException | null, stats: StatsFs | BigIntStatsFs) => void,
+    ): void;
+    export namespace statfs {
+        /**
+         * Asynchronous statfs(2) - Returns information about the mounted file system which contains path. The callback gets two arguments (err, stats) where stats is an  object.
+         * @param path A path to an existing file or directory on the file system to be queried.
+         */
+        function __promisify__(
+            path: PathLike,
+            options?: StatFsOptions & {
+                bigint?: false | undefined;
+            },
+        ): Promise;
+        function __promisify__(
+            path: PathLike,
+            options: StatFsOptions & {
+                bigint: true;
+            },
+        ): Promise;
+        function __promisify__(path: PathLike, options?: StatFsOptions): Promise;
+    }
+    /**
+     * Synchronous [`statfs(2)`](http://man7.org/linux/man-pages/man2/statfs.2.html). Returns information about the mounted file system which
+     * contains `path`.
+     *
+     * In case of an error, the `err.code` will be one of `Common System Errors`.
+     * @since v19.6.0, v18.15.0
+     * @param path A path to an existing file or directory on the file system to be queried.
+     */
+    export function statfsSync(
+        path: PathLike,
+        options?: StatFsOptions & {
+            bigint?: false | undefined;
+        },
+    ): StatsFs;
+    export function statfsSync(
+        path: PathLike,
+        options: StatFsOptions & {
+            bigint: true;
+        },
+    ): BigIntStatsFs;
+    export function statfsSync(path: PathLike, options?: StatFsOptions): StatsFs | BigIntStatsFs;
+    /**
+     * Synchronous lstat(2) - Get file status. Does not dereference symbolic links.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    export const lstatSync: StatSyncFn;
+    /**
+     * Creates a new link from the `existingPath` to the `newPath`. See the POSIX [`link(2)`](http://man7.org/linux/man-pages/man2/link.2.html) documentation for more detail. No arguments other than
+     * a possible
+     * exception are given to the completion callback.
+     * @since v0.1.31
+     */
+    export function link(existingPath: PathLike, newPath: PathLike, callback: NoParamCallback): void;
+    export namespace link {
+        /**
+         * Asynchronous link(2) - Create a new link (also known as a hard link) to an existing file.
+         * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+         */
+        function __promisify__(existingPath: PathLike, newPath: PathLike): Promise;
+    }
+    /**
+     * Creates a new link from the `existingPath` to the `newPath`. See the POSIX [`link(2)`](http://man7.org/linux/man-pages/man2/link.2.html) documentation for more detail. Returns `undefined`.
+     * @since v0.1.31
+     */
+    export function linkSync(existingPath: PathLike, newPath: PathLike): void;
+    /**
+     * Creates the link called `path` pointing to `target`. No arguments other than a
+     * possible exception are given to the completion callback.
+     *
+     * See the POSIX [`symlink(2)`](http://man7.org/linux/man-pages/man2/symlink.2.html) documentation for more details.
+     *
+     * The `type` argument is only available on Windows and ignored on other platforms.
+     * It can be set to `'dir'`, `'file'`, or `'junction'`. If the `type` argument is
+     * not a string, Node.js will autodetect `target` type and use `'file'` or `'dir'`.
+     * If the `target` does not exist, `'file'` will be used. Windows junction points
+     * require the destination path to be absolute. When using `'junction'`, the`target` argument will automatically be normalized to absolute path. Junction
+     * points on NTFS volumes can only point to directories.
+     *
+     * Relative targets are relative to the link's parent directory.
+     *
+     * ```js
+     * import { symlink } from 'node:fs';
+     *
+     * symlink('./mew', './mewtwo', callback);
+     * ```
+     *
+     * The above example creates a symbolic link `mewtwo` which points to `mew` in the
+     * same directory:
+     *
+     * ```bash
+     * $ tree .
+     * .
+     * ├── mew
+     * └── mewtwo -> ./mew
+     * ```
+     * @since v0.1.31
+     * @param [type='null']
+     */
+    export function symlink(
+        target: PathLike,
+        path: PathLike,
+        type: symlink.Type | undefined | null,
+        callback: NoParamCallback,
+    ): void;
+    /**
+     * Asynchronous symlink(2) - Create a new symbolic link to an existing file.
+     * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol.
+     * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol.
+     */
+    export function symlink(target: PathLike, path: PathLike, callback: NoParamCallback): void;
+    export namespace symlink {
+        /**
+         * Asynchronous symlink(2) - Create a new symbolic link to an existing file.
+         * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol.
+         * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol.
+         * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms).
+         * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path.
+         */
+        function __promisify__(target: PathLike, path: PathLike, type?: string | null): Promise;
+        type Type = "dir" | "file" | "junction";
+    }
+    /**
+     * Returns `undefined`.
+     *
+     * For detailed information, see the documentation of the asynchronous version of
+     * this API: {@link symlink}.
+     * @since v0.1.31
+     * @param [type='null']
+     */
+    export function symlinkSync(target: PathLike, path: PathLike, type?: symlink.Type | null): void;
+    /**
+     * Reads the contents of the symbolic link referred to by `path`. The callback gets
+     * two arguments `(err, linkString)`.
+     *
+     * See the POSIX [`readlink(2)`](http://man7.org/linux/man-pages/man2/readlink.2.html) documentation for more details.
+     *
+     * The optional `options` argument can be a string specifying an encoding, or an
+     * object with an `encoding` property specifying the character encoding to use for
+     * the link path passed to the callback. If the `encoding` is set to `'buffer'`,
+     * the link path returned will be passed as a `Buffer` object.
+     * @since v0.1.31
+     */
+    export function readlink(
+        path: PathLike,
+        options: EncodingOption,
+        callback: (err: NodeJS.ErrnoException | null, linkString: string) => void,
+    ): void;
+    /**
+     * Asynchronous readlink(2) - read value of a symbolic link.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    export function readlink(
+        path: PathLike,
+        options: BufferEncodingOption,
+        callback: (err: NodeJS.ErrnoException | null, linkString: NonSharedBuffer) => void,
+    ): void;
+    /**
+     * Asynchronous readlink(2) - read value of a symbolic link.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    export function readlink(
+        path: PathLike,
+        options: EncodingOption,
+        callback: (err: NodeJS.ErrnoException | null, linkString: string | NonSharedBuffer) => void,
+    ): void;
+    /**
+     * Asynchronous readlink(2) - read value of a symbolic link.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    export function readlink(
+        path: PathLike,
+        callback: (err: NodeJS.ErrnoException | null, linkString: string) => void,
+    ): void;
+    export namespace readlink {
+        /**
+         * Asynchronous readlink(2) - read value of a symbolic link.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(path: PathLike, options?: EncodingOption): Promise;
+        /**
+         * Asynchronous readlink(2) - read value of a symbolic link.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(path: PathLike, options: BufferEncodingOption): Promise;
+        /**
+         * Asynchronous readlink(2) - read value of a symbolic link.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(path: PathLike, options?: EncodingOption): Promise;
+    }
+    /**
+     * Returns the symbolic link's string value.
+     *
+     * See the POSIX [`readlink(2)`](http://man7.org/linux/man-pages/man2/readlink.2.html) documentation for more details.
+     *
+     * The optional `options` argument can be a string specifying an encoding, or an
+     * object with an `encoding` property specifying the character encoding to use for
+     * the link path returned. If the `encoding` is set to `'buffer'`,
+     * the link path returned will be passed as a `Buffer` object.
+     * @since v0.1.31
+     */
+    export function readlinkSync(path: PathLike, options?: EncodingOption): string;
+    /**
+     * Synchronous readlink(2) - read value of a symbolic link.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    export function readlinkSync(path: PathLike, options: BufferEncodingOption): NonSharedBuffer;
+    /**
+     * Synchronous readlink(2) - read value of a symbolic link.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    export function readlinkSync(path: PathLike, options?: EncodingOption): string | NonSharedBuffer;
+    /**
+     * Asynchronously computes the canonical pathname by resolving `.`, `..`, and
+     * symbolic links.
+     *
+     * A canonical pathname is not necessarily unique. Hard links and bind mounts can
+     * expose a file system entity through many pathnames.
+     *
+     * This function behaves like [`realpath(3)`](http://man7.org/linux/man-pages/man3/realpath.3.html), with some exceptions:
+     *
+     * 1. No case conversion is performed on case-insensitive file systems.
+     * 2. The maximum number of symbolic links is platform-independent and generally
+     * (much) higher than what the native [`realpath(3)`](http://man7.org/linux/man-pages/man3/realpath.3.html) implementation supports.
+     *
+     * The `callback` gets two arguments `(err, resolvedPath)`. May use `process.cwd` to resolve relative paths.
+     *
+     * Only paths that can be converted to UTF8 strings are supported.
+     *
+     * The optional `options` argument can be a string specifying an encoding, or an
+     * object with an `encoding` property specifying the character encoding to use for
+     * the path passed to the callback. If the `encoding` is set to `'buffer'`,
+     * the path returned will be passed as a `Buffer` object.
+     *
+     * If `path` resolves to a socket or a pipe, the function will return a system
+     * dependent name for that object.
+     * @since v0.1.31
+     */
+    export function realpath(
+        path: PathLike,
+        options: EncodingOption,
+        callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void,
+    ): void;
+    /**
+     * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    export function realpath(
+        path: PathLike,
+        options: BufferEncodingOption,
+        callback: (err: NodeJS.ErrnoException | null, resolvedPath: NonSharedBuffer) => void,
+    ): void;
+    /**
+     * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    export function realpath(
+        path: PathLike,
+        options: EncodingOption,
+        callback: (err: NodeJS.ErrnoException | null, resolvedPath: string | NonSharedBuffer) => void,
+    ): void;
+    /**
+     * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    export function realpath(
+        path: PathLike,
+        callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void,
+    ): void;
+    export namespace realpath {
+        /**
+         * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(path: PathLike, options?: EncodingOption): Promise;
+        /**
+         * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(path: PathLike, options: BufferEncodingOption): Promise;
+        /**
+         * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(path: PathLike, options?: EncodingOption): Promise;
+        /**
+         * Asynchronous [`realpath(3)`](http://man7.org/linux/man-pages/man3/realpath.3.html).
+         *
+         * The `callback` gets two arguments `(err, resolvedPath)`.
+         *
+         * Only paths that can be converted to UTF8 strings are supported.
+         *
+         * The optional `options` argument can be a string specifying an encoding, or an
+         * object with an `encoding` property specifying the character encoding to use for
+         * the path passed to the callback. If the `encoding` is set to `'buffer'`,
+         * the path returned will be passed as a `Buffer` object.
+         *
+         * On Linux, when Node.js is linked against musl libc, the procfs file system must
+         * be mounted on `/proc` in order for this function to work. Glibc does not have
+         * this restriction.
+         * @since v9.2.0
+         */
+        function native(
+            path: PathLike,
+            options: EncodingOption,
+            callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void,
+        ): void;
+        function native(
+            path: PathLike,
+            options: BufferEncodingOption,
+            callback: (err: NodeJS.ErrnoException | null, resolvedPath: NonSharedBuffer) => void,
+        ): void;
+        function native(
+            path: PathLike,
+            options: EncodingOption,
+            callback: (err: NodeJS.ErrnoException | null, resolvedPath: string | NonSharedBuffer) => void,
+        ): void;
+        function native(
+            path: PathLike,
+            callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void,
+        ): void;
+    }
+    /**
+     * Returns the resolved pathname.
+     *
+     * For detailed information, see the documentation of the asynchronous version of
+     * this API: {@link realpath}.
+     * @since v0.1.31
+     */
+    export function realpathSync(path: PathLike, options?: EncodingOption): string;
+    /**
+     * Synchronous realpath(3) - return the canonicalized absolute pathname.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    export function realpathSync(path: PathLike, options: BufferEncodingOption): NonSharedBuffer;
+    /**
+     * Synchronous realpath(3) - return the canonicalized absolute pathname.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    export function realpathSync(path: PathLike, options?: EncodingOption): string | NonSharedBuffer;
+    export namespace realpathSync {
+        function native(path: PathLike, options?: EncodingOption): string;
+        function native(path: PathLike, options: BufferEncodingOption): NonSharedBuffer;
+        function native(path: PathLike, options?: EncodingOption): string | NonSharedBuffer;
+    }
+    /**
+     * Asynchronously removes a file or symbolic link. No arguments other than a
+     * possible exception are given to the completion callback.
+     *
+     * ```js
+     * import { unlink } from 'node:fs';
+     * // Assuming that 'path/file.txt' is a regular file.
+     * unlink('path/file.txt', (err) => {
+     *   if (err) throw err;
+     *   console.log('path/file.txt was deleted');
+     * });
+     * ```
+     *
+     * `fs.unlink()` will not work on a directory, empty or otherwise. To remove a
+     * directory, use {@link rmdir}.
+     *
+     * See the POSIX [`unlink(2)`](http://man7.org/linux/man-pages/man2/unlink.2.html) documentation for more details.
+     * @since v0.0.2
+     */
+    export function unlink(path: PathLike, callback: NoParamCallback): void;
+    export namespace unlink {
+        /**
+         * Asynchronous unlink(2) - delete a name and possibly the file it refers to.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         */
+        function __promisify__(path: PathLike): Promise;
+    }
+    /**
+     * Synchronous [`unlink(2)`](http://man7.org/linux/man-pages/man2/unlink.2.html). Returns `undefined`.
+     * @since v0.1.21
+     */
+    export function unlinkSync(path: PathLike): void;
+    export interface RmDirOptions {
+        /**
+         * If an `EBUSY`, `EMFILE`, `ENFILE`, `ENOTEMPTY`, or
+         * `EPERM` error is encountered, Node.js will retry the operation with a linear
+         * backoff wait of `retryDelay` ms longer on each try. This option represents the
+         * number of retries. This option is ignored if the `recursive` option is not
+         * `true`.
+         * @default 0
+         */
+        maxRetries?: number | undefined;
+        /**
+         * @deprecated since v14.14.0 In future versions of Node.js and will trigger a warning
+         * `fs.rmdir(path, { recursive: true })` will throw if `path` does not exist or is a file.
+         * Use `fs.rm(path, { recursive: true, force: true })` instead.
+         *
+         * If `true`, perform a recursive directory removal. In
+         * recursive mode, operations are retried on failure.
+         * @default false
+         */
+        recursive?: boolean | undefined;
+        /**
+         * The amount of time in milliseconds to wait between retries.
+         * This option is ignored if the `recursive` option is not `true`.
+         * @default 100
+         */
+        retryDelay?: number | undefined;
+    }
+    /**
+     * Asynchronous [`rmdir(2)`](http://man7.org/linux/man-pages/man2/rmdir.2.html). No arguments other than a possible exception are given
+     * to the completion callback.
+     *
+     * Using `fs.rmdir()` on a file (not a directory) results in an `ENOENT` error on
+     * Windows and an `ENOTDIR` error on POSIX.
+     *
+     * To get a behavior similar to the `rm -rf` Unix command, use {@link rm} with options `{ recursive: true, force: true }`.
+     * @since v0.0.2
+     */
+    export function rmdir(path: PathLike, callback: NoParamCallback): void;
+    export function rmdir(path: PathLike, options: RmDirOptions, callback: NoParamCallback): void;
+    export namespace rmdir {
+        /**
+         * Asynchronous rmdir(2) - delete a directory.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         */
+        function __promisify__(path: PathLike, options?: RmDirOptions): Promise;
+    }
+    /**
+     * Synchronous [`rmdir(2)`](http://man7.org/linux/man-pages/man2/rmdir.2.html). Returns `undefined`.
+     *
+     * Using `fs.rmdirSync()` on a file (not a directory) results in an `ENOENT` error
+     * on Windows and an `ENOTDIR` error on POSIX.
+     *
+     * To get a behavior similar to the `rm -rf` Unix command, use {@link rmSync} with options `{ recursive: true, force: true }`.
+     * @since v0.1.21
+     */
+    export function rmdirSync(path: PathLike, options?: RmDirOptions): void;
+    export interface RmOptions {
+        /**
+         * When `true`, exceptions will be ignored if `path` does not exist.
+         * @default false
+         */
+        force?: boolean | undefined;
+        /**
+         * If an `EBUSY`, `EMFILE`, `ENFILE`, `ENOTEMPTY`, or
+         * `EPERM` error is encountered, Node.js will retry the operation with a linear
+         * backoff wait of `retryDelay` ms longer on each try. This option represents the
+         * number of retries. This option is ignored if the `recursive` option is not
+         * `true`.
+         * @default 0
+         */
+        maxRetries?: number | undefined;
+        /**
+         * If `true`, perform a recursive directory removal. In
+         * recursive mode, operations are retried on failure.
+         * @default false
+         */
+        recursive?: boolean | undefined;
+        /**
+         * The amount of time in milliseconds to wait between retries.
+         * This option is ignored if the `recursive` option is not `true`.
+         * @default 100
+         */
+        retryDelay?: number | undefined;
+    }
+    /**
+     * Asynchronously removes files and directories (modeled on the standard POSIX `rm` utility). No arguments other than a possible exception are given to the
+     * completion callback.
+     * @since v14.14.0
+     */
+    export function rm(path: PathLike, callback: NoParamCallback): void;
+    export function rm(path: PathLike, options: RmOptions, callback: NoParamCallback): void;
+    export namespace rm {
+        /**
+         * Asynchronously removes files and directories (modeled on the standard POSIX `rm` utility).
+         */
+        function __promisify__(path: PathLike, options?: RmOptions): Promise;
+    }
+    /**
+     * Synchronously removes files and directories (modeled on the standard POSIX `rm` utility). Returns `undefined`.
+     * @since v14.14.0
+     */
+    export function rmSync(path: PathLike, options?: RmOptions): void;
+    export interface MakeDirectoryOptions {
+        /**
+         * Indicates whether parent folders should be created.
+         * If a folder was created, the path to the first created folder will be returned.
+         * @default false
+         */
+        recursive?: boolean | undefined;
+        /**
+         * A file mode. If a string is passed, it is parsed as an octal integer. If not specified
+         * @default 0o777
+         */
+        mode?: Mode | undefined;
+    }
+    /**
+     * Asynchronously creates a directory.
+     *
+     * The callback is given a possible exception and, if `recursive` is `true`, the
+     * first directory path created, `(err[, path])`.`path` can still be `undefined` when `recursive` is `true`, if no directory was
+     * created (for instance, if it was previously created).
+     *
+     * The optional `options` argument can be an integer specifying `mode` (permission
+     * and sticky bits), or an object with a `mode` property and a `recursive` property indicating whether parent directories should be created. Calling `fs.mkdir()` when `path` is a directory that
+     * exists results in an error only
+     * when `recursive` is false. If `recursive` is false and the directory exists,
+     * an `EEXIST` error occurs.
+     *
+     * ```js
+     * import { mkdir } from 'node:fs';
+     *
+     * // Create ./tmp/a/apple, regardless of whether ./tmp and ./tmp/a exist.
+     * mkdir('./tmp/a/apple', { recursive: true }, (err) => {
+     *   if (err) throw err;
+     * });
+     * ```
+     *
+     * On Windows, using `fs.mkdir()` on the root directory even with recursion will
+     * result in an error:
+     *
+     * ```js
+     * import { mkdir } from 'node:fs';
+     *
+     * mkdir('/', { recursive: true }, (err) => {
+     *   // => [Error: EPERM: operation not permitted, mkdir 'C:\']
+     * });
+     * ```
+     *
+     * See the POSIX [`mkdir(2)`](http://man7.org/linux/man-pages/man2/mkdir.2.html) documentation for more details.
+     * @since v0.1.8
+     */
+    export function mkdir(
+        path: PathLike,
+        options: MakeDirectoryOptions & {
+            recursive: true;
+        },
+        callback: (err: NodeJS.ErrnoException | null, path?: string) => void,
+    ): void;
+    /**
+     * Asynchronous mkdir(2) - create a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders
+     * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`.
+     */
+    export function mkdir(
+        path: PathLike,
+        options:
+            | Mode
+            | (MakeDirectoryOptions & {
+                recursive?: false | undefined;
+            })
+            | null
+            | undefined,
+        callback: NoParamCallback,
+    ): void;
+    /**
+     * Asynchronous mkdir(2) - create a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders
+     * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`.
+     */
+    export function mkdir(
+        path: PathLike,
+        options: Mode | MakeDirectoryOptions | null | undefined,
+        callback: (err: NodeJS.ErrnoException | null, path?: string) => void,
+    ): void;
+    /**
+     * Asynchronous mkdir(2) - create a directory with a mode of `0o777`.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    export function mkdir(path: PathLike, callback: NoParamCallback): void;
+    export namespace mkdir {
+        /**
+         * Asynchronous mkdir(2) - create a directory.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders
+         * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`.
+         */
+        function __promisify__(
+            path: PathLike,
+            options: MakeDirectoryOptions & {
+                recursive: true;
+            },
+        ): Promise;
+        /**
+         * Asynchronous mkdir(2) - create a directory.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders
+         * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`.
+         */
+        function __promisify__(
+            path: PathLike,
+            options?:
+                | Mode
+                | (MakeDirectoryOptions & {
+                    recursive?: false | undefined;
+                })
+                | null,
+        ): Promise;
+        /**
+         * Asynchronous mkdir(2) - create a directory.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders
+         * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`.
+         */
+        function __promisify__(
+            path: PathLike,
+            options?: Mode | MakeDirectoryOptions | null,
+        ): Promise;
+    }
+    /**
+     * Synchronously creates a directory. Returns `undefined`, or if `recursive` is `true`, the first directory path created.
+     * This is the synchronous version of {@link mkdir}.
+     *
+     * See the POSIX [`mkdir(2)`](http://man7.org/linux/man-pages/man2/mkdir.2.html) documentation for more details.
+     * @since v0.1.21
+     */
+    export function mkdirSync(
+        path: PathLike,
+        options: MakeDirectoryOptions & {
+            recursive: true;
+        },
+    ): string | undefined;
+    /**
+     * Synchronous mkdir(2) - create a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders
+     * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`.
+     */
+    export function mkdirSync(
+        path: PathLike,
+        options?:
+            | Mode
+            | (MakeDirectoryOptions & {
+                recursive?: false | undefined;
+            })
+            | null,
+    ): void;
+    /**
+     * Synchronous mkdir(2) - create a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders
+     * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`.
+     */
+    export function mkdirSync(path: PathLike, options?: Mode | MakeDirectoryOptions | null): string | undefined;
+    /**
+     * Creates a unique temporary directory.
+     *
+     * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory. Due to platform
+     * inconsistencies, avoid trailing `X` characters in `prefix`. Some platforms,
+     * notably the BSDs, can return more than six random characters, and replace
+     * trailing `X` characters in `prefix` with random characters.
+     *
+     * The created directory path is passed as a string to the callback's second
+     * parameter.
+     *
+     * The optional `options` argument can be a string specifying an encoding, or an
+     * object with an `encoding` property specifying the character encoding to use.
+     *
+     * ```js
+     * import { mkdtemp } from 'node:fs';
+     * import { join } from 'node:path';
+     * import { tmpdir } from 'node:os';
+     *
+     * mkdtemp(join(tmpdir(), 'foo-'), (err, directory) => {
+     *   if (err) throw err;
+     *   console.log(directory);
+     *   // Prints: /tmp/foo-itXde2 or C:\Users\...\AppData\Local\Temp\foo-itXde2
+     * });
+     * ```
+     *
+     * The `fs.mkdtemp()` method will append the six randomly selected characters
+     * directly to the `prefix` string. For instance, given a directory `/tmp`, if the
+     * intention is to create a temporary directory _within_`/tmp`, the `prefix`must end with a trailing platform-specific path separator
+     * (`import { sep } from 'node:path'`).
+     *
+     * ```js
+     * import { tmpdir } from 'node:os';
+     * import { mkdtemp } from 'node:fs';
+     *
+     * // The parent directory for the new temporary directory
+     * const tmpDir = tmpdir();
+     *
+     * // This method is *INCORRECT*:
+     * mkdtemp(tmpDir, (err, directory) => {
+     *   if (err) throw err;
+     *   console.log(directory);
+     *   // Will print something similar to `/tmpabc123`.
+     *   // A new temporary directory is created at the file system root
+     *   // rather than *within* the /tmp directory.
+     * });
+     *
+     * // This method is *CORRECT*:
+     * import { sep } from 'node:path';
+     * mkdtemp(`${tmpDir}${sep}`, (err, directory) => {
+     *   if (err) throw err;
+     *   console.log(directory);
+     *   // Will print something similar to `/tmp/abc123`.
+     *   // A new temporary directory is created within
+     *   // the /tmp directory.
+     * });
+     * ```
+     * @since v5.10.0
+     */
+    export function mkdtemp(
+        prefix: string,
+        options: EncodingOption,
+        callback: (err: NodeJS.ErrnoException | null, folder: string) => void,
+    ): void;
+    /**
+     * Asynchronously creates a unique temporary directory.
+     * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    export function mkdtemp(
+        prefix: string,
+        options: BufferEncodingOption,
+        callback: (err: NodeJS.ErrnoException | null, folder: NonSharedBuffer) => void,
+    ): void;
+    /**
+     * Asynchronously creates a unique temporary directory.
+     * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    export function mkdtemp(
+        prefix: string,
+        options: EncodingOption,
+        callback: (err: NodeJS.ErrnoException | null, folder: string | NonSharedBuffer) => void,
+    ): void;
+    /**
+     * Asynchronously creates a unique temporary directory.
+     * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
+     */
+    export function mkdtemp(
+        prefix: string,
+        callback: (err: NodeJS.ErrnoException | null, folder: string) => void,
+    ): void;
+    export namespace mkdtemp {
+        /**
+         * Asynchronously creates a unique temporary directory.
+         * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(prefix: string, options?: EncodingOption): Promise;
+        /**
+         * Asynchronously creates a unique temporary directory.
+         * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(prefix: string, options: BufferEncodingOption): Promise;
+        /**
+         * Asynchronously creates a unique temporary directory.
+         * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(prefix: string, options?: EncodingOption): Promise;
+    }
+    /**
+     * Returns the created directory path.
+     *
+     * For detailed information, see the documentation of the asynchronous version of
+     * this API: {@link mkdtemp}.
+     *
+     * The optional `options` argument can be a string specifying an encoding, or an
+     * object with an `encoding` property specifying the character encoding to use.
+     * @since v5.10.0
+     */
+    export function mkdtempSync(prefix: string, options?: EncodingOption): string;
+    /**
+     * Synchronously creates a unique temporary directory.
+     * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    export function mkdtempSync(prefix: string, options: BufferEncodingOption): NonSharedBuffer;
+    /**
+     * Synchronously creates a unique temporary directory.
+     * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    export function mkdtempSync(prefix: string, options?: EncodingOption): string | NonSharedBuffer;
+    export interface DisposableTempDir extends AsyncDisposable {
+        /**
+         * The path of the created directory.
+         */
+        path: string;
+        /**
+         * A function which removes the created directory.
+         */
+        remove(): Promise;
+        /**
+         * The same as `remove`.
+         */
+        [Symbol.asyncDispose](): Promise;
+    }
+    /**
+     * Returns a disposable object whose `path` property holds the created directory
+     * path. When the object is disposed, the directory and its contents will be
+     * removed if it still exists. If the directory cannot be deleted, disposal will
+     * throw an error. The object has a `remove()` method which will perform the same
+     * task.
+     *
+     * 
+     *
+     * For detailed information, see the documentation of `fs.mkdtemp()`.
+     *
+     * There is no callback-based version of this API because it is designed for use
+     * with the `using` syntax.
+     *
+     * The optional `options` argument can be a string specifying an encoding, or an
+     * object with an `encoding` property specifying the character encoding to use.
+     * @since v24.4.0
+     */
+    export function mkdtempDisposableSync(prefix: string, options?: EncodingOption): DisposableTempDir;
+    /**
+     * Reads the contents of a directory. The callback gets two arguments `(err, files)` where `files` is an array of the names of the files in the directory excluding `'.'` and `'..'`.
+     *
+     * See the POSIX [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) documentation for more details.
+     *
+     * The optional `options` argument can be a string specifying an encoding, or an
+     * object with an `encoding` property specifying the character encoding to use for
+     * the filenames passed to the callback. If the `encoding` is set to `'buffer'`,
+     * the filenames returned will be passed as `Buffer` objects.
+     *
+     * If `options.withFileTypes` is set to `true`, the `files` array will contain `fs.Dirent` objects.
+     * @since v0.1.8
+     */
+    export function readdir(
+        path: PathLike,
+        options:
+            | {
+                encoding: BufferEncoding | null;
+                withFileTypes?: false | undefined;
+                recursive?: boolean | undefined;
+            }
+            | BufferEncoding
+            | undefined
+            | null,
+        callback: (err: NodeJS.ErrnoException | null, files: string[]) => void,
+    ): void;
+    /**
+     * Asynchronous readdir(3) - read a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    export function readdir(
+        path: PathLike,
+        options:
+            | {
+                encoding: "buffer";
+                withFileTypes?: false | undefined;
+                recursive?: boolean | undefined;
+            }
+            | "buffer",
+        callback: (err: NodeJS.ErrnoException | null, files: NonSharedBuffer[]) => void,
+    ): void;
+    /**
+     * Asynchronous readdir(3) - read a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    export function readdir(
+        path: PathLike,
+        options:
+            | (ObjectEncodingOptions & {
+                withFileTypes?: false | undefined;
+                recursive?: boolean | undefined;
+            })
+            | BufferEncoding
+            | undefined
+            | null,
+        callback: (err: NodeJS.ErrnoException | null, files: string[] | NonSharedBuffer[]) => void,
+    ): void;
+    /**
+     * Asynchronous readdir(3) - read a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    export function readdir(
+        path: PathLike,
+        callback: (err: NodeJS.ErrnoException | null, files: string[]) => void,
+    ): void;
+    /**
+     * Asynchronous readdir(3) - read a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options If called with `withFileTypes: true` the result data will be an array of Dirent.
+     */
+    export function readdir(
+        path: PathLike,
+        options: ObjectEncodingOptions & {
+            withFileTypes: true;
+            recursive?: boolean | undefined;
+        },
+        callback: (err: NodeJS.ErrnoException | null, files: Dirent[]) => void,
+    ): void;
+    /**
+     * Asynchronous readdir(3) - read a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options Must include `withFileTypes: true` and `encoding: 'buffer'`.
+     */
+    export function readdir(
+        path: PathLike,
+        options: {
+            encoding: "buffer";
+            withFileTypes: true;
+            recursive?: boolean | undefined;
+        },
+        callback: (err: NodeJS.ErrnoException | null, files: Dirent[]) => void,
+    ): void;
+    export namespace readdir {
+        /**
+         * Asynchronous readdir(3) - read a directory.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(
+            path: PathLike,
+            options?:
+                | {
+                    encoding: BufferEncoding | null;
+                    withFileTypes?: false | undefined;
+                    recursive?: boolean | undefined;
+                }
+                | BufferEncoding
+                | null,
+        ): Promise;
+        /**
+         * Asynchronous readdir(3) - read a directory.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(
+            path: PathLike,
+            options:
+                | "buffer"
+                | {
+                    encoding: "buffer";
+                    withFileTypes?: false | undefined;
+                    recursive?: boolean | undefined;
+                },
+        ): Promise;
+        /**
+         * Asynchronous readdir(3) - read a directory.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+         */
+        function __promisify__(
+            path: PathLike,
+            options?:
+                | (ObjectEncodingOptions & {
+                    withFileTypes?: false | undefined;
+                    recursive?: boolean | undefined;
+                })
+                | BufferEncoding
+                | null,
+        ): Promise;
+        /**
+         * Asynchronous readdir(3) - read a directory.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options If called with `withFileTypes: true` the result data will be an array of Dirent
+         */
+        function __promisify__(
+            path: PathLike,
+            options: ObjectEncodingOptions & {
+                withFileTypes: true;
+                recursive?: boolean | undefined;
+            },
+        ): Promise;
+        /**
+         * Asynchronous readdir(3) - read a directory.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param options Must include `withFileTypes: true` and `encoding: 'buffer'`.
+         */
+        function __promisify__(
+            path: PathLike,
+            options: {
+                encoding: "buffer";
+                withFileTypes: true;
+                recursive?: boolean | undefined;
+            },
+        ): Promise[]>;
+    }
+    /**
+     * Reads the contents of the directory.
+     *
+     * See the POSIX [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) documentation for more details.
+     *
+     * The optional `options` argument can be a string specifying an encoding, or an
+     * object with an `encoding` property specifying the character encoding to use for
+     * the filenames returned. If the `encoding` is set to `'buffer'`,
+     * the filenames returned will be passed as `Buffer` objects.
+     *
+     * If `options.withFileTypes` is set to `true`, the result will contain `fs.Dirent` objects.
+     * @since v0.1.21
+     */
+    export function readdirSync(
+        path: PathLike,
+        options?:
+            | {
+                encoding: BufferEncoding | null;
+                withFileTypes?: false | undefined;
+                recursive?: boolean | undefined;
+            }
+            | BufferEncoding
+            | null,
+    ): string[];
+    /**
+     * Synchronous readdir(3) - read a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    export function readdirSync(
+        path: PathLike,
+        options:
+            | {
+                encoding: "buffer";
+                withFileTypes?: false | undefined;
+                recursive?: boolean | undefined;
+            }
+            | "buffer",
+    ): NonSharedBuffer[];
+    /**
+     * Synchronous readdir(3) - read a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    export function readdirSync(
+        path: PathLike,
+        options?:
+            | (ObjectEncodingOptions & {
+                withFileTypes?: false | undefined;
+                recursive?: boolean | undefined;
+            })
+            | BufferEncoding
+            | null,
+    ): string[] | NonSharedBuffer[];
+    /**
+     * Synchronous readdir(3) - read a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options If called with `withFileTypes: true` the result data will be an array of Dirent.
+     */
+    export function readdirSync(
+        path: PathLike,
+        options: ObjectEncodingOptions & {
+            withFileTypes: true;
+            recursive?: boolean | undefined;
+        },
+    ): Dirent[];
+    /**
+     * Synchronous readdir(3) - read a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options Must include `withFileTypes: true` and `encoding: 'buffer'`.
+     */
+    export function readdirSync(
+        path: PathLike,
+        options: {
+            encoding: "buffer";
+            withFileTypes: true;
+            recursive?: boolean | undefined;
+        },
+    ): Dirent[];
+    /**
+     * Closes the file descriptor. No arguments other than a possible exception are
+     * given to the completion callback.
+     *
+     * Calling `fs.close()` on any file descriptor (`fd`) that is currently in use
+     * through any other `fs` operation may lead to undefined behavior.
+     *
+     * See the POSIX [`close(2)`](http://man7.org/linux/man-pages/man2/close.2.html) documentation for more detail.
+     * @since v0.0.2
+     */
+    export function close(fd: number, callback?: NoParamCallback): void;
+    export namespace close {
+        /**
+         * Asynchronous close(2) - close a file descriptor.
+         * @param fd A file descriptor.
+         */
+        function __promisify__(fd: number): Promise;
+    }
+    /**
+     * Closes the file descriptor. Returns `undefined`.
+     *
+     * Calling `fs.closeSync()` on any file descriptor (`fd`) that is currently in use
+     * through any other `fs` operation may lead to undefined behavior.
+     *
+     * See the POSIX [`close(2)`](http://man7.org/linux/man-pages/man2/close.2.html) documentation for more detail.
+     * @since v0.1.21
+     */
+    export function closeSync(fd: number): void;
+    /**
+     * Asynchronous file open. See the POSIX [`open(2)`](http://man7.org/linux/man-pages/man2/open.2.html) documentation for more details.
+     *
+     * `mode` sets the file mode (permission and sticky bits), but only if the file was
+     * created. On Windows, only the write permission can be manipulated; see {@link chmod}.
+     *
+     * The callback gets two arguments `(err, fd)`.
+     *
+     * Some characters (`< > : " / \ | ? *`) are reserved under Windows as documented
+     * by [Naming Files, Paths, and Namespaces](https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file). Under NTFS, if the filename contains
+     * a colon, Node.js will open a file system stream, as described by [this MSDN page](https://docs.microsoft.com/en-us/windows/desktop/FileIO/using-streams).
+     *
+     * Functions based on `fs.open()` exhibit this behavior as well:`fs.writeFile()`, `fs.readFile()`, etc.
+     * @since v0.0.2
+     * @param [flags='r'] See `support of file system `flags``.
+     * @param [mode=0o666]
+     */
+    export function open(
+        path: PathLike,
+        flags: OpenMode | undefined,
+        mode: Mode | undefined | null,
+        callback: (err: NodeJS.ErrnoException | null, fd: number) => void,
+    ): void;
+    /**
+     * Asynchronous open(2) - open and possibly create a file. If the file is created, its mode will be `0o666`.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param [flags='r'] See `support of file system `flags``.
+     */
+    export function open(
+        path: PathLike,
+        flags: OpenMode | undefined,
+        callback: (err: NodeJS.ErrnoException | null, fd: number) => void,
+    ): void;
+    /**
+     * Asynchronous open(2) - open and possibly create a file. If the file is created, its mode will be `0o666`.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     */
+    export function open(path: PathLike, callback: (err: NodeJS.ErrnoException | null, fd: number) => void): void;
+    export namespace open {
+        /**
+         * Asynchronous open(2) - open and possibly create a file.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param mode A file mode. If a string is passed, it is parsed as an octal integer. If not supplied, defaults to `0o666`.
+         */
+        function __promisify__(path: PathLike, flags: OpenMode, mode?: Mode | null): Promise;
+    }
+    /**
+     * Returns an integer representing the file descriptor.
+     *
+     * For detailed information, see the documentation of the asynchronous version of
+     * this API: {@link open}.
+     * @since v0.1.21
+     * @param [flags='r']
+     * @param [mode=0o666]
+     */
+    export function openSync(path: PathLike, flags: OpenMode, mode?: Mode | null): number;
+    /**
+     * Change the file system timestamps of the object referenced by `path`.
+     *
+     * The `atime` and `mtime` arguments follow these rules:
+     *
+     * * Values can be either numbers representing Unix epoch time in seconds, `Date`s, or a numeric string like `'123456789.0'`.
+     * * If the value can not be converted to a number, or is `NaN`, `Infinity`, or `-Infinity`, an `Error` will be thrown.
+     * @since v0.4.2
+     */
+    export function utimes(path: PathLike, atime: TimeLike, mtime: TimeLike, callback: NoParamCallback): void;
+    export namespace utimes {
+        /**
+         * Asynchronously change file timestamps of the file referenced by the supplied path.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * @param atime The last access time. If a string is provided, it will be coerced to number.
+         * @param mtime The last modified time. If a string is provided, it will be coerced to number.
+         */
+        function __promisify__(path: PathLike, atime: TimeLike, mtime: TimeLike): Promise;
+    }
+    /**
+     * Returns `undefined`.
+     *
+     * For detailed information, see the documentation of the asynchronous version of
+     * this API: {@link utimes}.
+     * @since v0.4.2
+     */
+    export function utimesSync(path: PathLike, atime: TimeLike, mtime: TimeLike): void;
+    /**
+     * Change the file system timestamps of the object referenced by the supplied file
+     * descriptor. See {@link utimes}.
+     * @since v0.4.2
+     */
+    export function futimes(fd: number, atime: TimeLike, mtime: TimeLike, callback: NoParamCallback): void;
+    export namespace futimes {
+        /**
+         * Asynchronously change file timestamps of the file referenced by the supplied file descriptor.
+         * @param fd A file descriptor.
+         * @param atime The last access time. If a string is provided, it will be coerced to number.
+         * @param mtime The last modified time. If a string is provided, it will be coerced to number.
+         */
+        function __promisify__(fd: number, atime: TimeLike, mtime: TimeLike): Promise;
+    }
+    /**
+     * Synchronous version of {@link futimes}. Returns `undefined`.
+     * @since v0.4.2
+     */
+    export function futimesSync(fd: number, atime: TimeLike, mtime: TimeLike): void;
+    /**
+     * Request that all data for the open file descriptor is flushed to the storage
+     * device. The specific implementation is operating system and device specific.
+     * Refer to the POSIX [`fsync(2)`](http://man7.org/linux/man-pages/man2/fsync.2.html) documentation for more detail. No arguments other
+     * than a possible exception are given to the completion callback.
+     * @since v0.1.96
+     */
+    export function fsync(fd: number, callback: NoParamCallback): void;
+    export namespace fsync {
+        /**
+         * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device.
+         * @param fd A file descriptor.
+         */
+        function __promisify__(fd: number): Promise;
+    }
+    /**
+     * Request that all data for the open file descriptor is flushed to the storage
+     * device. The specific implementation is operating system and device specific.
+     * Refer to the POSIX [`fsync(2)`](http://man7.org/linux/man-pages/man2/fsync.2.html) documentation for more detail. Returns `undefined`.
+     * @since v0.1.96
+     */
+    export function fsyncSync(fd: number): void;
+    export interface WriteOptions {
+        /**
+         * @default 0
+         */
+        offset?: number | undefined;
+        /**
+         * @default `buffer.byteLength - offset`
+         */
+        length?: number | undefined;
+        /**
+         * @default null
+         */
+        position?: number | null | undefined;
+    }
+    /**
+     * Write `buffer` to the file specified by `fd`.
+     *
+     * `offset` determines the part of the buffer to be written, and `length` is
+     * an integer specifying the number of bytes to write.
+     *
+     * `position` refers to the offset from the beginning of the file where this data
+     * should be written. If `typeof position !== 'number'`, the data will be written
+     * at the current position. See [`pwrite(2)`](http://man7.org/linux/man-pages/man2/pwrite.2.html).
+     *
+     * The callback will be given three arguments `(err, bytesWritten, buffer)` where `bytesWritten` specifies how many _bytes_ were written from `buffer`.
+     *
+     * If this method is invoked as its `util.promisify()` ed version, it returns
+     * a promise for an `Object` with `bytesWritten` and `buffer` properties.
+     *
+     * It is unsafe to use `fs.write()` multiple times on the same file without waiting
+     * for the callback. For this scenario, {@link createWriteStream} is
+     * recommended.
+     *
+     * On Linux, positional writes don't work when the file is opened in append mode.
+     * The kernel ignores the position argument and always appends the data to
+     * the end of the file.
+     * @since v0.0.2
+     * @param [offset=0]
+     * @param [length=buffer.byteLength - offset]
+     * @param [position='null']
+     */
+    export function write(
+        fd: number,
+        buffer: TBuffer,
+        offset: number | undefined | null,
+        length: number | undefined | null,
+        position: number | undefined | null,
+        callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void,
+    ): void;
+    /**
+     * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor.
+     * @param fd A file descriptor.
+     * @param offset The part of the buffer to be written. If not supplied, defaults to `0`.
+     * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`.
+     */
+    export function write(
+        fd: number,
+        buffer: TBuffer,
+        offset: number | undefined | null,
+        length: number | undefined | null,
+        callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void,
+    ): void;
+    /**
+     * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor.
+     * @param fd A file descriptor.
+     * @param offset The part of the buffer to be written. If not supplied, defaults to `0`.
+     */
+    export function write(
+        fd: number,
+        buffer: TBuffer,
+        offset: number | undefined | null,
+        callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void,
+    ): void;
+    /**
+     * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor.
+     * @param fd A file descriptor.
+     */
+    export function write(
+        fd: number,
+        buffer: TBuffer,
+        callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void,
+    ): void;
+    /**
+     * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor.
+     * @param fd A file descriptor.
+     * @param options An object with the following properties:
+     * * `offset` The part of the buffer to be written. If not supplied, defaults to `0`.
+     * * `length` The number of bytes to write. If not supplied, defaults to `buffer.length - offset`.
+     * * `position` The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
+     */
+    export function write(
+        fd: number,
+        buffer: TBuffer,
+        options: WriteOptions,
+        callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void,
+    ): void;
+    /**
+     * Asynchronously writes `string` to the file referenced by the supplied file descriptor.
+     * @param fd A file descriptor.
+     * @param string A string to write.
+     * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
+     * @param encoding The expected string encoding.
+     */
+    export function write(
+        fd: number,
+        string: string,
+        position: number | undefined | null,
+        encoding: BufferEncoding | undefined | null,
+        callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void,
+    ): void;
+    /**
+     * Asynchronously writes `string` to the file referenced by the supplied file descriptor.
+     * @param fd A file descriptor.
+     * @param string A string to write.
+     * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
+     */
+    export function write(
+        fd: number,
+        string: string,
+        position: number | undefined | null,
+        callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void,
+    ): void;
+    /**
+     * Asynchronously writes `string` to the file referenced by the supplied file descriptor.
+     * @param fd A file descriptor.
+     * @param string A string to write.
+     */
+    export function write(
+        fd: number,
+        string: string,
+        callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void,
+    ): void;
+    export namespace write {
+        /**
+         * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor.
+         * @param fd A file descriptor.
+         * @param offset The part of the buffer to be written. If not supplied, defaults to `0`.
+         * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`.
+         * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
+         */
+        function __promisify__(
+            fd: number,
+            buffer?: TBuffer,
+            offset?: number,
+            length?: number,
+            position?: number | null,
+        ): Promise<{
+            bytesWritten: number;
+            buffer: TBuffer;
+        }>;
+        /**
+         * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor.
+         * @param fd A file descriptor.
+         * @param options An object with the following properties:
+         * * `offset` The part of the buffer to be written. If not supplied, defaults to `0`.
+         * * `length` The number of bytes to write. If not supplied, defaults to `buffer.length - offset`.
+         * * `position` The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
+         */
+        function __promisify__(
+            fd: number,
+            buffer?: TBuffer,
+            options?: WriteOptions,
+        ): Promise<{
+            bytesWritten: number;
+            buffer: TBuffer;
+        }>;
+        /**
+         * Asynchronously writes `string` to the file referenced by the supplied file descriptor.
+         * @param fd A file descriptor.
+         * @param string A string to write.
+         * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
+         * @param encoding The expected string encoding.
+         */
+        function __promisify__(
+            fd: number,
+            string: string,
+            position?: number | null,
+            encoding?: BufferEncoding | null,
+        ): Promise<{
+            bytesWritten: number;
+            buffer: string;
+        }>;
+    }
+    /**
+     * For detailed information, see the documentation of the asynchronous version of
+     * this API: {@link write}.
+     * @since v0.1.21
+     * @param [offset=0]
+     * @param [length=buffer.byteLength - offset]
+     * @param [position='null']
+     * @return The number of bytes written.
+     */
+    export function writeSync(
+        fd: number,
+        buffer: NodeJS.ArrayBufferView,
+        offset?: number | null,
+        length?: number | null,
+        position?: number | null,
+    ): number;
+    /**
+     * Synchronously writes `string` to the file referenced by the supplied file descriptor, returning the number of bytes written.
+     * @param fd A file descriptor.
+     * @param string A string to write.
+     * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
+     * @param encoding The expected string encoding.
+     */
+    export function writeSync(
+        fd: number,
+        string: string,
+        position?: number | null,
+        encoding?: BufferEncoding | null,
+    ): number;
+    export type ReadPosition = number | bigint;
+    export interface ReadOptions {
+        /**
+         * @default 0
+         */
+        offset?: number | undefined;
+        /**
+         * @default `length of buffer`
+         */
+        length?: number | undefined;
+        /**
+         * @default null
+         */
+        position?: ReadPosition | null | undefined;
+    }
+    export interface ReadOptionsWithBuffer extends ReadOptions {
+        buffer?: T | undefined;
+    }
+    /** @deprecated Use `ReadOptions` instead. */
+    // TODO: remove in future major
+    export interface ReadSyncOptions extends ReadOptions {}
+    /** @deprecated Use `ReadOptionsWithBuffer` instead. */
+    // TODO: remove in future major
+    export interface ReadAsyncOptions extends ReadOptionsWithBuffer {}
+    /**
+     * Read data from the file specified by `fd`.
+     *
+     * The callback is given the three arguments, `(err, bytesRead, buffer)`.
+     *
+     * If the file is not modified concurrently, the end-of-file is reached when the
+     * number of bytes read is zero.
+     *
+     * If this method is invoked as its `util.promisify()` ed version, it returns
+     * a promise for an `Object` with `bytesRead` and `buffer` properties.
+     * @since v0.0.2
+     * @param buffer The buffer that the data will be written to.
+     * @param offset The position in `buffer` to write the data to.
+     * @param length The number of bytes to read.
+     * @param position Specifies where to begin reading from in the file. If `position` is `null` or `-1 `, data will be read from the current file position, and the file position will be updated. If
+     * `position` is an integer, the file position will be unchanged.
+     */
+    export function read(
+        fd: number,
+        buffer: TBuffer,
+        offset: number,
+        length: number,
+        position: ReadPosition | null,
+        callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: TBuffer) => void,
+    ): void;
+    /**
+     * Similar to the above `fs.read` function, this version takes an optional `options` object.
+     * If not otherwise specified in an `options` object,
+     * `buffer` defaults to `Buffer.alloc(16384)`,
+     * `offset` defaults to `0`,
+     * `length` defaults to `buffer.byteLength`, `- offset` as of Node 17.6.0
+     * `position` defaults to `null`
+     * @since v12.17.0, 13.11.0
+     */
+    export function read(
+        fd: number,
+        options: ReadOptionsWithBuffer,
+        callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: TBuffer) => void,
+    ): void;
+    export function read(
+        fd: number,
+        buffer: TBuffer,
+        options: ReadOptions,
+        callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: TBuffer) => void,
+    ): void;
+    export function read(
+        fd: number,
+        buffer: TBuffer,
+        callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: TBuffer) => void,
+    ): void;
+    export function read(
+        fd: number,
+        callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: NonSharedBuffer) => void,
+    ): void;
+    export namespace read {
+        /**
+         * @param fd A file descriptor.
+         * @param buffer The buffer that the data will be written to.
+         * @param offset The offset in the buffer at which to start writing.
+         * @param length The number of bytes to read.
+         * @param position The offset from the beginning of the file from which data should be read. If `null`, data will be read from the current position.
+         */
+        function __promisify__(
+            fd: number,
+            buffer: TBuffer,
+            offset: number,
+            length: number,
+            position: ReadPosition | null,
+        ): Promise<{
+            bytesRead: number;
+            buffer: TBuffer;
+        }>;
+        function __promisify__(
+            fd: number,
+            options: ReadOptionsWithBuffer,
+        ): Promise<{
+            bytesRead: number;
+            buffer: TBuffer;
+        }>;
+        function __promisify__(fd: number): Promise<{
+            bytesRead: number;
+            buffer: NonSharedBuffer;
+        }>;
+    }
+    /**
+     * Returns the number of `bytesRead`.
+     *
+     * For detailed information, see the documentation of the asynchronous version of
+     * this API: {@link read}.
+     * @since v0.1.21
+     * @param [position='null']
+     */
+    export function readSync(
+        fd: number,
+        buffer: NodeJS.ArrayBufferView,
+        offset: number,
+        length: number,
+        position: ReadPosition | null,
+    ): number;
+    /**
+     * Similar to the above `fs.readSync` function, this version takes an optional `options` object.
+     * If no `options` object is specified, it will default with the above values.
+     */
+    export function readSync(fd: number, buffer: NodeJS.ArrayBufferView, opts?: ReadOptions): number;
+    /**
+     * Asynchronously reads the entire contents of a file.
+     *
+     * ```js
+     * import { readFile } from 'node:fs';
+     *
+     * readFile('/etc/passwd', (err, data) => {
+     *   if (err) throw err;
+     *   console.log(data);
+     * });
+     * ```
+     *
+     * The callback is passed two arguments `(err, data)`, where `data` is the
+     * contents of the file.
+     *
+     * If no encoding is specified, then the raw buffer is returned.
+     *
+     * If `options` is a string, then it specifies the encoding:
+     *
+     * ```js
+     * import { readFile } from 'node:fs';
+     *
+     * readFile('/etc/passwd', 'utf8', callback);
+     * ```
+     *
+     * When the path is a directory, the behavior of `fs.readFile()` and {@link readFileSync} is platform-specific. On macOS, Linux, and Windows, an
+     * error will be returned. On FreeBSD, a representation of the directory's contents
+     * will be returned.
+     *
+     * ```js
+     * import { readFile } from 'node:fs';
+     *
+     * // macOS, Linux, and Windows
+     * readFile('', (err, data) => {
+     *   // => [Error: EISDIR: illegal operation on a directory, read ]
+     * });
+     *
+     * //  FreeBSD
+     * readFile('', (err, data) => {
+     *   // => null, 
+     * });
+     * ```
+     *
+     * It is possible to abort an ongoing request using an `AbortSignal`. If a
+     * request is aborted the callback is called with an `AbortError`:
+     *
+     * ```js
+     * import { readFile } from 'node:fs';
+     *
+     * const controller = new AbortController();
+     * const signal = controller.signal;
+     * readFile(fileInfo[0].name, { signal }, (err, buf) => {
+     *   // ...
+     * });
+     * // When you want to abort the request
+     * controller.abort();
+     * ```
+     *
+     * The `fs.readFile()` function buffers the entire file. To minimize memory costs,
+     * when possible prefer streaming via `fs.createReadStream()`.
+     *
+     * Aborting an ongoing request does not abort individual operating
+     * system requests but rather the internal buffering `fs.readFile` performs.
+     * @since v0.1.29
+     * @param path filename or file descriptor
+     */
+    export function readFile(
+        path: PathOrFileDescriptor,
+        options:
+            | ({
+                encoding?: null | undefined;
+                flag?: string | undefined;
+            } & Abortable)
+            | undefined
+            | null,
+        callback: (err: NodeJS.ErrnoException | null, data: NonSharedBuffer) => void,
+    ): void;
+    /**
+     * Asynchronously reads the entire contents of a file.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+     * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag.
+     * If a flag is not provided, it defaults to `'r'`.
+     */
+    export function readFile(
+        path: PathOrFileDescriptor,
+        options:
+            | ({
+                encoding: BufferEncoding;
+                flag?: string | undefined;
+            } & Abortable)
+            | BufferEncoding,
+        callback: (err: NodeJS.ErrnoException | null, data: string) => void,
+    ): void;
+    /**
+     * Asynchronously reads the entire contents of a file.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+     * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag.
+     * If a flag is not provided, it defaults to `'r'`.
+     */
+    export function readFile(
+        path: PathOrFileDescriptor,
+        options:
+            | (ObjectEncodingOptions & {
+                flag?: string | undefined;
+            } & Abortable)
+            | BufferEncoding
+            | undefined
+            | null,
+        callback: (err: NodeJS.ErrnoException | null, data: string | NonSharedBuffer) => void,
+    ): void;
+    /**
+     * Asynchronously reads the entire contents of a file.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+     */
+    export function readFile(
+        path: PathOrFileDescriptor,
+        callback: (err: NodeJS.ErrnoException | null, data: NonSharedBuffer) => void,
+    ): void;
+    export namespace readFile {
+        /**
+         * Asynchronously reads the entire contents of a file.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+         * @param options An object that may contain an optional flag.
+         * If a flag is not provided, it defaults to `'r'`.
+         */
+        function __promisify__(
+            path: PathOrFileDescriptor,
+            options?: {
+                encoding?: null | undefined;
+                flag?: string | undefined;
+            } | null,
+        ): Promise;
+        /**
+         * Asynchronously reads the entire contents of a file.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * URL support is _experimental_.
+         * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+         * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag.
+         * If a flag is not provided, it defaults to `'r'`.
+         */
+        function __promisify__(
+            path: PathOrFileDescriptor,
+            options:
+                | {
+                    encoding: BufferEncoding;
+                    flag?: string | undefined;
+                }
+                | BufferEncoding,
+        ): Promise;
+        /**
+         * Asynchronously reads the entire contents of a file.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * URL support is _experimental_.
+         * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+         * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag.
+         * If a flag is not provided, it defaults to `'r'`.
+         */
+        function __promisify__(
+            path: PathOrFileDescriptor,
+            options?:
+                | (ObjectEncodingOptions & {
+                    flag?: string | undefined;
+                })
+                | BufferEncoding
+                | null,
+        ): Promise;
+    }
+    /**
+     * Returns the contents of the `path`.
+     *
+     * For detailed information, see the documentation of the asynchronous version of
+     * this API: {@link readFile}.
+     *
+     * If the `encoding` option is specified then this function returns a
+     * string. Otherwise it returns a buffer.
+     *
+     * Similar to {@link readFile}, when the path is a directory, the behavior of `fs.readFileSync()` is platform-specific.
+     *
+     * ```js
+     * import { readFileSync } from 'node:fs';
+     *
+     * // macOS, Linux, and Windows
+     * readFileSync('');
+     * // => [Error: EISDIR: illegal operation on a directory, read ]
+     *
+     * //  FreeBSD
+     * readFileSync(''); // => 
+     * ```
+     * @since v0.1.8
+     * @param path filename or file descriptor
+     */
+    export function readFileSync(
+        path: PathOrFileDescriptor,
+        options?: {
+            encoding?: null | undefined;
+            flag?: string | undefined;
+        } | null,
+    ): NonSharedBuffer;
+    /**
+     * Synchronously reads the entire contents of a file.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+     * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag.
+     * If a flag is not provided, it defaults to `'r'`.
+     */
+    export function readFileSync(
+        path: PathOrFileDescriptor,
+        options:
+            | {
+                encoding: BufferEncoding;
+                flag?: string | undefined;
+            }
+            | BufferEncoding,
+    ): string;
+    /**
+     * Synchronously reads the entire contents of a file.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+     * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag.
+     * If a flag is not provided, it defaults to `'r'`.
+     */
+    export function readFileSync(
+        path: PathOrFileDescriptor,
+        options?:
+            | (ObjectEncodingOptions & {
+                flag?: string | undefined;
+            })
+            | BufferEncoding
+            | null,
+    ): string | NonSharedBuffer;
+    export type WriteFileOptions =
+        | (
+            & ObjectEncodingOptions
+            & Abortable
+            & {
+                mode?: Mode | undefined;
+                flag?: string | undefined;
+                flush?: boolean | undefined;
+            }
+        )
+        | BufferEncoding
+        | null;
+    /**
+     * When `file` is a filename, asynchronously writes data to the file, replacing the
+     * file if it already exists. `data` can be a string or a buffer.
+     *
+     * When `file` is a file descriptor, the behavior is similar to calling `fs.write()` directly (which is recommended). See the notes below on using
+     * a file descriptor.
+     *
+     * The `encoding` option is ignored if `data` is a buffer.
+     *
+     * The `mode` option only affects the newly created file. See {@link open} for more details.
+     *
+     * ```js
+     * import { writeFile } from 'node:fs';
+     * import { Buffer } from 'node:buffer';
+     *
+     * const data = new Uint8Array(Buffer.from('Hello Node.js'));
+     * writeFile('message.txt', data, (err) => {
+     *   if (err) throw err;
+     *   console.log('The file has been saved!');
+     * });
+     * ```
+     *
+     * If `options` is a string, then it specifies the encoding:
+     *
+     * ```js
+     * import { writeFile } from 'node:fs';
+     *
+     * writeFile('message.txt', 'Hello Node.js', 'utf8', callback);
+     * ```
+     *
+     * It is unsafe to use `fs.writeFile()` multiple times on the same file without
+     * waiting for the callback. For this scenario, {@link createWriteStream} is
+     * recommended.
+     *
+     * Similarly to `fs.readFile` \- `fs.writeFile` is a convenience method that
+     * performs multiple `write` calls internally to write the buffer passed to it.
+     * For performance sensitive code consider using {@link createWriteStream}.
+     *
+     * It is possible to use an `AbortSignal` to cancel an `fs.writeFile()`.
+     * Cancelation is "best effort", and some amount of data is likely still
+     * to be written.
+     *
+     * ```js
+     * import { writeFile } from 'node:fs';
+     * import { Buffer } from 'node:buffer';
+     *
+     * const controller = new AbortController();
+     * const { signal } = controller;
+     * const data = new Uint8Array(Buffer.from('Hello Node.js'));
+     * writeFile('message.txt', data, { signal }, (err) => {
+     *   // When a request is aborted - the callback is called with an AbortError
+     * });
+     * // When the request should be aborted
+     * controller.abort();
+     * ```
+     *
+     * Aborting an ongoing request does not abort individual operating
+     * system requests but rather the internal buffering `fs.writeFile` performs.
+     * @since v0.1.29
+     * @param file filename or file descriptor
+     */
+    export function writeFile(
+        file: PathOrFileDescriptor,
+        data: string | NodeJS.ArrayBufferView,
+        options: WriteFileOptions,
+        callback: NoParamCallback,
+    ): void;
+    /**
+     * Asynchronously writes data to a file, replacing the file if it already exists.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+     * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string.
+     */
+    export function writeFile(
+        path: PathOrFileDescriptor,
+        data: string | NodeJS.ArrayBufferView,
+        callback: NoParamCallback,
+    ): void;
+    export namespace writeFile {
+        /**
+         * Asynchronously writes data to a file, replacing the file if it already exists.
+         * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * URL support is _experimental_.
+         * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+         * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string.
+         * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag.
+         * If `encoding` is not supplied, the default of `'utf8'` is used.
+         * If `mode` is not supplied, the default of `0o666` is used.
+         * If `mode` is a string, it is parsed as an octal integer.
+         * If `flag` is not supplied, the default of `'w'` is used.
+         */
+        function __promisify__(
+            path: PathOrFileDescriptor,
+            data: string | NodeJS.ArrayBufferView,
+            options?: WriteFileOptions,
+        ): Promise;
+    }
+    /**
+     * Returns `undefined`.
+     *
+     * The `mode` option only affects the newly created file. See {@link open} for more details.
+     *
+     * For detailed information, see the documentation of the asynchronous version of
+     * this API: {@link writeFile}.
+     * @since v0.1.29
+     * @param file filename or file descriptor
+     */
+    export function writeFileSync(
+        file: PathOrFileDescriptor,
+        data: string | NodeJS.ArrayBufferView,
+        options?: WriteFileOptions,
+    ): void;
+    /**
+     * Asynchronously append data to a file, creating the file if it does not yet
+     * exist. `data` can be a string or a `Buffer`.
+     *
+     * The `mode` option only affects the newly created file. See {@link open} for more details.
+     *
+     * ```js
+     * import { appendFile } from 'node:fs';
+     *
+     * appendFile('message.txt', 'data to append', (err) => {
+     *   if (err) throw err;
+     *   console.log('The "data to append" was appended to file!');
+     * });
+     * ```
+     *
+     * If `options` is a string, then it specifies the encoding:
+     *
+     * ```js
+     * import { appendFile } from 'node:fs';
+     *
+     * appendFile('message.txt', 'data to append', 'utf8', callback);
+     * ```
+     *
+     * The `path` may be specified as a numeric file descriptor that has been opened
+     * for appending (using `fs.open()` or `fs.openSync()`). The file descriptor will
+     * not be closed automatically.
+     *
+     * ```js
+     * import { open, close, appendFile } from 'node:fs';
+     *
+     * function closeFd(fd) {
+     *   close(fd, (err) => {
+     *     if (err) throw err;
+     *   });
+     * }
+     *
+     * open('message.txt', 'a', (err, fd) => {
+     *   if (err) throw err;
+     *
+     *   try {
+     *     appendFile(fd, 'data to append', 'utf8', (err) => {
+     *       closeFd(fd);
+     *       if (err) throw err;
+     *     });
+     *   } catch (err) {
+     *     closeFd(fd);
+     *     throw err;
+     *   }
+     * });
+     * ```
+     * @since v0.6.7
+     * @param path filename or file descriptor
+     */
+    export function appendFile(
+        path: PathOrFileDescriptor,
+        data: string | Uint8Array,
+        options: WriteFileOptions,
+        callback: NoParamCallback,
+    ): void;
+    /**
+     * Asynchronously append data to a file, creating the file if it does not exist.
+     * @param file A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+     * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string.
+     */
+    export function appendFile(file: PathOrFileDescriptor, data: string | Uint8Array, callback: NoParamCallback): void;
+    export namespace appendFile {
+        /**
+         * Asynchronously append data to a file, creating the file if it does not exist.
+         * @param file A path to a file. If a URL is provided, it must use the `file:` protocol.
+         * URL support is _experimental_.
+         * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
+         * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string.
+         * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag.
+         * If `encoding` is not supplied, the default of `'utf8'` is used.
+         * If `mode` is not supplied, the default of `0o666` is used.
+         * If `mode` is a string, it is parsed as an octal integer.
+         * If `flag` is not supplied, the default of `'a'` is used.
+         */
+        function __promisify__(
+            file: PathOrFileDescriptor,
+            data: string | Uint8Array,
+            options?: WriteFileOptions,
+        ): Promise;
+    }
+    /**
+     * Synchronously append data to a file, creating the file if it does not yet
+     * exist. `data` can be a string or a `Buffer`.
+     *
+     * The `mode` option only affects the newly created file. See {@link open} for more details.
+     *
+     * ```js
+     * import { appendFileSync } from 'node:fs';
+     *
+     * try {
+     *   appendFileSync('message.txt', 'data to append');
+     *   console.log('The "data to append" was appended to file!');
+     * } catch (err) {
+     *   // Handle the error
+     * }
+     * ```
+     *
+     * If `options` is a string, then it specifies the encoding:
+     *
+     * ```js
+     * import { appendFileSync } from 'node:fs';
+     *
+     * appendFileSync('message.txt', 'data to append', 'utf8');
+     * ```
+     *
+     * The `path` may be specified as a numeric file descriptor that has been opened
+     * for appending (using `fs.open()` or `fs.openSync()`). The file descriptor will
+     * not be closed automatically.
+     *
+     * ```js
+     * import { openSync, closeSync, appendFileSync } from 'node:fs';
+     *
+     * let fd;
+     *
+     * try {
+     *   fd = openSync('message.txt', 'a');
+     *   appendFileSync(fd, 'data to append', 'utf8');
+     * } catch (err) {
+     *   // Handle the error
+     * } finally {
+     *   if (fd !== undefined)
+     *     closeSync(fd);
+     * }
+     * ```
+     * @since v0.6.7
+     * @param path filename or file descriptor
+     */
+    export function appendFileSync(
+        path: PathOrFileDescriptor,
+        data: string | Uint8Array,
+        options?: WriteFileOptions,
+    ): void;
+    /**
+     * Watch for changes on `filename`. The callback `listener` will be called each
+     * time the file is accessed.
+     *
+     * The `options` argument may be omitted. If provided, it should be an object. The `options` object may contain a boolean named `persistent` that indicates
+     * whether the process should continue to run as long as files are being watched.
+     * The `options` object may specify an `interval` property indicating how often the
+     * target should be polled in milliseconds.
+     *
+     * The `listener` gets two arguments the current stat object and the previous
+     * stat object:
+     *
+     * ```js
+     * import { watchFile } from 'node:fs';
+     *
+     * watchFile('message.text', (curr, prev) => {
+     *   console.log(`the current mtime is: ${curr.mtime}`);
+     *   console.log(`the previous mtime was: ${prev.mtime}`);
+     * });
+     * ```
+     *
+     * These stat objects are instances of `fs.Stat`. If the `bigint` option is `true`,
+     * the numeric values in these objects are specified as `BigInt`s.
+     *
+     * To be notified when the file was modified, not just accessed, it is necessary
+     * to compare `curr.mtimeMs` and `prev.mtimeMs`.
+     *
+     * When an `fs.watchFile` operation results in an `ENOENT` error, it
+     * will invoke the listener once, with all the fields zeroed (or, for dates, the
+     * Unix Epoch). If the file is created later on, the listener will be called
+     * again, with the latest stat objects. This is a change in functionality since
+     * v0.10.
+     *
+     * Using {@link watch} is more efficient than `fs.watchFile` and `fs.unwatchFile`. `fs.watch` should be used instead of `fs.watchFile` and `fs.unwatchFile` when possible.
+     *
+     * When a file being watched by `fs.watchFile()` disappears and reappears,
+     * then the contents of `previous` in the second callback event (the file's
+     * reappearance) will be the same as the contents of `previous` in the first
+     * callback event (its disappearance).
+     *
+     * This happens when:
+     *
+     * * the file is deleted, followed by a restore
+     * * the file is renamed and then renamed a second time back to its original name
+     * @since v0.1.31
+     */
+    export interface WatchFileOptions {
+        bigint?: boolean | undefined;
+        persistent?: boolean | undefined;
+        interval?: number | undefined;
+    }
+    /**
+     * Watch for changes on `filename`. The callback `listener` will be called each
+     * time the file is accessed.
+     *
+     * The `options` argument may be omitted. If provided, it should be an object. The `options` object may contain a boolean named `persistent` that indicates
+     * whether the process should continue to run as long as files are being watched.
+     * The `options` object may specify an `interval` property indicating how often the
+     * target should be polled in milliseconds.
+     *
+     * The `listener` gets two arguments the current stat object and the previous
+     * stat object:
+     *
+     * ```js
+     * import { watchFile } from 'node:fs';
+     *
+     * watchFile('message.text', (curr, prev) => {
+     *   console.log(`the current mtime is: ${curr.mtime}`);
+     *   console.log(`the previous mtime was: ${prev.mtime}`);
+     * });
+     * ```
+     *
+     * These stat objects are instances of `fs.Stat`. If the `bigint` option is `true`,
+     * the numeric values in these objects are specified as `BigInt`s.
+     *
+     * To be notified when the file was modified, not just accessed, it is necessary
+     * to compare `curr.mtimeMs` and `prev.mtimeMs`.
+     *
+     * When an `fs.watchFile` operation results in an `ENOENT` error, it
+     * will invoke the listener once, with all the fields zeroed (or, for dates, the
+     * Unix Epoch). If the file is created later on, the listener will be called
+     * again, with the latest stat objects. This is a change in functionality since
+     * v0.10.
+     *
+     * Using {@link watch} is more efficient than `fs.watchFile` and `fs.unwatchFile`. `fs.watch` should be used instead of `fs.watchFile` and `fs.unwatchFile` when possible.
+     *
+     * When a file being watched by `fs.watchFile()` disappears and reappears,
+     * then the contents of `previous` in the second callback event (the file's
+     * reappearance) will be the same as the contents of `previous` in the first
+     * callback event (its disappearance).
+     *
+     * This happens when:
+     *
+     * * the file is deleted, followed by a restore
+     * * the file is renamed and then renamed a second time back to its original name
+     * @since v0.1.31
+     */
+    export function watchFile(
+        filename: PathLike,
+        options:
+            | (WatchFileOptions & {
+                bigint?: false | undefined;
+            })
+            | undefined,
+        listener: StatsListener,
+    ): StatWatcher;
+    export function watchFile(
+        filename: PathLike,
+        options:
+            | (WatchFileOptions & {
+                bigint: true;
+            })
+            | undefined,
+        listener: BigIntStatsListener,
+    ): StatWatcher;
+    /**
+     * Watch for changes on `filename`. The callback `listener` will be called each time the file is accessed.
+     * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
+     */
+    export function watchFile(filename: PathLike, listener: StatsListener): StatWatcher;
+    /**
+     * Stop watching for changes on `filename`. If `listener` is specified, only that
+     * particular listener is removed. Otherwise, _all_ listeners are removed,
+     * effectively stopping watching of `filename`.
+     *
+     * Calling `fs.unwatchFile()` with a filename that is not being watched is a
+     * no-op, not an error.
+     *
+     * Using {@link watch} is more efficient than `fs.watchFile()` and `fs.unwatchFile()`. `fs.watch()` should be used instead of `fs.watchFile()` and `fs.unwatchFile()` when possible.
+     * @since v0.1.31
+     * @param listener Optional, a listener previously attached using `fs.watchFile()`
+     */
+    export function unwatchFile(filename: PathLike, listener?: StatsListener): void;
+    export function unwatchFile(filename: PathLike, listener?: BigIntStatsListener): void;
+    export interface WatchOptions extends Abortable {
+        encoding?: BufferEncoding | "buffer" | undefined;
+        persistent?: boolean | undefined;
+        recursive?: boolean | undefined;
+    }
+    export interface WatchOptionsWithBufferEncoding extends WatchOptions {
+        encoding: "buffer";
+    }
+    export interface WatchOptionsWithStringEncoding extends WatchOptions {
+        encoding?: BufferEncoding | undefined;
+    }
+    export type WatchEventType = "rename" | "change";
+    export type WatchListener = (event: WatchEventType, filename: T | null) => void;
+    export type StatsListener = (curr: Stats, prev: Stats) => void;
+    export type BigIntStatsListener = (curr: BigIntStats, prev: BigIntStats) => void;
+    /**
+     * Watch for changes on `filename`, where `filename` is either a file or a
+     * directory.
+     *
+     * The second argument is optional. If `options` is provided as a string, it
+     * specifies the `encoding`. Otherwise `options` should be passed as an object.
+     *
+     * The listener callback gets two arguments `(eventType, filename)`. `eventType`is either `'rename'` or `'change'`, and `filename` is the name of the file
+     * which triggered the event.
+     *
+     * On most platforms, `'rename'` is emitted whenever a filename appears or
+     * disappears in the directory.
+     *
+     * The listener callback is attached to the `'change'` event fired by `fs.FSWatcher`, but it is not the same thing as the `'change'` value of `eventType`.
+     *
+     * If a `signal` is passed, aborting the corresponding AbortController will close
+     * the returned `fs.FSWatcher`.
+     * @since v0.5.10
+     * @param listener
+     */
+    export function watch(
+        filename: PathLike,
+        options?: WatchOptionsWithStringEncoding | BufferEncoding | null,
+        listener?: WatchListener,
+    ): FSWatcher;
+    export function watch(
+        filename: PathLike,
+        options: WatchOptionsWithBufferEncoding | "buffer",
+        listener: WatchListener,
+    ): FSWatcher;
+    export function watch(
+        filename: PathLike,
+        options: WatchOptions | BufferEncoding | "buffer" | null,
+        listener: WatchListener,
+    ): FSWatcher;
+    export function watch(filename: PathLike, listener: WatchListener): FSWatcher;
+    /**
+     * Test whether or not the given path exists by checking with the file system.
+     * Then call the `callback` argument with either true or false:
+     *
+     * ```js
+     * import { exists } from 'node:fs';
+     *
+     * exists('/etc/passwd', (e) => {
+     *   console.log(e ? 'it exists' : 'no passwd!');
+     * });
+     * ```
+     *
+     * **The parameters for this callback are not consistent with other Node.js**
+     * **callbacks.** Normally, the first parameter to a Node.js callback is an `err` parameter, optionally followed by other parameters. The `fs.exists()` callback
+     * has only one boolean parameter. This is one reason `fs.access()` is recommended
+     * instead of `fs.exists()`.
+     *
+     * Using `fs.exists()` to check for the existence of a file before calling `fs.open()`, `fs.readFile()`, or `fs.writeFile()` is not recommended. Doing
+     * so introduces a race condition, since other processes may change the file's
+     * state between the two calls. Instead, user code should open/read/write the
+     * file directly and handle the error raised if the file does not exist.
+     *
+     * **write (NOT RECOMMENDED)**
+     *
+     * ```js
+     * import { exists, open, close } from 'node:fs';
+     *
+     * exists('myfile', (e) => {
+     *   if (e) {
+     *     console.error('myfile already exists');
+     *   } else {
+     *     open('myfile', 'wx', (err, fd) => {
+     *       if (err) throw err;
+     *
+     *       try {
+     *         writeMyData(fd);
+     *       } finally {
+     *         close(fd, (err) => {
+     *           if (err) throw err;
+     *         });
+     *       }
+     *     });
+     *   }
+     * });
+     * ```
+     *
+     * **write (RECOMMENDED)**
+     *
+     * ```js
+     * import { open, close } from 'node:fs';
+     * open('myfile', 'wx', (err, fd) => {
+     *   if (err) {
+     *     if (err.code === 'EEXIST') {
+     *       console.error('myfile already exists');
+     *       return;
+     *     }
+     *
+     *     throw err;
+     *   }
+     *
+     *   try {
+     *     writeMyData(fd);
+     *   } finally {
+     *     close(fd, (err) => {
+     *       if (err) throw err;
+     *     });
+     *   }
+     * });
+     * ```
+     *
+     * **read (NOT RECOMMENDED)**
+     *
+     * ```js
+     * import { open, close, exists } from 'node:fs';
+     *
+     * exists('myfile', (e) => {
+     *   if (e) {
+     *     open('myfile', 'r', (err, fd) => {
+     *       if (err) throw err;
+     *
+     *       try {
+     *         readMyData(fd);
+     *       } finally {
+     *         close(fd, (err) => {
+     *           if (err) throw err;
+     *         });
+     *       }
+     *     });
+     *   } else {
+     *     console.error('myfile does not exist');
+     *   }
+     * });
+     * ```
+     *
+     * **read (RECOMMENDED)**
+     *
+     * ```js
+     * import { open, close } from 'node:fs';
+     *
+     * open('myfile', 'r', (err, fd) => {
+     *   if (err) {
+     *     if (err.code === 'ENOENT') {
+     *       console.error('myfile does not exist');
+     *       return;
+     *     }
+     *
+     *     throw err;
+     *   }
+     *
+     *   try {
+     *     readMyData(fd);
+     *   } finally {
+     *     close(fd, (err) => {
+     *       if (err) throw err;
+     *     });
+     *   }
+     * });
+     * ```
+     *
+     * The "not recommended" examples above check for existence and then use the
+     * file; the "recommended" examples are better because they use the file directly
+     * and handle the error, if any.
+     *
+     * In general, check for the existence of a file only if the file won't be
+     * used directly, for example when its existence is a signal from another
+     * process.
+     * @since v0.0.2
+     * @deprecated Since v1.0.0 - Use {@link stat} or {@link access} instead.
+     */
+    export function exists(path: PathLike, callback: (exists: boolean) => void): void;
+    /** @deprecated */
+    export namespace exists {
+        /**
+         * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
+         * URL support is _experimental_.
+         */
+        function __promisify__(path: PathLike): Promise;
+    }
+    /**
+     * Returns `true` if the path exists, `false` otherwise.
+     *
+     * For detailed information, see the documentation of the asynchronous version of
+     * this API: {@link exists}.
+     *
+     * `fs.exists()` is deprecated, but `fs.existsSync()` is not. The `callback` parameter to `fs.exists()` accepts parameters that are inconsistent with other
+     * Node.js callbacks. `fs.existsSync()` does not use a callback.
+     *
+     * ```js
+     * import { existsSync } from 'node:fs';
+     *
+     * if (existsSync('/etc/passwd'))
+     *   console.log('The path exists.');
+     * ```
+     * @since v0.1.21
+     */
+    export function existsSync(path: PathLike): boolean;
+    export namespace constants {
+        // File Access Constants
+        /** Constant for fs.access(). File is visible to the calling process. */
+        const F_OK: number;
+        /** Constant for fs.access(). File can be read by the calling process. */
+        const R_OK: number;
+        /** Constant for fs.access(). File can be written by the calling process. */
+        const W_OK: number;
+        /** Constant for fs.access(). File can be executed by the calling process. */
+        const X_OK: number;
+        // File Copy Constants
+        /** Constant for fs.copyFile. Flag indicating the destination file should not be overwritten if it already exists. */
+        const COPYFILE_EXCL: number;
+        /**
+         * Constant for fs.copyFile. copy operation will attempt to create a copy-on-write reflink.
+         * If the underlying platform does not support copy-on-write, then a fallback copy mechanism is used.
+         */
+        const COPYFILE_FICLONE: number;
+        /**
+         * Constant for fs.copyFile. Copy operation will attempt to create a copy-on-write reflink.
+         * If the underlying platform does not support copy-on-write, then the operation will fail with an error.
+         */
+        const COPYFILE_FICLONE_FORCE: number;
+        // File Open Constants
+        /** Constant for fs.open(). Flag indicating to open a file for read-only access. */
+        const O_RDONLY: number;
+        /** Constant for fs.open(). Flag indicating to open a file for write-only access. */
+        const O_WRONLY: number;
+        /** Constant for fs.open(). Flag indicating to open a file for read-write access. */
+        const O_RDWR: number;
+        /** Constant for fs.open(). Flag indicating to create the file if it does not already exist. */
+        const O_CREAT: number;
+        /** Constant for fs.open(). Flag indicating that opening a file should fail if the O_CREAT flag is set and the file already exists. */
+        const O_EXCL: number;
+        /**
+         * Constant for fs.open(). Flag indicating that if path identifies a terminal device,
+         * opening the path shall not cause that terminal to become the controlling terminal for the process
+         * (if the process does not already have one).
+         */
+        const O_NOCTTY: number;
+        /** Constant for fs.open(). Flag indicating that if the file exists and is a regular file, and the file is opened successfully for write access, its length shall be truncated to zero. */
+        const O_TRUNC: number;
+        /** Constant for fs.open(). Flag indicating that data will be appended to the end of the file. */
+        const O_APPEND: number;
+        /** Constant for fs.open(). Flag indicating that the open should fail if the path is not a directory. */
+        const O_DIRECTORY: number;
+        /**
+         * constant for fs.open().
+         * Flag indicating reading accesses to the file system will no longer result in
+         * an update to the atime information associated with the file.
+         * This flag is available on Linux operating systems only.
+         */
+        const O_NOATIME: number;
+        /** Constant for fs.open(). Flag indicating that the open should fail if the path is a symbolic link. */
+        const O_NOFOLLOW: number;
+        /** Constant for fs.open(). Flag indicating that the file is opened for synchronous I/O. */
+        const O_SYNC: number;
+        /** Constant for fs.open(). Flag indicating that the file is opened for synchronous I/O with write operations waiting for data integrity. */
+        const O_DSYNC: number;
+        /** Constant for fs.open(). Flag indicating to open the symbolic link itself rather than the resource it is pointing to. */
+        const O_SYMLINK: number;
+        /** Constant for fs.open(). When set, an attempt will be made to minimize caching effects of file I/O. */
+        const O_DIRECT: number;
+        /** Constant for fs.open(). Flag indicating to open the file in nonblocking mode when possible. */
+        const O_NONBLOCK: number;
+        // File Type Constants
+        /** Constant for fs.Stats mode property for determining a file's type. Bit mask used to extract the file type code. */
+        const S_IFMT: number;
+        /** Constant for fs.Stats mode property for determining a file's type. File type constant for a regular file. */
+        const S_IFREG: number;
+        /** Constant for fs.Stats mode property for determining a file's type. File type constant for a directory. */
+        const S_IFDIR: number;
+        /** Constant for fs.Stats mode property for determining a file's type. File type constant for a character-oriented device file. */
+        const S_IFCHR: number;
+        /** Constant for fs.Stats mode property for determining a file's type. File type constant for a block-oriented device file. */
+        const S_IFBLK: number;
+        /** Constant for fs.Stats mode property for determining a file's type. File type constant for a FIFO/pipe. */
+        const S_IFIFO: number;
+        /** Constant for fs.Stats mode property for determining a file's type. File type constant for a symbolic link. */
+        const S_IFLNK: number;
+        /** Constant for fs.Stats mode property for determining a file's type. File type constant for a socket. */
+        const S_IFSOCK: number;
+        // File Mode Constants
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by owner. */
+        const S_IRWXU: number;
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by owner. */
+        const S_IRUSR: number;
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by owner. */
+        const S_IWUSR: number;
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by owner. */
+        const S_IXUSR: number;
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by group. */
+        const S_IRWXG: number;
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by group. */
+        const S_IRGRP: number;
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by group. */
+        const S_IWGRP: number;
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by group. */
+        const S_IXGRP: number;
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by others. */
+        const S_IRWXO: number;
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by others. */
+        const S_IROTH: number;
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by others. */
+        const S_IWOTH: number;
+        /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by others. */
+        const S_IXOTH: number;
+        /**
+         * When set, a memory file mapping is used to access the file. This flag
+         * is available on Windows operating systems only. On other operating systems,
+         * this flag is ignored.
+         */
+        const UV_FS_O_FILEMAP: number;
+    }
+    /**
+     * Tests a user's permissions for the file or directory specified by `path`.
+     * The `mode` argument is an optional integer that specifies the accessibility
+     * checks to be performed. `mode` should be either the value `fs.constants.F_OK` or a mask consisting of the bitwise OR of any of `fs.constants.R_OK`, `fs.constants.W_OK`, and `fs.constants.X_OK`
+     * (e.g.`fs.constants.W_OK | fs.constants.R_OK`). Check `File access constants` for
+     * possible values of `mode`.
+     *
+     * The final argument, `callback`, is a callback function that is invoked with
+     * a possible error argument. If any of the accessibility checks fail, the error
+     * argument will be an `Error` object. The following examples check if `package.json` exists, and if it is readable or writable.
+     *
+     * ```js
+     * import { access, constants } from 'node:fs';
+     *
+     * const file = 'package.json';
+     *
+     * // Check if the file exists in the current directory.
+     * access(file, constants.F_OK, (err) => {
+     *   console.log(`${file} ${err ? 'does not exist' : 'exists'}`);
+     * });
+     *
+     * // Check if the file is readable.
+     * access(file, constants.R_OK, (err) => {
+     *   console.log(`${file} ${err ? 'is not readable' : 'is readable'}`);
+     * });
+     *
+     * // Check if the file is writable.
+     * access(file, constants.W_OK, (err) => {
+     *   console.log(`${file} ${err ? 'is not writable' : 'is writable'}`);
+     * });
+     *
+     * // Check if the file is readable and writable.
+     * access(file, constants.R_OK | constants.W_OK, (err) => {
+     *   console.log(`${file} ${err ? 'is not' : 'is'} readable and writable`);
+     * });
+     * ```
+     *
+     * Do not use `fs.access()` to check for the accessibility of a file before calling `fs.open()`, `fs.readFile()`, or `fs.writeFile()`. Doing
+     * so introduces a race condition, since other processes may change the file's
+     * state between the two calls. Instead, user code should open/read/write the
+     * file directly and handle the error raised if the file is not accessible.
+     *
+     * **write (NOT RECOMMENDED)**
+     *
+     * ```js
+     * import { access, open, close } from 'node:fs';
+     *
+     * access('myfile', (err) => {
+     *   if (!err) {
+     *     console.error('myfile already exists');
+     *     return;
+     *   }
+     *
+     *   open('myfile', 'wx', (err, fd) => {
+     *     if (err) throw err;
+     *
+     *     try {
+     *       writeMyData(fd);
+     *     } finally {
+     *       close(fd, (err) => {
+     *         if (err) throw err;
+     *       });
+     *     }
+     *   });
+     * });
+     * ```
+     *
+     * **write (RECOMMENDED)**
+     *
+     * ```js
+     * import { open, close } from 'node:fs';
+     *
+     * open('myfile', 'wx', (err, fd) => {
+     *   if (err) {
+     *     if (err.code === 'EEXIST') {
+     *       console.error('myfile already exists');
+     *       return;
+     *     }
+     *
+     *     throw err;
+     *   }
+     *
+     *   try {
+     *     writeMyData(fd);
+     *   } finally {
+     *     close(fd, (err) => {
+     *       if (err) throw err;
+     *     });
+     *   }
+     * });
+     * ```
+     *
+     * **read (NOT RECOMMENDED)**
+     *
+     * ```js
+     * import { access, open, close } from 'node:fs';
+     * access('myfile', (err) => {
+     *   if (err) {
+     *     if (err.code === 'ENOENT') {
+     *       console.error('myfile does not exist');
+     *       return;
+     *     }
+     *
+     *     throw err;
+     *   }
+     *
+     *   open('myfile', 'r', (err, fd) => {
+     *     if (err) throw err;
+     *
+     *     try {
+     *       readMyData(fd);
+     *     } finally {
+     *       close(fd, (err) => {
+     *         if (err) throw err;
+     *       });
+     *     }
+     *   });
+     * });
+     * ```
+     *
+     * **read (RECOMMENDED)**
+     *
+     * ```js
+     * import { open, close } from 'node:fs';
+     *
+     * open('myfile', 'r', (err, fd) => {
+     *   if (err) {
+     *     if (err.code === 'ENOENT') {
+     *       console.error('myfile does not exist');
+     *       return;
+     *     }
+     *
+     *     throw err;
+     *   }
+     *
+     *   try {
+     *     readMyData(fd);
+     *   } finally {
+     *     close(fd, (err) => {
+     *       if (err) throw err;
+     *     });
+     *   }
+     * });
+     * ```
+     *
+     * The "not recommended" examples above check for accessibility and then use the
+     * file; the "recommended" examples are better because they use the file directly
+     * and handle the error, if any.
+     *
+     * In general, check for the accessibility of a file only if the file will not be
+     * used directly, for example when its accessibility is a signal from another
+     * process.
+     *
+     * On Windows, access-control policies (ACLs) on a directory may limit access to
+     * a file or directory. The `fs.access()` function, however, does not check the
+     * ACL and therefore may report that a path is accessible even if the ACL restricts
+     * the user from reading or writing to it.
+     * @since v0.11.15
+     * @param [mode=fs.constants.F_OK]
+     */
+    export function access(path: PathLike, mode: number | undefined, callback: NoParamCallback): void;
+    /**
+     * Asynchronously tests a user's permissions for the file specified by path.
+     * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
+     */
+    export function access(path: PathLike, callback: NoParamCallback): void;
+    export namespace access {
+        /**
+         * Asynchronously tests a user's permissions for the file specified by path.
+         * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
+         * URL support is _experimental_.
+         */
+        function __promisify__(path: PathLike, mode?: number): Promise;
+    }
+    /**
+     * Synchronously tests a user's permissions for the file or directory specified
+     * by `path`. The `mode` argument is an optional integer that specifies the
+     * accessibility checks to be performed. `mode` should be either the value `fs.constants.F_OK` or a mask consisting of the bitwise OR of any of `fs.constants.R_OK`, `fs.constants.W_OK`, and
+     * `fs.constants.X_OK` (e.g.`fs.constants.W_OK | fs.constants.R_OK`). Check `File access constants` for
+     * possible values of `mode`.
+     *
+     * If any of the accessibility checks fail, an `Error` will be thrown. Otherwise,
+     * the method will return `undefined`.
+     *
+     * ```js
+     * import { accessSync, constants } from 'node:fs';
+     *
+     * try {
+     *   accessSync('etc/passwd', constants.R_OK | constants.W_OK);
+     *   console.log('can read/write');
+     * } catch (err) {
+     *   console.error('no access!');
+     * }
+     * ```
+     * @since v0.11.15
+     * @param [mode=fs.constants.F_OK]
+     */
+    export function accessSync(path: PathLike, mode?: number): void;
+    interface StreamOptions {
+        flags?: string | undefined;
+        encoding?: BufferEncoding | undefined;
+        fd?: number | promises.FileHandle | undefined;
+        mode?: number | undefined;
+        autoClose?: boolean | undefined;
+        emitClose?: boolean | undefined;
+        start?: number | undefined;
+        signal?: AbortSignal | null | undefined;
+        highWaterMark?: number | undefined;
+    }
+    interface FSImplementation {
+        open?: (...args: any[]) => any;
+        close?: (...args: any[]) => any;
+    }
+    interface CreateReadStreamFSImplementation extends FSImplementation {
+        read: (...args: any[]) => any;
+    }
+    interface CreateWriteStreamFSImplementation extends FSImplementation {
+        write: (...args: any[]) => any;
+        writev?: (...args: any[]) => any;
+    }
+    interface ReadStreamOptions extends StreamOptions {
+        fs?: CreateReadStreamFSImplementation | null | undefined;
+        end?: number | undefined;
+    }
+    interface WriteStreamOptions extends StreamOptions {
+        fs?: CreateWriteStreamFSImplementation | null | undefined;
+        flush?: boolean | undefined;
+    }
+    /**
+     * `options` can include `start` and `end` values to read a range of bytes from
+     * the file instead of the entire file. Both `start` and `end` are inclusive and
+     * start counting at 0, allowed values are in the
+     * \[0, [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\] range. If `fd` is specified and `start` is
+     * omitted or `undefined`, `fs.createReadStream()` reads sequentially from the
+     * current file position. The `encoding` can be any one of those accepted by `Buffer`.
+     *
+     * If `fd` is specified, `ReadStream` will ignore the `path` argument and will use
+     * the specified file descriptor. This means that no `'open'` event will be
+     * emitted. `fd` should be blocking; non-blocking `fd`s should be passed to `net.Socket`.
+     *
+     * If `fd` points to a character device that only supports blocking reads
+     * (such as keyboard or sound card), read operations do not finish until data is
+     * available. This can prevent the process from exiting and the stream from
+     * closing naturally.
+     *
+     * By default, the stream will emit a `'close'` event after it has been
+     * destroyed.  Set the `emitClose` option to `false` to change this behavior.
+     *
+     * By providing the `fs` option, it is possible to override the corresponding `fs` implementations for `open`, `read`, and `close`. When providing the `fs` option,
+     * an override for `read` is required. If no `fd` is provided, an override for `open` is also required. If `autoClose` is `true`, an override for `close` is
+     * also required.
+     *
+     * ```js
+     * import { createReadStream } from 'node:fs';
+     *
+     * // Create a stream from some character device.
+     * const stream = createReadStream('/dev/input/event0');
+     * setTimeout(() => {
+     *   stream.close(); // This may not close the stream.
+     *   // Artificially marking end-of-stream, as if the underlying resource had
+     *   // indicated end-of-file by itself, allows the stream to close.
+     *   // This does not cancel pending read operations, and if there is such an
+     *   // operation, the process may still not be able to exit successfully
+     *   // until it finishes.
+     *   stream.push(null);
+     *   stream.read(0);
+     * }, 100);
+     * ```
+     *
+     * If `autoClose` is false, then the file descriptor won't be closed, even if
+     * there's an error. It is the application's responsibility to close it and make
+     * sure there's no file descriptor leak. If `autoClose` is set to true (default
+     * behavior), on `'error'` or `'end'` the file descriptor will be closed
+     * automatically.
+     *
+     * `mode` sets the file mode (permission and sticky bits), but only if the
+     * file was created.
+     *
+     * An example to read the last 10 bytes of a file which is 100 bytes long:
+     *
+     * ```js
+     * import { createReadStream } from 'node:fs';
+     *
+     * createReadStream('sample.txt', { start: 90, end: 99 });
+     * ```
+     *
+     * If `options` is a string, then it specifies the encoding.
+     * @since v0.1.31
+     */
+    export function createReadStream(path: PathLike, options?: BufferEncoding | ReadStreamOptions): ReadStream;
+    /**
+     * `options` may also include a `start` option to allow writing data at some
+     * position past the beginning of the file, allowed values are in the
+     * \[0, [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\] range. Modifying a file rather than
+     * replacing it may require the `flags` option to be set to `r+` rather than the
+     * default `w`. The `encoding` can be any one of those accepted by `Buffer`.
+     *
+     * If `autoClose` is set to true (default behavior) on `'error'` or `'finish'` the file descriptor will be closed automatically. If `autoClose` is false,
+     * then the file descriptor won't be closed, even if there's an error.
+     * It is the application's responsibility to close it and make sure there's no
+     * file descriptor leak.
+     *
+     * By default, the stream will emit a `'close'` event after it has been
+     * destroyed.  Set the `emitClose` option to `false` to change this behavior.
+     *
+     * By providing the `fs` option it is possible to override the corresponding `fs` implementations for `open`, `write`, `writev`, and `close`. Overriding `write()` without `writev()` can reduce
+     * performance as some optimizations (`_writev()`)
+     * will be disabled. When providing the `fs` option, overrides for at least one of `write` and `writev` are required. If no `fd` option is supplied, an override
+     * for `open` is also required. If `autoClose` is `true`, an override for `close` is also required.
+     *
+     * Like `fs.ReadStream`, if `fd` is specified, `fs.WriteStream` will ignore the `path` argument and will use the specified file descriptor. This means that no `'open'` event will be
+     * emitted. `fd` should be blocking; non-blocking `fd`s
+     * should be passed to `net.Socket`.
+     *
+     * If `options` is a string, then it specifies the encoding.
+     * @since v0.1.31
+     */
+    export function createWriteStream(path: PathLike, options?: BufferEncoding | WriteStreamOptions): WriteStream;
+    /**
+     * Forces all currently queued I/O operations associated with the file to the
+     * operating system's synchronized I/O completion state. Refer to the POSIX [`fdatasync(2)`](http://man7.org/linux/man-pages/man2/fdatasync.2.html) documentation for details. No arguments other
+     * than a possible
+     * exception are given to the completion callback.
+     * @since v0.1.96
+     */
+    export function fdatasync(fd: number, callback: NoParamCallback): void;
+    export namespace fdatasync {
+        /**
+         * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device.
+         * @param fd A file descriptor.
+         */
+        function __promisify__(fd: number): Promise;
+    }
+    /**
+     * Forces all currently queued I/O operations associated with the file to the
+     * operating system's synchronized I/O completion state. Refer to the POSIX [`fdatasync(2)`](http://man7.org/linux/man-pages/man2/fdatasync.2.html) documentation for details. Returns `undefined`.
+     * @since v0.1.96
+     */
+    export function fdatasyncSync(fd: number): void;
+    /**
+     * Asynchronously copies `src` to `dest`. By default, `dest` is overwritten if it
+     * already exists. No arguments other than a possible exception are given to the
+     * callback function. Node.js makes no guarantees about the atomicity of the copy
+     * operation. If an error occurs after the destination file has been opened for
+     * writing, Node.js will attempt to remove the destination.
+     *
+     * `mode` is an optional integer that specifies the behavior
+     * of the copy operation. It is possible to create a mask consisting of the bitwise
+     * OR of two or more values (e.g.`fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE`).
+     *
+     * * `fs.constants.COPYFILE_EXCL`: The copy operation will fail if `dest` already
+     * exists.
+     * * `fs.constants.COPYFILE_FICLONE`: The copy operation will attempt to create a
+     * copy-on-write reflink. If the platform does not support copy-on-write, then a
+     * fallback copy mechanism is used.
+     * * `fs.constants.COPYFILE_FICLONE_FORCE`: The copy operation will attempt to
+     * create a copy-on-write reflink. If the platform does not support
+     * copy-on-write, then the operation will fail.
+     *
+     * ```js
+     * import { copyFile, constants } from 'node:fs';
+     *
+     * function callback(err) {
+     *   if (err) throw err;
+     *   console.log('source.txt was copied to destination.txt');
+     * }
+     *
+     * // destination.txt will be created or overwritten by default.
+     * copyFile('source.txt', 'destination.txt', callback);
+     *
+     * // By using COPYFILE_EXCL, the operation will fail if destination.txt exists.
+     * copyFile('source.txt', 'destination.txt', constants.COPYFILE_EXCL, callback);
+     * ```
+     * @since v8.5.0
+     * @param src source filename to copy
+     * @param dest destination filename of the copy operation
+     * @param [mode=0] modifiers for copy operation.
+     */
+    export function copyFile(src: PathLike, dest: PathLike, callback: NoParamCallback): void;
+    export function copyFile(src: PathLike, dest: PathLike, mode: number, callback: NoParamCallback): void;
+    export namespace copyFile {
+        function __promisify__(src: PathLike, dst: PathLike, mode?: number): Promise;
+    }
+    /**
+     * Synchronously copies `src` to `dest`. By default, `dest` is overwritten if it
+     * already exists. Returns `undefined`. Node.js makes no guarantees about the
+     * atomicity of the copy operation. If an error occurs after the destination file
+     * has been opened for writing, Node.js will attempt to remove the destination.
+     *
+     * `mode` is an optional integer that specifies the behavior
+     * of the copy operation. It is possible to create a mask consisting of the bitwise
+     * OR of two or more values (e.g.`fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE`).
+     *
+     * * `fs.constants.COPYFILE_EXCL`: The copy operation will fail if `dest` already
+     * exists.
+     * * `fs.constants.COPYFILE_FICLONE`: The copy operation will attempt to create a
+     * copy-on-write reflink. If the platform does not support copy-on-write, then a
+     * fallback copy mechanism is used.
+     * * `fs.constants.COPYFILE_FICLONE_FORCE`: The copy operation will attempt to
+     * create a copy-on-write reflink. If the platform does not support
+     * copy-on-write, then the operation will fail.
+     *
+     * ```js
+     * import { copyFileSync, constants } from 'node:fs';
+     *
+     * // destination.txt will be created or overwritten by default.
+     * copyFileSync('source.txt', 'destination.txt');
+     * console.log('source.txt was copied to destination.txt');
+     *
+     * // By using COPYFILE_EXCL, the operation will fail if destination.txt exists.
+     * copyFileSync('source.txt', 'destination.txt', constants.COPYFILE_EXCL);
+     * ```
+     * @since v8.5.0
+     * @param src source filename to copy
+     * @param dest destination filename of the copy operation
+     * @param [mode=0] modifiers for copy operation.
+     */
+    export function copyFileSync(src: PathLike, dest: PathLike, mode?: number): void;
+    /**
+     * Write an array of `ArrayBufferView`s to the file specified by `fd` using `writev()`.
+     *
+     * `position` is the offset from the beginning of the file where this data
+     * should be written. If `typeof position !== 'number'`, the data will be written
+     * at the current position.
+     *
+     * The callback will be given three arguments: `err`, `bytesWritten`, and `buffers`. `bytesWritten` is how many bytes were written from `buffers`.
+     *
+     * If this method is `util.promisify()` ed, it returns a promise for an `Object` with `bytesWritten` and `buffers` properties.
+     *
+     * It is unsafe to use `fs.writev()` multiple times on the same file without
+     * waiting for the callback. For this scenario, use {@link createWriteStream}.
+     *
+     * On Linux, positional writes don't work when the file is opened in append mode.
+     * The kernel ignores the position argument and always appends the data to
+     * the end of the file.
+     * @since v12.9.0
+     * @param [position='null']
+     */
+    export function writev(
+        fd: number,
+        buffers: TBuffers,
+        cb: (err: NodeJS.ErrnoException | null, bytesWritten: number, buffers: TBuffers) => void,
+    ): void;
+    export function writev(
+        fd: number,
+        buffers: TBuffers,
+        position: number | null,
+        cb: (err: NodeJS.ErrnoException | null, bytesWritten: number, buffers: TBuffers) => void,
+    ): void;
+    // Providing a default type parameter doesn't provide true BC for userland consumers, but at least suppresses TS2314
+    // TODO: remove default in future major version
+    export interface WriteVResult {
+        bytesWritten: number;
+        buffers: T;
+    }
+    export namespace writev {
+        function __promisify__(
+            fd: number,
+            buffers: TBuffers,
+            position?: number,
+        ): Promise>;
+    }
+    /**
+     * For detailed information, see the documentation of the asynchronous version of
+     * this API: {@link writev}.
+     * @since v12.9.0
+     * @param [position='null']
+     * @return The number of bytes written.
+     */
+    export function writevSync(fd: number, buffers: readonly NodeJS.ArrayBufferView[], position?: number): number;
+    /**
+     * Read from a file specified by `fd` and write to an array of `ArrayBufferView`s
+     * using `readv()`.
+     *
+     * `position` is the offset from the beginning of the file from where data
+     * should be read. If `typeof position !== 'number'`, the data will be read
+     * from the current position.
+     *
+     * The callback will be given three arguments: `err`, `bytesRead`, and `buffers`. `bytesRead` is how many bytes were read from the file.
+     *
+     * If this method is invoked as its `util.promisify()` ed version, it returns
+     * a promise for an `Object` with `bytesRead` and `buffers` properties.
+     * @since v13.13.0, v12.17.0
+     * @param [position='null']
+     */
+    export function readv(
+        fd: number,
+        buffers: TBuffers,
+        cb: (err: NodeJS.ErrnoException | null, bytesRead: number, buffers: TBuffers) => void,
+    ): void;
+    export function readv(
+        fd: number,
+        buffers: TBuffers,
+        position: number | null,
+        cb: (err: NodeJS.ErrnoException | null, bytesRead: number, buffers: TBuffers) => void,
+    ): void;
+    // Providing a default type parameter doesn't provide true BC for userland consumers, but at least suppresses TS2314
+    // TODO: remove default in future major version
+    export interface ReadVResult {
+        bytesRead: number;
+        buffers: T;
+    }
+    export namespace readv {
+        function __promisify__(
+            fd: number,
+            buffers: TBuffers,
+            position?: number,
+        ): Promise>;
+    }
+    /**
+     * For detailed information, see the documentation of the asynchronous version of
+     * this API: {@link readv}.
+     * @since v13.13.0, v12.17.0
+     * @param [position='null']
+     * @return The number of bytes read.
+     */
+    export function readvSync(fd: number, buffers: readonly NodeJS.ArrayBufferView[], position?: number): number;
+
+    export interface OpenAsBlobOptions {
+        /**
+         * An optional mime type for the blob.
+         *
+         * @default 'undefined'
+         */
+        type?: string | undefined;
+    }
+
+    /**
+     * Returns a `Blob` whose data is backed by the given file.
+     *
+     * The file must not be modified after the `Blob` is created. Any modifications
+     * will cause reading the `Blob` data to fail with a `DOMException` error.
+     * Synchronous stat operations on the file when the `Blob` is created, and before
+     * each read in order to detect whether the file data has been modified on disk.
+     *
+     * ```js
+     * import { openAsBlob } from 'node:fs';
+     *
+     * const blob = await openAsBlob('the.file.txt');
+     * const ab = await blob.arrayBuffer();
+     * blob.stream();
+     * ```
+     * @since v19.8.0
+     */
+    export function openAsBlob(path: PathLike, options?: OpenAsBlobOptions): Promise;
+
+    export interface OpenDirOptions {
+        /**
+         * @default 'utf8'
+         */
+        encoding?: BufferEncoding | undefined;
+        /**
+         * Number of directory entries that are buffered
+         * internally when reading from the directory. Higher values lead to better
+         * performance but higher memory usage.
+         * @default 32
+         */
+        bufferSize?: number | undefined;
+        /**
+         * @default false
+         */
+        recursive?: boolean | undefined;
+    }
+    /**
+     * Synchronously open a directory. See [`opendir(3)`](http://man7.org/linux/man-pages/man3/opendir.3.html).
+     *
+     * Creates an `fs.Dir`, which contains all further functions for reading from
+     * and cleaning up the directory.
+     *
+     * The `encoding` option sets the encoding for the `path` while opening the
+     * directory and subsequent read operations.
+     * @since v12.12.0
+     */
+    export function opendirSync(path: PathLike, options?: OpenDirOptions): Dir;
+    /**
+     * Asynchronously open a directory. See the POSIX [`opendir(3)`](http://man7.org/linux/man-pages/man3/opendir.3.html) documentation for
+     * more details.
+     *
+     * Creates an `fs.Dir`, which contains all further functions for reading from
+     * and cleaning up the directory.
+     *
+     * The `encoding` option sets the encoding for the `path` while opening the
+     * directory and subsequent read operations.
+     * @since v12.12.0
+     */
+    export function opendir(path: PathLike, cb: (err: NodeJS.ErrnoException | null, dir: Dir) => void): void;
+    export function opendir(
+        path: PathLike,
+        options: OpenDirOptions,
+        cb: (err: NodeJS.ErrnoException | null, dir: Dir) => void,
+    ): void;
+    export namespace opendir {
+        function __promisify__(path: PathLike, options?: OpenDirOptions): Promise;
+    }
+    export interface BigIntStats extends StatsBase {
+        atimeNs: bigint;
+        mtimeNs: bigint;
+        ctimeNs: bigint;
+        birthtimeNs: bigint;
+    }
+    export interface BigIntOptions {
+        bigint: true;
+    }
+    export interface StatOptions {
+        bigint?: boolean | undefined;
+    }
+    export interface StatSyncOptions extends StatOptions {
+        throwIfNoEntry?: boolean | undefined;
+    }
+    interface CopyOptionsBase {
+        /**
+         * Dereference symlinks
+         * @default false
+         */
+        dereference?: boolean | undefined;
+        /**
+         * When `force` is `false`, and the destination
+         * exists, throw an error.
+         * @default false
+         */
+        errorOnExist?: boolean | undefined;
+        /**
+         * Overwrite existing file or directory. _The copy
+         * operation will ignore errors if you set this to false and the destination
+         * exists. Use the `errorOnExist` option to change this behavior.
+         * @default true
+         */
+        force?: boolean | undefined;
+        /**
+         * Modifiers for copy operation. See `mode` flag of {@link copyFileSync()}
+         */
+        mode?: number | undefined;
+        /**
+         * When `true` timestamps from `src` will
+         * be preserved.
+         * @default false
+         */
+        preserveTimestamps?: boolean | undefined;
+        /**
+         * Copy directories recursively.
+         * @default false
+         */
+        recursive?: boolean | undefined;
+        /**
+         * When true, path resolution for symlinks will be skipped
+         * @default false
+         */
+        verbatimSymlinks?: boolean | undefined;
+    }
+    export interface CopyOptions extends CopyOptionsBase {
+        /**
+         * Function to filter copied files/directories. Return
+         * `true` to copy the item, `false` to ignore it.
+         */
+        filter?: ((source: string, destination: string) => boolean | Promise) | undefined;
+    }
+    export interface CopySyncOptions extends CopyOptionsBase {
+        /**
+         * Function to filter copied files/directories. Return
+         * `true` to copy the item, `false` to ignore it.
+         */
+        filter?: ((source: string, destination: string) => boolean) | undefined;
+    }
+    /**
+     * Asynchronously copies the entire directory structure from `src` to `dest`,
+     * including subdirectories and files.
+     *
+     * When copying a directory to another directory, globs are not supported and
+     * behavior is similar to `cp dir1/ dir2/`.
+     * @since v16.7.0
+     * @experimental
+     * @param src source path to copy.
+     * @param dest destination path to copy to.
+     */
+    export function cp(
+        source: string | URL,
+        destination: string | URL,
+        callback: (err: NodeJS.ErrnoException | null) => void,
+    ): void;
+    export function cp(
+        source: string | URL,
+        destination: string | URL,
+        opts: CopyOptions,
+        callback: (err: NodeJS.ErrnoException | null) => void,
+    ): void;
+    /**
+     * Synchronously copies the entire directory structure from `src` to `dest`,
+     * including subdirectories and files.
+     *
+     * When copying a directory to another directory, globs are not supported and
+     * behavior is similar to `cp dir1/ dir2/`.
+     * @since v16.7.0
+     * @experimental
+     * @param src source path to copy.
+     * @param dest destination path to copy to.
+     */
+    export function cpSync(source: string | URL, destination: string | URL, opts?: CopySyncOptions): void;
+
+    // TODO: collapse
+    interface _GlobOptions {
+        /**
+         * Current working directory.
+         * @default process.cwd()
+         */
+        cwd?: string | URL | undefined;
+        /**
+         * `true` if the glob should return paths as `Dirent`s, `false` otherwise.
+         * @default false
+         * @since v22.2.0
+         */
+        withFileTypes?: boolean | undefined;
+        /**
+         * Function to filter out files/directories or a
+         * list of glob patterns to be excluded. If a function is provided, return
+         * `true` to exclude the item, `false` to include it.
+         * If a string array is provided, each string should be a glob pattern that
+         * specifies paths to exclude. Note: Negation patterns (e.g., '!foo.js') are
+         * not supported.
+         * @default undefined
+         */
+        exclude?: ((fileName: T) => boolean) | readonly string[] | undefined;
+    }
+    export interface GlobOptions extends _GlobOptions {}
+    export interface GlobOptionsWithFileTypes extends _GlobOptions {
+        withFileTypes: true;
+    }
+    export interface GlobOptionsWithoutFileTypes extends _GlobOptions {
+        withFileTypes?: false | undefined;
+    }
+
+    /**
+     * Retrieves the files matching the specified pattern.
+     *
+     * ```js
+     * import { glob } from 'node:fs';
+     *
+     * glob('*.js', (err, matches) => {
+     *   if (err) throw err;
+     *   console.log(matches);
+     * });
+     * ```
+     * @since v22.0.0
+     */
+    export function glob(
+        pattern: string | readonly string[],
+        callback: (err: NodeJS.ErrnoException | null, matches: string[]) => void,
+    ): void;
+    export function glob(
+        pattern: string | readonly string[],
+        options: GlobOptionsWithFileTypes,
+        callback: (
+            err: NodeJS.ErrnoException | null,
+            matches: Dirent[],
+        ) => void,
+    ): void;
+    export function glob(
+        pattern: string | readonly string[],
+        options: GlobOptionsWithoutFileTypes,
+        callback: (
+            err: NodeJS.ErrnoException | null,
+            matches: string[],
+        ) => void,
+    ): void;
+    export function glob(
+        pattern: string | readonly string[],
+        options: GlobOptions,
+        callback: (
+            err: NodeJS.ErrnoException | null,
+            matches: Dirent[] | string[],
+        ) => void,
+    ): void;
+    /**
+     * ```js
+     * import { globSync } from 'node:fs';
+     *
+     * console.log(globSync('*.js'));
+     * ```
+     * @since v22.0.0
+     * @returns paths of files that match the pattern.
+     */
+    export function globSync(pattern: string | readonly string[]): string[];
+    export function globSync(
+        pattern: string | readonly string[],
+        options: GlobOptionsWithFileTypes,
+    ): Dirent[];
+    export function globSync(
+        pattern: string | readonly string[],
+        options: GlobOptionsWithoutFileTypes,
+    ): string[];
+    export function globSync(
+        pattern: string | readonly string[],
+        options: GlobOptions,
+    ): Dirent[] | string[];
+}
+declare module "node:fs" {
+    export * from "fs";
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/fs/promises.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/fs/promises.d.ts
new file mode 100644
index 00000000..986b6da5
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/fs/promises.d.ts
@@ -0,0 +1,1317 @@
+/**
+ * The `fs/promises` API provides asynchronous file system methods that return
+ * promises.
+ *
+ * The promise APIs use the underlying Node.js threadpool to perform file
+ * system operations off the event loop thread. These operations are not
+ * synchronized or threadsafe. Care must be taken when performing multiple
+ * concurrent modifications on the same file or data corruption may occur.
+ * @since v10.0.0
+ */
+declare module "fs/promises" {
+    import { NonSharedBuffer } from "node:buffer";
+    import { Abortable } from "node:events";
+    import { Stream } from "node:stream";
+    import { ReadableStream } from "node:stream/web";
+    import {
+        BigIntStats,
+        BigIntStatsFs,
+        BufferEncodingOption,
+        constants as fsConstants,
+        CopyOptions,
+        Dir,
+        Dirent,
+        DisposableTempDir,
+        EncodingOption,
+        GlobOptions,
+        GlobOptionsWithFileTypes,
+        GlobOptionsWithoutFileTypes,
+        MakeDirectoryOptions,
+        Mode,
+        ObjectEncodingOptions,
+        OpenDirOptions,
+        OpenMode,
+        PathLike,
+        ReadOptions,
+        ReadOptionsWithBuffer,
+        ReadPosition,
+        ReadStream,
+        ReadVResult,
+        RmDirOptions,
+        RmOptions,
+        StatFsOptions,
+        StatOptions,
+        Stats,
+        StatsFs,
+        TimeLike,
+        WatchEventType,
+        WatchOptions as _WatchOptions,
+        WriteStream,
+        WriteVResult,
+    } from "node:fs";
+    import { Interface as ReadlineInterface } from "node:readline";
+    interface FileChangeInfo {
+        eventType: WatchEventType;
+        filename: T | null;
+    }
+    interface FlagAndOpenMode {
+        mode?: Mode | undefined;
+        flag?: OpenMode | undefined;
+    }
+    interface FileReadResult {
+        bytesRead: number;
+        buffer: T;
+    }
+    /** @deprecated This interface will be removed in a future version. Use `import { ReadOptionsWithBuffer } from "node:fs"` instead. */
+    interface FileReadOptions {
+        /**
+         * @default `Buffer.alloc(0xffff)`
+         */
+        buffer?: T;
+        /**
+         * @default 0
+         */
+        offset?: number | null;
+        /**
+         * @default `buffer.byteLength`
+         */
+        length?: number | null;
+        position?: ReadPosition | null;
+    }
+    interface CreateReadStreamOptions extends Abortable {
+        encoding?: BufferEncoding | null | undefined;
+        autoClose?: boolean | undefined;
+        emitClose?: boolean | undefined;
+        start?: number | undefined;
+        end?: number | undefined;
+        highWaterMark?: number | undefined;
+    }
+    interface CreateWriteStreamOptions {
+        encoding?: BufferEncoding | null | undefined;
+        autoClose?: boolean | undefined;
+        emitClose?: boolean | undefined;
+        start?: number | undefined;
+        highWaterMark?: number | undefined;
+        flush?: boolean | undefined;
+    }
+    interface ReadableWebStreamOptions {
+        autoClose?: boolean | undefined;
+    }
+    // TODO: Add `EventEmitter` close
+    interface FileHandle {
+        /**
+         * The numeric file descriptor managed by the {FileHandle} object.
+         * @since v10.0.0
+         */
+        readonly fd: number;
+        /**
+         * Alias of `filehandle.writeFile()`.
+         *
+         * When operating on file handles, the mode cannot be changed from what it was set
+         * to with `fsPromises.open()`. Therefore, this is equivalent to `filehandle.writeFile()`.
+         * @since v10.0.0
+         * @return Fulfills with `undefined` upon success.
+         */
+        appendFile(
+            data: string | Uint8Array,
+            options?:
+                | (ObjectEncodingOptions & Abortable)
+                | BufferEncoding
+                | null,
+        ): Promise;
+        /**
+         * Changes the ownership of the file. A wrapper for [`chown(2)`](http://man7.org/linux/man-pages/man2/chown.2.html).
+         * @since v10.0.0
+         * @param uid The file's new owner's user id.
+         * @param gid The file's new group's group id.
+         * @return Fulfills with `undefined` upon success.
+         */
+        chown(uid: number, gid: number): Promise;
+        /**
+         * Modifies the permissions on the file. See [`chmod(2)`](http://man7.org/linux/man-pages/man2/chmod.2.html).
+         * @since v10.0.0
+         * @param mode the file mode bit mask.
+         * @return Fulfills with `undefined` upon success.
+         */
+        chmod(mode: Mode): Promise;
+        /**
+         * Unlike the 16 KiB default `highWaterMark` for a `stream.Readable`, the stream
+         * returned by this method has a default `highWaterMark` of 64 KiB.
+         *
+         * `options` can include `start` and `end` values to read a range of bytes from
+         * the file instead of the entire file. Both `start` and `end` are inclusive and
+         * start counting at 0, allowed values are in the
+         * \[0, [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\] range. If `start` is
+         * omitted or `undefined`, `filehandle.createReadStream()` reads sequentially from
+         * the current file position. The `encoding` can be any one of those accepted by `Buffer`.
+         *
+         * If the `FileHandle` points to a character device that only supports blocking
+         * reads (such as keyboard or sound card), read operations do not finish until data
+         * is available. This can prevent the process from exiting and the stream from
+         * closing naturally.
+         *
+         * By default, the stream will emit a `'close'` event after it has been
+         * destroyed.  Set the `emitClose` option to `false` to change this behavior.
+         *
+         * ```js
+         * import { open } from 'node:fs/promises';
+         *
+         * const fd = await open('/dev/input/event0');
+         * // Create a stream from some character device.
+         * const stream = fd.createReadStream();
+         * setTimeout(() => {
+         *   stream.close(); // This may not close the stream.
+         *   // Artificially marking end-of-stream, as if the underlying resource had
+         *   // indicated end-of-file by itself, allows the stream to close.
+         *   // This does not cancel pending read operations, and if there is such an
+         *   // operation, the process may still not be able to exit successfully
+         *   // until it finishes.
+         *   stream.push(null);
+         *   stream.read(0);
+         * }, 100);
+         * ```
+         *
+         * If `autoClose` is false, then the file descriptor won't be closed, even if
+         * there's an error. It is the application's responsibility to close it and make
+         * sure there's no file descriptor leak. If `autoClose` is set to true (default
+         * behavior), on `'error'` or `'end'` the file descriptor will be closed
+         * automatically.
+         *
+         * An example to read the last 10 bytes of a file which is 100 bytes long:
+         *
+         * ```js
+         * import { open } from 'node:fs/promises';
+         *
+         * const fd = await open('sample.txt');
+         * fd.createReadStream({ start: 90, end: 99 });
+         * ```
+         * @since v16.11.0
+         */
+        createReadStream(options?: CreateReadStreamOptions): ReadStream;
+        /**
+         * `options` may also include a `start` option to allow writing data at some
+         * position past the beginning of the file, allowed values are in the
+         * \[0, [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\] range. Modifying a file rather than
+         * replacing it may require the `flags` `open` option to be set to `r+` rather than
+         * the default `r`. The `encoding` can be any one of those accepted by `Buffer`.
+         *
+         * If `autoClose` is set to true (default behavior) on `'error'` or `'finish'` the file descriptor will be closed automatically. If `autoClose` is false,
+         * then the file descriptor won't be closed, even if there's an error.
+         * It is the application's responsibility to close it and make sure there's no
+         * file descriptor leak.
+         *
+         * By default, the stream will emit a `'close'` event after it has been
+         * destroyed.  Set the `emitClose` option to `false` to change this behavior.
+         * @since v16.11.0
+         */
+        createWriteStream(options?: CreateWriteStreamOptions): WriteStream;
+        /**
+         * Forces all currently queued I/O operations associated with the file to the
+         * operating system's synchronized I/O completion state. Refer to the POSIX [`fdatasync(2)`](http://man7.org/linux/man-pages/man2/fdatasync.2.html) documentation for details.
+         *
+         * Unlike `filehandle.sync` this method does not flush modified metadata.
+         * @since v10.0.0
+         * @return Fulfills with `undefined` upon success.
+         */
+        datasync(): Promise;
+        /**
+         * Request that all data for the open file descriptor is flushed to the storage
+         * device. The specific implementation is operating system and device specific.
+         * Refer to the POSIX [`fsync(2)`](http://man7.org/linux/man-pages/man2/fsync.2.html) documentation for more detail.
+         * @since v10.0.0
+         * @return Fulfills with `undefined` upon success.
+         */
+        sync(): Promise;
+        /**
+         * Reads data from the file and stores that in the given buffer.
+         *
+         * If the file is not modified concurrently, the end-of-file is reached when the
+         * number of bytes read is zero.
+         * @since v10.0.0
+         * @param buffer A buffer that will be filled with the file data read.
+         * @param offset The location in the buffer at which to start filling.
+         * @param length The number of bytes to read.
+         * @param position The location where to begin reading data from the file. If `null`, data will be read from the current file position, and the position will be updated. If `position` is an
+         * integer, the current file position will remain unchanged.
+         * @return Fulfills upon success with an object with two properties:
+         */
+        read(
+            buffer: T,
+            offset?: number | null,
+            length?: number | null,
+            position?: ReadPosition | null,
+        ): Promise>;
+        read(
+            buffer: T,
+            options?: ReadOptions,
+        ): Promise>;
+        read(
+            options?: ReadOptionsWithBuffer,
+        ): Promise>;
+        /**
+         * Returns a byte-oriented `ReadableStream` that may be used to read the file's
+         * contents.
+         *
+         * An error will be thrown if this method is called more than once or is called
+         * after the `FileHandle` is closed or closing.
+         *
+         * ```js
+         * import {
+         *   open,
+         * } from 'node:fs/promises';
+         *
+         * const file = await open('./some/file/to/read');
+         *
+         * for await (const chunk of file.readableWebStream())
+         *   console.log(chunk);
+         *
+         * await file.close();
+         * ```
+         *
+         * While the `ReadableStream` will read the file to completion, it will not
+         * close the `FileHandle` automatically. User code must still call the`fileHandle.close()` method.
+         * @since v17.0.0
+         */
+        readableWebStream(options?: ReadableWebStreamOptions): ReadableStream;
+        /**
+         * Asynchronously reads the entire contents of a file.
+         *
+         * If `options` is a string, then it specifies the `encoding`.
+         *
+         * The `FileHandle` has to support reading.
+         *
+         * If one or more `filehandle.read()` calls are made on a file handle and then a `filehandle.readFile()` call is made, the data will be read from the current
+         * position till the end of the file. It doesn't always read from the beginning
+         * of the file.
+         * @since v10.0.0
+         * @return Fulfills upon a successful read with the contents of the file. If no encoding is specified (using `options.encoding`), the data is returned as a {Buffer} object. Otherwise, the
+         * data will be a string.
+         */
+        readFile(
+            options?:
+                | ({ encoding?: null | undefined } & Abortable)
+                | null,
+        ): Promise;
+        /**
+         * Asynchronously reads the entire contents of a file. The underlying file will _not_ be closed automatically.
+         * The `FileHandle` must have been opened for reading.
+         */
+        readFile(
+            options:
+                | ({ encoding: BufferEncoding } & Abortable)
+                | BufferEncoding,
+        ): Promise;
+        /**
+         * Asynchronously reads the entire contents of a file. The underlying file will _not_ be closed automatically.
+         * The `FileHandle` must have been opened for reading.
+         */
+        readFile(
+            options?:
+                | (ObjectEncodingOptions & Abortable)
+                | BufferEncoding
+                | null,
+        ): Promise;
+        /**
+         * Convenience method to create a `readline` interface and stream over the file.
+         * See `filehandle.createReadStream()` for the options.
+         *
+         * ```js
+         * import { open } from 'node:fs/promises';
+         *
+         * const file = await open('./some/file/to/read');
+         *
+         * for await (const line of file.readLines()) {
+         *   console.log(line);
+         * }
+         * ```
+         * @since v18.11.0
+         */
+        readLines(options?: CreateReadStreamOptions): ReadlineInterface;
+        /**
+         * @since v10.0.0
+         * @return Fulfills with an {fs.Stats} for the file.
+         */
+        stat(
+            opts?: StatOptions & {
+                bigint?: false | undefined;
+            },
+        ): Promise;
+        stat(
+            opts: StatOptions & {
+                bigint: true;
+            },
+        ): Promise;
+        stat(opts?: StatOptions): Promise;
+        /**
+         * Truncates the file.
+         *
+         * If the file was larger than `len` bytes, only the first `len` bytes will be
+         * retained in the file.
+         *
+         * The following example retains only the first four bytes of the file:
+         *
+         * ```js
+         * import { open } from 'node:fs/promises';
+         *
+         * let filehandle = null;
+         * try {
+         *   filehandle = await open('temp.txt', 'r+');
+         *   await filehandle.truncate(4);
+         * } finally {
+         *   await filehandle?.close();
+         * }
+         * ```
+         *
+         * If the file previously was shorter than `len` bytes, it is extended, and the
+         * extended part is filled with null bytes (`'\0'`):
+         *
+         * If `len` is negative then `0` will be used.
+         * @since v10.0.0
+         * @param [len=0]
+         * @return Fulfills with `undefined` upon success.
+         */
+        truncate(len?: number): Promise;
+        /**
+         * Change the file system timestamps of the object referenced by the `FileHandle` then fulfills the promise with no arguments upon success.
+         * @since v10.0.0
+         */
+        utimes(atime: TimeLike, mtime: TimeLike): Promise;
+        /**
+         * Asynchronously writes data to a file, replacing the file if it already exists. `data` can be a string, a buffer, an
+         * [AsyncIterable](https://tc39.github.io/ecma262/#sec-asynciterable-interface), or an
+         * [Iterable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterable_protocol) object.
+         * The promise is fulfilled with no arguments upon success.
+         *
+         * If `options` is a string, then it specifies the `encoding`.
+         *
+         * The `FileHandle` has to support writing.
+         *
+         * It is unsafe to use `filehandle.writeFile()` multiple times on the same file
+         * without waiting for the promise to be fulfilled (or rejected).
+         *
+         * If one or more `filehandle.write()` calls are made on a file handle and then a`filehandle.writeFile()` call is made, the data will be written from the
+         * current position till the end of the file. It doesn't always write from the
+         * beginning of the file.
+         * @since v10.0.0
+         */
+        writeFile(
+            data: string | Uint8Array,
+            options?:
+                | (ObjectEncodingOptions & Abortable)
+                | BufferEncoding
+                | null,
+        ): Promise;
+        /**
+         * Write `buffer` to the file.
+         *
+         * The promise is fulfilled with an object containing two properties:
+         *
+         * It is unsafe to use `filehandle.write()` multiple times on the same file
+         * without waiting for the promise to be fulfilled (or rejected). For this
+         * scenario, use `filehandle.createWriteStream()`.
+         *
+         * On Linux, positional writes do not work when the file is opened in append mode.
+         * The kernel ignores the position argument and always appends the data to
+         * the end of the file.
+         * @since v10.0.0
+         * @param offset The start position from within `buffer` where the data to write begins.
+         * @param [length=buffer.byteLength - offset] The number of bytes from `buffer` to write.
+         * @param [position='null'] The offset from the beginning of the file where the data from `buffer` should be written. If `position` is not a `number`, the data will be written at the current
+         * position. See the POSIX pwrite(2) documentation for more detail.
+         */
+        write(
+            buffer: TBuffer,
+            offset?: number | null,
+            length?: number | null,
+            position?: number | null,
+        ): Promise<{
+            bytesWritten: number;
+            buffer: TBuffer;
+        }>;
+        write(
+            buffer: TBuffer,
+            options?: { offset?: number; length?: number; position?: number },
+        ): Promise<{
+            bytesWritten: number;
+            buffer: TBuffer;
+        }>;
+        write(
+            data: string,
+            position?: number | null,
+            encoding?: BufferEncoding | null,
+        ): Promise<{
+            bytesWritten: number;
+            buffer: string;
+        }>;
+        /**
+         * Write an array of [ArrayBufferView](https://developer.mozilla.org/en-US/docs/Web/API/ArrayBufferView) s to the file.
+         *
+         * The promise is fulfilled with an object containing a two properties:
+         *
+         * It is unsafe to call `writev()` multiple times on the same file without waiting
+         * for the promise to be fulfilled (or rejected).
+         *
+         * On Linux, positional writes don't work when the file is opened in append mode.
+         * The kernel ignores the position argument and always appends the data to
+         * the end of the file.
+         * @since v12.9.0
+         * @param [position='null'] The offset from the beginning of the file where the data from `buffers` should be written. If `position` is not a `number`, the data will be written at the current
+         * position.
+         */
+        writev(
+            buffers: TBuffers,
+            position?: number,
+        ): Promise>;
+        /**
+         * Read from a file and write to an array of [ArrayBufferView](https://developer.mozilla.org/en-US/docs/Web/API/ArrayBufferView) s
+         * @since v13.13.0, v12.17.0
+         * @param [position='null'] The offset from the beginning of the file where the data should be read from. If `position` is not a `number`, the data will be read from the current position.
+         * @return Fulfills upon success an object containing two properties:
+         */
+        readv(
+            buffers: TBuffers,
+            position?: number,
+        ): Promise>;
+        /**
+         * Closes the file handle after waiting for any pending operation on the handle to
+         * complete.
+         *
+         * ```js
+         * import { open } from 'node:fs/promises';
+         *
+         * let filehandle;
+         * try {
+         *   filehandle = await open('thefile.txt', 'r');
+         * } finally {
+         *   await filehandle?.close();
+         * }
+         * ```
+         * @since v10.0.0
+         * @return Fulfills with `undefined` upon success.
+         */
+        close(): Promise;
+        /**
+         * Calls `filehandle.close()` and returns a promise that fulfills when the
+         * filehandle is closed.
+         * @since v20.4.0, v18.8.0
+         */
+        [Symbol.asyncDispose](): Promise;
+    }
+    const constants: typeof fsConstants;
+    /**
+     * Tests a user's permissions for the file or directory specified by `path`.
+     * The `mode` argument is an optional integer that specifies the accessibility
+     * checks to be performed. `mode` should be either the value `fs.constants.F_OK` or a mask consisting of the bitwise OR of any of `fs.constants.R_OK`, `fs.constants.W_OK`, and `fs.constants.X_OK`
+     * (e.g.`fs.constants.W_OK | fs.constants.R_OK`). Check `File access constants` for
+     * possible values of `mode`.
+     *
+     * If the accessibility check is successful, the promise is fulfilled with no
+     * value. If any of the accessibility checks fail, the promise is rejected
+     * with an [Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) object. The following example checks if the file`/etc/passwd` can be read and
+     * written by the current process.
+     *
+     * ```js
+     * import { access, constants } from 'node:fs/promises';
+     *
+     * try {
+     *   await access('/etc/passwd', constants.R_OK | constants.W_OK);
+     *   console.log('can access');
+     * } catch {
+     *   console.error('cannot access');
+     * }
+     * ```
+     *
+     * Using `fsPromises.access()` to check for the accessibility of a file before
+     * calling `fsPromises.open()` is not recommended. Doing so introduces a race
+     * condition, since other processes may change the file's state between the two
+     * calls. Instead, user code should open/read/write the file directly and handle
+     * the error raised if the file is not accessible.
+     * @since v10.0.0
+     * @param [mode=fs.constants.F_OK]
+     * @return Fulfills with `undefined` upon success.
+     */
+    function access(path: PathLike, mode?: number): Promise;
+    /**
+     * Asynchronously copies `src` to `dest`. By default, `dest` is overwritten if it
+     * already exists.
+     *
+     * No guarantees are made about the atomicity of the copy operation. If an
+     * error occurs after the destination file has been opened for writing, an attempt
+     * will be made to remove the destination.
+     *
+     * ```js
+     * import { copyFile, constants } from 'node:fs/promises';
+     *
+     * try {
+     *   await copyFile('source.txt', 'destination.txt');
+     *   console.log('source.txt was copied to destination.txt');
+     * } catch {
+     *   console.error('The file could not be copied');
+     * }
+     *
+     * // By using COPYFILE_EXCL, the operation will fail if destination.txt exists.
+     * try {
+     *   await copyFile('source.txt', 'destination.txt', constants.COPYFILE_EXCL);
+     *   console.log('source.txt was copied to destination.txt');
+     * } catch {
+     *   console.error('The file could not be copied');
+     * }
+     * ```
+     * @since v10.0.0
+     * @param src source filename to copy
+     * @param dest destination filename of the copy operation
+     * @param [mode=0] Optional modifiers that specify the behavior of the copy operation. It is possible to create a mask consisting of the bitwise OR of two or more values (e.g.
+     * `fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE`)
+     * @return Fulfills with `undefined` upon success.
+     */
+    function copyFile(src: PathLike, dest: PathLike, mode?: number): Promise;
+    /**
+     * Opens a `FileHandle`.
+     *
+     * Refer to the POSIX [`open(2)`](http://man7.org/linux/man-pages/man2/open.2.html) documentation for more detail.
+     *
+     * Some characters (`< > : " / \ | ? *`) are reserved under Windows as documented
+     * by [Naming Files, Paths, and Namespaces](https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file). Under NTFS, if the filename contains
+     * a colon, Node.js will open a file system stream, as described by [this MSDN page](https://docs.microsoft.com/en-us/windows/desktop/FileIO/using-streams).
+     * @since v10.0.0
+     * @param [flags='r'] See `support of file system `flags``.
+     * @param [mode=0o666] Sets the file mode (permission and sticky bits) if the file is created.
+     * @return Fulfills with a {FileHandle} object.
+     */
+    function open(path: PathLike, flags?: string | number, mode?: Mode): Promise;
+    /**
+     * Renames `oldPath` to `newPath`.
+     * @since v10.0.0
+     * @return Fulfills with `undefined` upon success.
+     */
+    function rename(oldPath: PathLike, newPath: PathLike): Promise;
+    /**
+     * Truncates (shortens or extends the length) of the content at `path` to `len` bytes.
+     * @since v10.0.0
+     * @param [len=0]
+     * @return Fulfills with `undefined` upon success.
+     */
+    function truncate(path: PathLike, len?: number): Promise;
+    /**
+     * Removes the directory identified by `path`.
+     *
+     * Using `fsPromises.rmdir()` on a file (not a directory) results in the
+     * promise being rejected with an `ENOENT` error on Windows and an `ENOTDIR` error on POSIX.
+     *
+     * To get a behavior similar to the `rm -rf` Unix command, use `fsPromises.rm()` with options `{ recursive: true, force: true }`.
+     * @since v10.0.0
+     * @return Fulfills with `undefined` upon success.
+     */
+    function rmdir(path: PathLike, options?: RmDirOptions): Promise;
+    /**
+     * Removes files and directories (modeled on the standard POSIX `rm` utility).
+     * @since v14.14.0
+     * @return Fulfills with `undefined` upon success.
+     */
+    function rm(path: PathLike, options?: RmOptions): Promise;
+    /**
+     * Asynchronously creates a directory.
+     *
+     * The optional `options` argument can be an integer specifying `mode` (permission
+     * and sticky bits), or an object with a `mode` property and a `recursive` property indicating whether parent directories should be created. Calling `fsPromises.mkdir()` when `path` is a directory
+     * that exists results in a
+     * rejection only when `recursive` is false.
+     *
+     * ```js
+     * import { mkdir } from 'node:fs/promises';
+     *
+     * try {
+     *   const projectFolder = new URL('./test/project/', import.meta.url);
+     *   const createDir = await mkdir(projectFolder, { recursive: true });
+     *
+     *   console.log(`created ${createDir}`);
+     * } catch (err) {
+     *   console.error(err.message);
+     * }
+     * ```
+     * @since v10.0.0
+     * @return Upon success, fulfills with `undefined` if `recursive` is `false`, or the first directory path created if `recursive` is `true`.
+     */
+    function mkdir(
+        path: PathLike,
+        options: MakeDirectoryOptions & {
+            recursive: true;
+        },
+    ): Promise;
+    /**
+     * Asynchronous mkdir(2) - create a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders
+     * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`.
+     */
+    function mkdir(
+        path: PathLike,
+        options?:
+            | Mode
+            | (MakeDirectoryOptions & {
+                recursive?: false | undefined;
+            })
+            | null,
+    ): Promise;
+    /**
+     * Asynchronous mkdir(2) - create a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders
+     * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`.
+     */
+    function mkdir(path: PathLike, options?: Mode | MakeDirectoryOptions | null): Promise;
+    /**
+     * Reads the contents of a directory.
+     *
+     * The optional `options` argument can be a string specifying an encoding, or an
+     * object with an `encoding` property specifying the character encoding to use for
+     * the filenames. If the `encoding` is set to `'buffer'`, the filenames returned
+     * will be passed as `Buffer` objects.
+     *
+     * If `options.withFileTypes` is set to `true`, the returned array will contain `fs.Dirent` objects.
+     *
+     * ```js
+     * import { readdir } from 'node:fs/promises';
+     *
+     * try {
+     *   const files = await readdir(path);
+     *   for (const file of files)
+     *     console.log(file);
+     * } catch (err) {
+     *   console.error(err);
+     * }
+     * ```
+     * @since v10.0.0
+     * @return Fulfills with an array of the names of the files in the directory excluding `'.'` and `'..'`.
+     */
+    function readdir(
+        path: PathLike,
+        options?:
+            | (ObjectEncodingOptions & {
+                withFileTypes?: false | undefined;
+                recursive?: boolean | undefined;
+            })
+            | BufferEncoding
+            | null,
+    ): Promise;
+    /**
+     * Asynchronous readdir(3) - read a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function readdir(
+        path: PathLike,
+        options:
+            | {
+                encoding: "buffer";
+                withFileTypes?: false | undefined;
+                recursive?: boolean | undefined;
+            }
+            | "buffer",
+    ): Promise;
+    /**
+     * Asynchronous readdir(3) - read a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function readdir(
+        path: PathLike,
+        options?:
+            | (ObjectEncodingOptions & {
+                withFileTypes?: false | undefined;
+                recursive?: boolean | undefined;
+            })
+            | BufferEncoding
+            | null,
+    ): Promise;
+    /**
+     * Asynchronous readdir(3) - read a directory.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options If called with `withFileTypes: true` the result data will be an array of Dirent.
+     */
+    function readdir(
+        path: PathLike,
+        options: ObjectEncodingOptions & {
+            withFileTypes: true;
+            recursive?: boolean | undefined;
+        },
+    ): Promise;
+    /**
+     * Asynchronous readdir(3) - read a directory.
+     * @param path A path to a directory. If a URL is provided, it must use the `file:` protocol.
+     * @param options Must include `withFileTypes: true` and `encoding: 'buffer'`.
+     */
+    function readdir(
+        path: PathLike,
+        options: {
+            encoding: "buffer";
+            withFileTypes: true;
+            recursive?: boolean | undefined;
+        },
+    ): Promise[]>;
+    /**
+     * Reads the contents of the symbolic link referred to by `path`. See the POSIX [`readlink(2)`](http://man7.org/linux/man-pages/man2/readlink.2.html) documentation for more detail. The promise is
+     * fulfilled with the`linkString` upon success.
+     *
+     * The optional `options` argument can be a string specifying an encoding, or an
+     * object with an `encoding` property specifying the character encoding to use for
+     * the link path returned. If the `encoding` is set to `'buffer'`, the link path
+     * returned will be passed as a `Buffer` object.
+     * @since v10.0.0
+     * @return Fulfills with the `linkString` upon success.
+     */
+    function readlink(path: PathLike, options?: ObjectEncodingOptions | BufferEncoding | null): Promise;
+    /**
+     * Asynchronous readlink(2) - read value of a symbolic link.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function readlink(path: PathLike, options: BufferEncodingOption): Promise;
+    /**
+     * Asynchronous readlink(2) - read value of a symbolic link.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function readlink(
+        path: PathLike,
+        options?: ObjectEncodingOptions | string | null,
+    ): Promise;
+    /**
+     * Creates a symbolic link.
+     *
+     * The `type` argument is only used on Windows platforms and can be one of `'dir'`, `'file'`, or `'junction'`. If the `type` argument is not a string, Node.js will
+     * autodetect `target` type and use `'file'` or `'dir'`. If the `target` does not
+     * exist, `'file'` will be used. Windows junction points require the destination
+     * path to be absolute. When using `'junction'`, the `target` argument will
+     * automatically be normalized to absolute path. Junction points on NTFS volumes
+     * can only point to directories.
+     * @since v10.0.0
+     * @param [type='null']
+     * @return Fulfills with `undefined` upon success.
+     */
+    function symlink(target: PathLike, path: PathLike, type?: string | null): Promise;
+    /**
+     * Equivalent to `fsPromises.stat()` unless `path` refers to a symbolic link,
+     * in which case the link itself is stat-ed, not the file that it refers to.
+     * Refer to the POSIX [`lstat(2)`](http://man7.org/linux/man-pages/man2/lstat.2.html) document for more detail.
+     * @since v10.0.0
+     * @return Fulfills with the {fs.Stats} object for the given symbolic link `path`.
+     */
+    function lstat(
+        path: PathLike,
+        opts?: StatOptions & {
+            bigint?: false | undefined;
+        },
+    ): Promise;
+    function lstat(
+        path: PathLike,
+        opts: StatOptions & {
+            bigint: true;
+        },
+    ): Promise;
+    function lstat(path: PathLike, opts?: StatOptions): Promise;
+    /**
+     * @since v10.0.0
+     * @return Fulfills with the {fs.Stats} object for the given `path`.
+     */
+    function stat(
+        path: PathLike,
+        opts?: StatOptions & {
+            bigint?: false | undefined;
+        },
+    ): Promise;
+    function stat(
+        path: PathLike,
+        opts: StatOptions & {
+            bigint: true;
+        },
+    ): Promise;
+    function stat(path: PathLike, opts?: StatOptions): Promise;
+    /**
+     * @since v19.6.0, v18.15.0
+     * @return Fulfills with the {fs.StatFs} object for the given `path`.
+     */
+    function statfs(
+        path: PathLike,
+        opts?: StatFsOptions & {
+            bigint?: false | undefined;
+        },
+    ): Promise;
+    function statfs(
+        path: PathLike,
+        opts: StatFsOptions & {
+            bigint: true;
+        },
+    ): Promise;
+    function statfs(path: PathLike, opts?: StatFsOptions): Promise;
+    /**
+     * Creates a new link from the `existingPath` to the `newPath`. See the POSIX [`link(2)`](http://man7.org/linux/man-pages/man2/link.2.html) documentation for more detail.
+     * @since v10.0.0
+     * @return Fulfills with `undefined` upon success.
+     */
+    function link(existingPath: PathLike, newPath: PathLike): Promise;
+    /**
+     * If `path` refers to a symbolic link, then the link is removed without affecting
+     * the file or directory to which that link refers. If the `path` refers to a file
+     * path that is not a symbolic link, the file is deleted. See the POSIX [`unlink(2)`](http://man7.org/linux/man-pages/man2/unlink.2.html) documentation for more detail.
+     * @since v10.0.0
+     * @return Fulfills with `undefined` upon success.
+     */
+    function unlink(path: PathLike): Promise;
+    /**
+     * Changes the permissions of a file.
+     * @since v10.0.0
+     * @return Fulfills with `undefined` upon success.
+     */
+    function chmod(path: PathLike, mode: Mode): Promise;
+    /**
+     * Changes the permissions on a symbolic link.
+     *
+     * This method is only implemented on macOS.
+     * @deprecated Since v10.0.0
+     * @return Fulfills with `undefined` upon success.
+     */
+    function lchmod(path: PathLike, mode: Mode): Promise;
+    /**
+     * Changes the ownership on a symbolic link.
+     * @since v10.0.0
+     * @return Fulfills with `undefined` upon success.
+     */
+    function lchown(path: PathLike, uid: number, gid: number): Promise;
+    /**
+     * Changes the access and modification times of a file in the same way as `fsPromises.utimes()`, with the difference that if the path refers to a
+     * symbolic link, then the link is not dereferenced: instead, the timestamps of
+     * the symbolic link itself are changed.
+     * @since v14.5.0, v12.19.0
+     * @return Fulfills with `undefined` upon success.
+     */
+    function lutimes(path: PathLike, atime: TimeLike, mtime: TimeLike): Promise;
+    /**
+     * Changes the ownership of a file.
+     * @since v10.0.0
+     * @return Fulfills with `undefined` upon success.
+     */
+    function chown(path: PathLike, uid: number, gid: number): Promise;
+    /**
+     * Change the file system timestamps of the object referenced by `path`.
+     *
+     * The `atime` and `mtime` arguments follow these rules:
+     *
+     * * Values can be either numbers representing Unix epoch time, `Date`s, or a
+     * numeric string like `'123456789.0'`.
+     * * If the value can not be converted to a number, or is `NaN`, `Infinity`, or `-Infinity`, an `Error` will be thrown.
+     * @since v10.0.0
+     * @return Fulfills with `undefined` upon success.
+     */
+    function utimes(path: PathLike, atime: TimeLike, mtime: TimeLike): Promise;
+    /**
+     * Determines the actual location of `path` using the same semantics as the `fs.realpath.native()` function.
+     *
+     * Only paths that can be converted to UTF8 strings are supported.
+     *
+     * The optional `options` argument can be a string specifying an encoding, or an
+     * object with an `encoding` property specifying the character encoding to use for
+     * the path. If the `encoding` is set to `'buffer'`, the path returned will be
+     * passed as a `Buffer` object.
+     *
+     * On Linux, when Node.js is linked against musl libc, the procfs file system must
+     * be mounted on `/proc` in order for this function to work. Glibc does not have
+     * this restriction.
+     * @since v10.0.0
+     * @return Fulfills with the resolved path upon success.
+     */
+    function realpath(path: PathLike, options?: ObjectEncodingOptions | BufferEncoding | null): Promise;
+    /**
+     * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function realpath(path: PathLike, options: BufferEncodingOption): Promise;
+    /**
+     * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function realpath(
+        path: PathLike,
+        options?: ObjectEncodingOptions | BufferEncoding | null,
+    ): Promise;
+    /**
+     * Creates a unique temporary directory. A unique directory name is generated by
+     * appending six random characters to the end of the provided `prefix`. Due to
+     * platform inconsistencies, avoid trailing `X` characters in `prefix`. Some
+     * platforms, notably the BSDs, can return more than six random characters, and
+     * replace trailing `X` characters in `prefix` with random characters.
+     *
+     * The optional `options` argument can be a string specifying an encoding, or an
+     * object with an `encoding` property specifying the character encoding to use.
+     *
+     * ```js
+     * import { mkdtemp } from 'node:fs/promises';
+     * import { join } from 'node:path';
+     * import { tmpdir } from 'node:os';
+     *
+     * try {
+     *   await mkdtemp(join(tmpdir(), 'foo-'));
+     * } catch (err) {
+     *   console.error(err);
+     * }
+     * ```
+     *
+     * The `fsPromises.mkdtemp()` method will append the six randomly selected
+     * characters directly to the `prefix` string. For instance, given a directory `/tmp`, if the intention is to create a temporary directory _within_ `/tmp`, the `prefix` must end with a trailing
+     * platform-specific path separator
+     * (`import { sep } from 'node:path'`).
+     * @since v10.0.0
+     * @return Fulfills with a string containing the file system path of the newly created temporary directory.
+     */
+    function mkdtemp(prefix: string, options?: ObjectEncodingOptions | BufferEncoding | null): Promise;
+    /**
+     * Asynchronously creates a unique temporary directory.
+     * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function mkdtemp(prefix: string, options: BufferEncodingOption): Promise;
+    /**
+     * Asynchronously creates a unique temporary directory.
+     * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory.
+     * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+     */
+    function mkdtemp(
+        prefix: string,
+        options?: ObjectEncodingOptions | BufferEncoding | null,
+    ): Promise;
+    /**
+     * The resulting Promise holds an async-disposable object whose `path` property
+     * holds the created directory path. When the object is disposed, the directory
+     * and its contents will be removed asynchronously if it still exists. If the
+     * directory cannot be deleted, disposal will throw an error. The object has an
+     * async `remove()` method which will perform the same task.
+     *
+     * Both this function and the disposal function on the resulting object are
+     * async, so it should be used with `await` + `await using` as in
+     * `await using dir = await fsPromises.mkdtempDisposable('prefix')`.
+     *
+     * 
+     *
+     * For detailed information, see the documentation of `fsPromises.mkdtemp()`.
+     *
+     * The optional `options` argument can be a string specifying an encoding, or an
+     * object with an `encoding` property specifying the character encoding to use.
+     * @since v24.4.0
+     */
+    function mkdtempDisposable(prefix: PathLike, options?: EncodingOption): Promise;
+    /**
+     * Asynchronously writes data to a file, replacing the file if it already exists. `data` can be a string, a buffer, an
+     * [AsyncIterable](https://tc39.github.io/ecma262/#sec-asynciterable-interface), or an
+     * [Iterable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterable_protocol) object.
+     *
+     * The `encoding` option is ignored if `data` is a buffer.
+     *
+     * If `options` is a string, then it specifies the encoding.
+     *
+     * The `mode` option only affects the newly created file. See `fs.open()` for more details.
+     *
+     * Any specified `FileHandle` has to support writing.
+     *
+     * It is unsafe to use `fsPromises.writeFile()` multiple times on the same file
+     * without waiting for the promise to be settled.
+     *
+     * Similarly to `fsPromises.readFile` \- `fsPromises.writeFile` is a convenience
+     * method that performs multiple `write` calls internally to write the buffer
+     * passed to it. For performance sensitive code consider using `fs.createWriteStream()` or `filehandle.createWriteStream()`.
+     *
+     * It is possible to use an `AbortSignal` to cancel an `fsPromises.writeFile()`.
+     * Cancelation is "best effort", and some amount of data is likely still
+     * to be written.
+     *
+     * ```js
+     * import { writeFile } from 'node:fs/promises';
+     * import { Buffer } from 'node:buffer';
+     *
+     * try {
+     *   const controller = new AbortController();
+     *   const { signal } = controller;
+     *   const data = new Uint8Array(Buffer.from('Hello Node.js'));
+     *   const promise = writeFile('message.txt', data, { signal });
+     *
+     *   // Abort the request before the promise settles.
+     *   controller.abort();
+     *
+     *   await promise;
+     * } catch (err) {
+     *   // When a request is aborted - err is an AbortError
+     *   console.error(err);
+     * }
+     * ```
+     *
+     * Aborting an ongoing request does not abort individual operating
+     * system requests but rather the internal buffering `fs.writeFile` performs.
+     * @since v10.0.0
+     * @param file filename or `FileHandle`
+     * @return Fulfills with `undefined` upon success.
+     */
+    function writeFile(
+        file: PathLike | FileHandle,
+        data:
+            | string
+            | NodeJS.ArrayBufferView
+            | Iterable
+            | AsyncIterable
+            | Stream,
+        options?:
+            | (ObjectEncodingOptions & {
+                mode?: Mode | undefined;
+                flag?: OpenMode | undefined;
+                /**
+                 * If all data is successfully written to the file, and `flush`
+                 * is `true`, `filehandle.sync()` is used to flush the data.
+                 * @default false
+                 */
+                flush?: boolean | undefined;
+            } & Abortable)
+            | BufferEncoding
+            | null,
+    ): Promise;
+    /**
+     * Asynchronously append data to a file, creating the file if it does not yet
+     * exist. `data` can be a string or a `Buffer`.
+     *
+     * If `options` is a string, then it specifies the `encoding`.
+     *
+     * The `mode` option only affects the newly created file. See `fs.open()` for more details.
+     *
+     * The `path` may be specified as a `FileHandle` that has been opened
+     * for appending (using `fsPromises.open()`).
+     * @since v10.0.0
+     * @param path filename or {FileHandle}
+     * @return Fulfills with `undefined` upon success.
+     */
+    function appendFile(
+        path: PathLike | FileHandle,
+        data: string | Uint8Array,
+        options?: (ObjectEncodingOptions & FlagAndOpenMode & { flush?: boolean | undefined }) | BufferEncoding | null,
+    ): Promise;
+    /**
+     * Asynchronously reads the entire contents of a file.
+     *
+     * If no encoding is specified (using `options.encoding`), the data is returned
+     * as a `Buffer` object. Otherwise, the data will be a string.
+     *
+     * If `options` is a string, then it specifies the encoding.
+     *
+     * When the `path` is a directory, the behavior of `fsPromises.readFile()` is
+     * platform-specific. On macOS, Linux, and Windows, the promise will be rejected
+     * with an error. On FreeBSD, a representation of the directory's contents will be
+     * returned.
+     *
+     * An example of reading a `package.json` file located in the same directory of the
+     * running code:
+     *
+     * ```js
+     * import { readFile } from 'node:fs/promises';
+     * try {
+     *   const filePath = new URL('./package.json', import.meta.url);
+     *   const contents = await readFile(filePath, { encoding: 'utf8' });
+     *   console.log(contents);
+     * } catch (err) {
+     *   console.error(err.message);
+     * }
+     * ```
+     *
+     * It is possible to abort an ongoing `readFile` using an `AbortSignal`. If a
+     * request is aborted the promise returned is rejected with an `AbortError`:
+     *
+     * ```js
+     * import { readFile } from 'node:fs/promises';
+     *
+     * try {
+     *   const controller = new AbortController();
+     *   const { signal } = controller;
+     *   const promise = readFile(fileName, { signal });
+     *
+     *   // Abort the request before the promise settles.
+     *   controller.abort();
+     *
+     *   await promise;
+     * } catch (err) {
+     *   // When a request is aborted - err is an AbortError
+     *   console.error(err);
+     * }
+     * ```
+     *
+     * Aborting an ongoing request does not abort individual operating
+     * system requests but rather the internal buffering `fs.readFile` performs.
+     *
+     * Any specified `FileHandle` has to support reading.
+     * @since v10.0.0
+     * @param path filename or `FileHandle`
+     * @return Fulfills with the contents of the file.
+     */
+    function readFile(
+        path: PathLike | FileHandle,
+        options?:
+            | ({
+                encoding?: null | undefined;
+                flag?: OpenMode | undefined;
+            } & Abortable)
+            | null,
+    ): Promise;
+    /**
+     * Asynchronously reads the entire contents of a file.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically.
+     * @param options An object that may contain an optional flag.
+     * If a flag is not provided, it defaults to `'r'`.
+     */
+    function readFile(
+        path: PathLike | FileHandle,
+        options:
+            | ({
+                encoding: BufferEncoding;
+                flag?: OpenMode | undefined;
+            } & Abortable)
+            | BufferEncoding,
+    ): Promise;
+    /**
+     * Asynchronously reads the entire contents of a file.
+     * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+     * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically.
+     * @param options An object that may contain an optional flag.
+     * If a flag is not provided, it defaults to `'r'`.
+     */
+    function readFile(
+        path: PathLike | FileHandle,
+        options?:
+            | (
+                & ObjectEncodingOptions
+                & Abortable
+                & {
+                    flag?: OpenMode | undefined;
+                }
+            )
+            | BufferEncoding
+            | null,
+    ): Promise;
+    /**
+     * Asynchronously open a directory for iterative scanning. See the POSIX [`opendir(3)`](http://man7.org/linux/man-pages/man3/opendir.3.html) documentation for more detail.
+     *
+     * Creates an `fs.Dir`, which contains all further functions for reading from
+     * and cleaning up the directory.
+     *
+     * The `encoding` option sets the encoding for the `path` while opening the
+     * directory and subsequent read operations.
+     *
+     * Example using async iteration:
+     *
+     * ```js
+     * import { opendir } from 'node:fs/promises';
+     *
+     * try {
+     *   const dir = await opendir('./');
+     *   for await (const dirent of dir)
+     *     console.log(dirent.name);
+     * } catch (err) {
+     *   console.error(err);
+     * }
+     * ```
+     *
+     * When using the async iterator, the `fs.Dir` object will be automatically
+     * closed after the iterator exits.
+     * @since v12.12.0
+     * @return Fulfills with an {fs.Dir}.
+     */
+    function opendir(path: PathLike, options?: OpenDirOptions): Promise;
+    interface WatchOptions extends _WatchOptions {
+        maxQueue?: number | undefined;
+        overflow?: "ignore" | "throw" | undefined;
+    }
+    interface WatchOptionsWithBufferEncoding extends WatchOptions {
+        encoding: "buffer";
+    }
+    interface WatchOptionsWithStringEncoding extends WatchOptions {
+        encoding?: BufferEncoding | undefined;
+    }
+    /**
+     * Returns an async iterator that watches for changes on `filename`, where `filename`is either a file or a directory.
+     *
+     * ```js
+     * import { watch } from 'node:fs/promises';
+     *
+     * const ac = new AbortController();
+     * const { signal } = ac;
+     * setTimeout(() => ac.abort(), 10000);
+     *
+     * (async () => {
+     *   try {
+     *     const watcher = watch(__filename, { signal });
+     *     for await (const event of watcher)
+     *       console.log(event);
+     *   } catch (err) {
+     *     if (err.name === 'AbortError')
+     *       return;
+     *     throw err;
+     *   }
+     * })();
+     * ```
+     *
+     * On most platforms, `'rename'` is emitted whenever a filename appears or
+     * disappears in the directory.
+     *
+     * All the `caveats` for `fs.watch()` also apply to `fsPromises.watch()`.
+     * @since v15.9.0, v14.18.0
+     * @return of objects with the properties:
+     */
+    function watch(
+        filename: PathLike,
+        options?: WatchOptionsWithStringEncoding | BufferEncoding,
+    ): NodeJS.AsyncIterator>;
+    function watch(
+        filename: PathLike,
+        options: WatchOptionsWithBufferEncoding | "buffer",
+    ): NodeJS.AsyncIterator>;
+    function watch(
+        filename: PathLike,
+        options: WatchOptions | BufferEncoding | "buffer",
+    ): NodeJS.AsyncIterator>;
+    /**
+     * Asynchronously copies the entire directory structure from `src` to `dest`,
+     * including subdirectories and files.
+     *
+     * When copying a directory to another directory, globs are not supported and
+     * behavior is similar to `cp dir1/ dir2/`.
+     * @since v16.7.0
+     * @experimental
+     * @param src source path to copy.
+     * @param dest destination path to copy to.
+     * @return Fulfills with `undefined` upon success.
+     */
+    function cp(source: string | URL, destination: string | URL, opts?: CopyOptions): Promise;
+    /**
+     * ```js
+     * import { glob } from 'node:fs/promises';
+     *
+     * for await (const entry of glob('*.js'))
+     *   console.log(entry);
+     * ```
+     * @since v22.0.0
+     * @returns An AsyncIterator that yields the paths of files
+     * that match the pattern.
+     */
+    function glob(pattern: string | readonly string[]): NodeJS.AsyncIterator;
+    function glob(
+        pattern: string | readonly string[],
+        options: GlobOptionsWithFileTypes,
+    ): NodeJS.AsyncIterator;
+    function glob(
+        pattern: string | readonly string[],
+        options: GlobOptionsWithoutFileTypes,
+    ): NodeJS.AsyncIterator;
+    function glob(
+        pattern: string | readonly string[],
+        options: GlobOptions,
+    ): NodeJS.AsyncIterator;
+}
+declare module "node:fs/promises" {
+    export * from "fs/promises";
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/globals.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/globals.d.ts
new file mode 100644
index 00000000..9c6837d3
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/globals.d.ts
@@ -0,0 +1,170 @@
+declare var global: typeof globalThis;
+
+declare var process: NodeJS.Process;
+declare var console: Console;
+
+interface ErrorConstructor {
+    /**
+     * Creates a `.stack` property on `targetObject`, which when accessed returns
+     * a string representing the location in the code at which
+     * `Error.captureStackTrace()` was called.
+     *
+     * ```js
+     * const myObject = {};
+     * Error.captureStackTrace(myObject);
+     * myObject.stack;  // Similar to `new Error().stack`
+     * ```
+     *
+     * The first line of the trace will be prefixed with
+     * `${myObject.name}: ${myObject.message}`.
+     *
+     * The optional `constructorOpt` argument accepts a function. If given, all frames
+     * above `constructorOpt`, including `constructorOpt`, will be omitted from the
+     * generated stack trace.
+     *
+     * The `constructorOpt` argument is useful for hiding implementation
+     * details of error generation from the user. For instance:
+     *
+     * ```js
+     * function a() {
+     *   b();
+     * }
+     *
+     * function b() {
+     *   c();
+     * }
+     *
+     * function c() {
+     *   // Create an error without stack trace to avoid calculating the stack trace twice.
+     *   const { stackTraceLimit } = Error;
+     *   Error.stackTraceLimit = 0;
+     *   const error = new Error();
+     *   Error.stackTraceLimit = stackTraceLimit;
+     *
+     *   // Capture the stack trace above function b
+     *   Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace
+     *   throw error;
+     * }
+     *
+     * a();
+     * ```
+     */
+    captureStackTrace(targetObject: object, constructorOpt?: Function): void;
+    /**
+     * @see https://v8.dev/docs/stack-trace-api#customizing-stack-traces
+     */
+    prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
+    /**
+     * The `Error.stackTraceLimit` property specifies the number of stack frames
+     * collected by a stack trace (whether generated by `new Error().stack` or
+     * `Error.captureStackTrace(obj)`).
+     *
+     * The default value is `10` but may be set to any valid JavaScript number. Changes
+     * will affect any stack trace captured _after_ the value has been changed.
+     *
+     * If set to a non-number value, or set to a negative number, stack traces will
+     * not capture any frames.
+     */
+    stackTraceLimit: number;
+}
+
+/**
+ * Enable this API with the `--expose-gc` CLI flag.
+ */
+declare var gc: NodeJS.GCFunction | undefined;
+
+declare namespace NodeJS {
+    interface CallSite {
+        getColumnNumber(): number | null;
+        getEnclosingColumnNumber(): number | null;
+        getEnclosingLineNumber(): number | null;
+        getEvalOrigin(): string | undefined;
+        getFileName(): string | null;
+        getFunction(): Function | undefined;
+        getFunctionName(): string | null;
+        getLineNumber(): number | null;
+        getMethodName(): string | null;
+        getPosition(): number;
+        getPromiseIndex(): number | null;
+        getScriptHash(): string;
+        getScriptNameOrSourceURL(): string | null;
+        getThis(): unknown;
+        getTypeName(): string | null;
+        isAsync(): boolean;
+        isConstructor(): boolean;
+        isEval(): boolean;
+        isNative(): boolean;
+        isPromiseAll(): boolean;
+        isToplevel(): boolean;
+    }
+
+    interface ErrnoException extends Error {
+        errno?: number | undefined;
+        code?: string | undefined;
+        path?: string | undefined;
+        syscall?: string | undefined;
+    }
+
+    interface ReadableStream extends EventEmitter {
+        readable: boolean;
+        read(size?: number): string | Buffer;
+        setEncoding(encoding: BufferEncoding): this;
+        pause(): this;
+        resume(): this;
+        isPaused(): boolean;
+        pipe(destination: T, options?: { end?: boolean | undefined }): T;
+        unpipe(destination?: WritableStream): this;
+        unshift(chunk: string | Uint8Array, encoding?: BufferEncoding): void;
+        wrap(oldStream: ReadableStream): this;
+        [Symbol.asyncIterator](): AsyncIterableIterator;
+    }
+
+    interface WritableStream extends EventEmitter {
+        writable: boolean;
+        write(buffer: Uint8Array | string, cb?: (err?: Error | null) => void): boolean;
+        write(str: string, encoding?: BufferEncoding, cb?: (err?: Error | null) => void): boolean;
+        end(cb?: () => void): this;
+        end(data: string | Uint8Array, cb?: () => void): this;
+        end(str: string, encoding?: BufferEncoding, cb?: () => void): this;
+    }
+
+    interface ReadWriteStream extends ReadableStream, WritableStream {}
+
+    interface RefCounted {
+        ref(): this;
+        unref(): this;
+    }
+
+    interface Dict {
+        [key: string]: T | undefined;
+    }
+
+    interface ReadOnlyDict {
+        readonly [key: string]: T | undefined;
+    }
+
+    type PartialOptions = { [K in keyof T]?: T[K] | undefined };
+
+    interface GCFunction {
+        (minor?: boolean): void;
+        (options: NodeJS.GCOptions & { execution: "async" }): Promise;
+        (options: NodeJS.GCOptions): void;
+    }
+
+    interface GCOptions {
+        execution?: "sync" | "async" | undefined;
+        flavor?: "regular" | "last-resort" | undefined;
+        type?: "major-snapshot" | "major" | "minor" | undefined;
+        filename?: string | undefined;
+    }
+
+    /** An iterable iterator returned by the Node.js API. */
+    interface Iterator extends IteratorObject {
+        [Symbol.iterator](): NodeJS.Iterator;
+    }
+
+    /** An async iterable iterator returned by the Node.js API. */
+    interface AsyncIterator extends AsyncIteratorObject {
+        [Symbol.asyncIterator](): NodeJS.AsyncIterator;
+    }
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/globals.typedarray.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/globals.typedarray.d.ts
new file mode 100644
index 00000000..cae4c0b1
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/globals.typedarray.d.ts
@@ -0,0 +1,41 @@
+export {}; // Make this a module
+
+declare global {
+    namespace NodeJS {
+        type TypedArray =
+            | Uint8Array
+            | Uint8ClampedArray
+            | Uint16Array
+            | Uint32Array
+            | Int8Array
+            | Int16Array
+            | Int32Array
+            | BigUint64Array
+            | BigInt64Array
+            | Float16Array
+            | Float32Array
+            | Float64Array;
+        type ArrayBufferView =
+            | TypedArray
+            | DataView;
+
+        // The following aliases are required to allow use of non-shared ArrayBufferViews in @types/node
+        // while maintaining compatibility with TS <=5.6.
+        // TODO: remove once @types/node no longer supports TS 5.6, and replace with native types.
+        type NonSharedUint8Array = Uint8Array;
+        type NonSharedUint8ClampedArray = Uint8ClampedArray;
+        type NonSharedUint16Array = Uint16Array;
+        type NonSharedUint32Array = Uint32Array;
+        type NonSharedInt8Array = Int8Array;
+        type NonSharedInt16Array = Int16Array;
+        type NonSharedInt32Array = Int32Array;
+        type NonSharedBigUint64Array = BigUint64Array;
+        type NonSharedBigInt64Array = BigInt64Array;
+        type NonSharedFloat16Array = Float16Array;
+        type NonSharedFloat32Array = Float32Array;
+        type NonSharedFloat64Array = Float64Array;
+        type NonSharedDataView = DataView;
+        type NonSharedTypedArray = TypedArray;
+        type NonSharedArrayBufferView = ArrayBufferView;
+    }
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/http.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/http.d.ts
new file mode 100644
index 00000000..771b8b2f
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/http.d.ts
@@ -0,0 +1,2134 @@
+/**
+ * To use the HTTP server and client one must import the `node:http` module.
+ *
+ * The HTTP interfaces in Node.js are designed to support many features
+ * of the protocol which have been traditionally difficult to use.
+ * In particular, large, possibly chunk-encoded, messages. The interface is
+ * careful to never buffer entire requests or responses, so the
+ * user is able to stream data.
+ *
+ * HTTP message headers are represented by an object like this:
+ *
+ * ```json
+ * { "content-length": "123",
+ *   "content-type": "text/plain",
+ *   "connection": "keep-alive",
+ *   "host": "example.com",
+ *   "accept": "*" }
+ * ```
+ *
+ * Keys are lowercased. Values are not modified.
+ *
+ * In order to support the full spectrum of possible HTTP applications, the Node.js
+ * HTTP API is very low-level. It deals with stream handling and message
+ * parsing only. It parses a message into headers and body but it does not
+ * parse the actual headers or the body.
+ *
+ * See `message.headers` for details on how duplicate headers are handled.
+ *
+ * The raw headers as they were received are retained in the `rawHeaders` property, which is an array of `[key, value, key2, value2, ...]`. For
+ * example, the previous message header object might have a `rawHeaders` list like the following:
+ *
+ * ```js
+ * [ 'ConTent-Length', '123456',
+ *   'content-LENGTH', '123',
+ *   'content-type', 'text/plain',
+ *   'CONNECTION', 'keep-alive',
+ *   'Host', 'example.com',
+ *   'accepT', '*' ]
+ * ```
+ * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/http.js)
+ */
+declare module "http" {
+    import { NonSharedBuffer } from "node:buffer";
+    import * as stream from "node:stream";
+    import { URL } from "node:url";
+    import { LookupOptions } from "node:dns";
+    import { EventEmitter } from "node:events";
+    import { LookupFunction, Server as NetServer, Socket, TcpSocketConnectOpts } from "node:net";
+    // incoming headers will never contain number
+    interface IncomingHttpHeaders extends NodeJS.Dict {
+        accept?: string | undefined;
+        "accept-encoding"?: string | undefined;
+        "accept-language"?: string | undefined;
+        "accept-patch"?: string | undefined;
+        "accept-ranges"?: string | undefined;
+        "access-control-allow-credentials"?: string | undefined;
+        "access-control-allow-headers"?: string | undefined;
+        "access-control-allow-methods"?: string | undefined;
+        "access-control-allow-origin"?: string | undefined;
+        "access-control-expose-headers"?: string | undefined;
+        "access-control-max-age"?: string | undefined;
+        "access-control-request-headers"?: string | undefined;
+        "access-control-request-method"?: string | undefined;
+        age?: string | undefined;
+        allow?: string | undefined;
+        "alt-svc"?: string | undefined;
+        authorization?: string | undefined;
+        "cache-control"?: string | undefined;
+        connection?: string | undefined;
+        "content-disposition"?: string | undefined;
+        "content-encoding"?: string | undefined;
+        "content-language"?: string | undefined;
+        "content-length"?: string | undefined;
+        "content-location"?: string | undefined;
+        "content-range"?: string | undefined;
+        "content-type"?: string | undefined;
+        cookie?: string | undefined;
+        date?: string | undefined;
+        etag?: string | undefined;
+        expect?: string | undefined;
+        expires?: string | undefined;
+        forwarded?: string | undefined;
+        from?: string | undefined;
+        host?: string | undefined;
+        "if-match"?: string | undefined;
+        "if-modified-since"?: string | undefined;
+        "if-none-match"?: string | undefined;
+        "if-unmodified-since"?: string | undefined;
+        "last-modified"?: string | undefined;
+        location?: string | undefined;
+        origin?: string | undefined;
+        pragma?: string | undefined;
+        "proxy-authenticate"?: string | undefined;
+        "proxy-authorization"?: string | undefined;
+        "public-key-pins"?: string | undefined;
+        range?: string | undefined;
+        referer?: string | undefined;
+        "retry-after"?: string | undefined;
+        "sec-fetch-site"?: string | undefined;
+        "sec-fetch-mode"?: string | undefined;
+        "sec-fetch-user"?: string | undefined;
+        "sec-fetch-dest"?: string | undefined;
+        "sec-websocket-accept"?: string | undefined;
+        "sec-websocket-extensions"?: string | undefined;
+        "sec-websocket-key"?: string | undefined;
+        "sec-websocket-protocol"?: string | undefined;
+        "sec-websocket-version"?: string | undefined;
+        "set-cookie"?: string[] | undefined;
+        "strict-transport-security"?: string | undefined;
+        tk?: string | undefined;
+        trailer?: string | undefined;
+        "transfer-encoding"?: string | undefined;
+        upgrade?: string | undefined;
+        "user-agent"?: string | undefined;
+        vary?: string | undefined;
+        via?: string | undefined;
+        warning?: string | undefined;
+        "www-authenticate"?: string | undefined;
+    }
+    // outgoing headers allows numbers (as they are converted internally to strings)
+    type OutgoingHttpHeader = number | string | string[];
+    interface OutgoingHttpHeaders extends NodeJS.Dict {
+        accept?: string | string[] | undefined;
+        "accept-charset"?: string | string[] | undefined;
+        "accept-encoding"?: string | string[] | undefined;
+        "accept-language"?: string | string[] | undefined;
+        "accept-ranges"?: string | undefined;
+        "access-control-allow-credentials"?: string | undefined;
+        "access-control-allow-headers"?: string | undefined;
+        "access-control-allow-methods"?: string | undefined;
+        "access-control-allow-origin"?: string | undefined;
+        "access-control-expose-headers"?: string | undefined;
+        "access-control-max-age"?: string | undefined;
+        "access-control-request-headers"?: string | undefined;
+        "access-control-request-method"?: string | undefined;
+        age?: string | undefined;
+        allow?: string | undefined;
+        authorization?: string | undefined;
+        "cache-control"?: string | undefined;
+        "cdn-cache-control"?: string | undefined;
+        connection?: string | string[] | undefined;
+        "content-disposition"?: string | undefined;
+        "content-encoding"?: string | undefined;
+        "content-language"?: string | undefined;
+        "content-length"?: string | number | undefined;
+        "content-location"?: string | undefined;
+        "content-range"?: string | undefined;
+        "content-security-policy"?: string | undefined;
+        "content-security-policy-report-only"?: string | undefined;
+        "content-type"?: string | undefined;
+        cookie?: string | string[] | undefined;
+        dav?: string | string[] | undefined;
+        dnt?: string | undefined;
+        date?: string | undefined;
+        etag?: string | undefined;
+        expect?: string | undefined;
+        expires?: string | undefined;
+        forwarded?: string | undefined;
+        from?: string | undefined;
+        host?: string | undefined;
+        "if-match"?: string | undefined;
+        "if-modified-since"?: string | undefined;
+        "if-none-match"?: string | undefined;
+        "if-range"?: string | undefined;
+        "if-unmodified-since"?: string | undefined;
+        "last-modified"?: string | undefined;
+        link?: string | string[] | undefined;
+        location?: string | undefined;
+        "max-forwards"?: string | undefined;
+        origin?: string | undefined;
+        pragma?: string | string[] | undefined;
+        "proxy-authenticate"?: string | string[] | undefined;
+        "proxy-authorization"?: string | undefined;
+        "public-key-pins"?: string | undefined;
+        "public-key-pins-report-only"?: string | undefined;
+        range?: string | undefined;
+        referer?: string | undefined;
+        "referrer-policy"?: string | undefined;
+        refresh?: string | undefined;
+        "retry-after"?: string | undefined;
+        "sec-websocket-accept"?: string | undefined;
+        "sec-websocket-extensions"?: string | string[] | undefined;
+        "sec-websocket-key"?: string | undefined;
+        "sec-websocket-protocol"?: string | string[] | undefined;
+        "sec-websocket-version"?: string | undefined;
+        server?: string | undefined;
+        "set-cookie"?: string | string[] | undefined;
+        "strict-transport-security"?: string | undefined;
+        te?: string | undefined;
+        trailer?: string | undefined;
+        "transfer-encoding"?: string | undefined;
+        "user-agent"?: string | undefined;
+        upgrade?: string | undefined;
+        "upgrade-insecure-requests"?: string | undefined;
+        vary?: string | undefined;
+        via?: string | string[] | undefined;
+        warning?: string | undefined;
+        "www-authenticate"?: string | string[] | undefined;
+        "x-content-type-options"?: string | undefined;
+        "x-dns-prefetch-control"?: string | undefined;
+        "x-frame-options"?: string | undefined;
+        "x-xss-protection"?: string | undefined;
+    }
+    interface ClientRequestArgs extends Pick {
+        _defaultAgent?: Agent | undefined;
+        agent?: Agent | boolean | undefined;
+        auth?: string | null | undefined;
+        createConnection?:
+            | ((
+                options: ClientRequestArgs,
+                oncreate: (err: Error | null, socket: stream.Duplex) => void,
+            ) => stream.Duplex | null | undefined)
+            | undefined;
+        defaultPort?: number | string | undefined;
+        family?: number | undefined;
+        headers?: OutgoingHttpHeaders | readonly string[] | undefined;
+        host?: string | null | undefined;
+        hostname?: string | null | undefined;
+        insecureHTTPParser?: boolean | undefined;
+        localAddress?: string | undefined;
+        localPort?: number | undefined;
+        lookup?: LookupFunction | undefined;
+        /**
+         * @default 16384
+         */
+        maxHeaderSize?: number | undefined;
+        method?: string | undefined;
+        path?: string | null | undefined;
+        port?: number | string | null | undefined;
+        protocol?: string | null | undefined;
+        setDefaultHeaders?: boolean | undefined;
+        setHost?: boolean | undefined;
+        signal?: AbortSignal | undefined;
+        socketPath?: string | undefined;
+        timeout?: number | undefined;
+        uniqueHeaders?: Array | undefined;
+        joinDuplicateHeaders?: boolean | undefined;
+    }
+    interface ServerOptions<
+        Request extends typeof IncomingMessage = typeof IncomingMessage,
+        Response extends typeof ServerResponse> = typeof ServerResponse,
+    > {
+        /**
+         * Specifies the `IncomingMessage` class to be used. Useful for extending the original `IncomingMessage`.
+         */
+        IncomingMessage?: Request | undefined;
+        /**
+         * Specifies the `ServerResponse` class to be used. Useful for extending the original `ServerResponse`.
+         */
+        ServerResponse?: Response | undefined;
+        /**
+         * Sets the timeout value in milliseconds for receiving the entire request from the client.
+         * @see Server.requestTimeout for more information.
+         * @default 300000
+         * @since v18.0.0
+         */
+        requestTimeout?: number | undefined;
+        /**
+         * It joins the field line values of multiple headers in a request with `, ` instead of discarding the duplicates.
+         * @default false
+         * @since v18.14.0
+         */
+        joinDuplicateHeaders?: boolean | undefined;
+        /**
+         * The number of milliseconds of inactivity a server needs to wait for additional incoming data,
+         * after it has finished writing the last response, before a socket will be destroyed.
+         * @see Server.keepAliveTimeout for more information.
+         * @default 5000
+         * @since v18.0.0
+         */
+        keepAliveTimeout?: number | undefined;
+        /**
+         * An additional buffer time added to the
+         * `server.keepAliveTimeout` to extend the internal socket timeout.
+         * @since 24.6.0
+         * @default 1000
+         */
+        keepAliveTimeoutBuffer?: number | undefined;
+        /**
+         * Sets the interval value in milliseconds to check for request and headers timeout in incomplete requests.
+         * @default 30000
+         */
+        connectionsCheckingInterval?: number | undefined;
+        /**
+         * Sets the timeout value in milliseconds for receiving the complete HTTP headers from the client.
+         * See {@link Server.headersTimeout} for more information.
+         * @default 60000
+         * @since 18.0.0
+         */
+        headersTimeout?: number | undefined;
+        /**
+         * Optionally overrides all `socket`s' `readableHighWaterMark` and `writableHighWaterMark`.
+         * This affects `highWaterMark` property of both `IncomingMessage` and `ServerResponse`.
+         * Default: @see stream.getDefaultHighWaterMark().
+         * @since v20.1.0
+         */
+        highWaterMark?: number | undefined;
+        /**
+         * Use an insecure HTTP parser that accepts invalid HTTP headers when `true`.
+         * Using the insecure parser should be avoided.
+         * See --insecure-http-parser for more information.
+         * @default false
+         */
+        insecureHTTPParser?: boolean | undefined;
+        /**
+         * Optionally overrides the value of `--max-http-header-size` for requests received by
+         * this server, i.e. the maximum length of request headers in bytes.
+         * @default 16384
+         * @since v13.3.0
+         */
+        maxHeaderSize?: number | undefined;
+        /**
+         * If set to `true`, it disables the use of Nagle's algorithm immediately after a new incoming connection is received.
+         * @default true
+         * @since v16.5.0
+         */
+        noDelay?: boolean | undefined;
+        /**
+         * If set to `true`, it forces the server to respond with a 400 (Bad Request) status code
+         * to any HTTP/1.1 request message that lacks a Host header (as mandated by the specification).
+         * @default true
+         * @since 20.0.0
+         */
+        requireHostHeader?: boolean | undefined;
+        /**
+         * If set to `true`, it enables keep-alive functionality on the socket immediately after a new incoming connection is received,
+         * similarly on what is done in `socket.setKeepAlive([enable][, initialDelay])`.
+         * @default false
+         * @since v16.5.0
+         */
+        keepAlive?: boolean | undefined;
+        /**
+         * If set to a positive number, it sets the initial delay before the first keepalive probe is sent on an idle socket.
+         * @default 0
+         * @since v16.5.0
+         */
+        keepAliveInitialDelay?: number | undefined;
+        /**
+         * A list of response headers that should be sent only once.
+         * If the header's value is an array, the items will be joined using `; `.
+         */
+        uniqueHeaders?: Array | undefined;
+        /**
+         * A callback which receives an
+         * incoming request and returns a boolean, to control which upgrade attempts
+         * should be accepted. Accepted upgrades will fire an `'upgrade'` event (or
+         * their sockets will be destroyed, if no listener is registered) while
+         * rejected upgrades will fire a `'request'` event like any non-upgrade
+         * request.
+         * @since v24.9.0
+         * @default () => server.listenerCount('upgrade') > 0
+         */
+        shouldUpgradeCallback?: ((request: InstanceType) => boolean) | undefined;
+        /**
+         * If set to `true`, an error is thrown when writing to an HTTP response which does not have a body.
+         * @default false
+         * @since v18.17.0, v20.2.0
+         */
+        rejectNonStandardBodyWrites?: boolean | undefined;
+    }
+    type RequestListener<
+        Request extends typeof IncomingMessage = typeof IncomingMessage,
+        Response extends typeof ServerResponse> = typeof ServerResponse,
+    > = (req: InstanceType, res: InstanceType & { req: InstanceType }) => void;
+    /**
+     * @since v0.1.17
+     */
+    class Server<
+        Request extends typeof IncomingMessage = typeof IncomingMessage,
+        Response extends typeof ServerResponse> = typeof ServerResponse,
+    > extends NetServer {
+        constructor(requestListener?: RequestListener);
+        constructor(options: ServerOptions, requestListener?: RequestListener);
+        /**
+         * Sets the timeout value for sockets, and emits a `'timeout'` event on
+         * the Server object, passing the socket as an argument, if a timeout
+         * occurs.
+         *
+         * If there is a `'timeout'` event listener on the Server object, then it
+         * will be called with the timed-out socket as an argument.
+         *
+         * By default, the Server does not timeout sockets. However, if a callback
+         * is assigned to the Server's `'timeout'` event, timeouts must be handled
+         * explicitly.
+         * @since v0.9.12
+         * @param [msecs=0 (no timeout)]
+         */
+        setTimeout(msecs?: number, callback?: (socket: Socket) => void): this;
+        setTimeout(callback: (socket: Socket) => void): this;
+        /**
+         * Limits maximum incoming headers count. If set to 0, no limit will be applied.
+         * @since v0.7.0
+         */
+        maxHeadersCount: number | null;
+        /**
+         * The maximum number of requests socket can handle
+         * before closing keep alive connection.
+         *
+         * A value of `0` will disable the limit.
+         *
+         * When the limit is reached it will set the `Connection` header value to `close`,
+         * but will not actually close the connection, subsequent requests sent
+         * after the limit is reached will get `503 Service Unavailable` as a response.
+         * @since v16.10.0
+         */
+        maxRequestsPerSocket: number | null;
+        /**
+         * The number of milliseconds of inactivity before a socket is presumed
+         * to have timed out.
+         *
+         * A value of `0` will disable the timeout behavior on incoming connections.
+         *
+         * The socket timeout logic is set up on connection, so changing this
+         * value only affects new connections to the server, not any existing connections.
+         * @since v0.9.12
+         */
+        timeout: number;
+        /**
+         * Limit the amount of time the parser will wait to receive the complete HTTP
+         * headers.
+         *
+         * If the timeout expires, the server responds with status 408 without
+         * forwarding the request to the request listener and then closes the connection.
+         *
+         * It must be set to a non-zero value (e.g. 120 seconds) to protect against
+         * potential Denial-of-Service attacks in case the server is deployed without a
+         * reverse proxy in front.
+         * @since v11.3.0, v10.14.0
+         */
+        headersTimeout: number;
+        /**
+         * The number of milliseconds of inactivity a server needs to wait for additional
+         * incoming data, after it has finished writing the last response, before a socket
+         * will be destroyed.
+         *
+         * This timeout value is combined with the
+         * `server.keepAliveTimeoutBuffer` option to determine the actual socket
+         * timeout, calculated as:
+         * socketTimeout = keepAliveTimeout + keepAliveTimeoutBuffer
+         * If the server receives new data before the keep-alive timeout has fired, it
+         * will reset the regular inactivity timeout, i.e., `server.timeout`.
+         *
+         * A value of `0` will disable the keep-alive timeout behavior on incoming
+         * connections.
+         * A value of `0` makes the HTTP server behave similarly to Node.js versions prior
+         * to 8.0.0, which did not have a keep-alive timeout.
+         *
+         * The socket timeout logic is set up on connection, so changing this value only
+         * affects new connections to the server, not any existing connections.
+         * @since v8.0.0
+         */
+        keepAliveTimeout: number;
+        /**
+         * An additional buffer time added to the
+         * `server.keepAliveTimeout` to extend the internal socket timeout.
+         *
+         * This buffer helps reduce connection reset (`ECONNRESET`) errors by increasing
+         * the socket timeout slightly beyond the advertised keep-alive timeout.
+         *
+         * This option applies only to new incoming connections.
+         * @since v24.6.0
+         * @default 1000
+         */
+        keepAliveTimeoutBuffer: number;
+        /**
+         * Sets the timeout value in milliseconds for receiving the entire request from
+         * the client.
+         *
+         * If the timeout expires, the server responds with status 408 without
+         * forwarding the request to the request listener and then closes the connection.
+         *
+         * It must be set to a non-zero value (e.g. 120 seconds) to protect against
+         * potential Denial-of-Service attacks in case the server is deployed without a
+         * reverse proxy in front.
+         * @since v14.11.0
+         */
+        requestTimeout: number;
+        /**
+         * Closes all connections connected to this server.
+         * @since v18.2.0
+         */
+        closeAllConnections(): void;
+        /**
+         * Closes all connections connected to this server which are not sending a request
+         * or waiting for a response.
+         * @since v18.2.0
+         */
+        closeIdleConnections(): void;
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        addListener(event: "close", listener: () => void): this;
+        addListener(event: "connection", listener: (socket: Socket) => void): this;
+        addListener(event: "error", listener: (err: Error) => void): this;
+        addListener(event: "listening", listener: () => void): this;
+        addListener(event: "checkContinue", listener: RequestListener): this;
+        addListener(event: "checkExpectation", listener: RequestListener): this;
+        addListener(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this;
+        addListener(
+            event: "connect",
+            listener: (req: InstanceType, socket: stream.Duplex, head: NonSharedBuffer) => void,
+        ): this;
+        addListener(event: "dropRequest", listener: (req: InstanceType, socket: stream.Duplex) => void): this;
+        addListener(event: "request", listener: RequestListener): this;
+        addListener(
+            event: "upgrade",
+            listener: (req: InstanceType, socket: stream.Duplex, head: NonSharedBuffer) => void,
+        ): this;
+        emit(event: string, ...args: any[]): boolean;
+        emit(event: "close"): boolean;
+        emit(event: "connection", socket: Socket): boolean;
+        emit(event: "error", err: Error): boolean;
+        emit(event: "listening"): boolean;
+        emit(
+            event: "checkContinue",
+            req: InstanceType,
+            res: InstanceType & { req: InstanceType },
+        ): boolean;
+        emit(
+            event: "checkExpectation",
+            req: InstanceType,
+            res: InstanceType & { req: InstanceType },
+        ): boolean;
+        emit(event: "clientError", err: Error, socket: stream.Duplex): boolean;
+        emit(event: "connect", req: InstanceType, socket: stream.Duplex, head: NonSharedBuffer): boolean;
+        emit(event: "dropRequest", req: InstanceType, socket: stream.Duplex): boolean;
+        emit(
+            event: "request",
+            req: InstanceType,
+            res: InstanceType & { req: InstanceType },
+        ): boolean;
+        emit(event: "upgrade", req: InstanceType, socket: stream.Duplex, head: NonSharedBuffer): boolean;
+        on(event: string, listener: (...args: any[]) => void): this;
+        on(event: "close", listener: () => void): this;
+        on(event: "connection", listener: (socket: Socket) => void): this;
+        on(event: "error", listener: (err: Error) => void): this;
+        on(event: "listening", listener: () => void): this;
+        on(event: "checkContinue", listener: RequestListener): this;
+        on(event: "checkExpectation", listener: RequestListener): this;
+        on(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this;
+        on(
+            event: "connect",
+            listener: (req: InstanceType, socket: stream.Duplex, head: NonSharedBuffer) => void,
+        ): this;
+        on(event: "dropRequest", listener: (req: InstanceType, socket: stream.Duplex) => void): this;
+        on(event: "request", listener: RequestListener): this;
+        on(
+            event: "upgrade",
+            listener: (req: InstanceType, socket: stream.Duplex, head: NonSharedBuffer) => void,
+        ): this;
+        once(event: string, listener: (...args: any[]) => void): this;
+        once(event: "close", listener: () => void): this;
+        once(event: "connection", listener: (socket: Socket) => void): this;
+        once(event: "error", listener: (err: Error) => void): this;
+        once(event: "listening", listener: () => void): this;
+        once(event: "checkContinue", listener: RequestListener): this;
+        once(event: "checkExpectation", listener: RequestListener): this;
+        once(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this;
+        once(
+            event: "connect",
+            listener: (req: InstanceType, socket: stream.Duplex, head: NonSharedBuffer) => void,
+        ): this;
+        once(event: "dropRequest", listener: (req: InstanceType, socket: stream.Duplex) => void): this;
+        once(event: "request", listener: RequestListener): this;
+        once(
+            event: "upgrade",
+            listener: (req: InstanceType, socket: stream.Duplex, head: NonSharedBuffer) => void,
+        ): this;
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependListener(event: "close", listener: () => void): this;
+        prependListener(event: "connection", listener: (socket: Socket) => void): this;
+        prependListener(event: "error", listener: (err: Error) => void): this;
+        prependListener(event: "listening", listener: () => void): this;
+        prependListener(event: "checkContinue", listener: RequestListener): this;
+        prependListener(event: "checkExpectation", listener: RequestListener): this;
+        prependListener(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this;
+        prependListener(
+            event: "connect",
+            listener: (req: InstanceType, socket: stream.Duplex, head: NonSharedBuffer) => void,
+        ): this;
+        prependListener(
+            event: "dropRequest",
+            listener: (req: InstanceType, socket: stream.Duplex) => void,
+        ): this;
+        prependListener(event: "request", listener: RequestListener): this;
+        prependListener(
+            event: "upgrade",
+            listener: (req: InstanceType, socket: stream.Duplex, head: NonSharedBuffer) => void,
+        ): this;
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "close", listener: () => void): this;
+        prependOnceListener(event: "connection", listener: (socket: Socket) => void): this;
+        prependOnceListener(event: "error", listener: (err: Error) => void): this;
+        prependOnceListener(event: "listening", listener: () => void): this;
+        prependOnceListener(event: "checkContinue", listener: RequestListener): this;
+        prependOnceListener(event: "checkExpectation", listener: RequestListener): this;
+        prependOnceListener(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this;
+        prependOnceListener(
+            event: "connect",
+            listener: (req: InstanceType, socket: stream.Duplex, head: NonSharedBuffer) => void,
+        ): this;
+        prependOnceListener(
+            event: "dropRequest",
+            listener: (req: InstanceType, socket: stream.Duplex) => void,
+        ): this;
+        prependOnceListener(event: "request", listener: RequestListener): this;
+        prependOnceListener(
+            event: "upgrade",
+            listener: (req: InstanceType, socket: stream.Duplex, head: NonSharedBuffer) => void,
+        ): this;
+    }
+    /**
+     * This class serves as the parent class of {@link ClientRequest} and {@link ServerResponse}. It is an abstract outgoing message from
+     * the perspective of the participants of an HTTP transaction.
+     * @since v0.1.17
+     */
+    class OutgoingMessage extends stream.Writable {
+        readonly req: Request;
+        chunkedEncoding: boolean;
+        shouldKeepAlive: boolean;
+        useChunkedEncodingByDefault: boolean;
+        sendDate: boolean;
+        /**
+         * @deprecated Use `writableEnded` instead.
+         */
+        finished: boolean;
+        /**
+         * Read-only. `true` if the headers were sent, otherwise `false`.
+         * @since v0.9.3
+         */
+        readonly headersSent: boolean;
+        /**
+         * Alias of `outgoingMessage.socket`.
+         * @since v0.3.0
+         * @deprecated Since v15.12.0,v14.17.1 - Use `socket` instead.
+         */
+        readonly connection: Socket | null;
+        /**
+         * Reference to the underlying socket. Usually, users will not want to access
+         * this property.
+         *
+         * After calling `outgoingMessage.end()`, this property will be nulled.
+         * @since v0.3.0
+         */
+        readonly socket: Socket | null;
+        constructor();
+        /**
+         * Once a socket is associated with the message and is connected, `socket.setTimeout()` will be called with `msecs` as the first parameter.
+         * @since v0.9.12
+         * @param callback Optional function to be called when a timeout occurs. Same as binding to the `timeout` event.
+         */
+        setTimeout(msecs: number, callback?: () => void): this;
+        /**
+         * Sets a single header value. If the header already exists in the to-be-sent
+         * headers, its value will be replaced. Use an array of strings to send multiple
+         * headers with the same name.
+         * @since v0.4.0
+         * @param name Header name
+         * @param value Header value
+         */
+        setHeader(name: string, value: number | string | readonly string[]): this;
+        /**
+         * Sets multiple header values for implicit headers. headers must be an instance of
+         * `Headers` or `Map`, if a header already exists in the to-be-sent headers, its
+         * value will be replaced.
+         *
+         * ```js
+         * const headers = new Headers({ foo: 'bar' });
+         * outgoingMessage.setHeaders(headers);
+         * ```
+         *
+         * or
+         *
+         * ```js
+         * const headers = new Map([['foo', 'bar']]);
+         * outgoingMessage.setHeaders(headers);
+         * ```
+         *
+         * When headers have been set with `outgoingMessage.setHeaders()`, they will be
+         * merged with any headers passed to `response.writeHead()`, with the headers passed
+         * to `response.writeHead()` given precedence.
+         *
+         * ```js
+         * // Returns content-type = text/plain
+         * const server = http.createServer((req, res) => {
+         *   const headers = new Headers({ 'Content-Type': 'text/html' });
+         *   res.setHeaders(headers);
+         *   res.writeHead(200, { 'Content-Type': 'text/plain' });
+         *   res.end('ok');
+         * });
+         * ```
+         *
+         * @since v19.6.0, v18.15.0
+         * @param name Header name
+         * @param value Header value
+         */
+        setHeaders(headers: Headers | Map): this;
+        /**
+         * Append a single header value to the header object.
+         *
+         * If the value is an array, this is equivalent to calling this method multiple
+         * times.
+         *
+         * If there were no previous values for the header, this is equivalent to calling `outgoingMessage.setHeader(name, value)`.
+         *
+         * Depending of the value of `options.uniqueHeaders` when the client request or the
+         * server were created, this will end up in the header being sent multiple times or
+         * a single time with values joined using `; `.
+         * @since v18.3.0, v16.17.0
+         * @param name Header name
+         * @param value Header value
+         */
+        appendHeader(name: string, value: string | readonly string[]): this;
+        /**
+         * Gets the value of the HTTP header with the given name. If that header is not
+         * set, the returned value will be `undefined`.
+         * @since v0.4.0
+         * @param name Name of header
+         */
+        getHeader(name: string): number | string | string[] | undefined;
+        /**
+         * Returns a shallow copy of the current outgoing headers. Since a shallow
+         * copy is used, array values may be mutated without additional calls to
+         * various header-related HTTP module methods. The keys of the returned
+         * object are the header names and the values are the respective header
+         * values. All header names are lowercase.
+         *
+         * The object returned by the `outgoingMessage.getHeaders()` method does
+         * not prototypically inherit from the JavaScript `Object`. This means that
+         * typical `Object` methods such as `obj.toString()`, `obj.hasOwnProperty()`,
+         * and others are not defined and will not work.
+         *
+         * ```js
+         * outgoingMessage.setHeader('Foo', 'bar');
+         * outgoingMessage.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']);
+         *
+         * const headers = outgoingMessage.getHeaders();
+         * // headers === { foo: 'bar', 'set-cookie': ['foo=bar', 'bar=baz'] }
+         * ```
+         * @since v7.7.0
+         */
+        getHeaders(): OutgoingHttpHeaders;
+        /**
+         * Returns an array containing the unique names of the current outgoing headers.
+         * All names are lowercase.
+         * @since v7.7.0
+         */
+        getHeaderNames(): string[];
+        /**
+         * Returns `true` if the header identified by `name` is currently set in the
+         * outgoing headers. The header name is case-insensitive.
+         *
+         * ```js
+         * const hasContentType = outgoingMessage.hasHeader('content-type');
+         * ```
+         * @since v7.7.0
+         */
+        hasHeader(name: string): boolean;
+        /**
+         * Removes a header that is queued for implicit sending.
+         *
+         * ```js
+         * outgoingMessage.removeHeader('Content-Encoding');
+         * ```
+         * @since v0.4.0
+         * @param name Header name
+         */
+        removeHeader(name: string): void;
+        /**
+         * Adds HTTP trailers (headers but at the end of the message) to the message.
+         *
+         * Trailers will **only** be emitted if the message is chunked encoded. If not,
+         * the trailers will be silently discarded.
+         *
+         * HTTP requires the `Trailer` header to be sent to emit trailers,
+         * with a list of header field names in its value, e.g.
+         *
+         * ```js
+         * message.writeHead(200, { 'Content-Type': 'text/plain',
+         *                          'Trailer': 'Content-MD5' });
+         * message.write(fileData);
+         * message.addTrailers({ 'Content-MD5': '7895bf4b8828b55ceaf47747b4bca667' });
+         * message.end();
+         * ```
+         *
+         * Attempting to set a header field name or value that contains invalid characters
+         * will result in a `TypeError` being thrown.
+         * @since v0.3.0
+         */
+        addTrailers(headers: OutgoingHttpHeaders | ReadonlyArray<[string, string]>): void;
+        /**
+         * Flushes the message headers.
+         *
+         * For efficiency reason, Node.js normally buffers the message headers
+         * until `outgoingMessage.end()` is called or the first chunk of message data
+         * is written. It then tries to pack the headers and data into a single TCP
+         * packet.
+         *
+         * It is usually desired (it saves a TCP round-trip), but not when the first
+         * data is not sent until possibly much later. `outgoingMessage.flushHeaders()` bypasses the optimization and kickstarts the message.
+         * @since v1.6.0
+         */
+        flushHeaders(): void;
+    }
+    /**
+     * This object is created internally by an HTTP server, not by the user. It is
+     * passed as the second parameter to the `'request'` event.
+     * @since v0.1.17
+     */
+    class ServerResponse extends OutgoingMessage {
+        /**
+         * When using implicit headers (not calling `response.writeHead()` explicitly),
+         * this property controls the status code that will be sent to the client when
+         * the headers get flushed.
+         *
+         * ```js
+         * response.statusCode = 404;
+         * ```
+         *
+         * After response header was sent to the client, this property indicates the
+         * status code which was sent out.
+         * @since v0.4.0
+         */
+        statusCode: number;
+        /**
+         * When using implicit headers (not calling `response.writeHead()` explicitly),
+         * this property controls the status message that will be sent to the client when
+         * the headers get flushed. If this is left as `undefined` then the standard
+         * message for the status code will be used.
+         *
+         * ```js
+         * response.statusMessage = 'Not found';
+         * ```
+         *
+         * After response header was sent to the client, this property indicates the
+         * status message which was sent out.
+         * @since v0.11.8
+         */
+        statusMessage: string;
+        /**
+         * If set to `true`, Node.js will check whether the `Content-Length` header value and the size of the body, in bytes, are equal.
+         * Mismatching the `Content-Length` header value will result
+         * in an `Error` being thrown, identified by `code:``'ERR_HTTP_CONTENT_LENGTH_MISMATCH'`.
+         * @since v18.10.0, v16.18.0
+         */
+        strictContentLength: boolean;
+        constructor(req: Request);
+        assignSocket(socket: Socket): void;
+        detachSocket(socket: Socket): void;
+        /**
+         * Sends an HTTP/1.1 100 Continue message to the client, indicating that
+         * the request body should be sent. See the `'checkContinue'` event on `Server`.
+         * @since v0.3.0
+         */
+        writeContinue(callback?: () => void): void;
+        /**
+         * Sends an HTTP/1.1 103 Early Hints message to the client with a Link header,
+         * indicating that the user agent can preload/preconnect the linked resources.
+         * The `hints` is an object containing the values of headers to be sent with
+         * early hints message. The optional `callback` argument will be called when
+         * the response message has been written.
+         *
+         * **Example**
+         *
+         * ```js
+         * const earlyHintsLink = '; rel=preload; as=style';
+         * response.writeEarlyHints({
+         *   'link': earlyHintsLink,
+         * });
+         *
+         * const earlyHintsLinks = [
+         *   '; rel=preload; as=style',
+         *   '; rel=preload; as=script',
+         * ];
+         * response.writeEarlyHints({
+         *   'link': earlyHintsLinks,
+         *   'x-trace-id': 'id for diagnostics',
+         * });
+         *
+         * const earlyHintsCallback = () => console.log('early hints message sent');
+         * response.writeEarlyHints({
+         *   'link': earlyHintsLinks,
+         * }, earlyHintsCallback);
+         * ```
+         * @since v18.11.0
+         * @param hints An object containing the values of headers
+         * @param callback Will be called when the response message has been written
+         */
+        writeEarlyHints(hints: Record, callback?: () => void): void;
+        /**
+         * Sends a response header to the request. The status code is a 3-digit HTTP
+         * status code, like `404`. The last argument, `headers`, are the response headers.
+         * Optionally one can give a human-readable `statusMessage` as the second
+         * argument.
+         *
+         * `headers` may be an `Array` where the keys and values are in the same list.
+         * It is _not_ a list of tuples. So, the even-numbered offsets are key values,
+         * and the odd-numbered offsets are the associated values. The array is in the same
+         * format as `request.rawHeaders`.
+         *
+         * Returns a reference to the `ServerResponse`, so that calls can be chained.
+         *
+         * ```js
+         * const body = 'hello world';
+         * response
+         *   .writeHead(200, {
+         *     'Content-Length': Buffer.byteLength(body),
+         *     'Content-Type': 'text/plain',
+         *   })
+         *   .end(body);
+         * ```
+         *
+         * This method must only be called once on a message and it must
+         * be called before `response.end()` is called.
+         *
+         * If `response.write()` or `response.end()` are called before calling
+         * this, the implicit/mutable headers will be calculated and call this function.
+         *
+         * When headers have been set with `response.setHeader()`, they will be merged
+         * with any headers passed to `response.writeHead()`, with the headers passed
+         * to `response.writeHead()` given precedence.
+         *
+         * If this method is called and `response.setHeader()` has not been called,
+         * it will directly write the supplied header values onto the network channel
+         * without caching internally, and the `response.getHeader()` on the header
+         * will not yield the expected result. If progressive population of headers is
+         * desired with potential future retrieval and modification, use `response.setHeader()` instead.
+         *
+         * ```js
+         * // Returns content-type = text/plain
+         * const server = http.createServer((req, res) => {
+         *   res.setHeader('Content-Type', 'text/html');
+         *   res.setHeader('X-Foo', 'bar');
+         *   res.writeHead(200, { 'Content-Type': 'text/plain' });
+         *   res.end('ok');
+         * });
+         * ```
+         *
+         * `Content-Length` is read in bytes, not characters. Use `Buffer.byteLength()` to determine the length of the body in bytes. Node.js
+         * will check whether `Content-Length` and the length of the body which has
+         * been transmitted are equal or not.
+         *
+         * Attempting to set a header field name or value that contains invalid characters
+         * will result in a \[`Error`\]\[\] being thrown.
+         * @since v0.1.30
+         */
+        writeHead(
+            statusCode: number,
+            statusMessage?: string,
+            headers?: OutgoingHttpHeaders | OutgoingHttpHeader[],
+        ): this;
+        writeHead(statusCode: number, headers?: OutgoingHttpHeaders | OutgoingHttpHeader[]): this;
+        /**
+         * Sends a HTTP/1.1 102 Processing message to the client, indicating that
+         * the request body should be sent.
+         * @since v10.0.0
+         */
+        writeProcessing(callback?: () => void): void;
+    }
+    interface InformationEvent {
+        statusCode: number;
+        statusMessage: string;
+        httpVersion: string;
+        httpVersionMajor: number;
+        httpVersionMinor: number;
+        headers: IncomingHttpHeaders;
+        rawHeaders: string[];
+    }
+    /**
+     * This object is created internally and returned from {@link request}. It
+     * represents an _in-progress_ request whose header has already been queued. The
+     * header is still mutable using the `setHeader(name, value)`, `getHeader(name)`, `removeHeader(name)` API. The actual header will
+     * be sent along with the first data chunk or when calling `request.end()`.
+     *
+     * To get the response, add a listener for `'response'` to the request object. `'response'` will be emitted from the request object when the response
+     * headers have been received. The `'response'` event is executed with one
+     * argument which is an instance of {@link IncomingMessage}.
+     *
+     * During the `'response'` event, one can add listeners to the
+     * response object; particularly to listen for the `'data'` event.
+     *
+     * If no `'response'` handler is added, then the response will be
+     * entirely discarded. However, if a `'response'` event handler is added,
+     * then the data from the response object **must** be consumed, either by
+     * calling `response.read()` whenever there is a `'readable'` event, or
+     * by adding a `'data'` handler, or by calling the `.resume()` method.
+     * Until the data is consumed, the `'end'` event will not fire. Also, until
+     * the data is read it will consume memory that can eventually lead to a
+     * 'process out of memory' error.
+     *
+     * For backward compatibility, `res` will only emit `'error'` if there is an `'error'` listener registered.
+     *
+     * Set `Content-Length` header to limit the response body size.
+     * If `response.strictContentLength` is set to `true`, mismatching the `Content-Length` header value will result in an `Error` being thrown,
+     * identified by `code:``'ERR_HTTP_CONTENT_LENGTH_MISMATCH'`.
+     *
+     * `Content-Length` value should be in bytes, not characters. Use `Buffer.byteLength()` to determine the length of the body in bytes.
+     * @since v0.1.17
+     */
+    class ClientRequest extends OutgoingMessage {
+        /**
+         * The `request.aborted` property will be `true` if the request has
+         * been aborted.
+         * @since v0.11.14
+         * @deprecated Since v17.0.0, v16.12.0 - Check `destroyed` instead.
+         */
+        aborted: boolean;
+        /**
+         * The request host.
+         * @since v14.5.0, v12.19.0
+         */
+        host: string;
+        /**
+         * The request protocol.
+         * @since v14.5.0, v12.19.0
+         */
+        protocol: string;
+        /**
+         * When sending request through a keep-alive enabled agent, the underlying socket
+         * might be reused. But if server closes connection at unfortunate time, client
+         * may run into a 'ECONNRESET' error.
+         *
+         * ```js
+         * import http from 'node:http';
+         *
+         * // Server has a 5 seconds keep-alive timeout by default
+         * http
+         *   .createServer((req, res) => {
+         *     res.write('hello\n');
+         *     res.end();
+         *   })
+         *   .listen(3000);
+         *
+         * setInterval(() => {
+         *   // Adapting a keep-alive agent
+         *   http.get('http://localhost:3000', { agent }, (res) => {
+         *     res.on('data', (data) => {
+         *       // Do nothing
+         *     });
+         *   });
+         * }, 5000); // Sending request on 5s interval so it's easy to hit idle timeout
+         * ```
+         *
+         * By marking a request whether it reused socket or not, we can do
+         * automatic error retry base on it.
+         *
+         * ```js
+         * import http from 'node:http';
+         * const agent = new http.Agent({ keepAlive: true });
+         *
+         * function retriableRequest() {
+         *   const req = http
+         *     .get('http://localhost:3000', { agent }, (res) => {
+         *       // ...
+         *     })
+         *     .on('error', (err) => {
+         *       // Check if retry is needed
+         *       if (req.reusedSocket && err.code === 'ECONNRESET') {
+         *         retriableRequest();
+         *       }
+         *     });
+         * }
+         *
+         * retriableRequest();
+         * ```
+         * @since v13.0.0, v12.16.0
+         */
+        reusedSocket: boolean;
+        /**
+         * Limits maximum response headers count. If set to 0, no limit will be applied.
+         */
+        maxHeadersCount: number;
+        constructor(url: string | URL | ClientRequestArgs, cb?: (res: IncomingMessage) => void);
+        /**
+         * The request method.
+         * @since v0.1.97
+         */
+        method: string;
+        /**
+         * The request path.
+         * @since v0.4.0
+         */
+        path: string;
+        /**
+         * Marks the request as aborting. Calling this will cause remaining data
+         * in the response to be dropped and the socket to be destroyed.
+         * @since v0.3.8
+         * @deprecated Since v14.1.0,v13.14.0 - Use `destroy` instead.
+         */
+        abort(): void;
+        onSocket(socket: Socket): void;
+        /**
+         * Once a socket is assigned to this request and is connected `socket.setTimeout()` will be called.
+         * @since v0.5.9
+         * @param timeout Milliseconds before a request times out.
+         * @param callback Optional function to be called when a timeout occurs. Same as binding to the `'timeout'` event.
+         */
+        setTimeout(timeout: number, callback?: () => void): this;
+        /**
+         * Once a socket is assigned to this request and is connected `socket.setNoDelay()` will be called.
+         * @since v0.5.9
+         */
+        setNoDelay(noDelay?: boolean): void;
+        /**
+         * Once a socket is assigned to this request and is connected `socket.setKeepAlive()` will be called.
+         * @since v0.5.9
+         */
+        setSocketKeepAlive(enable?: boolean, initialDelay?: number): void;
+        /**
+         * Returns an array containing the unique names of the current outgoing raw
+         * headers. Header names are returned with their exact casing being set.
+         *
+         * ```js
+         * request.setHeader('Foo', 'bar');
+         * request.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']);
+         *
+         * const headerNames = request.getRawHeaderNames();
+         * // headerNames === ['Foo', 'Set-Cookie']
+         * ```
+         * @since v15.13.0, v14.17.0
+         */
+        getRawHeaderNames(): string[];
+        /**
+         * @deprecated
+         */
+        addListener(event: "abort", listener: () => void): this;
+        addListener(
+            event: "connect",
+            listener: (response: IncomingMessage, socket: Socket, head: NonSharedBuffer) => void,
+        ): this;
+        addListener(event: "continue", listener: () => void): this;
+        addListener(event: "information", listener: (info: InformationEvent) => void): this;
+        addListener(event: "response", listener: (response: IncomingMessage) => void): this;
+        addListener(event: "socket", listener: (socket: Socket) => void): this;
+        addListener(event: "timeout", listener: () => void): this;
+        addListener(
+            event: "upgrade",
+            listener: (response: IncomingMessage, socket: Socket, head: NonSharedBuffer) => void,
+        ): this;
+        addListener(event: "close", listener: () => void): this;
+        addListener(event: "drain", listener: () => void): this;
+        addListener(event: "error", listener: (err: Error) => void): this;
+        addListener(event: "finish", listener: () => void): this;
+        addListener(event: "pipe", listener: (src: stream.Readable) => void): this;
+        addListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        /**
+         * @deprecated
+         */
+        on(event: "abort", listener: () => void): this;
+        on(
+            event: "connect",
+            listener: (response: IncomingMessage, socket: Socket, head: NonSharedBuffer) => void,
+        ): this;
+        on(event: "continue", listener: () => void): this;
+        on(event: "information", listener: (info: InformationEvent) => void): this;
+        on(event: "response", listener: (response: IncomingMessage) => void): this;
+        on(event: "socket", listener: (socket: Socket) => void): this;
+        on(event: "timeout", listener: () => void): this;
+        on(
+            event: "upgrade",
+            listener: (response: IncomingMessage, socket: Socket, head: NonSharedBuffer) => void,
+        ): this;
+        on(event: "close", listener: () => void): this;
+        on(event: "drain", listener: () => void): this;
+        on(event: "error", listener: (err: Error) => void): this;
+        on(event: "finish", listener: () => void): this;
+        on(event: "pipe", listener: (src: stream.Readable) => void): this;
+        on(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+        /**
+         * @deprecated
+         */
+        once(event: "abort", listener: () => void): this;
+        once(
+            event: "connect",
+            listener: (response: IncomingMessage, socket: Socket, head: NonSharedBuffer) => void,
+        ): this;
+        once(event: "continue", listener: () => void): this;
+        once(event: "information", listener: (info: InformationEvent) => void): this;
+        once(event: "response", listener: (response: IncomingMessage) => void): this;
+        once(event: "socket", listener: (socket: Socket) => void): this;
+        once(event: "timeout", listener: () => void): this;
+        once(
+            event: "upgrade",
+            listener: (response: IncomingMessage, socket: Socket, head: NonSharedBuffer) => void,
+        ): this;
+        once(event: "close", listener: () => void): this;
+        once(event: "drain", listener: () => void): this;
+        once(event: "error", listener: (err: Error) => void): this;
+        once(event: "finish", listener: () => void): this;
+        once(event: "pipe", listener: (src: stream.Readable) => void): this;
+        once(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+        /**
+         * @deprecated
+         */
+        prependListener(event: "abort", listener: () => void): this;
+        prependListener(
+            event: "connect",
+            listener: (response: IncomingMessage, socket: Socket, head: NonSharedBuffer) => void,
+        ): this;
+        prependListener(event: "continue", listener: () => void): this;
+        prependListener(event: "information", listener: (info: InformationEvent) => void): this;
+        prependListener(event: "response", listener: (response: IncomingMessage) => void): this;
+        prependListener(event: "socket", listener: (socket: Socket) => void): this;
+        prependListener(event: "timeout", listener: () => void): this;
+        prependListener(
+            event: "upgrade",
+            listener: (response: IncomingMessage, socket: Socket, head: NonSharedBuffer) => void,
+        ): this;
+        prependListener(event: "close", listener: () => void): this;
+        prependListener(event: "drain", listener: () => void): this;
+        prependListener(event: "error", listener: (err: Error) => void): this;
+        prependListener(event: "finish", listener: () => void): this;
+        prependListener(event: "pipe", listener: (src: stream.Readable) => void): this;
+        prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        /**
+         * @deprecated
+         */
+        prependOnceListener(event: "abort", listener: () => void): this;
+        prependOnceListener(
+            event: "connect",
+            listener: (response: IncomingMessage, socket: Socket, head: NonSharedBuffer) => void,
+        ): this;
+        prependOnceListener(event: "continue", listener: () => void): this;
+        prependOnceListener(event: "information", listener: (info: InformationEvent) => void): this;
+        prependOnceListener(event: "response", listener: (response: IncomingMessage) => void): this;
+        prependOnceListener(event: "socket", listener: (socket: Socket) => void): this;
+        prependOnceListener(event: "timeout", listener: () => void): this;
+        prependOnceListener(
+            event: "upgrade",
+            listener: (response: IncomingMessage, socket: Socket, head: NonSharedBuffer) => void,
+        ): this;
+        prependOnceListener(event: "close", listener: () => void): this;
+        prependOnceListener(event: "drain", listener: () => void): this;
+        prependOnceListener(event: "error", listener: (err: Error) => void): this;
+        prependOnceListener(event: "finish", listener: () => void): this;
+        prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this;
+        prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+    }
+    /**
+     * An `IncomingMessage` object is created by {@link Server} or {@link ClientRequest} and passed as the first argument to the `'request'` and `'response'` event respectively. It may be used to
+     * access response
+     * status, headers, and data.
+     *
+     * Different from its `socket` value which is a subclass of `stream.Duplex`, the `IncomingMessage` itself extends `stream.Readable` and is created separately to
+     * parse and emit the incoming HTTP headers and payload, as the underlying socket
+     * may be reused multiple times in case of keep-alive.
+     * @since v0.1.17
+     */
+    class IncomingMessage extends stream.Readable {
+        constructor(socket: Socket);
+        /**
+         * The `message.aborted` property will be `true` if the request has
+         * been aborted.
+         * @since v10.1.0
+         * @deprecated Since v17.0.0,v16.12.0 - Check `message.destroyed` from stream.Readable.
+         */
+        aborted: boolean;
+        /**
+         * In case of server request, the HTTP version sent by the client. In the case of
+         * client response, the HTTP version of the connected-to server.
+         * Probably either `'1.1'` or `'1.0'`.
+         *
+         * Also `message.httpVersionMajor` is the first integer and `message.httpVersionMinor` is the second.
+         * @since v0.1.1
+         */
+        httpVersion: string;
+        httpVersionMajor: number;
+        httpVersionMinor: number;
+        /**
+         * The `message.complete` property will be `true` if a complete HTTP message has
+         * been received and successfully parsed.
+         *
+         * This property is particularly useful as a means of determining if a client or
+         * server fully transmitted a message before a connection was terminated:
+         *
+         * ```js
+         * const req = http.request({
+         *   host: '127.0.0.1',
+         *   port: 8080,
+         *   method: 'POST',
+         * }, (res) => {
+         *   res.resume();
+         *   res.on('end', () => {
+         *     if (!res.complete)
+         *       console.error(
+         *         'The connection was terminated while the message was still being sent');
+         *   });
+         * });
+         * ```
+         * @since v0.3.0
+         */
+        complete: boolean;
+        /**
+         * Alias for `message.socket`.
+         * @since v0.1.90
+         * @deprecated Since v16.0.0 - Use `socket`.
+         */
+        connection: Socket;
+        /**
+         * The `net.Socket` object associated with the connection.
+         *
+         * With HTTPS support, use `request.socket.getPeerCertificate()` to obtain the
+         * client's authentication details.
+         *
+         * This property is guaranteed to be an instance of the `net.Socket` class,
+         * a subclass of `stream.Duplex`, unless the user specified a socket
+         * type other than `net.Socket` or internally nulled.
+         * @since v0.3.0
+         */
+        socket: Socket;
+        /**
+         * The request/response headers object.
+         *
+         * Key-value pairs of header names and values. Header names are lower-cased.
+         *
+         * ```js
+         * // Prints something like:
+         * //
+         * // { 'user-agent': 'curl/7.22.0',
+         * //   host: '127.0.0.1:8000',
+         * //   accept: '*' }
+         * console.log(request.headers);
+         * ```
+         *
+         * Duplicates in raw headers are handled in the following ways, depending on the
+         * header name:
+         *
+         * * Duplicates of `age`, `authorization`, `content-length`, `content-type`, `etag`, `expires`, `from`, `host`, `if-modified-since`, `if-unmodified-since`, `last-modified`, `location`,
+         * `max-forwards`, `proxy-authorization`, `referer`, `retry-after`, `server`, or `user-agent` are discarded.
+         * To allow duplicate values of the headers listed above to be joined,
+         * use the option `joinDuplicateHeaders` in {@link request} and {@link createServer}. See RFC 9110 Section 5.3 for more
+         * information.
+         * * `set-cookie` is always an array. Duplicates are added to the array.
+         * * For duplicate `cookie` headers, the values are joined together with `; `.
+         * * For all other headers, the values are joined together with `, `.
+         * @since v0.1.5
+         */
+        headers: IncomingHttpHeaders;
+        /**
+         * Similar to `message.headers`, but there is no join logic and the values are
+         * always arrays of strings, even for headers received just once.
+         *
+         * ```js
+         * // Prints something like:
+         * //
+         * // { 'user-agent': ['curl/7.22.0'],
+         * //   host: ['127.0.0.1:8000'],
+         * //   accept: ['*'] }
+         * console.log(request.headersDistinct);
+         * ```
+         * @since v18.3.0, v16.17.0
+         */
+        headersDistinct: NodeJS.Dict;
+        /**
+         * The raw request/response headers list exactly as they were received.
+         *
+         * The keys and values are in the same list. It is _not_ a
+         * list of tuples. So, the even-numbered offsets are key values, and the
+         * odd-numbered offsets are the associated values.
+         *
+         * Header names are not lowercased, and duplicates are not merged.
+         *
+         * ```js
+         * // Prints something like:
+         * //
+         * // [ 'user-agent',
+         * //   'this is invalid because there can be only one',
+         * //   'User-Agent',
+         * //   'curl/7.22.0',
+         * //   'Host',
+         * //   '127.0.0.1:8000',
+         * //   'ACCEPT',
+         * //   '*' ]
+         * console.log(request.rawHeaders);
+         * ```
+         * @since v0.11.6
+         */
+        rawHeaders: string[];
+        /**
+         * The request/response trailers object. Only populated at the `'end'` event.
+         * @since v0.3.0
+         */
+        trailers: NodeJS.Dict;
+        /**
+         * Similar to `message.trailers`, but there is no join logic and the values are
+         * always arrays of strings, even for headers received just once.
+         * Only populated at the `'end'` event.
+         * @since v18.3.0, v16.17.0
+         */
+        trailersDistinct: NodeJS.Dict;
+        /**
+         * The raw request/response trailer keys and values exactly as they were
+         * received. Only populated at the `'end'` event.
+         * @since v0.11.6
+         */
+        rawTrailers: string[];
+        /**
+         * Calls `message.socket.setTimeout(msecs, callback)`.
+         * @since v0.5.9
+         */
+        setTimeout(msecs: number, callback?: () => void): this;
+        /**
+         * **Only valid for request obtained from {@link Server}.**
+         *
+         * The request method as a string. Read only. Examples: `'GET'`, `'DELETE'`.
+         * @since v0.1.1
+         */
+        method?: string | undefined;
+        /**
+         * **Only valid for request obtained from {@link Server}.**
+         *
+         * Request URL string. This contains only the URL that is present in the actual
+         * HTTP request. Take the following request:
+         *
+         * ```http
+         * GET /status?name=ryan HTTP/1.1
+         * Accept: text/plain
+         * ```
+         *
+         * To parse the URL into its parts:
+         *
+         * ```js
+         * new URL(`http://${process.env.HOST ?? 'localhost'}${request.url}`);
+         * ```
+         *
+         * When `request.url` is `'/status?name=ryan'` and `process.env.HOST` is undefined:
+         *
+         * ```console
+         * $ node
+         * > new URL(`http://${process.env.HOST ?? 'localhost'}${request.url}`);
+         * URL {
+         *   href: 'http://localhost/status?name=ryan',
+         *   origin: 'http://localhost',
+         *   protocol: 'http:',
+         *   username: '',
+         *   password: '',
+         *   host: 'localhost',
+         *   hostname: 'localhost',
+         *   port: '',
+         *   pathname: '/status',
+         *   search: '?name=ryan',
+         *   searchParams: URLSearchParams { 'name' => 'ryan' },
+         *   hash: ''
+         * }
+         * ```
+         *
+         * Ensure that you set `process.env.HOST` to the server's host name, or consider replacing this part entirely. If using `req.headers.host`, ensure proper
+         * validation is used, as clients may specify a custom `Host` header.
+         * @since v0.1.90
+         */
+        url?: string | undefined;
+        /**
+         * **Only valid for response obtained from {@link ClientRequest}.**
+         *
+         * The 3-digit HTTP response status code. E.G. `404`.
+         * @since v0.1.1
+         */
+        statusCode?: number | undefined;
+        /**
+         * **Only valid for response obtained from {@link ClientRequest}.**
+         *
+         * The HTTP response status message (reason phrase). E.G. `OK` or `Internal Server Error`.
+         * @since v0.11.10
+         */
+        statusMessage?: string | undefined;
+        /**
+         * Calls `destroy()` on the socket that received the `IncomingMessage`. If `error` is provided, an `'error'` event is emitted on the socket and `error` is passed
+         * as an argument to any listeners on the event.
+         * @since v0.3.0
+         */
+        destroy(error?: Error): this;
+    }
+    interface ProxyEnv extends NodeJS.ProcessEnv {
+        HTTP_PROXY?: string | undefined;
+        HTTPS_PROXY?: string | undefined;
+        NO_PROXY?: string | undefined;
+        http_proxy?: string | undefined;
+        https_proxy?: string | undefined;
+        no_proxy?: string | undefined;
+    }
+    interface AgentOptions extends NodeJS.PartialOptions {
+        /**
+         * Keep sockets around in a pool to be used by other requests in the future. Default = false
+         */
+        keepAlive?: boolean | undefined;
+        /**
+         * When using HTTP KeepAlive, how often to send TCP KeepAlive packets over sockets being kept alive. Default = 1000.
+         * Only relevant if keepAlive is set to true.
+         */
+        keepAliveMsecs?: number | undefined;
+        /**
+         * Milliseconds to subtract from
+         * the server-provided `keep-alive: timeout=...` hint when determining socket
+         * expiration time. This buffer helps ensure the agent closes the socket
+         * slightly before the server does, reducing the chance of sending a request
+         * on a socket that’s about to be closed by the server.
+         * @since v24.7.0
+         * @default 1000
+         */
+        agentKeepAliveTimeoutBuffer?: number | undefined;
+        /**
+         * Maximum number of sockets to allow per host. Default for Node 0.10 is 5, default for Node 0.12 is Infinity
+         */
+        maxSockets?: number | undefined;
+        /**
+         * Maximum number of sockets allowed for all hosts in total. Each request will use a new socket until the maximum is reached. Default: Infinity.
+         */
+        maxTotalSockets?: number | undefined;
+        /**
+         * Maximum number of sockets to leave open in a free state. Only relevant if keepAlive is set to true. Default = 256.
+         */
+        maxFreeSockets?: number | undefined;
+        /**
+         * Socket timeout in milliseconds. This will set the timeout after the socket is connected.
+         */
+        timeout?: number | undefined;
+        /**
+         * Scheduling strategy to apply when picking the next free socket to use.
+         * @default `lifo`
+         */
+        scheduling?: "fifo" | "lifo" | undefined;
+        /**
+         * Environment variables for proxy configuration. See
+         * [Built-in Proxy Support](https://nodejs.org/docs/latest-v24.x/api/http.html#built-in-proxy-support) for details.
+         * @since v24.5.0
+         */
+        proxyEnv?: ProxyEnv | undefined;
+        /**
+         * Default port to use when the port is not specified in requests.
+         * @since v24.5.0
+         */
+        defaultPort?: number | undefined;
+        /**
+         * The protocol to use for the agent.
+         * @since v24.5.0
+         */
+        protocol?: string | undefined;
+    }
+    /**
+     * An `Agent` is responsible for managing connection persistence
+     * and reuse for HTTP clients. It maintains a queue of pending requests
+     * for a given host and port, reusing a single socket connection for each
+     * until the queue is empty, at which time the socket is either destroyed
+     * or put into a pool where it is kept to be used again for requests to the
+     * same host and port. Whether it is destroyed or pooled depends on the `keepAlive` `option`.
+     *
+     * Pooled connections have TCP Keep-Alive enabled for them, but servers may
+     * still close idle connections, in which case they will be removed from the
+     * pool and a new connection will be made when a new HTTP request is made for
+     * that host and port. Servers may also refuse to allow multiple requests
+     * over the same connection, in which case the connection will have to be
+     * remade for every request and cannot be pooled. The `Agent` will still make
+     * the requests to that server, but each one will occur over a new connection.
+     *
+     * When a connection is closed by the client or the server, it is removed
+     * from the pool. Any unused sockets in the pool will be unrefed so as not
+     * to keep the Node.js process running when there are no outstanding requests.
+     * (see `socket.unref()`).
+     *
+     * It is good practice, to `destroy()` an `Agent` instance when it is no
+     * longer in use, because unused sockets consume OS resources.
+     *
+     * Sockets are removed from an agent when the socket emits either
+     * a `'close'` event or an `'agentRemove'` event. When intending to keep one
+     * HTTP request open for a long time without keeping it in the agent, something
+     * like the following may be done:
+     *
+     * ```js
+     * http.get(options, (res) => {
+     *   // Do stuff
+     * }).on('socket', (socket) => {
+     *   socket.emit('agentRemove');
+     * });
+     * ```
+     *
+     * An agent may also be used for an individual request. By providing `{agent: false}` as an option to the `http.get()` or `http.request()` functions, a one-time use `Agent` with default options
+     * will be used
+     * for the client connection.
+     *
+     * `agent:false`:
+     *
+     * ```js
+     * http.get({
+     *   hostname: 'localhost',
+     *   port: 80,
+     *   path: '/',
+     *   agent: false,  // Create a new agent just for this one request
+     * }, (res) => {
+     *   // Do stuff with response
+     * });
+     * ```
+     *
+     * `options` in [`socket.connect()`](https://nodejs.org/docs/latest-v24.x/api/net.html#socketconnectoptions-connectlistener) are also supported.
+     *
+     * To configure any of them, a custom {@link Agent} instance must be created.
+     *
+     * ```js
+     * import http from 'node:http';
+     * const keepAliveAgent = new http.Agent({ keepAlive: true });
+     * options.agent = keepAliveAgent;
+     * http.request(options, onResponseCallback)
+     * ```
+     * @since v0.3.4
+     */
+    class Agent extends EventEmitter {
+        /**
+         * By default set to 256. For agents with `keepAlive` enabled, this
+         * sets the maximum number of sockets that will be left open in the free
+         * state.
+         * @since v0.11.7
+         */
+        maxFreeSockets: number;
+        /**
+         * By default set to `Infinity`. Determines how many concurrent sockets the agent
+         * can have open per origin. Origin is the returned value of `agent.getName()`.
+         * @since v0.3.6
+         */
+        maxSockets: number;
+        /**
+         * By default set to `Infinity`. Determines how many concurrent sockets the agent
+         * can have open. Unlike `maxSockets`, this parameter applies across all origins.
+         * @since v14.5.0, v12.19.0
+         */
+        maxTotalSockets: number;
+        /**
+         * An object which contains arrays of sockets currently awaiting use by
+         * the agent when `keepAlive` is enabled. Do not modify.
+         *
+         * Sockets in the `freeSockets` list will be automatically destroyed and
+         * removed from the array on `'timeout'`.
+         * @since v0.11.4
+         */
+        readonly freeSockets: NodeJS.ReadOnlyDict;
+        /**
+         * An object which contains arrays of sockets currently in use by the
+         * agent. Do not modify.
+         * @since v0.3.6
+         */
+        readonly sockets: NodeJS.ReadOnlyDict;
+        /**
+         * An object which contains queues of requests that have not yet been assigned to
+         * sockets. Do not modify.
+         * @since v0.5.9
+         */
+        readonly requests: NodeJS.ReadOnlyDict;
+        constructor(opts?: AgentOptions);
+        /**
+         * Destroy any sockets that are currently in use by the agent.
+         *
+         * It is usually not necessary to do this. However, if using an
+         * agent with `keepAlive` enabled, then it is best to explicitly shut down
+         * the agent when it is no longer needed. Otherwise,
+         * sockets might stay open for quite a long time before the server
+         * terminates them.
+         * @since v0.11.4
+         */
+        destroy(): void;
+        /**
+         * Produces a socket/stream to be used for HTTP requests.
+         *
+         * By default, this function is the same as `net.createConnection()`. However,
+         * custom agents may override this method in case greater flexibility is desired.
+         *
+         * A socket/stream can be supplied in one of two ways: by returning the
+         * socket/stream from this function, or by passing the socket/stream to `callback`.
+         *
+         * This method is guaranteed to return an instance of the `net.Socket` class,
+         * a subclass of `stream.Duplex`, unless the user specifies a socket
+         * type other than `net.Socket`.
+         *
+         * `callback` has a signature of `(err, stream)`.
+         * @since v0.11.4
+         * @param options Options containing connection details. Check `createConnection` for the format of the options
+         * @param callback Callback function that receives the created socket
+         */
+        createConnection(
+            options: ClientRequestArgs,
+            callback?: (err: Error | null, stream: stream.Duplex) => void,
+        ): stream.Duplex | null | undefined;
+        /**
+         * Called when `socket` is detached from a request and could be persisted by the`Agent`. Default behavior is to:
+         *
+         * ```js
+         * socket.setKeepAlive(true, this.keepAliveMsecs);
+         * socket.unref();
+         * return true;
+         * ```
+         *
+         * This method can be overridden by a particular `Agent` subclass. If this
+         * method returns a falsy value, the socket will be destroyed instead of persisting
+         * it for use with the next request.
+         *
+         * The `socket` argument can be an instance of `net.Socket`, a subclass of `stream.Duplex`.
+         * @since v8.1.0
+         */
+        keepSocketAlive(socket: stream.Duplex): void;
+        /**
+         * Called when `socket` is attached to `request` after being persisted because of
+         * the keep-alive options. Default behavior is to:
+         *
+         * ```js
+         * socket.ref();
+         * ```
+         *
+         * This method can be overridden by a particular `Agent` subclass.
+         *
+         * The `socket` argument can be an instance of `net.Socket`, a subclass of `stream.Duplex`.
+         * @since v8.1.0
+         */
+        reuseSocket(socket: stream.Duplex, request: ClientRequest): void;
+        /**
+         * Get a unique name for a set of request options, to determine whether a
+         * connection can be reused. For an HTTP agent, this returns`host:port:localAddress` or `host:port:localAddress:family`. For an HTTPS agent,
+         * the name includes the CA, cert, ciphers, and other HTTPS/TLS-specific options
+         * that determine socket reusability.
+         * @since v0.11.4
+         * @param options A set of options providing information for name generation
+         */
+        getName(options?: ClientRequestArgs): string;
+    }
+    const METHODS: string[];
+    const STATUS_CODES: {
+        [errorCode: number]: string | undefined;
+        [errorCode: string]: string | undefined;
+    };
+    /**
+     * Returns a new instance of {@link Server}.
+     *
+     * The `requestListener` is a function which is automatically
+     * added to the `'request'` event.
+     *
+     * ```js
+     * import http from 'node:http';
+     *
+     * // Create a local server to receive data from
+     * const server = http.createServer((req, res) => {
+     *   res.writeHead(200, { 'Content-Type': 'application/json' });
+     *   res.end(JSON.stringify({
+     *     data: 'Hello World!',
+     *   }));
+     * });
+     *
+     * server.listen(8000);
+     * ```
+     *
+     * ```js
+     * import http from 'node:http';
+     *
+     * // Create a local server to receive data from
+     * const server = http.createServer();
+     *
+     * // Listen to the request event
+     * server.on('request', (request, res) => {
+     *   res.writeHead(200, { 'Content-Type': 'application/json' });
+     *   res.end(JSON.stringify({
+     *     data: 'Hello World!',
+     *   }));
+     * });
+     *
+     * server.listen(8000);
+     * ```
+     * @since v0.1.13
+     */
+    function createServer<
+        Request extends typeof IncomingMessage = typeof IncomingMessage,
+        Response extends typeof ServerResponse> = typeof ServerResponse,
+    >(requestListener?: RequestListener): Server;
+    function createServer<
+        Request extends typeof IncomingMessage = typeof IncomingMessage,
+        Response extends typeof ServerResponse> = typeof ServerResponse,
+    >(
+        options: ServerOptions,
+        requestListener?: RequestListener,
+    ): Server;
+    // although RequestOptions are passed as ClientRequestArgs to ClientRequest directly,
+    // create interface RequestOptions would make the naming more clear to developers
+    interface RequestOptions extends ClientRequestArgs {}
+    /**
+     * `options` in `socket.connect()` are also supported.
+     *
+     * Node.js maintains several connections per server to make HTTP requests.
+     * This function allows one to transparently issue requests.
+     *
+     * `url` can be a string or a `URL` object. If `url` is a
+     * string, it is automatically parsed with `new URL()`. If it is a `URL` object, it will be automatically converted to an ordinary `options` object.
+     *
+     * If both `url` and `options` are specified, the objects are merged, with the `options` properties taking precedence.
+     *
+     * The optional `callback` parameter will be added as a one-time listener for
+     * the `'response'` event.
+     *
+     * `http.request()` returns an instance of the {@link ClientRequest} class. The `ClientRequest` instance is a writable stream. If one needs to
+     * upload a file with a POST request, then write to the `ClientRequest` object.
+     *
+     * ```js
+     * import http from 'node:http';
+     * import { Buffer } from 'node:buffer';
+     *
+     * const postData = JSON.stringify({
+     *   'msg': 'Hello World!',
+     * });
+     *
+     * const options = {
+     *   hostname: 'www.google.com',
+     *   port: 80,
+     *   path: '/upload',
+     *   method: 'POST',
+     *   headers: {
+     *     'Content-Type': 'application/json',
+     *     'Content-Length': Buffer.byteLength(postData),
+     *   },
+     * };
+     *
+     * const req = http.request(options, (res) => {
+     *   console.log(`STATUS: ${res.statusCode}`);
+     *   console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
+     *   res.setEncoding('utf8');
+     *   res.on('data', (chunk) => {
+     *     console.log(`BODY: ${chunk}`);
+     *   });
+     *   res.on('end', () => {
+     *     console.log('No more data in response.');
+     *   });
+     * });
+     *
+     * req.on('error', (e) => {
+     *   console.error(`problem with request: ${e.message}`);
+     * });
+     *
+     * // Write data to request body
+     * req.write(postData);
+     * req.end();
+     * ```
+     *
+     * In the example `req.end()` was called. With `http.request()` one
+     * must always call `req.end()` to signify the end of the request -
+     * even if there is no data being written to the request body.
+     *
+     * If any error is encountered during the request (be that with DNS resolution,
+     * TCP level errors, or actual HTTP parse errors) an `'error'` event is emitted
+     * on the returned request object. As with all `'error'` events, if no listeners
+     * are registered the error will be thrown.
+     *
+     * There are a few special headers that should be noted.
+     *
+     * * Sending a 'Connection: keep-alive' will notify Node.js that the connection to
+     * the server should be persisted until the next request.
+     * * Sending a 'Content-Length' header will disable the default chunked encoding.
+     * * Sending an 'Expect' header will immediately send the request headers.
+     * Usually, when sending 'Expect: 100-continue', both a timeout and a listener
+     * for the `'continue'` event should be set. See RFC 2616 Section 8.2.3 for more
+     * information.
+     * * Sending an Authorization header will override using the `auth` option
+     * to compute basic authentication.
+     *
+     * Example using a `URL` as `options`:
+     *
+     * ```js
+     * const options = new URL('http://abc:xyz@example.com');
+     *
+     * const req = http.request(options, (res) => {
+     *   // ...
+     * });
+     * ```
+     *
+     * In a successful request, the following events will be emitted in the following
+     * order:
+     *
+     * * `'socket'`
+     * * `'response'`
+     *    * `'data'` any number of times, on the `res` object
+     *    (`'data'` will not be emitted at all if the response body is empty, for
+     *    instance, in most redirects)
+     *    * `'end'` on the `res` object
+     * * `'close'`
+     *
+     * In the case of a connection error, the following events will be emitted:
+     *
+     * * `'socket'`
+     * * `'error'`
+     * * `'close'`
+     *
+     * In the case of a premature connection close before the response is received,
+     * the following events will be emitted in the following order:
+     *
+     * * `'socket'`
+     * * `'error'` with an error with message `'Error: socket hang up'` and code `'ECONNRESET'`
+     * * `'close'`
+     *
+     * In the case of a premature connection close after the response is received,
+     * the following events will be emitted in the following order:
+     *
+     * * `'socket'`
+     * * `'response'`
+     *    * `'data'` any number of times, on the `res` object
+     * * (connection closed here)
+     * * `'aborted'` on the `res` object
+     * * `'close'`
+     * * `'error'` on the `res` object with an error with message `'Error: aborted'` and code `'ECONNRESET'`
+     * * `'close'` on the `res` object
+     *
+     * If `req.destroy()` is called before a socket is assigned, the following
+     * events will be emitted in the following order:
+     *
+     * * (`req.destroy()` called here)
+     * * `'error'` with an error with message `'Error: socket hang up'` and code `'ECONNRESET'`, or the error with which `req.destroy()` was called
+     * * `'close'`
+     *
+     * If `req.destroy()` is called before the connection succeeds, the following
+     * events will be emitted in the following order:
+     *
+     * * `'socket'`
+     * * (`req.destroy()` called here)
+     * * `'error'` with an error with message `'Error: socket hang up'` and code `'ECONNRESET'`, or the error with which `req.destroy()` was called
+     * * `'close'`
+     *
+     * If `req.destroy()` is called after the response is received, the following
+     * events will be emitted in the following order:
+     *
+     * * `'socket'`
+     * * `'response'`
+     *    * `'data'` any number of times, on the `res` object
+     * * (`req.destroy()` called here)
+     * * `'aborted'` on the `res` object
+     * * `'close'`
+     * * `'error'` on the `res` object with an error with message `'Error: aborted'` and code `'ECONNRESET'`, or the error with which `req.destroy()` was called
+     * * `'close'` on the `res` object
+     *
+     * If `req.abort()` is called before a socket is assigned, the following
+     * events will be emitted in the following order:
+     *
+     * * (`req.abort()` called here)
+     * * `'abort'`
+     * * `'close'`
+     *
+     * If `req.abort()` is called before the connection succeeds, the following
+     * events will be emitted in the following order:
+     *
+     * * `'socket'`
+     * * (`req.abort()` called here)
+     * * `'abort'`
+     * * `'error'` with an error with message `'Error: socket hang up'` and code `'ECONNRESET'`
+     * * `'close'`
+     *
+     * If `req.abort()` is called after the response is received, the following
+     * events will be emitted in the following order:
+     *
+     * * `'socket'`
+     * * `'response'`
+     *    * `'data'` any number of times, on the `res` object
+     * * (`req.abort()` called here)
+     * * `'abort'`
+     * * `'aborted'` on the `res` object
+     * * `'error'` on the `res` object with an error with message `'Error: aborted'` and code `'ECONNRESET'`.
+     * * `'close'`
+     * * `'close'` on the `res` object
+     *
+     * Setting the `timeout` option or using the `setTimeout()` function will
+     * not abort the request or do anything besides add a `'timeout'` event.
+     *
+     * Passing an `AbortSignal` and then calling `abort()` on the corresponding `AbortController` will behave the same way as calling `.destroy()` on the
+     * request. Specifically, the `'error'` event will be emitted with an error with
+     * the message `'AbortError: The operation was aborted'`, the code `'ABORT_ERR'` and the `cause`, if one was provided.
+     * @since v0.3.6
+     */
+    function request(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest;
+    function request(
+        url: string | URL,
+        options: RequestOptions,
+        callback?: (res: IncomingMessage) => void,
+    ): ClientRequest;
+    /**
+     * Since most requests are GET requests without bodies, Node.js provides this
+     * convenience method. The only difference between this method and {@link request} is that it sets the method to GET by default and calls `req.end()` automatically. The callback must take care to
+     * consume the response
+     * data for reasons stated in {@link ClientRequest} section.
+     *
+     * The `callback` is invoked with a single argument that is an instance of {@link IncomingMessage}.
+     *
+     * JSON fetching example:
+     *
+     * ```js
+     * http.get('http://localhost:8000/', (res) => {
+     *   const { statusCode } = res;
+     *   const contentType = res.headers['content-type'];
+     *
+     *   let error;
+     *   // Any 2xx status code signals a successful response but
+     *   // here we're only checking for 200.
+     *   if (statusCode !== 200) {
+     *     error = new Error('Request Failed.\n' +
+     *                       `Status Code: ${statusCode}`);
+     *   } else if (!/^application\/json/.test(contentType)) {
+     *     error = new Error('Invalid content-type.\n' +
+     *                       `Expected application/json but received ${contentType}`);
+     *   }
+     *   if (error) {
+     *     console.error(error.message);
+     *     // Consume response data to free up memory
+     *     res.resume();
+     *     return;
+     *   }
+     *
+     *   res.setEncoding('utf8');
+     *   let rawData = '';
+     *   res.on('data', (chunk) => { rawData += chunk; });
+     *   res.on('end', () => {
+     *     try {
+     *       const parsedData = JSON.parse(rawData);
+     *       console.log(parsedData);
+     *     } catch (e) {
+     *       console.error(e.message);
+     *     }
+     *   });
+     * }).on('error', (e) => {
+     *   console.error(`Got error: ${e.message}`);
+     * });
+     *
+     * // Create a local server to receive data from
+     * const server = http.createServer((req, res) => {
+     *   res.writeHead(200, { 'Content-Type': 'application/json' });
+     *   res.end(JSON.stringify({
+     *     data: 'Hello World!',
+     *   }));
+     * });
+     *
+     * server.listen(8000);
+     * ```
+     * @since v0.3.6
+     * @param options Accepts the same `options` as {@link request}, with the method set to GET by default.
+     */
+    function get(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest;
+    function get(url: string | URL, options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest;
+    /**
+     * Performs the low-level validations on the provided `name` that are done when `res.setHeader(name, value)` is called.
+     *
+     * Passing illegal value as `name` will result in a `TypeError` being thrown,
+     * identified by `code: 'ERR_INVALID_HTTP_TOKEN'`.
+     *
+     * It is not necessary to use this method before passing headers to an HTTP request
+     * or response. The HTTP module will automatically validate such headers.
+     *
+     * Example:
+     *
+     * ```js
+     * import { validateHeaderName } from 'node:http';
+     *
+     * try {
+     *   validateHeaderName('');
+     * } catch (err) {
+     *   console.error(err instanceof TypeError); // --> true
+     *   console.error(err.code); // --> 'ERR_INVALID_HTTP_TOKEN'
+     *   console.error(err.message); // --> 'Header name must be a valid HTTP token [""]'
+     * }
+     * ```
+     * @since v14.3.0
+     * @param [label='Header name'] Label for error message.
+     */
+    function validateHeaderName(name: string): void;
+    /**
+     * Performs the low-level validations on the provided `value` that are done when `res.setHeader(name, value)` is called.
+     *
+     * Passing illegal value as `value` will result in a `TypeError` being thrown.
+     *
+     * * Undefined value error is identified by `code: 'ERR_HTTP_INVALID_HEADER_VALUE'`.
+     * * Invalid value character error is identified by `code: 'ERR_INVALID_CHAR'`.
+     *
+     * It is not necessary to use this method before passing headers to an HTTP request
+     * or response. The HTTP module will automatically validate such headers.
+     *
+     * Examples:
+     *
+     * ```js
+     * import { validateHeaderValue } from 'node:http';
+     *
+     * try {
+     *   validateHeaderValue('x-my-header', undefined);
+     * } catch (err) {
+     *   console.error(err instanceof TypeError); // --> true
+     *   console.error(err.code === 'ERR_HTTP_INVALID_HEADER_VALUE'); // --> true
+     *   console.error(err.message); // --> 'Invalid value "undefined" for header "x-my-header"'
+     * }
+     *
+     * try {
+     *   validateHeaderValue('x-my-header', 'oʊmɪɡə');
+     * } catch (err) {
+     *   console.error(err instanceof TypeError); // --> true
+     *   console.error(err.code === 'ERR_INVALID_CHAR'); // --> true
+     *   console.error(err.message); // --> 'Invalid character in header content ["x-my-header"]'
+     * }
+     * ```
+     * @since v14.3.0
+     * @param name Header name
+     * @param value Header value
+     */
+    function validateHeaderValue(name: string, value: string): void;
+    /**
+     * Set the maximum number of idle HTTP parsers.
+     * @since v18.8.0, v16.18.0
+     * @param [max=1000]
+     */
+    function setMaxIdleHTTPParsers(max: number): void;
+    /**
+     * Global instance of `Agent` which is used as the default for all HTTP client
+     * requests. Diverges from a default `Agent` configuration by having `keepAlive`
+     * enabled and a `timeout` of 5 seconds.
+     * @since v0.5.9
+     */
+    let globalAgent: Agent;
+    /**
+     * Read-only property specifying the maximum allowed size of HTTP headers in bytes.
+     * Defaults to 16KB. Configurable using the `--max-http-header-size` CLI option.
+     */
+    const maxHeaderSize: number;
+    /**
+     * A browser-compatible implementation of `WebSocket`.
+     * @since v22.5.0
+     */
+    const WebSocket: typeof import("undici-types").WebSocket;
+    /**
+     * @since v22.5.0
+     */
+    const CloseEvent: typeof import("undici-types").CloseEvent;
+    /**
+     * @since v22.5.0
+     */
+    const MessageEvent: typeof import("undici-types").MessageEvent;
+}
+declare module "node:http" {
+    export * from "http";
+}
diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/http2.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/http2.d.ts
new file mode 100644
index 00000000..c90af905
--- /dev/null
+++ b/.claude/hooks/check-new-deps/node_modules/@types/node/http2.d.ts
@@ -0,0 +1,2756 @@
+/**
+ * The `node:http2` module provides an implementation of the [HTTP/2](https://tools.ietf.org/html/rfc7540) protocol.
+ * It can be accessed using:
+ *
+ * ```js
+ * import http2 from 'node:http2';
+ * ```
+ * @since v8.4.0
+ * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/http2.js)
+ */
+declare module "http2" {
+    import { NonSharedBuffer } from "node:buffer";
+    import EventEmitter = require("node:events");
+    import * as fs from "node:fs";
+    import * as net from "node:net";
+    import * as stream from "node:stream";
+    import * as tls from "node:tls";
+    import * as url from "node:url";
+    import {
+        IncomingHttpHeaders as Http1IncomingHttpHeaders,
+        IncomingMessage,
+        OutgoingHttpHeaders,
+        ServerResponse,
+    } from "node:http";
+    export { OutgoingHttpHeaders } from "node:http";
+    export interface IncomingHttpStatusHeader {
+        ":status"?: number | undefined;
+    }
+    export interface IncomingHttpHeaders extends Http1IncomingHttpHeaders {
+        ":path"?: string | undefined;
+        ":method"?: string | undefined;
+        ":authority"?: string | undefined;
+        ":scheme"?: string | undefined;
+    }
+    // Http2Stream
+    export interface StreamState {
+        localWindowSize?: number | undefined;
+        state?: number | undefined;
+        localClose?: number | undefined;
+        remoteClose?: number | undefined;
+        /** @deprecated */
+        sumDependencyWeight?: number | undefined;
+        /** @deprecated */
+        weight?: number | undefined;
+    }
+    export interface ServerStreamResponseOptions {
+        endStream?: boolean | undefined;
+        waitForTrailers?: boolean | undefined;
+    }
+    export interface StatOptions {
+        offset: number;
+        length: number;
+    }
+    export interface ServerStreamFileResponseOptions {
+        statCheck?:
+            | ((stats: fs.Stats, headers: OutgoingHttpHeaders, statOptions: StatOptions) => void)
+            | undefined;
+        waitForTrailers?: boolean | undefined;
+        offset?: number | undefined;
+        length?: number | undefined;
+    }
+    export interface ServerStreamFileResponseOptionsWithError extends ServerStreamFileResponseOptions {
+        onError?: ((err: NodeJS.ErrnoException) => void) | undefined;
+    }
+    export interface Http2Stream extends stream.Duplex {
+        /**
+         * Set to `true` if the `Http2Stream` instance was aborted abnormally. When set,
+         * the `'aborted'` event will have been emitted.
+         * @since v8.4.0
+         */
+        readonly aborted: boolean;
+        /**
+         * This property shows the number of characters currently buffered to be written.
+         * See `net.Socket.bufferSize` for details.
+         * @since v11.2.0, v10.16.0
+         */
+        readonly bufferSize: number;
+        /**
+         * Set to `true` if the `Http2Stream` instance has been closed.
+         * @since v9.4.0
+         */
+        readonly closed: boolean;
+        /**
+         * Set to `true` if the `Http2Stream` instance has been destroyed and is no longer
+         * usable.
+         * @since v8.4.0
+         */
+        readonly destroyed: boolean;
+        /**
+         * Set to `true` if the `END_STREAM` flag was set in the request or response
+         * HEADERS frame received, indicating that no additional data should be received
+         * and the readable side of the `Http2Stream` will be closed.
+         * @since v10.11.0
+         */
+        readonly endAfterHeaders: boolean;
+        /**
+         * The numeric stream identifier of this `Http2Stream` instance. Set to `undefined` if the stream identifier has not yet been assigned.
+         * @since v8.4.0
+         */
+        readonly id?: number | undefined;
+        /**
+         * Set to `true` if the `Http2Stream` instance has not yet been assigned a
+         * numeric stream identifier.
+         * @since v9.4.0
+         */
+        readonly pending: boolean;
+        /**
+         * Set to the `RST_STREAM` `error code` reported when the `Http2Stream` is
+         * destroyed after either receiving an `RST_STREAM` frame from the connected peer,
+         * calling `http2stream.close()`, or `http2stream.destroy()`. Will be `undefined` if the `Http2Stream` has not been closed.
+         * @since v8.4.0
+         */
+        readonly rstCode: number;
+        /**
+         * An object containing the outbound headers sent for this `Http2Stream`.
+         * @since v9.5.0
+         */
+        readonly sentHeaders: OutgoingHttpHeaders;
+        /**
+         * An array of objects containing the outbound informational (additional) headers
+         * sent for this `Http2Stream`.
+         * @since v9.5.0
+         */
+        readonly sentInfoHeaders?: OutgoingHttpHeaders[] | undefined;
+        /**
+         * An object containing the outbound trailers sent for this `HttpStream`.
+         * @since v9.5.0
+         */
+        readonly sentTrailers?: OutgoingHttpHeaders | undefined;
+        /**
+         * A reference to the `Http2Session` instance that owns this `Http2Stream`. The
+         * value will be `undefined` after the `Http2Stream` instance is destroyed.
+         * @since v8.4.0
+         */
+        readonly session: Http2Session | undefined;
+        /**
+         * Provides miscellaneous information about the current state of the `Http2Stream`.
+         *
+         * A current state of this `Http2Stream`.
+         * @since v8.4.0
+         */
+        readonly state: StreamState;
+        /**
+         * Closes the `Http2Stream` instance by sending an `RST_STREAM` frame to the
+         * connected HTTP/2 peer.
+         * @since v8.4.0
+         * @param [code=http2.constants.NGHTTP2_NO_ERROR] Unsigned 32-bit integer identifying the error code.
+         * @param callback An optional function registered to listen for the `'close'` event.
+         */
+        close(code?: number, callback?: () => void): void;
+        /**
+         * @deprecated Priority signaling is no longer supported in Node.js.
+         */
+        priority(options: unknown): void;
+        /**
+         * ```js
+         * import http2 from 'node:http2';
+         * const client = http2.connect('http://example.org:8000');
+         * const { NGHTTP2_CANCEL } = http2.constants;
+         * const req = client.request({ ':path': '/' });
+         *
+         * // Cancel the stream if there's no activity after 5 seconds
+         * req.setTimeout(5000, () => req.close(NGHTTP2_CANCEL));
+         * ```
+         * @since v8.4.0
+         */
+        setTimeout(msecs: number, callback?: () => void): void;
+        /**
+         * Sends a trailing `HEADERS` frame to the connected HTTP/2 peer. This method
+         * will cause the `Http2Stream` to be immediately closed and must only be
+         * called after the `'wantTrailers'` event has been emitted. When sending a
+         * request or sending a response, the `options.waitForTrailers` option must be set
+         * in order to keep the `Http2Stream` open after the final `DATA` frame so that
+         * trailers can be sent.
+         *
+         * ```js
+         * import http2 from 'node:http2';
+         * const server = http2.createServer();
+         * server.on('stream', (stream) => {
+         *   stream.respond(undefined, { waitForTrailers: true });
+         *   stream.on('wantTrailers', () => {
+         *     stream.sendTrailers({ xyz: 'abc' });
+         *   });
+         *   stream.end('Hello World');
+         * });
+         * ```
+         *
+         * The HTTP/1 specification forbids trailers from containing HTTP/2 pseudo-header
+         * fields (e.g. `':method'`, `':path'`, etc).
+         * @since v10.0.0
+         */
+        sendTrailers(headers: OutgoingHttpHeaders): void;
+        addListener(event: "aborted", listener: () => void): this;
+        addListener(event: "close", listener: () => void): this;
+        addListener(event: "data", listener: (chunk: NonSharedBuffer | string) => void): this;
+        addListener(event: "drain", listener: () => void): this;
+        addListener(event: "end", listener: () => void): this;
+        addListener(event: "error", listener: (err: Error) => void): this;
+        addListener(event: "finish", listener: () => void): this;
+        addListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this;
+        addListener(event: "pipe", listener: (src: stream.Readable) => void): this;
+        addListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        addListener(event: "streamClosed", listener: (code: number) => void): this;
+        addListener(event: "timeout", listener: () => void): this;
+        addListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
+        addListener(event: "wantTrailers", listener: () => void): this;
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        emit(event: "aborted"): boolean;
+        emit(event: "close"): boolean;
+        emit(event: "data", chunk: NonSharedBuffer | string): boolean;
+        emit(event: "drain"): boolean;
+        emit(event: "end"): boolean;
+        emit(event: "error", err: Error): boolean;
+        emit(event: "finish"): boolean;
+        emit(event: "frameError", frameType: number, errorCode: number): boolean;
+        emit(event: "pipe", src: stream.Readable): boolean;
+        emit(event: "unpipe", src: stream.Readable): boolean;
+        emit(event: "streamClosed", code: number): boolean;
+        emit(event: "timeout"): boolean;
+        emit(event: "trailers", trailers: IncomingHttpHeaders, flags: number): boolean;
+        emit(event: "wantTrailers"): boolean;
+        emit(event: string | symbol, ...args: any[]): boolean;
+        on(event: "aborted", listener: () => void): this;
+        on(event: "close", listener: () => void): this;
+        on(event: "data", listener: (chunk: NonSharedBuffer | string) => void): this;
+        on(event: "drain", listener: () => void): this;
+        on(event: "end", listener: () => void): this;
+        on(event: "error", listener: (err: Error) => void): this;
+        on(event: "finish", listener: () => void): this;
+        on(event: "frameError", listener: (frameType: number, errorCode: number) => void): this;
+        on(event: "pipe", listener: (src: stream.Readable) => void): this;
+        on(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        on(event: "streamClosed", listener: (code: number) => void): this;
+        on(event: "timeout", listener: () => void): this;
+        on(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
+        on(event: "wantTrailers", listener: () => void): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+        once(event: "aborted", listener: () => void): this;
+        once(event: "close", listener: () => void): this;
+        once(event: "data", listener: (chunk: NonSharedBuffer | string) => void): this;
+        once(event: "drain", listener: () => void): this;
+        once(event: "end", listener: () => void): this;
+        once(event: "error", listener: (err: Error) => void): this;
+        once(event: "finish", listener: () => void): this;
+        once(event: "frameError", listener: (frameType: number, errorCode: number) => void): this;
+        once(event: "pipe", listener: (src: stream.Readable) => void): this;
+        once(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        once(event: "streamClosed", listener: (code: number) => void): this;
+        once(event: "timeout", listener: () => void): this;
+        once(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
+        once(event: "wantTrailers", listener: () => void): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+        prependListener(event: "aborted", listener: () => void): this;
+        prependListener(event: "close", listener: () => void): this;
+        prependListener(event: "data", listener: (chunk: NonSharedBuffer | string) => void): this;
+        prependListener(event: "drain", listener: () => void): this;
+        prependListener(event: "end", listener: () => void): this;
+        prependListener(event: "error", listener: (err: Error) => void): this;
+        prependListener(event: "finish", listener: () => void): this;
+        prependListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this;
+        prependListener(event: "pipe", listener: (src: stream.Readable) => void): this;
+        prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        prependListener(event: "streamClosed", listener: (code: number) => void): this;
+        prependListener(event: "timeout", listener: () => void): this;
+        prependListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
+        prependListener(event: "wantTrailers", listener: () => void): this;
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "aborted", listener: () => void): this;
+        prependOnceListener(event: "close", listener: () => void): this;
+        prependOnceListener(event: "data", listener: (chunk: NonSharedBuffer | string) => void): this;
+        prependOnceListener(event: "drain", listener: () => void): this;
+        prependOnceListener(event: "end", listener: () => void): this;
+        prependOnceListener(event: "error", listener: (err: Error) => void): this;
+        prependOnceListener(event: "finish", listener: () => void): this;
+        prependOnceListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this;
+        prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this;
+        prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        prependOnceListener(event: "streamClosed", listener: (code: number) => void): this;
+        prependOnceListener(event: "timeout", listener: () => void): this;
+        prependOnceListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
+        prependOnceListener(event: "wantTrailers", listener: () => void): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+    }
+    export interface ClientHttp2Stream extends Http2Stream {
+        addListener(event: "continue", listener: () => {}): this;
+        addListener(
+            event: "headers",
+            listener: (
+                headers: IncomingHttpHeaders & IncomingHttpStatusHeader,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        addListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
+        addListener(
+            event: "response",
+            listener: (
+                headers: IncomingHttpHeaders & IncomingHttpStatusHeader,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        emit(event: "continue"): boolean;
+        emit(
+            event: "headers",
+            headers: IncomingHttpHeaders & IncomingHttpStatusHeader,
+            flags: number,
+            rawHeaders: string[],
+        ): boolean;
+        emit(event: "push", headers: IncomingHttpHeaders, flags: number): boolean;
+        emit(
+            event: "response",
+            headers: IncomingHttpHeaders & IncomingHttpStatusHeader,
+            flags: number,
+            rawHeaders: string[],
+        ): boolean;
+        emit(event: string | symbol, ...args: any[]): boolean;
+        on(event: "continue", listener: () => {}): this;
+        on(
+            event: "headers",
+            listener: (
+                headers: IncomingHttpHeaders & IncomingHttpStatusHeader,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        on(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
+        on(
+            event: "response",
+            listener: (
+                headers: IncomingHttpHeaders & IncomingHttpStatusHeader,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+        once(event: "continue", listener: () => {}): this;
+        once(
+            event: "headers",
+            listener: (
+                headers: IncomingHttpHeaders & IncomingHttpStatusHeader,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        once(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
+        once(
+            event: "response",
+            listener: (
+                headers: IncomingHttpHeaders & IncomingHttpStatusHeader,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+        prependListener(event: "continue", listener: () => {}): this;
+        prependListener(
+            event: "headers",
+            listener: (
+                headers: IncomingHttpHeaders & IncomingHttpStatusHeader,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        prependListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
+        prependListener(
+            event: "response",
+            listener: (
+                headers: IncomingHttpHeaders & IncomingHttpStatusHeader,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "continue", listener: () => {}): this;
+        prependOnceListener(
+            event: "headers",
+            listener: (
+                headers: IncomingHttpHeaders & IncomingHttpStatusHeader,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        prependOnceListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
+        prependOnceListener(
+            event: "response",
+            listener: (
+                headers: IncomingHttpHeaders & IncomingHttpStatusHeader,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+    }
+    export interface ServerHttp2Stream extends Http2Stream {
+        /**
+         * True if headers were sent, false otherwise (read-only).
+         * @since v8.4.0
+         */
+        readonly headersSent: boolean;
+        /**
+         * Read-only property mapped to the `SETTINGS_ENABLE_PUSH` flag of the remote
+         * client's most recent `SETTINGS` frame. Will be `true` if the remote peer
+         * accepts push streams, `false` otherwise. Settings are the same for every `Http2Stream` in the same `Http2Session`.
+         * @since v8.4.0
+         */
+        readonly pushAllowed: boolean;
+        /**
+         * Sends an additional informational `HEADERS` frame to the connected HTTP/2 peer.
+         * @since v8.4.0
+         */
+        additionalHeaders(headers: OutgoingHttpHeaders): void;
+        /**
+         * Initiates a push stream. The callback is invoked with the new `Http2Stream` instance created for the push stream passed as the second argument, or an `Error` passed as the first argument.
+         *
+         * ```js
+         * import http2 from 'node:http2';
+         * const server = http2.createServer();
+         * server.on('stream', (stream) => {
+         *   stream.respond({ ':status': 200 });
+         *   stream.pushStream({ ':path': '/' }, (err, pushStream, headers) => {
+         *     if (err) throw err;
+         *     pushStream.respond({ ':status': 200 });
+         *     pushStream.end('some pushed data');
+         *   });
+         *   stream.end('some data');
+         * });
+         * ```
+         *
+         * Setting the weight of a push stream is not allowed in the `HEADERS` frame. Pass
+         * a `weight` value to `http2stream.priority` with the `silent` option set to `true` to enable server-side bandwidth balancing between concurrent streams.
+         *
+         * Calling `http2stream.pushStream()` from within a pushed stream is not permitted
+         * and will throw an error.
+         * @since v8.4.0
+         * @param callback Callback that is called once the push stream has been initiated.
+         */
+        pushStream(
+            headers: OutgoingHttpHeaders,
+            callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void,
+        ): void;
+        pushStream(
+            headers: OutgoingHttpHeaders,
+            options?: Pick,
+            callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void,
+        ): void;
+        /**
+         * ```js
+         * import http2 from 'node:http2';
+         * const server = http2.createServer();
+         * server.on('stream', (stream) => {
+         *   stream.respond({ ':status': 200 });
+         *   stream.end('some data');
+         * });
+         * ```
+         *
+         * Initiates a response. When the `options.waitForTrailers` option is set, the `'wantTrailers'` event
+         * will be emitted immediately after queuing the last chunk of payload data to be sent.
+         * The `http2stream.sendTrailers()` method can then be used to send trailing header fields to the peer.
+         *
+         * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically
+         * close when the final `DATA` frame is transmitted. User code must call either `http2stream.sendTrailers()` or `http2stream.close()` to close the `Http2Stream`.
+         *
+         * ```js
+         * import http2 from 'node:http2';
+         * const server = http2.createServer();
+         * server.on('stream', (stream) => {
+         *   stream.respond({ ':status': 200 }, { waitForTrailers: true });
+         *   stream.on('wantTrailers', () => {
+         *     stream.sendTrailers({ ABC: 'some value to send' });
+         *   });
+         *   stream.end('some data');
+         * });
+         * ```
+         * @since v8.4.0
+         */
+        respond(headers?: OutgoingHttpHeaders | readonly string[], options?: ServerStreamResponseOptions): void;
+        /**
+         * Initiates a response whose data is read from the given file descriptor. No
+         * validation is performed on the given file descriptor. If an error occurs while
+         * attempting to read data using the file descriptor, the `Http2Stream` will be
+         * closed using an `RST_STREAM` frame using the standard `INTERNAL_ERROR` code.
+         *
+         * When used, the `Http2Stream` object's `Duplex` interface will be closed
+         * automatically.
+         *
+         * ```js
+         * import http2 from 'node:http2';
+         * import fs from 'node:fs';
+         *
+         * const server = http2.createServer();
+         * server.on('stream', (stream) => {
+         *   const fd = fs.openSync('/some/file', 'r');
+         *
+         *   const stat = fs.fstatSync(fd);
+         *   const headers = {
+         *     'content-length': stat.size,
+         *     'last-modified': stat.mtime.toUTCString(),
+         *     'content-type': 'text/plain; charset=utf-8',
+         *   };
+         *   stream.respondWithFD(fd, headers);
+         *   stream.on('close', () => fs.closeSync(fd));
+         * });
+         * ```
+         *
+         * The optional `options.statCheck` function may be specified to give user code
+         * an opportunity to set additional content headers based on the `fs.Stat` details
+         * of the given fd. If the `statCheck` function is provided, the `http2stream.respondWithFD()` method will
+         * perform an `fs.fstat()` call to collect details on the provided file descriptor.
+         *
+         * The `offset` and `length` options may be used to limit the response to a
+         * specific range subset. This can be used, for instance, to support HTTP Range
+         * requests.
+         *
+         * The file descriptor or `FileHandle` is not closed when the stream is closed,
+         * so it will need to be closed manually once it is no longer needed.
+         * Using the same file descriptor concurrently for multiple streams
+         * is not supported and may result in data loss. Re-using a file descriptor
+         * after a stream has finished is supported.
+         *
+         * When the `options.waitForTrailers` option is set, the `'wantTrailers'` event
+         * will be emitted immediately after queuing the last chunk of payload data to be
+         * sent. The `http2stream.sendTrailers()` method can then be used to sent trailing
+         * header fields to the peer.
+         *
+         * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically
+         * close when the final `DATA` frame is transmitted. User code _must_ call either `http2stream.sendTrailers()`
+         * or `http2stream.close()` to close the `Http2Stream`.
+         *
+         * ```js
+         * import http2 from 'node:http2';
+         * import fs from 'node:fs';
+         *
+         * const server = http2.createServer();
+         * server.on('stream', (stream) => {
+         *   const fd = fs.openSync('/some/file', 'r');
+         *
+         *   const stat = fs.fstatSync(fd);
+         *   const headers = {
+         *     'content-length': stat.size,
+         *     'last-modified': stat.mtime.toUTCString(),
+         *     'content-type': 'text/plain; charset=utf-8',
+         *   };
+         *   stream.respondWithFD(fd, headers, { waitForTrailers: true });
+         *   stream.on('wantTrailers', () => {
+         *     stream.sendTrailers({ ABC: 'some value to send' });
+         *   });
+         *
+         *   stream.on('close', () => fs.closeSync(fd));
+         * });
+         * ```
+         * @since v8.4.0
+         * @param fd A readable file descriptor.
+         */
+        respondWithFD(
+            fd: number | fs.promises.FileHandle,
+            headers?: OutgoingHttpHeaders,
+            options?: ServerStreamFileResponseOptions,
+        ): void;
+        /**
+         * Sends a regular file as the response. The `path` must specify a regular file
+         * or an `'error'` event will be emitted on the `Http2Stream` object.
+         *
+         * When used, the `Http2Stream` object's `Duplex` interface will be closed
+         * automatically.
+         *
+         * The optional `options.statCheck` function may be specified to give user code
+         * an opportunity to set additional content headers based on the `fs.Stat` details
+         * of the given file:
+         *
+         * If an error occurs while attempting to read the file data, the `Http2Stream` will be closed using an
+         * `RST_STREAM` frame using the standard `INTERNAL_ERROR` code.
+         * If the `onError` callback is defined, then it will be called. Otherwise, the stream will be destroyed.
+         *
+         * Example using a file path:
+         *
+         * ```js
+         * import http2 from 'node:http2';
+         * const server = http2.createServer();
+         * server.on('stream', (stream) => {
+         *   function statCheck(stat, headers) {
+         *     headers['last-modified'] = stat.mtime.toUTCString();
+         *   }
+         *
+         *   function onError(err) {
+         *     // stream.respond() can throw if the stream has been destroyed by
+         *     // the other side.
+         *     try {
+         *       if (err.code === 'ENOENT') {
+         *         stream.respond({ ':status': 404 });
+         *       } else {
+         *         stream.respond({ ':status': 500 });
+         *       }
+         *     } catch (err) {
+         *       // Perform actual error handling.
+         *       console.error(err);
+         *     }
+         *     stream.end();
+         *   }
+         *
+         *   stream.respondWithFile('/some/file',
+         *                          { 'content-type': 'text/plain; charset=utf-8' },
+         *                          { statCheck, onError });
+         * });
+         * ```
+         *
+         * The `options.statCheck` function may also be used to cancel the send operation
+         * by returning `false`. For instance, a conditional request may check the stat
+         * results to determine if the file has been modified to return an appropriate `304` response:
+         *
+         * ```js
+         * import http2 from 'node:http2';
+         * const server = http2.createServer();
+         * server.on('stream', (stream) => {
+         *   function statCheck(stat, headers) {
+         *     // Check the stat here...
+         *     stream.respond({ ':status': 304 });
+         *     return false; // Cancel the send operation
+         *   }
+         *   stream.respondWithFile('/some/file',
+         *                          { 'content-type': 'text/plain; charset=utf-8' },
+         *                          { statCheck });
+         * });
+         * ```
+         *
+         * The `content-length` header field will be automatically set.
+         *
+         * The `offset` and `length` options may be used to limit the response to a
+         * specific range subset. This can be used, for instance, to support HTTP Range
+         * requests.
+         *
+         * The `options.onError` function may also be used to handle all the errors
+         * that could happen before the delivery of the file is initiated. The
+         * default behavior is to destroy the stream.
+         *
+         * When the `options.waitForTrailers` option is set, the `'wantTrailers'` event
+         * will be emitted immediately after queuing the last chunk of payload data to be
+         * sent. The `http2stream.sendTrailers()` method can then be used to sent trailing
+         * header fields to the peer.
+         *
+         * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically
+         * close when the final `DATA` frame is transmitted. User code must call either`http2stream.sendTrailers()` or `http2stream.close()` to close the`Http2Stream`.
+         *
+         * ```js
+         * import http2 from 'node:http2';
+         * const server = http2.createServer();
+         * server.on('stream', (stream) => {
+         *   stream.respondWithFile('/some/file',
+         *                          { 'content-type': 'text/plain; charset=utf-8' },
+         *                          { waitForTrailers: true });
+         *   stream.on('wantTrailers', () => {
+         *     stream.sendTrailers({ ABC: 'some value to send' });
+         *   });
+         * });
+         * ```
+         * @since v8.4.0
+         */
+        respondWithFile(
+            path: string,
+            headers?: OutgoingHttpHeaders,
+            options?: ServerStreamFileResponseOptionsWithError,
+        ): void;
+    }
+    // Http2Session
+    export interface Settings {
+        headerTableSize?: number | undefined;
+        enablePush?: boolean | undefined;
+        initialWindowSize?: number | undefined;
+        maxFrameSize?: number | undefined;
+        maxConcurrentStreams?: number | undefined;
+        maxHeaderListSize?: number | undefined;
+        enableConnectProtocol?: boolean | undefined;
+    }
+    export interface ClientSessionRequestOptions {
+        endStream?: boolean | undefined;
+        exclusive?: boolean | undefined;
+        parent?: number | undefined;
+        waitForTrailers?: boolean | undefined;
+        signal?: AbortSignal | undefined;
+    }
+    export interface SessionState {
+        effectiveLocalWindowSize?: number | undefined;
+        effectiveRecvDataLength?: number | undefined;
+        nextStreamID?: number | undefined;
+        localWindowSize?: number | undefined;
+        lastProcStreamID?: number | undefined;
+        remoteWindowSize?: number | undefined;
+        outboundQueueSize?: number | undefined;
+        deflateDynamicTableSize?: number | undefined;
+        inflateDynamicTableSize?: number | undefined;
+    }
+    export interface Http2Session extends EventEmitter {
+        /**
+         * Value will be `undefined` if the `Http2Session` is not yet connected to a
+         * socket, `h2c` if the `Http2Session` is not connected to a `TLSSocket`, or
+         * will return the value of the connected `TLSSocket`'s own `alpnProtocol` property.
+         * @since v9.4.0
+         */
+        readonly alpnProtocol?: string | undefined;
+        /**
+         * Will be `true` if this `Http2Session` instance has been closed, otherwise `false`.
+         * @since v9.4.0
+         */
+        readonly closed: boolean;
+        /**
+         * Will be `true` if this `Http2Session` instance is still connecting, will be set
+         * to `false` before emitting `connect` event and/or calling the `http2.connect` callback.
+         * @since v10.0.0
+         */
+        readonly connecting: boolean;
+        /**
+         * Will be `true` if this `Http2Session` instance has been destroyed and must no
+         * longer be used, otherwise `false`.
+         * @since v8.4.0
+         */
+        readonly destroyed: boolean;
+        /**
+         * Value is `undefined` if the `Http2Session` session socket has not yet been
+         * connected, `true` if the `Http2Session` is connected with a `TLSSocket`,
+         * and `false` if the `Http2Session` is connected to any other kind of socket
+         * or stream.
+         * @since v9.4.0
+         */
+        readonly encrypted?: boolean | undefined;
+        /**
+         * A prototype-less object describing the current local settings of this `Http2Session`.
+         * The local settings are local to _this_`Http2Session` instance.
+         * @since v8.4.0
+         */
+        readonly localSettings: Settings;
+        /**
+         * If the `Http2Session` is connected to a `TLSSocket`, the `originSet` property
+         * will return an `Array` of origins for which the `Http2Session` may be
+         * considered authoritative.
+         *
+         * The `originSet` property is only available when using a secure TLS connection.
+         * @since v9.4.0
+         */
+        readonly originSet?: string[] | undefined;
+        /**
+         * Indicates whether the `Http2Session` is currently waiting for acknowledgment of
+         * a sent `SETTINGS` frame. Will be `true` after calling the `http2session.settings()` method.
+         * Will be `false` once all sent `SETTINGS` frames have been acknowledged.
+         * @since v8.4.0
+         */
+        readonly pendingSettingsAck: boolean;
+        /**
+         * A prototype-less object describing the current remote settings of this`Http2Session`.
+         * The remote settings are set by the _connected_ HTTP/2 peer.
+         * @since v8.4.0
+         */
+        readonly remoteSettings: Settings;
+        /**
+         * Returns a `Proxy` object that acts as a `net.Socket` (or `tls.TLSSocket`) but
+         * limits available methods to ones safe to use with HTTP/2.
+         *
+         * `destroy`, `emit`, `end`, `pause`, `read`, `resume`, and `write` will throw
+         * an error with code `ERR_HTTP2_NO_SOCKET_MANIPULATION`. See `Http2Session and Sockets` for more information.
+         *
+         * `setTimeout` method will be called on this `Http2Session`.
+         *
+         * All other interactions will be routed directly to the socket.
+         * @since v8.4.0
+         */
+        readonly socket: net.Socket | tls.TLSSocket;
+        /**
+         * Provides miscellaneous information about the current state of the`Http2Session`.
+         *
+         * An object describing the current status of this `Http2Session`.
+         * @since v8.4.0
+         */
+        readonly state: SessionState;
+        /**
+         * The `http2session.type` will be equal to `http2.constants.NGHTTP2_SESSION_SERVER` if this `Http2Session` instance is a
+         * server, and `http2.constants.NGHTTP2_SESSION_CLIENT` if the instance is a
+         * client.
+         * @since v8.4.0
+         */
+        readonly type: number;
+        /**
+         * Gracefully closes the `Http2Session`, allowing any existing streams to
+         * complete on their own and preventing new `Http2Stream` instances from being
+         * created. Once closed, `http2session.destroy()`_might_ be called if there
+         * are no open `Http2Stream` instances.
+         *
+         * If specified, the `callback` function is registered as a handler for the`'close'` event.
+         * @since v9.4.0
+         */
+        close(callback?: () => void): void;
+        /**
+         * Immediately terminates the `Http2Session` and the associated `net.Socket` or `tls.TLSSocket`.
+         *
+         * Once destroyed, the `Http2Session` will emit the `'close'` event. If `error` is not undefined, an `'error'` event will be emitted immediately before the `'close'` event.
+         *
+         * If there are any remaining open `Http2Streams` associated with the `Http2Session`, those will also be destroyed.
+         * @since v8.4.0
+         * @param error An `Error` object if the `Http2Session` is being destroyed due to an error.
+         * @param code The HTTP/2 error code to send in the final `GOAWAY` frame. If unspecified, and `error` is not undefined, the default is `INTERNAL_ERROR`, otherwise defaults to `NO_ERROR`.
+         */
+        destroy(error?: Error, code?: number): void;
+        /**
+         * Transmits a `GOAWAY` frame to the connected peer _without_ shutting down the`Http2Session`.
+         * @since v9.4.0
+         * @param code An HTTP/2 error code
+         * @param lastStreamID The numeric ID of the last processed `Http2Stream`
+         * @param opaqueData A `TypedArray` or `DataView` instance containing additional data to be carried within the `GOAWAY` frame.
+         */
+        goaway(code?: number, lastStreamID?: number, opaqueData?: NodeJS.ArrayBufferView): void;
+        /**
+         * Sends a `PING` frame to the connected HTTP/2 peer. A `callback` function must
+         * be provided. The method will return `true` if the `PING` was sent, `false` otherwise.
+         *
+         * The maximum number of outstanding (unacknowledged) pings is determined by the `maxOutstandingPings` configuration option. The default maximum is 10.
+         *
+         * If provided, the `payload` must be a `Buffer`, `TypedArray`, or `DataView` containing 8 bytes of data that will be transmitted with the `PING` and
+         * returned with the ping acknowledgment.
+         *
+         * The callback will be invoked with three arguments: an error argument that will
+         * be `null` if the `PING` was successfully acknowledged, a `duration` argument
+         * that reports the number of milliseconds elapsed since the ping was sent and the
+         * acknowledgment was received, and a `Buffer` containing the 8-byte `PING` payload.
+         *
+         * ```js
+         * session.ping(Buffer.from('abcdefgh'), (err, duration, payload) => {
+         *   if (!err) {
+         *     console.log(`Ping acknowledged in ${duration} milliseconds`);
+         *     console.log(`With payload '${payload.toString()}'`);
+         *   }
+         * });
+         * ```
+         *
+         * If the `payload` argument is not specified, the default payload will be the
+         * 64-bit timestamp (little endian) marking the start of the `PING` duration.
+         * @since v8.9.3
+         * @param payload Optional ping payload.
+         */
+        ping(callback: (err: Error | null, duration: number, payload: NonSharedBuffer) => void): boolean;
+        ping(
+            payload: NodeJS.ArrayBufferView,
+            callback: (err: Error | null, duration: number, payload: NonSharedBuffer) => void,
+        ): boolean;
+        /**
+         * Calls `ref()` on this `Http2Session` instance's underlying `net.Socket`.
+         * @since v9.4.0
+         */
+        ref(): void;
+        /**
+         * Sets the local endpoint's window size.
+         * The `windowSize` is the total window size to set, not
+         * the delta.
+         *
+         * ```js
+         * import http2 from 'node:http2';
+         *
+         * const server = http2.createServer();
+         * const expectedWindowSize = 2 ** 20;
+         * server.on('connect', (session) => {
+         *
+         *   // Set local window size to be 2 ** 20
+         *   session.setLocalWindowSize(expectedWindowSize);
+         * });
+         * ```
+         * @since v15.3.0, v14.18.0
+         */
+        setLocalWindowSize(windowSize: number): void;
+        /**
+         * Used to set a callback function that is called when there is no activity on
+         * the `Http2Session` after `msecs` milliseconds. The given `callback` is
+         * registered as a listener on the `'timeout'` event.
+         * @since v8.4.0
+         */
+        setTimeout(msecs: number, callback?: () => void): void;
+        /**
+         * Updates the current local settings for this `Http2Session` and sends a new `SETTINGS` frame to the connected HTTP/2 peer.
+         *
+         * Once called, the `http2session.pendingSettingsAck` property will be `true` while the session is waiting for the remote peer to acknowledge the new
+         * settings.
+         *
+         * The new settings will not become effective until the `SETTINGS` acknowledgment
+         * is received and the `'localSettings'` event is emitted. It is possible to send
+         * multiple `SETTINGS` frames while acknowledgment is still pending.
+         * @since v8.4.0
+         * @param callback Callback that is called once the session is connected or right away if the session is already connected.
+         */
+        settings(
+            settings: Settings,
+            callback?: (err: Error | null, settings: Settings, duration: number) => void,
+        ): void;
+        /**
+         * Calls `unref()` on this `Http2Session`instance's underlying `net.Socket`.
+         * @since v9.4.0
+         */
+        unref(): void;
+        addListener(event: "close", listener: () => void): this;
+        addListener(event: "error", listener: (err: Error) => void): this;
+        addListener(
+            event: "frameError",
+            listener: (frameType: number, errorCode: number, streamID: number) => void,
+        ): this;
+        addListener(
+            event: "goaway",
+            listener: (errorCode: number, lastStreamID: number, opaqueData?: NonSharedBuffer) => void,
+        ): this;
+        addListener(event: "localSettings", listener: (settings: Settings) => void): this;
+        addListener(event: "ping", listener: () => void): this;
+        addListener(event: "remoteSettings", listener: (settings: Settings) => void): this;
+        addListener(event: "timeout", listener: () => void): this;
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        emit(event: "close"): boolean;
+        emit(event: "error", err: Error): boolean;
+        emit(event: "frameError", frameType: number, errorCode: number, streamID: number): boolean;
+        emit(event: "goaway", errorCode: number, lastStreamID: number, opaqueData?: NonSharedBuffer): boolean;
+        emit(event: "localSettings", settings: Settings): boolean;
+        emit(event: "ping"): boolean;
+        emit(event: "remoteSettings", settings: Settings): boolean;
+        emit(event: "timeout"): boolean;
+        emit(event: string | symbol, ...args: any[]): boolean;
+        on(event: "close", listener: () => void): this;
+        on(event: "error", listener: (err: Error) => void): this;
+        on(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this;
+        on(
+            event: "goaway",
+            listener: (errorCode: number, lastStreamID: number, opaqueData?: NonSharedBuffer) => void,
+        ): this;
+        on(event: "localSettings", listener: (settings: Settings) => void): this;
+        on(event: "ping", listener: () => void): this;
+        on(event: "remoteSettings", listener: (settings: Settings) => void): this;
+        on(event: "timeout", listener: () => void): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+        once(event: "close", listener: () => void): this;
+        once(event: "error", listener: (err: Error) => void): this;
+        once(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this;
+        once(
+            event: "goaway",
+            listener: (errorCode: number, lastStreamID: number, opaqueData?: NonSharedBuffer) => void,
+        ): this;
+        once(event: "localSettings", listener: (settings: Settings) => void): this;
+        once(event: "ping", listener: () => void): this;
+        once(event: "remoteSettings", listener: (settings: Settings) => void): this;
+        once(event: "timeout", listener: () => void): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+        prependListener(event: "close", listener: () => void): this;
+        prependListener(event: "error", listener: (err: Error) => void): this;
+        prependListener(
+            event: "frameError",
+            listener: (frameType: number, errorCode: number, streamID: number) => void,
+        ): this;
+        prependListener(
+            event: "goaway",
+            listener: (errorCode: number, lastStreamID: number, opaqueData?: NonSharedBuffer) => void,
+        ): this;
+        prependListener(event: "localSettings", listener: (settings: Settings) => void): this;
+        prependListener(event: "ping", listener: () => void): this;
+        prependListener(event: "remoteSettings", listener: (settings: Settings) => void): this;
+        prependListener(event: "timeout", listener: () => void): this;
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "close", listener: () => void): this;
+        prependOnceListener(event: "error", listener: (err: Error) => void): this;
+        prependOnceListener(
+            event: "frameError",
+            listener: (frameType: number, errorCode: number, streamID: number) => void,
+        ): this;
+        prependOnceListener(
+            event: "goaway",
+            listener: (errorCode: number, lastStreamID: number, opaqueData?: NonSharedBuffer) => void,
+        ): this;
+        prependOnceListener(event: "localSettings", listener: (settings: Settings) => void): this;
+        prependOnceListener(event: "ping", listener: () => void): this;
+        prependOnceListener(event: "remoteSettings", listener: (settings: Settings) => void): this;
+        prependOnceListener(event: "timeout", listener: () => void): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+    }
+    export interface ClientHttp2Session extends Http2Session {
+        /**
+         * For HTTP/2 Client `Http2Session` instances only, the `http2session.request()` creates and returns an `Http2Stream` instance that can be used to send an
+         * HTTP/2 request to the connected server.
+         *
+         * When a `ClientHttp2Session` is first created, the socket may not yet be
+         * connected. if `clienthttp2session.request()` is called during this time, the
+         * actual request will be deferred until the socket is ready to go.
+         * If the `session` is closed before the actual request be executed, an `ERR_HTTP2_GOAWAY_SESSION` is thrown.
+         *
+         * This method is only available if `http2session.type` is equal to `http2.constants.NGHTTP2_SESSION_CLIENT`.
+         *
+         * ```js
+         * import http2 from 'node:http2';
+         * const clientSession = http2.connect('https://localhost:1234');
+         * const {
+         *   HTTP2_HEADER_PATH,
+         *   HTTP2_HEADER_STATUS,
+         * } = http2.constants;
+         *
+         * const req = clientSession.request({ [HTTP2_HEADER_PATH]: '/' });
+         * req.on('response', (headers) => {
+         *   console.log(headers[HTTP2_HEADER_STATUS]);
+         *   req.on('data', (chunk) => { // ..  });
+         *   req.on('end', () => { // ..  });
+         * });
+         * ```
+         *
+         * When the `options.waitForTrailers` option is set, the `'wantTrailers'` event
+         * is emitted immediately after queuing the last chunk of payload data to be sent.
+         * The `http2stream.sendTrailers()` method can then be called to send trailing
+         * headers to the peer.
+         *
+         * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically
+         * close when the final `DATA` frame is transmitted. User code must call either`http2stream.sendTrailers()` or `http2stream.close()` to close the`Http2Stream`.
+         *
+         * When `options.signal` is set with an `AbortSignal` and then `abort` on the
+         * corresponding `AbortController` is called, the request will emit an `'error'`event with an `AbortError` error.
+         *
+         * The `:method` and `:path` pseudo-headers are not specified within `headers`,
+         * they respectively default to:
+         *
+         * * `:method` \= `'GET'`
+         * * `:path` \= `/`
+         * @since v8.4.0
+         */
+        request(
+            headers?: OutgoingHttpHeaders | readonly string[],
+            options?: ClientSessionRequestOptions,
+        ): ClientHttp2Stream;
+        addListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this;
+        addListener(event: "origin", listener: (origins: string[]) => void): this;
+        addListener(
+            event: "connect",
+            listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void,
+        ): this;
+        addListener(
+            event: "stream",
+            listener: (
+                stream: ClientHttp2Stream,
+                headers: IncomingHttpHeaders & IncomingHttpStatusHeader,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        emit(event: "altsvc", alt: string, origin: string, stream: number): boolean;
+        emit(event: "origin", origins: readonly string[]): boolean;
+        emit(event: "connect", session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket): boolean;
+        emit(
+            event: "stream",
+            stream: ClientHttp2Stream,
+            headers: IncomingHttpHeaders & IncomingHttpStatusHeader,
+            flags: number,
+            rawHeaders: string[],
+        ): boolean;
+        emit(event: string | symbol, ...args: any[]): boolean;
+        on(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this;
+        on(event: "origin", listener: (origins: string[]) => void): this;
+        on(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
+        on(
+            event: "stream",
+            listener: (
+                stream: ClientHttp2Stream,
+                headers: IncomingHttpHeaders & IncomingHttpStatusHeader,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+        once(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this;
+        once(event: "origin", listener: (origins: string[]) => void): this;
+        once(
+            event: "connect",
+            listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void,
+        ): this;
+        once(
+            event: "stream",
+            listener: (
+                stream: ClientHttp2Stream,
+                headers: IncomingHttpHeaders & IncomingHttpStatusHeader,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+        prependListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this;
+        prependListener(event: "origin", listener: (origins: string[]) => void): this;
+        prependListener(
+            event: "connect",
+            listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void,
+        ): this;
+        prependListener(
+            event: "stream",
+            listener: (
+                stream: ClientHttp2Stream,
+                headers: IncomingHttpHeaders & IncomingHttpStatusHeader,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this;
+        prependOnceListener(event: "origin", listener: (origins: string[]) => void): this;
+        prependOnceListener(
+            event: "connect",
+            listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void,
+        ): this;
+        prependOnceListener(
+            event: "stream",
+            listener: (
+                stream: ClientHttp2Stream,
+                headers: IncomingHttpHeaders & IncomingHttpStatusHeader,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+    }
+    export interface AlternativeServiceOptions {
+        origin: number | string | url.URL;
+    }
+    export interface ServerHttp2Session<
+        Http1Request extends typeof IncomingMessage = typeof IncomingMessage,
+        Http1Response extends typeof ServerResponse> = typeof ServerResponse,
+        Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest,
+        Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse,
+    > extends Http2Session {
+        readonly server:
+            | Http2Server
+            | Http2SecureServer;
+        /**
+         * Submits an `ALTSVC` frame (as defined by [RFC 7838](https://tools.ietf.org/html/rfc7838)) to the connected client.
+         *
+         * ```js
+         * import http2 from 'node:http2';
+         *
+         * const server = http2.createServer();
+         * server.on('session', (session) => {
+         *   // Set altsvc for origin https://example.org:80
+         *   session.altsvc('h2=":8000"', 'https://example.org:80');
+         * });
+         *
+         * server.on('stream', (stream) => {
+         *   // Set altsvc for a specific stream
+         *   stream.session.altsvc('h2=":8000"', stream.id);
+         * });
+         * ```
+         *
+         * Sending an `ALTSVC` frame with a specific stream ID indicates that the alternate
+         * service is associated with the origin of the given `Http2Stream`.
+         *
+         * The `alt` and origin string _must_ contain only ASCII bytes and are
+         * strictly interpreted as a sequence of ASCII bytes. The special value `'clear'`may be passed to clear any previously set alternative service for a given
+         * domain.
+         *
+         * When a string is passed for the `originOrStream` argument, it will be parsed as
+         * a URL and the origin will be derived. For instance, the origin for the
+         * HTTP URL `'https://example.org/foo/bar'` is the ASCII string`'https://example.org'`. An error will be thrown if either the given string
+         * cannot be parsed as a URL or if a valid origin cannot be derived.
+         *
+         * A `URL` object, or any object with an `origin` property, may be passed as`originOrStream`, in which case the value of the `origin` property will be
+         * used. The value of the `origin` property _must_ be a properly serialized
+         * ASCII origin.
+         * @since v9.4.0
+         * @param alt A description of the alternative service configuration as defined by `RFC 7838`.
+         * @param originOrStream Either a URL string specifying the origin (or an `Object` with an `origin` property) or the numeric identifier of an active `Http2Stream` as given by the
+         * `http2stream.id` property.
+         */
+        altsvc(alt: string, originOrStream: number | string | url.URL | AlternativeServiceOptions): void;
+        /**
+         * Submits an `ORIGIN` frame (as defined by [RFC 8336](https://tools.ietf.org/html/rfc8336)) to the connected client
+         * to advertise the set of origins for which the server is capable of providing
+         * authoritative responses.
+         *
+         * ```js
+         * import http2 from 'node:http2';
+         * const options = getSecureOptionsSomehow();
+         * const server = http2.createSecureServer(options);
+         * server.on('stream', (stream) => {
+         *   stream.respond();
+         *   stream.end('ok');
+         * });
+         * server.on('session', (session) => {
+         *   session.origin('https://example.com', 'https://example.org');
+         * });
+         * ```
+         *
+         * When a string is passed as an `origin`, it will be parsed as a URL and the
+         * origin will be derived. For instance, the origin for the HTTP URL `'https://example.org/foo/bar'` is the ASCII string` 'https://example.org'`. An error will be thrown if either the given
+         * string
+         * cannot be parsed as a URL or if a valid origin cannot be derived.
+         *
+         * A `URL` object, or any object with an `origin` property, may be passed as
+         * an `origin`, in which case the value of the `origin` property will be
+         * used. The value of the `origin` property _must_ be a properly serialized
+         * ASCII origin.
+         *
+         * Alternatively, the `origins` option may be used when creating a new HTTP/2
+         * server using the `http2.createSecureServer()` method:
+         *
+         * ```js
+         * import http2 from 'node:http2';
+         * const options = getSecureOptionsSomehow();
+         * options.origins = ['https://example.com', 'https://example.org'];
+         * const server = http2.createSecureServer(options);
+         * server.on('stream', (stream) => {
+         *   stream.respond();
+         *   stream.end('ok');
+         * });
+         * ```
+         * @since v10.12.0
+         * @param origins One or more URL Strings passed as separate arguments.
+         */
+        origin(
+            ...origins: Array<
+                | string
+                | url.URL
+                | {
+                    origin: string;
+                }
+            >
+        ): void;
+        addListener(
+            event: "connect",
+            listener: (
+                session: ServerHttp2Session,
+                socket: net.Socket | tls.TLSSocket,
+            ) => void,
+        ): this;
+        addListener(
+            event: "stream",
+            listener: (
+                stream: ServerHttp2Stream,
+                headers: IncomingHttpHeaders,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        emit(
+            event: "connect",
+            session: ServerHttp2Session,
+            socket: net.Socket | tls.TLSSocket,
+        ): boolean;
+        emit(
+            event: "stream",
+            stream: ServerHttp2Stream,
+            headers: IncomingHttpHeaders,
+            flags: number,
+            rawHeaders: string[],
+        ): boolean;
+        emit(event: string | symbol, ...args: any[]): boolean;
+        on(
+            event: "connect",
+            listener: (
+                session: ServerHttp2Session,
+                socket: net.Socket | tls.TLSSocket,
+            ) => void,
+        ): this;
+        on(
+            event: "stream",
+            listener: (
+                stream: ServerHttp2Stream,
+                headers: IncomingHttpHeaders,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+        once(
+            event: "connect",
+            listener: (
+                session: ServerHttp2Session,
+                socket: net.Socket | tls.TLSSocket,
+            ) => void,
+        ): this;
+        once(
+            event: "stream",
+            listener: (
+                stream: ServerHttp2Stream,
+                headers: IncomingHttpHeaders,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+        prependListener(
+            event: "connect",
+            listener: (
+                session: ServerHttp2Session,
+                socket: net.Socket | tls.TLSSocket,
+            ) => void,
+        ): this;
+        prependListener(
+            event: "stream",
+            listener: (
+                stream: ServerHttp2Stream,
+                headers: IncomingHttpHeaders,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        prependOnceListener(
+            event: "connect",
+            listener: (
+                session: ServerHttp2Session,
+                socket: net.Socket | tls.TLSSocket,
+            ) => void,
+        ): this;
+        prependOnceListener(
+            event: "stream",
+            listener: (
+                stream: ServerHttp2Stream,
+                headers: IncomingHttpHeaders,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+    }
+    // Http2Server
+    export interface SessionOptions {
+        /**
+         * Sets the maximum dynamic table size for deflating header fields.
+         * @default 4Kib
+         */
+        maxDeflateDynamicTableSize?: number | undefined;
+        /**
+         * Sets the maximum number of settings entries per `SETTINGS` frame.
+         * The minimum value allowed is `1`.
+         * @default 32
+         */
+        maxSettings?: number | undefined;
+        /**
+         * Sets the maximum memory that the `Http2Session` is permitted to use.
+         * The value is expressed in terms of number of megabytes, e.g. `1` equal 1 megabyte.
+         * The minimum value allowed is `1`.
+         * This is a credit based limit, existing `Http2Stream`s may cause this limit to be exceeded,
+         * but new `Http2Stream` instances will be rejected while this limit is exceeded.
+         * The current number of `Http2Stream` sessions, the current memory use of the header compression tables,
+         * current data queued to be sent, and unacknowledged `PING` and `SETTINGS` frames are all counted towards the current limit.
+         * @default 10
+         */
+        maxSessionMemory?: number | undefined;
+        /**
+         * Sets the maximum number of header entries.
+         * This is similar to `server.maxHeadersCount` or `request.maxHeadersCount` in the `node:http` module.
+         * The minimum value is `1`.
+         * @default 128
+         */
+        maxHeaderListPairs?: number | undefined;
+        /**
+         * Sets the maximum number of outstanding, unacknowledged pings.
+         * @default 10
+         */
+        maxOutstandingPings?: number | undefined;
+        /**
+         * Sets the maximum allowed size for a serialized, compressed block of headers.
+         * Attempts to send headers that exceed this limit will result in
+         * a `'frameError'` event being emitted and the stream being closed and destroyed.
+         */
+        maxSendHeaderBlockLength?: number | undefined;
+        /**
+         * Strategy used for determining the amount of padding to use for `HEADERS` and `DATA` frames.
+         * @default http2.constants.PADDING_STRATEGY_NONE
+         */
+        paddingStrategy?: number | undefined;
+        /**
+         * Sets the maximum number of concurrent streams for the remote peer as if a `SETTINGS` frame had been received.
+         * Will be overridden if the remote peer sets its own value for `maxConcurrentStreams`.
+         * @default 100
+         */
+        peerMaxConcurrentStreams?: number | undefined;
+        /**
+         * The initial settings to send to the remote peer upon connection.
+         */
+        settings?: Settings | undefined;
+        /**
+         * The array of integer values determines the settings types,
+         * which are included in the `CustomSettings`-property of the received remoteSettings.
+         * Please see the `CustomSettings`-property of the `Http2Settings` object for more information, on the allowed setting types.
+         */
+        remoteCustomSettings?: number[] | undefined;
+        /**
+         * Specifies a timeout in milliseconds that
+         * a server should wait when an [`'unknownProtocol'`][] is emitted. If the
+         * socket has not been destroyed by that time the server will destroy it.
+         * @default 100000
+         */
+        unknownProtocolTimeout?: number | undefined;
+        /**
+         * If `true`, it turns on strict leading
+         * and trailing whitespace validation for HTTP/2 header field names and values
+         * as per [RFC-9113](https://www.rfc-editor.org/rfc/rfc9113.html#section-8.2.1).
+         * @since v24.2.0
+         * @default true
+         */
+        strictFieldWhitespaceValidation?: boolean | undefined;
+    }
+    export interface ClientSessionOptions extends SessionOptions {
+        /**
+         * Sets the maximum number of reserved push streams the client will accept at any given time.
+         * Once the current number of currently reserved push streams exceeds reaches this limit,
+         * new push streams sent by the server will be automatically rejected.
+         * The minimum allowed value is 0. The maximum allowed value is 232-1.
+         * A negative value sets this option to the maximum allowed value.
+         * @default 200
+         */
+        maxReservedRemoteStreams?: number | undefined;
+        /**
+         * An optional callback that receives the `URL` instance passed to `connect` and the `options` object,
+         * and returns any `Duplex` stream that is to be used as the connection for this session.
+         */
+        createConnection?: ((authority: url.URL, option: SessionOptions) => stream.Duplex) | undefined;
+        /**
+         * The protocol to connect with, if not set in the `authority`.
+         * Value may be either `'http:'` or `'https:'`.
+         * @default 'https:'
+         */
+        protocol?: "http:" | "https:" | undefined;
+    }
+    export interface ServerSessionOptions<
+        Http1Request extends typeof IncomingMessage = typeof IncomingMessage,
+        Http1Response extends typeof ServerResponse> = typeof ServerResponse,
+        Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest,
+        Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse,
+    > extends SessionOptions {
+        streamResetBurst?: number | undefined;
+        streamResetRate?: number | undefined;
+        Http1IncomingMessage?: Http1Request | undefined;
+        Http1ServerResponse?: Http1Response | undefined;
+        Http2ServerRequest?: Http2Request | undefined;
+        Http2ServerResponse?: Http2Response | undefined;
+    }
+    export interface SecureClientSessionOptions extends ClientSessionOptions, tls.ConnectionOptions {}
+    export interface SecureServerSessionOptions<
+        Http1Request extends typeof IncomingMessage = typeof IncomingMessage,
+        Http1Response extends typeof ServerResponse> = typeof ServerResponse,
+        Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest,
+        Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse,
+    > extends ServerSessionOptions, tls.TlsOptions {}
+    export interface ServerOptions<
+        Http1Request extends typeof IncomingMessage = typeof IncomingMessage,
+        Http1Response extends typeof ServerResponse> = typeof ServerResponse,
+        Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest,
+        Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse,
+    > extends ServerSessionOptions {}
+    export interface SecureServerOptions<
+        Http1Request extends typeof IncomingMessage = typeof IncomingMessage,
+        Http1Response extends typeof ServerResponse> = typeof ServerResponse,
+        Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest,
+        Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse,
+    > extends SecureServerSessionOptions {
+        allowHTTP1?: boolean | undefined;
+        origins?: string[] | undefined;
+    }
+    interface HTTP2ServerCommon {
+        setTimeout(msec?: number, callback?: () => void): this;
+        /**
+         * Throws ERR_HTTP2_INVALID_SETTING_VALUE for invalid settings values.
+         * Throws ERR_INVALID_ARG_TYPE for invalid settings argument.
+         */
+        updateSettings(settings: Settings): void;
+    }
+    export interface Http2Server<
+        Http1Request extends typeof IncomingMessage = typeof IncomingMessage,
+        Http1Response extends typeof ServerResponse> = typeof ServerResponse,
+        Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest,
+        Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse,
+    > extends net.Server, HTTP2ServerCommon {
+        addListener(
+            event: "checkContinue",
+            listener: (request: InstanceType, response: InstanceType) => void,
+        ): this;
+        addListener(
+            event: "request",
+            listener: (request: InstanceType, response: InstanceType) => void,
+        ): this;
+        addListener(
+            event: "session",
+            listener: (session: ServerHttp2Session) => void,
+        ): this;
+        addListener(event: "sessionError", listener: (err: Error) => void): this;
+        addListener(
+            event: "stream",
+            listener: (
+                stream: ServerHttp2Stream,
+                headers: IncomingHttpHeaders,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        addListener(event: "timeout", listener: () => void): this;
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        emit(
+            event: "checkContinue",
+            request: InstanceType,
+            response: InstanceType,
+        ): boolean;
+        emit(event: "request", request: InstanceType, response: InstanceType): boolean;
+        emit(
+            event: "session",
+            session: ServerHttp2Session,
+        ): boolean;
+        emit(event: "sessionError", err: Error): boolean;
+        emit(
+            event: "stream",
+            stream: ServerHttp2Stream,
+            headers: IncomingHttpHeaders,
+            flags: number,
+            rawHeaders: string[],
+        ): boolean;
+        emit(event: "timeout"): boolean;
+        emit(event: string | symbol, ...args: any[]): boolean;
+        on(
+            event: "checkContinue",
+            listener: (request: InstanceType, response: InstanceType) => void,
+        ): this;
+        on(
+            event: "request",
+            listener: (request: InstanceType, response: InstanceType) => void,
+        ): this;
+        on(
+            event: "session",
+            listener: (session: ServerHttp2Session) => void,
+        ): this;
+        on(event: "sessionError", listener: (err: Error) => void): this;
+        on(
+            event: "stream",
+            listener: (
+                stream: ServerHttp2Stream,
+                headers: IncomingHttpHeaders,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        on(event: "timeout", listener: () => void): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+        once(
+            event: "checkContinue",
+            listener: (request: InstanceType, response: InstanceType) => void,
+        ): this;
+        once(
+            event: "request",
+            listener: (request: InstanceType, response: InstanceType) => void,
+        ): this;
+        once(
+            event: "session",
+            listener: (session: ServerHttp2Session) => void,
+        ): this;
+        once(event: "sessionError", listener: (err: Error) => void): this;
+        once(
+            event: "stream",
+            listener: (
+                stream: ServerHttp2Stream,
+                headers: IncomingHttpHeaders,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        once(event: "timeout", listener: () => void): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+        prependListener(
+            event: "checkContinue",
+            listener: (request: InstanceType, response: InstanceType) => void,
+        ): this;
+        prependListener(
+            event: "request",
+            listener: (request: InstanceType, response: InstanceType) => void,
+        ): this;
+        prependListener(
+            event: "session",
+            listener: (session: ServerHttp2Session) => void,
+        ): this;
+        prependListener(event: "sessionError", listener: (err: Error) => void): this;
+        prependListener(
+            event: "stream",
+            listener: (
+                stream: ServerHttp2Stream,
+                headers: IncomingHttpHeaders,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        prependListener(event: "timeout", listener: () => void): this;
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        prependOnceListener(
+            event: "checkContinue",
+            listener: (request: InstanceType, response: InstanceType) => void,
+        ): this;
+        prependOnceListener(
+            event: "request",
+            listener: (request: InstanceType, response: InstanceType) => void,
+        ): this;
+        prependOnceListener(
+            event: "session",
+            listener: (session: ServerHttp2Session) => void,
+        ): this;
+        prependOnceListener(event: "sessionError", listener: (err: Error) => void): this;
+        prependOnceListener(
+            event: "stream",
+            listener: (
+                stream: ServerHttp2Stream,
+                headers: IncomingHttpHeaders,
+                flags: number,
+                rawHeaders: string[],
+            ) => void,
+        ): this;
+        prependOnceListener(event: "timeout", listener: () => void): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+    }
+    export interface Http2SecureServer<
+        Http1Request extends typeof IncomingMessage = typeof IncomingMessage,
+        Http1Response extends typeof ServerResponse> = typeof ServerResponse,
+        Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest,
+        Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse,
+    > extends tls.Server, HTTP2ServerCommon {
+        addListener(
+            event: "checkContinue",
+            listener: (request: InstanceType, response: InstanceType) => void,
+        ): this;
+        addListener(
+            event: "request",
+            listener: (request: InstanceType, response: InstanceType) => void,
+        ): this;
+        addListener(
+            event: "session",
+            listener: (session: ServerHttp2Session) => void,
+        ): this;
+        addListener(event: "sessionError", listener: (err: Error) => void): this;
+        addListener(
+            event: "stream",
+            listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void,
+        ): this;
+        addListener(event: "timeout", listener: () => void): this;
+        addListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this;
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        emit(
+            event: "checkContinue",
+            request: InstanceType,
+            response: InstanceType,
+        ): boolean;
+        emit(event: "request", request: InstanceType, response: InstanceType): boolean;
+        emit(
+            event: "session",
+            session: ServerHttp2Session,
+        ): boolean;
+        emit(event: "sessionError", err: Error): boolean;
+        emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean;
+        emit(event: "timeout"): boolean;
+        emit(event: "unknownProtocol", socket: tls.TLSSocket): boolean;
+        emit(event: string | symbol, ...args: any[]): boolean;
+        on(
+            event: "checkContinue",
+            listener: (request: InstanceType, response: InstanceType) => void,
+        ): this;
+        on(
+            event: "request",
+            listener: (request: InstanceType, response: InstanceType) => void,
+        ): this;
+        on(
+            event: "session",
+            listener: (session: ServerHttp2Session) => void,
+        ): this;
+        on(event: "sessionError", listener: (err: Error) => void): this;
+        on(
+            event: "stream",
+            listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void,
+        ): this;
+        on(event: "timeout", listener: () => void): this;
+        on(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+        once(
+            event: "checkContinue",
+            listener: (request: InstanceType, response: InstanceType) => void,
+        ): this;
+        once(
+            event: "request",
+            listener: (request: InstanceType, response: InstanceType) => void,
+        ): this;
+        once(
+            event: "session",
+            listener: (session: ServerHttp2Session) => void,
+        ): this;
+        once(event: "sessionError", listener: (err: Error) => void): this;
+        once(
+            event: "stream",
+            listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void,
+        ): this;
+        once(event: "timeout", listener: () => void): this;
+        once(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+        prependListener(
+            event: "checkContinue",
+            listener: (request: InstanceType, response: InstanceType) => void,
+        ): this;
+        prependListener(
+            event: "request",
+            listener: (request: InstanceType, response: InstanceType) => void,
+        ): this;
+        prependListener(
+            event: "session",
+            listener: (session: ServerHttp2Session) => void,
+        ): this;
+        prependListener(event: "sessionError", listener: (err: Error) => void): this;
+        prependListener(
+            event: "stream",
+            listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void,
+        ): this;
+        prependListener(event: "timeout", listener: () => void): this;
+        prependListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this;
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        prependOnceListener(
+            event: "checkContinue",
+            listener: (request: InstanceType, response: InstanceType) => void,
+        ): this;
+        prependOnceListener(
+            event: "request",
+            listener: (request: InstanceType, response: InstanceType) => void,
+        ): this;
+        prependOnceListener(
+            event: "session",
+            listener: (session: ServerHttp2Session) => void,
+        ): this;
+        prependOnceListener(event: "sessionError", listener: (err: Error) => void): this;
+        prependOnceListener(
+            event: "stream",
+            listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void,
+        ): this;
+        prependOnceListener(event: "timeout", listener: () => void): this;
+        prependOnceListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+    }
+    /**
+     * A `Http2ServerRequest` object is created by {@link Server} or {@link SecureServer} and passed as the first argument to the `'request'` event. It may be used to access a request status,
+     * headers, and
+     * data.
+     * @since v8.4.0
+     */
+    export class Http2ServerRequest extends stream.Readable {
+        constructor(
+            stream: ServerHttp2Stream,
+            headers: IncomingHttpHeaders,
+            options: stream.ReadableOptions,
+            rawHeaders: readonly string[],
+        );
+        /**
+         * The `request.aborted` property will be `true` if the request has
+         * been aborted.
+         * @since v10.1.0
+         */
+        readonly aborted: boolean;
+        /**
+         * The request authority pseudo header field. Because HTTP/2 allows requests
+         * to set either `:authority` or `host`, this value is derived from `req.headers[':authority']` if present. Otherwise, it is derived from `req.headers['host']`.
+         * @since v8.4.0
+         */
+        readonly authority: string;
+        /**
+         * See `request.socket`.
+         * @since v8.4.0
+         * @deprecated Since v13.0.0 - Use `socket`.
+         */
+        readonly connection: net.Socket | tls.TLSSocket;
+        /**
+         * The `request.complete` property will be `true` if the request has
+         * been completed, aborted, or destroyed.
+         * @since v12.10.0
+         */
+        readonly complete: boolean;
+        /**
+         * The request/response headers object.
+         *
+         * Key-value pairs of header names and values. Header names are lower-cased.
+         *
+         * ```js
+         * // Prints something like:
+         * //
+         * // { 'user-agent': 'curl/7.22.0',
+         * //   host: '127.0.0.1:8000',
+         * //   accept: '*' }
+         * console.log(request.headers);
+         * ```
+         *
+         * See `HTTP/2 Headers Object`.
+         *
+         * In HTTP/2, the request path, host name, protocol, and method are represented as
+         * special headers prefixed with the `:` character (e.g. `':path'`). These special
+         * headers will be included in the `request.headers` object. Care must be taken not
+         * to inadvertently modify these special headers or errors may occur. For instance,
+         * removing all headers from the request will cause errors to occur:
+         *
+         * ```js
+         * removeAllHeaders(request.headers);
+         * assert(request.url);   // Fails because the :path header has been removed
+         * ```
+         * @since v8.4.0
+         */
+        readonly headers: IncomingHttpHeaders;
+        /**
+         * In case of server request, the HTTP version sent by the client. In the case of
+         * client response, the HTTP version of the connected-to server. Returns `'2.0'`.
+         *
+         * Also `message.httpVersionMajor` is the first integer and `message.httpVersionMinor` is the second.
+         * @since v8.4.0
+         */
+        readonly httpVersion: string;
+        readonly httpVersionMinor: number;
+        readonly httpVersionMajor: number;
+        /**
+         * The request method as a string. Read-only. Examples: `'GET'`, `'DELETE'`.
+         * @since v8.4.0
+         */
+        readonly method: string;
+        /**
+         * The raw request/response headers list exactly as they were received.
+         *
+         * The keys and values are in the same list. It is _not_ a
+         * list of tuples. So, the even-numbered offsets are key values, and the
+         * odd-numbered offsets are the associated values.
+         *
+         * Header names are not lowercased, and duplicates are not merged.
+         *
+         * ```js
+         * // Prints something like:
+         * //
+         * // [ 'user-agent',
+         * //   'this is invalid because there can be only one',
+         * //   'User-Agent',
+         * //   'curl/7.22.0',
+         * //   'Host',
+         * //   '127.0.0.1:8000',
+         * //   'ACCEPT',
+         * //   '*' ]
+         * console.log(request.rawHeaders);
+         * ```
+         * @since v8.4.0
+         */
+        readonly rawHeaders: string[];
+        /**
+         * The raw request/response trailer keys and values exactly as they were
+         * received. Only populated at the `'end'` event.
+         * @since v8.4.0
+         */
+        readonly rawTrailers: string[];
+        /**
+         * The request scheme pseudo header field indicating the scheme
+         * portion of the target URL.
+         * @since v8.4.0
+         */
+        readonly scheme: string;
+        /**
+         * Returns a `Proxy` object that acts as a `net.Socket` (or `tls.TLSSocket`) but
+         * applies getters, setters, and methods based on HTTP/2 logic.
+         *
+         * `destroyed`, `readable`, and `writable` properties will be retrieved from and
+         * set on `request.stream`.
+         *
+         * `destroy`, `emit`, `end`, `on` and `once` methods will be called on `request.stream`.
+         *
+         * `setTimeout` method will be called on `request.stream.session`.
+         *
+         * `pause`, `read`, `resume`, and `write` will throw an error with code `ERR_HTTP2_NO_SOCKET_MANIPULATION`. See `Http2Session and Sockets` for
+         * more information.
+         *
+         * All other interactions will be routed directly to the socket. With TLS support,
+         * use `request.socket.getPeerCertificate()` to obtain the client's
+         * authentication details.
+         * @since v8.4.0
+         */
+        readonly socket: net.Socket | tls.TLSSocket;
+        /**
+         * The `Http2Stream` object backing the request.
+         * @since v8.4.0
+         */
+        readonly stream: ServerHttp2Stream;
+        /**
+         * The request/response trailers object. Only populated at the `'end'` event.
+         * @since v8.4.0
+         */
+        readonly trailers: IncomingHttpHeaders;
+        /**
+         * Request URL string. This contains only the URL that is present in the actual
+         * HTTP request. If the request is:
+         *
+         * ```http
+         * GET /status?name=ryan HTTP/1.1
+         * Accept: text/plain
+         * ```
+         *
+         * Then `request.url` will be:
+         *
+         * ```js
+         * '/status?name=ryan'
+         * ```
+         *
+         * To parse the url into its parts, `new URL()` can be used:
+         *
+         * ```console
+         * $ node
+         * > new URL('/status?name=ryan', 'http://example.com')
+         * URL {
+         *   href: 'http://example.com/status?name=ryan',
+         *   origin: 'http://example.com',
+         *   protocol: 'http:',
+         *   username: '',
+         *   password: '',
+         *   host: 'example.com',
+         *   hostname: 'example.com',
+         *   port: '',
+         *   pathname: '/status',
+         *   search: '?name=ryan',
+         *   searchParams: URLSearchParams { 'name' => 'ryan' },
+         *   hash: ''
+         * }
+         * ```
+         * @since v8.4.0
+         */
+        url: string;
+        /**
+         * Sets the `Http2Stream`'s timeout value to `msecs`. If a callback is
+         * provided, then it is added as a listener on the `'timeout'` event on
+         * the response object.
+         *
+         * If no `'timeout'` listener is added to the request, the response, or
+         * the server, then `Http2Stream`s are destroyed when they time out. If a
+         * handler is assigned to the request, the response, or the server's `'timeout'`events, timed out sockets must be handled explicitly.
+         * @since v8.4.0
+         */
+        setTimeout(msecs: number, callback?: () => void): void;
+        read(size?: number): NonSharedBuffer | string | null;
+        addListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this;
+        addListener(event: "close", listener: () => void): this;
+        addListener(event: "data", listener: (chunk: NonSharedBuffer | string) => void): this;
+        addListener(event: "end", listener: () => void): this;
+        addListener(event: "readable", listener: () => void): this;
+        addListener(event: "error", listener: (err: Error) => void): this;
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        emit(event: "aborted", hadError: boolean, code: number): boolean;
+        emit(event: "close"): boolean;
+        emit(event: "data", chunk: NonSharedBuffer | string): boolean;
+        emit(event: "end"): boolean;
+        emit(event: "readable"): boolean;
+        emit(event: "error", err: Error): boolean;
+        emit(event: string | symbol, ...args: any[]): boolean;
+        on(event: "aborted", listener: (hadError: boolean, code: number) => void): this;
+        on(event: "close", listener: () => void): this;
+        on(event: "data", listener: (chunk: NonSharedBuffer | string) => void): this;
+        on(event: "end", listener: () => void): this;
+        on(event: "readable", listener: () => void): this;
+        on(event: "error", listener: (err: Error) => void): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+        once(event: "aborted", listener: (hadError: boolean, code: number) => void): this;
+        once(event: "close", listener: () => void): this;
+        once(event: "data", listener: (chunk: NonSharedBuffer | string) => void): this;
+        once(event: "end", listener: () => void): this;
+        once(event: "readable", listener: () => void): this;
+        once(event: "error", listener: (err: Error) => void): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+        prependListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this;
+        prependListener(event: "close", listener: () => void): this;
+        prependListener(event: "data", listener: (chunk: NonSharedBuffer | string) => void): this;
+        prependListener(event: "end", listener: () => void): this;
+        prependListener(event: "readable", listener: () => void): this;
+        prependListener(event: "error", listener: (err: Error) => void): this;
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this;
+        prependOnceListener(event: "close", listener: () => void): this;
+        prependOnceListener(event: "data", listener: (chunk: NonSharedBuffer | string) => void): this;
+        prependOnceListener(event: "end", listener: () => void): this;
+        prependOnceListener(event: "readable", listener: () => void): this;
+        prependOnceListener(event: "error", listener: (err: Error) => void): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+    }
+    /**
+     * This object is created internally by an HTTP server, not by the user. It is
+     * passed as the second parameter to the `'request'` event.
+     * @since v8.4.0
+     */
+    export class Http2ServerResponse extends stream.Writable {
+        constructor(stream: ServerHttp2Stream);
+        /**
+         * See `response.socket`.
+         * @since v8.4.0
+         * @deprecated Since v13.0.0 - Use `socket`.
+         */
+        readonly connection: net.Socket | tls.TLSSocket;
+        /**
+         * Append a single header value to the header object.
+         *
+         * If the value is an array, this is equivalent to calling this method multiple times.
+         *
+         * If there were no previous values for the header, this is equivalent to calling {@link setHeader}.
+         *
+         * Attempting to set a header field name or value that contains invalid characters will result in a
+         * [TypeError](https://nodejs.org/docs/latest-v24.x/api/errors.html#class-typeerror) being thrown.
+         *
+         * ```js
+         * // Returns headers including "set-cookie: a" and "set-cookie: b"
+         * const server = http2.createServer((req, res) => {
+         *   res.setHeader('set-cookie', 'a');
+         *   res.appendHeader('set-cookie', 'b');
+         *   res.writeHead(200);
+         *   res.end('ok');
+         * });
+         * ```
+         * @since v20.12.0
+         */
+        appendHeader(name: string, value: string | string[]): void;
+        /**
+         * Boolean value that indicates whether the response has completed. Starts
+         * as `false`. After `response.end()` executes, the value will be `true`.
+         * @since v8.4.0
+         * @deprecated Since v13.4.0,v12.16.0 - Use `writableEnded`.
+         */
+        readonly finished: boolean;
+        /**
+         * True if headers were sent, false otherwise (read-only).
+         * @since v8.4.0
+         */
+        readonly headersSent: boolean;
+        /**
+         * A reference to the original HTTP2 `request` object.
+         * @since v15.7.0
+         */
+        readonly req: Request;
+        /**
+         * Returns a `Proxy` object that acts as a `net.Socket` (or `tls.TLSSocket`) but
+         * applies getters, setters, and methods based on HTTP/2 logic.
+         *
+         * `destroyed`, `readable`, and `writable` properties will be retrieved from and
+         * set on `response.stream`.
+         *
+         * `destroy`, `emit`, `end`, `on` and `once` methods will be called on `response.stream`.
+         *
+         * `setTimeout` method will be called on `response.stream.session`.
+         *
+         * `pause`, `read`, `resume`, and `write` will throw an error with code `ERR_HTTP2_NO_SOCKET_MANIPULATION`. See `Http2Session and Sockets` for
+         * more information.
+         *
+         * All other interactions will be routed directly to the socket.
+         *
+         * ```js
+         * import http2 from 'node:http2';
+         * const server = http2.createServer((req, res) => {
+         *   const ip = req.socket.remoteAddress;
+         *   const port = req.socket.remotePort;
+         *   res.end(`Your IP address is ${ip} and your source port is ${port}.`);
+         * }).listen(3000);
+         * ```
+         * @since v8.4.0
+         */
+        readonly socket: net.Socket | tls.TLSSocket;
+        /**
+         * The `Http2Stream` object backing the response.
+         * @since v8.4.0
+         */
+        readonly stream: ServerHttp2Stream;
+        /**
+         * When true, the Date header will be automatically generated and sent in
+         * the response if it is not already present in the headers. Defaults to true.
+         *
+         * This should only be disabled for testing; HTTP requires the Date header
+         * in responses.
+         * @since v8.4.0
+         */
+        sendDate: boolean;
+        /**
+         * When using implicit headers (not calling `response.writeHead()` explicitly),
+         * this property controls the status code that will be sent to the client when
+         * the headers get flushed.
+         *
+         * ```js
+         * response.statusCode = 404;
+         * ```
+         *
+         * After response header was sent to the client, this property indicates the
+         * status code which was sent out.
+         * @since v8.4.0
+         */
+        statusCode: number;
+        /**
+         * Status message is not supported by HTTP/2 (RFC 7540 8.1.2.4). It returns
+         * an empty string.
+         * @since v8.4.0
+         */
+        statusMessage: "";
+        /**
+         * This method adds HTTP trailing headers (a header but at the end of the
+         * message) to the response.
+         *
+         * Attempting to set a header field name or value that contains invalid characters
+         * will result in a `TypeError` being thrown.
+         * @since v8.4.0
+         */
+        addTrailers(trailers: OutgoingHttpHeaders): void;
+        /**
+         * This method signals to the server that all of the response headers and body
+         * have been sent; that server should consider this message complete.
+         * The method, `response.end()`, MUST be called on each response.
+         *
+         * If `data` is specified, it is equivalent to calling `response.write(data, encoding)` followed by `response.end(callback)`.
+         *
+         * If `callback` is specified, it will be called when the response stream
+         * is finished.
+         * @since v8.4.0
+         */
+        end(callback?: () => void): this;
+        end(data: string | Uint8Array, callback?: () => void): this;
+        end(data: string | Uint8Array, encoding: BufferEncoding, callback?: () => void): this;
+        /**
+         * Reads out a header that has already been queued but not sent to the client.
+         * The name is case-insensitive.
+         *
+         * ```js
+         * const contentType = response.getHeader('content-type');
+         * ```
+         * @since v8.4.0
+         */
+        getHeader(name: string): string;
+        /**
+         * Returns an array containing the unique names of the current outgoing headers.
+         * All header names are lowercase.
+         *
+         * ```js
+         * response.setHeader('Foo', 'bar');
+         * response.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']);
+         *
+         * const headerNames = response.getHeaderNames();
+         * // headerNames === ['foo', 'set-cookie']
+         * ```
+         * @since v8.4.0
+         */
+        getHeaderNames(): string[];
+        /**
+         * Returns a shallow copy of the current outgoing headers. Since a shallow copy
+         * is used, array values may be mutated without additional calls to various
+         * header-related http module methods. The keys of the returned object are the
+         * header names and the values are the respective header values. All header names
+         * are lowercase.
+         *
+         * The object returned by the `response.getHeaders()` method _does not_ prototypically inherit from the JavaScript `Object`. This means that typical `Object` methods such as `obj.toString()`,
+         * `obj.hasOwnProperty()`, and others
+         * are not defined and _will not work_.
+         *
+         * ```js
+         * response.setHeader('Foo', 'bar');
+         * response.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']);
+         *
+         * const headers = response.getHeaders();
+         * // headers === { foo: 'bar', 'set-cookie': ['foo=bar', 'bar=baz'] }
+         * ```
+         * @since v8.4.0
+         */
+        getHeaders(): OutgoingHttpHeaders;
+        /**
+         * Returns `true` if the header identified by `name` is currently set in the
+         * outgoing headers. The header name matching is case-insensitive.
+         *
+         * ```js
+         * const hasContentType = response.hasHeader('content-type');
+         * ```
+         * @since v8.4.0
+         */
+        hasHeader(name: string): boolean;
+        /**
+         * Removes a header that has been queued for implicit sending.
+         *
+         * ```js
+         * response.removeHeader('Content-Encoding');
+         * ```
+         * @since v8.4.0
+         */
+        removeHeader(name: string): void;
+        /**
+         * Sets a single header value for implicit headers. If this header already exists
+         * in the to-be-sent headers, its value will be replaced. Use an array of strings
+         * here to send multiple headers with the same name.
+         *
+         * ```js
+         * response.setHeader('Content-Type', 'text/html; charset=utf-8');
+         * ```
+         *
+         * or
+         *
+         * ```js
+         * response.setHeader('Set-Cookie', ['type=ninja', 'language=javascript']);
+         * ```
+         *
+         * Attempting to set a header field name or value that contains invalid characters
+         * will result in a `TypeError` being thrown.
+         *
+         * When headers have been set with `response.setHeader()`, they will be merged
+         * with any headers passed to `response.writeHead()`, with the headers passed
+         * to `response.writeHead()` given precedence.
+         *
+         * ```js
+         * // Returns content-type = text/plain
+         * const server = http2.createServer((req, res) => {
+         *   res.setHeader('Content-Type', 'text/html; charset=utf-8');
+         *   res.setHeader('X-Foo', 'bar');
+         *   res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
+         *   res.end('ok');
+         * });
+         * ```
+         * @since v8.4.0
+         */
+        setHeader(name: string, value: number | string | readonly string[]): void;
+        /**
+         * Sets the `Http2Stream`'s timeout value to `msecs`. If a callback is
+         * provided, then it is added as a listener on the `'timeout'` event on
+         * the response object.
+         *
+         * If no `'timeout'` listener is added to the request, the response, or
+         * the server, then `Http2Stream` s are destroyed when they time out. If a
+         * handler is assigned to the request, the response, or the server's `'timeout'` events, timed out sockets must be handled explicitly.
+         * @since v8.4.0
+         */
+        setTimeout(msecs: number, callback?: () => void): void;
+        /**
+         * If this method is called and `response.writeHead()` has not been called,
+         * it will switch to implicit header mode and flush the implicit headers.
+         *
+         * This sends a chunk of the response body. This method may
+         * be called multiple times to provide successive parts of the body.
+         *
+         * In the `node:http` module, the response body is omitted when the
+         * request is a HEAD request. Similarly, the `204` and `304` responses _must not_ include a message body.
+         *
+         * `chunk` can be a string or a buffer. If `chunk` is a string,
+         * the second parameter specifies how to encode it into a byte stream.
+         * By default the `encoding` is `'utf8'`. `callback` will be called when this chunk
+         * of data is flushed.
+         *
+         * This is the raw HTTP body and has nothing to do with higher-level multi-part
+         * body encodings that may be used.
+         *
+         * The first time `response.write()` is called, it will send the buffered
+         * header information and the first chunk of the body to the client. The second
+         * time `response.write()` is called, Node.js assumes data will be streamed,
+         * and sends the new data separately. That is, the response is buffered up to the
+         * first chunk of the body.
+         *
+         * Returns `true` if the entire data was flushed successfully to the kernel
+         * buffer. Returns `false` if all or part of the data was queued in user memory.`'drain'` will be emitted when the buffer is free again.
+         * @since v8.4.0
+         */
+        write(chunk: string | Uint8Array, callback?: (err: Error) => void): boolean;
+        write(chunk: string | Uint8Array, encoding: BufferEncoding, callback?: (err: Error) => void): boolean;
+        /**
+         * Sends a status `100 Continue` to the client, indicating that the request body
+         * should be sent. See the `'checkContinue'` event on `Http2Server` and `Http2SecureServer`.
+         * @since v8.4.0
+         */
+        writeContinue(): void;
+        /**
+         * Sends a status `103 Early Hints` to the client with a Link header,
+         * indicating that the user agent can preload/preconnect the linked resources.
+         * The `hints` is an object containing the values of headers to be sent with
+         * early hints message.
+         *
+         * **Example**
+         *
+         * ```js
+         * const earlyHintsLink = '; rel=preload; as=style';
+         * response.writeEarlyHints({
+         *   'link': earlyHintsLink,
+         * });
+         *
+         * const earlyHintsLinks = [
+         *   '; rel=preload; as=style',
+         *   '; rel=preload; as=script',
+         * ];
+         * response.writeEarlyHints({
+         *   'link': earlyHintsLinks,
+         * });
+         * ```
+         * @since v18.11.0
+         */
+        writeEarlyHints(hints: Record): void;
+        /**
+         * Sends a response header to the request. The status code is a 3-digit HTTP
+         * status code, like `404`. The last argument, `headers`, are the response headers.
+         *
+         * Returns a reference to the `Http2ServerResponse`, so that calls can be chained.
+         *
+         * For compatibility with `HTTP/1`, a human-readable `statusMessage` may be
+         * passed as the second argument. However, because the `statusMessage` has no
+         * meaning within HTTP/2, the argument will have no effect and a process warning
+         * will be emitted.
+         *
+         * ```js
+         * const body = 'hello world';
+         * response.writeHead(200, {
+         *   'Content-Length': Buffer.byteLength(body),
+         *   'Content-Type': 'text/plain; charset=utf-8',
+         * });
+         * ```
+         *
+         * `Content-Length` is given in bytes not characters. The`Buffer.byteLength()` API may be used to determine the number of bytes in a
+         * given encoding. On outbound messages, Node.js does not check if Content-Length
+         * and the length of the body being transmitted are equal or not. However, when
+         * receiving messages, Node.js will automatically reject messages when the `Content-Length` does not match the actual payload size.
+         *
+         * This method may be called at most one time on a message before `response.end()` is called.
+         *
+         * If `response.write()` or `response.end()` are called before calling
+         * this, the implicit/mutable headers will be calculated and call this function.
+         *
+         * When headers have been set with `response.setHeader()`, they will be merged
+         * with any headers passed to `response.writeHead()`, with the headers passed
+         * to `response.writeHead()` given precedence.
+         *
+         * ```js
+         * // Returns content-type = text/plain
+         * const server = http2.createServer((req, res) => {
+         *   res.setHeader('Content-Type', 'text/html; charset=utf-8');
+         *   res.setHeader('X-Foo', 'bar');
+         *   res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
+         *   res.end('ok');
+         * });
+         * ```
+         *
+         * Attempting to set a header field name or value that contains invalid characters
+         * will result in a `TypeError` being thrown.
+         * @since v8.4.0
+         */
+        writeHead(statusCode: number, headers?: OutgoingHttpHeaders | readonly string[]): this;
+        writeHead(statusCode: number, statusMessage: string, headers?: OutgoingHttpHeaders | readonly string[]): this;
+        /**
+         * Call `http2stream.pushStream()` with the given headers, and wrap the
+         * given `Http2Stream` on a newly created `Http2ServerResponse` as the callback
+         * parameter if successful. When `Http2ServerRequest` is closed, the callback is
+         * called with an error `ERR_HTTP2_INVALID_STREAM`.
+         * @since v8.4.0
+         * @param headers An object describing the headers
+         * @param callback Called once `http2stream.pushStream()` is finished, or either when the attempt to create the pushed `Http2Stream` has failed or has been rejected, or the state of
+         * `Http2ServerRequest` is closed prior to calling the `http2stream.pushStream()` method
+         */
+        createPushResponse(
+            headers: OutgoingHttpHeaders,
+            callback: (err: Error | null, res: Http2ServerResponse) => void,
+        ): void;
+        addListener(event: "close", listener: () => void): this;
+        addListener(event: "drain", listener: () => void): this;
+        addListener(event: "error", listener: (error: Error) => void): this;
+        addListener(event: "finish", listener: () => void): this;
+        addListener(event: "pipe", listener: (src: stream.Readable) => void): this;
+        addListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        emit(event: "close"): boolean;
+        emit(event: "drain"): boolean;
+        emit(event: "error", error: Error): boolean;
+        emit(event: "finish"): boolean;
+        emit(event: "pipe", src: stream.Readable): boolean;
+        emit(event: "unpipe", src: stream.Readable): boolean;
+        emit(event: string | symbol, ...args: any[]): boolean;
+        on(event: "close", listener: () => void): this;
+        on(event: "drain", listener: () => void): this;
+        on(event: "error", listener: (error: Error) => void): this;
+        on(event: "finish", listener: () => void): this;
+        on(event: "pipe", listener: (src: stream.Readable) => void): this;
+        on(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        on(event: string | symbol, listener: (...args: any[]) => void): this;
+        once(event: "close", listener: () => void): this;
+        once(event: "drain", listener: () => void): this;
+        once(event: "error", listener: (error: Error) => void): this;
+        once(event: "finish", listener: () => void): this;
+        once(event: "pipe", listener: (src: stream.Readable) => void): this;
+        once(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        once(event: string | symbol, listener: (...args: any[]) => void): this;
+        prependListener(event: "close", listener: () => void): this;
+        prependListener(event: "drain", listener: () => void): this;
+        prependListener(event: "error", listener: (error: Error) => void): this;
+        prependListener(event: "finish", listener: () => void): this;
+        prependListener(event: "pipe", listener: (src: stream.Readable) => void): this;
+        prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: "close", listener: () => void): this;
+        prependOnceListener(event: "drain", listener: () => void): this;
+        prependOnceListener(event: "error", listener: (error: Error) => void): this;
+        prependOnceListener(event: "finish", listener: () => void): this;
+        prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this;
+        prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
+        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+    }
+    export namespace constants {
+        const NGHTTP2_SESSION_SERVER: number;
+        const NGHTTP2_SESSION_CLIENT: number;
+        const NGHTTP2_STREAM_STATE_IDLE: number;
+        const NGHTTP2_STREAM_STATE_OPEN: number;
+        const NGHTTP2_STREAM_STATE_RESERVED_LOCAL: number;
+        const NGHTTP2_STREAM_STATE_RESERVED_REMOTE: number;
+        const NGHTTP2_STREAM_STATE_HALF_CLOSED_LOCAL: number;
+        const NGHTTP2_STREAM_STATE_HALF_CLOSED_REMOTE: number;
+        const NGHTTP2_STREAM_STATE_CLOSED: number;
+        const NGHTTP2_NO_ERROR: number;
+        const NGHTTP2_PROTOCOL_ERROR: number;
+        const NGHTTP2_INTERNAL_ERROR: number;
+        const NGHTTP2_FLOW_CONTROL_ERROR: number;
+        const NGHTTP2_SETTINGS_TIMEOUT: number;
+        const NGHTTP2_STREAM_CLOSED: number;
+        const NGHTTP2_FRAME_SIZE_ERROR: number;
+        const NGHTTP2_REFUSED_STREAM: number;
+        const NGHTTP2_CANCEL: number;
+        const NGHTTP2_COMPRESSION_ERROR: number;
+        const NGHTTP2_CONNECT_ERROR: number;
+        const NGHTTP2_ENHANCE_YOUR_CALM: number;
+        const NGHTTP2_INADEQUATE_SECURITY: number;
+        const NGHTTP2_HTTP_1_1_REQUIRED: number;
+        const NGHTTP2_ERR_FRAME_SIZE_ERROR: number;
+        const NGHTTP2_FLAG_NONE: number;
+        const NGHTTP2_FLAG_END_STREAM: number;
+        const NGHTTP2_FLAG_END_HEADERS: number;
+        const NGHTTP2_FLAG_ACK: number;
+        const NGHTTP2_FLAG_PADDED: number;
+        const NGHTTP2_FLAG_PRIORITY: number;
+        const DEFAULT_SETTINGS_HEADER_TABLE_SIZE: number;
+        const DEFAULT_SETTINGS_ENABLE_PUSH: number;
+        const DEFAULT_SETTINGS_INITIAL_WINDOW_SIZE: number;
+        const DEFAULT_SETTINGS_MAX_FRAME_SIZE: number;
+        const MAX_MAX_FRAME_SIZE: number;
+        const MIN_MAX_FRAME_SIZE: number;
+        const MAX_INITIAL_WINDOW_SIZE: number;
+        const NGHTTP2_DEFAULT_WEIGHT: number;
+        const NGHTTP2_SETTINGS_HEADER_TABLE_SIZE: number;
+        const NGHTTP2_SETTINGS_ENABLE_PUSH: number;
+        const NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS: number;
+        const NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE: number;
+        const NGHTTP2_SETTINGS_MAX_FRAME_SIZE: number;
+        const NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE: number;
+        const PADDING_STRATEGY_NONE: number;
+        const PADDING_STRATEGY_MAX: number;
+        const PADDING_STRATEGY_CALLBACK: number;
+        const HTTP2_HEADER_STATUS: string;
+        const HTTP2_HEADER_METHOD: string;
+        const HTTP2_HEADER_AUTHORITY: string;
+        const HTTP2_HEADER_SCHEME: string;
+        const HTTP2_HEADER_PATH: string;
+        const HTTP2_HEADER_ACCEPT_CHARSET: string;
+        const HTTP2_HEADER_ACCEPT_ENCODING: string;
+        const HTTP2_HEADER_ACCEPT_LANGUAGE: string;
+        const HTTP2_HEADER_ACCEPT_RANGES: string;
+        const HTTP2_HEADER_ACCEPT: string;
+        const HTTP2_HEADER_ACCESS_CONTROL_ALLOW_CREDENTIALS: string;
+        const HTTP2_HEADER_ACCESS_CONTROL_ALLOW_HEADERS: string;
+        const HTTP2_HEADER_ACCESS_CONTROL_ALLOW_METHODS: string;
+        const HTTP2_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN: string;
+        const HTTP2_HEADER_ACCESS_CONTROL_EXPOSE_HEADERS: string;
+        const HTTP2_HEADER_ACCESS_CONTROL_REQUEST_HEADERS: string;
+        const HTTP2_HEADER_ACCESS_CONTROL_REQUEST_METHOD: string;
+        const HTTP2_HEADER_AGE: string;
+        const HTTP2_HEADER_ALLOW: string;
+        const HTTP2_HEADER_AUTHORIZATION: string;
+        const HTTP2_HEADER_CACHE_CONTROL: string;
+        const HTTP2_HEADER_CONNECTION: string;
+        const HTTP2_HEADER_CONTENT_DISPOSITION: string;
+        const HTTP2_HEADER_CONTENT_ENCODING: string;
+        const HTTP2_HEADER_CONTENT_LANGUAGE: string;
+        const HTTP2_HEADER_CONTENT_LENGTH: string;
+        const HTTP2_HEADER_CONTENT_LOCATION: string;
+        const HTTP2_HEADER_CONTENT_MD5: string;
+        const HTTP2_HEADER_CONTENT_RANGE: string;
+        const HTTP2_HEADER_CONTENT_TYPE: string;
+        const HTTP2_HEADER_COOKIE: string;
+        const HTTP2_HEADER_DATE: string;
+        const HTTP2_HEADER_ETAG: string;
+        const HTTP2_HEADER_EXPECT: string;
+        const HTTP2_HEADER_EXPIRES: string;
+        const HTTP2_HEADER_FROM: string;
+        const HTTP2_HEADER_HOST: string;
+        const HTTP2_HEADER_IF_MATCH: string;
+        const HTTP2_HEADER_IF_MODIFIED_SINCE: string;
+        const HTTP2_HEADER_IF_NONE_MATCH: string;
+        const HTTP2_HEADER_IF_RANGE: string;
+        const HTTP2_HEADER_IF_UNMODIFIED_SINCE: string;
+        const HTTP2_HEADER_LAST_MODIFIED: string;
+        const HTTP2_HEADER_LINK: string;
+        const HTTP2_HEADER_LOCATION: string;
+        const HTTP2_HEADER_MAX_FORWARDS: string;
+        const HTTP2_HEADER_PREFER: string;
+        const HTTP2_HEADER_PROXY_AUTHENTICATE: string;
+        const HTTP2_HEADER_PROXY_AUTHORIZATION: string;
+        const HTTP2_HEADER_RANGE: string;
+        const HTTP2_HEADER_REFERER: string;
+        const HTTP2_HEADER_REFRESH: string;
+        const HTTP2_HEADER_RETRY_AFTER: string;
+        const HTTP2_HEADER_SERVER: string;
+        const HTTP2_HEADER_SET_COOKIE: string;
+        const HTTP2_HEADER_STRICT_TRANSPORT_SECURITY: string;
+        const HTTP2_HEADER_TRANSFER_ENCODING: string;
+        const HTTP2_HEADER_TE: string;
+        const HTTP2_HEADER_UPGRADE: string;
+        const HTTP2_HEADER_USER_AGENT: string;
+        const HTTP2_HEADER_VARY: string;
+        const HTTP2_HEADER_VIA: string;
+        const HTTP2_HEADER_WWW_AUTHENTICATE: string;
+        const HTTP2_HEADER_HTTP2_SETTINGS: string;
+        const HTTP2_HEADER_KEEP_ALIVE: string;
+        const HTTP2_HEADER_PROXY_CONNECTION: string;
+        const HTTP2_METHOD_ACL: string;
+        const HTTP2_METHOD_BASELINE_CONTROL: string;
+        const HTTP2_METHOD_BIND: string;
+        const HTTP2_METHOD_CHECKIN: string;
+        const HTTP2_METHOD_CHECKOUT: string;
+        const HTTP2_METHOD_CONNECT: string;
+        const HTTP2_METHOD_COPY: string;
+        const HTTP2_METHOD_DELETE: string;
+        const HTTP2_METHOD_GET: string;
+        const HTTP2_METHOD_HEAD: string;
+        const HTTP2_METHOD_LABEL: string;
+        const HTTP2_METHOD_LINK: string;
+        const HTTP2_METHOD_LOCK: string;
+        const HTTP2_METHOD_MERGE: string;
+        const HTTP2_METHOD_MKACTIVITY: string;
+        const HTTP2_METHOD_MKCALENDAR: string;
+        const HTTP2_METHOD_MKCOL: string;
+        const HTTP2_METHOD_MKREDIRECTREF: string;
+        const HTTP2_METHOD_MKWORKSPACE: string;
+        const HTTP2_METHOD_MOVE: string;
+        const HTTP2_METHOD_OPTIONS: string;
+        const HTTP2_METHOD_ORDERPATCH: string;
+        const HTTP2_METHOD_PATCH: string;
+        const HTTP2_METHOD_POST: string;
+        const HTTP2_METHOD_PRI: string;
+        const HTTP2_METHOD_PROPFIND: string;
+        const HTTP2_METHOD_PROPPATCH: string;
+        const HTTP2_METHOD_PUT: string;
+        const HTTP2_METHOD_REBIND: string;
+        const HTTP2_METHOD_REPORT: string;
+        const HTTP2_METHOD_SEARCH: string;
+        const HTTP2_METHOD_TRACE: string;
+        const HTTP2_METHOD_UNBIND: string;
+        const HTTP2_METHOD_UNCHECKOUT: string;
+        const HTTP2_METHOD_UNLINK: string;
+        const HTTP2_METHOD_UNLOCK: string;
+        const HTTP2_METHOD_UPDATE: string;
+        const HTTP2_METHOD_UPDATEREDIRECTREF: string;
+        const HTTP2_METHOD_VERSION_CONTROL: string;
+        const HTTP_STATUS_CONTINUE: number;
+        const HTTP_STATUS_SWITCHING_PROTOCOLS: number;
+        const HTTP_STATUS_PROCESSING: number;
+        const HTTP_STATUS_OK: number;
+        const HTTP_STATUS_CREATED: number;
+        const HTTP_STATUS_ACCEPTED: number;
+        const HTTP_STATUS_NON_AUTHORITATIVE_INFORMATION: number;
+        const HTTP_STATUS_NO_CONTENT: number;
+        const HTTP_STATUS_RESET_CONTENT: number;
+        const HTTP_STATUS_PARTIAL_CONTENT: number;
+        const HTTP_STATUS_MULTI_STATUS: number;
+        const HTTP_STATUS_ALREADY_REPORTED: number;
+        const HTTP_STATUS_IM_USED: number;
+        const HTTP_STATUS_MULTIPLE_CHOICES: number;
+        const HTTP_STATUS_MOVED_PERMANENTLY: number;
+        const HTTP_STATUS_FOUND: number;
+        const HTTP_STATUS_SEE_OTHER: number;
+        const HTTP_STATUS_NOT_MODIFIED: number;
+        const HTTP_STATUS_USE_PROXY: number;
+        const HTTP_STATUS_TEMPORARY_REDIRECT: number;
+        const HTTP_STATUS_PERMANENT_REDIRECT: number;
+        const HTTP_STATUS_BAD_REQUEST: number;
+        const HTTP_STATUS_UNAUTHORIZED: number;
+        const HTTP_STATUS_PAYMENT_REQUIRED: number;
+        const HTTP_STATUS_FORBIDDEN: number;
+        const HTTP_STATUS_NOT_FOUND: number;
+        const HTTP_STATUS_METHOD_NOT_ALLOWED: number;
+        const HTTP_STATUS_NOT_ACCEPTABLE: number;
+        const HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED: number;
+        const HTTP_STATUS_REQUEST_TIMEOUT: number;
+        const HTTP_STATUS_CONFLICT: number;
+        const HTTP_STATUS_GONE: number;
+        const HTTP_STATUS_LENGTH_REQUIRED: number;
+        const HTTP_STATUS_PRECONDITION_FAILED: number;
+        const HTTP_STATUS_PAYLOAD_TOO_LARGE: number;
+        const HTTP_STATUS_URI_TOO_LONG: number;
+        const HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE: number;
+        const HTTP_STATUS_RANGE_NOT_SATISFIABLE: number;
+        const HTTP_STATUS_EXPECTATION_FAILED: number;
+        const HTTP_STATUS_TEAPOT: number;
+        const HTTP_STATUS_MISDIRECTED_REQUEST: number;
+        const HTTP_STATUS_UNPROCESSABLE_ENTITY: number;
+        const HTTP_STATUS_LOCKED: number;
+        const HTTP_STATUS_FAILED_DEPENDENCY: number;
+        const HTTP_STATUS_UNORDERED_COLLECTION: number;
+        const HTTP_STATUS_UPGRADE_REQUIRED: number;
+        const HTTP_STATUS_PRECONDITION_REQUIRED: number;
+        const HTTP_STATUS_TOO_MANY_REQUESTS: number;
+        const HTTP_STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE: number;
+        const HTTP_STATUS_UNAVAILABLE_FOR_LEGAL_REASONS: number;
+        const HTTP_STATUS_INTERNAL_SERVER_ERROR: number;
+        const HTTP_STATUS_NOT_IMPLEMENTED: number;
+        const HTTP_STATUS_BAD_GATEWAY: number;
+        const HTTP_STATUS_SERVICE_UNAVAILABLE: number;
+        const HTTP_STATUS_GATEWAY_TIMEOUT: number;
+        const HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED: number;
+        const HTTP_STATUS_VARIANT_ALSO_NEGOTIATES: number;
+        const HTTP_STATUS_INSUFFICIENT_STORAGE: number;
+        const HTTP_STATUS_LOOP_DETECTED: number;
+        const HTTP_STATUS_BANDWIDTH_LIMIT_EXCEEDED: number;
+        const HTTP_STATUS_NOT_EXTENDED: number;
+        const HTTP_STATUS_NETWORK_AUTHENTICATION_REQUIRED: number;
+    }
+    /**
+     * This symbol can be set as a property on the HTTP/2 headers object with
+     * an array value in order to provide a list of headers considered sensitive.
+     */
+    export const sensitiveHeaders: symbol;
+    /**
+     * Returns an object containing the default settings for an `Http2Session` instance. This method returns a new object instance every time it is called
+     * so instances returned may be safely modified for use.
+     * @since v8.4.0
+     */
+    export function getDefaultSettings(): Settings;
+    /**
+     * Returns a `Buffer` instance containing serialized representation of the given
+     * HTTP/2 settings as specified in the [HTTP/2](https://tools.ietf.org/html/rfc7540) specification. This is intended
+     * for use with the `HTTP2-Settings` header field.
+     *
+     * ```js
+     * import http2 from 'node:http2';
+     *
+     * const packed = http2.getPackedSettings({ enablePush: false });
+     *
+     * console.log(packed.toString('base64'));
+     * // Prints: AAIAAAAA
+     * ```
+     * @since v8.4.0
+     */
+    export function getPackedSettings(settings: Settings): NonSharedBuffer;
+    /**
+     * Returns a `HTTP/2 Settings Object` containing the deserialized settings from
+     * the given `Buffer` as generated by `http2.getPackedSettings()`.
+     * @since v8.4.0
+     * @param buf The packed settings.
+     */
+    export function getUnpackedSettings(buf: Uint8Array): Settings;
+    /**
+     * Returns a `net.Server` instance that creates and manages `Http2Session` instances.
+     *
+     * Since there are no browsers known that support [unencrypted HTTP/2](https://http2.github.io/faq/#does-http2-require-encryption), the use of {@link createSecureServer} is necessary when
+     * communicating
+     * with browser clients.
+     *
+     * ```js
+     * import http2 from 'node:http2';
+     *
+     * // Create an unencrypted HTTP/2 server.
+     * // Since there are no browsers known that support
+     * // unencrypted HTTP/2, the use of `http2.createSecureServer()`
+     * // is necessary when communicating with browser clients.
+     * const server = http2.createServer();
+     *
+     * server.on('stream', (stream, headers) => {
+     *   stream.respond({
+     *     'content-type': 'text/html; charset=utf-8',
+     *     ':status': 200,
+     *   });
+     *   stream.end('

Hello World

'); + * }); + * + * server.listen(8000); + * ``` + * @since v8.4.0 + * @param onRequestHandler See `Compatibility API` + */ + export function createServer( + onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): Http2Server; + export function createServer< + Http1Request extends typeof IncomingMessage = typeof IncomingMessage, + Http1Response extends typeof ServerResponse> = typeof ServerResponse, + Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest, + Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse, + >( + options: ServerOptions, + onRequestHandler?: (request: InstanceType, response: InstanceType) => void, + ): Http2Server; + /** + * Returns a `tls.Server` instance that creates and manages `Http2Session` instances. + * + * ```js + * import http2 from 'node:http2'; + * import fs from 'node:fs'; + * + * const options = { + * key: fs.readFileSync('server-key.pem'), + * cert: fs.readFileSync('server-cert.pem'), + * }; + * + * // Create a secure HTTP/2 server + * const server = http2.createSecureServer(options); + * + * server.on('stream', (stream, headers) => { + * stream.respond({ + * 'content-type': 'text/html; charset=utf-8', + * ':status': 200, + * }); + * stream.end('

Hello World

'); + * }); + * + * server.listen(8443); + * ``` + * @since v8.4.0 + * @param onRequestHandler See `Compatibility API` + */ + export function createSecureServer( + onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): Http2SecureServer; + export function createSecureServer< + Http1Request extends typeof IncomingMessage = typeof IncomingMessage, + Http1Response extends typeof ServerResponse> = typeof ServerResponse, + Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest, + Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse, + >( + options: SecureServerOptions, + onRequestHandler?: (request: InstanceType, response: InstanceType) => void, + ): Http2SecureServer; + /** + * Returns a `ClientHttp2Session` instance. + * + * ```js + * import http2 from 'node:http2'; + * const client = http2.connect('https://localhost:1234'); + * + * // Use the client + * + * client.close(); + * ``` + * @since v8.4.0 + * @param authority The remote HTTP/2 server to connect to. This must be in the form of a minimal, valid URL with the `http://` or `https://` prefix, host name, and IP port (if a non-default port + * is used). Userinfo (user ID and password), path, querystring, and fragment details in the URL will be ignored. + * @param listener Will be registered as a one-time listener of the {@link 'connect'} event. + */ + export function connect( + authority: string | url.URL, + listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): ClientHttp2Session; + export function connect( + authority: string | url.URL, + options?: ClientSessionOptions | SecureClientSessionOptions, + listener?: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): ClientHttp2Session; + /** + * Create an HTTP/2 server session from an existing socket. + * @param socket A Duplex Stream + * @param options Any `{@link createServer}` options can be provided. + * @since v20.12.0 + */ + export function performServerHandshake< + Http1Request extends typeof IncomingMessage = typeof IncomingMessage, + Http1Response extends typeof ServerResponse> = typeof ServerResponse, + Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest, + Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse, + >( + socket: stream.Duplex, + options?: ServerOptions, + ): ServerHttp2Session; +} +declare module "node:http2" { + export * from "http2"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/https.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/https.d.ts new file mode 100644 index 00000000..53de0b9a --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/https.d.ts @@ -0,0 +1,579 @@ +/** + * HTTPS is the HTTP protocol over TLS/SSL. In Node.js this is implemented as a + * separate module. + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/https.js) + */ +declare module "https" { + import { NonSharedBuffer } from "node:buffer"; + import { Duplex } from "node:stream"; + import * as tls from "node:tls"; + import * as http from "node:http"; + import { URL } from "node:url"; + interface ServerOptions< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse> = typeof http.ServerResponse, + > extends http.ServerOptions, tls.TlsOptions {} + interface RequestOptions extends http.RequestOptions, tls.SecureContextOptions { + checkServerIdentity?: + | ((hostname: string, cert: tls.DetailedPeerCertificate) => Error | undefined) + | undefined; + rejectUnauthorized?: boolean | undefined; // Defaults to true + servername?: string | undefined; // SNI TLS Extension + } + interface AgentOptions extends http.AgentOptions, tls.ConnectionOptions { + maxCachedSessions?: number | undefined; + } + /** + * An `Agent` object for HTTPS similar to `http.Agent`. See {@link request} for more information. + * @since v0.4.5 + */ + class Agent extends http.Agent { + constructor(options?: AgentOptions); + options: AgentOptions; + createConnection( + options: RequestOptions, + callback?: (err: Error | null, stream: Duplex) => void, + ): Duplex | null | undefined; + getName(options?: RequestOptions): string; + } + interface Server< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse> = typeof http.ServerResponse, + > extends http.Server {} + /** + * See `http.Server` for more information. + * @since v0.3.4 + */ + class Server< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse> = typeof http.ServerResponse, + > extends tls.Server { + constructor(requestListener?: http.RequestListener); + constructor( + options: ServerOptions, + requestListener?: http.RequestListener, + ); + /** + * Closes all connections connected to this server. + * @since v18.2.0 + */ + closeAllConnections(): void; + /** + * Closes all connections connected to this server which are not sending a request or waiting for a response. + * @since v18.2.0 + */ + closeIdleConnections(): void; + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "keylog", listener: (line: NonSharedBuffer, tlsSocket: tls.TLSSocket) => void): this; + addListener( + event: "newSession", + listener: (sessionId: NonSharedBuffer, sessionData: NonSharedBuffer, callback: () => void) => void, + ): this; + addListener( + event: "OCSPRequest", + listener: ( + certificate: NonSharedBuffer, + issuer: NonSharedBuffer, + callback: (err: Error | null, resp: Buffer | null) => void, + ) => void, + ): this; + addListener( + event: "resumeSession", + listener: ( + sessionId: NonSharedBuffer, + callback: (err: Error | null, sessionData: Buffer | null) => void, + ) => void, + ): this; + addListener(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + addListener(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "connection", listener: (socket: Duplex) => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "listening", listener: () => void): this; + addListener(event: "checkContinue", listener: http.RequestListener): this; + addListener(event: "checkExpectation", listener: http.RequestListener): this; + addListener(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + addListener( + event: "connect", + listener: (req: InstanceType, socket: Duplex, head: NonSharedBuffer) => void, + ): this; + addListener(event: "request", listener: http.RequestListener): this; + addListener( + event: "upgrade", + listener: (req: InstanceType, socket: Duplex, head: NonSharedBuffer) => void, + ): this; + emit(event: string, ...args: any[]): boolean; + emit(event: "keylog", line: NonSharedBuffer, tlsSocket: tls.TLSSocket): boolean; + emit( + event: "newSession", + sessionId: NonSharedBuffer, + sessionData: NonSharedBuffer, + callback: () => void, + ): boolean; + emit( + event: "OCSPRequest", + certificate: NonSharedBuffer, + issuer: NonSharedBuffer, + callback: (err: Error | null, resp: Buffer | null) => void, + ): boolean; + emit( + event: "resumeSession", + sessionId: NonSharedBuffer, + callback: (err: Error | null, sessionData: Buffer | null) => void, + ): boolean; + emit(event: "secureConnection", tlsSocket: tls.TLSSocket): boolean; + emit(event: "tlsClientError", err: Error, tlsSocket: tls.TLSSocket): boolean; + emit(event: "close"): boolean; + emit(event: "connection", socket: Duplex): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "listening"): boolean; + emit( + event: "checkContinue", + req: InstanceType, + res: InstanceType, + ): boolean; + emit( + event: "checkExpectation", + req: InstanceType, + res: InstanceType, + ): boolean; + emit(event: "clientError", err: Error, socket: Duplex): boolean; + emit(event: "connect", req: InstanceType, socket: Duplex, head: NonSharedBuffer): boolean; + emit( + event: "request", + req: InstanceType, + res: InstanceType, + ): boolean; + emit(event: "upgrade", req: InstanceType, socket: Duplex, head: NonSharedBuffer): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "keylog", listener: (line: NonSharedBuffer, tlsSocket: tls.TLSSocket) => void): this; + on( + event: "newSession", + listener: (sessionId: NonSharedBuffer, sessionData: NonSharedBuffer, callback: () => void) => void, + ): this; + on( + event: "OCSPRequest", + listener: ( + certificate: NonSharedBuffer, + issuer: NonSharedBuffer, + callback: (err: Error | null, resp: Buffer | null) => void, + ) => void, + ): this; + on( + event: "resumeSession", + listener: ( + sessionId: NonSharedBuffer, + callback: (err: Error | null, sessionData: Buffer | null) => void, + ) => void, + ): this; + on(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + on(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + on(event: "close", listener: () => void): this; + on(event: "connection", listener: (socket: Duplex) => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "listening", listener: () => void): this; + on(event: "checkContinue", listener: http.RequestListener): this; + on(event: "checkExpectation", listener: http.RequestListener): this; + on(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + on( + event: "connect", + listener: (req: InstanceType, socket: Duplex, head: NonSharedBuffer) => void, + ): this; + on(event: "request", listener: http.RequestListener): this; + on( + event: "upgrade", + listener: (req: InstanceType, socket: Duplex, head: NonSharedBuffer) => void, + ): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "keylog", listener: (line: NonSharedBuffer, tlsSocket: tls.TLSSocket) => void): this; + once( + event: "newSession", + listener: (sessionId: NonSharedBuffer, sessionData: NonSharedBuffer, callback: () => void) => void, + ): this; + once( + event: "OCSPRequest", + listener: ( + certificate: NonSharedBuffer, + issuer: NonSharedBuffer, + callback: (err: Error | null, resp: Buffer | null) => void, + ) => void, + ): this; + once( + event: "resumeSession", + listener: ( + sessionId: NonSharedBuffer, + callback: (err: Error | null, sessionData: Buffer | null) => void, + ) => void, + ): this; + once(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + once(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + once(event: "close", listener: () => void): this; + once(event: "connection", listener: (socket: Duplex) => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "listening", listener: () => void): this; + once(event: "checkContinue", listener: http.RequestListener): this; + once(event: "checkExpectation", listener: http.RequestListener): this; + once(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + once( + event: "connect", + listener: (req: InstanceType, socket: Duplex, head: NonSharedBuffer) => void, + ): this; + once(event: "request", listener: http.RequestListener): this; + once( + event: "upgrade", + listener: (req: InstanceType, socket: Duplex, head: NonSharedBuffer) => void, + ): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "keylog", listener: (line: NonSharedBuffer, tlsSocket: tls.TLSSocket) => void): this; + prependListener( + event: "newSession", + listener: (sessionId: NonSharedBuffer, sessionData: NonSharedBuffer, callback: () => void) => void, + ): this; + prependListener( + event: "OCSPRequest", + listener: ( + certificate: NonSharedBuffer, + issuer: NonSharedBuffer, + callback: (err: Error | null, resp: Buffer | null) => void, + ) => void, + ): this; + prependListener( + event: "resumeSession", + listener: ( + sessionId: NonSharedBuffer, + callback: (err: Error | null, sessionData: Buffer | null) => void, + ) => void, + ): this; + prependListener(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + prependListener(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "connection", listener: (socket: Duplex) => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "listening", listener: () => void): this; + prependListener(event: "checkContinue", listener: http.RequestListener): this; + prependListener(event: "checkExpectation", listener: http.RequestListener): this; + prependListener(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + prependListener( + event: "connect", + listener: (req: InstanceType, socket: Duplex, head: NonSharedBuffer) => void, + ): this; + prependListener(event: "request", listener: http.RequestListener): this; + prependListener( + event: "upgrade", + listener: (req: InstanceType, socket: Duplex, head: NonSharedBuffer) => void, + ): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "keylog", listener: (line: NonSharedBuffer, tlsSocket: tls.TLSSocket) => void): this; + prependOnceListener( + event: "newSession", + listener: (sessionId: NonSharedBuffer, sessionData: NonSharedBuffer, callback: () => void) => void, + ): this; + prependOnceListener( + event: "OCSPRequest", + listener: ( + certificate: NonSharedBuffer, + issuer: NonSharedBuffer, + callback: (err: Error | null, resp: Buffer | null) => void, + ) => void, + ): this; + prependOnceListener( + event: "resumeSession", + listener: ( + sessionId: NonSharedBuffer, + callback: (err: Error | null, sessionData: Buffer | null) => void, + ) => void, + ): this; + prependOnceListener(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + prependOnceListener(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "connection", listener: (socket: Duplex) => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "listening", listener: () => void): this; + prependOnceListener(event: "checkContinue", listener: http.RequestListener): this; + prependOnceListener(event: "checkExpectation", listener: http.RequestListener): this; + prependOnceListener(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + prependOnceListener( + event: "connect", + listener: (req: InstanceType, socket: Duplex, head: NonSharedBuffer) => void, + ): this; + prependOnceListener(event: "request", listener: http.RequestListener): this; + prependOnceListener( + event: "upgrade", + listener: (req: InstanceType, socket: Duplex, head: NonSharedBuffer) => void, + ): this; + } + /** + * ```js + * // curl -k https://localhost:8000/ + * import https from 'node:https'; + * import fs from 'node:fs'; + * + * const options = { + * key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'), + * cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'), + * }; + * + * https.createServer(options, (req, res) => { + * res.writeHead(200); + * res.end('hello world\n'); + * }).listen(8000); + * ``` + * + * Or + * + * ```js + * import https from 'node:https'; + * import fs from 'node:fs'; + * + * const options = { + * pfx: fs.readFileSync('test/fixtures/test_cert.pfx'), + * passphrase: 'sample', + * }; + * + * https.createServer(options, (req, res) => { + * res.writeHead(200); + * res.end('hello world\n'); + * }).listen(8000); + * ``` + * @since v0.3.4 + * @param options Accepts `options` from `createServer`, `createSecureContext` and `createServer`. + * @param requestListener A listener to be added to the `'request'` event. + */ + function createServer< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse> = typeof http.ServerResponse, + >(requestListener?: http.RequestListener): Server; + function createServer< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse> = typeof http.ServerResponse, + >( + options: ServerOptions, + requestListener?: http.RequestListener, + ): Server; + /** + * Makes a request to a secure web server. + * + * The following additional `options` from `tls.connect()` are also accepted: `ca`, `cert`, `ciphers`, `clientCertEngine`, `crl`, `dhparam`, `ecdhCurve`, `honorCipherOrder`, `key`, `passphrase`, + * `pfx`, `rejectUnauthorized`, `secureOptions`, `secureProtocol`, `servername`, `sessionIdContext`, `highWaterMark`. + * + * `options` can be an object, a string, or a `URL` object. If `options` is a + * string, it is automatically parsed with `new URL()`. If it is a `URL` object, it will be automatically converted to an ordinary `options` object. + * + * `https.request()` returns an instance of the `http.ClientRequest` class. The `ClientRequest` instance is a writable stream. If one needs to + * upload a file with a POST request, then write to the `ClientRequest` object. + * + * ```js + * import https from 'node:https'; + * + * const options = { + * hostname: 'encrypted.google.com', + * port: 443, + * path: '/', + * method: 'GET', + * }; + * + * const req = https.request(options, (res) => { + * console.log('statusCode:', res.statusCode); + * console.log('headers:', res.headers); + * + * res.on('data', (d) => { + * process.stdout.write(d); + * }); + * }); + * + * req.on('error', (e) => { + * console.error(e); + * }); + * req.end(); + * ``` + * + * Example using options from `tls.connect()`: + * + * ```js + * const options = { + * hostname: 'encrypted.google.com', + * port: 443, + * path: '/', + * method: 'GET', + * key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'), + * cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'), + * }; + * options.agent = new https.Agent(options); + * + * const req = https.request(options, (res) => { + * // ... + * }); + * ``` + * + * Alternatively, opt out of connection pooling by not using an `Agent`. + * + * ```js + * const options = { + * hostname: 'encrypted.google.com', + * port: 443, + * path: '/', + * method: 'GET', + * key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'), + * cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'), + * agent: false, + * }; + * + * const req = https.request(options, (res) => { + * // ... + * }); + * ``` + * + * Example using a `URL` as `options`: + * + * ```js + * const options = new URL('https://abc:xyz@example.com'); + * + * const req = https.request(options, (res) => { + * // ... + * }); + * ``` + * + * Example pinning on certificate fingerprint, or the public key (similar to`pin-sha256`): + * + * ```js + * import tls from 'node:tls'; + * import https from 'node:https'; + * import crypto from 'node:crypto'; + * + * function sha256(s) { + * return crypto.createHash('sha256').update(s).digest('base64'); + * } + * const options = { + * hostname: 'github.com', + * port: 443, + * path: '/', + * method: 'GET', + * checkServerIdentity: function(host, cert) { + * // Make sure the certificate is issued to the host we are connected to + * const err = tls.checkServerIdentity(host, cert); + * if (err) { + * return err; + * } + * + * // Pin the public key, similar to HPKP pin-sha256 pinning + * const pubkey256 = 'pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU='; + * if (sha256(cert.pubkey) !== pubkey256) { + * const msg = 'Certificate verification error: ' + + * `The public key of '${cert.subject.CN}' ` + + * 'does not match our pinned fingerprint'; + * return new Error(msg); + * } + * + * // Pin the exact certificate, rather than the pub key + * const cert256 = '25:FE:39:32:D9:63:8C:8A:FC:A1:9A:29:87:' + + * 'D8:3E:4C:1D:98:DB:71:E4:1A:48:03:98:EA:22:6A:BD:8B:93:16'; + * if (cert.fingerprint256 !== cert256) { + * const msg = 'Certificate verification error: ' + + * `The certificate of '${cert.subject.CN}' ` + + * 'does not match our pinned fingerprint'; + * return new Error(msg); + * } + * + * // This loop is informational only. + * // Print the certificate and public key fingerprints of all certs in the + * // chain. Its common to pin the public key of the issuer on the public + * // internet, while pinning the public key of the service in sensitive + * // environments. + * do { + * console.log('Subject Common Name:', cert.subject.CN); + * console.log(' Certificate SHA256 fingerprint:', cert.fingerprint256); + * + * hash = crypto.createHash('sha256'); + * console.log(' Public key ping-sha256:', sha256(cert.pubkey)); + * + * lastprint256 = cert.fingerprint256; + * cert = cert.issuerCertificate; + * } while (cert.fingerprint256 !== lastprint256); + * + * }, + * }; + * + * options.agent = new https.Agent(options); + * const req = https.request(options, (res) => { + * console.log('All OK. Server matched our pinned cert or public key'); + * console.log('statusCode:', res.statusCode); + * // Print the HPKP values + * console.log('headers:', res.headers['public-key-pins']); + * + * res.on('data', (d) => {}); + * }); + * + * req.on('error', (e) => { + * console.error(e.message); + * }); + * req.end(); + * ``` + * + * Outputs for example: + * + * ```text + * Subject Common Name: github.com + * Certificate SHA256 fingerprint: 25:FE:39:32:D9:63:8C:8A:FC:A1:9A:29:87:D8:3E:4C:1D:98:DB:71:E4:1A:48:03:98:EA:22:6A:BD:8B:93:16 + * Public key ping-sha256: pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU= + * Subject Common Name: DigiCert SHA2 Extended Validation Server CA + * Certificate SHA256 fingerprint: 40:3E:06:2A:26:53:05:91:13:28:5B:AF:80:A0:D4:AE:42:2C:84:8C:9F:78:FA:D0:1F:C9:4B:C5:B8:7F:EF:1A + * Public key ping-sha256: RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho= + * Subject Common Name: DigiCert High Assurance EV Root CA + * Certificate SHA256 fingerprint: 74:31:E5:F4:C3:C1:CE:46:90:77:4F:0B:61:E0:54:40:88:3B:A9:A0:1E:D0:0B:A6:AB:D7:80:6E:D3:B1:18:CF + * Public key ping-sha256: WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18= + * All OK. Server matched our pinned cert or public key + * statusCode: 200 + * headers: max-age=0; pin-sha256="WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18="; pin-sha256="RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho="; + * pin-sha256="k2v657xBsOVe1PQRwOsHsw3bsGT2VzIqz5K+59sNQws="; pin-sha256="K87oWBWM9UZfyddvDfoxL+8lpNyoUB2ptGtn0fv6G2Q="; pin-sha256="IQBnNBEiFuhj+8x6X8XLgh01V9Ic5/V3IRQLNFFc7v4="; + * pin-sha256="iie1VXtL7HzAMF+/PVPR9xzT80kQxdZeJ+zduCB3uj0="; pin-sha256="LvRiGEjRqfzurezaWuj8Wie2gyHMrW5Q06LspMnox7A="; includeSubDomains + * ``` + * @since v0.3.6 + * @param options Accepts all `options` from `request`, with some differences in default values: + */ + function request( + options: RequestOptions | string | URL, + callback?: (res: http.IncomingMessage) => void, + ): http.ClientRequest; + function request( + url: string | URL, + options: RequestOptions, + callback?: (res: http.IncomingMessage) => void, + ): http.ClientRequest; + /** + * Like `http.get()` but for HTTPS. + * + * `options` can be an object, a string, or a `URL` object. If `options` is a + * string, it is automatically parsed with `new URL()`. If it is a `URL` object, it will be automatically converted to an ordinary `options` object. + * + * ```js + * import https from 'node:https'; + * + * https.get('https://encrypted.google.com/', (res) => { + * console.log('statusCode:', res.statusCode); + * console.log('headers:', res.headers); + * + * res.on('data', (d) => { + * process.stdout.write(d); + * }); + * + * }).on('error', (e) => { + * console.error(e); + * }); + * ``` + * @since v0.3.6 + * @param options Accepts the same `options` as {@link request}, with the `method` always set to `GET`. + */ + function get( + options: RequestOptions | string | URL, + callback?: (res: http.IncomingMessage) => void, + ): http.ClientRequest; + function get( + url: string | URL, + options: RequestOptions, + callback?: (res: http.IncomingMessage) => void, + ): http.ClientRequest; + let globalAgent: Agent; +} +declare module "node:https" { + export * from "https"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/index.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/index.d.ts new file mode 100644 index 00000000..c140e0b4 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/index.d.ts @@ -0,0 +1,101 @@ +/** + * License for programmatically and manually incorporated + * documentation aka. `JSDoc` from https://github.com/nodejs/node/tree/master/doc + * + * Copyright Node.js contributors. All rights reserved. + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +// NOTE: These definitions support Node.js and TypeScript 5.8+. + +// Reference required TypeScript libraries: +/// +/// +/// + +// Iterator definitions required for compatibility with TypeScript <5.6: +/// + +// Definitions for Node.js modules specific to TypeScript 5.7+: +/// +/// + +// Definitions for Node.js modules that are not specific to any version of TypeScript: +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/inspector.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/inspector.d.ts new file mode 100644 index 00000000..dd0b8888 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/inspector.d.ts @@ -0,0 +1,277 @@ +/** + * The `node:inspector` module provides an API for interacting with the V8 + * inspector. + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/inspector.js) + */ +declare module "inspector" { + import EventEmitter = require("node:events"); + /** + * The `inspector.Session` is used for dispatching messages to the V8 inspector + * back-end and receiving message responses and notifications. + */ + class Session extends EventEmitter { + /** + * Create a new instance of the inspector.Session class. + * The inspector session needs to be connected through `session.connect()` before the messages can be dispatched to the inspector backend. + */ + constructor(); + /** + * Connects a session to the inspector back-end. + */ + connect(): void; + /** + * Connects a session to the inspector back-end. + * An exception will be thrown if this API was not called on a Worker thread. + * @since v12.11.0 + */ + connectToMainThread(): void; + /** + * Immediately close the session. All pending message callbacks will be called with an error. + * `session.connect()` will need to be called to be able to send messages again. + * Reconnected session will lose all inspector state, such as enabled agents or configured breakpoints. + */ + disconnect(): void; + } + /** + * Activate inspector on host and port. Equivalent to `node --inspect=[[host:]port]`, but can be done programmatically after node has + * started. + * + * If wait is `true`, will block until a client has connected to the inspect port + * and flow control has been passed to the debugger client. + * + * See the [security warning](https://nodejs.org/docs/latest-v24.x/api/cli.html#warning-binding-inspector-to-a-public-ipport-combination-is-insecure) + * regarding the `host` parameter usage. + * @param port Port to listen on for inspector connections. Defaults to what was specified on the CLI. + * @param host Host to listen on for inspector connections. Defaults to what was specified on the CLI. + * @param wait Block until a client has connected. Defaults to what was specified on the CLI. + * @returns Disposable that calls `inspector.close()`. + */ + function open(port?: number, host?: string, wait?: boolean): Disposable; + /** + * Deactivate the inspector. Blocks until there are no active connections. + */ + function close(): void; + /** + * Return the URL of the active inspector, or `undefined` if there is none. + * + * ```console + * $ node --inspect -p 'inspector.url()' + * Debugger listening on ws://127.0.0.1:9229/166e272e-7a30-4d09-97ce-f1c012b43c34 + * For help, see: https://nodejs.org/en/docs/inspector + * ws://127.0.0.1:9229/166e272e-7a30-4d09-97ce-f1c012b43c34 + * + * $ node --inspect=localhost:3000 -p 'inspector.url()' + * Debugger listening on ws://localhost:3000/51cf8d0e-3c36-4c59-8efd-54519839e56a + * For help, see: https://nodejs.org/en/docs/inspector + * ws://localhost:3000/51cf8d0e-3c36-4c59-8efd-54519839e56a + * + * $ node -p 'inspector.url()' + * undefined + * ``` + */ + function url(): string | undefined; + /** + * Blocks until a client (existing or connected later) has sent `Runtime.runIfWaitingForDebugger` command. + * + * An exception will be thrown if there is no active inspector. + * @since v12.7.0 + */ + function waitForDebugger(): void; + // These methods are exposed by the V8 inspector console API (inspector/v8-console.h). + // The method signatures differ from those of the Node.js console, and are deliberately + // typed permissively. + interface InspectorConsole { + debug(...data: any[]): void; + error(...data: any[]): void; + info(...data: any[]): void; + log(...data: any[]): void; + warn(...data: any[]): void; + dir(...data: any[]): void; + dirxml(...data: any[]): void; + table(...data: any[]): void; + trace(...data: any[]): void; + group(...data: any[]): void; + groupCollapsed(...data: any[]): void; + groupEnd(...data: any[]): void; + clear(...data: any[]): void; + count(label?: any): void; + countReset(label?: any): void; + assert(value?: any, ...data: any[]): void; + profile(label?: any): void; + profileEnd(label?: any): void; + time(label?: any): void; + timeLog(label?: any): void; + timeStamp(label?: any): void; + } + /** + * An object to send messages to the remote inspector console. + * @since v11.0.0 + */ + const console: InspectorConsole; + // DevTools protocol event broadcast methods + namespace Network { + /** + * This feature is only available with the `--experimental-network-inspection` flag enabled. + * + * Broadcasts the `Network.requestWillBeSent` event to connected frontends. This event indicates that + * the application is about to send an HTTP request. + * @since v22.6.0 + */ + function requestWillBeSent(params: RequestWillBeSentEventDataType): void; + /** + * This feature is only available with the `--experimental-network-inspection` flag enabled. + * + * Broadcasts the `Network.dataReceived` event to connected frontends, or buffers the data if + * `Network.streamResourceContent` command was not invoked for the given request yet. + * + * Also enables `Network.getResponseBody` command to retrieve the response data. + * @since v24.2.0 + */ + function dataReceived(params: DataReceivedEventDataType): void; + /** + * This feature is only available with the `--experimental-network-inspection` flag enabled. + * + * Enables `Network.getRequestPostData` command to retrieve the request data. + * @since v24.3.0 + */ + function dataSent(params: unknown): void; + /** + * This feature is only available with the `--experimental-network-inspection` flag enabled. + * + * Broadcasts the `Network.responseReceived` event to connected frontends. This event indicates that + * HTTP response is available. + * @since v22.6.0 + */ + function responseReceived(params: ResponseReceivedEventDataType): void; + /** + * This feature is only available with the `--experimental-network-inspection` flag enabled. + * + * Broadcasts the `Network.loadingFinished` event to connected frontends. This event indicates that + * HTTP request has finished loading. + * @since v22.6.0 + */ + function loadingFinished(params: LoadingFinishedEventDataType): void; + /** + * This feature is only available with the `--experimental-network-inspection` flag enabled. + * + * Broadcasts the `Network.loadingFailed` event to connected frontends. This event indicates that + * HTTP request has failed to load. + * @since v22.7.0 + */ + function loadingFailed(params: LoadingFailedEventDataType): void; + /** + * This feature is only available with the `--experimental-network-inspection` flag enabled. + * + * Broadcasts the `Network.webSocketCreated` event to connected frontends. This event indicates that + * a WebSocket connection has been initiated. + * @since v24.7.0 + */ + function webSocketCreated(params: WebSocketCreatedEventDataType): void; + /** + * This feature is only available with the `--experimental-network-inspection` flag enabled. + * + * Broadcasts the `Network.webSocketHandshakeResponseReceived` event to connected frontends. + * This event indicates that the WebSocket handshake response has been received. + * @since v24.7.0 + */ + function webSocketHandshakeResponseReceived(params: WebSocketHandshakeResponseReceivedEventDataType): void; + /** + * This feature is only available with the `--experimental-network-inspection` flag enabled. + * + * Broadcasts the `Network.webSocketClosed` event to connected frontends. + * This event indicates that a WebSocket connection has been closed. + * @since v24.7.0 + */ + function webSocketClosed(params: WebSocketClosedEventDataType): void; + } + namespace NetworkResources { + /** + * This feature is only available with the `--experimental-inspector-network-resource` flag enabled. + * + * The inspector.NetworkResources.put method is used to provide a response for a loadNetworkResource + * request issued via the Chrome DevTools Protocol (CDP). + * This is typically triggered when a source map is specified by URL, and a DevTools frontend—such as + * Chrome—requests the resource to retrieve the source map. + * + * This method allows developers to predefine the resource content to be served in response to such CDP requests. + * + * ```js + * const inspector = require('node:inspector'); + * // By preemptively calling put to register the resource, a source map can be resolved when + * // a loadNetworkResource request is made from the frontend. + * async function setNetworkResources() { + * const mapUrl = 'http://localhost:3000/dist/app.js.map'; + * const tsUrl = 'http://localhost:3000/src/app.ts'; + * const distAppJsMap = await fetch(mapUrl).then((res) => res.text()); + * const srcAppTs = await fetch(tsUrl).then((res) => res.text()); + * inspector.NetworkResources.put(mapUrl, distAppJsMap); + * inspector.NetworkResources.put(tsUrl, srcAppTs); + * }; + * setNetworkResources().then(() => { + * require('./dist/app'); + * }); + * ``` + * + * For more details, see the official CDP documentation: [Network.loadNetworkResource](https://chromedevtools.github.io/devtools-protocol/tot/Network/#method-loadNetworkResource) + * @since v24.5.0 + * @experimental + */ + function put(url: string, data: string): void; + } +} + +/** + * The `node:inspector` module provides an API for interacting with the V8 + * inspector. + */ +declare module "node:inspector" { + export * from "inspector"; +} + +/** + * The `node:inspector/promises` module provides an API for interacting with the V8 + * inspector. + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/inspector/promises.js) + * @since v19.0.0 + */ +declare module "inspector/promises" { + import EventEmitter = require("node:events"); + export { close, console, NetworkResources, open, url, waitForDebugger } from "inspector"; + /** + * The `inspector.Session` is used for dispatching messages to the V8 inspector + * back-end and receiving message responses and notifications. + * @since v19.0.0 + */ + export class Session extends EventEmitter { + /** + * Create a new instance of the inspector.Session class. + * The inspector session needs to be connected through `session.connect()` before the messages can be dispatched to the inspector backend. + */ + constructor(); + /** + * Connects a session to the inspector back-end. + */ + connect(): void; + /** + * Connects a session to the inspector back-end. + * An exception will be thrown if this API was not called on a Worker thread. + * @since v12.11.0 + */ + connectToMainThread(): void; + /** + * Immediately close the session. All pending message callbacks will be called with an error. + * `session.connect()` will need to be called to be able to send messages again. + * Reconnected session will lose all inspector state, such as enabled agents or configured breakpoints. + */ + disconnect(): void; + } +} + +/** + * The `node:inspector/promises` module provides an API for interacting with the V8 + * inspector. + * @since v19.0.0 + */ +declare module "node:inspector/promises" { + export * from "inspector/promises"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/inspector.generated.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/inspector.generated.d.ts new file mode 100644 index 00000000..17352e79 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/inspector.generated.d.ts @@ -0,0 +1,4233 @@ +// These definitions are automatically generated by the generate-inspector script. +// Do not edit this file directly. +// See scripts/generate-inspector/README.md for information on how to update the protocol definitions. +// Changes to the module itself should be added to the generator template (scripts/generate-inspector/inspector.d.ts.template). + +declare module "inspector" { + interface InspectorNotification { + method: string; + params: T; + } + + namespace Schema { + /** + * Description of the protocol domain. + */ + interface Domain { + /** + * Domain name. + */ + name: string; + /** + * Domain version. + */ + version: string; + } + interface GetDomainsReturnType { + /** + * List of supported domains. + */ + domains: Domain[]; + } + } + namespace Runtime { + /** + * Unique script identifier. + */ + type ScriptId = string; + /** + * Unique object identifier. + */ + type RemoteObjectId = string; + /** + * Primitive value which cannot be JSON-stringified. + */ + type UnserializableValue = string; + /** + * Mirror object referencing original JavaScript object. + */ + interface RemoteObject { + /** + * Object type. + */ + type: string; + /** + * Object subtype hint. Specified for object type values only. + */ + subtype?: string | undefined; + /** + * Object class (constructor) name. Specified for object type values only. + */ + className?: string | undefined; + /** + * Remote object value in case of primitive values or JSON values (if it was requested). + */ + value?: any; + /** + * Primitive value which can not be JSON-stringified does not have value, but gets this property. + */ + unserializableValue?: UnserializableValue | undefined; + /** + * String representation of the object. + */ + description?: string | undefined; + /** + * Unique object identifier (for non-primitive values). + */ + objectId?: RemoteObjectId | undefined; + /** + * Preview containing abbreviated property values. Specified for object type values only. + * @experimental + */ + preview?: ObjectPreview | undefined; + /** + * @experimental + */ + customPreview?: CustomPreview | undefined; + } + /** + * @experimental + */ + interface CustomPreview { + header: string; + hasBody: boolean; + formatterObjectId: RemoteObjectId; + bindRemoteObjectFunctionId: RemoteObjectId; + configObjectId?: RemoteObjectId | undefined; + } + /** + * Object containing abbreviated remote object value. + * @experimental + */ + interface ObjectPreview { + /** + * Object type. + */ + type: string; + /** + * Object subtype hint. Specified for object type values only. + */ + subtype?: string | undefined; + /** + * String representation of the object. + */ + description?: string | undefined; + /** + * True iff some of the properties or entries of the original object did not fit. + */ + overflow: boolean; + /** + * List of the properties. + */ + properties: PropertyPreview[]; + /** + * List of the entries. Specified for map and set subtype values only. + */ + entries?: EntryPreview[] | undefined; + } + /** + * @experimental + */ + interface PropertyPreview { + /** + * Property name. + */ + name: string; + /** + * Object type. Accessor means that the property itself is an accessor property. + */ + type: string; + /** + * User-friendly property value string. + */ + value?: string | undefined; + /** + * Nested value preview. + */ + valuePreview?: ObjectPreview | undefined; + /** + * Object subtype hint. Specified for object type values only. + */ + subtype?: string | undefined; + } + /** + * @experimental + */ + interface EntryPreview { + /** + * Preview of the key. Specified for map-like collection entries. + */ + key?: ObjectPreview | undefined; + /** + * Preview of the value. + */ + value: ObjectPreview; + } + /** + * Object property descriptor. + */ + interface PropertyDescriptor { + /** + * Property name or symbol description. + */ + name: string; + /** + * The value associated with the property. + */ + value?: RemoteObject | undefined; + /** + * True if the value associated with the property may be changed (data descriptors only). + */ + writable?: boolean | undefined; + /** + * A function which serves as a getter for the property, or undefined if there is no getter (accessor descriptors only). + */ + get?: RemoteObject | undefined; + /** + * A function which serves as a setter for the property, or undefined if there is no setter (accessor descriptors only). + */ + set?: RemoteObject | undefined; + /** + * True if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object. + */ + configurable: boolean; + /** + * True if this property shows up during enumeration of the properties on the corresponding object. + */ + enumerable: boolean; + /** + * True if the result was thrown during the evaluation. + */ + wasThrown?: boolean | undefined; + /** + * True if the property is owned for the object. + */ + isOwn?: boolean | undefined; + /** + * Property symbol object, if the property is of the symbol type. + */ + symbol?: RemoteObject | undefined; + } + /** + * Object internal property descriptor. This property isn't normally visible in JavaScript code. + */ + interface InternalPropertyDescriptor { + /** + * Conventional property name. + */ + name: string; + /** + * The value associated with the property. + */ + value?: RemoteObject | undefined; + } + /** + * Represents function call argument. Either remote object id objectId, primitive value, unserializable primitive value or neither of (for undefined) them should be specified. + */ + interface CallArgument { + /** + * Primitive value or serializable javascript object. + */ + value?: any; + /** + * Primitive value which can not be JSON-stringified. + */ + unserializableValue?: UnserializableValue | undefined; + /** + * Remote object handle. + */ + objectId?: RemoteObjectId | undefined; + } + /** + * Id of an execution context. + */ + type ExecutionContextId = number; + /** + * Description of an isolated world. + */ + interface ExecutionContextDescription { + /** + * Unique id of the execution context. It can be used to specify in which execution context script evaluation should be performed. + */ + id: ExecutionContextId; + /** + * Execution context origin. + */ + origin: string; + /** + * Human readable name describing given context. + */ + name: string; + /** + * Embedder-specific auxiliary data. + */ + auxData?: object | undefined; + } + /** + * Detailed information about exception (or error) that was thrown during script compilation or execution. + */ + interface ExceptionDetails { + /** + * Exception id. + */ + exceptionId: number; + /** + * Exception text, which should be used together with exception object when available. + */ + text: string; + /** + * Line number of the exception location (0-based). + */ + lineNumber: number; + /** + * Column number of the exception location (0-based). + */ + columnNumber: number; + /** + * Script ID of the exception location. + */ + scriptId?: ScriptId | undefined; + /** + * URL of the exception location, to be used when the script was not reported. + */ + url?: string | undefined; + /** + * JavaScript stack trace if available. + */ + stackTrace?: StackTrace | undefined; + /** + * Exception object if available. + */ + exception?: RemoteObject | undefined; + /** + * Identifier of the context where exception happened. + */ + executionContextId?: ExecutionContextId | undefined; + } + /** + * Number of milliseconds since epoch. + */ + type Timestamp = number; + /** + * Stack entry for runtime errors and assertions. + */ + interface CallFrame { + /** + * JavaScript function name. + */ + functionName: string; + /** + * JavaScript script id. + */ + scriptId: ScriptId; + /** + * JavaScript script name or url. + */ + url: string; + /** + * JavaScript script line number (0-based). + */ + lineNumber: number; + /** + * JavaScript script column number (0-based). + */ + columnNumber: number; + } + /** + * Call frames for assertions or error messages. + */ + interface StackTrace { + /** + * String label of this stack trace. For async traces this may be a name of the function that initiated the async call. + */ + description?: string | undefined; + /** + * JavaScript function name. + */ + callFrames: CallFrame[]; + /** + * Asynchronous JavaScript stack trace that preceded this stack, if available. + */ + parent?: StackTrace | undefined; + /** + * Asynchronous JavaScript stack trace that preceded this stack, if available. + * @experimental + */ + parentId?: StackTraceId | undefined; + } + /** + * Unique identifier of current debugger. + * @experimental + */ + type UniqueDebuggerId = string; + /** + * If debuggerId is set stack trace comes from another debugger and can be resolved there. This allows to track cross-debugger calls. See Runtime.StackTrace and Debugger.paused for usages. + * @experimental + */ + interface StackTraceId { + id: string; + debuggerId?: UniqueDebuggerId | undefined; + } + interface EvaluateParameterType { + /** + * Expression to evaluate. + */ + expression: string; + /** + * Symbolic group name that can be used to release multiple objects. + */ + objectGroup?: string | undefined; + /** + * Determines whether Command Line API should be available during the evaluation. + */ + includeCommandLineAPI?: boolean | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Specifies in which execution context to perform evaluation. If the parameter is omitted the evaluation will be performed in the context of the inspected page. + */ + contextId?: ExecutionContextId | undefined; + /** + * Whether the result is expected to be a JSON object that should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + * @experimental + */ + generatePreview?: boolean | undefined; + /** + * Whether execution should be treated as initiated by user in the UI. + */ + userGesture?: boolean | undefined; + /** + * Whether execution should await for resulting value and return once awaited promise is resolved. + */ + awaitPromise?: boolean | undefined; + } + interface AwaitPromiseParameterType { + /** + * Identifier of the promise. + */ + promiseObjectId: RemoteObjectId; + /** + * Whether the result is expected to be a JSON object that should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + */ + generatePreview?: boolean | undefined; + } + interface CallFunctionOnParameterType { + /** + * Declaration of the function to call. + */ + functionDeclaration: string; + /** + * Identifier of the object to call function on. Either objectId or executionContextId should be specified. + */ + objectId?: RemoteObjectId | undefined; + /** + * Call arguments. All call arguments must belong to the same JavaScript world as the target object. + */ + arguments?: CallArgument[] | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Whether the result is expected to be a JSON object which should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + * @experimental + */ + generatePreview?: boolean | undefined; + /** + * Whether execution should be treated as initiated by user in the UI. + */ + userGesture?: boolean | undefined; + /** + * Whether execution should await for resulting value and return once awaited promise is resolved. + */ + awaitPromise?: boolean | undefined; + /** + * Specifies execution context which global object will be used to call function on. Either executionContextId or objectId should be specified. + */ + executionContextId?: ExecutionContextId | undefined; + /** + * Symbolic group name that can be used to release multiple objects. If objectGroup is not specified and objectId is, objectGroup will be inherited from object. + */ + objectGroup?: string | undefined; + } + interface GetPropertiesParameterType { + /** + * Identifier of the object to return properties for. + */ + objectId: RemoteObjectId; + /** + * If true, returns properties belonging only to the element itself, not to its prototype chain. + */ + ownProperties?: boolean | undefined; + /** + * If true, returns accessor properties (with getter/setter) only; internal properties are not returned either. + * @experimental + */ + accessorPropertiesOnly?: boolean | undefined; + /** + * Whether preview should be generated for the results. + * @experimental + */ + generatePreview?: boolean | undefined; + } + interface ReleaseObjectParameterType { + /** + * Identifier of the object to release. + */ + objectId: RemoteObjectId; + } + interface ReleaseObjectGroupParameterType { + /** + * Symbolic object group name. + */ + objectGroup: string; + } + interface SetCustomObjectFormatterEnabledParameterType { + enabled: boolean; + } + interface CompileScriptParameterType { + /** + * Expression to compile. + */ + expression: string; + /** + * Source url to be set for the script. + */ + sourceURL: string; + /** + * Specifies whether the compiled script should be persisted. + */ + persistScript: boolean; + /** + * Specifies in which execution context to perform script run. If the parameter is omitted the evaluation will be performed in the context of the inspected page. + */ + executionContextId?: ExecutionContextId | undefined; + } + interface RunScriptParameterType { + /** + * Id of the script to run. + */ + scriptId: ScriptId; + /** + * Specifies in which execution context to perform script run. If the parameter is omitted the evaluation will be performed in the context of the inspected page. + */ + executionContextId?: ExecutionContextId | undefined; + /** + * Symbolic group name that can be used to release multiple objects. + */ + objectGroup?: string | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Determines whether Command Line API should be available during the evaluation. + */ + includeCommandLineAPI?: boolean | undefined; + /** + * Whether the result is expected to be a JSON object which should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + */ + generatePreview?: boolean | undefined; + /** + * Whether execution should await for resulting value and return once awaited promise is resolved. + */ + awaitPromise?: boolean | undefined; + } + interface QueryObjectsParameterType { + /** + * Identifier of the prototype to return objects for. + */ + prototypeObjectId: RemoteObjectId; + } + interface GlobalLexicalScopeNamesParameterType { + /** + * Specifies in which execution context to lookup global scope variables. + */ + executionContextId?: ExecutionContextId | undefined; + } + interface EvaluateReturnType { + /** + * Evaluation result. + */ + result: RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface AwaitPromiseReturnType { + /** + * Promise result. Will contain rejected value if promise was rejected. + */ + result: RemoteObject; + /** + * Exception details if stack strace is available. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface CallFunctionOnReturnType { + /** + * Call result. + */ + result: RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface GetPropertiesReturnType { + /** + * Object properties. + */ + result: PropertyDescriptor[]; + /** + * Internal object properties (only of the element itself). + */ + internalProperties?: InternalPropertyDescriptor[] | undefined; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface CompileScriptReturnType { + /** + * Id of the script. + */ + scriptId?: ScriptId | undefined; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface RunScriptReturnType { + /** + * Run result. + */ + result: RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface QueryObjectsReturnType { + /** + * Array with objects. + */ + objects: RemoteObject; + } + interface GlobalLexicalScopeNamesReturnType { + names: string[]; + } + interface ExecutionContextCreatedEventDataType { + /** + * A newly created execution context. + */ + context: ExecutionContextDescription; + } + interface ExecutionContextDestroyedEventDataType { + /** + * Id of the destroyed context + */ + executionContextId: ExecutionContextId; + } + interface ExceptionThrownEventDataType { + /** + * Timestamp of the exception. + */ + timestamp: Timestamp; + exceptionDetails: ExceptionDetails; + } + interface ExceptionRevokedEventDataType { + /** + * Reason describing why exception was revoked. + */ + reason: string; + /** + * The id of revoked exception, as reported in exceptionThrown. + */ + exceptionId: number; + } + interface ConsoleAPICalledEventDataType { + /** + * Type of the call. + */ + type: string; + /** + * Call arguments. + */ + args: RemoteObject[]; + /** + * Identifier of the context where the call was made. + */ + executionContextId: ExecutionContextId; + /** + * Call timestamp. + */ + timestamp: Timestamp; + /** + * Stack trace captured when the call was made. + */ + stackTrace?: StackTrace | undefined; + /** + * Console context descriptor for calls on non-default console context (not console.*): 'anonymous#unique-logger-id' for call on unnamed context, 'name#unique-logger-id' for call on named context. + * @experimental + */ + context?: string | undefined; + } + interface InspectRequestedEventDataType { + object: RemoteObject; + hints: object; + } + } + namespace Debugger { + /** + * Breakpoint identifier. + */ + type BreakpointId = string; + /** + * Call frame identifier. + */ + type CallFrameId = string; + /** + * Location in the source code. + */ + interface Location { + /** + * Script identifier as reported in the Debugger.scriptParsed. + */ + scriptId: Runtime.ScriptId; + /** + * Line number in the script (0-based). + */ + lineNumber: number; + /** + * Column number in the script (0-based). + */ + columnNumber?: number | undefined; + } + /** + * Location in the source code. + * @experimental + */ + interface ScriptPosition { + lineNumber: number; + columnNumber: number; + } + /** + * JavaScript call frame. Array of call frames form the call stack. + */ + interface CallFrame { + /** + * Call frame identifier. This identifier is only valid while the virtual machine is paused. + */ + callFrameId: CallFrameId; + /** + * Name of the JavaScript function called on this call frame. + */ + functionName: string; + /** + * Location in the source code. + */ + functionLocation?: Location | undefined; + /** + * Location in the source code. + */ + location: Location; + /** + * JavaScript script name or url. + */ + url: string; + /** + * Scope chain for this call frame. + */ + scopeChain: Scope[]; + /** + * this object for this call frame. + */ + this: Runtime.RemoteObject; + /** + * The value being returned, if the function is at return point. + */ + returnValue?: Runtime.RemoteObject | undefined; + } + /** + * Scope description. + */ + interface Scope { + /** + * Scope type. + */ + type: string; + /** + * Object representing the scope. For global and with scopes it represents the actual object; for the rest of the scopes, it is artificial transient object enumerating scope variables as its properties. + */ + object: Runtime.RemoteObject; + name?: string | undefined; + /** + * Location in the source code where scope starts + */ + startLocation?: Location | undefined; + /** + * Location in the source code where scope ends + */ + endLocation?: Location | undefined; + } + /** + * Search match for resource. + */ + interface SearchMatch { + /** + * Line number in resource content. + */ + lineNumber: number; + /** + * Line with match content. + */ + lineContent: string; + } + interface BreakLocation { + /** + * Script identifier as reported in the Debugger.scriptParsed. + */ + scriptId: Runtime.ScriptId; + /** + * Line number in the script (0-based). + */ + lineNumber: number; + /** + * Column number in the script (0-based). + */ + columnNumber?: number | undefined; + type?: string | undefined; + } + interface SetBreakpointsActiveParameterType { + /** + * New value for breakpoints active state. + */ + active: boolean; + } + interface SetSkipAllPausesParameterType { + /** + * New value for skip pauses state. + */ + skip: boolean; + } + interface SetBreakpointByUrlParameterType { + /** + * Line number to set breakpoint at. + */ + lineNumber: number; + /** + * URL of the resources to set breakpoint on. + */ + url?: string | undefined; + /** + * Regex pattern for the URLs of the resources to set breakpoints on. Either url or urlRegex must be specified. + */ + urlRegex?: string | undefined; + /** + * Script hash of the resources to set breakpoint on. + */ + scriptHash?: string | undefined; + /** + * Offset in the line to set breakpoint at. + */ + columnNumber?: number | undefined; + /** + * Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true. + */ + condition?: string | undefined; + } + interface SetBreakpointParameterType { + /** + * Location to set breakpoint in. + */ + location: Location; + /** + * Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true. + */ + condition?: string | undefined; + } + interface RemoveBreakpointParameterType { + breakpointId: BreakpointId; + } + interface GetPossibleBreakpointsParameterType { + /** + * Start of range to search possible breakpoint locations in. + */ + start: Location; + /** + * End of range to search possible breakpoint locations in (excluding). When not specified, end of scripts is used as end of range. + */ + end?: Location | undefined; + /** + * Only consider locations which are in the same (non-nested) function as start. + */ + restrictToFunction?: boolean | undefined; + } + interface ContinueToLocationParameterType { + /** + * Location to continue to. + */ + location: Location; + targetCallFrames?: string | undefined; + } + interface PauseOnAsyncCallParameterType { + /** + * Debugger will pause when async call with given stack trace is started. + */ + parentStackTraceId: Runtime.StackTraceId; + } + interface StepIntoParameterType { + /** + * Debugger will issue additional Debugger.paused notification if any async task is scheduled before next pause. + * @experimental + */ + breakOnAsyncCall?: boolean | undefined; + } + interface GetStackTraceParameterType { + stackTraceId: Runtime.StackTraceId; + } + interface SearchInContentParameterType { + /** + * Id of the script to search in. + */ + scriptId: Runtime.ScriptId; + /** + * String to search for. + */ + query: string; + /** + * If true, search is case sensitive. + */ + caseSensitive?: boolean | undefined; + /** + * If true, treats string parameter as regex. + */ + isRegex?: boolean | undefined; + } + interface SetScriptSourceParameterType { + /** + * Id of the script to edit. + */ + scriptId: Runtime.ScriptId; + /** + * New content of the script. + */ + scriptSource: string; + /** + * If true the change will not actually be applied. Dry run may be used to get result description without actually modifying the code. + */ + dryRun?: boolean | undefined; + } + interface RestartFrameParameterType { + /** + * Call frame identifier to evaluate on. + */ + callFrameId: CallFrameId; + } + interface GetScriptSourceParameterType { + /** + * Id of the script to get source for. + */ + scriptId: Runtime.ScriptId; + } + interface SetPauseOnExceptionsParameterType { + /** + * Pause on exceptions mode. + */ + state: string; + } + interface EvaluateOnCallFrameParameterType { + /** + * Call frame identifier to evaluate on. + */ + callFrameId: CallFrameId; + /** + * Expression to evaluate. + */ + expression: string; + /** + * String object group name to put result into (allows rapid releasing resulting object handles using releaseObjectGroup). + */ + objectGroup?: string | undefined; + /** + * Specifies whether command line API should be available to the evaluated expression, defaults to false. + */ + includeCommandLineAPI?: boolean | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Whether the result is expected to be a JSON object that should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + * @experimental + */ + generatePreview?: boolean | undefined; + /** + * Whether to throw an exception if side effect cannot be ruled out during evaluation. + */ + throwOnSideEffect?: boolean | undefined; + } + interface SetVariableValueParameterType { + /** + * 0-based number of scope as was listed in scope chain. Only 'local', 'closure' and 'catch' scope types are allowed. Other scopes could be manipulated manually. + */ + scopeNumber: number; + /** + * Variable name. + */ + variableName: string; + /** + * New variable value. + */ + newValue: Runtime.CallArgument; + /** + * Id of callframe that holds variable. + */ + callFrameId: CallFrameId; + } + interface SetReturnValueParameterType { + /** + * New return value. + */ + newValue: Runtime.CallArgument; + } + interface SetAsyncCallStackDepthParameterType { + /** + * Maximum depth of async call stacks. Setting to 0 will effectively disable collecting async call stacks (default). + */ + maxDepth: number; + } + interface SetBlackboxPatternsParameterType { + /** + * Array of regexps that will be used to check script url for blackbox state. + */ + patterns: string[]; + } + interface SetBlackboxedRangesParameterType { + /** + * Id of the script. + */ + scriptId: Runtime.ScriptId; + positions: ScriptPosition[]; + } + interface EnableReturnType { + /** + * Unique identifier of the debugger. + * @experimental + */ + debuggerId: Runtime.UniqueDebuggerId; + } + interface SetBreakpointByUrlReturnType { + /** + * Id of the created breakpoint for further reference. + */ + breakpointId: BreakpointId; + /** + * List of the locations this breakpoint resolved into upon addition. + */ + locations: Location[]; + } + interface SetBreakpointReturnType { + /** + * Id of the created breakpoint for further reference. + */ + breakpointId: BreakpointId; + /** + * Location this breakpoint resolved into. + */ + actualLocation: Location; + } + interface GetPossibleBreakpointsReturnType { + /** + * List of the possible breakpoint locations. + */ + locations: BreakLocation[]; + } + interface GetStackTraceReturnType { + stackTrace: Runtime.StackTrace; + } + interface SearchInContentReturnType { + /** + * List of search matches. + */ + result: SearchMatch[]; + } + interface SetScriptSourceReturnType { + /** + * New stack trace in case editing has happened while VM was stopped. + */ + callFrames?: CallFrame[] | undefined; + /** + * Whether current call stack was modified after applying the changes. + */ + stackChanged?: boolean | undefined; + /** + * Async stack trace, if any. + */ + asyncStackTrace?: Runtime.StackTrace | undefined; + /** + * Async stack trace, if any. + * @experimental + */ + asyncStackTraceId?: Runtime.StackTraceId | undefined; + /** + * Exception details if any. + */ + exceptionDetails?: Runtime.ExceptionDetails | undefined; + } + interface RestartFrameReturnType { + /** + * New stack trace. + */ + callFrames: CallFrame[]; + /** + * Async stack trace, if any. + */ + asyncStackTrace?: Runtime.StackTrace | undefined; + /** + * Async stack trace, if any. + * @experimental + */ + asyncStackTraceId?: Runtime.StackTraceId | undefined; + } + interface GetScriptSourceReturnType { + /** + * Script source. + */ + scriptSource: string; + } + interface EvaluateOnCallFrameReturnType { + /** + * Object wrapper for the evaluation result. + */ + result: Runtime.RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: Runtime.ExceptionDetails | undefined; + } + interface ScriptParsedEventDataType { + /** + * Identifier of the script parsed. + */ + scriptId: Runtime.ScriptId; + /** + * URL or name of the script parsed (if any). + */ + url: string; + /** + * Line offset of the script within the resource with given URL (for script tags). + */ + startLine: number; + /** + * Column offset of the script within the resource with given URL. + */ + startColumn: number; + /** + * Last line of the script. + */ + endLine: number; + /** + * Length of the last line of the script. + */ + endColumn: number; + /** + * Specifies script creation context. + */ + executionContextId: Runtime.ExecutionContextId; + /** + * Content hash of the script. + */ + hash: string; + /** + * Embedder-specific auxiliary data. + */ + executionContextAuxData?: object | undefined; + /** + * True, if this script is generated as a result of the live edit operation. + * @experimental + */ + isLiveEdit?: boolean | undefined; + /** + * URL of source map associated with script (if any). + */ + sourceMapURL?: string | undefined; + /** + * True, if this script has sourceURL. + */ + hasSourceURL?: boolean | undefined; + /** + * True, if this script is ES6 module. + */ + isModule?: boolean | undefined; + /** + * This script length. + */ + length?: number | undefined; + /** + * JavaScript top stack frame of where the script parsed event was triggered if available. + * @experimental + */ + stackTrace?: Runtime.StackTrace | undefined; + } + interface ScriptFailedToParseEventDataType { + /** + * Identifier of the script parsed. + */ + scriptId: Runtime.ScriptId; + /** + * URL or name of the script parsed (if any). + */ + url: string; + /** + * Line offset of the script within the resource with given URL (for script tags). + */ + startLine: number; + /** + * Column offset of the script within the resource with given URL. + */ + startColumn: number; + /** + * Last line of the script. + */ + endLine: number; + /** + * Length of the last line of the script. + */ + endColumn: number; + /** + * Specifies script creation context. + */ + executionContextId: Runtime.ExecutionContextId; + /** + * Content hash of the script. + */ + hash: string; + /** + * Embedder-specific auxiliary data. + */ + executionContextAuxData?: object | undefined; + /** + * URL of source map associated with script (if any). + */ + sourceMapURL?: string | undefined; + /** + * True, if this script has sourceURL. + */ + hasSourceURL?: boolean | undefined; + /** + * True, if this script is ES6 module. + */ + isModule?: boolean | undefined; + /** + * This script length. + */ + length?: number | undefined; + /** + * JavaScript top stack frame of where the script parsed event was triggered if available. + * @experimental + */ + stackTrace?: Runtime.StackTrace | undefined; + } + interface BreakpointResolvedEventDataType { + /** + * Breakpoint unique identifier. + */ + breakpointId: BreakpointId; + /** + * Actual breakpoint location. + */ + location: Location; + } + interface PausedEventDataType { + /** + * Call stack the virtual machine stopped on. + */ + callFrames: CallFrame[]; + /** + * Pause reason. + */ + reason: string; + /** + * Object containing break-specific auxiliary properties. + */ + data?: object | undefined; + /** + * Hit breakpoints IDs + */ + hitBreakpoints?: string[] | undefined; + /** + * Async stack trace, if any. + */ + asyncStackTrace?: Runtime.StackTrace | undefined; + /** + * Async stack trace, if any. + * @experimental + */ + asyncStackTraceId?: Runtime.StackTraceId | undefined; + /** + * Just scheduled async call will have this stack trace as parent stack during async execution. This field is available only after Debugger.stepInto call with breakOnAsynCall flag. + * @experimental + */ + asyncCallStackTraceId?: Runtime.StackTraceId | undefined; + } + } + namespace Console { + /** + * Console message. + */ + interface ConsoleMessage { + /** + * Message source. + */ + source: string; + /** + * Message severity. + */ + level: string; + /** + * Message text. + */ + text: string; + /** + * URL of the message origin. + */ + url?: string | undefined; + /** + * Line number in the resource that generated this message (1-based). + */ + line?: number | undefined; + /** + * Column number in the resource that generated this message (1-based). + */ + column?: number | undefined; + } + interface MessageAddedEventDataType { + /** + * Console message that has been added. + */ + message: ConsoleMessage; + } + } + namespace Profiler { + /** + * Profile node. Holds callsite information, execution statistics and child nodes. + */ + interface ProfileNode { + /** + * Unique id of the node. + */ + id: number; + /** + * Function location. + */ + callFrame: Runtime.CallFrame; + /** + * Number of samples where this node was on top of the call stack. + */ + hitCount?: number | undefined; + /** + * Child node ids. + */ + children?: number[] | undefined; + /** + * The reason of being not optimized. The function may be deoptimized or marked as don't optimize. + */ + deoptReason?: string | undefined; + /** + * An array of source position ticks. + */ + positionTicks?: PositionTickInfo[] | undefined; + } + /** + * Profile. + */ + interface Profile { + /** + * The list of profile nodes. First item is the root node. + */ + nodes: ProfileNode[]; + /** + * Profiling start timestamp in microseconds. + */ + startTime: number; + /** + * Profiling end timestamp in microseconds. + */ + endTime: number; + /** + * Ids of samples top nodes. + */ + samples?: number[] | undefined; + /** + * Time intervals between adjacent samples in microseconds. The first delta is relative to the profile startTime. + */ + timeDeltas?: number[] | undefined; + } + /** + * Specifies a number of samples attributed to a certain source position. + */ + interface PositionTickInfo { + /** + * Source line number (1-based). + */ + line: number; + /** + * Number of samples attributed to the source line. + */ + ticks: number; + } + /** + * Coverage data for a source range. + */ + interface CoverageRange { + /** + * JavaScript script source offset for the range start. + */ + startOffset: number; + /** + * JavaScript script source offset for the range end. + */ + endOffset: number; + /** + * Collected execution count of the source range. + */ + count: number; + } + /** + * Coverage data for a JavaScript function. + */ + interface FunctionCoverage { + /** + * JavaScript function name. + */ + functionName: string; + /** + * Source ranges inside the function with coverage data. + */ + ranges: CoverageRange[]; + /** + * Whether coverage data for this function has block granularity. + */ + isBlockCoverage: boolean; + } + /** + * Coverage data for a JavaScript script. + */ + interface ScriptCoverage { + /** + * JavaScript script id. + */ + scriptId: Runtime.ScriptId; + /** + * JavaScript script name or url. + */ + url: string; + /** + * Functions contained in the script that has coverage data. + */ + functions: FunctionCoverage[]; + } + interface SetSamplingIntervalParameterType { + /** + * New sampling interval in microseconds. + */ + interval: number; + } + interface StartPreciseCoverageParameterType { + /** + * Collect accurate call counts beyond simple 'covered' or 'not covered'. + */ + callCount?: boolean | undefined; + /** + * Collect block-based coverage. + */ + detailed?: boolean | undefined; + } + interface StopReturnType { + /** + * Recorded profile. + */ + profile: Profile; + } + interface TakePreciseCoverageReturnType { + /** + * Coverage data for the current isolate. + */ + result: ScriptCoverage[]; + } + interface GetBestEffortCoverageReturnType { + /** + * Coverage data for the current isolate. + */ + result: ScriptCoverage[]; + } + interface ConsoleProfileStartedEventDataType { + id: string; + /** + * Location of console.profile(). + */ + location: Debugger.Location; + /** + * Profile title passed as an argument to console.profile(). + */ + title?: string | undefined; + } + interface ConsoleProfileFinishedEventDataType { + id: string; + /** + * Location of console.profileEnd(). + */ + location: Debugger.Location; + profile: Profile; + /** + * Profile title passed as an argument to console.profile(). + */ + title?: string | undefined; + } + } + namespace HeapProfiler { + /** + * Heap snapshot object id. + */ + type HeapSnapshotObjectId = string; + /** + * Sampling Heap Profile node. Holds callsite information, allocation statistics and child nodes. + */ + interface SamplingHeapProfileNode { + /** + * Function location. + */ + callFrame: Runtime.CallFrame; + /** + * Allocations size in bytes for the node excluding children. + */ + selfSize: number; + /** + * Child nodes. + */ + children: SamplingHeapProfileNode[]; + } + /** + * Profile. + */ + interface SamplingHeapProfile { + head: SamplingHeapProfileNode; + } + interface StartTrackingHeapObjectsParameterType { + trackAllocations?: boolean | undefined; + } + interface StopTrackingHeapObjectsParameterType { + /** + * If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken when the tracking is stopped. + */ + reportProgress?: boolean | undefined; + } + interface TakeHeapSnapshotParameterType { + /** + * If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken. + */ + reportProgress?: boolean | undefined; + } + interface GetObjectByHeapObjectIdParameterType { + objectId: HeapSnapshotObjectId; + /** + * Symbolic group name that can be used to release multiple objects. + */ + objectGroup?: string | undefined; + } + interface AddInspectedHeapObjectParameterType { + /** + * Heap snapshot object id to be accessible by means of $x command line API. + */ + heapObjectId: HeapSnapshotObjectId; + } + interface GetHeapObjectIdParameterType { + /** + * Identifier of the object to get heap object id for. + */ + objectId: Runtime.RemoteObjectId; + } + interface StartSamplingParameterType { + /** + * Average sample interval in bytes. Poisson distribution is used for the intervals. The default value is 32768 bytes. + */ + samplingInterval?: number | undefined; + } + interface GetObjectByHeapObjectIdReturnType { + /** + * Evaluation result. + */ + result: Runtime.RemoteObject; + } + interface GetHeapObjectIdReturnType { + /** + * Id of the heap snapshot object corresponding to the passed remote object id. + */ + heapSnapshotObjectId: HeapSnapshotObjectId; + } + interface StopSamplingReturnType { + /** + * Recorded sampling heap profile. + */ + profile: SamplingHeapProfile; + } + interface GetSamplingProfileReturnType { + /** + * Return the sampling profile being collected. + */ + profile: SamplingHeapProfile; + } + interface AddHeapSnapshotChunkEventDataType { + chunk: string; + } + interface ReportHeapSnapshotProgressEventDataType { + done: number; + total: number; + finished?: boolean | undefined; + } + interface LastSeenObjectIdEventDataType { + lastSeenObjectId: number; + timestamp: number; + } + interface HeapStatsUpdateEventDataType { + /** + * An array of triplets. Each triplet describes a fragment. The first integer is the fragment index, the second integer is a total count of objects for the fragment, the third integer is a total size of the objects for the fragment. + */ + statsUpdate: number[]; + } + } + namespace NodeTracing { + interface TraceConfig { + /** + * Controls how the trace buffer stores data. + */ + recordMode?: string | undefined; + /** + * Included category filters. + */ + includedCategories: string[]; + } + interface StartParameterType { + traceConfig: TraceConfig; + } + interface GetCategoriesReturnType { + /** + * A list of supported tracing categories. + */ + categories: string[]; + } + interface DataCollectedEventDataType { + value: object[]; + } + } + namespace NodeWorker { + type WorkerID = string; + /** + * Unique identifier of attached debugging session. + */ + type SessionID = string; + interface WorkerInfo { + workerId: WorkerID; + type: string; + title: string; + url: string; + } + interface SendMessageToWorkerParameterType { + message: string; + /** + * Identifier of the session. + */ + sessionId: SessionID; + } + interface EnableParameterType { + /** + * Whether to new workers should be paused until the frontend sends `Runtime.runIfWaitingForDebugger` + * message to run them. + */ + waitForDebuggerOnStart: boolean; + } + interface DetachParameterType { + sessionId: SessionID; + } + interface AttachedToWorkerEventDataType { + /** + * Identifier assigned to the session used to send/receive messages. + */ + sessionId: SessionID; + workerInfo: WorkerInfo; + waitingForDebugger: boolean; + } + interface DetachedFromWorkerEventDataType { + /** + * Detached session identifier. + */ + sessionId: SessionID; + } + interface ReceivedMessageFromWorkerEventDataType { + /** + * Identifier of a session which sends a message. + */ + sessionId: SessionID; + message: string; + } + } + namespace Network { + /** + * Resource type as it was perceived by the rendering engine. + */ + type ResourceType = string; + /** + * Unique request identifier. + */ + type RequestId = string; + /** + * UTC time in seconds, counted from January 1, 1970. + */ + type TimeSinceEpoch = number; + /** + * Monotonically increasing time in seconds since an arbitrary point in the past. + */ + type MonotonicTime = number; + /** + * Information about the request initiator. + */ + interface Initiator { + /** + * Type of this initiator. + */ + type: string; + /** + * Initiator JavaScript stack trace, set for Script only. + * Requires the Debugger domain to be enabled. + */ + stack?: Runtime.StackTrace | undefined; + /** + * Initiator URL, set for Parser type or for Script type (when script is importing module) or for SignedExchange type. + */ + url?: string | undefined; + /** + * Initiator line number, set for Parser type or for Script type (when script is importing + * module) (0-based). + */ + lineNumber?: number | undefined; + /** + * Initiator column number, set for Parser type or for Script type (when script is importing + * module) (0-based). + */ + columnNumber?: number | undefined; + /** + * Set if another request triggered this request (e.g. preflight). + */ + requestId?: RequestId | undefined; + } + /** + * HTTP request data. + */ + interface Request { + url: string; + method: string; + headers: Headers; + hasPostData: boolean; + } + /** + * HTTP response data. + */ + interface Response { + url: string; + status: number; + statusText: string; + headers: Headers; + mimeType: string; + charset: string; + } + /** + * Request / response headers as keys / values of JSON object. + */ + interface Headers { + } + interface LoadNetworkResourcePageResult { + success: boolean; + stream?: IO.StreamHandle | undefined; + } + /** + * WebSocket response data. + */ + interface WebSocketResponse { + /** + * HTTP response status code. + */ + status: number; + /** + * HTTP response status text. + */ + statusText: string; + /** + * HTTP response headers. + */ + headers: Headers; + } + interface GetRequestPostDataParameterType { + /** + * Identifier of the network request to get content for. + */ + requestId: RequestId; + } + interface GetResponseBodyParameterType { + /** + * Identifier of the network request to get content for. + */ + requestId: RequestId; + } + interface StreamResourceContentParameterType { + /** + * Identifier of the request to stream. + */ + requestId: RequestId; + } + interface LoadNetworkResourceParameterType { + /** + * URL of the resource to get content for. + */ + url: string; + } + interface GetRequestPostDataReturnType { + /** + * Request body string, omitting files from multipart requests + */ + postData: string; + } + interface GetResponseBodyReturnType { + /** + * Response body. + */ + body: string; + /** + * True, if content was sent as base64. + */ + base64Encoded: boolean; + } + interface StreamResourceContentReturnType { + /** + * Data that has been buffered until streaming is enabled. + */ + bufferedData: string; + } + interface LoadNetworkResourceReturnType { + resource: LoadNetworkResourcePageResult; + } + interface RequestWillBeSentEventDataType { + /** + * Request identifier. + */ + requestId: RequestId; + /** + * Request data. + */ + request: Request; + /** + * Request initiator. + */ + initiator: Initiator; + /** + * Timestamp. + */ + timestamp: MonotonicTime; + /** + * Timestamp. + */ + wallTime: TimeSinceEpoch; + } + interface ResponseReceivedEventDataType { + /** + * Request identifier. + */ + requestId: RequestId; + /** + * Timestamp. + */ + timestamp: MonotonicTime; + /** + * Resource type. + */ + type: ResourceType; + /** + * Response data. + */ + response: Response; + } + interface LoadingFailedEventDataType { + /** + * Request identifier. + */ + requestId: RequestId; + /** + * Timestamp. + */ + timestamp: MonotonicTime; + /** + * Resource type. + */ + type: ResourceType; + /** + * Error message. + */ + errorText: string; + } + interface LoadingFinishedEventDataType { + /** + * Request identifier. + */ + requestId: RequestId; + /** + * Timestamp. + */ + timestamp: MonotonicTime; + } + interface DataReceivedEventDataType { + /** + * Request identifier. + */ + requestId: RequestId; + /** + * Timestamp. + */ + timestamp: MonotonicTime; + /** + * Data chunk length. + */ + dataLength: number; + /** + * Actual bytes received (might be less than dataLength for compressed encodings). + */ + encodedDataLength: number; + /** + * Data that was received. + * @experimental + */ + data?: string | undefined; + } + interface WebSocketCreatedEventDataType { + /** + * Request identifier. + */ + requestId: RequestId; + /** + * WebSocket request URL. + */ + url: string; + /** + * Request initiator. + */ + initiator: Initiator; + } + interface WebSocketClosedEventDataType { + /** + * Request identifier. + */ + requestId: RequestId; + /** + * Timestamp. + */ + timestamp: MonotonicTime; + } + interface WebSocketHandshakeResponseReceivedEventDataType { + /** + * Request identifier. + */ + requestId: RequestId; + /** + * Timestamp. + */ + timestamp: MonotonicTime; + /** + * WebSocket response data. + */ + response: WebSocketResponse; + } + } + namespace NodeRuntime { + interface NotifyWhenWaitingForDisconnectParameterType { + enabled: boolean; + } + } + namespace Target { + type SessionID = string; + type TargetID = string; + interface TargetInfo { + targetId: TargetID; + type: string; + title: string; + url: string; + attached: boolean; + canAccessOpener: boolean; + } + interface SetAutoAttachParameterType { + autoAttach: boolean; + waitForDebuggerOnStart: boolean; + } + interface TargetCreatedEventDataType { + targetInfo: TargetInfo; + } + interface AttachedToTargetEventDataType { + sessionId: SessionID; + targetInfo: TargetInfo; + waitingForDebugger: boolean; + } + } + namespace IO { + type StreamHandle = string; + interface ReadParameterType { + /** + * Handle of the stream to read. + */ + handle: StreamHandle; + /** + * Seek to the specified offset before reading (if not specified, proceed with offset + * following the last read). Some types of streams may only support sequential reads. + */ + offset?: number | undefined; + /** + * Maximum number of bytes to read (left upon the agent discretion if not specified). + */ + size?: number | undefined; + } + interface CloseParameterType { + /** + * Handle of the stream to close. + */ + handle: StreamHandle; + } + interface ReadReturnType { + /** + * Data that were read. + */ + data: string; + /** + * Set if the end-of-file condition occurred while reading. + */ + eof: boolean; + } + } + + interface Session { + /** + * Posts a message to the inspector back-end. `callback` will be notified when + * a response is received. `callback` is a function that accepts two optional + * arguments: error and message-specific result. + * + * ```js + * session.post('Runtime.evaluate', { expression: '2 + 2' }, + * (error, { result }) => console.log(result)); + * // Output: { type: 'number', value: 4, description: '4' } + * ``` + * + * The latest version of the V8 inspector protocol is published on the + * [Chrome DevTools Protocol Viewer](https://chromedevtools.github.io/devtools-protocol/v8/). + * + * Node.js inspector supports all the Chrome DevTools Protocol domains declared + * by V8. Chrome DevTools Protocol domain provides an interface for interacting + * with one of the runtime agents used to inspect the application state and listen + * to the run-time events. + */ + post(method: string, callback?: (err: Error | null, params?: object) => void): void; + post(method: string, params?: object, callback?: (err: Error | null, params?: object) => void): void; + /** + * Returns supported domains. + */ + post(method: "Schema.getDomains", callback?: (err: Error | null, params: Schema.GetDomainsReturnType) => void): void; + /** + * Evaluates expression on global object. + */ + post(method: "Runtime.evaluate", params?: Runtime.EvaluateParameterType, callback?: (err: Error | null, params: Runtime.EvaluateReturnType) => void): void; + post(method: "Runtime.evaluate", callback?: (err: Error | null, params: Runtime.EvaluateReturnType) => void): void; + /** + * Add handler to promise with given promise object id. + */ + post(method: "Runtime.awaitPromise", params?: Runtime.AwaitPromiseParameterType, callback?: (err: Error | null, params: Runtime.AwaitPromiseReturnType) => void): void; + post(method: "Runtime.awaitPromise", callback?: (err: Error | null, params: Runtime.AwaitPromiseReturnType) => void): void; + /** + * Calls function with given declaration on the given object. Object group of the result is inherited from the target object. + */ + post(method: "Runtime.callFunctionOn", params?: Runtime.CallFunctionOnParameterType, callback?: (err: Error | null, params: Runtime.CallFunctionOnReturnType) => void): void; + post(method: "Runtime.callFunctionOn", callback?: (err: Error | null, params: Runtime.CallFunctionOnReturnType) => void): void; + /** + * Returns properties of a given object. Object group of the result is inherited from the target object. + */ + post(method: "Runtime.getProperties", params?: Runtime.GetPropertiesParameterType, callback?: (err: Error | null, params: Runtime.GetPropertiesReturnType) => void): void; + post(method: "Runtime.getProperties", callback?: (err: Error | null, params: Runtime.GetPropertiesReturnType) => void): void; + /** + * Releases remote object with given id. + */ + post(method: "Runtime.releaseObject", params?: Runtime.ReleaseObjectParameterType, callback?: (err: Error | null) => void): void; + post(method: "Runtime.releaseObject", callback?: (err: Error | null) => void): void; + /** + * Releases all remote objects that belong to a given group. + */ + post(method: "Runtime.releaseObjectGroup", params?: Runtime.ReleaseObjectGroupParameterType, callback?: (err: Error | null) => void): void; + post(method: "Runtime.releaseObjectGroup", callback?: (err: Error | null) => void): void; + /** + * Tells inspected instance to run if it was waiting for debugger to attach. + */ + post(method: "Runtime.runIfWaitingForDebugger", callback?: (err: Error | null) => void): void; + /** + * Enables reporting of execution contexts creation by means of executionContextCreated event. When the reporting gets enabled the event will be sent immediately for each existing execution context. + */ + post(method: "Runtime.enable", callback?: (err: Error | null) => void): void; + /** + * Disables reporting of execution contexts creation. + */ + post(method: "Runtime.disable", callback?: (err: Error | null) => void): void; + /** + * Discards collected exceptions and console API calls. + */ + post(method: "Runtime.discardConsoleEntries", callback?: (err: Error | null) => void): void; + /** + * @experimental + */ + post(method: "Runtime.setCustomObjectFormatterEnabled", params?: Runtime.SetCustomObjectFormatterEnabledParameterType, callback?: (err: Error | null) => void): void; + post(method: "Runtime.setCustomObjectFormatterEnabled", callback?: (err: Error | null) => void): void; + /** + * Compiles expression. + */ + post(method: "Runtime.compileScript", params?: Runtime.CompileScriptParameterType, callback?: (err: Error | null, params: Runtime.CompileScriptReturnType) => void): void; + post(method: "Runtime.compileScript", callback?: (err: Error | null, params: Runtime.CompileScriptReturnType) => void): void; + /** + * Runs script with given id in a given context. + */ + post(method: "Runtime.runScript", params?: Runtime.RunScriptParameterType, callback?: (err: Error | null, params: Runtime.RunScriptReturnType) => void): void; + post(method: "Runtime.runScript", callback?: (err: Error | null, params: Runtime.RunScriptReturnType) => void): void; + post(method: "Runtime.queryObjects", params?: Runtime.QueryObjectsParameterType, callback?: (err: Error | null, params: Runtime.QueryObjectsReturnType) => void): void; + post(method: "Runtime.queryObjects", callback?: (err: Error | null, params: Runtime.QueryObjectsReturnType) => void): void; + /** + * Returns all let, const and class variables from global scope. + */ + post( + method: "Runtime.globalLexicalScopeNames", + params?: Runtime.GlobalLexicalScopeNamesParameterType, + callback?: (err: Error | null, params: Runtime.GlobalLexicalScopeNamesReturnType) => void + ): void; + post(method: "Runtime.globalLexicalScopeNames", callback?: (err: Error | null, params: Runtime.GlobalLexicalScopeNamesReturnType) => void): void; + /** + * Enables debugger for the given page. Clients should not assume that the debugging has been enabled until the result for this command is received. + */ + post(method: "Debugger.enable", callback?: (err: Error | null, params: Debugger.EnableReturnType) => void): void; + /** + * Disables debugger for given page. + */ + post(method: "Debugger.disable", callback?: (err: Error | null) => void): void; + /** + * Activates / deactivates all breakpoints on the page. + */ + post(method: "Debugger.setBreakpointsActive", params?: Debugger.SetBreakpointsActiveParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setBreakpointsActive", callback?: (err: Error | null) => void): void; + /** + * Makes page not interrupt on any pauses (breakpoint, exception, dom exception etc). + */ + post(method: "Debugger.setSkipAllPauses", params?: Debugger.SetSkipAllPausesParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setSkipAllPauses", callback?: (err: Error | null) => void): void; + /** + * Sets JavaScript breakpoint at given location specified either by URL or URL regex. Once this command is issued, all existing parsed scripts will have breakpoints resolved and returned in locations property. Further matching script parsing will result in subsequent breakpointResolved events issued. This logical breakpoint will survive page reloads. + */ + post(method: "Debugger.setBreakpointByUrl", params?: Debugger.SetBreakpointByUrlParameterType, callback?: (err: Error | null, params: Debugger.SetBreakpointByUrlReturnType) => void): void; + post(method: "Debugger.setBreakpointByUrl", callback?: (err: Error | null, params: Debugger.SetBreakpointByUrlReturnType) => void): void; + /** + * Sets JavaScript breakpoint at a given location. + */ + post(method: "Debugger.setBreakpoint", params?: Debugger.SetBreakpointParameterType, callback?: (err: Error | null, params: Debugger.SetBreakpointReturnType) => void): void; + post(method: "Debugger.setBreakpoint", callback?: (err: Error | null, params: Debugger.SetBreakpointReturnType) => void): void; + /** + * Removes JavaScript breakpoint. + */ + post(method: "Debugger.removeBreakpoint", params?: Debugger.RemoveBreakpointParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.removeBreakpoint", callback?: (err: Error | null) => void): void; + /** + * Returns possible locations for breakpoint. scriptId in start and end range locations should be the same. + */ + post( + method: "Debugger.getPossibleBreakpoints", + params?: Debugger.GetPossibleBreakpointsParameterType, + callback?: (err: Error | null, params: Debugger.GetPossibleBreakpointsReturnType) => void + ): void; + post(method: "Debugger.getPossibleBreakpoints", callback?: (err: Error | null, params: Debugger.GetPossibleBreakpointsReturnType) => void): void; + /** + * Continues execution until specific location is reached. + */ + post(method: "Debugger.continueToLocation", params?: Debugger.ContinueToLocationParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.continueToLocation", callback?: (err: Error | null) => void): void; + /** + * @experimental + */ + post(method: "Debugger.pauseOnAsyncCall", params?: Debugger.PauseOnAsyncCallParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.pauseOnAsyncCall", callback?: (err: Error | null) => void): void; + /** + * Steps over the statement. + */ + post(method: "Debugger.stepOver", callback?: (err: Error | null) => void): void; + /** + * Steps into the function call. + */ + post(method: "Debugger.stepInto", params?: Debugger.StepIntoParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.stepInto", callback?: (err: Error | null) => void): void; + /** + * Steps out of the function call. + */ + post(method: "Debugger.stepOut", callback?: (err: Error | null) => void): void; + /** + * Stops on the next JavaScript statement. + */ + post(method: "Debugger.pause", callback?: (err: Error | null) => void): void; + /** + * This method is deprecated - use Debugger.stepInto with breakOnAsyncCall and Debugger.pauseOnAsyncTask instead. Steps into next scheduled async task if any is scheduled before next pause. Returns success when async task is actually scheduled, returns error if no task were scheduled or another scheduleStepIntoAsync was called. + * @experimental + */ + post(method: "Debugger.scheduleStepIntoAsync", callback?: (err: Error | null) => void): void; + /** + * Resumes JavaScript execution. + */ + post(method: "Debugger.resume", callback?: (err: Error | null) => void): void; + /** + * Returns stack trace with given stackTraceId. + * @experimental + */ + post(method: "Debugger.getStackTrace", params?: Debugger.GetStackTraceParameterType, callback?: (err: Error | null, params: Debugger.GetStackTraceReturnType) => void): void; + post(method: "Debugger.getStackTrace", callback?: (err: Error | null, params: Debugger.GetStackTraceReturnType) => void): void; + /** + * Searches for given string in script content. + */ + post(method: "Debugger.searchInContent", params?: Debugger.SearchInContentParameterType, callback?: (err: Error | null, params: Debugger.SearchInContentReturnType) => void): void; + post(method: "Debugger.searchInContent", callback?: (err: Error | null, params: Debugger.SearchInContentReturnType) => void): void; + /** + * Edits JavaScript source live. + */ + post(method: "Debugger.setScriptSource", params?: Debugger.SetScriptSourceParameterType, callback?: (err: Error | null, params: Debugger.SetScriptSourceReturnType) => void): void; + post(method: "Debugger.setScriptSource", callback?: (err: Error | null, params: Debugger.SetScriptSourceReturnType) => void): void; + /** + * Restarts particular call frame from the beginning. + */ + post(method: "Debugger.restartFrame", params?: Debugger.RestartFrameParameterType, callback?: (err: Error | null, params: Debugger.RestartFrameReturnType) => void): void; + post(method: "Debugger.restartFrame", callback?: (err: Error | null, params: Debugger.RestartFrameReturnType) => void): void; + /** + * Returns source for the script with given id. + */ + post(method: "Debugger.getScriptSource", params?: Debugger.GetScriptSourceParameterType, callback?: (err: Error | null, params: Debugger.GetScriptSourceReturnType) => void): void; + post(method: "Debugger.getScriptSource", callback?: (err: Error | null, params: Debugger.GetScriptSourceReturnType) => void): void; + /** + * Defines pause on exceptions state. Can be set to stop on all exceptions, uncaught exceptions or no exceptions. Initial pause on exceptions state is none. + */ + post(method: "Debugger.setPauseOnExceptions", params?: Debugger.SetPauseOnExceptionsParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setPauseOnExceptions", callback?: (err: Error | null) => void): void; + /** + * Evaluates expression on a given call frame. + */ + post(method: "Debugger.evaluateOnCallFrame", params?: Debugger.EvaluateOnCallFrameParameterType, callback?: (err: Error | null, params: Debugger.EvaluateOnCallFrameReturnType) => void): void; + post(method: "Debugger.evaluateOnCallFrame", callback?: (err: Error | null, params: Debugger.EvaluateOnCallFrameReturnType) => void): void; + /** + * Changes value of variable in a callframe. Object-based scopes are not supported and must be mutated manually. + */ + post(method: "Debugger.setVariableValue", params?: Debugger.SetVariableValueParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setVariableValue", callback?: (err: Error | null) => void): void; + /** + * Changes return value in top frame. Available only at return break position. + * @experimental + */ + post(method: "Debugger.setReturnValue", params?: Debugger.SetReturnValueParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setReturnValue", callback?: (err: Error | null) => void): void; + /** + * Enables or disables async call stacks tracking. + */ + post(method: "Debugger.setAsyncCallStackDepth", params?: Debugger.SetAsyncCallStackDepthParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setAsyncCallStackDepth", callback?: (err: Error | null) => void): void; + /** + * Replace previous blackbox patterns with passed ones. Forces backend to skip stepping/pausing in scripts with url matching one of the patterns. VM will try to leave blackboxed script by performing 'step in' several times, finally resorting to 'step out' if unsuccessful. + * @experimental + */ + post(method: "Debugger.setBlackboxPatterns", params?: Debugger.SetBlackboxPatternsParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setBlackboxPatterns", callback?: (err: Error | null) => void): void; + /** + * Makes backend skip steps in the script in blackboxed ranges. VM will try leave blacklisted scripts by performing 'step in' several times, finally resorting to 'step out' if unsuccessful. Positions array contains positions where blackbox state is changed. First interval isn't blackboxed. Array should be sorted. + * @experimental + */ + post(method: "Debugger.setBlackboxedRanges", params?: Debugger.SetBlackboxedRangesParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setBlackboxedRanges", callback?: (err: Error | null) => void): void; + /** + * Enables console domain, sends the messages collected so far to the client by means of the messageAdded notification. + */ + post(method: "Console.enable", callback?: (err: Error | null) => void): void; + /** + * Disables console domain, prevents further console messages from being reported to the client. + */ + post(method: "Console.disable", callback?: (err: Error | null) => void): void; + /** + * Does nothing. + */ + post(method: "Console.clearMessages", callback?: (err: Error | null) => void): void; + post(method: "Profiler.enable", callback?: (err: Error | null) => void): void; + post(method: "Profiler.disable", callback?: (err: Error | null) => void): void; + /** + * Changes CPU profiler sampling interval. Must be called before CPU profiles recording started. + */ + post(method: "Profiler.setSamplingInterval", params?: Profiler.SetSamplingIntervalParameterType, callback?: (err: Error | null) => void): void; + post(method: "Profiler.setSamplingInterval", callback?: (err: Error | null) => void): void; + post(method: "Profiler.start", callback?: (err: Error | null) => void): void; + post(method: "Profiler.stop", callback?: (err: Error | null, params: Profiler.StopReturnType) => void): void; + /** + * Enable precise code coverage. Coverage data for JavaScript executed before enabling precise code coverage may be incomplete. Enabling prevents running optimized code and resets execution counters. + */ + post(method: "Profiler.startPreciseCoverage", params?: Profiler.StartPreciseCoverageParameterType, callback?: (err: Error | null) => void): void; + post(method: "Profiler.startPreciseCoverage", callback?: (err: Error | null) => void): void; + /** + * Disable precise code coverage. Disabling releases unnecessary execution count records and allows executing optimized code. + */ + post(method: "Profiler.stopPreciseCoverage", callback?: (err: Error | null) => void): void; + /** + * Collect coverage data for the current isolate, and resets execution counters. Precise code coverage needs to have started. + */ + post(method: "Profiler.takePreciseCoverage", callback?: (err: Error | null, params: Profiler.TakePreciseCoverageReturnType) => void): void; + /** + * Collect coverage data for the current isolate. The coverage data may be incomplete due to garbage collection. + */ + post(method: "Profiler.getBestEffortCoverage", callback?: (err: Error | null, params: Profiler.GetBestEffortCoverageReturnType) => void): void; + post(method: "HeapProfiler.enable", callback?: (err: Error | null) => void): void; + post(method: "HeapProfiler.disable", callback?: (err: Error | null) => void): void; + post(method: "HeapProfiler.startTrackingHeapObjects", params?: HeapProfiler.StartTrackingHeapObjectsParameterType, callback?: (err: Error | null) => void): void; + post(method: "HeapProfiler.startTrackingHeapObjects", callback?: (err: Error | null) => void): void; + post(method: "HeapProfiler.stopTrackingHeapObjects", params?: HeapProfiler.StopTrackingHeapObjectsParameterType, callback?: (err: Error | null) => void): void; + post(method: "HeapProfiler.stopTrackingHeapObjects", callback?: (err: Error | null) => void): void; + post(method: "HeapProfiler.takeHeapSnapshot", params?: HeapProfiler.TakeHeapSnapshotParameterType, callback?: (err: Error | null) => void): void; + post(method: "HeapProfiler.takeHeapSnapshot", callback?: (err: Error | null) => void): void; + post(method: "HeapProfiler.collectGarbage", callback?: (err: Error | null) => void): void; + post( + method: "HeapProfiler.getObjectByHeapObjectId", + params?: HeapProfiler.GetObjectByHeapObjectIdParameterType, + callback?: (err: Error | null, params: HeapProfiler.GetObjectByHeapObjectIdReturnType) => void + ): void; + post(method: "HeapProfiler.getObjectByHeapObjectId", callback?: (err: Error | null, params: HeapProfiler.GetObjectByHeapObjectIdReturnType) => void): void; + /** + * Enables console to refer to the node with given id via $x (see Command Line API for more details $x functions). + */ + post(method: "HeapProfiler.addInspectedHeapObject", params?: HeapProfiler.AddInspectedHeapObjectParameterType, callback?: (err: Error | null) => void): void; + post(method: "HeapProfiler.addInspectedHeapObject", callback?: (err: Error | null) => void): void; + post(method: "HeapProfiler.getHeapObjectId", params?: HeapProfiler.GetHeapObjectIdParameterType, callback?: (err: Error | null, params: HeapProfiler.GetHeapObjectIdReturnType) => void): void; + post(method: "HeapProfiler.getHeapObjectId", callback?: (err: Error | null, params: HeapProfiler.GetHeapObjectIdReturnType) => void): void; + post(method: "HeapProfiler.startSampling", params?: HeapProfiler.StartSamplingParameterType, callback?: (err: Error | null) => void): void; + post(method: "HeapProfiler.startSampling", callback?: (err: Error | null) => void): void; + post(method: "HeapProfiler.stopSampling", callback?: (err: Error | null, params: HeapProfiler.StopSamplingReturnType) => void): void; + post(method: "HeapProfiler.getSamplingProfile", callback?: (err: Error | null, params: HeapProfiler.GetSamplingProfileReturnType) => void): void; + /** + * Gets supported tracing categories. + */ + post(method: "NodeTracing.getCategories", callback?: (err: Error | null, params: NodeTracing.GetCategoriesReturnType) => void): void; + /** + * Start trace events collection. + */ + post(method: "NodeTracing.start", params?: NodeTracing.StartParameterType, callback?: (err: Error | null) => void): void; + post(method: "NodeTracing.start", callback?: (err: Error | null) => void): void; + /** + * Stop trace events collection. Remaining collected events will be sent as a sequence of + * dataCollected events followed by tracingComplete event. + */ + post(method: "NodeTracing.stop", callback?: (err: Error | null) => void): void; + /** + * Sends protocol message over session with given id. + */ + post(method: "NodeWorker.sendMessageToWorker", params?: NodeWorker.SendMessageToWorkerParameterType, callback?: (err: Error | null) => void): void; + post(method: "NodeWorker.sendMessageToWorker", callback?: (err: Error | null) => void): void; + /** + * Instructs the inspector to attach to running workers. Will also attach to new workers + * as they start + */ + post(method: "NodeWorker.enable", params?: NodeWorker.EnableParameterType, callback?: (err: Error | null) => void): void; + post(method: "NodeWorker.enable", callback?: (err: Error | null) => void): void; + /** + * Detaches from all running workers and disables attaching to new workers as they are started. + */ + post(method: "NodeWorker.disable", callback?: (err: Error | null) => void): void; + /** + * Detached from the worker with given sessionId. + */ + post(method: "NodeWorker.detach", params?: NodeWorker.DetachParameterType, callback?: (err: Error | null) => void): void; + post(method: "NodeWorker.detach", callback?: (err: Error | null) => void): void; + /** + * Disables network tracking, prevents network events from being sent to the client. + */ + post(method: "Network.disable", callback?: (err: Error | null) => void): void; + /** + * Enables network tracking, network events will now be delivered to the client. + */ + post(method: "Network.enable", callback?: (err: Error | null) => void): void; + /** + * Returns post data sent with the request. Returns an error when no data was sent with the request. + */ + post(method: "Network.getRequestPostData", params?: Network.GetRequestPostDataParameterType, callback?: (err: Error | null, params: Network.GetRequestPostDataReturnType) => void): void; + post(method: "Network.getRequestPostData", callback?: (err: Error | null, params: Network.GetRequestPostDataReturnType) => void): void; + /** + * Returns content served for the given request. + */ + post(method: "Network.getResponseBody", params?: Network.GetResponseBodyParameterType, callback?: (err: Error | null, params: Network.GetResponseBodyReturnType) => void): void; + post(method: "Network.getResponseBody", callback?: (err: Error | null, params: Network.GetResponseBodyReturnType) => void): void; + /** + * Enables streaming of the response for the given requestId. + * If enabled, the dataReceived event contains the data that was received during streaming. + * @experimental + */ + post( + method: "Network.streamResourceContent", + params?: Network.StreamResourceContentParameterType, + callback?: (err: Error | null, params: Network.StreamResourceContentReturnType) => void + ): void; + post(method: "Network.streamResourceContent", callback?: (err: Error | null, params: Network.StreamResourceContentReturnType) => void): void; + /** + * Fetches the resource and returns the content. + */ + post(method: "Network.loadNetworkResource", params?: Network.LoadNetworkResourceParameterType, callback?: (err: Error | null, params: Network.LoadNetworkResourceReturnType) => void): void; + post(method: "Network.loadNetworkResource", callback?: (err: Error | null, params: Network.LoadNetworkResourceReturnType) => void): void; + /** + * Enable the NodeRuntime events except by `NodeRuntime.waitingForDisconnect`. + */ + post(method: "NodeRuntime.enable", callback?: (err: Error | null) => void): void; + /** + * Disable NodeRuntime events + */ + post(method: "NodeRuntime.disable", callback?: (err: Error | null) => void): void; + /** + * Enable the `NodeRuntime.waitingForDisconnect`. + */ + post(method: "NodeRuntime.notifyWhenWaitingForDisconnect", params?: NodeRuntime.NotifyWhenWaitingForDisconnectParameterType, callback?: (err: Error | null) => void): void; + post(method: "NodeRuntime.notifyWhenWaitingForDisconnect", callback?: (err: Error | null) => void): void; + post(method: "Target.setAutoAttach", params?: Target.SetAutoAttachParameterType, callback?: (err: Error | null) => void): void; + post(method: "Target.setAutoAttach", callback?: (err: Error | null) => void): void; + /** + * Read a chunk of the stream + */ + post(method: "IO.read", params?: IO.ReadParameterType, callback?: (err: Error | null, params: IO.ReadReturnType) => void): void; + post(method: "IO.read", callback?: (err: Error | null, params: IO.ReadReturnType) => void): void; + post(method: "IO.close", params?: IO.CloseParameterType, callback?: (err: Error | null) => void): void; + post(method: "IO.close", callback?: (err: Error | null) => void): void; + + addListener(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + addListener(event: "inspectorNotification", listener: (message: InspectorNotification) => void): this; + /** + * Issued when new execution context is created. + */ + addListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + addListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + addListener(event: "Runtime.executionContextsCleared", listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + addListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + addListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + addListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + addListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + addListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + addListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + addListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + addListener(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + addListener(event: "Debugger.resumed", listener: () => void): this; + /** + * Issued when new console message is added. + */ + addListener(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + addListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; + addListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; + addListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; + addListener(event: "HeapProfiler.resetProfiles", listener: () => void): this; + addListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + addListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + addListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + addListener(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + addListener(event: "NodeTracing.tracingComplete", listener: () => void): this; + /** + * Issued when attached to a worker. + */ + addListener(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + addListener(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + addListener(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; + /** + * Fired when page is about to send HTTP request. + */ + addListener(event: "Network.requestWillBeSent", listener: (message: InspectorNotification) => void): this; + /** + * Fired when HTTP response is available. + */ + addListener(event: "Network.responseReceived", listener: (message: InspectorNotification) => void): this; + addListener(event: "Network.loadingFailed", listener: (message: InspectorNotification) => void): this; + addListener(event: "Network.loadingFinished", listener: (message: InspectorNotification) => void): this; + /** + * Fired when data chunk was received over the network. + */ + addListener(event: "Network.dataReceived", listener: (message: InspectorNotification) => void): this; + /** + * Fired upon WebSocket creation. + */ + addListener(event: "Network.webSocketCreated", listener: (message: InspectorNotification) => void): this; + /** + * Fired when WebSocket is closed. + */ + addListener(event: "Network.webSocketClosed", listener: (message: InspectorNotification) => void): this; + /** + * Fired when WebSocket handshake response becomes available. + */ + addListener(event: "Network.webSocketHandshakeResponseReceived", listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + addListener(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; + /** + * This event is fired when the runtime is waiting for the debugger. For + * example, when inspector.waitingForDebugger is called + */ + addListener(event: "NodeRuntime.waitingForDebugger", listener: () => void): this; + addListener(event: "Target.targetCreated", listener: (message: InspectorNotification) => void): this; + addListener(event: "Target.attachedToTarget", listener: (message: InspectorNotification) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "inspectorNotification", message: InspectorNotification): boolean; + emit(event: "Runtime.executionContextCreated", message: InspectorNotification): boolean; + emit(event: "Runtime.executionContextDestroyed", message: InspectorNotification): boolean; + emit(event: "Runtime.executionContextsCleared"): boolean; + emit(event: "Runtime.exceptionThrown", message: InspectorNotification): boolean; + emit(event: "Runtime.exceptionRevoked", message: InspectorNotification): boolean; + emit(event: "Runtime.consoleAPICalled", message: InspectorNotification): boolean; + emit(event: "Runtime.inspectRequested", message: InspectorNotification): boolean; + emit(event: "Debugger.scriptParsed", message: InspectorNotification): boolean; + emit(event: "Debugger.scriptFailedToParse", message: InspectorNotification): boolean; + emit(event: "Debugger.breakpointResolved", message: InspectorNotification): boolean; + emit(event: "Debugger.paused", message: InspectorNotification): boolean; + emit(event: "Debugger.resumed"): boolean; + emit(event: "Console.messageAdded", message: InspectorNotification): boolean; + emit(event: "Profiler.consoleProfileStarted", message: InspectorNotification): boolean; + emit(event: "Profiler.consoleProfileFinished", message: InspectorNotification): boolean; + emit(event: "HeapProfiler.addHeapSnapshotChunk", message: InspectorNotification): boolean; + emit(event: "HeapProfiler.resetProfiles"): boolean; + emit(event: "HeapProfiler.reportHeapSnapshotProgress", message: InspectorNotification): boolean; + emit(event: "HeapProfiler.lastSeenObjectId", message: InspectorNotification): boolean; + emit(event: "HeapProfiler.heapStatsUpdate", message: InspectorNotification): boolean; + emit(event: "NodeTracing.dataCollected", message: InspectorNotification): boolean; + emit(event: "NodeTracing.tracingComplete"): boolean; + emit(event: "NodeWorker.attachedToWorker", message: InspectorNotification): boolean; + emit(event: "NodeWorker.detachedFromWorker", message: InspectorNotification): boolean; + emit(event: "NodeWorker.receivedMessageFromWorker", message: InspectorNotification): boolean; + emit(event: "Network.requestWillBeSent", message: InspectorNotification): boolean; + emit(event: "Network.responseReceived", message: InspectorNotification): boolean; + emit(event: "Network.loadingFailed", message: InspectorNotification): boolean; + emit(event: "Network.loadingFinished", message: InspectorNotification): boolean; + emit(event: "Network.dataReceived", message: InspectorNotification): boolean; + emit(event: "Network.webSocketCreated", message: InspectorNotification): boolean; + emit(event: "Network.webSocketClosed", message: InspectorNotification): boolean; + emit(event: "Network.webSocketHandshakeResponseReceived", message: InspectorNotification): boolean; + emit(event: "NodeRuntime.waitingForDisconnect"): boolean; + emit(event: "NodeRuntime.waitingForDebugger"): boolean; + emit(event: "Target.targetCreated", message: InspectorNotification): boolean; + emit(event: "Target.attachedToTarget", message: InspectorNotification): boolean; + on(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + on(event: "inspectorNotification", listener: (message: InspectorNotification) => void): this; + /** + * Issued when new execution context is created. + */ + on(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + on(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + on(event: "Runtime.executionContextsCleared", listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + on(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + on(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + on(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + on(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + on(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + on(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + on(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + on(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + on(event: "Debugger.resumed", listener: () => void): this; + /** + * Issued when new console message is added. + */ + on(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + on(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; + on(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; + on(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; + on(event: "HeapProfiler.resetProfiles", listener: () => void): this; + on(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + on(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + on(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + on(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + on(event: "NodeTracing.tracingComplete", listener: () => void): this; + /** + * Issued when attached to a worker. + */ + on(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + on(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + on(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; + /** + * Fired when page is about to send HTTP request. + */ + on(event: "Network.requestWillBeSent", listener: (message: InspectorNotification) => void): this; + /** + * Fired when HTTP response is available. + */ + on(event: "Network.responseReceived", listener: (message: InspectorNotification) => void): this; + on(event: "Network.loadingFailed", listener: (message: InspectorNotification) => void): this; + on(event: "Network.loadingFinished", listener: (message: InspectorNotification) => void): this; + /** + * Fired when data chunk was received over the network. + */ + on(event: "Network.dataReceived", listener: (message: InspectorNotification) => void): this; + /** + * Fired upon WebSocket creation. + */ + on(event: "Network.webSocketCreated", listener: (message: InspectorNotification) => void): this; + /** + * Fired when WebSocket is closed. + */ + on(event: "Network.webSocketClosed", listener: (message: InspectorNotification) => void): this; + /** + * Fired when WebSocket handshake response becomes available. + */ + on(event: "Network.webSocketHandshakeResponseReceived", listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + on(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; + /** + * This event is fired when the runtime is waiting for the debugger. For + * example, when inspector.waitingForDebugger is called + */ + on(event: "NodeRuntime.waitingForDebugger", listener: () => void): this; + on(event: "Target.targetCreated", listener: (message: InspectorNotification) => void): this; + on(event: "Target.attachedToTarget", listener: (message: InspectorNotification) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + once(event: "inspectorNotification", listener: (message: InspectorNotification) => void): this; + /** + * Issued when new execution context is created. + */ + once(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + once(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + once(event: "Runtime.executionContextsCleared", listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + once(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + once(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + once(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + once(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + once(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + once(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + once(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + once(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + once(event: "Debugger.resumed", listener: () => void): this; + /** + * Issued when new console message is added. + */ + once(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + once(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; + once(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; + once(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; + once(event: "HeapProfiler.resetProfiles", listener: () => void): this; + once(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + once(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + once(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + once(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + once(event: "NodeTracing.tracingComplete", listener: () => void): this; + /** + * Issued when attached to a worker. + */ + once(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + once(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + once(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; + /** + * Fired when page is about to send HTTP request. + */ + once(event: "Network.requestWillBeSent", listener: (message: InspectorNotification) => void): this; + /** + * Fired when HTTP response is available. + */ + once(event: "Network.responseReceived", listener: (message: InspectorNotification) => void): this; + once(event: "Network.loadingFailed", listener: (message: InspectorNotification) => void): this; + once(event: "Network.loadingFinished", listener: (message: InspectorNotification) => void): this; + /** + * Fired when data chunk was received over the network. + */ + once(event: "Network.dataReceived", listener: (message: InspectorNotification) => void): this; + /** + * Fired upon WebSocket creation. + */ + once(event: "Network.webSocketCreated", listener: (message: InspectorNotification) => void): this; + /** + * Fired when WebSocket is closed. + */ + once(event: "Network.webSocketClosed", listener: (message: InspectorNotification) => void): this; + /** + * Fired when WebSocket handshake response becomes available. + */ + once(event: "Network.webSocketHandshakeResponseReceived", listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + once(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; + /** + * This event is fired when the runtime is waiting for the debugger. For + * example, when inspector.waitingForDebugger is called + */ + once(event: "NodeRuntime.waitingForDebugger", listener: () => void): this; + once(event: "Target.targetCreated", listener: (message: InspectorNotification) => void): this; + once(event: "Target.attachedToTarget", listener: (message: InspectorNotification) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + prependListener(event: "inspectorNotification", listener: (message: InspectorNotification) => void): this; + /** + * Issued when new execution context is created. + */ + prependListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + prependListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + prependListener(event: "Runtime.executionContextsCleared", listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + prependListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + prependListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + prependListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + prependListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + prependListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + prependListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + prependListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + prependListener(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + prependListener(event: "Debugger.resumed", listener: () => void): this; + /** + * Issued when new console message is added. + */ + prependListener(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + prependListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; + prependListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; + prependListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; + prependListener(event: "HeapProfiler.resetProfiles", listener: () => void): this; + prependListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + prependListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + prependListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + prependListener(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + prependListener(event: "NodeTracing.tracingComplete", listener: () => void): this; + /** + * Issued when attached to a worker. + */ + prependListener(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + prependListener(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + prependListener(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; + /** + * Fired when page is about to send HTTP request. + */ + prependListener(event: "Network.requestWillBeSent", listener: (message: InspectorNotification) => void): this; + /** + * Fired when HTTP response is available. + */ + prependListener(event: "Network.responseReceived", listener: (message: InspectorNotification) => void): this; + prependListener(event: "Network.loadingFailed", listener: (message: InspectorNotification) => void): this; + prependListener(event: "Network.loadingFinished", listener: (message: InspectorNotification) => void): this; + /** + * Fired when data chunk was received over the network. + */ + prependListener(event: "Network.dataReceived", listener: (message: InspectorNotification) => void): this; + /** + * Fired upon WebSocket creation. + */ + prependListener(event: "Network.webSocketCreated", listener: (message: InspectorNotification) => void): this; + /** + * Fired when WebSocket is closed. + */ + prependListener(event: "Network.webSocketClosed", listener: (message: InspectorNotification) => void): this; + /** + * Fired when WebSocket handshake response becomes available. + */ + prependListener(event: "Network.webSocketHandshakeResponseReceived", listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + prependListener(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; + /** + * This event is fired when the runtime is waiting for the debugger. For + * example, when inspector.waitingForDebugger is called + */ + prependListener(event: "NodeRuntime.waitingForDebugger", listener: () => void): this; + prependListener(event: "Target.targetCreated", listener: (message: InspectorNotification) => void): this; + prependListener(event: "Target.attachedToTarget", listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + prependOnceListener(event: "inspectorNotification", listener: (message: InspectorNotification) => void): this; + /** + * Issued when new execution context is created. + */ + prependOnceListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + prependOnceListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + prependOnceListener(event: "Runtime.executionContextsCleared", listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + prependOnceListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + prependOnceListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + prependOnceListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + prependOnceListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + prependOnceListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + prependOnceListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + prependOnceListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + prependOnceListener(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + prependOnceListener(event: "Debugger.resumed", listener: () => void): this; + /** + * Issued when new console message is added. + */ + prependOnceListener(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + prependOnceListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: "HeapProfiler.resetProfiles", listener: () => void): this; + prependOnceListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + prependOnceListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + prependOnceListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + prependOnceListener(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + prependOnceListener(event: "NodeTracing.tracingComplete", listener: () => void): this; + /** + * Issued when attached to a worker. + */ + prependOnceListener(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + prependOnceListener(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + prependOnceListener(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; + /** + * Fired when page is about to send HTTP request. + */ + prependOnceListener(event: "Network.requestWillBeSent", listener: (message: InspectorNotification) => void): this; + /** + * Fired when HTTP response is available. + */ + prependOnceListener(event: "Network.responseReceived", listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: "Network.loadingFailed", listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: "Network.loadingFinished", listener: (message: InspectorNotification) => void): this; + /** + * Fired when data chunk was received over the network. + */ + prependOnceListener(event: "Network.dataReceived", listener: (message: InspectorNotification) => void): this; + /** + * Fired upon WebSocket creation. + */ + prependOnceListener(event: "Network.webSocketCreated", listener: (message: InspectorNotification) => void): this; + /** + * Fired when WebSocket is closed. + */ + prependOnceListener(event: "Network.webSocketClosed", listener: (message: InspectorNotification) => void): this; + /** + * Fired when WebSocket handshake response becomes available. + */ + prependOnceListener(event: "Network.webSocketHandshakeResponseReceived", listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + prependOnceListener(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; + /** + * This event is fired when the runtime is waiting for the debugger. For + * example, when inspector.waitingForDebugger is called + */ + prependOnceListener(event: "NodeRuntime.waitingForDebugger", listener: () => void): this; + prependOnceListener(event: "Target.targetCreated", listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: "Target.attachedToTarget", listener: (message: InspectorNotification) => void): this; + } +} + +declare module "inspector/promises" { + export { + Schema, + Runtime, + Debugger, + Console, + Profiler, + HeapProfiler, + NodeTracing, + NodeWorker, + Network, + NodeRuntime, + Target, + IO, + } from 'inspector'; +} + +declare module "inspector/promises" { + import { + InspectorNotification, + Schema, + Runtime, + Debugger, + Console, + Profiler, + HeapProfiler, + NodeTracing, + NodeWorker, + Network, + NodeRuntime, + Target, + IO, + } from "inspector"; + + /** + * The `inspector.Session` is used for dispatching messages to the V8 inspector + * back-end and receiving message responses and notifications. + * @since v19.0.0 + */ + interface Session { + /** + * Posts a message to the inspector back-end. + * + * ```js + * import { Session } from 'node:inspector/promises'; + * try { + * const session = new Session(); + * session.connect(); + * const result = await session.post('Runtime.evaluate', { expression: '2 + 2' }); + * console.log(result); + * } catch (error) { + * console.error(error); + * } + * // Output: { result: { type: 'number', value: 4, description: '4' } } + * ``` + * + * The latest version of the V8 inspector protocol is published on the + * [Chrome DevTools Protocol Viewer](https://chromedevtools.github.io/devtools-protocol/v8/). + * + * Node.js inspector supports all the Chrome DevTools Protocol domains declared + * by V8. Chrome DevTools Protocol domain provides an interface for interacting + * with one of the runtime agents used to inspect the application state and listen + * to the run-time events. + */ + post(method: string, params?: object): Promise; + /** + * Returns supported domains. + */ + post(method: "Schema.getDomains"): Promise; + /** + * Evaluates expression on global object. + */ + post(method: "Runtime.evaluate", params?: Runtime.EvaluateParameterType): Promise; + /** + * Add handler to promise with given promise object id. + */ + post(method: "Runtime.awaitPromise", params?: Runtime.AwaitPromiseParameterType): Promise; + /** + * Calls function with given declaration on the given object. Object group of the result is inherited from the target object. + */ + post(method: "Runtime.callFunctionOn", params?: Runtime.CallFunctionOnParameterType): Promise; + /** + * Returns properties of a given object. Object group of the result is inherited from the target object. + */ + post(method: "Runtime.getProperties", params?: Runtime.GetPropertiesParameterType): Promise; + /** + * Releases remote object with given id. + */ + post(method: "Runtime.releaseObject", params?: Runtime.ReleaseObjectParameterType): Promise; + /** + * Releases all remote objects that belong to a given group. + */ + post(method: "Runtime.releaseObjectGroup", params?: Runtime.ReleaseObjectGroupParameterType): Promise; + /** + * Tells inspected instance to run if it was waiting for debugger to attach. + */ + post(method: "Runtime.runIfWaitingForDebugger"): Promise; + /** + * Enables reporting of execution contexts creation by means of executionContextCreated event. When the reporting gets enabled the event will be sent immediately for each existing execution context. + */ + post(method: "Runtime.enable"): Promise; + /** + * Disables reporting of execution contexts creation. + */ + post(method: "Runtime.disable"): Promise; + /** + * Discards collected exceptions and console API calls. + */ + post(method: "Runtime.discardConsoleEntries"): Promise; + /** + * @experimental + */ + post(method: "Runtime.setCustomObjectFormatterEnabled", params?: Runtime.SetCustomObjectFormatterEnabledParameterType): Promise; + /** + * Compiles expression. + */ + post(method: "Runtime.compileScript", params?: Runtime.CompileScriptParameterType): Promise; + /** + * Runs script with given id in a given context. + */ + post(method: "Runtime.runScript", params?: Runtime.RunScriptParameterType): Promise; + post(method: "Runtime.queryObjects", params?: Runtime.QueryObjectsParameterType): Promise; + /** + * Returns all let, const and class variables from global scope. + */ + post(method: "Runtime.globalLexicalScopeNames", params?: Runtime.GlobalLexicalScopeNamesParameterType): Promise; + /** + * Enables debugger for the given page. Clients should not assume that the debugging has been enabled until the result for this command is received. + */ + post(method: "Debugger.enable"): Promise; + /** + * Disables debugger for given page. + */ + post(method: "Debugger.disable"): Promise; + /** + * Activates / deactivates all breakpoints on the page. + */ + post(method: "Debugger.setBreakpointsActive", params?: Debugger.SetBreakpointsActiveParameterType): Promise; + /** + * Makes page not interrupt on any pauses (breakpoint, exception, dom exception etc). + */ + post(method: "Debugger.setSkipAllPauses", params?: Debugger.SetSkipAllPausesParameterType): Promise; + /** + * Sets JavaScript breakpoint at given location specified either by URL or URL regex. Once this command is issued, all existing parsed scripts will have breakpoints resolved and returned in locations property. Further matching script parsing will result in subsequent breakpointResolved events issued. This logical breakpoint will survive page reloads. + */ + post(method: "Debugger.setBreakpointByUrl", params?: Debugger.SetBreakpointByUrlParameterType): Promise; + /** + * Sets JavaScript breakpoint at a given location. + */ + post(method: "Debugger.setBreakpoint", params?: Debugger.SetBreakpointParameterType): Promise; + /** + * Removes JavaScript breakpoint. + */ + post(method: "Debugger.removeBreakpoint", params?: Debugger.RemoveBreakpointParameterType): Promise; + /** + * Returns possible locations for breakpoint. scriptId in start and end range locations should be the same. + */ + post(method: "Debugger.getPossibleBreakpoints", params?: Debugger.GetPossibleBreakpointsParameterType): Promise; + /** + * Continues execution until specific location is reached. + */ + post(method: "Debugger.continueToLocation", params?: Debugger.ContinueToLocationParameterType): Promise; + /** + * @experimental + */ + post(method: "Debugger.pauseOnAsyncCall", params?: Debugger.PauseOnAsyncCallParameterType): Promise; + /** + * Steps over the statement. + */ + post(method: "Debugger.stepOver"): Promise; + /** + * Steps into the function call. + */ + post(method: "Debugger.stepInto", params?: Debugger.StepIntoParameterType): Promise; + /** + * Steps out of the function call. + */ + post(method: "Debugger.stepOut"): Promise; + /** + * Stops on the next JavaScript statement. + */ + post(method: "Debugger.pause"): Promise; + /** + * This method is deprecated - use Debugger.stepInto with breakOnAsyncCall and Debugger.pauseOnAsyncTask instead. Steps into next scheduled async task if any is scheduled before next pause. Returns success when async task is actually scheduled, returns error if no task were scheduled or another scheduleStepIntoAsync was called. + * @experimental + */ + post(method: "Debugger.scheduleStepIntoAsync"): Promise; + /** + * Resumes JavaScript execution. + */ + post(method: "Debugger.resume"): Promise; + /** + * Returns stack trace with given stackTraceId. + * @experimental + */ + post(method: "Debugger.getStackTrace", params?: Debugger.GetStackTraceParameterType): Promise; + /** + * Searches for given string in script content. + */ + post(method: "Debugger.searchInContent", params?: Debugger.SearchInContentParameterType): Promise; + /** + * Edits JavaScript source live. + */ + post(method: "Debugger.setScriptSource", params?: Debugger.SetScriptSourceParameterType): Promise; + /** + * Restarts particular call frame from the beginning. + */ + post(method: "Debugger.restartFrame", params?: Debugger.RestartFrameParameterType): Promise; + /** + * Returns source for the script with given id. + */ + post(method: "Debugger.getScriptSource", params?: Debugger.GetScriptSourceParameterType): Promise; + /** + * Defines pause on exceptions state. Can be set to stop on all exceptions, uncaught exceptions or no exceptions. Initial pause on exceptions state is none. + */ + post(method: "Debugger.setPauseOnExceptions", params?: Debugger.SetPauseOnExceptionsParameterType): Promise; + /** + * Evaluates expression on a given call frame. + */ + post(method: "Debugger.evaluateOnCallFrame", params?: Debugger.EvaluateOnCallFrameParameterType): Promise; + /** + * Changes value of variable in a callframe. Object-based scopes are not supported and must be mutated manually. + */ + post(method: "Debugger.setVariableValue", params?: Debugger.SetVariableValueParameterType): Promise; + /** + * Changes return value in top frame. Available only at return break position. + * @experimental + */ + post(method: "Debugger.setReturnValue", params?: Debugger.SetReturnValueParameterType): Promise; + /** + * Enables or disables async call stacks tracking. + */ + post(method: "Debugger.setAsyncCallStackDepth", params?: Debugger.SetAsyncCallStackDepthParameterType): Promise; + /** + * Replace previous blackbox patterns with passed ones. Forces backend to skip stepping/pausing in scripts with url matching one of the patterns. VM will try to leave blackboxed script by performing 'step in' several times, finally resorting to 'step out' if unsuccessful. + * @experimental + */ + post(method: "Debugger.setBlackboxPatterns", params?: Debugger.SetBlackboxPatternsParameterType): Promise; + /** + * Makes backend skip steps in the script in blackboxed ranges. VM will try leave blacklisted scripts by performing 'step in' several times, finally resorting to 'step out' if unsuccessful. Positions array contains positions where blackbox state is changed. First interval isn't blackboxed. Array should be sorted. + * @experimental + */ + post(method: "Debugger.setBlackboxedRanges", params?: Debugger.SetBlackboxedRangesParameterType): Promise; + /** + * Enables console domain, sends the messages collected so far to the client by means of the messageAdded notification. + */ + post(method: "Console.enable"): Promise; + /** + * Disables console domain, prevents further console messages from being reported to the client. + */ + post(method: "Console.disable"): Promise; + /** + * Does nothing. + */ + post(method: "Console.clearMessages"): Promise; + post(method: "Profiler.enable"): Promise; + post(method: "Profiler.disable"): Promise; + /** + * Changes CPU profiler sampling interval. Must be called before CPU profiles recording started. + */ + post(method: "Profiler.setSamplingInterval", params?: Profiler.SetSamplingIntervalParameterType): Promise; + post(method: "Profiler.start"): Promise; + post(method: "Profiler.stop"): Promise; + /** + * Enable precise code coverage. Coverage data for JavaScript executed before enabling precise code coverage may be incomplete. Enabling prevents running optimized code and resets execution counters. + */ + post(method: "Profiler.startPreciseCoverage", params?: Profiler.StartPreciseCoverageParameterType): Promise; + /** + * Disable precise code coverage. Disabling releases unnecessary execution count records and allows executing optimized code. + */ + post(method: "Profiler.stopPreciseCoverage"): Promise; + /** + * Collect coverage data for the current isolate, and resets execution counters. Precise code coverage needs to have started. + */ + post(method: "Profiler.takePreciseCoverage"): Promise; + /** + * Collect coverage data for the current isolate. The coverage data may be incomplete due to garbage collection. + */ + post(method: "Profiler.getBestEffortCoverage"): Promise; + post(method: "HeapProfiler.enable"): Promise; + post(method: "HeapProfiler.disable"): Promise; + post(method: "HeapProfiler.startTrackingHeapObjects", params?: HeapProfiler.StartTrackingHeapObjectsParameterType): Promise; + post(method: "HeapProfiler.stopTrackingHeapObjects", params?: HeapProfiler.StopTrackingHeapObjectsParameterType): Promise; + post(method: "HeapProfiler.takeHeapSnapshot", params?: HeapProfiler.TakeHeapSnapshotParameterType): Promise; + post(method: "HeapProfiler.collectGarbage"): Promise; + post(method: "HeapProfiler.getObjectByHeapObjectId", params?: HeapProfiler.GetObjectByHeapObjectIdParameterType): Promise; + /** + * Enables console to refer to the node with given id via $x (see Command Line API for more details $x functions). + */ + post(method: "HeapProfiler.addInspectedHeapObject", params?: HeapProfiler.AddInspectedHeapObjectParameterType): Promise; + post(method: "HeapProfiler.getHeapObjectId", params?: HeapProfiler.GetHeapObjectIdParameterType): Promise; + post(method: "HeapProfiler.startSampling", params?: HeapProfiler.StartSamplingParameterType): Promise; + post(method: "HeapProfiler.stopSampling"): Promise; + post(method: "HeapProfiler.getSamplingProfile"): Promise; + /** + * Gets supported tracing categories. + */ + post(method: "NodeTracing.getCategories"): Promise; + /** + * Start trace events collection. + */ + post(method: "NodeTracing.start", params?: NodeTracing.StartParameterType): Promise; + /** + * Stop trace events collection. Remaining collected events will be sent as a sequence of + * dataCollected events followed by tracingComplete event. + */ + post(method: "NodeTracing.stop"): Promise; + /** + * Sends protocol message over session with given id. + */ + post(method: "NodeWorker.sendMessageToWorker", params?: NodeWorker.SendMessageToWorkerParameterType): Promise; + /** + * Instructs the inspector to attach to running workers. Will also attach to new workers + * as they start + */ + post(method: "NodeWorker.enable", params?: NodeWorker.EnableParameterType): Promise; + /** + * Detaches from all running workers and disables attaching to new workers as they are started. + */ + post(method: "NodeWorker.disable"): Promise; + /** + * Detached from the worker with given sessionId. + */ + post(method: "NodeWorker.detach", params?: NodeWorker.DetachParameterType): Promise; + /** + * Disables network tracking, prevents network events from being sent to the client. + */ + post(method: "Network.disable"): Promise; + /** + * Enables network tracking, network events will now be delivered to the client. + */ + post(method: "Network.enable"): Promise; + /** + * Returns post data sent with the request. Returns an error when no data was sent with the request. + */ + post(method: "Network.getRequestPostData", params?: Network.GetRequestPostDataParameterType): Promise; + /** + * Returns content served for the given request. + */ + post(method: "Network.getResponseBody", params?: Network.GetResponseBodyParameterType): Promise; + /** + * Enables streaming of the response for the given requestId. + * If enabled, the dataReceived event contains the data that was received during streaming. + * @experimental + */ + post(method: "Network.streamResourceContent", params?: Network.StreamResourceContentParameterType): Promise; + /** + * Fetches the resource and returns the content. + */ + post(method: "Network.loadNetworkResource", params?: Network.LoadNetworkResourceParameterType): Promise; + /** + * Enable the NodeRuntime events except by `NodeRuntime.waitingForDisconnect`. + */ + post(method: "NodeRuntime.enable"): Promise; + /** + * Disable NodeRuntime events + */ + post(method: "NodeRuntime.disable"): Promise; + /** + * Enable the `NodeRuntime.waitingForDisconnect`. + */ + post(method: "NodeRuntime.notifyWhenWaitingForDisconnect", params?: NodeRuntime.NotifyWhenWaitingForDisconnectParameterType): Promise; + post(method: "Target.setAutoAttach", params?: Target.SetAutoAttachParameterType): Promise; + /** + * Read a chunk of the stream + */ + post(method: "IO.read", params?: IO.ReadParameterType): Promise; + post(method: "IO.close", params?: IO.CloseParameterType): Promise; + + addListener(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + addListener(event: "inspectorNotification", listener: (message: InspectorNotification) => void): this; + /** + * Issued when new execution context is created. + */ + addListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + addListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + addListener(event: "Runtime.executionContextsCleared", listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + addListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + addListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + addListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + addListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + addListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + addListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + addListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + addListener(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + addListener(event: "Debugger.resumed", listener: () => void): this; + /** + * Issued when new console message is added. + */ + addListener(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + addListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; + addListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; + addListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; + addListener(event: "HeapProfiler.resetProfiles", listener: () => void): this; + addListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + addListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + addListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + addListener(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + addListener(event: "NodeTracing.tracingComplete", listener: () => void): this; + /** + * Issued when attached to a worker. + */ + addListener(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + addListener(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + addListener(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; + /** + * Fired when page is about to send HTTP request. + */ + addListener(event: "Network.requestWillBeSent", listener: (message: InspectorNotification) => void): this; + /** + * Fired when HTTP response is available. + */ + addListener(event: "Network.responseReceived", listener: (message: InspectorNotification) => void): this; + addListener(event: "Network.loadingFailed", listener: (message: InspectorNotification) => void): this; + addListener(event: "Network.loadingFinished", listener: (message: InspectorNotification) => void): this; + /** + * Fired when data chunk was received over the network. + */ + addListener(event: "Network.dataReceived", listener: (message: InspectorNotification) => void): this; + /** + * Fired upon WebSocket creation. + */ + addListener(event: "Network.webSocketCreated", listener: (message: InspectorNotification) => void): this; + /** + * Fired when WebSocket is closed. + */ + addListener(event: "Network.webSocketClosed", listener: (message: InspectorNotification) => void): this; + /** + * Fired when WebSocket handshake response becomes available. + */ + addListener(event: "Network.webSocketHandshakeResponseReceived", listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + addListener(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; + /** + * This event is fired when the runtime is waiting for the debugger. For + * example, when inspector.waitingForDebugger is called + */ + addListener(event: "NodeRuntime.waitingForDebugger", listener: () => void): this; + addListener(event: "Target.targetCreated", listener: (message: InspectorNotification) => void): this; + addListener(event: "Target.attachedToTarget", listener: (message: InspectorNotification) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "inspectorNotification", message: InspectorNotification): boolean; + emit(event: "Runtime.executionContextCreated", message: InspectorNotification): boolean; + emit(event: "Runtime.executionContextDestroyed", message: InspectorNotification): boolean; + emit(event: "Runtime.executionContextsCleared"): boolean; + emit(event: "Runtime.exceptionThrown", message: InspectorNotification): boolean; + emit(event: "Runtime.exceptionRevoked", message: InspectorNotification): boolean; + emit(event: "Runtime.consoleAPICalled", message: InspectorNotification): boolean; + emit(event: "Runtime.inspectRequested", message: InspectorNotification): boolean; + emit(event: "Debugger.scriptParsed", message: InspectorNotification): boolean; + emit(event: "Debugger.scriptFailedToParse", message: InspectorNotification): boolean; + emit(event: "Debugger.breakpointResolved", message: InspectorNotification): boolean; + emit(event: "Debugger.paused", message: InspectorNotification): boolean; + emit(event: "Debugger.resumed"): boolean; + emit(event: "Console.messageAdded", message: InspectorNotification): boolean; + emit(event: "Profiler.consoleProfileStarted", message: InspectorNotification): boolean; + emit(event: "Profiler.consoleProfileFinished", message: InspectorNotification): boolean; + emit(event: "HeapProfiler.addHeapSnapshotChunk", message: InspectorNotification): boolean; + emit(event: "HeapProfiler.resetProfiles"): boolean; + emit(event: "HeapProfiler.reportHeapSnapshotProgress", message: InspectorNotification): boolean; + emit(event: "HeapProfiler.lastSeenObjectId", message: InspectorNotification): boolean; + emit(event: "HeapProfiler.heapStatsUpdate", message: InspectorNotification): boolean; + emit(event: "NodeTracing.dataCollected", message: InspectorNotification): boolean; + emit(event: "NodeTracing.tracingComplete"): boolean; + emit(event: "NodeWorker.attachedToWorker", message: InspectorNotification): boolean; + emit(event: "NodeWorker.detachedFromWorker", message: InspectorNotification): boolean; + emit(event: "NodeWorker.receivedMessageFromWorker", message: InspectorNotification): boolean; + emit(event: "Network.requestWillBeSent", message: InspectorNotification): boolean; + emit(event: "Network.responseReceived", message: InspectorNotification): boolean; + emit(event: "Network.loadingFailed", message: InspectorNotification): boolean; + emit(event: "Network.loadingFinished", message: InspectorNotification): boolean; + emit(event: "Network.dataReceived", message: InspectorNotification): boolean; + emit(event: "Network.webSocketCreated", message: InspectorNotification): boolean; + emit(event: "Network.webSocketClosed", message: InspectorNotification): boolean; + emit(event: "Network.webSocketHandshakeResponseReceived", message: InspectorNotification): boolean; + emit(event: "NodeRuntime.waitingForDisconnect"): boolean; + emit(event: "NodeRuntime.waitingForDebugger"): boolean; + emit(event: "Target.targetCreated", message: InspectorNotification): boolean; + emit(event: "Target.attachedToTarget", message: InspectorNotification): boolean; + on(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + on(event: "inspectorNotification", listener: (message: InspectorNotification) => void): this; + /** + * Issued when new execution context is created. + */ + on(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + on(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + on(event: "Runtime.executionContextsCleared", listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + on(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + on(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + on(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + on(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + on(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + on(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + on(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + on(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + on(event: "Debugger.resumed", listener: () => void): this; + /** + * Issued when new console message is added. + */ + on(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + on(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; + on(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; + on(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; + on(event: "HeapProfiler.resetProfiles", listener: () => void): this; + on(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + on(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + on(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + on(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + on(event: "NodeTracing.tracingComplete", listener: () => void): this; + /** + * Issued when attached to a worker. + */ + on(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + on(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + on(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; + /** + * Fired when page is about to send HTTP request. + */ + on(event: "Network.requestWillBeSent", listener: (message: InspectorNotification) => void): this; + /** + * Fired when HTTP response is available. + */ + on(event: "Network.responseReceived", listener: (message: InspectorNotification) => void): this; + on(event: "Network.loadingFailed", listener: (message: InspectorNotification) => void): this; + on(event: "Network.loadingFinished", listener: (message: InspectorNotification) => void): this; + /** + * Fired when data chunk was received over the network. + */ + on(event: "Network.dataReceived", listener: (message: InspectorNotification) => void): this; + /** + * Fired upon WebSocket creation. + */ + on(event: "Network.webSocketCreated", listener: (message: InspectorNotification) => void): this; + /** + * Fired when WebSocket is closed. + */ + on(event: "Network.webSocketClosed", listener: (message: InspectorNotification) => void): this; + /** + * Fired when WebSocket handshake response becomes available. + */ + on(event: "Network.webSocketHandshakeResponseReceived", listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + on(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; + /** + * This event is fired when the runtime is waiting for the debugger. For + * example, when inspector.waitingForDebugger is called + */ + on(event: "NodeRuntime.waitingForDebugger", listener: () => void): this; + on(event: "Target.targetCreated", listener: (message: InspectorNotification) => void): this; + on(event: "Target.attachedToTarget", listener: (message: InspectorNotification) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + once(event: "inspectorNotification", listener: (message: InspectorNotification) => void): this; + /** + * Issued when new execution context is created. + */ + once(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + once(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + once(event: "Runtime.executionContextsCleared", listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + once(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + once(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + once(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + once(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + once(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + once(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + once(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + once(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + once(event: "Debugger.resumed", listener: () => void): this; + /** + * Issued when new console message is added. + */ + once(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + once(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; + once(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; + once(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; + once(event: "HeapProfiler.resetProfiles", listener: () => void): this; + once(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + once(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + once(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + once(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + once(event: "NodeTracing.tracingComplete", listener: () => void): this; + /** + * Issued when attached to a worker. + */ + once(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + once(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + once(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; + /** + * Fired when page is about to send HTTP request. + */ + once(event: "Network.requestWillBeSent", listener: (message: InspectorNotification) => void): this; + /** + * Fired when HTTP response is available. + */ + once(event: "Network.responseReceived", listener: (message: InspectorNotification) => void): this; + once(event: "Network.loadingFailed", listener: (message: InspectorNotification) => void): this; + once(event: "Network.loadingFinished", listener: (message: InspectorNotification) => void): this; + /** + * Fired when data chunk was received over the network. + */ + once(event: "Network.dataReceived", listener: (message: InspectorNotification) => void): this; + /** + * Fired upon WebSocket creation. + */ + once(event: "Network.webSocketCreated", listener: (message: InspectorNotification) => void): this; + /** + * Fired when WebSocket is closed. + */ + once(event: "Network.webSocketClosed", listener: (message: InspectorNotification) => void): this; + /** + * Fired when WebSocket handshake response becomes available. + */ + once(event: "Network.webSocketHandshakeResponseReceived", listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + once(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; + /** + * This event is fired when the runtime is waiting for the debugger. For + * example, when inspector.waitingForDebugger is called + */ + once(event: "NodeRuntime.waitingForDebugger", listener: () => void): this; + once(event: "Target.targetCreated", listener: (message: InspectorNotification) => void): this; + once(event: "Target.attachedToTarget", listener: (message: InspectorNotification) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + prependListener(event: "inspectorNotification", listener: (message: InspectorNotification) => void): this; + /** + * Issued when new execution context is created. + */ + prependListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + prependListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + prependListener(event: "Runtime.executionContextsCleared", listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + prependListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + prependListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + prependListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + prependListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + prependListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + prependListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + prependListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + prependListener(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + prependListener(event: "Debugger.resumed", listener: () => void): this; + /** + * Issued when new console message is added. + */ + prependListener(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + prependListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; + prependListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; + prependListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; + prependListener(event: "HeapProfiler.resetProfiles", listener: () => void): this; + prependListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + prependListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + prependListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + prependListener(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + prependListener(event: "NodeTracing.tracingComplete", listener: () => void): this; + /** + * Issued when attached to a worker. + */ + prependListener(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + prependListener(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + prependListener(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; + /** + * Fired when page is about to send HTTP request. + */ + prependListener(event: "Network.requestWillBeSent", listener: (message: InspectorNotification) => void): this; + /** + * Fired when HTTP response is available. + */ + prependListener(event: "Network.responseReceived", listener: (message: InspectorNotification) => void): this; + prependListener(event: "Network.loadingFailed", listener: (message: InspectorNotification) => void): this; + prependListener(event: "Network.loadingFinished", listener: (message: InspectorNotification) => void): this; + /** + * Fired when data chunk was received over the network. + */ + prependListener(event: "Network.dataReceived", listener: (message: InspectorNotification) => void): this; + /** + * Fired upon WebSocket creation. + */ + prependListener(event: "Network.webSocketCreated", listener: (message: InspectorNotification) => void): this; + /** + * Fired when WebSocket is closed. + */ + prependListener(event: "Network.webSocketClosed", listener: (message: InspectorNotification) => void): this; + /** + * Fired when WebSocket handshake response becomes available. + */ + prependListener(event: "Network.webSocketHandshakeResponseReceived", listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + prependListener(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; + /** + * This event is fired when the runtime is waiting for the debugger. For + * example, when inspector.waitingForDebugger is called + */ + prependListener(event: "NodeRuntime.waitingForDebugger", listener: () => void): this; + prependListener(event: "Target.targetCreated", listener: (message: InspectorNotification) => void): this; + prependListener(event: "Target.attachedToTarget", listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + prependOnceListener(event: "inspectorNotification", listener: (message: InspectorNotification) => void): this; + /** + * Issued when new execution context is created. + */ + prependOnceListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + prependOnceListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + prependOnceListener(event: "Runtime.executionContextsCleared", listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + prependOnceListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + prependOnceListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + prependOnceListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + prependOnceListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + prependOnceListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + prependOnceListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + prependOnceListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + prependOnceListener(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + prependOnceListener(event: "Debugger.resumed", listener: () => void): this; + /** + * Issued when new console message is added. + */ + prependOnceListener(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + prependOnceListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: "HeapProfiler.resetProfiles", listener: () => void): this; + prependOnceListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + prependOnceListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + prependOnceListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + prependOnceListener(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + prependOnceListener(event: "NodeTracing.tracingComplete", listener: () => void): this; + /** + * Issued when attached to a worker. + */ + prependOnceListener(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + prependOnceListener(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + prependOnceListener(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; + /** + * Fired when page is about to send HTTP request. + */ + prependOnceListener(event: "Network.requestWillBeSent", listener: (message: InspectorNotification) => void): this; + /** + * Fired when HTTP response is available. + */ + prependOnceListener(event: "Network.responseReceived", listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: "Network.loadingFailed", listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: "Network.loadingFinished", listener: (message: InspectorNotification) => void): this; + /** + * Fired when data chunk was received over the network. + */ + prependOnceListener(event: "Network.dataReceived", listener: (message: InspectorNotification) => void): this; + /** + * Fired upon WebSocket creation. + */ + prependOnceListener(event: "Network.webSocketCreated", listener: (message: InspectorNotification) => void): this; + /** + * Fired when WebSocket is closed. + */ + prependOnceListener(event: "Network.webSocketClosed", listener: (message: InspectorNotification) => void): this; + /** + * Fired when WebSocket handshake response becomes available. + */ + prependOnceListener(event: "Network.webSocketHandshakeResponseReceived", listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + prependOnceListener(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; + /** + * This event is fired when the runtime is waiting for the debugger. For + * example, when inspector.waitingForDebugger is called + */ + prependOnceListener(event: "NodeRuntime.waitingForDebugger", listener: () => void): this; + prependOnceListener(event: "Target.targetCreated", listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: "Target.attachedToTarget", listener: (message: InspectorNotification) => void): this; + } +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/module.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/module.d.ts new file mode 100644 index 00000000..b563b4be --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/module.d.ts @@ -0,0 +1,894 @@ +/** + * @since v0.3.7 + */ +declare module "module" { + import { URL } from "node:url"; + class Module { + constructor(id: string, parent?: Module); + } + interface Module extends NodeJS.Module {} + namespace Module { + export { Module }; + } + namespace Module { + /** + * A list of the names of all modules provided by Node.js. Can be used to verify + * if a module is maintained by a third party or not. + * + * Note: the list doesn't contain prefix-only modules like `node:test`. + * @since v9.3.0, v8.10.0, v6.13.0 + */ + const builtinModules: readonly string[]; + /** + * @since v12.2.0 + * @param path Filename to be used to construct the require + * function. Must be a file URL object, file URL string, or absolute path + * string. + */ + function createRequire(path: string | URL): NodeJS.Require; + namespace constants { + /** + * The following constants are returned as the `status` field in the object returned by + * {@link enableCompileCache} to indicate the result of the attempt to enable the + * [module compile cache](https://nodejs.org/docs/latest-v24.x/api/module.html#module-compile-cache). + * @since v22.8.0 + */ + namespace compileCacheStatus { + /** + * Node.js has enabled the compile cache successfully. The directory used to store the + * compile cache will be returned in the `directory` field in the + * returned object. + */ + const ENABLED: number; + /** + * The compile cache has already been enabled before, either by a previous call to + * {@link enableCompileCache}, or by the `NODE_COMPILE_CACHE=dir` + * environment variable. The directory used to store the + * compile cache will be returned in the `directory` field in the + * returned object. + */ + const ALREADY_ENABLED: number; + /** + * Node.js fails to enable the compile cache. This can be caused by the lack of + * permission to use the specified directory, or various kinds of file system errors. + * The detail of the failure will be returned in the `message` field in the + * returned object. + */ + const FAILED: number; + /** + * Node.js cannot enable the compile cache because the environment variable + * `NODE_DISABLE_COMPILE_CACHE=1` has been set. + */ + const DISABLED: number; + } + } + interface EnableCompileCacheResult { + /** + * One of the {@link constants.compileCacheStatus} + */ + status: number; + /** + * If Node.js cannot enable the compile cache, this contains + * the error message. Only set if `status` is `module.constants.compileCacheStatus.FAILED`. + */ + message?: string; + /** + * If the compile cache is enabled, this contains the directory + * where the compile cache is stored. Only set if `status` is + * `module.constants.compileCacheStatus.ENABLED` or + * `module.constants.compileCacheStatus.ALREADY_ENABLED`. + */ + directory?: string; + } + /** + * Enable [module compile cache](https://nodejs.org/docs/latest-v24.x/api/module.html#module-compile-cache) + * in the current Node.js instance. + * + * If `cacheDir` is not specified, Node.js will either use the directory specified by the + * `NODE_COMPILE_CACHE=dir` environment variable if it's set, or use + * `path.join(os.tmpdir(), 'node-compile-cache')` otherwise. For general use cases, it's + * recommended to call `module.enableCompileCache()` without specifying the `cacheDir`, + * so that the directory can be overridden by the `NODE_COMPILE_CACHE` environment + * variable when necessary. + * + * Since compile cache is supposed to be a quiet optimization that is not required for the + * application to be functional, this method is designed to not throw any exception when the + * compile cache cannot be enabled. Instead, it will return an object containing an error + * message in the `message` field to aid debugging. + * If compile cache is enabled successfully, the `directory` field in the returned object + * contains the path to the directory where the compile cache is stored. The `status` + * field in the returned object would be one of the `module.constants.compileCacheStatus` + * values to indicate the result of the attempt to enable the + * [module compile cache](https://nodejs.org/docs/latest-v24.x/api/module.html#module-compile-cache). + * + * This method only affects the current Node.js instance. To enable it in child worker threads, + * either call this method in child worker threads too, or set the + * `process.env.NODE_COMPILE_CACHE` value to compile cache directory so the behavior can + * be inherited into the child workers. The directory can be obtained either from the + * `directory` field returned by this method, or with {@link getCompileCacheDir}. + * @since v22.8.0 + * @param cacheDir Optional path to specify the directory where the compile cache + * will be stored/retrieved. + */ + function enableCompileCache(cacheDir?: string): EnableCompileCacheResult; + /** + * Flush the [module compile cache](https://nodejs.org/docs/latest-v24.x/api/module.html#module-compile-cache) + * accumulated from modules already loaded + * in the current Node.js instance to disk. This returns after all the flushing + * file system operations come to an end, no matter they succeed or not. If there + * are any errors, this will fail silently, since compile cache misses should not + * interfere with the actual operation of the application. + * @since v22.10.0 + */ + function flushCompileCache(): void; + /** + * @since v22.8.0 + * @return Path to the [module compile cache](https://nodejs.org/docs/latest-v24.x/api/module.html#module-compile-cache) + * directory if it is enabled, or `undefined` otherwise. + */ + function getCompileCacheDir(): string | undefined; + /** + * ```text + * /path/to/project + * ├ packages/ + * ├ bar/ + * ├ bar.js + * └ package.json // name = '@foo/bar' + * └ qux/ + * ├ node_modules/ + * └ some-package/ + * └ package.json // name = 'some-package' + * ├ qux.js + * └ package.json // name = '@foo/qux' + * ├ main.js + * └ package.json // name = '@foo' + * ``` + * ```js + * // /path/to/project/packages/bar/bar.js + * import { findPackageJSON } from 'node:module'; + * + * findPackageJSON('..', import.meta.url); + * // '/path/to/project/package.json' + * // Same result when passing an absolute specifier instead: + * findPackageJSON(new URL('../', import.meta.url)); + * findPackageJSON(import.meta.resolve('../')); + * + * findPackageJSON('some-package', import.meta.url); + * // '/path/to/project/packages/bar/node_modules/some-package/package.json' + * // When passing an absolute specifier, you might get a different result if the + * // resolved module is inside a subfolder that has nested `package.json`. + * findPackageJSON(import.meta.resolve('some-package')); + * // '/path/to/project/packages/bar/node_modules/some-package/some-subfolder/package.json' + * + * findPackageJSON('@foo/qux', import.meta.url); + * // '/path/to/project/packages/qux/package.json' + * ``` + * @since v22.14.0 + * @param specifier The specifier for the module whose `package.json` to + * retrieve. When passing a _bare specifier_, the `package.json` at the root of + * the package is returned. When passing a _relative specifier_ or an _absolute specifier_, + * the closest parent `package.json` is returned. + * @param base The absolute location (`file:` URL string or FS path) of the + * containing module. For CJS, use `__filename` (not `__dirname`!); for ESM, use + * `import.meta.url`. You do not need to pass it if `specifier` is an _absolute specifier_. + * @returns A path if the `package.json` is found. When `startLocation` + * is a package, the package's root `package.json`; when a relative or unresolved, the closest + * `package.json` to the `startLocation`. + */ + function findPackageJSON(specifier: string | URL, base?: string | URL): string | undefined; + /** + * @since v18.6.0, v16.17.0 + */ + function isBuiltin(moduleName: string): boolean; + interface RegisterOptions { + /** + * If you want to resolve `specifier` relative to a + * base URL, such as `import.meta.url`, you can pass that URL here. This + * property is ignored if the `parentURL` is supplied as the second argument. + * @default 'data:' + */ + parentURL?: string | URL | undefined; + /** + * Any arbitrary, cloneable JavaScript value to pass into the + * {@link initialize} hook. + */ + data?: Data | undefined; + /** + * [Transferable objects](https://nodejs.org/docs/latest-v24.x/api/worker_threads.html#portpostmessagevalue-transferlist) + * to be passed into the `initialize` hook. + */ + transferList?: any[] | undefined; + } + /* eslint-disable @definitelytyped/no-unnecessary-generics */ + /** + * Register a module that exports hooks that customize Node.js module + * resolution and loading behavior. See + * [Customization hooks](https://nodejs.org/docs/latest-v24.x/api/module.html#customization-hooks). + * + * This feature requires `--allow-worker` if used with the + * [Permission Model](https://nodejs.org/docs/latest-v24.x/api/permissions.html#permission-model). + * @since v20.6.0, v18.19.0 + * @param specifier Customization hooks to be registered; this should be + * the same string that would be passed to `import()`, except that if it is + * relative, it is resolved relative to `parentURL`. + * @param parentURL f you want to resolve `specifier` relative to a base + * URL, such as `import.meta.url`, you can pass that URL here. + */ + function register( + specifier: string | URL, + parentURL?: string | URL, + options?: RegisterOptions, + ): void; + function register(specifier: string | URL, options?: RegisterOptions): void; + interface RegisterHooksOptions { + /** + * See [load hook](https://nodejs.org/docs/latest-v24.x/api/module.html#loadurl-context-nextload). + * @default undefined + */ + load?: LoadHookSync | undefined; + /** + * See [resolve hook](https://nodejs.org/docs/latest-v24.x/api/module.html#resolvespecifier-context-nextresolve). + * @default undefined + */ + resolve?: ResolveHookSync | undefined; + } + interface ModuleHooks { + /** + * Deregister the hook instance. + */ + deregister(): void; + } + /** + * Register [hooks](https://nodejs.org/docs/latest-v24.x/api/module.html#customization-hooks) + * that customize Node.js module resolution and loading behavior. + * @since v22.15.0 + * @experimental + */ + function registerHooks(options: RegisterHooksOptions): ModuleHooks; + interface StripTypeScriptTypesOptions { + /** + * Possible values are: + * * `'strip'` Only strip type annotations without performing the transformation of TypeScript features. + * * `'transform'` Strip type annotations and transform TypeScript features to JavaScript. + * @default 'strip' + */ + mode?: "strip" | "transform" | undefined; + /** + * Only when `mode` is `'transform'`, if `true`, a source map + * will be generated for the transformed code. + * @default false + */ + sourceMap?: boolean | undefined; + /** + * Specifies the source url used in the source map. + */ + sourceUrl?: string | undefined; + } + /** + * `module.stripTypeScriptTypes()` removes type annotations from TypeScript code. It + * can be used to strip type annotations from TypeScript code before running it + * with `vm.runInContext()` or `vm.compileFunction()`. + * By default, it will throw an error if the code contains TypeScript features + * that require transformation such as `Enums`, + * see [type-stripping](https://nodejs.org/docs/latest-v24.x/api/typescript.md#type-stripping) for more information. + * When mode is `'transform'`, it also transforms TypeScript features to JavaScript, + * see [transform TypeScript features](https://nodejs.org/docs/latest-v24.x/api/typescript.md#typescript-features) for more information. + * When mode is `'strip'`, source maps are not generated, because locations are preserved. + * If `sourceMap` is provided, when mode is `'strip'`, an error will be thrown. + * + * _WARNING_: The output of this function should not be considered stable across Node.js versions, + * due to changes in the TypeScript parser. + * + * ```js + * import { stripTypeScriptTypes } from 'node:module'; + * const code = 'const a: number = 1;'; + * const strippedCode = stripTypeScriptTypes(code); + * console.log(strippedCode); + * // Prints: const a = 1; + * ``` + * + * If `sourceUrl` is provided, it will be used appended as a comment at the end of the output: + * + * ```js + * import { stripTypeScriptTypes } from 'node:module'; + * const code = 'const a: number = 1;'; + * const strippedCode = stripTypeScriptTypes(code, { mode: 'strip', sourceUrl: 'source.ts' }); + * console.log(strippedCode); + * // Prints: const a = 1\n\n//# sourceURL=source.ts; + * ``` + * + * When `mode` is `'transform'`, the code is transformed to JavaScript: + * + * ```js + * import { stripTypeScriptTypes } from 'node:module'; + * const code = ` + * namespace MathUtil { + * export const add = (a: number, b: number) => a + b; + * }`; + * const strippedCode = stripTypeScriptTypes(code, { mode: 'transform', sourceMap: true }); + * console.log(strippedCode); + * // Prints: + * // var MathUtil; + * // (function(MathUtil) { + * // MathUtil.add = (a, b)=>a + b; + * // })(MathUtil || (MathUtil = {})); + * // # sourceMappingURL=data:application/json;base64, ... + * ``` + * @since v22.13.0 + * @param code The code to strip type annotations from. + * @returns The code with type annotations stripped. + */ + function stripTypeScriptTypes(code: string, options?: StripTypeScriptTypesOptions): string; + /* eslint-enable @definitelytyped/no-unnecessary-generics */ + /** + * The `module.syncBuiltinESMExports()` method updates all the live bindings for + * builtin `ES Modules` to match the properties of the `CommonJS` exports. It + * does not add or remove exported names from the `ES Modules`. + * + * ```js + * import fs from 'node:fs'; + * import assert from 'node:assert'; + * import { syncBuiltinESMExports } from 'node:module'; + * + * fs.readFile = newAPI; + * + * delete fs.readFileSync; + * + * function newAPI() { + * // ... + * } + * + * fs.newAPI = newAPI; + * + * syncBuiltinESMExports(); + * + * import('node:fs').then((esmFS) => { + * // It syncs the existing readFile property with the new value + * assert.strictEqual(esmFS.readFile, newAPI); + * // readFileSync has been deleted from the required fs + * assert.strictEqual('readFileSync' in fs, false); + * // syncBuiltinESMExports() does not remove readFileSync from esmFS + * assert.strictEqual('readFileSync' in esmFS, true); + * // syncBuiltinESMExports() does not add names + * assert.strictEqual(esmFS.newAPI, undefined); + * }); + * ``` + * @since v12.12.0 + */ + function syncBuiltinESMExports(): void; + interface ImportAttributes extends NodeJS.Dict { + type?: string | undefined; + } + type ImportPhase = "source" | "evaluation"; + type ModuleFormat = + | "addon" + | "builtin" + | "commonjs" + | "commonjs-typescript" + | "json" + | "module" + | "module-typescript" + | "wasm"; + type ModuleSource = string | ArrayBuffer | NodeJS.TypedArray; + /** + * The `initialize` hook provides a way to define a custom function that runs in + * the hooks thread when the hooks module is initialized. Initialization happens + * when the hooks module is registered via {@link register}. + * + * This hook can receive data from a {@link register} invocation, including + * ports and other transferable objects. The return value of `initialize` can be a + * `Promise`, in which case it will be awaited before the main application thread + * execution resumes. + */ + type InitializeHook = (data: Data) => void | Promise; + interface ResolveHookContext { + /** + * Export conditions of the relevant `package.json` + */ + conditions: string[]; + /** + * An object whose key-value pairs represent the assertions for the module to import + */ + importAttributes: ImportAttributes; + /** + * The module importing this one, or undefined if this is the Node.js entry point + */ + parentURL: string | undefined; + } + interface ResolveFnOutput { + /** + * A hint to the load hook (it might be ignored); can be an intermediary value. + */ + format?: string | null | undefined; + /** + * The import attributes to use when caching the module (optional; if excluded the input will be used) + */ + importAttributes?: ImportAttributes | undefined; + /** + * A signal that this hook intends to terminate the chain of `resolve` hooks. + * @default false + */ + shortCircuit?: boolean | undefined; + /** + * The absolute URL to which this input resolves + */ + url: string; + } + /** + * The `resolve` hook chain is responsible for telling Node.js where to find and + * how to cache a given `import` statement or expression, or `require` call. It can + * optionally return a format (such as `'module'`) as a hint to the `load` hook. If + * a format is specified, the `load` hook is ultimately responsible for providing + * the final `format` value (and it is free to ignore the hint provided by + * `resolve`); if `resolve` provides a `format`, a custom `load` hook is required + * even if only to pass the value to the Node.js default `load` hook. + */ + type ResolveHook = ( + specifier: string, + context: ResolveHookContext, + nextResolve: ( + specifier: string, + context?: Partial, + ) => ResolveFnOutput | Promise, + ) => ResolveFnOutput | Promise; + type ResolveHookSync = ( + specifier: string, + context: ResolveHookContext, + nextResolve: ( + specifier: string, + context?: Partial, + ) => ResolveFnOutput, + ) => ResolveFnOutput; + interface LoadHookContext { + /** + * Export conditions of the relevant `package.json` + */ + conditions: string[]; + /** + * The format optionally supplied by the `resolve` hook chain (can be an intermediary value). + */ + format: string | null | undefined; + /** + * An object whose key-value pairs represent the assertions for the module to import + */ + importAttributes: ImportAttributes; + } + interface LoadFnOutput { + format: string | null | undefined; + /** + * A signal that this hook intends to terminate the chain of `resolve` hooks. + * @default false + */ + shortCircuit?: boolean | undefined; + /** + * The source for Node.js to evaluate + */ + source?: ModuleSource | undefined; + } + /** + * The `load` hook provides a way to define a custom method of determining how a + * URL should be interpreted, retrieved, and parsed. It is also in charge of + * validating the import attributes. + */ + type LoadHook = ( + url: string, + context: LoadHookContext, + nextLoad: ( + url: string, + context?: Partial, + ) => LoadFnOutput | Promise, + ) => LoadFnOutput | Promise; + type LoadHookSync = ( + url: string, + context: LoadHookContext, + nextLoad: ( + url: string, + context?: Partial, + ) => LoadFnOutput, + ) => LoadFnOutput; + interface SourceMapsSupport { + /** + * If the source maps support is enabled + */ + enabled: boolean; + /** + * If the support is enabled for files in `node_modules`. + */ + nodeModules: boolean; + /** + * If the support is enabled for generated code from `eval` or `new Function`. + */ + generatedCode: boolean; + } + /** + * This method returns whether the [Source Map v3](https://tc39.es/ecma426/) support for stack + * traces is enabled. + * @since v23.7.0, v22.14.0 + */ + function getSourceMapsSupport(): SourceMapsSupport; + /** + * `path` is the resolved path for the file for which a corresponding source map + * should be fetched. + * @since v13.7.0, v12.17.0 + * @return Returns `module.SourceMap` if a source map is found, `undefined` otherwise. + */ + function findSourceMap(path: string): SourceMap | undefined; + interface SetSourceMapsSupportOptions { + /** + * If enabling the support for files in `node_modules`. + * @default false + */ + nodeModules?: boolean | undefined; + /** + * If enabling the support for generated code from `eval` or `new Function`. + * @default false + */ + generatedCode?: boolean | undefined; + } + /** + * This function enables or disables the [Source Map v3](https://tc39.es/ecma426/) support for + * stack traces. + * + * It provides same features as launching Node.js process with commandline options + * `--enable-source-maps`, with additional options to alter the support for files + * in `node_modules` or generated codes. + * + * Only source maps in JavaScript files that are loaded after source maps has been + * enabled will be parsed and loaded. Preferably, use the commandline options + * `--enable-source-maps` to avoid losing track of source maps of modules loaded + * before this API call. + * @since v23.7.0, v22.14.0 + */ + function setSourceMapsSupport(enabled: boolean, options?: SetSourceMapsSupportOptions): void; + interface SourceMapConstructorOptions { + /** + * @since v21.0.0, v20.5.0 + */ + lineLengths?: readonly number[] | undefined; + } + interface SourceMapPayload { + file: string; + version: number; + sources: string[]; + sourcesContent: string[]; + names: string[]; + mappings: string; + sourceRoot: string; + } + interface SourceMapping { + generatedLine: number; + generatedColumn: number; + originalSource: string; + originalLine: number; + originalColumn: number; + } + interface SourceOrigin { + /** + * The name of the range in the source map, if one was provided + */ + name: string | undefined; + /** + * The file name of the original source, as reported in the SourceMap + */ + fileName: string; + /** + * The 1-indexed lineNumber of the corresponding call site in the original source + */ + lineNumber: number; + /** + * The 1-indexed columnNumber of the corresponding call site in the original source + */ + columnNumber: number; + } + /** + * @since v13.7.0, v12.17.0 + */ + class SourceMap { + constructor(payload: SourceMapPayload, options?: SourceMapConstructorOptions); + /** + * Getter for the payload used to construct the `SourceMap` instance. + */ + readonly payload: SourceMapPayload; + /** + * Given a line offset and column offset in the generated source + * file, returns an object representing the SourceMap range in the + * original file if found, or an empty object if not. + * + * The object returned contains the following keys: + * + * The returned value represents the raw range as it appears in the + * SourceMap, based on zero-indexed offsets, _not_ 1-indexed line and + * column numbers as they appear in Error messages and CallSite + * objects. + * + * To get the corresponding 1-indexed line and column numbers from a + * lineNumber and columnNumber as they are reported by Error stacks + * and CallSite objects, use `sourceMap.findOrigin(lineNumber, columnNumber)` + * @param lineOffset The zero-indexed line number offset in the generated source + * @param columnOffset The zero-indexed column number offset in the generated source + */ + findEntry(lineOffset: number, columnOffset: number): SourceMapping | {}; + /** + * Given a 1-indexed `lineNumber` and `columnNumber` from a call site in the generated source, + * find the corresponding call site location in the original source. + * + * If the `lineNumber` and `columnNumber` provided are not found in any source map, + * then an empty object is returned. + * @param lineNumber The 1-indexed line number of the call site in the generated source + * @param columnNumber The 1-indexed column number of the call site in the generated source + */ + findOrigin(lineNumber: number, columnNumber: number): SourceOrigin | {}; + } + function runMain(main?: string): void; + function wrap(script: string): string; + } + global { + interface ImportMeta { + /** + * The directory name of the current module. + * + * This is the same as the `path.dirname()` of the `import.meta.filename`. + * + * > **Caveat**: only present on `file:` modules. + * @since v21.2.0, v20.11.0 + */ + dirname: string; + /** + * The full absolute path and filename of the current module, with + * symlinks resolved. + * + * This is the same as the `url.fileURLToPath()` of the `import.meta.url`. + * + * > **Caveat** only local modules support this property. Modules not using the + * > `file:` protocol will not provide it. + * @since v21.2.0, v20.11.0 + */ + filename: string; + /** + * The absolute `file:` URL of the module. + * + * This is defined exactly the same as it is in browsers providing the URL of the + * current module file. + * + * This enables useful patterns such as relative file loading: + * + * ```js + * import { readFileSync } from 'node:fs'; + * const buffer = readFileSync(new URL('./data.proto', import.meta.url)); + * ``` + */ + url: string; + /** + * `import.meta.resolve` is a module-relative resolution function scoped to + * each module, returning the URL string. + * + * ```js + * const dependencyAsset = import.meta.resolve('component-lib/asset.css'); + * // file:///app/node_modules/component-lib/asset.css + * import.meta.resolve('./dep.js'); + * // file:///app/dep.js + * ``` + * + * All features of the Node.js module resolution are supported. Dependency + * resolutions are subject to the permitted exports resolutions within the package. + * + * **Caveats**: + * + * * This can result in synchronous file-system operations, which + * can impact performance similarly to `require.resolve`. + * * This feature is not available within custom loaders (it would + * create a deadlock). + * @since v13.9.0, v12.16.0 + * @param specifier The module specifier to resolve relative to the + * current module. + * @param parent An optional absolute parent module URL to resolve from. + * **Default:** `import.meta.url` + * @returns The absolute URL string that the specifier would resolve to. + */ + resolve(specifier: string, parent?: string | URL): string; + /** + * `true` when the current module is the entry point of the current process; `false` otherwise. + * + * Equivalent to `require.main === module` in CommonJS. + * + * Analogous to Python's `__name__ == "__main__"`. + * + * ```js + * export function foo() { + * return 'Hello, world'; + * } + * + * function main() { + * const message = foo(); + * console.log(message); + * } + * + * if (import.meta.main) main(); + * // `foo` can be imported from another module without possible side-effects from `main` + * ``` + * @since v24.2.0 + * @experimental + */ + main: boolean; + } + namespace NodeJS { + interface Module { + /** + * The module objects required for the first time by this one. + * @since v0.1.16 + */ + children: Module[]; + /** + * The `module.exports` object is created by the `Module` system. Sometimes this is + * not acceptable; many want their module to be an instance of some class. To do + * this, assign the desired export object to `module.exports`. + * @since v0.1.16 + */ + exports: any; + /** + * The fully resolved filename of the module. + * @since v0.1.16 + */ + filename: string; + /** + * The identifier for the module. Typically this is the fully resolved + * filename. + * @since v0.1.16 + */ + id: string; + /** + * `true` if the module is running during the Node.js preload + * phase. + * @since v15.4.0, v14.17.0 + */ + isPreloading: boolean; + /** + * Whether or not the module is done loading, or is in the process of + * loading. + * @since v0.1.16 + */ + loaded: boolean; + /** + * The module that first required this one, or `null` if the current module is the + * entry point of the current process, or `undefined` if the module was loaded by + * something that is not a CommonJS module (e.g. REPL or `import`). + * @since v0.1.16 + * @deprecated Please use `require.main` and `module.children` instead. + */ + parent: Module | null | undefined; + /** + * The directory name of the module. This is usually the same as the + * `path.dirname()` of the `module.id`. + * @since v11.14.0 + */ + path: string; + /** + * The search paths for the module. + * @since v0.4.0 + */ + paths: string[]; + /** + * The `module.require()` method provides a way to load a module as if + * `require()` was called from the original module. + * @since v0.5.1 + */ + require(id: string): any; + } + interface Require { + /** + * Used to import modules, `JSON`, and local files. + * @since v0.1.13 + */ + (id: string): any; + /** + * Modules are cached in this object when they are required. By deleting a key + * value from this object, the next `require` will reload the module. + * This does not apply to + * [native addons](https://nodejs.org/docs/latest-v24.x/api/addons.html), + * for which reloading will result in an error. + * @since v0.3.0 + */ + cache: Dict; + /** + * Instruct `require` on how to handle certain file extensions. + * @since v0.3.0 + * @deprecated + */ + extensions: RequireExtensions; + /** + * The `Module` object representing the entry script loaded when the Node.js + * process launched, or `undefined` if the entry point of the program is not a + * CommonJS module. + * @since v0.1.17 + */ + main: Module | undefined; + /** + * @since v0.3.0 + */ + resolve: RequireResolve; + } + /** @deprecated */ + interface RequireExtensions extends Dict<(module: Module, filename: string) => any> { + ".js": (module: Module, filename: string) => any; + ".json": (module: Module, filename: string) => any; + ".node": (module: Module, filename: string) => any; + } + interface RequireResolveOptions { + /** + * Paths to resolve module location from. If present, these + * paths are used instead of the default resolution paths, with the exception + * of + * [GLOBAL\_FOLDERS](https://nodejs.org/docs/latest-v24.x/api/modules.html#loading-from-the-global-folders) + * like `$HOME/.node_modules`, which are + * always included. Each of these paths is used as a starting point for + * the module resolution algorithm, meaning that the `node_modules` hierarchy + * is checked from this location. + * @since v8.9.0 + */ + paths?: string[] | undefined; + } + interface RequireResolve { + /** + * Use the internal `require()` machinery to look up the location of a module, + * but rather than loading the module, just return the resolved filename. + * + * If the module can not be found, a `MODULE_NOT_FOUND` error is thrown. + * @since v0.3.0 + * @param request The module path to resolve. + */ + (request: string, options?: RequireResolveOptions): string; + /** + * Returns an array containing the paths searched during resolution of `request` or + * `null` if the `request` string references a core module, for example `http` or + * `fs`. + * @since v8.9.0 + * @param request The module path whose lookup paths are being retrieved. + */ + paths(request: string): string[] | null; + } + } + /** + * The directory name of the current module. This is the same as the + * `path.dirname()` of the `__filename`. + * @since v0.1.27 + */ + var __dirname: string; + /** + * The file name of the current module. This is the current module file's absolute + * path with symlinks resolved. + * + * For a main program this is not necessarily the same as the file name used in the + * command line. + * @since v0.0.1 + */ + var __filename: string; + /** + * The `exports` variable is available within a module's file-level scope, and is + * assigned the value of `module.exports` before the module is evaluated. + * @since v0.1.16 + */ + var exports: NodeJS.Module["exports"]; + /** + * A reference to the current module. + * @since v0.1.16 + */ + var module: NodeJS.Module; + /** + * @since v0.1.13 + */ + var require: NodeJS.Require; + // Global-scope aliases for backwards compatibility with @types/node <13.0.x + // TODO: consider removing in a future major version update + /** @deprecated Use `NodeJS.Module` instead. */ + interface NodeModule extends NodeJS.Module {} + /** @deprecated Use `NodeJS.Require` instead. */ + interface NodeRequire extends NodeJS.Require {} + /** @deprecated Use `NodeJS.RequireResolve` instead. */ + interface RequireResolve extends NodeJS.RequireResolve {} + } + export = Module; +} +declare module "node:module" { + import module = require("module"); + export = module; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/net.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/net.d.ts new file mode 100644 index 00000000..38c16275 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/net.d.ts @@ -0,0 +1,1054 @@ +/** + * > Stability: 2 - Stable + * + * The `node:net` module provides an asynchronous network API for creating stream-based + * TCP or `IPC` servers ({@link createServer}) and clients + * ({@link createConnection}). + * + * It can be accessed using: + * + * ```js + * import net from 'node:net'; + * ``` + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/net.js) + */ +declare module "net" { + import { NonSharedBuffer } from "node:buffer"; + import * as stream from "node:stream"; + import { Abortable, EventEmitter } from "node:events"; + import * as dns from "node:dns"; + type LookupFunction = ( + hostname: string, + options: dns.LookupOptions, + callback: (err: NodeJS.ErrnoException | null, address: string | dns.LookupAddress[], family?: number) => void, + ) => void; + interface AddressInfo { + address: string; + family: string; + port: number; + } + interface SocketConstructorOpts { + fd?: number | undefined; + allowHalfOpen?: boolean | undefined; + onread?: OnReadOpts | undefined; + readable?: boolean | undefined; + writable?: boolean | undefined; + signal?: AbortSignal | undefined; + } + interface OnReadOpts { + buffer: Uint8Array | (() => Uint8Array); + /** + * This function is called for every chunk of incoming data. + * Two arguments are passed to it: the number of bytes written to `buffer` and a reference to `buffer`. + * Return `false` from this function to implicitly `pause()` the socket. + */ + callback(bytesWritten: number, buffer: Uint8Array): boolean; + } + interface TcpSocketConnectOpts { + port: number; + host?: string | undefined; + localAddress?: string | undefined; + localPort?: number | undefined; + hints?: number | undefined; + family?: number | undefined; + lookup?: LookupFunction | undefined; + noDelay?: boolean | undefined; + keepAlive?: boolean | undefined; + keepAliveInitialDelay?: number | undefined; + /** + * @since v18.13.0 + */ + autoSelectFamily?: boolean | undefined; + /** + * @since v18.13.0 + */ + autoSelectFamilyAttemptTimeout?: number | undefined; + blockList?: BlockList | undefined; + } + interface IpcSocketConnectOpts { + path: string; + } + type SocketConnectOpts = TcpSocketConnectOpts | IpcSocketConnectOpts; + type SocketReadyState = "opening" | "open" | "readOnly" | "writeOnly" | "closed"; + /** + * This class is an abstraction of a TCP socket or a streaming `IPC` endpoint + * (uses named pipes on Windows, and Unix domain sockets otherwise). It is also + * an `EventEmitter`. + * + * A `net.Socket` can be created by the user and used directly to interact with + * a server. For example, it is returned by {@link createConnection}, + * so the user can use it to talk to the server. + * + * It can also be created by Node.js and passed to the user when a connection + * is received. For example, it is passed to the listeners of a `'connection'` event emitted on a {@link Server}, so the user can use + * it to interact with the client. + * @since v0.3.4 + */ + class Socket extends stream.Duplex { + constructor(options?: SocketConstructorOpts); + /** + * Destroys the socket after all data is written. If the `finish` event was already emitted the socket is destroyed immediately. + * If the socket is still writable it implicitly calls `socket.end()`. + * @since v0.3.4 + */ + destroySoon(): void; + /** + * Sends data on the socket. The second parameter specifies the encoding in the + * case of a string. It defaults to UTF8 encoding. + * + * Returns `true` if the entire data was flushed successfully to the kernel + * buffer. Returns `false` if all or part of the data was queued in user memory.`'drain'` will be emitted when the buffer is again free. + * + * The optional `callback` parameter will be executed when the data is finally + * written out, which may not be immediately. + * + * See `Writable` stream `write()` method for more + * information. + * @since v0.1.90 + * @param [encoding='utf8'] Only used when data is `string`. + */ + write(buffer: Uint8Array | string, cb?: (err?: Error | null) => void): boolean; + write(str: Uint8Array | string, encoding?: BufferEncoding, cb?: (err?: Error | null) => void): boolean; + /** + * Initiate a connection on a given socket. + * + * Possible signatures: + * + * * `socket.connect(options[, connectListener])` + * * `socket.connect(path[, connectListener])` for `IPC` connections. + * * `socket.connect(port[, host][, connectListener])` for TCP connections. + * * Returns: `net.Socket` The socket itself. + * + * This function is asynchronous. When the connection is established, the `'connect'` event will be emitted. If there is a problem connecting, + * instead of a `'connect'` event, an `'error'` event will be emitted with + * the error passed to the `'error'` listener. + * The last parameter `connectListener`, if supplied, will be added as a listener + * for the `'connect'` event **once**. + * + * This function should only be used for reconnecting a socket after`'close'` has been emitted or otherwise it may lead to undefined + * behavior. + */ + connect(options: SocketConnectOpts, connectionListener?: () => void): this; + connect(port: number, host: string, connectionListener?: () => void): this; + connect(port: number, connectionListener?: () => void): this; + connect(path: string, connectionListener?: () => void): this; + /** + * Set the encoding for the socket as a `Readable Stream`. See `readable.setEncoding()` for more information. + * @since v0.1.90 + * @return The socket itself. + */ + setEncoding(encoding?: BufferEncoding): this; + /** + * Pauses the reading of data. That is, `'data'` events will not be emitted. + * Useful to throttle back an upload. + * @return The socket itself. + */ + pause(): this; + /** + * Close the TCP connection by sending an RST packet and destroy the stream. + * If this TCP socket is in connecting status, it will send an RST packet and destroy this TCP socket once it is connected. + * Otherwise, it will call `socket.destroy` with an `ERR_SOCKET_CLOSED` Error. + * If this is not a TCP socket (for example, a pipe), calling this method will immediately throw an `ERR_INVALID_HANDLE_TYPE` Error. + * @since v18.3.0, v16.17.0 + */ + resetAndDestroy(): this; + /** + * Resumes reading after a call to `socket.pause()`. + * @return The socket itself. + */ + resume(): this; + /** + * Sets the socket to timeout after `timeout` milliseconds of inactivity on + * the socket. By default `net.Socket` do not have a timeout. + * + * When an idle timeout is triggered the socket will receive a `'timeout'` event but the connection will not be severed. The user must manually call `socket.end()` or `socket.destroy()` to + * end the connection. + * + * ```js + * socket.setTimeout(3000); + * socket.on('timeout', () => { + * console.log('socket timeout'); + * socket.end(); + * }); + * ``` + * + * If `timeout` is 0, then the existing idle timeout is disabled. + * + * The optional `callback` parameter will be added as a one-time listener for the `'timeout'` event. + * @since v0.1.90 + * @return The socket itself. + */ + setTimeout(timeout: number, callback?: () => void): this; + /** + * Enable/disable the use of Nagle's algorithm. + * + * When a TCP connection is created, it will have Nagle's algorithm enabled. + * + * Nagle's algorithm delays data before it is sent via the network. It attempts + * to optimize throughput at the expense of latency. + * + * Passing `true` for `noDelay` or not passing an argument will disable Nagle's + * algorithm for the socket. Passing `false` for `noDelay` will enable Nagle's + * algorithm. + * @since v0.1.90 + * @param [noDelay=true] + * @return The socket itself. + */ + setNoDelay(noDelay?: boolean): this; + /** + * Enable/disable keep-alive functionality, and optionally set the initial + * delay before the first keepalive probe is sent on an idle socket. + * + * Set `initialDelay` (in milliseconds) to set the delay between the last + * data packet received and the first keepalive probe. Setting `0` for`initialDelay` will leave the value unchanged from the default + * (or previous) setting. + * + * Enabling the keep-alive functionality will set the following socket options: + * + * * `SO_KEEPALIVE=1` + * * `TCP_KEEPIDLE=initialDelay` + * * `TCP_KEEPCNT=10` + * * `TCP_KEEPINTVL=1` + * @since v0.1.92 + * @param [enable=false] + * @param [initialDelay=0] + * @return The socket itself. + */ + setKeepAlive(enable?: boolean, initialDelay?: number): this; + /** + * Returns the bound `address`, the address `family` name and `port` of the + * socket as reported by the operating system:`{ port: 12346, family: 'IPv4', address: '127.0.0.1' }` + * @since v0.1.90 + */ + address(): AddressInfo | {}; + /** + * Calling `unref()` on a socket will allow the program to exit if this is the only + * active socket in the event system. If the socket is already `unref`ed calling`unref()` again will have no effect. + * @since v0.9.1 + * @return The socket itself. + */ + unref(): this; + /** + * Opposite of `unref()`, calling `ref()` on a previously `unref`ed socket will _not_ let the program exit if it's the only socket left (the default behavior). + * If the socket is `ref`ed calling `ref` again will have no effect. + * @since v0.9.1 + * @return The socket itself. + */ + ref(): this; + /** + * This property is only present if the family autoselection algorithm is enabled in `socket.connect(options)` + * and it is an array of the addresses that have been attempted. + * + * Each address is a string in the form of `$IP:$PORT`. + * If the connection was successful, then the last address is the one that the socket is currently connected to. + * @since v19.4.0 + */ + readonly autoSelectFamilyAttemptedAddresses: string[]; + /** + * This property shows the number of characters buffered for writing. The buffer + * may contain strings whose length after encoding is not yet known. So this number + * is only an approximation of the number of bytes in the buffer. + * + * `net.Socket` has the property that `socket.write()` always works. This is to + * help users get up and running quickly. The computer cannot always keep up + * with the amount of data that is written to a socket. The network connection + * simply might be too slow. Node.js will internally queue up the data written to a + * socket and send it out over the wire when it is possible. + * + * The consequence of this internal buffering is that memory may grow. + * Users who experience large or growing `bufferSize` should attempt to + * "throttle" the data flows in their program with `socket.pause()` and `socket.resume()`. + * @since v0.3.8 + * @deprecated Since v14.6.0 - Use `writableLength` instead. + */ + readonly bufferSize: number; + /** + * The amount of received bytes. + * @since v0.5.3 + */ + readonly bytesRead: number; + /** + * The amount of bytes sent. + * @since v0.5.3 + */ + readonly bytesWritten: number; + /** + * If `true`, `socket.connect(options[, connectListener])` was + * called and has not yet finished. It will stay `true` until the socket becomes + * connected, then it is set to `false` and the `'connect'` event is emitted. Note + * that the `socket.connect(options[, connectListener])` callback is a listener for the `'connect'` event. + * @since v6.1.0 + */ + readonly connecting: boolean; + /** + * This is `true` if the socket is not connected yet, either because `.connect()`has not yet been called or because it is still in the process of connecting + * (see `socket.connecting`). + * @since v11.2.0, v10.16.0 + */ + readonly pending: boolean; + /** + * See `writable.destroyed` for further details. + */ + readonly destroyed: boolean; + /** + * The string representation of the local IP address the remote client is + * connecting on. For example, in a server listening on `'0.0.0.0'`, if a client + * connects on `'192.168.1.1'`, the value of `socket.localAddress` would be`'192.168.1.1'`. + * @since v0.9.6 + */ + readonly localAddress?: string; + /** + * The numeric representation of the local port. For example, `80` or `21`. + * @since v0.9.6 + */ + readonly localPort?: number; + /** + * The string representation of the local IP family. `'IPv4'` or `'IPv6'`. + * @since v18.8.0, v16.18.0 + */ + readonly localFamily?: string; + /** + * This property represents the state of the connection as a string. + * + * * If the stream is connecting `socket.readyState` is `opening`. + * * If the stream is readable and writable, it is `open`. + * * If the stream is readable and not writable, it is `readOnly`. + * * If the stream is not readable and writable, it is `writeOnly`. + * @since v0.5.0 + */ + readonly readyState: SocketReadyState; + /** + * The string representation of the remote IP address. For example,`'74.125.127.100'` or `'2001:4860:a005::68'`. Value may be `undefined` if + * the socket is destroyed (for example, if the client disconnected). + * @since v0.5.10 + */ + readonly remoteAddress: string | undefined; + /** + * The string representation of the remote IP family. `'IPv4'` or `'IPv6'`. Value may be `undefined` if + * the socket is destroyed (for example, if the client disconnected). + * @since v0.11.14 + */ + readonly remoteFamily: string | undefined; + /** + * The numeric representation of the remote port. For example, `80` or `21`. Value may be `undefined` if + * the socket is destroyed (for example, if the client disconnected). + * @since v0.5.10 + */ + readonly remotePort: number | undefined; + /** + * The socket timeout in milliseconds as set by `socket.setTimeout()`. + * It is `undefined` if a timeout has not been set. + * @since v10.7.0 + */ + readonly timeout?: number; + /** + * Half-closes the socket. i.e., it sends a FIN packet. It is possible the + * server will still send some data. + * + * See `writable.end()` for further details. + * @since v0.1.90 + * @param [encoding='utf8'] Only used when data is `string`. + * @param callback Optional callback for when the socket is finished. + * @return The socket itself. + */ + end(callback?: () => void): this; + end(buffer: Uint8Array | string, callback?: () => void): this; + end(str: Uint8Array | string, encoding?: BufferEncoding, callback?: () => void): this; + /** + * events.EventEmitter + * 1. close + * 2. connect + * 3. connectionAttempt + * 4. connectionAttemptFailed + * 5. connectionAttemptTimeout + * 6. data + * 7. drain + * 8. end + * 9. error + * 10. lookup + * 11. ready + * 12. timeout + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: (hadError: boolean) => void): this; + addListener(event: "connect", listener: () => void): this; + addListener(event: "connectionAttempt", listener: (ip: string, port: number, family: number) => void): this; + addListener( + event: "connectionAttemptFailed", + listener: (ip: string, port: number, family: number, error: Error) => void, + ): this; + addListener( + event: "connectionAttemptTimeout", + listener: (ip: string, port: number, family: number) => void, + ): this; + addListener(event: "data", listener: (data: NonSharedBuffer) => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + addListener(event: "ready", listener: () => void): this; + addListener(event: "timeout", listener: () => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close", hadError: boolean): boolean; + emit(event: "connect"): boolean; + emit(event: "connectionAttempt", ip: string, port: number, family: number): boolean; + emit(event: "connectionAttemptFailed", ip: string, port: number, family: number, error: Error): boolean; + emit(event: "connectionAttemptTimeout", ip: string, port: number, family: number): boolean; + emit(event: "data", data: NonSharedBuffer): boolean; + emit(event: "drain"): boolean; + emit(event: "end"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "lookup", err: Error, address: string, family: string | number, host: string): boolean; + emit(event: "ready"): boolean; + emit(event: "timeout"): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: (hadError: boolean) => void): this; + on(event: "connect", listener: () => void): this; + on(event: "connectionAttempt", listener: (ip: string, port: number, family: number) => void): this; + on( + event: "connectionAttemptFailed", + listener: (ip: string, port: number, family: number, error: Error) => void, + ): this; + on(event: "connectionAttemptTimeout", listener: (ip: string, port: number, family: number) => void): this; + on(event: "data", listener: (data: NonSharedBuffer) => void): this; + on(event: "drain", listener: () => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + on(event: "ready", listener: () => void): this; + on(event: "timeout", listener: () => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: (hadError: boolean) => void): this; + once(event: "connectionAttempt", listener: (ip: string, port: number, family: number) => void): this; + once( + event: "connectionAttemptFailed", + listener: (ip: string, port: number, family: number, error: Error) => void, + ): this; + once(event: "connectionAttemptTimeout", listener: (ip: string, port: number, family: number) => void): this; + once(event: "connect", listener: () => void): this; + once(event: "data", listener: (data: NonSharedBuffer) => void): this; + once(event: "drain", listener: () => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + once(event: "ready", listener: () => void): this; + once(event: "timeout", listener: () => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: (hadError: boolean) => void): this; + prependListener(event: "connect", listener: () => void): this; + prependListener(event: "connectionAttempt", listener: (ip: string, port: number, family: number) => void): this; + prependListener( + event: "connectionAttemptFailed", + listener: (ip: string, port: number, family: number, error: Error) => void, + ): this; + prependListener( + event: "connectionAttemptTimeout", + listener: (ip: string, port: number, family: number) => void, + ): this; + prependListener(event: "data", listener: (data: NonSharedBuffer) => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + prependListener(event: "ready", listener: () => void): this; + prependListener(event: "timeout", listener: () => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: (hadError: boolean) => void): this; + prependOnceListener(event: "connect", listener: () => void): this; + prependOnceListener( + event: "connectionAttempt", + listener: (ip: string, port: number, family: number) => void, + ): this; + prependOnceListener( + event: "connectionAttemptFailed", + listener: (ip: string, port: number, family: number, error: Error) => void, + ): this; + prependOnceListener( + event: "connectionAttemptTimeout", + listener: (ip: string, port: number, family: number) => void, + ): this; + prependOnceListener(event: "data", listener: (data: NonSharedBuffer) => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + prependOnceListener(event: "ready", listener: () => void): this; + prependOnceListener(event: "timeout", listener: () => void): this; + } + interface ListenOptions extends Abortable { + backlog?: number | undefined; + exclusive?: boolean | undefined; + host?: string | undefined; + /** + * @default false + */ + ipv6Only?: boolean | undefined; + reusePort?: boolean | undefined; + path?: string | undefined; + port?: number | undefined; + readableAll?: boolean | undefined; + writableAll?: boolean | undefined; + } + interface ServerOpts { + /** + * Indicates whether half-opened TCP connections are allowed. + * @default false + */ + allowHalfOpen?: boolean | undefined; + /** + * Indicates whether the socket should be paused on incoming connections. + * @default false + */ + pauseOnConnect?: boolean | undefined; + /** + * If set to `true`, it disables the use of Nagle's algorithm immediately after a new incoming connection is received. + * @default false + * @since v16.5.0 + */ + noDelay?: boolean | undefined; + /** + * If set to `true`, it enables keep-alive functionality on the socket immediately after a new incoming connection is received, + * similarly on what is done in `socket.setKeepAlive([enable][, initialDelay])`. + * @default false + * @since v16.5.0 + */ + keepAlive?: boolean | undefined; + /** + * If set to a positive number, it sets the initial delay before the first keepalive probe is sent on an idle socket. + * @default 0 + * @since v16.5.0 + */ + keepAliveInitialDelay?: number | undefined; + /** + * Optionally overrides all `net.Socket`s' `readableHighWaterMark` and `writableHighWaterMark`. + * @default See [stream.getDefaultHighWaterMark()](https://nodejs.org/docs/latest-v24.x/api/stream.html#streamgetdefaulthighwatermarkobjectmode). + * @since v18.17.0, v20.1.0 + */ + highWaterMark?: number | undefined; + /** + * `blockList` can be used for disabling inbound + * access to specific IP addresses, IP ranges, or IP subnets. This does not + * work if the server is behind a reverse proxy, NAT, etc. because the address + * checked against the block list is the address of the proxy, or the one + * specified by the NAT. + * @since v22.13.0 + */ + blockList?: BlockList | undefined; + } + interface DropArgument { + localAddress?: string; + localPort?: number; + localFamily?: string; + remoteAddress?: string; + remotePort?: number; + remoteFamily?: string; + } + /** + * This class is used to create a TCP or `IPC` server. + * @since v0.1.90 + */ + class Server extends EventEmitter { + constructor(connectionListener?: (socket: Socket) => void); + constructor(options?: ServerOpts, connectionListener?: (socket: Socket) => void); + /** + * Start a server listening for connections. A `net.Server` can be a TCP or + * an `IPC` server depending on what it listens to. + * + * Possible signatures: + * + * * `server.listen(handle[, backlog][, callback])` + * * `server.listen(options[, callback])` + * * `server.listen(path[, backlog][, callback])` for `IPC` servers + * * `server.listen([port[, host[, backlog]]][, callback])` for TCP servers + * + * This function is asynchronous. When the server starts listening, the `'listening'` event will be emitted. The last parameter `callback`will be added as a listener for the `'listening'` + * event. + * + * All `listen()` methods can take a `backlog` parameter to specify the maximum + * length of the queue of pending connections. The actual length will be determined + * by the OS through sysctl settings such as `tcp_max_syn_backlog` and `somaxconn` on Linux. The default value of this parameter is 511 (not 512). + * + * All {@link Socket} are set to `SO_REUSEADDR` (see [`socket(7)`](https://man7.org/linux/man-pages/man7/socket.7.html) for + * details). + * + * The `server.listen()` method can be called again if and only if there was an + * error during the first `server.listen()` call or `server.close()` has been + * called. Otherwise, an `ERR_SERVER_ALREADY_LISTEN` error will be thrown. + * + * One of the most common errors raised when listening is `EADDRINUSE`. + * This happens when another server is already listening on the requested`port`/`path`/`handle`. One way to handle this would be to retry + * after a certain amount of time: + * + * ```js + * server.on('error', (e) => { + * if (e.code === 'EADDRINUSE') { + * console.error('Address in use, retrying...'); + * setTimeout(() => { + * server.close(); + * server.listen(PORT, HOST); + * }, 1000); + * } + * }); + * ``` + */ + listen(port?: number, hostname?: string, backlog?: number, listeningListener?: () => void): this; + listen(port?: number, hostname?: string, listeningListener?: () => void): this; + listen(port?: number, backlog?: number, listeningListener?: () => void): this; + listen(port?: number, listeningListener?: () => void): this; + listen(path: string, backlog?: number, listeningListener?: () => void): this; + listen(path: string, listeningListener?: () => void): this; + listen(options: ListenOptions, listeningListener?: () => void): this; + listen(handle: any, backlog?: number, listeningListener?: () => void): this; + listen(handle: any, listeningListener?: () => void): this; + /** + * Stops the server from accepting new connections and keeps existing + * connections. This function is asynchronous, the server is finally closed + * when all connections are ended and the server emits a `'close'` event. + * The optional `callback` will be called once the `'close'` event occurs. Unlike + * that event, it will be called with an `Error` as its only argument if the server + * was not open when it was closed. + * @since v0.1.90 + * @param callback Called when the server is closed. + */ + close(callback?: (err?: Error) => void): this; + /** + * Returns the bound `address`, the address `family` name, and `port` of the server + * as reported by the operating system if listening on an IP socket + * (useful to find which port was assigned when getting an OS-assigned address):`{ port: 12346, family: 'IPv4', address: '127.0.0.1' }`. + * + * For a server listening on a pipe or Unix domain socket, the name is returned + * as a string. + * + * ```js + * const server = net.createServer((socket) => { + * socket.end('goodbye\n'); + * }).on('error', (err) => { + * // Handle errors here. + * throw err; + * }); + * + * // Grab an arbitrary unused port. + * server.listen(() => { + * console.log('opened server on', server.address()); + * }); + * ``` + * + * `server.address()` returns `null` before the `'listening'` event has been + * emitted or after calling `server.close()`. + * @since v0.1.90 + */ + address(): AddressInfo | string | null; + /** + * Asynchronously get the number of concurrent connections on the server. Works + * when sockets were sent to forks. + * + * Callback should take two arguments `err` and `count`. + * @since v0.9.7 + */ + getConnections(cb: (error: Error | null, count: number) => void): this; + /** + * Opposite of `unref()`, calling `ref()` on a previously `unref`ed server will _not_ let the program exit if it's the only server left (the default behavior). + * If the server is `ref`ed calling `ref()` again will have no effect. + * @since v0.9.1 + */ + ref(): this; + /** + * Calling `unref()` on a server will allow the program to exit if this is the only + * active server in the event system. If the server is already `unref`ed calling`unref()` again will have no effect. + * @since v0.9.1 + */ + unref(): this; + /** + * Set this property to reject connections when the server's connection count gets + * high. + * + * It is not recommended to use this option once a socket has been sent to a child + * with `child_process.fork()`. + * @since v0.2.0 + */ + maxConnections: number; + connections: number; + /** + * Indicates whether or not the server is listening for connections. + * @since v5.7.0 + */ + readonly listening: boolean; + /** + * events.EventEmitter + * 1. close + * 2. connection + * 3. error + * 4. listening + * 5. drop + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "connection", listener: (socket: Socket) => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "listening", listener: () => void): this; + addListener(event: "drop", listener: (data?: DropArgument) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "connection", socket: Socket): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "listening"): boolean; + emit(event: "drop", data?: DropArgument): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "connection", listener: (socket: Socket) => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "listening", listener: () => void): this; + on(event: "drop", listener: (data?: DropArgument) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "connection", listener: (socket: Socket) => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "listening", listener: () => void): this; + once(event: "drop", listener: (data?: DropArgument) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "connection", listener: (socket: Socket) => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "listening", listener: () => void): this; + prependListener(event: "drop", listener: (data?: DropArgument) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "connection", listener: (socket: Socket) => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "listening", listener: () => void): this; + prependOnceListener(event: "drop", listener: (data?: DropArgument) => void): this; + /** + * Calls {@link Server.close()} and returns a promise that fulfills when the server has closed. + * @since v20.5.0 + */ + [Symbol.asyncDispose](): Promise; + } + type IPVersion = "ipv4" | "ipv6"; + /** + * The `BlockList` object can be used with some network APIs to specify rules for + * disabling inbound or outbound access to specific IP addresses, IP ranges, or + * IP subnets. + * @since v15.0.0, v14.18.0 + */ + class BlockList { + /** + * Adds a rule to block the given IP address. + * @since v15.0.0, v14.18.0 + * @param address An IPv4 or IPv6 address. + * @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. + */ + addAddress(address: string, type?: IPVersion): void; + addAddress(address: SocketAddress): void; + /** + * Adds a rule to block a range of IP addresses from `start` (inclusive) to`end` (inclusive). + * @since v15.0.0, v14.18.0 + * @param start The starting IPv4 or IPv6 address in the range. + * @param end The ending IPv4 or IPv6 address in the range. + * @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. + */ + addRange(start: string, end: string, type?: IPVersion): void; + addRange(start: SocketAddress, end: SocketAddress): void; + /** + * Adds a rule to block a range of IP addresses specified as a subnet mask. + * @since v15.0.0, v14.18.0 + * @param net The network IPv4 or IPv6 address. + * @param prefix The number of CIDR prefix bits. For IPv4, this must be a value between `0` and `32`. For IPv6, this must be between `0` and `128`. + * @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. + */ + addSubnet(net: SocketAddress, prefix: number): void; + addSubnet(net: string, prefix: number, type?: IPVersion): void; + /** + * Returns `true` if the given IP address matches any of the rules added to the`BlockList`. + * + * ```js + * const blockList = new net.BlockList(); + * blockList.addAddress('123.123.123.123'); + * blockList.addRange('10.0.0.1', '10.0.0.10'); + * blockList.addSubnet('8592:757c:efae:4e45::', 64, 'ipv6'); + * + * console.log(blockList.check('123.123.123.123')); // Prints: true + * console.log(blockList.check('10.0.0.3')); // Prints: true + * console.log(blockList.check('222.111.111.222')); // Prints: false + * + * // IPv6 notation for IPv4 addresses works: + * console.log(blockList.check('::ffff:7b7b:7b7b', 'ipv6')); // Prints: true + * console.log(blockList.check('::ffff:123.123.123.123', 'ipv6')); // Prints: true + * ``` + * @since v15.0.0, v14.18.0 + * @param address The IP address to check + * @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. + */ + check(address: SocketAddress): boolean; + check(address: string, type?: IPVersion): boolean; + /** + * The list of rules added to the blocklist. + * @since v15.0.0, v14.18.0 + */ + rules: readonly string[]; + /** + * Returns `true` if the `value` is a `net.BlockList`. + * @since v22.13.0 + * @param value Any JS value + */ + static isBlockList(value: unknown): value is BlockList; + /** + * ```js + * const blockList = new net.BlockList(); + * const data = [ + * 'Subnet: IPv4 192.168.1.0/24', + * 'Address: IPv4 10.0.0.5', + * 'Range: IPv4 192.168.2.1-192.168.2.10', + * 'Range: IPv4 10.0.0.1-10.0.0.10', + * ]; + * blockList.fromJSON(data); + * blockList.fromJSON(JSON.stringify(data)); + * ``` + * @since v24.5.0 + * @experimental + */ + fromJSON(data: string | readonly string[]): void; + /** + * @since v24.5.0 + * @experimental + */ + toJSON(): readonly string[]; + } + interface TcpNetConnectOpts extends TcpSocketConnectOpts, SocketConstructorOpts { + timeout?: number | undefined; + } + interface IpcNetConnectOpts extends IpcSocketConnectOpts, SocketConstructorOpts { + timeout?: number | undefined; + } + type NetConnectOpts = TcpNetConnectOpts | IpcNetConnectOpts; + /** + * Creates a new TCP or `IPC` server. + * + * If `allowHalfOpen` is set to `true`, when the other end of the socket + * signals the end of transmission, the server will only send back the end of + * transmission when `socket.end()` is explicitly called. For example, in the + * context of TCP, when a FIN packed is received, a FIN packed is sent + * back only when `socket.end()` is explicitly called. Until then the + * connection is half-closed (non-readable but still writable). See `'end'` event and [RFC 1122](https://tools.ietf.org/html/rfc1122) (section 4.2.2.13) for more information. + * + * If `pauseOnConnect` is set to `true`, then the socket associated with each + * incoming connection will be paused, and no data will be read from its handle. + * This allows connections to be passed between processes without any data being + * read by the original process. To begin reading data from a paused socket, call `socket.resume()`. + * + * The server can be a TCP server or an `IPC` server, depending on what it `listen()` to. + * + * Here is an example of a TCP echo server which listens for connections + * on port 8124: + * + * ```js + * import net from 'node:net'; + * const server = net.createServer((c) => { + * // 'connection' listener. + * console.log('client connected'); + * c.on('end', () => { + * console.log('client disconnected'); + * }); + * c.write('hello\r\n'); + * c.pipe(c); + * }); + * server.on('error', (err) => { + * throw err; + * }); + * server.listen(8124, () => { + * console.log('server bound'); + * }); + * ``` + * + * Test this by using `telnet`: + * + * ```bash + * telnet localhost 8124 + * ``` + * + * To listen on the socket `/tmp/echo.sock`: + * + * ```js + * server.listen('/tmp/echo.sock', () => { + * console.log('server bound'); + * }); + * ``` + * + * Use `nc` to connect to a Unix domain socket server: + * + * ```bash + * nc -U /tmp/echo.sock + * ``` + * @since v0.5.0 + * @param connectionListener Automatically set as a listener for the {@link 'connection'} event. + */ + function createServer(connectionListener?: (socket: Socket) => void): Server; + function createServer(options?: ServerOpts, connectionListener?: (socket: Socket) => void): Server; + /** + * Aliases to {@link createConnection}. + * + * Possible signatures: + * + * * {@link connect} + * * {@link connect} for `IPC` connections. + * * {@link connect} for TCP connections. + */ + function connect(options: NetConnectOpts, connectionListener?: () => void): Socket; + function connect(port: number, host?: string, connectionListener?: () => void): Socket; + function connect(path: string, connectionListener?: () => void): Socket; + /** + * A factory function, which creates a new {@link Socket}, + * immediately initiates connection with `socket.connect()`, + * then returns the `net.Socket` that starts the connection. + * + * When the connection is established, a `'connect'` event will be emitted + * on the returned socket. The last parameter `connectListener`, if supplied, + * will be added as a listener for the `'connect'` event **once**. + * + * Possible signatures: + * + * * {@link createConnection} + * * {@link createConnection} for `IPC` connections. + * * {@link createConnection} for TCP connections. + * + * The {@link connect} function is an alias to this function. + */ + function createConnection(options: NetConnectOpts, connectionListener?: () => void): Socket; + function createConnection(port: number, host?: string, connectionListener?: () => void): Socket; + function createConnection(path: string, connectionListener?: () => void): Socket; + /** + * Gets the current default value of the `autoSelectFamily` option of `socket.connect(options)`. + * The initial default value is `true`, unless the command line option`--no-network-family-autoselection` is provided. + * @since v19.4.0 + */ + function getDefaultAutoSelectFamily(): boolean; + /** + * Sets the default value of the `autoSelectFamily` option of `socket.connect(options)`. + * @param value The new default value. + * The initial default value is `true`, unless the command line option + * `--no-network-family-autoselection` is provided. + * @since v19.4.0 + */ + function setDefaultAutoSelectFamily(value: boolean): void; + /** + * Gets the current default value of the `autoSelectFamilyAttemptTimeout` option of `socket.connect(options)`. + * The initial default value is `250` or the value specified via the command line option `--network-family-autoselection-attempt-timeout`. + * @returns The current default value of the `autoSelectFamilyAttemptTimeout` option. + * @since v19.8.0, v18.8.0 + */ + function getDefaultAutoSelectFamilyAttemptTimeout(): number; + /** + * Sets the default value of the `autoSelectFamilyAttemptTimeout` option of `socket.connect(options)`. + * @param value The new default value, which must be a positive number. If the number is less than `10`, the value `10` is used instead. The initial default value is `250` or the value specified via the command line + * option `--network-family-autoselection-attempt-timeout`. + * @since v19.8.0, v18.8.0 + */ + function setDefaultAutoSelectFamilyAttemptTimeout(value: number): void; + /** + * Returns `6` if `input` is an IPv6 address. Returns `4` if `input` is an IPv4 + * address in [dot-decimal notation](https://en.wikipedia.org/wiki/Dot-decimal_notation) with no leading zeroes. Otherwise, returns`0`. + * + * ```js + * net.isIP('::1'); // returns 6 + * net.isIP('127.0.0.1'); // returns 4 + * net.isIP('127.000.000.001'); // returns 0 + * net.isIP('127.0.0.1/24'); // returns 0 + * net.isIP('fhqwhgads'); // returns 0 + * ``` + * @since v0.3.0 + */ + function isIP(input: string): number; + /** + * Returns `true` if `input` is an IPv4 address in [dot-decimal notation](https://en.wikipedia.org/wiki/Dot-decimal_notation) with no + * leading zeroes. Otherwise, returns `false`. + * + * ```js + * net.isIPv4('127.0.0.1'); // returns true + * net.isIPv4('127.000.000.001'); // returns false + * net.isIPv4('127.0.0.1/24'); // returns false + * net.isIPv4('fhqwhgads'); // returns false + * ``` + * @since v0.3.0 + */ + function isIPv4(input: string): boolean; + /** + * Returns `true` if `input` is an IPv6 address. Otherwise, returns `false`. + * + * ```js + * net.isIPv6('::1'); // returns true + * net.isIPv6('fhqwhgads'); // returns false + * ``` + * @since v0.3.0 + */ + function isIPv6(input: string): boolean; + interface SocketAddressInitOptions { + /** + * The network address as either an IPv4 or IPv6 string. + * @default 127.0.0.1 + */ + address?: string | undefined; + /** + * @default `'ipv4'` + */ + family?: IPVersion | undefined; + /** + * An IPv6 flow-label used only if `family` is `'ipv6'`. + * @default 0 + */ + flowlabel?: number | undefined; + /** + * An IP port. + * @default 0 + */ + port?: number | undefined; + } + /** + * @since v15.14.0, v14.18.0 + */ + class SocketAddress { + constructor(options: SocketAddressInitOptions); + /** + * Either \`'ipv4'\` or \`'ipv6'\`. + * @since v15.14.0, v14.18.0 + */ + readonly address: string; + /** + * Either \`'ipv4'\` or \`'ipv6'\`. + * @since v15.14.0, v14.18.0 + */ + readonly family: IPVersion; + /** + * @since v15.14.0, v14.18.0 + */ + readonly port: number; + /** + * @since v15.14.0, v14.18.0 + */ + readonly flowlabel: number; + /** + * @since v22.13.0 + * @param input An input string containing an IP address and optional port, + * e.g. `123.1.2.3:1234` or `[1::1]:1234`. + * @returns Returns a `SocketAddress` if parsing was successful. + * Otherwise returns `undefined`. + */ + static parse(input: string): SocketAddress | undefined; + } +} +declare module "node:net" { + export * from "net"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/os.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/os.d.ts new file mode 100644 index 00000000..505f5b44 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/os.d.ts @@ -0,0 +1,507 @@ +/** + * The `node:os` module provides operating system-related utility methods and + * properties. It can be accessed using: + * + * ```js + * import os from 'node:os'; + * ``` + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/os.js) + */ +declare module "os" { + import { NonSharedBuffer } from "buffer"; + interface CpuInfo { + model: string; + speed: number; + times: { + /** The number of milliseconds the CPU has spent in user mode. */ + user: number; + /** The number of milliseconds the CPU has spent in nice mode. */ + nice: number; + /** The number of milliseconds the CPU has spent in sys mode. */ + sys: number; + /** The number of milliseconds the CPU has spent in idle mode. */ + idle: number; + /** The number of milliseconds the CPU has spent in irq mode. */ + irq: number; + }; + } + interface NetworkInterfaceBase { + address: string; + netmask: string; + mac: string; + internal: boolean; + cidr: string | null; + scopeid?: number; + } + interface NetworkInterfaceInfoIPv4 extends NetworkInterfaceBase { + family: "IPv4"; + } + interface NetworkInterfaceInfoIPv6 extends NetworkInterfaceBase { + family: "IPv6"; + scopeid: number; + } + interface UserInfo { + username: T; + uid: number; + gid: number; + shell: T | null; + homedir: T; + } + type NetworkInterfaceInfo = NetworkInterfaceInfoIPv4 | NetworkInterfaceInfoIPv6; + /** + * Returns the host name of the operating system as a string. + * @since v0.3.3 + */ + function hostname(): string; + /** + * Returns an array containing the 1, 5, and 15 minute load averages. + * + * The load average is a measure of system activity calculated by the operating + * system and expressed as a fractional number. + * + * The load average is a Unix-specific concept. On Windows, the return value is + * always `[0, 0, 0]`. + * @since v0.3.3 + */ + function loadavg(): number[]; + /** + * Returns the system uptime in number of seconds. + * @since v0.3.3 + */ + function uptime(): number; + /** + * Returns the amount of free system memory in bytes as an integer. + * @since v0.3.3 + */ + function freemem(): number; + /** + * Returns the total amount of system memory in bytes as an integer. + * @since v0.3.3 + */ + function totalmem(): number; + /** + * Returns an array of objects containing information about each logical CPU core. + * The array will be empty if no CPU information is available, such as if the `/proc` file system is unavailable. + * + * The properties included on each object include: + * + * ```js + * [ + * { + * model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', + * speed: 2926, + * times: { + * user: 252020, + * nice: 0, + * sys: 30340, + * idle: 1070356870, + * irq: 0, + * }, + * }, + * { + * model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', + * speed: 2926, + * times: { + * user: 306960, + * nice: 0, + * sys: 26980, + * idle: 1071569080, + * irq: 0, + * }, + * }, + * { + * model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', + * speed: 2926, + * times: { + * user: 248450, + * nice: 0, + * sys: 21750, + * idle: 1070919370, + * irq: 0, + * }, + * }, + * { + * model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', + * speed: 2926, + * times: { + * user: 256880, + * nice: 0, + * sys: 19430, + * idle: 1070905480, + * irq: 20, + * }, + * }, + * ] + * ``` + * + * `nice` values are POSIX-only. On Windows, the `nice` values of all processors + * are always 0. + * + * `os.cpus().length` should not be used to calculate the amount of parallelism + * available to an application. Use {@link availableParallelism} for this purpose. + * @since v0.3.3 + */ + function cpus(): CpuInfo[]; + /** + * Returns an estimate of the default amount of parallelism a program should use. + * Always returns a value greater than zero. + * + * This function is a small wrapper about libuv's [`uv_available_parallelism()`](https://docs.libuv.org/en/v1.x/misc.html#c.uv_available_parallelism). + * @since v19.4.0, v18.14.0 + */ + function availableParallelism(): number; + /** + * Returns the operating system name as returned by [`uname(3)`](https://linux.die.net/man/3/uname). For example, it + * returns `'Linux'` on Linux, `'Darwin'` on macOS, and `'Windows_NT'` on Windows. + * + * See [https://en.wikipedia.org/wiki/Uname#Examples](https://en.wikipedia.org/wiki/Uname#Examples) for additional information + * about the output of running [`uname(3)`](https://linux.die.net/man/3/uname) on various operating systems. + * @since v0.3.3 + */ + function type(): string; + /** + * Returns the operating system as a string. + * + * On POSIX systems, the operating system release is determined by calling [`uname(3)`](https://linux.die.net/man/3/uname). On Windows, `GetVersionExW()` is used. See + * [https://en.wikipedia.org/wiki/Uname#Examples](https://en.wikipedia.org/wiki/Uname#Examples) for more information. + * @since v0.3.3 + */ + function release(): string; + /** + * Returns an object containing network interfaces that have been assigned a + * network address. + * + * Each key on the returned object identifies a network interface. The associated + * value is an array of objects that each describe an assigned network address. + * + * The properties available on the assigned network address object include: + * + * ```js + * { + * lo: [ + * { + * address: '127.0.0.1', + * netmask: '255.0.0.0', + * family: 'IPv4', + * mac: '00:00:00:00:00:00', + * internal: true, + * cidr: '127.0.0.1/8' + * }, + * { + * address: '::1', + * netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', + * family: 'IPv6', + * mac: '00:00:00:00:00:00', + * scopeid: 0, + * internal: true, + * cidr: '::1/128' + * } + * ], + * eth0: [ + * { + * address: '192.168.1.108', + * netmask: '255.255.255.0', + * family: 'IPv4', + * mac: '01:02:03:0a:0b:0c', + * internal: false, + * cidr: '192.168.1.108/24' + * }, + * { + * address: 'fe80::a00:27ff:fe4e:66a1', + * netmask: 'ffff:ffff:ffff:ffff::', + * family: 'IPv6', + * mac: '01:02:03:0a:0b:0c', + * scopeid: 1, + * internal: false, + * cidr: 'fe80::a00:27ff:fe4e:66a1/64' + * } + * ] + * } + * ``` + * @since v0.6.0 + */ + function networkInterfaces(): NodeJS.Dict; + /** + * Returns the string path of the current user's home directory. + * + * On POSIX, it uses the `$HOME` environment variable if defined. Otherwise it + * uses the [effective UID](https://en.wikipedia.org/wiki/User_identifier#Effective_user_ID) to look up the user's home directory. + * + * On Windows, it uses the `USERPROFILE` environment variable if defined. + * Otherwise it uses the path to the profile directory of the current user. + * @since v2.3.0 + */ + function homedir(): string; + interface UserInfoOptions { + encoding?: BufferEncoding | "buffer" | undefined; + } + interface UserInfoOptionsWithBufferEncoding extends UserInfoOptions { + encoding: "buffer"; + } + interface UserInfoOptionsWithStringEncoding extends UserInfoOptions { + encoding?: BufferEncoding | undefined; + } + /** + * Returns information about the currently effective user. On POSIX platforms, + * this is typically a subset of the password file. The returned object includes + * the `username`, `uid`, `gid`, `shell`, and `homedir`. On Windows, the `uid` and `gid` fields are `-1`, and `shell` is `null`. + * + * The value of `homedir` returned by `os.userInfo()` is provided by the operating + * system. This differs from the result of `os.homedir()`, which queries + * environment variables for the home directory before falling back to the + * operating system response. + * + * Throws a [`SystemError`](https://nodejs.org/docs/latest-v24.x/api/errors.html#class-systemerror) if a user has no `username` or `homedir`. + * @since v6.0.0 + */ + function userInfo(options?: UserInfoOptionsWithStringEncoding): UserInfo; + function userInfo(options: UserInfoOptionsWithBufferEncoding): UserInfo; + function userInfo(options: UserInfoOptions): UserInfo; + type SignalConstants = { + [key in NodeJS.Signals]: number; + }; + namespace constants { + const UV_UDP_REUSEADDR: number; + namespace signals {} + const signals: SignalConstants; + namespace errno { + const E2BIG: number; + const EACCES: number; + const EADDRINUSE: number; + const EADDRNOTAVAIL: number; + const EAFNOSUPPORT: number; + const EAGAIN: number; + const EALREADY: number; + const EBADF: number; + const EBADMSG: number; + const EBUSY: number; + const ECANCELED: number; + const ECHILD: number; + const ECONNABORTED: number; + const ECONNREFUSED: number; + const ECONNRESET: number; + const EDEADLK: number; + const EDESTADDRREQ: number; + const EDOM: number; + const EDQUOT: number; + const EEXIST: number; + const EFAULT: number; + const EFBIG: number; + const EHOSTUNREACH: number; + const EIDRM: number; + const EILSEQ: number; + const EINPROGRESS: number; + const EINTR: number; + const EINVAL: number; + const EIO: number; + const EISCONN: number; + const EISDIR: number; + const ELOOP: number; + const EMFILE: number; + const EMLINK: number; + const EMSGSIZE: number; + const EMULTIHOP: number; + const ENAMETOOLONG: number; + const ENETDOWN: number; + const ENETRESET: number; + const ENETUNREACH: number; + const ENFILE: number; + const ENOBUFS: number; + const ENODATA: number; + const ENODEV: number; + const ENOENT: number; + const ENOEXEC: number; + const ENOLCK: number; + const ENOLINK: number; + const ENOMEM: number; + const ENOMSG: number; + const ENOPROTOOPT: number; + const ENOSPC: number; + const ENOSR: number; + const ENOSTR: number; + const ENOSYS: number; + const ENOTCONN: number; + const ENOTDIR: number; + const ENOTEMPTY: number; + const ENOTSOCK: number; + const ENOTSUP: number; + const ENOTTY: number; + const ENXIO: number; + const EOPNOTSUPP: number; + const EOVERFLOW: number; + const EPERM: number; + const EPIPE: number; + const EPROTO: number; + const EPROTONOSUPPORT: number; + const EPROTOTYPE: number; + const ERANGE: number; + const EROFS: number; + const ESPIPE: number; + const ESRCH: number; + const ESTALE: number; + const ETIME: number; + const ETIMEDOUT: number; + const ETXTBSY: number; + const EWOULDBLOCK: number; + const EXDEV: number; + const WSAEINTR: number; + const WSAEBADF: number; + const WSAEACCES: number; + const WSAEFAULT: number; + const WSAEINVAL: number; + const WSAEMFILE: number; + const WSAEWOULDBLOCK: number; + const WSAEINPROGRESS: number; + const WSAEALREADY: number; + const WSAENOTSOCK: number; + const WSAEDESTADDRREQ: number; + const WSAEMSGSIZE: number; + const WSAEPROTOTYPE: number; + const WSAENOPROTOOPT: number; + const WSAEPROTONOSUPPORT: number; + const WSAESOCKTNOSUPPORT: number; + const WSAEOPNOTSUPP: number; + const WSAEPFNOSUPPORT: number; + const WSAEAFNOSUPPORT: number; + const WSAEADDRINUSE: number; + const WSAEADDRNOTAVAIL: number; + const WSAENETDOWN: number; + const WSAENETUNREACH: number; + const WSAENETRESET: number; + const WSAECONNABORTED: number; + const WSAECONNRESET: number; + const WSAENOBUFS: number; + const WSAEISCONN: number; + const WSAENOTCONN: number; + const WSAESHUTDOWN: number; + const WSAETOOMANYREFS: number; + const WSAETIMEDOUT: number; + const WSAECONNREFUSED: number; + const WSAELOOP: number; + const WSAENAMETOOLONG: number; + const WSAEHOSTDOWN: number; + const WSAEHOSTUNREACH: number; + const WSAENOTEMPTY: number; + const WSAEPROCLIM: number; + const WSAEUSERS: number; + const WSAEDQUOT: number; + const WSAESTALE: number; + const WSAEREMOTE: number; + const WSASYSNOTREADY: number; + const WSAVERNOTSUPPORTED: number; + const WSANOTINITIALISED: number; + const WSAEDISCON: number; + const WSAENOMORE: number; + const WSAECANCELLED: number; + const WSAEINVALIDPROCTABLE: number; + const WSAEINVALIDPROVIDER: number; + const WSAEPROVIDERFAILEDINIT: number; + const WSASYSCALLFAILURE: number; + const WSASERVICE_NOT_FOUND: number; + const WSATYPE_NOT_FOUND: number; + const WSA_E_NO_MORE: number; + const WSA_E_CANCELLED: number; + const WSAEREFUSED: number; + } + namespace dlopen { + const RTLD_LAZY: number; + const RTLD_NOW: number; + const RTLD_GLOBAL: number; + const RTLD_LOCAL: number; + const RTLD_DEEPBIND: number; + } + namespace priority { + const PRIORITY_LOW: number; + const PRIORITY_BELOW_NORMAL: number; + const PRIORITY_NORMAL: number; + const PRIORITY_ABOVE_NORMAL: number; + const PRIORITY_HIGH: number; + const PRIORITY_HIGHEST: number; + } + } + const devNull: string; + /** + * The operating system-specific end-of-line marker. + * * `\n` on POSIX + * * `\r\n` on Windows + */ + const EOL: string; + /** + * Returns the operating system CPU architecture for which the Node.js binary was + * compiled. Possible values are `'arm'`, `'arm64'`, `'ia32'`, `'loong64'`, + * `'mips'`, `'mipsel'`, `'ppc64'`, `'riscv64'`, `'s390x'`, and `'x64'`. + * + * The return value is equivalent to [process.arch](https://nodejs.org/docs/latest-v24.x/api/process.html#processarch). + * @since v0.5.0 + */ + function arch(): NodeJS.Architecture; + /** + * Returns a string identifying the kernel version. + * + * On POSIX systems, the operating system release is determined by calling [`uname(3)`](https://linux.die.net/man/3/uname). On Windows, `RtlGetVersion()` is used, and if it is not + * available, `GetVersionExW()` will be used. See [https://en.wikipedia.org/wiki/Uname#Examples](https://en.wikipedia.org/wiki/Uname#Examples) for more information. + * @since v13.11.0, v12.17.0 + */ + function version(): string; + /** + * Returns a string identifying the operating system platform for which + * the Node.js binary was compiled. The value is set at compile time. + * Possible values are `'aix'`, `'darwin'`, `'freebsd'`, `'linux'`, `'openbsd'`, `'sunos'`, and `'win32'`. + * + * The return value is equivalent to `process.platform`. + * + * The value `'android'` may also be returned if Node.js is built on the Android + * operating system. [Android support is experimental](https://github.com/nodejs/node/blob/HEAD/BUILDING.md#androidandroid-based-devices-eg-firefox-os). + * @since v0.5.0 + */ + function platform(): NodeJS.Platform; + /** + * Returns the machine type as a string, such as `arm`, `arm64`, `aarch64`, + * `mips`, `mips64`, `ppc64`, `ppc64le`, `s390x`, `i386`, `i686`, `x86_64`. + * + * On POSIX systems, the machine type is determined by calling [`uname(3)`](https://linux.die.net/man/3/uname). On Windows, `RtlGetVersion()` is used, and if it is not + * available, `GetVersionExW()` will be used. See [https://en.wikipedia.org/wiki/Uname#Examples](https://en.wikipedia.org/wiki/Uname#Examples) for more information. + * @since v18.9.0, v16.18.0 + */ + function machine(): string; + /** + * Returns the operating system's default directory for temporary files as a + * string. + * @since v0.9.9 + */ + function tmpdir(): string; + /** + * Returns a string identifying the endianness of the CPU for which the Node.js + * binary was compiled. + * + * Possible values are `'BE'` for big endian and `'LE'` for little endian. + * @since v0.9.4 + */ + function endianness(): "BE" | "LE"; + /** + * Returns the scheduling priority for the process specified by `pid`. If `pid` is + * not provided or is `0`, the priority of the current process is returned. + * @since v10.10.0 + * @param [pid=0] The process ID to retrieve scheduling priority for. + */ + function getPriority(pid?: number): number; + /** + * Attempts to set the scheduling priority for the process specified by `pid`. If `pid` is not provided or is `0`, the process ID of the current process is used. + * + * The `priority` input must be an integer between `-20` (high priority) and `19` (low priority). Due to differences between Unix priority levels and Windows + * priority classes, `priority` is mapped to one of six priority constants in `os.constants.priority`. When retrieving a process priority level, this range + * mapping may cause the return value to be slightly different on Windows. To avoid + * confusion, set `priority` to one of the priority constants. + * + * On Windows, setting priority to `PRIORITY_HIGHEST` requires elevated user + * privileges. Otherwise the set priority will be silently reduced to `PRIORITY_HIGH`. + * @since v10.10.0 + * @param [pid=0] The process ID to set scheduling priority for. + * @param priority The scheduling priority to assign to the process. + */ + function setPriority(priority: number): void; + function setPriority(pid: number, priority: number): void; +} +declare module "node:os" { + export * from "os"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/package.json b/.claude/hooks/check-new-deps/node_modules/@types/node/package.json new file mode 100644 index 00000000..7fa5c34e --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/package.json @@ -0,0 +1,155 @@ +{ + "name": "@types/node", + "version": "24.9.2", + "description": "TypeScript definitions for node", + "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node", + "license": "MIT", + "contributors": [ + { + "name": "Microsoft TypeScript", + "githubUsername": "Microsoft", + "url": "https://github.com/Microsoft" + }, + { + "name": "Alberto Schiabel", + "githubUsername": "jkomyno", + "url": "https://github.com/jkomyno" + }, + { + "name": "Andrew Makarov", + "githubUsername": "r3nya", + "url": "https://github.com/r3nya" + }, + { + "name": "Benjamin Toueg", + "githubUsername": "btoueg", + "url": "https://github.com/btoueg" + }, + { + "name": "David Junger", + "githubUsername": "touffy", + "url": "https://github.com/touffy" + }, + { + "name": "Mohsen Azimi", + "githubUsername": "mohsen1", + "url": "https://github.com/mohsen1" + }, + { + "name": "Nikita Galkin", + "githubUsername": "galkin", + "url": "https://github.com/galkin" + }, + { + "name": "Sebastian Silbermann", + "githubUsername": "eps1lon", + "url": "https://github.com/eps1lon" + }, + { + "name": "Wilco Bakker", + "githubUsername": "WilcoBakker", + "url": "https://github.com/WilcoBakker" + }, + { + "name": "Marcin Kopacz", + "githubUsername": "chyzwar", + "url": "https://github.com/chyzwar" + }, + { + "name": "Trivikram Kamat", + "githubUsername": "trivikr", + "url": "https://github.com/trivikr" + }, + { + "name": "Junxiao Shi", + "githubUsername": "yoursunny", + "url": "https://github.com/yoursunny" + }, + { + "name": "Ilia Baryshnikov", + "githubUsername": "qwelias", + "url": "https://github.com/qwelias" + }, + { + "name": "ExE Boss", + "githubUsername": "ExE-Boss", + "url": "https://github.com/ExE-Boss" + }, + { + "name": "Piotr Błażejewicz", + "githubUsername": "peterblazejewicz", + "url": "https://github.com/peterblazejewicz" + }, + { + "name": "Anna Henningsen", + "githubUsername": "addaleax", + "url": "https://github.com/addaleax" + }, + { + "name": "Victor Perin", + "githubUsername": "victorperin", + "url": "https://github.com/victorperin" + }, + { + "name": "NodeJS Contributors", + "githubUsername": "NodeJS", + "url": "https://github.com/NodeJS" + }, + { + "name": "Linus Unnebäck", + "githubUsername": "LinusU", + "url": "https://github.com/LinusU" + }, + { + "name": "wafuwafu13", + "githubUsername": "wafuwafu13", + "url": "https://github.com/wafuwafu13" + }, + { + "name": "Matteo Collina", + "githubUsername": "mcollina", + "url": "https://github.com/mcollina" + }, + { + "name": "Dmitry Semigradsky", + "githubUsername": "Semigradsky", + "url": "https://github.com/Semigradsky" + }, + { + "name": "René", + "githubUsername": "Renegade334", + "url": "https://github.com/Renegade334" + }, + { + "name": "Yagiz Nizipli", + "githubUsername": "anonrig", + "url": "https://github.com/anonrig" + } + ], + "main": "", + "types": "index.d.ts", + "typesVersions": { + "<=5.6": { + "*": [ + "ts5.6/*" + ] + }, + "<=5.7": { + "*": [ + "ts5.7/*" + ] + } + }, + "repository": { + "type": "git", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", + "directory": "types/node" + }, + "scripts": {}, + "dependencies": { + "undici-types": "~7.16.0" + }, + "peerDependencies": {}, + "typesPublisherContentHash": "7485e2b36dbca4bd6584c40d09cac326c54ac8847561c62753f014789000ec21", + "typeScriptVersion": "5.2" +} \ No newline at end of file diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/path.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/path.d.ts new file mode 100644 index 00000000..d363397f --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/path.d.ts @@ -0,0 +1,200 @@ +declare module "path/posix" { + import path = require("path"); + export = path; +} +declare module "path/win32" { + import path = require("path"); + export = path; +} +/** + * The `node:path` module provides utilities for working with file and directory + * paths. It can be accessed using: + * + * ```js + * import path from 'node:path'; + * ``` + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/path.js) + */ +declare module "path" { + namespace path { + /** + * A parsed path object generated by path.parse() or consumed by path.format(). + */ + interface ParsedPath { + /** + * The root of the path such as '/' or 'c:\' + */ + root: string; + /** + * The full directory path such as '/home/user/dir' or 'c:\path\dir' + */ + dir: string; + /** + * The file name including extension (if any) such as 'index.html' + */ + base: string; + /** + * The file extension (if any) such as '.html' + */ + ext: string; + /** + * The file name without extension (if any) such as 'index' + */ + name: string; + } + interface FormatInputPathObject { + /** + * The root of the path such as '/' or 'c:\' + */ + root?: string | undefined; + /** + * The full directory path such as '/home/user/dir' or 'c:\path\dir' + */ + dir?: string | undefined; + /** + * The file name including extension (if any) such as 'index.html' + */ + base?: string | undefined; + /** + * The file extension (if any) such as '.html' + */ + ext?: string | undefined; + /** + * The file name without extension (if any) such as 'index' + */ + name?: string | undefined; + } + interface PlatformPath { + /** + * Normalize a string path, reducing '..' and '.' parts. + * When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used. + * + * @param path string path to normalize. + * @throws {TypeError} if `path` is not a string. + */ + normalize(path: string): string; + /** + * Join all arguments together and normalize the resulting path. + * + * @param paths paths to join. + * @throws {TypeError} if any of the path segments is not a string. + */ + join(...paths: string[]): string; + /** + * The right-most parameter is considered {to}. Other parameters are considered an array of {from}. + * + * Starting from leftmost {from} parameter, resolves {to} to an absolute path. + * + * If {to} isn't already absolute, {from} arguments are prepended in right to left order, + * until an absolute path is found. If after using all {from} paths still no absolute path is found, + * the current working directory is used as well. The resulting path is normalized, + * and trailing slashes are removed unless the path gets resolved to the root directory. + * + * @param paths A sequence of paths or path segments. + * @throws {TypeError} if any of the arguments is not a string. + */ + resolve(...paths: string[]): string; + /** + * The `path.matchesGlob()` method determines if `path` matches the `pattern`. + * @param path The path to glob-match against. + * @param pattern The glob to check the path against. + * @returns Whether or not the `path` matched the `pattern`. + * @throws {TypeError} if `path` or `pattern` are not strings. + * @since v22.5.0 + */ + matchesGlob(path: string, pattern: string): boolean; + /** + * Determines whether {path} is an absolute path. An absolute path will always resolve to the same location, regardless of the working directory. + * + * If the given {path} is a zero-length string, `false` will be returned. + * + * @param path path to test. + * @throws {TypeError} if `path` is not a string. + */ + isAbsolute(path: string): boolean; + /** + * Solve the relative path from {from} to {to} based on the current working directory. + * At times we have two absolute paths, and we need to derive the relative path from one to the other. This is actually the reverse transform of path.resolve. + * + * @throws {TypeError} if either `from` or `to` is not a string. + */ + relative(from: string, to: string): string; + /** + * Return the directory name of a path. Similar to the Unix dirname command. + * + * @param path the path to evaluate. + * @throws {TypeError} if `path` is not a string. + */ + dirname(path: string): string; + /** + * Return the last portion of a path. Similar to the Unix basename command. + * Often used to extract the file name from a fully qualified path. + * + * @param path the path to evaluate. + * @param suffix optionally, an extension to remove from the result. + * @throws {TypeError} if `path` is not a string or if `ext` is given and is not a string. + */ + basename(path: string, suffix?: string): string; + /** + * Return the extension of the path, from the last '.' to end of string in the last portion of the path. + * If there is no '.' in the last portion of the path or the first character of it is '.', then it returns an empty string. + * + * @param path the path to evaluate. + * @throws {TypeError} if `path` is not a string. + */ + extname(path: string): string; + /** + * The platform-specific file separator. '\\' or '/'. + */ + readonly sep: "\\" | "/"; + /** + * The platform-specific file delimiter. ';' or ':'. + */ + readonly delimiter: ";" | ":"; + /** + * Returns an object from a path string - the opposite of format(). + * + * @param path path to evaluate. + * @throws {TypeError} if `path` is not a string. + */ + parse(path: string): ParsedPath; + /** + * Returns a path string from an object - the opposite of parse(). + * + * @param pathObject path to evaluate. + */ + format(pathObject: FormatInputPathObject): string; + /** + * On Windows systems only, returns an equivalent namespace-prefixed path for the given path. + * If path is not a string, path will be returned without modifications. + * This method is meaningful only on Windows system. + * On POSIX systems, the method is non-operational and always returns path without modifications. + */ + toNamespacedPath(path: string): string; + /** + * Posix specific pathing. + * Same as parent object on posix. + */ + readonly posix: PlatformPath; + /** + * Windows specific pathing. + * Same as parent object on windows + */ + readonly win32: PlatformPath; + } + } + const path: path.PlatformPath; + export = path; +} +declare module "node:path" { + import path = require("path"); + export = path; +} +declare module "node:path/posix" { + import path = require("path/posix"); + export = path; +} +declare module "node:path/win32" { + import path = require("path/win32"); + export = path; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/perf_hooks.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/perf_hooks.d.ts new file mode 100644 index 00000000..ba4b9ade --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/perf_hooks.d.ts @@ -0,0 +1,982 @@ +/** + * This module provides an implementation of a subset of the W3C [Web Performance APIs](https://w3c.github.io/perf-timing-primer/) as well as additional APIs for + * Node.js-specific performance measurements. + * + * Node.js supports the following [Web Performance APIs](https://w3c.github.io/perf-timing-primer/): + * + * * [High Resolution Time](https://www.w3.org/TR/hr-time-2) + * * [Performance Timeline](https://w3c.github.io/performance-timeline/) + * * [User Timing](https://www.w3.org/TR/user-timing/) + * * [Resource Timing](https://www.w3.org/TR/resource-timing-2/) + * + * ```js + * import { PerformanceObserver, performance } from 'node:perf_hooks'; + * + * const obs = new PerformanceObserver((items) => { + * console.log(items.getEntries()[0].duration); + * performance.clearMarks(); + * }); + * obs.observe({ type: 'measure' }); + * performance.measure('Start to Now'); + * + * performance.mark('A'); + * doSomeLongRunningProcess(() => { + * performance.measure('A to Now', 'A'); + * + * performance.mark('B'); + * performance.measure('A to B', 'A', 'B'); + * }); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/perf_hooks.js) + */ +declare module "perf_hooks" { + import { AsyncResource } from "node:async_hooks"; + type EntryType = + | "dns" // Node.js only + | "function" // Node.js only + | "gc" // Node.js only + | "http2" // Node.js only + | "http" // Node.js only + | "mark" // available on the Web + | "measure" // available on the Web + | "net" // Node.js only + | "node" // Node.js only + | "resource"; // available on the Web + interface NodeGCPerformanceDetail { + /** + * When `performanceEntry.entryType` is equal to 'gc', the `performance.kind` property identifies + * the type of garbage collection operation that occurred. + * See perf_hooks.constants for valid values. + */ + readonly kind: number; + /** + * When `performanceEntry.entryType` is equal to 'gc', the `performance.flags` + * property contains additional information about garbage collection operation. + * See perf_hooks.constants for valid values. + */ + readonly flags: number; + } + /** + * The constructor of this class is not exposed to users directly. + * @since v8.5.0 + */ + class PerformanceEntry { + protected constructor(); + /** + * The total number of milliseconds elapsed for this entry. This value will not + * be meaningful for all Performance Entry types. + * @since v8.5.0 + */ + readonly duration: number; + /** + * The name of the performance entry. + * @since v8.5.0 + */ + readonly name: string; + /** + * The high resolution millisecond timestamp marking the starting time of the + * Performance Entry. + * @since v8.5.0 + */ + readonly startTime: number; + /** + * The type of the performance entry. It may be one of: + * + * * `'node'` (Node.js only) + * * `'mark'` (available on the Web) + * * `'measure'` (available on the Web) + * * `'gc'` (Node.js only) + * * `'function'` (Node.js only) + * * `'http2'` (Node.js only) + * * `'http'` (Node.js only) + * @since v8.5.0 + */ + readonly entryType: EntryType; + toJSON(): any; + } + /** + * Exposes marks created via the `Performance.mark()` method. + * @since v18.2.0, v16.17.0 + */ + class PerformanceMark extends PerformanceEntry { + readonly detail: any; + readonly duration: 0; + readonly entryType: "mark"; + } + /** + * Exposes measures created via the `Performance.measure()` method. + * + * The constructor of this class is not exposed to users directly. + * @since v18.2.0, v16.17.0 + */ + class PerformanceMeasure extends PerformanceEntry { + readonly detail: any; + readonly entryType: "measure"; + } + interface UVMetrics { + /** + * Number of event loop iterations. + */ + readonly loopCount: number; + /** + * Number of events that have been processed by the event handler. + */ + readonly events: number; + /** + * Number of events that were waiting to be processed when the event provider was called. + */ + readonly eventsWaiting: number; + } + // TODO: PerformanceNodeEntry is missing + /** + * _This property is an extension by Node.js. It is not available in Web browsers._ + * + * Provides timing details for Node.js itself. The constructor of this class + * is not exposed to users. + * @since v8.5.0 + */ + class PerformanceNodeTiming extends PerformanceEntry { + readonly entryType: "node"; + /** + * The high resolution millisecond timestamp at which the Node.js process + * completed bootstrapping. If bootstrapping has not yet finished, the property + * has the value of -1. + * @since v8.5.0 + */ + readonly bootstrapComplete: number; + /** + * The high resolution millisecond timestamp at which the Node.js environment was + * initialized. + * @since v8.5.0 + */ + readonly environment: number; + /** + * The high resolution millisecond timestamp of the amount of time the event loop + * has been idle within the event loop's event provider (e.g. `epoll_wait`). This + * does not take CPU usage into consideration. If the event loop has not yet + * started (e.g., in the first tick of the main script), the property has the + * value of 0. + * @since v14.10.0, v12.19.0 + */ + readonly idleTime: number; + /** + * The high resolution millisecond timestamp at which the Node.js event loop + * exited. If the event loop has not yet exited, the property has the value of -1\. + * It can only have a value of not -1 in a handler of the `'exit'` event. + * @since v8.5.0 + */ + readonly loopExit: number; + /** + * The high resolution millisecond timestamp at which the Node.js event loop + * started. If the event loop has not yet started (e.g., in the first tick of the + * main script), the property has the value of -1. + * @since v8.5.0 + */ + readonly loopStart: number; + /** + * The high resolution millisecond timestamp at which the Node.js process was initialized. + * @since v8.5.0 + */ + readonly nodeStart: number; + /** + * This is a wrapper to the `uv_metrics_info` function. + * It returns the current set of event loop metrics. + * + * It is recommended to use this property inside a function whose execution was + * scheduled using `setImmediate` to avoid collecting metrics before finishing all + * operations scheduled during the current loop iteration. + * @since v22.8.0, v20.18.0 + */ + readonly uvMetricsInfo: UVMetrics; + /** + * The high resolution millisecond timestamp at which the V8 platform was + * initialized. + * @since v8.5.0 + */ + readonly v8Start: number; + } + interface EventLoopUtilization { + idle: number; + active: number; + utilization: number; + } + /** + * @param utilization1 The result of a previous call to `eventLoopUtilization()`. + * @param utilization2 The result of a previous call to `eventLoopUtilization()` prior to `utilization1`. + */ + type EventLoopUtilityFunction = ( + utilization1?: EventLoopUtilization, + utilization2?: EventLoopUtilization, + ) => EventLoopUtilization; + interface MarkOptions { + /** + * Additional optional detail to include with the mark. + */ + detail?: unknown | undefined; + /** + * An optional timestamp to be used as the mark time. + * @default `performance.now()` + */ + startTime?: number | undefined; + } + interface MeasureOptions { + /** + * Additional optional detail to include with the mark. + */ + detail?: unknown; + /** + * Duration between start and end times. + */ + duration?: number | undefined; + /** + * Timestamp to be used as the end time, or a string identifying a previously recorded mark. + */ + end?: number | string | undefined; + /** + * Timestamp to be used as the start time, or a string identifying a previously recorded mark. + */ + start?: number | string | undefined; + } + interface TimerifyOptions { + /** + * A histogram object created using `perf_hooks.createHistogram()` that will record runtime + * durations in nanoseconds. + */ + histogram?: RecordableHistogram | undefined; + } + interface Performance { + /** + * If `name` is not provided, removes all `PerformanceMark` objects from the Performance Timeline. + * If `name` is provided, removes only the named mark. + * @since v8.5.0 + */ + clearMarks(name?: string): void; + /** + * If `name` is not provided, removes all `PerformanceMeasure` objects from the Performance Timeline. + * If `name` is provided, removes only the named measure. + * @since v16.7.0 + */ + clearMeasures(name?: string): void; + /** + * If `name` is not provided, removes all `PerformanceResourceTiming` objects from the Resource Timeline. + * If `name` is provided, removes only the named resource. + * @since v18.2.0, v16.17.0 + */ + clearResourceTimings(name?: string): void; + /** + * eventLoopUtilization is similar to CPU utilization except that it is calculated using high precision wall-clock time. + * It represents the percentage of time the event loop has spent outside the event loop's event provider (e.g. epoll_wait). + * No other CPU idle time is taken into consideration. + */ + eventLoopUtilization: EventLoopUtilityFunction; + /** + * Returns a list of `PerformanceEntry` objects in chronological order with respect to `performanceEntry.startTime`. + * If you are only interested in performance entries of certain types or that have certain names, see + * `performance.getEntriesByType()` and `performance.getEntriesByName()`. + * @since v16.7.0 + */ + getEntries(): PerformanceEntry[]; + /** + * Returns a list of `PerformanceEntry` objects in chronological order with respect to `performanceEntry.startTime` + * whose `performanceEntry.name` is equal to `name`, and optionally, whose `performanceEntry.entryType` is equal to `type`. + * @param name + * @param type + * @since v16.7.0 + */ + getEntriesByName(name: string, type?: EntryType): PerformanceEntry[]; + /** + * Returns a list of `PerformanceEntry` objects in chronological order with respect to `performanceEntry.startTime` + * whose `performanceEntry.entryType` is equal to `type`. + * @param type + * @since v16.7.0 + */ + getEntriesByType(type: EntryType): PerformanceEntry[]; + /** + * Creates a new `PerformanceMark` entry in the Performance Timeline. + * A `PerformanceMark` is a subclass of `PerformanceEntry` whose `performanceEntry.entryType` is always `'mark'`, + * and whose `performanceEntry.duration` is always `0`. + * Performance marks are used to mark specific significant moments in the Performance Timeline. + * + * The created `PerformanceMark` entry is put in the global Performance Timeline and can be queried with + * `performance.getEntries`, `performance.getEntriesByName`, and `performance.getEntriesByType`. When the observation is + * performed, the entries should be cleared from the global Performance Timeline manually with `performance.clearMarks`. + * @param name + */ + mark(name: string, options?: MarkOptions): PerformanceMark; + /** + * Creates a new `PerformanceResourceTiming` entry in the Resource Timeline. + * A `PerformanceResourceTiming` is a subclass of `PerformanceEntry` whose `performanceEntry.entryType` is always `'resource'`. + * Performance resources are used to mark moments in the Resource Timeline. + * @param timingInfo [Fetch Timing Info](https://fetch.spec.whatwg.org/#fetch-timing-info) + * @param requestedUrl The resource url + * @param initiatorType The initiator name, e.g: 'fetch' + * @param global + * @param cacheMode The cache mode must be an empty string ('') or 'local' + * @param bodyInfo [Fetch Response Body Info](https://fetch.spec.whatwg.org/#response-body-info) + * @param responseStatus The response's status code + * @param deliveryType The delivery type. Default: ''. + * @since v18.2.0, v16.17.0 + */ + markResourceTiming( + timingInfo: object, + requestedUrl: string, + initiatorType: string, + global: object, + cacheMode: "" | "local", + bodyInfo: object, + responseStatus: number, + deliveryType?: string, + ): PerformanceResourceTiming; + /** + * Creates a new PerformanceMeasure entry in the Performance Timeline. + * A PerformanceMeasure is a subclass of PerformanceEntry whose performanceEntry.entryType is always 'measure', + * and whose performanceEntry.duration measures the number of milliseconds elapsed since startMark and endMark. + * + * The startMark argument may identify any existing PerformanceMark in the the Performance Timeline, or may identify + * any of the timestamp properties provided by the PerformanceNodeTiming class. If the named startMark does not exist, + * then startMark is set to timeOrigin by default. + * + * The endMark argument must identify any existing PerformanceMark in the the Performance Timeline or any of the timestamp + * properties provided by the PerformanceNodeTiming class. If the named endMark does not exist, an error will be thrown. + * @param name + * @param startMark + * @param endMark + * @return The PerformanceMeasure entry that was created + */ + measure(name: string, startMark?: string, endMark?: string): PerformanceMeasure; + measure(name: string, options: MeasureOptions): PerformanceMeasure; + /** + * _This property is an extension by Node.js. It is not available in Web browsers._ + * + * An instance of the `PerformanceNodeTiming` class that provides performance metrics for specific Node.js operational milestones. + * @since v8.5.0 + */ + readonly nodeTiming: PerformanceNodeTiming; + /** + * Returns the current high resolution millisecond timestamp, where 0 represents the start of the current `node` process. + * @since v8.5.0 + */ + now(): number; + /** + * Sets the global performance resource timing buffer size to the specified number of "resource" type performance entry objects. + * + * By default the max buffer size is set to 250. + * @since v18.8.0 + */ + setResourceTimingBufferSize(maxSize: number): void; + /** + * The [`timeOrigin`](https://w3c.github.io/hr-time/#dom-performance-timeorigin) specifies the high resolution millisecond timestamp + * at which the current `node` process began, measured in Unix time. + * @since v8.5.0 + */ + readonly timeOrigin: number; + /** + * _This property is an extension by Node.js. It is not available in Web browsers._ + * + * Wraps a function within a new function that measures the running time of the wrapped function. + * A `PerformanceObserver` must be subscribed to the `'function'` event type in order for the timing details to be accessed. + * + * ```js + * import { + * performance, + * PerformanceObserver, + * } from 'node:perf_hooks'; + * + * function someFunction() { + * console.log('hello world'); + * } + * + * const wrapped = performance.timerify(someFunction); + * + * const obs = new PerformanceObserver((list) => { + * console.log(list.getEntries()[0].duration); + * + * performance.clearMarks(); + * performance.clearMeasures(); + * obs.disconnect(); + * }); + * obs.observe({ entryTypes: ['function'] }); + * + * // A performance timeline entry will be created + * wrapped(); + * ``` + * + * If the wrapped function returns a promise, a finally handler will be attached to the promise and the duration will be reported + * once the finally handler is invoked. + * @param fn + */ + timerify any>(fn: T, options?: TimerifyOptions): T; + /** + * An object which is JSON representation of the performance object. It is similar to + * [`window.performance.toJSON`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/toJSON) in browsers. + * @since v16.1.0 + */ + toJSON(): any; + } + class PerformanceObserverEntryList { + /** + * Returns a list of `PerformanceEntry` objects in chronological order + * with respect to `performanceEntry.startTime`. + * + * ```js + * import { + * performance, + * PerformanceObserver, + * } from 'node:perf_hooks'; + * + * const obs = new PerformanceObserver((perfObserverList, observer) => { + * console.log(perfObserverList.getEntries()); + * + * * [ + * * PerformanceEntry { + * * name: 'test', + * * entryType: 'mark', + * * startTime: 81.465639, + * * duration: 0, + * * detail: null + * * }, + * * PerformanceEntry { + * * name: 'meow', + * * entryType: 'mark', + * * startTime: 81.860064, + * * duration: 0, + * * detail: null + * * } + * * ] + * + * performance.clearMarks(); + * performance.clearMeasures(); + * observer.disconnect(); + * }); + * obs.observe({ type: 'mark' }); + * + * performance.mark('test'); + * performance.mark('meow'); + * ``` + * @since v8.5.0 + */ + getEntries(): PerformanceEntry[]; + /** + * Returns a list of `PerformanceEntry` objects in chronological order + * with respect to `performanceEntry.startTime` whose `performanceEntry.name` is + * equal to `name`, and optionally, whose `performanceEntry.entryType` is equal to`type`. + * + * ```js + * import { + * performance, + * PerformanceObserver, + * } from 'node:perf_hooks'; + * + * const obs = new PerformanceObserver((perfObserverList, observer) => { + * console.log(perfObserverList.getEntriesByName('meow')); + * + * * [ + * * PerformanceEntry { + * * name: 'meow', + * * entryType: 'mark', + * * startTime: 98.545991, + * * duration: 0, + * * detail: null + * * } + * * ] + * + * console.log(perfObserverList.getEntriesByName('nope')); // [] + * + * console.log(perfObserverList.getEntriesByName('test', 'mark')); + * + * * [ + * * PerformanceEntry { + * * name: 'test', + * * entryType: 'mark', + * * startTime: 63.518931, + * * duration: 0, + * * detail: null + * * } + * * ] + * + * console.log(perfObserverList.getEntriesByName('test', 'measure')); // [] + * + * performance.clearMarks(); + * performance.clearMeasures(); + * observer.disconnect(); + * }); + * obs.observe({ entryTypes: ['mark', 'measure'] }); + * + * performance.mark('test'); + * performance.mark('meow'); + * ``` + * @since v8.5.0 + */ + getEntriesByName(name: string, type?: EntryType): PerformanceEntry[]; + /** + * Returns a list of `PerformanceEntry` objects in chronological order + * with respect to `performanceEntry.startTime` whose `performanceEntry.entryType` is equal to `type`. + * + * ```js + * import { + * performance, + * PerformanceObserver, + * } from 'node:perf_hooks'; + * + * const obs = new PerformanceObserver((perfObserverList, observer) => { + * console.log(perfObserverList.getEntriesByType('mark')); + * + * * [ + * * PerformanceEntry { + * * name: 'test', + * * entryType: 'mark', + * * startTime: 55.897834, + * * duration: 0, + * * detail: null + * * }, + * * PerformanceEntry { + * * name: 'meow', + * * entryType: 'mark', + * * startTime: 56.350146, + * * duration: 0, + * * detail: null + * * } + * * ] + * + * performance.clearMarks(); + * performance.clearMeasures(); + * observer.disconnect(); + * }); + * obs.observe({ type: 'mark' }); + * + * performance.mark('test'); + * performance.mark('meow'); + * ``` + * @since v8.5.0 + */ + getEntriesByType(type: EntryType): PerformanceEntry[]; + } + type PerformanceObserverCallback = (list: PerformanceObserverEntryList, observer: PerformanceObserver) => void; + /** + * @since v8.5.0 + */ + class PerformanceObserver extends AsyncResource { + constructor(callback: PerformanceObserverCallback); + /** + * Disconnects the `PerformanceObserver` instance from all notifications. + * @since v8.5.0 + */ + disconnect(): void; + /** + * Subscribes the `PerformanceObserver` instance to notifications of new `PerformanceEntry` instances identified either by `options.entryTypes` or `options.type`: + * + * ```js + * import { + * performance, + * PerformanceObserver, + * } from 'node:perf_hooks'; + * + * const obs = new PerformanceObserver((list, observer) => { + * // Called once asynchronously. `list` contains three items. + * }); + * obs.observe({ type: 'mark' }); + * + * for (let n = 0; n < 3; n++) + * performance.mark(`test${n}`); + * ``` + * @since v8.5.0 + */ + observe( + options: + | { + entryTypes: readonly EntryType[]; + buffered?: boolean | undefined; + } + | { + type: EntryType; + buffered?: boolean | undefined; + }, + ): void; + /** + * @since v16.0.0 + * @returns Current list of entries stored in the performance observer, emptying it out. + */ + takeRecords(): PerformanceEntry[]; + } + /** + * Provides detailed network timing data regarding the loading of an application's resources. + * + * The constructor of this class is not exposed to users directly. + * @since v18.2.0, v16.17.0 + */ + class PerformanceResourceTiming extends PerformanceEntry { + readonly entryType: "resource"; + protected constructor(); + /** + * The high resolution millisecond timestamp at immediately before dispatching the `fetch` + * request. If the resource is not intercepted by a worker the property will always return 0. + * @since v18.2.0, v16.17.0 + */ + readonly workerStart: number; + /** + * The high resolution millisecond timestamp that represents the start time of the fetch which + * initiates the redirect. + * @since v18.2.0, v16.17.0 + */ + readonly redirectStart: number; + /** + * The high resolution millisecond timestamp that will be created immediately after receiving + * the last byte of the response of the last redirect. + * @since v18.2.0, v16.17.0 + */ + readonly redirectEnd: number; + /** + * The high resolution millisecond timestamp immediately before the Node.js starts to fetch the resource. + * @since v18.2.0, v16.17.0 + */ + readonly fetchStart: number; + /** + * The high resolution millisecond timestamp immediately before the Node.js starts the domain name lookup + * for the resource. + * @since v18.2.0, v16.17.0 + */ + readonly domainLookupStart: number; + /** + * The high resolution millisecond timestamp representing the time immediately after the Node.js finished + * the domain name lookup for the resource. + * @since v18.2.0, v16.17.0 + */ + readonly domainLookupEnd: number; + /** + * The high resolution millisecond timestamp representing the time immediately before Node.js starts to + * establish the connection to the server to retrieve the resource. + * @since v18.2.0, v16.17.0 + */ + readonly connectStart: number; + /** + * The high resolution millisecond timestamp representing the time immediately after Node.js finishes + * establishing the connection to the server to retrieve the resource. + * @since v18.2.0, v16.17.0 + */ + readonly connectEnd: number; + /** + * The high resolution millisecond timestamp representing the time immediately before Node.js starts the + * handshake process to secure the current connection. + * @since v18.2.0, v16.17.0 + */ + readonly secureConnectionStart: number; + /** + * The high resolution millisecond timestamp representing the time immediately before Node.js receives the + * first byte of the response from the server. + * @since v18.2.0, v16.17.0 + */ + readonly requestStart: number; + /** + * The high resolution millisecond timestamp representing the time immediately after Node.js receives the + * last byte of the resource or immediately before the transport connection is closed, whichever comes first. + * @since v18.2.0, v16.17.0 + */ + readonly responseEnd: number; + /** + * A number representing the size (in octets) of the fetched resource. The size includes the response header + * fields plus the response payload body. + * @since v18.2.0, v16.17.0 + */ + readonly transferSize: number; + /** + * A number representing the size (in octets) received from the fetch (HTTP or cache), of the payload body, before + * removing any applied content-codings. + * @since v18.2.0, v16.17.0 + */ + readonly encodedBodySize: number; + /** + * A number representing the size (in octets) received from the fetch (HTTP or cache), of the message body, after + * removing any applied content-codings. + * @since v18.2.0, v16.17.0 + */ + readonly decodedBodySize: number; + /** + * Returns a `object` that is the JSON representation of the `PerformanceResourceTiming` object + * @since v18.2.0, v16.17.0 + */ + toJSON(): any; + } + namespace constants { + const NODE_PERFORMANCE_GC_MAJOR: number; + const NODE_PERFORMANCE_GC_MINOR: number; + const NODE_PERFORMANCE_GC_INCREMENTAL: number; + const NODE_PERFORMANCE_GC_WEAKCB: number; + const NODE_PERFORMANCE_GC_FLAGS_NO: number; + const NODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINED: number; + const NODE_PERFORMANCE_GC_FLAGS_FORCED: number; + const NODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSING: number; + const NODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGE: number; + const NODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORY: number; + const NODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE: number; + } + const performance: Performance; + interface EventLoopMonitorOptions { + /** + * The sampling rate in milliseconds. + * Must be greater than zero. + * @default 10 + */ + resolution?: number | undefined; + } + interface Histogram { + /** + * The number of samples recorded by the histogram. + * @since v17.4.0, v16.14.0 + */ + readonly count: number; + /** + * The number of samples recorded by the histogram. + * v17.4.0, v16.14.0 + */ + readonly countBigInt: bigint; + /** + * The number of times the event loop delay exceeded the maximum 1 hour event + * loop delay threshold. + * @since v11.10.0 + */ + readonly exceeds: number; + /** + * The number of times the event loop delay exceeded the maximum 1 hour event loop delay threshold. + * @since v17.4.0, v16.14.0 + */ + readonly exceedsBigInt: bigint; + /** + * The maximum recorded event loop delay. + * @since v11.10.0 + */ + readonly max: number; + /** + * The maximum recorded event loop delay. + * v17.4.0, v16.14.0 + */ + readonly maxBigInt: number; + /** + * The mean of the recorded event loop delays. + * @since v11.10.0 + */ + readonly mean: number; + /** + * The minimum recorded event loop delay. + * @since v11.10.0 + */ + readonly min: number; + /** + * The minimum recorded event loop delay. + * v17.4.0, v16.14.0 + */ + readonly minBigInt: bigint; + /** + * Returns the value at the given percentile. + * @since v11.10.0 + * @param percentile A percentile value in the range (0, 100]. + */ + percentile(percentile: number): number; + /** + * Returns the value at the given percentile. + * @since v17.4.0, v16.14.0 + * @param percentile A percentile value in the range (0, 100]. + */ + percentileBigInt(percentile: number): bigint; + /** + * Returns a `Map` object detailing the accumulated percentile distribution. + * @since v11.10.0 + */ + readonly percentiles: Map; + /** + * Returns a `Map` object detailing the accumulated percentile distribution. + * @since v17.4.0, v16.14.0 + */ + readonly percentilesBigInt: Map; + /** + * Resets the collected histogram data. + * @since v11.10.0 + */ + reset(): void; + /** + * The standard deviation of the recorded event loop delays. + * @since v11.10.0 + */ + readonly stddev: number; + } + interface IntervalHistogram extends Histogram { + /** + * Enables the update interval timer. Returns `true` if the timer was + * started, `false` if it was already started. + * @since v11.10.0 + */ + enable(): boolean; + /** + * Disables the update interval timer. Returns `true` if the timer was + * stopped, `false` if it was already stopped. + * @since v11.10.0 + */ + disable(): boolean; + /** + * Disables the update interval timer when the histogram is disposed. + * + * ```js + * const { monitorEventLoopDelay } = require('node:perf_hooks'); + * { + * using hist = monitorEventLoopDelay({ resolution: 20 }); + * hist.enable(); + * // The histogram will be disabled when the block is exited. + * } + * ``` + * @since v24.2.0 + */ + [Symbol.dispose](): void; + } + interface RecordableHistogram extends Histogram { + /** + * @since v15.9.0, v14.18.0 + * @param val The amount to record in the histogram. + */ + record(val: number | bigint): void; + /** + * Calculates the amount of time (in nanoseconds) that has passed since the + * previous call to `recordDelta()` and records that amount in the histogram. + * @since v15.9.0, v14.18.0 + */ + recordDelta(): void; + /** + * Adds the values from `other` to this histogram. + * @since v17.4.0, v16.14.0 + */ + add(other: RecordableHistogram): void; + } + /** + * _This property is an extension by Node.js. It is not available in Web browsers._ + * + * Creates an `IntervalHistogram` object that samples and reports the event loop + * delay over time. The delays will be reported in nanoseconds. + * + * Using a timer to detect approximate event loop delay works because the + * execution of timers is tied specifically to the lifecycle of the libuv + * event loop. That is, a delay in the loop will cause a delay in the execution + * of the timer, and those delays are specifically what this API is intended to + * detect. + * + * ```js + * import { monitorEventLoopDelay } from 'node:perf_hooks'; + * const h = monitorEventLoopDelay({ resolution: 20 }); + * h.enable(); + * // Do something. + * h.disable(); + * console.log(h.min); + * console.log(h.max); + * console.log(h.mean); + * console.log(h.stddev); + * console.log(h.percentiles); + * console.log(h.percentile(50)); + * console.log(h.percentile(99)); + * ``` + * @since v11.10.0 + */ + function monitorEventLoopDelay(options?: EventLoopMonitorOptions): IntervalHistogram; + interface CreateHistogramOptions { + /** + * The minimum recordable value. Must be an integer value greater than 0. + * @default 1 + */ + lowest?: number | bigint | undefined; + /** + * The maximum recordable value. Must be an integer value greater than min. + * @default Number.MAX_SAFE_INTEGER + */ + highest?: number | bigint | undefined; + /** + * The number of accuracy digits. Must be a number between 1 and 5. + * @default 3 + */ + figures?: number | undefined; + } + /** + * Returns a `RecordableHistogram`. + * @since v15.9.0, v14.18.0 + */ + function createHistogram(options?: CreateHistogramOptions): RecordableHistogram; + import { + performance as _performance, + PerformanceEntry as _PerformanceEntry, + PerformanceMark as _PerformanceMark, + PerformanceMeasure as _PerformanceMeasure, + PerformanceObserver as _PerformanceObserver, + PerformanceObserverEntryList as _PerformanceObserverEntryList, + PerformanceResourceTiming as _PerformanceResourceTiming, + } from "perf_hooks"; + global { + /** + * `PerformanceEntry` is a global reference for `import { PerformanceEntry } from 'node:perf_hooks'` + * @see https://nodejs.org/docs/latest-v24.x/api/globals.html#performanceentry + * @since v19.0.0 + */ + var PerformanceEntry: typeof globalThis extends { + onmessage: any; + PerformanceEntry: infer T; + } ? T + : typeof _PerformanceEntry; + /** + * `PerformanceMark` is a global reference for `import { PerformanceMark } from 'node:perf_hooks'` + * @see https://nodejs.org/docs/latest-v24.x/api/globals.html#performancemark + * @since v19.0.0 + */ + var PerformanceMark: typeof globalThis extends { + onmessage: any; + PerformanceMark: infer T; + } ? T + : typeof _PerformanceMark; + /** + * `PerformanceMeasure` is a global reference for `import { PerformanceMeasure } from 'node:perf_hooks'` + * @see https://nodejs.org/docs/latest-v24.x/api/globals.html#performancemeasure + * @since v19.0.0 + */ + var PerformanceMeasure: typeof globalThis extends { + onmessage: any; + PerformanceMeasure: infer T; + } ? T + : typeof _PerformanceMeasure; + /** + * `PerformanceObserver` is a global reference for `import { PerformanceObserver } from 'node:perf_hooks'` + * @see https://nodejs.org/docs/latest-v24.x/api/globals.html#performanceobserver + * @since v19.0.0 + */ + var PerformanceObserver: typeof globalThis extends { + onmessage: any; + PerformanceObserver: infer T; + } ? T + : typeof _PerformanceObserver; + /** + * `PerformanceObserverEntryList` is a global reference for `import { PerformanceObserverEntryList } from 'node:perf_hooks'` + * @see https://nodejs.org/docs/latest-v24.x/api/globals.html#performanceobserverentrylist + * @since v19.0.0 + */ + var PerformanceObserverEntryList: typeof globalThis extends { + onmessage: any; + PerformanceObserverEntryList: infer T; + } ? T + : typeof _PerformanceObserverEntryList; + /** + * `PerformanceResourceTiming` is a global reference for `import { PerformanceResourceTiming } from 'node:perf_hooks'` + * @see https://nodejs.org/docs/latest-v24.x/api/globals.html#performanceresourcetiming + * @since v19.0.0 + */ + var PerformanceResourceTiming: typeof globalThis extends { + onmessage: any; + PerformanceResourceTiming: infer T; + } ? T + : typeof _PerformanceResourceTiming; + /** + * `performance` is a global reference for `import { performance } from 'node:perf_hooks'` + * @see https://nodejs.org/docs/latest-v24.x/api/globals.html#performance + * @since v16.0.0 + */ + var performance: typeof globalThis extends { + onmessage: any; + performance: infer T; + } ? T + : typeof _performance; + } +} +declare module "node:perf_hooks" { + export * from "perf_hooks"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/process.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/process.d.ts new file mode 100644 index 00000000..f47bad5d --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/process.d.ts @@ -0,0 +1,2062 @@ +declare module "process" { + import { Control, MessageOptions, SendHandle } from "node:child_process"; + import { PathLike } from "node:fs"; + import * as tty from "node:tty"; + import { Worker } from "node:worker_threads"; + + interface BuiltInModule { + "assert": typeof import("assert"); + "node:assert": typeof import("node:assert"); + "assert/strict": typeof import("assert/strict"); + "node:assert/strict": typeof import("node:assert/strict"); + "async_hooks": typeof import("async_hooks"); + "node:async_hooks": typeof import("node:async_hooks"); + "buffer": typeof import("buffer"); + "node:buffer": typeof import("node:buffer"); + "child_process": typeof import("child_process"); + "node:child_process": typeof import("node:child_process"); + "cluster": typeof import("cluster"); + "node:cluster": typeof import("node:cluster"); + "console": typeof import("console"); + "node:console": typeof import("node:console"); + "constants": typeof import("constants"); + "node:constants": typeof import("node:constants"); + "crypto": typeof import("crypto"); + "node:crypto": typeof import("node:crypto"); + "dgram": typeof import("dgram"); + "node:dgram": typeof import("node:dgram"); + "diagnostics_channel": typeof import("diagnostics_channel"); + "node:diagnostics_channel": typeof import("node:diagnostics_channel"); + "dns": typeof import("dns"); + "node:dns": typeof import("node:dns"); + "dns/promises": typeof import("dns/promises"); + "node:dns/promises": typeof import("node:dns/promises"); + "domain": typeof import("domain"); + "node:domain": typeof import("node:domain"); + "events": typeof import("events"); + "node:events": typeof import("node:events"); + "fs": typeof import("fs"); + "node:fs": typeof import("node:fs"); + "fs/promises": typeof import("fs/promises"); + "node:fs/promises": typeof import("node:fs/promises"); + "http": typeof import("http"); + "node:http": typeof import("node:http"); + "http2": typeof import("http2"); + "node:http2": typeof import("node:http2"); + "https": typeof import("https"); + "node:https": typeof import("node:https"); + "inspector": typeof import("inspector"); + "node:inspector": typeof import("node:inspector"); + "inspector/promises": typeof import("inspector/promises"); + "node:inspector/promises": typeof import("node:inspector/promises"); + "module": typeof import("module"); + "node:module": typeof import("node:module"); + "net": typeof import("net"); + "node:net": typeof import("node:net"); + "os": typeof import("os"); + "node:os": typeof import("node:os"); + "path": typeof import("path"); + "node:path": typeof import("node:path"); + "path/posix": typeof import("path/posix"); + "node:path/posix": typeof import("node:path/posix"); + "path/win32": typeof import("path/win32"); + "node:path/win32": typeof import("node:path/win32"); + "perf_hooks": typeof import("perf_hooks"); + "node:perf_hooks": typeof import("node:perf_hooks"); + "process": typeof import("process"); + "node:process": typeof import("node:process"); + "punycode": typeof import("punycode"); + "node:punycode": typeof import("node:punycode"); + "querystring": typeof import("querystring"); + "node:querystring": typeof import("node:querystring"); + "readline": typeof import("readline"); + "node:readline": typeof import("node:readline"); + "readline/promises": typeof import("readline/promises"); + "node:readline/promises": typeof import("node:readline/promises"); + "repl": typeof import("repl"); + "node:repl": typeof import("node:repl"); + "node:sea": typeof import("node:sea"); + "node:sqlite": typeof import("node:sqlite"); + "stream": typeof import("stream"); + "node:stream": typeof import("node:stream"); + "stream/consumers": typeof import("stream/consumers"); + "node:stream/consumers": typeof import("node:stream/consumers"); + "stream/promises": typeof import("stream/promises"); + "node:stream/promises": typeof import("node:stream/promises"); + "stream/web": typeof import("stream/web"); + "node:stream/web": typeof import("node:stream/web"); + "string_decoder": typeof import("string_decoder"); + "node:string_decoder": typeof import("node:string_decoder"); + "node:test": typeof import("node:test"); + "node:test/reporters": typeof import("node:test/reporters"); + "timers": typeof import("timers"); + "node:timers": typeof import("node:timers"); + "timers/promises": typeof import("timers/promises"); + "node:timers/promises": typeof import("node:timers/promises"); + "tls": typeof import("tls"); + "node:tls": typeof import("node:tls"); + "trace_events": typeof import("trace_events"); + "node:trace_events": typeof import("node:trace_events"); + "tty": typeof import("tty"); + "node:tty": typeof import("node:tty"); + "url": typeof import("url"); + "node:url": typeof import("node:url"); + "util": typeof import("util"); + "node:util": typeof import("node:util"); + "sys": typeof import("util"); + "node:sys": typeof import("node:util"); + "util/types": typeof import("util/types"); + "node:util/types": typeof import("node:util/types"); + "v8": typeof import("v8"); + "node:v8": typeof import("node:v8"); + "vm": typeof import("vm"); + "node:vm": typeof import("node:vm"); + "wasi": typeof import("wasi"); + "node:wasi": typeof import("node:wasi"); + "worker_threads": typeof import("worker_threads"); + "node:worker_threads": typeof import("node:worker_threads"); + "zlib": typeof import("zlib"); + "node:zlib": typeof import("node:zlib"); + } + global { + var process: NodeJS.Process; + namespace NodeJS { + // this namespace merge is here because these are specifically used + // as the type for process.stdin, process.stdout, and process.stderr. + // they can't live in tty.d.ts because we need to disambiguate the imported name. + interface ReadStream extends tty.ReadStream {} + interface WriteStream extends tty.WriteStream {} + interface MemoryUsageFn { + /** + * The `process.memoryUsage()` method iterate over each page to gather informations about memory + * usage which can be slow depending on the program memory allocations. + */ + (): MemoryUsage; + /** + * method returns an integer representing the Resident Set Size (RSS) in bytes. + */ + rss(): number; + } + interface MemoryUsage { + /** + * Resident Set Size, is the amount of space occupied in the main memory device (that is a subset of the total allocated memory) for the + * process, including all C++ and JavaScript objects and code. + */ + rss: number; + /** + * Refers to V8's memory usage. + */ + heapTotal: number; + /** + * Refers to V8's memory usage. + */ + heapUsed: number; + external: number; + /** + * Refers to memory allocated for `ArrayBuffer`s and `SharedArrayBuffer`s, including all Node.js Buffers. This is also included + * in the external value. When Node.js is used as an embedded library, this value may be `0` because allocations for `ArrayBuffer`s + * may not be tracked in that case. + */ + arrayBuffers: number; + } + interface CpuUsage { + user: number; + system: number; + } + interface ProcessRelease { + name: string; + sourceUrl?: string | undefined; + headersUrl?: string | undefined; + libUrl?: string | undefined; + lts?: string | undefined; + } + interface ProcessFeatures { + /** + * A boolean value that is `true` if the current Node.js build is caching builtin modules. + * @since v12.0.0 + */ + readonly cached_builtins: boolean; + /** + * A boolean value that is `true` if the current Node.js build is a debug build. + * @since v0.5.5 + */ + readonly debug: boolean; + /** + * A boolean value that is `true` if the current Node.js build includes the inspector. + * @since v11.10.0 + */ + readonly inspector: boolean; + /** + * A boolean value that is `true` if the current Node.js build includes support for IPv6. + * + * Since all Node.js builds have IPv6 support, this value is always `true`. + * @since v0.5.3 + * @deprecated This property is always true, and any checks based on it are redundant. + */ + readonly ipv6: boolean; + /** + * A boolean value that is `true` if the current Node.js build supports + * [loading ECMAScript modules using `require()`](https://nodejs.org/docs/latest-v24.x/api/modules.md#loading-ecmascript-modules-using-require). + * @since v22.10.0 + */ + readonly require_module: boolean; + /** + * A boolean value that is `true` if the current Node.js build includes support for TLS. + * @since v0.5.3 + */ + readonly tls: boolean; + /** + * A boolean value that is `true` if the current Node.js build includes support for ALPN in TLS. + * + * In Node.js 11.0.0 and later versions, the OpenSSL dependencies feature unconditional ALPN support. + * This value is therefore identical to that of `process.features.tls`. + * @since v4.8.0 + * @deprecated Use `process.features.tls` instead. + */ + readonly tls_alpn: boolean; + /** + * A boolean value that is `true` if the current Node.js build includes support for OCSP in TLS. + * + * In Node.js 11.0.0 and later versions, the OpenSSL dependencies feature unconditional OCSP support. + * This value is therefore identical to that of `process.features.tls`. + * @since v0.11.13 + * @deprecated Use `process.features.tls` instead. + */ + readonly tls_ocsp: boolean; + /** + * A boolean value that is `true` if the current Node.js build includes support for SNI in TLS. + * + * In Node.js 11.0.0 and later versions, the OpenSSL dependencies feature unconditional SNI support. + * This value is therefore identical to that of `process.features.tls`. + * @since v0.5.3 + * @deprecated Use `process.features.tls` instead. + */ + readonly tls_sni: boolean; + /** + * A value that is `"strip"` by default, + * `"transform"` if Node.js is run with `--experimental-transform-types`, and `false` if + * Node.js is run with `--no-experimental-strip-types`. + * @since v22.10.0 + */ + readonly typescript: "strip" | "transform" | false; + /** + * A boolean value that is `true` if the current Node.js build includes support for libuv. + * + * Since it's not possible to build Node.js without libuv, this value is always `true`. + * @since v0.5.3 + * @deprecated This property is always true, and any checks based on it are redundant. + */ + readonly uv: boolean; + } + interface ProcessVersions extends Dict { + http_parser: string; + node: string; + v8: string; + ares: string; + uv: string; + zlib: string; + modules: string; + openssl: string; + } + type Platform = + | "aix" + | "android" + | "darwin" + | "freebsd" + | "haiku" + | "linux" + | "openbsd" + | "sunos" + | "win32" + | "cygwin" + | "netbsd"; + type Architecture = + | "arm" + | "arm64" + | "ia32" + | "loong64" + | "mips" + | "mipsel" + | "ppc64" + | "riscv64" + | "s390x" + | "x64"; + type Signals = + | "SIGABRT" + | "SIGALRM" + | "SIGBUS" + | "SIGCHLD" + | "SIGCONT" + | "SIGFPE" + | "SIGHUP" + | "SIGILL" + | "SIGINT" + | "SIGIO" + | "SIGIOT" + | "SIGKILL" + | "SIGPIPE" + | "SIGPOLL" + | "SIGPROF" + | "SIGPWR" + | "SIGQUIT" + | "SIGSEGV" + | "SIGSTKFLT" + | "SIGSTOP" + | "SIGSYS" + | "SIGTERM" + | "SIGTRAP" + | "SIGTSTP" + | "SIGTTIN" + | "SIGTTOU" + | "SIGUNUSED" + | "SIGURG" + | "SIGUSR1" + | "SIGUSR2" + | "SIGVTALRM" + | "SIGWINCH" + | "SIGXCPU" + | "SIGXFSZ" + | "SIGBREAK" + | "SIGLOST" + | "SIGINFO"; + type UncaughtExceptionOrigin = "uncaughtException" | "unhandledRejection"; + type MultipleResolveType = "resolve" | "reject"; + type BeforeExitListener = (code: number) => void; + type DisconnectListener = () => void; + type ExitListener = (code: number) => void; + type RejectionHandledListener = (promise: Promise) => void; + type UncaughtExceptionListener = (error: Error, origin: UncaughtExceptionOrigin) => void; + /** + * Most of the time the unhandledRejection will be an Error, but this should not be relied upon + * as *anything* can be thrown/rejected, it is therefore unsafe to assume that the value is an Error. + */ + type UnhandledRejectionListener = (reason: unknown, promise: Promise) => void; + type WarningListener = (warning: Error) => void; + type MessageListener = (message: unknown, sendHandle: SendHandle) => void; + type SignalsListener = (signal: Signals) => void; + type MultipleResolveListener = ( + type: MultipleResolveType, + promise: Promise, + value: unknown, + ) => void; + type WorkerListener = (worker: Worker) => void; + interface Socket extends ReadWriteStream { + isTTY?: true | undefined; + } + // Alias for compatibility + interface ProcessEnv extends Dict { + /** + * Can be used to change the default timezone at runtime + */ + TZ?: string | undefined; + } + interface HRTime { + /** + * This is the legacy version of {@link process.hrtime.bigint()} + * before bigint was introduced in JavaScript. + * + * The `process.hrtime()` method returns the current high-resolution real time in a `[seconds, nanoseconds]` tuple `Array`, + * where `nanoseconds` is the remaining part of the real time that can't be represented in second precision. + * + * `time` is an optional parameter that must be the result of a previous `process.hrtime()` call to diff with the current time. + * If the parameter passed in is not a tuple `Array`, a TypeError will be thrown. + * Passing in a user-defined array instead of the result of a previous call to `process.hrtime()` will lead to undefined behavior. + * + * These times are relative to an arbitrary time in the past, + * and not related to the time of day and therefore not subject to clock drift. + * The primary use is for measuring performance between intervals: + * ```js + * const { hrtime } = require('node:process'); + * const NS_PER_SEC = 1e9; + * const time = hrtime(); + * // [ 1800216, 25 ] + * + * setTimeout(() => { + * const diff = hrtime(time); + * // [ 1, 552 ] + * + * console.log(`Benchmark took ${diff[0] * NS_PER_SEC + diff[1]} nanoseconds`); + * // Benchmark took 1000000552 nanoseconds + * }, 1000); + * ``` + * @since 0.7.6 + * @legacy Use {@link process.hrtime.bigint()} instead. + * @param time The result of a previous call to `process.hrtime()` + */ + (time?: [number, number]): [number, number]; + /** + * The `bigint` version of the {@link process.hrtime()} method returning the current high-resolution real time in nanoseconds as a `bigint`. + * + * Unlike {@link process.hrtime()}, it does not support an additional time argument since the difference can just be computed directly by subtraction of the two `bigint`s. + * ```js + * import { hrtime } from 'node:process'; + * + * const start = hrtime.bigint(); + * // 191051479007711n + * + * setTimeout(() => { + * const end = hrtime.bigint(); + * // 191052633396993n + * + * console.log(`Benchmark took ${end - start} nanoseconds`); + * // Benchmark took 1154389282 nanoseconds + * }, 1000); + * ``` + * @since v10.7.0 + */ + bigint(): bigint; + } + interface ProcessPermission { + /** + * Verifies that the process is able to access the given scope and reference. + * If no reference is provided, a global scope is assumed, for instance, `process.permission.has('fs.read')` + * will check if the process has ALL file system read permissions. + * + * The reference has a meaning based on the provided scope. For example, the reference when the scope is File System means files and folders. + * + * The available scopes are: + * + * * `fs` - All File System + * * `fs.read` - File System read operations + * * `fs.write` - File System write operations + * * `child` - Child process spawning operations + * * `worker` - Worker thread spawning operation + * + * ```js + * // Check if the process has permission to read the README file + * process.permission.has('fs.read', './README.md'); + * // Check if the process has read permission operations + * process.permission.has('fs.read'); + * ``` + * @since v20.0.0 + */ + has(scope: string, reference?: string): boolean; + } + interface ProcessReport { + /** + * Write reports in a compact format, single-line JSON, more easily consumable by log processing systems + * than the default multi-line format designed for human consumption. + * @since v13.12.0, v12.17.0 + */ + compact: boolean; + /** + * Directory where the report is written. + * The default value is the empty string, indicating that reports are written to the current + * working directory of the Node.js process. + */ + directory: string; + /** + * Filename where the report is written. If set to the empty string, the output filename will be comprised + * of a timestamp, PID, and sequence number. The default value is the empty string. + */ + filename: string; + /** + * Returns a JavaScript Object representation of a diagnostic report for the running process. + * The report's JavaScript stack trace is taken from `err`, if present. + */ + getReport(err?: Error): object; + /** + * If true, a diagnostic report is generated on fatal errors, + * such as out of memory errors or failed C++ assertions. + * @default false + */ + reportOnFatalError: boolean; + /** + * If true, a diagnostic report is generated when the process + * receives the signal specified by process.report.signal. + * @default false + */ + reportOnSignal: boolean; + /** + * If true, a diagnostic report is generated on uncaught exception. + * @default false + */ + reportOnUncaughtException: boolean; + /** + * The signal used to trigger the creation of a diagnostic report. + * @default 'SIGUSR2' + */ + signal: Signals; + /** + * Writes a diagnostic report to a file. If filename is not provided, the default filename + * includes the date, time, PID, and a sequence number. + * The report's JavaScript stack trace is taken from `err`, if present. + * + * If the value of filename is set to `'stdout'` or `'stderr'`, the report is written + * to the stdout or stderr of the process respectively. + * @param fileName Name of the file where the report is written. + * This should be a relative path, that will be appended to the directory specified in + * `process.report.directory`, or the current working directory of the Node.js process, + * if unspecified. + * @param err A custom error used for reporting the JavaScript stack. + * @return Filename of the generated report. + */ + writeReport(fileName?: string, err?: Error): string; + writeReport(err?: Error): string; + } + interface ResourceUsage { + fsRead: number; + fsWrite: number; + involuntaryContextSwitches: number; + ipcReceived: number; + ipcSent: number; + majorPageFault: number; + maxRSS: number; + minorPageFault: number; + sharedMemorySize: number; + signalsCount: number; + swappedOut: number; + systemCPUTime: number; + unsharedDataSize: number; + unsharedStackSize: number; + userCPUTime: number; + voluntaryContextSwitches: number; + } + interface EmitWarningOptions { + /** + * When `warning` is a `string`, `type` is the name to use for the _type_ of warning being emitted. + * + * @default 'Warning' + */ + type?: string | undefined; + /** + * A unique identifier for the warning instance being emitted. + */ + code?: string | undefined; + /** + * When `warning` is a `string`, `ctor` is an optional function used to limit the generated stack trace. + * + * @default process.emitWarning + */ + ctor?: Function | undefined; + /** + * Additional text to include with the error. + */ + detail?: string | undefined; + } + interface ProcessConfig { + readonly target_defaults: { + readonly cflags: any[]; + readonly default_configuration: string; + readonly defines: string[]; + readonly include_dirs: string[]; + readonly libraries: string[]; + }; + readonly variables: { + readonly clang: number; + readonly host_arch: string; + readonly node_install_npm: boolean; + readonly node_install_waf: boolean; + readonly node_prefix: string; + readonly node_shared_openssl: boolean; + readonly node_shared_v8: boolean; + readonly node_shared_zlib: boolean; + readonly node_use_dtrace: boolean; + readonly node_use_etw: boolean; + readonly node_use_openssl: boolean; + readonly target_arch: string; + readonly v8_no_strict_aliasing: number; + readonly v8_use_snapshot: boolean; + readonly visibility: string; + }; + } + interface Process extends EventEmitter { + /** + * The `process.stdout` property returns a stream connected to`stdout` (fd `1`). It is a `net.Socket` (which is a `Duplex` stream) unless fd `1` refers to a file, in which case it is + * a `Writable` stream. + * + * For example, to copy `process.stdin` to `process.stdout`: + * + * ```js + * import { stdin, stdout } from 'node:process'; + * + * stdin.pipe(stdout); + * ``` + * + * `process.stdout` differs from other Node.js streams in important ways. See `note on process I/O` for more information. + */ + stdout: WriteStream & { + fd: 1; + }; + /** + * The `process.stderr` property returns a stream connected to`stderr` (fd `2`). It is a `net.Socket` (which is a `Duplex` stream) unless fd `2` refers to a file, in which case it is + * a `Writable` stream. + * + * `process.stderr` differs from other Node.js streams in important ways. See `note on process I/O` for more information. + */ + stderr: WriteStream & { + fd: 2; + }; + /** + * The `process.stdin` property returns a stream connected to`stdin` (fd `0`). It is a `net.Socket` (which is a `Duplex` stream) unless fd `0` refers to a file, in which case it is + * a `Readable` stream. + * + * For details of how to read from `stdin` see `readable.read()`. + * + * As a `Duplex` stream, `process.stdin` can also be used in "old" mode that + * is compatible with scripts written for Node.js prior to v0.10\. + * For more information see `Stream compatibility`. + * + * In "old" streams mode the `stdin` stream is paused by default, so one + * must call `process.stdin.resume()` to read from it. Note also that calling `process.stdin.resume()` itself would switch stream to "old" mode. + */ + stdin: ReadStream & { + fd: 0; + }; + /** + * The `process.argv` property returns an array containing the command-line + * arguments passed when the Node.js process was launched. The first element will + * be {@link execPath}. See `process.argv0` if access to the original value + * of `argv[0]` is needed. The second element will be the path to the JavaScript + * file being executed. The remaining elements will be any additional command-line + * arguments. + * + * For example, assuming the following script for `process-args.js`: + * + * ```js + * import { argv } from 'node:process'; + * + * // print process.argv + * argv.forEach((val, index) => { + * console.log(`${index}: ${val}`); + * }); + * ``` + * + * Launching the Node.js process as: + * + * ```bash + * node process-args.js one two=three four + * ``` + * + * Would generate the output: + * + * ```text + * 0: /usr/local/bin/node + * 1: /Users/mjr/work/node/process-args.js + * 2: one + * 3: two=three + * 4: four + * ``` + * @since v0.1.27 + */ + argv: string[]; + /** + * The `process.argv0` property stores a read-only copy of the original value of`argv[0]` passed when Node.js starts. + * + * ```console + * $ bash -c 'exec -a customArgv0 ./node' + * > process.argv[0] + * '/Volumes/code/external/node/out/Release/node' + * > process.argv0 + * 'customArgv0' + * ``` + * @since v6.4.0 + */ + argv0: string; + /** + * The `process.execArgv` property returns the set of Node.js-specific command-line + * options passed when the Node.js process was launched. These options do not + * appear in the array returned by the {@link argv} property, and do not + * include the Node.js executable, the name of the script, or any options following + * the script name. These options are useful in order to spawn child processes with + * the same execution environment as the parent. + * + * ```bash + * node --icu-data-dir=./foo --require ./bar.js script.js --version + * ``` + * + * Results in `process.execArgv`: + * + * ```js + * ["--icu-data-dir=./foo", "--require", "./bar.js"] + * ``` + * + * And `process.argv`: + * + * ```js + * ['/usr/local/bin/node', 'script.js', '--version'] + * ``` + * + * Refer to `Worker constructor` for the detailed behavior of worker + * threads with this property. + * @since v0.7.7 + */ + execArgv: string[]; + /** + * The `process.execPath` property returns the absolute pathname of the executable + * that started the Node.js process. Symbolic links, if any, are resolved. + * + * ```js + * '/usr/local/bin/node' + * ``` + * @since v0.1.100 + */ + execPath: string; + /** + * The `process.abort()` method causes the Node.js process to exit immediately and + * generate a core file. + * + * This feature is not available in `Worker` threads. + * @since v0.7.0 + */ + abort(): never; + /** + * The `process.chdir()` method changes the current working directory of the + * Node.js process or throws an exception if doing so fails (for instance, if + * the specified `directory` does not exist). + * + * ```js + * import { chdir, cwd } from 'node:process'; + * + * console.log(`Starting directory: ${cwd()}`); + * try { + * chdir('/tmp'); + * console.log(`New directory: ${cwd()}`); + * } catch (err) { + * console.error(`chdir: ${err}`); + * } + * ``` + * + * This feature is not available in `Worker` threads. + * @since v0.1.17 + */ + chdir(directory: string): void; + /** + * The `process.cwd()` method returns the current working directory of the Node.js + * process. + * + * ```js + * import { cwd } from 'node:process'; + * + * console.log(`Current directory: ${cwd()}`); + * ``` + * @since v0.1.8 + */ + cwd(): string; + /** + * The port used by the Node.js debugger when enabled. + * + * ```js + * import process from 'node:process'; + * + * process.debugPort = 5858; + * ``` + * @since v0.7.2 + */ + debugPort: number; + /** + * The `process.dlopen()` method allows dynamically loading shared objects. It is primarily used by `require()` to load C++ Addons, and + * should not be used directly, except in special cases. In other words, `require()` should be preferred over `process.dlopen()` + * unless there are specific reasons such as custom dlopen flags or loading from ES modules. + * + * The `flags` argument is an integer that allows to specify dlopen behavior. See the `[os.constants.dlopen](https://nodejs.org/docs/latest-v24.x/api/os.html#dlopen-constants)` + * documentation for details. + * + * An important requirement when calling `process.dlopen()` is that the `module` instance must be passed. Functions exported by the C++ Addon + * are then accessible via `module.exports`. + * + * The example below shows how to load a C++ Addon, named `local.node`, that exports a `foo` function. All the symbols are loaded before the call returns, by passing the `RTLD_NOW` constant. + * In this example the constant is assumed to be available. + * + * ```js + * import { dlopen } from 'node:process'; + * import { constants } from 'node:os'; + * import { fileURLToPath } from 'node:url'; + * + * const module = { exports: {} }; + * dlopen(module, fileURLToPath(new URL('local.node', import.meta.url)), + * constants.dlopen.RTLD_NOW); + * module.exports.foo(); + * ``` + */ + dlopen(module: object, filename: string, flags?: number): void; + /** + * The `process.emitWarning()` method can be used to emit custom or application + * specific process warnings. These can be listened for by adding a handler to the `'warning'` event. + * + * ```js + * import { emitWarning } from 'node:process'; + * + * // Emit a warning using a string. + * emitWarning('Something happened!'); + * // Emits: (node: 56338) Warning: Something happened! + * ``` + * + * ```js + * import { emitWarning } from 'node:process'; + * + * // Emit a warning using a string and a type. + * emitWarning('Something Happened!', 'CustomWarning'); + * // Emits: (node:56338) CustomWarning: Something Happened! + * ``` + * + * ```js + * import { emitWarning } from 'node:process'; + * + * emitWarning('Something happened!', 'CustomWarning', 'WARN001'); + * // Emits: (node:56338) [WARN001] CustomWarning: Something happened! + * ```js + * + * In each of the previous examples, an `Error` object is generated internally by `process.emitWarning()` and passed through to the `'warning'` handler. + * + * ```js + * import process from 'node:process'; + * + * process.on('warning', (warning) => { + * console.warn(warning.name); // 'Warning' + * console.warn(warning.message); // 'Something happened!' + * console.warn(warning.code); // 'MY_WARNING' + * console.warn(warning.stack); // Stack trace + * console.warn(warning.detail); // 'This is some additional information' + * }); + * ``` + * + * If `warning` is passed as an `Error` object, it will be passed through to the `'warning'` event handler + * unmodified (and the optional `type`, `code` and `ctor` arguments will be ignored): + * + * ```js + * import { emitWarning } from 'node:process'; + * + * // Emit a warning using an Error object. + * const myWarning = new Error('Something happened!'); + * // Use the Error name property to specify the type name + * myWarning.name = 'CustomWarning'; + * myWarning.code = 'WARN001'; + * + * emitWarning(myWarning); + * // Emits: (node:56338) [WARN001] CustomWarning: Something happened! + * ``` + * + * A `TypeError` is thrown if `warning` is anything other than a string or `Error` object. + * + * While process warnings use `Error` objects, the process warning mechanism is not a replacement for normal error handling mechanisms. + * + * The following additional handling is implemented if the warning `type` is `'DeprecationWarning'`: + * * If the `--throw-deprecation` command-line flag is used, the deprecation warning is thrown as an exception rather than being emitted as an event. + * * If the `--no-deprecation` command-line flag is used, the deprecation warning is suppressed. + * * If the `--trace-deprecation` command-line flag is used, the deprecation warning is printed to `stderr` along with the full stack trace. + * @since v8.0.0 + * @param warning The warning to emit. + */ + emitWarning(warning: string | Error, ctor?: Function): void; + emitWarning(warning: string | Error, type?: string, ctor?: Function): void; + emitWarning(warning: string | Error, type?: string, code?: string, ctor?: Function): void; + emitWarning(warning: string | Error, options?: EmitWarningOptions): void; + /** + * The `process.env` property returns an object containing the user environment. + * See [`environ(7)`](http://man7.org/linux/man-pages/man7/environ.7.html). + * + * An example of this object looks like: + * + * ```js + * { + * TERM: 'xterm-256color', + * SHELL: '/usr/local/bin/bash', + * USER: 'maciej', + * PATH: '~/.bin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin', + * PWD: '/Users/maciej', + * EDITOR: 'vim', + * SHLVL: '1', + * HOME: '/Users/maciej', + * LOGNAME: 'maciej', + * _: '/usr/local/bin/node' + * } + * ``` + * + * It is possible to modify this object, but such modifications will not be + * reflected outside the Node.js process, or (unless explicitly requested) + * to other `Worker` threads. + * In other words, the following example would not work: + * + * ```bash + * node -e 'process.env.foo = "bar"' && echo $foo + * ``` + * + * While the following will: + * + * ```js + * import { env } from 'node:process'; + * + * env.foo = 'bar'; + * console.log(env.foo); + * ``` + * + * Assigning a property on `process.env` will implicitly convert the value + * to a string. **This behavior is deprecated.** Future versions of Node.js may + * throw an error when the value is not a string, number, or boolean. + * + * ```js + * import { env } from 'node:process'; + * + * env.test = null; + * console.log(env.test); + * // => 'null' + * env.test = undefined; + * console.log(env.test); + * // => 'undefined' + * ``` + * + * Use `delete` to delete a property from `process.env`. + * + * ```js + * import { env } from 'node:process'; + * + * env.TEST = 1; + * delete env.TEST; + * console.log(env.TEST); + * // => undefined + * ``` + * + * On Windows operating systems, environment variables are case-insensitive. + * + * ```js + * import { env } from 'node:process'; + * + * env.TEST = 1; + * console.log(env.test); + * // => 1 + * ``` + * + * Unless explicitly specified when creating a `Worker` instance, + * each `Worker` thread has its own copy of `process.env`, based on its + * parent thread's `process.env`, or whatever was specified as the `env` option + * to the `Worker` constructor. Changes to `process.env` will not be visible + * across `Worker` threads, and only the main thread can make changes that + * are visible to the operating system or to native add-ons. On Windows, a copy of `process.env` on a `Worker` instance operates in a case-sensitive manner + * unlike the main thread. + * @since v0.1.27 + */ + env: ProcessEnv; + /** + * The `process.exit()` method instructs Node.js to terminate the process + * synchronously with an exit status of `code`. If `code` is omitted, exit uses + * either the 'success' code `0` or the value of `process.exitCode` if it has been + * set. Node.js will not terminate until all the `'exit'` event listeners are + * called. + * + * To exit with a 'failure' code: + * + * ```js + * import { exit } from 'node:process'; + * + * exit(1); + * ``` + * + * The shell that executed Node.js should see the exit code as `1`. + * + * Calling `process.exit()` will force the process to exit as quickly as possible + * even if there are still asynchronous operations pending that have not yet + * completed fully, including I/O operations to `process.stdout` and `process.stderr`. + * + * In most situations, it is not actually necessary to call `process.exit()` explicitly. The Node.js process will exit on its own _if there is no additional_ + * _work pending_ in the event loop. The `process.exitCode` property can be set to + * tell the process which exit code to use when the process exits gracefully. + * + * For instance, the following example illustrates a _misuse_ of the `process.exit()` method that could lead to data printed to stdout being + * truncated and lost: + * + * ```js + * import { exit } from 'node:process'; + * + * // This is an example of what *not* to do: + * if (someConditionNotMet()) { + * printUsageToStdout(); + * exit(1); + * } + * ``` + * + * The reason this is problematic is because writes to `process.stdout` in Node.js + * are sometimes _asynchronous_ and may occur over multiple ticks of the Node.js + * event loop. Calling `process.exit()`, however, forces the process to exit _before_ those additional writes to `stdout` can be performed. + * + * Rather than calling `process.exit()` directly, the code _should_ set the `process.exitCode` and allow the process to exit naturally by avoiding + * scheduling any additional work for the event loop: + * + * ```js + * import process from 'node:process'; + * + * // How to properly set the exit code while letting + * // the process exit gracefully. + * if (someConditionNotMet()) { + * printUsageToStdout(); + * process.exitCode = 1; + * } + * ``` + * + * If it is necessary to terminate the Node.js process due to an error condition, + * throwing an _uncaught_ error and allowing the process to terminate accordingly + * is safer than calling `process.exit()`. + * + * In `Worker` threads, this function stops the current thread rather + * than the current process. + * @since v0.1.13 + * @param [code=0] The exit code. For string type, only integer strings (e.g.,'1') are allowed. + */ + exit(code?: number | string | null): never; + /** + * A number which will be the process exit code, when the process either + * exits gracefully, or is exited via {@link exit} without specifying + * a code. + * + * Specifying a code to {@link exit} will override any + * previous setting of `process.exitCode`. + * @default undefined + * @since v0.11.8 + */ + exitCode: number | string | null | undefined; + finalization: { + /** + * This function registers a callback to be called when the process emits the `exit` event if the `ref` object was not garbage collected. + * If the object `ref` was garbage collected before the `exit` event is emitted, the callback will be removed from the finalization registry, and it will not be called on process exit. + * + * Inside the callback you can release the resources allocated by the `ref` object. + * Be aware that all limitations applied to the `beforeExit` event are also applied to the callback function, + * this means that there is a possibility that the callback will not be called under special circumstances. + * + * The idea of ​​this function is to help you free up resources when the starts process exiting, but also let the object be garbage collected if it is no longer being used. + * @param ref The reference to the resource that is being tracked. + * @param callback The callback function to be called when the resource is finalized. + * @since v22.5.0 + * @experimental + */ + register(ref: T, callback: (ref: T, event: "exit") => void): void; + /** + * This function behaves exactly like the `register`, except that the callback will be called when the process emits the `beforeExit` event if `ref` object was not garbage collected. + * + * Be aware that all limitations applied to the `beforeExit` event are also applied to the callback function, this means that there is a possibility that the callback will not be called under special circumstances. + * @param ref The reference to the resource that is being tracked. + * @param callback The callback function to be called when the resource is finalized. + * @since v22.5.0 + * @experimental + */ + registerBeforeExit(ref: T, callback: (ref: T, event: "beforeExit") => void): void; + /** + * This function remove the register of the object from the finalization registry, so the callback will not be called anymore. + * @param ref The reference to the resource that was registered previously. + * @since v22.5.0 + * @experimental + */ + unregister(ref: object): void; + }; + /** + * The `process.getActiveResourcesInfo()` method returns an array of strings containing + * the types of the active resources that are currently keeping the event loop alive. + * + * ```js + * import { getActiveResourcesInfo } from 'node:process'; + * import { setTimeout } from 'node:timers'; + + * console.log('Before:', getActiveResourcesInfo()); + * setTimeout(() => {}, 1000); + * console.log('After:', getActiveResourcesInfo()); + * // Prints: + * // Before: [ 'TTYWrap', 'TTYWrap', 'TTYWrap' ] + * // After: [ 'TTYWrap', 'TTYWrap', 'TTYWrap', 'Timeout' ] + * ``` + * @since v17.3.0, v16.14.0 + */ + getActiveResourcesInfo(): string[]; + /** + * Provides a way to load built-in modules in a globally available function. + * @param id ID of the built-in module being requested. + */ + getBuiltinModule(id: ID): BuiltInModule[ID]; + getBuiltinModule(id: string): object | undefined; + /** + * The `process.getgid()` method returns the numerical group identity of the + * process. (See [`getgid(2)`](http://man7.org/linux/man-pages/man2/getgid.2.html).) + * + * ```js + * import process from 'node:process'; + * + * if (process.getgid) { + * console.log(`Current gid: ${process.getgid()}`); + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * @since v0.1.31 + */ + getgid?: () => number; + /** + * The `process.setgid()` method sets the group identity of the process. (See [`setgid(2)`](http://man7.org/linux/man-pages/man2/setgid.2.html).) The `id` can be passed as either a + * numeric ID or a group name + * string. If a group name is specified, this method blocks while resolving the + * associated numeric ID. + * + * ```js + * import process from 'node:process'; + * + * if (process.getgid && process.setgid) { + * console.log(`Current gid: ${process.getgid()}`); + * try { + * process.setgid(501); + * console.log(`New gid: ${process.getgid()}`); + * } catch (err) { + * console.log(`Failed to set gid: ${err}`); + * } + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * This feature is not available in `Worker` threads. + * @since v0.1.31 + * @param id The group name or ID + */ + setgid?: (id: number | string) => void; + /** + * The `process.getuid()` method returns the numeric user identity of the process. + * (See [`getuid(2)`](http://man7.org/linux/man-pages/man2/getuid.2.html).) + * + * ```js + * import process from 'node:process'; + * + * if (process.getuid) { + * console.log(`Current uid: ${process.getuid()}`); + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * @since v0.1.28 + */ + getuid?: () => number; + /** + * The `process.setuid(id)` method sets the user identity of the process. (See [`setuid(2)`](http://man7.org/linux/man-pages/man2/setuid.2.html).) The `id` can be passed as either a + * numeric ID or a username string. + * If a username is specified, the method blocks while resolving the associated + * numeric ID. + * + * ```js + * import process from 'node:process'; + * + * if (process.getuid && process.setuid) { + * console.log(`Current uid: ${process.getuid()}`); + * try { + * process.setuid(501); + * console.log(`New uid: ${process.getuid()}`); + * } catch (err) { + * console.log(`Failed to set uid: ${err}`); + * } + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * This feature is not available in `Worker` threads. + * @since v0.1.28 + */ + setuid?: (id: number | string) => void; + /** + * The `process.geteuid()` method returns the numerical effective user identity of + * the process. (See [`geteuid(2)`](http://man7.org/linux/man-pages/man2/geteuid.2.html).) + * + * ```js + * import process from 'node:process'; + * + * if (process.geteuid) { + * console.log(`Current uid: ${process.geteuid()}`); + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * @since v2.0.0 + */ + geteuid?: () => number; + /** + * The `process.seteuid()` method sets the effective user identity of the process. + * (See [`seteuid(2)`](http://man7.org/linux/man-pages/man2/seteuid.2.html).) The `id` can be passed as either a numeric ID or a username + * string. If a username is specified, the method blocks while resolving the + * associated numeric ID. + * + * ```js + * import process from 'node:process'; + * + * if (process.geteuid && process.seteuid) { + * console.log(`Current uid: ${process.geteuid()}`); + * try { + * process.seteuid(501); + * console.log(`New uid: ${process.geteuid()}`); + * } catch (err) { + * console.log(`Failed to set uid: ${err}`); + * } + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * This feature is not available in `Worker` threads. + * @since v2.0.0 + * @param id A user name or ID + */ + seteuid?: (id: number | string) => void; + /** + * The `process.getegid()` method returns the numerical effective group identity + * of the Node.js process. (See [`getegid(2)`](http://man7.org/linux/man-pages/man2/getegid.2.html).) + * + * ```js + * import process from 'node:process'; + * + * if (process.getegid) { + * console.log(`Current gid: ${process.getegid()}`); + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * @since v2.0.0 + */ + getegid?: () => number; + /** + * The `process.setegid()` method sets the effective group identity of the process. + * (See [`setegid(2)`](http://man7.org/linux/man-pages/man2/setegid.2.html).) The `id` can be passed as either a numeric ID or a group + * name string. If a group name is specified, this method blocks while resolving + * the associated a numeric ID. + * + * ```js + * import process from 'node:process'; + * + * if (process.getegid && process.setegid) { + * console.log(`Current gid: ${process.getegid()}`); + * try { + * process.setegid(501); + * console.log(`New gid: ${process.getegid()}`); + * } catch (err) { + * console.log(`Failed to set gid: ${err}`); + * } + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * This feature is not available in `Worker` threads. + * @since v2.0.0 + * @param id A group name or ID + */ + setegid?: (id: number | string) => void; + /** + * The `process.getgroups()` method returns an array with the supplementary group + * IDs. POSIX leaves it unspecified if the effective group ID is included but + * Node.js ensures it always is. + * + * ```js + * import process from 'node:process'; + * + * if (process.getgroups) { + * console.log(process.getgroups()); // [ 16, 21, 297 ] + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * @since v0.9.4 + */ + getgroups?: () => number[]; + /** + * The `process.setgroups()` method sets the supplementary group IDs for the + * Node.js process. This is a privileged operation that requires the Node.js + * process to have `root` or the `CAP_SETGID` capability. + * + * The `groups` array can contain numeric group IDs, group names, or both. + * + * ```js + * import process from 'node:process'; + * + * if (process.getgroups && process.setgroups) { + * try { + * process.setgroups([501]); + * console.log(process.getgroups()); // new groups + * } catch (err) { + * console.log(`Failed to set groups: ${err}`); + * } + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * This feature is not available in `Worker` threads. + * @since v0.9.4 + */ + setgroups?: (groups: ReadonlyArray) => void; + /** + * The `process.setUncaughtExceptionCaptureCallback()` function sets a function + * that will be invoked when an uncaught exception occurs, which will receive the + * exception value itself as its first argument. + * + * If such a function is set, the `'uncaughtException'` event will + * not be emitted. If `--abort-on-uncaught-exception` was passed from the + * command line or set through `v8.setFlagsFromString()`, the process will + * not abort. Actions configured to take place on exceptions such as report + * generations will be affected too + * + * To unset the capture function, `process.setUncaughtExceptionCaptureCallback(null)` may be used. Calling this + * method with a non-`null` argument while another capture function is set will + * throw an error. + * + * Using this function is mutually exclusive with using the deprecated `domain` built-in module. + * @since v9.3.0 + */ + setUncaughtExceptionCaptureCallback(cb: ((err: Error) => void) | null): void; + /** + * Indicates whether a callback has been set using {@link setUncaughtExceptionCaptureCallback}. + * @since v9.3.0 + */ + hasUncaughtExceptionCaptureCallback(): boolean; + /** + * The `process.sourceMapsEnabled` property returns whether the [Source Map v3](https://sourcemaps.info/spec.html) support for stack traces is enabled. + * @since v20.7.0 + * @experimental + */ + readonly sourceMapsEnabled: boolean; + /** + * This function enables or disables the [Source Map v3](https://sourcemaps.info/spec.html) support for + * stack traces. + * + * It provides same features as launching Node.js process with commandline options `--enable-source-maps`. + * + * Only source maps in JavaScript files that are loaded after source maps has been + * enabled will be parsed and loaded. + * @since v16.6.0, v14.18.0 + * @experimental + */ + setSourceMapsEnabled(value: boolean): void; + /** + * The `process.version` property contains the Node.js version string. + * + * ```js + * import { version } from 'node:process'; + * + * console.log(`Version: ${version}`); + * // Version: v14.8.0 + * ``` + * + * To get the version string without the prepended _v_, use`process.versions.node`. + * @since v0.1.3 + */ + readonly version: string; + /** + * The `process.versions` property returns an object listing the version strings of + * Node.js and its dependencies. `process.versions.modules` indicates the current + * ABI version, which is increased whenever a C++ API changes. Node.js will refuse + * to load modules that were compiled against a different module ABI version. + * + * ```js + * import { versions } from 'node:process'; + * + * console.log(versions); + * ``` + * + * Will generate an object similar to: + * + * ```console + * { node: '20.2.0', + * acorn: '8.8.2', + * ada: '2.4.0', + * ares: '1.19.0', + * base64: '0.5.0', + * brotli: '1.0.9', + * cjs_module_lexer: '1.2.2', + * cldr: '43.0', + * icu: '73.1', + * llhttp: '8.1.0', + * modules: '115', + * napi: '8', + * nghttp2: '1.52.0', + * nghttp3: '0.7.0', + * ngtcp2: '0.8.1', + * openssl: '3.0.8+quic', + * simdutf: '3.2.9', + * tz: '2023c', + * undici: '5.22.0', + * unicode: '15.0', + * uv: '1.44.2', + * uvwasi: '0.0.16', + * v8: '11.3.244.8-node.9', + * zlib: '1.2.13' } + * ``` + * @since v0.2.0 + */ + readonly versions: ProcessVersions; + /** + * The `process.config` property returns a frozen `Object` containing the + * JavaScript representation of the configure options used to compile the current + * Node.js executable. This is the same as the `config.gypi` file that was produced + * when running the `./configure` script. + * + * An example of the possible output looks like: + * + * ```js + * { + * target_defaults: + * { cflags: [], + * default_configuration: 'Release', + * defines: [], + * include_dirs: [], + * libraries: [] }, + * variables: + * { + * host_arch: 'x64', + * napi_build_version: 5, + * node_install_npm: 'true', + * node_prefix: '', + * node_shared_cares: 'false', + * node_shared_http_parser: 'false', + * node_shared_libuv: 'false', + * node_shared_zlib: 'false', + * node_use_openssl: 'true', + * node_shared_openssl: 'false', + * strict_aliasing: 'true', + * target_arch: 'x64', + * v8_use_snapshot: 1 + * } + * } + * ``` + * @since v0.7.7 + */ + readonly config: ProcessConfig; + /** + * The `process.kill()` method sends the `signal` to the process identified by`pid`. + * + * Signal names are strings such as `'SIGINT'` or `'SIGHUP'`. See `Signal Events` and [`kill(2)`](http://man7.org/linux/man-pages/man2/kill.2.html) for more information. + * + * This method will throw an error if the target `pid` does not exist. As a special + * case, a signal of `0` can be used to test for the existence of a process. + * Windows platforms will throw an error if the `pid` is used to kill a process + * group. + * + * Even though the name of this function is `process.kill()`, it is really just a + * signal sender, like the `kill` system call. The signal sent may do something + * other than kill the target process. + * + * ```js + * import process, { kill } from 'node:process'; + * + * process.on('SIGHUP', () => { + * console.log('Got SIGHUP signal.'); + * }); + * + * setTimeout(() => { + * console.log('Exiting.'); + * process.exit(0); + * }, 100); + * + * kill(process.pid, 'SIGHUP'); + * ``` + * + * When `SIGUSR1` is received by a Node.js process, Node.js will start the + * debugger. See `Signal Events`. + * @since v0.0.6 + * @param pid A process ID + * @param [signal='SIGTERM'] The signal to send, either as a string or number. + */ + kill(pid: number, signal?: string | number): true; + /** + * Loads the environment configuration from a `.env` file into `process.env`. If + * the file is not found, error will be thrown. + * + * To load a specific .env file by specifying its path, use the following code: + * + * ```js + * import { loadEnvFile } from 'node:process'; + * + * loadEnvFile('./development.env') + * ``` + * @since v20.12.0 + * @param path The path to the .env file + */ + loadEnvFile(path?: PathLike): void; + /** + * The `process.pid` property returns the PID of the process. + * + * ```js + * import { pid } from 'node:process'; + * + * console.log(`This process is pid ${pid}`); + * ``` + * @since v0.1.15 + */ + readonly pid: number; + /** + * The `process.ppid` property returns the PID of the parent of the + * current process. + * + * ```js + * import { ppid } from 'node:process'; + * + * console.log(`The parent process is pid ${ppid}`); + * ``` + * @since v9.2.0, v8.10.0, v6.13.0 + */ + readonly ppid: number; + /** + * The `process.threadCpuUsage()` method returns the user and system CPU time usage of + * the current worker thread, in an object with properties `user` and `system`, whose + * values are microsecond values (millionth of a second). + * + * The result of a previous call to `process.threadCpuUsage()` can be passed as the + * argument to the function, to get a diff reading. + * @since v23.9.0 + * @param previousValue A previous return value from calling + * `process.threadCpuUsage()` + */ + threadCpuUsage(previousValue?: CpuUsage): CpuUsage; + /** + * The `process.title` property returns the current process title (i.e. returns + * the current value of `ps`). Assigning a new value to `process.title` modifies + * the current value of `ps`. + * + * When a new value is assigned, different platforms will impose different maximum + * length restrictions on the title. Usually such restrictions are quite limited. + * For instance, on Linux and macOS, `process.title` is limited to the size of the + * binary name plus the length of the command-line arguments because setting the `process.title` overwrites the `argv` memory of the process. Node.js v0.8 + * allowed for longer process title strings by also overwriting the `environ` memory but that was potentially insecure and confusing in some (rather obscure) + * cases. + * + * Assigning a value to `process.title` might not result in an accurate label + * within process manager applications such as macOS Activity Monitor or Windows + * Services Manager. + * @since v0.1.104 + */ + title: string; + /** + * The operating system CPU architecture for which the Node.js binary was compiled. + * Possible values are: `'arm'`, `'arm64'`, `'ia32'`, `'loong64'`, `'mips'`, + * `'mipsel'`, `'ppc64'`, `'riscv64'`, `'s390x'`, and `'x64'`. + * + * ```js + * import { arch } from 'node:process'; + * + * console.log(`This processor architecture is ${arch}`); + * ``` + * @since v0.5.0 + */ + readonly arch: Architecture; + /** + * The `process.platform` property returns a string identifying the operating + * system platform for which the Node.js binary was compiled. + * + * Currently possible values are: + * + * * `'aix'` + * * `'darwin'` + * * `'freebsd'` + * * `'linux'` + * * `'openbsd'` + * * `'sunos'` + * * `'win32'` + * + * ```js + * import { platform } from 'node:process'; + * + * console.log(`This platform is ${platform}`); + * ``` + * + * The value `'android'` may also be returned if the Node.js is built on the + * Android operating system. However, Android support in Node.js [is experimental](https://github.com/nodejs/node/blob/HEAD/BUILDING.md#androidandroid-based-devices-eg-firefox-os). + * @since v0.1.16 + */ + readonly platform: Platform; + /** + * The `process.mainModule` property provides an alternative way of retrieving `require.main`. The difference is that if the main module changes at + * runtime, `require.main` may still refer to the original main module in + * modules that were required before the change occurred. Generally, it's + * safe to assume that the two refer to the same module. + * + * As with `require.main`, `process.mainModule` will be `undefined` if there + * is no entry script. + * @since v0.1.17 + * @deprecated Since v14.0.0 - Use `main` instead. + */ + mainModule?: Module; + memoryUsage: MemoryUsageFn; + /** + * Gets the amount of memory available to the process (in bytes) based on + * limits imposed by the OS. If there is no such constraint, or the constraint + * is unknown, `0` is returned. + * + * See [`uv_get_constrained_memory`](https://docs.libuv.org/en/v1.x/misc.html#c.uv_get_constrained_memory) for more + * information. + * @since v19.6.0, v18.15.0 + */ + constrainedMemory(): number; + /** + * Gets the amount of free memory that is still available to the process (in bytes). + * See [`uv_get_available_memory`](https://nodejs.org/docs/latest-v24.x/api/process.html#processavailablememory) for more information. + * @since v20.13.0 + */ + availableMemory(): number; + /** + * The `process.cpuUsage()` method returns the user and system CPU time usage of + * the current process, in an object with properties `user` and `system`, whose + * values are microsecond values (millionth of a second). These values measure time + * spent in user and system code respectively, and may end up being greater than + * actual elapsed time if multiple CPU cores are performing work for this process. + * + * The result of a previous call to `process.cpuUsage()` can be passed as the + * argument to the function, to get a diff reading. + * + * ```js + * import { cpuUsage } from 'node:process'; + * + * const startUsage = cpuUsage(); + * // { user: 38579, system: 6986 } + * + * // spin the CPU for 500 milliseconds + * const now = Date.now(); + * while (Date.now() - now < 500); + * + * console.log(cpuUsage(startUsage)); + * // { user: 514883, system: 11226 } + * ``` + * @since v6.1.0 + * @param previousValue A previous return value from calling `process.cpuUsage()` + */ + cpuUsage(previousValue?: CpuUsage): CpuUsage; + /** + * `process.nextTick()` adds `callback` to the "next tick queue". This queue is + * fully drained after the current operation on the JavaScript stack runs to + * completion and before the event loop is allowed to continue. It's possible to + * create an infinite loop if one were to recursively call `process.nextTick()`. + * See the [Event Loop](https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#process-nexttick) guide for more background. + * + * ```js + * import { nextTick } from 'node:process'; + * + * console.log('start'); + * nextTick(() => { + * console.log('nextTick callback'); + * }); + * console.log('scheduled'); + * // Output: + * // start + * // scheduled + * // nextTick callback + * ``` + * + * This is important when developing APIs in order to give users the opportunity + * to assign event handlers _after_ an object has been constructed but before any + * I/O has occurred: + * + * ```js + * import { nextTick } from 'node:process'; + * + * function MyThing(options) { + * this.setupOptions(options); + * + * nextTick(() => { + * this.startDoingStuff(); + * }); + * } + * + * const thing = new MyThing(); + * thing.getReadyForStuff(); + * + * // thing.startDoingStuff() gets called now, not before. + * ``` + * + * It is very important for APIs to be either 100% synchronous or 100% + * asynchronous. Consider this example: + * + * ```js + * // WARNING! DO NOT USE! BAD UNSAFE HAZARD! + * function maybeSync(arg, cb) { + * if (arg) { + * cb(); + * return; + * } + * + * fs.stat('file', cb); + * } + * ``` + * + * This API is hazardous because in the following case: + * + * ```js + * const maybeTrue = Math.random() > 0.5; + * + * maybeSync(maybeTrue, () => { + * foo(); + * }); + * + * bar(); + * ``` + * + * It is not clear whether `foo()` or `bar()` will be called first. + * + * The following approach is much better: + * + * ```js + * import { nextTick } from 'node:process'; + * + * function definitelyAsync(arg, cb) { + * if (arg) { + * nextTick(cb); + * return; + * } + * + * fs.stat('file', cb); + * } + * ``` + * @since v0.1.26 + * @param args Additional arguments to pass when invoking the `callback` + */ + nextTick(callback: Function, ...args: any[]): void; + /** + * This API is available through the [--permission](https://nodejs.org/api/cli.html#--permission) flag. + * + * `process.permission` is an object whose methods are used to manage permissions for the current process. + * Additional documentation is available in the [Permission Model](https://nodejs.org/api/permissions.html#permission-model). + * @since v20.0.0 + */ + permission: ProcessPermission; + /** + * The `process.release` property returns an `Object` containing metadata related + * to the current release, including URLs for the source tarball and headers-only + * tarball. + * + * `process.release` contains the following properties: + * + * ```js + * { + * name: 'node', + * lts: 'Hydrogen', + * sourceUrl: 'https://nodejs.org/download/release/v18.12.0/node-v18.12.0.tar.gz', + * headersUrl: 'https://nodejs.org/download/release/v18.12.0/node-v18.12.0-headers.tar.gz', + * libUrl: 'https://nodejs.org/download/release/v18.12.0/win-x64/node.lib' + * } + * ``` + * + * In custom builds from non-release versions of the source tree, only the `name` property may be present. The additional properties should not be + * relied upon to exist. + * @since v3.0.0 + */ + readonly release: ProcessRelease; + readonly features: ProcessFeatures; + /** + * `process.umask()` returns the Node.js process's file mode creation mask. Child + * processes inherit the mask from the parent process. + * @since v0.1.19 + * @deprecated Calling `process.umask()` with no argument causes the process-wide umask to be written twice. This introduces a race condition between threads, and is a potential + * security vulnerability. There is no safe, cross-platform alternative API. + */ + umask(): number; + /** + * Can only be set if not in worker thread. + */ + umask(mask: string | number): number; + /** + * The `process.uptime()` method returns the number of seconds the current Node.js + * process has been running. + * + * The return value includes fractions of a second. Use `Math.floor()` to get whole + * seconds. + * @since v0.5.0 + */ + uptime(): number; + hrtime: HRTime; + /** + * If the Node.js process was spawned with an IPC channel, the process.channel property is a reference to the IPC channel. + * If no IPC channel exists, this property is undefined. + * @since v7.1.0 + */ + channel?: Control; + /** + * If Node.js is spawned with an IPC channel, the `process.send()` method can be + * used to send messages to the parent process. Messages will be received as a `'message'` event on the parent's `ChildProcess` object. + * + * If Node.js was not spawned with an IPC channel, `process.send` will be `undefined`. + * + * The message goes through serialization and parsing. The resulting message might + * not be the same as what is originally sent. + * @since v0.5.9 + * @param options used to parameterize the sending of certain types of handles. `options` supports the following properties: + */ + send?( + message: any, + sendHandle?: SendHandle, + options?: MessageOptions, + callback?: (error: Error | null) => void, + ): boolean; + /** + * If the Node.js process is spawned with an IPC channel (see the `Child Process` and `Cluster` documentation), the `process.disconnect()` method will close the + * IPC channel to the parent process, allowing the child process to exit gracefully + * once there are no other connections keeping it alive. + * + * The effect of calling `process.disconnect()` is the same as calling `ChildProcess.disconnect()` from the parent process. + * + * If the Node.js process was not spawned with an IPC channel, `process.disconnect()` will be `undefined`. + * @since v0.7.2 + */ + disconnect(): void; + /** + * If the Node.js process is spawned with an IPC channel (see the `Child Process` and `Cluster` documentation), the `process.connected` property will return `true` so long as the IPC + * channel is connected and will return `false` after `process.disconnect()` is called. + * + * Once `process.connected` is `false`, it is no longer possible to send messages + * over the IPC channel using `process.send()`. + * @since v0.7.2 + */ + connected: boolean; + /** + * The `process.allowedNodeEnvironmentFlags` property is a special, + * read-only `Set` of flags allowable within the `NODE_OPTIONS` environment variable. + * + * `process.allowedNodeEnvironmentFlags` extends `Set`, but overrides `Set.prototype.has` to recognize several different possible flag + * representations. `process.allowedNodeEnvironmentFlags.has()` will + * return `true` in the following cases: + * + * * Flags may omit leading single (`-`) or double (`--`) dashes; e.g., `inspect-brk` for `--inspect-brk`, or `r` for `-r`. + * * Flags passed through to V8 (as listed in `--v8-options`) may replace + * one or more _non-leading_ dashes for an underscore, or vice-versa; + * e.g., `--perf_basic_prof`, `--perf-basic-prof`, `--perf_basic-prof`, + * etc. + * * Flags may contain one or more equals (`=`) characters; all + * characters after and including the first equals will be ignored; + * e.g., `--stack-trace-limit=100`. + * * Flags _must_ be allowable within `NODE_OPTIONS`. + * + * When iterating over `process.allowedNodeEnvironmentFlags`, flags will + * appear only _once_; each will begin with one or more dashes. Flags + * passed through to V8 will contain underscores instead of non-leading + * dashes: + * + * ```js + * import { allowedNodeEnvironmentFlags } from 'node:process'; + * + * allowedNodeEnvironmentFlags.forEach((flag) => { + * // -r + * // --inspect-brk + * // --abort_on_uncaught_exception + * // ... + * }); + * ``` + * + * The methods `add()`, `clear()`, and `delete()` of`process.allowedNodeEnvironmentFlags` do nothing, and will fail + * silently. + * + * If Node.js was compiled _without_ `NODE_OPTIONS` support (shown in {@link config}), `process.allowedNodeEnvironmentFlags` will + * contain what _would have_ been allowable. + * @since v10.10.0 + */ + allowedNodeEnvironmentFlags: ReadonlySet; + /** + * `process.report` is an object whose methods are used to generate diagnostic reports for the current process. + * Additional documentation is available in the [report documentation](https://nodejs.org/docs/latest-v24.x/api/report.html). + * @since v11.8.0 + */ + report: ProcessReport; + /** + * ```js + * import { resourceUsage } from 'node:process'; + * + * console.log(resourceUsage()); + * /* + * Will output: + * { + * userCPUTime: 82872, + * systemCPUTime: 4143, + * maxRSS: 33164, + * sharedMemorySize: 0, + * unsharedDataSize: 0, + * unsharedStackSize: 0, + * minorPageFault: 2469, + * majorPageFault: 0, + * swappedOut: 0, + * fsRead: 0, + * fsWrite: 8, + * ipcSent: 0, + * ipcReceived: 0, + * signalsCount: 0, + * voluntaryContextSwitches: 79, + * involuntaryContextSwitches: 1 + * } + * + * ``` + * @since v12.6.0 + * @return the resource usage for the current process. All of these values come from the `uv_getrusage` call which returns a [`uv_rusage_t` struct][uv_rusage_t]. + */ + resourceUsage(): ResourceUsage; + /** + * The initial value of `process.throwDeprecation` indicates whether the `--throw-deprecation` flag is set on the current Node.js process. `process.throwDeprecation` + * is mutable, so whether or not deprecation warnings result in errors may be altered at runtime. See the documentation for the 'warning' event and the emitWarning() + * method for more information. + * + * ```bash + * $ node --throw-deprecation -p "process.throwDeprecation" + * true + * $ node -p "process.throwDeprecation" + * undefined + * $ node + * > process.emitWarning('test', 'DeprecationWarning'); + * undefined + * > (node:26598) DeprecationWarning: test + * > process.throwDeprecation = true; + * true + * > process.emitWarning('test', 'DeprecationWarning'); + * Thrown: + * [DeprecationWarning: test] { name: 'DeprecationWarning' } + * ``` + * @since v0.9.12 + */ + throwDeprecation: boolean; + /** + * The `process.traceDeprecation` property indicates whether the `--trace-deprecation` flag is set on the current Node.js process. See the + * documentation for the `'warning' event` and the `emitWarning() method` for more information about this + * flag's behavior. + * @since v0.8.0 + */ + traceDeprecation: boolean; + /** + * An object is "refable" if it implements the Node.js "Refable protocol". + * Specifically, this means that the object implements the `Symbol.for('nodejs.ref')` + * and `Symbol.for('nodejs.unref')` methods. "Ref'd" objects will keep the Node.js + * event loop alive, while "unref'd" objects will not. Historically, this was + * implemented by using `ref()` and `unref()` methods directly on the objects. + * This pattern, however, is being deprecated in favor of the "Refable protocol" + * in order to better support Web Platform API types whose APIs cannot be modified + * to add `ref()` and `unref()` methods but still need to support that behavior. + * @since v22.14.0 + * @experimental + * @param maybeRefable An object that may be "refable". + */ + ref(maybeRefable: any): void; + /** + * An object is "unrefable" if it implements the Node.js "Refable protocol". + * Specifically, this means that the object implements the `Symbol.for('nodejs.ref')` + * and `Symbol.for('nodejs.unref')` methods. "Ref'd" objects will keep the Node.js + * event loop alive, while "unref'd" objects will not. Historically, this was + * implemented by using `ref()` and `unref()` methods directly on the objects. + * This pattern, however, is being deprecated in favor of the "Refable protocol" + * in order to better support Web Platform API types whose APIs cannot be modified + * to add `ref()` and `unref()` methods but still need to support that behavior. + * @since v22.14.0 + * @experimental + * @param maybeRefable An object that may be "unref'd". + */ + unref(maybeRefable: any): void; + /** + * Replaces the current process with a new process. + * + * This is achieved by using the `execve` POSIX function and therefore no memory or other + * resources from the current process are preserved, except for the standard input, + * standard output and standard error file descriptor. + * + * All other resources are discarded by the system when the processes are swapped, without triggering + * any exit or close events and without running any cleanup handler. + * + * This function will never return, unless an error occurred. + * + * This function is not available on Windows or IBM i. + * @since v22.15.0 + * @experimental + * @param file The name or path of the executable file to run. + * @param args List of string arguments. No argument can contain a null-byte (`\u0000`). + * @param env Environment key-value pairs. + * No key or value can contain a null-byte (`\u0000`). + * **Default:** `process.env`. + */ + execve?(file: string, args?: readonly string[], env?: ProcessEnv): never; + /* EventEmitter */ + addListener(event: "beforeExit", listener: BeforeExitListener): this; + addListener(event: "disconnect", listener: DisconnectListener): this; + addListener(event: "exit", listener: ExitListener): this; + addListener(event: "rejectionHandled", listener: RejectionHandledListener): this; + addListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; + addListener(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + addListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + addListener(event: "warning", listener: WarningListener): this; + addListener(event: "message", listener: MessageListener): this; + addListener(event: Signals, listener: SignalsListener): this; + addListener(event: "multipleResolves", listener: MultipleResolveListener): this; + addListener(event: "worker", listener: WorkerListener): this; + emit(event: "beforeExit", code: number): boolean; + emit(event: "disconnect"): boolean; + emit(event: "exit", code: number): boolean; + emit(event: "rejectionHandled", promise: Promise): boolean; + emit(event: "uncaughtException", error: Error): boolean; + emit(event: "uncaughtExceptionMonitor", error: Error): boolean; + emit(event: "unhandledRejection", reason: unknown, promise: Promise): boolean; + emit(event: "warning", warning: Error): boolean; + emit(event: "message", message: unknown, sendHandle: SendHandle): this; + emit(event: Signals, signal?: Signals): boolean; + emit( + event: "multipleResolves", + type: MultipleResolveType, + promise: Promise, + value: unknown, + ): this; + emit(event: "worker", listener: WorkerListener): this; + on(event: "beforeExit", listener: BeforeExitListener): this; + on(event: "disconnect", listener: DisconnectListener): this; + on(event: "exit", listener: ExitListener): this; + on(event: "rejectionHandled", listener: RejectionHandledListener): this; + on(event: "uncaughtException", listener: UncaughtExceptionListener): this; + on(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + on(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + on(event: "warning", listener: WarningListener): this; + on(event: "message", listener: MessageListener): this; + on(event: Signals, listener: SignalsListener): this; + on(event: "multipleResolves", listener: MultipleResolveListener): this; + on(event: "worker", listener: WorkerListener): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "beforeExit", listener: BeforeExitListener): this; + once(event: "disconnect", listener: DisconnectListener): this; + once(event: "exit", listener: ExitListener): this; + once(event: "rejectionHandled", listener: RejectionHandledListener): this; + once(event: "uncaughtException", listener: UncaughtExceptionListener): this; + once(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + once(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + once(event: "warning", listener: WarningListener): this; + once(event: "message", listener: MessageListener): this; + once(event: Signals, listener: SignalsListener): this; + once(event: "multipleResolves", listener: MultipleResolveListener): this; + once(event: "worker", listener: WorkerListener): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "beforeExit", listener: BeforeExitListener): this; + prependListener(event: "disconnect", listener: DisconnectListener): this; + prependListener(event: "exit", listener: ExitListener): this; + prependListener(event: "rejectionHandled", listener: RejectionHandledListener): this; + prependListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; + prependListener(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + prependListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + prependListener(event: "warning", listener: WarningListener): this; + prependListener(event: "message", listener: MessageListener): this; + prependListener(event: Signals, listener: SignalsListener): this; + prependListener(event: "multipleResolves", listener: MultipleResolveListener): this; + prependListener(event: "worker", listener: WorkerListener): this; + prependOnceListener(event: "beforeExit", listener: BeforeExitListener): this; + prependOnceListener(event: "disconnect", listener: DisconnectListener): this; + prependOnceListener(event: "exit", listener: ExitListener): this; + prependOnceListener(event: "rejectionHandled", listener: RejectionHandledListener): this; + prependOnceListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; + prependOnceListener(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + prependOnceListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + prependOnceListener(event: "warning", listener: WarningListener): this; + prependOnceListener(event: "message", listener: MessageListener): this; + prependOnceListener(event: Signals, listener: SignalsListener): this; + prependOnceListener(event: "multipleResolves", listener: MultipleResolveListener): this; + prependOnceListener(event: "worker", listener: WorkerListener): this; + listeners(event: "beforeExit"): BeforeExitListener[]; + listeners(event: "disconnect"): DisconnectListener[]; + listeners(event: "exit"): ExitListener[]; + listeners(event: "rejectionHandled"): RejectionHandledListener[]; + listeners(event: "uncaughtException"): UncaughtExceptionListener[]; + listeners(event: "uncaughtExceptionMonitor"): UncaughtExceptionListener[]; + listeners(event: "unhandledRejection"): UnhandledRejectionListener[]; + listeners(event: "warning"): WarningListener[]; + listeners(event: "message"): MessageListener[]; + listeners(event: Signals): SignalsListener[]; + listeners(event: "multipleResolves"): MultipleResolveListener[]; + listeners(event: "worker"): WorkerListener[]; + } + } + } + export = process; +} +declare module "node:process" { + import process = require("process"); + export = process; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/punycode.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/punycode.d.ts new file mode 100644 index 00000000..7ac26c82 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/punycode.d.ts @@ -0,0 +1,117 @@ +/** + * **The version of the punycode module bundled in Node.js is being deprecated. **In a future major version of Node.js this module will be removed. Users + * currently depending on the `punycode` module should switch to using the + * userland-provided [Punycode.js](https://github.com/bestiejs/punycode.js) module instead. For punycode-based URL + * encoding, see `url.domainToASCII` or, more generally, the `WHATWG URL API`. + * + * The `punycode` module is a bundled version of the [Punycode.js](https://github.com/bestiejs/punycode.js) module. It + * can be accessed using: + * + * ```js + * import punycode from 'node:punycode'; + * ``` + * + * [Punycode](https://tools.ietf.org/html/rfc3492) is a character encoding scheme defined by RFC 3492 that is + * primarily intended for use in Internationalized Domain Names. Because host + * names in URLs are limited to ASCII characters only, Domain Names that contain + * non-ASCII characters must be converted into ASCII using the Punycode scheme. + * For instance, the Japanese character that translates into the English word, `'example'` is `'例'`. The Internationalized Domain Name, `'例.com'` (equivalent + * to `'example.com'`) is represented by Punycode as the ASCII string `'xn--fsq.com'`. + * + * The `punycode` module provides a simple implementation of the Punycode standard. + * + * The `punycode` module is a third-party dependency used by Node.js and + * made available to developers as a convenience. Fixes or other modifications to + * the module must be directed to the [Punycode.js](https://github.com/bestiejs/punycode.js) project. + * @deprecated Since v7.0.0 - Deprecated + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/punycode.js) + */ +declare module "punycode" { + /** + * The `punycode.decode()` method converts a [Punycode](https://tools.ietf.org/html/rfc3492) string of ASCII-only + * characters to the equivalent string of Unicode codepoints. + * + * ```js + * punycode.decode('maana-pta'); // 'mañana' + * punycode.decode('--dqo34k'); // '☃-⌘' + * ``` + * @since v0.5.1 + */ + function decode(string: string): string; + /** + * The `punycode.encode()` method converts a string of Unicode codepoints to a [Punycode](https://tools.ietf.org/html/rfc3492) string of ASCII-only characters. + * + * ```js + * punycode.encode('mañana'); // 'maana-pta' + * punycode.encode('☃-⌘'); // '--dqo34k' + * ``` + * @since v0.5.1 + */ + function encode(string: string): string; + /** + * The `punycode.toUnicode()` method converts a string representing a domain name + * containing [Punycode](https://tools.ietf.org/html/rfc3492) encoded characters into Unicode. Only the [Punycode](https://tools.ietf.org/html/rfc3492) encoded parts of the domain name are be + * converted. + * + * ```js + * // decode domain names + * punycode.toUnicode('xn--maana-pta.com'); // 'mañana.com' + * punycode.toUnicode('xn----dqo34k.com'); // '☃-⌘.com' + * punycode.toUnicode('example.com'); // 'example.com' + * ``` + * @since v0.6.1 + */ + function toUnicode(domain: string): string; + /** + * The `punycode.toASCII()` method converts a Unicode string representing an + * Internationalized Domain Name to [Punycode](https://tools.ietf.org/html/rfc3492). Only the non-ASCII parts of the + * domain name will be converted. Calling `punycode.toASCII()` on a string that + * already only contains ASCII characters will have no effect. + * + * ```js + * // encode domain names + * punycode.toASCII('mañana.com'); // 'xn--maana-pta.com' + * punycode.toASCII('☃-⌘.com'); // 'xn----dqo34k.com' + * punycode.toASCII('example.com'); // 'example.com' + * ``` + * @since v0.6.1 + */ + function toASCII(domain: string): string; + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + const ucs2: ucs2; + interface ucs2 { + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + decode(string: string): number[]; + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + encode(codePoints: readonly number[]): string; + } + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + const version: string; +} +declare module "node:punycode" { + export * from "punycode"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/querystring.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/querystring.d.ts new file mode 100644 index 00000000..aaeefe8d --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/querystring.d.ts @@ -0,0 +1,152 @@ +/** + * The `node:querystring` module provides utilities for parsing and formatting URL + * query strings. It can be accessed using: + * + * ```js + * import querystring from 'node:querystring'; + * ``` + * + * `querystring` is more performant than `URLSearchParams` but is not a + * standardized API. Use `URLSearchParams` when performance is not critical or + * when compatibility with browser code is desirable. + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/querystring.js) + */ +declare module "querystring" { + interface StringifyOptions { + /** + * The function to use when converting URL-unsafe characters to percent-encoding in the query string. + * @default `querystring.escape()` + */ + encodeURIComponent?: ((str: string) => string) | undefined; + } + interface ParseOptions { + /** + * Specifies the maximum number of keys to parse. Specify `0` to remove key counting limitations. + * @default 1000 + */ + maxKeys?: number | undefined; + /** + * The function to use when decoding percent-encoded characters in the query string. + * @default `querystring.unescape()` + */ + decodeURIComponent?: ((str: string) => string) | undefined; + } + interface ParsedUrlQuery extends NodeJS.Dict {} + interface ParsedUrlQueryInput extends + NodeJS.Dict< + | string + | number + | boolean + | bigint + | ReadonlyArray + | null + > + {} + /** + * The `querystring.stringify()` method produces a URL query string from a + * given `obj` by iterating through the object's "own properties". + * + * It serializes the following types of values passed in `obj`: [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type) | + * [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type) | + * [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) | + * [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type) | + * [string\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type) | + * [number\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type) | + * [bigint\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) | + * [boolean\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type) The numeric values must be finite. Any other input values will be coerced to + * empty strings. + * + * ```js + * querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' }); + * // Returns 'foo=bar&baz=qux&baz=quux&corge=' + * + * querystring.stringify({ foo: 'bar', baz: 'qux' }, ';', ':'); + * // Returns 'foo:bar;baz:qux' + * ``` + * + * By default, characters requiring percent-encoding within the query string will + * be encoded as UTF-8\. If an alternative encoding is required, then an alternative `encodeURIComponent` option will need to be specified: + * + * ```js + * // Assuming gbkEncodeURIComponent function already exists, + * + * querystring.stringify({ w: '中文', foo: 'bar' }, null, null, + * { encodeURIComponent: gbkEncodeURIComponent }); + * ``` + * @since v0.1.25 + * @param obj The object to serialize into a URL query string + * @param [sep='&'] The substring used to delimit key and value pairs in the query string. + * @param [eq='='] . The substring used to delimit keys and values in the query string. + */ + function stringify(obj?: ParsedUrlQueryInput, sep?: string, eq?: string, options?: StringifyOptions): string; + /** + * The `querystring.parse()` method parses a URL query string (`str`) into a + * collection of key and value pairs. + * + * For example, the query string `'foo=bar&abc=xyz&abc=123'` is parsed into: + * + * ```json + * { + * "foo": "bar", + * "abc": ["xyz", "123"] + * } + * ``` + * + * The object returned by the `querystring.parse()` method _does not_ prototypically inherit from the JavaScript `Object`. This means that typical `Object` methods such as `obj.toString()`, + * `obj.hasOwnProperty()`, and others + * are not defined and _will not work_. + * + * By default, percent-encoded characters within the query string will be assumed + * to use UTF-8 encoding. If an alternative character encoding is used, then an + * alternative `decodeURIComponent` option will need to be specified: + * + * ```js + * // Assuming gbkDecodeURIComponent function already exists... + * + * querystring.parse('w=%D6%D0%CE%C4&foo=bar', null, null, + * { decodeURIComponent: gbkDecodeURIComponent }); + * ``` + * @since v0.1.25 + * @param str The URL query string to parse + * @param [sep='&'] The substring used to delimit key and value pairs in the query string. + * @param [eq='='] The substring used to delimit keys and values in the query string. + */ + function parse(str: string, sep?: string, eq?: string, options?: ParseOptions): ParsedUrlQuery; + /** + * The querystring.encode() function is an alias for querystring.stringify(). + */ + const encode: typeof stringify; + /** + * The querystring.decode() function is an alias for querystring.parse(). + */ + const decode: typeof parse; + /** + * The `querystring.escape()` method performs URL percent-encoding on the given `str` in a manner that is optimized for the specific requirements of URL + * query strings. + * + * The `querystring.escape()` method is used by `querystring.stringify()` and is + * generally not expected to be used directly. It is exported primarily to allow + * application code to provide a replacement percent-encoding implementation if + * necessary by assigning `querystring.escape` to an alternative function. + * @since v0.1.25 + */ + function escape(str: string): string; + /** + * The `querystring.unescape()` method performs decoding of URL percent-encoded + * characters on the given `str`. + * + * The `querystring.unescape()` method is used by `querystring.parse()` and is + * generally not expected to be used directly. It is exported primarily to allow + * application code to provide a replacement decoding implementation if + * necessary by assigning `querystring.unescape` to an alternative function. + * + * By default, the `querystring.unescape()` method will attempt to use the + * JavaScript built-in `decodeURIComponent()` method to decode. If that fails, + * a safer equivalent that does not throw on malformed URLs will be used. + * @since v0.1.25 + */ + function unescape(str: string): string; +} +declare module "node:querystring" { + export * from "querystring"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/readline.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/readline.d.ts new file mode 100644 index 00000000..519b4a46 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/readline.d.ts @@ -0,0 +1,594 @@ +/** + * The `node:readline` module provides an interface for reading data from a [Readable](https://nodejs.org/docs/latest-v24.x/api/stream.html#readable-streams) stream + * (such as [`process.stdin`](https://nodejs.org/docs/latest-v24.x/api/process.html#processstdin)) one line at a time. + * + * To use the promise-based APIs: + * + * ```js + * import * as readline from 'node:readline/promises'; + * ``` + * + * To use the callback and sync APIs: + * + * ```js + * import * as readline from 'node:readline'; + * ``` + * + * The following simple example illustrates the basic use of the `node:readline` module. + * + * ```js + * import * as readline from 'node:readline/promises'; + * import { stdin as input, stdout as output } from 'node:process'; + * + * const rl = readline.createInterface({ input, output }); + * + * const answer = await rl.question('What do you think of Node.js? '); + * + * console.log(`Thank you for your valuable feedback: ${answer}`); + * + * rl.close(); + * ``` + * + * Once this code is invoked, the Node.js application will not terminate until the `readline.Interface` is closed because the interface waits for data to be + * received on the `input` stream. + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/readline.js) + */ +declare module "readline" { + import { Abortable, EventEmitter } from "node:events"; + import * as promises from "node:readline/promises"; + export { promises }; + export interface Key { + sequence?: string | undefined; + name?: string | undefined; + ctrl?: boolean | undefined; + meta?: boolean | undefined; + shift?: boolean | undefined; + } + /** + * Instances of the `readline.Interface` class are constructed using the `readline.createInterface()` method. Every instance is associated with a + * single `input` [Readable](https://nodejs.org/docs/latest-v24.x/api/stream.html#readable-streams) stream and a single `output` [Writable](https://nodejs.org/docs/latest-v24.x/api/stream.html#writable-streams) stream. + * The `output` stream is used to print prompts for user input that arrives on, + * and is read from, the `input` stream. + * @since v0.1.104 + */ + export class Interface extends EventEmitter implements Disposable { + readonly terminal: boolean; + /** + * The current input data being processed by node. + * + * This can be used when collecting input from a TTY stream to retrieve the + * current value that has been processed thus far, prior to the `line` event + * being emitted. Once the `line` event has been emitted, this property will + * be an empty string. + * + * Be aware that modifying the value during the instance runtime may have + * unintended consequences if `rl.cursor` is not also controlled. + * + * **If not using a TTY stream for input, use the `'line'` event.** + * + * One possible use case would be as follows: + * + * ```js + * const values = ['lorem ipsum', 'dolor sit amet']; + * const rl = readline.createInterface(process.stdin); + * const showResults = debounce(() => { + * console.log( + * '\n', + * values.filter((val) => val.startsWith(rl.line)).join(' '), + * ); + * }, 300); + * process.stdin.on('keypress', (c, k) => { + * showResults(); + * }); + * ``` + * @since v0.1.98 + */ + readonly line: string; + /** + * The cursor position relative to `rl.line`. + * + * This will track where the current cursor lands in the input string, when + * reading input from a TTY stream. The position of cursor determines the + * portion of the input string that will be modified as input is processed, + * as well as the column where the terminal caret will be rendered. + * @since v0.1.98 + */ + readonly cursor: number; + /** + * NOTE: According to the documentation: + * + * > Instances of the `readline.Interface` class are constructed using the + * > `readline.createInterface()` method. + * + * @see https://nodejs.org/dist/latest-v24.x/docs/api/readline.html#class-interfaceconstructor + */ + protected constructor( + input: NodeJS.ReadableStream, + output?: NodeJS.WritableStream, + completer?: Completer | AsyncCompleter, + terminal?: boolean, + ); + /** + * NOTE: According to the documentation: + * + * > Instances of the `readline.Interface` class are constructed using the + * > `readline.createInterface()` method. + * + * @see https://nodejs.org/dist/latest-v24.x/docs/api/readline.html#class-interfaceconstructor + */ + protected constructor(options: ReadLineOptions); + /** + * The `rl.getPrompt()` method returns the current prompt used by `rl.prompt()`. + * @since v15.3.0, v14.17.0 + * @return the current prompt string + */ + getPrompt(): string; + /** + * The `rl.setPrompt()` method sets the prompt that will be written to `output` whenever `rl.prompt()` is called. + * @since v0.1.98 + */ + setPrompt(prompt: string): void; + /** + * The `rl.prompt()` method writes the `Interface` instances configured`prompt` to a new line in `output` in order to provide a user with a new + * location at which to provide input. + * + * When called, `rl.prompt()` will resume the `input` stream if it has been + * paused. + * + * If the `Interface` was created with `output` set to `null` or `undefined` the prompt is not written. + * @since v0.1.98 + * @param preserveCursor If `true`, prevents the cursor placement from being reset to `0`. + */ + prompt(preserveCursor?: boolean): void; + /** + * The `rl.question()` method displays the `query` by writing it to the `output`, + * waits for user input to be provided on `input`, then invokes the `callback` function passing the provided input as the first argument. + * + * When called, `rl.question()` will resume the `input` stream if it has been + * paused. + * + * If the `Interface` was created with `output` set to `null` or `undefined` the `query` is not written. + * + * The `callback` function passed to `rl.question()` does not follow the typical + * pattern of accepting an `Error` object or `null` as the first argument. + * The `callback` is called with the provided answer as the only argument. + * + * An error will be thrown if calling `rl.question()` after `rl.close()`. + * + * Example usage: + * + * ```js + * rl.question('What is your favorite food? ', (answer) => { + * console.log(`Oh, so your favorite food is ${answer}`); + * }); + * ``` + * + * Using an `AbortController` to cancel a question. + * + * ```js + * const ac = new AbortController(); + * const signal = ac.signal; + * + * rl.question('What is your favorite food? ', { signal }, (answer) => { + * console.log(`Oh, so your favorite food is ${answer}`); + * }); + * + * signal.addEventListener('abort', () => { + * console.log('The food question timed out'); + * }, { once: true }); + * + * setTimeout(() => ac.abort(), 10000); + * ``` + * @since v0.3.3 + * @param query A statement or query to write to `output`, prepended to the prompt. + * @param callback A callback function that is invoked with the user's input in response to the `query`. + */ + question(query: string, callback: (answer: string) => void): void; + question(query: string, options: Abortable, callback: (answer: string) => void): void; + /** + * The `rl.pause()` method pauses the `input` stream, allowing it to be resumed + * later if necessary. + * + * Calling `rl.pause()` does not immediately pause other events (including `'line'`) from being emitted by the `Interface` instance. + * @since v0.3.4 + */ + pause(): this; + /** + * The `rl.resume()` method resumes the `input` stream if it has been paused. + * @since v0.3.4 + */ + resume(): this; + /** + * The `rl.close()` method closes the `Interface` instance and + * relinquishes control over the `input` and `output` streams. When called, + * the `'close'` event will be emitted. + * + * Calling `rl.close()` does not immediately stop other events (including `'line'`) + * from being emitted by the `Interface` instance. + * @since v0.1.98 + */ + close(): void; + /** + * Alias for `rl.close()`. + * @since v22.15.0 + */ + [Symbol.dispose](): void; + /** + * The `rl.write()` method will write either `data` or a key sequence identified + * by `key` to the `output`. The `key` argument is supported only if `output` is + * a `TTY` text terminal. See `TTY keybindings` for a list of key + * combinations. + * + * If `key` is specified, `data` is ignored. + * + * When called, `rl.write()` will resume the `input` stream if it has been + * paused. + * + * If the `Interface` was created with `output` set to `null` or `undefined` the `data` and `key` are not written. + * + * ```js + * rl.write('Delete this!'); + * // Simulate Ctrl+U to delete the line written previously + * rl.write(null, { ctrl: true, name: 'u' }); + * ``` + * + * The `rl.write()` method will write the data to the `readline` `Interface`'s `input` _as if it were provided by the user_. + * @since v0.1.98 + */ + write(data: string | Buffer, key?: Key): void; + write(data: undefined | null | string | Buffer, key: Key): void; + /** + * Returns the real position of the cursor in relation to the input + * prompt + string. Long input (wrapping) strings, as well as multiple + * line prompts are included in the calculations. + * @since v13.5.0, v12.16.0 + */ + getCursorPos(): CursorPos; + /** + * events.EventEmitter + * 1. close + * 2. line + * 3. pause + * 4. resume + * 5. SIGCONT + * 6. SIGINT + * 7. SIGTSTP + * 8. history + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "line", listener: (input: string) => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: "SIGCONT", listener: () => void): this; + addListener(event: "SIGINT", listener: () => void): this; + addListener(event: "SIGTSTP", listener: () => void): this; + addListener(event: "history", listener: (history: string[]) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "line", input: string): boolean; + emit(event: "pause"): boolean; + emit(event: "resume"): boolean; + emit(event: "SIGCONT"): boolean; + emit(event: "SIGINT"): boolean; + emit(event: "SIGTSTP"): boolean; + emit(event: "history", history: string[]): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "line", listener: (input: string) => void): this; + on(event: "pause", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: "SIGCONT", listener: () => void): this; + on(event: "SIGINT", listener: () => void): this; + on(event: "SIGTSTP", listener: () => void): this; + on(event: "history", listener: (history: string[]) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "line", listener: (input: string) => void): this; + once(event: "pause", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: "SIGCONT", listener: () => void): this; + once(event: "SIGINT", listener: () => void): this; + once(event: "SIGTSTP", listener: () => void): this; + once(event: "history", listener: (history: string[]) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "line", listener: (input: string) => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: "SIGCONT", listener: () => void): this; + prependListener(event: "SIGINT", listener: () => void): this; + prependListener(event: "SIGTSTP", listener: () => void): this; + prependListener(event: "history", listener: (history: string[]) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "line", listener: (input: string) => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: "SIGCONT", listener: () => void): this; + prependOnceListener(event: "SIGINT", listener: () => void): this; + prependOnceListener(event: "SIGTSTP", listener: () => void): this; + prependOnceListener(event: "history", listener: (history: string[]) => void): this; + [Symbol.asyncIterator](): NodeJS.AsyncIterator; + } + export type ReadLine = Interface; // type forwarded for backwards compatibility + export type Completer = (line: string) => CompleterResult; + export type AsyncCompleter = ( + line: string, + callback: (err?: null | Error, result?: CompleterResult) => void, + ) => void; + export type CompleterResult = [string[], string]; + export interface ReadLineOptions { + /** + * The [`Readable`](https://nodejs.org/docs/latest-v24.x/api/stream.html#readable-streams) stream to listen to + */ + input: NodeJS.ReadableStream; + /** + * The [`Writable`](https://nodejs.org/docs/latest-v24.x/api/stream.html#writable-streams) stream to write readline data to. + */ + output?: NodeJS.WritableStream | undefined; + /** + * An optional function used for Tab autocompletion. + */ + completer?: Completer | AsyncCompleter | undefined; + /** + * `true` if the `input` and `output` streams should be treated like a TTY, + * and have ANSI/VT100 escape codes written to it. + * Default: checking `isTTY` on the `output` stream upon instantiation. + */ + terminal?: boolean | undefined; + /** + * Initial list of history lines. + * This option makes sense only if `terminal` is set to `true` by the user or by an internal `output` check, + * otherwise the history caching mechanism is not initialized at all. + * @default [] + */ + history?: string[] | undefined; + /** + * Maximum number of history lines retained. + * To disable the history set this value to `0`. + * This option makes sense only if `terminal` is set to `true` by the user or by an internal `output` check, + * otherwise the history caching mechanism is not initialized at all. + * @default 30 + */ + historySize?: number | undefined; + /** + * If `true`, when a new input line added to the history list duplicates an older one, + * this removes the older line from the list. + * @default false + */ + removeHistoryDuplicates?: boolean | undefined; + /** + * The prompt string to use. + * @default "> " + */ + prompt?: string | undefined; + /** + * If the delay between `\r` and `\n` exceeds `crlfDelay` milliseconds, + * both `\r` and `\n` will be treated as separate end-of-line input. + * `crlfDelay` will be coerced to a number no less than `100`. + * It can be set to `Infinity`, in which case + * `\r` followed by `\n` will always be considered a single newline + * (which may be reasonable for [reading files](https://nodejs.org/docs/latest-v24.x/api/readline.html#example-read-file-stream-line-by-line) with `\r\n` line delimiter). + * @default 100 + */ + crlfDelay?: number | undefined; + /** + * The duration `readline` will wait for a character + * (when reading an ambiguous key sequence in milliseconds + * one that can both form a complete key sequence using the input read so far + * and can take additional input to complete a longer key sequence). + * @default 500 + */ + escapeCodeTimeout?: number | undefined; + /** + * The number of spaces a tab is equal to (minimum 1). + * @default 8 + */ + tabSize?: number | undefined; + /** + * Allows closing the interface using an AbortSignal. + * Aborting the signal will internally call `close` on the interface. + */ + signal?: AbortSignal | undefined; + } + /** + * The `readline.createInterface()` method creates a new `readline.Interface` instance. + * + * ```js + * import readline from 'node:readline'; + * const rl = readline.createInterface({ + * input: process.stdin, + * output: process.stdout, + * }); + * ``` + * + * Once the `readline.Interface` instance is created, the most common case is to + * listen for the `'line'` event: + * + * ```js + * rl.on('line', (line) => { + * console.log(`Received: ${line}`); + * }); + * ``` + * + * If `terminal` is `true` for this instance then the `output` stream will get + * the best compatibility if it defines an `output.columns` property and emits + * a `'resize'` event on the `output` if or when the columns ever change + * (`process.stdout` does this automatically when it is a TTY). + * + * When creating a `readline.Interface` using `stdin` as input, the program + * will not terminate until it receives an [EOF character](https://en.wikipedia.org/wiki/End-of-file#EOF_character). To exit without + * waiting for user input, call `process.stdin.unref()`. + * @since v0.1.98 + */ + export function createInterface( + input: NodeJS.ReadableStream, + output?: NodeJS.WritableStream, + completer?: Completer | AsyncCompleter, + terminal?: boolean, + ): Interface; + export function createInterface(options: ReadLineOptions): Interface; + /** + * The `readline.emitKeypressEvents()` method causes the given `Readable` stream to begin emitting `'keypress'` events corresponding to received input. + * + * Optionally, `interface` specifies a `readline.Interface` instance for which + * autocompletion is disabled when copy-pasted input is detected. + * + * If the `stream` is a `TTY`, then it must be in raw mode. + * + * This is automatically called by any readline instance on its `input` if the `input` is a terminal. Closing the `readline` instance does not stop + * the `input` from emitting `'keypress'` events. + * + * ```js + * readline.emitKeypressEvents(process.stdin); + * if (process.stdin.isTTY) + * process.stdin.setRawMode(true); + * ``` + * + * ## Example: Tiny CLI + * + * The following example illustrates the use of `readline.Interface` class to + * implement a small command-line interface: + * + * ```js + * import readline from 'node:readline'; + * const rl = readline.createInterface({ + * input: process.stdin, + * output: process.stdout, + * prompt: 'OHAI> ', + * }); + * + * rl.prompt(); + * + * rl.on('line', (line) => { + * switch (line.trim()) { + * case 'hello': + * console.log('world!'); + * break; + * default: + * console.log(`Say what? I might have heard '${line.trim()}'`); + * break; + * } + * rl.prompt(); + * }).on('close', () => { + * console.log('Have a great day!'); + * process.exit(0); + * }); + * ``` + * + * ## Example: Read file stream line-by-Line + * + * A common use case for `readline` is to consume an input file one line at a + * time. The easiest way to do so is leveraging the `fs.ReadStream` API as + * well as a `for await...of` loop: + * + * ```js + * import fs from 'node:fs'; + * import readline from 'node:readline'; + * + * async function processLineByLine() { + * const fileStream = fs.createReadStream('input.txt'); + * + * const rl = readline.createInterface({ + * input: fileStream, + * crlfDelay: Infinity, + * }); + * // Note: we use the crlfDelay option to recognize all instances of CR LF + * // ('\r\n') in input.txt as a single line break. + * + * for await (const line of rl) { + * // Each line in input.txt will be successively available here as `line`. + * console.log(`Line from file: ${line}`); + * } + * } + * + * processLineByLine(); + * ``` + * + * Alternatively, one could use the `'line'` event: + * + * ```js + * import fs from 'node:fs'; + * import readline from 'node:readline'; + * + * const rl = readline.createInterface({ + * input: fs.createReadStream('sample.txt'), + * crlfDelay: Infinity, + * }); + * + * rl.on('line', (line) => { + * console.log(`Line from file: ${line}`); + * }); + * ``` + * + * Currently, `for await...of` loop can be a bit slower. If `async` / `await` flow and speed are both essential, a mixed approach can be applied: + * + * ```js + * import { once } from 'node:events'; + * import { createReadStream } from 'node:fs'; + * import { createInterface } from 'node:readline'; + * + * (async function processLineByLine() { + * try { + * const rl = createInterface({ + * input: createReadStream('big-file.txt'), + * crlfDelay: Infinity, + * }); + * + * rl.on('line', (line) => { + * // Process the line. + * }); + * + * await once(rl, 'close'); + * + * console.log('File processed.'); + * } catch (err) { + * console.error(err); + * } + * })(); + * ``` + * @since v0.7.7 + */ + export function emitKeypressEvents(stream: NodeJS.ReadableStream, readlineInterface?: Interface): void; + export type Direction = -1 | 0 | 1; + export interface CursorPos { + rows: number; + cols: number; + } + /** + * The `readline.clearLine()` method clears current line of given [TTY](https://nodejs.org/docs/latest-v24.x/api/tty.html) stream + * in a specified direction identified by `dir`. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + export function clearLine(stream: NodeJS.WritableStream, dir: Direction, callback?: () => void): boolean; + /** + * The `readline.clearScreenDown()` method clears the given [TTY](https://nodejs.org/docs/latest-v24.x/api/tty.html) stream from + * the current position of the cursor down. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + export function clearScreenDown(stream: NodeJS.WritableStream, callback?: () => void): boolean; + /** + * The `readline.cursorTo()` method moves cursor to the specified position in a + * given [TTY](https://nodejs.org/docs/latest-v24.x/api/tty.html) `stream`. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + export function cursorTo(stream: NodeJS.WritableStream, x: number, y?: number, callback?: () => void): boolean; + /** + * The `readline.moveCursor()` method moves the cursor _relative_ to its current + * position in a given [TTY](https://nodejs.org/docs/latest-v24.x/api/tty.html) `stream`. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + export function moveCursor(stream: NodeJS.WritableStream, dx: number, dy: number, callback?: () => void): boolean; +} +declare module "node:readline" { + export * from "readline"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/readline/promises.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/readline/promises.d.ts new file mode 100644 index 00000000..5bc9a0c2 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/readline/promises.d.ts @@ -0,0 +1,161 @@ +/** + * @since v17.0.0 + */ +declare module "readline/promises" { + import { Abortable } from "node:events"; + import { + CompleterResult, + Direction, + Interface as _Interface, + ReadLineOptions as _ReadLineOptions, + } from "node:readline"; + /** + * Instances of the `readlinePromises.Interface` class are constructed using the `readlinePromises.createInterface()` method. Every instance is associated with a + * single `input` `Readable` stream and a single `output` `Writable` stream. + * The `output` stream is used to print prompts for user input that arrives on, + * and is read from, the `input` stream. + * @since v17.0.0 + */ + class Interface extends _Interface { + /** + * The `rl.question()` method displays the `query` by writing it to the `output`, + * waits for user input to be provided on `input`, then invokes the `callback` function passing the provided input as the first argument. + * + * When called, `rl.question()` will resume the `input` stream if it has been + * paused. + * + * If the `Interface` was created with `output` set to `null` or `undefined` the `query` is not written. + * + * If the question is called after `rl.close()`, it returns a rejected promise. + * + * Example usage: + * + * ```js + * const answer = await rl.question('What is your favorite food? '); + * console.log(`Oh, so your favorite food is ${answer}`); + * ``` + * + * Using an `AbortSignal` to cancel a question. + * + * ```js + * const signal = AbortSignal.timeout(10_000); + * + * signal.addEventListener('abort', () => { + * console.log('The food question timed out'); + * }, { once: true }); + * + * const answer = await rl.question('What is your favorite food? ', { signal }); + * console.log(`Oh, so your favorite food is ${answer}`); + * ``` + * @since v17.0.0 + * @param query A statement or query to write to `output`, prepended to the prompt. + * @return A promise that is fulfilled with the user's input in response to the `query`. + */ + question(query: string): Promise; + question(query: string, options: Abortable): Promise; + } + /** + * @since v17.0.0 + */ + class Readline { + /** + * @param stream A TTY stream. + */ + constructor( + stream: NodeJS.WritableStream, + options?: { + autoCommit?: boolean | undefined; + }, + ); + /** + * The `rl.clearLine()` method adds to the internal list of pending action an + * action that clears current line of the associated `stream` in a specified + * direction identified by `dir`. + * Call `rl.commit()` to see the effect of this method, unless `autoCommit: true` was passed to the constructor. + * @since v17.0.0 + * @return this + */ + clearLine(dir: Direction): this; + /** + * The `rl.clearScreenDown()` method adds to the internal list of pending action an + * action that clears the associated stream from the current position of the + * cursor down. + * Call `rl.commit()` to see the effect of this method, unless `autoCommit: true` was passed to the constructor. + * @since v17.0.0 + * @return this + */ + clearScreenDown(): this; + /** + * The `rl.commit()` method sends all the pending actions to the associated `stream` and clears the internal list of pending actions. + * @since v17.0.0 + */ + commit(): Promise; + /** + * The `rl.cursorTo()` method adds to the internal list of pending action an action + * that moves cursor to the specified position in the associated `stream`. + * Call `rl.commit()` to see the effect of this method, unless `autoCommit: true` was passed to the constructor. + * @since v17.0.0 + * @return this + */ + cursorTo(x: number, y?: number): this; + /** + * The `rl.moveCursor()` method adds to the internal list of pending action an + * action that moves the cursor _relative_ to its current position in the + * associated `stream`. + * Call `rl.commit()` to see the effect of this method, unless `autoCommit: true` was passed to the constructor. + * @since v17.0.0 + * @return this + */ + moveCursor(dx: number, dy: number): this; + /** + * The `rl.rollback` methods clears the internal list of pending actions without + * sending it to the associated `stream`. + * @since v17.0.0 + * @return this + */ + rollback(): this; + } + type Completer = (line: string) => CompleterResult | Promise; + interface ReadLineOptions extends Omit<_ReadLineOptions, "completer"> { + /** + * An optional function used for Tab autocompletion. + */ + completer?: Completer | undefined; + } + /** + * The `readlinePromises.createInterface()` method creates a new `readlinePromises.Interface` instance. + * + * ```js + * import readlinePromises from 'node:readline/promises'; + * const rl = readlinePromises.createInterface({ + * input: process.stdin, + * output: process.stdout, + * }); + * ``` + * + * Once the `readlinePromises.Interface` instance is created, the most common case + * is to listen for the `'line'` event: + * + * ```js + * rl.on('line', (line) => { + * console.log(`Received: ${line}`); + * }); + * ``` + * + * If `terminal` is `true` for this instance then the `output` stream will get + * the best compatibility if it defines an `output.columns` property and emits + * a `'resize'` event on the `output` if or when the columns ever change + * (`process.stdout` does this automatically when it is a TTY). + * @since v17.0.0 + */ + function createInterface( + input: NodeJS.ReadableStream, + output?: NodeJS.WritableStream, + completer?: Completer, + terminal?: boolean, + ): Interface; + function createInterface(options: ReadLineOptions): Interface; +} +declare module "node:readline/promises" { + export * from "readline/promises"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/repl.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/repl.d.ts new file mode 100644 index 00000000..60dc94ad --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/repl.d.ts @@ -0,0 +1,438 @@ +/** + * The `node:repl` module provides a Read-Eval-Print-Loop (REPL) implementation + * that is available both as a standalone program or includible in other + * applications. It can be accessed using: + * + * ```js + * import repl from 'node:repl'; + * ``` + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/repl.js) + */ +declare module "repl" { + import { AsyncCompleter, Completer, Interface } from "node:readline"; + import { Context } from "node:vm"; + import { InspectOptions } from "node:util"; + interface ReplOptions { + /** + * The input prompt to display. + * @default "> " + */ + prompt?: string | undefined; + /** + * The `Readable` stream from which REPL input will be read. + * @default process.stdin + */ + input?: NodeJS.ReadableStream | undefined; + /** + * The `Writable` stream to which REPL output will be written. + * @default process.stdout + */ + output?: NodeJS.WritableStream | undefined; + /** + * If `true`, specifies that the output should be treated as a TTY terminal, and have + * ANSI/VT100 escape codes written to it. + * Default: checking the value of the `isTTY` property on the output stream upon + * instantiation. + */ + terminal?: boolean | undefined; + /** + * The function to be used when evaluating each given line of input. + * **Default:** an async wrapper for the JavaScript `eval()` function. An `eval` function can + * error with `repl.Recoverable` to indicate the input was incomplete and prompt for + * additional lines. See the [custom evaluation functions](https://nodejs.org/dist/latest-v24.x/docs/api/repl.html#custom-evaluation-functions) + * section for more details. + */ + eval?: REPLEval | undefined; + /** + * Defines if the repl prints output previews or not. + * @default `true` Always `false` in case `terminal` is falsy. + */ + preview?: boolean | undefined; + /** + * If `true`, specifies that the default `writer` function should include ANSI color + * styling to REPL output. If a custom `writer` function is provided then this has no + * effect. + * @default the REPL instance's `terminal` value + */ + useColors?: boolean | undefined; + /** + * If `true`, specifies that the default evaluation function will use the JavaScript + * `global` as the context as opposed to creating a new separate context for the REPL + * instance. The node CLI REPL sets this value to `true`. + * @default false + */ + useGlobal?: boolean | undefined; + /** + * If `true`, specifies that the default writer will not output the return value of a + * command if it evaluates to `undefined`. + * @default false + */ + ignoreUndefined?: boolean | undefined; + /** + * The function to invoke to format the output of each command before writing to `output`. + * @default a wrapper for `util.inspect` + * + * @see https://nodejs.org/dist/latest-v24.x/docs/api/repl.html#repl_customizing_repl_output + */ + writer?: REPLWriter | undefined; + /** + * An optional function used for custom Tab auto completion. + * + * @see https://nodejs.org/dist/latest-v24.x/docs/api/readline.html#readline_use_of_the_completer_function + */ + completer?: Completer | AsyncCompleter | undefined; + /** + * A flag that specifies whether the default evaluator executes all JavaScript commands in + * strict mode or default (sloppy) mode. + * Accepted values are: + * - `repl.REPL_MODE_SLOPPY` - evaluates expressions in sloppy mode. + * - `repl.REPL_MODE_STRICT` - evaluates expressions in strict mode. This is equivalent to + * prefacing every repl statement with `'use strict'`. + */ + replMode?: typeof REPL_MODE_SLOPPY | typeof REPL_MODE_STRICT | undefined; + /** + * Stop evaluating the current piece of code when `SIGINT` is received, i.e. `Ctrl+C` is + * pressed. This cannot be used together with a custom `eval` function. + * @default false + */ + breakEvalOnSigint?: boolean | undefined; + } + type REPLEval = ( + this: REPLServer, + evalCmd: string, + context: Context, + file: string, + cb: (err: Error | null, result: any) => void, + ) => void; + type REPLWriter = (this: REPLServer, obj: any) => string; + /** + * This is the default "writer" value, if none is passed in the REPL options, + * and it can be overridden by custom print functions. + */ + const writer: REPLWriter & { + options: InspectOptions; + }; + type REPLCommandAction = (this: REPLServer, text: string) => void; + interface REPLCommand { + /** + * Help text to be displayed when `.help` is entered. + */ + help?: string | undefined; + /** + * The function to execute, optionally accepting a single string argument. + */ + action: REPLCommandAction; + } + interface REPLServerSetupHistoryOptions { + filePath?: string | undefined; + size?: number | undefined; + removeHistoryDuplicates?: boolean | undefined; + onHistoryFileLoaded?: ((err: Error | null, repl: REPLServer) => void) | undefined; + } + /** + * Instances of `repl.REPLServer` are created using the {@link start} method + * or directly using the JavaScript `new` keyword. + * + * ```js + * import repl from 'node:repl'; + * + * const options = { useColors: true }; + * + * const firstInstance = repl.start(options); + * const secondInstance = new repl.REPLServer(options); + * ``` + * @since v0.1.91 + */ + class REPLServer extends Interface { + /** + * The `vm.Context` provided to the `eval` function to be used for JavaScript + * evaluation. + */ + readonly context: Context; + /** + * @deprecated since v14.3.0 - Use `input` instead. + */ + readonly inputStream: NodeJS.ReadableStream; + /** + * @deprecated since v14.3.0 - Use `output` instead. + */ + readonly outputStream: NodeJS.WritableStream; + /** + * The `Readable` stream from which REPL input will be read. + */ + readonly input: NodeJS.ReadableStream; + /** + * The `Writable` stream to which REPL output will be written. + */ + readonly output: NodeJS.WritableStream; + /** + * The commands registered via `replServer.defineCommand()`. + */ + readonly commands: NodeJS.ReadOnlyDict; + /** + * A value indicating whether the REPL is currently in "editor mode". + * + * @see https://nodejs.org/dist/latest-v24.x/docs/api/repl.html#repl_commands_and_special_keys + */ + readonly editorMode: boolean; + /** + * A value indicating whether the `_` variable has been assigned. + * + * @see https://nodejs.org/dist/latest-v24.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly underscoreAssigned: boolean; + /** + * The last evaluation result from the REPL (assigned to the `_` variable inside of the REPL). + * + * @see https://nodejs.org/dist/latest-v24.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly last: any; + /** + * A value indicating whether the `_error` variable has been assigned. + * + * @since v9.8.0 + * @see https://nodejs.org/dist/latest-v24.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly underscoreErrAssigned: boolean; + /** + * The last error raised inside the REPL (assigned to the `_error` variable inside of the REPL). + * + * @since v9.8.0 + * @see https://nodejs.org/dist/latest-v24.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly lastError: any; + /** + * Specified in the REPL options, this is the function to be used when evaluating each + * given line of input. If not specified in the REPL options, this is an async wrapper + * for the JavaScript `eval()` function. + */ + readonly eval: REPLEval; + /** + * Specified in the REPL options, this is a value indicating whether the default + * `writer` function should include ANSI color styling to REPL output. + */ + readonly useColors: boolean; + /** + * Specified in the REPL options, this is a value indicating whether the default `eval` + * function will use the JavaScript `global` as the context as opposed to creating a new + * separate context for the REPL instance. + */ + readonly useGlobal: boolean; + /** + * Specified in the REPL options, this is a value indicating whether the default `writer` + * function should output the result of a command if it evaluates to `undefined`. + */ + readonly ignoreUndefined: boolean; + /** + * Specified in the REPL options, this is the function to invoke to format the output of + * each command before writing to `outputStream`. If not specified in the REPL options, + * this will be a wrapper for `util.inspect`. + */ + readonly writer: REPLWriter; + /** + * Specified in the REPL options, this is the function to use for custom Tab auto-completion. + */ + readonly completer: Completer | AsyncCompleter; + /** + * Specified in the REPL options, this is a flag that specifies whether the default `eval` + * function should execute all JavaScript commands in strict mode or default (sloppy) mode. + * Possible values are: + * - `repl.REPL_MODE_SLOPPY` - evaluates expressions in sloppy mode. + * - `repl.REPL_MODE_STRICT` - evaluates expressions in strict mode. This is equivalent to + * prefacing every repl statement with `'use strict'`. + */ + readonly replMode: typeof REPL_MODE_SLOPPY | typeof REPL_MODE_STRICT; + /** + * NOTE: According to the documentation: + * + * > Instances of `repl.REPLServer` are created using the `repl.start()` method and + * > _should not_ be created directly using the JavaScript `new` keyword. + * + * `REPLServer` cannot be subclassed due to implementation specifics in NodeJS. + * + * @see https://nodejs.org/dist/latest-v24.x/docs/api/repl.html#repl_class_replserver + */ + private constructor(); + /** + * The `replServer.defineCommand()` method is used to add new `.`\-prefixed commands + * to the REPL instance. Such commands are invoked by typing a `.` followed by the `keyword`. The `cmd` is either a `Function` or an `Object` with the following + * properties: + * + * The following example shows two new commands added to the REPL instance: + * + * ```js + * import repl from 'node:repl'; + * + * const replServer = repl.start({ prompt: '> ' }); + * replServer.defineCommand('sayhello', { + * help: 'Say hello', + * action(name) { + * this.clearBufferedCommand(); + * console.log(`Hello, ${name}!`); + * this.displayPrompt(); + * }, + * }); + * replServer.defineCommand('saybye', function saybye() { + * console.log('Goodbye!'); + * this.close(); + * }); + * ``` + * + * The new commands can then be used from within the REPL instance: + * + * ```console + * > .sayhello Node.js User + * Hello, Node.js User! + * > .saybye + * Goodbye! + * ``` + * @since v0.3.0 + * @param keyword The command keyword (_without_ a leading `.` character). + * @param cmd The function to invoke when the command is processed. + */ + defineCommand(keyword: string, cmd: REPLCommandAction | REPLCommand): void; + /** + * The `replServer.displayPrompt()` method readies the REPL instance for input + * from the user, printing the configured `prompt` to a new line in the `output` and resuming the `input` to accept new input. + * + * When multi-line input is being entered, a pipe `'|'` is printed rather than the + * 'prompt'. + * + * When `preserveCursor` is `true`, the cursor placement will not be reset to `0`. + * + * The `replServer.displayPrompt` method is primarily intended to be called from + * within the action function for commands registered using the `replServer.defineCommand()` method. + * @since v0.1.91 + */ + displayPrompt(preserveCursor?: boolean): void; + /** + * The `replServer.clearBufferedCommand()` method clears any command that has been + * buffered but not yet executed. This method is primarily intended to be + * called from within the action function for commands registered using the `replServer.defineCommand()` method. + * @since v9.0.0 + */ + clearBufferedCommand(): void; + /** + * Initializes a history log file for the REPL instance. When executing the + * Node.js binary and using the command-line REPL, a history file is initialized + * by default. However, this is not the case when creating a REPL + * programmatically. Use this method to initialize a history log file when working + * with REPL instances programmatically. + * @since v11.10.0 + * @param historyPath the path to the history file + * @param callback called when history writes are ready or upon error + */ + setupHistory(historyPath: string, callback: (err: Error | null, repl: this) => void): void; + setupHistory( + historyConfig?: REPLServerSetupHistoryOptions, + callback?: (err: Error | null, repl: this) => void, + ): void; + /** + * events.EventEmitter + * 1. close - inherited from `readline.Interface` + * 2. line - inherited from `readline.Interface` + * 3. pause - inherited from `readline.Interface` + * 4. resume - inherited from `readline.Interface` + * 5. SIGCONT - inherited from `readline.Interface` + * 6. SIGINT - inherited from `readline.Interface` + * 7. SIGTSTP - inherited from `readline.Interface` + * 8. exit + * 9. reset + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "line", listener: (input: string) => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: "SIGCONT", listener: () => void): this; + addListener(event: "SIGINT", listener: () => void): this; + addListener(event: "SIGTSTP", listener: () => void): this; + addListener(event: "exit", listener: () => void): this; + addListener(event: "reset", listener: (context: Context) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "line", input: string): boolean; + emit(event: "pause"): boolean; + emit(event: "resume"): boolean; + emit(event: "SIGCONT"): boolean; + emit(event: "SIGINT"): boolean; + emit(event: "SIGTSTP"): boolean; + emit(event: "exit"): boolean; + emit(event: "reset", context: Context): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "line", listener: (input: string) => void): this; + on(event: "pause", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: "SIGCONT", listener: () => void): this; + on(event: "SIGINT", listener: () => void): this; + on(event: "SIGTSTP", listener: () => void): this; + on(event: "exit", listener: () => void): this; + on(event: "reset", listener: (context: Context) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "line", listener: (input: string) => void): this; + once(event: "pause", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: "SIGCONT", listener: () => void): this; + once(event: "SIGINT", listener: () => void): this; + once(event: "SIGTSTP", listener: () => void): this; + once(event: "exit", listener: () => void): this; + once(event: "reset", listener: (context: Context) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "line", listener: (input: string) => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: "SIGCONT", listener: () => void): this; + prependListener(event: "SIGINT", listener: () => void): this; + prependListener(event: "SIGTSTP", listener: () => void): this; + prependListener(event: "exit", listener: () => void): this; + prependListener(event: "reset", listener: (context: Context) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "line", listener: (input: string) => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: "SIGCONT", listener: () => void): this; + prependOnceListener(event: "SIGINT", listener: () => void): this; + prependOnceListener(event: "SIGTSTP", listener: () => void): this; + prependOnceListener(event: "exit", listener: () => void): this; + prependOnceListener(event: "reset", listener: (context: Context) => void): this; + } + /** + * A flag passed in the REPL options. Evaluates expressions in sloppy mode. + */ + const REPL_MODE_SLOPPY: unique symbol; + /** + * A flag passed in the REPL options. Evaluates expressions in strict mode. + * This is equivalent to prefacing every repl statement with `'use strict'`. + */ + const REPL_MODE_STRICT: unique symbol; + /** + * The `repl.start()` method creates and starts a {@link REPLServer} instance. + * + * If `options` is a string, then it specifies the input prompt: + * + * ```js + * import repl from 'node:repl'; + * + * // a Unix style prompt + * repl.start('$ '); + * ``` + * @since v0.1.91 + */ + function start(options?: string | ReplOptions): REPLServer; + /** + * Indicates a recoverable error that a `REPLServer` can use to support multi-line input. + * + * @see https://nodejs.org/dist/latest-v24.x/docs/api/repl.html#repl_recoverable_errors + */ + class Recoverable extends SyntaxError { + err: Error; + constructor(err: Error); + } +} +declare module "node:repl" { + export * from "repl"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/sea.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/sea.d.ts new file mode 100644 index 00000000..870c3045 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/sea.d.ts @@ -0,0 +1,162 @@ +/** + * This feature allows the distribution of a Node.js application conveniently to a + * system that does not have Node.js installed. + * + * Node.js supports the creation of [single executable applications](https://github.com/nodejs/single-executable) by allowing + * the injection of a blob prepared by Node.js, which can contain a bundled script, + * into the `node` binary. During start up, the program checks if anything has been + * injected. If the blob is found, it executes the script in the blob. Otherwise + * Node.js operates as it normally does. + * + * The single executable application feature currently only supports running a + * single embedded script using the `CommonJS` module system. + * + * Users can create a single executable application from their bundled script + * with the `node` binary itself and any tool which can inject resources into the + * binary. + * + * Here are the steps for creating a single executable application using one such + * tool, [postject](https://github.com/nodejs/postject): + * + * 1. Create a JavaScript file: + * ```bash + * echo 'console.log(`Hello, ${process.argv[2]}!`);' > hello.js + * ``` + * 2. Create a configuration file building a blob that can be injected into the + * single executable application (see `Generating single executable preparation blobs` for details): + * ```bash + * echo '{ "main": "hello.js", "output": "sea-prep.blob" }' > sea-config.json + * ``` + * 3. Generate the blob to be injected: + * ```bash + * node --experimental-sea-config sea-config.json + * ``` + * 4. Create a copy of the `node` executable and name it according to your needs: + * * On systems other than Windows: + * ```bash + * cp $(command -v node) hello + * ``` + * * On Windows: + * ```text + * node -e "require('fs').copyFileSync(process.execPath, 'hello.exe')" + * ``` + * The `.exe` extension is necessary. + * 5. Remove the signature of the binary (macOS and Windows only): + * * On macOS: + * ```bash + * codesign --remove-signature hello + * ``` + * * On Windows (optional): + * [signtool](https://learn.microsoft.com/en-us/windows/win32/seccrypto/signtool) can be used from the installed [Windows SDK](https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/). + * If this step is + * skipped, ignore any signature-related warning from postject. + * ```powershell + * signtool remove /s hello.exe + * ``` + * 6. Inject the blob into the copied binary by running `postject` with + * the following options: + * * `hello` / `hello.exe` \- The name of the copy of the `node` executable + * created in step 4. + * * `NODE_SEA_BLOB` \- The name of the resource / note / section in the binary + * where the contents of the blob will be stored. + * * `sea-prep.blob` \- The name of the blob created in step 1. + * * `--sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2` \- The [fuse](https://www.electronjs.org/docs/latest/tutorial/fuses) used by the Node.js project to detect if a file has been + * injected. + * * `--macho-segment-name NODE_SEA` (only needed on macOS) - The name of the + * segment in the binary where the contents of the blob will be + * stored. + * To summarize, here is the required command for each platform: + * * On Linux: + * ```bash + * npx postject hello NODE_SEA_BLOB sea-prep.blob \ + * --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 + * ``` + * * On Windows - PowerShell: + * ```powershell + * npx postject hello.exe NODE_SEA_BLOB sea-prep.blob ` + * --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 + * ``` + * * On Windows - Command Prompt: + * ```text + * npx postject hello.exe NODE_SEA_BLOB sea-prep.blob ^ + * --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 + * ``` + * * On macOS: + * ```bash + * npx postject hello NODE_SEA_BLOB sea-prep.blob \ + * --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 \ + * --macho-segment-name NODE_SEA + * ``` + * 7. Sign the binary (macOS and Windows only): + * * On macOS: + * ```bash + * codesign --sign - hello + * ``` + * * On Windows (optional): + * A certificate needs to be present for this to work. However, the unsigned + * binary would still be runnable. + * ```powershell + * signtool sign /fd SHA256 hello.exe + * ``` + * 8. Run the binary: + * * On systems other than Windows + * ```console + * $ ./hello world + * Hello, world! + * ``` + * * On Windows + * ```console + * $ .\hello.exe world + * Hello, world! + * ``` + * @since v19.7.0, v18.16.0 + * @experimental + * @see [source](https://github.com/nodejs/node/blob/v24.x/src/node_sea.cc) + */ +declare module "node:sea" { + type AssetKey = string; + /** + * @since v20.12.0 + * @return Whether this script is running inside a single-executable application. + */ + function isSea(): boolean; + /** + * This method can be used to retrieve the assets configured to be bundled into the + * single-executable application at build time. + * An error is thrown when no matching asset can be found. + * @since v20.12.0 + */ + function getAsset(key: AssetKey): ArrayBuffer; + function getAsset(key: AssetKey, encoding: string): string; + /** + * Similar to `sea.getAsset()`, but returns the result in a [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob). + * An error is thrown when no matching asset can be found. + * @since v20.12.0 + */ + function getAssetAsBlob(key: AssetKey, options?: { + type: string; + }): Blob; + /** + * This method can be used to retrieve the assets configured to be bundled into the + * single-executable application at build time. + * An error is thrown when no matching asset can be found. + * + * Unlike `sea.getRawAsset()` or `sea.getAssetAsBlob()`, this method does not + * return a copy. Instead, it returns the raw asset bundled inside the executable. + * + * For now, users should avoid writing to the returned array buffer. If the + * injected section is not marked as writable or not aligned properly, + * writes to the returned array buffer is likely to result in a crash. + * @since v20.12.0 + */ + function getRawAsset(key: AssetKey): ArrayBuffer; + /** + * This method can be used to retrieve an array of all the keys of assets + * embedded into the single-executable application. + * An error is thrown when not running inside a single-executable application. + * @since v24.8.0 + * @returns An array containing all the keys of the assets + * embedded in the executable. If no assets are embedded, returns an empty array. + */ + function getAssetKeys(): string[]; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/sqlite.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/sqlite.d.ts new file mode 100644 index 00000000..d10855b0 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/sqlite.d.ts @@ -0,0 +1,830 @@ +/** + * The `node:sqlite` module facilitates working with SQLite databases. + * To access it: + * + * ```js + * import sqlite from 'node:sqlite'; + * ``` + * + * This module is only available under the `node:` scheme. The following will not + * work: + * + * ```js + * import sqlite from 'sqlite'; + * ``` + * + * The following example shows the basic usage of the `node:sqlite` module to open + * an in-memory database, write data to the database, and then read the data back. + * + * ```js + * import { DatabaseSync } from 'node:sqlite'; + * const database = new DatabaseSync(':memory:'); + * + * // Execute SQL statements from strings. + * database.exec(` + * CREATE TABLE data( + * key INTEGER PRIMARY KEY, + * value TEXT + * ) STRICT + * `); + * // Create a prepared statement to insert data into the database. + * const insert = database.prepare('INSERT INTO data (key, value) VALUES (?, ?)'); + * // Execute the prepared statement with bound values. + * insert.run(1, 'hello'); + * insert.run(2, 'world'); + * // Create a prepared statement to read data from the database. + * const query = database.prepare('SELECT * FROM data ORDER BY key'); + * // Execute the prepared statement and log the result set. + * console.log(query.all()); + * // Prints: [ { key: 1, value: 'hello' }, { key: 2, value: 'world' } ] + * ``` + * @since v22.5.0 + * @experimental + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/sqlite.js) + */ +declare module "node:sqlite" { + import { PathLike } from "node:fs"; + type SQLInputValue = null | number | bigint | string | NodeJS.ArrayBufferView; + type SQLOutputValue = null | number | bigint | string | NodeJS.NonSharedUint8Array; + interface DatabaseSyncOptions { + /** + * If `true`, the database is opened by the constructor. When + * this value is `false`, the database must be opened via the `open()` method. + * @since v22.5.0 + * @default true + */ + open?: boolean | undefined; + /** + * If `true`, foreign key constraints + * are enabled. This is recommended but can be disabled for compatibility with + * legacy database schemas. The enforcement of foreign key constraints can be + * enabled and disabled after opening the database using + * [`PRAGMA foreign_keys`](https://www.sqlite.org/pragma.html#pragma_foreign_keys). + * @since v22.10.0 + * @default true + */ + enableForeignKeyConstraints?: boolean | undefined; + /** + * If `true`, SQLite will accept + * [double-quoted string literals](https://www.sqlite.org/quirks.html#dblquote). + * This is not recommended but can be + * enabled for compatibility with legacy database schemas. + * @since v22.10.0 + * @default false + */ + enableDoubleQuotedStringLiterals?: boolean | undefined; + /** + * If `true`, the database is opened in read-only mode. + * If the database does not exist, opening it will fail. + * @since v22.12.0 + * @default false + */ + readOnly?: boolean | undefined; + /** + * If `true`, the `loadExtension` SQL function + * and the `loadExtension()` method are enabled. + * You can call `enableLoadExtension(false)` later to disable this feature. + * @since v22.13.0 + * @default false + */ + allowExtension?: boolean | undefined; + /** + * The [busy timeout](https://sqlite.org/c3ref/busy_timeout.html) in milliseconds. This is the maximum amount of + * time that SQLite will wait for a database lock to be released before + * returning an error. + * @since v24.0.0 + * @default 0 + */ + timeout?: number | undefined; + /** + * If `true`, integer fields are read as JavaScript `BigInt` values. If `false`, + * integer fields are read as JavaScript numbers. + * @since v24.4.0 + * @default false + */ + readBigInts?: boolean | undefined; + /** + * If `true`, query results are returned as arrays instead of objects. + * @since v24.4.0 + * @default false + */ + returnArrays?: boolean | undefined; + /** + * If `true`, allows binding named parameters without the prefix + * character (e.g., `foo` instead of `:foo`). + * @since v24.4.40 + * @default true + */ + allowBareNamedParameters?: boolean | undefined; + /** + * If `true`, unknown named parameters are ignored when binding. + * If `false`, an exception is thrown for unknown named parameters. + * @since v24.4.40 + * @default false + */ + allowUnknownNamedParameters?: boolean | undefined; + } + interface CreateSessionOptions { + /** + * A specific table to track changes for. By default, changes to all tables are tracked. + * @since v22.12.0 + */ + table?: string | undefined; + /** + * Name of the database to track. This is useful when multiple databases have been added using + * [`ATTACH DATABASE`](https://www.sqlite.org/lang_attach.html). + * @since v22.12.0 + * @default 'main' + */ + db?: string | undefined; + } + interface ApplyChangesetOptions { + /** + * Skip changes that, when targeted table name is supplied to this function, return a truthy value. + * By default, all changes are attempted. + * @since v22.12.0 + */ + filter?: ((tableName: string) => boolean) | undefined; + /** + * A function that determines how to handle conflicts. The function receives one argument, + * which can be one of the following values: + * + * * `SQLITE_CHANGESET_DATA`: A `DELETE` or `UPDATE` change does not contain the expected "before" values. + * * `SQLITE_CHANGESET_NOTFOUND`: A row matching the primary key of the `DELETE` or `UPDATE` change does not exist. + * * `SQLITE_CHANGESET_CONFLICT`: An `INSERT` change results in a duplicate primary key. + * * `SQLITE_CHANGESET_FOREIGN_KEY`: Applying a change would result in a foreign key violation. + * * `SQLITE_CHANGESET_CONSTRAINT`: Applying a change results in a `UNIQUE`, `CHECK`, or `NOT NULL` constraint + * violation. + * + * The function should return one of the following values: + * + * * `SQLITE_CHANGESET_OMIT`: Omit conflicting changes. + * * `SQLITE_CHANGESET_REPLACE`: Replace existing values with conflicting changes (only valid with + `SQLITE_CHANGESET_DATA` or `SQLITE_CHANGESET_CONFLICT` conflicts). + * * `SQLITE_CHANGESET_ABORT`: Abort on conflict and roll back the database. + * + * When an error is thrown in the conflict handler or when any other value is returned from the handler, + * applying the changeset is aborted and the database is rolled back. + * + * **Default**: A function that returns `SQLITE_CHANGESET_ABORT`. + * @since v22.12.0 + */ + onConflict?: ((conflictType: number) => number) | undefined; + } + interface FunctionOptions { + /** + * If `true`, the [`SQLITE_DETERMINISTIC`](https://www.sqlite.org/c3ref/c_deterministic.html) flag is + * set on the created function. + * @default false + */ + deterministic?: boolean | undefined; + /** + * If `true`, the [`SQLITE_DIRECTONLY`](https://www.sqlite.org/c3ref/c_directonly.html) flag is set on + * the created function. + * @default false + */ + directOnly?: boolean | undefined; + /** + * If `true`, integer arguments to `function` + * are converted to `BigInt`s. If `false`, integer arguments are passed as + * JavaScript numbers. + * @default false + */ + useBigIntArguments?: boolean | undefined; + /** + * If `true`, `function` may be invoked with any number of + * arguments (between zero and + * [`SQLITE_MAX_FUNCTION_ARG`](https://www.sqlite.org/limits.html#max_function_arg)). If `false`, + * `function` must be invoked with exactly `function.length` arguments. + * @default false + */ + varargs?: boolean | undefined; + } + interface AggregateOptions extends FunctionOptions { + /** + * The identity value for the aggregation function. This value is used when the aggregation + * function is initialized. When a `Function` is passed the identity will be its return value. + */ + start: T | (() => T); + /** + * The function to call for each row in the aggregation. The + * function receives the current state and the row value. The return value of + * this function should be the new state. + */ + step: (accumulator: T, ...args: SQLOutputValue[]) => T; + /** + * The function to call to get the result of the + * aggregation. The function receives the final state and should return the + * result of the aggregation. + */ + result?: ((accumulator: T) => SQLInputValue) | undefined; + /** + * When this function is provided, the `aggregate` method will work as a window function. + * The function receives the current state and the dropped row value. The return value of this function should be the + * new state. + */ + inverse?: ((accumulator: T, ...args: SQLOutputValue[]) => T) | undefined; + } + /** + * This class represents a single [connection](https://www.sqlite.org/c3ref/sqlite3.html) to a SQLite database. All APIs + * exposed by this class execute synchronously. + * @since v22.5.0 + */ + class DatabaseSync implements Disposable { + /** + * Constructs a new `DatabaseSync` instance. + * @param path The path of the database. + * A SQLite database can be stored in a file or completely [in memory](https://www.sqlite.org/inmemorydb.html). + * To use a file-backed database, the path should be a file path. + * To use an in-memory database, the path should be the special name `':memory:'`. + * @param options Configuration options for the database connection. + */ + constructor(path: PathLike, options?: DatabaseSyncOptions); + /** + * Registers a new aggregate function with the SQLite database. This method is a wrapper around + * [`sqlite3_create_window_function()`](https://www.sqlite.org/c3ref/create_function.html). + * + * When used as a window function, the `result` function will be called multiple times. + * + * ```js + * import { DatabaseSync } from 'node:sqlite'; + * + * const db = new DatabaseSync(':memory:'); + * db.exec(` + * CREATE TABLE t3(x, y); + * INSERT INTO t3 VALUES ('a', 4), + * ('b', 5), + * ('c', 3), + * ('d', 8), + * ('e', 1); + * `); + * + * db.aggregate('sumint', { + * start: 0, + * step: (acc, value) => acc + value, + * }); + * + * db.prepare('SELECT sumint(y) as total FROM t3').get(); // { total: 21 } + * ``` + * @since v24.0.0 + * @param name The name of the SQLite function to create. + * @param options Function configuration settings. + */ + aggregate(name: string, options: AggregateOptions): void; + aggregate(name: string, options: AggregateOptions): void; + /** + * Closes the database connection. An exception is thrown if the database is not + * open. This method is a wrapper around [`sqlite3_close_v2()`](https://www.sqlite.org/c3ref/close.html). + * @since v22.5.0 + */ + close(): void; + /** + * Loads a shared library into the database connection. This method is a wrapper + * around [`sqlite3_load_extension()`](https://www.sqlite.org/c3ref/load_extension.html). It is required to enable the + * `allowExtension` option when constructing the `DatabaseSync` instance. + * @since v22.13.0 + * @param path The path to the shared library to load. + */ + loadExtension(path: string): void; + /** + * Enables or disables the `loadExtension` SQL function, and the `loadExtension()` + * method. When `allowExtension` is `false` when constructing, you cannot enable + * loading extensions for security reasons. + * @since v22.13.0 + * @param allow Whether to allow loading extensions. + */ + enableLoadExtension(allow: boolean): void; + /** + * This method is a wrapper around [`sqlite3_db_filename()`](https://sqlite.org/c3ref/db_filename.html) + * @since v24.0.0 + * @param dbName Name of the database. This can be `'main'` (the default primary database) or any other + * database that has been added with [`ATTACH DATABASE`](https://www.sqlite.org/lang_attach.html) **Default:** `'main'`. + * @returns The location of the database file. When using an in-memory database, + * this method returns null. + */ + location(dbName?: string): string | null; + /** + * This method allows one or more SQL statements to be executed without returning + * any results. This method is useful when executing SQL statements read from a + * file. This method is a wrapper around [`sqlite3_exec()`](https://www.sqlite.org/c3ref/exec.html). + * @since v22.5.0 + * @param sql A SQL string to execute. + */ + exec(sql: string): void; + /** + * This method is used to create SQLite user-defined functions. This method is a + * wrapper around [`sqlite3_create_function_v2()`](https://www.sqlite.org/c3ref/create_function.html). + * @since v22.13.0 + * @param name The name of the SQLite function to create. + * @param options Optional configuration settings for the function. + * @param func The JavaScript function to call when the SQLite + * function is invoked. The return value of this function should be a valid + * SQLite data type: see + * [Type conversion between JavaScript and SQLite](https://nodejs.org/docs/latest-v24.x/api/sqlite.html#type-conversion-between-javascript-and-sqlite). + * The result defaults to `NULL` if the return value is `undefined`. + */ + function( + name: string, + options: FunctionOptions, + func: (...args: SQLOutputValue[]) => SQLInputValue, + ): void; + function(name: string, func: (...args: SQLOutputValue[]) => SQLInputValue): void; + /** + * Whether the database is currently open or not. + * @since v22.15.0 + */ + readonly isOpen: boolean; + /** + * Whether the database is currently within a transaction. This method + * is a wrapper around [`sqlite3_get_autocommit()`](https://sqlite.org/c3ref/get_autocommit.html). + * @since v24.0.0 + */ + readonly isTransaction: boolean; + /** + * Opens the database specified in the `path` argument of the `DatabaseSync`constructor. This method should only be used when the database is not opened via + * the constructor. An exception is thrown if the database is already open. + * @since v22.5.0 + */ + open(): void; + /** + * Compiles a SQL statement into a [prepared statement](https://www.sqlite.org/c3ref/stmt.html). This method is a wrapper + * around [`sqlite3_prepare_v2()`](https://www.sqlite.org/c3ref/prepare.html). + * @since v22.5.0 + * @param sql A SQL string to compile to a prepared statement. + * @return The prepared statement. + */ + prepare(sql: string): StatementSync; + /** + * Creates a new `SQLTagStore`, which is an LRU (Least Recently Used) cache for + * storing prepared statements. This allows for the efficient reuse of prepared + * statements by tagging them with a unique identifier. + * + * When a tagged SQL literal is executed, the `SQLTagStore` checks if a prepared + * statement for that specific SQL string already exists in the cache. If it does, + * the cached statement is used. If not, a new prepared statement is created, + * executed, and then stored in the cache for future use. This mechanism helps to + * avoid the overhead of repeatedly parsing and preparing the same SQL statements. + * + * ```js + * import { DatabaseSync } from 'node:sqlite'; + * + * const db = new DatabaseSync(':memory:'); + * const sql = db.createSQLTagStore(); + * + * db.exec('CREATE TABLE users (id INT, name TEXT)'); + * + * // Using the 'run' method to insert data. + * // The tagged literal is used to identify the prepared statement. + * sql.run`INSERT INTO users VALUES (1, 'Alice')`; + * sql.run`INSERT INTO users VALUES (2, 'Bob')`; + * + * // Using the 'get' method to retrieve a single row. + * const id = 1; + * const user = sql.get`SELECT * FROM users WHERE id = ${id}`; + * console.log(user); // { id: 1, name: 'Alice' } + * + * // Using the 'all' method to retrieve all rows. + * const allUsers = sql.all`SELECT * FROM users ORDER BY id`; + * console.log(allUsers); + * // [ + * // { id: 1, name: 'Alice' }, + * // { id: 2, name: 'Bob' } + * // ] + * ``` + * @since v24.9.0 + * @returns A new SQL tag store for caching prepared statements. + */ + createTagStore(maxSize?: number): SQLTagStore; + /** + * Creates and attaches a session to the database. This method is a wrapper around + * [`sqlite3session_create()`](https://www.sqlite.org/session/sqlite3session_create.html) and + * [`sqlite3session_attach()`](https://www.sqlite.org/session/sqlite3session_attach.html). + * @param options The configuration options for the session. + * @returns A session handle. + * @since v22.12.0 + */ + createSession(options?: CreateSessionOptions): Session; + /** + * An exception is thrown if the database is not + * open. This method is a wrapper around + * [`sqlite3changeset_apply()`](https://www.sqlite.org/session/sqlite3changeset_apply.html). + * + * ```js + * const sourceDb = new DatabaseSync(':memory:'); + * const targetDb = new DatabaseSync(':memory:'); + * + * sourceDb.exec('CREATE TABLE data(key INTEGER PRIMARY KEY, value TEXT)'); + * targetDb.exec('CREATE TABLE data(key INTEGER PRIMARY KEY, value TEXT)'); + * + * const session = sourceDb.createSession(); + * + * const insert = sourceDb.prepare('INSERT INTO data (key, value) VALUES (?, ?)'); + * insert.run(1, 'hello'); + * insert.run(2, 'world'); + * + * const changeset = session.changeset(); + * targetDb.applyChangeset(changeset); + * // Now that the changeset has been applied, targetDb contains the same data as sourceDb. + * ``` + * @param changeset A binary changeset or patchset. + * @param options The configuration options for how the changes will be applied. + * @returns Whether the changeset was applied successfully without being aborted. + * @since v22.12.0 + */ + applyChangeset(changeset: Uint8Array, options?: ApplyChangesetOptions): boolean; + /** + * Closes the database connection. If the database connection is already closed + * then this is a no-op. + * @since v22.15.0 + */ + [Symbol.dispose](): void; + } + /** + * @since v22.12.0 + */ + interface Session { + /** + * Retrieves a changeset containing all changes since the changeset was created. Can be called multiple times. + * An exception is thrown if the database or the session is not open. This method is a wrapper around + * [`sqlite3session_changeset()`](https://www.sqlite.org/session/sqlite3session_changeset.html). + * @returns Binary changeset that can be applied to other databases. + * @since v22.12.0 + */ + changeset(): NodeJS.NonSharedUint8Array; + /** + * Similar to the method above, but generates a more compact patchset. See + * [Changesets and Patchsets](https://www.sqlite.org/sessionintro.html#changesets_and_patchsets) + * in the documentation of SQLite. An exception is thrown if the database or the session is not open. This method is a + * wrapper around + * [`sqlite3session_patchset()`](https://www.sqlite.org/session/sqlite3session_patchset.html). + * @returns Binary patchset that can be applied to other databases. + * @since v22.12.0 + */ + patchset(): NodeJS.NonSharedUint8Array; + /** + * Closes the session. An exception is thrown if the database or the session is not open. This method is a + * wrapper around + * [`sqlite3session_delete()`](https://www.sqlite.org/session/sqlite3session_delete.html). + */ + close(): void; + } + /** + * This class represents a single LRU (Least Recently Used) cache for storing + * prepared statements. + * + * Instances of this class are created via the database.createSQLTagStore() method, + * not by using a constructor. The store caches prepared statements based on the + * provided SQL query string. When the same query is seen again, the store + * retrieves the cached statement and safely applies the new values through + * parameter binding, thereby preventing attacks like SQL injection. + * + * The cache has a maxSize that defaults to 1000 statements, but a custom size can + * be provided (e.g., database.createSQLTagStore(100)). All APIs exposed by this + * class execute synchronously. + * @since v24.9.0 + */ + interface SQLTagStore { + /** + * Executes the given SQL query and returns all resulting rows as an array of objects. + * @since v24.9.0 + */ + all( + stringElements: TemplateStringsArray, + ...boundParameters: SQLInputValue[] + ): Record[]; + /** + * Executes the given SQL query and returns the first resulting row as an object. + * @since v24.9.0 + */ + get( + stringElements: TemplateStringsArray, + ...boundParameters: SQLInputValue[] + ): Record | undefined; + /** + * Executes the given SQL query and returns an iterator over the resulting rows. + * @since v24.9.0 + */ + iterate( + stringElements: TemplateStringsArray, + ...boundParameters: SQLInputValue[] + ): NodeJS.Iterator>; + /** + * Executes the given SQL query, which is expected to not return any rows (e.g., INSERT, UPDATE, DELETE). + * @since v24.9.0 + */ + run(stringElements: TemplateStringsArray, ...boundParameters: SQLInputValue[]): StatementResultingChanges; + /** + * A read-only property that returns the number of prepared statements currently in the cache. + * @since v24.9.0 + * @returns The maximum number of prepared statements the cache can hold. + */ + size(): number; + /** + * A read-only property that returns the maximum number of prepared statements the cache can hold. + * @since v24.9.0 + */ + readonly capacity: number; + /** + * A read-only property that returns the `DatabaseSync` object associated with this `SQLTagStore`. + * @since v24.9.0 + */ + readonly db: DatabaseSync; + /** + * Resets the LRU cache, clearing all stored prepared statements. + * @since v24.9.0 + */ + clear(): void; + } + interface StatementColumnMetadata { + /** + * The unaliased name of the column in the origin + * table, or `null` if the column is the result of an expression or subquery. + * This property is the result of [`sqlite3_column_origin_name()`](https://www.sqlite.org/c3ref/column_database_name.html). + */ + column: string | null; + /** + * The unaliased name of the origin database, or + * `null` if the column is the result of an expression or subquery. This + * property is the result of [`sqlite3_column_database_name()`](https://www.sqlite.org/c3ref/column_database_name.html). + */ + database: string | null; + /** + * The name assigned to the column in the result set of a + * `SELECT` statement. This property is the result of + * [`sqlite3_column_name()`](https://www.sqlite.org/c3ref/column_name.html). + */ + name: string; + /** + * The unaliased name of the origin table, or `null` if + * the column is the result of an expression or subquery. This property is the + * result of [`sqlite3_column_table_name()`](https://www.sqlite.org/c3ref/column_database_name.html). + */ + table: string | null; + /** + * The declared data type of the column, or `null` if the + * column is the result of an expression or subquery. This property is the + * result of [`sqlite3_column_decltype()`](https://www.sqlite.org/c3ref/column_decltype.html). + */ + type: string | null; + } + interface StatementResultingChanges { + /** + * The number of rows modified, inserted, or deleted by the most recently completed `INSERT`, `UPDATE`, or `DELETE` statement. + * This field is either a number or a `BigInt` depending on the prepared statement's configuration. + * This property is the result of [`sqlite3_changes64()`](https://www.sqlite.org/c3ref/changes.html). + */ + changes: number | bigint; + /** + * The most recently inserted rowid. + * This field is either a number or a `BigInt` depending on the prepared statement's configuration. + * This property is the result of [`sqlite3_last_insert_rowid()`](https://www.sqlite.org/c3ref/last_insert_rowid.html). + */ + lastInsertRowid: number | bigint; + } + /** + * This class represents a single [prepared statement](https://www.sqlite.org/c3ref/stmt.html). This class cannot be + * instantiated via its constructor. Instead, instances are created via the`database.prepare()` method. All APIs exposed by this class execute + * synchronously. + * + * A prepared statement is an efficient binary representation of the SQL used to + * create it. Prepared statements are parameterizable, and can be invoked multiple + * times with different bound values. Parameters also offer protection against [SQL injection](https://en.wikipedia.org/wiki/SQL_injection) attacks. For these reasons, prepared statements are + * preferred + * over hand-crafted SQL strings when handling user input. + * @since v22.5.0 + */ + class StatementSync { + private constructor(); + /** + * This method executes a prepared statement and returns all results as an array of + * objects. If the prepared statement does not return any results, this method + * returns an empty array. The prepared statement [parameters are bound](https://www.sqlite.org/c3ref/bind_blob.html) using + * the values in `namedParameters` and `anonymousParameters`. + * @since v22.5.0 + * @param namedParameters An optional object used to bind named parameters. The keys of this object are used to configure the mapping. + * @param anonymousParameters Zero or more values to bind to anonymous parameters. + * @return An array of objects. Each object corresponds to a row returned by executing the prepared statement. The keys and values of each object correspond to the column names and values of + * the row. + */ + all(...anonymousParameters: SQLInputValue[]): Record[]; + all( + namedParameters: Record, + ...anonymousParameters: SQLInputValue[] + ): Record[]; + /** + * This method is used to retrieve information about the columns returned by the + * prepared statement. + * @since v23.11.0 + * @returns An array of objects. Each object corresponds to a column + * in the prepared statement, and contains the following properties: + */ + columns(): StatementColumnMetadata[]; + /** + * The source SQL text of the prepared statement with parameter + * placeholders replaced by the values that were used during the most recent + * execution of this prepared statement. This property is a wrapper around + * [`sqlite3_expanded_sql()`](https://www.sqlite.org/c3ref/expanded_sql.html). + * @since v22.5.0 + */ + readonly expandedSQL: string; + /** + * This method executes a prepared statement and returns the first result as an + * object. If the prepared statement does not return any results, this method + * returns `undefined`. The prepared statement [parameters are bound](https://www.sqlite.org/c3ref/bind_blob.html) using the + * values in `namedParameters` and `anonymousParameters`. + * @since v22.5.0 + * @param namedParameters An optional object used to bind named parameters. The keys of this object are used to configure the mapping. + * @param anonymousParameters Zero or more values to bind to anonymous parameters. + * @return An object corresponding to the first row returned by executing the prepared statement. The keys and values of the object correspond to the column names and values of the row. If no + * rows were returned from the database then this method returns `undefined`. + */ + get(...anonymousParameters: SQLInputValue[]): Record | undefined; + get( + namedParameters: Record, + ...anonymousParameters: SQLInputValue[] + ): Record | undefined; + /** + * This method executes a prepared statement and returns an iterator of + * objects. If the prepared statement does not return any results, this method + * returns an empty iterator. The prepared statement [parameters are bound](https://www.sqlite.org/c3ref/bind_blob.html) using + * the values in `namedParameters` and `anonymousParameters`. + * @since v22.13.0 + * @param namedParameters An optional object used to bind named parameters. + * The keys of this object are used to configure the mapping. + * @param anonymousParameters Zero or more values to bind to anonymous parameters. + * @returns An iterable iterator of objects. Each object corresponds to a row + * returned by executing the prepared statement. The keys and values of each + * object correspond to the column names and values of the row. + */ + iterate(...anonymousParameters: SQLInputValue[]): NodeJS.Iterator>; + iterate( + namedParameters: Record, + ...anonymousParameters: SQLInputValue[] + ): NodeJS.Iterator>; + /** + * This method executes a prepared statement and returns an object summarizing the + * resulting changes. The prepared statement [parameters are bound](https://www.sqlite.org/c3ref/bind_blob.html) using the + * values in `namedParameters` and `anonymousParameters`. + * @since v22.5.0 + * @param namedParameters An optional object used to bind named parameters. The keys of this object are used to configure the mapping. + * @param anonymousParameters Zero or more values to bind to anonymous parameters. + */ + run(...anonymousParameters: SQLInputValue[]): StatementResultingChanges; + run( + namedParameters: Record, + ...anonymousParameters: SQLInputValue[] + ): StatementResultingChanges; + /** + * The names of SQLite parameters begin with a prefix character. By default,`node:sqlite` requires that this prefix character is present when binding + * parameters. However, with the exception of dollar sign character, these + * prefix characters also require extra quoting when used in object keys. + * + * To improve ergonomics, this method can be used to also allow bare named + * parameters, which do not require the prefix character in JavaScript code. There + * are several caveats to be aware of when enabling bare named parameters: + * + * * The prefix character is still required in SQL. + * * The prefix character is still allowed in JavaScript. In fact, prefixed names + * will have slightly better binding performance. + * * Using ambiguous named parameters, such as `$k` and `@k`, in the same prepared + * statement will result in an exception as it cannot be determined how to bind + * a bare name. + * @since v22.5.0 + * @param enabled Enables or disables support for binding named parameters without the prefix character. + */ + setAllowBareNamedParameters(enabled: boolean): void; + /** + * By default, if an unknown name is encountered while binding parameters, an + * exception is thrown. This method allows unknown named parameters to be ignored. + * @since v22.15.0 + * @param enabled Enables or disables support for unknown named parameters. + */ + setAllowUnknownNamedParameters(enabled: boolean): void; + /** + * When enabled, query results returned by the `all()`, `get()`, and `iterate()` methods will be returned as arrays instead + * of objects. + * @since v24.0.0 + * @param enabled Enables or disables the return of query results as arrays. + */ + setReturnArrays(enabled: boolean): void; + /** + * When reading from the database, SQLite `INTEGER`s are mapped to JavaScript + * numbers by default. However, SQLite `INTEGER`s can store values larger than + * JavaScript numbers are capable of representing. In such cases, this method can + * be used to read `INTEGER` data using JavaScript `BigInt`s. This method has no + * impact on database write operations where numbers and `BigInt`s are both + * supported at all times. + * @since v22.5.0 + * @param enabled Enables or disables the use of `BigInt`s when reading `INTEGER` fields from the database. + */ + setReadBigInts(enabled: boolean): void; + /** + * The source SQL text of the prepared statement. This property is a + * wrapper around [`sqlite3_sql()`](https://www.sqlite.org/c3ref/expanded_sql.html). + * @since v22.5.0 + */ + readonly sourceSQL: string; + } + interface BackupOptions { + /** + * Name of the source database. This can be `'main'` (the default primary database) or any other + * database that have been added with [`ATTACH DATABASE`](https://www.sqlite.org/lang_attach.html) + * @default 'main' + */ + source?: string | undefined; + /** + * Name of the target database. This can be `'main'` (the default primary database) or any other + * database that have been added with [`ATTACH DATABASE`](https://www.sqlite.org/lang_attach.html) + * @default 'main' + */ + target?: string | undefined; + /** + * Number of pages to be transmitted in each batch of the backup. + * @default 100 + */ + rate?: number | undefined; + /** + * An optional callback function that will be called after each backup step. The argument passed + * to this callback is an `Object` with `remainingPages` and `totalPages` properties, describing the current progress + * of the backup operation. + */ + progress?: ((progressInfo: BackupProgressInfo) => void) | undefined; + } + interface BackupProgressInfo { + totalPages: number; + remainingPages: number; + } + /** + * This method makes a database backup. This method abstracts the + * [`sqlite3_backup_init()`](https://www.sqlite.org/c3ref/backup_finish.html#sqlite3backupinit), + * [`sqlite3_backup_step()`](https://www.sqlite.org/c3ref/backup_finish.html#sqlite3backupstep) + * and [`sqlite3_backup_finish()`](https://www.sqlite.org/c3ref/backup_finish.html#sqlite3backupfinish) functions. + * + * The backed-up database can be used normally during the backup process. Mutations coming from the same connection - same + * `DatabaseSync` - object will be reflected in the backup right away. However, mutations from other connections will cause + * the backup process to restart. + * + * ```js + * import { backup, DatabaseSync } from 'node:sqlite'; + * + * const sourceDb = new DatabaseSync('source.db'); + * const totalPagesTransferred = await backup(sourceDb, 'backup.db', { + * rate: 1, // Copy one page at a time. + * progress: ({ totalPages, remainingPages }) => { + * console.log('Backup in progress', { totalPages, remainingPages }); + * }, + * }); + * + * console.log('Backup completed', totalPagesTransferred); + * ``` + * @since v23.8.0 + * @param sourceDb The database to backup. The source database must be open. + * @param path The path where the backup will be created. If the file already exists, + * the contents will be overwritten. + * @param options Optional configuration for the backup. The + * following properties are supported: + * @returns A promise that fulfills with the total number of backed-up pages upon completion, or rejects if an + * error occurs. + */ + function backup(sourceDb: DatabaseSync, path: PathLike, options?: BackupOptions): Promise; + /** + * @since v22.13.0 + */ + namespace constants { + /** + * The conflict handler is invoked with this constant when processing a DELETE or UPDATE change if a row with the required PRIMARY KEY fields is present in the database, but one or more other (non primary-key) fields modified by the update do not contain the expected "before" values. + * @since v22.14.0 + */ + const SQLITE_CHANGESET_DATA: number; + /** + * The conflict handler is invoked with this constant when processing a DELETE or UPDATE change if a row with the required PRIMARY KEY fields is not present in the database. + * @since v22.14.0 + */ + const SQLITE_CHANGESET_NOTFOUND: number; + /** + * This constant is passed to the conflict handler while processing an INSERT change if the operation would result in duplicate primary key values. + * @since v22.14.0 + */ + const SQLITE_CHANGESET_CONFLICT: number; + /** + * If foreign key handling is enabled, and applying a changeset leaves the database in a state containing foreign key violations, the conflict handler is invoked with this constant exactly once before the changeset is committed. If the conflict handler returns `SQLITE_CHANGESET_OMIT`, the changes, including those that caused the foreign key constraint violation, are committed. Or, if it returns `SQLITE_CHANGESET_ABORT`, the changeset is rolled back. + * @since v22.14.0 + */ + const SQLITE_CHANGESET_FOREIGN_KEY: number; + /** + * Conflicting changes are omitted. + * @since v22.12.0 + */ + const SQLITE_CHANGESET_OMIT: number; + /** + * Conflicting changes replace existing values. Note that this value can only be returned when the type of conflict is either `SQLITE_CHANGESET_DATA` or `SQLITE_CHANGESET_CONFLICT`. + * @since v22.12.0 + */ + const SQLITE_CHANGESET_REPLACE: number; + /** + * Abort when a change encounters a conflict and roll back database. + * @since v22.12.0 + */ + const SQLITE_CHANGESET_ABORT: number; + } +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/stream.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/stream.d.ts new file mode 100644 index 00000000..3b38302b --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/stream.d.ts @@ -0,0 +1,1683 @@ +/** + * A stream is an abstract interface for working with streaming data in Node.js. + * The `node:stream` module provides an API for implementing the stream interface. + * + * There are many stream objects provided by Node.js. For instance, a [request to an HTTP server](https://nodejs.org/docs/latest-v24.x/api/http.html#class-httpincomingmessage) + * and [`process.stdout`](https://nodejs.org/docs/latest-v24.x/api/process.html#processstdout) are both stream instances. + * + * Streams can be readable, writable, or both. All streams are instances of [`EventEmitter`](https://nodejs.org/docs/latest-v24.x/api/events.html#class-eventemitter). + * + * To access the `node:stream` module: + * + * ```js + * import stream from 'node:stream'; + * ``` + * + * The `node:stream` module is useful for creating new types of stream instances. + * It is usually not necessary to use the `node:stream` module to consume streams. + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/stream.js) + */ +declare module "stream" { + import { Abortable, EventEmitter } from "node:events"; + import { Blob as NodeBlob } from "node:buffer"; + import * as streamPromises from "node:stream/promises"; + import * as streamWeb from "node:stream/web"; + + type ComposeFnParam = (source: any) => void; + + class Stream extends EventEmitter { + pipe( + destination: T, + options?: { + end?: boolean | undefined; + }, + ): T; + compose( + stream: T | ComposeFnParam | Iterable | AsyncIterable, + options?: { signal: AbortSignal }, + ): T; + } + namespace Stream { + export { Stream, streamPromises as promises }; + } + namespace Stream { + interface StreamOptions extends Abortable { + emitClose?: boolean | undefined; + highWaterMark?: number | undefined; + objectMode?: boolean | undefined; + construct?: ((this: T, callback: (error?: Error | null) => void) => void) | undefined; + destroy?: ((this: T, error: Error | null, callback: (error?: Error | null) => void) => void) | undefined; + autoDestroy?: boolean | undefined; + } + interface ReadableOptions extends StreamOptions { + encoding?: BufferEncoding | undefined; + read?: ((this: T, size: number) => void) | undefined; + } + interface ArrayOptions { + /** + * The maximum concurrent invocations of `fn` to call on the stream at once. + * @default 1 + */ + concurrency?: number | undefined; + /** Allows destroying the stream if the signal is aborted. */ + signal?: AbortSignal | undefined; + } + /** + * @since v0.9.4 + */ + class Readable extends Stream implements NodeJS.ReadableStream { + /** + * A utility method for creating Readable Streams out of iterators. + * @since v12.3.0, v10.17.0 + * @param iterable Object implementing the `Symbol.asyncIterator` or `Symbol.iterator` iterable protocol. Emits an 'error' event if a null value is passed. + * @param options Options provided to `new stream.Readable([options])`. By default, `Readable.from()` will set `options.objectMode` to `true`, unless this is explicitly opted out by setting `options.objectMode` to `false`. + */ + static from(iterable: Iterable | AsyncIterable, options?: ReadableOptions): Readable; + /** + * A utility method for creating a `Readable` from a web `ReadableStream`. + * @since v17.0.0 + */ + static fromWeb( + readableStream: streamWeb.ReadableStream, + options?: Pick, + ): Readable; + /** + * A utility method for creating a web `ReadableStream` from a `Readable`. + * @since v17.0.0 + */ + static toWeb( + streamReadable: Readable, + options?: { + strategy?: streamWeb.QueuingStrategy | undefined; + }, + ): streamWeb.ReadableStream; + /** + * Returns whether the stream has been read from or cancelled. + * @since v16.8.0 + */ + static isDisturbed(stream: Readable | NodeJS.ReadableStream): boolean; + /** + * Returns whether the stream was destroyed or errored before emitting `'end'`. + * @since v16.8.0 + */ + readonly readableAborted: boolean; + /** + * Is `true` if it is safe to call {@link read}, which means + * the stream has not been destroyed or emitted `'error'` or `'end'`. + * @since v11.4.0 + */ + readable: boolean; + /** + * Returns whether `'data'` has been emitted. + * @since v16.7.0, v14.18.0 + */ + readonly readableDidRead: boolean; + /** + * Getter for the property `encoding` of a given `Readable` stream. The `encoding` property can be set using the {@link setEncoding} method. + * @since v12.7.0 + */ + readonly readableEncoding: BufferEncoding | null; + /** + * Becomes `true` when [`'end'`](https://nodejs.org/docs/latest-v24.x/api/stream.html#event-end) event is emitted. + * @since v12.9.0 + */ + readonly readableEnded: boolean; + /** + * This property reflects the current state of a `Readable` stream as described + * in the [Three states](https://nodejs.org/docs/latest-v24.x/api/stream.html#three-states) section. + * @since v9.4.0 + */ + readonly readableFlowing: boolean | null; + /** + * Returns the value of `highWaterMark` passed when creating this `Readable`. + * @since v9.3.0 + */ + readonly readableHighWaterMark: number; + /** + * This property contains the number of bytes (or objects) in the queue + * ready to be read. The value provides introspection data regarding + * the status of the `highWaterMark`. + * @since v9.4.0 + */ + readonly readableLength: number; + /** + * Getter for the property `objectMode` of a given `Readable` stream. + * @since v12.3.0 + */ + readonly readableObjectMode: boolean; + /** + * Is `true` after `readable.destroy()` has been called. + * @since v8.0.0 + */ + destroyed: boolean; + /** + * Is `true` after `'close'` has been emitted. + * @since v18.0.0 + */ + readonly closed: boolean; + /** + * Returns error if the stream has been destroyed with an error. + * @since v18.0.0 + */ + readonly errored: Error | null; + constructor(opts?: ReadableOptions); + _construct?(callback: (error?: Error | null) => void): void; + _read(size: number): void; + /** + * The `readable.read()` method reads data out of the internal buffer and + * returns it. If no data is available to be read, `null` is returned. By default, + * the data is returned as a `Buffer` object unless an encoding has been + * specified using the `readable.setEncoding()` method or the stream is operating + * in object mode. + * + * The optional `size` argument specifies a specific number of bytes to read. If + * `size` bytes are not available to be read, `null` will be returned _unless_ the + * stream has ended, in which case all of the data remaining in the internal buffer + * will be returned. + * + * If the `size` argument is not specified, all of the data contained in the + * internal buffer will be returned. + * + * The `size` argument must be less than or equal to 1 GiB. + * + * The `readable.read()` method should only be called on `Readable` streams + * operating in paused mode. In flowing mode, `readable.read()` is called + * automatically until the internal buffer is fully drained. + * + * ```js + * const readable = getReadableStreamSomehow(); + * + * // 'readable' may be triggered multiple times as data is buffered in + * readable.on('readable', () => { + * let chunk; + * console.log('Stream is readable (new data received in buffer)'); + * // Use a loop to make sure we read all currently available data + * while (null !== (chunk = readable.read())) { + * console.log(`Read ${chunk.length} bytes of data...`); + * } + * }); + * + * // 'end' will be triggered once when there is no more data available + * readable.on('end', () => { + * console.log('Reached end of stream.'); + * }); + * ``` + * + * Each call to `readable.read()` returns a chunk of data, or `null`. The chunks + * are not concatenated. A `while` loop is necessary to consume all data + * currently in the buffer. When reading a large file `.read()` may return `null`, + * having consumed all buffered content so far, but there is still more data to + * come not yet buffered. In this case a new `'readable'` event will be emitted + * when there is more data in the buffer. Finally the `'end'` event will be + * emitted when there is no more data to come. + * + * Therefore to read a file's whole contents from a `readable`, it is necessary + * to collect chunks across multiple `'readable'` events: + * + * ```js + * const chunks = []; + * + * readable.on('readable', () => { + * let chunk; + * while (null !== (chunk = readable.read())) { + * chunks.push(chunk); + * } + * }); + * + * readable.on('end', () => { + * const content = chunks.join(''); + * }); + * ``` + * + * A `Readable` stream in object mode will always return a single item from + * a call to `readable.read(size)`, regardless of the value of the `size` argument. + * + * If the `readable.read()` method returns a chunk of data, a `'data'` event will + * also be emitted. + * + * Calling {@link read} after the `'end'` event has + * been emitted will return `null`. No runtime error will be raised. + * @since v0.9.4 + * @param size Optional argument to specify how much data to read. + */ + read(size?: number): any; + /** + * The `readable.setEncoding()` method sets the character encoding for + * data read from the `Readable` stream. + * + * By default, no encoding is assigned and stream data will be returned as `Buffer` objects. Setting an encoding causes the stream data + * to be returned as strings of the specified encoding rather than as `Buffer` objects. For instance, calling `readable.setEncoding('utf8')` will cause the + * output data to be interpreted as UTF-8 data, and passed as strings. Calling `readable.setEncoding('hex')` will cause the data to be encoded in hexadecimal + * string format. + * + * The `Readable` stream will properly handle multi-byte characters delivered + * through the stream that would otherwise become improperly decoded if simply + * pulled from the stream as `Buffer` objects. + * + * ```js + * const readable = getReadableStreamSomehow(); + * readable.setEncoding('utf8'); + * readable.on('data', (chunk) => { + * assert.equal(typeof chunk, 'string'); + * console.log('Got %d characters of string data:', chunk.length); + * }); + * ``` + * @since v0.9.4 + * @param encoding The encoding to use. + */ + setEncoding(encoding: BufferEncoding): this; + /** + * The `readable.pause()` method will cause a stream in flowing mode to stop + * emitting `'data'` events, switching out of flowing mode. Any data that + * becomes available will remain in the internal buffer. + * + * ```js + * const readable = getReadableStreamSomehow(); + * readable.on('data', (chunk) => { + * console.log(`Received ${chunk.length} bytes of data.`); + * readable.pause(); + * console.log('There will be no additional data for 1 second.'); + * setTimeout(() => { + * console.log('Now data will start flowing again.'); + * readable.resume(); + * }, 1000); + * }); + * ``` + * + * The `readable.pause()` method has no effect if there is a `'readable'` event listener. + * @since v0.9.4 + */ + pause(): this; + /** + * The `readable.resume()` method causes an explicitly paused `Readable` stream to + * resume emitting `'data'` events, switching the stream into flowing mode. + * + * The `readable.resume()` method can be used to fully consume the data from a + * stream without actually processing any of that data: + * + * ```js + * getReadableStreamSomehow() + * .resume() + * .on('end', () => { + * console.log('Reached the end, but did not read anything.'); + * }); + * ``` + * + * The `readable.resume()` method has no effect if there is a `'readable'` event listener. + * @since v0.9.4 + */ + resume(): this; + /** + * The `readable.isPaused()` method returns the current operating state of the `Readable`. + * This is used primarily by the mechanism that underlies the `readable.pipe()` method. + * In most typical cases, there will be no reason to use this method directly. + * + * ```js + * const readable = new stream.Readable(); + * + * readable.isPaused(); // === false + * readable.pause(); + * readable.isPaused(); // === true + * readable.resume(); + * readable.isPaused(); // === false + * ``` + * @since v0.11.14 + */ + isPaused(): boolean; + /** + * The `readable.unpipe()` method detaches a `Writable` stream previously attached + * using the {@link pipe} method. + * + * If the `destination` is not specified, then _all_ pipes are detached. + * + * If the `destination` is specified, but no pipe is set up for it, then + * the method does nothing. + * + * ```js + * import fs from 'node:fs'; + * const readable = getReadableStreamSomehow(); + * const writable = fs.createWriteStream('file.txt'); + * // All the data from readable goes into 'file.txt', + * // but only for the first second. + * readable.pipe(writable); + * setTimeout(() => { + * console.log('Stop writing to file.txt.'); + * readable.unpipe(writable); + * console.log('Manually close the file stream.'); + * writable.end(); + * }, 1000); + * ``` + * @since v0.9.4 + * @param destination Optional specific stream to unpipe + */ + unpipe(destination?: NodeJS.WritableStream): this; + /** + * Passing `chunk` as `null` signals the end of the stream (EOF) and behaves the + * same as `readable.push(null)`, after which no more data can be written. The EOF + * signal is put at the end of the buffer and any buffered data will still be + * flushed. + * + * The `readable.unshift()` method pushes a chunk of data back into the internal + * buffer. This is useful in certain situations where a stream is being consumed by + * code that needs to "un-consume" some amount of data that it has optimistically + * pulled out of the source, so that the data can be passed on to some other party. + * + * The `stream.unshift(chunk)` method cannot be called after the `'end'` event + * has been emitted or a runtime error will be thrown. + * + * Developers using `stream.unshift()` often should consider switching to + * use of a `Transform` stream instead. See the `API for stream implementers` section for more information. + * + * ```js + * // Pull off a header delimited by \n\n. + * // Use unshift() if we get too much. + * // Call the callback with (error, header, stream). + * import { StringDecoder } from 'node:string_decoder'; + * function parseHeader(stream, callback) { + * stream.on('error', callback); + * stream.on('readable', onReadable); + * const decoder = new StringDecoder('utf8'); + * let header = ''; + * function onReadable() { + * let chunk; + * while (null !== (chunk = stream.read())) { + * const str = decoder.write(chunk); + * if (str.includes('\n\n')) { + * // Found the header boundary. + * const split = str.split(/\n\n/); + * header += split.shift(); + * const remaining = split.join('\n\n'); + * const buf = Buffer.from(remaining, 'utf8'); + * stream.removeListener('error', callback); + * // Remove the 'readable' listener before unshifting. + * stream.removeListener('readable', onReadable); + * if (buf.length) + * stream.unshift(buf); + * // Now the body of the message can be read from the stream. + * callback(null, header, stream); + * return; + * } + * // Still reading the header. + * header += str; + * } + * } + * } + * ``` + * + * Unlike {@link push}, `stream.unshift(chunk)` will not + * end the reading process by resetting the internal reading state of the stream. + * This can cause unexpected results if `readable.unshift()` is called during a + * read (i.e. from within a {@link _read} implementation on a + * custom stream). Following the call to `readable.unshift()` with an immediate {@link push} will reset the reading state appropriately, + * however it is best to simply avoid calling `readable.unshift()` while in the + * process of performing a read. + * @since v0.9.11 + * @param chunk Chunk of data to unshift onto the read queue. For streams not operating in object mode, `chunk` must + * be a {string}, {Buffer}, {TypedArray}, {DataView} or `null`. For object mode streams, `chunk` may be any JavaScript value. + * @param encoding Encoding of string chunks. Must be a valid `Buffer` encoding, such as `'utf8'` or `'ascii'`. + */ + unshift(chunk: any, encoding?: BufferEncoding): void; + /** + * Prior to Node.js 0.10, streams did not implement the entire `node:stream` module API as it is currently defined. (See `Compatibility` for more + * information.) + * + * When using an older Node.js library that emits `'data'` events and has a {@link pause} method that is advisory only, the `readable.wrap()` method can be used to create a `Readable` + * stream that uses + * the old stream as its data source. + * + * It will rarely be necessary to use `readable.wrap()` but the method has been + * provided as a convenience for interacting with older Node.js applications and + * libraries. + * + * ```js + * import { OldReader } from './old-api-module.js'; + * import { Readable } from 'node:stream'; + * const oreader = new OldReader(); + * const myReader = new Readable().wrap(oreader); + * + * myReader.on('readable', () => { + * myReader.read(); // etc. + * }); + * ``` + * @since v0.9.4 + * @param stream An "old style" readable stream + */ + wrap(stream: NodeJS.ReadableStream): this; + push(chunk: any, encoding?: BufferEncoding): boolean; + /** + * The iterator created by this method gives users the option to cancel the destruction + * of the stream if the `for await...of` loop is exited by `return`, `break`, or `throw`, + * or if the iterator should destroy the stream if the stream emitted an error during iteration. + * @since v16.3.0 + * @param options.destroyOnReturn When set to `false`, calling `return` on the async iterator, + * or exiting a `for await...of` iteration using a `break`, `return`, or `throw` will not destroy the stream. + * **Default: `true`**. + */ + iterator(options?: { destroyOnReturn?: boolean }): NodeJS.AsyncIterator; + /** + * This method allows mapping over the stream. The *fn* function will be called for every chunk in the stream. + * If the *fn* function returns a promise - that promise will be `await`ed before being passed to the result stream. + * @since v17.4.0, v16.14.0 + * @param fn a function to map over every chunk in the stream. Async or not. + * @returns a stream mapped with the function *fn*. + */ + map(fn: (data: any, options?: Pick) => any, options?: ArrayOptions): Readable; + /** + * This method allows filtering the stream. For each chunk in the stream the *fn* function will be called + * and if it returns a truthy value, the chunk will be passed to the result stream. + * If the *fn* function returns a promise - that promise will be `await`ed. + * @since v17.4.0, v16.14.0 + * @param fn a function to filter chunks from the stream. Async or not. + * @returns a stream filtered with the predicate *fn*. + */ + filter( + fn: (data: any, options?: Pick) => boolean | Promise, + options?: ArrayOptions, + ): Readable; + /** + * This method allows iterating a stream. For each chunk in the stream the *fn* function will be called. + * If the *fn* function returns a promise - that promise will be `await`ed. + * + * This method is different from `for await...of` loops in that it can optionally process chunks concurrently. + * In addition, a `forEach` iteration can only be stopped by having passed a `signal` option + * and aborting the related AbortController while `for await...of` can be stopped with `break` or `return`. + * In either case the stream will be destroyed. + * + * This method is different from listening to the `'data'` event in that it uses the `readable` event + * in the underlying machinary and can limit the number of concurrent *fn* calls. + * @since v17.5.0 + * @param fn a function to call on each chunk of the stream. Async or not. + * @returns a promise for when the stream has finished. + */ + forEach( + fn: (data: any, options?: Pick) => void | Promise, + options?: ArrayOptions, + ): Promise; + /** + * This method allows easily obtaining the contents of a stream. + * + * As this method reads the entire stream into memory, it negates the benefits of streams. It's intended + * for interoperability and convenience, not as the primary way to consume streams. + * @since v17.5.0 + * @returns a promise containing an array with the contents of the stream. + */ + toArray(options?: Pick): Promise; + /** + * This method is similar to `Array.prototype.some` and calls *fn* on each chunk in the stream + * until the awaited return value is `true` (or any truthy value). Once an *fn* call on a chunk + * `await`ed return value is truthy, the stream is destroyed and the promise is fulfilled with `true`. + * If none of the *fn* calls on the chunks return a truthy value, the promise is fulfilled with `false`. + * @since v17.5.0 + * @param fn a function to call on each chunk of the stream. Async or not. + * @returns a promise evaluating to `true` if *fn* returned a truthy value for at least one of the chunks. + */ + some( + fn: (data: any, options?: Pick) => boolean | Promise, + options?: ArrayOptions, + ): Promise; + /** + * This method is similar to `Array.prototype.find` and calls *fn* on each chunk in the stream + * to find a chunk with a truthy value for *fn*. Once an *fn* call's awaited return value is truthy, + * the stream is destroyed and the promise is fulfilled with value for which *fn* returned a truthy value. + * If all of the *fn* calls on the chunks return a falsy value, the promise is fulfilled with `undefined`. + * @since v17.5.0 + * @param fn a function to call on each chunk of the stream. Async or not. + * @returns a promise evaluating to the first chunk for which *fn* evaluated with a truthy value, + * or `undefined` if no element was found. + */ + find( + fn: (data: any, options?: Pick) => data is T, + options?: ArrayOptions, + ): Promise; + find( + fn: (data: any, options?: Pick) => boolean | Promise, + options?: ArrayOptions, + ): Promise; + /** + * This method is similar to `Array.prototype.every` and calls *fn* on each chunk in the stream + * to check if all awaited return values are truthy value for *fn*. Once an *fn* call on a chunk + * `await`ed return value is falsy, the stream is destroyed and the promise is fulfilled with `false`. + * If all of the *fn* calls on the chunks return a truthy value, the promise is fulfilled with `true`. + * @since v17.5.0 + * @param fn a function to call on each chunk of the stream. Async or not. + * @returns a promise evaluating to `true` if *fn* returned a truthy value for every one of the chunks. + */ + every( + fn: (data: any, options?: Pick) => boolean | Promise, + options?: ArrayOptions, + ): Promise; + /** + * This method returns a new stream by applying the given callback to each chunk of the stream + * and then flattening the result. + * + * It is possible to return a stream or another iterable or async iterable from *fn* and the result streams + * will be merged (flattened) into the returned stream. + * @since v17.5.0 + * @param fn a function to map over every chunk in the stream. May be async. May be a stream or generator. + * @returns a stream flat-mapped with the function *fn*. + */ + flatMap(fn: (data: any, options?: Pick) => any, options?: ArrayOptions): Readable; + /** + * This method returns a new stream with the first *limit* chunks dropped from the start. + * @since v17.5.0 + * @param limit the number of chunks to drop from the readable. + * @returns a stream with *limit* chunks dropped from the start. + */ + drop(limit: number, options?: Pick): Readable; + /** + * This method returns a new stream with the first *limit* chunks. + * @since v17.5.0 + * @param limit the number of chunks to take from the readable. + * @returns a stream with *limit* chunks taken. + */ + take(limit: number, options?: Pick): Readable; + /** + * This method returns a new stream with chunks of the underlying stream paired with a counter + * in the form `[index, chunk]`. The first index value is `0` and it increases by 1 for each chunk produced. + * @since v17.5.0 + * @returns a stream of indexed pairs. + */ + asIndexedPairs(options?: Pick): Readable; + /** + * This method calls *fn* on each chunk of the stream in order, passing it the result from the calculation + * on the previous element. It returns a promise for the final value of the reduction. + * + * If no *initial* value is supplied the first chunk of the stream is used as the initial value. + * If the stream is empty, the promise is rejected with a `TypeError` with the `ERR_INVALID_ARGS` code property. + * + * The reducer function iterates the stream element-by-element which means that there is no *concurrency* parameter + * or parallelism. To perform a reduce concurrently, you can extract the async function to `readable.map` method. + * @since v17.5.0 + * @param fn a reducer function to call over every chunk in the stream. Async or not. + * @param initial the initial value to use in the reduction. + * @returns a promise for the final value of the reduction. + */ + reduce( + fn: (previous: any, data: any, options?: Pick) => T, + initial?: undefined, + options?: Pick, + ): Promise; + reduce( + fn: (previous: T, data: any, options?: Pick) => T, + initial: T, + options?: Pick, + ): Promise; + _destroy(error: Error | null, callback: (error?: Error | null) => void): void; + /** + * Destroy the stream. Optionally emit an `'error'` event, and emit a `'close'` event (unless `emitClose` is set to `false`). After this call, the readable + * stream will release any internal resources and subsequent calls to `push()` will be ignored. + * + * Once `destroy()` has been called any further calls will be a no-op and no + * further errors except from `_destroy()` may be emitted as `'error'`. + * + * Implementors should not override this method, but instead implement `readable._destroy()`. + * @since v8.0.0 + * @param error Error which will be passed as payload in `'error'` event + */ + destroy(error?: Error): this; + /** + * @returns `AsyncIterator` to fully consume the stream. + * @since v10.0.0 + */ + [Symbol.asyncIterator](): NodeJS.AsyncIterator; + /** + * Calls `readable.destroy()` with an `AbortError` and returns + * a promise that fulfills when the stream is finished. + * @since v20.4.0 + */ + [Symbol.asyncDispose](): Promise; + /** + * Event emitter + * The defined events on documents including: + * 1. close + * 2. data + * 3. end + * 4. error + * 5. pause + * 6. readable + * 7. resume + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "data", listener: (chunk: any) => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "readable", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "close"): boolean; + emit(event: "data", chunk: any): boolean; + emit(event: "end"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "pause"): boolean; + emit(event: "readable"): boolean; + emit(event: "resume"): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "close", listener: () => void): this; + on(event: "data", listener: (chunk: any) => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "pause", listener: () => void): this; + on(event: "readable", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "data", listener: (chunk: any) => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "pause", listener: () => void): this; + once(event: "readable", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "data", listener: (chunk: any) => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "readable", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "data", listener: (chunk: any) => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "readable", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + removeListener(event: "close", listener: () => void): this; + removeListener(event: "data", listener: (chunk: any) => void): this; + removeListener(event: "end", listener: () => void): this; + removeListener(event: "error", listener: (err: Error) => void): this; + removeListener(event: "pause", listener: () => void): this; + removeListener(event: "readable", listener: () => void): this; + removeListener(event: "resume", listener: () => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + interface WritableOptions extends StreamOptions { + decodeStrings?: boolean | undefined; + defaultEncoding?: BufferEncoding | undefined; + write?: + | (( + this: T, + chunk: any, + encoding: BufferEncoding, + callback: (error?: Error | null) => void, + ) => void) + | undefined; + writev?: + | (( + this: T, + chunks: Array<{ + chunk: any; + encoding: BufferEncoding; + }>, + callback: (error?: Error | null) => void, + ) => void) + | undefined; + final?: ((this: T, callback: (error?: Error | null) => void) => void) | undefined; + } + /** + * @since v0.9.4 + */ + class Writable extends Stream implements NodeJS.WritableStream { + /** + * A utility method for creating a `Writable` from a web `WritableStream`. + * @since v17.0.0 + */ + static fromWeb( + writableStream: streamWeb.WritableStream, + options?: Pick, + ): Writable; + /** + * A utility method for creating a web `WritableStream` from a `Writable`. + * @since v17.0.0 + */ + static toWeb(streamWritable: Writable): streamWeb.WritableStream; + /** + * Is `true` if it is safe to call `writable.write()`, which means + * the stream has not been destroyed, errored, or ended. + * @since v11.4.0 + */ + readonly writable: boolean; + /** + * Returns whether the stream was destroyed or errored before emitting `'finish'`. + * @since v18.0.0, v16.17.0 + */ + readonly writableAborted: boolean; + /** + * Is `true` after `writable.end()` has been called. This property + * does not indicate whether the data has been flushed, for this use `writable.writableFinished` instead. + * @since v12.9.0 + */ + readonly writableEnded: boolean; + /** + * Is set to `true` immediately before the `'finish'` event is emitted. + * @since v12.6.0 + */ + readonly writableFinished: boolean; + /** + * Return the value of `highWaterMark` passed when creating this `Writable`. + * @since v9.3.0 + */ + readonly writableHighWaterMark: number; + /** + * This property contains the number of bytes (or objects) in the queue + * ready to be written. The value provides introspection data regarding + * the status of the `highWaterMark`. + * @since v9.4.0 + */ + readonly writableLength: number; + /** + * Getter for the property `objectMode` of a given `Writable` stream. + * @since v12.3.0 + */ + readonly writableObjectMode: boolean; + /** + * Number of times `writable.uncork()` needs to be + * called in order to fully uncork the stream. + * @since v13.2.0, v12.16.0 + */ + readonly writableCorked: number; + /** + * Is `true` after `writable.destroy()` has been called. + * @since v8.0.0 + */ + destroyed: boolean; + /** + * Is `true` after `'close'` has been emitted. + * @since v18.0.0 + */ + readonly closed: boolean; + /** + * Returns error if the stream has been destroyed with an error. + * @since v18.0.0 + */ + readonly errored: Error | null; + /** + * Is `true` if the stream's buffer has been full and stream will emit `'drain'`. + * @since v15.2.0, v14.17.0 + */ + readonly writableNeedDrain: boolean; + constructor(opts?: WritableOptions); + _write(chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void; + _writev?( + chunks: Array<{ + chunk: any; + encoding: BufferEncoding; + }>, + callback: (error?: Error | null) => void, + ): void; + _construct?(callback: (error?: Error | null) => void): void; + _destroy(error: Error | null, callback: (error?: Error | null) => void): void; + _final(callback: (error?: Error | null) => void): void; + /** + * The `writable.write()` method writes some data to the stream, and calls the + * supplied `callback` once the data has been fully handled. If an error + * occurs, the `callback` will be called with the error as its + * first argument. The `callback` is called asynchronously and before `'error'` is + * emitted. + * + * The return value is `true` if the internal buffer is less than the `highWaterMark` configured when the stream was created after admitting `chunk`. + * If `false` is returned, further attempts to write data to the stream should + * stop until the `'drain'` event is emitted. + * + * While a stream is not draining, calls to `write()` will buffer `chunk`, and + * return false. Once all currently buffered chunks are drained (accepted for + * delivery by the operating system), the `'drain'` event will be emitted. + * Once `write()` returns false, do not write more chunks + * until the `'drain'` event is emitted. While calling `write()` on a stream that + * is not draining is allowed, Node.js will buffer all written chunks until + * maximum memory usage occurs, at which point it will abort unconditionally. + * Even before it aborts, high memory usage will cause poor garbage collector + * performance and high RSS (which is not typically released back to the system, + * even after the memory is no longer required). Since TCP sockets may never + * drain if the remote peer does not read the data, writing a socket that is + * not draining may lead to a remotely exploitable vulnerability. + * + * Writing data while the stream is not draining is particularly + * problematic for a `Transform`, because the `Transform` streams are paused + * by default until they are piped or a `'data'` or `'readable'` event handler + * is added. + * + * If the data to be written can be generated or fetched on demand, it is + * recommended to encapsulate the logic into a `Readable` and use {@link pipe}. However, if calling `write()` is preferred, it is + * possible to respect backpressure and avoid memory issues using the `'drain'` event: + * + * ```js + * function write(data, cb) { + * if (!stream.write(data)) { + * stream.once('drain', cb); + * } else { + * process.nextTick(cb); + * } + * } + * + * // Wait for cb to be called before doing any other write. + * write('hello', () => { + * console.log('Write completed, do more writes now.'); + * }); + * ``` + * + * A `Writable` stream in object mode will always ignore the `encoding` argument. + * @since v0.9.4 + * @param chunk Optional data to write. For streams not operating in object mode, `chunk` must be a {string}, {Buffer}, + * {TypedArray} or {DataView}. For object mode streams, `chunk` may be any JavaScript value other than `null`. + * @param [encoding='utf8'] The encoding, if `chunk` is a string. + * @param callback Callback for when this chunk of data is flushed. + * @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + write(chunk: any, callback?: (error: Error | null | undefined) => void): boolean; + write(chunk: any, encoding: BufferEncoding, callback?: (error: Error | null | undefined) => void): boolean; + /** + * The `writable.setDefaultEncoding()` method sets the default `encoding` for a `Writable` stream. + * @since v0.11.15 + * @param encoding The new default encoding + */ + setDefaultEncoding(encoding: BufferEncoding): this; + /** + * Calling the `writable.end()` method signals that no more data will be written + * to the `Writable`. The optional `chunk` and `encoding` arguments allow one + * final additional chunk of data to be written immediately before closing the + * stream. + * + * Calling the {@link write} method after calling {@link end} will raise an error. + * + * ```js + * // Write 'hello, ' and then end with 'world!'. + * import fs from 'node:fs'; + * const file = fs.createWriteStream('example.txt'); + * file.write('hello, '); + * file.end('world!'); + * // Writing more now is not allowed! + * ``` + * @since v0.9.4 + * @param chunk Optional data to write. For streams not operating in object mode, `chunk` must be a {string}, {Buffer}, + * {TypedArray} or {DataView}. For object mode streams, `chunk` may be any JavaScript value other than `null`. + * @param encoding The encoding if `chunk` is a string + * @param callback Callback for when the stream is finished. + */ + end(cb?: () => void): this; + end(chunk: any, cb?: () => void): this; + end(chunk: any, encoding: BufferEncoding, cb?: () => void): this; + /** + * The `writable.cork()` method forces all written data to be buffered in memory. + * The buffered data will be flushed when either the {@link uncork} or {@link end} methods are called. + * + * The primary intent of `writable.cork()` is to accommodate a situation in which + * several small chunks are written to the stream in rapid succession. Instead of + * immediately forwarding them to the underlying destination, `writable.cork()` buffers all the chunks until `writable.uncork()` is called, which will pass them + * all to `writable._writev()`, if present. This prevents a head-of-line blocking + * situation where data is being buffered while waiting for the first small chunk + * to be processed. However, use of `writable.cork()` without implementing `writable._writev()` may have an adverse effect on throughput. + * + * See also: `writable.uncork()`, `writable._writev()`. + * @since v0.11.2 + */ + cork(): void; + /** + * The `writable.uncork()` method flushes all data buffered since {@link cork} was called. + * + * When using `writable.cork()` and `writable.uncork()` to manage the buffering + * of writes to a stream, defer calls to `writable.uncork()` using `process.nextTick()`. Doing so allows batching of all `writable.write()` calls that occur within a given Node.js event + * loop phase. + * + * ```js + * stream.cork(); + * stream.write('some '); + * stream.write('data '); + * process.nextTick(() => stream.uncork()); + * ``` + * + * If the `writable.cork()` method is called multiple times on a stream, the + * same number of calls to `writable.uncork()` must be called to flush the buffered + * data. + * + * ```js + * stream.cork(); + * stream.write('some '); + * stream.cork(); + * stream.write('data '); + * process.nextTick(() => { + * stream.uncork(); + * // The data will not be flushed until uncork() is called a second time. + * stream.uncork(); + * }); + * ``` + * + * See also: `writable.cork()`. + * @since v0.11.2 + */ + uncork(): void; + /** + * Destroy the stream. Optionally emit an `'error'` event, and emit a `'close'` event (unless `emitClose` is set to `false`). After this call, the writable + * stream has ended and subsequent calls to `write()` or `end()` will result in + * an `ERR_STREAM_DESTROYED` error. + * This is a destructive and immediate way to destroy a stream. Previous calls to `write()` may not have drained, and may trigger an `ERR_STREAM_DESTROYED` error. + * Use `end()` instead of destroy if data should flush before close, or wait for + * the `'drain'` event before destroying the stream. + * + * Once `destroy()` has been called any further calls will be a no-op and no + * further errors except from `_destroy()` may be emitted as `'error'`. + * + * Implementors should not override this method, + * but instead implement `writable._destroy()`. + * @since v8.0.0 + * @param error Optional, an error to emit with `'error'` event. + */ + destroy(error?: Error): this; + /** + * Calls `writable.destroy()` with an `AbortError` and returns + * a promise that fulfills when the stream is finished. + * @since v22.4.0, v20.16.0 + */ + [Symbol.asyncDispose](): Promise; + /** + * Event emitter + * The defined events on documents including: + * 1. close + * 2. drain + * 3. error + * 4. finish + * 5. pipe + * 6. unpipe + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "pipe", listener: (src: Readable) => void): this; + addListener(event: "unpipe", listener: (src: Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "close"): boolean; + emit(event: "drain"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "finish"): boolean; + emit(event: "pipe", src: Readable): boolean; + emit(event: "unpipe", src: Readable): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "close", listener: () => void): this; + on(event: "drain", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "pipe", listener: (src: Readable) => void): this; + on(event: "unpipe", listener: (src: Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "drain", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "pipe", listener: (src: Readable) => void): this; + once(event: "unpipe", listener: (src: Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "pipe", listener: (src: Readable) => void): this; + prependListener(event: "unpipe", listener: (src: Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "pipe", listener: (src: Readable) => void): this; + prependOnceListener(event: "unpipe", listener: (src: Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + removeListener(event: "close", listener: () => void): this; + removeListener(event: "drain", listener: () => void): this; + removeListener(event: "error", listener: (err: Error) => void): this; + removeListener(event: "finish", listener: () => void): this; + removeListener(event: "pipe", listener: (src: Readable) => void): this; + removeListener(event: "unpipe", listener: (src: Readable) => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + interface DuplexOptions extends ReadableOptions, WritableOptions { + allowHalfOpen?: boolean | undefined; + readableObjectMode?: boolean | undefined; + writableObjectMode?: boolean | undefined; + readableHighWaterMark?: number | undefined; + writableHighWaterMark?: number | undefined; + writableCorked?: number | undefined; + } + /** + * Duplex streams are streams that implement both the `Readable` and `Writable` interfaces. + * + * Examples of `Duplex` streams include: + * + * * `TCP sockets` + * * `zlib streams` + * * `crypto streams` + * @since v0.9.4 + */ + class Duplex extends Stream implements NodeJS.ReadWriteStream { + /** + * If `false` then the stream will automatically end the writable side when the + * readable side ends. Set initially by the `allowHalfOpen` constructor option, + * which defaults to `true`. + * + * This can be changed manually to change the half-open behavior of an existing + * `Duplex` stream instance, but must be changed before the `'end'` event is emitted. + * @since v0.9.4 + */ + allowHalfOpen: boolean; + constructor(opts?: DuplexOptions); + /** + * A utility method for creating duplex streams. + * + * - `Stream` converts writable stream into writable `Duplex` and readable stream + * to `Duplex`. + * - `Blob` converts into readable `Duplex`. + * - `string` converts into readable `Duplex`. + * - `ArrayBuffer` converts into readable `Duplex`. + * - `AsyncIterable` converts into a readable `Duplex`. Cannot yield `null`. + * - `AsyncGeneratorFunction` converts into a readable/writable transform + * `Duplex`. Must take a source `AsyncIterable` as first parameter. Cannot yield + * `null`. + * - `AsyncFunction` converts into a writable `Duplex`. Must return + * either `null` or `undefined` + * - `Object ({ writable, readable })` converts `readable` and + * `writable` into `Stream` and then combines them into `Duplex` where the + * `Duplex` will write to the `writable` and read from the `readable`. + * - `Promise` converts into readable `Duplex`. Value `null` is ignored. + * + * @since v16.8.0 + */ + static from( + src: + | Stream + | NodeBlob + | ArrayBuffer + | string + | Iterable + | AsyncIterable + | AsyncGeneratorFunction + | Promise + | Object, + ): Duplex; + /** + * A utility method for creating a web `ReadableStream` and `WritableStream` from a `Duplex`. + * @since v17.0.0 + */ + static toWeb(streamDuplex: Duplex): { + readable: streamWeb.ReadableStream; + writable: streamWeb.WritableStream; + }; + /** + * A utility method for creating a `Duplex` from a web `ReadableStream` and `WritableStream`. + * @since v17.0.0 + */ + static fromWeb( + duplexStream: { + readable: streamWeb.ReadableStream; + writable: streamWeb.WritableStream; + }, + options?: Pick< + DuplexOptions, + "allowHalfOpen" | "decodeStrings" | "encoding" | "highWaterMark" | "objectMode" | "signal" + >, + ): Duplex; + /** + * Event emitter + * The defined events on documents including: + * 1. close + * 2. data + * 3. drain + * 4. end + * 5. error + * 6. finish + * 7. pause + * 8. pipe + * 9. readable + * 10. resume + * 11. unpipe + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "data", listener: (chunk: any) => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "pipe", listener: (src: Readable) => void): this; + addListener(event: "readable", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: "unpipe", listener: (src: Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "close"): boolean; + emit(event: "data", chunk: any): boolean; + emit(event: "drain"): boolean; + emit(event: "end"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "finish"): boolean; + emit(event: "pause"): boolean; + emit(event: "pipe", src: Readable): boolean; + emit(event: "readable"): boolean; + emit(event: "resume"): boolean; + emit(event: "unpipe", src: Readable): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "close", listener: () => void): this; + on(event: "data", listener: (chunk: any) => void): this; + on(event: "drain", listener: () => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "pause", listener: () => void): this; + on(event: "pipe", listener: (src: Readable) => void): this; + on(event: "readable", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: "unpipe", listener: (src: Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "data", listener: (chunk: any) => void): this; + once(event: "drain", listener: () => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "pause", listener: () => void): this; + once(event: "pipe", listener: (src: Readable) => void): this; + once(event: "readable", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: "unpipe", listener: (src: Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "data", listener: (chunk: any) => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "pipe", listener: (src: Readable) => void): this; + prependListener(event: "readable", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: "unpipe", listener: (src: Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "data", listener: (chunk: any) => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "pipe", listener: (src: Readable) => void): this; + prependOnceListener(event: "readable", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: "unpipe", listener: (src: Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + removeListener(event: "close", listener: () => void): this; + removeListener(event: "data", listener: (chunk: any) => void): this; + removeListener(event: "drain", listener: () => void): this; + removeListener(event: "end", listener: () => void): this; + removeListener(event: "error", listener: (err: Error) => void): this; + removeListener(event: "finish", listener: () => void): this; + removeListener(event: "pause", listener: () => void): this; + removeListener(event: "pipe", listener: (src: Readable) => void): this; + removeListener(event: "readable", listener: () => void): this; + removeListener(event: "resume", listener: () => void): this; + removeListener(event: "unpipe", listener: (src: Readable) => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + interface Duplex extends Readable, Writable {} + /** + * The utility function `duplexPair` returns an Array with two items, + * each being a `Duplex` stream connected to the other side: + * + * ```js + * const [ sideA, sideB ] = duplexPair(); + * ``` + * + * Whatever is written to one stream is made readable on the other. It provides + * behavior analogous to a network connection, where the data written by the client + * becomes readable by the server, and vice-versa. + * + * The Duplex streams are symmetrical; one or the other may be used without any + * difference in behavior. + * @param options A value to pass to both {@link Duplex} constructors, + * to set options such as buffering. + * @since v22.6.0 + */ + function duplexPair(options?: DuplexOptions): [Duplex, Duplex]; + type TransformCallback = (error?: Error | null, data?: any) => void; + interface TransformOptions extends DuplexOptions { + transform?: + | ((this: T, chunk: any, encoding: BufferEncoding, callback: TransformCallback) => void) + | undefined; + flush?: ((this: T, callback: TransformCallback) => void) | undefined; + } + /** + * Transform streams are `Duplex` streams where the output is in some way + * related to the input. Like all `Duplex` streams, `Transform` streams + * implement both the `Readable` and `Writable` interfaces. + * + * Examples of `Transform` streams include: + * + * * `zlib streams` + * * `crypto streams` + * @since v0.9.4 + */ + class Transform extends Duplex { + constructor(opts?: TransformOptions); + _transform(chunk: any, encoding: BufferEncoding, callback: TransformCallback): void; + _flush(callback: TransformCallback): void; + } + /** + * The `stream.PassThrough` class is a trivial implementation of a `Transform` stream that simply passes the input bytes across to the output. Its purpose is + * primarily for examples and testing, but there are some use cases where `stream.PassThrough` is useful as a building block for novel sorts of streams. + */ + class PassThrough extends Transform {} + /** + * A stream to attach a signal to. + * + * Attaches an AbortSignal to a readable or writeable stream. This lets code + * control stream destruction using an `AbortController`. + * + * Calling `abort` on the `AbortController` corresponding to the passed `AbortSignal` will behave the same way as calling `.destroy(new AbortError())` on the + * stream, and `controller.error(new AbortError())` for webstreams. + * + * ```js + * import fs from 'node:fs'; + * + * const controller = new AbortController(); + * const read = addAbortSignal( + * controller.signal, + * fs.createReadStream(('object.json')), + * ); + * // Later, abort the operation closing the stream + * controller.abort(); + * ``` + * + * Or using an `AbortSignal` with a readable stream as an async iterable: + * + * ```js + * const controller = new AbortController(); + * setTimeout(() => controller.abort(), 10_000); // set a timeout + * const stream = addAbortSignal( + * controller.signal, + * fs.createReadStream(('object.json')), + * ); + * (async () => { + * try { + * for await (const chunk of stream) { + * await process(chunk); + * } + * } catch (e) { + * if (e.name === 'AbortError') { + * // The operation was cancelled + * } else { + * throw e; + * } + * } + * })(); + * ``` + * + * Or using an `AbortSignal` with a ReadableStream: + * + * ```js + * const controller = new AbortController(); + * const rs = new ReadableStream({ + * start(controller) { + * controller.enqueue('hello'); + * controller.enqueue('world'); + * controller.close(); + * }, + * }); + * + * addAbortSignal(controller.signal, rs); + * + * finished(rs, (err) => { + * if (err) { + * if (err.name === 'AbortError') { + * // The operation was cancelled + * } + * } + * }); + * + * const reader = rs.getReader(); + * + * reader.read().then(({ value, done }) => { + * console.log(value); // hello + * console.log(done); // false + * controller.abort(); + * }); + * ``` + * @since v15.4.0 + * @param signal A signal representing possible cancellation + * @param stream A stream to attach a signal to. + */ + function addAbortSignal(signal: AbortSignal, stream: T): T; + /** + * Returns the default highWaterMark used by streams. + * Defaults to `65536` (64 KiB), or `16` for `objectMode`. + * @since v19.9.0 + */ + function getDefaultHighWaterMark(objectMode: boolean): number; + /** + * Sets the default highWaterMark used by streams. + * @since v19.9.0 + * @param value highWaterMark value + */ + function setDefaultHighWaterMark(objectMode: boolean, value: number): void; + interface FinishedOptions extends Abortable { + error?: boolean | undefined; + readable?: boolean | undefined; + writable?: boolean | undefined; + } + /** + * A readable and/or writable stream/webstream. + * + * A function to get notified when a stream is no longer readable, writable + * or has experienced an error or a premature close event. + * + * ```js + * import { finished } from 'node:stream'; + * import fs from 'node:fs'; + * + * const rs = fs.createReadStream('archive.tar'); + * + * finished(rs, (err) => { + * if (err) { + * console.error('Stream failed.', err); + * } else { + * console.log('Stream is done reading.'); + * } + * }); + * + * rs.resume(); // Drain the stream. + * ``` + * + * Especially useful in error handling scenarios where a stream is destroyed + * prematurely (like an aborted HTTP request), and will not emit `'end'` or `'finish'`. + * + * The `finished` API provides [`promise version`](https://nodejs.org/docs/latest-v24.x/api/stream.html#streamfinishedstream-options). + * + * `stream.finished()` leaves dangling event listeners (in particular `'error'`, `'end'`, `'finish'` and `'close'`) after `callback` has been + * invoked. The reason for this is so that unexpected `'error'` events (due to + * incorrect stream implementations) do not cause unexpected crashes. + * If this is unwanted behavior then the returned cleanup function needs to be + * invoked in the callback: + * + * ```js + * const cleanup = finished(rs, (err) => { + * cleanup(); + * // ... + * }); + * ``` + * @since v10.0.0 + * @param stream A readable and/or writable stream. + * @param callback A callback function that takes an optional error argument. + * @returns A cleanup function which removes all registered listeners. + */ + function finished( + stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, + options: FinishedOptions, + callback: (err?: NodeJS.ErrnoException | null) => void, + ): () => void; + function finished( + stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, + callback: (err?: NodeJS.ErrnoException | null) => void, + ): () => void; + namespace finished { + function __promisify__( + stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, + options?: FinishedOptions, + ): Promise; + } + type PipelineSourceFunction = () => Iterable | AsyncIterable; + type PipelineSource = Iterable | AsyncIterable | NodeJS.ReadableStream | PipelineSourceFunction; + type PipelineTransform, U> = + | NodeJS.ReadWriteStream + | (( + source: S extends (...args: any[]) => Iterable | AsyncIterable ? AsyncIterable + : S, + ) => AsyncIterable); + type PipelineTransformSource = PipelineSource | PipelineTransform; + type PipelineDestinationIterableFunction = (source: AsyncIterable) => AsyncIterable; + type PipelineDestinationPromiseFunction = (source: AsyncIterable) => Promise

; + type PipelineDestination, P> = S extends + PipelineTransformSource ? + | NodeJS.WritableStream + | PipelineDestinationIterableFunction + | PipelineDestinationPromiseFunction + : never; + type PipelineCallback> = S extends + PipelineDestinationPromiseFunction ? (err: NodeJS.ErrnoException | null, value: P) => void + : (err: NodeJS.ErrnoException | null) => void; + type PipelinePromise> = S extends + PipelineDestinationPromiseFunction ? Promise

: Promise; + interface PipelineOptions { + signal?: AbortSignal | undefined; + end?: boolean | undefined; + } + /** + * A module method to pipe between streams and generators forwarding errors and + * properly cleaning up and provide a callback when the pipeline is complete. + * + * ```js + * import { pipeline } from 'node:stream'; + * import fs from 'node:fs'; + * import zlib from 'node:zlib'; + * + * // Use the pipeline API to easily pipe a series of streams + * // together and get notified when the pipeline is fully done. + * + * // A pipeline to gzip a potentially huge tar file efficiently: + * + * pipeline( + * fs.createReadStream('archive.tar'), + * zlib.createGzip(), + * fs.createWriteStream('archive.tar.gz'), + * (err) => { + * if (err) { + * console.error('Pipeline failed.', err); + * } else { + * console.log('Pipeline succeeded.'); + * } + * }, + * ); + * ``` + * + * The `pipeline` API provides a [`promise version`](https://nodejs.org/docs/latest-v24.x/api/stream.html#streampipelinesource-transforms-destination-options). + * + * `stream.pipeline()` will call `stream.destroy(err)` on all streams except: + * + * * `Readable` streams which have emitted `'end'` or `'close'`. + * * `Writable` streams which have emitted `'finish'` or `'close'`. + * + * `stream.pipeline()` leaves dangling event listeners on the streams + * after the `callback` has been invoked. In the case of reuse of streams after + * failure, this can cause event listener leaks and swallowed errors. If the last + * stream is readable, dangling event listeners will be removed so that the last + * stream can be consumed later. + * + * `stream.pipeline()` closes all the streams when an error is raised. + * The `IncomingRequest` usage with `pipeline` could lead to an unexpected behavior + * once it would destroy the socket without sending the expected response. + * See the example below: + * + * ```js + * import fs from 'node:fs'; + * import http from 'node:http'; + * import { pipeline } from 'node:stream'; + * + * const server = http.createServer((req, res) => { + * const fileStream = fs.createReadStream('./fileNotExist.txt'); + * pipeline(fileStream, res, (err) => { + * if (err) { + * console.log(err); // No such file + * // this message can't be sent once `pipeline` already destroyed the socket + * return res.end('error!!!'); + * } + * }); + * }); + * ``` + * @since v10.0.0 + * @param callback Called when the pipeline is fully done. + */ + function pipeline, B extends PipelineDestination>( + source: A, + destination: B, + callback: PipelineCallback, + ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + destination: B, + callback: PipelineCallback, + ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + destination: B, + callback: PipelineCallback, + ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + transform3: T3, + destination: B, + callback: PipelineCallback, + ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + T4 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + transform3: T3, + transform4: T4, + destination: B, + callback: PipelineCallback, + ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream; + function pipeline( + streams: ReadonlyArray, + callback: (err: NodeJS.ErrnoException | null) => void, + ): NodeJS.WritableStream; + function pipeline( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream, + ...streams: Array< + NodeJS.ReadWriteStream | NodeJS.WritableStream | ((err: NodeJS.ErrnoException | null) => void) + > + ): NodeJS.WritableStream; + namespace pipeline { + function __promisify__, B extends PipelineDestination>( + source: A, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function __promisify__< + A extends PipelineSource, + T1 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function __promisify__< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function __promisify__< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + transform3: T3, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function __promisify__< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + T4 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + transform3: T3, + transform4: T4, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function __promisify__( + streams: ReadonlyArray, + options?: PipelineOptions, + ): Promise; + function __promisify__( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream, + ...streams: Array + ): Promise; + } + // TODO: this interface never existed; remove in next major + interface Pipe { + close(): void; + hasRef(): boolean; + ref(): void; + unref(): void; + } + // TODO: these should all take webstream arguments + /** + * Returns whether the stream has encountered an error. + * @since v17.3.0, v16.14.0 + */ + function isErrored(stream: Readable | Writable | NodeJS.ReadableStream | NodeJS.WritableStream): boolean; + /** + * Returns whether the stream is readable. + * @since v17.4.0, v16.14.0 + * @returns Only returns `null` if `stream` is not a valid `Readable`, `Duplex` or `ReadableStream`. + */ + function isReadable(stream: Readable | NodeJS.ReadableStream): boolean | null; + /** + * Returns whether the stream is writable. + * @since v20.0.0 + * @returns Only returns `null` if `stream` is not a valid `Writable`, `Duplex` or `WritableStream`. + */ + function isWritable(stream: Writable | NodeJS.WritableStream): boolean | null; + } + export = Stream; +} +declare module "node:stream" { + import stream = require("stream"); + export = stream; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/stream/consumers.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/stream/consumers.d.ts new file mode 100644 index 00000000..05db0257 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/stream/consumers.d.ts @@ -0,0 +1,38 @@ +/** + * The utility consumer functions provide common options for consuming + * streams. + * @since v16.7.0 + */ +declare module "stream/consumers" { + import { Blob as NodeBlob, NonSharedBuffer } from "node:buffer"; + import { ReadableStream as WebReadableStream } from "node:stream/web"; + /** + * @since v16.7.0 + * @returns Fulfills with an `ArrayBuffer` containing the full contents of the stream. + */ + function arrayBuffer(stream: WebReadableStream | NodeJS.ReadableStream | AsyncIterable): Promise; + /** + * @since v16.7.0 + * @returns Fulfills with a `Blob` containing the full contents of the stream. + */ + function blob(stream: WebReadableStream | NodeJS.ReadableStream | AsyncIterable): Promise; + /** + * @since v16.7.0 + * @returns Fulfills with a `Buffer` containing the full contents of the stream. + */ + function buffer(stream: WebReadableStream | NodeJS.ReadableStream | AsyncIterable): Promise; + /** + * @since v16.7.0 + * @returns Fulfills with the contents of the stream parsed as a + * UTF-8 encoded string that is then passed through `JSON.parse()`. + */ + function json(stream: WebReadableStream | NodeJS.ReadableStream | AsyncIterable): Promise; + /** + * @since v16.7.0 + * @returns Fulfills with the contents of the stream parsed as a UTF-8 encoded string. + */ + function text(stream: WebReadableStream | NodeJS.ReadableStream | AsyncIterable): Promise; +} +declare module "node:stream/consumers" { + export * from "stream/consumers"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/stream/promises.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/stream/promises.d.ts new file mode 100644 index 00000000..d54c14c6 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/stream/promises.d.ts @@ -0,0 +1,90 @@ +declare module "stream/promises" { + import { + FinishedOptions as _FinishedOptions, + PipelineDestination, + PipelineOptions, + PipelinePromise, + PipelineSource, + PipelineTransform, + } from "node:stream"; + interface FinishedOptions extends _FinishedOptions { + /** + * If true, removes the listeners registered by this function before the promise is fulfilled. + * @default false + */ + cleanup?: boolean | undefined; + } + function finished( + stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, + options?: FinishedOptions, + ): Promise; + function pipeline, B extends PipelineDestination>( + source: A, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + transform3: T3, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + T4 extends PipelineTransform, + B extends PipelineDestination, + >( + source: A, + transform1: T1, + transform2: T2, + transform3: T3, + transform4: T4, + destination: B, + options?: PipelineOptions, + ): PipelinePromise; + function pipeline( + streams: ReadonlyArray, + options?: PipelineOptions, + ): Promise; + function pipeline( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream, + ...streams: Array + ): Promise; +} +declare module "node:stream/promises" { + export * from "stream/promises"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/stream/web.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/stream/web.d.ts new file mode 100644 index 00000000..bc7c011c --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/stream/web.d.ts @@ -0,0 +1,573 @@ +type _ByteLengthQueuingStrategy = typeof globalThis extends { onmessage: any } ? {} + : import("stream/web").ByteLengthQueuingStrategy; +type _CountQueuingStrategy = typeof globalThis extends { onmessage: any } ? {} + : import("stream/web").CountQueuingStrategy; +type _QueuingStrategy = typeof globalThis extends { onmessage: any } ? {} + : import("stream/web").QueuingStrategy; +type _ReadableByteStreamController = typeof globalThis extends { onmessage: any } ? {} + : import("stream/web").ReadableByteStreamController; +type _ReadableStream = typeof globalThis extends { onmessage: any } ? {} + : import("stream/web").ReadableStream; +type _ReadableStreamBYOBReader = typeof globalThis extends { onmessage: any } ? {} + : import("stream/web").ReadableStreamBYOBReader; +type _ReadableStreamBYOBRequest = typeof globalThis extends { onmessage: any } ? {} + : import("stream/web").ReadableStreamBYOBRequest; +type _ReadableStreamDefaultController = typeof globalThis extends { onmessage: any } ? {} + : import("stream/web").ReadableStreamDefaultController; +type _ReadableStreamDefaultReader = typeof globalThis extends { onmessage: any } ? {} + : import("stream/web").ReadableStreamDefaultReader; +type _TextDecoderStream = typeof globalThis extends { onmessage: any } ? {} + : import("stream/web").TextDecoderStream; +type _TextEncoderStream = typeof globalThis extends { onmessage: any } ? {} + : import("stream/web").TextEncoderStream; +type _TransformStream = typeof globalThis extends { onmessage: any } ? {} + : import("stream/web").TransformStream; +type _TransformStreamDefaultController = typeof globalThis extends { onmessage: any } ? {} + : import("stream/web").TransformStreamDefaultController; +type _WritableStream = typeof globalThis extends { onmessage: any } ? {} + : import("stream/web").WritableStream; +type _WritableStreamDefaultController = typeof globalThis extends { onmessage: any } ? {} + : import("stream/web").WritableStreamDefaultController; +type _WritableStreamDefaultWriter = typeof globalThis extends { onmessage: any } ? {} + : import("stream/web").WritableStreamDefaultWriter; + +declare module "stream/web" { + // stub module, pending copy&paste from .d.ts or manual impl + // copy from lib.dom.d.ts + interface ReadableWritablePair { + readable: ReadableStream; + /** + * Provides a convenient, chainable way of piping this readable stream + * through a transform stream (or any other { writable, readable } + * pair). It simply pipes the stream into the writable side of the + * supplied pair, and returns the readable side for further use. + * + * Piping a stream will lock it for the duration of the pipe, preventing + * any other consumer from acquiring a reader. + */ + writable: WritableStream; + } + interface StreamPipeOptions { + preventAbort?: boolean; + preventCancel?: boolean; + /** + * Pipes this readable stream to a given writable stream destination. + * The way in which the piping process behaves under various error + * conditions can be customized with a number of passed options. It + * returns a promise that fulfills when the piping process completes + * successfully, or rejects if any errors were encountered. + * + * Piping a stream will lock it for the duration of the pipe, preventing + * any other consumer from acquiring a reader. + * + * Errors and closures of the source and destination streams propagate + * as follows: + * + * An error in this source readable stream will abort destination, + * unless preventAbort is truthy. The returned promise will be rejected + * with the source's error, or with any error that occurs during + * aborting the destination. + * + * An error in destination will cancel this source readable stream, + * unless preventCancel is truthy. The returned promise will be rejected + * with the destination's error, or with any error that occurs during + * canceling the source. + * + * When this source readable stream closes, destination will be closed, + * unless preventClose is truthy. The returned promise will be fulfilled + * once this process completes, unless an error is encountered while + * closing the destination, in which case it will be rejected with that + * error. + * + * If destination starts out closed or closing, this source readable + * stream will be canceled, unless preventCancel is true. The returned + * promise will be rejected with an error indicating piping to a closed + * stream failed, or with any error that occurs during canceling the + * source. + * + * The signal option can be set to an AbortSignal to allow aborting an + * ongoing pipe operation via the corresponding AbortController. In this + * case, this source readable stream will be canceled, and destination + * aborted, unless the respective options preventCancel or preventAbort + * are set. + */ + preventClose?: boolean; + signal?: AbortSignal; + } + interface ReadableStreamGenericReader { + readonly closed: Promise; + cancel(reason?: any): Promise; + } + type ReadableStreamController = ReadableStreamDefaultController; + interface ReadableStreamReadValueResult { + done: false; + value: T; + } + interface ReadableStreamReadDoneResult { + done: true; + value?: T; + } + type ReadableStreamReadResult = ReadableStreamReadValueResult | ReadableStreamReadDoneResult; + interface ReadableByteStreamControllerCallback { + (controller: ReadableByteStreamController): void | PromiseLike; + } + interface UnderlyingSinkAbortCallback { + (reason?: any): void | PromiseLike; + } + interface UnderlyingSinkCloseCallback { + (): void | PromiseLike; + } + interface UnderlyingSinkStartCallback { + (controller: WritableStreamDefaultController): any; + } + interface UnderlyingSinkWriteCallback { + (chunk: W, controller: WritableStreamDefaultController): void | PromiseLike; + } + interface UnderlyingSourceCancelCallback { + (reason?: any): void | PromiseLike; + } + interface UnderlyingSourcePullCallback { + (controller: ReadableStreamController): void | PromiseLike; + } + interface UnderlyingSourceStartCallback { + (controller: ReadableStreamController): any; + } + interface TransformerFlushCallback { + (controller: TransformStreamDefaultController): void | PromiseLike; + } + interface TransformerStartCallback { + (controller: TransformStreamDefaultController): any; + } + interface TransformerTransformCallback { + (chunk: I, controller: TransformStreamDefaultController): void | PromiseLike; + } + interface TransformerCancelCallback { + (reason: any): void | PromiseLike; + } + interface UnderlyingByteSource { + autoAllocateChunkSize?: number; + cancel?: ReadableStreamErrorCallback; + pull?: ReadableByteStreamControllerCallback; + start?: ReadableByteStreamControllerCallback; + type: "bytes"; + } + interface UnderlyingSource { + cancel?: UnderlyingSourceCancelCallback; + pull?: UnderlyingSourcePullCallback; + start?: UnderlyingSourceStartCallback; + type?: undefined; + } + interface UnderlyingSink { + abort?: UnderlyingSinkAbortCallback; + close?: UnderlyingSinkCloseCallback; + start?: UnderlyingSinkStartCallback; + type?: undefined; + write?: UnderlyingSinkWriteCallback; + } + interface ReadableStreamErrorCallback { + (reason: any): void | PromiseLike; + } + interface ReadableStreamAsyncIterator extends NodeJS.AsyncIterator { + [Symbol.asyncIterator](): ReadableStreamAsyncIterator; + } + /** This Streams API interface represents a readable stream of byte data. */ + interface ReadableStream { + readonly locked: boolean; + cancel(reason?: any): Promise; + getReader(options: { mode: "byob" }): ReadableStreamBYOBReader; + getReader(): ReadableStreamDefaultReader; + getReader(options?: ReadableStreamGetReaderOptions): ReadableStreamReader; + pipeThrough(transform: ReadableWritablePair, options?: StreamPipeOptions): ReadableStream; + pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise; + tee(): [ReadableStream, ReadableStream]; + values(options?: { preventCancel?: boolean }): ReadableStreamAsyncIterator; + [Symbol.asyncIterator](): ReadableStreamAsyncIterator; + } + const ReadableStream: { + prototype: ReadableStream; + from(iterable: Iterable | AsyncIterable): ReadableStream; + new(underlyingSource: UnderlyingByteSource, strategy?: QueuingStrategy): ReadableStream; + new(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy): ReadableStream; + }; + type ReadableStreamReaderMode = "byob"; + interface ReadableStreamGetReaderOptions { + /** + * Creates a ReadableStreamBYOBReader and locks the stream to the new reader. + * + * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams, i.e. streams which were constructed specifically with the ability to handle "bring your own buffer" reading. The returned BYOB reader provides the ability to directly read individual chunks from the stream via its read() method, into developer-supplied buffers, allowing more precise control over allocation. + */ + mode?: ReadableStreamReaderMode; + } + type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader; + interface ReadableStreamDefaultReader extends ReadableStreamGenericReader { + read(): Promise>; + releaseLock(): void; + } + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBReader) */ + interface ReadableStreamBYOBReader extends ReadableStreamGenericReader { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBReader/read) */ + read( + view: T, + options?: { + min?: number; + }, + ): Promise>; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBReader/releaseLock) */ + releaseLock(): void; + } + const ReadableStreamDefaultReader: { + prototype: ReadableStreamDefaultReader; + new(stream: ReadableStream): ReadableStreamDefaultReader; + }; + const ReadableStreamBYOBReader: { + prototype: ReadableStreamBYOBReader; + new(stream: ReadableStream): ReadableStreamBYOBReader; + }; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBRequest) */ + interface ReadableStreamBYOBRequest { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBRequest/view) */ + readonly view: ArrayBufferView | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBRequest/respond) */ + respond(bytesWritten: number): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBRequest/respondWithNewView) */ + respondWithNewView(view: ArrayBufferView): void; + } + const ReadableStreamBYOBRequest: { + prototype: ReadableStreamBYOBRequest; + new(): ReadableStreamBYOBRequest; + }; + interface ReadableByteStreamController { + readonly byobRequest: undefined; + readonly desiredSize: number | null; + close(): void; + enqueue(chunk: ArrayBufferView): void; + error(error?: any): void; + } + const ReadableByteStreamController: { + prototype: ReadableByteStreamController; + new(): ReadableByteStreamController; + }; + interface ReadableStreamDefaultController { + readonly desiredSize: number | null; + close(): void; + enqueue(chunk?: R): void; + error(e?: any): void; + } + const ReadableStreamDefaultController: { + prototype: ReadableStreamDefaultController; + new(): ReadableStreamDefaultController; + }; + interface Transformer { + flush?: TransformerFlushCallback; + readableType?: undefined; + start?: TransformerStartCallback; + transform?: TransformerTransformCallback; + cancel?: TransformerCancelCallback; + writableType?: undefined; + } + interface TransformStream { + readonly readable: ReadableStream; + readonly writable: WritableStream; + } + const TransformStream: { + prototype: TransformStream; + new( + transformer?: Transformer, + writableStrategy?: QueuingStrategy, + readableStrategy?: QueuingStrategy, + ): TransformStream; + }; + interface TransformStreamDefaultController { + readonly desiredSize: number | null; + enqueue(chunk?: O): void; + error(reason?: any): void; + terminate(): void; + } + const TransformStreamDefaultController: { + prototype: TransformStreamDefaultController; + new(): TransformStreamDefaultController; + }; + /** + * This Streams API interface provides a standard abstraction for writing + * streaming data to a destination, known as a sink. This object comes with + * built-in back pressure and queuing. + */ + interface WritableStream { + readonly locked: boolean; + abort(reason?: any): Promise; + close(): Promise; + getWriter(): WritableStreamDefaultWriter; + } + const WritableStream: { + prototype: WritableStream; + new(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy): WritableStream; + }; + /** + * This Streams API interface is the object returned by + * WritableStream.getWriter() and once created locks the < writer to the + * WritableStream ensuring that no other streams can write to the underlying + * sink. + */ + interface WritableStreamDefaultWriter { + readonly closed: Promise; + readonly desiredSize: number | null; + readonly ready: Promise; + abort(reason?: any): Promise; + close(): Promise; + releaseLock(): void; + write(chunk?: W): Promise; + } + const WritableStreamDefaultWriter: { + prototype: WritableStreamDefaultWriter; + new(stream: WritableStream): WritableStreamDefaultWriter; + }; + /** + * This Streams API interface represents a controller allowing control of a + * WritableStream's state. When constructing a WritableStream, the + * underlying sink is given a corresponding WritableStreamDefaultController + * instance to manipulate. + */ + interface WritableStreamDefaultController { + error(e?: any): void; + } + const WritableStreamDefaultController: { + prototype: WritableStreamDefaultController; + new(): WritableStreamDefaultController; + }; + interface QueuingStrategy { + highWaterMark?: number; + size?: QueuingStrategySize; + } + interface QueuingStrategySize { + (chunk?: T): number; + } + interface QueuingStrategyInit { + /** + * Creates a new ByteLengthQueuingStrategy with the provided high water + * mark. + * + * Note that the provided high water mark will not be validated ahead of + * time. Instead, if it is negative, NaN, or not a number, the resulting + * ByteLengthQueuingStrategy will cause the corresponding stream + * constructor to throw. + */ + highWaterMark: number; + } + /** + * This Streams API interface provides a built-in byte length queuing + * strategy that can be used when constructing streams. + */ + interface ByteLengthQueuingStrategy extends QueuingStrategy { + readonly highWaterMark: number; + readonly size: QueuingStrategySize; + } + const ByteLengthQueuingStrategy: { + prototype: ByteLengthQueuingStrategy; + new(init: QueuingStrategyInit): ByteLengthQueuingStrategy; + }; + /** + * This Streams API interface provides a built-in byte length queuing + * strategy that can be used when constructing streams. + */ + interface CountQueuingStrategy extends QueuingStrategy { + readonly highWaterMark: number; + readonly size: QueuingStrategySize; + } + const CountQueuingStrategy: { + prototype: CountQueuingStrategy; + new(init: QueuingStrategyInit): CountQueuingStrategy; + }; + interface TextEncoderStream { + /** Returns "utf-8". */ + readonly encoding: "utf-8"; + readonly readable: ReadableStream; + readonly writable: WritableStream; + readonly [Symbol.toStringTag]: string; + } + const TextEncoderStream: { + prototype: TextEncoderStream; + new(): TextEncoderStream; + }; + interface TextDecoderOptions { + fatal?: boolean; + ignoreBOM?: boolean; + } + type BufferSource = ArrayBufferView | ArrayBuffer; + interface TextDecoderStream { + /** Returns encoding's name, lower cased. */ + readonly encoding: string; + /** Returns `true` if error mode is "fatal", and `false` otherwise. */ + readonly fatal: boolean; + /** Returns `true` if ignore BOM flag is set, and `false` otherwise. */ + readonly ignoreBOM: boolean; + readonly readable: ReadableStream; + readonly writable: WritableStream; + readonly [Symbol.toStringTag]: string; + } + const TextDecoderStream: { + prototype: TextDecoderStream; + new(encoding?: string, options?: TextDecoderOptions): TextDecoderStream; + }; + type CompressionFormat = "brotli" | "deflate" | "deflate-raw" | "gzip"; + class CompressionStream { + constructor(format: CompressionFormat); + readonly readable: ReadableStream; + readonly writable: WritableStream; + } + class DecompressionStream { + constructor(format: CompressionFormat); + readonly readable: ReadableStream; + readonly writable: WritableStream; + } + + global { + interface ByteLengthQueuingStrategy extends _ByteLengthQueuingStrategy {} + /** + * `ByteLengthQueuingStrategy` class is a global reference for `import { ByteLengthQueuingStrategy } from 'node:stream/web'`. + * https://nodejs.org/api/globals.html#class-bytelengthqueuingstrategy + * @since v18.0.0 + */ + var ByteLengthQueuingStrategy: typeof globalThis extends { onmessage: any; ByteLengthQueuingStrategy: infer T } + ? T + : typeof import("stream/web").ByteLengthQueuingStrategy; + + interface CountQueuingStrategy extends _CountQueuingStrategy {} + /** + * `CountQueuingStrategy` class is a global reference for `import { CountQueuingStrategy } from 'node:stream/web'`. + * https://nodejs.org/api/globals.html#class-countqueuingstrategy + * @since v18.0.0 + */ + var CountQueuingStrategy: typeof globalThis extends { onmessage: any; CountQueuingStrategy: infer T } ? T + : typeof import("stream/web").CountQueuingStrategy; + + interface QueuingStrategy extends _QueuingStrategy {} + + interface ReadableByteStreamController extends _ReadableByteStreamController {} + /** + * `ReadableByteStreamController` class is a global reference for `import { ReadableByteStreamController } from 'node:stream/web'`. + * https://nodejs.org/api/globals.html#class-readablebytestreamcontroller + * @since v18.0.0 + */ + var ReadableByteStreamController: typeof globalThis extends + { onmessage: any; ReadableByteStreamController: infer T } ? T + : typeof import("stream/web").ReadableByteStreamController; + + interface ReadableStream extends _ReadableStream {} + /** + * `ReadableStream` class is a global reference for `import { ReadableStream } from 'node:stream/web'`. + * https://nodejs.org/api/globals.html#class-readablestream + * @since v18.0.0 + */ + var ReadableStream: typeof globalThis extends { onmessage: any; ReadableStream: infer T } ? T + : typeof import("stream/web").ReadableStream; + + interface ReadableStreamBYOBReader extends _ReadableStreamBYOBReader {} + /** + * `ReadableStreamBYOBReader` class is a global reference for `import { ReadableStreamBYOBReader } from 'node:stream/web'`. + * https://nodejs.org/api/globals.html#class-readablestreambyobreader + * @since v18.0.0 + */ + var ReadableStreamBYOBReader: typeof globalThis extends { onmessage: any; ReadableStreamBYOBReader: infer T } + ? T + : typeof import("stream/web").ReadableStreamBYOBReader; + + interface ReadableStreamBYOBRequest extends _ReadableStreamBYOBRequest {} + /** + * `ReadableStreamBYOBRequest` class is a global reference for `import { ReadableStreamBYOBRequest } from 'node:stream/web'`. + * https://nodejs.org/api/globals.html#class-readablestreambyobrequest + * @since v18.0.0 + */ + var ReadableStreamBYOBRequest: typeof globalThis extends { onmessage: any; ReadableStreamBYOBRequest: infer T } + ? T + : typeof import("stream/web").ReadableStreamBYOBRequest; + + interface ReadableStreamDefaultController extends _ReadableStreamDefaultController {} + /** + * `ReadableStreamDefaultController` class is a global reference for `import { ReadableStreamDefaultController } from 'node:stream/web'`. + * https://nodejs.org/api/globals.html#class-readablestreamdefaultcontroller + * @since v18.0.0 + */ + var ReadableStreamDefaultController: typeof globalThis extends + { onmessage: any; ReadableStreamDefaultController: infer T } ? T + : typeof import("stream/web").ReadableStreamDefaultController; + + interface ReadableStreamDefaultReader extends _ReadableStreamDefaultReader {} + /** + * `ReadableStreamDefaultReader` class is a global reference for `import { ReadableStreamDefaultReader } from 'node:stream/web'`. + * https://nodejs.org/api/globals.html#class-readablestreamdefaultreader + * @since v18.0.0 + */ + var ReadableStreamDefaultReader: typeof globalThis extends + { onmessage: any; ReadableStreamDefaultReader: infer T } ? T + : typeof import("stream/web").ReadableStreamDefaultReader; + + interface TextDecoderStream extends _TextDecoderStream {} + /** + * `TextDecoderStream` class is a global reference for `import { TextDecoderStream } from 'node:stream/web'`. + * https://nodejs.org/api/globals.html#class-textdecoderstream + * @since v18.0.0 + */ + var TextDecoderStream: typeof globalThis extends { onmessage: any; TextDecoderStream: infer T } ? T + : typeof import("stream/web").TextDecoderStream; + + interface TextEncoderStream extends _TextEncoderStream {} + /** + * `TextEncoderStream` class is a global reference for `import { TextEncoderStream } from 'node:stream/web'`. + * https://nodejs.org/api/globals.html#class-textencoderstream + * @since v18.0.0 + */ + var TextEncoderStream: typeof globalThis extends { onmessage: any; TextEncoderStream: infer T } ? T + : typeof import("stream/web").TextEncoderStream; + + interface TransformStream extends _TransformStream {} + /** + * `TransformStream` class is a global reference for `import { TransformStream } from 'node:stream/web'`. + * https://nodejs.org/api/globals.html#class-transformstream + * @since v18.0.0 + */ + var TransformStream: typeof globalThis extends { onmessage: any; TransformStream: infer T } ? T + : typeof import("stream/web").TransformStream; + + interface TransformStreamDefaultController extends _TransformStreamDefaultController {} + /** + * `TransformStreamDefaultController` class is a global reference for `import { TransformStreamDefaultController } from 'node:stream/web'`. + * https://nodejs.org/api/globals.html#class-transformstreamdefaultcontroller + * @since v18.0.0 + */ + var TransformStreamDefaultController: typeof globalThis extends + { onmessage: any; TransformStreamDefaultController: infer T } ? T + : typeof import("stream/web").TransformStreamDefaultController; + + interface WritableStream extends _WritableStream {} + /** + * `WritableStream` class is a global reference for `import { WritableStream } from 'node:stream/web'`. + * https://nodejs.org/api/globals.html#class-writablestream + * @since v18.0.0 + */ + var WritableStream: typeof globalThis extends { onmessage: any; WritableStream: infer T } ? T + : typeof import("stream/web").WritableStream; + + interface WritableStreamDefaultController extends _WritableStreamDefaultController {} + /** + * `WritableStreamDefaultController` class is a global reference for `import { WritableStreamDefaultController } from 'node:stream/web'`. + * https://nodejs.org/api/globals.html#class-writablestreamdefaultcontroller + * @since v18.0.0 + */ + var WritableStreamDefaultController: typeof globalThis extends + { onmessage: any; WritableStreamDefaultController: infer T } ? T + : typeof import("stream/web").WritableStreamDefaultController; + + interface WritableStreamDefaultWriter extends _WritableStreamDefaultWriter {} + /** + * `WritableStreamDefaultWriter` class is a global reference for `import { WritableStreamDefaultWriter } from 'node:stream/web'`. + * https://nodejs.org/api/globals.html#class-writablestreamdefaultwriter + * @since v18.0.0 + */ + var WritableStreamDefaultWriter: typeof globalThis extends + { onmessage: any; WritableStreamDefaultWriter: infer T } ? T + : typeof import("stream/web").WritableStreamDefaultWriter; + } +} +declare module "node:stream/web" { + export * from "stream/web"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/string_decoder.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/string_decoder.d.ts new file mode 100644 index 00000000..bcd64d5a --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/string_decoder.d.ts @@ -0,0 +1,67 @@ +/** + * The `node:string_decoder` module provides an API for decoding `Buffer` objects + * into strings in a manner that preserves encoded multi-byte UTF-8 and UTF-16 + * characters. It can be accessed using: + * + * ```js + * import { StringDecoder } from 'node:string_decoder'; + * ``` + * + * The following example shows the basic use of the `StringDecoder` class. + * + * ```js + * import { StringDecoder } from 'node:string_decoder'; + * const decoder = new StringDecoder('utf8'); + * + * const cent = Buffer.from([0xC2, 0xA2]); + * console.log(decoder.write(cent)); // Prints: ¢ + * + * const euro = Buffer.from([0xE2, 0x82, 0xAC]); + * console.log(decoder.write(euro)); // Prints: € + * ``` + * + * When a `Buffer` instance is written to the `StringDecoder` instance, an + * internal buffer is used to ensure that the decoded string does not contain + * any incomplete multibyte characters. These are held in the buffer until the + * next call to `stringDecoder.write()` or until `stringDecoder.end()` is called. + * + * In the following example, the three UTF-8 encoded bytes of the European Euro + * symbol (`€`) are written over three separate operations: + * + * ```js + * import { StringDecoder } from 'node:string_decoder'; + * const decoder = new StringDecoder('utf8'); + * + * decoder.write(Buffer.from([0xE2])); + * decoder.write(Buffer.from([0x82])); + * console.log(decoder.end(Buffer.from([0xAC]))); // Prints: € + * ``` + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/string_decoder.js) + */ +declare module "string_decoder" { + class StringDecoder { + constructor(encoding?: BufferEncoding); + /** + * Returns a decoded string, ensuring that any incomplete multibyte characters at + * the end of the `Buffer`, or `TypedArray`, or `DataView` are omitted from the + * returned string and stored in an internal buffer for the next call to `stringDecoder.write()` or `stringDecoder.end()`. + * @since v0.1.99 + * @param buffer The bytes to decode. + */ + write(buffer: string | NodeJS.ArrayBufferView): string; + /** + * Returns any remaining input stored in the internal buffer as a string. Bytes + * representing incomplete UTF-8 and UTF-16 characters will be replaced with + * substitution characters appropriate for the character encoding. + * + * If the `buffer` argument is provided, one final call to `stringDecoder.write()` is performed before returning the remaining input. + * After `end()` is called, the `stringDecoder` object can be reused for new input. + * @since v0.9.3 + * @param buffer The bytes to decode. + */ + end(buffer?: string | NodeJS.ArrayBufferView): string; + } +} +declare module "node:string_decoder" { + export * from "string_decoder"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/test.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/test.d.ts new file mode 100644 index 00000000..e1f103d7 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/test.d.ts @@ -0,0 +1,2339 @@ +/** + * The `node:test` module facilitates the creation of JavaScript tests. + * To access it: + * + * ```js + * import test from 'node:test'; + * ``` + * + * This module is only available under the `node:` scheme. The following will not + * work: + * + * ```js + * import test from 'node:test'; + * ``` + * + * Tests created via the `test` module consist of a single function that is + * processed in one of three ways: + * + * 1. A synchronous function that is considered failing if it throws an exception, + * and is considered passing otherwise. + * 2. A function that returns a `Promise` that is considered failing if the `Promise` rejects, and is considered passing if the `Promise` fulfills. + * 3. A function that receives a callback function. If the callback receives any + * truthy value as its first argument, the test is considered failing. If a + * falsy value is passed as the first argument to the callback, the test is + * considered passing. If the test function receives a callback function and + * also returns a `Promise`, the test will fail. + * + * The following example illustrates how tests are written using the `test` module. + * + * ```js + * test('synchronous passing test', (t) => { + * // This test passes because it does not throw an exception. + * assert.strictEqual(1, 1); + * }); + * + * test('synchronous failing test', (t) => { + * // This test fails because it throws an exception. + * assert.strictEqual(1, 2); + * }); + * + * test('asynchronous passing test', async (t) => { + * // This test passes because the Promise returned by the async + * // function is settled and not rejected. + * assert.strictEqual(1, 1); + * }); + * + * test('asynchronous failing test', async (t) => { + * // This test fails because the Promise returned by the async + * // function is rejected. + * assert.strictEqual(1, 2); + * }); + * + * test('failing test using Promises', (t) => { + * // Promises can be used directly as well. + * return new Promise((resolve, reject) => { + * setImmediate(() => { + * reject(new Error('this will cause the test to fail')); + * }); + * }); + * }); + * + * test('callback passing test', (t, done) => { + * // done() is the callback function. When the setImmediate() runs, it invokes + * // done() with no arguments. + * setImmediate(done); + * }); + * + * test('callback failing test', (t, done) => { + * // When the setImmediate() runs, done() is invoked with an Error object and + * // the test fails. + * setImmediate(() => { + * done(new Error('callback failure')); + * }); + * }); + * ``` + * + * If any tests fail, the process exit code is set to `1`. + * @since v18.0.0, v16.17.0 + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/test.js) + */ +declare module "node:test" { + import { AssertMethodNames } from "node:assert"; + import { Readable } from "node:stream"; + import TestFn = test.TestFn; + import TestOptions = test.TestOptions; + /** + * The `test()` function is the value imported from the `test` module. Each + * invocation of this function results in reporting the test to the `TestsStream`. + * + * The `TestContext` object passed to the `fn` argument can be used to perform + * actions related to the current test. Examples include skipping the test, adding + * additional diagnostic information, or creating subtests. + * + * `test()` returns a `Promise` that fulfills once the test completes. + * if `test()` is called within a suite, it fulfills immediately. + * The return value can usually be discarded for top level tests. + * However, the return value from subtests should be used to prevent the parent + * test from finishing first and cancelling the subtest + * as shown in the following example. + * + * ```js + * test('top level test', async (t) => { + * // The setTimeout() in the following subtest would cause it to outlive its + * // parent test if 'await' is removed on the next line. Once the parent test + * // completes, it will cancel any outstanding subtests. + * await t.test('longer running subtest', async (t) => { + * return new Promise((resolve, reject) => { + * setTimeout(resolve, 1000); + * }); + * }); + * }); + * ``` + * + * The `timeout` option can be used to fail the test if it takes longer than `timeout` milliseconds to complete. However, it is not a reliable mechanism for + * canceling tests because a running test might block the application thread and + * thus prevent the scheduled cancellation. + * @since v18.0.0, v16.17.0 + * @param name The name of the test, which is displayed when reporting test results. + * Defaults to the `name` property of `fn`, or `''` if `fn` does not have a name. + * @param options Configuration options for the test. + * @param fn The function under test. The first argument to this function is a {@link TestContext} object. + * If the test uses callbacks, the callback function is passed as the second argument. + * @return Fulfilled with `undefined` once the test completes, or immediately if the test runs within a suite. + */ + function test(name?: string, fn?: TestFn): Promise; + function test(name?: string, options?: TestOptions, fn?: TestFn): Promise; + function test(options?: TestOptions, fn?: TestFn): Promise; + function test(fn?: TestFn): Promise; + namespace test { + export { test }; + export { suite as describe, test as it }; + } + namespace test { + /** + * **Note:** `shard` is used to horizontally parallelize test running across + * machines or processes, ideal for large-scale executions across varied + * environments. It's incompatible with `watch` mode, tailored for rapid + * code iteration by automatically rerunning tests on file changes. + * + * ```js + * import { tap } from 'node:test/reporters'; + * import { run } from 'node:test'; + * import process from 'node:process'; + * import path from 'node:path'; + * + * run({ files: [path.resolve('./tests/test.js')] }) + * .compose(tap) + * .pipe(process.stdout); + * ``` + * @since v18.9.0, v16.19.0 + * @param options Configuration options for running tests. + */ + function run(options?: RunOptions): TestsStream; + /** + * The `suite()` function is imported from the `node:test` module. + * @param name The name of the suite, which is displayed when reporting test results. + * Defaults to the `name` property of `fn`, or `''` if `fn` does not have a name. + * @param options Configuration options for the suite. This supports the same options as {@link test}. + * @param fn The suite function declaring nested tests and suites. The first argument to this function is a {@link SuiteContext} object. + * @return Immediately fulfilled with `undefined`. + * @since v20.13.0 + */ + function suite(name?: string, options?: TestOptions, fn?: SuiteFn): Promise; + function suite(name?: string, fn?: SuiteFn): Promise; + function suite(options?: TestOptions, fn?: SuiteFn): Promise; + function suite(fn?: SuiteFn): Promise; + namespace suite { + /** + * Shorthand for skipping a suite. This is the same as calling {@link suite} with `options.skip` set to `true`. + * @since v20.13.0 + */ + function skip(name?: string, options?: TestOptions, fn?: SuiteFn): Promise; + function skip(name?: string, fn?: SuiteFn): Promise; + function skip(options?: TestOptions, fn?: SuiteFn): Promise; + function skip(fn?: SuiteFn): Promise; + /** + * Shorthand for marking a suite as `TODO`. This is the same as calling {@link suite} with `options.todo` set to `true`. + * @since v20.13.0 + */ + function todo(name?: string, options?: TestOptions, fn?: SuiteFn): Promise; + function todo(name?: string, fn?: SuiteFn): Promise; + function todo(options?: TestOptions, fn?: SuiteFn): Promise; + function todo(fn?: SuiteFn): Promise; + /** + * Shorthand for marking a suite as `only`. This is the same as calling {@link suite} with `options.only` set to `true`. + * @since v20.13.0 + */ + function only(name?: string, options?: TestOptions, fn?: SuiteFn): Promise; + function only(name?: string, fn?: SuiteFn): Promise; + function only(options?: TestOptions, fn?: SuiteFn): Promise; + function only(fn?: SuiteFn): Promise; + } + /** + * Shorthand for skipping a test. This is the same as calling {@link test} with `options.skip` set to `true`. + * @since v20.2.0 + */ + function skip(name?: string, options?: TestOptions, fn?: TestFn): Promise; + function skip(name?: string, fn?: TestFn): Promise; + function skip(options?: TestOptions, fn?: TestFn): Promise; + function skip(fn?: TestFn): Promise; + /** + * Shorthand for marking a test as `TODO`. This is the same as calling {@link test} with `options.todo` set to `true`. + * @since v20.2.0 + */ + function todo(name?: string, options?: TestOptions, fn?: TestFn): Promise; + function todo(name?: string, fn?: TestFn): Promise; + function todo(options?: TestOptions, fn?: TestFn): Promise; + function todo(fn?: TestFn): Promise; + /** + * Shorthand for marking a test as `only`. This is the same as calling {@link test} with `options.only` set to `true`. + * @since v20.2.0 + */ + function only(name?: string, options?: TestOptions, fn?: TestFn): Promise; + function only(name?: string, fn?: TestFn): Promise; + function only(options?: TestOptions, fn?: TestFn): Promise; + function only(fn?: TestFn): Promise; + /** + * The type of a function passed to {@link test}. The first argument to this function is a {@link TestContext} object. + * If the test uses callbacks, the callback function is passed as the second argument. + */ + type TestFn = (t: TestContext, done: (result?: any) => void) => void | Promise; + /** + * The type of a suite test function. The argument to this function is a {@link SuiteContext} object. + */ + type SuiteFn = (s: SuiteContext) => void | Promise; + interface TestShard { + /** + * A positive integer between 1 and `total` that specifies the index of the shard to run. + */ + index: number; + /** + * A positive integer that specifies the total number of shards to split the test files to. + */ + total: number; + } + interface RunOptions { + /** + * If a number is provided, then that many test processes would run in parallel, where each process corresponds to one test file. + * If `true`, it would run `os.availableParallelism() - 1` test files in parallel. If `false`, it would only run one test file at a time. + * @default false + */ + concurrency?: number | boolean | undefined; + /** + * Specifies the current working directory to be used by the test runner. + * Serves as the base path for resolving files according to the + * [test runner execution model](https://nodejs.org/docs/latest-v24.x/api/test.html#test-runner-execution-model). + * @since v23.0.0 + * @default process.cwd() + */ + cwd?: string | undefined; + /** + * An array containing the list of files to run. If omitted, files are run according to the + * [test runner execution model](https://nodejs.org/docs/latest-v24.x/api/test.html#test-runner-execution-model). + */ + files?: readonly string[] | undefined; + /** + * Configures the test runner to exit the process once all known + * tests have finished executing even if the event loop would + * otherwise remain active. + * @default false + */ + forceExit?: boolean | undefined; + /** + * An array containing the list of glob patterns to match test files. + * This option cannot be used together with `files`. If omitted, files are run according to the + * [test runner execution model](https://nodejs.org/docs/latest-v24.x/api/test.html#test-runner-execution-model). + * @since v22.6.0 + */ + globPatterns?: readonly string[] | undefined; + /** + * Sets inspector port of test child process. + * This can be a number, or a function that takes no arguments and returns a + * number. If a nullish value is provided, each process gets its own port, + * incremented from the primary's `process.debugPort`. This option is ignored + * if the `isolation` option is set to `'none'` as no child processes are + * spawned. + * @default undefined + */ + inspectPort?: number | (() => number) | undefined; + /** + * Configures the type of test isolation. If set to + * `'process'`, each test file is run in a separate child process. If set to + * `'none'`, all test files run in the current process. + * @default 'process' + * @since v22.8.0 + */ + isolation?: "process" | "none" | undefined; + /** + * If truthy, the test context will only run tests that have the `only` option set + */ + only?: boolean | undefined; + /** + * A function that accepts the `TestsStream` instance and can be used to setup listeners before any tests are run. + * @default undefined + */ + setup?: ((reporter: TestsStream) => void | Promise) | undefined; + /** + * An array of CLI flags to pass to the `node` executable when + * spawning the subprocesses. This option has no effect when `isolation` is `'none`'. + * @since v22.10.0 + * @default [] + */ + execArgv?: readonly string[] | undefined; + /** + * An array of CLI flags to pass to each test file when spawning the + * subprocesses. This option has no effect when `isolation` is `'none'`. + * @since v22.10.0 + * @default [] + */ + argv?: readonly string[] | undefined; + /** + * Allows aborting an in-progress test execution. + */ + signal?: AbortSignal | undefined; + /** + * If provided, only run tests whose name matches the provided pattern. + * Strings are interpreted as JavaScript regular expressions. + * @default undefined + */ + testNamePatterns?: string | RegExp | ReadonlyArray | undefined; + /** + * A String, RegExp or a RegExp Array, that can be used to exclude running tests whose + * name matches the provided pattern. Test name patterns are interpreted as JavaScript + * regular expressions. For each test that is executed, any corresponding test hooks, + * such as `beforeEach()`, are also run. + * @default undefined + * @since v22.1.0 + */ + testSkipPatterns?: string | RegExp | ReadonlyArray | undefined; + /** + * The number of milliseconds after which the test execution will fail. + * If unspecified, subtests inherit this value from their parent. + * @default Infinity + */ + timeout?: number | undefined; + /** + * Whether to run in watch mode or not. + * @default false + */ + watch?: boolean | undefined; + /** + * Running tests in a specific shard. + * @default undefined + */ + shard?: TestShard | undefined; + /** + * A file path where the test runner will + * store the state of the tests to allow rerunning only the failed tests on a next run. + * @since v24.7.0 + * @default undefined + */ + rerunFailuresFilePath?: string | undefined; + /** + * enable [code coverage](https://nodejs.org/docs/latest-v24.x/api/test.html#collecting-code-coverage) collection. + * @since v22.10.0 + * @default false + */ + coverage?: boolean | undefined; + /** + * Excludes specific files from code coverage + * using a glob pattern, which can match both absolute and relative file paths. + * This property is only applicable when `coverage` was set to `true`. + * If both `coverageExcludeGlobs` and `coverageIncludeGlobs` are provided, + * files must meet **both** criteria to be included in the coverage report. + * @since v22.10.0 + * @default undefined + */ + coverageExcludeGlobs?: string | readonly string[] | undefined; + /** + * Includes specific files in code coverage + * using a glob pattern, which can match both absolute and relative file paths. + * This property is only applicable when `coverage` was set to `true`. + * If both `coverageExcludeGlobs` and `coverageIncludeGlobs` are provided, + * files must meet **both** criteria to be included in the coverage report. + * @since v22.10.0 + * @default undefined + */ + coverageIncludeGlobs?: string | readonly string[] | undefined; + /** + * Require a minimum percent of covered lines. If code + * coverage does not reach the threshold specified, the process will exit with code `1`. + * @since v22.10.0 + * @default 0 + */ + lineCoverage?: number | undefined; + /** + * Require a minimum percent of covered branches. If code + * coverage does not reach the threshold specified, the process will exit with code `1`. + * @since v22.10.0 + * @default 0 + */ + branchCoverage?: number | undefined; + /** + * Require a minimum percent of covered functions. If code + * coverage does not reach the threshold specified, the process will exit with code `1`. + * @since v22.10.0 + * @default 0 + */ + functionCoverage?: number | undefined; + } + /** + * A successful call to `run()` will return a new `TestsStream` object, streaming a series of events representing the execution of the tests. + * + * Some of the events are guaranteed to be emitted in the same order as the tests are defined, while others are emitted in the order that the tests execute. + * @since v18.9.0, v16.19.0 + */ + interface TestsStream extends Readable { + addListener(event: "test:coverage", listener: (data: EventData.TestCoverage) => void): this; + addListener(event: "test:complete", listener: (data: EventData.TestComplete) => void): this; + addListener(event: "test:dequeue", listener: (data: EventData.TestDequeue) => void): this; + addListener(event: "test:diagnostic", listener: (data: EventData.TestDiagnostic) => void): this; + addListener(event: "test:enqueue", listener: (data: EventData.TestEnqueue) => void): this; + addListener(event: "test:fail", listener: (data: EventData.TestFail) => void): this; + addListener(event: "test:pass", listener: (data: EventData.TestPass) => void): this; + addListener(event: "test:plan", listener: (data: EventData.TestPlan) => void): this; + addListener(event: "test:start", listener: (data: EventData.TestStart) => void): this; + addListener(event: "test:stderr", listener: (data: EventData.TestStderr) => void): this; + addListener(event: "test:stdout", listener: (data: EventData.TestStdout) => void): this; + addListener(event: "test:summary", listener: (data: EventData.TestSummary) => void): this; + addListener(event: "test:watch:drained", listener: () => void): this; + addListener(event: "test:watch:restarted", listener: () => void): this; + addListener(event: string, listener: (...args: any[]) => void): this; + emit(event: "test:coverage", data: EventData.TestCoverage): boolean; + emit(event: "test:complete", data: EventData.TestComplete): boolean; + emit(event: "test:dequeue", data: EventData.TestDequeue): boolean; + emit(event: "test:diagnostic", data: EventData.TestDiagnostic): boolean; + emit(event: "test:enqueue", data: EventData.TestEnqueue): boolean; + emit(event: "test:fail", data: EventData.TestFail): boolean; + emit(event: "test:pass", data: EventData.TestPass): boolean; + emit(event: "test:plan", data: EventData.TestPlan): boolean; + emit(event: "test:start", data: EventData.TestStart): boolean; + emit(event: "test:stderr", data: EventData.TestStderr): boolean; + emit(event: "test:stdout", data: EventData.TestStdout): boolean; + emit(event: "test:summary", data: EventData.TestSummary): boolean; + emit(event: "test:watch:drained"): boolean; + emit(event: "test:watch:restarted"): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "test:coverage", listener: (data: EventData.TestCoverage) => void): this; + on(event: "test:complete", listener: (data: EventData.TestComplete) => void): this; + on(event: "test:dequeue", listener: (data: EventData.TestDequeue) => void): this; + on(event: "test:diagnostic", listener: (data: EventData.TestDiagnostic) => void): this; + on(event: "test:enqueue", listener: (data: EventData.TestEnqueue) => void): this; + on(event: "test:fail", listener: (data: EventData.TestFail) => void): this; + on(event: "test:pass", listener: (data: EventData.TestPass) => void): this; + on(event: "test:plan", listener: (data: EventData.TestPlan) => void): this; + on(event: "test:start", listener: (data: EventData.TestStart) => void): this; + on(event: "test:stderr", listener: (data: EventData.TestStderr) => void): this; + on(event: "test:stdout", listener: (data: EventData.TestStdout) => void): this; + on(event: "test:summary", listener: (data: EventData.TestSummary) => void): this; + on(event: "test:watch:drained", listener: () => void): this; + on(event: "test:watch:restarted", listener: () => void): this; + on(event: string, listener: (...args: any[]) => void): this; + once(event: "test:coverage", listener: (data: EventData.TestCoverage) => void): this; + once(event: "test:complete", listener: (data: EventData.TestComplete) => void): this; + once(event: "test:dequeue", listener: (data: EventData.TestDequeue) => void): this; + once(event: "test:diagnostic", listener: (data: EventData.TestDiagnostic) => void): this; + once(event: "test:enqueue", listener: (data: EventData.TestEnqueue) => void): this; + once(event: "test:fail", listener: (data: EventData.TestFail) => void): this; + once(event: "test:pass", listener: (data: EventData.TestPass) => void): this; + once(event: "test:plan", listener: (data: EventData.TestPlan) => void): this; + once(event: "test:start", listener: (data: EventData.TestStart) => void): this; + once(event: "test:stderr", listener: (data: EventData.TestStderr) => void): this; + once(event: "test:stdout", listener: (data: EventData.TestStdout) => void): this; + once(event: "test:summary", listener: (data: EventData.TestSummary) => void): this; + once(event: "test:watch:drained", listener: () => void): this; + once(event: "test:watch:restarted", listener: () => void): this; + once(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "test:coverage", listener: (data: EventData.TestCoverage) => void): this; + prependListener(event: "test:complete", listener: (data: EventData.TestComplete) => void): this; + prependListener(event: "test:dequeue", listener: (data: EventData.TestDequeue) => void): this; + prependListener(event: "test:diagnostic", listener: (data: EventData.TestDiagnostic) => void): this; + prependListener(event: "test:enqueue", listener: (data: EventData.TestEnqueue) => void): this; + prependListener(event: "test:fail", listener: (data: EventData.TestFail) => void): this; + prependListener(event: "test:pass", listener: (data: EventData.TestPass) => void): this; + prependListener(event: "test:plan", listener: (data: EventData.TestPlan) => void): this; + prependListener(event: "test:start", listener: (data: EventData.TestStart) => void): this; + prependListener(event: "test:stderr", listener: (data: EventData.TestStderr) => void): this; + prependListener(event: "test:stdout", listener: (data: EventData.TestStdout) => void): this; + prependListener(event: "test:summary", listener: (data: EventData.TestSummary) => void): this; + prependListener(event: "test:watch:drained", listener: () => void): this; + prependListener(event: "test:watch:restarted", listener: () => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "test:coverage", listener: (data: EventData.TestCoverage) => void): this; + prependOnceListener(event: "test:complete", listener: (data: EventData.TestComplete) => void): this; + prependOnceListener(event: "test:dequeue", listener: (data: EventData.TestDequeue) => void): this; + prependOnceListener(event: "test:diagnostic", listener: (data: EventData.TestDiagnostic) => void): this; + prependOnceListener(event: "test:enqueue", listener: (data: EventData.TestEnqueue) => void): this; + prependOnceListener(event: "test:fail", listener: (data: EventData.TestFail) => void): this; + prependOnceListener(event: "test:pass", listener: (data: EventData.TestPass) => void): this; + prependOnceListener(event: "test:plan", listener: (data: EventData.TestPlan) => void): this; + prependOnceListener(event: "test:start", listener: (data: EventData.TestStart) => void): this; + prependOnceListener(event: "test:stderr", listener: (data: EventData.TestStderr) => void): this; + prependOnceListener(event: "test:stdout", listener: (data: EventData.TestStdout) => void): this; + prependOnceListener(event: "test:summary", listener: (data: EventData.TestSummary) => void): this; + prependOnceListener(event: "test:watch:drained", listener: () => void): this; + prependOnceListener(event: "test:watch:restarted", listener: () => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + } + namespace EventData { + interface Error extends globalThis.Error { + cause: globalThis.Error; + } + interface LocationInfo { + /** + * The column number where the test is defined, or + * `undefined` if the test was run through the REPL. + */ + column?: number; + /** + * The path of the test file, `undefined` if test was run through the REPL. + */ + file?: string; + /** + * The line number where the test is defined, or `undefined` if the test was run through the REPL. + */ + line?: number; + } + interface TestDiagnostic extends LocationInfo { + /** + * The diagnostic message. + */ + message: string; + /** + * The nesting level of the test. + */ + nesting: number; + /** + * The severity level of the diagnostic message. + * Possible values are: + * * `'info'`: Informational messages. + * * `'warn'`: Warnings. + * * `'error'`: Errors. + */ + level: "info" | "warn" | "error"; + } + interface TestCoverage { + /** + * An object containing the coverage report. + */ + summary: { + /** + * An array of coverage reports for individual files. + */ + files: Array<{ + /** + * The absolute path of the file. + */ + path: string; + /** + * The total number of lines. + */ + totalLineCount: number; + /** + * The total number of branches. + */ + totalBranchCount: number; + /** + * The total number of functions. + */ + totalFunctionCount: number; + /** + * The number of covered lines. + */ + coveredLineCount: number; + /** + * The number of covered branches. + */ + coveredBranchCount: number; + /** + * The number of covered functions. + */ + coveredFunctionCount: number; + /** + * The percentage of lines covered. + */ + coveredLinePercent: number; + /** + * The percentage of branches covered. + */ + coveredBranchPercent: number; + /** + * The percentage of functions covered. + */ + coveredFunctionPercent: number; + /** + * An array of functions representing function coverage. + */ + functions: Array<{ + /** + * The name of the function. + */ + name: string; + /** + * The line number where the function is defined. + */ + line: number; + /** + * The number of times the function was called. + */ + count: number; + }>; + /** + * An array of branches representing branch coverage. + */ + branches: Array<{ + /** + * The line number where the branch is defined. + */ + line: number; + /** + * The number of times the branch was taken. + */ + count: number; + }>; + /** + * An array of lines representing line numbers and the number of times they were covered. + */ + lines: Array<{ + /** + * The line number. + */ + line: number; + /** + * The number of times the line was covered. + */ + count: number; + }>; + }>; + /** + * An object containing whether or not the coverage for + * each coverage type. + * @since v22.9.0 + */ + thresholds: { + /** + * The function coverage threshold. + */ + function: number; + /** + * The branch coverage threshold. + */ + branch: number; + /** + * The line coverage threshold. + */ + line: number; + }; + /** + * An object containing a summary of coverage for all files. + */ + totals: { + /** + * The total number of lines. + */ + totalLineCount: number; + /** + * The total number of branches. + */ + totalBranchCount: number; + /** + * The total number of functions. + */ + totalFunctionCount: number; + /** + * The number of covered lines. + */ + coveredLineCount: number; + /** + * The number of covered branches. + */ + coveredBranchCount: number; + /** + * The number of covered functions. + */ + coveredFunctionCount: number; + /** + * The percentage of lines covered. + */ + coveredLinePercent: number; + /** + * The percentage of branches covered. + */ + coveredBranchPercent: number; + /** + * The percentage of functions covered. + */ + coveredFunctionPercent: number; + }; + /** + * The working directory when code coverage began. This + * is useful for displaying relative path names in case + * the tests changed the working directory of the Node.js process. + */ + workingDirectory: string; + }; + /** + * The nesting level of the test. + */ + nesting: number; + } + interface TestComplete extends LocationInfo { + /** + * Additional execution metadata. + */ + details: { + /** + * Whether the test passed or not. + */ + passed: boolean; + /** + * The duration of the test in milliseconds. + */ + duration_ms: number; + /** + * An error wrapping the error thrown by the test if it did not pass. + */ + error?: Error; + /** + * The type of the test, used to denote whether this is a suite. + */ + type?: "suite" | "test"; + }; + /** + * The test name. + */ + name: string; + /** + * The nesting level of the test. + */ + nesting: number; + /** + * The ordinal number of the test. + */ + testNumber: number; + /** + * Present if `context.todo` is called. + */ + todo?: string | boolean; + /** + * Present if `context.skip` is called. + */ + skip?: string | boolean; + } + interface TestDequeue extends LocationInfo { + /** + * The test name. + */ + name: string; + /** + * The nesting level of the test. + */ + nesting: number; + /** + * The test type. Either `'suite'` or `'test'`. + * @since v22.15.0 + */ + type: "suite" | "test"; + } + interface TestEnqueue extends LocationInfo { + /** + * The test name. + */ + name: string; + /** + * The nesting level of the test. + */ + nesting: number; + /** + * The test type. Either `'suite'` or `'test'`. + * @since v22.15.0 + */ + type: "suite" | "test"; + } + interface TestFail extends LocationInfo { + /** + * Additional execution metadata. + */ + details: { + /** + * The duration of the test in milliseconds. + */ + duration_ms: number; + /** + * An error wrapping the error thrown by the test. + */ + error: Error; + /** + * The type of the test, used to denote whether this is a suite. + * @since v20.0.0, v19.9.0, v18.17.0 + */ + type?: "suite" | "test"; + /** + * The attempt number of the test run, + * present only when using the `--test-rerun-failures` flag. + * @since v24.7.0 + */ + attempt?: number; + }; + /** + * The test name. + */ + name: string; + /** + * The nesting level of the test. + */ + nesting: number; + /** + * The ordinal number of the test. + */ + testNumber: number; + /** + * Present if `context.todo` is called. + */ + todo?: string | boolean; + /** + * Present if `context.skip` is called. + */ + skip?: string | boolean; + } + interface TestPass extends LocationInfo { + /** + * Additional execution metadata. + */ + details: { + /** + * The duration of the test in milliseconds. + */ + duration_ms: number; + /** + * The type of the test, used to denote whether this is a suite. + * @since 20.0.0, 19.9.0, 18.17.0 + */ + type?: "suite" | "test"; + /** + * The attempt number of the test run, + * present only when using the `--test-rerun-failures` flag. + * @since v24.7.0 + */ + attempt?: number; + /** + * The attempt number the test passed on, + * present only when using the `--test-rerun-failures` flag. + * @since v24.7.0 + */ + passed_on_attempt?: number; + }; + /** + * The test name. + */ + name: string; + /** + * The nesting level of the test. + */ + nesting: number; + /** + * The ordinal number of the test. + */ + testNumber: number; + /** + * Present if `context.todo` is called. + */ + todo?: string | boolean; + /** + * Present if `context.skip` is called. + */ + skip?: string | boolean; + } + interface TestPlan extends LocationInfo { + /** + * The nesting level of the test. + */ + nesting: number; + /** + * The number of subtests that have ran. + */ + count: number; + } + interface TestStart extends LocationInfo { + /** + * The test name. + */ + name: string; + /** + * The nesting level of the test. + */ + nesting: number; + } + interface TestStderr { + /** + * The path of the test file. + */ + file: string; + /** + * The message written to `stderr`. + */ + message: string; + } + interface TestStdout { + /** + * The path of the test file. + */ + file: string; + /** + * The message written to `stdout`. + */ + message: string; + } + interface TestSummary { + /** + * An object containing the counts of various test results. + */ + counts: { + /** + * The total number of cancelled tests. + */ + cancelled: number; + /** + * The total number of passed tests. + */ + passed: number; + /** + * The total number of skipped tests. + */ + skipped: number; + /** + * The total number of suites run. + */ + suites: number; + /** + * The total number of tests run, excluding suites. + */ + tests: number; + /** + * The total number of TODO tests. + */ + todo: number; + /** + * The total number of top level tests and suites. + */ + topLevel: number; + }; + /** + * The duration of the test run in milliseconds. + */ + duration_ms: number; + /** + * The path of the test file that generated the + * summary. If the summary corresponds to multiple files, this value is + * `undefined`. + */ + file: string | undefined; + /** + * Indicates whether or not the test run is considered + * successful or not. If any error condition occurs, such as a failing test or + * unmet coverage threshold, this value will be set to `false`. + */ + success: boolean; + } + } + /** + * An instance of `TestContext` is passed to each test function in order to + * interact with the test runner. However, the `TestContext` constructor is not + * exposed as part of the API. + * @since v18.0.0, v16.17.0 + */ + interface TestContext { + /** + * An object containing assertion methods bound to the test context. + * The top-level functions from the `node:assert` module are exposed here for the purpose of creating test plans. + * + * **Note:** Some of the functions from `node:assert` contain type assertions. If these are called via the + * TestContext `assert` object, then the context parameter in the test's function signature **must be explicitly typed** + * (ie. the parameter must have a type annotation), otherwise an error will be raised by the TypeScript compiler: + * ```ts + * import { test, type TestContext } from 'node:test'; + * + * // The test function's context parameter must have a type annotation. + * test('example', (t: TestContext) => { + * t.assert.deepStrictEqual(actual, expected); + * }); + * + * // Omitting the type annotation will result in a compilation error. + * test('example', t => { + * t.assert.deepStrictEqual(actual, expected); // Error: 't' needs an explicit type annotation. + * }); + * ``` + * @since v22.2.0, v20.15.0 + */ + readonly assert: TestContextAssert; + readonly attempt: number; + /** + * This function is used to create a hook running before subtest of the current test. + * @param fn The hook function. The first argument to this function is a `TestContext` object. + * If the hook uses callbacks, the callback function is passed as the second argument. + * @param options Configuration options for the hook. + * @since v20.1.0, v18.17.0 + */ + before(fn?: TestContextHookFn, options?: HookOptions): void; + /** + * This function is used to create a hook running before each subtest of the current test. + * @param fn The hook function. The first argument to this function is a `TestContext` object. + * If the hook uses callbacks, the callback function is passed as the second argument. + * @param options Configuration options for the hook. + * @since v18.8.0 + */ + beforeEach(fn?: TestContextHookFn, options?: HookOptions): void; + /** + * This function is used to create a hook that runs after the current test finishes. + * @param fn The hook function. The first argument to this function is a `TestContext` object. + * If the hook uses callbacks, the callback function is passed as the second argument. + * @param options Configuration options for the hook. + * @since v18.13.0 + */ + after(fn?: TestContextHookFn, options?: HookOptions): void; + /** + * This function is used to create a hook running after each subtest of the current test. + * @param fn The hook function. The first argument to this function is a `TestContext` object. + * If the hook uses callbacks, the callback function is passed as the second argument. + * @param options Configuration options for the hook. + * @since v18.8.0 + */ + afterEach(fn?: TestContextHookFn, options?: HookOptions): void; + /** + * This function is used to write diagnostics to the output. Any diagnostic + * information is included at the end of the test's results. This function does + * not return a value. + * + * ```js + * test('top level test', (t) => { + * t.diagnostic('A diagnostic message'); + * }); + * ``` + * @since v18.0.0, v16.17.0 + * @param message Message to be reported. + */ + diagnostic(message: string): void; + /** + * The absolute path of the test file that created the current test. If a test file imports + * additional modules that generate tests, the imported tests will return the path of the root test file. + * @since v22.6.0 + */ + readonly filePath: string | undefined; + /** + * The name of the test and each of its ancestors, separated by `>`. + * @since v22.3.0 + */ + readonly fullName: string; + /** + * The name of the test. + * @since v18.8.0, v16.18.0 + */ + readonly name: string; + /** + * This function is used to set the number of assertions and subtests that are expected to run + * within the test. If the number of assertions and subtests that run does not match the + * expected count, the test will fail. + * + * > Note: To make sure assertions are tracked, `t.assert` must be used instead of `assert` directly. + * + * ```js + * test('top level test', (t) => { + * t.plan(2); + * t.assert.ok('some relevant assertion here'); + * t.test('subtest', () => {}); + * }); + * ``` + * + * When working with asynchronous code, the `plan` function can be used to ensure that the + * correct number of assertions are run: + * + * ```js + * test('planning with streams', (t, done) => { + * function* generate() { + * yield 'a'; + * yield 'b'; + * yield 'c'; + * } + * const expected = ['a', 'b', 'c']; + * t.plan(expected.length); + * const stream = Readable.from(generate()); + * stream.on('data', (chunk) => { + * t.assert.strictEqual(chunk, expected.shift()); + * }); + * + * stream.on('end', () => { + * done(); + * }); + * }); + * ``` + * + * When using the `wait` option, you can control how long the test will wait for the expected assertions. + * For example, setting a maximum wait time ensures that the test will wait for asynchronous assertions + * to complete within the specified timeframe: + * + * ```js + * test('plan with wait: 2000 waits for async assertions', (t) => { + * t.plan(1, { wait: 2000 }); // Waits for up to 2 seconds for the assertion to complete. + * + * const asyncActivity = () => { + * setTimeout(() => { + * * t.assert.ok(true, 'Async assertion completed within the wait time'); + * }, 1000); // Completes after 1 second, within the 2-second wait time. + * }; + * + * asyncActivity(); // The test will pass because the assertion is completed in time. + * }); + * ``` + * + * Note: If a `wait` timeout is specified, it begins counting down only after the test function finishes executing. + * @since v22.2.0 + */ + plan(count: number, options?: TestContextPlanOptions): void; + /** + * If `shouldRunOnlyTests` is truthy, the test context will only run tests that + * have the `only` option set. Otherwise, all tests are run. If Node.js was not + * started with the `--test-only` command-line option, this function is a + * no-op. + * + * ```js + * test('top level test', (t) => { + * // The test context can be set to run subtests with the 'only' option. + * t.runOnly(true); + * return Promise.all([ + * t.test('this subtest is now skipped'), + * t.test('this subtest is run', { only: true }), + * ]); + * }); + * ``` + * @since v18.0.0, v16.17.0 + * @param shouldRunOnlyTests Whether or not to run `only` tests. + */ + runOnly(shouldRunOnlyTests: boolean): void; + /** + * ```js + * test('top level test', async (t) => { + * await fetch('some/uri', { signal: t.signal }); + * }); + * ``` + * @since v18.7.0, v16.17.0 + */ + readonly signal: AbortSignal; + /** + * This function causes the test's output to indicate the test as skipped. If `message` is provided, it is included in the output. Calling `skip()` does + * not terminate execution of the test function. This function does not return a + * value. + * + * ```js + * test('top level test', (t) => { + * // Make sure to return here as well if the test contains additional logic. + * t.skip('this is skipped'); + * }); + * ``` + * @since v18.0.0, v16.17.0 + * @param message Optional skip message. + */ + skip(message?: string): void; + /** + * This function adds a `TODO` directive to the test's output. If `message` is + * provided, it is included in the output. Calling `todo()` does not terminate + * execution of the test function. This function does not return a value. + * + * ```js + * test('top level test', (t) => { + * // This test is marked as `TODO` + * t.todo('this is a todo'); + * }); + * ``` + * @since v18.0.0, v16.17.0 + * @param message Optional `TODO` message. + */ + todo(message?: string): void; + /** + * This function is used to create subtests under the current test. This function behaves in + * the same fashion as the top level {@link test} function. + * @since v18.0.0 + * @param name The name of the test, which is displayed when reporting test results. + * Defaults to the `name` property of `fn`, or `''` if `fn` does not have a name. + * @param options Configuration options for the test. + * @param fn The function under test. This first argument to this function is a {@link TestContext} object. + * If the test uses callbacks, the callback function is passed as the second argument. + * @returns A {@link Promise} resolved with `undefined` once the test completes. + */ + test: typeof test; + /** + * This method polls a `condition` function until that function either returns + * successfully or the operation times out. + * @since v22.14.0 + * @param condition An assertion function that is invoked + * periodically until it completes successfully or the defined polling timeout + * elapses. Successful completion is defined as not throwing or rejecting. This + * function does not accept any arguments, and is allowed to return any value. + * @param options An optional configuration object for the polling operation. + * @returns Fulfilled with the value returned by `condition`. + */ + waitFor(condition: () => T, options?: TestContextWaitForOptions): Promise>; + /** + * Each test provides its own MockTracker instance. + */ + readonly mock: MockTracker; + } + interface TestContextAssert extends Pick { + /** + * This function serializes `value` and writes it to the file specified by `path`. + * + * ```js + * test('snapshot test with default serialization', (t) => { + * t.assert.fileSnapshot({ value1: 1, value2: 2 }, './snapshots/snapshot.json'); + * }); + * ``` + * + * This function differs from `context.assert.snapshot()` in the following ways: + * + * * The snapshot file path is explicitly provided by the user. + * * Each snapshot file is limited to a single snapshot value. + * * No additional escaping is performed by the test runner. + * + * These differences allow snapshot files to better support features such as syntax + * highlighting. + * @since v22.14.0 + * @param value A value to serialize to a string. If Node.js was started with + * the [`--test-update-snapshots`](https://nodejs.org/docs/latest-v24.x/api/cli.html#--test-update-snapshots) + * flag, the serialized value is written to + * `path`. Otherwise, the serialized value is compared to the contents of the + * existing snapshot file. + * @param path The file where the serialized `value` is written. + * @param options Optional configuration options. + */ + fileSnapshot(value: any, path: string, options?: AssertSnapshotOptions): void; + /** + * This function implements assertions for snapshot testing. + * ```js + * test('snapshot test with default serialization', (t) => { + * t.assert.snapshot({ value1: 1, value2: 2 }); + * }); + * + * test('snapshot test with custom serialization', (t) => { + * t.assert.snapshot({ value3: 3, value4: 4 }, { + * serializers: [(value) => JSON.stringify(value)] + * }); + * }); + * ``` + * @since v22.3.0 + * @param value A value to serialize to a string. If Node.js was started with + * the [`--test-update-snapshots`](https://nodejs.org/docs/latest-v24.x/api/cli.html#--test-update-snapshots) + * flag, the serialized value is written to + * the snapshot file. Otherwise, the serialized value is compared to the + * corresponding value in the existing snapshot file. + */ + snapshot(value: any, options?: AssertSnapshotOptions): void; + /** + * A custom assertion function registered with `assert.register()`. + */ + [name: string]: (...args: any[]) => void; + } + interface AssertSnapshotOptions { + /** + * An array of synchronous functions used to serialize `value` into a string. + * `value` is passed as the only argument to the first serializer function. + * The return value of each serializer is passed as input to the next serializer. + * Once all serializers have run, the resulting value is coerced to a string. + * + * If no serializers are provided, the test runner's default serializers are used. + */ + serializers?: ReadonlyArray<(value: any) => any> | undefined; + } + interface TestContextPlanOptions { + /** + * The wait time for the plan: + * * If `true`, the plan waits indefinitely for all assertions and subtests to run. + * * If `false`, the plan performs an immediate check after the test function completes, + * without waiting for any pending assertions or subtests. + * Any assertions or subtests that complete after this check will not be counted towards the plan. + * * If a number, it specifies the maximum wait time in milliseconds + * before timing out while waiting for expected assertions and subtests to be matched. + * If the timeout is reached, the test will fail. + * @default false + */ + wait?: boolean | number | undefined; + } + interface TestContextWaitForOptions { + /** + * The number of milliseconds to wait after an unsuccessful + * invocation of `condition` before trying again. + * @default 50 + */ + interval?: number | undefined; + /** + * The poll timeout in milliseconds. If `condition` has not + * succeeded by the time this elapses, an error occurs. + * @default 1000 + */ + timeout?: number | undefined; + } + /** + * An instance of `SuiteContext` is passed to each suite function in order to + * interact with the test runner. However, the `SuiteContext` constructor is not + * exposed as part of the API. + * @since v18.7.0, v16.17.0 + */ + interface SuiteContext { + /** + * The absolute path of the test file that created the current suite. If a test file imports + * additional modules that generate suites, the imported suites will return the path of the root test file. + * @since v22.6.0 + */ + readonly filePath: string | undefined; + /** + * The name of the suite. + * @since v18.8.0, v16.18.0 + */ + readonly name: string; + /** + * Can be used to abort test subtasks when the test has been aborted. + * @since v18.7.0, v16.17.0 + */ + readonly signal: AbortSignal; + } + interface TestOptions { + /** + * If a number is provided, then that many tests would run in parallel. + * If truthy, it would run (number of cpu cores - 1) tests in parallel. + * For subtests, it will be `Infinity` tests in parallel. + * If falsy, it would only run one test at a time. + * If unspecified, subtests inherit this value from their parent. + * @default false + */ + concurrency?: number | boolean | undefined; + /** + * If truthy, and the test context is configured to run `only` tests, then this test will be + * run. Otherwise, the test is skipped. + * @default false + */ + only?: boolean | undefined; + /** + * Allows aborting an in-progress test. + * @since v18.8.0 + */ + signal?: AbortSignal | undefined; + /** + * If truthy, the test is skipped. If a string is provided, that string is displayed in the + * test results as the reason for skipping the test. + * @default false + */ + skip?: boolean | string | undefined; + /** + * A number of milliseconds the test will fail after. If unspecified, subtests inherit this + * value from their parent. + * @default Infinity + * @since v18.7.0 + */ + timeout?: number | undefined; + /** + * If truthy, the test marked as `TODO`. If a string is provided, that string is displayed in + * the test results as the reason why the test is `TODO`. + * @default false + */ + todo?: boolean | string | undefined; + /** + * The number of assertions and subtests expected to be run in the test. + * If the number of assertions run in the test does not match the number + * specified in the plan, the test will fail. + * @default undefined + * @since v22.2.0 + */ + plan?: number | undefined; + } + /** + * This function creates a hook that runs before executing a suite. + * + * ```js + * describe('tests', async () => { + * before(() => console.log('about to run some test')); + * it('is a subtest', () => { + * assert.ok('some relevant assertion here'); + * }); + * }); + * ``` + * @since v18.8.0, v16.18.0 + * @param fn The hook function. If the hook uses callbacks, the callback function is passed as the second argument. + * @param options Configuration options for the hook. + */ + function before(fn?: HookFn, options?: HookOptions): void; + /** + * This function creates a hook that runs after executing a suite. + * + * ```js + * describe('tests', async () => { + * after(() => console.log('finished running tests')); + * it('is a subtest', () => { + * assert.ok('some relevant assertion here'); + * }); + * }); + * ``` + * @since v18.8.0, v16.18.0 + * @param fn The hook function. If the hook uses callbacks, the callback function is passed as the second argument. + * @param options Configuration options for the hook. + */ + function after(fn?: HookFn, options?: HookOptions): void; + /** + * This function creates a hook that runs before each test in the current suite. + * + * ```js + * describe('tests', async () => { + * beforeEach(() => console.log('about to run a test')); + * it('is a subtest', () => { + * assert.ok('some relevant assertion here'); + * }); + * }); + * ``` + * @since v18.8.0, v16.18.0 + * @param fn The hook function. If the hook uses callbacks, the callback function is passed as the second argument. + * @param options Configuration options for the hook. + */ + function beforeEach(fn?: HookFn, options?: HookOptions): void; + /** + * This function creates a hook that runs after each test in the current suite. + * The `afterEach()` hook is run even if the test fails. + * + * ```js + * describe('tests', async () => { + * afterEach(() => console.log('finished running a test')); + * it('is a subtest', () => { + * assert.ok('some relevant assertion here'); + * }); + * }); + * ``` + * @since v18.8.0, v16.18.0 + * @param fn The hook function. If the hook uses callbacks, the callback function is passed as the second argument. + * @param options Configuration options for the hook. + */ + function afterEach(fn?: HookFn, options?: HookOptions): void; + /** + * The hook function. The first argument is the context in which the hook is called. + * If the hook uses callbacks, the callback function is passed as the second argument. + */ + type HookFn = (c: TestContext | SuiteContext, done: (result?: any) => void) => any; + /** + * The hook function. The first argument is a `TestContext` object. + * If the hook uses callbacks, the callback function is passed as the second argument. + */ + type TestContextHookFn = (t: TestContext, done: (result?: any) => void) => any; + /** + * Configuration options for hooks. + * @since v18.8.0 + */ + interface HookOptions { + /** + * Allows aborting an in-progress hook. + */ + signal?: AbortSignal | undefined; + /** + * A number of milliseconds the hook will fail after. If unspecified, subtests inherit this + * value from their parent. + * @default Infinity + */ + timeout?: number | undefined; + } + interface MockFunctionOptions { + /** + * The number of times that the mock will use the behavior of `implementation`. + * Once the mock function has been called `times` times, + * it will automatically restore the behavior of `original`. + * This value must be an integer greater than zero. + * @default Infinity + */ + times?: number | undefined; + } + interface MockMethodOptions extends MockFunctionOptions { + /** + * If `true`, `object[methodName]` is treated as a getter. + * This option cannot be used with the `setter` option. + */ + getter?: boolean | undefined; + /** + * If `true`, `object[methodName]` is treated as a setter. + * This option cannot be used with the `getter` option. + */ + setter?: boolean | undefined; + } + type Mock = F & { + mock: MockFunctionContext; + }; + interface MockModuleOptions { + /** + * If false, each call to `require()` or `import()` generates a new mock module. + * If true, subsequent calls will return the same module mock, and the mock module is inserted into the CommonJS cache. + * @default false + */ + cache?: boolean | undefined; + /** + * The value to use as the mocked module's default export. + * + * If this value is not provided, ESM mocks do not include a default export. + * If the mock is a CommonJS or builtin module, this setting is used as the value of `module.exports`. + * If this value is not provided, CJS and builtin mocks use an empty object as the value of `module.exports`. + */ + defaultExport?: any; + /** + * An object whose keys and values are used to create the named exports of the mock module. + * + * If the mock is a CommonJS or builtin module, these values are copied onto `module.exports`. + * Therefore, if a mock is created with both named exports and a non-object default export, + * the mock will throw an exception when used as a CJS or builtin module. + */ + namedExports?: object | undefined; + } + /** + * The `MockTracker` class is used to manage mocking functionality. The test runner + * module provides a top level `mock` export which is a `MockTracker` instance. + * Each test also provides its own `MockTracker` instance via the test context's `mock` property. + * @since v19.1.0, v18.13.0 + */ + interface MockTracker { + /** + * This function is used to create a mock function. + * + * The following example creates a mock function that increments a counter by one + * on each invocation. The `times` option is used to modify the mock behavior such + * that the first two invocations add two to the counter instead of one. + * + * ```js + * test('mocks a counting function', (t) => { + * let cnt = 0; + * + * function addOne() { + * cnt++; + * return cnt; + * } + * + * function addTwo() { + * cnt += 2; + * return cnt; + * } + * + * const fn = t.mock.fn(addOne, addTwo, { times: 2 }); + * + * assert.strictEqual(fn(), 2); + * assert.strictEqual(fn(), 4); + * assert.strictEqual(fn(), 5); + * assert.strictEqual(fn(), 6); + * }); + * ``` + * @since v19.1.0, v18.13.0 + * @param original An optional function to create a mock on. + * @param implementation An optional function used as the mock implementation for `original`. This is useful for creating mocks that exhibit one behavior for a specified number of calls and + * then restore the behavior of `original`. + * @param options Optional configuration options for the mock function. + * @return The mocked function. The mocked function contains a special `mock` property, which is an instance of {@link MockFunctionContext}, and can be used for inspecting and changing the + * behavior of the mocked function. + */ + fn undefined>( + original?: F, + options?: MockFunctionOptions, + ): Mock; + fn undefined, Implementation extends Function = F>( + original?: F, + implementation?: Implementation, + options?: MockFunctionOptions, + ): Mock; + /** + * This function is used to create a mock on an existing object method. The + * following example demonstrates how a mock is created on an existing object + * method. + * + * ```js + * test('spies on an object method', (t) => { + * const number = { + * value: 5, + * subtract(a) { + * return this.value - a; + * }, + * }; + * + * t.mock.method(number, 'subtract'); + * assert.strictEqual(number.subtract.mock.calls.length, 0); + * assert.strictEqual(number.subtract(3), 2); + * assert.strictEqual(number.subtract.mock.calls.length, 1); + * + * const call = number.subtract.mock.calls[0]; + * + * assert.deepStrictEqual(call.arguments, [3]); + * assert.strictEqual(call.result, 2); + * assert.strictEqual(call.error, undefined); + * assert.strictEqual(call.target, undefined); + * assert.strictEqual(call.this, number); + * }); + * ``` + * @since v19.1.0, v18.13.0 + * @param object The object whose method is being mocked. + * @param methodName The identifier of the method on `object` to mock. If `object[methodName]` is not a function, an error is thrown. + * @param implementation An optional function used as the mock implementation for `object[methodName]`. + * @param options Optional configuration options for the mock method. + * @return The mocked method. The mocked method contains a special `mock` property, which is an instance of {@link MockFunctionContext}, and can be used for inspecting and changing the + * behavior of the mocked method. + */ + method< + MockedObject extends object, + MethodName extends FunctionPropertyNames, + >( + object: MockedObject, + methodName: MethodName, + options?: MockFunctionOptions, + ): MockedObject[MethodName] extends Function ? Mock + : never; + method< + MockedObject extends object, + MethodName extends FunctionPropertyNames, + Implementation extends Function, + >( + object: MockedObject, + methodName: MethodName, + implementation: Implementation, + options?: MockFunctionOptions, + ): MockedObject[MethodName] extends Function ? Mock + : never; + method( + object: MockedObject, + methodName: keyof MockedObject, + options: MockMethodOptions, + ): Mock; + method( + object: MockedObject, + methodName: keyof MockedObject, + implementation: Function, + options: MockMethodOptions, + ): Mock; + /** + * This function is syntax sugar for `MockTracker.method` with `options.getter` set to `true`. + * @since v19.3.0, v18.13.0 + */ + getter< + MockedObject extends object, + MethodName extends keyof MockedObject, + >( + object: MockedObject, + methodName: MethodName, + options?: MockFunctionOptions, + ): Mock<() => MockedObject[MethodName]>; + getter< + MockedObject extends object, + MethodName extends keyof MockedObject, + Implementation extends Function, + >( + object: MockedObject, + methodName: MethodName, + implementation?: Implementation, + options?: MockFunctionOptions, + ): Mock<(() => MockedObject[MethodName]) | Implementation>; + /** + * This function is syntax sugar for `MockTracker.method` with `options.setter` set to `true`. + * @since v19.3.0, v18.13.0 + */ + setter< + MockedObject extends object, + MethodName extends keyof MockedObject, + >( + object: MockedObject, + methodName: MethodName, + options?: MockFunctionOptions, + ): Mock<(value: MockedObject[MethodName]) => void>; + setter< + MockedObject extends object, + MethodName extends keyof MockedObject, + Implementation extends Function, + >( + object: MockedObject, + methodName: MethodName, + implementation?: Implementation, + options?: MockFunctionOptions, + ): Mock<((value: MockedObject[MethodName]) => void) | Implementation>; + /** + * This function is used to mock the exports of ECMAScript modules, CommonJS modules, JSON modules, and + * Node.js builtin modules. Any references to the original module prior to mocking are not impacted. In + * order to enable module mocking, Node.js must be started with the + * [`--experimental-test-module-mocks`](https://nodejs.org/docs/latest-v24.x/api/cli.html#--experimental-test-module-mocks) + * command-line flag. + * + * The following example demonstrates how a mock is created for a module. + * + * ```js + * test('mocks a builtin module in both module systems', async (t) => { + * // Create a mock of 'node:readline' with a named export named 'fn', which + * // does not exist in the original 'node:readline' module. + * const mock = t.mock.module('node:readline', { + * namedExports: { fn() { return 42; } }, + * }); + * + * let esmImpl = await import('node:readline'); + * let cjsImpl = require('node:readline'); + * + * // cursorTo() is an export of the original 'node:readline' module. + * assert.strictEqual(esmImpl.cursorTo, undefined); + * assert.strictEqual(cjsImpl.cursorTo, undefined); + * assert.strictEqual(esmImpl.fn(), 42); + * assert.strictEqual(cjsImpl.fn(), 42); + * + * mock.restore(); + * + * // The mock is restored, so the original builtin module is returned. + * esmImpl = await import('node:readline'); + * cjsImpl = require('node:readline'); + * + * assert.strictEqual(typeof esmImpl.cursorTo, 'function'); + * assert.strictEqual(typeof cjsImpl.cursorTo, 'function'); + * assert.strictEqual(esmImpl.fn, undefined); + * assert.strictEqual(cjsImpl.fn, undefined); + * }); + * ``` + * @since v22.3.0 + * @experimental + * @param specifier A string identifying the module to mock. + * @param options Optional configuration options for the mock module. + */ + module(specifier: string, options?: MockModuleOptions): MockModuleContext; + /** + * Creates a mock for a property value on an object. This allows you to track and control access to a specific property, + * including how many times it is read (getter) or written (setter), and to restore the original value after mocking. + * + * ```js + * test('mocks a property value', (t) => { + * const obj = { foo: 42 }; + * const prop = t.mock.property(obj, 'foo', 100); + * + * assert.strictEqual(obj.foo, 100); + * assert.strictEqual(prop.mock.accessCount(), 1); + * assert.strictEqual(prop.mock.accesses[0].type, 'get'); + * assert.strictEqual(prop.mock.accesses[0].value, 100); + * + * obj.foo = 200; + * assert.strictEqual(prop.mock.accessCount(), 2); + * assert.strictEqual(prop.mock.accesses[1].type, 'set'); + * assert.strictEqual(prop.mock.accesses[1].value, 200); + * + * prop.mock.restore(); + * assert.strictEqual(obj.foo, 42); + * }); + * ``` + * @since v24.3.0 + * @param object The object whose value is being mocked. + * @param propertyName The identifier of the property on `object` to mock. + * @param value An optional value used as the mock value + * for `object[propertyName]`. **Default:** The original property value. + * @returns A proxy to the mocked object. The mocked object contains a + * special `mock` property, which is an instance of [`MockPropertyContext`][], and + * can be used for inspecting and changing the behavior of the mocked property. + */ + property< + MockedObject extends object, + PropertyName extends keyof MockedObject, + >( + object: MockedObject, + property: PropertyName, + value?: MockedObject[PropertyName], + ): MockedObject & { mock: MockPropertyContext }; + /** + * This function restores the default behavior of all mocks that were previously + * created by this `MockTracker` and disassociates the mocks from the `MockTracker` instance. Once disassociated, the mocks can still be used, but the `MockTracker` instance can no longer be + * used to reset their behavior or + * otherwise interact with them. + * + * After each test completes, this function is called on the test context's `MockTracker`. If the global `MockTracker` is used extensively, calling this + * function manually is recommended. + * @since v19.1.0, v18.13.0 + */ + reset(): void; + /** + * This function restores the default behavior of all mocks that were previously + * created by this `MockTracker`. Unlike `mock.reset()`, `mock.restoreAll()` does + * not disassociate the mocks from the `MockTracker` instance. + * @since v19.1.0, v18.13.0 + */ + restoreAll(): void; + readonly timers: MockTimers; + } + const mock: MockTracker; + interface MockFunctionCall< + F extends Function, + ReturnType = F extends (...args: any) => infer T ? T + : F extends abstract new(...args: any) => infer T ? T + : unknown, + Args = F extends (...args: infer Y) => any ? Y + : F extends abstract new(...args: infer Y) => any ? Y + : unknown[], + > { + /** + * An array of the arguments passed to the mock function. + */ + arguments: Args; + /** + * If the mocked function threw then this property contains the thrown value. + */ + error: unknown | undefined; + /** + * The value returned by the mocked function. + * + * If the mocked function threw, it will be `undefined`. + */ + result: ReturnType | undefined; + /** + * An `Error` object whose stack can be used to determine the callsite of the mocked function invocation. + */ + stack: Error; + /** + * If the mocked function is a constructor, this field contains the class being constructed. + * Otherwise this will be `undefined`. + */ + target: F extends abstract new(...args: any) => any ? F : undefined; + /** + * The mocked function's `this` value. + */ + this: unknown; + } + /** + * The `MockFunctionContext` class is used to inspect or manipulate the behavior of + * mocks created via the `MockTracker` APIs. + * @since v19.1.0, v18.13.0 + */ + interface MockFunctionContext { + /** + * A getter that returns a copy of the internal array used to track calls to the + * mock. Each entry in the array is an object with the following properties. + * @since v19.1.0, v18.13.0 + */ + readonly calls: MockFunctionCall[]; + /** + * This function returns the number of times that this mock has been invoked. This + * function is more efficient than checking `ctx.calls.length` because `ctx.calls` is a getter that creates a copy of the internal call tracking array. + * @since v19.1.0, v18.13.0 + * @return The number of times that this mock has been invoked. + */ + callCount(): number; + /** + * This function is used to change the behavior of an existing mock. + * + * The following example creates a mock function using `t.mock.fn()`, calls the + * mock function, and then changes the mock implementation to a different function. + * + * ```js + * test('changes a mock behavior', (t) => { + * let cnt = 0; + * + * function addOne() { + * cnt++; + * return cnt; + * } + * + * function addTwo() { + * cnt += 2; + * return cnt; + * } + * + * const fn = t.mock.fn(addOne); + * + * assert.strictEqual(fn(), 1); + * fn.mock.mockImplementation(addTwo); + * assert.strictEqual(fn(), 3); + * assert.strictEqual(fn(), 5); + * }); + * ``` + * @since v19.1.0, v18.13.0 + * @param implementation The function to be used as the mock's new implementation. + */ + mockImplementation(implementation: F): void; + /** + * This function is used to change the behavior of an existing mock for a single + * invocation. Once invocation `onCall` has occurred, the mock will revert to + * whatever behavior it would have used had `mockImplementationOnce()` not been + * called. + * + * The following example creates a mock function using `t.mock.fn()`, calls the + * mock function, changes the mock implementation to a different function for the + * next invocation, and then resumes its previous behavior. + * + * ```js + * test('changes a mock behavior once', (t) => { + * let cnt = 0; + * + * function addOne() { + * cnt++; + * return cnt; + * } + * + * function addTwo() { + * cnt += 2; + * return cnt; + * } + * + * const fn = t.mock.fn(addOne); + * + * assert.strictEqual(fn(), 1); + * fn.mock.mockImplementationOnce(addTwo); + * assert.strictEqual(fn(), 3); + * assert.strictEqual(fn(), 4); + * }); + * ``` + * @since v19.1.0, v18.13.0 + * @param implementation The function to be used as the mock's implementation for the invocation number specified by `onCall`. + * @param onCall The invocation number that will use `implementation`. If the specified invocation has already occurred then an exception is thrown. + */ + mockImplementationOnce(implementation: F, onCall?: number): void; + /** + * Resets the call history of the mock function. + * @since v19.3.0, v18.13.0 + */ + resetCalls(): void; + /** + * Resets the implementation of the mock function to its original behavior. The + * mock can still be used after calling this function. + * @since v19.1.0, v18.13.0 + */ + restore(): void; + } + /** + * @since v22.3.0 + * @experimental + */ + interface MockModuleContext { + /** + * Resets the implementation of the mock module. + * @since v22.3.0 + */ + restore(): void; + } + /** + * @since v24.3.0 + */ + class MockPropertyContext { + /** + * A getter that returns a copy of the internal array used to track accesses (get/set) to + * the mocked property. Each entry in the array is an object with the following properties: + */ + readonly accesses: Array<{ + type: "get" | "set"; + value: PropertyType; + stack: Error; + }>; + /** + * This function returns the number of times that the property was accessed. + * This function is more efficient than checking `ctx.accesses.length` because + * `ctx.accesses` is a getter that creates a copy of the internal access tracking array. + * @returns The number of times that the property was accessed (read or written). + */ + accessCount(): number; + /** + * This function is used to change the value returned by the mocked property getter. + * @param value The new value to be set as the mocked property value. + */ + mockImplementation(value: PropertyType): void; + /** + * This function is used to change the behavior of an existing mock for a single + * invocation. Once invocation `onAccess` has occurred, the mock will revert to + * whatever behavior it would have used had `mockImplementationOnce()` not been + * called. + * + * The following example creates a mock function using `t.mock.property()`, calls the + * mock property, changes the mock implementation to a different value for the + * next invocation, and then resumes its previous behavior. + * + * ```js + * test('changes a mock behavior once', (t) => { + * const obj = { foo: 1 }; + * + * const prop = t.mock.property(obj, 'foo', 5); + * + * assert.strictEqual(obj.foo, 5); + * prop.mock.mockImplementationOnce(25); + * assert.strictEqual(obj.foo, 25); + * assert.strictEqual(obj.foo, 5); + * }); + * ``` + * @param value The value to be used as the mock's + * implementation for the invocation number specified by `onAccess`. + * @param onAccess The invocation number that will use `value`. If + * the specified invocation has already occurred then an exception is thrown. + * **Default:** The number of the next invocation. + */ + mockImplementationOnce(value: PropertyType, onAccess?: number): void; + /** + * Resets the access history of the mocked property. + */ + resetAccesses(): void; + /** + * Resets the implementation of the mock property to its original behavior. The + * mock can still be used after calling this function. + */ + restore(): void; + } + interface MockTimersOptions { + apis: ReadonlyArray<"setInterval" | "setTimeout" | "setImmediate" | "Date">; + now?: number | Date | undefined; + } + /** + * Mocking timers is a technique commonly used in software testing to simulate and + * control the behavior of timers, such as `setInterval` and `setTimeout`, + * without actually waiting for the specified time intervals. + * + * The MockTimers API also allows for mocking of the `Date` constructor and + * `setImmediate`/`clearImmediate` functions. + * + * The `MockTracker` provides a top-level `timers` export + * which is a `MockTimers` instance. + * @since v20.4.0 + */ + interface MockTimers { + /** + * Enables timer mocking for the specified timers. + * + * **Note:** When you enable mocking for a specific timer, its associated + * clear function will also be implicitly mocked. + * + * **Note:** Mocking `Date` will affect the behavior of the mocked timers + * as they use the same internal clock. + * + * Example usage without setting initial time: + * + * ```js + * import { mock } from 'node:test'; + * mock.timers.enable({ apis: ['setInterval', 'Date'], now: 1234 }); + * ``` + * + * The above example enables mocking for the `Date` constructor, `setInterval` timer and + * implicitly mocks the `clearInterval` function. Only the `Date` constructor from `globalThis`, + * `setInterval` and `clearInterval` functions from `node:timers`, `node:timers/promises`, and `globalThis` will be mocked. + * + * Example usage with initial time set + * + * ```js + * import { mock } from 'node:test'; + * mock.timers.enable({ apis: ['Date'], now: 1000 }); + * ``` + * + * Example usage with initial Date object as time set + * + * ```js + * import { mock } from 'node:test'; + * mock.timers.enable({ apis: ['Date'], now: new Date() }); + * ``` + * + * Alternatively, if you call `mock.timers.enable()` without any parameters: + * + * All timers (`'setInterval'`, `'clearInterval'`, `'Date'`, `'setImmediate'`, `'clearImmediate'`, `'setTimeout'`, and `'clearTimeout'`) + * will be mocked. + * + * The `setInterval`, `clearInterval`, `setTimeout`, and `clearTimeout` functions from `node:timers`, `node:timers/promises`, + * and `globalThis` will be mocked. + * The `Date` constructor from `globalThis` will be mocked. + * + * If there is no initial epoch set, the initial date will be based on 0 in the Unix epoch. This is `January 1st, 1970, 00:00:00 UTC`. You can + * set an initial date by passing a now property to the `.enable()` method. This value will be used as the initial date for the mocked Date + * object. It can either be a positive integer, or another Date object. + * @since v20.4.0 + */ + enable(options?: MockTimersOptions): void; + /** + * You can use the `.setTime()` method to manually move the mocked date to another time. This method only accepts a positive integer. + * Note: This method will execute any mocked timers that are in the past from the new time. + * In the below example we are setting a new time for the mocked date. + * ```js + * import assert from 'node:assert'; + * import { test } from 'node:test'; + * test('sets the time of a date object', (context) => { + * // Optionally choose what to mock + * context.mock.timers.enable({ apis: ['Date'], now: 100 }); + * assert.strictEqual(Date.now(), 100); + * // Advance in time will also advance the date + * context.mock.timers.setTime(1000); + * context.mock.timers.tick(200); + * assert.strictEqual(Date.now(), 1200); + * }); + * ``` + */ + setTime(time: number): void; + /** + * This function restores the default behavior of all mocks that were previously + * created by this `MockTimers` instance and disassociates the mocks + * from the `MockTracker` instance. + * + * **Note:** After each test completes, this function is called on + * the test context's `MockTracker`. + * + * ```js + * import { mock } from 'node:test'; + * mock.timers.reset(); + * ``` + * @since v20.4.0 + */ + reset(): void; + /** + * Advances time for all mocked timers. + * + * **Note:** This diverges from how `setTimeout` in Node.js behaves and accepts + * only positive numbers. In Node.js, `setTimeout` with negative numbers is + * only supported for web compatibility reasons. + * + * The following example mocks a `setTimeout` function and + * by using `.tick` advances in + * time triggering all pending timers. + * + * ```js + * import assert from 'node:assert'; + * import { test } from 'node:test'; + * + * test('mocks setTimeout to be executed synchronously without having to actually wait for it', (context) => { + * const fn = context.mock.fn(); + * + * context.mock.timers.enable({ apis: ['setTimeout'] }); + * + * setTimeout(fn, 9999); + * + * assert.strictEqual(fn.mock.callCount(), 0); + * + * // Advance in time + * context.mock.timers.tick(9999); + * + * assert.strictEqual(fn.mock.callCount(), 1); + * }); + * ``` + * + * Alternativelly, the `.tick` function can be called many times + * + * ```js + * import assert from 'node:assert'; + * import { test } from 'node:test'; + * + * test('mocks setTimeout to be executed synchronously without having to actually wait for it', (context) => { + * const fn = context.mock.fn(); + * context.mock.timers.enable({ apis: ['setTimeout'] }); + * const nineSecs = 9000; + * setTimeout(fn, nineSecs); + * + * const twoSeconds = 3000; + * context.mock.timers.tick(twoSeconds); + * context.mock.timers.tick(twoSeconds); + * context.mock.timers.tick(twoSeconds); + * + * assert.strictEqual(fn.mock.callCount(), 1); + * }); + * ``` + * + * Advancing time using `.tick` will also advance the time for any `Date` object + * created after the mock was enabled (if `Date` was also set to be mocked). + * + * ```js + * import assert from 'node:assert'; + * import { test } from 'node:test'; + * + * test('mocks setTimeout to be executed synchronously without having to actually wait for it', (context) => { + * const fn = context.mock.fn(); + * + * context.mock.timers.enable({ apis: ['setTimeout', 'Date'] }); + * setTimeout(fn, 9999); + * + * assert.strictEqual(fn.mock.callCount(), 0); + * assert.strictEqual(Date.now(), 0); + * + * // Advance in time + * context.mock.timers.tick(9999); + * assert.strictEqual(fn.mock.callCount(), 1); + * assert.strictEqual(Date.now(), 9999); + * }); + * ``` + * @since v20.4.0 + */ + tick(milliseconds: number): void; + /** + * Triggers all pending mocked timers immediately. If the `Date` object is also + * mocked, it will also advance the `Date` object to the furthest timer's time. + * + * The example below triggers all pending timers immediately, + * causing them to execute without any delay. + * + * ```js + * import assert from 'node:assert'; + * import { test } from 'node:test'; + * + * test('runAll functions following the given order', (context) => { + * context.mock.timers.enable({ apis: ['setTimeout', 'Date'] }); + * const results = []; + * setTimeout(() => results.push(1), 9999); + * + * // Notice that if both timers have the same timeout, + * // the order of execution is guaranteed + * setTimeout(() => results.push(3), 8888); + * setTimeout(() => results.push(2), 8888); + * + * assert.deepStrictEqual(results, []); + * + * context.mock.timers.runAll(); + * assert.deepStrictEqual(results, [3, 2, 1]); + * // The Date object is also advanced to the furthest timer's time + * assert.strictEqual(Date.now(), 9999); + * }); + * ``` + * + * **Note:** The `runAll()` function is specifically designed for + * triggering timers in the context of timer mocking. + * It does not have any effect on real-time system + * clocks or actual timers outside of the mocking environment. + * @since v20.4.0 + */ + runAll(): void; + /** + * Calls {@link MockTimers.reset()}. + */ + [Symbol.dispose](): void; + } + /** + * An object whose methods are used to configure available assertions on the + * `TestContext` objects in the current process. The methods from `node:assert` + * and snapshot testing functions are available by default. + * + * It is possible to apply the same configuration to all files by placing common + * configuration code in a module + * preloaded with `--require` or `--import`. + * @since v22.14.0 + */ + namespace assert { + /** + * Defines a new assertion function with the provided name and function. If an + * assertion already exists with the same name, it is overwritten. + * @since v22.14.0 + */ + function register(name: string, fn: (this: TestContext, ...args: any[]) => void): void; + } + /** + * @since v22.3.0 + */ + namespace snapshot { + /** + * This function is used to customize the default serialization mechanism used by the test runner. + * + * By default, the test runner performs serialization by calling `JSON.stringify(value, null, 2)` on the provided value. + * `JSON.stringify()` does have limitations regarding circular structures and supported data types. + * If a more robust serialization mechanism is required, this function should be used to specify a list of custom serializers. + * + * Serializers are called in order, with the output of the previous serializer passed as input to the next. + * The final result must be a string value. + * @since v22.3.0 + * @param serializers An array of synchronous functions used as the default serializers for snapshot tests. + */ + function setDefaultSnapshotSerializers(serializers: ReadonlyArray<(value: any) => any>): void; + /** + * This function is used to set a custom resolver for the location of the snapshot file used for snapshot testing. + * By default, the snapshot filename is the same as the entry point filename with `.snapshot` appended. + * @since v22.3.0 + * @param fn A function used to compute the location of the snapshot file. + * The function receives the path of the test file as its only argument. If the + * test is not associated with a file (for example in the REPL), the input is + * undefined. `fn()` must return a string specifying the location of the snapshot file. + */ + function setResolveSnapshotPath(fn: (path: string | undefined) => string): void; + } + } + type FunctionPropertyNames = { + [K in keyof T]: T[K] extends Function ? K : never; + }[keyof T]; + export = test; +} + +/** + * The `node:test/reporters` module exposes the builtin-reporters for `node:test`. + * To access it: + * + * ```js + * import test from 'node:test/reporters'; + * ``` + * + * This module is only available under the `node:` scheme. The following will not + * work: + * + * ```js + * import test from 'node:test/reporters'; + * ``` + * @since v19.9.0 + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/test/reporters.js) + */ +declare module "node:test/reporters" { + import { Transform, TransformOptions } from "node:stream"; + import { EventData } from "node:test"; + + type TestEvent = + | { type: "test:coverage"; data: EventData.TestCoverage } + | { type: "test:complete"; data: EventData.TestComplete } + | { type: "test:dequeue"; data: EventData.TestDequeue } + | { type: "test:diagnostic"; data: EventData.TestDiagnostic } + | { type: "test:enqueue"; data: EventData.TestEnqueue } + | { type: "test:fail"; data: EventData.TestFail } + | { type: "test:pass"; data: EventData.TestPass } + | { type: "test:plan"; data: EventData.TestPlan } + | { type: "test:start"; data: EventData.TestStart } + | { type: "test:stderr"; data: EventData.TestStderr } + | { type: "test:stdout"; data: EventData.TestStdout } + | { type: "test:summary"; data: EventData.TestSummary } + | { type: "test:watch:drained"; data: undefined } + | { type: "test:watch:restarted"; data: undefined }; + type TestEventGenerator = AsyncGenerator; + + interface ReporterConstructorWrapper Transform> { + new(...args: ConstructorParameters): InstanceType; + (...args: ConstructorParameters): InstanceType; + } + + /** + * The `dot` reporter outputs the test results in a compact format, + * where each passing test is represented by a `.`, + * and each failing test is represented by a `X`. + * @since v20.0.0 + */ + function dot(source: TestEventGenerator): AsyncGenerator<"\n" | "." | "X", void>; + /** + * The `tap` reporter outputs the test results in the [TAP](https://testanything.org/) format. + * @since v20.0.0 + */ + function tap(source: TestEventGenerator): AsyncGenerator; + class SpecReporter extends Transform { + constructor(); + } + /** + * The `spec` reporter outputs the test results in a human-readable format. + * @since v20.0.0 + */ + const spec: ReporterConstructorWrapper; + /** + * The `junit` reporter outputs test results in a jUnit XML format. + * @since v21.0.0 + */ + function junit(source: TestEventGenerator): AsyncGenerator; + class LcovReporter extends Transform { + constructor(opts?: Omit); + } + /** + * The `lcov` reporter outputs test coverage when used with the + * [`--experimental-test-coverage`](https://nodejs.org/docs/latest-v24.x/api/cli.html#--experimental-test-coverage) flag. + * @since v22.0.0 + */ + const lcov: ReporterConstructorWrapper; + + export { dot, junit, lcov, spec, tap, TestEvent }; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/timers.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/timers.d.ts new file mode 100644 index 00000000..30a91c06 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/timers.d.ts @@ -0,0 +1,285 @@ +/** + * The `timer` module exposes a global API for scheduling functions to + * be called at some future period of time. Because the timer functions are + * globals, there is no need to import `node:timers` to use the API. + * + * The timer functions within Node.js implement a similar API as the timers API + * provided by Web Browsers but use a different internal implementation that is + * built around the Node.js [Event Loop](https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#setimmediate-vs-settimeout). + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/timers.js) + */ +declare module "timers" { + import { Abortable } from "node:events"; + import * as promises from "node:timers/promises"; + export interface TimerOptions extends Abortable { + /** + * Set to `false` to indicate that the scheduled `Timeout` + * should not require the Node.js event loop to remain active. + * @default true + */ + ref?: boolean | undefined; + } + global { + namespace NodeJS { + /** + * This object is created internally and is returned from `setImmediate()`. It + * can be passed to `clearImmediate()` in order to cancel the scheduled + * actions. + * + * By default, when an immediate is scheduled, the Node.js event loop will continue + * running as long as the immediate is active. The `Immediate` object returned by + * `setImmediate()` exports both `immediate.ref()` and `immediate.unref()` + * functions that can be used to control this default behavior. + */ + interface Immediate extends RefCounted, Disposable { + /** + * If true, the `Immediate` object will keep the Node.js event loop active. + * @since v11.0.0 + */ + hasRef(): boolean; + /** + * When called, requests that the Node.js event loop _not_ exit so long as the + * `Immediate` is active. Calling `immediate.ref()` multiple times will have no + * effect. + * + * By default, all `Immediate` objects are "ref'ed", making it normally unnecessary + * to call `immediate.ref()` unless `immediate.unref()` had been called previously. + * @since v9.7.0 + * @returns a reference to `immediate` + */ + ref(): this; + /** + * When called, the active `Immediate` object will not require the Node.js event + * loop to remain active. If there is no other activity keeping the event loop + * running, the process may exit before the `Immediate` object's callback is + * invoked. Calling `immediate.unref()` multiple times will have no effect. + * @since v9.7.0 + * @returns a reference to `immediate` + */ + unref(): this; + /** + * Cancels the immediate. This is similar to calling `clearImmediate()`. + * @since v20.5.0, v18.18.0 + */ + [Symbol.dispose](): void; + _onImmediate(...args: any[]): void; + } + // Legacy interface used in Node.js v9 and prior + // TODO: remove in a future major version bump + /** @deprecated Use `NodeJS.Timeout` instead. */ + interface Timer extends RefCounted { + hasRef(): boolean; + refresh(): this; + [Symbol.toPrimitive](): number; + } + /** + * This object is created internally and is returned from `setTimeout()` and + * `setInterval()`. It can be passed to either `clearTimeout()` or + * `clearInterval()` in order to cancel the scheduled actions. + * + * By default, when a timer is scheduled using either `setTimeout()` or + * `setInterval()`, the Node.js event loop will continue running as long as the + * timer is active. Each of the `Timeout` objects returned by these functions + * export both `timeout.ref()` and `timeout.unref()` functions that can be used to + * control this default behavior. + */ + interface Timeout extends RefCounted, Disposable, Timer { + /** + * Cancels the timeout. + * @since v0.9.1 + * @legacy Use `clearTimeout()` instead. + * @returns a reference to `timeout` + */ + close(): this; + /** + * If true, the `Timeout` object will keep the Node.js event loop active. + * @since v11.0.0 + */ + hasRef(): boolean; + /** + * When called, requests that the Node.js event loop _not_ exit so long as the + * `Timeout` is active. Calling `timeout.ref()` multiple times will have no effect. + * + * By default, all `Timeout` objects are "ref'ed", making it normally unnecessary + * to call `timeout.ref()` unless `timeout.unref()` had been called previously. + * @since v0.9.1 + * @returns a reference to `timeout` + */ + ref(): this; + /** + * Sets the timer's start time to the current time, and reschedules the timer to + * call its callback at the previously specified duration adjusted to the current + * time. This is useful for refreshing a timer without allocating a new + * JavaScript object. + * + * Using this on a timer that has already called its callback will reactivate the + * timer. + * @since v10.2.0 + * @returns a reference to `timeout` + */ + refresh(): this; + /** + * When called, the active `Timeout` object will not require the Node.js event loop + * to remain active. If there is no other activity keeping the event loop running, + * the process may exit before the `Timeout` object's callback is invoked. Calling + * `timeout.unref()` multiple times will have no effect. + * @since v0.9.1 + * @returns a reference to `timeout` + */ + unref(): this; + /** + * Coerce a `Timeout` to a primitive. The primitive can be used to + * clear the `Timeout`. The primitive can only be used in the + * same thread where the timeout was created. Therefore, to use it + * across `worker_threads` it must first be passed to the correct + * thread. This allows enhanced compatibility with browser + * `setTimeout()` and `setInterval()` implementations. + * @since v14.9.0, v12.19.0 + */ + [Symbol.toPrimitive](): number; + /** + * Cancels the timeout. + * @since v20.5.0, v18.18.0 + */ + [Symbol.dispose](): void; + _onTimeout(...args: any[]): void; + } + } + /** + * Schedules the "immediate" execution of the `callback` after I/O events' + * callbacks. + * + * When multiple calls to `setImmediate()` are made, the `callback` functions are + * queued for execution in the order in which they are created. The entire callback + * queue is processed every event loop iteration. If an immediate timer is queued + * from inside an executing callback, that timer will not be triggered until the + * next event loop iteration. + * + * If `callback` is not a function, a `TypeError` will be thrown. + * + * This method has a custom variant for promises that is available using + * `timersPromises.setImmediate()`. + * @since v0.9.1 + * @param callback The function to call at the end of this turn of + * the Node.js [Event Loop](https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#setimmediate-vs-settimeout) + * @param args Optional arguments to pass when the `callback` is called. + * @returns for use with `clearImmediate()` + */ + function setImmediate( + callback: (...args: TArgs) => void, + ...args: TArgs + ): NodeJS.Immediate; + // Allow a single void-accepting argument to be optional in arguments lists. + // Allows usage such as `new Promise(resolve => setTimeout(resolve, ms))` (#54258) + // eslint-disable-next-line @typescript-eslint/no-invalid-void-type + function setImmediate(callback: (_: void) => void): NodeJS.Immediate; + namespace setImmediate { + import __promisify__ = promises.setImmediate; + export { __promisify__ }; + } + /** + * Schedules repeated execution of `callback` every `delay` milliseconds. + * + * When `delay` is larger than `2147483647` or less than `1` or `NaN`, the `delay` + * will be set to `1`. Non-integer delays are truncated to an integer. + * + * If `callback` is not a function, a `TypeError` will be thrown. + * + * This method has a custom variant for promises that is available using + * `timersPromises.setInterval()`. + * @since v0.0.1 + * @param callback The function to call when the timer elapses. + * @param delay The number of milliseconds to wait before calling the + * `callback`. **Default:** `1`. + * @param args Optional arguments to pass when the `callback` is called. + * @returns for use with `clearInterval()` + */ + function setInterval( + callback: (...args: TArgs) => void, + delay?: number, + ...args: TArgs + ): NodeJS.Timeout; + // Allow a single void-accepting argument to be optional in arguments lists. + // Allows usage such as `new Promise(resolve => setTimeout(resolve, ms))` (#54258) + // eslint-disable-next-line @typescript-eslint/no-invalid-void-type + function setInterval(callback: (_: void) => void, delay?: number): NodeJS.Timeout; + /** + * Schedules execution of a one-time `callback` after `delay` milliseconds. + * + * The `callback` will likely not be invoked in precisely `delay` milliseconds. + * Node.js makes no guarantees about the exact timing of when callbacks will fire, + * nor of their ordering. The callback will be called as close as possible to the + * time specified. + * + * When `delay` is larger than `2147483647` or less than `1` or `NaN`, the `delay` + * will be set to `1`. Non-integer delays are truncated to an integer. + * + * If `callback` is not a function, a `TypeError` will be thrown. + * + * This method has a custom variant for promises that is available using + * `timersPromises.setTimeout()`. + * @since v0.0.1 + * @param callback The function to call when the timer elapses. + * @param delay The number of milliseconds to wait before calling the + * `callback`. **Default:** `1`. + * @param args Optional arguments to pass when the `callback` is called. + * @returns for use with `clearTimeout()` + */ + function setTimeout( + callback: (...args: TArgs) => void, + delay?: number, + ...args: TArgs + ): NodeJS.Timeout; + // Allow a single void-accepting argument to be optional in arguments lists. + // Allows usage such as `new Promise(resolve => setTimeout(resolve, ms))` (#54258) + // eslint-disable-next-line @typescript-eslint/no-invalid-void-type + function setTimeout(callback: (_: void) => void, delay?: number): NodeJS.Timeout; + namespace setTimeout { + import __promisify__ = promises.setTimeout; + export { __promisify__ }; + } + /** + * Cancels an `Immediate` object created by `setImmediate()`. + * @since v0.9.1 + * @param immediate An `Immediate` object as returned by `setImmediate()`. + */ + function clearImmediate(immediate: NodeJS.Immediate | undefined): void; + /** + * Cancels a `Timeout` object created by `setInterval()`. + * @since v0.0.1 + * @param timeout A `Timeout` object as returned by `setInterval()` + * or the primitive of the `Timeout` object as a string or a number. + */ + function clearInterval(timeout: NodeJS.Timeout | string | number | undefined): void; + /** + * Cancels a `Timeout` object created by `setTimeout()`. + * @since v0.0.1 + * @param timeout A `Timeout` object as returned by `setTimeout()` + * or the primitive of the `Timeout` object as a string or a number. + */ + function clearTimeout(timeout: NodeJS.Timeout | string | number | undefined): void; + /** + * The `queueMicrotask()` method queues a microtask to invoke `callback`. If + * `callback` throws an exception, the `process` object `'uncaughtException'` + * event will be emitted. + * + * The microtask queue is managed by V8 and may be used in a similar manner to + * the `process.nextTick()` queue, which is managed by Node.js. The + * `process.nextTick()` queue is always processed before the microtask queue + * within each turn of the Node.js event loop. + * @since v11.0.0 + * @param callback Function to be queued. + */ + function queueMicrotask(callback: () => void): void; + } + import clearImmediate = globalThis.clearImmediate; + import clearInterval = globalThis.clearInterval; + import clearTimeout = globalThis.clearTimeout; + import setImmediate = globalThis.setImmediate; + import setInterval = globalThis.setInterval; + import setTimeout = globalThis.setTimeout; + export { clearImmediate, clearInterval, clearTimeout, promises, setImmediate, setInterval, setTimeout }; +} +declare module "node:timers" { + export * from "timers"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/timers/promises.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/timers/promises.d.ts new file mode 100644 index 00000000..7ad2b297 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/timers/promises.d.ts @@ -0,0 +1,108 @@ +/** + * The `timers/promises` API provides an alternative set of timer functions + * that return `Promise` objects. The API is accessible via + * `require('node:timers/promises')`. + * + * ```js + * import { + * setTimeout, + * setImmediate, + * setInterval, + * } from 'node:timers/promises'; + * ``` + * @since v15.0.0 + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/timers/promises.js) + */ +declare module "timers/promises" { + import { TimerOptions } from "node:timers"; + /** + * ```js + * import { + * setTimeout, + * } from 'node:timers/promises'; + * + * const res = await setTimeout(100, 'result'); + * + * console.log(res); // Prints 'result' + * ``` + * @since v15.0.0 + * @param delay The number of milliseconds to wait before fulfilling the + * promise. **Default:** `1`. + * @param value A value with which the promise is fulfilled. + */ + function setTimeout(delay?: number, value?: T, options?: TimerOptions): Promise; + /** + * ```js + * import { + * setImmediate, + * } from 'node:timers/promises'; + * + * const res = await setImmediate('result'); + * + * console.log(res); // Prints 'result' + * ``` + * @since v15.0.0 + * @param value A value with which the promise is fulfilled. + */ + function setImmediate(value?: T, options?: TimerOptions): Promise; + /** + * Returns an async iterator that generates values in an interval of `delay` ms. + * If `ref` is `true`, you need to call `next()` of async iterator explicitly + * or implicitly to keep the event loop alive. + * + * ```js + * import { + * setInterval, + * } from 'node:timers/promises'; + * + * const interval = 100; + * for await (const startTime of setInterval(interval, Date.now())) { + * const now = Date.now(); + * console.log(now); + * if ((now - startTime) > 1000) + * break; + * } + * console.log(Date.now()); + * ``` + * @since v15.9.0 + * @param delay The number of milliseconds to wait between iterations. + * **Default:** `1`. + * @param value A value with which the iterator returns. + */ + function setInterval(delay?: number, value?: T, options?: TimerOptions): NodeJS.AsyncIterator; + interface Scheduler { + /** + * An experimental API defined by the [Scheduling APIs](https://github.com/WICG/scheduling-apis) draft specification + * being developed as a standard Web Platform API. + * + * Calling `timersPromises.scheduler.wait(delay, options)` is roughly equivalent + * to calling `timersPromises.setTimeout(delay, undefined, options)` except that + * the `ref` option is not supported. + * + * ```js + * import { scheduler } from 'node:timers/promises'; + * + * await scheduler.wait(1000); // Wait one second before continuing + * ``` + * @since v17.3.0, v16.14.0 + * @experimental + * @param delay The number of milliseconds to wait before resolving the + * promise. + */ + wait(delay: number, options?: { signal?: AbortSignal }): Promise; + /** + * An experimental API defined by the [Scheduling APIs](https://github.com/WICG/scheduling-apis) draft specification + * being developed as a standard Web Platform API. + * + * Calling `timersPromises.scheduler.yield()` is equivalent to calling + * `timersPromises.setImmediate()` with no arguments. + * @since v17.3.0, v16.14.0 + * @experimental + */ + yield(): Promise; + } + const scheduler: Scheduler; +} +declare module "node:timers/promises" { + export * from "timers/promises"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/tls.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/tls.d.ts new file mode 100644 index 00000000..5d52de81 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/tls.d.ts @@ -0,0 +1,1269 @@ +/** + * The `node:tls` module provides an implementation of the Transport Layer Security + * (TLS) and Secure Socket Layer (SSL) protocols that is built on top of OpenSSL. + * The module can be accessed using: + * + * ```js + * import tls from 'node:tls'; + * ``` + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/tls.js) + */ +declare module "tls" { + import { NonSharedBuffer } from "node:buffer"; + import { X509Certificate } from "node:crypto"; + import * as net from "node:net"; + import * as stream from "stream"; + const CLIENT_RENEG_LIMIT: number; + const CLIENT_RENEG_WINDOW: number; + interface Certificate { + /** + * Country code. + */ + C: string; + /** + * Street. + */ + ST: string; + /** + * Locality. + */ + L: string; + /** + * Organization. + */ + O: string; + /** + * Organizational unit. + */ + OU: string; + /** + * Common name. + */ + CN: string; + } + interface PeerCertificate { + /** + * `true` if a Certificate Authority (CA), `false` otherwise. + * @since v18.13.0 + */ + ca: boolean; + /** + * The DER encoded X.509 certificate data. + */ + raw: NonSharedBuffer; + /** + * The certificate subject. + */ + subject: Certificate; + /** + * The certificate issuer, described in the same terms as the `subject`. + */ + issuer: Certificate; + /** + * The date-time the certificate is valid from. + */ + valid_from: string; + /** + * The date-time the certificate is valid to. + */ + valid_to: string; + /** + * The certificate serial number, as a hex string. + */ + serialNumber: string; + /** + * The SHA-1 digest of the DER encoded certificate. + * It is returned as a `:` separated hexadecimal string. + */ + fingerprint: string; + /** + * The SHA-256 digest of the DER encoded certificate. + * It is returned as a `:` separated hexadecimal string. + */ + fingerprint256: string; + /** + * The SHA-512 digest of the DER encoded certificate. + * It is returned as a `:` separated hexadecimal string. + */ + fingerprint512: string; + /** + * The extended key usage, a set of OIDs. + */ + ext_key_usage?: string[]; + /** + * A string containing concatenated names for the subject, + * an alternative to the `subject` names. + */ + subjectaltname?: string; + /** + * An array describing the AuthorityInfoAccess, used with OCSP. + */ + infoAccess?: NodeJS.Dict; + /** + * For RSA keys: The RSA bit size. + * + * For EC keys: The key size in bits. + */ + bits?: number; + /** + * The RSA exponent, as a string in hexadecimal number notation. + */ + exponent?: string; + /** + * The RSA modulus, as a hexadecimal string. + */ + modulus?: string; + /** + * The public key. + */ + pubkey?: NonSharedBuffer; + /** + * The ASN.1 name of the OID of the elliptic curve. + * Well-known curves are identified by an OID. + * While it is unusual, it is possible that the curve + * is identified by its mathematical properties, + * in which case it will not have an OID. + */ + asn1Curve?: string; + /** + * The NIST name for the elliptic curve, if it has one + * (not all well-known curves have been assigned names by NIST). + */ + nistCurve?: string; + } + interface DetailedPeerCertificate extends PeerCertificate { + /** + * The issuer certificate object. + * For self-signed certificates, this may be a circular reference. + */ + issuerCertificate: DetailedPeerCertificate; + } + interface CipherNameAndProtocol { + /** + * The cipher name. + */ + name: string; + /** + * SSL/TLS protocol version. + */ + version: string; + /** + * IETF name for the cipher suite. + */ + standardName: string; + } + interface EphemeralKeyInfo { + /** + * The supported types are 'DH' and 'ECDH'. + */ + type: string; + /** + * The name property is available only when type is 'ECDH'. + */ + name?: string | undefined; + /** + * The size of parameter of an ephemeral key exchange. + */ + size: number; + } + interface KeyObject { + /** + * Private keys in PEM format. + */ + pem: string | Buffer; + /** + * Optional passphrase. + */ + passphrase?: string | undefined; + } + interface PxfObject { + /** + * PFX or PKCS12 encoded private key and certificate chain. + */ + buf: string | Buffer; + /** + * Optional passphrase. + */ + passphrase?: string | undefined; + } + interface TLSSocketOptions extends SecureContextOptions, CommonConnectionOptions { + /** + * If true the TLS socket will be instantiated in server-mode. + * Defaults to false. + */ + isServer?: boolean | undefined; + /** + * An optional net.Server instance. + */ + server?: net.Server | undefined; + /** + * An optional Buffer instance containing a TLS session. + */ + session?: Buffer | undefined; + /** + * If true, specifies that the OCSP status request extension will be + * added to the client hello and an 'OCSPResponse' event will be + * emitted on the socket before establishing a secure communication + */ + requestOCSP?: boolean | undefined; + } + /** + * Performs transparent encryption of written data and all required TLS + * negotiation. + * + * Instances of `tls.TLSSocket` implement the duplex `Stream` interface. + * + * Methods that return TLS connection metadata (e.g.{@link TLSSocket.getPeerCertificate}) will only return data while the + * connection is open. + * @since v0.11.4 + */ + class TLSSocket extends net.Socket { + /** + * Construct a new tls.TLSSocket object from an existing TCP socket. + */ + constructor(socket: net.Socket | stream.Duplex, options?: TLSSocketOptions); + /** + * This property is `true` if the peer certificate was signed by one of the CAs + * specified when creating the `tls.TLSSocket` instance, otherwise `false`. + * @since v0.11.4 + */ + authorized: boolean; + /** + * Returns the reason why the peer's certificate was not been verified. This + * property is set only when `tlsSocket.authorized === false`. + * @since v0.11.4 + */ + authorizationError: Error; + /** + * Always returns `true`. This may be used to distinguish TLS sockets from regular`net.Socket` instances. + * @since v0.11.4 + */ + encrypted: true; + /** + * String containing the selected ALPN protocol. + * Before a handshake has completed, this value is always null. + * When a handshake is completed but not ALPN protocol was selected, tlsSocket.alpnProtocol equals false. + */ + alpnProtocol: string | false | null; + /** + * Returns an object representing the local certificate. The returned object has + * some properties corresponding to the fields of the certificate. + * + * See {@link TLSSocket.getPeerCertificate} for an example of the certificate + * structure. + * + * If there is no local certificate, an empty object will be returned. If the + * socket has been destroyed, `null` will be returned. + * @since v11.2.0 + */ + getCertificate(): PeerCertificate | object | null; + /** + * Returns an object containing information on the negotiated cipher suite. + * + * For example, a TLSv1.2 protocol with AES256-SHA cipher: + * + * ```json + * { + * "name": "AES256-SHA", + * "standardName": "TLS_RSA_WITH_AES_256_CBC_SHA", + * "version": "SSLv3" + * } + * ``` + * + * See [SSL\_CIPHER\_get\_name](https://www.openssl.org/docs/man1.1.1/man3/SSL_CIPHER_get_name.html) for more information. + * @since v0.11.4 + */ + getCipher(): CipherNameAndProtocol; + /** + * Returns an object representing the type, name, and size of parameter of + * an ephemeral key exchange in `perfect forward secrecy` on a client + * connection. It returns an empty object when the key exchange is not + * ephemeral. As this is only supported on a client socket; `null` is returned + * if called on a server socket. The supported types are `'DH'` and `'ECDH'`. The `name` property is available only when type is `'ECDH'`. + * + * For example: `{ type: 'ECDH', name: 'prime256v1', size: 256 }`. + * @since v5.0.0 + */ + getEphemeralKeyInfo(): EphemeralKeyInfo | object | null; + /** + * As the `Finished` messages are message digests of the complete handshake + * (with a total of 192 bits for TLS 1.0 and more for SSL 3.0), they can + * be used for external authentication procedures when the authentication + * provided by SSL/TLS is not desired or is not enough. + * + * Corresponds to the `SSL_get_finished` routine in OpenSSL and may be used + * to implement the `tls-unique` channel binding from [RFC 5929](https://tools.ietf.org/html/rfc5929). + * @since v9.9.0 + * @return The latest `Finished` message that has been sent to the socket as part of a SSL/TLS handshake, or `undefined` if no `Finished` message has been sent yet. + */ + getFinished(): NonSharedBuffer | undefined; + /** + * Returns an object representing the peer's certificate. If the peer does not + * provide a certificate, an empty object will be returned. If the socket has been + * destroyed, `null` will be returned. + * + * If the full certificate chain was requested, each certificate will include an`issuerCertificate` property containing an object representing its issuer's + * certificate. + * @since v0.11.4 + * @param detailed Include the full certificate chain if `true`, otherwise include just the peer's certificate. + * @return A certificate object. + */ + getPeerCertificate(detailed: true): DetailedPeerCertificate; + getPeerCertificate(detailed?: false): PeerCertificate; + getPeerCertificate(detailed?: boolean): PeerCertificate | DetailedPeerCertificate; + /** + * As the `Finished` messages are message digests of the complete handshake + * (with a total of 192 bits for TLS 1.0 and more for SSL 3.0), they can + * be used for external authentication procedures when the authentication + * provided by SSL/TLS is not desired or is not enough. + * + * Corresponds to the `SSL_get_peer_finished` routine in OpenSSL and may be used + * to implement the `tls-unique` channel binding from [RFC 5929](https://tools.ietf.org/html/rfc5929). + * @since v9.9.0 + * @return The latest `Finished` message that is expected or has actually been received from the socket as part of a SSL/TLS handshake, or `undefined` if there is no `Finished` message so + * far. + */ + getPeerFinished(): NonSharedBuffer | undefined; + /** + * Returns a string containing the negotiated SSL/TLS protocol version of the + * current connection. The value `'unknown'` will be returned for connected + * sockets that have not completed the handshaking process. The value `null` will + * be returned for server sockets or disconnected client sockets. + * + * Protocol versions are: + * + * * `'SSLv3'` + * * `'TLSv1'` + * * `'TLSv1.1'` + * * `'TLSv1.2'` + * * `'TLSv1.3'` + * + * See the OpenSSL [`SSL_get_version`](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html) documentation for more information. + * @since v5.7.0 + */ + getProtocol(): string | null; + /** + * Returns the TLS session data or `undefined` if no session was + * negotiated. On the client, the data can be provided to the `session` option of {@link connect} to resume the connection. On the server, it may be useful + * for debugging. + * + * See `Session Resumption` for more information. + * + * Note: `getSession()` works only for TLSv1.2 and below. For TLSv1.3, applications + * must use the `'session'` event (it also works for TLSv1.2 and below). + * @since v0.11.4 + */ + getSession(): NonSharedBuffer | undefined; + /** + * See [SSL\_get\_shared\_sigalgs](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_shared_sigalgs.html) for more information. + * @since v12.11.0 + * @return List of signature algorithms shared between the server and the client in the order of decreasing preference. + */ + getSharedSigalgs(): string[]; + /** + * For a client, returns the TLS session ticket if one is available, or`undefined`. For a server, always returns `undefined`. + * + * It may be useful for debugging. + * + * See `Session Resumption` for more information. + * @since v0.11.4 + */ + getTLSTicket(): NonSharedBuffer | undefined; + /** + * See `Session Resumption` for more information. + * @since v0.5.6 + * @return `true` if the session was reused, `false` otherwise. + */ + isSessionReused(): boolean; + /** + * The `tlsSocket.renegotiate()` method initiates a TLS renegotiation process. + * Upon completion, the `callback` function will be passed a single argument + * that is either an `Error` (if the request failed) or `null`. + * + * This method can be used to request a peer's certificate after the secure + * connection has been established. + * + * When running as the server, the socket will be destroyed with an error after `handshakeTimeout` timeout. + * + * For TLSv1.3, renegotiation cannot be initiated, it is not supported by the + * protocol. + * @since v0.11.8 + * @param callback If `renegotiate()` returned `true`, callback is attached once to the `'secure'` event. If `renegotiate()` returned `false`, `callback` will be called in the next tick with + * an error, unless the `tlsSocket` has been destroyed, in which case `callback` will not be called at all. + * @return `true` if renegotiation was initiated, `false` otherwise. + */ + renegotiate( + options: { + rejectUnauthorized?: boolean | undefined; + requestCert?: boolean | undefined; + }, + callback: (err: Error | null) => void, + ): undefined | boolean; + /** + * The `tlsSocket.setKeyCert()` method sets the private key and certificate to use for the socket. + * This is mainly useful if you wish to select a server certificate from a TLS server's `ALPNCallback`. + * @since v22.5.0, v20.17.0 + * @param context An object containing at least `key` and `cert` properties from the {@link createSecureContext()} `options`, + * or a TLS context object created with {@link createSecureContext()} itself. + */ + setKeyCert(context: SecureContextOptions | SecureContext): void; + /** + * The `tlsSocket.setMaxSendFragment()` method sets the maximum TLS fragment size. + * Returns `true` if setting the limit succeeded; `false` otherwise. + * + * Smaller fragment sizes decrease the buffering latency on the client: larger + * fragments are buffered by the TLS layer until the entire fragment is received + * and its integrity is verified; large fragments can span multiple roundtrips + * and their processing can be delayed due to packet loss or reordering. However, + * smaller fragments add extra TLS framing bytes and CPU overhead, which may + * decrease overall server throughput. + * @since v0.11.11 + * @param [size=16384] The maximum TLS fragment size. The maximum value is `16384`. + */ + setMaxSendFragment(size: number): boolean; + /** + * Disables TLS renegotiation for this `TLSSocket` instance. Once called, attempts + * to renegotiate will trigger an `'error'` event on the `TLSSocket`. + * @since v8.4.0 + */ + disableRenegotiation(): void; + /** + * When enabled, TLS packet trace information is written to `stderr`. This can be + * used to debug TLS connection problems. + * + * The format of the output is identical to the output of`openssl s_client -trace` or `openssl s_server -trace`. While it is produced by + * OpenSSL's `SSL_trace()` function, the format is undocumented, can change + * without notice, and should not be relied on. + * @since v12.2.0 + */ + enableTrace(): void; + /** + * Returns the peer certificate as an `X509Certificate` object. + * + * If there is no peer certificate, or the socket has been destroyed,`undefined` will be returned. + * @since v15.9.0 + */ + getPeerX509Certificate(): X509Certificate | undefined; + /** + * Returns the local certificate as an `X509Certificate` object. + * + * If there is no local certificate, or the socket has been destroyed,`undefined` will be returned. + * @since v15.9.0 + */ + getX509Certificate(): X509Certificate | undefined; + /** + * Keying material is used for validations to prevent different kind of attacks in + * network protocols, for example in the specifications of IEEE 802.1X. + * + * Example + * + * ```js + * const keyingMaterial = tlsSocket.exportKeyingMaterial( + * 128, + * 'client finished'); + * + * /* + * Example return value of keyingMaterial: + * + * + * ``` + * + * See the OpenSSL [`SSL_export_keying_material`](https://www.openssl.org/docs/man1.1.1/man3/SSL_export_keying_material.html) documentation for more + * information. + * @since v13.10.0, v12.17.0 + * @param length number of bytes to retrieve from keying material + * @param label an application specific label, typically this will be a value from the [IANA Exporter Label + * Registry](https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#exporter-labels). + * @param context Optionally provide a context. + * @return requested bytes of the keying material + */ + exportKeyingMaterial(length: number, label: string, context: Buffer): NonSharedBuffer; + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "OCSPResponse", listener: (response: NonSharedBuffer) => void): this; + addListener(event: "secureConnect", listener: () => void): this; + addListener(event: "session", listener: (session: NonSharedBuffer) => void): this; + addListener(event: "keylog", listener: (line: NonSharedBuffer) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "OCSPResponse", response: NonSharedBuffer): boolean; + emit(event: "secureConnect"): boolean; + emit(event: "session", session: NonSharedBuffer): boolean; + emit(event: "keylog", line: NonSharedBuffer): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "OCSPResponse", listener: (response: NonSharedBuffer) => void): this; + on(event: "secureConnect", listener: () => void): this; + on(event: "session", listener: (session: NonSharedBuffer) => void): this; + on(event: "keylog", listener: (line: NonSharedBuffer) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "OCSPResponse", listener: (response: NonSharedBuffer) => void): this; + once(event: "secureConnect", listener: () => void): this; + once(event: "session", listener: (session: NonSharedBuffer) => void): this; + once(event: "keylog", listener: (line: NonSharedBuffer) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "OCSPResponse", listener: (response: NonSharedBuffer) => void): this; + prependListener(event: "secureConnect", listener: () => void): this; + prependListener(event: "session", listener: (session: NonSharedBuffer) => void): this; + prependListener(event: "keylog", listener: (line: NonSharedBuffer) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "OCSPResponse", listener: (response: NonSharedBuffer) => void): this; + prependOnceListener(event: "secureConnect", listener: () => void): this; + prependOnceListener(event: "session", listener: (session: NonSharedBuffer) => void): this; + prependOnceListener(event: "keylog", listener: (line: NonSharedBuffer) => void): this; + } + interface CommonConnectionOptions { + /** + * An optional TLS context object from tls.createSecureContext() + */ + secureContext?: SecureContext | undefined; + /** + * When enabled, TLS packet trace information is written to `stderr`. This can be + * used to debug TLS connection problems. + * @default false + */ + enableTrace?: boolean | undefined; + /** + * If true the server will request a certificate from clients that + * connect and attempt to verify that certificate. Defaults to + * false. + */ + requestCert?: boolean | undefined; + /** + * An array of strings or a Buffer naming possible ALPN protocols. + * (Protocols should be ordered by their priority.) + */ + ALPNProtocols?: readonly string[] | NodeJS.ArrayBufferView | undefined; + /** + * SNICallback(servername, cb) A function that will be + * called if the client supports SNI TLS extension. Two arguments + * will be passed when called: servername and cb. SNICallback should + * invoke cb(null, ctx), where ctx is a SecureContext instance. + * (tls.createSecureContext(...) can be used to get a proper + * SecureContext.) If SNICallback wasn't provided the default callback + * with high-level API will be used (see below). + */ + SNICallback?: ((servername: string, cb: (err: Error | null, ctx?: SecureContext) => void) => void) | undefined; + /** + * If true the server will reject any connection which is not + * authorized with the list of supplied CAs. This option only has an + * effect if requestCert is true. + * @default true + */ + rejectUnauthorized?: boolean | undefined; + } + interface TlsOptions extends SecureContextOptions, CommonConnectionOptions, net.ServerOpts { + /** + * Abort the connection if the SSL/TLS handshake does not finish in the + * specified number of milliseconds. A 'tlsClientError' is emitted on + * the tls.Server object whenever a handshake times out. Default: + * 120000 (120 seconds). + */ + handshakeTimeout?: number | undefined; + /** + * The number of seconds after which a TLS session created by the + * server will no longer be resumable. See Session Resumption for more + * information. Default: 300. + */ + sessionTimeout?: number | undefined; + /** + * 48-bytes of cryptographically strong pseudo-random data. + */ + ticketKeys?: Buffer | undefined; + /** + * @param socket + * @param identity identity parameter sent from the client. + * @return pre-shared key that must either be + * a buffer or `null` to stop the negotiation process. Returned PSK must be + * compatible with the selected cipher's digest. + * + * When negotiating TLS-PSK (pre-shared keys), this function is called + * with the identity provided by the client. + * If the return value is `null` the negotiation process will stop and an + * "unknown_psk_identity" alert message will be sent to the other party. + * If the server wishes to hide the fact that the PSK identity was not known, + * the callback must provide some random data as `psk` to make the connection + * fail with "decrypt_error" before negotiation is finished. + * PSK ciphers are disabled by default, and using TLS-PSK thus + * requires explicitly specifying a cipher suite with the `ciphers` option. + * More information can be found in the RFC 4279. + */ + pskCallback?: ((socket: TLSSocket, identity: string) => NodeJS.ArrayBufferView | null) | undefined; + /** + * hint to send to a client to help + * with selecting the identity during TLS-PSK negotiation. Will be ignored + * in TLS 1.3. Upon failing to set pskIdentityHint `tlsClientError` will be + * emitted with `ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED` code. + */ + pskIdentityHint?: string | undefined; + } + interface PSKCallbackNegotation { + psk: NodeJS.ArrayBufferView; + identity: string; + } + interface ConnectionOptions extends SecureContextOptions, CommonConnectionOptions { + host?: string | undefined; + port?: number | undefined; + path?: string | undefined; // Creates unix socket connection to path. If this option is specified, `host` and `port` are ignored. + socket?: stream.Duplex | undefined; // Establish secure connection on a given socket rather than creating a new socket + checkServerIdentity?: typeof checkServerIdentity | undefined; + servername?: string | undefined; // SNI TLS Extension + session?: Buffer | undefined; + minDHSize?: number | undefined; + lookup?: net.LookupFunction | undefined; + timeout?: number | undefined; + /** + * When negotiating TLS-PSK (pre-shared keys), this function is called + * with optional identity `hint` provided by the server or `null` + * in case of TLS 1.3 where `hint` was removed. + * It will be necessary to provide a custom `tls.checkServerIdentity()` + * for the connection as the default one will try to check hostname/IP + * of the server against the certificate but that's not applicable for PSK + * because there won't be a certificate present. + * More information can be found in the RFC 4279. + * + * @param hint message sent from the server to help client + * decide which identity to use during negotiation. + * Always `null` if TLS 1.3 is used. + * @returns Return `null` to stop the negotiation process. `psk` must be + * compatible with the selected cipher's digest. + * `identity` must use UTF-8 encoding. + */ + pskCallback?: ((hint: string | null) => PSKCallbackNegotation | null) | undefined; + } + /** + * Accepts encrypted connections using TLS or SSL. + * @since v0.3.2 + */ + class Server extends net.Server { + constructor(secureConnectionListener?: (socket: TLSSocket) => void); + constructor(options: TlsOptions, secureConnectionListener?: (socket: TLSSocket) => void); + /** + * The `server.addContext()` method adds a secure context that will be used if + * the client request's SNI name matches the supplied `hostname` (or wildcard). + * + * When there are multiple matching contexts, the most recently added one is + * used. + * @since v0.5.3 + * @param hostname A SNI host name or wildcard (e.g. `'*'`) + * @param context An object containing any of the possible properties from the {@link createSecureContext} `options` arguments (e.g. `key`, `cert`, `ca`, etc), or a TLS context object created + * with {@link createSecureContext} itself. + */ + addContext(hostname: string, context: SecureContextOptions | SecureContext): void; + /** + * Returns the session ticket keys. + * + * See `Session Resumption` for more information. + * @since v3.0.0 + * @return A 48-byte buffer containing the session ticket keys. + */ + getTicketKeys(): NonSharedBuffer; + /** + * The `server.setSecureContext()` method replaces the secure context of an + * existing server. Existing connections to the server are not interrupted. + * @since v11.0.0 + * @param options An object containing any of the possible properties from the {@link createSecureContext} `options` arguments (e.g. `key`, `cert`, `ca`, etc). + */ + setSecureContext(options: SecureContextOptions): void; + /** + * Sets the session ticket keys. + * + * Changes to the ticket keys are effective only for future server connections. + * Existing or currently pending server connections will use the previous keys. + * + * See `Session Resumption` for more information. + * @since v3.0.0 + * @param keys A 48-byte buffer containing the session ticket keys. + */ + setTicketKeys(keys: Buffer): void; + /** + * events.EventEmitter + * 1. tlsClientError + * 2. newSession + * 3. OCSPRequest + * 4. resumeSession + * 5. secureConnection + * 6. keylog + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + addListener( + event: "newSession", + listener: (sessionId: NonSharedBuffer, sessionData: NonSharedBuffer, callback: () => void) => void, + ): this; + addListener( + event: "OCSPRequest", + listener: ( + certificate: NonSharedBuffer, + issuer: NonSharedBuffer, + callback: (err: Error | null, resp: Buffer | null) => void, + ) => void, + ): this; + addListener( + event: "resumeSession", + listener: ( + sessionId: NonSharedBuffer, + callback: (err: Error | null, sessionData: Buffer | null) => void, + ) => void, + ): this; + addListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + addListener(event: "keylog", listener: (line: NonSharedBuffer, tlsSocket: TLSSocket) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "tlsClientError", err: Error, tlsSocket: TLSSocket): boolean; + emit( + event: "newSession", + sessionId: NonSharedBuffer, + sessionData: NonSharedBuffer, + callback: () => void, + ): boolean; + emit( + event: "OCSPRequest", + certificate: NonSharedBuffer, + issuer: NonSharedBuffer, + callback: (err: Error | null, resp: Buffer | null) => void, + ): boolean; + emit( + event: "resumeSession", + sessionId: NonSharedBuffer, + callback: (err: Error | null, sessionData: Buffer | null) => void, + ): boolean; + emit(event: "secureConnection", tlsSocket: TLSSocket): boolean; + emit(event: "keylog", line: NonSharedBuffer, tlsSocket: TLSSocket): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + on( + event: "newSession", + listener: (sessionId: NonSharedBuffer, sessionData: NonSharedBuffer, callback: () => void) => void, + ): this; + on( + event: "OCSPRequest", + listener: ( + certificate: NonSharedBuffer, + issuer: NonSharedBuffer, + callback: (err: Error | null, resp: Buffer | null) => void, + ) => void, + ): this; + on( + event: "resumeSession", + listener: ( + sessionId: NonSharedBuffer, + callback: (err: Error | null, sessionData: Buffer | null) => void, + ) => void, + ): this; + on(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + on(event: "keylog", listener: (line: NonSharedBuffer, tlsSocket: TLSSocket) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + once( + event: "newSession", + listener: (sessionId: NonSharedBuffer, sessionData: NonSharedBuffer, callback: () => void) => void, + ): this; + once( + event: "OCSPRequest", + listener: ( + certificate: NonSharedBuffer, + issuer: NonSharedBuffer, + callback: (err: Error | null, resp: Buffer | null) => void, + ) => void, + ): this; + once( + event: "resumeSession", + listener: ( + sessionId: NonSharedBuffer, + callback: (err: Error | null, sessionData: Buffer | null) => void, + ) => void, + ): this; + once(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + once(event: "keylog", listener: (line: NonSharedBuffer, tlsSocket: TLSSocket) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + prependListener( + event: "newSession", + listener: (sessionId: NonSharedBuffer, sessionData: NonSharedBuffer, callback: () => void) => void, + ): this; + prependListener( + event: "OCSPRequest", + listener: ( + certificate: NonSharedBuffer, + issuer: NonSharedBuffer, + callback: (err: Error | null, resp: Buffer | null) => void, + ) => void, + ): this; + prependListener( + event: "resumeSession", + listener: ( + sessionId: NonSharedBuffer, + callback: (err: Error | null, sessionData: Buffer | null) => void, + ) => void, + ): this; + prependListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + prependListener(event: "keylog", listener: (line: NonSharedBuffer, tlsSocket: TLSSocket) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + prependOnceListener( + event: "newSession", + listener: (sessionId: NonSharedBuffer, sessionData: NonSharedBuffer, callback: () => void) => void, + ): this; + prependOnceListener( + event: "OCSPRequest", + listener: ( + certificate: NonSharedBuffer, + issuer: NonSharedBuffer, + callback: (err: Error | null, resp: Buffer | null) => void, + ) => void, + ): this; + prependOnceListener( + event: "resumeSession", + listener: ( + sessionId: NonSharedBuffer, + callback: (err: Error | null, sessionData: Buffer | null) => void, + ) => void, + ): this; + prependOnceListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + prependOnceListener(event: "keylog", listener: (line: NonSharedBuffer, tlsSocket: TLSSocket) => void): this; + } + type SecureVersion = "TLSv1.3" | "TLSv1.2" | "TLSv1.1" | "TLSv1"; + interface SecureContextOptions { + /** + * If set, this will be called when a client opens a connection using the ALPN extension. + * One argument will be passed to the callback: an object containing `servername` and `protocols` fields, + * respectively containing the server name from the SNI extension (if any) and an array of + * ALPN protocol name strings. The callback must return either one of the strings listed in `protocols`, + * which will be returned to the client as the selected ALPN protocol, or `undefined`, + * to reject the connection with a fatal alert. If a string is returned that does not match one of + * the client's ALPN protocols, an error will be thrown. + * This option cannot be used with the `ALPNProtocols` option, and setting both options will throw an error. + */ + ALPNCallback?: ((arg: { servername: string; protocols: string[] }) => string | undefined) | undefined; + /** + * Treat intermediate (non-self-signed) + * certificates in the trust CA certificate list as trusted. + * @since v22.9.0, v20.18.0 + */ + allowPartialTrustChain?: boolean | undefined; + /** + * Optionally override the trusted CA certificates. Default is to trust + * the well-known CAs curated by Mozilla. Mozilla's CAs are completely + * replaced when CAs are explicitly specified using this option. + */ + ca?: string | Buffer | Array | undefined; + /** + * Cert chains in PEM format. One cert chain should be provided per + * private key. Each cert chain should consist of the PEM formatted + * certificate for a provided private key, followed by the PEM + * formatted intermediate certificates (if any), in order, and not + * including the root CA (the root CA must be pre-known to the peer, + * see ca). When providing multiple cert chains, they do not have to + * be in the same order as their private keys in key. If the + * intermediate certificates are not provided, the peer will not be + * able to validate the certificate, and the handshake will fail. + */ + cert?: string | Buffer | Array | undefined; + /** + * Colon-separated list of supported signature algorithms. The list + * can contain digest algorithms (SHA256, MD5 etc.), public key + * algorithms (RSA-PSS, ECDSA etc.), combination of both (e.g + * 'RSA+SHA384') or TLS v1.3 scheme names (e.g. rsa_pss_pss_sha512). + */ + sigalgs?: string | undefined; + /** + * Cipher suite specification, replacing the default. For more + * information, see modifying the default cipher suite. Permitted + * ciphers can be obtained via tls.getCiphers(). Cipher names must be + * uppercased in order for OpenSSL to accept them. + */ + ciphers?: string | undefined; + /** + * Name of an OpenSSL engine which can provide the client certificate. + * @deprecated + */ + clientCertEngine?: string | undefined; + /** + * PEM formatted CRLs (Certificate Revocation Lists). + */ + crl?: string | Buffer | Array | undefined; + /** + * `'auto'` or custom Diffie-Hellman parameters, required for non-ECDHE perfect forward secrecy. + * If omitted or invalid, the parameters are silently discarded and DHE ciphers will not be available. + * ECDHE-based perfect forward secrecy will still be available. + */ + dhparam?: string | Buffer | undefined; + /** + * A string describing a named curve or a colon separated list of curve + * NIDs or names, for example P-521:P-384:P-256, to use for ECDH key + * agreement. Set to auto to select the curve automatically. Use + * crypto.getCurves() to obtain a list of available curve names. On + * recent releases, openssl ecparam -list_curves will also display the + * name and description of each available elliptic curve. Default: + * tls.DEFAULT_ECDH_CURVE. + */ + ecdhCurve?: string | undefined; + /** + * Attempt to use the server's cipher suite preferences instead of the + * client's. When true, causes SSL_OP_CIPHER_SERVER_PREFERENCE to be + * set in secureOptions + */ + honorCipherOrder?: boolean | undefined; + /** + * Private keys in PEM format. PEM allows the option of private keys + * being encrypted. Encrypted keys will be decrypted with + * options.passphrase. Multiple keys using different algorithms can be + * provided either as an array of unencrypted key strings or buffers, + * or an array of objects in the form {pem: [, + * passphrase: ]}. The object form can only occur in an array. + * object.passphrase is optional. Encrypted keys will be decrypted with + * object.passphrase if provided, or options.passphrase if it is not. + */ + key?: string | Buffer | Array | undefined; + /** + * Name of an OpenSSL engine to get private key from. Should be used + * together with privateKeyIdentifier. + * @deprecated + */ + privateKeyEngine?: string | undefined; + /** + * Identifier of a private key managed by an OpenSSL engine. Should be + * used together with privateKeyEngine. Should not be set together with + * key, because both options define a private key in different ways. + * @deprecated + */ + privateKeyIdentifier?: string | undefined; + /** + * Optionally set the maximum TLS version to allow. One + * of `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. Cannot be specified along with the + * `secureProtocol` option, use one or the other. + * **Default:** `'TLSv1.3'`, unless changed using CLI options. Using + * `--tls-max-v1.2` sets the default to `'TLSv1.2'`. Using `--tls-max-v1.3` sets the default to + * `'TLSv1.3'`. If multiple of the options are provided, the highest maximum is used. + */ + maxVersion?: SecureVersion | undefined; + /** + * Optionally set the minimum TLS version to allow. One + * of `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. Cannot be specified along with the + * `secureProtocol` option, use one or the other. It is not recommended to use + * less than TLSv1.2, but it may be required for interoperability. + * **Default:** `'TLSv1.2'`, unless changed using CLI options. Using + * `--tls-v1.0` sets the default to `'TLSv1'`. Using `--tls-v1.1` sets the default to + * `'TLSv1.1'`. Using `--tls-min-v1.3` sets the default to + * 'TLSv1.3'. If multiple of the options are provided, the lowest minimum is used. + */ + minVersion?: SecureVersion | undefined; + /** + * Shared passphrase used for a single private key and/or a PFX. + */ + passphrase?: string | undefined; + /** + * PFX or PKCS12 encoded private key and certificate chain. pfx is an + * alternative to providing key and cert individually. PFX is usually + * encrypted, if it is, passphrase will be used to decrypt it. Multiple + * PFX can be provided either as an array of unencrypted PFX buffers, + * or an array of objects in the form {buf: [, + * passphrase: ]}. The object form can only occur in an array. + * object.passphrase is optional. Encrypted PFX will be decrypted with + * object.passphrase if provided, or options.passphrase if it is not. + */ + pfx?: string | Buffer | Array | undefined; + /** + * Optionally affect the OpenSSL protocol behavior, which is not + * usually necessary. This should be used carefully if at all! Value is + * a numeric bitmask of the SSL_OP_* options from OpenSSL Options + */ + secureOptions?: number | undefined; // Value is a numeric bitmask of the `SSL_OP_*` options + /** + * Legacy mechanism to select the TLS protocol version to use, it does + * not support independent control of the minimum and maximum version, + * and does not support limiting the protocol to TLSv1.3. Use + * minVersion and maxVersion instead. The possible values are listed as + * SSL_METHODS, use the function names as strings. For example, use + * 'TLSv1_1_method' to force TLS version 1.1, or 'TLS_method' to allow + * any TLS protocol version up to TLSv1.3. It is not recommended to use + * TLS versions less than 1.2, but it may be required for + * interoperability. Default: none, see minVersion. + */ + secureProtocol?: string | undefined; + /** + * Opaque identifier used by servers to ensure session state is not + * shared between applications. Unused by clients. + */ + sessionIdContext?: string | undefined; + /** + * 48-bytes of cryptographically strong pseudo-random data. + * See Session Resumption for more information. + */ + ticketKeys?: Buffer | undefined; + /** + * The number of seconds after which a TLS session created by the + * server will no longer be resumable. See Session Resumption for more + * information. Default: 300. + */ + sessionTimeout?: number | undefined; + } + interface SecureContext { + context: any; + } + /** + * Verifies the certificate `cert` is issued to `hostname`. + * + * Returns [Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) object, populating it with `reason`, `host`, and `cert` on + * failure. On success, returns [undefined](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Undefined_type). + * + * This function is intended to be used in combination with the`checkServerIdentity` option that can be passed to {@link connect} and as + * such operates on a `certificate object`. For other purposes, consider using `x509.checkHost()` instead. + * + * This function can be overwritten by providing an alternative function as the `options.checkServerIdentity` option that is passed to `tls.connect()`. The + * overwriting function can call `tls.checkServerIdentity()` of course, to augment + * the checks done with additional verification. + * + * This function is only called if the certificate passed all other checks, such as + * being issued by trusted CA (`options.ca`). + * + * Earlier versions of Node.js incorrectly accepted certificates for a given`hostname` if a matching `uniformResourceIdentifier` subject alternative name + * was present (see [CVE-2021-44531](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44531)). Applications that wish to accept`uniformResourceIdentifier` subject alternative names can use + * a custom `options.checkServerIdentity` function that implements the desired behavior. + * @since v0.8.4 + * @param hostname The host name or IP address to verify the certificate against. + * @param cert A `certificate object` representing the peer's certificate. + */ + function checkServerIdentity(hostname: string, cert: PeerCertificate): Error | undefined; + /** + * Creates a new {@link Server}. The `secureConnectionListener`, if provided, is + * automatically set as a listener for the `'secureConnection'` event. + * + * The `ticketKeys` options is automatically shared between `node:cluster` module + * workers. + * + * The following illustrates a simple echo server: + * + * ```js + * import tls from 'node:tls'; + * import fs from 'node:fs'; + * + * const options = { + * key: fs.readFileSync('server-key.pem'), + * cert: fs.readFileSync('server-cert.pem'), + * + * // This is necessary only if using client certificate authentication. + * requestCert: true, + * + * // This is necessary only if the client uses a self-signed certificate. + * ca: [ fs.readFileSync('client-cert.pem') ], + * }; + * + * const server = tls.createServer(options, (socket) => { + * console.log('server connected', + * socket.authorized ? 'authorized' : 'unauthorized'); + * socket.write('welcome!\n'); + * socket.setEncoding('utf8'); + * socket.pipe(socket); + * }); + * server.listen(8000, () => { + * console.log('server bound'); + * }); + * ``` + * + * The server can be tested by connecting to it using the example client from {@link connect}. + * @since v0.3.2 + */ + function createServer(secureConnectionListener?: (socket: TLSSocket) => void): Server; + function createServer(options: TlsOptions, secureConnectionListener?: (socket: TLSSocket) => void): Server; + /** + * The `callback` function, if specified, will be added as a listener for the `'secureConnect'` event. + * + * `tls.connect()` returns a {@link TLSSocket} object. + * + * Unlike the `https` API, `tls.connect()` does not enable the + * SNI (Server Name Indication) extension by default, which may cause some + * servers to return an incorrect certificate or reject the connection + * altogether. To enable SNI, set the `servername` option in addition + * to `host`. + * + * The following illustrates a client for the echo server example from {@link createServer}: + * + * ```js + * // Assumes an echo server that is listening on port 8000. + * import tls from 'node:tls'; + * import fs from 'node:fs'; + * + * const options = { + * // Necessary only if the server requires client certificate authentication. + * key: fs.readFileSync('client-key.pem'), + * cert: fs.readFileSync('client-cert.pem'), + * + * // Necessary only if the server uses a self-signed certificate. + * ca: [ fs.readFileSync('server-cert.pem') ], + * + * // Necessary only if the server's cert isn't for "localhost". + * checkServerIdentity: () => { return null; }, + * }; + * + * const socket = tls.connect(8000, options, () => { + * console.log('client connected', + * socket.authorized ? 'authorized' : 'unauthorized'); + * process.stdin.pipe(socket); + * process.stdin.resume(); + * }); + * socket.setEncoding('utf8'); + * socket.on('data', (data) => { + * console.log(data); + * }); + * socket.on('end', () => { + * console.log('server ends connection'); + * }); + * ``` + * @since v0.11.3 + */ + function connect(options: ConnectionOptions, secureConnectListener?: () => void): TLSSocket; + function connect( + port: number, + host?: string, + options?: ConnectionOptions, + secureConnectListener?: () => void, + ): TLSSocket; + function connect(port: number, options?: ConnectionOptions, secureConnectListener?: () => void): TLSSocket; + /** + * `{@link createServer}` sets the default value of the `honorCipherOrder` option + * to `true`, other APIs that create secure contexts leave it unset. + * + * `{@link createServer}` uses a 128 bit truncated SHA1 hash value generated + * from `process.argv` as the default value of the `sessionIdContext` option, other + * APIs that create secure contexts have no default value. + * + * The `tls.createSecureContext()` method creates a `SecureContext` object. It is + * usable as an argument to several `tls` APIs, such as `server.addContext()`, + * but has no public methods. The {@link Server} constructor and the {@link createServer} method do not support the `secureContext` option. + * + * A key is _required_ for ciphers that use certificates. Either `key` or `pfx` can be used to provide it. + * + * If the `ca` option is not given, then Node.js will default to using [Mozilla's publicly trusted list of + * CAs](https://hg.mozilla.org/mozilla-central/raw-file/tip/security/nss/lib/ckfw/builtins/certdata.txt). + * + * Custom DHE parameters are discouraged in favor of the new `dhparam: 'auto' `option. When set to `'auto'`, well-known DHE parameters of sufficient strength + * will be selected automatically. Otherwise, if necessary, `openssl dhparam` can + * be used to create custom parameters. The key length must be greater than or + * equal to 1024 bits or else an error will be thrown. Although 1024 bits is + * permissible, use 2048 bits or larger for stronger security. + * @since v0.11.13 + */ + function createSecureContext(options?: SecureContextOptions): SecureContext; + /** + * Returns an array containing the CA certificates from various sources, depending on `type`: + * + * * `"default"`: return the CA certificates that will be used by the Node.js TLS clients by default. + * * When `--use-bundled-ca` is enabled (default), or `--use-openssl-ca` is not enabled, + * this would include CA certificates from the bundled Mozilla CA store. + * * When `--use-system-ca` is enabled, this would also include certificates from the system's + * trusted store. + * * When `NODE_EXTRA_CA_CERTS` is used, this would also include certificates loaded from the specified + * file. + * * `"system"`: return the CA certificates that are loaded from the system's trusted store, according + * to rules set by `--use-system-ca`. This can be used to get the certificates from the system + * when `--use-system-ca` is not enabled. + * * `"bundled"`: return the CA certificates from the bundled Mozilla CA store. This would be the same + * as `tls.rootCertificates`. + * * `"extra"`: return the CA certificates loaded from `NODE_EXTRA_CA_CERTS`. It's an empty array if + * `NODE_EXTRA_CA_CERTS` is not set. + * @since v22.15.0 + * @param type The type of CA certificates that will be returned. Valid values + * are `"default"`, `"system"`, `"bundled"` and `"extra"`. + * **Default:** `"default"`. + * @returns An array of PEM-encoded certificates. The array may contain duplicates + * if the same certificate is repeatedly stored in multiple sources. + */ + function getCACertificates(type?: "default" | "system" | "bundled" | "extra"): string[]; + /** + * Returns an array with the names of the supported TLS ciphers. The names are + * lower-case for historical reasons, but must be uppercased to be used in + * the `ciphers` option of `{@link createSecureContext}`. + * + * Not all supported ciphers are enabled by default. See + * [Modifying the default TLS cipher suite](https://nodejs.org/docs/latest-v24.x/api/tls.html#modifying-the-default-tls-cipher-suite). + * + * Cipher names that start with `'tls_'` are for TLSv1.3, all the others are for + * TLSv1.2 and below. + * + * ```js + * console.log(tls.getCiphers()); // ['aes128-gcm-sha256', 'aes128-sha', ...] + * ``` + * @since v0.10.2 + */ + function getCiphers(): string[]; + /** + * Sets the default CA certificates used by Node.js TLS clients. If the provided + * certificates are parsed successfully, they will become the default CA + * certificate list returned by {@link getCACertificates} and used + * by subsequent TLS connections that don't specify their own CA certificates. + * The certificates will be deduplicated before being set as the default. + * + * This function only affects the current Node.js thread. Previous + * sessions cached by the HTTPS agent won't be affected by this change, so + * this method should be called before any unwanted cachable TLS connections are + * made. + * + * To use system CA certificates as the default: + * + * ```js + * import tls from 'node:tls'; + * tls.setDefaultCACertificates(tls.getCACertificates('system')); + * ``` + * + * This function completely replaces the default CA certificate list. To add additional + * certificates to the existing defaults, get the current certificates and append to them: + * + * ```js + * import tls from 'node:tls'; + * const currentCerts = tls.getCACertificates('default'); + * const additionalCerts = ['-----BEGIN CERTIFICATE-----\n...']; + * tls.setDefaultCACertificates([...currentCerts, ...additionalCerts]); + * ``` + * @since v24.5.0 + * @param certs An array of CA certificates in PEM format. + */ + function setDefaultCACertificates(certs: ReadonlyArray): void; + /** + * The default curve name to use for ECDH key agreement in a tls server. + * The default value is `'auto'`. See `{@link createSecureContext()}` for further + * information. + * @since v0.11.13 + */ + let DEFAULT_ECDH_CURVE: string; + /** + * The default value of the `maxVersion` option of `{@link createSecureContext()}`. + * It can be assigned any of the supported TLS protocol versions, + * `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. **Default:** `'TLSv1.3'`, unless + * changed using CLI options. Using `--tls-max-v1.2` sets the default to `'TLSv1.2'`. Using + * `--tls-max-v1.3` sets the default to `'TLSv1.3'`. If multiple of the options + * are provided, the highest maximum is used. + * @since v11.4.0 + */ + let DEFAULT_MAX_VERSION: SecureVersion; + /** + * The default value of the `minVersion` option of `{@link createSecureContext()}`. + * It can be assigned any of the supported TLS protocol versions, + * `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. **Default:** `'TLSv1.2'`, unless + * changed using CLI options. Using `--tls-min-v1.0` sets the default to + * `'TLSv1'`. Using `--tls-min-v1.1` sets the default to `'TLSv1.1'`. Using + * `--tls-min-v1.3` sets the default to `'TLSv1.3'`. If multiple of the options + * are provided, the lowest minimum is used. + * @since v11.4.0 + */ + let DEFAULT_MIN_VERSION: SecureVersion; + /** + * The default value of the `ciphers` option of `{@link createSecureContext()}`. + * It can be assigned any of the supported OpenSSL ciphers. + * Defaults to the content of `crypto.constants.defaultCoreCipherList`, unless + * changed using CLI options using `--tls-default-ciphers`. + * @since v19.8.0 + */ + let DEFAULT_CIPHERS: string; + /** + * An immutable array of strings representing the root certificates (in PEM format) + * from the bundled Mozilla CA store as supplied by the current Node.js version. + * + * The bundled CA store, as supplied by Node.js, is a snapshot of Mozilla CA store + * that is fixed at release time. It is identical on all supported platforms. + * @since v12.3.0 + */ + const rootCertificates: readonly string[]; +} +declare module "node:tls" { + export * from "tls"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/trace_events.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/trace_events.d.ts new file mode 100644 index 00000000..56e46209 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/trace_events.d.ts @@ -0,0 +1,197 @@ +/** + * The `node:trace_events` module provides a mechanism to centralize tracing information + * generated by V8, Node.js core, and userspace code. + * + * Tracing can be enabled with the `--trace-event-categories` command-line flag + * or by using the `trace_events` module. The `--trace-event-categories` flag + * accepts a list of comma-separated category names. + * + * The available categories are: + * + * * `node`: An empty placeholder. + * * `node.async_hooks`: Enables capture of detailed [`async_hooks`](https://nodejs.org/docs/latest-v24.x/api/async_hooks.html) trace data. + * The [`async_hooks`](https://nodejs.org/docs/latest-v24.x/api/async_hooks.html) events have a unique `asyncId` and a special `triggerId` `triggerAsyncId` property. + * * `node.bootstrap`: Enables capture of Node.js bootstrap milestones. + * * `node.console`: Enables capture of `console.time()` and `console.count()` output. + * * `node.threadpoolwork.sync`: Enables capture of trace data for threadpool synchronous operations, such as `blob`, `zlib`, `crypto` and `node_api`. + * * `node.threadpoolwork.async`: Enables capture of trace data for threadpool asynchronous operations, such as `blob`, `zlib`, `crypto` and `node_api`. + * * `node.dns.native`: Enables capture of trace data for DNS queries. + * * `node.net.native`: Enables capture of trace data for network. + * * `node.environment`: Enables capture of Node.js Environment milestones. + * * `node.fs.sync`: Enables capture of trace data for file system sync methods. + * * `node.fs_dir.sync`: Enables capture of trace data for file system sync directory methods. + * * `node.fs.async`: Enables capture of trace data for file system async methods. + * * `node.fs_dir.async`: Enables capture of trace data for file system async directory methods. + * * `node.perf`: Enables capture of [Performance API](https://nodejs.org/docs/latest-v24.x/api/perf_hooks.html) measurements. + * * `node.perf.usertiming`: Enables capture of only Performance API User Timing + * measures and marks. + * * `node.perf.timerify`: Enables capture of only Performance API timerify + * measurements. + * * `node.promises.rejections`: Enables capture of trace data tracking the number + * of unhandled Promise rejections and handled-after-rejections. + * * `node.vm.script`: Enables capture of trace data for the `node:vm` module's `runInNewContext()`, `runInContext()`, and `runInThisContext()` methods. + * * `v8`: The [V8](https://nodejs.org/docs/latest-v24.x/api/v8.html) events are GC, compiling, and execution related. + * * `node.http`: Enables capture of trace data for http request / response. + * + * By default the `node`, `node.async_hooks`, and `v8` categories are enabled. + * + * ```bash + * node --trace-event-categories v8,node,node.async_hooks server.js + * ``` + * + * Prior versions of Node.js required the use of the `--trace-events-enabled` flag to enable trace events. This requirement has been removed. However, the `--trace-events-enabled` flag _may_ still be + * used and will enable the `node`, `node.async_hooks`, and `v8` trace event categories by default. + * + * ```bash + * node --trace-events-enabled + * + * # is equivalent to + * + * node --trace-event-categories v8,node,node.async_hooks + * ``` + * + * Alternatively, trace events may be enabled using the `node:trace_events` module: + * + * ```js + * import trace_events from 'node:trace_events'; + * const tracing = trace_events.createTracing({ categories: ['node.perf'] }); + * tracing.enable(); // Enable trace event capture for the 'node.perf' category + * + * // do work + * + * tracing.disable(); // Disable trace event capture for the 'node.perf' category + * ``` + * + * Running Node.js with tracing enabled will produce log files that can be opened + * in the [`chrome://tracing`](https://www.chromium.org/developers/how-tos/trace-event-profiling-tool) tab of Chrome. + * + * The logging file is by default called `node_trace.${rotation}.log`, where `${rotation}` is an incrementing log-rotation id. The filepath pattern can + * be specified with `--trace-event-file-pattern` that accepts a template + * string that supports `${rotation}` and `${pid}`: + * + * ```bash + * node --trace-event-categories v8 --trace-event-file-pattern '${pid}-${rotation}.log' server.js + * ``` + * + * To guarantee that the log file is properly generated after signal events like `SIGINT`, `SIGTERM`, or `SIGBREAK`, make sure to have the appropriate handlers + * in your code, such as: + * + * ```js + * process.on('SIGINT', function onSigint() { + * console.info('Received SIGINT.'); + * process.exit(130); // Or applicable exit code depending on OS and signal + * }); + * ``` + * + * The tracing system uses the same time source + * as the one used by `process.hrtime()`. + * However the trace-event timestamps are expressed in microseconds, + * unlike `process.hrtime()` which returns nanoseconds. + * + * The features from this module are not available in [`Worker`](https://nodejs.org/docs/latest-v24.x/api/worker_threads.html#class-worker) threads. + * @experimental + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/trace_events.js) + */ +declare module "trace_events" { + /** + * The `Tracing` object is used to enable or disable tracing for sets of + * categories. Instances are created using the + * `trace_events.createTracing()` method. + * + * When created, the `Tracing` object is disabled. Calling the + * `tracing.enable()` method adds the categories to the set of enabled trace + * event categories. Calling `tracing.disable()` will remove the categories + * from the set of enabled trace event categories. + */ + interface Tracing { + /** + * A comma-separated list of the trace event categories covered by this + * `Tracing` object. + * @since v10.0.0 + */ + readonly categories: string; + /** + * Disables this `Tracing` object. + * + * Only trace event categories _not_ covered by other enabled `Tracing` + * objects and _not_ specified by the `--trace-event-categories` flag + * will be disabled. + * + * ```js + * import trace_events from 'node:trace_events'; + * const t1 = trace_events.createTracing({ categories: ['node', 'v8'] }); + * const t2 = trace_events.createTracing({ categories: ['node.perf', 'node'] }); + * t1.enable(); + * t2.enable(); + * + * // Prints 'node,node.perf,v8' + * console.log(trace_events.getEnabledCategories()); + * + * t2.disable(); // Will only disable emission of the 'node.perf' category + * + * // Prints 'node,v8' + * console.log(trace_events.getEnabledCategories()); + * ``` + * @since v10.0.0 + */ + disable(): void; + /** + * Enables this `Tracing` object for the set of categories covered by + * the `Tracing` object. + * @since v10.0.0 + */ + enable(): void; + /** + * `true` only if the `Tracing` object has been enabled. + * @since v10.0.0 + */ + readonly enabled: boolean; + } + interface CreateTracingOptions { + /** + * An array of trace category names. Values included in the array are + * coerced to a string when possible. An error will be thrown if the + * value cannot be coerced. + */ + categories: string[]; + } + /** + * Creates and returns a `Tracing` object for the given set of `categories`. + * + * ```js + * import trace_events from 'node:trace_events'; + * const categories = ['node.perf', 'node.async_hooks']; + * const tracing = trace_events.createTracing({ categories }); + * tracing.enable(); + * // do stuff + * tracing.disable(); + * ``` + * @since v10.0.0 + */ + function createTracing(options: CreateTracingOptions): Tracing; + /** + * Returns a comma-separated list of all currently-enabled trace event + * categories. The current set of enabled trace event categories is determined + * by the _union_ of all currently-enabled `Tracing` objects and any categories + * enabled using the `--trace-event-categories` flag. + * + * Given the file `test.js` below, the command `node --trace-event-categories node.perf test.js` will print `'node.async_hooks,node.perf'` to the console. + * + * ```js + * import trace_events from 'node:trace_events'; + * const t1 = trace_events.createTracing({ categories: ['node.async_hooks'] }); + * const t2 = trace_events.createTracing({ categories: ['node.perf'] }); + * const t3 = trace_events.createTracing({ categories: ['v8'] }); + * + * t1.enable(); + * t2.enable(); + * + * console.log(trace_events.getEnabledCategories()); + * ``` + * @since v10.0.0 + */ + function getEnabledCategories(): string | undefined; +} +declare module "node:trace_events" { + export * from "trace_events"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/ts5.6/buffer.buffer.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/ts5.6/buffer.buffer.d.ts new file mode 100644 index 00000000..a5f67d7c --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/ts5.6/buffer.buffer.d.ts @@ -0,0 +1,468 @@ +declare module "buffer" { + global { + interface BufferConstructor { + // see ../buffer.d.ts for implementation shared with all TypeScript versions + + /** + * Allocates a new buffer containing the given {str}. + * + * @param str String to store in buffer. + * @param encoding encoding to use, optional. Default is 'utf8' + * @deprecated since v10.0.0 - Use `Buffer.from(string[, encoding])` instead. + */ + new(str: string, encoding?: BufferEncoding): Buffer; + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + * @deprecated since v10.0.0 - Use `Buffer.alloc()` instead (also see `Buffer.allocUnsafe()`). + */ + new(size: number): Buffer; + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + * @deprecated since v10.0.0 - Use `Buffer.from(array)` instead. + */ + new(array: ArrayLike): Buffer; + /** + * Produces a Buffer backed by the same allocated memory as + * the given {ArrayBuffer}/{SharedArrayBuffer}. + * + * @param arrayBuffer The ArrayBuffer with which to share memory. + * @deprecated since v10.0.0 - Use `Buffer.from(arrayBuffer[, byteOffset[, length]])` instead. + */ + new(arrayBuffer: ArrayBufferLike): Buffer; + /** + * Allocates a new `Buffer` using an `array` of bytes in the range `0` – `255`. + * Array entries outside that range will be truncated to fit into it. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Creates a new Buffer containing the UTF-8 bytes of the string 'buffer'. + * const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]); + * ``` + * + * If `array` is an `Array`-like object (that is, one with a `length` property of + * type `number`), it is treated as if it is an array, unless it is a `Buffer` or + * a `Uint8Array`. This means all other `TypedArray` variants get treated as an + * `Array`. To create a `Buffer` from the bytes backing a `TypedArray`, use + * `Buffer.copyBytesFrom()`. + * + * A `TypeError` will be thrown if `array` is not an `Array` or another type + * appropriate for `Buffer.from()` variants. + * + * `Buffer.from(array)` and `Buffer.from(string)` may also use the internal + * `Buffer` pool like `Buffer.allocUnsafe()` does. + * @since v5.10.0 + */ + from(array: WithImplicitCoercion>): Buffer; + /** + * This creates a view of the `ArrayBuffer` without copying the underlying + * memory. For example, when passed a reference to the `.buffer` property of a + * `TypedArray` instance, the newly created `Buffer` will share the same + * allocated memory as the `TypedArray`'s underlying `ArrayBuffer`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const arr = new Uint16Array(2); + * + * arr[0] = 5000; + * arr[1] = 4000; + * + * // Shares memory with `arr`. + * const buf = Buffer.from(arr.buffer); + * + * console.log(buf); + * // Prints: + * + * // Changing the original Uint16Array changes the Buffer also. + * arr[1] = 6000; + * + * console.log(buf); + * // Prints: + * ``` + * + * The optional `byteOffset` and `length` arguments specify a memory range within + * the `arrayBuffer` that will be shared by the `Buffer`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const ab = new ArrayBuffer(10); + * const buf = Buffer.from(ab, 0, 2); + * + * console.log(buf.length); + * // Prints: 2 + * ``` + * + * A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer` or a + * `SharedArrayBuffer` or another type appropriate for `Buffer.from()` + * variants. + * + * It is important to remember that a backing `ArrayBuffer` can cover a range + * of memory that extends beyond the bounds of a `TypedArray` view. A new + * `Buffer` created using the `buffer` property of a `TypedArray` may extend + * beyond the range of the `TypedArray`: + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const arrA = Uint8Array.from([0x63, 0x64, 0x65, 0x66]); // 4 elements + * const arrB = new Uint8Array(arrA.buffer, 1, 2); // 2 elements + * console.log(arrA.buffer === arrB.buffer); // true + * + * const buf = Buffer.from(arrB.buffer); + * console.log(buf); + * // Prints: + * ``` + * @since v5.10.0 + * @param arrayBuffer An `ArrayBuffer`, `SharedArrayBuffer`, for example the + * `.buffer` property of a `TypedArray`. + * @param byteOffset Index of first byte to expose. **Default:** `0`. + * @param length Number of bytes to expose. **Default:** + * `arrayBuffer.byteLength - byteOffset`. + */ + from( + arrayBuffer: WithImplicitCoercion, + byteOffset?: number, + length?: number, + ): Buffer; + /** + * Creates a new `Buffer` containing `string`. The `encoding` parameter identifies + * the character encoding to be used when converting `string` into bytes. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf1 = Buffer.from('this is a tést'); + * const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex'); + * + * console.log(buf1.toString()); + * // Prints: this is a tést + * console.log(buf2.toString()); + * // Prints: this is a tést + * console.log(buf1.toString('latin1')); + * // Prints: this is a tést + * ``` + * + * A `TypeError` will be thrown if `string` is not a string or another type + * appropriate for `Buffer.from()` variants. + * + * `Buffer.from(string)` may also use the internal `Buffer` pool like + * `Buffer.allocUnsafe()` does. + * @since v5.10.0 + * @param string A string to encode. + * @param encoding The encoding of `string`. **Default:** `'utf8'`. + */ + from(string: WithImplicitCoercion, encoding?: BufferEncoding): Buffer; + from(arrayOrString: WithImplicitCoercion | string>): Buffer; + /** + * Creates a new Buffer using the passed {data} + * @param values to create a new Buffer + */ + of(...items: number[]): Buffer; + /** + * Returns a new `Buffer` which is the result of concatenating all the `Buffer` instances in the `list` together. + * + * If the list has no items, or if the `totalLength` is 0, then a new zero-length `Buffer` is returned. + * + * If `totalLength` is not provided, it is calculated from the `Buffer` instances + * in `list` by adding their lengths. + * + * If `totalLength` is provided, it is coerced to an unsigned integer. If the + * combined length of the `Buffer`s in `list` exceeds `totalLength`, the result is + * truncated to `totalLength`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Create a single `Buffer` from a list of three `Buffer` instances. + * + * const buf1 = Buffer.alloc(10); + * const buf2 = Buffer.alloc(14); + * const buf3 = Buffer.alloc(18); + * const totalLength = buf1.length + buf2.length + buf3.length; + * + * console.log(totalLength); + * // Prints: 42 + * + * const bufA = Buffer.concat([buf1, buf2, buf3], totalLength); + * + * console.log(bufA); + * // Prints: + * console.log(bufA.length); + * // Prints: 42 + * ``` + * + * `Buffer.concat()` may also use the internal `Buffer` pool like `Buffer.allocUnsafe()` does. + * @since v0.7.11 + * @param list List of `Buffer` or {@link Uint8Array} instances to concatenate. + * @param totalLength Total length of the `Buffer` instances in `list` when concatenated. + */ + concat(list: readonly Uint8Array[], totalLength?: number): Buffer; + /** + * Copies the underlying memory of `view` into a new `Buffer`. + * + * ```js + * const u16 = new Uint16Array([0, 0xffff]); + * const buf = Buffer.copyBytesFrom(u16, 1, 1); + * u16[1] = 0; + * console.log(buf.length); // 2 + * console.log(buf[0]); // 255 + * console.log(buf[1]); // 255 + * ``` + * @since v19.8.0 + * @param view The {TypedArray} to copy. + * @param [offset=0] The starting offset within `view`. + * @param [length=view.length - offset] The number of elements from `view` to copy. + */ + copyBytesFrom(view: NodeJS.TypedArray, offset?: number, length?: number): Buffer; + /** + * Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the`Buffer` will be zero-filled. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.alloc(5); + * + * console.log(buf); + * // Prints: + * ``` + * + * If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown. + * + * If `fill` is specified, the allocated `Buffer` will be initialized by calling `buf.fill(fill)`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.alloc(5, 'a'); + * + * console.log(buf); + * // Prints: + * ``` + * + * If both `fill` and `encoding` are specified, the allocated `Buffer` will be + * initialized by calling `buf.fill(fill, encoding)`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64'); + * + * console.log(buf); + * // Prints: + * ``` + * + * Calling `Buffer.alloc()` can be measurably slower than the alternative `Buffer.allocUnsafe()` but ensures that the newly created `Buffer` instance + * contents will never contain sensitive data from previous allocations, including + * data that might not have been allocated for `Buffer`s. + * + * A `TypeError` will be thrown if `size` is not a number. + * @since v5.10.0 + * @param size The desired length of the new `Buffer`. + * @param [fill=0] A value to pre-fill the new `Buffer` with. + * @param [encoding='utf8'] If `fill` is a string, this is its encoding. + */ + alloc(size: number, fill?: string | Uint8Array | number, encoding?: BufferEncoding): Buffer; + /** + * Allocates a new `Buffer` of `size` bytes. If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown. + * + * The underlying memory for `Buffer` instances created in this way is _not_ + * _initialized_. The contents of the newly created `Buffer` are unknown and _may contain sensitive data_. Use `Buffer.alloc()` instead to initialize`Buffer` instances with zeroes. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.allocUnsafe(10); + * + * console.log(buf); + * // Prints (contents may vary): + * + * buf.fill(0); + * + * console.log(buf); + * // Prints: + * ``` + * + * A `TypeError` will be thrown if `size` is not a number. + * + * The `Buffer` module pre-allocates an internal `Buffer` instance of + * size `Buffer.poolSize` that is used as a pool for the fast allocation of new `Buffer` instances created using `Buffer.allocUnsafe()`, `Buffer.from(array)`, + * and `Buffer.concat()` only when `size` is less than `Buffer.poolSize >>> 1` (floor of `Buffer.poolSize` divided by two). + * + * Use of this pre-allocated internal memory pool is a key difference between + * calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`. + * Specifically, `Buffer.alloc(size, fill)` will _never_ use the internal `Buffer`pool, while `Buffer.allocUnsafe(size).fill(fill)`_will_ use the internal`Buffer` pool if `size` is less + * than or equal to half `Buffer.poolSize`. The + * difference is subtle but can be important when an application requires the + * additional performance that `Buffer.allocUnsafe()` provides. + * @since v5.10.0 + * @param size The desired length of the new `Buffer`. + */ + allocUnsafe(size: number): Buffer; + /** + * Allocates a new `Buffer` of `size` bytes. If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown. A zero-length `Buffer` is created if + * `size` is 0. + * + * The underlying memory for `Buffer` instances created in this way is _not_ + * _initialized_. The contents of the newly created `Buffer` are unknown and _may contain sensitive data_. Use `buf.fill(0)` to initialize + * such `Buffer` instances with zeroes. + * + * When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances, + * allocations under 4 KiB are sliced from a single pre-allocated `Buffer`. This + * allows applications to avoid the garbage collection overhead of creating many + * individually allocated `Buffer` instances. This approach improves both + * performance and memory usage by eliminating the need to track and clean up as + * many individual `ArrayBuffer` objects. + * + * However, in the case where a developer may need to retain a small chunk of + * memory from a pool for an indeterminate amount of time, it may be appropriate + * to create an un-pooled `Buffer` instance using `Buffer.allocUnsafeSlow()` and + * then copying out the relevant bits. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Need to keep around a few small chunks of memory. + * const store = []; + * + * socket.on('readable', () => { + * let data; + * while (null !== (data = readable.read())) { + * // Allocate for retained data. + * const sb = Buffer.allocUnsafeSlow(10); + * + * // Copy the data into the new allocation. + * data.copy(sb, 0, 0, 10); + * + * store.push(sb); + * } + * }); + * ``` + * + * A `TypeError` will be thrown if `size` is not a number. + * @since v5.12.0 + * @param size The desired length of the new `Buffer`. + */ + allocUnsafeSlow(size: number): Buffer; + } + interface Buffer extends Uint8Array { + // see ../buffer.d.ts for implementation shared with all TypeScript versions + + /** + * Returns a new `Buffer` that references the same memory as the original, but + * offset and cropped by the `start` and `end` indices. + * + * This method is not compatible with the `Uint8Array.prototype.slice()`, + * which is a superclass of `Buffer`. To copy the slice, use`Uint8Array.prototype.slice()`. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from('buffer'); + * + * const copiedBuf = Uint8Array.prototype.slice.call(buf); + * copiedBuf[0]++; + * console.log(copiedBuf.toString()); + * // Prints: cuffer + * + * console.log(buf.toString()); + * // Prints: buffer + * + * // With buf.slice(), the original buffer is modified. + * const notReallyCopiedBuf = buf.slice(); + * notReallyCopiedBuf[0]++; + * console.log(notReallyCopiedBuf.toString()); + * // Prints: cuffer + * console.log(buf.toString()); + * // Also prints: cuffer (!) + * ``` + * @since v0.3.0 + * @deprecated Use `subarray` instead. + * @param [start=0] Where the new `Buffer` will start. + * @param [end=buf.length] Where the new `Buffer` will end (not inclusive). + */ + slice(start?: number, end?: number): Buffer; + /** + * Returns a new `Buffer` that references the same memory as the original, but + * offset and cropped by the `start` and `end` indices. + * + * Specifying `end` greater than `buf.length` will return the same result as + * that of `end` equal to `buf.length`. + * + * This method is inherited from [`TypedArray.prototype.subarray()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray). + * + * Modifying the new `Buffer` slice will modify the memory in the original `Buffer`because the allocated memory of the two objects overlap. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * // Create a `Buffer` with the ASCII alphabet, take a slice, and modify one byte + * // from the original `Buffer`. + * + * const buf1 = Buffer.allocUnsafe(26); + * + * for (let i = 0; i < 26; i++) { + * // 97 is the decimal ASCII value for 'a'. + * buf1[i] = i + 97; + * } + * + * const buf2 = buf1.subarray(0, 3); + * + * console.log(buf2.toString('ascii', 0, buf2.length)); + * // Prints: abc + * + * buf1[0] = 33; + * + * console.log(buf2.toString('ascii', 0, buf2.length)); + * // Prints: !bc + * ``` + * + * Specifying negative indexes causes the slice to be generated relative to the + * end of `buf` rather than the beginning. + * + * ```js + * import { Buffer } from 'node:buffer'; + * + * const buf = Buffer.from('buffer'); + * + * console.log(buf.subarray(-6, -1).toString()); + * // Prints: buffe + * // (Equivalent to buf.subarray(0, 5).) + * + * console.log(buf.subarray(-6, -2).toString()); + * // Prints: buff + * // (Equivalent to buf.subarray(0, 4).) + * + * console.log(buf.subarray(-5, -2).toString()); + * // Prints: uff + * // (Equivalent to buf.subarray(1, 4).) + * ``` + * @since v3.0.0 + * @param [start=0] Where the new `Buffer` will start. + * @param [end=buf.length] Where the new `Buffer` will end (not inclusive). + */ + subarray(start?: number, end?: number): Buffer; + } + /** + * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports + * TypeScript versions earlier than 5.7. + */ + type NonSharedBuffer = Buffer; + /** + * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports + * TypeScript versions earlier than 5.7. + */ + type AllowSharedBuffer = Buffer; + } + /** @deprecated Use `Buffer.allocUnsafeSlow()` instead. */ + var SlowBuffer: { + /** @deprecated Use `Buffer.allocUnsafeSlow()` instead. */ + new(size: number): Buffer; + prototype: Buffer; + }; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts new file mode 100644 index 00000000..f148cc4f --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts @@ -0,0 +1,71 @@ +// Interface declaration for Float16Array, required in @types/node v24+. +// These definitions are specific to TS <=5.6. + +// This needs all of the "common" properties/methods of the TypedArrays, +// otherwise the type unions `TypedArray` and `ArrayBufferView` will be +// empty objects. +interface Float16Array extends Pick { + readonly BYTES_PER_ELEMENT: number; + readonly buffer: ArrayBufferLike; + readonly byteLength: number; + readonly byteOffset: number; + readonly length: number; + readonly [Symbol.toStringTag]: "Float16Array"; + at(index: number): number | undefined; + copyWithin(target: number, start: number, end?: number): this; + every(predicate: (value: number, index: number, array: Float16Array) => unknown, thisArg?: any): boolean; + fill(value: number, start?: number, end?: number): this; + filter(predicate: (value: number, index: number, array: Float16Array) => any, thisArg?: any): Float16Array; + find(predicate: (value: number, index: number, obj: Float16Array) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number, index: number, obj: Float16Array) => boolean, thisArg?: any): number; + findLast( + predicate: (value: number, index: number, array: Float16Array) => value is S, + thisArg?: any, + ): S | undefined; + findLast( + predicate: (value: number, index: number, array: Float16Array) => unknown, + thisArg?: any, + ): number | undefined; + findLastIndex(predicate: (value: number, index: number, array: Float16Array) => unknown, thisArg?: any): number; + forEach(callbackfn: (value: number, index: number, array: Float16Array) => void, thisArg?: any): void; + includes(searchElement: number, fromIndex?: number): boolean; + indexOf(searchElement: number, fromIndex?: number): number; + join(separator?: string): string; + lastIndexOf(searchElement: number, fromIndex?: number): number; + map(callbackfn: (value: number, index: number, array: Float16Array) => number, thisArg?: any): Float16Array; + reduce( + callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float16Array) => number, + ): number; + reduce( + callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float16Array) => number, + initialValue: number, + ): number; + reduce( + callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float16Array) => U, + initialValue: U, + ): U; + reduceRight( + callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float16Array) => number, + ): number; + reduceRight( + callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float16Array) => number, + initialValue: number, + ): number; + reduceRight( + callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float16Array) => U, + initialValue: U, + ): U; + reverse(): Float16Array; + set(array: ArrayLike, offset?: number): void; + slice(start?: number, end?: number): Float16Array; + some(predicate: (value: number, index: number, array: Float16Array) => unknown, thisArg?: any): boolean; + sort(compareFn?: (a: number, b: number) => number): this; + subarray(begin?: number, end?: number): Float16Array; + toLocaleString(locales: string | string[], options?: Intl.NumberFormatOptions): string; + toReversed(): Float16Array; + toSorted(compareFn?: (a: number, b: number) => number): Float16Array; + toString(): string; + valueOf(): Float16Array; + with(index: number, value: number): Float16Array; + [index: number]: number; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/ts5.6/globals.typedarray.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/ts5.6/globals.typedarray.d.ts new file mode 100644 index 00000000..57a1ab4f --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/ts5.6/globals.typedarray.d.ts @@ -0,0 +1,36 @@ +export {}; // Make this a module + +declare global { + namespace NodeJS { + type TypedArray = + | Uint8Array + | Uint8ClampedArray + | Uint16Array + | Uint32Array + | Int8Array + | Int16Array + | Int32Array + | BigUint64Array + | BigInt64Array + | Float16Array + | Float32Array + | Float64Array; + type ArrayBufferView = TypedArray | DataView; + + type NonSharedUint8Array = Uint8Array; + type NonSharedUint8ClampedArray = Uint8ClampedArray; + type NonSharedUint16Array = Uint16Array; + type NonSharedUint32Array = Uint32Array; + type NonSharedInt8Array = Int8Array; + type NonSharedInt16Array = Int16Array; + type NonSharedInt32Array = Int32Array; + type NonSharedBigUint64Array = BigUint64Array; + type NonSharedBigInt64Array = BigInt64Array; + type NonSharedFloat16Array = Float16Array; + type NonSharedFloat32Array = Float32Array; + type NonSharedFloat64Array = Float64Array; + type NonSharedDataView = DataView; + type NonSharedTypedArray = TypedArray; + type NonSharedArrayBufferView = ArrayBufferView; + } +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/ts5.6/index.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/ts5.6/index.d.ts new file mode 100644 index 00000000..52c18699 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/ts5.6/index.d.ts @@ -0,0 +1,103 @@ +/** + * License for programmatically and manually incorporated + * documentation aka. `JSDoc` from https://github.com/nodejs/node/tree/master/doc + * + * Copyright Node.js contributors. All rights reserved. + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +// NOTE: These definitions support Node.js and TypeScript 5.2 through 5.6. + +// Reference required TypeScript libraries: +/// +/// + +// TypeScript library polyfills required for TypeScript <=5.6: +/// + +// Iterator definitions required for compatibility with TypeScript <5.6: +/// + +// Definitions for Node.js modules specific to TypeScript <=5.6: +/// +/// + +// Definitions for Node.js modules that are not specific to any version of TypeScript: +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts new file mode 100644 index 00000000..110b1ebb --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts @@ -0,0 +1,72 @@ +// Interface declaration for Float16Array, required in @types/node v24+. +// These definitions are specific to TS 5.7. + +// This needs all of the "common" properties/methods of the TypedArrays, +// otherwise the type unions `TypedArray` and `ArrayBufferView` will be +// empty objects. +interface Float16Array { + readonly BYTES_PER_ELEMENT: number; + readonly buffer: TArrayBuffer; + readonly byteLength: number; + readonly byteOffset: number; + readonly length: number; + readonly [Symbol.toStringTag]: "Float16Array"; + at(index: number): number | undefined; + copyWithin(target: number, start: number, end?: number): this; + entries(): ArrayIterator<[number, number]>; + every(predicate: (value: number, index: number, array: this) => unknown, thisArg?: any): boolean; + fill(value: number, start?: number, end?: number): this; + filter(predicate: (value: number, index: number, array: this) => any, thisArg?: any): Float16Array; + find(predicate: (value: number, index: number, obj: this) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number, index: number, obj: this) => boolean, thisArg?: any): number; + findLast( + predicate: (value: number, index: number, array: this) => value is S, + thisArg?: any, + ): S | undefined; + findLast(predicate: (value: number, index: number, array: this) => unknown, thisArg?: any): number | undefined; + findLastIndex(predicate: (value: number, index: number, array: this) => unknown, thisArg?: any): number; + forEach(callbackfn: (value: number, index: number, array: this) => void, thisArg?: any): void; + includes(searchElement: number, fromIndex?: number): boolean; + indexOf(searchElement: number, fromIndex?: number): number; + join(separator?: string): string; + keys(): ArrayIterator; + lastIndexOf(searchElement: number, fromIndex?: number): number; + map(callbackfn: (value: number, index: number, array: this) => number, thisArg?: any): Float16Array; + reduce( + callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: this) => number, + ): number; + reduce( + callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: this) => number, + initialValue: number, + ): number; + reduce( + callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: this) => U, + initialValue: U, + ): U; + reduceRight( + callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: this) => number, + ): number; + reduceRight( + callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: this) => number, + initialValue: number, + ): number; + reduceRight( + callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: this) => U, + initialValue: U, + ): U; + reverse(): this; + set(array: ArrayLike, offset?: number): void; + slice(start?: number, end?: number): Float16Array; + some(predicate: (value: number, index: number, array: this) => unknown, thisArg?: any): boolean; + sort(compareFn?: (a: number, b: number) => number): this; + subarray(begin?: number, end?: number): Float16Array; + toLocaleString(locales: string | string[], options?: Intl.NumberFormatOptions): string; + toReversed(): Float16Array; + toSorted(compareFn?: (a: number, b: number) => number): Float16Array; + toString(): string; + valueOf(): this; + values(): ArrayIterator; + with(index: number, value: number): Float16Array; + [Symbol.iterator](): ArrayIterator; + [index: number]: number; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/ts5.7/index.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/ts5.7/index.d.ts new file mode 100644 index 00000000..b3454a72 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/ts5.7/index.d.ts @@ -0,0 +1,103 @@ +/** + * License for programmatically and manually incorporated + * documentation aka. `JSDoc` from https://github.com/nodejs/node/tree/master/doc + * + * Copyright Node.js contributors. All rights reserved. + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +// NOTE: These definitions support Node.js and TypeScript 5.7. + +// Reference required TypeScript libraries: +/// +/// + +// TypeScript library polyfills required for TypeScript 5.7: +/// + +// Iterator definitions required for compatibility with TypeScript <5.6: +/// + +// Definitions for Node.js modules specific to TypeScript 5.7+: +/// +/// + +// Definitions for Node.js modules that are not specific to any version of TypeScript: +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/tty.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/tty.d.ts new file mode 100644 index 00000000..602324ab --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/tty.d.ts @@ -0,0 +1,208 @@ +/** + * The `node:tty` module provides the `tty.ReadStream` and `tty.WriteStream` classes. In most cases, it will not be necessary or possible to use this module + * directly. However, it can be accessed using: + * + * ```js + * import tty from 'node:tty'; + * ``` + * + * When Node.js detects that it is being run with a text terminal ("TTY") + * attached, `process.stdin` will, by default, be initialized as an instance of `tty.ReadStream` and both `process.stdout` and `process.stderr` will, by + * default, be instances of `tty.WriteStream`. The preferred method of determining + * whether Node.js is being run within a TTY context is to check that the value of + * the `process.stdout.isTTY` property is `true`: + * + * ```console + * $ node -p -e "Boolean(process.stdout.isTTY)" + * true + * $ node -p -e "Boolean(process.stdout.isTTY)" | cat + * false + * ``` + * + * In most cases, there should be little to no reason for an application to + * manually create instances of the `tty.ReadStream` and `tty.WriteStream` classes. + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/tty.js) + */ +declare module "tty" { + import * as net from "node:net"; + /** + * The `tty.isatty()` method returns `true` if the given `fd` is associated with + * a TTY and `false` if it is not, including whenever `fd` is not a non-negative + * integer. + * @since v0.5.8 + * @param fd A numeric file descriptor + */ + function isatty(fd: number): boolean; + /** + * Represents the readable side of a TTY. In normal circumstances `process.stdin` will be the only `tty.ReadStream` instance in a Node.js + * process and there should be no reason to create additional instances. + * @since v0.5.8 + */ + class ReadStream extends net.Socket { + constructor(fd: number, options?: net.SocketConstructorOpts); + /** + * A `boolean` that is `true` if the TTY is currently configured to operate as a + * raw device. + * + * This flag is always `false` when a process starts, even if the terminal is + * operating in raw mode. Its value will change with subsequent calls to `setRawMode`. + * @since v0.7.7 + */ + isRaw: boolean; + /** + * Allows configuration of `tty.ReadStream` so that it operates as a raw device. + * + * When in raw mode, input is always available character-by-character, not + * including modifiers. Additionally, all special processing of characters by the + * terminal is disabled, including echoing input + * characters. Ctrl+C will no longer cause a `SIGINT` when + * in this mode. + * @since v0.7.7 + * @param mode If `true`, configures the `tty.ReadStream` to operate as a raw device. If `false`, configures the `tty.ReadStream` to operate in its default mode. The `readStream.isRaw` + * property will be set to the resulting mode. + * @return The read stream instance. + */ + setRawMode(mode: boolean): this; + /** + * A `boolean` that is always `true` for `tty.ReadStream` instances. + * @since v0.5.8 + */ + isTTY: boolean; + } + /** + * -1 - to the left from cursor + * 0 - the entire line + * 1 - to the right from cursor + */ + type Direction = -1 | 0 | 1; + /** + * Represents the writable side of a TTY. In normal circumstances, `process.stdout` and `process.stderr` will be the only`tty.WriteStream` instances created for a Node.js process and there + * should be no reason to create additional instances. + * @since v0.5.8 + */ + class WriteStream extends net.Socket { + constructor(fd: number); + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "resize", listener: () => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "resize"): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "resize", listener: () => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "resize", listener: () => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "resize", listener: () => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "resize", listener: () => void): this; + /** + * `writeStream.clearLine()` clears the current line of this `WriteStream` in a + * direction identified by `dir`. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + clearLine(dir: Direction, callback?: () => void): boolean; + /** + * `writeStream.clearScreenDown()` clears this `WriteStream` from the current + * cursor down. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + clearScreenDown(callback?: () => void): boolean; + /** + * `writeStream.cursorTo()` moves this `WriteStream`'s cursor to the specified + * position. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + cursorTo(x: number, y?: number, callback?: () => void): boolean; + cursorTo(x: number, callback: () => void): boolean; + /** + * `writeStream.moveCursor()` moves this `WriteStream`'s cursor _relative_ to its + * current position. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + moveCursor(dx: number, dy: number, callback?: () => void): boolean; + /** + * Returns: + * + * * `1` for 2, + * * `4` for 16, + * * `8` for 256, + * * `24` for 16,777,216 colors supported. + * + * Use this to determine what colors the terminal supports. Due to the nature of + * colors in terminals it is possible to either have false positives or false + * negatives. It depends on process information and the environment variables that + * may lie about what terminal is used. + * It is possible to pass in an `env` object to simulate the usage of a specific + * terminal. This can be useful to check how specific environment settings behave. + * + * To enforce a specific color support, use one of the below environment settings. + * + * * 2 colors: `FORCE_COLOR = 0` (Disables colors) + * * 16 colors: `FORCE_COLOR = 1` + * * 256 colors: `FORCE_COLOR = 2` + * * 16,777,216 colors: `FORCE_COLOR = 3` + * + * Disabling color support is also possible by using the `NO_COLOR` and `NODE_DISABLE_COLORS` environment variables. + * @since v9.9.0 + * @param [env=process.env] An object containing the environment variables to check. This enables simulating the usage of a specific terminal. + */ + getColorDepth(env?: object): number; + /** + * Returns `true` if the `writeStream` supports at least as many colors as provided + * in `count`. Minimum support is 2 (black and white). + * + * This has the same false positives and negatives as described in `writeStream.getColorDepth()`. + * + * ```js + * process.stdout.hasColors(); + * // Returns true or false depending on if `stdout` supports at least 16 colors. + * process.stdout.hasColors(256); + * // Returns true or false depending on if `stdout` supports at least 256 colors. + * process.stdout.hasColors({ TMUX: '1' }); + * // Returns true. + * process.stdout.hasColors(2 ** 24, { TMUX: '1' }); + * // Returns false (the environment setting pretends to support 2 ** 8 colors). + * ``` + * @since v11.13.0, v10.16.0 + * @param [count=16] The number of colors that are requested (minimum 2). + * @param [env=process.env] An object containing the environment variables to check. This enables simulating the usage of a specific terminal. + */ + hasColors(count?: number): boolean; + hasColors(env?: object): boolean; + hasColors(count: number, env?: object): boolean; + /** + * `writeStream.getWindowSize()` returns the size of the TTY + * corresponding to this `WriteStream`. The array is of the type `[numColumns, numRows]` where `numColumns` and `numRows` represent the number + * of columns and rows in the corresponding TTY. + * @since v0.7.7 + */ + getWindowSize(): [number, number]; + /** + * A `number` specifying the number of columns the TTY currently has. This property + * is updated whenever the `'resize'` event is emitted. + * @since v0.7.7 + */ + columns: number; + /** + * A `number` specifying the number of rows the TTY currently has. This property + * is updated whenever the `'resize'` event is emitted. + * @since v0.7.7 + */ + rows: number; + /** + * A `boolean` that is always `true`. + * @since v0.5.8 + */ + isTTY: boolean; + } +} +declare module "node:tty" { + export * from "tty"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/url.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/url.d.ts new file mode 100644 index 00000000..14319f42 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/url.d.ts @@ -0,0 +1,1033 @@ +/** + * The `node:url` module provides utilities for URL resolution and parsing. It can + * be accessed using: + * + * ```js + * import url from 'node:url'; + * ``` + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/url.js) + */ +declare module "url" { + import { Blob as NodeBlob, NonSharedBuffer } from "node:buffer"; + import { ClientRequestArgs } from "node:http"; + import { ParsedUrlQuery, ParsedUrlQueryInput } from "node:querystring"; + // Input to `url.format` + interface UrlObject { + auth?: string | null | undefined; + hash?: string | null | undefined; + host?: string | null | undefined; + hostname?: string | null | undefined; + href?: string | null | undefined; + pathname?: string | null | undefined; + protocol?: string | null | undefined; + search?: string | null | undefined; + slashes?: boolean | null | undefined; + port?: string | number | null | undefined; + query?: string | null | ParsedUrlQueryInput | undefined; + } + // Output of `url.parse` + interface Url { + auth: string | null; + hash: string | null; + host: string | null; + hostname: string | null; + href: string; + path: string | null; + pathname: string | null; + protocol: string | null; + search: string | null; + slashes: boolean | null; + port: string | null; + query: string | null | ParsedUrlQuery; + } + interface UrlWithParsedQuery extends Url { + query: ParsedUrlQuery; + } + interface UrlWithStringQuery extends Url { + query: string | null; + } + interface FileUrlToPathOptions { + /** + * `true` if the `path` should be return as a windows filepath, `false` for posix, and `undefined` for the system default. + * @default undefined + * @since v22.1.0 + */ + windows?: boolean | undefined; + } + interface PathToFileUrlOptions { + /** + * `true` if the `path` should be return as a windows filepath, `false` for posix, and `undefined` for the system default. + * @default undefined + * @since v22.1.0 + */ + windows?: boolean | undefined; + } + /** + * The `url.parse()` method takes a URL string, parses it, and returns a URL + * object. + * + * A `TypeError` is thrown if `urlString` is not a string. + * + * A `URIError` is thrown if the `auth` property is present but cannot be decoded. + * + * `url.parse()` uses a lenient, non-standard algorithm for parsing URL + * strings. It is prone to security issues such as [host name spoofing](https://hackerone.com/reports/678487) and incorrect handling of usernames and passwords. Do not use with untrusted + * input. CVEs are not issued for `url.parse()` vulnerabilities. Use the `WHATWG URL` API instead. + * @since v0.1.25 + * @deprecated Use the WHATWG URL API instead. + * @param urlString The URL string to parse. + * @param [parseQueryString=false] If `true`, the `query` property will always be set to an object returned by the {@link querystring} module's `parse()` method. If `false`, the `query` property + * on the returned URL object will be an unparsed, undecoded string. + * @param [slashesDenoteHost=false] If `true`, the first token after the literal string `//` and preceding the next `/` will be interpreted as the `host`. For instance, given `//foo/bar`, the + * result would be `{host: 'foo', pathname: '/bar'}` rather than `{pathname: '//foo/bar'}`. + */ + function parse(urlString: string): UrlWithStringQuery; + function parse( + urlString: string, + parseQueryString: false | undefined, + slashesDenoteHost?: boolean, + ): UrlWithStringQuery; + function parse(urlString: string, parseQueryString: true, slashesDenoteHost?: boolean): UrlWithParsedQuery; + function parse(urlString: string, parseQueryString: boolean, slashesDenoteHost?: boolean): Url; + /** + * The `url.format()` method returns a formatted URL string derived from `urlObject`. + * + * ```js + * import url from 'node:url'; + * url.format({ + * protocol: 'https', + * hostname: 'example.com', + * pathname: '/some/path', + * query: { + * page: 1, + * format: 'json', + * }, + * }); + * + * // => 'https://example.com/some/path?page=1&format=json' + * ``` + * + * If `urlObject` is not an object or a string, `url.format()` will throw a `TypeError`. + * + * The formatting process operates as follows: + * + * * A new empty string `result` is created. + * * If `urlObject.protocol` is a string, it is appended as-is to `result`. + * * Otherwise, if `urlObject.protocol` is not `undefined` and is not a string, an `Error` is thrown. + * * For all string values of `urlObject.protocol` that _do not end_ with an ASCII + * colon (`:`) character, the literal string `:` will be appended to `result`. + * * If either of the following conditions is true, then the literal string `//` will be appended to `result`: + * * `urlObject.slashes` property is true; + * * `urlObject.protocol` begins with `http`, `https`, `ftp`, `gopher`, or `file`; + * * If the value of the `urlObject.auth` property is truthy, and either `urlObject.host` or `urlObject.hostname` are not `undefined`, the value of `urlObject.auth` will be coerced into a string + * and appended to `result` followed by the literal string `@`. + * * If the `urlObject.host` property is `undefined` then: + * * If the `urlObject.hostname` is a string, it is appended to `result`. + * * Otherwise, if `urlObject.hostname` is not `undefined` and is not a string, + * an `Error` is thrown. + * * If the `urlObject.port` property value is truthy, and `urlObject.hostname` is not `undefined`: + * * The literal string `:` is appended to `result`, and + * * The value of `urlObject.port` is coerced to a string and appended to `result`. + * * Otherwise, if the `urlObject.host` property value is truthy, the value of `urlObject.host` is coerced to a string and appended to `result`. + * * If the `urlObject.pathname` property is a string that is not an empty string: + * * If the `urlObject.pathname` _does not start_ with an ASCII forward slash + * (`/`), then the literal string `'/'` is appended to `result`. + * * The value of `urlObject.pathname` is appended to `result`. + * * Otherwise, if `urlObject.pathname` is not `undefined` and is not a string, an `Error` is thrown. + * * If the `urlObject.search` property is `undefined` and if the `urlObject.query`property is an `Object`, the literal string `?` is appended to `result` followed by the output of calling the + * `querystring` module's `stringify()` method passing the value of `urlObject.query`. + * * Otherwise, if `urlObject.search` is a string: + * * If the value of `urlObject.search` _does not start_ with the ASCII question + * mark (`?`) character, the literal string `?` is appended to `result`. + * * The value of `urlObject.search` is appended to `result`. + * * Otherwise, if `urlObject.search` is not `undefined` and is not a string, an `Error` is thrown. + * * If the `urlObject.hash` property is a string: + * * If the value of `urlObject.hash` _does not start_ with the ASCII hash (`#`) + * character, the literal string `#` is appended to `result`. + * * The value of `urlObject.hash` is appended to `result`. + * * Otherwise, if the `urlObject.hash` property is not `undefined` and is not a + * string, an `Error` is thrown. + * * `result` is returned. + * @since v0.1.25 + * @legacy Use the WHATWG URL API instead. + * @param urlObject A URL object (as returned by `url.parse()` or constructed otherwise). If a string, it is converted to an object by passing it to `url.parse()`. + */ + function format(urlObject: URL, options?: URLFormatOptions): string; + /** + * The `url.format()` method returns a formatted URL string derived from `urlObject`. + * + * ```js + * import url from 'node:url'; + * url.format({ + * protocol: 'https', + * hostname: 'example.com', + * pathname: '/some/path', + * query: { + * page: 1, + * format: 'json', + * }, + * }); + * + * // => 'https://example.com/some/path?page=1&format=json' + * ``` + * + * If `urlObject` is not an object or a string, `url.format()` will throw a `TypeError`. + * + * The formatting process operates as follows: + * + * * A new empty string `result` is created. + * * If `urlObject.protocol` is a string, it is appended as-is to `result`. + * * Otherwise, if `urlObject.protocol` is not `undefined` and is not a string, an `Error` is thrown. + * * For all string values of `urlObject.protocol` that _do not end_ with an ASCII + * colon (`:`) character, the literal string `:` will be appended to `result`. + * * If either of the following conditions is true, then the literal string `//` will be appended to `result`: + * * `urlObject.slashes` property is true; + * * `urlObject.protocol` begins with `http`, `https`, `ftp`, `gopher`, or `file`; + * * If the value of the `urlObject.auth` property is truthy, and either `urlObject.host` or `urlObject.hostname` are not `undefined`, the value of `urlObject.auth` will be coerced into a string + * and appended to `result` followed by the literal string `@`. + * * If the `urlObject.host` property is `undefined` then: + * * If the `urlObject.hostname` is a string, it is appended to `result`. + * * Otherwise, if `urlObject.hostname` is not `undefined` and is not a string, + * an `Error` is thrown. + * * If the `urlObject.port` property value is truthy, and `urlObject.hostname` is not `undefined`: + * * The literal string `:` is appended to `result`, and + * * The value of `urlObject.port` is coerced to a string and appended to `result`. + * * Otherwise, if the `urlObject.host` property value is truthy, the value of `urlObject.host` is coerced to a string and appended to `result`. + * * If the `urlObject.pathname` property is a string that is not an empty string: + * * If the `urlObject.pathname` _does not start_ with an ASCII forward slash + * (`/`), then the literal string `'/'` is appended to `result`. + * * The value of `urlObject.pathname` is appended to `result`. + * * Otherwise, if `urlObject.pathname` is not `undefined` and is not a string, an `Error` is thrown. + * * If the `urlObject.search` property is `undefined` and if the `urlObject.query`property is an `Object`, the literal string `?` is appended to `result` followed by the output of calling the + * `querystring` module's `stringify()` method passing the value of `urlObject.query`. + * * Otherwise, if `urlObject.search` is a string: + * * If the value of `urlObject.search` _does not start_ with the ASCII question + * mark (`?`) character, the literal string `?` is appended to `result`. + * * The value of `urlObject.search` is appended to `result`. + * * Otherwise, if `urlObject.search` is not `undefined` and is not a string, an `Error` is thrown. + * * If the `urlObject.hash` property is a string: + * * If the value of `urlObject.hash` _does not start_ with the ASCII hash (`#`) + * character, the literal string `#` is appended to `result`. + * * The value of `urlObject.hash` is appended to `result`. + * * Otherwise, if the `urlObject.hash` property is not `undefined` and is not a + * string, an `Error` is thrown. + * * `result` is returned. + * @since v0.1.25 + * @legacy Use the WHATWG URL API instead. + * @param urlObject A URL object (as returned by `url.parse()` or constructed otherwise). If a string, it is converted to an object by passing it to `url.parse()`. + */ + function format(urlObject: UrlObject | string): string; + /** + * The `url.resolve()` method resolves a target URL relative to a base URL in a + * manner similar to that of a web browser resolving an anchor tag. + * + * ```js + * import url from 'node:url'; + * url.resolve('/one/two/three', 'four'); // '/one/two/four' + * url.resolve('http://example.com/', '/one'); // 'http://example.com/one' + * url.resolve('http://example.com/one', '/two'); // 'http://example.com/two' + * ``` + * + * To achieve the same result using the WHATWG URL API: + * + * ```js + * function resolve(from, to) { + * const resolvedUrl = new URL(to, new URL(from, 'resolve://')); + * if (resolvedUrl.protocol === 'resolve:') { + * // `from` is a relative URL. + * const { pathname, search, hash } = resolvedUrl; + * return pathname + search + hash; + * } + * return resolvedUrl.toString(); + * } + * + * resolve('/one/two/three', 'four'); // '/one/two/four' + * resolve('http://example.com/', '/one'); // 'http://example.com/one' + * resolve('http://example.com/one', '/two'); // 'http://example.com/two' + * ``` + * @since v0.1.25 + * @legacy Use the WHATWG URL API instead. + * @param from The base URL to use if `to` is a relative URL. + * @param to The target URL to resolve. + */ + function resolve(from: string, to: string): string; + /** + * Returns the [Punycode](https://tools.ietf.org/html/rfc5891#section-4.4) ASCII serialization of the `domain`. If `domain` is an + * invalid domain, the empty string is returned. + * + * It performs the inverse operation to {@link domainToUnicode}. + * + * ```js + * import url from 'node:url'; + * + * console.log(url.domainToASCII('español.com')); + * // Prints xn--espaol-zwa.com + * console.log(url.domainToASCII('中文.com')); + * // Prints xn--fiq228c.com + * console.log(url.domainToASCII('xn--iñvalid.com')); + * // Prints an empty string + * ``` + * @since v7.4.0, v6.13.0 + */ + function domainToASCII(domain: string): string; + /** + * Returns the Unicode serialization of the `domain`. If `domain` is an invalid + * domain, the empty string is returned. + * + * It performs the inverse operation to {@link domainToASCII}. + * + * ```js + * import url from 'node:url'; + * + * console.log(url.domainToUnicode('xn--espaol-zwa.com')); + * // Prints español.com + * console.log(url.domainToUnicode('xn--fiq228c.com')); + * // Prints 中文.com + * console.log(url.domainToUnicode('xn--iñvalid.com')); + * // Prints an empty string + * ``` + * @since v7.4.0, v6.13.0 + */ + function domainToUnicode(domain: string): string; + /** + * This function ensures the correct decodings of percent-encoded characters as + * well as ensuring a cross-platform valid absolute path string. + * + * ```js + * import { fileURLToPath } from 'node:url'; + * + * const __filename = fileURLToPath(import.meta.url); + * + * new URL('file:///C:/path/').pathname; // Incorrect: /C:/path/ + * fileURLToPath('file:///C:/path/'); // Correct: C:\path\ (Windows) + * + * new URL('file://nas/foo.txt').pathname; // Incorrect: /foo.txt + * fileURLToPath('file://nas/foo.txt'); // Correct: \\nas\foo.txt (Windows) + * + * new URL('file:///你好.txt').pathname; // Incorrect: /%E4%BD%A0%E5%A5%BD.txt + * fileURLToPath('file:///你好.txt'); // Correct: /你好.txt (POSIX) + * + * new URL('file:///hello world').pathname; // Incorrect: /hello%20world + * fileURLToPath('file:///hello world'); // Correct: /hello world (POSIX) + * ``` + * @since v10.12.0 + * @param url The file URL string or URL object to convert to a path. + * @return The fully-resolved platform-specific Node.js file path. + */ + function fileURLToPath(url: string | URL, options?: FileUrlToPathOptions): string; + /** + * Like `url.fileURLToPath(...)` except that instead of returning a string + * representation of the path, a `Buffer` is returned. This conversion is + * helpful when the input URL contains percent-encoded segments that are + * not valid UTF-8 / Unicode sequences. + * @since v24.3.0 + * @param url The file URL string or URL object to convert to a path. + * @returns The fully-resolved platform-specific Node.js file path + * as a `Buffer`. + */ + function fileURLToPathBuffer(url: string | URL, options?: FileUrlToPathOptions): NonSharedBuffer; + /** + * This function ensures that `path` is resolved absolutely, and that the URL + * control characters are correctly encoded when converting into a File URL. + * + * ```js + * import { pathToFileURL } from 'node:url'; + * + * new URL('/foo#1', 'file:'); // Incorrect: file:///foo#1 + * pathToFileURL('/foo#1'); // Correct: file:///foo%231 (POSIX) + * + * new URL('/some/path%.c', 'file:'); // Incorrect: file:///some/path%.c + * pathToFileURL('/some/path%.c'); // Correct: file:///some/path%25.c (POSIX) + * ``` + * @since v10.12.0 + * @param path The path to convert to a File URL. + * @return The file URL object. + */ + function pathToFileURL(path: string, options?: PathToFileUrlOptions): URL; + /** + * This utility function converts a URL object into an ordinary options object as + * expected by the `http.request()` and `https.request()` APIs. + * + * ```js + * import { urlToHttpOptions } from 'node:url'; + * const myURL = new URL('https://a:b@測試?abc#foo'); + * + * console.log(urlToHttpOptions(myURL)); + * /* + * { + * protocol: 'https:', + * hostname: 'xn--g6w251d', + * hash: '#foo', + * search: '?abc', + * pathname: '/', + * path: '/?abc', + * href: 'https://a:b@xn--g6w251d/?abc#foo', + * auth: 'a:b' + * } + * + * ``` + * @since v15.7.0, v14.18.0 + * @param url The `WHATWG URL` object to convert to an options object. + * @return Options object + */ + function urlToHttpOptions(url: URL): ClientRequestArgs; + interface URLFormatOptions { + /** + * `true` if the serialized URL string should include the username and password, `false` otherwise. + * @default true + */ + auth?: boolean | undefined; + /** + * `true` if the serialized URL string should include the fragment, `false` otherwise. + * @default true + */ + fragment?: boolean | undefined; + /** + * `true` if the serialized URL string should include the search query, `false` otherwise. + * @default true + */ + search?: boolean | undefined; + /** + * `true` if Unicode characters appearing in the host component of the URL string should be encoded directly as opposed to + * being Punycode encoded. + * @default false + */ + unicode?: boolean | undefined; + } + /** + * Browser-compatible `URL` class, implemented by following the WHATWG URL + * Standard. [Examples of parsed URLs](https://url.spec.whatwg.org/#example-url-parsing) may be found in the Standard itself. + * The `URL` class is also available on the global object. + * + * In accordance with browser conventions, all properties of `URL` objects + * are implemented as getters and setters on the class prototype, rather than as + * data properties on the object itself. Thus, unlike `legacy urlObject`s, + * using the `delete` keyword on any properties of `URL` objects (e.g. `delete myURL.protocol`, `delete myURL.pathname`, etc) has no effect but will still + * return `true`. + * @since v7.0.0, v6.13.0 + */ + class URL { + /** + * Creates a `'blob:nodedata:...'` URL string that represents the given `Blob` object and can be used to retrieve the `Blob` later. + * + * ```js + * import { + * Blob, + * resolveObjectURL, + * } from 'node:buffer'; + * + * const blob = new Blob(['hello']); + * const id = URL.createObjectURL(blob); + * + * // later... + * + * const otherBlob = resolveObjectURL(id); + * console.log(otherBlob.size); + * ``` + * + * The data stored by the registered `Blob` will be retained in memory until `URL.revokeObjectURL()` is called to remove it. + * + * `Blob` objects are registered within the current thread. If using Worker + * Threads, `Blob` objects registered within one Worker will not be available + * to other workers or the main thread. + * @since v16.7.0 + */ + static createObjectURL(blob: NodeBlob): string; + /** + * Removes the stored `Blob` identified by the given ID. Attempting to revoke a + * ID that isn't registered will silently fail. + * @since v16.7.0 + * @param id A `'blob:nodedata:...` URL string returned by a prior call to `URL.createObjectURL()`. + */ + static revokeObjectURL(id: string): void; + /** + * Checks if an `input` relative to the `base` can be parsed to a `URL`. + * + * ```js + * const isValid = URL.canParse('/foo', 'https://example.org/'); // true + * + * const isNotValid = URL.canParse('/foo'); // false + * ``` + * @since v19.9.0 + * @param input The absolute or relative input URL to parse. If `input` is relative, then `base` is required. If `input` is absolute, the `base` is ignored. If `input` is not a string, it is + * `converted to a string` first. + * @param base The base URL to resolve against if the `input` is not absolute. If `base` is not a string, it is `converted to a string` first. + */ + static canParse(input: string, base?: string): boolean; + /** + * Parses a string as a URL. If `base` is provided, it will be used as the base + * URL for the purpose of resolving non-absolute `input` URLs. Returns `null` + * if the parameters can't be resolved to a valid URL. + * @since v22.1.0 + * @param input The absolute or relative input URL to parse. If `input` + * is relative, then `base` is required. If `input` is absolute, the `base` + * is ignored. If `input` is not a string, it is [converted to a string](https://tc39.es/ecma262/#sec-tostring) first. + * @param base The base URL to resolve against if the `input` is not + * absolute. If `base` is not a string, it is [converted to a string](https://tc39.es/ecma262/#sec-tostring) first. + */ + static parse(input: string, base?: string): URL | null; + constructor(input: string | { toString: () => string }, base?: string | URL); + /** + * Gets and sets the fragment portion of the URL. + * + * ```js + * const myURL = new URL('https://example.org/foo#bar'); + * console.log(myURL.hash); + * // Prints #bar + * + * myURL.hash = 'baz'; + * console.log(myURL.href); + * // Prints https://example.org/foo#baz + * ``` + * + * Invalid URL characters included in the value assigned to the `hash` property + * are `percent-encoded`. The selection of which characters to + * percent-encode may vary somewhat from what the {@link parse} and {@link format} methods would produce. + */ + hash: string; + /** + * Gets and sets the host portion of the URL. + * + * ```js + * const myURL = new URL('https://example.org:81/foo'); + * console.log(myURL.host); + * // Prints example.org:81 + * + * myURL.host = 'example.com:82'; + * console.log(myURL.href); + * // Prints https://example.com:82/foo + * ``` + * + * Invalid host values assigned to the `host` property are ignored. + */ + host: string; + /** + * Gets and sets the host name portion of the URL. The key difference between`url.host` and `url.hostname` is that `url.hostname` does _not_ include the + * port. + * + * ```js + * const myURL = new URL('https://example.org:81/foo'); + * console.log(myURL.hostname); + * // Prints example.org + * + * // Setting the hostname does not change the port + * myURL.hostname = 'example.com'; + * console.log(myURL.href); + * // Prints https://example.com:81/foo + * + * // Use myURL.host to change the hostname and port + * myURL.host = 'example.org:82'; + * console.log(myURL.href); + * // Prints https://example.org:82/foo + * ``` + * + * Invalid host name values assigned to the `hostname` property are ignored. + */ + hostname: string; + /** + * Gets and sets the serialized URL. + * + * ```js + * const myURL = new URL('https://example.org/foo'); + * console.log(myURL.href); + * // Prints https://example.org/foo + * + * myURL.href = 'https://example.com/bar'; + * console.log(myURL.href); + * // Prints https://example.com/bar + * ``` + * + * Getting the value of the `href` property is equivalent to calling {@link toString}. + * + * Setting the value of this property to a new value is equivalent to creating a + * new `URL` object using `new URL(value)`. Each of the `URL` object's properties will be modified. + * + * If the value assigned to the `href` property is not a valid URL, a `TypeError` will be thrown. + */ + href: string; + /** + * Gets the read-only serialization of the URL's origin. + * + * ```js + * const myURL = new URL('https://example.org/foo/bar?baz'); + * console.log(myURL.origin); + * // Prints https://example.org + * ``` + * + * ```js + * const idnURL = new URL('https://測試'); + * console.log(idnURL.origin); + * // Prints https://xn--g6w251d + * + * console.log(idnURL.hostname); + * // Prints xn--g6w251d + * ``` + */ + readonly origin: string; + /** + * Gets and sets the password portion of the URL. + * + * ```js + * const myURL = new URL('https://abc:xyz@example.com'); + * console.log(myURL.password); + * // Prints xyz + * + * myURL.password = '123'; + * console.log(myURL.href); + * // Prints https://abc:123@example.com/ + * ``` + * + * Invalid URL characters included in the value assigned to the `password` property + * are `percent-encoded`. The selection of which characters to + * percent-encode may vary somewhat from what the {@link parse} and {@link format} methods would produce. + */ + password: string; + /** + * Gets and sets the path portion of the URL. + * + * ```js + * const myURL = new URL('https://example.org/abc/xyz?123'); + * console.log(myURL.pathname); + * // Prints /abc/xyz + * + * myURL.pathname = '/abcdef'; + * console.log(myURL.href); + * // Prints https://example.org/abcdef?123 + * ``` + * + * Invalid URL characters included in the value assigned to the `pathname` property are `percent-encoded`. The selection of which characters + * to percent-encode may vary somewhat from what the {@link parse} and {@link format} methods would produce. + */ + pathname: string; + /** + * Gets and sets the port portion of the URL. + * + * The port value may be a number or a string containing a number in the range `0` to `65535` (inclusive). Setting the value to the default port of the `URL` objects given `protocol` will + * result in the `port` value becoming + * the empty string (`''`). + * + * The port value can be an empty string in which case the port depends on + * the protocol/scheme: + * + * + * + * Upon assigning a value to the port, the value will first be converted to a + * string using `.toString()`. + * + * If that string is invalid but it begins with a number, the leading number is + * assigned to `port`. + * If the number lies outside the range denoted above, it is ignored. + * + * ```js + * const myURL = new URL('https://example.org:8888'); + * console.log(myURL.port); + * // Prints 8888 + * + * // Default ports are automatically transformed to the empty string + * // (HTTPS protocol's default port is 443) + * myURL.port = '443'; + * console.log(myURL.port); + * // Prints the empty string + * console.log(myURL.href); + * // Prints https://example.org/ + * + * myURL.port = 1234; + * console.log(myURL.port); + * // Prints 1234 + * console.log(myURL.href); + * // Prints https://example.org:1234/ + * + * // Completely invalid port strings are ignored + * myURL.port = 'abcd'; + * console.log(myURL.port); + * // Prints 1234 + * + * // Leading numbers are treated as a port number + * myURL.port = '5678abcd'; + * console.log(myURL.port); + * // Prints 5678 + * + * // Non-integers are truncated + * myURL.port = 1234.5678; + * console.log(myURL.port); + * // Prints 1234 + * + * // Out-of-range numbers which are not represented in scientific notation + * // will be ignored. + * myURL.port = 1e10; // 10000000000, will be range-checked as described below + * console.log(myURL.port); + * // Prints 1234 + * ``` + * + * Numbers which contain a decimal point, + * such as floating-point numbers or numbers in scientific notation, + * are not an exception to this rule. + * Leading numbers up to the decimal point will be set as the URL's port, + * assuming they are valid: + * + * ```js + * myURL.port = 4.567e21; + * console.log(myURL.port); + * // Prints 4 (because it is the leading number in the string '4.567e21') + * ``` + */ + port: string; + /** + * Gets and sets the protocol portion of the URL. + * + * ```js + * const myURL = new URL('https://example.org'); + * console.log(myURL.protocol); + * // Prints https: + * + * myURL.protocol = 'ftp'; + * console.log(myURL.href); + * // Prints ftp://example.org/ + * ``` + * + * Invalid URL protocol values assigned to the `protocol` property are ignored. + */ + protocol: string; + /** + * Gets and sets the serialized query portion of the URL. + * + * ```js + * const myURL = new URL('https://example.org/abc?123'); + * console.log(myURL.search); + * // Prints ?123 + * + * myURL.search = 'abc=xyz'; + * console.log(myURL.href); + * // Prints https://example.org/abc?abc=xyz + * ``` + * + * Any invalid URL characters appearing in the value assigned the `search` property will be `percent-encoded`. The selection of which + * characters to percent-encode may vary somewhat from what the {@link parse} and {@link format} methods would produce. + */ + search: string; + /** + * Gets the `URLSearchParams` object representing the query parameters of the + * URL. This property is read-only but the `URLSearchParams` object it provides + * can be used to mutate the URL instance; to replace the entirety of query + * parameters of the URL, use the {@link search} setter. See `URLSearchParams` documentation for details. + * + * Use care when using `.searchParams` to modify the `URL` because, + * per the WHATWG specification, the `URLSearchParams` object uses + * different rules to determine which characters to percent-encode. For + * instance, the `URL` object will not percent encode the ASCII tilde (`~`) + * character, while `URLSearchParams` will always encode it: + * + * ```js + * const myURL = new URL('https://example.org/abc?foo=~bar'); + * + * console.log(myURL.search); // prints ?foo=~bar + * + * // Modify the URL via searchParams... + * myURL.searchParams.sort(); + * + * console.log(myURL.search); // prints ?foo=%7Ebar + * ``` + */ + readonly searchParams: URLSearchParams; + /** + * Gets and sets the username portion of the URL. + * + * ```js + * const myURL = new URL('https://abc:xyz@example.com'); + * console.log(myURL.username); + * // Prints abc + * + * myURL.username = '123'; + * console.log(myURL.href); + * // Prints https://123:xyz@example.com/ + * ``` + * + * Any invalid URL characters appearing in the value assigned the `username` property will be `percent-encoded`. The selection of which + * characters to percent-encode may vary somewhat from what the {@link parse} and {@link format} methods would produce. + */ + username: string; + /** + * The `toString()` method on the `URL` object returns the serialized URL. The + * value returned is equivalent to that of {@link href} and {@link toJSON}. + */ + toString(): string; + /** + * The `toJSON()` method on the `URL` object returns the serialized URL. The + * value returned is equivalent to that of {@link href} and {@link toString}. + * + * This method is automatically called when an `URL` object is serialized + * with [`JSON.stringify()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify). + * + * ```js + * const myURLs = [ + * new URL('https://www.example.com'), + * new URL('https://test.example.org'), + * ]; + * console.log(JSON.stringify(myURLs)); + * // Prints ["https://www.example.com/","https://test.example.org/"] + * ``` + */ + toJSON(): string; + } + interface URLPatternComponentResult { + input: string; + groups: Record; + } + interface URLPatternInit { + protocol?: string; + username?: string; + password?: string; + hostname?: string; + port?: string; + pathname?: string; + search?: string; + hash?: string; + baseURL?: string; + } + interface URLPatternOptions { + ignoreCase?: boolean; + } + interface URLPatternResult { + inputs: (string | URLPatternInit)[]; + protocol: URLPatternComponentResult; + username: URLPatternComponentResult; + password: URLPatternComponentResult; + hostname: URLPatternComponentResult; + port: URLPatternComponentResult; + pathname: URLPatternComponentResult; + search: URLPatternComponentResult; + hash: URLPatternComponentResult; + } + /** + * @since v23.8.0 + * @experimental + */ + class URLPattern { + constructor(input: string | URLPatternInit, baseURL: string, options?: URLPatternOptions); + constructor(input?: string | URLPatternInit, options?: URLPatternOptions); + exec(input?: string | URLPatternInit, baseURL?: string): URLPatternResult | null; + readonly hasRegExpGroups: boolean; + readonly hash: string; + readonly hostname: string; + readonly password: string; + readonly pathname: string; + readonly port: string; + readonly protocol: string; + readonly search: string; + test(input?: string | URLPatternInit, baseURL?: string): boolean; + readonly username: string; + } + interface URLSearchParamsIterator extends NodeJS.Iterator { + [Symbol.iterator](): URLSearchParamsIterator; + } + /** + * The `URLSearchParams` API provides read and write access to the query of a `URL`. The `URLSearchParams` class can also be used standalone with one of the + * four following constructors. + * The `URLSearchParams` class is also available on the global object. + * + * The WHATWG `URLSearchParams` interface and the `querystring` module have + * similar purpose, but the purpose of the `querystring` module is more + * general, as it allows the customization of delimiter characters (`&` and `=`). + * On the other hand, this API is designed purely for URL query strings. + * + * ```js + * const myURL = new URL('https://example.org/?abc=123'); + * console.log(myURL.searchParams.get('abc')); + * // Prints 123 + * + * myURL.searchParams.append('abc', 'xyz'); + * console.log(myURL.href); + * // Prints https://example.org/?abc=123&abc=xyz + * + * myURL.searchParams.delete('abc'); + * myURL.searchParams.set('a', 'b'); + * console.log(myURL.href); + * // Prints https://example.org/?a=b + * + * const newSearchParams = new URLSearchParams(myURL.searchParams); + * // The above is equivalent to + * // const newSearchParams = new URLSearchParams(myURL.search); + * + * newSearchParams.append('a', 'c'); + * console.log(myURL.href); + * // Prints https://example.org/?a=b + * console.log(newSearchParams.toString()); + * // Prints a=b&a=c + * + * // newSearchParams.toString() is implicitly called + * myURL.search = newSearchParams; + * console.log(myURL.href); + * // Prints https://example.org/?a=b&a=c + * newSearchParams.delete('a'); + * console.log(myURL.href); + * // Prints https://example.org/?a=b&a=c + * ``` + * @since v7.5.0, v6.13.0 + */ + class URLSearchParams implements Iterable<[string, string]> { + constructor( + init?: + | URLSearchParams + | string + | Record + | Iterable<[string, string]> + | ReadonlyArray<[string, string]>, + ); + /** + * Append a new name-value pair to the query string. + */ + append(name: string, value: string): void; + /** + * If `value` is provided, removes all name-value pairs + * where name is `name` and value is `value`. + * + * If `value` is not provided, removes all name-value pairs whose name is `name`. + */ + delete(name: string, value?: string): void; + /** + * Returns an ES6 `Iterator` over each of the name-value pairs in the query. + * Each item of the iterator is a JavaScript `Array`. The first item of the `Array` is the `name`, the second item of the `Array` is the `value`. + * + * Alias for `urlSearchParams[Symbol.iterator]()`. + */ + entries(): URLSearchParamsIterator<[string, string]>; + /** + * Iterates over each name-value pair in the query and invokes the given function. + * + * ```js + * const myURL = new URL('https://example.org/?a=b&c=d'); + * myURL.searchParams.forEach((value, name, searchParams) => { + * console.log(name, value, myURL.searchParams === searchParams); + * }); + * // Prints: + * // a b true + * // c d true + * ``` + * @param fn Invoked for each name-value pair in the query + * @param thisArg To be used as `this` value for when `fn` is called + */ + forEach( + fn: (this: TThis, value: string, name: string, searchParams: URLSearchParams) => void, + thisArg?: TThis, + ): void; + /** + * Returns the value of the first name-value pair whose name is `name`. If there + * are no such pairs, `null` is returned. + * @return or `null` if there is no name-value pair with the given `name`. + */ + get(name: string): string | null; + /** + * Returns the values of all name-value pairs whose name is `name`. If there are + * no such pairs, an empty array is returned. + */ + getAll(name: string): string[]; + /** + * Checks if the `URLSearchParams` object contains key-value pair(s) based on `name` and an optional `value` argument. + * + * If `value` is provided, returns `true` when name-value pair with + * same `name` and `value` exists. + * + * If `value` is not provided, returns `true` if there is at least one name-value + * pair whose name is `name`. + */ + has(name: string, value?: string): boolean; + /** + * Returns an ES6 `Iterator` over the names of each name-value pair. + * + * ```js + * const params = new URLSearchParams('foo=bar&foo=baz'); + * for (const name of params.keys()) { + * console.log(name); + * } + * // Prints: + * // foo + * // foo + * ``` + */ + keys(): URLSearchParamsIterator; + /** + * Sets the value in the `URLSearchParams` object associated with `name` to `value`. If there are any pre-existing name-value pairs whose names are `name`, + * set the first such pair's value to `value` and remove all others. If not, + * append the name-value pair to the query string. + * + * ```js + * const params = new URLSearchParams(); + * params.append('foo', 'bar'); + * params.append('foo', 'baz'); + * params.append('abc', 'def'); + * console.log(params.toString()); + * // Prints foo=bar&foo=baz&abc=def + * + * params.set('foo', 'def'); + * params.set('xyz', 'opq'); + * console.log(params.toString()); + * // Prints foo=def&abc=def&xyz=opq + * ``` + */ + set(name: string, value: string): void; + /** + * The total number of parameter entries. + * @since v19.8.0 + */ + readonly size: number; + /** + * Sort all existing name-value pairs in-place by their names. Sorting is done + * with a [stable sorting algorithm](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability), so relative order between name-value pairs + * with the same name is preserved. + * + * This method can be used, in particular, to increase cache hits. + * + * ```js + * const params = new URLSearchParams('query[]=abc&type=search&query[]=123'); + * params.sort(); + * console.log(params.toString()); + * // Prints query%5B%5D=abc&query%5B%5D=123&type=search + * ``` + * @since v7.7.0, v6.13.0 + */ + sort(): void; + /** + * Returns the search parameters serialized as a string, with characters + * percent-encoded where necessary. + */ + toString(): string; + /** + * Returns an ES6 `Iterator` over the values of each name-value pair. + */ + values(): URLSearchParamsIterator; + [Symbol.iterator](): URLSearchParamsIterator<[string, string]>; + } + import { + URL as _URL, + URLPattern as _URLPattern, + URLPatternInit as _URLPatternInit, + URLPatternResult as _URLPatternResult, + URLSearchParams as _URLSearchParams, + } from "url"; + global { + interface URL extends _URL {} + var URL: typeof globalThis extends { + onmessage: any; + URL: infer T; + } ? T + : typeof _URL; + interface URLSearchParams extends _URLSearchParams {} + var URLSearchParams: typeof globalThis extends { + onmessage: any; + URLSearchParams: infer T; + } ? T + : typeof _URLSearchParams; + interface URLPatternInit extends _URLPatternInit {} + interface URLPatternResult extends _URLPatternResult {} + interface URLPattern extends _URLPattern {} + var URLPattern: typeof globalThis extends { + onmessage: any; + scheduler: any; // Must be a var introduced at the same time as URLPattern. + URLPattern: infer T; + } ? T + : typeof _URLPattern; + } +} +declare module "node:url" { + export * from "url"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/util.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/util.d.ts new file mode 100644 index 00000000..c825a79b --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/util.d.ts @@ -0,0 +1,2325 @@ +/** + * The `node:util` module supports the needs of Node.js internal APIs. Many of the + * utilities are useful for application and module developers as well. To access + * it: + * + * ```js + * import util from 'node:util'; + * ``` + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/util.js) + */ +declare module "util" { + import * as types from "node:util/types"; + export interface InspectOptions { + /** + * If `true`, object's non-enumerable symbols and properties are included in the formatted result. + * `WeakMap` and `WeakSet` entries are also included as well as user defined prototype properties (excluding method properties). + * @default false + */ + showHidden?: boolean | undefined; + /** + * Specifies the number of times to recurse while formatting object. + * This is useful for inspecting large objects. + * To recurse up to the maximum call stack size pass `Infinity` or `null`. + * @default 2 + */ + depth?: number | null | undefined; + /** + * If `true`, the output is styled with ANSI color codes. Colors are customizable. + */ + colors?: boolean | undefined; + /** + * If `false`, `[util.inspect.custom](depth, opts, inspect)` functions are not invoked. + * @default true + */ + customInspect?: boolean | undefined; + /** + * If `true`, `Proxy` inspection includes the target and handler objects. + * @default false + */ + showProxy?: boolean | undefined; + /** + * Specifies the maximum number of `Array`, `TypedArray`, `WeakMap`, and `WeakSet` elements + * to include when formatting. Set to `null` or `Infinity` to show all elements. + * Set to `0` or negative to show no elements. + * @default 100 + */ + maxArrayLength?: number | null | undefined; + /** + * Specifies the maximum number of characters to + * include when formatting. Set to `null` or `Infinity` to show all elements. + * Set to `0` or negative to show no characters. + * @default 10000 + */ + maxStringLength?: number | null | undefined; + /** + * The length at which input values are split across multiple lines. + * Set to `Infinity` to format the input as a single line + * (in combination with `compact` set to `true` or any number >= `1`). + * @default 80 + */ + breakLength?: number | undefined; + /** + * Setting this to `false` causes each object key + * to be displayed on a new line. It will also add new lines to text that is + * longer than `breakLength`. If set to a number, the most `n` inner elements + * are united on a single line as long as all properties fit into + * `breakLength`. Short array elements are also grouped together. Note that no + * text will be reduced below 16 characters, no matter the `breakLength` size. + * For more information, see the example below. + * @default true + */ + compact?: boolean | number | undefined; + /** + * If set to `true` or a function, all properties of an object, and `Set` and `Map` + * entries are sorted in the resulting string. + * If set to `true` the default sort is used. + * If set to a function, it is used as a compare function. + */ + sorted?: boolean | ((a: string, b: string) => number) | undefined; + /** + * If set to `true`, getters are going to be + * inspected as well. If set to `'get'` only getters without setter are going + * to be inspected. If set to `'set'` only getters having a corresponding + * setter are going to be inspected. This might cause side effects depending on + * the getter function. + * @default false + */ + getters?: "get" | "set" | boolean | undefined; + /** + * If set to `true`, an underscore is used to separate every three digits in all bigints and numbers. + * @default false + */ + numericSeparator?: boolean | undefined; + } + export type Style = + | "special" + | "number" + | "bigint" + | "boolean" + | "undefined" + | "null" + | "string" + | "symbol" + | "date" + | "regexp" + | "module"; + export type CustomInspectFunction = (depth: number, options: InspectOptionsStylized) => any; // TODO: , inspect: inspect + export interface InspectOptionsStylized extends InspectOptions { + stylize(text: string, styleType: Style): string; + } + export interface CallSiteObject { + /** + * Returns the name of the function associated with this call site. + */ + functionName: string; + /** + * Returns the name of the resource that contains the script for the + * function for this call site. + */ + scriptName: string; + /** + * Returns the unique id of the script, as in Chrome DevTools protocol + * [`Runtime.ScriptId`](https://chromedevtools.github.io/devtools-protocol/1-3/Runtime/#type-ScriptId). + * @since v22.14.0 + */ + scriptId: string; + /** + * Returns the number, 1-based, of the line for the associate function call. + */ + lineNumber: number; + /** + * Returns the 1-based column offset on the line for the associated function call. + */ + columnNumber: number; + } + export type DiffEntry = [operation: -1 | 0 | 1, value: string]; + /** + * `util.diff()` compares two string or array values and returns an array of difference entries. + * It uses the Myers diff algorithm to compute minimal differences, which is the same algorithm + * used internally by assertion error messages. + * + * If the values are equal, an empty array is returned. + * + * ```js + * const { diff } = require('node:util'); + * + * // Comparing strings + * const actualString = '12345678'; + * const expectedString = '12!!5!7!'; + * console.log(diff(actualString, expectedString)); + * // [ + * // [0, '1'], + * // [0, '2'], + * // [1, '3'], + * // [1, '4'], + * // [-1, '!'], + * // [-1, '!'], + * // [0, '5'], + * // [1, '6'], + * // [-1, '!'], + * // [0, '7'], + * // [1, '8'], + * // [-1, '!'], + * // ] + * // Comparing arrays + * const actualArray = ['1', '2', '3']; + * const expectedArray = ['1', '3', '4']; + * console.log(diff(actualArray, expectedArray)); + * // [ + * // [0, '1'], + * // [1, '2'], + * // [0, '3'], + * // [-1, '4'], + * // ] + * // Equal values return empty array + * console.log(diff('same', 'same')); + * // [] + * ``` + * @since v22.15.0 + * @experimental + * @param actual The first value to compare + * @param expected The second value to compare + * @returns An array of difference entries. Each entry is an array with two elements: + * * Index 0: `number` Operation code: `-1` for delete, `0` for no-op/unchanged, `1` for insert + * * Index 1: `string` The value associated with the operation + */ + export function diff(actual: string | readonly string[], expected: string | readonly string[]): DiffEntry[]; + /** + * The `util.format()` method returns a formatted string using the first argument + * as a `printf`-like format string which can contain zero or more format + * specifiers. Each specifier is replaced with the converted value from the + * corresponding argument. Supported specifiers are: + * + * If a specifier does not have a corresponding argument, it is not replaced: + * + * ```js + * util.format('%s:%s', 'foo'); + * // Returns: 'foo:%s' + * ``` + * + * Values that are not part of the format string are formatted using `util.inspect()` if their type is not `string`. + * + * If there are more arguments passed to the `util.format()` method than the + * number of specifiers, the extra arguments are concatenated to the returned + * string, separated by spaces: + * + * ```js + * util.format('%s:%s', 'foo', 'bar', 'baz'); + * // Returns: 'foo:bar baz' + * ``` + * + * If the first argument does not contain a valid format specifier, `util.format()` returns a string that is the concatenation of all arguments separated by spaces: + * + * ```js + * util.format(1, 2, 3); + * // Returns: '1 2 3' + * ``` + * + * If only one argument is passed to `util.format()`, it is returned as it is + * without any formatting: + * + * ```js + * util.format('%% %s'); + * // Returns: '%% %s' + * ``` + * + * `util.format()` is a synchronous method that is intended as a debugging tool. + * Some input values can have a significant performance overhead that can block the + * event loop. Use this function with care and never in a hot code path. + * @since v0.5.3 + * @param format A `printf`-like format string. + */ + export function format(format?: any, ...param: any[]): string; + /** + * This function is identical to {@link format}, except in that it takes + * an `inspectOptions` argument which specifies options that are passed along to {@link inspect}. + * + * ```js + * util.formatWithOptions({ colors: true }, 'See object %O', { foo: 42 }); + * // Returns 'See object { foo: 42 }', where `42` is colored as a number + * // when printed to a terminal. + * ``` + * @since v10.0.0 + */ + export function formatWithOptions(inspectOptions: InspectOptions, format?: any, ...param: any[]): string; + interface GetCallSitesOptions { + /** + * Reconstruct the original location in the stacktrace from the source-map. + * Enabled by default with the flag `--enable-source-maps`. + */ + sourceMap?: boolean | undefined; + } + /** + * Returns an array of call site objects containing the stack of + * the caller function. + * + * ```js + * import { getCallSites } from 'node:util'; + * + * function exampleFunction() { + * const callSites = getCallSites(); + * + * console.log('Call Sites:'); + * callSites.forEach((callSite, index) => { + * console.log(`CallSite ${index + 1}:`); + * console.log(`Function Name: ${callSite.functionName}`); + * console.log(`Script Name: ${callSite.scriptName}`); + * console.log(`Line Number: ${callSite.lineNumber}`); + * console.log(`Column Number: ${callSite.column}`); + * }); + * // CallSite 1: + * // Function Name: exampleFunction + * // Script Name: /home/example.js + * // Line Number: 5 + * // Column Number: 26 + * + * // CallSite 2: + * // Function Name: anotherFunction + * // Script Name: /home/example.js + * // Line Number: 22 + * // Column Number: 3 + * + * // ... + * } + * + * // A function to simulate another stack layer + * function anotherFunction() { + * exampleFunction(); + * } + * + * anotherFunction(); + * ``` + * + * It is possible to reconstruct the original locations by setting the option `sourceMap` to `true`. + * If the source map is not available, the original location will be the same as the current location. + * When the `--enable-source-maps` flag is enabled, for example when using `--experimental-transform-types`, + * `sourceMap` will be true by default. + * + * ```ts + * import { getCallSites } from 'node:util'; + * + * interface Foo { + * foo: string; + * } + * + * const callSites = getCallSites({ sourceMap: true }); + * + * // With sourceMap: + * // Function Name: '' + * // Script Name: example.js + * // Line Number: 7 + * // Column Number: 26 + * + * // Without sourceMap: + * // Function Name: '' + * // Script Name: example.js + * // Line Number: 2 + * // Column Number: 26 + * ``` + * @param frameCount Number of frames to capture as call site objects. + * **Default:** `10`. Allowable range is between 1 and 200. + * @return An array of call site objects + * @since v22.9.0 + */ + export function getCallSites(frameCount?: number, options?: GetCallSitesOptions): CallSiteObject[]; + export function getCallSites(options: GetCallSitesOptions): CallSiteObject[]; + /** + * Returns the string name for a numeric error code that comes from a Node.js API. + * The mapping between error codes and error names is platform-dependent. + * See `Common System Errors` for the names of common errors. + * + * ```js + * fs.access('file/that/does/not/exist', (err) => { + * const name = util.getSystemErrorName(err.errno); + * console.error(name); // ENOENT + * }); + * ``` + * @since v9.7.0 + */ + export function getSystemErrorName(err: number): string; + /** + * Enable or disable printing a stack trace on `SIGINT`. The API is only available on the main thread. + * @since 24.6.0 + */ + export function setTraceSigInt(enable: boolean): void; + /** + * Returns a Map of all system error codes available from the Node.js API. + * The mapping between error codes and error names is platform-dependent. + * See `Common System Errors` for the names of common errors. + * + * ```js + * fs.access('file/that/does/not/exist', (err) => { + * const errorMap = util.getSystemErrorMap(); + * const name = errorMap.get(err.errno); + * console.error(name); // ENOENT + * }); + * ``` + * @since v16.0.0, v14.17.0 + */ + export function getSystemErrorMap(): Map; + /** + * Returns the string message for a numeric error code that comes from a Node.js + * API. + * The mapping between error codes and string messages is platform-dependent. + * + * ```js + * fs.access('file/that/does/not/exist', (err) => { + * const message = util.getSystemErrorMessage(err.errno); + * console.error(message); // no such file or directory + * }); + * ``` + * @since v22.12.0 + */ + export function getSystemErrorMessage(err: number): string; + /** + * Returns the `string` after replacing any surrogate code points + * (or equivalently, any unpaired surrogate code units) with the + * Unicode "replacement character" U+FFFD. + * @since v16.8.0, v14.18.0 + */ + export function toUSVString(string: string): string; + /** + * Creates and returns an `AbortController` instance whose `AbortSignal` is marked + * as transferable and can be used with `structuredClone()` or `postMessage()`. + * @since v18.11.0 + * @returns A transferable AbortController + */ + export function transferableAbortController(): AbortController; + /** + * Marks the given `AbortSignal` as transferable so that it can be used with`structuredClone()` and `postMessage()`. + * + * ```js + * const signal = transferableAbortSignal(AbortSignal.timeout(100)); + * const channel = new MessageChannel(); + * channel.port2.postMessage(signal, [signal]); + * ``` + * @since v18.11.0 + * @param signal The AbortSignal + * @returns The same AbortSignal + */ + export function transferableAbortSignal(signal: AbortSignal): AbortSignal; + /** + * Listens to abort event on the provided `signal` and returns a promise that resolves when the `signal` is aborted. + * If `resource` is provided, it weakly references the operation's associated object, + * so if `resource` is garbage collected before the `signal` aborts, + * then returned promise shall remain pending. + * This prevents memory leaks in long-running or non-cancelable operations. + * + * ```js + * import { aborted } from 'node:util'; + * + * // Obtain an object with an abortable signal, like a custom resource or operation. + * const dependent = obtainSomethingAbortable(); + * + * // Pass `dependent` as the resource, indicating the promise should only resolve + * // if `dependent` is still in memory when the signal is aborted. + * aborted(dependent.signal, dependent).then(() => { + * // This code runs when `dependent` is aborted. + * console.log('Dependent resource was aborted.'); + * }); + * + * // Simulate an event that triggers the abort. + * dependent.on('event', () => { + * dependent.abort(); // This will cause the `aborted` promise to resolve. + * }); + * ``` + * @since v19.7.0 + * @param resource Any non-null object tied to the abortable operation and held weakly. + * If `resource` is garbage collected before the `signal` aborts, the promise remains pending, + * allowing Node.js to stop tracking it. + * This helps prevent memory leaks in long-running or non-cancelable operations. + */ + export function aborted(signal: AbortSignal, resource: any): Promise; + /** + * The `util.inspect()` method returns a string representation of `object` that is + * intended for debugging. The output of `util.inspect` may change at any time + * and should not be depended upon programmatically. Additional `options` may be + * passed that alter the result. + * `util.inspect()` will use the constructor's name and/or `Symbol.toStringTag` + * property to make an identifiable tag for an inspected value. + * + * ```js + * class Foo { + * get [Symbol.toStringTag]() { + * return 'bar'; + * } + * } + * + * class Bar {} + * + * const baz = Object.create(null, { [Symbol.toStringTag]: { value: 'foo' } }); + * + * util.inspect(new Foo()); // 'Foo [bar] {}' + * util.inspect(new Bar()); // 'Bar {}' + * util.inspect(baz); // '[foo] {}' + * ``` + * + * Circular references point to their anchor by using a reference index: + * + * ```js + * import { inspect } from 'node:util'; + * + * const obj = {}; + * obj.a = [obj]; + * obj.b = {}; + * obj.b.inner = obj.b; + * obj.b.obj = obj; + * + * console.log(inspect(obj)); + * // { + * // a: [ [Circular *1] ], + * // b: { inner: [Circular *2], obj: [Circular *1] } + * // } + * ``` + * + * The following example inspects all properties of the `util` object: + * + * ```js + * import util from 'node:util'; + * + * console.log(util.inspect(util, { showHidden: true, depth: null })); + * ``` + * + * The following example highlights the effect of the `compact` option: + * + * ```js + * import { inspect } from 'node:util'; + * + * const o = { + * a: [1, 2, [[ + * 'Lorem ipsum dolor sit amet,\nconsectetur adipiscing elit, sed do ' + + * 'eiusmod \ntempor incididunt ut labore et dolore magna aliqua.', + * 'test', + * 'foo']], 4], + * b: new Map([['za', 1], ['zb', 'test']]), + * }; + * console.log(inspect(o, { compact: true, depth: 5, breakLength: 80 })); + * + * // { a: + * // [ 1, + * // 2, + * // [ [ 'Lorem ipsum dolor sit amet,\nconsectetur [...]', // A long line + * // 'test', + * // 'foo' ] ], + * // 4 ], + * // b: Map(2) { 'za' => 1, 'zb' => 'test' } } + * + * // Setting `compact` to false or an integer creates more reader friendly output. + * console.log(inspect(o, { compact: false, depth: 5, breakLength: 80 })); + * + * // { + * // a: [ + * // 1, + * // 2, + * // [ + * // [ + * // 'Lorem ipsum dolor sit amet,\n' + + * // 'consectetur adipiscing elit, sed do eiusmod \n' + + * // 'tempor incididunt ut labore et dolore magna aliqua.', + * // 'test', + * // 'foo' + * // ] + * // ], + * // 4 + * // ], + * // b: Map(2) { + * // 'za' => 1, + * // 'zb' => 'test' + * // } + * // } + * + * // Setting `breakLength` to e.g. 150 will print the "Lorem ipsum" text in a + * // single line. + * ``` + * + * The `showHidden` option allows `WeakMap` and `WeakSet` entries to be + * inspected. If there are more entries than `maxArrayLength`, there is no + * guarantee which entries are displayed. That means retrieving the same + * `WeakSet` entries twice may result in different output. Furthermore, entries + * with no remaining strong references may be garbage collected at any time. + * + * ```js + * import { inspect } from 'node:util'; + * + * const obj = { a: 1 }; + * const obj2 = { b: 2 }; + * const weakSet = new WeakSet([obj, obj2]); + * + * console.log(inspect(weakSet, { showHidden: true })); + * // WeakSet { { a: 1 }, { b: 2 } } + * ``` + * + * The `sorted` option ensures that an object's property insertion order does not + * impact the result of `util.inspect()`. + * + * ```js + * import { inspect } from 'node:util'; + * import assert from 'node:assert'; + * + * const o1 = { + * b: [2, 3, 1], + * a: '`a` comes before `b`', + * c: new Set([2, 3, 1]), + * }; + * console.log(inspect(o1, { sorted: true })); + * // { a: '`a` comes before `b`', b: [ 2, 3, 1 ], c: Set(3) { 1, 2, 3 } } + * console.log(inspect(o1, { sorted: (a, b) => b.localeCompare(a) })); + * // { c: Set(3) { 3, 2, 1 }, b: [ 2, 3, 1 ], a: '`a` comes before `b`' } + * + * const o2 = { + * c: new Set([2, 1, 3]), + * a: '`a` comes before `b`', + * b: [2, 3, 1], + * }; + * assert.strict.equal( + * inspect(o1, { sorted: true }), + * inspect(o2, { sorted: true }), + * ); + * ``` + * + * The `numericSeparator` option adds an underscore every three digits to all + * numbers. + * + * ```js + * import { inspect } from 'node:util'; + * + * const thousand = 1000; + * const million = 1000000; + * const bigNumber = 123456789n; + * const bigDecimal = 1234.12345; + * + * console.log(inspect(thousand, { numericSeparator: true })); + * // 1_000 + * console.log(inspect(million, { numericSeparator: true })); + * // 1_000_000 + * console.log(inspect(bigNumber, { numericSeparator: true })); + * // 123_456_789n + * console.log(inspect(bigDecimal, { numericSeparator: true })); + * // 1_234.123_45 + * ``` + * + * `util.inspect()` is a synchronous method intended for debugging. Its maximum + * output length is approximately 128 MiB. Inputs that result in longer output will + * be truncated. + * @since v0.3.0 + * @param object Any JavaScript primitive or `Object`. + * @return The representation of `object`. + */ + export function inspect(object: any, showHidden?: boolean, depth?: number | null, color?: boolean): string; + export function inspect(object: any, options?: InspectOptions): string; + export namespace inspect { + let colors: NodeJS.Dict<[number, number]>; + let styles: { + [K in Style]: string; + }; + let defaultOptions: InspectOptions; + /** + * Allows changing inspect settings from the repl. + */ + let replDefaults: InspectOptions; + /** + * That can be used to declare custom inspect functions. + */ + const custom: unique symbol; + } + /** + * Alias for [`Array.isArray()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray). + * + * Returns `true` if the given `object` is an `Array`. Otherwise, returns `false`. + * + * ```js + * import util from 'node:util'; + * + * util.isArray([]); + * // Returns: true + * util.isArray(new Array()); + * // Returns: true + * util.isArray({}); + * // Returns: false + * ``` + * @since v0.6.0 + * @deprecated Since v4.0.0 - Use `isArray` instead. + */ + export function isArray(object: unknown): object is unknown[]; + /** + * Usage of `util.inherits()` is discouraged. Please use the ES6 `class` and + * `extends` keywords to get language level inheritance support. Also note + * that the two styles are [semantically incompatible](https://github.com/nodejs/node/issues/4179). + * + * Inherit the prototype methods from one + * [constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor) into another. The + * prototype of `constructor` will be set to a new object created from + * `superConstructor`. + * + * This mainly adds some input validation on top of + * `Object.setPrototypeOf(constructor.prototype, superConstructor.prototype)`. + * As an additional convenience, `superConstructor` will be accessible + * through the `constructor.super_` property. + * + * ```js + * const util = require('node:util'); + * const EventEmitter = require('node:events'); + * + * function MyStream() { + * EventEmitter.call(this); + * } + * + * util.inherits(MyStream, EventEmitter); + * + * MyStream.prototype.write = function(data) { + * this.emit('data', data); + * }; + * + * const stream = new MyStream(); + * + * console.log(stream instanceof EventEmitter); // true + * console.log(MyStream.super_ === EventEmitter); // true + * + * stream.on('data', (data) => { + * console.log(`Received data: "${data}"`); + * }); + * stream.write('It works!'); // Received data: "It works!" + * ``` + * + * ES6 example using `class` and `extends`: + * + * ```js + * import EventEmitter from 'node:events'; + * + * class MyStream extends EventEmitter { + * write(data) { + * this.emit('data', data); + * } + * } + * + * const stream = new MyStream(); + * + * stream.on('data', (data) => { + * console.log(`Received data: "${data}"`); + * }); + * stream.write('With ES6'); + * ``` + * @since v0.3.0 + * @legacy Use ES2015 class syntax and `extends` keyword instead. + */ + export function inherits(constructor: unknown, superConstructor: unknown): void; + export type DebugLoggerFunction = (msg: string, ...param: unknown[]) => void; + export interface DebugLogger extends DebugLoggerFunction { + /** + * The `util.debuglog().enabled` getter is used to create a test that can be used + * in conditionals based on the existence of the `NODE_DEBUG` environment variable. + * If the `section` name appears within the value of that environment variable, + * then the returned value will be `true`. If not, then the returned value will be + * `false`. + * + * ```js + * import { debuglog } from 'node:util'; + * const enabled = debuglog('foo').enabled; + * if (enabled) { + * console.log('hello from foo [%d]', 123); + * } + * ``` + * + * If this program is run with `NODE_DEBUG=foo` in the environment, then it will + * output something like: + * + * ```console + * hello from foo [123] + * ``` + */ + enabled: boolean; + } + /** + * The `util.debuglog()` method is used to create a function that conditionally + * writes debug messages to `stderr` based on the existence of the `NODE_DEBUG` + * environment variable. If the `section` name appears within the value of that + * environment variable, then the returned function operates similar to + * `console.error()`. If not, then the returned function is a no-op. + * + * ```js + * import { debuglog } from 'node:util'; + * const log = debuglog('foo'); + * + * log('hello from foo [%d]', 123); + * ``` + * + * If this program is run with `NODE_DEBUG=foo` in the environment, then + * it will output something like: + * + * ```console + * FOO 3245: hello from foo [123] + * ``` + * + * where `3245` is the process id. If it is not run with that + * environment variable set, then it will not print anything. + * + * The `section` supports wildcard also: + * + * ```js + * import { debuglog } from 'node:util'; + * const log = debuglog('foo'); + * + * log('hi there, it\'s foo-bar [%d]', 2333); + * ``` + * + * if it is run with `NODE_DEBUG=foo*` in the environment, then it will output + * something like: + * + * ```console + * FOO-BAR 3257: hi there, it's foo-bar [2333] + * ``` + * + * Multiple comma-separated `section` names may be specified in the `NODE_DEBUG` + * environment variable: `NODE_DEBUG=fs,net,tls`. + * + * The optional `callback` argument can be used to replace the logging function + * with a different function that doesn't have any initialization or + * unnecessary wrapping. + * + * ```js + * import { debuglog } from 'node:util'; + * let log = debuglog('internals', (debug) => { + * // Replace with a logging function that optimizes out + * // testing if the section is enabled + * log = debug; + * }); + * ``` + * @since v0.11.3 + * @param section A string identifying the portion of the application for which the `debuglog` function is being created. + * @param callback A callback invoked the first time the logging function is called with a function argument that is a more optimized logging function. + * @return The logging function + */ + export function debuglog(section: string, callback?: (fn: DebugLoggerFunction) => void): DebugLogger; + export { debuglog as debug }; + /** + * The `util.deprecate()` method wraps `fn` (which may be a function or class) in + * such a way that it is marked as deprecated. + * + * ```js + * import { deprecate } from 'node:util'; + * + * export const obsoleteFunction = deprecate(() => { + * // Do something here. + * }, 'obsoleteFunction() is deprecated. Use newShinyFunction() instead.'); + * ``` + * + * When called, `util.deprecate()` will return a function that will emit a + * `DeprecationWarning` using the `'warning'` event. The warning will + * be emitted and printed to `stderr` the first time the returned function is + * called. After the warning is emitted, the wrapped function is called without + * emitting a warning. + * + * If the same optional `code` is supplied in multiple calls to `util.deprecate()`, + * the warning will be emitted only once for that `code`. + * + * ```js + * import { deprecate } from 'node:util'; + * + * const fn1 = deprecate( + * () => 'a value', + * 'deprecation message', + * 'DEP0001', + * ); + * const fn2 = deprecate( + * () => 'a different value', + * 'other dep message', + * 'DEP0001', + * ); + * fn1(); // Emits a deprecation warning with code DEP0001 + * fn2(); // Does not emit a deprecation warning because it has the same code + * ``` + * + * If either the `--no-deprecation` or `--no-warnings` command-line flags are + * used, or if the `process.noDeprecation` property is set to `true` _prior_ to + * the first deprecation warning, the `util.deprecate()` method does nothing. + * + * If the `--trace-deprecation` or `--trace-warnings` command-line flags are set, + * or the `process.traceDeprecation` property is set to `true`, a warning and a + * stack trace are printed to `stderr` the first time the deprecated function is + * called. + * + * If the `--throw-deprecation` command-line flag is set, or the + * `process.throwDeprecation` property is set to `true`, then an exception will be + * thrown when the deprecated function is called. + * + * The `--throw-deprecation` command-line flag and `process.throwDeprecation` + * property take precedence over `--trace-deprecation` and + * `process.traceDeprecation`. + * @since v0.8.0 + * @param fn The function that is being deprecated. + * @param msg A warning message to display when the deprecated function is invoked. + * @param code A deprecation code. See the `list of deprecated APIs` for a list of codes. + * @return The deprecated function wrapped to emit a warning. + */ + export function deprecate(fn: T, msg: string, code?: string): T; + export interface IsDeepStrictEqualOptions { + /** + * If `true`, prototype and constructor + * comparison is skipped during deep strict equality check. + * @since v24.9.0 + * @default false + */ + skipPrototype?: boolean | undefined; + } + /** + * Returns `true` if there is deep strict equality between `val1` and `val2`. + * Otherwise, returns `false`. + * + * See `assert.deepStrictEqual()` for more information about deep strict + * equality. + * @since v9.0.0 + */ + export function isDeepStrictEqual(val1: unknown, val2: unknown, options?: IsDeepStrictEqualOptions): boolean; + /** + * Returns `str` with any ANSI escape codes removed. + * + * ```js + * console.log(util.stripVTControlCharacters('\u001B[4mvalue\u001B[0m')); + * // Prints "value" + * ``` + * @since v16.11.0 + */ + export function stripVTControlCharacters(str: string): string; + /** + * Takes an `async` function (or a function that returns a `Promise`) and returns a + * function following the error-first callback style, i.e. taking + * an `(err, value) => ...` callback as the last argument. In the callback, the + * first argument will be the rejection reason (or `null` if the `Promise` + * resolved), and the second argument will be the resolved value. + * + * ```js + * import { callbackify } from 'node:util'; + * + * async function fn() { + * return 'hello world'; + * } + * const callbackFunction = callbackify(fn); + * + * callbackFunction((err, ret) => { + * if (err) throw err; + * console.log(ret); + * }); + * ``` + * + * Will print: + * + * ```text + * hello world + * ``` + * + * The callback is executed asynchronously, and will have a limited stack trace. + * If the callback throws, the process will emit an `'uncaughtException'` + * event, and if not handled will exit. + * + * Since `null` has a special meaning as the first argument to a callback, if a + * wrapped function rejects a `Promise` with a falsy value as a reason, the value + * is wrapped in an `Error` with the original value stored in a field named + * `reason`. + * + * ```js + * function fn() { + * return Promise.reject(null); + * } + * const callbackFunction = util.callbackify(fn); + * + * callbackFunction((err, ret) => { + * // When the Promise was rejected with `null` it is wrapped with an Error and + * // the original value is stored in `reason`. + * err && Object.hasOwn(err, 'reason') && err.reason === null; // true + * }); + * ``` + * @since v8.2.0 + * @param fn An `async` function + * @return a callback style function + */ + export function callbackify(fn: () => Promise): (callback: (err: NodeJS.ErrnoException) => void) => void; + export function callbackify( + fn: () => Promise, + ): (callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void; + export function callbackify( + fn: (arg1: T1) => Promise, + ): (arg1: T1, callback: (err: NodeJS.ErrnoException) => void) => void; + export function callbackify( + fn: (arg1: T1) => Promise, + ): (arg1: T1, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2) => Promise, + ): (arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException) => void) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2) => Promise, + ): (arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3) => Promise, + ): (arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException) => void) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3) => Promise, + ): (arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: NodeJS.ErrnoException) => void) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise, + ): ( + arg1: T1, + arg2: T2, + arg3: T3, + arg4: T4, + callback: (err: NodeJS.ErrnoException | null, result: TResult) => void, + ) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: NodeJS.ErrnoException) => void) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise, + ): ( + arg1: T1, + arg2: T2, + arg3: T3, + arg4: T4, + arg5: T5, + callback: (err: NodeJS.ErrnoException | null, result: TResult) => void, + ) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise, + ): ( + arg1: T1, + arg2: T2, + arg3: T3, + arg4: T4, + arg5: T5, + arg6: T6, + callback: (err: NodeJS.ErrnoException) => void, + ) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise, + ): ( + arg1: T1, + arg2: T2, + arg3: T3, + arg4: T4, + arg5: T5, + arg6: T6, + callback: (err: NodeJS.ErrnoException | null, result: TResult) => void, + ) => void; + export interface CustomPromisifyLegacy extends Function { + __promisify__: TCustom; + } + export interface CustomPromisifySymbol extends Function { + [promisify.custom]: TCustom; + } + export type CustomPromisify = + | CustomPromisifySymbol + | CustomPromisifyLegacy; + /** + * Takes a function following the common error-first callback style, i.e. taking + * an `(err, value) => ...` callback as the last argument, and returns a version + * that returns promises. + * + * ```js + * import { promisify } from 'node:util'; + * import { stat } from 'node:fs'; + * + * const promisifiedStat = promisify(stat); + * promisifiedStat('.').then((stats) => { + * // Do something with `stats` + * }).catch((error) => { + * // Handle the error. + * }); + * ``` + * + * Or, equivalently using `async function`s: + * + * ```js + * import { promisify } from 'node:util'; + * import { stat } from 'node:fs'; + * + * const promisifiedStat = promisify(stat); + * + * async function callStat() { + * const stats = await promisifiedStat('.'); + * console.log(`This directory is owned by ${stats.uid}`); + * } + * + * callStat(); + * ``` + * + * If there is an `original[util.promisify.custom]` property present, `promisify` + * will return its value, see [Custom promisified functions](https://nodejs.org/docs/latest-v24.x/api/util.html#custom-promisified-functions). + * + * `promisify()` assumes that `original` is a function taking a callback as its + * final argument in all cases. If `original` is not a function, `promisify()` + * will throw an error. If `original` is a function but its last argument is not + * an error-first callback, it will still be passed an error-first + * callback as its last argument. + * + * Using `promisify()` on class methods or other methods that use `this` may not + * work as expected unless handled specially: + * + * ```js + * import { promisify } from 'node:util'; + * + * class Foo { + * constructor() { + * this.a = 42; + * } + * + * bar(callback) { + * callback(null, this.a); + * } + * } + * + * const foo = new Foo(); + * + * const naiveBar = promisify(foo.bar); + * // TypeError: Cannot read properties of undefined (reading 'a') + * // naiveBar().then(a => console.log(a)); + * + * naiveBar.call(foo).then((a) => console.log(a)); // '42' + * + * const bindBar = naiveBar.bind(foo); + * bindBar().then((a) => console.log(a)); // '42' + * ``` + * @since v8.0.0 + */ + export function promisify(fn: CustomPromisify): TCustom; + export function promisify( + fn: (callback: (err: any, result: TResult) => void) => void, + ): () => Promise; + export function promisify(fn: (callback: (err?: any) => void) => void): () => Promise; + export function promisify( + fn: (arg1: T1, callback: (err: any, result: TResult) => void) => void, + ): (arg1: T1) => Promise; + export function promisify(fn: (arg1: T1, callback: (err?: any) => void) => void): (arg1: T1) => Promise; + export function promisify( + fn: (arg1: T1, arg2: T2, callback: (err: any, result: TResult) => void) => void, + ): (arg1: T1, arg2: T2) => Promise; + export function promisify( + fn: (arg1: T1, arg2: T2, callback: (err?: any) => void) => void, + ): (arg1: T1, arg2: T2) => Promise; + export function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, callback: (err: any, result: TResult) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3) => Promise; + export function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, callback: (err?: any) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3) => Promise; + export function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: any, result: TResult) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise; + export function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err?: any) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise; + export function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: any, result: TResult) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise; + export function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err?: any) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise; + export function promisify(fn: Function): Function; + export namespace promisify { + /** + * That can be used to declare custom promisified variants of functions. + */ + const custom: unique symbol; + } + /** + * Stability: 1.1 - Active development + * Given an example `.env` file: + * + * ```js + * import { parseEnv } from 'node:util'; + * + * parseEnv('HELLO=world\nHELLO=oh my\n'); + * // Returns: { HELLO: 'oh my' } + * ``` + * @param content The raw contents of a `.env` file. + * @since v20.12.0 + */ + export function parseEnv(content: string): NodeJS.Dict; + // https://nodejs.org/docs/latest/api/util.html#foreground-colors + type ForegroundColors = + | "black" + | "blackBright" + | "blue" + | "blueBright" + | "cyan" + | "cyanBright" + | "gray" + | "green" + | "greenBright" + | "grey" + | "magenta" + | "magentaBright" + | "red" + | "redBright" + | "white" + | "whiteBright" + | "yellow" + | "yellowBright"; + // https://nodejs.org/docs/latest/api/util.html#background-colors + type BackgroundColors = + | "bgBlack" + | "bgBlackBright" + | "bgBlue" + | "bgBlueBright" + | "bgCyan" + | "bgCyanBright" + | "bgGray" + | "bgGreen" + | "bgGreenBright" + | "bgGrey" + | "bgMagenta" + | "bgMagentaBright" + | "bgRed" + | "bgRedBright" + | "bgWhite" + | "bgWhiteBright" + | "bgYellow" + | "bgYellowBright"; + // https://nodejs.org/docs/latest/api/util.html#modifiers + type Modifiers = + | "blink" + | "bold" + | "dim" + | "doubleunderline" + | "framed" + | "hidden" + | "inverse" + | "italic" + | "none" + | "overlined" + | "reset" + | "strikethrough" + | "underline"; + export interface StyleTextOptions { + /** + * When true, `stream` is checked to see if it can handle colors. + * @default true + */ + validateStream?: boolean | undefined; + /** + * A stream that will be validated if it can be colored. + * @default process.stdout + */ + stream?: NodeJS.WritableStream | undefined; + } + /** + * This function returns a formatted text considering the `format` passed + * for printing in a terminal. It is aware of the terminal's capabilities + * and acts according to the configuration set via `NO_COLOR`, + * `NODE_DISABLE_COLORS` and `FORCE_COLOR` environment variables. + * + * ```js + * import { styleText } from 'node:util'; + * import { stderr } from 'node:process'; + * + * const successMessage = styleText('green', 'Success!'); + * console.log(successMessage); + * + * const errorMessage = styleText( + * 'red', + * 'Error! Error!', + * // Validate if process.stderr has TTY + * { stream: stderr }, + * ); + * console.error(errorMessage); + * ``` + * + * `util.inspect.colors` also provides text formats such as `italic`, and + * `underline` and you can combine both: + * + * ```js + * console.log( + * util.styleText(['underline', 'italic'], 'My italic underlined message'), + * ); + * ``` + * + * When passing an array of formats, the order of the format applied + * is left to right so the following style might overwrite the previous one. + * + * ```js + * console.log( + * util.styleText(['red', 'green'], 'text'), // green + * ); + * ``` + * + * The special format value `none` applies no additional styling to the text. + * + * The full list of formats can be found in [modifiers](https://nodejs.org/docs/latest-v24.x/api/util.html#modifiers). + * @param format A text format or an Array of text formats defined in `util.inspect.colors`. + * @param text The text to to be formatted. + * @since v20.12.0 + */ + export function styleText( + format: + | ForegroundColors + | BackgroundColors + | Modifiers + | Array, + text: string, + options?: StyleTextOptions, + ): string; + /** + * An implementation of the [WHATWG Encoding Standard](https://encoding.spec.whatwg.org/) `TextDecoder` API. + * + * ```js + * const decoder = new TextDecoder(); + * const u8arr = new Uint8Array([72, 101, 108, 108, 111]); + * console.log(decoder.decode(u8arr)); // Hello + * ``` + * @since v8.3.0 + */ + export class TextDecoder { + /** + * The encoding supported by the `TextDecoder` instance. + */ + readonly encoding: string; + /** + * The value will be `true` if decoding errors result in a `TypeError` being + * thrown. + */ + readonly fatal: boolean; + /** + * The value will be `true` if the decoding result will include the byte order + * mark. + */ + readonly ignoreBOM: boolean; + constructor( + encoding?: string, + options?: { + fatal?: boolean | undefined; + ignoreBOM?: boolean | undefined; + }, + ); + /** + * Decodes the `input` and returns a string. If `options.stream` is `true`, any + * incomplete byte sequences occurring at the end of the `input` are buffered + * internally and emitted after the next call to `textDecoder.decode()`. + * + * If `textDecoder.fatal` is `true`, decoding errors that occur will result in a `TypeError` being thrown. + * @param input An `ArrayBuffer`, `DataView`, or `TypedArray` instance containing the encoded data. + */ + decode( + input?: NodeJS.ArrayBufferView | ArrayBuffer | null, + options?: { + stream?: boolean | undefined; + }, + ): string; + } + export interface EncodeIntoResult { + /** + * The read Unicode code units of input. + */ + read: number; + /** + * The written UTF-8 bytes of output. + */ + written: number; + } + export { types }; + + //// TextEncoder/Decoder + /** + * An implementation of the [WHATWG Encoding Standard](https://encoding.spec.whatwg.org/) `TextEncoder` API. All + * instances of `TextEncoder` only support UTF-8 encoding. + * + * ```js + * const encoder = new TextEncoder(); + * const uint8array = encoder.encode('this is some data'); + * ``` + * + * The `TextEncoder` class is also available on the global object. + * @since v8.3.0 + */ + export class TextEncoder { + /** + * The encoding supported by the `TextEncoder` instance. Always set to `'utf-8'`. + */ + readonly encoding: string; + /** + * UTF-8 encodes the `input` string and returns a `Uint8Array` containing the + * encoded bytes. + * @param [input='an empty string'] The text to encode. + */ + encode(input?: string): NodeJS.NonSharedUint8Array; + /** + * UTF-8 encodes the `src` string to the `dest` Uint8Array and returns an object + * containing the read Unicode code units and written UTF-8 bytes. + * + * ```js + * const encoder = new TextEncoder(); + * const src = 'this is some data'; + * const dest = new Uint8Array(10); + * const { read, written } = encoder.encodeInto(src, dest); + * ``` + * @param src The text to encode. + * @param dest The array to hold the encode result. + */ + encodeInto(src: string, dest: Uint8Array): EncodeIntoResult; + } + import { TextDecoder as _TextDecoder, TextEncoder as _TextEncoder } from "util"; + global { + /** + * `TextDecoder` class is a global reference for `import { TextDecoder } from 'node:util'` + * https://nodejs.org/api/globals.html#textdecoder + * @since v11.0.0 + */ + var TextDecoder: typeof globalThis extends { + onmessage: any; + TextDecoder: infer TextDecoder; + } ? TextDecoder + : typeof _TextDecoder; + /** + * `TextEncoder` class is a global reference for `import { TextEncoder } from 'node:util'` + * https://nodejs.org/api/globals.html#textencoder + * @since v11.0.0 + */ + var TextEncoder: typeof globalThis extends { + onmessage: any; + TextEncoder: infer TextEncoder; + } ? TextEncoder + : typeof _TextEncoder; + } + + //// parseArgs + /** + * Provides a higher level API for command-line argument parsing than interacting + * with `process.argv` directly. Takes a specification for the expected arguments + * and returns a structured object with the parsed options and positionals. + * + * ```js + * import { parseArgs } from 'node:util'; + * const args = ['-f', '--bar', 'b']; + * const options = { + * foo: { + * type: 'boolean', + * short: 'f', + * }, + * bar: { + * type: 'string', + * }, + * }; + * const { + * values, + * positionals, + * } = parseArgs({ args, options }); + * console.log(values, positionals); + * // Prints: [Object: null prototype] { foo: true, bar: 'b' } [] + * ``` + * @since v18.3.0, v16.17.0 + * @param config Used to provide arguments for parsing and to configure the parser. `config` supports the following properties: + * @return The parsed command line arguments: + */ + export function parseArgs(config?: T): ParsedResults; + + /** + * Type of argument used in {@link parseArgs}. + */ + export type ParseArgsOptionsType = "boolean" | "string"; + + export interface ParseArgsOptionDescriptor { + /** + * Type of argument. + */ + type: ParseArgsOptionsType; + /** + * Whether this option can be provided multiple times. + * If `true`, all values will be collected in an array. + * If `false`, values for the option are last-wins. + * @default false. + */ + multiple?: boolean | undefined; + /** + * A single character alias for the option. + */ + short?: string | undefined; + /** + * The value to assign to + * the option if it does not appear in the arguments to be parsed. The value + * must match the type specified by the `type` property. If `multiple` is + * `true`, it must be an array. No default value is applied when the option + * does appear in the arguments to be parsed, even if the provided value + * is falsy. + * @since v18.11.0 + */ + default?: string | boolean | string[] | boolean[] | undefined; + } + export interface ParseArgsOptionsConfig { + [longOption: string]: ParseArgsOptionDescriptor; + } + export interface ParseArgsConfig { + /** + * Array of argument strings. + */ + args?: readonly string[] | undefined; + /** + * Used to describe arguments known to the parser. + */ + options?: ParseArgsOptionsConfig | undefined; + /** + * Should an error be thrown when unknown arguments are encountered, + * or when arguments are passed that do not match the `type` configured in `options`. + * @default true + */ + strict?: boolean | undefined; + /** + * Whether this command accepts positional arguments. + */ + allowPositionals?: boolean | undefined; + /** + * If `true`, allows explicitly setting boolean options to `false` by prefixing the option name with `--no-`. + * @default false + * @since v22.4.0 + */ + allowNegative?: boolean | undefined; + /** + * Return the parsed tokens. This is useful for extending the built-in behavior, + * from adding additional checks through to reprocessing the tokens in different ways. + * @default false + */ + tokens?: boolean | undefined; + } + /* + IfDefaultsTrue and IfDefaultsFalse are helpers to handle default values for missing boolean properties. + TypeScript does not have exact types for objects: https://github.com/microsoft/TypeScript/issues/12936 + This means it is impossible to distinguish between "field X is definitely not present" and "field X may or may not be present". + But we expect users to generally provide their config inline or `as const`, which means TS will always know whether a given field is present. + So this helper treats "not definitely present" (i.e., not `extends boolean`) as being "definitely not present", i.e. it should have its default value. + This is technically incorrect but is a much nicer UX for the common case. + The IfDefaultsTrue version is for things which default to true; the IfDefaultsFalse version is for things which default to false. + */ + type IfDefaultsTrue = T extends true ? IfTrue + : T extends false ? IfFalse + : IfTrue; + + // we put the `extends false` condition first here because `undefined` compares like `any` when `strictNullChecks: false` + type IfDefaultsFalse = T extends false ? IfFalse + : T extends true ? IfTrue + : IfFalse; + + type ExtractOptionValue = IfDefaultsTrue< + T["strict"], + O["type"] extends "string" ? string : O["type"] extends "boolean" ? boolean : string | boolean, + string | boolean + >; + + type ApplyOptionalModifiers> = ( + & { -readonly [LongOption in keyof O]?: V[LongOption] } + & { [LongOption in keyof O as O[LongOption]["default"] extends {} ? LongOption : never]: V[LongOption] } + ) extends infer P ? { [K in keyof P]: P[K] } : never; // resolve intersection to object + + type ParsedValues = + & IfDefaultsTrue + & (T["options"] extends ParseArgsOptionsConfig ? ApplyOptionalModifiers< + T["options"], + { + [LongOption in keyof T["options"]]: IfDefaultsFalse< + T["options"][LongOption]["multiple"], + Array>, + ExtractOptionValue + >; + } + > + : {}); + + type ParsedPositionals = IfDefaultsTrue< + T["strict"], + IfDefaultsFalse, + IfDefaultsTrue + >; + + type PreciseTokenForOptions< + K extends string, + O extends ParseArgsOptionDescriptor, + > = O["type"] extends "string" ? { + kind: "option"; + index: number; + name: K; + rawName: string; + value: string; + inlineValue: boolean; + } + : O["type"] extends "boolean" ? { + kind: "option"; + index: number; + name: K; + rawName: string; + value: undefined; + inlineValue: undefined; + } + : OptionToken & { name: K }; + + type TokenForOptions< + T extends ParseArgsConfig, + K extends keyof T["options"] = keyof T["options"], + > = K extends unknown + ? T["options"] extends ParseArgsOptionsConfig ? PreciseTokenForOptions + : OptionToken + : never; + + type ParsedOptionToken = IfDefaultsTrue, OptionToken>; + + type ParsedPositionalToken = IfDefaultsTrue< + T["strict"], + IfDefaultsFalse, + IfDefaultsTrue + >; + + type ParsedTokens = Array< + ParsedOptionToken | ParsedPositionalToken | { kind: "option-terminator"; index: number } + >; + + type PreciseParsedResults = IfDefaultsFalse< + T["tokens"], + { + values: ParsedValues; + positionals: ParsedPositionals; + tokens: ParsedTokens; + }, + { + values: ParsedValues; + positionals: ParsedPositionals; + } + >; + + type OptionToken = + | { kind: "option"; index: number; name: string; rawName: string; value: string; inlineValue: boolean } + | { + kind: "option"; + index: number; + name: string; + rawName: string; + value: undefined; + inlineValue: undefined; + }; + + type Token = + | OptionToken + | { kind: "positional"; index: number; value: string } + | { kind: "option-terminator"; index: number }; + + // If ParseArgsConfig extends T, then the user passed config constructed elsewhere. + // So we can't rely on the `"not definitely present" implies "definitely not present"` assumption mentioned above. + type ParsedResults = ParseArgsConfig extends T ? { + values: { + [longOption: string]: undefined | string | boolean | Array; + }; + positionals: string[]; + tokens?: Token[]; + } + : PreciseParsedResults; + + /** + * An implementation of [the MIMEType class](https://bmeck.github.io/node-proposal-mime-api/). + * + * In accordance with browser conventions, all properties of `MIMEType` objects + * are implemented as getters and setters on the class prototype, rather than as + * data properties on the object itself. + * + * A MIME string is a structured string containing multiple meaningful + * components. When parsed, a `MIMEType` object is returned containing + * properties for each of these components. + * @since v19.1.0, v18.13.0 + */ + export class MIMEType { + /** + * Creates a new MIMEType object by parsing the input. + * + * A `TypeError` will be thrown if the `input` is not a valid MIME. + * Note that an effort will be made to coerce the given values into strings. + * @param input The input MIME to parse. + */ + constructor(input: string | { toString: () => string }); + + /** + * Gets and sets the type portion of the MIME. + * + * ```js + * import { MIMEType } from 'node:util'; + * + * const myMIME = new MIMEType('text/javascript'); + * console.log(myMIME.type); + * // Prints: text + * myMIME.type = 'application'; + * console.log(myMIME.type); + * // Prints: application + * console.log(String(myMIME)); + * // Prints: application/javascript + * ``` + */ + type: string; + /** + * Gets and sets the subtype portion of the MIME. + * + * ```js + * import { MIMEType } from 'node:util'; + * + * const myMIME = new MIMEType('text/ecmascript'); + * console.log(myMIME.subtype); + * // Prints: ecmascript + * myMIME.subtype = 'javascript'; + * console.log(myMIME.subtype); + * // Prints: javascript + * console.log(String(myMIME)); + * // Prints: text/javascript + * ``` + */ + subtype: string; + /** + * Gets the essence of the MIME. This property is read only. + * Use `mime.type` or `mime.subtype` to alter the MIME. + * + * ```js + * import { MIMEType } from 'node:util'; + * + * const myMIME = new MIMEType('text/javascript;key=value'); + * console.log(myMIME.essence); + * // Prints: text/javascript + * myMIME.type = 'application'; + * console.log(myMIME.essence); + * // Prints: application/javascript + * console.log(String(myMIME)); + * // Prints: application/javascript;key=value + * ``` + */ + readonly essence: string; + /** + * Gets the `MIMEParams` object representing the + * parameters of the MIME. This property is read-only. See `MIMEParams` documentation for details. + */ + readonly params: MIMEParams; + /** + * The `toString()` method on the `MIMEType` object returns the serialized MIME. + * + * Because of the need for standard compliance, this method does not allow users + * to customize the serialization process of the MIME. + */ + toString(): string; + } + /** + * The `MIMEParams` API provides read and write access to the parameters of a `MIMEType`. + * @since v19.1.0, v18.13.0 + */ + export class MIMEParams { + /** + * Remove all name-value pairs whose name is `name`. + */ + delete(name: string): void; + /** + * Returns an iterator over each of the name-value pairs in the parameters. + * Each item of the iterator is a JavaScript `Array`. The first item of the array + * is the `name`, the second item of the array is the `value`. + */ + entries(): NodeJS.Iterator<[name: string, value: string]>; + /** + * Returns the value of the first name-value pair whose name is `name`. If there + * are no such pairs, `null` is returned. + * @return or `null` if there is no name-value pair with the given `name`. + */ + get(name: string): string | null; + /** + * Returns `true` if there is at least one name-value pair whose name is `name`. + */ + has(name: string): boolean; + /** + * Returns an iterator over the names of each name-value pair. + * + * ```js + * import { MIMEType } from 'node:util'; + * + * const { params } = new MIMEType('text/plain;foo=0;bar=1'); + * for (const name of params.keys()) { + * console.log(name); + * } + * // Prints: + * // foo + * // bar + * ``` + */ + keys(): NodeJS.Iterator; + /** + * Sets the value in the `MIMEParams` object associated with `name` to `value`. If there are any pre-existing name-value pairs whose names are `name`, + * set the first such pair's value to `value`. + * + * ```js + * import { MIMEType } from 'node:util'; + * + * const { params } = new MIMEType('text/plain;foo=0;bar=1'); + * params.set('foo', 'def'); + * params.set('baz', 'xyz'); + * console.log(params.toString()); + * // Prints: foo=def;bar=1;baz=xyz + * ``` + */ + set(name: string, value: string): void; + /** + * Returns an iterator over the values of each name-value pair. + */ + values(): NodeJS.Iterator; + /** + * Returns an iterator over each of the name-value pairs in the parameters. + */ + [Symbol.iterator](): NodeJS.Iterator<[name: string, value: string]>; + } +} +declare module "util/types" { + import { KeyObject, webcrypto } from "node:crypto"; + /** + * Returns `true` if the value is a built-in [`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) or + * [`SharedArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer) instance. + * + * See also `util.types.isArrayBuffer()` and `util.types.isSharedArrayBuffer()`. + * + * ```js + * util.types.isAnyArrayBuffer(new ArrayBuffer()); // Returns true + * util.types.isAnyArrayBuffer(new SharedArrayBuffer()); // Returns true + * ``` + * @since v10.0.0 + */ + function isAnyArrayBuffer(object: unknown): object is ArrayBufferLike; + /** + * Returns `true` if the value is an `arguments` object. + * + * ```js + * function foo() { + * util.types.isArgumentsObject(arguments); // Returns true + * } + * ``` + * @since v10.0.0 + */ + function isArgumentsObject(object: unknown): object is IArguments; + /** + * Returns `true` if the value is a built-in [`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) instance. + * This does _not_ include [`SharedArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer) instances. Usually, it is + * desirable to test for both; See `util.types.isAnyArrayBuffer()` for that. + * + * ```js + * util.types.isArrayBuffer(new ArrayBuffer()); // Returns true + * util.types.isArrayBuffer(new SharedArrayBuffer()); // Returns false + * ``` + * @since v10.0.0 + */ + function isArrayBuffer(object: unknown): object is ArrayBuffer; + /** + * Returns `true` if the value is an instance of one of the [`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) views, such as typed + * array objects or [`DataView`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView). Equivalent to + * [`ArrayBuffer.isView()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView). + * + * ```js + * util.types.isArrayBufferView(new Int8Array()); // true + * util.types.isArrayBufferView(Buffer.from('hello world')); // true + * util.types.isArrayBufferView(new DataView(new ArrayBuffer(16))); // true + * util.types.isArrayBufferView(new ArrayBuffer()); // false + * ``` + * @since v10.0.0 + */ + function isArrayBufferView(object: unknown): object is NodeJS.ArrayBufferView; + /** + * Returns `true` if the value is an [async function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function). + * This only reports back what the JavaScript engine is seeing; + * in particular, the return value may not match the original source code if + * a transpilation tool was used. + * + * ```js + * util.types.isAsyncFunction(function foo() {}); // Returns false + * util.types.isAsyncFunction(async function foo() {}); // Returns true + * ``` + * @since v10.0.0 + */ + function isAsyncFunction(object: unknown): boolean; + /** + * Returns `true` if the value is a `BigInt64Array` instance. + * + * ```js + * util.types.isBigInt64Array(new BigInt64Array()); // Returns true + * util.types.isBigInt64Array(new BigUint64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isBigInt64Array(value: unknown): value is BigInt64Array; + /** + * Returns `true` if the value is a BigInt object, e.g. created + * by `Object(BigInt(123))`. + * + * ```js + * util.types.isBigIntObject(Object(BigInt(123))); // Returns true + * util.types.isBigIntObject(BigInt(123)); // Returns false + * util.types.isBigIntObject(123); // Returns false + * ``` + * @since v10.4.0 + */ + function isBigIntObject(object: unknown): object is BigInt; + /** + * Returns `true` if the value is a `BigUint64Array` instance. + * + * ```js + * util.types.isBigUint64Array(new BigInt64Array()); // Returns false + * util.types.isBigUint64Array(new BigUint64Array()); // Returns true + * ``` + * @since v10.0.0 + */ + function isBigUint64Array(value: unknown): value is BigUint64Array; + /** + * Returns `true` if the value is a boolean object, e.g. created + * by `new Boolean()`. + * + * ```js + * util.types.isBooleanObject(false); // Returns false + * util.types.isBooleanObject(true); // Returns false + * util.types.isBooleanObject(new Boolean(false)); // Returns true + * util.types.isBooleanObject(new Boolean(true)); // Returns true + * util.types.isBooleanObject(Boolean(false)); // Returns false + * util.types.isBooleanObject(Boolean(true)); // Returns false + * ``` + * @since v10.0.0 + */ + function isBooleanObject(object: unknown): object is Boolean; + /** + * Returns `true` if the value is any boxed primitive object, e.g. created + * by `new Boolean()`, `new String()` or `Object(Symbol())`. + * + * For example: + * + * ```js + * util.types.isBoxedPrimitive(false); // Returns false + * util.types.isBoxedPrimitive(new Boolean(false)); // Returns true + * util.types.isBoxedPrimitive(Symbol('foo')); // Returns false + * util.types.isBoxedPrimitive(Object(Symbol('foo'))); // Returns true + * util.types.isBoxedPrimitive(Object(BigInt(5))); // Returns true + * ``` + * @since v10.11.0 + */ + function isBoxedPrimitive(object: unknown): object is String | Number | BigInt | Boolean | Symbol; + /** + * Returns `true` if the value is a built-in [`DataView`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView) instance. + * + * ```js + * const ab = new ArrayBuffer(20); + * util.types.isDataView(new DataView(ab)); // Returns true + * util.types.isDataView(new Float64Array()); // Returns false + * ``` + * + * See also [`ArrayBuffer.isView()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView). + * @since v10.0.0 + */ + function isDataView(object: unknown): object is DataView; + /** + * Returns `true` if the value is a built-in [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) instance. + * + * ```js + * util.types.isDate(new Date()); // Returns true + * ``` + * @since v10.0.0 + */ + function isDate(object: unknown): object is Date; + /** + * Returns `true` if the value is a native `External` value. + * + * A native `External` value is a special type of object that contains a + * raw C++ pointer (`void*`) for access from native code, and has no other + * properties. Such objects are created either by Node.js internals or native + * addons. In JavaScript, they are + * [frozen](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze) objects with a + * `null` prototype. + * + * ```c + * #include + * #include + * napi_value result; + * static napi_value MyNapi(napi_env env, napi_callback_info info) { + * int* raw = (int*) malloc(1024); + * napi_status status = napi_create_external(env, (void*) raw, NULL, NULL, &result); + * if (status != napi_ok) { + * napi_throw_error(env, NULL, "napi_create_external failed"); + * return NULL; + * } + * return result; + * } + * ... + * DECLARE_NAPI_PROPERTY("myNapi", MyNapi) + * ... + * ``` + * + * ```js + * import native from 'napi_addon.node'; + * import { types } from 'node:util'; + * + * const data = native.myNapi(); + * types.isExternal(data); // returns true + * types.isExternal(0); // returns false + * types.isExternal(new String('foo')); // returns false + * ``` + * + * For further information on `napi_create_external`, refer to + * [`napi_create_external()`](https://nodejs.org/docs/latest-v24.x/api/n-api.html#napi_create_external). + * @since v10.0.0 + */ + function isExternal(object: unknown): boolean; + /** + * Returns `true` if the value is a built-in [`Float16Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float16Array) instance. + * + * ```js + * util.types.isFloat16Array(new ArrayBuffer()); // Returns false + * util.types.isFloat16Array(new Float16Array()); // Returns true + * util.types.isFloat16Array(new Float32Array()); // Returns false + * ``` + * @since v24.0.0 + */ + function isFloat16Array(object: unknown): object is Float16Array; + /** + * Returns `true` if the value is a built-in [`Float32Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array) instance. + * + * ```js + * util.types.isFloat32Array(new ArrayBuffer()); // Returns false + * util.types.isFloat32Array(new Float32Array()); // Returns true + * util.types.isFloat32Array(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isFloat32Array(object: unknown): object is Float32Array; + /** + * Returns `true` if the value is a built-in [`Float64Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float64Array) instance. + * + * ```js + * util.types.isFloat64Array(new ArrayBuffer()); // Returns false + * util.types.isFloat64Array(new Uint8Array()); // Returns false + * util.types.isFloat64Array(new Float64Array()); // Returns true + * ``` + * @since v10.0.0 + */ + function isFloat64Array(object: unknown): object is Float64Array; + /** + * Returns `true` if the value is a generator function. + * This only reports back what the JavaScript engine is seeing; + * in particular, the return value may not match the original source code if + * a transpilation tool was used. + * + * ```js + * util.types.isGeneratorFunction(function foo() {}); // Returns false + * util.types.isGeneratorFunction(function* foo() {}); // Returns true + * ``` + * @since v10.0.0 + */ + function isGeneratorFunction(object: unknown): object is GeneratorFunction; + /** + * Returns `true` if the value is a generator object as returned from a + * built-in generator function. + * This only reports back what the JavaScript engine is seeing; + * in particular, the return value may not match the original source code if + * a transpilation tool was used. + * + * ```js + * function* foo() {} + * const generator = foo(); + * util.types.isGeneratorObject(generator); // Returns true + * ``` + * @since v10.0.0 + */ + function isGeneratorObject(object: unknown): object is Generator; + /** + * Returns `true` if the value is a built-in [`Int8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int8Array) instance. + * + * ```js + * util.types.isInt8Array(new ArrayBuffer()); // Returns false + * util.types.isInt8Array(new Int8Array()); // Returns true + * util.types.isInt8Array(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isInt8Array(object: unknown): object is Int8Array; + /** + * Returns `true` if the value is a built-in [`Int16Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int16Array) instance. + * + * ```js + * util.types.isInt16Array(new ArrayBuffer()); // Returns false + * util.types.isInt16Array(new Int16Array()); // Returns true + * util.types.isInt16Array(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isInt16Array(object: unknown): object is Int16Array; + /** + * Returns `true` if the value is a built-in [`Int32Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int32Array) instance. + * + * ```js + * util.types.isInt32Array(new ArrayBuffer()); // Returns false + * util.types.isInt32Array(new Int32Array()); // Returns true + * util.types.isInt32Array(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isInt32Array(object: unknown): object is Int32Array; + /** + * Returns `true` if the value is a built-in [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) instance. + * + * ```js + * util.types.isMap(new Map()); // Returns true + * ``` + * @since v10.0.0 + */ + function isMap( + object: T | {}, + ): object is T extends ReadonlyMap ? (unknown extends T ? never : ReadonlyMap) + : Map; + /** + * Returns `true` if the value is an iterator returned for a built-in [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) instance. + * + * ```js + * const map = new Map(); + * util.types.isMapIterator(map.keys()); // Returns true + * util.types.isMapIterator(map.values()); // Returns true + * util.types.isMapIterator(map.entries()); // Returns true + * util.types.isMapIterator(map[Symbol.iterator]()); // Returns true + * ``` + * @since v10.0.0 + */ + function isMapIterator(object: unknown): boolean; + /** + * Returns `true` if the value is an instance of a [Module Namespace Object](https://tc39.github.io/ecma262/#sec-module-namespace-exotic-objects). + * + * ```js + * import * as ns from './a.js'; + * + * util.types.isModuleNamespaceObject(ns); // Returns true + * ``` + * @since v10.0.0 + */ + function isModuleNamespaceObject(value: unknown): boolean; + /** + * Returns `true` if the value was returned by the constructor of a + * [built-in `Error` type](https://tc39.es/ecma262/#sec-error-objects). + * + * ```js + * console.log(util.types.isNativeError(new Error())); // true + * console.log(util.types.isNativeError(new TypeError())); // true + * console.log(util.types.isNativeError(new RangeError())); // true + * ``` + * + * Subclasses of the native error types are also native errors: + * + * ```js + * class MyError extends Error {} + * console.log(util.types.isNativeError(new MyError())); // true + * ``` + * + * A value being `instanceof` a native error class is not equivalent to `isNativeError()` + * returning `true` for that value. `isNativeError()` returns `true` for errors + * which come from a different [realm](https://tc39.es/ecma262/#realm) while `instanceof Error` returns `false` + * for these errors: + * + * ```js + * import { createContext, runInContext } from 'node:vm'; + * import { types } from 'node:util'; + * + * const context = createContext({}); + * const myError = runInContext('new Error()', context); + * console.log(types.isNativeError(myError)); // true + * console.log(myError instanceof Error); // false + * ``` + * + * Conversely, `isNativeError()` returns `false` for all objects which were not + * returned by the constructor of a native error. That includes values + * which are `instanceof` native errors: + * + * ```js + * const myError = { __proto__: Error.prototype }; + * console.log(util.types.isNativeError(myError)); // false + * console.log(myError instanceof Error); // true + * ``` + * @since v10.0.0 + * @deprecated The `util.types.isNativeError` API is deprecated. Please use `Error.isError` instead. + */ + function isNativeError(object: unknown): object is Error; + /** + * Returns `true` if the value is a number object, e.g. created + * by `new Number()`. + * + * ```js + * util.types.isNumberObject(0); // Returns false + * util.types.isNumberObject(new Number(0)); // Returns true + * ``` + * @since v10.0.0 + */ + function isNumberObject(object: unknown): object is Number; + /** + * Returns `true` if the value is a built-in [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise). + * + * ```js + * util.types.isPromise(Promise.resolve(42)); // Returns true + * ``` + * @since v10.0.0 + */ + function isPromise(object: unknown): object is Promise; + /** + * Returns `true` if the value is a [`Proxy`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) instance. + * + * ```js + * const target = {}; + * const proxy = new Proxy(target, {}); + * util.types.isProxy(target); // Returns false + * util.types.isProxy(proxy); // Returns true + * ``` + * @since v10.0.0 + */ + function isProxy(object: unknown): boolean; + /** + * Returns `true` if the value is a regular expression object. + * + * ```js + * util.types.isRegExp(/abc/); // Returns true + * util.types.isRegExp(new RegExp('abc')); // Returns true + * ``` + * @since v10.0.0 + */ + function isRegExp(object: unknown): object is RegExp; + /** + * Returns `true` if the value is a built-in [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) instance. + * + * ```js + * util.types.isSet(new Set()); // Returns true + * ``` + * @since v10.0.0 + */ + function isSet( + object: T | {}, + ): object is T extends ReadonlySet ? (unknown extends T ? never : ReadonlySet) : Set; + /** + * Returns `true` if the value is an iterator returned for a built-in [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) instance. + * + * ```js + * const set = new Set(); + * util.types.isSetIterator(set.keys()); // Returns true + * util.types.isSetIterator(set.values()); // Returns true + * util.types.isSetIterator(set.entries()); // Returns true + * util.types.isSetIterator(set[Symbol.iterator]()); // Returns true + * ``` + * @since v10.0.0 + */ + function isSetIterator(object: unknown): boolean; + /** + * Returns `true` if the value is a built-in [`SharedArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer) instance. + * This does _not_ include [`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) instances. Usually, it is + * desirable to test for both; See `util.types.isAnyArrayBuffer()` for that. + * + * ```js + * util.types.isSharedArrayBuffer(new ArrayBuffer()); // Returns false + * util.types.isSharedArrayBuffer(new SharedArrayBuffer()); // Returns true + * ``` + * @since v10.0.0 + */ + function isSharedArrayBuffer(object: unknown): object is SharedArrayBuffer; + /** + * Returns `true` if the value is a string object, e.g. created + * by `new String()`. + * + * ```js + * util.types.isStringObject('foo'); // Returns false + * util.types.isStringObject(new String('foo')); // Returns true + * ``` + * @since v10.0.0 + */ + function isStringObject(object: unknown): object is String; + /** + * Returns `true` if the value is a symbol object, created + * by calling `Object()` on a `Symbol` primitive. + * + * ```js + * const symbol = Symbol('foo'); + * util.types.isSymbolObject(symbol); // Returns false + * util.types.isSymbolObject(Object(symbol)); // Returns true + * ``` + * @since v10.0.0 + */ + function isSymbolObject(object: unknown): object is Symbol; + /** + * Returns `true` if the value is a built-in [`TypedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray) instance. + * + * ```js + * util.types.isTypedArray(new ArrayBuffer()); // Returns false + * util.types.isTypedArray(new Uint8Array()); // Returns true + * util.types.isTypedArray(new Float64Array()); // Returns true + * ``` + * + * See also [`ArrayBuffer.isView()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView). + * @since v10.0.0 + */ + function isTypedArray(object: unknown): object is NodeJS.TypedArray; + /** + * Returns `true` if the value is a built-in [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) instance. + * + * ```js + * util.types.isUint8Array(new ArrayBuffer()); // Returns false + * util.types.isUint8Array(new Uint8Array()); // Returns true + * util.types.isUint8Array(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isUint8Array(object: unknown): object is Uint8Array; + /** + * Returns `true` if the value is a built-in [`Uint8ClampedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray) instance. + * + * ```js + * util.types.isUint8ClampedArray(new ArrayBuffer()); // Returns false + * util.types.isUint8ClampedArray(new Uint8ClampedArray()); // Returns true + * util.types.isUint8ClampedArray(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isUint8ClampedArray(object: unknown): object is Uint8ClampedArray; + /** + * Returns `true` if the value is a built-in [`Uint16Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint16Array) instance. + * + * ```js + * util.types.isUint16Array(new ArrayBuffer()); // Returns false + * util.types.isUint16Array(new Uint16Array()); // Returns true + * util.types.isUint16Array(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isUint16Array(object: unknown): object is Uint16Array; + /** + * Returns `true` if the value is a built-in [`Uint32Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array) instance. + * + * ```js + * util.types.isUint32Array(new ArrayBuffer()); // Returns false + * util.types.isUint32Array(new Uint32Array()); // Returns true + * util.types.isUint32Array(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isUint32Array(object: unknown): object is Uint32Array; + /** + * Returns `true` if the value is a built-in [`WeakMap`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap) instance. + * + * ```js + * util.types.isWeakMap(new WeakMap()); // Returns true + * ``` + * @since v10.0.0 + */ + function isWeakMap(object: unknown): object is WeakMap; + /** + * Returns `true` if the value is a built-in [`WeakSet`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet) instance. + * + * ```js + * util.types.isWeakSet(new WeakSet()); // Returns true + * ``` + * @since v10.0.0 + */ + function isWeakSet(object: unknown): object is WeakSet; + /** + * Returns `true` if `value` is a `KeyObject`, `false` otherwise. + * @since v16.2.0 + */ + function isKeyObject(object: unknown): object is KeyObject; + /** + * Returns `true` if `value` is a `CryptoKey`, `false` otherwise. + * @since v16.2.0 + */ + function isCryptoKey(object: unknown): object is webcrypto.CryptoKey; +} +declare module "node:util" { + export * from "util"; +} +declare module "node:util/types" { + export * from "util/types"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/v8.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/v8.d.ts new file mode 100644 index 00000000..d509ee13 --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/v8.d.ts @@ -0,0 +1,952 @@ +/** + * The `node:v8` module exposes APIs that are specific to the version of [V8](https://developers.google.com/v8/) built into the Node.js binary. It can be accessed using: + * + * ```js + * import v8 from 'node:v8'; + * ``` + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/v8.js) + */ +declare module "v8" { + import { NonSharedBuffer } from "node:buffer"; + import { Readable } from "node:stream"; + interface HeapSpaceInfo { + space_name: string; + space_size: number; + space_used_size: number; + space_available_size: number; + physical_space_size: number; + } + // ** Signifies if the --zap_code_space option is enabled or not. 1 == enabled, 0 == disabled. */ + type DoesZapCodeSpaceFlag = 0 | 1; + interface HeapInfo { + total_heap_size: number; + total_heap_size_executable: number; + total_physical_size: number; + total_available_size: number; + used_heap_size: number; + heap_size_limit: number; + malloced_memory: number; + peak_malloced_memory: number; + does_zap_garbage: DoesZapCodeSpaceFlag; + number_of_native_contexts: number; + number_of_detached_contexts: number; + total_global_handles_size: number; + used_global_handles_size: number; + external_memory: number; + } + interface HeapCodeStatistics { + code_and_metadata_size: number; + bytecode_and_metadata_size: number; + external_script_source_size: number; + } + interface HeapSnapshotOptions { + /** + * If true, expose internals in the heap snapshot. + * @default false + */ + exposeInternals?: boolean | undefined; + /** + * If true, expose numeric values in artificial fields. + * @default false + */ + exposeNumericValues?: boolean | undefined; + } + /** + * Returns an integer representing a version tag derived from the V8 version, + * command-line flags, and detected CPU features. This is useful for determining + * whether a `vm.Script` `cachedData` buffer is compatible with this instance + * of V8. + * + * ```js + * console.log(v8.cachedDataVersionTag()); // 3947234607 + * // The value returned by v8.cachedDataVersionTag() is derived from the V8 + * // version, command-line flags, and detected CPU features. Test that the value + * // does indeed update when flags are toggled. + * v8.setFlagsFromString('--allow_natives_syntax'); + * console.log(v8.cachedDataVersionTag()); // 183726201 + * ``` + * @since v8.0.0 + */ + function cachedDataVersionTag(): number; + /** + * Returns an object with the following properties: + * + * `does_zap_garbage` is a 0/1 boolean, which signifies whether the `--zap_code_space` option is enabled or not. This makes V8 overwrite heap + * garbage with a bit pattern. The RSS footprint (resident set size) gets bigger + * because it continuously touches all heap pages and that makes them less likely + * to get swapped out by the operating system. + * + * `number_of_native_contexts` The value of native\_context is the number of the + * top-level contexts currently active. Increase of this number over time indicates + * a memory leak. + * + * `number_of_detached_contexts` The value of detached\_context is the number + * of contexts that were detached and not yet garbage collected. This number + * being non-zero indicates a potential memory leak. + * + * `total_global_handles_size` The value of total\_global\_handles\_size is the + * total memory size of V8 global handles. + * + * `used_global_handles_size` The value of used\_global\_handles\_size is the + * used memory size of V8 global handles. + * + * `external_memory` The value of external\_memory is the memory size of array + * buffers and external strings. + * + * ```js + * { + * total_heap_size: 7326976, + * total_heap_size_executable: 4194304, + * total_physical_size: 7326976, + * total_available_size: 1152656, + * used_heap_size: 3476208, + * heap_size_limit: 1535115264, + * malloced_memory: 16384, + * peak_malloced_memory: 1127496, + * does_zap_garbage: 0, + * number_of_native_contexts: 1, + * number_of_detached_contexts: 0, + * total_global_handles_size: 8192, + * used_global_handles_size: 3296, + * external_memory: 318824 + * } + * ``` + * @since v1.0.0 + */ + function getHeapStatistics(): HeapInfo; + /** + * It returns an object with a structure similar to the + * [`cppgc::HeapStatistics`](https://v8docs.nodesource.com/node-22.4/d7/d51/heap-statistics_8h_source.html) + * object. See the [V8 documentation](https://v8docs.nodesource.com/node-22.4/df/d2f/structcppgc_1_1_heap_statistics.html) + * for more information about the properties of the object. + * + * ```js + * // Detailed + * ({ + * committed_size_bytes: 131072, + * resident_size_bytes: 131072, + * used_size_bytes: 152, + * space_statistics: [ + * { + * name: 'NormalPageSpace0', + * committed_size_bytes: 0, + * resident_size_bytes: 0, + * used_size_bytes: 0, + * page_stats: [{}], + * free_list_stats: {}, + * }, + * { + * name: 'NormalPageSpace1', + * committed_size_bytes: 131072, + * resident_size_bytes: 131072, + * used_size_bytes: 152, + * page_stats: [{}], + * free_list_stats: {}, + * }, + * { + * name: 'NormalPageSpace2', + * committed_size_bytes: 0, + * resident_size_bytes: 0, + * used_size_bytes: 0, + * page_stats: [{}], + * free_list_stats: {}, + * }, + * { + * name: 'NormalPageSpace3', + * committed_size_bytes: 0, + * resident_size_bytes: 0, + * used_size_bytes: 0, + * page_stats: [{}], + * free_list_stats: {}, + * }, + * { + * name: 'LargePageSpace', + * committed_size_bytes: 0, + * resident_size_bytes: 0, + * used_size_bytes: 0, + * page_stats: [{}], + * free_list_stats: {}, + * }, + * ], + * type_names: [], + * detail_level: 'detailed', + * }); + * ``` + * + * ```js + * // Brief + * ({ + * committed_size_bytes: 131072, + * resident_size_bytes: 131072, + * used_size_bytes: 128864, + * space_statistics: [], + * type_names: [], + * detail_level: 'brief', + * }); + * ``` + * @since v22.15.0 + * @param detailLevel **Default:** `'detailed'`. Specifies the level of detail in the returned statistics. + * Accepted values are: + * * `'brief'`: Brief statistics contain only the top-level + * allocated and used + * memory statistics for the entire heap. + * * `'detailed'`: Detailed statistics also contain a break + * down per space and page, as well as freelist statistics + * and object type histograms. + */ + function getCppHeapStatistics(detailLevel?: "brief" | "detailed"): object; + /** + * Returns statistics about the V8 heap spaces, i.e. the segments which make up + * the V8 heap. Neither the ordering of heap spaces, nor the availability of a + * heap space can be guaranteed as the statistics are provided via the + * V8 [`GetHeapSpaceStatistics`](https://v8docs.nodesource.com/node-13.2/d5/dda/classv8_1_1_isolate.html#ac673576f24fdc7a33378f8f57e1d13a4) function and may change from one V8 version to the + * next. + * + * The value returned is an array of objects containing the following properties: + * + * ```json + * [ + * { + * "space_name": "new_space", + * "space_size": 2063872, + * "space_used_size": 951112, + * "space_available_size": 80824, + * "physical_space_size": 2063872 + * }, + * { + * "space_name": "old_space", + * "space_size": 3090560, + * "space_used_size": 2493792, + * "space_available_size": 0, + * "physical_space_size": 3090560 + * }, + * { + * "space_name": "code_space", + * "space_size": 1260160, + * "space_used_size": 644256, + * "space_available_size": 960, + * "physical_space_size": 1260160 + * }, + * { + * "space_name": "map_space", + * "space_size": 1094160, + * "space_used_size": 201608, + * "space_available_size": 0, + * "physical_space_size": 1094160 + * }, + * { + * "space_name": "large_object_space", + * "space_size": 0, + * "space_used_size": 0, + * "space_available_size": 1490980608, + * "physical_space_size": 0 + * } + * ] + * ``` + * @since v6.0.0 + */ + function getHeapSpaceStatistics(): HeapSpaceInfo[]; + /** + * The `v8.setFlagsFromString()` method can be used to programmatically set + * V8 command-line flags. This method should be used with care. Changing settings + * after the VM has started may result in unpredictable behavior, including + * crashes and data loss; or it may simply do nothing. + * + * The V8 options available for a version of Node.js may be determined by running `node --v8-options`. + * + * Usage: + * + * ```js + * // Print GC events to stdout for one minute. + * import v8 from 'node:v8'; + * v8.setFlagsFromString('--trace_gc'); + * setTimeout(() => { v8.setFlagsFromString('--notrace_gc'); }, 60e3); + * ``` + * @since v1.0.0 + */ + function setFlagsFromString(flags: string): void; + /** + * This is similar to the [`queryObjects()` console API](https://developer.chrome.com/docs/devtools/console/utilities#queryObjects-function) + * provided by the Chromium DevTools console. It can be used to search for objects that have the matching constructor on its prototype chain + * in the heap after a full garbage collection, which can be useful for memory leak regression tests. To avoid surprising results, users should + * avoid using this API on constructors whose implementation they don't control, or on constructors that can be invoked by other parties in the + * application. + * + * To avoid accidental leaks, this API does not return raw references to the objects found. By default, it returns the count of the objects + * found. If `options.format` is `'summary'`, it returns an array containing brief string representations for each object. The visibility provided + * in this API is similar to what the heap snapshot provides, while users can save the cost of serialization and parsing and directly filter the + * target objects during the search. + * + * Only objects created in the current execution context are included in the results. + * + * ```js + * import { queryObjects } from 'node:v8'; + * class A { foo = 'bar'; } + * console.log(queryObjects(A)); // 0 + * const a = new A(); + * console.log(queryObjects(A)); // 1 + * // [ "A { foo: 'bar' }" ] + * console.log(queryObjects(A, { format: 'summary' })); + * + * class B extends A { bar = 'qux'; } + * const b = new B(); + * console.log(queryObjects(B)); // 1 + * // [ "B { foo: 'bar', bar: 'qux' }" ] + * console.log(queryObjects(B, { format: 'summary' })); + * + * // Note that, when there are child classes inheriting from a constructor, + * // the constructor also shows up in the prototype chain of the child + * // classes's prototoype, so the child classes's prototoype would also be + * // included in the result. + * console.log(queryObjects(A)); // 3 + * // [ "B { foo: 'bar', bar: 'qux' }", 'A {}', "A { foo: 'bar' }" ] + * console.log(queryObjects(A, { format: 'summary' })); + * ``` + * @param ctor The constructor that can be used to search on the prototype chain in order to filter target objects in the heap. + * @since v20.13.0 + * @experimental + */ + function queryObjects(ctor: Function): number | string[]; + function queryObjects(ctor: Function, options: { format: "count" }): number; + function queryObjects(ctor: Function, options: { format: "summary" }): string[]; + /** + * Generates a snapshot of the current V8 heap and returns a Readable + * Stream that may be used to read the JSON serialized representation. + * This JSON stream format is intended to be used with tools such as + * Chrome DevTools. The JSON schema is undocumented and specific to the + * V8 engine. Therefore, the schema may change from one version of V8 to the next. + * + * Creating a heap snapshot requires memory about twice the size of the heap at + * the time the snapshot is created. This results in the risk of OOM killers + * terminating the process. + * + * Generating a snapshot is a synchronous operation which blocks the event loop + * for a duration depending on the heap size. + * + * ```js + * // Print heap snapshot to the console + * import v8 from 'node:v8'; + * const stream = v8.getHeapSnapshot(); + * stream.pipe(process.stdout); + * ``` + * @since v11.13.0 + * @return A Readable containing the V8 heap snapshot. + */ + function getHeapSnapshot(options?: HeapSnapshotOptions): Readable; + /** + * Generates a snapshot of the current V8 heap and writes it to a JSON + * file. This file is intended to be used with tools such as Chrome + * DevTools. The JSON schema is undocumented and specific to the V8 + * engine, and may change from one version of V8 to the next. + * + * A heap snapshot is specific to a single V8 isolate. When using `worker threads`, a heap snapshot generated from the main thread will + * not contain any information about the workers, and vice versa. + * + * Creating a heap snapshot requires memory about twice the size of the heap at + * the time the snapshot is created. This results in the risk of OOM killers + * terminating the process. + * + * Generating a snapshot is a synchronous operation which blocks the event loop + * for a duration depending on the heap size. + * + * ```js + * import { writeHeapSnapshot } from 'node:v8'; + * import { + * Worker, + * isMainThread, + * parentPort, + * } from 'node:worker_threads'; + * + * if (isMainThread) { + * const worker = new Worker(__filename); + * + * worker.once('message', (filename) => { + * console.log(`worker heapdump: ${filename}`); + * // Now get a heapdump for the main thread. + * console.log(`main thread heapdump: ${writeHeapSnapshot()}`); + * }); + * + * // Tell the worker to create a heapdump. + * worker.postMessage('heapdump'); + * } else { + * parentPort.once('message', (message) => { + * if (message === 'heapdump') { + * // Generate a heapdump for the worker + * // and return the filename to the parent. + * parentPort.postMessage(writeHeapSnapshot()); + * } + * }); + * } + * ``` + * @since v11.13.0 + * @param filename The file path where the V8 heap snapshot is to be saved. If not specified, a file name with the pattern `'Heap-${yyyymmdd}-${hhmmss}-${pid}-${thread_id}.heapsnapshot'` will be + * generated, where `{pid}` will be the PID of the Node.js process, `{thread_id}` will be `0` when `writeHeapSnapshot()` is called from the main Node.js thread or the id of a + * worker thread. + * @return The filename where the snapshot was saved. + */ + function writeHeapSnapshot(filename?: string, options?: HeapSnapshotOptions): string; + /** + * Get statistics about code and its metadata in the heap, see + * V8 [`GetHeapCodeAndMetadataStatistics`](https://v8docs.nodesource.com/node-13.2/d5/dda/classv8_1_1_isolate.html#a6079122af17612ef54ef3348ce170866) API. Returns an object with the + * following properties: + * + * ```js + * { + * code_and_metadata_size: 212208, + * bytecode_and_metadata_size: 161368, + * external_script_source_size: 1410794, + * cpu_profiler_metadata_size: 0, + * } + * ``` + * @since v12.8.0 + */ + function getHeapCodeStatistics(): HeapCodeStatistics; + /** + * @since v24.8.0 + */ + interface CPUProfileHandle { + /** + * Stopping collecting the profile, then return a Promise that fulfills with an error or the + * profile data. + * @since v24.8.0 + */ + stop(): Promise; + /** + * Stopping collecting the profile and the profile will be discarded. + * @since v24.8.0 + */ + [Symbol.asyncDispose](): Promise; + } + /** + * @since v24.9.0 + */ + interface HeapProfileHandle { + /** + * Stopping collecting the profile, then return a Promise that fulfills with an error or the + * profile data. + * @since v24.9.0 + */ + stop(): Promise; + /** + * Stopping collecting the profile and the profile will be discarded. + * @since v24.9.0 + */ + [Symbol.asyncDispose](): Promise; + } + /** + * V8 only supports `Latin-1/ISO-8859-1` and `UTF16` as the underlying representation of a string. + * If the `content` uses `Latin-1/ISO-8859-1` as the underlying representation, this function will return true; + * otherwise, it returns false. + * + * If this method returns false, that does not mean that the string contains some characters not in `Latin-1/ISO-8859-1`. + * Sometimes a `Latin-1` string may also be represented as `UTF16`. + * + * ```js + * const { isStringOneByteRepresentation } = require('node:v8'); + * + * const Encoding = { + * latin1: 1, + * utf16le: 2, + * }; + * const buffer = Buffer.alloc(100); + * function writeString(input) { + * if (isStringOneByteRepresentation(input)) { + * buffer.writeUint8(Encoding.latin1); + * buffer.writeUint32LE(input.length, 1); + * buffer.write(input, 5, 'latin1'); + * } else { + * buffer.writeUint8(Encoding.utf16le); + * buffer.writeUint32LE(input.length * 2, 1); + * buffer.write(input, 5, 'utf16le'); + * } + * } + * writeString('hello'); + * writeString('你好'); + * ``` + * @since v23.10.0, v22.15.0 + */ + function isStringOneByteRepresentation(content: string): boolean; + /** + * @since v8.0.0 + */ + class Serializer { + /** + * Writes out a header, which includes the serialization format version. + */ + writeHeader(): void; + /** + * Serializes a JavaScript value and adds the serialized representation to the + * internal buffer. + * + * This throws an error if `value` cannot be serialized. + */ + writeValue(val: any): boolean; + /** + * Returns the stored internal buffer. This serializer should not be used once + * the buffer is released. Calling this method results in undefined behavior + * if a previous write has failed. + */ + releaseBuffer(): NonSharedBuffer; + /** + * Marks an `ArrayBuffer` as having its contents transferred out of band. + * Pass the corresponding `ArrayBuffer` in the deserializing context to `deserializer.transferArrayBuffer()`. + * @param id A 32-bit unsigned integer. + * @param arrayBuffer An `ArrayBuffer` instance. + */ + transferArrayBuffer(id: number, arrayBuffer: ArrayBuffer): void; + /** + * Write a raw 32-bit unsigned integer. + * For use inside of a custom `serializer._writeHostObject()`. + */ + writeUint32(value: number): void; + /** + * Write a raw 64-bit unsigned integer, split into high and low 32-bit parts. + * For use inside of a custom `serializer._writeHostObject()`. + */ + writeUint64(hi: number, lo: number): void; + /** + * Write a JS `number` value. + * For use inside of a custom `serializer._writeHostObject()`. + */ + writeDouble(value: number): void; + /** + * Write raw bytes into the serializer's internal buffer. The deserializer + * will require a way to compute the length of the buffer. + * For use inside of a custom `serializer._writeHostObject()`. + */ + writeRawBytes(buffer: NodeJS.ArrayBufferView): void; + } + /** + * A subclass of `Serializer` that serializes `TypedArray`(in particular `Buffer`) and `DataView` objects as host objects, and only + * stores the part of their underlying `ArrayBuffer`s that they are referring to. + * @since v8.0.0 + */ + class DefaultSerializer extends Serializer {} + /** + * @since v8.0.0 + */ + class Deserializer { + constructor(data: NodeJS.TypedArray); + /** + * Reads and validates a header (including the format version). + * May, for example, reject an invalid or unsupported wire format. In that case, + * an `Error` is thrown. + */ + readHeader(): boolean; + /** + * Deserializes a JavaScript value from the buffer and returns it. + */ + readValue(): any; + /** + * Marks an `ArrayBuffer` as having its contents transferred out of band. + * Pass the corresponding `ArrayBuffer` in the serializing context to `serializer.transferArrayBuffer()` (or return the `id` from `serializer._getSharedArrayBufferId()` in the case of + * `SharedArrayBuffer`s). + * @param id A 32-bit unsigned integer. + * @param arrayBuffer An `ArrayBuffer` instance. + */ + transferArrayBuffer(id: number, arrayBuffer: ArrayBuffer): void; + /** + * Reads the underlying wire format version. Likely mostly to be useful to + * legacy code reading old wire format versions. May not be called before `.readHeader()`. + */ + getWireFormatVersion(): number; + /** + * Read a raw 32-bit unsigned integer and return it. + * For use inside of a custom `deserializer._readHostObject()`. + */ + readUint32(): number; + /** + * Read a raw 64-bit unsigned integer and return it as an array `[hi, lo]` with two 32-bit unsigned integer entries. + * For use inside of a custom `deserializer._readHostObject()`. + */ + readUint64(): [number, number]; + /** + * Read a JS `number` value. + * For use inside of a custom `deserializer._readHostObject()`. + */ + readDouble(): number; + /** + * Read raw bytes from the deserializer's internal buffer. The `length` parameter + * must correspond to the length of the buffer that was passed to `serializer.writeRawBytes()`. + * For use inside of a custom `deserializer._readHostObject()`. + */ + readRawBytes(length: number): Buffer; + } + /** + * A subclass of `Deserializer` corresponding to the format written by `DefaultSerializer`. + * @since v8.0.0 + */ + class DefaultDeserializer extends Deserializer {} + /** + * Uses a `DefaultSerializer` to serialize `value` into a buffer. + * + * `ERR_BUFFER_TOO_LARGE` will be thrown when trying to + * serialize a huge object which requires buffer + * larger than `buffer.constants.MAX_LENGTH`. + * @since v8.0.0 + */ + function serialize(value: any): NonSharedBuffer; + /** + * Uses a `DefaultDeserializer` with default options to read a JS value + * from a buffer. + * @since v8.0.0 + * @param buffer A buffer returned by {@link serialize}. + */ + function deserialize(buffer: NodeJS.ArrayBufferView): any; + /** + * The `v8.takeCoverage()` method allows the user to write the coverage started by `NODE_V8_COVERAGE` to disk on demand. This method can be invoked multiple + * times during the lifetime of the process. Each time the execution counter will + * be reset and a new coverage report will be written to the directory specified + * by `NODE_V8_COVERAGE`. + * + * When the process is about to exit, one last coverage will still be written to + * disk unless {@link stopCoverage} is invoked before the process exits. + * @since v15.1.0, v14.18.0, v12.22.0 + */ + function takeCoverage(): void; + /** + * The `v8.stopCoverage()` method allows the user to stop the coverage collection + * started by `NODE_V8_COVERAGE`, so that V8 can release the execution count + * records and optimize code. This can be used in conjunction with {@link takeCoverage} if the user wants to collect the coverage on demand. + * @since v15.1.0, v14.18.0, v12.22.0 + */ + function stopCoverage(): void; + /** + * The API is a no-op if `--heapsnapshot-near-heap-limit` is already set from the command line or the API is called more than once. + * `limit` must be a positive integer. See [`--heapsnapshot-near-heap-limit`](https://nodejs.org/docs/latest-v24.x/api/cli.html#--heapsnapshot-near-heap-limitmax_count) for more information. + * @since v18.10.0, v16.18.0 + */ + function setHeapSnapshotNearHeapLimit(limit: number): void; + /** + * This API collects GC data in current thread. + * @since v19.6.0, v18.15.0 + */ + class GCProfiler { + /** + * Start collecting GC data. + * @since v19.6.0, v18.15.0 + */ + start(): void; + /** + * Stop collecting GC data and return an object. The content of object + * is as follows. + * + * ```json + * { + * "version": 1, + * "startTime": 1674059033862, + * "statistics": [ + * { + * "gcType": "Scavenge", + * "beforeGC": { + * "heapStatistics": { + * "totalHeapSize": 5005312, + * "totalHeapSizeExecutable": 524288, + * "totalPhysicalSize": 5226496, + * "totalAvailableSize": 4341325216, + * "totalGlobalHandlesSize": 8192, + * "usedGlobalHandlesSize": 2112, + * "usedHeapSize": 4883840, + * "heapSizeLimit": 4345298944, + * "mallocedMemory": 254128, + * "externalMemory": 225138, + * "peakMallocedMemory": 181760 + * }, + * "heapSpaceStatistics": [ + * { + * "spaceName": "read_only_space", + * "spaceSize": 0, + * "spaceUsedSize": 0, + * "spaceAvailableSize": 0, + * "physicalSpaceSize": 0 + * } + * ] + * }, + * "cost": 1574.14, + * "afterGC": { + * "heapStatistics": { + * "totalHeapSize": 6053888, + * "totalHeapSizeExecutable": 524288, + * "totalPhysicalSize": 5500928, + * "totalAvailableSize": 4341101384, + * "totalGlobalHandlesSize": 8192, + * "usedGlobalHandlesSize": 2112, + * "usedHeapSize": 4059096, + * "heapSizeLimit": 4345298944, + * "mallocedMemory": 254128, + * "externalMemory": 225138, + * "peakMallocedMemory": 181760 + * }, + * "heapSpaceStatistics": [ + * { + * "spaceName": "read_only_space", + * "spaceSize": 0, + * "spaceUsedSize": 0, + * "spaceAvailableSize": 0, + * "physicalSpaceSize": 0 + * } + * ] + * } + * } + * ], + * "endTime": 1674059036865 + * } + * ``` + * + * Here's an example. + * + * ```js + * import { GCProfiler } from 'node:v8'; + * const profiler = new GCProfiler(); + * profiler.start(); + * setTimeout(() => { + * console.log(profiler.stop()); + * }, 1000); + * ``` + * @since v19.6.0, v18.15.0 + */ + stop(): GCProfilerResult; + } + interface GCProfilerResult { + version: number; + startTime: number; + endTime: number; + statistics: Array<{ + gcType: string; + cost: number; + beforeGC: { + heapStatistics: HeapStatistics; + heapSpaceStatistics: HeapSpaceStatistics[]; + }; + afterGC: { + heapStatistics: HeapStatistics; + heapSpaceStatistics: HeapSpaceStatistics[]; + }; + }>; + } + interface HeapStatistics { + totalHeapSize: number; + totalHeapSizeExecutable: number; + totalPhysicalSize: number; + totalAvailableSize: number; + totalGlobalHandlesSize: number; + usedGlobalHandlesSize: number; + usedHeapSize: number; + heapSizeLimit: number; + mallocedMemory: number; + externalMemory: number; + peakMallocedMemory: number; + } + interface HeapSpaceStatistics { + spaceName: string; + spaceSize: number; + spaceUsedSize: number; + spaceAvailableSize: number; + physicalSpaceSize: number; + } + /** + * Called when a promise is constructed. This does not mean that corresponding before/after events will occur, only that the possibility exists. This will + * happen if a promise is created without ever getting a continuation. + * @since v17.1.0, v16.14.0 + * @param promise The promise being created. + * @param parent The promise continued from, if applicable. + */ + interface Init { + (promise: Promise, parent: Promise): void; + } + /** + * Called before a promise continuation executes. This can be in the form of `then()`, `catch()`, or `finally()` handlers or an await resuming. + * + * The before callback will be called 0 to N times. The before callback will typically be called 0 times if no continuation was ever made for the promise. + * The before callback may be called many times in the case where many continuations have been made from the same promise. + * @since v17.1.0, v16.14.0 + */ + interface Before { + (promise: Promise): void; + } + /** + * Called immediately after a promise continuation executes. This may be after a `then()`, `catch()`, or `finally()` handler or before an await after another await. + * @since v17.1.0, v16.14.0 + */ + interface After { + (promise: Promise): void; + } + /** + * Called when the promise receives a resolution or rejection value. This may occur synchronously in the case of {@link Promise.resolve()} or + * {@link Promise.reject()}. + * @since v17.1.0, v16.14.0 + */ + interface Settled { + (promise: Promise): void; + } + /** + * Key events in the lifetime of a promise have been categorized into four areas: creation of a promise, before/after a continuation handler is called or + * around an await, and when the promise resolves or rejects. + * + * Because promises are asynchronous resources whose lifecycle is tracked via the promise hooks mechanism, the `init()`, `before()`, `after()`, and + * `settled()` callbacks must not be async functions as they create more promises which would produce an infinite loop. + * @since v17.1.0, v16.14.0 + */ + interface HookCallbacks { + init?: Init; + before?: Before; + after?: After; + settled?: Settled; + } + interface PromiseHooks { + /** + * The `init` hook must be a plain function. Providing an async function will throw as it would produce an infinite microtask loop. + * @since v17.1.0, v16.14.0 + * @param init The {@link Init | `init` callback} to call when a promise is created. + * @return Call to stop the hook. + */ + onInit: (init: Init) => Function; + /** + * The `settled` hook must be a plain function. Providing an async function will throw as it would produce an infinite microtask loop. + * @since v17.1.0, v16.14.0 + * @param settled The {@link Settled | `settled` callback} to call when a promise is created. + * @return Call to stop the hook. + */ + onSettled: (settled: Settled) => Function; + /** + * The `before` hook must be a plain function. Providing an async function will throw as it would produce an infinite microtask loop. + * @since v17.1.0, v16.14.0 + * @param before The {@link Before | `before` callback} to call before a promise continuation executes. + * @return Call to stop the hook. + */ + onBefore: (before: Before) => Function; + /** + * The `after` hook must be a plain function. Providing an async function will throw as it would produce an infinite microtask loop. + * @since v17.1.0, v16.14.0 + * @param after The {@link After | `after` callback} to call after a promise continuation executes. + * @return Call to stop the hook. + */ + onAfter: (after: After) => Function; + /** + * Registers functions to be called for different lifetime events of each promise. + * The callbacks `init()`/`before()`/`after()`/`settled()` are called for the respective events during a promise's lifetime. + * All callbacks are optional. For example, if only promise creation needs to be tracked, then only the init callback needs to be passed. + * The hook callbacks must be plain functions. Providing async functions will throw as it would produce an infinite microtask loop. + * @since v17.1.0, v16.14.0 + * @param callbacks The {@link HookCallbacks | Hook Callbacks} to register + * @return Used for disabling hooks + */ + createHook: (callbacks: HookCallbacks) => Function; + } + /** + * The `promiseHooks` interface can be used to track promise lifecycle events. + * @since v17.1.0, v16.14.0 + */ + const promiseHooks: PromiseHooks; + type StartupSnapshotCallbackFn = (args: any) => any; + /** + * The `v8.startupSnapshot` interface can be used to add serialization and deserialization hooks for custom startup snapshots. + * + * ```bash + * $ node --snapshot-blob snapshot.blob --build-snapshot entry.js + * # This launches a process with the snapshot + * $ node --snapshot-blob snapshot.blob + * ``` + * + * In the example above, `entry.js` can use methods from the `v8.startupSnapshot` interface to specify how to save information for custom objects + * in the snapshot during serialization and how the information can be used to synchronize these objects during deserialization of the snapshot. + * For example, if the `entry.js` contains the following script: + * + * ```js + * 'use strict'; + * + * import fs from 'node:fs'; + * import zlib from 'node:zlib'; + * import path from 'node:path'; + * import assert from 'node:assert'; + * + * import v8 from 'node:v8'; + * + * class BookShelf { + * storage = new Map(); + * + * // Reading a series of files from directory and store them into storage. + * constructor(directory, books) { + * for (const book of books) { + * this.storage.set(book, fs.readFileSync(path.join(directory, book))); + * } + * } + * + * static compressAll(shelf) { + * for (const [ book, content ] of shelf.storage) { + * shelf.storage.set(book, zlib.gzipSync(content)); + * } + * } + * + * static decompressAll(shelf) { + * for (const [ book, content ] of shelf.storage) { + * shelf.storage.set(book, zlib.gunzipSync(content)); + * } + * } + * } + * + * // __dirname here is where the snapshot script is placed + * // during snapshot building time. + * const shelf = new BookShelf(__dirname, [ + * 'book1.en_US.txt', + * 'book1.es_ES.txt', + * 'book2.zh_CN.txt', + * ]); + * + * assert(v8.startupSnapshot.isBuildingSnapshot()); + * // On snapshot serialization, compress the books to reduce size. + * v8.startupSnapshot.addSerializeCallback(BookShelf.compressAll, shelf); + * // On snapshot deserialization, decompress the books. + * v8.startupSnapshot.addDeserializeCallback(BookShelf.decompressAll, shelf); + * v8.startupSnapshot.setDeserializeMainFunction((shelf) => { + * // process.env and process.argv are refreshed during snapshot + * // deserialization. + * const lang = process.env.BOOK_LANG || 'en_US'; + * const book = process.argv[1]; + * const name = `${book}.${lang}.txt`; + * console.log(shelf.storage.get(name)); + * }, shelf); + * ``` + * + * The resulted binary will get print the data deserialized from the snapshot during start up, using the refreshed `process.env` and `process.argv` of the launched process: + * + * ```bash + * $ BOOK_LANG=es_ES node --snapshot-blob snapshot.blob book1 + * # Prints content of book1.es_ES.txt deserialized from the snapshot. + * ``` + * + * Currently the application deserialized from a user-land snapshot cannot be snapshotted again, so these APIs are only available to applications that are not deserialized from a user-land snapshot. + * + * @since v18.6.0, v16.17.0 + */ + namespace startupSnapshot { + /** + * Add a callback that will be called when the Node.js instance is about to get serialized into a snapshot and exit. + * This can be used to release resources that should not or cannot be serialized or to convert user data into a form more suitable for serialization. + * @since v18.6.0, v16.17.0 + */ + function addSerializeCallback(callback: StartupSnapshotCallbackFn, data?: any): void; + /** + * Add a callback that will be called when the Node.js instance is deserialized from a snapshot. + * The `callback` and the `data` (if provided) will be serialized into the snapshot, they can be used to re-initialize the state of the application or + * to re-acquire resources that the application needs when the application is restarted from the snapshot. + * @since v18.6.0, v16.17.0 + */ + function addDeserializeCallback(callback: StartupSnapshotCallbackFn, data?: any): void; + /** + * This sets the entry point of the Node.js application when it is deserialized from a snapshot. This can be called only once in the snapshot building script. + * If called, the deserialized application no longer needs an additional entry point script to start up and will simply invoke the callback along with the deserialized + * data (if provided), otherwise an entry point script still needs to be provided to the deserialized application. + * @since v18.6.0, v16.17.0 + */ + function setDeserializeMainFunction(callback: StartupSnapshotCallbackFn, data?: any): void; + /** + * Returns true if the Node.js instance is run to build a snapshot. + * @since v18.6.0, v16.17.0 + */ + function isBuildingSnapshot(): boolean; + } +} +declare module "node:v8" { + export * from "v8"; +} diff --git a/.claude/hooks/check-new-deps/node_modules/@types/node/vm.d.ts b/.claude/hooks/check-new-deps/node_modules/@types/node/vm.d.ts new file mode 100644 index 00000000..50b7f09a --- /dev/null +++ b/.claude/hooks/check-new-deps/node_modules/@types/node/vm.d.ts @@ -0,0 +1,1180 @@ +/** + * The `node:vm` module enables compiling and running code within V8 Virtual + * Machine contexts. + * + * **The `node:vm` module is not a security** + * **mechanism. Do not use it to run untrusted code.** + * + * JavaScript code can be compiled and run immediately or + * compiled, saved, and run later. + * + * A common use case is to run the code in a different V8 Context. This means + * invoked code has a different global object than the invoking code. + * + * One can provide the context by `contextifying` an + * object. The invoked code treats any property in the context like a + * global variable. Any changes to global variables caused by the invoked + * code are reflected in the context object. + * + * ```js + * import vm from 'node:vm'; + * + * const x = 1; + * + * const context = { x: 2 }; + * vm.createContext(context); // Contextify the object. + * + * const code = 'x += 40; var y = 17;'; + * // `x` and `y` are global variables in the context. + * // Initially, x has the value 2 because that is the value of context.x. + * vm.runInContext(code, context); + * + * console.log(context.x); // 42 + * console.log(context.y); // 17 + * + * console.log(x); // 1; y is not defined. + * ``` + * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/vm.js) + */ +declare module "vm" { + import { NonSharedBuffer } from "node:buffer"; + import { ImportAttributes, ImportPhase } from "node:module"; + interface Context extends NodeJS.Dict {} + interface BaseOptions { + /** + * Specifies the filename used in stack traces produced by this script. + * @default '' + */ + filename?: string | undefined; + /** + * Specifies the line number offset that is displayed in stack traces produced by this script. + * @default 0 + */ + lineOffset?: number | undefined; + /** + * Specifies the column number offset that is displayed in stack traces produced by this script. + * @default 0 + */ + columnOffset?: number | undefined; + } + type DynamicModuleLoader = ( + specifier: string, + referrer: T, + importAttributes: ImportAttributes, + phase: ImportPhase, + ) => Module | Promise; + interface ScriptOptions extends BaseOptions { + /** + * Provides an optional data with V8's code cache data for the supplied source. + */ + cachedData?: NodeJS.ArrayBufferView | undefined; + /** @deprecated in favor of `script.createCachedData()` */ + produceCachedData?: boolean | undefined; + /** + * Used to specify how the modules should be loaded during the evaluation of this script when `import()` is called. This option is + * part of the experimental modules API. We do not recommend using it in a production environment. For detailed information, see + * [Support of dynamic `import()` in compilation APIs](https://nodejs.org/docs/latest-v24.x/api/vm.html#support-of-dynamic-import-in-compilation-apis). + * @experimental + */ + importModuleDynamically?: + | DynamicModuleLoader